diff options
author | Sam James <sam@gentoo.org> | 2024-01-22 15:57:36 +0000 |
---|---|---|
committer | Sam James <sam@gentoo.org> | 2024-01-22 15:57:36 +0000 |
commit | 5bc2303601b0dc6bc4113f75292371518f8f2453 (patch) | |
tree | 77a74b090fef6cd74483069f3e9bbd33ca22ac4f /dev-util/pkgconf | |
parent | dev-util/pkgconf: drop 2.0.1, 2.0.2, 2.0.3 (diff) | |
download | gentoo-5bc2303601b0dc6bc4113f75292371518f8f2453.tar.gz gentoo-5bc2303601b0dc6bc4113f75292371518f8f2453.tar.bz2 gentoo-5bc2303601b0dc6bc4113f75292371518f8f2453.zip |
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@gentoo.org>
Diffstat (limited to 'dev-util/pkgconf')
4 files changed, 282 insertions, 0 deletions
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 +} |