[master] 803b9a0cb use a real target for the `$(srcdir)` to `$(builddir)` links for sphinx
Nils Goroll
nils.goroll at uplex.de
Tue Jul 28 10:16:07 UTC 2020
commit 803b9a0cbdb22e8cda3cf9b4acb455351529df8d
Author: Nils Goroll <nils.goroll at uplex.de>
Date: Tue Jul 28 10:45:56 2020 +0200
use a real target for the `$(srcdir)` to `$(builddir)` links for sphinx
The phony target was executed unconditionally and would thus race.
A real target (using `index.rst`) does not race and has the additional
advantage of simplifying the code (avoiding a condition in the shell
code).
It seems (at least GNU) `make` outsmarts the attempt to use a file from
`$(srcdir)` as a marker for the link to have succeeded when
`$(builddir)/index.rst` is used as the target.
Using `$(abs_builddir)` seems to dtrt.
Largely unrelated to this issue: The links are required for targets in
`BUILT_SOURCES`, so previously I added a dependency to the `all` target.
Having the link target in `BUILD_SOURCES` seems to be the better option.
Fixes #3370 (I hope)
diff --git a/doc/sphinx/Makefile.am b/doc/sphinx/Makefile.am
index 4ef49bc66..f7b67755b 100644
--- a/doc/sphinx/Makefile.am
+++ b/doc/sphinx/Makefile.am
@@ -18,26 +18,25 @@ help:
clean:
-rm -rf $(BUILDDIR)/* $(CLEANFILES)
-# use index.rst as an indicator if we have copied already
-.PHONY: link_srcdir
-link_srcdir:
- if test "x$(srcdir)" != "x$(builddir)" && test ! -f index.rst; then \
- s=`realpath $(srcdir)`; \
- for f in `cd $$s && find . -type f`; do \
- d=`dirname $$f`; \
- test -d $$d || mkdir -p $$d; \
- test -f $$f || ln -s $$s/$$f $$f; \
- done \
- fi
+# sphinx does not support include paths or anything comparable:
+# link source tree files for an out-of-tree build
+rstlinks = $(abs_builddir)/doc/sphinx/index.rst
+$(rstlinks):
+ s=`realpath $(srcdir)`; \
+ for f in `cd $$s && find . -type f`; do \
+ d=`dirname $$f`; \
+ test -d $$d || mkdir -p $$d; \
+ test -f $$f || ln -s $$s/$$f $$f; \
+ done
+
+BUILT_SOURCES = $(rstlinks)
# work around for make html called within doc/sphinx
.PHONY: graphviz
graphviz:
cd ../graphviz && $(MAKE) html
-sphinx_prereq: link_srcdir graphviz conf.py
-
-all: link_srcdir
+sphinx_prereq: graphviz conf.py
html: sphinx_prereq
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
@@ -77,12 +76,12 @@ distclean-local:
include/cli.rst: $(top_builddir)/bin/varnishd/varnishd
$(top_builddir)/bin/varnishd/varnishd -x cli > ${@}_
mv ${@}_ ${@}
-BUILT_SOURCES = include/cli.rst
+RST_BUILT = include/cli.rst
include/params.rst: $(top_builddir)/bin/varnishd/varnishd
$(top_builddir)/bin/varnishd/varnishd -x parameter > ${@}_
mv ${@}_ ${@}
-BUILT_SOURCES += include/params.rst
+RST_BUILT += include/params.rst
COUNTERS = \
$(top_srcdir)/bin/varnishd/VSC_main.vsc \
@@ -101,7 +100,7 @@ include/counters.rst: $(top_srcdir)/lib/libvcc/vsctool.py $(COUNTERS)
done
mv ${@}_ ${@}
-BUILT_SOURCES += include/counters.rst
+RST_BUILT += include/counters.rst
include/varnishncsa_options.rst: $(top_builddir)/bin/varnishncsa/varnishncsa
$(top_builddir)/bin/varnishncsa/varnishncsa --options > ${@}_
@@ -109,7 +108,7 @@ include/varnishncsa_options.rst: $(top_builddir)/bin/varnishncsa/varnishncsa
include/varnishncsa_synopsis.rst: $(top_builddir)/bin/varnishncsa/varnishncsa
$(top_builddir)/bin/varnishncsa/varnishncsa --synopsis > ${@}_
mv ${@}_ ${@}
-BUILT_SOURCES += include/varnishncsa_options.rst \
+RST_BUILT += include/varnishncsa_options.rst \
include/varnishncsa_synopsis.rst
include/varnishlog_options.rst: $(top_builddir)/bin/varnishlog/varnishlog
@@ -118,7 +117,7 @@ include/varnishlog_options.rst: $(top_builddir)/bin/varnishlog/varnishlog
include/varnishlog_synopsis.rst: $(top_builddir)/bin/varnishlog/varnishlog
$(top_builddir)/bin/varnishlog/varnishlog --synopsis > ${@}_
mv ${@}_ ${@}
-BUILT_SOURCES += include/varnishlog_options.rst \
+RST_BUILT += include/varnishlog_options.rst \
include/varnishlog_synopsis.rst
include/varnishtop_options.rst: $(top_builddir)/bin/varnishtop/varnishtop
@@ -127,7 +126,7 @@ include/varnishtop_options.rst: $(top_builddir)/bin/varnishtop/varnishtop
include/varnishtop_synopsis.rst: $(top_builddir)/bin/varnishtop/varnishtop
$(top_builddir)/bin/varnishtop/varnishtop --synopsis > ${@}_
mv ${@}_ ${@}
-BUILT_SOURCES += include/varnishtop_options.rst \
+RST_BUILT += include/varnishtop_options.rst \
include/varnishtop_synopsis.rst
include/varnishhist_options.rst: $(top_builddir)/bin/varnishhist/varnishhist
@@ -136,7 +135,7 @@ include/varnishhist_options.rst: $(top_builddir)/bin/varnishhist/varnishhist
include/varnishhist_synopsis.rst: $(top_builddir)/bin/varnishhist/varnishhist
$(top_builddir)/bin/varnishhist/varnishhist --synopsis > ${@}_
mv ${@}_ ${@}
-BUILT_SOURCES += include/varnishhist_options.rst \
+RST_BUILT += include/varnishhist_options.rst \
include/varnishhist_synopsis.rst
include/varnishstat_options.rst: $(top_builddir)/bin/varnishstat/varnishstat
@@ -148,14 +147,14 @@ include/varnishstat_synopsis.rst: $(top_builddir)/bin/varnishstat/varnishstat
include/varnishstat_bindings.rst: $(top_builddir)/bin/varnishstat/varnishstat
$(top_builddir)/bin/varnishstat/varnishstat --bindings > ${@}_
mv ${@}_ ${@}
-BUILT_SOURCES += include/varnishstat_options.rst \
+RST_BUILT += include/varnishstat_options.rst \
include/varnishstat_synopsis.rst \
include/varnishstat_bindings.rst
include/vsl-tags.rst: $(top_builddir)/lib/libvarnishapi/vsl2rst
$(top_builddir)/lib/libvarnishapi/vsl2rst > ${@}_
mv ${@}_ ${@}
-BUILT_SOURCES += include/vsl-tags.rst
+RST_BUILT += include/vsl-tags.rst
VTCSYN_SRC = $(top_srcdir)/bin/varnishtest/vtc.c \
$(top_srcdir)/bin/varnishtest/vtc_barrier.c \
@@ -170,43 +169,45 @@ VTCSYN_SRC = $(top_srcdir)/bin/varnishtest/vtc.c \
include/vtc-syntax.rst: vtc-syntax.py $(VTCSYN_SRC)
$(AM_V_GEN) $(PYTHON) $(top_srcdir)/doc/sphinx/vtc-syntax.py $(VTCSYN_SRC) > ${@}_
@mv ${@}_ ${@}
-BUILT_SOURCES += include/vtc-syntax.rst
+RST_BUILT += include/vtc-syntax.rst
# XXX copy/paste rules need some TLC
include/vmod_std.generated.rst: $(top_builddir)/lib/libvmod_std/vmod_std.rst
cp $(top_builddir)/lib/libvmod_std/vmod_std.rst $@
-BUILT_SOURCES += include/vmod_std.generated.rst
+RST_BUILT += include/vmod_std.generated.rst
include/vmod_directors.generated.rst: $(top_builddir)/lib/libvmod_directors/vmod_directors.rst
cp $(top_builddir)/lib/libvmod_directors/vmod_directors.rst $@
-BUILT_SOURCES += include/vmod_directors.generated.rst
+RST_BUILT += include/vmod_directors.generated.rst
include/vmod_purge.generated.rst: $(top_builddir)/lib/libvmod_purge/vmod_purge.rst
cp $(top_builddir)/lib/libvmod_purge/vmod_purge.rst $@
-BUILT_SOURCES += include/vmod_purge.generated.rst
+RST_BUILT += include/vmod_purge.generated.rst
include/vmod_vtc.generated.rst: $(top_builddir)/lib/libvmod_vtc/vmod_vtc.rst
cp $(top_builddir)/lib/libvmod_vtc/vmod_vtc.rst $@
-BUILT_SOURCES += include/vmod_vtc.generated.rst
+RST_BUILT += include/vmod_vtc.generated.rst
include/vmod_blob.generated.rst: $(top_builddir)/lib/libvmod_blob/vmod_blob.rst
cp $(top_builddir)/lib/libvmod_blob/vmod_blob.rst $@
-BUILT_SOURCES += include/vmod_blob.generated.rst
+RST_BUILT += include/vmod_blob.generated.rst
include/vmod_cookie.generated.rst: $(top_builddir)/lib/libvmod_cookie/vmod_cookie.rst
cp $(top_builddir)/lib/libvmod_cookie/vmod_cookie.rst $@
-BUILT_SOURCES += include/vmod_cookie.generated.rst
+RST_BUILT += include/vmod_cookie.generated.rst
include/vmod_unix.generated.rst: $(top_builddir)/lib/libvmod_unix/vmod_unix.rst
cp $(top_builddir)/lib/libvmod_unix/vmod_unix.rst $@
-BUILT_SOURCES += include/vmod_unix.generated.rst
+RST_BUILT += include/vmod_unix.generated.rst
include/vmod_proxy.generated.rst: $(top_builddir)/lib/libvmod_proxy/vmod_proxy.rst
cp $(top_builddir)/lib/libvmod_proxy/vmod_proxy.rst $@
-BUILT_SOURCES += include/vmod_proxy.generated.rst
+RST_BUILT += include/vmod_proxy.generated.rst
+
+EXTRA_DIST += $(RST_BUILT)
+BUILT_SOURCES += $(RST_BUILT)
+CLEANFILES = $(RST_BUILT)
-EXTRA_DIST += $(BUILT_SOURCES)
-CLEANFILES = $(BUILT_SOURCES)
.NOPATH: $(BUILT_SOURCES)
More information about the varnish-commit
mailing list