Hi,
On 23.02.2012 14:49, Herbert Duerr wrote:
For a long time the old build system had the problem that build dependencies
between modules had to be set manually and this was quite fragile, of course. It
can result in obvious trouble like compile or link failures and what is more
troubling are subtle problems, like struct changes going unnoticed by a source
file depending on it. The result are hard to debug and "interesting" artifacts.
The gbuild process has many benefits one of which is its automatic handling of
dependencies. Volunteers are very welcome to migrate the remaining modules. In
the meantime we have to deal with the dual gbuild/oldbuild process which
complicates the dependency problem more. The manually set dependencies of the
old build system where also not perfectly debugged which showed when the build
order was changed, e.g. by doing a highly parallel builds on beefy buildbots.
Fixing all to the the old-build dependencies would help too, volunteers are very
welcome.
Looking for a solution that works reliably for the very near future I'm
considering to add a "clean output trees" to the bootstrap step. It would make
sure that all is rebuilt when the configuration gets changed. Of course you
could prevent that (by setting an environment variable DO_KEEP_OUTPUT_TREES) but
the default should be to go the "better safe than sorry" way.
--- a/main/bootstrap.1
+++ b/main/bootstrap.1
@@ -22,3 +22,11 @@ if [ "$DO_FETCH_TARBALLS" = "yes" ]; then
$SRC_ROOT/fetch_tarballs.sh $SRC_ROOT/ooo.lst
fi
+# remove all output trees
+# TODO: this is no longer needed when all dependencies are perfect
+# or when the switch to the gbuild system is complete
+if [[ -n "$DO_KEEP_OUTPUT_TREES" && -n $INPATH && -n $OUTDIR ]]; then
+ echo Removing the output trees
+ rm -rf "*/${INPATH}" "${OUTDIR}"
+fi
+
a -1 from my side for a new default behavior of the bootstrap script.
Make it optional, if you want, but please not the default behavior.
As Armin stated the dependencies are now global.
Thus, my trick to "workaround" the "race condition risk" is to perform a "build
--all --deliver" before the intrinsic build is triggered in order to get all
"new headers" delivered to the solver.
Best regards, Oliver.