mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-10-31 13:10:19 -04:00 
			
		
		
		
	
		
			
	
	
		
			342 lines
		
	
	
		
			8.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			342 lines
		
	
	
		
			8.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|  | #!/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() |