forked from OSchip/llvm-project
Refactor the code in clang to find a file in a PATH like environment variable into a helper function
llvm-svn: 212057
This commit is contained in:
parent
cf21875d41
commit
33d1ae53f7
|
@ -171,6 +171,13 @@ public:
|
||||||
// string. \arg Name is assumed to be in UTF-8 encoding too.
|
// string. \arg Name is assumed to be in UTF-8 encoding too.
|
||||||
static Optional<std::string> GetEnv(StringRef name);
|
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
|
/// This function returns a SmallVector containing the arguments passed from
|
||||||
/// the operating system to the program. This function expects to be handed
|
/// the operating system to the program. This function expects to be handed
|
||||||
/// the vector passed in from main.
|
/// the vector passed in from main.
|
||||||
|
|
|
@ -11,9 +11,12 @@
|
||||||
//
|
//
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
|
#include "llvm/ADT/StringExtras.h"
|
||||||
#include "llvm/Config/config.h"
|
#include "llvm/Config/config.h"
|
||||||
#include "llvm/Support/ErrorHandling.h"
|
#include "llvm/Support/ErrorHandling.h"
|
||||||
|
#include "llvm/Support/FileSystem.h"
|
||||||
#include "llvm/Support/Process.h"
|
#include "llvm/Support/Process.h"
|
||||||
|
#include "llvm/Support/Program.h"
|
||||||
|
|
||||||
using namespace llvm;
|
using namespace llvm;
|
||||||
using namespace sys;
|
using namespace sys;
|
||||||
|
@ -66,6 +69,33 @@ TimeValue self_process::get_wall_time() const {
|
||||||
return getElapsedWallTime();
|
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"
|
#define COLOR(FGBG, CODE, BOLD) "\033[0;" BOLD FGBG CODE "m"
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue