diff options
-rw-r--r-- | Help/release/dev/CMakePushCheckState-CMAKE_EXTRA_INCLUDE_FILES.rst | 5 | ||||
-rw-r--r-- | Modules/CMakePushCheckState.cmake | 7 | ||||
-rw-r--r-- | Source/CMakeVersion.cmake | 2 | ||||
-rw-r--r-- | Source/cmExtraEclipseCDT4Generator.cxx | 72 | ||||
-rw-r--r-- | Source/cmExtraEclipseCDT4Generator.h | 3 | ||||
-rw-r--r-- | Source/kwsys/SystemTools.cxx | 5 | ||||
-rw-r--r-- | Tests/CMakeTests/PushCheckStateTest.cmake.in | 57 |
7 files changed, 109 insertions, 42 deletions
diff --git a/Help/release/dev/CMakePushCheckState-CMAKE_EXTRA_INCLUDE_FILES.rst b/Help/release/dev/CMakePushCheckState-CMAKE_EXTRA_INCLUDE_FILES.rst new file mode 100644 index 0000000..a4e9a14 --- /dev/null +++ b/Help/release/dev/CMakePushCheckState-CMAKE_EXTRA_INCLUDE_FILES.rst @@ -0,0 +1,5 @@ +CMakePushCheckState-CMAKE_EXTRA_INCLUDE_FILE +-------------------------------------------- + +* The :module:`CMakePushCheckState` module now pushes/pops/resets the variable + ``CMAKE_EXTRA_INCLUDE_FILE`` used in :module:`CheckTypeSize`. diff --git a/Modules/CMakePushCheckState.cmake b/Modules/CMakePushCheckState.cmake index bf4ec0e..6958da1 100644 --- a/Modules/CMakePushCheckState.cmake +++ b/Modules/CMakePushCheckState.cmake @@ -8,8 +8,8 @@ # CMAKE_POP_CHECK_STATE() and CMAKE_RESET_CHECK_STATE() These macros can # be used to save, restore and reset (i.e., clear contents) the state of # the variables CMAKE_REQUIRED_FLAGS, CMAKE_REQUIRED_DEFINITIONS, -# CMAKE_REQUIRED_LIBRARIES and CMAKE_REQUIRED_INCLUDES used by the -# various Check-files coming with CMake, like e.g. +# CMAKE_REQUIRED_LIBRARIES, CMAKE_REQUIRED_INCLUDES and CMAKE_EXTRA_INCLUDE_FILES +# used by the various Check-files coming with CMake, like e.g. # check_function_exists() etc. The variable contents are pushed on a # stack, pushing multiple times is supported. This is useful e.g. when # executing such tests in a Find-module, where they have to be set, but @@ -49,6 +49,7 @@ macro(CMAKE_RESET_CHECK_STATE) + set(CMAKE_EXTRA_INCLUDE_FILES) set(CMAKE_REQUIRED_INCLUDES) set(CMAKE_REQUIRED_DEFINITIONS) set(CMAKE_REQUIRED_LIBRARIES) @@ -65,6 +66,7 @@ macro(CMAKE_PUSH_CHECK_STATE) math(EXPR _CMAKE_PUSH_CHECK_STATE_COUNTER "${_CMAKE_PUSH_CHECK_STATE_COUNTER}+1") + set(_CMAKE_EXTRA_INCLUDE_FILES_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER} ${CMAKE_EXTRA_INCLUDE_FILES}) set(_CMAKE_REQUIRED_INCLUDES_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER} ${CMAKE_REQUIRED_INCLUDES}) set(_CMAKE_REQUIRED_DEFINITIONS_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER} ${CMAKE_REQUIRED_DEFINITIONS}) set(_CMAKE_REQUIRED_LIBRARIES_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER} ${CMAKE_REQUIRED_LIBRARIES}) @@ -82,6 +84,7 @@ macro(CMAKE_POP_CHECK_STATE) # don't pop more than we pushed if("${_CMAKE_PUSH_CHECK_STATE_COUNTER}" GREATER "0") + set(CMAKE_EXTRA_INCLUDE_FILES ${_CMAKE_EXTRA_INCLUDE_FILES_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}}) set(CMAKE_REQUIRED_INCLUDES ${_CMAKE_REQUIRED_INCLUDES_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}}) set(CMAKE_REQUIRED_DEFINITIONS ${_CMAKE_REQUIRED_DEFINITIONS_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}}) set(CMAKE_REQUIRED_LIBRARIES ${_CMAKE_REQUIRED_LIBRARIES_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}}) diff --git a/Source/CMakeVersion.cmake b/Source/CMakeVersion.cmake index 9ccf7a8..0214250 100644 --- a/Source/CMakeVersion.cmake +++ b/Source/CMakeVersion.cmake @@ -1,5 +1,5 @@ # CMake version number components. set(CMake_VERSION_MAJOR 3) set(CMake_VERSION_MINOR 5) -set(CMake_VERSION_PATCH 20160331) +set(CMake_VERSION_PATCH 20160401) #set(CMake_VERSION_RC 1) diff --git a/Source/cmExtraEclipseCDT4Generator.cxx b/Source/cmExtraEclipseCDT4Generator.cxx index f0227b0..9e67301 100644 --- a/Source/cmExtraEclipseCDT4Generator.cxx +++ b/Source/cmExtraEclipseCDT4Generator.cxx @@ -467,6 +467,49 @@ void cmExtraEclipseCDT4Generator::CreateProjectFile() xml.EndElement(); // projectDescription } +void cmExtraEclipseCDT4Generator::WriteGroups( + std::vector<cmSourceGroup> const& sourceGroups, + std::string& linkName, cmXMLWriter& xml) +{ + for(std::vector<cmSourceGroup>::const_iterator sgIt = sourceGroups.begin(); + sgIt != sourceGroups.end(); ++sgIt) + { + std::string linkName3 = linkName; + linkName3 += "/"; + linkName3 += sgIt->GetFullName(); + + size_t pos = 0; + while ((pos = linkName3.find("\\", pos)) != std::string::npos) + { + linkName3.replace(pos, 1, "/"); + pos++; + } + + this->AppendLinkedResource(xml, linkName3, "virtual:/virtual", + VirtualFolder); + std::vector<cmSourceGroup> const& children = sgIt->GetGroupChildren(); + if (!children.empty()) + { + this->WriteGroups(children, linkName, xml); + } + std::vector<const cmSourceFile*> sFiles = sgIt->GetSourceFiles(); + for(std::vector<const cmSourceFile*>::const_iterator + fileIt = sFiles.begin(); fileIt != sFiles.end(); ++fileIt) + { + std::string fullPath = (*fileIt)->GetFullPath(); + + if (!cmSystemTools::FileIsDirectory(fullPath)) + { + std::string linkName4 = linkName3; + linkName4 += "/"; + linkName4 += cmSystemTools::GetFilenameName(fullPath); + this->AppendLinkedResource(xml, linkName4, + this->GetEclipsePath(fullPath), + LinkToFile); + } + } + } +} //---------------------------------------------------------------------------- void cmExtraEclipseCDT4Generator::CreateLinksForTargets(cmXMLWriter& xml) @@ -523,34 +566,7 @@ void cmExtraEclipseCDT4Generator::CreateLinksForTargets(cmXMLWriter& xml) sourceGroup->AssignSource(*sfIt); } - for(std::vector<cmSourceGroup>::iterator sgIt = sourceGroups.begin(); - sgIt != sourceGroups.end(); - ++sgIt) - { - std::string linkName3 = linkName2; - linkName3 += "/"; - linkName3 += sgIt->GetFullName(); - this->AppendLinkedResource(xml, linkName3, "virtual:/virtual", - VirtualFolder); - - std::vector<const cmSourceFile*> sFiles = sgIt->GetSourceFiles(); - for(std::vector<const cmSourceFile*>::const_iterator fileIt = - sFiles.begin(); - fileIt != sFiles.end(); - ++fileIt) - { - std::string fullPath = (*fileIt)->GetFullPath(); - if (!cmSystemTools::FileIsDirectory(fullPath)) - { - std::string linkName4 = linkName3; - linkName4 += "/"; - linkName4 += cmSystemTools::GetFilenameName(fullPath); - this->AppendLinkedResource(xml, linkName4, - this->GetEclipsePath(fullPath), - LinkToFile); - } - } - } + this->WriteGroups(sourceGroups, linkName2, xml); } break; // ignore all others: diff --git a/Source/cmExtraEclipseCDT4Generator.h b/Source/cmExtraEclipseCDT4Generator.h index 4032a6c..26955ef 100644 --- a/Source/cmExtraEclipseCDT4Generator.h +++ b/Source/cmExtraEclipseCDT4Generator.h @@ -18,6 +18,7 @@ class cmMakefile; class cmXMLWriter; +class cmSourceGroup; /** \class cmExtraEclipseCDT4Generator * \brief Write Eclipse project files for Makefile based projects @@ -100,6 +101,8 @@ private: static void AddEnvVar(std::ostream& out, const char* envVar, cmLocalGenerator* lg); + void WriteGroups(std::vector<cmSourceGroup> const& sourceGroups, + std::string& linkName, cmXMLWriter& xml); void CreateLinksToSubprojects(cmXMLWriter& xml, const std::string& baseDir); void CreateLinksForTargets(cmXMLWriter& xml); diff --git a/Source/kwsys/SystemTools.cxx b/Source/kwsys/SystemTools.cxx index 0c7f419..c6e668d 100644 --- a/Source/kwsys/SystemTools.cxx +++ b/Source/kwsys/SystemTools.cxx @@ -2855,6 +2855,7 @@ static bool DeleteJunction(const std::wstring& source) return false; #endif } + #endif bool SystemTools::RemoveFile(const std::string& source) @@ -2884,9 +2885,9 @@ bool SystemTools::RemoveFile(const std::string& source) SetLastError(err); return false; } - if (IsJunction(ws) && !DeleteJunction(ws)) + if (IsJunction(ws) && DeleteJunction(ws)) { - return false; + return true; } if (DeleteFileW(ws.c_str()) || GetLastError() == ERROR_FILE_NOT_FOUND || diff --git a/Tests/CMakeTests/PushCheckStateTest.cmake.in b/Tests/CMakeTests/PushCheckStateTest.cmake.in index e707b9a..b4c48f4 100644 --- a/Tests/CMakeTests/PushCheckStateTest.cmake.in +++ b/Tests/CMakeTests/PushCheckStateTest.cmake.in @@ -1,29 +1,68 @@ include(CMakePushCheckState) +set(CMAKE_EXTRA_INCLUDE_FILES file1) +set(CMAKE_REQUIRED_INCLUDES dir1) set(CMAKE_REQUIRED_DEFINITIONS defs1 ) +set(CMAKE_REQUIRED_LIBRARIES lib1) +set(CMAKE_REQUIRED_FLAGS flag1) +set(CMAKE_REQUIRED_QUIET 1) cmake_push_check_state() +set(CMAKE_EXTRA_INCLUDE_FILES file2) +set(CMAKE_REQUIRED_INCLUDES dir2) set(CMAKE_REQUIRED_DEFINITIONS defs2) +set(CMAKE_REQUIRED_LIBRARIES lib2) +set(CMAKE_REQUIRED_FLAGS flag2) +set(CMAKE_REQUIRED_QUIET 2) cmake_push_check_state() +set(CMAKE_EXTRA_INCLUDE_FILES file3) set(CMAKE_REQUIRED_DEFINITIONS defs3) +set(CMAKE_REQUIRED_INCLUDES dir3) +set(CMAKE_REQUIRED_DEFINITIONS defs3) +set(CMAKE_REQUIRED_LIBRARIES lib3) +set(CMAKE_REQUIRED_FLAGS flag3) +set(CMAKE_REQUIRED_QUIET 3) cmake_pop_check_state() -if (NOT "${CMAKE_REQUIRED_DEFINITIONS}" STREQUAL "defs2") - set(fatal TRUE) - message("ERROR: "CMAKE_REQUIRED_DEFINITIONS is \"${CMAKE_REQUIRED_DEFINITIONS}\" (expected \"defs2\")" ) -endif() +foreach(pair IN ITEMS + EXTRA_INCLUDE_FILES|file2 + REQUIRED_INCLUDES|dir2 + REQUIRED_DEFINITIONS|defs2 + REQUIRED_LIBRARIES|lib2 + REQUIRED_FLAGS|flag2 + REQUIRED_QUIET|2 + ) + string(REPLACE "|" ";" pair "${pair}") + list(GET pair 0 var) + list(GET pair 1 expected) + if (NOT "${CMAKE_${var}}" STREQUAL "${expected}") + set(fatal TRUE) + message("ERROR: CMAKE_${var} is \"${CMAKE_${var}}\" (expected \"${expected}\")" ) + endif() +endforeach() cmake_pop_check_state() -if (NOT "${CMAKE_REQUIRED_DEFINITIONS}" STREQUAL "defs1") - set(fatal TRUE) - message("ERROR: "CMAKE_REQUIRED_DEFINITIONS is \"${CMAKE_REQUIRED_DEFINITIONS}\" (expected \"defs1\")" ) -endif() - +foreach(pair IN ITEMS + EXTRA_INCLUDE_FILES|file1 + REQUIRED_INCLUDES|dir1 + REQUIRED_DEFINITIONS|defs1 + REQUIRED_LIBRARIES|lib1 + REQUIRED_FLAGS|flag1 + REQUIRED_QUIET|1 + ) + string(REPLACE "|" ";" pair "${pair}") + list(GET pair 0 var) + list(GET pair 1 expected) + if (NOT "${CMAKE_${var}}" STREQUAL "${expected}") + set(fatal TRUE) + message("ERROR: CMAKE_${var} is \"${CMAKE_${var}}\" (expected \"${expected}\")" ) + endif() +endforeach() if(fatal) message(FATAL_ERROR "cmake_push_check_state() test failed") |