mirror of
https://github.com/yuzu-emu/breakpad.git
synced 2024-10-20 07:38:23 +02:00
Add Mac symupload tool. Reviewed by bryner. Fixes issue #96.
git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@95 4c0a9323-5329-0410-9bdc-e9ce6186880e
This commit is contained in:
parent
9ddb3ae949
commit
62c79c5a40
135
src/tools/mac/symupload/minidump_upload.m
Normal file
135
src/tools/mac/symupload/minidump_upload.m
Normal file
@ -0,0 +1,135 @@
|
|||||||
|
// Copyright (c) 2006, Google Inc.
|
||||||
|
// All rights reserved.
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without
|
||||||
|
// modification, are permitted provided that the following conditions are
|
||||||
|
// met:
|
||||||
|
//
|
||||||
|
// * Redistributions of source code must retain the above copyright
|
||||||
|
// notice, this list of conditions and the following disclaimer.
|
||||||
|
// * Redistributions in binary form must reproduce the above
|
||||||
|
// copyright notice, this list of conditions and the following disclaimer
|
||||||
|
// in the documentation and/or other materials provided with the
|
||||||
|
// distribution.
|
||||||
|
// * Neither the name of Google Inc. nor the names of its
|
||||||
|
// contributors may be used to endorse or promote products derived from
|
||||||
|
// this software without specific prior written permission.
|
||||||
|
//
|
||||||
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
// minidump_upload.m: Upload a minidump to a HTTP server. The upload is sent as
|
||||||
|
// a multipart/form-data POST request with the following parameters:
|
||||||
|
// prod: the product name
|
||||||
|
// ver: the product version
|
||||||
|
// symbol_file: the airbag format symbol file
|
||||||
|
|
||||||
|
#import <unistd.h>
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
#import "common/mac/HTTPMultipartUpload.h"
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
NSString *minidumpPath;
|
||||||
|
NSString *uploadURLStr;
|
||||||
|
NSString *product;
|
||||||
|
NSString *version;
|
||||||
|
BOOL success;
|
||||||
|
} Options;
|
||||||
|
|
||||||
|
//=============================================================================
|
||||||
|
static void Start(Options *options) {
|
||||||
|
NSURL *url = [NSURL URLWithString:options->uploadURLStr];
|
||||||
|
HTTPMultipartUpload *ul = [[HTTPMultipartUpload alloc] initWithURL:url];
|
||||||
|
NSMutableDictionary *parameters = [NSMutableDictionary dictionary];
|
||||||
|
|
||||||
|
// Add parameters
|
||||||
|
[parameters setObject:options->product forKey:@"prod"];
|
||||||
|
[parameters setObject:options->version forKey:@"ver"];
|
||||||
|
[ul setParameters:parameters];
|
||||||
|
|
||||||
|
// Add file
|
||||||
|
[ul addFileAtPath:options->minidumpPath name:@"upload_file_minidump"];
|
||||||
|
|
||||||
|
// Send it
|
||||||
|
NSError *error = nil;
|
||||||
|
NSData *data = [ul send:&error];
|
||||||
|
NSString *result = [[NSString alloc] initWithData:data
|
||||||
|
encoding:NSUTF8StringEncoding];
|
||||||
|
|
||||||
|
NSLog(@"Send: %@", error ? [error description] : @"No Error");
|
||||||
|
NSLog(@"Response: %d", [[ul response] statusCode]);
|
||||||
|
NSLog(@"Result: %d bytes\n%@", [data length], result);
|
||||||
|
|
||||||
|
[result release];
|
||||||
|
[ul release];
|
||||||
|
options->success = !error;
|
||||||
|
}
|
||||||
|
|
||||||
|
//=============================================================================
|
||||||
|
static void
|
||||||
|
Usage(int argc, const char *argv[]) {
|
||||||
|
fprintf(stderr, "Submit minidump information.\n");
|
||||||
|
fprintf(stderr, "Usage: %s -p <product> -v <version> <minidump> "
|
||||||
|
"<upload-URL>\n", argv[0]);
|
||||||
|
fprintf(stderr, "<minidump> should be a minidump.\n");
|
||||||
|
fprintf(stderr, "<upload-URL> is the destination for the upload\n");
|
||||||
|
|
||||||
|
fprintf(stderr, "\t-h: Usage\n");
|
||||||
|
fprintf(stderr, "\t-?: Usage\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
//=============================================================================
|
||||||
|
static void
|
||||||
|
SetupOptions(int argc, const char *argv[], Options *options) {
|
||||||
|
extern int optind;
|
||||||
|
char ch;
|
||||||
|
|
||||||
|
while ((ch = getopt(argc, (char * const *)argv, "p:v:h?")) != -1) {
|
||||||
|
switch (ch) {
|
||||||
|
case 'p':
|
||||||
|
options->product = [NSString stringWithCString:optarg];
|
||||||
|
break;
|
||||||
|
case 'v':
|
||||||
|
options->version = [NSString stringWithCString:optarg];
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
Usage(argc, argv);
|
||||||
|
exit(0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((argc - optind) != 2) {
|
||||||
|
fprintf(stderr, "%s: Missing symbols file and/or upload-URL\n", argv[0]);
|
||||||
|
Usage(argc, argv);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
options->minidumpPath = [NSString stringWithCString:argv[optind]];
|
||||||
|
options->uploadURLStr = [NSString stringWithCString:argv[optind + 1]];
|
||||||
|
}
|
||||||
|
|
||||||
|
//=============================================================================
|
||||||
|
int main (int argc, const char * argv[]) {
|
||||||
|
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
|
||||||
|
Options options;
|
||||||
|
|
||||||
|
bzero(&options, sizeof(Options));
|
||||||
|
SetupOptions(argc, argv, &options);
|
||||||
|
Start(&options);
|
||||||
|
|
||||||
|
[pool release];
|
||||||
|
return options.success ? 0 : 1;
|
||||||
|
}
|
173
src/tools/mac/symupload/symupload.m
Normal file
173
src/tools/mac/symupload/symupload.m
Normal file
@ -0,0 +1,173 @@
|
|||||||
|
// Copyright (c) 2006, Google Inc.
|
||||||
|
// All rights reserved.
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without
|
||||||
|
// modification, are permitted provided that the following conditions are
|
||||||
|
// met:
|
||||||
|
//
|
||||||
|
// * Redistributions of source code must retain the above copyright
|
||||||
|
// notice, this list of conditions and the following disclaimer.
|
||||||
|
// * Redistributions in binary form must reproduce the above
|
||||||
|
// copyright notice, this list of conditions and the following disclaimer
|
||||||
|
// in the documentation and/or other materials provided with the
|
||||||
|
// distribution.
|
||||||
|
// * Neither the name of Google Inc. nor the names of its
|
||||||
|
// contributors may be used to endorse or promote products derived from
|
||||||
|
// this software without specific prior written permission.
|
||||||
|
//
|
||||||
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
// symupload.m: Upload a symbol file to a HTTP server. The upload is sent as
|
||||||
|
// a multipart/form-data POST request with the following parameters:
|
||||||
|
// code_file: the basename of the module, e.g. "app"
|
||||||
|
// debug_file: the basename of the debugging file, e.g. "app"
|
||||||
|
// debug_identifier: the debug file's identifier, usually consisting of
|
||||||
|
// the guid and age embedded in the pdb, e.g.
|
||||||
|
// "11111111BBBB3333DDDD555555555555F"
|
||||||
|
// version: the file version of the module, e.g. "1.2.3.4"
|
||||||
|
// os: the operating system that the module was built for
|
||||||
|
// cpu: the CPU that the module was built for (x86 or ppc)
|
||||||
|
// symbol_file: the contents of the airbag-format symbol file
|
||||||
|
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#include <Foundation/Foundation.h>
|
||||||
|
#include "HTTPMultipartUpload.h"
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
NSString *symbolsPath;
|
||||||
|
NSString *uploadURLStr;
|
||||||
|
NSString *version;
|
||||||
|
BOOL success;
|
||||||
|
} Options;
|
||||||
|
|
||||||
|
//=============================================================================
|
||||||
|
static NSArray *ModuleDataForSymbolFile(NSString *file) {
|
||||||
|
NSFileHandle *fh = [NSFileHandle fileHandleForReadingAtPath:file];
|
||||||
|
NSData *data = [fh readDataOfLength:1024];
|
||||||
|
NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
|
||||||
|
NSScanner *scanner = [NSScanner scannerWithString:str];
|
||||||
|
NSString *line;
|
||||||
|
NSArray *parts = nil;
|
||||||
|
|
||||||
|
if ([scanner scanUpToString:@"\n" intoString:&line])
|
||||||
|
parts = [line componentsSeparatedByString:@" "];
|
||||||
|
|
||||||
|
[str release];
|
||||||
|
|
||||||
|
return parts;
|
||||||
|
}
|
||||||
|
|
||||||
|
//=============================================================================
|
||||||
|
static NSString *CompactIdentifier(NSString *uuid, NSString *age) {
|
||||||
|
NSMutableString *str = [NSMutableString stringWithString:uuid];
|
||||||
|
[str replaceOccurrencesOfString:@"-" withString:@"" options:0
|
||||||
|
range:NSMakeRange(0, [str length])];
|
||||||
|
[str appendString:age];
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
|
//=============================================================================
|
||||||
|
static void Start(Options *options) {
|
||||||
|
NSURL *url = [NSURL URLWithString:options->uploadURLStr];
|
||||||
|
HTTPMultipartUpload *ul = [[HTTPMultipartUpload alloc] initWithURL:url];
|
||||||
|
NSMutableDictionary *parameters = [NSMutableDictionary dictionary];
|
||||||
|
NSArray *moduleParts = ModuleDataForSymbolFile(options->symbolsPath);
|
||||||
|
NSString *compactedID = CompactIdentifier([moduleParts objectAtIndex:3],
|
||||||
|
[moduleParts objectAtIndex:4]);
|
||||||
|
|
||||||
|
// Add parameters
|
||||||
|
if (options->version)
|
||||||
|
[parameters setObject:options->version forKey:@"version"];
|
||||||
|
|
||||||
|
// MODULE <os> <cpu> <uuid> <age> <module-name>
|
||||||
|
// 0 1 2 3 4 5
|
||||||
|
[parameters setObject:@"1" forKey:@"age"];
|
||||||
|
[parameters setObject:[moduleParts objectAtIndex:1] forKey:@"os"];
|
||||||
|
[parameters setObject:[moduleParts objectAtIndex:2] forKey:@"cpu"];
|
||||||
|
[parameters setObject:[moduleParts objectAtIndex:5] forKey:@"debug_file"];
|
||||||
|
[parameters setObject:[moduleParts objectAtIndex:5] forKey:@"code_file"];
|
||||||
|
[parameters setObject:compactedID forKey:@"debug_identifier"];
|
||||||
|
[ul setParameters:parameters];
|
||||||
|
|
||||||
|
// Add file
|
||||||
|
[ul addFileAtPath:options->symbolsPath name:@"symbol_file"];
|
||||||
|
|
||||||
|
// Send it
|
||||||
|
NSError *error = nil;
|
||||||
|
NSData *data = [ul send:&error];
|
||||||
|
NSString *result = [[NSString alloc] initWithData:data
|
||||||
|
encoding:NSUTF8StringEncoding];
|
||||||
|
|
||||||
|
fprintf(stdout, "Send: %s\n", error ? [[error description] UTF8String] :
|
||||||
|
"No Error");
|
||||||
|
fprintf(stdout, "Response: %d\n", [[ul response] statusCode]);
|
||||||
|
fprintf(stdout, "Result: %d bytes\n%s\n", [data length], [result UTF8String]);
|
||||||
|
|
||||||
|
[result release];
|
||||||
|
[ul release];
|
||||||
|
options->success = !error;
|
||||||
|
}
|
||||||
|
|
||||||
|
//=============================================================================
|
||||||
|
static void
|
||||||
|
Usage(int argc, const char *argv[]) {
|
||||||
|
fprintf(stderr, "Submit symbol information.\n");
|
||||||
|
fprintf(stderr, "Usage: %s [-v version] <symbols> <upload-URL>\n", argv[0]);
|
||||||
|
fprintf(stderr, "<symbols> should be created by using the dump_syms tool.\n");
|
||||||
|
fprintf(stderr, "<upload-URL> is the destination for the upload\n");
|
||||||
|
fprintf(stderr, "\t-v: Version information (e.g., 1.2.3.4)\n");
|
||||||
|
fprintf(stderr, "\t-h: Usage\n");
|
||||||
|
fprintf(stderr, "\t-?: Usage\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
//=============================================================================
|
||||||
|
static void
|
||||||
|
SetupOptions(int argc, const char *argv[], Options *options) {
|
||||||
|
extern int optind;
|
||||||
|
char ch;
|
||||||
|
|
||||||
|
while ((ch = getopt(argc, (char * const *)argv, "v:h?")) != -1) {
|
||||||
|
switch (ch) {
|
||||||
|
case 'v':
|
||||||
|
options->version = [NSString stringWithCString:optarg];
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
Usage(argc, argv);
|
||||||
|
exit(0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((argc - optind) != 2) {
|
||||||
|
fprintf(stderr, "%s: Missing symbols file and/or upload-URL\n", argv[0]);
|
||||||
|
Usage(argc, argv);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
options->symbolsPath = [NSString stringWithCString:argv[optind]];
|
||||||
|
options->uploadURLStr = [NSString stringWithCString:argv[optind + 1]];
|
||||||
|
}
|
||||||
|
|
||||||
|
//=============================================================================
|
||||||
|
int main (int argc, const char * argv[]) {
|
||||||
|
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
|
||||||
|
Options options;
|
||||||
|
|
||||||
|
bzero(&options, sizeof(Options));
|
||||||
|
SetupOptions(argc, argv, &options);
|
||||||
|
Start(&options);
|
||||||
|
|
||||||
|
[pool release];
|
||||||
|
return options.success ? 0 : 1;
|
||||||
|
}
|
303
src/tools/mac/symupload/symupload.xcodeproj/project.pbxproj
Normal file
303
src/tools/mac/symupload/symupload.xcodeproj/project.pbxproj
Normal file
@ -0,0 +1,303 @@
|
|||||||
|
// !$*UTF8*$!
|
||||||
|
{
|
||||||
|
archiveVersion = 1;
|
||||||
|
classes = {
|
||||||
|
};
|
||||||
|
objectVersion = 42;
|
||||||
|
objects = {
|
||||||
|
|
||||||
|
/* Begin PBXBuildFile section */
|
||||||
|
8DD76F9A0486AA7600D96B5E /* symupload.m in Sources */ = {isa = PBXBuildFile; fileRef = 08FB7796FE84155DC02AAC07 /* symupload.m */; settings = {ATTRIBUTES = (); }; };
|
||||||
|
8DD76F9C0486AA7600D96B5E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 08FB779EFE84155DC02AAC07 /* Foundation.framework */; };
|
||||||
|
9BC1D49E0B37427A00F2A2B4 /* minidump_upload.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BD836000B0544BA0055103E /* minidump_upload.m */; };
|
||||||
|
9BD8336A0B03E4080055103E /* HTTPMultipartUpload.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9BD833680B03E4080055103E /* HTTPMultipartUpload.h */; };
|
||||||
|
9BD8336B0B03E4080055103E /* HTTPMultipartUpload.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BD833690B03E4080055103E /* HTTPMultipartUpload.m */; };
|
||||||
|
9BD836180B0549F70055103E /* HTTPMultipartUpload.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BD833690B03E4080055103E /* HTTPMultipartUpload.m */; };
|
||||||
|
/* End PBXBuildFile section */
|
||||||
|
|
||||||
|
/* Begin PBXCopyFilesBuildPhase section */
|
||||||
|
8DD76F9E0486AA7600D96B5E /* CopyFiles */ = {
|
||||||
|
isa = PBXCopyFilesBuildPhase;
|
||||||
|
buildActionMask = 8;
|
||||||
|
dstPath = /usr/share/man/man1/;
|
||||||
|
dstSubfolderSpec = 0;
|
||||||
|
files = (
|
||||||
|
9BD8336A0B03E4080055103E /* HTTPMultipartUpload.h in CopyFiles */,
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 1;
|
||||||
|
};
|
||||||
|
/* End PBXCopyFilesBuildPhase section */
|
||||||
|
|
||||||
|
/* Begin PBXFileReference section */
|
||||||
|
08FB7796FE84155DC02AAC07 /* symupload.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = symupload.m; sourceTree = "<group>"; };
|
||||||
|
08FB779EFE84155DC02AAC07 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; };
|
||||||
|
8DD76FA10486AA7600D96B5E /* symupload */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = symupload; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
|
9BD833680B03E4080055103E /* HTTPMultipartUpload.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HTTPMultipartUpload.h; path = ../../../common/mac/HTTPMultipartUpload.h; sourceTree = "<group>"; };
|
||||||
|
9BD833690B03E4080055103E /* HTTPMultipartUpload.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HTTPMultipartUpload.m; path = ../../../common/mac/HTTPMultipartUpload.m; sourceTree = "<group>"; };
|
||||||
|
9BD835FB0B0544950055103E /* minidump_upload */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = minidump_upload; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
|
9BD836000B0544BA0055103E /* minidump_upload.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = minidump_upload.m; sourceTree = "<group>"; };
|
||||||
|
/* End PBXFileReference section */
|
||||||
|
|
||||||
|
/* Begin PBXFrameworksBuildPhase section */
|
||||||
|
8DD76F9B0486AA7600D96B5E /* Frameworks */ = {
|
||||||
|
isa = PBXFrameworksBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
8DD76F9C0486AA7600D96B5E /* Foundation.framework in Frameworks */,
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
9BD835F90B0544950055103E /* Frameworks */ = {
|
||||||
|
isa = PBXFrameworksBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
/* End PBXFrameworksBuildPhase section */
|
||||||
|
|
||||||
|
/* Begin PBXGroup section */
|
||||||
|
08FB7794FE84155DC02AAC07 /* symupload */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
08FB7796FE84155DC02AAC07 /* symupload.m */,
|
||||||
|
9BD836000B0544BA0055103E /* minidump_upload.m */,
|
||||||
|
9BD833680B03E4080055103E /* HTTPMultipartUpload.h */,
|
||||||
|
9BD833690B03E4080055103E /* HTTPMultipartUpload.m */,
|
||||||
|
08FB779DFE84155DC02AAC07 /* External Frameworks and Libraries */,
|
||||||
|
1AB674ADFE9D54B511CA2CBB /* Products */,
|
||||||
|
);
|
||||||
|
name = symupload;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
08FB779DFE84155DC02AAC07 /* External Frameworks and Libraries */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
08FB779EFE84155DC02AAC07 /* Foundation.framework */,
|
||||||
|
);
|
||||||
|
name = "External Frameworks and Libraries";
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
1AB674ADFE9D54B511CA2CBB /* Products */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
8DD76FA10486AA7600D96B5E /* symupload */,
|
||||||
|
9BD835FB0B0544950055103E /* minidump_upload */,
|
||||||
|
);
|
||||||
|
name = Products;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
/* End PBXGroup section */
|
||||||
|
|
||||||
|
/* Begin PBXNativeTarget section */
|
||||||
|
8DD76F960486AA7600D96B5E /* symupload */ = {
|
||||||
|
isa = PBXNativeTarget;
|
||||||
|
buildConfigurationList = 1DEB927408733DD40010E9CD /* Build configuration list for PBXNativeTarget "symupload" */;
|
||||||
|
buildPhases = (
|
||||||
|
8DD76F990486AA7600D96B5E /* Sources */,
|
||||||
|
8DD76F9B0486AA7600D96B5E /* Frameworks */,
|
||||||
|
8DD76F9E0486AA7600D96B5E /* CopyFiles */,
|
||||||
|
);
|
||||||
|
buildRules = (
|
||||||
|
);
|
||||||
|
dependencies = (
|
||||||
|
);
|
||||||
|
name = symupload;
|
||||||
|
productInstallPath = "$(HOME)/bin";
|
||||||
|
productName = symupload;
|
||||||
|
productReference = 8DD76FA10486AA7600D96B5E /* symupload */;
|
||||||
|
productType = "com.apple.product-type.tool";
|
||||||
|
};
|
||||||
|
9BD835FA0B0544950055103E /* minidump_upload */ = {
|
||||||
|
isa = PBXNativeTarget;
|
||||||
|
buildConfigurationList = 9BD836020B0544BB0055103E /* Build configuration list for PBXNativeTarget "minidump_upload" */;
|
||||||
|
buildPhases = (
|
||||||
|
9BD835F80B0544950055103E /* Sources */,
|
||||||
|
9BD835F90B0544950055103E /* Frameworks */,
|
||||||
|
);
|
||||||
|
buildRules = (
|
||||||
|
);
|
||||||
|
dependencies = (
|
||||||
|
);
|
||||||
|
name = minidump_upload;
|
||||||
|
productName = minidump_upload;
|
||||||
|
productReference = 9BD835FB0B0544950055103E /* minidump_upload */;
|
||||||
|
productType = "com.apple.product-type.tool";
|
||||||
|
};
|
||||||
|
/* End PBXNativeTarget section */
|
||||||
|
|
||||||
|
/* Begin PBXProject section */
|
||||||
|
08FB7793FE84155DC02AAC07 /* Project object */ = {
|
||||||
|
isa = PBXProject;
|
||||||
|
buildConfigurationList = 1DEB927808733DD40010E9CD /* Build configuration list for PBXProject "symupload" */;
|
||||||
|
hasScannedForEncodings = 1;
|
||||||
|
mainGroup = 08FB7794FE84155DC02AAC07 /* symupload */;
|
||||||
|
projectDirPath = "";
|
||||||
|
targets = (
|
||||||
|
8DD76F960486AA7600D96B5E /* symupload */,
|
||||||
|
9BD835FA0B0544950055103E /* minidump_upload */,
|
||||||
|
);
|
||||||
|
};
|
||||||
|
/* End PBXProject section */
|
||||||
|
|
||||||
|
/* Begin PBXSourcesBuildPhase section */
|
||||||
|
8DD76F990486AA7600D96B5E /* Sources */ = {
|
||||||
|
isa = PBXSourcesBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
8DD76F9A0486AA7600D96B5E /* symupload.m in Sources */,
|
||||||
|
9BD8336B0B03E4080055103E /* HTTPMultipartUpload.m in Sources */,
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
9BD835F80B0544950055103E /* Sources */ = {
|
||||||
|
isa = PBXSourcesBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
9BD836180B0549F70055103E /* HTTPMultipartUpload.m in Sources */,
|
||||||
|
9BC1D49E0B37427A00F2A2B4 /* minidump_upload.m in Sources */,
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
/* End PBXSourcesBuildPhase section */
|
||||||
|
|
||||||
|
/* Begin XCBuildConfiguration section */
|
||||||
|
1DEB927508733DD40010E9CD /* Debug */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
COPY_PHASE_STRIP = NO;
|
||||||
|
GCC_C_LANGUAGE_STANDARD = c99;
|
||||||
|
GCC_DYNAMIC_NO_PIC = NO;
|
||||||
|
GCC_ENABLE_FIX_AND_CONTINUE = YES;
|
||||||
|
GCC_MODEL_TUNING = G5;
|
||||||
|
GCC_OPTIMIZATION_LEVEL = 0;
|
||||||
|
GCC_PRECOMPILE_PREFIX_HEADER = NO;
|
||||||
|
GCC_PREFIX_HEADER = "";
|
||||||
|
INSTALL_PATH = "$(HOME)/bin";
|
||||||
|
PRODUCT_NAME = symupload;
|
||||||
|
USER_HEADER_SEARCH_PATHS = "../../../** $(inherited)";
|
||||||
|
ZERO_LINK = NO;
|
||||||
|
};
|
||||||
|
name = Debug;
|
||||||
|
};
|
||||||
|
1DEB927608733DD40010E9CD /* Release */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ARCHS = (
|
||||||
|
ppc,
|
||||||
|
i386,
|
||||||
|
);
|
||||||
|
GCC_C_LANGUAGE_STANDARD = c99;
|
||||||
|
GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
|
||||||
|
GCC_MODEL_TUNING = G5;
|
||||||
|
GCC_PRECOMPILE_PREFIX_HEADER = NO;
|
||||||
|
GCC_PREFIX_HEADER = "";
|
||||||
|
INSTALL_PATH = "$(HOME)/bin";
|
||||||
|
PRODUCT_NAME = symupload;
|
||||||
|
USER_HEADER_SEARCH_PATHS = "../../../** $(inherited)";
|
||||||
|
ZERO_LINK = NO;
|
||||||
|
};
|
||||||
|
name = Release;
|
||||||
|
};
|
||||||
|
1DEB927908733DD40010E9CD /* Debug */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
||||||
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
|
PREBINDING = NO;
|
||||||
|
SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
|
||||||
|
};
|
||||||
|
name = Debug;
|
||||||
|
};
|
||||||
|
1DEB927A08733DD40010E9CD /* Release */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
||||||
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
|
PREBINDING = NO;
|
||||||
|
SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
|
||||||
|
};
|
||||||
|
name = Release;
|
||||||
|
};
|
||||||
|
9BD836030B0544BB0055103E /* Debug */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
COPY_PHASE_STRIP = NO;
|
||||||
|
GCC_DYNAMIC_NO_PIC = NO;
|
||||||
|
GCC_ENABLE_FIX_AND_CONTINUE = YES;
|
||||||
|
GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
|
||||||
|
GCC_MODEL_TUNING = G5;
|
||||||
|
GCC_OPTIMIZATION_LEVEL = 0;
|
||||||
|
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||||
|
GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h";
|
||||||
|
INSTALL_PATH = "$(HOME)/bin";
|
||||||
|
OTHER_LDFLAGS = (
|
||||||
|
"-framework",
|
||||||
|
Foundation,
|
||||||
|
"-framework",
|
||||||
|
AppKit,
|
||||||
|
);
|
||||||
|
PREBINDING = NO;
|
||||||
|
PRODUCT_NAME = minidump_upload;
|
||||||
|
USER_HEADER_SEARCH_PATHS = "../../../**";
|
||||||
|
ZERO_LINK = NO;
|
||||||
|
};
|
||||||
|
name = Debug;
|
||||||
|
};
|
||||||
|
9BD836040B0544BB0055103E /* Release */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
COPY_PHASE_STRIP = YES;
|
||||||
|
GCC_ENABLE_FIX_AND_CONTINUE = NO;
|
||||||
|
GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
|
||||||
|
GCC_MODEL_TUNING = G5;
|
||||||
|
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||||
|
GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h";
|
||||||
|
INSTALL_PATH = "$(HOME)/bin";
|
||||||
|
OTHER_LDFLAGS = (
|
||||||
|
"-framework",
|
||||||
|
Foundation,
|
||||||
|
"-framework",
|
||||||
|
AppKit,
|
||||||
|
);
|
||||||
|
PREBINDING = NO;
|
||||||
|
PRODUCT_NAME = minidump_upload;
|
||||||
|
USER_HEADER_SEARCH_PATHS = "../../../**";
|
||||||
|
ZERO_LINK = NO;
|
||||||
|
};
|
||||||
|
name = Release;
|
||||||
|
};
|
||||||
|
/* End XCBuildConfiguration section */
|
||||||
|
|
||||||
|
/* Begin XCConfigurationList section */
|
||||||
|
1DEB927408733DD40010E9CD /* Build configuration list for PBXNativeTarget "symupload" */ = {
|
||||||
|
isa = XCConfigurationList;
|
||||||
|
buildConfigurations = (
|
||||||
|
1DEB927508733DD40010E9CD /* Debug */,
|
||||||
|
1DEB927608733DD40010E9CD /* Release */,
|
||||||
|
);
|
||||||
|
defaultConfigurationIsVisible = 0;
|
||||||
|
defaultConfigurationName = Release;
|
||||||
|
};
|
||||||
|
1DEB927808733DD40010E9CD /* Build configuration list for PBXProject "symupload" */ = {
|
||||||
|
isa = XCConfigurationList;
|
||||||
|
buildConfigurations = (
|
||||||
|
1DEB927908733DD40010E9CD /* Debug */,
|
||||||
|
1DEB927A08733DD40010E9CD /* Release */,
|
||||||
|
);
|
||||||
|
defaultConfigurationIsVisible = 0;
|
||||||
|
defaultConfigurationName = Release;
|
||||||
|
};
|
||||||
|
9BD836020B0544BB0055103E /* Build configuration list for PBXNativeTarget "minidump_upload" */ = {
|
||||||
|
isa = XCConfigurationList;
|
||||||
|
buildConfigurations = (
|
||||||
|
9BD836030B0544BB0055103E /* Debug */,
|
||||||
|
9BD836040B0544BB0055103E /* Release */,
|
||||||
|
);
|
||||||
|
defaultConfigurationIsVisible = 0;
|
||||||
|
defaultConfigurationName = Release;
|
||||||
|
};
|
||||||
|
/* End XCConfigurationList section */
|
||||||
|
};
|
||||||
|
rootObject = 08FB7793FE84155DC02AAC07 /* Project object */;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user