syncevolution/src/dbus/interfaces/interfaces.am
Patrick Ohly 83dcba8486 autotools: fix race condition related to src/dbus/interfaces docs
Only saw this once in nightly testing and couldn't reproduce it:

$ make -j 16
perl /data/runtests/work/sources/syncevolution/src/syncevo/readme2c.pl
    /data/runtests/work/sources/syncevolution/README.rst
    >src/syncevo/CmdlineHelp.c
/usr/bin/xsltproc -o src/dbus/interfaces/syncevo-server-doc.xml
    /data/runtests/work/sources/syncevolution/src/dbus/interfaces/spec-to-docbook.xsl
    /data/runtests/work/sources/syncevolution/src/dbus/interfaces/syncevo-server-full.xml
/usr/bin/xsltproc -o src/dbus/interfaces/syncevo-connection-doc.xml
    /data/runtests/work/sources/syncevolution/src/dbus/interfaces/spec-to-docbook.xsl
    /data/runtests/work/sources/syncevolution/src/dbus/interfaces/syncevo-connection-full.xml
/usr/bin/xsltproc -o src/dbus/interfaces/syncevo-session-doc.xml
    /data/runtests/work/sources/syncevolution/src/dbus/interfaces/spec-to-docbook.xsl
    /data/runtests/work/sources/syncevolution/src/dbus/interfaces/syncevo-session-full.xml
/usr/bin/glib-genmarshal
    /data/runtests/work/sources/syncevolution/src/dbus/glib/syncevo-marshal.list
    --header --prefix=syncevo_marshal > src/dbus/glib/syncevo-marshal.h
runtime error
xsltApplyStylesheet: saving to src/dbus/interfaces/syncevo-session-doc.xml may
    not be possible
/usr/bin/xsltproc -o src/dbus/glib/syncevo-server.xml
    /data/runtests/work/sources/syncevolution/src/dbus/interfaces/spec-strip-docs.xsl
    /data/runtests/work/sources/syncevolution/src/dbus/interfaces/syncevo-server-full.xml
runtime error
xsltApplyStylesheet: saving to src/dbus/interfaces/syncevo-server-doc.xml may
    not be possible
make: *** [src/dbus/interfaces/syncevo-server-doc.xml] Error 9
make: *** Deleting file `src/dbus/interfaces/syncevo-server-doc.xml'
make: *** Waiting for unfinished jobs....
make: *** [src/dbus/interfaces/syncevo-session-doc.xml] Error 9
make: *** Deleting file `src/dbus/interfaces/syncevo-session-doc.xml'

Looks like multiple xsltproc commands ran in parallel and then stepped on each
others toes while creating the src/dbus/interfaces directory, which does not
exist after an out-of-tree configure.

To address the issue, serialize creating that directory by having make create
it as a prerequisite.
2013-09-04 11:09:34 +02:00

56 lines
2 KiB
Text

src/dbus/interfaces/%.xml: src/dbus/interfaces/%-full.xml src/dbus/interfaces/.stamp
$(AM_V_GEN)$(XSLT) -o $@ $(top_srcdir)/src/dbus/interfaces/spec-strip-docs.xsl $<
if COND_DOC
src/dbus/interfaces/%-doc.xml: src/dbus/interfaces/%-full.xml src/dbus/interfaces/.stamp
$(AM_V_GEN)$(XSLT) -o $@ $(top_srcdir)/src/dbus/interfaces/spec-to-docbook.xsl $<
src/dbus/interfaces/syncevo-dbus-api-doc.xml: src/dbus/interfaces/syncevo-server-doc.xml src/dbus/interfaces/syncevo-session-doc.xml src/dbus/interfaces/syncevo-connection-doc.xml
$(AM_V_GEN)echo '<?xml version="1.0" encoding="UTF-8"?>' >$@ \
&& echo '<reference><title>SyncEvolution D-Bus API $(VERSION)</title>' >>$@ \
&& for xml in $+; \
do \
tail -n +2 $$xml >>$@; \
done; \
echo '</reference>' >>$@
src/dbus/interfaces/syncevo-dbus-api-doc.html: src/dbus/interfaces/syncevo-dbus-api-doc.xml build/xsl/html/docbook.xsl src/dbus/interfaces/.stamp
$(AM_V_GEN)$(XSLT) -o $@ $(top_srcdir)/build/xsl/html/docbook.xsl $<
# This serializes the creation of src/dbus/interfaces when using
# out-of-tree builds. xsltproc does this as part of its -o
# implementation, but that failed once when using parallel make (race
# condition?).
src/dbus/interfaces/.stamp:
mkdir -p $(@D)
touch $@
doc_DATA += src/dbus/interfaces/syncevo-dbus-api-doc.html
endif
if COND_DOC
src_dbus_interfaces_built_sources = \
src/dbus/interfaces/syncevo-server-doc.xml \
src/dbus/interfaces/syncevo-connection-doc.xml \
src/dbus/interfaces/syncevo-session-doc.xml \
src/dbus/interfaces/syncevo-dbus-api-doc.xml \
src/dbus/interfaces/syncevo-dbus-api-doc.html
else
src_dbus_interfaces_built_sources =
endif
BUILT_SOURCES += $(src_dbus_interfaces_built_sources)
CLEANFILES += \
$(src_dbus_interfaces_built_sources) \
src/dbus/interfaces/.stamp \
$(NONE)
dist_noinst_DATA += \
src/dbus/interfaces/spec-strip-docs.xsl \
src/dbus/interfaces/spec-to-docbook.xsl \
src/dbus/interfaces/syncevo-connection-full.xml \
src/dbus/interfaces/syncevo-server-full.xml \
src/dbus/interfaces/syncevo-session-full.xml \
src/dbus/interfaces/README