diff options
author | Dominik Holland <dominik.holland@qt.io> | 2021-05-12 09:07:14 +0200 |
---|---|---|
committer | Dominik Holland <dominik.holland@qt.io> | 2021-05-21 13:51:28 +0200 |
commit | c33b864dd333b278bcc00a5a737b3db6f196a611 (patch) | |
tree | 10a160c93f58bebd5d8c8b9eef7716f6d25a64f6 | |
parent | d7e6c57f6f54eeec75796e14afc52f9a9113a61c (diff) | |
download | qtivi-c33b864dd333b278bcc00a5a737b3db6f196a611.tar.gz |
cmake: Regenerate code when qface, template or yaml files change
Change-Id: I355377a2e57da3f51ee6227fdd6a515a1600b2dc
Reviewed-by: Robert Griebl <robert.griebl@qt.io>
-rw-r--r-- | src/ivicore/Qt6IviCoreMacros.cmake | 32 |
1 files changed, 21 insertions, 11 deletions
diff --git a/src/ivicore/Qt6IviCoreMacros.cmake b/src/ivicore/Qt6IviCoreMacros.cmake index 5101501..0ad7d75 100644 --- a/src/ivicore/Qt6IviCoreMacros.cmake +++ b/src/ivicore/Qt6IviCoreMacros.cmake @@ -48,8 +48,8 @@ function(qt6_ivigenerator_generate) message(FATAL_ERROR "QFACE_SOURCES can't be empty") endif() get_filename_component(QFACE_SOURCES "${ARG_QFACE_SOURCES}" REALPATH BASE_DIR) - get_filename_component(QFACE_SOURCE_DIR "${ARG_QFACE_SOURCES}" DIRECTORY) - get_filename_component(QFACE_BASE_NAME "${ARG_QFACE_SOURCES}" NAME_WLE) + get_filename_component(QFACE_SOURCE_DIR "${QFACE_SOURCES}" DIRECTORY) + get_filename_component(QFACE_BASE_NAME "${QFACE_SOURCES}" NAME_WLE) get_filename_component(QFACE_SOURCE_ANNOTATION ${QFACE_SOURCE_DIR}/${QFACE_BASE_NAME}.yaml REALPATH BASE_DIR) set(QFACE_TEMPLATE_PWD "${GENERATOR_PATH}/templates/${ARG_QFACE_FORMAT}") @@ -67,24 +67,25 @@ function(qt6_ivigenerator_generate) endif() # Register all source files to cause a cmake rerun - set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${QFACE_SOURCES}) + set(GEN_DEPENDENCIES) + list(APPEND GEN_DEPENDENCIES ${QFACE_SOURCES}) if (EXISTS ${QFACE_SOURCE_ANNOTATION}) - set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${QFACE_SOURCE_ANNOTATION}) + list(APPEND GEN_DEPENDENCIES ${QFACE_SOURCE_ANNOTATION}) endif() # Also register all files which are part of the current template file(GLOB FORMAT_FILES ${FORMAT_PATH}/*) - set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${FORMAT_FILES}) - set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${FORMAT_PATH}.yaml) + list(APPEND GEN_DEPENDENCIES ${FORMAT_FILES}) + list(APPEND GEN_DEPENDENCIES ${FORMAT_PATH}.yaml) # Most templates also have a dependency to a common folder file(GLOB COMMON_FORMAT_FILES ${GENERATOR_PATH}/templates/*common*/*) - set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${COMMON_FORMAT_FILES}) + list(APPEND GEN_DEPENDENCIES ${COMMON_FORMAT_FILES}) set(GENERATOR_ARGUMENTS --format=${QFACE_FORMAT} --force) foreach(ANNOTATION ${ARG_QFACE_ANNOTATIONS}) get_filename_component(ANNOTATION_PATH "${ANNOTATION}" REALPATH BASE_DIR) list(APPEND GENERATOR_ARGUMENTS -A ${ANNOTATION_PATH}) # Dependency for regeneration - set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${ANNOTATION_PATH}) + list(APPEND GEN_DEPENDENCIES ${ANNOTATION_PATH}) endforeach() foreach(IMPORT ${ARG_QFACE_IMPORT_PATH}) @@ -92,13 +93,22 @@ function(qt6_ivigenerator_generate) list(APPEND GENERATOR_ARGUMENTS -I ${IMPORT_PATH}) # Dependency for regeneration file(GLOB QFACE_FILES ${IMPORT_PATH}/*.qface) - set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${QFACE_FILES}) + list(APPEND GEN_DEPENDENCIES ${QFACE_FILES}) endforeach() + set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${GEN_DEPENDENCIES}) + # If the generator was run successfully before # Check for the timestamps to determine when to run it again. - # TODO, this needs to be extended to also include template and yaml changes - if (${QFACE_SOURCES} IS_NEWER_THAN ${QFACE_OUTPUT_DIR}/.stamp-ivigenerator) + set(RUN_GENERATOR FALSE) + foreach(DEP ${GEN_DEPENDENCIES}) + if (${DEP} IS_NEWER_THAN ${QFACE_OUTPUT_DIR}/.stamp-ivigenerator) + set(RUN_GENERATOR TRUE) + break() + endif() + endforeach() + + if (RUN_GENERATOR) # TODO How to best unset those again afterwards ? # Use cmake -E slee + cmake -E env COMMAND instead ? #equals(QMAKE_HOST.os, Windows): ENV = chcp 65001 && |