mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-02 00:16:25 +00:00
Have sys::FindProgramByName return a std::string.
llvm-svn: 183928
This commit is contained in:
parent
9372306d5c
commit
332b3ad6f7
@ -29,7 +29,7 @@ namespace sys {
|
||||
/// @returns A Path object initialized to the path of the program or a
|
||||
/// Path object that is empty (invalid) if the program could not be found.
|
||||
/// @brief Construct a Program by finding it by name.
|
||||
Path FindProgramByName(const std::string& name);
|
||||
std::string FindProgramByName(const std::string& name);
|
||||
|
||||
// These functions change the specified standard stream (stdin, stdout, or
|
||||
// stderr) to binary mode. They return errc::success if the specified stream
|
||||
|
@ -48,19 +48,19 @@ namespace llvm {
|
||||
using namespace sys;
|
||||
|
||||
// This function just uses the PATH environment variable to find the program.
|
||||
Path
|
||||
std::string
|
||||
sys::FindProgramByName(const std::string& progName) {
|
||||
|
||||
// Check some degenerate cases
|
||||
if (progName.length() == 0) // no program
|
||||
return Path();
|
||||
return "";
|
||||
Path temp;
|
||||
if (!temp.set(progName)) // invalid name
|
||||
return Path();
|
||||
return "";
|
||||
// Use the given path verbatim if it contains any slashes; this matches
|
||||
// the behavior of sh(1) and friends.
|
||||
if (progName.find('/') != std::string::npos)
|
||||
return temp;
|
||||
return temp.str();
|
||||
|
||||
// At this point, the file name is valid and does not contain slashes. Search
|
||||
// for it through the directories specified in the PATH environment variable.
|
||||
@ -68,7 +68,7 @@ sys::FindProgramByName(const std::string& progName) {
|
||||
// Get the path. If its empty, we can't do anything to find it.
|
||||
const char *PathStr = getenv("PATH");
|
||||
if (PathStr == 0)
|
||||
return Path();
|
||||
return "";
|
||||
|
||||
// Now we have a colon separated list of directories to search; try them.
|
||||
size_t PathLen = strlen(PathStr);
|
||||
@ -81,7 +81,7 @@ sys::FindProgramByName(const std::string& progName) {
|
||||
if (FilePath.set(std::string(PathStr,Colon))) {
|
||||
FilePath.appendComponent(progName);
|
||||
if (FilePath.canExecute())
|
||||
return FilePath; // Found the executable!
|
||||
return FilePath.str(); // Found the executable!
|
||||
}
|
||||
|
||||
// Nope it wasn't in this directory, check the next path in the list!
|
||||
@ -94,7 +94,7 @@ sys::FindProgramByName(const std::string& progName) {
|
||||
PathLen--;
|
||||
}
|
||||
}
|
||||
return Path();
|
||||
return "";
|
||||
}
|
||||
|
||||
static bool RedirectIO(const Path *Path, int FD, std::string* ErrMsg) {
|
||||
|
@ -33,17 +33,17 @@ namespace llvm {
|
||||
using namespace sys;
|
||||
|
||||
// This function just uses the PATH environment variable to find the program.
|
||||
Path sys::FindProgramByName(const std::string& progName) {
|
||||
std::string sys::FindProgramByName(const std::string &progName) {
|
||||
// Check some degenerate cases
|
||||
if (progName.length() == 0) // no program
|
||||
return Path();
|
||||
return "";
|
||||
Path temp;
|
||||
if (!temp.set(progName)) // invalid name
|
||||
return Path();
|
||||
return "";
|
||||
// Return paths with slashes verbatim.
|
||||
if (progName.find('\\') != std::string::npos ||
|
||||
progName.find('/') != std::string::npos)
|
||||
return temp;
|
||||
return temp.str();
|
||||
|
||||
// At this point, the file name is valid and does not contain slashes.
|
||||
// Let Windows search for it.
|
||||
@ -54,11 +54,11 @@ Path sys::FindProgramByName(const std::string& progName) {
|
||||
|
||||
// See if it wasn't found.
|
||||
if (len == 0)
|
||||
return Path();
|
||||
return "";
|
||||
|
||||
// See if we got the entire path.
|
||||
if (len < MAX_PATH)
|
||||
return Path(buffer);
|
||||
return std::string(buffer);
|
||||
|
||||
// Buffer was too small; grow and retry.
|
||||
while (true) {
|
||||
@ -68,9 +68,9 @@ Path sys::FindProgramByName(const std::string& progName) {
|
||||
// It is unlikely the search failed, but it's always possible some file
|
||||
// was added or removed since the last search, so be paranoid...
|
||||
if (len2 == 0)
|
||||
return Path();
|
||||
return "";
|
||||
else if (len2 <= len)
|
||||
return Path(b);
|
||||
return std::string(b);
|
||||
|
||||
len = len2;
|
||||
}
|
||||
|
@ -148,7 +148,7 @@ bool BugDriver::runPasses(Module *Program,
|
||||
return 1;
|
||||
}
|
||||
|
||||
sys::Path tool = sys::FindProgramByName("opt");
|
||||
std::string tool = sys::FindProgramByName("opt");
|
||||
if (tool.empty()) {
|
||||
errs() << "Cannot find `opt' in PATH!\n";
|
||||
return 1;
|
||||
@ -159,14 +159,13 @@ bool BugDriver::runPasses(Module *Program,
|
||||
|
||||
// setup the child process' arguments
|
||||
SmallVector<const char*, 8> Args;
|
||||
std::string Opt = tool.str();
|
||||
if (UseValgrind) {
|
||||
Args.push_back("valgrind");
|
||||
Args.push_back("--error-exitcode=1");
|
||||
Args.push_back("-q");
|
||||
Args.push_back(tool.c_str());
|
||||
} else
|
||||
Args.push_back(Opt.c_str());
|
||||
Args.push_back(tool.c_str());
|
||||
|
||||
Args.push_back("-o");
|
||||
Args.push_back(OutputFilename.c_str());
|
||||
|
@ -400,7 +400,7 @@ static void lexCommand(std::string &Message, const std::string &CommandLine,
|
||||
pos = CommandLine.find_first_of(delimiters, lastPos);
|
||||
}
|
||||
|
||||
CmdPath = sys::FindProgramByName(Command).str();
|
||||
CmdPath = sys::FindProgramByName(Command);
|
||||
if (CmdPath.empty()) {
|
||||
Message =
|
||||
std::string("Cannot find '") + Command +
|
||||
@ -875,16 +875,16 @@ int GCC::MakeSharedObject(const std::string &InputFile, FileType fileType,
|
||||
GCC *GCC::create(std::string &Message,
|
||||
const std::string &GCCBinary,
|
||||
const std::vector<std::string> *Args) {
|
||||
sys::Path GCCPath = sys::FindProgramByName(GCCBinary);
|
||||
if (GCCPath.isEmpty()) {
|
||||
std::string GCCPath = sys::FindProgramByName(GCCBinary);
|
||||
if (GCCPath.empty()) {
|
||||
Message = "Cannot find `"+ GCCBinary +"' in PATH!\n";
|
||||
return 0;
|
||||
}
|
||||
|
||||
sys::Path RemoteClientPath;
|
||||
std::string RemoteClientPath;
|
||||
if (!RemoteClient.empty())
|
||||
RemoteClientPath = sys::FindProgramByName(RemoteClient);
|
||||
|
||||
Message = "Found gcc: " + GCCPath.str() + "\n";
|
||||
return new GCC(GCCPath.str(), RemoteClientPath.str(), Args);
|
||||
Message = "Found gcc: " + GCCPath + "\n";
|
||||
return new GCC(GCCPath, RemoteClientPath, Args);
|
||||
}
|
||||
|
@ -13,10 +13,11 @@
|
||||
using namespace llvm;
|
||||
|
||||
int main(int argc, const char **argv) {
|
||||
sys::Path Program = sys::FindProgramByName(argv[1]);
|
||||
std::string Program = sys::FindProgramByName(argv[1]);
|
||||
|
||||
std::string ErrMsg;
|
||||
int Result = sys::ExecuteAndWait(Program, argv + 1, 0, 0, 0, 0, &ErrMsg);
|
||||
int Result =
|
||||
sys::ExecuteAndWait(sys::Path(Program), argv + 1, 0, 0, 0, 0, &ErrMsg);
|
||||
if (Result < 0) {
|
||||
errs() << "Error: " << ErrMsg << "\n";
|
||||
return 1;
|
||||
|
Loading…
Reference in New Issue
Block a user