Browse Source

Makefile: Fix <LANG>_INCLUDE_WHAT_YOU_USE with CTEST_USE_LAUNCHERS

The 'ctest --launch' command must be placed before the IWYU launcher on
the compiler command line.  Extend the RunCMake.IncludeWhatYouUse test
to cover this case.  The Ninja generator already does it correctly.
Brad King 10 years ago
parent
commit
b3475ba57b

+ 7 - 7
Source/cmMakefileTargetGenerator.cxx

@@ -761,13 +761,6 @@ cmMakefileTargetGenerator
       source.GetFullPath(), workingDirectory, compileCommand);
     }
 
-  // Expand placeholders in the commands.
-  for(std::vector<std::string>::iterator i = compileCommands.begin();
-      i != compileCommands.end(); ++i)
-    {
-    this->LocalGenerator->ExpandRuleVariables(*i, vars);
-    }
-
   // Maybe insert an include-what-you-use runner.
   if (!compileCommands.empty() && (lang == "C" || lang == "CXX"))
     {
@@ -782,6 +775,13 @@ cmMakefileTargetGenerator
       }
     }
 
+  // Expand placeholders in the commands.
+  for(std::vector<std::string>::iterator i = compileCommands.begin();
+      i != compileCommands.end(); ++i)
+    {
+    this->LocalGenerator->ExpandRuleVariables(*i, vars);
+    }
+
   // Change the command working directory to the local build tree.
   this->LocalGenerator->CreateCDCommand
     (compileCommands,

+ 4 - 0
Tests/RunCMake/IncludeWhatYouUse/C-launch-Build-stdout.txt

@@ -0,0 +1,4 @@
+Warning: include-what-you-use reported diagnostics:
+should add these lines:
+*
+#include <\.\.\.>

+ 3 - 0
Tests/RunCMake/IncludeWhatYouUse/C-launch.cmake

@@ -0,0 +1,3 @@
+set(CTEST_USE_LAUNCHERS 1)
+include(CTestUseLaunchers)
+include(C.cmake)

+ 4 - 0
Tests/RunCMake/IncludeWhatYouUse/CXX-launch-Build-stdout.txt

@@ -0,0 +1,4 @@
+Warning: include-what-you-use reported diagnostics:
+should add these lines:
+*
+#include <\.\.\.>

+ 3 - 0
Tests/RunCMake/IncludeWhatYouUse/CXX-launch.cmake

@@ -0,0 +1,3 @@
+set(CTEST_USE_LAUNCHERS 1)
+include(CTestUseLaunchers)
+include(CXX.cmake)

+ 4 - 0
Tests/RunCMake/IncludeWhatYouUse/RunCMakeTest.cmake

@@ -16,3 +16,7 @@ endfunction()
 
 run_iwyu(C)
 run_iwyu(CXX)
+if (NOT RunCMake_GENERATOR STREQUAL "Watcom WMake")
+  run_iwyu(C-launch)
+  run_iwyu(CXX-launch)
+endif()