diff options
-rw-r--r-- | Mac/Python/macmain.c | 96 |
1 files changed, 62 insertions, 34 deletions
diff --git a/Mac/Python/macmain.c b/Mac/Python/macmain.c index 0498be4..ad0d82b 100644 --- a/Mac/Python/macmain.c +++ b/Mac/Python/macmain.c @@ -38,6 +38,13 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include <Windows.h> #include <Fonts.h> #include <Balloons.h> +#if TARGET_API_MAC_CARBON +#include <CFBundle.h> +#include <CFURL.h> +#include <CFString.h> +#include <CFBase.h> +#include <CFArray.h> +#endif /* TARGET_API_MAC_CARBON */ #ifdef USE_APPEARANCE #include <Gestalt.h> #include <Appearance.h> @@ -487,7 +494,7 @@ PyMac_Initialize(void) #endif /* USE_MAC_APPLET_SUPPORT */ -#if TARGET_API_MAC_OSX +#if TARGET_API_MAC_OSX /* Really: TARGET_API_MAC_CARBON */ static int locateResourcePy(char * resourceName, char * resourceURLCStr, int length) { @@ -495,45 +502,57 @@ locateResourcePy(char * resourceName, char * resourceURLCStr, int length) { CFURLRef URL, absoluteURL; CFStringRef filenameString, filepathString, rsrcString; CFIndex size, i; - CFArrayRef arrayRef; - Boolean success = 0; - - /* Create a CFString with the resource name in it */ - rsrcString = CFStringCreateWithCString(0, resourceName, kCFStringEncodingMacRoman); + CFArrayRef arrayRef = NULL; + int success = 0; + +#if TARGET_API_MAC_OSX + CFURLPathStyle thePathStyle = kCFURLPOSIXPathStyle; +#else + CFURLPathStyle thePathStyle = kCFURLHFSPathStyle; +#endif /* Get a reference to our main bundle */ mainBundle = CFBundleGetMainBundle(); - /* Look for py files in the main bundle by type */ - arrayRef = CFBundleCopyResourceURLsOfType( mainBundle, - CFSTR("py"), - NULL ); - - /* See if there are any filename matches */ - size = CFArrayGetCount(arrayRef); - for (i = 0; i < size; i++) { - URL = CFArrayGetValueAtIndex(arrayRef, i); - filenameString = CFURLCopyLastPathComponent(URL); - if (CFStringCompare(filenameString, rsrcString, 0) == kCFCompareEqualTo) { - /* We found a match, get the file's full path */ - absoluteURL = CFURLCopyAbsoluteURL(URL); - filepathString = CFURLCopyFileSystemPath(absoluteURL, kCFURLPOSIXPathStyle); - CFRelease(absoluteURL); - - /* Copy the full path into the caller's character buffer */ - success = CFStringGetCString(filepathString, resourceURLCStr, length, - kCFStringEncodingMacRoman); - - CFRelease(filepathString); - } - CFRelease(filenameString); - } - CFRelease(rsrcString); - CFRelease(arrayRef); - + /* If we are running inside a bundle, look through it. Otherwise, do nothing. */ + if (mainBundle) { + /* Create a CFString with the resource name in it */ + rsrcString = CFStringCreateWithCString(0, resourceName, kCFStringEncodingMacRoman); + + /* Look for py files in the main bundle by type */ + arrayRef = CFBundleCopyResourceURLsOfType( mainBundle, + CFSTR("py"), + NULL ); + + /* See if there are any filename matches */ + size = CFArrayGetCount(arrayRef); + for (i = 0; i < size; i++) { + URL = CFArrayGetValueAtIndex(arrayRef, i); + filenameString = CFURLCopyLastPathComponent(URL); + if (CFStringCompare(filenameString, rsrcString, 0) == kCFCompareEqualTo) { + /* We found a match, get the file's full path */ + absoluteURL = CFURLCopyAbsoluteURL(URL); + filepathString = CFURLCopyFileSystemPath(absoluteURL, thePathStyle); + CFRelease(absoluteURL); + + /* Copy the full path into the caller's character buffer */ + success = CFStringGetCString(filepathString, resourceURLCStr, length, + kCFStringEncodingMacRoman); + + CFRelease(filepathString); + } + CFRelease(filenameString); + } + CFRelease(arrayRef); + CFRelease(rsrcString); + } return success; } +#endif /* TARGET_API_MAC_CARBON */ + +#if TARGET_API_MAC_OSX + int main(int argc, char **argv) { @@ -580,7 +599,16 @@ PyMac_InitApplication(void) int argc; char **argv; + static char scriptpath[1024]; + char *script = NULL; + init_common(&argc, &argv, 0); + +#if TARGET_API_MAC_OSX /* Really: TARGET_API_MAC_CARBON */ + /* If we are running inside of a bundle, and a __main__.py is available, use it */ + if (locateResourcePy("__main__.py", scriptpath, 1024)) + script = scriptpath; +#endif if ( argc > 1 ) { /* We're running a script. Attempt to change current directory */ @@ -603,7 +631,7 @@ PyMac_InitApplication(void) exit(0); } } - Py_Main(argc, argv, NULL); + Py_Main(argc, argv, script); } #endif /* TARGET_API_MAC_OSX */ |