1 Description: allow building with make -jN
2 without this there are sporadic segmentation faults
4 it seems that when gpre opens a database, it clashes with other gpre
5 processes that have the database open. perhaps this is because at
6 this stage of the build the compiled firebird engine lacks ability for
7 synchronisation. So, wrap all engine-using calls with a lock file
8 Author: Damyan Ivanov <dmn@debian.org>
11 --- a/builds/posix/Makefile.in
12 +++ b/builds/posix/Makefile.in
13 @@ -329,8 +329,8 @@ yachts.lnk: metadata.fdb
15 metadata.fdb: $(RUN_ISQL) $(SRC_ROOT)/dbs/metadata.sql
17 - $(RUN_ISQL) -q -i $(SRC_ROOT)/dbs/metadata.sql
18 - $(RUN_GFIX) -mode read_only $@
19 + $(call LOCK_RUN,$(RUN_ISQL) -q -i $(SRC_ROOT)/dbs/metadata.sql)
20 + $(call LOCK_RUN,$(RUN_GFIX) -mode read_only $@)
24 @@ -339,7 +339,7 @@ $(HELP_FDB): help.fdb
27 help.fdb: $(BLD_ROOT)/misc/help.gbak
28 - $(RUN_GBAK) -MODE read_only -R $< $@
29 + $(call LOCK_RUN,$(RUN_GBAK) -MODE read_only -R $< $@)
32 $(SECURITY_FDB): security.fdb
33 @@ -349,18 +349,18 @@ $(SECURITY_FDB): security.fdb
34 security.fdb: $(SRC_ROOT)/dbs/security.sql
36 -$(RM) $(SECURITY_TMP)
37 - echo create database \'$(SECURITY_TMP)\'\; | $(RUN_ISQL)
38 - $(RUN_GFIX) -write async $(SECURITY_TMP)
39 - $(RUN_ISQL) -i $^ $(SECURITY_TMP)
40 + $(call LOCK_RUN,echo create database \'$(SECURITY_TMP)\'\; | $(RUN_ISQL))
41 + $(call LOCK_RUN,$(RUN_GFIX) -write async $(SECURITY_TMP))
42 + $(call LOCK_RUN,$(RUN_ISQL) -i $^ $(SECURITY_TMP))
43 $(CHMOD) a=rw $(SECURITY_TMP)
44 $(CP) $(SECURITY_TMP) $@
45 - $(RUN_GFIX) -write sync $@
46 + $(call LOCK_RUN,$(RUN_GFIX) -write sync $@)
48 msg.timestamp: $(MSG_FILES)
50 - echo create database \'msg.fdb\'\; | $(RUN_ISQL)
51 - $(RUN_GFIX) -write async msg.fdb
52 - for sql in $(MSG_FILES); do (echo $$sql; $(RUN_ISQL) -i $$sql msg.fdb) || exit; done
53 + $(call LOCK_RUN,echo create database \'msg.fdb\'\; | $(RUN_ISQL))
54 + $(call LOCK_RUN,$(RUN_GFIX) -write async msg.fdb)
55 + $(call LOCK_RUN,for sql in $(MSG_FILES); do (echo $$sql; $(RUN_ISQL) -i $$sql msg.fdb) || exit; done)
59 @@ -528,7 +528,7 @@ codes: gen_codes
62 gen_codes: $(CODES) msg.timestamp
63 - $(CODES) $(SRC_ROOT)/include/gen $(LNG_ROOT)
64 + $(call LOCK_RUN,$(CODES) $(SRC_ROOT)/include/gen $(LNG_ROOT))
66 $(CODES): $(CODES_Objects) $(COMMON_LIB)
67 $(EXE_LINK) $(EXE_LINK_OPTIONS) $^ -o $@ $(FIREBIRD_LIBRARY_LINK) $(LINK_LIBS)
68 @@ -564,7 +564,7 @@ examples: include_generic
69 message_file: $(FIREBIRD_MSG)
71 $(FIREBIRD_MSG): $(BUILD_FILE) msg.timestamp
72 - $(BUILD_FILE) -d msg.fdb -f $@
73 + $(call LOCK_RUN,$(BUILD_FILE) -d msg.fdb -f $@)
76 $(BUILD_FILE): $(BUILD_Objects) $(COMMON_LIB)
77 --- a/builds/posix/make.defaults
78 +++ b/builds/posix/make.defaults
79 @@ -378,6 +378,7 @@ GPRE_BOOT = $(RBIN)/gpre_boot$(EXE
80 GPRE = $(BIN)/gpre$(EXEC_EXT)
81 RUN_GPRE = $(RBIN)/gpre$(EXEC_EXT)
82 GPRE_CURRENT = $(RBIN)/gpre_current$(EXEC_EXT)
83 +LOCK_RUN = sh -x -c "lockfile -1 $(BIN)/build-db.lock && $(subst $$,\$$,$(1)); res=\$$?; rm -f $(BIN)/build-db.lock; exit \$$res"
87 --- a/builds/posix/make.rules
88 +++ b/builds/posix/make.rules
89 @@ -72,17 +72,17 @@ ISQL_GPRE_FLAGS = -m -z -n -ocxx
90 .SUFFIXES: .c .e .epp .cpp
93 - $(GPRE_CURRENT) $(GPRE_FLAGS) $< $@
94 + $(call LOCK_RUN,$(GPRE_CURRENT) $(GPRE_FLAGS) $< $@)
97 $(OBJ)/jrd/%.cpp: $(SRC_ROOT)/jrd/%.epp
98 - $(GPRE_CURRENT) $(JRD_GPRE_FLAGS) $(firstword $<) $@
99 + $(call LOCK_RUN,$(GPRE_CURRENT) $(JRD_GPRE_FLAGS) $(firstword $<) $@)
101 $(OBJ)/isql/%.cpp: $(SRC_ROOT)/isql/%.epp
102 - $(GPRE_CURRENT) $(ISQL_GPRE_FLAGS) $< $@
103 + $(call LOCK_RUN,$(GPRE_CURRENT) $(ISQL_GPRE_FLAGS) $< $@)
105 $(OBJ)/%.cpp: $(SRC_ROOT)/%.epp
106 - $(GPRE_CURRENT) $(GPRE_FLAGS) $(firstword $<) $@
107 + $(call LOCK_RUN,$(GPRE_CURRENT) $(GPRE_FLAGS) $(firstword $<) $@)
110 .SUFFIXES: .lo .o .cpp .c
111 --- a/builds/posix/make.shared.targets
112 +++ b/builds/posix/make.shared.targets
113 @@ -65,13 +65,13 @@ $(OBJ)/dsql/Parser.o $(OBJ)/yvalve/keywo
115 # Special cases for building cpp from epp
116 $(OBJ)/dsql/metd.cpp: $(SRC_ROOT)/dsql/metd.epp
117 - $(GPRE_CURRENT) $(JRD_GPRE_FLAGS) $< $@
118 + $(call LOCK_RUN,$(GPRE_CURRENT) $(JRD_GPRE_FLAGS) $< $@)
120 $(OBJ)/dsql/DdlNodes.cpp: $(SRC_ROOT)/dsql/DdlNodes.epp
121 - $(GPRE_CURRENT) $(JRD_GPRE_FLAGS) $< $@
122 + $(call LOCK_RUN,$(GPRE_CURRENT) $(JRD_GPRE_FLAGS) $< $@)
124 $(OBJ)/dsql/PackageNodes.cpp: $(SRC_ROOT)/dsql/PackageNodes.epp
125 - $(GPRE_CURRENT) $(JRD_GPRE_FLAGS) $< $@
126 + $(call LOCK_RUN,$(GPRE_CURRENT) $(JRD_GPRE_FLAGS) $< $@)
128 # Adding resources as prerequisite for some files
130 --- a/builds/posix/Makefile.in.examples
131 +++ b/builds/posix/Makefile.in.examples
132 @@ -123,8 +123,8 @@ $(EXAMPLES_DEST)% : $(EXAMPLES_SRC)%
134 $(EMPLOYEE_DB): $(EXAMPLES_DEST)/empbuild$(EXEC_EXT) $(INPUT_Sources) $(EXAMPLES_DEST)/isql$(EXEC_EXT)
135 -$(RM) $(EMPLOYEE_DB)
136 - ./empbuild $(EMPLOYEE_DB)
137 - $(GFIX) -write sync $(EMPLOYEE_DB)
138 + $(call LOCK_RUN,./empbuild $(EMPLOYEE_DB))
139 + $(call LOCK_RUN,$(GFIX) -write sync $(EMPLOYEE_DB))
140 -$(CHMOD_6) $(EMPLOYEE_DB)
142 # To get past the fact isql is called from the programs, we create a local link in this directory
143 @@ -140,7 +140,7 @@ $(EXAMPLES_DEST)/empbuild.c: $(EXAMPLES_
145 $(EXAMPLES_DEST)/empbuild.fdb : $(EXAMPLES_DEST)/empddl.sql $(EXAMPLES_DEST)/empbld.sql $(EXAMPLES_DEST)/isql$(EXEC_EXT)
146 -$(RM) $(EXAMPLES_DEST)/empbuild.fdb
147 - $(EXAMPLES_DEST)/isql$(EXEC_EXT) -i empbld.sql
148 + $(call LOCK_RUN,$(EXAMPLES_DEST)/isql$(EXEC_EXT) -i empbld.sql)
150 # The chain for intlemp.fdb is the same a script file to create an empty database
151 # to allow a .e program to be compiled, to then create and populate with data
152 @@ -148,7 +148,7 @@ $(EXAMPLES_DEST)/empbuild.fdb : $(EXAMPL
154 $(EXAMPLES_DEST)/intlemp.fdb: $(EXAMPLES_DEST)/intlbld$(EXEC_EXT) $(INTL_Sources) $(EXAMPLES_DEST)/isql$(EXEC_EXT)
156 - ./intlbld intlemp.fdb
157 + $(call LOCK_RUN,./intlbld intlemp.fdb)
158 -$(CHMOD_6) intlemp.fdb
160 $(EXAMPLES_DEST)/intlbld$(EXEC_EXT): $(INTLBLD_Objects) $(COMMON_LIB)
161 @@ -158,7 +158,7 @@ $(EXAMPLES_DEST)/intlbld.c: $(EXAMPLES_D
163 $(EXAMPLES_DEST)/intlbuild.fdb : $(EXAMPLES_DEST)/intlddl.sql $(EXAMPLES_DEST)/intlbld.sql $(EXAMPLES_DEST)/isql$(EXEC_EXT)
165 - $(EXAMPLES_DEST)/isql$(EXEC_EXT) -i intlbld.sql
166 + $(call LOCK_RUN,$(EXAMPLES_DEST)/isql$(EXEC_EXT) -i intlbld.sql)
169 $(EXAMPLES_DEST)/%.sql: $(EXAMPLES_SRC)/empbuild/%.sql