diff --git a/cmake/QtScopeFinalizerHelpers.cmake b/cmake/QtScopeFinalizerHelpers.cmake index fbce324db6a..6d3961dc7cd 100644 --- a/cmake/QtScopeFinalizerHelpers.cmake +++ b/cmake/QtScopeFinalizerHelpers.cmake @@ -88,6 +88,9 @@ function(qt_watch_current_list_dir variable access value current_list_file stack elseif(func STREQUAL "_qt_internal_finalize_sbom") _qt_internal_finalize_sbom( ${a1} ${a2} ${a3} ${a4} ${a5} ${a6} ${a7} ${a8} ${a9}) + elseif(func STREQUAL "qt6_finalize_target") + qt6_finalize_target( + ${a1} ${a2} ${a3} ${a4} ${a5} ${a6} ${a7} ${a8} ${a9}) else() message(FATAL_ERROR "qt_watch_current_list_dir doesn't know about ${func}. Consider adding it.") endif() diff --git a/src/corelib/Qt6CoreMacros.cmake b/src/corelib/Qt6CoreMacros.cmake index 47b3b42150e..238ab7b3633 100644 --- a/src/corelib/Qt6CoreMacros.cmake +++ b/src/corelib/Qt6CoreMacros.cmake @@ -652,17 +652,7 @@ function(qt6_add_executable target) return() endif() - # Defer the finalization if we can. When the caller's project requires - # CMake 3.19 or later, this makes the calls to this function concise while - # still allowing target property modification before finalization. - if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.19) - # Need to wrap in an EVAL CODE or else ${target} won't be evaluated - # due to special behavior of cmake_language() argument handling - cmake_language(EVAL CODE "cmake_language(DEFER CALL qt6_finalize_target ${target})") - else() - set_target_properties("${target}" PROPERTIES _qt_is_immediately_finalized TRUE) - qt6_finalize_target("${target}") - endif() + _qt_internal_finalize_target_defer("${target}") endfunction() # Just like for qt_add_resources, we should disable zstd compression when cross-compiling to a @@ -861,6 +851,22 @@ function(qt6_finalize_target target) set_target_properties(${target} PROPERTIES _qt_is_finalized TRUE) endfunction() +function(_qt_internal_finalize_target_defer target) + # Defer the finalization if we can. When the caller's project requires + # CMake 3.19 or later, this makes the calls to this function concise while + # still allowing target property modification before finalization. + if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.19) + # Need to wrap in an EVAL CODE or else ${target} won't be evaluated + # due to special behavior of cmake_language() argument handling + cmake_language(EVAL CODE "cmake_language(DEFER CALL qt6_finalize_target ${target})") + elseif(QT_BUILDING_QT AND QT_INTERNAL_USE_POOR_MANS_SCOPE_FINALIZER) + qt_add_list_file_finalizer(qt6_finalize_target "${target}") + else() + set_target_properties("${target}" PROPERTIES _qt_is_immediately_finalized TRUE) + qt6_finalize_target("${target}") + endif() +endfunction() + function(_qt_internal_finalize_source_groups target) if(NOT ("${CMAKE_GENERATOR}" STREQUAL "Xcode" OR "${CMAKE_GENERATOR}" MATCHES "^Visual Studio")) @@ -2628,17 +2634,7 @@ function(qt6_add_plugin target) return() endif() - # Defer the finalization if we can. When the caller's project requires - # CMake 3.19 or later, this makes the calls to this function concise while - # still allowing target property modification before finalization. - if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.19) - # Need to wrap in an EVAL CODE or else ${target} won't be evaluated - # due to special behavior of cmake_language() argument handling - cmake_language(EVAL CODE "cmake_language(DEFER CALL qt6_finalize_target ${target})") - else() - set_target_properties("${target}" PROPERTIES _qt_is_immediately_finalized TRUE) - qt6_finalize_target("${target}") - endif() + _qt_internal_finalize_target_defer("${target}") endfunction() if(NOT QT_NO_CREATE_VERSIONLESS_FUNCTIONS) @@ -2664,17 +2660,7 @@ function(qt6_add_library target) return() endif() - # Defer the finalization if we can. When the caller's project requires - # CMake 3.19 or later, this makes the calls to this function concise while - # still allowing target property modification before finalization. - if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.19) - # Need to wrap in an EVAL CODE or else ${target} won't be evaluated - # due to special behavior of cmake_language() argument handling - cmake_language(EVAL CODE "cmake_language(DEFER CALL qt6_finalize_target ${target})") - else() - set_target_properties("${target}" PROPERTIES _qt_is_immediately_finalized TRUE) - qt6_finalize_target("${target}") - endif() + _qt_internal_finalize_target_defer("${target}") endfunction() # Creates a library target by forwarding the arguments to add_library.