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

package info (click to toggle)
virtuoso-opensource 7.2.5.1%2Bdfsg1-0.1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 284,752 kB
  • sloc: ansic: 641,220; sql: 490,413; xml: 269,570; java: 83,893; javascript: 79,900; cpp: 36,927; sh: 31,648; cs: 25,702; php: 12,690; yacc: 10,227; lex: 7,601; makefile: 7,127; jsp: 4,523; awk: 1,697; perl: 1,013; ruby: 1,003; python: 326
file content (49 lines) | stat: -rw-r--r-- 1,936 bytes parent folder | download | duplicates (2)
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
 
 # ----------------------------------------------------------------------
 #