From 010ab170cb2f457932aa67d7239b699e68db2b4a Mon Sep 17 00:00:00 2001 From: Alexandru Croitor Date: Mon, 28 Aug 2023 16:49:24 +0200 Subject: [PATCH] CMake: Move dirty feature / dirty build detection into QtFeature.cmake It makes more sense for it to live next to the other feature code. Task-number: QTBUG-96936 Task-number: QTBUG-85962 Task-number: QTBUG-112957 Task-number: QTBUG-116209 Change-Id: I8438e6fce9deaa5e709e4b0e2e1ea4eb0600a89a Reviewed-by: Joerg Bornemann Reviewed-by: Alexey Edelev (cherry picked from commit c1d2356856481b32099cfc8fd5e6fdc856ea7d31) Reviewed-by: Qt Cherry-pick Bot --- cmake/QtFeature.cmake | 26 ++++++++++++++++++++++++++ cmake/QtSetup.cmake | 24 +----------------------- 2 files changed, 27 insertions(+), 23 deletions(-) diff --git a/cmake/QtFeature.cmake b/cmake/QtFeature.cmake index 199b844cf89..21afc7171bb 100644 --- a/cmake/QtFeature.cmake +++ b/cmake/QtFeature.cmake @@ -786,6 +786,32 @@ function(qt_feature_copy_global_config_features_to_core target) endif() endfunction() +function(qt_internal_detect_dirty_features) + # We need to clean up QT_FEATURE_*, but only once per configuration cycle + get_property(qt_feature_clean GLOBAL PROPERTY _qt_feature_clean) + if(NOT qt_feature_clean) + message(STATUS "Check for feature set changes") + set_property(GLOBAL PROPERTY _qt_feature_clean TRUE) + foreach(feature ${QT_KNOWN_FEATURES}) + if(DEFINED "FEATURE_${feature}" AND + NOT "${QT_FEATURE_${feature}}" STREQUAL "${FEATURE_${feature}}") + message(" '${feature}' is changed from ${QT_FEATURE_${feature}} \ +to ${FEATURE_${feature}}") + set(dirty_build TRUE) + endif() + unset("QT_FEATURE_${feature}" CACHE) + endforeach() + + set(QT_KNOWN_FEATURES "" CACHE INTERNAL "" FORCE) + + if(dirty_build) + set_property(GLOBAL PROPERTY _qt_dirty_build TRUE) + message(WARNING "Re-configuring in existing build folder. \ +Some features will be re-evaluated automatically.") + endif() + endif() +endfunction() + function(qt_config_compile_test name) if(DEFINED "TEST_${name}") return() diff --git a/cmake/QtSetup.cmake b/cmake/QtSetup.cmake index 34999d04ac0..72804d8eb95 100644 --- a/cmake/QtSetup.cmake +++ b/cmake/QtSetup.cmake @@ -387,29 +387,7 @@ endif() option(QT_ALLOW_SYMLINK_IN_PATHS "Allows symlinks in paths." OFF) -# We need to clean up QT_FEATURE_*, but only once per configuration cycle -get_property(qt_feature_clean GLOBAL PROPERTY _qt_feature_clean) -if(NOT qt_feature_clean) - message(STATUS "Check for feature set changes") - set_property(GLOBAL PROPERTY _qt_feature_clean TRUE) - foreach(feature ${QT_KNOWN_FEATURES}) - if(DEFINED "FEATURE_${feature}" AND - NOT "${QT_FEATURE_${feature}}" STREQUAL "${FEATURE_${feature}}") - message(" '${feature}' is changed from ${QT_FEATURE_${feature}} \ -to ${FEATURE_${feature}}") - set(dirty_build TRUE) - endif() - unset("QT_FEATURE_${feature}" CACHE) - endforeach() - - set(QT_KNOWN_FEATURES "" CACHE INTERNAL "" FORCE) - - if(dirty_build) - set_property(GLOBAL PROPERTY _qt_dirty_build TRUE) - message(WARNING "Re-configuring in existing build folder. \ -Some features will be re-evaluated automatically.") - endif() -endif() +qt_internal_detect_dirty_features() if(NOT QT_BUILD_EXAMPLES) # Disable deployment setup to avoid warnings about missing patchelf with CMake < 3.21.