The PRE_TARGETS and POST_TARGETS are supposed to be built before and after $(OBJECTS), respectively -- at least according to the comments in Makefile.top:
# List of targets to run before building $(OBJECT) PRE_TARGETS := # List of targets to run after building $(OBJECT) POST_TARGETS := The default target however builds them at the same time as $(OUTPUT), # Default target all: $(PRE_TARGETS) $(OUTPUT) $(POST_TARGETS) where $(OUTPUT) basically just builds $(OBJECTS): $(OUTPUT): $(BUILDDIR)/stamp $(OBJECTS) ... As a result, there is a race condition when $(OBJECTS) truly requires $(PRE_TARGETS), because they may be built at the same time. The same problem arises the other way around with $(POST_TARGETS). As a demonstration, one can try to build the libsvgtiny shared library directly (note: the details are platform-dependent), $ BD=build-x86_64-pc-linux-gnu-x86_64-pc-linux-gnu-release-lib-shared $ make COMPONENT_TYPE=lib-shared "${BD}/libsvgtiny.so.0.1.7" COMPILE: src/svgtiny.c ... src/svgtiny.c:24:10: fatal error: autogenerated_colors.c: No such file or directory 24 | #include "autogenerated_colors.c" | ^~~~~~~~~~~~~~~~~~~~~~~~ compilation terminated. This is because $(PRE_TARGETS) is not satisfied. In practice, this condition seems hard to hit unintentionally, but it can happen if you are building in parallel and extemely unlucky. A user discovered it in Gentoo bug 711200. The fix simply adds the stated dependencies on $(OBJECTS) and $(POST_TARGETS) to guarantee the correct order. --- makefiles/Makefile.top | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/makefiles/Makefile.top b/makefiles/Makefile.top index caac166..dafdfaa 100644 --- a/makefiles/Makefile.top +++ b/makefiles/Makefile.top @@ -176,6 +176,11 @@ OBJECTS := $(addprefix $(BUILDDIR)/,$(filter %.o, \ $(subst /,_,$(subst .cmhg,.o,$(SOURCES))) \ $(subst /,_,$(subst .s,.o,$(SOURCES))))) +# Ensure that PRE_TARGETS are built before OBJECTS, and POST_TARGETS +# after them. +$(OBJECTS): $(PRE_TARGETS) +$(POST_TARGETS): $(OBJECTS) + bin_for_test = $(addprefix $(BUILDDIR)/,$(firstword $(subst :, ,$(ITEM)))) TEST_BINARIES := $(foreach ITEM,$(TEST_ITEMS),$(bin_for_test)) -- 2.41.0 _______________________________________________ netsurf-dev mailing list -- netsurf-dev@netsurf-browser.org To unsubscribe send an email to netsurf-dev-le...@netsurf-browser.org