From 2b3fe3d02c6c215faad8ca309895bc2c90e406bd Mon Sep 17 00:00:00 2001 From: Dan Liew Date: Sun, 28 Feb 2016 16:27:05 +0000 Subject: [PATCH] Refactor ``mk_gparams_register_modules()`` so that it is usable externally via a new function ``mk_gparams_register_modules_internal()`` which is called by a new ``mk_gparams_register_modules_cpp.py`` script. This will allow other build systems to generate the ``gparams_register_modules.cpp`` files. --- scripts/mk_gparams_register_modules_cpp.py | 47 ++++++++++++++++++++++ scripts/mk_util.py | 16 +++++--- 2 files changed, 58 insertions(+), 5 deletions(-) create mode 100755 scripts/mk_gparams_register_modules_cpp.py diff --git a/scripts/mk_gparams_register_modules_cpp.py b/scripts/mk_gparams_register_modules_cpp.py new file mode 100755 index 000000000..1c7e221ba --- /dev/null +++ b/scripts/mk_gparams_register_modules_cpp.py @@ -0,0 +1,47 @@ +#!/usr/bin/env python +""" +Determines the available global parameters +in header files in the list of source directions +and generates a ``gparams_register_modules.cpp`` file in +the destination directory that defines a function +``void gparams_register_modules()``. +""" +import mk_util +import argparse +import logging +import os +import sys + +def check_dir(path): + if not os.path.exists(path): + logging.error('"{}" does not exist'.format(path)) + return 1 + + if not os.path.isdir(path): + logging.error('"{}" is not a directory'.format(path)) + return 1 + + return 0 + + +def main(args): + logging.basicConfig(level=logging.INFO) + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("destination_dir", help="destination directory") + parser.add_argument("source_dirs", nargs="+", + help="One or more source directories to search") + pargs = parser.parse_args(args) + + if check_dir(pargs.destination_dir) != 0: + return 1 + + for source_dir in pargs.source_dirs: + if check_dir(source_dir) != 0: + return 1 + + mk_util.mk_gparams_register_modules_internal(pargs.source_dirs, pargs.destination_dir) + return 0 + +if __name__ == '__main__': + sys.exit(main(sys.argv[1:])) + diff --git a/scripts/mk_util.py b/scripts/mk_util.py index ef652eab3..53a9b24fe 100644 --- a/scripts/mk_util.py +++ b/scripts/mk_util.py @@ -2817,11 +2817,18 @@ def mk_all_mem_initializer_cpps(): cnames.append(c.name) mk_mem_initializer_cpp(cnames, c.src_dir) -# Generate an mem_initializer.cpp at path. +# Generate an ``gparams_register_modules.cpp`` at path. # This file implements the procedure # void gparams_register_modules() # This procedure is invoked by gparams::init() def mk_gparams_register_modules(cnames, path): + component_src_dirs = [] + for cname in cnames: + c = get_component(cname) + component_src_dirs.append(c.src_dir) + mk_gparams_register_modules_internal(component_src_dirs, path) + +def mk_gparams_register_modules_internal(component_src_dirs, path): cmds = [] mod_cmds = [] mod_descrs = [] @@ -2832,12 +2839,11 @@ def mk_gparams_register_modules(cnames, path): reg_pat = re.compile('[ \t]*REG_PARAMS\(\'([^\']*)\'\)') reg_mod_pat = re.compile('[ \t]*REG_MODULE_PARAMS\(\'([^\']*)\', *\'([^\']*)\'\)') reg_mod_descr_pat = re.compile('[ \t]*REG_MODULE_DESCRIPTION\(\'([^\']*)\', *\'([^\']*)\'\)') - for cname in cnames: - c = get_component(cname) - h_files = filter(lambda f: f.endswith('.h') or f.endswith('.hpp'), os.listdir(c.src_dir)) + for component_src_dir in component_src_dirs: + h_files = filter(lambda f: f.endswith('.h') or f.endswith('.hpp'), os.listdir(component_src_dir)) for h_file in h_files: added_include = False - fin = open(os.path.join(c.src_dir, h_file), 'r') + fin = open(os.path.join(component_src_dir, h_file), 'r') for line in fin: m = reg_pat.match(line) if m: