xref: /aosp_15_r20/frameworks/base/ravenwood/tools/hoststubgen/common.sh (revision d57664e9bc4670b3ecf6748a746a57c557b6bc9e)
1*d57664e9SAndroid Build Coastguard Worker# Copyright (C) 2023 The Android Open Source Project
2*d57664e9SAndroid Build Coastguard Worker#
3*d57664e9SAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License");
4*d57664e9SAndroid Build Coastguard Worker# you may not use this file except in compliance with the License.
5*d57664e9SAndroid Build Coastguard Worker# You may obtain a copy of the License at
6*d57664e9SAndroid Build Coastguard Worker#
7*d57664e9SAndroid Build Coastguard Worker#      http://www.apache.org/licenses/LICENSE-2.0
8*d57664e9SAndroid Build Coastguard Worker#
9*d57664e9SAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
10*d57664e9SAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS,
11*d57664e9SAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*d57664e9SAndroid Build Coastguard Worker# See the License for the specific language governing permissions and
13*d57664e9SAndroid Build Coastguard Worker# limitations under the License.
14*d57664e9SAndroid Build Coastguard Worker
15*d57664e9SAndroid Build Coastguard Workerset -e # Exit at failure
16*d57664e9SAndroid Build Coastguard Workershopt -s globstar # Enable double-star wildcards (**)
17*d57664e9SAndroid Build Coastguard Worker
18*d57664e9SAndroid Build Coastguard Workercd "${0%/*}" # Move to the script dir
19*d57664e9SAndroid Build Coastguard Worker
20*d57664e9SAndroid Build Coastguard Workerfail() {
21*d57664e9SAndroid Build Coastguard Worker  echo "Error: $*" 1>&2
22*d57664e9SAndroid Build Coastguard Worker  exit 1
23*d57664e9SAndroid Build Coastguard Worker}
24*d57664e9SAndroid Build Coastguard Worker
25*d57664e9SAndroid Build Coastguard Worker# Print the arguments and then execute.
26*d57664e9SAndroid Build Coastguard Workerrun() {
27*d57664e9SAndroid Build Coastguard Worker  echo "Running: $*" 1>&2
28*d57664e9SAndroid Build Coastguard Worker  "$@"
29*d57664e9SAndroid Build Coastguard Worker}
30*d57664e9SAndroid Build Coastguard Worker
31*d57664e9SAndroid Build Coastguard Worker# Concatenate the second and subsequent args with the first arg as a separator.
32*d57664e9SAndroid Build Coastguard Worker# e.g. `join : a b c` -> prints `a:b:c`
33*d57664e9SAndroid Build Coastguard Workerjoin() {
34*d57664e9SAndroid Build Coastguard Worker  local IFS="$1"
35*d57664e9SAndroid Build Coastguard Worker  shift
36*d57664e9SAndroid Build Coastguard Worker  echo "$*"
37*d57664e9SAndroid Build Coastguard Worker}
38*d57664e9SAndroid Build Coastguard Worker
39*d57664e9SAndroid Build Coastguard Workerabspath() {
40*d57664e9SAndroid Build Coastguard Worker  for name in "${@}"; do
41*d57664e9SAndroid Build Coastguard Worker    readlink -f $name
42*d57664e9SAndroid Build Coastguard Worker  done
43*d57664e9SAndroid Build Coastguard Worker}
44*d57664e9SAndroid Build Coastguard Worker
45*d57664e9SAndroid Build Coastguard Workerm() {
46*d57664e9SAndroid Build Coastguard Worker  if (( $SKIP_BUILD )) ; then
47*d57664e9SAndroid Build Coastguard Worker    echo "Skipping build: $*" 1>&2
48*d57664e9SAndroid Build Coastguard Worker    return 0
49*d57664e9SAndroid Build Coastguard Worker  fi
50*d57664e9SAndroid Build Coastguard Worker  run ${ANDROID_BUILD_TOP}/build/soong/soong_ui.bash --make-mode "$@"
51*d57664e9SAndroid Build Coastguard Worker}
52*d57664e9SAndroid Build Coastguard Worker
53*d57664e9SAndroid Build Coastguard Worker# Extract given jar files
54*d57664e9SAndroid Build Coastguard Workerextract() {
55*d57664e9SAndroid Build Coastguard Worker  for f in "${@}"; do
56*d57664e9SAndroid Build Coastguard Worker    local out=$f.ext
57*d57664e9SAndroid Build Coastguard Worker    run rm -fr $out
58*d57664e9SAndroid Build Coastguard Worker    run mkdir -p $out
59*d57664e9SAndroid Build Coastguard Worker
60*d57664e9SAndroid Build Coastguard Worker    # It's too noisy, so only show the first few lines.
61*d57664e9SAndroid Build Coastguard Worker    {
62*d57664e9SAndroid Build Coastguard Worker      # Hmm unzipping kotlin jar files may produce a warning? Let's just add `|| true`...
63*d57664e9SAndroid Build Coastguard Worker      run unzip $f -d $out || true
64*d57664e9SAndroid Build Coastguard Worker    } |& sed -e '5,$d'
65*d57664e9SAndroid Build Coastguard Worker    echo '  (omitting remaining output)'
66*d57664e9SAndroid Build Coastguard Worker
67*d57664e9SAndroid Build Coastguard Worker  done
68*d57664e9SAndroid Build Coastguard Worker}
69*d57664e9SAndroid Build Coastguard Worker
70*d57664e9SAndroid Build Coastguard Worker# Find all *.java files in $1, and print them as Java class names.
71*d57664e9SAndroid Build Coastguard Worker# For example, if there's a file `src/com/android/test/Test.java`, and you run
72*d57664e9SAndroid Build Coastguard Worker# `list_all_classes_under_dir src`, then it'll print `com.android.test.Test`.
73*d57664e9SAndroid Build Coastguard Workerlist_all_classes_under_dir() {
74*d57664e9SAndroid Build Coastguard Worker  local dir="$1"
75*d57664e9SAndroid Build Coastguard Worker  ( # Use a subshell, so we won't change the current directory on the caller side.
76*d57664e9SAndroid Build Coastguard Worker    cd "$dir"
77*d57664e9SAndroid Build Coastguard Worker
78*d57664e9SAndroid Build Coastguard Worker    # List the java files, but replace the slashes with dots, and remove the `.java` suffix.
79*d57664e9SAndroid Build Coastguard Worker    ls **/*.java | sed -e 's!/!.!g' -e 's!.java$!!'
80*d57664e9SAndroid Build Coastguard Worker  )
81*d57664e9SAndroid Build Coastguard Worker}
82*d57664e9SAndroid Build Coastguard Worker
83*d57664e9SAndroid Build Coastguard Workercheckenv() {
84*d57664e9SAndroid Build Coastguard Worker  # Make sure $ANDROID_BUILD_TOP is set.
85*d57664e9SAndroid Build Coastguard Worker  : ${ANDROID_BUILD_TOP:?}
86*d57664e9SAndroid Build Coastguard Worker
87*d57664e9SAndroid Build Coastguard Worker  # Make sure ANDROID_BUILD_TOP doesn't contain whitespace.
88*d57664e9SAndroid Build Coastguard Worker  set ${ANDROID_BUILD_TOP}
89*d57664e9SAndroid Build Coastguard Worker  if [[ $# != 1 ]] ; then
90*d57664e9SAndroid Build Coastguard Worker    fail "\$ANDROID_BUILD_TOP cannot contain whitespace."
91*d57664e9SAndroid Build Coastguard Worker  fi
92*d57664e9SAndroid Build Coastguard Worker}
93*d57664e9SAndroid Build Coastguard Worker
94*d57664e9SAndroid Build Coastguard Workercheckenv
95*d57664e9SAndroid Build Coastguard Worker
96*d57664e9SAndroid Build Coastguard WorkerJAVAC=${JAVAC:-javac}
97*d57664e9SAndroid Build Coastguard WorkerJAVA=${JAVA:-java}
98*d57664e9SAndroid Build Coastguard WorkerJAR=${JAR:-jar}
99*d57664e9SAndroid Build Coastguard Worker
100*d57664e9SAndroid Build Coastguard WorkerJAVAC_OPTS=${JAVAC_OPTS:--Xmaxerrs 99999 -Xlint:none}
101*d57664e9SAndroid Build Coastguard Worker
102*d57664e9SAndroid Build Coastguard WorkerSOONG_INT=$ANDROID_BUILD_TOP/out/soong/.intermediates
103*d57664e9SAndroid Build Coastguard Worker
104*d57664e9SAndroid Build Coastguard WorkerJUNIT_TEST_MAIN_CLASS=com.android.hoststubgen.hosthelper.HostTestSuite
105*d57664e9SAndroid Build Coastguard Worker
106*d57664e9SAndroid Build Coastguard Workerrun_junit_test_jar() {
107*d57664e9SAndroid Build Coastguard Worker  local jar="$1"
108*d57664e9SAndroid Build Coastguard Worker  echo "Starting test: $jar ..."
109*d57664e9SAndroid Build Coastguard Worker  run cd "${jar%/*}"
110*d57664e9SAndroid Build Coastguard Worker
111*d57664e9SAndroid Build Coastguard Worker  run $JAVA $JAVA_OPTS \
112*d57664e9SAndroid Build Coastguard Worker      -cp $jar \
113*d57664e9SAndroid Build Coastguard Worker      org.junit.runner.JUnitCore \
114*d57664e9SAndroid Build Coastguard Worker      $main_class || return 1
115*d57664e9SAndroid Build Coastguard Worker  return 0
116*d57664e9SAndroid Build Coastguard Worker}
117