install(FILES): Allow installation of symlinks to directory

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

Fixes: #22159
This commit is contained in:
Jens Carl
2021-05-06 12:45:56 -07:00
parent 5cbbe3d301
commit d71a7cc19d
6 changed files with 24 additions and 1 deletions

View File

@@ -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;

View File

@@ -0,0 +1 @@
1

View File

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

View File

@@ -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}")

View File

@@ -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}")

View File

@@ -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)