<div dir="ltr">Great! Can't wait to get me some man pages installed!<div><br></div><div>-- Sean Silva</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Fri, Apr 18, 2014 at 5:45 PM, Reid Kleckner <span dir="ltr"><<a href="mailto:reid@kleckner.net" target="_blank">reid@kleckner.net</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: rnk<br>
Date: Fri Apr 18 16:45:25 2014<br>
New Revision: 206655<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=206655&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=206655&view=rev</a><br>
Log:<br>
Added Sphinx documentation generation to CMake build system.<br>
<br>
The option LLVM_ENABLE_SPHINX option enables the "docs-llvm-html",<br>
"docs-llvm-man" targets but does not build them by default. The<br>
following CMake options have been added that control what targets are<br>
made available<br>
<br>
SPHINX_OUTPUT_HTML<br>
SPHINX_OUTPUT_MAN<br>
<br>
If LLVM_BUILD_DOCS is enabled then the enabled docs-llvm-* targets will<br>
be built by default and if ``make install`` is run then docs-llvm-html<br>
and docs-llvm-man will be installed (tested on Linux only).<br>
<br>
The add_sphinx_target function is in its own file so it can be included<br>
by other projects that use Sphinx for their documentation.<br>
<br>
Patch by Daniel Liew <<a href="mailto:daniel.liew@imperial.ac.uk">daniel.liew@imperial.ac.uk</a>>!<br>
<br>
Added:<br>
    llvm/trunk/cmake/modules/AddSphinxTarget.cmake<br>
    llvm/trunk/cmake/modules/FindSphinx.cmake<br>
Modified:<br>
    llvm/trunk/CMakeLists.txt<br>
    llvm/trunk/cmake/config-ix.cmake<br>
    llvm/trunk/docs/CMakeLists.txt<br>
<br>
Modified: llvm/trunk/CMakeLists.txt<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/CMakeLists.txt?rev=206655&r1=206654&r2=206655&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/CMakeLists.txt?rev=206655&r1=206654&r2=206655&view=diff</a><br>

==============================================================================<br>
--- llvm/trunk/CMakeLists.txt (original)<br>
+++ llvm/trunk/CMakeLists.txt Fri Apr 18 16:45:25 2014<br>
@@ -287,7 +287,8 @@ option(LLVM_INCLUDE_TESTS "Generate buil<br>
<br>
 option (LLVM_BUILD_DOCS "Build the llvm documentation." OFF)<br>
 option (LLVM_INCLUDE_DOCS "Generate build targets for llvm documentation." ON)<br>
-option (LLVM_ENABLE_DOXYGEN "Use doxygen to generate llvm documentation." OFF)<br>
+option (LLVM_ENABLE_DOXYGEN "Use doxygen to generate llvm API documentation." OFF)<br>
+option (LLVM_ENABLE_SPHINX "Use Sphinx to generate llvm documentation." OFF)<br>
<br>
 option (LLVM_BUILD_EXTERNAL_COMPILER_RT<br>
   "Build compiler-rt as an external project." OFF)<br>
<br>
Modified: llvm/trunk/cmake/config-ix.cmake<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/cmake/config-ix.cmake?rev=206655&r1=206654&r2=206655&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/cmake/config-ix.cmake?rev=206655&r1=206654&r2=206655&view=diff</a><br>

==============================================================================<br>
--- llvm/trunk/cmake/config-ix.cmake (original)<br>
+++ llvm/trunk/cmake/config-ix.cmake Fri Apr 18 16:45:25 2014<br>
@@ -505,3 +505,13 @@ if (LLVM_ENABLE_DOXYGEN)<br>
 else()<br>
   message(STATUS "Doxygen disabled.")<br>
 endif()<br>
+<br>
+if (LLVM_ENABLE_SPHINX)<br>
+  message(STATUS "Sphinx enabled.")<br>
+  find_package(Sphinx REQUIRED)<br>
+  if (LLVM_BUILD_DOCS)<br>
+    add_custom_target(sphinx ALL)<br>
+  endif()<br>
+else()<br>
+  message(STATUS "Sphinx disabled.")<br>
+endif()<br>
<br>
Added: llvm/trunk/cmake/modules/AddSphinxTarget.cmake<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/cmake/modules/AddSphinxTarget.cmake?rev=206655&view=auto" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/cmake/modules/AddSphinxTarget.cmake?rev=206655&view=auto</a><br>

==============================================================================<br>
--- llvm/trunk/cmake/modules/AddSphinxTarget.cmake (added)<br>
+++ llvm/trunk/cmake/modules/AddSphinxTarget.cmake Fri Apr 18 16:45:25 2014<br>
@@ -0,0 +1,54 @@<br>
+# Handy function for creating the different Sphinx targets.<br>
+#<br>
+# ``builder`` should be one of the supported builders used by<br>
+# the sphinx-build command.<br>
+#<br>
+# ``project`` should be the project name<br>
+function (add_sphinx_target builder project)<br>
+  set(SPHINX_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}/${builder}")<br>
+  set(SPHINX_DOC_TREE_DIR "${CMAKE_CURRENT_BINARY_DIR}/_doctrees")<br>
+  set(SPHINX_TARGET_NAME docs-${project}-${builder})<br>
+  add_custom_target(${SPHINX_TARGET_NAME}<br>
+                    COMMAND ${SPHINX_EXECUTABLE}<br>
+                            -b ${builder}<br>
+                            -d "${SPHINX_DOC_TREE_DIR}"<br>
+                            -q # Quiet: no output other than errors and warnings.<br>
+                            -W # Warnings are errors.<br>
+                            "${CMAKE_CURRENT_SOURCE_DIR}" # Source<br>
+                            "${SPHINX_BUILD_DIR}" # Output<br>
+                    COMMENT<br>
+                    "Generating ${builder} Sphinx documentation for ${project}")<br>
+<br>
+  # When "clean" target is run, remove the Sphinx build directory<br>
+  set_property(DIRECTORY APPEND PROPERTY<br>
+               ADDITIONAL_MAKE_CLEAN_FILES<br>
+               "${SPHINX_BUILD_DIR}")<br>
+<br>
+  # We need to remove ${SPHINX_DOC_TREE_DIR} when make clean is run<br>
+  # but we should only add this path once<br>
+  get_property(_CURRENT_MAKE_CLEAN_FILES<br>
+               DIRECTORY PROPERTY ADDITIONAL_MAKE_CLEAN_FILES)<br>
+  list(FIND _CURRENT_MAKE_CLEAN_FILES "${SPHINX_DOC_TREE_DIR}" _INDEX)<br>
+  if (_INDEX EQUAL -1)<br>
+    set_property(DIRECTORY APPEND PROPERTY<br>
+                 ADDITIONAL_MAKE_CLEAN_FILES<br>
+                 "${SPHINX_DOC_TREE_DIR}")<br>
+  endif()<br>
+<br>
+  if (LLVM_BUILD_DOCS)<br>
+    add_dependencies(sphinx ${SPHINX_TARGET_NAME})<br>
+<br>
+    # Handle installation<br>
+    if (builder STREQUAL man)<br>
+      # FIXME: We might not ship all the tools that these man pages describe<br>
+      install(DIRECTORY "${SPHINX_BUILD_DIR}/" # Slash indicates contents of<br>
+              DESTINATION share/man/man1)<br>
+<br>
+    elseif (builder STREQUAL html)<br>
+      install(DIRECTORY "${SPHINX_BUILD_DIR}"<br>
+              DESTINATION "share/doc/${project}")<br>
+    else()<br>
+      message(WARNING Installation of ${builder} not supported)<br>
+    endif()<br>
+  endif()<br>
+endfunction()<br>
<br>
Added: llvm/trunk/cmake/modules/FindSphinx.cmake<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/cmake/modules/FindSphinx.cmake?rev=206655&view=auto" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/cmake/modules/FindSphinx.cmake?rev=206655&view=auto</a><br>

==============================================================================<br>
--- llvm/trunk/cmake/modules/FindSphinx.cmake (added)<br>
+++ llvm/trunk/cmake/modules/FindSphinx.cmake Fri Apr 18 16:45:25 2014<br>
@@ -0,0 +1,25 @@<br>
+# CMake find_package() Module for Sphinx documentation generator<br>
+# <a href="http://sphinx-doc.org/" target="_blank">http://sphinx-doc.org/</a><br>
+#<br>
+# Example usage:<br>
+#<br>
+# find_package(Sphinx)<br>
+#<br>
+# If successful the following variables will be defined<br>
+# SPHINX_FOUND<br>
+# SPHINX_EXECUTABLE<br>
+<br>
+find_program(SPHINX_EXECUTABLE<br>
+             NAMES sphinx-build sphinx-build2<br>
+             DOC "Path to sphinx-build executable")<br>
+<br>
+# Handle REQUIRED and QUIET arguments<br>
+# this will also set SPHINX_FOUND to true if SPHINX_EXECUTABLE exists<br>
+include(FindPackageHandleStandardArgs)<br>
+find_package_handle_standard_args(Sphinx<br>
+                                  "Failed to locate sphinx-build executable"<br>
+                                  SPHINX_EXECUTABLE)<br>
+<br>
+# Provide options for controlling different types of output<br>
+option(SPHINX_OUTPUT_HTML "Output standalone HTML files" ON)<br>
+option(SPHINX_OUTPUT_MAN "Output man pages" ON)<br>
<br>
Modified: llvm/trunk/docs/CMakeLists.txt<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/docs/CMakeLists.txt?rev=206655&r1=206654&r2=206655&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/docs/CMakeLists.txt?rev=206655&r1=206654&r2=206655&view=diff</a><br>

==============================================================================<br>
--- llvm/trunk/docs/CMakeLists.txt (original)<br>
+++ llvm/trunk/docs/CMakeLists.txt Fri Apr 18 16:45:25 2014<br>
@@ -89,3 +89,18 @@ if (LLVM_ENABLE_DOXYGEN)<br>
   endif()<br>
 endif()<br>
 endif()<br>
+<br>
+if (LLVM_ENABLE_SPHINX)<br>
+  if (SPHINX_FOUND)<br>
+    include(AddSphinxTarget)<br>
+    if (${SPHINX_OUTPUT_HTML})<br>
+      add_sphinx_target(html llvm)<br>
+    endif()<br>
+<br>
+<br>
+    if (${SPHINX_OUTPUT_MAN})<br>
+      add_sphinx_target(man llvm)<br>
+    endif()<br>
+<br>
+  endif()<br>
+endif()<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div>