[llvm] r206655 - Added Sphinx documentation generation to CMake build system.

Sean Silva chisophugis at gmail.com
Fri Apr 18 17:46:24 PDT 2014


Great! Can't wait to get me some man pages installed!

-- Sean Silva


On Fri, Apr 18, 2014 at 5:45 PM, Reid Kleckner <reid at kleckner.net> wrote:

> Author: rnk
> Date: Fri Apr 18 16:45:25 2014
> New Revision: 206655
>
> URL: http://llvm.org/viewvc/llvm-project?rev=206655&view=rev
> Log:
> Added Sphinx documentation generation to CMake build system.
>
> The option LLVM_ENABLE_SPHINX option enables the "docs-llvm-html",
> "docs-llvm-man" targets but does not build them by default. The
> following CMake options have been added that control what targets are
> made available
>
> SPHINX_OUTPUT_HTML
> SPHINX_OUTPUT_MAN
>
> If LLVM_BUILD_DOCS is enabled then the enabled docs-llvm-* targets will
> be built by default and if ``make install`` is run then docs-llvm-html
> and docs-llvm-man will be installed (tested on Linux only).
>
> The add_sphinx_target function is in its own file so it can be included
> by other projects that use Sphinx for their documentation.
>
> Patch by Daniel Liew <daniel.liew at imperial.ac.uk>!
>
> Added:
>     llvm/trunk/cmake/modules/AddSphinxTarget.cmake
>     llvm/trunk/cmake/modules/FindSphinx.cmake
> Modified:
>     llvm/trunk/CMakeLists.txt
>     llvm/trunk/cmake/config-ix.cmake
>     llvm/trunk/docs/CMakeLists.txt
>
> Modified: llvm/trunk/CMakeLists.txt
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/CMakeLists.txt?rev=206655&r1=206654&r2=206655&view=diff
>
> ==============================================================================
> --- llvm/trunk/CMakeLists.txt (original)
> +++ llvm/trunk/CMakeLists.txt Fri Apr 18 16:45:25 2014
> @@ -287,7 +287,8 @@ option(LLVM_INCLUDE_TESTS "Generate buil
>
>  option (LLVM_BUILD_DOCS "Build the llvm documentation." OFF)
>  option (LLVM_INCLUDE_DOCS "Generate build targets for llvm
> documentation." ON)
> -option (LLVM_ENABLE_DOXYGEN "Use doxygen to generate llvm documentation."
> OFF)
> +option (LLVM_ENABLE_DOXYGEN "Use doxygen to generate llvm API
> documentation." OFF)
> +option (LLVM_ENABLE_SPHINX "Use Sphinx to generate llvm documentation."
> OFF)
>
>  option (LLVM_BUILD_EXTERNAL_COMPILER_RT
>    "Build compiler-rt as an external project." OFF)
>
> Modified: llvm/trunk/cmake/config-ix.cmake
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/cmake/config-ix.cmake?rev=206655&r1=206654&r2=206655&view=diff
>
> ==============================================================================
> --- llvm/trunk/cmake/config-ix.cmake (original)
> +++ llvm/trunk/cmake/config-ix.cmake Fri Apr 18 16:45:25 2014
> @@ -505,3 +505,13 @@ if (LLVM_ENABLE_DOXYGEN)
>  else()
>    message(STATUS "Doxygen disabled.")
>  endif()
> +
> +if (LLVM_ENABLE_SPHINX)
> +  message(STATUS "Sphinx enabled.")
> +  find_package(Sphinx REQUIRED)
> +  if (LLVM_BUILD_DOCS)
> +    add_custom_target(sphinx ALL)
> +  endif()
> +else()
> +  message(STATUS "Sphinx disabled.")
> +endif()
>
> Added: llvm/trunk/cmake/modules/AddSphinxTarget.cmake
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/cmake/modules/AddSphinxTarget.cmake?rev=206655&view=auto
>
> ==============================================================================
> --- llvm/trunk/cmake/modules/AddSphinxTarget.cmake (added)
> +++ llvm/trunk/cmake/modules/AddSphinxTarget.cmake Fri Apr 18 16:45:25 2014
> @@ -0,0 +1,54 @@
> +# 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
> +function (add_sphinx_target builder project)
> +  set(SPHINX_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}/${builder}")
> +  set(SPHINX_DOC_TREE_DIR "${CMAKE_CURRENT_BINARY_DIR}/_doctrees")
> +  set(SPHINX_TARGET_NAME docs-${project}-${builder})
> +  add_custom_target(${SPHINX_TARGET_NAME}
> +                    COMMAND ${SPHINX_EXECUTABLE}
> +                            -b ${builder}
> +                            -d "${SPHINX_DOC_TREE_DIR}"
> +                            -q # Quiet: no output other than errors and
> warnings.
> +                            -W # Warnings are errors.
> +                            "${CMAKE_CURRENT_SOURCE_DIR}" # Source
> +                            "${SPHINX_BUILD_DIR}" # Output
> +                    COMMENT
> +                    "Generating ${builder} Sphinx documentation for
> ${project}")
> +
> +  # 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 (builder STREQUAL man)
> +      # FIXME: We might not ship all the tools that these man pages
> describe
> +      install(DIRECTORY "${SPHINX_BUILD_DIR}/" # Slash indicates contents
> of
> +              DESTINATION share/man/man1)
> +
> +    elseif (builder STREQUAL html)
> +      install(DIRECTORY "${SPHINX_BUILD_DIR}"
> +              DESTINATION "share/doc/${project}")
> +    else()
> +      message(WARNING Installation of ${builder} not supported)
> +    endif()
> +  endif()
> +endfunction()
>
> Added: llvm/trunk/cmake/modules/FindSphinx.cmake
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/cmake/modules/FindSphinx.cmake?rev=206655&view=auto
>
> ==============================================================================
> --- llvm/trunk/cmake/modules/FindSphinx.cmake (added)
> +++ llvm/trunk/cmake/modules/FindSphinx.cmake Fri Apr 18 16:45:25 2014
> @@ -0,0 +1,25 @@
> +# CMake find_package() Module for Sphinx documentation generator
> +# http://sphinx-doc.org/
> +#
> +# Example usage:
> +#
> +# find_package(Sphinx)
> +#
> +# If successful the following variables will be defined
> +# SPHINX_FOUND
> +# SPHINX_EXECUTABLE
> +
> +find_program(SPHINX_EXECUTABLE
> +             NAMES sphinx-build sphinx-build2
> +             DOC "Path to sphinx-build executable")
> +
> +# Handle REQUIRED and QUIET arguments
> +# this will also set SPHINX_FOUND to true if SPHINX_EXECUTABLE exists
> +include(FindPackageHandleStandardArgs)
> +find_package_handle_standard_args(Sphinx
> +                                  "Failed to locate sphinx-build
> executable"
> +                                  SPHINX_EXECUTABLE)
> +
> +# Provide options for controlling different types of output
> +option(SPHINX_OUTPUT_HTML "Output standalone HTML files" ON)
> +option(SPHINX_OUTPUT_MAN "Output man pages" ON)
>
> Modified: llvm/trunk/docs/CMakeLists.txt
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/docs/CMakeLists.txt?rev=206655&r1=206654&r2=206655&view=diff
>
> ==============================================================================
> --- llvm/trunk/docs/CMakeLists.txt (original)
> +++ llvm/trunk/docs/CMakeLists.txt Fri Apr 18 16:45:25 2014
> @@ -89,3 +89,18 @@ if (LLVM_ENABLE_DOXYGEN)
>    endif()
>  endif()
>  endif()
> +
> +if (LLVM_ENABLE_SPHINX)
> +  if (SPHINX_FOUND)
> +    include(AddSphinxTarget)
> +    if (${SPHINX_OUTPUT_HTML})
> +      add_sphinx_target(html llvm)
> +    endif()
> +
> +
> +    if (${SPHINX_OUTPUT_MAN})
> +      add_sphinx_target(man llvm)
> +    endif()
> +
> +  endif()
> +endif()
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20140418/b5758859/attachment.html>


More information about the llvm-commits mailing list