From 755740f3ea9c5005d16a80c07e7fc26e45f11aa1 Mon Sep 17 00:00:00 2001 From: Ronald Oussoren Date: Sun, 7 Feb 2010 19:56:39 +0000 Subject: Forward port a number of OSX bugfixes from the trunk to 3.2 --- Mac/Tools/pythonw.c | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) (limited to 'Mac/Tools/pythonw.c') diff --git a/Mac/Tools/pythonw.c b/Mac/Tools/pythonw.c index d7a86f2643..bd50f5cec2 100644 --- a/Mac/Tools/pythonw.c +++ b/Mac/Tools/pythonw.c @@ -6,9 +6,21 @@ * * This program uses posix_spawn rather than plain execv because we need * slightly more control over how the "real" interpreter is executed. + * + * On OSX 10.4 (and earlier) this falls back to using exec because the + * posix_spawnv functions aren't available there. */ + +#pragma weak_import posix_spawnattr_init +#pragma weak_import posix_spawnattr_setbinpref_np +#pragma weak_import posix_spawnattr_setflags +#pragma weak_import posix_spawn + +#include #include +#ifdef HAVE_SPAWN_H #include +#endif #include #include #include @@ -74,6 +86,7 @@ static char* get_python_path(void) return g_path; } +#ifdef HAVE_SPAWN_H static void setup_spawnattr(posix_spawnattr_t* spawnattr) { @@ -132,16 +145,26 @@ setup_spawnattr(posix_spawnattr_t* spawnattr) /* NOTREACHTED */ } } +#endif int main(int argc, char **argv) { - posix_spawnattr_t spawnattr = NULL; char* exec_path = get_python_path(); +#ifdef HAVE_SPAWN_H + /* We're weak-linking to posix-spawnv to ensure that + * an executable build on 10.5 can work on 10.4. + */ + if (posix_spawn != NULL) { + posix_spawnattr_t spawnattr = NULL; - setup_spawnattr(&spawnattr); - posix_spawn(NULL, exec_path, NULL, - &spawnattr, argv, environ); - err(1, "posix_spawn: %s", argv[0]); + setup_spawnattr(&spawnattr); + posix_spawn(NULL, exec_path, NULL, + &spawnattr, argv, environ); + err(1, "posix_spawn: %s", argv[0]); + } +#endif + execve(exec_path, argv, environ); + err(1, "execve: %s", argv[0]); /* NOTREACHED */ } -- cgit v1.2.1