lit: When running Tcl scripts via shell, try harder to find 'bash', but fall
back to running them internally if that fails. PR5240.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@84462 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/utils/lit/LitConfig.py b/utils/lit/LitConfig.py
index 4fb0ccc..c334109 100644
--- a/utils/lit/LitConfig.py
+++ b/utils/lit/LitConfig.py
@@ -29,6 +29,7 @@
         self.noExecute = noExecute
         self.debug = debug
         self.isWindows = bool(isWindows)
+        self.bashPath = None
 
         self.numErrors = 0
         self.numWarnings = 0
@@ -41,6 +42,27 @@
                                       mustExist = True,
                                       config = config)
 
+    def getBashPath(self):
+        """getBashPath - Get the path to 'bash'"""
+        import os, Util
+
+        if self.bashPath is not None:
+            return self.bashPath
+
+        self.bashPath = Util.which('bash', os.pathsep.join(self.path))
+        if self.bashPath is None:
+            # Check some known paths.
+            for path in ('/bin/bash', '/usr/bin/bash'):
+                if os.path.exists(path):
+                    self.bashPath = path
+                    break
+
+        if self.bashPath is None:
+            self.warning("Unable to find 'bash', running Tcl tests internally.")
+            self.bashPath = ''
+
+        return self.bashPath
+
     def _write_message(self, kind, message):
         import inspect, os, sys
 
diff --git a/utils/lit/TestRunner.py b/utils/lit/TestRunner.py
index 7b549ac..34e828b 100644
--- a/utils/lit/TestRunner.py
+++ b/utils/lit/TestRunner.py
@@ -237,7 +237,9 @@
     for c in cmds[1:]:
         cmd = ShUtil.Seq(cmd, '&&', c)
 
-    if litConfig.useTclAsSh:
+    # FIXME: This is lame, we shouldn't need bash. See PR5240.
+    bashPath = litConfig.getBashPath()
+    if litConfig.useTclAsSh and bashPath:
         script = tmpBase + '.script'
 
         # Write script file
@@ -252,7 +254,7 @@
             print >>sys.stdout
             return '', '', 0
 
-        command = ['/bin/bash', script]
+        command = [litConfig.getBashPath(), script]
         out,err,exitCode = executeCommand(command, cwd=cwd,
                                           env=test.config.environment)