summaryrefslogtreecommitdiffstats
path: root/cmake
diff options
context:
space:
mode:
authorAlexey Edelev <alexey.edelev@qt.io>2022-05-02 12:48:37 +0200
committerAlexey Edelev <alexey.edelev@qt.io>2022-05-06 22:06:22 +0200
commitf087e63bf585f51d6c530dd58a57155835e6df2c (patch)
tree766255f90230080f3725b0691ac0b36fed255bd3 /cmake
parenta1437ce16255b35f0b5fa1ace5194266a53ee36b (diff)
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 <alexandru.croitor@qt.io>
Diffstat (limited to 'cmake')
-rw-r--r--cmake/QtBuild.cmake2
-rw-r--r--cmake/QtExecutableHelpers.cmake13
-rw-r--r--cmake/QtToolHelpers.cmake29
3 files changed, 25 insertions, 19 deletions
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()