summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Source/cmake.cxx108
-rw-r--r--Source/cmake.h4
2 files changed, 61 insertions, 51 deletions
diff --git a/Source/cmake.cxx b/Source/cmake.cxx
index 48a0e83..24b6443 100644
--- a/Source/cmake.cxx
+++ b/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)
@@ -3128,6 +3079,61 @@ void cmake::GenerateGraphViz(const char* fileName) const
}
//----------------------------------------------------------------------------
+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)
{
diff --git a/Source/cmake.h b/Source/cmake.h
index f983dc2..37e38b7 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<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);