xref: /aosp_15_r20/build/blueprint/tests/test_tree_tests.sh (revision 1fa6dee971e1612fa5cc0aa5ca2d35a22e2c34a3)
1*1fa6dee9SAndroid Build Coastguard Worker#!/bin/bash -ex
2*1fa6dee9SAndroid Build Coastguard Worker
3*1fa6dee9SAndroid Build Coastguard Workerfunction mtime() {
4*1fa6dee9SAndroid Build Coastguard Worker    stat -c %Y $1
5*1fa6dee9SAndroid Build Coastguard Worker}
6*1fa6dee9SAndroid Build Coastguard Worker
7*1fa6dee9SAndroid Build Coastguard Worker# Go to top of blueprint tree
8*1fa6dee9SAndroid Build Coastguard Workercd $(dirname ${BASH_SOURCE[0]})/..
9*1fa6dee9SAndroid Build Coastguard WorkerTOP=${PWD}
10*1fa6dee9SAndroid Build Coastguard Worker
11*1fa6dee9SAndroid Build Coastguard Workerexport TEMPDIR=$(mktemp -d -t blueprint.test.XXX)
12*1fa6dee9SAndroid Build Coastguard Worker
13*1fa6dee9SAndroid Build Coastguard Workerfunction cleanup() {
14*1fa6dee9SAndroid Build Coastguard Worker    cd "${TOP}"
15*1fa6dee9SAndroid Build Coastguard Worker    echo "cleaning up ${TEMPDIR}"
16*1fa6dee9SAndroid Build Coastguard Worker    rm -rf "${TEMPDIR}"
17*1fa6dee9SAndroid Build Coastguard Worker}
18*1fa6dee9SAndroid Build Coastguard Workertrap cleanup EXIT
19*1fa6dee9SAndroid Build Coastguard Worker
20*1fa6dee9SAndroid Build Coastguard Workerexport OUTDIR="${TEMPDIR}/out"
21*1fa6dee9SAndroid Build Coastguard Workermkdir "${OUTDIR}"
22*1fa6dee9SAndroid Build Coastguard Worker
23*1fa6dee9SAndroid Build Coastguard Workerexport SRCDIR="${TEMPDIR}/src"
24*1fa6dee9SAndroid Build Coastguard Workercp -r tests/test_tree "${SRCDIR}"
25*1fa6dee9SAndroid Build Coastguard Workercp -r "${TOP}" "${SRCDIR}/blueprint"
26*1fa6dee9SAndroid Build Coastguard Worker
27*1fa6dee9SAndroid Build Coastguard Workercd "${OUTDIR}"
28*1fa6dee9SAndroid Build Coastguard Workerexport BLUEPRINTDIR=${SRCDIR}/blueprint
29*1fa6dee9SAndroid Build Coastguard Worker#setup
30*1fa6dee9SAndroid Build Coastguard Worker${SRCDIR}/blueprint/bootstrap.bash $@
31*1fa6dee9SAndroid Build Coastguard Worker
32*1fa6dee9SAndroid Build Coastguard Worker#confirm no build.ninja file is rebuilt when no change happens
33*1fa6dee9SAndroid Build Coastguard Worker./blueprint.bash
34*1fa6dee9SAndroid Build Coastguard Worker
35*1fa6dee9SAndroid Build Coastguard WorkerOLDTIME_BOOTSTRAP=$(mtime .bootstrap/build.ninja)
36*1fa6dee9SAndroid Build Coastguard WorkerOLDTIME=$(mtime build.ninja)
37*1fa6dee9SAndroid Build Coastguard Worker
38*1fa6dee9SAndroid Build Coastguard Workersleep 2
39*1fa6dee9SAndroid Build Coastguard Worker./blueprint.bash
40*1fa6dee9SAndroid Build Coastguard Worker
41*1fa6dee9SAndroid Build Coastguard Workerif [ ${OLDTIME} != $(mtime build.ninja) ]; then
42*1fa6dee9SAndroid Build Coastguard Worker    echo "unnecessary build.ninja regeneration for null build" >&2
43*1fa6dee9SAndroid Build Coastguard Worker    exit 1
44*1fa6dee9SAndroid Build Coastguard Workerfi
45*1fa6dee9SAndroid Build Coastguard Worker
46*1fa6dee9SAndroid Build Coastguard Workerif [ ${OLDTIME_BOOTSTRAP} != $(mtime .bootstrap/build.ninja) ]; then
47*1fa6dee9SAndroid Build Coastguard Worker    echo "unnecessary .bootstrap/build.ninja regeneration for null build" >&2
48*1fa6dee9SAndroid Build Coastguard Worker    exit 1
49*1fa6dee9SAndroid Build Coastguard Workerfi
50*1fa6dee9SAndroid Build Coastguard Worker
51*1fa6dee9SAndroid Build Coastguard Worker#confirm no build.ninja file is rebuilt when a new directory is created
52*1fa6dee9SAndroid Build Coastguard Workermkdir ${SRCDIR}/newglob
53*1fa6dee9SAndroid Build Coastguard Worker
54*1fa6dee9SAndroid Build Coastguard Workersleep 2
55*1fa6dee9SAndroid Build Coastguard Worker./blueprint.bash
56*1fa6dee9SAndroid Build Coastguard Worker
57*1fa6dee9SAndroid Build Coastguard Workerif [ ${OLDTIME} != $(mtime build.ninja) ]; then
58*1fa6dee9SAndroid Build Coastguard Worker    echo "unnecessary build.ninja regeneration for new empty directory" >&2
59*1fa6dee9SAndroid Build Coastguard Worker    exit 1
60*1fa6dee9SAndroid Build Coastguard Workerfi
61*1fa6dee9SAndroid Build Coastguard Workerif [ ${OLDTIME_BOOTSTRAP} != $(mtime .bootstrap/build.ninja) ]; then
62*1fa6dee9SAndroid Build Coastguard Worker    echo "unnecessary .bootstrap/build.ninja regeneration for new empty directory" >&2
63*1fa6dee9SAndroid Build Coastguard Worker    exit 1
64*1fa6dee9SAndroid Build Coastguard Workerfi
65*1fa6dee9SAndroid Build Coastguard Worker
66*1fa6dee9SAndroid Build Coastguard Worker#confirm that build.ninja is rebuilt when a new Blueprints file is added
67*1fa6dee9SAndroid Build Coastguard Workertouch ${SRCDIR}/newglob/Blueprints
68*1fa6dee9SAndroid Build Coastguard Worker
69*1fa6dee9SAndroid Build Coastguard Workersleep 2
70*1fa6dee9SAndroid Build Coastguard Worker./blueprint.bash
71*1fa6dee9SAndroid Build Coastguard Worker
72*1fa6dee9SAndroid Build Coastguard Workerif [ ${OLDTIME} = $(mtime build.ninja) ]; then
73*1fa6dee9SAndroid Build Coastguard Worker    echo "Failed to rebuild build.ninja for glob addition" >&2
74*1fa6dee9SAndroid Build Coastguard Worker    exit 1
75*1fa6dee9SAndroid Build Coastguard Workerfi
76*1fa6dee9SAndroid Build Coastguard Workerif [ ${OLDTIME_BOOTSTRAP} = $(mtime .bootstrap/build.ninja) ]; then
77*1fa6dee9SAndroid Build Coastguard Worker    echo "Failed to rebuild .bootstrap/build.ninja for glob addition" >&2
78*1fa6dee9SAndroid Build Coastguard Worker    exit 1
79*1fa6dee9SAndroid Build Coastguard Workerfi
80*1fa6dee9SAndroid Build Coastguard Worker
81*1fa6dee9SAndroid Build Coastguard Worker#confirm that build.ninja is rebuilt when a glob match is removed
82*1fa6dee9SAndroid Build Coastguard WorkerOLDTIME=$(mtime build.ninja)
83*1fa6dee9SAndroid Build Coastguard WorkerOLDTIME_BOOTSTRAP=$(mtime .bootstrap/build.ninja)
84*1fa6dee9SAndroid Build Coastguard Workerrm ${SRCDIR}/newglob/Blueprints
85*1fa6dee9SAndroid Build Coastguard Worker
86*1fa6dee9SAndroid Build Coastguard Workersleep 2
87*1fa6dee9SAndroid Build Coastguard Worker./blueprint.bash
88*1fa6dee9SAndroid Build Coastguard Worker
89*1fa6dee9SAndroid Build Coastguard Workerif [ ${OLDTIME} = $(mtime build.ninja) ]; then
90*1fa6dee9SAndroid Build Coastguard Worker    echo "Failed to rebuild build.ninja for glob removal" >&2
91*1fa6dee9SAndroid Build Coastguard Worker    exit 1
92*1fa6dee9SAndroid Build Coastguard Workerfi
93*1fa6dee9SAndroid Build Coastguard Workerif [ ${OLDTIME_BOOTSTRAP} = $(mtime .bootstrap/build.ninja) ]; then
94*1fa6dee9SAndroid Build Coastguard Worker    echo "Failed to rebuild .bootstrap/build.ninja for glob removal" >&2
95*1fa6dee9SAndroid Build Coastguard Worker    exit 1
96*1fa6dee9SAndroid Build Coastguard Workerfi
97*1fa6dee9SAndroid Build Coastguard Worker
98*1fa6dee9SAndroid Build Coastguard Worker#confirm that build.ninja is not rebuilt when a glob match is removed
99*1fa6dee9SAndroid Build Coastguard WorkerOLDTIME=$(mtime build.ninja)
100*1fa6dee9SAndroid Build Coastguard WorkerOLDTIME_BOOTSTRAP=$(mtime .bootstrap/build.ninja)
101*1fa6dee9SAndroid Build Coastguard Workerrmdir ${SRCDIR}/newglob
102*1fa6dee9SAndroid Build Coastguard Worker
103*1fa6dee9SAndroid Build Coastguard Workersleep 2
104*1fa6dee9SAndroid Build Coastguard Worker./blueprint.bash
105*1fa6dee9SAndroid Build Coastguard Worker
106*1fa6dee9SAndroid Build Coastguard Workerif [ ${OLDTIME} != $(mtime build.ninja) ]; then
107*1fa6dee9SAndroid Build Coastguard Worker    echo "unnecessary build.ninja regeneration for removal of empty directory" >&2
108*1fa6dee9SAndroid Build Coastguard Worker    exit 1
109*1fa6dee9SAndroid Build Coastguard Workerfi
110*1fa6dee9SAndroid Build Coastguard Worker
111*1fa6dee9SAndroid Build Coastguard Workerif [ ${OLDTIME_BOOTSTRAP} != $(mtime .bootstrap/build.ninja) ]; then
112*1fa6dee9SAndroid Build Coastguard Worker    echo "unnecessary .bootstrap/build.ninja regeneration for removal of empty directory" >&2
113*1fa6dee9SAndroid Build Coastguard Worker    exit 1
114*1fa6dee9SAndroid Build Coastguard Workerfi
115*1fa6dee9SAndroid Build Coastguard Worker
116*1fa6dee9SAndroid Build Coastguard Workerecho tests passed
117