Files
bd2/bd2w
T

44 lines
1.5 KiB
Bash
Executable File

#!/bin/sh
set -eu
root=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)
case "$(uname -s)" in MINGW*|MSYS*|CYGWIN*) suffix=.exe ;; *) suffix= ;; esac
tool_dir="$root/.build/tools"
tool="$tool_dir/bd2w$suffix"
# Bootstrap only when the cached executable is absent. Build/run live in Go.
if [ ! -f "$tool" ]; then
mkdir -p "$tool_dir"
lock="$tool_dir/.bootstrap.lock"
attempts=0
while [ ! -f "$tool" ]; do
if mkdir "$lock" 2>/dev/null; then
temporary="$tool_dir/.bd2w-$$$suffix"
trap 'rm -f "$temporary"; rmdir "$lock" 2>/dev/null || true' 0
trap 'exit 130' INT TERM
if [ ! -f "$tool" ]; then
printf 'bd2w: compiling the build tool for first use...\n'
(
cd "$root/go"
GOCACHE="$root/go/.cache/go-build"
GOOS=$(go env GOHOSTOS)
GOARCH=$(go env GOHOSTARCH)
CGO_ENABLED=0
export GOCACHE GOOS GOARCH CGO_ENABLED
go build -buildvcs=false -trimpath -o "$temporary" ./build
)
mv "$temporary" "$tool"
fi
rmdir "$lock"
trap - 0 INT TERM
break
fi
attempts=$((attempts + 1))
if [ "$attempts" -ge 120 ]; then
printf 'bd2w: bootstrap lock still held at %s; check the first launcher.\n' "$lock" >&2
exit 1
fi
sleep 1
done
fi
exec "$tool" "$@"