diff options
24 files changed, 201 insertions, 81 deletions
diff --git a/cmake/QtBuild.cmake b/cmake/QtBuild.cmake index a89ef60994..941ee1223a 100644 --- a/cmake/QtBuild.cmake +++ b/cmake/QtBuild.cmake @@ -1088,7 +1088,7 @@ function(qt_get_build_parts out_var) list(APPEND parts "tests") endif() - if(NOT CMAKE_CROSSCOMPILING) + if(NOT CMAKE_CROSSCOMPILING OR QT_BUILD_TOOLS_WHEN_CROSSCOMPILING) list(APPEND parts "tools") endif() @@ -2860,10 +2860,13 @@ QMAKE_PRL_LIBS_FOR_CMAKE = ${prl_libs} endfunction() function(qt_export_tools module_name) - # If no tools were defined belonging to this module, don't create a config and targets file. - # Guards against the case when doing a cross-build. + # Bail out when cross-compiling, unless QT_BUILD_TOOLS_WHEN_CROSSCOMPILING is on. + if(CMAKE_CROSSCOMPILING AND NOT QT_BUILD_TOOLS_WHEN_CROSSCOMPILING) + return() + endif() - if(NOT "${module_name}" IN_LIST QT_KNOWN_MODULES_WITH_TOOLS OR CMAKE_CROSSCOMPILING) + # If no tools were defined belonging to this module, don't create a config and targets file. + if(NOT "${module_name}" IN_LIST QT_KNOWN_MODULES_WITH_TOOLS) return() endif() @@ -2892,6 +2895,9 @@ function(qt_export_tools module_name) list(APPEND package_deps "${extra_packages}") endif() + if (CMAKE_CROSSCOMPILING AND QT_BUILD_TOOLS_WHEN_CROSSCOMPILING) + string(REGEX REPLACE "_native$" "" tool_name ${tool_name}) + endif() set(extra_cmake_statements "${extra_cmake_statements} if (NOT QT_NO_CREATE_TARGETS) get_property(is_global TARGET ${INSTALL_CMAKE_NAMESPACE}::${tool_name} PROPERTY IMPORTED_GLOBAL) @@ -3832,10 +3838,10 @@ endfunction() # Sets QT_WILL_BUILD_TOOLS if tools will be built. function(qt_check_if_tools_will_be_built) - if(NOT CMAKE_CROSSCOMPILING AND NOT QT_FORCE_FIND_TOOLS) - set(will_build_tools TRUE) - else() + if(QT_FORCE_FIND_TOOLS OR (CMAKE_CROSSCOMPILING AND NOT QT_BUILD_TOOLS_WHEN_CROSSCOMPILING)) set(will_build_tools FALSE) + else() + set(will_build_tools TRUE) endif() set(QT_WILL_BUILD_TOOLS ${will_build_tools} CACHE INTERNAL "Are tools going to be built" FORCE) endfunction() @@ -4114,10 +4120,40 @@ function(qt_get_main_cmake_configuration out_var) set("${out_var}" "${config}" PARENT_SCOPE) endfunction() +# Returns the target name for the tool with the given name. +# +# In most cases, the target name is the same as the tool name. +# If the user specifies to build tools when cross-compiling, then the +# suffix "_native" is appended. +function(qt_get_tool_target_name out_var name) + if (CMAKE_CROSSCOMPILING AND QT_BUILD_TOOLS_WHEN_CROSSCOMPILING) + set(${out_var} ${name}_native PARENT_SCOPE) + else() + set(${out_var} ${name} PARENT_SCOPE) + endif() +endfunction() + +# Returns the tool name for a given tool target. +# This is the inverse of qt_get_tool_target_name. +function(qt_tool_target_to_name out_var target) + set(name ${target}) + if (CMAKE_CROSSCOMPILING AND QT_BUILD_TOOLS_WHEN_CROSSCOMPILING) + string(REGEX REPLACE "_native$" "" name ${target}) + endif() + set(${out_var} ${name} PARENT_SCOPE) +endfunction() + # 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. -function(qt_add_tool name) +# +# We must pass this function a target name obtained from +# qt_get_tool_target_name like this: +# qt_get_tool_target_name(target_name my_tool) +# qt_add_tool(${target_name}) +# +function(qt_add_tool target_name) + qt_tool_target_to_name(name ${target_name}) qt_parse_all_arguments(arg "qt_add_tool" "BOOTSTRAP;NO_QT;NO_INSTALL" "TOOLS_TARGET;${__default_target_info_args}" "${__default_private_args}" ${ARGN}) @@ -4130,14 +4166,24 @@ function(qt_add_tool name) " (QT_WILL_BUILD_TOOLS is ${QT_WILL_BUILD_TOOLS}).") endif() + if(CMAKE_CROSSCOMPILING AND QT_BUILD_TOOLS_WHEN_CROSSCOMPILING AND (name STREQUAL target_name)) + message(FATAL_ERROR + "qt_add_tool must be passed a target obtained from qt_get_tool_target_name.") + endif() + set(full_name "${QT_CMAKE_EXPORT_NAMESPACE}::${name}") + set(imported_tool_target_found FALSE) if(TARGET ${full_name}) get_property(path TARGET ${full_name} PROPERTY LOCATION) message(STATUS "Tool '${full_name}' was found at ${path}.") - return() + set(imported_tool_target_found TRUE) + if(CMAKE_CROSSCOMPILING AND NOT QT_BUILD_TOOLS_WHEN_CROSSCOMPILING) + return() + endif() endif() - if(arg_TOOLS_TARGET AND NOT QT_WILL_BUILD_TOOLS) + if(arg_TOOLS_TARGET AND (NOT QT_WILL_BUILD_TOOLS OR QT_BUILD_TOOLS_WHEN_CROSSCOMPILING) + AND NOT imported_tool_target_found) set(tools_package_name "Qt6${arg_TOOLS_TARGET}Tools") message(STATUS "Searching for tool '${full_name}' in package ${tools_package_name}.") @@ -4173,7 +4219,9 @@ function(qt_add_tool name) qt_internal_append_known_modules_with_tools("${arg_TOOLS_TARGET}") get_property(path TARGET ${full_name} PROPERTY LOCATION) message(STATUS "${full_name} was found at ${path} using package ${tools_package_name}.") - return() + if (NOT QT_BUILD_TOOLS_WHEN_CROSSCOMPILING) + return() + endif() endif() endif() @@ -4182,7 +4230,11 @@ function(qt_add_tool name) "${tools_package_name} package. " "Package found: ${${tools_package_name}_FOUND}") else() - message(STATUS "Tool '${full_name}' will be built from source.") + if(QT_BUILD_TOOLS_WHEN_CROSSCOMPILING) + message(STATUS "Tool '${target_name}' will be cross-built from source.") + else() + message(STATUS "Tool '${full_name}' will be built from source.") + endif() endif() set(disable_autogen_tools "${arg_DISABLE_AUTOGEN_TOOLS}") @@ -4211,7 +4263,7 @@ function(qt_add_tool name) set(no_qt NO_QT) endif() - qt_add_executable("${name}" OUTPUT_DIRECTORY "${QT_BUILD_DIR}/${INSTALL_BINDIR}" + qt_add_executable("${target_name}" OUTPUT_DIRECTORY "${QT_BUILD_DIR}/${INSTALL_BINDIR}" ${bootstrap} ${no_qt} NO_INSTALL @@ -4231,12 +4283,19 @@ function(qt_add_tool name) TARGET_COMPANY "${arg_TARGET_COMPANY}" TARGET_COPYRIGHT "${arg_TARGET_COPYRIGHT}" ) - qt_internal_add_target_aliases("${name}") + qt_internal_add_target_aliases("${target_name}") + + if (NOT target_name STREQUAL name) + set_target_properties(${target_name} PROPERTIES + OUTPUT_NAME ${name} + EXPORT_NAME ${name} + ) + endif() # If building with a multi-config configuration, the main configuration tool will be placed in # ./bin, while the rest will be in <CONFIG> specific subdirectories. qt_get_tool_cmake_configuration(tool_cmake_configuration) - set_target_properties("${name}" PROPERTIES + set_target_properties("${target_name}" PROPERTIES RUNTIME_OUTPUT_DIRECTORY_${tool_cmake_configuration} "${QT_BUILD_DIR}/${INSTALL_BINDIR}" ) @@ -4245,7 +4304,7 @@ function(qt_add_tool name) qt_internal_append_known_modules_with_tools("${arg_TOOLS_TARGET}") # Also append the tool to the module list. - qt_internal_append_known_module_tool("${arg_TOOLS_TARGET}" "${name}") + qt_internal_append_known_module_tool("${arg_TOOLS_TARGET}" "${target_name}") qt_get_cmake_configurations(cmake_configs) @@ -4257,19 +4316,19 @@ function(qt_add_tool name) OUT_VAR install_targets_default_args CMAKE_CONFIG "${cmake_config}" ALL_CMAKE_CONFIGS "${cmake_configs}") - qt_install(TARGETS "${name}" + qt_install(TARGETS "${target_name}" ${install_initial_call_args} CONFIGURATIONS ${cmake_config} ${install_targets_default_args}) unset(install_initial_call_args) endforeach() - qt_apply_rpaths(TARGET "${name}" INSTALL_PATH "${INSTALL_BINDIR}" RELATIVE_RPATH) + qt_apply_rpaths(TARGET "${target_name}" INSTALL_PATH "${INSTALL_BINDIR}" RELATIVE_RPATH) endif() if(QT_FEATURE_separate_debug_info AND (UNIX OR MINGW)) - qt_enable_separate_debug_info(${name} ${INSTALL_BINDIR}) + qt_enable_separate_debug_info(${target_name} ${INSTALL_BINDIR}) endif() endfunction() diff --git a/cmake/QtModuleDependencies.cmake.in b/cmake/QtModuleDependencies.cmake.in index ffb9e8a5d3..5d94eb9a5d 100644 --- a/cmake/QtModuleDependencies.cmake.in +++ b/cmake/QtModuleDependencies.cmake.in @@ -28,9 +28,17 @@ set(_tool_deps "@main_module_tool_deps@") # The tools do not provide linkage targets but executables, where a mismatch # between 32-bit target and 64-bit host does not matter. -set(BACKUP_CMAKE_SIZEOF_VOID_P "${CMAKE_SIZEOF_VOID_P}") +set(BACKUP_@target@_CMAKE_SIZEOF_VOID_P "${CMAKE_SIZEOF_VOID_P}") set(CMAKE_SIZEOF_VOID_P "") +if(QT_HOST_PATH) + # Make sure that the tools find the host tools first + set(BACKUP_@target@_CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH}) + set(BACKUP_@target@_CMAKE_FIND_ROOT_PATH ${CMAKE_FIND_ROOT_PATH}) + list(PREPEND CMAKE_PREFIX_PATH "${QT_HOST_PATH}") + list(PREPEND CMAKE_FIND_ROOT_PATH "${QT_HOST_PATH}") +endif() + foreach(_target_dep ${_tool_deps}) list(GET _target_dep 0 pkg) list(GET _target_dep 1 version) @@ -39,11 +47,19 @@ foreach(_target_dep ${_tool_deps}) if (NOT ${pkg}_FOUND) set(@INSTALL_CMAKE_NAMESPACE@@target@_FOUND FALSE) - set(CMAKE_SIZEOF_VOID_P "${BACKUP_CMAKE_SIZEOF_VOID_P}") + set(CMAKE_SIZEOF_VOID_P "${BACKUP_@target@_CMAKE_SIZEOF_VOID_P}") + if(QT_HOST_PATH) + set(CMAKE_PREFIX_PATH ${BACKUP_@target@_CMAKE_PREFIX_PATH}) + set(CMAKE_FIND_ROOT_PATH ${BACKUP_@target@_CMAKE_FIND_ROOT_PATH}) + endif() return() endif() endforeach() -set(CMAKE_SIZEOF_VOID_P "${BACKUP_CMAKE_SIZEOF_VOID_P}") +if(QT_HOST_PATH) + set(CMAKE_PREFIX_PATH ${BACKUP_@target@_CMAKE_PREFIX_PATH}) + set(CMAKE_FIND_ROOT_PATH ${BACKUP_@target@_CMAKE_FIND_ROOT_PATH}) +endif() +set(CMAKE_SIZEOF_VOID_P "${BACKUP_@target@_CMAKE_SIZEOF_VOID_P}") # note: target_deps example: "Qt6Core\;5.12.0;Qt6Gui\;5.12.0" set(_target_deps "@target_deps@") diff --git a/cmake/QtPostProcess.cmake b/cmake/QtPostProcess.cmake index e6e763c8fe..02ab986a3d 100644 --- a/cmake/QtPostProcess.cmake +++ b/cmake/QtPostProcess.cmake @@ -406,6 +406,11 @@ endif()\n") "set(BUILD_WITH_PCH \"${BUILD_WITH_PCH}\" CACHE STRING \"\")\n") endif() + if(CMAKE_CROSSCOMPILING AND QT_BUILD_TOOLS_WHEN_CROSSCOMPILING) + string(APPEND QT_EXTRA_BUILD_INTERNALS_VARS + "set(QT_BUILD_TOOLS_WHEN_CROSSCOMPILING \"TRUE\" CACHE BOOL \"\" FORCE)\n") + endif() + # Rpath related things that need to be re-used when building other repos. string(APPEND QT_EXTRA_BUILD_INTERNALS_VARS "set(CMAKE_INSTALL_RPATH \"${CMAKE_INSTALL_RPATH}\" CACHE STRING \"\")\n") diff --git a/cmake/QtSetup.cmake b/cmake/QtSetup.cmake index 39142fa332..d892273443 100644 --- a/cmake/QtSetup.cmake +++ b/cmake/QtSetup.cmake @@ -125,8 +125,13 @@ option(QT_NO_MAKE_TESTS "Should tests be built as part of the default 'all' targ # When cross-building, we don't build tools by default. Sometimes this also covers Qt apps as well. # Like in qttools/assistant/assistant.pro, load(qt_app), which is guarded by a qtNomakeTools() call. +set(qt_no_make_tools_default OFF) +if(CMAKE_CROSSCOMPILING AND NOT QT_BUILD_TOOLS_WHEN_CROSSCOMPILING) + set(qt_no_make_tools_default ON) +endif() option(QT_NO_MAKE_TOOLS "Should tools be built as part of the default 'all' target." - "${CMAKE_CROSSCOMPILING}") + "${qt_no_make_tools_default}") +unset(qt_no_make_tools_default) include(CTest) enable_testing() diff --git a/qmake/.prev_CMakeLists.txt b/qmake/.prev_CMakeLists.txt index 63b34a0970..2bfc56b37f 100644 --- a/qmake/.prev_CMakeLists.txt +++ b/qmake/.prev_CMakeLists.txt @@ -4,7 +4,8 @@ ## qmake Tool: ##################################################################### -qt_add_tool(qmake +qt_get_tool_target_name(target_name qmake) +qt_add_tool(${target_name} SOURCES ../src/3rdparty/pcre2/src/config.h ../src/3rdparty/pcre2/src/pcre2.h @@ -169,7 +170,7 @@ qt_add_tool(qmake ## Scopes: ##################################################################### -qt_extend_target(qmake CONDITION WIN32 +qt_extend_target(${target_name} CONDITION WIN32 SOURCES ../src/corelib/global/qoperatingsystemversion_win.cpp ../src/corelib/io/qfilesystemengine_win.cpp @@ -193,7 +194,7 @@ qt_extend_target(qmake CONDITION WIN32 ole32 ) -qt_extend_target(qmake CONDITION UNIX +qt_extend_target(${target_name} CONDITION UNIX SOURCES ../src/corelib/io/qfilesystemengine_unix.cpp ../src/corelib/io/qfilesystemiterator_unix.cpp @@ -202,7 +203,7 @@ qt_extend_target(qmake CONDITION UNIX ../src/corelib/text/qlocale_unix.cpp ) -qt_extend_target(qmake CONDITION MACOS +qt_extend_target(${target_name} CONDITION MACOS SOURCES qcore_foundation.mm qcore_mac.mm @@ -216,13 +217,16 @@ qt_extend_target(qmake CONDITION MACOS -fconstant-cfstrings ) -qt_extend_target(qmake CONDITION MINGW AND WIN32 +qt_extend_target(${target_name} CONDITION MINGW AND WIN32 PUBLIC_LIBRARIES uuid ) -qt_extend_target(qmake CONDITION CLANG AND WIN32 +qt_extend_target(${target_name} CONDITION CLANG AND WIN32 COMPILE_OPTIONS -Wno-microsoft-enum-value -fms-compatibility-version=19.00.23506 ) + +#### Keys ignored in scope 10:.:../src/3rdparty/pcre2:../src/3rdparty/pcre2/pcre2.pri:QT_FEATURE_intelcet: +# QMAKE_CFLAGS = "$$QMAKE_CFLAGS_SHSTK" diff --git a/qmake/CMakeLists.txt b/qmake/CMakeLists.txt index 253040d402..c12cb03237 100644 --- a/qmake/CMakeLists.txt +++ b/qmake/CMakeLists.txt @@ -4,7 +4,8 @@ ## qmake Tool: ##################################################################### -qt_add_tool(qmake +qt_get_tool_target_name(target_name qmake) +qt_add_tool(${target_name} NO_QT # special case TOOLS_TARGET Core # special case # GUI # special case: remove this @@ -187,7 +188,7 @@ qt_add_tool(qmake ## Scopes: ##################################################################### -qt_extend_target(qmake CONDITION WIN32 +qt_extend_target(${target_name} CONDITION WIN32 SOURCES ../src/corelib/global/qoperatingsystemversion_win.cpp ../src/corelib/io/qfilesystemengine_win.cpp @@ -211,7 +212,7 @@ qt_extend_target(qmake CONDITION WIN32 ole32 ) -qt_extend_target(qmake CONDITION UNIX +qt_extend_target(${target_name} CONDITION UNIX SOURCES ../src/corelib/io/qfilesystemengine_unix.cpp ../src/corelib/io/qfilesystemiterator_unix.cpp @@ -220,7 +221,7 @@ qt_extend_target(qmake CONDITION UNIX ../src/corelib/text/qlocale_unix.cpp ) -qt_extend_target(qmake CONDITION MACOS +qt_extend_target(${target_name} CONDITION MACOS SOURCES ../src/corelib/kernel/qcore_foundation.mm # special case ../src/corelib/kernel/qcore_mac.mm # special case @@ -251,26 +252,25 @@ extend_target(qmake CONDITION WIN32 ole32 advapi32 kernel32 netapi32 ) -qt_extend_target(qmake CONDITION MINGW AND WIN32 +qt_extend_target(${target_name} CONDITION MINGW AND WIN32 PUBLIC_LIBRARIES uuid ) -qt_extend_target(qmake CONDITION CLANG AND WIN32 +qt_extend_target(${target_name} CONDITION CLANG AND WIN32 COMPILE_OPTIONS "-fms-compatibility-version=19.00.23506" "-Wno-microsoft-enum-value" ) # special case: -set_target_properties(qmake PROPERTIES +set_target_properties(${target_name} PROPERTIES AUTOMOC OFF AUTORCC OFF AUTOUIC OFF ) -qt_internal_add_link_flags_gc_sections(qmake PRIVATE) # special case - -qt_enable_msvc_cplusplus_define(qmake PUBLIC) # special case -qt_skip_warnings_are_errors(qmake) # special case +qt_internal_add_link_flags_gc_sections(${target_name} PRIVATE) # special case +qt_enable_msvc_cplusplus_define(${target_name} PUBLIC) # special case +qt_skip_warnings_are_errors(${target_name}) # special case diff --git a/src/tools/cmake_automoc_parser/CMakeLists.txt b/src/tools/cmake_automoc_parser/CMakeLists.txt index 73303215bb..39683d57e4 100644 --- a/src/tools/cmake_automoc_parser/CMakeLists.txt +++ b/src/tools/cmake_automoc_parser/CMakeLists.txt @@ -2,7 +2,8 @@ ## moc Tool: ##################################################################### -qt_add_tool(cmake_automoc_parser +qt_get_tool_target_name(target_name cmake_automoc_parser) +qt_add_tool(${target_name} BOOTSTRAP TOOLS_TARGET Core # special case SOURCES diff --git a/src/tools/moc/.prev_CMakeLists.txt b/src/tools/moc/.prev_CMakeLists.txt index c33087046b..e6004cefca 100644 --- a/src/tools/moc/.prev_CMakeLists.txt +++ b/src/tools/moc/.prev_CMakeLists.txt @@ -4,7 +4,8 @@ ## moc Tool: ##################################################################### -qt_add_tool(moc +qt_get_tool_target_name(target_name moc) +qt_add_tool(${target_name} BOOTSTRAP TARGET_DESCRIPTION "Qt Meta Object Compiler" SOURCES diff --git a/src/tools/moc/CMakeLists.txt b/src/tools/moc/CMakeLists.txt index e21719d7f8..0073acf319 100644 --- a/src/tools/moc/CMakeLists.txt +++ b/src/tools/moc/CMakeLists.txt @@ -4,7 +4,8 @@ ## moc Tool: ##################################################################### -qt_add_tool(moc +qt_get_tool_target_name(target_name moc) +qt_add_tool(${target_name} BOOTSTRAP TARGET_DESCRIPTION "Qt Meta Object Compiler" TOOLS_TARGET Core # special case diff --git a/src/tools/qdbuscpp2xml/.prev_CMakeLists.txt b/src/tools/qdbuscpp2xml/.prev_CMakeLists.txt index 27e61681c2..fa02b5753c 100644 --- a/src/tools/qdbuscpp2xml/.prev_CMakeLists.txt +++ b/src/tools/qdbuscpp2xml/.prev_CMakeLists.txt @@ -4,7 +4,8 @@ ## qdbuscpp2xml Tool: ##################################################################### -qt_add_tool(qdbuscpp2xml +qt_get_tool_target_name(target_name qdbuscpp2xml) +qt_add_tool(${target_name} TARGET_DESCRIPTION "Qt D-Bus C++ to XML Compiler" SOURCES ../moc/cbordevice.h @@ -35,12 +36,12 @@ qt_add_tool(qdbuscpp2xml ## Scopes: ##################################################################### -qt_extend_target(qdbuscpp2xml CONDITION force_bootstrap +qt_extend_target(${target_name} CONDITION force_bootstrap PUBLIC_LIBRARIES bootstrap_dbusPrivate ) -qt_extend_target(qdbuscpp2xml CONDITION NOT force_bootstrap +qt_extend_target(${target_name} CONDITION NOT force_bootstrap PUBLIC_LIBRARIES Qt::DBusPrivate ) diff --git a/src/tools/qdbuscpp2xml/CMakeLists.txt b/src/tools/qdbuscpp2xml/CMakeLists.txt index de4f0f59bb..e831d5f392 100644 --- a/src/tools/qdbuscpp2xml/CMakeLists.txt +++ b/src/tools/qdbuscpp2xml/CMakeLists.txt @@ -4,7 +4,8 @@ ## qdbuscpp2xml Tool: ##################################################################### -qt_add_tool(qdbuscpp2xml +qt_get_tool_target_name(target_name qdbuscpp2xml) +qt_add_tool(${target_name} TARGET_DESCRIPTION "Qt D-Bus C++ to XML Compiler" TOOLS_TARGET DBus # special case SOURCES @@ -46,4 +47,3 @@ qt_add_tool(qdbuscpp2xml # extend_target(qdbuscpp2xml CONDITION force_bootstrap [...]) # extend_target(qdbuscpp2xml CONDITION NOT force_bootstrap [...]) # special case end - diff --git a/src/tools/qdbusxml2cpp/.prev_CMakeLists.txt b/src/tools/qdbusxml2cpp/.prev_CMakeLists.txt index 28a36410d9..603c21ac1e 100644 --- a/src/tools/qdbusxml2cpp/.prev_CMakeLists.txt +++ b/src/tools/qdbusxml2cpp/.prev_CMakeLists.txt @@ -4,7 +4,8 @@ ## qdbusxml2cpp Tool: ##################################################################### -qt_add_tool(qdbusxml2cpp +qt_get_tool_target_name(target_name qdbusxml2cpp) +qt_add_tool(${target_name} TARGET_DESCRIPTION "Qt D-Bus XML to C++ Compiler" SOURCES qdbusxml2cpp.cpp @@ -22,12 +23,12 @@ qt_add_tool(qdbusxml2cpp ## Scopes: ##################################################################### -qt_extend_target(qdbusxml2cpp CONDITION NOT force_bootstrap +qt_extend_target(${target_name} CONDITION NOT force_bootstrap PUBLIC_LIBRARIES Qt::DBusPrivate ) -qt_extend_target(qdbusxml2cpp CONDITION force_bootstrap +qt_extend_target(${target_name} CONDITION force_bootstrap PUBLIC_LIBRARIES bootstrap_dbusPrivate ) diff --git a/src/tools/qdbusxml2cpp/CMakeLists.txt b/src/tools/qdbusxml2cpp/CMakeLists.txt index 6380871819..5b58975afe 100644 --- a/src/tools/qdbusxml2cpp/CMakeLists.txt +++ b/src/tools/qdbusxml2cpp/CMakeLists.txt @@ -4,7 +4,8 @@ ## qdbusxml2cpp Tool: ##################################################################### -qt_add_tool(qdbusxml2cpp +qt_get_tool_target_name(target_name qdbusxml2cpp) +qt_add_tool(${target_name} TARGET_DESCRIPTION "Qt D-Bus XML to C++ Compiler" TOOLS_TARGET DBus # special case SOURCES diff --git a/src/tools/qlalr/.prev_CMakeLists.txt b/src/tools/qlalr/.prev_CMakeLists.txt index c933cde1b4..00c4abc0cd 100644 --- a/src/tools/qlalr/.prev_CMakeLists.txt +++ b/src/tools/qlalr/.prev_CMakeLists.txt @@ -4,7 +4,8 @@ ## qlalr Tool: ##################################################################### -qt_add_tool(qlalr +qt_get_tool_target_name(target_name qlalr) +qt_add_tool(${target_name} TARGET_DESCRIPTION "Qt Look Ahead LR Parser Generator" SOURCES compress.cpp compress.h diff --git a/src/tools/qlalr/CMakeLists.txt b/src/tools/qlalr/CMakeLists.txt index bf13e6f492..b0137d4918 100644 --- a/src/tools/qlalr/CMakeLists.txt +++ b/src/tools/qlalr/CMakeLists.txt @@ -4,7 +4,8 @@ ## qlalr Tool: ##################################################################### -qt_add_tool(qlalr +qt_get_tool_target_name(target_name qlalr) +qt_add_tool(${target_name} TARGET_DESCRIPTION "Qt Look Ahead LR Parser Generator" TOOLS_TARGET Core # special case SOURCES diff --git a/src/tools/qvkgen/.prev_CMakeLists.txt b/src/tools/qvkgen/.prev_CMakeLists.txt index a4a12354f6..ed8c028686 100644 --- a/src/tools/qvkgen/.prev_CMakeLists.txt +++ b/src/tools/qvkgen/.prev_CMakeLists.txt @@ -4,7 +4,8 @@ ## qvkgen Tool: ##################################################################### -qt_add_tool(qvkgen +qt_get_tool_target_name(target_name qvkgen) +qt_add_tool(${target_name} TARGET_DESCRIPTION "Qt Vulkan Header Generator" SOURCES qvkgen.cpp diff --git a/src/tools/qvkgen/CMakeLists.txt b/src/tools/qvkgen/CMakeLists.txt index 34c1c57d7c..003b407fdc 100644 --- a/src/tools/qvkgen/CMakeLists.txt +++ b/src/tools/qvkgen/CMakeLists.txt @@ -4,7 +4,8 @@ ## qvkgen Tool: ##################################################################### -qt_add_tool(qvkgen +qt_get_tool_target_name(target_name qvkgen) +qt_add_tool(${target_name} TARGET_DESCRIPTION "Qt Vulkan Header Generator" TOOLS_TARGET Gui # special case SOURCES diff --git a/src/tools/rcc/.prev_CMakeLists.txt b/src/tools/rcc/.prev_CMakeLists.txt index 76bacbdffb..7b2eff21c3 100644 --- a/src/tools/rcc/.prev_CMakeLists.txt +++ b/src/tools/rcc/.prev_CMakeLists.txt @@ -4,7 +4,8 @@ ## rcc Tool: ##################################################################### -qt_add_tool(rcc +qt_get_tool_target_name(target_name rcc) +qt_add_tool(${target_name} BOOTSTRAP TARGET_DESCRIPTION "Qt Resource Compiler" SOURCES @@ -25,14 +26,14 @@ qt_add_tool(rcc ## Scopes: ##################################################################### -qt_extend_target(rcc CONDITION QT_FEATURE_zstd AND NOT CMAKE_CROSSCOMPILING +qt_extend_target(${target_name} CONDITION QT_FEATURE_zstd AND NOT CMAKE_CROSSCOMPILING DEFINES QT_FEATURE_zstd=1 LIBRARIES ZSTD::ZSTD ) -qt_extend_target(rcc CONDITION CMAKE_CROSSCOMPILING OR NOT QT_FEATURE_zstd +qt_extend_target(${target_name} CONDITION CMAKE_CROSSCOMPILING OR NOT QT_FEATURE_zstd DEFINES QT_FEATURE_zstd=-1 ) diff --git a/src/tools/rcc/CMakeLists.txt b/src/tools/rcc/CMakeLists.txt index 6136545a3e..4b71695d47 100644 --- a/src/tools/rcc/CMakeLists.txt +++ b/src/tools/rcc/CMakeLists.txt @@ -4,7 +4,8 @@ ## rcc Tool: ##################################################################### -qt_add_tool(rcc +qt_get_tool_target_name(target_name rcc) +qt_add_tool(${target_name} BOOTSTRAP TARGET_DESCRIPTION "Qt Resource Compiler" TOOLS_TARGET Core # special case @@ -26,14 +27,14 @@ qt_add_tool(rcc ## Scopes: ##################################################################### -qt_extend_target(rcc CONDITION QT_FEATURE_zstd AND NOT CMAKE_CROSSCOMPILING +qt_extend_target(${target_name} CONDITION QT_FEATURE_zstd AND NOT CMAKE_CROSSCOMPILING DEFINES QT_FEATURE_zstd=1 LIBRARIES ZSTD::ZSTD ) -qt_extend_target(rcc CONDITION CMAKE_CROSSCOMPILING OR NOT QT_FEATURE_zstd +qt_extend_target(${target_name} CONDITION CMAKE_CROSSCOMPILING OR NOT QT_FEATURE_zstd DEFINES QT_FEATURE_zstd=-1 ) diff --git a/src/tools/tracegen/.prev_CMakeLists.txt b/src/tools/tracegen/.prev_CMakeLists.txt index 87bcf362d6..dbb673216f 100644 --- a/src/tools/tracegen/.prev_CMakeLists.txt +++ b/src/tools/tracegen/.prev_CMakeLists.txt @@ -4,7 +4,8 @@ ## tracegen Tool: ##################################################################### -qt_add_tool(tracegen +qt_get_tool_target_name(target_name tracegen) +qt_add_tool(${target_name} BOOTSTRAP SOURCES etw.cpp etw.h diff --git a/src/tools/tracegen/CMakeLists.txt b/src/tools/tracegen/CMakeLists.txt index 0f12f823c4..678b46cb21 100644 --- a/src/tools/tracegen/CMakeLists.txt +++ b/src/tools/tracegen/CMakeLists.txt @@ -4,7 +4,8 @@ ## tracegen Tool: ##################################################################### -qt_add_tool(tracegen +qt_get_tool_target_name(target_name tracegen) +qt_add_tool(${target_name} BOOTSTRAP TOOLS_TARGET Core # special case SOURCES diff --git a/src/tools/uic/.prev_CMakeLists.txt b/src/tools/uic/.prev_CMakeLists.txt index 76c9bac287..eb5a82572e 100644 --- a/src/tools/uic/.prev_CMakeLists.txt +++ b/src/tools/uic/.prev_CMakeLists.txt @@ -4,7 +4,8 @@ ## uic Tool: ##################################################################### -qt_add_tool(uic +qt_get_tool_target_name(target_name uic) +qt_add_tool(${target_name} TARGET_DESCRIPTION "Qt User Interface Compiler" SOURCES cpp/cppwritedeclaration.cpp cpp/cppwritedeclaration.h diff --git a/src/tools/uic/CMakeLists.txt b/src/tools/uic/CMakeLists.txt index d6b45432bc..c25b53f7d3 100644 --- a/src/tools/uic/CMakeLists.txt +++ b/src/tools/uic/CMakeLists.txt @@ -4,7 +4,8 @@ ## uic Tool: ##################################################################### -qt_add_tool(uic +qt_get_tool_target_name(target_name uic) +qt_add_tool(${target_name} TARGET_DESCRIPTION "Qt User Interface Compiler" TOOLS_TARGET Widgets # special case SOURCES diff --git a/util/cmake/pro2cmake.py b/util/cmake/pro2cmake.py index 49a3917c77..74905f38e8 100755 --- a/util/cmake/pro2cmake.py +++ b/util/cmake/pro2cmake.py @@ -2307,7 +2307,10 @@ def expand_resource_glob(cm_fh: IO[str], expression: str) -> str: return expanded_var -def write_resources(cm_fh: IO[str], target: str, scope: Scope, indent: int = 0, is_example=False): +def write_resources(cm_fh: IO[str], target: str, scope: Scope, indent: int = 0, is_example=False, + target_ref: str = None): + if target_ref is None: + target_ref = target # vpath = scope.expand('VPATH') # Handle QRC files by turning them into qt_add_resource: @@ -2325,7 +2328,7 @@ def write_resources(cm_fh: IO[str], target: str, scope: Scope, indent: int = 0, cm_fh.write(f"#### Ignored generated resource: {r}") continue qrc_output += process_qrc_file( - target, + target_ref, scope, r, scope.basedir, @@ -2357,7 +2360,7 @@ def write_resources(cm_fh: IO[str], target: str, scope: Scope, indent: int = 0, immediate_lang = None immediate_name = f"qmake_{r}" qrc_output += write_add_qt_resource_call( - target=target, + target=target_ref, scope=scope, resource_name=immediate_name, prefix=immediate_prefix, @@ -2395,7 +2398,7 @@ def write_resources(cm_fh: IO[str], target: str, scope: Scope, indent: int = 0, files = {f: "" for f in standalone_files} skip_qtquick_compiler = False qrc_output += write_add_qt_resource_call( - target=target, + target=target_ref, scope=scope, resource_name=name, prefix=prefix, @@ -2483,7 +2486,9 @@ def expand_project_requirements(scope: Scope, skip_message: bool = False) -> str return requirements -def write_extend_target(cm_fh: IO[str], target: str, scope: Scope, indent: int = 0): +def write_extend_target(cm_fh: IO[str], target: str, scope: Scope, indent: int = 0, target_ref: str = None): + if target_ref is None: + target_ref = target ind = spaces(indent) extend_qt_io_string = io.StringIO() write_sources_section(extend_qt_io_string, scope) @@ -2495,7 +2500,7 @@ def write_extend_target(cm_fh: IO[str], target: str, scope: Scope, indent: int = cmake_api_call = get_cmake_api_call("qt_extend_target") extend_scope = ( - f"\n{ind}{cmake_api_call}({target} CONDITION" + f"\n{ind}{cmake_api_call}({target_ref} CONDITION" f" {condition}\n" f"{extend_qt_string}{ind})\n" ) @@ -2506,7 +2511,7 @@ def write_extend_target(cm_fh: IO[str], target: str, scope: Scope, indent: int = cm_fh.write(extend_scope) io_string = io.StringIO() - write_resources(io_string, target, scope, indent + 1) + write_resources(io_string, target, scope, indent + 1, target_ref=target_ref) resource_string = io_string.getvalue() if len(resource_string) != 0: resource_string = resource_string.strip("\n").rstrip(f"\n{spaces(indent + 1)}") @@ -2892,6 +2897,12 @@ def write_main_part( cm_fh.write(f'{spaces(indent)}list(APPEND test_data "{data}")\n') cm_fh.write("\n") + target_ref = name + if typename == "Tool": + target_ref = "${target_name}" + comment_line = "#" * 69 + cm_fh.write(f"{spaces(indent)}qt_get_tool_target_name(target_name {name})\n") + # Check for DESTDIR override destdir = scope.get_string("DESTDIR") if destdir: @@ -2904,7 +2915,7 @@ def write_main_part( destdir = replace_path_constants(destdir, scope) extra_lines.append(f'OUTPUT_DIRECTORY "{destdir}"') - cm_fh.write(f"{spaces(indent)}{cmake_function}({name}\n") + cm_fh.write(f"{spaces(indent)}{cmake_function}({target_ref}\n") for extra_line in extra_lines: cm_fh.write(f"{spaces(indent)} {extra_line}\n") @@ -2915,7 +2926,7 @@ def write_main_part( # Footer: cm_fh.write(f"{spaces(indent)})\n") - write_resources(cm_fh, name, scope, indent) + write_resources(cm_fh, name, scope, indent, target_ref=target_ref) write_statecharts(cm_fh, name, scope, indent) @@ -2951,7 +2962,7 @@ def write_main_part( c.reset_visited_keys() write_android_part(cm_fh, name, c, indent=indent) write_wayland_part(cm_fh, name, c, indent=indent) - write_extend_target(cm_fh, name, c, indent=indent) + write_extend_target(cm_fh, name, c, target_ref=target_ref, indent=indent) write_simd_part(cm_fh, name, c, indent=indent) ignored_keys_report = write_ignored_keys(c, spaces(indent)) @@ -3154,7 +3165,7 @@ def write_tool(cm_fh: IO[str], scope: Scope, *, indent: int = 0) -> str: extra_keys=["CONFIG"], ) - return tool_name + return tool_name, "${target_name}" def write_test(cm_fh: IO[str], scope: Scope, gui: bool = False, *, indent: int = 0) -> str: @@ -3770,6 +3781,7 @@ def handle_app_or_lib( is_plugin = "plugin" in config is_qt_plugin = any("qt_plugin" == s for s in scope.get("_LOADED")) or is_qml_plugin target = "" + target_ref = None gui = all(val not in config for val in ["console", "cmdline", "-app_bundle"]) and all( val not in scope.expand("QT") for val in ["testlib", "testlib-private"] ) @@ -3792,7 +3804,7 @@ def handle_app_or_lib( target = write_module(cm_fh, scope, indent=indent) elif "qt_tool" in scope.get("_LOADED"): assert not is_example - target = write_tool(cm_fh, scope, indent=indent) + target, target_ref = write_tool(cm_fh, scope, indent=indent) else: if "testcase" in config or "testlib" in config or "qmltestcase" in config: assert not is_example @@ -3800,6 +3812,9 @@ def handle_app_or_lib( else: target = write_binary(cm_fh, scope, gui, indent=indent) + if target_ref is None: + target_ref = target + # ind = spaces(indent) cmake_api_call = get_cmake_api_call("qt_add_docs") write_source_file_list( @@ -3808,14 +3823,14 @@ def handle_app_or_lib( "", ["QMAKE_DOCS"], indent, - header=f"{cmake_api_call}({target}\n", + header=f"{cmake_api_call}({target_ref}\n", footer=")\n", ) # Generate qmltypes instruction for anything that may have CONFIG += qmltypes # that is not a qml plugin if "qmltypes" in scope.get("CONFIG") and "qml_plugin" not in scope.get("_LOADED"): - cm_fh.write(f"\n{spaces(indent)}set_target_properties({target} PROPERTIES\n") + cm_fh.write(f"\n{spaces(indent)}set_target_properties({target_ref} PROPERTIES\n") install_dir = scope.expandString("QMLTYPES_INSTALL_DIR") if install_dir: @@ -3842,7 +3857,7 @@ def handle_app_or_lib( cm_fh.write(f'{spaces(indent+1)}QT_QML_MODULE_INSTALL_DIR "{install_dir}"\n') cm_fh.write(f"{spaces(indent)})\n\n") - cm_fh.write(f"qt6_qml_type_registration({target})\n") + cm_fh.write(f"qt6_qml_type_registration({target_ref})\n") def handle_top_level_repo_project(scope: Scope, cm_fh: IO[str]): |