#!/bin/sh set -eu repo_root=$(CDPATH= cd -- "$(dirname "$0")/../.." && pwd) source_repo=${GUIX_SOURCE_REPO:-"$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} store_dir=${STORE_DIR:-/frx/store} localstatedir=${LOCALSTATEDIR:-/frx/var} sysconfdir=${SYSCONFDIR:-/frx/etc} make_bin=${MAKE_BIN:-gmake} gsed_bin=${GSED_BIN:-/usr/local/bin/gsed} metadata_target=${METADATA_OUT:-} env_target=${ENV_OUT:-} if [ ! -x "$guile_bin" ]; then echo "Guile binary is not executable: $guile_bin" >&2 exit 1 fi if [ ! -d "$source_repo/guix" ]; then echo "Guix source tree not found at $source_repo" >&2 exit 1 fi for tool in git patch "$make_bin" gm4 "$gsed_bin"; do if ! command -v "$tool" >/dev/null 2>&1; then echo "Required tool not found: $tool" >&2 exit 1 fi done if [ ! -f /usr/local/include/argp.h ]; then echo "argp-standalone headers not found at /usr/local/include/argp.h" >&2 exit 1 fi cleanup=0 if [ -n "${WORKDIR:-}" ]; then workdir=$WORKDIR mkdir -p "$workdir" else workdir=$(mktemp -d /tmp/fruix-phase5-checkout.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 srcclone=$workdir/guix-src builddir=$workdir/build metadata_file=$workdir/phase5-checkout-setup-metadata.txt env_file=$workdir/phase5-checkout-env.sh bootstrap_log=$workdir/bootstrap.log configure_log=$workdir/configure.log make_scripts_log=$workdir/make-scripts.log daemon_build_log=$workdir/make-guix-daemon.log runtime_patch=$repo_root/tests/guix/patches/phase5-checkout-runtime.patch daemon_patch=$repo_root/tests/guix/patches/phase5-guix-daemon-freebsd.patch guile_bindir=$(CDPATH= cd -- "$(dirname "$guile_bin")" && pwd) guile_prefix=$(CDPATH= cd -- "$guile_bindir/.." && pwd) guile_lib_dir=$guile_prefix/lib guile_version=$(LD_LIBRARY_PATH="$guile_lib_dir${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}" "$guile_bin" -c '(display (effective-version))') extra_site_dir=$guile_extra_prefix/share/guile/site/$guile_version extra_site_ccache_dir=$guile_extra_prefix/lib/guile/$guile_version/site-ccache extra_extensions_dir=$guile_extra_prefix/lib/guile/$guile_version/extensions tool_bindir=$workdir/guile-tools-bin mkdir -p "$tool_bindir" ln -sf "$guile_bin" "$tool_bindir/guile" ln -sf "$guile_bin" "$tool_bindir/guile-3.0" ln -sf "$guile_bindir/guild" "$tool_bindir/guild" ln -sf "$guile_bindir/guild" "$tool_bindir/guild-3.0" ln -sf "$guile_bindir/guile-config" "$tool_bindir/guile-config" ln -sf "$guile_bindir/guile-config" "$tool_bindir/guile-config-3.0" ln -sf "$guile_bindir/guile-snarf" "$tool_bindir/guile-snarf" export PATH="$tool_bindir:$guile_bindir:/usr/local/bin:$PATH" export ACLOCAL_PATH=/usr/local/share/aclocal${ACLOCAL_PATH:+:$ACLOCAL_PATH} export PKG_CONFIG_PATH=$guile_extra_prefix/lib/pkgconfig:$guile_extra_prefix/libdata/pkgconfig:$guile_prefix/lib/pkgconfig:/usr/local/libdata/pkgconfig:/usr/local/lib/pkgconfig${PKG_CONFIG_PATH:+:$PKG_CONFIG_PATH} export CPPFLAGS="-I$guile_prefix/include -I$guile_extra_prefix/include -I/usr/local/include" export LDFLAGS="-L$guile_lib_dir -L$guile_extra_prefix/lib -L/usr/local/lib -Wl,-rpath,$guile_lib_dir -Wl,-rpath,$guile_extra_prefix/lib -Wl,-rpath,/usr/local/lib" export LD_LIBRARY_PATH="$guile_extra_prefix/lib:$guile_lib_dir:/usr/local/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}" if [ -d "$extra_site_dir" ]; then export GUILE_LOAD_PATH="$extra_site_dir${GUILE_LOAD_PATH:+:$GUILE_LOAD_PATH}" fi if [ -d "$extra_site_ccache_dir" ]; then export GUILE_LOAD_COMPILED_PATH="$extra_site_ccache_dir${GUILE_LOAD_COMPILED_PATH:+:$GUILE_LOAD_COMPILED_PATH}" fi if [ -d "$extra_extensions_dir" ]; then export GUILE_EXTENSIONS_PATH="$extra_extensions_dir${GUILE_EXTENSIONS_PATH:+:$GUILE_EXTENSIONS_PATH}" fi printf 'Working directory: %s\n' "$workdir" printf 'Cloning source from: %s\n' "$source_repo" rm -rf "$srcclone" "$builddir" git clone --shared "$source_repo" "$srcclone" >/dev/null 2>&1 ( cd "$srcclone" M4=gm4 ./bootstrap ) >"$bootstrap_log" 2>&1 ( cd "$srcclone" patch -p1 < "$runtime_patch" patch -p1 < "$daemon_patch" ) >/dev/null mkdir -p "$builddir" ( cd "$builddir" MAKE="$make_bin" \ GUILE="$guile_bin" \ GUILE_EFFECTIVE_VERSION=3.0 \ SED="$gsed_bin" \ "$srcclone/configure" \ --with-courage \ --with-store-dir="$store_dir" \ --localstatedir="$localstatedir" \ --sysconfdir="$sysconfdir" ) >"$configure_log" 2>&1 ( cd "$builddir" "$make_bin" -j1 scripts/guix ) >"$make_scripts_log" 2>&1 ( cd "$builddir" "$make_bin" -j1 LIBS='-L/usr/local/lib -largp -lintl' nix/libstore/schema.sql.hh guix-daemon ) >"$daemon_build_log" 2>&1 ln -sf guix "$builddir/scripts/fruix" cat >"$env_file" <"$metadata_file" <