diff options
author | Justin Lecher <jlec@gentoo.org> | 2014-05-26 09:06:54 +0200 |
---|---|---|
committer | Justin Lecher <jlec@gentoo.org> | 2014-05-26 09:06:54 +0200 |
commit | d4cc98b5c88c00fe6a87ce1556657c6f8875bdb0 (patch) | |
tree | 0622a333418e6ac506051eddb40cb7ec383e7f4c | |
parent | Fix dependency on eselect (diff) | |
download | sci-d4cc98b5c88c00fe6a87ce1556657c6f8875bdb0.tar.gz sci-d4cc98b5c88c00fe6a87ce1556657c6f8875bdb0.tar.bz2 sci-d4cc98b5c88c00fe6a87ce1556657c6f8875bdb0.zip |
app-admin/eselect: Version Bump
Package-Manager: portage-2.2.10
-rw-r--r-- | app-admin/eselect/ChangeLog | 6 | ||||
-rw-r--r-- | app-admin/eselect/Manifest | 1 | ||||
-rw-r--r-- | app-admin/eselect/eselect-1.4.2-r100.ebuild | 72 | ||||
-rw-r--r-- | app-admin/eselect/files/eselect-1.4.2-alternatives.patch | 616 |
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 : |