diff options
author | George Shapovalov <george@gentoo.org> | 2008-04-14 14:50:48 +0000 |
---|---|---|
committer | George Shapovalov <george@gentoo.org> | 2008-04-14 14:50:48 +0000 |
commit | b5d5c006fc29ed9ff7fbe87a7880894045426627 (patch) | |
tree | 16d0751f38523e2cc14662530910b2245a2e1907 /app-admin/eselect-gnat/files | |
parent | Version bump, closes bug #217426. (diff) | |
download | gentoo-2-b5d5c006fc29ed9ff7fbe87a7880894045426627.tar.gz gentoo-2-b5d5c006fc29ed9ff7fbe87a7880894045426627.tar.bz2 gentoo-2-b5d5c006fc29ed9ff7fbe87a7880894045426627.zip |
split profile validity check off the get_active_gnat and made the update action clean unmerged profile
(Portage version: 2.1.5_rc3)
Diffstat (limited to 'app-admin/eselect-gnat/files')
-rw-r--r-- | app-admin/eselect-gnat/files/gnat.eselect-1.4 | 230 |
1 files changed, 230 insertions, 0 deletions
diff --git a/app-admin/eselect-gnat/files/gnat.eselect-1.4 b/app-admin/eselect-gnat/files/gnat.eselect-1.4 new file mode 100644 index 000000000000..a34979061d28 --- /dev/null +++ b/app-admin/eselect-gnat/files/gnat.eselect-1.4 @@ -0,0 +1,230 @@ +# Copyright 1999-2005 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id: gnat.eselect-1.4,v 1.1 2008/04/14 14:50:48 george Exp $ + +DESCRIPTION="Manage the installed gnat compilers" +MAINTAINER="ada@gentoo.org" +SVN_DATE='$Date: 2008/04/14 14:50:48 $' +VERSION=$(svn_date_to_version "${SVN_DATE}" ) + +# "inheriting" common stuff +# this crude sourcing has to stay the way it is, as common code +# cannot be part of some eclass (bug #192505) +. /usr/share/gnat/lib/gnat-common.bash + + +### Phylosophy +# Each gnat installs a "specs" file named ${ARCH}-${PN}-${SLOT} under ${SPECSDIR} +# Each lib creates a dir with its name under ${SPECSDIR} and populates it with +# similar specs files (same name scheme) +# Recognizing gnat specs from lib specs is then eazy - test entry for being a +# dir, then just check what gnat profiles are installed for each lib.. +# doset then creates env file that combines settings for gnat and for the +# corresponding profile of each installed lib.. + + +### Helpers + +# return *the* name of the active profile, checking that we do not have multiple +# env files. +# There can be only one! +get_current_gnat() { + local profiles=( $(get_env_list) ) + + if [ ${profiles[@]} == "${MARKER}*" ]; then exit; fi + + if (( 1 == ${#profiles[@]} )); then + local active=${profiles[0]#${MARKER}} + else + die -q "${ENVDIR} contains multiple gnat profiles, please cleanup!" + fi + + echo ${active} +# disabling this check, as we want to use get_current_gnat with empty profile +# as an indication that last gnat in SLOT was removed +# if [ -f ${SPECSDIR}/${active} ]; then +# echo ${active} +# else +# die -q "the active env.d profile does not correspond to any installed gnat!" +# fi +} + +# validity check that was removed from get_current_gnat, in case we need it +# somewhere.. +# Arguments: +# $1 - name of the gnat profiel to check +profile_is_valid() { + if [[ -n $1 ]] ; then + [[ -f ${SPECSDIR}/$1 ]] || return 1 + fi +} + +# check if the passed arg represents the installed gnat and return it or +# not_found +# takes args: +# $1 - list ID to check +get_name_from_list() { + compiler=$1 + + compilers=( $(find_all_compilers) ) + for (( i = 0 ; i < ${#compilers[@]} ; i = i + 1 )) ; do + if [[ ${compilers[$i]} == ${compiler} ]] ; then + echo ${compiler} + return + fi + done + + echo "(not-found)" +} + + +# removes env files (for compiler and libs) +# params: +# $1: the name of profile for which to remove env file +unset_env() { + rm -f ${ENVDIR}/${MARKER}$1 &> /dev/null +} + + +### show action ### + +describe_show() { + echo "Show the active gnat compiler/profile and installed libs" +} + +do_show() { + active=$(get_current_gnat) + if $(profile_is_valid ${active}); then + write_list_start "Current gnat version:" + if [[ -n ${active} ]] ; then + write_kv_list_entry "$active" "" + libs=( $(find_libs4profile ${active}) ) + write_list_start "Active libs:" + write_numbered_list "${libs[@]}" + else + write_kv_list_entry "(none set)" "" + fi + else + write_error_msg "The active profile in ${ENVDIR} is not valid! Please set a valid profile!" + fi +} + +### list action ### + +describe_list() { + echo "List installed gnat compilers and libs" +} + +do_list() { + compilers=( $(find_all_compilers ) ) + active=$(get_current_gnat) + + write_list_start "Available gnat compilers:" + + if [[ -n ${compilers[@]} ]] ; then + local i + for (( i = 0 ; i < ${#compilers[@]} ; i = i + 1 )) ; do + linkversion=${compilers[${i}]} + + [[ $linkversion == $active ]] && \ + compilers[${i}]="${compilers[${i}]} $(highlight '*' )" + done + write_numbered_list "${compilers[@]}" + + # now the libs + libs=( $(find_all_libs) ) + write_list_start "Installed libs:" + for (( i = 0 ; i < ${#libs[@]} ; i = i + 1 )) ; do + [ -f ${SPECSDIR}/${libs[$i]}/${active} ] && \ + libs[${i}]="${libs[${i}]} $(highlight '*' )" + done + write_numbered_list "${libs[@]}" + else + write_kv_list_entry "(none found)" "" + fi +} + + +### set action ### + +describe_set() { + echo "Set active gnat compiler" +} + +# The set action. Parameters: +# $1 - name of profile to set, obligatory, passed by eselect +# $2 - optional, name of env file to generate. Used from gnat.eclass. +do_set() { + if [[ -z ${1} ]] ; then + # no parameter + die -q "You didn't tell me which gnat to use" + fi + + local toset=$(get_name_from_list $1) + if [[ ${toset} == "(not-found)" ]] ; then + die -q "I don't recognise the selection" + fi + + # the action! + # in this implementation simply create an appropriate env file + local active=$(get_current_gnat) + if [[ -z ${2} ]] ; then + local envfile="${ENVDIR}/${MARKER}${toset}" + + # now we need to remove an old env file, which is guaranteed to + # be unique by get_current_gnat above + if [[ -n ${active} ]] ; then + unset_env ${active} + fi + # just for a good measure remove the one we are going to write + unset_env ${toset} + else + local envfile="$2" + fi + + generate_envFile ${toset} ${envfile} + + # force update environment + # should be replaced with "do_action env update" when #172472 gets resolved + env-update &> /dev/null +} + + + +### update action ### +# +# This action regenerates the /etc/env.d file for the current profile. Basically +# the same as set, only it does not take any parameters. It should be called from ebuilds +# installing Ada libs or in the pkg_postrm in gnatbuild.eclass, to clean up the +# profile if last gnat in SLOT was removed. + +describe_update() { + echo "Update active gnat profile picking up new libs." +} + +do_update() { + local toset=$(get_current_gnat) + local envfile="${ENVDIR}/${MARKER}${toset}" + # now check whether to update or unset the profile + if $(profile_is_valid ${toset}); then + generate_envFile ${toset} ${envfile} + else + unset_env ${toset} + fi + do_action env update &> /dev/null +} + +### unset action ### + +describe_unset() { + echo "Remove settings for currently active gnat" +} + +do_unset() { + local active=$(get_current_gnat) + # check whether we have any profile set before removing anything.. + if [[ -n ${active} ]] ; then + unset_env ${active} + do_action env update &> /dev/null + fi +} |