public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] gentoo-x86 commit in app-admin/eselect-gnat/files: gnat.eselect-1.5
@ 2010-01-22 12:50 George Shapovalov (george)
  0 siblings, 0 replies; only message in thread
From: George Shapovalov (george) @ 2010-01-22 12:50 UTC (permalink / raw
  To: gentoo-commits

george      10/01/22 12:50:15

  Added:                gnat.eselect-1.5
  Log:
  new version, supporting brief output mode (#292105)
  (Portage version: 2.1.7.16/cvs/Linux x86_64)

Revision  Changes    Path
1.1                  app-admin/eselect-gnat/files/gnat.eselect-1.5

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

Index: gnat.eselect-1.5
===================================================================
# Copyright 1999-2005 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id: gnat.eselect-1.5,v 1.1 2010/01/22 12:50:15 george Exp $

DESCRIPTION="Manage the installed gnat compilers"
MAINTAINER="ada@gentoo.org"
SVN_DATE='$Date: 2010/01/22 12:50:15 $'
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
}






^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2010-01-22 12:50 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-01-22 12:50 [gentoo-commits] gentoo-x86 commit in app-admin/eselect-gnat/files: gnat.eselect-1.5 George Shapovalov (george)

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox