mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-06 21:59:54 -06:00
file(INSTALL): Clarify symlink vs dir conflict errors
Clarify error reporting in scenario creating a symlink where a directory previously exists.
This commit is contained in:
@@ -15,7 +15,11 @@
|
||||
#include "cmValue.h"
|
||||
|
||||
#ifdef _WIN32
|
||||
# include <winerror.h>
|
||||
|
||||
# include "cmsys/FStream.hxx"
|
||||
#else
|
||||
# include <cerrno>
|
||||
#endif
|
||||
|
||||
#include <cstring>
|
||||
@@ -561,9 +565,20 @@ bool cmFileCopier::InstallSymlink(const std::string& fromFile,
|
||||
cmsys::Status status =
|
||||
cmSystemTools::CreateSymlinkQuietly(symlinkTarget, toFile);
|
||||
if (!status) {
|
||||
#ifdef _WIN32
|
||||
bool const errorFileExists = status.GetWindows() == ERROR_FILE_EXISTS;
|
||||
#else
|
||||
bool const errorFileExists = status.GetPOSIX() == EEXIST;
|
||||
#endif
|
||||
std::string reason;
|
||||
if (errorFileExists && cmSystemTools::FileIsDirectory(toFile)) {
|
||||
reason = "A directory already exists at that location";
|
||||
} else {
|
||||
reason = status.GetString();
|
||||
}
|
||||
std::string e =
|
||||
cmStrCat(this->Name, " cannot duplicate symlink\n ", fromFile,
|
||||
"\nat\n ", toFile, "\nbecause: ", status.GetString());
|
||||
"\nat\n ", toFile, "\nbecause: ", reason);
|
||||
this->Status.SetError(e);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -9,4 +9,4 @@
|
||||
[^
|
||||
]*/Tests/RunCMake/install/DIRECTORY-symlink-clobber-build/root-all/dest/dir
|
||||
|
||||
because:
|
||||
because: A directory already exists at that location
|
||||
|
||||
Reference in New Issue
Block a user