public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Sam James" <sam@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] repo/gentoo:master commit in: dev-util/pkgconf/files/, dev-util/pkgconf/
Date: Mon, 22 Jan 2024 15:59:12 +0000 (UTC)	[thread overview]
Message-ID: <1705939056.5bc2303601b0dc6bc4113f75292371518f8f2453.sam@gentoo> (raw)

commit:     5bc2303601b0dc6bc4113f75292371518f8f2453
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Mon Jan 22 15:57:36 2024 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Mon Jan 22 15:57:36 2024 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=5bc23036

dev-util/pkgconf: backport upstream fixes, add Google performance fix

* Backport upstream fixes for --modversion
* Pull in pending upstream PR for poor performance hit by Google
* Pull in another pending upstream PR which adds another test for a previously
  problematic area

Bug: https://bugs.gentoo.org/912843
Signed-off-by: Sam James <sam <AT> gentoo.org>

 .../pkgconf/files/pkgconf-2.1.0-digraph-test.patch | 41 ++++++++++
 .../files/pkgconf-2.1.0-fix-modversion.patch       | 95 ++++++++++++++++++++++
 .../files/pkgconf-2.1.0-traverse-only-once.patch   | 71 ++++++++++++++++
 dev-util/pkgconf/pkgconf-2.1.0-r1.ebuild           | 75 +++++++++++++++++
 4 files changed, 282 insertions(+)

diff --git a/dev-util/pkgconf/files/pkgconf-2.1.0-digraph-test.patch b/dev-util/pkgconf/files/pkgconf-2.1.0-digraph-test.patch
new file mode 100644
index 000000000000..90232ab4c15b
--- /dev/null
+++ b/dev-util/pkgconf/files/pkgconf-2.1.0-digraph-test.patch
@@ -0,0 +1,41 @@
+https://github.com/pkgconf/pkgconf/pull/340
+
+From db387172ac5fe2a3118945bf45bd90d8a2efeaf4 Mon Sep 17 00:00:00 2001
+From: Kai Pastor <dg0yt@darc.de>
+Date: Wed, 17 Jan 2024 18:28:38 +0100
+Subject: [PATCH] Test digraph completeness for private-libs-duplication
+
+Complements 45073b7.
+--- a/tests/requires.sh
++++ b/tests/requires.sh
+@@ -10,6 +10,7 @@ tests_init \
+ 	argv_parse2 \
+ 	static_cflags \
+ 	private_duplication \
++	private_duplication_digraph \
+ 	libs_static2 \
+ 	missing \
+ 	requires_internal \
+@@ -73,6 +74,21 @@ private_duplication_body()
+ 		pkgconf --static --libs-only-l private-libs-duplication
+ }
+ 
++private_duplication_digraph_body()
++{
++	export PKG_CONFIG_PATH="${selfdir}/lib1"
++	atf_check \
++		-o 'match:"virtual:world" -> "private-libs-duplication"' \
++		-o 'match:"virtual:world" -> "bar"' \
++		-o 'match:"virtual:world" -> "baz"' \
++		-o 'match:"virtual:world" -> "foo"' \
++		-o 'match:"private-libs-duplication" -> "bar"' \
++		-o 'match:"private-libs-duplication" -> "baz"' \
++		-o 'match:"bar" -> "foo"' \
++		-o 'match:"baz" -> "foo"' \
++		pkgconf --static --libs-only-l private-libs-duplication --digraph
++}
++
+ libs_static2_body()
+ {
+ 	export PKG_CONFIG_PATH="${selfdir}/lib1"
+

diff --git a/dev-util/pkgconf/files/pkgconf-2.1.0-fix-modversion.patch b/dev-util/pkgconf/files/pkgconf-2.1.0-fix-modversion.patch
new file mode 100644
index 000000000000..3336a455794f
--- /dev/null
+++ b/dev-util/pkgconf/files/pkgconf-2.1.0-fix-modversion.patch
@@ -0,0 +1,95 @@
+https://github.com/pkgconf/pkgconf/issues/335
+https://github.com/pkgconf/pkgconf/issues/332
+https://github.com/pkgconf/pkgconf/issues/317
+https://github.com/pkgconf/pkgconf/pull/336
+
+https://github.com/pkgconf/pkgconf/commit/125af82dbe93eddadb7ec10eebac5087e9fbc451
+https://github.com/pkgconf/pkgconf/commit/b2f8386c32d1cb4dfa8f51c619c0c2a56a3544d6
+https://github.com/pkgconf/pkgconf/commit/5825e2c6d608ef74a97349e81d750ab95c53cf50
+
+From 9a5c9be4ccef66a80df7533e00e525f87ff2fb01 Mon Sep 17 00:00:00 2001
+From: Kai Pastor <dg0yt@darc.de>
+Date: Fri, 1 Dec 2023 21:20:39 +0100
+Subject: [PATCH 1/3] Test --modversion with constraint
+
+--- a/tests/regress.sh
++++ b/tests/regress.sh
+@@ -27,6 +27,9 @@ tests_init \
+ 	modversion_fullpath \
+ 	modversion_provides \
+ 	modversion_uninstalled \
++	modversion_one_word_expression \
++	modversion_two_word_expression \
++	modversion_three_word_expression \
+ 	pcpath \
+ 	virtual_variable \
+ 	fragment_collision \
+@@ -301,3 +304,21 @@ modversion_uninstalled_body()
+ 	atf_check -o inline:"1.2.3\n" \
+ 		pkgconf --with-path="${selfdir}/lib1" --modversion omg
+ }
++
++modversion_one_word_expression_body()
++{
++	atf_check -o inline:"1.2.3\n" \
++		pkgconf --with-path="${selfdir}/lib1" --modversion "foo > 1.0"
++}
++
++modversion_two_word_expression_body()
++{
++	atf_check -o inline:"1.2.3\n" \
++		pkgconf --with-path="${selfdir}/lib1" --modversion foo "> 1.0"
++}
++
++modversion_three_word_expression_body()
++{
++	atf_check -o inline:"1.2.3\n" \
++		pkgconf --with-path="${selfdir}/lib1" --modversion foo ">" 1.0
++}
+
+From 0d4e6fa01074f5e540a7d89731edf44751bd17fc Mon Sep 17 00:00:00 2001
+From: Kai Pastor <dg0yt@darc.de>
+Date: Fri, 1 Dec 2023 21:50:46 +0100
+Subject: [PATCH 2/3] Fix --modversion output
+
+--- a/cli/main.c
++++ b/cli/main.c
+@@ -333,7 +333,12 @@ apply_modversion(pkgconf_client_t *client, pkgconf_pkg_t *world, void *data, int
+ 			pkgconf_dependency_t *dep = world_iter->data;
+ 			pkgconf_pkg_t *pkg = dep->match;
+ 
+-			if (strcmp(pkg->why, queue_node->package))
++			const size_t name_len = strlen(pkg->why);
++			if (name_len > strlen(queue_node->package) ||
++			    strncmp(pkg->why, queue_node->package, name_len) ||
++			    (queue_node->package[name_len] != 0 &&
++			     !isspace(queue_node->package[name_len]) &&
++			     !PKGCONF_IS_OPERATOR_CHAR(queue_node->package[name_len])))
+ 				continue;
+ 
+ 			if (pkg->version != NULL) {
+
+From ace73a690437488baea28130c98f0b1eaab4689e Mon Sep 17 00:00:00 2001
+From: Kai Pastor <dg0yt@darc.de>
+Date: Fri, 1 Dec 2023 22:12:20 +0100
+Subject: [PATCH 3/3] Fix crash on two-word expressions
+
+--- a/cli/main.c
++++ b/cli/main.c
+@@ -1405,6 +1405,15 @@ main(int argc, char *argv[])
+ 			pkgconf_queue_push(&pkgq, package);
+ 			pkg_optind++;
+ 		}
++		else if (argv[pkg_optind + 2] == NULL)
++		{
++			char packagebuf[PKGCONF_BUFSIZE];
++
++			snprintf(packagebuf, sizeof packagebuf, "%s %s", package, argv[pkg_optind + 1]);
++			pkg_optind += 2;
++
++			pkgconf_queue_push(&pkgq, packagebuf);
++		}
+ 		else
+ 		{
+ 			char packagebuf[PKGCONF_BUFSIZE];
+

diff --git a/dev-util/pkgconf/files/pkgconf-2.1.0-traverse-only-once.patch b/dev-util/pkgconf/files/pkgconf-2.1.0-traverse-only-once.patch
new file mode 100644
index 000000000000..80eab2485e1e
--- /dev/null
+++ b/dev-util/pkgconf/files/pkgconf-2.1.0-traverse-only-once.patch
@@ -0,0 +1,71 @@
+https://issuetracker.google.com/issues/317357322
+https://bugs.gentoo.org/912843
+https://github.com/pkgconf/pkgconf/pull/339
+
+From 478199b425b46e9dae36bb174f1bd08bf3ffb0f1 Mon Sep 17 00:00:00 2001
+From: Yi Chou <yich@google.com>
+Date: Fri, 22 Dec 2023 00:13:31 +0800
+Subject: [PATCH] Use traverse_id to prevent traverse pkgdep twice
+
+--- a/libpkgconf/libpkgconf.h
++++ b/libpkgconf/libpkgconf.h
+@@ -137,6 +137,8 @@ struct pkgconf_path_ {
+ #define PKGCONF_PKG_PROPF_CACHED		0x02
+ #define PKGCONF_PKG_PROPF_UNINSTALLED		0x08
+ #define PKGCONF_PKG_PROPF_VIRTUAL		0x10
++#define PKGCONF_PKG_PROPF_VISITED		0x20
++#define PKGCONF_PKG_PROPF_VISITED_PRIVATE	0x40
+ 
+ struct pkgconf_pkg_ {
+ 	int refcount;
+@@ -176,6 +178,7 @@ struct pkgconf_pkg_ {
+ 
+ 	uint64_t serial;
+ 	uint64_t identifier;
++	uint64_t traverse_id;
+ };
+ 
+ typedef bool (*pkgconf_pkg_iteration_func_t)(const pkgconf_pkg_t *pkg, void *data);
+@@ -212,6 +215,7 @@ struct pkgconf_client_ {
+ 
+ 	uint64_t serial;
+ 	uint64_t identifier;
++	uint64_t traverse_id;
+ 
+ 	pkgconf_pkg_t **cache_table;
+ 	size_t cache_count;
+--- a/libpkgconf/pkg.c
++++ b/libpkgconf/pkg.c
+@@ -1628,6 +1628,21 @@ pkgconf_pkg_traverse_main(pkgconf_client_t *client,
+ 	if (maxdepth == 0)
+ 		return eflags;
+ 
++	unsigned int visited_flag = (client->flags & PKGCONF_PKG_PKGF_ITER_PKG_IS_PRIVATE) ? PKGCONF_PKG_PROPF_VISITED_PRIVATE : PKGCONF_PKG_PROPF_VISITED;
++
++	if (root->traverse_id == client->traverse_id)
++	{
++		if (root->flags & visited_flag)
++			return eflags;
++	}
++	else
++	{
++		root->traverse_id = client->traverse_id;
++		root->flags &= ~(PKGCONF_PKG_PROPF_VISITED | PKGCONF_PKG_PROPF_VISITED_PRIVATE);
++	}
++
++	root->flags |= visited_flag;
++
+ 	PKGCONF_TRACE(client, "%s: level %d, serial %"PRIu64, root->id, maxdepth, client->serial);
+ 
+ 	if ((root->flags & PKGCONF_PKG_PROPF_VIRTUAL) != PKGCONF_PKG_PROPF_VIRTUAL || (client->flags & PKGCONF_PKG_PKGF_SKIP_ROOT_VIRTUAL) != PKGCONF_PKG_PKGF_SKIP_ROOT_VIRTUAL)
+@@ -1672,6 +1687,9 @@ pkgconf_pkg_traverse(pkgconf_client_t *client,
+ 	int maxdepth,
+ 	unsigned int skip_flags)
+ {
++	static uint64_t traverse_id = 0;
++	client->traverse_id = ++traverse_id;
++
+ 	if (root->flags & PKGCONF_PKG_PROPF_VIRTUAL)
+ 		client->serial++;
+ 
+

diff --git a/dev-util/pkgconf/pkgconf-2.1.0-r1.ebuild b/dev-util/pkgconf/pkgconf-2.1.0-r1.ebuild
new file mode 100644
index 000000000000..7ad7f087b464
--- /dev/null
+++ b/dev-util/pkgconf/pkgconf-2.1.0-r1.ebuild
@@ -0,0 +1,75 @@
+# Copyright 2012-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit multilib multilib-minimal
+
+if [[ ${PV} == 9999 ]] ; then
+	inherit autotools git-r3
+	EGIT_REPO_URI="https://gitea.treehouse.systems/ariadne/pkgconf.git"
+else
+	SRC_URI="https://distfiles.ariadne.space/${PN}/${P}.tar.xz"
+	KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~amd64-linux ~arm64-macos ~ppc-macos ~x64-macos ~x64-solaris"
+fi
+
+DESCRIPTION="pkg-config compatible replacement with no dependencies other than C99"
+HOMEPAGE="https://gitea.treehouse.systems/ariadne/pkgconf"
+
+LICENSE="ISC"
+SLOT="0/4"
+IUSE="test"
+
+RESTRICT="!test? ( test )"
+
+BDEPEND="
+	test? (
+		dev-libs/atf
+		dev-util/kyua
+	)
+"
+RDEPEND="!dev-util/pkgconfig"
+
+PATCHES=(
+	"${FILESDIR}"/${PN}-2.1.0-fix-modversion.patch
+	"${FILESDIR}"/${PN}-2.1.0-digraph-test.patch
+	"${FILESDIR}"/${PN}-2.1.0-traverse-only-once.patch
+)
+
+src_prepare() {
+	default
+
+	[[ ${PV} == 9999 ]] && eautoreconf
+
+	MULTILIB_CHOST_TOOLS=(
+		/usr/bin/pkgconf$(get_exeext)
+		/usr/bin/pkg-config$(get_exeext)
+	)
+}
+
+multilib_src_configure() {
+	local myeconfargs=(
+		--with-system-includedir="${EPREFIX}/usr/include"
+		--with-system-libdir="${EPREFIX}/$(get_libdir):${EPREFIX}/usr/$(get_libdir)"
+	)
+
+	ECONF_SOURCE="${S}" econf "${myeconfargs[@]}"
+}
+
+multilib_src_test() {
+	unset PKG_CONFIG_LIBDIR PKG_CONFIG_PATH
+	default
+}
+
+multilib_src_install() {
+	default
+
+	dosym pkgconf$(get_exeext) /usr/bin/pkg-config$(get_exeext)
+	dosym pkgconf.1 /usr/share/man/man1/pkg-config.1
+}
+
+multilib_src_install_all() {
+	einstalldocs
+
+	find "${ED}" -type f -name '*.la' -delete || die
+}


             reply	other threads:[~2024-01-22 15:59 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-01-22 15:59 Sam James [this message]
  -- strict thread matches above, loose matches on Subject: below --
2024-03-04 12:11 [gentoo-commits] repo/gentoo:master commit in: dev-util/pkgconf/files/, dev-util/pkgconf/ Sam James
2021-08-04 19:47 Mike Gilbert

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1705939056.5bc2303601b0dc6bc4113f75292371518f8f2453.sam@gentoo \
    --to=sam@gentoo.org \
    --cc=gentoo-commits@lists.gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox