file(INSTALL): Improve formatting of symlink creation error

Avoid printing two error messages.  Format paths without wrapping.
This commit is contained in:
Brad King
2022-10-06 12:48:15 -04:00
parent aba48bd6ac
commit 85f01a1ec2
6 changed files with 53 additions and 11 deletions

View File

@@ -504,11 +504,12 @@ bool cmFileCopier::InstallSymlinkChain(std::string& fromFile,
cmSystemTools::RemoveFile(toFile);
cmSystemTools::MakeDirectory(toFilePath);
if (!cmSystemTools::CreateSymlink(symlinkTarget, toFile)) {
std::ostringstream e;
e << this->Name << " cannot create symlink \"" << toFile
<< "\": " << cmSystemTools::GetLastSystemError() << ".";
this->Status.SetError(e.str());
cmsys::Status status =
cmSystemTools::CreateSymlinkQuietly(symlinkTarget, toFile);
if (!status) {
std::string e = cmStrCat(this->Name, " cannot create symlink\n ",
toFile, "\nbecause: ", status.GetString());
this->Status.SetError(e);
return false;
}
}
@@ -557,12 +558,13 @@ bool cmFileCopier::InstallSymlink(const std::string& fromFile,
cmSystemTools::MakeDirectory(cmSystemTools::GetFilenamePath(toFile));
// Create the symlink.
if (!cmSystemTools::CreateSymlink(symlinkTarget, toFile)) {
std::ostringstream e;
e << this->Name << " cannot duplicate symlink \"" << fromFile
<< "\" at \"" << toFile
<< "\": " << cmSystemTools::GetLastSystemError() << ".";
this->Status.SetError(e.str());
cmsys::Status status =
cmSystemTools::CreateSymlinkQuietly(symlinkTarget, toFile);
if (!status) {
std::string e =
cmStrCat(this->Name, " cannot duplicate symlink\n ", fromFile,
"\nat\n ", toFile, "\nbecause: ", status.GetString());
this->Status.SetError(e);
return false;
}
}

View File

@@ -0,0 +1 @@
1

View File

@@ -0,0 +1,12 @@
^CMake Error at cmake_install.cmake:[0-9]+ \(file\):
file INSTALL cannot duplicate symlink
[^
]*/Tests/RunCMake/install/DIRECTORY-symlink-clobber-build/new/dir
at
[^
]*/Tests/RunCMake/install/DIRECTORY-symlink-clobber-build/root-all/dest/dir
because:

View File

@@ -0,0 +1,12 @@
-- Installing: [^
]*/Tests/RunCMake/install/DIRECTORY-symlink-clobber-build/root-all/dest/dir
-- Installing: [^
]*/Tests/RunCMake/install/DIRECTORY-symlink-clobber-build/root-all/dest/dir/file
-- Installing: [^
]*/Tests/RunCMake/install/DIRECTORY-symlink-clobber-build/root-all/dest/lnk
-- Up-to-date: [^
]*/Tests/RunCMake/install/DIRECTORY-symlink-clobber-build/root-all/dest/lnk
-- Up-to-date: [^
]*/Tests/RunCMake/install/DIRECTORY-symlink-clobber-build/root-all/dest/lnk/file
-- Installing: [^
]*/Tests/RunCMake/install/DIRECTORY-symlink-clobber-build/root-all/dest/dir

View File

@@ -0,0 +1,11 @@
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/old/dir)
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/old/dir/file "")
file(CREATE_LINK dir ${CMAKE_CURRENT_BINARY_DIR}/old/lnk SYMBOLIC)
install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/old/dir DESTINATION dest)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/old/lnk DESTINATION dest)
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/new/lnk)
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/new/lnk/file "")
file(CREATE_LINK lnk ${CMAKE_CURRENT_BINARY_DIR}/new/dir SYMBOLIC)
install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/new/lnk DESTINATION dest)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/new/dir DESTINATION dest)

View File

@@ -175,6 +175,10 @@ run_install_test(FILES-PERMISSIONS)
run_install_test(TARGETS-RPATH)
run_install_test(InstallRequiredSystemLibraries)
if(UNIX)
run_install_test(DIRECTORY-symlink-clobber)
endif()
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
run_cmake(TARGETS-RUNTIME_DEPENDENCIES-macos-two-bundle)
run_cmake(TARGETS-RUNTIME_DEPENDENCIES-macos-no-framework)