dpkg (1.16.1.1) unstable; urgency=low

  [ Raphaël Hertzog ]
  * Fix dpkg-source to not ignore the automatic patch when checking
    for unrecorded changes. Closes: #643148
  * Let dpkg-source --commit create debian/patches when required.
    Closes: #643037
  * Fix dpkg-buildflags --dump to return 0 as exit code and not 1.
  * Update dpkg-buildflags(1) to not include quotes in the examples
    setting DEB_BUILD_MAINT_OPTIONS.
  * Stop outputting build flags in dpkg-buildpackage as it confuses
    maintainers who are overriding them in debian/rules and who
    are not seeing the expected value in the build log.
  * Fix trigger setup code to not reset the status of packages
    when they are in a status different from triggers-awaited,
    triggers-pending or installed. Closes: #644492
  * Fix dpkg-source to ignore changes on debian/patches/.dpkg-source-applied
    when building a "2.0" source package. Closes: #642656
  * Fix buildflags.mk to re-export the environment variables that
    the maintainer can use to change the build flags. Closes: #644412

  [ Guillem Jover ]
  * Change dpkg-buildflags to set preprocessor option -D_FORTIFY_SOURCE=2
    in CPPFLAGS, instead of CFLAGS and CXXFLAGS. Closes: #642521, #643632
  * Fix typo to correctly set DEB_*_ARCH_BITS instead of DEB_*_ARCH in
    architecture.mk. Thanks to Thorsten Glaser <tg@mirbsd.org>.
  * Make dpkg-buildflags disable full relro (bindnow) if relro is not enabled.

 -- Guillem Jover <guillem@debian.org>  Fri, 14 Oct 2011 07:08:31 +0200

dpkg (1.16.1) unstable; urgency=low

  [ Raphaël Hertzog ]
  * Dpkg::Deps: Implement new "reset" method and bump module version to 1.01
    due to this.
  * Improved description of --search in dpkg-query(1). Closes: #621066
    Thanks to Lars Buitinck <larsmans@gmail.com> for the patch.
  * Let update-alternatives fsync() its administrative files before
    moving them in place to avoid empty files with some filesystems.
    LP: #344019
  * Tighten the regexp used by dpkg-source to ignore the .pc directory of
    quilt. Thanks to Mike Hommey for noticing the problem.
  * Change behaviour of dpkg-source's --extend-diff-ignore to also
    extend the current diff-ignore if it has already been set.
  * Fix dependency checking code to consider a dependency on a virtual
    package provided by a package in triggers-pending status as satisfied.
  * Do not fail when encountering a pre-dependency in triggers-awaited state,
    instead process the awaited triggers. Closes: #526774
  * "any" no longer hides "all" in the Architecture field of a .dsc.
  * Fix dpkg --remove to really remove the triggers from the various
    internal files in /var/lib/dpkg/info/triggers/. Closes: #525160
  * Avoid a perl warning in dpkg-gensymbols when no symbols file has been
    generated (because it would have been empty). Closes: #626684
  * Re-enable the Package-List field but drop the Architecture column since we
    have no clear use case yet. It can always be added later on.
    Also drop the source line since it duplicates other fields.
    Closes: #619131
  * Add the extraction part of Dpkg::Source::Package to the supported API.
    Useful to extract source packages without having to depend on dpkg-source
    (and hence dpkg-dev).
  * Add the Dpkg::Vendor module to the supported API. Useful for lintian
    when dpkg-dev is absent.
  * Check presence of required parameters in dpkg-vendor. Closes: #628726
    Thanks to Niels Thykier <niels@thykier.net> for the patch.
  * Avoid a Perl warning in dpkg-buildflags when HOME is not set.
    Closes: #635467
  * dpkg-source can now also use debian/source/local-patch-header (that is not
    included in the generated source package) instead of
    debian/source/patch-header. Closes: #629582
  * Changed dpkg-source --after-build to automatically unapply patches that it
    has applied during --before-build.
  * Fix two possible causes for the assertion failure "pigp->trigpend_head".
    LP: #798793, #424358 Closes: #560251
  * Use "special" instead of "particular" to qualify the "3.0 (custom)" format
    in dpkg-source(1). Closes: #631435
  * Add some supplementary checks to ensure debian/control has the required
    fields. Closes: #631439
  * dpkg-gensymbols(1): document syntax of comments. Closes: #630996
  * Allow empty lines in symbols files to better delimit multiple libraries.
    Thanks to Cyril Brulebois <kibi@debian.org> for the patch.
  * dpkg: if "prerm upgrade" fails when downgrading, do not try to run
    "prerm failed-upgrade" with the prerm of the oldest prerm, it can't work
    around a bug of a newer prerm anyway.
  * dpkg: support new "interest-noawait" and "activate-noawait" trigger
    directives.
  * dpkg-buildflags(1): make it clear that DEB_*_(SET|APPEND) environment
    variables are meant for users and should not be used by packages.
  * update-alternatives: do not allow to reuse a slave link in another
    slave alternative. Closes: #631547
  * Improve dpkg-source's logic to identify ignored files. Closes: #632168
  * Fix a small typo in dpkg-source(1). Closes: #632937
  * Reword the description of dpkg-source --before-build and --after-build
    to be clearer. Closes: #608260
  * dpkg-buildpackage no longer exports the compiler flags. Closes: #560070
    Packages must directly call dpkg-buildflags to retrieve them.
  * dpkg-buildflags supports a prepend command to modify the build
    flags. Particularly useful for package maintainers who don't want
    their supplementary flags to take precedence over user submitted
    flags.
  * Add new --dump action to dpkg-buildflags and make it the default action.
    Closes: #603435
  * dpkg-mergechangelogs now checks the return value of the close() call.
    Thanks to Niels Thykier <niels@thykier.net> for the patch. Closes: #633539
  * Similar changes to dpkg-shlibdeps and dpkg-gencontrol, also by Niels.
  * Fix update-alternatives to not remove a real file when dropping a
    symlink for a slave that's not provided by the new current choice.
    Closes: #633627
  * Improve dpkg-source's error message complaining about the lack
    of the upstream tarball. Closes: #634510
  * Add some common makefile snippets for use in rules files in
    /usr/share/dpkg/: default.mk, architecture.mk, buildflags.mk, pkg-info.mk,
    vendor.mk Closes: #606839
  * Fix the dpkg-divert test-suite to also skip test that would fail if run
    under root. Closes: #634961
  * Change merge conflict separators created by dpkg-mergechangelogs to match
    the usual norm of being composed of 7 characters. LP: #815700
  * With source format 2.0 and 3.0 (quilt), dpkg-source now fails by default
    when upstream changes have not been recorded in a quilt patch. The new
    --commit operation can be used to properly record the changes before-hand.
    LP: #797839
    And it fails before installing the automatic patch in debian/patches/
    Closes: #615899
  * dpkg-buildflags now supports "--export=configure" to output compilation
    flags on a single line with double quotes as delimiter of the various
    values. It also uses DEB_<flag>_MAINT_<op> to let the maintainer
    extend the build flags to use. Last but not least, it can now also strip
    options from the returned build flags.
  * Fix possible segfault of dpkg in findbreakcycle(). LP: #733414
  * dpkg-source now properly cleans up the temporary tarball generated for
    native formats in case of unexpected interruption. Closes: #631494
  * Fix simplification logic of union dependencies. Closes: #637564
  * Fix dpkg's handling of a hardlink pointing to a conffile. Closes: #638291
  * Add example of extend-diff-ignore's usage in dpkg-source(1).
    Closes: #640198
  * dpkg-buildflags now returns hardening flags by default. Closes: #489771
    They can be individually enabled/disabled via DEB_BUILD_MAINT_OPTIONS,
    see dpkg-buildflags(1). Thanks to Kees Cook for his help.

  [ Guillem Jover ]
  * Install deb-src-control(5) man pages in dpkg-dev. Closes: #620520
  * Add ‘.gitmodules’ to the default dpkg-source ignore lists. Closes: #620490
  * Document in dpkg-query(1) man page that on --listfiles each list of
    files per package name is separated by a blank line. Same goes for
    --status and --print-avail.
  * Use execvp(3) unconditionally in command_exec(). Making the call always
    fallback to use the system shell in case of error, such as with empty
    maintainer scripts. Thanks to Jonathan Nieder <jrnieder@gmail.com>.
    Closes: #622094
  * Improve deb-split(5) format description by splitting debian-split
    member contents into a list.
  * Switch to debhelper compatibility level 7.
    - Use dh_prep instead of deprecated “dh_clean -k”.
  * Bump Standards-Version to 3.9.2 (no changes needed).
  * Generate filenames following current conventions on “dpkg-split --join”,
    by including the architecture in the debian-split member of a split
    package and using underscores to separate filename parts.
  * Support conffiles with spaces when diffing them. Closes: #147583
  * Allow installing packages with bogus versions with new
    --force-bad-version.
  * Do not fail when unpacking a diverted hardlink. Closes: #245322
    Based on a patch by Christopher Baines <cbaines8@gmail.com>.
  * Document in dpkg-deb(1) that --fsys-tarfile will always process the
    input archive sequentially. Closes: #616609
  * Remove long non-functional --new and --old dpkg-deb option handling
    from dpkg which were being treated as dpkg commands.
  * Remove reference to --nocheck dpkg-deb option from dpkg man page as
    the latter does not pass it to the former.
  * Clarify the current dpkg behaviour when running the dpkg-deb and
    dpkg-query back-ends, of not passing through back-end specific options
    when running them from dpkg. Closes: #610940
  * Use “unselected” as an adjective in dpkg output messages instead of
    “deselected”. Closes: #231089
  * Clarify exit status in dpkg-split and start-stop-daemon --help output.
  * Clarify “EXIT STATUS” section in man pages by using a table.
  * Add a --status command to start-stop-daemon returning LSB Init Script
    status action exit codes.
  * Add start-stop-daemon process name kernel limits for Solaris, NetBSD,
    OpenBSD, FreeBSD and Darwin.
  * On package removal, keep only directories actually containing conffiles,
    and not directories just matching the substring in the conffile or the
    directory itself. Thanks to Ondřej Surý <ondrej@debian.org>.
  * On purge correctly remove symlinks acting as directories, when they are
    not being used by any other package's files.
  * Do not lose track of parent directories on removal so that they can
    be properly cleaned up on purge if not used by any other package.
    Based on a patch by Ondřej Surý <ondrej@debian.org>. Closes: #454694
  * Add ‘.hgsigs’ to the default dpkg-source ignore lists.
    Based on a patch by Jakub Wilk <jwilk@debian.org>. Closes: #627462
  * Do not allow blank lines in field values. Closes: #308082
  * Do not warn on missing architecture on packages in config-files state,
    but then make sure the architecture field is usable. Closes: #604241
  * Run du with --apparent-size when generating the Installed-Size field in
    dpkg-gencontrol to get consistent results independent of build system.
    Thanks to Ludovic Brenta <ludovic@ludovic-brenta.org>. Closes: #630533
  * Do not fail to unpack shared directories missing on the file system
    from packages being replaced by other packages. Closes: #631808
  * Do not require programs to define thisname, provide two new functions
    to handle the program name (dpkg_set_progname and dpkg_get_progname).
    Closes: #631757
  * Man pages cleanup:
    - Rename “USAGE” dselect(1) section to “ACTIONS” and clarify they can
      be performed interactively or from command line.
    - Add missing built-in methods to dselect(1).
    - Add missing escaping to field dashes in deb-control(5).
    - Use dashes instead of underscores for variable text.
    - Clarify that several front-end fields are not dselect specific in
      dpkg-query(1).
    - Use [option...] instead of [options] and friends.
    - Use italics or bold instead of surrounding the text with <>.
    - Correctly format text with bold and italics.
    - Use minus signs and hyphens consistently in man pages.
    - Fix reference to /etc/dpkg/dselect.cfg.d instead of dpkg.cfg.d in
      dselect(1).
    - Add missing optional group|gid --chuid argument in start-stop-daemon(8).
  * Refer to Sources and Packages files as part of a repository instead of
    as being of exclusive use or owned by APT, which has never been the case.
  * Unify somewhat dpkg-maintscript-helper --help output with other commands.
  * Add build-indep and build-arch targets as aliases for build in
    debian/rules.
  * Use the perl interpreter found by configure to call dpkg-architecture.pl
    in the m4 DPKG_ARCHITECTURE macro.
  * Add new --verbose option to dpkg-deb and change --extract to honour it.
    Closes: #293280
  * Add new --raw-extract option to dpkg-deb combining --control and
    --extract. Closes: #552123
  * Defer hardlink renames so that there's never a point were the new
    file contents are accessible from the final path before they have
    been fsync()ed and cannot be executed causing ETXTBSY when trying
    to open the to be installed paths for writing.
    Thanks to Jonathan Nieder <jrnieder@gmail.com>. Closes: #635683
  * Clarify the default dpkg-deb compression-levels on the man page.
  * Clarify dpkg --update-avail usage error message. Closes: #628055
  * Change Dpkg::Compression default values depending on the compressor
    used, and as such dpkg-source inherits this functionality.
    Prompted by Timo Juhani Lindfors <timo.lindfors@iki.fi>.
  * Print an actual error or warning message instead of assert()ing on
    readlink()/stat() size discrepancies. Closes: #639229
  * Update alternative links only if they change. This allows for a
    read-only file system and a writable database. Closes: #636700
    Based on a patch by Salvatore Bonaccorso <carnil@debian.org>.
  * Fix double “error:” string in dpkg missing PATH error output.
    Closes: #639997
  * Do not warn on strange timestamps when unpacking with dpkg-deb.
    Closes: #640298
  * Reduce dpkg-trigger binary size by refactoring libdpkg modules so that
    it does not end up pulling triglib.
  * Reduce dpkg-deb binary size by refectoring libdpkg modules so that it
    does not end up pulling triglib.
  * Do not fail on --compare-version when generating parse warnings.
    Existing packages with invalid versions should not fail on their
    maintainer scripts due to that.
  * Use the user name (instead of the user id) when setting the supplementary
    groups in start-stop-daemon. Closes: #641834
  * Use --srcdir and --destdir po4a options, and bump Build-Depends version
    to 0.36.4.

  [ Updated dpkg translations ]
  * German (Sven Joachim). Closes: #620312
  * Swedish (Peter Krefting).
  * French (Christian Perrier).

  [ Updated man page translations ]
  * French (Christian Perrier).
  * German (Helge Kreutzmann) including improvement by "Flo".
  * Swedish (Peter Krefting).

  [ Updated scripts translations ]
  * French (Christian Perrier, Sylvestre Ledru). Closes: #637096
  * German (Helge Kreutzmann).
  * Swedish (Peter Krefting).

 -- Guillem Jover <guillem@debian.org>  Fri, 23 Sep 2011 06:00:11 +0200

dpkg (1.16.0.3) unstable; urgency=medium

  * Allow again Priority field values not known to dpkg. Regression
    introduced in 1.16.0.

 -- Guillem Jover <guillem@debian.org>  Wed, 04 May 2011 10:01:30 +0200

dpkg (1.16.0.2) unstable; urgency=high

  * Fix dpkg-split --auto to not fail when opening the new depot file.
  * Fix dpkg-split to correctly set the last part split size.
  * Fix build failure on DEB_BUILD_OPTIONS=noopt due to a missing <locale.h>
    include in gettext.h needed by the gettext context functions.

 -- Guillem Jover <guillem@debian.org>  Sat, 16 Apr 2011 00:14:15 +0200

dpkg (1.16.0.1) unstable; urgency=low

  [ Raphaël Hertzog ]
  * Fix regression affecting dpkg -R. Closes: #620636
  * Don't fail during unpack if the system doesn't support changing timestamps
    of symlinks. Closes: #620679

 -- Guillem Jover <guillem@debian.org>  Tue, 05 Apr 2011 07:28:20 +0200

dpkg (1.16.0) unstable; urgency=low

  [ Guillem Jover ]
  * Use DPKG_MAINTSCRIPT_PACKAGE environment variable as package name on
    dpkg-divert when no --package or --local options have been specified.
  * Do not allow versions starting with non-digit when doing strict parsing,
    warn otherwise.
  * Update dpkg(1) to note that --status-fd output does not contain newlines
    in error messages anymore (this was fixed in 1.15.0).
  * Add a new --status-logger option to dpkg, similar to --status-fd but
    instead invoke the command ourselves and feed the status information
    to its standard input. Suggested by Raphaël Hertzog.
  * Add missing space in update-alternative --set-selections output.
  * Add missing options to update-alternative --help output.
  * Count “conffile name is duplicated” for dpkg-deb warning count summary.
  * Improve and clarify strings for translation. Closes: #604914
  * Prefix all fatal error messages with “error: ”.
  * Do not check presence of update-rc.d in the PATH in dpkg, as it's not
    a program needed for dpkg correct operation.
  * Fix dpkg -GEO options on multiple versions of the same packages.
    Closes: #31141
  * Propagate --admindir to programs run from maintainer scritpts.
    Closes: #97076
  * Do not fail when trying to remove the root directory. This will only
    happen either on distributions where dpkg is a foreign package manager,
    or on artificial dpkg databases.
  * Always warn when parsing any package control data which does not have
    an Architecture field except for status and status log files when
    packages are not-installed or half-installed.
  * By default reject installing packages w/o an Architecture field. They
    now need --force-architecture, dpkg will still warn about them though.
  * Fix build failure when passing --disable-nls to configure.
  * Do not segfault on “dpkg -i --no-act”.
  * Add missing semicolon to the vsnprintf() compat declaration.
    Thanks to Robert Millan. Closes: #612203
  * On install for Ubuntu adjust the i386 GNU cpu name in cputable.
    Thanks to Colin Watson <cjwatson@ubuntu.com>. Closes: #611741
  * Sync the info database directory on unpack instead of the temporary
    control information directory, and print the correct pathname on error
    instead of the last file acted on that directory.
  * Document in dpkg-query --help output and man page that --list and --show
    arguments are optional.
  * Do not read and write the available file unnecessarily.
    Thanks to Michel Lespinasse <walken@zoy.org>. Closes: #397121
  * Fix typo in «dpkg-name --overwrite» argument parsing so that it actually
    works at all. Thanks to Ivan Gagis <igagis@gmail.com>. LP: #728708
  * Add armhf support to ostable and triplettable. Closes: #594179
  * Set the modification time for unpacked symlinks on supported systems.
  * Fix undefined value usage in dpkg-genchanges when adding files w/o a
    matching architecture, because they are not present in debian/control,
    this is most commonly the case due to dpkg-distaddfile.
  * Terminate immediately on dpkg-divert rename errors instead of propagating
    up the error codes, this improves error reporting and avoids triggering
    leak detectors. Closes: #620380
  * When moving a diverted file across filesystems in dpkg-divert, remove
    the source file.
  * Fix large file support for .deb and split .deb in dpkg-deb, dpkg-split
    and dpkg on 32-bit architectures.

  [ Raphaël Hertzog ]
  * Fail properly when debian/source/format is empty. Closes: #600854
  * Add new deb-src-control(5) manual page documenting the debian/control
    file contained in source packages.
    - it documents the X[SBC]- prefix. Closes: #476335
    - it documents the VCS-* fields too. Closes: #483119
    Thanks to Oxan van Leeuwen <oxan@oxanvanleeuwen.nl> who wrote it
    as part of the Google Code In program.
  * Enhance dpkg-shlibdeps to not fail immediately when a library is not found.
    Instead continue and fail after all problems have been reported. Thanks
    to Chris Baines <cbaines8@gmail.com> for the patch. Closes: #596841
  * Fix dpkg-source to not list Debian packaging files as modified
    upstream files in Format "1.0" when unpacking to a non-standard
    directory.
  * Apply patch from Colin Watson to let dpkg-buildflags return -O3
    instead of -O2 when building ppc64 packages on Ubuntu. Closes: #612472
  * Add new function get_control_path() to Dpkg::Path, it wraps dpkg-query
    --control-path.
  * Update dpkg-shlibdeps to be multiarch-ready:
    - use get_control_path() to find symbols/shlibs files
    - parse correctly the output of dpkg --search
  * Small fix to support files >2GB in .deb on 64-bit systems. Closes: #616502
    Thanks to Martin Dorey <mdorey@bluearc.com> for the patch.
  * dpkg-source now keeps the file ordering in the autogenerated patch when
    regenerating it. Closes: #606080
    Thanks to Colin Watson for the patch.
  * dpkg-source now uses a timestamp retrieved from the filesystem when
    resetting the timestamp of patched files so that a time skew when using
    NFS doesn't introduce any inconsistency. Closes: #613023
    Thanks to Jonathan Nieder <jrnieder@gmail.com> for the patch and the
    diagnosis.
  * dpkg-source will now remove quilt's .pc directory when --unapply-patches
    is in use. Closes: #591858
  * dpkg-source is now a bit less strict when parsing patches:
    - it accepts seeing the same file twice; Closes: #608829
    - it doesn't match on the English text "No newline at end of file" as it
      might be translated in some cases. Closes: #612465
  * Improve parser in Dpkg::Control::Hash to not require an empty line
    before the PGP signature. Closes: #617923
    Thanks to Roger Leigh for the initial patch.
  * Fix a regression in dpkg-divert where using --rename led to a failure when
    the rename implies crossing file systems. Thanks to Durk Strooisma for
    spotting it.
  * Use the correct mtime when installing a file with statoverrides.
    Regression introduced in 1.16.0. LP: #739179
  * Remove duplicate word in german translation of dpkg(1). Closes: #616096
  * Strip repeated non-significant spaces before and after newlines
    in Uploaders. Closes: #598922
  * Ignore whitespaces after options in headers of changelog entries.
    Closes: #605719
  * Fix dpkg-source's regression with empty patches (introduced while fixing
    #613023). Closes: #619541

  [ Jonathan Nieder ]
  * Remove support for use of synchronous sync(2), due to its pernicious
    side-effects and to ease maintenance.
  * Clarify that an up-to-date dpkg only needs to be unpacked for
    dpkg-maintscript-helper to work.

  [ Steve Langasek ]
  * Add new variables to dpkg-architecture, DEB_HOST_MULTIARCH and
    DEB_BUILD_MULTIARCH, that return the "ideal" GNU triplet for each
    architecture which should be used as the path component for library
    installation.

  [ Mark Hymers ]
  * Add support for Built-Using field. Closes: #619311

  [ Updated programs translations ]
  * German (Sven Joachim).
  * Portuguese (Miguel Figueiredo).
  * Spanish (Javier Fernandez-Sanguino).
  * Swedish (Peter Krefting).

  [ Updated man page translations ]
  * German (Helge Kreutzmann).
  * Swedish (Peter Krefting).

  [ Updated scripts translations ]
  * German (Helge Kreutzmann).
  * Swedish (Peter Krefting).

  [ Updated dselect translations ]
  * Spanish (Javier Fernandez-Sanguino).

 -- Guillem Jover <guillem@debian.org>  Fri, 01 Apr 2011 23:56:54 +0200

dpkg (1.15.8.10) unstable; urgency=low

  * Do not segfault on “update-alternatives --auto” when the link group only
    has alternatives which are dangling symlinks. Closes: #611545

 -- Guillem Jover <guillem@debian.org>  Sun, 30 Jan 2011 20:28:27 +0100

dpkg (1.15.8.9) unstable; urgency=low

  [ Raphaël Hertzog ]
  * Drop Breaks on konqueror to avoid some lenny -> squeeze upgrade
    problems. It was only needed to ensure install-info is installed
    even for partial upgrades. Closes: #610991
  * Do the same for all emacs/jed packages. For jed, the breaks has been
    rendered useless as the maintainers dropped the install-info dependencies
    anyway.

  [ Updated dpkg translations ]
  * Remove space before "…" in several Catalan strings (Jordi Mallach).
  * Romanian (Stan Ioan-Eugen).

 -- Raphaël Hertzog <hertzog@debian.org>  Mon, 24 Jan 2011 20:24:53 +0100

dpkg (1.15.8.8) unstable; urgency=low

  [ Guillem Jover ]
  * Truncate the output part file on “dpkg-split -s”. Regression introduced
    with the C rewrite.

  [ Updated man page translations ]
  * Two typos fixed in French (Christian Perrier, thanks to Julien
    Valroff).

  [ Raphaël Hertzog ]
  * Fix multiple security issues with dpkg-source (CVE-2010-1679):
    - Enhance checks to catch maliciously crafted patches which could modify
      files outside of the unpacked source package.
    - Do not consider a top-level symlink like a directory when
      extracting a tarball.
    - Exclude .pc while extracting the upstream tarball in 3.0 (quilt)
      as patch blindly writes in that directory during unpack (and would
      follow any existing symlink).

 -- Raphaël Hertzog <hertzog@debian.org>  Thu, 06 Jan 2011 21:04:33 +0100

dpkg (1.15.8.7) unstable; urgency=low

  [ Guillem Jover ]
  * Defer symlink renames so that there's never a point were a symlink
    is broken, this is particularly important for shared libraries.
    Closes: #605536
  * On Linux use sync_file_range() to initiate asynchronous writeback
    of just unpacked files. Suggested by Ted Ts'o <tytso@mit.edu>.
    Thanks to Jonathan Nieder <jrnieder@gmail.com>. Closes: #605009
  * On non-Linux use posix_fadvise(POSIX_FADV_DONTNEED) to notify the kernel
    dpkg does not need the unpacked files any longer, and that it can start
    writeback to be able to evict them from the cache at a later point.
  * Fix stanza delimiting on -L, -s and -p output. This was making the output
    for multiple packages unrealiable to parse. Closes: #606315

  [ Updated dpkg translations ]
  * Basque (Iñaki Larrañaga Murgoitio). Closes: #607253
  * Catalan (Guillem Jover).
  * Czech (Miroslav Kure). Closes: #605099
  * Esperanto (Felipe E. F. de Castro). Closes: #607437
  * French (Christian Perrier).
  * German (Sven Joachim).
  * Indonesian (Arief S Fitrianto). Closes: #605248
  * Italian (Milo Casagrande). Closes: #607306
  * Japanese (Kenshi Muto). Closes: #607259
  * Norwegian Bokmål (Hans Fredrik Nordhaug).
  * Portuguese (Miguel Figueiredo). Closes: #605506
  * Russian (Yuri Kozlov). Closes: #607292
  * Simplified Chinese (Aron Xu).
  * Slovak (Ivan Masár). Closes: #607302
  * Spanish (Javier Fernandez-Sanguino).
  * Thai (Theppitak Karoonboonyanan). Closes: #607501

  [ Updated man page translations ]
  * French (Christian Perrier).
  * German (Helge Kreutzmann).
  * Spanish (Omar Campagne).

  [ Updated dselect translations ]
  * Spanish (Javier Fernandez-Sanguino).

  [ Updated scripts translations ]
  * German (fix by Sven Joachim).
  * Spanish (Javier Fernandez-Sanguino).

 -- Guillem Jover <guillem@debian.org>  Mon, 20 Dec 2010 02:26:26 +0100

dpkg (1.15.8.6) unstable; urgency=low

  [ Raphaël Hertzog ]
  * Ensure debian/source/local-options is always excluded from the source
    package even if the user provides customized -i or -I options.
    Closes: #597023
  * Fix Dpkg::Version's handling of version with a debian revision but an
    empty version (e.g. "-0.1"). Thanks to James Vega <jamessan@debian.org>
    for the patch. Closes: #597651
  * With "3.0 (quilt)" source package, create .pc/.quilt_series with the
    correct series file if the source package provides vendor specific patch
    sets.

  [ Guillem Jover ]
  * Disable by default usage of synchronous sync(2), as it causes undesired
    I/O on unrelated file systems. Closes: #588339, #595927, #600075
  * Add new --force-unsafe-io to disable safe I/O operations on unpack.
    Closes: #584254

  [ Updated man page translations ]
  * French (Christian Perrier). Including a typo fix and a typographical
    change reported by Vincent Danjean. Closes: #601852
  * Spanish (Omar Campagne). Closes: #596519

  [ Updated programs translations ]
  * Basque (Iñaki Larrañaga Murgoitio). Closes: #599923
  * Catalan (Jordi Mallach).
  * Danish (Ask Hjorth Larsen). Closes: #600240
  * German (Sven Joachim). Improved by Holger Wansing.
  * Italian (Pietro Battiston). Fix translation of "however". Closes: #602518
  * Portuguese (Miguel Figueiredo). Closes: #596168
  * Romanian (Andrei Popescu). Closes: #604769
  * Russian (Yuri Kozlov). Closes: #595455
  * Vietnamese (Clytie Siddall). Closes: #598473

  [ Updated scripts translations ]
  * Catalan (Jordi Mallach).
  * German (Sven Joachim).

  [ Updated dselect translations ]
  * Catalan (Jordi Mallach).
  * German (Sven Joachim).

 -- Guillem Jover <guillem@debian.org>  Thu, 25 Nov 2010 07:10:48 +0100

dpkg (1.15.8.5) unstable; urgency=low

  [ Guillem Jover ]
  * Do not print a warning when parsing status or status log files on
    half-installed packages w/o a Description or Maintainer field, as
    this happens normally when the package was never installed before.
    Closes: #594167
  * Improve git format documentation in dpkg-source(1).
    Thanks to Joey Hess, based on a patch by Tanguy Ortolo.
  * Clarify effect of “dpkg --purge” on homedir files in dpkg(1).
    Thanks to The Fungi <fungi@yuggoth.org>. Closes: #593628
  * Add gettext plurals infrastructure support.
  * Add gettext messages for plural forms. Closes: #594218
  * Fix possible but improbable segfault in update-alternatives in case
    the master file name contains a format string specifier. Reported by
    Sandro Cazzaniga.
  * Fix realloc usage on compat scandir() implementation.

  [ Raphaël Hertzog ]
  * Fix dpkg-genchanges to not split the short description in the middle of a
    UTF8 character. Closes: #593442
  * Drop -k parameter from the tar call used by dpkg-source to extract
    tarballs. Upstream binary files modified by the packager were not properly
    installed due to this. Thanks to James Westby for the report.
    Closes: #594440
  * Make dpkg Breaks: dpkg-dev (<< 1.15.8) so that older versions of dpkg-dev
    that did not depend on libdpkg-perl must be upgraded together with dpkg.
    Closes: #596417

  [ Helge Kreutzmann ]
  * Fix encoding of German addendum. Closes: #595643

  [ Updated programs translations ]
  * Esperanto (Felipe Castro). Closes: #596173
  * French (Christian Perrier).
  * German (Sven Joachim).
  * Indonesian (Arief S Fitrianto). Closes: #596657
  * Italian (Milo Casagrande). Closes: #592953, #595615
  * Japanese (Kenshi Muto). Closes: #595468
  * Korean (Changwoo Ryu). Closes: #595556
  * Norwegian Bokmål (Hans Nordhaug). Closes: #595208
  * Simplified Chinese (Aron Xu). Closes: #594513
  * Slovak (Ivan Masár). Closes: #595968
  * Swedish (Peter Krefting).
  * Thai (Theppitak Karoonboonyanan). Closes: #594011

  [ Updated man page translations ]
  * French (Christian Perrier).
  * German (Helge Kreutzmann).
  * Swedish (Peter Krefting).

  [ Updated scripts translations ]
  * French (Christian Perrier). Includes a fix to a specific
    message translation that was imprecise. Closes: #596333
  * German (Helge Kreutzmann). Improved by Holger Wansing.
  * Norwegian Bokmål (Hans Fredrik Nordhaug). Closes: #595299
  * Spanish (Omar Campagne).  Closes: #596518
  * Swedish (Peter Krefting).
  * Russian (Yuri Kozlov). Closes: #595175

 -- Guillem Jover <guillem@debian.org>  Tue, 14 Sep 2010 01:26:21 +0200

dpkg (1.15.8.4) unstable; urgency=low

  [ Guillem Jover ]
  * Fix use after free segfault on update-alternatives --remove-all.
    Closes: #591653, #591654
  * Always print a message on warning when parsing control files.
  * On database parsing only warn on bogus versions previously accepted,
    the other instances will keep producing errors, to avoid newly
    introduced bogosity. Closes: #590885, #590896, #591692, #591885
  * Fix compilation on Solaris and Darwin:
    - Link update-alternatives against libintl if libc does not have i18n
      support.
    - Include <limits.h> for _POSIX_MAX_PATH in update-alternatives.
    Thanks to Fabian Groffen <grobian@gentoo.org>.

  [ Raphaël Hertzog ]
  * Fix make -C man install so that it actually finds the manual pages
    to install. Closes: #591588
  * When analyzing the ELF format of a binary in dpkg-shlibdeps, fallback on
    usual objdump when the cross objdump failed. Closes: #591522

  [ Sven Joachim ]
  * Ensure removal of leftover backup .dpkg-tmp files after unpacking
    failures, when the backup is still a hard link to the original file.
    Closes: #591993

 -- Guillem Jover <guillem@debian.org>  Fri, 13 Aug 2010 06:02:10 +0200

dpkg (1.15.8.3) unstable; urgency=low

  [ Raphaël Hertzog ]
  * Fix dpkg-divert test suite to cope with + and other special characters for
    regexps in the build directory name. Thanks to Jonathan Nieder for the
    patch and to Phil Kern for the report. Closes: #591182

  [ Guillem Jover ]
  * Fix buffer overflow in dpkg_ar_member_put_header causing it to write the
    header to fd 0 (instead of ar_fd) depending on the stack layout, affecting
    armel. Thanks to Phil Kern for the analysis and Reinhard Tartler for the
    initial patch. Closes: #591312

 -- Guillem Jover <guillem@debian.org>  Mon, 02 Aug 2010 10:38:07 +0200

dpkg (1.15.8.2) unstable; urgency=low

  * Bump libdpkg-perl Depends on dpkg to 1.15.8, as it will break dpkg
    versions before that when installing and removing libdpkg-perl,
    because older update-alternatives and dpkg-divert require Dpkg.pm and
    Dpkg/Gettext.pm which will disappear due to the Replaces. Closes: #590867
    Thanks to Sven Joachim <svenjoac@gmx.de> for the analysis.
  * Allow specifying again absolute and relative paths for dpkg-buildpackage
    -r option. Closes: #591010

 -- Guillem Jover <guillem@debian.org>  Sat, 31 Jul 2010 04:20:01 +0200

dpkg (1.15.8.1) unstable; urgency=low

  * Fix off-by-one error in update-alternatives that lead to an infinite loop
    while writing the administrative file. Closes: #590854

 -- Raphaël Hertzog <hertzog@debian.org>  Thu, 29 Jul 2010 21:18:16 +0200

dpkg (1.15.8) unstable; urgency=low

  [ Raphaël Hertzog ]
  * Add new commands --before-build and --after-build to dpkg-source
    and modify dpkg-buildpackage to call them automatically at the
    start and at the end of the process. With "3.0 (quilt)" source packages
    this ensures patches are applied even in case of binary-only builds.
    Closes: #572526
  * Merge non-regression test for Ubuntu's specificities concerning
    changelog handling. Closes: #582389
  * Fix some copy-paste mistakes in dpkg-architecture(1). Thanks to Ian Fleming
    <iflema@yahoo.com.au> for the patch and Colin Watson for forwarding out of
    Launchpad. Closes: #582404 LP: #564308
  * Clarify description of dpkg --configure in dpkg(1). Thanks to Colin Watson
    for the patch and to Robert Persson for the report.
    Closes: #582406 LP: #77287
  * Fix the non-regression test lib/dpkg/test/t-ar.c by not overflowing the
    size of ar_name. Thanks to Colin Watson for the report, analysis and patch.
    Closes: #582401
  * Modify Dpkg::Shlibs::Objdump to use the cross objdump binary when cross
    compiling. Thanks to Loïc Minier for the initial patch. Closes: #578365
  * Make dpkg-maintscript-helper more robust when required parameters are
    missing. Closes: #582814
  * Clarify that dpkg-maintscript-helper rm_conffile needs the last version of
    the package that did not remove the obsolete conffile if this was not
    implemented at the time the file became obsolete. Closes: #582893
  * Enhance dpkg-maintscript-helper rm_conffile and mv_conffile to work
    properly when <lastversion> is not given (or is empty). Closes: #582819
  * Small fix in dpkg-gensymbols' handling of tags. Closes: #583656
    Thanks to Michael Tautschnig <mt@debian.org> for the report and the fix.
  * update-alternatives has been rewritten in C, the only feature change
    should be that it uses its own logfile /var/log/alternatives.log (rotated
    like dpkg.log).
  * Implement new --unapply-patches option for dpkg-source with source formats
    2.0 and 3.0 (quilt) that unapplies the patches after a successful build.
    This option can be put in debian/source/local-options in the package VCS
    repository for instance.
  * Implement new --abort-on-upstream-changes option for dpkg-source with
    source formats 1.0, 2.0 and 3.0 (quilt). It aborts every time that you try
    to build a source package which contains (unmanaged) changes to the
    upstream source code. Closes: #579012
  * dpkg-source now captures the output of patch and prints it on error so
    that the user can better diagnose what went wrong. Closes: #575304
  * Fix Dpkg::Changelog to cope properly with an entry of version "0".
    Add non-regression test for this. Closes: #587382
  * Add --export command to dpkg-buildflags to be used in shell with eval.
  * Modify source format "3.0 (git)" to use git bundles. Thanks to Joey Hess
    for the patch.
    The usage of git bundle avoids distributing cruft. Closes: #477954
    It's no longer needed to tell which branch contains the debian packaging,
    it uses automatically the one that was used at build-time. Closes: #534637
  * Pass --no-name option to gzip to avoid encoding the timestamp in the file
    so that the result is more predictable. Closes: #587724
    Also pass --rsyncable to make source packages more rsync friendly.
  * Replace dpkg-source's tar ignore pattern "*~" with "*/*~" to avoid
    matching on the top level directory. Closes: #588265
  * In source formats "2.0" and "3.0 (quilt)", make sure to remove the
    upstream-provided debian directory before copying the debian-provided
    version of that directory in place. Closes: #590297

  [ Guillem Jover ]
  * Require gettext 0.18:
    - Remove embedded gettext files from the repository, now properly
      installed by autopoint for all po/ directories.
    - Add versioned Build-Depends.
  * Fix variable usage after delete in dselect.
  * Change default configure admindir to LOCALSTATEDIR/lib/dpkg from
    LOCALSTATEDIR/dpkg, so that we can use a correct --localstatedir=/var.
  * Add two new dpkg options --path-exclude and --path-include for filtering
    files on package installation. This allows embedded systems to skip
    /usr/share/doc, manpages, etc. Based on work from Tollef Fog Heen and
    Martin Pitt, thanks! Closes: #68788, #68861, #497304, #525567, #583902
  * Remove obsolete internal status aliases “postinst-failed” for
    stat_halfconfigured and “removal-failed” for stat_halfinstalled.
  * Check version syntax when parsing it from libdpkg based programs.
    Closes: #574704
  * Rewrite mksplit in C, and merge it into dpkg-split.
  * Rewrite dpkg-divert in C.
  * Use linux-any wildcard for libselinux1-dev Build-Depends instead of
    using a list of negated architectures.
  * Use Breaks instead of Conflicts in dpkg, dpkg-dev and libdpkg-perl binary
    packages.
  * Move Dpkg.pm and Dpkg/Gettext.pm from dpkg to libdpkg-perl.
  * Bump Standards-Version to 3.9.1.
  * Detect when another process has locked the database, and mention that
    problematic dpkg --audit results might be due to ongoing operations.
    Closes: #80252
  * Add new dpkg --force-confask option that forces a conffile prompt when
    the conffile from the new package does not differ from the previous one.
    Thanks to Henning Makholm <henning@makholm.net>. Closes: #102609
  * On dpkg-divert --rename, check if the source file exists, and disable
    renaming if it does not. Closes: #550252
    As a side effect, this avoids useless errors when the destination
    directory is not existent or writable. Closes: #581544
  * Properly compute the longest package description from all to be displayed
    on “dpkg-query --list”, so that it does not get incorrectly trimmed.
  * Consistently use earlier/later instead of smaller/bigger when describing
    comparison relationships. Closes: #587641
  * Stop exporting DPKG_LIBDIR to maintainer scripts, no need for it anymore.
  * Assign correct SE Linux label on non-regular files. Based on a patch by
    Russell Coker <russell@coker.com.au>. Closes: #587949
  * Add -F option to dpkg-buildpackage to be able to explicitly specify a
    normal full build and combine it with -nc. Closes: #547993
  * Add missing mentions of the Breaks field alongside the other fields
    sharing the same syntax in deb-control(5).
    Thanks to Osamu Aoki <osamu@debian.org>. Closes: #590472

  [ Updated programs translations ]
  * Catalan (Guillem Jover).
  * German (Sven Joachim).
  * Russian (Yuri Kozlov). Closes: #579149
  * Swedish (Peter Krefting).

  [ Updated man page translations ]
  * German (Helge Kreutzmann).
  * Russian (Yuri Kozlov). Closes: #579149
  * Spanish (Omar Campagne).
  * Swedish (Peter Krefting).

  [ New scripts translation ]
  * Spanish (Omar Campagne).

  [ Updated scripts translations ]
  * French (Christian Perrier).
  * German (Helge Kreutzmann). Improved by Holger Wansing.
  * Russian (Yuri Kozlov). Closes: #579149
  * Swedish (Peter Krefting).

 -- Guillem Jover <guillem@debian.org>  Thu, 29 Jul 2010 09:37:35 +0200

dpkg (1.15.7.2) unstable; urgency=low

  [ Raphaël Hertzog ]
  * Update dpkg-buildflags to respect $XDG_CONFIG_HOME and to use
    $XDG_CONFIG_HOME/dpkg/buildflags.conf by default.
  * Update deb-substvars(5) to codify how variables containing multiple
    lines must be managed.
  * Fix boolean evaluation of Dpkg::Version so that version 0 evaluates to
    false and dpkg-shlibdeps can strip the minimal version specification.
    Closes: #579724
    Document this behaviour in the API and add non-regression test to ensure
    it's kept.
  * Let dpkg-buildflags error out when a required parameter is missing.
    Closes: #579722
  * Add Bug-Ubuntu field in DEP-3 template provided in the automatic header
    of patches in 3.0 (quilt) source packages. Thanks to Benjamin Drung
    <bdrung@ubuntu.com> for the patch. Closes: #578002
  * Update deb-override(5) by removing references to usage of sections
    to place the packages on the mirrors and by indicating that the Debian
    policy offers a list of allowed values for section and priority.
    Closes: #575410
  * Update reference to triggers.txt.gz in dpkg-trigger(1) and deb-triggers(5)
    to match the new location. Closes: #580774
  * Drop mention of PKG_CONFIG_LIBDIR in dpkg-buildpackage(1), the feature has
    been removed in 1.15.6.
  * Rename /usr/lib/dpkg/maintscript-helper into
    /usr/bin/dpkg-maintscript-helper, it is a public interface even if working
    around known limitations.
  * Add "supports" command to dpkg-maintscript-helper to ensure the wanted
    command is supported before calling it.

  [ Guillem Jover ]
  * Add powerpcspe support to ostable and triplettable.
    Thanks to Sebastian Andrzej Siewior <sebastian@breakpoint.cc> and
    Kyle Moffett <Kyle.D.Moffett@boeing.com>. Closes: #568123, #575158
  * Fix dpkg --root by properly stripping again the root directory from the
    path of the maintainer script to execute. Closes: #580984
  * On Linux use sync() instead of an fsync() per file on deferred extraction,
    to workaround performance degradation on ext4. Closes: #578635

  [ Gerfried Fuchs ]
  * Fix syntax error in dpkg-name. Closes: #581315

 -- Guillem Jover <guillem@debian.org>  Wed, 19 May 2010 07:57:14 +0200

dpkg (1.15.7.1) unstable; urgency=low

  * Fix dpkg-source -b (without -i) for source packages 1.0. Closes: #578693
    It was erroneously ignoring all changes because the ignore regex was
    wrong (due to the change to ignore debian/source/local-options).
  * Add missing call to textdomain() in dpkg-mergechangelogs to make
    translations work.

 -- Raphaël Hertzog <hertzog@debian.org>  Thu, 22 Apr 2010 08:05:20 +0200

dpkg (1.15.7) unstable; urgency=low

  [ Raphaël Hertzog ]
  * Clarify the plan concerning dpkg-source, debian/source/format and
    the default source format in dpkg-source(1). Add a warning
    in dpkg-source to invite people to always create debian/source/format.
    We deprecate the fallback to "1.0" (it's there for backwards compatibility
    only) and debian/source/format is going to be mandatory at some point in
    the future. Closes: #553928
  * Add .gitattributes to list of files ignored by dpkg-source.
  * Document most common warnings and errors of dpkg-source in its manual
    page.
  * Let dpkg-source read options from debian/source/local-options as well but
    do not include that file in the generated source package.
  * Improve explanation of --all option in dpkg-parsechangelog(1). Thanks to
    Jari Aalto. Closes: #575706
  * Fix dpkg to not lose package metadata on filesystems where readdir()
    returns new files added after the opendir() call, btrfs in particular
    triggered the problematic behaviour. Closes: #575891
  * Tigthen the regex used by dpkg-source to match the component name of
    supplementary tarballs so that underscore (_) are not allowed as it was
    supposed to be.
  * Introduce a new script called dpkg-buildflags: its purpose is to retrieve
    compilation flags and it should be used within debian/rules to pass
    the right compilation flags to the build process. dpkg-builpackage still
    exports them to not break packages currently relying on them but packages
    should now start using dpkg-buildflags instead. Closes: #560070
  * For Ubuntu set default value of LDFLAGS to -Wl,-Bsymbolic-functions.
  * Cleanup some old Conflicts/Replaces, thanks to Helge Kreutzmann.
  * Modify dselect to treat all unknown package as known and marked for purge.
    This is a temporary work-around so that dselect doesn't try to reinstall
    packages of priority > standard that were removed or not installed. Thanks
    to Robert Luberda for the patch. Closes: #559519, #556889
  * dpkg now exports DPKG_MAINTSCRIPT_NAME to maintainer scripts with the
    type of maintainer script currently running (preinst, postinst, prerm,
    postrm). Closes: #546577
  * dpkg now exports DPKG_LIBDIR to maintainer scripts pointing to the
    private directory containing internal programs like the upcoming
    maintscript-helper.
  * Add $DPKG_LIBDIR/maintscript-helper program that can be used in
    maintainer scripts to perform common operations working around
    current dpkg limitations: first version supports removing obsolete
    conffiles and renaming conffiles. Closes: #514316
  * Fix "dpkg-scansources -e", it was calling a non-existing function.
    Closes: #578162
  * Add new script dpkg-mergechangelogs to do 3-way merges of Debian
    changelogs. Add libalgorithm-merge-perl to Recommends for the
    benefit of this script.

  [ Colin Watson ]
  * Modern tar files typically use NormalFile1 rather than NormalFile0 for
    file objects. A typo meant that the former never triggered rename
    deferral. Closes: #577756
  * Use the new list of files on rename deferral instead of old one, so that
    newly added files get installed.

  [ Guillem Jover ]
  * Report deferred trigger errors on status-fd. Closes: #574599
    Thanks to Michael Vogt <michael.vogt@ubuntu.com>.
  * When creating hard links to normal files on extraction use the .dpkg-new
    filename for source as the file is not yet in place due to the rename
    deferral. Thanks to Colin Watson for the initial patch.
  * Do not output the Package-Type field on udeb.
  * Fix versioned Replaces to not produce file overwrite errors on downgrades.
    Closes: #568566
  * Fix installation of replaced and replacing packages in reverse order
    (first the replacing then the replaced) for which the replaced package
    is supposed to get disappeared, to disappear the correct package and not
    lose track of the ownership of the replaced files.

  [ Updated dpkg translations ]
  * German (Sven Joachim).

  [ Updated dselect translations ]
  * German (Sven Joachim).

  [ Updated man page translations ]
  * German (Helge Kreutzmann).

  [ Updated scripts translations ]
  * German (Helge Kreutzmann).

 -- Guillem Jover <guillem@debian.org>  Wed, 21 Apr 2010 04:05:55 +0200

dpkg (1.15.6.1) experimental; urgency=low

  [ Guillem Jover ]
  * Fix two memory leaks introduced in 1.15.6.
  * Always use C99 variadic macros, as the build requires them anyway, we
    avoid exposing the configure variable HAVE_C99 on installed headers.
  * Use __attribute__ keyword depending on compiler support, we avoid
    exposing the configure variable HAVE_C_ATTRIBUTE on installed headers.
  * Do not allow a --retry schedule in start-stop-daemon where forever is
    the last item, as it needs something to repeat over. Closes: #570938
  * Show dselect dependency/conflicts resolution screen again, by switching
    the code to use STL's min() and max() instead of preprocessor macros, to
    avoid multiple evaluation of arguments. Regression introduced in 1.15.6.
    Based on a patch by Robert Luberda <robert@debian.org>. Closes: #574816
  * Defer the fsync and rename for normal files in tar extraction so that
    it's done in one pass afterwards, to avoid massive I/O degradation due to
    the serialization from each write + fsync. This restores extraction times
    to numbers closer to the ones before the fsync patch introduced in 1.15.6.

  [ Raphaël Hertzog ]
  * Accept source packages without "Format" field for compatibility with very
    old source packages. Thanks to Colin Watson for the report and the patch.
    Closes: #574097

  [ Updated dpkg translations ]
  * French (Christian Perrier).
  * Swedish (Peter Krefting).

  [ Updated scripts translations ]
  * Swedish (Peter Krefting).

 -- Guillem Jover <guillem@debian.org>  Wed, 24 Mar 2010 13:56:28 +0100

dpkg (1.15.6) experimental; urgency=low

  [ Raphaël Hertzog ]
  * debian/control: Add the accent on my first name.
  * Perl API cleanup:
    - rename Dpkg::Deps dump() methods into output([$fh]), overload string
      representation ("$dep") to provide the result of $dep->output()
    - prefix public functions in Dpkg::Deps with deps_ and export them
      by default
    - rename Dpkg::Source::Compressor in Dpkg::Compression::Process
    - rename Dpkg::Source::CompressedFile in Dpkg::Compression::FileHandle
      and completely redesign its API
    - update Dpkg::Compression's API to use compression_* functions
      instead of granting direct access to variables, integrate
      there management of default compression
    - introduce Dpkg::Interface::Storable and update many modules
      to make use of it
    - update Dpkg::BuildOptions to provide an object-oriented interface
    - update Dpkg::Checksums to provide an object-oriented interface
  * Drop debian-maintainers from Suggests since it's obsolete, the
    corresponding keyring is in debian-keyring.
  * Merge support of symbol patterns in dpkg-gensymbols. Thanks to
    Modestas Vainius for his work (see further for more details).
  * Accept filename with spaces and colon in the output of objdump.
    Required so that dpkg-shlibdeps support such files properly.
    Thanks to Raphaël Geissert for the patch. Closes: #565712
  * When unpacking a "3.0 (quilt)" source package, tell quilt where
    patches are (to be) stored. Requires quilt >= 0.48-5 to work.
    Closes: #557619
  * Fix update-alternatives to not try to reinstall an unknown alternative
    when the link group is broken, instead switch to the best choice in
    automatic mode. Closes: #566406
  * Don't return duplicate bug numbers in Launchpad-Bugs-Fixed:.
    Thanks to Brian Murray <brian@ubuntu.com> for the report
    and the patch. Closes: #569618
  * Add $VERSION numbers to all perl modules. Closes: #465256
    1.00 and higher means that the API should be stable
  * While parsing diff's output, accept any sentence that contains the word
    differ (as specified by POSIX) to identify that binary files could not be
    compared. Closes: #570008
  * dpkg-gencontrol does no longer accept arch-specific dependencies in
    arch: all packages. Closes: #560071
  * dpkg-gencontrol no longer warns if a substitution variable provided by -V
    is not used (the warning is meant to catch unused substitutions coming
    from the file, those are package specific with debhelper). Closes: #557133
  * dpkg-gencontrol now indicates which package is concerned by the substvars
    warning that it displays. Closes: #566837
  * dpkg-buildpackage now supports options --source-option=<opt> and
    --changes-option=<opt> to forward arbitrary options to dpkg-source and
    dpkg-genchanges respectively. Closes: #566230
  * The -T option of dpkg-{source,gencontrol,genchanges} can now be used
    multiple times to read substitution variables from multiple files.
    Closes: #363323
  * dpkg-source now supports an option --create-empty-orig in formats
    "2.0" and "3.0 (quilt)" to auto-create the main original tarball when
    there are supplementary tarballs. This makes it easier to bundle
    multiple software together. Closes: #554488
  * dpkg-source supports long option names --diff-ignore and --tar-ignore for
    -i and -I. A new option --extend-diff-ignore is introduced. Those options
    can thus now be used in debian/source/options.
  * Generate manual pages for perl modules.
  * Introduce the libdpkg-perl package and clarify its status in README.api.
  * Update Standards-Version to 3.8.4 (no changes needed).
  * Drop unused lintian override for arch-dep-package-has-big-usr-share on
    dselect.
  * The rewritten Dpkg::Checksums deals properly with filenames with
    spaces. Closes: #572030
  * dpkg-source does no longer fallback to other source formats if the
    requested one is not usable. Closes: #557459
  * Modify dpkg-source to error out when it would apply patches containing
    insecure paths (with "/../") and also error out when it would apply a
    patch through a symlink. Those checks are required as patch will happily
    modify files outside of the target directory and unpacking a source package
    should not be able to have any side-effect outside of the target
    directory. Fixes CVE-2010-0396.
  * Also error out when the quilt series contains a path with "/../" as this
    can cause patch to create files outside of the source package due
    to the -B .pc/$path option that it gets.

  [ Guillem Jover ]
  * Handle argument parsing in dpkg-checkbuilddeps and dpkg-scanpackages
    in a way consistent with the rest of the tools.
  * Recognize --help in addition to -h in dpkg-checkbuilddeps.
  * Add a --version option to dpkg-checkbuilddeps.
  * Improve and mark more messages in writedb() to make translators lifes
    easier. Closes: #408525
  * Improve update-alternatives --display output to use two leading spaces
    for current link and slave information. Use single quotes for both “best”
    and the alternative it's pointing to. Closes: #549167
  * Refer to “half configured” instead of “failed config” in «dpkg-query -l»
    header and dselect package status printing for consistency.
  * Make “dpkg-statoverride --quiet” actually do something, and quiesce
    most of the inoquous warning messages. Closes: #403211
  * Make “dpkg-statoverride --update --add” fail if it cannot update the
    mode and owner of the file. This would fail later on when dpkg itself
    applies the overrides, so better to signal this earlier.
  * Add sparc64 to cputable. Thanks to Aurelien Jarno <aurel32@debian.org>.
    Closes: #560010
  * Do not allow diverting a file to itself, which makes the file to get
    removed. Closes: #312206
  * Make the check for duplicate fields in a stanza in libdpkg actually work,
    which now makes it fatal, as was intended originally. This should not
    cause problems for anything using dpkg-dev to build packages as those
    are already fatal on that case.
  * Add new deb-split(5) man page.
  * Fix misspellings of “explicitly” all over the place.
  * Normalize ar member names when reading (removing trailing spaces and
    slash), this allows deb-split packages be created with GNU ar.
  * Validate compression level on dpkg-deb argument parsing.
  * Fix error handling, clean up and refactor compression code.
    Thanks to Jonathan Nieder for several of the patches.
  * Do not print unambiguous epoch on dpkg file overwrite error.
  * Rename Dpkg::IPC::fork_and_exec() to Dpkg::IPC::spawn().
  * Change dpkg-dev to Depend on perl instead of perl5 and perl-modules.
  * Fix small memory leaks related to scandir() in dpkg-deb and libdpkg.
  * Fix dpkg-query and dpkg-trigger to actually print a version on --version.
  * Always spawn a new shell on conffile prompt, instead of supporting
    self backgrounding, remove DPKG_NO_TSTP environment variable support.
    Closes: #38334
  * Set DPKG_SHELL_REASON, DPKG_CONFFILE_OLD and DPKG_CONFFILE_NEW environment
    variables when spawning a shell for conffile examination. Closes: #60329
    Thanks to Daniel Martin <Daniel.Martin@jhu.edu> for the idea.
  * Add support for disabling update-alternatives at configure time using
    --without-update-alternatives.
  * Add support for disabling install-info at configure time using
    --without-install-info.
  * Update debian/copyright.
  * Use Debian instead of ‘Debian GNU/Linux’ when referring to the
    distribution.
  * On dpkg --no-act with --install, --unpack or --record-avail, and
    dpkg-deb --info or --field use mkdtemp() to create a temporary directory
    instead of insecure tempnam() or tmpnam() functions.
  * Remove --license and --licence options from tools.
  * Securely remove newly installed files when rolling-back a failed unpack.
  * Change default lzma compression level from 9 to 6.
    Thanks to Jonathan Nieder for the initial patch.
  * Add support for xz compressed data.tar member of binary packages. Add
    xz-utils to dpkg's Pre-Depends. Closes: #542160
    Thanks to Jonathan Nieder for the initial patch.
  * Use xz command to handle lzma compressed files in dpkg and dpkg-dev.
    This removes the lzma package from both dpkg and dpkg-dev dependencies.
  * Do not set PKG_CONFIG_LIBDIR in dpkg-buildpackage when cross-building.
    The proper solution to this is to let the build system choose the
    appropriate pkg-config binary for the build or host system in the same
    way pkg.m4 is handling it now. Closes: #551118
  * Dynamically link against all external libraries. This includes libbz2
    and zlib for dpkg-deb and and libselinux for dpkg on GNU/Linux.
  * Mark the libdpkg.a API as volatile and require any possible users to set
    LIBDPKG_VOLATILE_API to acknowledge that fact.
  * Add a new libdpkg-dev package with the headers and the static library,
    although its API should be considered volatile.
  * Reorganize the doc contents that goes into each package:
    - README.multicd only in dselect.
    - README.api only in development packages, dpkg-dev and libdpkg-dev.
    - triggers.txt only in dpkg-dev.
  * Move source.lintian-overrides to debian/source/lintian-overrides.
  * Switch SE Linux support to explicitly set path context. This fixes the
    mislabeling of files under <admindir> on conffile extraction or on unpack
    errors, due to improper default context restoration. Closes: #498438
  * Use FIEMAP when available (on Linux based systems) to sort the .list
    files loading order. With a cold cache it improves up to a 70%.
    Thanks to Morten Hustveit <morten@debian.org>.
  * When FIEMAP is not available use posix_fadvise() to start preloading the
    .list files before loading them. With a cold cache it improves up to 40%.
    Thanks to Stefan Fritsch <sf@sfritsch.de>. Closes: #557560
  * Call fsync(2) after writing files on disk, to get the atomicity
    guarantees when doing rename(2). Based on a patch by
    Jean-Baptiste Lallement <jeanbaptiste.lallement@gmail.com>.
    Closes: #430958
  * Call fsync(2) on database directories after creating, renaming or
    unlinking files, to guarantee the new file entry is correctly listed
    in the directory. Base on a patch by
    Jean-Baptiste Lallement <jeanbaptiste.lallement@gmail.com>.
  * Document in the man page the effects of setting TMPDIR for dpkg and
    dpkg-deb, HOME for dselect and dpkg and PAGER for dpkg. Closes: #572836
  * Document the exit codes for dpkg-query. Closes: #571798
  * Document “dpkg-query -l” abbreviated state information in the man page.
    Based on a patch by Marc-Jano Knopp <pub_br_debian.org@marc-jano.de>.
    Closes: #383869
  * Honour LINGUAS environment variable when installing translated man pages.
  * Allow disabling at configure time Unicode ncurses support for dselect.
    Based on a patch by Yuri Vasilevski <yvasilev@gentoo.org>.

  [ Modestas Vainius ]
  * Implement symbol patterns (Closes: #563752). From now on, it is possible to
    match multiple symbols with a single entry in the symbol file template.
    While the concept is not new (wildcards also match multiple symbols),
    patterns cover much more ground and are a lot more flexible. Together with
    the framework, 3 basic pattern types are supported:
    - c++ - matching C++ symbols by their demangled name (as emitted by
      c++filt);
    - symver - matching by symbol version. It replaces the wildcards feature
      which is still supported for backwards compatibility but is reimplemented
      on top of the new framework;
    - regex - matching symbol names with perl regular expression.
    Basic patterns may be combined where it makes sense.
  * As a positive side effect of the new symbol patterns implementation,
    patterns are now treated like normal symbols whenever possible, e.g. a
    pattern is MISSING if it does not match anything. As a result,
    dpkg-gensymbols is now able to detect NEW/MISSING symbols when patterns are
    present in the symbol file (Closes: #541464). Please note, however, that
    there is no way to detect symbol changes in the pattern match sets.
  * Add source version to the dpkg-gensymbols diff label, reformat it according
    to the rules of dpkg-name.
  * Add -a<arch> option to dpkg-gensymbols.
  * Add -q option to dpkg-gensymbols. -c0 will never fail but still generate a
    diff. Use -c0 -q to keep dpkg-gensymbols completely quiet as before
    (Closes: #568228).

  [ Jonathan Nieder ]
  * Fix a file handle leak in “dpkg-deb --info”. Thanks to Raphael Geissert
    for the report and patch.

  [ Helge Kreutzmann ]
  * Add dpkg-gensymbols.1 to the translatable man page set.

  [ Updated dpkg translations ]
  * Catalan (Guillem Jover).
  * French (Christian PERRIER).
  * German (Sven Joachim).
  * Italian 'Milo Casagrande). Closes: #567531
  * Simplified Chinese (Aron Xua). Closes: #558794
  * Slovak (Ivan Masár). Closes: #559269
  * Swedish (Peter Krefting).

  [ Updated dselect translations ]
  * Catalan (Guillem Jover).
  * French (Christian Perrier).
  * German (Sven Joachim).
  * Spanish (Javier Fernández-Sanguino). Closes: #572861
  * Swedish (Peter Krefting).

  [ Updated man page translations ]
  * French (Christian Perrier): correcting inconsistencies for the translation
    of "original" here and there. Thanks to Julien Valroff for pointing this.
  * German (Helge Kreutzmann).
  * Swedish (Peter Krefting).

  [ Updated scripts translations ]
  * Catalan (Guillem Jover).
  * French (Christian PERRIER).
  * German (Helge Kreutzmann).
  * Swedish (Peter Krefting).

 -- Guillem Jover <guillem@debian.org>  Fri, 12 Mar 2010 00:15:31 +0100

dpkg (1.15.5.6) unstable; urgency=low

  * dpkg-source: with format "3.0 (quilt)" ensure quilt's .pc directory is
    created before trying to register a new patch in .pc/applied-patches.
    Thanks to Tommi Vainikainen <thv+debian@iki.fi> for the report and the
    patch. Closes: #561237
  * Fix dpkg-buildpackage to set "parallel=" in DEB_BUILD_OPTIONS instead of
    the invalid "parallel=-1" when option "-j" is given. Closes: #562038
  * Clarify how dpkg-source --print-format works and display messages on
    STDERR when the requested format is discarded. Closes: #560391
  * Add ${misc:Depends} in all Depends fields.

 -- Raphaël Hertzog <hertzog@debian.org>  Fri, 08 Jan 2010 17:57:43 +0100

dpkg (1.15.5.5) unstable; urgency=low

  * Allow again new lines in dpkg-source and dpkg-genchanges on substvar and
    maintainer arguments.

 -- Guillem Jover <guillem@debian.org>  Tue, 22 Dec 2009 09:49:49 +0100

dpkg (1.15.5.4) unstable; urgency=low

  * Fix Dpkg::Index::get() and remove(). Thanks to Roderich Schupp
    <roderich.schupp@googlemail.com> for the patch. Closes: #558595
  * Modify implementation of "3.0 (quilt)" source format to not be
    behave differently depending on whether quilt is installed or not.
    The option --without-quilt is thus gone and dpkg-source creates
    and relies on the .pc directory to know whether patches are applied
    or not. Closes: #557667
  * Add new dpkg-source option --single-debian-patch supported by the source
    format "3.0 (quilt)" so that it behaves more like 1.0 and its single diff
    that is constantly updated with all upstream changes. Useful if the
    workflow is VCS based and can't generate a full patch set.
  * dpkg-source now uses debian/source/patch-header as header of the automatic
    Debian patch in format "3.0 (quilt)".
  * Fix Debian changelog parser so that the trailer line is again checked.

 -- Raphaël Hertzog <hertzog@debian.org>  Mon, 07 Dec 2009 09:24:31 +0100

dpkg (1.15.5.3) unstable; urgency=low

  [ Raphaël Hertzog ]
  * Avoid usage of IO::String in dpkg-scanpackages, rely on Dpkg::IPC
    instead to directly get a pipe file descriptor. Closes: #557013
  * Put "3.0 (quilt)" in the default list of formats tried by dpkg-source
    after "1.0" and before "3.0 (native)".
  * Let dpkg-source fail if several upstream orig.tar files are available
    (using different compression scheme) since we don't know which one
    to use.
  * Add missing "use Dpkg::Gettext" in Dpkg::Changelog::Entry::Debian.
    Closes: #557668
  * When building "3.0 (quilt)" source packages, use QUILT_PATCH_OPTS="-t -F 0
    -N -u -V never -g0" so that quilt is as strict as dpkg-source's internal
    implementation of quilt. Closes: #557664, #558233
  * Before accepting to build a 3.0 (quilt) source packages, ensure that
    debian/patches is a directory (or non-existing) and that
    debian/patches/series is a file (or non-existing). Closes: #557618
  * Dpkg::IPC::fork_and_exec() now includes the changed environment
    variables in the default error message displayed when the sub-process
    fails.

  [ Guillem Jover ]
  * Verify that the alternative used in update-alternatives --set has been
    registered instead of failing with an undefined value in the slave
    method. Closes: #554136
  * Strip leading spaces in the first line of a field's value in
    Dpkg::Control::Hash. Closes: #557547

 -- Guillem Jover <guillem@debian.org>  Fri, 27 Nov 2009 19:23:36 +0100

dpkg (1.15.5.2) unstable; urgency=low

  * Change Dpkg::Version API to accept invalid versions by default and add
    is_valid() method. The boolean evaluation of a version object returns
    true if the version is valid, false otherwise.
  * Update dpkg-shlibdeps to always use Dpkg::Version now that it can
    contain the empty version string. Closes: #556786
  * Keep compatibility with perl 5.8 by avoiding the _ prototype.

 -- Raphaël Hertzog <hertzog@debian.org>  Wed, 18 Nov 2009 11:54:50 +0100

dpkg (1.15.5.1) unstable; urgency=low

  * Fix build failures due to off_t type mismatch caused by not including
    <config.h> first on the unit tests. Suggested by Pierre Habouzit and
    Julien Cristau, thanks!

 -- Guillem Jover <guillem@debian.org>  Tue, 17 Nov 2009 16:42:00 +0100

dpkg (1.15.5) unstable; urgency=low

  [ Guillem Jover ]
  * Remove obsolete conffiles on purge. Closes: #421367, #453005, #454628
  * Update list of binaries dpkg checks on the PATH.
    - Remove install-info, now a wrapper that will disappear soonish.
    - Add programs used by dpkg itself: sh, rm, find, tar and dpkg-deb.
  * Check and warn on duplicate conffiles in dpkg-deb. Closes: #131633
  * Make the upstream build system silent by default with automake 1.11 or
    newer, and always verbose when building the Debian packages.
  * Fix small leak when parsing ‘--ignore-depends’ option values.
  * Define compatibility WCOREDUMP only if the system does not have it.
  * When start-stop-daemon fails to set the io scheduling warn instead of
    finishing fatally. Closes: #553580
  * Update md5 file paths in debian/copyright.
    Thanks to Jonathan Nieder <jrnieder@gmail.com>.
  * On ‘dpkg-trigger --help’ print the default admindir instead of the one
    passed on the command line.
  * Abort on configure if the required C99 extensions are not supported.
  * Add C coding style document.
  * Make dpkg as strict as dpkg-statoverride on input when validating the
    parsed data from the statdb.
  * Rewrite dpkg-statoverride in C.
  * Use C99 snprintf function family semantics to avoid having to call them
    in a loop to grow the varbuf buffer. This should reduce memory usage and
    be slightly faster on varbufprintf calls.
  * Use the size from stat to allocate the buffers for readlink, instead of
    indefinitely calling readlink and growing the buffer. This should reduce
    memory usage when handling lots of symlinks, and be slightly faster.
  * Rework varbuf api to avoid increasing buffers indefinitely when adding
    content to them, regardless of space being already available.
  * Fix build macros to allow start-stop-deaemon to use TIOCNOTTY.
  * Generate the autoconf version from git to make it easier to see when a
    snapshot version is being used.
  * Add infrastructure for doxygen, for now not installed anywhere.
  * Allow overriding the pkg-config path to ease cross-compilation.
    Suggested by Tollef Fog Heen <tfheen@err.no>.
  * Fix spelling errors in the Catalan translation. Closes: #553328
    Thanks to Robert Millan.
  * Update the FSF postal address in the source code license headers by
    replacing it with a URL to the gnu.org page.
  * Fix a file descriptor leak in dpkg-deb.
    Reported by Raphael Geissert <atomo64@gmail.com>.
  * Fix resource leaks on error conditions in compat scandir.
  * Add a new status-fd action when disappearing a package. Closes: #537338

  [ Raphaël Hertzog ]
  * Add versioned dependency on base-files (>= 5.0.0) to dpkg-dev to ensure
    that /etc/dpkg/origins/default exists. Closes: #545274
  * Update Standards-Version to 3.8.3 (no changes needed).
  * Major changes to the perl API:
    - Dpkg::Control is now Dpkg::Control::Info
    - Dpkg::Cdata is gone and is replaced by a new Dpkg::Control
    - Dpkg::Control::Fields contains authoritative information
      about fields allowed in various types of control information
      (and can be customized by each vendor). It also integrates
      information that was previously available through Dpkg::Deps.
    - Dpkg::Changelog has been split in multiple modules and largely
      modified to offer an interface that is now more in line with the
      other modules.
  * All dpkg-* perl programs that work with control information have been
    updated to use the new Dpkg::Control interface.
    In this process, dpkg-scanpackages has been fixed to not skip non-standard
    fields. Closes: #494136
  * Create Launchpad-Bugs-Fixed directly in the changelog parsing code thanks
    to a new vendor hook post-process-changelog-entry. Closes: #536066
  * Integrate dpkg-ftp into dselect. Add the required Replaces and Conflicts.
  * dpkg-scanpackages/dpkg-scansources now supports compressed override files.
  * dpkg-scanpackages now supports a new --medium option as needed to
    generate Packages.cd file for consumption by the multicd dselect access
    method. Closes: #402527
  * Integrate dpkg-multicd into dselect. Add the required Replaces and
    Conflicts. The dpkg-scanpackages fork is dropped. Closes: #516631
  * Fix bashisms in dselect multicd access method. Closes: #530070
  * Add support of "xz" compression method for source packages. Add dependency
    dpkg-dev → xz-utils to ensure xz and unxz are available.
  * Fix dpkg-source --include-binaries to correctly compute the path name of
    the discovered binary files. Closes: #554612
  * Remove extra quoting that should not be there while passing an exclude
    file to git ls-files during build of 3.0 (git) source package.
    Thanks to Courtney Bane for the patch. Closes: #551829
  * Optimize dpkg-source -b by avoiding many diff calls when not required.
    Thanks to Mike Hommey for the idea. Closes: #554689
  * Add new option --print-format to dpkg-source to be able to know by advance
    the source format that would be used during a build.
  * Modify dpkg-source -b to use default build options from
    debian/source/options. Thus it's now possible to have sticky options, for
    example for the choice of a compression method (--compression=<comp>).
  * dpkg-source outputs the list of upstream files modified by the diff.gz
    (applies only to source packages using format 1.0). Closes: #482166
    It also recommends usage of 3.0 (quilt) format during dpkg-source -b if it
    detects changes to upstream files that are stored in the .diff.gz.
  * Add DEP-3 compliant headers to automatic patches created by dpkg-source
    in 3.0 (quilt) source format. Closes: #543581
  * Switch dpkg to source format "3.0 (native)" with bzip2 compression.

  [ Updated dpkg translations ]
  * Czech (Miroslav Kure).
  * French (Christian Perrier).
  * German (Sven Joachim).
  * Italian (Milo Casagrande). Closes: #548615, #555806
  * Polish (Wiktor Wandachowicz). Closes: #548541
  * Swedish (Peter Krefting).

  [ Updated dselect translations ]
  * Czech (Miroslav Kure).
  * French (Christian Perrier).
  * German (Sven Joachim).
  * Polish (Wiktor Wandachowicz). Closes: #548541
  * Swedish (Peter Krefting).

  [ Updated man page translations ]
  * French (Christian Perrier).
  * French translation error fixed (Christian Perrier)
    Thanks to Pietro Battiston for spotting it. Closes: #545446
  * German (Helge Kreutzmann).
  * Polish (Wiktor Wandachowicz). Closes: #548541
  * Swedish (Peter Krefting).

  [ Updated scripts translations ]
  * German (Helge Kreutzmann).
  * Polish (Wiktor Wandachowicz). Closes: #548541
  * Swedish (Peter Krefting).

 -- Guillem Jover <guillem@debian.org>  Tue, 17 Nov 2009 10:17:57 +0100

dpkg (1.15.4.1) unstable; urgency=medium

  * Do not mark any package as unseen in dselect. This is a workaround
    until it learns how to store such information again. Closes: #545366

 -- Guillem Jover <guillem@debian.org>  Mon, 19 Oct 2009 15:15:17 +0200

dpkg (1.15.4) unstable; urgency=low

  [ Guillem Jover ]
  * Call _g instead of g_ in dpkg-name.
  * Fix inverted logic when deciding to assume the architecture in dpkg-name
    when the package didn't have such field.
  * Do not take into account Revision and Package_Revision fields in dpkg-name
    and dpkg-scanpackages as they have been handled already by “dpkg-deb -I”.
  * Switch dpkg-scansources to use Dpkg::Cdata instead of duplicating the
    .dsc parsing code. As a side effect it now handles properly bogus files.
  * Do not remap obsolete fields in dpkg-scanpackages as they have been
    handled already by “dpkg-deb -I”.
  * Properly mark packages being purged for disappearance from the database.
    This will make the status database not be left behind with traces of old
    not-installed packages. Closes: #472208
  * On parse mark not-installed leftover packages for automatic removal from
    the database on next dump. This obsoletes the --forget-old-unavail option,
    thus making it now a no-op. Closes: #33394, #429262
  * Document “hold” under package selection states instead of flags in dpkg(1).
  * Remove trailing ‘/’ and ‘/.’ from the directory name to be used as the
    package name on “dpkg-deb -b”. Closes: #218018, #373602
  * Remove obsolete ‘hold’ and ‘hold-reinstreq’ internal status flags.
  * Add fakeroot to dpkg-dev Recommends. Closes: #536821
  * Fix an always false test when trying to decide which package to deselect
    to resolve a dependency problem in dselect.
  * Add uClibc Linux support to ostable and triplettable. Closes: #455501
  * Add uClinux support to ostable and triplettable.
    Thanks to Simon Richter <sjr@debian.org>.
  * When aborting due to file conflicts print the version of the conflicted
    package. Closes: #540019
  * Remove double slash in database path visible to the user in some error
    conditions.
  * Stop matching sparc64-*-* GNU triplets with sparc Debian architecture.
  * Add support for config.d style directories in dpkg and dselect,
    (/etc/dpkg/dpkg.cfg.d and /etc/dpkg/dselect.cfg.d respectively).
  * Define DPKG_MAINTSCRIPT_ARCH on the maintainer script environment to the
    architecture the package got built for.
  * Document DPKG_MAINTSCRIPT_PACKAGE maintainer script environment variable
    in dpkg man page.
  * Document DPKG_RUNNING_VERSION maintainer script environment variable
    in dpkg man page.
  * Change po4a usage to not create unwanted changes depending if doing out or
    in-tree builds.
  * Use po4a “--previous” support when updating the man pages.
    Suggested by Christian Perrier <bubulle@debian.org>.
  * On configuration error print file name and line number.
  * Allow quoting values in configuration file options.
  * Add new --pre-invoke and --post-invoke hooks in dpkg.
  * Add new --control-path command to dpkg-query.
  * Use ohshit on bad version syntax in --compare-versions.
  * Add Multi-Arch to the list of known binary package fields for dpkg-dev.
    Thanks to Steve Langasek <vorlon@debian.org>.

  [ Raphaël Hertzog ]
  * Replace install-info by a wrapper around GNU's install-info. The wrapper
    will be dropped in squeeze+1. dpkg now Breaks: old versions of
    info-browsers that do not depend on the new install-info package
    that provides the real functionality. Closes: #9771, #523980
    See http://wiki.debian.org/Transitions/DpkgToGnuInstallInfo for details.
  * Fix dpkg's preinst in case /var/lib/dpkg/alternatives contains unexpected
    sub-directories. Closes: #535138
    And also when one of the file doesn't contain correct alternatives
    information (improper number of lines). Closes: #537558
  * Upgrade Standards-Version to 3.8.2 (no changes).
  * Update deb-substvars(5) to list fields that do not support substvars.
    Closes: #535353
  * Fix dpkg-parsechangelog to include all entries with -v0 parameter.
    Closes: #537800
  * Fix update-alternatives to mention the correct slave link that can't
    be installed due to a conflicting file instead of quoting the master link.
  * Add support for extra override file in dpkg-scanpackages. Thanks to Robert
    Millan for the patch. Closes: #537559
  * Add support for extra override file in dpkg-scansources.
  * Document format of extra override file in a new manual page
    deb-extra-override(5).
  * Update sample in dpkg-gensymbols(1) to give an accurate listing of
    64 bit arches. Thanks to Julien Cristau for the patch. Closes: #540382
  * Create /etc/cron.daily/dpkg to handle the backup of
    /var/lib/dpkg/status in /var/backups. This is taken out of the cron
    package and need no conflicts/breaks as the code does nothing if
    the current status file is already backuped. Thanks to Leo 'costela'
    Antunes <costela@debian.org> for the patch. Closes: #541412
  * Change behaviour of dpkg --merge-avail to not update a package's
    information if the version provided is older than the one already listed
    in the available file. Thanks to Ian Jackson
    <ian@davenant.greenend.org.uk> for the patch. Closes: #496114
  * dpkg-architecture can now export DEB_{HOST,BUILD}_ARCH_{BITS,ENDIAN}
    (pointer size and endianness):
    - cputable (in dpkg) modified to contain those information
    - dpkg-dev depends on dpkg (>= 1.15.4) to ensure that we have an updated
      cputable (and so that a versioned build-dependency on dpkg-dev is enough
      to use this new feature)
    Closes: #531307
  * Split overly long Binary: field values over multiple lines. This is
    allowed since policy 3.8.3. Closes: #494714
  * Improve performance of dpkg-shlibdeps by caching minimal version
    associated to each library in Dpkg::Shlib::SymbolFile. Thanks to
    Jiří Paleček <jpalecek@web.de> for the patch.
  * Slightly improve dpkg-source(1) by giving the section name that we're
    referring to. Closes: #544037
  * Fix translation error in German manpage of dpkg-buildpackage. Thanks
    to Joachim Breitner <nomeata@debian.org>. Closes: #541829

  [ Modestas Vainius ]
  * Provide a meaningful label for dpkg-gensymbols diff.

  [ Updated dpkg translations ]
  * Asturian (Marcos Alvarez Costales). Closes: #535327
  * French (Christian Perrier).
  * German (Sven Joachim).
  * Italian (Milo Casagrande). Closes: #536538
  * Russian (Yuri Kozlov). Closes: #542254
  * Slovak (Ivan Masár). Closes: #537742
  * Swedish (Peter Krefting).

  [ Updated dselect translations ]
  * Russian (Yuri Kozlov). Closes: #542254
  * Slovak (Ivan Masár). Closes: #537741

  [ Updated man page translations ]
  * French (Christian Perrier).
  * German (Helge Kreutzmann), proofread by Jens Seidel.
  * Swedish (Peter Krefting).

  [ Updated scripts translations ]
  * French completed (Christian Perrier).
  * German (Helge Kreutzmann).
  * Russian (Yuri Kozlov). Closes: #542254
  * Swedish (Peter Krefting).

 -- Guillem Jover <guillem@debian.org>  Sun, 06 Sep 2009 09:37:45 +0200

dpkg (1.15.3.1) unstable; urgency=low

  [ Modestas Vainius ]
  * Fix wildcard support in symbol files. Closes: #536034

 -- Guillem Jover <guillem@debian.org>  Wed, 08 Jul 2009 11:26:36 +0200

dpkg (1.15.3) unstable; urgency=low

  [ Guillem Jover ]
  * Unset TAR_OPTIONS when extracting .deb archives.
  * Use default compressor values in dpkg-source from Dpkg::Source::Compressor.
  * Fix dpkg-scanpackages to properly detect spurious overrides.
  * Rewrite dpkg-name in perl.
  * Do not close already closed files in some error conditions in libdpkg.
  * Use the correct units (KiB) in dpkg-split when referring to partsize.
  * Document in dpkg-statoverride(8) that mode needs to be specified in
    octal. Closes: #534551
  * Mark argument names in dpkg-statoverride.1 in italic.
  * Explicitly pass field argument to Dpkg::ErrorHandling::unknown().
  * Move unknown() from Dpkg::ErrorHandling to Dpkg::Fields.

  [ Raphaël Hertzog ]
  * Unset TAR_OPTIONS when creating/extracting tar archives for source
    packages. Closes: #530860
  * Add cleanup of all invalid (master) alternatives in preinst script.
    Closes: #530633, #531611, #532739, #521760
  * Let update-alternatives fix a manual alternative with a dangling symlink
    by switching it to automatic mode. Closes: #529999
  * Add missing paragraph separator in dpkg-buildpackage(1). Thanks to Per
    Andersson <avtobiff@gmail.com>. Closes: #532769
  * Fix English mistake (“as you request” → “as you requested”) in several
    places. Thanks to David Stansby for the patch. Closes: #533171
  * Support tags before symbols in symbols file contained in source packages.
    The first two tags are "optional" (use it to not fail if the symbol might
    disappear from the library without breaking the ABI) and "arch" to
    restrict the set of architectures where the symbol is supposed to exist.
    Thanks to Modestas Vainius <modestas@vainius.eu> for the patch.
    See dpkg-gensymbols(1) for more information. Closes: #521551
  * Do not include #MISSING lines in symbols files integrated in binary
    packages. Closes: #526251
  * Assume an implicit version of "Base" for all unversioned symbols
    that are merged into a SymbolFile. Closes: #533181
  * Add new tag "ignore-blacklist" to force-include symbols which are
    normally blacklisted. This can be useful for libgcc to include symbols
    that the toolchain allows to be shared but that are often static (and
    hence are blacklisted for this reason). Closes: #533642
  * In dpkg-source, explicitly pass --keyring ~/.gnupg/trustedkeys.gpg to
    gpgv as it does not use it if other --keyring parameters are given.
    Closes: #530769
  * In dpkg-vendor, allow to use dashes instead of spaces in vendor
    filenames. Closes: #532222
  * Skip dpkg-genchanges' warning about lower version numbers for backports
    (recognized by ~bpo or ~vola in their version number). Closes: #525115
  * Support all checksum algorithms in dpkg-scanpackages/dpkg-scansources.
    Closes: #533828
  * Fix dependency parsing code in Dpkg::Deps to not accept "foo\nbar"
    even if foo is valid. Closes: #534464
    Thanks to Andrew Sayers for spotting the problem.

  [ Joachim Breitner ]
  * Warn about unused substvars in dpkg-gencontrol. Closes: #532760

  [ Updated dpkg translations ]
  * Catalan (Jordi Mallach). Closes: #532109
  * Czech (Miroslav Kure).
  * German (Sven Joachim). Closes: #534831
  * Simplified Chinese (Deng Xiyue). Closes: #531387
  * Swedish (Peter Krefting).

  [ Updated dselect translations ]
  * Czech (Miroslav Kure).

  [ Updated man page translations ]
  * German (Helge Kreutzmann).
  * Swedish (Peter Krefting).

  [ Updated scripts translations ]
  * German (Helge Kreutzmann).
  * Swedish (Peter Krefting).

 -- Guillem Jover <guillem@debian.org>  Sat, 27 Jun 2009 19:06:43 +0200

dpkg (1.15.2) unstable; urgency=low

  [ Guillem Jover ]
  * Fix FTBFS on GNU/Hurd due to a mismatched define usage in
    start-stop-daemon. Closes: #530446
  * Remove obsolete priorities support from dselect.
    Thanks to Sven Joachim <svenjoac@gmx.de>.
  * Fix bashism (“echo -e”) in dselect disk setup method. Closes: #530071
  * Properly parse fdisk output in dselect disk setup method.
  * Fix memory leaks due to not destroying some pkg iterators.

  [ Updated dpkg translations ]
  * Asturian (Marcos Alvarez Costales). Closes: #529889
  * Basque (Piarres Beobide). Closes: #529857
  * French (Christian Perrier).
  * German (Sven Joachim).

  [ Updated man page translations ]
  * German (Helge Kreutzmann).

  [ Updated dselect translations ]
  * French (Christian Perrier).

  [ Updated scripts translations ]
  * French (Christian Perrier).
  * German (Helge Kreutzmann).

 -- Guillem Jover <guillem@debian.org>  Tue, 26 May 2009 01:00:36 +0200

dpkg (1.15.1) unstable; urgency=low

  [ Raphaël Hertzog ]
  * Fix dpkg-genchanges to not include the additional upstream tarballs
    when they are not desired (specific to source packages using format 3.0
    quilt).
  * Call quilt only once to apply all patches instead of once per patch
    when building 3.0 (quilt) source packages. Closes: #518453
  * Fix dpkg-shlibdeps so that it works again when analyzing binaries
    outside of package's directory. Closes: #518687
  * Modify dpkg-shlibdeps to let shlibs.local override symbols files too.
  * Drop support of debian/control's “Format” field used by dpkg-source while
    it's not too late. Instead debian/source/format should be used to indicate
    the desired source package format.
  * Update deb-triggers(5) and dpkg-trigger(1) to add a reference to
    /usr/share/doc/dpkg/triggers.txt.gz. Closes: #519717
  * Avoid perl warnings in dpkg-gencontrol and dpkg-genchanges when the
    Architecture field is missing in a binary package. Closes: #510282
  * Modify Dpkg::Version::check_version() to not die by default.
    Closes: #510615
  * dpkg-source now ignores all possible vi swap file extensions (and not
    only .swp). The corresponding exclude pattern for -I also got tightened to
    only catch filenames starting with a dot. Closes: #515540
  * dpkg-gencontrol displays a better error message when an ORed dependency
    is used in a union field like Conflicts, Replaces or Breaks.
    Closes: #489238
  * dpkg-source's signature check is now done with gpgv if possible and
    timeouts if not completed within 10 seconds. Closes: #490929
    When using gpg, use --no-default-keyring to be consistent with gpgv's
    behaviour to not use the user's keyring. Closes: #440841
  * Update dpkg-dev dependencies: Closes: #472942
    - Move gnupg to Recommends. It's needed to sign .dsc and .changes.
    - Add gpgv to Recommends. Useful to check signatures of extracted packages.
    - Add debian-maintainers to Suggests. Together with debian-keyring they
    contain all the GPG keys required to verify official Debian packages.
  * Drop /etc/dpkg/origins as it's taken over by base-files (see #487437).
  * Fix dpkg-shlibdeps to properly initialize a symbol-based dependency
    even when some symbols are associated with a (fake) version "0". Such a
    version means that the symbol has always existed in all versions of the
    package.
  * When dpkg delegates to dpkg-query or dpkg-deb to do the actual work, add
    the "--" marker to explicitly document the end of options so that
    arguments starting with a dash are not interpreted as options.
    Closes: #293163
    Thanks to Bill Allombert for the patch.
  * dpkg now correctly refuses empty parameters when an integer value is
    wanted. Closes: #386197 Based on a patch by Bill Allombert.
  * Fix a mistake in the french translation of dpkg's manual page.
    Thanks to Jonathan Gibert. Closes: #522032
  * Fix dpkg-source to not die when uncompressor processes are killed by
    SIGPIPE due to tar closing the pipe without exhausting all the data
    available. Closes: #523329
  * dpkg-gencontrol now handles properly (empty) dependencies which contain
    only spaces. Closes: #522787
  * dpkg-source now accepts additional tarballs (in format "3.0 (quilt)")
    with a "component" name containing dashes. Closes: #524376
  * Fix dpkg-source to not complain on binary files that are ignored and are
    not going to be included in the debian tarball of a "3.0 (quilt)" source
    package. Closes: #524375
  * Bump Standards-Version to 3.8.1 (no change required).
  * Do not store usernames and group names in tarballs created by dpkg-source,
    they are anyway ignored at unpack time. Closes: #523184
  * Fix update-alternatives to not remove real files installed in place of
    an alternative link when the corresponding alternative is fully removed.
    Closes: #526538
  * Add a new dpkg-vendor tool to query vendor information stored in
    /etc/dpkg/origins. It can be used in debian/rules to enable different
    behaviour depending on the current vendor at the time of the build.
    Closes: #498380
    Modify dpkg-buildpackage to not set the DEB_VENDOR environment variable,
    packages should use the dpkg-vendor program instead.
  * Ensure that the automatic patch created in format "3.0 (quilt)" is always
    well registered with quilt even when it's updated by a new call to
    dpkg-source. Thanks to Goswin von Brederlow for the initial patch.
    Closes: #525858
  * Do not update/create debian/patches/.dpkg-source-applied during build,
    it's only meant to document what patches have been applied at extraction
    time. Closes: #525835
  * Let dpkg-buildpackage add the missing execute right on debian/rules if
    needed. Display a warning when it happens. Closes: #499088
  * Allow to combine -nc and -S in dpkg-buildpackage but display a warning
    saying that it's not advised. Closes: #304404
  * Let dpkg-buildpackage error out with subprocerr() when dpkg-checkbuilddeps
    is interrupted/killed by a signal. Closes: #498734
  * Fix dpkg-buildpackage/dpkg-genchanges to properly interpret option -v0.
    Closes: #475916
  * Improves how dpkg-parsechangelog handles non-existing versions
    in its --since, --until, --to, --from options. Approximate the intent
    by selecting the nearest version instead. Closes: #477638
  * Update dpkg-parsechangelog's documentation to make it clearer that spaces
    are not allowed between single characters options and their values.
    Closes: #494883
  * Don't let dpkg-scanpackages complain about missing overrides when
    no overrides file has been given. Closes: #468106
    Thanks to Piotr Engelking for the patch.

  [ Guillem Jover ]
  * Fix typo in dpkg output (‘unexecpted’ → ‘unexpected’). Closes: #519082
    Thanks to Ivan Masár.
  * Sync archtable with architectures currently present in Debian sid.
    - Remove m68k.
    - Add kfreebsd-i386 and kfreebsd-amd64.
  * Add avr32 to cputable. Closes: #523456
  * Detect the curses headers to use instead of hardcoding them.
  * Make dpkg-source do not set arch:any in .dsc on arch-restricted packages.
    Thanks to Philipp Kern <pkern@debian.org>. Closes: #526617
  * Add '.hgtags' to the default dpkg-source -i regex and -I pattern.
    Closes: #525854
  * Use backticks instead of non-portable make $(shell) function in automake.
  * Do not install dselect and start-stop-daemon man pages when the programs
    have been disabled from configure.
  * Move Debian specific keyrings to the Debian vendor class and change the
    Ubuntu vendor class to inherit from it.
  * Do not set the Arch substvar in dpkg-source, avoiding generating warnings
    when there's no compiler present. Closes: #526132
  * Preserve faulting errno when printing reason in start-stop-daemon fatal
    function.
  * Only print fatal errno string in start-stop-daemon if it was non-zero.
  * Print the valid values for the IO scheduler class in start-stop-daemon
    --help output.
  * Print a warning when using obsolete '--print-installation-architecture'.
    Closes: #528171
  * Remove obsolete --largemem and --smallmem dpkg options.
  * Remove obsolete --force-auto-select dpkg option.
  * Remove obsolete priorities support from dpkg.
  * Remove obsolete 822-date program.
  * Do not right justify the database reading progress percent counter.
  * Remove deprecated status on substvars for dpkg-source dpkg-genchanges,
    and stop producing warnings.
  * Make deprecated dpkg-scanpackages --udeb option produce a warning.
  * Change dpkg-source --help output to state there's no default substvar
    file to match reality.
  * Warn in start-stop-daemon if the argument to --name is longer than the
    supported kernel process name size. Closes: #353015, #519128
  * Do not warn in dpkg-deb when parsing unknown fields with the “Private-”
    prefix. Based on a patch by Nils Rennebarth. Closes: #353040

  [ Frank Lichtenheld ]
  * Dpkg::Version: Remove unnecessary function next_elem which just
    replicates the standard shift behaviour.

  [ Colin Watson ]
  * Add "keyrings" vendor hook, used by dpkg-source to allow vendors to
    supply additional keyrings against which source package signatures will
    be verified. Implement this for Ubuntu. Closes: #525834

  [ Updated dselect translations ]
  * German (Sven Joachim).
  * Swedish (Peter Krefting).

  [ Updated scripts translations ]
  * French (Christian Perrier).
  * German (Helge Kreutzmann).
  * Swedish (Peter Krefting).

  [ Added dpkg translations ]
  * Asturian (Marcos Alvarez Costales). Closes: #519478, #519813, #519998
  * Esperanto (Felipe Castro). Closes: #523023

  [ Updated dpkg translations ]
  * French (Christian Perrier).
  * German (Sven Joachim).
  * Slovak (Ivan Masár). Closes: #519084
  * Swedish (Peter Krefting).
  * Russian (Yuri Kozlov). Closes: #526659

  [ Updated man page translations ]
  * German (Helge Kreutzmann).
  * Swedish (Peter Krefting).

 -- Guillem Jover <guillem@debian.org>  Thu, 21 May 2009 06:45:45 +0200

dpkg (1.15.0) experimental; urgency=low

  [ Guillem Jover ]
  * Do not suggest manually changing the alternative symlinks on
    update-alternative's verbose mode. Closes: #412487
  * Refactor subprocess signal setup.
  * Mark and coalesce similar strings for translation.
  * Add '.be' to the default dpkg-source -i regex. Closes: #481716
    Based on a patch by Ben Finney.
  * Fix link order when using libcompat.a and libintl.a by placing them after
    libdpkg.a. Based on a patch by Martin Koeppe. Closes: #481805
  * Remove duplicate program name from dpkg-trigger badusage output.
  * Trim trailing slash and slash dot from 'dpkg -S' arguments when those
    are path names, but not on patterns. Closes: #129577
  * Fix the support for passing more than one --status-fd option to dpkg.
    Until now only the last one was being used.
  * Replace realloc plus error checking usage with m_realloc.
  * Add '.hgignore' to the default dpkg-source -i regex and -I pattern.
    Closes: #485365
  * Support diverting files when origin and destination are on different file
    systems. Based on a patch by Juergen Kreileder. Closes: #102144, #149961
  * Do not silently enable --rename on dpkg-divert --remove. Closes: #160848
  * Do not allocate memory when lstat fails during package upgrade.
  * Properly lstat the correct file when using --root on package upgrade.
    Thanks to Egmont Koblinger. Closes: #281057
  * Print a longer string when a disallowed field value is found when parsing.
  * Use $(filter ...) instead of $(findstring ...) to extract space separated
    options from DEB_BUILD_OPTIONS in debian/rules.
  * Do not leave new conffile as .dpkg-new when it has been diverted, also
    properly activate the file trigger for the diverted conffile.
    Based on a patch by Timothy G Abbott. Closes: #58735, #476899
  * Improve comment on BUGS section in dpkg-deb.1 about lack of authentication
    and checksum support in .deb files. Closes: #492052
  * Use a troff special character for the copyright symbol on man pages.
  * Mark program names in dpkg-trigger.1 in bold.
  * Unmark dselect debug messages for translation.
  * Use a the warning function to uniformly print all warning messages.
  * Properly use internerr to report about programming bugs.
  * Do not log repeated strings when the write call wrote partial data.
  * Change dir to / after chroot when using --instdir.
    Thanks to Colin Watson <cjwatson@ubuntu.com>. Closes: #509578
  * Make dpkg log files user readable. Closes: #480556
  * Clarify in the start-stop-daemon man page that the signal sent by default
    is TERM not KILL. Closes: #507568
  * Warn in dpkg-deb man page that -x will modify the extraction directory
    permissions. Closes: #502496
  * Make start-stop-daemon behave the same way whether --chuid gets a user
    name or a uid. Closes: #368000
  * Add new option --procsched to start-stop-daemon to be able to set the
    process scheduling policy and priority. Closes: #175740
  * Add initial C unit test suite for libdpkg.
  * Sanitize --status-fd output by replacing newlines with spaces.
    Closes: #505172
  * Remove unneeded cpio dependency from dpkg-dev.
  * Add kopensolaris support to ostable and triplettable. Closes: #509312
  * Document in deb.5 in detail the currently supported format, ar member
    names, types of tar archives and data.tar members.
  * Print correct feature name on «dpkg --assert-*» failures.
  * Add progress reporting to dpkg while reading the file list database.
    Based on a patch by Romain Francoise.
  * Add new option --iosched to start-stop-daemon to be able to set the
    IO scheduling class and priority. Closes: #443535
    Thanks to Chris Coulson <chrisccoulson@googlemail.com>.
  * Add tar format detection support to the internal extractor.
  * Add support for ustar long names using the prefix field. Closes: #474092
  * Code refactoring and cleanup, some of the major changes include:
    - Use standard interfaces instead of ad-hoc ones.
    - Fix memory leaks.
    - Fix compilation warnings.
    - Constify string members in structures and arguments in functions.
    - Make local functions static.
    - Remove unused functions, macros and variables.
    - Fix and cleanup libcompat broken replacement implementations.
    - Reduction of module interdependencies.
    - Rename function and variable names to make them more clear.
    - Cleanup and split of header files.

  [ Raphaël Hertzog ]
  * Enhance dpkg-shlibdeps' error message when a library can't be found to
    include the ELF format of the desired library. Closes: #474671
  * dpkg-gensymbols now refuses empty values for the the -v -P and -e
    parameters.
  * Update dpkg(1) to refer to conffile whenever we speak of configuration
    file handled by dpkg. Thus harmonize vocabulary with the policy. Thanks
    to Helge Kreutzmann <debian@helgefjell.de>. Closes: #381219
  * Improve error message stating that dpkg is unable to create a file so that
    it also refers to the real filename instead of the non-diverted name only.
    Thanks to Daniel Hahler for the patch. Closes: #457135
  * dpkg-gencontrol can now again read the control file from its standard
    input with "-c-". Closes: #465340
  * Add DEB_VENDOR environment variable in the build environment to be able
    to change behaviour dynamically depending on the vendor of the current
    system (or target system when the user overrides DEB_VENDOR by setting
    it himself). Closes: #457371
  * dpkg-shlibdeps give less strong warnings for symbols not found in NEEDED
    libraries when the shared library is a non-public directory and is likely
    to be a plugin. Closes: #481165
  * Clarify list of packages displayed by dpkg --get-selections and
    dpkg-query -l. Thanks to Jidanni. Closes: #487455
  * Document -A option in dpkg-buildpackage(1). Closes: #482834
  * Add some warning concerning the available file and the related commands.
    They are mostly obsolete for APT users. Closes: #481185
  * Add new option --listpackage to dpkg-divert. Thanks to Timothy G Abbott
    <tabbott@MIT.EDU> for the patch. Closes: #485012
  * Add new option --require-valid-signature to dpkg-source. Closes: #390282
  * In dpkg-query(1) document the origin of the various fields and warn that
    they are not always available. Closes: #488293
  * Improve error message in install-info when the file doesn't exist.
    Thanks to Thomas Hood <jdthood@yahoo.co.uk>. Closes: #107098
  * Use description of installed package as fallback in dselect.
    Based on a patch from Bruce Sass <bmsass@shaw.ca>. Closes: #21659
  * Reduce memory usage of dselect by avoiding usage of a big infopad.
    Thanks to Michel Lespinasse <walken@zoy.org> for the patch.
    Closes: #395140
  * Largely improve and update dpkg-buildpackage's manual page.
  * Clarify two points in dpkg-source(1). Closes: #490693
  * Support RUNPATH exactly like RPATH in dpkg-shlibdeps. Closes: #502258
    Thanks to Javier Serrano Polo <jasp00@terra.es>.
  * Set Standards-Version to 3.8.0 (no changes needed).
  * Drop some unneeded lintian overrides.
  * Fix a chmod call in dpkg-source to not fail when POSIXLY_CORRECT is set.
    Closes: #506028
  * Optimize dpkg-shlibdeps by caching parsed symbols files and
    objdump objects. Thanks to Modestas Vainius <modestas@vainius.eu> for the
    patch. Closes: #503954
  * Add new framework to hook vendor-specific logic (see
    module Dpkg::Vendor::Default).
  * Add Ubuntu vendor object implementing lookup of launchpad bugs in
    changelogs and a safety-check for Maintainer fields of forked packages
    (launched during source build). Closes: #426752, #499924
  * Improve behaviour of update-alternatives --config. Thanks to
    Osamu Aoki <osamu@debian.org> for the initial patch. We can know
    select between manual and auto in --config and --all. Closes: #392430
  * Fix update-alternatives to not switch to manual mode an alternative
    with a broken symlink (instead let the current action fix it).
    Also ensure that a message is displayed by default when such a switch is
    made. Closes: #141325, #87677
  * Fix update-alternatives' logic to rename files. It failed to ignore errors
    in some cases where it wanted to when the source file didn't exist.
    Closes: #99870
    This also makes update-alternatives less noisy when this happens since we
    don't call mv when we know that it's going to fail.
    Closes: #98822
  * Properly remove inappropriate slave links in update-alternatives even when
    we switch to manual mode with --set or --config. Closes: #388313
  * Modify update-alternatives to always remove the alternative group when the
    last alternative is removed (even in manual mode).
  * Ensure that update-alternative --install fix the links if the alternative
    installed is the one currently selected. Closes: #100135
  * Let update-alternatives deal with empty files in its administrative
    directory by ignoring them. Closes: #457863
  * Add new --target and --as-root options to dpkg-buildpackage to call
    any debian/rules target with the proper build environment.
    Closes: #477916
  * Move update-alternatives, dpkg-divert and dpkg-statoverride to /usr/bin
    but keep compatibility symlinks in /usr/sbin for the squeeze release
    until all maintainer scripts are fixed (see
    http://lintian.debian.org/tags/command-with-path-in-maintainer-script.html).
    Closes: #216606
  * Use dh_lintian to install lintian overrides. Build-Depends on debhelper
    (>= 6.0.7) for this. Update debhelper compatibility level to 6 at the same
    time.
  * Drop cleanup-info script.
  * Reset umask to 0022 in dpkg-gencontrol and dpkg-gensymbols to ensure that
    files created in the DEBIAN directory have sane permissions.
    Closes: #516481
  * Rewrite update-alternatives (so that we can understand it again) and
    implement new features on top of it:
    - the --config output is now sorted. Closes: #437060
    - it now logs information to /var/log/dpkg.log. Closes: #445270
    - it forbids reusing master alternative as slave and vice-versa.
      Closes: #342566
    - it forbids reusing alternative links managed by other alternatives
    - new sanity checks on --install parameters. Closes: #423176
    - install slave link only if the corresponding slave file is available.
      Closes: #143701
    - new option --get-selections to export the configuration of all
      alternatives. It's a simple way to discover the name of all available
      alternatives. Closes: #273406, #392429
    - new option --set-selections to reconfigure a set of alternatives in
      a single command.
  * Document in update-alternatives(8) how one can repair all broken
    alternatives with a single command. Closes: #250258, #395556
  * Modify dpkg-gensymbols to replace #PACKAGE# on the fly while installing
    symbols files so that package having libraries whose name varies between
    architectures do not need to hardcode the package name. Closes: #517264

  [ Pierre Habouzit ]
  * Add a --query option to update-alternatives. Closes: #336091, #441904

  [ Updated scripts translations ]
  * Polish (Wiktor Wandachowicz). Closes: #514106

  [ Updated manpages translations ]
  * Polish (Wiktor Wandachowicz). Closes: #514106

  [ Updated dpkg translations ]
  * Portuguese (Miguel Figueiredo).
  * Korean (Changwoo Ryu).
  * Romanian (Eddy Petri?or)
  * Slovak (Ivan Masár). Closes: #514490

 -- Guillem Jover <guillem@debian.org>  Mon, 02 Mar 2009 06:13:53 +0200

dpkg (1.14.25) unstable; urgency=low

  [ Guillem Jover ]
  * Fix typo in package description ('privides' -> 'provides').
    Thanks to Pascal De Vuyst <pascal.devuyst@gmail.com>. Closes: #510755
  * Do not lose conffiles while replacing them from another package on the
    same install run. Closes: #513857
    As a side effect this fixes the following symptoms:
    - Do not do unneeded conffile prompts when it wasn't locally changed.
    - Do not ensure (and thus do not output debug information) that the
     .dpkg-new and .dpkg-tmp directories for an existing directory do not
      exist. Closes: #80416

  [ Raphaël Hertzog ]
  * dpkg-deb now always produces GNU tarballs inside .deb and ignores
    TAR_OPTIONS. Closes: #513863

  [ Updated dpkg translations ]
  * Basque (Piarres Beobide). Closes: #506092, #509851
  * Simplified Chinese (Deng Xiyue). Closes: #506177
  * Traditional Chinese (Tetralet). Closes: #513312

  [ Updated dselect translations ]
  * Basque (Piarres Beobide). Closes: #509852
  * Norwegian Bokmål (Hans F. Nordhaug).
  * Portuguese (Miguel Figueiredo). Closes: #509904

  [ Updated scripts translations ]
  * Add missing space in French translation.
    Thanks to Cyril "Oeil de lynx" Brulebois.

 -- Guillem Jover <guillem@debian.org>  Tue, 03 Feb 2009 00:00:41 +0200

dpkg (1.14.24) unstable; urgency=low

  [ Raphaël Hertzog ]
  * Fix parsing of objdump output (by dpkg-shlibdeps) in a special case where
    the symbol name is separated only with a single space. Closes: #506139
  * Fix dpkg-shlibdeps behaviour when Build-Depends-Package is used in the
    symbols file. It was merging all dependency templates into the generated
    dependency instead of simply modifying the minimal version. Thanks to
    Modestas Vainius <modestas@vainius.eu>. Closes: #507346
  * Fix dpkg-source to correctly extract a source package even when called
    from a non-writable directory when a target directory has been specified
    on the command line. Closes: #507217, #507219

  [ Guillem Jover ]
  * Do not allow installing packages with non-obsolete conffiles owned by
    other packages without a proper Replaces field. Closes: #508392

  [ Updated dselect translations ]
  * Galician (Marce Villarino). Closes: #509887

  [ Updated dpkg translations ]
  * Galician (Marce Villarino). Closes: #509150
  * Vietnamese (Clytie Siddall). Closes: #509424

  [ Updated scripts translations ]
  * Improve German translation.

 -- Guillem Jover <guillem@debian.org>  Mon, 29 Dec 2008 05:38:31 +0100

dpkg (1.14.23) unstable; urgency=low

  [ Raphaël Hertzog ]
  * Blacklist "__gnu_local_gp" symbol for dpkg-gensymbols. Closes: #500188
    Thanks to Thiemo Seufer <ths@debian.org>.
  * Important bugfix in dpkg-gensymbols for people using includes in symbol
    files: the current object didn't flow back from the included file to
    the including file.
  * Fix Dpkg::Version comparison code. Closes: #504135

  [ Guillem Jover ]
  * Untangle fatal abort condition from the “too many errors” one in the
    archives and packages processing loop. Closes: #367226
  * Abort on unrecoverable fatal errors instead of continuing execution, as
    the recovery code assumed the execution would not be reaching it again
    and some times bogus update files were created either with incompletely
    written content or with '#padding' lines. Closes: #497041, #499070

  [ Updated dpkg translations ]
  * Brazilian Portuguese (Felipe Augusto van de Wiel).
  * Catalan (Jordi Mallach).
  * Czech (Miroslav Kure). Closes: #505910
  * French (Christian Perrier)
  * German (Sven Joachim).
  * Greek (Emmanuel Galatoulas). Closes: #498585
  * Japanese (Kenshi Muto).
  * Korean (Changwoo Ryu). Closes: #505777
  * Norwegian Bokmål (Hans F. Nordhaug).
  * Polish (Wiktor Wandachowicz).
  * Portuguese (Miguel Figueiredo). Closes: #505869
  * Russian (Yuri Kozlov). Closes: #499028, #505735
  * Romanian (Eddy Petri?or).
  * Slovak (Ivan Masár). Closes: #506024
  * Spanish (Javier Fernandez-Sanguino). Closes: #505836
  * Swedish (Peter Krefting).

  [ Updated scripts translations ]
  * Fix typo in Russian. Closes: #499736
  * Fix wrong translation in French. Closes: #504123
  * French (Christian Perrier).

  [ Updated manpages translations ]
  * German (Helge Kreutzmann).

 -- Guillem Jover <guillem@debian.org>  Tue, 18 Nov 2008 11:50:56 +0200

dpkg (1.14.22) unstable; urgency=low

  [ Raphaël Hertzog ]
  * The last "small fix" actually broke conversion of source packages to
    "3.0 (quilt)" format when they have local changes and no pre-existing
    quilt series file. Now always provide a valid name in QUILT_SERIES.
    Closes: #496920
  * Fix permissions of the automatically generated patch in "2.0" and "3.0
    (quilt)" format. They were improperly set to 0600 due to tempfile()
    and were not reset to a sane value. Closes: #496925
  * Fix dpkg-gensymbols to not scan (real) directories accessed through a
    symlink contained in the build tree as they may well not be part of
    the package (with absolute symlinks). It was already skipping symlinks
    (since 1.14.16.6) for similar reasons.

  [ Updated dpkg translations ]
  * Basque (Piarres Beobide). Closes: #496753
  * Brazilian Portuguese (Felipe Augusto van de Wiel).
  * Galician (Jacobo Tarrio).
  * Norwegian Bokmal (Hans Fredrik Nordhaug). Closes: #497309
  * Swedish (Daniel Nylander and Peter Krefting).
  * Vietnamese (Clytie Siddall). Closes: #497893

  [ Updated manpages translations ]
  * Swedish (Peter Krefting).

  [ Updated scripts translations ]
  * Swedish (Peter Krefting).

 -- Raphaël Hertzog <hertzog@debian.org>  Fri, 05 Sep 2008 16:54:45 +0200

dpkg (1.14.21) unstable; urgency=low

  [ Raphaël Hertzog ]
  * Small fix in "3.0 (quilt)" source format when using non-standard name
    of the quilt series.
  * Handle debian.tar.gz files like diff.gz in dpkg-buildpackage and
    dpkg-genchanges to detect the kind of upload.
  * Add "armel" to /usr/share/dpkg/archtable. Closes: #487768
  * Modified Dpkg::BuildOptions to recognize and use spaces as separator
    in DEB_BUILD_OPTIONS (in order to conform with the Debian policy
    ruling established in #430649). Closes: #486937
  * Fix dpkg-source to not use -i and -I by default with "1.0" source
    packages. Closes: #495138

  [ Guillem Jover ]
  * When loading the status file fix up any inconsistent package in state
    triggers-awaited w/o the corresponding package with pending triggers.
    Closes: #487637, #486843, #489068
  * Fix --no-act in triggers related code. Closes: #495097
  * Do not assert when dpkg stops processing packages due to too many
    errors occurred while configuring or removing packages.
    Thanks to Ian Jackson <ian@davenant.greenend.org.uk>. Closes: #483655
  * Move lzma from dpkg Suggests to Pre-Depends. Closes: #456332
  * Match description of -si option in dpkg-buildpackage to the one in
    dpkg-genchanges. Closes: #493743
  * Close --status-fd file descriptors on exec, so that they are not
    inherited by the childs. Closes: #471488, #487684
  * State that the preferred front-end is aptitude and replace one instance
    of dselect usage with apt-get. Closes: #483785

  [ Updated manpages translations ]
  * French (Florent Usseil).
  * German (Helge Kreutzmann).

  [ Updated scripts translations ]
  * Russian (Yuri Kozlov). Closes: #490076
  * German (Helge Kreutzmann).

  [ Updated dpkg translations ]
  * Basque (Piarres Beobide). Closes: #490905
  * Czech (Miroslav Kure).
  * French (Christian Perrier).
  * German (Sven Joachim).
  * Korean (Changwoo Ryu).
  * Romanian (Eddy Petri?or).
  * Russian (Yuri Kozlov). Closes: #488689
  * Simplified Chinese (Deng Xiyue). Closes: #496176
  * Slovak (Ivan Masár). Closes: #488903, #495505
  * Thai (Theppitak Karoonboonyanan). Closes: #488090

  [ Added dpkg translations ]
  * Lithuanian (Gintautas Miliauskas). Closes: #493326

  [ Updated dselect translations ]
  * Romanian (Eddy Petri?or).

 -- Guillem Jover <guillem@debian.org>  Tue, 26 Aug 2008 05:32:39 +0300

dpkg (1.14.20) unstable; urgency=low

  [ Guillem Jover ]
  * Change UTF-8 '©' to '(C)' in deb-version.5 (unfuzzy translations).
  * Document --force-breaks in 'dpkg --force-help' output.
  * Document triggers --debug values in dpkg.1. Thanks to Sven Joachim.
  * Improve package descriptions for dpkg, dpkg-dev and dselect.
    Thanks to Justin B Rye for the review and corrections. Closes: #484002
  * When dpkg-divert does renames do no check the target file if the source
    does not exist and the rename is thus being disabled. This also allows
    to remove bogus diversions. Closes: #476973, #469033
  * Properly close triggers 'File' file, so it does not get leaked to childs.

  [ Raphaël Hertzog ]
  * Add missing 'use File::Path' in Dpkg::Source::Package::V3::quilt.
  * Use debian/patches/debian-changes-<version> (without the trailing ".diff")
    as default name for the automatic patch created by the format "3.0
    (quilt)". This ensures a saner cohabitation with patch systems that
    apply all of debian/patches/*.{diff,patch}.
  * Improve patch parser to accept more patches that are accepted by patch
    itself.
  * Correctly skip comments in quilt series files (concerns "3.0 (quilt)" source
    packages). Closes: #486323
  * The automatically created patches (in source package formats "2.0" and
    "3.0 (quilt)") will now contain "/dev/null" as previous filename when the
    patch creates a new file (instead of putting the same name).
  * Set PERL_DL_NONLZY to 1 in perl scripts that are likely to be called in
    package's configuration scripts to work around the perl bug #479711.

  [ Helge Kreutzmann ]
  * Fix a typo in dselect.1.

  [ Updated dpkg translations ]
  * Basque (Piarres Beobide). Closes: #481043
  * Brazilian Portuguese (Felipe Augusto van de Wiel).
  * Catalan (Jordi Mallach). Closes: #383448
  * Czech (Miroslav Kure).
  * French (Christian Perrier).
  * Galician (Jacobo Tarrio). Closes: #483441
  * German (Sven Joachim).
  * Norwegian Bokmal (Hans Fredrik Nordhaug). Closes: #480626
  * Polish (Wiktor Wandachowicz).
  * Simplified Chinese (Deng Xiyue). Closes: #483143
  * Swedish (Peter Karlsson).
  * Vietnamese (Clytie Siddall). Closes: #481199

  [ Updated manpages translations ]
  * German (Helge Kreutzmann).
  * Polish (Wiktor Wandachowicz).
  * Swedish (Peter Karlsson).

  [ Updated scripts translations ]
  * French (Christian Perrier).
  * German (Helge Kreutzmann).
  * Polish (Wiktor Wandachowicz).
  * Russian (Yuri Kozlov).
  * Swedish (Peter Karlsson).

  [ Updated dselect translations ]
  * Brazilian Portuguese (Felipe Augusto van de Wiel).
  * Polish (Wiktor Wandachowicz).

 -- Raphaël Hertzog <hertzog@debian.org>  Wed, 18 Jun 2008 09:33:54 +0200

dpkg (1.14.19) unstable; urgency=low

  [ Guillem Jover ]
  * Fix a double-free by setting scontext to NULL after calling freecon.
    Based on a patch by Russell Coker. Closes: #474339
  * Add missing import of internerr in Dpkg::Source::Patch.pm.
    Thanks to Marco d'Itri. Closes: #479205
  * Consider also custom Package-Type fields when printing warnings in
    dpkg-gencontrol. Closes: #452273

  [ Raphaël Hertzog ]
  * Add missing import of subprocerr in Dpkg::Source::Package. Thanks to Sven
    Joachim for the patch.
  * Handle symlinks better when deciding if dpkg-source has to copy the
    original tarball in the current extraction directory. Closes: #475668
  * Fix the dpkg-source error message about unrepresentable changes to
    source because the type of a file changed (new and old were inverted).
  * Fix dpkg-genchanges to detect udeb based on Package-Type control
    header instead of file extension analysis on uploaded files.
    Closes: #476113
  * Fix dpkg-source to grant correct permissions to tarballs of native
    source packages. Closes: #477784
  * Add Conflicts: devscripts (<< 2.10.26) to ensure that people are
    using versions of debsign/mergechanges that support the Checksums fields
    in *.dsc and *.changes.
  * Cleanup the various Conflicts/Replaces fields to remove references
    to package that have disappeared before sarge (this includes dpkg-doc-ja,
    dpkgname, and dpkg-static which has never officially been built).
    dpkg-iasearch has been kept as popcon still reports a few installations.
  * Collapsed multiple conflicts of dpkg with old versions of dpkg-dev
    in a single Conflicts: dpkg-dev (<< 1.14.16).
  * The "3.0 (quilt)" source package format now parses correctly series files
    with patch options and warn if something else than -p1 is used.
  * Change the way dpkg-source finds the perl object to use to unpack/build
    a source package to ignore the minor part of the Format: version.
    For example "1.0" and "1.1" would both map to Dpkg::Source::Package::V1
    instead of ::V1_0 and ::V1_1 before. Similarly "3.0 (quilt)" now maps to
    ::V3::quilt instead of ::V3_0::quilt.
  * Fix changelog parser to not fail when an unexpected changelog entry
    appears without the preceding heading line. Closes: #478925
  * Change the "2.0" and "3.0 (quilt)" source packages to refuse by default
    binary files in the debian sub-directory. They have to be whitelisted
    through debian/source/include-binaries. Closes: #473041
  * Make sure triggers are activated when a file is removed in a directory
    shared by multiple packages. Closes: #479850

  [ Helge Kreutzmann ]
  * Minor fixes and clarifications to man pages.

  [ Updated dpkg translations ]
  * Brazilian Portuguese (Felipe Augusto van de Wiel). Closes: #480579
  * Czech (Miroslav Kure).
  * French (Florent Ussel).
  * Galician (Jacobo Tarrio).
  * German (Sven Joachim).
  * Polish (Wiktor Wandachowicz).
  * Portuguese (Miguel Figueiredo).
  * Russian (Yuri Kozlov). Closes: #478827
  * Slovak (Ivan Masár). Closes: #478897
  * Swedish (Peter Karlsson).

  [ Updated manpages translations ]
  * German (Helge Kreutzmann).
  * Polish (Wiktor Wandachowicz).
  * Swedish (Peter Karlsson).

  [ Updated scripts translations ]
  * German (Helge Kreutzmann).
  * Polish (Wiktor Wandachowicz).
  * Russian (Yuri Kozlov). Closes: #479142
  * Swedish (Peter Karlsson).

  [ Updated dselect translations ]
  * Brazilian Portuguese (Felipe Augusto van de Wiel).
  * Czech (Miroslav Kure).
  * French (Christian Perrier).
  * German (Sven Joachim).
  * Russian (Yuri Kozlov). Closes: #478802
  * Slovak (Ivan Masár). Closes: #479007

 -- Guillem Jover <guillem@debian.org>  Mon, 12 May 2008 08:33:07 +0300

dpkg (1.14.18) unstable; urgency=low

  [ Guillem Jover ]
  * Bump po4a version in Build-Depends to 0.33.1-1, as usage of UTF-8
    in original man pages was causing build failures. Closes: #473498
  * Add triggers documentation to dpkg-dev. Closes: #473449
  * Add deb-triggers.5 and dpkg-trigger.1 man pages, and document new
    statuses and options in dpkg.1.

  [ Raphaël Hertzog ]
  * When dpkg-source builds a source package of Format: 2.0 or 3.0 (quilt) it
    applies the patches before the build if
    debian/patches/.dpkg-source-applied doesn't exist. This file is created
    during extraction if patches are applied, and is auto-excluded from the
    debian tarball. This enables on-the-fly conversion of source packages from
    Format: 1.0 to Format: 3.0 (quilt) without manual intervention of the
    user. This feature can be disabled with the option --no-preparation.
  * The dpkg-source option --skip-patches disables application of patches
    during extraction of source packages using Format: 2.0 or Format: 3.0
    (quilt).
  * Ensure the Files field is last in *.dsc and *.changes. This is a
    work-around for some braindead dsc parsers (dupload and sbuild for
    instance, see #473518 and #470440).
  * Initialize dependencies for libraries having symbols files with the
    smallest minimal version listed in the symbols file instead of using
    an unversioned dependency. It's the only way to ensure the library
    presence if it wasn't available in all versions of the package that ever
    existed. Closes: #474079
  * Don't use the -p option of diff for Format: 1.0 source packages.
    dpkg-source of sarge doesn't accept data after @@. Closes: #474417

  [ Updated dselect translations ]
  * German. (Sven Joachim).
  * Swedish (Peter Karlsson).

  [ Updated dpkg translations ]
  * Portuguese (Miguel Figueiredo).
  * Simplified Chinese (Deng Xiyue). Closes: #473523
  * Swedish (Peter Karlsson).
  * Vietnamese (Clytie Siddall). Closes: #473726

  [ Updated manpages translations ]
  * German (Helge Kreutzmann).
  * Swedish (Peter Karlsson).

  [ Updated scripts translations ]
  * German (Helge Kreutzmann).
  * Swedish (Peter Karlsson).

 -- Guillem Jover <guillem@debian.org>  Tue, 08 Apr 2008 07:00:10 +0300

dpkg (1.14.17) experimental; urgency=low

  [ Guillem Jover ]
  * Replace strdup plus error checking usage with a new m_strdup function.
    Closes: #379028
  * Add new keybinding in dselect to restore all selections back to
    whatever's currently installed. Closes: #151540
    Thanks to Colin Watson.
  * Use system timersub and fix timeval normalization in multiplication in
    start-stop-daemon. Thanks to Andreas Påhlsson. Closes: #462225
  * Cosmetic fixes to start-stop-daemon output and man page. Document that
    --chuid will change the group even if it has not been specified. Add
    EXIT STATUS and EXAMPLE sections to man page. Thanks to Justin Pryzby.
  * Add Raphaël Hertzog to Uploaders, and remove Brendan O'Dea and
    Christian Perrier with their permission.
  * Use functions from libcompat when those are not provided by the system.
    - Add strnlen to libcompat.
    - Link programs against libcompat which provides obstack. Closes: #142042
  * Change dpkg-gencontrol to not output the Homapage field on udeb.
  * Reintroduce 'no-debsig' back in dpkg.cfg to avoid failing to install any
    package when debsig-verify is installed. Closes: #311843
  * Fix some small memory leaks. Closes: #469520
    Thanks to Sean Finney.
  * Correct broken dselect logic for self-conflicting packages.
    Thanks to Ian Jackson.
  * Implement 'Breaks' properly in dselect. Closes: #448946
    Thanks to Ian Jackson.
  * Fix erroneous description of Breaks in dselect output.
    Thanks to Ian Jackson.
  * Allow compilation with --disable-nls on systems without libintl.h where
    a non glibc claims to be glibc. Closes: #465420
  * Fix crash when a .deb file becomes unreadable while dpkg is starting.
    Thanks to Ian Jackson. Closes: #255882
  * Few file descriptor cleanup and error handling fixes.
    Thanks to Ian Jackson. Closes: #443338
  * Move test suite invocation to a new check target in debian/rules.
  * Add support for nocheck DEB_BUILD_OPTIONS in debian/rules, so that the
    dpkg test suite can be skept if desired.
  * Improve log and status-fd output by printing more status change updates
    and actions. Thanks to Ian Jackson.
  * Implement triggers support. Thanks to Ian Jackson.
    Closes: #17243, #68981, #215374, #217622, #248693, #308285

  [ Raphaël Hertzog ]
  * Add a warning displayed by dpkg-genchanges if the current version is
    smaller than the previous one. Closes: #4655
  * Add -d and -c options in dpkg-checkbuilddeps to override
    build-depends/conflicts. Closes: #114774
  * Include list of libraries in dpkg-gensymbols' warning about new/lost
    libraries.
  * Add -R option to dpkg-buildpackage so that one can replace the usual
    "debian/rules" by something else. Closes: #355654
  * Always list all binary packages in the Description: field of .changes
    files. It's nice for reviewers and mentors.debian.net was using this field
    on source only uploads to display short description of what the package is
    about.
  * Handle the case when the library has a different SONAME than the one used
    to find it. Closes: #462413
  * Fix Dpkg::Version and Dpkg::Fields::Object to import _g() from
    Dpkg::Gettext. Thanks to Adam Heath and Olivier Berger for spotting
    this. Closes: #465651
  * Change PATH during make check to look into build directories containing
    dpkg and the related scripts. Thanks to Mike Frysinger. Closes: #466957
  * Some lintian cleanup:
    - add overrides for some useless I: tags
    - drop unused overrides
    - updated several manual pages to fix hyphen-used-as-minus-sign
    - fixed manpage-has-errors-from-man in several manual pages
    - removed empty debian/dpkg.prerm
  * Removed old upgrade code from dpkg's preinst and postinst which only
    concerns upgrading from dpkg version older than the one in oldstable
    already. And thus we get rid of old the last usage of read in those
    scripts (fixes lintian's warning read-in-maintainer-script).
  * Removed sorting of dependencies in dpkg-gencontrol and dpkg-source. But
    kept it for all other fields (Enhances, Conflicts, Replaces, Breaks,
    Build-Conflicts and Build-Conflicts-Indep).
  * Instead changed dpkg-shlibdeps to sort the dependencies generated in
    ${shlibs:*} variables.
  * Changed the logic of simplification of dependencies: if any dependency
    must be discarded due to another dependency appearing further
    in the field, the superseding dependency will take the place of the
    discarded one. Added a test case for this.
  * dpkg-shlibdeps properly accounts usage of symbols provided by private
    libraries without SONAME. Closes: #469838
  * Add a new warning to dpkg-shlibdeps when a library NEEDED is in fact
    not used by any of the binaries analyzed. Closes: #472332
  * Add a new --warnings=<value> option to select the set of warnings to
    activate. By default, do not activate the warning about useless
    libraries at the binary level (instead the new warning above is activated
    by default: it's less strict and more useful).
  * dpkg-source has been heavily refactored to make it easier to support
    multiple source package formats. Several new source package formats have
    been added:
    - the format "2.0" is the original wig&pen
    - the format "3.0 (quilt)" is based on 2.0. It uses a tarball for the
      debian directory and can thus include binary files. Binaries
      outside of the debian directory can be also included if they
      are listed in debian/source/include-binaries (and option
      --include-binaries will generate this file automatically).
      Closes: #4588, #4628
    - thus it will also preserve timestamps on Debian-provided
      documentation like README.Debian. Closes: #366555
    - it handles an explicit series of patches and the patch can thus be
      named without constraints. Patches can contain arbitrary
      headers/comments between file chunks. Closes: #363018
    - it ignores changes on a number of temporary and VCS-specific files
      by default. Closes: #203792, #323909
    - the patches in debian/patches can remove files. Closes: #12564
    - the patches are applied at unpack time. Closes: #463048
    - the formats "3.0 (quilt/native)" don't include VCS directories by
      default. Closes: #435126
    - the format "3.0 (custom)" can be used to create a source package
      containing arbitrary files. It's useful for helper tools that can
      generate the files by themselves in a more efficient way
      (like all the *-buildpackage tools). Closes: #246918
    - the formats "3.0 (git/bzr)" are experimental formats based
      on corresponding VCS repositories. Thanks to Joey Hess and Colin Watson
      respectively.
  * dpkg-source has a new --no-check option. It disables GPG check and
    checksums checks. Closes: #220758
  * dpkg-shlibdeps is now able to look into directories containing libraries
    used by cross-built binaries provided that the right environment variable
    are set. Closes: #453267
  * Change default value of LDFLAGS (set by dpkg-buildpackage) to ''
    instead of '-Wl,-Bsymbolic-functions'. It's safer at this point of the
    release cycle.
  * dpkg-buildpackage will set PKG_CONFIG_LIBDIR (but not override an existing
    value) in case of cross-compilation so that pkgconfig finds .pc files
    in the directory specific to the target architecture. Closes: #439979

  [ Frank Lichtenheld ]
  * Add a warning in dpkg-buildpackage if the build-dependencies are not
    satisfied during -S. Closes: #445552
  * Add a missing space in the German scripts translation. Closes: #463398
  * Add improved deb-shlibs.5 manual page by Zack Weinberg. Closes: #466135
  * dpkg-buildpackage exports some build related environment variables
    now. Based on a patch by Matthias Klose. Closes: #465282
    (See dpkg-buildpackage(1) and https://wiki.ubuntu.com/DistCompilerFlags
     for details)
  * Add support for use of SHA1 and SHA256 checksums in .dsc and
    .changes files. Information will be available in Checksums-Sha{1,256}
    fields. .changes format version increased to 1.8.
  * Link dselect against libncursesw. Closes: #466321
  * Forward port a patch from the old changelog parser to the new
    one that got lost during the transition. '+' and '.' can now
    be used in distribution names yet again. Reported by dann frazier.
    Closes: #467470

  [ Updated dpkg translations ]
  * Korean (Changwoo Ryu).
  * Polish (Robert Luberda).
  * Romanian (Eddy Petrişor).
  * Slovak (Ivan Masár). Closes: #471342
  * Swedish (Peter Karlsson).
  * Thai (Theppitak Karoonboonyanan). Closes: #468916

  [ Updated manpages translations ]
  * German (Helge Kreutzmann).
  * Polish (Robert Luberda).
  * Swedish (Peter Karlsson).

  [ Updated dselect translations ]
  * Basque (Piarres Beobide). Closes: #462403

  [ Updated scripts translations ]
  * German (Helge Kreutzmann).
  * Polish (Robert Luberda).
  * Swedish (Peter Karlsson).

  [ Updated dselect translations ]
  * Polish (Robert Luberda).
  * Romanian (Eddy Petrişor).

 -- Guillem Jover <guillem@debian.org>  Sun, 30 Mar 2008 12:48:22 +0300

dpkg (1.14.16.6) unstable; urgency=medium

  * Let dpkg-gensymbols skip directories which are just symlinks when scanning
    the package build dir.
  * Bump urgency to medium to compensate lost days in testing migration due to
    the two last uploads.

 -- Raphaël Hertzog <hertzog@debian.org>  Sat, 26 Jan 2008 19:20:40 +0100

dpkg (1.14.16.5) unstable; urgency=low

  * Fix dpkg-gensymbols handling of #include so that one can include multiple
    times the same file and have it properly taken into account.
  * Add many armel-specific symbols to dpkg-gensymbols' blacklist.
    Closes: #462318

 -- Raphaël Hertzog <hertzog@debian.org>  Thu, 24 Jan 2008 14:20:10 +0100

dpkg (1.14.16.4) unstable; urgency=low

  * Import capit in Dpkg::Cdata from Dpkg::Fields. Closes: #462172

 -- Guillem Jover <guillem@debian.org>  Wed, 23 Jan 2008 08:44:32 +0200

dpkg (1.14.16.3) unstable; urgency=low

  [ Raphaël Hertzog ]
  * Remove the ":utf8" layer that utf8-encodes already valid utf8.
    Closes: #462098
  * Disable variable substitution in dpkg-genchanges. Closes: #462079, #462089

  [ Guillem Jover ]
  * Make start-stop-daemon set the supplementary groups if the real user or
    group are different than the ones we should switch to. Closes: #462075
  * Fix segfault in start-stop-daemon when using --group w/o --chuid (as
    a side effect, using --group alone works for the first time in years).
    Closes: #462072
  * Fix timeout computations for start-stop-daemon --retry option. This has
    not worked properly for a long time (maybe never), but came to light
    due to #460903's fix. Closes: #462104

 -- Guillem Jover <guillem@debian.org>  Tue, 22 Jan 2008 23:39:59 +0200

dpkg (1.14.16.2) unstable; urgency=low

  * Change uid after changing gid and initializing supplementary groups in
    start-stop-daemon. Closes: #462018
  * Change temporary dpkg Breaks on dpkg-dev (= 1.14.13) and (= 1.14.14)
    to Conflicts, so that users from etch can upgrade to sid (or lenny
    once dpkg has migrated).

 -- Guillem Jover <guillem@debian.org>  Tue, 22 Jan 2008 13:05:22 +0200

dpkg (1.14.16.1) unstable; urgency=low

  * Add libtimedate-perl to dpkg-dev's Depends and to Build-Depends.
    Reported by Aurelien Jarno. Closes: #461875

 -- Frank Lichtenheld <djpig@debian.org>  Mon, 21 Jan 2008 12:48:51 +0100

dpkg (1.14.16) unstable; urgency=low

  [ Guillem Jover ]
  * Add build-essential as an implicit Build-Depends in dpkg-checkbuilddeps.
    Closes: #402901
  * Add build-essential to dpkg-dev Recommends.
  * Do not warn about unrecognized Homepage field in binary package stanzas
    in dpkg-genchanges and dpkg-source. Closes: #460309
  * Do not use the enoent helper binary, and use perl POSIX module instead.
  * Keep checking for the process when start-stop-daemon is called with
    --retry even if the daemon removed the pidfile. Closes: #460903
    Thanks to Justin Pryzby for the analysis.
  * Make --quiet silence --test in start-stop-daemon. Closes: #367998
  * Check current uid and gid in start-stop-daemon before calling setuid,
    setgid and initgroups. Closes: #222524
    Based on a patch by Samuel Thibault.
  * Remove unimplemented --test option from update-alternatives.
    Closes: #392432, #461247
  * Additionally check if errno is EEXIST after rmdir(2), as SUSv3 specifies
    that on non-empty directories it can either return that or ENOTEMPTY.
    This fixes run time problems on Solaris.
  * Fix start-stop-daemon --help output to state that --name is one of the
    possible required options to use. Closes: #354999
  * Demote dselect from priority important to optional. Closes: #461327
  * Fix portability issues on HP-UX, by not using backticks inside double
    quotes in m4 files. Closes: #24514
  * Switch Maintainer address to <debian-dpkg@lists.debian.org> from
    <team@dpkg.org>.
  * Add README.feature-removal-schedule describing the features to be removed
    and README.api describing the provided APIs.

  [ Frank Lichtenheld ]
  * Make the -L option of dpkg-parsechangelog actually work (it's
    only been eleven years...)
  * Import the code from my external Parse::DebianChangelog as
    Dpkg::Changelog and Dpkg::Changelog::Debian. Using this
    from parsechangelog/debian adds the following requested
    features:
     - Option to use a non-lossy format. Closes: #95579
     - Various options to better control how many entries
       should be displayed. Closes: #226932

  [ Raphaël Hertzog ]
  * Replaced all the remaining code in controllib.pl by new modules. All
    scripts have been adjusted to use the new modules and controllib.pl has
    been removed.
  * The code to parse debian/control is available in a perl module
    Dpkg::Control. Closes: #26554
  * Temporarily add a Breaks: dpkg-dev (= 1.14.13), dpkg-dev (= 1.14.14) on
    dpkg for the convenience of sid users. Closes: #459815
  * Update dpkg-source(1) to explain better what the directory after -b is.
    Closes: #323606
  * Also force version in ${binary:Version} if dpkg-gencontrol -v<version>
    is used. That way we're consistent with the definition of that variable
    in deb-substvars(5). Closes: #433477
  * Add support of Dm-Upload-Allowed field. Closes: #453400
  * Fix dpkg-shlibdeps' filtering of duplicated dependencies in fields of
    lesser priority (when -d is used).
  * Fix behaviour of dpkg-shlibdeps when the same binary was passed multiple
    times for use in different dependency fields (-d option).
  * Change logic of -si option of dpkg-genchanges to include the original
    tarball only if the current upstream version differs from the upstream
    version of the previous changelog entry. Replaces the heuristic based
    on revision number (-0, -0.1 or -1). Closes: #28701
  * Some code refactoring on dpkg-genchanges and bug fixes in the generation
    of the Description: field. As a result, source only uploads will no more
    have Description fields.
  * Add support of wildcard entries in symbols files. This makes it much
    simpler to write symbols files for well managed libraries but in that case
    dpkg-gensymbols can't check any more if symbols have disappeared.
    Closes: #459359

  [ Updated manpages translations ]
  * Fix typo in French. Closes: #460021
  * German (Helge Kreutzmann).

  [ Updated dpkg translations ]
  * Basque (Piarres Beobide). Closes: #459565
  * French (Christian Perrier).
  * German, Basque, Norwegian Bokmål, Swedish, Vietnamese, Simplified Chinese,
    Galician unfuzzied.
  * Russian (Yuri Kozlov). Closes: #460708

  [ Updated scripts translations ]
  * Russian (Yuri Kozlov). Closes: #460709
  * Swedish (Peter Karlsson).

 -- Guillem Jover <guillem@debian.org>  Mon, 21 Jan 2008 10:00:45 +0200

dpkg (1.14.15) unstable; urgency=low

  [ Raphaël Hertzog ]
  * Make sure {dpkg-dev,dselect}.preinst are included in the source tarball.
    Closes: #452730
  * Blacklist armel-specific symbols in dpkg-gensymbols. Reported by Riku
    Voipio. Closes: #457964
  * Fix typos in various manpages. Patch from A. Costa. Closes: #458276
  * Make dpkg-shlibdeps choose the right symbols files when we have several
    debian/*/DEBIAN/symbols for a given soname. Closes: #458860
  * Add a -S<pkgbuilddir> option to dpkg-shlibdeps to indicate a package build
    tree to scan first when trying to find a needed library.
  * Change dpkg-gensymbols to mark symbols that disappeared with #MISSING
    instead of #DEPRECATED, it's clearer for people.
  * Fix Dpkg::Shlibs::Objdump to properly take into account R_*_COPY
    relocations. Closes: #454036
  * Explain better the order in which postinst/prerm scripts are called
    between a package and its dependencies. Thanks to Nicolas François and
    Helge Kreutzmann for their suggestions. Closes: #379641
  * Fix Dpkg::BuildOptions so that dpkg-buildpackage doesn't double all
    options in DEB_BUILD_OPTIONS when called with the -j parameter.
    Closes: #453656

  [ Guillem Jover ]
  * Move compression related variables to a new Dpkg::Compression module.
  * Remove disabled, obsolete and quite incomplete Hebrew translations.
  * Revert dpkg-dev versioned dependency bump on dpkg >= 1.14.13 back to
    >= 1.14.6, as the compression variables are now in a module in dpkg-dev.
  * Do not display garbage in dselect on monochrome terminals, by setting
    a missing ncurses character attribute. Closes: #155741, #157093
    Thanks to Sven Rudolph.
  * Do not loop endlessly in dselect with very long package descriptions.
    Closes: #179320, #342495
    Thanks to John Zaitseff.
  * Ignore wrapped lines in install-info when matching section titles.
    Closes: #214684
    Thanks to Andreas Metzler and Ian Zimmerman.
  * Do not use strdup for execvp arguments. Closes: #379027
  * Do not print 'failed to kill' warning in start-stop-daemon when polling
    the pid. Closes: #157305, #352554
    Thanks to Samuel Thibault.
  * Properly print build message in dpkg-buildpackage for lzma and bzip2
    compressed sources. Closes: #458519
  * Promote bzip2 Recommends to Depends for dpkg-dev. Closes: #458521
  * Add lzma to dpkg-dev Depends.
  * Do not automatically enable -j if DEB_BUILD_OPTIONS contains parallel=n,
    and allow overriding its value from the environment. Closes: #458589
  * Fix Dpkg::BuildOptions to parse all options in DEB_BUILD_OPTIONS, so
    that dpkg-buildpackage called with -j preserves unrecognized options.
  * Fix several signed vs unsigned value comparisons that were making some
    code to never be executed.

  [ Updated dpkg translations ]
  * French (Christian Perrier).
  * German (Sven Joachim). Closes: #459223
  * Norwegian Bokmål (Hans Fredrik Nordhaug). Closes: #457918, #458732
  * Simplified Chinese (Deng Xiyue). Closes: #459018
  * Swedish (Peter Karlsson).
  * Vietnamese (Clytie Siddall). Closes: #459016

  [ Updated scripts translations ]
  * French (Christian Perrier).
  * Swedish (Peter Karlsson).

  [ Updated man pages translations ]
  * Swedish (Peter Karlsson).

 -- Guillem Jover <guillem@debian.org>  Mon, 07 Jan 2008 12:12:16 +0200

dpkg (1.14.14) unstable; urgency=low

  * Fix override disparity: set priority of dselect to important.
  * Add libio-string-perl to Build-Depends as it's needed by a non-regression
    test (fix FTBFS, thus a quick upload).
  * Make dpkg-dev depend on dpkg (>= 1.14.13) as the latest Dpkg.pm is needed
    for dpkg-source.

 -- Raphaël Hertzog <hertzog@debian.org>  Thu, 27 Dec 2007 11:20:38 +0100

dpkg (1.14.13) unstable; urgency=low

  [ Frank Lichtenheld ]
  * Add an own manpage for Dpkg's version format. Mostly stolen
    from policy. Closes: #373003
  * Fix control file parsing for field values starting with a colon.
    Apparently nobody ever needed this until Vcs-Cvs came along.
    Closes: #453364
  * Copy the usr/share/doc directory to dpkg-dev and dselect (Instead
    of using symlinks). The space requirements are minimal and adding
    the needed dependencies to comply with policy would be way more
    inconvenient. Pointed out by Rene Engelhard. Closes: #452730
  * Allow more than one arch and more than one type of a package
    in debian/files. Parts of the patch by Goswin von Brederlow
    and Bastian Blank. Closes: #356299, #377400, #229143
  * Allow building only architecture independent packages (-A).
    Closes: #109794, #200454
  * Bump Standards-Version to 3.7.3 (no changes)

  [ Raphaël Hertzog ]
  * When dpkg-shlibdeps finds a lib in a directory which is just a symlink to
    another directory that is also considered, remember the other directory
    name as the canonical one. Closes: #453885
  * dpkg-shlibdeps doesn't warn any more about libm.so.6 being unused if the
    binary is also linked against libstdc++ since g++ always add an implicit
    -lm. Closes: #454616
  * Included files in symbols files (via #include) do no more need to repeat
    the header line. Closes: #455260
  * Tweak the sort algorithm between dependencies so that intervals
    are displayed as "a (>= 1), a (<< 2)" instead of the opposite.
    Closes: #455520
  * Extend format of symbols files to support arbitrary fields of
    meta-information. First field is Build-Depends-Package used to extract the
    version requirement possibly encoded in the Build-Depends field and make
    sure that the generated dependency is at least as strict as this one.
  * Fix dpkg-gensymbols to not update version info of a deprecated symbol.
    Closes: #457739
  * Fix dpkg-source's behaviour with options -sk -sK -sp -sP. Closes: #457784

  [ Guillem Jover ]
  * Ignore the man pages when building without NLS support. Closes: #457673
  * Fix perl warnings:
    - Check for undefined values when reading from the alternative db.
  * Properly handle symlinks for alternatives with nonexistent slave links.
    Closes: #76295, #246906, #433567, #451872, #220044, #392440, #441021
    Closes: #443241
    Based on a patch by Daniel Leidert <daniel.leidert@wgdd.de>.
  * Fail when diverting to a non existent directory. Closes: #245562
    Thanks to Flavio Stanchina <flavio@stanchina.net>.
  * Refactor update-alternatives.

  [ Updated dpkg translations ]
  * French (Christian Perrier, as this was trivial).
  * Spanish (Javier Fernández-Sanguino Peña). Closes: #456984
  * Swedish (Peter Karlsson).

  [ Updated man pages translations ]
  * German (Helge Kreutzmann).
  * Swedish (Peter Karlsson).

  [ Updated scripts translations ]
  * French (Frédéric Bothamy).
  * German (Helge Kreutzmann).
  * Japanese (Kenshi Muto). Closes: #455841
  * Swedish (Peter Karlsson).

 -- Guillem Jover <guillem@debian.org>  Thu, 27 Dec 2007 09:16:45 +0200

dpkg (1.14.12) unstable; urgency=low

  [ Raphaël Hertzog ]
  * Add -I<file> option to dpkg-gensymbols to force the usage of a specific
    symbols file.
  * Dpkg::Shlibs::find_library() now returns canonicalized paths.
  * dpkg-shlibdeps always tries the realpath() of a lib as fallback when
    trying to identify the package of a lib (and not only for symlinks).
  * dpkg-shlibdeps doesn't fail any more if it can't find unversioned
    libraries on the presumption that they are just private libraries. Outputs
    a warning instead.
  * Expand the dpkg-shlibdeps manual page with explanations concerning
    failures.
  * The environment variable DPKG_GENSYMBOLS_CHECK_LEVEL can be used to force
    dpkg-gensymbols to use a precise level of checks. Closes: #452022

  [ Guillem Jover ]
  * Define several private functions and variables as static.
  * Move extern declarations to header files and stop defining them as extern.
  * Unify parsing of Section and Priority in dpkg-gencontrol with Homepage.
  * Switch dpkg-scanpackages to use the new Dpkg::ErrorHandling and
    Dpkg::Versions modules.

 -- Guillem Jover <guillem@debian.org>  Thu, 29 Nov 2007 06:14:09 +0200

dpkg (1.14.11) unstable; urgency=low

  [ Raphaël Hertzog ]
  * dpkg-shlibdeps now ignores the lack of dependency information in some
    specific cases (instead of failing):
    - when the library is in the same package than the binary analyzed
    - when the library is not versioned and can't have a shlibs file
  * dpkg-shlibdeps now only displays 10 warnings about symbols not found for
    each binary and a count of skipped warnings. Closes: #452318
  * dpkg-shlibdeps: optimize "dpkg -S" lookups by caching results, patch
    from Aaron M. Ucko <ucko@debian.org>. Closes: #452577

  [ Guillem Jover ]
  * Fix dpkg-scanpackages to properly support an optional override file.
    Closes: #452621

 -- Guillem Jover <guillem@debian.org>  Sat, 24 Nov 2007 07:19:02 +0200

dpkg (1.14.10) unstable; urgency=low

  [ Raphaël Hertzog ]
  * dpkg-shlibdeps now correctly identify private libraries (avoid many
    warnings with perl/python modules). Closes: #452338
  * Move capit() to a Dpkg::Fields module and use it in dpkg-shlibdeps.
    Closes: #452262
  * Add more debug messages to dpkg-shlibdeps to ease collecting information
    in case of problems.
  * dpkg-shlibdeps now accepts again empty dependencies in shlibs files.
  * dpkg-shlibdeps will try harder to identify packages providing a library
    by looking up dpkg -S on the realpath of any symlink to a library.
    Closes: #452339
  * dpkg-source now correctly identifies the extension of the
    orig.tar.{gz,bz2,lzma} file and won't unexpectedly create "Format: 2.0"
    .dsc files.

  [ Guillem Jover ]
  * Add support for Package-Type in dpkg-name.
  * Restore cross compilation support by honouring the environment host and
    arch variables to override the default values on the dpkg-dev scripts.

  [ Updated man pages translations ]
  * Swedish (Peter Karlsson)

  [ Added scripts translations ]
  * Swedish (Peter Karlsson)

 -- Guillem Jover <guillem@debian.org>  Fri, 23 Nov 2007 06:32:27 +0200

dpkg (1.14.9) unstable; urgency=low

  [ Raphaël Hertzog ]
  * Fix bad behaviour of Dpkg::Path::get_pkg_root_dir() and adjust
    dpkg-shlibdeps accordingly. Closes: #452012
  * Fix Dpkg::Deps to accept empty fields. Closes: #452013

  [ Updated man pages translations ]
  * German (Helge Kreutzmann).

 -- Guillem Jover <guillem@debian.org>  Tue, 20 Nov 2007 07:15:41 +0200

dpkg (1.14.8) unstable; urgency=low

  [ Raphaël Hertzog ]
  * Heavy rework of dpkg-shlibdeps:
    - Support "symbols" files to generate finer-grained dependencies.
      Those files can be created by the new dpkg-gensymbols command.
      Closes: #430367
    - Uses now all paths in RPATH (instead of only the first).
      Closes: #395942
    - Support parsing include directives in /etc/ld.so.conf. Closes: #431597
    - Libraries are also searched in the public directories of packages
      being built and thus debian/shlibs.local can effectively define
      dependencies for libraries that are being built. Closes: #80340
    - "symbols" files use the full SONAME as key instead of splitting it in
      (name, version) like in the "shlibs" format. This allows binaries to
      be linked with unversioned libraries and not fail. Note that
      unversioned libraries are still a very bad idea.  Closes: #48208
    - dpkg-shlibdeps now supports '-x<package>' options that can be used to
      exclude packages from generated dependencies (use with care though).
      Closes: #41907, #109954
    - If dpkg-shlibdeps doesn't find any dependency information for a
      shared library that is actively used, then it will fail. This can be
      disabled with the option '--ignore-missing-info'. Closes: #10807
  * Switch perl programs to use the new Dpkg::Deps module. This changes the
    behaviour of dpkg-gencontrol and dpkg-source which will rewrite and
    simplify dependencies and build dependencies as possible. Multiple
    dependencies on the same package are replaced by their intersection.
    Closes: #178203, #186809, #222652

  [ Frank Lichtenheld ]
  * Add $(MAKE) check to build target
  * Allow to use other compressions than gzip on dpkg-source -b
    (NOTE: this will result in a Format: 2.0 source package!).
    Closes: #382673
  * Various small fixes to the manpages suggested by Helge Kreutzmann.
    Closes: #445858
  * Fix Dpkg::BuildOptions (and thereby dpkg-buildpackage) to really
    set DEB_BUILD_OPTIONS. Found by Daniel Shepler. Closes: #446119
  * Change some ' in shell code in dpkg-source.1 and dpkg-query.1 to
    proper \(aq. Reported by Daniel van Eeden. Closes: #447476

  [ Guillem Jover ]
  * Use shipped perl modules when calling perl programs at build time.
  * Switch perl programs to use the new Dpkg::ErrorHandling and Dpkg::Arch
    perl modules.
  * Add support for format strings in Dpkg::ErrorHandling functions.
  * Move build and host arch detection code from dpkg-architecture to
    Dpkg::Arch.
  * Add initial udeb support:
    - Support new fields fields Package-Type, Subarchitecture, Kernel-Version
      and Installer-Menu-Item. Closes: #383916
    - New '--type' option for dpkg-scanpackages.
  * Make dpkg-dev Conflict on dpkg-cross << 2.0.0 which was sourcing
    dpkg-buildpackage expecting it to be a shell script. Closes: #445852
  * Get rid of undefined macros from man pages. Thanks to Colin Watson
    for the analysis.

  [ Updated dselect translations ]
  * Czech (Miroslav Kure).

  [ Added dpkg translations ]
  * Thai (Theppitak Karoonboonyanan). Closes: #446501

  [ Updated dpkg translations ]
  * Czech (Miroslav Kure).
  * Galician (Jacobo Tarrio). Closes: #446624
  * Polish (Robert Luberda).
  * Russian (Yuri Kozlov). Closes: #446278

  [ Updated man pages translations ]
  * German (Helge Kreutzmann). Closes: #448354
  * Polish (Robert Luberda).
  * Swedish (Peter Karlsson).

  [ Added scripts translations ]
  * German (Helge Kreutzmann). Closes: #448353

  [ Updated scripts translations ]
  * Polish (Robert Luberda).
  * Swedish (Peter Karlsson).

 -- Guillem Jover <guillem@debian.org>  Mon, 19 Nov 2007 10:36:30 +0200

dpkg (1.14.7) unstable; urgency=low

  [ Guillem Jover ]
  * Add back $dpkglib into @INC, needed by the controllib.pl require in
    822-date. Closes: #440962
  * Document in dpkg-scanpackages that apt now requires Packages.bz2 in
    preference to Packages.gz. Closes: #440973
  * Stop recognizing the obsolete Optional field when building packages.
  * Use fakeroot, if present, by default to gain root privileges in
    dpkg-buildpackage.
  * Fix typos in dpkg-deb.1 and start-stop-daemon.8. Closes: #441051
    Thanks to A. Costa.
  * After '<prerm> remove' fails and while doing the error unwinding, if
    the '<postinst> abort-remove' call succeeds, preserve the old status
    instead of unconditionally setting it to 'Installed'. Closes: #432893
    Thanks to Brian M. Carlson.
  * Add Vcs-Browser and Vcs-Git fields to debian/control.
  * Add a Homepage field to debian/control (to be changed later when
    there's a more formal site).
  * Allow comparing unsupported architectures for equality and identity.
    Based on a patch by Frank Lichtenheld. Closes: #427210
  * Document Origin and Bugs fields in deb-control.5. Closes: #173463
  * Do not replace substvars for build dependencies (it was not supported
    anyway).

  [ Frank Lichtenheld ]
  * Add _MTN to dpkg-source -i default regex. Suggested by Jari Aalto.
  * Convert dpkg-buildpackage to a Perl script.
    Fix some bugs in the new script detected in experimental:
    Closes: #444362
  * dpkg-buildpackage accepts a -j<n> option now which will set
    MAKEFLAGS(-j<n>) and DEB_BUILD_OPTIONS(parallel=<n>) accordingly.
    parallel=<n> in DEB_BUILD_OPTIONS will be passed to MAKEFLAGS as
    well. Based on an idea by Robert Millan. Closes: #440636
  * Allow dpkg-source -I without a pattern which will load a default
    list of pattern similar to -i without regexp. Patch by
    Jari Aalto. Closes: #440972
  * Rework documentation of dpkg-source's -i and -I options.
    Closes: #323911, #440956
  * Add --utf8-strings to gpg call in dpkg-buildpackage since
    that seems to be the better default. Suggested by Székelyi Szabolcs.
    Closes: #379418
  * Let dpkg-buildpackage error out early if the version number from
    the changelog is not a valid Debian version. Closes: #216075
  * Fix dpkg-source to create correct diffs for files with spaces in
    their name (apparently we don't have many of those ;).
    Based on a patch by Marcel Toele. Closes: #445380

  [ Updated dpkg translations ]
  * Basque (Piarres Beobide). Closes: #440859
  * Danish (Claus Hindsgaul). Closes: #441106
  * French (Frédéric Bothamy).
  * German (Sven Joachim). Closes: #440537
  * Nepali (Shiva Prasad Pokharel). Closes: #437825
  * Portuguese (Miguel Figueiredo). Closes: #441113
  * Romanian (Eddy Petrişor).
  * Vietnamese (Clytie Siddall). Closes: #440502
  * Korean (Sunjae Park). Closes: #443190

  [ Updated man pages translations ]
  * German (Helge Kreutzmann).
  * Swedish (Peter Karlsson).
  * Korean (Sunjae Park). Closes: #443191

  [ Updated scripts translations ]
  * Correct a typo in the French translation. Closes: #443276
  * Swedish (Peter Karlsson).

 -- Guillem Jover <guillem@debian.org>  Mon, 08 Oct 2007 07:31:34 +0300

dpkg (1.14.6) unstable; urgency=low

  [ Frank Lichtenheld ]
  * Synchronise usage information of dpkg, dpkg-deb, and
    dpkg-query man pages. This fixes some small mistakes
    and also Closes: #321520

  [ Guillem Jover ]
  * Man pages cleanup:
    - Some italics and bold fixes.
    - Unify ellipsis, argument separator, and remove redundant program name
      preceding the options.
    - Substitute 'FILES' header with 'SEE ALSO' in dpkg-buildpackage(1),
      and remove leftover string from man page split. Closes: #439306
    - Split option descriptions so that it gets easier to distinguish.
    - Unify author and copyright information formatting.
  * Move variables automatically modified at build time for the perl scripts
    to a new style perl module (Dpkg) and make all programs use it.
  * Switch 'dpkg-gettext.pl' to a new style perl module (Dpkg::Gettext).
  * Implement support for Breaks field. Closes: #379140
    Thanks to Ian Jackson.
  * Run the deconfiguration of each package to be deconfigured once, instead
    of once per each conflicting package being removed. Closes: #378003
    Thanks to Ian Jackson.
  * Do not segfault when the result from a 'dpkg-query -l' is bigger than
    the total number of current packages, and do not produce repeated
    results with overlapping patterns on 'dpkg-query -W'. Closes: #428427
  * Tightening dpkg-dev versioned Depends to dpkg 1.14.6, and dpkg Conflicts
    against << dpkg-dev 1.14.6, where the perl modularization started.
  * Do not print empty lines after 'Setting up ...' output. Closes: #392317
  * When a slave alternative is inapplicable do not attempt to create the
    slave link before removing it again. Closes: #411699
    Thanks to Ian Jackson.
  * Do not consider it a file conflict if the package contains a symlink
    to a directory where the existing symlink on-disk points to the
    same place. Closes: #377682
    Thanks to Ian Jackson.
  * Fix perl warnings:
    - When removing a non diverted file with dpkg-divert. Closes: #438416
  * Implement support for Homepage field. Closes: #142324
  * Ignore XB- fields instead of XC- fields from control file binary package
    stanzas in dpkg-genchanges.
  * Explicitly ignore all known fields from the control file source package
    stanza in dpkg-genchanges, instead of leaving unknown fields unwarned.
  * Implement support for Vcs-Browser, Vcs-Arch, Vcs-Bzr, Vcs-Cvs, Vcs-Darcs,
    Vcs-Git, Vcs-Hg, Vcs-Mtn and Vcs-Svn fields in control file source
    package stanza.
  * Implement support for Tag field.

  [ Updated scripts translations ]
  * French (Frédéric Bothamy, Christian Perrier).
  * Swedish (Peter Karlsson).

  [ Updated dpkg translations ]
  * Dzongkha (Tshewang Norbu). Closes: #430931
  * Nepali (Shiva Prasad Pokharel). Closes: #435353
  * Polish (Robert Luberda).
  * Russian (Yuri Kozlov). Closes: #436147
  * Swedish (Peter Karlsson).

  [ Updated dselect translations ]
  * Russian (Yuri Kozlov). Closes: #436149
  * Swedish (Peter Karlsson).

  [ Updated man pages translations ]
  * German (Helge Kreutzmann).
  * Polish (Robert Luberda).
  * Swedish (Peter Karlsson).

 -- Guillem Jover <guillem@debian.org>  Wed, 05 Sep 2007 07:36:02 +0300

dpkg (1.14.5) unstable; urgency=low

  [ Guillem Jover ]
  * Add lpia support to ostable and triplettable.
  * Fix dpkg-source to not emit duplicated entries for the Architecture field
    in the .dsc file.
  * Fix dpkg-scanpackages to load the override file after having filled the
    packages information. Closes: #428169, #428470
  * Add '.shelf' to the default dpkg-source -i regex. Closes: #427827
    Thanks to Adeodato Simó.
  * Support a colon separated list of paths from the ELF RPATH field in
    dpkg-shlibdeps. Thanks to Jiří Paleček. Closes: #427988
  * Man pages cleanup:
    - Reference deb-substvars(5) instead of dpkg-substvars(5). Closes: #429182
    - Mark dpkg-* commands in bold.
    - Unify title header.
    - Remove an additional space in install-info(8) and mark gzip in bold
      and remove redundant reference to GNU.
    - Fix explanation of dpkg-source '-b' option, remove a reference to
      checking for a missing empty string argument, and add a reference
      to '-sX' arguments affecting the behaviour. Closes: #428167
    - Remove documented dpkg-gencontrol options in dpkg-source left over
      from the man pages split.

  [ Frank Lichtenheld ]
  * Fix typo in German translation of start-stop-daemon(8).
    Noted by Joachim Breitner. Closes: #430008
  * Correct permission and owner/group handling when extracting
    tar balls to match more the user's preferences instead of
    ours or the ones from the originator of the tar ball. Patch
    by Ian Jackson. Closes: #390915, #207289
  * dpkg-source warns now about new empty files since those will
    not be represented in the diff. Closes: #383394

  [ Updated dselect translations ]
  * French (Christian Perrier).
  * Romanian (Eddy Petrişor).

  [ Updated dpkg translations ]
  * Estonian (Ivar Smolin). Closes: #427589
  * Portuguese (Miguel Figueiredo).
  * Romanian (Eddy Petrişor).
  * Spanish (Javier Fernandez-Sanguino). Closes: #429958

  [ Updated man pages translations ]
  * German (Helge Kreutzmann).

 -- Frank Lichtenheld <djpig@debian.org>  Tue, 03 Jul 2007 00:27:07 +0200

dpkg (1.14.4) unstable; urgency=low

  [ Guillem Jover ]
  * Fix perl warnings:
    - When unpacking a source package with -sp from a different directory
      than the one containing the tarball. Closes: #424998
  * Remove an unused variable in dpkg-statoverride by renaming it to the
    initially intended name. Closes: #425041
  * Fix loose regex in dpkg-source (/\.debian.tar/ -> /\.debian\.tar/).
    Thanks to Kylan Robinson. Closes: #425629
  * Revert change on 1.14.0 from Aaron M. Ucko. Trim down duped entries only
    when passing them to dpkg-query instead. Closes: #425641
  * Recognize again architecture wildcards. Closes: #424670

  [ Updated dpkg translations ]
  * Basque (Piarres Beobide). Closes: #425776
  * French (Frédéric Bothamy).
  * Galician (Jacobo Tarrío).

 -- Guillem Jover <guillem@debian.org>  Thu, 24 May 2007 19:30:26 +0300

dpkg (1.14.3) unstable; urgency=low

  [ Guillem Jover ]
  * Fix perl warnings:
    - In dpkg-genchanges when called with -S. Closes: #423193
    - In architecture comparison operations. Closes: #423452
    - Fill slavepaths undefined entries with an empty string to guarantee
      they are always defined. Closes: #423140, #423451, #423544, #423555
  * Include the new split man pages deb-substvars.5, deb-override.5 and
    deb-shlibs.5 in dpkg-dev.
  * Fix deb-substvars.5 section to match reality.
  * Refactor update-alternatives.
  * Fix dpkg-divert to work again w/o specifying the '--divert' and
    '--package' or '--local' options. Closes: #423864
  * Document in install-info.8 that when no '--section' option is specified,
    install-info will try to use the INFO-DIR-SECTION entry from the info
    file. Add missing commas. Thanks to Kurt B. Kaiser. Closes: #397737
  * Disambiguate in install-info.8 the use of 'Info directory' with
    'Info dir file'. Closes: #420766
  * Document in deb-control.5 that the control file can have '#'-style
    comments. Closes: #406481
  * Make start-stop-daemon fork twice while daemonizing.

  [ Updated dpkg-dev translations ]
  * French (Frédéric Bothamy). Closes: #423392

  [ Updated dpkg translations ]
  * French (Christian Perrier).
  * German (Sven Joachim). Closes: #423401

  [ Updated dselect translations ]
  * German (Sven Joachim). Closes: #423403

 -- Guillem Jover <guillem@debian.org>  Tue, 15 May 2007 16:02:59 +0300

dpkg (1.14.2) unstable; urgency=low

  [ Guillem Jover ]
  * Remove bashisms in dpkg-buildpackage. Closes: #422239
  * Handle case in update-alternatives when there's no existing alternative
    to configure. Closes: #260987, #353252, #367717, #392431
  * Add solaris support to ostable and triplettable. Closes: #361866
  * Properly create the generic name symlink in update-alternatives for new
    alternatives. Closes: #422979
  * Include translations again, which disappeared due to a dirty source tree
    and a bogus Makefile.am for the man pages. Closes: #423029, #423085

 -- Guillem Jover <guillem@debian.org>  Wed, 09 May 2007 22:22:45 +0300

dpkg (1.14.1) unstable; urgency=low

  [ Guillem Jover ]
  * Fix partial upgrades by tightening dpkg-dev versioned Depends to
    dpkg 1.14.0, and dpkg Conflicts against << dpkg-dev 1.14.0, where
    the triplettable support first appeared. Closes: #422848

 -- Guillem Jover <guillem@debian.org>  Tue, 08 May 2007 18:23:49 +0300

dpkg (1.14.0) unstable; urgency=low

  [ Guillem Jover ]
  * Make the copyright information in dpkg-deb.1 and dpkg-split.1 match the
    one in the source. Thanks to Nicolas François. Closes: #379320
  * Allow dpkg-buildpackage to properly override '-b' when passed after '-B'.
    Thanks to Julian Gilbey. Closes: #397479
  * Move retrieval of uid and gid information from controllib.pl into a
    function, so that scripts not needing it do not execute that code.
    Based on a patch by Riku Voipio. Closes: #396884
  * Do not bail out in dpkg when building without start-stop-daemon support,
    by checking if the macro value is true instead of it being defined.
    Thanks to Mark Rosenstand.
  * Make all perl scripts use strict and warnings, to ease catching errors.
  * Refactor update-alternatives code, with the side effect that now commands
    on non existing link group files will return an error code (except
    for --remove, now). Closes: #273407
  * Add a missing newline to a warning message in dpkg. Closes: #390914
    Thanks to Ian Jackson.
  * Fix typo in variable name in dpkg-source which was causing it to not
    create directories when extracting the diff. Closes: #374645
  * Fix up and down keystrokes in the dselect help message. Closes: #383438
    Thanks to Sven Joachim.
  * Convert 822-date to be a simple wrapper around 'date -R'. 822-date is
    now deprecated and should not be used anymore. It might be removed
    sometime in the future. Closes: #31634, #367712, #314462
    Thanks to Frank Lichtenheld.
  * Add '.gitignore' to the default dpkg-source -i regex. Closes: #409566
    Thanks to Julien Cristau.
  * Add '.hg' to the default dpkg-source -i regex. Closes: #414794
  * Use l10n-friendlier strings to describe dependencies. Closes: #390916
    Thanks to Ian Jackson.
  * Change priority for dpkg-dev from standard to optional to match the
    override.
  * Do not use a build-stamp in debian/rules.
  * Fix confusing bottom status lines in dselect, unifying them by removing
    the method or package name and capitalizing. Closes: #9085
  * Check proper error value returned by BZ2_bzerror. Closes: #410605
  * Exit with an error instead of an assert if a file name is too long when
    building a .deb package. Closes: #393069
  * Exit with an error instead of an assert if the number of conflictors is
    exceeded. Remove bogus comments. Closes: #377855
  * Fix regular expression special-casing Origin, Bugs and Maintainer fields
    which was making X[SBC]- fields containing such strings to propagate into
    the .deb control file unprocessed. Thanks to Colin Watson.
  * Add support for '--admindir' in dpkg-buildpackage, dpkg-checkbuilddeps
    and dpkg-shlibdeps. Closes: #162348
  * Cleaning and format unification of manual pages.
  * Make the override-file argument to dpkg-scanpackages optional.
  * Refactor compression filtering code.
  * Split override file information from dpkg-scanpackages.1 into
    deb-override.5 manual page.
  * Split dpkg-source.1 into independent man pages, namely deb-substvars.5,
    deb-shlibs.5, dpkg-buildpackage.1, dpkg-distaddfile.1, dpkg-genchanges.1,
    dpkg-gencontrol.1, dpkg-parsechangelog.1 and dpkg-shlibdeps.1.
  * Support building binary packages with the member data.tar.lzma compressed
    with lzma.
  * Require gettext 0.16.1.
  * Show the epoch (if present) when displaying package versions.
    Closes: #107449, #179913, #345594, #393924, #405668
    Based on a patch by Jeffrey W. Baker.
  * Switch from pseudo-tags to usertags, and update the documentation.
  * Fix typo in German dpkg man page. Closes: #416167
    Thanks to Martin Weis.
  * Properly sort Uploaders field in generated .dsc files.
  * Reorder a bit the fields in output files.
  * Speed up dpkg-shlibdeps by avoiding doing a dpkg-query for duped
    libraries. Thanks to Aaron M. Ucko. Closes: #421290
  * Generalize source architecture handling by abstracting it through the new
    Debian triplet and the new triplettable.
  * Add armel support to ostable and triplettable. Closes: #414087

  [ Updated dpkg translations ]
  * Dutch (Bart Cornelis).
  * French (Frédéric Bothamy).
  * Polish (Robert Luberda).
  * Romanian (Eddy Petrişor).
  * Simplified Chinese (Anthony Wong). Closes: #415320
  * Traditional Chinese (Anthony Wong). Closes: #415230

  [ Added dpkg translations ]
  * Estonian added (Ivar Smolin). Closes: #422404
  * Kurdish added (Erdal Ronahi). Closes: #418154
  * Marathi added (Priti Patil). Closes: #416810

  [ Updated man pages translations ]
  * German (German l10n team). Closes: #418528
  * Polish (Robert Luberda).

  [ Updated dselect translations ]
  * Dutch (Bart Cornelis).
  * Polish (Robert Luberda).

 -- Guillem Jover <guillem@debian.org>  Tue, 08 May 2007 11:11:50 +0300

dpkg (1.13.25) unstable; urgency=low

  [ Guillem Jover ]
  * Fix year 2018 in changelog for Michael Alan Dorman's upload in 1998,
    which was confusing the changelog parsers. Closes: #402526
  * Document in its man page that update-alternatives requires cooperation
    from all packages dealing with the specific file. Closes: #396338
    Thanks to Tomas Pospisek <tpo_deb@sourcepole.ch>.
  * Require POSIX inside subprocerr in controllib.pl. Closes: #390636
    Thanks to Brendan O'Dea <bod@debian.org>.
  * Support extracting lzma compressed source and binary packages,
    and add a Suggests on package lzma. Closes: #347715
  * Add '/emul/ia32-linux' biarch paths to dpkg-shlibdeps. Closes: #403216
  * Remove non-modified /etc/dpkg/dpkg.cfg configuration file when upgrading
    from versions 1.9.21 through 1.10.28, to avoid getting prompted about
    conffile changes. Closes: #398061

  [ Updated dpkg translations ]
  * Chinese (Traditional, Asho Yeh).
  * Korean (Sunjae Park). Closes: #394135, #404938
  * Norwegian Bokmal (Hans Fredrik Nordhaug). Closes: #391143
  * Nepali (Shiva Prasad Pokharel).
  * Romanian (Eddy Petrişor).
  * Catalan (Jordà Polo).
  * Swedish (Peter Karlsson).
  * Vietnamese (Clytie Siddall). Closes: #399343

  [ Added dpkg translations ]
  * Punjabi (A S Alam).

  [ Updated dpkg-dev translations ]
  * Catalan (Jordi Mallach).

  [ Updated dselect translations ]
  * Korean (Sunjae Park). Closes: #404943

 -- Guillem Jover <guillem@debian.org>  Tue,  2 Jan 2007 00:23:57 +0200

dpkg (1.13.24) unstable; urgency=low

  [ Guillem Jover ]
  * Fix dselect segfault by adding a field description matching the
    dependency field enum position. Closes: #392731, #392724

  [ Updated dpkg Translations ]
  * Nepali (Shiva Prasad Pokharel). Closes: #373728

 -- Guillem Jover <guillem@debian.org>  Fri, 13 Oct 2006 16:34:39 +0300

dpkg (1.13.23) unstable; urgency=low

  [ Guillem Jover ]
  * Add initial support for the Breaks field, by parsing but rejecting it.
    Thanks to Ian Jackson <iwj@ubuntu.com>. Closes: #375703
  * Use dpkg-architecture from the source tree to get the target Debian
    architecture, instead of duplicating the logic in the m4 files.
  * Remove comment headers in dselect/helpmsgs.{cc,h} about the files being
    autogenerated, replace them with a proper license and copyright comment.
    Closes: #382308
  * Add a new line at the end of m4/compiler.m4 file, to cope with an
    autoreconf failure due to the new m4 1.4.7.

  [ Nicolas François ]
  * Specify --null before the -T tar's option to avoid the "tar: -: file name
    read contains nul character" warning.
    Closes: #376351, #375749, #376724, #377279

  [ Added dpkg Translations ]
  * Dzongkha (Kinley Tshering).

  [ Updated dpkg Translations ]
  * Basque (Piarres Beobide). Closes: #375118
  * Brazilian Portuguese (Andre Luis Lopes).
  * Catalan (Robert Millan, Jordi Mallach). Closes: #383448
  * Czech (Miroslav Kure).
  * Danish (Claus Hindsgaul).
  * Dutch (Bart Cornelis).
  * Dzongkha (Tenzin Dendup). Closes: #388192
  * French (Frédéric Bothamy).
  * Galician (Jacobo Tarrio).
  * German (Sven Joachim). Closes: #381409, #381740
  * Hungarian (SZERVÁC Attila).
  * Italian (Stefano Canepa, Davide Viti). Closes: #387821
  * Japanese (Kenshi Muto). Closes: #386963
  * Khmer (Khoem Sokhem). Closes: #375099
  * Portuguese (Miguel Figueiredo, Rui Branco).
  * Romanian (Eddy Petrişor).
  * Russian (Yuri Kozlov). Closes: #376746, #391143
  * Slovak (Peter Mann). Closes: #387282
  * Spanish (Javier Fernandez-Sanguino). Closes: #386759
  * Swedish (Daniel Nylander). Closes: #383643
  * Vietnamese (Clytie Siddall). Closes: #383588

  [ Added dpkg-dev Translations ]
  * Catalan (Jordi Mallach).
  * French (Philippe Batailler).

  [ Updated dselect Translations ]
  * Brazilian Portuguese (Andre Luis Lopes).
  * Catalan (Robert Millan, Jordi Mallach).
  * Danish (Claus Hindsgaul).
  * German (Sven Joachim). Closes: #384843
    (Sven is now the new German translation maintainer for dpkg and dselect).
  * Hungarian (SZERVÁC Attila).
  * Indonesian (Arief S Fitrianto). Closes: #391144
  * Italian (Stefano Canepa).
  * Japanese (Kenshi Muto).
  * Norwegian Bokmål (Hans Fr. Nordhaug).
  * Russian (Yuri Kozlov).
  * Slovak (Peter Mann).
  * Spanish (Javier Fernández-Sanguino Peña). Closes: #391144
  * Swedish (Daniel Nylander).
  * Vietnamese (Clytie Siddall).

  [ Updated man pages translations ]
  * French (Philippe Batailler).
  * German (Helge Kreutzmann). Closes: #379030

  [ Added man pages translations ]
  * German (Helge Kreutzmann).
    Closes: #379286, #379298, #379417, #379433, #379661, #379798, #379825
    Closes: #379985, #380130, #380239, #380365, #381047, #380660, #380443
    Closes: #381349, #381488
  * Japanese (KISE Hiroshi).
    Closes: #381141, #381865, #384768, #385675, #386965, #388837

 -- Guillem Jover <guillem@debian.org>  Thu, 12 Oct 2006 02:56:09 +0300

dpkg (1.13.22) unstable; urgency=low

  [ Guillem Jover ]
  * Version the po4a Build-Depends to >= 0.23 as we are using options
    introduced in that version. Thanks to Sergio Gelato. Closes: #370536
  * Add '.bzrtags' directory to default dpkg-source -i regex.
    Suggested by Adeodato Simó. Closes: #370392
  * Print update-alternatives '--config' listing layout evenly spaced.
    Closes: #325895
  * Clarify the legend in update-alternatives '--help' (Andrew Ferrier).
    Closes: #305318
  * Add the source version inside parenthesis to the Source field in the
    generated .changes and binary packages if the binary package version
    differs (like in binNMUs). Closes: #62529
  * Add missing comment serving as documentation about abort-remove on
    removal in dpkg.postinst (Justin Pryzby). Closes: #372145
  * Fix typo in dpkg-deb manpage (Robert Luberda). Closes: #373999
  * Clarify dpkg-architecture new options '-e' and '-i' in man page, add
    backward compatibility information and give some examples.
    Thanks for the initial suggestions to Junichi Uekawa. Closes: #370830
  * Modified some strings to be able to merge them in the .pot files.
  * Add new '--umask' option to start-stop-daemon. Closes: #368003

  [ Frank Lichtenheld ]
  * dpkg-source issued spurious warnings about fields defined with
    XB-. They now get correctly suppressed. Closes: #374154
  * Give a correct warning when the user requested an unknown
    sign command that we will default to a pgp style interface.
    Closes: #133470

  [ Updated dpkg Translations ]
  * Romanian (Eddy Petrişor).
  * Galician (Jacobo Tarrio).
  * French (Christian Perrier).
  * Swedish (Peter Karlsson).
  * Basque (Piarres Beobide). Closes: #373107
  * Polish (Robert Luberda).
  * Catalan (Guillem Jover).

  [ New dpkg Translations ]
  * Nepali (Paras Pradhan). Closes: #373728

  [ Updated dselect Translations ]
  * Simplified Chinese (Kov Tchai). Closes: #366260

  [ Updated man pages translations ]
  * Polish (Robert Luberda).

  [ Christian Perrier ]
  * Typo fix in update-alternatives ("alternativse"). Thanks to Eddy Petrisor
    for spotting it. Translations unfuzzied.
  * Make similar messages in dpkg-statoverride and dpkg-divert exactly similar
    Thanks to Eddy Petriso for spotting them, again.

 -- Guillem Jover <guillem@debian.org>  Wed, 21 Jun 2006 18:03:29 +0300

dpkg (1.13.21) unstable; urgency=low

  [ Guillem Jover ]
  * Disambiguate error message about conflicting command line actions by
    providing both long and short option names. Based on a suggestion by
    Josip Rodin. Closes: #45575
  * Add '/lib32' and '/usr/lib32' to the dpkg-shlibdeps library path search
    list. Closes: #367892
  * Revert usage of English perl non-essential module from install-info.
    Closes: #369928, #369958, #370157, #370174, #370210
  * Print the correct file being parsed by dpkg-parsechangelog's debian
    parser. Closes: #368961
  * Fix dependency cycle breaking in the case when every link involves
    a Provides (Ian Jackson). This is a proper fix for #349442.
    Closes: #370017

  [ Updated dpkg Translations ]
  * Czech (Miroslav Kure).
  * Vietnamese (Clytie Siddall).

 -- Guillem Jover <guillem@debian.org>  Sun,  4 Jun 2006 19:02:44 +0300

dpkg (1.13.20) unstable; urgency=low

  [ Frank Lichtenheld ]
  * Add gettext support for the Perl scripts. Based on a patch by
    Nicolas François. Closes: #165843
  * Only print usage information of dpkg-scanpackages on stdout
    if requested explicitly. Use stderr in case of error.
    Closes: #366659
  * Add remarks to dpkg-scansources and dpkg-scanpackages
    man pages about the need to compress the generated files
    to be able to access them via apt. Closes: #65839
  * Allow '+' and '.' in distribution names in Debian changelogs.
    Based on a patch by John Wright.
    Closes: #361171
  * Use the Debian keyring in dpkg-source when checking signatures
    of .dsc files, if available. Closes: #364726
  * Let dpkg-buildpackage pass through all remotely sensible
    -sX options to dpkg-source (-s[nsAkurKUR] currently).
    Closes: #36586
  * Improve the description of --showformat in dpkg-deb
    man page and add a pointer to the complete description
    of the option in dpkg-query.
  * Don't spew out garbage from dpkg-deb, if the second argument
    to -I is a absolute filename. Based on a patch by Ian Eure.
    Closes: #35573
  * Fix --ignore-depends argument value parsing. Closes: #169125
  * Completely remove md5sum diversion madness.  Instead, we Pre-Depend
    on a version of textutils which provides /usr/bin/md5sum.  We rely on
    the logic in coreutils to remove our diversions. Patch by
    Ian Jackson. Closes: #315784, #313605
  * Try harder to detect dependency cycles that contain Provides
    links. Closes: #349120, #349442
  * Update archtable to reflect current archive: Add amd64 and remove
    sh. Closes: #367329
  * Don't claim in dpkg man page that we set DPKG_OLD_CONFFILE and
    DPKG_NEW_CONFFILE on sub shells since we actually don't.
  * Fix printing of user defined fields with --showformat and
    document the existence of this feature in dpkg-query man page.
  * Make --forget-old-unavail more reliable by deleting architecture
    information of removed packages. Patch by Piotr Engelking.
    Closes: #208532
  * When building packages with dpkg-deb give a more useful error
    message in case a conffile entry has leading whitespace. Patch
    by David Lopez Moreno. Closes: #281562
  * Don't drop directories that contain our conffiles too early from
    our file listing. Otherwise we might leave them behind on purge
    if we share them with other packages.
    Closes: #174180, #198128, #198522, #318825, #366178

  [ Nicolas François ]
  * Fix typos in the Russian man pages. Thanks to Stepan Golosunov.
    Closes: #366587
  * Honour tabbing requested via --showformat even if the field to
    be printed is empty. Closes: #361671
  * Flush the terminal's input before prompting what to do with a
    configuration file. Closes: #316551
  * Fix the --force-depends-version option. Closes: #57104

  [ Guillem Jover ]
  * Standardize scripts usage output format and at the same time make
    the strings easier for the translators. Add '--help' and '--version'
    for most of the scripts. Print the usage and version to stdout.
  * Do not strip the epoch from the source:Upstream-Version substvar.
    Closes: #366351
  * Properly check and report lock file existence in install-info.
    Based on patch by Ben Pfaff. Closes: #368874
  * Correct default info directory for '--infodir' in intall-info man
    page (Ben Pfaff). Closes: #368875
  * Print the bogus version and prefix the error message with 'dpkg: '
    when using '--compare-versions'. Closes: #369177
  * Remove duplicated string " , at changelog " in dpkg-parsechangelog's
    debian style parser (Julian Gilbey). Closes: #369205
  * Update the Section and Priority fields in the status file from the
    new packages. We assume that the information from the binary package
    is correct, otherwise it should be fixed there to match the archive
    override file (Koblinger Egmont).
    Closes: #54529, #58106, #81171, #230610, #237622, #237626
  * Bump Standards-Version to 3.7.2 (no changes needed).
  * Add lintian overrides for dpkg, dpkg-dev, dselect and sources.
  * Replace logrotate installation logic with dh_installlogrotate.

  [ Updated dpkg Translations ]
  * Portuguese (Miguel Figueiredo).
  * Polish (Robert Luberda).
  * Hungarian (SZERVÁC Attila).
  * Romanian (Eddy Petrişor).
  * Russian (Yuri Kozlov). Closes: #366353
  * Czech (Miroslav Kure).
  * Simplified Chinese (Kov Tchai). Closes: #366985
  * Swedish (Peter Karlsson).
  * Galician (Jacobo Tarrio).
  * Slovak (Peter Mann).
  * Dutch (Bart Cornelis).
  * Basque (Piarres Beobide). Closes: #366185

  [ Updated dselect Translations ]
  * Polish (Robert Luberda).
  * Basque (Piarres Beobide). Closes: #366187
  * Czech (Miroslav Kure).
  * Romanian (Eddy Petrişor).

  [ Updated man pages translations ]
  * Polish (Robert Luberda).

 -- Guillem Jover <guillem@debian.org>  Wed, 31 May 2006 07:43:16 +0300

dpkg (1.13.19) unstable; urgency=low

  [ Frank Lichtenheld ]
  * Add -follow (back) to find call in dpkg-scanpackages.
    Closes: #358011
  * Fix error in archive.c that lead to a infinite loop when
    installing files with long, non-ASCII filenames in
    certain locales. Closes: #346436

  [ Updated dpkg Translations ]
  * French (Christian Perrier).
  * Galician (Jacobo Tarrio).
  * Romanian (Eddy Petrişor).
  * Dutch (Bart Cornelis).
  * Swedish (Peter Karlsson).
  * Danish (Claus Hindsgaul). Closes: #362317
  * Czech (Miroslav kure).
  * Vietnamese (Clytie Siddall). Closes: #363264
  * Spanish (Javier Fernández-Sanguino Peña). Closes: #357911
  * Basque (Piarres Beobide). Closes: #363683, #363679
  * Japanese (Kenshi Muto). Closes: #365334

  [ Updated dselect Translations ]
  * Romanian (Eddy Petrişor).
  * Galician (Jacobo Tarrio).
  * French (Christian Perrier).
  * Dutch (Bart Cornelis).

  [ Nicolas Francois ]
  * Generate the Russian man pages in the KOI8-R charset. Closes: #361987
  * Document the shlibs.local format in dpkg-source(1). Closes: #316485
  * Fix a typo in an error message. Thanks to Justin Pryzby. Closes: #364539

  [ Guillem Jover ]
  * Fix strings so that they can be more easily translated. Closes: #134358
  * Add new substvars source:Version, source:Upstream-Version and
    binary:Version so packages will be able to avoid breaking on binNMUs.
    Based on a patch by Ken Bloom and Jeroen van Wolffelaar. Closes: #358530
  * Support binNMU safe packages even when source and binary differ in
    version.
  * Rename dpkg:UpstreamVersion to dpkg:Upstream-Version. Make dpkg:Version
    and dpkg:Upstream-Version get the current dpkg versions instead of the
    ones from the package being built.
  * Split usage strings to make it easier for translators when those change.
    Closes: #323957
  * Standardize start-stop-daemon usage output format.
  * Make install-info '--dir-file' option compatible with GNU install-info
    by renaming the infodir variable to dirfile and not appending the
    '/dir' string except when initializing from '--info-dir' or
    '--infodir' (Wayne Davison). Closes: #61640, #67237, #286275
  * Make install-info add a new line after adding the last entry at the
    end of the dir file, which makes the info readers able to see those
    last entries (Nicolas François). Closes: #164495
  * Use the numerical value of errno instead of a string in install-info
    when checking if the locking error was due to an already existing
    file, which is locale dependent, and die accordingly. Based on a patch
    by Nicolas François. Closes: #199204, #210781
  * Escape hyphens in man pages.
  * Bump Standards-Version to 3.7.1.
  * Wrapped debian/control fields except Uploaders given current policy.

 -- Guillem Jover <guillem@debian.org>  Thu,  4 May 2006 14:05:21 +0300

dpkg (1.13.18) unstable; urgency=low

  [ Updated dpkg Translations ]
  * Romanian (Sorin Batariuc). Closes: #356664
  * Danish (Claus Hindsgaul). Closes: #356188
  * Polish (Robert Luberda).
  * Dutch (Bart Cornelis).

  [ Updated dselect Translations ]
  * Spanish (Javier Fernández-Sanguino Peña). Closes: #357912
  * Danish (Claus Hindsgaul). Closes: #356188
  * Polish (Robert Luberda).
  * Russian (Yuri Kowlov). Closes: #361415

  [ Updated man pages translations ]
  * Typos corrected in French dpkg-source man page
    Thanks to Nicolas Bonifas who spotted them
  * Russian completed. Thanks to Yuri Kozlov.
    Closes: #361415

  [ Christian Perrier ]
  * Correct typos in man pages. Thanks to A. Costa for spotting them
    Closes: #358091, #358092, #358093, #358094, #358095

  [ Guillem Jover ]
  * Add a '[!]' in --force-all help denoting that it is a dangerous option.
    Closes: #359935
  * Prefix any chroot path to the exec file name when stating it in
    start-stop-daemon. Closes: #318771, #333066
  * Add '-r' to the help output of start-stop-daemon (Jared Spiegel).
    Closes: #354869
  * Use mustsetvar when setting the value of the sversion variable in
    dpkg-buildpackage (Andrew Suffield). Closes: #158953
  * Pass '--admindir' option over to dpkg-query when passing '--admindir' or
    '--root' to dpkg (initial patch by Branden Robinson).
    Closes: #153305, #271041, #282853, #307715, #355915
  * Support system library directories in dpkg-shlibdeps symlinked from
    '/lib/ldconfig'. Closes: #356452
  * Document that 'dpkg --get-selections' and 'dpkg-query -l' without a
    pattern will not list packages in state purge. Closes: #355633
  * Obsolete force/refuse 'auto-select' dpkg option.
  * Add new '--clear-selections' option to dpkg (Andrew Suffield).
    Closes: #112388
  * Use '--clear-selections' in the dpkg man page example on how to transfer
    the status to another installation. Closes: #137442

 -- Guillem Jover <guillem@debian.org>  Mon, 10 Apr 2006 06:40:22 +0300

dpkg (1.13.17) unstable; urgency=low

  [ Frank Lichtenheld ]
  * Fix handling of -DArchitecure=foo in dpkg-gencontrol. Closes: #251911
  * Handle architectures in all dependency fields in debian/control,
    even those of binary packages. Closes: #252657, #324741, #347819
  * More dpkg-scanpackages fixes (--arch option handling). Closes: #353506

  [ Guillem Jover ]
  * Add missing parentheses surrounding a man page section reference
    in the dpkg-source man page (Matt Kraai). Closes: #353731
  * Fix misspelling of "occurred" as "occoured" in dpkg-gencontrol and
    dpkg-source (Matt Kraai). Closes: #353949
  * Major cleanup of manpages, by using properly the bold and italic
    attributes and other embellishments.
  * Add dpkg-query(1) in the SEE ALSO section in dpkg(1). Closes: #354643
  * Don't try to compile in SELinux support on GNU/kFreeBSD amd64.
  * Add new quiet option to dpkg-source to suppress warnings. Closes: #355065
  * Do not expand architecture aliases anymore in .dsc files.
  * Change start-stop-daemon's --exec behaviour again on GNU/Linux to compare
    the referred file pointed by the '/proc/<pid>/exe' symlink, stripping
    any ' (deleted)' string and stating the result. Closes: #354867

  [ Updated man pages translations ]
  * Polish (Robert Luberda). Closes: #353782
  * French (Philippe Batailler).

  [ Updated dselect Translations ]
  * Hungarian (Szervác Attila).
  * Dutch (Bart Cornelis).
  * Czech (Miroslav Kure).

  [ Updated dpkg Translations ]
  * Italian (Lele Gaifax)
  * Simplified Chinese (Carlos Z.F. Liu).
  * Portuguese (Miguel Figueiredo).
  * Dutch (Bart Cornelis).
  * Hungarian (Szervác Attila).
  * Czech (Miroslav Kure).
  * Russian (Yuri Kozlov). Closes: #357724

 -- Guillem Jover <guillem@debian.org>  Mon, 20 Mar 2006 03:33:03 +0200

dpkg (1.13.16) unstable; urgency=low

  * The "not really a brown paper bag needed but it's close" release

  [ Guillem Jover ]
  * Move auxiliary autotools scripts to config/.
  * Require gettext 0.14.5.
  * Move the methods directory to dselect/methods, so the contents will not
    be installed if dselect is not to be built.
  * Move dselect gettext strings to its own domain provided now by the
    dselect package.

  [ Frank Lichtenheld ]
  * Fix override handling in dpkg-scanpackages which was broken in
    1.13.14 and .15. Closes: #353305
  * Make -isp the default behaviour of dpkg-gencontrol as it is
    always used anyway these days. Suggested by Matthew Vernon.
    Closes: #215233
  * Typo fixes in man pages by A. Costa:
    - dpkg-deb.1 Closes: #353424
    - dpkg-statoverride.8 Closes: #353425
    - install-info.8 Closes: #353426
    - start-stop-daemon.8 Closes: #353427
    - update-alternatives.8 Closes: #353428
    - dpkg.1, dpkg.cfg.5 Closes: #353429

 -- Frank Lichtenheld <djpig@debian.org>  Sat, 18 Feb 2006 17:59:00 +0100

dpkg (1.13.15) unstable; urgency=low

  [ Guillem Jover ]
  * Add a missing closing parenthesis in a dpkg string (Jordi Mallach).

  [ Christian Perrier ]
  * Updated Translations:
    - Brazilian Portuguese (Andre Luis Lopes). Closes: #352432
    - Galician (Jacobo Tarrio). Closes: #352443

  [ Updated Translations ]
  * Catalan (Jordi Mallach).
  * Portuguese (Miguel Figueiredo).
  * Swedish (Daniel Nylander).

  [ New Translations ]
  * Hungarian (Szervác Attila).

  [ New Manpage Translations ]
  * Hungarian (Szervác Attila): dpkg.cfg.5 and dselect.cfg.5.

 -- Frank Lichtenheld <djpig@debian.org>  Wed, 15 Feb 2006 23:37:40 +0100

dpkg (1.13.14) experimental; urgency=low

  [ Guillem Jover ]
  * Make start-stop-daemon print the proper version instead of 'VERSION'.
  * Set the HOME environment variable when using the --chuid switch in
    start-stop-daemon. Closes: #295169, #267784
  * Cleanup and unify program usage and version output, make it more i18n
    friendly. Fix wrong gettext usage with interparsed macros.
    Thanks to Changwoo Ryu for noticing. Closes: #237915
  * Mark some strings as translatable (Changwoo Ryu). Closes: #256387
  * Remove a trailing 'C' character from update-alternatives manpage.
  * Use pkg-config to get the proper flags to link against libselinux.
    Add a Build-Dependency on pkg-config, tighten libselinux1-dev to
    at least version 1.28-4 which provides a .pc file, and remove
    libsepol1-dev as libselinux1-dev is Depending on it.
  * Add command descriptions in the synopsis, and add a usage example for
    -f in the dpkg-query manpage. Thanks for the initial patch to
    Philippe Batailler. Closes: #352091
  * Document about the default log file, the behaviour in case of multiple
    --log options and add a reference to dpkg.cfg manpage in the dpkg manpage.
    Thanks to James R. Van Zandt. Closes: #350440
  * Escape ` and ' in manpages otherwise they are converted to quotation
    marks, which makes cut and paste not work. Thanks to Denis Barbier.
    Closes: #349925

  [ Frank Lichtenheld ]
  * Let dpkg-source ignore comments in the hunk header as used by
    diff -p (Anand Kumria). Closes: #344880
  * Let dpkg-buildpackage create a .changes file even if signing the
    .dsc file failed. This makes it easier to just sign the package
    later (Julian Gilbey). Closes: #217963
  * Change heuristics of dpkg-buildpackage's gpg check to allow for
    more complex setups (Julian Gilbey). Closes: #163061
  * Add files and dirs used by bzr to default dpkg-source -i regex
    (maximilian attems). Closes: #345164
  * Add .git directory to default dpkg-source -i regex.
    Suggested by Hans Ulrich Niedermann. Closes: #351885
  * dpkg-scanpackages can now output Packages files with multiple
    versions of a single package (Don Armstrong). Closes: #229589.
  * dpkg-scanpackages outputs help when given the --help or -h option
    (Don Armstrong). Closes: #319541
  * Document dpkg-scanpackage -m in man page.
  * Let warn dpkg-source if more than one -sX option was given and
    document the behaviour in this case in the man page.
    Closes: #246637
  * Make dpkg-source -b more robust regarding to existing symlinks
    by creating new files in a secure manner. Closes: #178839, #338591
  * Fix some semantic errors in dpkg-shlibdeps due to typos in used
    variables.
  * On package configuration, differentiate between modified and
    deleted configuration files (Ian Jackson). Closes: #351361
  * Improve processing of disappearing conffiles (Ian Jackson).
    This is part of the fix for #108587.
  * Let dpkg-source -x touch all patched files to have the same
    timestamp to mitigate time-skew problems (Denis Barbier).
    Closes: #105750
  * Strip any newlines from Uploaders field on dpkg-source -b.
    Closes: #254449

  [ Christian Perrier ]
  * Switch to po4a for manpages translation. Closes: #320122
    This adds a Build-Depends on po4a.
  * Add Vietnamese to po/LINGUAS as it was previously missing.
  * Updated Translations:
    - Catalan (Jordi Mallach). Closes: #351587
    - French (Christian Perrier): 1011t.
    - Galician (Jacobo Tarrio): 1002t. Closes: #351795
    - Basque (Piarres Beobide): 1002t. Closes: #351845
    - Slovak (Peter Mann): 1002t. Closes: #352087, #352311
    - Vietnamese (Clytie Siddal): 1011t. Closes: #352307

 -- Frank Lichtenheld <djpig@debian.org>  Sun, 12 Feb 2006 02:32:12 +0100

dpkg (1.13.13) unstable; urgency=low

  [ Frank Lichtenheld ]
  * dpkg and dselect are now in section admin, not section base.
    Correct info in the control file.
  * Bump Standards-Version to 3.6.2 (no changes).
  * Fix typo in dpkg-architecture man page. Closes: #334330
  * Honor LD_LIBRARY_PATH in dpkg-shlibdeps. Fixes a regression
    from 1.13.11 to .12.
  * Don't recurse into package directories to search for local
    shlibs files since it is obviously a waste of time. Based
    on a suggestion by Steve Langasek. Closes: #338725

  [ Christian Perrier ]
  * Updated Translations:
    - Dutch (Bart Cornelis). Fix error mentioned in #323908 by
      Stephan Kramer.
    - Japanese (Kenshi Muto). Closes: #349808

  [ Guillem Jover ]
  * Fix typo in dpkg-statoverride manpage. Closes: #348113
    Thanks to Marc Haber <mh+debian-packages@zugschlus.de>.
  * Document the --no-debsig option in dpkg manpage. Closes: #316367
    Thanks to Bastian Kleineidam <calvin@debian.org>.
  * Fix typos in dselect manpage. Closes: #310358
    Thanks to A Costa <agcosta@gis.net>.
  * Fix typo in start-stop-daemon's help output. Closes: #333673
    Thanks to Christoph Maser <cm@financial.com>.
  * Document the correct format string for dpkg-query --showformat option.
    Update -l example and lower case the program name in the title header.
    Thanks to Zefram <zefram@fysh.org>. Closes: #174976
  * Make dpkg-architecture not print the warning about a mismatch between
    gcc target machine type and GNU target system type if the actions are
    '-e' or '-i'.

 -- Frank Lichtenheld <djpig@debian.org>  Sat, 28 Jan 2006 13:04:16 +0100

dpkg (1.13.12) experimental; urgency=low

  * Due to the changes in dpkg-shlibdeps it is not recommended
    to use this version for building packages intended to be
    uploaded into an official archive, yet.

  [ Frank Lichtenheld ]
  * Update AUTHORS and debian/copyright for new maintainer team.

  * Don't use the ldd output in dpkg-shlibdeps. Search for the
    matching libraries ourself. This fixes problems with both
    symlinked directories, Closes: #103024, #145714, #164020, #285857
    and biarch builds. Closes: #317082
  * Let dpkg-gencontrol bail out with an error if parsedep
    found an error while parsing a dependency field. Closes: #228125
  * dpkg-source -x now tries to chown all files extracted from
    tar files. The temporary directory is now created with mode
    0700, too. Together this should make it safer to run
    dpkg-source -x as root. Based on suggestions by Marcus
    Brinkmann and Colin Watson. Closes: #144571, #238460
  * Let dpkg-source -b check the build relation fields before
    putting them into the .dsc. As a side effect they also
    get normalized. Closes: #254449
  * Check the gpg signatures of .dsc files before unpacking. See
    the upstream changelog for a full description of the semantics.
    Based on a patch by Matt Zimmerman. Closes: #48711
  * Let dpkg-source ensure (as good as possible) that all
    build source packages can also be unpacked.
    Closes: #6820, #7014
    Also fixed handling of md5sum -b output in dpkg-source on
    the way. Based on a patch by Ingo Saitz. Closes: #316123
  * Check for illegal architecture strings in dpkg-gencontrol and
    dpkg-source. dpkg-gencontrol will only issue a warning while
    dpkg-source will error out. Closes: #96920
  * Add support "package types" to dpkg-shlibdeps. Patch by Joey Hess.
    Closes: #335056, #345475
  * Fix man page references to dpkg and dselect man pages. Many
    of them still had a wrong section.
    Closes: #332826
  * Let dpkg-source -b warn about special permissions of files added
    in the diff since these will get lost. Closes: #306125
  * dpkg-source -x didn't work in case the upstream version or
    the Debian version ended with ~. Fixed.

  [ Christian Perrier ]
  * Updated Translations:
    - French (Christian Perrier).
    - Polish (Bartosz Fenski). Closes: #314237
    - Norwegian Bokmal (Hans F. Nordhaug). Closes: #315548, #315990
    - Czech (Miroslav Kure). Closes: #323775, #345347
    - Russian (Yuri Kozlov). Closes: #323821, #335170
    - Japanese (Kenshi Muto). Closes: #323938
    - Brazilian Portuguese (Andre Luis Lopes). Closes: #325224, #332872
    - Russian (Yuri Kozlov). Closes: #335170, #349151
    - Swedish (Peter karlsson). Closes: #325990, #344058, #337164, #334063
    - Norwegian Nynorsk (Håvard Korsvoll). Closes: #315987
    - Portuguese (Miguel Figueiredo).
      Closes: #315461, #323674, #323642, #330021
    - Spanish (Javier Fernández-Sanguino Peña). Closes: #323662, #315253
    - Danish (Claus Hindsgaul). Closes: #348575, #323779, #337948, #325687
    - Dutch (Bart Cornelis). Closes: #323908
    - German (Michael Piefel). Closes: #323964
    - Italian (Stefano Canepa). Closes: #324114, #344671, #347225
    - Catalan (Jordi Mallach). Closes: #324456
    - Basque (Piarres Beobide). Closes: #342089, #332698
    - Tagalog (Eric Pareja). Closes: #337307
    - Simplified Chinese (Tchaikov). Closes: #338268
    - Galician (Jacobo Tarrío). Closes: #338904
    - Romanian (Eddy Petrişor). Closes: #340674
    - Vietnamese (Phan Vinh Thinh, Clytie Siddall).
    - Indonesian (Parlin Imanuel). Closes: #344513
    - Greek (Galaxico). Closes: #344646
    - Czech (Miroslav Kure). Closes: #345347
  * Fixed broken translation:
    - Brazilian Portuguese (James Troup). Closes: #332872
  * Fix Russian man page for start-stop-deamon(8)
    Closes: #325804
  * Fix German man page for update-alternatives(8)
    Closes: #329908
  * Fix typo in dpkg online help message. Unfuzzy translations
    Closes: #349299

  [ Guillem Jover ]
  * Add armeb to cputable. Closes: #331232
    Thanks to Lennert Buytenhek <buytenh+debian@wantstofly.org>.
  * Don't try to compile in SELinux support on GNU/kFreeBSD.  Closes: #313300
    Thanks to Aurelien Jarno <aurel32@debian.org>.
  * When linking statically, explicitly add libsepol, even if its only a
    transitive library. The proper fix should come with a pkg-config file.
    Based on a patch by Bart Martens <bart.martens@advalvas.be>.
    Closes: #347744, #348659
  * Add support for architecture wildcards, but for now they will only be
    exposed in debian/control files, not in binary nor source packages.
    Closes: #291939
  * Change start-stop-daemon's --exec option behaviour on GNU/Linux to
    compare the filename pointed by '/proc/<pid>/exe' instead of the inode
    and device numbers. Thanks to Vasilis Vasaitis <v.vasaitis@sms.ed.ac.uk>.
    Closes: #337942

 -- Frank Lichtenheld <djpig@debian.org>  Tue, 24 Jan 2006 11:15:36 +0100

dpkg (1.13.11.1) unstable; urgency=low

  * Change maintainers to new team.

 -- Scott James Remnant <scott@netsplit.com>  Thu, 12 Jan 2006 07:56:49 +0000

dpkg (1.13.11) unstable; urgency=low
  
  The "Good, clean fun" Release.

  * Fixed the always broken error handling so that only the intended
    cleanup handlers are run, rather than ones that we didn't expect.
    This corrects the bug when a package's postrm fails and the package is
    left in an installed state with no files; the package will now be left
    in a half-installed state, as originally intended.  Found by Marga
    Manterola while documenting the maintainer scripts.  Closes: #296026.
  * Fixed removal of files involved in diversions during upgrade, caused by
    checking whether the "directory" was in use by another package without
    actually checking whether or not it was a directory.  Closes: #310390.
  * Fixed package saving to not disappear packages who divert anything from
    the installing package out of the way.  Closes: #113626.
  * Improved clean-up of unpack failure during install or upgrade, to leave
    the system in exactly the same state as it started in.
    Closes: #47404, #82407, #121173, #170869, #201848, #236733, #268639.
  * Fixed crash when unpacking a package which has an unversioned Replaces
    declared on it by another package previously unpacked in the same run
    (Colin Watson).  Closes: #322595.

  * New install unwinding fixed to ensure we don't leave a version in the
    status db for a not-installed package.
  * Corrected error call when encountering a corrupted filesystem tarfile
    to not print "Success".  Closes: #95570.
  * Fixed castration of potentially unsafe devices to not follow symlinks.
    Closes: #169928.
  * Marked log file descriptor as close-on-exec.  Closes: #320925.
  * Re-worked dpkg-source -x to allow all manner of strange things maintainers
    seem to do, unpacking isn't the right place to enforce sanity; we'll
    do it in -b later on >:-).  Closes: #316470, #317760, #318473, #318745,
    #322359, #322361, #322362.

  * Corrected dselect synopsis line to match consensus.  Closes: #318659.
  * Changed dpkg-name to use a shell redirect rather than the /dev/stderr
    device that may not be writable.  Closes: #318376.
  * Adjusted various dpkg-query options to avoid outputting a trailing
    newline.  Closes: #151651, #319781.
  * Changed references to "statusoverride" file to just "statoverride"
    to make it match reality.  Closes: #320952.
  * Fixed several bugs with the default diff ignore list used by dpkg-source.
  * Added ,,* to the list of default diff ignore list.  Closes: #322917.

  * Fixes to dpkg-dev (Frank Lichtenheld):
    - dpkg-checkbuilddeps will now exit with an error if it is unable to
      parse a dependency field.  Closes: #171762, #302229.
    - dpkg-genchanges will now output a warning if given -sd for a native
      package, as it's going to ignore it.  Closes: #5571.
    - dpkg-source fixed to give a more meaningful error message if given
      a directory as the first argument.  Closes: #306874.
    - dpkg-source fixed to handle being given an absolute path to -b.
      Closes: #147574.
    - Fix controllib.pl to allow whitespace before version operators.
      Closes: #273489, #310306.
    - Fix architecture dependency parsing that sometimes generated wrong
      list of requirements.  Closes: #319816.
    - Make the default control field name mangling behaviour "nicer" by
      upper-casing all letters that come after a dash.  Closes: #306474.
    - Ignore trailing newlines in single paragraph control files.
      Closes: #57194, #156319
  * Documentation:
    - Fixed typo in dpkg-architecture man page.  Closes: #317770.
    - Documented dpkg-deb -W/--show and --showformat.  Closes: #319784.

 -- Scott James Remnant <scott@netsplit.com>  Wed, 17 Aug 2005 04:44:44 +0100

dpkg (1.13.10) unstable; urgency=low
  
  The "Bully's Special Prize" Release.

  * Removed /usr/sbin/start-stop-daemon.  Closes: #313400.
  * Fixed md5sum diversion removal.  Closes: #313415.
  * Fixed dpkg-source to handle native tarballs with a Debian revision.
    Closes: #313381, #313433.
  * Fixed upgrade from pre-sarge dpkg outside of dselect.  Closes: #314575.
  * Changed log times to be local rather than UTC.  Closes: #313347.
  * Changed log writing to be line-buffered.  Closes: #314550.
  * Moved log creation to postinst, and don't fail if base-passwd hasn't
    been configured yet.  Closes: #316084.
  * Don't try to compile in SELinux support on Hurd.  Closes: #313398.
  * Place code for SELinux support in the right place so it will actually
    get compiled in and used (Manoj Srivastava).  Closes: #314886.

  * Documentation:
    - Added missing word to dpkg-architecture manpage.  Closes: #313554.
    - Reference to dpkg manpage in dpkg.cfg corrected.  Closes: #314262.
  * Updated Translations (Christian Perrier):
    - Basque (Piarres Beobide Egana).  Closes: #313474.
    - Catalan (Jordi Mallach).  Closes: #313288.
    - Czech (Miroslav Kure).  Closes: #314431.
    - Danish (Claus Hindsgaul).
    - French (Christian Perrier).
    - German (Jens Seidel).  Closes: #314125.
    - Greek (Greek team).  Closes: #314828.
    - Italian (Lele Gaifax).
    - Japanese (Kenshi Muto).  Closes: #313330.
    - Russian (Yuri Kozlov).  Closes: #313620.
  * Hebrew translation de-activated on request of the translator until there
    is better support for RTL languages.  Closes: #313282.

 -- Scott James Remnant <scott@netsplit.com>  Tue, 28 Jun 2005 14:19:06 +0100

dpkg (1.13.9) unstable; urgency=low
  
  The "On like Donkey Kong" Release.

  * Only open the log file when we first need to write to it, this avoids
    the need to suppress errors when not root which fakeroot defeated anyway.
  * Stop dpkg-source clobbering an existing .orig directory during unpacking.
    Closes: #21236.
  * Allow an alternate output directory to be specified to dpkg-source by
    giving a second argument to -x.  Closes: #246802, #282323.
  * Added .arch-inventory to default diff ignore regexp.  Closes: #304297.

  SELinux support (Manoj Srivastava):
  * On SELinux-enabled systems, try to set the security context when the
    package is unpacked.  Closes: #193653, #249496, #307139.
  * Added build-dependency on libselinux1-dev.

  Improvements to dpkg-source (Brendan O'Dea):
  * Support unpacking of "Wig And Pen" (Format 2.0) source packages.
  * Multiple pristine upstream tarballs allowed.
  * Native and upstream tarballs may be bzip2-compressed instead of gzip,
    as may the debian diff or tarball.
  * Unsupported format error fixed to output the unsupported format
    rather than the supported one.  Closes: #156317.

 -- Scott James Remnant <scott@netsplit.com>  Sun, 12 Jun 2005 15:52:43 +0100

dpkg (1.13.8) experimental; urgency=low
  
  The "In like Flynn" Release.

  * Linux 2.6.12 changed the behaviour of mmap to fail and set EINVAL when
    given a zero length, rather than returning NULL.  This is POSIXly
    correct, so handle zero-length package control files (like available).

 -- Scott James Remnant <scott@netsplit.com>  Fri, 10 Jun 2005 07:39:44 +0100

dpkg (1.13.7) experimental; urgency=low
  
  The "Maidenhead Creeping Water Plant" Release.

  * Reduced inability to open a log file to a warning, suppressed for
    non-root operations.  Closes: #312383.

 -- Scott James Remnant <scott@netsplit.com>  Thu,  9 Jun 2005 06:12:56 +0100

dpkg (1.13.6) experimental; urgency=low
  
  The "Just kidding about the God part" Release.

  * Fixed incorrect installation location of /etc/logrotate.d/dpkg caused
    by a mis-understanding of dh_install's abilities.

 -- Scott James Remnant <scott@netsplit.com>  Mon,  6 Jun 2005 05:58:36 +0100

dpkg (1.13.5) experimental; urgency=low
  
  The "Flatulent Elm of West Ruislip" Release.

  * Actions and package states are now logged by default in the
    /var/log/dpkg.log file.  This file is rotated monthly and can be
    disabled by commenting the line in /etc/dpkg/dpkg.cfg.
  * User decisions about conffiles are now logged.
  * dpkg-source no longer complains about Enhances field.  Closes: #159642,
    #159745, #159746.
  * preinst no longer relies on procps being installed.  Closes: #311808.

  * Architecture Support:
    - Change DEB_*_GNU_CPU from i386 to i486, to reflect reality.
      DEB_*_ARCH_CPU remains at i386, you should be checking against that.
      Closes: #310394.
    - Fixed order ostable is read to prevent Linux becoming the Hurd.
      Closes: #309603.
  * Updated Manpage Translations (Christian Perrier):
    - Syntax error corrected in Swedish man page for dpkg-deb.
      Closes: #300980.
    - Syntax error corrected in Spanish man page for dpkg-scanpackages.
      Closes: #300981

 -- Scott James Remnant <scott@netsplit.com>  Mon,  6 Jun 2005 05:34:21 +0100

dpkg (1.13.4) experimental; urgency=low
  
  The "Or the Wabbit gets it" Release.

  * Add -L option to dpkg-architecture to list architecture strings
    we can accept.

 -- Scott James Remnant <scott@netsplit.com>  Tue, 29 Mar 2005 13:31:15 +0100

dpkg (1.13.3) experimental; urgency=low
  
  The "Paying off Karma at a vastly accelerated rate" Release.

  * Missing newline added to warning output function.  Closes: #283798.
  * Fixed prototype warning in dpkg-scansources.  Closes: #213577, #219760,
    #267505.
  * Removed trailing line from debian origins file.  Closes: #264904.
  * Changed dpkg-buildpackage to say "source changed by" rather than
    "source maintainer is".  Closes: #247313.
  * Fixed dpkg-gencontrol to allow '-' in architecture names.  Closes: #274677.
  * Fixed "unknown information field" error to report field that it doesn't
    know about.  Closes: #275243.

  * Documentation:
    - Remove "medium-level" from description of dpkg.  Closes: #292454.
    - Harmonised argument names in update-alternatives(8).
      Closes: #267095, #284941
    - Documented what the '+' and '*' mean in update-alternatives --config
      output.  Closes: #270486.
    - Mention aptitude alongside dselect in 'dpkg --usage' and
      'dpkg-deb --help', fix quote style of mention in 'dpkg --help'.
      Closes: #274800, #278118.
    - Associate --truename with the description of what it does in
      dpkg-divert(8).  Closes: #277076.
    - Removed last remaining references to the packaging manual, replacing
      with better references.  Closes: #262775.
    - Documented format of file dpkg --set-selections takes.  Closes: #270043.

 -- Scott James Remnant <scott@netsplit.com>  Mon, 21 Mar 2005 03:10:27 +0000

dpkg (1.13.2) experimental; urgency=low
  
  The "Mysteriously Unnamed" Release.

  * md5sum has been removed, the coreutils or textutils version will be
    diverted to /usr/bin/md5sum.  Closes: #6633, #136110.
    The following bugs are filed against the dpkg md5sum, so no longer apply.
    Closes: #95755, #193877, #223381, #264195, #270241, #286632,
  * Take Replaces into account when installing packages; don't issue a
    "trying to overwrite" error if the file that already exists is in
    a package that Replaces the one being installed.
    Closes: #164595, #184635, #277890.
  * Allow actions and status changes to be logged to a file.  Disabled by
    default, uncomment line in /etc/dpkg/dpkg.cfg to enable.
    Closes: #957, #53376, #77109, #143882, #284499.
  * Don't truncate output of 'dpkg -l' when stdout is not a tty.
    Closes: #92263, #253860, #258608, #261822, #282790.
  * Fix further compilation problems with gcc 4.0.  Closes: #299699
  * Handle tar files without trailing slash in directory names.
    Closes: #287152.
  * Output arguments to maintainer scripts with -D2.  Closes: #237684,
    #296030.
  
  * Architecture Support:
    - Added ppc64.  Closes: #263743.
    - Split archtable into cputable and ostable, archtable is retained
      for compatibility with other packages that might use it only.
    - dpkg-architecture no longer canonises -t argument.  Closes: #173205.
    - dpkg-architecture output includes new DEB_*_ARCH_OS and
      DEB_*_ARCH_CPU variables that contain the Debian system and CPU
      names respectively.
    - dpkg-architecture outputs (mostly) correct GNU system names now,
      in particular this means that it will output "linux-gnu" instead
      of "linux".  You should use the new _ARCH_OS variables instead.
  * Documentation:
    - Add examples to dpkg-divert(8).  Closes: #291816.
    - Correct typo in dpkg-architecture(1).  Closes: #299090.

 -- Scott James Remnant <scott@netsplit.com>  Fri, 18 Mar 2005 16:21:32 +0000

dpkg (1.13.1) experimental; urgency=low
  
  The "Livin' like a good boy oughta" Release.
  
  * Removed dpkg --print-gnu-build-architecture option.  Use variables
    defined by dpkg-architecture instead.
  * Soft-deprecated dpkg --print-installation-architecture.  Use
    dpkg --print-architecture instead, which now does the same thing.
  * dpkg --print-architecture no longer calls c-compiler.  Closes: #164863.
  * Removed third field from /usr/share/dpkg/archtable.

  * Now we no-longer pre-depend on dselect, check the upgrade will work
    in preinst and give the user a chance to abort if they haven't yet
    installed dselect and need to.  Closes: #282335.
  * Fix handling of GNU longname and longlink when a tarfile entry has
    both.  Closes: #128388.
  * md5sum no longer outputs "-" when no argument is supplied.
    Closes: #164591, #164889.
  * Add darcs metadirectory to dpkg-source diff ignore list.  Closes: #289760.
  * Add new '-f' short option to dpkg-query as equivalent to --showformat.
    Closes: #281627.
  * Report conffile conflicts and per-package errors on the status-fd.
    Closes: #297880.
  * Correct typo in dpkg-architecture.  Closes: #282701.
  * Fix start-stop-daemon's support for GNU/kFreeBSD.  Closes: #258051.

  * Architecture Support:
    - Added kfreebsd-amd64.  Closes: #280963.
    - Added m32r.  Closes: #280710.
    - Clean up of archtable.  Closes: #118910, #286898.
    - Clean up of dpkg-architecture.  Closes: #256323.
  * Updated Translations (Christian Perrier):
    - French (French Team).
    - Greek (Konstantinos Margaritis).  Closes: #295922.

 -- Scott James Remnant <scott@netsplit.com>  Thu,  3 Mar 2005 12:09:07 +0000

dpkg (1.13.0) experimental; urgency=low
  
  The "Three banana strategy" Release.

  * Remove the /usr/info or /usr/info/dir symlinks we used to create.
    Closes: #206063, #288415.
  * Fix cast in lvalue assignment that gcc 4.0 doesn't like.
    Closes: #282669, #284797.
  * Correct bashism in disk method update script.  Closes: #260568.

  * Scorched-earth reimplementation of the build process and control files
    with debhelper and automake.  Closes: #200683, #217946, #229629, #260568,
    #266995, #279701, #283640, #292973, #293041.
  * Remove SGML and POD documentation formats due to both licensing and
    sanity issues.  Closes: #285806.
  * The dpkg-doc and dpkg-static packages are no more.
  * dpkg.cfg cleaned up to remove non-useful examples.
    Closes: #169618, #305192.
  
 -- Scott James Remnant <scott@netsplit.com>  Fri, 14 Jan 2005 19:28:00 +0000

dpkg (1.10.28) unstable; urgency=low
  
  The "Awh, yeah?  Ripper!" Release.

  * New Translations (Christian Perrier):
    - Romanian (Eddy Petrisor).  Closes: #309714.
    - Tagalog (Eric Pareja).  Closes: #296407.
  * Updated Translations (Christian Perrier):
    - French (Christian Perrier).
    - Greek (Konstantinos Margaritis).  Closes: #295922
    - Indonesian (Arief S Fitrianto).  Closes: #296733
  * Updated Manpage Translations (Christian Perrier):
    - French (Philippe Batailler).
    - Syntax error corrected in Brazilian Portuguese man page for
      update-alternatives.  Closes: #300646

 -- Scott James Remnant <scott@netsplit.com>  Thu, 26 May 2005 18:18:10 +0100

dpkg (1.10.27) unstable; urgency=low

  The "Grab your gun and bring in the cat" Release.

  * New Translations (Christian Perrier):
    - Indonesian (Arief S Fitrianto).
    - Norwegian Bokmål (Bjorn Steensrud).
  * Updated Translations (Christian Perrier):
    - Dutch (confusing option corrected by Christian Perrier).
    - Galician (Jacobo Tarrio).
    - Korean (Seo Sanghyeon).
    - Simplified Chinese (Carlos Liu).
    - Traditional Chinese (Asho Yeh).

 -- Scott James Remnant <scott@netsplit.com>  Thu, 10 Feb 2005 15:10:22 +0000

dpkg (1.10.26) unstable; urgency=low

  The "Captain Tight-Pants" Release.

  * Fix incorrect claim that 'Q' in dselect quits without saving changes
    (really 'X').
  * Revert to current 'stable' behaviour of Space/Enter/'Q' in the dselect
    help screen, Space leaves the help screen and Enter and 'Q' do nothing.
    It's dangerous to encourage users to press Enter or 'Q' since they
    commit changes in the package selection screen.

  * New Translations (Christian Perrier):
    - Basque (Piarres Beobide Egaña).  Closes: #281245.
      (Was really added in 1.10.24, but forgotten from ALL_LINGUAS.)
    - Bosnian (Safir Šećerović).
    - Slovak (benco).  Closes: #284896, #289341
    - Traditional Chinese (Asho Yeh).  Closes: #287375.
  * Updated Translations (Christian Perrier):
    - Brazilian Portuguese (André Luís Lopes).  Closes: #281228.
    - Catalan (Jordi Mallach).  Closes: #281333.
    - Czech (Miroslav Kure).  Closes: #281231.
    - Danish (Claus Hindsgaul).  Closes: #281103.
    - Dutch (Christian Perrier).  Closes: #282087.
    - Galician (Héctor Fernéndez López).
    - German (Michael Piefel).  Closes: #281503.
    - Italian (Stefano Canepa). Closes: #282543.
    - Japanese (Kenshi Muto).  Closes: #281144.
    - Korean (Changwoo Ryu).  Closes: #282246.
    - Norwegian Nynorsk (Håvard Korsvoll).  Closes: #281456.
    - Polish (Bartosz Feñski).
    - Portuguese (Miguel Figueiredo).  Closes: #281122, #289359.
    - Russian (Yuri Kozlov).  Closes: #281166.
    - Simplified Chinese (Tchaikov, Carlos Liu).
    - Spanish (Javier Fernández-Sanguino Peña).  Closes: #281117.
    - Swedish (Peter Karlsson).  Closes: #281165.

 -- Scott James Remnant <scott@netsplit.com>  Tue, 11 Jan 2005 16:26:51 +0000

dpkg (1.10.25) unstable; urgency=low

  The "你他媽的天下所有的人都該死" Release.

  This release is to correct the mangled Simplified Chinese translation
  included in 1.10.24 caused by rebellion of the translator's mail client.

  * Updated Translations (Christian Perrier):
    - Dutch (Bart Cornelis).  Closes: #278700.
    - Polish (Bartosz Fenski).  Closes: #280406.
    - Simplified Chinese (Tchaikov, Carlos Liu).  Closes: #278676.

 -- Scott James Remnant <scott@netsplit.com>  Thu, 11 Nov 2004 20:06:57 +0000

dpkg (1.10.24) unstable; urgency=low

  The "Donald, where's your troosers?" Release.

  * Add support for uncompressed data.tar archive members and bzip2-
    compressed data.tar.bz2 members of binary packages.  Closes: #34727.

  * New Translations (Christian Perrier):
    - Basque (Piarres Beobide).  Closes: #265491.
    - Greek (George Papamichelakis).  Closes: #260809.
    - Hebrew (Lior Kaplan).  Closes: #275267.
    - Simplified Chinese (Tchaikov, Carlos Liu).  Closes: #265197.
  * Updated Translations (Christian Perrier):
    - Brazilian Portuguese (Andre Luis Lopes).  Closes: #260964, #273947,
      #278063.
    - Czech (Miroslav Kure).  Closes: #255904, #278178.
    - Catalan (Jordi Mallach).  Closes: #278098.
    - Danish (Claus Hindsgaul).  Closes: #278097.
    - Dutch (Bart Cornelis).  Closes: #268271, #268886, #274366, #278061.
    - Galician (Hector Fernandez).
    - German (Michael Piefel).  Closes: #276462, #278168.
    - French (Christian Perrier).
    - Japanese (Kenshi Muto).  Closes: #272456, #278141.
    - Italian (Lele Gaifax).
    - Korean (Changwoo Ryu).  Closes: #261528, #278142.
    - Norwegian Nynorsk (Håvard Korsvoll).  Closes: #275387, #278286.
    - Polish (Bartosz Fenski).  Closes: #268452, #278064.
    - Portuguese (Miguel Figueiredo).  Closes: #268266, #261424, #261519,
      #278294.
    - Russian (Yuri Kozlov).  Closes: #268452, #278154.
    - Spanish (Javier Fernández-Sanguino Peña).  Closes: #277173, #278117.
    - Swedish (Peter Karlsson).
  * Updated Manpage Translations (Christian Perrier):
    - French (Philippe Batailler).  Closes: #268048.
    - Spanish (Ruben Porras).  Closes: #261807.
    - Swedish (Peter Karlsson).

 -- Scott James Remnant <scott@netsplit.com>  Wed, 27 Oct 2004 09:25:58 +0100

dpkg (1.10.23) unstable; urgency=low

  The "Let the Wookie win" Release.

  * Updated hurd start-stop-daemon support.  Closes: #133640, #254180.
  * Removed usage of non-POSIX test options.  Closes: #256302.

  * Architecture Support:
    - Renamed x86-64 to amd64.  Closes: #252346, #254598.
  * Documentation:
    - Correct typo in dpkg-divert(8).  Closes: #254175.
  * New Translations:
    - Korean (Changwoo Ryu).  Closes: #254590.
  * Updated Translations:
    - Catalan (Jordi Mallach).
    - Danish (Claus Hindsgaul).  Closes: #252407.
    - French (Christian Perrier).  Closes: #252586.
    - Italian (Lele Gaifax).
    - Polish (Bartosz Fenski).  Closes: #254209.
    - Spanish manpages (Ruben Porras).  Closes: #246158, #246159, #246160,
      #246161, #246162, #246163, #246164.

 -- Scott James Remnant <scott@netsplit.com>  Mon, 19 Jul 2004 19:52:14 +0100

dpkg (1.10.22) unstable; urgency=low

  The DebConf4 Release.

  This release is mostly intended to mop up the minor and trivial bug
  fixes in the list and clear out the documentation changes.  As such,
  it should be treated with even more suspicion than is normal.

  * Use colouring to break cycles earlier to avoid long loops whilst
    installing or configuring packages.  Closes: #232445, #246857.
  * Don't try to configure packages that disappeared in the same
    run.  Closes: #202997.
  * Fix segfault when "gcc -dumpmachine" returns a non-matching triplet.
    Closes: #211850.
  * Remove restriction that package names be at least two characters long.
    Closes: #237734.
  * Fix dpkg-source (actually controllib.pl) to output the field name
    properly again.  Closes: #226931, #246595.
  * Make dpkg-scanpackages output Origin and Bugs fields with proper
    casing.  Closes: #154422.
  * Add support for DOS line-endings to md5sum.  Closes: #246103.
  * Fix start-stop-daemon segfault on Hurd.  Closes: #133640.
  * Allow dpkg-shlibdeps to run as non-root users.  Closes: #96881.
  * Correct various compiler warnings.  Closes: #229766.

  * Architecture Support:
    - Added x86-64 (x86_64 / amd64).  Closes: #238483, #241938.
    - Added i?86-gnu (Hurd).  Closes: #216695, #236331.
    - Added i386-kfreebsd-gnu and i386-knetbsd-gnu.  Closes: #250176.
  * Packaging:
    - Create $(docdir) even when --without-sgml-doc is passed so the
      ChangeLog can be installed.  Closes: #137719.
    - Stop hardcoding the list of manual page languages in debian/rules,
      so we include Spanish, Russian and Brazilian Portugese.  Closes: #245994.
    - Quote LDFLAGS in debian/rules to allow multiple options.
      Closes: #230242.
  * Documentation:
    - Move dpkg-scanpackages and dpkg-scansources to section 1 as they
      are user tools.  Closes: #114946.
    - Correct hyphen characters in manpages.  Closes: #212284, #247086, #226800.
    - Remove obsolete references to the Debian Packaging Manual.
      Closes: #122910, #140695.
    - Correct 'n' and 'p' key descriptions in dselect help message.
      Closes: #120562.
    - Add --force-bad-verify to dpkg manpage.  Closes: #192812.
    - Correct dpkg manpage to refer to --force-remove-reinstreq instead of
      non-existent --force-reinstreq option.  Closes: #232831.
    - Correct documentation of --compare-versions arguments.  Closes: #232317.
    - Correct usage of "et al" to "et al.".  Closes: #230751.
    - Add dpkg-reconfigure(8) to SEE ALSO section of dpkg(8).  Closes: #233282.
    - Suggest packages that provide additional functionality in the dpkg
      manpage.  Closes: #81355.
    - Suggest dselect update in description of dpkg --update-avail.
      Closes: #206163.
    - Suggest aptitude as well as dselect.  Closes: #217042.
    - Suggest fakeroot for dpkg-source -r.  Closes: #175897.
    - Correct documentation of start-stop-daemon.  Closes: #41554, #211856.
    - Correct documentation of start-stop-daemon manpage to refer to --retry
      alongside --stop.  Closes: #204691.
    - Add note that start-stop-daemon will chdir("/") unless -d is specified.
      Closes: #217823, #218060.
    - Correct documentation of dpkg-query --list.  Closes: #232639.
    - Correct invalid use of &quot; within update-alternatives(8) with .BR.
      Closes: #244624.
    - Rewrite description of dpkg-source -i to indicate the intent of the
      default setting rather than the exact exclusions.  Closes: #227169.
    - Correct documentation of dpkg-statoverride --update.  Closes: #85079.
    - Correct documentation of update-alternatives --install.  Closes: #179648.
    - Documented dpkg:Version and dpkg:UpstreamVersion substvars.
      Closes: #85815, #85818.
    - Fix spelling error in utils/md5sum.1.  Closes: #250281.
    - Replace "&c." with the slightly clearer "etc.".  Closes: #235773.
    - Correct various typos.  Closes: #219623, #221235.
  * Updated Translations:
    - Catalan (Jordi Mallach).
    - French (Christian Perrier).  Closes: #246359.
    - Italian (Lele Gaifax).
    - Japanese manpages (KISE Hiroshi).  Closes: #248483.
    - Russian (Nikolai Prokoschenko).  Closes: #249254.
    - Spanish manpages (Ruben Porras).  Closes: #246158, #246159, #246160,
      #246161, #246162, #246163, #251830.
  * New Translations:
    - German start-stop-daemon and update-alternatives manpages
      (Helge Kreutzmann).  Closes: #247116, #249454.
    - Spanish dpkg-scansources manpage (Ruben Porras).  Closes: #246164.

 -- Scott James Remnant <scott@netsplit.com>  Tue,  1 Jun 2004 18:21:40 -0300

dpkg (1.10.21) unstable; urgency=low

  * Fix incorrect linked list node removal code that caused every second
    shared or diverted conffile to be deleted by dpkg.
    Closes: #10879, #33046, #47267, #90623, #98210, #109691, #146167.
    Closes: #155456, #204275.
  * Call mknod with the required device type.  Closes: #158916.
  * Correct the default query output format to be consistent with
    what the underlying library expects.  Closes: #174973.
  * Fix missing NULL-termination in dpkg-query -W display of dependency
    fields.  Closes: #174978
  * Strip output from md5sum(1) after the first whitespace character.
    Closes: #200763.
  * Output a warning if we cannot open a configuration file instead of
    treating it as a fatal error, in case our home directory is not readable
    by root.  Closes: #200701.
  * Set LC_ALL to C before spawning off dpkg --search, to avoid searching
    on localized strings.  Closes: #244316.
  * Don't require argument for start-stop-daemon -V.  Closes: #237589.
  * Correct use of @ARGV within dpkg-scanpackages, allowing -u to work
    once again.  Closes: #225086, #241503.
  * Make sure file permissions passed to dpkg-statoverride are numeric.
    Closes: #161156.
  * Correctly break out of the loop in install-info.
    Closes: #124225, #160761.
  * Add --dir-file option to install-info for GNU install-info
    compatibility.  Closes: #179192
  * Refer to debian-policy in dpkg-doc's description instead of the
    non-existent packaging-manual.  Closes: #120970.
  * Remove incorrect mention of build-essential from dpkg-checkbuilddeps
    manpage.  Closes: #219210.
  * Add a note about diverting shared libraries to the dpkg-divert
    manpage.  Closes: #214699.
  * Updated Translations:
    - Brazilian Portugese (Andre Luis Lopes).  Closes: #237864.
    - Catalan (Jordi Mallach).
    - Danish (Claus Hindsgaul).  Closes: #237624.
    - Dutch (Pieter-Paul Spiertz, Bart Cornelis, Erwin).
      Closes: #102094, #151799, #207758.
    - French (Sam Hocevar).  Closes: #243191.
    - German (Florian Ernst).  Closes: #109669, #115352, #187952, #244098.
    - Japanese manpages (KISE Hiroshi).  Closes: #220776.
    - Polish (Bartosz Fenski).  Closes: #242870.
    - Spanish (Javier Fernández-Sanguino Peña).  Closes: #166052.
    - Swedish (Peter Karlsson).
  * New Translations:
    - Japanese dpkg-source manpage (KISE Hiroshi).  Closes: #239000.
    - Norwegian Nynorsk (Gaute Hvoslef Kvalnes).  Closes: #233614.
    - Portguese (Miguel Figueiredo).  Closes: #240081.
    - Spanish dpkg-source manpage (Ruben Porras).  Closes: #171489.

 -- Scott James Remnant <scott@netsplit.com>  Sun, 25 Apr 2004 18:55:10 +0100

dpkg (1.10.20) unstable; urgency=high

  * Update Japanese translation.  Closes: #224616
  * Update French translation.  Closes: #218713
  * Fix spelling error in German md5sum man page.  Closes: #230750
  * Fix typo in pt_BR po file.  Closes: #192102
  * Revert fix for #232916, this turns out to be a bug in the pgpgp
    wrapper, dpkg worked fine with pgp itself.

 -- Scott James Remnant <scott@netsplit.com>  Thu, 11 Mar 2004 11:24:54 +0000

dpkg (1.10.19) unstable; urgency=high

  * Distinguish unmet build dependencies from build conflicts.
    Closes: #217943, #235266.
  * Force NULL-termination of all tar file entry names.  Closes: #232025.
  * Allow dselect to use the full window width.  Closes: #139781.
  * Pass correct number of arguments for format string when out of disk
    space.  Closes: #213038, #217286, #213543, #213846.
  * Remove duplicated entries from ChangeLog.  Closes: #157437.
  * Fix dpkg-buildpackage when used with PGP.  Closes: #232916.
  * Update support for Debian FreeBSD.  Closes: #211566.
  * Store Architecture in the status file.  Closes: #228253.
  * Don't print offending lines in md5sum.  Closes: #170953.
  * Check bounds of md5sum lines.  Closes: #168443, #199489, #199693.

 -- Scott James Remnant <scott@netsplit.com>  Mon,  8 Mar 2004 19:05:32 +0000

dpkg (1.10.18.1) unstable; urgency=medium

  * Non-maintainer upload to fix release-critical bugs.
  * Terminate string buffer in main/remove.c.  Closes: #228379.
  * Prevent stashing of hardlinked devices and setuid or setgid binaries
    by removing permissions on upgrade as well as on remove.
    Closes: #225692.
  * Update dpkg conflicts to << 1.10, instead of 1.9.
    Closes: #190611, #221989, #222760.

 -- Scott James Remnant <scott@netsplit.com>  Thu, 26 Feb 2004 01:17:27 +0000

dpkg (1.10.18) unstable; urgency=medium

  * Rebuild, tagging and releasing correctly from cvs this time.

 -- Adam Heath <doogie@debian.org>  Mon, 27 Oct 2003 13:39:56 -0600

dpkg (1.10.17) unstable; urgency=medium

  * Make dselect do conflict resolution when dealing with automatically
    selected recommended package. Thanks to Colin Watson for the analysis
    and patch. Closes: Bug#151663
  * Branden Robinson <branden@debian.org>:
    s/dpkg-checkbuild/dpkg-checkbuilddeps/ in usage.
  * dpkg-checkbuilddeps now sets $reduce_arch.  Closes: #212796.
  * Goswin Brederlow <brederlo@informatik.uni-tuebingen.de>:
    Add -u in dpkg-scanpackages.  Closes: #214123.
    Add -a<arch> command to dpkg-scanpackages.
  * Add .#* to dpkg-source's default ignore filter.  Closes: #217380.
  * Matthias Urlichs <smurf@smurf.noris.de>:
    Don't assume /usr/info/dir exists if /usr/info does.  Closes: #165770.
  * Jordi Mallach <jordi@debian.org>:
    Update Catalan translation.
  * Fix errors with dependency fields that reference ${dpkg:Version}.
    Closes: #213108.

 -- Adam Heath <doogie@debian.org>  Mon, 27 Oct 2003 13:04:57 -0600

dpkg (1.10.16) unstable; urgency=low

  * Almost *EVERY* damn file was including config.h in the wrong spot.
    After making it the first include, then off_t/size_t/etc could actually
    be redefined to be 64-bit compatible.
  * Jordi Mallach <jordi@debian.org>:
    Fix configure to set HAVE_SETLOCALE.  Closes: #211816
  * "Loïc Le Loarer" <lll_deb@m4x.org>:
    Add a -d|--chdir option to start-stop-daemon.  Closes: #151802
  * Split the background block into 2 parts: one that does the fork, and
    opens /dev/tty and /dev/null, and one that does everything else.  The
    second block is then moved to be run right before the exec.  This
    allows error messages to be seen from the child(previously, they were
    lost), and allows for the chroot to not require the device files.
    These changes based on the bugs filed by:
    Marc Herbert <Marc.Herbert@ens-lyon.fr>: Closes: #155219
    Loïc Le Loarer <lll_deb@m4x.org>: Closes: #151800
  * Mario Lang <mlang@debian.org>:
    When --start, --startas and --pidfile are given, print 'process'
    instead of '(null)' for the process name, if it's already running.
    Closes: #209355
  * Imported several translated manpages, from debian-doc cvs:
    * Spanish: 822-date.1 cleanup-info.8 deb-control.5 deb-old.5
      deb.5 dpkg-checkbuilddeps.1 dpkg-deb.1 dpkg-divert.8 dpkg-name.1
      dpkg-scanpackages.8 dpkg-split.8 dpkg-statoverride.8 dpkg.8
      dselect.8 md5sum.1 start-stop-daemon.8 update-alternatives.8
      "Esteban Manchado Velázquez" <zoso@debian.org>: Closes: #171489
    * French: deb.5
      Julien Louis <arthur51@ifrance.com>: Closes: #164906
    * Portuguese: dpkg.8 dselect.8
  * Matt Zimmerman <mdz@debian.org>
    In dpkg's manpage, -O had an inverted word.  Closes: #111711
  * Marcin Owsiany <porridge@debian.org>:
    Fix Polish translation of 'conflicts with'  Closes: #112057
  * Jiri Masik <masik@darbujan.fzu.cz>:
    Improve Czech translation of: "dpkg - warning: ignoring request to
    remove %s which isn't installed."  Closes: #117518
  * Marco Nenciarini <mnencia@prato.linux.it>:
    Fix missing space in Italian translation when listing files, and the
    file is diverted.  Closes: #138244
  * Piotr Roszatycki <Piotr_Roszatycki@netia.net.pl>:
    Update Polish translation.  Closes: #142370
  * Martin Quinson <mquinson@ens-lyon.fr>:
    Fix missing space in French translation of: "%s - warning: downgrading
    %.250s from %.250s to %.250s.\n"  Closes: #149142
  * Hidetaka Iwai <tyuyu@sings.jp>:
    Fix typo in Japanese translation of dpkg --force-help; dowgrade ->
    downgrade:  Closes: #157819
  * Martin Quinson <mquinson@ens-lyon.fr>:
    Fix French translation when listing files, and the file is diverted.
    Closes: #162154
  * Rune Schjellerup <olberd@odense.kollegienet.dk>:
    Fix Danish translation of(was missing the leading space): " does not
    appear to be available\n"  Closes: #192972
  * Fix md5sum when handling large files.  Closes: #162691
  * Fix dpkg-checkbuilddeps calling of parsedep.  It wasn't setting
    use_arch.  Closes: #212796.
  * Joey Hess <joeyh@debian.org>:
    Change formatting of info.dir.  Closes: #167379.

 -- Adam Heath <doogie@debian.org>  Sat, 25 Oct 2003 15:46:16 -0500

dpkg (1.10.15) unstable; urgency=low

  * Fix detection of va_copy.
  * Back out debian/rules build-arch detection.  It is *not* possible *at
    all* to detect available targets in a rules file.  Period.

 -- Adam Heath <doogie@debian.org>  Fri, 19 Sep 2003 20:02:19 -0500

dpkg (1.10.14) unstable; urgency=low

  * controllib.pl:
    * Rewrote the parsedep stuff, so that it wasn't done during control
      file parsing.  Scripts that need the internal parsed format should
      call parsedep on the field's value.
    * Split the substvars parsing into a separate function.
    * No longer validate dependency fields when reading the control file.
      Some fields may have vars in them, which breaks the validation.
    * dpkg-gencontrol calls substvars after parsing the control file, and
      then validates the substituted depends lines.  Originally,
      substitution occurred only during writing of the final output file.
    * Andreas Barth <aba@not.so.argh.org>:
      Fix bad regex that didn't allow spaces in dependency field parsing.
      It now directly matches what the c code expects.  It previously was
      allowing all of \S, which matched on '('.
      Closes: #211660.
  * Remove stale debug in debian/control that would have broken
    installation on s390.
  * We were calling our own local copy of dpkg-gencontrol, but the
    system-installed copy of dpkg-shlibdeps.  Now, both are called from
    the build directory.

 -- Adam Heath <doogie@debian.org>  Fri, 19 Sep 2003 12:29:34 -0500

dpkg (1.10.13) unstable; urgency=low

  * Fix parsing of deps when both () and [] are specified.
  * Set $host_arch in controllib.pl:parsedep.
  * dpkg-checkbuilddeps doesn't output the [] stuff when finding invalid
    deps.

 -- Adam Heath <doogie@debian.org>  Wed, 17 Sep 2003 13:23:15 -0500

dpkg (1.10.12) unstable; urgency=low

  * Fix dpkg-source output of build-depends lines.

 -- Adam Heath <doogie@debian.org>  Tue, 16 Sep 2003 13:43:45 -0500

dpkg (1.10.11) unstable; urgency=low

  * dpkg no longer provides any BYHAND files.  If you need the source
    tarball, use the orig.tar.gz file available in the pool.  The
    precompiled tars were hold-overs from when debs were not standard
    ar/tar files.
  * Install /usr/share/doc/dpkg/pseudo-tags, which talks about the bug
    titling we use to mark bugs for filtering in the Debian bts.
  * Updated ca.po.
  * Teach dpkg-source that ~ is legal in version numbers
  * Add build-depends on sgml-base, and increase gettext build-depends to
    0.12.1-3.
  * Updated config.sub and config.guess in cvs.
  * Change use of strncpy in parsedb to memcpy.  Closes: #160447
  * No longer generate helpmsgs.{cc,h}.
  * several controllib changes:
    * Moved dependency parsing logic from dpkg-checkbuilddeps.
      The dpkg-checkbuilddeps parser didn't support empty fields, while
      the controllib parser did.
    * All dependency fields parsed by controllib.pl support [arch]
      specifiers.  If the arch specifier doesn't apply for the current
      arch, then the item will not be added to the internal list structure.
    * Comment lines(that begin with '#') are removed during parsing.
    * Store the original casing of field names, for use in error reporting.
    * Store the original field's casing with 'o:' prepended in %fi.
      * ballombe@merulo.debian.org:
        dpkg-checkbuilddeps now handles empty fields.  Closes: #111562
      * Branden Robinson <branden@debian.org>:
        support comments(first char on line begins with '#') in
        debian/control.  Closes: #191810
      * Bastian Blank <waldi@debian.org>:
        Allow for per-arch generated dependency fields.  Closes: #170575
      * Branden Robinson <branden@debian.org>:
        Report the original casing of field names when they are unknown.
        Closes: #177753
  * Patch dpkg-buildpackage to call debian/rules -qn build-arch, and if
    it's available, modify -B handling appropriately.  If build-arch is not
    available, then when -B was called, do *not* pass -B on to
    dpkg-checkbuilddeps.  Closes: #203097
  * Frank Lichtenheld <frank@lichtenheld.de>:
    Apply patch, to handle missing infodir.bak, and empty files.  Closes:
    #196361
  * Change standard_startup and standard_shutdown into macros.  Closes:
    #200351.
  * Andrew Suffield <asuffield@debian.org>:
    Fix inverted test of eof in parsedb, while looking for eof after
    field name.  Closes: #198218
  * Yann Dirson <dirson@debian.org>
    Add set -e to dpkg-doc.postinst.  Closes: #191261
  * Michael Weber <michaelw@debian.org>:
    dpkg --print-architecture now does gcc -dumpmachine instead of
    --print-libgcc-file-name.  Closes: #131893, #8241, #106793, #210285
  * Daniel Silverstone <dsilvers@digital-scurf.org>:
    Apply patch to change hashing function, and increase bin size, for
    the package database.  Closes: #206416
  * Paul Eggert <eggert@CS.UCLA.EDU>:
    Apply patch to make dpkg work with POSIX 1003.1-2001.  Closes:
    #204894
  * Joey Hess <joeyh@debian.org>:
    Fix "stripping trailing /" message from dpkg-statoverride.  Closes:
    #203782
  * Sami Liedes <sliedes@cc.hut.fi>:
    Increase filesdb bin size, and alter hashing function.  Closes:
    #179385
  * Anthony Towns <aj@azure.humbug.org.au>:
    Retry removing empty dirs during purge.  Closes: #112386
  * Darren Salt <linux@youmustbejoking.demon.co.uk>:
    Add .cvsignore to dpkg-source's default diff ignore regex.  Also fix
    missing \ escape for .deps.  Closes: #174013
  * Koblinger Egmont <egmont@uhulinux.hu>:
    Fix segfault with --status-fd.  Closes: #173618
  * Colin Watson <cjwatson@debian.org>,
    Andrew Suffield <asuffield@debian.org>:
    Add .svn, {arch}, and .arch-ids to dpkg-source -i default regex.
    Closes: #169359
  * Falk Hueffner <falk@debian.org>:
    Added alphaev68-linux-gnu to archtable.  Closes: #199360
  * Elie Rosenblum <fnord@debian.org>:
    Apply patch to support OpenBSD.  Closes: #154277
  * Geoff Richards <qef@laxan.com>:
    Add --config to action section, and add as EXAMPLES section.  Closes:
    #208014, #115759
  * Yann Dirson <dirson@debian.org>:
    install-info --version and --help now display on stdout.  Closes:
    #154633
  * Dan Jacobson <jidanni@dman.ddts.net>:
    Mention what dpkg and dpkg-query -S will not find.  Closes: #153096
  * Sebastian Leske <sleske@enterprise.mathematik.uni-essen.de>:
    Mention in dpkg(8) that downgrading a package can have serious
    consequences.  Closes: #61156
  * Dan Jacobson <jidanni@dman.ddts.net>:
    In dpkg-scanpackages(8), including small note that other tools might
    use the generated Packages file.  Closes: #208894
  * Warren Turkal <wturkal@cbu.edu>:
    Fix some typos in dpkg-source(1).  Closes: #207259, #204123, #167426
  * Dan Jacobson <jidanni@dman.ddts.net>:
    Alter text in dselect(8), implying that other interfaces are available
    for installing packages.  Closes: #206164.
  * Daniel Bonniot <bonniot@users.sourceforge.net>:
    Note in start-stop-daemon(8) that --nicelevel takes an argument.
  * Ruben Porras <nahoo82@telefonica.net>:
    Remove duplicate 'can' in deb-control(5).  Closes: #183840
  * Dan Jacobson <jidanni@dman.ddts.net>:
    Fix short description in dpkg-scansources(8).  Closes: #175770
  * Zefram <zefram@fysh.org>:
    In dpkg(8), move dpkg-query options to their own subsection, like
    dpkg-deb.  Closes: #174971
  * Thomas Hood <jdthood@yahoo.co.uk>
    Add --dry-run and --simulate as synonyms to --no-act.  Closes:
    #165099
  * Junichi Uekawa <dancer@netfort.gr.jp>:
    Fix wrong reference to DEB_BUILD_GNU_SYSTEM on --host in
    dpkg-architecture(1).  Closes: #163621
  * Michael Klein <michael.klein@puffin.lb.shuttle.de>:
    s/Usuaully/Usually/ in deb-control.5.  Closes: #161819
  * Joey Hess <joeyh@debian.org>:
    Removed reference in dselect(8) about recommends not being handled
    well.  Closes: #157973
  * Andrew Suffield <aps100@doc.ic.ac.uk>:
    s/dpkg-source/dpkg-parsechangelog/ in dpkg-parsechangelog -h.
    Closes: #155822
  * Matej Vela <vela@debian.org>:
    Unhighlight "May be repeated multiple times." in dpkg-source(1).
    Closes: #151845
  * Jordi Mallach <jordi@debian.org>:
    Make all actions in dpkg-deb -h lower case.  Closes: #150642
  * Alexander Hvostov <root@aoi.dyndns.org>:
    Add -g|--group to start-stop-daemon, and document properly.  Closes:
    #127342
  * Szerb Tamas <toma@mlf.linux.rulez.org>:
    s/THANKS/THANKS.gz/ in dpkg(8).  Closes: #91348
  * "James R. Van Zandt" <jrv@vanzandt-pc.mitre.org>:
    In dpkg(8), mention running dselect, install after --set-selections.
    Closes: #175236
  * Yann Dirson <dirson@debian.org>:
    Remove disabled --command-fd from help.  Closes: #169619
  * Tobias Burnus <tburnus@physik.fu-berlin.de>:
    Apply patch to update-alternatives that provides --set and --remove-all
    commands.  Closes: #133745.
  * Osamu Aoki <debian@aokiconsulting.com>:
    Add --all to update-alternatives, that calls --config on all
    alternatives.  Closes: #126621
  * Dan Jacobson <jidanni@jidanni.org>:
    Alter --config prompt, to be more clear, that one must 'press' enter to
    accept the default.  Closes: #203557
  * Peter Moulder <pmoulder@bowman.csse.monash.edu.au>:
    Fix some -w issues in update-alternatives.  Closes: #137313
  * Eduard Bloch <edi@gmx.de>:
    Apply patch to check whether the target path exists on removing.
    Closes: #37254
  * Colin Walters <walters@debian.org>:
    After opening files, set binmode.  Closes: #175363

 -- Adam Heath <doogie@debian.org>  Tue, 16 Sep 2003 12:52:11 -0500

dpkg (1.10.10) unstable; urgency=low

  * Update archtable for hurd.  Closes: #187509.
  * Make the dpkg-iasearch conflicts versioned.  Closes: #170698.
  * Surround sed call with '' in Makefile.in.  Closes: #187534.
  * Strip trailing / from the file args in dpkg-statoverride.  Closes:
    #184239.
  * Modified to use autotools-dev.  Closes: #179656.
  * Add netbsd support.  Closes: #179658, #179659.
  * Support hypenated values in dpkg-architeture. Closes: #179661
  * No longer managed the /usr/doc symlinks.

 -- Adam Heath <doogie@debian.org>  Sat, 26 Apr 2003 15:10:24 -0500

dpkg (1.10.9) unstable; urgency=low

  * Fix dereference in main/help.c:cu_closefd(), which was the cause of
    close(random number) on most arches, but close(0) on s390x.
  * Add s390x to archtable.  Closes: #160976.

 -- Adam Heath <doogie@debian.org>  Sun, 15 Sep 2002 13:21:38 -0500

dpkg (1.10.8) unstable; urgency=low

  * Make the multiline regex have an upper bound, instead of being
    unbounded, as newer perls have a larger stack frame, which cause them
    to segfault quicker with larger inputs.  Closes: #159756.

 -- Adam Heath <doogie@debian.org>  Thu,  5 Sep 2002 16:32:01 -0500

dpkg (1.10.7) unstable; urgency=low

  * Fix double free in modstatdb_init, in the case that modstatdb_shutdown
    was called previously.  Closes: #159515.

 -- Adam Heath <doogie@debian.org>  Tue,  3 Sep 2002 18:59:19 -0500

dpkg (1.10.6) unstable; urgency=low

  * Don't call nffreeall, in any of the c/c++ programs.  It appears dselect
    slightly corrupts it's memory enough that it can't be freed without
    segfaulting.  Closes: #159023.

 -- Adam Heath <doogie@debian.org>  Sun,  1 Sep 2002 00:19:18 -0500

dpkg (1.10.5) unstable; urgency=low

  * Fix segfault in md5sum if the file being checked doesn't exist.
    Closes: #154503.
  * Fix extraction of md5sum in dpkg-scanpackages.  Closes: #153769.
  * Handle directories better in md5sum.  Closes: #157453.
  * Fix read past buffer in lib/nfmalloc.c.  Closes: #157304.
  * Fix several read pass buffer bugs, and a memleak.  Closes: #155362.
  * Fix segfault when --auto-deconfigure is given.  Closes: #157762.
  * Allow spaces between the end of a version, and the trailing ')'.
    Closes: #154898.
  * Fixes for HURD:  Closes: #156545
    * Add i386-gnu0.3 to archtable.
    * Fix handling of static compiles, with regard to zlib.
  * Previous install-infos(before 1.10) handled multiple dir file entries,
    because they would copy the entire stanza unmodified.  The newest
    version does not do this, as it reformats the options, and thereby
    only takes the first line.  So, we now split all the lines from the
    stanza, and process them all.  Closes: #147492.
  * Fix corruption of available file, caused by use of memory that was
    previously freed.  Closes: #154257.
  * Fix several minor memleaks.
  * Remove /usr/sbin/start-stop-daemon.  Closes: #156437.

 -- Adam Heath <doogie@debian.org>  Thu, 29 Aug 2002 16:43:15 -0500

dpkg (1.10.4) unstable; urgency=low

  * Remove -ffunction-sections and -fdata-sections.  Closes: #152130.
  * Install archtable into /usr/share/dpkg/.

 -- Adam Heath <doogie@debian.org>  Sun, 14 Jul 2002 15:17:56 -0500

dpkg (1.10.3) unstable; urgency=low

  * Move dselect.cfg to dselect package. Closes: Bug#152132
  * Install methods into /usr/lib/dpkg/methods, not /usr/lib/dpkg.  Closes:
    #152161.
  * Fix test inversion in start-stop-daemon, when checking the pid given in
    a pid file.  Thanks Thomas Morin <thomas.morin@enst-bretagne.fr>.
    Closes: #152270.
  * If in --test mode, and --stop is given, increment n_killed, so that
    start-stop-daemon returns the proper exit value.  Thanks Thomas Morin
    <thomas.morin@enst-bretagne.fr>.  Closes: #151992.

 -- Adam Heath <doogie@debian.org>  Thu, 11 Jul 2002 22:58:43 -0500

dpkg (1.10.2) unstable; urgency=low

  * Make configuration files in $HOME work again
  * dpkg + dpkg-static conflict with dpkg-dev << 1.9, to fix md5sum error
    in dpkg-source.  Closes: #151691.
  * Remove -Z from patch call, in dpkg-source, as it makes patch warn about
    missing timestamps.  Closes: #151965
  * Install debian/dselect.conffiles.

 -- Adam Heath <doogie@debian.org>  Thu,  4 Jul 2002 21:08:09 -0500

dpkg (1.10.1) unstable; urgency=low

  * Add conflict with dpkg-iasearch which intruded on our namespace.
  * Replace manpages-de which includes one of our manpages.  Closes: #151485
  * Don't always call autoheader when building. Closes: #151471
  * Fix double conflict in dpkg. Closes: Bug#151581
  * Move dselect methods to dselect package.
  * dpkg-checkbuilddeps no longer checks for build-essential. dpkg should
    not hardcode Debian policy.
  * Make dpkg-genchanges accept ~ as part of a package filename.
    Closes: Bug#150739
  * Move dpkg.cfg and dselect.cfg manpages into dpkg package. Closes: Bug#132901

 -- Wichert Akkerman <wakkerma@debian.org>  Tue,  2 Jul 2002 12:34:07 +0200

dpkg (1.10) unstable; urgency=low

  * dpkg now reorders symlinks when extracting debs.  However, this is also
    still done when building debs.  After a stable release of Debian has
    occurred with this modified dpkg, the reordering when building can be
    removed.
  * Fixed upper/lowercase problems with package names. Closes: Bug#58091
    (and 3 others).
  * Add Russian manual pages
  * Fix n in dselect package list (performs searchagain now)
  * Fix layout problem in dpkg-divert manpage. Closes: Bug#103667
  * When a package is set to hold, and a reinstallation is requested,
    -E will not properly skip it.  Closes: #45787.
  * Make dpkg-checkbuilddeps use dpkg-architecture. Closes: Bug#104230
  * Improve dpkg-archtecture documentation. Closes: Bug#104232
  * Update German translation. Closes: Bug#97239
  * Update Polish translation. Closes: Bug#115783
  * Update French translation.
  * Update Brazilian translation.
  * Update Danish translation.
  * Update Galician translation.
  * Update Portuguese translations.
  * Add Catalan translation
  * Add German md5sum manpage
  * Add Brazilian update-alternatives manpage. Closes: Bug#122132
  * Improve dselect manpage. Closes: Bug#103839
  * dpkg-name(1) no longer mentions the non-existing dpkg(5) manpage.
    Closes: Bug#104214
  * Improve handling of Recommends and Suggests in dselect. Closes: Bug#34942
  * Add per-user configuration files. Closes: Bug#103845
  * Split dselect into its own package. dpkg Pre-Depends on it
    to make sure no weird things happen during an upgrade but this
    will allow us to make dselect option at some point in the future.
    Closes: #114249.
  * Make colours in dselect user-configurable. Closes: Bug#103994
  * Make Q do an abort in the method selection menu to make things more
    consistent with the package list
  * Fix test for nice(2) failure in start-stop-daemon. Closes: Bug#104561
  * Improve the dselect helpscreen a bit. Closes: Bug#72634
  * New version comparison routine that can handle arbitrarily large numbers
    and accepts `~' as a low-sorting character. Closes: Bug#93386
  * dselect now accepts regular expressions when searching for packages
    and can search in package descriptions as well.
    Closes: Bug#81009,#83139
  * Move query commands into a separate dpkg-query command. For the old options
    (-L,-l,-s,-S) dpkg will still call it for you.
  * Add configurable package listing support to dpkg-query
  * Handle window resize in dselect main menu. Closes: Bug#98275
  * update-rc.d moved to the sysvinit package. Closes: Bug#108887,#109282
  * Add --showformat and --show options to dpkg-deb and dpkg-query to
    allow one to customize the output format
  * several install-info cleanups:
    * Move /usr/info/dir to /usr/share/info/dir.  Closes: #67174.
    * If /usr/share/info doesn't exist, print a message saying so,
      instead of the confusing "couldn't lock" error.  Closes: #2531.
    * If /usr/share/info/dir doesn't exist, or is empty, try to copy the
      backup from /var/backups/infodir.bak.  Closes: #121309.
    * Add a --remove-exactly option, and allow for relative filenames.
      Closes: #92650.
    * Use the section from the .info file if --section is not given.
      Closes: #76100.
    * Error messages now include the filename being processed.
      Closes: #66735
    * /usr/share/info/dir now has it's entries formatted to even widths. 
      Closes: #11228
    * --calign|--align|--maxwidth are now ignored.
  * strip enoent as well. Closes: Bug#112378
  * Fix format error in Dutch translation. Closes: Bug#113120
  * When parsing stdin, md5sum now displays '-' as the filename, to match
    textutils md5sum.  Closes: #121489.
  * Apply patch from bug, to give update-alternatives a --list command.
    Closes: #120924.
  * Make dpkg-checkbuilddeps always check for build-essential.
    Closes: Bug#118420.
  * Use space separated output instead of comma separated in
    dpkg-checkbuilddeps
  * Update default ignore expression in dpkg-source to also match *~ and
    *.swp in subdirs. Closes: Bug#127458
  * Handle errors when verifying md5sums. Closes: Bug#102367
  * dpkg-source now uses reliable timestamps for changed files.
    Closes: Bug#105750
  * Fix typo in start-stop-daemon help message. Closes: Bug#131439
  * update-alternative exits with a non-zero exit code when displaying
    a non-existing alternative. Closes: Bug#131496
  * Use gzip -c in install-info. Closes: Bug#131758
  * start-stop-daemon works on HP-UX now. Closes: Bug#130130
  * Fix dselect spin when run without input. Closes: Bug#132476
  * Update-alternatives now correctly restores an alternative to auto mode
    when removing a manually selected alternative. Closes: Bug#132632
  * Copy bugs and origin information into status file. Closes: Bug#132714
  * Improve wording of update-alternatives --config text. Closes: Bug#133035
  * Add manpages for dpkg.cfg and dselect.cfg. Closes: Bug#132901
  * Improve test for illegal packagename for dpkg-gencontrol -p option
  * Fix segfault when getenv("PATH") returns null.  Closes: Bug#136349
  * Add Large File Summit extensions. Closes: Bug#130509
  * Fix typo in dpkg-source manpage. Closes: Bug#141906
  * Re-fix handling of multiple blank lines in control. Closes: Bug#143117
  * Document --force-confmiss and --force-bad-verify. Closes: Bug#146855
  * Drop upgrade compat stuff in dpkg postinst for ancient versions (over
    5 years old)
  * Always set CLOEXEC on the lock fd.  Closes: Bug#147872
  * Clean up tmp files when ctrl-c is sent to dpkg-source.  Closes:
    Bug#58653.
  * dpkg-source no longer requires exact case matches for fields in
    debian/control.  Closes: Bug#139159.
  * dpkg-scanpackages now gives proper case for Source and Installed-Size.
    Closes: Bug#119532.
  * dpkg-architecture: s/build on/built on/; same for 'build for'.
    Closes: Bug#140441.
  * cl-debian.pl now recognizes emergency as valid in changelogs.
    Closes: Bug#138013.
  * Properly count recursive expansion of variables, instead of just
    counting all variable expansions.  Closes: #144121.
  * Add -I<filename> to dpkg-buildpackage and dpkg-source, to excludes
    files from tar, when building a native package.  Closes: Bug#75947.
  * Close the old debian/files file, before doing a rename.  Closes:
    Bug#111503.
  * Fix documentation of -v<version> for dpkg-parsechangelog, removing the
    requirement that the version has to be in the changelog.  Closes:
    Bug#117968.
  * Fix typo in dpkg-source(1), s/-su/-sU/.  Closes: Bug#126340.
  * Add dpkg-scansources to dpkg-scanpackages(8).  Closes: Bug#147924.
  * Change /usr/info into a symlink to /usr/share/info if possible

 -- Wichert Akkerman <wakkerma@debian.org>  Fri, 21 Jun 2002 21:53:15 +0200

dpkg (1.9.21) unstable; urgency=low

  * Fix corrupt Swedish translations that would some error messages display
    incorrectly.
  * Enable --force-overwrite by default in /etc/dpkg/dpkg.cfg
  * dpkg.cfg is now no longer a conffile. This means the installer can
    change defaults depending on how an install is done
  * Detect truncated debs, and abort the unpack.  Closes: #138569.
  * Improve dpkg(8) --force documentation
  * Fix error in Russian dselect translation

 -- Wichert Akkerman <wakkerma@debian.org>  Thu, 16 May 2002 19:42:29 +0200

dpkg (1.9.20) unstable; urgency=medium

  * Fix assertion when --auto-deconfigure is set.  Closes: #137765.
  * Fix segfault discovered by fixing the above.
  * Fix segfault when getenv("PATH") returns null.  Closes: #136349
  * Recompiled against updated zlib, to fix possible security issue.  Also
    bumped build-depends to match.  Closes: #137931(grave)

 -- Adam Heath <doogie@debian.org>  Sun, 17 Mar 2002 02:52:44 -0600

dpkg (1.9.19) unstable; urgency=medium

  * install-info continues to read all data from a pipe, until EOF.
    Closes: #99816(grave).
  * Add Catalan translation
  * Update Danish translation. Closes: Bug#131869
  * Update French translation.
  * update-alternative exits with a non-zero exit code when displaying
    a non-existing alternative. Closes: Bug#131496
  * Changed Maintainer to debian-dpkg@lists.
  * Fix "Up to date installed packages" for polish translation.  Closes:
    #116398.
  * Swap updated/up-to-date polish translations(they were reversed).
    Closes: #117583, #102961.
  * Mark /etc/alternatives/README as a conffile.
  * Strip .note, .comment, and /usr/lib/dpkg/enoent.
  * Make dpkg-gencontrol not warn about Uploaders.  Closes: #111090.

 -- Adam Heath <doogie@debian.org>  Sat,  2 Feb 2002 11:47:34 -0600

dpkg (1.9.18) unstable; urgency=low

  * Fix MD5Sum corruption when upgrading a package.  Closes: Bug#113961.
  * Add Wichert and I to debian/control:Uploaders.

 -- Adam Heath <doogie@debian.org>  Sat,  3 Nov 2001 00:31:00 -0600

dpkg (1.9.17) unstable; urgency=low

  * updated-rc.d moved to the sysvinit package. Closes: Bug#108887,#109282

 -- Wichert Akkerman <wakkerma@debian.org>  Wed, 22 Aug 2001 01:24:52 +0200

dpkg (1.9.16) unstable; urgency=low

  * Revert architecture-change to dpkg-source from 1.9.11, see ChangeLog
    for details.

 -- Wichert Akkerman <wakkerma@debian.org>  Thu,  5 Jul 2001 22:42:11 +0200

dpkg (1.9.15) unstable; urgency=low

  * Change policy of handling dscformat in dpkg-source
  * Fix the arglist construction for maintainer scripts
  * Revert dscformat to 1.0 since older dpkg-source versions do not have
    the new policy. In the future (starting at format 2.0 to maintain
    compatibility with old dpkg-source implementations) minor changes to
    the dscformat have to be fully backward and forward compatible.

 -- Wichert Akkerman <wakkerma@debian.org>  Sat, 30 Jun 2001 16:41:43 +0200

dpkg (1.9.14) unstable; urgency=low

  * Make the Uploaders field in a .dsc file optional.
  * Disabled sanity checking of source packages.  
 
 -- Adam Heath <doogie@debian.org>  Mon, 25 Jun 2001 02:22:40 -0500

dpkg (1.9.13) unstable; urgency=medium

  * Add a -W option to dpkg-source(and the other utils, where it is just
    passed thru), to turn certain errors into warnings(of which, only
    one is changed, namely, the 'tar doesn't contain preceding directory'
    error).  Closes: #101813, and partially 101845.
  * Don't error out if the files in the tar have leading './', for
    dpkg-source.  (another partial close of 101845).
  * Handle the case where a single directory exists in the orig.tar.gz, but
    it is NOT of the form <pkg>-<ver>.  Closes: #101845.
  * Set LC_ALL in dpkg-source when we call external programs when we are
    going to parse their output.  Another bug from 101845.
  * Handle stating of truncated cpio filenames(100 char limit, bah), in
    dpkg-source.  Another bug from 101845.
  * Add support for an Uploaders field, which is read from the first
    paragraph of debian/control, and propagated to the .dsc.  This lists
    the people allowed to upload a package.  If it is not set, then the
    value of the Maintainer is placed into this field of the .dsc.  This
    bumps the .dsc format to 1.1.  Closes: #101815.
  * Handle symlinks in the tarball, and don't error out if found.
  * in controllib, make warnerrors default to warnings.  Affects
    dpkg-source.  This will be changed to be errors in the future.

 -- Adam Heath <doogie@debian.org>  Sun, 24 Jun 2001 13:48:52 -0500

dpkg (1.9.12) unstable; urgency=medium

  * Fix do_script() bug. Closes: Bug#101552
  * Fix building and extracting of certain kinds of source packages.
    Closes: #101684.
  * Added Colin Watson to THANKS.

 -- Adam Heath <doogie@debian.org>  Wed, 20 Jun 2001 18:27:03 -0500

dpkg (1.9.11) unstable; urgency=low

  * The "Hang on to your hats, it gets bumpy from here." release.
  * Trim trailing spaces from package names when checking builddeps.
    Closes: #101304.
  * Apply patch from bug to fix logic error that kept everything but
    Build-Deps from working in checkbuilddeps.  Closes: #101511.
  * Apply patch to correctly check the output of gcc on hurd, for
    dpkg-architecture. Closes: #99874.
  * The internal pod docs in dpkg-architecture were updated to reflect
    that -f was no longer implied when -q was given, but the build system
    wasn't generating new documentation.  Closes: #100997.
  * deb(5) now has a see-also for deb-old(5).  Closes: #99620.
  * Fix dpkg-shlibdeps infinite directory recursion thru symlinks.
    Closes: #97622.
  * Set the Architecture to 'source' only when doing source only uploads
    in the generated changes files.  Closes: #100144.
  * Document -nc in the dpkg-buildpackage manpage.  Closes: #101038.
  * Make dpkg-source work with GNU md5sum.  Closes: #97666.
  * in dpkg-source, when both arch: all and arch: <arch> packages exist in
    debian/control, don't promote the source arch: to any, but only list
    all and <arch>.  Closes: #94608
  * Apply patch from Colin Watson:  Closes: #89679
    * Reset SIGPIPE to DEFAULT when forking gzip.
    * set LANG to C before execing cpio, as we parse its output.
    * In checktarcpio() and checktarsane(), use the previously open pipes,
      instead of the opening files on disk(which was the old, ancient way).
    * Improve the output parsing of tar in checktarsane().
  * warn instead of die when find returns an error(which happens if there
    is a dangling symlink, because we use -follow).  Closes: #51479.
  * Change list of allowed urgencies in debian/changelog to: low, medium,
    high, and critcial.  Closes: #94475.
  * Error out if an illegal package name is used in dpkg-gencontrol.pl.
    Closes: #61211
  * Apply patch from Marcus Brinkmann to dpkg-buildpackage:  Closes:
    #98201.
    * Option -a implies option -d.
    * Set ARCH correctly to host architecture, rather than build arch.

 -- Adam Heath <doogie@debian.org>  Tue, 19 Jun 2001 22:15:25 -0500

dpkg (1.9.10) unstable; urgency=low

  * Fix [arch] parsing, and handle extra spaces better.  Closes: #100512,
    #101031.
  * Apply patch from bug, to fix cleanup of dpkg-divert temp files.
    Closes: #100474.
  * Swap j/k keys on the main menu, so they function like the package
    selection screen(and like vi).  Closes: #100502.
  * Multiple fixes in bug: Closes: #99892.
    * s/DEAD_JOE/DEADJOE/ in dpkg-source.
    * Switch to auto mode if alternative symlink is missing.
  * Update Spanish translation

 -- Adam Heath <doogie@debian.org>  Sat, 16 Jun 2001 14:57:45 -0500

dpkg (1.9.9) unstable; urgency=low

  * The leading and trailing spaces patch in the last upload had some
    issues with trailing spaces.  This fixes them.  No bug to close, as the
    bts is still down.

 -- Adam Heath <doogie@debian.org>  Wed,  6 Jun 2001 22:36:57 -0500

dpkg (1.9.8) unstable; urgency=low

  * Remove leading and trailing spaces from versions, and check for
    embedded spaces, inside dpkg.  Closes: #99186.
  * Handle varied use of spaces in dpkg-checkbuilddeps.  Closes: #98899.
  * Reset SIGPIPE back to default, in dpkg-source.  Closes: #98563.
  * Remove bogus $! check from dpkg-architecture.  Closes: #99428.

 -- Adam Heath <doogie@debian.org>  Sat,  2 Jun 2001 15:15:04 -0500

dpkg (1.9.7) unstable; urgency=low

  * If a new file doesn't exist on disk, but is a going to be installed as
    a directory, then don't error out.  Closes: Bug#17381.
  * Update japanese manpages.  Closes: Bug#97831.
  * Update it.po.  Closes: Bug#98273.
  * Fix bad cleanup in dpkg-divert.  Closes: Bug#98578,#98828,#98831.

 -- Adam Heath <doogie@debian.org>  Mon, 28 May 2001 18:59:03 -0500

dpkg (1.9.4) unstable; urgency=low

  * Oops.  EOF_mmap incorrectly detecting the end of the data block.
    Closes: Bug#95981.
  * After fixing the above bug, and using debootstrap to build a sid
    chroot, I discovered that my previous dependency cycle fix could cause
    segfaults in some situations.

 -- Adam Heath <doogie@debian.org>  Tue,  1 May 2001 23:04:46 -0500

dpkg (1.9.3) unstable; urgency=low

  * Fix compiles on ppc. Closes: Bug#95918.

 -- Adam Heath <doogie@debian.org>  Tue,  1 May 2001 00:29:45 -0500
   
dpkg (1.9.2) unstable; urgency=low

  * Recompile, to fix incorrect path 1.9.1/dpkg-divert. Closes: Bug#95845

 -- Adam Heath <doogie@debian.org>  Mon, 30 Apr 2001 14:21:28 -0400

dpkg (1.9.1) unstable; urgency=low

  * Fix segfault with empty status and available, and when missing a
    trailing new line.  Closes: Bug#95496
  * Make dpkg-shlibdeps not care if dpkg --search return with an error.
    Closes: Bug#95568
  * Fix corruption of user-defined fields in status and available.
    Closes: Bug#95567.
  * Changed dpkg.cfg to include no-debsig by default, as no debs are
    currently signed, and we get false errors when debsig-verify is
    installed.  This will be removed in the future, when the archive tools
    support package signatures.  Closes: Bug#95573
  * dpkg-buildpackage should only check for valid signinterface if the
    user specifies one. Closes: Bug#95598
  * Fix removing of diversions.  Closes: Bug#95655
  * Fix md5sum -c. Closes: Bug#95586

 -- Adam Heath <doogie@debian.org>  Sat, 28 Apr 2001 16:28:21 -0500

dpkg (1.9.0) unstable; urgency=low

  * Things should mostly work OpenBSD 2.8 as well now
  * Added a --status-pipe option.
  * Fixed several memleaks.
  * Profiled dpkg.
    * Reworked lib/parse.c:parsedb().  Instead of using getc(), then
      calling varbufaddc(), it now reads the entire file at once into a
      huge buffer, then moves pointers around, to do the parsing.  This
      gave a speedup of 33% on a dual celeron 333, when reading status and
      available.
    * various other speedups.
  * Removed all --smallmem code, as smallmem and largemem now actually
    use about the same amount of memory, and largemem is faster.  Both
    --largemem and --smallmem are now obselete options, and will print
    a warning if used. Closes: Bug#84905, #67528
  * Initialize unitialized variables.  This should solve several
    segfaults. Closes: Bug#25317(plus 9 others, thru the beauty of
    merges)
  * Found that when working with dependency cycles, and part of the cycle
    was a provide, the provider was not being considered, so the cycle
    could not be broken. Closes: Bug#87985(and 3 others)
  * Update German translation, Closes: Bug#80529,#80532,#87581
  * Update French translation, Closes: Bug#65284,#85035,#87238
  * Update Japanese translation, Closes: Bug#93873
  * Updated all other translations (but no bugs filed)
  * Add Danish translation
  * Remove spurious '%s' in Polish translation, Closes: Bug#74814
  * Add French manpages, courtesy of Philippe Batailler
  * Ingore vim swapfiles in dpkg-source, Closes: Bug#81630
  * remove --import option from dpkg-statoverride, Closes: Bug#81358
  * Replace nfmalloc implementation with obstack. Added obstack.[ch] to
    optlib, for non-GNU systems.
  * dpkg-divert only allows absolute filenames now. Closes: Bug#82419
  * Handle diffs from non-existing files to existing files. Closes: Bug#82708,
    #90982.
  * Small fixes to the buildsystem. Closes: Bug#84361
  * Fix dpkg-statoverride --update for things other then plain files.
    Closes: Bug#84449
  * Fix race with source directory disappearing in dpkg-source.
    Closes: Bug#45511
  * Fix manpage for dpkg-gencontrol. Closes: Bug#84625
  * Add -n option for dpkg-gencontrol to specify a filename. Closes: Bug#75796
  * Use POSIX glob instead of regexp in debian/rules. Closes: Bug#83042,
    #84582
  * fix typo in usage message for dpkg-divert, Closes: Bug#85977
  * Use full path for argv[0] when calling scripts. Closes: Bug#68783
  * Add ia64 support to dpkg-architecture.
  * Minor script changes, Closes: Bug#87485
  * Stop dpkg-genchanges from complaining about missing packages
    when doing a source-only build. Closes: Bug#87571,#15644,#25496
  * Various dpkg-architecture cleanups. Closes: Bug#87505
  * Modify dpkg-architecture to handle gcc versions containing letters.
    Closes: Bug#83083
  * dpkg-buildpackage updates: Closes: Bug#87572,#85847
    + make -C work properly
    + fix test for gpg secret keyring
    + improve source messages
    + skip signing pause when building unsigned packages
    + test for invalid signinterface. Closes: Bug#87579
    + remove debsign support, it's useless and doesn't work
    + Use correct architecture when naming .changes file. Closes: Bug#88015
  * Fix wording in dpkg-statoverride manpage for --add. Closes: Bug#85080
  * Fix typo in start-stop-daemon manpage. Closes: Bug#88225
  * Add dpkg-checkbuilddeps to check if build dependencies are satisfied
    and modify dpkg-buildpackage to call it if wanted.
    Closes: Bug#86453,#83812,#60717,#74372,#67896,#60717,#13961
  * dpkg-parsechangelog can read a changelog from stdin now. Closes: Bug#80142
  * Fix confusing wording for dpkg-buildpackage -uc option in manpage.
    Closes: Bug#83468
  * dpkg-statoverride now exits with exitcode 1 if we do a --list but don't
    output anything. Closes: Bug#84328
  * Remove Linux reference from all scripts, they should run fine on
    other OSes as well.
  * Mark last argument in dpkg-scanpackages usage info as optional.
    Closes: Bug#86658
  * Fix cache in dpkg-scanpackages version comparison. Closes: Bug#90722
  * Fix formatting error in dpkg-source.1. Closes: Bug#82723
  * Change dpkg-gencontrol to fix comma-related syntax errors after
    processing substvars. Closes: Bug#92908
  * Verify package signatures if debsig-verify is installed. Closes: Bug#37017
  * Handle window resize in dselect main menu. Closes: Bug#93559
  * Initialize all parts of the package record.  This should fix several
    segfaults people have been seeing in dpkg.  Closes: Bug#90328.
  * Apply patch from bug#86847, that escapes intl chars in filenames.
    Closes: Bug#83752, #85040, #86847, #89000.
  * Errors during dpkg -s(and other similar commands) are now printed
    on stderr.  Closes: Bug#88987.
  * Add a --retry option to start-stop-daemon. Closes: Bug#75139
  * Fix regeps to extract Closes magic from a changelog so the #
    is really optional. Closes: Bug#94474
  * Remove useless statement from dpkg-shlibdeps. Closes: Bug#90516
  * Make the debian changelog parser identify itself with $progname.
    Closes: Bug#89409
  * Give a syntax error when we get an unexpected PGP signature in control
    files. Closes: Bug#75562
  * Change dpkg manpage to reflect that --force-statoveride is no enabled
    by default. Closes: Bug#95023
  * Handle dangling symlinks, by ignoring error code 1 from find, when
    processing --recursive. Closes: Bug#4784
  * dpkg -L, -S, -l, -s, and -p now return an error code if any package
    does not exist. Closes: Bug#4974, #72406
  * dselect has a configuration file as well now
  * Get ENOENT value at runtime in dpkg-divert instead of hardcoding it.
    Closes: Bug# 31620
  * Fix wrong ENOENT test in dpkg-divert. Closes: Bug#95088
  * Add support for more SuperH variants (sh[34]{,eb}-linux-gnu)
  * Fix formating and a typo in the dpkg manpage
  * Document the dpkg.cfg configuration file in dpkg(8)

 -- Wichert Akkerman <wakkerma@debian.org>  Thu, 26 Apr 2001 12:39:16 +0200

dpkg (1.8.3.1) unstable; urgency=low

  * Revert change to nfmalloc.c that was causing SIGBUS on sparc.

 -- Ben Collins <bcollins@debian.org>  Sat, 13 Jan 2001 08:52:11 -0500

dpkg (1.8.3) unstable; urgency=low

  * Do chown before chmod in dpkg-statoverride, Closes: Bug#81943
  * Fix recusion in dpkg-shlibdeps, Closes: Bug#81322
  * Really completely revert dpkg-source patches which broke backwards
    compatibility

 -- Wichert Akkerman <wakkerma@debian.org>  Fri, 12 Jan 2001 00:02:22 -0800

dpkg (1.8.2) unstable; urgency=low

  * Don't attempt to read from an input source when we only want 0 bytes.
    Also handle buggy systems that return EAGAIN instead of EINTR.  Closes:
    #81881.
 
 -- Adam Heath <doogie@debian.org>  Thu, 11 Jan 2001 00:43:50 -0600

dpkg (1.8.1.1) unstable; urgency=low

  * Apply patch from bug to fix badly generated diffs(in some
    circumstances).  Closes: #81152

 -- Adam Heath <doogie@debian.org>  Sat,  6 Jan 2001 16:07:33 -0600

dpkg (1.8.1) unstable; urgency=low

  * Make --name a valid option.  Closes: #31206, #51953.
  * dpkg-deb -I <pkg> <control> works again
  * Update Swedish translation

 -- Wichert Akkerman <wakkerma@debian.org>  Thu,  4 Jan 2001 19:31:13 +0100

dpkg (1.8.0) unstable; urgency=low

  * Add -k|--symlink option to dpkg-name.  Closes: #35040
  * Made the accelerator keys in dselect's main menu separate options, so
    that they can be translated separately.  Closes: #50955.
  * Added depends on sysvinit (>= 2.72), so that we can make sure that
    /etc/rcS.d exists.  Closes: #55037.
  * update-rc.d: Changed documentation and help, as -f only applies during
    remove.  Closes: #55049.
  * Added a --force-all option.  Closes: #61354.
  * Format help string for --abort-after like other option help strings.
    Closes: #62464.
  * Fix dselect methods to pass admindir to dpkg from dselect.
  * Minor tweak so that when patch 2.5.4 is manually used to apply a diff,
    it doesn't get applied multiple times.  Closes: #65021
  * Add --nicelevel to start-stop-daemon, to alter a programs priority
    before starting.  Closes: #65191.
  * Document that --largemem is the default, and that the test point is
    24 megs.  Closes: #65607.
  * Document that --set-selections does not actually install any
    packages.  Closes: #65340.
  * Fix typo in dpkg-deb.1.  Closes: #65945.
  * Add --truename option to dpkg-divert.  Closes: #68489.
  * Documented COLUMNS in dpkg(8).  Closes: #77001.
  * Modified DPKG_C_GCC_TRY_WARNS() to call AC_SUBST, so that we can
    use the result of the test during build time.  Closes: Bug#75138
  * Added description for "suggests" in main/depcon.c:describedepcon().
    Closes: Bug#74113
  * Removed bashing from dpkg.postinst.
  * Make '#' optional in Closes: tags.  Closes: Bug#63137.
  * Add -t to -h output in dpkg-buildpackage:  Closes: Bug#49598.
  * Fix typo in --compare-versions error message.  Closes: Bug#66474.
  * -R doesn't mean --root.  Closes: Bug#66068, #72013
  * Add armv3l to archtable.  Closes: Bug#72125
  * Fix two memory leaks, and lesson the memory foot print a tad.  Hints
    taken from 74259.
  * Fix some things perl5.6 complains about. Closes: Bug#77337
  * Fix referenes to dpkg-deb manpage. Closes: Bug#77855
  * Update Galish translation
  * Add new --import option to dpkg-statoverride to make it easy to
    import suidmanager settings.
  * Speedup patches by Adam Heath
  * statoverride fixes by Robert Luberda, Closes: Bug#78436
  * Add Linux S/390 support. Closes: Bug#79063
  * Using libz to decompress data instead of calling gzip.
    Closes: Bug#49581
  * Add gettext to build-depends
  * Fix warning when trying to remove a non-existing statoverride.
    Closes: Bug#79352
  * Be more paranoid with file permissions when extracing files
  * Apply statoverrides to more then just files
  * Update update-alternatives manpage to use FHS instead of FSSTND.
    Closes: Bug#80237
  * List descriptions for udebs in .changes

 -- Wichert Akkerman <wakkerma@debian.org>  Mon, 25 Dec 2000 17:19:31 +0100

dpkg (1.7.2) unstable; urgency=low

  * Fix parsing of configuration files
  * Add new powerpc-linux-gnu entry to archtable. Closes: Bug#76522
  * No longer bother to install emacs things. I don't use emacs myself
    and can't support that properly.
  * scripts/dpkg-shlibdeps.pl: Make it parse soname's in the format of
    "libfoo-X.X.so" (e.g. libdb-3.1.so) and use it. Also make it give a
    warning if there is a NEEDED line in the objdump output that we cannot
    grok.
  * scripts/dpkg-shlibdeps.pl: resolve library paths using a combination
    of the libc major version, and ldconfig -p output. Solves problems
    with errant libc5 deps.
  * Correct name of .changes file when doing source-only builds
  * Fix -ap option for dpkg-buildpackage. Closes: Bug#77305
  * Fix typo in update-alternatives manpage. Closes: Bug#77829
  * Fix typo in script-regexp update-rc.d. Closes: Bug#76029

 -- Wichert Akkerman <wakkerma@debian.org>  Thu, 23 Nov 2000 18:55:50 +0100

dpkg (1.7.1) unstable; urgency=medium

  * Fix a typo in the dpkg-statoveride manpage
  * dpkg-statoverride reads and writes the right file now
  * Make update-alternatives use the right dir for alternatives again

 -- Wichert Akkerman <wakkerma@debian.org>  Tue,  7 Nov 2000 01:16:39 +0100

dpkg (1.7.0) unstable; urgency=low

  * Allow the administrator to override file mode and ownership using the
    new dpkg-statoverride tool.
  * Use objdump instead of ldd in dpkg-shlibdeps
  * Fix logic in dpkg-shlibdeps so it looks for dependencies as specified
    in its documentation
  * Make update-alternatives update slave links with --config and properly
    switch the alternative to manual mode
  * HURD updates, Closes: Bug#57753,#57754,#57755
  * dpkg-architecture: -q should not imply -f, Closes: Bug#57761
  * add dpkg:UpstreamVersion and dpkg:Version substvars in dpkg-genchanges
    and dpkg-gencontrol.  Closes: Bug#62069,#64774
  * dpkg-genchanges: add new Changed-By field to .changes with the last
    person who made a change, and modify the Maintainer-field to be the
    actual maintainer. Update the format-version to 1.7 to reflect this.
  * dpkg-genchanges: allow a space between # and a to-be-closed bugnumber
  * dpkg-deb: reorder files when building a package
  * dpkg-statoverride: new tool to override ownership and modes for files
  * Check COLUMNS environment for dpkg -l output. Closes: Bug#65536
  * Add Origin and Bugs fields to the control file
  * Install new /etc/dpkg/origins/debian file
  * Corrections and updates to Swedish translation.
  * Add Galician, German, Dutch and Brazilian translations
  * archtable: add ia64 and sh; revert sparc64 so that it turns into sparc.
    There wont be a full binary-sparc64 port. Closes: Bug#70788
  * dselect/main.cc: small fixups to get it to compile with gcc-2.96
  * Clean up fd handling in some places. Closes: Bug#69359,#69360,#69361
  * Document -k option for dpkg-buildpackage. Closes: Bug#71808
  * Install commented dummy shlibs.default and shlibs.override files
  * Give dpkg a configurationfile
  * dpkg-scanpackages now uses the most recent version if multiple versions
    of a package are found.
  * don't rename a file to itself in dpkg-source. Closes: Bug#75060
  * Fix buffer overflow in cmdname handling in start-stop-daemon.
    Closes: Bug#75103
  * Don't abort if start-stop-daemon tries to read a non-existing pidfile.
    Closes: Bug#75105
  * Update formating of start-stop-daemon manpage. Closes: Bug#75110
  * Make a missing package a warning instead of an error in dpkg-genchanges

 -- Wichert Akkerman <wakkerma@debian.org>  Sun,  5 Nov 2000 17:28:39 +0100

dpkg (1.6.13) frozen unstable; urgency=low

  * Add Format-flag to .dsc format: we know we are going to change the
    format in the next release, this change will make dpkg-source abort
    with a reasonable error instead of doing unexpected things.
  * Fix error in gettext'ized string
  * Updated Czech, French, Polish and Spanish translations. Closes: Bug#63663
  * debian-changelog-mode.el: fix documentation string for
    debian-changelog-finalise-last. Closes: Bug#63003

 -- Wichert Akkerman <wakkerma@debian.org>  Mon,  8 May 2000 16:08:53 +0200

dpkg (1.6.12.99) frozen unstable; urgency=low

  * Pre-release for 1.6.13. which will only feature translation updates
  * Fix typo in dpkg-divert, Closes: Bug#60243
  * dpkg-genchanges: recognize non-deb packages (tarballs, such as
    dpkg-non-deb and boot-floppies disk tarballs). This makes sure that we
    include them when figuring out the Arch field in the .changes
  * mark another string as translateable, Closes: Bug#62543
  * fix location of --abort-after in --help output, Closes: Bug#62464
  * fix allocation error in checkpath(), Closes: Bug#62364
  * add Hold to list of desired package states in -l output, Closes: Bug#58765

 -- Wichert Akkerman <wakkerma@debian.org>  Fri, 21 Apr 2000 11:52:59 +0200

dpkg (1.6.12) frozen unstable; urgency=high

  * Fix test for gpg/pgp in dpkg-buildpackage. You can now build
    unsigned packages again. Closes: Bug#60395
  * Updated Spanish and Swedish translations. Closes: Bug#41735
  * Merge patch from Joel Klecker to remove emacsen-common stuff from dpkg-dev

 -- Wichert Akkerman <wakkerma@debian.org>  Mon,  3 Apr 2000 16:50:02 +0200

dpkg (1.6.11) frozen unstable; urgency=high

  * Oops, missed one case where the libc/ncurses conflict reared its
    ugly head and broke dselect miserably. 
  * fix syntax error in dpkg-divert. Closes: Bug#60050

 -- Wichert Akkerman <wakkerma@debian.org>  Fri, 10 Mar 2000 11:52:07 +1100

dpkg (1.6.10) frozen unstable; urgency=low

  * The `it rains in Sydney' release
  * Mark another string in dselect as translateable, Closes: Bug#58618
  * Fix typos, Closes: Bug#58619
  * Change dselect keybindings slightly so `n' really does searchagain
  * Updated Czech and Spanish translations, Closes: Bug#58617
  * dpkg-divert.pl: reinstate last writeability-patch. Modified
    to not abort on ENOENT: this indicates a directory does not (yet)
    exist. If this happens don't try to rename. This should fix all
    current dpkg-divert problems. Closes: Bug#59207,#58596
  * update-alternatives: switch back to auto-mode when manually selected
    alternative is removed, Closes: Bug#54933
  * dselect no longer segfaults on SIGWINCH but does The Right Thing
    instead. Closes: Bug#54303,#58697,#59419

 -- Wichert Akkerman <wakkerma@debian.org>  Tue,  7 Mar 2000 15:09:47 +1100

dpkg (1.6.9) frozen unstable; urgency=low

  * Fix typo in update-alternatives manpage
  * dpkg-architecture: -q should not imply -f, Closes: Bug#57761
  * Cleanup bits of install-info to make it more stable
  * Fix Build-Dependency for ncurses, Closes: Bug#58073
  * Some more documentation updates, Closes: Bug#57985
  * Revert patch to check for writeable filesystems in dpkg-divert,
    Closes: Bug#57840

 -- Wichert Akkerman <wakkerma@debian.org>  Fri, 18 Feb 2000 12:11:58 +0100

dpkg (1.6.8) frozen unstable; urgency=low

  * Turn --force-overwrite on by default
  * Fix a couple of small buildsystem errors
  * Support multiple adjacent newlines in control-style files, Closes: Bug#56056
  * Updated Czech and Swedish translations
  * Revert patch to change order of things when purging a package,
    Closes: Bug#56374
  * Handle failed open of /dev/tty in dpkg -l, Closes: Bug# 55041
  * Update Japanese translations, Closes: Bug# 56641, #57494, #57595
  * Update extended description for dpkg-dev, Closes: Bug# 56675
  * Implement verbose option for update-alternative
  * Fix conflicts handling

 -- Wichert Akkerman <wakkerma@debian.org>  Thu, 10 Feb 2000 15:31:31 +0100

dpkg (1.6.7) frozen unstable; urgency=low

  * dpkg compiles on HP-UX, Solaris and IRIX now
  * start-stop-daemon can chroot now, Closes: Bug#54513
  * Allow space between # and the bugnumber in the changelog
  * Display package description with waddnstr, Closes: Bug#54313
  * Updated Japanese manpages, Closes: Bug#54690, #55080
  * Upload full source for packages with version *-0.1, Closes: Bug#54651

 -- Wichert Akkerman <wakkerma@debian.org>  Sun, 16 Jan 2000 18:36:10 +0100

dpkg (1.6.6) unstable; urgency=low

  * dpkg-buildpackage supports debsign, Closes: Bug#58333
  * fix update-alternatives manpage, Closes: Bug#53859
  * Updated Polish translation
  * Pass admindir to dpkg, Closes: Bug#54039
  * Fix dpkg -l output
  * Remove dpkg-safelist again, it had issues

 -- Wichert Akkerman <wakkerma@debian.org>  Fri,  7 Jan 2000 19:51:45 +0100

dpkg (1.6.5) unstable; urgency=low

  * Update Spanish translation
  * Don't strip 8th bit in dselect packagelists, Closes: Bug# 49061
  * Don't use \z in dpkg-scansources, Closes: Bug# 53182
  * Correctly unregister internals manual, Closes: Bug# 53200
  * dselect helpessages can be translated now, Closes: Bug# 51381
  * dselect UI tweaks, including a new --expert mode
  * Added build-depends, Closes: Bug# 53394
  * Added THANKS-file with people who have contributed to the code
  * Use full width of tty in packagelisting, Closes: Bug# 53395
  * Add -z option to dpkg-deb to set compressionlevel when building
    packages, Closes: Bug# 53398
  * Fix segfaults when producing a diff between current and new conffile,
    Closes: Bug# 52197

 -- Wichert Akkerman <wakkerma@debian.org>  Sat, 25 Dec 1999 04:47:09 +0100

dpkg (1.6.4) unstable; urgency=low

  * No longer byte-compile for emacs
  * Add Swedish translation
  * start-stop-daemon: honour --oknodo if we fail to kill a process
    Closes: Bug#52580,#52185,#52457
  * Fix dselect program description, Closes: Bug#52328
  * Fix architecture-detection in dpkg-gencontrol, Closes: Bug#52616
  * Accept single-number values in update-rc.d, Closes: Bug#46810

 -- Wichert Akkerman <wakkerma@debian.org>  Sun, 19 Dec 1999 16:27:48 +0100

dpkg (1.6.3) unstable; urgency=high

  * Comment dselect changes from 1.6.2, they seem to have a problem
    Closes: #52043,52058,52088,51437
  * Really fix emacs-stuff. Hopefully. Closes: #51919,51525
  * Fix copyright display in dselect menu, Closes: #52093
  * Fix uid/gid-changes in start-stop-daemon, Closes: #52081

 -- Wichert Akkerman <wakkerma@debian.org>  Tue,  7 Dec 1999 17:06:00 +0100

dpkg (1.6.2) unstable; urgency=low

  * New dpkg-scansources, Closes: #51888
  * Fix default for elispdir, Closes: #51919,51525
  * New manpages for cleanup-info and dpkg-divert, Closes: #51539, 46657
  * Buildsystem updates, Closes: #51525, 51855, 51914
  * Modify dselect behaviour for suggests and recommends

 -- Wichert Akkerman <wakkerma@debian.org>  Sun,  5 Dec 1999 19:29:50 +0100

dpkg (1.6.1) unstable; urgency=low

  * Fix some slight packaging errors

 -- Wichert Akkerman <wakkerma@debian.org>  Fri, 26 Nov 1999 20:18:48 +0100

dpkg (1.6) unstable; urgency=low

  * Major overhaul of the buildsystem
  * Update Standards-Version to 3.1.0
  * Move to version 1.6 to reflect the amount of changes made
  * Fix mixup with Czech and Polish translations, Closes: Bug# 48986
  * utils/start-stop-daemon.c: Added ability for user.group arg to
    --chuid. Also, always call initgroups() when using --chuid.
  * utils/start-stop-daemon.8: Document above change, also add note to the
    --make-pidfile option concerning its problem with daemons that fork

 -- Wichert Akkerman <wakkerma@debian.org>  Thu, 25 Nov 1999 04:30:01 +0100

dpkg (1.4.1.19) unstable; urgency=low

  * Fix replaces for dpkg-dev
  * Add gettext-support to dselect
  * Added Czech and Polish translations for dpkg
  * Fixed incorrect patch for --print-architecture (oops, oh well
    it was already broken when there was no gcc anyway :)
  * Fixed missing mipseb that was supposed to be in the archtable
  * Better output in update-alternatives --config, now shows the
    current, and the preferred choices.
  * dpkg-name: ignore epoch when getting version
  * 50dpkg-dev.el: add it as a conffile for dpkg-dev
  * internals.sgml: Removed references to the versions of build tools,
    they date the document.
  * debian-changelog-mode.el: added hint for better log-email handling
  * Added recognition for new source-depends fields for policy
    referenced in bug #41232
  * dpkg-buildpackage: add -ap option to force a pause prior to starting
    the sign process. This helps for people who don't keep their signatures
    on the filesystem (on a floppy perhaps, then mount as needed).
  * minor script corrections
  * dpkg-dev control: Change gcc to c-compiler in the recommends field, and
    move cpio, patch and make to the depends line
  * Leave file info intact in available when installing packages. MD5sum,
    Filename, and MSDOS-Filename used to get lost when installing a
    package.
  * Added armv4l to archtable
  * Added 'D' to the list of choices for conffile handling, closes: #48137
  * Converted internals.sgml to debiandoc format. Also added a dpkg-doc
    package that contains the generated output from this file (.ps, .html
    and .info), includes doc-base support. Internals.sgml is also not
    generated on the binary-arch target, and is no longer "byhand"
  * dpkg-gencontrol: add "Source" to the fields placed in the control file
  * dpkg-parsechangelog: fixed loop for parsepath (#48526)
  * main/{processarc.c,depcon.c}: added new structure for conflictors,
    which contains a struct for conflicts. This is used to create an array
    of conflicting packages, which are going to be replaced. Allows for
    multiple conflicts and replaces. All conflictor handlers were
    converted to loops to handle each one (processarc.c).
  * dpkg-divert: Fix check for writable filesystem, closes: #48646

 -- Wichert Akkerman <wakkerma@debian.org>  Sat, 30 Oct 1999 15:14:40 +0200

dpkg (1.4.1.18) unstable; urgency=low

  * Backout dep check patch

 -- Ben Collins <bcollins@debian.org>  Sat, 23 Oct 1999 00:39:24 -0400

dpkg (1.4.1.17) unstable; urgency=low

  * Add support for long filenames, along with --assert-longfilenames
  * Added --chuid option to start-stop-daemon to allow switching to
    a different uid when starting a process
  * Add mipseb and mipsel to the archtable too, since mips and mipseb are
    both viable names for the mips big endian arch, and mipsel is also needed
  * Update dpkg-architecure's archtable
  * Added --config option to update-alternatives to allow easy changing
    of the registered alternatives for a specific name
  * Updated the deb-control(5) man page with all the current fields
    and uses
  * Made the large info screen show 5 lines of the pkglist so that
    it scrolled properly, and still showed the cursor in dselect
  * Removed references to dpkg(5) which seems to not exist anymore
  * Fixed `dpkg-deb --help' and dpkg-deb(1) from reporting --no-check
    when it's actually --nocheck (went with the hardcoded option, so
    this is just a documentation fix).
  * Added better check in disk.setup for a working NFS server. Makes
    it compatible with other non-Linux servers.
  * Corrected dpkg(8)'s example of using dpkg -i (showed it used with
    a .tar.gz instead of a .deb)
  * Applied patch to correct improper TMPDIR handling in dpkg-deb
  * When encountering an error in extracting the tar archives in the
    packages, we should abort the install, not simply give an error
    and continue.
  * Make dpkg give the builtin arch if there was an error while exec()'ing
    the C compiler with --print-architecture. We still fail if the
    output from gcc was bad in some way, since they may be of importance.
  * Removed the maintainer-configure portion in debian/rules, since
    we should be shipping the source with all the auto* stuff
    already generated anyway
  * Removed the ltconfig patch, and resort to a debian/rules fix
    to libtool itself after running configure
  * Removed shlibs.default.i386. It's now a template for arch porting to
    Debian/dpkg, we install it still, if there exists a file matching the
    arch
  * Reimplemented a better *stat cache for the removal checking code,
    this helps a lot when doing upgrades where the packages are a lot
    different in layout
  * Increased largemem auto detection to >= 24megs, since it's not uncommon
    for dpkg to actually use 16megs of ram all on its own when using the
    largemem setting (old minimum was 16megs)
  * debian/rules: chmod -x everything in /usr/lib to make lintian happy.
    in the clean phase just rm -rf $(BUILD), we don't need to run
    distclean and all that other stuff. Don't run "make dist", we
    simply copy the .tar.gz that dpkg-source creates for the byhand
    source.
  * Make start-stop-daemon exit(1) when we don't find one of the
    pid's we are trying to kill, in accordance with the man page.
  * When running --configure on an already installed package, just
    say it's installed, and not that it is in an unconfigurable
    state
  * Fixed some compiler warnings
  * Make dpkg check for uid 0 requirement, before checking the path
    since not being root, is probably the reason that the PATH is
    borked in the first place
  * Make -p short for --print-avail, and -P short for --purge
  * Fix typo in md5sum(1) man page
  * start-stop-daemon: Add --background and --make-pidfile options
  * update-alternatives: make sure we remove "old" symlinks when they
    are no longer pertinent. Add /etc/alternatives/README that refers
    to the update-alternatives(8) man page.
  * dpkg-divert: Add check for being able to write to the old/new
    destination before doing a rename. We fail on this, without
    changing the diversion registry
  * Fix bad regex in update-rc.d

 -- Wichert Akkerman <wakkerma@debian.org>  Thu, 21 Oct 1999 17:49:03 +0200

dpkg (1.4.1.16) unstable; urgency=medium

  * Hardcode ENOENT again since the errno-part of the POSIX module
    isn't in perl-*-base. sigh.

 -- Wichert Akkerman <wakkerma@debian.org>  Fri, 15 Oct 1999 04:01:14 +0200

dpkg (1.4.1.15) unstable; urgency=low

  * non-maintainer release.
  * Move dselect into its own package
  * Remove conffiles before directories when purging
  * Check if integrity from other packages will broken when processing
    an archive
  * dpkg-deb can handle package made with Linux ar.
  * Add check to update-alternatives to see if the sequencecode is between
    0 and 99
  * Fix failed assertion, which was actually two bugs: a logic error in
    checkforremoval and a wrong assumption in findbreakcycle
  * dselect doesn't die when you resize the terminal
  * check if a file is also in a new package before removing it when upgrading
  * offer to show a diff between the old and new conffile
  * dpkg-scanpackages: don't abort but only skip a package if we can't
    open it
  * Add HURD-support to  start-stop-daemon
  * Reinstate patch to not read available when doing --list-files
  * Add a couple of --force options to handle changed conffiles

 -- Wichert Akkerman <wakkerma@debian.org>  Thu, 14 Oct 1999 04:20:56 +0200

dpkg (1.4.1.14) unstable; urgency=low

  * non-maintainer release.
  * dpkg-source works again on empty diffs, Closes: Bug# 46159
  * Install locale-files in /usr/share, Closes: Bug# 46631
  * Make /usr/share/doc/dpkg-dev a symlink to /usr/share/doc/dpkg
  * Actually include fix to make update-alternatives works filesystems (oops!)
  * Check if codenumber is between 0 and 99, Closes: Bug# 46810

 -- Wichert Akkerman <wakkerma@debian.org>  Tue,  5 Oct 1999 19:19:05 +0200

dpkg (1.4.1.13) unstable; urgency=low

  * Non-maintainer release.
  * NMU number 13, lets see what breaks :)
  * update-alternatives works across filesystems now
  * Make -sgpg work in dpkg-buildpackage (typo)

 -- Wichert Akkerman <wakkerma@debian.org>  Tue, 28 Sep 1999 01:26:19 +0200

dpkg (1.4.1.12) unstable; urgency=low

  * Non-maintainer release.
  * Fix typo in chmodsafe_unlink that made dpkg chmod files that
    weren't setuid or setgid

 -- Wichert Akkerman <wakkerma@debian.org>  Sun, 26 Sep 1999 02:41:30 +0200

dpkg (1.4.1.11) unstable; urgency=low

  * Non-maintainer release.
  * Added sparc64 to archtable
  * Added entries for newer alpha architectures to the archtable
  * Always run patch and diff with LANG set to C.
  * Handle diff warning for files with no newline at the end of file
    Closes: Bug#45642

 -- Wichert Akkerman <wakkerma@debian.org>  Fri, 24 Sep 1999 03:23:54 +0200

dpkg (1.4.1.10) unstable; urgency=low

  * Non-maintainer release.
  * Build dpkg-scansources manpages using pod2man
  * dpkg-buildpackage changes:
    + fix signinterface-detection
    + use gpg by default if $HOME/.gnupg/secring.gpg exists

 -- Wichert Akkerman <wakkerma@debian.org>  Thu, 16 Sep 1999 15:36:43 +0200

dpkg (1.4.1.9) unstable; urgency=low

  * Non-maintainer release.
  * Updated dpkg-scansources to current version from Roderick Schertler
  * Update location of GPL in internals-manual
  * Update location of GPL and dpkg copyright in all manpages
  * Include patch from Roman Hodek for dpkg-source to handle diffs of files
    with lines that begin with two dashes.
  * Move dpkg-scansources to dpkg-dev package
  * Move dpkg-scansources manpage to section 8
  * Fix error that moved a lot of manpages to the dpkg package.
  * It looks like not reading the available-file for listfiles was not greeted
    with much enthiousiasm, so reverse the change.

 -- Wichert Akkerman <wakkerma@debian.org>  Wed, 15 Sep 1999 03:45:07 +0200

dpkg (1.4.1.8) unstable; urgency=low

  * Non-maintainer release.
  * Merge dpkg-doc-ja
  * Add patch from Raphaël Hertzog <rhertzog@hrnet.fr> for dpkg-scansources
    to skip comments in signatures. This allows packages to also use GnuPG.

 -- Wichert Akkerman <wakkerma@debian.org>  Mon, 13 Sep 1999 04:16:33 +0200

dpkg (1.4.1.7) unstable; urgency=low

  * Non-maintainer release.
  * Use /usr/share/doc
  * Merge changes from dpkg-iwj tree:
    + change section in dpkg-deb.1 to 1
    + Use COPYINGFILE instead of hardcoded GPL-location in showcopyright()
    + varbufprintf (used for some error messages) vsnprintf return value
      assumption changed to correspond to reality rather than glibc-doc.
    + Don't read available-info when not needed (slightly improved from 
      dpkg-iwj: don't read for listfiles either :)
    + Cleanup --assert-* code
    + Assume largemem on systems without sysinfo(2).
    + modify preexec-script for easier script execution
    + Do not chmod(".../path/to/symlink",0600) causing many bad perms.
    + Sanity-check numbers for parameters
    + Move some logic from process_archive into wantinstall
    + Print '0' in dpkg-scanpackages if no packages found.

 -- Wichert Akkerman <wakkerma@debian.org>  Fri, 10 Sep 1999 04:06:32 +0200

dpkg (1.4.1.6) unstable; urgency=low

  * Non-maintainer release.
  * scripts/dpkg-architecture.pl: Update to latest version.
  * scripts/dpkg-architecture.1: Likewise.
  
 -- Marcus Brinkmann <brinkmd@debian.org>  Sat, 24 Jul 1999 18:24:21 +0200

dpkg (1.4.1.5) unstable; urgency=low

  * Non-maintainer release.
  * (dpkg-dev): Use emacsen-common for debian-changelog-mode.el
    (closes:Bug#20776,#31030).
  * Removed references to the packaging and policy manuals from debian/control.
  * Put debian-changelog-mode.el in dpkg-dev and remove from dpkg (closes:Bug#29271).
  * Fix paths in 50dpkg-dev.el using Roderick Schertler's patch
    (closes:Bug#28270,#29702,#26876,#29184,and others).
  * Note that bug number 17367 was fixed in 1.4.0.26.
  * Add Zack Weinberg's install-info patch for GNU install-info
    compatibility (closes:Bug#28965).
  * Add dpkg-architecture stuff from Marcus Brinkmann.
  * Remove debian-keyring suggests from dpkg.
  * Add -k<keyid> flag to dpkg-buildpackage.
  * --textmode works in gpg, remove kluge from dpkg-buildpackage.
  * Cleanup configure.in slightly (stop using tl_ macros, fix gettext stuff).
  * Attempt to make Debian source useful for non-Debian systems
    (i.e. distclean tree instead of maintainer-clean tree).
  * Sync with wichert's 1.4.1.4.
  * Add my ltconfig-1.3.2.diff (RPATH workaround).
  * Add dpkg-scansources program and man page.
  * Man pages in /usr/share/man.

 -- Joel Klecker <espy@debian.org>  Tue, 13 Jul 1999 18:12:15 -0700

dpkg (1.4.1.4) unstable; urgency=low

  * Also change developer-keyring to debian-keyring for dpkg-dev package
  * Include spanish translation from Nicolás Lichtmaier <nick@debian.org>
  * Depend on perl5 instead of perl

 -- Wichert Akkerman <wakkerma@debian.org>  Mon,  5 Jul 1999 00:04:14 +0200

dpkg (1.4.1.3) unstable; urgency=low

  * Modify tarobject() so it does not complain if we are creating a
    directory that replaces a removed file. This works around the
    problem that the filedatabase doesn't remember what filetype a
    file was by assuming it already was a directory

 -- Wichert Akkerman <wakkerma@debian.org>  Mon, 31 May 1999 23:49:23 +0200

dpkg (1.4.1.2) unstable; urgency=low

  * Non-maintainer upload
  * Rebuild, so this is glibc2.1 (unless you're on m68k), which is rumoured
    to also fix the i8n-problems.
  * Incorporate 1.6 format of .changes, patch from Guy Maor
  * Fix bug in section-handling of dpkg-scanpackages, patch from Guy Maor
  * Disable force-overwrites again, since we're in unstable
  * Assume largemem on systems for which sysinfo is not available, Bug# 33658

 -- Wichert Akkerman <wakkerma@debian.org>  Wed, 26 May 1999 15:50:17 +0200

dpkg (1.4.1.1) unstable; urgency=low

  * Non-maintainer upload
  * Install emacs-startup scripts with mode 0644 (lintian)
  * Incorporate changes in NMU 1.4.0.32 made by Vincent Renardias
    <vincent@waw.com> for slink:
    + Apply patch from Jim Pick for update-alternatives.pl to
      fix 'Important' bugs #30891 in dpkg and (#27382, #27383, #27696,
      #27703, #27736, #27097(merged bugs)) in jdk1.1.
  * Incorporate changes in NMU 1.4.0.33 made by me for slink:
    + Fix illegal perl construct (Bug# 30985)
    + Initialize oialtname->useinstead and oicontest->camefrom to 0 (Bug# 30397)
    + Update shlibs.default for libncurses 4 (Bug# 30332)
    + Suggest debian-keyring instead of developer-keyring (Bug# 27376, 30248)
    + Abort dpkg-divert when attempting to divert a directory (Bug# 30126)
    + Make dpkg-deb.1 aware that it is in section 1, not 8
    + Fix section in reference to dpkg-deb in dpkg.8 (Bug# 29740)
    + Fix typo in --force-help (Bug# 26193)
    + Correct path for debian-changelog-mode.el (Bug# 24606)
    + Make disk-method for dpkg use /var/run instead of /tmp to fix
      symlink-attacks (Bug# 21399)
    + Document -n and -f options for update-rc.d in manpage (Bug# 15913)
    + Add --abort-after option to change after how many errors we abort and
      change the default to 50 (Bug# 22940)
    + Fix controllib.pl: don't check debian/substvars unless needed, and
      don't depend on language settings (Bug# 31508)
    + Allow a - in the architecture-field (Bug# 25537)

 -- Wichert Akkerman <wakkerma@debian.org>  Mon,  1 Feb 1999 00:44:01 +0100

dpkg (1.4.1) unstable; urgency=low

  * Maintainer release by IWJ.
  * Changed Maintainer: field description.
  * Various changes to make the damn thing build.
  * Add .cvsignore files.

 -- Ian Jackson <ian@davenant.greenend.org.uk>  Sun,  1 Nov 1998 17:33:38 +0000

dpkg (1.4.0.31) unstable; urgency=low

  * dpkg/processarc.c: Make newfileslist static like the other arguments
    for register_cleanup's cu_* functions.
  * N-th fix for controllib.pl (simulate old behavior by trying stdin,
    stdout, and stderr for getlogin()).
  * Enable --force-overwrite for slink release, and comment where to do
    so (dpkg/main.c).
  * Recompile against ncurses4.

 -- Daniel Jacobowitz <dan@debian.org>  Thu, 22 Oct 1998 17:37:23 -0400

dpkg (1.4.0.30) unstable; urgency=low

  * dpkg-dev isn't allowed to have a Recommends: debian-keyring (as that's
    in contrib), so it's now lowered to a Suggests: . Thanks to James Troup
    for pointing this out. 

 -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl>  Sat, 26 Sep 1998 13:59:23 +0200

dpkg (1.4.0.29) unstable; urgency=low

  * For now, prefer PGP over GPG.

 -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl>  Tue, 22 Sep 1998 09:38:09 +0200

dpkg (1.4.0.28) unstable; urgency=low

  * Added gpg (GNU Privacy Guard) support:
    * scripts/buildpackage.sh: default to GPG (unless no GPG, but only a PGP
      secret key file is found), as GPG, unlike PGP, is DFSG-free.
    * Updated dpkg-source(1), and added gpg(1) and pgp(1) to the SEE ALSO
      section.
    * Worked around broken textmode implementation in GPG.
    * dpkg-dev now Suggests: gnupg .
  * No longer includes developer-keys.pgp . Instead, dpkg now Suggests: and
    dpkg-dev now Recommends: developer-keyring.
  * Compiled with latest libstdc++ (2.9).

 -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl>  Mon, 21 Sep 1998 13:17:14 +0200


dpkg (1.4.0.27) unstable; urgency=low

  * REALLY fixed dpkg-dev, and new attempt to placate installer on internals.

 -- Daniel Jacobowitz <dan@debian.org>  Fri, 27 Jul 1998 15:58:04 -0400

dpkg (1.4.0.26.0.1) unstable; urgency=low

  * Binary-only upload for x86 and fixed dpkg-dev

 -- Daniel Jacobowitz <dan@debian.org>  Fri, 24 Jul 1998 15:58:04 -0400

dpkg (1.4.0.26) unstable; urgency=low

  * Non-maintainer upload.

  * Make --root work with maintainer scripts (Patch by Scott Barker,
    bugs #4863 and #3170).
  * Fix $(lispdir) bug if compiling without emacs (noticed by Joey Hess).

 -- Daniel Jacobowitz <dan@debian.org>  Thu, 23 Jul 1998 12:02:04 -0400

dpkg (1.4.0.25) unstable; urgency=low

  * Non-maintainer upload.
  
  * Add the requested -nc option to dpkg-buildpackage (Do
    not clean source tree, useful in debugging cycles).
  * controllib.pl: Again by popular acclamation, fix the getlogin() warnings.
    I redirected STDERR onto fd 0 before calling getlogin().
  * tools.m4: Fix display of whether c++ works.
  * dpkg-deb/extract.c: glibc 2.1 and some kernels want to make
    fflush() move the current fpos.  Until someone can fix that,
    protect with seek.
  * Add an extra 0, to dselect/{pkg,meth}keys.cc so it compiles again.
  * Start using lchown() if available.
  * Really fix #20353. (aclocal.m4 was the wrong place; that's a generated
    file.  The correct place is in tl_canon.m4.)

 -- Daniel Jacobowitz <dan@debian.org>  Tue, 21 Jul 1998 03:14:14 -0400

dpkg (1.4.0.24) unstable; urgency=low

  * Non-maintainer upload.

  * dpkg/main.c: Turn --force-overwrite off as default.
  * dpkg/main.c: don't list --force-overwrite as default in --force-help,
    noticed by Peter Weiss <Peter.Weiss@Informatik.Uni-Oldenburg.DE> and
    others. [#23542, part of #17409].
  * dpkg/dpkg.8: replaced with a newer version from Jim Van Zandt
    <jrv@vanzandt.mv.com>. [#21061]

  * dpkg-deb/build.c (do_build): add missing \n and improve error message
    when conffile name is too long. [#7057]

  * scripts/update-alternatives.8: replaced with better man page from
    Charles Briscoe-Smith <cpb4@ukc.ac.uk>. [#17283]
  * scripts/dpkg-source.1: corrected logic error in documentation for
    dpkg-gencontrol's -p option, as noticed by Oliver Elphick
    <olly@linda.lfix.co.uk>. [#14655]
  * scripts/controllib.pl (findarch): correct typo in error message,
    noticed by Yann Dirson <ydirson@a2points.com>. [#22106]
  * scripts/dpkg-buildpackage.sh: fix typo s/source version/source
    maintainer/, noticed by Joey Hess <joey@kite.ml.org>, Adam P. Harris
    <apharris@onshore.com> and others. [#10175, #15559]
  * scripts/dpkg-genchanges.pl: applied patch from Roman Hodek
    <Roman.Hodek@informatik.uni-erlangen.de> which solves problems with
    architecture specific packages in mostly architecture independent
    multi-binary source packages. [#14341, #20192].

  * doc/Makefile.am: remove any reference to the packaging manual, as it is
    now provided by the separate "packaging-manual" package.
  * doc/packaging.sgml: removed.
  * doc/developer-keys.pgp: updated to the current debian keyring.

  * aclocal.m4: applied patch from Joel Klecker <jk@espy.org> to handle
    egcs' --print-libgcc-file-name output. [#20353]
  
  * debian/copyright: correct FSF address.
  * debian/rules: add code from lesstif's debian/rules to make libtool
    less of a fool (i.e. not use -rpath and to link shared libraries
    against libraries it depends on).  Code by Richard Braakman
    <dark@xs4all.nl> and Yann Dirson <dirson@debian.org>.
  * debian/rules: remove all reference to the packaging manual as it is
    now provided by the separate "packaging-manual" package. [#21581,
    #21186, #22698, #23342]
  * debian/rules: link dpkg-divert.1.gz to undocumented.7.gz as the lack
    of a real manpage has been reported in #11093.
  * debian/README.compile: removed gawk and bogus comment about gettext
    being in experimental, as reported by Santiago Vila <sanvila@unex.es>
    [#23344].  Added libpaperg (debiandoc2ps needs paperconf).
  * debian/shlibs.default.i386: updated for glibc, reported by Herbert Xu
    <herbert@gondor.apana.org.au>. [#13140]
  * debian/control (dpkg-dev): depend on perl as POSIX (not a part of
    perl-base) is needed by most of the perl dpkg-* scripts, noticed by
    Joel Klecker <jk@espy.org>. [#22115]

 -- James Troup <jjtroup@comp.brad.ac.uk>  Wed, 24 Jun 1998 14:38:52 +0200

dpkg (1.4.0.23.2) frozen unstable; urgency=low

  * Non-maintainer upload.
  * dpkg/main.c: Turn --force-overwrite back on as default.

 -- James Troup <jjtroup@comp.brad.ac.uk>  Tue, 23 Jun 1998 22:19:26 +0200

dpkg (1.4.0.23.1) frozen unstable; urgency=low

  * No real changes, only a new version code to make this go to frozen too.

 -- Nils Rennebarth <nils@debian.org>  Wed, 10 Jun 1998 17:29:58 +0200

dpkg (1.4.0.23) frozen unstable; urgency=low

  * Non-maintainer bug-fix release
  * Update the disk method to the hamm directory structure (Bug#21000)

 -- Nils Rennebarth <nils@debian.org>  Sun,  7 Jun 1998 19:14:51 +0200

dpkg (1.4.0.22) frozen unstable; urgency=medium

  * Non-maintainer bug-fix release
  * Install main changelog file as `changelog.gz' instead of
    `changelog.dpkg.gz' (Debian Policy, section 5.8) (Bug#6052,15157)
  * Avoid use of /tmp/*.$$ in preinst and postinst (Bug#19712)
  * Make sure diversions file is always created with mode 0644 (Bug#19494)
  * When removing a file, chmod it to 000 if it's a char or block
    device or remove its s[ug]id bits, if any (Bug#6006)
  * Minor fixes in the programmer's manual (Bug#6206)
  * Always create readable status and available files
    (Bug#9869,11887,14636,15786,19146)
  * Make dpkg-gencontrol honour -DArchtecture=xxxx (Bug#9893)
  * Allow different archs for the same binary in debian/files (Bug#9894)
  * Added workaround in /usr/lib/dpkg/methods/disk/setup
    to avoid bash warning (Bug#10111,10131)
  * Recognize old .deb packages with other locales (Bug#12232)
  * Added `SHELL=bash' to debian/rules: it uses bash-specific structs
  * Move some files from dpkg to dpkg-dev (part of Bug#13295)
  * Minor fix in packaging manual regarding to Standards-Version (Bug#14696)
  * Fixed --altdir and --admindir in update-alternatives (Bug#15332)
  * Strip /usr/lib/libdpkg* (Bug#15671)
  * dpkg: send output of --help, --force-help and -Dhelp to stdout
    (Bug#16051,18574)
  * send correct signals with start-stop-daemon (Bug#17258)
  * Make `dpkg-divert --test --remove' work as expected (Bug#19531)
  * Determine properly the architecture if gcc is egcs (Bug#20353)

 -- Juan Cespedes <cespedes@debian.org>  Sun,  5 Apr 1998 17:37:01 +0200

dpkg (1.4.0.21) unstable; urgency=low

  * Non-maintainer release to include a new update-rc.d
  * Fixed date on files in the archive from 2017 and 2018 by running
    touch foo; find . -newer foo | xargs -r touch; rm foo
  * Changed start-stop-deamon message "No <program> found; none killed." to
    "No <program> found running; none killed."

 -- Miquel van Smoorenburg <miquels@cistron.nl>  Thu,  5 Mar 1998 14:19:46 +0100

dpkg (1.4.0.20) unstable; urgency=low

  * Disabled --force-overwrites.
  * Removed core file from source

 -- Michael Alan Dorman <mdorman@debian.org>  Tue,  9 Jan 1998 03:34:28 -0500

dpkg (1.4.0.19) unstable; urgency=low

  * Changed methods/disk.setup to use output of
    'dpkg --print-installation-architecture' instead of hard-coded 
    '1386' (fixes #10995).
  * Patched dpkg-source to properly quote metacharacters in strings 
    before using them in pattern-matching expressions (fixes #10811).
  * Fixed several documentation typos (fixes #10764).
  * dpkg-source now works around 100-character filename limitation of cpio
    (fixes #10400).
  * dpkg-source now properly handles '\ no newline in source' message from
    patch (fixes #5041).
  
 -- Klee Dienes <klee@debian.org>  Sun, 13 Jul 1997 19:28:22 -0700

dpkg (1.4.0.18) unstable; urgency=low

  * dpkg-source now uses new -z option to GNU patch (still needs to be
    changed to detect and use old version as well) (fixes #9904, #10005, #10007).
  * Added i686 to archtable.
  * shlibs.default now uses xlib6 instead of elf-x11r6lib (fixes #9926).
  * debian-changelog-mode now uses interruptible completing type-in fields
    instead of the previous 'select-a-letter method'.  I consider this
    better and more standard than the previous way, but I'd welcome
    opinions to the contrary.  Consider this a 'probationary' change for
    now (fixes #9873, #9874).

 -- Klee Dienes <klee@debian.org>  Sun, 25 May 1997 09:56:08 -0400

dpkg (1.4.0.17) unstable; urgency=low

  * All of the dpkg binaries (but not dpkg-dev or dselect) now speak
    french, thanks to patches from Christophe Le Bars <clebars@teaser.fr>
  * Fix leading spaces before day in 822-date.
  * Changes from Tom Lees <tom@lpsg.demon.co.uk> to better support
    building on non-Debian systems; minor Makefile fixes.
  * Added 'ppc powerpc powerpc' to archtable.
  * Changed documentation paper size to US/Letter instead of A4 (A4
    may be better, but it's easier to print US/Letter on A4 than it is 
    to print A4 on US/Letter).
  
 -- Klee Dienes <klee@debian.org>  Tue,  13 May 1997 15:24:31 -0400

dpkg (1.4.0.16) experimental; urgency=low

  * Added generated sources to GNU-format source archive so it no longer
    requires perl to build.

 -- Klee Dienes <klee@debian.org>  Sat, 10 May 1997 17:34:29 -0400

dpkg (1.4.0.15) experimental; urgency=low

  * Changed dpkg-genchanges to check for ($arch == $substvar{'Arch'}), not
    ($arch ne 'all') (fixes #9688).
  * Fixed bug in start-stop-daemon.c (was using optarg after argument
    parsing was over) (fixes #9597, #9603, #9364).
  * Provide 50dpkg-dev.el for xemacs as well as emacs.
  * Explicitly provide path for debian-changelog-mode in 50dpkg-dev to use
    .el file as workaround until xemacs can read emacs19 .elc files.
  * Pass top_distdir explicitly to 'make dist' to accommodate bug in
    automake_1.1o-1.
  * Fix debian/build to make html documentation without including
    directories in tar archives (fixes #9348).
  
 -- Klee Dienes <klee@debian.org>  Fri,  9 May 1997 13:17:18 -0400

dpkg (1.4.0.14) experimental; urgency=low

  * Fixed buglet in install-info.pl (fixes #9438).
  * Re-write of update-rc.d.pl, primarily by Miquel van Smoorenburg
    <miquels@cistron.nl> (fixes #9434, #9436).
  * Renamed "dpkg Programmer's Manual" to "dpkg Internals Manual".
  
 -- Klee Dienes <klee@debian.org>  Tue,  6 May 1997 22:01:07 -0400

dpkg (1.4.0.13) experimental; urgency=low

  * Fix to start-stop-daemon so that it still takes numeric arguments (had
    been broken in 1.4.0.12) (fixes #9598).
  * Fix 822-date to sanity-check localtime() output (seconds must be the
    same as GMT).
  * Patch from Guy Maor <maor@ece.utexas.edu> to dpkg-source.pl to support
    pristine (MD5-equivalent) upstream sources.
  * Patch from Michael Alan Dorman <mdorman@calder.med.miami.edu> to
    update-rc.d.pl to fix handling multiple start/stop entries on a single
    line.
  * Several fixes to dpkg-genchanges to support -B option (added in
    1.4.0.12) (fixes #9340).
  * Handle errors from 822-date in debian-changelog-mode.el.
  * Changed cl-debian.pl to correctly handle extra whitespace in changelog
    datestamps.

 -- Klee Dienes <klee@debian.org>  Mon,  5 May 1997 18:12:43 -0400

dpkg (1.4.0.12) experimental; urgency=low

  * Re-wrote 822-date for clarity and to support timezone offsets >= 12h
    (New Zealand in DST is +1300, for example) (fixes #7130).
  * Patch from Juergen Menden <menden@morgana.camelot.de> to support
    archdependent-only builds (fixes #8912, #9245, #5359).
  * Fix archtable entry for powerpc (fixes #8794).
  * Strip /sbin/* and /usr/sbin/* in debian/rules (fixes #8853).
  * Moved start-stop-daemon to /sbin (fixes #8669).
  * Set sharedstatedir and localstatedir for $(MAKE) install in
    debian/rules (fixes #8852).
  * Fixes for update-rc.d(8) from Jim Van Zandt <jrv@vanzandt.mv.com>
    (fixes #8576).
  * No longer do variable substitutions when generating change file (fixes
    #5862).
  * Support symbolic signal names in start-stop-daemon (fixes #7715).
  * Add autoload for debian-changelog-mode to /etc/emacs/site-start.d
    (fixes #4519, #5841).
  * Add recommendation for gcc and make in dpkg-dev (gcc is needed for dpkg
    --print-architecture, used by dpkg-gencontrol; make is needed for any
    debian/rules file) (fixes #8470).
  * Minor changes to packaging manual section on source package
    conversion (fixes #6801).
  * Renamed "programmer's manual" to 'packaging manual'.
  * Start of new "programmer's manual" containing information on dpkg
    internals and build information.  This manual uses the new
    TeXinfo-SGML format, currently included in doc/.
  * dselect/pkgdepcon.cc now checks for debug not NULL, not just depdebug.
  * Changed makefiles to support building outside of source directory.
  * Include GNU-format source distribution with other non-debian packages.

 -- Klee Dienes <klee@debian.org>  Sun,  4 May 1997 11:08:19 -0500

dpkg (1.4.0.11) experimental; urgency=low

  * Patches for alpha and libc6 from Michael Alan Dorman
    <mdorman@calder.med.miami.edu>.
  * Fixed minor problems in dpkg-shlibdeps regular expressions for libc6.
  * Fix regex to detect directory creation in dpkg-source.pl.
  * Minor changes for automake-1.1n.

 -- Klee Dienes <klee@debian.org>  Sun, 23 Mar 1997 18:09:33 -0500

dpkg (1.4.0.10) unstable; urgency=medium

  * Fixed bug in controllib.pl (@fowner was entire passwd entry,
    not just [uid, gid] as it should have been).

 -- Klee Dienes <klee@debian.org>  Thu, 20 Mar 1997 13:06:52 -0500

dpkg (1.4.0.9) unstable; urgency=low

  * Check fputs() return values for (ret >= 0), not (ret != 0) (fixes #7522).
  * dpkg-shlibdeps no longer gives error for Java and statically linked
    binaries (fixes #4988).
  * Change 'details of the old format' to 'details of the new format' in
    deb-old.5 (fixes #7605).
  * dpkg-source -b now warns (was previously silent) if maintainer changes
    create new subdirectories.  dpkg-source -x now warns (previously gave
    error) if maintainer changes create new subdirectories (partially
    fixes #6866, #6671, #5045, #6482).    
  * Added manual page for start-stop-daemon (8). 
  * Added C version of start-stop-daemon by 
    Marek Michalkiewicz <marekm@i17linuxb.ists.pwr.wroc.pl> (fixes #1670).
  * Converted to use GNU automake for the build process by Tom Lees 
    <tom@lpsg.demon.co.uk>.<
  * Preliminary support for dpkg functions as a shared library (now
    provides libdpkg.so, but much work needs to be done in better
    segregating and defining the interface).
  * Preliminary internationalization support by Galen Hazelwood
    <galenh@debian.org>.  Only the library, dpkg-deb, md5sum, and dpkg
    have been converted so far.  No translations have yet been
    constructed.
  * Handle 'libc.so.6 => /lib/libc.so.6 (0x40010000)' format from libc6
    ldd (fixes #7603, #7926, #8688, #9179, #9134, #8516).
  * Removed policy.sgml (it has been moved to the debian-policy package).
  * Include patch from Darren Stalder <torin@daft.com> for
    dpkg-buildpackage to choose PGP key based on Maintainer: field of 
    package being built (or -m<maintainer> option, if present) (fixes 
    #7898).
  * Changed controllib.pl to use $ENV{LOGNAME}, getlogin(), and $<
    (in that order) to determine the intended ownership of 
    debian/{files,substvars},  (fixes #7324, #6823, #5659, #5965, #5929,
    #9239, #5366).
  * Don't sign .dsc file in dpkg-buildpackage if building a binary-only
    release (fixes #7260).
  * Updated developer-keys.pgp to latest revision (fixes #6134).
  
 -- Klee Dienes <klee@debian.org>  Mon, 17 Mar 1997 16:11:24 -0500

dpkg (1.4.0.8) unstable; urgency=medium

  * Corrected update-rc.d for bash 2.0
  * Updated developer-keys.pgp from
    http://www.iki.fi/liw/debian/debian-keyring.tar.gz

 -- Guy Maor <maor@ece.utexas.edu>  Mon, 3 Feb 1997 04:05:01 -0600

dpkg (1.4.0.7) stable unstable; urgency=HIGH

  * Fixed --assert-support-predepends failing between unpack & configure.
  * Added --assert-working-epoch option.

 -- Guy Maor <maor@ece.utexas.edu>  Sat, 25 Jan 1997 23:02:11 -0600

dpkg (1.4.0.6) stable unstable; urgency=high

  * Patched lib/vercmp.c to hopefully fix dselect epoch processing
    (Bug#6204), (Bug#4590).
  * Patched scripts/dpkg-buildpackage, scripts/dpkg-genchanges,
    scripts/dpkg-gencontrol for epoch processing, courtesy of Loic Prylli 
    <lprylli@graville.fdn.fr> (Bug#6138, Bug#5225).
  * Patched dpkg-genchanges to actually honor the -u switch to specify
    directory (Bug#5564).
  * Applied patch to main/archive.c to correct problems setting set[gu]id
    binaries, courtesy of Herbert Xu <herbert@greathan.apana.org.au>
    (Bug#5479). 
  * Applied patch to dpkg-source to correct debian-only package names,
    courtesy of Guy Maor <maor@ece.utexas.edu> (Bug#5355).

 -- Michael Alan Dorman <mdorman@calder.med.miami.edu>  Thu, 2 Jan 1997 11:36:09 -0500

dpkg (1.4.0.5) stable frozen unstable; urgency=medium

  * Distribution for frozen too.

 -- Heiko Schlittermann <heiko@lotte.sax.de>  Thu, 5 Dec 1996 09:13:42 +0100

dpkg (1.4.0.4) stable unstable; urgency=medium

  * Bug2962 fixed: patch from Ian Jackson applied
    (cursor keys won't work after search)
  * Manuals 2.1.2.2

 -- Heiko Schlittermann <heiko@lotte.sax.de>  Fri, 15 Nov 1996 20:21:18 +0100

dpkg (1.4.0.3) unstable; urgency=medium

  * dpkg-source -x: created bad permissions (set x-bit for
    all files pointed to by a symlink)

 -- Heiko Schlittermann <heiko@lotte.sax.de>  Fri, 18 Oct 1996 18:32:06 +0200

dpkg (1.4.0.2) unstable; urgency=medium

  * dpkg-buildpackage.sh: reverted the quoting change -- (you
    should use super, sudo, really, but not su.  Or write a wrapper
    around su)
  * dpkg-buildpackge.sh: passing -m, -C, -v options to dpkg-genchanges
    more the way Ian likes ;-)
  * dpkg-source.pl: new function deoctify() as replacement for eval()
    (turn \ddd into the corresponding character) [rem: probably better
    solution would be to convert cpios output names into complete \ddd 
    representation as well tars output names] 
  * dpkg-source.pl: fixed 2 typos in failure message on creating 
    $origtargz.tmp-nest.
  * main/main.c: typo `tread' -> `treat'
  * main/enquiry.c: fixed the ignorance for some relations in --compare-versions
  * main/enquiry.c: missing version is now handled as described in `dpkg --help'
    (or at least as I understood `dpkg --help' PLEASE TRY IT)
  * lib/parsehelp.c: fixed parsing of epoch information

 -- Heiko Schlittermann <heiko@lotte.sax.de>  Sun, 6 Oct 1996 23:27:47 +0200

dpkg (1.4.0.1) unstable; urgency=medium

  * dpkg-source: doesn't get screwed up from hardlinks
    in the archive now
  * dpkg-source: doesn't get screwed up from `unprintable' characters
    in file names (e.g. from the kbd package) 
  * controllib.pl: $varlistvile -> $varlistfile (thanx Karl Sackett)
  * dpkg-buildpackge: quoting for $rootcommand (thanx  Michael Meskes)
    and `eval' as default $rootcommand
  * dpkg-*, controllib.pl: created debian/files and debian/substvars
    are chown'ed to `getlogin()' and its group
  * doc/: mv changed to mv -f
  * dpkg-buildpackage: added an option -a for overriding the
    architecture in the changes _file_name_
  * dpkg-buildpackage: pass -m* -v* .. options to dpgk-genchangelog
  * dpkg-name moved to dpkg-dev

 -- Heiko Schlittermann <heiko@lotte.sax.de>  Sat, 21 Sep 1996 22:06:01 +0200

dpkg (1.4.0) unstable; urgency=low (HIGH for new source format)

  * Corrected buffer overrun when dpkg-deb generates filename.  (Bug#4467.)
  * dpkg-shlibdeps works with DEBIAN/shlibs (thanks Heiko Schlittermann).
  * Added libm.so.5 to shlibs.default for i386/m68k.

  * Split binary package into two: dpkg and dpkg-dev.
  * dpkg-source(1) documents mode and ownership setting during extraction.

  * dpkg-scanpackages moved to /usr/bin.
  * Include /usr/bin/dpkg-deb, not dpkg-deb.dist; don't rename in scripts.
  * Copyright file changed slightly.
  * debian-changelog-mode uses magic key substitution strings.  (Bug#4419.)
  * Changed email address in control file to <ian@chiark.greenend.org.uk>.
  * Manuals and own Standards-Version: updated to 2.1.1.0.

 -- Ian Jackson <ian@chiark.greenend.org.uk>  Thu, 12 Sep 1996 01:13:33 +0100

dpkg (1.3.14) unstable; urgency=low

  * dpkg-buildpackage new -tc (clean source tree) option.

  * Formatted documentation removed by `make clean' and so not in source.
  * Manuals and own Standards-Version: updated to 2.1.0.0.
  * Distribute {policy,programmer}.{html.tar,ps}.gz with each upload.

 -- Ian Jackson <ian@chiark.chu.cam.ac.uk>  Sun, 1 Sep 1996 20:43:40 +0100

dpkg (1.3.13) unstable; urgency=low (HIGH for building new src X programs)

  * X shared libraries added to shlibs.default (=> `elf-x11r6lib').
  * dpkg-source tar invocation fixed so that TAPE env var doesn't break it.
  * dpkg-source copes better with missing final newline messages from diff.

  * dpkg-buildpackage usage message fixed: -si is the default.  (Bug#4350.)
  * dpkg-source error message about src dir mismatch typo fixed.  (Bug#4349.)

  * dpkg-source(1) has suggestions for dpkg-buildpackage -r option.
  * dpkg-source change date fixed.  (Bug#4351.)
  * More developers' keys.
  * Manual updates, own Standards-Version updated.

 -- Ian Jackson <ian@chiark.chu.cam.ac.uk>  Sat, 31 Aug 1996 20:08:18 +0100

dpkg (1.3.12) unstable; urgency=medium

  * dpkg prints old version number when upgrading.  (Bug#4340.)
  * dpkg-deb tries to detect and flag corruption by ASCII download.

  * dpkg-genchanges and dpkg-buildpackage say what source is included.

  * dpkg-buildpackage passes +clearsig=on to PGP (or pgpcommand).  (Bug#4342.)

  * dpkg-source prints better error for cpio not honouring -0t.
  * control file Suggests cpio >= 2.4.2, rather than just cpio.

 -- Ian Jackson <ian@chiark.chu.cam.ac.uk>  Fri, 30 Aug 1996 15:31:51 +0100

dpkg (1.3.11) unstable; urgency=low

  * EBUSY when dpkg removes a directory is only a warning.

  * dpkg-genchanges generates sensible warning (not confusing error
    about mismatch) for missing Section/Priority in binary packages.

  * Added dpkg --print-gnu-build-architecture option.
  * shlibs.default for m68k provided, as a copy of i386 version.

 -- Ian Jackson <ian@chiark.chu.cam.ac.uk>  Thu, 29 Aug 1996 14:05:02 +0100

dpkg (1.3.10) unstable; urgency=medium

  * dpkg-source(1) manpage alias symlinks are not dangling.
  * dselect selects things by default if they are installed.
  * Added `pentium' as alias for `i386' architecture.
  * Added `Suggests: cpio, patch' and explanatory text to Description.
    (Bugs #4262, #4263.)

  * More developers' PGP keys.
  * Manual updates, new source format released.

 -- Ian Jackson <ian@chiark.chu.cam.ac.uk>  Mon, 26 Aug 1996 14:30:44 +0100

dpkg (1.3.9) unstable; urgency=low (high for new source format)

  * dpkg --get-selections and --set-selections added.
  * New dpkg --force-not-root flag.

  * Don't replace directory with another package's file.  (Bug#4202.)

  * All manpages now installed compressed.
  * Copyright file moved to /usr/doc/dpkg/copyright.
  * Standards-Version updated (0.2.1.1).

 -- Ian Jackson <ian@chiark.chu.cam.ac.uk>  Sat, 24 Aug 1996 19:09:30 +0100

dpkg (1.3.8) unstable; urgency=low (high for new source format)

  * dpkg-buildpackage -sa, -si options work correctly.

  * update-rc.d(8) updated to reflect design and reality.
  * Programmers' and policy manual updates.

 -- Ian Jackson <ian@chiark.chu.cam.ac.uk>  Fri, 23 Aug 1996 12:48:26 +0100

dpkg (1.3.7) unstable; urgency=low (medium for source pkg docs)

  * dselect +/-/_/= on lines for all broken, new, local or whatever
    packages do not affect _all_ packages.  (Bug#4129.)

  * Support for diff-only uploads in source packaging tools.
  * dpkg-genchanges -d<descripfile> option renamed to -C.
  * dpkg-buildpackage understands -m, -v, -C (for dpkg-genchanges).
  * Support for debian/shlibs.local added to dpkg-shlibdeps.
  * Shared library files' search order defined in dpkg-source(1), and
    relevant files added to the FILES section.

  * Programmers' manual describes source packaging tools.
  * Policy manual mentions shared library control area file.
  * dpkg-source manpage includes dpkg-shlibdeps in title line.
  * Manuals have changelog and automatic version numbering.
  * changelogs (for dpkg and for manuals) installed.
  * binary target split into binary-arch and binary-indep in manual.
  * Manpages should be compressed.
  * Copyright file is moved to /usr/doc/<package>/copyright.
  * Changelogs must be installed in /usr/doc/<package>.
  
  * dpkg-deb(8) moved to dpkg-deb(1).

  * binary target split into binary-arch and binary-indep in source.
  * changelog entry for 1.2.14 copied from that (forked) release.

 -- Ian Jackson <ian@chiark.chu.cam.ac.uk>  Thu, 22 Aug 1996 15:36:12 +0100

dpkg (1.3.6) experimental; urgency=low (HIGH for new source format)

  * dpkg-source now has broken argument unparsing for tar.  (Bug#4195.)

  * dpkg-gencontrol writes to debian/tmp/DEBIAN/control by default.
  * dpkg-shlibdeps script added.

  * Back to old sh update-rc.d, and removed manpage, because new Perl
    version and the manpage have different syntax and semantics.
  * update-rc.d prints usage message for missing terminal `.'.  (Bug#4122.)

  * Use rm -rf instead of just rm -r in dpkg-deb --info &c.  (Bug#4200.)

  * Added support for Installed-Size to dpkg-gencontrol, and documented.
  * Source packaging substitution variables and name syntax rationalised.
  * dpkg-source scripts' usage messages improved slightly.
  * dpkg-source works with non-empty second (orig dir) argument.

  * Added rationale for copyright policy to manual.
  * More developers' PGP keys.
  * Control database handling cleanups (usu. Source field blanked).

 -- Ian Jackson <ian@chiark.chu.cam.ac.uk>  Tue, 20 Aug 1996 15:39:58 +0100

dpkg (1.3.5) experimental; urgency=low (high for debian-changelog-mode)

  * 822-date script included.  (Bug#4136.)
  * debian-changelog-add-version works on empty file.
  * debian-changelog-mode mode-help works properly.

  * dpkg-source tells patch not to make numbered backups.  (Bug#4135.)

  * More developers' PGP keys.
  * Paragraph on uucp -a and -g options removed from policy manual.

 -- Ian Jackson <ian@chiark.chu.cam.ac.uk>  Wed, 14 Aug 1996 14:46:47 +0100

dpkg (1.3.4) experimental; urgency=low

  * Removed debugging output from dpkg-source -x.  Oops.
  * Removed section on source package permissions from policy manual -
    dpkg-source now sorts these out.

 -- Ian Jackson <ian@chiark.chu.cam.ac.uk>  Sun, 11 Aug 1996 13:25:44 +0100

dpkg (1.3.3) experimental; urgency=low

  * Programmers' & policy manuals in source tree; HTML in /usr/doc/dpkg.
  * Old guidelines.info and text files in /usr/doc/dpkg removed.

  * dpkg-source sets permissions on extracted debianised source tree
    and does not copy ownerships out of archive even if running as root.

  * Emacs mode `dpkg changelog' renamed to `Debian changelog'.
  * Default changelog format renamed from `dpkg' to `debian'.

  * debian-changelog-mode sets fill-prefix correctly.
  * debian-changelog-mode urgencies except HIGH lowercase by default.
  * debian-changelog-mode displays keymap in doc string and so mode help.

  * More maintainers' PGP keys.

  * Remove built changelog parsers with `clean' target in source.

 -- Ian Jackson <ian@chiark.chu.cam.ac.uk>  Sat, 10 Aug 1996 23:35:51 +0100

dpkg (1.3.2) experimental; urgency=LOW (MEDIUM for dpkg-source)

  * Faster update-rc.d written in Perl by Miquel van Smoorenburg.
  * install-info --test doesn't lock dir.  (Bug#3992, thanks Darren).

  * dpkg-source doesn't break in the presence of any symlinks.

  * More developers' keys added to doc/developer-keys.pgp.
  * Install developers' keys in /usr/doc/dpkg/developer-keys.pgp.
  * dpkg-source documents undefined substvar behaviour.
  * minor debian/rules cleanups.

 -- Ian Jackson <ian@chiark.chu.cam.ac.uk>  Sat, 10 Aug 1996 02:13:47 +0100

dpkg (1.3.1) experimental; urgency=LOW

  * manpage for dpkg-source et al now available.
  * dpkg-changelog-mode.el installed in site-lisp, but still no autoload.

  * dpkg-source prints correct string for not-understood tar -vvt output.
  * dpkg-source parsing of tar -vvt output made more robust.

  * dpkg-buildpackage prints usage message on usage error.
  * dpkg-gencontrol can print usage message.
  * -T<varlistfile> option added to dpkg-source.
  * Description of -f<fileslistfile> corrected in dpkg-distaddfile usage.
  * -m<maintainer> synopsis changed in dpkg-genchanges usage.
  * debian/substvars may now contain blank lines.

 -- Ian Jackson <ian@chiark.chu.cam.ac.uk>  Thu, 8 Aug 1996 02:36:04 +0100

dpkg (1.3.0) experimental; urgency=LOW

  * dpkg can install named pipes.
  * dpkg-deb supports directory for destination, generates filename.
  * dpkg-{source,gencontrol,genchanges,parsechangelog,buildpackage},
    dpkg-distaddfile scripts to support new source package format.
  * a.out build no longer supported.
  * Changed to new source package format.

 -- Ian Jackson <ian@chiark.chu.cam.ac.uk>  Tue, 6 Aug 1996 02:31:52 +0100


dpkg (1.2.14) stable unstable; urgency=MEDIUM

  * dselect +/-/_/= on lines for all broken, new, local or whatever
    packages do not affect _all_ packages.  (Bug#4129.)

  * NOTE - THE HISTORY FORKS HERE.  1.2.14's change appears in 1.3.7.

 -- Ian Jackson <ian@chiark.chu.cam.ac.uk>  Thu, 22 Aug 1996 00:39:52 +0100


dpkg (1.2.13) unstable; urgency=LOW

  * dpkg --search produces correct output for diversions.
  * dpkg-name remove unnecessary arch missing warning.  (Bug#3482.)

  * dpkg-deb --build warns about uppercase chars in package name.

  * dpkg-scanpackages error messages updated and manpage provided
    (thanks to Michael Shields).
  * dpkg-scanpackages warns about spurious entries in override file.
  * dpkg-scanpackages `noverride' renamed to `override' everywhere.
  * dpkg-scanpackages field ordering to put Architecture higher.
  * dpkg-scanpackages field names capitalised appropriately.
  * dpkg-scanpackages invokes find with -follow.  (Bug#3956.)

  * guidelines say #!/usr/bin/perl everywhere, not #!/bin/perl.
  * Many developers' PGP keys added.

  * configure script uses ${CC} instead of $(CC) (again :-/).
  * developers' keys included in dpkg source tree and /usr/doc.
  * configure remade using autoconf 2.10-3 (was 2.4-1).

 -- Ian Jackson <ian@chiark.chu.cam.ac.uk>  Thu, 1 Aug 1996 02:46:34 +0100

dpkg (1.2.12); priority=LOW

  * dpkg --search and --list understand and comment on diversions.
  * dpkg-divert displays diversions more intelligibly.

  * Guidelines are somewhat clearer about descriptions.
  * deb(5) describes new format; old moved to deb-old(5).  (Bug#3435.)
  * deb-control(5) carries a warning about being out of date.

  * Added 1996 to dselect version/copyright.

 -- Ian Jackson <ian@chiark.chu.cam.ac.uk>  Thu, 4 Jul 1996 15:04:49 +0100

dpkg (1.2.11); priority=MEDIUM

  * dselect had dependency bug if installed package newer than avail.
  * Added `replaces' to dselect's list of package relationship strings.

 -- Ian Jackson <ian@chiark.chu.cam.ac.uk>  Mon, 1 Jul 1996 02:51:11 +0100

dpkg (1.2.10); priority=MEDIUM

  * Fixed bug in old-style version/revision number parsing.  (Bug#3440.)

 -- Ian Jackson <ian@chiark.chu.cam.ac.uk>  Sat, 29 Jun 1996 03:32:45 +0100

dpkg (1.2.9); priority=MEDIUM

  * Fixed status database updates reading bug.
  * `Setting up' message includes version number.
  * `existence check' message changed to say `cannot access archive'.

 -- Ian Jackson <ian@chiark.chu.cam.ac.uk>  Thu, 27 Jun 1996 13:39:36 +0100

dpkg (1.2.8); priority=LOW

  * dpkg --record-avail puts data in Size field.
  * strip / for rmdir(2) in cleanup to work around kernel bug.  (Bug#3275.)
  * dpkg-split --msdos no longer allows `-' and other chars in filenames.

  * manual dpkg-split(8) written.
  * dpkg-split minor typo in --auto usage error message fixed.
  * dpkg-deb(8) very minor cosmetic fix to --build option.

 -- Ian Jackson <ian@chiark.chu.cam.ac.uk>  Tue, 25 Jun 1996 03:00:14 +0100

dpkg (1.2.7); priority=LOW

  * dpkg-scanpackages syntax errors fixed.

 -- Ian Jackson <ian@chiark.chu.cam.ac.uk>  Fri, 21 Jun 1996 04:10:38 +0100

dpkg (1.2.6); priority=MEDIUM

  * NFS, CDROM and partition dselect methods include mountpoint
    in paths given to dpkg in [I]install, so they should now work.

  * Removed some leftover files from source tree.

 -- Ian Jackson <ian@chiark.chu.cam.ac.uk>  Wed, 12 Jun 1996 14:35:19 +0100

dpkg (1.2.5); priority=MEDIUM

  * Allow, but do not create, packages in half-installed state
    with no version number.  (Aargh.)

 -- Ian Jackson <ian@chiark.chu.cam.ac.uk>  Mon, 10 Jun 1996 04:55:43 +0100

dpkg (1.2.4); priority=MEDIUM

  * New dpkg-name from Erick (<pkg>_<version>_<arch>.deb convention).
  * Disappeared packages can't own conffiles any more !  (Bug#3214.)
  * install-info creates Miscellaneous sections with a newline
    following the heading.  (Bug#3218.)
  * cleanup-info script installed in /usr/sbin; called as appropriate
    by postinst.  Thanks to Kim-Minh Kaplan.  (Bug#3125.)
  * Allow superseded Essential packages to be purged after they've
    been removed (clear the Essential flag on removal, and ignore it
    on packages that are in stat_configfiles).

  * dselect disk methods understand `y' as well as `yes' for using
    development tree.
  * dselect doesn't make packages appear as `new' again if update
    of available packages fails.
  * dselect places method selection cursor over option last selected.

  * dpkg-scanpackages doesn't die when repeated packages are found.
  * dpkg-scanpackages allows many old maintainers (`//'-separated).

  * `Version' field is now mandatory (some operations already
    wouldn't work right anyway if it was't there).

  * update-rc.d(8) now says you must remove the script.  (Bug#3215.)
  * dpkg --force-help says that --force-overwrite is on by default.
  * dpkg-deb manpage rewritten.
  * debian.README (= /usr/doc/copyright/dpkg) edited slightly.

  * Some database parsing grunge removed (pdb_preferversion, &c).
  * Source tree doc/sgml contains some embryonic manuals.
  * Leftover files in lib directory in source tree deleted.

 -- Ian Jackson <ian@chiark.chu.cam.ac.uk>  Mon, 10 Jun 1996 03:52:01 +0100

dpkg (1.2.3); priority=HIGH

  * install-info doesn't replicate section headings (Bug#3125, #2973).
  * New dpkg-name manpage broken off from script (oops!).
  * dselect help screens made consistent with new strings, flags, &c.
  * dselect error flag column labelled E (Error), not H (Hold).
  * `Escape' no longer bound to `exit list without saving' in dselect.

 -- Ian Jackson <ian@chiark.chu.cam.ac.uk>  Tue, 28 May 1996 02:14:57 +0100

dpkg (1.2.2); priority=MEDIUM

  * Fixed dselect coredump found by Erick Branderhorst (thanks).
  * Sort obsolete removed packages separately, not under Available.

 -- Ian Jackson <ian@chiark.chu.cam.ac.uk>  Thu, 23 May 1996 21:31:05 +0100

dpkg (1.2.1); priority=MEDIUM

  * `=' key in dselect really does `hold' rather than `unhold'.
  * dselect dependency processing now interacts better with `hold'.
  * dselect `I' key (not `i') modifies display of the info window.
  * dselect shows unavailable packages as being unavailable.
  * dselect main menu headings and many other strings changed to try to
    discourage people from deselecting every package and using [R]emove.
    Notably, `select' changed to `mark' throughout.

  * dselect disk methods now print a few fewer double slashes.
  * dselect disk access methods will offer to use dpkg --record-avail
    to scan the available packages, if no Packages file is found.

  * New dpkg --compare-versions option, for the benefit of scripts &c.
  * New dpkg --clear-avail option forgets all available packages info.
  * New dpkg --print-avail option, prints `available' data (from Packages, &c).
  * dpkg usage message is more informative, but no longer fits on screen.
  * dpkg --avail option renamed --record-avail.

  * Latest dpkg-name from Erick Branderhorst.
  * dpkg-scanpackages has more sensible problem reporting.
  * postinst configure now gets null argument (not <unknown> or <none>)
    when there is no previously configured version.

  * Guidelines say that postinst configure is given previous version.
  * Guidelines don't refer to maintainer-script-args.txt in main text.
  * Guidelines (Texinfo source) uploaded separately.

  * Own version of strcpy (used for debugging) removed.
  * Interface to access methods document in source (doc/dselect-methods.txt).
  * debian.buildscript moves changes file into parent directory.

 -- Ian Jackson <ian@chiark.chu.cam.ac.uk>  Wed, 22 May 1996 01:26:31 +0100

dpkg (1.2.0); priority=MEDIUM

  * dselect can sort packages by available and installed states, and
    display their version numbers.  (Use O, o and V.)
  * Hold is properly integrated as a real `wanted state', rather than
    a separate flag.
  * Epochs in version numbers implemented, using the syntax
    <epoch>:<version>-<revision>.  (Epoch not usually displayed.)
  * dselect disk method is architecture-independent (uses dpkg's
    installation architecture, and looks in the right part of the tree).

  * dselect disk method doesn't try to satisfy the predependencies of
    packages which are on hold.
  * Fixed conflict-related assertion failure.  (Bug#2784.)
  * conffiles do not cause file conflicts if the conflicting package
    is in the `configuration only' state.  (Bug#2720.)
  * Fixed messages where available version number was reported as installed
    version in conflict and dependency messages.  (Bug#2654, Bug#2974.)

  * New format .deb files are default even for a.out compiles (but
    a.out version of dpkg is in old format).
  * Characters @:= (at colon equals) in package names now strictly
    forbidden everywhere (_ is still allowed in existing packages).
  * New dpkg --print-installation-architecture option prints installation
    architecture (compiled in), rather than build architecture (determined
    from gcc -print-libgcc-file-name).

  * Version messages show whether compiled a.out or ELF (i386 only).
  * Fixed missing space in version syntax error messages.
  * Manpage dpkg.8 installed with warning about inaccuracy.

  * Guidelines don't say to stop and restart daemons in runlevels 2345;
    instead they say to start in 2345 and stop in 016.
  * Guidelines and version messages say just Debian Linux.
  * Guidelines typo fix `"stop2' => `"stop"'.  (Bug#2867.)

  * doc/Makefile.in clean properly deletes various guidelines.info* files.

 -- Ian Jackson <ian@chiark.chu.cam.ac.uk>  Thu, 16 May 1996 00:01:21 +0100

dpkg (1.1.6); priority=MEDIUM

  * Check virtual dependencies when removing (ouch! - thanks SDE.)
  * Fixed bug in internal database validity management that could
    make dselect and dpkg dump core.  (Bug#2613.)
  * Fixed two coredumping bugs when using local diversions.  (Bug#2804.)
  * Fixed disappearance of overwritten packages.  (Bug#2696.)
  * install-info won't modify dir file before start of menu.
  * install-info will create Miscellaneous heading if no sections yet.

  * Only alphanums and +-. allowed in package names - enforced by
    dpkg-deb --build and documented in Guidelines.
  * dselect doesn't display packages unless they are installed, selected
    or available.
  * dselect doesn't show spurious section and priority headings.
  * dselect has a few extra keybindings (from Lee Olds).
  * --force message changed to `--force enabled' so that default is OK.

  * dpkg-name now includes architecture component in .deb filename,
    and translates - in package name to _.
  * .deb file has architecture component in filename.

  * Guidelines changed to say Pre-Depends is for experts only.
  * Guidelines say to provide a unidiff (-u) rather than an old context diff.
  * Guidelines say 755 root.root for shared libraries.

 -- Ian Jackson <ian@chiark.chu.cam.ac.uk>  Wed, 1 May 1996 00:47:22 +0100

dpkg (1.1.5); priority=MEDIUM (HIGH for diversions users)

  * Fixed coredump when using diversions.  (Bug#2603.)
  * Fixed typo in dpkg-divert which could lose diversions.  (Bug#2662.)

  * --force-overwrite is the default.
  * diversions.text provides better examples.

 -- Ian Jackson <ian@chiark.chu.cam.ac.uk>  Wed, 10 Apr 1996 13:59:30 +0100

dpkg (1.1.4); priority=MEDIUM

  * Allow overwriting of conflicting packages being removed.  (Bug#2614.)

  * a.out control file says Pre-Depends: libc4 | libc.  (Bug#2640.)
  * ELF control file and libc dependencies changed to use finalised scheme.
  * ELF control file and libc dependencies for i386 only.  (Bug#2617.)

  * Guidelines say use only released libraries and compilers.
  * Install wishlist as /usr/doc/dpkg/WISHLIST.
  * Remove spurious entries for Guidelines in info dir file.

  * dpkg-deb --build checks permissions on control (DEBIAN) directory.

  * Spaces in control file fields not copied by dpkg-split.  (Bug#2633.)
  * Spaces in split file part control data ignore.  (Bug#2633.)

  * Portability fixes, including patch from Richard Kettlewell.
  * Fixed minor configure.in bug causing mangled GCC -W options.

 -- Ian Jackson <ian@chiark.chu.cam.ac.uk>  Thu, 4 Apr 1996 01:58:40 +0100

dpkg (1.1.3); priority=LOW

  * dselect disk methods support Pre-Depends installation ordering.
  * When dpkg fails and --auto-deconfigure would help it says so.
  * dpkg --search output lists several packages with same file on one line.
  * Improved dpkg usage message somewhat.

  * dpkg-deb --build checks permissions and types of maintainer scripts.
  * dpkg-deb --build treats misspecified conffiles as error, not warning.
  * dpkg --print-architecture prints compiler's architecture while
    dpkg --version (&c) print system's arch (this to help cross-compiling).
  * More minor guidelines changes, including dir entry fixup.

  * configure script caches more values.
  * Changed maintainer email address to ian@chiark.chu.cam.ac.uk.

 -- Ian Jackson <ian@chiark.chu.cam.ac.uk>  Sat, 16 Mar 1996 19:18:08 +0000

dpkg (1.1.2); priority=LOW

  * Packaging guidelines installed properly (and as guidelines
    rather than debian-guidelines).
  * ELF version has more checks to stop you wrecking your dpkg installation.
  * dselect disk methods now look for a `local' tree as well, for
    people who want locally-available software of various kinds.
  * dpkg-divert has debugging message removed.
  * Minor guidelines changes.

  * Various makefile cleanups, mainly to do with ELF vs. a.out support.
  * debian.rules cleans out ~ files itself, as well as calling make clean.
  * debian.rules names .nondebbin.tar.gz file ELF too, if appropriate.

 -- Ian Jackson <iwj10@cus.cam.ac.uk>  Thu, 14 Mar 1996 03:38:29 +0000

dpkg (1.1.1elf); priority=LOW

  * Added /usr/lib/dpkg/elf-executables-ok and elf-in-kernel.
  * Replaces field now allows automatic removal of conflicting packages.
  * Replaces field now required to overwrite other packages' files.
  * Architecture field, and dpkg --print-architecture, supported.
  * build new format archives by default when compiled with ELF compiler.

  * symlinks are now installed atomically (good for shared libraries).
  * create /var/lib/dpkg/diversions in postinst if necessary (Bug#2465.)
  * Pre-Depends now correctly fails if package never configured.
  * dselect disk methods mount with -o nosuid,nodev.
  * update-rc.d defaults doesn't add both K and S in any one runlevel;
    dpkg postinst fixes up this situation if it sees it.

  * Assorted fixups to the Guidelines, which are now in one piece.
  * dpkg --list prints version string in one piece.
  * dpkg-scanpackages doesn't produce notice on output with list of
    packages with Section and/or Priority control file fields.

  * control file and debian.rules work both for ELF and non-ELF compiles.
  * most files compiled with -O2 (-O3 only for some critical files) -
    this fixes ELF build.

 -- Ian Jackson <iwj10@cus.cam.ac.uk>  Mon, 11 Mar 1996 04:25:28 +0000

dpkg (1.1.0); priority=LOW

  * dpkg supports Pre-Depends.
  * postinst script gets most-recently-configured version as $2.

  * lib/tarfn.c #includes <errno.h> (portability fix).

 -- Ian Jackson <iwj10@cus.cam.ac.uk>  Sun, 11 Feb 1996 21:07:03 +0000

dpkg (1.0.17); priority=LOW

  * dpkg --recursive follows symlinks (useful for devel tree).

 -- Ian Jackson <iwj10@cus.cam.ac.uk>  Sat, 10 Feb 1996 15:58:46 +0000

dpkg (1.0.16); priority=LOW

  * dpkg-deb much faster reading new format archives.  (Bug#2256.)
  * Developers' documentation in /usr/doc/dpkg/, /usr/info/.

  * Fixed typo in control file Description.

  * configure script tries to improve matters wrt sysinfo.
  * any debian-tmp.deb is deleted by `./debian.rules clean'.

 -- Ian Jackson <iwj10@cus.cam.ac.uk>  Sun, 4 Feb 1996 15:51:59 +0000

dpkg (1.0.15); priority=LOW

  * dselect disk methods should never unmount things they didn't mount.
  * debian.README aka /usr/doc/copyright updated.

 -- Ian Jackson <iwj10@cus.cam.ac.uk>  Tue, 30 Jan 1996 15:05:39 +0000

dpkg (1.0.14); priority=MEDIUM

  * fixed file descriptor leak in dpkg introduced in 1.0.11.
  * included dpkg-name in this package (conflicts with dpkg-name).

  * redraw in dselect main menu changed to use clearok (like in lists).
  * sa_restorer in struct sigaction no longer used (portability fix).
  * removed Guidelines from source package.

 -- Ian Jackson <iwj10@cus.cam.ac.uk>  Tue, 30 Jan 1996 02:52:29 +0000

dpkg (1.0.13); priority=MEDIUM

  * dselect partition and mounted methods work again.
  * dpkg-deb --no-act in usage message.

 -- Ian Jackson <iwj10@cus.cam.ac.uk>  Fri, 26 Jan 1996 18:37:03 +0000

dpkg (1.0.12); priority=MEDIUM (HIGH for users of 1.0.11)

  * Fixed frequent dpkg coredump introduced in 1.0.11.  (Bug#2219.)
  * dpkg-deb ensures version numbers start with alphanumerics.

 -- Ian Jackson <iwj10@cus.cam.ac.uk>  Wed, 24 Jan 1996 00:42:31 +0000

dpkg (1.0.11); priority=MEDIUM

  * corrected potentially serious problem with dpkg low-memory in-core
    files database.
  * dpkg-split --msdos puts output files in right directory.  (Bug#2165.)

  * diversions implemented - see `dpkg-divert --help'.

  * dselect shows and uses (for dependencies) currently installed
    version of a package if that is more recent.
  * dpkg --force-... options are in separate help screen.
  * better error messages for corrupted .deb archives.  (Bug#2178.)
  * dselect NFS method will unmount correct copy of NFS area if mounted
    twice.

  * removes some ELF compilation warnings.

 -- Ian Jackson <iwj10@cus.cam.ac.uk>  Fri, 19 Jan 1996 02:41:46 +0000

dpkg (1.0.10); priority=MEDIUM

  * dpkg-deb option parsing unmuddled (-I option was removed
    in 1.0.9 and broke dpkg-deb).  (Bug#2124.)

  * dpkg-split will work when ELF `ar' is installed, and is faster.

  * nfs dselect method now available.
  * disk methods don't prompt spuriously for Packages files.
  * cdrom+harddisk methods can find Packages files.

  * dpkg-scanpackages (creates Packages files) now in /usr/sbin.

  * various changes to help compilation of dpkg-deb, dpkg-split
    and md5sum on non-Debian systems.
  * <sys/fcntl.h> replaced by <fcntl.h> throughout.

 -- Ian Jackson <iwj10@cus.cam.ac.uk>  Sun, 14 Jan 1996 02:55:19 +0000

dpkg (1.0.9); priority=MEDIUM

  * dselect uninitialised variable coredump fixed (thanks Carl).

  * version numbers printed by --version fixed.  (Bug#2115.)
  * disk method problem with missing Packages files fixed.  (Bug#2114.)
  * dependency version relationships now <= >= << >> =.  (Bug#2060.)

  * install-info is in /usr/sbin, not /usr/bin.  (Bug#1924.)
  * dpkg regards Revision field as obsolete.

  * <asm/unistd.h> changed to <linux/unistd.h> (for m68k port).
  * scripts/Makefile.in `clean' target deletes scripts.

 -- Ian Jackson <iwj10@cus.cam.ac.uk>  Thu, 11 Jan 1996 20:51:20 +0000

dpkg (1.0.8); priority=LOW

  * update-alternatives slightly more helpful message.  (Bug#1975.)
  * cosmetic improvements to disk installation method.  (Bug#1970,1956.)
  * mounted filesystem and unmounted partition separate methods.  (Bug#1957.)

 -- Ian Jackson <iwj10@cus.cam.ac.uk>  Tue, 12 Dec 1995 04:07:47 +0000

dpkg (1.0.7); priority=MEDIUM (HIGH to upgrade syslogd)

  * dselect harddisk/CDROM method script handles multiple package
    areas.
  * Everything has a manpage, though many are very unhelpful indeed.

 -- Ian Jackson <iwj10@cus.cam.ac.uk>  Thu, 30 Nov 1995 03:59:14 +0000

dpkg (1.0.6); priority=MEDIUM (HIGH to upgrade syslogd)

  * conffiles can now be taken over properly from one package by
    another which replaces it.  (Bug#1482.)
  * dpkg will not deconfigure essential packages when --auto-deconfigure
    is set (this bug was fairly unlikely ever to be exercised).

  * dpkg checks for the presence of certain important programs on the PATH.
  * dselect is now more informative when a dependency is missing, saying
    "<package> does not appear to be available".  (Bug#1642, 1705).

  * `make distclean' fixed; config.* &c removed from source archive.
  * lib/lock.c now uses fcntl rather than flock, for better portability.

  * `Package_Revision: 0' removed from control file.
  * Some inaccuracies and bad formatting in various messages corrected.

 -- Ian Jackson <iwj10@cus.cam.ac.uk>  Tue, 21 Nov 1995 20:15:18 +0000

dpkg (1.0.5); priority=LOW

  * dpkg-split allows some space for the header.  (Bug#1649.)
  * dpkg-split now has --msdos option for 8.3 filenames.
  * dpkg-split --join &c will not complain about trailing garbage.

  * dselect & dpkg will no longer ignore SIGHUP will running subprocesses.

 -- Ian Jackson <iwj10@cus.cam.ac.uk>  Fri, 13 Oct 1995 13:59:51 +0100

dpkg (1.0.4); priority=MEDIUM (HIGH for dselect users with 1.0.3)

  * fixed bug which prevented dselect from displaying the bottom line of
    any listing screen.  This was introduced in 1.0.3, sorry !

  * a conffile will never cause a prompt if the package maintainer
    distributes a file identical to the user's, even if the file has
    been edited by both the user and the maintainer or is a
    newly-registered conffile.  (Bug#1639.)

  * dselect disk/cdrom method script says where to get Packages file.
  * dselect help has better descriptions of the functions of Return and Q.

  * postinst now warns about some problems with /usr/lib/dpkg/methods/hd.

 -- Ian Jackson <iwj10@cus.cam.ac.uk>  Thu, 12 Oct 1995 01:45:38 +0100

dpkg (1.0.3); priority=MEDIUM

  * dselect: fixed segfault when doing some multiple (de)selections.

 -- Ian Jackson <iwj10@cus.cam.ac.uk>  Tue, 10 Oct 1995 03:21:12 +0100

dpkg (1.0.2); priority=MEDIUM

  * problem with screen refresh after `o' (change order) corrected.

 -- Ian Jackson <iwj10@cus.cam.ac.uk>  Mon, 9 Oct 1995 13:11:04 +0100

dpkg (1.0.1); priority=LOW

  * much better dpkg performance on low-memory systems.
  * start-stop-daemon --name should now work. (oops!)
  * fixed typo which could turn into memory overwriting bug sometime.

 -- Ian Jackson <iwj10@cus.cam.ac.uk>  Sun, 8 Oct 1995 20:12:29 +0100

dpkg (1.0.0); priority=LOW

  * Version 1.0.0: dpkg is no longer beta.

  * tar extractor no longer looks up an empty string using getgrnam
    (this causes the libc to coredump when using NIS).

 -- Ian Jackson <iwj10@cus.cam.ac.uk>  Sun, 1 Oct 1995 13:07:36 +0100

dpkg (0.93.80); priority=LOW

  * dselect help screen intro changed to remove `much' before `help'.

  * update-alternatives.pl contains hardcoded ENOENT value, instead
    of requiring POSIX.pm to be present.

  * Makefiles changed to strip when installing instead of when building.

 -- Ian Jackson <iwj10@cus.cam.ac.uk>  Sat, 30 Sep 1995 01:44:12 +0100

dpkg (0.93.79) BETA; priority=LOW

  * DPKG_NO_TSTP environment variable which stops dpkg sending the
    process group a SIGTSTP (Bug#1496).
  * End key should work in dselect lists (Bug#1501).
  * various message typos (missing \n's) fixed (Bug#1504).

 -- Ian Jackson <iwj10@cus.cam.ac.uk>  Fri, 29 Sep 1995 03:27:01 +0100

dpkg (0.93.78) BETA; priority=LOW

  * dselect keystrokes help file typo fix.

 -- Ian Jackson <iwj10@cus.cam.ac.uk>  Thu, 28 Sep 1995 20:31:02 +0100

dpkg (0.93.77) BETA; priority=MEDIUM

  * dpkg --remove --pending will purge things when appropriate.

  * fixed failure to null-terminate dpkg conflict problem messages.
  * fixed bug in formatting of dependency version problem messages.

  * Conffiles resolution prompt for new conffile: typo fixed.
  * Changed dpkg usage error to suggest `-Dhelp' instead of `--Dhelp'.

 -- Ian Jackson <iwj10@cus.cam.ac.uk>  Wed, 20 Sep 1995 23:44:35 +0100

dpkg (0.93.76) BETA; priority=MEDIUM

  * dpkg --auto-deconfigure option (used automatically by dselect) allows
    `important' packages which many others depend on to be split.
  * dpkg should no longer fail an assertion during complicated
    multiple configurations involving packages which are on hold.

  * update-alternatives supports negative priorities.
  * /etc/alternatives is included in the .deb archive.

  * Package priorities changed: Required (Req), Important (Imp), Standard (Std),
    Optional (Opt) and Extra (Xtr).  For backward compatibility Base is an
    alias for Required, and Recommended is kept as a level just below Standard.

  * dselect shows introductory help screen when entering package lists (both
    main and recursive).
  * dselect help messages made more friendly.
  * dselect package list `quit, confirm, and check dependencies' key is
    now Return rather than lowercase `q'; likewise method list `select this
    one and configure it' key.
  * dselect selects packages with priority `standard' or better by default.
  * dselect `v=verbose' becomes `v=terse' when in verbose mode.

  * hard disk method unmounts /var/lib/dpkg/methods/mnt on failure.
  * disk methods' install message uses `stty' to find out what the
    interrupt character is, and uses that in the prompt (rather than ^C).
  * dpkg now tolerates ^Z characters in Packages files.
  * harddisk method doesn't display extra slash when updating packages file.
  * harddisk method burbles less if it doesn't have a good default.

  * dpkg-deb now supports new flexible format, but old format still default.

 -- Ian Jackson <iwj10@cus.cam.ac.uk>  Wed, 20 Sep 1995 02:49:41 +0100

dpkg (0.93.75) BETA; priority=MEDIUM

  * dselect no longer segfaults when you try to modify the last item.

  * dselect Makefile compiles with -g, and links without -s, but installs
    with -s, so that built source directory has debugabble binary.

 -- Ian Jackson <iwj10@cus.cam.ac.uk>  Tue, 12 Sep 1995 02:59:29 +0100

dpkg (0.93.74) BETA; priority=LOW

  * dpkg-split implemented and installed in /usr/bin/dpkg-split.
    (NB this is not compatible with Carl Streeter's old dpkg-split script.)
  * dpkg uses dpkg-split.
  * floppy disk method available - NB this is a first attempt only.

  * hard disk method uses --merge-avail rather than --update-avail.
  * installation by default of `standard' packages removed again.
    (I don't think this is the right place to do this.)
  * update-alternatives --remove correctly deletes all slave links;
    minor cosmetic improvements.

 -- Ian Jackson <iwj10@cus.cam.ac.uk>  Mon, 11 Sep 1995 02:06:05 +0100

dpkg (0.93.73) BETA; priority=LOW

  * dselect multi-package selection now done by `divider' lines
    actually in the package list, rather than horizontal highlight
    movement.
  * dselect help available, and keybindings rationalised.

  * postinst removes /usr/lib/dpkg/methods/hd if upgrading from
    0.93.42.3 or earlier.
  * `hold' flag changed to be settable by the user only, and
    made orthogonal to the `reinstallation required' flag.
  * dpkg will install by default any packages with priority of
    `standard' or better unless they're explicitly deselected.

  * dselect dependency/conflict resolution will suggest marking absent
    packages for `purge' rather than `deinstall'.
  * disk method script produces message about invoking dpkg.
  * dpkg produces warning, not error, when it gets EPERM trying to
    remove a directory belonging to a package being removed.
  * dpkg, dpkg-deb usage error reporting improved.
  * dselect detects too-dumb terminals and stops.
  * dpkg-deb(8) updated a little (thanks to Bill Mitchell).

  * dselect debugmake script uses -O0.

 -- Ian Jackson <iwj10@cus.cam.ac.uk>  Sun, 10 Sep 1995 12:23:05 +0100

dpkg (0.93.72) BETA; priority=MEDIUM

  * /usr/sbin/update-alternatives added.

  * New names for certain control file fields (old names work
    as aliases): Optional -> Suggests, Recommended -> Recommends,
    Class -> Priority.
     
 -- Ian Jackson <iwj10@cus.cam.ac.uk>  Sun, 3 Sep 1995 16:37:41 +0100

dpkg (0.93.71) BETA; priority=LOW

  * dpkg doesn't silently overwrite `new' conffiles (Bug#1283).
  * case now not significant in Essential, Status and Class (Bug#1280).
  * dselect checks method scripts for execute, not for write.

  * spelling fixes in lib/dbmodify.c and dselect/helpmsgs.src.

  * dselect `clean' target deletes helpmsgs.cc and helpmsgs.cc.new.

 -- Ian Jackson <iwj10@cus.cam.ac.uk>  Thu, 31 Aug 1995 13:56:08 +0100

dpkg (0.93.70) BETA; priority=MEDIUM

  * dselect unmounted harddisk method has many silly bugs fixed.

  * dpkg --root option restored (was removed by mistake in 0.93.68).
  * minor cosmetic change to dselect subprocess failure message.

 -- Ian Jackson <iwj10@cus.cam.ac.uk>  Wed, 9 Aug 1995 22:18:55 +0100

dpkg (0.93.69) BETA; priority=MEDIUM

  * dpkg --configure and --remove should work properly when
    they have to defer processing (this tends to happen when many
    packages are processed at once).  (Bug#1209.)

  * dpkg --configure and --remove work better when `processing'
    several related packages with --no-act.

  * dpkg --auto is now two options, --pending or -a (for configure,
    remove, &c) and --recursive or -R (for install, unpack, &c).

  * dpkg debug options in usage message, and values available (-Dh).

 -- Ian Jackson <iwj10@cus.cam.ac.uk>  Wed, 9 Aug 1995 22:18:55 +0100

dpkg (0.93.68) BETA; priority=MEDIUM

  * dpkg won't get an internal error if you try to use the default
    conffiles response (ie, if you just hit return).  (Bug#1208.)

  * dselect hard disk and CD-ROM methods - the real thing, but ALPHA.

  * dselect allows you to go straight to `update' or `install' if
    you have already set up an access method.
  * new dpkg options --yet-to-unpack, --merge-avail and --update-avail.
  * dpkg -G is an abbreviation for dpkg --refuse-downgrade.
  * dpkg -R alias for --root withdrawn, pending reuse with different meaning.
  * dpkg --help message rationalised somewhat.

  * Obsolete `examples' and `dpkg-split' directories removed from
    source tree.  The `hello' package is a better example.

 -- Ian Jackson <iwj10@cus.cam.ac.uk>  Mon, 7 Aug 1995 02:16:25 +0100

dpkg (0.93.67) BETA; priority=LOW for C dpkg alpha testers, HIGH for others

  * dpkg no longer statically linked and -g.
  * calls to abort() changed to print string, file and line number first.
  * removed unused variable from dpkg source.

 -- Ian Jackson <iwj10@cus.cam.ac.uk>  Fri, 4 Aug 1995 01:39:52 +0100

dpkg (0.93.66) ALPHA; priority=MEDIUM

  * dpkg will correctly remove overwritten files from the lists of
    the package(s) that used to contain them.

  * dpkg --purge is now an action, rather than a modifier for --remove,
    and the -P alias for it is withdrawn.

  * dpkg --unpack/--install filenames in messages are now more sensible
    about when to use .../ (show as many trailing components as possible
    in 40 characters, or the whole path if that the last component is
    longer than that).

 -- Ian Jackson <iwj10@cus.cam.ac.uk>  Thu, 3 Aug 1995 02:11:03 +0100

dpkg (0.93.65) ALPHA; priority=MEDIUM

  * dpkg --remove should, when a package being removed is depended-on
    by another that is also queued for removal, defer the depended-on
    package rather than aborting it.  (Bug#1188.)

  * dpkg will not attempt to configure or remove a package more than
    once in the same run.  (Bug#1169.)

  * dpkg cosmetic fix to dependency problems message (this bug
    hasn't been triggered to my knowledge).

  * perl-dpkg no longer installed in /usr/bin.

 -- Ian Jackson <iwj10@cus.cam.ac.uk>  Wed, 2 Aug 1995 13:02:58 +0100

dpkg (0.93.64) ALPHA; priority=MEDIUM

  * dpkg marks a package as no longer `to be configured in this run'
    when an error occurs, so that other packages which depend on it
    will fail (rather than causing a loop and an assertion failure,
     packages.c:166: failed assertion `dependtry <= 4').

  * dselect initial selection granularity is single-package.
  * dpkg --no-also-select option renamed to --selected-only (old option
    still accepted, but no longer in --help).  Changed -N to -O.

  * dselect `update' option changed to `install' (and other options
    renamed too).  NB: old access methods will not work, because
    the `update' script should now be an `install' script.

  * dselect `installation methods' renamed to `access methods'.
  * dpkg --skip-same-version and --refuse-downgrade produce friendlier
    messages when they skip packages.
  * --licence option now properly mentioned in all programs' --version
    messages.

  * bad fix for ELF compile problem involving myopt.h removed (compile
    problem turned out to be a GCC bug.)

 -- Ian Jackson <iwj10@cus.cam.ac.uk>  Tue, 1 Aug 1995 03:03:58 +0100

dpkg (0.93.63) ALPHA; priority=LOW

  * preinst works around shell bug/misfeature involving `trap'.

  * dpkg --skip-same-version doesn't skip packages which have
    an error flag set or which aren't in a standard `installed' state.

  * dpkg --search now does a substring search if the string doesn't
    start with a wildcard character (*, [ or ?) or slash.

  * problem with C/C++ linkage of stuff in "myopt.h" fixed, to help
    with compiling with GCC 2.7.0.

  * dselect Makefile.in `clean' deletes curkeys.inc &c, so that they are
    not shipped in the distribution source and will be rebuilt on the
    target system.

 -- Ian Jackson <iwj10@cus.cam.ac.uk>  Thu, 27 Jul 1995 13:38:47 +0100

dpkg (0.93.62) ALPHA; priority=HIGH

  * dpkg purges leftover control scripts from /var/lib/dpkg/tmp.ci,
    rather than associating them with the wrong package.  (Bug#1101.)

  * dpkg won't `disappear' packages containing no files or directories,
    nor a package required for depends/recommended.  (Bug#1128.)

  * dpkg follows directory symlinks.  (Bug#1125.)

  * dselect fixups for ELF/GCC2.7.0 compilation.

 -- Ian Jackson <iwj10@cus.cam.ac.uk>  Fri, 21 Jul 1995 21:43:41 +0100

dpkg (0.93.61) ALPHA; priority=LOW

  * dselect keybindings and status characters and descriptions changed
    (in pursuance of Bug#1037, user interface problems, still open.)

  * Some cleanups to fix mistakes discovered by ELF-GCC 2.7.0, and fixup
    for newer C++ draft standard (`for' variable declaration scope change).

 -- Ian Jackson <iwj10@cus.cam.ac.uk>  Tue, 18 Jul 1995 01:42:51 +0100

dpkg (0.93.60) ALPHA; priority=HIGH

  * dpkg doesn't think packages have `disappeared' if you install
    several packages at once.  (later reported as Bug#1132.)

  * usage error messages tidied up.

 -- Ian Jackson <iwj10@cus.cam.ac.uk>  Sun, 16 Jul 1995 17:56:56 +0100

dpkg (0.93.59) ALPHA; priority=HIGH

  * dpkg doesn't break maintainer scripts &c if package `foo' exists
    when processing package `foobar'.  (Related to Bug#1101.)

  * dpkg implements `disappear' functionality.
  * dpkg/dselect remove dead entries from /var/lib/dpkg/status.

  * dpkg --list now sorted correctly and output somewhat improved.
  * some debugging messages moved from dbg_stupidlyverbose to dbg_scripts.
  * dpkg prints `Removing foo' message even if foo is not configured.
  * dpkg only prints `serious warning: files list file ... missing'
    once for each package.

 -- Ian Jackson <iwj10@cus.cam.ac.uk>  Sun, 16 Jul 1995 02:32:11 +0100

dpkg (0.93.58) ALPHA; priority=HIGH

  * dpkg should write out status even for packages which it has only
    encountered in the `available' file so far.

 -- Ian Jackson <iwj10@cus.cam.ac.uk>  Fri, 14 Jul 1995 20:19:21 +0100

dpkg (0.93.57) ALPHA; priority=LOW

  * dpkg does chroot when running maintainer scripts (--instdir
    should work right now, though I haven't been able to test it).

 -- Ian Jackson <iwj10@cus.cam.ac.uk>  Fri, 14 Jul 1995 01:32:30 +0100

dpkg (0.93.56) ALPHA; priority=HIGH

  * dpkg can now overwrite symlinks to directories, and will
    do correct handling of symlinks to plain files.
  * dpkg should not replace any directory with a symlink.

 -- Ian Jackson <iwj10@cus.cam.ac.uk>  Thu, 13 Jul 1995 02:43:36 +0100

dpkg (0.93.55) ALPHA; priority=MEDIUM

  * dpkg can now extract hardlinks.
  * dpkg configuration/removal works in the presence of dependency cycles.
  * dpkg should no longer fail an assertion at processarc.c:193.

 -- Ian Jackson <iwj10@cus.cam.ac.uk>  Wed, 12 Jul 1995 01:34:44 +0100

dpkg (0.93.54) ALPHA; priority=MEDIUM

  * dpkg and dselect no longer throw away all Class and Section
    information in /var/lib/dpkg/available.  (Oops.)
  * dpkg --refuse-<something> now works (this broke some dselect
    method scripts' attempts to use --refuse-downgrade).
  * dpkg --audit and --list implemented.

 -- Ian Jackson <iwj10@cus.cam.ac.uk>  Mon, 10 Jul 1995 00:35:13 +0100

dpkg (0.93.53) ALPHA; priority=LOW

  * dpkg --install/--unpack only skips on-hold packages with --auto.
  * dpkg doesn't fclose() the --fsys-tarfile pipe twice.
  * dpkg error handling and reporting cleaned up.
  * dpkg now lists any failed packages/files just before exiting.

 -- Ian Jackson <iwj10@cus.cam.ac.uk>  Sun, 9 Jul 1995 16:31:36 +0100

dpkg (0.93.52) ALPHA; priority=MEDIUM

  * dpkg won't segfault due to missing (Package_)Revision fields.
  * dpkg --search works.
  * dpkg will set execute permissions on scripts if necessary.
  * dpkg prints filenames in --unpack and --install.

 -- Ian Jackson <iwj10@cus.cam.ac.uk>  Sat, 8 Jul 1995 12:41:39 +0100

dpkg (0.93.51) ALPHA; priority=HIGH

  * dpkg --status and --listfiles now work.

  * dpkg --remove --auto won't try to remove everything (!)
  * dpkg --unpack doesn't coredump after unpacking the first package.
  * dpkg won't fail an assertion if it bombs out of --configure
    or --remove because of too many errors.

  * Support for `Essential' in dpkg (not yet in dselect).
  * `available' (Packages) file class and section override those
    from package control files.
  * `Essential: yes' added to control file.

  * Locking strategy changed, now uses flock (no more stale locks).
  * preinst now more helpful about conffiles upgrade problem.

 -- Ian Jackson <iwj10@cus.cam.ac.uk>  Sat, 8 Jul 1995 01:15:26 +0100

dpkg (0.93.50) ALPHA

  * C dpkg now in service.

  * dselect now installs in /usr/bin instead of /usr/sbin.
  * Improved `explanation of display' help and changed HSOC to EIOW.
  * dselect goes back to top of info display when you move the
    highlight.

  * Added <sys/types.h> to md5sum/md5.c, for the benefit of FreeBSD.
  * --admindir doesn't append `var/lib/dpkg' to its argument.

 -- Ian Jackson <iwj10@cus.cam.ac.uk>  Fri, 19 May 1995 21:03:08 +0100

dpkg (0.93.42.3) BETA; priority=LOW

  * Rebuilt using ncurses 1.9.2c-0.
  * Silenced `subcritical error' message if errno == ENOENT.

 -- Ian Jackson <iwj10@cus.cam.ac.uk>  Mon, 12 Jun 1995 13:09:24 +0100

dpkg (0.93.42.2) BETA; priority=HIGH

  * install-info --remove properly removes multi-line entries.
  * Slightly changed ^L redraw code in dselect package list.

 -- Ian Jackson <iwj10@cus.cam.ac.uk>  Sat, 10 Jun 1995 14:06:01 +0100

dpkg (0.93.42.1) BETA; priority=HIGH esp. for new installations

  * update-rc.d default no longer adds K entries in runlevels 2345.

 -- Ian Jackson <iwj10@cus.cam.ac.uk>  Tue, 6 Jun 1995 18:56:23 +0100

dpkg (0.93.42) BETA; priority=LOW; HIGH for dselect users

  * Fix unitialised variable reference bug in dselect (#890).
  * Fix problem with wordwrapping package and method descriptions.
  * Create /var/lib/dpkg/methods/mnt.

 -- Ian Jackson <iwj10@cus.cam.ac.uk>  Fri, 19 May 1995 21:03:08 +0100

dpkg (0.93.41) BETA; priority=LOW

  * Create /var/lib/dpkg/methods.
  * dpkg.pl noisily ignores --skip-same-version rather than barfing.

 -- Ian Jackson <iwj10@cus.cam.ac.uk>  Tue, 16 May 1995 13:28:27 +0100

dpkg (0.93.40) BETA; priority=LOW

  * dselect's subprogram failure message made to stand out more.

  * When switching out of curses, always move the cursor to the
    bottom right corner of the screen.

 -- Ian Jackson <iwj10@cus.cam.ac.uk>  Tue, 16 May 1995 01:03:38 +0100

dpkg (0.93.39) BETA; priority=LOW

  * dselect can now:
    - allow you to select and configure an installation method;
    - invoke installation method scripts to update the available file
      and unpack packages;
    - invoke dpkg to configure and remove packages.
    There are no installation methods available yet.

  * Search feature in dselect works (it was purely an ncurses bug).

  * dpkg-*.nondebbin.tar.gz now available (built by debian.rules).

  * The target directory for dpkg-deb --extract (also available as
    dpkg --extract) is no longer optional.  dpkg-deb suggests the use
    of dpkg --install if you omit it.

  * Added <errno.h> to lib/lock.c and fixed ref. to `byte' in
    md5sum/md5.c, for portability to Solaris 2.

  * Rebuilt `configure' and `config.h.in' using autoconf 2.3.
  * Revised function attribute support checking in configure script.
  * Removed obsolete `dselect.pl' from scripts directory.
  * New option --licence on all the C programs.

 -- Ian Jackson <iwj10@cus.cam.ac.uk>  Sun, 14 May 1995 18:05:38 +0100

dpkg (0.93.38) BETA; priority=MEDIUM

  * Version number comparisons (in dpkg and dselect) now >= <=
    as documented (Bug#831; thanks to Christian Linhart).

  * dselect now has a non-superuser readonly mode.
  * dselect doesn't pop up unsatisfied `Optional's when quitting.
  * `unable to delete saved old file' message fixed dpkg_tmp to dpkg-tmp.

  * Made dpkg convert `revision' to `package_revision' when reading
    (eg) the `status' file.  libdpkg.a has `revision' as a synonym
    for `package_revision' and writes the former.

  * Major improvements and many changes to C option parsing, database
    management, error handling, Makefiles &c to support dpkg.
  * dpkg-deb should now work if sizeof(void*) < sizeof(void(*)()).

 -- Ian Jackson <iwj10@cus.cam.ac.uk>  Mon, 24 Apr 1995 12:34:39 +0100

dpkg (0.93.37) BETA; priority=LOW (MEDIUM for dselect users)

  * Fixed segfault if no description available (Bug#735);
    thanks to Peter Tobias for the bug report.
  * Fixed other assorted minor bugs in description displays.

  * Changed dpkg-deb --info short option from -i to -I, to make
    it unique across dpkg and dpkg-deb (-i still works with
    dpkg-deb for backwards compatibility).

  * Produce more sensible error when main package list is empty.

 -- Ian Jackson <iwj10@cus.cam.ac.uk>  Fri, 7 Apr 1995 02:24:55 +0100

dpkg (0.93.36) BETA; priority=LOW (MEDIUM for dselect users)

  * All the C code (including dselect) updated to support `provides'
    (virtual packages).
  * Revamped dselect's related package selection/deselection
    algorithms.
  * Everything can now handle arbitrary `class' values (as well
    as the predefined ones which we understand and can interpret).
  * Fixed bug that prevented display update when moving down a small
    recursive package list in dselect.
  * Column heading characters corrected from `SHOC' to `HSOC'.

 -- Ian Jackson <iwj10@cus.cam.ac.uk>  Thu, 6 Apr 1995 12:48:13 +0100

dpkg (0.93.35) BETA; priority=MEDIUM

 * Preserve ownerships and permissions on configuration files.
 * Fix bug in conffile updating that could leave a hardlink
   <foo>.dpkg-new to the conffile <foo>.

 * Improved dselect's package list help messages.
 * Highlight now moves on after (de)selecting just one package.
 * Better algorithm for scrolling up/down when moving highlight.
 * Fixed bug in display of `preformatted' extended Description lines.
   (dselect is still ALPHA, but is fairly stable.)

 * Improved dpkg's message when configuring a package that doesn't
   exist, and when selecting or skipping a package that isn't
   currently selected (during unpack processing).

 * Description in control file expanded.

 * Scroll back to top when changing what is in the `info' area.

dpkg (0.93.34) BETA; priority=LOW (HIGH for dselect users)

 * dselect: Fixed bug which caused a coredump if you exited the
   package list if you'd made any changes.  Ouch !

 * dselect: Improved selection algorithm to show fewer extraneous
   packages; improved display for unavailable packages.

 * dpkg: Improved progress messages during unpacking somewhat.

dpkg (0.93.33) BETA; priority=LOW (HIGH for dselect users)

 * dselect now has a main menu.

 * Fixed nasty uninitialised data bug in dselect.

 * dselect now locks and unlocks the packages database.

Mon, 27 Mar 1995 03:30:51 BST  Ian Jackson <iwj10@cus.cam.ac.uk>

	* dpkg (0.93.32): Alpha dselect released and installed in
	                  /usr/sbin/dselect.
	* dpkg (0.93.32): Many portability enhancements: should now
	                  compile using GCC 2.6.3, and dpkg-deb should
	                  compile better on non-Linux systems.
	* dpkg (0.93.32): dpkg will not loop if its stdin disappears
	                  and it needs to prompt.
	* dpkg (0.93.32): Fixed removal dependency error to show
	                  correct package (Bug #648).
	* dpkg (0.93.32): Tidied up copyright notices.
	* dpkg (0.93.32): First draft of update-rc.d manpage, not yet
	                  installed in /usr/man.
	* dpkg (0.93.32): Changes to top-level Makefile.in to improve
	                  error trapping.
	* dpkg (0.93.32): Improved Makefile `clean' and `distclean'
	                  targets.
	* dpkg (0.93.32): Deleted irrelevant `t.c' from lib and
	                  dselect directories.
	* dpkg (0.93.32): Added vercmp.c with version comparison code.
	* dpkg (0.93.32): varbufextend message changed - varbufs not
	                  just for input buffers.
	* dpkg (0.93.32): varbuf has C++ member functions in header
	                  #ifdef __cplusplus.

Changes in dpkg 0.93.31:

* start-stop-daemon --pidfile now works (Bug#571).
* Fixed dependency processing bugs which could require a rerun of
  dpkg --configure (Bug#566).
* Fixed garbage output for `language' of control file in dpkg-deb --info.

Changes in dpkg 0.93.30:

* Added /usr/sbin/start-stop-daemon.

Changes in dpkg 0.93.09:

* Made postinst scripts really be run when dpkg --purge used.
* Added new --force-extractfail option - VERY DANGEROUS.

Changes in dpkg 0.93.28:

* Removed undef of 0x_p21 in read_database_file, which caused the
  the whole status database to become trashed when any update files
  were read.
* Make infinite-loop prevention and cycle detection work.
* Made findbreakcycle work (ie, break properly when cycle detected).
* New script, update-rc.d, to update links /etc/rc?.d/[KS]??*.
* dpkg.pl now sets the umask to 022.
* Cosmetic error message fix to dpkg-deb.
* Deleted OLD directory altogether.
* Improved error-trapping in top-level Makefile loops.

Changes in dpkg 0.93.27:

* Make version number specifications in Depends &c work.
* Added AC_PROG_CXX to autoconf.in for dselect.
* Changed myopt.h not to have cipaction field in cmdinfo (this was
  specially for dpkg-deb) - now we have a generic void*.
* Renamed `class' member of `pkginfoperfile' to `clas' [sic].
* Much work in `dselect' subdirectory.
* Deleted executables, objects and libraries from OLD tree !
* Minor changes to various copyright notices and top-of-file comments.
* Don't install nasty Perl dselectish thing as /usr/bin/dselect.

Changes in dpkg 0.93.26:

* Added --no-also-select instead of not auto-selecting on --unpack
  but doing so on --install; removed --force-unpack-any.

Changes in dpkg 0.93.25:

* Fixed duplicate output (failure to flush before fork) bug.
* More clarification of md5sum.c copyright.
* Corrected typo in ChangeLog in 0.93.24 source package.

Changes in dpkg 0.93.24:

* dpkg could copy conffiles info from one package to another.  Aargh.
  Bug #426.
* dpkg failed to initialise status if you tried to remove or
  configure a nonexistent package.  Bug #419.
* install-info now handles START-INFO-DIR-ENTRY entries like:
   * Gdb::                         The GNU debugger.
  Previously it would only accept (Bug #407):
   * Gdb: (gdb).                   The GNU debugger.
* When installing a new foo.info[.gz], install-info now replaces
   * Foo: (foo.info).              The Gnoo Foo.
  as well as just * Foo: (foo). ...
* Moved option parsing out of dpkg-deb into libdpkg.
* Assorted minor source code rearrangements.
* Fixed assorted copyright notices, clarified md5sum copyright.
* Corrected typo in 0.93.23 source package's ChangeLog.

Changes in dpkg 0.93.23:

* `dpkg-deb' --build now does a syntax check on the control file.
* `dselect' is now no longer called `debian', spurious copy removed
  from package top-level source directory.
* C control information parsing complete and somewhat tested.
* Moved `global' include files into $(srcdir)/include from ../lib,
  added some files to the lib Makefile, and arranged for pop_cleanup().

Changes in dpkg 0.93.22:

* Fixed bug which caused dpkg to see failures of md5sum where there
  were none (would also have caused dpkg to miss a real failure).
* Fixed failure to update some `status' database fields.

Changes in dpkg 0.93.21:

* Fixed error-handling bug which could corrupt database.

Changes in dpkg 0.93.20:

* Fixed bug which ran old (/var/adm/dpkg) postinst scripts.
* Fixed dpkg usage message which claimed -i => both --install & --info.
* Use Colin Plumb's MD5 code - faster, and better copyright.
* Manpages: dpkg-deb(8), deb-control(5), deb(5) - thanks to Raul
  Deluth Miller.  Also, an xfig picture of some C program innards.

Changes in dpkg 0.93.19:

* Don't delete the `list' file from the dpkg database.
* Fixed various bugs in the conffile handling.
* Conffiles that are symlinks will now be treated as if the
  `dereferenced' name of the file was listed in conffiles.  This means
  that /etc/foo -> /usr/etc/foo will cause all conffile updates of
  /etc/foo to create /usr/etc/foo.dpkg-tmp &c instead.  However, the
  link will be removed if --purge is used to delete all the conffiles.
* When doing a new installation, or when updating a conffile that
  wasn't listed as a conffile in the old version of the package, don't
  do any prompting but just install the version from the archive.
* Corrected error message if exec of dpkg --vextract failed
  and --instroot or --root specified.
* Added new --force-unpack-any option.
* Extra newline after --status output.
* Added -W options to CFLAGS.
* Fixed mistake in previous ChangeLog entry.

Changes in dpkg 0.93.18:

* Fixed invocation of dpkg-deb --vextract if --root or --instdir
  not specified.
* Create /var/lib/dpkg/updates.

Changes in dpkg 0.93.17:

* install-info --remove exits with status 0 if it doesn't find the
  thing to remove, instead of status 1.
* Error handling functions have __attribute__((format...)) if GCC.
* push_cleanup its arg takes void **argv instead of char **argv.
* Top-level Makefile.in has set -e before `for' loops.
* dpkg-deb --info not-an-existing-file produces fewer error messages.

Changes in dpkg 0.93.16:

* Made --root= option really extract to $instroot instead of `/'.
* install-info clears the 0444 bits in its umask.
* Fixed a few database handling bugs which cause dpkg always to fail,
  and usually to corrupt the status database in various ways.
* dpkg-deb completely rewritten, now doesn't tinker with
  /var/{adm,lib}/dpkg.  Should be faster.
* Directory structure and Makefiles in source package reorganised.

Changes in dpkg 0.93.15:

* Added `debian' (dselect), still very primitive.
* Database format changed, and moved from /var/adm to /var/lib.
* Added dpkg --avail mode, --list, --status and --search.
* Set of dpkg => dpkg-deb pass-through operations changed (but
  dpkg-deb not yet updated).
* Added --root, --admindir and --instdir, as well as --isok &c.
* Moved much stuff into /usr/lib/dpkg-lib.pl, rewritten status
  database handling.
* Put packages in `purge' state even if `deinstall' requested if
  they have no postrm and no conffiles.
* Version number comparisons fixed.
* insert-version.pl now installes lib.pl filename too.
* Strip trailing slashes when reading files from file lists.

Changes in dpkg 0.93.14:

* Fixed parsing of DEPENDS &c fields with trailing whitespace.
* postinst now fixes up broken ispell.control file.
* Cyclic dependency/multiple package removal processing: don't consider
  packages we've just removed when looking for a reason not to go ahead.
* Added call to postinst with `purge' argument for expunging old
  configuration etc. that aren't listed in conffiles.

Changes in dpkg 0.93.13:

* sub S_ISREG defined in dpkg.pl.
* Checking of DEPENDS &c fields was too lax, causing an internal error
  if you fed it certain kinds of broken control file.
* Fixed misleading message from bogus installationstatus call.
* New -u and -U options to dpkg-deb which don't unpack the /DEBIAN
  directory, and use these in dpkg.pl; clean up /DEBIAN in postinst.

Changes in dpkg 0.93.12:

* No longer needs *.ph files, since these appear to be broken.
* Postinst fixes up *.control files with curly brackets.
* embryo of dselect.

Changes in dpkg 0.93.11:

* New --ignore-depends option.
* This ChangeLog changed format here.

Wed Nov 30 15:38:21 GMT 1994  Ian Jackson  <iwj10@cus.cam.ac.uk>

	* dpkg 0.93.11 released.

	* conffile updating fixed.

	* Message `updgrade' in dpkg changed to `replace'.

	* install-info now copes with multi-line entries.

	* version numbers now done automatically in dpkg and install-info.

	* more debugging around conffiles updates.

	* *.hash files not deleted so soon.

	* adds brand new packages to status array so we can install them.

	* postinst does h2ph for {sys,linux}/{stat,types}.ph if required.

Mon Nov 28 02:00:13 GMT 1994  Ian Jackson  <iwj10@cus.cam.ac.uk>

        * dpkg 0.93.10 released.

        * dpkg.pl completely rewritten.

        * dpkg-deb: removed dabase-processing and --install option.

        * Makefiles reworked, debian.rules added.

        * Don't install anything in /usr/doc/examples.

        * dpkg-*.deb contains /usr/bin/dpkg-deb.dist, fixed up by postinst.

Thu Oct 20 13:22:20 1994  Ian Murdock  (imurdock@debra.debian.org)

        * dpkg 0.93.9 released.

        * dpkg.pl: Use $argument, not $package, with `--build'.
        Make sure that saved postinst scripts are executable.

Tue Oct 18 09:40:57 1994  Ian Murdock  (imurdock@debra.debian.org)

        * dpkg 0.93.8 released.

        * deb/remove.c (pkg_remove): Do not report an error from rmdir ()
        when `errno' is ENOTEMPTY (Directory not empty), because in this
        case we have found the highest-level directory in the package and
        are ready to exit the loop (i.e., it is a normal occurrence).

Mon Oct 17 10:44:32 1994  Ian Murdock  (imurdock@debra.debian.org)

        * Makefile.in: Adapted all Makefiles to the GNU Coding Standards.

        * deb/remove.c (pkg_remove): Make sure that parent directories are
        removed LAST!  This will result in complete removal of packages
        when --remove is called.  dpkg 0.93.7 (and earlier) had problems
        with this because it tried to remove directories in order, which
        will work most of the time, but not necessarily all of the time.

        * deb/list.c (pkg_list): Output is sorted by package name.

Tue Oct  4 12:27:10 1994  Ian Murdock  (imurdock@debra.debian.org)

        * deb/contents.c (pkg_contents): When a list file cannot be
        opened, silently fail and let the front-end explain the problem.

        * deb/util.c (return_info): When a control file cannot be opened,
        silently fail and let the front-end explain the problem.

        * deb/search.c (pkg_search): Exit 0 if the regular expression is
        matched and 1 if it is not.

Mon Oct  3 18:38:53 1994  Ian Murdock  (imurdock@debra.debian.org)

        * dpkg.pl: New file.  Replaces dpkg.sh.

        * deb/Makefile.in: Renamed `dpkg-util.deb' to `dpkg-deb'.

        * deb/build.c (pkg_build): `--build' is less verbose, instead
        letting the front-end add verbosity where appropriate.

        * deb/install.c (pkg_install): Ditto.

        * deb/remove.c (pkg_remove): Ditto.

        * deb/search.c (pkg_search): Ditto.

        * deb/describe.c (pkg_describe): `--describe' is less verbose,
        instead letting the front-end add verbosity where appropriate.
        The ``Description:'' label has been removed.

        * deb/version.c (pkg_version): `--version' is less verbose,
        instead letting the front-end add verbosity where appropriate.
        The ``Version:'' label has been removed, as has the maintainer
        information.

Mon Sep 12 14:22:04 1994  Ian Murdock  (imurdock@debra.debian.org)

        * deb/version.c (pkg_version): `--version' now reports the
        version number of dpkg if no argument is specified.

Thu Sep  1 13:31:37 1994  Ian Murdock  (imurdock@debra.debian.org)

        * dpkg 0.93.7 released.

        * deb/build.c (pkg_build): check status and exit if non-zero.

        * deb/contents.c (pkg_contents): ditto.

        * deb/install.c (archive_extract): ditto.

Thu Sep  1 13:20:08 1994  Ian Murdock  (imurdock@debra.debian.org)

        * deb/version.c (pkg_version): indent to the same point as
        pkg_describe.

Thu Sep  1 12:21:11 1994  Ian Murdock  (imurdock@debra.debian.org)

        * Makefile.in (dist): added debian.rules binary, source and
        dist targets to make final distribution easier to make.
        (install): install programs to /usr/bin.

        * deb/Makefile.in (install): install programs to /usr/bin.

        * deb/list.c (pkg_list): enforce a maximum limit of ten characters
        for the package name in the output.
        (pkg_list): left-justify the version number to make it easier for
        the front-end to parse the output.
        (pkg_list): replace first '\n' character in packages[n].description
        with '\0'.

        * deb/install.c (archive_extract): use the `p' option to `tar' to
        ensure that permissions are preserved.

Sat Aug 27 09:53:37 1994  Ian Murdock  (imurdock@debra.debian.org)

        * dpkg 0.93.6 released.

        * deb/util.c (return_info): only unlink CONTROL if ARCHIVE_FLAG is
        true!

Fri Aug 26 15:38:22 1994  Ian Murdock  (imurdock@debra.debian.org)

        * dpkg 0.93.5 released.

        * deb/contents.c (pkg_contents): merged function archive_contents
        into function pkg_contents.

        * deb/contents.c (pkg_contents): use lstat (rather than stat) so
        that symbolic links are recognized.
        (pkg_contents): print the usual `<path> -> <link_to>' now that we
        recognize symbolic links.

        * deb/util.c (return_info): create a FIFO to pipe the needed
        information to the ``formatter'' rather than creating a directory
        in /tmp for the package information, which is what we used to do.

Thu Aug 25 11:46:27 1994  Ian Murdock  (imurdock@debra.debian.org)

        * lib/fake-ls.c (mk_date_string): return a pointer to malloc'ed
        area.
        (mk_mode_string): ditto.

        * dpkg.sh: make sure the control information is extracted to a
        uniquely-named temporary directory during package installation.

        * dpkg.sh: execute the pre- and post-removal scripts during
        package removal.

        * dpkg.sh: exit immediately if dpkg-util.deb reports failure.

        * deb/install.c (pkg_control): make sure that `package' exists and
        is a Debian archive before doing anything.

        * deb/install.c (pkg_extract): make sure that `package' exists and
        is a Debian archive before doing anything.

        * deb/install.c (pkg_install): unlink `extract_output' when done.

        * deb/remove.c (pkg_remove): use lstat (rather than stat) so that
        --remove does not get confused and think that a symbolic link to a
        directory is actually a directory, which results in the symbolic
        link never being removed at all.

ChangeLog begins Thu Aug 25 11:46:27 1994 for dpkg 0.93.5.

