200 lines
6.5 KiB
Bash
Executable File
200 lines
6.5 KiB
Bash
Executable File
#!/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" <<EOF
|
|
export PHASE5_WORKDIR='$workdir'
|
|
export PHASE5_SRCCLONE='$srcclone'
|
|
export PHASE5_BUILDDIR='$builddir'
|
|
export PHASE5_PRE_INST_ENV='$builddir/pre-inst-env'
|
|
export PHASE5_GUIX_BIN='$builddir/scripts/guix'
|
|
export PHASE5_FRUIX_BIN='$builddir/scripts/fruix'
|
|
export PHASE5_GUIX_DAEMON='$builddir/guix-daemon'
|
|
export LD_LIBRARY_PATH='$guile_extra_prefix/lib:$guile_lib_dir:/usr/local/lib'
|
|
export GUILE_LOAD_PATH='$extra_site_dir'
|
|
export GUILE_LOAD_COMPILED_PATH='$extra_site_ccache_dir'
|
|
export GUILE_EXTENSIONS_PATH='$extra_extensions_dir'
|
|
EOF
|
|
|
|
cat >"$metadata_file" <<EOF
|
|
workdir=$workdir
|
|
source_repo=$source_repo
|
|
srcclone=$srcclone
|
|
builddir=$builddir
|
|
guile_bin=$guile_bin
|
|
guile_extra_prefix=$guile_extra_prefix
|
|
guile_version=$guile_version
|
|
store_dir=$store_dir
|
|
localstatedir=$localstatedir
|
|
sysconfdir=$sysconfdir
|
|
runtime_patch=$runtime_patch
|
|
daemon_patch=$daemon_patch
|
|
bootstrap_log=$bootstrap_log
|
|
configure_log=$configure_log
|
|
make_scripts_log=$make_scripts_log
|
|
daemon_build_log=$daemon_build_log
|
|
env_file=$env_file
|
|
pre_inst_env=$builddir/pre-inst-env
|
|
guix_bin=$builddir/scripts/guix
|
|
fruix_bin=$builddir/scripts/fruix
|
|
guix_daemon=$builddir/guix-daemon
|
|
EOF
|
|
|
|
if [ -n "$metadata_target" ]; then
|
|
mkdir -p "$(dirname "$metadata_target")"
|
|
cp "$metadata_file" "$metadata_target"
|
|
fi
|
|
if [ -n "$env_target" ]; then
|
|
mkdir -p "$(dirname "$env_target")"
|
|
cp "$env_file" "$env_target"
|
|
fi
|
|
|
|
printf 'PASS phase5-checkout-setup\n'
|
|
printf 'Environment file: %s\n' "$env_file"
|
|
printf 'Metadata file: %s\n' "$metadata_file"
|
|
if [ -n "$env_target" ]; then
|
|
printf 'Copied environment file to: %s\n' "$env_target"
|
|
fi
|
|
if [ -n "$metadata_target" ]; then
|
|
printf 'Copied metadata file to: %s\n' "$metadata_target"
|
|
fi
|
|
printf '%s\n' '--- metadata ---'
|
|
cat "$metadata_file"
|