summaryrefslogtreecommitdiffstats
path: root/Mac
diff options
context:
space:
mode:
authorJack Jansen <jack.jansen@cwi.nl>2001-10-30 22:48:36 (GMT)
committerJack Jansen <jack.jansen@cwi.nl>2001-10-30 22:48:36 (GMT)
commit5ded1bf5c7773b7a13e1907e3cfb4826c402d7b2 (patch)
treeac53a6aea94b1891583f8cdfa0c8eeffb246699a /Mac
parente4df3fd90d54dcf8bc4eec3365debd3ecf890d10 (diff)
downloadcpython-5ded1bf5c7773b7a13e1907e3cfb4826c402d7b2.zip
cpython-5ded1bf5c7773b7a13e1907e3cfb4826c402d7b2.tar.gz
cpython-5ded1bf5c7773b7a13e1907e3cfb4826c402d7b2.tar.bz2
Mod by Donovan Preston to allow MacPython to live in a Python.app bundle and understand the __main__.py convention used there for applets. This gives us applets that work on both OS9 and OSX! (Although "applet" may not be the correct word for something that is going to be multimegabyte:-).
But: the code is currently disabled, as it requires CodeWarrior 7 and I'm still using 6.
Diffstat (limited to 'Mac')
-rw-r--r--Mac/Python/macmain.c96
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 */