Mailing List Archive

[PATCH] db-use.eclass: EAPI 8 support
This also includes the following cleanups:
- Drop support for undocumented banned EAPIs.
- Properly document functions for manpage generation.
- Make syntax errors fatal.
- Support cross-compiling.
- Allow db_findver to accept zero arguments for consistency.
- Use modern Gentoo bash conventions.

Signed-off-by: David Michael <fedora.dm0@gmail.com>
---
eclass/db-use.eclass | 159 ++++++++++++++++---------------------------
1 file changed, 58 insertions(+), 101 deletions(-)

diff --git a/eclass/db-use.eclass b/eclass/db-use.eclass
index d23b08d1999..1df07a8a7ac 100644
--- a/eclass/db-use.eclass
+++ b/eclass/db-use.eclass
@@ -1,129 +1,86 @@
# Copyright 1999-2021 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
-# This is a common location for functions that aid the use of sys-libs/db
-#

# @ECLASS: db-use.eclass
# @MAINTAINER:
# maintainer-needed@gentoo.org
# @AUTHOR:
# Paul de Vrieze <pauldv@gentoo.org>
-# @SUPPORTED_EAPIS: 5 6 7
-# @BLURB: This is a common location for functions that aid the use of sys-libs/db
+# @SUPPORTED_EAPIS: 5 6 7 8
+# @BLURB: functions that aid the use of sys-libs/db
# @DESCRIPTION:
-# This eclass is designed to provide helpful functions for depending on
-# sys-libs/db.
+# This eclass provides helpful functions for depending on sys-libs/db.

-# multilib is used for get_libname in all EAPI
-case "${EAPI:-0}" in
- 0|1|2|3|4|5|6) inherit eapi7-ver multilib ;;
- *) inherit multilib ;;
+case ${EAPI} in
+ 5|6|7|8) ;;
+ *) die "${ECLASS}: EAPI ${EAPI:-0} not supported" ;;
esac

-#Convert a version to a db slot
+# multilib is used for get_libname
+[[ ${EAPI} == [56] ]] && inherit eapi7-ver
+inherit multilib
+
+# @FUNCTION: db_ver_to_slot
+# @USAGE: <version>
+# @DESCRIPTION:
+# Convert a version to a db slot.
db_ver_to_slot() {
- if [ $# -ne 1 ]; then
- eerror "Function db_ver_to_slot needs one argument" >&2
- eerror "args given:" >&2
- for f in $@
- do
- eerror " - \"$@\"" >&2
- done
- return 1
- fi
+ [[ $# -eq 1 ]] || die "${FUNCNAME} needs one argument"
+
# 5.0.x uses 5.0 as slot value, so this replacement will break it;
# older sys-libs/db might have been using this but it's no longer
# the case, so make it work for latest rather than older stuff.
- # echo -n "${1/.0/}"
- echo -n "$1"
+ echo "$1"
}

-#Find the version that correspond to the given atom
+# @FUNCTION: db_findver
+# @USAGE: [atom]
+# @DESCRIPTION:
+# Output the best version that corresponds to the given atom. If no atom is
+# given, sys-libs/db is used by default.
db_findver() {
- has "${EAPI:-0}" 0 1 2 && ! use prefix && EPREFIX=
- if [ $# -ne 1 ]; then
- eerror "Function db_findver needs one argument" >&2
- eerror "args given:" >&2
- for f in $@
- do
- eerror " - \"$@\"" >&2
- done
- return 1
- fi
+ [[ $# -le 1 ]] || die "${FUNCNAME} needs zero or one arguments"

- PKG="$(best_version $1)"
- VER="$(ver_cut 1-2 "${PKG/*db-/}")"
- if [ -d "${EPREFIX}"/usr/include/db$(db_ver_to_slot "$VER") ]; then
- #einfo "Found db version ${VER}" >&2
- echo -n "$VER"
- return 0
- else
- return 1
- fi
+ local pkg=$(best_version "${1:-sys-libs/db}")
+ local ver=$(ver_cut 1-2 "${pkg#*db-}")
+ [[ -d ${ESYSROOT:-${EPREFIX}}/usr/include/db$(db_ver_to_slot "${ver}") ]] || return 1
+ echo "${ver}"
}

-# Get the include dir for berkeley db.
-# This function has two modes. Without any arguments it will give the best
-# version available. With arguments that form the versions of db packages
-# to test for, it will aim to find the library corresponding to it.
-
+# @FUNCTION: db_includedir
+# @USAGE: [version]...
+# @DESCRIPTION:
+# Output the include directory for berkeley db. Without any arguments, it will
+# give the best version available. With a list of versions, it will output the
+# include directory of the first version found.
db_includedir() {
- has "${EAPI:-0}" 0 1 2 && ! use prefix && EPREFIX=
- if [ $# -eq 0 ]; then
- VER="$(db_findver sys-libs/db)" || return 1
- VER="$(db_ver_to_slot "$VER")"
- echo "include version ${VER}" >&2
- if [ -d "${EPREFIX}/usr/include/db${VER}" ]; then
- echo -n "${EPREFIX}/usr/include/db${VER}"
- return 0
- else
- eerror "sys-libs/db package requested, but headers not found" >&2
- return 1
- fi
- else
- #arguments given
- for x in $@
- do
- if VER=$(db_findver "=sys-libs/db-${x}*") &&
- [ -d "${EPREFIX}/usr/include/db$(db_ver_to_slot $VER)" ]; then
- echo -n "${EPREFIX}/usr/include/db$(db_ver_to_slot $VER)"
- return 0
- fi
- done
- eerror "No suitable db version found"
- return 1
- fi
+ local ver
+ for ver in "${@:-}"; do
+ ver=$(db_findver ${ver:+"=sys-libs/db-${ver}*"}) &&
+ ver=$(db_ver_to_slot "${ver}") &&
+ [[ -d ${ESYSROOT:-${EPREFIX}}/usr/include/db${ver} ]] &&
+ echo "${ESYSROOT:-${EPREFIX}}/usr/include/db${ver}" &&
+ return
+ done
+ eerror "No suitable db version found"
+ return 1
}


-# Get the library name for berkeley db. Something like "db-4.2" will be the
-# outcome. This function has two modes. Without any arguments it will give
-# the best version available. With arguments that form the versions of db
-# packages to test for, it will aim to find the library corresponding to it.
-
+# @FUNCTION: db_libname
+# @USAGE: [version]...
+# @DESCRIPTION:
+# Output the library name for berkeley db of the form "db-4.2". Without any
+# arguments, it will give the best version available. With a list of versions,
+# it will output the library name of the first version found.
db_libname() {
- has "${EAPI:-0}" 0 1 2 && ! use prefix && EPREFIX=
- if [ $# -eq 0 ]; then
- VER="$(db_findver sys-libs/db)" || return 1
- if [ -e "${EPREFIX}/usr/$(get_libdir)/libdb-${VER}$(get_libname)" ]; then
- echo -n "db-${VER}"
- return 0
- else
- eerror "sys-libs/db package requested, but library not found" >&2
- return 1
- fi
- else
- #arguments given
- for x in $@
- do
- if VER=$(db_findver "=sys-libs/db-${x}*"); then
- if [ -e "${EPREFIX}/usr/$(get_libdir)/libdb-${VER}$(get_libname)" ]; then
- echo -n "db-${VER}"
- return 0
- fi
- fi
- done
- eerror "No suitable db version found" >&2
- return 1
- fi
+ local ver
+ for ver in "${@:-}"; do
+ ver=$(db_findver ${ver:+"=sys-libs/db-${ver}*"}) &&
+ [[ -e ${ESYSROOT:-${EPREFIX}}/usr/$(get_libdir)/libdb-${ver}$(get_libname) ]] &&
+ echo "db-${ver}" &&
+ return
+ done
+ eerror "No suitable db version found"
+ return 1
}
--
2.31.1