From 62e90aefbe860024576d51ea7d5eec3100a4613a Mon Sep 17 00:00:00 2001 From: Venugopal Shivashankar Date: Wed, 30 Mar 2022 18:26:17 +0200 Subject: CMake: Clean up the config to find doc tools Maintain the doctools config in a single place, and include it wherever necessary. Done-with: Alexandru Croitor Pick-to: 6.2 Change-Id: Ib22e8676aa39bbddb616c7018b01b046bb33ae82 Reviewed-by: Alexandru Croitor Reviewed-by: Qt CI Bot --- sources/pyside6/doc/CMakeLists.txt | 58 +++---------------------- sources/shiboken6/cmake/FindDocTools.cmake | 36 ++++++++++++++++ sources/shiboken6/doc/CMakeLists.txt | 43 ++++--------------- sources/shiboken6/doc/scripts/patch_qhp.py | 69 ++++++++++++++++++++++++++++++ 4 files changed, 118 insertions(+), 88 deletions(-) create mode 100644 sources/shiboken6/cmake/FindDocTools.cmake create mode 100644 sources/shiboken6/doc/scripts/patch_qhp.py diff --git a/sources/pyside6/doc/CMakeLists.txt b/sources/pyside6/doc/CMakeLists.txt index e1c0056db..7bc1424bf 100644 --- a/sources/pyside6/doc/CMakeLists.txt +++ b/sources/pyside6/doc/CMakeLists.txt @@ -2,36 +2,8 @@ cmake_minimum_required(VERSION 3.16) cmake_policy(VERSION 3.16) project(doc) - -find_program(SPHINX_BUILD sphinx-build) - -# graphviz dot appears to be used by sphinx and not by CMake directly. This is just found to check -# if it exists. -find_program(DOT_EXEC dot) - -# Lookup for qdoc in multiple sources: cache var, PATH or CMake package. -set(qdoc_binary "") -find_program(QDOC_EXECUTABLE qdoc DOC "Path to qdoc binary.") -if(QDOC_EXECUTABLE) - set(qdoc_binary "${QDOC_EXECUTABLE}") -else() - find_package(Qt6 QUIET COMPONENTS Tools) - if(TARGET Qt6::qdoc) - set(qdoc_binary "$") - endif() -endif() - -# Lookup for qhelpgenerator in multiple sources: cache var, PATH or CMake package. -set(qhelpgenerator_binary "") -find_program(QHELPGENERATOR_EXECUTABLE qhelpgenerator DOC "Path to qhelpgenerator binary.") -if(QHELPGENERATOR_EXECUTABLE) - set(qhelpgenerator_binary "${QHELPGENERATOR_EXECUTABLE}") -else() - find_package(Qt6 QUIET COMPONENTS Tools) - if(TARGET Qt6::qhelpgenerator) - set(qhelpgenerator_binary "$") - endif() -endif() +list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/../../shiboken6/cmake") +include(FindDocTools) # When the doc project is built as part of the pyside project, we show informational message # and return early if requirements are not met. @@ -221,27 +193,6 @@ if (FULLDOCSBUILD) COMMENT "Running qdoc against Qt source code...") endif() -# conditional tag for sphinx build -#string(JOIN "_" SPHINX_TAG ${DOC_OUTPUT_FORMAT} "format") -# Python script to replace the virtualFolder string in the QHP -set(py_cmd " -import fileinput -import re -try: -\tfor line in fileinput.input('html/PySide.qhp',inplace=True,backup='.bak'): -\t\tline_copy=line.strip() -\t\tif not line_copy: # check for empty line -\t\t\tcontinue -\t\tmatch=re.match('(^.*virtualFolder.)doc(.*$)',line) -\t\tif match: -\t\t\trepl=''.join([match.group(1),'pyside6',match.group(2)]) -\t\t\tprint(line.replace(match.group(0),repl),end='') -\t\telse: -\t\t\tprint(line) -except: -\tpass\n") -file(GENERATE OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/py_script.py CONTENT ${py_cmd}) - add_custom_target(apidoc COMMAND ${SHIBOKEN_PYTHON_INTERPRETER} ${SPHINX_BUILD} -b ${DOC_OUTPUT_FORMAT} ${CMAKE_CURRENT_BINARY_DIR}/rst html COMMENT "Generating PySide htmls..." @@ -260,10 +211,11 @@ if(DOC_OUTPUT_FORMAT STREQUAL "html") else() if(qhelpgenerator_binary) message(STATUS "qhelpgenerator - found") - + # Python script that will be called to update the QHP + set(PATCH_QHP_SCRIPT "${CMAKE_CURRENT_LIST_DIR}/../../shiboken6/doc/scripts/patch_qhp.py") file(TO_NATIVE_PATH ${CMAKE_CURRENT_BINARY_DIR}/html/PySide.qhp QHP_FILE) add_custom_command(TARGET apidoc POST_BUILD - COMMAND ${python_executable} py_script.py + COMMAND ${python_executable} ${PATCH_QHP_SCRIPT} -f ${QHP_FILE} -v pyside6 COMMAND "${qhelpgenerator_binary}" ${QHP_FILE} COMMENT "Generating QCH from a QHP file..." VERBATIM diff --git a/sources/shiboken6/cmake/FindDocTools.cmake b/sources/shiboken6/cmake/FindDocTools.cmake new file mode 100644 index 000000000..abf5e5005 --- /dev/null +++ b/sources/shiboken6/cmake/FindDocTools.cmake @@ -0,0 +1,36 @@ +find_program(SPHINX_BUILD sphinx-build DOC "Path to sphinx-build binary.") + +# graphviz dot appears to be used by sphinx and not by CMake directly. This is just found to check +# if it exists. +find_program(DOT_EXEC dot) + +# Lookup for qdoc and qhelpgenerator in multiple sources: ccache var, PATH or CMake package. +set(qhelpgenerator_binary "") +set(qdoc_binary "") +if(QHELPGENERATOR_EXECUTABLE) + set(qhelpgenerator_binary "${QHELPGENERATOR_EXECUTABLE}") +else() + find_package(Qt6 QUIET COMPONENTS Tools) + if(TARGET Qt6::qhelpgenerator) + get_target_property(qhelpgenerator_binary Qt6::qhelpgenerator IMPORTED_LOCATION) + else() + find_program(QHELPGENERATOR_EXECUTABLE qhelpgenerator DOC "Path to qhelpgenerator binary.") + if(QHELPGENERATOR_EXECUTABLE) + set(qhelpgenerator_binary "${QHELPGENERATOR_EXECUTABLE}") + endif() + endif() +endif() + +if(QDOC_EXECUTABLE) + set(qdoc_binary "${QDOC_EXECUTABLE}") +else() + find_package(Qt6 QUIET COMPONENTS Tools) + if(TARGET Qt6::qdoc) + get_target_property(qdoc_binary Qt6::qdoc IMPORTED_LOCATION) + else() + find_program(QDOC_EXECUTABLE qdoc DOC "Path to qdoc binary.") + if(QDOC_EXECUTABLE) + set(qdoc_binary "${QDOC_EXECUTABLE}") + endif() + endif() +endif() diff --git a/sources/shiboken6/doc/CMakeLists.txt b/sources/shiboken6/doc/CMakeLists.txt index 25a4be1ec..4cd459c23 100644 --- a/sources/shiboken6/doc/CMakeLists.txt +++ b/sources/shiboken6/doc/CMakeLists.txt @@ -3,59 +3,32 @@ cmake_minimum_required(VERSION 3.16) if(FULLDOCSBUILD EQUAL 0) project(shiboken6_doc) endif() -find_program(SPHINX sphinx-build DOC "Path to sphinx-build binary.") -# Lookup for qhelpgenerator in multiple sources: cache var, PATH or CMake package. -set(qhelpgenerator_binary "") -find_program(QHELPGENERATOR_EXECUTABLE qhelpgenerator DOC "Path to qhelpgenerator binary.") -if(QHELPGENERATOR_EXECUTABLE) - set(qhelpgenerator_binary "${QHELPGENERATOR_EXECUTABLE}") -else() - find_package(Qt6 QUIET COMPONENTS Tools) - if(TARGET Qt6::qhelpgenerator) - set(qhelpgenerator_binary "$") - endif() -endif() +list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/../cmake") +include(FindDocTools) # Generate html by default. if(NOT DOC_OUTPUT_FORMAT) set(DOC_OUTPUT_FORMAT "html") endif() -if(SPHINX) +if(SPHINX_BUILD) message(STATUS "sphinx-build - found") configure_file(conf.py.in conf.py @ONLY) # conditional tag for sphinx build #string(JOIN "_" SPHINX_TAG ${DOC_OUTPUT_FORMAT} "format") add_custom_target(doc - COMMAND ${SPHINX} -b ${DOC_OUTPUT_FORMAT} -c . ${CMAKE_CURRENT_SOURCE_DIR} html + COMMAND ${SPHINX_BUILD} -b ${DOC_OUTPUT_FORMAT} -c . ${CMAKE_CURRENT_SOURCE_DIR} html COMMENT "Generating shiboken documentation HTML files" VERBATIM) - # Python script that will be called to update the QHP - set(py_cmd " -import fileinput -import re -try: -\tfor line in fileinput.input('html/Shiboken.qhp',inplace=True,backup='.bak'): -\t\tline_copy=line.strip() -\t\tif not line_copy: # check for empty line -\t\t\tcontinue -\t\tmatch=re.match('(^.*virtualFolder.)doc(.*$)',line) -\t\tif match: -\t\t\trepl=''.join([match.group(1),'shiboken6',match.group(2)]) -\t\t\tprint(line.replace(match.group(0),repl),end=' ') -\t\telse: -\t\t\tprint(line) -except: -\tpass\n") - file(GENERATE OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/py_script.py - CONTENT ${py_cmd}) # Attach a POST_BUILD step to the 'doc' custom target to generate a QCH file. if(DOC_OUTPUT_FORMAT STREQUAL "qthelp") if(qhelpgenerator_binary) message(STATUS "qhelpgenerator - found") + # Python script that will be called to update the QHP + set(PATCH_QHP_SCRIPT "${CMAKE_CURRENT_LIST_DIR}/../../shiboken6/doc/scripts/patch_qhp.py") file(TO_NATIVE_PATH ${CMAKE_CURRENT_BINARY_DIR}/html/Shiboken.qhp QHP_FILE) if(SHIBOKEN_IS_CROSS_BUILD) @@ -68,7 +41,7 @@ except: endif() add_custom_command(TARGET doc POST_BUILD - COMMAND "${python_executable}" py_script.py # ${CMAKE_CURRENT_BINARY_DIR}/html/Shiboken.qhp + COMMAND "${python_executable}" ${PATCH_QHP_SCRIPT} -f ${QHP_FILE} -v shiboken6 COMMAND "${qhelpgenerator_binary}" ${QHP_FILE} COMMENT "Generating shiboken documentation QCH files based on the QHP files" VERBATIM) @@ -77,7 +50,7 @@ except: endif() endif() else() - if(NOT SPHINX) + if(NOT SPHINX_BUILD) message(WARNING "sphinx-build - not found! doc target disabled") endif() if (WIN32) diff --git a/sources/shiboken6/doc/scripts/patch_qhp.py b/sources/shiboken6/doc/scripts/patch_qhp.py new file mode 100644 index 000000000..a9f858889 --- /dev/null +++ b/sources/shiboken6/doc/scripts/patch_qhp.py @@ -0,0 +1,69 @@ +############################################################################# +## +## Copyright (C) 2022 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of Qt for Python. +## +## $QT_BEGIN_LICENSE:LGPL$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 3 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL3 included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 3 requirements +## will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 2.0 or (at your option) the GNU General +## Public license version 3 or any later version approved by the KDE Free +## Qt Foundation. The licenses are as published by the Free Software +## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-2.0.html and +## https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import fileinput +import re +from argparse import ArgumentParser, RawTextHelpFormatter + +options = ArgumentParser(description='Qhp file updater', + formatter_class=RawTextHelpFormatter) +options.add_argument('-f', + '--filename', + type=str, + help='Qhp filename with the relative path.', + required=True) +options.add_argument('-v', + '--vfolder', + type=str, + help='String to be injected into the Qhp file.') +args=options.parse_args() + +try: + for line in fileinput.input(args.filename,inplace=True,backup='.bak'): + line_copy=line.strip() + if not line_copy: # check for empty line + continue + match=re.match('(^.*virtualFolder.)doc(.*$)',line) + if match: + repl=''.join([match.group(1), args.vfolder, match.group(2)]) + print(line.replace(match.group(0),repl),end=' ') + else: + print(line.rstrip()) +except: + pass -- cgit v1.2.3