#!/bin/sh set -eu cc_bin=${CC_BIN:-cc} source_file=${SOURCE_FILE:-tests/system/freebsd-syscall-mapping.c} if ! command -v "$cc_bin" >/dev/null 2>&1; then echo "C compiler not found: $cc_bin" >&2 exit 1 fi if [ ! -f "$source_file" ]; then echo "Source file not found: $source_file" >&2 exit 1 fi cleanup=0 if [ -n "${WORKDIR:-}" ]; then workdir=$WORKDIR mkdir -p "$workdir" else workdir=$(mktemp -d /tmp/fruix-freebsd-syscall-mapping.XXXXXX) cleanup=1 fi if [ "${KEEP_WORKDIR:-0}" -eq 1 ]; then cleanup=0 fi cleanup_workdir() { if [ "$cleanup" -eq 1 ]; then rm -rf "$workdir" fi } trap cleanup_workdir EXIT INT TERM binary=$workdir/freebsd-syscall-mapping compile_log=$workdir/compile.log regular_out=$workdir/regular.out regular_err=$workdir/regular.err root_out=$workdir/root.out root_err=$workdir/root.err metadata_file=$workdir/freebsd-syscall-mapping-metadata.txt printf 'Working directory: %s\n' "$workdir" printf 'Compiler: %s\n' "$cc_bin" "$cc_bin" -Wall -Wextra -std=c11 -I/usr/local/include "$source_file" -o "$binary" >"$compile_log" 2>&1 set +e "$binary" >"$regular_out" 2>"$regular_err" regular_rc=$? set -e if [ "$regular_rc" -ne 0 ]; then echo "regular syscall mapping checks failed" >&2 cat "$regular_out" >&2 || true cat "$regular_err" >&2 || true exit 1 fi set +e sudo "$binary" --root-tests >"$root_out" 2>"$root_err" root_rc=$? set -e if [ "$root_rc" -ne 0 ]; then echo "root syscall mapping checks failed" >&2 cat "$root_out" >&2 || true cat "$root_err" >&2 || true exit 1 fi cat >"$metadata_file" <