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...

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to