Clear PYTHONHOME when using bundled python (#600)

Fixes: #598
diff --git a/emsdk b/emsdk
index eb24599..7772144 100755
--- a/emsdk
+++ b/emsdk
@@ -6,13 +6,31 @@
 
 # Wrapper script that runs emsdk.py
 
+# First look for pre-built python (macos)
 if [ -z "$EMSDK_PYTHON" ]; then
-  # Look for python3 first.  This is especially important on macOS (See:
-  # https://github.com/emscripten-core/emsdk/pull/273)
-  EMSDK_PYTHON=$(which python3 2> /dev/null)
-  if [ $? != 0 ]; then
-    EMSDK_PYTHON=python
+  PYTHON3=$(dirname $0)/python/3.7.4-2_64bit/bin/python3
+  if [ -e $PYTHON3 ]; then
+    EMSDK_PYTHON=$PYTHON3
+    # When using our bundled python we never want the users
+    # PYTHONHOME or PYTHONPATH
+    # https://github.com/emscripten-core/emsdk/issues/598
+    unset PYTHONHOME
+    unset PYTHONPATH
   fi
 fi
 
+# Look for `python3` first.  This is especially important on macOS (See:
+# https://github.com/emscripten-core/emsdk/pull/273)
+if [ -z "$EMSDK_PYTHON" ]; then
+  PYTHON3=$(which python3 2> /dev/null)
+  if [ $? = 0 ]; then
+    EMSDK_PYTHON=$PYTHON3
+  fi
+fi
+
+# Finally fall back to just looking for `python` in PATH
+if [ -z "$EMSDK_PYTHON" ]; then
+  EMSDK_PYTHON=python
+fi
+
 exec "$EMSDK_PYTHON" "$0.py" "$@"
diff --git a/emsdk.bat b/emsdk.bat
index c65f23e..4ba706e 100644
--- a/emsdk.bat
+++ b/emsdk.bat
@@ -6,41 +6,25 @@
 

 if exist "%~dp0python\3.7.4-pywin32_64bit\python.exe" (

   set EMSDK_PY="%~dp0python\3.7.4-pywin32_64bit\python.exe"

+  :: When using our bundled python we never want the users

+  :: PYTHONHOME or PYTHONPATH

+  :: https://github.com/emscripten-core/emsdk/issues/598

+  set PYTHONHOME=

+  set PYTHONPATH=

   goto end

 )

 

 if exist "%~dp0python\3.7.4_64bit\python.exe" (

   set EMSDK_PY="%~dp0python\3.7.4_64bit\python.exe"

+  set PYTHONHOME=

+  set PYTHONPATH=

   goto end

 )

 

 if exist "%~dp0python\2.7.13.1_64bit\python-2.7.13.amd64\python.exe" (

   set EMSDK_PY="%~dp0python\2.7.13.1_64bit\python-2.7.13.amd64\python.exe"

-  goto end

-)

-

-if exist "%~dp0python\2.7.13.1_32bit\python-2.7.13\python.exe" (

-  set EMSDK_PY="%~dp0python\2.7.13.1_32bit\python-2.7.13\python.exe"

-  goto end

-)

-

-if exist "%~dp0python\2.7.5.3_64bit\python.exe" (

-  set EMSDK_PY="%~dp0python\2.7.5.3_64bit\python.exe"

-  goto end

-)

-

-if exist "%~dp0python\2.7.5.3_32bit\python.exe" (

-  set EMSDK_PY="%~dp0python\2.7.5.3_32bit\python.exe"

-  goto end

-)

-

-if exist "%~dp0python\2.7.5_64bit\python.exe" (

-  set EMSDK_PY="%~dp0python\2.7.5_64bit\python.exe"

-  goto end

-)

-

-if exist "%~dp0python\2.7.5.1_32bit\python.exe" (

-  set EMSDK_PY="%~dp0python\2.7.5.1_32bit\python.exe"

+  set PYTHONHOME=

+  set PYTHONPATH=

   goto end

 )

 

diff --git a/emsdk.py b/emsdk.py
index 6570e28..e4669ee 100755
--- a/emsdk.py
+++ b/emsdk.py
@@ -2575,6 +2575,25 @@
         env_string += 'export ' + key + '="' + value + '";\n'
       else:
         assert False
+      if 'EMSDK_PYTHON' in env_vars:
+        # When using our bundled python we never want the user's
+        # PYTHONHOME or PYTHONPATH
+        # See https://github.com/emscripten-core/emsdk/issues/598
+        if POWERSHELL:
+          env_string += 'Remove-Item env:PYTHONHOME\n'
+          env_string += 'Remove-Item env:PYTHONPATH\n'
+        elif CMD:
+          env_string += 'set PYTHONHOME=\n'
+          env_string += 'set PYTHONPATH=\n'
+        elif CSH:
+          env_string += 'unsetenv PYTHONHOME\n'
+          env_string += 'unsetenv PYTHONPATH\n'
+        elif BASH:
+          env_string += 'unset PYTHONHOME\n'
+          env_string += 'unset PYTHONPATH\n'
+        else:
+          assert False
+
       errlog(key + ' = ' + value)
   return env_string
 
diff --git a/scripts/test.py b/scripts/test.py
index 48d4a5e..c38de83 100755
--- a/scripts/test.py
+++ b/scripts/test.py
@@ -50,7 +50,13 @@
 def checked_call_with_output(cmd, expected=None, unexpected=None, stderr=None):
   cmd = cmd.split(' ')
   print('running: %s' % cmd)
-  stdout = subprocess.check_output(cmd, stderr=stderr, universal_newlines=True)
+  try:
+    stdout = subprocess.check_output(cmd, stderr=stderr, universal_newlines=True)
+  except subprocess.CalledProcessError as e:
+    print(e.stderr)
+    print(e.stdout)
+    raise e
+
   if expected:
     for x in listify(expected):
       assert x in stdout, 'call had the right output: ' + stdout + '\n[[[' + x + ']]]'