summaryrefslogtreecommitdiffstats
path: root/cmake/QtDocsHelpers.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'cmake/QtDocsHelpers.cmake')
-rw-r--r--cmake/QtDocsHelpers.cmake104
1 files changed, 81 insertions, 23 deletions
diff --git a/cmake/QtDocsHelpers.cmake b/cmake/QtDocsHelpers.cmake
index 593a72c90e..8b631e88ca 100644
--- a/cmake/QtDocsHelpers.cmake
+++ b/cmake/QtDocsHelpers.cmake
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
# This function adds a dependency between a doc-generating target like 'generate_docs_Gui'
# and the necessary tool target like 'qdoc'.
#
@@ -18,28 +21,60 @@ function(qt_internal_add_docs)
# Function called from old generated CMakeLists.txt that was missing the target parameter
return()
endif()
- if(NOT ${ARGC} EQUAL 2)
- message(FATAL_ERROR "qt_add_docs called with the wrong number of arguments. Should be qt_add_docs(target path_to_project.qdocconf).")
+ set(error_msg "qt_add_docs called with wrong number of arguments. ")
+ list(APPEND error_msg
+ "Should be qt_add_docs\(target_name qdocconf "
+ "\[INDEX_DIRECTORIES EXTRA_INDEX_DIRS_LIST_TO_ENABLE_QDOC_RESOLVE_LINKS\]\)")
+ if(NOT ${ARGC} GREATER_EQUAL 2)
+ message(FATAL_ERROR ${error_msg})
return()
endif()
+
set(target ${ARGV0})
set(doc_project ${ARGV1})
+ set(qdoc_extra_args "")
+ # Check if there are more than 2 arguments and pass them
+ # as extra --indexdir arguments to qdoc in prepare and
+ # generate phases.
+ if (${ARGC} GREATER 2)
+ # The INDEX_DIRECTORIES key should enable passing a list of index
+ # directories as extra command-line arguments to qdoc.
+ set(qdocExtraArgs INDEX_DIRECTORIES)
+ cmake_parse_arguments(PARSE_ARGV 2 arg "" "" "${qdocExtraArgs}")
+ if(arg_UNPARSED_ARGUMENTS)
+ message(FATAL_ERROR ${error_msg})
+ return()
+ endif()
+ if(arg_INDEX_DIRECTORIES)
+ foreach(index_directory ${arg_INDEX_DIRECTORIES})
+ list(APPEND qdoc_extra_args "--indexdir" ${index_directory})
+ endforeach()
+ endif()
+ endif()
- # If a target is not built (which can happen for tools when crosscompiling, we shouldn't try
+
+ # If a target is not built (which can happen for tools when crosscompiling), we shouldn't try
# to generate docs.
if(NOT TARGET "${target}")
return()
endif()
- if(QT_SUPERBUILD)
- set(doc_tools_dir "${QtBase_BINARY_DIR}/${INSTALL_BINDIR}")
+ set(tool_dependencies_enabled TRUE)
+ if(NOT "${QT_HOST_PATH}" STREQUAL "")
+ 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(QT_SUPERBUILD)
+ set(doc_tools_bin "${QtBase_BINARY_DIR}/${INSTALL_BINDIR}")
+ set(doc_tools_libexec "${QtBase_BINARY_DIR}/${INSTALL_LIBEXECDIR}")
else()
- set(doc_tools_dir "${QT_BUILD_INTERNALS_RELOCATABLE_INSTALL_PREFIX}/${INSTALL_BINDIR}")
+ set(doc_tools_bin "${QT_BUILD_INTERNALS_RELOCATABLE_INSTALL_PREFIX}/${INSTALL_BINDIR}")
+ set(doc_tools_libexec "${QT_BUILD_INTERNALS_RELOCATABLE_INSTALL_PREFIX}/${INSTALL_LIBEXECDIR}")
endif()
- set(qdoc_bin "${doc_tools_dir}/qdoc${CMAKE_EXECUTABLE_SUFFIX}")
- set(qtattributionsscanner_bin "${doc_tools_dir}/qtattributionsscanner${CMAKE_EXECUTABLE_SUFFIX}")
- set(qhelpgenerator_bin "${doc_tools_dir}/qhelpgenerator${CMAKE_EXECUTABLE_SUFFIX}")
+ 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}")
get_target_property(target_type ${target} TYPE)
if (NOT target_type STREQUAL "INTERFACE_LIBRARY")
@@ -85,9 +120,9 @@ function(qt_internal_add_docs)
# qtattributionsscanner
add_custom_target(qattributionsscanner_${target}
- DEPENDS ${qattributionsscanner_bin}
COMMAND ${qtattributionsscanner_bin}
${PROJECT_SOURCE_DIR}
+ --basedir "${PROJECT_SOURCE_DIR}/.."
--filter "QDocModule=${doc_target}"
-o "${target_bin_dir}/codeattributions.qdoc"
)
@@ -95,18 +130,23 @@ function(qt_internal_add_docs)
# prepare docs target
set(prepare_qdoc_args
-outputdir "${qdoc_output_dir}"
- -installdir "${QT_INSTALL_DIR}/${INSTALL_DOCDIR}"
"${target_source_dir}/${doc_project}"
-prepare
-indexdir "${index_dir}"
-no-link-errors
"${include_path_args}"
)
+ if(NOT QT_BUILD_ONLINE_DOCS)
+ list(PREPEND prepare_qdoc_args
+ -installdir "${QT_INSTALL_DIR}/${INSTALL_DOCDIR}"
+ ${qdoc_extra_args}
+ )
+ endif()
- if(QT_SUPERBUILD)
+ if(DEFINED ENV{QT_INSTALL_DOCS})
+ set(qt_install_docs_env "$ENV{QT_INSTALL_DOCS}")
+ elseif(QT_SUPERBUILD OR "${PROJECT_NAME}" STREQUAL "QtBase")
set(qt_install_docs_env "${QtBase_BINARY_DIR}/${INSTALL_DOCDIR}")
- elseif(QT_WILL_INSTALL)
- set(qt_install_docs_env "${CMAKE_INSTALL_PREFIX}/${INSTALL_DOCDIR}")
else()
set(qt_install_docs_env "${QT_BUILD_INTERNALS_RELOCATABLE_INSTALL_PREFIX}/${INSTALL_DOCDIR}")
endif()
@@ -120,28 +160,40 @@ function(qt_internal_add_docs)
)
add_custom_target(prepare_docs_${target}
- DEPENDS ${qdoc_bin}
COMMAND ${CMAKE_COMMAND} -E env ${qdoc_env_args}
${qdoc_bin}
${prepare_qdoc_args}
)
add_dependencies(prepare_docs_${target} qattributionsscanner_${target})
+ if(NOT TARGET sync_all_public_headers)
+ add_custom_target(sync_all_public_headers)
+ endif()
+ add_dependencies(prepare_docs_${target} sync_all_public_headers)
# generate docs target
- set(generate_qdocs_args
+ set(generate_qdoc_args
-outputdir "${qdoc_output_dir}"
- -installdir "${INSTALL_DOCDIR}"
"${target_source_dir}/${doc_project}"
-generate
-indexdir "${index_dir}"
"${include_path_args}"
)
+ if(NOT QT_BUILD_ONLINE_DOCS)
+ list(PREPEND generate_qdoc_args
+ -installdir "${QT_INSTALL_DIR}/${INSTALL_DOCDIR}"
+ ${qdoc_extra_args}
+ )
+ endif()
foreach(target_prefix generate_top_level_docs generate_repo_docs generate_docs)
+ set(depends_arg "")
+ if(tool_dependencies_enabled)
+ set(depends_arg DEPENDS ${qdoc_bin})
+ endif()
add_custom_target(${target_prefix}_${target}
- DEPENDS ${qdoc_bin}
- COMMAND ${CMAKE_COMMAND} -E env ${qdoc_env_args} ${qdoc_bin} ${generate_qdocs_args})
+ ${depends_arg}
+ COMMAND ${CMAKE_COMMAND} -E env ${qdoc_env_args} ${qdoc_bin} ${generate_qdoc_args})
endforeach()
add_dependencies(generate_docs_${target} prepare_docs_${target})
@@ -158,8 +210,12 @@ function(qt_internal_add_docs)
set(qch_file_path ${qdoc_qch_output_dir}/${qch_file_name})
foreach(target_prefix qch_top_level_docs qch_repo_docs qch_docs)
+ set(depends_arg "")
+ if(tool_dependencies_enabled)
+ set(depends_arg DEPENDS ${qhelpgenerator_bin})
+ endif()
add_custom_target(${target_prefix}_${target}
- DEPENDS ${qhelpgenerator_bin}
+ ${depends_arg}
COMMAND ${qhelpgenerator_bin}
"${qdoc_output_dir}/${doc_target}.qhp"
-o "${qch_file_path}"
@@ -218,7 +274,9 @@ function(qt_internal_add_docs)
# Make sure that the necessary tools are built when running,
# for example 'cmake --build . --target generate_docs'.
- qt_internal_add_doc_tool_dependency(qattributionsscanner_${target} qtattributionsscanner)
- qt_internal_add_doc_tool_dependency(prepare_docs_${target} qdoc)
- qt_internal_add_doc_tool_dependency(qch_docs_${target} qhelpgenerator)
+ if(tool_dependencies_enabled)
+ qt_internal_add_doc_tool_dependency(qattributionsscanner_${target} qtattributionsscanner)
+ qt_internal_add_doc_tool_dependency(prepare_docs_${target} qdoc)
+ qt_internal_add_doc_tool_dependency(qch_docs_${target} qhelpgenerator)
+ endif()
endfunction()