We've had a couple of discussions about shortcomings of the way we currently implement source packages, and the various ways to work around it. To summarise, the shortcomings of the current system are: * can not handle multiple tar archives * can not handle seperate patches * can not handle bzip2 compressed files * can not handle binary files * can not handle .sig files for upstream distributed files Some people have gone to great lenghts to work around these problems by creating their own build systems. However I feel it is important that instead of working around shortcomings in dpkg-source we should intead fix it to make these features available to everyone in a common and document way. Lets look at some of the issues involved: We have a couple of different types of entities involved: * original upstream sources (one or more tar archives) * upstream patches * .sig files for upstream distributed files * debianization files * debian patches All upstream files should be listed in the .dsc file with a md5sum. So, what should a new system look like? Here is a simple proposal, without much details: * Modify the format .dsc file to list the files that contains the sources of a package, as well as how to extract that source. The sources here are all tar archives, either gzip or bzip2 compressed, and the upstream patches. For each source there can be a flag that states in what directory to unpack a source. This way we can handle sources that don't create a subdirectory for themselves, or a source that is shipped in multiple archives not all of which must be extracted in the same location. * We use a new file, debian/sources, which lists all source files and has instructions for unpacking them. For a full description of the file see the attached manpage. * fiels can be marked as either `upstream' or `debian'. All upstream files will be listed in the .dsc file. * Patches will be applied in the they are listed in the debian/sources file. * When unpacking a package we extract all the tar archives, but don't apply any patches. This means we will have the package in its original upstream form. * there is a dpkg-patch tool that can apply or reverse patches. It will check if patches are applied in order, and can unpack the original source and produce a diff from that to the current source so we can easily generate a new patch. The status for each patch (applied/not applied) will be stores in a debian/status file. * when building a binary package we apply all patches. We don't support conditional patches since if a patch doesn't work under all conditions it is broken anyway. * when building a source package all patches are reversed. Any patches that remain are will be the debian-ization patch. Wichert. -- _________________________________________________________________ / Generally uninteresting signature - ignore at your convenience \ | wichert@liacs.nl http://www.liacs.nl/~wichert/ | | 1024D/2FA3BC2D 576E 100B 518D 2F16 36B0 2805 3CB8 9250 2FA3 BC2D |
SOURCES(5) dpkg-source manual SOURCES(5)
NNAAMMEE
debian/sources - Debian source archive control file
DDEESSCCRRIIPPTTIIOONN
The _d_e_b_i_a_n_/_s_o_u_r_c_e_s file lists all the sources for a source
archive. This includes both source archives in the ttaarr
format and patches.
It is used by ddppkkgg--ssoouurrccee when building or extracing a
source archive, and by ddppkkgg--ppaattcchh to manage patches which
can be applied.
SSYYNNTTAAXX
Each line contains a definition of either a source archive
or a patch. If a line begins with a `##' it is considered
a comment and ignored. A definition looks like this:
origin type filename [options]
oorriiggiinn states where a source is coming from. Currently the
only allowed options are `ddeebbiiaann' and `uuppssttrreeaamm'. If the
origin is `uuppssttrreeaamm' the file will be listed in the _._d_s_c
file.
ttyyppee is the type of file. Allowed options are `ttaarr' and
`ppaattcchh'. You do not need to state the compression method,
ddppkkgg--ssoouurrccee will do that automatically.
ffiilleennaammee is (surprise!) the filename of the file we are
defining. For (tar) archives the filename does not
include a path, it must reside in the directory in which
dpkg-source is run when extracting, or the parent direc-
tory when building a package. For patches the path is rel-
ative to the path where the archives are.
All files can be compressed using either ggzziipp or bbzziipp22,
ddppkkgg--ssoouurrccee will detect the compression type automatically
and uncompress the files.
options specify how to extract an archive or apply a
patch. The following options are allowed:
ddiirr|ddiirreeccttoorryy _<_d_i_r_>
directory in which to apply a patch or extract an
archive. If the directory does not exist it will be
created.
rreevv|rreevveerrssee (only for patches)
Apply a reversed patch.
ffuuzzzz _<_l_e_v_e_l_> (only for patches)
Apply the patch with fuzz factor _<_l_e_v_e_l_>.
Debian project April 2000 1
SOURCES(5) dpkg-source manual SOURCES(5)
nnoossppaaccee|iiggnnoorree--wwhhiitteessppaaccee (only for patches)
Ignore any white space changes between the patch
and the source.
EEXXAAMMPPLLEE
This is an example of a _d_e_b_i_a_n_/_s_o_u_r_c_e_s file for the vviimm
package. It shows that vim uses two tar archives for its
source, and has a number of patches stored in the
_v_i_m_-_5_._5_/_d_e_b_i_a_n_/_p_a_t_c_h_e_s directory, 4 of which are upstream
patches.
# Normal upstream sources
upstream tar vim-src-5.5.tar.gz
upstream tar vim-rt-5.5.tar.gz
# Upstream patches
# 5.5.001: Configure in the top directory did not pass on an
# argument with a space correctly. For example
# "./configure --previs="/My home".
upstream patch vim-5.5/debian/patches/5.5.001
# 5.5.002: Compilation error for using "fds[] & POLLIN".
upstream patch vim-5.5/debian/patches/5.5.002
# 5.5.003: The autoconf check for sizeof(int) is wrong on
# machines where sizeof(size_t) != sizeof(int).
upstream patch vim-5.5/debian/patches/5.5.003
# 5.5.004: On Unix it's not possible to interrupt ":sleep 100".
upstream patch vim-5.5/debian/patches/5.5.004
# pixmapbg: support a pixmap background in the editing window
debian patch vim-5.5/debian/patches/deb-pixmapbg
# newxterm: handle features of new xterm
debian patch vim-5.5/debian/patches/deb-newxterm
AAUUTTHHOORR
Wichert Akkerman <wakkerma@debian.org> for Debian
SSEEEE AALLSSOO
ddppkkgg--ssoouurrccee(1)
Debian project April 2000 2
Attachment:
pgpdYI6jLP6_O.pgp
Description: PGP signature