summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDominik Holland <dominik.holland@pelagicore.com>2018-01-09 16:10:58 +0100
committerAntti Hölttä <ahoelttae@luxoft.com>2018-01-10 10:48:43 +0000
commit19c7580643cd26903cd5a9fdc867b4b689429bc4 (patch)
tree7a37c88a26c45077ccb27821e3ff2f1eaeb380b0
parent16aebfe92b6437768491e4f632c608785ba0c12b (diff)
downloadqtivi-19c7580643cd26903cd5a9fdc867b4b689429bc4.tar.gz
Improve the qmake ivigenerator integration
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ä <ahoelttae@luxoft.com>
-rw-r--r--mkspecs/features/ivigenerator.prf3
-rwxr-xr-xsrc/tools/ivigenerator/generate.py13
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)