40 lines
1.3 KiB
Bash
Executable File
40 lines
1.3 KiB
Bash
Executable File
#!/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
|