@@ -73,6 +73,7 @@ - (void) dealloc
73
73
[mOptionString release ];
74
74
[mOptionsData release ];
75
75
[mUtf8Data release ];
76
+ [mArgumentsFilename release ];
76
77
77
78
[super dealloc ];
78
79
}
@@ -87,6 +88,10 @@ - (void) setTarget: (id) target
87
88
mTarget = target;
88
89
}
89
90
91
+ - (void ) setArgumentsFilename : (NSString *)filename
92
+ {
93
+ mArgumentsFilename = [filename copy ];
94
+ }
90
95
91
96
- (void ) setGetoptLongOnly : (BOOL ) getoptLongOnly
92
97
{
@@ -163,6 +168,33 @@ - (NSArray *) parseOptions
163
168
{
164
169
NSProcessInfo * processInfo = [NSProcessInfo processInfo ];
165
170
NSArray * arguments = [processInfo arguments ];
171
+
172
+ if (mArgumentsFilename != nil ) {
173
+ if (NSClassFromString (@" NSJSONSerialization" ) == nil ) {
174
+ fprintf (stderr, " Warning: ignoring %s , feature supported from OS X 10.7 onwards\n " , [mArgumentsFilename UTF8String ]);
175
+ } else {
176
+ NSFileManager *fm = [NSFileManager defaultManager ];
177
+ NSString *argumentsFilePath = [[fm currentDirectoryPath ] stringByAppendingPathComponent: mArgumentsFilename];
178
+ if ([fm fileExistsAtPath: argumentsFilePath]) {
179
+ NSError *error;
180
+ NSArray *argumentsFromFile = [NSJSONSerialization JSONObjectWithData: [NSData dataWithContentsOfFile: argumentsFilePath] options: 0 error: &error];
181
+ if (argumentsFromFile != nil ) {
182
+ NSAssert ([arguments count ] > 0 , @" Process has no arguments (not even the command). Weird." );
183
+ NSString *command = [arguments objectAtIndex: 0 ];
184
+ arguments = [arguments subarrayWithRange: NSMakeRange (1 , [arguments count ] - 1 )];
185
+
186
+ NSMutableArray *mutableArguments = [NSMutableArray arrayWithObject: command];
187
+ [mutableArguments addObjectsFromArray: argumentsFromFile];
188
+ [mutableArguments addObjectsFromArray: arguments];
189
+ arguments = [NSArray arrayWithArray: mutableArguments];
190
+ } else {
191
+ fprintf (stderr, " Error reading %s : %s \n " , [mArgumentsFilename UTF8String ], [[error localizedDescription ] UTF8String ]);
192
+ exit (1 );
193
+ }
194
+ }
195
+ }
196
+ }
197
+
166
198
NSString * command = [processInfo processName ];
167
199
return [self parseOptionsWithArguments: arguments command: command];
168
200
}
0 commit comments