[Python-checkins] CVS: python/dist/src/Modules getpath.c,1.39,1.40

Jack Jansen jackjansen@users.sourceforge.net
2001年12月02日 15:56:30 -0800


Update of /cvsroot/python/python/dist/src/Modules
In directory usw-pr-cvs1:/tmp/cvs-serv12930
Modified Files:
	getpath.c 
Log Message:
Changed logic for finding python home in Mac OS X framework Pythons.
Now sys.executable points to the executable again, in stead of to
the shared library. The latter is used only for locating the python
home.
Index: getpath.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Modules/getpath.c,v
retrieving revision 1.39
retrieving revision 1.40
diff -C2 -d -r1.39 -r1.40
*** getpath.c	2001年09月28日 20:00:29	1.39
--- getpath.c	2001年12月02日 23:56:28	1.40
***************
*** 375,379 ****
--- 375,422 ----
 #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
+ 	 * other way to find a directory to start the search from. If
+ 	 * $PATH isn't exported, you lose.
+ 	 */
+ 	if (strchr(prog, SEP))
+ 		strncpy(progpath, prog, MAXPATHLEN);
+ 	else if (path) {
+ 		while (1) {
+ 			char *delim = strchr(path, DELIM);
+ 
+ 			if (delim) {
+ 				size_t len = delim - path;
+ 				if (len > MAXPATHLEN)
+ 					len = MAXPATHLEN;
+ 				strncpy(progpath, path, len);
+ 				*(progpath + len) = '0円';
+ 			}
+ 			else
+ 				strncpy(progpath, path, MAXPATHLEN);
+ 
+ 			joinpath(progpath, prog);
+ 			if (isxfile(progpath))
+ 				break;
+ 
+ 			if (!delim) {
+ 				progpath[0] = '0円';
+ 				break;
+ 			}
+ 			path = delim + 1;
+ 		}
+ 	}
+ 	else
+ 		progpath[0] = '0円';
+ 	if (progpath[0] != SEP)
+ 		absolutize(progpath);
+ 	strncpy(argv0_path, progpath, MAXPATHLEN);
+ 
 #ifdef WITH_NEXT_FRAMEWORK
+ 	/* On Mac OS X we have a special case if we're running from a framework.
+ 	** This is because the python home should be set relative to the library,
+ 	** which is in the framework, not relative to the executable, which may
+ 	** be outside of the framework. Except when we're in the build directory...
+ 	*/
 pythonModule = NSModuleForSymbol(NSLookupAndBindSymbol("_Py_Initialize"));
 /* Use dylib functions to find out where the framework was loaded from */
***************
*** 395,451 ****
 /* We are in the build directory so use the name of the
 executable - we know that the absolute path is passed */
! strncpy(progpath, prog, MAXPATHLEN);
 }
 else {
 /* Use the location of the library as the progpath */
! strncpy(progpath, buf, MAXPATHLEN);
! }
! }
! else {
! /* If we're not in a framework, fall back to the old way
! (even though NSNameOfModule() probably does the same thing.) */
! #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
! * other way to find a directory to start the search from. If
! * $PATH isn't exported, you lose.
! */
! if (strchr(prog, SEP))
! strncpy(progpath, prog, MAXPATHLEN);
! else if (path) {
! while (1) {
! char *delim = strchr(path, DELIM);
! 
! if (delim) {
! size_t len = delim - path;
! if (len > MAXPATHLEN)
! len = MAXPATHLEN;
! strncpy(progpath, path, len);
! *(progpath + len) = '0円';
! }
! else
! strncpy(progpath, path, MAXPATHLEN);
! 
! joinpath(progpath, prog);
! if (isxfile(progpath))
! break;
! 
! if (!delim) {
! progpath[0] = '0円';
! break;
! }
! path = delim + 1;
! }
 }
- else
- progpath[0] = '0円';
- if (progpath[0] != SEP)
- absolutize(progpath);
- #ifdef WITH_NEXT_FRAMEWORK
 }
 #endif
- 
- strncpy(argv0_path, progpath, MAXPATHLEN);
 
 #if HAVE_READLINK
--- 438,449 ----
 /* We are in the build directory so use the name of the
 executable - we know that the absolute path is passed */
! strncpy(argv0_path, prog, MAXPATHLEN);
 }
 else {
 /* Use the location of the library as the progpath */
! strncpy(argv0_path, buf, MAXPATHLEN);
 }
 }
 #endif
 
 #if HAVE_READLINK

AltStyle によって変換されたページ (->オリジナル) /