diff options
Diffstat (limited to 'tools/buildman/main.py')
-rwxr-xr-x | tools/buildman/main.py | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/tools/buildman/main.py b/tools/buildman/main.py new file mode 100755 index 00000000000..77b9bebed27 --- /dev/null +++ b/tools/buildman/main.py @@ -0,0 +1,106 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: GPL-2.0+ +# +# Copyright (c) 2012 The Chromium OS Authors. +# + +"""See README for more information""" + +try: + import importlib.resources +except ImportError: + # for Python 3.6 + import importlib_resources +import os +import sys + +# Bring in the patman libraries +# pylint: disable=C0413 +our_path = os.path.dirname(os.path.realpath(__file__)) +sys.path.insert(1, os.path.join(our_path, '..')) + +# Our modules +from buildman import bsettings +from buildman import cmdline +from buildman import control +from u_boot_pylib import test_util +from u_boot_pylib import tools +from u_boot_pylib import tout + +def run_tests(skip_net_tests, debug, verbose, args): + """Run the buildman tests + + Args: + skip_net_tests (bool): True to skip tests which need the network + debug (bool): True to run in debugging mode (full traceback) + verbosity (int): Verbosity level to use (0-4) + args (list of str): List of tests to run, empty to run all + """ + # These imports are here since tests are not available when buildman is + # installed as a Python module + # pylint: disable=C0415 + from buildman import func_test + from buildman import test + + test_name = args.terms and args.terms[0] or None + if skip_net_tests: + test.use_network = False + + # Run the entry tests first ,since these need to be the first to import the + # 'entry' module. + result = test_util.run_test_suites( + 'buildman', debug, verbose, False, False, args.threads, test_name, [], + [test.TestBuild, func_test.TestFunctional, 'buildman.toolchain']) + + return (0 if result.wasSuccessful() else 1) + +def run_test_coverage(): + """Run the tests and check that we get 100% coverage""" + test_util.run_test_coverage( + 'tools/buildman/buildman', None, + ['tools/patman/*.py', 'tools/u_boot_pylib/*', '*test_fdt.py', + 'tools/buildman/kconfiglib.py', 'tools/buildman/*test*.py', + 'tools/buildman/main.py'], + '/tmp/b', single_thread='-T1') + + +def run_buildman(): + """Run bulidman + + This is the main program. It collects arguments and runs either the tests or + the control module. + """ + args = cmdline.parse_args() + + if not args.debug: + sys.tracebacklimit = 0 + + # Run our meagre tests + if cmdline.HAS_TESTS and args.test: + return run_tests(args.skip_net_tests, args.debug, args.verbose, args) + + elif cmdline.HAS_TESTS and args.coverage: + run_test_coverage() + + elif args.full_help: + if hasattr(importlib.resources, 'files'): + dirpath = importlib.resources.files('buildman') + tools.print_full_help(str(dirpath.joinpath('README.rst'))) + else: + with importlib.resources.path('buildman', 'README.rst') as readme: + tools.print_full_help(str(readme)) + + + # Build selected commits for selected boards + else: + try: + tout.init(tout.INFO if args.verbose else tout.WARNING) + bsettings.setup(args.config_file) + ret_code = control.do_buildman(args) + finally: + tout.uninit() + return ret_code + + +if __name__ == "__main__": + sys.exit(run_buildman()) |