diff options
author | Michael Orlitzky <mjo@gentoo.org> | 2023-08-30 21:22:09 -0400 |
---|---|---|
committer | Michael Orlitzky <mjo@gentoo.org> | 2023-08-30 21:22:18 -0400 |
commit | 608ba1baed7f84b08ca089305845a9d12ad6b64b (patch) | |
tree | 7dbf9638745e6b66d9150463f41bfa61aa2c2aa7 /dev-util | |
parent | dev-php/pecl-imagick: add github upstream metadata (diff) | |
download | gentoo-608ba1baed7f84b08ca089305845a9d12ad6b64b.tar.gz gentoo-608ba1baed7f84b08ca089305845a9d12ad6b64b.tar.bz2 gentoo-608ba1baed7f84b08ca089305845a9d12ad6b64b.zip |
dev-util/netsurf-buildsystem: update EAPI 7 -> 8, fix parallel builds
Add a patch (sent upstream but not yet applied) that ensures that the
PRE_ and POST_TARGETS are actually built before and after the targets.
Closes: https://bugs.gentoo.org/711200
Signed-off-by: Michael Orlitzky <mjo@gentoo.org>
Diffstat (limited to 'dev-util')
-rw-r--r-- | dev-util/netsurf-buildsystem/files/netsurf-buildsystem-1.9-parallel-pre-post-targets.patch | 72 | ||||
-rw-r--r-- | dev-util/netsurf-buildsystem/netsurf-buildsystem-1.9-r1.ebuild | 28 |
2 files changed, 100 insertions, 0 deletions
diff --git a/dev-util/netsurf-buildsystem/files/netsurf-buildsystem-1.9-parallel-pre-post-targets.patch b/dev-util/netsurf-buildsystem/files/netsurf-buildsystem-1.9-parallel-pre-post-targets.patch new file mode 100644 index 000000000000..8ae044887356 --- /dev/null +++ b/dev-util/netsurf-buildsystem/files/netsurf-buildsystem-1.9-parallel-pre-post-targets.patch @@ -0,0 +1,72 @@ +https://listmaster.pepperfish.net/hyperkitty/list/netsurf-dev@netsurf-browser.org/thread/NUOLUXAZS2GYBJ3Q5GCTGSYLKOX3MCME/ + +From 1a6171aa8fd69b20f5c7d2be31ab00539adae959 Mon Sep 17 00:00:00 2001 +From: Michael Orlitzky <michael@orlitzky.com> +Date: Mon, 14 Aug 2023 12:43:54 -0400 +Subject: [PATCH] makefiles/Makefile.top: dependencies for PRE_ and + POST_TARGETS + +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 + diff --git a/dev-util/netsurf-buildsystem/netsurf-buildsystem-1.9-r1.ebuild b/dev-util/netsurf-buildsystem/netsurf-buildsystem-1.9-r1.ebuild new file mode 100644 index 000000000000..635607a0256b --- /dev/null +++ b/dev-util/netsurf-buildsystem/netsurf-buildsystem-1.9-r1.ebuild @@ -0,0 +1,28 @@ +# Copyright 1999-2023 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +MY_P="buildsystem-${PV}" +DESCRIPTION="Build system used for netsurf and its libs" +HOMEPAGE="https://www.netsurf-browser.org" +SRC_URI="https://download.netsurf-browser.org/libs/releases/${MY_P}.tar.gz" + +LICENSE="MIT" +SLOT="0" +KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~loong ~ppc ~ppc64 ~riscv ~sparc ~x86" + +S="${WORKDIR}/${MY_P}" + +PATCHES=( "${FILESDIR}/${P}-parallel-pre-post-targets.patch" ) + +src_prepare() { + default + sed -e 's:/bin/which:which:' -i "makefiles/Makefile.tools" || die +} + +src_install() { + emake DESTDIR="${D}" PREFIX="${EPREFIX}/usr" install + insinto /usr/share/netsurf-buildsystem + newins "${FILESDIR}/gentoo-helpers-r2.sh" gentoo-helpers.sh +} |