#!/bin/sh set -eu repo_root=${PROJECT_ROOT:-$(pwd)} store_dir=${STORE_DIR:-/frx/store} metadata_target=${METADATA_OUT:-} cleanup=0 if [ -n "${WORKDIR:-}" ]; then workdir=$WORKDIR mkdir -p "$workdir" else workdir=$(mktemp -d /tmp/fruix-phase14-native-development.XXXXXX) cleanup=1 fi if [ "${KEEP_WORKDIR:-0}" -eq 1 ]; then cleanup=0 fi metadata_file=$workdir/phase14-native-development-split-metadata.txt cleanup_workdir() { if [ "$cleanup" -eq 1 ]; then rm -rf "$workdir" 2>/dev/null || sudo rm -rf "$workdir" fi } trap cleanup_workdir EXIT INT TERM action_env() { sudo env \ HOME="$HOME" \ GUILE_AUTO_COMPILE=0 \ FRUIX_FREEBSD_BUILD_JOBS="${FRUIX_FREEBSD_BUILD_JOBS:-8}" \ GUIX_SOURCE_DIR="${GUIX_SOURCE_DIR:-$HOME/repos/guix}" \ GUILE_BIN="${GUILE_BIN:-/tmp/guile-freebsd-validate-install/bin/guile}" \ GUILE_EXTRA_PREFIX="${GUILE_EXTRA_PREFIX:-/tmp/guile-gnutls-freebsd-validate-install}" \ SHEPHERD_PREFIX="${SHEPHERD_PREFIX:-/tmp/shepherd-freebsd-validate-install}" \ "$@" } native_system_packages=$(GUILE_AUTO_COMPILE=0 /tmp/guile-freebsd-validate-install/bin/guile -L modules -L "$HOME/repos/guix" -c ' (use-modules (fruix packages freebsd) (srfi srfi-13)) (display (string-join (map freebsd-package-name %freebsd-native-system-packages) ",")) (newline)') native_development_packages=$(GUILE_AUTO_COMPILE=0 /tmp/guile-freebsd-validate-install/bin/guile -L modules -L "$HOME/repos/guix" -c ' (use-modules (fruix packages freebsd) (srfi srfi-13)) (display (string-join (map freebsd-package-name %freebsd-native-development-profile-packages) ",")) (newline)') materialize_native_package() { package_name=$1 action_env env LD_LIBRARY_PATH="/tmp/guile-freebsd-validate-install/lib:/usr/local/lib" /tmp/guile-freebsd-validate-install/bin/guile -L modules -L "$HOME/repos/guix" -c ' (use-modules (fruix packages freebsd) (ice-9 hash-table)) (let* ((args (command-line)) (store-dir (list-ref args (- (length args) 2))) (package-name (list-ref args (- (length args) 1))) (pkg (case (string->symbol package-name) ((freebsd-native-bootloader) freebsd-native-bootloader) ((freebsd-native-headers) freebsd-native-headers) (else (error "unsupported package" package-name)))) (system-module (resolve-module (quote (fruix system freebsd)))) (materialize (module-ref system-module (quote materialize-freebsd-package))) (cache (make-hash-table)) (path (materialize pkg store-dir cache))) (display "STORE_PATH=") (display path) (newline))' dummy "$store_dir" "$package_name" } bootloader_store=$(materialize_native_package freebsd-native-bootloader | sed -n 's/^STORE_PATH=//p' | tail -n 1) headers_store=$(materialize_native_package freebsd-native-headers | sed -n 's/^STORE_PATH=//p' | tail -n 1) case "$bootloader_store" in /frx/store/*-freebsd-native-bootloader-15.0-STABLE) : ;; *) echo "unexpected native bootloader store path: $bootloader_store" >&2; exit 1 ;; esac case "$headers_store" in /frx/store/*-freebsd-native-headers-15.0-STABLE) : ;; *) echo "unexpected native headers store path: $headers_store" >&2; exit 1 ;; esac for path in \ "$bootloader_store/boot/loader" \ "$bootloader_store/boot/loader.efi" \ "$bootloader_store/boot/device.hints" \ "$bootloader_store/boot/defaults/loader.conf" \ "$bootloader_store/boot/lua/loader.lua" \ "$headers_store/usr/include/stdio.h" \ "$headers_store/usr/include/sys/param.h" \ "$headers_store/usr/share/mk/bsd.prog.mk" do [ -e "$path" ] || { echo "expected native split artifact path missing: $path" >&2 exit 1 } done [ ! -e "$bootloader_store/usr/include" ] || { echo "native bootloader slice unexpectedly contains headers" >&2; exit 1; } [ ! -e "$headers_store/boot" ] || { echo "native headers slice unexpectedly contains /boot" >&2; exit 1; } [ ! -e "$headers_store/bin/sh" ] || { echo "native headers slice unexpectedly contains runtime binaries" >&2; exit 1; } case ",$native_system_packages," in *,freebsd-native-runtime,*) : ;; *) echo "native system package set does not include freebsd-native-runtime" >&2; exit 1 ;; esac case ",$native_development_packages," in *,freebsd-native-runtime,*) : ;; *) echo "native development package set does not include freebsd-native-runtime" >&2; exit 1 ;; esac case ",$native_development_packages," in *,freebsd-native-headers,*) : ;; *) echo "native development package set does not include freebsd-native-headers" >&2; exit 1 ;; esac case ",$native_development_packages," in *,freebsd-clang-toolchain,*) : ;; *) echo "native development package set does not retain the explicit toolchain artifact" >&2; exit 1 ;; esac cat >"$metadata_file" <