main()
2 if configure arg call configure(args), exit
4 if reconfigure arg call reconfigure(args), exit
1,3 other rebuildCheck
1 build dirty project sources...
configure(args)
collect (relevant) env vars in map: A
collect (relevant) cli args in map: B
call generateCache(A, B)
then call rebuildCheck to force rebuild and then exit
reconfigure(args)
read A and B from (current) config cache and call generateCache(A, B) to
generate a new one
then call rebuildCheck to rebuild and then exit
rebuildCheck()
check if rebuild is needed (if any ctor.cc files or configuration.cc changed):
rebuild
if !"only configuration.cc changed" re-run, with "reconfigure" argument
generateCache(A, B)
resolv tool-chain (compiler, linker, etc) and store in map: C
run through externals and resolv them, store results in map: D
generate config cache .cc file with A, B, C and D
Scenarios:
1. No ctor deps changed (normal run)
rebuild dirty project sources.
OK
2. a new configuration.cc has been generated (user called configure)
regenerate cache
* rebuild
OK
3. one or more ctor.cc files changed (run with args)
* rebuild
relaunch with 'reconfigure' with args (goto 4)
OK
4. run with reconfigure (with other args)
"ignore" args but keep them for later
regenerate cache
* rebuild
relauch with "other args" (goto 1)
OK