Merge topic 'cmake-E-symlink-replace-dangling'

e0228e2b cmake: Improve '-E create_symlink' edge case handling (#14713)
This commit is contained in:
Brad King
2014-01-21 08:51:39 -05:00
committed by CMake Topic Stage
9 changed files with 56 additions and 15 deletions
+17 -15
View File
@@ -460,23 +460,25 @@ int cmcmd::ExecuteCMakeCommand(std::vector<std::string>& args)
else if (args[1] == "create_symlink" && args.size() == 4)
{
const char* destinationFileName = args[3].c_str();
if ( cmSystemTools::FileExists(destinationFileName) )
if((cmSystemTools::FileExists(destinationFileName) ||
cmSystemTools::FileIsSymlink(destinationFileName)) &&
!cmSystemTools::RemoveFile(destinationFileName))
{
if ( cmSystemTools::FileIsSymlink(destinationFileName) )
{
if ( !cmSystemTools::RemoveFile(destinationFileName) ||
cmSystemTools::FileExists(destinationFileName) )
{
return 0;
}
}
else
{
return 0;
}
std::string emsg = cmSystemTools::GetLastSystemError();
std::cerr <<
"failed to create symbolic link '" << destinationFileName <<
"' because existing path cannot be removed: " << emsg << "\n";
return 1;
}
return cmSystemTools::CreateSymlink(args[2].c_str(),
args[3].c_str())? 0:1;
if(!cmSystemTools::CreateSymlink(args[2].c_str(), args[3].c_str()))
{
std::string emsg = cmSystemTools::GetLastSystemError();
std::cerr <<
"failed to create symbolic link '" << destinationFileName <<
"': " << emsg << "\n";
return 1;
}
return 0;
}
// Internal CMake shared library support.