IF(BUILD_DOCUMENTATION)
  FIND_PACKAGE(Doxygen REQUIRED)
ENDIF()

IF(DOXYGEN_FOUND)
  IF(DOXYGEN_DOT_FOUND)
    # Set up help file format
    OPTION(PLUS_DOCUMENTATION_SEARCH_SERVER_INDEXED "Search index for documentation is generated by the web server. Provides full-text search but only works on web servers." OFF)

    OPTION(DOCUMENTATION_GENERATE_XML "Generate intermediate XML documentation" OFF)
    SET(GENERATE_XML "NO")
    IF(DOCUMENTATION_GENERATE_XML)
      SET(GENERATE_XML "YES")
    ENDIF()

    SET(GENERATE_HTMLHELP "NO")
    SET(SEARCHENGINE "YES")
    SET(COMPRESSED_HELP_TARGET_FILE_EXT ".tar.gz")
    IF(PLUS_DOCUMENTATION_SEARCH_SERVER_INDEXED)
      SET(SERVER_BASED_SEARCH "YES")
    ELSE()
      SET(SERVER_BASED_SEARCH "NO")
    ENDIF()

    IF(WIN32)
      SET(COMPRESSED_HELP_TARGET_FILE_EXT ".chm")
      IF(PLUS_DOCUMENTATION_SEARCH_SERVER_INDEXED)
        # search indexing is turned off if HTMLHELP generation is enabled, so we have to disable it
        SET(GENERATE_HTMLHELP "NO")
        SET(SEARCHENGINE "YES")
      ELSE()
        SET(GENERATE_HTMLHELP "YES")
        SET(SEARCHENGINE "NO")
      ENDIF()
    ENDIF()

    # Documentation for developers, including private members
    SET(PlusLib_USER_DOCUMENTATION "NO")
    SET(PlusLib_DEV_DOCUMENTATION "YES")
    SET(PlusLib_ADDITIONAL_EXCLUDE_PATTERN "")
    SET(PlusLib_ADDITIONAL_FILE_PATTERN "*.c \  *.cc \  *.cxx \  *.cpp \  *.c++ \  *.hxx \  *.hpp \  *.h++ \  *.txx \  *.C \  *.CC \  *.C++ \  *.moc")

    # Parameters for GenerateDoc.cmake
    SET(TARGET_NAME "ApiReference")
    SET(UNCOMPRESSED_HELP_TARGET_DIR ${CMAKE_CURRENT_BINARY_DIR}/${TARGET_NAME})
    SET(DOXYGEN_CONFIG_FILE ${UNCOMPRESSED_HELP_TARGET_DIR}/Doxyfile.txt)
    SET(CREATE_COMPRESSED_HELP "YES")
    SET(COMPRESSED_HELP_TARGET_DIR "${PLUS_EXECUTABLE_OUTPUT_PATH}/Doc")
    SET(COMPRESSED_HELP_TARGET_FILE "PlusLib-${TARGET_NAME}${COMPRESSED_HELP_TARGET_FILE_EXT}")
    # Other parameters
    SET(DOC_OUTPUT_FILE "${COMPRESSED_HELP_TARGET_DIR}/${COMPRESSED_HELP_TARGET_FILE}")
    SET(DOC_GENERATION_CMAKE_FILE ${UNCOMPRESSED_HELP_TARGET_DIR}/GenerateDoc.cmake)
    # Generate doxygen configuration and generator file
    CONFIGURE_FILE( Doxyfile.txt.in
      ${DOXYGEN_CONFIG_FILE}
      )
    CONFIGURE_FILE(
      ${CMAKE_CURRENT_SOURCE_DIR}/GenerateDoc.cmake.in
      ${DOC_GENERATION_CMAKE_FILE}
      @ONLY
      )
    # Run doxygen as a custom command driven by a custom target.
    ADD_CUSTOM_COMMAND(
      OUTPUT ${DOC_OUTPUT_FILE}
      COMMAND ${CMAKE_COMMAND} -P "${DOC_GENERATION_CMAKE_FILE}"
      DEPENDS "${DOC_GENERATION_CMAKE_FILE}"
              "${DOXYGEN_CONFIG_FILE}"
      )
  ELSE()
    MESSAGE( WARNING "DOCUMENTATION: GRAPHVIZ DOT TOOL NOT FOUND (http://www.graphviz.org/Download.php, required by Doxygen for diagram generation)- Documentation will not be created")
  ENDIF()
ELSE()
  SET(DOC_OUTPUT_FILE "")
  SET(TARGET_NAME "Editing")
ENDIF()

GET_FILENAME_COMPONENT(PLUSLIB_DOCUMENTATION_DIR ${CMAKE_CURRENT_SOURCE_DIR} DIRECTORY)
# Build the list of dox files for convenient editing
FILE(GLOB PlusDocumentation_DOXS ${PLUSLIB_DOCUMENTATION_DIR}/UserManual/*.dox)
ADD_CUSTOM_TARGET(Documentation-PlusLib-${TARGET_NAME} DEPENDS ${DOC_OUTPUT_FILE} SOURCES ${PlusDocumentation_DOXS})
SET_TARGET_PROPERTIES(Documentation-PlusLib-${TARGET_NAME} PROPERTIES FOLDER Documentation)

IF(BUILD_DOCUMENTATION)
  SET_TARGET_PROPERTIES(Documentation-PlusLib-${TARGET_NAME} PROPERTIES LABELS Documentation)
ENDIF()