Przeglądaj źródła

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 miesięcy temu
rodzic
commit
f7756853c5

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

@@ -196,6 +196,9 @@ key is required, but all other fields are optional.
   * ``postInstall``
   * ``postTest``
 
+  ``preBuild`` and ``postBuild`` are not supported with the
+  :generator:`MSYS Makefiles` generator.
+
 ``options``
   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

+ 13 - 5
Source/cmLocalUnixMakefileGenerator3.cxx

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