Add support for building and installing repo target sets
Introduce the concept of repository target sets, which is a named set of targets within a Qt module repository. In a Qt repository, a repo target set 'qtfoo' can be defined in the top-level project file with qt_internal_define_repo_target_set(qtfoo DEPENDS Bar Baz) The DEPENDS argument specifies Qt components that need to be find_package'd when building the targets that belong to qtfoo. In subdirectory project files, use qt_internal_include_in_repo_target_set(qtfoo) to mark the file as belonging to the repo target set. To build and install a single repo target set, specify QT_BUILD_SINGLE_REPO_TARGET_SET=qtfoo when configuring the Qt repository. Change-Id: Ic9e6213e3225988fd561f315bc857ee44ff17420 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
This commit is contained in:
parent
df022972b0
commit
4b09522c23
@ -225,6 +225,7 @@ qt_copy_or_install(FILES
|
||||
cmake/QtSeparateDebugInfo.cmake
|
||||
cmake/QtSetup.cmake
|
||||
cmake/QtSimdHelpers.cmake
|
||||
cmake/QtSingleRepoTargetSetBuildHelpers.cmake
|
||||
cmake/QtStandaloneTestsConfig.cmake.in
|
||||
cmake/QtSyncQtHelpers.cmake
|
||||
cmake/QtTargetHelpers.cmake
|
||||
|
@ -534,6 +534,7 @@ include(QtRpathHelpers)
|
||||
include(QtSanitizerHelpers)
|
||||
include(QtScopeFinalizerHelpers)
|
||||
include(QtSimdHelpers)
|
||||
include(QtSingleRepoTargetSetBuildHelpers)
|
||||
include(QtSyncQtHelpers)
|
||||
include(QtTargetHelpers)
|
||||
include(QtTestHelpers)
|
||||
|
@ -324,6 +324,50 @@ macro(qt_prepare_standalone_project)
|
||||
qt_enable_cmake_languages()
|
||||
endmacro()
|
||||
|
||||
# Define a repo target set, and store accompanying information.
|
||||
#
|
||||
# A repo target set is a subset of targets in a Qt module repository. To build a repo target set,
|
||||
# set QT_BUILD_SINGLE_REPO_TARGET_SET to the name of the repo target set.
|
||||
#
|
||||
# This function is to be called in the top-level project file of a repository,
|
||||
# before qt_internal_prepare_single_repo_target_set_build()
|
||||
#
|
||||
# This function stores information in variables of the parent scope.
|
||||
#
|
||||
# Positional Arguments:
|
||||
# name - The name of this repo target set.
|
||||
#
|
||||
# Named Arguments:
|
||||
# DEPENDS - List of Qt6 COMPONENTS that are build dependencies of this repo target set.
|
||||
function(qt_internal_define_repo_target_set name)
|
||||
set(oneValueArgs DEPENDS)
|
||||
set(prefix QT_REPO_TARGET_SET_)
|
||||
cmake_parse_arguments(${prefix}${name} "" ${oneValueArgs} "" ${ARGN})
|
||||
foreach(arg IN LISTS oneValueArgs)
|
||||
set(${prefix}${name}_${arg} ${${prefix}${name}_${arg}} PARENT_SCOPE)
|
||||
endforeach()
|
||||
set(QT_REPO_KNOWN_TARGET_SETS "${QT_REPO_KNOWN_TARGET_SETS};${name}" PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
# Setup a single repo target set build if QT_BUILD_SINGLE_REPO_TARGET_SET is defined.
|
||||
#
|
||||
# This macro must be called in the top-level project file of the repository after all repo target
|
||||
# sets have been defined.
|
||||
macro(qt_internal_prepare_single_repo_target_set_build)
|
||||
if(DEFINED QT_BUILD_SINGLE_REPO_TARGET_SET)
|
||||
if(NOT QT_BUILD_SINGLE_REPO_TARGET_SET IN_LIST QT_REPO_KNOWN_TARGET_SETS)
|
||||
message(FATAL_ERROR
|
||||
"Repo target set '${QT_BUILD_SINGLE_REPO_TARGET_SET}' is undefined.")
|
||||
endif()
|
||||
message(STATUS
|
||||
"Preparing single repo target set build of ${QT_BUILD_SINGLE_REPO_TARGET_SET}")
|
||||
if (NOT "${QT_REPO_TARGET_SET_${QT_BUILD_SINGLE_REPO_TARGET_SET}_DEPENDS}" STREQUAL "")
|
||||
find_package(${INSTALL_CMAKE_NAMESPACE} ${PROJECT_VERSION} CONFIG REQUIRED
|
||||
COMPONENTS ${QT_REPO_TARGET_SET_${QT_BUILD_SINGLE_REPO_TARGET_SET}_DEPENDS})
|
||||
endif()
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
macro(qt_build_repo_begin)
|
||||
qt_build_internals_set_up_private_api()
|
||||
qt_enable_cmake_languages()
|
||||
|
11
cmake/QtSingleRepoTargetSetBuildHelpers.cmake
Normal file
11
cmake/QtSingleRepoTargetSetBuildHelpers.cmake
Normal file
@ -0,0 +1,11 @@
|
||||
# Macro that checks for a single repo target set build, and returns from the current file, directory
|
||||
# or function. Use this at the top of project files to whitelist the file for the given package.
|
||||
macro(qt_internal_include_in_repo_target_set _repo_target_set_name)
|
||||
if(DEFINED QT_BUILD_SINGLE_REPO_TARGET_SET)
|
||||
if(NOT "${_repo_target_set_name}" STREQUAL QT_BUILD_SINGLE_REPO_TARGET_SET)
|
||||
message(STATUS "Not part of repo target set ${QT_BUILD_SINGLE_REPO_TARGET_SET}: "
|
||||
"${CMAKE_CURRENT_LIST_DIR}")
|
||||
return()
|
||||
endif()
|
||||
endif()
|
||||
endmacro()
|
Loading…
Reference in New Issue
Block a user