]> granicus.if.org Git - python/commitdiff
Optionally honour #! paths in scripts. Fixes #676358.
authorJack Jansen <jack.jansen@cwi.nl>
Mon, 17 Feb 2003 15:40:00 +0000 (15:40 +0000)
committerJack Jansen <jack.jansen@cwi.nl>
Mon, 17 Feb 2003 15:40:00 +0000 (15:40 +0000)
14 files changed:
Mac/OSX/PythonLauncher/English.lproj/MyDocument.nib/classes.nib
Mac/OSX/PythonLauncher/English.lproj/MyDocument.nib/info.nib
Mac/OSX/PythonLauncher/English.lproj/MyDocument.nib/objects.nib
Mac/OSX/PythonLauncher/FileSettings.h
Mac/OSX/PythonLauncher/FileSettings.m
Mac/OSX/PythonLauncher/MyDocument.h
Mac/OSX/PythonLauncher/MyDocument.m
Mac/OSX/PythonLauncher/PreferenceWindow.nib/classes.nib
Mac/OSX/PythonLauncher/PreferenceWindow.nib/info.nib
Mac/OSX/PythonLauncher/PreferenceWindow.nib/objects.nib
Mac/OSX/PythonLauncher/PreferencesWindowController.h
Mac/OSX/PythonLauncher/PreferencesWindowController.m
Mac/OSX/PythonLauncher/PythonLauncher.pbproj/project.pbxproj
Mac/OSX/PythonLauncher/factorySettings.plist

index 7c581494b6f11515ec8b0b2c731536955abada2a..7778ff0455570ec8584ea2b801d3fa1765f80fd9 100644 (file)
@@ -2,12 +2,13 @@
     IBClasses = (
         {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; 
             LANGUAGE = ObjC; 
             OUTLETS = {
                 commandline = NSTextField; 
                 debug = NSButton; 
+                honourhashbang = NSButton; 
                 inspect = NSButton; 
                 interpreter = NSTextField; 
                 nosite = NSButton; 
@@ -15,7 +16,7 @@
                 others = NSTextField; 
                 tabs = NSButton; 
                 verbose = NSButton; 
-                with_terminal = NSButton; 
+                "with_terminal" = NSButton; 
             }; 
             SUPERCLASS = NSDocument; 
         }
index c7676460e7fe3e294e47c7b5f5d390e4b98f0398..0630cb9358069377ebf5e5f8836306441831f74f 100644 (file)
@@ -1,16 +1,16 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist SYSTEM "file://localhost/System/Library/DTDs/PropertyList.dtd">
-<plist version="0.9">
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
 <dict>
        <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>
-       <string>263.2</string>
+       <string>286.0</string>
        <key>IBOpenObjects</key>
        <array>
                <integer>5</integer>
        </array>
        <key>IBSystem Version</key>
-       <string>5S66</string>
+       <string>6I32</string>
 </dict>
 </plist>
index 33521ada231fe80754aa1e6926ca1775dcb3e338..97eb230a29c272ca83ab4fef213f30eb83a562dd 100644 (file)
Binary files a/Mac/OSX/PythonLauncher/English.lproj/MyDocument.nib/objects.nib and b/Mac/OSX/PythonLauncher/English.lproj/MyDocument.nib/objects.nib differ
index 80c11f1e5274738d982c4d0d1c14646573747a77..f70b05f51831a2346b914d24bd0d0fde0d0fa39d 100755 (executable)
@@ -10,6 +10,7 @@
 
 @protocol FileSettingsSource
 - (NSString *) interpreter;
+- (BOOL) honourhashbang;
 - (BOOL) debug;
 - (BOOL) verbose;
 - (BOOL) inspect;
@@ -24,6 +25,7 @@
 {
     NSString *interpreter;     // The pathname of the interpreter to use
     NSArray *interpreters;     // List of known interpreters
+    BOOL honourhashbang;       // #! line overrides interpreter
     BOOL debug;                        // -d option: debug parser
     BOOL verbose;              // -v option: verbose import
     BOOL inspect;              // -i option: interactive mode after script
index b2961d297a8e3b02fbe8d3f2a986d0e7f54d3b38..7b28daae017782d0fd80bc8a306fc1ec66ceab9f 100755 (executable)
@@ -69,6 +69,7 @@
     if (!self) return self;
     
     interpreter = [source->interpreter retain];
+    honourhashbang = source->honourhashbang;
     debug = source->debug;
     verbose = source->verbose;
     inspect = source->inspect;
 - (void)updateFromSource: (id <FileSettingsSource>)source
 {
     interpreter = [[source interpreter] retain];
+    honourhashbang = [source honourhashbang];
     debug = [source debug];
     verbose = [source verbose];
     inspect = [source inspect];
         NSUserDefaults *defaults;
         NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
             interpreter, @"interpreter",
+            [NSNumber numberWithBool: honourhashbang], @"honourhashbang",
             [NSNumber numberWithBool: debug], @"debug",
             [NSNumber numberWithBool: verbose], @"verbose",
             [NSNumber numberWithBool: inspect], @"inspect",
     
     value = [dict objectForKey: @"interpreter"];
     if (value) interpreter = [value retain];
+    value = [dict objectForKey: @"honourhashbang"];
+    if (value) honourhashbang = [value boolValue];
     value = [dict objectForKey: @"debug"];
     if (value) debug = [value boolValue];
     value = [dict objectForKey: @"verbose"];
 
 - (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:
         @"\"%@\"%s%s%s%s%s%s %@ \"%@\" %s",
-        interpreter,
+        cur_interp,
         debug?" -d":"",
         verbose?" -v":"",
         inspect?" -i":"",
 
 // FileSettingsSource protocol 
 - (NSString *) interpreter { return interpreter;};
+- (BOOL) honourhashbang { return honourhashbang; };
 - (BOOL) debug { return debug;};
 - (BOOL) verbose { return verbose;};
 - (BOOL) inspect { return inspect;};
index 47c7be38e496ceaa7c9b9fc985deca508298566f..dd2b4fe9bde21557e2589da8a104bca581668af9 100755 (executable)
@@ -14,6 +14,7 @@
 @interface MyDocument : NSDocument <FileSettingsSource>
 {
     IBOutlet NSTextField *interpreter;
+    IBOutlet NSButton *honourhashbang;
     IBOutlet NSButton *debug;
     IBOutlet NSButton *verbose;
     IBOutlet NSButton *inspect;
index fdcf86a6d5a7003c0b23d550a28331443d1dbe94..09a0024d5e779ba2e8dd4075c56197ef35c3dbda 100755 (executable)
@@ -52,6 +52,7 @@
 //    [[self window] setTitle: script];
     
     [interpreter setStringValue: [settings interpreter]];
+    [honourhashbang setState: [settings honourhashbang]];
     [debug setState: [settings debug]];
     [verbose setState: [settings verbose]];
     [inspect setState: [settings inspect]];
 
 // FileSettingsSource protocol 
 - (NSString *) interpreter { return [interpreter stringValue];};
+- (BOOL) honourhashbang { return [honourhashbang state];};
 - (BOOL) debug { return [debug state];};
 - (BOOL) verbose { return [verbose state];};
 - (BOOL) inspect { return [inspect state];};
index 43a1936d65faba28dacffdd5f9a45622fe6446d7..467aa8b26121d6b65c351b0239b96b79f1ab98d7 100644 (file)
@@ -9,6 +9,7 @@
                 commandline = NSTextField; 
                 debug = NSButton; 
                 filetype = NSPopUpButton; 
+                honourhashbang = NSButton; 
                 inspect = NSButton; 
                 interpreter = NSTextField; 
                 nosite = NSButton; 
index f5b17b60588b267622d1dae0386e528df8ad2cba..e4c54c13d6dec37dc20bc141b8dcb2f45ec3e783 100644 (file)
@@ -3,14 +3,14 @@
 <plist version="1.0">
 <dict>
        <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>
-       <string>291.0</string>
+       <string>286.0</string>
        <key>IBOpenObjects</key>
        <array>
                <integer>5</integer>
        </array>
        <key>IBSystem Version</key>
-       <string>6G30</string>
+       <string>6I32</string>
 </dict>
 </plist>
index f220e5cb142f106a1ba026f0a01d2fd7ecd4cb26..12539d08bfc7d60a8b18bbc625d73330557b2f6e 100644 (file)
Binary files a/Mac/OSX/PythonLauncher/PreferenceWindow.nib/objects.nib and b/Mac/OSX/PythonLauncher/PreferenceWindow.nib/objects.nib differ
index 57821c5b37c4fff7dbf71c1f8133dbe9ac96695a..63c1836d5677db9b6b33712ed5509be10477e5a1 100644 (file)
@@ -8,6 +8,7 @@
 {
     IBOutlet NSPopUpButton *filetype;
     IBOutlet NSTextField *interpreter;
+    IBOutlet NSButton *honourhashbang;
     IBOutlet NSButton *debug;
     IBOutlet NSButton *verbose;
     IBOutlet NSButton *inspect;
index e7ddfdd7800ac35041b5f489dc7349c566408978..fd65194afce08d1ae20b406eda28ac0e4b5193a2 100644 (file)
@@ -30,6 +30,7 @@
 //    [[self window] setTitle: script];
     
     [interpreter setStringValue: [settings interpreter]];
+    [honourhashbang setState: [settings honourhashbang]];
     [debug setState: [settings debug]];
     [verbose setState: [settings verbose]];
     [inspect setState: [settings inspect]];
@@ -74,6 +75,7 @@
 
 // FileSettingsSource protocol 
 - (NSString *) interpreter { return [interpreter stringValue];};
+- (BOOL) honourhashbang { return [honourhashbang state]; };
 - (BOOL) debug { return [debug state];};
 - (BOOL) verbose { return [verbose state];};
 - (BOOL) inspect { return [inspect state];};
index 2cfdaf1239301cd131d5483756a0fc1a5e00f55c..5b4a06c87c573a202215d95cc3a68f53def77ad9 100755 (executable)
                                4A9504D0FFE6A4CB11CA0CBA,
                                4A9504D1FFE6A4CB11CA0CBA,
                        );
-                       hasScannedForEncodings = 1;
                        isa = PBXProject;
                        mainGroup = 2A37F4AAFDCFA73011CA2CEA;
                        projectDirPath = "";
 </dict>
 </plist>
 ";
+                       shouldUseHeadermap = 0;
                };
                2A37F4C7FDCFA73011CA2CEA = {
                        buildActionMask = 2147483647;
index 46092b5d443f61f3f5a7be991bd09ffbbd2dffe8..1d8d039e8e508fd69460a02fe2ad91d203fffc01 100644 (file)
@@ -16,6 +16,8 @@
                     <string>/usr/bin/pythonw</string>
                     <string>/Applications/MacPython-OSX/python-additions/Python.app/Contents/MacOS/python</string>
                 </array>
+                <key>honourhashbang</key>
+                <false/>
                 <key>nosite</key>
                 <false/>
                 <key>optimize</key>
@@ -45,7 +47,9 @@
                     <string>/usr/bin/pythonw</string>
                     <string>/Applications/MacPython-OSX/python-additions/Python.app/Contents/MacOS/python</string>
                 </array>
-                <key>nosite</key>
+                <key>honourhashbang</key>
+                <false/>
+                 <key>nosite</key>
                 <false/>
                 <key>optimize</key>
                 <false/>
@@ -69,7 +73,9 @@
                     <string>/Library/Frameworks/Python.framework/Versions/Current/bin/python</string>
                     <string>/usr/bin/python</string>
                 </array>
-                <key>nosite</key>
+                <key>honourhashbang</key>
+                <false/>
+                 <key>nosite</key>
                 <false/>
                 <key>optimize</key>
                 <false/>