#!/bin/sh
# Copyright 2019 The Emscripten Authors.  All rights reserved.
# Emscripten is available under two separate licenses, the MIT license and the
# University of Illinois/NCSA Open Source License.  Both these licenses can be
# found in the LICENSE file.

# Wrapper script that runs emsdk.py

# First look for python bundled in Emsdk
if [ -z "$EMSDK_PYTHON" ]; then
  PYTHON3=$(dirname $0)/python/3.9.2-1_64bit/bin/python3
  PYTHON3_CERT_FILE=$(dirname $0)/python/3.9.2-1_64bit/lib/python3.9/site-packages/certifi/cacert.pem
  if [ ! -f $PYTHON3 ]; then
    PYTHON3=$(dirname $0)/python/3.7.4-2_64bit/bin/python3
    PYTHON3_CERT_FILE=$(dirname $0)/python/3.7.4-2_64bit/lib/python3.7/site-packages/certifi/cacert.pem
  fi
  if [ -f $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

    # This is needed for MacOS.  Without this, the urlopen
    # code will try to use /usr/local/etc/openssl/cert.pem
    # which may or may not exist on the system.
    export SSL_CERT_FILE=$PYTHON3_CERT_FILE
  fi
fi

# If bundled python is not found, look for `python3` in PATH.  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" "$@"
