Mercurial > cpython-lru_cache-weakref
diff Mac/Tools/pythonw.c @ 58819:b834c8ee8e7c
Forward port a number of OSX bugfixes from the trunk to 3.2
| author | Ronald Oussoren <ronaldoussoren@mac.com> |
|---|---|
| date | Sun, 07 Feb 2010 19:56:39 +0000 |
| parents | 94e957cfda38 |
| children | 49a0a950d219 |
line wrap: on
line diff
--- a/Mac/Tools/pythonw.c Sun Feb 07 17:00:43 2010 +0000 +++ b/Mac/Tools/pythonw.c Sun Feb 07 19:56:39 2010 +0000 @@ -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 <Python.h> #include <unistd.h> +#ifdef HAVE_SPAWN_H #include <spawn.h> +#endif #include <stdio.h> #include <string.h> #include <errno.h> @@ -74,6 +86,7 @@ return g_path; } +#ifdef HAVE_SPAWN_H static void setup_spawnattr(posix_spawnattr_t* spawnattr) { @@ -132,16 +145,26 @@ /* 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 */ }
