[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#561413: Policy possibly should not recommend *.la files



On Wed, Jun 30, 2010 at 11:06:04 -0700, Russ Allbery wrote:

> 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 <var>your-lib</var>
>  	</p>
>  
>  	<p>
> -	  An ever increasing number of packages are using
> -	  <prgn>libtool</prgn> to do their linking.  The latest GNU
> -	  libtools (>= 1.3a) can take advantage of the metadata in the
> -	  installed <prgn>libtool</prgn> archive files (<file>*.la</file>
> -	  files).  The main advantage of <prgn>libtool</prgn>'s
> -	  <file>.la</file> files is that it allows <prgn>libtool</prgn> to
> -	  store and subsequently access metadata with respect to the
> -	  libraries it builds.  <prgn>libtool</prgn> 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 <em>essential</em> for programs
> -	  using <tt>libltdl</tt>.<footnote>
> -	      Although <prgn>libtool</prgn> is fully capable of
> -	      linking against shared libraries which don't have
> -	      <tt>.la</tt> files, as it is a mere shell script it can
> -	      add considerably to the build time of a
> -	      <prgn>libtool</prgn>-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 <prgn>libtool</prgn> version 1.4 (and to a
> -	      lesser extent <prgn>libtool</prgn> version 1.3), the
> -	      <file>.la</file> files also store information about
> -	      inter-library dependencies which cannot necessarily be
> -	      derived after the <file>.la</file> file is deleted.
> +	  Packages that use <prgn>libtool</prgn> to create and install
> +	  their shared libraries install a file containing additional
> +	  metadata (ending in <file>.la</file>) 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.<footnote>
> +	    These files store, among other things, all libraries on which
> +	    that shared library depends.  Unfortunately, if
> +	    the <file>.la</file> file is present and contains that
> +	    dependency information, using <prgn>libtool</prgn> 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.
>  	  </footnote>
> +	  If the <file>.la</file> file is required for that library (if,
> +	  for instance, it's loaded via <tt>libltdl</tt> in a way that
> +	  requires that meta-information), the <tt>dependency_libs</tt>
> +	  setting in the <file>.la</file> file should normally be set to
> +	  the empty string.  If the shared library development package has
> +	  historically included the <file>.la</file>, it must be retained
> +	  in the development package (with <tt>dependency_libs</tt>
> +	  emptied) until all libraries that depend on it have removed or
> +	  emptied <tt>dependency_libs</tt> in their <file>.la</file>
> +	  files to prevent linking with those other libraries
> +	  using <prgn>libtool</prgn> from failing.
> +	</p>
> +
> +	<p>
> +	  If the <file>.la</file> must be included, it should be included
> +	  in the development (<tt>-dev</tt>) package, unless the library
> +	  will be loaded by <prgn>libtool</prgn>'s <tt>libltdl</tt>
> +	  library.  If it is intended for use with <tt>libltdl</tt>,
> +	  the <file>.la</file> files must go in the run-time library
> +	  package.
>  	</p>
>  
>  	<p>
> -	  Packages that use <prgn>libtool</prgn> to create shared
> -	  libraries should include the <file>.la</file> files in the
> -	  <tt>-dev</tt> package, unless the package relies on
> -	  <tt>libtool</tt>'s <tt>libltdl</tt> library, in which case
> -	  the <tt>.la</tt> files must go in the run-time library
> -	  package.
> +	  These requirements for handling of <file>.la</file> 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 <file>.la</file> files alongside the modules so that they
> +	  can be loaded by <tt>libltdl</tt>.  <tt>dependency_libs</tt>
> +	  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.
>  	</p>
>  
>  	<p>
> 
Looks good to me, seconded.

Cheers,
Julien

Attachment: signature.asc
Description: Digital signature


Reply to: