Browse Source

cmSystemTools: Add SetRPath() method

Kyle Edwards 4 years ago
parent
commit
f73027b182
2 changed files with 37 additions and 1 deletions
  1. 32 0
      Source/cmSystemTools.cxx
  2. 5 1
      Source/cmSystemTools.h

+ 32 - 0
Source/cmSystemTools.cxx

@@ -2744,6 +2744,24 @@ bool cmSystemTools::ChangeRPath(std::string const& file,
   return AdjustRPath(file, MakeEmptyCallback(newRPath), adjustCallback, emsg,
                      changed);
 }
+
+bool cmSystemTools::SetRPath(std::string const& file,
+                             std::string const& newRPath, std::string* emsg,
+                             bool* changed)
+{
+  auto adjustCallback = [newRPath](cm::optional<std::string>& outRPath,
+                                   const std::string& inRPath,
+                                   const char* /*se_name*/, std::string *
+                                   /*emsg*/) -> bool {
+    if (inRPath != newRPath) {
+      outRPath = newRPath;
+    }
+    return true;
+  };
+
+  return AdjustRPath(file, MakeEmptyCallback(newRPath), adjustCallback, emsg,
+                     changed);
+}
 #elif defined(CMake_USE_XCOFF_PARSER)
 bool cmSystemTools::ChangeRPath(std::string const& file,
                                 std::string const& oldRPath,
@@ -2813,6 +2831,13 @@ bool cmSystemTools::ChangeRPath(std::string const& file,
   }
   return true;
 }
+
+bool cmSystemTools::SetRPath(std::string const& /*file*/,
+                             std::string const& /*newRPath*/,
+                             std::string* /*emsg*/, bool* /*changed*/)
+{
+  return false;
+}
 #else
 bool cmSystemTools::ChangeRPath(std::string const& /*file*/,
                                 std::string const& /*oldRPath*/,
@@ -2822,6 +2847,13 @@ bool cmSystemTools::ChangeRPath(std::string const& /*file*/,
 {
   return false;
 }
+
+bool cmSystemTools::SetRPath(std::string const& /*file*/,
+                             std::string const& /*newRPath*/,
+                             std::string* /*emsg*/, bool* /*changed*/)
+{
+  return false;
+}
 #endif
 
 bool cmSystemTools::VersionCompare(cmSystemTools::CompareOp op,

+ 5 - 1
Source/cmSystemTools.h

@@ -456,13 +456,17 @@ public:
   static bool GuessLibraryInstallName(std::string const& fullPath,
                                       std::string& soname);
 
-  /** Try to set the RPATH in an ELF binary.  */
+  /** Try to change the RPATH in an ELF binary.  */
   static bool ChangeRPath(std::string const& file, std::string const& oldRPath,
                           std::string const& newRPath,
                           bool removeEnvironmentRPath,
                           std::string* emsg = nullptr,
                           bool* changed = nullptr);
 
+  /** Try to set the RPATH in an ELF binary.  */
+  static bool SetRPath(std::string const& file, std::string const& newRPath,
+                       std::string* emsg = nullptr, bool* changed = nullptr);
+
   /** Try to remove the RPATH from an ELF binary.  */
   static bool RemoveRPath(std::string const& file, std::string* emsg = nullptr,
                           bool* removed = nullptr);