handle non-existing symlink creation locations

This commit is contained in:
Domen Vrankar
2017-03-29 00:22:52 +02:00
parent cc4fbda1a9
commit 8e8f1118b9
5 changed files with 23 additions and 0 deletions

View File

@@ -315,6 +315,9 @@ The following ``cmake -E`` commands are available only on UNIX:
``create_symlink <old> <new>``
Create a symbolic link ``<new>`` naming ``<old>``.
.. note::
Path to where ``<new>`` symbolic link will be created has to exist beforehand.
Windows-specific Command-Line Tools
-----------------------------------

View File

@@ -1486,6 +1486,9 @@ bool cmFileCopier::InstallSymlink(const char* fromFile, const char* toFile)
// Remove the destination file so we can always create the symlink.
cmSystemTools::RemoveFile(toFile);
// Create destination directory if it doesn't exist
cmSystemTools::MakeDirectory(cmSystemTools::GetFilenamePath(toFile));
// Create the symlink.
if (!cmSystemTools::CreateSymlink(symlinkTarget, toFile)) {
std::ostringstream e;

View File

@@ -0,0 +1,3 @@
-- Before Installing
-- Installing: .*/Tests/RunCMake/file/INSTALL-SYMLINK-build/dst/current_dir_symlink
-- After Installing

View File

@@ -0,0 +1,13 @@
set(src "${CMAKE_CURRENT_BINARY_DIR}/src")
set(dst "${CMAKE_CURRENT_BINARY_DIR}/dst")
file(REMOVE RECURSE "${src}")
file(REMOVE RECURSE "${dst}")
file(MAKE_DIRECTORY "${src}")
execute_process(COMMAND
${CMAKE_COMMAND} -E create_symlink source "${src}/current_dir_symlink")
message(STATUS "Before Installing")
file(INSTALL FILES "${src}/current_dir_symlink"
DESTINATION ${dst} TYPE DIRECTORY)
message(STATUS "After Installing")

View File

@@ -36,4 +36,5 @@ run_cmake(GLOB-noexp-LIST_DIRECTORIES)
if(NOT WIN32 OR CYGWIN)
run_cmake(GLOB_RECURSE-cyclic-recursion)
run_cmake(INSTALL-SYMLINK)
endif()