Have sys::FindProgramByName return a std::string.
authorRafael Espindola <rafael.espindola@gmail.com>
Thu, 13 Jun 2013 19:25:37 +0000 (19:25 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Thu, 13 Jun 2013 19:25:37 +0000 (19:25 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@183928 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Support/Program.h
lib/Support/Unix/Program.inc
lib/Support/Windows/Program.inc
tools/bugpoint/OptimizerDriver.cpp
tools/bugpoint/ToolRunner.cpp
utils/not/not.cpp

index dac377aaa7cb37e56045096a52e6d3ec510a1f87..38fc8c2c8bbddecfed1e753c5b025c3c056afa12 100644 (file)
@@ -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
index d8bdd6ce4247d56d19ed1ef1d8e261bf6193823e..5fa421b917fa7d403eb5fb65b8e0d8722448a62d 100644 (file)
@@ -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) {
index 90a5cdb78ffd01f835433e9ab217934208d8c95d..cb3bc699012eca25caffb7a586fb9e0951560e02 100644 (file)
@@ -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;
   }
index 6c491ff0f99bcd8fb43c2c145e177a035d94d7f1..4c9219a71b7007180d07d154385e5f4ab9d4b512 100644 (file)
@@ -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());
index 00f14f4fd07491cdd4eed09fd30ced2f0c8b70b4..30db4b59dc4ee929472ccd7c02c38e72af1e7cfc 100644 (file)
@@ -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);
 }
index bb2d87bb44d4dcb59dad48dbe7ca250a8756d268..45322ecffc3544f912a5c51f7abc70e0504abd62 100644 (file)
 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;