Kaydet (Commit) 3d3b7467 authored tarafından Jack Jansen's avatar Jack Jansen

Optionally honour #! paths in scripts. Fixes #676358.

üst 996acf12
...@@ -2,12 +2,13 @@ ...@@ -2,12 +2,13 @@
IBClasses = ( IBClasses = (
{CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; },
{ {
ACTIONS = {do_apply = id; do_cancel = id; do_reset = id; do_run = id; }; ACTIONS = {"do_apply" = id; "do_cancel" = id; "do_reset" = id; "do_run" = id; };
CLASS = MyDocument; CLASS = MyDocument;
LANGUAGE = ObjC; LANGUAGE = ObjC;
OUTLETS = { OUTLETS = {
commandline = NSTextField; commandline = NSTextField;
debug = NSButton; debug = NSButton;
honourhashbang = NSButton;
inspect = NSButton; inspect = NSButton;
interpreter = NSTextField; interpreter = NSTextField;
nosite = NSButton; nosite = NSButton;
...@@ -15,7 +16,7 @@ ...@@ -15,7 +16,7 @@
others = NSTextField; others = NSTextField;
tabs = NSButton; tabs = NSButton;
verbose = NSButton; verbose = NSButton;
with_terminal = NSButton; "with_terminal" = NSButton;
}; };
SUPERCLASS = NSDocument; SUPERCLASS = NSDocument;
} }
......
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist SYSTEM "file://localhost/System/Library/DTDs/PropertyList.dtd"> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="0.9"> <plist version="1.0">
<dict> <dict>
<key>IBDocumentLocation</key> <key>IBDocumentLocation</key>
<string>265 40 356 240 0 0 800 578 </string> <string>551 90 356 240 0 0 1280 1002 </string>
<key>IBFramework Version</key> <key>IBFramework Version</key>
<string>263.2</string> <string>286.0</string>
<key>IBOpenObjects</key> <key>IBOpenObjects</key>
<array> <array>
<integer>5</integer> <integer>5</integer>
</array> </array>
<key>IBSystem Version</key> <key>IBSystem Version</key>
<string>5S66</string> <string>6I32</string>
</dict> </dict>
</plist> </plist>
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
@protocol FileSettingsSource @protocol FileSettingsSource
- (NSString *) interpreter; - (NSString *) interpreter;
- (BOOL) honourhashbang;
- (BOOL) debug; - (BOOL) debug;
- (BOOL) verbose; - (BOOL) verbose;
- (BOOL) inspect; - (BOOL) inspect;
...@@ -24,6 +25,7 @@ ...@@ -24,6 +25,7 @@
{ {
NSString *interpreter; // The pathname of the interpreter to use NSString *interpreter; // The pathname of the interpreter to use
NSArray *interpreters; // List of known interpreters NSArray *interpreters; // List of known interpreters
BOOL honourhashbang; // #! line overrides interpreter
BOOL debug; // -d option: debug parser BOOL debug; // -d option: debug parser
BOOL verbose; // -v option: verbose import BOOL verbose; // -v option: verbose import
BOOL inspect; // -i option: interactive mode after script BOOL inspect; // -i option: interactive mode after script
......
...@@ -69,6 +69,7 @@ ...@@ -69,6 +69,7 @@
if (!self) return self; if (!self) return self;
interpreter = [source->interpreter retain]; interpreter = [source->interpreter retain];
honourhashbang = source->honourhashbang;
debug = source->debug; debug = source->debug;
verbose = source->verbose; verbose = source->verbose;
inspect = source->inspect; inspect = source->inspect;
...@@ -182,6 +183,7 @@ ...@@ -182,6 +183,7 @@
- (void)updateFromSource: (id <FileSettingsSource>)source - (void)updateFromSource: (id <FileSettingsSource>)source
{ {
interpreter = [[source interpreter] retain]; interpreter = [[source interpreter] retain];
honourhashbang = [source honourhashbang];
debug = [source debug]; debug = [source debug];
verbose = [source verbose]; verbose = [source verbose];
inspect = [source inspect]; inspect = [source inspect];
...@@ -196,6 +198,7 @@ ...@@ -196,6 +198,7 @@
NSUserDefaults *defaults; NSUserDefaults *defaults;
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys: NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
interpreter, @"interpreter", interpreter, @"interpreter",
[NSNumber numberWithBool: honourhashbang], @"honourhashbang",
[NSNumber numberWithBool: debug], @"debug", [NSNumber numberWithBool: debug], @"debug",
[NSNumber numberWithBool: verbose], @"verbose", [NSNumber numberWithBool: verbose], @"verbose",
[NSNumber numberWithBool: inspect], @"inspect", [NSNumber numberWithBool: inspect], @"inspect",
...@@ -216,6 +219,8 @@ ...@@ -216,6 +219,8 @@
value = [dict objectForKey: @"interpreter"]; value = [dict objectForKey: @"interpreter"];
if (value) interpreter = [value retain]; if (value) interpreter = [value retain];
value = [dict objectForKey: @"honourhashbang"];
if (value) honourhashbang = [value boolValue];
value = [dict objectForKey: @"debug"]; value = [dict objectForKey: @"debug"];
if (value) debug = [value boolValue]; if (value) debug = [value boolValue];
value = [dict objectForKey: @"verbose"]; value = [dict objectForKey: @"verbose"];
...@@ -236,9 +241,27 @@ ...@@ -236,9 +241,27 @@
- (NSString *)commandLineForScript: (NSString *)script - (NSString *)commandLineForScript: (NSString *)script
{ {
NSString *cur_interp = NULL;
char hashbangbuf[1024];
FILE *fp;
char *p;
if (honourhashbang &&
(fp=fopen([script cString], "r")) &&
fgets(hashbangbuf, sizeof(hashbangbuf), fp) &&
strncmp(hashbangbuf, "#!", 2) == 0 &&
(p=strchr(hashbangbuf, '\n'))) {
*p = '\0';
p = hashbangbuf + 2;
while (*p == ' ') p++;
cur_interp = [NSString stringWithCString: p];
}
if (!cur_interp)
cur_interp = interpreter;
return [NSString stringWithFormat: return [NSString stringWithFormat:
@"\"%@\"%s%s%s%s%s%s %@ \"%@\" %s", @"\"%@\"%s%s%s%s%s%s %@ \"%@\" %s",
interpreter, cur_interp,
debug?" -d":"", debug?" -d":"",
verbose?" -v":"", verbose?" -v":"",
inspect?" -i":"", inspect?" -i":"",
...@@ -254,6 +277,7 @@ ...@@ -254,6 +277,7 @@
// FileSettingsSource protocol // FileSettingsSource protocol
- (NSString *) interpreter { return interpreter;}; - (NSString *) interpreter { return interpreter;};
- (BOOL) honourhashbang { return honourhashbang; };
- (BOOL) debug { return debug;}; - (BOOL) debug { return debug;};
- (BOOL) verbose { return verbose;}; - (BOOL) verbose { return verbose;};
- (BOOL) inspect { return inspect;}; - (BOOL) inspect { return inspect;};
......
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
@interface MyDocument : NSDocument <FileSettingsSource> @interface MyDocument : NSDocument <FileSettingsSource>
{ {
IBOutlet NSTextField *interpreter; IBOutlet NSTextField *interpreter;
IBOutlet NSButton *honourhashbang;
IBOutlet NSButton *debug; IBOutlet NSButton *debug;
IBOutlet NSButton *verbose; IBOutlet NSButton *verbose;
IBOutlet NSButton *inspect; IBOutlet NSButton *inspect;
......
...@@ -52,6 +52,7 @@ ...@@ -52,6 +52,7 @@
// [[self window] setTitle: script]; // [[self window] setTitle: script];
[interpreter setStringValue: [settings interpreter]]; [interpreter setStringValue: [settings interpreter]];
[honourhashbang setState: [settings honourhashbang]];
[debug setState: [settings debug]]; [debug setState: [settings debug]];
[verbose setState: [settings verbose]]; [verbose setState: [settings verbose]];
[inspect setState: [settings inspect]]; [inspect setState: [settings inspect]];
...@@ -152,6 +153,7 @@ ...@@ -152,6 +153,7 @@
// FileSettingsSource protocol // FileSettingsSource protocol
- (NSString *) interpreter { return [interpreter stringValue];}; - (NSString *) interpreter { return [interpreter stringValue];};
- (BOOL) honourhashbang { return [honourhashbang state];};
- (BOOL) debug { return [debug state];}; - (BOOL) debug { return [debug state];};
- (BOOL) verbose { return [verbose state];}; - (BOOL) verbose { return [verbose state];};
- (BOOL) inspect { return [inspect state];}; - (BOOL) inspect { return [inspect state];};
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
commandline = NSTextField; commandline = NSTextField;
debug = NSButton; debug = NSButton;
filetype = NSPopUpButton; filetype = NSPopUpButton;
honourhashbang = NSButton;
inspect = NSButton; inspect = NSButton;
interpreter = NSTextField; interpreter = NSTextField;
nosite = NSButton; nosite = NSButton;
......
...@@ -3,14 +3,14 @@ ...@@ -3,14 +3,14 @@
<plist version="1.0"> <plist version="1.0">
<dict> <dict>
<key>IBDocumentLocation</key> <key>IBDocumentLocation</key>
<string>126 59 356 240 0 0 1024 746 </string> <string>660 84 519 534 0 0 1280 1002 </string>
<key>IBFramework Version</key> <key>IBFramework Version</key>
<string>291.0</string> <string>286.0</string>
<key>IBOpenObjects</key> <key>IBOpenObjects</key>
<array> <array>
<integer>5</integer> <integer>5</integer>
</array> </array>
<key>IBSystem Version</key> <key>IBSystem Version</key>
<string>6G30</string> <string>6I32</string>
</dict> </dict>
</plist> </plist>
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
{ {
IBOutlet NSPopUpButton *filetype; IBOutlet NSPopUpButton *filetype;
IBOutlet NSTextField *interpreter; IBOutlet NSTextField *interpreter;
IBOutlet NSButton *honourhashbang;
IBOutlet NSButton *debug; IBOutlet NSButton *debug;
IBOutlet NSButton *verbose; IBOutlet NSButton *verbose;
IBOutlet NSButton *inspect; IBOutlet NSButton *inspect;
......
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
// [[self window] setTitle: script]; // [[self window] setTitle: script];
[interpreter setStringValue: [settings interpreter]]; [interpreter setStringValue: [settings interpreter]];
[honourhashbang setState: [settings honourhashbang]];
[debug setState: [settings debug]]; [debug setState: [settings debug]];
[verbose setState: [settings verbose]]; [verbose setState: [settings verbose]];
[inspect setState: [settings inspect]]; [inspect setState: [settings inspect]];
...@@ -74,6 +75,7 @@ ...@@ -74,6 +75,7 @@
// FileSettingsSource protocol // FileSettingsSource protocol
- (NSString *) interpreter { return [interpreter stringValue];}; - (NSString *) interpreter { return [interpreter stringValue];};
- (BOOL) honourhashbang { return [honourhashbang state]; };
- (BOOL) debug { return [debug state];}; - (BOOL) debug { return [debug state];};
- (BOOL) verbose { return [verbose state];}; - (BOOL) verbose { return [verbose state];};
- (BOOL) inspect { return [inspect state];}; - (BOOL) inspect { return [inspect state];};
......
...@@ -132,7 +132,6 @@ ...@@ -132,7 +132,6 @@
4A9504D0FFE6A4CB11CA0CBA, 4A9504D0FFE6A4CB11CA0CBA,
4A9504D1FFE6A4CB11CA0CBA, 4A9504D1FFE6A4CB11CA0CBA,
); );
hasScannedForEncodings = 1;
isa = PBXProject; isa = PBXProject;
mainGroup = 2A37F4AAFDCFA73011CA2CEA; mainGroup = 2A37F4AAFDCFA73011CA2CEA;
projectDirPath = ""; projectDirPath = "";
...@@ -404,6 +403,7 @@ ...@@ -404,6 +403,7 @@
</dict> </dict>
</plist> </plist>
"; ";
shouldUseHeadermap = 0;
}; };
2A37F4C7FDCFA73011CA2CEA = { 2A37F4C7FDCFA73011CA2CEA = {
buildActionMask = 2147483647; buildActionMask = 2147483647;
......
...@@ -16,6 +16,8 @@ ...@@ -16,6 +16,8 @@
<string>/usr/bin/pythonw</string> <string>/usr/bin/pythonw</string>
<string>/Applications/MacPython-OSX/python-additions/Python.app/Contents/MacOS/python</string> <string>/Applications/MacPython-OSX/python-additions/Python.app/Contents/MacOS/python</string>
</array> </array>
<key>honourhashbang</key>
<false/>
<key>nosite</key> <key>nosite</key>
<false/> <false/>
<key>optimize</key> <key>optimize</key>
...@@ -45,7 +47,9 @@ ...@@ -45,7 +47,9 @@
<string>/usr/bin/pythonw</string> <string>/usr/bin/pythonw</string>
<string>/Applications/MacPython-OSX/python-additions/Python.app/Contents/MacOS/python</string> <string>/Applications/MacPython-OSX/python-additions/Python.app/Contents/MacOS/python</string>
</array> </array>
<key>nosite</key> <key>honourhashbang</key>
<false/>
<key>nosite</key>
<false/> <false/>
<key>optimize</key> <key>optimize</key>
<false/> <false/>
...@@ -69,7 +73,9 @@ ...@@ -69,7 +73,9 @@
<string>/Library/Frameworks/Python.framework/Versions/Current/bin/python</string> <string>/Library/Frameworks/Python.framework/Versions/Current/bin/python</string>
<string>/usr/bin/python</string> <string>/usr/bin/python</string>
</array> </array>
<key>nosite</key> <key>honourhashbang</key>
<false/>
<key>nosite</key>
<false/> <false/>
<key>optimize</key> <key>optimize</key>
<false/> <false/>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment