#!/usr/bin/env bash echo "Test ability to source emsdk_env.sh in different shells" if [ -n "$EMSDK" ]; then echo "EMSDK is already defined in this shell. Run tests in a shell without sourcing emsdk_env.sh first" exit 1 fi DIR=$(dirname "$BASH_SOURCE") # setup a symlink relative to the current dir REL_LINK_DIR="$DIR/tmp" if [ -d "$REL_LINK_DIR" ]; then rm -rf "$REL_LINK_DIR" fi echo "Creating links in $REL_LINK_DIR" mkdir -p "$REL_LINK_DIR" (cd $DIR/.. && ln -s `pwd` "$REL_LINK_DIR/emsdk") (cd $DIR/.. && ln -s `pwd`/emsdk_env.sh "$REL_LINK_DIR") # setup a symlink in an absolute directory ABS_LINK_DIR="/tmp/emsdk_env_test" if [ -d "$ABS_LINK_DIR" ]; then rm -rf "$ABS_LINK_DIR" fi echo "Creating links in $ABS_LINK_DIR" mkdir -p "$ABS_LINK_DIR" (cd $DIR/.. && ln -s `pwd` "$ABS_LINK_DIR/emsdk") (cd $DIR/.. && ln -s `pwd`/emsdk_env.sh "$ABS_LINK_DIR") PATH1="$DIR/../emsdk_env.sh" PATH2="$REL_LINK_DIR/emsdk/emsdk_env.sh" PATH3="$REL_LINK_DIR/emsdk_env.sh" PATH4="$ABS_LINK_DIR/emsdk/emsdk_env.sh" PATH5="$ABS_LINK_DIR/emsdk_env.sh" assert_emcc() { current=$1 cmd=$2 value=$3 if [ -z "$value" ] || [ "$value" == "false" ]; then echo "FAILED: $current" echo " unable to get EMSDK in $current using '$cmd'" else echo "SUCCESS: $current testing $cmd" echo " -> EMSDK = $value" fi } test_bash() { value=$(bash --rcfile <(echo $1)) assert_emcc bash "$1" "$value" } test_zsh() { value=$(zsh -d -c "$1") assert_emcc zsh "$1" "$value" } test_ksh() { value=$(ksh -c "$1") assert_emcc ksh "$1" "$value" } it_tests_direct_path() { TEST_SCRIPT=". ${PATH1}"' >/dev/null 2>&1; if [ -n "$EMSDK" ]; then echo "$EMSDK"; else echo false; fi ; exit' test_bash "$TEST_SCRIPT" test_zsh "$TEST_SCRIPT" test_ksh "$TEST_SCRIPT" TEST_SCRIPT="source ${PATH1}"' >/dev/null 2>&1; if [ -n "$EMSDK" ]; then echo "$EMSDK"; else echo false; fi ; exit' test_bash "$TEST_SCRIPT" test_zsh "$TEST_SCRIPT" test_ksh "$TEST_SCRIPT" } it_tests_via_relative_dir_symlink() { TEST_SCRIPT=". ${PATH2}"' >/dev/null 2>&1; if [ -n "$EMSDK" ]; then echo "$EMSDK"; else echo false; fi ; exit' test_bash "$TEST_SCRIPT" test_zsh "$TEST_SCRIPT" test_ksh "$TEST_SCRIPT" TEST_SCRIPT="source ${PATH2}"' >/dev/null 2>&1; if [ -n "$EMSDK" ]; then echo "$EMSDK"; else echo false; fi ; exit' test_bash "$TEST_SCRIPT" test_zsh "$TEST_SCRIPT" test_ksh "$TEST_SCRIPT" } it_tests_via_relative_file_symlink() { TEST_SCRIPT=". ${PATH3}"' >/dev/null 2>&1; if [ -n "$EMSDK" ]; then echo "$EMSDK"; else echo false; fi ; exit' test_bash "$TEST_SCRIPT" test_zsh "$TEST_SCRIPT" test_ksh "$TEST_SCRIPT" TEST_SCRIPT="source ${PATH3}"' >/dev/null 2>&1; if [ -n "$EMSDK" ]; then echo "$EMSDK"; else echo false; fi ; exit' test_bash "$TEST_SCRIPT" test_zsh "$TEST_SCRIPT" test_ksh "$TEST_SCRIPT" } it_tests_via_absolute_dir_symlink() { TEST_SCRIPT=". ${PATH4}"' >/dev/null 2>&1; if [ -n "$EMSDK" ]; then echo "$EMSDK"; else echo false; fi ; exit' test_bash "$TEST_SCRIPT" test_zsh "$TEST_SCRIPT" test_ksh "$TEST_SCRIPT" TEST_SCRIPT="source ${PATH4}"' >/dev/null 2>&1; if [ -n "$EMSDK" ]; then echo "$EMSDK"; else echo false; fi ; exit' test_bash "$TEST_SCRIPT" test_zsh "$TEST_SCRIPT" test_ksh "$TEST_SCRIPT" } it_tests_via_absolute_file_symlink() { TEST_SCRIPT=". ${PATH5}"' >/dev/null 2>&1; if [ -n "$EMSDK" ]; then echo "$EMSDK"; else echo false; fi ; exit' test_bash "$TEST_SCRIPT" test_zsh "$TEST_SCRIPT" test_ksh "$TEST_SCRIPT" TEST_SCRIPT="source ${PATH5}"' >/dev/null 2>&1; if [ -n "$EMSDK" ]; then echo "$EMSDK"; else echo false; fi ; exit' test_bash "$TEST_SCRIPT" test_zsh "$TEST_SCRIPT" test_ksh "$TEST_SCRIPT" } run_bash_tests() { it_tests_direct_path it_tests_via_relative_dir_symlink it_tests_via_relative_file_symlink it_tests_via_absolute_dir_symlink it_tests_via_absolute_file_symlink } run_bash_tests rm -rf $REL_LINK_DIR rm -rf $ABS_LINK_DIR