aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVenugopal Shivashankar <Venugopal.Shivashankar@qt.io>2022-03-30 18:26:17 +0200
committerVenugopal Shivashankar <Venugopal.Shivashankar@qt.io>2022-04-05 11:07:06 +0200
commit62e90aefbe860024576d51ea7d5eec3100a4613a (patch)
tree4fdeb9984a0cb80aed5fcf061d968e01ef777153
parentf21f5c469813ab8fb13b2607624dd9a33c345acb (diff)
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 <alexandru.croitor@qt.io> Pick-to: 6.2 Change-Id: Ib22e8676aa39bbddb616c7018b01b046bb33ae82 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
-rw-r--r--sources/pyside6/doc/CMakeLists.txt58
-rw-r--r--sources/shiboken6/cmake/FindDocTools.cmake36
-rw-r--r--sources/shiboken6/doc/CMakeLists.txt43
-rw-r--r--sources/shiboken6/doc/scripts/patch_qhp.py69
4 files changed, 118 insertions, 88 deletions
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 "$<TARGET_FILE:Qt6::qdoc>")
- 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 "$<TARGET_FILE:Qt6::qhelpgenerator>")
- 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 "$<TARGET_FILE:Qt6::qhelpgenerator>")
- 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