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.

Reply via email to