BUG: Gracefully handle broken version symlinks
This teaches the helper commands 'cmake -E cmake_symlink_executable' and 'cmake -E cmake_symlink_library' to remove broken symlinks before creating a symlink and report an error when the symlink cannot be created. See issue #8654.
This commit is contained in:
parent
91a8569648
commit
ed5e4d8be2
@ -1366,24 +1366,28 @@ int cmake::ExecuteCMakeCommand(std::vector<std::string>& args)
|
|||||||
if(soName != realName)
|
if(soName != realName)
|
||||||
{
|
{
|
||||||
std::string fname = cmSystemTools::GetFilenameName(realName);
|
std::string fname = cmSystemTools::GetFilenameName(realName);
|
||||||
if(cmSystemTools::FileExists(soName.c_str()))
|
if(cmSystemTools::FileExists(soName.c_str()) ||
|
||||||
|
cmSystemTools::FileIsSymlink(soName.c_str()))
|
||||||
{
|
{
|
||||||
cmSystemTools::RemoveFile(soName.c_str());
|
cmSystemTools::RemoveFile(soName.c_str());
|
||||||
}
|
}
|
||||||
if(!cmSystemTools::CreateSymlink(fname.c_str(), soName.c_str()))
|
if(!cmSystemTools::CreateSymlink(fname.c_str(), soName.c_str()))
|
||||||
{
|
{
|
||||||
|
cmSystemTools::ReportLastSystemError("cmake_symlink_library");
|
||||||
result = 1;
|
result = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(name != soName)
|
if(name != soName)
|
||||||
{
|
{
|
||||||
std::string fname = cmSystemTools::GetFilenameName(soName);
|
std::string fname = cmSystemTools::GetFilenameName(soName);
|
||||||
if(cmSystemTools::FileExists(soName.c_str()))
|
if(cmSystemTools::FileExists(name.c_str()) ||
|
||||||
|
cmSystemTools::FileIsSymlink(name.c_str()))
|
||||||
{
|
{
|
||||||
cmSystemTools::RemoveFile(name.c_str());
|
cmSystemTools::RemoveFile(name.c_str());
|
||||||
}
|
}
|
||||||
if(!cmSystemTools::CreateSymlink(fname.c_str(), name.c_str()))
|
if(!cmSystemTools::CreateSymlink(fname.c_str(), name.c_str()))
|
||||||
{
|
{
|
||||||
|
cmSystemTools::ReportLastSystemError("cmake_symlink_library");
|
||||||
result = 1;
|
result = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1398,12 +1402,14 @@ int cmake::ExecuteCMakeCommand(std::vector<std::string>& args)
|
|||||||
if(name != realName)
|
if(name != realName)
|
||||||
{
|
{
|
||||||
std::string fname = cmSystemTools::GetFilenameName(realName);
|
std::string fname = cmSystemTools::GetFilenameName(realName);
|
||||||
if(cmSystemTools::FileExists(realName.c_str()))
|
if(cmSystemTools::FileExists(name.c_str()) ||
|
||||||
|
cmSystemTools::FileIsSymlink(name.c_str()))
|
||||||
{
|
{
|
||||||
cmSystemTools::RemoveFile(name.c_str());
|
cmSystemTools::RemoveFile(name.c_str());
|
||||||
}
|
}
|
||||||
if(!cmSystemTools::CreateSymlink(fname.c_str(), name.c_str()))
|
if(!cmSystemTools::CreateSymlink(fname.c_str(), name.c_str()))
|
||||||
{
|
{
|
||||||
|
cmSystemTools::ReportLastSystemError("cmake_symlink_executable");
|
||||||
result = 1;
|
result = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user