# [gnat-gcc] Comment le faire fonctionner ? (résolu)

## chipsterjulien

J'ai installer gnat-gcc en version 4.1.1 pour correspondre à la version actuelle de gcc que je possédais. J'ai compilé les paquets suivant :

```
app-admin/eselect-gnat

dev-lang/gnat-gcc
```

J'ai fait ceci en les rajoutant dans /etc/portage/package.keywords comme ils sont en masked actuellement.

Une fois installé, je n'arrive pas utiliser gnat. Normalement il devrait y avoir la commande gnatmake, mais ... elle est inexistante. Si quelqu'un a une idée sur la manière de procéder, je suis preneurLast edited by chipsterjulien on Sun Nov 19, 2006 3:07 pm; edited 1 time in total

----------

## chipsterjulien

J'ai trouvé ceci si ca peu aider quelqu'un :

```
locate gnatmake

/usr/i686-pc-linux-gnu/gnat-gcc-bin/4.1/gnatmake
```

----------

## _Seth_

Salut !  

une fois que tu as installé gnat-gcc (ou gnat-gpl), tu lances eselect (avec bash-completion c'est vraiment pratique)

```
# eselect gnat list
```

et tu vérifie que le gnat que tu veux est bien sélectionné sinon tu le selectionnes avec

```
# eselect gnat set [numéro du compilateur]
```

Chez moi la commande gnatmake est accessible sans problème.

 *chipsterjulien wrote:*   

> J'ai installer gnat-gcc en version 4.1.1 pour correspondre à la version actuelle de gcc que je possédais

 

En fait, tu as le choix entre gnat-gpl, qui est la version officielle de adacore en pure GPL, et la version de GNU intégré dans gcc, qui est en GPL-modifié et pas aussi au point que celle d'adacore (sur des broutilles de Ada 2005 mais quand même).

----------

## chipsterjulien

 *_Seth_ wrote:*   

> Salut !  
> 
> une fois que tu as installé gnat-gcc (ou gnat-gpl), tu lances eselect (avec bash-completion c'est vraiment pratique)
> 
> ```
> ...

 

En fait, tu as le choix entre gnat-gpl, qui est la version officielle de adacore en pure GPL, et la version de GNU intégré dans gcc, qui est en GPL-modifié et pas aussi au point que celle d'adacore (sur des broutilles de Ada 2005 mais quand même).[/quote]

Ok, tu me conseilles ada-gpl c'est ca ? car autant prendre ce qui se fait de mieux

Au passage tu me conseillerais lequelle ?

```
- dev-lang/gnat-gpl-3.4.6.1 (masked by: ~x86 keyword)

- dev-lang/gnat-gpl-3.4.5.1-r1 (masked by: ~x86 keyword)

- dev-lang/gnat-gpl-3.4.5.2005 (masked by: ~x86 keyword)

- dev-lang/gnat-gpl-3.4.6.2006 (masked by: ~x86 keyword)
```

----------

## chipsterjulien

J'ai un petit soucis avec ceci :

```
eselect gnat list

/usr/share/eselect//modules/gnat.eselect: line 42: [: too many arguments

!!! Error: /etc/env.d contains multiple gnat profiles, please cleanup!

Available gnat compilers:

  [1]   i686-pc-linux-gnu-gnat-gpl-3.4

Installed libs:

exiting.
```

Comment faire pour résoudre le soucis ?

[edit] Bon j'ai résolu ce problème car j'avais 2 fichier quasi identique dans mon /etc/env.d/

J'ai mis gnat-gpl à la place de gnat-gcc mais je n'arrive toujours pas à faire fonctionner le compilateur. En gros gnatmake est introuvable

----------

## chipsterjulien

Un petit redémarrage était nécessaire   :Confused: 

----------

## kopp

Windows attitude !

----------

## _Seth_

 *chipsterjulien wrote:*   

> Un petit redémarrage était nécessaire 

 

Euh ! Est ce que tu avais tenté le :

```
env-update && source /etc/profile
```

Car je ne vois aucune raison de redémarrer une linux-box pour si peu !

Enfin, pour répondre à ta question sur la version de gnat-gpl tu peux essayer la gnat-gpl-3.4.6.2006. Je te conseille plutôt cette version (la gnat-gpl) si tu veux programmer en utilisant toutes les subtilités d'Ada'05 (multi-tasking, temps réel, dépendances circulaires, etc) ou si tu fais de l'Ada dans le cadre d'un cours. Sinon, la version gnu (gnat-gcc) est très bien et permet de bénéficier de toutes les optimizations de gcc-4.1 (gnat-gpl utilise gcc-3.4 en front-end). Pour info, gnat-gcc est le seul "choix" proposé chez Debian & Cie. 

[OFF]C'est à ces petites choses que la volonté de laisser le choix à l'utilisateur de notre Gentoo est vraiment appréciable   :Twisted Evil:   [/OFF]

----------

## Kangourou

Hello, je remonte ce topic parce que chez moi, rien à faire je n'arrive pas a utiliser gnat.

En fait j'ai installer gnat-gpl et gnat-gcc, et en root j'ai pas de problème, je peux choisir celui que je veux avec eselect, je compile sans problème avec gnatmake.

Par contre en user normal, rien ne va. 

eselect gnat list marche bien, mais le set non :

```
% eselect gnat set i686-pc-linux-gnu-gnat-gpl-4.1

/usr/share/eselect//modules/gnat.eselect: line 166: /etc/env.d/55gnat-i686-pc-linux-gnu-gnat-gpl-4.1: Permission non accordée

/usr/share/eselect//modules/gnat.eselect: line 167: /etc/env.d/55gnat-i686-pc-linux-gnu-gnat-gpl-4.1: Permission non accordée

/usr/share/eselect//modules/gnat.eselect: line 168: /etc/env.d/55gnat-i686-pc-linux-gnu-gnat-gpl-4.1: Permission non accordée

/usr/share/eselect//modules/gnat.eselect: line 169: /etc/env.d/55gnat-i686-pc-linux-gnu-gnat-gpl-4.1: Permission non accordée

/usr/share/eselect//modules/gnat.eselect: line 172: /etc/env.d/55gnat-i686-pc-linux-gnu-gnat-gpl-4.1: Permission non accordée

/usr/share/eselect//modules/gnat.eselect: line 173: /etc/env.d/55gnat-i686-pc-linux-gnu-gnat-gpl-4.1: Permission non accordée

/usr/share/eselect//modules/gnat.eselect: line 174: /etc/env.d/55gnat-i686-pc-linux-gnu-gnat-gpl-4.1: Permission non accordée

zsh: exit 1     eselect gnat set i686-pc-linux-gnu-gnat-gpl-4.1

```

Mais comme y'en a déjà un selectionné dans le list, c'est peut être pas très grave.

Par contre gnatmake n'est pas trouvé, et quand je lui donne le chemin :

```

% /usr/i686-pc-linux-gnu/gnat-gcc-bin/4.2/gnatmake hello.adb

gnatgcc -c hello.adb

gnatgcc: error trying to exec 'gnat1': execvp: Aucun fichier ou répertoire de ce type

gnatmake: "hello.adb" compilation error

zsh: exit 4     /usr/i686-pc-linux-gnu/gnat-gcc-bin/4.2/gnatmake hello.adb

```

Je ne comprend pas pour ça marche sans problème en root et pas en user   :Crying or Very sad: 

J'ai aussi un problème avec vim quand j'ouvre un .adb :

```
igne  111 :

E121: Variable non définie : g:ada_default_compiler

E15: Expression invalide : "compiler " . g:ada_default_compiler

Erreur détectée en traitant function ada#Map_Popup :

ligne    1 :

E121: Variable non définie : g:mapleader

E116: Invalid arguments for function escape(g:mapleader . "a" . a:Keys , '\') . " :"^I  . a:Command . "<CR>"

E15: Expression invalide : "50amenu " . "PopUp."   . escape(a:Text, ' ') . "<Tab>"^I  . escape(g:mapleader . "a" . a:Keys , '\') . " :"^I  . a:Command . "<C

R>"

Erreur détectée en traitant function ada#Map_Popup..ada#Map_Menu :

ligne   26 :

E121: Variable non définie : g:mapleader

E116: Invalid arguments for function escape(g:mapleader . "a" . a:Keys , '\') . " :"^I  . a:Command . "<CR>"

E15: Expression invalide : "50amenu " . "Ada."  . escape(a:Text, ' ') . "<Tab>" . escape(g:mapleader . "a" . a:Keys , '\') . " :"^I  . a:Command . "<CR>"

ligne   31 :

E121: Variable non définie : g:mapleader

E116: Invalid arguments for function escape(g:mapleader . "a" . a:Keys , '\') ." :" . a:Command

E15: Expression invalide : "nnoremap <buffer>" . escape(g:mapleader . "a" . a:Keys , '\') ." :" . a:Command

```

et ça continue encore. Mais ça c'est moins grave que le compilateur.

En tout cas j'ai rebooté, fait un source, rien à faire. Si quelqu'un a une idée, je prends  :Smile: 

Edit: /etc/env.d/55gnat-i686-pc-linux-gnu-gnat-gpl-4.1 contient :

```
PATH=/usr/i686-pc-linux-gnu/gnat-gpl-bin/4.1:/usr/libexec/gnat-gpl/i686-pc-linux-gnu/4.1

ROOTPATH=/usr/i686-pc-linux-gnu/gnat-gpl-bin/4.1:/usr/libexec/gnat-gpl/i686-pc-linux-gnu/4.1

MANPATH=/usr/share/gnat-gpl-data/i686-pc-linux-gnu/4.1/man

INFOPATH=/usr/share/gnat-gpl-data/i686-pc-linux-gnu/4.1/info

LDPATH=/usr/lib/gnat-gpl/i686-pc-linux-gnu/4.1:/usr/lib/gnat-gpl/i686-pc-linux-gnu/4.1/adalib

ADA_INCLUDE_PATH=/usr/lib/gnat-gpl/i686-pc-linux-gnu/4.1/adainclude

ADA_OBJECTS_PATH=/usr/lib/gnat-gpl/i686-pc-linux-gnu/4.1/adalib

```

Je pense que je peux inclure ça dans le .zshenv en changeant genre PATH=$PATH:blabla, mais c'est super sale... Je prefèrerai trouver l'origine du problème

----------

## _Seth_

 *Kangourou wrote:*   

> Hello, je remonte ce topic parce que chez moi, rien à faire je n'arrive pas a utiliser gnat.
> 
> En fait j'ai installer gnat-gpl et gnat-gcc, et en root j'ai pas de problème, je peux choisir celui que je veux avec eselect, je compile sans problème avec gnatmake.
> 
> Par contre en user normal, rien ne va. 
> ...

 

Effectivement, eselect est un outil d'administration utilisable par root mais pas par les users, il est normal que tu ne puisses changer de compilo avec un user  :Wink:  Comme tu l'as compris, tu choisis le gnat que tu veux avec eselect en root et c'est répercuté pour tous les utilisateurs.

 *Kangourou wrote:*   

> Par contre gnatmake n'est pas trouvé, et quand je lui donne le chemin :
> 
> ```
> 
> % /usr/i686-pc-linux-gnu/gnat-gcc-bin/4.2/gnatmake hello.adb
> ...

 

La encore c'est bien normal, car tu n'as pas répercuté les changements sur ton shell courant : 

```
$ source /etc/profile
```

et c'est réglé ! L'autre solution plus bourrine, consiste à ouvrir un nouveau shell, qui réalise automatiquement le source /etc/profile, pour lequel le path est bien configuré.

Il est normal que gnatmake ne fonctionne pas quand tu lui donne le chemin (/usr/i686-pc-linux-gnu/gnat-gcc-bin/4.2/gnatmake), car cet exécutable fait appel à d'autre exécutables, qui ne sont pas dans le path, et donc gnatmake échoue.

 *Kangourou wrote:*   

> J'ai aussi un problème avec vim quand j'ouvre un .adb 

 

Là, je ne peux rien faire sinon te conseiller la commande suivante   :Twisted Evil:   :

```
# emerge emacs
```

Ada est géré directement (Ada-mode). Sinon tu as GPS (Gnat Programming System), l'IDE Ada écrite en GTK-Ada, qui doit normalement fonctionner, je préfère mon éditeur favori mais elle est très bien  :Wink: 

----------

## Kangourou

J'avais bien sûr tenter le source /etc/profile, et ça ne change rien. J'ai même tenter de redemarrer !

Pour la petite histoire j'avais tenter le eselect en user, parce que pour la JVM ça marche   :Smile: 

Pour emacs, oui j'ai tenté aussi ^^ Mais j'ai un bug avec le Ada-mode, ça me desactive le shift+tab (completion du mot) et le ctrl+tab (changement de frame), donc c'est vite énervant, j'ai mes habitudes moi   :Sad:  Je m'attendais à ce qu'il remplisse aussi tout seul les entêtes qu'il me met automatiquement (Last modified on, Update count), mais non. Mais ça c'est pas grave. 

Pour gps oui c'est sympa mais je suis pas trop fan des ide, je prefère vim ou emacs  :Smile: 

----------

## _Seth_

Whaou ! Je ne comprends plus rien...

 *Kangourou wrote:*   

> J'avais bien sûr tenter le source /etc/profile, et ça ne change rien. J'ai même tenter de redemarrer !
> 
> Pour la petite histoire j'avais tenter le eselect en user, parce que pour la JVM ça marche  

 

Effectivement, mais j'imagine qu'il doit y avoir une différence au niveau sécurité entre laisser le droit à un utilisateur changer de JVM et changer de compilo (même ada).

Je ne comprends pas pourquoi après un source /etc/profile rien ne marche...

Est ce que tu peux faire la séquence de commande suivante :

```
% bash

$ su -

# eselect gnat unset i686-pc-linux-gnu-gnat-gpl-4.1

# eselect gnat unset i686-pc-linux-gnu-gnat-gcc-4.2

# eselect gnat set i686-pc-linux-gnu-gnat-gpl-4.1

# env-update

# exit

$ source /etc/profile

$ gnatmake --version

```

Si ça fonctionne, essaye de passer en zsh... Mais il y a bien un problème quelque part car tu ne devrais pas avoir ce genre de problème.

 *Kangourou wrote:*   

> Pour emacs, oui j'ai tenté aussi ^^ Mais j'ai un bug avec le Ada-mode, ça me desactive le shift+tab (completion du mot) et le ctrl+tab (changement de frame), donc c'est vite énervant, j'ai mes habitudes moi   Je m'attendais à ce qu'il remplisse aussi tout seul les entêtes qu'il me met automatiquement (Last modified on, Update count), mais non. Mais ça c'est pas grave.

 

Le passage en ada mode ne désactive rien chez moi (j'ai bindé Shift-tab) et C-Tab propose normalement une meilleure complétion. Pour les entêtes automatiques, c'est modifiable : un petit coup d'oeil ici devait t'aider.

Tiens moi au courant.

----------

## Kangourou

Oui en faisant ça, ça marche   :Smile: 

Mais ce que je ne comprend pas, c'est que je suis systématiquement obligé de faire un source /etc/profile pour avoir accès aux commandes, même après reboot :

```
kangourou@kangouport ~ % gnatmake

zsh: command not found: gnatmake

zsh: exit 127   gnatmake

kangourou@kangouport ~ % source /etc/profile

kangourou@kangouport $ gnatmake

GNATMAKE GPL 2007 (20070402-41)

Copyright 1995-2007, Free Software Foundation, Inc.

blabla
```

Que j'ai besoin de le faire une fois après l'installation ok, mais là c'est systématique, que ça soit avec bash ou zsh   :Confused: 

----------

## _Seth_

Pour ce qui est de bash, tu n'as pas besoin de faire un source /etc/profile, c'est appelé automatiquement à la création d'un shell. C'est intéressant seulement si tu as changé des variables d'environnement et que tu souhaites répercuter les changements sur les shells déjà ouverts.

Normalement, tu as du faire un env-update (en root) ce qui régénère un fichier /etc/rpofile.env à partir des fichiers qu'il trouve dans /etc/env.d/. Ce profile.env est appelé dans /etc/profile, qui est lui-même lu au démarrage de ton shell bash.

Pour zsh, il faudrait demander aux habitués du coin  :Smile:  Pour bash en tout cas, c'est fait de la façon suivante : bash en démarrant lit /etc/profile et celui-ci contient

```
# Load environment settings from profile.env, which is created by

# env-update from the files in /etc/env.d

if [ -e /etc/profile.env ] ; then

        . /etc/profile.env

fi
```

----------

## Kangourou

 *_Seth_ wrote:*   

> Pour ce qui est de bash, tu n'as pas besoin de faire un source /etc/profile, c'est appelé automatiquement à la création d'un shell

 

Ben justement si, c'est ça mon problème. Si je veux avoir gnatmake et ses amis dans le PATH, je suis obligé de faire un source /etc/profile a la main, même si il a du être fait automatiquement avant pendant l'ouverture du shell. C'est ça que je ne comprend pas.

----------

## _Seth_

ouaip, comment est ce que tu démarres bash ? tu passes par une icone sur ton desktop ? par une commande ?

Essaye de lancer un shell bash avec l'option '--login'.

----------

## Kangourou

Ben à la base j'ai zsh comme shell par defaut, donc il se lance en même temps qu'une console... Et je lance ensuite bash.

Et effectivement en lui passant --login, j'ai enfin accès à gnatmake. D'ailleurs en lançant zsh --login aussi !

Je ne comprends pas pourquoi ça ne marche pas automatiquement ?!

----------

## _Seth_

Est ce que tu ne peux pas tout simplement ajouter dans l'équivalent zsh du ~/.bashrc (.zshrc ?) ceci : 

```
if [ -e /etc/profile ] ; then

        . /etc/profile

fi
```

----------

## Kangourou

Ça marche mais ça me fait sauter la variable $PS1 (et d'autre j'imagine) donc c'est pas top (ni propre) (ça me fait pareil quand je fais le source à la main)

Ya un truc qui m'échappe là   :Confused: 

----------

## _Seth_

D'après geekounet :

 *geekounet wrote:*   

> T'as un /etc/zsh/zprofile qui fait pareil et qui est executé à chaque démarrage de zsh 

 

donc peut être qu'il faut chercher là dedans...

et essayer plutôt un :

```

if  [ -e /etc/profile.env ] ; then

      . /etc/profile.env

fi
```

PS : je ne peux pas trop t'aider, je n'ai pas installé zsh   :Confused: 

----------

## Kangourou

Si je fais ça au lieu de me rajouter les variables de profile.env à mes variables, ça me les remplace carrément. Ça veut dire que j'ai bien gnat de dispo, mais je n'ai plus que gnat, plus aucun autre binaire. Plutôt ennuyeux   :Confused: 

Je nepense pas que ça vienne du zprofile, vu que j'ai le même problème avec bash   :Confused: 

----------

