include(FindDoxygen)

if(DOXYGEN_FOUND)
  set(abs_top_srcdir ${CMAKE_CURRENT_SOURCE_DIR}/..)
  set(DOT dot)
  set(PACKAGE_VERSION mainline)
  set(abs_top_builddir ..)
  configure_file(${CMAKE_CURRENT_SOURCE_DIR}/doxygen.cfg.in
  ${CMAKE_CURRENT_BINARY_DIR}/doxygen.cfg @ONLY)

  add_custom_target(lldb-cpp-doc
    ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/doxygen.cfg
    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
    COMMENT "Generating LLDB C++ API reference with Doxygen" VERBATIM
  )
endif()

if (LLVM_ENABLE_SPHINX)
  include(AddSphinxTarget)
endif()

if (LLDB_ENABLE_PYTHON AND SPHINX_FOUND)
  if (${SPHINX_OUTPUT_HTML})
    # Pretend that the SWIG generated API is a Python package.
    file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/lldb)
    get_target_property(lldb_bindings_dir swig_wrapper_python BINARY_DIR)
    add_custom_target(lldb-python-doc-package
      COMMAND "${CMAKE_COMMAND}" -E copy "${lldb_bindings_dir}/lldb.py" "${CMAKE_CURRENT_BINARY_DIR}/lldb/__init__.py"
      COMMENT "Copying lldb.py to pretend its a Python package.")
    add_dependencies(lldb-python-doc-package swig_wrapper_python)

    # FIXME: Don't treat Sphinx warnings as errors. The files generated by
    # automodapi are full of warnings (partly caused by SWIG, our documentation
    # and probably also automodapi itself), so those warnings need to be fixed
    # first before we can turn this on.
    set(SPHINX_WARNINGS_AS_ERRORS Off)

    # The sphinx config needs to know where the generated LLDB Python module is.
    # There is no way to pass a variable into our sphinx config, so just pass
    # the path to the module via the LLDB_SWIG_MODULE environment variable.
    add_sphinx_target(html lldb ENV_VARS "LLDB_SWIG_MODULE=${CMAKE_CURRENT_BINARY_DIR}")
    # Sphinx does not reliably update the custom CSS files, so force
    # a clean rebuild of the documentation every time.
    add_custom_target(clean-lldb-html COMMAND "${CMAKE_COMMAND}" -E
      remove_directory ${CMAKE_CURRENT_BINARY_DIR}/html)
    add_dependencies(docs-lldb-html swig_wrapper_python
                     lldb-python-doc-package clean-lldb-html)
  endif()

  if (${SPHINX_OUTPUT_MAN})
    add_sphinx_target(man lldb)
  endif()
endif()
