- Make sure you have a clean source tree at qtbase 10eb62b71b15189f3fc6f97a115743d3d0cf7b24 (e.g. git reset --hard 10eb62b71b15189f3fc6f97a115743d3d0cf7b24 && git clean -dqffx)
- ./configure -nokia-developer -verbose 2>&1 | tee configure.log
- Observe that configure succeeds.
- less tests/auto/Makefile
- Observe that tests/auto/Makefile only contains subtargets for v8, SUBTARGETS = sub-v8, and contains a Command indicating that the makefile was generated from v8.pro, e.g. # Command: /home/rmcgover/build/qt/qt5/qtbase/bin/qmake -spec ../../mkspecs/linux-g++ -o Makefile v8.pro
- expected behavior: tests/auto/Makefile was generated from tests/auto/auto.pro and contains one subtarget for each thing mentioned in tests/auto/auto.pro's SUBDIRS
- Only if unconvinced: do the build (make), and observe that no errors occurred, but no autotests other than tests/auto/v8 were built.
Some analysis of the bug:
- bug was triggered by the addition of v8 into qtbase, http://codereview.qt.nokia.com/3092
- this bug is the reason why http://pulse.test.qt.nokia.com:8080/browse/projects/QtBase%20master%20Integration/builds/498/ displays >9000 qpa autotests, while http://pulse.test.qt.nokia.com:8080/browse/projects/QtBase%20master%20Integration/builds/499/ displays exactly 4 qpa autotests. Build 499 is the build which integrated http://codereview.qt.nokia.com/3092 , at which point the build system started silently disabling almost all of the autotests in some configurations.
- the bug is in configure, and the behavior may be affected by:
- whether or not `fast' mode is enabled
- the order in which the `find' command prints filenames
- Basically, the bug is that configure incorrectly assumes that a .pro file located at foo/bar/something.pro will always result in a file named foo/bar/Makefile when qmake'd, which is false for various reasons, and in particular is false for tests/auto/*.pro . The "Creating makefiles" section is the part with the bug. Read the logic and you will see that, if a directory contains multiple .pro files, qmake will be invoked in such a way that the different projects may clobber each other's makefiles.
I've attached my configure log, notice it says
for /home/rmcgover/build/qt/qt5/qtbase/tests/auto/v8.pro (linux-g++) /home/rmcgover/build/qt/qt5/qtbase/bin/qmake -spec /home/rmcgover/build/qt/qt5/qtbase/mkspecs/linux-g++ -o /home/rmcgover/build/qt/qt5/qtbase/./tests/auto /home/rmcgover/build/qt/qt5/qtbase/tests/auto/v8.pro (...) skipping /home/rmcgover/build/qt/qt5/qtbase/tests/auto/auto.pro
It skipped running qmake over auto.pro because tests/auto/Makefile already existed from v8.pro . Other incidences of "skipping" in the log are also suspicious.