Files
fruix/tests/system/run-phase14-native-development-split.sh

143 lines
5.3 KiB
Bash
Executable File

#!/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" <<EOF
workdir=$workdir
store_dir=$store_dir
bootloader_store=$bootloader_store
headers_store=$headers_store
native_system_packages=$native_system_packages
native_development_packages=$native_development_packages
runtime_vs_development_split=ok
EOF
if [ -n "$metadata_target" ]; then
mkdir -p "$(dirname "$metadata_target")"
cp "$metadata_file" "$metadata_target"
fi
printf 'PASS phase14-native-development-split\n'
printf 'Work directory: %s\n' "$workdir"
printf 'Metadata file: %s\n' "$metadata_file"
if [ -n "$metadata_target" ]; then
printf 'Copied metadata to: %s\n' "$metadata_target"
fi
printf '%s\n' '--- metadata ---'
cat "$metadata_file"