diff options
author | Reid Spencer <rspencer@reidspencer.com> | 2004-09-14 00:16:39 +0000 |
---|---|---|
committer | Reid Spencer <rspencer@reidspencer.com> | 2004-09-14 00:16:39 +0000 |
commit | 74e7261e90b3a93ae86f30aec7ea8c3872764ce3 (patch) | |
tree | 7414279836301dffe609877ed6c5e896042bea47 /lib/System/Unix/Path.cpp | |
parent | 9ab80b794ec800d76a59865893523f9cd300645d (diff) | |
download | external_llvm-74e7261e90b3a93ae86f30aec7ea8c3872764ce3.zip external_llvm-74e7261e90b3a93ae86f30aec7ea8c3872764ce3.tar.gz external_llvm-74e7261e90b3a93ae86f30aec7ea8c3872764ce3.tar.bz2 |
Implement the GetLibraryPath function.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@16323 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/System/Unix/Path.cpp')
-rw-r--r-- | lib/System/Unix/Path.cpp | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/lib/System/Unix/Path.cpp b/lib/System/Unix/Path.cpp index 23b938b..329bf37 100644 --- a/lib/System/Unix/Path.cpp +++ b/lib/System/Unix/Path.cpp @@ -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/"); |