Faire le Projet GL sur une machine personnelle : Différence entre versions

De Ensiwiki
Aller à : navigation, rechercher
(Clés SSH : Le « User glXX » ne sert en fait à rien)
(Clés SSH : précisions si on utilise plusieurs clés)
Ligne 47 : Ligne 47 :
 
  Host ensibm.imag.fr
 
  Host ensibm.imag.fr
 
  IdentityFile ~/.ssh/id_projet_gl
 
  IdentityFile ~/.ssh/id_projet_gl
 +
 +
Si vous utilisiez déjà une clé pour vous connecter à votre propre compte ensibm, vous pouvez au choix :
 +
* utiliser <code>ssh-agent</code> et <code>ssh-add</code> sur cette clé. SSH va essayer toutes les clés actives dans l'agent avant d'essayer id_projet_gl.
 +
* Ajouter plusieurs lignes <code>IdentityFile</code> derrière <code>Host ensibm.imag.fr</code>, ssh va les essayer en séquence. Par exemple, si votre clé habituelle est <code>id_rsa</code> :
 +
 +
Host ensibm.imag.fr
 +
IdentityFile ~/.ssh/id_projet_gl
 +
IdentityFile ~/.ssh/id_rsa
  
 
En dernier recours (en principe, ce n'est ''jamais'' nécessaire), transmettre la clé publique à Matthieu.Moy@imag.fr, avec un sujet de message explicite du genre « clé publique supplémentaire, équipe glxx ».
 
En dernier recours (en principe, ce n'est ''jamais'' nécessaire), transmettre la clé publique à Matthieu.Moy@imag.fr, avec un sujet de message explicite du genre « clé publique supplémentaire, équipe glxx ».

Version du 23 janvier 2012 à 14:06

Cette page a pour but de vous aider à installer un environnement de développement, sous Linux, pour le projet GL de l'Ensimag, 2ème année.

Pour les projets « Compilation Année Spéciale » et « Projet GL Apprentissage », les instructions s'appliquent en adaptant :

  • L'arborescence globale : /usr/local/PCas/Global
  • Le nom du responsable
  • Le nom de la machine : ensisun ou telesun à la place d'ensibm
  • Le nom du répertoire de travail : Cas au lieu de Projet_GL
  • Le nom de la variable d'environnement : $CAS_GLOBAL au lieu de $GL_GLOBAL

Installation des outils (Ada, Git, ...)

Nous allons tout d'abord installer les outils nécessaires au projet. Si ces outils sont déjà installés sur votre machine, vous n'avez rien à faire.

Outils pour développeurs Apple

Si vous travaillez sous Mac pensez à installer les outils pour développeur Apple, soit en les téléchargeant soit à partir du DVD d'installation de Mac OS X.

Installation de GNAT

Sous Linux : Ada sous Linux.

Sous Mac : Installer Ada sous Mac.

Sous Windows : l'environnement du projet n'a pas été conçu pour fonctionner sous Windows (utilisation de scripts shell, de Makefiles, ...), mais si on est courageux, on peut essayer Ada sous Windows.

Installation de Git

De la même manière que pour GNAT, votre distribution contient probablement Git, et il suffira probablement d'un aptitude install git-core gitk, yum install git, ...

Sous Mac téléchargez la dernière version de Git depuis http://code.google.com/p/git-osx-installer/ puis ouvrez git-*-intel-leopard.dmg et suivez les indications de l'utilitaire.

Il est fortement conseillé d'avoir une version récente (>= 1.6) : les vieilles versions sont beaucoup plus difficiles à prendre en main.

Installation de l'environnement du projet

Clés SSH

Il vous faut impérativement une clé SSH qui soit enregistrée comme autorisée sur votre compte glXX sur ensibm. Si vous avez suivi les instructions avant les vacances de Noël, c'est déjà le cas. Si vous n'avez pas une telle clé sur votre machine, vous pouvez récupérer celle qui se trouve sur ensibm, par exemple :

laptop> rsync monlogin@ensibm.imag.fr:.ssh/id_projet_gl ~/.ssh/id_projet_gl

(remplacez éventuellement id_projet_gl par le nom de la clé privée qui se trouve sur ensibm)

Il faut ensuite dire à SSH d'utiliser cette clé. Cela peut se faire en créant un fichier ~/.ssh/config sur la machine depuis laquelle vous vous connectez, avec le contenu suivant :

Host ensibm.imag.fr
IdentityFile ~/.ssh/id_projet_gl

Si vous utilisiez déjà une clé pour vous connecter à votre propre compte ensibm, vous pouvez au choix :

  • utiliser ssh-agent et ssh-add sur cette clé. SSH va essayer toutes les clés actives dans l'agent avant d'essayer id_projet_gl.
  • Ajouter plusieurs lignes IdentityFile derrière Host ensibm.imag.fr, ssh va les essayer en séquence. Par exemple, si votre clé habituelle est id_rsa :
Host ensibm.imag.fr
IdentityFile ~/.ssh/id_projet_gl
IdentityFile ~/.ssh/id_rsa

En dernier recours (en principe, ce n'est jamais nécessaire), transmettre la clé publique à Matthieu.Moy@imag.fr, avec un sujet de message explicite du genre « clé publique supplémentaire, équipe glxx ».

Pour plus d'information, lire l'article du wiki sur les Clés SSH.

Installation de l'arborescence globale du projet

Récupérez l'arborescence /usr/local/GL/Global/ sur ensibm. Dans l'exemple, on installe l'arborescence dans ~/ensimag, mais vous pouvez bien sûr adapter :

laptop:~$ mkdir ensimag; cd ensimag; mkdir GL; cd GL
laptop:~/ensimag/GL$ export GL_GLOBAL=$HOME/ensimag/GL/Global
laptop:~/ensimag/GL$ git clone login@ensibm.imag.fr:/usr/local/GL/Global/ Global/
laptop:~/ensimag/GL$ cd Global/Sources
laptop:~/ensimag/GL/Global/Sources$ make

La dernière commande devrait compiler aflex, ayacc, et ima sur votre machine.

Si des bugs sont trouvés et corrigés dans l'arborescence globale en cours de projet, il faudra simplement faire :

laptop:~$ cd ~/ensimag/GL/Global
laptop:~/ensimag/GL/Global$ git pull
laptop:~/ensimag/GL/Global$ cd Sources
laptop:~/ensimag/GL/Global/Sources$ make

pour récupérer ces corrections.

Configuration de votre compte

Dans le fichier d'initialisation de votre shell :

  • si vous ne savez pas comment il s'appelle ou ce qu'il est, il s'agit sans doute de ~/.bashrc
  • sous Mac il s'agit de ~/.bash_profile
  • Positionnez la variable GL_GLOBAL sur le répertoire ~/ensimag/GL/Global
 export GL_GLOBAL="$HOME/ensimag/GL/Global"
  • Modifier la variable PATH (à la FIN du fichier .bashrc) :
 export PATH="$GL_GLOBAL/Bin:$HOME/Projet_GL/Exec:$PATH"

Une fois ces opérations effectuées, il faut demander à votre shell de relire le fichier .bashrc (sinon, les modifications ne seront effectives qu'au prochain démarrage du shell) :

 $ . ~/.bashrc
  • Récupérer le ~/.gitconfig créé pendant la séance machine. Par exemple :
 rsync -v ensibm.imag.fr:.gitconfig ~/.gitconfig

Il est recommandé de refaire les vérifications indiquées dans $GL_GLOBAL/Doc/Seance_Machine.ps

Les résultats peuvent être légèrement différents : sur Debian (de même sous Cygwin), on obtient, par exemple :

 $ which make
 /usr/bin/make
 $ which adabody
 /home/moy/ensimag/GL/Global/Bin/adabody
 $ which gnatmake
 /usr/bin/gnatmake

Création du répertoire Projet_GL par rapatriement depuis l'archive

Il faut évidemment que la clé de connexion SSH soit admise sur le compte glxx de l'équipe (cf. section #clessh). On fait (comme dans Seance_Machine) :

 $ cd
 $ git clone ssh://glXX@ensibm.imag.fr/~/git/ Projet_GL

Spécificités Cygwin

Cette section n'a pas été mise à jour depuis longtemps, il est probable que les infos ne soient plus d'actualité.

Sous Cygwin : le make risque de vous montrer beaucoup de message de log pour les supprimer, il suffit de le lancer en mode -s

make -s

Par ailleurs, gcov (cf. Gcov.txt) n'a pas l'air de marcher avec GNAT sous Cygwin (erreur au link, probablement un bug de certaines versions de gnatlink quand on l'appelle avec des noms de fichiers longs).

Débugger de l'Ada

Les commandes pour débugger de l'ada sont disponible sur Debugger_un_programme_Ada_(gdb,_ddd,_Emacs). Cependant, il se peut que sous certaines machines cela ne marche pas. Si vous obtenez un message d'erreur de type "Unable to insert catchpoint. Try to start the program first." quand vous faites "catch exception", ce paragraphe vous concerne.

Le problème est dans le gcc des distributions récentes. Si vous savez pourquoi et ce qu'il faut faire pour le corriger, n'hésitez pas à éditer cette page. En attendant, un workaround est de réinstaller gcc. Pour cela, récupérez les sources de la dernière version sur http://gcc.gnu.org/ (pas besoin de tout gcc, seul gcc-core et gcc-ada suffisent), extrayez les dans le même dossier, puis faites :

 ./configure --prefix=/usr/local/bin --enable-languages=ada

si vous ne voulez que l'ada, une liste de langages parmi ada, c, c++, java, objc et fortran séparée par des virgules sinon. Ensuite, l'habituel make et make install en root. Prévoyez du temps (une bonne heure) et de la place (entre 1 et 2 gigas en fonction des langages que vous choisissez). Il suffit ensuite de recompiler le projet et le monde merveilleux des breakpoints s'ouvrira à vous.

Afficher les détails des exceptions sans recompiler gcc (si adadebug ne marche pas)

Réponse courte: Si adadebug ne marche pas, utiliser adastack qui fait la même chose.

Réponse longue: Certaines personnes peuvent trouver que recompiler gcc est un peu lourd. Si votre version de GCC ne marche pas avec gcov, il existe une autre solution qui exploite les fonctions du paquet Ada.Exceptions.

Le Makefile fourni compile avec les options -bargs -E, qui a pour effet d'afficher la pile d'exécution quand une exception non-rattrapée arrive. Pour les exceptions rattrapées, on peut toujours afficher la pile avec du code comme celui-ci :

with Ada.Text_IO, Ada.Exceptions; -- Ne pas oublier Ada.Exceptions
use Ada.Text_IO, Ada.Exceptions;

procedure LeverException is
  Mon_Exception : Exception;
begin
  raise Mon_Exception;
exception
  when E : others => 
    Put_Line ("Exception levee !");
    Put_Line (Exception_Information (E)); -- Tout se passe ici
end LeverException;

Ada ne va afficher qu'une suite d'adresses en hexadecimal, mais le script adastack fourni dans l'arborescence globale du projet traduit ceci en fichiers, en utilisant addr2line. Il suffit pour l'utiliser de préfixer la commande que vous lancez avec le nom du script. Exemple :

adastack mon_programme_ada fichier1

Le script va lancer le programme et appellera si besoin addr2line avec les bons paramètres pour afficher la pile d'appels.


Historique

Fichier initial écrit par Matthieu MOY en janvier 2001, puis amende par Xavier NICOLLIN, destiné à aider les étudiants à installer un environnement de développement chez eux sous Linux pour le projet GL.

Nous (les enseignants) ne pouvons pas tester toutes les distributions et configurations, mais les corrections pour votre distribution préférée sont les bienvenues !

Modification pour CygWin par Laurent Belcour (2008)

Modification pour Mac OS X par Amaury Balliet (2010)

La suite dans l'historique du Wiki...