143 lines
5.3 KiB
Bash
Executable File
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"
|