summaryrefslogtreecommitdiffstats
path: root/parallel-build.patch
blob: d6fa42d3d2174e9d3756f5cfb3a211e0e12fe793 (plain)
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
Description: allow building with make -jN
 without this there are sporadic segmentation faults
 .
 it seems that when gpre opens a database, it clashes with other gpre
 processes that have the database open. perhaps this is because at
 this stage of the build the compiled firebird engine lacks ability for
 synchronisation. So, wrap all engine-using calls with a lock file
Author: Damyan Ivanov <dmn@debian.org>
Forwarded: no

--- a/builds/posix/Makefile.in
+++ b/builds/posix/Makefile.in
@@ -300,8 +300,8 @@ yachts.lnk:		metadata.fdb
 
 metadata.fdb:	$(RUN_ISQL) $(SRC_ROOT)/dbs/metadata.sql
 	-$(RM) $@
-	$(RUN_ISQL) -q -i $(SRC_ROOT)/dbs/metadata.sql
-	$(RUN_GFIX) -mode read_only $@
+	$(call LOCK_RUN,$(RUN_ISQL) -q -i $(SRC_ROOT)/dbs/metadata.sql)
+	$(call LOCK_RUN,$(RUN_GFIX) -mode read_only $@)
 	$(CHMOD) 0444 $@
 
 $(HELP_FDB):	help.fdb
@@ -310,7 +310,7 @@ $(HELP_FDB):	help.fdb
 	$(CHMOD) 0444 $@
 
 help.fdb:	$(BLD_ROOT)/misc/help.gbak
-	$(RUN_GBAK) -MODE read_only -R $< $@
+	$(call LOCK_RUN,$(RUN_GBAK) -MODE read_only -R $< $@)
 	$(CHMOD) 0444 $@
 
 $(SECURITY_FDB):	security.fdb
@@ -320,18 +320,18 @@ $(SECURITY_FDB):	security.fdb
 security.fdb:	$(SRC_ROOT)/dbs/security.sql
 	-$(RM) $@
 	-$(RM) $(SECURITY_TMP)
-	echo create database \'$(SECURITY_TMP)\'\; | $(RUN_ISQL)
-	$(RUN_GFIX) -write async $(SECURITY_TMP)
-	$(RUN_ISQL) -i $^ $(SECURITY_TMP)
+	$(call LOCK_RUN,echo create database \'$(SECURITY_TMP)\'\; | $(RUN_ISQL))
+	$(call LOCK_RUN,$(RUN_GFIX) -write async $(SECURITY_TMP))
+	$(call LOCK_RUN,$(RUN_ISQL) -i $^ $(SECURITY_TMP))
 	$(CHMOD) a=rw $(SECURITY_TMP)
 	$(CP) $(SECURITY_TMP) $@
-	$(RUN_GFIX) -write sync $@
+	$(call LOCK_RUN,$(RUN_GFIX) -write sync $@)
 
 msg.timestamp:	$(MSG_FILES)
 	-$(RM) msg.fdb
-	echo create database \'msg.fdb\'\; | $(RUN_ISQL)
-	$(RUN_GFIX) -write async msg.fdb
-	for sql in $(MSG_FILES); do (echo $$sql; $(RUN_ISQL) -i $$sql msg.fdb) || exit; done
+	$(call LOCK_RUN,echo create database \'msg.fdb\'\; | $(RUN_ISQL))
+	$(call LOCK_RUN,$(RUN_GFIX) -write async msg.fdb)
+	$(call LOCK_RUN,for sql in $(MSG_FILES); do (echo $$sql; $(RUN_ISQL) -i $$sql msg.fdb) || exit; done)
 	$(TOUCH) $@
 
 
@@ -499,7 +499,7 @@ codes:	gen_codes
 ids:	$(IDS)
 
 gen_codes:	$(CODES) msg.timestamp
-	$(CODES) $(SRC_ROOT)/include/gen $(LNG_ROOT)
+	$(call LOCK_RUN,$(CODES) $(SRC_ROOT)/include/gen $(LNG_ROOT))
 
 $(CODES):	$(CODES_Objects) $(COMMON_LIB)
 	$(EXE_LINK) $(EXE_LINK_OPTIONS) $^ -o $@ $(FIREBIRD_LIBRARY_LINK) $(LINK_LIBS)
@@ -535,7 +535,7 @@ examples: include_generic
 message_file:	$(FIREBIRD_MSG)
 
 $(FIREBIRD_MSG):	$(BUILD_FILE) msg.timestamp
-	$(BUILD_FILE) -d msg.fdb -f $@
+	$(call LOCK_RUN,$(BUILD_FILE) -d msg.fdb -f $@)
 	$(CHMOD_6) $@
 
 $(BUILD_FILE):	$(BUILD_Objects) $(COMMON_LIB)
--- a/builds/posix/make.defaults
+++ b/builds/posix/make.defaults
@@ -371,6 +371,7 @@ GPRE_BOOT       = $(RBIN)/gpre_boot$(EXE
 GPRE            = $(BIN)/gpre$(EXEC_EXT)
 RUN_GPRE        = $(RBIN)/gpre$(EXEC_EXT)
 GPRE_CURRENT    = $(RBIN)/gpre_current$(EXEC_EXT)
+LOCK_RUN        = sh -x -c "lockfile -1 $(BIN)/build-db.lock && $(subst $$,\$$,$(1)); res=\$$?; rm -f $(BIN)/build-db.lock; exit \$$res"
 
 
 # From msgs
--- a/builds/posix/make.rules
+++ b/builds/posix/make.rules
@@ -68,17 +68,17 @@ ISQL_GPRE_FLAGS = -m -z -n -ocxx
 .SUFFIXES: .c .e .epp .cpp
 
 .e.c:
-	$(GPRE_CURRENT) $(GPRE_FLAGS) $< $@
+	$(call LOCK_RUN,$(GPRE_CURRENT) $(GPRE_FLAGS) $< $@)
 
 
 $(OBJ)/jrd/%.cpp: $(SRC_ROOT)/jrd/%.epp
-	$(GPRE_CURRENT) $(JRD_GPRE_FLAGS) $(firstword $<) $@
+	$(call LOCK_RUN,$(GPRE_CURRENT) $(JRD_GPRE_FLAGS) $(firstword $<) $@)
 
 $(OBJ)/isql/%.cpp: $(SRC_ROOT)/isql/%.epp
-	$(GPRE_CURRENT) $(ISQL_GPRE_FLAGS) $< $@
+	$(call LOCK_RUN,$(GPRE_CURRENT) $(ISQL_GPRE_FLAGS) $< $@)
 
 $(OBJ)/%.cpp: $(SRC_ROOT)/%.epp
-	$(GPRE_CURRENT) $(GPRE_FLAGS) $(firstword $<) $@
+	$(call LOCK_RUN,$(GPRE_CURRENT) $(GPRE_FLAGS) $(firstword $<) $@)
 
 
 .SUFFIXES: .lo .o .cpp .c
--- a/builds/posix/make.shared.targets
+++ b/builds/posix/make.shared.targets
@@ -65,13 +65,13 @@ $(OBJ)/dsql/Parser.o $(OBJ)/yvalve/keywo
 
 # Special cases for building cpp from epp
 $(OBJ)/dsql/metd.cpp: $(SRC_ROOT)/dsql/metd.epp
-	$(GPRE_CURRENT) $(JRD_GPRE_FLAGS) $< $@
+	$(call LOCK_RUN,$(GPRE_CURRENT) $(JRD_GPRE_FLAGS) $< $@)
 
 $(OBJ)/dsql/DdlNodes.cpp: $(SRC_ROOT)/dsql/DdlNodes.epp
-	$(GPRE_CURRENT) $(JRD_GPRE_FLAGS) $< $@
+	$(call LOCK_RUN,$(GPRE_CURRENT) $(JRD_GPRE_FLAGS) $< $@)
 
 $(OBJ)/dsql/PackageNodes.cpp: $(SRC_ROOT)/dsql/PackageNodes.epp
-	$(GPRE_CURRENT) $(JRD_GPRE_FLAGS) $< $@
+	$(call LOCK_RUN,$(GPRE_CURRENT) $(JRD_GPRE_FLAGS) $< $@)
 
 # Adding resources as prerequisite for some files
 
--- a/builds/posix/Makefile.in.examples
+++ b/builds/posix/Makefile.in.examples
@@ -123,8 +123,8 @@ $(EXAMPLES_DEST)% : $(EXAMPLES_SRC)%
 
 $(EMPLOYEE_DB):	$(EXAMPLES_DEST)/empbuild$(EXEC_EXT) $(INPUT_Sources) $(EXAMPLES_DEST)/isql$(EXEC_EXT)
 	-$(RM) $(EMPLOYEE_DB)
-	./empbuild $(EMPLOYEE_DB)
-	$(GFIX) -write sync $(EMPLOYEE_DB)
+	$(call LOCK_RUN,./empbuild $(EMPLOYEE_DB))
+	$(call LOCK_RUN,$(GFIX) -write sync $(EMPLOYEE_DB))
 	-$(CHMOD_6) $(EMPLOYEE_DB)
 
 # To get past the fact isql is called from the programs, we create a local link in this directory
@@ -140,7 +140,7 @@ $(EXAMPLES_DEST)/empbuild.c:	$(EXAMPLES_
 
 $(EXAMPLES_DEST)/empbuild.fdb : $(EXAMPLES_DEST)/empddl.sql $(EXAMPLES_DEST)/empbld.sql $(EXAMPLES_DEST)/isql$(EXEC_EXT)
 	-$(RM) $(EXAMPLES_DEST)/empbuild.fdb
-	$(EXAMPLES_DEST)/isql$(EXEC_EXT) -i empbld.sql
+	$(call LOCK_RUN,$(EXAMPLES_DEST)/isql$(EXEC_EXT) -i empbld.sql)
 
 # The chain for intlemp.fdb is the same a script file to create an empty database
 # to allow a .e program to be compiled, to then create and populate with data
@@ -148,7 +148,7 @@ $(EXAMPLES_DEST)/empbuild.fdb : $(EXAMPL
 
 $(EXAMPLES_DEST)/intlemp.fdb:	$(EXAMPLES_DEST)/intlbld$(EXEC_EXT) $(INTL_Sources) $(EXAMPLES_DEST)/isql$(EXEC_EXT)
 	-$(RM) intlemp.fdb
-	./intlbld intlemp.fdb
+	$(call LOCK_RUN,./intlbld intlemp.fdb)
 	-$(CHMOD_6) intlemp.fdb
 
 $(EXAMPLES_DEST)/intlbld$(EXEC_EXT): $(INTLBLD_Objects) $(COMMON_LIB)
@@ -158,7 +158,7 @@ $(EXAMPLES_DEST)/intlbld.c:	$(EXAMPLES_D
 
 $(EXAMPLES_DEST)/intlbuild.fdb : $(EXAMPLES_DEST)/intlddl.sql $(EXAMPLES_DEST)/intlbld.sql $(EXAMPLES_DEST)/isql$(EXEC_EXT)
 	-$(RM) intlbuild.fdb
-	$(EXAMPLES_DEST)/isql$(EXEC_EXT) -i intlbld.sql
+	$(call LOCK_RUN,$(EXAMPLES_DEST)/isql$(EXEC_EXT) -i intlbld.sql)
 
 
 $(EXAMPLES_DEST)/%.sql: $(EXAMPLES_SRC)/empbuild/%.sql