# This CMake file will add doc target for convenient documentation generation.
#
# Additional features are supported:
#   * dot = for automatically generated UML diagrams (class, include, caller, call, collaboration)
#   * PlantUML = for easy generation of custom diagrams

# Helper functions
macro(path_linux_to_win MsysPath ResultingPath)
  string(REGEX REPLACE "^/([a-zA-Z])/" "\\1:/" ${ResultingPath} "${MsysPath}")
endmacro()
macro(path_win_to_linux MsysPath ResultingPath)
  string(REGEX REPLACE "^([a-zA-Z]):/" "/\\1/" ${ResultingPath} "${MsysPath}")
endmacro()

# enable if doxygen found
find_package(Doxygen 1.8.0)
message(STATUS "Can build doc?                            ${DOXYGEN_FOUND}")
if(DOXYGEN_FOUND)
    # Search for plantUML for creating UML diagrams from doxygen
    find_program(PLANT_UML_PATH plantuml.jar PATH_SUFFIXES PlantUML plantuml Plantuml 
        PATHS /usr/share /usr/local/share/ /usr/local/bin c/Program\ Files* )
    if(NOT PLANT_UML_PATH)
        message(WARNING "Looking for PlantUML - not found, some UML diagrams will not be generated via doxygen.")
    else()
        message(STATUS "  + PlantUML - for custom UML             YES ")
    endif()

    #Search for DOT for autogenerated UML diagrams from doxygen
    find_program(DOT_PATH dot PATH_SUFFIXES graphviz2.38/bin graphviz/bin)
    if(NOT DOT_PATH)
        message(WARNING "Looking for DOT (Graphviz) - not found, some UML diagrams will not be generated via doxygen.")
    else()
        message(STATUS "  + Graphviz/Dot - for generated graphs   YES ")
    endif()

    path_win_to_linux(${CMAKE_CURRENT_SOURCE_DIR} CMAKE_CURRENT_SOURCE_DIR_LINUX)
    path_win_to_linux(${PROJECT_SOURCE_DIR} PROJECT_SOURCE_DIR_LINUX)
    path_win_to_linux(${DOT_PATH} DOT_PATH_LINUX)
    path_win_to_linux(${PLANT_UML_PATH} PLANT_UML_PATH_LINUX)
    path_win_to_linux(${CMAKE_CURRENT_BINARY_DIR} CMAKE_CURRENT_BINARY_DIR_LINUX)

    # configure doxygen configuration file
    set(doxyfile_in ${CMAKE_CURRENT_SOURCE_DIR}/doxygen/Doxyfile.in)
    set(doxyfile ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile)
    configure_file(${doxyfile_in} ${doxyfile} @ONLY)

    # doc build only target, target is not in default build, so it must be
    # triggered explicitly
    add_custom_target(doc
        COMMAND ${DOXYGEN_EXECUTABLE} ${doxyfile}
        WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
        COMMENT "Generating API documentation with Doxygen"
        VERBATIM)

    # Where docs will be installed.
    # Note: if docs shall be not a part of final release, leave this commented out
    # docs will be only available in [build_dir]/doc/doc/index.html
    # install(
    #     DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/doc/
    #     DESTINATION share/doc/${PROJECT_NAME}
    #     OPTIONAL)
endif()




