From 19c7580643cd26903cd5a9fdc867b4b689429bc4 Mon Sep 17 00:00:00 2001 From: Dominik Holland Date: Tue, 9 Jan 2018 16:10:58 +0100 Subject: Improve the qmake ivigenerator integration MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add a Makefile dependency towards the qface file to call the ivigenerator again once that has changed. Also introduce a '--force' flag to the ivigenerator which is used by qmake/make to ensure the output is always written when the ivigenerator is called. Otherwise the qface library is smart and will only change the files which actually needs to be changed. This is needed as 'make' is using timestamps to detect what needs to be recompiled and calls ivigenerator until the generated pri file is newer as its dependencies. Change-Id: I873d0e7e91febed4484468554bc320bb8cc66809 Reviewed-by: Antti Hölttä --- mkspecs/features/ivigenerator.prf | 3 ++- src/tools/ivigenerator/generate.py | 13 ++++++++----- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/mkspecs/features/ivigenerator.prf b/mkspecs/features/ivigenerator.prf index e94d981..ff8ed2e 100644 --- a/mkspecs/features/ivigenerator.prf +++ b/mkspecs/features/ivigenerator.prf @@ -63,7 +63,7 @@ IVI_GENERATOR = $$VIRTUALENV_PYTHON $$IVI_GENERATOR_PATH/generate.py # In the debug_and_release configuration, we want to have the generator executed # during the run of the meta Makefile to only generate the code once. PRI = $$QFACE_OUTPUT_DIR/$$lower($${QFACE_BASE_NAME}).pri -IVI_GENERATOR_OPTIONS = --format=$$QFACE_FORMAT +IVI_GENERATOR_OPTIONS = --format=$$QFACE_FORMAT --force !isEmpty(QFACE_MODULE_NAME): IVI_GENERATOR_OPTIONS += --module=$$QFACE_MODULE # Windows doesn't offer any other way to sleep for a time inside non-interactive scripts @@ -73,6 +73,7 @@ else: SLEEP = sleep 1 qface_sources.target = $$relative_path($$PRI, $$OUT_PWD) qface_sources.commands = $$SLEEP && $$ENV $$shell_path($$IVI_GENERATOR) $$IVI_GENERATOR_OPTIONS $$shell_path($$QFACE_ABS_PWD/$${QFACE_FILE}) $$shell_path($$QFACE_OUTPUT_DIR) qface_sources.depends = $$IVI_GENERATOR_PATH/generate.py +qface_sources.depends = $$QFACE_ABS_PWD/$${QFACE_FILE} # Add all templates of the generator format as dependency QFACE_TEMPLATE_PWD = $$IVI_GENERATOR_PATH/templates_$${QFACE_FORMAT} diff --git a/src/tools/ivigenerator/generate.py b/src/tools/ivigenerator/generate.py index 12df180..66904cb 100755 --- a/src/tools/ivigenerator/generate.py +++ b/src/tools/ivigenerator/generate.py @@ -565,10 +565,11 @@ def generate(tplconfig, moduleConfig, src, dst): dst = generator.apply('{{dst}}', ctx) generator.destination = dst module_rules = gen_config['generate_rules']['module_rules'] + force = moduleConfig['force'] if module_rules is None: module_rules = [] for rule in module_rules: preserve = rule['preserve'] if 'preserve' in rule else False - generator.write(rule['dest_file'], rule['template_file'], ctx, preserve) + generator.write(rule['dest_file'], rule['template_file'], ctx, preserve, force) for interface in module.interfaces: log.debug('generate backend code for interface %s', interface) interface.add_tag('config') @@ -577,7 +578,7 @@ def generate(tplconfig, moduleConfig, src, dst): if interface_rules is None: interface_rules = [] for rule in interface_rules: preserve = rule['preserve'] if 'preserve' in rule else False - generator.write(rule['dest_file'], rule['template_file'], ctx, preserve) + generator.write(rule['dest_file'], rule['template_file'], ctx, preserve, force) if 'struct_rules' in gen_config['generate_rules'] and isinstance(gen_config['generate_rules']['struct_rules'], list): for struct in module.structs: log.debug('generate code for struct %s', struct) @@ -585,7 +586,7 @@ def generate(tplconfig, moduleConfig, src, dst): ctx.update({'struct': struct}) for rule in gen_config['generate_rules']['struct_rules']: preserve = rule['preserve'] if 'preserve' in rule else False - generator.write(rule['dest_file'], rule['template_file'], ctx, preserve) + generator.write(rule['dest_file'], rule['template_file'], ctx, preserve, force) def run(format, moduleConfig, src, dst): @@ -604,10 +605,11 @@ def run(format, moduleConfig, src, dst): @click.option('--format', '-f', multiple=False) @click.option('--module', default=False) @click.option('--validation_info', default=False) +@click.option('--force', is_flag=True, default=False) @click.argument('src', nargs=-1, type=click.Path(exists=True)) @click.argument('dst', nargs=1, type=click.Path(exists=True)) -def app(src, dst, format, reload, module, validation_info): +def app(src, dst, format, reload, module, validation_info, force): """Takes several files or directories as src and generates the code in the given dst directory.""" @@ -625,7 +627,8 @@ def app(src, dst, format, reload, module, validation_info): else: moduleConfig = { "module": module, - "validation_info": validation_info + "validation_info": validation_info, + "force": force } run(format, moduleConfig, src, dst) -- cgit v1.2.1