Explorar el Código

install(FILES): Allow installation of symlinks to directory

Allow symbolic links to a directory to be installed via install(FILES ...).

Fixes: #22159
Jens Carl hace 4 años
padre
commit
d71a7cc19d

+ 2 - 1
Source/cmInstallCommand.cxx

@@ -1482,7 +1482,8 @@ bool Helper::MakeFilesFullPath(const char* modeName,
     }
 
     // Make sure the file is not a directory.
-    if (gpos == std::string::npos && cmSystemTools::FileIsDirectory(file)) {
+    if (gpos == std::string::npos && !cmSystemTools::FileIsSymlink(file) &&
+        cmSystemTools::FileIsDirectory(file)) {
       this->SetError(
         cmStrCat(modeName, " given directory \"", relFile, "\" to install."));
       return false;

+ 1 - 0
Tests/RunCMake/install/FILES-directory-result.txt

@@ -0,0 +1 @@
+1

+ 1 - 0
Tests/RunCMake/install/FILES-directory-stderr.txt

@@ -0,0 +1 @@
+install FILES given directory

+ 7 - 0
Tests/RunCMake/install/FILES-directory.cmake

@@ -0,0 +1,7 @@
+set(dst "${CMAKE_CURRENT_BINARY_DIR}/dst")
+set(src "${CMAKE_CURRENT_BINARY_DIR}/src")
+
+file(MAKE_DIRECTORY "${dst}")
+file(MAKE_DIRECTORY "${src}")
+
+install(FILES "${src}" DESTINATION "${dst}")

+ 9 - 0
Tests/RunCMake/install/FILES-symlink-to-directory.cmake

@@ -0,0 +1,9 @@
+set(dst "${CMAKE_CURRENT_BINARY_DIR}/dst")
+set(src "${CMAKE_CURRENT_BINARY_DIR}/src")
+set(lnk "${CMAKE_CURRENT_BINARY_DIR}/lnk")
+
+file(MAKE_DIRECTORY "${dst}")
+file(MAKE_DIRECTORY "${src}")
+file(CREATE_LINK "${src}" "${lnk}" SYMBOLIC)
+
+install(FILES "${lnk}" DESTINATION "${dst}")

+ 4 - 0
Tests/RunCMake/install/RunCMakeTest.cmake

@@ -93,6 +93,10 @@ run_cmake(TARGETS-NAMELINK_COMPONENT-bad-all)
 run_cmake(TARGETS-NAMELINK_COMPONENT-bad-exc)
 run_cmake(FILES-DESTINATION-TYPE)
 run_cmake(DIRECTORY-DESTINATION-TYPE)
+run_cmake(FILES-directory)
+if(NOT WIN32)
+    run_cmake(FILES-symlink-to-directory)
+endif()
 
 set(RunCMake_TEST_OPTIONS "-DCMAKE_BUILD_TYPE:STRING=Debug")
 run_install_test(FILES-RENAME)