diff options
Diffstat (limited to 'cmake/QtDocsHelpers.cmake')
-rw-r--r-- | cmake/QtDocsHelpers.cmake | 65 |
1 files changed, 54 insertions, 11 deletions
diff --git a/cmake/QtDocsHelpers.cmake b/cmake/QtDocsHelpers.cmake index d534ee3e8b..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,14 +21,39 @@ 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() @@ -46,7 +74,7 @@ function(qt_internal_add_docs) 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_bin}/qhelpgenerator${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") @@ -94,6 +122,7 @@ function(qt_internal_add_docs) add_custom_target(qattributionsscanner_${target} COMMAND ${qtattributionsscanner_bin} ${PROJECT_SOURCE_DIR} + --basedir "${PROJECT_SOURCE_DIR}/.." --filter "QDocModule=${doc_target}" -o "${target_bin_dir}/codeattributions.qdoc" ) @@ -101,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() @@ -132,16 +166,25 @@ function(qt_internal_add_docs) ) 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 "") @@ -150,7 +193,7 @@ function(qt_internal_add_docs) endif() add_custom_target(${target_prefix}_${target} ${depends_arg} - COMMAND ${CMAKE_COMMAND} -E env ${qdoc_env_args} ${qdoc_bin} ${generate_qdocs_args}) + COMMAND ${CMAKE_COMMAND} -E env ${qdoc_env_args} ${qdoc_bin} ${generate_qdoc_args}) endforeach() add_dependencies(generate_docs_${target} prepare_docs_${target}) |