diff options
-rw-r--r-- | Help/prop_tgt/VERIFY_INTERFACE_HEADER_SETS.rst | 6 | ||||
-rw-r--r-- | Modules/FetchContent.cmake | 71 | ||||
-rw-r--r-- | Modules/FindGTest.cmake | 2 | ||||
-rw-r--r-- | Source/CMakeVersion.cmake | 2 | ||||
-rw-r--r-- | Source/cmGeneratedFileStream.cxx | 6 | ||||
-rw-r--r-- | Source/cmGlobalVisualStudioVersionedGenerator.cxx | 2 | ||||
-rw-r--r-- | Source/cmSystemTools.cxx | 14 |
7 files changed, 55 insertions, 48 deletions
diff --git a/Help/prop_tgt/VERIFY_INTERFACE_HEADER_SETS.rst b/Help/prop_tgt/VERIFY_INTERFACE_HEADER_SETS.rst index 1b3f878..da461a7 100644 --- a/Help/prop_tgt/VERIFY_INTERFACE_HEADER_SETS.rst +++ b/Help/prop_tgt/VERIFY_INTERFACE_HEADER_SETS.rst @@ -26,5 +26,9 @@ Otherwise, if C++ is enabled globally, the header is compiled as C++. Otherwise, if C is enabled globally, the header is compiled as C. Otherwise, the header file is not compiled. +This property is initialized by the value of the +:variable:`CMAKE_VERIFY_INTERFACE_HEADER_SETS` variable if it is set when +a target is created. + If the project wishes to control which header sets are verified by this -property, you can set :prop_tgt:`INTERFACE_HEADER_SETS_TO_VERIFY`. +property, it can set :prop_tgt:`INTERFACE_HEADER_SETS_TO_VERIFY`. diff --git a/Modules/FetchContent.cmake b/Modules/FetchContent.cmake index df40c85..27070c0 100644 --- a/Modules/FetchContent.cmake +++ b/Modules/FetchContent.cmake @@ -1189,19 +1189,18 @@ function(FetchContent_Declare contentName) ) endif() - set(options "") + # Because we are only looking for a subset of the supported keywords, we + # cannot check for multi-value arguments with this method. We will have to + # handle the URL keyword differently. set(oneValueArgs SVN_REPOSITORY DOWNLOAD_NO_EXTRACT DOWNLOAD_EXTRACT_TIMESTAMP - URL BINARY_DIR SOURCE_DIR ) - set(multiValueArgs "") - cmake_parse_arguments(PARSE_ARGV 1 ARG - "${options}" "${oneValueArgs}" "${multiValueArgs}") + cmake_parse_arguments(PARSE_ARGV 1 ARG "" "${oneValueArgs}" "") string(TOLOWER ${contentName} contentNameLower) @@ -1230,31 +1229,45 @@ function(FetchContent_Declare contentName) # explicitly set the relevant option if not already provided. The condition # here is essentially an abbreviated version of the logic in # ExternalProject's _ep_add_download_command() function. - if(ARG_URL AND - NOT IS_DIRECTORY "${ARG_URL}" AND - NOT ARG_DOWNLOAD_NO_EXTRACT AND + if(NOT ARG_DOWNLOAD_NO_EXTRACT AND NOT DEFINED ARG_DOWNLOAD_EXTRACT_TIMESTAMP) - cmake_policy(GET CMP0135 _FETCHCONTENT_CMP0135 - PARENT_SCOPE # undocumented, do not use outside of CMake - ) - if(_FETCHCONTENT_CMP0135 STREQUAL "") - message(AUTHOR_WARNING - "The DOWNLOAD_EXTRACT_TIMESTAMP option was not given and policy " - "CMP0135 is not set. The policy's OLD behavior will be used. " - "When using a URL download, the timestamps of extracted files " - "should preferably be that of the time of extraction, otherwise " - "code that depends on the extracted contents might not be " - "rebuilt if the URL changes. The OLD behavior preserves the " - "timestamps from the archive instead, but this is usually not " - "what you want. Update your project to the NEW behavior or " - "specify the DOWNLOAD_EXTRACT_TIMESTAMP option with a value of " - "true to avoid this robustness issue." - ) - set(ARG_DOWNLOAD_EXTRACT_TIMESTAMP TRUE) - elseif(_FETCHCONTENT_CMP0135 STREQUAL "NEW") - set(ARG_DOWNLOAD_EXTRACT_TIMESTAMP FALSE) - else() - set(ARG_DOWNLOAD_EXTRACT_TIMESTAMP TRUE) + list(FIND ARGN URL urlIndex) + if(urlIndex GREATER_EQUAL 0) + math(EXPR urlIndex "${urlIndex} + 1") + list(LENGTH ARGN numArgs) + if(urlIndex GREATER_EQUAL numArgs) + message(FATAL_ERROR + "URL keyword needs to be followed by at least one URL" + ) + endif() + # If we have multiple URLs, none of them are allowed to be local paths. + # Therefore, we can test just the first URL, and if it is non-local, so + # will be the others if there are more. + list(GET ARGN ${urlIndex} firstUrl) + if(NOT IS_DIRECTORY "${firstUrl}") + cmake_policy(GET CMP0135 _FETCHCONTENT_CMP0135 + PARENT_SCOPE # undocumented, do not use outside of CMake + ) + if(_FETCHCONTENT_CMP0135 STREQUAL "") + message(AUTHOR_WARNING + "The DOWNLOAD_EXTRACT_TIMESTAMP option was not given and policy " + "CMP0135 is not set. The policy's OLD behavior will be used. " + "When using a URL download, the timestamps of extracted files " + "should preferably be that of the time of extraction, otherwise " + "code that depends on the extracted contents might not be " + "rebuilt if the URL changes. The OLD behavior preserves the " + "timestamps from the archive instead, but this is usually not " + "what you want. Update your project to the NEW behavior or " + "specify the DOWNLOAD_EXTRACT_TIMESTAMP option with a value of " + "true to avoid this robustness issue." + ) + set(ARG_DOWNLOAD_EXTRACT_TIMESTAMP TRUE) + elseif(_FETCHCONTENT_CMP0135 STREQUAL "NEW") + set(ARG_DOWNLOAD_EXTRACT_TIMESTAMP FALSE) + else() + set(ARG_DOWNLOAD_EXTRACT_TIMESTAMP TRUE) + endif() + endif() endif() endif() diff --git a/Modules/FindGTest.cmake b/Modules/FindGTest.cmake index 60bb401..92334e4 100644 --- a/Modules/FindGTest.cmake +++ b/Modules/FindGTest.cmake @@ -314,7 +314,7 @@ if(GTest_FOUND) __gtest_define_backwards_compatible_library_targets() endif() -if(GMock_FOUND) +if(GMock_FOUND AND GTest_FOUND) if(NOT TARGET GTest::gmock) __gtest_determine_library_type(GMOCK_LIBRARY) add_library(GTest::gmock ${GMOCK_LIBRARY_TYPE} IMPORTED) diff --git a/Source/CMakeVersion.cmake b/Source/CMakeVersion.cmake index 2362747..303d3d2 100644 --- a/Source/CMakeVersion.cmake +++ b/Source/CMakeVersion.cmake @@ -1,7 +1,7 @@ # CMake version number components. set(CMake_VERSION_MAJOR 3) set(CMake_VERSION_MINOR 24) -set(CMake_VERSION_PATCH 20220731) +set(CMake_VERSION_PATCH 20220802) #set(CMake_VERSION_RC 0) set(CMake_VERSION_IS_DIRTY 0) diff --git a/Source/cmGeneratedFileStream.cxx b/Source/cmGeneratedFileStream.cxx index b529b8f..6212bbd 100644 --- a/Source/cmGeneratedFileStream.cxx +++ b/Source/cmGeneratedFileStream.cxx @@ -124,10 +124,10 @@ cmGeneratedFileStreamBase::~cmGeneratedFileStreamBase() void cmGeneratedFileStreamBase::Open(std::string const& name) { // Save the original name of the file. - this->Name = name; + this->Name = cmSystemTools::CollapseFullPath(name); // Create the name of the temporary file. - this->TempName = name; + this->TempName = this->Name; #if defined(__VMS) this->TempName += "_"; #else @@ -231,7 +231,7 @@ int cmGeneratedFileStreamBase::RenameFile(std::string const& oldname, void cmGeneratedFileStream::SetName(const std::string& fname) { - this->Name = fname; + this->Name = cmSystemTools::CollapseFullPath(fname); } void cmGeneratedFileStream::SetTempExt(std::string const& ext) diff --git a/Source/cmGlobalVisualStudioVersionedGenerator.cxx b/Source/cmGlobalVisualStudioVersionedGenerator.cxx index 7eca963..7e36881 100644 --- a/Source/cmGlobalVisualStudioVersionedGenerator.cxx +++ b/Source/cmGlobalVisualStudioVersionedGenerator.cxx @@ -67,7 +67,7 @@ static bool VSHasDotNETFrameworkArm64() std::string dotNetArm64; return cmSystemTools::ReadRegistryValue( "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\.NETFramework;InstallRootArm64", - dotNetArm64); + dotNetArm64, cmSystemTools::KeyWOW64_64); } static bool VSIsWindows11OrGreater() diff --git a/Source/cmSystemTools.cxx b/Source/cmSystemTools.cxx index 93a6f64..672cdc7 100644 --- a/Source/cmSystemTools.cxx +++ b/Source/cmSystemTools.cxx @@ -3357,22 +3357,12 @@ cmsys::Status cmSystemTools::CreateSymlink(std::string const& origName, uv_fs_t req; int flags = 0; #if defined(_WIN32) - bool const isDir = cmsys::SystemTools::FileIsDirectory(origName); - if (isDir) { - flags |= UV_FS_SYMLINK_JUNCTION; + if (cmsys::SystemTools::FileIsDirectory(origName)) { + flags |= UV_FS_SYMLINK_DIR; } #endif int err = uv_fs_symlink(nullptr, &req, origName.c_str(), newName.c_str(), flags, nullptr); -#if defined(_WIN32) - if (err && uv_fs_get_system_error(&req) == ERROR_NOT_SUPPORTED && isDir) { - // Try fallback to symlink for network (requires additional permissions). - flags ^= UV_FS_SYMLINK_JUNCTION | UV_FS_SYMLINK_DIR; - err = uv_fs_symlink(nullptr, &req, origName.c_str(), newName.c_str(), - flags, nullptr); - } -#endif - cmsys::Status status; if (err) { #if defined(_WIN32) |