diff --git a/cmake/modules/InstallationHelper.cmake b/cmake/modules/InstallationHelper.cmake --- a/cmake/modules/InstallationHelper.cmake +++ b/cmake/modules/InstallationHelper.cmake @@ -174,4 +174,23 @@ ) _add_install_target(manpages) + + if(NOT TARGET install-manpages-html) + set(INPUT_DIR "${CMAKE_INSTALL_PREFIX}/${MAN_DESTINATION}") + set(OUTPUT_DIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_MANDIR}/html") + configure_file( + "${CMAKE_SOURCE_DIR}/cmake/templates/man2html.sh.in" + "${CMAKE_BINARY_DIR}/man2html.sh" + @ONLY + ) + + add_custom_target(install-manpages-html + COMMENT "Generating man pages for web rendering" + COMMAND + "${CMAKE_BINARY_DIR}/man2html.sh" + DEPENDS + install-manpages + "${CMAKE_BINARY_DIR}/man2html.sh" + ) + endif() endfunction() diff --git a/cmake/templates/man2html.sh.in b/cmake/templates/man2html.sh.in new file mode 100755 --- /dev/null +++ b/cmake/templates/man2html.sh.in @@ -0,0 +1,34 @@ +#!/bin/sh + +export LC_ALL=C.UTF-8 + +if ! command -v pandoc > /dev/null +then + echo "pandoc is required for converting the man pages, please install it" + exit 1 +fi + +if ! pandoc --list-input-formats | grep -x man > /dev/null +then + echo "pandoc >= 2.4 is required for converting the man pages, please upgrade" + exit 2 +fi + +mkdir -p "@OUTPUT_DIR@" + +MAN_FILES="$(find "@INPUT_DIR@" -name '*.1' -type f)" + +for MAN_FILE in ${MAN_FILES} +do + BINARY_NAME="$(basename "${MAN_FILE}" | cut -d'.' -f1)" + HTML_FILE="@OUTPUT_DIR@/${BINARY_NAME}.html" + + echo "---" > "${HTML_FILE}" + echo "category: man" >> "${HTML_FILE}" + echo "group: @PACKAGE_NAME@ " >> "${HTML_FILE}" + echo "name: ${BINARY_NAME}" >> "${HTML_FILE}" + echo "version: @PROJECT_VERSION@" >> "${HTML_FILE}" + echo "---" >> "${HTML_FILE}" + + pandoc --from=man --to=html "${MAN_FILE}" >> "${HTML_FILE}" +done