Răsfoiți Sursa

ENH: Improved implementation of MSVC debug hook to only add the hook if DART_TEST_FROM_DART is set in the environment. This is better than always adding the hook and testing the environment from the callback.

Brad King 23 ani în urmă
părinte
comite
3bcbca96ab
2 a modificat fișierele cu 15 adăugiri și 14 ștergeri
  1. 9 8
      Source/cmCreateTestSourceList.cxx
  2. 6 6
      Source/cmSystemTools.cxx

+ 9 - 8
Source/cmCreateTestSourceList.cxx

@@ -96,7 +96,8 @@ bool cmCreateTestSourceList::InitialPass(std::vector<std::string> const& argsIn)
     "#include <ctype.h>\n"
     "#include <stdio.h>\n"
     "#include <string.h>\n"
-    "#include <stdlib.h>\n";
+    "#include <stdlib.h>\n"
+    "\n";
   fout <<
     "#if defined(_MSC_VER) && defined(_DEBUG)\n"
     "/* MSVC debug hook to prevent dialogs when running from DART.  */\n"
@@ -104,11 +105,8 @@ bool cmCreateTestSourceList::InitialPass(std::vector<std::string> const& argsIn)
     "static int TestDriverDebugReport(int type, char* message, int* retVal)\n"
     "{\n"
     "  (void)type; (void)retVal;\n"
-    "  if(getenv(\"DART_TEST_FROM_DART\"))\n"
-    "    {\n"
-    "    fprintf(stderr, message);\n"
-    "    exit(1);\n"
-    "    }\n"
+    "  fprintf(stderr, message);\n"
+    "  exit(1);\n"
     "  return 0;\n"
     "}\n"
     "#endif\n";
@@ -221,8 +219,11 @@ bool cmCreateTestSourceList::InitialPass(std::vector<std::string> const& argsIn)
     "  char *arg, *test_name;\n"
     "  \n"
     "#if defined(_MSC_VER) && defined(_DEBUG)\n"
-    "  /* Put in hook for debug library.  */\n"
-    "  _CrtSetReportHook(TestDriverDebugReport);\n"
+    "  /* If running from DART, put in debug hook.  */\n"
+    "  if(getenv(\"DART_TEST_FROM_DART\"))\n"
+    "    {\n"
+    "    _CrtSetReportHook(TestDriverDebugReport);\n"
+    "    }\n"
     "#endif\n"
     "  \n"
     "  NumTests = " << numTests << ";\n"

+ 6 - 6
Source/cmSystemTools.cxx

@@ -2434,16 +2434,16 @@ void cmSystemTools::SplitProgramFromArgs(const char* path,
 # include <stdlib.h>
 static int cmSystemToolsDebugReport(int, char* message, int*)
 {
-  if(getenv("DART_TEST_FROM_DART"))
-    {
-    fprintf(stderr, message);
-    exit(1);
-    }
+  fprintf(stderr, message);
+  exit(1);
   return 0;
 }
 void cmSystemTools::EnableMSVCDebugHook()
 {
-  _CrtSetReportHook(cmSystemToolsDebugReport);
+  if(getenv("DART_TEST_FROM_DART"))
+    {
+    _CrtSetReportHook(cmSystemToolsDebugReport);
+    }
 }
 #else
 void cmSystemTools::EnableMSVCDebugHook()