On 04/01/18 11:36, M. J. Everitt wrote: > On 04/01/18 11:21, David Seifert wrote: >> On Thu, 2018-01-04 at 10:43 +0000, M. J. Everitt wrote: >>> On 04/01/18 10:23, Pacho Ramos wrote: >>>> El mié, 03-01-2018 a las 17:13 +0100, Ulrich Müller escribió: >>>>> Split off functions preserve_old_lib and preserve_old_lib_notify >>>>> from >>>>> eutils.eclass into a dedicated preserve-libs.eclass. These >>>>> functions >>>>> are rarely used and are independent of the rest of eutils, >>>>> therefore >>>>> moving them into their own eclass will help clarifying eclass >>>>> inheritance in ebuilds. >>>>> >>>>> For backwards compatibility, eutils inherits the new eclass in >>>>> existing EAPIs. >>>>> --- >>>>> eclass/eutils.eclass | 65 ++----------------------------- >>>>> -------- >>>>> eclass/preserve-libs.eclass | 74 >>>>> +++++++++++++++++++++++++++++++++++++++++++++ >>>>> 2 files changed, 76 insertions(+), 63 deletions(-) >>>>> create mode 100644 eclass/preserve-libs.eclass >>>>> >>>>> diff --git a/eclass/eutils.eclass b/eclass/eutils.eclass >>>>> index 7d4193e76b51..91d329e99c9e 100644 >>>>> --- a/eclass/eutils.eclass >>>>> +++ b/eclass/eutils.eclass >>>>> @@ -1,4 +1,4 @@ >>>>> -# Copyright 1999-2017 Gentoo Foundation >>>>> +# Copyright 1999-2018 Gentoo Foundation >>>>> # Distributed under the terms of the GNU General Public License >>>>> v2 >>>>> >>>>> # @ECLASS: eutils.eclass >>>>> @@ -20,7 +20,7 @@ _EUTILS_ECLASS=1 >>>>> # implicitly inherited (now split) eclasses >>>>> case ${EAPI:-0} in >>>>> 0|1|2|3|4|5|6) >>>>> - inherit desktop epatch estack ltprune multilib >>>>> toolchain-funcs >>>>> + inherit desktop epatch estack ltprune multilib preserve- >>>>> libs >>>>> toolchain-funcs >>>>> ;; >>>>> esac >>>>> >>>>> @@ -172,67 +172,6 @@ _eutils_eprefix_init() { >>>>> has "${EAPI:-0}" 0 1 2 && : ${ED:=${D}} ${EPREFIX:=} >>>>> ${EROOT:=${ROOT}} >>>>> } >>>>> >>>>> -# @FUNCTION: preserve_old_lib >>>>> -# @USAGE: <libs to preserve> [more libs] >>>>> -# @DESCRIPTION: >>>>> -# These functions are useful when a lib in your package changes >>>>> ABI SONAME. >>>>> -# An example might be from libogg.so.0 to libogg.so.1. Removing >>>>> libogg.so.0 >>>>> -# would break packages that link against it. Most people get >>>>> around this >>>>> -# by using the portage SLOT mechanism, but that is not always a >>>>> relevant >>>>> -# solution, so instead you can call this from pkg_preinst. See >>>>> also the >>>>> -# preserve_old_lib_notify function. >>>>> -preserve_old_lib() { >>>>> - _eutils_eprefix_init >>>>> - if [[ ${EBUILD_PHASE} != "preinst" ]] ; then >>>>> - eerror "preserve_old_lib() must be called from >>>>> pkg_preinst() >>>>> only" >>>>> - die "Invalid preserve_old_lib() usage" >>>>> - fi >>>>> - [[ -z $1 ]] && die "Usage: preserve_old_lib <library to >>>>> preserve> >>>>> [more libraries to preserve]" >>>>> - >>>>> - # let portage worry about it >>>>> - has preserve-libs ${FEATURES} && return 0 >>>>> - >>>>> - local lib dir >>>>> - for lib in "$@" ; do >>>>> - [[ -e ${EROOT}/${lib} ]] || continue >>>>> - dir=${lib%/*} >>>>> - dodir ${dir} || die "dodir ${dir} failed" >>>>> - cp "${EROOT}"/${lib} "${ED}"/${lib} || die "cp >>>>> ${lib} failed" >>>>> - touch "${ED}"/${lib} >>>>> - done >>>>> -} >>>>> - >>>>> -# @FUNCTION: preserve_old_lib_notify >>>>> -# @USAGE: <libs to notify> [more libs] >>>>> -# @DESCRIPTION: >>>>> -# Spit helpful messages about the libraries preserved by >>>>> preserve_old_lib. >>>>> -preserve_old_lib_notify() { >>>>> - if [[ ${EBUILD_PHASE} != "postinst" ]] ; then >>>>> - eerror "preserve_old_lib_notify() must be called >>>>> from >>>>> pkg_postinst() only" >>>>> - die "Invalid preserve_old_lib_notify() usage" >>>>> - fi >>>>> - >>>>> - # let portage worry about it >>>>> - has preserve-libs ${FEATURES} && return 0 >>>>> - >>>>> - _eutils_eprefix_init >>>>> - >>>>> - local lib notice=0 >>>>> - for lib in "$@" ; do >>>>> - [[ -e ${EROOT}/${lib} ]] || continue >>>>> - if [[ ${notice} -eq 0 ]] ; then >>>>> - notice=1 >>>>> - ewarn "Old versions of installed >>>>> libraries were >>>>> detected on your system." >>>>> - ewarn "In order to avoid breaking >>>>> packages that >>>>> depend on these old libs," >>>>> - ewarn "the libraries are not being >>>>> removed. You need >>>>> to run revdep-rebuild" >>>>> - ewarn "in order to remove these old >>>>> dependencies. If >>>>> you do not have this" >>>>> - ewarn "helper program, simply emerge the >>>>> 'gentoolkit' >>>>> package." >>>>> - ewarn >>>>> - fi >>>>> - ewarn " # revdep-rebuild --library '${lib}' && >>>>> rm '${lib}'" >>>>> - done >>>>> -} >>>>> - >>>>> # @FUNCTION: built_with_use >>>>> # @USAGE: [--hidden] [--missing <action>] [-a|-o] <DEPEND ATOM> >>>>> <List of USE >>>>> flags> >>>>> # @DESCRIPTION: >>>>> diff --git a/eclass/preserve-libs.eclass b/eclass/preserve- >>>>> libs.eclass >>>>> new file mode 100644 >>>>> index 000000000000..548c6411fcf0 >>>>> --- /dev/null >>>>> +++ b/eclass/preserve-libs.eclass >>>>> @@ -0,0 +1,74 @@ >>>>> +# Copyright 1999-2018 Gentoo Foundation >>>>> +# Distributed under the terms of the GNU General Public License >>>>> v2 >>>>> + >>>>> +# @ECLASS: preserve-libs.eclass >>>>> +# @MAINTAINER: >>>>> +# base-sys...@gentoo.org >>>>> +# @BLURB: preserve libraries after SONAME changes >>>>> + >>>>> +if [[ -z ${_PRESERVE_LIBS_ECLASS} ]]; then >>>>> +_PRESERVE_LIBS_ECLASS=1 >>>>> + >>>>> +# @FUNCTION: preserve_old_lib >>>>> +# @USAGE: <libs to preserve> [more libs] >>>>> +# @DESCRIPTION: >>>>> +# These functions are useful when a lib in your package changes >>>>> ABI SONAME. >>>>> +# An example might be from libogg.so.0 to libogg.so.1. Removing >>>>> libogg.so.0 >>>>> +# would break packages that link against it. Most people get >>>>> around this >>>>> +# by using the portage SLOT mechanism, but that is not always a >>>>> relevant >>>>> +# solution, so instead you can call this from pkg_preinst. See >>>>> also the >>>>> +# preserve_old_lib_notify function. >>>>> +preserve_old_lib() { >>>>> + if [[ ${EBUILD_PHASE} != "preinst" ]] ; then >>>>> + eerror "preserve_old_lib() must be called from >>>>> pkg_preinst() >>>>> only" >>>>> + die "Invalid preserve_old_lib() usage" >>>>> + fi >>>>> + [[ -z $1 ]] && die "Usage: preserve_old_lib <library to >>>>> preserve> >>>>> [more libraries to preserve]" >>>>> + >>>>> + # let portage worry about it >>>>> + has preserve-libs ${FEATURES} && return 0 >>>>> + >>>>> + has "${EAPI:-0}" 0 1 2 && local ED=${D} EROOT=${ROOT} >>>>> + >>>>> + local lib dir >>>>> + for lib in "$@" ; do >>>>> + [[ -e ${EROOT}/${lib} ]] || continue >>>>> + dir=${lib%/*} >>>>> + dodir ${dir} || die "dodir ${dir} failed" >>>>> + cp "${EROOT}"/${lib} "${ED}"/${lib} || die "cp >>>>> ${lib} failed" >>>>> + touch "${ED}"/${lib} >>>>> + done >>>>> +} >>>>> + >>>>> +# @FUNCTION: preserve_old_lib_notify >>>>> +# @USAGE: <libs to notify> [more libs] >>>>> +# @DESCRIPTION: >>>>> +# Spit helpful messages about the libraries preserved by >>>>> preserve_old_lib. >>>>> +preserve_old_lib_notify() { >>>>> + if [[ ${EBUILD_PHASE} != "postinst" ]] ; then >>>>> + eerror "preserve_old_lib_notify() must be called >>>>> from >>>>> pkg_postinst() only" >>>>> + die "Invalid preserve_old_lib_notify() usage" >>>>> + fi >>>>> + >>>>> + # let portage worry about it >>>>> + has preserve-libs ${FEATURES} && return 0 >>>>> + >>>>> + has "${EAPI:-0}" 0 1 2 && local EROOT=${ROOT} >>>>> + >>>>> + local lib notice=0 >>>>> + for lib in "$@" ; do >>>>> + [[ -e ${EROOT}/${lib} ]] || continue >>>>> + if [[ ${notice} -eq 0 ]] ; then >>>>> + notice=1 >>>>> + ewarn "Old versions of installed >>>>> libraries were >>>>> detected on your system." >>>>> + ewarn "In order to avoid breaking >>>>> packages that >>>>> depend on these old libs," >>>>> + ewarn "the libraries are not being >>>>> removed. You need >>>>> to run revdep-rebuild" >>>>> + ewarn "in order to remove these old >>>>> dependencies. If >>>>> you do not have this" >>>>> + ewarn "helper program, simply emerge the >>>>> 'gentoolkit' >>>>> package." >>>>> + ewarn >>>>> + fi >>>>> + ewarn " # revdep-rebuild --library '${lib}' && >>>>> rm '${lib}'" >>>>> + done >>>>> +} >>>>> + >>>>> +fi >>>> I have seen this is only used by: >>>> app-arch/xz-utils >>>> dev-libs/gmp >>>> dev-libs/libpcre >>>> dev-libs/mpc >>>> dev-libs/mpfr >>>> net-nds/openldap >>>> sys-libs/gdbm >>>> sys-libs/ncurses >>>> sys-libs/readline >>>> sys-process/audit >>>> >>>> Maybe we could deprecate it and try to drop it in the future :/ >>>> >>> Bear in mind several of these packages are in base-system and are >>> stuck >>> around the EAPI3/4 mark and may not be using some of the new EAPI >>> 'features' yet ... >>> >>> Best not kill them off just yet or there'll be no stages to install >>> from >>> .. and releng have only just got the catalyst-3 transition working, >>> with >>> 17.0 profiles to come next .. >>> >>> :] >>> >> Never mind that this has 0 to do with EAPI3/4 or with newer EAPI >> 'features' and is all about the fact that FEATURES=preserve-libs is >> only implemented in Portage, without comparable functionality in >> paludis or pkgcore. >> >> When you don't know why the function exists, prefer not to give advice >> on how to proceed. >> > Oh I -am- sorry .. did I piss in your cornflakes too? XD > > </sarcasm> > Also, in the spirit of #thegentooway .. perhaps instead of posting "bright ideas" or trolling the lists, perhaps if they actually created the appropriate patches, and/or committed them to tree, we wouldn't even by having this discussion.
However ... #thegentooway, as I said :] NB. As a non-dev it would be a complete waste of *my* time even to raise a PR to have it ignored for a few years before someone decided to get around to looking at it...
signature.asc
Description: OpenPGP digital signature