From 22cbfefb76b66d12e2e7346b08e08dec19305f70 Mon Sep 17 00:00:00 2001 From: Brad King Date: Wed, 21 Oct 2009 13:10:24 -0400 Subject: [PATCH] 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. --- Source/cmake.cxx | 108 +++++++++++++++++++++++++---------------------- Source/cmake.h | 4 ++ 2 files changed, 61 insertions(+), 51 deletions(-) diff --git a/Source/cmake.cxx b/Source/cmake.cxx index 48a0e8300..24b6443d4 100644 --- a/Source/cmake.cxx +++ b/Source/cmake.cxx @@ -1377,61 +1377,12 @@ int cmake::ExecuteCMakeCommand(std::vector& 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& 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& 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& args) diff --git a/Source/cmake.h b/Source/cmake.h index f983dc2a5..37e38b7de 100644 --- a/Source/cmake.h +++ b/Source/cmake.h @@ -414,6 +414,10 @@ protected: void GenerateGraphViz(const char* fileName) const; + static int SymlinkLibrary(std::vector& args); + static int SymlinkExecutable(std::vector& args); + static bool SymlinkInternal(std::string const& file, + std::string const& link); static int ExecuteEchoColor(std::vector& args); static int ExecuteLinkScript(std::vector& args); static int VisualStudioLink(std::vector& args, int type);