commit:     608ba1baed7f84b08ca089305845a9d12ad6b64b
Author:     Michael Orlitzky <mjo <AT> gentoo <DOT> org>
AuthorDate: Thu Aug 31 01:22:09 2023 +0000
Commit:     Michael Orlitzky <mjo <AT> gentoo <DOT> org>
CommitDate: Thu Aug 31 01:22:18 2023 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=608ba1ba

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 <AT> gentoo.org>

 ...buildsystem-1.9-parallel-pre-post-targets.patch | 72 ++++++++++++++++++++++
 .../netsurf-buildsystem-1.9-r1.ebuild              | 28 +++++++++
 2 files changed, 100 insertions(+)

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/[email protected]/thread/NUOLUXAZS2GYBJ3Q5GCTGSYLKOX3MCME/
+
+From 1a6171aa8fd69b20f5c7d2be31ab00539adae959 Mon Sep 17 00:00:00 2001
+From: Michael Orlitzky <[email protected]>
+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
+}

Reply via email to