diff options
Diffstat (limited to 'parallel-build.patch')
| -rw-r--r-- | parallel-build.patch | 169 |
1 files changed, 169 insertions, 0 deletions
diff --git a/parallel-build.patch b/parallel-build.patch new file mode 100644 index 0000000..d6fa42d --- /dev/null +++ b/parallel-build.patch @@ -0,0 +1,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 |
