summaryrefslogtreecommitdiff
path: root/eclass
diff options
context:
space:
mode:
Diffstat (limited to 'eclass')
-rw-r--r--eclass/eutils.eclass65
-rw-r--r--eclass/preserve-libs.eclass74
2 files changed, 76 insertions, 63 deletions
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-system@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