Also add script to remove the Bazel output base. This will assist with supporting movable checkouts alongside mixed builds. Bug: 259191764 Test: m && (move topic and prepare_moved_top.sh) && m Test: m && prepare_moved_top.sh && m Test: build/soong/tests/relative_symlinks_test.sh Change-Id: I0f53da8d99f752fad496cf3ac61b01f001b7296d
91 lines
2.3 KiB
Bash
Executable File
91 lines
2.3 KiB
Bash
Executable File
#!/bin/bash -eu
|
|
|
|
set -o pipefail
|
|
|
|
# Test that relative symlinks work by recreating the bug in b/259191764
|
|
# In some cases, developers prefer to move their checkouts. This causes
|
|
# issues in that symlinked files (namely, the bazel wrapper script)
|
|
# cannot be found. As such, we implemented relative symlinks so that a
|
|
# moved checkout doesn't need a full clean before rebuilding.
|
|
# The bazel output base will still need to be removed, as Starlark
|
|
# doesn't seem to support relative symlinks yet.
|
|
|
|
source "$(dirname "$0")/lib.sh"
|
|
|
|
function test_movable_top_bazel_build {
|
|
setup
|
|
|
|
mkdir -p a
|
|
touch a/g.txt
|
|
cat > a/Android.bp <<'EOF'
|
|
filegroup {
|
|
name: "g",
|
|
srcs: ["g.txt"],
|
|
bazel_module: {bp2build_available: true},
|
|
}
|
|
EOF
|
|
# A directory under $MOCK_TOP
|
|
outdir=out2
|
|
|
|
# Modify OUT_DIR in a subshell so it doesn't affect the top level one.
|
|
(export OUT_DIR=$MOCK_TOP/$outdir; run_soong bp2build && run_bazel build --config=bp2build --config=ci //a:g)
|
|
|
|
move_mock_top
|
|
|
|
# remove the bazel output base
|
|
rm -rf $outdir/bazel/output_user_root
|
|
(export OUT_DIR=$MOCK_TOP/$outdir; run_soong bp2build && run_bazel build --config=bp2build --config=ci //a:g)
|
|
}
|
|
|
|
function test_movable_top_soong_build {
|
|
setup
|
|
|
|
mkdir -p a
|
|
touch a/g.txt
|
|
cat > a/Android.bp <<'EOF'
|
|
filegroup {
|
|
name: "g",
|
|
srcs: ["g.txt"],
|
|
}
|
|
EOF
|
|
|
|
# A directory under $MOCK_TOP
|
|
outdir=out2
|
|
|
|
# Modify OUT_DIR in a subshell so it doesn't affect the top level one.
|
|
(export OUT_DIR=$MOCK_TOP/$outdir; run_soong g)
|
|
|
|
move_mock_top
|
|
|
|
# remove the bazel output base
|
|
rm -rf $outdir/bazel/output
|
|
(export OUT_DIR=$MOCK_TOP/$outdir; run_soong g)
|
|
}
|
|
|
|
function test_remove_output_base_and_ninja_file {
|
|
# If the bazel output base is removed without the ninja file, the build will fail
|
|
# This tests that removing both the bazel output base and ninja file will succeed
|
|
# without a clean
|
|
setup
|
|
|
|
mkdir -p a
|
|
touch a/g.txt
|
|
cat > a/Android.bp <<'EOF'
|
|
filegroup {
|
|
name: "g",
|
|
srcs: ["g.txt"],
|
|
}
|
|
EOF
|
|
outdir=out2
|
|
|
|
# Modify OUT_DIR in a subshell so it doesn't affect the top level one.
|
|
(export OUT_DIR=$MOCK_TOP/$outdir; run_soong g)
|
|
# remove the bazel output base
|
|
rm -rf $outdir/bazel/output
|
|
rm $outdir/soong/build*ninja
|
|
|
|
(export OUT_DIR=$MOCK_TOP/$outdir; run_soong g)
|
|
}
|
|
|
|
scan_and_run_tests
|