| # Copyright (C) 2023 The Android Open Source Project |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| set -e # Exit at failure |
| shopt -s globstar # Enable double-star wildcards (**) |
| |
| cd "${0%/*}" # Move to the script dir |
| |
| fail() { |
| echo "Error: $*" 1>&2 |
| exit 1 |
| } |
| |
| # Print the arguments and then execute. |
| run() { |
| echo "Running: $*" 1>&2 |
| "$@" |
| } |
| |
| # Concatenate the second and subsequent args with the first arg as a separator. |
| # e.g. `join : a b c` -> prints `a:b:c` |
| join() { |
| local IFS="$1" |
| shift |
| echo "$*" |
| } |
| |
| abspath() { |
| for name in "${@}"; do |
| readlink -f $name |
| done |
| } |
| |
| m() { |
| if (( $SKIP_BUILD )) ; then |
| echo "Skipping build: $*" 1>&2 |
| return 0 |
| fi |
| run ${ANDROID_BUILD_TOP}/build/soong/soong_ui.bash --make-mode "$@" |
| } |
| |
| # Extract given jar files |
| extract() { |
| for f in "${@}"; do |
| local out=$f.ext |
| run rm -fr $out |
| run mkdir -p $out |
| |
| # It's too noisy, so only show the first few lines. |
| { |
| # Hmm unzipping kotlin jar files may produce a warning? Let's just add `|| true`... |
| run unzip $f -d $out || true |
| } |& sed -e '5,$d' |
| echo ' (omitting remaining output)' |
| |
| done |
| } |
| |
| # Find all *.java files in $1, and print them as Java class names. |
| # For example, if there's a file `src/com/android/test/Test.java`, and you run |
| # `list_all_classes_under_dir src`, then it'll print `com.android.test.Test`. |
| list_all_classes_under_dir() { |
| local dir="$1" |
| ( # Use a subshell, so we won't change the current directory on the caller side. |
| cd "$dir" |
| |
| # List the java files, but replace the slashes with dots, and remove the `.java` suffix. |
| ls **/*.java | sed -e 's!/!.!g' -e 's!.java$!!' |
| ) |
| } |
| |
| checkenv() { |
| # Make sure $ANDROID_BUILD_TOP is set. |
| : ${ANDROID_BUILD_TOP:?} |
| |
| # Make sure ANDROID_BUILD_TOP doesn't contain whitespace. |
| set ${ANDROID_BUILD_TOP} |
| if [[ $# != 1 ]] ; then |
| fail "\$ANDROID_BUILD_TOP cannot contain whitespace." |
| fi |
| } |
| |
| checkenv |
| |
| JAVAC=${JAVAC:-javac} |
| JAVA=${JAVA:-java} |
| JAR=${JAR:-jar} |
| |
| JAVAC_OPTS=${JAVAC_OPTS:--Xmaxerrs 99999 -Xlint:none} |
| |
| SOONG_INT=$ANDROID_BUILD_TOP/out/soong/.intermediates |
| |
| JUNIT_TEST_MAIN_CLASS=com.android.hoststubgen.hosthelper.HostTestSuite |
| |
| run_junit_test_jar() { |
| local jar="$1" |
| echo "Starting test: $jar ..." |
| run cd "${jar%/*}" |
| |
| run $JAVA $JAVA_OPTS \ |
| -cp $jar \ |
| org.junit.runner.JUnitCore \ |
| $main_class || return 1 |
| return 0 |
| } |