#!/usr/bin/env bash set -Eeuo pipefail source /opt/rust-package-builder/scripts/lib.sh SOURCE_DIR=${1:?usage: apply-freebsd-patches.sh /path/to/source} PATCH_ROOT=/opt/rust-package-builder/opnsense/patches [[ -f "$SOURCE_DIR/Cargo.toml" ]] || fatal "missing Cargo.toml in FreeBSD build source: $SOURCE_DIR" VERSION=$(python3 - "$SOURCE_DIR/Cargo.toml" <<'PY' import sys, tomllib from pathlib import Path with Path(sys.argv[1]).open('rb') as f: print(tomllib.load(f)['package']['version']) PY ) PATCH_DIR="$PATCH_ROOT/$VERSION" if [[ ! -d "$PATCH_DIR" ]]; then log "no FreeBSD/OPNsense patch set for RustProxy $VERSION; using upstream source" exit 0 fi shopt -s nullglob patches=("$PATCH_DIR"/*.patch) (( ${#patches[@]} > 0 )) || fatal "FreeBSD patch directory is empty: $PATCH_DIR" log "applying FreeBSD/OPNsense patches for RustProxy $VERSION" for patch_file in "${patches[@]}"; do patch_name=$(basename "$patch_file") if git -C "$SOURCE_DIR" apply --check "$patch_file" 2>/dev/null; then git -C "$SOURCE_DIR" apply "$patch_file" log "applied patch: $patch_name" elif git -C "$SOURCE_DIR" apply --reverse --check "$patch_file" 2>/dev/null; then log "patch already present: $patch_name" else fatal "patch does not apply cleanly: $patch_name (RustProxy $VERSION)" fi done