]> git.donarmstrong.com Git - debian/debian-policy.git/blob - perl-policy.sgml
7c3744647f5dff6dd94e0fefd8040937c33ecf8c
[debian/debian-policy.git] / perl-policy.sgml
1 <!doctype debiandoc system [
2 <!-- include version information so we don't have to hard code it
3      within the document -->
4 <!entity % versiondata SYSTEM "version.ent"> %versiondata;
5 ]>
6
7 <debiandoc>
8   <book>
9     <titlepag>
10       <title>Debian Perl Policy</title>
11       <author>
12         <name>Rapha&euml;l Hertzog</name>
13       </author>
14       <author>
15         <name>Brendan O'Dea</name>
16       </author>
17       <author>
18         <name>The Debian Policy mailing list</name>
19         <email>debian-policy@lists.debian.org</email>
20       </author>
21       <version>version &version;, &date;</version>
22
23       <abstract>
24         This document describes the packaging of Perl within the Debian
25         GNU/Linux distribution and the policy requirements for packaged
26         Perl programs and modules.
27       </abstract>
28
29       <copyright>
30         <copyrightsummary>
31           Copyright &copy; 1999, 2001 Software in the Public Interest
32         </copyrightsummary>
33         <p>
34           This manual is free software; you can redistribute it and/or
35           modify it under the terms of the GNU General Public License
36           as published by the Free Software Foundation; either version
37           2 of the License, or (at your option) any later version.
38         </p>
39         <p>
40           This is distributed in the hope that it will be useful, but
41           WITHOUT ANY WARRANTY; without even the implied warranty of
42           MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
43           the GNU General Public License for more details.
44         </p>
45         <p>
46           A copy of the GNU General Public License is available as
47           <tt>/usr/share/common-licenses/GPL</tt> in the Debian GNU/Linux
48           distribution or on the World Wide Web at 
49           <url id="http://www.gnu.org/copyleft/gpl.html"
50           name="The GNU Public Licence">.
51         </p>
52         <p>
53           You can also obtain it by writing to the
54           Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
55           Boston, MA 02110-1301, USA. 
56         </p>
57       </copyright>
58     </titlepag>
59
60     <toc detail="sect">
61
62     <chapt>
63       <heading>About this document</heading>
64       <p>
65         This document is distributed as the <tt>perl-policy</tt> files
66         in the Debian package
67         <package><url name="debian-policy" id="http://packages.debian.org/debian-policy"></package>.
68         It is also available from the Debian web mirrors at
69         <tt><url name="/doc/packaging-manuals/perl-policy/"
70                 id="http://www.debian.org/doc/packaging-manuals/perl-policy/"></tt>.
71       </p>
72     </chapt>
73
74     <chapt id="perl">
75       <heading>Perl Packaging</heading>
76       <sect id="versions">
77         <heading>Versions</heading>
78         <p>
79           At any given time, the package <package>perl</package> should
80           represent the current stable upstream version of Perl revision
81           5 (see <ref id="perl6">).
82         </p>
83         <p>
84           Only one package may contain the <file>/usr/bin/perl</file>
85           binary and that package must either be <package>perl</package>
86           or a dependency of that package (see <ref id="base">).
87         </p>
88         <p>
89           Where possible, Perl should be compiled to provide binary
90           compatibility to at least the last released package version to
91           allow a grace period over which binary module packages may be
92           re-built against the new package (see <ref id="binary_modules">).
93         </p>
94         <p>
95           The <package>perl-base</package> package must provide
96           <package>perlapi-<var>abiname</var></package> for all released
97           package versions it is compatible with. The choice of
98           <var>abiname</var> is arbitrary, but if it differs from
99           <tt>$Config{version}</tt>, it must be specified in
100           <tt>$Config{debian_abi}</tt>.
101         </p>
102       </sect>
103
104       <sect id="base">
105         <heading>Base Package</heading>
106         <p>
107           In order to provide a minimal installation of Perl for use by
108           applications without requiring the whole of Perl to be
109           installed, the <package>perl-base</package> package contains
110           the binary and a basic set of modules.
111         </p>
112         <p>
113           As Perl has been part of the essential set for some time and is
114           used without dependencies by such things as package maintainer
115           scripts, <package>perl-base</package> must be
116           priority <em>required</em> and marked as <em>essential</em>.
117         </p>
118         <p>
119           Note that the <package>perl-base</package> package is intended
120           only to provide for exceptional circumstances and the contents
121           may change.  In general, only packages which form part of the
122           base system should use only the facilities
123           of <package>perl-base</package> rather than declaring a
124           dependency on <package>perl</package>.
125         </p>
126       </sect>
127
128       <sect id="paths">
129         <heading>Module Path</heading>
130         <p>
131           Perl searches three different locations for modules, referred
132           to in this document as <var>core</var> in which modules
133           distributed with Perl are installed, <var>vendor</var> for
134           packaged modules and <var>site</var> for modules installed by
135           the local administrator.
136         </p>
137         <p>
138           The module search path (<tt>@INC</tt>) in the Debian packages
139           has been ordered to include these locations in the following
140           order:
141           <taglist>
142             <tag><var>site</var> (current)</tag>
143             <item>
144               <p>
145                 Modules installed by the local administrator for the
146                 current version of Perl (see <ref id="site">).
147                 <example>
148 /usr/local/lib/perl/<var>version</var>
149 /usr/local/share/perl/<var>version</var>
150                 </example>
151                 Where <var>version</var> indicates the current Perl
152                 version (<tt>$Config{version}</tt><footnote>see the
153                 <tt>Config</tt> module</footnote>).
154               </p>
155             </item>
156             <tag><var>vendor</var></tag>
157             <item>
158               <p>
159                 Packaged modules (see <ref id="module_packages">).
160                 <example>
161 /usr/lib/perl5
162 /usr/share/perl5
163                 </example>
164               </p>
165             </item>
166             <tag><var>core</var></tag>
167             <item>
168               <p>
169                 Modules included in the core Perl distribution.
170                 <example>
171 /usr/lib/perl/<var>version</var>
172 /usr/share/perl/<var>version</var>
173                 </example>
174               </p>
175             </item>
176             <tag><var>site</var> (old)</tag>
177             <item>
178               <p>
179                 <var>site</var> directories (as above) for modules
180                 installed with previously released
181                 <package>perl</package> packages for which the current
182                 package is binary compatible are included if present.
183               </p>
184             </item>
185           </taglist>
186           In each of the directory pairs above, the <file>lib</file>
187           component is for binary (XS) modules, and <file>share</file>
188           for architecture-independent (pure-perl) modules.
189         </p>
190       </sect>
191
192       <sect id="docs">
193         <heading>Documentation</heading>
194         <p>
195           The POD files and manual pages which do not refer to programs
196           may be split out into a separate <package>perl-doc</package>
197           package.
198         </p>
199         <p>
200           Manual pages distributed with Perl packages must be installed
201           into the standard directories:
202           <taglist>
203             <tag>Programs</tag>
204             <item>
205               <p>
206                 Manual pages for programs and scripts are installed into
207                 <file>/usr/share/man/man1</file> with the extension
208                 <tt>.1</tt>.
209               </p>
210             </item>
211             <tag>Modules</tag>
212             <item>
213               <p>
214                 Manual pages for modules are installed into
215                 <file>/usr/share/man/man3</file> with the extension
216                 <tt>.3perl</tt>.
217               </p>
218             </item>
219           </taglist>
220         </p>
221       </sect>
222     </chapt>
223
224     <chapt id="site">
225       <heading>Locally Installed Modules</heading>
226       <sect id="site_dirs">
227         <heading>Site Directories</heading>
228         <p>
229           The Perl packages must provide a mechanism for the local
230           administrator to install modules under <file>/usr/local</file>
231           but must not create or remove those directories.
232         </p>
233         <p>
234           Modules should be installed to the directories described above
235           in <ref id="paths"> as <var>site</var> (current), programs to
236           <file>/usr/local/bin</file> and manual pages under
237           <file>/usr/local/man</file>.
238         </p>
239       </sect>
240
241       <sect id="site_install">
242         <heading>Site Installation</heading>
243         <p>
244           The following commands should be sufficient in the majority of
245           cases for the local administrator to install modules and must
246           create directories as required:
247           <example>
248 perl Makefile.PL
249 make install
250           </example>
251         </p>
252       </sect>
253     </chapt>
254
255     <chapt id="module_packages">
256       <heading>Packaged Modules</heading>
257       <sect id="vendor_dirs">
258         <heading>Vendor Directories</heading>
259         <p>
260           The installation directory for Debian modules must be
261           different from that for <var>core</var> and <var>site</var>
262           modules.
263         </p>
264         <p>
265           The current Perl packaging uses the <var>vendor</var>
266           directories for this purpose, which are at present as
267           described in <ref id="paths"> as <var>vendor</var>.
268         </p>
269         <p>
270           No version subdirectory exists on these directories as the
271           dependencies for packaged modules (see <ref id="module_deps">)
272           should ensure that all work with the current
273           <package>perl</package> package.
274         </p>
275         <p>
276           The Perl distribution includes many modules available
277           separately from CPAN<footnote><url
278           id="http://www.perl.com/CPAN"></footnote>, which may have a
279           newer version.  The intent of the <tt>@INC</tt> ordering
280           (described in <ref id="paths">) is to allow such modules to be
281           packaged to <var>vendor</var> which take precedence over the
282           version in <var>core</var>.  A packaged module which shadows a
283           <var>core</var> module in this way must be a newer version.
284         </p>
285         <p>
286           Module packages must install manual pages into the standard
287           directories (see <ref id="docs">) using the extensions
288           <tt>.1p</tt> and <tt>.3pm</tt> to ensure that no conflict
289           arises where a packaged module duplicates a <var>core</var>
290           module.
291         </p>
292         <p>
293           <file>.packlist</file> files should not be installed.
294         </p>
295       </sect>
296
297       <sect id="package_names">
298         <heading>Module Package Names</heading>
299         <p>
300           Perl module packages should be named for the primary module
301           provided.  The naming convention for module <tt>Foo::Bar</tt>
302           is <package>libfoo-bar-perl</package>.  Packages which include
303           multiple modules may additionally include provides for those
304           modules using the same convention.
305         </p>
306       </sect>
307
308       <sect id="vendor_install">
309         <heading>Vendor Installation</heading>
310         <p>
311           A module should use the following lines in the
312           <file>debian/rules</file> <tt>build</tt>
313           target<footnote>The environment variable <tt>PERL_MM_OPT</tt>
314           may be used to pass the <tt>INSTALLDIRS=vendor</tt> option in
315           cases where <file>Makefile.PL</file> is not invoked directly
316           from <file>debian/rules</file></footnote>:
317           <example>
318 perl Makefile.PL INSTALLDIRS=vendor
319 $(MAKE) OPTIMIZE="-O2 -g -Wall"
320           </example>
321           and this one to install the results into the temporary tree:
322           <example>
323 $(MAKE) install DESTDIR=$(CURDIR)/debian/&lt;tmp&gt;
324           </example><footnote>
325             <p>Replace &lt;tmp&gt; with the appropriate directory
326             (nominally just tmp)</p>
327           </footnote>
328         </p>
329       </sect>
330
331       <sect id="module_deps">
332         <heading>Module Dependencies</heading>
333         <sect1 id="indep_modules">
334           <heading>Architecture-Independent Modules</heading>
335           <p>
336             Architecture-independent modules which require
337             <var>core</var> modules from the <package>perl</package>
338             package must specify a dependency on that package.
339           </p>
340           <p>
341             Modules which contain explicit <tt>require
342             <var>version</var></tt> or <tt>use <var>version</var></tt>
343             statements must specify a dependency on
344             <package>perl</package> or <package>perl-base</package> with
345             the minimum required version, or more simply the current
346             version.
347           </p>
348         </sect1>
349
350         <sect1 id="binary_modules">
351           <heading>Binary Modules</heading>
352           <p>
353             Binary modules must specify a dependency on either
354             <package>perl</package> or <package>perl-base</package> with
355             a minimum version of the <package>perl</package> package
356             used to build the module, and must additionally depend on
357             the expansion of
358             <package>perlapi-$Config{debian_abi}</package> using
359             the <tt>Config</tt> module. If <tt>$Config{debian_abi}</tt>
360             is empty or not set, <tt>$Config{version}</tt> must be used.
361           </p>
362         </sect1>
363
364         <sect1 id="dh_perl">
365           <heading>Automating Perl Dependencies</heading>
366           <p>
367             Rather than hard-coding the dependencies into the control
368             file, using a substitution such as <tt>${perl:Depends}</tt>
369             is suggested.  This allows the dependencies to be determined
370             at build time and written to the <file>substvars</file> file
371             in the form
372             <tt>perl:Depends=<var>deps</var></tt>.<footnote>
373               <p>Please note that dependencies caused by versioned
374               uses and on separately packaged modules are not included
375               in this variable and must be explicitly included.</p>
376             </footnote>
377           </p>
378           <p>
379             Packages built with <prgn>debhelper</prgn> may use
380
381             <manref name="dh_perl" section="1"> to generate this
382             substitution automatically.  This additionally requires a
383             versioned <tt>Build-Depends</tt> (or
384             <tt>Build-Depends-Indep</tt>) on <tt>debhelper (>=
385             3.0.18)</tt>.
386           </p>
387         </sect1>
388       </sect>
389     </chapt>
390
391     <chapt id="programs">
392       <heading>Perl Programs</heading>
393       <sect id="hash_bang">
394         <heading>Script Magic</heading>
395         <p>
396           All packaged perl programs must start with
397           <tt>#!/usr/bin/perl</tt> and may append such flags as are
398           required.
399         </p>
400       </sect>
401
402       <sect id="program_deps">
403         <heading>Program Dependencies</heading>
404         <p>
405           Programs which require <var>core</var> modules from the
406           <package>perl</package> package must specify a dependency on
407           that package.
408         </p>
409         <p>
410           Programs which contain explicit <tt>require
411           <var>version</var></tt> or <tt>use <var>version</var></tt>
412           statements must specify a dependency on
413           <package>perl</package> or <package>perl-base</package> with
414           the minimum required version, or more simply the current
415           version.
416         </p>
417         <p>
418           As with modules, packages using <prgn>debhelper</prgn> may use
419           <manref name="dh_perl" section="1"> to automatically generate
420           dependences (see <ref id="dh_perl">).
421         </p>
422       </sect>
423     </chapt>
424
425     <chapt id="embed">
426       <heading>Programs Embedding Perl</heading>
427       <sect id="build_embedded">
428         <heading>Building Embedded Programs</heading>
429         <p>
430           Programs which embed a perl interpreter must declare a
431           <tt>Build-Depends</tt> on <package>libperl-dev</package>.
432         </p>
433         <p>
434           The default linker options produced by
435           <example>
436 perl -MExtUtils::Embed -e ldopts
437           </example>
438           will link against the dynamic <tt>libperl</tt>.  If programs
439           wish to link to the static library, then <tt>-lperl</tt>
440           should be changed to <file>/usr/lib/libperl.a</file> in those
441           options.
442         </p>
443       </sect>
444
445       <sect id="embedded_deps">
446         <heading>Embedded Perl Dependencies</heading>
447         <p>
448           Dependencies for programs linking against the shared Perl
449           library will be automatically created by
450           <prgn>dpkg-shlibdeps</prgn>.  Note however that the shared
451           perl library package only suggests
452           <package>perl-base</package> and packages requiring any
453           <var>core</var> modules from the <package>perl</package>
454           package must depend upon it explicitly.
455         </p>
456       </sect>
457     </chapt>
458
459     <appendix id="perl6">
460       <heading>Perl 6</heading>
461       <p>
462         The current stable upstream version at the time of this writing
463         is 5.6.0.  There is currently work in progress on the next major
464         revision, although the specifications have yet to be finalised.
465       </p>
466       <p>
467         It is anticipated that when Perl 6 is released it will initially
468         be packaged as <package>perl6</package>, install the binary as
469         <file>/usr/bin/perl6</file> and use different directories for
470         packaged modules to <package>perl</package>:
471         <example>
472 /usr/lib/perl6
473 /usr/share/perl6
474         </example>
475         This will allow Perl 5 and 6 packages and modules (which should
476         be packaged as <package>libfoo-bar-perl6</package>), to co-exist
477         for as long as required.
478       </p>
479       <p>
480         At some stage in the future when Perl 6 is sufficiently mature,
481         the package naming may be reversed such that the
482         <package>perl</package> package contains Perl 6 and the current
483         package becomes <package>perl5</package>.
484       </p>
485     </appendix>
486   </book>
487 </debiandoc>
488 <!-- Local variables: -->
489 <!-- indent-tabs-mode: t -->
490 <!-- End: -->