Files
shorebird-workspace/scripts/sync_flutter_prebuilt_dart_sdk.sh
T
2026-06-26 02:50:49 +08:00

68 lines
1.7 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
HOST_CONFIG="${1:-linux-x64}"
DART_SDK_SOURCE="${DART_SDK_SOURCE:-$ROOT/dart-sdk/tools/sdks/dart-sdk}"
TARGET="$ROOT/flutter/engine/src/flutter/prebuilts/$HOST_CONFIG/dart-sdk"
relative_path() {
python3 - "$1" "$2" <<'PY'
import os
import sys
print(os.path.relpath(sys.argv[2], os.path.dirname(sys.argv[1])))
PY
}
real_path() {
python3 - "$1" <<'PY'
import os
import sys
print(os.path.realpath(sys.argv[1]))
PY
}
case "$HOST_CONFIG" in
linux-x64|macos-x64|macos-arm64)
;;
*)
echo "unsupported Flutter prebuilt Dart SDK host config: $HOST_CONFIG" >&2
exit 64
;;
esac
if [[ ! -d "$DART_SDK_SOURCE" ]]; then
echo "missing Dart tool SDK source: $DART_SDK_SOURCE" >&2
exit 66
fi
for required in \
bin/dart \
bin/dartaotruntime \
bin/snapshots/dartdevc_aot.dart.snapshot \
bin/snapshots/kernel_worker_aot.dart.snapshot
do
if [[ ! -e "$DART_SDK_SOURCE/$required" ]]; then
echo "Dart tool SDK is missing $required: $DART_SDK_SOURCE" >&2
exit 66
fi
done
mkdir -p "$(dirname "$TARGET")"
if [[ -L "$TARGET" ]]; then
source_real="$(real_path "$DART_SDK_SOURCE")"
target_real="$(real_path "$TARGET")"
if [[ "$source_real" != "$target_real" ]]; then
echo "Flutter prebuilt Dart SDK link points at $target_real, expected $source_real" >&2
exit 70
fi
elif [[ -e "$TARGET" ]]; then
echo "Flutter prebuilt Dart SDK target exists but is not the workspace Dart tool SDK symlink: $TARGET" >&2
exit 70
else
ln -s "$(relative_path "$TARGET" "$DART_SDK_SOURCE")" "$TARGET"
fi
echo "[open-source-sync] Flutter $HOST_CONFIG prebuilt Dart SDK uses $DART_SDK_SOURCE"