summaryrefslogtreecommitdiffstats
path: root/comm/third_party/botan/src/scripts/check.py
diff options
context:
space:
mode:
Diffstat (limited to 'comm/third_party/botan/src/scripts/check.py')
-rw-r--r--comm/third_party/botan/src/scripts/check.py89
1 files changed, 89 insertions, 0 deletions
diff --git a/comm/third_party/botan/src/scripts/check.py b/comm/third_party/botan/src/scripts/check.py
new file mode 100644
index 0000000000..ea80d552d2
--- /dev/null
+++ b/comm/third_party/botan/src/scripts/check.py
@@ -0,0 +1,89 @@
+#!/usr/bin/env python
+
+"""
+Implements the "make check" target
+
+(C) 2020 Jack Lloyd, Rene Meusel
+
+Botan is released under the Simplified BSD License (see license.txt)
+"""
+
+import json
+import logging
+import optparse # pylint: disable=deprecated-module
+import os
+import subprocess
+import sys
+
+def run_and_check(cmd_line, env=None, cwd=None):
+
+ logging.info("Starting %s", ' '.join(cmd_line))
+
+ try:
+ proc = subprocess.Popen(cmd_line, cwd=cwd, env=env)
+ proc.communicate()
+ except OSError as e:
+ logging.error("Executing %s failed (%s)", ' '.join(cmd_line), e)
+
+ if proc.returncode != 0:
+ logging.error("Error running %s", ' '.join(cmd_line))
+ sys.exit(1)
+
+
+def make_environment(build_shared_lib):
+ if not build_shared_lib:
+ return None
+
+ env = os.environ.copy()
+
+ def extend_colon_list(k, n):
+ env[k] = n if k not in env else ":".join([env[k], n])
+
+ extend_colon_list("DYLD_LIBRARY_PATH", os.path.abspath("."))
+ extend_colon_list("LD_LIBRARY_PATH", os.path.abspath("."))
+
+ return env
+
+
+def parse_options(args):
+ parser = optparse.OptionParser()
+ parser.add_option('--build-dir', default='build', metavar='DIR',
+ help='specify the botan build directory (default %default)')
+
+ (options, args) = parser.parse_args(args)
+
+ if len(args) > 1:
+ raise Exception("Unknown arguments")
+
+ return options
+
+
+def read_config(config):
+ try:
+ with open(config) as f:
+ return json.load(f)
+ except OSError:
+ raise Exception('Failed to load build config %s - is build dir correct?' % (config))
+
+
+def main(args=None):
+ if args is None:
+ args = sys.argv
+
+ options = parse_options(args)
+
+ cfg = read_config(os.path.join(options.build_dir, 'build_config.json'))
+
+ test_exe = cfg.get('test_exe')
+ build_shared_lib = cfg.get('build_shared_lib')
+
+ if not os.path.isfile(test_exe) or not os.access(test_exe, os.X_OK):
+ raise Exception("Test binary not built")
+
+ run_and_check([test_exe, "--data-dir=%s" % cfg.get('test_data_dir')],
+ make_environment(build_shared_lib))
+
+ return 0
+
+if __name__ == '__main__':
+ sys.exit(main())