Patch from M.-A. Lemburg:

Python on UNIX now trusts PYTHONHOME unconditionally

Modules/getpath.c:

Landmark changed to os.py.

Setting PYTHONHOME now unconditionally sets sys.prefix
(and sys.exec_prefix). No further checks are done whether the
standard lib can be found in that location or not. This is in
sync with the PC subdir getpath implementations.

PC/getpathp.c:

Landmark changed to os.py.

PC/os2vacpp/getpathp.c:

Landmark changed to os.py.

Note: BAW's checkin on exceptions.c eliminates earlier concerns about
a bogus PYTHONHOME value leading to a core dump.  Instead it causes a
useless sys.path and prevents imports.
This commit is contained in:
Jeremy Hylton 2000-05-26 21:49:07 +00:00
parent b80a777859
commit 847a9968e9
3 changed files with 27 additions and 29 deletions

View File

@ -87,7 +87,7 @@ PERFORMANCE OF THIS SOFTWARE.
* Modules/Setup. If the landmark is found, we're done. * Modules/Setup. If the landmark is found, we're done.
* *
* For the remaining steps, the prefix landmark will always be * For the remaining steps, the prefix landmark will always be
* lib/python$VERSION/string.py and the exec_prefix will always be * lib/python$VERSION/os.py and the exec_prefix will always be
* lib/python$VERSION/lib-dynload, where $VERSION is Python's version * lib/python$VERSION/lib-dynload, where $VERSION is Python's version
* number as supplied by the Makefile. Note that this means that no more * number as supplied by the Makefile. Note that this means that no more
* build directory checking is performed; if the first step did not find * build directory checking is performed; if the first step did not find
@ -150,7 +150,7 @@ PERFORMANCE OF THIS SOFTWARE.
#endif #endif
#ifndef LANDMARK #ifndef LANDMARK
#define LANDMARK "string.py" #define LANDMARK "os.py"
#endif #endif
static char prefix[MAXPATHLEN+1]; static char prefix[MAXPATHLEN+1];
@ -265,6 +265,18 @@ search_for_prefix(argv0_path, home)
int n; int n;
char *vpath; char *vpath;
/* If PYTHONHOME is set, we believe it unconditionally */
if (home) {
char *delim;
strcpy(prefix, home);
delim = strchr(prefix, DELIM);
if (delim)
*delim = '\0';
joinpath(prefix, lib_python);
joinpath(prefix, LANDMARK);
return 1;
}
/* Check to see if argv[0] is in the build directory */ /* Check to see if argv[0] is in the build directory */
strcpy(prefix, argv0_path); strcpy(prefix, argv0_path);
joinpath(prefix, "Modules/Setup"); joinpath(prefix, "Modules/Setup");
@ -290,19 +302,6 @@ search_for_prefix(argv0_path, home)
return -1; return -1;
} }
if (home) {
/* Check $PYTHONHOME */
char *delim;
strcpy(prefix, home);
delim = strchr(prefix, DELIM);
if (delim)
*delim = '\0';
joinpath(prefix, lib_python);
joinpath(prefix, LANDMARK);
if (ismodule(prefix))
return 1;
}
/* Search from argv0_path, until root is found */ /* Search from argv0_path, until root is found */
strcpy(prefix, argv0_path); strcpy(prefix, argv0_path);
do { do {
@ -334,16 +333,8 @@ search_for_exec_prefix(argv0_path, home)
{ {
int n; int n;
/* Check to see if argv[0] is in the build directory */ /* If PYTHONHOME is set, we believe it unconditionally */
strcpy(exec_prefix, argv0_path);
joinpath(exec_prefix, "Modules/Setup");
if (isfile(exec_prefix)) {
reduce(exec_prefix);
return -1;
}
if (home) { if (home) {
/* Check $PYTHONHOME */
char *delim; char *delim;
delim = strchr(home, DELIM); delim = strchr(home, DELIM);
if (delim) if (delim)
@ -352,10 +343,17 @@ search_for_exec_prefix(argv0_path, home)
strcpy(exec_prefix, home); strcpy(exec_prefix, home);
joinpath(exec_prefix, lib_python); joinpath(exec_prefix, lib_python);
joinpath(exec_prefix, "lib-dynload"); joinpath(exec_prefix, "lib-dynload");
if (isdir(exec_prefix))
return 1; return 1;
} }
/* Check to see if argv[0] is in the build directory */
strcpy(exec_prefix, argv0_path);
joinpath(exec_prefix, "Modules/Setup");
if (isfile(exec_prefix)) {
reduce(exec_prefix);
return -1;
}
/* Search from argv0_path, until root is found */ /* Search from argv0_path, until root is found */
strcpy(exec_prefix, argv0_path); strcpy(exec_prefix, argv0_path);
do { do {

View File

@ -53,7 +53,7 @@ PERFORMANCE OF THIS SOFTWARE.
* We attempt to locate the "Python Home" - if the PYTHONHOME env var * We attempt to locate the "Python Home" - if the PYTHONHOME env var
is set, we believe it. Otherwise, we use the path of our host .EXE's is set, we believe it. Otherwise, we use the path of our host .EXE's
to try and locate our "landmark" (lib\\string.py) and deduce our home. to try and locate our "landmark" (lib\\os.py) and deduce our home.
- If we DO have a Python Home: The relevant sub-directories (Lib, - If we DO have a Python Home: The relevant sub-directories (Lib,
plat-win, lib-tk, etc) are based on the Python Home plat-win, lib-tk, etc) are based on the Python Home
- If we DO NOT have a Python Home, the core Python Path is - If we DO NOT have a Python Home, the core Python Path is
@ -110,7 +110,7 @@ PERFORMANCE OF THIS SOFTWARE.
*/ */
#ifndef LANDMARK #ifndef LANDMARK
#define LANDMARK "lib\\string.py" #define LANDMARK "lib\\os.py"
#endif #endif
static char prefix[MAXPATHLEN+1]; static char prefix[MAXPATHLEN+1];

View File

@ -68,14 +68,14 @@ extern BOOL PyWin_IsWin32s();
* *
* Otherwise, if there is a PYTHONPATH environment variable, we return that. * Otherwise, if there is a PYTHONPATH environment variable, we return that.
* *
* Otherwise we try to find $progpath/lib/string.py, and if found, then * Otherwise we try to find $progpath/lib/os.py, and if found, then
* root is $progpath/lib, and we return Python path as compiled PYTHONPATH * root is $progpath/lib, and we return Python path as compiled PYTHONPATH
* with all "./lib" replaced by $root (as above). * with all "./lib" replaced by $root (as above).
* *
*/ */
#ifndef LANDMARK #ifndef LANDMARK
#define LANDMARK "lib\\string.py" #define LANDMARK "lib\\os.py"
#endif #endif
static char prefix[MAXPATHLEN+1]; static char prefix[MAXPATHLEN+1];