Bug#484972: libmpeg1: FTBFS when converted to new source format 3.0 (quilt): autotools cruft in diff

Raphael Hertzog hertzog at debian.org
Sat Jun 7 13:40:24 UTC 2008


Package: libmpeg1
Version: 1.3.1-8
Severity: minor
Usertags: 3.0-quilt-by-default

To prepare a possible switch to the new source package format "3.0
(quilt)" [1], I converted all source packages and tried to rebuild them.
Unfortunately, libmpeg1 failed, you can try yourself with those
commands (and dpkg-dev >= 1.14.19 [2]) :

$ apt-get source libmpeg1
$ sed -i -e '/^Source:/ aFormat: 3.0 (quilt)' libmpeg1-1.3.1/debian/control
$ dpkg-source -b libmpeg1-1.3.1
$ dpkg-source -x libmpeg1_1.3.1-8.dsc
$ cd libmpeg1-1.3.1 && debuild -us -uc

In this process, if the .diff.gz contains changes to upstream files,
dpkg-source will have created a corresponding patch in
debian/patches/debian-changes-1.3.1-8 and will have registered that
patch in a quilt series (debian/patches/series, it is created if needed).
All the patches listed in the "series" file are applied directly during
the extraction (dpkg-source -x). quilt itself is used if available (and
will thus lead to the creation of the .pc directory), otherwise
dpkg-source applies the patches by itself. For more information about the
new source package format see the manual page dpkg-source(1).

In the case of libmpeg1, the .diff.gz contains changes to
config.sub/guess because your "clean" target in debian/rules replaces
those files. With the conversion to the new source format, those
changes end up as a patch in debian/patches/ and when the package
tries to apply or unapply that patch it will fail because the clean rule
has already replaced those files.

To fix this, please make sure that the .diff.gz doesn't contain those
changes. You can easily do that by copying
/usr/share/misc/config.{sub,guess} in place just before the ./configure
call and by removing (rm -f config.sug config.guess) the files
in the clean target. (I filed #482716 against autotools-dev so that
/usr/share/doc/autotools-dev/README.Debian.gz is updated in that regard)

As a side note, you must also pay attention to the following points in your
quilt usage to guarantee compatibility with the new source package
format:
- all your patches must be applicable with the "-p1" option of patch
  (and you shouldn't use options in the series file to override this)
- the patches must be in debian/patches/ together with the "series" file
  (you can use QUILT_PATCHES=debian/patches if needed)
- you should not override QUILT_PC to change the location of quilt's
  internal directory (".pc" by default)
- the patches should not reference absolute filenames (in +++/--- lines)
- your clean target must work even if the patches are already applied
- your build target must work with patches applied even if the clean
  target is supposed to unapply them (because dpkg-source -b might
  have applied them back)

Cheers,

[1] http://lists.debian.org/debian-devel-announce/2008/04/msg00004.html
[2] the upcoming dpkg-dev 1.14.20 is more tolerant with patches, you can
grab it here if you want to try with that version:
http://people.debian.org/~hertzog/packages/dpkg-dev_1.14.20_all.deb
-- 
Raphael Hertzog






More information about the pkg-multimedia-maintainers mailing list