diff options
-rw-r--r-- | mkspecs/features/ivigenerator.prf | 22 | ||||
-rw-r--r-- | mkspecs/features/ivigenerator_qt_module.prf | 29 | ||||
-rwxr-xr-x | src/tools/ivigenerator/generate.py | 8 | ||||
-rw-r--r-- | src/tools/ivigenerator/templates_backend_simulator.yaml | 2 | ||||
-rw-r--r-- | src/tools/ivigenerator/templates_control_panel.yaml | 2 | ||||
-rw-r--r-- | src/tools/ivigenerator/templates_frontend.yaml | 2 | ||||
-rw-r--r-- | src/tools/ivigenerator/templates_generation_validator.yaml | 2 |
7 files changed, 56 insertions, 11 deletions
diff --git a/mkspecs/features/ivigenerator.prf b/mkspecs/features/ivigenerator.prf index fcd2177..7652375 100644 --- a/mkspecs/features/ivigenerator.prf +++ b/mkspecs/features/ivigenerator.prf @@ -1,5 +1,7 @@ # Custom compiler for qface: # +# If building a module, use load(ivigenerator_qt_module) instead +# # Example input: # QFACE_SOURCES += my.foo.qface [required] # QFACE_MODULE_NAME = my_module_name @@ -25,7 +27,6 @@ QFACE_ABS_PWD = $$absolute_path($$QFACE_PWD, $$_PRO_FILE_PWD_) QFACE_FILE = $$basename(QFACE_SOURCES) QFACE_BASE_NAME = $$replace(QFACE_FILE, .qface, ) QFACE_YAML = $$QFACE_ABS_PWD/$${QFACE_BASE_NAME}.yaml -isEmpty(QFACE_MODULE_NAME): QFACE_MODULE_NAME = $$QFACE_BASE_NAME # Detect whether we are using the feature inside the qtivi repository VIRTUALENV_PATH = $$[QT_HOST_BINS]/ivigenerator/qtivi_qface_virtualenv @@ -54,11 +55,12 @@ else: ENV = LC_ALL="en_US.UTF-8" # Although this could be extra_compiler it is a normal EXTRA_TARGET for a reason. # 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_NAME = $$replace(QFACE_MODULE_NAME, "\." , "-") -PRI = $$QFACE_OUTPUT_DIR/$${PRI_NAME}.pri +PRI = $$QFACE_OUTPUT_DIR/$$lower($${QFACE_BASE_NAME}).pri +IVI_GENERATOR_OPTIONS = --format=$$QFACE_FORMAT +!isEmpty(QFACE_MODULE_NAME): IVI_GENERATOR_OPTIONS += --module=$$QFACE_MODULE qface_sources.target = $$relative_path($$PRI, $$OUT_PWD) -qface_sources.commands = $$ENV $$shell_path($$IVI_GENERATOR) -f $$QFACE_FORMAT $$shell_path($$QFACE_ABS_PWD/$${QFACE_FILE}) $$shell_path($$QFACE_OUTPUT_DIR) +qface_sources.commands = $$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 # Add all templates of the generator format as dependency @@ -73,6 +75,13 @@ exists($$QFACE_YAML) { OTHER_FILES += $$QFACE_YAML } +!isEmpty(QFACE_HEADERS_OUTPUT_DIR) { + QFACE_HEADERS_OUTPUT_TARGET = $${QFACE_HEADERS_OUTPUT_DIR}/$$lower($${QFACE_MODULE_NAME})module.h + qface_headers.target = $$relative_path($$QFACE_HEADERS_OUTPUT_TARGET, $$OUT_PWD) + qface_headers.commands = $${QMAKE_COPY_FILE} $${QFACE_OUTPUT_DIR}/*.h $${QFACE_HEADERS_OUTPUT_DIR} + qface_headers.depends = $$relative_path($$PRI, $$OUT_PWD) $$IVI_GENERATOR_PATH/generate.py +} + # Reevaluate the Makefile after the generation has finished Makefile.target = Makefile # The relative_path is needed here as qmake will use a relative_path for the output files @@ -89,6 +98,11 @@ Makefile.depends = $$relative_path($$PRI, $$OUT_PWD) Makefile.depends = $$shadowed($$IVI_GENERATOR_PATH)/forceRebuild } +!isEmpty(QFACE_HEADERS_OUTPUT_TARGET) { + Makefile.depends += $$relative_path($$QFACE_HEADERS_OUTPUT_TARGET, $$OUT_PWD) + QMAKE_EXTRA_TARGETS += qface_headers +} + # After the generation, this should exists and qmake can create the correct build tree exists($$PRI) { # save the state and reset for SOURCES, HEADERS and OTHER_FILES diff --git a/mkspecs/features/ivigenerator_qt_module.prf b/mkspecs/features/ivigenerator_qt_module.prf new file mode 100644 index 0000000..bceff89 --- /dev/null +++ b/mkspecs/features/ivigenerator_qt_module.prf @@ -0,0 +1,29 @@ +# Custom compiler for qface base modules +# +# If not building a module, use CONFIG += ivigenerator instead +# +# Example input: +# QFACE_SOURCES += my.foo.qface [required] +# QFACE_MODULE_NAME = my_module_name +# QFACE_FORMAT = frontend (or backend, simulator... -- defaults to "frontend") +# QFACE_OUTPUT_DIR = my_output_dir (defaults to current build dir) +# + +!contains(QFACE_SOURCES, .+\\.qface$) { + error("Invalid qface file provided: The file needs to end with .qface") +} + +QFACE_PWD = $$dirname(QFACE_SOURCES) +QFACE_ABS_PWD = $$absolute_path($$QFACE_PWD, $$_PRO_FILE_PWD_) + +load(qt_build_paths) +!force_independent { + QFACE_HEADERS_REL_DIR = $$relative_path($$QFACE_ABS_PWD, $$QTIVI_ROOT) + QFACE_HEADERS_OUTPUT_DIR = $${MODULE_BASE_OUTDIR}/$${QFACE_HEADERS_REL_DIR} + !exists(QFACE_HEADERS_OUTPUT_DIR) { + mkpath($${QFACE_HEADERS_OUTPUT_DIR}) + } +} + +load(qt_module) +load(ivigenerator) diff --git a/src/tools/ivigenerator/generate.py b/src/tools/ivigenerator/generate.py index 550ea67..50a1918 100755 --- a/src/tools/ivigenerator/generate.py +++ b/src/tools/ivigenerator/generate.py @@ -38,6 +38,7 @@ # SPDX-License-Identifier: LGPL-3.0 import re +import os import click import logging.config import yaml @@ -56,7 +57,7 @@ log = logging.getLogger(__file__) Filters.classPrefix = '' -QT_AS_VERSION = 1.2 +QT_AS_VERSION = 2.0 def tag_by_path(symbol, path, default_value=False): """ @@ -402,8 +403,9 @@ def generate(tplconfig, moduleConfig, src, dst): generator.register_filter('qml_control', qml_control) generator.register_filter('qml_binding_property', qml_binding_property) - - ctx = {'dst': dst, 'qtASVersion': QT_AS_VERSION} + srcFile = os.path.basename(src[0]) + srcBase = os.path.splitext(srcFile)[0] + ctx = {'dst': dst, 'qtASVersion': QT_AS_VERSION, 'srcFile':srcFile, 'srcBase':srcBase} gen_config = yaml.load(open(here / '{0}.yaml'.format(tplconfig))) for module in system.modules: log.debug('generate code for module %s', module) diff --git a/src/tools/ivigenerator/templates_backend_simulator.yaml b/src/tools/ivigenerator/templates_backend_simulator.yaml index 76441df..0c3708d 100644 --- a/src/tools/ivigenerator/templates_backend_simulator.yaml +++ b/src/tools/ivigenerator/templates_backend_simulator.yaml @@ -6,7 +6,7 @@ generate_rules: template_file: "plugin.cpp.tpl" - dest_file: "{{module.module_name|lower}}.json" template_file: "plugin.json" - - dest_file: "{{module|lower|replace('.', '-')}}.pri" + - dest_file: "{{srcBase|lower}}.pri" template_file: "plugin.pri.tpl" interface_rules: - dest_file: '{{interface|lower}}backend.h' diff --git a/src/tools/ivigenerator/templates_control_panel.yaml b/src/tools/ivigenerator/templates_control_panel.yaml index ecf7661..e8297d8 100644 --- a/src/tools/ivigenerator/templates_control_panel.yaml +++ b/src/tools/ivigenerator/templates_control_panel.yaml @@ -6,7 +6,7 @@ generate_rules: template_file: 'main.qml.tpl' - dest_file: 'qml.qrc' template_file: 'qml.qrc.tpl' - - dest_file: "{{module|lower|replace('.', '-')}}.pri" + - dest_file: "{{srcBase|lower}}.pri" template_file: "ui.pri.tpl" - dest_file: "{{module.module_name|lower}}global.h" template_file: "global.h.tpl" diff --git a/src/tools/ivigenerator/templates_frontend.yaml b/src/tools/ivigenerator/templates_frontend.yaml index 97245f2..f993e80 100644 --- a/src/tools/ivigenerator/templates_frontend.yaml +++ b/src/tools/ivigenerator/templates_frontend.yaml @@ -10,7 +10,7 @@ generate_rules: template_file: "modulefactory.h.tpl" - dest_file: "{{module.module_name|lower}}modulefactory.cpp" template_file: "modulefactory.cpp.tpl" - - dest_file: "{{module|lower|replace('.', '-')}}.pri" + - dest_file: "{{srcBase|lower}}.pri" template_file: "module.pri.tpl" interface_rules: - dest_file: '{{interface|lower}}backendinterface.h' diff --git a/src/tools/ivigenerator/templates_generation_validator.yaml b/src/tools/ivigenerator/templates_generation_validator.yaml index 1dbffcb..aaf598c 100644 --- a/src/tools/ivigenerator/templates_generation_validator.yaml +++ b/src/tools/ivigenerator/templates_generation_validator.yaml @@ -6,7 +6,7 @@ generate_rules: template_file: "main.qml.tpl" - dest_file: "qml.qrc" template_file: "qml.qrc.tpl" - - dest_file: "{{module|lower|replace('.', '-')}}.pri" + - dest_file: "{{srcBase|lower}}.pri" template_file: "ui.pri.tpl" - dest_file: "generationstatusitem.cpp" template_file: "generationstatusitem.cpp.tpl" |