ulm         15/03/31 16:48:57

  Added:                gnat.eselect-1.3 gnat-common-1.4-r1.bash
                        gnat.eselect-1.4 gnat.eselect-1.5
                        gnat-common-1.3-r1.bash
  Log:
  Move package from app-admin to app-eselect category.
  
  (Portage version: 2.2.18/cvs/Linux x86_64, RepoMan options: --force, signed 
Manifest commit with key 9433907D693FB5B8!)

Revision  Changes    Path
1.1                  app-eselect/eselect-gnat/files/gnat.eselect-1.3

file : 
http://sources.gentoo.org/viewvc.cgi/gentoo-x86/app-eselect/eselect-gnat/files/gnat.eselect-1.3?rev=1.1&view=markup
plain: 
http://sources.gentoo.org/viewvc.cgi/gentoo-x86/app-eselect/eselect-gnat/files/gnat.eselect-1.3?rev=1.1&content-type=text/plain

Index: gnat.eselect-1.3
===================================================================
# Copyright 1999-2015 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id: gnat.eselect-1.3,v 1.1 2015/03/31 16:48:57 ulm Exp $

DESCRIPTION="Manage the installed gnat compilers"
MAINTAINER="[email protected]"
SVN_DATE='$Date: 2015/03/31 16:48:57 $'
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

        if [ -f ${SPECSDIR}/${active} ]; then
                echo ${active}
        else
                die -q "the active env.d profile does not correspond to any 
installed gnat!"
        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() {
        write_list_start "Current gnat version:"
        active=$(get_current_gnat)
        if [ ! -z ${active} ] ; then # not sure why [ -n ] does not do the same
                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
}

### 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

describe_update() {
        echo "Update active gnat profile picking up new libs."
}

do_update() {
        local toset=$(get_current_gnat)
        local envfile="${ENVDIR}/${MARKER}${toset}"
        generate_envFile ${toset} ${envfile}
        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
}



1.1                  app-eselect/eselect-gnat/files/gnat-common-1.4-r1.bash

file : 
http://sources.gentoo.org/viewvc.cgi/gentoo-x86/app-eselect/eselect-gnat/files/gnat-common-1.4-r1.bash?rev=1.1&view=markup
plain: 
http://sources.gentoo.org/viewvc.cgi/gentoo-x86/app-eselect/eselect-gnat/files/gnat-common-1.4-r1.bash?rev=1.1&content-type=text/plain

Index: gnat-common-1.4-r1.bash
===================================================================
# Copyright 1999-2015 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: 
/var/cvsroot/gentoo-x86/app-eselect/eselect-gnat/files/gnat-common-1.4-r1.bash,v
 1.1 2015/03/31 16:48:57 ulm Exp $

#
# Author: George Shapovalov <[email protected]>
# Purpose: Contains common vars/locations and functions for use by gnat.eclass,
# gnat.eselect and gnatbuild.eclass.
#
# NOTE!!!
# This code should just define vars (try to limit these!) and simple functions.
# No bash extensions!!
# That is, no portage or eclass constructs are allowed!
#



# ----------------------------------
# Globals

# Environmantal stuff (for env update)
SPECSDIR="/usr/share/gnat/eselect"
ENVDIR="/etc/env.d"
MARKER="55gnat-"

# User configurable settings
SETTINGSDIR="/etc/ada"
PRIMELIST="${SETTINGSDIR}/primary_compilers"

## Lib install locations
##
## Gnat profile dependent files go under under ${LibTop}/${Gnat_Profile}/${PN}
## and common files go unde SpecsDir, DataDir
#PREFIX=/usr
## Replace %LIBDIR% below with $(get_libdir) in eclasses and ebuilds (top level 
Ok, inherit multilib)
## or $(profile2libdir ${profile}) in this code, eselect module or anywhere
## outside portage (as profile will be available only during actual execution, 
this only should 
## be done inside corresponding functions).
#AdalibSpecsDir=${PREFIX}/include/ada
#AdalibDataDir=${PREFIX}/share/ada
#AdalibLibTop=${PREFIX}/%LIBDIR%/ada


# ------------------------------------
# Helpers
#

# get_all_profile_components splits gnat profile and returns pace separated 
list of its components:
# x86_64-pc-linux-gnu-gnat-gcc-4.1  -> x86_64-pc-linux-gnu gcc 4.1
# args:
#  $1 - the string to split
get_all_profile_components() {
        local GnatSLOT=${1##*-}
        local remainder=${1%-*}
        local GnatPkg=${remainder##*-}
        remainder=${remainder%-gnat-*}
        echo "${remainder} ${GnatPkg} ${GnatSLOT}"
}

# similar to above, returns only SLOT component:
# x86_64-pc-linux-gnu-gnat-gcc-4.1  -> 4.1
# args:
#  $1 - the string to extract the slot from
get_gnat_SLOT() {
        echo "${1##*-}"
}

# returns only Pkg component:
# x86_64-pc-linux-gnu-gnat-gcc-4.1  -> gcc
# args:
#  $1 - the string to extract the slot from
get_gnat_Pkg() {
        local remainder=${1%-*}
        echo "${remainder##*-}"
}

# returns only Arch component:
# x86_64-pc-linux-gnu-gnat-gcc-4.1  -> x86_64-pc-linux-gnu
# args:
#  $1 - the string to extract the slot from
get_gnat_Arch() {
        echo ${1%-gnat-*}
}



## -------------------------------------------
#  gnat profile and lib detection functions


# create a list of all gnat env.d files
# for now use trivial implementation - store name of active profile in the
# env file name, so it gets called 55gnat-${ARCH}-${PN}-${SLOT}
get_env_list() {
        for fn in ${ENVDIR}/${MARKER}*; do
                echo $(basename ${fn})
        done
}



# find all installed compilers and return a list
find_all_compilers() {
        [[ ! -d ${SPECSDIR} ]] && exit
        for fn in ${SPECSDIR}/*; do
                [[ ! -d ${fn} ]] && echo $(basename ${fn});
        done
}

# find installed primary compilers and return a list
find_primary_compilers() {
        [[ ! -f ${PRIMELIST} ]] && exit
        for fn in $(cat ${PRIMELIST}); do
                [[ -f ${SPECSDIR}/${fn} ]] && echo ${fn};
        done
}

# find installed libs and return a list
find_all_libs() {
        [[ ! -d ${SPECSDIR} ]] && exit
        for fn in ${SPECSDIR}/*; do
                [[ -d ${fn} ]] && echo $(basename ${fn});
        done
}

# find libs that have been built for a given profile
# Arguments:
#  $1 - gnat profile for which to detect active libs
find_libs4profile() {
        libs=( $(find_all_libs) )

        for (( i = 0 ; i < ${#libs[@]} ; i = i + 1 )) ; do
                [[ -f ${SPECSDIR}/${libs[$i]}/$1 ]] && echo "${libs[$i]}"
        done
}




## -----------------------
#  main action - central part of do_set and helpers


# extracts values of the passed var definition from given spec file
# params:
# $1: spec file (as generated by gnabuild.eclass)
# $2: variable name
get_var_from_spec() {
        local var=$(grep -e "^ *$2=" $1|cut -d= -f2)
        echo ${var}
}


# Cycle through given libs and form a ':' separated list of settings for the 
given
# var. Repeating settings are omitted, that is unique entry is added only first 
# time it is encountered.
#
# params:
#   $1 - name of env var to process
#   $2 - name of gnat profile
#   $3.. - list of libs to check (to avoid its composition every time)
#        - the list is expanded to list of args at the point of call
get_lib_var_settings() {
        local envVar=$1
        local toset=$2
        #echo "get_lib_var_settings params:$@" >> /tmp/eselect-gnat.rep
        if  [[ "none" != ${3} ]]; then
                local envString
                local specLine=$(get_var_from_spec ${SPECSDIR}/$3/${toset} 
${envVar})
                if [[ -n ${specLine} ]]; then 
                        envString="${specLine}"
                fi
                shift
                #
                while [[ -n $3 ]]; do
                        specLine=$(get_var_from_spec ${SPECSDIR}/$3/${toset} 
${envVar})
                        #echo "$3:${specLine}." >> /tmp/eselect-gnat.rep
                        if [[ -n ${specLine} ]] && [[ ! ${envString} =~ 
${specLine} ]]; then 
                                envString="${envString}:${specLine}"
                        fi
                        shift
                done
                echo "${envString}"
        fi
}



# The action!
# Part common for do_set and do_update of gnat.eselect, also used in gnat.eclass
# to set environment during lib build and installation
#
# params:
#  $1 - profile to set (toset param inside)
#  $2 - envfile

generate_envFile() {
        local toset=$1
        local envfile=$2

        local binpath="$(get_var_from_spec ${SPECSDIR}/${toset} binpath)"
        local libexecpath="$(get_var_from_spec ${SPECSDIR}/${toset} 
libexecpath)"
        local libs=( $(find_libs4profile ${toset}) )
        #echo "generate_envFile: ${libs[@]}" >> /tmp/eselect-gnat.rep
        if (( 0 == ${#libs[@]} )); then
                libs="none"
        fi

        local MyPath="${binpath}:${libexecpath}:$(get_lib_var_settings PATH 
${toset} ${libs[@]})"
        echo "PATH=${MyPath}" > "${envfile}"
        echo "ROOTPATH=${MyPath}" >> "${envfile}"
        echo "MANPATH=$(get_var_from_spec ${SPECSDIR}/${toset} 
manpath):$(get_lib_var_settings MANPATH ${toset} ${libs[@]})" >> "${envfile}"
        echo "INFOPATH=$(get_var_from_spec ${SPECSDIR}/${toset} 
infopath):$(get_lib_var_settings INFOPATH ${toset} ${libs[@]})" >> "${envfile}"
        # the next three use the common base
        local libBase=$(get_var_from_spec ${SPECSDIR}/${toset} ldpath)
        echo "LDPATH=${libBase}:${libBase}/adalib:$(get_lib_var_settings LDPATH 
${toset} ${libs[@]})" >> "${envfile}"
        echo "ADA_INCLUDE_PATH=${libBase}/adainclude:$(get_lib_var_settings 
ADA_INCLUDE_PATH ${toset} ${libs[@]})" >> "${envfile}"
        echo "ADA_OBJECTS_PATH=${libBase}/adalib:$(get_lib_var_settings 
ADA_OBJECTS_PATH ${toset} ${libs[@]})" >> "${envfile}"
        # ADA_PROJECT_PATH may not be set in any of the installed packages,
        # we should only create this line if cumulative var is non-empty
        My_ProjectPath=$(get_lib_var_settings ADA_PROJECT_PATH ${toset} 
${libs[@]})
        if [[ -n ${My_ProjectPath} ]]; then
                echo "ADA_PROJECT_PATH=${My_ProjectPath}" >> "${envfile}"
        fi
}




1.1                  app-eselect/eselect-gnat/files/gnat.eselect-1.4

file : 
http://sources.gentoo.org/viewvc.cgi/gentoo-x86/app-eselect/eselect-gnat/files/gnat.eselect-1.4?rev=1.1&view=markup
plain: 
http://sources.gentoo.org/viewvc.cgi/gentoo-x86/app-eselect/eselect-gnat/files/gnat.eselect-1.4?rev=1.1&content-type=text/plain

Index: gnat.eselect-1.4
===================================================================
# Copyright 1999-2015 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id: gnat.eselect-1.4,v 1.1 2015/03/31 16:48:57 ulm Exp $

DESCRIPTION="Manage the installed gnat compilers"
MAINTAINER="[email protected]"
SVN_DATE='$Date: 2015/03/31 16:48:57 $'
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
}



1.1                  app-eselect/eselect-gnat/files/gnat.eselect-1.5

file : 
http://sources.gentoo.org/viewvc.cgi/gentoo-x86/app-eselect/eselect-gnat/files/gnat.eselect-1.5?rev=1.1&view=markup
plain: 
http://sources.gentoo.org/viewvc.cgi/gentoo-x86/app-eselect/eselect-gnat/files/gnat.eselect-1.5?rev=1.1&content-type=text/plain

Index: gnat.eselect-1.5
===================================================================
# Copyright 1999-2015 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id: gnat.eselect-1.5,v 1.1 2015/03/31 16:48:57 ulm Exp $

DESCRIPTION="Manage the installed gnat compilers"
MAINTAINER="[email protected]"
SVN_DATE='$Date: 2015/03/31 16:48:57 $'
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:"

        local i
        for (( i = 0 ; i < ${#compilers[@]} ; i = i + 1 )) ; do
                linkversion=${compilers[${i}]}

                [[ $linkversion == $active ]] && \
                        compilers[${i}]=$(highlight_marker "${compilers[${i}]}")
        done
        write_numbered_list -m "(none)" "${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}]=$(highlight_marker "${libs[${i}]}")
        done
        write_numbered_list -m "(no libs)" "${libs[@]}"
}


### 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
}



1.1                  app-eselect/eselect-gnat/files/gnat-common-1.3-r1.bash

file : 
http://sources.gentoo.org/viewvc.cgi/gentoo-x86/app-eselect/eselect-gnat/files/gnat-common-1.3-r1.bash?rev=1.1&view=markup
plain: 
http://sources.gentoo.org/viewvc.cgi/gentoo-x86/app-eselect/eselect-gnat/files/gnat-common-1.3-r1.bash?rev=1.1&content-type=text/plain

Index: gnat-common-1.3-r1.bash
===================================================================
# Copyright 1999-2015 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: 
/var/cvsroot/gentoo-x86/app-eselect/eselect-gnat/files/gnat-common-1.3-r1.bash,v
 1.1 2015/03/31 16:48:57 ulm Exp $

#
# Original Author: George Shapovalov <[email protected]>
# Purpose: Contains common vars/locations and functions for use by gnat.eclass,
# gnat.eselect and gnatbuild.eclass.
#
# NOTE!!!
# This code should just define vars (try to limit these!) and simple functions.
# No bash extensions!!
# That is, no portage or eclass constructs are allowed!
#



# ----------------------------------
# Globals

# Environmantal stuff (for env update)
SPECSDIR="/usr/share/gnat/eselect"
ENVDIR="/etc/env.d"
MARKER="55gnat-"

# User configurable settings
SETTINGSDIR="/etc/ada"
PRIMELIST="${SETTINGSDIR}/primary_compilers"

## Lib install locations
##
## Gnat profile dependent files go under under ${LibTop}/${Gnat_Profile}/${PN}
## and common files go unde SpecsDir, DataDir
#PREFIX=/usr
## Replace %LIBDIR% below with $(get_libdir) in eclasses and ebuilds (top level 
Ok, inherit multilib)
## or $(profile2libdir ${profile}) in this code, eselect module or anywhere
## outside portage (as profile will be available only during actual execution, 
this only should 
## be done inside corresponding functions).
#AdalibSpecsDir=${PREFIX}/include/ada
#AdalibDataDir=${PREFIX}/share/ada
#AdalibLibTop=${PREFIX}/%LIBDIR%/ada


# ------------------------------------
# Helpers
#

# get_all_profile_components splits gnat profile and returns pace separated 
list of its components:
# x86_64-pc-linux-gnu-gnat-gcc-4.1  -> x86_64-pc-linux-gnu gcc 4.1
# args:
#  $1 - the string to split
get_all_profile_components() {
        local GnatSLOT=${1##*-}
        local remainder=${1%-*}
        local GnatPkg=${remainder##*-}
        remainder=${remainder%-gnat-*}
        echo "${remainder} ${GnatPkg} ${GnatSLOT}"
}

# similar to above, returns only SLOT component:
# x86_64-pc-linux-gnu-gnat-gcc-4.1  -> 4.1
# args:
#  $1 - the string to extract the slot from
get_gnat_SLOT() {
        echo "${1##*-}"
}

# returns only Pkg component:
# x86_64-pc-linux-gnu-gnat-gcc-4.1  -> gcc
# args:
#  $1 - the string to extract the slot from
get_gnat_Pkg() {
        local remainder=${1%-*}
        echo "${remainder##*-}"
}

# returns only Arch component:
# x86_64-pc-linux-gnu-gnat-gcc-4.1  -> x86_64-pc-linux-gnu
# args:
#  $1 - the string to extract the slot from
get_gnat_Arch() {
        echo ${1%-gnat-*}
}



## -------------------------------------------
#  gnat profile and lib detection functions


# create a list of all gnat env.d files
# for now use trivial implementation - store name of active profile in the
# env file name, so it gets called 55gnat-${ARCH}-${PN}-${SLOT}
get_env_list() {
        for fn in ${ENVDIR}/${MARKER}*; do
                echo $(basename ${fn})
        done
}



# find all installed compilers and return a list
find_all_compilers() {
        [[ ! -d ${SPECSDIR} ]] && exit
        for fn in ${SPECSDIR}/*; do
                [[ ! -d ${fn} ]] && echo $(basename ${fn});
        done
}

# find installed primary compilers and return a list
find_primary_compilers() {
        [[ ! -f ${PRIMELIST} ]] && exit
        for fn in $(cat ${PRIMELIST}); do
                [[ -f ${SPECSDIR}/${fn} ]] && echo ${fn};
        done
}

# find installed libs and return a list
find_all_libs() {
        [[ ! -d ${SPECSDIR} ]] && exit
        for fn in ${SPECSDIR}/*; do
                [[ -d ${fn} ]] && echo $(basename ${fn});
        done
}

# find libs that have been built for a given profile
# Arguments:
#  $1 - gnat profile for which to detect active libs
find_libs4profile() {
        libs=( $(find_all_libs) )

        for (( i = 0 ; i < ${#libs[@]} ; i = i + 1 )) ; do
                [[ -f ${SPECSDIR}/${libs[$i]}/$1 ]] && echo "${libs[$i]}"
        done
}




## -----------------------
#  main action - central part of do_set and helpers


# extracts values of the passed var definition from given spec file
# params:
# $1: spec file (as generated by gnabuild.eclass)
# $2: variable name
get_var_from_spec() {
        local var=$(grep -e "^ *$2=" $1|cut -d= -f2)
        echo ${var}
}


# Cycle through given libs and form a ':' separated list of settings for the 
given
# var. Returned string starts with ':' if there is any non-empty setting,
# otherwise returns empty string. Repeating settings are omitted, that is
# unique entry is added only first time it is encountered. No need to have some
# common dir listed many times in PATH for example.
#
# params:
#   $1 - name of env var to process
#   $2 - name of gnat profile
#   $3.. - list of libs to check (to avoid its composition every time)
#        - the list is expanded to list of args at the point of call
get_lib_var_settings() {
        local envVar=$1
        local toset=$2
        #echo "get_lib_var_settings params:$@" >> /tmp/eselect-gnat.rep
        if  [[ "none" != ${3} ]]; then
                local envString
                local specLine
                while [[ -n $3 ]]; do
                        specLine=$(get_var_from_spec ${SPECSDIR}/$3/${toset} 
${envVar})
                        #echo "$3:${specLine}." >> /tmp/eselect-gnat.rep
                        if [[ -n ${specLine} ]] && [[ ! ${envString} =~ 
${specLine} ]]; then 
                                envString="${envString}:${specLine}"
                        fi
                        shift
                done
                echo "${envString}"
        fi
}



# The action!
# Part common for do_set and do_update of gnat.eselect, also used in gnat.eclass
# to set environment during lib build and installation
#
# params:
#  $1 - profile to set (toset param inside)
#  $2 - envfile

generate_envFile() {
        local toset=$1
        local envfile=$2

        local binpath="$(get_var_from_spec ${SPECSDIR}/${toset} binpath)"
        local libexecpath="$(get_var_from_spec ${SPECSDIR}/${toset} 
libexecpath)"
        local libs=( $(find_libs4profile ${toset}) )
        #echo "generate_envFile: ${libs[@]}" >> /tmp/eselect-gnat.rep
        if (( 0 == ${#libs[@]} )); then
                libs="none"
        fi

        local MyPath="${binpath}:${libexecpath}$(get_lib_var_settings PATH 
${toset} ${libs[@]})"
        echo "PATH=${MyPath}" > "${envfile}"
        echo "ROOTPATH=${MyPath}" >> "${envfile}"
        echo "MANPATH=$(get_var_from_spec ${SPECSDIR}/${toset} 
manpath)$(get_lib_var_settings MANPATH ${toset} ${libs[@]})" >> "${envfile}"
        echo "INFOPATH=$(get_var_from_spec ${SPECSDIR}/${toset} 
infopath)$(get_lib_var_settings INFOPATH ${toset} ${libs[@]})" >> "${envfile}"
        # the next three use the common base
        local libBase=$(get_var_from_spec ${SPECSDIR}/${toset} ldpath)
        echo "LDPATH=${libBase}:${libBase}/adalib$(get_lib_var_settings LDPATH 
${toset} ${libs[@]})" >> "${envfile}"
        echo "ADA_INCLUDE_PATH=${libBase}/adainclude$(get_lib_var_settings 
ADA_INCLUDE_PATH ${toset} ${libs[@]})" >> "${envfile}"
        echo "ADA_OBJECTS_PATH=${libBase}/adalib$(get_lib_var_settings 
ADA_OBJECTS_PATH ${toset} ${libs[@]})" >> "${envfile}"
        # ADA_PROJECT_PATH may not be set in any of the installed packages,
        # we should only create this line if cumulative var is non-empty
        My_ProjectPath=$(get_lib_var_settings ADA_PROJECT_PATH ${toset} 
${libs[@]})
        if [[ -n ${My_ProjectPath} ]]; then
                echo "ADA_PROJECT_PATH=${My_ProjectPath}" >> "${envfile}"
        fi
}





Reply via email to