-<!doctype debiandoc system>
+<!doctype debiandoc system [
+<!-- include version information so we don't have to hard code it
+ within the document -->
+<!entity % versiondata SYSTEM "version.ent"> %versiondata;
+]>
<debiandoc>
<book>
<name>The Debian Policy mailing list</name>
<email>debian-policy@lists.debian.org</email>
</author>
- <version>version 1.20</version>
+ <version>version &version;, &date;</version>
<abstract>
This document describes the packaging of Perl within the Debian
- GNU/Linux distribution and the policy requirements for packaged
+ distribution and the policy requirements for packaged
Perl programs and modules.
</abstract>
</p>
<p>
A copy of the GNU General Public License is available as
- <tt>/usr/share/common-licenses/GPL</tt> in the Debian GNU/Linux
+ <tt>/usr/share/common-licenses/GPL</tt> in the Debian
distribution or on the World Wide Web at
<url id="http://www.gnu.org/copyleft/gpl.html"
name="The GNU Public Licence">.
<package>perlapi-<var>abiname</var></package> for all released
package versions it is compatible with. The choice of
<var>abiname</var> is arbitrary, but if it differs from
- <tt>$Config{version}</tt>, it must be specified in
+ <tt>$Config{version}</tt><footnote>see the
+ <tt>Config</tt> module</footnote>, it must be specified in
<tt>$Config{debian_abi}</tt>.
</p>
</sect>
Modules installed by the local administrator for the
current version of Perl (see <ref id="site">).
<example>
-/usr/local/lib/perl/<var>version</var>
-/usr/local/share/perl/<var>version</var>
+$Config{sitearch} (currently /usr/local/lib/perl/<var>version</var>)
+$Config{sitelib} (currently /usr/local/share/perl/<var>version</var>)
</example>
Where <var>version</var> indicates the current Perl
- version (<tt>$Config{version}</tt><footnote>see the
- <tt>Config</tt> module</footnote>).
+ version (<tt>$Config{version}</tt>).
</p>
+ <p>
+ These locations, particularly <tt>$Config{sitearch}</tt>,
+ may change if the binary interface between the
+ Perl interpreter and compiled modules has to be
+ changed in an incompatible way without a change in
+ <var>version</var>. While this will only be done as a
+ last resort, packages should use <tt>$Config{sitelib}</tt>
+ and <tt>$Config{sitearch}</tt>, not hardcode the current
+ locations.<footnote>Build systems based on
+ <tt>ExtUtils::MakeMaker</tt> and <tt>Module::Build</tt>
+ do this automatically.</footnote>
+ <p>
</item>
<tag><var>vendor</var></tag>
<item>
<p>
Packaged modules (see <ref id="module_packages">).
<example>
-/usr/lib/perl5
-/usr/share/perl5
+$Config{vendorarch} (currently /usr/lib/perl5)
+$Config{vendorlib} (currently /usr/share/perl5)
</example>
+ These locations, particularly
+ <tt>$Config{vendorarch}</tt>, may change if
+ necessary<footnote>For example, to include
+ the multiarch triplet</footnote>. Packages
+ should use <tt>$Config{vendorlib}</tt> and
+ <tt>$Config{vendorarch}</tt>, not hardcode the current
+ locations.<footnote>Build systems based on
+ <tt>ExtUtils::MakeMaker</tt> and <tt>Module::Build</tt>
+ do this automatically.</footnote>
</p>
</item>
<tag><var>core</var></tag>
<p>
Modules included in the core Perl distribution.
<example>
-/usr/lib/perl/<var>version</var>
-/usr/share/perl/<var>version</var>
+$Config{archlib} (currently /usr/lib/perl/<var>shortversion</var>)
+$Config{privlib} (currently /usr/share/perl/<var>shortversion</var>)
</example>
+ Where <var>shortversion</var> indicates the current Perl major
+ version (for example <tt>5.18</tt>).
+ </p>
+ <p>
+ These locations should be considered internal to the <package>
+ perl</package> source package. If necessary, packages should use
+ <tt>$Config{archlib}</tt> and <tt>$Config{privlib}</tt> instead of
+ hardcoding the current locations.<footnote>Build systems based on
+ <tt>ExtUtils::MakeMaker</tt> and <tt>Module::Build</tt>
+ do this automatically.</footnote>
</p>
</item>
<tag><var>site</var> (old)</tag>
package.
</p>
<p>
- Manual pages distributed with Perl packages must be installed
- into the standard directories:
+ Manual pages distributed with packages built from the perl
+ source package must be installed into the standard directories:
<taglist>
<tag>Programs</tag>
<item>
</p>
</item>
</taglist>
+ The extensions used for manual pages distributed with module
+ packages are different. See <ref id="vendor_dirs">.
</p>
</sect>
</chapt>
<heading>Module Package Names</heading>
<p>
Perl module packages should be named for the primary module
- provided. The naming convention for module <tt>Foo::Bar</tt>
- is <package>libfoo-bar-perl</package>. Packages which include
- multiple modules may additionally include provides for those
- modules using the same convention.
+ provided. The naming convention is to lowercase the Perl module
+ name, prepend, <tt>lib</tt>, change all occurrences
+ of <tt>::</tt> to <tt>-</tt>, and append <tt>-perl</tt>. For
+ example:
+ <example>
+Foo::Bar libfoo-bar-perl
+Foo::Bar::Baz libfoo-bar-baz-perl
+Foo::BarBaz libfoo-barbaz-perl
+ </example>
+ Packages which include multiple modules may additionally include
+ provides for the additional modules using the same convention.
</p>
</sect>
</sect1>
<sect1 id="binary_modules">
- <heading>Binary Modules</heading>
+ <heading>Binary and Other Architecture Dependent Modules</heading>
<p>
Binary modules must specify a dependency on either
<package>perl</package> or <package>perl-base</package> with
a minimum version of the <package>perl</package> package
- used to build the module, and must additionally depend on
- the expansion of
- <package>perlapi-$Config{debian_abi}</package> using
+ used to build the module. Additionally, all binary modules
+ (regardless of their installation directory) and any other modules
+ installed into <tt>$Config{vendorarch}</tt> must depend on the
+ expansion of <package>perlapi-$Config{debian_abi}</package> using
the <tt>Config</tt> module. If <tt>$Config{debian_abi}</tt>
is empty or not set, <tt>$Config{version}</tt> must be used.
</p>
package must depend upon it explicitly.
</p>
</sect>
+
+ <sect id="perl_upgrades">
+ <heading>Perl Package Upgrades</heading>
+ <p>
+ Starting from <package>perl</package> 5.12.3-2, a dpkg trigger
+ named <var>perl-major-upgrade</var> will be triggered by the
+ postinst of the <package>perl</package> package during major
+ upgrades. Some examples of things which constitute a major upgrade
+ are an upgrade which would change the value of versioned
+ directories in <tt>@INC</tt>, or one which changes <tt>abiname</tt>.
+ Any package may declare an interest in the trigger, especially
+ packages including long-running daemons which would stop working
+ until restart.
+ </p>
+ <p>
+ It is suggested that such packages include an appropriate section
+ in their postinst to handle the trigger by restarting relevant
+ daemons or notifying users of further action.
+ </p>
+ </sect>
</chapt>
<appendix id="perl6">