#!/bin/bash function fail { echo "*** Failure at line $1" exit 1 } function ctor { echo "*** Running: ./ctor $*" ./ctor $* } # Wipe the board rm -Rf build rm -f configuration.cc rm -f ctor cp ctor_files/ctor.cc.base ctor.cc # Compile bootstrap binary g++ -pthread -std=c++20 -L../../build -lctor -I../../src ctor.cc -o ctor || fail ${LINENO} # No build files should have been created yet [ -d build ] && fail ${LINENO} # capture md5 sum of ctor binary before configure is called MD5=`md5sum ctor` ctor configure --ctor-includedir ../../src --ctor-libdir ../../build # ctor should be rebuilt at this point, so md5 sum should have changed (echo $MD5 | md5sum --status -c) && fail ${LINENO} # configuration.cc should have been generated now [ ! -f configuration.cc ] && fail ${LINENO} # Shouldn't compile anything yet - only configure [ -f build/hello-hello_cc.o ] && fail ${LINENO} MD5=`md5sum ctor` # Run normally to build project ctor -v # Compiled object should now exist [ ! -f build/hello-hello_cc.o ] && fail ${LINENO} # ctor should not have been rebuilt, so md5 sum should be the same (echo $MD5 | md5sum --status -c) || fail ${LINENO} MOD1=`stat -c %Y build/hello-hello_cc.o` touch hello.cc sleep 1.1 # Run normally to rebuild hello.cc ctor -v # Object file should have been recompiled MOD2=`stat -c %Y build/hello-hello_cc.o` [[ $MOD1 == $MOD2 ]] && fail ${LINENO} # Replacve -DFOO with -DBAR in foo external.cxxflags cp ctor_files/ctor.cc.bar ctor.cc MD5C=`md5sum configuration.cc` MD5=`md5sum ctor` MOD1=`stat -c %Y build/hello-hello_cc.o` sleep 1.1 # Run normally to reconfigure, rebuild ctor and rebuild hello.cc ctor -v MOD2=`stat -c %Y build/hello-hello_cc.o` [[ $MOD1 == $MOD2 ]] && fail ${LINENO} (echo $MD5C | md5sum --status -c) && fail ${LINENO} (echo $MD5 | md5sum --status -c) && fail ${LINENO} cp ctor_files/ctor.cc.multi ctor.cc MD5C=`md5sum configuration.cc` MD5=`md5sum ctor` MOD1=`stat -c %Y build/hello-hello_cc.o` sleep 1.1 # Run normally to reconfigure, rebuild ctor and rebuild hello.cc ctor -v MOD2=`stat -c %Y build/hello-hello_cc.o` [[ $MOD1 == $MOD2 ]] && fail ${LINENO} (echo $MD5C | md5sum --status -c) && fail ${LINENO} (echo $MD5 | md5sum --status -c) && fail ${LINENO} # now touching foobar.h, should retrigger re-configuration touch foobar.h MOD1=`stat -c %Y ctor` sleep 1.1 # Run normally to reconfigure, rebuild ctor and rebuild hello.cc ctor -v MOD2=`stat -c %Y ctor` [[ $MOD1 == $MOD2 ]] && fail ${LINENO}