Files
bd2/bd2w
T

84 lines
2.6 KiB
Bash
Executable File

#!/bin/sh
set -eu
root=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)
if [ "${1-}" = check-csharp ]; then
shift
(
cd "$root"
if [ "$#" -eq 0 ]; then
set -- GameSdk GameNames LocalIdentity LoginUI CashShop CaptureEnvironment
fi
for project do
case "$project" in
GameSdk|GameNames|LocalIdentity|LoginUI|CashShop|CaptureEnvironment) ;;
*) printf 'bd2w: unknown C# project: %s\n' "$project" >&2; exit 1 ;;
esac
done
Configuration=Release
export Configuration
failed=0
for project do
printf 'Checking %s\n' "$project"
project_file="$root/plugins/$project/$project.csproj"
if ! dotnet build "$project_file" -c Release -t:Rebuild --nologo -warnaserror; then
failed=1
continue
fi
if ! dotnet format style "$project_file" --verify-no-changes --severity info --no-restore; then
failed=1
fi
done
exit "$failed"
)
exit $?
fi
tool_dir="$root/.build/tools"
tool="$tool_dir/bd2w"
tool_is_current() {
[ -f "$tool" ] || return 1
newer_sources=$(find "$root/go/build" "$root/go/go.mod" "$root/go/go.sum" -type f -newer "$tool" -print) || {
printf 'bd2w: cannot check build tool source timestamps.\n' >&2
exit 1
}
[ -z "$newer_sources" ]
}
if ! tool_is_current; then
mkdir -p "$tool_dir"
lock="$tool_dir/.bootstrap.lock"
attempts=0
while ! tool_is_current; do
if mkdir "$lock" 2>/dev/null; then
temporary="$tool_dir/.bd2w-$$"
trap 'rm -f "$temporary"; rmdir "$lock" 2>/dev/null || true' 0
trap 'exit 130' INT TERM
if ! tool_is_current; then
printf 'bd2w: compiling the build tool...\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" "$@"