From 7ca6bdf0355157da9f85f6bbf039a632ffdf66b7 Mon Sep 17 00:00:00 2001
From: Brad King <brad.king@kitware.com>
Date: Tue, 16 Dec 2014 13:59:22 -0500
Subject: Tests: Move CTestTestMemcheck tools into Tests/CMakeLib

The dummy memcheck tools we build for the RunCMake.CTestMemcheck tests
require CMakeLib, so put them in a Tests/CMakeLib/PseudoMemcheck
directory.
---
 Tests/CMakeLib/CMakeLists.txt                      |  2 +
 Tests/CMakeLib/PseudoMemcheck/CMakeLists.txt       | 41 +++++++++++++++
 Tests/CMakeLib/PseudoMemcheck/NoLog/CMakeLists.txt | 22 ++++++++
 Tests/CMakeLib/PseudoMemcheck/memtester.cxx.in     | 60 ++++++++++++++++++++++
 Tests/CMakeLists.txt                               |  4 --
 Tests/CTestTestMemcheck/CMakeLists.txt             | 41 ---------------
 .../NoLogDummyChecker/CMakeLists.txt               | 22 --------
 Tests/CTestTestMemcheck/memtester.cxx.in           | 60 ----------------------
 8 files changed, 125 insertions(+), 127 deletions(-)
 create mode 100644 Tests/CMakeLib/PseudoMemcheck/CMakeLists.txt
 create mode 100644 Tests/CMakeLib/PseudoMemcheck/NoLog/CMakeLists.txt
 create mode 100644 Tests/CMakeLib/PseudoMemcheck/memtester.cxx.in
 delete mode 100644 Tests/CTestTestMemcheck/CMakeLists.txt
 delete mode 100644 Tests/CTestTestMemcheck/NoLogDummyChecker/CMakeLists.txt
 delete mode 100644 Tests/CTestTestMemcheck/memtester.cxx.in

diff --git a/Tests/CMakeLib/CMakeLists.txt b/Tests/CMakeLib/CMakeLists.txt
index 8c99f64..7ef3c03 100644
--- a/Tests/CMakeLib/CMakeLists.txt
+++ b/Tests/CMakeLib/CMakeLists.txt
@@ -48,3 +48,5 @@ if(TEST_CompileCommandOutput)
   add_executable(runcompilecommands run_compile_commands.cxx)
   target_link_libraries(runcompilecommands CMakeLib)
 endif()
+
+add_subdirectory(PseudoMemcheck)
diff --git a/Tests/CMakeLib/PseudoMemcheck/CMakeLists.txt b/Tests/CMakeLib/PseudoMemcheck/CMakeLists.txt
new file mode 100644
index 0000000..c53befc
--- /dev/null
+++ b/Tests/CMakeLib/PseudoMemcheck/CMakeLists.txt
@@ -0,0 +1,41 @@
+foreach (_retval 0 1)
+  configure_file("${CMAKE_CURRENT_SOURCE_DIR}/memtester.cxx.in" "${CMAKE_CURRENT_BINARY_DIR}/ret${_retval}.cxx" @ONLY)
+endforeach ()
+
+include_directories(${CMake_SOURCE_DIR}/Source ${CMake_BINARY_DIR}/Source)
+
+# create binaries that we will use as a pseudo memory checker
+add_executable(pseudo_valgrind "${CMAKE_CURRENT_BINARY_DIR}/ret0.cxx")
+set_target_properties(pseudo_valgrind PROPERTIES OUTPUT_NAME valgrind)
+target_link_libraries(pseudo_valgrind CMakeLib)
+
+add_executable(pseudo_purify "${CMAKE_CURRENT_BINARY_DIR}/ret0.cxx")
+set_target_properties(pseudo_purify PROPERTIES OUTPUT_NAME purify)
+target_link_libraries(pseudo_purify CMakeLib)
+add_executable(pseudo_BC "${CMAKE_CURRENT_BINARY_DIR}/ret0.cxx")
+set_target_properties(pseudo_BC PROPERTIES OUTPUT_NAME BC)
+target_link_libraries(pseudo_BC CMakeLib)
+
+# binary to be used as pre- and post-memcheck command that fails
+add_executable(memcheck_fail "${CMAKE_CURRENT_BINARY_DIR}/ret1.cxx")
+target_link_libraries(memcheck_fail CMakeLib)
+
+# Binaries that are used as memchecker that do not write the expected
+# output file. Need to be in their own subdirectory as they have the
+# same filenames.
+add_subdirectory(NoLog)
+
+# Xcode 2.x forgets to create the output directory before linking
+# the individual architectures.
+if(CMAKE_OSX_ARCHITECTURES AND XCODE AND NOT "${XCODE_VERSION}" MATCHES "^[^12]")
+  foreach(t
+      memcheck_fail
+      pseudo_BC
+      pseudo_purify
+      pseudo_valgrind
+      )
+    add_custom_command(TARGET ${t}
+      PRE_BUILD COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_CFG_INTDIR}"
+      )
+  endforeach()
+endif()
diff --git a/Tests/CMakeLib/PseudoMemcheck/NoLog/CMakeLists.txt b/Tests/CMakeLib/PseudoMemcheck/NoLog/CMakeLists.txt
new file mode 100644
index 0000000..3a45bfe
--- /dev/null
+++ b/Tests/CMakeLib/PseudoMemcheck/NoLog/CMakeLists.txt
@@ -0,0 +1,22 @@
+# A dummy checker implementation that does not write the requested output file
+# so it triggers an error for every checker.
+
+file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/ret0.c.in" "int main(){return 0;}\n")
+
+configure_file(
+  "${CMAKE_CURRENT_BINARY_DIR}/ret0.c.in"
+  "${CMAKE_CURRENT_BINARY_DIR}/ret0.c"
+  )
+
+foreach(_pseudo IN ITEMS valgrind purify BC)
+  add_executable(pseudonl_${_pseudo} "${CMAKE_CURRENT_BINARY_DIR}/ret0.c")
+  set_target_properties(pseudonl_${_pseudo} PROPERTIES OUTPUT_NAME ${_pseudo})
+
+  # Xcode 2.x forgets to create the output directory before linking
+  # the individual architectures.
+  if(CMAKE_OSX_ARCHITECTURES AND XCODE AND NOT "${XCODE_VERSION}" MATCHES "^[^12]")
+    add_custom_command(TARGET pseudonl_${_pseudo}
+                       PRE_BUILD COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_CFG_INTDIR}"
+    )
+  endif()
+endforeach()
diff --git a/Tests/CMakeLib/PseudoMemcheck/memtester.cxx.in b/Tests/CMakeLib/PseudoMemcheck/memtester.cxx.in
new file mode 100644
index 0000000..43c0ba7
--- /dev/null
+++ b/Tests/CMakeLib/PseudoMemcheck/memtester.cxx.in
@@ -0,0 +1,60 @@
+#include <cmSystemTools.h>
+#include <cmsys/Encoding.hxx>
+#include <string>
+#include <locale.h>
+
+#define RETVAL @_retval@
+
+int
+main(int ac, char **av)
+{
+  setlocale(LC_CTYPE, "");
+  cmsys::Encoding::CommandLineArguments args =
+    cmsys::Encoding::CommandLineArguments::Main(ac, av);
+  int argc = args.argc();
+  const char* const* argv = args.argv();
+
+  std::string exename = argv[0];
+  std::string logarg;
+  bool nextarg = false;
+
+  if (exename.find("valgrind") != exename.npos)
+    logarg = "--log-file=";
+  else if (exename.find("purify") != exename.npos)
+#ifdef _WIN32
+    logarg = "/SAVETEXTDATA=";
+#else
+    logarg = "-log-file=";
+#endif
+  else if (exename.find("BC") != exename.npos)
+    {
+    nextarg = true;
+    logarg = "/X";
+    }
+
+  if (!logarg.empty()) {
+    std::string logfile;
+    for (int i = 1; i < argc; i++) {
+      std::string arg = argv[i];
+      if (arg.find(logarg) == 0)
+        {
+        if (nextarg)
+          {
+          if (i == argc - 1)
+            return 1; // invalid command line
+          logfile = argv[i + 1];
+          }
+        else
+          {
+          logfile = arg.substr(logarg.length());
+          }
+        // keep searching, it may be overridden later to provoke an error
+        }
+      }
+
+    if (!logfile.empty())
+      cmSystemTools::Touch(logfile.c_str(), true);
+  }
+
+  return RETVAL;
+}
diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt
index 33c18ce..250e966 100644
--- a/Tests/CMakeLists.txt
+++ b/Tests/CMakeLists.txt
@@ -110,10 +110,6 @@ if(BUILD_TESTING)
 
   add_subdirectory(FindPackageModeMakefileTest)
 
-  if(NOT CMake_TEST_EXTERNAL_CMAKE)
-    add_subdirectory(CTestTestMemcheck)
-  endif()
-
   # Collect a list of all test build directories.
   set(TEST_BUILD_DIRS)
 
diff --git a/Tests/CTestTestMemcheck/CMakeLists.txt b/Tests/CTestTestMemcheck/CMakeLists.txt
deleted file mode 100644
index 5d6319a..0000000
--- a/Tests/CTestTestMemcheck/CMakeLists.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-foreach (_retval 0 1)
-  configure_file("${CMAKE_CURRENT_SOURCE_DIR}/memtester.cxx.in" "${CMAKE_CURRENT_BINARY_DIR}/ret${_retval}.cxx" @ONLY)
-endforeach ()
-
-include_directories(${CMake_SOURCE_DIR}/Source ${CMake_BINARY_DIR}/Source)
-
-# create binaries that we will use as a pseudo memory checker
-add_executable(pseudo_valgrind "${CMAKE_CURRENT_BINARY_DIR}/ret0.cxx")
-set_target_properties(pseudo_valgrind PROPERTIES OUTPUT_NAME valgrind)
-target_link_libraries(pseudo_valgrind CMakeLib)
-
-add_executable(pseudo_purify "${CMAKE_CURRENT_BINARY_DIR}/ret0.cxx")
-set_target_properties(pseudo_purify PROPERTIES OUTPUT_NAME purify)
-target_link_libraries(pseudo_purify CMakeLib)
-add_executable(pseudo_BC "${CMAKE_CURRENT_BINARY_DIR}/ret0.cxx")
-set_target_properties(pseudo_BC PROPERTIES OUTPUT_NAME BC)
-target_link_libraries(pseudo_BC CMakeLib)
-
-# binary to be used as pre- and post-memcheck command that fails
-add_executable(memcheck_fail "${CMAKE_CURRENT_BINARY_DIR}/ret1.cxx")
-target_link_libraries(memcheck_fail CMakeLib)
-
-# Binaries that are used as memchecker that do not write the expected
-# output file. Need to be in their own subdirectory as they have the
-# same filenames.
-add_subdirectory(NoLogDummyChecker)
-
-# Xcode 2.x forgets to create the output directory before linking
-# the individual architectures.
-if(CMAKE_OSX_ARCHITECTURES AND XCODE AND NOT "${XCODE_VERSION}" MATCHES "^[^12]")
-  foreach(t
-      memcheck_fail
-      pseudo_BC
-      pseudo_purify
-      pseudo_valgrind
-      )
-    add_custom_command(TARGET ${t}
-      PRE_BUILD COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_CFG_INTDIR}"
-      )
-  endforeach()
-endif()
diff --git a/Tests/CTestTestMemcheck/NoLogDummyChecker/CMakeLists.txt b/Tests/CTestTestMemcheck/NoLogDummyChecker/CMakeLists.txt
deleted file mode 100644
index 3a45bfe..0000000
--- a/Tests/CTestTestMemcheck/NoLogDummyChecker/CMakeLists.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-# A dummy checker implementation that does not write the requested output file
-# so it triggers an error for every checker.
-
-file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/ret0.c.in" "int main(){return 0;}\n")
-
-configure_file(
-  "${CMAKE_CURRENT_BINARY_DIR}/ret0.c.in"
-  "${CMAKE_CURRENT_BINARY_DIR}/ret0.c"
-  )
-
-foreach(_pseudo IN ITEMS valgrind purify BC)
-  add_executable(pseudonl_${_pseudo} "${CMAKE_CURRENT_BINARY_DIR}/ret0.c")
-  set_target_properties(pseudonl_${_pseudo} PROPERTIES OUTPUT_NAME ${_pseudo})
-
-  # Xcode 2.x forgets to create the output directory before linking
-  # the individual architectures.
-  if(CMAKE_OSX_ARCHITECTURES AND XCODE AND NOT "${XCODE_VERSION}" MATCHES "^[^12]")
-    add_custom_command(TARGET pseudonl_${_pseudo}
-                       PRE_BUILD COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_CFG_INTDIR}"
-    )
-  endif()
-endforeach()
diff --git a/Tests/CTestTestMemcheck/memtester.cxx.in b/Tests/CTestTestMemcheck/memtester.cxx.in
deleted file mode 100644
index 43c0ba7..0000000
--- a/Tests/CTestTestMemcheck/memtester.cxx.in
+++ /dev/null
@@ -1,60 +0,0 @@
-#include <cmSystemTools.h>
-#include <cmsys/Encoding.hxx>
-#include <string>
-#include <locale.h>
-
-#define RETVAL @_retval@
-
-int
-main(int ac, char **av)
-{
-  setlocale(LC_CTYPE, "");
-  cmsys::Encoding::CommandLineArguments args =
-    cmsys::Encoding::CommandLineArguments::Main(ac, av);
-  int argc = args.argc();
-  const char* const* argv = args.argv();
-
-  std::string exename = argv[0];
-  std::string logarg;
-  bool nextarg = false;
-
-  if (exename.find("valgrind") != exename.npos)
-    logarg = "--log-file=";
-  else if (exename.find("purify") != exename.npos)
-#ifdef _WIN32
-    logarg = "/SAVETEXTDATA=";
-#else
-    logarg = "-log-file=";
-#endif
-  else if (exename.find("BC") != exename.npos)
-    {
-    nextarg = true;
-    logarg = "/X";
-    }
-
-  if (!logarg.empty()) {
-    std::string logfile;
-    for (int i = 1; i < argc; i++) {
-      std::string arg = argv[i];
-      if (arg.find(logarg) == 0)
-        {
-        if (nextarg)
-          {
-          if (i == argc - 1)
-            return 1; // invalid command line
-          logfile = argv[i + 1];
-          }
-        else
-          {
-          logfile = arg.substr(logarg.length());
-          }
-        // keep searching, it may be overridden later to provoke an error
-        }
-      }
-
-    if (!logfile.empty())
-      cmSystemTools::Touch(logfile.c_str(), true);
-  }
-
-  return RETVAL;
-}
-- 
cgit v0.12