Provided by: dh-ada-library_7.8_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).  Afin  d’améliorer  la
       reproductibilité des paquets construits, les options de compilation -f*-prefix-map en sont
       retirées.

       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
       du paquet de bibliothèque et de gnat (>= X), gnat (<< X+1), en notant X la version majeure
       de GNAT présente pendant la construction. 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)