File: build-generated-code-multiple-outputs.patch

package info (click to toggle)
virtuoso-opensource 6.1.6%2Bdfsg2-4
  • links: PTS, VCS
  • area: main
  • in suites: buster, stretch
  • size: 260,992 kB
  • ctags: 125,220
  • sloc: ansic: 652,748; sql: 458,419; xml: 282,834; java: 61,031; sh: 40,031; cpp: 36,890; cs: 25,240; php: 12,692; yacc: 9,523; lex: 7,018; makefile: 6,157; jsp: 4,484; awk: 1,643; perl: 1,013; ruby: 1,003; python: 326
file content (58 lines) | stat: -rw-r--r-- 2,245 bytes parent folder | download | duplicates (4)
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
50
51
52
53
54
55
56
57
58
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,15 +93,45 @@
 	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
+# 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: 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
+$(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
 
 
 # ----------------------------------------------------------------------