فهرست منبع

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 سال پیش
والد
کامیت
3bcbca96ab
2فایلهای تغییر یافته به همراه15 افزوده شده و 14 حذف شده
  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()