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)