iiab-tools/android/termux-setup/build_bundle.sh

87 lines
2.2 KiB
Bash
Raw Normal View History

#!/usr/bin/env bash
set -euo pipefail
# build_bundle.sh
# Bundles modules listed in manifest.sh into ../0_termux-setup_v2.sh
SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
ROOT_DIR="$SCRIPT_DIR"
MANIFEST="${ROOT_DIR}/manifest.sh"
[[ -f "$MANIFEST" ]] || { echo "[!] Missing manifest.sh at: $MANIFEST" >&2; exit 1; }
# Modules live next to build_bundle.sh (same dir)
MOD_DIR="$ROOT_DIR"
PARENT_DIR="$(cd -- "${ROOT_DIR}/.." && pwd)"
OUT_DIR="${ROOT_DIR}/dist"
OUT_FILE="${PARENT_DIR}/0_termux-setup_v2.sh"
TMP_FILE="${OUT_DIR}/.0_termux-setup_v2.tmp.$RANDOM$RANDOM"
mkdir -p "$OUT_DIR"
# Load MODULES array
# shellcheck source=/dev/null
source "$MANIFEST"
# With "set -u", don't reference an unset array directly.
if ! declare -p MODULES >/dev/null 2>&1; then
echo "[!] manifest.sh did not define MODULES array." >&2
exit 1
fi
if (( ${#MODULES[@]} < 1 )); then
echo "[!] MODULES array is empty in manifest.sh." >&2
exit 1
fi
cleanup_tmp() { rm -f -- "$TMP_FILE" 2>/dev/null || true; }
trap cleanup_tmp EXIT
# Bundle header
{
echo '#!/data/data/com.termux/files/usr/bin/bash'
echo 'set -euo pipefail'
echo
echo '# -----------------------------------------------------------------------------'
echo '# GENERATED FILE: do not edit directly.'
echo '# Source modules: termux-setup/*.sh + manifest.sh'
echo '# Rebuild: (cd termux-setup && bash build_bundle.sh)'
echo '# -----------------------------------------------------------------------------'
echo
} >"$TMP_FILE"
# Append each module
for mod in "${MODULES[@]}"; do
src="${MOD_DIR}/${mod}"
if [[ ! -f "$src" ]]; then
echo "[!] Missing module: $src" >&2
exit 1
fi
# Disallow standalone scripts: modules must not have a shebang
if head -n 1 "$src" | grep -q '^#!'; then
echo "[!] Module must NOT include a shebang: $src" >&2
exit 1
fi
{
echo
echo "# ---- BEGIN ${mod} ----"
cat "$src"
echo
echo "# ---- END ${mod} ----"
echo
} >>"$TMP_FILE"
done
# Ensure final newline
printf '\n' >>"$TMP_FILE"
# Install bundle atomically
chmod 700 "$TMP_FILE" 2>/dev/null || true
mv -f -- "$TMP_FILE" "$OUT_FILE"
chmod 700 "$OUT_FILE" 2>/dev/null || true
echo "[ok] Wrote: $OUT_FILE"