aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAisha Tammy <gentoo@aisha.cc>2020-09-25 21:59:08 +0000
committerAisha Tammy <gentoo@aisha.cc>2020-09-25 21:59:08 +0000
commitc86fdf3185ceba586750afebd47360a7d0cb0256 (patch)
tree37e1d225f836810c7e6b80d8f41f2eecb058b9bf
parentsci-libs/bloom: drop dead package (diff)
downloadsci-c86fdf3185ceba586750afebd47360a7d0cb0256.tar.gz
sci-c86fdf3185ceba586750afebd47360a7d0cb0256.tar.bz2
sci-c86fdf3185ceba586750afebd47360a7d0cb0256.zip
app-admin/eselect: drop package
present in ::gentoo Package-Manager: Portage-3.0.8, Repoman-3.0.1 Signed-off-by: Aisha Tammy <gentoo@aisha.cc>
-rw-r--r--app-admin/eselect/Manifest1
-rw-r--r--app-admin/eselect/eselect-1.4.13-r101.ebuild73
-rw-r--r--app-admin/eselect/eselect-9999.ebuild71
-rw-r--r--app-admin/eselect/files/eselect-1.4.13-alternatives.patch1603
-rw-r--r--app-admin/eselect/metadata.xml7
5 files changed, 0 insertions, 1755 deletions
diff --git a/app-admin/eselect/Manifest b/app-admin/eselect/Manifest
deleted file mode 100644
index fc35483d3..000000000
--- a/app-admin/eselect/Manifest
+++ /dev/null
@@ -1 +0,0 @@
-DIST eselect-1.4.13.tar.xz 177848 BLAKE2B 70e5a793759e16119f5233b2c974e0fcc8d213b2033e2b3b76e0a047797b1a0f2feb21ad3beda72f644b498725b4d8ff5c221dcd0870adf5197eaf81c6f3c895 SHA512 5ce10bd288268bc5b52031703f8ac8f3cf07bb22039339bb00c92583ed226162ea8865788f5c1ff4e058d38f0bf25e3557273fb1e839e0391c1fafb9f702bc11
diff --git a/app-admin/eselect/eselect-1.4.13-r101.ebuild b/app-admin/eselect/eselect-1.4.13-r101.ebuild
deleted file mode 100644
index 602a3c8e8..000000000
--- a/app-admin/eselect/eselect-1.4.13-r101.ebuild
+++ /dev/null
@@ -1,73 +0,0 @@
-# Copyright 1999-2018 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI=6
-
-inherit autotools eutils bash-completion-r1
-
-DESCRIPTION="Gentoo's multi-purpose configuration and management tool"
-HOMEPAGE="https://wiki.gentoo.org/wiki/Project:Eselect"
-SRC_URI="https://dev.gentoo.org/~ulm/eselect/${P}.tar.xz"
-
-LICENSE="GPL-2+ || ( GPL-2+ CC-BY-SA-3.0 )"
-SLOT="0"
-KEYWORDS="~amd64 ~x86 ~amd64-linux ~x86-linux"
-IUSE="doc emacs vim-syntax"
-
-RDEPEND="
- !app-eselect/eselect-blas
- !app-eselect/eselect-lapack
- || (
- sys-apps/coreutils
- sys-freebsd/freebsd-bin
- app-misc/realpath
- )"
-DEPEND="${RDEPEND}
- app-arch/xz-utils
- doc? ( dev-python/docutils )"
-RDEPEND="!app-admin/eselect-news
- ${RDEPEND}
- sys-apps/file
- sys-libs/ncurses"
-
-PDEPEND="emacs? ( app-emacs/eselect-mode )
- vim-syntax? ( app-vim/eselect-syntax )"
-
-PATCHES=( "${FILESDIR}"/${P}-alternatives.patch )
-
-src_prepare() {
- default
- AT_M4DIR="." eautoreconf
-}
-
-src_compile() {
- default
- use doc && emake html
-}
-
-src_install() {
- default
- newbashcomp misc/${PN}.bashcomp ${PN}
- dodoc AUTHORS ChangeLog NEWS README TODO doc/*.txt
- use doc && dohtml *.html doc/*
-
- # needed by news module
- keepdir /var/lib/gentoo/news
- if use prefix; then
- sed -i \
- "s:ALTERNATIVESDIR_ROOTLESS=\"${EPREFIX}:ALTERNATIVESDIR_ROOTLESS=\":" \
- "${ED}"/usr/share/eselect/libs/alternatives-common.bash || die
- else
- fowners root:portage /var/lib/gentoo/news
- fperms g+w /var/lib/gentoo/news
- fi
-}
-
-pkg_postinst() {
- # fowners in src_install doesn't work for the portage group:
- # merging changes the group back to root
- if ! use prefix; then
- chgrp portage "${EROOT}/var/lib/gentoo/news" \
- && chmod g+w "${EROOT}/var/lib/gentoo/news"
- fi
-}
diff --git a/app-admin/eselect/eselect-9999.ebuild b/app-admin/eselect/eselect-9999.ebuild
deleted file mode 100644
index 8cae96147..000000000
--- a/app-admin/eselect/eselect-9999.ebuild
+++ /dev/null
@@ -1,71 +0,0 @@
-# Copyright 1999-2018 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI=6
-
-inherit autotools git-r3 bash-completion-r1
-
-DESCRIPTION="Gentoo's multi-purpose configuration and management tool"
-HOMEPAGE="https://wiki.gentoo.org/wiki/Project:Eselect"
-EGIT_REPO_URI="git://github.com/gentoo-science/eselect.git"
-EGIT_BRANCH="alternatives"
-
-LICENSE="GPL-2+ || ( GPL-2+ CC-BY-SA-3.0 )"
-SLOT="0"
-IUSE="doc emacs vim-syntax"
-
-RDEPEND="
- !app-eselect/eselect-blas
- !app-eselect/eselect-lapack
- || (
- sys-apps/coreutils
- sys-freebsd/freebsd-bin
- app-misc/realpath
- )"
-DEPEND="${RDEPEND}
- app-arch/xz-utils
- doc? ( dev-python/docutils )"
-RDEPEND="!app-admin/eselect-news
- ${RDEPEND}
- sys-apps/file
- sys-libs/ncurses"
-
-PDEPEND="emacs? ( app-emacs/eselect-mode )
- vim-syntax? ( app-vim/eselect-syntax )"
-
-src_prepare() {
- default
- AT_M4DIR="." eautoreconf
-}
-
-src_compile() {
- default
- use doc && emake html
-}
-
-src_install() {
- default
- newbashcomp misc/${PN}.bashcomp ${PN}
- dodoc AUTHORS ChangeLog NEWS README TODO doc/*.txt
- use doc && dohtml *.html doc/*
-
- # needed by news module
- keepdir /var/lib/gentoo/news
- if use prefix; then
- sed -i \
- "s:ALTERNATIVESDIR_ROOTLESS=\"${EPREFIX}:ALTERNATIVESDIR_ROOTLESS=\":" \
- "${ED}"/usr/share/eselect/libs/alternatives-common.bash || die
- else
- fowners root:portage /var/lib/gentoo/news
- fperms g+w /var/lib/gentoo/news
- fi
-}
-
-pkg_postinst() {
- # fowners in src_install doesn't work for the portage group:
- # merging changes the group back to root
- if ! use prefix; then
- chgrp portage "${EROOT}/var/lib/gentoo/news" \
- && chmod g+w "${EROOT}/var/lib/gentoo/news"
- fi
-}
diff --git a/app-admin/eselect/files/eselect-1.4.13-alternatives.patch b/app-admin/eselect/files/eselect-1.4.13-alternatives.patch
deleted file mode 100644
index c47887fe6..000000000
--- a/app-admin/eselect/files/eselect-1.4.13-alternatives.patch
+++ /dev/null
@@ -1,1603 +0,0 @@
- bin/Makefile.am | 1 +
- bin/eselect.in | 150 +++++++++++-
- libs/Makefile.am | 7 +-
- libs/alternatives-common.bash.in | 510 +++++++++++++++++++++++++++++++++++++++
- libs/alternatives.bash.in | 316 ++++++++++++++++++++++++
- modules/Makefile.am | 1 +
- modules/alternatives.eselect | 178 ++++++++++++++
- modules/modules.eselect | 288 ++++++++++++++--------
- 8 files changed, 1343 insertions(+), 108 deletions(-)
-
-diff --git a/bin/Makefile.am b/bin/Makefile.am
-index 20902c1..ad08867 100644
---- a/bin/Makefile.am
-+++ b/bin/Makefile.am
-@@ -4,6 +4,7 @@ EXTRA_DIST = eselect.in
- dosed = @SED@ -e 's%\@BASH\@%$(BASH)%g' \
- -e 's%\@DATADIR\@%$(datadir)%g' \
- -e 's%\@EPREFIX\@%$(EPREFIX)%g' \
-+ -e 's%\@LIBEXECDIR\@%$(datadir)%g' \
- -e 's%\@VERSION\@%$(VERSION)$(EXTRAVERSION)%g'
-
- % : %.in
-diff --git a/bin/eselect.in b/bin/eselect.in
-index 432f4e8..840eb94 100755
---- a/bin/eselect.in
-+++ b/bin/eselect.in
-@@ -22,10 +22,18 @@ ESELECT_DATA_PATH="@DATADIR@/eselect"
- # Where are modules installed by default?
- ESELECT_DEFAULT_MODULES_PATH="${ESELECT_DATA_PATH}/modules"
-
-+# Where are auto-generated modules placed? (e.g. from alternatives-2.eclass)
-+ESELECT_AUTO_GENERATED_MODULES_PATH="${ESELECT_DEFAULT_MODULES_PATH}/auto"
-+
-+# Where the users store their modules
-+ESELECT_USER_MODULES_PATH="${ROOT}${HOME}/.eselect/modules"
-+
- # Look in these places for modules
--ESELECT_MODULES_PATH=( \
-- "${HOME}/.eselect/modules" \
-- "${ESELECT_DEFAULT_MODULES_PATH}" )
-+ESELECT_MODULES_PATH=(
-+ "${ESELECT_USER_MODULES_PATH}}"
-+ "${ESELECT_DEFAULT_MODULES_PATH}"
-+ "${ESELECT_AUTO_GENERATED_MODULES_PATH}"
-+)
-
- # Look in this place for libraries
- ESELECT_CORE_PATH="${ESELECT_DATA_PATH}/libs"
-@@ -66,12 +74,27 @@ fi
- # Load core functions
- source "${ESELECT_CORE_PATH}/core.bash" || exit 255
- # Load necessary functions for the main script
--inherit manip output path-manipulation tests
-+inherit manip output path-manipulation tests config
-
- # Sneaky trick to make die in subshells work. If you don't get
- # it, don't ask...
- trap 'echo "exiting" >&2; exit 250' 15
-
-+# es_find_module foo
-+# Find and echo the filename of the foo module. If there's no foo module,
-+# die.
-+es_find_module() {
-+ local modname="$1" modpath="" modfile=""
-+ [[ -z ${modname} ]] && die "Usage: ${FUNCNAME} <module>"
-+ for modpath in "${ESELECT_MODULES_PATH[@]}" ; do
-+ [[ -f ${modpath}/${modname}.eselect ]] && break
-+ done
-+
-+ modfile="${modpath}/${modname}.eselect"
-+ [[ -r ${modfile} ]] || die -q "Can't load module ${modname}"
-+ echo ${modfile}
-+}
-+
- # es_do_usage
- # Display eselect usage
- es_do_usage() {
-@@ -83,14 +106,10 @@ es_do_usage() {
- es_do_help() {
- es_do_usage
- echo
-- # display all recognized global options
-- write_list_start "Global options:"
-- write_kv_list_entry "--brief" "Make output shorter"
-- write_kv_list_entry "--colour=<yes|no|auto>" \
-- "Enable or disable colour output (default 'auto')"
-+ es_do_list-options
- echo
- # display all available eselect modules
-- do_action modules list
-+ es_do_list-modules
- }
-
- # es_do_version
-@@ -102,6 +121,114 @@ es_do_version() {
- echo "Distributed under the terms of the GNU GPL version 2 or later."
- }
-
-+# es_do_list-options
-+# Display all recognized global options
-+es_do_list-options() {
-+ write_list_start "Global options:"
-+ write_kv_list_entry "--brief" "Make output shorter"
-+ write_kv_list_entry "--colour=<yes|no|auto>" "Enable or disable colour output (default 'auto')"
-+ write_kv_list_entry "--debug" "Debug eselect (enable set -x)"
-+}
-+
-+# es_do_list-modules
-+# Display all available eselect modules DEPRECATED
-+es_do_list-modules() {
-+ do_action modules list $@
-+}
-+
-+### print-* actions, for use with bash_completion and zsh-completion ###
-+
-+# es_do_print-modules
-+#
-+# Display all availble eselect modules in a way that's useful to bash
-+# completion / zsh completion
-+es_do_print-modules() {
-+ local ret=1 path module group groupname want_descriptions
-+
-+ while [[ -n $@ ]]; do
-+ case "${1}" in
-+ --descriptions)
-+ want_descriptions='yes' ;;
-+ --group)
-+ groupname=${2}
-+ [[ -z "$groupname" ]] && die -q "Required option (group name) missing."
-+ shift ;;
-+ esac
-+ shift
-+ done
-+
-+ if [[ ${groupname} == Built-in || -z ${groupname} ]]; then
-+ for module in help usage version print-{modules,actions,options}; do
-+ echo "${module}"
-+ done
-+ [[ ${groupname} == Built-in ]] && return 0
-+ fi
-+
-+ # TODO: factor this out in modules.eselect's do_list()
-+ for path in "${ESELECT_MODULES_PATH[@]}" ; do
-+ [[ -d "${path}" ]] || continue
-+ for file in "${path}"/*.eselect ; do
-+ [[ -f "${file}" ]] || continue
-+ if [[ -n "${groupname}" ]]; then
-+ group=$(load_config "${file}" ESELECT_MODULE_GROUP)
-+ [[ "${groupname}" == "${group}" ||
-+ ( "${groupname}" == Extra && -z "${group}" ) ]] || continue
-+ fi
-+ module="${file##*/}"
-+ module="${module%%.eselect}"
-+ echo "${module}${want_descriptions:+:$(load_config "${file}" DESCRIPTION)}"
-+ ret=0
-+ done
-+ done
-+ return $ret
-+}
-+
-+# es_do_print-actions
-+#
-+# Display all available actions for the given module.
-+es_do_print-actions() {
-+ local modfile="$(es_find_module "${1}")" actions action want_descriptions
-+ [[ "${2}" == "--descriptions" ]] && want_descriptions='yes'
-+ (
-+ source "${modfile}" 2>/dev/null \
-+ || die "Couldn't source ${modfile}"
-+ actions=( $(declare -F \
-+ | sed -n -e 's/^declare\s\+-f\s\+do_//p' \
-+ | egrep -v '^(action|help|usage|version)$' \
-+ | sort ) )
-+ for action in "${actions[@]}" ; do
-+ echo "${action}${want_descriptions:+:$(describe_${action})}"
-+ done
-+ )
-+}
-+
-+# es_do_print-options
-+#
-+# Display all available options for the given module and action
-+es_do_print-options() {
-+ local modfile action want_descriptions
-+
-+ [[ "${1}" == "--descriptions" ]] && want_descriptions='yes' && shift
-+
-+ if [[ -z ${1} ]]; then
-+ echo "--debug${want_descriptions:+:Debug eselect (enable set -x)}"
-+ echo "--no-color${want_descriptions:+:Disable coloured output}"
-+ echo "--no-colour${want_descriptions:+:Disable coloured output}"
-+ elif [[ -n ${2} ]]; then
-+ modfile="$(es_find_module "${1}")"
-+ action=${2}
-+ shift 2
-+ (
-+ source "${modfile}" 2>/dev/null \
-+ || die "Couldn't source ${modfile}"
-+ is_function options_${action} || return 1
-+ options_${action} ${want_descriptions:+--descriptions} "$@" || return 2
-+ )
-+ else
-+ die "Usage: ${FUNCNAME} [--descriptions] [<module> <action>]"
-+ fi
-+}
-+
- ### main code ###
-
- # figure out what the action is. we need to know whether we're
-@@ -143,6 +270,9 @@ while [[ ${1##--} != "$1" ]]; do
- *) die -q "Invalid argument for ${1%%=*} option" ;;
- esac
- ;;
-+ debug)
-+ set -x
-+ ;;
- help|version)
- [[ -z ${action} ]] || die -q "Too many parameters"
- action=${1##--}
-diff --git a/libs/Makefile.am b/libs/Makefile.am
-index 6ebd08e..c19f173 100644
---- a/libs/Makefile.am
-+++ b/libs/Makefile.am
-@@ -1,6 +1,8 @@
- eselectlibsdir = $(datadir)/$(PACKAGE_NAME)/libs/
-
- eselectlibs_DATA = \
-+ alternatives.bash \
-+ alternatives-common.bash \
- config.bash \
- core.bash \
- default.eselect \
-@@ -14,6 +16,8 @@ eselectlibs_DATA = \
- tests.bash
-
- EXTRA_DIST = \
-+ alternatives.bash.in \
-+ alternatives-common.bash.in \
- config.bash.in \
- core.bash.in \
- default.eselect.in \
-@@ -31,7 +35,8 @@ dosed = @SED@ \
- -e 's%\@PORTAGEQ\@%@PORTAGEQ@%g' \
- -e 's%\@ENV_UPDATE\@%@ENV_UPDATE@%g' \
- -e 's%\@CANONICALISE\@%@CANONICALISE@%g' \
-- -e 's%\@libdir\@%@libdir@%g'
-+ -e 's%\@libdir\@%@libdir@%g' \
-+ -e 's%\@sysconfdir\@%@sysconfdir@%g'
-
- %.bash : %.bash.in
- @$(dosed) $< > $@
-diff --git a/libs/alternatives-common.bash.in b/libs/alternatives-common.bash.in
-new file mode 100644
-index 0000000..8753b89
---- /dev/null
-+++ b/libs/alternatives-common.bash.in
-@@ -0,0 +1,510 @@
-+# Copyright (c) 2005-2015 Gentoo Foundation
-+# Copyright (c) 2008 Mike Kelly
-+# Copyright (c) 2009-2013 David Leverton
-+# Copyright (c) 2009-2014 Bo Ørsted Andresen
-+#
-+# This file is part of the 'eselect' tools framework.
-+#
-+# eselect is free software: you can redistribute it and/or modify it under the
-+# terms of the GNU General Public License as published by the Free Software
-+# Foundation, either version 2 of the License, or (at your option) any later
-+# version.
-+#
-+# eselect is distributed in the hope that it will be useful, but WITHOUT ANY
-+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
-+# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-+#
-+# You should have received a copy of the GNU General Public License along with
-+# eselect. If not, see <http://www.gnu.org/licenses/>.
-+
-+inherit config output path-manipulation tests
-+
-+: "${ALTERNATIVESDIR_ROOTLESS:=@sysconfdir@/env.d/alternatives}"
-+: "${ALTERNATIVESDIR_ROOT:=${ROOT%/}}"
-+ALTERNATIVESDIR="${ALTERNATIVESDIR_ROOT}${ALTERNATIVESDIR_ROOTLESS}"
-+
-+get_current_provider() {
-+ local dieprefix="Could not determine current provider for ${ALTERNATIVE}"
-+ if [[ -L ${ALTERNATIVESDIR}/${ALTERNATIVE}/_current ]]; then
-+ local provider=$(readlink "${ALTERNATIVESDIR}/${ALTERNATIVE}/_current" || die "${dieprefix}: readlink ${symlink} failed")
-+ [[ ${provider} == */* ]] && die "${dieprefix}: malformed target for ${symlink}"
-+
-+ if [[ -L ${ALTERNATIVESDIR}/${ALTERNATIVE}/${provider} ||
-+ ( -e ${ALTERNATIVESDIR}/${ALTERNATIVE}/${provider} && ! -d ${ALTERNATIVESDIR}/${ALTERNATIVE}/${provider} ) ]]; then
-+ die "${dieprefix}: ${ALTERNATIVESDIR}/${ALTERNATIVE}/${provider} is not a directory"
-+ fi
-+
-+ echo "${provider}"
-+
-+ elif [[ -e ${ALTERNATIVESDIR}/${ALTERNATIVE}/_current ]]; then
-+ die "${dieprefix}: ${ALTERNATIVESDIR}/${ALTERNATIVE}/_current is not a symlink"
-+ fi
-+}
-+
-+compare_importance() {
-+ local IFS=.
-+ local a=( ${1} ) b=( ${2} )
-+ local -i i=0
-+ while (( i<${#a[@]} && i<${#b[@]} )); do
-+ if (( a[i]<b[i] )); then
-+ return 0
-+ elif (( a[i]>b[i] )); then
-+ return 1
-+ fi
-+ i+=1
-+ done
-+ (( i<${#b[@]} ))
-+}
-+
-+sort_providers() {
-+ local begin=${1:-0}
-+ local count=${2:-${#providers[@]}}
-+ [[ ${count} -le 1 ]] && return 0
-+ sort_providers ${begin} $((count/2))
-+ sort_providers $((begin+count/2)) $((count-count/2))
-+ local left=( "${providers[@]:begin:count/2}" )
-+ local right=( "${providers[@]:begin+count/2:count-count/2}" )
-+ local -i x i=0 j=0
-+ for (( x=begin; x<begin+count; ++x )); do
-+ if (( j>=${#right[@]} )) || { (( i<${#left[@]} )) && compare_importance "${left[i]%%:*}" "${right[j]%%:*}"; }; then
-+ providers[x]=${left[i++]}
-+ else
-+ providers[x]=${right[j++]}
-+ fi
-+ done
-+}
-+
-+get_providers() {
-+ local p= importance providers=()
-+ for p in "${ALTERNATIVESDIR}/${ALTERNATIVE}"/* ; do
-+ [[ -d ${p} && ! -L ${p} ]] || continue
-+ p=${p##*/}
-+
-+ [[ -e "${ALTERNATIVESDIR}/${ALTERNATIVE}/${p}/_importance" ]] && \
-+ importance=$(< "${ALTERNATIVESDIR}/${ALTERNATIVE}/${p}/_importance")
-+ importance=${importance:-0}
-+ [[ "${importance}" =~ ^[0123456789]+(\.[0123456789]+)*$ ]] || die "_importance (${importance}) for ${p} is not a dot-separated list of integers"
-+
-+ providers+=( "${importance}:${p}" )
-+ done
-+
-+ sort_providers
-+ for (( p=${#providers[@]}-1 ; p>=0 ; --p )); do
-+ echo "${providers[p]#*:}"
-+ done
-+}
-+
-+has_provider() {
-+ local provider=${1} item providers=( $(get_providers) )
-+ for item in ${providers[@]}; do
-+ [[ ${item} == ${provider} ]] && return 0
-+ done
-+ return 1
-+}
-+
-+_options_parameters() {
-+ [[ -n ${2} && ${2} != --descriptions ]] && die -q "Unrecognised option ${2}"
-+ local describe_func=describe_${1#options_}_options descriptions=${2} opt options oldifs=$IFS
-+ if is_function ${describe_func}; then
-+ IFS=$'\n'
-+ options=( $(${describe_func}) )
-+ IFS=$oldifs
-+ for opt in "${options[@]}"; do
-+ [[ ${opt} == --* ]] || continue
-+ if [[ -n ${descriptions} ]]; then
-+ echo "${opt/ : /:}"
-+ else
-+ echo "${opt%% : *}"
-+ fi
-+ done
-+ fi
-+}
-+
-+### set action stub ###
-+
-+# not available in "eselect alternatives", but needed by do_update
-+
-+alternatives_do_set() {
-+ [[ -z "${ALTERNATIVE}" ]] && die "Need to set ALTERNATIVE in the eselect module"
-+
-+ local force provider providers
-+ if [[ ${1} == --force ]]; then
-+ force=yes
-+ shift
-+ fi
-+ local idx=${1}
-+ if [[ ${1} == +(-|+|[[:digit:]]) ]]; then
-+ idx=${1#+(-|+)}
-+ providers=( $(get_providers) )
-+ (( ${idx} <= ${#providers[@]} )) || die -q "The given provider with index (${idx}) does not exist"
-+ provider=${providers[${idx}-1]}
-+ else
-+ provider="${1}"
-+ fi
-+ [[ -z "${provider}" ]] && die -q "Missing required parameter 'provider'"
-+ local dieprefix="Could not set provider ${provider} for alternative ${ALTERNATIVE}"
-+
-+ if [[ ! -d ${ALTERNATIVESDIR}/${ALTERNATIVE}/${provider} ]] ; then
-+ if is_number ${provider} ; then
-+ providers=( $(get_providers) )
-+ [[ -n ${providers[${idx}-1]} ]] && \
-+ die -q "The given provider (${provider}) does not exist"
-+ fi
-+ die -q "The given provider (${provider}) does not exist"
-+ fi
-+
-+ local symlink newsymlinks=() oldsymlinks=()
-+
-+ while read -r -d '' symlink; do
-+ local nicesymlink=${symlink#.}
-+ nicesymlink=${nicesymlink//+(\/)/\/}
-+ [[ ${nicesymlink} == /* ]] || die "${dieprefix}: bad symlink ${symlink}?"
-+ [[ ${nicesymlink} == */ ]] && die "${dieprefix}: bad symlink ${symlink}?"
-+
-+ newsymlinks+=( "${nicesymlink}" )
-+ done < <(
-+ cd "${ALTERNATIVESDIR}/${ALTERNATIVE}/${provider}" || die "${dieprefix}: cd failed"
-+ find . -type l -print0 | LC_ALL=C sort -r -u -z)
-+ [[ ${#newsymlinks[@]} -gt 0 ]] || die "${dieprefix}: does not provide any symlinks?"
-+
-+ if [[ -f ${ALTERNATIVESDIR}/${ALTERNATIVE}/_current_list ]]; then
-+ while read -r -d '' symlink; do
-+ local nicesymlink=${symlink//+(\/)/\/}
-+ [[ ${nicesymlink} == /* ]] || die "${dieprefix}: old provider ${oldcur} provides bad symlink ${symlink}?"
-+ [[ ${nicesymlink} == */ ]] && die "${dieprefix}: old provider ${oldcur} provides bad symlink ${symlink}?"
-+
-+ oldsymlinks+=( "${nicesymlink}" )
-+ done < <(LC_ALL=C sort -r -u -z "${ALTERNATIVESDIR}/${ALTERNATIVE}/_current_list")
-+ [[ ${#oldsymlinks[@]} -gt 0 ]] || die "${dieprefix}: old provider ${oldcur} does not provide any symlinks?"
-+
-+ elif [[ -L ${ALTERNATIVESDIR}/${ALTERNATIVE}/_current_list || -e ${ALTERNATIVESDIR}/${ALTERNATIVE}/_current_list ]]; then
-+ die "${dieprefix}: ${ALTERNATIVESDIR}/${ALTERNATIVE}/_current_list is not a file"
-+ fi
-+
-+ local pass errors=
-+ for pass in check perform; do
-+ local -i new_i=0 old_i=0
-+ while [[ -n ${newsymlinks[new_i]} || -n ${oldsymlinks[old_i]} ]]; do
-+
-+ if ( LC_ALL=C; [[ ${newsymlinks[new_i]} < ${oldsymlinks[old_i]} ]] ); then
-+ if [[ ${pass} == check ]]; then
-+ if [[ -L ${EROOT%/}${oldsymlinks[old_i]} ]]; then
-+ :
-+ elif [[ -d ${EROOT%/}${oldsymlinks[old_i]} ]]; then
-+ write_error_msg "Can't remove ${EROOT%/}${oldsymlinks[old_i]}: is a directory${force:+ which is a fatal error that cannot be ignored by --force}"
-+ errors=yes
-+ elif [[ -e ${EROOT%/}${oldsymlinks[old_i]} ]]; then
-+ if [[ -n ${force} ]]; then
-+ write_warning_msg "Removing ${EROOT%/}${oldsymlinks[old_i]} due to --force: is not a symlink"
-+ else
-+ write_error_msg "Refusing to remove ${EROOT%/}${oldsymlinks[old_i]}: is not a symlink (use --force to override)"
-+ errors=yes
-+ fi
-+ fi
-+
-+ elif [[ ${pass} == perform ]]; then
-+ rm -f "${EROOT%/}${oldsymlinks[old_i]}" || die "${dieprefix}: rm failed"
-+ else
-+ die "${dieprefix}: unknown \${pass} ${pass}???"
-+ fi
-+
-+ old_i+=1
-+
-+ else
-+ local target=${ALTERNATIVESDIR_ROOTLESS#${EPREFIX}/}/${ALTERNATIVE}/_current${newsymlinks[new_i]} dir=${newsymlinks[new_i]%/*}
-+ while [[ -n ${dir} ]]; do
-+ target=../${target}
-+ dir=${dir%/*}
-+ done
-+
-+ if [[ ${pass} == check ]]; then
-+ if [[ -L ${EROOT%/}${newsymlinks[new_i]} ]]; then
-+ :
-+ elif [[ -d ${EROOT%/}${newsymlinks[new_i]} ]]; then
-+ write_error_msg "Can't overwrite ${EROOT%/}${newsymlinks[new_i]}: is a directory${force:+ which is a fatal error that cannot be ignored by --force}"
-+ errors=yes
-+ elif [[ -e ${EROOT%/}${newsymlinks[new_i]} ]]; then
-+ if [[ -n ${force} ]]; then
-+ write_warning_msg "Overwriting ${EROOT%/}${newsymlinks[new_i]} due to --force: is not a symlink"
-+ else
-+ write_error_msg "Refusing to overwrite ${EROOT%/}${newsymlinks[new_i]}: is not a symlink (use --force to override)"
-+ errors=yes
-+ fi
-+ fi
-+
-+ elif [[ ${pass} == perform ]]; then
-+ mkdir -p "${EROOT%/}${newsymlinks[new_i]%/*}" || die "${dieprefix}: mkdir -p failed"
-+ ln -snf "${target#/}" "${EROOT%/}${newsymlinks[new_i]}" || die "${dieprefix}: ln -snf failed"
-+ else
-+ die "${dieprefix}: unknown \${pass} ${pass}???"
-+ fi
-+
-+ [[ ${newsymlinks[new_i]} == ${oldsymlinks[old_i]} ]] && old_i+=1
-+ new_i+=1
-+ fi
-+ done
-+
-+ [[ -n ${errors} ]] && die "${dieprefix}: see previous errors"
-+ done
-+
-+ local oldcur="$(get_current_provider)"
-+ ln -snf "${provider}" "${ALTERNATIVESDIR}/${ALTERNATIVE}/_current" || die "${dieprefix}: ln -snf failed"
-+
-+ : >"${ALTERNATIVESDIR}/${ALTERNATIVE}/_current_list" || die "${dieprefix}: emptying/creating _current_list failed"
-+ for symlink in "${newsymlinks[@]}"; do
-+ echo -n -e "${symlink}\\0" >>"${ALTERNATIVESDIR}/${ALTERNATIVE}/_current_list" || die "${dieprefix}: appending ${symlink} to _current_list failed"
-+ done
-+ return 0
-+}
-+
-+### add action ###
-+alternatives_describe_add() {
-+ echo "Add provider to selected alternative"
-+}
-+
-+alternatives_describe_add_parameters() {
-+ echo "<provider> <importance> <source> <target> [<source> <target> [...]]"
-+}
-+
-+alternatives_describe_add_options() {
-+ echo "<provider> : the name of the alternative provider"
-+ echo "<importance> : interger value, representing the importance of the provider"
-+ echo "<source> : source of the symlink"
-+ echo "<target> : destination for the symlink"
-+}
-+
-+alternatives_do_add() {
-+ [[ -z "${ALTERNATIVE}" ]] && die "Need to set ALTERNATIVE in the eselect module"
-+
-+ (( $# >= 4 )) && (( ($#-2)%2 == 0)) || \
-+ die "exactly 3+N*2 arguments where N>=1 required"
-+ local provider=${1}
-+ local importance=${2}
-+ shift 2
-+ local index src target ret=0
-+ local provider_dir="${ALTERNATIVESDIR}/${ALTERNATIVE}/${provider}"
-+
-+ # Creating base dir
-+ if [[ ! -e "${provider_dir}" ]]; then
-+ mkdir -p "${provider_dir}" || die "Failed to create ${provider_dir}"
-+ elif [[ ! -d "${provider_dir}" ]]; then
-+ die "${provider_dir} exists but is a file"
-+ else
-+ die "${provider_dir} already present. You need to remove it before adding it again"
-+ fi
-+
-+ # Make sure importance is a signed integer
-+ if [[ -n ${importance} ]] && ! [[ ${importance} =~ ^[0-9]+(\.[0-9]+)*$ ]]; then
-+ die "Invalid importance (${importance}) detected"
-+ else
-+ # Setting importance
-+ echo ${importance} > "${provider_dir}/_importance"
-+ fi
-+
-+ # Process source-target pairs
-+ while (( $# >= 2 )); do
-+ src=${1//+(\/)/\/}; target=${2//+(\/)/\/}
-+ if [[ ${src} != /* ]]; then
-+ die "Source path must be absolute, but got ${src}"
-+ else
-+ local reltarget= dir=${provider_dir#${ALTERNATIVESDIR_ROOT}${EPREFIX}}${src%/*}
-+ while [[ -n ${dir} ]]; do
-+ reltarget+=../
-+ dir=${dir%/*}
-+ done
-+
-+ reltarget=${reltarget%/}
-+ [[ ${target} == /* ]] || reltarget+=${src%/*}/
-+ reltarget+=${target}
-+ mkdir -p "${provider_dir}${src%/*}" || die "Failed to create ${provider_dir}${src%/*}"
-+ ln -sf "${reltarget}" "${provider_dir}${src}" || die "Failed to create symlink"
-+ # The -e test will fail if existing symlink points to non-existing target,
-+ # so check for -L also.
-+ # Say ${ED}/sbin/init exists and links to /bin/systemd (which doesn't exist yet).
-+# if [[ -e ${ED}${src} || -L ${ED}${src} ]]; then
-+# local fulltarget=${target}
-+# [[ ${fulltarget} != /* ]] && fulltarget=${src%/*}/${fulltarget}
-+# if [[ -e ${ED}${fulltarget} || -L ${ED}${fulltarget} ]]; then
-+# die "${src} defined as provider for ${fulltarget}, but both already exist in \${ED}"
-+# else
-+# mv "${ED}${src}" "${ED}${fulltarget}" || die
-+# fi
-+# fi
-+ fi
-+ shift 2
-+ done
-+}
-+
-+alternatives_options_add() {
-+ _options_parameters ${FUNCNAME#alternatives_} "$@"
-+}
-+
-+### remove action ###
-+
-+alternatives_describe_remove() {
-+ echo "Remove a provider for selected alternative"
-+}
-+
-+alternatives_describe_remove_parameters() {
-+ echo "<provider>"
-+}
-+
-+alternatives_describe_remove_options() {
-+ echo "<provider> : the name of the alternative provider to be removed"
-+}
-+
-+alternatives_do_remove() {
-+ [[ -z "${ALTERNATIVE}" ]] && die "Need to set ALTERNATIVE in the eselect module"
-+
-+ if [[ -d "${ALTERNATIVESDIR}/${ALTERNATIVE}/${provider}" ]]; then
-+ rm -r "${ALTERNATIVESDIR}/${ALTERNATIVE}/${provider}" || \
-+ die "Failed to remove '${provider}' for '${ALTERNATIVE}'"
-+ else
-+ einfo "'${provider}' is not a provider for '${ALTERNATIVE}'"
-+ fi
-+}
-+
-+alternatives_options_remove() {
-+ _options_parameters ${FUNCNAME#alternatives_} "$@"
-+}
-+
-+### update action ###
-+
-+# available in both "eselect alternatives" and individual modules
-+
-+alternatives_describe_update() {
-+ echo "Set a default provider if no valid one currently exists"
-+}
-+
-+alternatives_describe_update_parameters() {
-+ echo "[--best] [--ignore] <provider>"
-+}
-+
-+alternatives_describe_update_options() {
-+ echo "--best : update to the best provider even if one is already selected"
-+ echo "--ignore : update to any valid provider EXCEPT the specified provider"
-+ echo "<provider> : the name of the provider to use"
-+}
-+
-+alternatives_do_update() {
-+ [[ -z "${ALTERNATIVE}" ]] && die "Need to set ALTERNATIVE in the eselect module"
-+
-+ local p cur=$(get_current_provider) providers=( $(get_providers) ) best ignore
-+ if [[ "--best" == ${1} ]] ; then
-+ shift
-+ best=1
-+ fi
-+ if [[ "--ignore" == ${1} ]] ; then
-+ # Try everything except setting the provider to the given
-+ # one. So, if it isn't the given one, we end up doing
-+ # nothing. Bug #128
-+ shift
-+ ignore=${1}
-+ fi
-+ [[ -n ${best} && -n ${1} && -z ${ignore} ]] && die -q "Cannot specify both --best and a provider"
-+
-+ if [[ -n ${best} ]] ; then
-+ # set best provider
-+ : # fall through to "switch to first available" loop below
-+ elif [[ $# == "0" ]] && [[ -z ${cur} ]]; then
-+ # if nothing is specified
-+ : # fall through to "switch to first available" loop below
-+ elif [[ ${cur} == ${1} && -z ${ignore} ]]; then
-+ # if current provider was just updated, reselect it since it could have changed
-+ alternatives_do_set "${cur}" && return 0
-+ elif [[ -n ${cur} && ${cur} != ${ignore} ]] ; then
-+ # verify existing provider's symlinks
-+ local p= bad=0
-+ while read -r -d '' p ; do
-+ [[ -L "${EROOT%/}${p}" && -e "${EROOT%/}${p}" ]] || (( bad++ ))
-+ done < "${ALTERNATIVESDIR}/${ALTERNATIVE}/_current_list"
-+
-+ [[ "${bad}" -eq 0 ]] && return 0
-+ # fix existing provider if possible
-+ has "${cur}" "${providers[@]}" && alternatives_do_set "${cur}" && return 0
-+ elif has "${1}" "${providers[@]}" && [[ -z ${ignore} ]] ; then
-+ # switch to new provider if none was set before or it can't be fixed
-+ alternatives_do_set "${1}" && return 0
-+ fi
-+
-+ # if no valid provider has been selected switch to first available, valid
-+ # provider, sorted according to importance
-+ for p in "${providers[@]}"; do
-+ [[ ${ignore} != ${p} ]] && alternatives_do_set "${p}" && return 0
-+ done
-+
-+ # if a provider is set but no providers are available anymore cleanup
-+ cur=$(get_current_provider)
-+ if [[ -n ${cur} ]]; then
-+ alternatives_do_unset "${cur}" && return 2
-+ fi
-+ # if no provider is set and none are available that are not ignored, return 2 for cleanup
-+ [[ -z ${providers[@]} || ${providers[@]} == ${ignore} ]] && return 2
-+
-+ # we tried everything to select a valid provider, but failed
-+ return 1
-+}
-+
-+alternatives_options_update() {
-+ _options_parameters ${FUNCNAME#alternatives_} "$@"
-+ if [[ -n ${ALTERNATIVE} ]]; then
-+ get_providers
-+ else
-+ for alt in ${ALTERNATIVESDIR_ROOTLESS}/_*/*/_importance; do
-+ echo ${alt} | cut -d/ -f5
-+ done | sort -u
-+ fi
-+}
-+
-+### unset action stub ###
-+
-+# not available in "eselect alternatives", but needed by do_update
-+
-+alternatives_do_unset() {
-+ [[ -z "${ALTERNATIVE}" ]] && die "Need to set ALTERNATIVE in the eselect module"
-+
-+ local force=
-+ if [[ ${1} == --force ]]; then
-+ force=yes
-+ shift
-+ fi
-+
-+ local cur="$(get_current_provider)" p=
-+ [[ -n "${cur}" ]] || die -q "Nothing to unset"
-+ local dieprefix="Could not unset provider for ${ALTERNATIVE}"
-+
-+ local one=false symlink pass errors=
-+ for pass in check perform; do
-+ while read -r -d '' symlink; do
-+ one=true
-+ if [[ ${pass} == check ]]; then
-+ if [[ -L ${EROOT%/}${symlink} ]]; then
-+ :
-+ elif [[ -d ${EROOT%/}${symlink} ]]; then
-+ write_error_msg "Can't remove ${EROOT%/}${symlink}: is a directory${force:+ which is a fatal error that cannot be ignored by --force}"
-+ errors=yes
-+ elif [[ -e ${EROOT%/}${symlink} ]]; then
-+ if [[ -n ${force} ]]; then
-+ write_warning_msg "Removing ${EROOT%/}${symlink} due to --force: is not a symlink"
-+ else
-+ write_error_msg "Refusing to remove ${EROOT%/}${symlink}: is not a symlink (use --force to override)"
-+ errors=yes
-+ fi
-+ fi
-+
-+ elif [[ ${pass} == perform ]]; then
-+ rm -f "${EROOT%/}${symlink}" || die "${dieprefix}: rm failed"
-+ else
-+ die "${dieprefix}: unknown \${pass} ${pass}???"
-+ fi
-+ done <"${ALTERNATIVESDIR}/${ALTERNATIVE}/_current_list"
-+
-+ [[ -n ${errors} ]] && die "${dieprefix}: see previous errors"
-+ done
-+
-+ ${one} || die "${dieprefix}: does not provide any symlinks?"
-+
-+ rm "${ALTERNATIVESDIR}/${ALTERNATIVE}"/{_current,_current_list} || die "${dieprefix}: rm failed"
-+}
-+
-+# vim: set ft=eselect sw=4 sts=4 ts=4 et tw=80 :
-diff --git a/libs/alternatives.bash.in b/libs/alternatives.bash.in
-new file mode 100644
-index 0000000..cf4fa36
---- /dev/null
-+++ b/libs/alternatives.bash.in
-@@ -0,0 +1,316 @@
-+# Copyright (c) 2005-2015 Gentoo Foundation
-+# Copyright (c) 2008 Mike Kelly
-+# Copyright (c) 2009-2013 David Leverton
-+# Copyright (c) 2009-2014 Bo Ørsted Andresen
-+#
-+# This file is part of the 'eselect' tools framework.
-+#
-+# eselect is free software: you can redistribute it and/or modify it under the
-+# terms of the GNU General Public License as published by the Free Software
-+# Foundation, either version 2 of the License, or (at your option) any later
-+# version.
-+#
-+# eselect is distributed in the hope that it will be useful, but WITHOUT ANY
-+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
-+# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-+#
-+# You should have received a copy of the GNU General Public License along with
-+# eselect. If not, see <http://www.gnu.org/licenses/>.
-+
-+inherit alternatives-common
-+
-+### show action ###
-+describe_show() {
-+ echo "Show the current provider in use for ${ALTERNATIVE}"
-+}
-+
-+do_show() {
-+ [[ -z "${ALTERNATIVE}" ]] && die "Need to set ALTERNATIVE in the eselect module"
-+ local current="$(get_current_provider)"
-+ if [[ -z "${current}" ]] ; then
-+ echo "(none)"
-+ return 2
-+ fi
-+ echo "${current}"
-+}
-+
-+options_show() {
-+ :
-+}
-+
-+### list action ###
-+describe_list() {
-+ echo "Lists all available providers for ${ALTERNATIVE}"
-+}
-+
-+do_list() {
-+ [[ -z "${ALTERNATIVE}" ]] && die "Need to set ALTERNATIVE in the eselect module"
-+ local n cur= providers=( $(get_providers) )
-+ write_list_start "Available providers for ${ALTERNATIVE}:"
-+
-+ cur="$(get_current_provider)"
-+
-+ if [[ -n "${providers[@]}" ]] ; then
-+ for (( n = 0 ; n < ${#providers[@]} ; ++n )) ; do
-+ [[ ${cur} == "${providers[${n}]}" ]] && \
-+ providers[${n}]="${providers[${n}]} $(highlight '*')"
-+ done
-+ write_numbered_list "${providers[@]}"
-+ else
-+ write_kv_list_entry "(none found)" ""
-+ fi
-+}
-+
-+options_list() {
-+ :
-+}
-+
-+### files action ###
-+describe_files() {
-+ echo "Lists symlinks provided by the currently selected provider"
-+}
-+
-+do_files() {
-+ [[ -z "${ALTERNATIVE}" ]] && die "Need to set ALTERNATIVE in the eselect module"
-+
-+ local cur="$(get_current_provider)" p=
-+ [[ -n "${cur}" ]] || die -q "No selected provider, hence no symlinks provided"
-+ local dieprefix="Could not list symlinks provided for ${ALTERNATIVE}"
-+
-+ local errors symlink rootsymlink
-+ while read -r -d '' symlink; do
-+ rootsymlink="${EROOT%/}${symlink}"
-+ rootsymlink=${rootsymlink//+(\/)/\/}
-+ echo "${rootsymlink}"
-+ if [[ -L ${rootsymlink} ]]; then
-+ if [[ ! -e ${rootsymlink} ]]; then
-+ write_error_msg "${rootsymlink} is dangling symlink"
-+ errors=yes
-+ fi
-+ elif [[ -d ${rootsymlink} ]]; then
-+ write_error_msg "${rootsymlink} is a directory"
-+ errors=yes
-+ elif [[ -e ${rootsymlink} ]]; then
-+ write_error_msg "${rootsymlink} exists but is not a symlink"
-+ errors=yes
-+ else
-+ write_error_msg "${rootsymlink} does not exist"
-+ errors=yes
-+ fi
-+ done <"${ALTERNATIVESDIR}/${ALTERNATIVE}/_current_list"
-+}
-+
-+options_files() {
-+ :
-+}
-+
-+### set action ###
-+
-+describe_set() {
-+ echo "Sets a provider for ${ALTERNATIVE}"
-+}
-+
-+describe_set_parameters() {
-+ echo "[ --force ] <provider>"
-+}
-+
-+describe_set_options() {
-+ echo "--force : overwrite or remove existing non-symlink files (but not directories) if necessary"
-+ echo "<provider> : the name of the provider to use or the index of the provider preceeded by a dash"
-+}
-+
-+do_set() {
-+ # implementation defined in alternatives-common.bash as needed by do_update
-+ alternatives_do_set "$@"
-+}
-+
-+options_set() {
-+ _options_parameters $FUNCNAME "$@"
-+ get_providers
-+}
-+
-+### add action ###
-+
-+describe_add() {
-+ alternatives_describe_add
-+}
-+
-+describe_add_parameters() {
-+ alternatives_describe_add_parameters
-+}
-+
-+describe_add_options() {
-+ alternatives_describe_add_options
-+}
-+
-+do_add() {
-+ alternatives_do_add
-+
-+ # make sure we have something selected
-+ eselect ${provider} show > /dev/null || eselect ${provider} update --best
-+}
-+
-+### remove action ###
-+
-+describe_remove() {
-+ alternatives_describe_remove
-+}
-+
-+describe_remove_parameters() {
-+ alternatives_describe_remove_parameters
-+}
-+
-+describe_remove_options() {
-+ alternatives_describe_remove_options
-+}
-+
-+do_remove() {
-+ local ret
-+ alternatives_do_remove
-+
-+# if no provider is present, remove whole alternative
-+ eselect ${provider} update --best > /dev/null; ret=$?
-+ case ret in
-+ 0)
-+ # All good
-+ :;;
-+ 2)
-+ # No provider present anymore
-+ eselect alternatives remove ${ALTERNATIVE};;
-+ *)
-+ write_error_msg "Failed to remove ${ALTERNATIVE}"
-+ errors=yes
-+ esac
-+}
-+
-+### update action ###
-+
-+# all functions implemented in alternatives-common.bash as defined for
-+# both "eselect alternatives" and individual modules
-+
-+describe_update() {
-+ alternatives_describe_update
-+}
-+
-+describe_update_parameters() {
-+ alternatives_describe_update_parameters
-+}
-+
-+describe_update_options() {
-+ alternatives_describe_update_options
-+}
-+
-+do_update() {
-+ alternatives_do_update "$@"
-+}
-+
-+options_update() {
-+ alternatives_options_update
-+}
-+
-+### unset action ###
-+
-+describe_unset() {
-+ echo "Unset any symlinks created for the current provider for ${ALTERNATIVE}."
-+}
-+
-+describe_unset_parameters() {
-+ echo "[ --force ]"
-+}
-+
-+describe_unset_options() {
-+ echo "--force : remove existing non-symlink files (but not directories) if necessary"
-+}
-+
-+do_unset() {
-+ # implementation defined in alternatives-common.bash as needed by do_update
-+ alternatives_do_unset "$@"
-+}
-+
-+options_unset() {
-+ _options_parameters $FUNCNAME "$@"
-+ get_current_provider
-+}
-+
-+### script action ###
-+
-+describe_script() {
-+ echo "Output an evalable script fragment to set PATH, LD_LIBRARY_PATH and MANPATH to use the specified provider"
-+}
-+
-+describe_script_parameters() {
-+ echo "[--sh | --csh] [<provider>]"
-+}
-+
-+describe_script_options() {
-+ echo "--sh : use Bourne shell syntax (default)"
-+ echo "--csh : use C shell syntax"
-+ echo "<provider> : the provider to use or the index of the provider (if not specified, use the system default)"
-+}
-+
-+do_script() {
-+ [[ -z "${ALTERNATIVE}" ]] && die "Need to set ALTERNATIVE in the eselect module"
-+ local syntax=sh provider providers
-+ if [[ ${1} == --sh ]]; then
-+ shift
-+ elif [[ ${1} == --csh ]]; then
-+ syntax=csh
-+ shift
-+ fi
-+
-+ local idx=${!}
-+ if [[ ${idx} == +(-|+|[[:digit:]]) ]]; then
-+ idx=${1#+(-|+)}
-+ providers=( $(get_providers) )
-+ (( ${idx} <= ${#providers[@]} )) || die -q "The given provider with index (${idx}) does not exist"
-+ provider=${providers[${idx}-1]}
-+ else
-+ provider="${idx}"
-+ fi
-+ [[ -z "${provider}" ]] && die -q "Missing required parameter 'provider'"
-+
-+ if [[ ! -d ${ALTERNATIVESDIR}/${ALTERNATIVE}/${provider} ]] ; then
-+ if is_number ${provider} ; then
-+ providers=( $(get_providers) )
-+ [[ -n ${providers[${idx}-1]} ]] && \
-+ die -q "The given provider (${provider}) does not exist"
-+ fi
-+ die -q "The given provider (${provider}) does not exist"
-+ fi
-+
-+ local variables=( PATH LD_LIBRARY_PATH MANPATH )
-+ [[ -n ${!default_*} ]] && local ${!default_*}
-+ local default_LD_LIBRARY_PATH=$(grep '^[^#]' "${EROOT%/}"/etc/ld.so.conf | tr '\n' ':')/lib:/usr/lib
-+ local default_MANPATH=$(MANPATH= man -C"${EROOT%/}"/etc/man.conf -w)
-+
-+ local var IFS=:
-+ for var in "${variables[@]}"; do
-+ local defvar=default_${var} path paths=( )
-+ for path in ${!var}; do
-+ [[ ${path} == ${ALTERNATIVESDIR_ROOTLESS}/${ALTERNATIVE}/* ]] && continue
-+ [[ -n ${provider} && -d ${ALTERNATIVESDIR}/${ALTERNATIVE}/${provider}/${path#/} ]] && paths+=( "${ALTERNATIVESDIR_ROOTLESS}/${ALTERNATIVE}/${provider}/${path#/}" )
-+ paths+=( "${path}" )
-+ done
-+
-+ [[ -n ${provider} ]] && for path in ${!defvar}; do
-+ [[ -d ${ALTERNATIVESDIR}/${ALTERNATIVE}/${provider}/${path#/} ]] && paths+=( "${ALTERNATIVESDIR_ROOTLESS}/${ALTERNATIVE}/${provider}/${path#/}" )
-+ done
-+
-+ local newval=${paths[*]}
-+ if [[ ${newval} != ${!var} ]]; then
-+ newval=${newval//\'/\'\\\'\'}
-+ if [[ ${syntax} == sh ]]; then
-+ echo "${var}='${newval}'; export ${var}"
-+ else
-+ echo "setenv ${var} '${newval}'"
-+ fi
-+ fi
-+ done
-+}
-+
-+options_script() {
-+ _options_parameters $FUNCNAME "$@"
-+ get_providers
-+}
-+
-+# vim: set ft=eselect sw=4 sts=4 ts=4 et tw=80 :
-diff --git a/modules/Makefile.am b/modules/Makefile.am
-index 75ebe02..92127b6 100644
---- a/modules/Makefile.am
-+++ b/modules/Makefile.am
-@@ -1,6 +1,7 @@
- modulesdir=$(datadir)/$(PACKAGE_NAME)/modules/
-
- modules_DATA = \
-+ alternatives.eselect \
- editor.eselect \
- env.eselect \
- kernel.eselect \
-diff --git a/modules/alternatives.eselect b/modules/alternatives.eselect
-new file mode 100644
-index 0000000..840b9c5
---- /dev/null
-+++ b/modules/alternatives.eselect
-@@ -0,0 +1,178 @@
-+# Copyright (c) 2005-2015 Gentoo Foundation
-+# Copyright (c) 2008 Mike Kelly
-+# Copyright (c) 2009-2013 David Leverton
-+# Copyright (c) 2009-2014 Bo Ørsted Andresen
-+#
-+# This file is part of the 'eselect' tools framework.
-+#
-+# eselect is free software: you can redistribute it and/or modify it under the
-+# terms of the GNU General Public License as published by the Free Software
-+# Foundation, either version 2 of the License, or (at your option) any later
-+# version.
-+#
-+# eselect is distributed in the hope that it will be useful, but WITHOUT ANY
-+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
-+# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-+#
-+# You should have received a copy of the GNU General Public License along with
-+# eselect. If not, see <http://www.gnu.org/licenses/>.
-+
-+inherit alternatives-common
-+
-+DESCRIPTION="Maintain Alternatives symlinks"
-+VERSION="20150521"
-+MAINTAINER="sci@gentoo.org"
-+
-+show_extra_help_text() {
-+ cat <<- ENDOFTEXT
-+ This module is intended for internal use when a package is installed,
-+ updated or removed. For alternatives for which it is likely that
-+ users will need control over which provider is selected, there will be
-+ a separate eselect module installed to do so.
-+ ENDOFTEXT
-+}
-+
-+# all functions implemented in alternatives-common.bash as defined for
-+# both "eselect alternatives" and individual modules
-+
-+### update action ###
-+
-+describe_update() {
-+ alternatives_describe_update
-+}
-+
-+describe_update_parameters() {
-+ echo "<alternative> $(alternatives_describe_update_parameters)"
-+}
-+
-+describe_update_options() {
-+ echo "<alternative> : the name of the alternative to set a provider for"
-+ alternatives_describe_update_options
-+}
-+
-+do_update() {
-+ local ALTERNATIVE=$1
-+ shift
-+ [[ -z "${ALTERNATIVE}" ]] && die -q "Missing required parameter 'alternative'"
-+ alternatives_do_update "$@"
-+}
-+
-+options_update() {
-+ alternatives_options_update
-+}
-+
-+### create action ###
-+
-+describe_create() {
-+ echo "Create a new alternative"
-+}
-+
-+describe_create_parameters() {
-+ echo "<alternative>"
-+}
-+
-+describe_create_options() {
-+ echo "<alternative> : the name of the alternative to create"
-+}
-+
-+do_create() {
-+ [[ $# == 1 ]] || die "Need exactly one alternative name"
-+
-+ local auto_dir="${ESELECT_AUTO_GENERATED_MODULES_PATH}"
-+ local auto_file="${auto_dir}/${1}.eselect"
-+
-+ if [[ ! -e "${auto_file}" ]]; then
-+ if [[ ! -e "${auto_dir}" ]]; then
-+ mkdir -p "${auto_dir}" || die "Failed to create ${auto_dir}"
-+ elif [[ ! -d "${auto_dir}" ]]; then
-+ die "${auto_dir} exists but is a file"
-+ fi
-+ cat >> ${auto_file} <<- ENDOFTEXT
-+ DESCRIPTION="${DESCRIPTION} for ${1}"
-+ VERSION="${VERSION}"
-+ MAINTAINER="${MAINTAINER}"
-+ ESELECT_MODULE_GROUP="Alternatives"
-+
-+ ALTERNATIVE="${1}"
-+
-+ inherit alternatives
-+ ENDOFTEXT
-+ fi
-+}
-+
-+### delete action ###
-+
-+describe_delete() {
-+ echo "Delete an existing alternative"
-+}
-+
-+describe_delete_parameters() {
-+ echo "<alternative>"
-+}
-+
-+describe_delete_options() {
-+ echo "<alternative> : the name of the alternative to delete"
-+}
-+
-+do_delete() {
-+ [[ $# == 1 ]] || die "Need exactly one alternative name"
-+
-+ local auto_dir="${ESELECT_AUTO_GENERATED_MODULES_PATH}"
-+ local auto_file="${auto_dir}/${1}.eselect"
-+
-+ if [[ -e "${auto_file}" ]]; then
-+ rm "${auto_file}" || die "Failed to remove alternative: ${1}"
-+ fi
-+}
-+
-+### add action ###
-+
-+describe_add() {
-+ alternatives_describe_add
-+}
-+
-+describe_add_parameters() {
-+ echo "<alternative> $(alternatives_describe_add_parameters)"
-+}
-+
-+describe_add_options() {
-+ echo "<alternative> : the name of the alternative to add a provider for"
-+ alternatives_describe_add_options
-+}
-+
-+do_add() {
-+ local ALTERNATIVE=$1
-+ shift
-+ [[ -z "${ALTERNATIVE}" ]] && die -q "Missing required parameter 'alternative'"
-+ alternatives_do_add "$@"
-+}
-+
-+options_add() {
-+ alternatives_options_add
-+}
-+
-+### remove action ###
-+
-+describe_remove() {
-+ alternatives_describe_remove
-+}
-+
-+describe_remove_parameters() {
-+ echo "<alternative> $(alternatives_describe_remove_parameters)"
-+}
-+
-+describe_remove_options() {
-+ echo "<alternative> : the name of the alternative to remove a provider from"
-+ alternatives_describe_remove_options
-+}
-+
-+do_remove() {
-+ local ALTERNATIVE=$1
-+ shift
-+ [[ -z "${ALTERNATIVE}" ]] && die -q "Missing required parameter 'alternative'"
-+ alternatives_do_remove "$@"
-+}
-+
-+options_remove() {
-+ alternatives_options_remove
-+}
-diff --git a/modules/modules.eselect b/modules/modules.eselect
-index 5bc78ca..23c1e59 100644
---- a/modules/modules.eselect
-+++ b/modules/modules.eselect
-@@ -2,7 +2,7 @@
- # Copyright 2006-2018 Gentoo Foundation
- # Distributed under the terms of the GNU GPL version 2 or later
-
--inherit config
-+inherit config output tests
-
- DESCRIPTION="Query eselect modules"
- MAINTAINER="eselect@gentoo.org"
-@@ -15,57 +15,94 @@ describe_list() {
- echo "List all available modules"
- }
-
--describe_list_options() {
-- echo "--only-names : Output names of modules only"
--}
--
- # List all installed modules
- do_list() {
-- local only_names path file module name desc
-- local -a extra_modules
--
-- if [[ ${1#--} = only-names ]]; then
-- only_names=1
-- shift
-- fi
-- [[ $# -gt 0 ]] && die -q "Too many parameters"
--
-- for path in "${ESELECT_MODULES_PATH[@]}" ; do
-- [[ -d ${path} ]] || continue
-- for file in "${path}"/*.eselect ; do
-- [[ -f ${file} ]] || continue
-- extra_modules=( "${extra_modules[@]}" "${file}" )
-- done
-- done
--
-- if [[ -n ${only_names} ]]; then
-- # This is mainly intended for bash completion
-- echo "help"
-- echo "usage"
-- echo "version"
-- for module in "${extra_modules[@]}" ; do
-- name=${module##*/}
-- echo "${name%%.eselect}"
-- done
-- else
-- write_list_start "Built-in modules:"
-- write_kv_list_entry "help" "Display a help message"
-- write_kv_list_entry "usage" "Display a usage message"
-- write_kv_list_entry "version" "Display version information"
--
-- if [[ ${#extra_modules[@]} -gt 0 ]] ; then
-- echo
-- write_list_start "Extra modules:"
-- for module in "${extra_modules[@]}" ; do
-- name=${module##*/}
-- name=${name%%.eselect}
-- desc=$(ESELECT_MODULE_NAME=${name} \
-- load_config "${module}" DESCRIPTION)
-- desc=${desc:-No description available}
-- write_kv_list_entry "${name}" "${desc}"
-- done
-- fi
-- fi
-+ local path file module name desc group groups Extra_modules
-+
-+ write_list_start "Built-in modules:"
-+ write_kv_list_entry "help" "Display a help message"
-+ write_kv_list_entry "usage" "Display a usage message"
-+ write_kv_list_entry "version" "Display version information"
-+ write_kv_list_entry "print-modules" "Print eselect modules"
-+ write_kv_list_entry "print-actions" "Print actions for a given module"
-+ write_kv_list_entry "print-options" "Print options for a given action"
-+
-+ for path in "${ESELECT_MODULES_PATH[@]}" ; do
-+ [[ -d ${path} ]] || continue
-+ for file in ${path}/*.eselect ; do
-+ [[ -f ${file} ]] || continue
-+ group=$(load_config "${file}" ESELECT_MODULE_GROUP)
-+ if [[ -n ${group} ]]; then
-+ has ${group} ${groups} || groups+=" ${group}"
-+ declare ${group}_modules+=" ${file}"
-+ else
-+ Extra_modules+=" ${file}"
-+ fi
-+ done
-+ done
-+
-+ for group in ${groups} Extra; do
-+ local m
-+ m="${group}_modules"
-+ if [[ -n ${!m} ]] ; then
-+ echo
-+ write_list_start "${group} modules:"
-+ for module in ${!m}; do
-+ name=${module##*/}
-+ name=${name%%.eselect}
-+ desc=$(load_config "${module}" DESCRIPTION)
-+ desc=${desc:-No description available}
-+ write_kv_list_entry "${name}" "${desc}"
-+ done
-+ fi
-+ done
-+}
-+
-+### group action
-+
-+describe_group() {
-+ echo "Lists all available modules belonging to a specified group."
-+}
-+
-+describe_group_parameters() {
-+ echo "<group>"
-+}
-+
-+do_group() {
-+ local path file groupname="$1" group module modules name desc
-+ [[ -z "$groupname" ]] && die -q "Required option (group name) missing."
-+
-+ if [[ ${groupname} == Built-in ]]; then
-+ write_list_start "Built-in modules:"
-+ write_kv_list_entry "help" "Display a help message"
-+ write_kv_list_entry "usage" "Display a usage message"
-+ write_kv_list_entry "version" "Display version information"
-+ return 0
-+ fi
-+
-+ for path in "${ESELECT_MODULES_PATH[@]}" ; do
-+ [[ -d ${path} ]] || continue
-+ for file in ${path}/*.eselect ; do
-+ [[ -f ${file} ]] || continue
-+ group=$(load_config "${file}" ESELECT_MODULE_GROUP)
-+ [[ ${groupname} == ${group} ||
-+ ( ${groupname} == Extra && -z ${group} ) ]] || continue
-+ modules+=" ${file}"
-+ done
-+ done
-+
-+ if [[ -n ${modules} ]] ; then
-+ write_list_start "${groupname} modules:"
-+ for module in ${modules}; do
-+ name=${module##*/}
-+ name=${name%%.eselect}
-+ desc=$(load_config "${module}" DESCRIPTION)
-+ desc=${desc:-No description available}
-+ write_kv_list_entry "${name}" "${desc}"
-+ done
-+ else
-+ die -q "No modules belonging to ${groupname} was found"
-+ fi
- }
-
- ### has action
-@@ -75,56 +112,113 @@ describe_has() {
- }
-
- describe_has_parameters() {
-- echo "<module>"
-+ echo "<module>"
- }
-
- do_has() {
-- [[ -z $1 ]] && die -q "Required option (module name) missing"
-- [[ $# -gt 1 ]] && die -q "Too many parameters"
--
-- local modname=$1 modpath
-- for modpath in "${ESELECT_MODULES_PATH[@]}" ; do
-- [[ -f ${modpath}/${modname}.eselect ]] && return 0
-- done
-- return 1
-+ [[ -z $1 ]] && die -q "Required option (module name) missing"
-+ [[ $# -gt 1 ]] && die -q "Too many parameters"
-+ local modname="$1" modpath
-+ [[ -z "$modname" ]] && die -q "Required option (module name) missing."
-+ for modpath in "${ESELECT_MODULES_PATH[@]}" ; do
-+ [[ -f "${modpath}/${modname}.eselect" ]] && return 0
-+ done
-+ return 1
- }
-
- ### add action
--# *** Commented out. Do we really want to have an eselect module that is
--# *** installing other modules in a system directory? Also, this should
--# *** go together with a "remove" action.
--
--# describe_add() {
--# echo "Install the given module file somewhere that eselect can find it."
--# echo "By default, install to \$HOME/.eselect/modules/, unless running as "
--# echo "root. Then, install to ${ESELECT_DATA_PATH}/modules/."
--# }
--
--# describe_add_parameters() {
--# echo "<module_file>"
--# }
--
--# do_add() {
--# local local_path="${ROOT}${HOME}/.eselect/modules/" module_file
--# local force_default=0
--#
--# if [[ $1 = "--force-default-location" ]] ; then
--# force_default=1
--# shift
--# fi
--# module_file=$1
--#
--# [[ -z ${module_file} ]] && die -q "Required option (module file) missing"
--#
--# # TODO: Don't install the module "somewhere", depending on write access.
--# # Add an option to control if it goes to the user's or to the system dir.
--# if ! cp "${module_file}" "${ESELECT_DEFAULT_MODULES_PATH}" &> /dev/null ; then
--# [[ ${force_default} == 1 ]] \
--# && die -q "Failed to install module file to default modules path"
--#
--# mkdir -p "${local_path}" \
--# || die -q "Failed to create module install directory"
--# cp "${module_file}" "${local_path}" \
--# || die -q "Failed to install module file"
--# fi
--# }
-+
-+describe_add() {
-+ echo "Install a module file"
-+}
-+
-+describe_add_options() {
-+ echo "--default : install as global module (default if root)"
-+ echo "--user : install as user's module"
-+}
-+
-+describe_add_parameters() {
-+ echo "<module_file>"
-+}
-+
-+do_add() {
-+ local module_file module_path
-+ case $1 in
-+ --default)
-+ module_path="${ESELECT_DEFAULT_MODULES_PATH}"
-+ shift
-+ ;;
-+ --user)
-+ module_path="${ESELECT_USER_MODULES_PATH}"
-+ mkdir -p "${module_path}" || die -q "Failed to create directory ${module_path}"
-+ shift
-+ ;;
-+ *) : ;;
-+ esac
-+ module_file=$1
-+
-+ [[ -z ${module_file} ]] && die -q "Required module file missing"
-+
-+ if [[ -n ${module_path} ]]; then
-+ cp "${module_file}" "${module_path}" &> /dev/null || \
-+ die -q "Failed to install module file to ${module_path}"
-+ else
-+ if ! cp "${module_file}" "${ESELECT_DEFAULT_MODULES_PATH}" &> /dev/null ; then
-+ mkdir -p "${ESELECT_USER_MODULES_PATH}" \
-+ || die -q "Failed to create directory ${ESELECT_USER_MODULES_PATH}"
-+ cp "${module_file}" "${ESELECT_USER_MODULES_PATH}" \
-+ || die -q "Failed to install module file ${module_file}"
-+ fi
-+ fi
-+}
-+
-+### remove action
-+
-+describe_remove() {
-+ echo "Remove the given module name"
-+}
-+
-+describe_remove_options() {
-+ echo "--default : remove global module (default if root)"
-+ echo "--alternatives : remove generated alternatives module"
-+ echo "--user : remove user module"
-+}
-+
-+describe_remove_parameters() {
-+ echo "<module>"
-+}
-+
-+do_remove() {
-+ local module_name module_path ret
-+ case $1 in
-+ --alternatives)
-+ module_path="${ESELECT_GENERATED_MODULES_PATH}"
-+ shift
-+ ;;
-+ --default)
-+ module_path="${ESELECT_DEFAULT_MODULES_PATH}"
-+ shift
-+ ;;
-+ --user)
-+ module_path="${ESELECT_USER_MODULES_PATH}"
-+ shift
-+ ;;
-+ *) : ;;
-+ esac
-+ module_name=$1
-+
-+ [[ -z ${module_name} ]] && die -q "Required module name missing"
-+
-+ if [[ -n ${module_path} ]]; then
-+ rm "${module_path}/${module_name}.eselect" &> /dev/null
-+ ret=$?
-+ else
-+ for module_path in "${ESELECT_MODULES_PATH[@]}" ; do
-+ rm "${module_path}/${module_name}.eselect" &> /dev/null
-+ ret=$?
-+ done
-+ fi
-+ [[ ${ret} != 0 ]] && die -q "Failed to remove module ${module_name}"
-+}
-+
-+# vim: set ft=eselect sw=4 sts=4 ts=4 et tw=80 :
diff --git a/app-admin/eselect/metadata.xml b/app-admin/eselect/metadata.xml
deleted file mode 100644
index 8c8d15633..000000000
--- a/app-admin/eselect/metadata.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
-<pkgmetadata>
- <maintainer type="person">
- <email>bicatali@gentoo.org</email>
- </maintainer>
-</pkgmetadata>