summaryrefslogtreecommitdiff
path: root/Modules/getpath.c
diff options
context:
space:
mode:
authorJack Jansen <jack.jansen@cwi.nl>2001-12-02 23:56:28 +0000
committerJack Jansen <jack.jansen@cwi.nl>2001-12-02 23:56:28 +0000
commit078d2389b103be34e16e6de0454a9e5660a7da8b (patch)
tree8fbbbeee12d1862869968aaccb7603485a14fb51 /Modules/getpath.c
parent4a812081cc958e7cf62f059079adff224771cf4d (diff)
downloadcpython-078d2389b103be34e16e6de0454a9e5660a7da8b.tar.gz
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.
Diffstat (limited to 'Modules/getpath.c')
-rw-r--r--Modules/getpath.c92
1 files changed, 45 insertions, 47 deletions
diff --git a/Modules/getpath.c b/Modules/getpath.c
index a8b46f5ba6..2c0b6f2176 100644
--- a/Modules/getpath.c
+++ b/Modules/getpath.c
@@ -374,7 +374,50 @@ calculate_path(void)
NSModule pythonModule;
#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 */
buf = NSLibraryNameForModule(pythonModule);
@@ -394,60 +437,15 @@ calculate_path(void)
if (!ismodule(argv0_path)) {
/* 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);
+ strncpy(argv0_path, prog, MAXPATHLEN);
}
else {
/* Use the location of the library as the progpath */
- strncpy(progpath, buf, MAXPATHLEN);
+ strncpy(argv0_path, 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
{
char tmpbuffer[MAXPATHLEN+1];