mirror of
https://github.com/keymanapp/keyman.git
synced 2026-08-23 16:57:40 +00:00
Previously the builder scripts defined a readonly `VERSION` environment variable for the Keyman version. That caused problems when another (external) script tried to define a `VERSION` variable. We encountered this problem when trying to move the TC build steps of a configuration into a single script (#13399) when we tried to source `~/.nvm/nvm.sh`. This change uses a Keyman specific prefix for the version variables and renames `VERSION` → `KEYMAN_VERSION` etc. Unfortunately these variables are used in a lot of places, so this turned out to be a bit of a yak shave. Test-bot: skip
85 lines
3.2 KiB
Bash
85 lines
3.2 KiB
Bash
# shellcheck shell=bash
|
|
# no hashbang for .inc.sh
|
|
|
|
. "$KEYMAN_ROOT/resources/build/minimum-versions.inc.sh"
|
|
|
|
#
|
|
# We don't want to rely on emcc being on the path, because Emscripten puts far
|
|
# too many things onto the path (in particular for us, node).
|
|
#
|
|
# The following comment suggests that we don't need emcc on the path.
|
|
# https://github.com/emscripten-core/emscripten/issues/4848#issuecomment-1097357775
|
|
#
|
|
# So we try and locate emcc in common locations ourselves. The search pattern
|
|
# is:
|
|
#
|
|
# 1. Look for $EMSCRIPTEN_BASE (our primary emscripten variable), which should
|
|
# point to the folder that emcc is located in
|
|
# 2. Look for $EMCC which should point to the emcc executable
|
|
# 3. Look for emcc on the path
|
|
#
|
|
locate_emscripten() {
|
|
local EMCC_EXECUTABLE
|
|
if [[ "${BUILDER_OS}" == "win" ]]; then
|
|
EMCC_EXECUTABLE="emcc.py"
|
|
else
|
|
EMCC_EXECUTABLE="emcc"
|
|
fi
|
|
if [[ -z ${EMSCRIPTEN_BASE+x} ]]; then
|
|
if [[ -z ${EMCC+x} ]]; then
|
|
local EMCC=$(which ${EMCC_EXECUTABLE})
|
|
[[ -z $EMCC ]] && builder_die "locate_emscripten: Could not locate emscripten (${EMCC_EXECUTABLE}) on the path or with \$EMCC or \$EMSCRIPTEN_BASE"
|
|
fi
|
|
[[ -f $EMCC && ! -x $EMCC ]] && builder_die "locate_emscripten: Variable EMCC ($EMCC) points to ${EMCC_EXECUTABLE} but it is not executable"
|
|
[[ -x $EMCC ]] || builder_die "locate_emscripten: Variable EMCC ($EMCC) does not point to a valid executable ${EMCC_EXECUTABLE}"
|
|
EMSCRIPTEN_BASE="$(dirname "$EMCC")"
|
|
fi
|
|
[[ -f ${EMSCRIPTEN_BASE}/${EMCC_EXECUTABLE} && ! -x ${EMSCRIPTEN_BASE}/${EMCC_EXECUTABLE} ]] && builder_die "locate_emscripten: Variable EMSCRIPTEN_BASE ($EMSCRIPTEN_BASE) contains ${EMCC_EXECUTABLE} but it is not executable"
|
|
[[ -x ${EMSCRIPTEN_BASE}/${EMCC_EXECUTABLE} ]] || builder_die "locate_emscripten: Variable EMSCRIPTEN_BASE ($EMSCRIPTEN_BASE) does not point to ${EMCC_EXECUTABLE}'s folder"
|
|
|
|
verify_emscripten_version
|
|
}
|
|
|
|
# Ensure that we use correct version of emsdk on build agents.
|
|
# For developers, define KEYMAN_USE_EMSDK to do this on your
|
|
# build machine.
|
|
verify_emscripten_version() {
|
|
if [[ "$KEYMAN_VERSION_ENVIRONMENT" != local || ! -z "${KEYMAN_USE_EMSDK+x}" ]]; then
|
|
_select_emscripten_version_with_emsdk
|
|
fi
|
|
}
|
|
|
|
# Use emsdk to select the appropriate version of Emscripten
|
|
# according to minimum-versions.inc.sh
|
|
_select_emscripten_version_with_emsdk() {
|
|
if [[ -z "${EMSCRIPTEN_BASE+x}" ]]; then
|
|
builder_die "Variable EMSCRIPTEN_BASE must be set"
|
|
fi
|
|
|
|
if [[ -z "${KEYMAN_MIN_VERSION_EMSCRIPTEN+x}" ]]; then
|
|
builder_die "Variable KEYMAN_MIN_VERSION_EMSCRIPTEN must be set"
|
|
fi
|
|
|
|
pushd "${EMSCRIPTEN_BASE}/../.." > /dev/null
|
|
if [[ ! -f emsdk ]]; then
|
|
builder_die "emsdk[.bat] should be in $(pwd)"
|
|
fi
|
|
|
|
export EMSDK_KEEP_DOWNLOADS=1
|
|
if builder_try_offline; then
|
|
if [[ ! -f ./emsdk_env.sh ]]; then
|
|
builder_die "emsdk_env.sh not found - emsdk not installed?"
|
|
fi
|
|
. ./emsdk_env.sh
|
|
if ! emcc --version | grep -q "$KEYMAN_MIN_VERSION_EMSCRIPTEN"; then
|
|
builder_die "Wrong emsdk version installed"
|
|
fi
|
|
else
|
|
git pull
|
|
./emsdk install "$KEYMAN_MIN_VERSION_EMSCRIPTEN"
|
|
./emsdk activate "$KEYMAN_MIN_VERSION_EMSCRIPTEN"
|
|
cd upstream/emscripten
|
|
npm install
|
|
fi
|
|
popd > /dev/null
|
|
}
|