aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustin Lecher <jlec@gentoo.org>2014-05-26 09:06:54 +0200
committerJustin Lecher <jlec@gentoo.org>2014-05-26 09:06:54 +0200
commitd4cc98b5c88c00fe6a87ce1556657c6f8875bdb0 (patch)
tree0622a333418e6ac506051eddb40cb7ec383e7f4c /app-admin
parentFix dependency on eselect (diff)
downloadsci-d4cc98b5c88c00fe6a87ce1556657c6f8875bdb0.tar.gz
sci-d4cc98b5c88c00fe6a87ce1556657c6f8875bdb0.tar.bz2
sci-d4cc98b5c88c00fe6a87ce1556657c6f8875bdb0.zip
app-admin/eselect: Version Bump
Package-Manager: portage-2.2.10
Diffstat (limited to 'app-admin')
-rw-r--r--app-admin/eselect/ChangeLog6
-rw-r--r--app-admin/eselect/Manifest1
-rw-r--r--app-admin/eselect/eselect-1.4.2-r100.ebuild72
-rw-r--r--app-admin/eselect/files/eselect-1.4.2-alternatives.patch616
4 files changed, 695 insertions, 0 deletions
diff --git a/app-admin/eselect/ChangeLog b/app-admin/eselect/ChangeLog
index 17bab6ba8..ab8f2ad5f 100644
--- a/app-admin/eselect/ChangeLog
+++ b/app-admin/eselect/ChangeLog
@@ -2,6 +2,12 @@
# Copyright 1999-2014 Gentoo Foundation; Distributed under the GPL v2
# $Header: /var/cvsroot/gentoo-x86/app-admin/eselect/ChangeLog,v 1.179 2011/01/22 21:38:52 ulm Exp $
+*eselect-1.4.2-r100 (26 May 2014)
+
+ 26 May 2014; Justin Lecher <jlec@gentoo.org> +eselect-1.4.2-r100.ebuild,
+ +files/eselect-1.4.2-alternatives.patch:
+ Version Bump
+
*eselect-1.4.1-r100 (15 Feb 2014)
15 Feb 2014; Justin Lecher <jlec@gentoo.org> +eselect-1.4.1-r100.ebuild,
diff --git a/app-admin/eselect/Manifest b/app-admin/eselect/Manifest
index 48886c3b8..0049bcdcd 100644
--- a/app-admin/eselect/Manifest
+++ b/app-admin/eselect/Manifest
@@ -1,4 +1,5 @@
DIST eselect-1.3.7.tar.xz 166596 SHA256 68b3c9cf3f71633ca81c4d0edd64a77e02dc8d6b9a48641e59f0bf02378a0075 SHA512 909d79d76f144181895853ce132147daeee4ba6caf05bf08963aef147ef2d00be100d6181887d139614f1bebf15f0738ea58e755656b55b7d9d967d399ce72f0 WHIRLPOOL 82d7575e8bbcb2186ef1452e3edb07b7c242c4d14475da0c5867acc70d275e5fb9e166a2b0addb54fb3586eddabcf1eec1e208964db5489e4250bf1f8ad39468
DIST eselect-1.3.8.tar.xz 168040 SHA256 d0c50bfe0faaddc54fc184f698ee74a6029a21f5155c4670a2bea3ead954c138 SHA512 159bf3ddb05b1966318eaf62d09e454a024f8be7ead2300392abbcbaa54ef748a1c4db1b2f96162994bcab43071396eb96a0b47268f04cb8557f8804818da18e WHIRLPOOL 9c4da0bde2ae2b53e8949d59b13498f55ef2c849dcc8cac503a7d0dda2511311d94dfc7aa27a97432f13aa0b430fec0ab280594dc165bbb40e573dce8c8a74b0
DIST eselect-1.4.1.tar.xz 168616 SHA256 c60eb7e3b6eea36560ea16f8378de3c86926988a1eee3e6dd98c12f0340869c0 SHA512 c6754c3bb71efda36b807f2275aff0cc7bf5c3f58cbc7543b8255592940dae341e4b597ff1376b0997c37bcd0b736d813630b9fe4a4da2f85765217d8634deab WHIRLPOOL a9fb2dc6904c57878c744f70f0bd66a18b574eec04f042fa5ab60f608f31a0c90554153f3362c633742bb9918cb14f146269e0972cdf97998c60c236ae966f66
+DIST eselect-1.4.2.tar.xz 169036 SHA256 b3aef6a41c8f85f2f4b50204f0713b40586e8443965005c5fc2510218e359fc3 SHA512 d453ece6a06c6328dd3662520e7eba32ad8d10feeb6826d1f3e9c69c2f6b260e1872e0e9b5f1fc272b5d5a59145855a330454889306798808765f7530f4f4736 WHIRLPOOL 9322d5fe7085ffac7497d3f517860a5ba173edae86d4d058d0f4930ea1872712245ff094b777f0171d71d01ea38be3158614f358cf1923ceb6fbe0f735414503
DIST eselect-1.4.tar.xz 168580 SHA256 38f457567ac6a400763e49c215a78d5a7efc3edad589dda37bbd70847e3e7260 SHA512 4c28df99d3a235ccda60cb576634cde6110d3b7bc2fb7b8e3e9a69f7e09377dd9a5c615d6bf0ab8d668c137e8f658484fd28c0fe45e6ad3b7915925a3384b999 WHIRLPOOL 6646c023283b111bf7a973993dfe8537bdd3fab4c6c738af1f37c1aed1bddefbf834562036386dce1359d1b04da89049e7c60e4498733ac56587e037ca0ea87f
diff --git a/app-admin/eselect/eselect-1.4.2-r100.ebuild b/app-admin/eselect/eselect-1.4.2-r100.ebuild
new file mode 100644
index 000000000..3c136ae29
--- /dev/null
+++ b/app-admin/eselect/eselect-1.4.2-r100.ebuild
@@ -0,0 +1,72 @@
+# Copyright 1999-2014 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: $
+
+EAPI=5
+
+inherit autotools eutils bash-completion-r1
+
+DESCRIPTION="Gentoo's multi-purpose configuration and management tool"
+HOMEPAGE="http://wiki.gentoo.org/wiki/Project:Eselect"
+SRC_URI="http://dev.gentoo.org/~ulm/eselect/${P}.tar.xz"
+
+LICENSE="GPL-2+ || ( GPL-2+ CC-BY-SA-2.5 )"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~ppc-aix ~amd64-fbsd ~sparc-fbsd ~x86-fbsd ~x64-freebsd ~x86-freebsd ~hppa-hpux ~ia64-hpux ~x86-interix ~amd64-linux ~arm-linux ~ia64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos ~m68k-mint ~sparc-solaris ~sparc64-solaris ~x64-solaris ~x86-solaris"
+IUSE="doc emacs vim-syntax"
+
+RDEPEND="sys-apps/sed
+ || (
+ 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() {
+ epatch "${FILESDIR}"/${P}-1.4.2-alternatives.patch
+ AT_M4DIR="." eautoreconf
+}
+
+src_compile() {
+ emake
+ use doc && emake html
+}
+
+src_install() {
+ emake DESTDIR="${D}" install
+ 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
+ fowners root:portage /var/lib/gentoo/news
+ fperms g+w /var/lib/gentoo/news
+ fi
+
+ # band aid for prefix
+ if use prefix; then
+ cd "${ED}"/usr/share/eselect/libs
+ sed -i "s:ALTERNATIVESDIR_ROOTLESS=\"${EPREFIX}:ALTERNATIVESDIR_ROOTLESS=\":" alternatives.bash || die
+ 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.2-alternatives.patch b/app-admin/eselect/files/eselect-1.4.2-alternatives.patch
new file mode 100644
index 000000000..3f4a34bcf
--- /dev/null
+++ b/app-admin/eselect/files/eselect-1.4.2-alternatives.patch
@@ -0,0 +1,616 @@
+Index: bin/eselect.in
+===================================================================
+--- bin/eselect.in (revision 863)
++++ bin/eselect.in (working copy)
+@@ -22,10 +22,15 @@
+ # 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"
++
+ # Look in these places for modules
+-ESELECT_MODULES_PATH=( \
+- "${HOME}/.eselect/modules" \
+- "${ESELECT_DEFAULT_MODULES_PATH}" )
++ESELECT_MODULES_PATH=(
++ "${HOME}/.eselect/modules"
++ "${ESELECT_DEFAULT_MODULES_PATH}"
++ "${ESELECT_AUTO_GENERATED_MODULES_PATH}"
++)
+
+ # Look in this place for libraries
+ ESELECT_CORE_PATH="${ESELECT_DATA_PATH}/libs"
+--- bin/Makefile.am.orig 2013-09-02 14:35:05.328684465 +0400
++++ bin/Makefile.am 2013-09-02 14:49:50.895842067 +0400
+@@ -4,6 +4,7 @@
+ 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
+Index: libs/Makefile.am
+===================================================================
+--- libs/Makefile.am (revision 863)
++++ libs/Makefile.am (working copy)
+@@ -1,6 +1,7 @@
+ eselectlibsdir = $(datadir)/$(PACKAGE_NAME)/libs/
+
+ eselectlibs_DATA = \
++ alternatives.bash \
+ config.bash \
+ core.bash \
+ default.eselect \
+@@ -14,6 +15,7 @@
+ tests.bash
+
+ EXTRA_DIST = \
++ alternatives.bash.in \
+ config.bash.in \
+ core.bash.in \
+ default.eselect.in \
+@@ -30,7 +32,8 @@
+ -e 's%\@SED\@%@SED@%g' \
+ -e 's%\@PORTAGEQ\@%@PORTAGEQ@%g' \
+ -e 's%\@ENV_UPDATE\@%@ENV_UPDATE@%g' \
+- -e 's%\@CANONICALISE\@%@CANONICALISE@%g'
++ -e 's%\@CANONICALISE\@%@CANONICALISE@%g' \
++ -e 's%\@sysconfdir\@%@sysconfdir@%g'
+
+ %.bash : %.bash.in
+ @$(dosed) $< > $@
+--- libs/alternatives.bash.in.orig 1970-01-01 01:00:00.000000000 +0100
++++ libs/alternatives.bash.in 2011-09-06 18:55:43.000000000 +0100
+@@ -0,0 +1,550 @@
++# Copyright 2008 Mike Kelly
++# Copyright 2009 David Leverton
++# Copyright 2010 Bo ├śrsted Andresen
++# 2010: Adapted to eselect Sebastien Fabbro (who doesn't like copyrights)
++# Distributed under the terms of the GNU General Public License v2
++
++inherit config output path-manipulation
++
++ALTERNATIVESDIR_ROOTLESS="@sysconfdir@/env.d/alternatives"
++ALTERNATIVESDIR="${EROOT}${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##*/}
++
++ 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
++}
++
++### 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() {
++ [[ -z "${ALTERNATIVE}" ]] && die "Need to set ALTERNATIVE in the eselect module"
++
++ local force provider providers
++ if [[ ${1} == --force ]]; then
++ force=yes
++ shift
++ fi
++
++ if [[ ${1} == -+([[:digit:]]) ]]; then
++ providers=( $(get_providers) )
++ (( ${1#-} <= ${#providers[@]} )) || die -q "The given provider with index (${1#-}) does not exist"
++ provider=${providers[${1#-}-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[${1#-}-1]} ]] &&
++ die -q "The given provider (${provider}) does not exist, did you mean -${provider} (${providers[${1#-}-1]})?"
++ 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 "${ROOT}${oldsymlinks[old_i]}" || die "${dieprefix}: rm failed"
++ else
++ die "${dieprefix}: unknown \${pass} ${pass}???"
++ fi
++
++ old_i+=1
++
++ else
++ local target=${ALTERNATIVESDIR_ROOTLESS#/}/${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
++}
++
++_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
++}
++
++options_set() {
++ _options_parameters $FUNCNAME "$@"
++ get_providers
++}
++
++### update action ###
++
++describe_update() {
++ echo "Set a default provider if no valid one currently exists"
++}
++
++describe_update_parameters() {
++ echo "[--ignore] <provider>"
++}
++
++describe_update_options() {
++ echo "--ignore : update to any valid provider EXCEPT the specified provider"
++ echo "<provider> : the name of the provider to use"
++}
++
++do_update() {
++ [[ -z "${ALTERNATIVE}" ]] && die "Need to set ALTERNATIVE in the eselect module"
++
++ local p cur=$(get_current_provider) providers=( $(get_providers) ) ignore
++ 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
++
++ if [[ ${cur} == ${1} && -z ${ignore} ]]; then
++ # if current provider was just updated, reselect it since it could have changed
++ 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[@]}" && 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
++ 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} ]] && 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
++ 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
++}
++
++options_update() {
++ _options_parameters $FUNCNAME "$@"
++ get_providers
++}
++
++### 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() {
++ [[ -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"
++}
++
++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 preceeded by a dash (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
++
++ if [[ ${1} == -+([[:digit:]]) ]]; then
++ providers=( $(get_providers) )
++ (( ${1#-} <= ${#providers[@]} )) || die -q "The given provider with index (${1#-}) does not exist"
++ provider=${providers[${1#-}-1]}
++ else
++ provider="${1}"
++ 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[${1#-}-1]} ]] &&
++ die -q "The given provider (${provider}) does not exist, did you mean -${provider} (${providers[${1#-}-1]})?"
++ 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 :