#!/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 pre-built python (macos)
if [ -z "$EMSDK_PYTHON" ]; then
  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" "$@"
