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()

# Generate html by default.
if(NOT DOC_OUTPUT_FORMAT)
    set(DOC_OUTPUT_FORMAT "html")
endif()

if(SPHINX)
    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
        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")

            file(TO_NATIVE_PATH ${CMAKE_CURRENT_BINARY_DIR}/html/Shiboken.qhp QHP_FILE)
            add_custom_command(TARGET doc POST_BUILD
                COMMAND ${PYTHON_EXECUTABLE} py_script.py # ${CMAKE_CURRENT_BINARY_DIR}/html/Shiboken.qhp
                COMMAND "${qhelpgenerator_binary}" ${QHP_FILE}
                COMMENT "Generating shiboken documentation QCH files based on the QHP files"
                VERBATIM)
        else()
            message(WARNING "qhelpgenerator - not found! qch generation disabled")
        endif()
    endif()
else()
    if(NOT SPHINX)
        message(WARNING "sphinx-build - not found! doc target disabled")
    endif()
    if (WIN32)
        # if jom is used and we have no sphinx, then jom will crash.
        # so for windows, we always create a doc target (until jom gets fixed...)
        add_custom_target(doc echo.
            COMMAND echo +++ This is a fake build, to make 'jom' happy.
            COMMAND echo +++ The documentation was _not_ built!
            COMMAND echo.
        )
    endif()
endif()

if (NOT WIN32)
    file(GLOB manpages "${CMAKE_CURRENT_SOURCE_DIR}/*.1")
    install(FILES ${manpages} DESTINATION share/man/man1)
endif()
