From 95bc8aa6c440437ed62c692c302f6a95f57fc361 Mon Sep 17 00:00:00 2001 From: Rolf Eike Beer Date: Sun, 30 Sep 2012 20:25:20 +0200 Subject: CTest: fix usage of memory checker with spaces in path The filename was escaped in cmCTestMemCheckHandler::InitializeMemoryChecking() and again before it was written to output in cmCTestRunTest::ComputeArguments(). Once someone uses e.g. a valgrind path with spaces this leads to double escaping making the memory checker fail completely because of the invalid path. --- Source/CTest/cmCTestMemCheckHandler.cxx | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/Source/CTest/cmCTestMemCheckHandler.cxx b/Source/CTest/cmCTestMemCheckHandler.cxx index a2a16d3..f446c94 100644 --- a/Source/CTest/cmCTestMemCheckHandler.cxx +++ b/Source/CTest/cmCTestMemCheckHandler.cxx @@ -247,7 +247,8 @@ void cmCTestMemCheckHandler::GenerateTestCommand( { std::vector::size_type pp; std::string memcheckcommand = ""; - memcheckcommand = this->MemoryTester; + memcheckcommand + = cmSystemTools::ConvertToOutputPath(this->MemoryTester.c_str()); for ( pp = 0; pp < this->MemoryTesterOptions.size(); pp ++ ) { args.push_back(this->MemoryTesterOptions[pp]); @@ -410,29 +411,25 @@ bool cmCTestMemCheckHandler::InitializeMemoryChecking() "MemoryCheckCommand").c_str()) ) { this->MemoryTester - = cmSystemTools::ConvertToOutputPath(this->CTest->GetCTestConfiguration( - "MemoryCheckCommand").c_str()); + = this->CTest->GetCTestConfiguration("MemoryCheckCommand").c_str(); } else if ( cmSystemTools::FileExists(this->CTest->GetCTestConfiguration( "PurifyCommand").c_str()) ) { this->MemoryTester - = cmSystemTools::ConvertToOutputPath(this->CTest->GetCTestConfiguration( - "PurifyCommand").c_str()); + = this->CTest->GetCTestConfiguration("PurifyCommand").c_str(); } else if ( cmSystemTools::FileExists(this->CTest->GetCTestConfiguration( "ValgrindCommand").c_str()) ) { this->MemoryTester - = cmSystemTools::ConvertToOutputPath(this->CTest->GetCTestConfiguration( - "ValgrindCommand").c_str()); + = this->CTest->GetCTestConfiguration("ValgrindCommand").c_str(); } else if ( cmSystemTools::FileExists(this->CTest->GetCTestConfiguration( "BoundsCheckerCommand").c_str()) ) { this->MemoryTester - = cmSystemTools::ConvertToOutputPath(this->CTest->GetCTestConfiguration( - "BoundsCheckerCommand").c_str()); + = this->CTest->GetCTestConfiguration("BoundsCheckerCommand").c_str(); } else { -- cgit v0.12 From 6187876dea89618044e200808bcae75a18bd4043 Mon Sep 17 00:00:00 2001 From: Rolf Eike Beer Date: Sun, 30 Sep 2012 22:58:56 +0200 Subject: CTest: fix pre and post test commands with spaces If the pre or post memcheck or test commands have spaces in the path these were never escaped, leading to broken commands. This was not covered in the test suite so it went unnoticed. --- Source/CTest/cmCTestTestHandler.cxx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Source/CTest/cmCTestTestHandler.cxx b/Source/CTest/cmCTestTestHandler.cxx index ead449e..b796b83 100644 --- a/Source/CTest/cmCTestTestHandler.cxx +++ b/Source/CTest/cmCTestTestHandler.cxx @@ -1304,9 +1304,10 @@ int cmCTestTestHandler::ExecuteCommands(std::vector& vec) for ( it = vec.begin(); it != vec.end(); ++it ) { int retVal = 0; - cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, "Run command: " << *it + std::string cmd = cmSystemTools::ConvertToOutputPath(it->c_str()); + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, "Run command: " << cmd << std::endl); - if ( !cmSystemTools::RunSingleCommand(it->c_str(), 0, &retVal, 0, + if ( !cmSystemTools::RunSingleCommand(cmd.c_str(), 0, &retVal, 0, cmSystemTools::OUTPUT_MERGE /*this->Verbose*/) || retVal != 0 ) { -- cgit v0.12 From fcae1dacead9d97782d49e74dc8fca2505b2e28e Mon Sep 17 00:00:00 2001 From: Rolf Eike Beer Date: Sun, 30 Sep 2012 18:21:18 +0200 Subject: CTest: add tests that simulate memcheck runs --- Tests/CMakeLists.txt | 2 + Tests/CTestTestMemcheck/CMakeLists.txt | 71 ++++++++++++++++++++++ Tests/CTestTestMemcheck/DummyBC/CMakeLists.txt | 5 ++ Tests/CTestTestMemcheck/DummyBC/CTestConfig.cmake | 7 +++ Tests/CTestTestMemcheck/DummyBC/test.cmake.in | 24 ++++++++ Tests/CTestTestMemcheck/DummyPurify/CMakeLists.txt | 5 ++ .../DummyPurify/CTestConfig.cmake | 7 +++ Tests/CTestTestMemcheck/DummyPurify/test.cmake.in | 24 ++++++++ .../CTestTestMemcheck/DummyValgrind/CMakeLists.txt | 5 ++ .../DummyValgrind/CTestConfig.cmake | 7 +++ .../CTestTestMemcheck/DummyValgrind/test.cmake.in | 24 ++++++++ .../DummyValgrindFailPost/CMakeLists.txt | 5 ++ .../DummyValgrindFailPost/CTestConfig.cmake | 7 +++ .../DummyValgrindFailPost/test.cmake.in | 26 ++++++++ .../DummyValgrindFailPre/CMakeLists.txt | 5 ++ .../DummyValgrindFailPre/CTestConfig.cmake | 7 +++ .../DummyValgrindFailPre/test.cmake.in | 26 ++++++++ .../DummyValgrindPrePost/CMakeLists.txt | 5 ++ .../DummyValgrindPrePost/CTestConfig.cmake | 7 +++ .../DummyValgrindPrePost/test.cmake.in | 27 ++++++++ Tests/CTestTestMemcheck/NotExist/CMakeLists.txt | 5 ++ Tests/CTestTestMemcheck/NotExist/CTestConfig.cmake | 7 +++ Tests/CTestTestMemcheck/NotExist/test.cmake.in | 18 ++++++ Tests/CTestTestMemcheck/Unknown/CMakeLists.txt | 5 ++ Tests/CTestTestMemcheck/Unknown/CTestConfig.cmake | 7 +++ Tests/CTestTestMemcheck/Unknown/test.cmake.in | 18 ++++++ 26 files changed, 356 insertions(+) create mode 100644 Tests/CTestTestMemcheck/CMakeLists.txt create mode 100644 Tests/CTestTestMemcheck/DummyBC/CMakeLists.txt create mode 100644 Tests/CTestTestMemcheck/DummyBC/CTestConfig.cmake create mode 100644 Tests/CTestTestMemcheck/DummyBC/test.cmake.in create mode 100644 Tests/CTestTestMemcheck/DummyPurify/CMakeLists.txt create mode 100644 Tests/CTestTestMemcheck/DummyPurify/CTestConfig.cmake create mode 100644 Tests/CTestTestMemcheck/DummyPurify/test.cmake.in create mode 100644 Tests/CTestTestMemcheck/DummyValgrind/CMakeLists.txt create mode 100644 Tests/CTestTestMemcheck/DummyValgrind/CTestConfig.cmake create mode 100644 Tests/CTestTestMemcheck/DummyValgrind/test.cmake.in create mode 100644 Tests/CTestTestMemcheck/DummyValgrindFailPost/CMakeLists.txt create mode 100644 Tests/CTestTestMemcheck/DummyValgrindFailPost/CTestConfig.cmake create mode 100644 Tests/CTestTestMemcheck/DummyValgrindFailPost/test.cmake.in create mode 100644 Tests/CTestTestMemcheck/DummyValgrindFailPre/CMakeLists.txt create mode 100644 Tests/CTestTestMemcheck/DummyValgrindFailPre/CTestConfig.cmake create mode 100644 Tests/CTestTestMemcheck/DummyValgrindFailPre/test.cmake.in create mode 100644 Tests/CTestTestMemcheck/DummyValgrindPrePost/CMakeLists.txt create mode 100644 Tests/CTestTestMemcheck/DummyValgrindPrePost/CTestConfig.cmake create mode 100644 Tests/CTestTestMemcheck/DummyValgrindPrePost/test.cmake.in create mode 100644 Tests/CTestTestMemcheck/NotExist/CMakeLists.txt create mode 100644 Tests/CTestTestMemcheck/NotExist/CTestConfig.cmake create mode 100644 Tests/CTestTestMemcheck/NotExist/test.cmake.in create mode 100644 Tests/CTestTestMemcheck/Unknown/CMakeLists.txt create mode 100644 Tests/CTestTestMemcheck/Unknown/CTestConfig.cmake create mode 100644 Tests/CTestTestMemcheck/Unknown/test.cmake.in diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt index e03b926..ac02376 100644 --- a/Tests/CMakeLists.txt +++ b/Tests/CMakeLists.txt @@ -57,6 +57,8 @@ if(BUILD_TESTING) add_subdirectory(FindPackageModeMakefileTest) + add_subdirectory(CTestTestMemcheck) + # Collect a list of all test build directories. set(TEST_BUILD_DIRS) diff --git a/Tests/CTestTestMemcheck/CMakeLists.txt b/Tests/CTestTestMemcheck/CMakeLists.txt new file mode 100644 index 0000000..544d0ed --- /dev/null +++ b/Tests/CTestTestMemcheck/CMakeLists.txt @@ -0,0 +1,71 @@ +foreach (_retval 0 1) + file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/ret${_retval}.c" "int main(){return ${_retval};}\n") +endforeach () + +# create binaries that we will use as a pseudo memory checker +add_executable(pseudo_valgrind "${CMAKE_CURRENT_BINARY_DIR}/ret0.c") +set_target_properties(pseudo_valgrind PROPERTIES OUTPUT_NAME valgrind) + +# 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 pseudo_valgrind + PRE_BUILD COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_CFG_INTDIR}" + ) +endif() + +add_executable(pseudo_purify "${CMAKE_CURRENT_BINARY_DIR}/ret0.c") +set_target_properties(pseudo_purify PROPERTIES OUTPUT_NAME purify) +add_executable(pseudo_BC "${CMAKE_CURRENT_BINARY_DIR}/ret0.c") +set_target_properties(pseudo_BC PROPERTIES OUTPUT_NAME BC) + +# binary to be used as pre- and post-memcheck command that fails +add_executable(memcheck_fail "${CMAKE_CURRENT_BINARY_DIR}/ret1.c") + +foreach (_test IN ITEMS Unknown NotExist DummyValgrind DummyValgrindPrePost + DummyValgrindFailPre DummyValgrindFailPost DummyPurify DummyBC) + configure_file( + "${CMAKE_CURRENT_SOURCE_DIR}/${_test}/test.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/${_test}/test.cmake" + @ONLY ESCAPE_QUOTES) + add_test(NAME CTestTestMemcheck${_test} + COMMAND ${CMAKE_CTEST_COMMAND} + -S "${CMAKE_CURRENT_BINARY_DIR}/${_test}/test.cmake" -V + --output-log "${CMAKE_CURRENT_BINARY_DIR}/${_test}/testOutput.log" + -D PSEUDO_BC=$ + -D PSEUDO_PURIFY=$ + -D PSEUDO_VALGRIND=$ + -D ERROR_COMMAND=$ + ) +endforeach () + +string(REPLACE "\\" "\\\\" CMAKE_COMMAND_ESCAPED "${CMAKE_COMMAND}") +string(REPLACE "(" "\\(" CMAKE_COMMAND_ESCAPED "${CMAKE_COMMAND_ESCAPED}") +string(REPLACE ")" "\\)" CMAKE_COMMAND_ESCAPED "${CMAKE_COMMAND_ESCAPED}") +string(REPLACE "+" "\\+" CMAKE_COMMAND_ESCAPED "${CMAKE_COMMAND_ESCAPED}") +set_tests_properties(CTestTestMemcheckUnknown PROPERTIES + PASS_REGULAR_EXPRESSION "Do not understand memory checker: ${CMAKE_COMMAND_ESCAPED}\n(.*\n)?Error in read script: ${CMAKE_CURRENT_BINARY_DIR}/Unknown/test.cmake\n") + +set_tests_properties(CTestTestMemcheckNotExist PROPERTIES + PASS_REGULAR_EXPRESSION "Memory checker \\(MemoryCheckCommand\\) not set, or cannot find the specified program.") + +set(NORMAL_CTEST_OUTPUT "\n-- Processing memory checking output: \nMemory checking results:\n(BullseyeCoverage[^\n]*\n)?") + +# It is a valid result if valgrind does not output any files (can e.g. happen +# if you have not compiled in debug mode), so these tests will not fail. +set_tests_properties(CTestTestMemcheckDummyValgrind CTestTestMemcheckDummyValgrindPrePost + PROPERTIES + PASS_REGULAR_EXPRESSION "${NORMAL_CTEST_OUTPUT}") + +foreach (_pp Pre Post) + string(TOLOWER ${_pp} _pp_lower) + set_tests_properties(CTestTestMemcheckDummyValgrindFail${_pp} + PROPERTIES + PASS_REGULAR_EXPRESSION "\nProblem running command: ${CMAKE_CURRENT_BINARY_DIR}[^\n]*fail[^\n]*\n(.*\n)?Problem executing ${_pp_lower}-memcheck command\\(s\\\).\n(.*\n)?Error in read script: ${CMAKE_CURRENT_BINARY_DIR}/DummyValgrindFail${_pp}/test.cmake\n") +endforeach () + +set_tests_properties(CTestTestMemcheckDummyPurify PROPERTIES + PASS_REGULAR_EXPRESSION "\nCannot find memory tester output file: ${CMAKE_CURRENT_BINARY_DIR}/DummyPurify/Testing/Temporary/MemoryChecker.log\n(.*\n)?Error in read script: ${CMAKE_CURRENT_BINARY_DIR}/DummyPurify/test.cmake\n") + +set_tests_properties(CTestTestMemcheckDummyBC PROPERTIES + PASS_REGULAR_EXPRESSION "\nCannot find memory tester output file: ${CMAKE_CURRENT_BINARY_DIR}/DummyBC/Testing/Temporary/MemoryChecker.log\n(.*\n)?Error parsing XML in stream at line 1: no element found\n(.*\n)?Error in read script: ${CMAKE_CURRENT_BINARY_DIR}/DummyBC/test.cmake\n") diff --git a/Tests/CTestTestMemcheck/DummyBC/CMakeLists.txt b/Tests/CTestTestMemcheck/DummyBC/CMakeLists.txt new file mode 100644 index 0000000..aa0e495 --- /dev/null +++ b/Tests/CTestTestMemcheck/DummyBC/CMakeLists.txt @@ -0,0 +1,5 @@ +cmake_minimum_required(VERSION 2.8.9) +project(CTestTestMemcheckDummyBC) +include(CTest) + +add_test (RunCMake "${CMAKE_COMMAND}") diff --git a/Tests/CTestTestMemcheck/DummyBC/CTestConfig.cmake b/Tests/CTestTestMemcheck/DummyBC/CTestConfig.cmake new file mode 100644 index 0000000..39cdd88 --- /dev/null +++ b/Tests/CTestTestMemcheck/DummyBC/CTestConfig.cmake @@ -0,0 +1,7 @@ +set (CTEST_PROJECT_NAME "CTestTestMemcheckDummyBC") +set (CTEST_NIGHTLY_START_TIME "21:00:00 EDT") +set (CTEST_DART_SERVER_VERSION "2") +set(CTEST_DROP_METHOD "http") +set(CTEST_DROP_SITE "www.cdash.org") +set(CTEST_DROP_LOCATION "/CDash/submit.php?project=PublicDashboard") +set(CTEST_DROP_SITE_CDASH TRUE) diff --git a/Tests/CTestTestMemcheck/DummyBC/test.cmake.in b/Tests/CTestTestMemcheck/DummyBC/test.cmake.in new file mode 100644 index 0000000..5005498 --- /dev/null +++ b/Tests/CTestTestMemcheck/DummyBC/test.cmake.in @@ -0,0 +1,24 @@ +cmake_minimum_required(VERSION 2.8.9) + +# Settings: +set(CTEST_DASHBOARD_ROOT "@CMAKE_CURRENT_BINARY_DIR@") +set(CTEST_SITE "@SITE@") +set(CTEST_BUILD_NAME "CTestTest-@BUILDNAME@-MemcheckDummyBC") + +set(CTEST_SOURCE_DIRECTORY "@CMAKE_CURRENT_SOURCE_DIR@/DummyBC") +set(CTEST_BINARY_DIRECTORY "@CMAKE_CURRENT_BINARY_DIR@/DummyBC") +set(CTEST_CVS_COMMAND "@CVSCOMMAND@") +set(CTEST_CMAKE_GENERATOR "@CMAKE_TEST_GENERATOR@") +set(CTEST_BUILD_CONFIGURATION "$ENV{CMAKE_CONFIG_TYPE}") +set(CTEST_COVERAGE_COMMAND "@COVERAGE_COMMAND@") +set(CTEST_NOTES_FILES "${CTEST_SCRIPT_DIRECTORY}/${CTEST_SCRIPT_NAME}") + +set(CTEST_MEMORYCHECK_COMMAND "${PSEUDO_BC}") + +#CTEST_EMPTY_BINARY_DIRECTORY(${CTEST_BINARY_DIRECTORY}) + +CTEST_START(Experimental) +CTEST_CONFIGURE(BUILD "${CTEST_BINARY_DIRECTORY}" RETURN_VALUE res) +#CTEST_BUILD(BUILD "${CTEST_BINARY_DIRECTORY}" RETURN_VALUE res) +CTEST_TEST(BUILD "${CTEST_BINARY_DIRECTORY}" RETURN_VALUE res) +CTEST_MEMCHECK(BUILD "${CTEST_BINARY_DIRECTORY}" RETURN_VALUE res) diff --git a/Tests/CTestTestMemcheck/DummyPurify/CMakeLists.txt b/Tests/CTestTestMemcheck/DummyPurify/CMakeLists.txt new file mode 100644 index 0000000..dfd93fd --- /dev/null +++ b/Tests/CTestTestMemcheck/DummyPurify/CMakeLists.txt @@ -0,0 +1,5 @@ +cmake_minimum_required(VERSION 2.8.9) +project(CTestTestMemcheckDummyPurify) +include(CTest) + +add_test (RunCMake "${CMAKE_COMMAND}") diff --git a/Tests/CTestTestMemcheck/DummyPurify/CTestConfig.cmake b/Tests/CTestTestMemcheck/DummyPurify/CTestConfig.cmake new file mode 100644 index 0000000..40b9608 --- /dev/null +++ b/Tests/CTestTestMemcheck/DummyPurify/CTestConfig.cmake @@ -0,0 +1,7 @@ +set (CTEST_PROJECT_NAME "CTestTestMemcheckDummyPurify") +set (CTEST_NIGHTLY_START_TIME "21:00:00 EDT") +set (CTEST_DART_SERVER_VERSION "2") +set(CTEST_DROP_METHOD "http") +set(CTEST_DROP_SITE "www.cdash.org") +set(CTEST_DROP_LOCATION "/CDash/submit.php?project=PublicDashboard") +set(CTEST_DROP_SITE_CDASH TRUE) diff --git a/Tests/CTestTestMemcheck/DummyPurify/test.cmake.in b/Tests/CTestTestMemcheck/DummyPurify/test.cmake.in new file mode 100644 index 0000000..0df4f68 --- /dev/null +++ b/Tests/CTestTestMemcheck/DummyPurify/test.cmake.in @@ -0,0 +1,24 @@ +cmake_minimum_required(VERSION 2.8.9) + +# Settings: +set(CTEST_DASHBOARD_ROOT "@CMAKE_CURRENT_BINARY_DIR@") +set(CTEST_SITE "@SITE@") +set(CTEST_BUILD_NAME "CTestTest-@BUILDNAME@-MemcheckDummyPurify") + +set(CTEST_SOURCE_DIRECTORY "@CMAKE_CURRENT_SOURCE_DIR@/DummyPurify") +set(CTEST_BINARY_DIRECTORY "@CMAKE_CURRENT_BINARY_DIR@/DummyPurify") +set(CTEST_CVS_COMMAND "@CVSCOMMAND@") +set(CTEST_CMAKE_GENERATOR "@CMAKE_TEST_GENERATOR@") +set(CTEST_BUILD_CONFIGURATION "$ENV{CMAKE_CONFIG_TYPE}") +set(CTEST_COVERAGE_COMMAND "@COVERAGE_COMMAND@") +set(CTEST_NOTES_FILES "${CTEST_SCRIPT_DIRECTORY}/${CTEST_SCRIPT_NAME}") + +set(CTEST_MEMORYCHECK_COMMAND "${PSEUDO_PURIFY}") + +#CTEST_EMPTY_BINARY_DIRECTORY(${CTEST_BINARY_DIRECTORY}) + +CTEST_START(Experimental) +CTEST_CONFIGURE(BUILD "${CTEST_BINARY_DIRECTORY}" RETURN_VALUE res) +#CTEST_BUILD(BUILD "${CTEST_BINARY_DIRECTORY}" RETURN_VALUE res) +CTEST_TEST(BUILD "${CTEST_BINARY_DIRECTORY}" RETURN_VALUE res) +CTEST_MEMCHECK(BUILD "${CTEST_BINARY_DIRECTORY}" RETURN_VALUE res) diff --git a/Tests/CTestTestMemcheck/DummyValgrind/CMakeLists.txt b/Tests/CTestTestMemcheck/DummyValgrind/CMakeLists.txt new file mode 100644 index 0000000..822966a --- /dev/null +++ b/Tests/CTestTestMemcheck/DummyValgrind/CMakeLists.txt @@ -0,0 +1,5 @@ +cmake_minimum_required(VERSION 2.8.9) +project(CTestTestMemcheckDummyValgrind) +include(CTest) + +add_test (RunCMake "${CMAKE_COMMAND}") diff --git a/Tests/CTestTestMemcheck/DummyValgrind/CTestConfig.cmake b/Tests/CTestTestMemcheck/DummyValgrind/CTestConfig.cmake new file mode 100644 index 0000000..4ca59a4 --- /dev/null +++ b/Tests/CTestTestMemcheck/DummyValgrind/CTestConfig.cmake @@ -0,0 +1,7 @@ +set (CTEST_PROJECT_NAME "CTestTestMemcheckDummyValgrind") +set (CTEST_NIGHTLY_START_TIME "21:00:00 EDT") +set (CTEST_DART_SERVER_VERSION "2") +set(CTEST_DROP_METHOD "http") +set(CTEST_DROP_SITE "www.cdash.org") +set(CTEST_DROP_LOCATION "/CDash/submit.php?project=PublicDashboard") +set(CTEST_DROP_SITE_CDASH TRUE) diff --git a/Tests/CTestTestMemcheck/DummyValgrind/test.cmake.in b/Tests/CTestTestMemcheck/DummyValgrind/test.cmake.in new file mode 100644 index 0000000..e341fed --- /dev/null +++ b/Tests/CTestTestMemcheck/DummyValgrind/test.cmake.in @@ -0,0 +1,24 @@ +cmake_minimum_required(VERSION 2.8.9) + +# Settings: +set(CTEST_DASHBOARD_ROOT "@CMAKE_CURRENT_BINARY_DIR@") +set(CTEST_SITE "@SITE@") +set(CTEST_BUILD_NAME "CTestTest-@BUILDNAME@-MemcheckDummyValgrind") + +set(CTEST_SOURCE_DIRECTORY "@CMAKE_CURRENT_SOURCE_DIR@/DummyValgrind") +set(CTEST_BINARY_DIRECTORY "@CMAKE_CURRENT_BINARY_DIR@/DummyValgrind") +set(CTEST_CVS_COMMAND "@CVSCOMMAND@") +set(CTEST_CMAKE_GENERATOR "@CMAKE_TEST_GENERATOR@") +set(CTEST_BUILD_CONFIGURATION "$ENV{CMAKE_CONFIG_TYPE}") +set(CTEST_COVERAGE_COMMAND "@COVERAGE_COMMAND@") +set(CTEST_NOTES_FILES "${CTEST_SCRIPT_DIRECTORY}/${CTEST_SCRIPT_NAME}") + +set(CTEST_MEMORYCHECK_COMMAND "${PSEUDO_VALGRIND}") + +#CTEST_EMPTY_BINARY_DIRECTORY(${CTEST_BINARY_DIRECTORY}) + +CTEST_START(Experimental) +CTEST_CONFIGURE(BUILD "${CTEST_BINARY_DIRECTORY}" RETURN_VALUE res) +#CTEST_BUILD(BUILD "${CTEST_BINARY_DIRECTORY}" RETURN_VALUE res) +CTEST_TEST(BUILD "${CTEST_BINARY_DIRECTORY}" RETURN_VALUE res) +CTEST_MEMCHECK(BUILD "${CTEST_BINARY_DIRECTORY}" RETURN_VALUE res) diff --git a/Tests/CTestTestMemcheck/DummyValgrindFailPost/CMakeLists.txt b/Tests/CTestTestMemcheck/DummyValgrindFailPost/CMakeLists.txt new file mode 100644 index 0000000..8185071 --- /dev/null +++ b/Tests/CTestTestMemcheck/DummyValgrindFailPost/CMakeLists.txt @@ -0,0 +1,5 @@ +cmake_minimum_required(VERSION 2.8.9) +project(CTestTestMemcheckDummyValgrindFailPost) +include(CTest) + +add_test (RunCMake "${CMAKE_COMMAND}") diff --git a/Tests/CTestTestMemcheck/DummyValgrindFailPost/CTestConfig.cmake b/Tests/CTestTestMemcheck/DummyValgrindFailPost/CTestConfig.cmake new file mode 100644 index 0000000..4ca59a4 --- /dev/null +++ b/Tests/CTestTestMemcheck/DummyValgrindFailPost/CTestConfig.cmake @@ -0,0 +1,7 @@ +set (CTEST_PROJECT_NAME "CTestTestMemcheckDummyValgrind") +set (CTEST_NIGHTLY_START_TIME "21:00:00 EDT") +set (CTEST_DART_SERVER_VERSION "2") +set(CTEST_DROP_METHOD "http") +set(CTEST_DROP_SITE "www.cdash.org") +set(CTEST_DROP_LOCATION "/CDash/submit.php?project=PublicDashboard") +set(CTEST_DROP_SITE_CDASH TRUE) diff --git a/Tests/CTestTestMemcheck/DummyValgrindFailPost/test.cmake.in b/Tests/CTestTestMemcheck/DummyValgrindFailPost/test.cmake.in new file mode 100644 index 0000000..7c1aa66 --- /dev/null +++ b/Tests/CTestTestMemcheck/DummyValgrindFailPost/test.cmake.in @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 2.8.9) + +# Settings: +set(CTEST_DASHBOARD_ROOT "@CMAKE_CURRENT_BINARY_DIR@") +set(CTEST_SITE "@SITE@") +set(CTEST_BUILD_NAME "CTestTest-@BUILDNAME@-MemcheckDummyValgrindFailPost") + +set(CTEST_SOURCE_DIRECTORY "@CMAKE_CURRENT_SOURCE_DIR@/DummyValgrindFailPost") +set(CTEST_BINARY_DIRECTORY "@CMAKE_CURRENT_BINARY_DIR@/DummyValgrindFailPost") +set(CTEST_CVS_COMMAND "@CVSCOMMAND@") +set(CTEST_CMAKE_GENERATOR "@CMAKE_TEST_GENERATOR@") +set(CTEST_BUILD_CONFIGURATION "$ENV{CMAKE_CONFIG_TYPE}") +set(CTEST_COVERAGE_COMMAND "@COVERAGE_COMMAND@") +set(CTEST_NOTES_FILES "${CTEST_SCRIPT_DIRECTORY}/${CTEST_SCRIPT_NAME}") + +set(CTEST_MEMORYCHECK_COMMAND "${PSEUDO_VALGRIND}") + +set(CTEST_CUSTOM_POST_MEMCHECK "${ERROR_COMMAND}") + +#CTEST_EMPTY_BINARY_DIRECTORY(${CTEST_BINARY_DIRECTORY}) + +CTEST_START(Experimental) +CTEST_CONFIGURE(BUILD "${CTEST_BINARY_DIRECTORY}" RETURN_VALUE res) +#CTEST_BUILD(BUILD "${CTEST_BINARY_DIRECTORY}" RETURN_VALUE res) +CTEST_TEST(BUILD "${CTEST_BINARY_DIRECTORY}" RETURN_VALUE res) +CTEST_MEMCHECK(BUILD "${CTEST_BINARY_DIRECTORY}" RETURN_VALUE res) diff --git a/Tests/CTestTestMemcheck/DummyValgrindFailPre/CMakeLists.txt b/Tests/CTestTestMemcheck/DummyValgrindFailPre/CMakeLists.txt new file mode 100644 index 0000000..3714cd6 --- /dev/null +++ b/Tests/CTestTestMemcheck/DummyValgrindFailPre/CMakeLists.txt @@ -0,0 +1,5 @@ +cmake_minimum_required(VERSION 2.8.9) +project(CTestTestMemcheckDummyValgrindFailPre) +include(CTest) + +add_test (RunCMake "${CMAKE_COMMAND}") diff --git a/Tests/CTestTestMemcheck/DummyValgrindFailPre/CTestConfig.cmake b/Tests/CTestTestMemcheck/DummyValgrindFailPre/CTestConfig.cmake new file mode 100644 index 0000000..4ca59a4 --- /dev/null +++ b/Tests/CTestTestMemcheck/DummyValgrindFailPre/CTestConfig.cmake @@ -0,0 +1,7 @@ +set (CTEST_PROJECT_NAME "CTestTestMemcheckDummyValgrind") +set (CTEST_NIGHTLY_START_TIME "21:00:00 EDT") +set (CTEST_DART_SERVER_VERSION "2") +set(CTEST_DROP_METHOD "http") +set(CTEST_DROP_SITE "www.cdash.org") +set(CTEST_DROP_LOCATION "/CDash/submit.php?project=PublicDashboard") +set(CTEST_DROP_SITE_CDASH TRUE) diff --git a/Tests/CTestTestMemcheck/DummyValgrindFailPre/test.cmake.in b/Tests/CTestTestMemcheck/DummyValgrindFailPre/test.cmake.in new file mode 100644 index 0000000..b2d7bb1 --- /dev/null +++ b/Tests/CTestTestMemcheck/DummyValgrindFailPre/test.cmake.in @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 2.8.9) + +# Settings: +set(CTEST_DASHBOARD_ROOT "@CMAKE_CURRENT_BINARY_DIR@") +set(CTEST_SITE "@SITE@") +set(CTEST_BUILD_NAME "CTestTest-@BUILDNAME@-MemcheckDummyValgrindFailPre") + +set(CTEST_SOURCE_DIRECTORY "@CMAKE_CURRENT_SOURCE_DIR@/DummyValgrindFailPre") +set(CTEST_BINARY_DIRECTORY "@CMAKE_CURRENT_BINARY_DIR@/DummyValgrindFailPre") +set(CTEST_CVS_COMMAND "@CVSCOMMAND@") +set(CTEST_CMAKE_GENERATOR "@CMAKE_TEST_GENERATOR@") +set(CTEST_BUILD_CONFIGURATION "$ENV{CMAKE_CONFIG_TYPE}") +set(CTEST_COVERAGE_COMMAND "@COVERAGE_COMMAND@") +set(CTEST_NOTES_FILES "${CTEST_SCRIPT_DIRECTORY}/${CTEST_SCRIPT_NAME}") + +set(CTEST_MEMORYCHECK_COMMAND "${PSEUDO_VALGRIND}") + +set(CTEST_CUSTOM_PRE_MEMCHECK "${ERROR_COMMAND}") + +#CTEST_EMPTY_BINARY_DIRECTORY(${CTEST_BINARY_DIRECTORY}) + +CTEST_START(Experimental) +CTEST_CONFIGURE(BUILD "${CTEST_BINARY_DIRECTORY}" RETURN_VALUE res) +#CTEST_BUILD(BUILD "${CTEST_BINARY_DIRECTORY}" RETURN_VALUE res) +CTEST_TEST(BUILD "${CTEST_BINARY_DIRECTORY}" RETURN_VALUE res) +CTEST_MEMCHECK(BUILD "${CTEST_BINARY_DIRECTORY}" RETURN_VALUE res) diff --git a/Tests/CTestTestMemcheck/DummyValgrindPrePost/CMakeLists.txt b/Tests/CTestTestMemcheck/DummyValgrindPrePost/CMakeLists.txt new file mode 100644 index 0000000..bc15632 --- /dev/null +++ b/Tests/CTestTestMemcheck/DummyValgrindPrePost/CMakeLists.txt @@ -0,0 +1,5 @@ +cmake_minimum_required(VERSION 2.8.9) +project(CTestTestMemcheckDummyValgrindPrePost) +include(CTest) + +add_test (RunCMake "${CMAKE_COMMAND}") diff --git a/Tests/CTestTestMemcheck/DummyValgrindPrePost/CTestConfig.cmake b/Tests/CTestTestMemcheck/DummyValgrindPrePost/CTestConfig.cmake new file mode 100644 index 0000000..6e4c2e8 --- /dev/null +++ b/Tests/CTestTestMemcheck/DummyValgrindPrePost/CTestConfig.cmake @@ -0,0 +1,7 @@ +set (CTEST_PROJECT_NAME "CTestTestMemcheckDummyValgrindPrePost") +set (CTEST_NIGHTLY_START_TIME "21:00:00 EDT") +set (CTEST_DART_SERVER_VERSION "2") +set(CTEST_DROP_METHOD "http") +set(CTEST_DROP_SITE "www.cdash.org") +set(CTEST_DROP_LOCATION "/CDash/submit.php?project=PublicDashboard") +set(CTEST_DROP_SITE_CDASH TRUE) diff --git a/Tests/CTestTestMemcheck/DummyValgrindPrePost/test.cmake.in b/Tests/CTestTestMemcheck/DummyValgrindPrePost/test.cmake.in new file mode 100644 index 0000000..44c416e --- /dev/null +++ b/Tests/CTestTestMemcheck/DummyValgrindPrePost/test.cmake.in @@ -0,0 +1,27 @@ +cmake_minimum_required(VERSION 2.8.9) + +# Settings: +set(CTEST_DASHBOARD_ROOT "@CMAKE_CURRENT_BINARY_DIR@") +set(CTEST_SITE "@SITE@") +set(CTEST_BUILD_NAME "CTestTest-@BUILDNAME@-MemcheckDummyValgrindPrePost") + +set(CTEST_SOURCE_DIRECTORY "@CMAKE_CURRENT_SOURCE_DIR@/DummyValgrindPrePost") +set(CTEST_BINARY_DIRECTORY "@CMAKE_CURRENT_BINARY_DIR@/DummyValgrindPrePost") +set(CTEST_CVS_COMMAND "@CVSCOMMAND@") +set(CTEST_CMAKE_GENERATOR "@CMAKE_TEST_GENERATOR@") +set(CTEST_BUILD_CONFIGURATION "$ENV{CMAKE_CONFIG_TYPE}") +set(CTEST_COVERAGE_COMMAND "@COVERAGE_COMMAND@") +set(CTEST_NOTES_FILES "${CTEST_SCRIPT_DIRECTORY}/${CTEST_SCRIPT_NAME}") + +set(CTEST_MEMORYCHECK_COMMAND "${PSEUDO_VALGRIND}") + +set(CTEST_CUSTOM_PRE_MEMCHECK "${CTEST_MEMORYCHECK_COMMAND}") +set(CTEST_CUSTOM_POST_MEMCHECK "${CTEST_MEMORYCHECK_COMMAND}") + +#CTEST_EMPTY_BINARY_DIRECTORY(${CTEST_BINARY_DIRECTORY}) + +CTEST_START(Experimental) +CTEST_CONFIGURE(BUILD "${CTEST_BINARY_DIRECTORY}" RETURN_VALUE res) +#CTEST_BUILD(BUILD "${CTEST_BINARY_DIRECTORY}" RETURN_VALUE res) +CTEST_TEST(BUILD "${CTEST_BINARY_DIRECTORY}" RETURN_VALUE res) +CTEST_MEMCHECK(BUILD "${CTEST_BINARY_DIRECTORY}" RETURN_VALUE res) diff --git a/Tests/CTestTestMemcheck/NotExist/CMakeLists.txt b/Tests/CTestTestMemcheck/NotExist/CMakeLists.txt new file mode 100644 index 0000000..4d905de --- /dev/null +++ b/Tests/CTestTestMemcheck/NotExist/CMakeLists.txt @@ -0,0 +1,5 @@ +cmake_minimum_required(VERSION 2.8.9) +project(CTestTestMemcheckNotExist) +include(CTest) + +add_test (RunCMake "${CMAKE_COMMAND}") diff --git a/Tests/CTestTestMemcheck/NotExist/CTestConfig.cmake b/Tests/CTestTestMemcheck/NotExist/CTestConfig.cmake new file mode 100644 index 0000000..3ed84aa --- /dev/null +++ b/Tests/CTestTestMemcheck/NotExist/CTestConfig.cmake @@ -0,0 +1,7 @@ +set (CTEST_PROJECT_NAME "CTestTestMemcheckUnknown") +set (CTEST_NIGHTLY_START_TIME "21:00:00 EDT") +set (CTEST_DART_SERVER_VERSION "2") +set(CTEST_DROP_METHOD "http") +set(CTEST_DROP_SITE "www.cdash.org") +set(CTEST_DROP_LOCATION "/CDash/submit.php?project=PublicDashboard") +set(CTEST_DROP_SITE_CDASH TRUE) diff --git a/Tests/CTestTestMemcheck/NotExist/test.cmake.in b/Tests/CTestTestMemcheck/NotExist/test.cmake.in new file mode 100644 index 0000000..78db7e2 --- /dev/null +++ b/Tests/CTestTestMemcheck/NotExist/test.cmake.in @@ -0,0 +1,18 @@ +cmake_minimum_required(VERSION 2.8.9) + +# Settings: +set(CTEST_DASHBOARD_ROOT "@CMAKE_CURRENT_BINARY_DIR@") +set(CTEST_SITE "@SITE@") +set(CTEST_BUILD_NAME "CTestTest-@BUILDNAME@-MemcheckNotExist") + +set(CTEST_SOURCE_DIRECTORY "@CMAKE_CURRENT_SOURCE_DIR@/NotExist") +set(CTEST_BINARY_DIRECTORY "@CMAKE_CURRENT_BINARY_DIR@/NotExist") +set(CTEST_CVS_COMMAND "@CVSCOMMAND@") +set(CTEST_CMAKE_GENERATOR "@CMAKE_TEST_GENERATOR@") +set(CTEST_BUILD_CONFIGURATION "$ENV{CMAKE_CONFIG_TYPE}") +set(CTEST_COVERAGE_COMMAND "@COVERAGE_COMMAND@") +set(CTEST_NOTES_FILES "${CTEST_SCRIPT_DIRECTORY}/${CTEST_SCRIPT_NAME}") +set(CTEST_MEMORYCHECK_COMMAND "${CTEST_BINARY_DIRECTORY}/no-memcheck-exe") + +CTEST_START(Experimental) +CTEST_MEMCHECK(BUILD "${CTEST_BINARY_DIRECTORY}" RETURN_VALUE res) diff --git a/Tests/CTestTestMemcheck/Unknown/CMakeLists.txt b/Tests/CTestTestMemcheck/Unknown/CMakeLists.txt new file mode 100644 index 0000000..3fd3103 --- /dev/null +++ b/Tests/CTestTestMemcheck/Unknown/CMakeLists.txt @@ -0,0 +1,5 @@ +cmake_minimum_required(VERSION 2.8.9) +project(CTestTestMemcheckUnknown) +include(CTest) + +add_test (RunCMake "${CMAKE_COMMAND}") diff --git a/Tests/CTestTestMemcheck/Unknown/CTestConfig.cmake b/Tests/CTestTestMemcheck/Unknown/CTestConfig.cmake new file mode 100644 index 0000000..3ed84aa --- /dev/null +++ b/Tests/CTestTestMemcheck/Unknown/CTestConfig.cmake @@ -0,0 +1,7 @@ +set (CTEST_PROJECT_NAME "CTestTestMemcheckUnknown") +set (CTEST_NIGHTLY_START_TIME "21:00:00 EDT") +set (CTEST_DART_SERVER_VERSION "2") +set(CTEST_DROP_METHOD "http") +set(CTEST_DROP_SITE "www.cdash.org") +set(CTEST_DROP_LOCATION "/CDash/submit.php?project=PublicDashboard") +set(CTEST_DROP_SITE_CDASH TRUE) diff --git a/Tests/CTestTestMemcheck/Unknown/test.cmake.in b/Tests/CTestTestMemcheck/Unknown/test.cmake.in new file mode 100644 index 0000000..c0b7839 --- /dev/null +++ b/Tests/CTestTestMemcheck/Unknown/test.cmake.in @@ -0,0 +1,18 @@ +cmake_minimum_required(VERSION 2.8.9) + +# Settings: +set(CTEST_DASHBOARD_ROOT "@CMAKE_CURRENT_BINARY_DIR@") +set(CTEST_SITE "@SITE@") +set(CTEST_BUILD_NAME "CTestTest-@BUILDNAME@-MemcheckUnknown") + +set(CTEST_SOURCE_DIRECTORY "@CMAKE_CURRENT_SOURCE_DIR@/Unknown") +set(CTEST_BINARY_DIRECTORY "@CMAKE_CURRENT_BINARY_DIR@/Unknown") +set(CTEST_CVS_COMMAND "@CVSCOMMAND@") +set(CTEST_CMAKE_GENERATOR "@CMAKE_TEST_GENERATOR@") +set(CTEST_BUILD_CONFIGURATION "$ENV{CMAKE_CONFIG_TYPE}") +set(CTEST_COVERAGE_COMMAND "@COVERAGE_COMMAND@") +set(CTEST_NOTES_FILES "${CTEST_SCRIPT_DIRECTORY}/${CTEST_SCRIPT_NAME}") +set(CTEST_MEMORYCHECK_COMMAND "@CMAKE_COMMAND@") + +CTEST_START(Experimental) +CTEST_MEMCHECK(BUILD "${CTEST_BINARY_DIRECTORY}" RETURN_VALUE res) -- cgit v0.12 From d26c9b69c57ae051e9bdc7a084326dff50dfb2ba Mon Sep 17 00:00:00 2001 From: Rolf Eike Beer Date: Sun, 30 Sep 2012 20:53:27 +0200 Subject: CTest: improve memory checker type detection If the checker was explicitely set with a "TypeCommand" variable (e.g. ValgrindCommand) then we now just believe that this is valgrind, even if nothing in the path matches "valgrind". Only when "MemoryCheckCommand" was used we still scan the path to find out what checker we have. --- Source/CTest/cmCTestMemCheckHandler.cxx | 158 ++++++++++++++++++-------------- 1 file changed, 89 insertions(+), 69 deletions(-) diff --git a/Source/CTest/cmCTestMemCheckHandler.cxx b/Source/CTest/cmCTestMemCheckHandler.cxx index f446c94..80218ad 100644 --- a/Source/CTest/cmCTestMemCheckHandler.cxx +++ b/Source/CTest/cmCTestMemCheckHandler.cxx @@ -412,24 +412,45 @@ bool cmCTestMemCheckHandler::InitializeMemoryChecking() { this->MemoryTester = this->CTest->GetCTestConfiguration("MemoryCheckCommand").c_str(); + + // determine the checker type + if ( this->MemoryTester.find("valgrind") != std::string::npos ) + { + this->MemoryTesterStyle = cmCTestMemCheckHandler::VALGRIND; + } + else if ( this->MemoryTester.find("purify") != std::string::npos ) + { + this->MemoryTesterStyle = cmCTestMemCheckHandler::PURIFY; + } + else if ( this->MemoryTester.find("BC") != std::string::npos ) + { + this->MemoryTesterStyle = cmCTestMemCheckHandler::BOUNDS_CHECKER; + } + else + { + this->MemoryTesterStyle = cmCTestMemCheckHandler::UNKNOWN; + } } else if ( cmSystemTools::FileExists(this->CTest->GetCTestConfiguration( "PurifyCommand").c_str()) ) { this->MemoryTester = this->CTest->GetCTestConfiguration("PurifyCommand").c_str(); + this->MemoryTesterStyle = cmCTestMemCheckHandler::PURIFY; } else if ( cmSystemTools::FileExists(this->CTest->GetCTestConfiguration( "ValgrindCommand").c_str()) ) { this->MemoryTester = this->CTest->GetCTestConfiguration("ValgrindCommand").c_str(); + this->MemoryTesterStyle = cmCTestMemCheckHandler::VALGRIND; } else if ( cmSystemTools::FileExists(this->CTest->GetCTestConfiguration( "BoundsCheckerCommand").c_str()) ) { this->MemoryTester = this->CTest->GetCTestConfiguration("BoundsCheckerCommand").c_str(); + this->MemoryTesterStyle = cmCTestMemCheckHandler::BOUNDS_CHECKER; } else { @@ -467,82 +488,81 @@ bool cmCTestMemCheckHandler::InitializeMemoryChecking() this->MemoryTesterOutputFile = this->CTest->GetBinaryDir() + "/Testing/Temporary/MemoryChecker.log"; - if ( this->MemoryTester.find("valgrind") != std::string::npos ) + switch ( this->MemoryTesterStyle ) { - this->MemoryTesterStyle = cmCTestMemCheckHandler::VALGRIND; - if ( this->MemoryTesterOptions.empty() ) - { - this->MemoryTesterOptions.push_back("-q"); - this->MemoryTesterOptions.push_back("--tool=memcheck"); - this->MemoryTesterOptions.push_back("--leak-check=yes"); - this->MemoryTesterOptions.push_back("--show-reachable=yes"); - this->MemoryTesterOptions.push_back("--workaround-gcc296-bugs=yes"); - this->MemoryTesterOptions.push_back("--num-callers=50"); - } - if ( this->CTest->GetCTestConfiguration( - "MemoryCheckSuppressionFile").size() ) - { - if ( !cmSystemTools::FileExists(this->CTest->GetCTestConfiguration( - "MemoryCheckSuppressionFile").c_str()) ) + case cmCTestMemCheckHandler::VALGRIND: + if ( this->MemoryTesterOptions.empty() ) { - cmCTestLog(this->CTest, ERROR_MESSAGE, - "Cannot find memory checker suppression file: " - << this->CTest->GetCTestConfiguration( - "MemoryCheckSuppressionFile").c_str() << std::endl); - return false; - } - std::string suppressions = "--suppressions=" - + this->CTest->GetCTestConfiguration("MemoryCheckSuppressionFile"); - this->MemoryTesterOptions.push_back(suppressions); - } - } - else if ( this->MemoryTester.find("purify") != std::string::npos ) - { - this->MemoryTesterStyle = cmCTestMemCheckHandler::PURIFY; - std::string outputFile; -#ifdef _WIN32 - if( this->CTest->GetCTestConfiguration( + this->MemoryTesterOptions.push_back("-q"); + this->MemoryTesterOptions.push_back("--tool=memcheck"); + this->MemoryTesterOptions.push_back("--leak-check=yes"); + this->MemoryTesterOptions.push_back("--show-reachable=yes"); + this->MemoryTesterOptions.push_back("--workaround-gcc296-bugs=yes"); + this->MemoryTesterOptions.push_back("--num-callers=50"); + } + if ( this->CTest->GetCTestConfiguration( "MemoryCheckSuppressionFile").size() ) + { + if ( !cmSystemTools::FileExists(this->CTest->GetCTestConfiguration( + "MemoryCheckSuppressionFile").c_str()) ) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, + "Cannot find memory checker suppression file: " + << this->CTest->GetCTestConfiguration( + "MemoryCheckSuppressionFile").c_str() << std::endl); + return false; + } + std::string suppressions = "--suppressions=" + + this->CTest->GetCTestConfiguration("MemoryCheckSuppressionFile"); + this->MemoryTesterOptions.push_back(suppressions); + } + break; + case cmCTestMemCheckHandler::PURIFY: { - if( !cmSystemTools::FileExists(this->CTest->GetCTestConfiguration( - "MemoryCheckSuppressionFile").c_str()) ) + std::string outputFile; +#ifdef _WIN32 + if( this->CTest->GetCTestConfiguration( + "MemoryCheckSuppressionFile").size() ) { - cmCTestLog(this->CTest, ERROR_MESSAGE, - "Cannot find memory checker suppression file: " - << this->CTest->GetCTestConfiguration( - "MemoryCheckSuppressionFile").c_str() << std::endl); - return false; - } - std::string filterFiles = "/FilterFiles=" - + this->CTest->GetCTestConfiguration("MemoryCheckSuppressionFile"); - this->MemoryTesterOptions.push_back(filterFiles); - } - outputFile = "/SAVETEXTDATA="; + if( !cmSystemTools::FileExists(this->CTest->GetCTestConfiguration( + "MemoryCheckSuppressionFile").c_str()) ) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, + "Cannot find memory checker suppression file: " + << this->CTest->GetCTestConfiguration( + "MemoryCheckSuppressionFile").c_str() << std::endl); + return false; + } + std::string filterFiles = "/FilterFiles=" + + this->CTest->GetCTestConfiguration("MemoryCheckSuppressionFile"); + this->MemoryTesterOptions.push_back(filterFiles); + } + outputFile = "/SAVETEXTDATA="; #else - outputFile = "-log-file="; + outputFile = "-log-file="; #endif - outputFile += this->MemoryTesterOutputFile; - this->MemoryTesterOptions.push_back(outputFile); - } - else if ( this->MemoryTester.find("BC") != std::string::npos ) - { - this->BoundsCheckerXMLFile = this->MemoryTesterOutputFile; - std::string dpbdFile = this->CTest->GetBinaryDir() - + "/Testing/Temporary/MemoryChecker.DPbd"; - this->BoundsCheckerDPBDFile = dpbdFile; - this->MemoryTesterStyle = cmCTestMemCheckHandler::BOUNDS_CHECKER; - this->MemoryTesterOptions.push_back("/B"); - this->MemoryTesterOptions.push_back(dpbdFile); - this->MemoryTesterOptions.push_back("/X"); - this->MemoryTesterOptions.push_back(this->MemoryTesterOutputFile); - this->MemoryTesterOptions.push_back("/M"); - } - else - { - cmCTestLog(this->CTest, ERROR_MESSAGE, - "Do not understand memory checker: " << this->MemoryTester.c_str() - << std::endl); - return false; + outputFile += this->MemoryTesterOutputFile; + this->MemoryTesterOptions.push_back(outputFile); + break; + } + case cmCTestMemCheckHandler::BOUNDS_CHECKER: + { + this->BoundsCheckerXMLFile = this->MemoryTesterOutputFile; + std::string dpbdFile = this->CTest->GetBinaryDir() + + "/Testing/Temporary/MemoryChecker.DPbd"; + this->BoundsCheckerDPBDFile = dpbdFile; + this->MemoryTesterOptions.push_back("/B"); + this->MemoryTesterOptions.push_back(dpbdFile); + this->MemoryTesterOptions.push_back("/X"); + this->MemoryTesterOptions.push_back(this->MemoryTesterOutputFile); + this->MemoryTesterOptions.push_back("/M"); + break; + } + default: + cmCTestLog(this->CTest, ERROR_MESSAGE, + "Do not understand memory checker: " << this->MemoryTester.c_str() + << std::endl); + return false; } std::vector::size_type cc; -- cgit v0.12 From de8bffc8f8b1d18987f23e8b343bcf82b37e4683 Mon Sep 17 00:00:00 2001 From: Rolf Eike Beer Date: Mon, 1 Oct 2012 17:51:00 +0200 Subject: CTest: add a test for CTEST_CUSTOM_MEMCHECK_IGNORE --- Tests/CTestTestMemcheck/CMakeLists.txt | 7 ++++++- .../DummyValgrindIgnoreMemcheck/CMakeLists.txt | 6 ++++++ .../DummyValgrindIgnoreMemcheck/CTestConfig.cmake | 9 ++++++++ .../DummyValgrindIgnoreMemcheck/test.cmake.in | 24 ++++++++++++++++++++++ 4 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 Tests/CTestTestMemcheck/DummyValgrindIgnoreMemcheck/CMakeLists.txt create mode 100644 Tests/CTestTestMemcheck/DummyValgrindIgnoreMemcheck/CTestConfig.cmake create mode 100644 Tests/CTestTestMemcheck/DummyValgrindIgnoreMemcheck/test.cmake.in diff --git a/Tests/CTestTestMemcheck/CMakeLists.txt b/Tests/CTestTestMemcheck/CMakeLists.txt index 544d0ed..b4a5f15 100644 --- a/Tests/CTestTestMemcheck/CMakeLists.txt +++ b/Tests/CTestTestMemcheck/CMakeLists.txt @@ -23,7 +23,8 @@ set_target_properties(pseudo_BC PROPERTIES OUTPUT_NAME BC) add_executable(memcheck_fail "${CMAKE_CURRENT_BINARY_DIR}/ret1.c") foreach (_test IN ITEMS Unknown NotExist DummyValgrind DummyValgrindPrePost - DummyValgrindFailPre DummyValgrindFailPost DummyPurify DummyBC) + DummyValgrindFailPre DummyValgrindFailPost DummyPurify DummyBC + DummyValgrindIgnoreMemcheck) configure_file( "${CMAKE_CURRENT_SOURCE_DIR}/${_test}/test.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/${_test}/test.cmake" @@ -64,6 +65,10 @@ foreach (_pp Pre Post) PASS_REGULAR_EXPRESSION "\nProblem running command: ${CMAKE_CURRENT_BINARY_DIR}[^\n]*fail[^\n]*\n(.*\n)?Problem executing ${_pp_lower}-memcheck command\\(s\\\).\n(.*\n)?Error in read script: ${CMAKE_CURRENT_BINARY_DIR}/DummyValgrindFail${_pp}/test.cmake\n") endforeach () +set_tests_properties(CTestTestMemcheckDummyValgrindIgnoreMemcheck + PROPERTIES + PASS_REGULAR_EXPRESSION "\n2/2 Test #2: RunCMakeAgain .*\n1/1 MemCheck #1: RunCMake .*${NORMAL_CTEST_OUTPUT}") + set_tests_properties(CTestTestMemcheckDummyPurify PROPERTIES PASS_REGULAR_EXPRESSION "\nCannot find memory tester output file: ${CMAKE_CURRENT_BINARY_DIR}/DummyPurify/Testing/Temporary/MemoryChecker.log\n(.*\n)?Error in read script: ${CMAKE_CURRENT_BINARY_DIR}/DummyPurify/test.cmake\n") diff --git a/Tests/CTestTestMemcheck/DummyValgrindIgnoreMemcheck/CMakeLists.txt b/Tests/CTestTestMemcheck/DummyValgrindIgnoreMemcheck/CMakeLists.txt new file mode 100644 index 0000000..5d437d1 --- /dev/null +++ b/Tests/CTestTestMemcheck/DummyValgrindIgnoreMemcheck/CMakeLists.txt @@ -0,0 +1,6 @@ +cmake_minimum_required(VERSION 2.8.9) +project(CTestTestMemcheckDummyValgrindIgnoreMemcheck) +include(CTest) + +add_test (RunCMake "${CMAKE_COMMAND}") +add_test (RunCMakeAgain "${CMAKE_COMMAND}") diff --git a/Tests/CTestTestMemcheck/DummyValgrindIgnoreMemcheck/CTestConfig.cmake b/Tests/CTestTestMemcheck/DummyValgrindIgnoreMemcheck/CTestConfig.cmake new file mode 100644 index 0000000..6eee3e6 --- /dev/null +++ b/Tests/CTestTestMemcheck/DummyValgrindIgnoreMemcheck/CTestConfig.cmake @@ -0,0 +1,9 @@ +set (CTEST_PROJECT_NAME "CTestTestMemcheckDummyValgrindIgnoreMemcheck") +set (CTEST_NIGHTLY_START_TIME "21:00:00 EDT") +set (CTEST_DART_SERVER_VERSION "2") +set(CTEST_DROP_METHOD "http") +set(CTEST_DROP_SITE "www.cdash.org") +set(CTEST_DROP_LOCATION "/CDash/submit.php?project=PublicDashboard") +set(CTEST_DROP_SITE_CDASH TRUE) + +set(CTEST_CUSTOM_MEMCHECK_IGNORE RunCMakeAgain) diff --git a/Tests/CTestTestMemcheck/DummyValgrindIgnoreMemcheck/test.cmake.in b/Tests/CTestTestMemcheck/DummyValgrindIgnoreMemcheck/test.cmake.in new file mode 100644 index 0000000..031a232 --- /dev/null +++ b/Tests/CTestTestMemcheck/DummyValgrindIgnoreMemcheck/test.cmake.in @@ -0,0 +1,24 @@ +cmake_minimum_required(VERSION 2.8.9) + +# Settings: +set(CTEST_DASHBOARD_ROOT "@CMAKE_CURRENT_BINARY_DIR@") +set(CTEST_SITE "@SITE@") +set(CTEST_BUILD_NAME "CTestTest-@BUILDNAME@-MemcheckDummyValgrindIgnoreMemcheck") + +set(CTEST_SOURCE_DIRECTORY "@CMAKE_CURRENT_SOURCE_DIR@/DummyValgrindIgnoreMemcheck") +set(CTEST_BINARY_DIRECTORY "@CMAKE_CURRENT_BINARY_DIR@/DummyValgrindIgnoreMemcheck") +set(CTEST_CVS_COMMAND "@CVSCOMMAND@") +set(CTEST_CMAKE_GENERATOR "@CMAKE_TEST_GENERATOR@") +set(CTEST_BUILD_CONFIGURATION "$ENV{CMAKE_CONFIG_TYPE}") +set(CTEST_COVERAGE_COMMAND "@COVERAGE_COMMAND@") +set(CTEST_NOTES_FILES "${CTEST_SCRIPT_DIRECTORY}/${CTEST_SCRIPT_NAME}") + +set(CTEST_MEMORYCHECK_COMMAND "${PSEUDO_VALGRIND}") + +#CTEST_EMPTY_BINARY_DIRECTORY(${CTEST_BINARY_DIRECTORY}) + +CTEST_START(Experimental) +CTEST_CONFIGURE(BUILD "${CTEST_BINARY_DIRECTORY}" RETURN_VALUE res) +#CTEST_BUILD(BUILD "${CTEST_BINARY_DIRECTORY}" RETURN_VALUE res) +CTEST_TEST(BUILD "${CTEST_BINARY_DIRECTORY}" RETURN_VALUE res) +CTEST_MEMCHECK(BUILD "${CTEST_BINARY_DIRECTORY}" RETURN_VALUE res) -- cgit v0.12 From 995a35fe12e9582c4488a7bc2deb66b0e4d25315 Mon Sep 17 00:00:00 2001 From: Rolf Eike Beer Date: Tue, 2 Oct 2012 21:56:48 +0200 Subject: CTest: add a check with a quoted memory checker --- Tests/CTestTestMemcheck/CMakeLists.txt | 13 +++++++++---- Tests/CTestTestMemcheck/UnknownQuoted/CMakeLists.txt | 5 +++++ .../CTestTestMemcheck/UnknownQuoted/CTestConfig.cmake | 7 +++++++ Tests/CTestTestMemcheck/UnknownQuoted/test.cmake.in | 18 ++++++++++++++++++ 4 files changed, 39 insertions(+), 4 deletions(-) create mode 100644 Tests/CTestTestMemcheck/UnknownQuoted/CMakeLists.txt create mode 100644 Tests/CTestTestMemcheck/UnknownQuoted/CTestConfig.cmake create mode 100644 Tests/CTestTestMemcheck/UnknownQuoted/test.cmake.in diff --git a/Tests/CTestTestMemcheck/CMakeLists.txt b/Tests/CTestTestMemcheck/CMakeLists.txt index b4a5f15..2730a61 100644 --- a/Tests/CTestTestMemcheck/CMakeLists.txt +++ b/Tests/CTestTestMemcheck/CMakeLists.txt @@ -22,8 +22,10 @@ set_target_properties(pseudo_BC PROPERTIES OUTPUT_NAME BC) # binary to be used as pre- and post-memcheck command that fails add_executable(memcheck_fail "${CMAKE_CURRENT_BINARY_DIR}/ret1.c") -foreach (_test IN ITEMS Unknown NotExist DummyValgrind DummyValgrindPrePost - DummyValgrindFailPre DummyValgrindFailPost DummyPurify DummyBC +foreach (_test IN ITEMS Unknown UnknownQuoted NotExist + DummyValgrind DummyValgrindPrePost + DummyValgrindFailPre DummyValgrindFailPost + DummyPurify DummyBC DummyValgrindIgnoreMemcheck) configure_file( "${CMAKE_CURRENT_SOURCE_DIR}/${_test}/test.cmake.in" @@ -44,8 +46,11 @@ string(REPLACE "\\" "\\\\" CMAKE_COMMAND_ESCAPED "${CMAKE_COMMAND}") string(REPLACE "(" "\\(" CMAKE_COMMAND_ESCAPED "${CMAKE_COMMAND_ESCAPED}") string(REPLACE ")" "\\)" CMAKE_COMMAND_ESCAPED "${CMAKE_COMMAND_ESCAPED}") string(REPLACE "+" "\\+" CMAKE_COMMAND_ESCAPED "${CMAKE_COMMAND_ESCAPED}") -set_tests_properties(CTestTestMemcheckUnknown PROPERTIES - PASS_REGULAR_EXPRESSION "Do not understand memory checker: ${CMAKE_COMMAND_ESCAPED}\n(.*\n)?Error in read script: ${CMAKE_CURRENT_BINARY_DIR}/Unknown/test.cmake\n") + +foreach (_unkn Unknown UnknownQuoted) + set_tests_properties(CTestTestMemcheck${_unkn} PROPERTIES + PASS_REGULAR_EXPRESSION "Do not understand memory checker: ${CMAKE_COMMAND_ESCAPED}\n(.*\n)?Error in read script: ${CMAKE_CURRENT_BINARY_DIR}/${_unkn}/test.cmake\n") +endforeach () set_tests_properties(CTestTestMemcheckNotExist PROPERTIES PASS_REGULAR_EXPRESSION "Memory checker \\(MemoryCheckCommand\\) not set, or cannot find the specified program.") diff --git a/Tests/CTestTestMemcheck/UnknownQuoted/CMakeLists.txt b/Tests/CTestTestMemcheck/UnknownQuoted/CMakeLists.txt new file mode 100644 index 0000000..6f49c61 --- /dev/null +++ b/Tests/CTestTestMemcheck/UnknownQuoted/CMakeLists.txt @@ -0,0 +1,5 @@ +cmake_minimum_required(VERSION 2.8.9) +project(CTestTestMemcheckUnknownQuoted) +include(CTest) + +add_test (RunCMake "\"${CMAKE_COMMAND}\"") diff --git a/Tests/CTestTestMemcheck/UnknownQuoted/CTestConfig.cmake b/Tests/CTestTestMemcheck/UnknownQuoted/CTestConfig.cmake new file mode 100644 index 0000000..f0233a7 --- /dev/null +++ b/Tests/CTestTestMemcheck/UnknownQuoted/CTestConfig.cmake @@ -0,0 +1,7 @@ +set (CTEST_PROJECT_NAME "CTestTestMemcheckUnknownQuoted") +set (CTEST_NIGHTLY_START_TIME "21:00:00 EDT") +set (CTEST_DART_SERVER_VERSION "2") +set(CTEST_DROP_METHOD "http") +set(CTEST_DROP_SITE "www.cdash.org") +set(CTEST_DROP_LOCATION "/CDash/submit.php?project=PublicDashboard") +set(CTEST_DROP_SITE_CDASH TRUE) diff --git a/Tests/CTestTestMemcheck/UnknownQuoted/test.cmake.in b/Tests/CTestTestMemcheck/UnknownQuoted/test.cmake.in new file mode 100644 index 0000000..e2bfb60 --- /dev/null +++ b/Tests/CTestTestMemcheck/UnknownQuoted/test.cmake.in @@ -0,0 +1,18 @@ +cmake_minimum_required(VERSION 2.8.9) + +# Settings: +set(CTEST_DASHBOARD_ROOT "@CMAKE_CURRENT_BINARY_DIR@") +set(CTEST_SITE "@SITE@") +set(CTEST_BUILD_NAME "CTestTest-@BUILDNAME@-MemcheckUnknownQuoted") + +set(CTEST_SOURCE_DIRECTORY "@CMAKE_CURRENT_SOURCE_DIR@/UnknownQuoted") +set(CTEST_BINARY_DIRECTORY "@CMAKE_CURRENT_BINARY_DIR@/UnknownQuoted") +set(CTEST_CVS_COMMAND "@CVSCOMMAND@") +set(CTEST_CMAKE_GENERATOR "@CMAKE_TEST_GENERATOR@") +set(CTEST_BUILD_CONFIGURATION "$ENV{CMAKE_CONFIG_TYPE}") +set(CTEST_COVERAGE_COMMAND "@COVERAGE_COMMAND@") +set(CTEST_NOTES_FILES "${CTEST_SCRIPT_DIRECTORY}/${CTEST_SCRIPT_NAME}") +set(CTEST_MEMORYCHECK_COMMAND "@CMAKE_COMMAND@") + +CTEST_START(Experimental) +CTEST_MEMCHECK(BUILD "${CTEST_BINARY_DIRECTORY}" RETURN_VALUE res) -- cgit v0.12 From 71491bbe8fd6e3ca83f9ed705c8c81f7ddaf9448 Mon Sep 17 00:00:00 2001 From: Brad King Date: Wed, 10 Oct 2012 15:38:36 -0400 Subject: FortranCInterface: Pass all flags to VERIFY project (#13579) Teach FortranCInterface_VERIFY to build the test project in a specific configuration and pass all flags for that configuration. This ensures that any modifications made by the user or project to the flag are used in the test project consistently. --- Modules/FortranCInterface.cmake | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Modules/FortranCInterface.cmake b/Modules/FortranCInterface.cmake index aafecb4..c59e1f8 100644 --- a/Modules/FortranCInterface.cmake +++ b/Modules/FortranCInterface.cmake @@ -61,7 +61,7 @@ # If the check fails and QUIET is not given the function terminates # with a FATAL_ERROR message describing the problem. The purpose of # this check is to stop a build early for incompatible compiler -# combinations. +# combinations. The test is built in the Release configuration. # # FortranCInterface is aware of possible GLOBAL and MODULE manglings # for many Fortran compilers, but it also provides an interface to @@ -250,6 +250,7 @@ function(FortranCInterface_VERIFY) message(STATUS "${_desc}") # Build a sample project which reports symbols. + set(CMAKE_TRY_COMPILE_CONFIGURATION Release) try_compile(FortranCInterface_VERIFY_${lang}_COMPILED ${FortranCInterface_BINARY_DIR}/Verify${lang} ${FortranCInterface_SOURCE_DIR}/Verify @@ -259,6 +260,9 @@ function(FortranCInterface_VERIFY) "-DCMAKE_C_FLAGS:STRING=${CMAKE_C_FLAGS}" "-DCMAKE_CXX_FLAGS:STRING=${CMAKE_CXX_FLAGS}" "-DCMAKE_Fortran_FLAGS:STRING=${CMAKE_Fortran_FLAGS}" + "-DCMAKE_C_FLAGS_RELEASE:STRING=${CMAKE_C_FLAGS_RELEASE}" + "-DCMAKE_CXX_FLAGS_RELEASE:STRING=${CMAKE_CXX_FLAGS_RELEASE}" + "-DCMAKE_Fortran_FLAGS_RELEASE:STRING=${CMAKE_Fortran_FLAGS_RELEASE}" OUTPUT_VARIABLE _output) file(WRITE "${FortranCInterface_BINARY_DIR}/Verify${lang}/output.txt" "${_output}") -- cgit v0.12 From 60a3c08e968f02877952992782b5745ce2d88119 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20K=C3=BCmmel?= Date: Thu, 11 Oct 2012 20:54:40 +0200 Subject: Fix regression: write compile definitions if any In 0ff4e3f0b88885eafab0693fdf03b44c7a5f9d0c cdefs was changed from a pointer to a vector. --- Source/cmExtraCodeBlocksGenerator.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/cmExtraCodeBlocksGenerator.cxx b/Source/cmExtraCodeBlocksGenerator.cxx index 8b2daba..00e1abc 100644 --- a/Source/cmExtraCodeBlocksGenerator.cxx +++ b/Source/cmExtraCodeBlocksGenerator.cxx @@ -623,7 +623,7 @@ void cmExtraCodeBlocksGenerator::AppendTarget(cmGeneratedFileStream& fout, // the compilerdefines for this target std::string cdefs = gtgt->GetCompileDefinitions(); - if(cdefs.empty()) + if(!cdefs.empty()) { // Expand the list. std::vector defs; -- cgit v0.12 From a573a856581118d7a9d8dd7be1f613ba7b1ddb04 Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Thu, 11 Oct 2012 22:31:35 +0200 Subject: Attempt to fix the compile of cmake on Sun CC. The problem may be that the reportError method is static, so make it non-static on that platform. --- Source/cmGeneratorExpressionEvaluator.cxx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Source/cmGeneratorExpressionEvaluator.cxx b/Source/cmGeneratorExpressionEvaluator.cxx index 92e2052..287066a 100644 --- a/Source/cmGeneratorExpressionEvaluator.cxx +++ b/Source/cmGeneratorExpressionEvaluator.cxx @@ -17,7 +17,10 @@ #include "cmGeneratorExpression.h" //---------------------------------------------------------------------------- -static void reportError(cmGeneratorExpressionContext *context, +#if !defined(__SUNPRO_CC) || __SUNPRO_CC > 0x510 +static +#endif +void reportError(cmGeneratorExpressionContext *context, const std::string &expr, const std::string &result) { context->HadError = true; -- cgit v0.12 From 3eecc12df06c4a4e62f3366a94acbdcdbf189cd2 Mon Sep 17 00:00:00 2001 From: Kitware Robot Date: Sat, 13 Oct 2012 00:01:03 -0400 Subject: CMake Nightly Date Stamp --- Source/CMakeVersion.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/CMakeVersion.cmake b/Source/CMakeVersion.cmake index d38d0f2..19d447e 100644 --- a/Source/CMakeVersion.cmake +++ b/Source/CMakeVersion.cmake @@ -2,5 +2,5 @@ set(CMake_VERSION_MAJOR 2) set(CMake_VERSION_MINOR 8) set(CMake_VERSION_PATCH 9) -set(CMake_VERSION_TWEAK 20121012) +set(CMake_VERSION_TWEAK 20121013) #set(CMake_VERSION_RC 1) -- cgit v0.12 From e0e190c2d0255784b7fd29d6ce30ae33c02a0d1d Mon Sep 17 00:00:00 2001 From: Kitware Robot Date: Sun, 14 Oct 2012 00:01:03 -0400 Subject: CMake Nightly Date Stamp --- Source/CMakeVersion.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/CMakeVersion.cmake b/Source/CMakeVersion.cmake index 19d447e..b854ae5 100644 --- a/Source/CMakeVersion.cmake +++ b/Source/CMakeVersion.cmake @@ -2,5 +2,5 @@ set(CMake_VERSION_MAJOR 2) set(CMake_VERSION_MINOR 8) set(CMake_VERSION_PATCH 9) -set(CMake_VERSION_TWEAK 20121013) +set(CMake_VERSION_TWEAK 20121014) #set(CMake_VERSION_RC 1) -- cgit v0.12 From 561b4baead36227bdd0bf1368c05e4f3d035a083 Mon Sep 17 00:00:00 2001 From: Eric NOULARD Date: Sun, 14 Oct 2012 14:36:14 +0200 Subject: CPACK_XX_ON_ABSOLUTE_INSTALL_DESTINATION is now properly checked for ON/OFF This fixes bug #0013490 --- Source/CPack/cmCPackGenerator.cxx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/CPack/cmCPackGenerator.cxx b/Source/CPack/cmCPackGenerator.cxx index f113400..679b8fa 100644 --- a/Source/CPack/cmCPackGenerator.cxx +++ b/Source/CPack/cmCPackGenerator.cxx @@ -855,7 +855,7 @@ int cmCPackGenerator::InstallProjectViaInstallCMakeProjects( // If CPack was asked to warn on ABSOLUTE INSTALL DESTINATION // then forward request to cmake_install.cmake script - if (this->GetOption("CPACK_WARN_ON_ABSOLUTE_INSTALL_DESTINATION")) + if (this->IsOn("CPACK_WARN_ON_ABSOLUTE_INSTALL_DESTINATION")) { mf->AddDefinition("CMAKE_WARN_ON_ABSOLUTE_INSTALL_DESTINATION", "1"); @@ -865,7 +865,7 @@ int cmCPackGenerator::InstallProjectViaInstallCMakeProjects( // then ask cmake_install.cmake script to error out // as soon as it occurs (before installing file) if (!SupportsAbsoluteDestination() || - this->GetOption("CPACK_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION")) + this->IsOn("CPACK_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION")) { mf->AddDefinition("CMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION", "1"); -- cgit v0.12 From 2aad678f23ead1fa5fb87690b1df1ac2a1996108 Mon Sep 17 00:00:00 2001 From: Eric NOULARD Date: Sun, 14 Oct 2012 14:58:19 +0200 Subject: Document CPACK_COMPONENT_INCLUDE_TOPLEVEL_DIRECTORY and fix some typo. --- Source/CPack/cmCPackDocumentVariables.cxx | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/Source/CPack/cmCPackDocumentVariables.cxx b/Source/CPack/cmCPackDocumentVariables.cxx index 7fa401c..6a841fa 100644 --- a/Source/CPack/cmCPackDocumentVariables.cxx +++ b/Source/CPack/cmCPackDocumentVariables.cxx @@ -31,15 +31,25 @@ void cmCPackDocumentVariables::DefineVariables(cmake* cm) "Each CPack generator as a built-in default value for this" " variable. E.g. Archive generators (ZIP, TGZ, ...) includes" " the top level whereas RPM or DEB don't. The user may override" - " the default value byt setting this variable.\n" + " the default value by setting this variable.\n" "There is a similar variable " - "CPACK_COMPONENT_INCLUDE_TOPLEVEL_DIRECTORY" + "CPACK_COMPONENT_INCLUDE_TOPLEVEL_DIRECTORY " "which may be used to override the behavior for the component" - "packaging case which may have different default value for" - "historical (now backward compatibility) reason.", false, + " packaging case which may have different default value for" + " historical (now backward compatibility) reason.", false, "Variables common to all CPack generators"); cm->DefineProperty + ("CPACK_COMPONENT_INCLUDE_TOPLEVEL_DIRECTORY", cmProperty::VARIABLE, + "Boolean toggle to include/exclude top level directory " + "(component case).", + "Similar usage as CPACK_INCLUDE_TOPLEVEL_DIRECTORY" + " but for the component case. " + "See CPACK_INCLUDE_TOPLEVEL_DIRECTORY documentation for" + " the detail.", false, + "Variables common to all CPack generators"); + + cm->DefineProperty ("CPACK_SET_DESTDIR", cmProperty::VARIABLE, "Boolean toggle to make CPack use DESTDIR mechanism when" " packaging.", "DESTDIR means DESTination DIRectory." -- cgit v0.12 From ddec0533213ef8c7ea80f31d82e4f7baabcd3956 Mon Sep 17 00:00:00 2001 From: Eric NOULARD Date: Sun, 14 Oct 2012 18:50:57 +0200 Subject: Make CPACK_SET_DESTDIR work with archive generator + component-based packaging Fix bug #13004. The patch is from Stanislaw Szymczyk. --- Source/CPack/cmCPackGenerator.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/CPack/cmCPackGenerator.cxx b/Source/CPack/cmCPackGenerator.cxx index f113400..fb08d36 100644 --- a/Source/CPack/cmCPackGenerator.cxx +++ b/Source/CPack/cmCPackGenerator.cxx @@ -905,7 +905,7 @@ int cmCPackGenerator::InstallProjectViaInstallCMakeProjects( localFileName = cmSystemTools::RelativePath(InstallPrefix, fit->c_str()); localFileName = - localFileName.substr(localFileName.find('/')+1, + localFileName.substr(localFileName.find_first_not_of('/'), std::string::npos); Components[installComponent].Files.push_back(localFileName); cmCPackLogger(cmCPackLog::LOG_DEBUG, "Adding file <" -- cgit v0.12 From 3446cb514bd2a4fd8538fd62ee9cf674268657d6 Mon Sep 17 00:00:00 2001 From: Alex Neundorf Date: Sun, 14 Oct 2012 21:16:25 +0200 Subject: Automoc: fix #13572: issue with symbolic links Now automoc always uses GetRealPath() so symbolic links are always resolved and it doesn't end up with twice the same file, once with the real path and once with the symlinked path in some setups where the source dir can be accessed directly and via a symlink Alex --- Source/cmQtAutomoc.cxx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Source/cmQtAutomoc.cxx b/Source/cmQtAutomoc.cxx index 68f1046..942c7ab 100644 --- a/Source/cmQtAutomoc.cxx +++ b/Source/cmQtAutomoc.cxx @@ -170,7 +170,8 @@ void cmQtAutomoc::SetupAutomocTarget(cmTarget* target) ++fileIt) { cmSourceFile* sf = *fileIt; - std::string absFile = sf->GetFullPath(); + std::string absFile = cmsys::SystemTools::GetRealPath( + sf->GetFullPath().c_str()); bool skip = cmSystemTools::IsOn(sf->GetPropertyForUser("SKIP_AUTOMOC")); bool generated = cmSystemTools::IsOn(sf->GetPropertyForUser("GENERATED")); -- cgit v0.12 From 0e903942e79b8f2068c3622a5b402c599860cd8f Mon Sep 17 00:00:00 2001 From: Kitware Robot Date: Mon, 15 Oct 2012 00:01:04 -0400 Subject: CMake Nightly Date Stamp --- Source/CMakeVersion.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/CMakeVersion.cmake b/Source/CMakeVersion.cmake index b854ae5..a0aa60f 100644 --- a/Source/CMakeVersion.cmake +++ b/Source/CMakeVersion.cmake @@ -2,5 +2,5 @@ set(CMake_VERSION_MAJOR 2) set(CMake_VERSION_MINOR 8) set(CMake_VERSION_PATCH 9) -set(CMake_VERSION_TWEAK 20121014) +set(CMake_VERSION_TWEAK 20121015) #set(CMake_VERSION_RC 1) -- cgit v0.12 From 4cbc1e5682e744a5b6255dfa4aac0b99b33e1425 Mon Sep 17 00:00:00 2001 From: Pere Nubiola i Radigales Date: Mon, 15 Oct 2012 21:28:13 +0200 Subject: Find PostgreSQL headers on Debian Fixes Debian bug 665721 (http://bugs.debian.org/665721) --- Modules/FindPostgreSQL.cmake | 1 + 1 file changed, 1 insertion(+) diff --git a/Modules/FindPostgreSQL.cmake b/Modules/FindPostgreSQL.cmake index 6a1d349..e3c898b 100644 --- a/Modules/FindPostgreSQL.cmake +++ b/Modules/FindPostgreSQL.cmake @@ -111,6 +111,7 @@ find_path(PostgreSQL_TYPE_INCLUDE_DIR # Look in other places. ${PostgreSQL_ROOT_DIRECTORIES} PATH_SUFFIXES + postgresql pgsql/server postgresql/server include/server -- cgit v0.12 From 5ca5a09e06131579a8137d91366279a255afdcae Mon Sep 17 00:00:00 2001 From: Kitware Robot Date: Tue, 16 Oct 2012 00:01:04 -0400 Subject: CMake Nightly Date Stamp --- Source/CMakeVersion.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/CMakeVersion.cmake b/Source/CMakeVersion.cmake index a0aa60f..340dbbd 100644 --- a/Source/CMakeVersion.cmake +++ b/Source/CMakeVersion.cmake @@ -2,5 +2,5 @@ set(CMake_VERSION_MAJOR 2) set(CMake_VERSION_MINOR 8) set(CMake_VERSION_PATCH 9) -set(CMake_VERSION_TWEAK 20121015) +set(CMake_VERSION_TWEAK 20121016) #set(CMake_VERSION_RC 1) -- cgit v0.12 From 12c092cf67b39e8519b3672afad05fdc5d8f1d5c Mon Sep 17 00:00:00 2001 From: David Cole Date: Mon, 15 Oct 2012 09:58:10 -0400 Subject: NSIS: Fix incorrect uninstall registry key name (#13578) Thanks to Alexander for the bug report. --- Modules/NSIS.template.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Modules/NSIS.template.in b/Modules/NSIS.template.in index 9e8a6d9..ffc425e 100644 --- a/Modules/NSIS.template.in +++ b/Modules/NSIS.template.in @@ -902,7 +902,7 @@ SectionEnd Function .onInit StrCmp "@CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL@" "ON" 0 inst - ReadRegStr $0 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_NAME@" "UninstallString" + ReadRegStr $0 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "UninstallString" StrCmp $0 "" inst MessageBox MB_YESNOCANCEL|MB_ICONEXCLAMATION \ -- cgit v0.12 From d63eb0be203d82574a37383e63b609bc547869dd Mon Sep 17 00:00:00 2001 From: Jean-Christophe Fillion-Robin Date: Mon, 15 Oct 2012 14:34:01 -0400 Subject: CTest: Ensure CTEST_USE_LAUNCHERS behaves nicely in Superbuild setup When building a project relying on External projects, the launchers were not used in subprojects built without testing enabled. This was preventing errors and warnings associated with these subprojects from being reported on the dashboard. This commit allows enabling the launchers independently of the value of "BUILD_TESTING" using one of these two approaches: 1) By setting both CTEST_USE_LAUNCHERS and the env variable "CTEST_USE_LAUNCHERS_DEFAULT" to 1 in the ctest dashboard driver scripts. 2) By enabling the variable CTEST_USE_LAUNCHERS in the ctest dashboard driver script and also by ensuring every external project passes the option -DCMAKE_PROJECT__INCLUDE:FILEPATH=${CMAKE_ROOT}/Modules/CTestUseLaunchers.cmake --- Modules/CTest.cmake | 14 ++---------- Modules/CTestUseLaunchers.cmake | 49 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 12 deletions(-) create mode 100644 Modules/CTestUseLaunchers.cmake diff --git a/Modules/CTest.cmake b/Modules/CTest.cmake index 1e2dd5c..562e248 100644 --- a/Modules/CTest.cmake +++ b/Modules/CTest.cmake @@ -73,6 +73,8 @@ function(GET_VS_VERSION_STRING generator var) set(${var} ${ver_string} PARENT_SCOPE) endfunction() +include(CTestUseLaunchers) + if(BUILD_TESTING) # Setup some auxilary macros macro(SET_IF_NOT_SET var val) @@ -243,18 +245,6 @@ if(BUILD_TESTING) set(DEFAULT_CTEST_CONFIGURATION_TYPE "Release") endif() - if(NOT "${CMAKE_GENERATOR}" MATCHES "Make") - set(CTEST_USE_LAUNCHERS 0) - endif() - if(CTEST_USE_LAUNCHERS) - set(CTEST_LAUNCH_COMPILE "\"${CMAKE_CTEST_COMMAND}\" --launch --target-name --build-dir --output --source --language --") - set(CTEST_LAUNCH_LINK "\"${CMAKE_CTEST_COMMAND}\" --launch --target-name --build-dir --output --target-type --language --") - set(CTEST_LAUNCH_CUSTOM "\"${CMAKE_CTEST_COMMAND}\" --launch --target-name --build-dir --output --") - set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CTEST_LAUNCH_COMPILE}") - set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK "${CTEST_LAUNCH_LINK}") - set_property(GLOBAL PROPERTY RULE_LAUNCH_CUSTOM "${CTEST_LAUNCH_CUSTOM}") - endif() - mark_as_advanced( BZRCOMMAND BZR_UPDATE_OPTIONS diff --git a/Modules/CTestUseLaunchers.cmake b/Modules/CTestUseLaunchers.cmake new file mode 100644 index 0000000..6731d37 --- /dev/null +++ b/Modules/CTestUseLaunchers.cmake @@ -0,0 +1,49 @@ +# - Set the RULE_LAUNCH_* global properties when CTEST_USE_LAUNCHERS is on. +# CTestUseLaunchers is automatically included when you include(CTest). +# However, it is split out into its own module file so projects +# can use the CTEST_USE_LAUNCHERS functionality independently. +# +# To use launchers, set CTEST_USE_LAUNCHERS to ON in a ctest -S +# dashboard script, and then also set it in the cache of the configured +# project. Both cmake and ctest need to know the value of it for the launchers +# to work properly. CMake needs to know in order to generate proper build +# rules, and ctest, in order to produce the proper error and warning +# analysis. +# +# For convenience, you may set the ENV variable CTEST_USE_LAUNCHERS_DEFAULT +# in your ctest -S script, too. Then, as long as your CMakeLists uses +# include(CTest) or include(CTestUseLaunchers), it will use the value of the +# ENV variable to initialize a CTEST_USE_LAUNCHERS cache variable. This cache +# variable initialization only occurs if CTEST_USE_LAUNCHERS is not already +# defined. + +#============================================================================= +# Copyright 2008-2012 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +if(NOT DEFINED CTEST_USE_LAUNCHERS AND DEFINED ENV{CTEST_USE_LAUNCHERS_DEFAULT}) + set(CTEST_USE_LAUNCHERS "$ENV{CTEST_USE_LAUNCHERS_DEFAULT}" + CACHE INTERNAL "CTEST_USE_LAUNCHERS initial value from ENV") +endif() + +if(NOT "${CMAKE_GENERATOR}" MATCHES "Make") + set(CTEST_USE_LAUNCHERS 0) +endif() + +if(CTEST_USE_LAUNCHERS) + set(CTEST_LAUNCH_COMPILE "\"${CMAKE_CTEST_COMMAND}\" --launch --target-name --build-dir --output --source --language --") + set(CTEST_LAUNCH_LINK "\"${CMAKE_CTEST_COMMAND}\" --launch --target-name --build-dir --output --target-type --language --") + set(CTEST_LAUNCH_CUSTOM "\"${CMAKE_CTEST_COMMAND}\" --launch --target-name --build-dir --output --") + set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CTEST_LAUNCH_COMPILE}") + set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK "${CTEST_LAUNCH_LINK}") + set_property(GLOBAL PROPERTY RULE_LAUNCH_CUSTOM "${CTEST_LAUNCH_CUSTOM}") +endif() -- cgit v0.12 From a56b8e436f4f7e90f62c83fc6e9a1374e73c0624 Mon Sep 17 00:00:00 2001 From: Kitware Robot Date: Wed, 17 Oct 2012 00:01:06 -0400 Subject: CMake Nightly Date Stamp --- Source/CMakeVersion.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/CMakeVersion.cmake b/Source/CMakeVersion.cmake index 340dbbd..6a0145b 100644 --- a/Source/CMakeVersion.cmake +++ b/Source/CMakeVersion.cmake @@ -2,5 +2,5 @@ set(CMake_VERSION_MAJOR 2) set(CMake_VERSION_MINOR 8) set(CMake_VERSION_PATCH 9) -set(CMake_VERSION_TWEAK 20121016) +set(CMake_VERSION_TWEAK 20121017) #set(CMake_VERSION_RC 1) -- cgit v0.12 From e2d141d47410ad17ba2b63fd32a61cead8a50606 Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Fri, 12 Oct 2012 16:51:16 +0200 Subject: GenEx: Parse colon after arguments separator colon specially. The rationale is similar to that in commit b3d8f5da (GenEx: Parse comma after colon tokens specially, 2012-10-04), in that colon tokens should not be parsed as identifier-argument delimiters after the first colon. --- Source/cmGeneratorExpressionParser.cxx | 11 +++++++++-- Tests/GeneratorExpression/CMakeLists.txt | 5 +++++ Tests/GeneratorExpression/check.cmake | 5 +++++ 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/Source/cmGeneratorExpressionParser.cxx b/Source/cmGeneratorExpressionParser.cxx index d95e1cc..d09e412 100644 --- a/Source/cmGeneratorExpressionParser.cxx +++ b/Source/cmGeneratorExpressionParser.cxx @@ -14,6 +14,8 @@ #include "cmGeneratorExpressionEvaluator.h" +#include "assert.h" + //---------------------------------------------------------------------------- cmGeneratorExpressionParser::cmGeneratorExpressionParser( const std::vector &tokens) @@ -124,6 +126,11 @@ void cmGeneratorExpressionParser::ParseGeneratorExpression( parameters.resize(parameters.size() + 1); ++this->it; } + while (this->it->TokenType == cmGeneratorExpressionToken::ColonSeparator) + { + extendText(*(parameters.end() - 1), this->it); + ++this->it; + } while(this->it->TokenType != cmGeneratorExpressionToken::EndExpression) { this->ParseContent(*(parameters.end() - 1)); @@ -133,7 +140,7 @@ void cmGeneratorExpressionParser::ParseGeneratorExpression( parameters.resize(parameters.size() + 1); ++this->it; } - if (this->it->TokenType == cmGeneratorExpressionToken::ColonSeparator) + while (this->it->TokenType == cmGeneratorExpressionToken::ColonSeparator) { extendText(*(parameters.end() - 1), this->it); ++this->it; @@ -233,7 +240,7 @@ void cmGeneratorExpressionParser::ParseContent( } else { - // TODO: Unreachable. Assert? + assert(!"Got unexpected syntax token."); } ++this->it; return; diff --git a/Tests/GeneratorExpression/CMakeLists.txt b/Tests/GeneratorExpression/CMakeLists.txt index 8bc4f32..4967ac0 100644 --- a/Tests/GeneratorExpression/CMakeLists.txt +++ b/Tests/GeneratorExpression/CMakeLists.txt @@ -44,6 +44,11 @@ add_custom_target(check ALL -Dtest_strequal_one_empty=$ -Dtest_angle_r=$ -Dtest_comma=$ + -Dtest_colons_1=$<1::> + -Dtest_colons_2=$<1:::> + -Dtest_colons_3=$<1:Qt5::Core> + -Dtest_colons_4=$<1:C:\\CMake> + -Dtest_colons_5=$<1:C:/CMake> -P ${CMAKE_CURRENT_SOURCE_DIR}/check.cmake COMMAND ${CMAKE_COMMAND} -E echo "check done" VERBATIM diff --git a/Tests/GeneratorExpression/check.cmake b/Tests/GeneratorExpression/check.cmake index ec1f130..e46c1c1 100644 --- a/Tests/GeneratorExpression/check.cmake +++ b/Tests/GeneratorExpression/check.cmake @@ -45,3 +45,8 @@ check(test_strequal_both_empty "1") check(test_strequal_one_empty "0") check(test_angle_r ">") check(test_comma ",") +check(test_colons_1 ":") +check(test_colons_2 "::") +check(test_colons_3 "Qt5::Core") +check(test_colons_4 "C:\\\\CMake") +check(test_colons_5 "C:/CMake") -- cgit v0.12 From 145a4af8d3812fbd6a28f27e6fd4bb4d60d715af Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Fri, 12 Oct 2012 17:17:30 +0200 Subject: GenEx: Test the use of generator expressions to generate lists. We can't test this in the GeneratorExpression unit test because the ';' chars are processed specically by the CMake function argument parser. --- Tests/CompileDefinitions/compiletest.cpp | 9 +++++++++ Tests/CompileDefinitions/target_prop/CMakeLists.txt | 1 + Tests/IncludeDirectories/TargetIncludeDirectories/CMakeLists.txt | 4 ++++ Tests/IncludeDirectories/TargetIncludeDirectories/main.cpp | 2 ++ 4 files changed, 16 insertions(+) diff --git a/Tests/CompileDefinitions/compiletest.cpp b/Tests/CompileDefinitions/compiletest.cpp index 4a68a07..f18e59e 100644 --- a/Tests/CompileDefinitions/compiletest.cpp +++ b/Tests/CompileDefinitions/compiletest.cpp @@ -34,6 +34,15 @@ enum { #ifdef GE_NOT_DEFINED #error Expect not defined generator expression #endif + +#ifndef ARGUMENT +#error Expected define expanded from list +#endif +#ifndef LIST +#error Expected define expanded from list +#endif + +// TEST_GENERATOR_EXPRESSIONS #endif int main(int argc, char **argv) diff --git a/Tests/CompileDefinitions/target_prop/CMakeLists.txt b/Tests/CompileDefinitions/target_prop/CMakeLists.txt index fcb22b0..abdf257 100644 --- a/Tests/CompileDefinitions/target_prop/CMakeLists.txt +++ b/Tests/CompileDefinitions/target_prop/CMakeLists.txt @@ -12,4 +12,5 @@ set_property(TARGET target_prop_executable APPEND PROPERTY COMPILE_DEFINITIONS TEST_GENERATOR_EXPRESSIONS "$<1:CMAKE_IS_DECLARATIVE>" "$<0:GE_NOT_DEFINED>" + "$<1:ARGUMENT;LIST>" ) diff --git a/Tests/IncludeDirectories/TargetIncludeDirectories/CMakeLists.txt b/Tests/IncludeDirectories/TargetIncludeDirectories/CMakeLists.txt index 4b6f682..d71f92e 100644 --- a/Tests/IncludeDirectories/TargetIncludeDirectories/CMakeLists.txt +++ b/Tests/IncludeDirectories/TargetIncludeDirectories/CMakeLists.txt @@ -15,6 +15,8 @@ create_header(baz) create_header(bang) create_header(bing) create_header(bung) +create_header(arguments) +create_header(list) set(CMAKE_INCLUDE_CURRENT_DIR ON) @@ -30,3 +32,5 @@ set_property(TARGET TargetIncludeDirectories APPEND PROPERTY include_directories("${CMAKE_CURRENT_BINARY_DIR}/baz") include_directories("$<1:${CMAKE_CURRENT_BINARY_DIR}/bung>") include_directories("sing$<1:/ting>") + +include_directories("$<1:${CMAKE_CURRENT_BINARY_DIR}/arguments;${CMAKE_CURRENT_BINARY_DIR}/list>") diff --git a/Tests/IncludeDirectories/TargetIncludeDirectories/main.cpp b/Tests/IncludeDirectories/TargetIncludeDirectories/main.cpp index 63217f4..030bb1c 100644 --- a/Tests/IncludeDirectories/TargetIncludeDirectories/main.cpp +++ b/Tests/IncludeDirectories/TargetIncludeDirectories/main.cpp @@ -7,6 +7,8 @@ #include "bing.h" #include "bung.h" #include "ting.h" +#include "arguments.h" +#include "list.h" int main(int, char**) { -- cgit v0.12 From e7230c71fdf9ed58b2e8fbf2064452a41ea57180 Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Fri, 12 Oct 2012 17:34:16 +0200 Subject: GenEx: Fix termination bugs in generator expression parser. Content which is incomplete as a generator expression could cause segfaults by advancing an iterator beyond end() and dereferencing it. Such incomplete generator expressions should be treated as plain text instead. --- Source/cmGeneratorExpressionParser.cxx | 37 +++++++++++++++++++++----------- Tests/GeneratorExpression/CMakeLists.txt | 22 +++++++++++++++++++ Tests/GeneratorExpression/check.cmake | 22 +++++++++++++++++++ 3 files changed, 68 insertions(+), 13 deletions(-) diff --git a/Source/cmGeneratorExpressionParser.cxx b/Source/cmGeneratorExpressionParser.cxx index d09e412..341832a 100644 --- a/Source/cmGeneratorExpressionParser.cxx +++ b/Source/cmGeneratorExpressionParser.cxx @@ -77,6 +77,7 @@ static void extendResult(std::vector &result, void cmGeneratorExpressionParser::ParseGeneratorExpression( std::vector &result) { + assert(this->it != this->Tokens.end()); unsigned int nestedLevel = this->NestingLevel; ++this->NestingLevel; @@ -98,7 +99,8 @@ void cmGeneratorExpressionParser::ParseGeneratorExpression( // ERROR } - if (this->it->TokenType == cmGeneratorExpressionToken::EndExpression) + if (this->it != this->Tokens.end() && + this->it->TokenType == cmGeneratorExpressionToken::EndExpression) { GeneratorExpressionContent *content = new GeneratorExpressionContent( startToken->Content, this->it->Content @@ -115,42 +117,50 @@ void cmGeneratorExpressionParser::ParseGeneratorExpression( std::vector::const_iterator> commaTokens; std::vector::const_iterator colonToken; - if (this->it->TokenType == cmGeneratorExpressionToken::ColonSeparator) + if (this->it != this->Tokens.end() && + this->it->TokenType == cmGeneratorExpressionToken::ColonSeparator) { colonToken = this->it; parameters.resize(parameters.size() + 1); ++this->it; - while (this->it->TokenType == cmGeneratorExpressionToken::CommaSeparator) + + while (this->it != this->Tokens.end() && + this->it->TokenType == cmGeneratorExpressionToken::CommaSeparator) { commaTokens.push_back(this->it); parameters.resize(parameters.size() + 1); ++this->it; } - while (this->it->TokenType == cmGeneratorExpressionToken::ColonSeparator) + while (this->it != this->Tokens.end() && + this->it->TokenType == cmGeneratorExpressionToken::ColonSeparator) { extendText(*(parameters.end() - 1), this->it); ++this->it; } - while(this->it->TokenType != cmGeneratorExpressionToken::EndExpression) + while (this->it != this->Tokens.end() && + this->it->TokenType != cmGeneratorExpressionToken::EndExpression) { this->ParseContent(*(parameters.end() - 1)); - while (this->it->TokenType == cmGeneratorExpressionToken::CommaSeparator) + if (this->it == this->Tokens.end()) + { + break; + } + while (this->it != this->Tokens.end() && + this->it->TokenType == cmGeneratorExpressionToken::CommaSeparator) { commaTokens.push_back(this->it); parameters.resize(parameters.size() + 1); ++this->it; } - while (this->it->TokenType == cmGeneratorExpressionToken::ColonSeparator) + while (this->it != this->Tokens.end() && + this->it->TokenType == cmGeneratorExpressionToken::ColonSeparator) { extendText(*(parameters.end() - 1), this->it); ++this->it; } - if (this->it == this->Tokens.end()) - { - break; - } } - if(this->it->TokenType == cmGeneratorExpressionToken::EndExpression) + if(this->it != this->Tokens.end() + && this->it->TokenType == cmGeneratorExpressionToken::EndExpression) { --this->NestingLevel; ++this->it; @@ -201,6 +211,7 @@ void cmGeneratorExpressionParser::ParseGeneratorExpression( void cmGeneratorExpressionParser::ParseContent( std::vector &result) { + assert(this->it != this->Tokens.end()); switch(this->it->TokenType) { case cmGeneratorExpressionToken::Text: @@ -245,5 +256,5 @@ void cmGeneratorExpressionParser::ParseContent( ++this->it; return; } - // Unreachable. Assert? + assert(!"Unhandled token in generator expression."); } diff --git a/Tests/GeneratorExpression/CMakeLists.txt b/Tests/GeneratorExpression/CMakeLists.txt index 4967ac0..cb01ec1 100644 --- a/Tests/GeneratorExpression/CMakeLists.txt +++ b/Tests/GeneratorExpression/CMakeLists.txt @@ -49,6 +49,28 @@ add_custom_target(check ALL -Dtest_colons_3=$<1:Qt5::Core> -Dtest_colons_4=$<1:C:\\CMake> -Dtest_colons_5=$<1:C:/CMake> + -Dtest_incomplete_1=$< + -Dtest_incomplete_2=$ + -Dtest_incomplete_6= + -Dtest_incomplete_7=$thing + -Dtest_incomplete_14=$< + -Dtest_incomplete_18=$<1:some,thing + -Dtest_incomplete_19=$<1:some,thing$ + -Dtest_incomplete_20=$ + -Dtest_incomplete_21=$ + -Dtest_incomplete_22=$") +check(test_incomplete_6 "") +check(test_incomplete_7 "$") +check(test_incomplete_20 "$") +check(test_incomplete_21 "$") +check(test_incomplete_22 "$ Date: Mon, 15 Oct 2012 15:33:06 +0200 Subject: GenEx: Break if there are no more commas in the container This was causing an assert on Windows which has safety features for iterating past the end of the container. --- Source/cmGeneratorExpressionParser.cxx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Source/cmGeneratorExpressionParser.cxx b/Source/cmGeneratorExpressionParser.cxx index 341832a..64d992a 100644 --- a/Source/cmGeneratorExpressionParser.cxx +++ b/Source/cmGeneratorExpressionParser.cxx @@ -192,6 +192,10 @@ void cmGeneratorExpressionParser::ParseGeneratorExpression( { extendText(result, *commaIt); } + else + { + break; + } } } return; -- cgit v0.12 From fd59b10e7149026658d8dcdedfef0b3810fea226 Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Mon, 15 Oct 2012 15:34:43 +0200 Subject: GenEx: Add some more asserts to verify code-sanity. --- Source/cmGeneratorExpressionParser.cxx | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/Source/cmGeneratorExpressionParser.cxx b/Source/cmGeneratorExpressionParser.cxx index 64d992a..7a8fc51 100644 --- a/Source/cmGeneratorExpressionParser.cxx +++ b/Source/cmGeneratorExpressionParser.cxx @@ -106,6 +106,7 @@ void cmGeneratorExpressionParser::ParseGeneratorExpression( startToken->Content, this->it->Content - startToken->Content + this->it->Length); + assert(this->it != this->Tokens.end()); ++this->it; --this->NestingLevel; content->SetIdentifier(identifier); @@ -122,6 +123,7 @@ void cmGeneratorExpressionParser::ParseGeneratorExpression( { colonToken = this->it; parameters.resize(parameters.size() + 1); + assert(this->it != this->Tokens.end()); ++this->it; while (this->it != this->Tokens.end() && @@ -129,12 +131,14 @@ void cmGeneratorExpressionParser::ParseGeneratorExpression( { commaTokens.push_back(this->it); parameters.resize(parameters.size() + 1); + assert(this->it != this->Tokens.end()); ++this->it; } while (this->it != this->Tokens.end() && this->it->TokenType == cmGeneratorExpressionToken::ColonSeparator) { extendText(*(parameters.end() - 1), this->it); + assert(this->it != this->Tokens.end()); ++this->it; } while (this->it != this->Tokens.end() && @@ -150,12 +154,14 @@ void cmGeneratorExpressionParser::ParseGeneratorExpression( { commaTokens.push_back(this->it); parameters.resize(parameters.size() + 1); + assert(this->it != this->Tokens.end()); ++this->it; } while (this->it != this->Tokens.end() && this->it->TokenType == cmGeneratorExpressionToken::ColonSeparator) { extendText(*(parameters.end() - 1), this->it); + assert(this->it != this->Tokens.end()); ++this->it; } } @@ -163,6 +169,7 @@ void cmGeneratorExpressionParser::ParseGeneratorExpression( && this->it->TokenType == cmGeneratorExpressionToken::EndExpression) { --this->NestingLevel; + assert(this->it != this->Tokens.end()); ++this->it; } } @@ -185,6 +192,7 @@ void cmGeneratorExpressionParser::ParseGeneratorExpression( parameters.end(); std::vector::const_iterator commaIt = commaTokens.begin(); + assert(parameters.size() > commaTokens.size()); for ( ; pit != pend; ++pit, ++commaIt) { extendResult(result, *pit); @@ -232,6 +240,7 @@ void cmGeneratorExpressionParser::ParseContent( TextContent *textContent = static_cast(*(result.end() - 1)); textContent->Extend(this->it->Length); + assert(this->it != this->Tokens.end()); ++this->it; return; } @@ -239,10 +248,12 @@ void cmGeneratorExpressionParser::ParseContent( cmGeneratorExpressionEvaluator* n = new TextContent(this->it->Content, this->it->Length); result.push_back(n); + assert(this->it != this->Tokens.end()); ++this->it; return ; } case cmGeneratorExpressionToken::BeginExpression: + assert(this->it != this->Tokens.end()); ++this->it; this->ParseGeneratorExpression(result); return; @@ -257,6 +268,7 @@ void cmGeneratorExpressionParser::ParseContent( { assert(!"Got unexpected syntax token."); } + assert(this->it != this->Tokens.end()); ++this->it; return; } -- cgit v0.12 From f7ef32b00b8d4fe74bfdcee3e690309e9a89e251 Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Tue, 16 Oct 2012 00:22:18 +0200 Subject: GenEx: Replace some failing tests with Borland and NMake makefiles. The '<<' is a special sequence on those platforms, so it can't appear in the test. --- Tests/GeneratorExpression/CMakeLists.txt | 5 ++--- Tests/GeneratorExpression/check.cmake | 5 ++--- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/Tests/GeneratorExpression/CMakeLists.txt b/Tests/GeneratorExpression/CMakeLists.txt index cb01ec1..891fa11 100644 --- a/Tests/GeneratorExpression/CMakeLists.txt +++ b/Tests/GeneratorExpression/CMakeLists.txt @@ -62,15 +62,14 @@ add_custom_target(check ALL -Dtest_incomplete_11=$thing - -Dtest_incomplete_14=$< -Dtest_incomplete_15=$ -Dtest_incomplete_18=$<1:some,thing -Dtest_incomplete_19=$<1:some,thing$ -Dtest_incomplete_20=$ -Dtest_incomplete_21=$ - -Dtest_incomplete_22=$") check(test_incomplete_15 "$") check(test_incomplete_20 "$") check(test_incomplete_21 "$") -check(test_incomplete_22 "$ Date: Mon, 15 Oct 2012 10:27:42 +0200 Subject: GenEx: Fix reporting about not-found include directories and libraries. This fixes a regression introduced in commit 290e92ad (Move GetIncludeDirectories to cmGeneratorTarget, 2012-09-16) which loops over cmGeneratorTargets before they get created, so the container is empty. --- Source/cmGeneratorExpression.cxx | 49 ++++++++++++++++++++++ Source/cmGeneratorExpression.h | 7 ++++ Source/cmGlobalGenerator.cxx | 22 +++++++--- Source/cmMakeDepend.cxx | 19 +++++++-- Tests/RunCMake/CMakeLists.txt | 1 + Tests/RunCMake/include_directories/CMakeLists.txt | 3 ++ .../include_directories/NotFoundContent-result.txt | 1 + .../include_directories/NotFoundContent-stderr.txt | 6 +++ .../include_directories/NotFoundContent.cmake | 9 ++++ .../include_directories/RunCMakeTest.cmake | 3 ++ 10 files changed, 110 insertions(+), 10 deletions(-) create mode 100644 Tests/RunCMake/include_directories/CMakeLists.txt create mode 100644 Tests/RunCMake/include_directories/NotFoundContent-result.txt create mode 100644 Tests/RunCMake/include_directories/NotFoundContent-stderr.txt create mode 100644 Tests/RunCMake/include_directories/NotFoundContent.cmake create mode 100644 Tests/RunCMake/include_directories/RunCMakeTest.cmake diff --git a/Source/cmGeneratorExpression.cxx b/Source/cmGeneratorExpression.cxx index 3f8e962..7d8df37 100644 --- a/Source/cmGeneratorExpression.cxx +++ b/Source/cmGeneratorExpression.cxx @@ -13,6 +13,7 @@ #include "cmMakefile.h" #include "cmTarget.h" +#include "assert.h" #include @@ -129,3 +130,51 @@ cmCompiledGeneratorExpression::~cmCompiledGeneratorExpression() delete *it; } } + +std::string cmGeneratorExpression::Preprocess(const std::string &input, + PreprocessContext context) +{ + if (context != StripAllGeneratorExpressions) + { + assert(!"cmGeneratorExpression::Preprocess called with invalid args"); + return std::string(); + } + + std::string result; + std::string::size_type pos = 0; + std::string::size_type lastPos = pos; + while((pos = input.find("$<", lastPos)) != input.npos) + { + result += input.substr(lastPos, pos - lastPos); + pos += 2; + int nestingLevel = 1; + const char *c = input.c_str() + pos; + const char * const cStart = c; + for ( ; *c; ++c) + { + if(c[0] == '$' && c[1] == '<') + { + ++nestingLevel; + ++c; + continue; + } + if(c[0] == '>') + { + --nestingLevel; + if (nestingLevel == 0) + { + break; + } + } + } + const std::string::size_type traversed = (c - cStart) + 1; + if (!*c) + { + result += "$<" + input.substr(pos, traversed); + } + pos += traversed; + lastPos = pos; + } + result += input.substr(lastPos); + return result; +} diff --git a/Source/cmGeneratorExpression.h b/Source/cmGeneratorExpression.h index d37ce97..29d3f44 100644 --- a/Source/cmGeneratorExpression.h +++ b/Source/cmGeneratorExpression.h @@ -48,6 +48,13 @@ public: const cmCompiledGeneratorExpression& Parse(std::string const& input); const cmCompiledGeneratorExpression& Parse(const char* input); + enum PreprocessContext { + StripAllGeneratorExpressions + }; + + static std::string Preprocess(const std::string &input, + PreprocessContext context); + private: cmGeneratorExpression(const cmGeneratorExpression &); void operator=(const cmGeneratorExpression &); diff --git a/Source/cmGlobalGenerator.cxx b/Source/cmGlobalGenerator.cxx index 09588f9..23ec08a 100644 --- a/Source/cmGlobalGenerator.cxx +++ b/Source/cmGlobalGenerator.cxx @@ -25,6 +25,7 @@ #include "cmComputeTargetDepends.h" #include "cmGeneratedFileStream.h" #include "cmGeneratorTarget.h" +#include "cmGeneratorExpression.h" #include @@ -1152,13 +1153,13 @@ void cmGlobalGenerator::CheckLocalGenerators() { manager = this->LocalGenerators[i]->GetMakefile()->GetCacheManager(); this->LocalGenerators[i]->ConfigureFinalPass(); - cmGeneratorTargetsType targets = - this->LocalGenerators[i]->GetMakefile()->GetGeneratorTargets(); - for (cmGeneratorTargetsType::iterator l = targets.begin(); + cmTargets &targets = + this->LocalGenerators[i]->GetMakefile()->GetTargets(); + for (cmTargets::iterator l = targets.begin(); l != targets.end(); l++) { const cmTarget::LinkLibraryVectorType& libs = - l->second->Target->GetOriginalLinkLibraries(); + l->second.GetOriginalLinkLibraries(); for(cmTarget::LinkLibraryVectorType::const_iterator lib = libs.begin(); lib != libs.end(); ++lib) { @@ -1174,14 +1175,23 @@ void cmGlobalGenerator::CheckLocalGenerators() } std::string text = notFoundMap[varName]; text += "\n linked by target \""; - text += l->second->GetName(); + text += l->second.GetName(); text += "\" in directory "; text+=this->LocalGenerators[i]->GetMakefile()->GetCurrentDirectory(); notFoundMap[varName] = text; } } std::vector incs; - this->LocalGenerators[i]->GetIncludeDirectories(incs, l->second); + const char *incDirProp = l->second.GetProperty("INCLUDE_DIRECTORIES"); + if (!incDirProp) + { + continue; + } + + std::string incDirs = cmGeneratorExpression::Preprocess(incDirProp, + cmGeneratorExpression::StripAllGeneratorExpressions); + + cmSystemTools::ExpandListArgument(incDirs.c_str(), incs); for( std::vector::const_iterator incDir = incs.begin(); incDir != incs.end(); ++incDir) diff --git a/Source/cmMakeDepend.cxx b/Source/cmMakeDepend.cxx index 75a76a4..2ae35ef 100644 --- a/Source/cmMakeDepend.cxx +++ b/Source/cmMakeDepend.cxx @@ -11,6 +11,7 @@ ============================================================================*/ #include "cmMakeDepend.h" #include "cmSystemTools.h" +#include "cmGeneratorExpression.h" #include @@ -58,12 +59,22 @@ void cmMakeDepend::SetMakefile(cmMakefile* makefile) // Now extract any include paths from the targets std::set uniqueIncludes; std::vector orderedAndUniqueIncludes; - cmGeneratorTargetsType targets = this->Makefile->GetGeneratorTargets(); - for (cmGeneratorTargetsType::iterator l = targets.begin(); + cmTargets &targets = this->Makefile->GetTargets(); + for (cmTargets::iterator l = targets.begin(); l != targets.end(); ++l) { - const std::vector& includes = - l->second->GetIncludeDirectories(); + const char *incDirProp = l->second.GetProperty("INCLUDE_DIRECTORIES"); + if (!incDirProp) + { + continue; + } + + std::string incDirs = cmGeneratorExpression::Preprocess(incDirProp, + cmGeneratorExpression::StripAllGeneratorExpressions); + + std::vector includes; + cmSystemTools::ExpandListArgument(incDirs.c_str(), includes); + for(std::vector::const_iterator j = includes.begin(); j != includes.end(); ++j) { diff --git a/Tests/RunCMake/CMakeLists.txt b/Tests/RunCMake/CMakeLists.txt index 2fa7141..8c67625 100644 --- a/Tests/RunCMake/CMakeLists.txt +++ b/Tests/RunCMake/CMakeLists.txt @@ -53,6 +53,7 @@ add_RunCMake_test(ObjectLibrary) add_RunCMake_test(build_command) add_RunCMake_test(find_package) add_RunCMake_test(include) +add_RunCMake_test(include_directories) add_RunCMake_test(list) if("${CMAKE_TEST_GENERATOR}" MATCHES "Visual Studio [^6]") diff --git a/Tests/RunCMake/include_directories/CMakeLists.txt b/Tests/RunCMake/include_directories/CMakeLists.txt new file mode 100644 index 0000000..e8db6b0 --- /dev/null +++ b/Tests/RunCMake/include_directories/CMakeLists.txt @@ -0,0 +1,3 @@ +cmake_minimum_required(VERSION 2.8) +project(${RunCMake_TEST} NONE) +include(${RunCMake_TEST}.cmake) diff --git a/Tests/RunCMake/include_directories/NotFoundContent-result.txt b/Tests/RunCMake/include_directories/NotFoundContent-result.txt new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/Tests/RunCMake/include_directories/NotFoundContent-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/include_directories/NotFoundContent-stderr.txt b/Tests/RunCMake/include_directories/NotFoundContent-stderr.txt new file mode 100644 index 0000000..f608d63 --- /dev/null +++ b/Tests/RunCMake/include_directories/NotFoundContent-stderr.txt @@ -0,0 +1,6 @@ +CMake Error: The following variables are used in this project, but they are set to NOTFOUND. +Please set them or make sure they are set and tested correctly in the CMake files: +NotThere1 + used as include directory in directory .* +NotThere2 + used as include directory in directory .* diff --git a/Tests/RunCMake/include_directories/NotFoundContent.cmake b/Tests/RunCMake/include_directories/NotFoundContent.cmake new file mode 100644 index 0000000..9677e0c --- /dev/null +++ b/Tests/RunCMake/include_directories/NotFoundContent.cmake @@ -0,0 +1,9 @@ + +include_directories(NotThere1-NOTFOUND) + +include_directories($<1:There1-NOTFOUND>) + +file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/dummy.cpp" "int main(int,char**) { return 0; }\n") +add_executable(dummy "${CMAKE_CURRENT_BINARY_DIR}/dummy.cpp") +set_property(TARGET dummy APPEND PROPERTY INCLUDE_DIRECTORIES "NotThere2-NOTFOUND") +set_property(TARGET dummy APPEND PROPERTY INCLUDE_DIRECTORIES "$<1:There2-NOTFOUND>") diff --git a/Tests/RunCMake/include_directories/RunCMakeTest.cmake b/Tests/RunCMake/include_directories/RunCMakeTest.cmake new file mode 100644 index 0000000..aee3f79 --- /dev/null +++ b/Tests/RunCMake/include_directories/RunCMakeTest.cmake @@ -0,0 +1,3 @@ +include(RunCMake) + +run_cmake(NotFoundContent) -- cgit v0.12 From 2a6bd96c1354484b4f9e71d11422f8da028c1622 Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Mon, 15 Oct 2012 10:42:42 +0200 Subject: Fix config-specific INCLUDE_DIRECTORIES in multi-config generators Commit 08cb4fa4 (Process generator expressions in the INCLUDE_DIRECTORIES property, 2012-09-18) contained an incorrect assumption that CMAKE_BUILD_TYPE was set on the makefile for each generated configuration in multi-config generators. Fix that by making the GetIncludeDirectories API depend on the config. --- Source/cmExtraCodeBlocksGenerator.cxx | 4 +++- Source/cmExtraEclipseCDT4Generator.cxx | 3 ++- Source/cmGeneratorTarget.cxx | 4 ++-- Source/cmGeneratorTarget.h | 2 +- Source/cmGlobalXCodeGenerator.cxx | 3 ++- Source/cmLocalGenerator.cxx | 5 +++-- Source/cmLocalGenerator.h | 2 +- Source/cmLocalVisualStudio6Generator.cxx | 26 +++++++++++++++++++++----- Source/cmLocalVisualStudio6Generator.h | 2 +- Source/cmLocalVisualStudio7Generator.cxx | 2 +- Source/cmMakefileTargetGenerator.cxx | 18 ++++++++++++++---- Source/cmNinjaTargetGenerator.cxx | 6 ++++-- Source/cmVisualStudio10TargetGenerator.cxx | 7 ++++--- Templates/DLLHeader.dsptemplate | 16 ++++++++-------- Templates/EXEHeader.dsptemplate | 18 +++++++++--------- Templates/EXEWinHeader.dsptemplate | 16 ++++++++-------- Templates/staticLibHeader.dsptemplate | 16 ++++++++-------- 17 files changed, 92 insertions(+), 58 deletions(-) diff --git a/Source/cmExtraCodeBlocksGenerator.cxx b/Source/cmExtraCodeBlocksGenerator.cxx index 8b2daba..8d5bd4e 100644 --- a/Source/cmExtraCodeBlocksGenerator.cxx +++ b/Source/cmExtraCodeBlocksGenerator.cxx @@ -640,8 +640,10 @@ void cmExtraCodeBlocksGenerator::AppendTarget(cmGeneratedFileStream& fout, std::set uniqIncludeDirs; std::vector includes; + const char *config = target->GetMakefile() + ->GetDefinition("CMAKE_BUILD_TYPE"); target->GetMakefile()->GetLocalGenerator()-> - GetIncludeDirectories(includes, gtgt); + GetIncludeDirectories(includes, gtgt, "C", config); for(std::vector::const_iterator dirIt=includes.begin(); dirIt != includes.end(); ++dirIt) diff --git a/Source/cmExtraEclipseCDT4Generator.cxx b/Source/cmExtraEclipseCDT4Generator.cxx index f1d9c31..689f213 100644 --- a/Source/cmExtraEclipseCDT4Generator.cxx +++ b/Source/cmExtraEclipseCDT4Generator.cxx @@ -890,7 +890,8 @@ void cmExtraEclipseCDT4Generator::CreateCProjectFile() const l != targets.end(); ++l) { std::vector includeDirs; - (*it)->GetIncludeDirectories(includeDirs, l->second); + const char *config = mf->GetDefinition("CMAKE_BUILD_TYPE"); + (*it)->GetIncludeDirectories(includeDirs, l->second, "C", config); this->AppendIncludeDirectories(fout, includeDirs, emmited); } } diff --git a/Source/cmGeneratorTarget.cxx b/Source/cmGeneratorTarget.cxx index d4b57f4..19b55c6 100644 --- a/Source/cmGeneratorTarget.cxx +++ b/Source/cmGeneratorTarget.cxx @@ -287,7 +287,8 @@ const char* cmGeneratorTarget::GetCreateRuleVariable() } //---------------------------------------------------------------------------- -std::vector cmGeneratorTarget::GetIncludeDirectories() +std::vector cmGeneratorTarget::GetIncludeDirectories( + const char *config) { std::vector includes; const char *prop = this->Target->GetProperty("INCLUDE_DIRECTORIES"); @@ -296,7 +297,6 @@ std::vector cmGeneratorTarget::GetIncludeDirectories() return includes; } - const char *config = this->Makefile->GetDefinition("CMAKE_BUILD_TYPE"); cmListFileBacktrace lfbt; cmGeneratorExpression ge(lfbt); diff --git a/Source/cmGeneratorTarget.h b/Source/cmGeneratorTarget.h index 8ea17d7..a29a9f9 100644 --- a/Source/cmGeneratorTarget.h +++ b/Source/cmGeneratorTarget.h @@ -72,7 +72,7 @@ public: const char* GetCreateRuleVariable(); /** Get the include directories for this target. */ - std::vector GetIncludeDirectories(); + std::vector GetIncludeDirectories(const char *config); std::string GetCompileDefinitions(const char *config = 0); diff --git a/Source/cmGlobalXCodeGenerator.cxx b/Source/cmGlobalXCodeGenerator.cxx index 95c6807..30d8f18 100644 --- a/Source/cmGlobalXCodeGenerator.cxx +++ b/Source/cmGlobalXCodeGenerator.cxx @@ -1947,7 +1947,8 @@ void cmGlobalXCodeGenerator::CreateBuildSettings(cmTarget& target, BuildObjectListOrString dirs(this, this->XcodeVersion >= 30); BuildObjectListOrString fdirs(this, this->XcodeVersion >= 30); std::vector includes; - this->CurrentLocalGenerator->GetIncludeDirectories(includes, gtgt); + this->CurrentLocalGenerator->GetIncludeDirectories(includes, gtgt, + "C", configName); std::set emitted; emitted.insert("/System/Library/Frameworks"); for(std::vector::iterator i = includes.begin(); diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx index c7995a3..4f4f725 100644 --- a/Source/cmLocalGenerator.cxx +++ b/Source/cmLocalGenerator.cxx @@ -1324,7 +1324,8 @@ std::string cmLocalGenerator::GetIncludeFlags( //---------------------------------------------------------------------------- void cmLocalGenerator::GetIncludeDirectories(std::vector& dirs, cmGeneratorTarget* target, - const char* lang) + const char* lang, + const char *config) { // Need to decide whether to automatically include the source and // binary directories at the beginning of the include path. @@ -1417,7 +1418,7 @@ void cmLocalGenerator::GetIncludeDirectories(std::vector& dirs, // Get the target-specific include directories. std::vector includes; - includes = target->GetIncludeDirectories(); + includes = target->GetIncludeDirectories(config); // Support putting all the in-project include directories first if // it is requested by the project. diff --git a/Source/cmLocalGenerator.h b/Source/cmLocalGenerator.h index 49bce38..bd58218 100644 --- a/Source/cmLocalGenerator.h +++ b/Source/cmLocalGenerator.h @@ -212,7 +212,7 @@ public: /** Get the include flags for the current makefile and language. */ void GetIncludeDirectories(std::vector& dirs, cmGeneratorTarget* target, - const char* lang = "C"); + const char* lang = "C", const char *config = 0); /** Compute the language used to compile the given source file. */ const char* GetSourceFileLanguage(const cmSourceFile& source); diff --git a/Source/cmLocalVisualStudio6Generator.cxx b/Source/cmLocalVisualStudio6Generator.cxx index 72b56e7..f15322b 100644 --- a/Source/cmLocalVisualStudio6Generator.cxx +++ b/Source/cmLocalVisualStudio6Generator.cxx @@ -853,7 +853,8 @@ inline std::string removeQuotes(const std::string& s) std::string -cmLocalVisualStudio6Generator::GetTargetIncludeOptions(cmTarget &target) +cmLocalVisualStudio6Generator::GetTargetIncludeOptions(cmTarget &target, + const char *config) { std::string includeOptions; @@ -868,7 +869,7 @@ cmLocalVisualStudio6Generator::GetTargetIncludeOptions(cmTarget &target) for(int j=0; j < 2; ++j) { std::vector includes; - this->GetIncludeDirectories(includes, gt); + this->GetIncludeDirectories(includes, gt, "C", config); std::vector::iterator i; for(i = includes.begin(); i != includes.end(); ++i) @@ -1147,7 +1148,15 @@ void cmLocalVisualStudio6Generator #endif // Get include options for this target. - std::string includeOptions = this->GetTargetIncludeOptions(target); + std::string includeOptionsDebug = this->GetTargetIncludeOptions(target, + "DEBUG"); + std::string includeOptionsRelease = this->GetTargetIncludeOptions(target, + "RELEASE"); + std::string includeOptionsRelWithDebInfo = this->GetTargetIncludeOptions( + target, + "RELWITHDEBINFO"); + std::string includeOptionsMinSizeRel = this->GetTargetIncludeOptions(target, + "MINSIZEREL"); // Get extra linker options for this target type. std::string extraLinkOptions; @@ -1560,8 +1569,15 @@ void cmLocalVisualStudio6Generator cmSystemTools::ReplaceString(line, "CM_MULTILINE_OPTIONS_RELWITHDEBINFO", optionsRelWithDebInfo.c_str()); - cmSystemTools::ReplaceString(line, "BUILD_INCLUDES", - includeOptions.c_str()); + cmSystemTools::ReplaceString(line, "BUILD_INCLUDES_DEBUG", + includeOptionsDebug.c_str()); + cmSystemTools::ReplaceString(line, "BUILD_INCLUDES_RELEASE", + includeOptionsRelease.c_str()); + cmSystemTools::ReplaceString(line, "BUILD_INCLUDES_MINSIZEREL", + includeOptionsMinSizeRel.c_str()); + cmSystemTools::ReplaceString(line, "BUILD_INCLUDES_RELWITHDEBINFO", + includeOptionsRelWithDebInfo.c_str()); + cmSystemTools::ReplaceString(line, "TARGET_VERSION_FLAG", targetVersionFlag.c_str()); cmSystemTools::ReplaceString(line, "TARGET_IMPLIB_FLAG_DEBUG", diff --git a/Source/cmLocalVisualStudio6Generator.h b/Source/cmLocalVisualStudio6Generator.h index 9315d97..f45bc17 100644 --- a/Source/cmLocalVisualStudio6Generator.h +++ b/Source/cmLocalVisualStudio6Generator.h @@ -90,7 +90,7 @@ private: std::string& options); void OutputObjects(cmTarget& target, const char* tool, std::string& options); - std::string GetTargetIncludeOptions(cmTarget &target); + std::string GetTargetIncludeOptions(cmTarget &target, const char *config); std::vector Configurations; std::string GetConfigName(std::string const& configuration) const; diff --git a/Source/cmLocalVisualStudio7Generator.cxx b/Source/cmLocalVisualStudio7Generator.cxx index 33d6e05..f9a2d32 100644 --- a/Source/cmLocalVisualStudio7Generator.cxx +++ b/Source/cmLocalVisualStudio7Generator.cxx @@ -814,7 +814,7 @@ void cmLocalVisualStudio7Generator::WriteConfiguration(std::ostream& fout, targetOptions.OutputAdditionalOptions(fout, "\t\t\t\t", "\n"); fout << "\t\t\t\tAdditionalIncludeDirectories=\""; std::vector includes; - this->GetIncludeDirectories(includes, gt); + this->GetIncludeDirectories(includes, gt, "C", configName); std::vector::iterator i = includes.begin(); for(;i != includes.end(); ++i) { diff --git a/Source/cmMakefileTargetGenerator.cxx b/Source/cmMakefileTargetGenerator.cxx index 5cc67e2..3d02d6a 100644 --- a/Source/cmMakefileTargetGenerator.cxx +++ b/Source/cmMakefileTargetGenerator.cxx @@ -1057,8 +1057,11 @@ void cmMakefileTargetGenerator::WriteTargetDependRules() *this->InfoFileStream << "SET(CMAKE_C_TARGET_INCLUDE_PATH\n"; std::vector includes; + + const char *config = this->Makefile->GetDefinition("CMAKE_BUILD_TYPE"); this->LocalGenerator->GetIncludeDirectories(includes, - this->GeneratorTarget); + this->GeneratorTarget, + "C", config); for(std::vector::iterator i = includes.begin(); i != includes.end(); ++i) { @@ -1543,8 +1546,11 @@ std::string cmMakefileTargetGenerator::GetFrameworkFlags() emitted.insert("/System/Library/Frameworks"); #endif std::vector includes; + + const char *config = this->Makefile->GetDefinition("CMAKE_BUILD_TYPE"); this->LocalGenerator->GetIncludeDirectories(includes, - this->GeneratorTarget); + this->GeneratorTarget, + "C", config); std::vector::iterator i; // check all include directories for frameworks as this // will already have added a -F for the framework @@ -1849,8 +1855,10 @@ void cmMakefileTargetGenerator::AddIncludeFlags(std::string& flags, std::vector includes; + const char *config = this->Makefile->GetDefinition("CMAKE_BUILD_TYPE"); this->LocalGenerator->GetIncludeDirectories(includes, - this->GeneratorTarget, lang); + this->GeneratorTarget, + lang, config); std::string includeFlags = this->LocalGenerator->GetIncludeFlags(includes, lang, useResponseFile); @@ -1953,8 +1961,10 @@ void cmMakefileTargetGenerator::AddFortranFlags(std::string& flags) this->Makefile->GetDefinition("CMAKE_Fortran_MODPATH_FLAG")) { std::vector includes; + const char *config = this->Makefile->GetDefinition("CMAKE_BUILD_TYPE"); this->LocalGenerator->GetIncludeDirectories(includes, - this->GeneratorTarget); + this->GeneratorTarget, + "C", config); for(std::vector::const_iterator idi = includes.begin(); idi != includes.end(); ++idi) { diff --git a/Source/cmNinjaTargetGenerator.cxx b/Source/cmNinjaTargetGenerator.cxx index 612e047..ec312e6 100644 --- a/Source/cmNinjaTargetGenerator.cxx +++ b/Source/cmNinjaTargetGenerator.cxx @@ -152,8 +152,10 @@ cmNinjaTargetGenerator::ComputeFlagsForObject(cmSourceFile *source, // Add include directory flags. { std::vector includes; - this->LocalGenerator->GetIncludeDirectories(includes, this->GeneratorTarget, - language.c_str()); + const char *config = this->Makefile->GetDefinition("CMAKE_BUILD_TYPE"); + this->LocalGenerator->GetIncludeDirectories(includes, + this->GeneratorTarget, + language.c_str(), config); std::string includeFlags = this->LocalGenerator->GetIncludeFlags(includes, language.c_str(), language == "RC" ? true : false); // full include paths for RC diff --git a/Source/cmVisualStudio10TargetGenerator.cxx b/Source/cmVisualStudio10TargetGenerator.cxx index ab57a32..1e37ca5 100644 --- a/Source/cmVisualStudio10TargetGenerator.cxx +++ b/Source/cmVisualStudio10TargetGenerator.cxx @@ -1586,12 +1586,13 @@ void cmVisualStudio10TargetGenerator::WriteItemDefinitionGroups() std::vector *configs = static_cast (this->GlobalGenerator)->GetConfigurations(); - std::vector includes; - this->LocalGenerator->GetIncludeDirectories(includes, - this->GeneratorTarget); for(std::vector::iterator i = configs->begin(); i != configs->end(); ++i) { + std::vector includes; + this->LocalGenerator->GetIncludeDirectories(includes, + this->GeneratorTarget, + "C", i->c_str()); this->WritePlatformConfigTag("ItemDefinitionGroup", i->c_str(), 1); *this->BuildFileStream << "\n"; // output cl compile flags diff --git a/Templates/DLLHeader.dsptemplate b/Templates/DLLHeader.dsptemplate index c752fdb..d9bccaf 100644 --- a/Templates/DLLHeader.dsptemplate +++ b/Templates/DLLHeader.dsptemplate @@ -59,13 +59,13 @@ RSC=rc.exe # PROP Target_Dir "" # ADD BASE CPP /nologo /D "WIN32" /D "_WINDOWS" /D "_USRDLL" OUTPUT_LIBNAME_EXPORTS /FD /c # ADD CPP /nologo /D "WIN32" /D "_WINDOWS" /D "_USRDLL" /FD /c -# ADD CPP BUILD_INCLUDES EXTRA_DEFINES OUTPUT_LIBNAME_EXPORTS +# ADD CPP BUILD_INCLUDES_RELEASE EXTRA_DEFINES OUTPUT_LIBNAME_EXPORTS # ADD CPP CMAKE_CXX_FLAGS # ADD CPP CMAKE_CXX_FLAGS_RELEASE # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC BUILD_INCLUDES /l 0x409 /d "NDEBUG" +# ADD RSC BUILD_INCLUDES_RELEASE /l 0x409 /d "NDEBUG" # ADD RSC COMPILE_DEFINITIONS # ADD RSC COMPILE_DEFINITIONS_RELEASE BSC32=bscmake.exe @@ -93,13 +93,13 @@ CMAKE_CUSTOM_RULE_CODE_RELEASE # PROP Target_Dir "" # ADD BASE CPP /nologo /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" OUTPUT_LIBNAME_EXPORTS /FD /c # ADD CPP /nologo /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_USRDLL" /FD /c -# ADD CPP BUILD_INCLUDES EXTRA_DEFINES OUTPUT_LIBNAME_EXPORTS +# ADD CPP BUILD_INCLUDES_DEBUG EXTRA_DEFINES OUTPUT_LIBNAME_EXPORTS # ADD CPP CMAKE_CXX_FLAGS # ADD CPP CMAKE_CXX_FLAGS_DEBUG # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC BUILD_INCLUDES /l 0x409 /d "_DEBUG" +# ADD RSC BUILD_INCLUDES_DEBUG /l 0x409 /d "_DEBUG" # ADD RSC COMPILE_DEFINITIONS # ADD RSC COMPILE_DEFINITIONS_DEBUG BSC32=bscmake.exe @@ -129,13 +129,13 @@ CMAKE_CUSTOM_RULE_CODE_DEBUG # ADD BASE CPP /nologo /D "WIN32" /D "_WINDOWS" /D "_USRDLL" /FD /c OUTPUT_LIBNAME_EXPORTS # SUBTRACT BASE CPP /YX # ADD CPP /nologo /D "WIN32" /D "_WINDOWS" /D "_USRDLL" /FD /c -# ADD CPP BUILD_INCLUDES EXTRA_DEFINES OUTPUT_LIBNAME_EXPORTS +# ADD CPP BUILD_INCLUDES_MINSIZEREL EXTRA_DEFINES OUTPUT_LIBNAME_EXPORTS # ADD CPP CMAKE_CXX_FLAGS # ADD CPP CMAKE_CXX_FLAGS_MINSIZEREL # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC BUILD_INCLUDES /l 0x409 /d "NDEBUG" +# ADD RSC BUILD_INCLUDES_MINSIZEREL /l 0x409 /d "NDEBUG" # ADD RSC COMPILE_DEFINITIONS # ADD RSC COMPILE_DEFINITIONS_MINSIZEREL BSC32=bscmake.exe @@ -163,13 +163,13 @@ CMAKE_CUSTOM_RULE_CODE_MINSIZEREL # PROP Target_Dir "" # ADD BASE CPP /nologo /D "WIN32" /D "_WINDOWS" /D "_USRDLL" OUTPUT_LIBNAME_EXPORTS /FD /c # ADD CPP /nologo /D "WIN32" /D "_WINDOWS" /D "_USRDLL" /FD /c -# ADD CPP BUILD_INCLUDES EXTRA_DEFINES OUTPUT_LIBNAME_EXPORTS +# ADD CPP BUILD_INCLUDES_RELWITHDEBINFO EXTRA_DEFINES OUTPUT_LIBNAME_EXPORTS # ADD CPP CMAKE_CXX_FLAGS # ADD CPP CMAKE_CXX_FLAGS_RELWITHDEBINFO # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC BUILD_INCLUDES /l 0x409 /d "NDEBUG" +# ADD RSC BUILD_INCLUDES_RELWITHDEBINFO /l 0x409 /d "NDEBUG" # ADD RSC COMPILE_DEFINITIONS # ADD RSC COMPILE_DEFINITIONS_RELWITHDEBINFO BSC32=bscmake.exe diff --git a/Templates/EXEHeader.dsptemplate b/Templates/EXEHeader.dsptemplate index f48eacc..3a6d2fe 100644 --- a/Templates/EXEHeader.dsptemplate +++ b/Templates/EXEHeader.dsptemplate @@ -58,11 +58,11 @@ RSC=rc.exe # PROP Target_Dir "" # ADD BASE CPP /nologo /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c # ADD CPP /nologo /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c -# ADD CPP BUILD_INCLUDES EXTRA_DEFINES OUTPUT_LIBNAME_EXPORTS +# ADD CPP BUILD_INCLUDES_RELEASE EXTRA_DEFINES OUTPUT_LIBNAME_EXPORTS # ADD CPP CMAKE_CXX_FLAGS # ADD CPP CMAKE_CXX_FLAGS_RELEASE # ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC BUILD_INCLUDES /l 0x409 /d "NDEBUG" +# ADD RSC BUILD_INCLUDES_RELEASE /l 0x409 /d "NDEBUG" # ADD RSC COMPILE_DEFINITIONS # ADD RSC COMPILE_DEFINITIONS_RELEASE BSC32=bscmake.exe @@ -90,13 +90,13 @@ CMAKE_CUSTOM_RULE_CODE_RELEASE # PROP Target_Dir "" # ADD BASE CPP /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /FD /GZ /c # ADD CPP /nologo /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /FD /GZ /c -# ADD CPP BUILD_INCLUDES EXTRA_DEFINES OUTPUT_LIBNAME_EXPORTS +# ADD CPP BUILD_INCLUDES_DEBUG EXTRA_DEFINES OUTPUT_LIBNAME_EXPORTS # ADD CPP CMAKE_CXX_FLAGS # ADD CPP CMAKE_CXX_FLAGS_DEBUG # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC BUILD_INCLUDES /l 0x409 /d "_DEBUG" +# ADD RSC BUILD_INCLUDES_DEBUG /l 0x409 /d "_DEBUG" # ADD RSC COMPILE_DEFINITIONS # ADD RSC COMPILE_DEFINITIONS_DEBUG BSC32=bscmake.exe @@ -122,12 +122,12 @@ CMAKE_CUSTOM_RULE_CODE_DEBUG # PROP Intermediate_Dir "MinSizeRel" # PROP Target_Dir "" # ADD BASE CPP /nologo /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c -# ADD CPP /nologo /D "WIN32" BUILD_INCLUDES EXTRA_DEFINES /D "NDEBUG" /D "_CONSOLE" /FD /c -# ADD CPP BUILD_INCLUDES EXTRA_DEFINES OUTPUT_LIBNAME_EXPORTS +# ADD CPP /nologo /D "WIN32" BUILD_INCLUDES_MINSIZEREL EXTRA_DEFINES /D "NDEBUG" /D "_CONSOLE" /FD /c +# ADD CPP BUILD_INCLUDES_MINSIZEREL EXTRA_DEFINES OUTPUT_LIBNAME_EXPORTS # ADD CPP CMAKE_CXX_FLAGS # ADD CPP CMAKE_CXX_FLAGS_MINSIZEREL # ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC BUILD_INCLUDES /l 0x409 /d "NDEBUG" +# ADD RSC BUILD_INCLUDES_MINSIZEREL /l 0x409 /d "NDEBUG" # ADD RSC COMPILE_DEFINITIONS # ADD RSC COMPILE_DEFINITIONS_MINSIZEREL BSC32=bscmake.exe @@ -155,11 +155,11 @@ CMAKE_CUSTOM_RULE_CODE_MINSIZEREL # PROP Target_Dir "" # ADD BASE CPP /nologo /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c # ADD CPP /nologo /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c -# ADD CPP BUILD_INCLUDES EXTRA_DEFINES OUTPUT_LIBNAME_EXPORTS +# ADD CPP BUILD_INCLUDES_RELWITHDEBINFO EXTRA_DEFINES OUTPUT_LIBNAME_EXPORTS # ADD CPP CMAKE_CXX_FLAGS # ADD CPP CMAKE_CXX_FLAGS_RELWITHDEBINFO # ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC BUILD_INCLUDES /l 0x409 /d "NDEBUG" +# ADD RSC BUILD_INCLUDES_RELWITHDEBINFO /l 0x409 /d "NDEBUG" # ADD RSC COMPILE_DEFINITIONS # ADD RSC COMPILE_DEFINITIONS_RELWITHDEBINFO BSC32=bscmake.exe diff --git a/Templates/EXEWinHeader.dsptemplate b/Templates/EXEWinHeader.dsptemplate index e0d2264..350e3ea 100644 --- a/Templates/EXEWinHeader.dsptemplate +++ b/Templates/EXEWinHeader.dsptemplate @@ -58,13 +58,13 @@ RSC=rc.exe # PROP Target_Dir "" # ADD BASE CPP /nologo /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c # ADD CPP /nologo /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c -# ADD CPP BUILD_INCLUDES EXTRA_DEFINES OUTPUT_LIBNAME_EXPORTS +# ADD CPP BUILD_INCLUDES_RELEASE EXTRA_DEFINES OUTPUT_LIBNAME_EXPORTS # ADD CPP CMAKE_CXX_FLAGS # ADD CPP CMAKE_CXX_FLAGS_RELEASE # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC BUILD_INCLUDES /l 0x409 /d "NDEBUG" +# ADD RSC BUILD_INCLUDES_RELEASE /l 0x409 /d "NDEBUG" # ADD RSC COMPILE_DEFINITIONS # ADD RSC COMPILE_DEFINITIONS_RELEASE BSC32=bscmake.exe @@ -92,13 +92,13 @@ CMAKE_CUSTOM_RULE_CODE_RELEASE # PROP Target_Dir "" # ADD BASE CPP /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c # ADD CPP /nologo /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /GZ /c -# ADD CPP BUILD_INCLUDES EXTRA_DEFINES OUTPUT_LIBNAME_EXPORTS +# ADD CPP BUILD_INCLUDES_DEBUG EXTRA_DEFINES OUTPUT_LIBNAME_EXPORTS # ADD CPP CMAKE_CXX_FLAGS # ADD CPP CMAKE_CXX_FLAGS_DEBUG # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC BUILD_INCLUDES /l 0x409 /d "_DEBUG" +# ADD RSC BUILD_INCLUDES_DEBUG /l 0x409 /d "_DEBUG" # ADD RSC COMPILE_DEFINITIONS # ADD RSC COMPILE_DEFINITIONS_DEBUG BSC32=bscmake.exe @@ -125,11 +125,11 @@ CMAKE_CUSTOM_RULE_CODE_DEBUG # PROP Target_Dir "" # ADD BASE CPP /nologo /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c # ADD CPP /nologo /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c -# ADD CPP BUILD_INCLUDES EXTRA_DEFINES OUTPUT_LIBNAME_EXPORTS +# ADD CPP BUILD_INCLUDES_MINSIZEREL EXTRA_DEFINES OUTPUT_LIBNAME_EXPORTS # ADD CPP CMAKE_CXX_FLAGS # ADD CPP CMAKE_CXX_FLAGS_MINSIZEREL # ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC BUILD_INCLUDES /l 0x409 /d "NDEBUG" +# ADD RSC BUILD_INCLUDES_MINSIZEREL /l 0x409 /d "NDEBUG" # ADD RSC COMPILE_DEFINITIONS # ADD RSC COMPILE_DEFINITIONS_MINSIZEREL BSC32=bscmake.exe @@ -157,13 +157,13 @@ CMAKE_CUSTOM_RULE_CODE_MINSIZEREL # PROP Target_Dir "" # ADD BASE CPP /nologo /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c # ADD CPP /nologo /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c -# ADD CPP BUILD_INCLUDES EXTRA_DEFINES OUTPUT_LIBNAME_EXPORTS +# ADD CPP BUILD_INCLUDES_RELWITHDEBINFO EXTRA_DEFINES OUTPUT_LIBNAME_EXPORTS # ADD CPP CMAKE_CXX_FLAGS # ADD CPP CMAKE_CXX_FLAGS_RELWITHDEBINFO # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC BUILD_INCLUDES /l 0x409 /d "NDEBUG" +# ADD RSC BUILD_INCLUDES_RELWITHDEBINFO /l 0x409 /d "NDEBUG" # ADD RSC COMPILE_DEFINITIONS # ADD RSC COMPILE_DEFINITIONS_RELWITHDEBINFO BSC32=bscmake.exe diff --git a/Templates/staticLibHeader.dsptemplate b/Templates/staticLibHeader.dsptemplate index 16b784e..a8892e1 100644 --- a/Templates/staticLibHeader.dsptemplate +++ b/Templates/staticLibHeader.dsptemplate @@ -55,11 +55,11 @@ RSC=rc.exe # PROP Target_Dir "" # ADD BASE CPP /nologo /D "WIN32" /D "NDEBUG" /D "_LIB" /FD /c # ADD CPP /nologo /D "NDEBUG" /D "WIN32" /D "_LIB" /FD /c -# ADD CPP BUILD_INCLUDES EXTRA_DEFINES +# ADD CPP BUILD_INCLUDES_RELEASE EXTRA_DEFINES # ADD CPP CMAKE_CXX_FLAGS # ADD CPP CMAKE_CXX_FLAGS_RELEASE # ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC BUILD_INCLUDES /l 0x409 /d "NDEBUG" +# ADD RSC BUILD_INCLUDES_RELEASE /l 0x409 /d "NDEBUG" # ADD RSC COMPILE_DEFINITIONS # ADD RSC COMPILE_DEFINITIONS_RELEASE BSC32=bscmake.exe @@ -85,11 +85,11 @@ CMAKE_CUSTOM_RULE_CODE_RELEASE # PROP Target_Dir "" # ADD BASE CPP /nologo /D "WIN32" /D "_DEBUG" /D "_LIB" /FD /c # ADD CPP /nologo /D "_DEBUG" /D "WIN32" /D "_LIB" /FD /GZ /c -# ADD CPP BUILD_INCLUDES EXTRA_DEFINES +# ADD CPP BUILD_INCLUDES_DEBUG EXTRA_DEFINES # ADD CPP CMAKE_CXX_FLAGS # ADD CPP CMAKE_CXX_FLAGS_DEBUG # ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC BUILD_INCLUDES /l 0x409 /d "_DEBUG" +# ADD RSC BUILD_INCLUDES_DEBUG /l 0x409 /d "_DEBUG" # ADD RSC COMPILE_DEFINITIONS # ADD RSC COMPILE_DEFINITIONS_DEBUG BSC32=bscmake.exe @@ -116,11 +116,11 @@ CMAKE_CUSTOM_RULE_CODE_DEBUG # PROP Target_Dir "" # ADD BASE CPP /nologo /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_USRDLL" /D "_ATL_DLL" /FD /c # ADD CPP /nologo /D "NDEBUG" /D "_ATL_DLL" /D "WIN32" /D "_WINDOWS" /D "_USRDLL" /FD /c -# ADD CPP BUILD_INCLUDES EXTRA_DEFINES +# ADD CPP BUILD_INCLUDES_MINSIZEREL EXTRA_DEFINES # ADD CPP CMAKE_CXX_FLAGS # ADD CPP CMAKE_CXX_FLAGS_MINSIZEREL # ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC BUILD_INCLUDES /l 0x409 /d "NDEBUG" +# ADD RSC BUILD_INCLUDES_MINSIZEREL /l 0x409 /d "NDEBUG" # ADD RSC COMPILE_DEFINITIONS # ADD RSC COMPILE_DEFINITIONS_MINSIZEREL BSC32=bscmake.exe @@ -146,11 +146,11 @@ CMAKE_CUSTOM_RULE_CODE_MINSIZEREL # PROP Target_Dir "" # ADD BASE CPP /nologo /D "WIN32" /D "NDEBUG" /D "_LIB" /FD /c # ADD CPP /nologo /D "NDEBUG" /D "WIN32" /D "_LIB" /FD /c -# ADD CPP BUILD_INCLUDES EXTRA_DEFINES +# ADD CPP BUILD_INCLUDES_RELWITHDEBINFO EXTRA_DEFINES # ADD CPP CMAKE_CXX_FLAGS # ADD CPP CMAKE_CXX_FLAGS_RELWITHDEBINFO # ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC BUILD_INCLUDES /l 0x409 /d "NDEBUG" +# ADD RSC BUILD_INCLUDES_RELWITHDEBINFO /l 0x409 /d "NDEBUG" # ADD RSC COMPILE_DEFINITIONS # ADD RSC COMPILE_DEFINITIONS_RELWITHDEBINFO BSC32=bscmake.exe -- cgit v0.12