CMake: Work around AUTOUIC Ninja Multi-Config issue with EP examples
AUTOUIC doesn't handle relative paths to .ui files in parent directories when using Ninja Multi-Config. The designer tool in qttools has such a ui file. This leads to the following error when trying to build qttools together with examples as ExternalProjects and Ninja Multi-Config: ninja: error: 'src/designer/src/designer/designer_autogen/ include_Debug/ui_preferencesdialog.h', needed by 'src/designer/src/designer/designer_autogen:Debug', missing and no known rule to make it Until cmake is fixed, we can work around the issue by not adding designer as a dependency when building EP examples, because no example tries to use the app. We can't exclude all apps from example dependencies because some modules use qt_internal_add_app for tools as well, which are called from public CMake API and also examples. An example of this is qtapplicationmanager. Given that we can't exclude all apps, introduce a function to allow skipping single targets when building EP examples. This will allow excluding designer specifically. The examples will now depend on a new ${repo}_src_for_examples target rather than ${repo}_src, which will exclude skipped targets. Task-number: QTBUG-90820 Task-number: QTBUG-96232 Task-number: QTBUG-110369 Change-Id: I2f900253bbf7bac917f2293ef604ab3ea8f298e1 Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
This commit is contained in:
parent
9b64bf0874
commit
4e70ab5eeb
@ -287,7 +287,27 @@ function(qt_build_internals_add_toplevel_targets)
|
||||
COMMENT "Building everything in ${qt_repo_targets_name}/${qt_repo_target_basename}")
|
||||
add_dependencies("${qt_repo_target_name}" ${qt_repo_targets})
|
||||
list(APPEND qt_repo_target_all "${qt_repo_target_name}")
|
||||
|
||||
# Create special dependency target for External Project examples excluding targets
|
||||
# marked as skipped.
|
||||
set(qt_repo_target_name
|
||||
"${qt_repo_targets_name}_${qt_repo_target_basename}_for_examples")
|
||||
add_custom_target("${qt_repo_target_name}")
|
||||
|
||||
set(unskipped_targets "")
|
||||
foreach(target IN LISTS qt_repo_targets)
|
||||
if(TARGET "${target}")
|
||||
qt_internal_is_target_skipped_for_examples("${target}" is_skipped)
|
||||
if(NOT is_skipped)
|
||||
list(APPEND unskipped_targets "${target}")
|
||||
endif()
|
||||
endif()
|
||||
endforeach()
|
||||
if(unskipped_targets)
|
||||
add_dependencies("${qt_repo_target_name}" ${unskipped_targets})
|
||||
endif()
|
||||
endif()
|
||||
|
||||
endforeach()
|
||||
if (qt_repo_target_all)
|
||||
# Note qt_repo_targets_name is different from qt_repo_target_name that is used above.
|
||||
@ -813,7 +833,7 @@ macro(qt_examples_build_begin)
|
||||
set(QT_EXAMPLE_DEPENDENCIES qt_plugins ${arg_DEPENDS})
|
||||
|
||||
if(TARGET ${qt_repo_targets_name}_src)
|
||||
list(APPEND QT_EXAMPLE_DEPENDENCIES ${qt_repo_targets_name}_src)
|
||||
list(APPEND QT_EXAMPLE_DEPENDENCIES ${qt_repo_targets_name}_src_for_examples)
|
||||
endif()
|
||||
|
||||
if(TARGET ${qt_repo_targets_name}_tools)
|
||||
|
@ -992,6 +992,24 @@ function(qt_internal_mark_as_internal_library target)
|
||||
set_target_properties(${target} PROPERTIES _qt_is_internal_library TRUE)
|
||||
endfunction()
|
||||
|
||||
# Marks a target with a property to skip it adding it as a dependency when building examples as
|
||||
# ExternalProjects.
|
||||
# Needed to create a ${repo}_src global target that examples can depend on in multi-config builds
|
||||
# due to a bug in AUTOUIC.
|
||||
#
|
||||
# See QTBUG-110369.
|
||||
function(qt_internal_skip_dependency_for_examples target)
|
||||
set_target_properties(${target} PROPERTIES _qt_skip_dependency_for_examples TRUE)
|
||||
endfunction()
|
||||
|
||||
function(qt_internal_is_target_skipped_for_examples target out_var)
|
||||
get_property(is_skipped TARGET ${target} PROPERTY _qt_skip_dependency_for_examples)
|
||||
if(NOT is_skipped)
|
||||
set(is_skipped FALSE)
|
||||
endif()
|
||||
set(${out_var} "${is_skipped}" PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
function(qt_internal_link_internal_platform_for_object_library target)
|
||||
# We need to apply iOS bitcode flags to object libraries that are associated with internal
|
||||
# modules or plugins (e.g. object libraries added by qt_internal_add_resource,
|
||||
|
Loading…
x
Reference in New Issue
Block a user