From 067253fb2f1aec3e03c577dd53ed2e6d903c28da Mon Sep 17 00:00:00 2001 From: Craig Scott Date: Thu, 2 Sep 2021 20:34:33 +1000 Subject: Fix top level builds where AUTOMOC_EXECUTABLE was unset on some targets The qt_example_build_end() command tries to recursively find all build system targets by descending into all source directories. Some sets of examples re-use the same source directory multiple times with different build directories, but this hides all but one of those re-used source directories from the recursive search. This resulted in some targets being missed, which in turn prevented qt_autogen_tools() from being called on them. In top level builds, this meant AUTOMOC_EXECUTABLE wasn't set, so CMake tried to verify the moc it wanted to use, which doesn't exist for the first configure of a top level build, resulting in a fatal error. Since we can't find all targets reliably with a recursive search, manually handle the ones that could be missed. There was a similar problem with qt_autogen_tools() not being called for a target created to compile a doc snippet. The error message is the same as the case above, the cause is again AUTOMOC_EXECUTABLE not being set, but for a different reason. Apply the same fix and call it manually, which should have been the case originally. Fixes: QTBUG-96118 Fixes: QTBUG-96159 Change-Id: I079c696cf74f77d7caa2c59e6263d3fb1c55d20e Reviewed-by: Maximilian Goldstein Reviewed-by: Ulf Hermann Reviewed-by: Fabian Kosmale (cherry picked from commit 920a5f727b02cade81fac0a5536e52bbb4c72d73) Reviewed-by: Qt Cherry-pick Bot --- examples/quick/CMakeLists.txt | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) (limited to 'examples/quick') diff --git a/examples/quick/CMakeLists.txt b/examples/quick/CMakeLists.txt index 13f41b5a7d..d39bf5a830 100644 --- a/examples/quick/CMakeLists.txt +++ b/examples/quick/CMakeLists.txt @@ -10,7 +10,7 @@ qt_internal_add_example(keyinteraction) qt_internal_add_example(layouts) add_subdirectory(localstorage) add_subdirectory(models) -#qt_internal_add_example(views) +qt_internal_add_example(views) add_subdirectory(tableview) qt_internal_add_example(mousearea) qt_internal_add_example(positioners) @@ -19,12 +19,12 @@ add_subdirectory(scenegraph) qt_internal_add_example(shadereffects) qt_internal_add_example(text) qt_internal_add_example(threading) -#qt_internal_add_example(touchinteraction) +qt_internal_add_example(touchinteraction) add_subdirectory(tutorials) add_subdirectory(customitems) qt_internal_add_example(imageprovider) qt_internal_add_example(imageresponseprovider) -#qt_internal_add_example(window) +qt_internal_add_example(window) add_subdirectory(particles) qt_internal_add_example(delegatechooser) qt_internal_add_example(shapes) @@ -37,3 +37,20 @@ endif() if(TARGET Qt::QuickWidgets AND TARGET Qt::Widgets AND (QT_FEATURE_opengl OR QT_FEATURE_opengles2 OR QT_FEATURE_opengles3)) add_subdirectory(quickwidgets) endif() + +# qt_examples_build_end() misses at least some of these due to some +# source subdirectories being added multiple times. See QTBUG-96159. +set(reused_dir_targets + view_shared + touchinteraction_shared + window_shared + shapes_shared +) +foreach(target IN LISTS reused_dir_targets) + if(TARGET ${target}) + qt_autogen_tools(${target} ENABLE_AUTOGEN_TOOLS moc rcc) + if(TARGET Qt::Widgets) + qt_autogen_tools(${target} ENABLE_AUTOGEN_TOOLS uic) + endif() + endif() +endforeach() -- cgit v1.2.3