diff options
-rw-r--r-- | Include/pydebug.h | 6 | ||||
-rw-r--r-- | Makefile.pre.in | 20 | ||||
-rw-r--r-- | Misc/python.man | 7 | ||||
-rw-r--r-- | Modules/getpath.c | 2 | ||||
-rw-r--r-- | Modules/main.c | 25 | ||||
-rw-r--r-- | Modules/timemodule.c | 2 | ||||
-rw-r--r-- | PC/getpathp.c | 2 | ||||
-rw-r--r-- | PC/os2vacpp/getpathp.c | 2 | ||||
-rw-r--r-- | Python/frozenmain.c | 4 | ||||
-rw-r--r-- | Python/import.c | 8 | ||||
-rw-r--r-- | Python/pythonrun.c | 13 | ||||
-rw-r--r-- | RISCOS/Modules/getpath_riscos.c | 2 |
12 files changed, 59 insertions, 34 deletions
diff --git a/Include/pydebug.h b/Include/pydebug.h index 0372401..94ea352 100644 --- a/Include/pydebug.h +++ b/Include/pydebug.h @@ -14,6 +14,12 @@ extern DL_IMPORT(int) Py_UseClassExceptionsFlag; extern DL_IMPORT(int) Py_FrozenFlag; extern DL_IMPORT(int) Py_TabcheckFlag; extern DL_IMPORT(int) Py_UnicodeFlag; +extern DL_IMPORT(int) Py_IgnoreEnvironmentFlag; + +/* this is a wrapper around getenv() the pays attention to + Py_IgnoreEnvironmentFlag. It should be used for getting variables like + PYTHONPATH and PYTHONHOME from the environment */ +#define Py_GETENV(s) (Py_IgnoreEnvironmentFlag ? NULL : getenv(s)) DL_IMPORT(void) Py_FatalError(char *message); diff --git a/Makefile.pre.in b/Makefile.pre.in index dc63519..139be8b 100644 --- a/Makefile.pre.in +++ b/Makefile.pre.in @@ -281,12 +281,12 @@ $(PYTHON): Modules/$(MAINOBJ) $(LDLIBRARY) $(LDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS) $(LDLAST) platform: $(PYTHON) - ./$(PYTHON) -c 'import sys ; from distutils.util import get_platform ; print get_platform()+"-"+sys.version[0:3]' >platform + ./$(PYTHON) -E -c 'import sys ; from distutils.util import get_platform ; print get_platform()+"-"+sys.version[0:3]' >platform # Build the shared modules sharedmods: $(PYTHON) - PYTHONPATH= ./$(PYTHON) $(srcdir)/setup.py build + ./$(PYTHON) -E $(srcdir)/setup.py build # buildno should really depend on something like LIBRARY_SRC buildno: $(PARSER_OBJS) \ @@ -466,26 +466,26 @@ $(LIBRARY_OBJS) $(MODOBJS) Modules/$(MAINOBJ): $(PYTHON_HEADERS) # Test the interpreter (twice, once without .pyc files, once with) TESTOPTS= -l TESTPROG= $(srcdir)/Lib/test/regrtest.py -TESTPYTHON= ./$(PYTHON) -tt +TESTPYTHON= ./$(PYTHON) -E -tt test: all platform -find $(srcdir)/Lib -name '*.py[co]' -print | xargs rm -f - -PYTHONPATH= $(TESTPYTHON) $(TESTPROG) $(TESTOPTS) - PYTHONPATH= $(TESTPYTHON) $(TESTPROG) $(TESTOPTS) + -$(TESTPYTHON) $(TESTPROG) $(TESTOPTS) + $(TESTPYTHON) $(TESTPROG) $(TESTOPTS) QUICKTESTOPTS= $(TESTOPTS) -x test_thread test_signal test_strftime \ test_unicodedata test_re test_sre test_select test_poll \ test_linuxaudiodev test_sunaudiodev quicktest: all platform -find $(srcdir)/Lib -name '*.py[co]' -print | xargs rm -f - -PYTHONPATH= $(TESTPYTHON) $(TESTPROG) $(QUICKTESTOPTS) - PYTHONPATH= $(TESTPYTHON) $(TESTPROG) $(QUICKTESTOPTS) + -$(TESTPYTHON) $(TESTPROG) $(QUICKTESTOPTS) + $(TESTPYTHON) $(TESTPROG) $(QUICKTESTOPTS) MEMTESTOPTS= $(QUICKTESTOPTS) -x test_dl test___all__ test_fork1 \ test_longexp memtest: all platform -rm -f $(srcdir)/Lib/test/*.py[co] - -PYTHONPATH= $(TESTPYTHON) $(TESTPROG) $(MEMTESTOPTS) - PYTHONPATH= $(TESTPYTHON) $(TESTPROG) $(MEMTESTOPTS) + -$(TESTPYTHON) $(TESTPROG) $(MEMTESTOPTS) + $(TESTPYTHON) $(TESTPROG) $(MEMTESTOPTS) # Install everything install: altinstall bininstall maninstall @@ -708,7 +708,7 @@ libainstall: all # Install the dynamically loadable modules # This goes into $(exec_prefix) sharedinstall: - PYTHONPATH= ./$(PYTHON) $(srcdir)/setup.py install \ + ./$(PYTHON) -E $(srcdir)/setup.py install \ --install-platlib=$(DESTSHARED) # Build the toplevel Makefile diff --git a/Misc/python.man b/Misc/python.man index 2697bc7..723d714 100644 --- a/Misc/python.man +++ b/Misc/python.man @@ -16,6 +16,9 @@ python \- an interpreted, interactive, object-oriented programming language .B \-S ] [ +.B \-E +] +[ .B \-t ] [ @@ -99,6 +102,10 @@ and the site-dependent manipulations of .I sys.path that it entails. .TP +.B \-E +Ignore environment variables like PYTHONPATH and PYTHONHOME that modify +the behavior of the interpreter. +.TP .B \-t Issue a warning when a source file mixes tabs and spaces for indentation in a way that makes it depend on the worth of a tab diff --git a/Modules/getpath.c b/Modules/getpath.c index c7567f7..2fd8f75 100644 --- a/Modules/getpath.c +++ b/Modules/getpath.c @@ -365,7 +365,7 @@ calculate_path(void) static char delimiter[2] = {DELIM, '\0'}; static char separator[2] = {SEP, '\0'}; char *pythonpath = PYTHONPATH; - char *rtpypath = getenv("PYTHONPATH"); + char *rtpypath = Py_GETENV("PYTHONPATH"); char *home = Py_GetPythonHome(); char *path = getenv("PATH"); char *prog = Py_GetProgramName(); diff --git a/Modules/main.c b/Modules/main.c index 72b756b..ad2616d 100644 --- a/Modules/main.c +++ b/Modules/main.c @@ -28,7 +28,7 @@ static char **orig_argv; static int orig_argc; /* command line options */ -#define BASE_OPTS "c:diOStuUvxXhVW:" +#define BASE_OPTS "c:diOSEtuUvxXhVW:" #ifndef RISCOS #define PROGRAM_OPTS BASE_OPTS @@ -53,6 +53,7 @@ Options and arguments (and corresponding environment variables):\n\ -O : optimize generated bytecode (a tad; also PYTHONOPTIMIZE=x)\n\ -OO : remove doc-strings in addition to the -O optimizations\n\ -S : don't imply 'import site' on initialization\n\ +-E : ignore environment variables (such as PYTHONPATH)\n\ -t : issue warnings about inconsistent tab usage (-tt: issue errors)\n\ "; static char *usage_mid = "\ @@ -108,6 +109,8 @@ Py_Main(int argc, char **argv) int stdin_is_interactive = 0; int help = 0; int version = 0; + int saw_inspect_flag = 0; + int saw_unbuffered_flag = 0; PyCompilerFlags cf; orig_argc = argc; /* For Py_GetArgcArgv() */ @@ -117,11 +120,6 @@ Py_Main(int argc, char **argv) Py_RISCOSWimpFlag = 0; #endif - if ((p = getenv("PYTHONINSPECT")) && *p != '\0') - inspect = 1; - if ((p = getenv("PYTHONUNBUFFERED")) && *p != '\0') - unbuffered = 1; - PySys_ResetWarnOptions(); while ((c = _PyOS_GetOpt(argc, argv, PROGRAM_OPTS)) != EOF) { @@ -146,6 +144,7 @@ Py_Main(int argc, char **argv) case 'i': inspect++; + saw_inspect_flag = 1; Py_InteractiveFlag++; break; @@ -157,12 +156,17 @@ Py_Main(int argc, char **argv) Py_NoSiteFlag++; break; + case 'E': + Py_IgnoreEnvironmentFlag++; + break; + case 't': Py_TabcheckFlag++; break; case 'u': unbuffered++; + saw_unbuffered_flag = 1; break; case 'v': @@ -210,6 +214,13 @@ Py_Main(int argc, char **argv) exit(0); } + if (!saw_inspect_flag && + (p = Py_GETENV("PYTHONINSPECT")) && *p != '\0') + inspect = 1; + if (!saw_unbuffered_flag && + (p = Py_GETENV("PYTHONUNBUFFERED")) && *p != '\0') + unbuffered = 1; + if (command == NULL && _PyOS_optind < argc && strcmp(argv[_PyOS_optind], "-") != 0) { @@ -307,7 +318,7 @@ Py_Main(int argc, char **argv) } else { if (filename == NULL && stdin_is_interactive) { - char *startup = getenv("PYTHONSTARTUP"); + char *startup = Py_GETENV("PYTHONSTARTUP"); if (startup != NULL && startup[0] != '\0') { FILE *fp = fopen(startup, "r"); if (fp != NULL) { diff --git a/Modules/timemodule.c b/Modules/timemodule.c index 0a54a93..50e4053 100644 --- a/Modules/timemodule.c +++ b/Modules/timemodule.c @@ -594,7 +594,7 @@ inittime(void) m = Py_InitModule3("time", time_methods, module_doc); d = PyModule_GetDict(m); /* Accept 2-digit dates unless PYTHONY2K is set and non-empty */ - p = getenv("PYTHONY2K"); + p = Py_GETENV("PYTHONY2K"); ins(d, "accept2dyear", PyInt_FromLong((long) (!p || !*p))); /* Squirrel away the module's dictionary for the y2k check */ Py_INCREF(d); diff --git a/PC/getpathp.c b/PC/getpathp.c index 760a575..f32c9d3 100644 --- a/PC/getpathp.c +++ b/PC/getpathp.c @@ -425,7 +425,7 @@ calculate_path(void) char *buf; size_t bufsz; char *pythonhome = Py_GetPythonHome(); - char *envpath = getenv("PYTHONPATH"); + char *envpath = Py_GETENV("PYTHONPATH"); #ifdef MS_WIN32 int skiphome, skipdefault; diff --git a/PC/os2vacpp/getpathp.c b/PC/os2vacpp/getpathp.c index 35ce996..5860e75 100644 --- a/PC/os2vacpp/getpathp.c +++ b/PC/os2vacpp/getpathp.c @@ -289,7 +289,7 @@ calculate_path(void) char *buf; int bufsz; char *pythonhome = Py_GetPythonHome(); - char *envpath = getenv("PYTHONPATH"); + char *envpath = Py_GETENV("PYTHONPATH"); #ifdef MS_WIN32 char *machinepath, *userpath; diff --git a/Python/frozenmain.c b/Python/frozenmain.c index a03a2f8..efc87d7 100644 --- a/Python/frozenmain.c +++ b/Python/frozenmain.c @@ -30,9 +30,9 @@ Py_FrozenMain(int argc, char **argv) Py_FrozenFlag = 1; /* Suppress errors from getpath.c */ - if ((p = getenv("PYTHONINSPECT")) && *p != '\0') + if ((p = Py_GETENV("PYTHONINSPECT")) && *p != '\0') inspect = 1; - if ((p = getenv("PYTHONUNBUFFERED")) && *p != '\0') + if ((p = Py_GETENV("PYTHONUNBUFFERED")) && *p != '\0') unbuffered = 1; if (unbuffered) { diff --git a/Python/import.c b/Python/import.c index 456a5be..82524f6 100644 --- a/Python/import.c +++ b/Python/import.c @@ -1069,7 +1069,7 @@ case_ok(char *buf, int len, int namelen, char *name) char tempbuf[MAX_PATH]; #endif - if (getenv("PYTHONCASEOK") != NULL) + if (Py_GETENV("PYTHONCASEOK") != NULL) return 1; #ifdef __CYGWIN__ @@ -1092,7 +1092,7 @@ case_ok(char *buf, int len, int namelen, char *name) struct ffblk ffblk; int done; - if (getenv("PYTHONCASEOK") != NULL) + if (Py_GETENV("PYTHONCASEOK") != NULL) return 1; done = findfirst(buf, &ffblk, FA_ARCH|FA_RDONLY|FA_HIDDEN|FA_DIREC); @@ -1109,7 +1109,7 @@ case_ok(char *buf, int len, int namelen, char *name) FSSpec fss; OSErr err; - if (getenv("PYTHONCASEOK") != NULL) + if (Py_GETENV("PYTHONCASEOK") != NULL) return 1; #ifndef USE_GUSI1 @@ -1147,7 +1147,7 @@ case_ok(char *buf, int len, int namelen, char *name) char dirname[MAXPATHLEN + 1]; const int dirlen = len - namelen - 1; /* don't want trailing SEP */ - if (getenv("PYTHONCASEOK") != NULL) + if (Py_GETENV("PYTHONCASEOK") != NULL) return 1; /* Copy the dir component into dirname; substitute "." if empty */ diff --git a/Python/pythonrun.c b/Python/pythonrun.c index fbc3b16..c74b062 100644 --- a/Python/pythonrun.c +++ b/Python/pythonrun.c @@ -63,6 +63,7 @@ int Py_NoSiteFlag; /* Suppress 'import site' */ int Py_UseClassExceptionsFlag = 1; /* Needed by bltinmodule.c: deprecated */ int Py_FrozenFlag; /* Needed by getpath.c */ int Py_UnicodeFlag = 0; /* Needed by compile.c */ +int Py_IgnoreEnvironmentFlag; /* e.g. PYTHONPATH, PYTHONHOME */ static int initialized = 0; @@ -98,11 +99,11 @@ Py_Initialize(void) return; initialized = 1; - if ((p = getenv("PYTHONDEBUG")) && *p != '\0') + if ((p = Py_GETENV("PYTHONDEBUG")) && *p != '\0') Py_DebugFlag = Py_DebugFlag ? Py_DebugFlag : 1; - if ((p = getenv("PYTHONVERBOSE")) && *p != '\0') + if ((p = Py_GETENV("PYTHONVERBOSE")) && *p != '\0') Py_VerboseFlag = Py_VerboseFlag ? Py_VerboseFlag : 1; - if ((p = getenv("PYTHONOPTIMIZE")) && *p != '\0') + if ((p = Py_GETENV("PYTHONOPTIMIZE")) && *p != '\0') Py_OptimizeFlag = Py_OptimizeFlag ? Py_OptimizeFlag : 1; interp = PyInterpreterState_New(); @@ -225,7 +226,7 @@ Py_Finalize(void) #ifdef Py_TRACE_REFS if ( #ifdef MS_WINDOWS /* Only ask on Windows if env var set */ - getenv("PYTHONDUMPREFS") && + Py_GETENV("PYTHONDUMPREFS") && #endif /* MS_WINDOWS */ _Py_AskYesNo("Print left references?")) { _Py_PrintReferences(stderr); @@ -394,8 +395,8 @@ char * Py_GetPythonHome(void) { char *home = default_home; - if (home == NULL) - home = getenv("PYTHONHOME"); + if (home == NULL && !Py_IgnoreEnvironmentFlag) + home = Py_GETENV("PYTHONHOME"); return home; } diff --git a/RISCOS/Modules/getpath_riscos.c b/RISCOS/Modules/getpath_riscos.c index 7582b17..8b36952 100644 --- a/RISCOS/Modules/getpath_riscos.c +++ b/RISCOS/Modules/getpath_riscos.c @@ -5,7 +5,7 @@ static char *prefix,*exec_prefix,*progpath,*module_search_path=0; static void calculate_path() -{ char *pypath=getenv("Python$Path"); +{ char *pypath=Py_GETENV("Python$Path"); if(pypath) { module_search_path=malloc(strlen(pypath)+1); if (module_search_path) sprintf(module_search_path,"%s",pypath); |