87 lines
2.2 KiB
Bash
87 lines
2.2 KiB
Bash
#!/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"
|