]> git.donarmstrong.com Git - debian/debian-policy.git/blobdiff - policy.sgml
Merge branch 'master' into bug459868-rra
[debian/debian-policy.git] / policy.sgml
index c7f2a4e1f923c33624f48addefd562f21ebc6415..ca347f205748b81b0488173d42345716c920fbaa 100644 (file)
              <item>
                  must not require a package outside of <em>main</em>
                  for compilation or execution (thus, the package must
-                 not declare a <tt>Pre-Depends</tt>, <tt>Depends</tt>,
-                 <tt>Recommends</tt>, <tt>Build-Depends</tt>,
-                 or <tt>Build-Depends-Indep</tt> relationship on a
-                 non-<em>main</em> package unless a package
-                 in <em>main</em> is listed as an alternative),
+                 not declare a "Depends", "Recommends", or
+                 "Build-Depends" relationship on a non-<em>main</em>
+                 package),
              </item>
              <item>
                  must not be so buggy that we refuse to support them,
 
          <p>
            In general, Debian packages should use the same version
-           numbers as the upstream sources.
-         </p>
-
-         <p>
-           However, in some cases where the upstream version number is
-           based on a date (e.g., a development "snapshot" release) the
-           package management system cannot handle these version
-           numbers without epochs. For example, dpkg will consider
-           "96May01" to be greater than "96Dec24".
+           numbers as the upstream sources.  However, upstream version
+           numbers based on some date formats (sometimes used for
+           development or "snapshot" releases) will not be ordered
+           correctly by the package management software.  For
+           example, <prng>dpkg</prng> will consider "96May01" to be
+           greater than "96Dec24".
          </p>
 
          <p>
            To prevent having to use epochs for every new upstream
-           version, the date based portion of the version number
-           should be changed to the following format in such cases:
-           "19960501", "19961224". It is up to the maintainer whether
-           they want to bother the upstream maintainer to change
-           the version numbers upstream, too.
+           version, the date-based portion of any upstream version number
+           should be given in a way that sorts correctly: four-digit year
+           first, followed by a two-digit numeric month, followed by a
+           two-digit numeric date, possibly with punctuation between the
+           components.
          </p>
 
          <p>
-           Note that other version formats based on dates which are
-           parsed correctly by the package management system should
-           <em>not</em> be changed.
-         </p>
-
-         <p>
-           Native Debian packages (i.e., packages which have been
-           written especially for Debian) whose version numbers include
-           dates should always use the "YYYYMMDD" format.
+           Native Debian packages (i.e., packages which have been written
+           especially for Debian) whose version numbers include dates
+           should also follow these rules.  If punctuation is desired
+           between the date components, remember that hyphen (<tt>-</tt>)
+           cannot be used in native package versions.  Period
+           (<tt>.</tt>) is normally a good choice.
          </p>
        </sect1>
 
       </sect>
 
-      <sect>
+      <sect id="maintainer">
        <heading>The maintainer of a package</heading>
 
        <p>
-         Every package must have a Debian maintainer (the
-         maintainer may be one person or a group of people
-         reachable from a common email address, such as a mailing
-         list).  The maintainer is responsible for ensuring that
-         the package is placed in the appropriate distributions.
-       </p>
-
-       <p>
-         The maintainer must be specified in the
-         <tt>Maintainer</tt> control field with their correct name
-         and a working email address.  If one person maintains
-         several packages, they should try to avoid having
-         different forms of their name and email address in
+         Every package must have a maintainer.  The maintainer may be one
+         person or a group of people reachable from a common email
+         address, such as a mailing list.  The maintainer is responsible
+         for maintaining the Debian packaging files, evaluating and
+         responding appropriately to reported bugs, uploading new
+         versions of the package (either directly or through a sponsor),
+         ensuring that the package is placed in the appropriate archive
+         area and included in Debian releases as appropriate for the
+         stability and utility of the package, and requesting removal of
+         the package from the Debian distribution if it is no longer
+         useful or maintainable.
+       </p>
+
+       <p>
+         The maintainer must be specified in the <tt>Maintainer</tt>
+         control field with their correct name and a working email
+         address.  The email address given in the <tt>Maintainer</tt>
+         control field must accept mail from those role accounts in
+         Debian used to send automated mails regarding the package.  This
+         includes non-spam mail from the bug-tracking system, all mail
+         from the Debian archive maintenance software, and other role
+         accounts or automated processes that are commonly agreed on by
+         the project.<footnote>
+           A sample implementation of such a whitelist written for the
+           Mailman mailing list management software is used for mailing
+           lists hosted by alioth.debian.org.
+         </footnote>
+         If one person or team maintains several packages, they should
+         use the same form of their name and email address in
          the <tt>Maintainer</tt> fields of those packages.
        </p>
 
        </p>
 
        <p>
-         If the maintainer of a package quits from the Debian
-         project, "Debian QA Group"
-         <email>packages@qa.debian.org</email> takes over the
-         maintainer-ship of the package until someone else
-         volunteers for that task. These packages are called
-         <em>orphaned packages</em>.<footnote>
-               The detailed procedure for doing this gracefully can
-               be found in the Debian Developer's Reference,
-               see <ref id="related">.
-         </footnote>
+         If the maintainer of the package is a team of people with a
+         shared email address, the <tt>Uploaders</tt> control field must
+         be present and must contain at least one human with their
+         personal email address.  See <ref id="f-Uploaders"> for the
+         syntax of that field.
+       </p>
+
+       <p>
+         If the maintainer of a package no longer has time or desire to
+         maintain a package, it will be orphaned according to the
+         procedure described in the Debian Developer's Reference
+         (see <ref id="related">).  The maintainer then
+         becomes <tt>Debian QA Group &lt;packages@qa.debian.org&gt;</tt>.
+         These packages are considered maintained by the Debian project
+         as a whole until someone else volunteers to take over
+         maintenance.
        </p>
       </sect>
 
@@ -2698,20 +2712,32 @@ Package: libc6
            putting the name in round brackets and moving it to the
            end, and bringing the email address forward).
          </p>
+
+         <p>
+           See <ref id="maintainer"> for additional requirements and
+           information about package maintainers.
+         </p>
        </sect1>
 
        <sect1 id="f-Uploaders">
           <heading><tt>Uploaders</tt></heading>
 
          <p>
-           List of the names and email addresses of co-maintainers of
-           the package, if any. If the package has other maintainers
-           beside the one named in the
-           <qref id="f-Maintainer">Maintainer field</qref>, their names
-           and email addresses should be listed here. The format of each
-           entry is the same as that of the Maintainer field, and
-           multiple entries must be comma separated.  This is an optional
-           field.
+           List of the names and email addresses of co-maintainers of the
+           package, if any. If the package has other maintainers besides
+           the one named in the <qref id="f-Maintainer">Maintainer
+           field</qref>, their names and email addresses should be listed
+           here. The format of each entry is the same as that of the
+           Maintainer field, and multiple entries must be comma
+           separated.
+         </p>
+
+         <p>
+           This is normally an optional field, but if
+           the <tt>Maintainer</tt> control field names a group of people
+           and a shared email address, the <tt>Uploaders</tt> field must
+           be present and must contain at least one human with their
+           personal email address.
          </p>
 
          <p>
@@ -4373,21 +4399,24 @@ Depends: libc6 (>= 2.2.1), exim | mail-transport-agent
        </p>
 
         <p>
-          All fields that specify build-time relationships
+         Relationships may be restricted to a certain set of
+         architectures.  This is indicated in brackets after each
+         individual package name and the optional version specification.
+         The brackets enclose a list of Debian architecture names
+         separated by whitespace.  Exclamation marks may be prepended to
+         each of the names.  (It is not permitted for some names to be
+         prepended with exclamation marks while others aren't.)
+       </p>
+
+       <p>
+         For build relationship fields
          (<tt>Build-Depends</tt>, <tt>Build-Depends-Indep</tt>,
-         <tt>Build-Conflicts</tt> and <tt>Build-Conflicts-Indep</tt>)
-         may be restricted to a certain set of architectures.  This
-         is indicated in brackets after each individual package name and
-         the optional version specification.  The brackets enclose a
-         list of Debian architecture names separated by whitespace.
-         Exclamation marks may be prepended to each of the names.
-         (It is not permitted for some names to be prepended with
-         exclamation marks while others aren't.) If the current Debian
-         host architecture is not in this list and there are no
-         exclamation marks in the list, or it is in the list with a
-         prepended exclamation mark, the package name and the
-         associated version specification are ignored completely for
-         the purposes of defining the relationships.
+         <tt>Build-Conflicts</tt> and <tt>Build-Conflicts-Indep</tt>), if
+         the current Debian host architecture is not in this list and
+         there are no exclamation marks in the list, or it is in the list
+         with a prepended exclamation mark, the package name and the
+         associated version specification are ignored completely for the
+         purposes of defining the relationships.
        </p>
 
        <p>
@@ -4403,6 +4432,29 @@ Build-Depends: kernel-headers-2.2.10 [!hurd-i386],
          <tt>gnumach-dev</tt> only on hurd-i386.
        </p>
 
+       <p>
+         For binary relationship fields, the architecture restriction
+         syntax is only supported in the source package control
+         file <file>debian/control</file>.  When the corresponding binary
+         package control file is generated, the relationship will either
+         be omitted or included without the architecture restriction
+         based on the architecture of the binary package.  This means
+         that architecture restrictions must not be used in binary
+         relationship fields for architecture-independent packages
+         (<tt>Architecture: all</tt>).
+       </p>
+
+       <p>
+         For example:
+         <example compact="compact">
+Depends: foo [i386], bar [amd64]
+         </example>
+         becomes <tt>Depends: foo</tt> when the package is built on
+         the <tt>i386</tt> architecture, <tt>Depends: bar</tt> when the
+         package is built on the <tt>amd64</tt> architecture, and omitted
+         entirely in binary packages built on all other architectures.
+       </p>
+
        <p>
          If the architecture-restricted dependency is part of a set of
          alternatives using <tt>|</tt>, that alternative is ignored
@@ -4417,11 +4469,11 @@ Build-Depends: foo [!i386] | bar [!amd64]
        </p>
 
         <p>
-         All fields that specify build-time relationships may also be
-         restricted to a certain set of architectures using architecture
-         wildcards.  The syntax for declaring such restrictions is the
-         same as declaring restrictions using a certain set of
-         architectures without architecture wildcards.  For example:
+         Relationships may also be restricted to a certain set of
+         architectures using architecture wildcards.  The syntax for
+         declaring such restrictions is the same as declaring
+         restrictions using a certain set of architectures without
+         architecture wildcards.  For example:
           <example compact="compact">
 Build-Depends: foo [linux-any], bar [any-i386], baz [!linux-any]
           </example>
@@ -4777,6 +4829,15 @@ Build-Depends: foo [linux-any], bar [any-i386], baz [!linux-any]
          example, <ref id="binaries">.
        </p>
 
+       <p>
+         Neither <tt>Breaks</tt> nor <tt>Conflicts</tt> should be used
+         unless two packages cannot be installed at the same time or
+         installing them both causes one of them to be broken or
+         unusable.  Having similar functionality or performing the same
+         tasks as another package is not sufficient reason to
+         declare <tt>Breaks</tt> or <tt>Conflicts</tt> with that package.
+       </p>
+
        <p>
          A <tt>Conflicts</tt> entry may have an "earlier than" version
          clause if the reason for the conflict is corrected in a later
@@ -5022,7 +5083,7 @@ Replaces: mail-transport-agent
            <p>
              There is no Build-Depends-Arch; this role is essentially
              met with Build-Depends.  Anyone building the
-             <tt>build-indep</tt> and binary-indep<tt></tt> targets is
+             <tt>build-indep</tt> and <tt>binary-indep</tt> targets is
              assumed to be building the whole package, and therefore
              installation of all build dependencies is required.
            </p>
@@ -5400,59 +5461,49 @@ Replaces: mail-transport-agent
        </p>
 
        <p>
-         Thus, when a package is built which contains any shared
-         libraries, it must provide a <file>shlibs</file> file for other
-         packages to use, and when a package is built which contains
-         any shared libraries or compiled binaries, it must run
+         When a package is built which contains any shared libraries, it
+         must provide a <file>shlibs</file> file for other packages to
+         use.  When a package is built which contains any shared
+         libraries or compiled binaries, it must run
          <qref id="pkg-dpkg-shlibdeps"><prgn>dpkg-shlibdeps</prgn></qref>
          on these to determine the libraries used and hence the
          dependencies needed by this package.<footnote>
            <p>
-             In the past, the shared libraries linked to were
-             determined by calling <prgn>ldd</prgn>, but now
-             <prgn>objdump</prgn> is used to do this.  The only
-             change this makes to package building is that
-             <prgn>dpkg-shlibdeps</prgn> must also be run on shared
-             libraries, whereas in the past this was unnecessary.
-             The rest of this footnote explains the advantage that
-             this method gives.
+             <prgn>dpkg-shlibdeps</prgn> will use a program
+             like <prgn>objdump</prgn> or <prgn>readelf</prgn> to find
+             the libraries directly needed by the binaries or shared
+             libraries in the package.
            </p>
 
            <p>
              We say that a binary <tt>foo</tt> <em>directly</em> uses
              a library <tt>libbar</tt> if it is explicitly linked
-             with that library (that is, it uses the flag
-             <tt>-lbar</tt> during the linking stage).  Other
+             with that library (that is, the library is listed in the ELF
+             <tt>NEEDED</tt> attribute, caused by adding <tt>-lbar</tt>
+             to the link line when the binary is created).  Other
              libraries that are needed by <tt>libbar</tt> are linked
              <em>indirectly</em> to <tt>foo</tt>, and the dynamic
              linker will load them automatically when it loads
-             <tt>libbar</tt>.  A package should depend on
-             the libraries it directly uses, and the dependencies for
-             those libraries should automatically pull in the other
-             libraries.
-           </p>
-
-           <p>
-             Unfortunately, the <prgn>ldd</prgn> program shows both
-             the directly and indirectly used libraries, meaning that
-             the dependencies determined included both direct and
-             indirect dependencies.  The use of <prgn>objdump</prgn>
-             avoids this problem by determining only the directly
-             used libraries.
+             <tt>libbar</tt>.  A package should depend on the libraries
+             it directly uses, but not the libraries it indirectly uses.
+             The dependencies for those libraries will automatically pull
+             in the other libraries.
            </p>
 
            <p>
              A good example of where this helps is the following.  We
              could update <tt>libimlib</tt> with a new version that
-             supports a new graphics format called dgf (but retaining
-             the same major version number).  If we used the old
-             <prgn>ldd</prgn> method, every package that uses
-             <tt>libimlib</tt> would need to be recompiled so it
-             would also depend on <tt>libdgf</tt> or it wouldn't run
-             due to missing symbols.  However with the new system,
-             packages using <tt>libimlib</tt> can rely on
-             <tt>libimlib</tt> itself having the dependency on
-             <tt>libdgf</tt> and so they would not need rebuilding.
+             supports a new graphics format called dgf (but retaining the
+             same major version number) and depends on <tt>libdgf</tt>.
+             If we used <prgn>ldd</prgn> to add dependencies for every
+             library directly or indirectly linked with a binary, every
+             package that uses <tt>libimlib</tt> would need to be
+             recompiled so it would also depend on <tt>libdgf</tt> or it
+             wouldn't run due to missing symbols.  Since dependencies are
+             only added based on ELF <tt>NEEDED</tt> attribute, packages
+             using <tt>libimlib</tt> can rely on <tt>libimlib</tt> itself
+             having the dependency on <tt>libdgf</tt> and so they would
+             not need rebuilding.
            </p>
          </footnote>
        </p>
@@ -5482,8 +5533,13 @@ Replaces: mail-transport-agent
              <p><file>debian/shlibs.local</file></p>
 
              <p>
-               This lists overrides for this package.  Its use is
-               described below (see <ref id="shlibslocal">).
+               This lists overrides for this package.  This file should
+               normally not be used, but may be needed temporarily in
+               unusual situations to work around bugs in other packages,
+               or in unusual cases where the normally declared dependency
+               information in the installed <file>shlibs</file> file for
+               a library cannot be used.  This file overrides information
+               obtained from any other source.
              </p>
            </item>
 
@@ -5501,38 +5557,34 @@ Replaces: mail-transport-agent
              <p><file>DEBIAN/shlibs</file> files in the "build directory"</p>
 
              <p>
-               When packages are being built, any
-               <file>debian/shlibs</file> files are copied into the
+               When packages are being built,
+               any <file>debian/shlibs</file> files are copied into the
                control file area of the temporary build directory and
                given the name <file>shlibs</file>.  These files give
-               details of any shared libraries included in the
+               details of any shared libraries included in the same
                package.<footnote>
-                   An example may help here.  Let us say that the
-                   source package <tt>foo</tt> generates two binary
-                   packages, <tt>libfoo2</tt> and
-                   <tt>foo-runtime</tt>.  When building the binary
-                   packages, the two packages are created in the
-                   directories <file>debian/libfoo2</file> and
-                   <file>debian/foo-runtime</file> respectively.
-                   (<file>debian/tmp</file> could be used instead of one
-                   of these.)  Since <tt>libfoo2</tt> provides the
-                   <tt>libfoo</tt> shared library, it will require a
-                   <tt>shlibs</tt> file, which will be installed in
-                   <file>debian/libfoo2/DEBIAN/shlibs</file>, eventually
-                   to become
-                   <file>/var/lib/dpkg/info/libfoo2.shlibs</file>.  Then
-                   when <prgn>dpkg-shlibdeps</prgn> is run on the
-                   executable
-                   <file>debian/foo-runtime/usr/bin/foo-prog</file>, it
-                   will examine the
-                   <file>debian/libfoo2/DEBIAN/shlibs</file> file to
-                   determine whether <tt>foo-prog</tt>'s library
-                   dependencies are satisfied by any of the libraries
-                   provided by <tt>libfoo2</tt>.  For this reason,
-                   <prgn>dpkg-shlibdeps</prgn> must only be run once
-                   all of the individual binary packages'
-                   <tt>shlibs</tt> files have been installed into the
-                   build directory.
+                 An example may help here.  Let us say that the source
+                 package <tt>foo</tt> generates two binary
+                 packages, <tt>libfoo2</tt> and <tt>foo-runtime</tt>.
+                 When building the binary packages, the two packages are
+                 created in the directories <file>debian/libfoo2</file>
+                 and <file>debian/foo-runtime</file> respectively.
+                 (<file>debian/tmp</file> could be used instead of one of
+                 these.)  Since <tt>libfoo2</tt> provides the
+                 <tt>libfoo</tt> shared library, it will require a
+                 <tt>shlibs</tt> file, which will be installed in
+                 <file>debian/libfoo2/DEBIAN/shlibs</file>, eventually to
+                 become <file>/var/lib/dpkg/info/libfoo2.shlibs</file>.
+                 When <prgn>dpkg-shlibdeps</prgn> is run on the
+                 executable <file>debian/foo-runtime/usr/bin/foo-prog</file>,
+                 it will examine
+                 the <file>debian/libfoo2/DEBIAN/shlibs</file> file to
+                 determine whether <tt>foo-prog</tt>'s library
+                 dependencies are satisfied by any of the libraries
+                 provided by <tt>libfoo2</tt>.  For this reason,
+                 <prgn>dpkg-shlibdeps</prgn> must only be run once all of
+                 the individual binary packages' <tt>shlibs</tt> files
+                 have been installed into the build directory.
                </footnote>
              </p>
            </item>
@@ -5578,10 +5630,9 @@ dpkg-shlibdeps debian/tmp/usr/bin/* debian/tmp/usr/sbin/* \
          </example>
          Otherwise, you will need to explicitly list the compiled
          binaries and libraries.<footnote>
-             If you are using <tt>debhelper</tt>, the
-             <prgn>dh_shlibdeps</prgn> program will do this work for
-             you.  It will also correctly handle multi-binary
-             packages.
+           If you are using <tt>debhelper</tt>, the
+           <prgn>dh_shlibdeps</prgn> program will do this work for you.
+           It will also correctly handle multi-binary packages.
          </footnote>
        </p>
 
@@ -5593,13 +5644,6 @@ dpkg-shlibdeps debian/tmp/usr/bin/* debian/tmp/usr/sbin/* \
          field in the control file for this to work.
        </p>
 
-       <p>
-         If <prgn>dpkg-shlibdeps</prgn> doesn't complain, you're
-         done.  If it does complain you might need to create your own
-         <file>debian/shlibs.local</file> file, as explained below (see
-         <ref id="shlibslocal">).
-       </p>
-
        <p>
          If you have multiple binary packages, you will need to call
          <prgn>dpkg-shlibdeps</prgn> on each one which contains
@@ -5613,16 +5657,17 @@ dpkg-shlibdeps debian/tmp/usr/bin/* debian/tmp/usr/sbin/* \
          you will need to specify that <prgn>dpkg-shlibdeps</prgn>
          should use the dependency line of type <tt>udeb</tt> by
          adding the <tt>-tudeb</tt> option<footnote>
-             <prgn>dh_shlibdeps</prgn> from the <tt>debhelper</tt> suite
-             will automatically add this option if it knows it is
-             processing a udeb.
-         </footnote>. If there is no dependency line of type <tt>udeb</tt>
-         in the <file>shlibs</file> file, <prgn>dpkg-shlibdeps</prgn> will
-         fall back to the regular dependency line.
+           <prgn>dh_shlibdeps</prgn> from the <tt>debhelper</tt> suite
+           will automatically add this option if it knows it is
+           processing a udeb.
+         </footnote>. If there is no dependency line of
+         type <tt>udeb</tt> in the <file>shlibs</file>
+         file, <prgn>dpkg-shlibdeps</prgn> will fall back to the regular
+         dependency line.
        </p>
 
        <p>
-         For more details on dpkg-shlibdeps, please see
+         For more details on <prgn>dpkg-shlibdeps</prgn>, please see
          <ref id="pkg-dpkg-shlibdeps"> and
          <manref name="dpkg-shlibdeps" section="1">.
        </p>
@@ -5666,13 +5711,17 @@ dpkg-shlibdeps debian/tmp/usr/bin/* debian/tmp/usr/sbin/* \
          usually of the form
          <tt><var>name</var>.so.<var>major-version</var></tt>, in our
          example, <tt>libz.so.1</tt>.<footnote>
-             This can be determined using the command
-             <example compact="compact">
+           This can be determined using the command
+           <example compact="compact">
 objdump -p /usr/lib/libz.so.1.1.3 | grep SONAME
-             </example>
+           </example>
          </footnote>
          The version part is the part which comes after
-         <tt>.so.</tt>, so in our case, it is <tt>1</tt>.
+         <tt>.so.</tt>, so in our case, it is <tt>1</tt>.  The soname may
+         instead be of the form
+         <tt><var>name</var>-<var>major-version</var>.so</tt>, such
+         as <tt>libdb-4.8.so</tt>, in which case the name would
+         be <tt>libdb</tt> and the version would be <tt>4.8</tt>.
        </p>
 
        <p>
@@ -5726,11 +5775,12 @@ install -m644 debian/shlibs.<var>package</var> debian/<var>package</var>/DEBIAN/
          <file>shlibs</file> file in the control area directly from
          <file>debian/rules</file> without using a <file>debian/shlibs</file>
          file at all,<footnote>
-             This is what <prgn>dh_makeshlibs</prgn> in the
-             <tt>debhelper</tt> suite does. If your package also has a udeb
-             that provides a shared library, <prgn>dh_makeshlibs</prgn> can
-             automatically generate the <tt>udeb:</tt> lines if you specify
-             the name of the udeb with the <tt>--add-udeb</tt> option.
+           This is what <prgn>dh_makeshlibs</prgn> in
+           the <package>debhelper</package> suite does. If your package
+           also has a udeb that provides a shared
+           library, <prgn>dh_makeshlibs</prgn> can automatically generate
+           the <tt>udeb:</tt> lines if you specify the name of the udeb
+           with the <tt>--add-udeb</tt> option.
          </footnote>
          since the <file>debian/shlibs</file> file itself is ignored by
          <prgn>dpkg-shlibdeps</prgn>.
@@ -5745,74 +5795,7 @@ install -m644 debian/shlibs.<var>package</var> debian/<var>package</var>/DEBIAN/
          packages.
        </p>
       </sect1>
-
-      <sect1 id="shlibslocal">
-       <heading>Writing the <file>debian/shlibs.local</file> file</heading>
-
-       <p>
-         This file is intended only as a <em>temporary</em> fix if
-         your binaries or libraries depend on a library whose package
-         does not yet provide a correct <file>shlibs</file> file.
-       </p>
-
-       <p>
-         We will assume that you are trying to package a binary
-         <tt>foo</tt>.  When you try running
-         <prgn>dpkg-shlibdeps</prgn> you get the following error
-         message (<tt>-O</tt> displays the dependency information on
-         <tt>stdout</tt> instead of writing it to
-         <tt>debian/substvars</tt>, and the lines have been wrapped
-         for ease of reading):
-         <example compact="compact">
-$ dpkg-shlibdeps -O debian/tmp/usr/bin/foo
-dpkg-shlibdeps: warning: unable to find dependency
-  information for shared library libbar (soname 1,
-  path /usr/lib/libbar.so.1, dependency field Depends)
-shlibs:Depends=libc6 (>= 2.2.2-2)
-         </example>
-         You can then run <prgn>ldd</prgn> on the binary to find the
-         full location of the library concerned:
-         <example compact="compact">
-$ ldd foo
-libbar.so.1 => /usr/lib/libbar.so.1 (0x4001e000)
-libc.so.6 => /lib/libc.so.6 (0x40032000)
-/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
-         </example>
-         So the <prgn>foo</prgn> binary depends on the
-         <prgn>libbar</prgn> shared library, but no package seems to
-         provide a <file>*.shlibs</file> file handling
-         <file>libbar.so.1</file> in <file>/var/lib/dpkg/info/</file>.  Let's
-         determine the package responsible:
-         <example compact="compact">
-$ dpkg -S /usr/lib/libbar.so.1
-bar1: /usr/lib/libbar.so.1
-$ dpkg -s bar1 | grep Version
-Version: 1.0-1
-         </example>
-         This tells us that the <tt>bar1</tt> package, version 1.0-1,
-         is the one we are using.  Now we can file a bug against the
-         <tt>bar1</tt> package and create our own
-         <file>debian/shlibs.local</file> to locally fix the problem.
-         Including the following line into your
-         <file>debian/shlibs.local</file> file:
-         <example compact="compact">
-libbar 1 bar1 (>= 1.0-1)
-         </example>
-         should allow the package build to work.
-       </p>
-
-       <p>
-         As soon as the maintainer of <tt>bar1</tt> provides a
-         correct <file>shlibs</file> file, you should remove this line
-         from your <file>debian/shlibs.local</file> file.  (You should
-         probably also then have a versioned <tt>Build-Depends</tt>
-         on <tt>bar1</tt> to help ensure that others do not have the
-         same problem building your package.)
-       </p>
-      </sect1>
-
       </sect>
-
     </chapt>
 
 
@@ -7303,10 +7286,10 @@ INSTALL = install -s # (or use strip on the files in debian/tmp)
           for C files) will need to be compiled twice, for the normal
           case. 
         </p>
+
        <p>
-         You must specify the gcc option <tt>-D_REENTRANT</tt>
-         when building a library (either static or shared) to make
-         the library compatible with LinuxThreads.
+         Libraries should be built with threading support and to be
+         thread-safe if the library supports this.
        </p>
 
         <p>
@@ -7363,40 +7346,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>
@@ -8358,11 +8359,13 @@ done
                <example compact="compact">
 /usr/lib/cgi-bin/<var>cgi-bin-name</var>
                </example>
-               and should be referred to as
+               or a subdirectory of that directory, and should be
+               referred to as
                <example compact="compact">
 http://localhost/cgi-bin/<var>cgi-bin-name</var>
                </example>
-
+               (possibly with a subdirectory name
+               before <var>cgi-bin-name</var>).
            </item>
 
            <item>