summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDominik Holland <dominik.holland@qt.io>2021-05-12 09:07:14 +0200
committerDominik Holland <dominik.holland@qt.io>2021-05-21 13:51:28 +0200
commitc33b864dd333b278bcc00a5a737b3db6f196a611 (patch)
tree10a160c93f58bebd5d8c8b9eef7716f6d25a64f6
parentd7e6c57f6f54eeec75796e14afc52f9a9113a61c (diff)
downloadqtivi-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.cmake32
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 &&