228 lines
8.0 KiB
Bash
Executable File
228 lines
8.0 KiB
Bash
Executable File
#!/bin/sh
|
|
set -eu
|
|
|
|
bytestructures_repo=${GUILE_BYTESTRUCTURES_REPO:-"https://github.com/TaylanUB/scheme-bytestructures"}
|
|
bytestructures_version=${GUILE_BYTESTRUCTURES_VERSION:-1.0.10}
|
|
guile_git_repo=${GUILE_GIT_REPO:-"https://gitlab.com/guile-git/guile-git.git"}
|
|
guile_git_version=${GUILE_GIT_VERSION:-0.10.0}
|
|
install_prefix=${INSTALL_PREFIX:-/tmp/guile-gnutls-freebsd-validate-install}
|
|
guile_bin=${GUILE_BIN:-/tmp/guile-freebsd-validate-install/bin/guile}
|
|
make_bin=${MAKE_BIN:-gmake}
|
|
|
|
if [ ! -x "$guile_bin" ]; then
|
|
echo "Guile binary is not executable: $guile_bin" >&2
|
|
exit 1
|
|
fi
|
|
for tool in git autoreconf pkg-config "$make_bin"; do
|
|
if ! command -v "$tool" >/dev/null 2>&1; then
|
|
echo "Required tool not found: $tool" >&2
|
|
exit 1
|
|
fi
|
|
done
|
|
|
|
cleanup=0
|
|
if [ -n "${WORKDIR:-}" ]; then
|
|
workdir=$WORKDIR
|
|
mkdir -p "$workdir"
|
|
else
|
|
workdir=$(mktemp -d /tmp/fruix-guile-git.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
|
|
|
|
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))')
|
|
site_dir=$install_prefix/share/guile/site/$guile_version
|
|
site_ccache_dir=$install_prefix/lib/guile/$guile_version/site-ccache
|
|
extensions_dir=$install_prefix/lib/guile/$guile_version/extensions
|
|
|
|
tool_bindir=$workdir/guile-tools-bin
|
|
mkdir -p "$tool_bindir"
|
|
ln -sf "$guile_bin" "$tool_bindir/guile-3.0"
|
|
ln -sf "$guile_bin" "$tool_bindir/guile"
|
|
ln -sf "$guile_bindir/guild" "$tool_bindir/guild-3.0"
|
|
ln -sf "$guile_bindir/guild" "$tool_bindir/guild"
|
|
ln -sf "$guile_bindir/guile-config" "$tool_bindir/guile-config-3.0"
|
|
ln -sf "$guile_bindir/guile-config" "$tool_bindir/guile-config"
|
|
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=/usr/local/libdata/pkgconfig:/usr/local/lib/pkgconfig${PKG_CONFIG_PATH:+:$PKG_CONFIG_PATH}
|
|
export CPPFLAGS='-I/usr/local/include'
|
|
export LDFLAGS="-L/usr/local/lib -Wl,-rpath,/usr/local/lib -Wl,-rpath,$guile_lib_dir -Wl,-rpath,$install_prefix/lib"
|
|
if [ -n "${LD_LIBRARY_PATH:-}" ]; then
|
|
export LD_LIBRARY_PATH="$install_prefix/lib:$guile_lib_dir:/usr/local/lib:$LD_LIBRARY_PATH"
|
|
else
|
|
export LD_LIBRARY_PATH="$install_prefix/lib:$guile_lib_dir:/usr/local/lib"
|
|
fi
|
|
if [ -d "$site_dir" ]; then
|
|
export GUILE_LOAD_PATH="$site_dir${GUILE_LOAD_PATH:+:$GUILE_LOAD_PATH}"
|
|
fi
|
|
if [ -d "$site_ccache_dir" ]; then
|
|
export GUILE_LOAD_COMPILED_PATH="$site_ccache_dir${GUILE_LOAD_COMPILED_PATH:+:$GUILE_LOAD_COMPILED_PATH}"
|
|
fi
|
|
if [ -d "$extensions_dir" ]; then
|
|
export GUILE_EXTENSIONS_PATH="$extensions_dir${GUILE_EXTENSIONS_PATH:+:$GUILE_EXTENSIONS_PATH}"
|
|
fi
|
|
|
|
bytes_src_dir=$workdir/bytestructures
|
|
git_src_dir=$workdir/guile-git
|
|
bytes_build_dir=$workdir/build-bytestructures
|
|
git_build_dir=$workdir/build-guile-git
|
|
metadata_file=$workdir/guile-git-build-metadata.txt
|
|
env_file=$workdir/guile-git-env.sh
|
|
bytes_autoreconf_log=$workdir/bytestructures-autoreconf.log
|
|
bytes_configure_log=$workdir/bytestructures-configure.log
|
|
bytes_build_log=$workdir/bytestructures-build.log
|
|
bytes_install_log=$workdir/bytestructures-install.log
|
|
git_bootstrap_log=$workdir/guile-git-bootstrap.log
|
|
git_configure_log=$workdir/guile-git-configure.log
|
|
git_build_log=$workdir/guile-git-build.log
|
|
git_install_log=$workdir/guile-git-install.log
|
|
|
|
printf 'Using Guile: %s\n' "$guile_bin"
|
|
printf 'Installing into existing prefix: %s\n' "$install_prefix"
|
|
printf 'Working directory: %s\n' "$workdir"
|
|
|
|
rm -rf \
|
|
"$site_dir/bytestructures" \
|
|
"$site_dir/git" \
|
|
"$site_dir/git.scm" \
|
|
"$site_ccache_dir/bytestructures" \
|
|
"$site_ccache_dir/git" \
|
|
"$site_ccache_dir/git.go"
|
|
mkdir -p "$install_prefix"
|
|
|
|
git clone --depth 1 --branch "$bytestructures_version" "$bytestructures_repo" "$bytes_src_dir" >"$workdir/bytestructures-clone.log" 2>&1
|
|
bytestructures_commit=$(git -C "$bytes_src_dir" rev-parse HEAD)
|
|
(
|
|
cd "$bytes_src_dir"
|
|
autoreconf -vfi
|
|
) >"$bytes_autoreconf_log" 2>&1
|
|
mkdir -p "$bytes_build_dir"
|
|
(
|
|
cd "$bytes_build_dir"
|
|
"$bytes_src_dir/configure" --prefix="$install_prefix"
|
|
) >"$bytes_configure_log" 2>&1
|
|
(
|
|
cd "$bytes_build_dir"
|
|
"$make_bin" GUILE_AUTO_COMPILE=0 -j"${JOBS:-$(sysctl -n hw.ncpu 2>/dev/null || echo 1)}"
|
|
) >"$bytes_build_log" 2>&1
|
|
(
|
|
cd "$bytes_build_dir"
|
|
"$make_bin" GUILE_AUTO_COMPILE=0 install
|
|
) >"$bytes_install_log" 2>&1
|
|
|
|
export GUILE_LOAD_PATH="$site_dir${GUILE_LOAD_PATH:+:$GUILE_LOAD_PATH}"
|
|
export GUILE_LOAD_COMPILED_PATH="$site_ccache_dir${GUILE_LOAD_COMPILED_PATH:+:$GUILE_LOAD_COMPILED_PATH}"
|
|
bytestructures_check=$("$guile_bin" -c '(use-modules (bytestructures guile)) (display "ok") (newline)')
|
|
if [ "$bytestructures_check" != "ok" ]; then
|
|
echo "(bytestructures guile) module validation failed" >&2
|
|
exit 1
|
|
fi
|
|
|
|
git clone --depth 1 --branch "v$guile_git_version" "$guile_git_repo" "$git_src_dir" >"$workdir/guile-git-clone.log" 2>&1
|
|
guile_git_commit=$(git -C "$git_src_dir" rev-parse HEAD)
|
|
(
|
|
cd "$git_src_dir"
|
|
if [ -x ./autogen.sh ]; then
|
|
./autogen.sh
|
|
else
|
|
autoreconf -vfi
|
|
fi
|
|
) >"$git_bootstrap_log" 2>&1
|
|
mkdir -p "$git_build_dir"
|
|
(
|
|
cd "$git_build_dir"
|
|
"$git_src_dir/configure" --prefix="$install_prefix"
|
|
) >"$git_configure_log" 2>&1
|
|
(
|
|
cd "$git_build_dir"
|
|
"$make_bin" GUILE_AUTO_COMPILE=0 -j"${JOBS:-$(sysctl -n hw.ncpu 2>/dev/null || echo 1)}"
|
|
) >"$git_build_log" 2>&1
|
|
(
|
|
cd "$git_build_dir"
|
|
"$make_bin" GUILE_AUTO_COMPILE=0 install
|
|
) >"$git_install_log" 2>&1
|
|
|
|
guile_git_check=$("$guile_bin" -c '(use-modules (git)) (display (if (procedure? graph-descendant?) "ok" "missing-export")) (newline)')
|
|
if [ "$guile_git_check" != "ok" ]; then
|
|
echo "(git) module validation failed" >&2
|
|
exit 1
|
|
fi
|
|
|
|
gnutls_check=$("$guile_bin" -c '(catch #t (lambda () (use-modules (gnutls)) (display "present") (newline)) (lambda _ (display "missing") (newline)))')
|
|
libgit2_version=$(pkg-config --modversion libgit2)
|
|
|
|
cat >"$env_file" <<EOF
|
|
export GUILE_EXTRA_PREFIX='$install_prefix'
|
|
export GUILE_LOAD_PATH='$site_dir'
|
|
export GUILE_LOAD_COMPILED_PATH='$site_ccache_dir'
|
|
export GUILE_EXTENSIONS_PATH='$extensions_dir'
|
|
export LD_LIBRARY_PATH='$install_prefix/lib:$guile_lib_dir:/usr/local/lib'
|
|
EOF
|
|
|
|
cat >"$metadata_file" <<EOF
|
|
bytestructures_repo=$bytestructures_repo
|
|
bytestructures_version=$bytestructures_version
|
|
bytestructures_commit=$bytestructures_commit
|
|
guile_git_repo=$guile_git_repo
|
|
guile_git_version=$guile_git_version
|
|
guile_git_commit=$guile_git_commit
|
|
guile_bin=$guile_bin
|
|
guile_version=$guile_version
|
|
install_prefix=$install_prefix
|
|
site_dir=$site_dir
|
|
site_ccache_dir=$site_ccache_dir
|
|
extensions_dir=$extensions_dir
|
|
libgit2_version=$libgit2_version
|
|
bytestructures_autoreconf_log=$bytes_autoreconf_log
|
|
bytestructures_configure_log=$bytes_configure_log
|
|
bytestructures_build_log=$bytes_build_log
|
|
bytestructures_install_log=$bytes_install_log
|
|
guile_git_bootstrap_log=$git_bootstrap_log
|
|
guile_git_configure_log=$git_configure_log
|
|
guile_git_build_log=$git_build_log
|
|
guile_git_install_log=$git_install_log
|
|
bytestructures_module_check=$bytestructures_check
|
|
guile_git_module_check=$guile_git_check
|
|
gnutls_module_already_present=$gnutls_check
|
|
env_file=$env_file
|
|
EOF
|
|
|
|
if [ -n "${METADATA_OUT:-}" ]; then
|
|
mkdir -p "$(dirname "$METADATA_OUT")"
|
|
cp "$metadata_file" "$METADATA_OUT"
|
|
fi
|
|
if [ -n "${ENV_OUT:-}" ]; then
|
|
mkdir -p "$(dirname "$ENV_OUT")"
|
|
cp "$env_file" "$ENV_OUT"
|
|
fi
|
|
|
|
printf 'PASS local-guile-git-build\n'
|
|
printf 'bytestructures module check: %s\n' "$bytestructures_check"
|
|
printf 'guile-git module check: %s\n' "$guile_git_check"
|
|
printf 'Existing (gnutls) module in prefix: %s\n' "$gnutls_check"
|
|
printf 'Environment file: %s\n' "$env_file"
|
|
printf 'Metadata file: %s\n' "$metadata_file"
|
|
if [ -n "${ENV_OUT:-}" ]; then
|
|
printf 'Copied environment file to: %s\n' "$ENV_OUT"
|
|
fi
|
|
if [ -n "${METADATA_OUT:-}" ]; then
|
|
printf 'Copied metadata file to: %s\n' "$METADATA_OUT"
|
|
fi
|
|
printf '%s\n' '--- metadata ---'
|
|
cat "$metadata_file"
|