All of lore.kernel.org
 help / color / mirror / Atom feed
From: Peter Maydell <peter.maydell@linaro.org>
To: qemu-devel@nongnu.org
Cc: "Philippe Mathieu-Daudé" <philmd@redhat.com>,
	"Alex Bennée" <alex.bennee@linaro.org>,
	"Aleksandar Markovic" <amarkovic@wavecomp.com>
Subject: [Qemu-devel] [PATCH v3 09/12] Makefile, configure: Support building rST documentation
Date: Tue,  5 Mar 2019 17:21:36 +0000	[thread overview]
Message-ID: <20190305172139.32662-10-peter.maydell@linaro.org> (raw)
In-Reply-To: <20190305172139.32662-1-peter.maydell@linaro.org>

Add support to our configure and makefile machinery for building
our rST docs into HTML files.

Building the documentation now requires that sphinx-build is
available; this seems better than allowing half the docs to
be built if it is not present but having half of them missing.
(In particular it means that assuming that distros configured with
--enable-docs they'll get a helpful error from configure telling
them the new build dependency.)

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Tested-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Acked-by: Aleksandar Markovic <amarkovic@wavecomp.com>
Message-id: 20190228145624.24885-10-peter.maydell@linaro.org
---
 configure  | 15 +++++++++++++--
 Makefile   | 45 ++++++++++++++++++++++++++++++++++++++++++---
 .gitignore |  1 +
 3 files changed, 56 insertions(+), 5 deletions(-)

diff --git a/configure b/configure
index cefeb8fcce4..47bf617fcc5 100755
--- a/configure
+++ b/configure
@@ -4589,13 +4589,24 @@ if compile_prog "" "" ; then
   syncfs=yes
 fi
 
+# Check we have a new enough version of sphinx-build
+has_sphinx_build() {
+    # This is a bit awkward but works: create a trivial document and
+    # try to run it with our configuration file (which enforces a
+    # version requirement). This will fail if either
+    # sphinx-build doesn't exist at all or if it is too old.
+    mkdir -p "$TMPDIR1/sphinx"
+    touch "$TMPDIR1/sphinx/index.rst"
+    sphinx-build -c "$source_path/docs" -b html "$TMPDIR1/sphinx" "$TMPDIR1/sphinx/out" >/dev/null 2>&1
+}
+
 # Check if tools are available to build documentation.
 if test "$docs" != "no" ; then
-  if has makeinfo && has pod2man; then
+  if has makeinfo && has pod2man && has_sphinx_build; then
     docs=yes
   else
     if test "$docs" = "yes" ; then
-      feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
+      feature_not_found "docs" "Install texinfo, Perl/perl-podlators and python-sphinx"
     fi
     docs=no
   fi
diff --git a/Makefile b/Makefile
index 2208bde4196..add22cf2947 100644
--- a/Makefile
+++ b/Makefile
@@ -388,7 +388,7 @@ dummy := $(call unnest-vars,, \
 
 include $(SRC_PATH)/tests/Makefile.include
 
-all: $(DOCS) $(TOOLS) $(HELPERS-y) recurse-all modules
+all: $(DOCS) $(if $(BUILD_DOCS),sphinxdocs) $(TOOLS) $(HELPERS-y) recurse-all modules
 
 qemu-version.h: FORCE
 	$(call quiet-command, \
@@ -637,6 +637,14 @@ dist: qemu-$(VERSION).tar.bz2
 qemu-%.tar.bz2:
 	$(SRC_PATH)/scripts/make-release "$(SRC_PATH)" "$(patsubst qemu-%.tar.bz2,%,$@)"
 
+# Note that these commands assume that there are no HTML files in
+# the docs subdir in the source tree! If there are then this will
+# blow them away for an in-source-tree 'make clean'.
+define clean-manual =
+rm -rf docs/$1/_static
+rm -f docs/$1/objects.inv docs/$1/searchindex.js docs/$1/*.html
+endef
+
 distclean: clean
 	rm -f config-host.mak config-host.h* config-host.ld $(DOCS) qemu-options.texi qemu-img-cmds.texi qemu-monitor.texi qemu-monitor-info.texi
 	rm -f config-all-devices.mak config-all-disas.mak config.status
@@ -657,6 +665,9 @@ distclean: clean
 	rm -f docs/interop/qemu-qmp-ref.html docs/interop/qemu-ga-ref.html
 	rm -f docs/qemu-block-drivers.7
 	rm -f docs/qemu-cpu-models.7
+	rm -f .doctrees
+	$(call clean-manual,devel)
+	$(call clean-manual,interop)
 	for d in $(TARGET_DIRS); do \
 	rm -rf $$d || exit 1 ; \
         done
@@ -690,7 +701,18 @@ else
 BLOBS=
 endif
 
-install-doc: $(DOCS)
+define install-manual =
+for d in $$(cd docs && find $1 -type d); do $(INSTALL_DIR) "$(DESTDIR)$(qemu_docdir)/$$d"; done
+for f in $$(cd docs && find $1 -type f); do $(INSTALL_DATA) "docs/$$f" "$(DESTDIR)$(qemu_docdir)/$$f"; done
+endef
+
+# Note that we deliberately do not install the "devel" manual: it is
+# for QEMU developers, and not interesting to our users.
+.PHONY: install-sphinxdocs
+install-sphinxdocs: sphinxdocs
+	$(call install-manual,interop)
+
+install-doc: $(DOCS) install-sphinxdocs
 	$(INSTALL_DIR) "$(DESTDIR)$(qemu_docdir)"
 	$(INSTALL_DATA) qemu-doc.html "$(DESTDIR)$(qemu_docdir)"
 	$(INSTALL_DATA) qemu-doc.txt "$(DESTDIR)$(qemu_docdir)"
@@ -841,6 +863,23 @@ docs/version.texi: $(SRC_PATH)/VERSION
 %.pdf: %.texi docs/version.texi
 	$(call quiet-command,texi2pdf $(TEXI2PDFFLAGS) $< -o $@,"GEN","$@")
 
+# Sphinx builds all its documentation at once in one invocation
+# and handles "don't rebuild things unless necessary" itself.
+# The '.doctrees' files are cached information to speed this up.
+.PHONY: sphinxdocs
+sphinxdocs: docs/devel/index.html docs/interop/index.html
+
+# Canned command to build a single manual
+build-manual = $(call quiet-command,sphinx-build $(if $(V),,-q) -b html -d .doctrees/$1 $(SRC_PATH)/docs/$1 docs/$1 ,"SPHINX","docs/$1")
+# We assume all RST files in the manual's directory are used in it
+manual-deps = $(wildcard $(SRC_PATH)/docs/$1/*.rst) $(SRC_PATH)/docs/$1/conf.py $(SRC_PATH)/docs/conf.py
+
+docs/devel/index.html: $(call manual-deps,devel)
+	$(call build-manual,devel)
+
+docs/interop/index.html: $(call manual-deps,interop)
+	$(call build-manual,interop)
+
 qemu-options.texi: $(SRC_PATH)/qemu-options.hx $(SRC_PATH)/scripts/hxtool
 	$(call quiet-command,sh $(SRC_PATH)/scripts/hxtool -t < $< > $@,"GEN","$@")
 
@@ -869,7 +908,7 @@ docs/qemu-block-drivers.7: docs/qemu-block-drivers.texi
 docs/qemu-cpu-models.7: docs/qemu-cpu-models.texi
 scripts/qemu-trace-stap.1: scripts/qemu-trace-stap.texi
 
-html: qemu-doc.html docs/interop/qemu-qmp-ref.html docs/interop/qemu-ga-ref.html
+html: qemu-doc.html docs/interop/qemu-qmp-ref.html docs/interop/qemu-ga-ref.html sphinxdocs
 info: qemu-doc.info docs/interop/qemu-qmp-ref.info docs/interop/qemu-ga-ref.info
 pdf: qemu-doc.pdf docs/interop/qemu-qmp-ref.pdf docs/interop/qemu-ga-ref.pdf
 txt: qemu-doc.txt docs/interop/qemu-qmp-ref.txt docs/interop/qemu-ga-ref.txt
diff --git a/.gitignore b/.gitignore
index b66b7725512..77522561b8e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
+/.doctrees
 /config-devices.*
 /config-all-devices.*
 /config-all-disas.*
-- 
2.20.1

  parent reply	other threads:[~2019-03-05 17:21 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-03-05 17:21 [Qemu-devel] [PATCH v3 00/12] Enable build and install of our rST docs Peter Maydell
2019-03-05 17:21 ` [Qemu-devel] [PATCH v3 01/12] docs/cpu-hotplug.rst: Fix rST markup issues Peter Maydell
2019-03-05 22:34   ` Richard Henderson
2019-03-07  0:04   ` Cleber Rosa
2019-03-07  9:47     ` Peter Maydell
2019-03-07 11:15       ` Cleber Rosa
2019-03-05 17:21 ` [Qemu-devel] [PATCH v3 02/12] docs: Convert memory.txt to rst format Peter Maydell
2019-03-05 22:40   ` Richard Henderson
2019-03-07  0:11   ` Cleber Rosa
2019-03-05 17:21 ` [Qemu-devel] [PATCH v3 03/12] docs: Commit initial files from sphinx-quickstart Peter Maydell
2019-03-05 22:36   ` Richard Henderson
2019-03-05 17:21 ` [Qemu-devel] [PATCH v3 04/12] docs/conf.py: Disable unused _static directory Peter Maydell
2019-03-05 22:36   ` Richard Henderson
2019-03-05 17:21 ` [Qemu-devel] [PATCH v3 05/12] docs/conf.py: Configure the 'alabaster' theme Peter Maydell
2019-03-05 17:21 ` [Qemu-devel] [PATCH v3 06/12] docs/conf.py: Don't include rST sources in HTML build Peter Maydell
2019-03-05 22:42   ` Richard Henderson
2019-03-05 17:21 ` [Qemu-devel] [PATCH v3 07/12] docs/conf.py: Disable option warnings Peter Maydell
2019-03-05 22:42   ` Richard Henderson
2019-03-05 17:21 ` [Qemu-devel] [PATCH v3 08/12] docs: Provide separate conf.py for each manual we want Peter Maydell
2019-03-07  1:40   ` Cleber Rosa
2019-03-07  9:49     ` Peter Maydell
2019-03-07 12:14       ` Cleber Rosa
2019-03-07 12:29         ` Peter Maydell
2019-03-07 13:18           ` Cleber Rosa
2019-03-07 13:30             ` Peter Maydell
2019-03-07 13:41               ` Cleber Rosa
2019-03-07 13:46                 ` Peter Maydell
2019-03-05 17:21 ` Peter Maydell [this message]
2019-03-05 22:45   ` [Qemu-devel] [PATCH v3 09/12] Makefile, configure: Support building rST documentation Richard Henderson
     [not found]   ` <92ffba93-e486-647a-01ef-86180fb2cbb2@redhat.com>
2019-04-01  7:58     ` Peter Maydell
2019-04-01 12:51       ` Eric Blake
2019-03-05 17:21 ` [Qemu-devel] [PATCH v3 10/12] Makefile: Abstract out "identify the pkgversion" code Peter Maydell
2019-03-05 22:33   ` Richard Henderson
2019-03-05 17:21 ` [Qemu-devel] [PATCH v3 11/12] docs/conf.py: Don't hard-code QEMU version Peter Maydell
2019-03-05 22:46   ` Richard Henderson
2019-03-05 17:21 ` [Qemu-devel] [PATCH v3 12/12] MAINTAINERS: Add entry for Sphinx documentation infrastructure Peter Maydell
2019-03-05 18:08   ` Philippe Mathieu-Daudé
2019-03-05 22:47   ` Richard Henderson
2019-03-05 17:44 ` [Qemu-devel] [PATCH v3 00/12] Enable build and install of our rST docs no-reply
2019-03-05 18:17 ` no-reply
2019-03-06  1:28 ` no-reply
2019-03-06  1:32 ` no-reply
2019-03-07  0:10 ` no-reply
2019-03-07  0:15 ` no-reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190305172139.32662-10-peter.maydell@linaro.org \
    --to=peter.maydell@linaro.org \
    --cc=alex.bennee@linaro.org \
    --cc=amarkovic@wavecomp.com \
    --cc=philmd@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.