From 7723d45153c5610349486121e2b50b5ba60b2f5c Mon Sep 17 00:00:00 2001 From: Daniel Dunbar Date: Mon, 19 Oct 2009 03:54:21 +0000 Subject: [PATCH] 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 --- utils/lit/LitConfig.py | 22 ++++++++++++++++++++++ utils/lit/TestRunner.py | 6 ++++-- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/utils/lit/LitConfig.py b/utils/lit/LitConfig.py index 4fb0ccc0935..c334109e1de 100644 --- a/utils/lit/LitConfig.py +++ b/utils/lit/LitConfig.py @@ -29,6 +29,7 @@ class LitConfig: self.noExecute = noExecute self.debug = debug self.isWindows = bool(isWindows) + self.bashPath = None self.numErrors = 0 self.numWarnings = 0 @@ -41,6 +42,27 @@ class LitConfig: 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 7b549ac1c61..34e828bf960 100644 --- a/utils/lit/TestRunner.py +++ b/utils/lit/TestRunner.py @@ -237,7 +237,9 @@ def executeTclScriptInternal(test, litConfig, tmpBase, commands, cwd): 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 @@ def executeTclScriptInternal(test, litConfig, tmpBase, commands, cwd): print >>sys.stdout return '', '', 0 - command = ['/bin/bash', script] + command = [litConfig.getBashPath(), script] out,err,exitCode = executeCommand(command, cwd=cwd, env=test.config.environment)