From dcaab5eb8d4b5d9388e295a25b8988e3094e83bd Mon Sep 17 00:00:00 2001 From: Alexandru Croitor Date: Tue, 23 Jan 2024 13:40:26 +0100 Subject: [PATCH] CMake: Fix unity build for qtgraphs qtgraphs defines a target in one directory, and then calls qt_internal_extend_target with NO_UNITY_BUILD_SOURCES in another subdirectory scope. That in turn calls set_source_files_properties but only for the latter subdirectory, and not the main target directory. Because CMake has per-directory-scope source file properties, the 'no unity sources' option was effectively ignored. When using CMake 3.18, make sure to specify the TARGET_DIRECTORY option so that the source file properties are added to the scope of the defining target. Pick-to: 6.6 6.5 Change-Id: I4190d4073a2955aa7053b5faaaa57f683bc768a2 Reviewed-by: Joerg Bornemann (cherry picked from commit 081e50d768114aeeb8f0d284989986d4debc6ec3) Reviewed-by: Qt Cherry-pick Bot --- cmake/QtUnityBuildHelpers.cmake | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/cmake/QtUnityBuildHelpers.cmake b/cmake/QtUnityBuildHelpers.cmake index b66c6765ba3..e804396f597 100644 --- a/cmake/QtUnityBuildHelpers.cmake +++ b/cmake/QtUnityBuildHelpers.cmake @@ -11,7 +11,14 @@ function(_qt_internal_validate_no_unity_build prefix) endfunction() function(qt_update_ignore_unity_build_sources target sources) - if (sources) - set_source_files_properties(${sources} PROPERTIES SKIP_UNITY_BUILD_INCLUSION ON) + if(sources) + # We need to add the TARGET_DIRECTORY scope for targets that have qt_internal_extend_target + # calls in different subdirectories, like in qtgraphs. + set(scope_args) + if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.18") + set(scope_args TARGET_DIRECTORY ${target}) + endif() + set_source_files_properties(${sources} ${scope_args} + PROPERTIES SKIP_UNITY_BUILD_INCLUSION ON) endif() endfunction()