#!/bin/bash -eu HARDWIRED_MOCK_TOP= # Uncomment this to be able to view the source tree after a test is run # HARDWIRED_MOCK_TOP=/tmp/td REAL_TOP="$(readlink -f "$(dirname "$0")"/../../..)" function fail { echo ERROR: $1 exit 1 } function copy_directory() { local dir="$1" local parent="$(dirname "$dir")" mkdir -p "$MOCK_TOP/$parent" cp -R "$REAL_TOP/$dir" "$MOCK_TOP/$parent" } function symlink_file() { local file="$1" mkdir -p "$MOCK_TOP/$(dirname "$file")" ln -s "$REAL_TOP/$file" "$MOCK_TOP/$file" } function symlink_directory() { local dir="$1" mkdir -p "$MOCK_TOP/$dir" # We need to symlink the contents of the directory individually instead of # using one symlink for the whole directory because finder.go doesn't follow # symlinks when looking for Android.bp files for i in $(ls "$REAL_TOP/$dir"); do local target="$MOCK_TOP/$dir/$i" local source="$REAL_TOP/$dir/$i" if [[ -e "$target" ]]; then if [[ ! -d "$source" || ! -d "$target" ]]; then fail "Trying to symlink $dir twice" fi else ln -s "$REAL_TOP/$dir/$i" "$MOCK_TOP/$dir/$i"; fi done } function setup() { if [[ ! -z "$HARDWIRED_MOCK_TOP" ]]; then MOCK_TOP="$HARDWIRED_MOCK_TOP" rm -fr "$MOCK_TOP" mkdir -p "$MOCK_TOP" else MOCK_TOP=$(mktemp -t -d st.XXXXX) trap 'cd / && rm -fr "$MOCK_TOP"' EXIT fi echo "Test case: ${FUNCNAME[1]}, mock top path: $MOCK_TOP" cd "$MOCK_TOP" copy_directory build/blueprint copy_directory build/soong symlink_directory prebuilts/go symlink_directory prebuilts/build-tools symlink_directory external/golang-protobuf touch "$MOCK_TOP/Android.bp" export ALLOW_MISSING_DEPENDENCIES=true mkdir -p out/soong } function run_soong() { build/soong/soong_ui.bash --make-mode --skip-ninja --skip-make --skip-soong-tests }