diff options
Diffstat (limited to 'tools/build/rtems-test-check-py')
-rwxr-xr-x | tools/build/rtems-test-check-py | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/tools/build/rtems-test-check-py b/tools/build/rtems-test-check-py new file mode 100755 index 0000000000..e6bf29b7cf --- /dev/null +++ b/tools/build/rtems-test-check-py @@ -0,0 +1,116 @@ +#! /usr/bin/env python +# +# Copyright 2017 Chris Johns <chrisj@rtems.org> +# All rights reserved +# + +# +# Python version the rtems-test-check script. +# + +from __future__ import print_function +import os.path +import sys + +def eprint(*args, **kwargs): + print(*args, file=sys.stderr, **kwargs) + +# +# Arguments. Keep it simple. +# +if len(sys.argv) < 4: + eprint('error: invalid command line') + print('INVALID-TEST-DATA') + sys.exit(2) + +mode = sys.argv[1] +testconfig = [sys.argv[2]] +includepath = sys.argv[3] +bsp = sys.argv[4] +tests = sys.argv[5:] + +# +# Handle the modes. +# +if mode == 'exclude': + pass +elif mode == 'flags': + if len(tests) != 1: + eprint('error: test count not 1 for mode: %s' % (mode)) + print('INVALID-TEST-DATA') + sys.exit(1) +else: + eprint('error: invalid mode: %s' % (mode)) + print('INVALID-TEST-DATA') + sys.exit(1) + +# +# Common RTEMS testsuite configuration. Load first. +# +rtems_testdata = os.path.join(includepath, 'testdata', 'rtems.tcfg') +if os.path.exists(rtems_testdata): + testconfig.insert(0, rtems_testdata) + +states = ['exclude', + 'expected-fail', + 'user-input', + 'indeterminate', + 'benchmark'] +defines = { 'expected-fail' : '-DTEST_STATE_EXPECTED_FAIL=1', + 'user-input' : '-DTEST_STATE_USER_INPUT=1', + 'indeterminate' : '-DTEST_STATE_INDETERMINATE=1', + 'benchmark' : '-DTEST_STATE_BENCHMARK=1' } +output = [] +testdata = {} + +def clean(line): + line = line[0:-1] + b = line.find('#') + if b >= 0: + line = line[1:b] + return line.strip() + +# +# Load the test data. +# +for tc in range(0, len(testconfig)): + if not os.path.exists(testconfig[tc]): + continue + with open(testconfig[tc]) as f: + tdata = [clean(l) for l in f.readlines()] + lc = 0 + for line in tdata: + lc += 1 + ls = [s.strip() for s in line.split(':')] + if len(line) == 0: + continue + if len(ls) != 2: + eprint('error: syntax error: %s:%d' % (tc, lc)) + print('INVALID-TEST-DATA') + sys.exit(1) + state = ls[0] + test = ls[1] + if state == 'include': + testconfig.insert(td, test) + elif state in states: + if state not in testdata: + testdata[state] = [test] + else: + testdata[state] += [test] + else: + eprint('error: invalid test state: %s in %s:%d' % (state, tc, lc)) + print('INVALID-TEST-DATA') + sys.exit(1) + +for test in tests: + if mode == 'exclude': + if 'exclude' not in testdata or test not in testdata['exclude']: + output += [test] + elif mode == 'flags': + for state in states: + if state != 'exclude' and state in testdata and test in testdata[state]: + output += [defines[state]] + +print(' '.join(sorted(set(output)))) + +sys.exit(0) |