1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
|
Description: generated code multiple outputs
Fix one point of parallel building breakage.
Author: Obey Arthur Liu <arthur@milliways.fr>
Last-Update: 2009-12-28
--- a/libsrc/plugin/Makefile.am
+++ b/libsrc/plugin/Makefile.am
@@ -93,16 +93,35 @@ 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_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: Makefile.am gen_all_gates.sh gen_gate.sh gate_virtuoso.h plugin_lang25.h plugin_msdtc.h
- cd $(top_srcdir)/libsrc/plugin; $(SHELL) $(srcdir)/gen_all_gates.sh
- -rm -rf tmp
- touch .generated
+$(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
# ----------------------------------------------------------------------
#
|