DH_ADA_LIBRARY(1)

NAME
dh_ada_library - aide à empaqueter des bibliothèques Ada pour Debian

SYNOPSIS
dh_ada_library [options debhelper] [[variable=valeur ...] projet.gpr] ...

DESCRIPTION
dh_ada_library est un programme de la suite debhelper prenant en charge quelques tâches courantes dans l’empaquetage de bibliothèques écrites dans le langage Ada.

Chaque argument projet.gpr indique un fichier de projet GNAT servant à compiler une des bibliothèques partagées fournies par le paquet source. L’usage de variables d’environnement dans de tels projets étant monnaie courante, il est possible de fournir une liste d’affectations avant chaque projet.

dh_ada_library lit chaque fichier de projet et en extrait les informations suivantes : le nom de la bibliothèque, les projets importés, les répertoires contenant les sources, le répertoire contenant la bibliothèque partagée (Library_Dir), celui contenant les fichiers ALI (Object_Dir), et les options de l’éditeur de liens (Leading_Library_Options et Library_Options). Ensuite, il parcourt debian/control afin de vérifier que des paquets existent, nommés conformément à la Charte Debian pour Ada sous l’intitulé Coexistence Not Allowed et il en déduit le numéro de version des fichiers ALI (aliversion) et de la bibliothèque partagée (soversion).

  Changement important avec la version 7
Les versions précédentes déduisaient les options de l’éditeur de liens dans le projet installé des attributs Leading_Library_Options et Library_Options du projet de construction. Les version suivantes, d’une manière plus cohérente avec les autres outils GNAT, liront plutôt Linker'Linker_Options. Malheureusement, les tests d’intégration (comme autopkgtests) semblent le seul moyen fiable de détecter les problèmes dus à ce changement.

  Paquet fournissant la bibliothèque dynamique
dh-ada-library installe la bibliothèque partagée dans ce paquet.

Ceci devrait être inutile depuis gnat-7, mais si la bibliothèque partagée déclare sa pile exécutable, dh_ada_library génère un « override » lintian expliquant que GNAT utilise des trampolines pour traiter les exceptions. Si dh-ada-library est appelé directement sans passer par le séquenceur dh ni la cible override_dh_ada_library, il faut s’assurer que dh_lintian est exécuté, car s’il l’était plus tard il risquerait de recouvrir le fichier « override ».

  Paquet de développement (-dev)
Pour commencer, dh_ada_library installe le lien symbolique de développement libLIBRARY.so pointant vers libLIBRARY.so.soversion.

Les fichiers ALI y sont installés en lecture seule (mode 444), sans les lignes mentionant les options de construction -f*-prefix-map (améliorant la reproductibilité, en attendant que la solution correcte BUILD_PATH_PREFIX_MAP soit acceptée dans GCC).

Les sources sont également installées, pour tous les langages connus du projet de compilation.

dh-ada-library recherche un fichier nommé libLIBRARY_NAME.a (la bibliothèque statique) dans le répertoire courant ou un de ses sous-répertoires, et l’installe dans le paquet -dev.

Un second fichier de projet, conçu pour faciliter la compilation de programmes utilisant la bibliothèque, est généré et installé dans le paquet -dev, qui copie les exceptions de renommage du projet d’origine. Le paquet Linker du nouveau projet hérite des options destinées à l’éditeur de liens -l ou -L mentionnées dans les attributs Leading_Library_Options ou Library_Options du projet de compilation.

dh_ada_library exécute dh_strip avant d’installer la bibliothèque statique afin que celle-ci conserve ses informations de déboguage.

La variable de substitution ada:Depends reçoit une valeur indiquant que le paquet dépend de gnat, de gnat-X et du paquet de bibliothèque. Pour chaque projet de bibliothèque importé et reconnu, soit comme déjà parcouru, soit comme installé par les Build-Depends-Arch, une dépendance est ajoutée dans ada:Depends et le projet généré se voit ajouter une ligne with. Dans le cas d’un projet déjà parcouru dans le cadre du même paquet source, la dépendance exige exactement la même binary:Version, afin de garantir que toutes les archives statiques sont compilées avec des options compatibles.

INTÉGRATION DANS DEBHELPER
La plupart des paquets n’ont besoin que d’ajouter dh-sequence-ada-library à Build-Depends-Arch dans debian/control. Debhelper (>= 12) détectera la dépendance et exécutera dh_ada_library après dh_lintian lors des séquences binary-arch et binary.

Certains paquets ne distinguent pas Build-Depends-Arch, par exemple parce qu’ils ne construisent que des paquets dépendant de l’architecture. En ce cas, il est pratique d’ajouter plutôt la dépendance à Build-Depends. La commande sera alors exécutée aussi pendant la séquence binary-indep, quoique probablement sans effet.

Les paquets compatibles avec debhelper (<< 12) doivent ajouter dh-ada-library à Build-Depends-Arch, ainsi qu’un paragraphe comme
override_dh_lintian-arch:
        dh_lintian -a
        dh_ada_library
dans debian/rules.

Les paquets compatibles avec debhelper (<< 12) mais ne distinguant pas Build-Depends-Arch peuvent simplement ajouter dh-ada-library à Build-Depends et passer l’option --with=ada-library au séquenceur dh dans debian/rules.

REMARQUES
L’attribut Library_Version du projet est délibérément ignoré, et le nom d’objet partagé (soname) est plutôt déduit à partir du nom du paquet de bibliothèque. Les projets réclamant une définition de variable externe pour définir cet attribut pourront recevoir une valeur arbitraire. Ceci permettra souvent au mainteneur l’usage d’un simple fichier debian/ada_libraries au lieu de surcharger une commande debhelper ou d’exporter une variable d’environnement.

Les deux bibliothèques et les fichiers ALI sont installés dans /usr/lib/DEB_HOST_MULTIARCH, le projet et les sources dans /usr/share/ada/adainclude. Ceci signifie que le paquet -dev ne peut pas être déclaré Multi-Arch: same puisque le contenu du projet (et le cas échéant de sources générées) sera différent selon l’architecture.

FICHIERS

debian/ada_libraries
    Projets et variables à traiter en plus de ceux mentionnés en ligne de commande en cas d’appel directement depuis debian/rules. Les fins de ligne sont considérés comme de simples espaces. Ceci peut être amené à changer, et il est vivement recommandé de mettre exactement une affectation ou un projet par ligne. Toute ligne débutant par un dièse est ignorée.

OPTIONS
Les options en ligne de commande et variables d’environnement communes aux outils debhelper sont reconnues.

EXEMPLES
dh_ada_library 'DIRS=src gen' SOVERSION=sans_effet toto.gpr --verbose --no-act

VOIR AUSSI
debhelper(7), dh_installdocs(1), dh_lintian(1), deb-substvars(5), la Charte Debian pour Ada disponible (en anglais) à l’adresse http://people.debian.org/~lbrenta/debian-ada-policy.html.

AUTEUR
Nicolas Boulenguez <nicolas@debian.org> a écrit dh_ada_library et sa page de manuel à destination du projet Debian et de quiconque les trouvera utiles.