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
  )
  set_target_properties(lldb-cpp-doc PROPERTIES FOLDER "LLDB/Docs")
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"
      COMMAND "${CMAKE_COMMAND}" -E make_directory "${CMAKE_CURRENT_BINARY_DIR}/lldb/plugins"
      COMMAND "${CMAKE_COMMAND}" -E copy "${LLDB_SOURCE_DIR}/examples/python/templates/scripted_process.py" "${CMAKE_CURRENT_BINARY_DIR}/lldb/plugins/"
      COMMAND "${CMAKE_COMMAND}" -E copy "${LLDB_SOURCE_DIR}/examples/python/templates/scripted_platform.py" "${CMAKE_CURRENT_BINARY_DIR}/lldb/plugins/"
      COMMAND "${CMAKE_COMMAND}" -E copy "${LLDB_SOURCE_DIR}/examples/python/templates/operating_system.py" "${CMAKE_CURRENT_BINARY_DIR}/lldb/plugins/"
      COMMAND "${CMAKE_COMMAND}" -E copy "${LLDB_SOURCE_DIR}/examples/python/templates/scripted_thread_plan.py" "${CMAKE_CURRENT_BINARY_DIR}/lldb/plugins/"
      COMMENT "Copying lldb.py to pretend its a Python package.")

    add_dependencies(lldb-python-doc-package swig_wrapper_python lldb-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()
