Warning, /frameworks/kdoctools/KF6DocToolsMacros.cmake is written in an unsupported language. File is not indexed.
0001 # SPDX-FileCopyrightText: 2006-2009 Alexander Neundorf <neundorf@kde.org>
0002 # SPDX-FileCopyrightText: 2006, 2007 Laurent Montel <montel@kde.org>
0003 # SPDX-FileCopyrightText: 2007 Matthias Kretz <kretz@kde.org>
0004 #
0005 # SPDX-License-Identifier: BSD-3-Clause
0006 #
0007 # KDOCTOOLS_CREATE_HANDBOOK( docbookfile [INSTALL_DESTINATION installdest] [SUBDIR subdir])
0008 # Create the handbook from the docbookfile (using meinproc6)
0009 # The resulting handbook will be installed to <installdest> when using
0010 # INSTALL_DESTINATION <installdest>, or to <installdest>/<subdir> if
0011 # SUBDIR <subdir> is specified.
0012 #
0013 # KDOCTOOLS_CREATE_MANPAGE( docbookfile section [INSTALL_DESTINATION installdest])
0014 # Create the manpage for the specified section from the docbookfile (using meinproc6)
0015 # The resulting manpage will be installed to <installdest> when using
0016 # INSTALL_DESTINATION <installdest>.
0017 #
0018 # KDOCTOOLS_INSTALL(podir)
0019 # Search for docbook files in <podir> and install them to the standard
0020 # location.
0021 # This is a convenience function which relies on all docbooks being kept in
0022 # <podir>/<lang>/docs/<project>, where <lang> is the language the docbooks
0023 # for <project> are written in.
0024 #
0025 # Within this directory, files ending with .[0-9].docbook are installed using
0026 # KDOCTOOLS_CREATE_MANPAGE, other .docbook files are installed using
0027 # KDOCTOOLS_CREATE_HANDBOOK if index.docbook is available.
0028 #
0029 # For example, given the following directory structure:
0030 #
0031 # po/
0032 # fr/
0033 # docs/
0034 # foo/
0035 # kioworker6/
0036 # fooworker/
0037 # index.docbook
0038 # footool.1.docbook
0039 # footool.conf.5.docbook
0040 # index.docbook
0041 #
0042 # KDOCTOOLS_INSTALL(po) does the following:
0043 # - Create man pages from footool.1.docbook and footool.conf.5.docbook,
0044 # install them in ${KDE_INSTALL_MANDIR}/fr
0045 # - Create handbooks from index.docbook files, install the one from the
0046 # fooworker/ directory in ${KDE_INSTALL_DOCBUNDLEDIR}/fr/kioworker6/fooworker
0047 # and the one from the docs/ directory in ${KDE_INSTALL_DOCBUNDLEDIR}/fr
0048 #
0049 # If ${KDE_INSTALL_DOCBUNDLEDIR} is not set, share/doc/HTML is used instead.
0050 # If ${KDE_INSTALL_MANDIR} is not set, share/man/<lang> is used instead.
0051 #
0052 # KDOCTOOLS_MEINPROC_EXECUTABLE - the meinproc6 executable
0053 #
0054 # KDOCTOOLS_SERIALIZE_TOOL - wrapper to serialize potentially resource-intensive commands during
0055 # parallel builds (set to 'icecc' when using icecream)
0056 #
0057 # The following variables are defined for the various tools required to
0058 # compile KDE software:
0059 #
0060 # KDOCTOOLS_MEINPROC_EXECUTABLE - the meinproc6 executable
0061 #
0062
0063 set(KDOCTOOLS_SERIALIZE_TOOL "" CACHE STRING "Tool to serialize resource-intensive commands in parallel builds")
0064 set(KDOCTOOLS_MEINPROC_EXECUTABLE "KF6::meinproc6")
0065
0066 if(KDOCTOOLS_SERIALIZE_TOOL)
0067 # parallel build with many meinproc invocations can consume a huge amount of memory
0068 set(KDOCTOOLS_MEINPROC_EXECUTABLE ${KDOCTOOLS_SERIALIZE_TOOL} ${KDOCTOOLS_MEINPROC_EXECUTABLE})
0069 endif(KDOCTOOLS_SERIALIZE_TOOL)
0070
0071 function(_kdoctools_create_target_name out in)
0072 file(RELATIVE_PATH in "${CMAKE_BINARY_DIR}" "${in}")
0073 string(REGEX REPLACE "[^0-9a-zA-Z]+" "-" tmp "${in}")
0074 set(${out} ${tmp} PARENT_SCOPE)
0075 endfunction()
0076
0077 function (kdoctools_create_handbook docbook)
0078 # Parse arguments
0079 set(options)
0080 set(oneValueArgs INSTALL_DESTINATION SUBDIR)
0081 set(multiValueArgs)
0082 cmake_parse_arguments(ARGS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
0083
0084 if(NOT DEFINED ARGS_SUBDIR)
0085 message(FATAL_ERROR "SUBDIR needs to be defined when calling kdoctools_create_handbook")
0086 endif()
0087
0088 # Init vars
0089 get_filename_component(docbook ${docbook} ABSOLUTE)
0090 file(RELATIVE_PATH src_doc ${CMAKE_CURRENT_SOURCE_DIR} ${docbook})
0091 get_filename_component(src_dir ${src_doc} DIRECTORY)
0092 set(build_dir ${CMAKE_CURRENT_BINARY_DIR}/${src_dir})
0093 set(build_doc ${build_dir}/index.cache.bz2)
0094 set(build_html ${build_dir}/index.html)
0095
0096 # current directory is the docbook directory, but if this is empty, the
0097 # globs which finds the docbooks and the images will be empty too as
0098 # they will expand into "/*.docbook" and "/*.png"
0099 if (NOT src_dir)
0100 set(src_dir ".")
0101 endif ()
0102
0103 # Create some place to store our files
0104 file(MAKE_DIRECTORY ${build_dir})
0105
0106 #Bootstrap
0107 if (_kdoctoolsBootStrapping OR _kdoctoolsTestsRunning)
0108 set(_bootstrapOption "--srcdir=${KDocTools_BINARY_DIR}/src")
0109 elseif (CMAKE_CROSSCOMPILING AND CMAKE_SYSTEM_NAME STREQUAL "Windows")
0110 set(_bootstrapOption "--srcdir=${KDOCTOOLS_DATA_INSTALL_DIR}/kdoctools")
0111 else ()
0112 set(_bootstrapOption)
0113 endif ()
0114 set(_ssheet "${KDOCTOOLS_CUSTOMIZATION_DIR}/kde-chunk.xsl")
0115
0116 file(GLOB candidate_src_docs ${src_dir}/*.docbook)
0117
0118 set(src_docs)
0119 foreach (src_single_doc ${candidate_src_docs})
0120 # Exclude manpages
0121 get_filename_component(src_single_doc_name ${src_single_doc} NAME)
0122 if (NOT src_single_doc_name MATCHES "^man-.+\\.docbook$")
0123 list(APPEND src_docs ${src_single_doc})
0124 endif()
0125 endforeach()
0126
0127 add_custom_command(OUTPUT ${build_doc}
0128 COMMAND ${KDOCTOOLS_MEINPROC_EXECUTABLE} --check ${_bootstrapOption} --cache ${build_doc} ${src_doc}
0129 DEPENDS ${src_docs} ${_ssheet}
0130 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
0131 )
0132
0133 _kdoctools_create_target_name(_targ ${build_doc})
0134 add_custom_target(${_targ} ALL DEPENDS ${build_doc})
0135
0136 if(KDOCTOOLS_ENABLE_HTMLHANDBOOK)
0137 add_custom_command(OUTPUT ${build_html}
0138 COMMAND ${KDOCTOOLS_MEINPROC_EXECUTABLE} --check ${_bootstrapOption} -o ${build_html} ${src_doc}
0139 DEPENDS ${src_doc} ${_ssheet}
0140 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
0141 )
0142
0143 _kdoctools_create_target_name(_targ_html ${build_html})
0144 add_custom_target(${_targ_html} ALL DEPENDS ${build_html})
0145 endif(KDOCTOOLS_ENABLE_HTMLHANDBOOK)
0146
0147 set(installDest "${ARGS_INSTALL_DESTINATION}")
0148 if(installDest)
0149 set(subdir "${ARGS_SUBDIR}")
0150 file(GLOB images ${src_dir}/*.png)
0151 install(FILES ${build_doc} ${src_docs} ${images} DESTINATION ${installDest}/${subdir})
0152 if(KDOCTOOLS_ENABLE_HTMLHANDBOOK)
0153 install(FILES ${build_html} DESTINATION ${installDest}/${subdir})
0154 endif(KDOCTOOLS_ENABLE_HTMLHANDBOOK)
0155 endif()
0156
0157 endfunction()
0158
0159
0160 function (kdoctools_create_manpage docbook section)
0161 # Parse arguments
0162 set(options)
0163 set(oneValueArgs INSTALL_DESTINATION)
0164 set(multiValueArgs)
0165 cmake_parse_arguments(ARGS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
0166
0167 # Init vars
0168 get_filename_component(docbook ${docbook} ABSOLUTE)
0169 file(RELATIVE_PATH src_doc ${CMAKE_CURRENT_SOURCE_DIR} ${docbook})
0170 get_filename_component(src_dir ${src_doc} DIRECTORY)
0171 set(build_dir ${CMAKE_CURRENT_BINARY_DIR}/${src_dir})
0172
0173 get_filename_component(name ${src_doc} NAME)
0174 string(REGEX REPLACE "^man-(.*)\\.${section}\\.docbook$" "\\1" name ${name})
0175 set(build_doc ${build_dir}/${name}.${section})
0176
0177 # Create some place to store our files
0178 file(MAKE_DIRECTORY ${build_dir})
0179
0180 #Bootstrap
0181 if (_kdoctoolsBootStrapping)
0182 set(_bootstrapOption "--srcdir=${KDocTools_BINARY_DIR}/src")
0183 set(_extraDependency "docbookl10nhelper")
0184 elseif (_kdoctoolsTestsRunning)
0185 set(_bootstrapOption "--srcdir=${KDocTools_BINARY_DIR}/src")
0186 set(_extraDependency)
0187 elseif (CMAKE_CROSSCOMPILING AND CMAKE_SYSTEM_NAME STREQUAL "Windows")
0188 set(_bootstrapOption "--srcdir=${KDOCTOOLS_DATA_INSTALL_DIR}/kdoctools")
0189 set(_extraDependency)
0190 else ()
0191 set(_bootstrapOption)
0192 set(_extraDependency)
0193 endif ()
0194 set(_ssheet "${KDOCTOOLS_CUSTOMIZATION_DIR}/kde-include-man.xsl")
0195
0196 add_custom_command(OUTPUT ${build_doc}
0197 COMMAND ${KDOCTOOLS_MEINPROC_EXECUTABLE} --stylesheet ${_ssheet} --check ${_bootstrapOption} ${CMAKE_CURRENT_SOURCE_DIR}/${src_doc}
0198 DEPENDS ${src_doc} ${_ssheet} ${_extraDependency}
0199 WORKING_DIRECTORY ${build_dir}
0200 )
0201
0202 _kdoctools_create_target_name(_targ ${build_doc})
0203 add_custom_target(${_targ} ALL DEPENDS "${build_doc}")
0204
0205 if(ARGS_INSTALL_DESTINATION)
0206 install(FILES ${build_doc} DESTINATION ${ARGS_INSTALL_DESTINATION}/man${section})
0207 endif()
0208 endfunction()
0209
0210
0211 function(kdoctools_install podir)
0212 file(GLOB lang_dirs "${podir}/*")
0213 if (NOT KDE_INSTALL_MANDIR)
0214 if (MAN_INSTALL_DIR) # TODO KF6: deprecated, remove
0215 set(KDE_INSTALL_MANDIR ${MAN_INSTALL_DIR})
0216 else()
0217 set(KDE_INSTALL_MANDIR share/man)
0218 endif()
0219 endif()
0220 if (NOT KDE_INSTALL_DOCBUNDLEDIR)
0221 if (HTML_INSTALL_DIR) # TODO KF6: deprecated, remove
0222 set(KDE_INSTALL_DOCBUNDLEDIR ${HTML_INSTALL_DIR})
0223 else()
0224 set(KDE_INSTALL_DOCBUNDLEDIR share/doc/HTML)
0225 endif()
0226 endif()
0227 foreach(lang_dir ${lang_dirs})
0228 get_filename_component(lang ${lang_dir} NAME)
0229
0230 file(GLOB_RECURSE docbooks RELATIVE "${lang_dir}" "${lang_dir}/docs/*.docbook")
0231 foreach(docbook ${docbooks})
0232 string(REGEX MATCH "\\.([0-9])\\.docbook" match ${docbook})
0233 if (match)
0234 kdoctools_create_manpage("${lang_dir}/${docbook}" ${CMAKE_MATCH_1}
0235 INSTALL_DESTINATION ${KDE_INSTALL_MANDIR}/${lang}
0236 )
0237 else()
0238 string(REGEX MATCH "^docs/(.*)/index.docbook" match ${docbook})
0239 if (match)
0240 kdoctools_create_handbook("${lang_dir}/${docbook}"
0241 INSTALL_DESTINATION ${KDE_INSTALL_DOCBUNDLEDIR}/${lang}
0242 SUBDIR ${CMAKE_MATCH_1}
0243 )
0244 endif()
0245 endif()
0246 endforeach()
0247 endforeach()
0248 endfunction()