Implement new functions per new interface

llvm-svn: 18866
This commit is contained in:
Reid Spencer 2004-12-13 03:03:42 +00:00
parent 17e7444a61
commit 0a0d582719
1 changed files with 48 additions and 55 deletions

View File

@ -123,67 +123,60 @@ Path::GetDLLSuffix() {
return "dll";
}
static inline bool IsLibrary(Path& path, const std::string& basename) {
if (path.appendFile(std::string("lib") + basename)) {
if (path.appendSuffix(Path::GetDLLSuffix()) && path.readable())
return true;
else if (path.elideSuffix() && path.appendSuffix("a") && path.readable())
return true;
else if (path.elideSuffix() && path.appendSuffix("o") && path.readable())
return true;
else if (path.elideSuffix() && path.appendSuffix("bc") && path.readable())
return true;
} else if (path.elideFile() && path.appendFile(basename)) {
if (path.appendSuffix(Path::GetDLLSuffix()) && path.readable())
return true;
else if (path.elideSuffix() && path.appendSuffix("a") && path.readable())
return true;
else if (path.elideSuffix() && path.appendSuffix("o") && path.readable())
return true;
else if (path.elideSuffix() && path.appendSuffix("bc") && path.readable())
return true;
static void getPathList(const char*path, std::vector<sys::Path>& Paths) {
const char* at = path;
const char* delim = strchr(at, ';');
Path tmpPath;
while( delim != 0 ) {
std::string tmp(at, size_t(delim-at));
if (tmpPath.setDirectory(tmp))
if (tmpPath.readable())
Paths.push_back(tmpPath);
at = delim + 1;
delim = strchr(at, ';');
}
path.clear();
return false;
if (*at != 0)
if (tmpPath.setDirectory(std::string(at)))
if (tmpPath.readable())
Paths.push_back(tmpPath);
}
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.setDirectory(*I) && IsLibrary(result,basename))
return result;
void
Path::GetSystemLibraryPaths(std::vector<sys::Path>& Paths) {
#ifdef LTDL_SHLIBPATH_VAR
char* env_var = getenv(LTDL_SHLIBPATH_VAR);
if (env_var != 0) {
getPathList(env_var,Paths);
}
// Try the LLVM lib directory in the LLVM install area
//if (result.setDirectory(LLVM_LIBDIR) && IsLibrary(result,basename))
// return result;
// Try /usr/lib
if (result.setDirectory("/usr/lib/") && IsLibrary(result,basename))
return result;
// Try /lib
if (result.setDirectory("/lib/") && IsLibrary(result,basename))
return result;
// Can't find it, give up and return invalid path.
result.clear();
return result;
#endif
// FIXME: Should this look at LD_LIBRARY_PATH too?
Paths.push_back(sys::Path("C:\\WINDOWS\\SYSTEM32\\"));
Paths.push_back(sys::Path("C:\\WINDOWS\\"));
}
Path
Path::GetSystemLibraryPath1() {
return Path("/lib/");
}
Path
Path::GetSystemLibraryPath2() {
return Path("/usr/lib/");
void
Path::GetBytecodeLibraryPaths(std::vector<sys::Path>& Paths) {
char * env_var = getenv("LLVM_LIB_SEARCH_PATH");
if (env_var != 0) {
getPathList(env_var,Paths);
}
#ifdef LLVMGCCDIR
{
Path tmpPath(std::string(LLVMGCCDIR) + "bytecode-libs/");
if (tmpPath.readable())
Paths.push_back(tmpPath);
}
#endif
#ifdef LLVM_LIBDIR
{
Path tmpPath;
if (tmpPath.setDirectory(LLVM_LIBDIR))
if (tmpPath.readable())
Paths.push_back(tmpPath);
}
#endif
GetSystemLibraryPaths(Paths);
}
Path