Browse Source

cmSystemTools: Adopt RelativeIfUnder helper

This returns a relative path if it does not start in `../`.
Brad King 4 years ago
parent
commit
5b3a71a83f
3 changed files with 21 additions and 9 deletions
  1. 1 9
      Source/cmFileAPICodemodel.cxx
  2. 14 0
      Source/cmSystemTools.cxx
  3. 6 0
      Source/cmSystemTools.h

+ 1 - 9
Source/cmFileAPICodemodel.cxx

@@ -57,15 +57,7 @@ using TargetIndexMapType =
 
 std::string RelativeIfUnder(std::string const& top, std::string const& in)
 {
-  std::string out;
-  if (in == top) {
-    out = ".";
-  } else if (cmSystemTools::IsSubDirectory(in, top)) {
-    out = in.substr(top.size() + 1);
-  } else {
-    out = in;
-  }
-  return out;
+  return cmSystemTools::RelativeIfUnder(top, in);
 }
 
 class JBTIndex

+ 14 - 0
Source/cmSystemTools.cxx

@@ -1491,6 +1491,20 @@ std::string cmSystemTools::ForceToRelativePath(std::string const& local_path,
   return relative;
 }
 
+std::string cmSystemTools::RelativeIfUnder(std::string const& top,
+                                           std::string const& in)
+{
+  std::string out;
+  if (in == top) {
+    out = ".";
+  } else if (cmSystemTools::IsSubDirectory(in, top)) {
+    out = in.substr(top.size() + 1);
+  } else {
+    out = in;
+  }
+  return out;
+}
+
 #ifndef CMAKE_BOOTSTRAP
 bool cmSystemTools::UnsetEnv(const char* value)
 {

+ 6 - 0
Source/cmSystemTools.h

@@ -346,6 +346,12 @@ public:
   static std::string ForceToRelativePath(std::string const& local_path,
                                          std::string const& remote_path);
 
+  /**
+   * Express the 'in' path relative to 'top' if it does not start in '../'.
+   */
+  static std::string RelativeIfUnder(std::string const& top,
+                                     std::string const& in);
+
 #ifndef CMAKE_BOOTSTRAP
   /** Remove an environment variable */
   static bool UnsetEnv(const char* value);