t-tye created this revision. t-tye added a reviewer: scott.linder. Herald added subscribers: libcxx-commits, mgorny. Herald added a reviewer: bollu. Herald added a reviewer: MaskRay. Herald added a reviewer: sscalpone. Herald added a project: libunwind. Herald added a reviewer: libunwind. t-tye requested review of this revision. Herald added a reviewer: jdoerfert. Herald added subscribers: cfe-commits, llvm-commits, openmp-commits, lldb-commits, sstefan1. Herald added projects: clang, LLDB, libc++, OpenMP, LLVM, clang-tools-extra. Herald added a reviewer: libc++.
Add support for Sphinx docx builder. Requires Sphinx docx builder to be installed using `pip install docxbuilder`. Added `SPHINX_OUTPUT_DOCX` CMake variable to control generation of docx documentation. Defaults to `OFF`. Added `<project>_INSTALL_SPHINX_DOCX_DIR` CMake variable to control where docx files are installed. Defaults to `share/doc/<project>/<project>.docx`. Documented new CMake variables in `llvm/docs/CMake.rst`. Updated description of building documentation is `lld/docs/sphinx_intro.rst`, `lldb/docs/resources/build.rst`, `llvm/docs/README.txt`, and `openmp/docs/README.txt`, Update `clang/docs/CMakeLists.txt` for Sphinx man and docx builders to ensure .td generated .rst files are available to prevent warnings of missing rst files. Minor CMake cleanups. Added `docx` as an additional target for the documentation make.bat scripts. Added `docx` as an additional target rule in the Makefile.sphinx files. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D106339 Files: clang-tools-extra/docs/CMakeLists.txt clang-tools-extra/docs/conf.py clang-tools-extra/docs/make.bat clang/docs/CMakeLists.txt clang/docs/Makefile.sphinx clang/docs/analyzer/conf.py clang/docs/analyzer/make.bat clang/docs/conf.py clang/docs/make.bat flang/docs/CMakeLists.txt flang/docs/conf.py libcxx/docs/CMakeLists.txt libcxx/docs/Makefile.sphinx libcxx/docs/conf.py libunwind/docs/CMakeLists.txt libunwind/docs/conf.py lld/docs/CMakeLists.txt lld/docs/conf.py lld/docs/make.bat lld/docs/sphinx_intro.rst lldb/docs/CMakeLists.txt lldb/docs/conf.py lldb/docs/resources/build.rst llvm/cmake/modules/AddSphinxTarget.cmake llvm/cmake/modules/FindSphinx.cmake llvm/docs/CMake.rst llvm/docs/CMakeLists.txt llvm/docs/Makefile.sphinx llvm/docs/README.txt llvm/docs/conf.py llvm/docs/make.bat openmp/docs/CMakeLists.txt openmp/docs/README.txt openmp/docs/conf.py polly/docs/CMakeLists.txt polly/docs/conf.py
Index: polly/docs/conf.py =================================================================== --- polly/docs/conf.py +++ polly/docs/conf.py @@ -28,6 +28,9 @@ # coming with Sphinx (named 'sphinx.ext.*') or your custom ones. extensions = ['sphinx.ext.todo', 'sphinx.ext.mathjax'] +if tags.has('builder-docx'): + extensions.append('docxbuilder') + # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] Index: polly/docs/CMakeLists.txt =================================================================== --- polly/docs/CMakeLists.txt +++ polly/docs/CMakeLists.txt @@ -98,6 +98,9 @@ if (${SPHINX_OUTPUT_MAN}) add_sphinx_target(man polly) endif() + if (${SPHINX_OUTPUT_DOCX}) + add_sphinx_target(docx polly) + endif() endif() endif() Index: openmp/docs/conf.py =================================================================== --- openmp/docs/conf.py +++ openmp/docs/conf.py @@ -28,6 +28,9 @@ # coming with Sphinx (named 'sphinx.ext.*') or your custom ones. extensions = ['sphinx.ext.todo', 'sphinx.ext.mathjax', 'sphinx.ext.intersphinx'] +if tags.has('builder-docx'): + extensions.append('docxbuilder') + # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] Index: openmp/docs/README.txt =================================================================== --- openmp/docs/README.txt +++ openmp/docs/README.txt @@ -1,5 +1,5 @@ OpenMP LLVM Documentation -================== +========================= OpenMP LLVM's documentation is written in reStructuredText, a lightweight plaintext markup language (file extension `.rst`). While the @@ -14,11 +14,15 @@ cd <build-dir> cmake -DLLVM_ENABLE_SPHINX=true -DSPHINX_OUTPUT_HTML=true <src-dir> make - $BROWSER <build-dir>/projects/openmp/docs//html/index.html + $BROWSER <build-dir>/projects/openmp/docs/html/index.html -The mapping between reStructuredText files and generated documentation is -`docs/Foo.rst` <-> `<build-dir>/projects/openmp/docs//html/Foo.html` <-> -`https://openmp.llvm.org/docs/Foo.html`. +The correspondence between reStructuredText files and generated HTML pages is: + +LLVM project + `llvm/docs/Foo.rst` <-> `<build-dir>/docs/html/Foo.html` <-> `<install-dir>/share/doc/llvm/html/Foo.html` <-> `https://llvm.org/docs/Foo.html` + +Other projects + `<project>/docs/Foo.rst` <-> `<build-dir>/tools/<project>/docs/html/Foo.html` <-> `<install-dir>/share/doc/<project>/html/Foo.html`<-> `https://<project>.llvm.org/docs/Foo.html` If you are interested in writing new documentation, you will want to read `llvm/docs/SphinxQuickstartTemplate.rst` which will get you writing @@ -26,7 +30,7 @@ reStructuredText markup syntax. Manpage Output -=============== +============== Building the manpages is similar to building the HTML documentation. The primary difference is to use the `man` makefile target, instead of the @@ -36,10 +40,41 @@ cd <build-dir> cmake -DLLVM_ENABLE_SPHINX=true -DSPHINX_OUTPUT_MAN=true <src-dir> make - man -l >build-dir>/docs/man/FileCheck.1 + man -l <build-dir>/docs/man/FileCheck.1 + +The correspondence between reStructuredText files and generated man pages is: + +LLVM project + `llvm/docs/CommandGuide/Foo.rst` <-> `<build-dir>/docs/man/Foo.1` <-> `<install-dir>/share/man/man1/Foo.1` + +Other projects + `<project>/docs/CommandGuide/Foo.rst` <-> `<build-dir>/tools/<project>/docs/man/Foo.1` <-> `<install-dir>/share/man/man1/Foo.1` -The correspondence between .rst files and man pages is -`docs/CommandGuide/Foo.rst` <-> `<build-dir>/projects/openmp/docs//man/Foo.1`. These .rst files are also included during HTML generation so they are also -viewable online (as noted above) at e.g. -`https://openmp.llvm.org/docs/CommandGuide/Foo.html`. +viewable online: + +LLVM project + `https://openmp.llvm.org/docs/CommandGuide/Foo.html` + +Other projects + `https://<project>.llvm.org/docs/CommandGuide/Foo.html` + +DOCX Output +=========== + +Building the DOCX files is similar to building the HTML documentation. The +primary difference is to use the `docx` makefile target, instead of the +default (which is `html`). Sphinx then produces the DOCX files in the +directory `<build-dir>/docs/docx/`. + + cd <build-dir> + cmake -DLLVM_ENABLE_SPHINX=true -DSPHINX_OUTPUT_DOCX=true <src-dir> + make + +The correspondence between reStructuredText files and generated DOCX files is: + +LLVM project + `llvm/docs/index.rst` <-> `<build-dir>/docs/docx/LLVM.docx` <-> `<install-dir>/share/doc/llvm/LLVM.docx` + +Other projects + `<project>/docs/index.rst` <-> `<build-dir>/tools/<project>/docs/docx/<project>.docx` <-> `<install-dir>/share/doc/<project>/<project>.docx` Index: openmp/docs/CMakeLists.txt =================================================================== --- openmp/docs/CMakeLists.txt +++ openmp/docs/CMakeLists.txt @@ -99,5 +99,8 @@ if (${SPHINX_OUTPUT_MAN}) add_sphinx_target(man openmp) endif() + if (${SPHINX_OUTPUT_DOCX}) + add_sphinx_target(docx openmp) + endif() endif() endif() Index: llvm/docs/make.bat =================================================================== --- llvm/docs/make.bat +++ llvm/docs/make.bat @@ -31,6 +31,7 @@ echo. text to make text files echo. man to make manual pages echo. texinfo to make Texinfo files + echo. docx to make DOCX files echo. gettext to make PO message catalogs echo. changes to make an overview over all changed/added/deprecated items echo. linkcheck to check all external links for integrity @@ -153,6 +154,14 @@ goto end ) +if "%1" == "docx" ( + %SPHINXBUILD% -b docx %ALLSPHINXOPTS% %BUILDDIR%/docx + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The DOCX files are in %BUILDDIR%/docx. + goto end +) + if "%1" == "gettext" ( %SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale if errorlevel 1 exit /b 1 Index: llvm/docs/conf.py =================================================================== --- llvm/docs/conf.py +++ llvm/docs/conf.py @@ -28,6 +28,9 @@ # coming with Sphinx (named 'sphinx.ext.*') or your custom ones. extensions = ['sphinx.ext.intersphinx', 'sphinx.ext.todo'] +if tags.has('builder-docx'): + extensions.append('docxbuilder') + # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] Index: llvm/docs/README.txt =================================================================== --- llvm/docs/README.txt +++ llvm/docs/README.txt @@ -14,10 +14,15 @@ cd <build-dir> cmake -DLLVM_ENABLE_SPHINX=true -DSPHINX_OUTPUT_HTML=true <src-dir> make -j3 docs-llvm-html - $BROWSER <build-dir>/docs//html/index.html + $BROWSER <build-dir>/docs/html/index.html -The mapping between reStructuredText files and generated documentation is -`docs/Foo.rst` <-> `<build-dir>/docs//html/Foo.html` <-> `https://llvm.org/docs/Foo.html`. +The correspondence between reStructuredText files and generated HTML pages is: + +LLVM project + `llvm/docs/Foo.rst` <-> `<build-dir>/docs/html/Foo.html` <-> `<install-dir>/share/doc/llvm/html/Foo.html` <-> `https://llvm.org/docs/Foo.html` + +Other projects + `<project>/docs/Foo.rst` <-> `<build-dir>/tools/<project>/docs/html/Foo.html` <-> `<install-dir>/share/doc/<project>/html/Foo.html`<-> `https://<project>.llvm.org/docs/Foo.html` If you are interested in writing new documentation, you will want to read `SphinxQuickstartTemplate.rst` which will get you writing documentation @@ -25,7 +30,7 @@ markup syntax. Manpage Output -=============== +============== Building the manpages is similar to building the HTML documentation. The primary difference is to use the `man` makefile target, instead of the @@ -35,13 +40,44 @@ cd <build-dir> cmake -DLLVM_ENABLE_SPHINX=true -DSPHINX_OUTPUT_MAN=true <src-dir> make -j3 docs-llvm-man - man -l >build-dir>/docs/man/FileCheck.1 + man -l <build-dir>/docs/man/FileCheck.1 + +The correspondence between reStructuredText files and generated man pages is: + +LLVM project + `llvm/docs/CommandGuide/Foo.rst` <-> `<build-dir>/docs/man/Foo.1` <-> `<install-dir>/share/man/man1/Foo.1` + +Other projects + `<project>/docs/CommandGuide/Foo.rst` <-> `<build-dir>/tools/<project>/docs/man/Foo.1` <-> `<install-dir>/share/man/man1/Foo.1` -The correspondence between .rst files and man pages is -`docs/CommandGuide/Foo.rst` <-> `<build-dir>/docs//man/Foo.1`. These .rst files are also included during HTML generation so they are also -viewable online (as noted above) at e.g. -`https://llvm.org/docs/CommandGuide/Foo.html`. +viewable online: + +LLVM project + `https://llvm.org/docs/CommandGuide/Foo.html` + +Other projects + `https://<project>.llvm.org/docs/CommandGuide/Foo.html` + +DOCX Output +=========== + +Building the DOCX files is similar to building the HTML documentation. The +primary difference is to use the `docx` makefile target, instead of the +default (which is `html`). Sphinx then produces the DOCX files in the +directory `<build-dir>/docs/docx/`. + + cd <build-dir> + cmake -DLLVM_ENABLE_SPHINX=true -DSPHINX_OUTPUT_DOCX=true <src-dir> + make -j3 docs-llvm-docx + +The correspondence between reStructuredText files and generated DOCX files is: + +LLVM project + `llvm/docs/index.rst` <-> `<build-dir>/docs/docx/LLVM.docx` <-> `<install-dir>/share/doc/llvm/LLVM.docx` + +Other projects + `<project>/docs/index.rst` <-> `<build-dir>/tools/<project>/docs/docx/<project>.docx` <-> `<install-dir>/share/doc/<project>/<project>.docx` Checking links ============== @@ -53,7 +89,7 @@ make -f Makefile.sphinx linkcheck Doxygen page Output -============== +=================== Install doxygen <http://www.stack.nl/~dimitri/doxygen/download.html> and dot2tex <https://dot2tex.readthedocs.io/en/latest>. Index: llvm/docs/Makefile.sphinx =================================================================== --- llvm/docs/Makefile.sphinx +++ llvm/docs/Makefile.sphinx @@ -14,7 +14,7 @@ # the i18n builder cannot share the environment and doctrees with the others I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . -.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext +.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext docx all: html @@ -34,6 +34,7 @@ @echo " text to make text files" @echo " man to make manual pages" @echo " texinfo to make Texinfo files" + @echo " docx to make DOCX files" @echo " info to make Texinfo files and run them through makeinfo" @echo " gettext to make PO message catalogs" @echo " changes to make an overview of all changed/added/deprecated items" @@ -127,6 +128,11 @@ @echo "Run \`make' in that directory to run these through makeinfo" \ "(use \`make info' here to do that automatically)." +docx: + $(SPHINXBUILD) -b docx $(ALLSPHINXOPTS) $(BUILDDIR)/docx + @echo + @echo "Build finished. The DOCX files are in $(BUILDDIR)/docx." + info: $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo @echo "Running Texinfo files through makeinfo..." Index: llvm/docs/CMakeLists.txt =================================================================== --- llvm/docs/CMakeLists.txt +++ llvm/docs/CMakeLists.txt @@ -109,13 +109,16 @@ add_sphinx_target(html llvm) endif() - if (${SPHINX_OUTPUT_MAN}) add_sphinx_target(man llvm) add_sphinx_target(man llvm-dwarfdump) add_sphinx_target(man dsymutil) endif() + if (${SPHINX_OUTPUT_DOCX}) + add_sphinx_target(docx llvm) + endif() + endif() endif() @@ -159,9 +162,9 @@ add_dependencies(ocaml_doc ${doc_targets}) if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY) - # ./ suffix is needed to copy the contents of html directory without + # / suffix is needed to copy the contents of html directory without # appending html/ into LLVM_INSTALL_OCAMLDOC_HTML_DIR. - install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/ocamldoc/html/. + install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/ocamldoc/html/ COMPONENT ocamldoc-html DESTINATION "${LLVM_INSTALL_OCAMLDOC_HTML_DIR}") endif() Index: llvm/docs/CMake.rst =================================================================== --- llvm/docs/CMake.rst +++ llvm/docs/CMake.rst @@ -482,8 +482,8 @@ **LLVM_ENABLE_SPHINX**:BOOL If specified, CMake will search for the ``sphinx-build`` executable and will make - the ``SPHINX_OUTPUT_HTML`` and ``SPHINX_OUTPUT_MAN`` CMake options available. - Defaults to OFF. + the ``SPHINX_OUTPUT_HTML``, ``SPHINX_OUTPUT_MAN`` and ``SPHINX_OUTPUT_DOCX`` CMake options + available. Defaults to OFF. **LLVM_ENABLE_THREADS**:BOOL Build with threads support, if available. Defaults to ON. @@ -507,8 +507,8 @@ Defaults to ON. **LLVM_EXPERIMENTAL_TARGETS_TO_BUILD**:STRING - Semicolon-separated list of experimental targets to build and linked into - llvm. This will build the experimental target without needing it to add to the + Semicolon-separated list of experimental targets to build and linked into + llvm. This will build the experimental target without needing it to add to the list of all the targets available in the LLVM's main CMakeLists.txt. **LLVM_EXTERNAL_{CLANG,LLD,POLLY}_SOURCE_DIR**:PATH @@ -570,6 +570,11 @@ either be absolute or relative to the CMAKE_INSTALL_PREFIX. Defaults to `share/doc/llvm/html`. +**LLVM_INSTALL_SPHINX_DOCX_DIR**:STRING + The path to install Sphinx-generated DOCX documentation to. This path can + either be absolute or relative to the CMAKE_INSTALL_PREFIX. Defaults to + `share/doc/llvm`. + **LLVM_INSTALL_UTILS**:BOOL If enabled, utility binaries like ``FileCheck`` and ``not`` will be installed to CMAKE_INSTALL_PREFIX. @@ -586,7 +591,7 @@ $ D:\git> git clone https://github.com/mjansson/rpmalloc $ D:\llvm-project> cmake ... -DLLVM_INTEGRATED_CRT_ALLOC=D:\git\rpmalloc - + This flag needs to be used along with the static CRT, ie. if building the Release target, add -DLLVM_USE_CRT_RELEASE=MT. @@ -719,6 +724,13 @@ is enabled). Currently the only target added is ``docs-llvm-man``. Defaults to ON. +**SPHINX_OUTPUT_DOCX**:BOOL + If enabled (and ``LLVM_ENABLE_SPHINX`` is enabled) the targets for building + the DOCX files are added (but not built by default unless ``LLVM_BUILD_DOCS`` + is enabled). Requires that the Sphinx DOCX builder is installed using ``pip + install docxbuilder``. Currently the only target added is ``docs-llvm-docx``. + Defaults to OFF. + **SPHINX_WARNINGS_AS_ERRORS**:BOOL If enabled then sphinx documentation warnings will be treated as errors. Defaults to ON. Index: llvm/cmake/modules/FindSphinx.cmake =================================================================== --- llvm/cmake/modules/FindSphinx.cmake +++ llvm/cmake/modules/FindSphinx.cmake @@ -23,5 +23,6 @@ # 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) +option(SPHINX_OUTPUT_DOCX "Output DOCX files" OFF) option(SPHINX_WARNINGS_AS_ERRORS "When building documentation treat warnings as errors" ON) Index: llvm/cmake/modules/AddSphinxTarget.cmake =================================================================== --- llvm/cmake/modules/AddSphinxTarget.cmake +++ llvm/cmake/modules/AddSphinxTarget.cmake @@ -81,7 +81,7 @@ if(NOT LLVM_ENABLE_IDE) add_llvm_install_targets("install-${SPHINX_TARGET_NAME}" - DEPENDS ${SPHINX_TARGET_NAME} + DEPENDS "${SPHINX_TARGET_NAME}" COMPONENT "${project}-sphinx-man") endif() elseif (builder STREQUAL html) @@ -89,18 +89,29 @@ set(${project_upper}_INSTALL_SPHINX_HTML_DIR "${CMAKE_INSTALL_DATADIR}/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}/." + install(DIRECTORY "${SPHINX_BUILD_DIR}/" # Slash indicates contents of COMPONENT "${project}-sphinx-html" - DESTINATION "${${project_upper}_INSTALL_SPHINX_HTML_DIR}") + DESTINATION "$CACHE{${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() + elseif (builder STREQUAL docx) + string(TOUPPER "${project}" project_upper) + set(${project_upper}_INSTALL_SPHINX_DOCX_DIR "${CMAKE_INSTALL_DATADIR}/doc/${project}" + CACHE STRING "DOCX documentation install directory for ${project}") + + install(DIRECTORY "${SPHINX_BUILD_DIR}/" # Slash indicates contents of + COMPONENT "${project}-sphinx-docx" + DESTINATION "$CACHE{${project_upper}_INSTALL_SPHINX_DOCX_DIR}") + + if(NOT LLVM_ENABLE_IDE) + add_llvm_install_targets("install-${SPHINX_TARGET_NAME}" + DEPENDS "${SPHINX_TARGET_NAME}" + COMPONENT "${project}-sphinx-docx") + endif() else() message(WARNING Installation of ${builder} not supported) endif() Index: lldb/docs/resources/build.rst =================================================================== --- lldb/docs/resources/build.rst +++ lldb/docs/resources/build.rst @@ -393,6 +393,7 @@ > sudo apt-get install doxygen graphviz python3-sphinx > sudo pip install epydoc + > sudo pip install docxbuilder To build the documentation, configure with ``LLVM_ENABLE_SPHINX=ON`` and build the desired target(s). @@ -400,6 +401,7 @@ > ninja docs-lldb-html > ninja docs-lldb-man + > ninja docs-lldb-docx > ninja lldb-cpp-doc > ninja lldb-python-doc Index: lldb/docs/conf.py =================================================================== --- lldb/docs/conf.py +++ lldb/docs/conf.py @@ -44,6 +44,9 @@ # coming with Sphinx (named 'sphinx.ext.*') or your custom ones. extensions = ['sphinx.ext.todo', 'sphinx.ext.mathjax', 'sphinx.ext.intersphinx'] +if tags.has('builder-docx'): + extensions.append('docxbuilder') + autodoc_default_options = { 'special-members': '__int__, __len__, __hex__, __oct__, __iter__', } Index: lldb/docs/CMakeLists.txt =================================================================== --- lldb/docs/CMakeLists.txt +++ lldb/docs/CMakeLists.txt @@ -50,4 +50,9 @@ if (${SPHINX_OUTPUT_MAN}) add_sphinx_target(man lldb) endif() + + if (${SPHINX_OUTPUT_DOCX}) + add_sphinx_target(docx lldb) + endif() + endif() Index: lld/docs/sphinx_intro.rst =================================================================== --- lld/docs/sphinx_intro.rst +++ lld/docs/sphinx_intro.rst @@ -41,7 +41,8 @@ Linux Use your distribution's standard package management tool to install it, - i.e., ``apt-get install easy_install`` or ``yum install easy_install``. + i.e., ``apt-get install easy_install``, ``yum install easy_install`` or + ``pip install``. macOS All modern macOS systems come with ``easy_install`` as part of the base @@ -51,11 +52,13 @@ See the `setuptools <http://pypi.python.org/pypi/setuptools>`_ package web page for instructions. +If building DOCX documentation, then the Sphinx DOCX builder must be installed +using ``pip install docxbuilder``. .. _building_the_documentation: Building the documentation -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +~~~~~~~~~~~~~~~~~~~~~~~~~~ In order to build the documentation need to add ``-DLLVM_ENABLE_SPHINX=ON`` to your ``cmake`` command. Once you do this you can build the docs using Index: lld/docs/make.bat =================================================================== --- lld/docs/make.bat +++ lld/docs/make.bat @@ -31,6 +31,7 @@ echo. text to make text files echo. man to make manual pages echo. texinfo to make Texinfo files + echo. docx to make DOCX files echo. gettext to make PO message catalogs echo. changes to make an overview over all changed/added/deprecated items echo. linkcheck to check all external links for integrity @@ -153,6 +154,14 @@ goto end ) +if "%1" == "docx" ( + %SPHINXBUILD% -b docx %ALLSPHINXOPTS% %BUILDDIR%/docx + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The DOCX files are in %BUILDDIR%/docx. + goto end +) + if "%1" == "gettext" ( %SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale if errorlevel 1 exit /b 1 Index: lld/docs/conf.py =================================================================== --- lld/docs/conf.py +++ lld/docs/conf.py @@ -27,6 +27,9 @@ # coming with Sphinx (named 'sphinx.ext.*') or your custom ones. extensions = ['sphinx.ext.intersphinx', 'sphinx.ext.todo'] +if tags.has('builder-docx'): + extensions.append('docxbuilder') + # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] Index: lld/docs/CMakeLists.txt =================================================================== --- lld/docs/CMakeLists.txt +++ lld/docs/CMakeLists.txt @@ -4,5 +4,8 @@ if (${SPHINX_OUTPUT_HTML}) add_sphinx_target(html lld) endif() + if (${SPHINX_OUTPUT_DOCX}) + add_sphinx_target(docx lld) + endif() endif() endif() Index: libunwind/docs/conf.py =================================================================== --- libunwind/docs/conf.py +++ libunwind/docs/conf.py @@ -27,6 +27,9 @@ # coming with Sphinx (named 'sphinx.ext.*') or your custom ones. extensions = ['sphinx.ext.intersphinx', 'sphinx.ext.todo'] +if tags.has('builder-docx'): + extensions.append('docxbuilder') + # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] Index: libunwind/docs/CMakeLists.txt =================================================================== --- libunwind/docs/CMakeLists.txt +++ libunwind/docs/CMakeLists.txt @@ -4,4 +4,7 @@ if (${SPHINX_OUTPUT_HTML}) add_sphinx_target(html libunwind) endif() + if (${SPHINX_OUTPUT_DOCX}) + add_sphinx_target(docx libunwind) + endif() endif() Index: libcxx/docs/conf.py =================================================================== --- libcxx/docs/conf.py +++ libcxx/docs/conf.py @@ -27,6 +27,9 @@ # coming with Sphinx (named 'sphinx.ext.*') or your custom ones. extensions = ['sphinx.ext.intersphinx', 'sphinx.ext.todo'] +if tags.has('builder-docx'): + extensions.append('docxbuilder') + # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] Index: libcxx/docs/Makefile.sphinx =================================================================== --- libcxx/docs/Makefile.sphinx +++ libcxx/docs/Makefile.sphinx @@ -17,7 +17,7 @@ # the i18n builder cannot share the environment and doctrees with the others I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . -.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext default +.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man docx changes linkcheck doctest gettext default default: html Index: libcxx/docs/CMakeLists.txt =================================================================== --- libcxx/docs/CMakeLists.txt +++ libcxx/docs/CMakeLists.txt @@ -5,5 +5,8 @@ if (${SPHINX_OUTPUT_HTML}) add_sphinx_target(html libcxx) endif() + if (${SPHINX_OUTPUT_DOCX}) + add_sphinx_target(docx libcxx) + endif() endif() endif() Index: flang/docs/conf.py =================================================================== --- flang/docs/conf.py +++ flang/docs/conf.py @@ -33,6 +33,9 @@ # coming with Sphinx (named 'sphinx.ext.*') or your custom ones. extensions = ['sphinx.ext.todo', 'sphinx.ext.mathjax', 'sphinx.ext.intersphinx'] +if tags.has('builder-docx'): + extensions.append('docxbuilder') + # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] Index: flang/docs/CMakeLists.txt =================================================================== --- flang/docs/CMakeLists.txt +++ flang/docs/CMakeLists.txt @@ -100,6 +100,9 @@ if (${SPHINX_OUTPUT_MAN}) add_sphinx_target(man flang) endif() + if (${SPHINX_OUTPUT_DOCX}) + add_sphinx_target(docx flang) + endif() endif() endif() Index: clang/docs/make.bat =================================================================== --- clang/docs/make.bat +++ clang/docs/make.bat @@ -31,6 +31,7 @@ echo. text to make text files echo. man to make manual pages echo. texinfo to make Texinfo files + echo. docx to make DOCX files echo. gettext to make PO message catalogs echo. changes to make an overview over all changed/added/deprecated items echo. linkcheck to check all external links for integrity @@ -153,6 +154,14 @@ goto end ) +if "%1" == "docx" ( + %SPHINXBUILD% -b docx %ALLSPHINXOPTS% %BUILDDIR%/docx + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The DOCX files are in %BUILDDIR%/docx. + goto end +) + if "%1" == "gettext" ( %SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale if errorlevel 1 exit /b 1 Index: clang/docs/conf.py =================================================================== --- clang/docs/conf.py +++ clang/docs/conf.py @@ -29,6 +29,9 @@ # coming with Sphinx (named 'sphinx.ext.*') or your custom ones. extensions = ['sphinx.ext.todo', 'sphinx.ext.mathjax'] +if tags.has('builder-docx'): + extensions.append('docxbuilder') + # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] Index: clang/docs/analyzer/make.bat =================================================================== --- clang/docs/analyzer/make.bat +++ clang/docs/analyzer/make.bat @@ -31,6 +31,7 @@ echo. text to make text files echo. man to make manual pages echo. texinfo to make Texinfo files + echo. docx to make DOCX files echo. gettext to make PO message catalogs echo. changes to make an overview over all changed/added/deprecated items echo. linkcheck to check all external links for integrity @@ -153,6 +154,14 @@ goto end ) +if "%1" == "docx" ( + %SPHINXBUILD% -b docx %ALLSPHINXOPTS% %BUILDDIR%/docx + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The DOCX files are in %BUILDDIR%/docx. + goto end +) + if "%1" == "gettext" ( %SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale if errorlevel 1 exit /b 1 Index: clang/docs/analyzer/conf.py =================================================================== --- clang/docs/analyzer/conf.py +++ clang/docs/analyzer/conf.py @@ -28,6 +28,9 @@ # coming with Sphinx (named 'sphinx.ext.*') or your custom ones. extensions = ['sphinx.ext.todo', 'sphinx.ext.mathjax'] +if tags.has('builder-docx'): + extensions.append('docxbuilder') + # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] Index: clang/docs/Makefile.sphinx =================================================================== --- clang/docs/Makefile.sphinx +++ clang/docs/Makefile.sphinx @@ -34,6 +34,7 @@ @echo " text to make text files" @echo " man to make manual pages" @echo " texinfo to make Texinfo files" + @echo " docx to make DOCX files" @echo " info to make Texinfo files and run them through makeinfo" @echo " gettext to make PO message catalogs" @echo " changes to make an overview of all changed/added/deprecated items" @@ -135,6 +136,11 @@ @echo "Run \`make' in that directory to run these through makeinfo" \ "(use \`make info' here to do that automatically)." +docx: + $(SPHINXBUILD) -b docx $(ALLSPHINXOPTS) $(BUILDDIR)/docx + @echo + @echo "Build finished. The DOCX files are in $(BUILDDIR)/docx." + info: $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo @echo "Running Texinfo files through makeinfo..." Index: clang/docs/CMakeLists.txt =================================================================== --- clang/docs/CMakeLists.txt +++ clang/docs/CMakeLists.txt @@ -103,19 +103,26 @@ if (LLVM_ENABLE_SPHINX) include(AddSphinxTarget) if (SPHINX_FOUND) + + # Copy rst files to build directory before generating the + # documentation. Some of the rst files are generated, so they + # only exist in the build directory. Sphinx needs all files in + # the same directory in order to generate the files, so we need to + # copy all the non-generated rst files from the source to the build + # directory before we run Sphinx. + add_custom_target(copy-clang-rst-docs + COMMAND "${CMAKE_COMMAND}" -E copy_directory + "${CMAKE_CURRENT_SOURCE_DIR}" + "${CMAKE_CURRENT_BINARY_DIR}") + + # Generated files + gen_rst_file_from_td(AttributeReference.rst -gen-attr-docs ../include/clang/Basic/Attr.td copy-clang-rst-docs) + gen_rst_file_from_td(DiagnosticsReference.rst -gen-diag-docs ../include/clang/Basic/Diagnostic.td copy-clang-rst-docs) + gen_rst_file_from_td(ClangCommandLineReference.rst -gen-opt-docs ../include/clang/Driver/ClangOptionDocs.td copy-clang-rst-docs) + if (${SPHINX_OUTPUT_HTML}) add_sphinx_target(html clang SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}") - # Copy rst files to build directory before generating the html - # documentation. Some of the rst files are generated, so they - # only exist in the build directory. Sphinx needs all files in - # the same directory in order to generate the html, so we need to - # copy all the non-gnerated rst files from the source to the build - # directory before we run sphinx. - add_custom_target(copy-clang-rst-docs - COMMAND "${CMAKE_COMMAND}" -E copy_directory - "${CMAKE_CURRENT_SOURCE_DIR}" - "${CMAKE_CURRENT_BINARY_DIR}") add_dependencies(docs-clang-html copy-clang-rst-docs) add_custom_command(TARGET docs-clang-html POST_BUILD @@ -123,13 +130,17 @@ "${CMAKE_CURRENT_SOURCE_DIR}/LibASTMatchersReference.html" "${CMAKE_CURRENT_BINARY_DIR}/html/LibASTMatchersReference.html") - # Generated files - gen_rst_file_from_td(AttributeReference.rst -gen-attr-docs ../include/clang/Basic/Attr.td docs-clang-html) - gen_rst_file_from_td(DiagnosticsReference.rst -gen-diag-docs ../include/clang/Basic/Diagnostic.td docs-clang-html) - gen_rst_file_from_td(ClangCommandLineReference.rst -gen-opt-docs ../include/clang/Driver/ClangOptionDocs.td docs-clang-html) endif() + if (${SPHINX_OUTPUT_MAN}) - add_sphinx_target(man clang) + add_sphinx_target(man clang SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}") + add_dependencies(docs-clang-man copy-clang-rst-docs) endif() + + if (${SPHINX_OUTPUT_DOCX}) + add_sphinx_target(docx clang SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}") + add_dependencies(docs-clang-docx copy-clang-rst-docs) + endif() + endif() endif() Index: clang-tools-extra/docs/make.bat =================================================================== --- clang-tools-extra/docs/make.bat +++ clang-tools-extra/docs/make.bat @@ -31,6 +31,7 @@ echo. text to make text files echo. man to make manual pages echo. texinfo to make Texinfo files + echo. docx to make DOCX files echo. gettext to make PO message catalogs echo. changes to make an overview over all changed/added/deprecated items echo. linkcheck to check all external links for integrity @@ -153,6 +154,14 @@ goto end ) +if "%1" == "docx" ( + %SPHINXBUILD% -b docx %ALLSPHINXOPTS% %BUILDDIR%/docx + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The DOCX files are in %BUILDDIR%/docx. + goto end +) + if "%1" == "gettext" ( %SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale if errorlevel 1 exit /b 1 Index: clang-tools-extra/docs/conf.py =================================================================== --- clang-tools-extra/docs/conf.py +++ clang-tools-extra/docs/conf.py @@ -28,6 +28,9 @@ # coming with Sphinx (named 'sphinx.ext.*') or your custom ones. extensions = ['sphinx.ext.todo', 'sphinx.ext.mathjax'] +if tags.has('builder-docx'): + extensions.append('docxbuilder') + # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] Index: clang-tools-extra/docs/CMakeLists.txt =================================================================== --- clang-tools-extra/docs/CMakeLists.txt +++ clang-tools-extra/docs/CMakeLists.txt @@ -98,5 +98,8 @@ if (${SPHINX_OUTPUT_MAN}) add_sphinx_target(man clang-tools) endif() + if (${SPHINX_OUTPUT_DOCX}) + add_sphinx_target(docx clang-tools) + endif() endif() endif()
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits