#
# This file is distributed under the MIT License. See LICENSE.md for details.
#

#
# General docs
#
set(MAN_PAGES)
set(DOC_HTML FromIRToExecutable.rst GeneratedIRReference.rst Overview.rst
             PythonExample.rst)
set(DOC_COPY instrument.py)

set(DOC_DEPS)

find_program(RST2MAN rst2man.py)
if(NOT "${RST2MAN}" STREQUAL RST2MAN-NOTFOUND)
  foreach(INPUT_FILE ${MAN_PAGES})
    string(REPLACE ".rst" ".1" OUTPUT_FILE "${INPUT_FILE}")
    add_custom_command(
      OUTPUT "${OUTPUT_FILE}"
      COMMAND "${RST2MAN}" "${CMAKE_CURRENT_SOURCE_DIR}/${INPUT_FILE}" >
              "${OUTPUT_FILE}"
      MAIN_DEPENDENCY "${INPUT_FILE}")
    set(DOC_DEPS ${DOC_DEPS} ${OUTPUT_FILE})
    install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_FILE}
            DESTINATION ${CMAKE_INSTALL_PREFIX}/share/man/man1)
  endforeach()
endif()

find_program(RST2HTML rst2html.py)
if(NOT "${RST2HTML}" STREQUAL RST2HTML-NOTFOUND)
  foreach(INPUT_FILE ${DOC_HTML})
    string(REPLACE ".rst" ".html" OUTPUT_FILE "${INPUT_FILE}")
    add_custom_command(
      OUTPUT "${OUTPUT_FILE}"
      COMMAND "${RST2HTML}" "${CMAKE_CURRENT_SOURCE_DIR}/${INPUT_FILE}" >
              "${OUTPUT_FILE}"
      MAIN_DEPENDENCY "${INPUT_FILE}")
    set(DOC_DEPS ${DOC_DEPS} ${OUTPUT_FILE})
    install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_FILE}
            DESTINATION ${CMAKE_INSTALL_PREFIX}/share/doc/revng/)
  endforeach()
endif()

foreach(INPUT_FILE ${DOC_COPY})
  configure_file("${CMAKE_CURRENT_SOURCE_DIR}/${INPUT_FILE}" "${INPUT_FILE}"
                 COPYONLY)
  install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${INPUT_FILE}
          DESTINATION ${CMAKE_INSTALL_PREFIX}/share/doc/revng/)
endforeach()

add_custom_target(docs ALL DEPENDS ${DOC_DEPS})

#
# Doxygen
#
find_package(Doxygen)
if(DOXYGEN_FOUND)
  execute_process(
    COMMAND git ls-files
    WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
    RESULT_VARIABLE GIT_LS_EXIT_CODE
    OUTPUT_VARIABLE GIT_LS_OUTPUT
    ERROR_VARIABLE GIT_LS_OUTPUT_STDERR)

  if(GIT_LS_EXIT_CODE EQUAL "0")
    string(REGEX REPLACE "\n" ";" GIT_LS_OUTPUT "${GIT_LS_OUTPUT}")
    set(DOXYGEN_INPUTS "")
    foreach(FILE ${GIT_LS_OUTPUT})
      set(DOXYGEN_INPUTS "${DOXYGEN_INPUTS} ${CMAKE_SOURCE_DIR}/${FILE}")
    endforeach(FILE)
    configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in
                   ${CMAKE_BINARY_DIR}/Doxyfile @ONLY)
    add_custom_target(
      doc
      ${DOXYGEN_EXECUTABLE} ${CMAKE_BINARY_DIR}/Doxyfile
      WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
      COMMENT "Generating API documentation with Doxygen"
      VERBATIM)
  else()
    message(
      WARNING
        "Source directory is not a git repository, disabling Doxygen. Error was: ${GIT_LS_OUTPUT_STDERR}"
    )
  endif()

endif(DOXYGEN_FOUND)
