xref: /aosp_15_r20/build/soong/tests/androidmk_test.sh (revision 333d2b3687b3a337dbcca9d65000bca186795e39)
1*333d2b36SAndroid Build Coastguard Worker#!/bin/bash -eu
2*333d2b36SAndroid Build Coastguard Worker
3*333d2b36SAndroid Build Coastguard Workerset -o pipefail
4*333d2b36SAndroid Build Coastguard Worker
5*333d2b36SAndroid Build Coastguard Worker# How to run: bash path-to-script/androidmk_test.sh
6*333d2b36SAndroid Build Coastguard Worker# Tests of converting license functionality of the androidmk tool
7*333d2b36SAndroid Build Coastguard WorkerREAL_TOP="$(readlink -f "$(dirname "$0")"/../../..)"
8*333d2b36SAndroid Build Coastguard Worker"$REAL_TOP/build/soong/soong_ui.bash" --make-mode TARGET_RELEASE=trunk_staging androidmk
9*333d2b36SAndroid Build Coastguard Worker
10*333d2b36SAndroid Build Coastguard Workersource "$(dirname "$0")/lib.sh"
11*333d2b36SAndroid Build Coastguard Worker
12*333d2b36SAndroid Build Coastguard Worker# Expect to create a new license module
13*333d2b36SAndroid Build Coastguard Workerfunction test_rewrite_license_property_inside_current_directory {
14*333d2b36SAndroid Build Coastguard Worker  setup
15*333d2b36SAndroid Build Coastguard Worker
16*333d2b36SAndroid Build Coastguard Worker  # Create an Android.mk file
17*333d2b36SAndroid Build Coastguard Worker  mkdir -p a/b
18*333d2b36SAndroid Build Coastguard Worker  cat > a/b/Android.mk <<'EOF'
19*333d2b36SAndroid Build Coastguard Workerinclude $(CLEAR_VARS)
20*333d2b36SAndroid Build Coastguard WorkerLOCAL_MODULE := foo
21*333d2b36SAndroid Build Coastguard WorkerLOCAL_LICENSE_KINDS := license_kind1 license_kind2
22*333d2b36SAndroid Build Coastguard WorkerLOCAL_LICENSE_CONDITIONS := license_condition
23*333d2b36SAndroid Build Coastguard WorkerLOCAL_NOTICE_FILE := $(LOCAL_PATH)/license_notice1 $(LOCAL_PATH)/license_notice2
24*333d2b36SAndroid Build Coastguard Workerinclude $(BUILD_PACKAGE)
25*333d2b36SAndroid Build Coastguard WorkerEOF
26*333d2b36SAndroid Build Coastguard Worker
27*333d2b36SAndroid Build Coastguard Worker  # Create an expected Android.bp file for the module "foo"
28*333d2b36SAndroid Build Coastguard Worker  cat > a/b/Android.bp <<'EOF'
29*333d2b36SAndroid Build Coastguard Workerpackage {
30*333d2b36SAndroid Build Coastguard Worker    // See: http://go/android-license-faq
31*333d2b36SAndroid Build Coastguard Worker    default_applicable_licenses: [
32*333d2b36SAndroid Build Coastguard Worker        "a_b_license",
33*333d2b36SAndroid Build Coastguard Worker    ],
34*333d2b36SAndroid Build Coastguard Worker}
35*333d2b36SAndroid Build Coastguard Worker
36*333d2b36SAndroid Build Coastguard Workerlicense {
37*333d2b36SAndroid Build Coastguard Worker    name: "a_b_license",
38*333d2b36SAndroid Build Coastguard Worker    visibility: [":__subpackages__"],
39*333d2b36SAndroid Build Coastguard Worker    license_kinds: [
40*333d2b36SAndroid Build Coastguard Worker        "license_kind1",
41*333d2b36SAndroid Build Coastguard Worker        "license_kind2",
42*333d2b36SAndroid Build Coastguard Worker    ],
43*333d2b36SAndroid Build Coastguard Worker    license_text: [
44*333d2b36SAndroid Build Coastguard Worker        "license_notice1",
45*333d2b36SAndroid Build Coastguard Worker        "license_notice2",
46*333d2b36SAndroid Build Coastguard Worker    ],
47*333d2b36SAndroid Build Coastguard Worker}
48*333d2b36SAndroid Build Coastguard Worker
49*333d2b36SAndroid Build Coastguard Workerandroid_app {
50*333d2b36SAndroid Build Coastguard Worker    name: "foo",
51*333d2b36SAndroid Build Coastguard Worker}
52*333d2b36SAndroid Build Coastguard WorkerEOF
53*333d2b36SAndroid Build Coastguard Worker
54*333d2b36SAndroid Build Coastguard Worker  run_androidmk_test "a/b/Android.mk" "a/b/Android.bp"
55*333d2b36SAndroid Build Coastguard Worker}
56*333d2b36SAndroid Build Coastguard Worker
57*333d2b36SAndroid Build Coastguard Worker# Expect to reference to an existing license module
58*333d2b36SAndroid Build Coastguard Workerfunction test_rewrite_license_property_outside_current_directory {
59*333d2b36SAndroid Build Coastguard Worker  setup
60*333d2b36SAndroid Build Coastguard Worker
61*333d2b36SAndroid Build Coastguard Worker  # Create an Android.mk file
62*333d2b36SAndroid Build Coastguard Worker  mkdir -p a/b/c/d
63*333d2b36SAndroid Build Coastguard Worker  cat > a/b/c/d/Android.mk <<'EOF'
64*333d2b36SAndroid Build Coastguard Workerinclude $(CLEAR_VARS)
65*333d2b36SAndroid Build Coastguard WorkerLOCAL_MODULE := foo
66*333d2b36SAndroid Build Coastguard WorkerLOCAL_LICENSE_KINDS := license_kind1 license_kind2
67*333d2b36SAndroid Build Coastguard WorkerLOCAL_LICENSE_CONDITIONS := license_condition
68*333d2b36SAndroid Build Coastguard WorkerLOCAL_NOTICE_FILE := $(LOCAL_PATH)/../../license_notice1 $(LOCAL_PATH)/../../license_notice2
69*333d2b36SAndroid Build Coastguard Workerinclude $(BUILD_PACKAGE)
70*333d2b36SAndroid Build Coastguard WorkerEOF
71*333d2b36SAndroid Build Coastguard Worker
72*333d2b36SAndroid Build Coastguard Worker  # Create an expected (input) Android.bp file at a/b/
73*333d2b36SAndroid Build Coastguard Worker  cat > a/b/Android.bp <<'EOF'
74*333d2b36SAndroid Build Coastguard Workerpackage {
75*333d2b36SAndroid Build Coastguard Worker    // See: http://go/android-license-faq
76*333d2b36SAndroid Build Coastguard Worker    default_applicable_licenses: [
77*333d2b36SAndroid Build Coastguard Worker        "a_b_license",
78*333d2b36SAndroid Build Coastguard Worker    ],
79*333d2b36SAndroid Build Coastguard Worker}
80*333d2b36SAndroid Build Coastguard Worker
81*333d2b36SAndroid Build Coastguard Workerlicense {
82*333d2b36SAndroid Build Coastguard Worker    name: "a_b_license",
83*333d2b36SAndroid Build Coastguard Worker    visibility: [":__subpackages__"],
84*333d2b36SAndroid Build Coastguard Worker    license_kinds: [
85*333d2b36SAndroid Build Coastguard Worker        "license_kind1",
86*333d2b36SAndroid Build Coastguard Worker        "license_kind2",
87*333d2b36SAndroid Build Coastguard Worker    ],
88*333d2b36SAndroid Build Coastguard Worker    license_text: [
89*333d2b36SAndroid Build Coastguard Worker        "license_notice1",
90*333d2b36SAndroid Build Coastguard Worker        "license_notice2",
91*333d2b36SAndroid Build Coastguard Worker    ],
92*333d2b36SAndroid Build Coastguard Worker}
93*333d2b36SAndroid Build Coastguard Worker
94*333d2b36SAndroid Build Coastguard Workerandroid_app {
95*333d2b36SAndroid Build Coastguard Worker    name: "bar",
96*333d2b36SAndroid Build Coastguard Worker}
97*333d2b36SAndroid Build Coastguard WorkerEOF
98*333d2b36SAndroid Build Coastguard Worker
99*333d2b36SAndroid Build Coastguard Worker  # Create an expected (output) Android.bp file for the module "foo"
100*333d2b36SAndroid Build Coastguard Worker  cat > a/b/c/d/Android.bp <<'EOF'
101*333d2b36SAndroid Build Coastguard Workerpackage {
102*333d2b36SAndroid Build Coastguard Worker    // See: http://go/android-license-faq
103*333d2b36SAndroid Build Coastguard Worker    default_applicable_licenses: [
104*333d2b36SAndroid Build Coastguard Worker        "a_b_license",
105*333d2b36SAndroid Build Coastguard Worker    ],
106*333d2b36SAndroid Build Coastguard Worker}
107*333d2b36SAndroid Build Coastguard Worker
108*333d2b36SAndroid Build Coastguard Workerandroid_app {
109*333d2b36SAndroid Build Coastguard Worker    name: "foo",
110*333d2b36SAndroid Build Coastguard Worker}
111*333d2b36SAndroid Build Coastguard WorkerEOF
112*333d2b36SAndroid Build Coastguard Worker
113*333d2b36SAndroid Build Coastguard Worker  run_androidmk_test "a/b/c/d/Android.mk" "a/b/c/d/Android.bp"
114*333d2b36SAndroid Build Coastguard Worker}
115*333d2b36SAndroid Build Coastguard Worker
116*333d2b36SAndroid Build Coastguard Workerfunction run_androidmk_test {
117*333d2b36SAndroid Build Coastguard Worker  export ANDROID_BUILD_TOP="$MOCK_TOP"
118*333d2b36SAndroid Build Coastguard Worker  local -r androidmk=("$REAL_TOP"/*/host/*/bin/androidmk)
119*333d2b36SAndroid Build Coastguard Worker  if [[ ${#androidmk[@]} -ne 1 ]]; then
120*333d2b36SAndroid Build Coastguard Worker    fail "Multiple androidmk binaries found: ${androidmk[*]}"
121*333d2b36SAndroid Build Coastguard Worker  fi
122*333d2b36SAndroid Build Coastguard Worker  local -r out=$("${androidmk[0]}" "$1")
123*333d2b36SAndroid Build Coastguard Worker  local -r expected=$(<"$2")
124*333d2b36SAndroid Build Coastguard Worker
125*333d2b36SAndroid Build Coastguard Worker  if [[ "$out" != "$expected" ]]; then
126*333d2b36SAndroid Build Coastguard Worker    ANDROID_BUILD_TOP="$REAL_TOP"
127*333d2b36SAndroid Build Coastguard Worker    cleanup_mock_top
128*333d2b36SAndroid Build Coastguard Worker    fail "The output is not the same as the expected"
129*333d2b36SAndroid Build Coastguard Worker  fi
130*333d2b36SAndroid Build Coastguard Worker
131*333d2b36SAndroid Build Coastguard Worker  ANDROID_BUILD_TOP="$REAL_TOP"
132*333d2b36SAndroid Build Coastguard Worker  cleanup_mock_top
133*333d2b36SAndroid Build Coastguard Worker  echo "Succeeded"
134*333d2b36SAndroid Build Coastguard Worker}
135*333d2b36SAndroid Build Coastguard Worker
136*333d2b36SAndroid Build Coastguard Workerscan_and_run_tests
137