Ensure that recursive QMAKE_EXTRA_TARGETS use the correct makefile

Recursive QMAKE_EXTRA_TARGETS were omitting the `-f' option to make.
This would break in the case where the correct makefile was not named
`Makefile'.  The included autotest demonstrates the problem.

Note that this was fixed for normal targets back in 2005
by faac7bd178654fd67a6f3f9cf4f6f2605071448d (p4 202370), but was not
fixed for extra targets.

Reviewed-by: ossi
(cherry picked from commit 96a3bf7a8bbc1e5361e16cbeeceb4be674b88c30)
This commit is contained in:
Rohan McGovern 2011-05-12 17:45:55 +10:00
parent 1a1471718d
commit 152a10012c
6 changed files with 37 additions and 4 deletions

View File

@ -2647,10 +2647,7 @@ MakefileGenerator::writeSubTargets(QTextStream &t, QList<MakefileGenerator::SubT
QString out_directory_cdin, out_directory_cdout;
MAKE_CD_IN_AND_OUT(out_directory);
//don't need the makefile arg if it isn't changed
QString makefilein;
if(subtarget->makefile != "$(MAKEFILE)")
makefilein = " -f " + subtarget->makefile;
QString makefilein = " -f " + subtarget->makefile;
//write the rule/depends
if(flags & SubTargetOrdered) {

View File

@ -0,0 +1,3 @@
int main(int,char**)
{
}

View File

@ -0,0 +1,5 @@
TEMPLATE = app
SOURCES = main.cpp
extratarget.commands = @echo extra target worked OK
QMAKE_EXTRA_TARGETS += extratarget

View File

@ -0,0 +1,7 @@
TEMPLATE = subdirs
SUBDIRS = simple
extratarget.CONFIG = recursive
extratarget.recurse = $$SUBDIRS
extratarget.recurse_target = extratarget
QMAKE_EXTRA_TARGETS += extratarget

View File

@ -0,0 +1,7 @@
TEMPLATE = subdirs
SUBDIRS = subdir.pro
extratarget.CONFIG = recursive
extratarget.recurse = $$SUBDIRS
extratarget.recurse_target = extratarget
QMAKE_EXTRA_TARGETS += extratarget

View File

@ -69,6 +69,7 @@ private slots:
void simple_lib();
void simple_dll();
void subdirs();
void subdir_via_pro_file_extra_target();
void functions();
void operators();
void variables();
@ -234,6 +235,19 @@ void tst_qmake::subdirs()
QVERIFY( test_compiler.removeMakefile( workDir ) );
}
void tst_qmake::subdir_via_pro_file_extra_target()
{
QString workDir = base_path + "/testdata/subdir_via_pro_file_extra_target";
QDir D;
D.remove( workDir + "/Makefile");
D.remove( workDir + "/Makefile.subdir");
D.remove( workDir + "/simple/Makefile");
D.remove( workDir + "/simple/Makefile.subdir");
QVERIFY( test_compiler.qmake( workDir, "subdir_via_pro_file_extra_target" ));
QVERIFY( test_compiler.make( workDir, "extratarget" ));
}
void tst_qmake::functions()
{
QString workDir = base_path + "/testdata/functions";