| #!/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 |