summaryrefslogtreecommitdiffstats
path: root/Mac/Tools
diff options
context:
space:
mode:
authorRonald Oussoren <ronaldoussoren@mac.com>2010-01-17 16:25:57 (GMT)
committerRonald Oussoren <ronaldoussoren@mac.com>2010-01-17 16:25:57 (GMT)
commita55af9a9db334fb587f2c6b37ac28ac2463ebf04 (patch)
tree085b4cb7df8d1b3c2890dd13851970cac2c070a0 /Mac/Tools
parent60ba2c8bf8d8457282232127fd13543af4956a3d (diff)
downloadcpython-a55af9a9db334fb587f2c6b37ac28ac2463ebf04.zip
cpython-a55af9a9db334fb587f2c6b37ac28ac2463ebf04.tar.gz
cpython-a55af9a9db334fb587f2c6b37ac28ac2463ebf04.tar.bz2
- Issue #7658: Ensure that the new pythonw executable works on OSX 10.4
- Issue #7714: Use ``gcc -dumpversion`` to detect the version of GCC on MacOSX. - Make configure look for util.h as well as libutil.h. The former is the header file that on OSX contains the defition of openpty. (Needed to compile for OSX 10.4 on OSX 10.6) - Use the correct definition of CC to compile the pythonw executable
Diffstat (limited to 'Mac/Tools')
-rw-r--r--Mac/Tools/pythonw.c35
1 files changed, 29 insertions, 6 deletions
diff --git a/Mac/Tools/pythonw.c b/Mac/Tools/pythonw.c
index d7a86f2..991a738 100644
--- a/Mac/Tools/pythonw.c
+++ b/Mac/Tools/pythonw.c
@@ -6,16 +6,26 @@
*
* 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>
#include <err.h>
#include <dlfcn.h>
#include <stdlib.h>
-#include <Python.h>
extern char** environ;
@@ -74,6 +84,7 @@ static char* get_python_path(void)
return g_path;
}
+#ifdef HAVE_SPAWN_H
static void
setup_spawnattr(posix_spawnattr_t* spawnattr)
{
@@ -132,16 +143,28 @@ 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
- setup_spawnattr(&spawnattr);
- posix_spawn(NULL, exec_path, NULL,
- &spawnattr, argv, environ);
- err(1, "posix_spawn: %s", argv[0]);
+ /* 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]);
+ }
+#endif
+ execve(exec_path, argv, environ);
+ err(1, "execve: %s", argv[0]);
/* NOTREACHED */
}