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 :

  1. Récupérer : https://github.com/alire-project/alire/releases/download/v1.2.2/alr-1.2.2-bin-x86_64-linux.zip

  2. Modifier votre PATH pour pouvoir exécuter la commande alr.

  3. Vérifier le bon fonctionnement de la commande alr :

  4. 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 :

  5. Créer votre « caisse » pour le projet « Terminal » :

  6. 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
  1. Copier les sources de « Terminal » sous src en écrasant le fichier terminal.adb.

  2. 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.

  3. En conséquence, modifier le fichier terminal.gpr de la façon suivante :

  4. 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/

Commentaires