Refactor the code in clang to find a file in a PATH like environment variable into a helper function

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212057 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Ehsan Akhgari 2014-06-30 19:54:20 +00:00
parent a0d04ac9f1
commit eb73cf671b
2 changed files with 37 additions and 0 deletions

View File

@ -171,6 +171,13 @@ public:
// string. \arg Name is assumed to be in UTF-8 encoding too.
static Optional<std::string> GetEnv(StringRef name);
/// This function searches for an existing file in the list of directories
/// in a PATH like environment variable, and returns the first file found,
/// according to the order of the entries in the PATH like environment
/// variable.
static Optional<std::string> FindInEnvPath(const std::string& EnvName,
const std::string& FileName);
/// This function returns a SmallVector containing the arguments passed from
/// the operating system to the program. This function expects to be handed
/// the vector passed in from main.

View File

@ -11,9 +11,12 @@
//
//===----------------------------------------------------------------------===//
#include "llvm/ADT/StringExtras.h"
#include "llvm/Config/config.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/FileSystem.h"
#include "llvm/Support/Process.h"
#include "llvm/Support/Program.h"
using namespace llvm;
using namespace sys;
@ -66,6 +69,33 @@ TimeValue self_process::get_wall_time() const {
return getElapsedWallTime();
}
Optional<std::string> Process::FindInEnvPath(const std::string& EnvName,
const std::string& FileName)
{
Optional<std::string> FoundPath;
Optional<std::string> OptPath = Process::GetEnv(EnvName);
if (!OptPath.hasValue())
return FoundPath;
const char EnvPathSeparatorStr[] = {EnvPathSeparator, '\0'};
SmallVector<StringRef, 8> Dirs;
SplitString(OptPath.getValue(), Dirs, EnvPathSeparatorStr);
for (const auto &Dir : Dirs) {
if (Dir.empty())
continue;
SmallString<128> FilePath(Dir);
path::append(FilePath, FileName);
if (fs::exists(Twine(FilePath))) {
FoundPath = FilePath.str();
break;
}
}
return FoundPath;
}
#define COLOR(FGBG, CODE, BOLD) "\033[0;" BOLD FGBG CODE "m"