Browse Source

ENH: In find_* implementation centralize addition of trailing slashes

  - Create cmFindCommon::AddTrailingSlashes
  - Use it in cmFindBase and cmFindPackageCommand
  - Remove duplication from other find commands
Brad King 17 years ago
parent
commit
d53e5dec37

+ 4 - 0
Source/cmFindBase.cxx

@@ -273,6 +273,10 @@ bool cmFindBase::ParseArguments(std::vector<std::string> const& argsIn)
 
   // Handle search root stuff.
   this->RerootPaths(this->SearchPaths);
+
+  // Add a trailing slash to all prefixes to aid the search process.
+  this->AddTrailingSlashes(this->SearchPaths);
+
   return true;
 }
 

+ 15 - 0
Source/cmFindCommon.cxx

@@ -417,3 +417,18 @@ void cmFindCommon::AddPathInternal(std::string const& in_path,
     this->SearchPaths.push_back(fullPath.c_str());
     }
 }
+
+//----------------------------------------------------------------------------
+void cmFindCommon::AddTrailingSlashes(std::vector<std::string>& paths)
+{
+  // Add a trailing slash to all paths to aid the search process.
+  for(std::vector<std::string>::iterator i = paths.begin();
+      i != paths.end(); ++i)
+    {
+    std::string& p = *i;
+    if(!p.empty() && p[p.size()-1] != '/')
+      {
+      p += "/";
+      }
+    }
+}

+ 3 - 0
Source/cmFindCommon.h

@@ -44,6 +44,9 @@ protected:
   /** Place a set of search paths under the search roots.  */
   void RerootPaths(std::vector<std::string>& paths);
 
+  /** Add trailing slashes to all search paths.  */
+  void AddTrailingSlashes(std::vector<std::string>& paths);
+
   /** Compute the current default root path mode.  */
   void SelectDefaultRootPathMode();
 

+ 0 - 10
Source/cmFindLibraryCommand.cxx

@@ -252,16 +252,6 @@ std::string cmFindLibraryCommand::FindLibrary(const char* name)
     }
   }
 
-  // Add a trailing slash to all paths to aid the search process.
-  for(std::vector<std::string>::iterator i = this->SearchPaths.begin();
-      i != this->SearchPaths.end(); ++i)
-    {
-    std::string& p = *i;
-    if(p.empty() || p[p.size()-1] != '/')
-      {
-      p += "/";
-      }
-    }
   std::string tryPath;
   for(std::vector<std::string>::const_iterator p = this->SearchPaths.begin();
       p != this->SearchPaths.end(); ++p)

+ 1 - 9
Source/cmFindPackageCommand.cxx

@@ -1067,15 +1067,7 @@ void cmFindPackageCommand::ComputeFinalPrefixes()
   this->RerootPaths(prefixes);
 
   // Add a trailing slash to all prefixes to aid the search process.
-  for(std::vector<std::string>::iterator i = prefixes.begin();
-      i != prefixes.end(); ++i)
-    {
-    std::string& prefix = *i;
-    if(prefix[prefix.size()-1] != '/')
-      {
-      prefix += "/";
-      }
-    }
+  this->AddTrailingSlashes(prefixes);
 }
 
 //----------------------------------------------------------------------------

+ 0 - 10
Source/cmFindPathCommand.cxx

@@ -102,16 +102,6 @@ bool cmFindPathCommand
     supportFrameworks = false;
     }
   std::string framework;
-  // Add a trailing slash to all paths to aid the search process.
-  for(std::vector<std::string>::iterator i = this->SearchPaths.begin();
-      i != this->SearchPaths.end(); ++i)
-    {
-    std::string& p = *i;
-    if(p.empty() || p[p.size()-1] != '/')
-      {
-      p += "/";
-      }
-    }
   // Use the search path to find the file.
   unsigned int k;
   std::string result;