annotate Mac/Tools/pythonw.c @ 71285:8bc9dbc61ba6 3.2

Issue #12326: document the recommended idiom for checking sys.platform on Unix systems. Also, point to the various alternatives.
author Antoine Pitrou <solipsis@pitrou.net>
date Sat, 09 Jul 2011 15:54:23 +0200
parents 81d7f78a633a
children 294f8aeb4d4b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
38673
a19c20c5e5c7 Merge the rest of the trunk.
Thomas Wouters <thomas@python.org>
parents:
diff changeset
1 /*
a19c20c5e5c7 Merge the rest of the trunk.
Thomas Wouters <thomas@python.org>
parents:
diff changeset
2 * This wrapper program executes a python executable hidden inside an
a19c20c5e5c7 Merge the rest of the trunk.
Thomas Wouters <thomas@python.org>
parents:
diff changeset
3 * application bundle inside the Python framework. This is needed to run
a19c20c5e5c7 Merge the rest of the trunk.
Thomas Wouters <thomas@python.org>
parents:
diff changeset
4 * GUI code: some GUI API's don't work unless the program is inside an
a19c20c5e5c7 Merge the rest of the trunk.
Thomas Wouters <thomas@python.org>
parents:
diff changeset
5 * application bundle.
57914
94e957cfda38 Merged revisions 77031 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 38673
diff changeset
6 *
94e957cfda38 Merged revisions 77031 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 38673
diff changeset
7 * This program uses posix_spawn rather than plain execv because we need
94e957cfda38 Merged revisions 77031 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 38673
diff changeset
8 * slightly more control over how the "real" interpreter is executed.
58819
b834c8ee8e7c Forward port a number of OSX bugfixes from the trunk to 3.2
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 57914
diff changeset
9 *
b834c8ee8e7c Forward port a number of OSX bugfixes from the trunk to 3.2
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 57914
diff changeset
10 * On OSX 10.4 (and earlier) this falls back to using exec because the
b834c8ee8e7c Forward port a number of OSX bugfixes from the trunk to 3.2
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 57914
diff changeset
11 * posix_spawnv functions aren't available there.
38673
a19c20c5e5c7 Merge the rest of the trunk.
Thomas Wouters <thomas@python.org>
parents:
diff changeset
12 */
58819
b834c8ee8e7c Forward port a number of OSX bugfixes from the trunk to 3.2
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 57914
diff changeset
13
b834c8ee8e7c Forward port a number of OSX bugfixes from the trunk to 3.2
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 57914
diff changeset
14 #pragma weak_import posix_spawnattr_init
b834c8ee8e7c Forward port a number of OSX bugfixes from the trunk to 3.2
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 57914
diff changeset
15 #pragma weak_import posix_spawnattr_setbinpref_np
b834c8ee8e7c Forward port a number of OSX bugfixes from the trunk to 3.2
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 57914
diff changeset
16 #pragma weak_import posix_spawnattr_setflags
b834c8ee8e7c Forward port a number of OSX bugfixes from the trunk to 3.2
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 57914
diff changeset
17 #pragma weak_import posix_spawn
b834c8ee8e7c Forward port a number of OSX bugfixes from the trunk to 3.2
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 57914
diff changeset
18
b834c8ee8e7c Forward port a number of OSX bugfixes from the trunk to 3.2
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 57914
diff changeset
19 #include <Python.h>
38673
a19c20c5e5c7 Merge the rest of the trunk.
Thomas Wouters <thomas@python.org>
parents:
diff changeset
20 #include <unistd.h>
58819
b834c8ee8e7c Forward port a number of OSX bugfixes from the trunk to 3.2
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 57914
diff changeset
21 #ifdef HAVE_SPAWN_H
57914
94e957cfda38 Merged revisions 77031 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 38673
diff changeset
22 #include <spawn.h>
58819
b834c8ee8e7c Forward port a number of OSX bugfixes from the trunk to 3.2
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 57914
diff changeset
23 #endif
57914
94e957cfda38 Merged revisions 77031 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 38673
diff changeset
24 #include <stdio.h>
94e957cfda38 Merged revisions 77031 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 38673
diff changeset
25 #include <string.h>
94e957cfda38 Merged revisions 77031 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 38673
diff changeset
26 #include <errno.h>
38673
a19c20c5e5c7 Merge the rest of the trunk.
Thomas Wouters <thomas@python.org>
parents:
diff changeset
27 #include <err.h>
57914
94e957cfda38 Merged revisions 77031 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 38673
diff changeset
28 #include <dlfcn.h>
94e957cfda38 Merged revisions 77031 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 38673
diff changeset
29 #include <stdlib.h>
94e957cfda38 Merged revisions 77031 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 38673
diff changeset
30 #include <Python.h>
94e957cfda38 Merged revisions 77031 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 38673
diff changeset
31
94e957cfda38 Merged revisions 77031 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 38673
diff changeset
32
94e957cfda38 Merged revisions 77031 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 38673
diff changeset
33 extern char** environ;
38673
a19c20c5e5c7 Merge the rest of the trunk.
Thomas Wouters <thomas@python.org>
parents:
diff changeset
34
57914
94e957cfda38 Merged revisions 77031 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 38673
diff changeset
35 /*
94e957cfda38 Merged revisions 77031 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 38673
diff changeset
36 * Locate the python framework by looking for the
94e957cfda38 Merged revisions 77031 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 38673
diff changeset
37 * library that contains Py_Initialize.
94e957cfda38 Merged revisions 77031 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 38673
diff changeset
38 *
94e957cfda38 Merged revisions 77031 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 38673
diff changeset
39 * In a regular framework the structure is:
94e957cfda38 Merged revisions 77031 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 38673
diff changeset
40 *
94e957cfda38 Merged revisions 77031 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 38673
diff changeset
41 * Python.framework/Versions/2.7
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
42 * /Python
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
43 * /Resources/Python.app/Contents/MacOS/Python
57914
94e957cfda38 Merged revisions 77031 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 38673
diff changeset
44 *
94e957cfda38 Merged revisions 77031 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 38673
diff changeset
45 * In a virtualenv style structure the expected
94e957cfda38 Merged revisions 77031 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 38673
diff changeset
46 * structure is:
94e957cfda38 Merged revisions 77031 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 38673
diff changeset
47 *
94e957cfda38 Merged revisions 77031 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 38673
diff changeset
48 * ROOT
94e957cfda38 Merged revisions 77031 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 38673
diff changeset
49 * /bin/pythonw
94e957cfda38 Merged revisions 77031 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 38673
diff changeset
50 * /.Python <- the dylib
94e957cfda38 Merged revisions 77031 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 38673
diff changeset
51 * /.Resources/Python.app/Contents/MacOS/Python
94e957cfda38 Merged revisions 77031 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 38673
diff changeset
52 *
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
53 * NOTE: virtualenv's are not an officially supported
57914
94e957cfda38 Merged revisions 77031 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 38673
diff changeset
54 * feature, support for that structure is provided as
94e957cfda38 Merged revisions 77031 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 38673
diff changeset
55 * a convenience.
94e957cfda38 Merged revisions 77031 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 38673
diff changeset
56 */
94e957cfda38 Merged revisions 77031 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 38673
diff changeset
57 static char* get_python_path(void)
94e957cfda38 Merged revisions 77031 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 38673
diff changeset
58 {
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
59 size_t len;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
60 Dl_info info;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
61 char* end;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
62 char* g_path;
57914
94e957cfda38 Merged revisions 77031 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 38673
diff changeset
63
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
64 if (dladdr(Py_Initialize, &info) == 0) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
65 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
66 }
57914
94e957cfda38 Merged revisions 77031 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 38673
diff changeset
67
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
68 len = strlen(info.dli_fname);
57914
94e957cfda38 Merged revisions 77031 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 38673
diff changeset
69
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
70 g_path = malloc(len+60);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
71 if (g_path == NULL) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
72 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
73 }
57914
94e957cfda38 Merged revisions 77031 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 38673
diff changeset
74
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
75 strcpy(g_path, info.dli_fname);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
76 end = g_path + len - 1;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
77 while (end != g_path && *end != '/') {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
78 end --;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
79 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
80 end++;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
81 if (*end == '.') {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
82 end++;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
83 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
84 strcpy(end, "Resources/Python.app/Contents/MacOS/" PYTHONFRAMEWORK);
57914
94e957cfda38 Merged revisions 77031 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 38673
diff changeset
85
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
86 return g_path;
57914
94e957cfda38 Merged revisions 77031 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 38673
diff changeset
87 }
38673
a19c20c5e5c7 Merge the rest of the trunk.
Thomas Wouters <thomas@python.org>
parents:
diff changeset
88
58819
b834c8ee8e7c Forward port a number of OSX bugfixes from the trunk to 3.2
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 57914
diff changeset
89 #ifdef HAVE_SPAWN_H
57914
94e957cfda38 Merged revisions 77031 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 38673
diff changeset
90 static void
94e957cfda38 Merged revisions 77031 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 38673
diff changeset
91 setup_spawnattr(posix_spawnattr_t* spawnattr)
94e957cfda38 Merged revisions 77031 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 38673
diff changeset
92 {
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
93 size_t ocount;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
94 size_t count;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
95 cpu_type_t cpu_types[1];
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
96 short flags = 0;
57914
94e957cfda38 Merged revisions 77031 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 38673
diff changeset
97 #ifdef __LP64__
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
98 int ch;
57914
94e957cfda38 Merged revisions 77031 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 38673
diff changeset
99 #endif
94e957cfda38 Merged revisions 77031 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 38673
diff changeset
100
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
101 if ((errno = posix_spawnattr_init(spawnattr)) != 0) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
102 err(2, "posix_spawnattr_int");
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
103 /* NOTREACHTED */
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
104 }
57914
94e957cfda38 Merged revisions 77031 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 38673
diff changeset
105
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
106 count = 1;
57914
94e957cfda38 Merged revisions 77031 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 38673
diff changeset
107
68489
81d7f78a633a #11515: Merge with 3.1.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 62027
diff changeset
108 /* Run the real python executable using the same architecture as this
81d7f78a633a #11515: Merge with 3.1.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 62027
diff changeset
109 * executable, this allows users to control the architecture using
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
110 * "arch -ppc python"
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
111 */
57914
94e957cfda38 Merged revisions 77031 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 38673
diff changeset
112
94e957cfda38 Merged revisions 77031 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 38673
diff changeset
113 #if defined(__ppc64__)
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
114 cpu_types[0] = CPU_TYPE_POWERPC64;
57914
94e957cfda38 Merged revisions 77031 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 38673
diff changeset
115
94e957cfda38 Merged revisions 77031 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 38673
diff changeset
116 #elif defined(__x86_64__)
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
117 cpu_types[0] = CPU_TYPE_X86_64;
57914
94e957cfda38 Merged revisions 77031 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 38673
diff changeset
118
94e957cfda38 Merged revisions 77031 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 38673
diff changeset
119 #elif defined(__ppc__)
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
120 cpu_types[0] = CPU_TYPE_POWERPC;
57914
94e957cfda38 Merged revisions 77031 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 38673
diff changeset
121 #elif defined(__i386__)
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
122 cpu_types[0] = CPU_TYPE_X86;
57914
94e957cfda38 Merged revisions 77031 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 38673
diff changeset
123 #else
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
124 # error "Unknown CPU"
57914
94e957cfda38 Merged revisions 77031 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 38673
diff changeset
125 #endif
94e957cfda38 Merged revisions 77031 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 38673
diff changeset
126
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
127 if (posix_spawnattr_setbinpref_np(spawnattr, count,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
128 cpu_types, &ocount) == -1) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
129 err(1, "posix_spawnattr_setbinpref");
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
130 /* NOTREACHTED */
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
131 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
132 if (count != ocount) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
133 fprintf(stderr, "posix_spawnattr_setbinpref failed to copy\n");
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
134 exit(1);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
135 /* NOTREACHTED */
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
136 }
57914
94e957cfda38 Merged revisions 77031 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 38673
diff changeset
137
94e957cfda38 Merged revisions 77031 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 38673
diff changeset
138
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
139 /*
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
140 * Set flag that causes posix_spawn to behave like execv
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
141 */
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
142 flags |= POSIX_SPAWN_SETEXEC;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
143 if ((errno = posix_spawnattr_setflags(spawnattr, flags)) != 0) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
144 err(1, "posix_spawnattr_setflags");
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
145 /* NOTREACHTED */
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
146 }
57914
94e957cfda38 Merged revisions 77031 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 38673
diff changeset
147 }
58819
b834c8ee8e7c Forward port a number of OSX bugfixes from the trunk to 3.2
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 57914
diff changeset
148 #endif
57914
94e957cfda38 Merged revisions 77031 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 38673
diff changeset
149
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
150 int
57914
94e957cfda38 Merged revisions 77031 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 38673
diff changeset
151 main(int argc, char **argv) {
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
152 char* exec_path = get_python_path();
57914
94e957cfda38 Merged revisions 77031 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 38673
diff changeset
153
62027
34a637bfd4be Merged revisions 81649 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61466
diff changeset
154 /*
34a637bfd4be Merged revisions 81649 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61466
diff changeset
155 * Let argv[0] refer to the new interpreter. This is needed to
34a637bfd4be Merged revisions 81649 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61466
diff changeset
156 * get the effect we want on OSX 10.5 or earlier. That is, without
34a637bfd4be Merged revisions 81649 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61466
diff changeset
157 * changing argv[0] the real interpreter won't have access to
34a637bfd4be Merged revisions 81649 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61466
diff changeset
158 * the Window Server.
34a637bfd4be Merged revisions 81649 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61466
diff changeset
159 */
34a637bfd4be Merged revisions 81649 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61466
diff changeset
160 argv[0] = exec_path;
34a637bfd4be Merged revisions 81649 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61466
diff changeset
161
58819
b834c8ee8e7c Forward port a number of OSX bugfixes from the trunk to 3.2
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 57914
diff changeset
162 #ifdef HAVE_SPAWN_H
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
163 /* We're weak-linking to posix-spawnv to ensure that
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
164 * an executable build on 10.5 can work on 10.4.
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
165 */
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
166 if (posix_spawn != NULL) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
167 posix_spawnattr_t spawnattr = NULL;
57914
94e957cfda38 Merged revisions 77031 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 38673
diff changeset
168
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
169 setup_spawnattr(&spawnattr);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
170 posix_spawn(NULL, exec_path, NULL,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
171 &spawnattr, argv, environ);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
172 err(1, "posix_spawn: %s", exec_path);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
173 }
58819
b834c8ee8e7c Forward port a number of OSX bugfixes from the trunk to 3.2
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 57914
diff changeset
174 #endif
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
175 execve(exec_path, argv, environ);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
176 err(1, "execve: %s", argv[0]);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60523
diff changeset
177 /* NOTREACHED */
38673
a19c20c5e5c7 Merge the rest of the trunk.
Thomas Wouters <thomas@python.org>
parents:
diff changeset
178 }