From 886e924bfe4a2e9ede76a8a8e63d28562bb6e3db Mon Sep 17 00:00:00 2001 From: Russ Allbery Date: Wed, 30 Jun 2010 11:02:54 -0700 Subject: [PATCH] Rewrite requirements around libtool .la file handling State that .la files should normally not be included in Debian packages, with special exceptions for libraries loaded by libltdl and for .la files on which other .la files may depend. State that dependency_libs should be emptied if the .la files have to be retained. Exclude non-public libraries and loadable modules from these requirements. --- policy.sgml | 78 ++++++++++++++++++++++++++++++++--------------------- 1 file changed, 48 insertions(+), 30 deletions(-) diff --git a/policy.sgml b/policy.sgml index 9fe7158..2635fa8 100644 --- a/policy.sgml +++ b/policy.sgml @@ -7361,40 +7361,58 @@ strip --strip-unneeded your-lib

- An ever increasing number of packages are using - libtool to do their linking. The latest GNU - libtools (>= 1.3a) can take advantage of the metadata in the - installed libtool archive files (*.la - files). The main advantage of libtool's - .la files is that it allows libtool to - store and subsequently access metadata with respect to the - libraries it builds. libtool will search for - those files, which contain a lot of useful information about - a library (such as library dependency information for static - linking). Also, they're essential for programs - using libltdl. - Although libtool is fully capable of - linking against shared libraries which don't have - .la files, as it is a mere shell script it can - add considerably to the build time of a - libtool-using package if that shell script - has to derive all this information from first principles - for each library every time it is linked. With the - advent of libtool version 1.4 (and to a - lesser extent libtool version 1.3), the - .la files also store information about - inter-library dependencies which cannot necessarily be - derived after the .la file is deleted. + Packages that use libtool to create and install + their shared libraries install a file containing additional + metadata (ending in .la) alongside the library. + For public libraries intended for use by other packages, these + files normally should not be included in the Debian package, + since the information they include is not necessary to link with + the shared library on Debian and can add unnecessary additional + dependencies to other programs or libraries. + These files store, among other things, all libraries on which + that shared library depends. Unfortunately, if + the .la file is present and contains that + dependency information, using libtool when + linking against that library will cause the resulting program + or library to be linked against those dependencies as well, + even if this is unnecessary. This can create unneeded + dependencies on shared library packages that would otherwise + be hidden behind the library ABI, and can make library + transitions to new SONAMEs unnecessarily complicated and + difficult to manage. + If the .la file is required for that library (if, + for instance, it's loaded via libltdl in a way that + requires that meta-information), the dependency_libs + setting in the .la file should normally be set to + the empty string. If the shared library development package has + historically included the .la, it must be retained + in the development package (with dependency_libs + emptied) until all libraries that depend on it have removed or + emptied dependency_libs in their .la + files to prevent linking with those other libraries + using libtool from failing. +

+ +

+ If the .la must be included, it should be included + in the development (-dev) package, unless the library + will be loaded by libtool's libltdl + library. If it is intended for use with libltdl, + the .la files must go in the run-time library + package.

- Packages that use libtool to create shared - libraries should include the .la files in the - -dev package, unless the package relies on - libtool's libltdl library, in which case - the .la files must go in the run-time library - package. + These requirements for handling of .la files do not + apply to loadable modules or libraries not installed in + directories searched by default by the dynamic linker. Packages + installing loadable modules will frequently need to install + the .la files alongside the modules so that they + can be loaded by libltdl. dependency_libs + does not need to be modified for libraries or modules that are + not installed in directories searched by the dynamic linker by + default and not intended for use by other packages.

-- 2.39.5