/[ddp]/manuals/trunk/maint-guide/maint-guide.en.dbk
ViewVC logotype

Contents of /manuals/trunk/maint-guide/maint-guide.en.dbk

Parent Directory Parent Directory | Revision Log Revision Log


Revision 8715 - (hide annotations) (download)
Sat Apr 23 10:03:26 2011 UTC (2 years ago) by osamu
File size: 201948 byte(s)
imore touch ups
1 osamu 8601 <?xml version="1.0" encoding="UTF-8"?>
2     <!-- -*- DocBook -*- -->
3     <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
4     "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
5 osamu 8643 <!ENTITY % trans SYSTEM "po4a/maint-guide.en.ent"> %trans;
6 osamu 8601 <!ENTITY % common SYSTEM "common.ent"> %common;
7     <!ENTITY % version SYSTEM "version.ent"> %version;
8     ]>
9     <book lang="en">
10     <!-- This is UTF-8 encoded. -->
11 osamu 8646 <!--
12     This is reorganized to make this document robust for translation
13     when some externally referenced information changes.
14    
15     If you want to add extra contents to this document, please do so by
16     * adding tag like &othercredit; in English and provide it for each language.
17     * add extra content within msgstr but within <footnote>...</footnote>
18     Please note there will be content checker to match tags of msgid and msgstr.
19     The second rule is a way to get exception to this rule.
20    
21     Please try to correct something in translation. If you think contents needs fix,
22     Let's fix it in the root cause.
23    
24     Please understand to keep this document focused. Not everything you think important
25     for new maintainer should be written down. Something social needs to be elsewhere.
26     Some thing should be left to the practice. Something needs to be left for exercise
27     for people to check official documentations.
28     -->
29 osamu 8601 <title>Debian New Maintainers' Guide</title>
30     <bookinfo>
31     <authorgroup>
32 osamu 8673 <!-- do not use firstname and surname tags it braks Japanese. The same with othercredit -->
33     <author> <personname>Josip Rodin</personname> <email>joy-mg@debian.org</email> <contrib>original contents</contrib> </author>
34     <author> <personname>Osamu Aoki</personname> <email>osamu@debian.org</email> <contrib>updated contents</contrib> </author>
35 osamu 8643 <!-- translator credits in po4a/translator.*.ent -->
36     &othercredit;
37 osamu 8601 </authorgroup>
38     <releaseinfo>version &docversion;</releaseinfo>
39     <pubdate>&docisodate;</pubdate>
40     <copyright><year>1998-2002</year> <holder>Josip Rodin</holder></copyright>
41     <copyright><year>2005-2011</year> <holder>Osamu Aoki</holder></copyright>
42     <copyright><year>2010</year> <holder>Craig Small</holder></copyright>
43     <copyright><year>2010</year> <holder>Raphaël Hertzog</holder></copyright>
44     <legalnotice>
45     <para>
46     This document may be used under the terms the GNU General Public License
47     version 2 or higher.
48     </para>
49     <para>
50     This document was made using with these two documents as examples:
51     </para>
52 osamu 8650 <itemizedlist>
53     <listitem>
54 osamu 8601 <para>
55     Making a Debian Package (AKA the Debmake Manual), copyright © 1997 Jaldhar
56     Vyas.
57     </para>
58 osamu 8650 </listitem>
59     <listitem>
60 osamu 8601 <para>
61     The New-Maintainer's Debian Packaging Howto, copyright © 1997 Will Lowe.
62     </para>
63 osamu 8650 </listitem>
64     </itemizedlist>
65 osamu 8601 </legalnotice>
66     <!-- toc -->
67     </bookinfo>
68     <chapter id="start"><title>Getting started The Right Way</title>
69     <para>
70 osamu 8688 This document tries to describe the building of a Debian package to ordinary
71     Debian users and prospective developers. It uses fairly non-technical language, and
72     it's well covered with working examples. There is an old Latin saying:
73     <emphasis>Longum iter est per praecepta, breve et efficax per
74     exempla</emphasis> (It's a long way by the rules, but short and efficient with
75     examples).
76 osamu 8601 </para>
77     <para>
78 osamu 8636 This document has been updated for the Debian <literal>&base-release;</literal>
79     release.
80 osamu 8688 <footnote><para> The document assumes you are using a
81     <literal>&base-release;</literal> or newer system. If you need to follow this
82 taffit-guest 8665 text in an older system (including an older Ubuntu system etc.), you must
83 osamu 8639 install backported <systemitem role="package">dpkg</systemitem> and
84     <systemitem role="package">debhelper</systemitem> packages, at least.
85     </para> </footnote>
86 osamu 8601 </para>
87     <para>
88     One of the things that makes Debian such a top-notch distribution is its
89     package system. While there is a vast quantity of software already in the
90     Debian format, sometimes you need to install software that isn't. You may be
91 osamu 8688 wondering how you can make your own packages; and perhaps you think it is a very
92 osamu 8601 difficult task. Well, if you are a real novice on Linux, it is hard, but if
93 osamu 8688 you were a rookie, you wouldn't be reading this document now&nbsp;:-)
94     You do need to know a little about Unix programming but you certainly
95     don't need to be a wizard.
96 osamu 8639 <footnote><para>
97 osamu 8688 You can learn about the basic handling of a Debian system from the
98 osamu 8639 <ulink url="&debref;">Debian Reference</ulink>. It contains some pointers to
99     learn about Unix programming, too.
100     </para></footnote>
101 osamu 8601 </para>
102     <para>
103     One thing is certain, though: to properly create and maintain Debian packages
104 osamu 8688 takes many hours. Make no mistake, for our system to work the maintainers
105 osamu 8601 need to be both technically competent and diligent.
106     </para>
107     <para>
108     This document will explain every little (at first maybe irrelevant) step, and
109     help you create that first package, and to gain some experience in building
110 osamu 8688 the next releases of that and maybe other packages later on.
111 osamu 8601 </para>
112     <para>
113 taffit-guest 8665 If you need some help on packaging, please read <xref linkend="helpme"/>.
114 osamu 8601 </para>
115     <para>
116 osamu 8636 Newer versions of this document should always be available online at
117     <ulink url="&maint-guide;"/> and in the
118     <systemitem role="package">maint-guide</systemitem> package.
119 osamu 8688 The translations may be available in packages such as
120 osamu 8639 <systemitem role="package">maint-guide-es</systemitem>.
121 osamu 8655 Please note that this documentation may be slightly outdated.
122 osamu 8601 </para>
123 osamu 8688 <section id="socialdynamism"><title>Social dynamics of Debian</title>
124 osamu 8651 <para>
125 osamu 8688 Here are some observations of Debian's social dynamics, presented in the hope
126     that it will prepare you for interactions with Debian.
127 osamu 8651 </para>
128     <itemizedlist>
129     <listitem><para>We all are volunteers.</para>
130     <itemizedlist>
131 osamu 8688 <listitem><para>You cannot impose on others what to do.</para></listitem>
132 osamu 8651 <listitem><para>You should be motivated to do things by yourself.</para></listitem>
133     </itemizedlist></listitem>
134     <listitem><para>Friendly cooperation is the driving force.</para>
135     <itemizedlist>
136     <listitem><para>Your contribution should not overstrain others.</para></listitem>
137     <listitem><para>Your contribution is valuable only when others appreciate it.</para></listitem>
138     </itemizedlist></listitem>
139     <listitem><para>Debian is not your school where you get automatic attention of teachers.</para>
140     <itemizedlist>
141     <listitem><para>You should be able to learn many things by yourself.</para></listitem>
142 osamu 8688 <listitem><para>Attention from other volunteers is a very scarce resource.</para></listitem>
143 osamu 8651 </itemizedlist></listitem>
144     <listitem><para>Debian is constantly improving.</para>
145     <itemizedlist>
146 osamu 8655 <listitem><para>You are expected to make high quality packages.</para></listitem>
147 osamu 8688 <listitem><para>You should adapt yourself to change.</para></listitem>
148 osamu 8651 </itemizedlist></listitem>
149     </itemizedlist>
150     <para>
151 osamu 8705 There are several types of people interacting around Debian with different
152     roles.
153 osamu 8651 </para>
154     <itemizedlist>
155 osamu 8705 <listitem>
156     <para>
157     <emphasis role="strong">upstream author</emphasis>: the person who made the
158     original program.
159     </para>
160     </listitem>
161     <listitem>
162     <para>
163     <emphasis role="strong">upstream maintainer</emphasis>: the person who
164     currently maintains the program.
165     </para>
166     </listitem>
167     <listitem>
168     <para>
169     <emphasis role="strong">maintainer</emphasis>: the person making the Debian
170     package of the program.
171     </para>
172     </listitem>
173     <listitem>
174     <para>
175     <emphasis role="strong">sponsor</emphasis>: a person who helps maintainers to
176     upload packages to the official Debian package archive (after checking their
177     contents).
178     </para>
179     </listitem>
180     <listitem>
181     <para>
182     <emphasis role="strong">mentor</emphasis>: a person who helps novice
183     maintainers with packaging etc.
184     </para>
185     </listitem>
186     <listitem>
187     <para>
188     <emphasis role="strong">Debian Developer</emphasis> (DD): a member of
189     the Debian project with full upload rights to the official Debian package
190     archive.
191     </para>
192     </listitem>
193     <listitem>
194     <para>
195     <emphasis role="strong">Debian Maintainer</emphasis> (DM): a person with
196     limited upload rights to the official Debian package archive.
197     </para>
198     </listitem>
199 osamu 8651 </itemizedlist>
200     <para>
201 osamu 8705 Please note that you cannot become an official
202 osamu 8688 <emphasis role="strong">Debian Developer</emphasis> (DD) overnight, because it
203 osamu 8651 takes more than technical skill. Please do not be discouraged by this. If it
204     is useful to others, you can still upload your package either as a
205     <emphasis role="strong">maintainer</emphasis> through a
206     <emphasis role="strong">sponsor</emphasis> or as a
207     <emphasis role="strong">Debian Maintainer</emphasis>.
208     </para>
209     <para>
210     Please note that you do not need to create any new package to become an
211     official Debian Developer. Contributing to the existing packages can provide a
212 osamu 8688 path to becoming an official Debian Developer too. There are many packages
213 taffit-guest 8665 waiting for good maintainers (see <xref linkend="choose"/>).
214 osamu 8651 </para>
215 osamu 8705 <para>
216     Since we focus only on technical aspects of packaging in this document,
217     please refer to the following to learn how Debian functions and how you can get involved.
218     </para>
219     <itemizedlist>
220     <listitem><para><ulink url="&logiciellibre;">Debian: 17 years of Free Software, "do-ocracy", and democracy</ulink> (Introductory slides) </para> </listitem>
221     <listitem><para><ulink url="&debianorghelp;">How can you help Debian?</ulink> (official) </para> </listitem>
222     <listitem><para><ulink url="&debianfaqhelp;">The Debian GNU/Linux FAQ, Chapter 13 - 'Contributing to the Debian Project'</ulink> (semi-official) </para> </listitem>
223     <listitem><para><ulink url="&debianwikihelp;">Debian Wiki, HelpDebian</ulink> (supplemental) </para> </listitem>
224     <listitem><para><ulink url="&nm-do;">Debian New Maintainer site</ulink> (official) </para> </listitem>
225     <listitem><para><ulink url="&debianmentorfaq;">Debian Mentors FAQ</ulink> (supplemental) </para> </listitem>
226     </itemizedlist>
227 osamu 8651 </section>
228 osamu 8601 <section id="needprogs"><title>Programs you need for development</title>
229     <para>
230     Before you start anything, you should make sure that you have properly
231     installed some additional packages needed for development. Note that the list
232     doesn't contain any packages marked <literal>essential</literal> or
233     <literal>required</literal> - we expect that you have those installed already.
234     </para>
235     <para>
236     The following packages come with the standard Debian installation, so you
237     probably have them already (along with any additional packages they depend on).
238     Still, you should check it with <literal>aptitude show
239 osamu 8621 <replaceable>package</replaceable></literal>
240     or with <literal>dpkg -s <replaceable>package</replaceable></literal>.
241 osamu 8601 </para>
242     <para>
243     The most important package to install on your development system is the
244     <systemitem role="package">build-essential</systemitem> package. Once you try
245 osamu 8688 to install that, it will <emphasis>pull in</emphasis> other packages required to
246 osamu 8601 have a basic build environment.
247     </para>
248     <para>
249 osamu 8688 For some types of packages, that is all you will require; however, there is
250 osamu 8601 another set of packages that while not essential for all package builds are
251 osamu 8688 useful to have installed or may be required by your package:
252 osamu 8601 </para>
253     <itemizedlist>
254     <listitem>
255     <para>
256 osamu 8688 <systemitem role="package">autoconf</systemitem>, <systemitem
257     role="package">automake</systemitem>, and <systemitem
258     role="package">autotools-dev</systemitem> - many newer programs use configure
259     scripts and <filename>Makefile</filename> files preprocessed with the help of
260     programs like these (see <literal>info autoconf</literal>, <literal>info
261     automake</literal>). <systemitem role="package">autotools-dev</systemitem>
262     keeps up-to-date versions of certain auto files and has documentation about the
263     best way to use those files.
264 osamu 8601 </para>
265     </listitem>
266     <listitem>
267     <para>
268 osamu 8688 <systemitem role="package">debhelper</systemitem> and
269     <systemitem role="package">dh-make</systemitem> -
270     <systemitem role="package">dh-make</systemitem> is necessary to create
271     the skeleton of our example package, and it will use some of the
272     <systemitem role="package">debhelper</systemitem> tools for creating
273     packages. They are not essential for this purpose, but are
274     <emphasis>highly</emphasis> recommended for new maintainers. It makes
275     the whole process very much easier to start, and to control afterwards.
276     (See <citerefentry> <refentrytitle>dh_make</refentrytitle>
277     <manvolnum>1</manvolnum> </citerefentry>, <citerefentry>
278     <refentrytitle>debhelper</refentrytitle> <manvolnum>1</manvolnum>
279     </citerefentry>.) <footnote><para> There are also some more specialized
280     but similar packages such as
281     <systemitem role="package">dh-make-perl</systemitem>,
282     <systemitem role="package">dh-make-php</systemitem>, etc. </para>
283     </footnote>
284 osamu 8601 </para>
285     </listitem>
286     <listitem>
287     <para>
288 osamu 8688 <systemitem role="package">devscripts</systemitem> - this package contains some
289     useful scripts that can be helpful for maintainers, but they are also
290     not necessary for building packages. Packages recommended and suggested
291     by this package are worth looking into. (See <ulink url="&devscripts-readme;"/>.)
292 osamu 8601 </para>
293     </listitem>
294     <listitem>
295     <para>
296 osamu 8688 <systemitem role="package">fakeroot</systemitem> - this utility lets you
297     emulate being root which is necessary for some parts of the build process.
298     (See <citerefentry> <refentrytitle>fakeroot</refentrytitle>
299     <manvolnum>1</manvolnum> </citerefentry>.)
300 osamu 8601 </para>
301     </listitem>
302     <listitem>
303     <para>
304 osamu 8688 <systemitem role="package">file</systemitem> - this handy program can determine
305     what type a file is. (See <citerefentry> <refentrytitle>file</refentrytitle>
306     <manvolnum>1</manvolnum> </citerefentry>.)
307 osamu 8601 </para>
308     </listitem>
309     <listitem>
310     <para>
311 osamu 8688 <systemitem role="package">gfortran</systemitem> - the GNU Fortran 95 compiler,
312     necessary if your program is written in Fortran. (See <citerefentry>
313     <refentrytitle>gfortran</refentrytitle> <manvolnum>1</manvolnum>
314     </citerefentry>.)
315 osamu 8601 </para>
316     </listitem>
317     <listitem>
318     <para>
319 osamu 8688 <systemitem role="package">git</systemitem> - this package provides a popular
320     version control system designed to handle very large projects with speed and
321     efficiency; it is used for many high profile open source projects, most notably
322     the Linux kernel. (See <citerefentry> <refentrytitle>git</refentrytitle>
323     <manvolnum>1</manvolnum> </citerefentry>,
324     <ulink url="&git-doc;">git Manual</ulink>.)
325 osamu 8601 </para>
326     </listitem>
327     <listitem>
328     <para>
329     <systemitem role="package">gnupg</systemitem> - a tool that enables you to
330     digitally <emphasis>sign</emphasis> packages. This is especially important if
331     you want to distribute it to other people, and you will certainly be doing that
332 osamu 8688 when your work gets included in the Debian distribution. (See <citerefentry>
333     <refentrytitle>gpg</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>.)
334 osamu 8601 </para>
335     </listitem>
336     <listitem>
337     <para>
338     <systemitem role="package">gpc</systemitem> - the GNU Pascal compiler,
339     necessary if your program is written in Pascal. Worthy of note here is
340     <systemitem role="package">fp-compiler</systemitem>, the Free Pascal Compiler,
341 osamu 8688 which is also good at this task. (See <citerefentry>
342 osamu 8601 <refentrytitle>gpc</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>,
343 osamu 8688 <citerefentry> <refentrytitle>ppc386</refentrytitle>
344     <manvolnum>1</manvolnum> </citerefentry>.)
345 osamu 8601 </para>
346     </listitem>
347     <listitem>
348     <para>
349 osamu 8688 <systemitem role="package">lintian</systemitem> - this is the Debian package
350     checker, which can let you know of any common mistakes after you build the
351     package, and explains the errors found. (See <citerefentry>
352     <refentrytitle>lintian</refentrytitle> <manvolnum>1</manvolnum>
353     </citerefentry>,
354     <ulink url="&lintian-doc;">Lintian User's Manual</ulink>.)
355 osamu 8601 </para>
356     </listitem>
357     <listitem>
358     <para>
359 osamu 8688 <systemitem role="package">patch</systemitem> - this very useful utility will
360     take a file containing a difference listing (produced by the
361     <command>diff</command> program) and apply it to the original file, producing a
362     patched version. (See <citerefentry> <refentrytitle>patch</refentrytitle>
363     <manvolnum>1</manvolnum> </citerefentry>.)
364 osamu 8601 </para>
365     </listitem>
366     <listitem>
367     <para>
368 osamu 8688 <systemitem role="package">patchutils</systemitem> - this package contains some
369     utilities to work with patches such as the <command>lsdiff</command>,
370     <command>interdiff</command> and <command>filterdiff</command> commands.
371     </para>
372     </listitem>
373     <listitem>
374     <para>
375 osamu 8601 <systemitem role="package">pbuilder</systemitem> - this package contains
376     programs which are used for creating and maintaining <command>chroot</command>
377     environment. Building Debian package in this <command>chroot</command>
378     environment verifies the proper build dependency and avoid FTBFS (Fails To
379     Build From Source) bugs. (see <citerefentry>
380     <refentrytitle>pbuilder</refentrytitle> <manvolnum>8</manvolnum>
381     </citerefentry> and <citerefentry> <refentrytitle>pdebuild</refentrytitle>
382     <manvolnum>1</manvolnum> </citerefentry>)
383     </para>
384     </listitem>
385     <listitem>
386     <para>
387 osamu 8688 <systemitem role="package">perl</systemitem> - Perl is one of the most used
388     interpreted scripting languages on today's Unix-like systems, often referred to
389     as Unix's Swiss Army Chainsaw. (See <citerefentry>
390     <refentrytitle>perl</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>.)
391 osamu 8601 </para>
392     </listitem>
393     <listitem>
394     <para>
395 osamu 8688 <systemitem role="package">python</systemitem> - Python is another of the most
396     used interpreted scripting languages on the Debian system, combining
397     remarkable power with very clear syntax. (See <citerefentry>
398     <refentrytitle>python</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>.)
399     </para>
400     </listitem>
401     <listitem>
402     <para>
403 osamu 8601 <systemitem role="package">quilt</systemitem> - this package helps you to
404 taffit-guest 8695 manage large numbers of patches by keeping track of the changes each patch
405 osamu 8688 makes. Patches can be applied, un-applied, refreshed, and more. (See
406     <citerefentry> <refentrytitle>quilt</refentrytitle> <manvolnum>1</manvolnum></citerefentry>,
407     <ulink url="&quilt-pdf;">quilt.pdf</ulink>.)
408 osamu 8601 </para>
409     </listitem>
410     <listitem>
411     <para>
412 osamu 8688 <systemitem role="package">xutils-dev</systemitem> - some programs, usually
413     those made for X11, also use these programs to generate
414     <filename>Makefile</filename> files from sets of macro functions. (See
415     <citerefentry> <refentrytitle>imake</refentrytitle> <manvolnum>1</manvolnum>
416     </citerefentry>, <citerefentry> <refentrytitle>xmkmf</refentrytitle>
417     <manvolnum>1</manvolnum> </citerefentry>.)
418 osamu 8601 </para>
419     </listitem>
420     </itemizedlist>
421 osamu 8651 <para>
422     The short descriptions that are given above only serve to introduce you to what
423     each package does. Before continuing please thoroughly read the documentation
424 osamu 8715 of each program including ones installed through the package dependency such as
425     <command>make</command>, at least, for the standard usage. It may seem like heavy
426 osamu 8651 going now, but later on you'll be <emphasis>very</emphasis> glad you read it.
427     </para>
428     <para>
429 osamu 8688 If you have specific questions later, I would suggest re-reading the documents
430     mentioned above. Since this is a tutorial, I have intentionally skipped
431 osamu 8651 details and provided only pointers to keep it simple.
432     </para>
433 osamu 8646 </section>
434 osamu 8688 <section id="needdocs"><title>Documentation needed for development</title>
435 osamu 8601 <para>
436     The following is the <emphasis>very important</emphasis> documentation which
437     you should read along with this document:
438     </para>
439     <itemizedlist>
440     <listitem>
441     <para>
442 osamu 8688 <ulink url="&autotools-tutorial;">Autotools
443     Tutorial</ulink> provides a very good tutorial for <ulink url="&gnu-build-system;">the GNU Build System known
444 taffit-guest 8695 as the GNU Autotools</ulink> whose most important components are Autoconf,
445     Automake, Libtool, and gettext.
446 osamu 8688 </para>
447     </listitem>
448     <listitem>
449     <para>
450 osamu 8628 <systemitem role="package">debian-policy</systemitem> - the <ulink url="&debian-policy;">Debian Policy
451 osamu 8601 Manual</ulink> includes explanations of the structure and contents of the
452 osamu 8688 Debian archive, several OS design issues, the <ulink url="&fhs;">Filesystem Hierarchy Standard</ulink>
453     (FHS, which says where each file and directory should be), etc. For you, the most
454 osamu 8601 important thing is that it describes requirements that each package must
455 osamu 8642 satisfy to be included in the distribution (see the local copies of
456     <ulink url="&policy-pdf;">policy.pdf</ulink> and <ulink url="&fhs-pdf;">fhs-2.3.pdf</ulink>).
457 osamu 8601 </para>
458     </listitem>
459     <listitem>
460     <para>
461 osamu 8642 <systemitem role="package">developers-reference</systemitem>
462     - the <ulink url="&developers-reference;">Debian Developer's Reference</ulink>
463     describes all matters not specifically about the technical
464 osamu 8601 details of packaging, like the structure of the archive, how to rename, orphan,
465 osamu 8688 or adopt packages, how to do NMUs, how to manage bugs, best packaging practices,
466     when and where to upload etc. (See the local copy of
467     <ulink url="&developers-refpdf;">developers-reference.pdf</ulink>.)
468 osamu 8601 </para>
469     </listitem>
470     <listitem>
471     <para>
472     <systemitem role="package">gnu-standards</systemitem> - this package contains
473 osamu 8639 two pieces of documentation from the GNU project:
474     <ulink url="&gnu-standard;">GNU Coding Standards</ulink>, and
475     <ulink url="&gnu-maintainer;">Information for Maintainers of GNU Software</ulink>.
476     Although Debian does not require these to
477 osamu 8688 be followed, these are still helpful as guidelines and common sense.
478     (See the local copies of
479 osamu 8639 <ulink url="&gnu-standard-pdf;">standards.pdf</ulink> and
480 osamu 8688 <ulink url="&gnu-maintainer-pdf;">maintain.pdf</ulink>.)
481 osamu 8601 </para>
482     </listitem>
483     </itemizedlist>
484     <para>
485 osamu 8688 If this document contradicts any of the documents mentioned above, they
486     are correct. Please file a bug report on the
487 osamu 8642 <systemitem role="package">maint-guide</systemitem> package using
488     <command>reportbug</command>.
489     </para>
490 osamu 8601 </section>
491     <section id="helpme"><title>Where to ask for help</title>
492     <para>
493 osamu 8621 Before you decide to ask your question in some public place, please read the fine documentation.
494 osamu 8601 </para>
495 osamu 8621 <itemizedlist>
496     <listitem>
497 osamu 8601 <para>
498 taffit-guest 8665 files in <filename>/usr/share/doc/<replaceable>package</replaceable></filename> for all pertinent packages
499 osamu 8621 </para>
500     </listitem>
501     <listitem>
502     <para>
503 osamu 8642 contents of <literal><command>man</command> <replaceable>command</replaceable></literal> for all pertinent commands
504 osamu 8621 </para>
505     </listitem>
506     <listitem>
507     <para>
508 osamu 8642 contents of <literal><command>info</command> <replaceable>command</replaceable></literal> for all pertinent commands
509 osamu 8621 </para>
510     </listitem>
511     <listitem>
512     <para>
513 osamu 8636 contents of <ulink url="&debian-mentors-ldo;">debian-mentors@lists.debian.org mailing list archive</ulink>
514 osamu 8621 </para>
515     </listitem>
516 osamu 8636 <listitem>
517     <para>
518     contents of <ulink url="&debian-devel-ldo;">debian-devel@lists.debian.org mailing list archive</ulink>
519     </para>
520     </listitem>
521 osamu 8621 </itemizedlist>
522     <para>
523 osamu 8688 You can use web search engines more effectively by including search strings
524 osamu 8642 such as <literal>site:lists.debian.org</literal> to limit the domain.
525 osamu 8636 </para>
526     <para>
527 osamu 8688 Making a small test package is a good way to learn details of packaging.
528 osamu 8601 Inspecting existing well maintained packages is the best way to learn how other
529     people make packages.
530     </para>
531     <para>
532     If you still have questions about packaging that you couldn't find answers to
533 osamu 8636 in the available documentation and web resources, you can ask them interactively.
534     </para>
535     <itemizedlist>
536     <listitem>
537     <para>
538     <ulink url="&debian-mentors-ldo;">debian-mentors@lists.debian.org mailing list</ulink>. (This mailing list is for the novice.)
539     </para>
540     </listitem>
541     <listitem>
542     <para>
543     <ulink url="&debian-devel-ldo;">debian-devel@lists.debian.org mailing list</ulink>. (This mailing list is for the expert.)
544     </para>
545     </listitem>
546     <listitem>
547     <para>
548     <ulink url="&irc-debian;">IRC</ulink> such as <literal>#debian-mentors</literal>.
549     </para>
550     </listitem>
551     </itemizedlist>
552     <para>
553 osamu 8652 The more experienced Debian developers will gladly help you, if you ask
554     properly after making your required efforts.
555 osamu 8601 </para>
556     <para>
557     When you receive a bug report (yes, actual bug reports!), you will know that it
558 osamu 8636 is time for you to dig into the
559     <ulink url="&bts;">Debian Bug Tracking System</ulink>
560     and read the documentation there, to be able to
561     deal with the reports efficiently. I highly recommend reading the
562 osamu 8688 <ulink url="&devref-bug-handling;">Debian Developer's Reference, 5.8:
563     "Handling bugs"</ulink>.
564 osamu 8601 </para>
565     <para>
566     Even if it all worked well, it's time to start praying. Why? Because in just
567     a few hours (or days) users from all around the world will start to use your
568     package, and if you made some critical error you'll get mailbombed by numerous
569     angry Debian users... Just kidding. :-)
570     </para>
571     <para>
572     Relax and be ready for bug reports, because there is a lot more work to be done
573     before your package will be fully in line with Debian policies and its best
574     practice guidelines (once again, read the <emphasis>real
575     documentation</emphasis> for details). Good luck!
576     </para>
577     </section>
578     </chapter>
579     <chapter id="first"><title>First steps</title>
580     <para>
581 osamu 8703 Let's start by creating a package of your own (or, even better,
582     adopting an existing one).
583 osamu 8601 </para>
584 osamu 8712 <section id="workflow"><title>Workflow of the Debian package building</title>
585 osamu 8705 <para>
586 osamu 8709 If you are making a Debian package with an upstream program,
587 osamu 8712 typical workflow of the Debian package building involves generating several
588 osamu 8707 specifically named files for each step as the following.
589 osamu 8705 </para>
590     <itemizedlist>
591     <listitem>
592     <para>We obtain an upstream program file usually in a compressed tar format.</para>
593     <itemizedlist>
594     <listitem><literal><replaceable>programname</replaceable>-<replaceable>version</replaceable>.tar.gz</literal></listitem>
595     </itemizedlist>
596     </listitem>
597     <listitem>
598     <para>
599 osamu 8709 We create a non-native Debian source package in the "3.0 (quilt)" format, which refers to the set of input files for
600     the Debian package building, by adding Debian package modifications to the upstream program under the <filename>debian</filename> directory.
601 osamu 8705 </para>
602     <itemizedlist>
603     <listitem><literal><replaceable>programname</replaceable>_<replaceable>version</replaceable>.orig.tar.gz</literal></listitem>
604 osamu 8707 <listitem><literal><replaceable>programname</replaceable>_<replaceable>version</replaceable>-<replaceable>revision</replaceable>.debian.tar.gz</literal>
605 osamu 8709 <footnote><para>For the older non-native Debian source package in the "1.0" format,
606 osamu 8707 <literal><replaceable>programname</replaceable>_<replaceable>version</replaceable>-<replaceable>revision</replaceable>.diff.gz</literal>
607 osamu 8709 is used instead. </para></footnote></listitem>
608 osamu 8705 <listitem><literal><replaceable>programname</replaceable>_<replaceable>version</replaceable>-<replaceable>revision</replaceable>.dsc</literal></listitem>
609     </itemizedlist>
610     </listitem>
611     <listitem>
612     <para>
613     We build Debian binary packages, which are ordinary installable package files in <literal>.deb</literal> format (or <literal>.udeb</literal> format, used by the Debian Installer), from the Debian source package.
614     </para>
615     <itemizedlist>
616 osamu 8708 <listitem><literal><replaceable>programname</replaceable>_<replaceable>version</replaceable>-<replaceable>revision</replaceable>_<replaceable>arch</replaceable>.deb</literal></listitem>
617 osamu 8705 </itemizedlist>
618     </listitem>
619     </itemizedlist>
620     <para>
621 osamu 8715 Please note that the character separating
622     <literal><replaceable>programname</replaceable></literal> and
623     <literal><replaceable>version</replaceable></literal> was changed from
624     <literal>-</literal> (hyphen) to <literal>_</literal> (underscore).
625     </para>
626     <para>
627 osamu 8709 If you are making a Debian specific package without an upstream program instead,
628 osamu 8712 typical workflow of the Debian package building is simpler.
629 osamu 8709 </para>
630     <itemizedlist>
631     <listitem>
632     <para>
633     We create a native Debian source package in the "3.0 (native)" format using a compressed tar format in which required files under the <filename>debian</filename> directory are also included.
634     </para>
635     <itemizedlist>
636     <listitem><literal><replaceable>programname</replaceable>_<replaceable>version</replaceable>.tar.gz</literal></listitem>
637     <listitem><literal><replaceable>programname</replaceable>_<replaceable>version</replaceable>.dsc</literal></listitem>
638     </itemizedlist>
639     </listitem>
640     <listitem>
641     <para>
642     We build Debian binary packages from the native Debian source package.
643     </para>
644     <itemizedlist>
645     <listitem><literal><replaceable>programname</replaceable>_<replaceable>version</replaceable>_<replaceable>arch</replaceable>.deb</literal></listitem>
646     </itemizedlist>
647     </listitem>
648     </itemizedlist>
649     <para>
650 osamu 8707 Here,
651     <literal><replaceable>programname</replaceable></literal> part of the file name is substituted by the
652 osamu 8705 <emphasis role="strong">package name</emphasis>,
653 osamu 8707 <literal><replaceable>version</replaceable></literal> part of it is substituted by the
654 osamu 8708 <emphasis role="strong">upstream version</emphasis>,
655 osamu 8707 <literal><replaceable>revision</replaceable></literal> part of it is substituted by the
656 osamu 8708 <emphasis role="strong">Debian revision</emphasis>,
657     <literal><replaceable>arch</replaceable></literal> part of it is substituted by the
658     <emphasis role="strong">package architecture</emphasis>.
659 osamu 8706 <footnote><para>
660     The <emphasis role="strong">package name</emphasis>, <emphasis
661     role="strong">upstream version</emphasis>, and <emphasis role="strong">Debian
662     revision</emphasis> must be adjusted to comply with the Debian Policy Manual:
663     <ulink url="&policy-source;">5.6.1 Source</ulink>,
664 osamu 8709 <ulink url="&policy-package;">5.6.7 Package</ulink>, and
665     <ulink url="&policy-version;">5.6.12 Version</ulink>.
666     The <emphasis role="strong">package architecture</emphasis> follows the
667     Debian Policy Manual: <ulink url="&policy-architecture;">5.6.8 Architecture</ulink>
668     and is automatically assigned by the package build process.</para></footnote>
669 osamu 8705 </para>
670 osamu 8706 <para>
671     You should chose the <emphasis role="strong">package name</emphasis>
672     which consists only of lower case letters (<literal>a-z</literal>), digits
673     (<literal>0-9</literal>), plus (<literal>+</literal>) and minus
674     (<literal>-</literal>) signs, and periods (<literal>.</literal>). They must be
675     at least two characters long and must start with an alphanumeric character.
676     </para>
677     <para>
678     You should use the <emphasis role="strong">upstream version</emphasis> and the
679     <emphasis role="strong">Debian revision</emphasis> which consists only of
680     alphanumerics (<literal>a-zA-Z0-9</literal>), plus (<literal>+</literal>),
681     tilde (<literal>~</literal>), and periods (<literal>.</literal>). They must
682 osamu 8709 start with a digit (<literal>0-9</literal>). <footnote><para>This stricter
683     rule should help you avoid confusing file names.</para></footnote>
684 osamu 8706 </para>
685 osamu 8707 <para>
686     In the following, each step of this is explained with detailed examples.
687     </para>
688     </section>
689 osamu 8601 <section id="choose"><title>Choose your program</title>
690     <para>
691     You have probably chosen the package you want to create. The first thing you
692     need to do is check if the package is in the distribution archive already by
693 osamu 8636 using the following.
694 osamu 8601 </para>
695 osamu 8636 <itemizedlist>
696     <listitem>
697     <para>the <command>aptitude</command> command</para>
698     </listitem>
699     <listitem>
700 osamu 8703 <para>the <ulink url="&packages-do;">Debian packages</ulink> web page</para>
701 osamu 8636 </listitem>
702     <listitem>
703 osamu 8703 <para>the <ulink url="&packages-qa-do;">Debian Package Tracking System</ulink> web page</para>
704 osamu 8636 </listitem>
705     </itemizedlist>
706 osamu 8601 <para>
707     If the package already exists, well, install it! :-) If it happens to be
708 osamu 8703 <emphasis role="strong">orphaned</emphasis> (that is, if its
709     maintainer is set to <ulink url="&qa-do;">Debian QA Group</ulink>),
710     you may be able to pick it up if it's still available. You may also
711     adopt a package whose maintainer has filed a Request for Adoption
712 osamu 8676 (<emphasis role="strong">RFA</emphasis>).<footnote> <para>See
713 osamu 8703 <ulink url="&devref-adopt;">Debian Developer's Reference 5.9.5.
714     "Adopting a package"</ulink>.</para> </footnote>
715 osamu 8601 </para>
716     <para>
717 osamu 8648 There are several package ownership status resources.
718 osamu 8601 </para>
719     <itemizedlist>
720     <listitem>
721 osamu 8636 <para> <ulink url="&wnpp-do;">Work-Needing and Prospective Packages</ulink> </para>
722 osamu 8601 </listitem>
723     <listitem>
724 taffit-guest 8665 <para> <ulink url="&wnpp-bts;">Debian Bug report logs: Bugs in pseudo-package <systemitem role="package">wnpp</systemitem> in <literal>unstable</literal></ulink> </para>
725 osamu 8601 </listitem>
726     <listitem>
727 osamu 8636 <para> <ulink url="&wnpp-dn;">Debian Packages that Need Lovin'</ulink> </para>
728 osamu 8601 </listitem>
729 osamu 8636 <listitem>
730 taffit-guest 8665 <para> <ulink url="&wnpp-debtags;">Browse <systemitem role="package">wnpp</systemitem> bugs based on debtags</ulink> </para>
731 osamu 8636 </listitem>
732 osamu 8601 </itemizedlist>
733     <para>
734     As a side note, it's important to point out that Debian already has packages
735     for most kinds of programs, and the number of packages already in the Debian
736     archive is much larger than that of contributors with upload rights. Thus,
737     contributions to packages already in the archive are far more appreciated (and
738     more likely to receive sponsorship) by other developers <footnote><para> Having
739 osamu 8703 said that, there will of course always be new programs that are worth
740     packaging. </para> </footnote>. You can contribute in various ways.
741 osamu 8601 </para>
742     <itemizedlist>
743     <listitem>
744     <para>
745     taking over orphaned, yet actively used, packages
746     </para>
747     </listitem>
748     <listitem>
749     <para>
750 osamu 8628 joining <ulink url="&teams;">packaging teams</ulink>
751 osamu 8601 </para>
752     </listitem>
753     <listitem>
754     <para>
755     triaging bugs of very popular packages
756     </para>
757     </listitem>
758     <listitem>
759     <para>
760 osamu 8636 preparing <ulink url="&devref-nmu;">QA or NMU uploads</ulink>
761 osamu 8601 </para>
762     </listitem>
763     </itemizedlist>
764     <para>
765     If you are able to adopt the package, get the sources (with something like
766     <literal>apt-get source <replaceable>packagename</replaceable></literal>) and
767     examine them. This document unfortunately doesn't include comprehensive
768     information about adopting packages. Thankfully you shouldn't have a hard time
769     figuring out how the package works since someone has already done the initial
770 osamu 8703 setup for you. Keep reading, though; a lot of the advice below will still be
771 osamu 8601 applicable for your case.
772     </para>
773     <para>
774     If the package is new, and you decide you'd like to see it in Debian, proceed
775     as follows:
776     </para>
777     <itemizedlist>
778     <listitem>
779     <para>
780 osamu 8703 First, you must know that the program works, and have tried it for some time to
781 osamu 8601 confirm its usefulness.
782     </para>
783     </listitem>
784     <listitem>
785     <para>
786 osamu 8703 You must check that no one else is already working on the package on the
787 osamu 8636 <ulink url="&wnpp-do;">Work-Needing and Prospective Packages</ulink> site.
788     If no one else is working on it, file an ITP (Intent
789 osamu 8601 To Package) bug report to the <systemitem role="package">wnpp</systemitem>
790     pseudo-package using <command>reportbug</command>. If someone's already on it,
791     contact them if you feel you need to. If not - find another interesting
792 osamu 8703 program that nobody is maintaining.
793 osamu 8601 </para>
794     </listitem>
795     <listitem>
796     <para>
797 osamu 8703 The software <emphasis role="strong">must have a license</emphasis>.
798 osamu 8601 </para>
799     <itemizedlist>
800     <listitem>
801     <para>
802 osamu 8703 For the <literal>main</literal> section, Debian Policy requires it
803     <emphasis role="strong">to be fully compliant with the Debian Free Software
804     Guidelines</emphasis> (<ulink url="&dfsg;">DFSG</ulink>)
805     and <emphasis role="strong">not to require a package outside of
806     <literal>main</literal></emphasis> for compilation or execution. This
807     is the desired case.
808 osamu 8601 </para>
809     </listitem>
810     <listitem>
811     <para>
812 osamu 8703 For the <literal>contrib</literal> section, it must comply with the
813 osamu 8601 DFSG but it may require a package outside of <literal>main</literal> for
814     compilation or execution.
815     </para>
816     </listitem>
817     <listitem>
818     <para>
819 osamu 8703 For the <literal>non-free</literal> section, it may be non-compliant
820     with the DFSG but it <emphasis role="strong">must be distributable</emphasis>.
821 osamu 8601 </para>
822     </listitem>
823     </itemizedlist>
824     <para>
825 osamu 8628 If you are unsure about where it should go, post the license text on <ulink url="&debian-legal-ldo;">debian-legal@lists.debian.org</ulink>
826 osamu 8601 and ask for advice.
827     </para>
828     </listitem>
829     <listitem>
830     <para>
831 osamu 8703 The program certainly should <emphasis role="strong">not</emphasis> run setuid
832     root, or even better, it shouldn't need to be setuid or setgid to anything.
833 osamu 8601 </para>
834     </listitem>
835     <listitem>
836     <para>
837 osamu 8703 The program should not be a daemon, or go in an
838     <filename>*/sbin</filename> directory, or open a port as root.
839 osamu 8601 </para>
840     </listitem>
841     <listitem>
842     <para>
843 osamu 8703 The program should be in binary executable form; libraries are harder to handle.
844 osamu 8601 </para>
845     </listitem>
846     <listitem>
847     <para>
848 osamu 8703 The program should be well documented and its code needs to be understandable
849 osamu 8601 (i.e. not obfuscated).
850     </para>
851     </listitem>
852     <listitem>
853     <para>
854 osamu 8703 You should contact the program's author(s) to check if they agree with packaging it
855     and are amicable to Debian. It is important to be able to consult with the author(s)
856     in case of any problems with the program, so don't try to package
857     unmaintained software.
858 osamu 8601 </para>
859     </listitem>
860     </itemizedlist>
861     <para>
862 osamu 8703 Of course, these are just safety measures, and intended to save you from
863     enraging users if you do something wrong in some setuid daemon... When you gain
864     more experience in packaging, you'll be able to package such software.
865 osamu 8601 </para>
866     </section>
867     <section id="getit"><title>Get the program, and try it out</title>
868     <para>
869 osamu 8703 So the first thing to do is to find and download the original source code.
870     Presumably you already have the source file that you picked up at the
871 osamu 8601 author's homepage. Sources for free Unix programs usually come in
872 osamu 8703 <command>tar</command>+<command>gzip</command> format with the extension
873 osamu 8709 <filename>.tar.gz</filename>,
874 osamu 8703 <command>tar</command>+<command>bzip2</command> format with the extension
875 osamu 8709 <filename>.tar.bz2</filename>, or
876     <command>tar</command>+<command>xz</command> format with the extension
877 osamu 8715 <filename>.tar.xz</filename>. These usually contain a directory called
878 osamu 8601 <filename><replaceable>programname</replaceable>-<replaceable>version</replaceable></filename>
879 osamu 8703 with all the sources inside.
880 osamu 8601 </para>
881     <para>
882 osamu 8703 If the latest version of the source is available through a VCS such as Git,
883     Subversion, or CVS, you need to get it with <literal>git
884 osamu 8621 clone</literal>, <literal>svn co</literal>, or <literal>cvs co</literal> and
885 osamu 8703 repack it into <command>tar</command>+<command>gzip</command> format yourself
886     by using the <literal>--exclude-vcs</literal> option.
887 osamu 8601 </para>
888     <para>
889     If your program's source comes as some other sort of archive (for instance, the
890     filename ends in <filename>.Z</filename> or
891     <filename>.zip</filename><footnote><para> You can identify the archive format
892     using the <command>file</command> command when the file extension is not
893 osamu 8703 enough. </para> </footnote>), you should also unpack it with the
894     appropriate tools and repack it.
895 osamu 8601 </para>
896     <para>
897 osamu 8703 As an example, I'll use a program called <command>gentoo</command>, a GTK+
898 osamu 8648 file manager.
899 osamu 8703 <footnote><para> This program is already packaged. The
900 osamu 8648 <ulink url="&gentoo-package;">current version</ulink> uses Autotools as its
901 osamu 8703 build structure and is substantially different from the following examples,
902     which were based on version 0.9.12.</para>
903 osamu 8648 </footnote>
904 osamu 8601 </para>
905     <para>
906     Create a subdirectory under your home directory named
907     <filename>debian</filename> or <filename>deb</filename> or anything you find
908     appropriate (e.g. just <filename>~/gentoo</filename> would do fine in this
909     case). Place the downloaded archive in it, and extract it (with <literal>tar
910 osamu 8703 xzf gentoo-0.9.12.tar.gz</literal>). Make sure there are no warning
911     messages, even <emphasis>irrelevant</emphasis> ones, because other
912     people's unpacking tools may or may not ignore these anomalies, so they
913     may have problems unpacking them. Your shell commandline may look
914     something like this:
915 osamu 8601 </para>
916     <screen>
917     $ mkdir ~/gentoo ; cd ~/gentoo
918     $ wget http://<replaceable>www.example.org</replaceable>/gentoo-0.9.12.tar.gz
919     $ tar xvzf gentoo-0.9.12.tar.gz
920     $ ls -F
921     gentoo-0.9.12/
922     gentoo-0.9.12.tar.gz
923     </screen>
924     <para>
925     Now you have another subdirectory, called <filename>gentoo-0.9.12</filename>.
926     Change to that directory and <emphasis>thoroughly</emphasis> read the provided
927     documentation. Usually there are files named <filename>README*</filename>,
928     <filename>INSTALL*</filename>, <filename>*.lsm</filename> or
929 osamu 8703 <filename>*.html</filename>. You must find instructions on how to
930 osamu 8601 compile and install the program (most probably they'll assume you want to
931 osamu 8703 install to the <filename>/usr/local/bin</filename> directory; you won't be doing
932 taffit-guest 8665 that, but more on that later in <xref linkend="destdir"/>).
933 osamu 8601 </para>
934     <para>
935 osamu 8703 Simple programs come with a <filename>Makefile</filename> and can
936     be compiled just by invoking <literal>make</literal>.<footnote><para>
937 osamu 8621 Many modern programs come with a script <filename>configure</filename> which
938 osamu 8703 when executed creates a <filename>Makefile</filename> customized for
939     your system.</para></footnote> Some of them support
940     <literal>make check</literal>, which runs included self-tests. Installation
941 osamu 8601 to the destination directories is usually done with <literal>make
942     install</literal>.
943     </para>
944     <para>
945     Now try to compile and run your program, to make sure it works properly and
946     doesn't break something else while it's installing or running.
947     </para>
948     <para>
949     Also, you can usually run <literal>make clean</literal> (or better
950     <literal>make distclean</literal>) to clean up the build directory. Sometimes
951     there's even a <literal>make uninstall</literal> which can be used to remove
952     all the installed files.
953     </para>
954     </section>
955 osamu 8709 <section id="portable"><title>Popular portable build systems</title>
956 osamu 8601 <para>
957 osamu 8714 A lot of free software programs are written in the <ulink url="&c-program;">C</ulink> and
958 osamu 8636 <ulink url="&cxx;">C++</ulink> languages. Many of
959 osamu 8601 these use Autotools or CMake to make them portable across different platforms.
960 osamu 8703 These tools are used to generate the <filename>Makefile</filename> and other
961     required source files. Then, such programs are built using the usual
962     <literal>make; make install</literal>.
963 osamu 8601 </para>
964     <para>
965 osamu 8703 <ulink url="&gnu-build-system;">Autotools</ulink> is the GNU build
966     system comprising <ulink url="&autoconf;">Autoconf</ulink>,
967     <ulink url="&automake;">Automake</ulink>,
968     <ulink url="&libtool;">Libtool</ulink>, and
969     <ulink url="&gettext;">gettext</ulink>. You can recognize
970 osamu 8601 such sources by the <filename>configure.ac</filename>,
971     <filename>Makefile.am</filename>, and <filename>Makefile.in</filename> files.
972 osamu 8703 <footnote><para> See the <ulink url="&autotools-tutorial;">Autotools Tutorial</ulink>
973 osamu 8639 and <ulink url="&autotools-readme;"/>. </para> </footnote>
974 osamu 8601 </para>
975     <para>
976 osamu 8703 The first step of the Autotools workflow is usually that upstream runs
977     <literal>autoreconf -i -f</literal> in the source directory and
978     distributes the generated files along with the source.
979 osamu 8601 </para>
980     <screen>
981     configure.ac-----+-&gt; autoreconf -+-&gt; configure
982     Makefile.am -----+ | +-&gt; Makefile.in
983     src/Makefile.am -+ | +-&gt; src/Makefile.in
984     | +-&gt; config.h.in
985     automake
986     aclocal
987     aclocal.m4
988     autoheader
989     </screen>
990     <para>
991     Editing <filename>configure.ac</filename> and <filename>Makefile.am</filename>
992     files requires some knowledge of <command>autoconf</command> and
993     <command>automake</command>. See <literal>info autoconf</literal> and
994     <literal>info automake</literal>.
995     </para>
996     <para>
997 osamu 8703 The second step of the Autotools workflow is usually that the user obtains this
998 osamu 8601 distributed source and runs <literal>./configure &amp;&amp; make</literal> in
999 osamu 8703 the source directory to compile the program into a
1000 osamu 8601 <command><replaceable>binary</replaceable></command>.
1001     </para>
1002     <screen>
1003     Makefile.in -----+ +-&gt; Makefile -----+-&gt; make -&gt; <replaceable>binary</replaceable>
1004     src/Makefile.in -+-&gt; ./configure -+-&gt; src/Makefile -+
1005     config.h.in -----+ +-&gt; config.h -----+
1006     |
1007     config.status -+
1008     config.guess --+
1009     </screen>
1010     <para>
1011 osamu 8703 You can change many things in the <filename>Makefile</filename>; for
1012     instance you can change the default location for file installation
1013     using the option <command>./configure --prefix=/usr</command>.
1014 osamu 8601 </para>
1015     <para>
1016     Although it is not required, updating the <filename>configure</filename> and
1017 osamu 8703 other files with <literal>autoreconf -i -f</literal> may improve
1018 osamu 8601 the compatibility of the source.
1019 osamu 8646 <footnote><para>You can automate this by using
1020 taffit-guest 8665 <systemitem role="package">dh-autoreconf</systemitem> package.
1021 osamu 8646 See <xref linkend="customrules"/>.</para></footnote>
1022 osamu 8601 </para>
1023     <para>
1024 osamu 8636 <ulink url="&cmake;">CMake</ulink> is an alternative
1025 osamu 8703 build system. You can recognize such sources by the
1026 osamu 8601 <filename>CMakeLists.txt</filename> file.
1027     </para>
1028     </section>
1029     <section id="namever"><title>Package name and version</title>
1030     <para>
1031     You should start packaging with a completely clean (pristine) source directory,
1032     or simply with freshly unpacked sources.
1033     </para>
1034     <para>
1035     For the package to be built correctly, you must make the program's original
1036     name lowercase (if it isn't already), and you should move the source directory
1037     to
1038     <filename><replaceable>packagename</replaceable>-<replaceable>version</replaceable></filename>.
1039     </para>
1040     <para>
1041     If the program name consists of more than one word, contract them to one word,
1042 osamu 8703 or make an abbreviation. For example, a package of the program "John's little
1043     editor for X" might be named <systemitem role="package">johnledx</systemitem>, or
1044 osamu 8601 <systemitem role="package">jle4x</systemitem>, or whatever you decide, as long
1045 osamu 8703 as it's under some reasonable length limit, e.g. 20 characters.
1046 osamu 8601 </para>
1047     <para>
1048     Also check for the exact version of the program (to be included in the package
1049 osamu 8703 version). If this piece of software is not numbered with versions like
1050 osamu 8601 <literal>X.Y.Z</literal>, but with some kind of date, feel free to use that
1051     date as the version number, as long as newer version numbers will look larger.
1052 osamu 8703 While it is best to use the same version numbering as upstream, if it is
1053 osamu 8601 in the format of <literal>09Oct23</literal> you may need to convert it to
1054     <literal>YYYYMMDD</literal> format, which would be <literal>20091023</literal>,
1055 osamu 8703 to ensure that <command>dpkg</command> sees later versions as
1056     upgrades.<footnote><para> Version strings can be compared with <literal>dpkg
1057 osamu 8601 --compare-versions <replaceable>ver1</replaceable>
1058     <replaceable>op</replaceable> <replaceable>ver2</replaceable></literal>. See
1059     <citerefentry> <refentrytitle>dpkg</refentrytitle> <manvolnum>1</manvolnum>
1060 osamu 8703 </citerefentry>. </para> </footnote>
1061 osamu 8601 </para>
1062     <para>
1063     Some programs won't be numbered at all, in which case you should contact the
1064     upstream maintainer to see if they've got some other revision-tracking method.
1065     </para>
1066     </section>
1067     <section id="dh-make"><title>Initial Debian package</title>
1068     <para>
1069 osamu 8703 Set up the shell environment variables <literal>$DEBEMAIL</literal> and
1070     <literal>$DEBFULLNAME</literal> so that various Debian maintenance
1071     tools recognize your email address and name to use for packages.<footnote><para> The
1072 osamu 8601 following text assumes you are using Bash as your login shell. If you use
1073 osamu 8703 some other login shell such as Z shell, use their corresponding
1074     configuration files instead of <filename>~/.bashrc</filename>. </para> </footnote>.
1075 osamu 8601 </para>
1076     <screen>
1077     $ cat &gt;&gt;~/.bashrc &lt;&lt;EOF
1078     DEBEMAIL=your.email.address@example.org
1079     DEBFULLNAME=Firstname Lastname
1080     export DEBEMAIL DEBFULLNAME
1081     EOF
1082     </screen>
1083     <para>
1084 osamu 8703 You can create an initial Debian package by issuing the
1085     <command>dh_make</command> command as follows.
1086 osamu 8601 </para>
1087     <screen>
1088     $ . ~/.bashrc
1089     $ cd ~/gentoo/gentoo-0.9.12
1090     $ dh_make -f ../gentoo-0.9.12.tar.gz
1091     </screen>
1092     <para>
1093     Of course, replace the filename with the name of your original source archive.
1094     <footnote><para> If the upstream source provides the
1095     <filename>debian</filename> directory and its contents, run the
1096 osamu 8703 <command>dh_make</command> command with the extra option
1097     <literal>--addmissing</literal>. The new source <literal>3.0 (quilt)</literal> format is
1098     robust enough not to break even for these packages. You may need to update the contents
1099 osamu 8601 provided by the upstream for your Debian package. </para> </footnote> See
1100     <citerefentry> <refentrytitle>dh_make</refentrytitle> <manvolnum>1</manvolnum>
1101     </citerefentry> for details.
1102     </para>
1103     <para>
1104 osamu 8703 You should see some output asking you what sort of package you want
1105 osamu 8601 to create. Gentoo is a single binary package - it creates only one binary, and
1106 osamu 8703 thus one <filename>.deb</filename> file - so we will select the first option
1107     (with the <literal>s</literal> key), check the information on the screen, and
1108 osamu 8601 confirm by pressing <literal><replaceable>ENTER</replaceable></literal>.
1109 osamu 8703 <footnote><para> There are several choices here: <literal>s</literal> for Single
1110     binary, <literal>i</literal> for arch-Independent, <literal>m</literal> for
1111 osamu 8601 Multiple binary, <literal>l</literal> for Library, <literal>k</literal> for
1112 osamu 8703 Kernel module, <literal>n</literal> for kernel patch, and <literal>b</literal>
1113 osamu 8601 for <systemitem role="package">cdbs</systemitem>. This document focuses on the
1114 osamu 8703 use of the <command>dh</command> command (from the package
1115     <systemitem role="package">debhelper</systemitem>) to create a single-binary package,
1116     but also touches on how to use it for arch-independent or
1117     multiple-binary packages. The package
1118     <systemitem role="package">cdbs</systemitem> offers an alternative packaging script
1119     infrastructure to the <command>dh</command> command and is outside the scope of
1120 osamu 8601 this document. </para> </footnote>
1121     </para>
1122     <para>
1123 osamu 8703 This execution of <command>dh_make</command> creates a copy of the upstream
1124     tarball as <filename>gentoo_0.9.12.orig.tar.gz</filename> in the
1125 osamu 8601 parent directory to accommodate the creation of the non-native Debian source
1126 osamu 8703 package with the name <filename>debian.tar.gz</filename> later.
1127 osamu 8601 </para>
1128     <screen>
1129     $ cd ~/gentoo ; ls -F
1130     gentoo-0.9.12/
1131     gentoo-0.9.12.tar.gz
1132     gentoo_0.9.12.orig.tar.gz
1133     </screen>
1134     <para>
1135 osamu 8703 Please note two key features of this filename
1136     <filename>gentoo_0.9.12.orig.tar.gz</filename>:
1137 osamu 8601 </para>
1138     <itemizedlist>
1139     <listitem>
1140     <para>
1141 osamu 8703 Package name and version are separated by the character <literal>_</literal>
1142 osamu 8601 (underscore).
1143     </para>
1144     </listitem>
1145     <listitem>
1146     <para>
1147 osamu 8703 The string <filename>.orig</filename> is inserted before the
1148 osamu 8601 <filename>.tar.gz</filename>.
1149     </para>
1150     </listitem>
1151     </itemizedlist>
1152     <para>
1153     You should also notice that many template files are created in the source under
1154 osamu 8703 the <filename>debian</filename> directory. These will be explained in
1155     <xref linkend="dreq"/> and <xref linkend="dother"/>. You should also understand
1156     that packaging cannot be a fully automated process. You will need to modify the upstream
1157     source for Debian (see <xref linkend="modify"/>). After this, you need to
1158     use the proper methods for building Debian packages (<xref linkend="build"/>),
1159     testing them (<xref linkend="checkit"/>), and uploading them (<xref linkend="upload"/>).
1160     All the steps will be explained.
1161 osamu 8601 </para>
1162     <para>
1163     Once again, as a new maintainer you are discouraged from creating complicated
1164 osamu 8703 packages, e.g.:
1165 osamu 8601 </para>
1166     <itemizedlist>
1167     <listitem>
1168     <para>
1169 osamu 8703 multiple binary packages;
1170 osamu 8601 </para>
1171     </listitem>
1172     <listitem>
1173     <para>
1174 osamu 8703 library packages;
1175 osamu 8601 </para>
1176     </listitem>
1177     <listitem>
1178     <para>
1179 osamu 8703 kernel module packages;
1180 osamu 8601 </para>
1181     </listitem>
1182     <listitem>
1183     <para>
1184 osamu 8703 kernel patch packages;
1185 osamu 8601 </para>
1186     </listitem>
1187     <listitem>
1188     <para>
1189 osamu 8703 packages with the source in a format other than <filename>tar.gz</filename> or
1190     <filename>tar.bz2</filename>; or
1191 osamu 8601 </para>
1192     </listitem>
1193     <listitem>
1194     <para>
1195 osamu 8703 packages where the source tarball contains undistributable contents.
1196 osamu 8601 </para>
1197     </listitem>
1198     </itemizedlist>
1199     <para>
1200 osamu 8703 Doing so is not too hard, but it requires a bit more knowledge, so we won't
1201 osamu 8601 describe all of it here.
1202     </para>
1203     <para>
1204     If you accidentally erased some template files while working on them, you can
1205     recover them by running <command>dh_make</command> with the
1206     <literal>--addmissing</literal> option again in a Debian package source tree.
1207     </para>
1208     <para>
1209     Updating an existing package may get complicated since it may be using older
1210 osamu 8703 techniques. While learning the basics, please stick to creating a fresh
1211     package; further explanations are given in <xref linkend="update"/>.
1212 osamu 8601 </para>
1213     </section>
1214     </chapter>
1215     <chapter id="modify"><title>Modifying the source</title>
1216     <para>
1217     Please note that there isn't space here to go into <emphasis>all</emphasis> the
1218     details of fixing upstream sources, but here are some basic steps and problems
1219     people often run across.
1220     </para>
1221 osamu 8709 <section id="quiltrc"><title>Setting up <command>quilt</command></title>
1222 osamu 8601 <para>
1223 osamu 8709 The program <command>quilt</command> offers a basic method for recording
1224     modifications to the upstream source for Debian packaging. It's
1225     useful to have a slightly customized default, so let's create an alias
1226     <command>dquilt</command> for Debian packaging by adding the following
1227     line to <filename>~/.bashrc</filename>.
1228 osamu 8601 </para>
1229     <screen>
1230 osamu 8688 alias dquilt="quilt --quiltrc=~/.quiltrc-dpkg"
1231 osamu 8646 </screen>
1232     <para>
1233     Then let's create <filename>~/.quiltrc-dpkg</filename> as follows.
1234     </para>
1235     <screen>
1236 osamu 8601 d=. ; while [ ! -d $d/debian -a `readlink -e $d` != / ]; do d=$d/..; done
1237     if [ -d $d/debian ] &amp;&amp; [ -z $QUILT_PATCHES ]; then
1238 osamu 8709 # if in Debian packaging tree with unset $QUILT_PATCHES
1239 osamu 8649 QUILT_PATCHES="debian/patches"
1240     QUILT_PATCH_OPTS="--reject-format=unified"
1241     QUILT_DIFF_ARGS="-p ab --no-timestamps --no-index --color=auto"
1242     QUILT_REFRESH_ARGS="-p ab --no-timestamps --no-index"
1243     QUILT_COLORS="diff_hdr=1;32:diff_add=1;34:diff_rem=1;31:diff_hunk=1;33:diff_ctx=35:diff_cctx=33"
1244 osamu 8601 if ! [ -d $d/debian/patches ]; then mkdir $d/debian/patches; fi
1245     fi
1246     </screen>
1247     <para>
1248     See <citerefentry> <refentrytitle>quilt</refentrytitle>
1249     <manvolnum>1</manvolnum> </citerefentry> and
1250 osamu 8709 <ulink url="&quilt-pdf;">quilt.pdf</ulink> on how to use
1251 osamu 8601 <command>quilt</command>.
1252     </para>
1253     </section>
1254 osamu 8709 <section id="fixupstream"><title>Fixing upstream bugs</title>
1255 osamu 8601 <para>
1256     Let's assume you find an error in the upstream <filename>Makefile</filename>
1257 osamu 8709 as follows where <literal>install: gentoo</literal> should have been
1258 osamu 8601 <literal>install: gentoo-target</literal>.
1259     </para>
1260     <screen>
1261     install: gentoo
1262     install ./gentoo $(BIN)
1263     install icons/* $(ICONS)
1264     install gentoorc-example $(HOME)/.gentoorc
1265     </screen>
1266     <para>
1267 osamu 8709 Let's fix this and record it with the <command>dquilt</command> command as
1268 osamu 8601 <filename>fix-gentoo-target.patch</filename>. <footnote><para> The
1269 osamu 8709 <filename>debian/patches</filename> directory should exist now if you ran
1270 osamu 8601 <command>dh_make</command> as described before. This example operation creates
1271 osamu 8709 it just in case you are updating an existing package. </para> </footnote>
1272 osamu 8601 </para>
1273     <screen>
1274     $ mkdir debian/patches
1275 osamu 8646 $ dquilt new fix-gentoo-target.patch
1276     $ dquilt add Makefile
1277 osamu 8601 </screen>
1278     <para>
1279     You change the <filename>Makefile</filename> file as follows.
1280     </para>
1281     <screen>
1282     install: gentoo-target
1283     install ./gentoo $(BIN)
1284     install icons/* $(ICONS)
1285     install gentoorc-example $(HOME)/.gentoorc
1286     </screen>
1287     <para>
1288 osamu 8709 Ask <command>dquilt</command> to generate the patch to create
1289 osamu 8601 <filename>debian/patches/fix-gentoo-target.patch</filename> and add its
1290 osamu 8621 description following <ulink url="&dep3;">DEP-3: Patch Tagging Guidelines</ulink>.
1291 osamu 8601 </para>
1292     <screen>
1293 osamu 8646 $ dquilt refresh
1294     $ dquilt header -e
1295 osamu 8601 ... describe patch
1296     </screen>
1297     </section>
1298 osamu 8709 <section id="destdir"><title>Installation of files to their destination</title>
1299 osamu 8601 <para>
1300 osamu 8709 Most third-party software installs itself in the <filename>/usr/local</filename>
1301     directory hierarchy. On Debian this is reserved for private use
1302     by the system administrator, so packages must not use directories such
1303     as <filename>/usr/local/bin</filename> but should instead use system
1304     directories such as <filename>/usr/bin</filename>, obeying the
1305     <ulink url="&fhs;">Filesystem Hierarchy Standard</ulink> (FHS).
1306 osamu 8601 </para>
1307     <para>
1308     Normally, <citerefentry> <refentrytitle>make</refentrytitle>
1309     <manvolnum>1</manvolnum> </citerefentry> is used to automate building the
1310 osamu 8709 program, and executing <literal>make install</literal> installs programs
1311     directly to the desired destination (following the
1312     <literal>install</literal> target in the
1313     <filename>Makefile</filename>). In order for Debian to provide
1314     pre-built installable packages, it modifies the build system to install
1315     programs into a file tree image created under a temporary directory
1316     instead of the actual destination.
1317 osamu 8601 </para>
1318     <para>
1319 osamu 8709 These two differences between normal program installation on one hand and the
1320     Debian packaging system on the other can be transparently addressed by the
1321     <systemitem role="package">debhelper</systemitem> package through the
1322 osamu 8601 <command>dh_auto_configure</command> and <command>dh_auto_install</command>
1323     commands if the following conditions are met.
1324     </para>
1325     <itemizedlist>
1326     <listitem>
1327     <para>
1328 osamu 8709 The <filename>Makefile</filename> must follow GNU conventions and
1329     support the <literal>$(DESTDIR)</literal> variable.
1330 osamu 8628 <footnote><para> See <ulink url="&gnu-destdir;">GNU Coding Standards: 7.2.4 DESTDIR: Support for Staged Installs</ulink>.</para></footnote>
1331 osamu 8601 </para>
1332     </listitem>
1333     <listitem>
1334     <para>
1335 osamu 8709 The source must follow the Filesystem Hierarchy Standard (FHS).
1336 osamu 8601 </para>
1337     </listitem>
1338     </itemizedlist>
1339     <para>
1340 osamu 8709 Programs that use GNU <command>autoconf</command> follow the GNU conventions
1341     automatically, so they can be trivial to package. On the basis of
1342     this and other heuristics, it is estimated that the
1343     <systemitem role="package">debhelper</systemitem> package will work for
1344     about 90% of packages without making any intrusive changes to their
1345     build system. So packaging is not as complicated as it may seem.
1346 osamu 8601 </para>
1347     <para>
1348 osamu 8709 If you need to make changes in the <filename>Makefile</filename>, you
1349     should be careful to support the <literal>$(DESTDIR)</literal>
1350     variable. Although it is unset by default, the <literal>$(DESTDIR)</literal>
1351     variable is prepended to each file path used for the program
1352     installation. The packaging script will set
1353     <literal>$(DESTDIR)</literal> to the temporary directory.
1354 osamu 8601 </para>
1355     <para>
1356 osamu 8709 For packages of the single-binary type, the temporary directory used
1357     by the <command>dh_auto_install</command> command will be set to
1358     <filename>debian/<replaceable>package</replaceable></filename>.
1359     <footnote><para> For packages of the multiple-binary type, the
1360 osamu 8601 <command>dh_auto_install</command> command uses <filename>debian/tmp</filename>
1361     as the temporary directory while the <command>dh_install</command> command with
1362     the help of
1363     <filename>debian/<replaceable>package-1</replaceable>.install</filename> and
1364     <filename>debian/<replaceable>package-2</replaceable>.install</filename> files
1365 osamu 8709 will split the contents of <filename>debian/tmp</filename> into
1366 osamu 8601 <filename>debian/<replaceable>package-1</replaceable></filename> and
1367     <filename>debian/<replaceable>package-2</replaceable></filename> temporary
1368 osamu 8709 directories, to create
1369     <filename><replaceable>package-1</replaceable>_*.deb</filename> and
1370     <filename><replaceable>package-2</replaceable>_*.deb</filename> binary
1371     packages.
1372 osamu 8601 </para> </footnote> Everything that is contained in the temporary directory
1373 osamu 8709 will be installed on users' systems when they install your package; the only
1374     difference is that <command>dpkg</command> will be installing the
1375     files to paths relative to the root directory rather than your working
1376     directory.
1377 osamu 8601 </para>
1378     <para>
1379     Bear in mind that even though your program installs in
1380     <filename>debian/<replaceable>package</replaceable></filename>, it still needs
1381 osamu 8709 to behave correctly when installed from the <filename>.deb</filename>
1382     package under the root directory. So you must not allow the build
1383 osamu 8601 system to hardcode strings like
1384     <literal>/home/me/deb/<replaceable>package</replaceable>-<replaceable>version</replaceable>/usr/share/<replaceable>package</replaceable></literal>
1385 osamu 8709 into files in the package.
1386 osamu 8601 </para>
1387     <para>
1388     Here's the relevant part of <systemitem role="package">gentoo</systemitem>'s
1389 osamu 8709 <filename>Makefile</filename><footnote><para> This is just an example to
1390     show what a <filename>Makefile</filename> should look like. If the
1391     <filename>Makefile</filename> is created by the
1392 osamu 8601 <command>./configure</command> command, the correct way to fix this kind of
1393 osamu 8709 <filename>Makefile</filename> is to execute <command>./configure</command>
1394     from the <command>dh_auto_configure</command> command with default
1395 osamu 8601 options including <literal>--prefix=/usr</literal>. </para> </footnote>:
1396     </para>
1397     <screen>
1398     # Where to put binary on 'make install'?
1399     BIN = /usr/local/bin
1400     # Where to put icons on 'make install'?
1401     ICONS = /usr/local/share/gentoo
1402     </screen>
1403     <para>
1404     We see that the files are set to install under <filename>/usr/local</filename>.
1405 osamu 8709 As explained above, that directory hierarchy is reserved for local use on
1406     Debian, so change those paths to:
1407 osamu 8601 </para>
1408     <screen>
1409     # Where to put binary on 'make install'?
1410     BIN = $(DESTDIR)/usr/bin
1411     # Where to put icons on 'make install'?
1412     ICONS = $(DESTDIR)/usr/share/gentoo
1413     </screen>
1414     <para>
1415 osamu 8709 The exact locations that should be used for binaries, icons,
1416     documentation, etc. are specified in the Filesystem Hierarchy Standard
1417     (FHS). You should browse through it and read the sections relevant to
1418     your package.
1419 osamu 8601 </para>
1420     <para>
1421     So, we should install the binary in <filename>/usr/bin</filename> instead of
1422     <filename>/usr/local/bin</filename>, the manual page in
1423     <filename>/usr/share/man/man1</filename> instead of
1424 osamu 8709 <filename>/usr/local/man/man1</filename>, and so on. Notice how there's no manual
1425 osamu 8601 page mentioned in <systemitem role="package">gentoo</systemitem>'s
1426 osamu 8709 <filename>Makefile</filename>, but since Debian Policy requires that every
1427 osamu 8601 program has one, we'll make one later and install it in
1428     <filename>/usr/share/man/man1</filename>.
1429     </para>
1430     <para>
1431     Some programs don't use <filename>Makefile</filename> variables to define paths
1432     such as these. This means you might have to edit some real C sources in order
1433     to fix them to use the right locations. But where to search, and exactly what
1434     for? You can find this out by issuing:
1435     </para>
1436     <screen>
1437 osamu 8709 $ grep -nr --include='*.[c|h]' -e 'usr/local/lib' .
1438 osamu 8601 </screen>
1439     <para>
1440     <command>grep</command> will run recursively through the source tree and tell
1441     you the filename and the line number for all matches.
1442     </para>
1443     <para>
1444     Edit those files and in those lines replace <literal>usr/local/lib</literal>
1445 osamu 8621 with <literal>usr/lib</literal>. This can be done automatically as follows:
1446 osamu 8601 </para>
1447     <screen>
1448 osamu 8711 $ sed -i -e 's#usr/local/lib#usr/lib#g' \
1449 osamu 8601 $(find . -type f -name '*.[c|h]')
1450     </screen>
1451     <para>
1452 osamu 8709 If you want to confirm each substituion instead, this can be done interactively as follows:
1453 osamu 8601 </para>
1454 osamu 8709 <screen>
1455     $ vim '+argdo %s#usr/local/lib#usr/lib#gce|update' +q \
1456     $(find . -type f -name '*.[c|h]')
1457     </screen>
1458    
1459 osamu 8601 <para>
1460 osamu 8709 Next you should find the <literal>install</literal> target (searching
1461     for the line that starts with <literal>install:</literal> will usually
1462     work) and rename all references to directories other than ones defined
1463     at the top of the <filename>Makefile</filename>.
1464 osamu 8601 </para>
1465     <para>
1466 osamu 8709 Originally, <systemitem role="package">gentoo</systemitem>'s
1467 osamu 8601 install target said:
1468     </para>
1469     <screen>
1470     install: gentoo-target
1471     install ./gentoo $(BIN)
1472     install icons/* $(ICONS)
1473     install gentoorc-example $(HOME)/.gentoorc
1474     </screen>
1475     <para>
1476 osamu 8709 Let's fix this upstream bug and record it with the <command>dquilt</command> command as
1477 osamu 8601 <filename>debian/patches/install.patch</filename>.
1478     </para>
1479     <screen>
1480 osamu 8646 $ dquilt new install.patch
1481     $ dquilt add Makefile
1482 osamu 8601 </screen>
1483     <para>
1484 osamu 8709 In your editor, change this for the Debian package as follows:
1485 osamu 8601 </para>
1486     <screen>
1487     install: gentoo-target
1488     install -d $(BIN) $(ICONS) $(DESTDIR)/etc
1489     install ./gentoo $(BIN)
1490     install -m644 icons/* $(ICONS)
1491     install -m644 gentoorc-example $(DESTDIR)/etc/gentoorc
1492     </screen>
1493     <para>
1494 osamu 8709 You'll have noticed that there's now an <literal>install -d</literal> command
1495 osamu 8601 before the other commands in the rule. The original
1496 osamu 8709 <filename>Makefile</filename> didn't have it because usually
1497 osamu 8601 <literal>/usr/local/bin</literal> and other directories already exist on the
1498 osamu 8709 system where you are running <literal>make install</literal>. However, since we will
1499     be installing into a newly created private directory tree, we will have to
1500 osamu 8601 create each and every one of those directories.
1501     </para>
1502     <para>
1503     We can also add in other things at the end of the rule, like the installation
1504     of additional documentation that the upstream authors sometimes omit:
1505     </para>
1506     <screen>
1507     install -d $(DESTDIR)/usr/share/doc/gentoo/html
1508     cp -a docs/* $(DESTDIR)/usr/share/doc/gentoo/html
1509     </screen>
1510     <para>
1511 osamu 8709 Check carefully, and if everything is okay, ask <command>dquilt</command> to
1512     generate the patch to create <filename>debian/patches/install.patch</filename>
1513 osamu 8601 and add its description.
1514     </para>
1515     <screen>
1516 osamu 8646 $ dquilt refresh
1517     $ dquilt header -e
1518 osamu 8601 ... describe patch
1519     </screen>
1520     <para>
1521     Now you have a series of patches.
1522     </para>
1523     <orderedlist numeration="arabic">
1524     <listitem>
1525     <para>
1526     Upstream bug fix: <filename>debian/patches/fix-gentoo-target.patch</filename>
1527     </para>
1528     </listitem>
1529     <listitem>
1530     <para>
1531     Debian specific packaging modification:
1532     <filename>debian/patches/install.patch</filename>
1533     </para>
1534     </listitem>
1535     </orderedlist>
1536     <para>
1537     Whenever you make changes that are not specifically related to Debian package
1538     such as <filename>debian/patches/fix-gentoo-target.patch</filename>, be sure to
1539     send them to the upstream maintainer so they can be included in the next
1540 osamu 8709 revision of the program and be useful to everyone else. Also remember
1541     to avoid making your fixes specific to Debian or Linux - or even Unix!
1542     Make them portable. This will make your fixes much easier to apply.
1543 osamu 8601 </para>
1544     <para>
1545     Note that you don't have to send the <filename>debian/*</filename> files
1546     upstream.
1547     </para>
1548     </section>
1549     <section id="difflibs"><title>Differing libraries</title>
1550     <para>
1551     There is one other common problem: libraries are often different from platform
1552     to platform. For example, a <filename>Makefile</filename> can contain a
1553 osamu 8714 reference to a library which doesn't exist on the Debian system. In that case, we
1554 osamu 8601 need to change it to a library which does exist in Debian, and serves the same
1555     purpose.
1556     </para>
1557     <para>
1558 osamu 8714 Let's assume a line in your program's <filename>Makefile</filename> (or
1559     <filename>Makefile.in</filename>) as the following.
1560 osamu 8601 </para>
1561     <screen>
1562 osamu 8713 LIBS = -lfoo -lbar
1563 osamu 8601 </screen>
1564     <para>
1565 osamu 8714 If your program doesn't compile since the <literal>foo</literal> library
1566     doesn't exist and its equivalent is provided by the <literal>foo2</literal>
1567     library on the Debian system, you can fix this build problem as
1568     <filename>debian/patches/foo2.patch</filename> by changing
1569     <literal>foo</literal> into <literal>foo2</literal>.<footnote><para>If there
1570     are API changes from the <literal>foo</literal> library to the
1571     <literal>foo2</literal> library, required changes to the source code need to be
1572     made to match the new API.</para> </footnote>
1573 osamu 8601 </para>
1574     <screen>
1575 osamu 8713 $ dquilt new foo2.patch
1576 osamu 8646 $ dquilt add Makefile
1577 osamu 8713 $ sed -i -e 's/-lfoo/-lfoo2/g' Makefile
1578 osamu 8646 $ dquilt refresh
1579     $ dquilt header -e
1580 osamu 8601 ... describe patch
1581     </screen>
1582     </section>
1583     </chapter>
1584     <chapter id="dreq"><title>Required files under the <filename>debian</filename> directory</title>
1585     <para>
1586     There is a new subdirectory under the program's source directory, it's called
1587     <filename>debian</filename>. There are a number of files in this directory
1588     that we should edit in order to customize the behavior of the package. The
1589     most important of them are <filename>control</filename>,
1590     <filename>changelog</filename>, <filename>copyright</filename> and
1591     <filename>rules</filename>, which are required for all packages.
1592 osamu 8668 <footnote><para>
1593     In this chapter, files in the <filename>debian</filename> directory are
1594     referred without preceding <filename>debian/</filename> for simplicity whenever
1595     they are obvious.
1596     </para></footnote>
1597 osamu 8601 </para>
1598     <section id="control"><title><filename>control</filename> file</title>
1599     <para>
1600     This file contains various values which <command>dpkg</command>,
1601     <command>dselect</command>, <command>apt-get</command>,
1602     <command>apt-cache</command>, <command>aptitude</command>, and other package
1603 osamu 8628 management tools will use to manage the package. It is defined by the <ulink url="&policy-control;">Debian
1604 osamu 8601 Policy Manual, 5 'Control files and their fields'</ulink>.
1605     </para>
1606     <para>
1607     Here is the <filename>control</filename> file <command>dh_make</command>
1608     created for us:
1609     </para>
1610     <screen>
1611     1 Source: gentoo
1612     2 Section: unknown
1613     3 Priority: extra
1614     4 Maintainer: Josip Rodin &lt;joy-mg@debian.org&gt;
1615     5 Build-Depends: debhelper (&gt;= 7.0.50~)
1616     6 Standards-Version: 3.8.4
1617     7 Homepage: &lt;insert the upstream URL, if relevant&gt;
1618     8
1619     9 Package: gentoo
1620     10 Architecture: any
1621     11 Depends: ${shlibs:Depends}, ${misc:Depends}
1622     12 Description: &lt;insert up to 60 chars description&gt;
1623     13 &lt;insert long description, indented with spaces&gt;
1624     </screen>
1625     <para>
1626     (I've added the line numbers.)
1627     </para>
1628     <para>
1629 osamu 8621 Lines 1-7 are the control information for the source package.
1630     Lines 9-13 are the control information for the binary package.
1631 osamu 8601 </para>
1632     <para>
1633     Line 1 is the name of the source package.
1634     </para>
1635     <para>
1636     Line 2 is the section of the distribution the source package goes into.
1637     </para>
1638     <para>
1639     As you may have noticed, Debian archive is divided in sections:
1640     <literal>main</literal> (the free software), <literal>non-free</literal> (the
1641     not really free software) and <literal>contrib</literal> (free software that
1642     depends on non-free software). Under those, there are logical subsections that
1643     describe in short what packages are in. So we have <literal>admin</literal>
1644     for administrator-only programs, <literal>base</literal> for the basic tools,
1645     <literal>devel</literal> for programmer tools, <literal>doc</literal> for
1646     documentation, <literal>libs</literal> for libraries, <literal>mail</literal>
1647     for e-mail readers and daemons, <literal>net</literal> for network apps and
1648     daemons, <literal>x11</literal> for X11 programs that don't fit anywhere else,
1649 osamu 8648 and many more.
1650     <footnote> <para>See
1651     <ulink url="&policy-subsections;">Debian Policy Manual, 2.4 'Sections'</ulink> and
1652 taffit-guest 8665 <ulink url="&sections-unstable;">List of sections in <literal>sid</literal></ulink>.</para>
1653 osamu 8648 </footnote>
1654 osamu 8601 </para>
1655     <para>
1656     Let's change it then to x11. (A <literal>main/</literal> prefix is implied so
1657     we can omit it.)
1658     </para>
1659     <para>
1660 osamu 8648 Line 3 describes how important it is that the user installs this package.
1661     <footnote> <para>See
1662     <ulink url="&policy-priorities;">Debian Policy Manual, 2.5 'Priorities'</ulink>.
1663 osamu 8601 </para>
1664 osamu 8648 </footnote>
1665     </para>
1666 osamu 8601 <itemizedlist>
1667     <listitem>
1668     <para>
1669     The <literal>optional</literal> priority will usually work for new packages
1670     that do not conflict with others with <literal>required</literal>,
1671     <literal>important</literal> or <literal>standard</literal> priorities.
1672     </para>
1673     </listitem>
1674     <listitem>
1675     <para>
1676     The <literal>extra</literal> priority will usually work for new packages that
1677     conflict with others with non-<literal>extra</literal> priorities.
1678     </para>
1679     </listitem>
1680     </itemizedlist>
1681     <para>
1682     Section and priority are used by the frontends like <command>aptitude</command>
1683     when they sort packages and select defaults. Once you upload the package to
1684     Debian, the value of these two fields can be overridden by the archive
1685     maintainers, in which case you will be notified by email.
1686     </para>
1687     <para>
1688     As this is a normal priority package and doesn't conflict with anything else,
1689     we will change the priority to <literal>optional</literal>.
1690     </para>
1691     <para>
1692     Line 4 is the name and email address of the maintainer. Make sure that this
1693     field includes a valid <literal>To</literal> header for an email, because after
1694     you upload it, the bug tracking system will use it to deliver bug emails to
1695     you. Avoid using commas, ampersands and parenthesis.
1696     </para>
1697     <para>
1698     The 5th line includes the list of packages required to build your package as
1699     the <literal>Build-Depends</literal> field. You can also have the
1700 osamu 8648 <literal>Build-Depends-Indep</literal> field as an additional line, here.
1701     <footnote><para>See <ulink url="&policy-relationships;#s-sourcebinarydeps">Debian
1702 osamu 8601 Policy Manual, 7.7 'Relationships between source and binary packages -
1703     Build-Depends, Build-Depends-Indep, Build-Conflicts,
1704 osamu 8648 Build-Conflicts-Indep'</ulink>.</para></footnote> Some packages like
1705 osamu 8642 <systemitem role="package">gcc</systemitem> and
1706     <systemitem role="package">make</systemitem> which are required by the
1707     <systemitem role="package">build-essential</systemitem> package are implied. If you need
1708 osamu 8601 to have other tools to build your package, you should add them to these fields.
1709     Multiple entries are separated with commas; read on for the explanation of
1710     binary dependencies to find out more about the syntax of these lines.
1711     </para>
1712     <itemizedlist>
1713     <listitem>
1714     <para>
1715     For all packages packaged with the <command>dh</command> command in the
1716     <filename>debian/rules</filename> file, you must have <literal>debhelper
1717     (&gt;=7.0.50~)</literal> in the <literal>Build-Depends</literal> field to
1718     satisfy the Debian Policy requirement for the <literal>clean</literal> target.
1719     </para>
1720     </listitem>
1721     <listitem>
1722     <para>
1723     For source packages which have some binary packages with <literal>Architecture:
1724     any</literal>, they are rebuild by the autobuilder. Since this autobuilder
1725     procedure runs <literal>debian/rules build</literal> in it while installing
1726 taffit-guest 8665 only packages listed in the <literal>Build-Depends</literal> field (see <xref linkend="autobuilder"/>), the <literal>Build-Depends</literal> field needs to
1727 osamu 8601 list practically all the required packages and the
1728     <literal>Build-Depends-indep</literal> is rarely used.
1729     </para>
1730     </listitem>
1731     <listitem>
1732     <para>
1733     For source packages which have binary packages only with <literal>Architecture:
1734     all</literal>, the <literal>Build-Depends-Indep</literal> field may list all
1735     the required packages unless they are already listed in the
1736     <literal>Build-Depends</literal> field to satisfy the Debian Policy requirement
1737     for the <literal>clean</literal> target.
1738     </para>
1739     </listitem>
1740     </itemizedlist>
1741     <para>
1742     If you are not sure which one should be used, use the
1743     <literal>Build-Depends</literal> field to be on the safe side.
1744     <footnote><para> This somewhat strange situation is a feature well documented
1745 osamu 8628 in the <ulink url="&policy-build-depends-indep;">Debian Policy
1746 osamu 8601 Manual, Footnotes 48</ulink>. This is not due to the use of the
1747     <command>dh</command> command in the <filename>debian/rules</filename> file but
1748     due to how the <command>dpkg-buildpackage</command> works. The same situation
1749     applies to the <ulink url="https://bugs.launchpad.net/launchpad-buildd/+bug/238141">auto build system
1750     for Ubuntu</ulink>. </para> </footnote>
1751     </para>
1752     <para>
1753     To find out what packages your package needs to be built run the command:
1754     </para>
1755     <screen>
1756     $ dpkg-depcheck -d ./configure
1757     </screen>
1758     <para>
1759     To manually find exact build dependency for
1760     <command><replaceable>/usr/bin/foo</replaceable></command>, you execute
1761     </para>
1762     <screen>
1763     $ objdump -p <replaceable>/usr/bin/foo</replaceable> | grep NEEDED
1764     </screen>
1765     <para>
1766     and for each library listed, e.g., <command>libfoo.so.6</command>, execute
1767     </para>
1768     <screen>
1769     $ dpkg -S libfoo.so.6
1770     </screen>
1771     <para>
1772     Then you just take <literal>-dev</literal> version of every package as
1773     <literal>Build-Depends</literal> entry. If you use <command>ldd</command> for
1774     this purpose, it will report indirect lib dependencies as well, resulting in
1775     the problem of excessive build dependencies.
1776     </para>
1777     <para>
1778     <systemitem role="package">gentoo</systemitem> also happens to require
1779     <systemitem role="package">xlibs-dev</systemitem>, <systemitem role="package">libgtk1.2-dev</systemitem> and <systemitem role="package">libglib1.2-dev</systemitem> to build, so we'll add them here
1780     next to <systemitem role="package">debhelper</systemitem>.
1781     </para>
1782     <para>
1783 osamu 8628 Line 6 is the version of the <ulink url="&debian-policy;">Debian Policy
1784 osamu 8601 Manual</ulink> standards this package follows, the one you read while making
1785     your package.
1786     </para>
1787     <para>
1788     On line 7 you can put the URL of the homepage for the upstream program.
1789     </para>
1790     <para>
1791     Line 9 is the name of the binary package. This is usually the same as the name
1792     of the source package, but it doesn't necessarily have to be that way.
1793     </para>
1794     <para>
1795     Line 10 describes the CPU architecture the binary package can be compiled for.
1796     We'll leave this as <literal>any</literal> because <citerefentry>
1797     <refentrytitle>dpkg-gencontrol</refentrytitle> <manvolnum>1</manvolnum>
1798     </citerefentry> will fill in the appropriate value for any machine this package
1799     gets compiled on.
1800     </para>
1801     <para>
1802     If your package is architecture independent (for example, a shell or Perl
1803     script, or a document), change this to <literal>all</literal>, and read later
1804     in <xref linkend="rules"/> about using the <literal>binary-indep</literal> rule
1805     instead of <literal>binary-arch</literal> for building the package.
1806     </para>
1807     <para>
1808     Line 11 shows one of the most powerful features of the Debian packaging system.
1809     Packages can relate to each other in various ways. Apart from
1810     <literal>Depends</literal>, other relationship fields are
1811     <literal>Recommends</literal>, <literal>Suggests</literal>,
1812     <literal>Pre-Depends</literal>, <literal>Breaks</literal>,
1813     <literal>Conflicts</literal>, <literal>Provides</literal>, and
1814     <literal>Replaces</literal>.
1815     </para>
1816     <para>
1817     The package management tools usually behave the same way when dealing with
1818     these relations; if not, it will be explained. (see <citerefentry>
1819     <refentrytitle>dpkg</refentrytitle> <manvolnum>8</manvolnum> </citerefentry>,
1820     <citerefentry> <refentrytitle>dselect</refentrytitle> <manvolnum>8</manvolnum>
1821     </citerefentry>, <citerefentry> <refentrytitle>apt</refentrytitle>
1822     <manvolnum>8</manvolnum> </citerefentry>, <citerefentry>
1823     <refentrytitle>aptitude</refentrytitle> <manvolnum>1</manvolnum>
1824     </citerefentry> etc.)
1825     </para>
1826     <para>
1827 osamu 8648 Here is a simplified description of package relationships.
1828 osamu 8621 <footnote><para>See
1829 osamu 8648 <ulink url="&policy-relationships;">Debian Policy Manual, 7 'Declaring relationships between packages'</ulink>.
1830     </para></footnote>
1831 osamu 8601 </para>
1832     <itemizedlist>
1833     <listitem>
1834     <para>
1835     <literal>Depends</literal>
1836     </para>
1837     <para>
1838     The package will not be installed unless the packages it depends on are
1839     installed. Use this if your program absolutely will not run (or will cause
1840     severe breakage) unless a particular package is present.
1841     </para>
1842     </listitem>
1843     <listitem>
1844     <para>
1845     <literal>Recommends</literal>
1846     </para>
1847     <para>
1848     Use this for packages that are not strictly necessary but are typically used
1849     with your program. When a user installs your program, all frontends will
1850     likely prompt them to install the recommended packages.
1851     <command>aptitude</command> and <command>apt-get</command> install recommended
1852     packages along with your package (but the user can disable this default
1853     behaviour). <command>dpkg</command> will ignore this field.
1854     </para>
1855     </listitem>
1856     <listitem>
1857     <para>
1858     <literal>Suggests</literal>
1859     </para>
1860     <para>
1861     Use this for packages which will work nicely with your program but are not at
1862     all necessary. When a user installs your program, all frontends will likely
1863     prompt them to install the suggested packages. <command>aptitude</command> can
1864     be configured to install suggested packages along with your package but this is
1865     not its default. <command>dpkg</command> and <command>apt-get</command> will
1866     ignore this field.
1867     </para>
1868     </listitem>
1869     <listitem>
1870     <para>
1871     <literal>Pre-Depends</literal>
1872     </para>
1873     <para>
1874     This is stronger than <literal>Depends</literal>. The package will not be
1875     installed unless the packages it pre-depends on are installed and
1876     <emphasis>correctly configured</emphasis>. Use this <emphasis>very</emphasis>
1877 osamu 8628 sparingly and only after discussing it on the <ulink url="&debian-devel-ldo;">debian-devel@lists.debian.org</ulink>
1878 osamu 8601 mailing list. Read: don't use it at all. :-)
1879     </para>
1880     </listitem>
1881     <listitem>
1882     <para>
1883     <literal>Conflicts</literal>
1884     </para>
1885     <para>
1886     The package will not be installed until all the packages it conflicts with have
1887     been removed. Use this if your program absolutely will not run or will cause
1888     severe problems if a particular package is present.
1889     </para>
1890     </listitem>
1891     <listitem>
1892     <para>
1893     <literal>Breaks</literal>
1894     </para>
1895     <para>
1896     The package will be installed while all the listed packages will be broken.
1897     Normally a <literal>Breaks</literal> entry has an earlier than version clause.
1898     The resolution is generally to upgrade the listed packages by the higher-level
1899     package management tools.
1900     </para>
1901     </listitem>
1902     <listitem>
1903     <para>
1904     <literal>Provides</literal>
1905     </para>
1906     <para>
1907     For some types of packages where there are multiple alternatives virtual names
1908     have been defined. You can get the full list in the
1909 osamu 8639 <ulink url="&virtual-package;">virtual-package-names-list.txt.gz</ulink>
1910 osamu 8601 file. Use this if your program provides a function of an existing virtual
1911     package.
1912     </para>
1913     </listitem>
1914     <listitem>
1915     <para>
1916     <literal>Replaces</literal>
1917     </para>
1918     <para>
1919     Use this when your program replaces files from another package, or completely
1920     replaces another package (used in conjunction with
1921     <literal>Conflicts</literal>). Files from the named packages will be
1922     overwritten with the files from your package.
1923     </para>
1924     </listitem>
1925     </itemizedlist>
1926     <para>
1927     All these fields have uniform syntax. They are a list of package names
1928     separated by commas. These package names may also be lists of alternative
1929     package names, separated by vertical bar symbols <literal>|</literal> (pipe
1930     symbols).
1931     </para>
1932     <para>
1933     The fields may restrict their applicability to particular versions of each
1934     named package. These versions are listed in parentheses after each individual
1935     package name, and they should contain a relation from the list below followed
1936     by the version number. The relations allowed are: <literal>&lt;&lt;</literal>,
1937     <literal>&lt;=</literal>, <literal>=</literal>, <literal>&gt;=</literal> and
1938     <literal>&gt;&gt;</literal> for strictly lower, lower or equal, exactly equal,
1939     greater or equal and strictly greater, respectively. For example,
1940     </para>
1941     <screen>
1942     Depends: foo (&gt;= 1.2), libbar1 (= 1.3.4)
1943     Conflicts: baz
1944     Recommends: libbaz4 (&gt;&gt; 4.0.7)
1945     Suggests: quux
1946     Replaces: quux (&lt;&lt; 5), quux-foo (&lt;= 7.6)
1947     </screen>
1948     <para>
1949     The last feature you need to know about is
1950     <literal>${shlibs:Depends}</literal>, <literal>${perl:Depends}</literal>,
1951 osamu 8648 <literal>${misc:Depends}</literal>, etc.
1952 osamu 8601 </para>
1953     <para>
1954     <citerefentry> <refentrytitle>dh_shlibdeps</refentrytitle>
1955 osamu 8648 <manvolnum>1</manvolnum> </citerefentry> calculates shared library dependencies
1956     for binary packages. It generates a list of ELF executables and shared
1957     libraries it has found for each binary package. Such list is used for
1958     substituting <literal>${shlibs:Depends}</literal>.
1959 osamu 8601 </para>
1960     <para>
1961 osamu 8648 <citerefentry> <refentrytitle>dh_perl</refentrytitle> <manvolnum>1</manvolnum>
1962 taffit-guest 8665 </citerefentry> calculates Perl dependencies. It generates a list of a
1963     dependency on <literal>perl</literal> or <literal>perlapi</literal> for each binary package. Such list is used for
1964 osamu 8648 substituting <literal>${perl:Depends}</literal>.
1965 osamu 8601 </para>
1966     <para>
1967     Some <systemitem role="package">debhelper</systemitem> commands may make the
1968 osamu 8648 generated package need to depend on some other packages. All such commands
1969     generate a list of required packages for each binary package.
1970     Such list is used for substituting <literal>${misc:Depends}</literal>.
1971 osamu 8601 </para>
1972     <para>
1973 osamu 8648 <citerefentry> <refentrytitle>dh_gencontrol</refentrytitle>
1974     <manvolnum>1</manvolnum> </citerefentry> generates
1975     <filename>DEBIAN/control</filename> for each binary package while
1976     substituting <literal>${shlibs:Depends}</literal>,
1977     <literal>${perl:Depends}</literal>, <literal>${misc:Depends}</literal>, etc.
1978     </para>
1979     <para>
1980 osamu 8601 Having said all that, we can leave the <literal>Depends</literal> field exactly
1981     as it is now, and insert another line after it saying <literal>Suggests:
1982     file</literal>, because <systemitem role="package">gentoo</systemitem> can use
1983     some features provided by that <systemitem role="package">file</systemitem>
1984     package.
1985     </para>
1986 osamu 8621 <para> Line 9 is the Homepage URL. Let's assume this to be at
1987 osamu 8637 <ulink url="&gentoo;"/>.
1988 osamu 8621 </para>
1989 osamu 8601 <para>
1990     Line 12 is the short description. Most people screens are 80 columns wide so
1991     this shouldn't be longer than about 60 characters. I'll change it to
1992     <literal>fully GUI-configurable, two-pane X file manager</literal>.
1993     </para>
1994     <para>
1995     Line 13 is where the long description goes. This should be a paragraph which
1996     gives more details about the package. Column 1 of each line should be empty.
1997     There must be no blank lines, but you can put a single <literal>.</literal>
1998     (dot) in a column to simulate that. Also, there must be no more than one blank
1999 osamu 8621 line after the long description. <footnote><para>These descriptions are in
2000     English. Translations of these descriptions are provided by
2001     <ulink url="&ddtp;">The Debian Description Translation Project - DDTP</ulink>.</para></footnote>
2002 osamu 8601 </para>
2003     <para>
2004 osamu 8648 Let's insert <literal>Vcs-*</literal> fields to document the Version Control
2005     System (VCS) location between line 6 and 7.
2006     <footnote><para>See
2007     <ulink url="&devref-bpp-vcs;">Developer's Reference, 6.2.5. 'Version Control System location'</ulink>.
2008     </para></footnote>
2009     Let's assume that the <systemitem role="package">gentoo</systemitem>
2010     package has its VCS located in Debian Alioth Git Service at
2011 osamu 8601 <literal>git://git.debian.org/git/collab-maint/gentoo.git</literal>.
2012     </para>
2013     <para>
2014     Finally, here is the updated <filename>control</filename> file:
2015     </para>
2016     <screen>
2017     1 Source: gentoo
2018     2 Section: x11
2019     3 Priority: optional
2020     4 Maintainer: Josip Rodin &lt;joy-mg@debian.org&gt;
2021     5 Build-Depends: debhelper (&gt;= 7.0.5), xlibs-dev, libgtk1.2-dev, libglib1.2-dev
2022     6 Standards-Version: 3.8.4
2023     7 Vcs-Git: git://git.debian.org/git/collab-maint/gentoo.git
2024     8 Vcs-browser: http://git.debian.org/?p=collab-maint/gentoo.git
2025 osamu 8628 9 Homepage: &gentoo;
2026 osamu 8601 10
2027     11 Package: gentoo
2028     12 Architecture: any
2029     13 Depends: ${shlibs:Depends}, ${misc:Depends}
2030     14 Suggests: file
2031     15 Description: fully GUI-configurable, two-pane X file manager
2032     16 gentoo is a two-pane file manager for the X Window System. gentoo lets the
2033     17 user do (almost) all of the configuration and customizing from within the
2034     18 program itself. If you still prefer to hand-edit configuration files,
2035     19 they're fairly easy to work with since they are written in an XML format.
2036     20 .
2037     21 gentoo features a fairly complex and powerful file identification system,
2038     22 coupled to a object-oriented style system, which together give you a lot
2039     23 of control over how files of different types are displayed and acted upon.
2040     24 Additionally, over a hundred pixmap images are available for use in file
2041     25 type descriptions.
2042     26 .
2043     29 gentoo was written from scratch in ANSI C, and it utilises the GTK+ toolkit
2044     30 for its interface.
2045     </screen>
2046     <para>
2047     (I've added the line numbers.)
2048     </para>
2049     </section>
2050     <section id="copyright"><title><filename>copyright</filename> file</title>
2051     <para>
2052     This file contains the information about package upstream resources, copyright
2053 osamu 8648 and license information.
2054     <ulink url="&policy-copyright;">Debian Policy Manual, 12.5 'Copyright information'</ulink>
2055     dictates its content and
2056 taffit-guest 8665 <ulink url="&dep5;">DEP-5: Machine-parseable <filename>debian/copyright</filename></ulink>
2057 osamu 8648 provides guidelines for its format.
2058 osamu 8601 </para>
2059     <para>
2060     <command>dh_make</command> can give you a template
2061     <filename>copyright</filename> file. Let's use the <literal>--copyright
2062     gpl2</literal> option here to get a template file for the <systemitem role="package">gentoo</systemitem> package released under GPL-2.
2063     </para>
2064     <para>
2065     You must fill in missing information such as the place you got the package
2066     from, the actual copyright notice and their license to complete this file. For
2067     the common free software licenses such as GNU GPL-1, GNU GPL-2, GNU GPL-3,
2068     LGPL-2, LGPL-2.1, LGPL-3, GNU FDL-1.2, GNU FDL-1.3, Apache-2.0 or the Artistic
2069     license, you can just refer to the appropriate file in
2070     <filename>/usr/share/common-licenses/</filename> directory that exists on every
2071     Debian system. Otherwise, you must include the complete license.
2072     </para>
2073     <para>
2074     In short, here's how <systemitem role="package">gentoo</systemitem>'s
2075     <filename>copyright</filename> file should look like:
2076     </para>
2077     <screen>
2078     1 Format-Specification: http://svn.debian.org/wsvn/dep/web/deps/dep5.mdwn?op=file&amp;rev=135
2079     2 Name: gentoo
2080     3 Maintainer: Josip Rodin &lt;joy-mg@debian.org&gt;
2081     4 Source: http://sourceforge.net/projects/gentoo/files/
2082     5
2083     6 Copyright: 1998-2010 Emil Brink &lt;emil@obsession.se&gt;
2084     7 License: GPL-2+
2085     8
2086     9 Files: icons/*
2087     10 Copyright: 1998 Johan Hanson &lt;johan@tiq.com&gt;
2088     11 License: GPL-2+
2089     12
2090     13 Files: debian/*
2091     14 Copyright: 1998-2010 Josip Rodin &lt;joy-mg@debian.org&gt;
2092     15 License: GPL-2+
2093     16
2094     17 License: GPL-2+
2095     18 This program is free software; you can redistribute it and/or modify
2096     19 it under the terms of the GNU General Public License as published by
2097     20 the Free Software Foundation; either version 2 of the License, or
2098     21 (at your option) any later version.
2099     22 .
2100     23 This program is distributed in the hope that it will be useful,
2101     24 but WITHOUT ANY WARRANTY; without even the implied warranty of
2102     25 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2103     26 GNU General Public License for more details.
2104     27 .
2105     28 You should have received a copy of the GNU General Public License along
2106     29 with this program; if not, write to the Free Software Foundation, Inc.,
2107     30 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
2108     31 .
2109     32 On Debian systems, the full text of the GNU General Public
2110     33 License version 2 can be found in the file
2111     34 `/usr/share/common-licenses/GPL-2'.
2112     </screen>
2113     <para>
2114     (I've added the line numbers.)
2115     </para>
2116     <para>
2117     Please follow the HOWTO provided by ftpmasters and sent to
2118 osamu 8637 debian-devel-announce: <ulink url="&howto-copyright;"/>.
2119 osamu 8601 </para>
2120     </section>
2121     <section id="changelog"><title><filename>changelog</filename> file</title>
2122     <para>
2123 osamu 8648 This is a required file, which has a special format described in the
2124     <ulink url="&policy-dpkgchangelog;">Debian Policy Manual, 4.4 'debian/changelog'</ulink>.
2125     This format is used by <command>dpkg</command> and other programs to obtain the
2126     version number, revision, distribution and urgency of your package.
2127 osamu 8601 </para>
2128     <para>
2129     For you, it is also important, since it is good to have documented all changes
2130     you have done. It will help people downloading your package to see whether
2131     there are issues with the package that they should know about. It will be
2132     saved as <filename>/usr/share/doc/gentoo/changelog.Debian.gz</filename> in the
2133     binary package.
2134     </para>
2135     <para>
2136     <command>dh_make</command> created a default one, and this is how it looks
2137     like:
2138     </para>
2139     <screen>
2140     1 gentoo (0.9.12-1) unstable; urgency=low
2141     2
2142     3 * Initial release (Closes: #<replaceable>nnnn</replaceable>) &lt;<replaceable>nnnn</replaceable> is the bug number of your ITP&gt;
2143     4
2144     5 -- Josip Rodin &lt;joy-mg@debian.org&gt; Mon, 22 Mar 2010 00:37:31 +0100
2145     6
2146     </screen>
2147     <para>
2148     (I've added the line numbers.)
2149     </para>
2150     <para>
2151     Line 1 is the package name, version, distribution, and urgency. The name must
2152     match the source package name, distribution should be either
2153     <literal>unstable</literal> (or even <literal>experimental</literal>)
2154     <footnote><para> Some people use invalid distribution values such as
2155     <literal>UNRELEASED</literal> to prevent a package to be accidentally uploaded
2156     when updating a package in a shared VCS. </para> </footnote>, and urgency
2157     shouldn't be changed to anything higher than <literal>low</literal>. :-)
2158     </para>
2159     <para>
2160     Lines 3-5 are a log entry, where you document changes made in this package
2161     revision (not the upstream changes - there is special file for that purpose,
2162     created by the upstream authors, which you will later install as
2163     <filename>/usr/share/doc/gentoo/changelog.gz</filename>). Let's assume your
2164     ITP (Intent To Package) bug report number was <literal>12345</literal>. New
2165     lines must be inserted just before the uppermost line that begins with
2166     <literal>*</literal> (asterisk). You can do it with <citerefentry>
2167     <refentrytitle>dch</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>, or
2168     manually with a text editor.
2169     </para>
2170     <para>
2171     You will end up with something like this:
2172     </para>
2173     <screen>
2174     1 gentoo (0.9.12-1) unstable; urgency=low
2175     2
2176     3 * Initial Release. Closes: #12345
2177     4 * This is my first Debian package.
2178     5 * Adjusted the Makefile to fix $(DESTDIR) problems.
2179     6
2180     7 -- Josip Rodin &lt;joy-mg@debian.org&gt; Mon, 22 Mar 2010 00:37:31 +0100
2181     8
2182     </screen>
2183     <para>
2184     (I've added the line numbers.)
2185     </para>
2186     <para>
2187     You can read more about updating the <filename>changelog</filename> file later
2188 taffit-guest 8665 in <xref linkend="update"/>.
2189 osamu 8601 </para>
2190     </section>
2191     <section id="rules"><title><filename>rules</filename> file</title>
2192     <para>
2193     Now we need to take a look at the exact rules which <citerefentry>
2194     <refentrytitle>dpkg-buildpackage</refentrytitle> <manvolnum>1</manvolnum>
2195     </citerefentry> will use to actually create the package. This file is actually
2196     another <filename>Makefile</filename>, but different from the one(s) in the
2197     upstream source. Unlike other files in <filename>debian</filename>, this one
2198     is marked as executable.
2199     </para>
2200     <section id="targets"><title>Targets of <filename>rules</filename> file</title>
2201     <para>
2202     Every <filename>rules</filename> file, as any other
2203     <filename>Makefile</filename>, consists of several targets and their rules
2204 osamu 8628 specifying how to handle the source. <ulink url="&policy-debianrules;">Debian
2205 osamu 8601 Policy Manual, 4.9 'Main building script: debian/rules'</ulink> explains its
2206     details.
2207     </para>
2208     <para>
2209     The simplified explanation of targets are the following.
2210     </para>
2211     <itemizedlist>
2212     <listitem>
2213     <para>
2214     <literal>clean</literal> target: to clean all compiled, generated, and useless
2215     files in the build-tree. (required)
2216     </para>
2217     </listitem>
2218     <listitem>
2219     <para>
2220     <literal>build</literal> target: to build the source into compiled programs and
2221     formatted documents in the build-tree. (required)
2222     </para>
2223     </listitem>
2224     <listitem>
2225     <para>
2226     <literal>install</literal> target: to install files into a file tree for each
2227     binary package under the <filename>debian</filename> directory. If defined,
2228     <literal>binary*</literal> targets effectively depend on this target.
2229     (optional)
2230     </para>
2231     </listitem>
2232     <listitem>
2233     <para>
2234     <literal>binary</literal> target: to create all binary packages (effectively
2235     combination of <literal>binary-arch</literal> and
2236     <literal>binary-indep</literal> targets). (required)<footnote><para> This
2237 taffit-guest 8665 target is used by <literal>dpkg-buildpackage</literal> as in <xref linkend="completebuild"/>. </para> </footnote>
2238 osamu 8601 </para>
2239     </listitem>
2240     <listitem>
2241     <para>
2242     <literal>binary-arch</literal> target: to create arch-dependent
2243     (<literal>Architecture: any</literal>) binary packages in the parent directory.
2244     (required)<footnote><para> This target is used by <literal>dpkg-buildpackage
2245 taffit-guest 8665 -B</literal> as in <xref linkend="autobuilder"/>. </para> </footnote>
2246 osamu 8601 </para>
2247     </listitem>
2248     <listitem>
2249     <para>
2250     <literal>binary-indep</literal> target: to create arch-independent
2251     (<literal>Architecture: all</literal>) binary packages in the parent directory.
2252     (required)<footnote><para> This target is used by <literal>dpkg-buildpackage
2253     -A</literal>. </para> </footnote>
2254     </para>
2255     </listitem>
2256     <listitem>
2257     <para>
2258     <literal>get-orig-source</literal> target: to obtain the most recent version of
2259     the original source package from upstream archive site. (optional)
2260     </para>
2261     </listitem>
2262     </itemizedlist>
2263     <para>
2264     Rules that you want to execute are invoked as command line arguments (for
2265     example, <literal>./debian/rules build</literal> or <literal>fakeroot make -f
2266     debian/rules binary</literal>). After the target name, you can name the
2267     dependency, program or file that the rule depends on. After that, there can be
2268     any number of commands, indented with
2269     <literal><replaceable>TAB</replaceable></literal>. A new rule begins with the
2270     target declaration in the first column. Empty lines and lines beginning with
2271     <literal>#</literal> (hash) are treated as comments and ignored.
2272     </para>
2273     <para>
2274     You are probably confused now, but it will all be clear upon examination of the
2275     <filename>rules</filename> file that <command>dh_make</command> gives us as a
2276     default. You should also read <literal>info make</literal> for more
2277     information.
2278     </para>
2279     </section>
2280     <section id="defaultrules"><title>Default <filename>rules</filename> file</title>
2281     <para>
2282     Newer <command>dh_make</command> generates a very simple but powerful default
2283     <filename>rules</filename> file using the <command>dh</command> command:
2284     </para>
2285     <screen>
2286     1 #!/usr/bin/make -f
2287     2 # -*- makefile -*-
2288     3 # Sample debian/rules that uses debhelper.
2289     4 # This file was originally written by Joey Hess and Craig Small.
2290     5 # As a special exception, when this file is copied by dh-make into a
2291     6 # dh-make output file, you may use that output file without restriction.
2292     7 # This special exception was added by Craig Small in version 0.37 of dh-make.
2293     8
2294     9 # Uncomment this to turn on verbose mode.
2295     10 #export DH_VERBOSE=1
2296     11
2297     12 %:
2298     13 dh $@
2299     </screen>
2300     <para>
2301     (I've added the line numbers. In the actual <filename>rules</filename> file,
2302     the leading white spaces are TAB codes.)
2303     </para>
2304     <para>
2305     You are probably familiar with lines like line 1 from shell and Perl scripts.
2306     It tells the operating system that this file is to be processed with
2307     <filename>/usr/bin/make</filename>.
2308     </para>
2309     <para>
2310 taffit-guest 8665 Line 11 can be uncommented to set <literal>DH_VERBOSE</literal> variable to 1.
2311 osamu 8601 Then, the <command>dh</command> command will output which
2312     <command>dh_*</command> commands are executed by the <command>dh</command>
2313     command. You can also add <literal>export DH_OPTIONS=-v</literal> line here.
2314     Then each <command>dh_*</command> command will output which commands are
2315     executed by each <command>dh_*</command> command. This helps you to understand
2316     what exactly is going on behind this simple <filename>rules</filename> file and
2317     to debug its problems. This new <command>dh</command> is a core part of the
2318     <systemitem role="package">debhelper</systemitem> tools and does not hide
2319     anything from you.
2320     </para>
2321     <para>
2322     Lines 12 and 13 are where all the work is done. The percent sign means any
2323     targets which then call a single program, <command>dh</command> with the target
2324     name. <footnote><para> This uses the new <systemitem role="package">debhelper</systemitem> V7 features. Its design concepts are
2325 osamu 8628 explained in <ulink url="&debhelper-slides;">Not Your
2326 osamu 8601 Grandpa's Debhelper</ulink> presented at Debconf9 by the <systemitem role="package">debhelper</systemitem> upstream. Under
2327     <literal>lenny</literal>, <command>dh_make</command> created a much more
2328     complicated <filename>rules</filename> file with many <command>dh_*</command>
2329     scripts listed for each required explicit targets and frozen them to the state
2330     when it was initially packaged. This new <command>dh</command> command is
2331     simpler and frees us from this constrain. You still have full power to
2332 taffit-guest 8665 customize this with <literal>override_dh_*</literal> targets. See <xref linkend="customrules"/>. It is based only on the <systemitem role="package">debhelper</systemitem> package and does not obfuscate the
2333 osamu 8601 package building process like the <systemitem role="package">cdbs</systemitem>
2334     package. </para> </footnote> The <command>dh</command> command is a wrapper
2335     script which runs appropriate sequences of <command>dh_*</command> programs
2336     depending on its argument. <footnote><para> You can verify actual sequences of
2337     <command>dh_*</command> programs invoked for a given
2338     <literal><replaceable>target</replaceable></literal> as <literal>dh --no-act
2339     <replaceable>target</replaceable></literal> or <literal>debian/rules --
2340     '--no-act <replaceable>target</replaceable>'</literal> without really running
2341     them. </para> </footnote>
2342     </para>
2343     <itemizedlist>
2344     <listitem>
2345     <para>
2346     <literal>debian/rules clean</literal> runs <literal>dh clean</literal>; which
2347     in turn runs the following:
2348     </para>
2349     <screen>
2350     dh_testdir
2351     dh_auto_clean
2352     dh_clean
2353     </screen>
2354     </listitem>
2355     <listitem>
2356     <para>
2357     <literal>debian/rules build</literal> runs <literal>dh build</literal>; which
2358     in turn runs the following:
2359     </para>
2360     <screen>
2361     dh_testdir
2362     dh_auto_configure
2363     dh_auto_build
2364     dh_auto_test
2365     </screen>
2366     </listitem>
2367     <listitem>
2368     <para>
2369     <literal>fakeroot debian/rules binary</literal> runs <literal>fakeroot dh
2370     binary</literal>; which in turn runs the following<footnote><para> This assumes
2371     that the <systemitem role="package">python-support</systemitem> package is
2372     installed on the system. </para> </footnote>:
2373     </para>
2374     <screen>
2375     dh_testroot
2376     dh_prep
2377     dh_installdirs
2378     dh_auto_install
2379     dh_install
2380     dh_installdocs
2381     dh_installchangelogs
2382     dh_installexamples
2383     dh_installman
2384     dh_installcatalogs
2385     dh_installcron
2386     dh_installdebconf
2387     dh_installemacsen
2388     dh_installifupdown
2389     dh_installinfo
2390     dh_pysupport
2391     dh_installinit
2392     dh_installmenu
2393     dh_installmime
2394     dh_installmodules
2395     dh_installlogcheck
2396     dh_installlogrotate
2397     dh_installpam
2398     dh_installppp
2399     dh_installudev
2400     dh_installwm
2401     dh_installxfonts
2402     dh_bugfiles
2403     dh_lintian
2404     dh_gconf
2405     dh_icons
2406     dh_perl
2407     dh_usrlocal
2408     dh_link
2409     dh_compress
2410     dh_fixperms
2411     dh_strip
2412     dh_makeshlibs
2413     dh_shlibdeps
2414     dh_installdeb
2415     dh_gencontrol
2416     dh_md5sums
2417     dh_builddeb
2418     </screen>
2419     </listitem>
2420     <listitem>
2421     <para>
2422     <literal>fakeroot debian/rules binary-arch</literal> runs <literal>fakeroot dh
2423     binary-arch</literal>; which in turn runs the same sequence as
2424     <literal>fakeroot dh binary</literal> but with the <literal>-a</literal> option
2425     appended for each command.
2426     </para>
2427     </listitem>
2428     <listitem>
2429     <para>
2430     <literal>fakeroot debian/rules binary-indep</literal> runs <literal>fakeroot dh
2431     binary-indep</literal>; which in turn runs almost the same sequence as
2432     <literal>fakeroot dh binary</literal> but excluding
2433     <command>dh_strip</command>, <command>dh_makeshlibs</command>, and
2434     <command>dh_shlibdeps</command> with the <literal>-i</literal> option appended
2435     for each remaining command.
2436     </para>
2437     </listitem>
2438     </itemizedlist>
2439     <para>
2440     The function of <command>dh_*</command> commands are almost self-evident from
2441     their names. <footnote><para> For complete information on what do all these
2442     <command>dh_*</command> scripts exactly do, and what their other options are,
2443     please read their respective manual pages and the <systemitem role="package">debhelper</systemitem> documentation. </para> </footnote> There
2444     are few notable ones worth making (over)simplified explanation here assuming
2445     typical build environment based on <filename>Makefile</filename>.
2446     <footnote><para> These commands support other build environments such as
2447     <filename>setup.py</filename> which can be listed by executing
2448     <literal>dh_auto_build --list</literal> in a package source directory. </para>
2449     </footnote>
2450     </para>
2451     <itemizedlist>
2452     <listitem>
2453     <para>
2454     <command>dh_auto_clean</command> usually executes the following if
2455     <filename>Makefile</filename> exists with the <literal>distclean</literal>
2456     target. <footnote><para> It actually looks for the first available target of
2457     <literal>distclean</literal>, <literal>realclean</literal> or
2458     <literal>clean</literal> in <filename>Makefile</filename> and execute it.
2459     </para> </footnote>
2460     </para>
2461     <screen>
2462     make distclean
2463     </screen>
2464     </listitem>
2465     <listitem>
2466     <para>
2467     <command>dh_auto_configure</command> usually executes the following if
2468     <filename>./configure</filename> exists (arguments abbreviated for
2469     readability).
2470     </para>
2471     <screen>
2472     ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var ...
2473     </screen>
2474     </listitem>
2475     <listitem>
2476     <para>
2477     <command>dh_auto_build</command> usually executes the following to execute the
2478     first target of <filename>Makefile</filename> if it exists.
2479     </para>
2480     <screen>
2481     make
2482     </screen>
2483     </listitem>
2484     <listitem>
2485     <para>
2486     <command>dh_auto_test</command> usually executes the following if
2487     <filename>Makefile</filename> exists with the <literal>test</literal> target.
2488     <footnote><para> It actually looks for the first available target of
2489     <literal>test</literal> or <literal>check</literal> in
2490     <filename>Makefile</filename> and execute it. </para> </footnote>
2491     </para>
2492     <screen>
2493     make test
2494     </screen>
2495     </listitem>
2496     <listitem>
2497     <para>
2498     <command>dh_auto_install</command> usually executes the following if
2499     <filename>Makefile</filename> exists with the <literal>install</literal> target
2500     (line folded for readability).
2501     </para>
2502     <screen>
2503     make install \
2504     DESTDIR=<replaceable>/path/to</replaceable>/<replaceable>package</replaceable>_<replaceable>version</replaceable>-<replaceable>revision</replaceable>/debian/<replaceable>package</replaceable>
2505     </screen>
2506     </listitem>
2507     </itemizedlist>
2508     <para>
2509     Targets which require the <command>fakeroot</command> command contain
2510     <command>dh_testroot</command>. If you are not pretending to be root using
2511     this command, it exits with an error.
2512     </para>
2513     <para>
2514     The important part to know about the <filename>rules</filename> file created by
2515     <command>dh_make</command>, is that it is just a suggestion. It will work for
2516     most packages but for more complicated ones, don't be afraid to customize it to
2517     fit your needs. Only things that you must not change are the names of the
2518     rules, because all the tools use these names, as mandated by the Debian Policy.
2519     </para>
2520     <para>
2521     Although <literal>install</literal> is not required target, it is supported.
2522     <literal>fakeroot dh install</literal> behaves like <literal>fakeroot dh
2523     binary</literal> but stops after <command>dh_fixperms</command>.
2524     </para>
2525     </section>
2526     <section id="customrules"><title>Customization of <filename>rules</filename> file</title>
2527     <para>
2528     There are many ways to customize the <filename>rules</filename> file created
2529     with the new <command>dh</command> command.
2530     </para>
2531     <para>
2532     The <literal>dh $@</literal> command can be customized as follows.
2533     <footnote><para> If a package installs the
2534     <filename>/usr/share/perl5/Debian/Debhelper/Sequence/<replaceable>custom_name</replaceable>.pm</filename>
2535     file, you should activate its customization function by <literal>dh --with
2536     <replaceable>custom-name</replaceable> $@</literal>. </para> </footnote>
2537     </para>
2538     <itemizedlist>
2539     <listitem>
2540     <para>
2541     Add support of the <command>dh_pysupport</command> command. (The best choice
2542     for Python.) <footnote><para> Use of the <command>dh_pysupport</command>
2543     command is preferred over use of the <command>dh_pycentral</command> command.
2544     Do not use the <command>dh_python</command> command. </para> </footnote>
2545     </para>
2546     <itemizedlist>
2547     <listitem>
2548     <para>
2549     Install the <systemitem role="package">python-support</systemitem> package in
2550     <literal>Build-Depends</literal>.
2551     </para>
2552     </listitem>
2553     <listitem>
2554     <para>
2555     Use <literal>dh $@</literal> as usual. (This is enabled by default)
2556     </para>
2557     </listitem>
2558     <listitem>
2559     <para>
2560     This handles Python modules using the <systemitem role="package">python-support</systemitem> framework.
2561     </para>
2562     </listitem>
2563     </itemizedlist>
2564     </listitem>
2565     <listitem>
2566     <para>
2567     Add support of the <command>dh_pycentral</command> command.
2568     </para>
2569     <itemizedlist>
2570     <listitem>
2571     <para>
2572     Install the <systemitem role="package">python-central</systemitem> package in
2573     <literal>Build-Depends</literal>.
2574     </para>
2575     </listitem>
2576     <listitem>
2577     <para>
2578     Use <literal>dh --with python-central $@</literal> instead.
2579     </para>
2580     </listitem>
2581     <listitem>
2582     <para>
2583     This also deactivates the <command>dh_pysupport</command> command.
2584     </para>
2585     </listitem>
2586     <listitem>
2587     <para>
2588     This handles Python modules using the <systemitem role="package">python-central</systemitem> framework.
2589     </para>
2590     </listitem>
2591     </itemizedlist>
2592     </listitem>
2593     <listitem>
2594     <para>
2595     Add support of the <command>dh_installtex</command> command.
2596     </para>
2597     <itemizedlist>
2598     <listitem>
2599     <para>
2600     Install the <systemitem role="package">tex-common</systemitem> package in
2601     <literal>Build-Depends</literal>.
2602     </para>
2603     </listitem>
2604     <listitem>
2605     <para>
2606     Use <literal>dh --with tex $@</literal> instead.
2607     </para>
2608     </listitem>
2609     <listitem>
2610     <para>
2611     This registers Type 1 fonts, hyphenation patterns, or formats with TeX.
2612     </para>
2613     </listitem>
2614     </itemizedlist>
2615     </listitem>
2616     <listitem>
2617     <para>
2618     Add support of the <command>dh_quilt_patch</command> and
2619     <command>dh_quilt_unpatch</command> commands.
2620     </para>
2621     <itemizedlist>
2622     <listitem>
2623     <para>
2624     Install the <systemitem role="package">quilt</systemitem> package in
2625     <literal>Build-Depends</literal>.
2626     </para>
2627     </listitem>
2628     <listitem>
2629     <para>
2630     Use <literal>dh --with quilt $@</literal> instead.
2631     </para>
2632     </listitem>
2633     <listitem>
2634     <para>
2635     This applies and un-applies patches to the upstream source from files in the
2636     <filename>debian/patches</filename> directory for the <literal>1.0</literal>
2637     source package.
2638     </para>
2639     </listitem>
2640     <listitem>
2641     <para>
2642     This is not needed if you use the new <literal>3.0 (quilt)</literal> source
2643     package.
2644     </para>
2645     </listitem>
2646     </itemizedlist>
2647     </listitem>
2648     <listitem>
2649     <para>
2650     Add support of the <command>dh_dkms</command> command.
2651     </para>
2652     <itemizedlist>
2653     <listitem>
2654     <para>
2655     Install the <systemitem role="package">dkms</systemitem> package in
2656     <literal>Build-Depends</literal>.
2657     </para>
2658     </listitem>
2659     <listitem>
2660     <para>
2661     Use <literal>dh --with dkms $@</literal> instead.
2662     </para>
2663     </listitem>
2664     <listitem>
2665     <para>
2666     This correctly handles DKMS usage by the kernel module package.
2667     </para>
2668     </listitem>
2669     </itemizedlist>
2670     </listitem>
2671     <listitem>
2672     <para>
2673     Add support of the <command>dh_autotools-dev_updateconfig</command> and
2674     <command>dh_autotools-dev_restoreconfig</command> commands.
2675     </para>
2676     <itemizedlist>
2677     <listitem>
2678     <para>
2679     Install the <systemitem role="package">autotools-dev</systemitem> package in
2680     <literal>Build-Depends</literal>.
2681     </para>
2682     </listitem>
2683     <listitem>
2684     <para>
2685     Use <literal>dh --with autotools-dev $@</literal> instead.
2686     </para>
2687     </listitem>
2688     <listitem>
2689     <para>
2690     This updates and restores <filename>config.sub</filename> and
2691     <filename>config.guess</filename>.
2692     </para>
2693     </listitem>
2694     </itemizedlist>
2695     </listitem>
2696     <listitem>
2697     <para>
2698     Add support of the <command>dh_autoreconf</command> and
2699     <command>dh_autoreconf_clean</command> commands.
2700     </para>
2701     <itemizedlist>
2702     <listitem>
2703     <para>
2704     Install the <systemitem role="package">dh-autoreconf</systemitem> package in
2705     <literal>Build-Depends</literal>.
2706     </para>
2707     </listitem>
2708     <listitem>
2709     <para>
2710     Use <literal>dh --with autoreconf $@</literal> instead.
2711     </para>
2712     </listitem>
2713     <listitem>
2714     <para>
2715     This updates the GNU Build System files and restores them after the build.
2716     </para>
2717     </listitem>
2718     </itemizedlist>
2719     </listitem>
2720     <listitem>
2721     <para>
2722     Add support to the <command>bash</command> completion feature.
2723     </para>
2724     <itemizedlist>
2725     <listitem>
2726     <para>
2727     Install the <systemitem role="package">bash-completion</systemitem> package in
2728     <literal>Build-Depends</literal>.
2729     </para>
2730     </listitem>
2731     <listitem>
2732     <para>
2733     Use <literal>dh --with bash-completion $@</literal> instead.
2734     </para>
2735     </listitem>
2736     <listitem>
2737     <para>
2738     This installs <command>bash</command> completions using configuration file at
2739     <filename>debian/<replaceable>package</replaceable>.bash-completion</filename>.
2740     </para>
2741     </listitem>
2742     </itemizedlist>
2743     </listitem>
2744     </itemizedlist>
2745     <para>
2746     Many <command>dh_*</command> commands invoked by the new <command>dh</command>
2747     command can be customized by the corresponding configuration files in the
2748     <filename>debian</filename> directory. See <xref linkend="dother"/> and the
2749     manpage of each command for the customization of such features.
2750     </para>
2751     <para>
2752     Some <command>dh_*</command> commands invoked by the new <command>dh</command>
2753     command may require you to run it with some arguments or to run additional
2754     commands with them or to skip them. For such cases, you create an
2755     <literal>override_dh_<replaceable>foo</replaceable></literal> target with its
2756     rule in the <filename>rules</filename> file only for the
2757     <command>dh_<replaceable>foo</replaceable></command> command you want to
2758     change. It basically say <emphasis>run me instead</emphasis>.
2759     <footnote><para> Under <literal>lenny</literal>, if you wanted to change the
2760     behavior of a <command>dh_*</command> script you found the relevant line in the
2761     <filename>rules</filename> file and adjusted it. </para> </footnote>
2762     </para>
2763     <para>
2764     Please note that the <command>dh_auto_*</command> commands tend to do more than
2765     what has been discussed as (over)simplified explanation to take care all the
2766     corner cases. Use of simplified equivalent command instead of these in
2767     <literal>override_dh_*</literal> targets except the
2768     <literal>override_dh_auto_clean</literal> target is a bad idea since it may
2769     kill such <systemitem role="package">debhelper</systemitem>'s smart features.
2770     </para>
2771     <para>
2772 osamu 8650 If you want to store the system configuration data in the
2773 osamu 8601 <filename>/etc/gentoo</filename> directory instead of the usual
2774 osamu 8650 <filename>/etc</filename> directory for the recent
2775     <systemitem role="package">gentoo</systemitem> package using Autotools, you can override the default
2776 osamu 8601 <literal>--sysconfig=/etc</literal> argument given by the
2777     <command>dh_auto_configure</command> command to the
2778 osamu 8650 <command>./configure</command> command by the following.
2779 osamu 8601 </para>
2780     <screen>
2781     override_dh_auto_configure:
2782     dh_auto_configure -- --sysconfig=/etc/gentoo
2783     </screen>
2784     <para>
2785     The arguments given after <literal>--</literal> are appended to the default
2786     arguments of the auto-executed program to override them. Using the
2787     <command>dh_auto_configure</command> command is better than the
2788     <command>./configure</command> command here since it will only override the
2789     <literal>--sysconfig</literal> argument and keeps well intended other arguments
2790     to the <command>./configure</command> command.
2791     </para>
2792     <para>
2793     If <filename>Makefile</filename> of a source for <systemitem role="package">gentoo</systemitem> requires you to specify
2794     <literal>build</literal> as its target to build it <footnote><para>
2795     <command>dh_auto_build</command> without any arguments will execute the first
2796     target in the <filename>Makefile</filename> file. </para> </footnote>, you
2797     create an <literal>override_dh_auto_build</literal> target to enable it.
2798     </para>
2799     <screen>
2800     override_dh_auto_build:
2801     dh_auto_build -- build
2802     </screen>
2803     <para>
2804     This ensures to run $(MAKE) with all the default arguments given by the
2805     <command>dh_auto_build</command> command and <literal>build</literal> argument.
2806     </para>
2807     <para>
2808     If <filename>Makefile</filename> of a source for <systemitem role="package">gentoo</systemitem> requires you to specify the
2809     <literal>packageclean</literal> target to clean it for Debian package instead
2810     of the <literal>distclean</literal> or <literal>clean</literal> targets in the
2811     <filename>Makefile</filename> file, you create an
2812     <literal>override_dh_auto_clean</literal> target to enable it.
2813     </para>
2814     <screen>
2815     override_dh_auto_clean:
2816     $(MAKE) packageclean
2817     </screen>
2818     <para>
2819     If <filename>Makefile</filename> of a source for <systemitem role="package">gentoo</systemitem> contains <literal>test</literal> target
2820     which you do not want to run for the Debian package building process, you can
2821     use empty <literal>override_dh_auto_test</literal> target to skip it.
2822     </para>
2823     <screen>
2824     override_dh_auto_test:
2825     </screen>
2826     <para>
2827     If <systemitem role="package">gentoo</systemitem> has an unusual upstream
2828     changelog file called <filename>FIXES</filename>,
2829     <command>dh_installchangelogs</command> will not install that file by default.
2830     The <command>dh_installchangelogs</command> command requires
2831     <filename>FIXES</filename> as its argument to install it. <footnote><para> The
2832     <filename>debian/changelog</filename> and <filename>debian/NEWS</filename>
2833     files are always automatically installed. The upstream changelog is searched
2834     by converting filenames to the lower case and matching them with the
2835     <filename>changelog</filename>, <filename>changes</filename>,
2836     <filename>changelog.txt</filename>, and <filename>changes.txt</filename>.
2837     </para> </footnote>
2838     </para>
2839     <screen>
2840     override_dh_installchangelogs:
2841     dh_installchangelogs FIXES
2842     </screen>
2843     <para>
2844     When you use the new <command>dh</command> command, use of explicit targets
2845     such as the ones listed in <xref linkend="targets"/> except
2846     <literal>get-orig-source</literal> target may make it difficult to understand
2847     their exact effects. Please limit explicit targets to
2848     <literal>override_dh_*</literal> targets and completely independent ones, if
2849     possible.
2850     </para>
2851     </section>
2852     </section>
2853     </chapter>
2854     <chapter id="dother"><title>Other files under the <filename>debian</filename> directory</title>
2855     <para>
2856     To control most of what <systemitem role="package">debhelper</systemitem> does
2857     while building the package, you put optional configuration files under the
2858     <filename>debian</filename> directory. This chapter will make an overview of
2859 osamu 8628 what each of these does and its format. Please read <ulink url="&debian-policy;">Debian Policy
2860     Manual</ulink> and <ulink url="&developers-reference;">Debian Developer's
2861 osamu 8601 Reference</ulink> for guidelines for the packaging.
2862     </para>
2863     <para>
2864     The <command>dh_make</command> command will create some template configuration
2865     files under the <filename>debian</filename> directory. Most of them come with
2866     filenames suffixed by <literal>.ex</literal>. Some of them come with filenames
2867     prefixed by the binary package name such as
2868     <literal><replaceable>package</replaceable></literal>. Take a look at all of
2869     them.
2870 osamu 8668 <footnote><para>
2871     In this chapter, files in the <filename>debian</filename> directory are
2872     referred without preceding <filename>debian/</filename> for simplicity whenever
2873     they are obvious.
2874     </para></footnote>
2875 osamu 8601 </para>
2876     <para>
2877     The <command>dh_make</command> command may not create some template
2878     configuration files for <systemitem role="package">debhelper</systemitem>. In
2879     such cases, you need to create them with the editor.
2880     </para>
2881     <para>
2882     If you wish or need to activate any of those, please do the following.
2883     </para>
2884     <itemizedlist>
2885     <listitem>
2886     <para>
2887     rename template files by removing the <literal>.ex</literal> or
2888     <literal>.EX</literal> suffix if the template files have one.
2889     </para>
2890     </listitem>
2891     <listitem>
2892     <para>
2893     rename the name of these configuration files using the actual binary package
2894     name in place of <literal><replaceable>package</replaceable></literal>.
2895     </para>
2896     </listitem>
2897     <listitem>
2898     <para>
2899     modify template file contents to suit your needs.
2900     </para>
2901     </listitem>
2902     <listitem>
2903     <para>
2904     remove template files which you do not need.
2905     </para>
2906     </listitem>
2907     <listitem>
2908     <para>
2909 taffit-guest 8665 modify the <filename>control</filename> file (see <xref linkend="control"/>),
2910 osamu 8601 if necessary.
2911     </para>
2912     </listitem>
2913     <listitem>
2914     <para>
2915 taffit-guest 8665 modify the <filename>rules</filename> file (see <xref linkend="rules"/>), if
2916 osamu 8601 necessary.
2917     </para>
2918     </listitem>
2919     </itemizedlist>
2920     <para>
2921     Those <systemitem role="package">debhelper</systemitem> configuration files
2922     without <filename><replaceable>package</replaceable></filename> prefix such as
2923     <filename>install</filename> apply to the first binary package. When there are
2924     many binary packages, their configurations can be specified by prefixing their
2925     name to their configuration filenames such as
2926     <filename><replaceable>package-1</replaceable>.install</filename>,
2927     <filename><replaceable>package-2</replaceable>.install</filename>, etc.
2928     </para>
2929     <section id="readme"><title><filename>README.Debian</filename> file</title>
2930     <para>
2931     Any extra details or discrepancies between the original package and your Debian
2932     version should be documented here.
2933     </para>
2934     <para>
2935     <command>dh_make</command> created a default one, this is what it looks like:
2936     </para>
2937     <screen>
2938     gentoo for Debian
2939     -----------------
2940     &lt;possible notes regarding this package - if none, delete this file&gt;
2941     -- Josip Rodin &lt;joy-mg@debian.org&gt;, Wed, 11 Nov 1998 21:02:14 +0100
2942     </screen>
2943     <para>
2944     If you have nothing to be documented, remove this file. See <citerefentry>
2945     <refentrytitle>dh_installdocs</refentrytitle> <manvolnum>1</manvolnum>
2946     </citerefentry>.
2947     </para>
2948     </section>
2949     <section id="compat"><title><filename>compat</filename> file</title>
2950     <para>
2951     The <filename>compat</filename> file defines the <systemitem role="package">debhelper</systemitem> compatibility level. Currently, you
2952     should set it to the <systemitem role="package">debhelper</systemitem> V7 by
2953     the following.
2954     </para>
2955     <screen>
2956     $ echo 7 &gt; debian/compat
2957     </screen>
2958     </section>
2959     <section id="conffiles"><title><filename>conffiles</filename> file</title>
2960     <para>
2961     One of the most annoying things about software is when you spend a great deal
2962     of time and effort customizing a program, only to have an upgrade stomp all
2963 osamu 8622 over your changes. Debian solves this problem by marking such configuration files as conffiles.
2964     <footnote><para>See <citerefentry> <refentrytitle>dpkg</refentrytitle>
2965     <manvolnum>1</manvolnum> </citerefentry> and
2966 osamu 8628 <ulink url="&policy-conffiles;">Debian Policy Manual 'D.2.5 Conffiles'</ulink>.
2967 osamu 8622 </para></footnote>
2968     When you upgrade a package, you'll be prompted whether you want to keep
2969     your old configuration files or not.
2970 osamu 8601 </para>
2971     <para>
2972     Since <systemitem role="package">debhelper</systemitem> V3, <citerefentry>
2973     <refentrytitle>dh_installdeb</refentrytitle> <manvolnum>1</manvolnum>
2974     </citerefentry> will <emphasis>automatically</emphasis> flag any files under
2975     the <filename>/etc</filename> directory as conffiles, so if your program only
2976     has conffiles there you do not need to specify them in this file. For most
2977     package types, the only place there is (and should be conffiles) is under
2978     <filename>/etc</filename> and so this file doesn't need to exist.
2979     </para>
2980     <para>
2981     If your program uses configuration files but also rewrites them on its own,
2982     it's best not to make them as conffiles because <command>dpkg</command> will
2983     then prompt users to verify the changes all the time.
2984     </para>
2985     <para>
2986     If the program you're packaging requires every user to modify the configuration
2987     files in the <filename>/etc</filename> directory, there are 2 popular ways to
2988     make them not as conffiles to keep <command>dpkg</command> quiet.
2989     </para>
2990     <itemizedlist>
2991     <listitem>
2992     <para>
2993     You make a symlink under the <filename>/etc</filename> directory pointing to a
2994     file under the <filename>/var</filename> directory generated by the
2995     <emphasis>maintainer scripts</emphasis>.
2996     </para>
2997     </listitem>
2998     <listitem>
2999     <para>
3000     You make a file generated by the <emphasis>maintainer scripts</emphasis> under
3001     the <filename>/etc</filename> directory.
3002     </para>
3003     </listitem>
3004     </itemizedlist>
3005     <para>
3006 taffit-guest 8665 For more information on the <emphasis>maintainer scripts</emphasis>, see <xref linkend="maintscripts"/>.
3007 osamu 8601 </para>
3008     </section>
3009     <section id="crond"><title><filename><replaceable>package</replaceable>.cron.*</filename> files</title>
3010     <para>
3011     If your package requires regularly scheduled tasks to operate properly, you can
3012     use this file to set it up. You can either setup regular tasks that happen
3013     hourly, daily, weekly or monthly or alternatively happen any other time that
3014     you wish. The filenames are:
3015     </para>
3016     <itemizedlist>
3017     <listitem>
3018     <para>
3019     <filename>cron.hourly</filename> - Installed as
3020     <filename>/etc/cron.hourly/<replaceable>package</replaceable></filename>: run
3021     once an hour every hour.
3022     </para>
3023     </listitem>
3024     <listitem>
3025     <para>
3026     <filename>cron.daily</filename> - Installed as
3027     <filename>/etc/cron.daily/<replaceable>package</replaceable></filename>: run
3028     once a day, usually early morning.
3029     </para>
3030     </listitem>
3031     <listitem>
3032     <para>
3033     <filename>cron.weekly</filename> - Installed as
3034     <filename>/etc/cron.weekly/<replaceable>package</replaceable></filename>: run
3035     once a week, usually early Sunday morning.
3036     </para>
3037     </listitem>
3038     <listitem>
3039     <para>
3040     <filename>cron.monthly</filename> - Installed as
3041     <filename>/etc/cron.monthly/<replaceable>package</replaceable></filename>: run
3042     once a month, usually early morning on the first of the month.
3043     </para>
3044     </listitem>
3045     <listitem>
3046     <para>
3047     <filename>cron.d</filename> - Installed as
3048     <filename>/etc/cron.d/<replaceable>package</replaceable></filename>: for any
3049     other time
3050     </para>
3051     </listitem>
3052     </itemizedlist>
3053     <para>
3054     For the named files, the format of them is the shell script. The different one
3055     is <filename><replaceable>package</replaceable>.cron.d</filename> which follows
3056     the format of <citerefentry> <refentrytitle>crontab</refentrytitle>
3057     <manvolnum>5</manvolnum> </citerefentry>.
3058     </para>
3059     <para>
3060     Note that this doesn't include log rotation; for that, see <citerefentry>
3061     <refentrytitle>dh_installlogrotate</refentrytitle> <manvolnum>1</manvolnum>
3062     </citerefentry> and <citerefentry> <refentrytitle>logrotate</refentrytitle>
3063     <manvolnum>8</manvolnum> </citerefentry>.
3064     </para>
3065     </section>
3066     <section id="dirs"><title><filename>dirs</filename> file</title>
3067     <para>
3068     This file specifies the directories which we need but the normal installation
3069     procedure (<literal>make install DESTDIR=...</literal> invoked by
3070     <literal>dh_auto_install</literal>) somehow doesn't create. This generally
3071     means there is a problem with the <filename>Makefile</filename>.
3072     </para>
3073     <para>
3074     Files listed in the <filename>install</filename> file doesn't need the
3075 taffit-guest 8665 directories created first. See <xref linkend="install"/>.
3076 osamu 8601 </para>
3077     <para>
3078 osamu 8652 It is best to try to run the installation first and only use this if you
3079 osamu 8622 run into trouble. There is no preceding slash on the directory names listed in
3080     the <filename>dirs</filename> file.
3081 osamu 8601 </para>
3082     </section>
3083     <section id="doc-base"><title><filename><replaceable>package</replaceable>.doc-base</filename> file</title>
3084     <para>
3085     If your package has documentation other than manual pages and info docs, you
3086     should use the <systemitem role="package">doc-base</systemitem> file to
3087     register it, so the user can find it with e.g. <citerefentry>
3088     <refentrytitle>dhelp</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>,
3089     <citerefentry> <refentrytitle>dwww</refentrytitle> <manvolnum>1</manvolnum>
3090     </citerefentry> or <citerefentry> <refentrytitle>doccentral</refentrytitle>
3091     <manvolnum>1</manvolnum> </citerefentry>.
3092     </para>
3093     <para>
3094     This usually includes HTML, PS and PDF files, shipped in
3095     <filename>/usr/share/doc/<replaceable>packagename</replaceable>/</filename>.
3096     </para>
3097     <para>
3098     This is how <systemitem role="package">gentoo</systemitem>'s doc-base file
3099     <filename>gentoo.doc-base</filename> looks like:
3100     </para>
3101     <screen>
3102     Document: gentoo
3103     Title: Gentoo Manual
3104     Author: Emil Brink
3105     Abstract: This manual describes what Gentoo is, and how it can be used.
3106     Section: File Management
3107     Format: HTML
3108     Index: /usr/share/doc/gentoo/html/index.html
3109     Files: /usr/share/doc/gentoo/html/*.html
3110     </screen>
3111     <para>
3112     For information on the file format, see <citerefentry>
3113     <refentrytitle>install-docs</refentrytitle> <manvolnum>8</manvolnum>
3114     </citerefentry> and the <systemitem role="package">doc-base</systemitem>
3115 osamu 8639 manual, in <ulink url="&doc-base;">Debian doc-base Manual</ulink>.
3116 osamu 8601 </para>
3117     <para>
3118 taffit-guest 8665 For more details on installing additional documentation, look in <xref linkend="destdir"/>.
3119 osamu 8601 </para>
3120     </section>
3121     <section id="docs"><title><filename>docs</filename> file</title>
3122     <para>
3123     This file specifies the file names of documentation files we can have
3124     <citerefentry> <refentrytitle>dh_installdocs</refentrytitle>
3125     <manvolnum>1</manvolnum> </citerefentry> install into the temporary directory
3126     for us.
3127     </para>
3128     <para>
3129     By default, it will include all existing files in the top-level source
3130     directory that are called <filename>BUGS</filename>,
3131     <filename>README*</filename>, <filename>TODO</filename> etc.
3132     </para>
3133     <para>
3134     For <systemitem role="package">gentoo</systemitem>, I also included some other
3135     files:
3136     </para>
3137     <screen>
3138     BUGS
3139     CONFIG-CHANGES
3140     CREDITS
3141     NEWS
3142     README
3143     README.gtkrc
3144     TODO
3145     </screen>
3146     </section>
3147     <section id="emacsen"><title><filename>emacsen-*</filename> file</title>
3148     <para>
3149     If your package supplies Emacs files that can be bytecompiled at package
3150     installation time, you can use these files to set it up.
3151     </para>
3152     <para>
3153     They are installed into the temporary directory by <citerefentry>
3154     <refentrytitle>dh_installemacsen</refentrytitle> <manvolnum>1</manvolnum>
3155     </citerefentry>.
3156     </para>
3157     <para>
3158     If you don't need these, remove them.
3159     </para>
3160     </section>
3161     <section id="examples"><title><filename><replaceable>package</replaceable>.examples</filename> file</title>
3162     <para>
3163     The <citerefentry> <refentrytitle>dh_installexamples</refentrytitle>
3164     <manvolnum>1</manvolnum> </citerefentry> command installs files and directories
3165     listed in this file as example files.
3166     </para>
3167     </section>
3168     <section id="initd"><title><filename><replaceable>package</replaceable>.init</filename> and <filename><replaceable>package</replaceable>.default</filename> files</title>
3169     <para>
3170     If your package is a daemon that needs to be run at the system start-up, you've
3171     obviously disregarded my initial recommendation, haven't you? :-)
3172     </para>
3173     <para>
3174     The <filename><replaceable>package</replaceable>.init</filename> file is
3175     installed as the
3176 osamu 8668 <filename>/etc/init.d/<replaceable>package</replaceable></filename> script
3177     for the <emphasis>init script</emphasis> which starts and stops a daemon.
3178 osamu 8601 Its fairly generic skeleton template is provided by the
3179     <command>dh_make</command> command as <filename>init.d.ex</filename>. You'll
3180     likely have to rename and edit it, a lot, while making sure to provide
3181 osamu 8642 <ulink url="&lsb;">Linux Standard Base</ulink> (LSB) compliant headers. It
3182 osamu 8601 gets installed into the temporary directory by <citerefentry>
3183     <refentrytitle>dh_installinit</refentrytitle> <manvolnum>1</manvolnum>
3184     </citerefentry>.
3185     </para>
3186     <para>
3187     The <filename><replaceable>package</replaceable>.default</filename> file will
3188     be installed into
3189     <filename>/etc/default/<replaceable>package</replaceable></filename>. This
3190 osamu 8668 file sets defaults that are sourced by the <emphasis>init script</emphasis>. Most times this
3191     <filename><replaceable>package</replaceable>.default</filename> file is used to disable running a daemon, set some default flags or
3192     timeouts. If your <emphasis>init script</emphasis> has certain <emphasis>settable</emphasis>
3193     features you want to install these into the <filename><replaceable>package</replaceable>.default</filename> file, not the <emphasis>init script</emphasis>.
3194 osamu 8601 </para>
3195     <para>
3196 osamu 8680 If your upstream program provides a file for the <emphasis>init script</emphasis>, you can either use it or not. If you
3197 osamu 8668 don't use their <emphasis>init script</emphasis> then create a new one in
3198     <filename><replaceable>package</replaceable>.init</filename>. However
3199     if the upstream <emphasis>init script</emphasis> looks fine and installs in the right place you
3200 osamu 8601 still need to setup the <filename>rc*</filename> symlinks. To do this you will
3201     need to override <command>dh_installinit</command> in the
3202     <filename>rules</filename> file with the following lines:
3203     </para>
3204     <screen>
3205     override_dh_installinit:
3206     dh_installinit --onlyscripts
3207     </screen>
3208     <para>
3209     If you don't need this, remove the files.
3210     </para>
3211     </section>
3212     <section id="install"><title><filename>install</filename> file</title>
3213     <para>
3214     If there are files that need to be installed into your package but your
3215     standard <literal>make install</literal> won't do it, you put the filenames and
3216     destinations into this <filename>install</filename> file. They are installed
3217     by <citerefentry> <refentrytitle>dh_install</refentrytitle>
3218     <manvolnum>1</manvolnum> </citerefentry>.<footnote><para> This replaces the
3219     deprecated <citerefentry> <refentrytitle>dh_movefiles</refentrytitle>
3220     <manvolnum>1</manvolnum> </citerefentry> command which is configured by the
3221     <filename>files</filename> file. </para> </footnote> You should first check
3222     there is not a more specific tool to use. For example, documents should be in
3223     the <filename>docs</filename> file and not in this one.
3224     </para>
3225     <para>
3226     This <filename>install</filename> file has one line per file installed, with
3227     the name of the file (relative to the top build directory) then a space then
3228     the installation directory (relative to the install directory). One example of
3229     where this is used is where a binary is forgotten to be installed, the
3230     <filename>install</filename> file would look like:
3231     </para>
3232     <screen>
3233     src/foo/mybin usr/bin
3234     </screen>
3235     <para>
3236     This will mean when this package is installed, there will be a binary file
3237     <filename>/usr/bin/mybin</filename>.
3238     </para>
3239     <para>
3240     Alternatively, this <filename>install</filename> can have the name of the file
3241     only without the installation directory when the relative directory path does
3242     not change. This format is usually used for a large package that splits build
3243     result into multiple binary packages using
3244     <filename><replaceable>package-1</replaceable>.install</filename>,
3245     <filename><replaceable>package-2</replaceable>.install</filename>, etc.
3246     </para>
3247     <para>
3248     The <command>dh_install</command> command will fall back to look in
3249     <filename>debian/tmp</filename> for files, if it doesn't find them in the
3250     current directory (or wherever you've told it to look using
3251     <literal>--sourcedir</literal>).
3252     </para>
3253     </section>
3254     <section id="info"><title><filename><replaceable>package</replaceable>.info</filename> file</title>
3255     <para>
3256     If your package has info pages, you should install them using <citerefentry>
3257     <refentrytitle>dh_installinfo</refentrytitle> <manvolnum>1</manvolnum>
3258     </citerefentry> by listing them in the
3259     <filename><replaceable>package</replaceable>.info</filename> files.
3260     </para>
3261     </section>
3262     <section id="lintian"><title><filename>{<replaceable>package</replaceable>.|source/}lintian-overrides</filename> files</title>
3263     <para>
3264     If <systemitem role="package">lintian</systemitem> reports an erroneous
3265     diagnostics for a case when the policy allows exceptions to some rule, you can
3266     use <filename><replaceable>package</replaceable>.lintian-overrides</filename>
3267     or <filename>source/lintian-overrides</filename> to quiet it. Please read
3268 osamu 8639 <ulink url="&lintian-doc;">Lintian User's Manual</ulink> and refrain
3269 osamu 8601 from abusing this.
3270     </para>
3271     <para>
3272     <filename><replaceable>package</replaceable>.lintian-overrides</filename> is
3273     for the binary package named as <systemitem role="package"><replaceable>package</replaceable></systemitem> and is installed
3274     into
3275     <filename>usr/share/lintian/overrides/<replaceable>package</replaceable></filename>
3276     by the <command>dh_lintian</command> command.
3277     </para>
3278     <para>
3279     <filename>source/lintian-overrides</filename> is for the source package. This
3280     is not installed.
3281     </para>
3282     </section>
3283     <section id="manpage"><title><filename>manpage.*</filename> files</title>
3284     <para>
3285     Your program(s) should have a manual page. If they don't, you should create
3286     them. The <command>dh_make</command> command creates few template files for a
3287     manual page. These need to be copied and edited for each command without its
3288     manual page. Please make sure to remove unused templates.
3289     </para>
3290     <section id="manpage1"><title><filename>manpage.1.ex</filename> file</title>
3291     <para>
3292     Manual pages are normally written in <citerefentry>
3293     <refentrytitle>nroff</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>.
3294     The <filename>manpage.1.ex</filename> template is written in
3295     <command>nroff</command>, too. See the <citerefentry>
3296     <refentrytitle>man</refentrytitle> <manvolnum>7</manvolnum> </citerefentry>
3297     manual page for a brief description of how to edit such a file.
3298     </para>
3299     <para>
3300     The final manual page file name should include the name of the program it is
3301     documenting, so we will rename it from <literal>manpage</literal> to
3302     <literal>gentoo</literal>. The file name also includes <literal>.1</literal>
3303     as the first suffix, which means it's a manual page for a user command. Be
3304     sure to verify that this section is indeed the correct one. Here's a short
3305     list of manual page sections:
3306     </para>
3307 osamu 8636 <table id="manpage-sections" pgwide="0" frame="topbot" rowsep="1" colsep="1">
3308     <title>manual page sections</title>
3309     <tgroup cols="3">
3310     <colspec colwidth="8*" align="left"/> <colspec colwidth="24*" align="left"/> <colspec colwidth="40*" align="left"/>
3311     <thead>
3312     <row> <entry>Section</entry> <entry>Description</entry> <entry>Notes</entry> </row>
3313     </thead>
3314     <tbody>
3315     <row> <entry>1</entry> <entry>User command</entry> <entry>Executable commands or scripts</entry> </row>
3316     <row> <entry>2</entry> <entry>System calls</entry> <entry>Functions provided by the kernel</entry> </row>
3317     <row> <entry>3</entry> <entry>Library calls</entry> <entry>Functions within system libraries</entry> </row>
3318 taffit-guest 8665 <row> <entry>4</entry> <entry>Special files</entry> <entry>Usually found in <filename>/dev</filename></entry> </row>
3319 osamu 8636 <row> <entry>5</entry> <entry>File formats</entry> <entry>E.g. <filename>/etc/passwd</filename>'s format</entry> </row>
3320     <row> <entry>6</entry> <entry>Games</entry> <entry>Games or other frivolous programs</entry> </row>
3321 taffit-guest 8665 <row> <entry>7</entry> <entry>Macro packages</entry> <entry>Such as <command>man</command> macros</entry> </row>
3322 osamu 8636 <row> <entry>8</entry> <entry>System administration</entry> <entry>Programs typically only run by root</entry> </row>
3323     <row> <entry>9</entry> <entry>Kernel routines</entry> <entry>Non-standard calls and internals</entry> </row>
3324     </tbody>
3325     </tgroup>
3326     </table>
3327 osamu 8601 <para>
3328     So <systemitem role="package">gentoo</systemitem>'s man page should be called
3329     <filename>gentoo.1</filename>. If there was no <filename>gentoo.1</filename>
3330     man page in the original source, you should create it by renaming the
3331     <filename>manpage.1.ex</filename> template to <filename>gentoo.1</filename> and
3332     edit it by using information from the example and from upstream docs.
3333     </para>
3334     <para>
3335     You can use the <command>help2man</command> command to generate a man page out
3336     of <literal>--help</literal> and <literal>--version</literal> output of each
3337     program, too. <footnote><para> If the command is missing
3338     <command>info</command> page but have documentation files in the
3339     <filename>/usr/share/<replaceable>package</replaceable></filename> directory,
3340     you should manually edit generated the man page created by the
3341     <command>help2man</command> command. </para> </footnote>
3342     </para>
3343     </section>
3344     <section id="manpagesgml"><title><filename>manpage.sgml.ex</filename> file</title>
3345     <para>
3346     If on the other hand you prefer writing SGML instead of
3347     <command>nroff</command>, you can use the <filename>manpage.sgml.ex</filename>
3348     template. If you do this, you have to:
3349     </para>
3350     <itemizedlist>
3351     <listitem>
3352     <para>
3353     rename the file to something like <filename>gentoo.sgml</filename>.
3354     </para>
3355     </listitem>
3356     <listitem>
3357     <para>
3358     install the <systemitem role="package">docbook-to-man</systemitem> package
3359     </para>
3360     </listitem>
3361     <listitem>
3362     <para>
3363     add <literal>docbook-to-man</literal> to the <literal>Build-Depends</literal>
3364     line in the <filename>control</filename> file
3365     </para>
3366     </listitem>
3367     <listitem>
3368     <para>
3369     add a <literal>override_dh_auto_build</literal> target to your
3370     <filename>rules</filename> file:
3371     </para>
3372     <screen>
3373     override_dh_auto_build:
3374     docbook-to-man debian/gentoo.sgml &gt; debian/gentoo.1
3375     dh_auto_build
3376     </screen>
3377     </listitem>
3378     </itemizedlist>
3379     </section>
3380     <section id="manpagexml"><title><filename>manpage.xml.ex</filename> file</title>
3381     <para>
3382     If you prefer XML over SGML, you can use the <literal>manpage.xml.ex</literal>
3383     template. If you do this, you have to:
3384     </para>
3385     <itemizedlist>
3386     <listitem>
3387     <para>
3388     rename the source file to something like <literal>gentoo.1.xml</literal>
3389     </para>
3390     </listitem>
3391     <listitem>
3392     <para>
3393     install the <systemitem role="package">docbook-xsl</systemitem> package and an
3394     XSLT processor like <systemitem role="package">xsltproc</systemitem>
3395     (recommended)
3396     </para>
3397     </listitem>
3398     <listitem>
3399     <para>
3400     add the <literal>docbook-xsl</literal>, <literal>docbook-xml</literal> and
3401     <literal>xsltproc</literal> packages to the <literal>Build-Depends</literal>
3402     line in the <literal>control</literal> file
3403     </para>
3404     </listitem>
3405     <listitem>
3406     <para>
3407     add a <literal>override_dh_auto_build</literal> target to your
3408     <filename>rules</filename> file:
3409     </para>
3410     <screen>
3411     override_dh_auto_build:
3412     xsltproc --nonet \
3413     --param make.year.ranges 1 \
3414     --param make.single.year.ranges 1 \
3415     --param man.charmap.use.subset 0 \
3416     -o debian/ \
3417     http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl\
3418     debian/gentoo.1.xml
3419     dh_auto_build
3420     </screen>
3421     </listitem>
3422     </itemizedlist>
3423     </section>
3424     </section>
3425     <section id="manpages"><title><filename><replaceable>package</replaceable>.manpages</filename> file</title>
3426     <para>
3427     If your package has manual pages, you should install them using <citerefentry>
3428     <refentrytitle>dh_installman</refentrytitle> <manvolnum>1</manvolnum>
3429     </citerefentry> by listing them in the
3430     <filename><replaceable>package</replaceable>.manpages</filename> files.
3431     </para>
3432     <para>
3433 osamu 8621 To install <filename>docs/gentoo.1</filename> for the <systemitem role="package">gentoo</systemitem> package as its manpage, you create a
3434 osamu 8650 <filename>gentoo.manpages</filename> file as the following.
3435 osamu 8601 </para>
3436     <screen>
3437     docs/gentoo.1
3438     </screen>
3439     </section>
3440     <section id="menu"><title><filename>menu</filename> file</title>
3441     <para>
3442     X Window System users usually have a window manager with a menu that can be
3443     customized to launch programs. If they have installed the Debian <systemitem role="package">menu</systemitem> package, a set of menus for every program on
3444     the system will be created for them.
3445     </para>
3446     <para>
3447     Here's the default <filename>menu.ex</filename> file that
3448 osamu 8650 <command>dh_make</command> created.
3449 osamu 8601 </para>
3450     <screen>
3451     ?package(gentoo):needs=X11|text|vc|wm \
3452     section=Applications/see-menu-manual\
3453     title=gentoo command=/usr/bin/gentoo
3454     </screen>
3455     <para>
3456     The first field after the colon character is <literal>needs</literal>, and it
3457     specifies what kind of interface the program needs. Change this to one of the
3458     listed alternatives, e.g. <literal>text</literal> or <literal>X11</literal>.
3459     </para>
3460     <para>
3461 osamu 8652 The next is <literal>section</literal>, where the menu and submenu entry
3462 osamu 8642 should appear in.
3463     <footnote><para> The current list of sections is at
3464     <ulink url="&menu-structure;">The Debian Menu sub-policy 2.1 'Preferred menu structure'</ulink>.
3465     There were a major reorganization of menu structure for <literal>squeeze</literal>.
3466     </para> </footnote>
3467 osamu 8601 </para>
3468     <para>
3469     The <literal>title</literal> field is the name of the program. You can start
3470     this one in uppercase if you like. Just keep it short.
3471     </para>
3472     <para>
3473     Finally, the <literal>command</literal> field is the command that runs the
3474     program.
3475     </para>
3476     <para>
3477     Let's change the file name to <filename>menu</filename> and change the menu
3478     entry to this:
3479     </para>
3480     <screen>
3481     ?package(gentoo): needs=X11 \
3482     section=Applications/Tools \
3483     title=Gentoo command=gentoo
3484     </screen>
3485     <para>
3486     You can also add other fields like <literal>longtitle</literal>,
3487     <literal>icon</literal>, <literal>hints</literal> etc. See <citerefentry>
3488     <refentrytitle>dh_installmenu</refentrytitle> <manvolnum>1</manvolnum>
3489     </citerefentry>, <citerefentry> <refentrytitle>menufile</refentrytitle>
3490     <manvolnum>5</manvolnum> </citerefentry>, <citerefentry>
3491     <refentrytitle>update-menus</refentrytitle> <manvolnum>1</manvolnum>
3492 osamu 8639 </citerefentry> and
3493     <ulink url="&menu-policy;">The Debian Menu sub-policy</ulink> for more
3494 osamu 8601 information.
3495     </para>
3496     </section>
3497     <section id="news"><title><filename>NEWS</filename> file</title>
3498     <para>
3499     The <citerefentry> <refentrytitle>dh_installchangelogs</refentrytitle>
3500     <manvolnum>1</manvolnum> </citerefentry> command installs this.
3501     </para>
3502     </section>
3503     <section id="maintscripts"><title><filename>{post|pre}{inst|rm}</filename> files</title>
3504     <para>
3505     These <filename>postinst</filename>, <filename>preinst</filename>,
3506     <filename>postrm</filename>, and <filename>prerm</filename> files
3507     <footnote><para> Although I used Bash short hand expression to indicate these
3508     files as <filename>{post|pre}{inst|rm}</filename> here, I recommend you to use
3509     pure POSIX (non-Bash) shell for these <emphasis>maintainer scripts</emphasis>
3510     as much as possible for the better compatibility. </para> </footnote> are
3511     called <emphasis>maintainer scripts</emphasis>. They are scripts which are put
3512     in the control area of the package and run by <command>dpkg</command> when your
3513     package is installed, upgraded or removed.
3514     </para>
3515     <para>
3516     As a novice maintainer, you should avoid any manual editing of
3517     <emphasis>maintainer scripts</emphasis> because they are problematic. For more
3518 osamu 8628 information look in the <ulink url="&policy-mantainerscripts;">Debian
3519 osamu 8601 Policy Manual, 6 'Package maintainer scripts and installation
3520     procedure'</ulink>, and take a look at these example files provided by
3521     <command>dh_make</command>.
3522     </para>
3523     <para>
3524     If you did not listen to me and made your custom <emphasis>maintainer
3525     scripts</emphasis> for a package, you should make sure to test them not only
3526     for <emphasis role="strong">install</emphasis> and <emphasis role="strong">upgrade</emphasis> but also for <emphasis role="strong">remove</emphasis> and <emphasis role="strong">purge</emphasis>.
3527     </para>
3528     <para>
3529     Upgrades to the new version should be silent and non-intrusive (existing users
3530     should not notice the upgrade except by discovering that old bugs have been
3531     fixed and there perhaps are new features).
3532     </para>
3533     <para>
3534     When the upgrade is necessarily intrusive (eg., config files scattered through
3535     various home directories with totally different structure), you may consider to
3536     set package to the safe default (e.g., disabled service) and provide proper
3537     documentations required by the policy (<filename>README.Debian</filename> and
3538     <filename>NEWS.Debian</filename>) as the last resort. Don't bother user with
3539     the <command>debconf</command> note invoked from these <emphasis>maintainer
3540     scripts</emphasis> for upgrades.
3541     </para>
3542     <para>
3543     The <systemitem role="package">ucf</systemitem> package provides
3544     <emphasis>conffile-like</emphasis> handling infrastructure to preserve user
3545     changes for files that may not be labeled <emphasis>conffiles</emphasis> such
3546     as ones managed by the <emphasis>maintainer scripts</emphasis>. This should
3547     minimize issues associated with them.
3548     </para>
3549     <para>
3550     These <emphasis>maintainer scripts</emphasis> are the Debian enhancements that
3551     explain <emphasis role="strong">why people choose Debian</emphasis>. You must
3552     be very careful not to annoy them with these.
3553     </para>
3554     </section>
3555     <section id="todo"><title><filename>TODO</filename> file</title>
3556     <para>
3557     The <citerefentry> <refentrytitle>dh_installdocs</refentrytitle>
3558     <manvolnum>1</manvolnum> </citerefentry> command installs this.
3559     </para>
3560     </section>
3561     <section id="watch"><title><filename>watch</filename> file</title>
3562     <para>
3563     The <filename>watch</filename> file format is documented in the <citerefentry>
3564     <refentrytitle>uscan</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>
3565     manpage. The <filename>watch</filename> file configures the
3566     <command>uscan</command> program (in the <systemitem role="package">devscripts</systemitem> package) to watch the site where you
3567 osamu 8628 originally got the source from. This is also used by <ulink url="&dehs;">Debian External Health Status (DEHS)</ulink>.
3568 osamu 8601 </para>
3569     <para>
3570     Here's what I put in it:
3571     </para>
3572     <screen>
3573     # watch control file for uscan
3574     version=3
3575 osamu 8628 &sf-net;/gentoo/gentoo-(.+)\.tar\.gz debian uupdate
3576 osamu 8601 </screen>
3577     <para>
3578     Normally with this <filename>watch</filename> file, the URL at
3579 osamu 8628 <literal>&sf-net;/gentoo</literal> is downloaded and searched for links of
3580 osamu 8601 the form <literal>&lt;a href=...&gt;</literal>. The base name (just the part
3581     after the final <literal>/</literal>) of these linked URLs are matched against
3582 osamu 8642 Perl regular expression (see <citerefentry> <refentrytitle>perlre</refentrytitle>
3583 osamu 8601 <manvolnum>1</manvolnum> </citerefentry>) pattern
3584     <literal>gentoo-(.+)\.tar\.gz</literal>. Out of matched files, the file with
3585     the greatest version number is downloaded and the <command>uupdate</command>
3586     program is run to create the updated source tree from them.
3587     </para>
3588     <para>
3589     Although this is true for other sites, the SourceForge download service at
3590 osamu 8642 <ulink url="&sf-net;"/> is an exception. When the
3591 osamu 8601 <filename>watch</filename> file has an URL matching with the Perl regexp
3592     <literal>^http://sf\.net/</literal>, the <command>uscan</command> program
3593 osamu 8628 substitutes it with <literal>&qa-do;watch/sf.php/</literal> and
3594 osamu 8637 then applies this rule. The URL redirector service at this <ulink url="&qa-do;"/> is designed to offer
3595 osamu 8601 a stable redirect service to the desired file for the
3596     <filename>watch</filename> file having
3597 osamu 8628 <literal>&sf-net;/<replaceable>project</replaceable>/<replaceable>tar-name</replaceable>-(.+)\.tar\.gz</literal>.
3598 osamu 8601 This solves issues related to the periodically changing URL there.
3599     </para>
3600     </section>
3601     <section id="sourcef"><title><filename>source/format</filename> file</title>
3602     <para>
3603     In the <filename>debian/source/format</filename> file, there should be a single
3604     line indicating the desired format for the source package (check <citerefentry>
3605     <refentrytitle>dpkg-source</refentrytitle> <manvolnum>1</manvolnum>
3606     </citerefentry> for an exhaustive list). After <literal>squeeze</literal>, it
3607     should say either:
3608     </para>
3609     <itemizedlist>
3610     <listitem>
3611     <para>
3612     <literal>3.0 (native)</literal> for Debian native packages or
3613     </para>
3614     </listitem>
3615     <listitem>
3616     <para>
3617     <literal>3.0 (quilt)</literal> for everything else.
3618     </para>
3619     </listitem>
3620     </itemizedlist>
3621     <para>
3622     The newer <literal>3.0 (quilt)</literal> source format records modifications in
3623     a <command>quilt</command> patch series within
3624     <filename>debian/patches</filename>. Those changes are then automatically
3625 osamu 8628 applied during extraction of the source package. <footnote><para> See <ulink url="&debsrc3;">DebSrc3.0</ulink> for the
3626 osamu 8601 summary information concerning the switch to the new <literal>3.0
3627     (quilt)</literal> and <literal>3.0 (native)</literal> source formats. </para>
3628     </footnote> The Debian modifications are simply stored in a
3629     <filename>debian.tar.gz</filename> archive containing all files under the
3630     <filename>debian</filename> directory. This new format supports inclusion of
3631     binary files such as PNG icons by the package maintainer without requiring
3632     tricks. <footnote><para> Actually, this new format also supports multiple
3633     upstream tarballs and more compression methods. These are beyond the scope of
3634     this document. </para> </footnote>
3635     </para>
3636     <para>
3637     When <command>dpkg-source</command> extracts a source package in <literal>3.0
3638     (quilt)</literal> source format, it automatically applies all patches listed in
3639     <filename>debian/patches/series</filename>. You can avoid applying patches at
3640     the end of the extraction with the <literal>--skip-patches</literal> option.
3641     </para>
3642     </section>
3643     <section id="sourcel"><title><filename>source/local-options</filename> file</title>
3644     <para>
3645     When you want to manage Debian packaging activities under a VCS, you typically
3646     create one branch (e.g. <literal>upstream</literal>) tracking the upstream
3647     source and another branch (e.g. typically <literal>master</literal> for Git)
3648     tracking the Debian package. For the latter, you usually want to have
3649     unpatched upstream source with your <filename>debian/*</filename> files for the
3650     Debian packaging to ease merging of the new upstream source.
3651     </para>
3652     <para>
3653     After you build a package, the source is normally left patched. You need to
3654 osamu 8646 unpatch it manually by running <literal>dquilt pop -a</literal> before
3655 osamu 8601 committing to the <literal>master</literal> branch. You can automate this by
3656     adding the optional <filename>debian/source/local-options</filename> file
3657     containing <literal>unapply-patches</literal>. This file is not included in
3658     the generated source package and changes the local build behavior only. This
3659     file may contain <literal>abort-on-upstream-changes</literal>, too (see
3660     <citerefentry> <refentrytitle>dpkg-source</refentrytitle>
3661     <manvolnum>1</manvolnum> </citerefentry>).
3662     </para>
3663 osamu 8624 <screen>
3664     unapply-patches
3665     abort-on-upstream-changes
3666     </screen>
3667 osamu 8601 </section>
3668 osamu 8624 <section id="sourceopt"><title><filename>source/options</filename> file</title>
3669     <para>
3670 osamu 8637 The autogenerated files in the source tree can be quite annoying for packaging
3671     since they generate meaningless large patch files. There are custom modules
3672     such as <command>dh_autoreconf</command> to ease this problem as described in
3673     <xref linkend="customrules"/>.
3674     </para>
3675     <para>
3676 osamu 8652 You can provide a Perl regular expression to the
3677     <literal>--extend-diff-ignore</literal> option argument of <citerefentry>
3678 osamu 8624 <refentrytitle>dpkg-source</refentrytitle><manvolnum>1</manvolnum>
3679 osamu 8637 </citerefentry> to ignore changes made to the autogenerated files while
3680     creating the source package.
3681 osamu 8624 </para>
3682 osamu 8631 <para>
3683 osamu 8637 You can store such <command>dpkg-source</command> option argument in the
3684     <filename>source/options</filename> file of the source package as the generic
3685     solution to address this problem of the autogenerated files. The following
3686 taffit-guest 8665 will skip creating patch files for <filename>config.sub</filename>,
3687 osamu 8637 <filename>config.guess</filename> and <filename>Makefile</filename>.
3688 osamu 8631 </para>
3689 osamu 8624 <screen>
3690     extend-diff-ignore = "(^|/)(config\.sub|config\.guess|Makefile)$"
3691     </screen>
3692     </section>
3693 osamu 8601 <section id="patches"><title><filename>patches/*</filename> files</title>
3694     <para>
3695     The old <literal>1.0</literal> source format created a single large
3696     <filename>diff.gz</filename> file which contains package maintenance files in
3697     <filename>debian</filename> and patch files to the source. Such a package is a
3698     bit cumbersome to inspect and understand for each source tree modification
3699     later. This is not so nice.
3700     </para>
3701     <para>
3702     The newer <literal>3.0 (quilt)</literal> source format stores patches in
3703     <filename>debian/patches/*</filename> files using the <command>quilt</command>
3704     command. These patches and other package data which are all constrained under
3705     the <filename>debian</filename> directory are packaged as the
3706     <filename>debian.tar.gz</filename> file. Since the
3707     <command>dpkg-source</command> command can handle <command>quilt</command>
3708     formatted patch data in the <literal>3.0 (quilt)</literal> source without the
3709     <systemitem role="package">quilt</systemitem> package, it does not need to
3710     <literal>Build-Depends</literal> on the <systemitem role="package">quilt</systemitem> package. <footnote><para> Several methods
3711     for the patch set maintenance have been proposed and are in use with Debian
3712     packages. The <command>quilt</command> system is the preferred maintenance
3713     system in use. Other ones are <command>dpatch</command>,
3714     <command>dbs</command>, <command>cdbs</command>, etc. Many of these keep such
3715     patches as <filename>debian/patches/*</filename> files. </para> </footnote>
3716     </para>
3717     <para>
3718     The <command>quilt</command> command is explained in <citerefentry>
3719     <refentrytitle>quilt</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>.
3720     It records modifications to the source as a stack of <literal>-p1</literal>
3721     patch files in the <filename>debian/patches</filename> directory and the source
3722     tree is untouched outside of the <filename>debian</filename> directory. The
3723     order of these patches are recorded in the
3724     <filename>debian/patches/series</filename> file. You can apply (=push),
3725     un-apply (=pop), and refresh patches easily. <footnote><para> If you are
3726     asking a sponsor to upload your package, this kind of clear separation and
3727     documentation of your changes are very important to expedite the package review
3728     by your sponsor. </para> </footnote>
3729     </para>
3730     <para>
3731 taffit-guest 8665 For <xref linkend="modify"/>, we created 3 patches in
3732 osamu 8601 <filename>debian/patches</filename>.
3733     </para>
3734     <para>
3735     Since Debian patches are located in <filename>debian/patches</filename>, please
3736 osamu 8646 make sure to setup the <command>dquilt</command> command properly as described
3737 taffit-guest 8665 in <xref linkend="quiltrc"/>.
3738 osamu 8601 </para>
3739     <para>
3740     When someone (including yourself) provides you with a patch
3741     <filename><replaceable>foo</replaceable>.patch</filename> to the source later,
3742     then the modification of a <literal>3.0 (quilt)</literal> source package is
3743     quite simple:
3744     </para>
3745     <screen>
3746     $ dpkg-source -x gentoo_0.9.12.dsc
3747     $ cd gentoo-0.9.12
3748 osamu 8646 $ dquilt import ../<replaceable>foo</replaceable>.patch
3749     $ dquilt push
3750     $ dquilt refresh
3751     $ dquilt header -e
3752 osamu 8601 ... describe patch
3753     </screen>
3754     <para>
3755     The patches stored in the newer <literal>3.0 (quilt)</literal> source format
3756 osamu 8646 must be <emphasis>fuzz</emphasis> free. You should ensure it as <literal>dquilt
3757     pop -a; while dquilt push; do dquilt refresh; done</literal>.
3758 osamu 8601 </para>
3759     </section>
3760     </chapter>
3761     <chapter id="build"><title>Building the package</title>
3762     <para>
3763     We should now be ready to build the package.
3764     </para>
3765     <section id="completebuild"><title>Complete (re)build</title>
3766     <para>
3767     In order to properly make complete (re)build of a package, you have to ensure
3768     to install
3769     </para>
3770     <itemizedlist>
3771     <listitem>
3772     <para>
3773     the <systemitem role="package">build-essential</systemitem> package,
3774     </para>
3775     </listitem>
3776     <listitem>
3777     <para>
3778 taffit-guest 8665 packages listed in the <literal>Build-Depends</literal> field (see <xref linkend="control"/>), and
3779 osamu 8601 </para>
3780     </listitem>
3781     <listitem>
3782     <para>
3783 taffit-guest 8665 packages listed in the <literal>Build-Depends-indep</literal> field (see <xref linkend="control"/>).
3784 osamu 8601 </para>
3785     </listitem>
3786     </itemizedlist>
3787     <para>
3788     Then you issue the following command in the source directory:
3789     </para>
3790     <screen>
3791     $ dpkg-buildpackage
3792     </screen>
3793     <para>
3794     This will do everything to make full binary and source packages for you. It
3795     will:
3796     </para>
3797     <itemizedlist>
3798     <listitem>
3799     <para>
3800     clean the source tree (<literal>debian/rules clean</literal>)
3801     </para>
3802     </listitem>
3803     <listitem>
3804     <para>
3805     build the source package (<literal>dpkg-source -b</literal>)
3806     </para>
3807     </listitem>
3808     <listitem>
3809     <para>
3810     build the program (<literal>debian/rules build</literal>)
3811     </para>
3812     </listitem>
3813     <listitem>
3814     <para>
3815     build binary packages (<literal>fakeroot debian/rules binary</literal>)
3816     </para>
3817     </listitem>
3818     <listitem>
3819     <para>
3820     sign the source <filename>.dsc</filename> file, using <command>gpg</command>
3821     </para>
3822     </listitem>
3823     <listitem>
3824     <para>
3825     create and sign the upload <filename>.changes</filename> file, using
3826     <command>dpkg-genchanges</command> and <command>gpg</command>