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.
diff --git a/Modules/getpath.c b/Modules/getpath.c
index 78568137..db37a1b 100644
--- a/Modules/getpath.c
+++ b/Modules/getpath.c
@@ -87,7 +87,7 @@
  * Modules/Setup.  If the landmark is found, we're done.
  *
  * 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
  * 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
@@ -150,7 +150,7 @@
 #endif
 
 #ifndef LANDMARK
-#define LANDMARK "string.py"
+#define LANDMARK "os.py"
 #endif
 
 static char prefix[MAXPATHLEN+1];
@@ -265,6 +265,18 @@
 	int n;
 	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 */
 	strcpy(prefix, argv0_path);
 	joinpath(prefix, "Modules/Setup");
@@ -290,19 +302,6 @@
 			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 */
 	strcpy(prefix, argv0_path);
 	do {
@@ -334,16 +333,8 @@
 {
 	int n;
 
-	/* 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;
-	}
-
+	/* If PYTHONHOME is set, we believe it unconditionally */
 	if (home) {
-		/* Check $PYTHONHOME */
 		char *delim;
 		delim = strchr(home, DELIM);
 		if (delim)
@@ -352,10 +343,17 @@
 			strcpy(exec_prefix, home);
 		joinpath(exec_prefix, lib_python);
 		joinpath(exec_prefix, "lib-dynload");
-		if (isdir(exec_prefix))
 			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 */
 	strcpy(exec_prefix, argv0_path);
 	do {