Ensure that recursive QMAKE_EXTRA_TARGETS use the correct makefile
authorRohan McGovern <rohan.mcgovern@nokia.com>
Thu, 12 May 2011 07:45:55 +0000 (17:45 +1000)
committerRohan McGovern <rohan.mcgovern@nokia.com>
Thu, 12 May 2011 22:59:43 +0000 (08:59 +1000)
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)

qmake/generators/makefile.cpp
tests/auto/qmake/testdata/subdir_via_pro_file_extra_target/simple/main.cpp [new file with mode: 0644]
tests/auto/qmake/testdata/subdir_via_pro_file_extra_target/simple/simple.pro [new file with mode: 0644]
tests/auto/qmake/testdata/subdir_via_pro_file_extra_target/subdir.pro [new file with mode: 0644]
tests/auto/qmake/testdata/subdir_via_pro_file_extra_target/subdir_via_pro_file_extra_target.pro [new file with mode: 0644]
tests/auto/qmake/tst_qmake.cpp

index ace3531..94661a8 100644 (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) {
diff --git a/tests/auto/qmake/testdata/subdir_via_pro_file_extra_target/simple/main.cpp b/tests/auto/qmake/testdata/subdir_via_pro_file_extra_target/simple/main.cpp
new file mode 100644 (file)
index 0000000..3c850d4
--- /dev/null
@@ -0,0 +1,3 @@
+int main(int,char**)
+{
+}
diff --git a/tests/auto/qmake/testdata/subdir_via_pro_file_extra_target/simple/simple.pro b/tests/auto/qmake/testdata/subdir_via_pro_file_extra_target/simple/simple.pro
new file mode 100644 (file)
index 0000000..2db08a2
--- /dev/null
@@ -0,0 +1,5 @@
+TEMPLATE = app
+SOURCES  = main.cpp
+
+extratarget.commands = @echo extra target worked OK
+QMAKE_EXTRA_TARGETS += extratarget
diff --git a/tests/auto/qmake/testdata/subdir_via_pro_file_extra_target/subdir.pro b/tests/auto/qmake/testdata/subdir_via_pro_file_extra_target/subdir.pro
new file mode 100644 (file)
index 0000000..be0d80a
--- /dev/null
@@ -0,0 +1,7 @@
+TEMPLATE = subdirs
+SUBDIRS  = simple
+
+extratarget.CONFIG         = recursive
+extratarget.recurse        = $$SUBDIRS
+extratarget.recurse_target = extratarget
+QMAKE_EXTRA_TARGETS       += extratarget
diff --git a/tests/auto/qmake/testdata/subdir_via_pro_file_extra_target/subdir_via_pro_file_extra_target.pro b/tests/auto/qmake/testdata/subdir_via_pro_file_extra_target/subdir_via_pro_file_extra_target.pro
new file mode 100644 (file)
index 0000000..7c07859
--- /dev/null
@@ -0,0 +1,7 @@
+TEMPLATE = subdirs
+SUBDIRS  = subdir.pro
+
+extratarget.CONFIG         = recursive
+extratarget.recurse        = $$SUBDIRS
+extratarget.recurse_target = extratarget
+QMAKE_EXTRA_TARGETS       += extratarget
index 81a51e1..afd28e1 100644 (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";