From 7ca6bdf0355157da9f85f6bbf039a632ffdf66b7 Mon Sep 17 00:00:00 2001 From: Brad King 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 +#include +#include +#include + +#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 -#include -#include -#include - -#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