diff options
author | Ulrich Müller <ulm@gentoo.org> | 2015-03-31 16:48:57 +0000 |
---|---|---|
committer | Ulrich Müller <ulm@gentoo.org> | 2015-03-31 16:48:57 +0000 |
commit | 5b6e4ea83317615b2c0fb49eb95898038826e5cc (patch) | |
tree | f195932a32505f7b2f8417ec8b1ce89bc6bd12c0 /app-eselect/eselect-gnat | |
parent | Move package from app-admin to app-eselect category. (diff) | |
download | gentoo-2-5b6e4ea83317615b2c0fb49eb95898038826e5cc.tar.gz gentoo-2-5b6e4ea83317615b2c0fb49eb95898038826e5cc.tar.bz2 gentoo-2-5b6e4ea83317615b2c0fb49eb95898038826e5cc.zip |
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!)
Diffstat (limited to 'app-eselect/eselect-gnat')
-rw-r--r-- | app-eselect/eselect-gnat/ChangeLog | 171 | ||||
-rw-r--r-- | app-eselect/eselect-gnat/eselect-gnat-1.3-r1.ebuild | 32 | ||||
-rw-r--r-- | app-eselect/eselect-gnat/eselect-gnat-1.4-r1.ebuild | 35 | ||||
-rw-r--r-- | app-eselect/eselect-gnat/eselect-gnat-1.4.ebuild | 35 | ||||
-rw-r--r-- | app-eselect/eselect-gnat/eselect-gnat-1.5.ebuild | 35 | ||||
-rw-r--r-- | app-eselect/eselect-gnat/files/gnat-common-1.3-r1.bash | 223 | ||||
-rw-r--r-- | app-eselect/eselect-gnat/files/gnat-common-1.4-r1.bash | 226 | ||||
-rw-r--r-- | app-eselect/eselect-gnat/files/gnat.eselect-1.3 | 207 | ||||
-rw-r--r-- | app-eselect/eselect-gnat/files/gnat.eselect-1.4 | 230 | ||||
-rw-r--r-- | app-eselect/eselect-gnat/files/gnat.eselect-1.5 | 226 | ||||
-rw-r--r-- | app-eselect/eselect-gnat/metadata.xml | 6 |
11 files changed, 1426 insertions, 0 deletions
diff --git a/app-eselect/eselect-gnat/ChangeLog b/app-eselect/eselect-gnat/ChangeLog new file mode 100644 index 000000000000..ffd48357e9a0 --- /dev/null +++ b/app-eselect/eselect-gnat/ChangeLog @@ -0,0 +1,171 @@ +# ChangeLog for app-eselect/eselect-gnat +# Copyright 1999-2015 Gentoo Foundation; Distributed under the GPL v2 +# $Header: /var/cvsroot/gentoo-x86/app-eselect/eselect-gnat/ChangeLog,v 1.1 2015/03/31 16:48:57 ulm Exp $ + + 31 Mar 2015; Ulrich Müller <ulm@gentoo.org> +eselect-gnat-1.3-r1.ebuild, + +eselect-gnat-1.4.ebuild, +eselect-gnat-1.4-r1.ebuild, + +eselect-gnat-1.5.ebuild, +files/gnat.eselect-1.3, + +files/gnat-common-1.3-r1.bash, +files/gnat.eselect-1.4, + +files/gnat-common-1.4-r1.bash, +files/gnat.eselect-1.5, +metadata.xml: + Move package from app-admin to app-eselect category. + + 10 Aug 2014; Patrick Lauer <patrick@gentoo.org> eselect-gnat-1.3-r1.ebuild, + eselect-gnat-1.4-r1.ebuild, eselect-gnat-1.4.ebuild, eselect-gnat-1.5.ebuild: + Fix description for more repoman happy + + 08 Mar 2010; George Shapovalov <george@gentoo.org> + eselect-gnat-1.5.ebuild: + added ~sparc in preparison to enable gnat-gcc on sparc (#301446) + +*eselect-gnat-1.5 (22 Jan 2010) + + 22 Jan 2010; George Shapovalov <george@gentoo.org> + +files/gnat.eselect-1.5, +eselect-gnat-1.5.ebuild: + new version, supporting brief output mode (#292105) + + 16 May 2008; George Shapovalov <george@gentoo.org> + -files/gnat.eselect-1.2, -files/gnat-common-1.2.bash, + -eselect-gnat-1.2.ebuild: + removed old version + +*eselect-gnat-1.4-r1 (16 May 2008) + + 16 May 2008; George Shapovalov <george@gentoo.org> + +files/gnat-common-1.4-r1.bash, +eselect-gnat-1.4-r1.ebuild: + fixed incorrect semicolon in ADA_PROJECT_PATH + +*eselect-gnat-1.4 (14 Apr 2008) + + 14 Apr 2008; George Shapovalov <george@gentoo.org> +files/gnat.eselect-1.4, + +eselect-gnat-1.4.ebuild: + split profile validity check off the get_active_gnat and made the update + action clean unmerged profile + + 04 Mar 2008; Santiago M. Mola <coldwind@gentoo.org> + eselect-gnat-1.3-r1.ebuild: + amd64 stable wrt bug #209265 + + 08 Feb 2008; Tobias Scherbaum <dertobi123@gentoo.org> + eselect-gnat-1.3-r1.ebuild: + ppc stable, bug #209265 + + 07 Feb 2008; George Shapovalov <george@gentoo.org> + -files/gnat.eselect-0.9, -files/gnat.eselect-1.0, + -files/gnat.eselect-1.0-r1, -files/gnat.eselect-1.1, + -files/gnat.eselect-1.1-r1, -files/gnat-common-1.3.bash, + -files/gnat-common.bash, -eselect-gnat-0.9.ebuild, + -eselect-gnat-1.0.ebuild, -eselect-gnat-1.0-r1.ebuild, + -eselect-gnat-1.1.ebuild, -eselect-gnat-1.1-r1.ebuild, + -eselect-gnat-1.3.ebuild: + pulled obsolete versions + + 05 Feb 2008; Christian Faulhammer <opfer@gentoo.org> + eselect-gnat-1.3-r1.ebuild: + stable x86, bug 208997 + +*eselect-gnat-1.3-r1 (29 Dec 2007) + + 29 Dec 2007; George Shapovalov <george@gentoo.org> + +files/gnat-common-1.3-r1.bash, +eselect-gnat-1.3-r1.ebuild: + fixed problem with ADA_PROJECT_PATH when no libs are installed (203628) + +*eselect-gnat-1.3 (26 Dec 2007) + + 26 Dec 2007; George Shapovalov <george@gentoo.org> + +files/gnat.eselect-1.3, +files/gnat-common-1.3.bash, + +eselect-gnat-1.3.ebuild: + new version, implements selection of primary compilers and versioned + virtual/ada processing (see #151343) + + 26 Dec 2007; Harald van Dijk <truedfx@gentoo.org> eselect-gnat-1.2.ebuild: + Fix typo that left gnat-common.bash uninstalled + +*eselect-gnat-1.2 (14 Dec 2007) + + 14 Dec 2007; George Shapovalov <george@gentoo.org> + +files/gnat.eselect-1.2, +files/gnat-common-1.2.bash, + +eselect-gnat-1.2.ebuild: + new version, supports unified libs layout + +*eselect-gnat-1.1-r1 (11 Dec 2007) + + 11 Dec 2007; George Shapovalov <george@gentoo.org> + +files/gnat.eselect-1.1-r1, +eselect-gnat-1.1-r1.ebuild: + replaced env-update with do_action env update, #179880 + +*eselect-gnat-1.1 (19 Sep 2007) + + 19 Sep 2007; <portage-cvs@gentoo.org> +files/gnat.eselect-1.1, + +files/gnat-common.bash, +eselect-gnat-1.1.ebuild: + split off code common with gnat.eclass (##192505 and 167000). + + 07 Sep 2007; George Shapovalov <george@gentoo.org> files/gnat.eselect-0.9, + files/gnat.eselect-1.0, files/gnat.eselect-1.0-r1: + fixed typo in DESCRIPTION + +*eselect-gnat-1.0-r1 (15 Jun 2007) + + 15 Jun 2007; George Shapovalov <george@gentoo.org> + +files/gnat.eselect-1.0-r1, +eselect-gnat-1.0-r1.ebuild: + added LIBDIR/adalib to LDPATH and refactored creation of env file. Now all + the libs should be picked up (fixes some issues with asis) + + 25 May 2007; user account for gentoo cvs access <portage-cvs@gentoo.org> + -files/gnat.eselect-0.7, -files/gnat.eselect-0.8, + -files/gnat.eselect-0.8-r1, -eselect-gnat-0.7.ebuild, + -eselect-gnat-0.8.ebuild, -eselect-gnat-0.8-r1.ebuild: + removed old versions (would not work with the eclasses at present in fact) + +*eselect-gnat-1.0 (25 May 2007) + + 25 May 2007; user account for gentoo cvs access <portage-cvs@gentoo.org> + +files/gnat.eselect-1.0, +eselect-gnat-1.0.ebuild: + new version, forcing env-update upon changes now + +*eselect-gnat-0.9 (26 May 2006) + + 26 May 2006; George Shapovalov <george@gentoo.org> + +files/gnat.eselect-0.9, +eselect-gnat-0.9.ebuild: + added LDPATH settings for gnat and the libs + + 17 May 2006; George Shapovalov <george@gentoo.org> + -files/gnat.eselect-0.6, -files/gnat.eselect, -eselect-gnat-0.5.ebuild, + -eselect-gnat-0.6.ebuild: + removed stale versions + +*eselect-gnat-0.8-r1 (17 May 2006) + + 17 May 2006; George Shapovalov <george@gentoo.org> + +files/gnat.eselect-0.8-r1, +eselect-gnat-0.8-r1.ebuild: + a fix to process all the installed libs, not just the 1st one.. (revbump, so + that everybody picks up the right code) + + 12 May 2006; Joseph Jezak <josejx@gentoo.org> eselect-gnat-0.8.ebuild: + Marked ~ppc for bug #133119. + +*eselect-gnat-0.8 (12 May 2006) + + 12 May 2006; George Shapovalov <george@gentoo.org> + +files/gnat.eselect-0.8, +eselect-gnat-0.8.ebuild: + new version - fixes ROOTPATH + some cosmetic changes + + 02 May 2006; George Shapovalov <george@gentoo.org> files/gnat.eselect-0.7: + small fix to the do_show and do_list methods (so that they actually show libs) + +*eselect-gnat-0.7 (02 May 2006) + + 02 May 2006; George Shapovalov <george@gentoo.org> + +files/gnat.eselect-0.7, +eselect-gnat-0.7.ebuild: + new version of eselect module, first shot at supporting Ada libs + +*eselect-gnat-0.6 (22 Jan 2006) + + 22 Jan 2006; George Shapovalov <george@gentoo.org> + +files/gnat.eselect-0.6, +eselect-gnat-0.6.ebuild: + new version: moved gnat specs under /usr/share to avoid config_protect + +*eselect-gnat-0.5 (17 Jan 2006) + + 17 Jan 2006; George Shapovalov <george@gentoo.org> +files/gnat.eselect, + +metadata.xml, +eselect-gnat-0.5.ebuild: + initial commit. eselect module for the gnat compilers (#111340) diff --git a/app-eselect/eselect-gnat/eselect-gnat-1.3-r1.ebuild b/app-eselect/eselect-gnat/eselect-gnat-1.3-r1.ebuild new file mode 100644 index 000000000000..84c715bd58c8 --- /dev/null +++ b/app-eselect/eselect-gnat/eselect-gnat-1.3-r1.ebuild @@ -0,0 +1,32 @@ +# 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/eselect-gnat-1.3-r1.ebuild,v 1.1 2015/03/31 16:48:57 ulm Exp $ + +inherit eutils + +DESCRIPTION="gnat module for eselect" +HOMEPAGE="http://www.gentoo.org" +SRC_URI="" + +LICENSE="GPL-2" +SLOT="0" +KEYWORDS="amd64 ppc x86" + +IUSE="" +RDEPEND="app-admin/eselect" + +MODULEDIR="/usr/share/eselect/modules" + +# NOTE!! +# This path is duplicated in gnat-eselect module, +# adjust in both locations! +LIBDIR="/usr/share/gnat/lib" + +src_install() { + dodir ${MODULEDIR} + insinto ${MODULEDIR} + newins "${FILESDIR}"/gnat.eselect-${PV} gnat.eselect + dodir ${LIBDIR} + insinto ${LIBDIR} + newins "${FILESDIR}"/gnat-common-${PVR}.bash gnat-common.bash +} diff --git a/app-eselect/eselect-gnat/eselect-gnat-1.4-r1.ebuild b/app-eselect/eselect-gnat/eselect-gnat-1.4-r1.ebuild new file mode 100644 index 000000000000..0d3112eb9ddc --- /dev/null +++ b/app-eselect/eselect-gnat/eselect-gnat-1.4-r1.ebuild @@ -0,0 +1,35 @@ +# 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/eselect-gnat-1.4-r1.ebuild,v 1.1 2015/03/31 16:48:57 ulm Exp $ + +inherit eutils + +DESCRIPTION="gnat module for eselect" +HOMEPAGE="http://www.gentoo.org" +SRC_URI="" + +LICENSE="GPL-2" +SLOT="0" +KEYWORDS="~amd64 ~ppc ~x86" + +IUSE="" +RDEPEND="app-admin/eselect" + +MODULEDIR="/usr/share/eselect/modules" + +# NOTE!! +# This path is duplicated in gnat-eselect module, +# adjust in both locations! +LIBDIR="/usr/share/gnat/lib" + +src_install() { + dodir ${MODULEDIR} + insinto ${MODULEDIR} + newins "${FILESDIR}"/gnat.eselect-${PV} gnat.eselect + dodir ${LIBDIR} + insinto ${LIBDIR} + # !ATTN! + # Make sure to adjust version of installed file to a proper one if there is + # a change! + newins "${FILESDIR}"/gnat-common-${PVR}.bash gnat-common.bash +} diff --git a/app-eselect/eselect-gnat/eselect-gnat-1.4.ebuild b/app-eselect/eselect-gnat/eselect-gnat-1.4.ebuild new file mode 100644 index 000000000000..ca3d5150a660 --- /dev/null +++ b/app-eselect/eselect-gnat/eselect-gnat-1.4.ebuild @@ -0,0 +1,35 @@ +# 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/eselect-gnat-1.4.ebuild,v 1.1 2015/03/31 16:48:57 ulm Exp $ + +inherit eutils + +DESCRIPTION="gnat module for eselect" +HOMEPAGE="http://www.gentoo.org" +SRC_URI="" + +LICENSE="GPL-2" +SLOT="0" +KEYWORDS="~amd64 ~ppc ~x86" + +IUSE="" +RDEPEND="app-admin/eselect" + +MODULEDIR="/usr/share/eselect/modules" + +# NOTE!! +# This path is duplicated in gnat-eselect module, +# adjust in both locations! +LIBDIR="/usr/share/gnat/lib" + +src_install() { + dodir ${MODULEDIR} + insinto ${MODULEDIR} + newins "${FILESDIR}"/gnat.eselect-${PV} gnat.eselect + dodir ${LIBDIR} + insinto ${LIBDIR} + # !ATTN! + # Make sure to adjust version of installed file to a proper one if there is + # a change! + newins "${FILESDIR}"/gnat-common-1.3-r1.bash gnat-common.bash +} diff --git a/app-eselect/eselect-gnat/eselect-gnat-1.5.ebuild b/app-eselect/eselect-gnat/eselect-gnat-1.5.ebuild new file mode 100644 index 000000000000..937853b69242 --- /dev/null +++ b/app-eselect/eselect-gnat/eselect-gnat-1.5.ebuild @@ -0,0 +1,35 @@ +# 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/eselect-gnat-1.5.ebuild,v 1.1 2015/03/31 16:48:57 ulm Exp $ + +inherit eutils + +DESCRIPTION="gnat module for eselect" +HOMEPAGE="http://www.gentoo.org" +SRC_URI="" + +LICENSE="GPL-2" +SLOT="0" +KEYWORDS="~amd64 ~ppc ~x86 ~sparc" + +IUSE="" +RDEPEND=">=app-admin/eselect-1.2.5" + +MODULEDIR="/usr/share/eselect/modules" + +# NOTE!! +# This path is duplicated in gnat-eselect module, +# adjust in both locations! +LIBDIR="/usr/share/gnat/lib" + +src_install() { + dodir ${MODULEDIR} + insinto ${MODULEDIR} + newins "${FILESDIR}"/gnat.eselect-${PV} gnat.eselect + dodir ${LIBDIR} + insinto ${LIBDIR} + # !ATTN! + # Make sure to adjust version of installed file to a proper one if there is + # a change! + newins "${FILESDIR}"/gnat-common-1.4-r1.bash gnat-common.bash +} diff --git a/app-eselect/eselect-gnat/files/gnat-common-1.3-r1.bash b/app-eselect/eselect-gnat/files/gnat-common-1.3-r1.bash new file mode 100644 index 000000000000..5984d835334c --- /dev/null +++ b/app-eselect/eselect-gnat/files/gnat-common-1.3-r1.bash @@ -0,0 +1,223 @@ +# 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 <george@gentoo.org> +# 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 +} + diff --git a/app-eselect/eselect-gnat/files/gnat-common-1.4-r1.bash b/app-eselect/eselect-gnat/files/gnat-common-1.4-r1.bash new file mode 100644 index 000000000000..d12b811b81b4 --- /dev/null +++ b/app-eselect/eselect-gnat/files/gnat-common-1.4-r1.bash @@ -0,0 +1,226 @@ +# 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 <george@gentoo.org> +# 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 +} + diff --git a/app-eselect/eselect-gnat/files/gnat.eselect-1.3 b/app-eselect/eselect-gnat/files/gnat.eselect-1.3 new file mode 100644 index 000000000000..16777ce65660 --- /dev/null +++ b/app-eselect/eselect-gnat/files/gnat.eselect-1.3 @@ -0,0 +1,207 @@ +# 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="ada@gentoo.org" +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 +} diff --git a/app-eselect/eselect-gnat/files/gnat.eselect-1.4 b/app-eselect/eselect-gnat/files/gnat.eselect-1.4 new file mode 100644 index 000000000000..38e4c1b56a87 --- /dev/null +++ b/app-eselect/eselect-gnat/files/gnat.eselect-1.4 @@ -0,0 +1,230 @@ +# 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="ada@gentoo.org" +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 +} diff --git a/app-eselect/eselect-gnat/files/gnat.eselect-1.5 b/app-eselect/eselect-gnat/files/gnat.eselect-1.5 new file mode 100644 index 000000000000..893658f954b1 --- /dev/null +++ b/app-eselect/eselect-gnat/files/gnat.eselect-1.5 @@ -0,0 +1,226 @@ +# 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="ada@gentoo.org" +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 +} diff --git a/app-eselect/eselect-gnat/metadata.xml b/app-eselect/eselect-gnat/metadata.xml new file mode 100644 index 000000000000..3a0ddbad4e34 --- /dev/null +++ b/app-eselect/eselect-gnat/metadata.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd"> +<pkgmetadata> +<herd>ada</herd> +<longdescription>The eselect module for the supported gnat compilers.</longdescription> +</pkgmetadata> |