Implement the GetLibraryPath function.
authorReid Spencer <rspencer@reidspencer.com>
Tue, 14 Sep 2004 00:16:39 +0000 (00:16 +0000)
committerReid Spencer <rspencer@reidspencer.com>
Tue, 14 Sep 2004 00:16:39 +0000 (00:16 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@16323 91177308-0d34-0410-b5e6-96231b3b80d8

lib/System/Unix/Path.cpp
lib/System/Unix/Path.inc

index 23b938b9019fceb42d06656d6d78bf004c8c18b4..329bf37e387f49caf4066381784871ba780f201a 100644 (file)
@@ -44,6 +44,51 @@ Path::GetRootDirectory() {
   return result;
 }
 
+static inline bool IsLibrary(Path& path, const std::string& basename) {
+  if (path.append_file(std::string("lib") + basename)) {
+    if (path.append_suffix(Path::GetDLLSuffix()) && path.readable())
+      return true;
+    else if (path.elide_suffix() && path.append_suffix("a") && path.readable())
+      return true;
+    else if (path.elide_suffix() && path.append_suffix("o") && path.readable())
+      return true;
+  } else if (path.elide_file() && path.append_file(basename)) {
+    if (path.append_suffix(Path::GetDLLSuffix()) && path.readable())
+      return true;
+    else if (path.elide_suffix() && path.append_suffix("a") && path.readable())
+      return true;
+    else if (path.elide_suffix() && path.append_suffix("o") && path.readable())
+      return true;
+  }
+  path.clear();
+  return false;
+}
+
+Path 
+Path::GetLibraryPath(const std::string& basename, 
+                     const std::vector<std::string>& LibPaths) {
+  Path result;
+
+  // Try the paths provided
+  for (std::vector<std::string>::const_iterator I = LibPaths.begin(),
+       E = LibPaths.end(); I != E; ++I ) {
+    if (result.set_directory(*I) && IsLibrary(result,basename))
+      return result;
+  }
+
+  // Try /usr/lib
+  if (result.set_directory("/usr/lib/") && IsLibrary(result,basename))
+    return result;
+
+  // Try /lib
+  if (result.set_directory("/lib/") && IsLibrary(result,basename))
+    return result;
+
+  // Can't find it, give up and return invalid path.
+  result.clear();
+  return result;
+}
+
 Path 
 Path::GetSystemLibraryPath1() {
   return Path("/lib/");
index 23b938b9019fceb42d06656d6d78bf004c8c18b4..329bf37e387f49caf4066381784871ba780f201a 100644 (file)
@@ -44,6 +44,51 @@ Path::GetRootDirectory() {
   return result;
 }
 
+static inline bool IsLibrary(Path& path, const std::string& basename) {
+  if (path.append_file(std::string("lib") + basename)) {
+    if (path.append_suffix(Path::GetDLLSuffix()) && path.readable())
+      return true;
+    else if (path.elide_suffix() && path.append_suffix("a") && path.readable())
+      return true;
+    else if (path.elide_suffix() && path.append_suffix("o") && path.readable())
+      return true;
+  } else if (path.elide_file() && path.append_file(basename)) {
+    if (path.append_suffix(Path::GetDLLSuffix()) && path.readable())
+      return true;
+    else if (path.elide_suffix() && path.append_suffix("a") && path.readable())
+      return true;
+    else if (path.elide_suffix() && path.append_suffix("o") && path.readable())
+      return true;
+  }
+  path.clear();
+  return false;
+}
+
+Path 
+Path::GetLibraryPath(const std::string& basename, 
+                     const std::vector<std::string>& LibPaths) {
+  Path result;
+
+  // Try the paths provided
+  for (std::vector<std::string>::const_iterator I = LibPaths.begin(),
+       E = LibPaths.end(); I != E; ++I ) {
+    if (result.set_directory(*I) && IsLibrary(result,basename))
+      return result;
+  }
+
+  // Try /usr/lib
+  if (result.set_directory("/usr/lib/") && IsLibrary(result,basename))
+    return result;
+
+  // Try /lib
+  if (result.set_directory("/lib/") && IsLibrary(result,basename))
+    return result;
+
+  // Can't find it, give up and return invalid path.
+  result.clear();
+  return result;
+}
+
 Path 
 Path::GetSystemLibraryPath1() {
   return Path("/lib/");