mirror of
https://github.com/keymanapp/keyman.git
synced 2026-08-05 00:15:32 +00:00
When running on CI kmcmplib gets fully build, which requires emscripten. This change installs emscripten before running the source tarball verification. Also modify `launchpad.sh` and add option `--no-sign` so that we don't have to set up things for signing. Use long options for `debuild` where possible. Build-bot: skip build:linux Test-bot: skip
138 lines
4.7 KiB
Bash
138 lines
4.7 KiB
Bash
# shellcheck shell=bash
|
|
# Keyman is copyright (C) SIL Global. MIT License.
|
|
|
|
# shellcheck disable=SC2154
|
|
. "${KEYMAN_ROOT}/resources/build/minimum-versions.inc.sh"
|
|
|
|
# On Windows/ARM64 machines, we build with the Emscripten x64 toolchain
|
|
|
|
if builder_is_windows; then
|
|
if [[ "${MSYSTEM-x}" == CLANGARM64 ]]; then
|
|
builder_echo "Using x86_64 for emscripten"
|
|
export EMSDK_ARCH=x86_64
|
|
fi
|
|
fi
|
|
|
|
#
|
|
# 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_is_windows; then
|
|
EMCC_EXECUTABLE="emcc.py"
|
|
else
|
|
EMCC_EXECUTABLE="emcc"
|
|
fi
|
|
if [[ -z "${EMSCRIPTEN_BASE:-}" ]]; then
|
|
if [[ -z "${EMCC:-}" ]]; then
|
|
local EMCC
|
|
EMCC="$(command -v "${EMCC_EXECUTABLE}" || true)"
|
|
[[ -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"
|
|
if [[ ! -d "${EMSCRIPTEN_BASE}" ]]; then
|
|
# $EMSCRIPTEN_BASE does not exist, but check if we have emsdk in a parent directory. #13464
|
|
_can_locate_emsdk "${EMSCRIPTEN_BASE}" || builder_die "locate_emscripten: Variable EMSCRIPTEN_BASE (${EMSCRIPTEN_BASE}) points to a non-existent directory"
|
|
else
|
|
[[ -x "${EMSCRIPTEN_BASE}/${EMCC_EXECUTABLE}" ]] || builder_die "locate_emscripten: Variable EMSCRIPTEN_BASE (${EMSCRIPTEN_BASE}) does not point to ${EMCC_EXECUTABLE}'s folder"
|
|
fi
|
|
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() {
|
|
# shellcheck disable=SC2154
|
|
if [[ "${KEYMAN_VERSION_ENVIRONMENT}" != local || ! -z "${KEYMAN_USE_EMSDK+x}" ]]; then
|
|
_select_emscripten_version_with_emsdk
|
|
fi
|
|
}
|
|
|
|
# Check if the grandparent directory (i.e. emscripten root) contains emsdk
|
|
_can_locate_emsdk() {
|
|
local DIR="$1"
|
|
local GRANDPARENT
|
|
GRANDPARENT="$(dirname "$(dirname "${DIR}")")"
|
|
|
|
if [[ -f "${GRANDPARENT}/emsdk" ]]; then
|
|
return 0
|
|
else
|
|
return 1
|
|
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
|
|
|
|
local GRANDPARENT
|
|
GRANDPARENT="$(dirname "$(dirname "${EMSCRIPTEN_BASE}")")"
|
|
(
|
|
# shellcheck disable=SC2164
|
|
cd "${GRANDPARENT}"
|
|
if [[ ! -f emsdk ]]; then
|
|
builder_die "emsdk[.bat] should be in ${GRANDPARENT}"
|
|
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}"
|
|
# shellcheck disable=SC2164
|
|
cd upstream/emscripten
|
|
npm install
|
|
fi
|
|
)
|
|
}
|
|
|
|
install_emscripten_into() {
|
|
if [[ -z "${1:-}" ]]; then
|
|
builder_die "${FUNCNAME[0]} requires a directory argument"
|
|
fi
|
|
|
|
local EMSDK_DIR=$1
|
|
builder_heading "Installing emscripten into ${EMSDK_DIR}"
|
|
|
|
mkdir -p "${EMSDK_DIR}"
|
|
(
|
|
cd "${EMSDK_DIR}"
|
|
git clone https://github.com/emscripten-core/emsdk.git .
|
|
./emsdk install "${KEYMAN_MIN_VERSION_EMSCRIPTEN}"
|
|
./emsdk activate "${KEYMAN_MIN_VERSION_EMSCRIPTEN}"
|
|
cd upstream/emscripten
|
|
npm install
|
|
)
|
|
}
|