Hi The attached patch drops the drop rtld(GNU_HASH) hack
Drop automatically generated rtld(GNU_HASH) dependencies. It's been provided by glibc for 7 years now and can safely be assumed that there's no longer any need for it, reducing ~5K packages' dependency in repository metadata on it during next rebuild. See you
commit 12d6f89719c06e05ca186ade116608f7ba60c8ae Author: Thierry Vignaud <thierry.vign...@gmail.com> Date: Tue Sep 16 14:52:06 2014 +0200 drop rtld(GNU_HASH) hack Drop automatically generated rtld(GNU_HASH) dependencies. It's been provided by glibc for 7 years now and can safely be assumed that there's no longer any need for it, reducing ~5K packages' dependency in repository metadata on it during next rebuild. basically reverting commit 8b8e27ec diff --git a/lib/tagexts.c b/lib/tagexts.c index 0d2b1d3..2d20fd5 100644 --- a/lib/tagexts.c +++ b/lib/tagexts.c @@ -735,6 +735,27 @@ static int epochnumTag(Header h, rpmtd td, headerGetFlags hgflags) return 1; } +static int depnameTag(Header h, rpmtd td, headerGetFlags hgflags, + rpmTagVal tag) +{ + rpmds ds = rpmdsNew(h, tag, 0); + int ndeps = rpmdsCount(ds); + + if (ndeps > 0) { + char **deps = xmalloc(sizeof(*deps) * ndeps); + int i; + while ((i = rpmdsNext(ds)) >= 0) { + deps[i] = rpmdsN(ds); + } + td->data = deps; + td->type = RPM_STRING_ARRAY_TYPE; + td->count = ndeps; + td->flags |= (RPMTD_ALLOCED | RPMTD_PTR_ALLOCED); + } + rpmdsFree(ds); + return (ndeps > 0); +} + static int depnevrsTag(Header h, rpmtd td, headerGetFlags hgflags, rpmTagVal tag) { @@ -758,6 +779,32 @@ static int depnevrsTag(Header h, rpmtd td, headerGetFlags hgflags, #define RPMSENSE_STRONG (1 << 27) + +static int depnameTagFiltered(Header h, rpmtd td, headerGetFlags hgflags, + rpmTagVal tag, int strong) +{ + rpmds ds = rpmdsNew(h, tag, 0); + int ndeps = rpmdsCount(ds); + + if (ndeps > 0) { + char **deps = xmalloc(sizeof(*deps) * ndeps); + ndeps = 0; + while (rpmdsNext(ds) >= 0) { + if ((rpmdsFlags(ds) & RPMSENSE_STRONG) == (strong ? RPMSENSE_STRONG : 0)) + deps[ndeps++] = rpmdsN(ds); + } + if (ndeps) { + td->data = deps; + td->type = RPM_STRING_ARRAY_TYPE; + td->count = ndeps; + td->flags |= (RPMTD_ALLOCED | RPMTD_PTR_ALLOCED); + } else { + _free(deps); + } + } + rpmdsFree(ds); + return (ndeps > 0); + static int depnevrsTagFiltered(Header h, rpmtd td, headerGetFlags hgflags, rpmTagVal tag, int strong) { @@ -789,6 +836,12 @@ static int requirenevrsTag(Header h, rpmtd td, headerGetFlags hgflags) return depnevrsTag(h, td, hgflags, RPMTAG_REQUIRENAME); } +static int recommendnameTag(Header h, rpmtd td, headerGetFlags hgflags) +{ + return depnameTag(h, td, hgflags, RPMTAG_RECOMMENDNAME) || + depnameTagFiltered(h, td, hgflags, RPMTAG_OLDSUGGESTSNAME, 0); +} + static int recommendnevrsTag(Header h, rpmtd td, headerGetFlags hgflags) { return depnevrsTag(h, td, hgflags, RPMTAG_RECOMMENDNAME) || @@ -875,6 +928,7 @@ static const struct headerTagFunc_s rpmHeaderTagExtensions[] = { { RPMTAG_EPOCHNUM, epochnumTag }, { RPMTAG_INSTFILENAMES, instfilenamesTag }, { RPMTAG_REQUIRENEVRS, requirenevrsTag }, + { RPMTAG_RECOMMENDNAME, recommendnameTag}, { RPMTAG_RECOMMENDNEVRS, recommendnevrsTag}, { RPMTAG_SUGGESTNEVRS, suggestnevrsTag}, { RPMTAG_SUPPLEMENTNEVRS, supplementnevrsTag}, diff --git a/tools/elfdeps.c b/tools/elfdeps.c index cf22cc6..5a25090 100644 --- a/tools/elfdeps.c +++ b/tools/elfdeps.c @@ -306,14 +306,6 @@ static int processFile(const char *fn, int dtype) } /* - * For DSOs which use the .gnu_hash section and don't have a .hash - * section, we need to ensure that we have a new enough glibc. - */ - if (ei->isExec && ei->gotGNUHASH && !ei->gotHASH && !soname_only) { - argvAdd(&ei->requires, "rtld(GNU_HASH)"); - } - - /* * For DSOs, add DT_SONAME as provide. If its missing, we can fake * it from the basename if requested. The bizarre looking DT_DEBUG * check is used to avoid adding basename provides for PIE executables.
_______________________________________________ Rpm-maint mailing list Rpm-maint@lists.rpm.org http://lists.rpm.org/mailman/listinfo/rpm-maint