diff options
author | Brad King <brad.king@kitware.com> | 2024-08-20 15:16:21 (GMT) |
---|---|---|
committer | Kitware Robot <kwrobot@kitware.com> | 2024-08-20 15:17:57 (GMT) |
commit | 8eaaa0023e7e2a4701b1460bdf9c88cb6826fdee (patch) | |
tree | a8cc30305a05b76c9e5f1a707b019e3ebefe5275 | |
parent | 97bb92ace5fa26e20a0d0f87131dce9567048985 (diff) | |
parent | b1f956529a7abefba03f5902ba187956c730afb9 (diff) | |
download | CMake-8eaaa0023e7e2a4701b1460bdf9c88cb6826fdee.zip CMake-8eaaa0023e7e2a4701b1460bdf9c88cb6826fdee.tar.gz CMake-8eaaa0023e7e2a4701b1460bdf9c88cb6826fdee.tar.bz2 |
Merge topic 'cpack-nsis-reserved-component-names' into release-3.30
b1f956529a CPack/NSIS: Fix matching of reserved component names
Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !9757
-rw-r--r-- | Source/CPack/cmCPackGenerator.cxx | 3 | ||||
-rw-r--r-- | Source/CPack/cmCPackNSISGenerator.cxx | 4 | ||||
-rw-r--r-- | Tests/CPackNSISGenerator/CMakeLists.txt | 20 | ||||
-rw-r--r-- | Tests/CPackNSISGenerator/RunCPackVerifyResult.cmake | 21 |
4 files changed, 45 insertions, 3 deletions
diff --git a/Source/CPack/cmCPackGenerator.cxx b/Source/CPack/cmCPackGenerator.cxx index 03b8766..b025570 100644 --- a/Source/CPack/cmCPackGenerator.cxx +++ b/Source/CPack/cmCPackGenerator.cxx @@ -1552,6 +1552,7 @@ std::string cmCPackGenerator::GetSanitizedDirOrFileName( #ifdef _WIN32 // Given name matches a reserved name (on Windows)? // Then return it prepended with an underscore. + // See https://learn.microsoft.com/en-us/windows/win32/fileio/naming-a-file cmsys::RegularExpression reserved_pattern("^(" "[Cc][Oo][Nn]|" "[Pp][Rr][Nn]|" @@ -1559,7 +1560,7 @@ std::string cmCPackGenerator::GetSanitizedDirOrFileName( "[Nn][Uu][Ll]|" "[Cc][Oo][Mm][1-9]|" "[Ll][Pp][Tt][1-9]" - ")([.].+)?"); + ")[.]?$"); if (reserved_pattern.find(name)) { return "_" + name; } diff --git a/Source/CPack/cmCPackNSISGenerator.cxx b/Source/CPack/cmCPackNSISGenerator.cxx index 43b1d76..155bc9e 100644 --- a/Source/CPack/cmCPackNSISGenerator.cxx +++ b/Source/CPack/cmCPackNSISGenerator.cxx @@ -863,8 +863,8 @@ std::string cmCPackNSISGenerator::CreateComponentDescription( /* clang-format on */ componentCode += out.str(); } else { - componentCode += - " File /r \"${INST_DIR}\\" + component->Name + "\\*.*\"\n"; + componentCode += " File /r \"${INST_DIR}\\" + + this->GetSanitizedDirOrFileName(component->Name) + "\\*.*\"\n"; } componentCode += "SectionEnd\n"; diff --git a/Tests/CPackNSISGenerator/CMakeLists.txt b/Tests/CPackNSISGenerator/CMakeLists.txt index 5d6320b..cb0b13d 100644 --- a/Tests/CPackNSISGenerator/CMakeLists.txt +++ b/Tests/CPackNSISGenerator/CMakeLists.txt @@ -10,6 +10,26 @@ install(TARGETS hello LIBRARY DESTINATION . BUNDLE DESTINATION .) +# Component that is a reserved name on Windows. +# See https://learn.microsoft.com/en-us/windows/win32/fileio/naming-a-file +install( + DIRECTORY . + DESTINATION txt + COMPONENT CON + FILES_MATCHING PATTERN *.txt) +# Component name that is similar to a reserved name on Windows. +install( + DIRECTORY . + DESTINATION txt + COMPONENT Console + FILES_MATCHING PATTERN *.txt) +# Component name that is strongly discouraged on Windows. +install( + DIRECTORY . + DESTINATION txt + COMPONENT EndsWithDot. + FILES_MATCHING PATTERN *.txt) + set(CPACK_NSIS_MUI_HEADERIMAGE "${PROJECT_SOURCE_DIR}\\\\header-image.bmp") set(CPACK_PACKAGE_ICON "${PROJECT_SOURCE_DIR}\\\\header-icon.bmp") set(CPACK_NSIS_MUI_ICON "${PROJECT_SOURCE_DIR}\\\\install.ico") diff --git a/Tests/CPackNSISGenerator/RunCPackVerifyResult.cmake b/Tests/CPackNSISGenerator/RunCPackVerifyResult.cmake index 31a2560..3e4d7b4 100644 --- a/Tests/CPackNSISGenerator/RunCPackVerifyResult.cmake +++ b/Tests/CPackNSISGenerator/RunCPackVerifyResult.cmake @@ -69,3 +69,24 @@ if("${output_index}" EQUAL "-1") else() message(FATAL_ERROR "License found in the project") endif() + +file(STRINGS "${project_file}" line REGEX [[\\_CON\\]]) +string(FIND "${line}" [[\_CON\]] output_index) +message(STATUS "Found CON component reserved directory name as _CON") +if("${output_index}" EQUAL "-1") + message(FATAL_ERROR "CON component reserved directory name not found as _CON in the project") +endif() + +file(STRINGS "${project_file}" line REGEX [[\\Console\\]]) +string(FIND "${line}" [[\Console\]] output_index) +message(STATUS "Found Console component directory name as Console") +if("${output_index}" EQUAL "-1") + message(FATAL_ERROR "Console component directory name not found as Console in the project") +endif() + +file(STRINGS "${project_file}" line REGEX [[\\EndsWithDot._\\]]) +string(FIND "${line}" [[\EndsWithDot._\]] output_index) +message(STATUS "Found EndsWithDot. component directory name as EndsWithDot._") +if("${output_index}" EQUAL "-1") + message(FATAL_ERROR "EndsWithDot. component directory name not found as EndsWithDot._ in the project") +endif() |