cat / goq
clone

turns a linux box into a private steam streaming appliance: plug in, tap your key, play from another computer

fix/website-download-wiring
goq / scripts / tests / linux-cross-build-gate.sh
linux-cross-build-gate.sh 3.1K executable
1#!/usr/bin/env bash2# shellcheck disable=SC20163set -euo pipefail45script_dir="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P)"6repo_dir="$(cd -- "$script_dir/../.." && pwd -P)"7gate="$repo_dir/scripts/run-linux-cross-build-gate.sh"8temp_root="$(mktemp -d "${TMPDIR:-/tmp}/goq-cross-build-gate.XXXXXX")"910cleanup() {11 rm -r -- "$temp_root"12}13trap cleanup EXIT1415make_command() {16 local bin_dir="$1"17 local command_name="$2"18 shift 21920 install -d "$bin_dir"21 if [[ ! -e "$bin_dir/bash" ]]; then22 ln -s "$(command -v bash)" "$bin_dir/bash"23 fi24 printf '%s\n' '#!/usr/bin/env bash' "$@" >"$bin_dir/$command_name"25 chmod 0755 "$bin_dir/$command_name"26}2728success_bin="$temp_root/success-bin"29make_command "$success_bin" cargo \30 'printf "%s\n" "$*" >"$GOQ_CARGO_ARGS_LOG"' \31 'printf "%s %s\n" "${PKG_CONFIG_ALLOW_CROSS:-}" "${PKG_CONFIG_ALLOW_SYSTEM_LIBS:-}" >"$GOQ_CARGO_ENV_LOG"'32make_command "$success_bin" cargo-zigbuild 'exit 0'33make_command "$success_bin" zig 'exit 0'3435success_log="$temp_root/success.log"36GOQ_CARGO_ARGS_LOG="$temp_root/cargo-args.log" \37 GOQ_CARGO_ENV_LOG="$temp_root/cargo-env.log" \38 GOQ_REQUIRE_LINUX_CROSS_BUILD=1 \39 GOQ_VERIFY_IN_PROCESS_GSTREAMER=0 \40 PATH="$success_bin" \41 "$gate" >"$success_log"42grep -Fxq 'linux_cross_build=ok' "$success_log"43grep -Fxq \44 'zigbuild --locked -p sigil-host --bins --target x86_64-unknown-linux-gnu.2.17' \45 "$temp_root/cargo-args.log"4647GOQ_CARGO_ARGS_LOG="$temp_root/cargo-args.log" \48 GOQ_CARGO_ENV_LOG="$temp_root/cargo-env.log" \49 GOQ_REQUIRE_LINUX_CROSS_BUILD=1 \50 GOQ_VERIFY_IN_PROCESS_GSTREAMER=1 \51 PATH="$success_bin" \52 "$gate" >"$success_log"53grep -Fxq \54 'zigbuild --locked -p sigil-host --bins --target x86_64-unknown-linux-gnu.2.17 --features in-process-gstreamer' \55 "$temp_root/cargo-args.log"56grep -Fxq '1 1' "$temp_root/cargo-env.log"5758missing_bin="$temp_root/missing-bin"59make_command "$missing_bin" cargo \60 'echo "required mode invoked cargo without both tools" >&2' \61 'exit 91'62make_command "$missing_bin" cargo-zigbuild 'exit 0'6364missing_log="$temp_root/missing.log"65if GOQ_REQUIRE_LINUX_CROSS_BUILD=1 \66 GOQ_VERIFY_IN_PROCESS_GSTREAMER=0 \67 PATH="$missing_bin" \68 "$gate" >"$temp_root/missing.stdout" 2>"$missing_log"; then69 echo 'required cross-build gate accepted a missing point-of-use tool' >&270 exit 171fi72grep -Fxq \73 'required Linux cross-build command is missing at build time: zig' \74 "$missing_log"75if grep -Fq 'required mode invoked cargo' "$missing_log"; then76 echo 'required cross-build gate invoked cargo after tool validation failed' >&277 exit 178fi79if grep -Fq 'linux_cross_build=skipped' "$temp_root/missing.stdout"; then80 echo 'required cross-build gate entered the optional skip path' >&281 exit 182fi8384optional_bin="$temp_root/optional-bin"85make_command "$optional_bin" cargo 'exit 92'86optional_log="$temp_root/optional.log"87GOQ_REQUIRE_LINUX_CROSS_BUILD=0 \88 GOQ_VERIFY_IN_PROCESS_GSTREAMER=0 \89 PATH="$optional_bin" \90 "$gate" >"$optional_log"91grep -Fxq \92 'linux_cross_build=skipped (cargo-zigbuild and zig are both required)' \93 "$optional_log"9495echo 'linux_cross_build_gate=ok'