Add -E command line switch (ignore environment variables like PYTHONHOME
and PYTHONPATH).
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_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 @@
 			$(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 @@
 # 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 @@
 # 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 @@
 .B \-S
 ]
 [
+.B \-E
+]
+[
 .B \-t
 ]
 [
@@ -99,6 +102,10 @@
 .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 @@
     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 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 @@
 -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 @@
 	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_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 @@
 
 		case 'i':
 			inspect++;
+			saw_inspect_flag = 1;
 			Py_InteractiveFlag++;
 			break;
 
@@ -157,12 +156,17 @@
 			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 @@
 		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 @@
 	}
 	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 @@
 	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 @@
 	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 @@
 	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_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 @@
 	char tempbuf[MAX_PATH];
 #endif
 
-	if (getenv("PYTHONCASEOK") != NULL)
+	if (Py_GETENV("PYTHONCASEOK") != NULL)
 		return 1;
 
 #ifdef __CYGWIN__
@@ -1092,7 +1092,7 @@
 	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 @@
 	FSSpec fss;
 	OSErr err;
 
-	if (getenv("PYTHONCASEOK") != NULL)
+	if (Py_GETENV("PYTHONCASEOK") != NULL)
 		return 1;
 
 #ifndef USE_GUSI1
@@ -1147,7 +1147,7 @@
 	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_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 @@
 		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 @@
 #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 @@
 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 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);