Provided by: dh-ada-library_7.3_amd64 bug

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 (Linker'Linker_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).

   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. Il
       copie également les options Linker'Linker_Switches de l’éditeur de lien (voir plus loin).

       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. Lorsqu’une option
       dans  la  liste Linker'Linker_Options du projet de construction, est de la forme -lFOO, le lien libFOO.so
       est recherché dans le répertoire contenant les bibliothèques de ce système, et le paquet  responsable  de
       son installation est ajouté à la variable de substitution ada:Depends.

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.

       L’attribut Linker'Linker_Options devrait rarement être utile. Une dépendance écrite en Ada gagne  à  être
       décrite  dans un projet importé, qui tiendra également compte des fichiers .ali. UNe dépendance écrite en
       C doit figurer dans Library_Options  lors  de  la  construction  d’une  bibliothèque  partagée,  et  dans
       Linker'Linker_Options  lors  de  l’utilisation d’une bibliothèque statique, mais n’est pas toujours utile
       dans Linker'Linker_Options pour une bibliothèque partagée.  Jusqu’à  présent,  ces  options  ne  se  sont
       avérées utiles que lorsqu’un binding léger importe des symbolse C dans une spécification ou une procédure
       inlinées. Dans un fichier foo.pc utilisé par pkg-config, il s’agirait des Libs, à l’exclusion de -lfoo et
       des Libs.private. Les versions antérieures à 7.0 trouvaient ces informations dans Leading_Library_Options
       ou  Library_Options,  au  lieu  de Linker'Linker_Options. Malheureusement, les tests d’intégration (comme
       autopkgtests) semblent le seul moyen de détecter les paquets nécessitant encore ce comportement.

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

VERSIONS

       La version comporte deux nombres séparés par un point. Le second varie lors d’une mise  à  jour  normale,
       qui  est  censée  corriger  des  bugs,  introduire  des  évolutions compatibles ou supprimer des services
       antérieurs à oldoldstable. Une variation  du  premier  annonce  une  incompatibilité  obligeant  certains
       utilisateurs à modifier leur paquet source.

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.

                                                   2020-04-21                                  DH_ADA_LIBRARY(1)