[PATCH v2 1/6] shell-completion.eclass: include functions of bash-completion-r1.eclass

Florian Schmaus <[email protected]> Thu, 25 Jun 2026 12:04:16 +0200
Newsgroups gmane.linux.gentoo.devel
Message-ID <[email protected]>
Include the functions of bash-completion-r1.eclass instead of
inheriting bash-completion-r1.eclass. The idea is to phase out
bash-completion-r1.eclass in favor of shell-completion.eclass with
EAPI 9.

Signed-off-by: Florian Schmaus <[email protected]>
---
 eclass/shell-completion.eclass | 114 +++++++++++++++++++++++++++++++--
 1 file changed, 110 insertions(+), 4 deletions(-)

diff --git a/eclass/shell-completion.eclass b/eclass/shell-completion.eclass
index caccdee7b19b..225db4123f16 100644
--- a/eclass/shell-completion.eclass
+++ b/eclass/shell-completion.eclass
@@ -1,14 +1,14 @@
-# Copyright 2023-2024 Gentoo Authors
+# Copyright 2023-2026 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 # @ECLASS: shell-completion.eclass
 # @MAINTAINER:
 # Jonas Frei <[email protected]>
 # Florian Schmaus <[email protected]>
+# [email protected]
 # @AUTHOR:
 # Alfred Wingate <[email protected]>
 # @SUPPORTED_EAPIS: 8
-# @PROVIDES: bash-completion-r1
 # @BLURB: a few quick functions to install various shell completion files
 # @DESCRIPTION:
 # This eclass provides a standardised way to install shell completions
@@ -23,8 +23,114 @@ esac
 if [[ -z ${_SHELL_COMPLETION_ECLASS} ]]; then
 _SHELL_COMPLETION_ECLASS=1
 
-# Extend bash-completion-r1
-inherit bash-completion-r1
+inherit toolchain-funcs
+
+# @FUNCTION: _bash-completion-r1_get_bashdir
+# @INTERNAL
+# @DESCRIPTION:
+# First argument is name of the string in bash-completion.pc
+# Second argument is the fallback directory if the string is not found
+# @EXAMPLE:
+# _bash-completion-r1_get_bashdir completionsdir /usr/share/bash-completion
+_bash-completion-r1_get_bashdir() {
+	debug-print-function ${FUNCNAME} "$@"
+
+	if $(tc-getPKG_CONFIG) --exists bash-completion &>/dev/null; then
+		local path
+		path=$($(tc-getPKG_CONFIG) --variable="${1}" bash-completion) || die
+		# we need to return unprefixed, so strip from what pkg-config returns
+		# to us, bug #477692
+		echo "${path#"${EPREFIX}"}"
+	else
+		echo "${2}"
+	fi
+}
+
+# @FUNCTION: _bash-completion-r1_get_bashcompdir
+# @INTERNAL
+# @DESCRIPTION:
+# Get unprefixed bash-completion completions directory.
+_bash-completion-r1_get_bashcompdir() {
+	debug-print-function ${FUNCNAME} "$@"
+
+	_bash-completion-r1_get_bashdir completionsdir /usr/share/bash-completion/completions
+}
+
+# @FUNCTION: _bash-completion-r1_get_bashhelpersdir
+# @INTERNAL
+# @DESCRIPTION:
+# Get unprefixed bash-completion helpers directory.
+_bash-completion-r1_get_bashhelpersdir() {
+	debug-print-function ${FUNCNAME} "$@"
+
+	_bash-completion-r1_get_bashdir helpersdir /usr/share/bash-completion/helpers
+}
+
+# @FUNCTION: get_bashcompdir
+# @DESCRIPTION:
+# Get the bash-completion completions directory.
+get_bashcompdir() {
+	debug-print-function ${FUNCNAME} "$@"
+
+	echo "${EPREFIX}$(_bash-completion-r1_get_bashcompdir)"
+}
+
+# @FUNCTION: get_bashhelpersdir
+# @INTERNAL
+# @DESCRIPTION:
+# Get the bash-completion helpers directory.
+get_bashhelpersdir() {
+	debug-print-function ${FUNCNAME} "$@"
+
+	echo "${EPREFIX}$(_bash-completion-r1_get_bashhelpersdir)"
+}
+
+# @FUNCTION: dobashcomp
+# @USAGE: <file> [...]
+# @DESCRIPTION:
+# Install bash-completion files passed as args. Has EAPI-dependent failure
+# behavior (like doins).
+dobashcomp() {
+	debug-print-function ${FUNCNAME} "$@"
+
+	(
+		insopts -m 0644
+		insinto "$(_bash-completion-r1_get_bashcompdir)"
+		doins "${@}"
+	)
+}
+
+# @FUNCTION: newbashcomp
+# @USAGE: <file> <newname>
+# @DESCRIPTION:
+# Install bash-completion file under a new name. Has EAPI-dependent failure
+# behavior (like newins).
+newbashcomp() {
+	debug-print-function ${FUNCNAME} "$@"
+
+	(
+		insopts -m 0644
+		insinto "$(_bash-completion-r1_get_bashcompdir)"
+		newins "${@}"
+	)
+}
+
+# @FUNCTION: bashcomp_alias
+# @USAGE: <basename> <alias>...
+# @DESCRIPTION:
+# Alias <basename> completion to one or more commands (<alias>es).
+bashcomp_alias() {
+	debug-print-function ${FUNCNAME} "$@"
+
+	[[ ${#} -lt 2 ]] && die "Usage: ${FUNCNAME} <basename> <alias>..."
+	local base=${1} f
+	shift
+
+	for f; do
+		dosym "${base}" "$(_bash-completion-r1_get_bashcompdir)/${f}" \
+			|| return
+	done
+}
 
 # @FUNCTION: _shell-completion_get_fishcompdir
 # @INTERNAL
-- 
2.53.0