summaryrefslogtreecommitdiff
path: root/lang/python23-nth/patches/patch-db
blob: 1c91d34b25904e924f7d6427c81acb9c96d734d0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
$NetBSD: patch-db,v 1.1.1.1 2005/01/23 22:57:21 recht Exp $

--- Modules/getpath.c.orig	Thu Nov 11 18:08:55 2004
+++ Modules/getpath.c	Thu Nov 11 18:10:13 2004
@@ -374,6 +374,9 @@
 #ifdef WITH_NEXT_FRAMEWORK
     NSModule pythonModule;
 #endif
+#ifdef __APPLE__
+    unsigned long nsexeclength = MAXPATHLEN;
+#endif
 
 	/* If there is no slash in the argv0 path, then we have to
 	 * assume python is on the user's $PATH, since there's no
@@ -382,6 +385,20 @@
 	 */
 	if (strchr(prog, SEP))
 		strncpy(progpath, prog, MAXPATHLEN);
+#ifdef __APPLE__
+	/* On Mac OS X, if a script uses an interpreter of the form
+	 * "#!/opt/python2.3/bin/python", the kernel only passes "python"
+	 * as argv[0], which falls through to the $PATH search below.
+	 * If /opt/python2.3/bin isn't in your path, or is near the end,
+	 * this algorithm may incorrectly find /usr/bin/python. To work
+	 * around this, we can use _NSGetExecutablePath to get a better
+	 * hint of what the intended interpreter was, although this
+	 * will fail if a relative path was used. but in that case,
+	 * absolutize() should help us out below
+	 */
+	else if(0 == _NSGetExecutablePath(progpath, &nsexeclength) && progpath[0] == SEP)
+	  ;
+#endif // __APPLE__
 	else if (path) {
 		while (1) {
 			char *delim = strchr(path, DELIM);