From f087e63bf585f51d6c530dd58a57155835e6df2c Mon Sep 17 00:00:00 2001 From: Alexey Edelev Date: Mon, 2 May 2022 12:48:37 +0200 Subject: CMake: Make possible building Qt tools without the use of core library Replace BOOTSTRAP option with the single value CORE_LIBRARY argument in qt_internal_add_tool and qt_internal_add_executable functions. The introduced argument now may accept 'Bootstap' and 'None' values. Use 'Bootstap' to link Qt::Boostrap library instead Qt::Core or 'None' to avoid any core library linking. This is useful for tools that need to use the CMake deployment routines, but not require the Qt::Core functionality. Task-number: QTBUG-87480 Change-Id: I64a8b17f16ac5fe43c6b385252dc21def0c88d2c Reviewed-by: Alexandru Croitor --- cmake/QtBuild.cmake | 2 +- cmake/QtExecutableHelpers.cmake | 13 +++++++++++-- cmake/QtToolHelpers.cmake | 29 +++++++++++++---------------- 3 files changed, 25 insertions(+), 19 deletions(-) (limited to 'cmake') diff --git a/cmake/QtBuild.cmake b/cmake/QtBuild.cmake index 24d3614fa6..1859981399 100644 --- a/cmake/QtBuild.cmake +++ b/cmake/QtBuild.cmake @@ -484,7 +484,6 @@ set(__default_target_info_args # and qt_internal_add_test_helper. set(__qt_internal_add_executable_optional_args GUI - BOOTSTRAP NO_INSTALL EXCEPTIONS DELAY_RC @@ -492,6 +491,7 @@ set(__qt_internal_add_executable_optional_args QT_APP ) set(__qt_internal_add_executable_single_args + CORE_LIBRARY OUTPUT_DIRECTORY INSTALL_DIRECTORY VERSION diff --git a/cmake/QtExecutableHelpers.cmake b/cmake/QtExecutableHelpers.cmake index 3c6a1462eb..80eb17e164 100644 --- a/cmake/QtExecutableHelpers.cmake +++ b/cmake/QtExecutableHelpers.cmake @@ -1,6 +1,13 @@ # This function creates a CMake target for a generic console or GUI binary. # Please consider to use a more specific version target like the one created # by qt_add_test or qt_add_tool below. +# One-value Arguments: +# CORE_LIBRARY +# The argument accepts 'Bootstrap' or 'None' values. If the argument value is set to +# 'Bootstrap' the Qt::Bootstrap library is linked to the executable instead of Qt::Core. +# The 'None' value points that core library is not necessary and avoids linking neither +# Qt::Core or Qt::Bootstrap libraries. Otherwise the Qt::Core library will be publically +# linked to the executable target by default. function(qt_internal_add_executable name) qt_parse_all_arguments(arg "qt_internal_add_executable" "${__qt_internal_add_executable_optional_args}" @@ -85,8 +92,10 @@ function(qt_internal_add_executable name) qt_skip_warnings_are_errors_when_repo_unclean("${name}") set(extra_libraries "") - if(NOT arg_BOOTSTRAP) - set(extra_libraries "Qt::Core") + if(arg_CORE_LIBRARY STREQUAL "Bootstrap") + list(APPEND extra_libraries ${QT_CMAKE_EXPORT_NAMESPACE}::Bootstrap) + elseif(NOT arg_CORE_LIBRARY STREQUAL "None") + list(APPEND extra_libraries ${QT_CMAKE_EXPORT_NAMESPACE}::Core) endif() set(private_includes diff --git a/cmake/QtToolHelpers.cmake b/cmake/QtToolHelpers.cmake index ec8ea7019c..8081052147 100644 --- a/cmake/QtToolHelpers.cmake +++ b/cmake/QtToolHelpers.cmake @@ -1,6 +1,4 @@ # This function is used to define a "Qt tool", such as moc, uic or rcc. -# The BOOTSTRAP option allows building it as standalone program, otherwise -# it will be linked against QtCore. # # USER_FACING can be passed to mark the tool as a program that is supposed to be # started directly by users. @@ -28,13 +26,19 @@ # TOOLS_TARGET # Specifies the module this tool belongs to. The module's Qt6${module}Tools.cmake file # will then contain targets for this tool. -# +# CORE_LIBRARY +# The argument accepts 'Bootstrap' or 'None' values. If the argument value is set to +# 'Bootstrap' the Qt::Bootstrap library is linked to the executable instead of Qt::Core. +# The 'None' value points that core library is not necessary and avoids linking neither +# Qt::Core or Qt::Bootstrap libraries. Otherwise the Qt::Core library will be publically +# linked to the executable target by default. function(qt_internal_add_tool target_name) qt_tool_target_to_name(name ${target_name}) - set(option_keywords BOOTSTRAP NO_INSTALL USER_FACING INSTALL_VERSIONED_LINK EXCEPTIONS) + set(option_keywords NO_INSTALL USER_FACING INSTALL_VERSIONED_LINK EXCEPTIONS) set(one_value_keywords TOOLS_TARGET INSTALL_DIR + CORE_LIBRARY ${__default_target_info_args}) set(multi_value_keywords EXTRA_CMAKE_FILES @@ -172,16 +176,10 @@ function(qt_internal_add_tool target_name) endif() set(disable_autogen_tools "${arg_DISABLE_AUTOGEN_TOOLS}") - if (arg_BOOTSTRAP) - set(corelib ${QT_CMAKE_EXPORT_NAMESPACE}::Bootstrap) + set(corelib "") + if(arg_CORE_LIBRARY STREQUAL "Bootstrap" OR arg_CORE_LIBRARY STREQUAL "None") + set(corelib CORE_LIBRARY ${arg_CORE_LIBRARY}) list(APPEND disable_autogen_tools "uic" "moc" "rcc") - else() - set(corelib ${QT_CMAKE_EXPORT_NAMESPACE}::Core) - endif() - - set(bootstrap "") - if(arg_BOOTSTRAP) - set(bootstrap BOOTSTRAP) endif() set(exceptions "") @@ -198,7 +196,6 @@ function(qt_internal_add_tool target_name) qt_internal_add_executable("${target_name}" OUTPUT_DIRECTORY "${output_dir}" - ${bootstrap} ${exceptions} NO_INSTALL SOURCES ${arg_SOURCES} @@ -207,7 +204,7 @@ function(qt_internal_add_tool target_name) DEFINES QT_USE_QSTRINGBUILDER ${arg_DEFINES} - PUBLIC_LIBRARIES ${corelib} + ${corelib} LIBRARIES ${arg_LIBRARIES} Qt::PlatformToolInternal COMPILE_OPTIONS ${arg_COMPILE_OPTIONS} LINK_OPTIONS ${arg_LINK_OPTIONS} @@ -237,7 +234,7 @@ function(qt_internal_add_tool target_name) if(TARGET host_tools) add_dependencies(host_tools "${target_name}") - if(bootstrap) + if(arg_CORE_LIBRARY STREQUAL "Bootstrap") add_dependencies(bootstrap_tools "${target_name}") endif() endif() -- cgit v1.2.3