Sfoglia il codice sorgente

instrumentation: Exclude (pre|post)Build hooks with MSYS Makefiles

The implementation of (pre|post)Build hooks rely on a direct parent-
child relationship between the build system process and `ctest
--start-instrumentation`. MSYS2's `make.exe` uses the msys-runtime POSIX
compatibility layer which disrupts this relationship.
Tyler Yankee 3 mesi fa
parent
commit
f7756853c5

+ 3 - 0
Help/manual/cmake-instrumentation.7.rst

@@ -196,6 +196,9 @@ key is required, but all other fields are optional.
   * ``postInstall``
   * ``postInstall``
   * ``postTest``
   * ``postTest``
 
 
+  ``preBuild`` and ``postBuild`` are not supported with the
+  :generator:`MSYS Makefiles` generator.
+
 ``options``
 ``options``
   A list of strings used to enable certain optional behavior, including the
   A list of strings used to enable certain optional behavior, including the
   collection of certain additional data. Elements in this list should be one of
   collection of certain additional data. Elements in this list should be one of

+ 13 - 5
Source/cmLocalUnixMakefileGenerator3.cxx

@@ -691,7 +691,9 @@ void cmLocalUnixMakefileGenerator3::WriteMakeVariables(
 #ifndef CMAKE_BOOTSTRAP
 #ifndef CMAKE_BOOTSTRAP
   if (this->GetCMakeInstance()
   if (this->GetCMakeInstance()
         ->GetInstrumentation()
         ->GetInstrumentation()
-        ->HasPreOrPostBuildHook()) {
+        ->HasPreOrPostBuildHook() &&
+      // FIXME(#27079): This does not work for MSYS Makefiles.
+      this->GlobalGenerator->GetName() != "MSYS Makefiles") {
     std::string ctestShellCommand =
     std::string ctestShellCommand =
       getShellCommand(cmSystemTools::GetCTestCommand());
       getShellCommand(cmSystemTools::GetCTestCommand());
     makefileStream << "# The CTest executable.\n"
     makefileStream << "# The CTest executable.\n"
@@ -850,8 +852,11 @@ void cmLocalUnixMakefileGenerator3::WriteSpecialTargetsBottom(
     std::vector<std::string> no_depends;
     std::vector<std::string> no_depends;
     commands.push_back(std::move(runRule));
     commands.push_back(std::move(runRule));
 #ifndef CMAKE_BOOTSTRAP
 #ifndef CMAKE_BOOTSTRAP
-    addInstrumentationCommand(this->GetCMakeInstance()->GetInstrumentation(),
-                              commands);
+    // FIXME(#27079): This does not work for MSYS Makefiles.
+    if (this->GlobalGenerator->GetName() != "MSYS Makefiles") {
+      addInstrumentationCommand(this->GetCMakeInstance()->GetInstrumentation(),
+                                commands);
+    }
 #endif
 #endif
     if (!this->IsRootMakefile()) {
     if (!this->IsRootMakefile()) {
       this->CreateCDCommand(commands, this->GetBinaryDirectory(),
       this->CreateCDCommand(commands, this->GetBinaryDirectory(),
@@ -1856,8 +1861,11 @@ void cmLocalUnixMakefileGenerator3::WriteLocalAllRules(
         " 1");
         " 1");
       commands.push_back(std::move(runRule));
       commands.push_back(std::move(runRule));
 #ifndef CMAKE_BOOTSTRAP
 #ifndef CMAKE_BOOTSTRAP
-      addInstrumentationCommand(this->GetCMakeInstance()->GetInstrumentation(),
-                                commands);
+      // FIXME(#27079): This does not work for MSYS Makefiles.
+      if (this->GlobalGenerator->GetName() != "MSYS Makefiles") {
+        addInstrumentationCommand(
+          this->GetCMakeInstance()->GetInstrumentation(), commands);
+      }
 #endif
 #endif
     }
     }
     this->CreateCDCommand(commands, this->GetBinaryDirectory(),
     this->CreateCDCommand(commands, this->GetBinaryDirectory(),

+ 4 - 1
Tests/RunCMake/Instrumentation/RunCMakeTest.cmake

@@ -129,7 +129,10 @@ instrument(cmake-command-resets-generated NO_WARN
   CHECK_SCRIPT check-data-dir.cmake
   CHECK_SCRIPT check-data-dir.cmake
 )
 )
 
 
-if(RunCMake_GENERATOR STREQUAL "NMake Makefiles")
+if(RunCMake_GENERATOR STREQUAL "MSYS Makefiles")
+  # FIXME(#27079): This does not work for MSYS Makefiles.
+  set(Skip_BUILD_MAKE_PROGRAM_Case 1)
+elseif(RunCMake_GENERATOR STREQUAL "NMake Makefiles")
  execute_process(
  execute_process(
    COMMAND "${RunCMake_MAKE_PROGRAM}" -?
    COMMAND "${RunCMake_MAKE_PROGRAM}" -?
    OUTPUT_VARIABLE nmake_out
    OUTPUT_VARIABLE nmake_out