A$_{da}$ fond la caisse
En mai 2022, AdaCore a annoncé la fin de la version GNATCommunity Edition (Windows/Linux/ macOS).
GNATCommunity intégrait entre autres :
- Le compilateur gcc/GNAT et son débogueur GDB,
- L’IDE : GNAT Studio,
- Les bibliothèques Gnatcoll, XMLada, Libadalang, etc.
Tout comme la communauté Rust au travers de Cargo, Ada met maintenant à disposition le gestionnaire de paquets ALIRE (Ada LIbrary REpository) permettant d’intégrer à vos projets des bibliothèques Ada/SPARK et de verser aussi vos propres projets à la communauté.
Dans la suite de l’article, nous présenterons uniquement un exemple sous Linux même si l’outil est aussi disponible sous les plateformes macOS et Windows.
Exemple de mise en caisse¶
Dans le cadre de cet exemple, nous allons générer l’application Ada « Terminal » dont le code est disponible ici. Cette application intègre du code Ada et C et s’appuie sur la librairie GNATColl : https://github.com/AdaCore/gnatcoll-core.
Les étapes à suivre sont :
-
Récupérer : https://github.com/alire-project/alire/releases/download/v1.2.2/alr-1.2.2-bin-x86_64-linux.zip
-
Modifier votre PATH pour pouvoir exécuter la commande
alr
. -
Vérifier le bon fonctionnement de la commande
alr
: -
Identifier les chaînes de compilations Ada natives ou croisées disponibles sur votre machine :
Ici, nous utiliserons la version native du GNAT 13.2.1 et l’outil gprbuild dans sa version 22.0.1.
Si vous ne disposez pas du compilateur Ada souhaité, vous pouvez l’obtenir ainsi :
Modifier votre PATH en conséquence et vérifier ainsi les versions utilisées :
-
Créer votre « caisse » pour le projet « Terminal » :
-
Aller dans votre « caisse » et afficher son contenu :
Le projet « Terminal » utilise la « caisse » GNATColl, il faut donc agréger son crate correspondant :
Les crates disponibles peuvent être listés au travers de la commande " alr search —crates ".
Il y a actuellement plus de 440 crates disponibles.
On retrouve par exemple :
asis | Ada Semantic Interface Specification or ASIS (library part) |
---|---|
aunit | Ada unit test framework |
aws | Ada Web Server |
gnatcoll | GNAT Components Collection - Core packages |
gnatcov | Coverage Analysis Tool |
gnatdoc | GNAT Documentation Generation Tool (as `gnatdoc4` binary) |
gnatprove | Automatic formal verification of SPARK code |
gprbuild | The GPRBuild Ada/multilanguage build tool |
gtkada | An Ada graphical toolkit based on Gtk+ |
hac | HAC Ada Compiler: a small, quick Ada compiler covering a subset of Ada |
libadalang | Ada semantic analysis library |
-
Copier les sources de « Terminal » sous
src
en écrasant le fichierterminal.adb
. -
Builder l’application :
Vous devriez avoir l’erreur suivante :
En effet, dans le fichier terminal.gpr généré :
-
On ne fait pas référence à la librairie GNATColl,
-
On n’indique pas que l’application embarque du code C,
-
Le programme principal n’est pas l’unité
terminal
.
-
-
En conséquence, modifier le fichier
terminal.gpr
de la façon suivante : -
Relancer le processus de build, et exécuter l’application ainsi générée :
Premières impressions¶
Le gestionnaire de paquets ALIRE est plutôt bien documenté et s’insère bien dans une architecture GPR.
Cela étant, dans le cadre d’un projet Ada, hormis les questions de support et de validation et si cela ne vous est pas imposé, je recommande très vivement d’utiliser l’écosystème GNATPro car il est de fait beaucoup plus simple à mettre en œuvre : il n’y a rien à faire !
ALIRE est donc le « remplaçant » de GNATCommunity Edition (Windows/Linux/ macOS). En conséquence, seule la version FSF (Free Software Foundation) est maintenant disponible au travers du gestionnaire de paquets ALIRE.
Concernant l’IDE GNATStudio, cette dernière ne fait pas partie d’ALIRE et doit être reconstruite et installée à partir de https://github.com/AdaCore/gnatstudio/.
Attention
Les premiers tests sous Windows se sont avérés infructueux… Cela pose une question pour les formations Ada car quid du compilateur qui sera mis à disposition des stagiaires qui travaillent généralement sous Windows et dont les machines n’ont pas obligatoirement un accès à internet ?
Références¶
[1] : https://alire.ada.dev/
[2] : https://github.com/alire-project/GNAT-FSF-builds/
Comments