| #!/usr/bin/python |
| |
| # Copyright 2012 Jurko Gospodnetic |
| # Distributed under the Boost Software License, Version 1.0. |
| # (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) |
| |
| # Temporarily enabled dummy test that always fails and is used to collect |
| # extra debugging information from Boost Build test runner sites. |
| |
| import BoostBuild |
| |
| import os |
| import re |
| import sys |
| |
| |
| ############################################################################### |
| # |
| # Public interface. |
| # |
| ############################################################################### |
| |
| def collectDebugInfo(): |
| t = _init() |
| |
| global tag |
| |
| tag = "Python version" |
| try: |
| _info(sys.version) |
| except: |
| _info_exc() |
| |
| tag = "Python platform" |
| try: |
| _info(sys.platform) |
| except: |
| _info_exc() |
| |
| tag = "Boost Jam/Build version" |
| try: |
| _infoX(_getJamVersionInfo(t)) |
| except: |
| _info_exc() |
| |
| #_collectDebugInfo_environ() |
| |
| # Report prepared annotations. |
| t.fail_test(1, dump_difference=False, dump_stdio=False, dump_stack=False) |
| |
| |
| ############################################################################### |
| # |
| # Private interface. |
| # |
| ############################################################################### |
| |
| varSeparator = "###$^%~~~" |
| |
| |
| def _collect(results, prefix, name, t): |
| results.append("%s - %s - os.getenv(): %r" % (prefix, name, os.getenv( |
| name))) |
| results.append("%s - %s - os.environ.get(): %r" % (prefix, name, |
| os.environ.get(name))) |
| external_values = _getExternalValues(t, name) |
| results.append("%s - %s - external: %r" % (prefix, name, |
| external_values[name])) |
| |
| |
| def _collectDebugInfo_environ(t): |
| dummyVars = ["WOOF_WOOFIE_%d" % x for x in xrange(4)] |
| global tag |
| |
| tag = "XXX in os.environ" |
| try: |
| def f(name): |
| return "%s: %s" % (name, name in os.environ) |
| _infoX(f(x) for x in dummyVars) |
| except: |
| _info_exc() |
| |
| tag = "os.environ[XXX]" |
| try: |
| def f(name): |
| try: |
| result = os.environ[name] |
| except: |
| result = _str_exc() |
| return "%s: %r" % (name, result) |
| _infoX(f(x) for x in dummyVars) |
| except: |
| _info_exc() |
| |
| tag = "os.environ.get(XXX)" |
| try: |
| def f(name): |
| return "%s: %r" % (name, os.environ.get(name)) |
| _infoX(f(x) for x in dummyVars) |
| except: |
| _info_exc() |
| |
| tag = "os.getenv(XXX)" |
| try: |
| def f(name): |
| return "%s: %r" % (name, os.getenv(name)) |
| _infoX(f(x) for x in dummyVars) |
| except: |
| _info_exc() |
| |
| name = dummyVars[0] |
| value = "foo" |
| tag = "os.putenv(%s) to %r" % (name, value) |
| try: |
| results = [] |
| _collect(results, "before", name, t) |
| os.putenv(name, value) |
| _collect(results, "after", name, t) |
| _infoX(results) |
| except: |
| _info_exc() |
| |
| name = dummyVars[1] |
| value = "bar" |
| tag = "os.environ[%s] to %r" % (name, value) |
| try: |
| results = [] |
| _collect(results, "before", name, t) |
| os.environ[name] = value |
| _collect(results, "after", name, t) |
| _infoX(results) |
| except: |
| _info_exc() |
| |
| name = dummyVars[1] |
| value = "baz" |
| tag = "os.putenv(%s) to %r" % (name, value) |
| try: |
| results = [] |
| _collect(results, "before", name, t) |
| os.putenv(name, value) |
| _collect(results, "after", name, t) |
| _infoX(results) |
| except: |
| _info_exc() |
| |
| name = dummyVars[1] |
| value = "" |
| tag = "os.putenv(%s) to %r" % (name, value) |
| try: |
| results = [] |
| _collect(results, "before", name, t) |
| os.putenv(name, value) |
| _collect(results, "after", name, t) |
| _infoX(results) |
| except: |
| _info_exc() |
| |
| name = dummyVars[2] |
| value = "foo" |
| tag = "os.unsetenv(%s) from %r" % (name, value) |
| try: |
| results = [] |
| os.environ[name] = value |
| _collect(results, "before", name, t) |
| os.unsetenv(name) |
| _collect(results, "after", name, t) |
| _infoX(results) |
| except: |
| _info_exc() |
| |
| name = dummyVars[2] |
| value = "foo" |
| tag = "del os.environ[%s] from %r" % (name, value) |
| try: |
| results = [] |
| os.environ[name] = value |
| _collect(results, "before", name, t) |
| del os.environ[name] |
| _collect(results, "after", name, t) |
| _infoX(results) |
| except: |
| _info_exc() |
| |
| name = dummyVars[2] |
| value = "foo" |
| tag = "os.environ.pop(%s) from %r" % (name, value) |
| try: |
| results = [] |
| os.environ[name] = value |
| _collect(results, "before", name, t) |
| os.environ.pop(name) |
| _collect(results, "after", name, t) |
| _infoX(results) |
| except: |
| _info_exc() |
| |
| name = dummyVars[2] |
| value1 = "foo" |
| value2 = "" |
| tag = "os.environ[%s] to %r from %r" % (name, value2, value1) |
| try: |
| results = [] |
| os.environ[name] = value1 |
| _collect(results, "before", name, t) |
| os.environ[name] = value2 |
| _collect(results, "after", name, t) |
| _infoX(results) |
| except: |
| _info_exc() |
| |
| name = dummyVars[3] |
| value = '""' |
| tag = "os.environ[%s] to %r" % (name, value) |
| try: |
| results = [] |
| _collect(results, "before", name, t) |
| os.environ[name] = value |
| _collect(results, "after", name, t) |
| _infoX(results) |
| except: |
| _info_exc() |
| |
| |
| def _getExternalValues(t, *args): |
| t.run_build_system(["---var-name=%s" % x for x in args]) |
| result = dict() |
| for x in args: |
| m = re.search(r"^\*\*\*ENV\*\*\* %s: '(.*)' \*\*\*$" % x, t.stdout(), |
| re.MULTILINE) |
| if m: |
| result[x] = m.group(1) |
| else: |
| result[x] = None |
| return result |
| |
| |
| def _getJamVersionInfo(t): |
| result = [] |
| |
| # JAM version variables. |
| t.run_build_system(["---version"]) |
| for m in re.finditer(r"^\*\*\*VAR\*\*\* ([^:]*): (.*)\*\*\*$", t.stdout(), |
| re.MULTILINE): |
| name = m.group(1) |
| value = m.group(2) |
| if not value: |
| value = [] |
| elif value[-1] == ' ': |
| value = value[:-1].split(varSeparator) |
| else: |
| value = "!!!INVALID!!! - '%s'" % value |
| result.append("%s = %s" % (name, value)) |
| result.append("") |
| |
| # bjam -v output. |
| t.run_build_system(["-v"]) |
| result.append("--- output for 'bjam -v' ---") |
| result.append(t.stdout()) |
| |
| # bjam --version output. |
| t.run_build_system(["--version"], status=1) |
| result.append("--- output for 'bjam --version' ---") |
| result.append(t.stdout()) |
| |
| return result |
| |
| |
| def _init(): |
| toolsetName = "__myDummyToolset__" |
| |
| t = BoostBuild.Tester(["toolset=%s" % toolsetName], pass_toolset=False, |
| use_test_config=False) |
| |
| # Prepare a dummy toolset so we do not get errors in case the default one |
| # is not found. |
| t.write(toolsetName + ".jam", """\ |
| import feature ; |
| feature.extend toolset : %s ; |
| rule init ( ) { } |
| """ % toolsetName ) |
| |
| # Python version of the same dummy toolset. |
| t.write(toolsetName + ".py", """\ |
| from b2.build import feature |
| feature.extend('toolset', ['%s']) |
| def init(): pass |
| """ % toolsetName ) |
| |
| t.write("jamroot.jam", """\ |
| import os ; |
| .argv = [ modules.peek : ARGV ] ; |
| local names = [ MATCH ^---var-name=(.*) : $(.argv) ] ; |
| for x in $(names) |
| { |
| value = [ os.environ $(x) ] ; |
| ECHO ***ENV*** $(x): '$(value)' *** ; |
| } |
| if ---version in $(.argv) |
| { |
| for x in JAMVERSION JAM_VERSION JAMUNAME JAM_TIMESTAMP_RESOLUTION OS |
| { |
| v = [ modules.peek : $(x) ] ; |
| ECHO ***VAR*** $(x): "$(v:J=%s)" *** ; |
| } |
| } |
| """ % varSeparator) |
| |
| return t |
| |
| |
| def _info(*values): |
| values = list(values) + [""] |
| BoostBuild.annotation(tag, "\n".join(str(x) for x in values)) |
| |
| |
| def _infoX(values): |
| _info(*values) |
| |
| |
| def _info_exc(): |
| _info(_str_exc()) |
| |
| |
| def _str_exc(): |
| exc_type, exc_value = sys.exc_info()[0:2] |
| if exc_type is None: |
| exc_type_name = "None" |
| else: |
| exc_type_name = exc_type.__name__ |
| return "*** EXCEPTION *** %s - %s ***" % (exc_type_name, exc_value) |
| |
| |
| ############################################################################### |
| # |
| # main() |
| # ------ |
| # |
| ############################################################################### |
| |
| collectDebugInfo() |