mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-11-08 01:56:10 -05: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()
|