mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 03:02:36 +01:00
ef98e70100
The build server should now have the missing dependencies. Original summary: Currently LLDB uses epydoc to generate the Python API reference for the website. epydoc however is unmaintained since more than a decade and no longer works with Python 3. Also whatever setup we had once for generating the documentation on the website server no longer seems to work, so the current website documentation has been stale since more than a year. This patch replaces epydoc with sphinx and its automodapi plugin that can generate Python API references. LLVM already uses sphinx for the rest of the documentation, so this way we are more consistent with the rest of LLVM. The only new dependency is the automodapi plugin for sphinx. This patch effectively does the following things: * Remove the epydoc code. * Make a new dummy Python API page in our website that just calls the Sphinx command for generated the API documentation. * Add a mock _lldb module that is only used when generating the Python API. This way we don't have to build all of LLDB to generate the API reference. Some notes: * The long list of skips is necessary due to boilerplate functions that SWIG is generating. Sadly automodapi is not really scriptable from what I can see, so we have to blacklist this stuff manually. * The .gitignore change because automodapi wants a subfolder of our documentation directory to place generated documentation files there. The path is also what is used on the website, so we can't really workaround this (without copying the whole `docs` dir somewhere else when we build). * We have to use environment variables to pass our build path to our sphinx configuration. Sphinx doesn't support passing variables onto that script. Reviewed By: JDevlieghere Differential Revision: https://reviews.llvm.org/D94489
114 lines
4.4 KiB
CMake
114 lines
4.4 KiB
CMake
|
|
# Create sphinx target
|
|
if (LLVM_ENABLE_SPHINX)
|
|
message(STATUS "Sphinx enabled.")
|
|
find_package(Sphinx REQUIRED)
|
|
if (LLVM_BUILD_DOCS AND NOT TARGET sphinx)
|
|
add_custom_target(sphinx ALL)
|
|
endif()
|
|
else()
|
|
message(STATUS "Sphinx disabled.")
|
|
endif()
|
|
|
|
|
|
# Handy function for creating the different Sphinx targets.
|
|
#
|
|
# ``builder`` should be one of the supported builders used by
|
|
# the sphinx-build command.
|
|
#
|
|
# ``project`` should be the project name
|
|
#
|
|
# Named arguments:
|
|
# ``ENV_VARS`` should be a list of environment variables that should be set when
|
|
# running Sphinx. Each environment variable should be a string with
|
|
# the form KEY=VALUE.
|
|
function (add_sphinx_target builder project)
|
|
cmake_parse_arguments(ARG "" "SOURCE_DIR" "ENV_VARS" ${ARGN})
|
|
set(SPHINX_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}/${builder}")
|
|
set(SPHINX_DOC_TREE_DIR "${CMAKE_CURRENT_BINARY_DIR}/_doctrees-${project}-${builder}")
|
|
set(SPHINX_TARGET_NAME docs-${project}-${builder})
|
|
|
|
if (SPHINX_WARNINGS_AS_ERRORS)
|
|
set(SPHINX_WARNINGS_AS_ERRORS_FLAG "-W")
|
|
else()
|
|
set(SPHINX_WARNINGS_AS_ERRORS_FLAG "")
|
|
endif()
|
|
|
|
if (NOT ARG_SOURCE_DIR)
|
|
set(ARG_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
|
|
endif()
|
|
|
|
add_custom_target(${SPHINX_TARGET_NAME}
|
|
COMMAND ${CMAKE_COMMAND} -E env ${ARG_ENV_VARS}
|
|
${SPHINX_EXECUTABLE}
|
|
-b ${builder}
|
|
-d "${SPHINX_DOC_TREE_DIR}"
|
|
-q # Quiet: no output other than errors and warnings.
|
|
-t builder-${builder} # tag for builder
|
|
${SPHINX_WARNINGS_AS_ERRORS_FLAG} # Treat warnings as errors if requested
|
|
"${ARG_SOURCE_DIR}" # Source
|
|
"${SPHINX_BUILD_DIR}" # Output
|
|
COMMENT
|
|
"Generating ${builder} Sphinx documentation for ${project} into \"${SPHINX_BUILD_DIR}\"")
|
|
|
|
# When "clean" target is run, remove the Sphinx build directory
|
|
set_property(DIRECTORY APPEND PROPERTY
|
|
ADDITIONAL_MAKE_CLEAN_FILES
|
|
"${SPHINX_BUILD_DIR}")
|
|
|
|
# We need to remove ${SPHINX_DOC_TREE_DIR} when make clean is run
|
|
# but we should only add this path once
|
|
get_property(_CURRENT_MAKE_CLEAN_FILES
|
|
DIRECTORY PROPERTY ADDITIONAL_MAKE_CLEAN_FILES)
|
|
list(FIND _CURRENT_MAKE_CLEAN_FILES "${SPHINX_DOC_TREE_DIR}" _INDEX)
|
|
if (_INDEX EQUAL -1)
|
|
set_property(DIRECTORY APPEND PROPERTY
|
|
ADDITIONAL_MAKE_CLEAN_FILES
|
|
"${SPHINX_DOC_TREE_DIR}")
|
|
endif()
|
|
|
|
if (LLVM_BUILD_DOCS)
|
|
add_dependencies(sphinx ${SPHINX_TARGET_NAME})
|
|
|
|
# Handle installation
|
|
if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY)
|
|
if (builder STREQUAL man)
|
|
if (CMAKE_INSTALL_MANDIR)
|
|
set(INSTALL_MANDIR ${CMAKE_INSTALL_MANDIR}/)
|
|
else()
|
|
set(INSTALL_MANDIR share/man/)
|
|
endif()
|
|
# FIXME: We might not ship all the tools that these man pages describe
|
|
install(DIRECTORY "${SPHINX_BUILD_DIR}/" # Slash indicates contents of
|
|
COMPONENT "${project}-sphinx-man"
|
|
DESTINATION ${INSTALL_MANDIR}man1)
|
|
|
|
if(NOT LLVM_ENABLE_IDE)
|
|
add_llvm_install_targets("install-${SPHINX_TARGET_NAME}"
|
|
DEPENDS ${SPHINX_TARGET_NAME}
|
|
COMPONENT "${project}-sphinx-man")
|
|
endif()
|
|
elseif (builder STREQUAL html)
|
|
string(TOUPPER "${project}" project_upper)
|
|
set(${project_upper}_INSTALL_SPHINX_HTML_DIR "share/doc/${project}/html"
|
|
CACHE STRING "HTML documentation install directory for ${project}")
|
|
|
|
# '/.' indicates: copy the contents of the directory directly into
|
|
# the specified destination, without recreating the last component
|
|
# of ${SPHINX_BUILD_DIR} implicitly.
|
|
install(DIRECTORY "${SPHINX_BUILD_DIR}/."
|
|
COMPONENT "${project}-sphinx-html"
|
|
DESTINATION "${${project_upper}_INSTALL_SPHINX_HTML_DIR}")
|
|
|
|
if(NOT LLVM_ENABLE_IDE)
|
|
add_llvm_install_targets("install-${SPHINX_TARGET_NAME}"
|
|
DEPENDS ${SPHINX_TARGET_NAME}
|
|
COMPONENT "${project}-sphinx-html")
|
|
endif()
|
|
else()
|
|
message(WARNING Installation of ${builder} not supported)
|
|
endif()
|
|
endif()
|
|
endif()
|
|
endfunction()
|