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