From aab8b7727d8acff989dbdf9b01ca7fb2b12da541 Mon Sep 17 00:00:00 2001 From: Alexandru Croitor Date: Fri, 6 Sep 2024 13:54:24 +0200 Subject: [PATCH] CMake: Allow specifying an optional host tools path for doc generation Introduce a new QT_OPTIONAL_TOOLS_PATH cmake variable that can be set to a path where some of the documentation generation host tools might be located. This allows using specific builds of qdoc, qvkgen, qdbusxml2cpp and qtattributionsscanner for documentation generation. QT_HOST_PATH wouldn't be sufficient in this case, because it requires all host tools to be installed for the given path, otherwise configuration will fail In contrast with QT_OPTIONAL_TOOLS_PATH we can specify the paths only for the tools listed above, while continuing using other build tools from the usual locations, either built or found. As a drive-by, fix the usage of CMAKE_EXECUTABLE_SUFFIX to be based on the host platform. Pick-to: 6.8 Task-number: QTBUG-128730 Change-Id: I2796be3a9772b106788ce63a4aed890516e8b716 Reviewed-by: Alexey Edelev --- cmake/QtDbusHelpers.cmake | 16 ++++++++++++++-- cmake/QtDocsHelpers.cmake | 16 +++++++++++++--- src/gui/CMakeLists.txt | 5 +++++ 3 files changed, 32 insertions(+), 5 deletions(-) diff --git a/cmake/QtDbusHelpers.cmake b/cmake/QtDbusHelpers.cmake index 26e98eff27e..db113b0d982 100644 --- a/cmake/QtDbusHelpers.cmake +++ b/cmake/QtDbusHelpers.cmake @@ -55,10 +55,22 @@ function(qt_create_qdbusxml2cpp_command target infile) set(header_file_full "${CMAKE_CURRENT_BINARY_DIR}/${file_name}.h") set(source_file_full "${CMAKE_CURRENT_BINARY_DIR}/${file_name}.cpp") + if(QT_OPTIONAL_TOOLS_PATH) + if(CMAKE_HOST_WIN32) + set(executable_suffix ".exe") + else() + set(executable_suffix "") + endif() + set(tool_path + "${QT_OPTIONAL_TOOLS_PATH}/${INSTALL_BINDIR}/qdbusxml2cpp${executable_suffix}") + else() + set(tool_path "${QT_CMAKE_EXPORT_NAMESPACE}::qdbusxml2cpp") + endif() + add_custom_command(OUTPUT "${header_file_full}" "${source_file_full}" - COMMAND ${QT_CMAKE_EXPORT_NAMESPACE}::qdbusxml2cpp ${arg_FLAGS} "${option}" + COMMAND ${tool_path} ${arg_FLAGS} "${option}" "${header_file}:${source_file}" "${absolute_in_file_path}" - DEPENDS "${absolute_in_file_path}" ${QT_CMAKE_EXPORT_NAMESPACE}::qdbusxml2cpp + DEPENDS "${absolute_in_file_path}" ${tool_path} WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" COMMAND_EXPAND_LISTS VERBATIM) diff --git a/cmake/QtDocsHelpers.cmake b/cmake/QtDocsHelpers.cmake index 99ee18d537d..9ef7119a6a4 100644 --- a/cmake/QtDocsHelpers.cmake +++ b/cmake/QtDocsHelpers.cmake @@ -68,6 +68,10 @@ function(qt_internal_add_docs) set(tool_dependencies_enabled FALSE) set(doc_tools_bin "${QT_HOST_PATH}/${QT${PROJECT_VERSION_MAJOR}_HOST_INFO_BINDIR}") set(doc_tools_libexec "${QT_HOST_PATH}/${QT${PROJECT_VERSION_MAJOR}_HOST_INFO_LIBEXECDIR}") + elseif(NOT "${QT_OPTIONAL_TOOLS_PATH}" STREQUAL "") + set(tool_dependencies_enabled FALSE) + set(doc_tools_bin "${QT_OPTIONAL_TOOLS_PATH}/${INSTALL_BINDIR}") + set(doc_tools_libexec "${QT_OPTIONAL_TOOLS_PATH}/${INSTALL_LIBEXECDIR}") elseif(QT_SUPERBUILD) set(doc_tools_bin "${QtBase_BINARY_DIR}/${INSTALL_BINDIR}") set(doc_tools_libexec "${QtBase_BINARY_DIR}/${INSTALL_LIBEXECDIR}") @@ -76,9 +80,15 @@ function(qt_internal_add_docs) set(doc_tools_libexec "${QT_BUILD_INTERNALS_RELOCATABLE_INSTALL_PREFIX}/${INSTALL_LIBEXECDIR}") endif() - set(qdoc_bin "${doc_tools_bin}/qdoc${CMAKE_EXECUTABLE_SUFFIX}") - set(qtattributionsscanner_bin "${doc_tools_libexec}/qtattributionsscanner${CMAKE_EXECUTABLE_SUFFIX}") - set(qhelpgenerator_bin "${doc_tools_libexec}/qhelpgenerator${CMAKE_EXECUTABLE_SUFFIX}") + if(CMAKE_HOST_WIN32) + set(executable_suffix ".exe") + else() + set(executable_suffix "") + endif() + + set(qdoc_bin "${doc_tools_bin}/qdoc${executable_suffix}") + set(qtattributionsscanner_bin "${doc_tools_libexec}/qtattributionsscanner${executable_suffix}") + set(qhelpgenerator_bin "${doc_tools_libexec}/qhelpgenerator${executable_suffix}") get_target_property(target_type ${target} TYPE) if (NOT target_type STREQUAL "INTERFACE_LIBRARY") diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index 5882693d7e2..9fd1e92553e 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -957,6 +957,11 @@ if (QT_FEATURE_vulkan) "${QT_HOST_PATH}" "${QT${PROJECT_VERSION_MAJOR}_HOST_INFO_LIBEXECDIR}" "qvkgen${host_executable_suffix}") + elseif(QT_OPTIONAL_TOOLS_PATH) + qt_path_join(qvkgen + "${QT_OPTIONAL_TOOLS_PATH}" + "${INSTALL_LIBEXECDIR}" + "qvkgen${host_executable_suffix}") else() set(qvkgen "${QT_CMAKE_EXPORT_NAMESPACE}::qvkgen") endif()