summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGabriel Ganne <gabriel.ganne@enea.com>2018-02-20 11:08:11 +0100
committerRichard Braun <rbraun@sceen.net>2018-02-24 16:53:44 +0100
commitc0aa1dd1915d89dbdacb1265f48ed83ebc02708d (patch)
tree567cf14928712f3daa836bc5b0cd83a31978bd00
parentd6415186a2cbcd75c7b9bacf235dc03a8145f2c2 (diff)
tools/build_configs.py: add python3 compatibility
* dict.itervalues() and dict.iteritems() have been removed from python3 use dict.values(), and dict.items() instead. * both map and filter return values have changed to return a different type of structure in some cases. Enforce a list as return value. * prefer list.append() to l1 + l2 syntax * use the new print function syntax. add the print_function from future for python2 compatibility * use str.format() to read integers directly instead of concatenating their string conversion
-rwxr-xr-xtools/build_configs.py38
1 files changed, 20 insertions, 18 deletions
diff --git a/tools/build_configs.py b/tools/build_configs.py
index 129ed92..b44c77b 100755
--- a/tools/build_configs.py
+++ b/tools/build_configs.py
@@ -3,6 +3,8 @@
# Generate a large number of valid configurations, build them concurrently,
# and report.
+from __future__ import print_function
+
import argparse
import itertools
import multiprocessing
@@ -26,7 +28,7 @@ def quote_if_needed(value):
# Generate a list of all possible combinations of options.
def gen_configs_list(options_dict):
names = options_dict.keys()
- product = itertools.product(*options_dict.itervalues())
+ product = itertools.product(*options_dict.values())
return map(lambda x: dict(zip(names, x)), product)
# Generate a list of all possible combinations of options as strings.
@@ -59,12 +61,12 @@ def gen_exclusive_boolean_filter(args):
# filter is generated to match configurations where none of the options
# are enabled.
def gen_exclusive_boolean_filters_list(options_list, all_disabled=False):
- option_and_options = map(lambda x: (x, options_list), options_list)
+ option_and_options = list(map(lambda x: (x, options_list), options_list))
if all_disabled:
- option_and_options += [(None, options_list)]
+ option_and_options.append((None, options_list))
- return map(gen_exclusive_boolean_filter, option_and_options)
+ return list(map(gen_exclusive_boolean_filter, option_and_options))
# Dictionary of compiler options.
#
@@ -169,7 +171,7 @@ def gen_config_line(config_entry):
return '%s=%s\n' % (name, quote_if_needed(value))
def gen_config_content(config_dict):
- return map(gen_config_line, config_dict.iteritems())
+ return map(gen_config_line, config_dict.items())
def test_config_run(command, check, buildlog):
buildlog.writelines(['$ %s\n' % command])
@@ -217,7 +219,7 @@ def test_config(args):
# Return true if a filter completely matches a configuration.
def check_filter(config_dict, filter_dict):
- for name, value in filter_dict.iteritems():
+ for name, value in filter_dict.items():
if not name in config_dict:
return False
@@ -231,7 +233,7 @@ def check_filter(config_dict, filter_dict):
return True
def check_filter_relevant(config_dict, filter_dict):
- for name, value in filter_dict.iteritems():
+ for name, value in filter_dict.items():
if name in config_dict:
return True
@@ -281,7 +283,7 @@ def filter_configs_list(configs_list, passing_filters_list,
configs_list)
configs_list = map(lambda x: x[0], filter(check_blocking_filters,
configs_and_filters))
- return configs_list
+ return list(configs_list)
def find_options_dict(options_sets, name):
if name not in options_sets:
@@ -290,7 +292,7 @@ def find_options_dict(options_sets, name):
return options_sets[name]
def print_set(name, options_dict):
- print name
+ print(name)
map(lambda x: print_fn(' ' + x), sorted(iter(options_dict)))
class BuildConfigListSetsAction(argparse.Action):
@@ -302,7 +304,7 @@ class BuildConfigListSetsAction(argparse.Action):
def __call__(self, parser, namespace, values, option_string=None):
map(print_set, all_options_sets.iterkeys(),
- all_options_sets.itervalues())
+ all_options_sets.values())
sys.exit(0)
def main():
@@ -316,21 +318,21 @@ def main():
options_dict = find_options_dict(all_options_sets, args.set)
if not options_dict:
- print 'error: invalid set'
+ print('error: invalid set')
sys.exit(2);
- print 'set: ' + args.set
+ print('set: {}'.format(args.set))
configs_list = filter_configs_list(gen_configs_list(options_dict),
passing_filters_list,
blocking_filters_list)
nr_configs = len(configs_list)
- print 'total: ' + str(nr_configs)
+ print('total: {:d}'.format(nr_configs))
# This tool performs out-of-tree builds and requires a clean source tree
- print 'cleaning source tree...'
+ print('cleaning source tree...')
subprocess.check_call(['make', 'distclean'])
topbuilddir = os.path.abspath(tempfile.mkdtemp(prefix = 'build', dir = '.'))
- print 'top build directory: ' + topbuilddir
+ print('top build directory: {}'.format(topbuilddir))
pool = multiprocessing.Pool()
worker_args = map(lambda x: (topbuilddir, x), configs_list)
@@ -343,12 +345,12 @@ def main():
shutil.rmtree(topbuilddir)
raise
- failures = filter(lambda x: x[0] != 0, results)
+ failures = list(filter(lambda x: x[0] != 0, results))
map(lambda buildtree: print_fn('failed: %s/.config (%s/build.log)'
% (buildtree, buildtree)),
[buildtree for retval, buildtree in failures])
- print 'passed: ' + str(nr_configs - len(failures))
- print 'failed: ' + str(len(failures))
+ print('passed: {:d}'.format(nr_configs - len(failures)))
+ print('failed: {:d}'.format(len(failures)))
try:
os.rmdir(topbuilddir)