DH_ADA_LIBRARY(1) | General Commands Manual | DH_ADA_LIBRARY(1) |
dh_ada_library - help packaging Ada libraries for Debian
dh_ada_library [debhelper options]
dh_ada_library is a debhelper program that handles some common tasks in packaging libraries written in the Ada programming language.
The difficult work is to convince the upstream build system to produce both a static and a relocatable library in a row (during the dh_auto_configure and dh_auto_build steps), then to install these under debian/tmp with the directory structure described by the Debian Policy for Ada (dh_auto_install). The /usr/share/ada/packaging.mk Makefile snippet, part of the same dh-ada-library package, may help for that.
Once the files are installed, dh_ada_library is in charge of dispatching them to the specific package temporary directories. It is enabled by the presence of the dh-sequence-ada-library virtual package in the Build-Depends-Arch field of the debian/control file. For a while, you should in addition depend on the explicit dh-ada-library (>= 8.1), because this version introduces incompatible changes, and virtual packages cannot receive version restrictions.
At start, it parses debian/control to check that package names exist conforming to the Coexistence Not Allowed naming scheme described in the Debian Policy for Ada and extracts the ALI files version (aliversion)) and the shared library version (soversion). More accurately, each library needs two packages, ibname-ALIversion-dev/ and ibname-SOversionR. The dash is required when name ends with a digit, used here for readability, but rare in practice.
The following files are copied from debian/tmp to debian/libname-SOversion.
Versions before 8.1 were ignoring the SOname/Library_Version, and guessing it from the SOversion in the Debian package name. Patches caused by this unfortunate decision can now be unapplied.
The following files are copied from debian/tmp to debian/libname-LIversion.
The following files, if they exist, are ignored but marked as installed by dh_ada_library in order to prevent a false alert by dh_missing later, as if the files were listed in debian/not-installed.
It would be easy to fix the directory structure, and versions before 8.1 were doing exactly this, at the cost of generating a project with different paths. Now that gprinstall is almost capable of dealing with stagged installs, duplicating its job seems a waste of energy.
Both libraries and ALI files are installed into /usr/lib/DEB_HOST_MULTIARCH, the project and sources into /usr/share/ada/adainclude. This implies that the -dev package cannot be declared Multi-Arch: same as the content of the project (and maybe of generated sources) will vary across architectures.
The Linker'Linker_Options attribute should rarely be needed. A dependency written in Ada should be described by an imported project, also handling .ali files. A dependency written in C should be listed in Library_Options when building a shared library, and in Linker'Linker_Options when using a static archive, but is not always required in Linker'Linker_Options for shared libraries. Until now, such options have only proved useful to light bindings importing C symbols from a specification or an inlined procedure. In a foo.pc file as read by pkg-config, they are named Libs, excluding -lfoo and Libs.private.
Common debhelper command line options and environment variables are recognized.
This stanza in debian/rules may help debugging.
override_dh_ada_library: dh_ada_library -v
The version is composed of two numbers separated by a dot. The second one increases during a normal update, which supposedly fixes bugs, introduces compatible evolutions, or remove stuff unused since oldoldstable. A change in the first one announces an incompatibility requiring some users to modify their source package.
debhelper(7), deb-substvars(5), the Debian Policy at https://www.debian.org/doc/debian-policy/ch-sharedlibs.html#run-time-shared-libraries, the Debian Policy for Ada at http://people.debian.org/~lbrenta/debian-ada-policy.html, and the documentation of GNAT project tools installed into /usr/share/doc/gprbuild by the gprbuild-doc package.
dh_ada_library and this manpage were written by Nicolas Boulenguez <nicolas@debian.org> for the Debian project (and may be used by others).
2022-08-16 |