build-generated-code-multiple-outputs
authorDebian Krap Maintainers <debian-qt-kde@lists.debian.org>
Mon, 15 Sep 2014 17:48:35 +0000 (17:48 +0000)
committerLisandro Damián Nicanor Pérez Meyer <lisandro@debian.org>
Mon, 15 Sep 2014 17:48:35 +0000 (17:48 +0000)
Gbp-Pq: Name build-generated-code-multiple-outputs.patch

libsrc/plugin/Makefile.am

index 39a431b64cc3b993034e82fe7fea5a1d8fb0d04c..1bac2f17fa49725c4da26a468c94eb3aab124578 100644 (file)
@@ -93,15 +93,45 @@ generated_code = \
        export_gate_virtuoso.c import_gate_virtuoso.c import_gate_virtuoso.h \
        export_plugin_lang25.c import_plugin_lang25.c import_plugin_lang25.h
 
-$(generated_code): .generated
-
-.generated: Makefile.am gen_all_gates.sh gen_gate.sh gate_virtuoso.h plugin_lang25.h plugin_msdtc.h
-       cd $(top_srcdir)/libsrc/plugin; ./gen_all_gates.sh
-       -rm -rf tmp
-       touch .generated
+# This is still wrong:
+# <http://www.gnu.org/software/hello/manual/automake/Multiple-Outputs.html>
+#$(generated_code): .generated
+#
+#.generated: Makefile.am gen_all_gates.sh gen_gate.sh gate_virtuoso.h plugin_lang25.h plugin_msdtc.h
+#      cd $(top_srcdir)/libsrc/plugin; ./gen_all_gates.sh
+#      -rm -rf tmp
+#      touch .generated
+
+# This is correct:
+generated_code-stamp: Makefile gen_all_gates.sh gen_gate.sh gate_virtuoso.h plugin_lang25.h plugin_msdtc.h
+       echo "GENCODE=+= stamp"
+       @rm -f generated_code-temp
+       @touch generated_code-temp
+       @cd $(top_srcdir)/libsrc/plugin; ./gen_all_gates.sh
+       @rm -rf tmp
+       @mv -f generated_code-temp $@
+
+$(generated_code): generated_code-stamp
+       ## Recover from the removal of $@
+       @if test -f $@; then :; else \
+               trap 'rm -rf generated_code-lock generated_code-stamp' 1 2 13 15; \
+               if mkdir generated_code-lock 2>/dev/null; then \
+       ## This code is being executed by the first process.
+       rm -f generated_code-stamp; \
+               echo "GENCODE=+= stamp"; \
+               $(MAKE) $(AM_MAKEFLAGS) generated_code-stamp; \
+               rmdir generated_code-lock; \
+               else \
+       ## This code is being executed by the follower processes.
+       ## Wait until the first process is done.
+               while test -d generated_code-lock; do sleep 1; echo "//+//"; done; \
+       ## Succeed if and only if the first process succeeded.
+               test -f generated_code-stamp; exit $$?; \
+               fi; \
+       fi
 
 BUILT_SOURCES  = $(generated_code)
-DISTCLEANFILES = $(generated_code) .generated
+DISTCLEANFILES = $(generated_code) generated_code-stamp generated_code-lock generated_code-temp
 
 
 # ----------------------------------------------------------------------