[Cmake-commits] CMake branch, master, updated. v3.10.0-rc3-174-ge48397e

Kitware Robot kwrobot at kitware.com
Mon Oct 30 08:55:17 EDT 2017


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "CMake".

The branch, master has been updated
       via  e48397ee2930090ff41c8febeea27542b4580ec0 (commit)
       via  9ce00caee3639cda96ea7bc0310d6fa0aad7631b (commit)
       via  a7b770686a2aede19f1714c38a3a7697d8c798ee (commit)
       via  9bec6afa7a79e4669fe5c1b10e1acaa404e65573 (commit)
       via  3a4db8617e42d47363309fa317d2cac2ee61a684 (commit)
       via  798e4f2fad4013f1c759d66b42cfcd73d7dac428 (commit)
       via  197b4e18d45331eab5225e6cb9433a13430fd0ba (commit)
       via  992962c76dd472fa9d122231c89d8d11aedd3288 (commit)
       via  a5197eeac7a28046729c40067ee02cd7e3e8e01b (commit)
       via  1c075ffd60ba9354f8aaf314f0938aeb4247adc8 (commit)
      from  20f462dffc36c58329bda1c14030ba5768360bbf (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=e48397ee2930090ff41c8febeea27542b4580ec0
commit e48397ee2930090ff41c8febeea27542b4580ec0
Merge: a7b7706 9ce00ca
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Mon Oct 30 12:52:45 2017 +0000
Commit:     Kitware Robot <kwrobot at kitware.com>
CommitDate: Mon Oct 30 08:52:48 2017 -0400

    Merge topic 'cpack-rpm-dist-test-fix'
    
    9ce00cae CPack/RPM: DIST-MONOLITHIC-type subtest fix
    
    Acked-by: Kitware Robot <kwrobot at kitware.com>
    Merge-request: !1424


https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=9ce00caee3639cda96ea7bc0310d6fa0aad7631b
commit 9ce00caee3639cda96ea7bc0310d6fa0aad7631b
Author:     Domen Vrankar <domen.vrankar at gmail.com>
AuthorDate: Sun Oct 29 00:53:46 2017 +0200
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Mon Oct 30 08:48:46 2017 -0400

    CPack/RPM: DIST-MONOLITHIC-type subtest fix
    
    Test was failing in case dist macro contained
    a + symbol which is valid but must be escaped
    for using the string as a regex.
    
    Fixes #17328

diff --git a/Tests/RunCMake/CPack/tests/DIST/VerifyResult.cmake b/Tests/RunCMake/CPack/tests/DIST/VerifyResult.cmake
index 7375ecc..1b2eb48 100644
--- a/Tests/RunCMake/CPack/tests/DIST/VerifyResult.cmake
+++ b/Tests/RunCMake/CPack/tests/DIST/VerifyResult.cmake
@@ -5,6 +5,11 @@ execute_process(COMMAND ${RPMBUILD_EXECUTABLE} -E %{?dist}
 
 set(whitespaces_ "[\t\n\r ]*")
 
+# since we have no control over dist tag value we should try to escape
+# the content for use as a regular expression
+string(REPLACE "+" "\\+" DIST_TAG "${DIST_TAG}")
+string(REPLACE "." "\\." DIST_TAG "${DIST_TAG}")
+
 getPackageInfo("${FOUND_FILE_1}" "FILE_INFO_")
 if(NOT FILE_INFO_ MATCHES ".*Release${whitespaces_}:${whitespaces_}1${DIST_TAG}")
   message(FATAL_ERROR "Unexpected Release in '${FOUND_FILE_1}'; file info: '${FILE_INFO_}'")

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=a7b770686a2aede19f1714c38a3a7697d8c798ee
commit a7b770686a2aede19f1714c38a3a7697d8c798ee
Merge: 9bec6af 197b4e1
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Mon Oct 30 12:46:54 2017 +0000
Commit:     Kitware Robot <kwrobot at kitware.com>
CommitDate: Mon Oct 30 08:46:59 2017 -0400

    Merge topic 'fix-co-compile'
    
    197b4e18 Merge branch 'backport-fix-co-compile' into fix-co-compile
    992962c7 cmcmd: Restore support for running multiple lint tools
    a5197eea cmcmd: Convert lint handlers to file-static functions
    1c075ffd cmcmd: Rename loop iteration variable for clarity
    
    Acked-by: Kitware Robot <kwrobot at kitware.com>
    Merge-request: !1418


https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=9bec6afa7a79e4669fe5c1b10e1acaa404e65573
commit 9bec6afa7a79e4669fe5c1b10e1acaa404e65573
Merge: 20f462d 3a4db86
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Mon Oct 30 12:45:36 2017 +0000
Commit:     Kitware Robot <kwrobot at kitware.com>
CommitDate: Mon Oct 30 08:45:49 2017 -0400

    Merge topic 'autogen-static-library-cycles'
    
    3a4db861 Autogen: Tests: Add test for STATIC_LIBRARY cycles
    798e4f2f Autogen: Don't add STATIC_LIBRARY cycle targets to the _autogen dependencies
    
    Acked-by: Kitware Robot <kwrobot at kitware.com>
    Merge-request: !1408


https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=3a4db8617e42d47363309fa317d2cac2ee61a684
commit 3a4db8617e42d47363309fa317d2cac2ee61a684
Author:     Sebastian Holtermann <sebholt at xwmw.org>
AuthorDate: Wed Oct 25 18:24:42 2017 +0200
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Fri Oct 27 09:37:15 2017 -0400

    Autogen: Tests: Add test for STATIC_LIBRARY cycles

diff --git a/Tests/QtAutogen/CMakeLists.txt b/Tests/QtAutogen/CMakeLists.txt
index ec35b89..b9d8e46 100644
--- a/Tests/QtAutogen/CMakeLists.txt
+++ b/Tests/QtAutogen/CMakeLists.txt
@@ -214,5 +214,9 @@ add_subdirectory(objectLibrary)
 add_subdirectory(sameName)
 
 # -- Test
+# Tests static library cycles
+add_subdirectory(staticLibraryCycle)
+
+# -- Test
 # Complex test case
 add_subdirectory(complex)
diff --git a/Tests/QtAutogen/staticLibraryCycle/CMakeLists.txt b/Tests/QtAutogen/staticLibraryCycle/CMakeLists.txt
new file mode 100644
index 0000000..144a435
--- /dev/null
+++ b/Tests/QtAutogen/staticLibraryCycle/CMakeLists.txt
@@ -0,0 +1,17 @@
+# Test AUTOMOC and AUTORCC on source files with the same name
+# but in different subdirectories
+
+set(CMAKE_AUTOMOC ON)
+
+# Cyclic static libraries
+add_library(slc_a STATIC a.cpp)
+target_link_libraries(slc_a ${QT_LIBRARIES} slc_b)
+
+add_library(slc_b STATIC b.cpp)
+target_link_libraries(slc_b ${QT_LIBRARIES} slc_c)
+
+add_library(slc_c STATIC c.cpp)
+target_link_libraries(slc_c ${QT_LIBRARIES} slc_a)
+
+add_executable(slc main.cpp)
+target_link_libraries(slc ${QT_LIBRARIES} slc_a)
diff --git a/Tests/QtAutogen/staticLibraryCycle/a.cpp b/Tests/QtAutogen/staticLibraryCycle/a.cpp
new file mode 100644
index 0000000..97cc66e
--- /dev/null
+++ b/Tests/QtAutogen/staticLibraryCycle/a.cpp
@@ -0,0 +1,7 @@
+#include "a.h"
+#include "b.h"
+
+A::A()
+{
+  B b;
+}
diff --git a/Tests/QtAutogen/staticLibraryCycle/a.h b/Tests/QtAutogen/staticLibraryCycle/a.h
new file mode 100644
index 0000000..7176170
--- /dev/null
+++ b/Tests/QtAutogen/staticLibraryCycle/a.h
@@ -0,0 +1,13 @@
+#ifndef CLASSA_HPP
+#define CLASSA_HPP
+
+#include <QObject>
+
+class A : public QObject
+{
+  Q_OBJECT
+public:
+  A();
+};
+
+#endif
diff --git a/Tests/QtAutogen/staticLibraryCycle/b.cpp b/Tests/QtAutogen/staticLibraryCycle/b.cpp
new file mode 100644
index 0000000..a807d89
--- /dev/null
+++ b/Tests/QtAutogen/staticLibraryCycle/b.cpp
@@ -0,0 +1,7 @@
+#include "b.h"
+#include "c.h"
+
+B::B()
+{
+  C c;
+}
diff --git a/Tests/QtAutogen/staticLibraryCycle/b.h b/Tests/QtAutogen/staticLibraryCycle/b.h
new file mode 100644
index 0000000..ededbd8
--- /dev/null
+++ b/Tests/QtAutogen/staticLibraryCycle/b.h
@@ -0,0 +1,13 @@
+#ifndef CLASSB_HPP
+#define CLASSB_HPP
+
+#include <QObject>
+
+class B : public QObject
+{
+  Q_OBJECT
+public:
+  B();
+};
+
+#endif
diff --git a/Tests/QtAutogen/staticLibraryCycle/c.cpp b/Tests/QtAutogen/staticLibraryCycle/c.cpp
new file mode 100644
index 0000000..7d427c2
--- /dev/null
+++ b/Tests/QtAutogen/staticLibraryCycle/c.cpp
@@ -0,0 +1,7 @@
+#include "c.h"
+#include "a.h"
+
+C::C()
+{
+  A a;
+}
diff --git a/Tests/QtAutogen/staticLibraryCycle/c.h b/Tests/QtAutogen/staticLibraryCycle/c.h
new file mode 100644
index 0000000..20f3725
--- /dev/null
+++ b/Tests/QtAutogen/staticLibraryCycle/c.h
@@ -0,0 +1,13 @@
+#ifndef CLASSC_HPP
+#define CLASSC_HPP
+
+#include <QObject>
+
+class C : public QObject
+{
+  Q_OBJECT
+public:
+  C();
+};
+
+#endif
diff --git a/Tests/QtAutogen/staticLibraryCycle/main.cpp b/Tests/QtAutogen/staticLibraryCycle/main.cpp
new file mode 100644
index 0000000..f5b7fd2
--- /dev/null
+++ b/Tests/QtAutogen/staticLibraryCycle/main.cpp
@@ -0,0 +1,8 @@
+#include "a.h"
+
+int main(int argv, char** args)
+{
+  // Object instances
+  A a;
+  return 0;
+}

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=798e4f2fad4013f1c759d66b42cfcd73d7dac428
commit 798e4f2fad4013f1c759d66b42cfcd73d7dac428
Author:     Sebastian Holtermann <sebholt at xwmw.org>
AuthorDate: Wed Oct 25 17:44:28 2017 +0200
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Fri Oct 27 09:37:15 2017 -0400

    Autogen: Don't add STATIC_LIBRARY cycle targets to the _autogen dependencies
    
    When a STATIC_LIBRARY cycle is detected we don't add any STATIC_LIBRARY target
    from the cycle to the `_autogen` target dependencies.
    
    Closes #17389

diff --git a/Source/cmQtAutoGeneratorInitializer.cxx b/Source/cmQtAutoGeneratorInitializer.cxx
index e7080cd..c7550e6 100644
--- a/Source/cmQtAutoGeneratorInitializer.cxx
+++ b/Source/cmQtAutoGeneratorInitializer.cxx
@@ -9,6 +9,7 @@
 #include "cmFilePathChecksum.h"
 #include "cmGeneratorTarget.h"
 #include "cmGlobalGenerator.h"
+#include "cmLinkItem.h"
 #include "cmLocalGenerator.h"
 #include "cmMakefile.h"
 #include "cmOutputConverter.h"
@@ -16,6 +17,7 @@
 #include "cmSourceFile.h"
 #include "cmSourceGroup.h"
 #include "cmState.h"
+#include "cmStateTypes.h"
 #include "cmSystemTools.h"
 #include "cmTarget.h"
 #include "cm_sys_stat.h"
@@ -24,6 +26,7 @@
 
 #include <algorithm>
 #include <array>
+#include <deque>
 #include <map>
 #include <set>
 #include <sstream>
@@ -156,7 +159,7 @@ static void GetConfigs(cmMakefile* makefile, std::string& configDefault,
 {
   configDefault = makefile->GetConfigurations(configsList);
   if (configsList.empty()) {
-    configsList.push_back("");
+    configsList.push_back(configDefault);
   }
 }
 
@@ -299,6 +302,50 @@ static std::vector<std::string> AddGeneratedSource(
   return genFiles;
 }
 
+/* @brief Tests if targetDepend is a STATIC_LIBRARY and if any of its
+ * recursive STATIC_LIBRARY dependencies depends on targetOrigin
+ * (STATIC_LIBRARY cycle).
+ */
+static bool StaticLibraryCycle(cmGeneratorTarget const* targetOrigin,
+                               cmGeneratorTarget const* targetDepend,
+                               std::string const& config)
+{
+  bool cycle = false;
+  if ((targetOrigin->GetType() == cmStateEnums::STATIC_LIBRARY) &&
+      (targetDepend->GetType() == cmStateEnums::STATIC_LIBRARY)) {
+    std::set<cmGeneratorTarget const*> knownLibs;
+    std::deque<cmGeneratorTarget const*> testLibs;
+
+    // Insert initial static_library dependency
+    knownLibs.insert(targetDepend);
+    testLibs.push_back(targetDepend);
+
+    while (!testLibs.empty()) {
+      cmGeneratorTarget const* testTarget = testLibs.front();
+      testLibs.pop_front();
+      // Check if the test target is the origin target (cycle)
+      if (testTarget == targetOrigin) {
+        cycle = true;
+        break;
+      }
+      // Collect all static_library dependencies from the test target
+      cmLinkImplementationLibraries const* libs =
+        testTarget->GetLinkImplementationLibraries(config);
+      if (libs != nullptr) {
+        for (cmLinkItem const& item : libs->Libraries) {
+          cmGeneratorTarget const* depTarget = item.Target;
+          if ((depTarget != nullptr) &&
+              (depTarget->GetType() == cmStateEnums::STATIC_LIBRARY) &&
+              knownLibs.insert(depTarget).second) {
+            testLibs.push_back(depTarget);
+          }
+        }
+      }
+    }
+  }
+  return cycle;
+}
+
 struct cmQtAutoGenSetup
 {
   std::set<std::string> MocSkip;
@@ -631,7 +678,7 @@ void cmQtAutoGeneratorInitializer::InitializeAutogenTarget(
   GetConfigs(makefile, configDefault, configsList);
 
   std::set<std::string> autogenDependFiles;
-  std::set<std::string> autogenDependTargets;
+  std::set<cmTarget*> autogenDependTargets;
   std::vector<std::string> autogenProvides;
 
   // Remove build directories on cleanup
@@ -953,7 +1000,7 @@ void cmQtAutoGeneratorInitializer::InitializeAutogenTarget(
         // Allow target and file dependencies
         auto* depTarget = makefile->FindTargetToUse(depName);
         if (depTarget != nullptr) {
-          autogenDependTargets.insert(depTarget->GetName());
+          autogenDependTargets.insert(depTarget);
         } else {
           autogenDependFiles.insert(depName);
         }
@@ -980,8 +1027,8 @@ void cmQtAutoGeneratorInitializer::InitializeAutogenTarget(
   // Create the autogen target/command
   if (usePRE_BUILD) {
     // Add additional autogen target dependencies to origin target
-    for (std::string const& depTarget : autogenDependTargets) {
-      target->Target->AddUtility(depTarget, makefile);
+    for (cmTarget* depTarget : autogenDependTargets) {
+      target->Target->AddUtility(depTarget->GetName(), makefile);
     }
 
     // Add the pre-build command directly to bypass the OBJECT_LIBRARY
@@ -999,20 +1046,35 @@ void cmQtAutoGeneratorInitializer::InitializeAutogenTarget(
     target->Target->AddPreBuildCommand(cc);
   } else {
 
-    // Add utility target dependencies to the autogen target dependencies
-    for (std::string const& depTarget : target->Target->GetUtilities()) {
-      autogenDependTargets.insert(depTarget);
-    }
+    // Convert file dependencies std::set to std::vector
+    std::vector<std::string> autogenDepends(autogenDependFiles.begin(),
+                                            autogenDependFiles.end());
+
     // Add link library target dependencies to the autogen target dependencies
-    for (const auto& item : target->Target->GetOriginalLinkLibraries()) {
-      if (makefile->FindTargetToUse(item.first) != nullptr) {
-        autogenDependTargets.insert(item.first);
+    for (std::string const& config : configsList) {
+      cmLinkImplementationLibraries const* libs =
+        target->GetLinkImplementationLibraries(config);
+      if (libs != nullptr) {
+        for (cmLinkItem const& item : libs->Libraries) {
+          cmGeneratorTarget const* libTarget = item.Target;
+          if ((libTarget != nullptr) &&
+              !StaticLibraryCycle(target, libTarget, config)) {
+            std::string util;
+            if (configsList.size() > 1) {
+              util += "$<$<CONFIG:";
+              util += config;
+              util += ">:";
+            }
+            util += libTarget->GetName();
+            if (configsList.size() > 1) {
+              util += ">";
+            }
+            autogenDepends.push_back(util);
+          }
+        }
       }
     }
 
-    // Convert file dependencies std::set to std::vector
-    const std::vector<std::string> autogenDepends(autogenDependFiles.begin(),
-                                                  autogenDependFiles.end());
     // Create autogen target
     cmTarget* autogenTarget = makefile->AddUtilityCommand(
       autogenTargetName, true, workingDirectory.c_str(),
@@ -1022,9 +1084,13 @@ void cmQtAutoGeneratorInitializer::InitializeAutogenTarget(
     localGen->AddGeneratorTarget(
       new cmGeneratorTarget(autogenTarget, localGen));
 
+    // Forward origin utilities to autogen target
+    for (std::string const& depName : target->Target->GetUtilities()) {
+      autogenTarget->AddUtility(depName, makefile);
+    }
     // Add additional autogen target dependencies to autogen target
-    for (std::string const& depTarget : autogenDependTargets) {
-      autogenTarget->AddUtility(depTarget, makefile);
+    for (cmTarget* depTarget : autogenDependTargets) {
+      autogenTarget->AddUtility(depTarget->GetName(), makefile);
     }
 
     // Set FOLDER property in autogen target

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=197b4e18d45331eab5225e6cb9433a13430fd0ba
commit 197b4e18d45331eab5225e6cb9433a13430fd0ba
Merge: 971b8c3 992962c
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Fri Oct 27 09:31:04 2017 -0400
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Fri Oct 27 09:31:04 2017 -0400

    Merge branch 'backport-fix-co-compile' into fix-co-compile
    
    Resolve a logical conflict by replacing `cmArray{Begin,End}` from
    the their side with `cm::{cbegin,cend}` from our side.

diff --cc Source/cmcmd.cxx
index 4810cd0,b4772a9..ef75b01
--- a/Source/cmcmd.cxx
+++ b/Source/cmcmd.cxx
@@@ -33,10 -33,7 +33,8 @@@
  #include "cmsys/Process.h"
  #include "cmsys/Terminal.h"
  #include <algorithm>
- #include <functional>
  #include <iostream>
 +#include <iterator>
- #include <map>
  #include <memory> // IWYU pragma: keep
  #include <sstream>
  #include <stdio.h>
@@@ -367,15 -371,20 +372,20 @@@ int cmcmd::HandleCoCompileCommands(std:
        doing_options = false;
      } else if (doing_options) {
        bool optionFound = false;
-       // check arg against all the commandOptions
-       for (auto const& command : commandOptions) {
-         if (arg.compare(0, command.size(), command) == 0) {
 -      for (CoCompiler const* cc = cmArrayBegin(CoCompilers);
 -           cc != cmArrayEnd(CoCompilers); ++cc) {
++      for (CoCompiler const* cc = cm::cbegin(CoCompilers);
++           cc != cm::cend(CoCompilers); ++cc) {
+         size_t optionLen = strlen(cc->Option);
+         if (arg.compare(0, optionLen, cc->Option) == 0) {
            optionFound = true;
-           runCmd = arg.substr(command.size());
-           commandFound = command;
+           CoCompileJob job;
+           job.Command = arg.substr(optionLen);
+           job.Handler = cc->Handler;
+           jobs.push_back(std::move(job));
+           if (cc->NoOriginalCommand) {
+             runOriginalCmd = false;
+           }
          }
        }
-       // check arg with --source=
        if (cmHasLiteralPrefix(arg, "--source=")) {
          sourceFile = arg.substr(9);
          optionFound = true;
@@@ -390,11 -399,12 +400,12 @@@
        orig_cmd.push_back(arg);
      }
    }
-   if (commandFound.empty()) {
-     std::cerr << "__run_co_compile missing command to run. Looking for one of "
-                  "the following:\n";
-     for (const auto& i : commandOptions) {
-       std::cerr << i << "\n";
+   if (jobs.empty()) {
+     std::cerr << "__run_co_compile missing command to run. "
+                  "Looking for one or more of the following:\n";
 -    for (CoCompiler const* cc = cmArrayBegin(CoCompilers);
 -         cc != cmArrayEnd(CoCompilers); ++cc) {
++    for (CoCompiler const* cc = cm::cbegin(CoCompilers);
++         cc != cm::cend(CoCompilers); ++cc) {
+       std::cerr << cc->Option << "\n";
      }
      return 1;
    }

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=992962c76dd472fa9d122231c89d8d11aedd3288
commit 992962c76dd472fa9d122231c89d8d11aedd3288
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Fri Oct 27 08:31:34 2017 -0400
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Fri Oct 27 09:26:50 2017 -0400

    cmcmd: Restore support for running multiple lint tools
    
    Refactoring in commit v3.10.0-rc1~115^2 (Clean up iwyu code to not be
    one big if statement, 2017-08-28) incorrectly changed the logic to run
    only one lint tool at a time.  Restore support for running all tools
    specified on the command-line.

diff --git a/Source/cmcmd.cxx b/Source/cmcmd.cxx
index abf6447..b4772a9 100644
--- a/Source/cmcmd.cxx
+++ b/Source/cmcmd.cxx
@@ -33,15 +33,13 @@
 #include "cmsys/Process.h"
 #include "cmsys/Terminal.h"
 #include <algorithm>
-#include <functional>
 #include <iostream>
-#include <map>
 #include <memory> // IWYU pragma: keep
 #include <sstream>
 #include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
 #include <time.h>
-#include <utility>
 
 class cmConnection;
 
@@ -328,35 +326,41 @@ static int HandleCppCheck(const std::string& runCmd,
   return 0;
 }
 
+typedef int (*CoCompileHandler)(const std::string&, const std::string&,
+                                const std::vector<std::string>&);
+
+struct CoCompiler
+{
+  const char* Option;
+  CoCompileHandler Handler;
+  bool NoOriginalCommand;
+};
+
+static CoCompiler CoCompilers[] = { // Table of options and handlers.
+  { "--cppcheck=", HandleCppCheck, false },
+  { "--cpplint=", HandleCppLint, false },
+  { "--iwyu=", HandleIWYU, false },
+  { "--lwyu=", HandleLWYU, true },
+  { "--tidy=", HandleTidy, false }
+};
+
+struct CoCompileJob
+{
+  std::string Command;
+  CoCompileHandler Handler;
+};
+
 // called when args[0] == "__run_co_compile"
 int cmcmd::HandleCoCompileCommands(std::vector<std::string>& args)
 {
-  // initialize a map from command option to handler function
-  std::map<std::string,
-           std::function<int(const std::string&, const std::string&,
-                             const std::vector<std::string>&)>>
-    coCompileTypes;
-  auto a1 = std::placeholders::_1;
-  auto a2 = std::placeholders::_2;
-  auto a3 = std::placeholders::_3;
-  // create a map from option to handler function for option
-  // if the option does not call the original command then it will need
-  // to set runOriginalCmd to false later in this function
-  coCompileTypes["--iwyu="] = std::bind(&HandleIWYU, a1, a2, a3);
-  coCompileTypes["--tidy="] = std::bind(&HandleTidy, a1, a2, a3);
-  coCompileTypes["--lwyu="] = std::bind(&HandleLWYU, a1, a2, a3);
-  coCompileTypes["--cpplint="] = std::bind(&HandleCppLint, a1, a2, a3);
-  coCompileTypes["--cppcheck="] = std::bind(&HandleCppCheck, a1, a2, a3);
-  // copy the command options to a vector of strings
-  std::vector<std::string> commandOptions;
-  commandOptions.reserve(coCompileTypes.size());
-  for (const auto& i : coCompileTypes) {
-    commandOptions.push_back(i.first);
-  }
-
-  std::string runCmd;       // command to be run from --thing=command
-  std::string sourceFile;   // store --source=
-  std::string commandFound; // the command that was in the args list
+  std::vector<CoCompileJob> jobs;
+  std::string sourceFile; // store --source=
+
+  // Default is to run the original command found after -- if the option
+  // does not need to do that, it should be specified here, currently only
+  // lwyu does that.
+  bool runOriginalCmd = true;
+
   std::vector<std::string> orig_cmd;
   bool doing_options = true;
   for (std::string::size_type i = 2; i < args.size(); ++i) {
@@ -367,20 +371,25 @@ int cmcmd::HandleCoCompileCommands(std::vector<std::string>& args)
       doing_options = false;
     } else if (doing_options) {
       bool optionFound = false;
-      // check arg against all the commandOptions
-      for (auto const& command : commandOptions) {
-        if (arg.compare(0, command.size(), command) == 0) {
+      for (CoCompiler const* cc = cmArrayBegin(CoCompilers);
+           cc != cmArrayEnd(CoCompilers); ++cc) {
+        size_t optionLen = strlen(cc->Option);
+        if (arg.compare(0, optionLen, cc->Option) == 0) {
           optionFound = true;
-          runCmd = arg.substr(command.size());
-          commandFound = command;
+          CoCompileJob job;
+          job.Command = arg.substr(optionLen);
+          job.Handler = cc->Handler;
+          jobs.push_back(std::move(job));
+          if (cc->NoOriginalCommand) {
+            runOriginalCmd = false;
+          }
         }
       }
-      // check arg with --source=
       if (cmHasLiteralPrefix(arg, "--source=")) {
         sourceFile = arg.substr(9);
         optionFound = true;
       }
-      // if it was not a commandOptions or --source then error
+      // if it was not a co-compiler or --source then error
       if (!optionFound) {
         std::cerr << "__run_co_compile given unknown argument: " << arg
                   << "\n";
@@ -390,39 +399,40 @@ int cmcmd::HandleCoCompileCommands(std::vector<std::string>& args)
       orig_cmd.push_back(arg);
     }
   }
-  if (commandFound.empty()) {
-    std::cerr << "__run_co_compile missing command to run. Looking for one of "
-                 "the following:\n";
-    for (const auto& i : commandOptions) {
-      std::cerr << i << "\n";
+  if (jobs.empty()) {
+    std::cerr << "__run_co_compile missing command to run. "
+                 "Looking for one or more of the following:\n";
+    for (CoCompiler const* cc = cmArrayBegin(CoCompilers);
+         cc != cmArrayEnd(CoCompilers); ++cc) {
+      std::cerr << cc->Option << "\n";
     }
     return 1;
   }
-  // Default is to run the original command found after -- if the option
-  // does not need to do that, it should be specified here, currently only
-  // lwyu does that.
-  bool runOriginalCmd = true;
-  if (commandFound == "--lwyu=") {
-    runOriginalCmd = false;
-  }
+
   if (runOriginalCmd && orig_cmd.empty()) {
     std::cerr << "__run_co_compile missing compile command after --\n";
     return 1;
   }
 
-  // call the command handler here
-  int ret = coCompileTypes[commandFound](runCmd, sourceFile, orig_cmd);
-  // if the command returns non-zero then return and fail.
-  // for commands that do not want to break the build, they should return
-  // 0 no matter what.
-  if (ret != 0) {
-    return ret;
+  for (CoCompileJob const& job : jobs) {
+    // call the command handler here
+    int ret = job.Handler(job.Command, sourceFile, orig_cmd);
+
+    // if the command returns non-zero then return and fail.
+    // for commands that do not want to break the build, they should return
+    // 0 no matter what.
+    if (ret != 0) {
+      return ret;
+    }
   }
+
   // if there is no original command to run return now
   if (!runOriginalCmd) {
-    return ret;
+    return 0;
   }
+
   // Now run the real compiler command and return its result value
+  int ret;
   if (!cmSystemTools::RunSingleCommand(orig_cmd, nullptr, nullptr, &ret,
                                        nullptr,
                                        cmSystemTools::OUTPUT_PASSTHROUGH)) {
diff --git a/Tests/RunCMake/CMakeLists.txt b/Tests/RunCMake/CMakeLists.txt
index 57cc144..29325ff 100644
--- a/Tests/RunCMake/CMakeLists.txt
+++ b/Tests/RunCMake/CMakeLists.txt
@@ -370,6 +370,12 @@ if("${CMAKE_GENERATOR}" MATCHES "Make|Ninja")
   add_RunCMake_test(IncludeWhatYouUse -DPSEUDO_IWYU=$<TARGET_FILE:pseudo_iwyu>)
   add_RunCMake_test(Cpplint -DPSEUDO_CPPLINT=$<TARGET_FILE:pseudo_cpplint>)
   add_RunCMake_test(Cppcheck -DPSEUDO_CPPCHECK=$<TARGET_FILE:pseudo_cppcheck>)
+  add_RunCMake_test(MultiLint
+    -DPSEUDO_TIDY=$<TARGET_FILE:pseudo_tidy>
+    -DPSEUDO_IWYU=$<TARGET_FILE:pseudo_iwyu>
+    -DPSEUDO_CPPLINT=$<TARGET_FILE:pseudo_cpplint>
+    -DPSEUDO_CPPCHECK=$<TARGET_FILE:pseudo_cppcheck>
+    )
   if(DEFINED CMake_TEST_CUDA)
     list(APPEND CompilerLauncher_ARGS -DCMake_TEST_CUDA=${CMake_TEST_CUDA})
   endif()
diff --git a/Tests/RunCMake/CommandLine/E___run_co_compile-no-iwyu-stderr.txt b/Tests/RunCMake/CommandLine/E___run_co_compile-no-iwyu-stderr.txt
index ffa1da8..a7fbad6 100644
--- a/Tests/RunCMake/CommandLine/E___run_co_compile-no-iwyu-stderr.txt
+++ b/Tests/RunCMake/CommandLine/E___run_co_compile-no-iwyu-stderr.txt
@@ -1,5 +1,6 @@
-^__run_co_compile missing command to run. Looking for one of the following:
-.*--cppcheck=
-.*--cpplint=
-.*--iwyu=
-.*--tidy=
+^__run_co_compile missing command to run. Looking for one or more of the following:
+--cppcheck=
+--cpplint=
+--iwyu=
+--lwyu=
+--tidy=
diff --git a/Tests/RunCMake/MultiLint/C-Build-stdout.txt b/Tests/RunCMake/MultiLint/C-Build-stdout.txt
new file mode 100644
index 0000000..d10427e
--- /dev/null
+++ b/Tests/RunCMake/MultiLint/C-Build-stdout.txt
@@ -0,0 +1,8 @@
+Warning: include-what-you-use reported diagnostics:
+should add these lines:
+*
+#include <\.\.\.>
++
+.*Tests[/\]RunCMake[/\]MultiLint[/\]main\.c:0:0: warning: message \[checker\].*
+Total errors found: 0
+.*Warning: cppcheck reported diagnostics.*error.*warning.*style.*performance.*information.*
diff --git a/Tests/RunCMake/MultiLint/C-launch-Build-stdout.txt b/Tests/RunCMake/MultiLint/C-launch-Build-stdout.txt
new file mode 100644
index 0000000..d10427e
--- /dev/null
+++ b/Tests/RunCMake/MultiLint/C-launch-Build-stdout.txt
@@ -0,0 +1,8 @@
+Warning: include-what-you-use reported diagnostics:
+should add these lines:
+*
+#include <\.\.\.>
++
+.*Tests[/\]RunCMake[/\]MultiLint[/\]main\.c:0:0: warning: message \[checker\].*
+Total errors found: 0
+.*Warning: cppcheck reported diagnostics.*error.*warning.*style.*performance.*information.*
diff --git a/Tests/RunCMake/MultiLint/C-launch.cmake b/Tests/RunCMake/MultiLint/C-launch.cmake
new file mode 100644
index 0000000..e66ca20
--- /dev/null
+++ b/Tests/RunCMake/MultiLint/C-launch.cmake
@@ -0,0 +1,3 @@
+set(CTEST_USE_LAUNCHERS 1)
+include(CTestUseLaunchers)
+include(C.cmake)
diff --git a/Tests/RunCMake/MultiLint/C.cmake b/Tests/RunCMake/MultiLint/C.cmake
new file mode 100644
index 0000000..495d6f0
--- /dev/null
+++ b/Tests/RunCMake/MultiLint/C.cmake
@@ -0,0 +1,6 @@
+enable_language(C)
+set(CMAKE_C_INCLUDE_WHAT_YOU_USE "${PSEUDO_IWYU}" -some -args)
+set(CMAKE_C_CLANG_TIDY "${PSEUDO_TIDY}" -some -args)
+set(CMAKE_C_CPPLINT "${PSEUDO_CPPLINT}" --verbose=0 --linelength=80)
+set(CMAKE_C_CPPCHECK "${PSEUDO_CPPCHECK}")
+add_executable(main main.c)
diff --git a/Tests/RunCMake/MultiLint/CMakeLists.txt b/Tests/RunCMake/MultiLint/CMakeLists.txt
new file mode 100644
index 0000000..bf2ef15
--- /dev/null
+++ b/Tests/RunCMake/MultiLint/CMakeLists.txt
@@ -0,0 +1,3 @@
+cmake_minimum_required(VERSION 3.10)
+project(${RunCMake_TEST} NONE)
+include(${RunCMake_TEST}.cmake)
diff --git a/Tests/RunCMake/MultiLint/CXX-Build-stdout.txt b/Tests/RunCMake/MultiLint/CXX-Build-stdout.txt
new file mode 100644
index 0000000..aaf5fd7
--- /dev/null
+++ b/Tests/RunCMake/MultiLint/CXX-Build-stdout.txt
@@ -0,0 +1,8 @@
+Warning: include-what-you-use reported diagnostics:
+should add these lines:
+*
+#include <\.\.\.>
++
+.*Tests[/\]RunCMake[/\]MultiLint[/\]main\.cxx:0:0: warning: message \[checker\].*
+Total errors found: 0
+.*Warning: cppcheck reported diagnostics.*error.*warning.*style.*performance.*information.*
diff --git a/Tests/RunCMake/MultiLint/CXX-launch-Build-stdout.txt b/Tests/RunCMake/MultiLint/CXX-launch-Build-stdout.txt
new file mode 100644
index 0000000..aaf5fd7
--- /dev/null
+++ b/Tests/RunCMake/MultiLint/CXX-launch-Build-stdout.txt
@@ -0,0 +1,8 @@
+Warning: include-what-you-use reported diagnostics:
+should add these lines:
+*
+#include <\.\.\.>
++
+.*Tests[/\]RunCMake[/\]MultiLint[/\]main\.cxx:0:0: warning: message \[checker\].*
+Total errors found: 0
+.*Warning: cppcheck reported diagnostics.*error.*warning.*style.*performance.*information.*
diff --git a/Tests/RunCMake/MultiLint/CXX-launch.cmake b/Tests/RunCMake/MultiLint/CXX-launch.cmake
new file mode 100644
index 0000000..3002c9d
--- /dev/null
+++ b/Tests/RunCMake/MultiLint/CXX-launch.cmake
@@ -0,0 +1,3 @@
+set(CTEST_USE_LAUNCHERS 1)
+include(CTestUseLaunchers)
+include(CXX.cmake)
diff --git a/Tests/RunCMake/MultiLint/CXX.cmake b/Tests/RunCMake/MultiLint/CXX.cmake
new file mode 100644
index 0000000..dc30146
--- /dev/null
+++ b/Tests/RunCMake/MultiLint/CXX.cmake
@@ -0,0 +1,6 @@
+enable_language(CXX)
+set(CMAKE_CXX_INCLUDE_WHAT_YOU_USE "${PSEUDO_IWYU}" -some -args)
+set(CMAKE_CXX_CLANG_TIDY "${PSEUDO_TIDY}" -some -args)
+set(CMAKE_CXX_CPPLINT "${PSEUDO_CPPLINT}" --verbose=0 --linelength=80)
+set(CMAKE_CXX_CPPCHECK "${PSEUDO_CPPCHECK}")
+add_executable(main main.cxx)
diff --git a/Tests/RunCMake/MultiLint/RunCMakeTest.cmake b/Tests/RunCMake/MultiLint/RunCMakeTest.cmake
new file mode 100644
index 0000000..afd98fd
--- /dev/null
+++ b/Tests/RunCMake/MultiLint/RunCMakeTest.cmake
@@ -0,0 +1,27 @@
+include(RunCMake)
+
+set(RunCMake_TEST_OPTIONS
+  "-DPSEUDO_CPPCHECK=${PSEUDO_CPPCHECK}"
+  "-DPSEUDO_CPPLINT=${PSEUDO_CPPLINT}"
+  "-DPSEUDO_IWYU=${PSEUDO_IWYU}"
+  "-DPSEUDO_TIDY=${PSEUDO_TIDY}"
+  )
+
+function(run_multilint lang)
+  # Use a single build tree for tests without cleaning.
+  set(RunCMake_TEST_BINARY_DIR "${RunCMake_BINARY_DIR}/${lang}-build")
+  set(RunCMake_TEST_NO_CLEAN 1)
+  file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
+  file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
+  run_cmake(${lang})
+  set(RunCMake_TEST_OUTPUT_MERGE 1)
+  run_cmake_command(${lang}-Build ${CMAKE_COMMAND} --build .)
+endfunction()
+
+run_multilint(C)
+run_multilint(CXX)
+
+if(NOT RunCMake_GENERATOR STREQUAL "Watcom WMake")
+  run_multilint(C-launch)
+  run_multilint(CXX-launch)
+endif()
diff --git a/Tests/RunCMake/MultiLint/main.c b/Tests/RunCMake/MultiLint/main.c
new file mode 100644
index 0000000..8488f4e
--- /dev/null
+++ b/Tests/RunCMake/MultiLint/main.c
@@ -0,0 +1,4 @@
+int main(void)
+{
+  return 0;
+}
diff --git a/Tests/RunCMake/MultiLint/main.cxx b/Tests/RunCMake/MultiLint/main.cxx
new file mode 100644
index 0000000..f8b643a
--- /dev/null
+++ b/Tests/RunCMake/MultiLint/main.cxx
@@ -0,0 +1,4 @@
+int main()
+{
+  return 0;
+}

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=a5197eeac7a28046729c40067ee02cd7e3e8e01b
commit a5197eeac7a28046729c40067ee02cd7e3e8e01b
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Fri Oct 27 08:30:20 2017 -0400
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Fri Oct 27 08:36:28 2017 -0400

    cmcmd: Convert lint handlers to file-static functions
    
    These do not need to be declared in the header.

diff --git a/Source/cmcmd.cxx b/Source/cmcmd.cxx
index 3ca0513..abf6447 100644
--- a/Source/cmcmd.cxx
+++ b/Source/cmcmd.cxx
@@ -160,7 +160,8 @@ static bool cmTarFilesFrom(std::string const& file,
   return true;
 }
 
-int cmcmd::HandleIWYU(const std::string& runCmd, const std::string&,
+static int HandleIWYU(const std::string& runCmd,
+                      const std::string& /* sourceFile */,
                       const std::vector<std::string>& orig_cmd)
 {
   // Construct the iwyu command line by taking what was given
@@ -187,7 +188,7 @@ int cmcmd::HandleIWYU(const std::string& runCmd, const std::string&,
   return 0;
 }
 
-int cmcmd::HandleTidy(const std::string& runCmd, const std::string& sourceFile,
+static int HandleTidy(const std::string& runCmd, const std::string& sourceFile,
                       const std::vector<std::string>& orig_cmd)
 {
   // Construct the clang-tidy command line by taking what was given
@@ -218,7 +219,8 @@ int cmcmd::HandleTidy(const std::string& runCmd, const std::string& sourceFile,
   return ret;
 }
 
-int cmcmd::HandleLWYU(const std::string& runCmd, const std::string&,
+static int HandleLWYU(const std::string& runCmd,
+                      const std::string& /* sourceFile */,
                       const std::vector<std::string>&)
 {
   // Construct the ldd -r -u (link what you use lwyu) command line
@@ -250,7 +252,7 @@ int cmcmd::HandleLWYU(const std::string& runCmd, const std::string&,
   return 0;
 }
 
-int cmcmd::HandleCppLint(const std::string& runCmd,
+static int HandleCppLint(const std::string& runCmd,
                          const std::string& sourceFile,
                          const std::vector<std::string>&)
 {
@@ -274,7 +276,7 @@ int cmcmd::HandleCppLint(const std::string& runCmd,
   return ret;
 }
 
-int cmcmd::HandleCppCheck(const std::string& runCmd,
+static int HandleCppCheck(const std::string& runCmd,
                           const std::string& sourceFile,
                           const std::vector<std::string>& orig_cmd)
 {
@@ -340,12 +342,11 @@ int cmcmd::HandleCoCompileCommands(std::vector<std::string>& args)
   // create a map from option to handler function for option
   // if the option does not call the original command then it will need
   // to set runOriginalCmd to false later in this function
-  coCompileTypes["--iwyu="] = std::bind(&cmcmd::HandleIWYU, a1, a2, a3);
-  coCompileTypes["--tidy="] = std::bind(&cmcmd::HandleTidy, a1, a2, a3);
-  coCompileTypes["--lwyu="] = std::bind(&cmcmd::HandleLWYU, a1, a2, a3);
-  coCompileTypes["--cpplint="] = std::bind(&cmcmd::HandleCppLint, a1, a2, a3);
-  coCompileTypes["--cppcheck="] =
-    std::bind(&cmcmd::HandleCppCheck, a1, a2, a3);
+  coCompileTypes["--iwyu="] = std::bind(&HandleIWYU, a1, a2, a3);
+  coCompileTypes["--tidy="] = std::bind(&HandleTidy, a1, a2, a3);
+  coCompileTypes["--lwyu="] = std::bind(&HandleLWYU, a1, a2, a3);
+  coCompileTypes["--cpplint="] = std::bind(&HandleCppLint, a1, a2, a3);
+  coCompileTypes["--cppcheck="] = std::bind(&HandleCppCheck, a1, a2, a3);
   // copy the command options to a vector of strings
   std::vector<std::string> commandOptions;
   commandOptions.reserve(coCompileTypes.size());
diff --git a/Source/cmcmd.h b/Source/cmcmd.h
index 090ca08..d1e03d0 100644
--- a/Source/cmcmd.h
+++ b/Source/cmcmd.h
@@ -18,24 +18,6 @@ public:
    */
   static int ExecuteCMakeCommand(std::vector<std::string>&);
 
-  // define co-compile command handlers they must be public
-  // because they are used in a std::function map
-  static int HandleIWYU(const std::string& runCmd,
-                        const std::string& sourceFile,
-                        const std::vector<std::string>& orig_cmd);
-  static int HandleTidy(const std::string& runCmd,
-                        const std::string& sourceFile,
-                        const std::vector<std::string>& orig_cmd);
-  static int HandleLWYU(const std::string& runCmd,
-                        const std::string& sourceFile,
-                        const std::vector<std::string>& orig_cmd);
-  static int HandleCppLint(const std::string& runCmd,
-                           const std::string& sourceFile,
-                           const std::vector<std::string>& orig_cmd);
-  static int HandleCppCheck(const std::string& runCmd,
-                            const std::string& sourceFile,
-                            const std::vector<std::string>& orig_cmd);
-
 protected:
   static int HandleCoCompileCommands(std::vector<std::string>& args);
   static int HashSumFile(std::vector<std::string>& args,

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=1c075ffd60ba9354f8aaf314f0938aeb4247adc8
commit 1c075ffd60ba9354f8aaf314f0938aeb4247adc8
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Fri Oct 27 08:21:22 2017 -0400
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Fri Oct 27 08:36:28 2017 -0400

    cmcmd: Rename loop iteration variable for clarity

diff --git a/Source/cmcmd.cxx b/Source/cmcmd.cxx
index ed507fd..3ca0513 100644
--- a/Source/cmcmd.cxx
+++ b/Source/cmcmd.cxx
@@ -358,8 +358,8 @@ int cmcmd::HandleCoCompileCommands(std::vector<std::string>& args)
   std::string commandFound; // the command that was in the args list
   std::vector<std::string> orig_cmd;
   bool doing_options = true;
-  for (std::string::size_type cc = 2; cc < args.size(); cc++) {
-    std::string const& arg = args[cc];
+  for (std::string::size_type i = 2; i < args.size(); ++i) {
+    std::string const& arg = args[i];
     // if the arg is -- then the rest of the args after
     // go into orig_cmd
     if (arg == "--") {

-----------------------------------------------------------------------

Summary of changes:
 Source/cmQtAutoGeneratorInitializer.cxx            |  100 +++++++++++---
 Source/cmcmd.cxx                                   |  139 +++++++++++---------
 Source/cmcmd.h                                     |   18 ---
 Tests/QtAutogen/CMakeLists.txt                     |    4 +
 Tests/QtAutogen/staticLibraryCycle/CMakeLists.txt  |   17 +++
 Tests/QtAutogen/staticLibraryCycle/a.cpp           |    7 +
 Tests/QtAutogen/staticLibraryCycle/a.h             |   13 ++
 Tests/QtAutogen/staticLibraryCycle/b.cpp           |    7 +
 Tests/QtAutogen/staticLibraryCycle/b.h             |   13 ++
 Tests/QtAutogen/staticLibraryCycle/c.cpp           |    7 +
 Tests/QtAutogen/staticLibraryCycle/c.h             |   13 ++
 Tests/QtAutogen/staticLibraryCycle/main.cpp        |    8 ++
 Tests/RunCMake/CMakeLists.txt                      |    6 +
 Tests/RunCMake/CPack/tests/DIST/VerifyResult.cmake |    5 +
 .../E___run_co_compile-no-iwyu-stderr.txt          |   11 +-
 Tests/RunCMake/MultiLint/C-Build-stdout.txt        |    8 ++
 Tests/RunCMake/MultiLint/C-launch-Build-stdout.txt |    8 ++
 .../{ClangTidy => MultiLint}/C-launch.cmake        |    0
 Tests/RunCMake/MultiLint/C.cmake                   |    6 +
 Tests/RunCMake/MultiLint/CMakeLists.txt            |    3 +
 Tests/RunCMake/MultiLint/CXX-Build-stdout.txt      |    8 ++
 .../RunCMake/MultiLint/CXX-launch-Build-stdout.txt |    8 ++
 .../{ClangTidy => MultiLint}/CXX-launch.cmake      |    0
 Tests/RunCMake/MultiLint/CXX.cmake                 |    6 +
 Tests/RunCMake/MultiLint/RunCMakeTest.cmake        |   27 ++++
 .../MultiLint}/main.c                              |    0
 Tests/RunCMake/{ClangTidy => MultiLint}/main.cxx   |    0
 27 files changed, 338 insertions(+), 104 deletions(-)
 create mode 100644 Tests/QtAutogen/staticLibraryCycle/CMakeLists.txt
 create mode 100644 Tests/QtAutogen/staticLibraryCycle/a.cpp
 create mode 100644 Tests/QtAutogen/staticLibraryCycle/a.h
 create mode 100644 Tests/QtAutogen/staticLibraryCycle/b.cpp
 create mode 100644 Tests/QtAutogen/staticLibraryCycle/b.h
 create mode 100644 Tests/QtAutogen/staticLibraryCycle/c.cpp
 create mode 100644 Tests/QtAutogen/staticLibraryCycle/c.h
 create mode 100644 Tests/QtAutogen/staticLibraryCycle/main.cpp
 create mode 100644 Tests/RunCMake/MultiLint/C-Build-stdout.txt
 create mode 100644 Tests/RunCMake/MultiLint/C-launch-Build-stdout.txt
 copy Tests/RunCMake/{ClangTidy => MultiLint}/C-launch.cmake (100%)
 create mode 100644 Tests/RunCMake/MultiLint/C.cmake
 create mode 100644 Tests/RunCMake/MultiLint/CMakeLists.txt
 create mode 100644 Tests/RunCMake/MultiLint/CXX-Build-stdout.txt
 create mode 100644 Tests/RunCMake/MultiLint/CXX-launch-Build-stdout.txt
 copy Tests/RunCMake/{ClangTidy => MultiLint}/CXX-launch.cmake (100%)
 create mode 100644 Tests/RunCMake/MultiLint/CXX.cmake
 create mode 100644 Tests/RunCMake/MultiLint/RunCMakeTest.cmake
 copy Tests/{CMakeOnly/LinkInterfaceLoop => RunCMake/MultiLint}/main.c (100%)
 copy Tests/RunCMake/{ClangTidy => MultiLint}/main.cxx (100%)


hooks/post-receive
-- 
CMake


More information about the Cmake-commits mailing list