Factor out "cmake -E cmake_symlink_*" code
We factor the implementation of cmake -E cmake_symlink_library cmake -E cmake_symlink_executable out of cmake::ExecuteCMakeCommand into methods cmake::SymlinkLibrary cmake::SymlinkExecutable plus a helper method cmake::SymlinkInternal.
This commit is contained in:
parent
3c326476ee
commit
22cbfefb76
108
Source/cmake.cxx
108
Source/cmake.cxx
|
@ -1377,61 +1377,12 @@ int cmake::ExecuteCMakeCommand(std::vector<std::string>& args)
|
|||
// Internal CMake shared library support.
|
||||
else if (args[1] == "cmake_symlink_library" && args.size() == 5)
|
||||
{
|
||||
int result = 0;
|
||||
std::string realName = args[2];
|
||||
std::string soName = args[3];
|
||||
std::string name = args[4];
|
||||
if(soName != realName)
|
||||
{
|
||||
std::string fname = cmSystemTools::GetFilenameName(realName);
|
||||
if(cmSystemTools::FileExists(soName.c_str()) ||
|
||||
cmSystemTools::FileIsSymlink(soName.c_str()))
|
||||
{
|
||||
cmSystemTools::RemoveFile(soName.c_str());
|
||||
}
|
||||
if(!cmSystemTools::CreateSymlink(fname.c_str(), soName.c_str()))
|
||||
{
|
||||
cmSystemTools::ReportLastSystemError("cmake_symlink_library");
|
||||
result = 1;
|
||||
}
|
||||
}
|
||||
if(name != soName)
|
||||
{
|
||||
std::string fname = cmSystemTools::GetFilenameName(soName);
|
||||
if(cmSystemTools::FileExists(name.c_str()) ||
|
||||
cmSystemTools::FileIsSymlink(name.c_str()))
|
||||
{
|
||||
cmSystemTools::RemoveFile(name.c_str());
|
||||
}
|
||||
if(!cmSystemTools::CreateSymlink(fname.c_str(), name.c_str()))
|
||||
{
|
||||
cmSystemTools::ReportLastSystemError("cmake_symlink_library");
|
||||
result = 1;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
return cmake::SymlinkLibrary(args);
|
||||
}
|
||||
// Internal CMake versioned executable support.
|
||||
else if (args[1] == "cmake_symlink_executable" && args.size() == 4)
|
||||
{
|
||||
int result = 0;
|
||||
std::string realName = args[2];
|
||||
std::string name = args[3];
|
||||
if(name != realName)
|
||||
{
|
||||
std::string fname = cmSystemTools::GetFilenameName(realName);
|
||||
if(cmSystemTools::FileExists(name.c_str()) ||
|
||||
cmSystemTools::FileIsSymlink(name.c_str()))
|
||||
{
|
||||
cmSystemTools::RemoveFile(name.c_str());
|
||||
}
|
||||
if(!cmSystemTools::CreateSymlink(fname.c_str(), name.c_str()))
|
||||
{
|
||||
cmSystemTools::ReportLastSystemError("cmake_symlink_executable");
|
||||
result = 1;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
return cmake::SymlinkExecutable(args);
|
||||
}
|
||||
|
||||
#if defined(CMAKE_HAVE_VS_GENERATORS)
|
||||
|
@ -3127,6 +3078,61 @@ void cmake::GenerateGraphViz(const char* fileName) const
|
|||
str << "}" << std::endl;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
int cmake::SymlinkLibrary(std::vector<std::string>& args)
|
||||
{
|
||||
int result = 0;
|
||||
std::string realName = args[2];
|
||||
std::string soName = args[3];
|
||||
std::string name = args[4];
|
||||
if(soName != realName)
|
||||
{
|
||||
if(!cmake::SymlinkInternal(realName, soName))
|
||||
{
|
||||
cmSystemTools::ReportLastSystemError("cmake_symlink_library");
|
||||
result = 1;
|
||||
}
|
||||
}
|
||||
if(name != soName)
|
||||
{
|
||||
if(!cmake::SymlinkInternal(soName, name))
|
||||
{
|
||||
cmSystemTools::ReportLastSystemError("cmake_symlink_library");
|
||||
result = 1;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
int cmake::SymlinkExecutable(std::vector<std::string>& args)
|
||||
{
|
||||
int result = 0;
|
||||
std::string realName = args[2];
|
||||
std::string name = args[3];
|
||||
if(name != realName)
|
||||
{
|
||||
if(!cmake::SymlinkInternal(realName, name))
|
||||
{
|
||||
cmSystemTools::ReportLastSystemError("cmake_symlink_executable");
|
||||
result = 1;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool cmake::SymlinkInternal(std::string const& file, std::string const& link)
|
||||
{
|
||||
if(cmSystemTools::FileExists(link.c_str()) ||
|
||||
cmSystemTools::FileIsSymlink(link.c_str()))
|
||||
{
|
||||
cmSystemTools::RemoveFile(link.c_str());
|
||||
}
|
||||
std::string linktext = cmSystemTools::GetFilenameName(file);
|
||||
return cmSystemTools::CreateSymlink(linktext.c_str(), link.c_str());
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
#ifdef CMAKE_BUILD_WITH_CMAKE
|
||||
int cmake::ExecuteEchoColor(std::vector<std::string>& args)
|
||||
|
|
|
@ -414,6 +414,10 @@ protected:
|
|||
|
||||
void GenerateGraphViz(const char* fileName) const;
|
||||
|
||||
static int SymlinkLibrary(std::vector<std::string>& args);
|
||||
static int SymlinkExecutable(std::vector<std::string>& args);
|
||||
static bool SymlinkInternal(std::string const& file,
|
||||
std::string const& link);
|
||||
static int ExecuteEchoColor(std::vector<std::string>& args);
|
||||
static int ExecuteLinkScript(std::vector<std::string>& args);
|
||||
static int VisualStudioLink(std::vector<std::string>& args, int type);
|
||||
|
|
Loading…
Reference in New Issue