diff options
author | Guy Maor <maor@debian.org> | 1999-01-29 08:53:59 +0000 |
---|---|---|
committer | Guy Maor <maor@debian.org> | 1999-01-29 08:53:59 +0000 |
commit | 144d63847622fb578b306a18d1e848b240771f64 (patch) | |
tree | ed6bf749e61d8c1aa39aef81e6767bbf0cbc5f43 | |
parent | 026b9db8830c1cebfda297cd9fdb22d5aa60dea3 (diff) | |
download | dpkg-144d63847622fb578b306a18d1e848b240771f64.tar.gz |
dpkg 1.4.1
209 files changed, 16547 insertions, 13611 deletions
diff --git a/.cvsignore b/.cvsignore new file mode 100644 index 000000000..e8523c71a --- /dev/null +++ b/.cvsignore @@ -0,0 +1,15 @@ +ABOUT-NLS +Makefile.in +aclocal.m4 +config.guess +config.h.in +config.sub +configure +install-sh +ltconfig +ltmain.sh +missing +mkinstalldirs +stamp-h.in +intl +config.log @@ -279,7 +279,7 @@ POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS - How to Apply These Terms to Your New Programs + Appendix: How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it diff --git a/ChangeLog b/ChangeLog new file mode 100644 index 000000000..c3d7e4bb3 --- /dev/null +++ b/ChangeLog @@ -0,0 +1,2251 @@ +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 seperate "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 2018 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 accomodate 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, realy, 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 explictly 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.29: + +* 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. + +Local variables: +mode: debian-changelog +End: @@ -1,146 +1,176 @@ - This is a generic INSTALL file for utilities distributions. -If this package does not come with, e.g., installable documentation or -data files, please ignore the references to them below. +Basic Installation +================== + + These are generic installation instructions. The `configure' shell script attempts to guess correct values for -various system-dependent variables used during compilation, and -creates the Makefile(s) (one in each subdirectory of the source -directory). In some packages it creates a C header file containing -system-dependent definitions. It also creates a file `config.status' -that you can run in the future to recreate the current configuration. +various system-dependent variables used during compilation. It uses +those values to create a `Makefile' in each directory of the package. +It may also create one or more `.h' files containing system-dependent +definitions. Finally, it creates a shell script `config.status' that +you can run in the future to recreate the current configuration, a file +`config.cache' that saves the results of its tests to speed up +reconfiguring, and a file `config.log' containing compiler output +(useful mainly for debugging `configure'). + + If you need to do unusual things to compile the package, please try +to figure out how `configure' could check whether to do them, and mail +diffs or instructions to the address given in the `README' so they can +be considered for the next release. If at some point `config.cache' +contains results you don't want to keep, you may remove or edit it. + + The file `configure.in' is used to create `configure' by a program +called `autoconf'. You only need `configure.in' if you want to change +it or regenerate `configure' using a newer version of `autoconf'. + +The simplest way to compile this package is: + + 1. `cd' to the directory containing the package's source code and type + `./configure' to configure the package for your system. If you're + using `csh' on an old version of System V, you might need to type + `sh ./configure' instead to prevent `csh' from trying to execute + `configure' itself. + + Running `configure' takes a while. While running, it prints some + messages telling which features it is checking for. + + 2. Type `make' to compile the package. + + 3. Optionally, type `make check' to run any self-tests that come with + the package. -To compile this package: + 4. Type `make install' to install the programs and any data files and + documentation. -1. Configure the package for your system. + 5. You can remove the program binaries and object files from the + source code directory by typing `make clean'. To also remove the + files that `configure' created (so you can compile the package for + a different kind of computer), type `make distclean'. There is + also a `make maintainer-clean' target, but that is intended mainly + for the package's developers. If you use it, you may have to get + all sorts of other programs in order to regenerate files that came + with the distribution. - Normally, you just `cd' to the directory containing the package's -source code and type `./configure'. If you're using `csh' on an old -version of System V, you might need to type `sh configure' instead to -prevent `csh' from trying to execute `configure' itself. +Compilers and Options +===================== - Running `configure' takes awhile. While it is running, it -prints some messages that tell what it is doing. If you don't want to -see any messages, run `configure' with its standard output redirected -to `/dev/null'; for example, `./configure >/dev/null'. + Some systems require unusual options for compilation or linking that +the `configure' script does not know about. You can give `configure' +initial values for variables by setting them in the environment. Using +a Bourne-compatible shell, you can do that on the command line like +this: + CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure - To compile the package in a different directory from the one -containing the source code, you must use a version of `make' that +Or on systems that have the `env' program, you can do it like this: + env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure + +Compiling For Multiple Architectures +==================================== + + You can compile the package for more than one kind of computer at the +same time, by placing the object files for each architecture in their +own directory. To do this, you must use a version of `make' that supports the `VPATH' variable, such as GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the -source code in the directory that `configure' is in and in `..'. If -for some reason `configure' is not in the source code directory that -you are configuring, then it will report that it can't find the source -code. In that case, run `configure' with the option `--srcdir=DIR', -where DIR is the directory that contains the source code. +source code in the directory that `configure' is in and in `..'. + + If you have to use a `make' that does not supports the `VPATH' +variable, you have to compile the package for one architecture at a time +in the source code directory. After you have installed the package for +one architecture, use `make distclean' before reconfiguring for another +architecture. + +Installation Names +================== By default, `make install' will install the package's files in `/usr/local/bin', `/usr/local/man', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the -option `--prefix=PATH'. Alternately, you can do so by consistently -giving a value for the `prefix' variable when you run `make', e.g., - make prefix=/usr/gnu - make prefix=/usr/gnu install +option `--prefix=PATH'. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you -give `configure' the option `--exec-prefix=PATH' or set the `make' -variable `exec_prefix' to PATH, the package will use PATH as the prefix -for installing programs and libraries. Data files and documentation -will still use the regular prefix. Normally, all files are installed -using the same prefix. - - Some packages pay attention to `--with-PACKAGE' options to -`configure', where PACKAGE is something like `gnu-as' or `x' (for the -X Window System). They may also pay attention to `--enable-FEATURE' -options, where FEATURE indicates an optional part of the package. The -README should mention any `--with-' and `--enable-' options that the +give `configure' the option `--exec-prefix=PATH', the package will use +PATH as the prefix for installing programs and libraries. +Documentation and other data files will still use the regular prefix. + + If the package supports it, you can cause programs to be installed +with an extra prefix or suffix on their names by giving `configure' the +option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. + +Optional Features +================= + + Some packages pay attention to `--enable-FEATURE' options to +`configure', where FEATURE indicates an optional part of the package. +They may also pay attention to `--with-PACKAGE' options, where PACKAGE +is something like `gnu-as' or `x' (for the X Window System). The +`README' should mention any `--enable-' and `--with-' options that the package recognizes. - `configure' also recognizes the following options: + For packages that use the X Window System, `configure' can usually +find the X include and library files automatically, but if it doesn't, +you can use the `configure' options `--x-includes=DIR' and +`--x-libraries=DIR' to specify their locations. + +Specifying the System Type +========================== + + There may be some features `configure' can not figure out +automatically, but needs to determine by the type of host the package +will run on. Usually `configure' can figure that out, but if it prints +a message saying it can not guess the host type, give it the +`--host=TYPE' option. TYPE can either be a short name for the system +type, such as `sun4', or a canonical name with three fields: + CPU-COMPANY-SYSTEM + +See the file `config.sub' for the possible values of each field. If +`config.sub' isn't included in this package, then this package doesn't +need to know the host type. + + If you are building compiler tools for cross-compiling, you can also +use the `--target=TYPE' option to select the type of system they will +produce code for and the `--build=TYPE' option to select the type of +system on which you are compiling the package. + +Sharing Defaults +================ + + If you want to set default values for `configure' scripts to share, +you can create a site shell script called `config.site' that gives +default values for variables like `CC', `cache_file', and `prefix'. +`configure' looks for `PREFIX/share/config.site' if it exists, then +`PREFIX/etc/config.site' if it exists. Or, you can set the +`CONFIG_SITE' environment variable to the location of the site script. +A warning: not all `configure' scripts look for a site script. + +Operation Controls +================== + + `configure' recognizes the following options to control how it +operates. + +`--cache-file=FILE' + Use and save the results of the tests in FILE instead of + `./config.cache'. Set FILE to `/dev/null' to disable caching, for + debugging `configure'. `--help' Print a summary of the options to `configure', and exit. `--quiet' `--silent' +`-q' Do not print messages saying which checks are being made. -`--verbose' - Print the results of the checks. +`--srcdir=DIR' + Look for the package's source code in directory DIR. Usually + `configure' can determine that directory automatically. `--version' Print the version of Autoconf used to generate the `configure' script, and exit. -`--x-includes=DIR' - X include files are in DIR. - -`--x-libraries=DIR' - X library files are in DIR. - - `configure' also accepts and ignores some other options. - - On systems that require unusual options for compilation or linking -that the package's `configure' script does not know about, you can give -`configure' initial values for variables by setting them in the -environment. In Bourne-compatible shells, you can do that on the -command line like this: - - CC='gcc -traditional' LIBS=-lposix ./configure +`configure' also accepts some other, not widely useful, options. -On systems that have the `env' program, you can do it like this: - - env CC='gcc -traditional' LIBS=-lposix ./configure - - Here are the `make' variables that you might want to override with -environment variables when running `configure'. - - For these variables, any value given in the environment overrides the -value that `configure' would choose: - - - Variable: CC - C compiler program. The default is `cc'. - - - Variable: INSTALL - Program to use to install files. The default is `install' if you - have it, `cp' otherwise. - - For these variables, any value given in the environment is added to -the value that `configure' chooses: - - - Variable: DEFS - Configuration options, in the form `-Dfoo -Dbar...'. Do not use - this variable in packages that create a configuration header file. - - - Variable: LIBS - Libraries to link with, in the form `-lfoo -lbar...'. - - If you need to do unusual things to compile the package, we encourage -you to figure out how `configure' could check whether to do them, and -mail diffs or instructions to the address given in the README so we -can include them in the next release. - -2. Type `make' to compile the package. If you want, you can override -the `make' variables CFLAGS and LDFLAGS like this: - - make CFLAGS=-O2 LDFLAGS=-s - -3. If the package comes with self-tests and you want to run them, -type `make check'. If you're not sure whether there are any, try it; -if `make' responds with something like - make: *** No way to make target `check'. Stop. -then the package does not come with self-tests. - -4. Type `make install' to install programs, data files, and -documentation. - -5. You can remove the program binaries and object files from the -source directory by typing `make clean'. To also remove the -Makefile(s), the header file containing system-dependent definitions -(if the package uses one), and `config.status' (all the files that -`configure' created), type `make distclean'. - - The file `configure.in' is used to create `configure' by a program -called `autoconf'. You only need it if you want to regenerate -`configure' using a newer version of `autoconf'. diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 000000000..d717590bc --- /dev/null +++ b/Makefile.am @@ -0,0 +1,76 @@ +## Process this file with automake to produce a Makefile.in + +AUTOMAKE_OPTIONS = 1.1 foreign + +if HAVE_CPLUSPLUS +CPPSUBDIRS = dselect methods +else +CPPSUBDIRS = +endif + +SUBDIRS = po intl include lib main dpkg-deb split \ + md5sum scripts $(CPPSUBDIRS) doc + +## Directory definitions + +pkglocalstatedir = $(sharedstatedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ + +docdir = $(prefix)/doc +pkgdocdir = $(docdir)/@PACKAGE@ + +## Various options + +CFLAGS = @CFLAGS@ @CWARNS@ -g $(XCFLAGS) +OPTCFLAGS = @OPTCFLAGS@ @CWARNS@ -g $(XCFLAGS) +LDFLAGS = @LDFLAGS@ $(XLDFLAGS) +LIBS = @LIBS@ $(XLIBS) + +export CFLAGS OPTCFLAGS LDFLAGS LIBS + +## Automake variables + +# Can set this to "build" (wrapper found in debmake) +DEBIAN_BUILD = dpkg-buildpackage + +# May want to add -a<arch>? +DEBIAN_FLAGS = + +BUILT_SOURCES = version.h config.h +EXTRA_DIST = archtable COPYING INSTALL + +CLEANFILES = version.h.new +DISTCLEANFILES = version.h config.h +MAINTAINERCLEANFILES = libtool + +DISTDEBFILES = 50dpkg-dev.el changelog control copyright \ + dev-README postinst preinst prerm rules \ + shlibs shlibs.default.i386 shlibs.local + +MAINTCLEANFILES = Makefile.in aclocal.m4 config.guess \ + config.h.in config.sub configure install-sh \ + ltconfig ltmain.sh mkinstalldirs ABOUT-NLS \ + po/Makefile.in.in po/stamp-cat-id po/cat-id-tbl.c \ + po/dpkg.pot stamp-h.in missing +## Rules + +.PHONY: install-data-local uninstall-local dist-hook maintainer-clean-local + +uninstall-local: + -for d in $(pkglocalstatedir) $(pkglibdir) $(pkgdocdir); do \ + [ -e $$d ] && rmdir $$d; \ + done + +dist-hook: + $(mkinstalldirs) $(distdir)/debian + set -e; for i in $(DISTDEBFILES); do \ + cp -p $(srcdir)/debian/$$i $(distdir)/debian/; \ + done + $(mkinstalldirs) $(distdir)/automake + cp -dp $(top_srcdir)/automake/[a-z]* $(distdir)/automake/ + +maintainer-clean-local: + -cd $(srcdir) && rm -f $(MAINTCLEANFILES) + -$(RM) -r $(srcdir)/intl + +## End of file. diff --git a/Makefile.in b/Makefile.in deleted file mode 100644 index b69f3fcb8..000000000 --- a/Makefile.in +++ /dev/null @@ -1,134 +0,0 @@ -# Copyright (C) 1994 Ian Murdock <imurdock@debian.org> -# Copyright (C) 1994,1995 Ian Jackson <iwj10@cus.cam.ac.uk> -# -# This is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as -# published by the Free Software Foundation; either version 2, -# or (at your option) any later version. -# -# This is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public -# License along with dpkg; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -srcdir = @srcdir@ -VPATH = @srcdir@ - -prefix = @prefix@ -exec_prefix = $(prefix) -docdir = $(prefix)/doc -devdocdir = $(docdir)/dpkg -copyingfile = $(docdir)/dpkg/copyright -infodir = $(prefix)/info -bindir = $(exec_prefix)/bin -sbindir = $(exec_prefix)/sbin -libdir = $(prefix)/lib -dpkglibdir = $(libdir)/dpkg -methodsdir = $(dpkglibdir)/methods -parsechangelogdir = $(dpkglibdir)/parsechangelog -elispdir = $(libdir)/emacs/site-lisp -datadir = /var/lib/dpkg -methodsdatadir = $(datadir)/methods -methodsmnt = $(datadir)/methods/mnt -pinfodir = $(datadir)/info -pupdatesdir = $(datadir)/updates -altsdatadir = $(datadir)/alternatives -partsdir = $(datadir)/parts -mandir = $(prefix)/man -man1dir = $(mandir)/man1 -man5dir = $(mandir)/man5 -man8dir = $(mandir)/man8 -man1 = 1 -man5 = 5 -man8 = 8 -etcdir= /etc -altsetcdir = $(etcdir)/alternatives - -BOURNESHELL = /bin/sh - -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ - -CC = @CC@ - -CFLAGS = @CFLAGS@ @CWARNS@ $(XCFLAGS) -LDFLAGS = $(XLDFLAGS) -ALL_CFLAGS = -I../include -I.. @DEFS@ $(CFLAGS) - -SUBDIRS = lib main dpkg-deb split md5sum scripts doc include dselect methods -PORTABLEDIRS = lib dpkg-deb split md5sum - -.SUFFIXES: .c .o - -.c.o: - $(CC) $(ALL_CFLAGS) -c $< - -all: version - set -e; for d in $(SUBDIRS) ; do \ - cd $$d ; \ - $(MAKE) 'CC=$(CC)' 'LDFLAGS=$(LDFLAGS)' 'XLIBS=$(XLIBS)'; \ - cd .. ; \ - done - -install: all - $(BOURNESHELL) $(srcdir)/mkinstalldirs $(bindir) $(sbindir) \ - $(man1dir) $(man5dir) $(man8dir) $(devdocdir) $(infodir) \ - $(libdir) $(dpkglibdir) $(methodsdir) $(parsechangelogdir) \ - $(elispdir) $(datadir) $(pinfodir) $(pupdatesdir) \ - $(methodsdatadir) $(methodsmnt) $(altsdatadir) \ - $(altsetcdir) $(partsdir) - set -e; for d in $(SUBDIRS) ; do \ - cd $$d ; \ - $(MAKE) 'CC=$(CC)' 'LDFLAGS=$(LDFLAGS)' 'XLIBS=$(XLIBS)' \ - install ; \ - cd .. ; \ - done - $(INSTALL_DATA) COPYING $(copyingfile) - -portable: version - set -e; for d in lib dpkg-deb split md5sum ; do \ - cd $$d ; \ - $(MAKE) 'CC=$(CC)' 'LDFLAGS=$(LDFLAGS)' 'XLIBS=$(XLIBS)' ; \ - cd .. ; \ - done - -install-portable: portable - $(BOURNESHELL) $(srcdir)/mkinstalldirs $(bindir) \ - $(man1dir) $(man8dir) $(libdir) $(dpkglibdir) - set -e; for d in $(PORTABLEDIRS) ; do \ - cd $$d ; \ - $(MAKE) 'CC=$(CC)' 'LDFLAGS=$(LDFLAGS)' 'XLIBS=$(XLIBS)' \ - install ; \ - cd .. ; \ - done -# $(INSTALL_DATA) COPYING $(copyingfile) - -autoconf: - autoheader - autoconf - -clean: - set -e; for d in $(SUBDIRS) ; do \ - cd $$d ; \ - $(MAKE) clean ; \ - cd .. ; \ - done - rm -f core version.h.new - -distclean: clean - set -e; for d in $(SUBDIRS) ; do \ - cd $$d ; \ - $(MAKE) distclean ; \ - cd .. ; \ - done - rm -f Makefile *.orig *~ *.~* ./#*# - rm -f config.h config.status install config.cache config.log - -version: - perl insert-version.pl <version.h >version.h.new - cmp -s version.h.new version.h || mv version.h.new version.h @@ -1,72 +0,0 @@ -(-*- indented-text -*-) - - -CHANGES SINCE dpkg 0.93.7: - - * a Perl-based front-end with many new features has replaced dpkg.sh. - The new features are detailed below. dpkg.pl is not finished, - however, as it does not yet support CONFLICTS, DEPENDS, OPTIONAL, - or RECOMMENDED. All of the above will be supported in Debian 0.93. - - In addition, it does not yet support PARTS, but that may wait until - Debian 0.94. (In the meantime, we can create disk-sized packages by - hand.) - - dpkg.pl has been constructed from code originally by Matt Welsh, - with additions by Carl Streeter, Ian Murdock, and Ian Jackson. - -New features in dpkg.pl: - - * dpkg.pl can now manipulate many packages at a time; dpkg.sh could - only manipulate one package at a time. - - * dpkg.pl supports pre-installation, post-installation, pre-removal, - and post-removal scripts. During batch installation, - post-installation scripts are executed after all packages have - been installed. (dpkg.sh supported all of the above except the - batch installation feature, because dpkg.sh did not itself support - batch installation.) - - * dpkg.pl now supports the upgrading of packages. A newer version of - a package, when released, can be obtained and installed normally on - the system to replace an older, previously installed version of it, - all with a minimum of manuals steps. - - During the installation process, dpkg.pl determines whether or not - a version of the package is currently installed on the system. If - it is, it determines whether it is an older version than the - package being installed (in which case we are ``upgrading'', and - the installation proceeds after saving the configuration files and - removing the older version), or whether it is the same or a newer - version than the package being installed (in which case we are, for - whatever reason, attempting to install a package twice or - ``downgrading'', and dpkg.pl asks for confirmation). - - * dpkg.pl now supports automatic and intelligent configuration file - updates during the upgrade process. During a package upgrade, it - determines when a configuration file has changed since the last - installation and, for those that have, prompts the user whether to - keep the older or newer configuration file, providing them with - default responses. - -New features in dpkg-deb: - - * dpkg-util.deb has been renamed to dpkg-deb, for brevity. - - * dpkg-deb is much less verbose, and in most cases it says nothing - unless an error has occurred. The front-end is expected to provide - the necessary verbosity when appropriate. - - * `dpkg-deb --describe' now outputs the description only, without the - ``Description:'' label. - - * `dpkg-deb --list' output is now sorted by package name. - - * `dpkg-deb --remove' bug fix: in dpkg 0.93.7 (or earlier), some - directories did not get properly removed. This has been fixed. - - * `dpkg-deb --version' now outputs the version information only, - without the `Version:'' label, and without maintainer information. - - * `dpkg-deb --version' now provides the version of dpkg if no - argument is specified. diff --git a/acconfig.h b/acconfig.h index 5efaeeac9..6c897b9c4 100644 --- a/acconfig.h +++ b/acconfig.h @@ -1,5 +1,11 @@ /* Additional tests: */ +/* The name of the package being compiled */ +#define PACKAGE "" + +/* The version of the package */ +#define VERSION "" + /* Define if inline functions a la GCC are available. */ #undef HAVE_INLINE @@ -32,3 +38,21 @@ /* Set this string to append something to the version number. */ #define ARCHBINFMT "" + +/* Define to the name of the distribution. */ +#undef PACKAGE + +/* Define to 1 if NLS is requested. */ +#undef ENABLE_NLS + +/* Define as 1 if you have catgets and don't want to use GNU gettext. */ +#undef HAVE_CATGETS + +/* Define as 1 if you have gettext and don't want to use GNU gettext. */ +#undef HAVE_GETTEXT + +/* Define if your locale.h file contains LC_MESSAGES. */ +#undef HAVE_LC_MESSAGES + +/* Define as 1 if you have the stpcpy function. */ +#undef HAVE_STPCPY @@ -16,9 +16,11 @@ i386 i386 i486 i486 i386 i486 i586 i386 i486 +i686 i386 i486 pentium i386 i486 sparc sparc sparc alpha alpha alpha m68k m68k m68k arm arm arm -ppc ppc ppc +ppc powerpc powerpc +powerpc powerpc powerpc diff --git a/dpkg-deb/dpkg-deb.8-vuori b/attic/dpkg-deb/dpkg-deb.8-vuori index ca22395be..ca22395be 100644 --- a/dpkg-deb/dpkg-deb.8-vuori +++ b/attic/dpkg-deb/dpkg-deb.8-vuori diff --git a/main/dpkg.8-null b/attic/dpkg/dpkg.8-null index bf760f430..bf760f430 100644 --- a/main/dpkg.8-null +++ b/attic/dpkg/dpkg.8-null diff --git a/main/junk b/attic/dpkg/junk index d5f060d24..d5f060d24 100644 --- a/main/junk +++ b/attic/dpkg/junk diff --git a/scripts/lib.pl b/attic/dpkg/lib.pl index ba9c12765..ba9c12765 100644 --- a/scripts/lib.pl +++ b/attic/dpkg/lib.pl diff --git a/scripts/perl-dpkg.pl b/attic/dpkg/perl-dpkg.pl index ba70fc5f5..ba70fc5f5 100755 --- a/scripts/perl-dpkg.pl +++ b/attic/dpkg/perl-dpkg.pl diff --git a/dselect/junk b/attic/dselect/dselect.junk index e2ae289d8..e2ae289d8 100644 --- a/dselect/junk +++ b/attic/dselect/dselect.junk diff --git a/dselect/kt.c b/attic/dselect/kt.c index d322c68bf..d322c68bf 100644 --- a/dselect/kt.c +++ b/attic/dselect/kt.c diff --git a/attic/scripts/debian-changelog-mode.el b/attic/scripts/debian-changelog-mode.el new file mode 100644 index 000000000..aecfd09ee --- /dev/null +++ b/attic/scripts/debian-changelog-mode.el @@ -0,0 +1,48 @@ +(defvar debian-changelog-urgencies + '((?l."low") (?m."medium") (?h."HIGH")) + "alist of keystrokes vs. urgency values for debian-changelog-urgency \\[debian-changelog-urgency].") + +(defvar debian-changelog-distributions + '((?s."stable") (?u."unstable") (?c."contrib") (?n."non-free") (?e."experimental")) + "alist of keystrokes vs. distribution values for debian-changelog-distribution \\[debian-changelog-distribution].") + +(defun debian-changelog-headervalue (arg re alist) + (let (a b v k + (lineend (save-excursion (end-of-line) (point)))) + (save-excursion + (goto-char (point-min)) + (re-search-forward re lineend) + (setq a (match-beginning 1) + b (match-end 1)) + (goto-char a) + (if arg nil + (message (mapconcat + (function (lambda (x) (format "%c:%s" (car x) (cdr x)))) + alist " ")) + (while (not v) + (setq k (read-char)) + (setq v (assoc k alist)))) + (delete-region a b) + (if arg nil (insert (cdr v)))) + (if arg (goto-char a)))) + +(defun debian-changelog-distribution (arg) + "Without argument, prompt for a key for a new distribution value (using +debian-changelog-distributions). With argument, delete the current distribution +and position the cursor to type a new one." + (interactive "P") + (debian-changelog-headervalue + arg + ") \\(.*\\)\\;" + debian-changelog-distributions)) + +(defun debian-changelog-urgency (arg) + "Without argument, prompt for a key for a new urgency value (using +debian-changelog-urgencies). With argument, delete the current urgency +and position the cursor to type a new one." + (interactive "P") + (debian-changelog-headervalue + arg + "\\;[^\n]* urgency=\\(\\sw+\\)" + debian-changelog-urgencies)) + diff --git a/scripts/start-stop-daemon.pl b/attic/scripts/start-stop-daemon.pl index ecfeb8960..ecfeb8960 100755 --- a/scripts/start-stop-daemon.pl +++ b/attic/scripts/start-stop-daemon.pl diff --git a/scripts/update-rc.d.sh b/attic/scripts/update-rc.d.sh index bc51d1500..4d569ccf9 100755 --- a/scripts/update-rc.d.sh +++ b/attic/scripts/update-rc.d.sh @@ -20,7 +20,7 @@ usage () { echo >&2 "\ update-rc.d: error: $1. usage: update-rc.d <basename> remove update-rc.d <basename> defaults [<cn> | <scn> <kcn>] - update-rc.d <basename> start|stop <cn> <r> <r> . ..."; exit 1 } + update-rc.d <basename> start|stop <cn> <r> <r> . ..."; exit 1; } getinode () { inode="`ls -Li1 \"$1\" | sed -e 's/^ *//; s/ .*//'`" diff --git a/split/magic b/attic/split/magic index b4819a651..b4819a651 100644 --- a/split/magic +++ b/attic/split/magic diff --git a/dpkg-deb/mkdeb.sh b/attic/split/mkdeb.sh index 146dd5362..146dd5362 100644 --- a/dpkg-deb/mkdeb.sh +++ b/attic/split/mkdeb.sh diff --git a/split/old-mksplit.sh b/attic/split/old-mksplit.sh index 8743f9446..8743f9446 100644 --- a/split/old-mksplit.sh +++ b/attic/split/old-mksplit.sh diff --git a/split/junk b/attic/split/split.junk index d71a8cbb3..d71a8cbb3 100644 --- a/split/junk +++ b/attic/split/split.junk diff --git a/automake/dpkg.m4 b/automake/dpkg.m4 new file mode 100644 index 000000000..f5146449d --- /dev/null +++ b/automake/dpkg.m4 @@ -0,0 +1,44 @@ +dnl Moved from configure.in, modified to use AC_DEFUN +dnl -- Tom Lees <tom@lpsg.demon.co.uk> + +dnl DPKG_CACHED_TRY_COMPILE(<description>,<cachevar>,<include>,<program>,<ifyes>,<ifno>) +AC_DEFUN(DPKG_CACHED_TRY_COMPILE,[ + AC_MSG_CHECKING($1) + AC_CACHE_VAL($2,[ + AC_TRY_COMPILE([$3],[$4],[$2=yes],[$2=no]) + ]) + if test "x$$2" = xyes; then + true + $5 + else + true + $6 + fi +]) + +dnl DPKG_C_GCC_TRY_WARNS(<warnings>,<cachevar>) +AC_DEFUN(DPKG_C_GCC_TRY_WARNS,[ + AC_MSG_CHECKING([GCC warning flag(s) $1]) + if test "${GCC-no}" = yes + then + AC_CACHE_VAL($2,[ + oldcflags="${CFLAGS-}" + CFLAGS="${CFLAGS-} ${CWARNS} $1 -Werror" + AC_TRY_COMPILE([ +#include <string.h> +#include <stdio.h> +],[ + strcmp("a","b"); fprintf(stdout,"test ok\n"); +], [$2=yes], [$2=no]) + CFLAGS="${oldcflags}"]) + if test "x$$2" = xyes; then + CWARNS="${CWARNS} $1" + AC_MSG_RESULT(ok) + else + $2='' + AC_MSG_RESULT(no) + fi + else + AC_MSG_RESULT(no, not using GCC) + fi +]) diff --git a/automake/tl_canon.m4 b/automake/tl_canon.m4 new file mode 100644 index 000000000..d8511e48e --- /dev/null +++ b/automake/tl_canon.m4 @@ -0,0 +1,209 @@ +# Our own versions of the other canonicalizing stuff + +dnl replace AC_CANONICAL_xxx + +undefine([AC_CANONICAL_HOST]) +define([AC_CANONICAL_HOST], [tl_CANONICAL_HOST]) +undefine([AC_CANONICAL_BUILD]) +define([AC_CANONICAL_BUILD], [tl_CANONICAL_BUILD]) +undefine([AC_CANONICAL_TARGET]) +define([AC_CANONICAL_TARGET], [tl_CANONICAL_TARGET]) +undefine([AC_CANONICAL_SYSTEM]) +define([AC_CANONICAL_SYSTEM], [tl_CANONICAL_SYSTEM]) + +dnl Canonicalize the host, target, and build system types. +AC_DEFUN(tl_CANONICAL_SYSTEM, +[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl +AC_PROVIDE([AC_CANONICAL_SYSTEM])dnl +AC_BEFORE([$0], [AC_ARG_PROGRAM]) +# Do some error checking and defaulting for the host and target type. +# The inputs are: +# configure --host=HOST --target=TARGET --build=BUILD NONOPT +# +# The rules are: +# 1. You are not allowed to specify --host, --target, and nonopt at the +# same time. +# 2. Host defaults to nonopt. +# 3. If nonopt is not specified, then host defaults to the current host, +# as determined by config.guess. +# 4. Target and build default to nonopt. +# 5. If nonopt is not specified, then target and build default to host. + +# The aliases save the names the user supplied, while $host etc. +# will get canonicalized. +case $host---$target---$nonopt in +NONE---*---* | *---NONE---* | *---*---NONE) ;; +*) AC_MSG_ERROR(can only configure for one host and one target at a time) ;; +esac + +tl_CANONICAL_HOST +tl_CANONICAL_TARGET +tl_CANONICAL_BUILD +test "$host_alias" != "$target_alias" && + test "$program_prefix$program_suffix$program_transform_name" = \ + NONENONEs,x,x, && + program_prefix=${target_alias}- +AC_CHECK_TOOL_PREFIX +]) + +dnl Subroutines of tl_CANONICAL_SYSTEM. + +AC_DEFUN(tl_CANONICAL_HOST, +[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl +AC_PROVIDE([AC_CANONICAL_HOST])dnl + +# Make sure we can run config.sub. +if $ac_config_sub sun4 >/dev/null 2>&1; then : +else AC_MSG_ERROR(can not run $ac_config_sub) +fi + +AC_MSG_CHECKING(host system type) + +dnl Set host_alias. + +if test "${GCC-no}" = "yes"; then +changequote(, )dnl + libgcc="`${CC} --print-libgcc-file-name`" + host_alias="`echo ${libgcc} | + sed -e 's,^.*/gcc-lib/,,; s,/libgcc\.a$,,; s,/egcs-,/,; s,/[0-9.][0-9.]*$,,'`" + case ${host_alias} in + *-linux{,elf,aout}) + host_alias="`echo ${host_alias} | sed 's/\([^-]*\)-linux.*/\1/'`" +changequote([, ])dnl + if ar p "${libgcc}" __main.o 2>/dev/null | file - 2>/dev/null | grep ELF >/dev/null; then + host_alias="${host_alias}-linux" + else + host_alias="${host_alias}-linuxaout" + fi ;; + esac +else + host_alias=$host + case "$host_alias" in + NONE) + case "$nonopt" in + NONE) + if host_alias=`$ac_config_guess`; then host_guessed=y + else AC_MSG_ERROR(can not guess host type; you must specify one) + fi ;; + *) host_alias=$nonopt ;; + esac ;; + esac +fi + +dnl Set the other host vars. +changequote(<<, >>)dnl +host=`$ac_config_sub $host_alias` +host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` +changequote([, ])dnl +AC_MSG_RESULT($host) +AC_SUBST(host)dnl +AC_SUBST(host_alias)dnl +AC_SUBST(host_cpu)dnl +AC_SUBST(host_vendor)dnl +AC_SUBST(host_os)dnl +]) + +dnl Internal use only. +AC_DEFUN(tl_CANONICAL_TARGET, +[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_PROVIDE([AC_CANONICAL_TARGET])dnl +AC_MSG_CHECKING(target system type) + +dnl Set target_alias. +target_alias=$target +case "$target_alias" in +NONE) + case $nonopt in + NONE) + target_cpu="`dpkg --print-architecture`" + if test "$target_cpu" = ""; then + target_alias=$host_alias + else + target_alias="`echo ${host_alias} | sed 's/[^-]*-/${target_cpu}-/'`" + fi + ;; + *) target_alias=$nonopt ;; + esac ;; +esac + +dnl Set the other target vars. +if test $target_alias = $host_alias; then + target=$host + target_cpu=$host_cpu + target_vendor=$host_vendor + target_os=$host_os +elif test $target_alias = "$build_alias"; then + target=$build + target_cpu=$build_cpu + target_vendor=$build_vendor + target_os=$build_os +else +changequote(<<, >>)dnl + target=`$ac_config_sub $target_alias` + target_cpu=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` + target_vendor=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` + target_os=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` +changequote([, ])dnl +fi +AC_MSG_RESULT($target) +AC_SUBST(target)dnl +AC_SUBST(target_alias)dnl +AC_SUBST(target_cpu)dnl +AC_SUBST(target_vendor)dnl +AC_SUBST(target_os)dnl +]) + +AC_DEFUN(tl_CANONICAL_BUILD, +[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_PROVIDE([AC_CANONICAL_BUILD])dnl + +# Make sure we can run config.sub. +#if $ac_config_sub sun4 >/dev/null 2>&1; then : +#else AC_MSG_ERROR(can not run $ac_config_sub) +#fi + +AC_MSG_CHECKING(build system type) + +dnl Set build_alias. +build_alias=$build +case "$build_alias" in +NONE) + case $nonopt in + NONE) + if test "$host_guessed" = "y"; then + build_alias=$host_alias + else + if build_alias=`$ac_config_guess`; then : + else build_alias=$host_alias + fi + fi ;; + *) build_alias=$nonopt ;; + esac ;; +esac + +dnl Set the other build vars. +if test $build_alias = $host_alias; then + build=$host + build_cpu=$host_cpu + build_vendor=$host_vendor + build_os=$host_os +else +changequote(<<, >>)dnl + build=`$ac_config_sub $build_alias` + build_cpu=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` + build_vendor=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` + build_os=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` +changequote([, ])dnl +fi +AC_MSG_RESULT($build) +AC_SUBST(build)dnl +AC_SUBST(build_alias)dnl +AC_SUBST(build_cpu)dnl +AC_SUBST(build_vendor)dnl +AC_SUBST(build_os)dnl +]) diff --git a/automake/tools.m4 b/automake/tools.m4 new file mode 100644 index 000000000..65574d6a7 --- /dev/null +++ b/automake/tools.m4 @@ -0,0 +1,231 @@ +# tl_CHECK_TOOL_PREFIX will work _BEFORE_ AC_CANONICAL_HOST, etc., has been +# called. It should be called again after these have been called. +# +# Basically we want to check if the host alias specified by the user is +# different from the build alias. The rules work like this:- +# +# If host is not specified, it defaults to NONOPT +# If build is not specified, it defaults to NONOPT +# If nonopt is not specified, we guess all other values + +dnl Replace AC_CHECK_TOOL_PREFIX +undefine([AC_CHECK_TOOL_PREFIX]) +define([AC_CHECK_TOOL_PREFIX], [tl_CHECK_TOOL_PREFIX]) + +AC_DEFUN(tl_CHECK_TOOL_PREFIX, +[AC_PROVIDE([AC_CHECK_TOOL_PREFIX]) +AC_BEFORE([AC_CANONICAL_HOST]) +AC_BEFORE([AC_CANONICAL_BUILD]) +dnl Quick check +if test "$host_alias" = ""; then + if test $host = NONE -a $build != NONE; then + thost=$nonopt + else + thost=$host + fi + + if test $thost != $build -a $thost != NONE; then + ac_tool_prefix=${thost}- + ac_tool_dir=${thost} + else + ac_tool_prefix= + ac_tool_dir= + fi +else + if test $host != $build; then + ac_tool_prefix=${host_alias}- + ac_tool_dir=${host_alias} + else + ac_tool_prefix= + ac_tool_dir= + fi +fi +]) + +dnl replacement for AC_CHECK_TOOL +undefine([AC_CHECK_TOOL]) +define([AC_CHECK_TOOL], [tl_CHECK_TOOL($1, $2, $3, $4)]) + +dnl tl_CHECK_TOOL - AC_CHECK_TOOL, with a couple of extra checks +dnl tl_CHECK_TOOL(VARIABLE, PROG-TO-CHECK-FOR[, VALUE-IF-NOT-FOUND [, PATH +dnl [, REJECT]]) +AC_DEFUN(tl_CHECK_TOOL, +[AC_REQUIRE([AC_CHECK_TOOL_PREFIX]) +AC_CHECK_PROG($1, ${ac_tool_prefix}$2, ${ac_tool_prefix}$2, + ifelse([$3], , [$2], ), $4, $5) +if test "$ac_tool_dir" != ""; then + if test -z "$ac_cv_prog_$1" -a "$5" != "/usr/${ac_tool_dir}/bin/$2" -a \ + "$5" != "/usr/local/${ac_tool_dir}/bin/$2"; then + if test -f /usr/${ac_tool_dir}/bin/$2; then $1="/usr/${ac_tool_dir}/bin/$2" + elif test -f /usr/local/${ac_tool_dir}/bin/$2; then $1="/usr/local/${ac_tool_dir}/bin/$2" + fi + fi +fi +ifelse([$3], , , [ +if test -z "$ac_cv_prog_$1"; then +if test -n "$ac_tool_prefix"; then + AC_CHECK_PROG($1, $2, $2, $3, $4, $5) +else + $1="$3" +fi +fi]) +]) + +dnl tl_CHECK_TOOLS - +dnl do a tl_CHECK_TOOL for multiple tools (like AC_CHECK_PROGS) +dnl tl_CHECK_TOOLS(VARIABLE, PROGS-TO-CHECK-FOR [, VALUE-IF-NOT-FOUND +dnl [, PATH]]) +AC_DEFUN(tl_CHECK_TOOLS, +[for ac_tool in $2 +do +tl_CHECK_TOOL($1, [$]ac_tool, [$]ac_tool, , $4) +test -n "[$]$1" && break +done +ifelse([$3], , , [test -n "[$]$1" || $1="$3" +])]) + +dnl replace AC_PROG_CC and AC_PROG_CXX +undefine([AC_PROG_CC]) +define([AC_PROG_CC], [tl_PROG_CC]) +undefine([AC_PROG_CXX]) +define([AC_PROG_CXX], [tl_PROG_CXX]) + +dnl tl_PROG_CC, tl_PROG_CXX - same as old AC_PROG_CC and AC_PROG_CXX, but +dnl use AC_CHECK_TOOL/tl_CHECK_TOOLS instead of AC_CHECK_PROG, etc. +AC_DEFUN(tl_PROG_CC, +[AC_BEFORE([$0], [AC_PROG_CPP])dnl +AC_PROVIDE([AC_PROG_CC])dnl +tl_CHECK_TOOL(CC, gcc, gcc) +if test -z "$CC"; then + AC_CHECK_TOOL(CC, cc, cc, , , /usr/ucb/cc) + test -z "$CC" && AC_MSG_ERROR([no acceptable cc found in \$PATH]) +fi +if test -n "$ac_tool_prefix" -a "`echo $CC | grep '$ac_tool_prefix'`" = "" \ + -a "`echo $CC | grep -- '-b'`" = ""; then + if $CC -v 2>&1 | grep -q gcc; then + AC_CACHE_CHECK([if $CC -b${ac_tool_dir} works], tl_cv_prog_cc_bhost,[ + old_cc="${CC}" + CC="${CC} -b${ac_tool_dir}" + AC_LANG_SAVE + AC_LANG_C + AC_TRY_COMPILER([main(){return(0);}], tl_cv_prog_cc_bhost, ac_cv_prog_cc_cross) + AC_LANG_RESTORE]) + if test $tl_cv_prog_cc_bhost = "yes"; then + ac_cv_prog_cc_works=yes + cctest=yes + else + CC="${old_cc}" + fi + fi +fi + +if test "$cctest" != "yes"; then + tl_PROG_CC_WORKS +fi +AC_PROG_CC_GNU + +if test $ac_cv_prog_gcc = yes; then + GCC=yes +dnl Check whether -g works, even if CFLAGS is set, in case the package +dnl plays around with CFLAGS (such as to build both debugging and +dnl normal versions of a library), tasteless as that idea is. + ac_test_CFLAGS="${CFLAGS+set}" + ac_save_CFLAGS="$CFLAGS" + CFLAGS= + AC_PROG_CC_G + if test "$ac_test_CFLAGS" = set; then + CFLAGS="$ac_save_CFLAGS" + elif test $ac_cv_prog_cc_g = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-O2" + fi +else + GCC= + test "${CFLAGS+set}" = set || CFLAGS="-g" +fi +]) + +AC_DEFUN(tl_PROG_CXX, +[AC_BEFORE([$0], [AC_PROG_CXXCPP])dnl +AC_PROVIDE([AC_PROG_CXX])dnl +tl_CHECK_TOOLS(CXX, $CCC c++ g++ gcc CC cxx cc++, gcc) +if test -n "$CXX"; then + if test -n "$ac_tool_prefix" -a "`echo $CXX | grep '$ac_tool_prefix'`" = "" \ + -a "`echo $CXX | grep -- '-b'`" = ""; then + if $CXX -v 2>&1 | grep -q gcc; then + AC_CACHE_CHECK([if $CXX -b${ac_tool_dir} works], tl_cv_prog_cxx_bhost,[ + old_cxx="${CXX}" + CXX="${CXX} -b${ac_tool_dir}" + AC_LANG_SAVE + AC_LANG_CPLUSPLUS + AC_TRY_COMPILER([main(){return(0);}], tl_cv_prog_cxx_bhost, ac_cv_prog_cxx_cross) + AC_LANG_RESTORE]) + if test $tl_cv_prog_cxx_bhost = "yes"; then + ac_cv_prog_cxx_works=yes + cxxtest=yes + else + CXX="${old_cxx}" + fi + fi + fi + + if test "$cxxtest" != "yes"; then + tl_PROG_CXX_WORKS + fi + AC_PROG_CXX_GNU + + if test $ac_cv_prog_gxx = yes; then + GXX=yes +dnl Check whether -g works, even if CXXFLAGS is set, in case the package +dnl plays around with CXXFLAGS (such as to build both debugging and +dnl normal versions of a library), tasteless as that idea is. + ac_test_CXXFLAGS="${CXXFLAGS+set}" + ac_save_CXXFLAGS="$CXXFLAGS" + CXXFLAGS= + AC_PROG_CXX_G + if test "$ac_test_CXXFLAGS" = set; then + CXXFLAGS="$ac_save_CXXFLAGS" + elif test $ac_cv_prog_cxx_g = yes; then + CXXFLAGS="-g -O2" + else + CXXFLAGS="-O2" + fi + else + GXX= + test "${CXXFLAGS+set}" = set || CXXFLAGS="-g" + fi +fi +]) + +AC_DEFUN(tl_PROG_CC_WORKS, +[AC_PROVIDE(AC_PROG_CC_WORKS) +AC_CACHE_CHECK([whether the C compiler ($CC $CFLAGS $LDFLAGS) works], + ac_cv_prog_cc_works, [ +AC_LANG_SAVE +AC_LANG_C +AC_TRY_COMPILER([main(){return(0);}], ac_cv_prog_cc_works, ac_cv_prog_cc_cross) +AC_LANG_RESTORE +if test $ac_cv_prog_cc_works = no; then + AC_MSG_ERROR([installation or configuration problem: C compiler cannot create executables.]) +fi]) +AC_MSG_CHECKING([whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler]) +AC_MSG_RESULT($ac_cv_prog_cc_cross) +cross_compiling=$ac_cv_prog_cc_cross +]) + +AC_DEFUN(tl_PROG_CXX_WORKS, +[AC_PROVIDE(AC_PROG_CXX_WORKS) +AC_CACHE_CHECK([whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works], + ac_cv_prog_cxx_works, [ +AC_LANG_SAVE +AC_LANG_CPLUSPLUS +AC_TRY_COMPILER([main(){return(0);}], ac_cv_prog_cxx_works, ac_cv_prog_cxx_cross) +AC_LANG_RESTORE +if test $ac_cv_prog_cxx_works = no; then + AC_MSG_ERROR([installation or configuration problem: C++ compiler cannot create executables.]) +fi]) +AC_MSG_CHECKING([whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler]) +AC_MSG_RESULT($ac_cv_prog_cxx_cross) +cross_compiling=$ac_cv_prog_cxx_cross +]) diff --git a/config.h.bot b/config.h.bot index 06751db09..c62fdbd62 100644 --- a/config.h.bot +++ b/config.h.bot @@ -48,13 +48,14 @@ #ifndef ATTRNORETURN #ifdef HAVE_GNUC25_NORETURN #define ATTRNORETURN noreturn -#else +#else /* ! HAVE_GNUC25_NORETURN */ #define ATTRNORETURN -#endif -#endif +#endif /* HAVE_GNUC25_NORETURN */ +#endif /* ATTRNORETURN */ + #ifndef NONRETURNING #define NONRETURNING FUNCATTR((ATTRNORETURN)) -#endif +#endif /* NONRETURNING */ /* Combination of both the above. */ #ifndef NONRETURNPRINTFFORMAT diff --git a/config.h.in b/config.h.in deleted file mode 100644 index 92b42a7e2..000000000 --- a/config.h.in +++ /dev/null @@ -1,218 +0,0 @@ -/* config.h.in. Generated automatically from configure.in by autoheader. */ - -/* Define to empty if the keyword does not work. */ -#undef const - -/* Define if you don't have vprintf but do have _doprnt. */ -#undef HAVE_DOPRNT - -/* Define if you have the vprintf function. */ -#undef HAVE_VPRINTF - -/* Define to `int' if <sys/types.h> doesn't define. */ -#undef mode_t - -/* Define to `int' if <sys/types.h> doesn't define. */ -#undef pid_t - -/* Define to `unsigned' if <sys/types.h> doesn't define. */ -#undef size_t - -/* Define if you have the ANSI C header files. */ -#undef STDC_HEADERS - -/* Define if your processor stores words with the most significant - byte first (like Motorola and SPARC, unlike Intel and VAX). */ -#undef WORDS_BIGENDIAN - -/* Define if inline functions a la GCC are available. */ -#undef HAVE_INLINE - -/* Define if sysinfo is available. */ -#undef HAVE_SYSINFO - -/* Define if __NR_sysinfo is available. */ -#undef HAVE_NRSYSINFO - -/* Define if inline functions a la GCC are available. */ -#undef HAVE_ALPHASORT_DECLARATION - -/* Define if function attributes a la GCC 2.5 and higher are available. */ -#undef HAVE_GNUC25_ATTRIB - -/* Define if constant functions a la GCC 2.5 and higher are available. */ -#undef HAVE_GNUC25_CONST - -/* Define if nonreturning functions a la GCC 2.5 and higher are available. */ -#undef HAVE_GNUC25_NORETURN - -/* Define if printf-format argument lists a la GCC are available. */ -#undef HAVE_GNUC25_PRINTFFORMAT - -/* Set this to the canonical Debian architecture string for this CPU type. */ -#undef ARCHITECTURE - -/* Set this to 1 to build new archives by default. */ -#define BUILDOLDPKGFORMAT 0 - -/* Set this string to append something to the version number. */ -#define ARCHBINFMT "" - -/* The number of bytes in a unsigned int. */ -#undef SIZEOF_UNSIGNED_INT - -/* The number of bytes in a unsigned long. */ -#undef SIZEOF_UNSIGNED_LONG - -/* Define if you have the alphasort function. */ -#undef HAVE_ALPHASORT - -/* Define if you have the scandir function. */ -#undef HAVE_SCANDIR - -/* Define if you have the strerror function. */ -#undef HAVE_STRERROR - -/* Define if you have the strsignal function. */ -#undef HAVE_STRSIGNAL - -/* Define if you have the strtoul function. */ -#undef HAVE_STRTOUL - -/* Define if you have the unsetenv function. */ -#undef HAVE_UNSETENV - -/* Define if you have the vsnprintf function. */ -#undef HAVE_VSNPRINTF - -/* Define if you have the <sys/cdefs.h> header file. */ -#undef HAVE_SYS_CDEFS_H - -/* These are from config.h.bot, pasted onto the end of config.h.in. */ - -#ifdef HAVE_SYS_CDEFS_H -#include <sys/cdefs.h> -#endif - -/* Use the definitions: */ - -/* Give us an unsigned 32-bit data type. */ -#if SIZEOF_UNSIGNED_LONG==4 -#define UWORD32 unsigned long -#elif SIZEOF_UNSIGNED_INT==4 -#define UWORD32 unsigned int -#else -#error I do not know what to use for a UWORD32. -#endif - -/* The maximum length of a #! interpreter displayed by dpkg-deb. */ -#ifdef PATH_MAX -#define INTERPRETER_MAX PATH_MAX -#else -#define INTERPRETER_MAX 1024 -#endif - -/* GNU C attributes. */ -#ifndef FUNCATTR -#ifdef HAVE_GNUC25_ATTRIB -#define FUNCATTR(x) __attribute__(x) -#else -#define FUNCATTR(x) -#endif -#endif - -/* GNU C printf formats, or null. */ -#ifndef ATTRPRINTF -#ifdef HAVE_GNUC25_PRINTFFORMAT -#define ATTRPRINTF(si,tc) format(printf,si,tc) -#else -#define ATTRPRINTF(si,tc) -#endif -#endif -#ifndef PRINTFFORMAT -#define PRINTFFORMAT(si,tc) FUNCATTR((ATTRPRINTF(si,tc))) -#endif - -/* GNU C nonreturning functions, or null. */ -#ifndef ATTRNORETURN -#ifdef HAVE_GNUC25_NORETURN -#define ATTRNORETURN noreturn -#else -#define ATTRNORETURN -#endif -#endif -#ifndef NONRETURNING -#define NONRETURNING FUNCATTR((ATTRNORETURN)) -#endif - -/* Combination of both the above. */ -#ifndef NONRETURNPRINTFFORMAT -#define NONRETURNPRINTFFORMAT(si,tc) FUNCATTR((ATTRPRINTF(si,tc),ATTRNORETURN)) -#endif - -/* GNU C constant functions, or null. */ -#ifndef ATTRCONST -#ifdef HAVE_GNUC25_CONST -#define ATTRCONST const -#else -#define ATTRCONST -#endif -#endif -#ifndef CONSTANT -#define CONSTANT FUNCATTR((ATTRCONST)) -#endif - -/* Declare strerror if we don't have it already. */ -#ifndef HAVE_STRERROR -const char *strerror(int); -#endif - -/* Declare strsignal if we don't have it already. */ -#ifndef HAVE_STRSIGNAL -const char *strsignal(int); -#endif - -/* Declare scandir if we don't have it already. */ -#ifndef HAVE_SCANDIR -struct dirent; -int scandir(const char *dir, struct dirent ***namelist, - int (*select)(const struct dirent *), - int (*compar)(const void*, const void*)); -#endif - -/* Declare alphasort if we don't have it already. */ -#if !defined(HAVE_ALPHASORT) || !defined(HAVE_ALPHASORT_DECLARATION) -struct dirent; -int alphasort(const struct dirent *a, const struct dirent *b); -#endif - -/* Declare unsetenv if we don't have it already. */ -#ifndef HAVE_UNSETENV -void unsetenv(const char *x); -#endif - -/* Define strtoul if we don't have it already. */ -#ifndef HAVE_STRTOUL -#define strtoul strtol -#endif - -/* Sort out sysinfo */ -#if !defined(HAVE_SYSINFO) && defined(HAVE_NRSYSINFO) -#include <linux/sys.h> -#include <linux/kernel.h> -#include <linux/unistd.h> -static inline _syscall1(int,sysinfo,struct sysinfo*,info) -#endif - -/* Define WCOREDUMP if we don't have it already - coredumps won't be - * detected, though. - */ -#ifndef WCOREDUMP -#define WCOREDUMP(x) 0 -#endif - -/* Set BUILDOLDPKGFORMAT to 1 to build old-format archives by default. - */ -#ifndef BUILDOLDPKGFORMAT -#define BUILDOLDPKGFORMAT 0 -#endif diff --git a/configure b/configure deleted file mode 100755 index 0b3d8fbff..000000000 --- a/configure +++ /dev/null @@ -1,2533 +0,0 @@ -#! /bin/sh - -# Guess values for system-dependent variables and create Makefiles. -# Generated automatically using autoconf version 2.10 -# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. -# -# This configure script is free software; the Free Software Foundation -# gives unlimited permission to copy, distribute and modify it. - -# Defaults: -ac_help= -ac_default_prefix=/usr/local -# Any additions from configure.in: -ac_default_prefix=/usr -ac_help="$ac_help - --with-arch=value set/override (Debian) architecture value" -ac_help="$ac_help - --with-newdeb make dpkg-deb default to new archives" -ac_help="$ac_help - --with-olddeb make dpkg-deb default to old archives" - -# Initialize some variables set by options. -# The variables have the same names as the options, with -# dashes changed to underlines. -build=NONE -cache_file=./config.cache -exec_prefix=NONE -host=NONE -no_create= -nonopt=NONE -no_recursion= -prefix=NONE -program_prefix=NONE -program_suffix=NONE -program_transform_name=s,x,x, -silent= -site= -srcdir= -target=NONE -verbose= -x_includes=NONE -x_libraries=NONE -bindir='${exec_prefix}/bin' -sbindir='${exec_prefix}/sbin' -libexecdir='${exec_prefix}/libexec' -datadir='${prefix}/share' -sysconfdir='${prefix}/etc' -sharedstatedir='${prefix}/com' -localstatedir='${prefix}/var' -libdir='${exec_prefix}/lib' -includedir='${prefix}/include' -oldincludedir='/usr/include' -infodir='${prefix}/info' -mandir='${prefix}/man' - -# Initialize some other variables. -subdirs= -MFLAGS= MAKEFLAGS= - -ac_prev= -for ac_option -do - - # If the previous option needs an argument, assign it. - if test -n "$ac_prev"; then - eval "$ac_prev=\$ac_option" - ac_prev= - continue - fi - - case "$ac_option" in - -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; - *) ac_optarg= ;; - esac - - # Accept the important Cygnus configure options, so we can diagnose typos. - - case "$ac_option" in - - -bindir | --bindir | --bindi | --bind | --bin | --bi) - ac_prev=bindir ;; - -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) - bindir="$ac_optarg" ;; - - -build | --build | --buil | --bui | --bu) - ac_prev=build ;; - -build=* | --build=* | --buil=* | --bui=* | --bu=*) - build="$ac_optarg" ;; - - -cache-file | --cache-file | --cache-fil | --cache-fi \ - | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) - ac_prev=cache_file ;; - -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ - | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) - cache_file="$ac_optarg" ;; - - -datadir | --datadir | --datadi | --datad | --data | --dat | --da) - ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ - | --da=*) - datadir="$ac_optarg" ;; - - -disable-* | --disable-*) - ac_feature=`echo $ac_option|sed -e 's/-*disable-//'` - # Reject names that are not valid shell variable names. - if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then - { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } - fi - ac_feature=`echo $ac_feature| sed 's/-/_/g'` - eval "enable_${ac_feature}=no" ;; - - -enable-* | --enable-*) - ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'` - # Reject names that are not valid shell variable names. - if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then - { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } - fi - ac_feature=`echo $ac_feature| sed 's/-/_/g'` - case "$ac_option" in - *=*) ;; - *) ac_optarg=yes ;; - esac - eval "enable_${ac_feature}='$ac_optarg'" ;; - - -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ - | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ - | --exec | --exe | --ex) - ac_prev=exec_prefix ;; - -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ - | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ - | --exec=* | --exe=* | --ex=*) - exec_prefix="$ac_optarg" ;; - - -gas | --gas | --ga | --g) - # Obsolete; use --with-gas. - with_gas=yes ;; - - -help | --help | --hel | --he) - # Omit some internal or obsolete options to make the list less imposing. - # This message is too long to be a string in the A/UX 3.1 sh. - cat << EOF -Usage: configure [options] [host] -Options: [defaults in brackets after descriptions] -Configuration: - --cache-file=FILE cache test results in FILE - --help print this message - --no-create do not create output files - --quiet, --silent do not print \`checking...' messages - --version print the version of autoconf that created configure -Directory and file names: - --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] - --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [same as prefix] - --bindir=DIR user executables in DIR [EPREFIX/bin] - --sbindir=DIR system admin executables in DIR [EPREFIX/sbin] - --libexecdir=DIR program executables in DIR [EPREFIX/libexec] - --datadir=DIR read-only architecture-independent data in DIR - [PREFIX/share] - --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data in DIR - [PREFIX/com] - --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var] - --libdir=DIR object code libraries in DIR [EPREFIX/lib] - --includedir=DIR C header files in DIR [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include] - --infodir=DIR info documentation in DIR [PREFIX/info] - --mandir=DIR man documentation in DIR [PREFIX/man] - --srcdir=DIR find the sources in DIR [configure dir or ..] - --program-prefix=PREFIX prepend PREFIX to installed program names - --program-suffix=SUFFIX append SUFFIX to installed program names - --program-transform-name=PROGRAM - run sed PROGRAM on installed program names -EOF - cat << EOF -Host type: - --build=BUILD configure for building on BUILD [BUILD=HOST] - --host=HOST configure for HOST [guessed] - --target=TARGET configure for TARGET [TARGET=HOST] -Features and packages: - --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) - --enable-FEATURE[=ARG] include FEATURE [ARG=yes] - --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] - --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --x-includes=DIR X include files are in DIR - --x-libraries=DIR X library files are in DIR -EOF - if test -n "$ac_help"; then - echo "--enable and --with options recognized:$ac_help" - fi - exit 0 ;; - - -host | --host | --hos | --ho) - ac_prev=host ;; - -host=* | --host=* | --hos=* | --ho=*) - host="$ac_optarg" ;; - - -includedir | --includedir | --includedi | --included | --include \ - | --includ | --inclu | --incl | --inc) - ac_prev=includedir ;; - -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ - | --includ=* | --inclu=* | --incl=* | --inc=*) - includedir="$ac_optarg" ;; - - -infodir | --infodir | --infodi | --infod | --info | --inf) - ac_prev=infodir ;; - -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) - infodir="$ac_optarg" ;; - - -libdir | --libdir | --libdi | --libd) - ac_prev=libdir ;; - -libdir=* | --libdir=* | --libdi=* | --libd=*) - libdir="$ac_optarg" ;; - - -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ - | --libexe | --libex | --libe) - ac_prev=libexecdir ;; - -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ - | --libexe=* | --libex=* | --libe=*) - libexecdir="$ac_optarg" ;; - - -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst \ - | --locals | --local | --loca | --loc | --lo) - ac_prev=localstatedir ;; - -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* \ - | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) - localstatedir="$ac_optarg" ;; - - -mandir | --mandir | --mandi | --mand | --man | --ma | --m) - ac_prev=mandir ;; - -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) - mandir="$ac_optarg" ;; - - -nfp | --nfp | --nf) - # Obsolete; use --without-fp. - with_fp=no ;; - - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c) - no_create=yes ;; - - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) - no_recursion=yes ;; - - -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ - | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ - | --oldin | --oldi | --old | --ol | --o) - ac_prev=oldincludedir ;; - -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ - | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ - | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) - oldincludedir="$ac_optarg" ;; - - -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) - ac_prev=prefix ;; - -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - prefix="$ac_optarg" ;; - - -program-prefix | --program-prefix | --program-prefi | --program-pref \ - | --program-pre | --program-pr | --program-p) - ac_prev=program_prefix ;; - -program-prefix=* | --program-prefix=* | --program-prefi=* \ - | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) - program_prefix="$ac_optarg" ;; - - -program-suffix | --program-suffix | --program-suffi | --program-suff \ - | --program-suf | --program-su | --program-s) - ac_prev=program_suffix ;; - -program-suffix=* | --program-suffix=* | --program-suffi=* \ - | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) - program_suffix="$ac_optarg" ;; - - -program-transform-name | --program-transform-name \ - | --program-transform-nam | --program-transform-na \ - | --program-transform-n | --program-transform- \ - | --program-transform | --program-transfor \ - | --program-transfo | --program-transf \ - | --program-trans | --program-tran \ - | --progr-tra | --program-tr | --program-t) - ac_prev=program_transform_name ;; - -program-transform-name=* | --program-transform-name=* \ - | --program-transform-nam=* | --program-transform-na=* \ - | --program-transform-n=* | --program-transform-=* \ - | --program-transform=* | --program-transfor=* \ - | --program-transfo=* | --program-transf=* \ - | --program-trans=* | --program-tran=* \ - | --progr-tra=* | --program-tr=* | --program-t=*) - program_transform_name="$ac_optarg" ;; - - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - silent=yes ;; - - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) - ac_prev=sbindir ;; - -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ - | --sbi=* | --sb=*) - sbindir="$ac_optarg" ;; - - -sharedstatedir | --sharedstatedir | --sharedstatedi \ - | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ - | --sharedst | --shareds | --shared | --share | --shar \ - | --sha | --sh) - ac_prev=sharedstatedir ;; - -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ - | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ - | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ - | --sha=* | --sh=*) - sharedstatedir="$ac_optarg" ;; - - -site | --site | --sit) - ac_prev=site ;; - -site=* | --site=* | --sit=*) - site="$ac_optarg" ;; - - -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) - ac_prev=srcdir ;; - -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) - srcdir="$ac_optarg" ;; - - -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ - | --syscon | --sysco | --sysc | --sys | --sy) - ac_prev=sysconfdir ;; - -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ - | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) - sysconfdir="$ac_optarg" ;; - - -target | --target | --targe | --targ | --tar | --ta | --t) - ac_prev=target ;; - -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) - target="$ac_optarg" ;; - - -v | -verbose | --verbose | --verbos | --verbo | --verb) - verbose=yes ;; - - -version | --version | --versio | --versi | --vers) - echo "configure generated by autoconf version 2.10" - exit 0 ;; - - -with-* | --with-*) - ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'` - # Reject names that are not valid shell variable names. - if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then - { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } - fi - ac_package=`echo $ac_package| sed 's/-/_/g'` - case "$ac_option" in - *=*) ;; - *) ac_optarg=yes ;; - esac - eval "with_${ac_package}='$ac_optarg'" ;; - - -without-* | --without-*) - ac_package=`echo $ac_option|sed -e 's/-*without-//'` - # Reject names that are not valid shell variable names. - if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then - { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } - fi - ac_package=`echo $ac_package| sed 's/-/_/g'` - eval "with_${ac_package}=no" ;; - - --x) - # Obsolete; use --with-x. - with_x=yes ;; - - -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ - | --x-incl | --x-inc | --x-in | --x-i) - ac_prev=x_includes ;; - -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ - | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) - x_includes="$ac_optarg" ;; - - -x-libraries | --x-libraries | --x-librarie | --x-librari \ - | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) - ac_prev=x_libraries ;; - -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ - | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) - x_libraries="$ac_optarg" ;; - - -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; } - ;; - - *) - if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then - echo "configure: warning: $ac_option: invalid host type" 1>&2 - fi - if test "x$nonopt" != xNONE; then - { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } - fi - nonopt="$ac_option" - ;; - - esac -done - -if test -n "$ac_prev"; then - { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; } -fi - -trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 - -# File descriptor usage: -# 0 standard input -# 1 file creation -# 2 errors and warnings -# 3 some systems may open it to /dev/tty -# 4 used on the Kubota Titan -# 6 checking for... messages and results -# 5 compiler messages saved in config.log -if test "$silent" = yes; then - exec 6>/dev/null -else - exec 6>&1 -fi -exec 5>./config.log - -echo "\ -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. -" 1>&5 - -# Strip out --no-create and --no-recursion so they do not pile up. -# Also quote any args containing shell metacharacters. -ac_configure_args= -for ac_arg -do - case "$ac_arg" in - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c) ;; - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;; - *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) - ac_configure_args="$ac_configure_args '$ac_arg'" ;; - *) ac_configure_args="$ac_configure_args $ac_arg" ;; - esac -done - -# NLS nuisances. -# Only set LANG and LC_ALL to C if already set. -# These must not be set unconditionally because not all systems understand -# e.g. LANG=C (notably SCO). -if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi -if test "${LANG+set}" = set; then LANG=C; export LANG; fi - -# confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -rf conftest* confdefs.h -# AIX cpp loses on an empty file, so make sure it contains at least a newline. -echo > confdefs.h - -# A filename unique to this package, relative to the directory that -# configure is in, which we can look for to find out if srcdir is correct. -ac_unique_file=include/dpkg.h - -# Find the source files, if location was not specified. -if test -z "$srcdir"; then - ac_srcdir_defaulted=yes - # Try the directory containing this script, then its parent. - ac_prog=$0 - ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'` - test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. - srcdir=$ac_confdir - if test ! -r $srcdir/$ac_unique_file; then - srcdir=.. - fi -else - ac_srcdir_defaulted=no -fi -if test ! -r $srcdir/$ac_unique_file; then - if test "$ac_srcdir_defaulted" = yes; then - { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; } - else - { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; } - fi -fi -srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'` - -# Prefer explicitly selected file to automatically selected ones. -if test -z "$CONFIG_SITE"; then - if test "x$prefix" != xNONE; then - CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" - else - CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" - fi -fi -for ac_site_file in $CONFIG_SITE; do - if test -r "$ac_site_file"; then - echo "loading site script $ac_site_file" - . "$ac_site_file" - fi -done - -if test -r "$cache_file"; then - echo "loading cache $cache_file" - . $cache_file -else - echo "creating cache $cache_file" - > $cache_file -fi - -ac_ext=c -# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. -ac_cpp='$CPP $CPPFLAGS' -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' -ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' - -if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then - # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. - if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then - ac_n= ac_c=' -' ac_t=' ' - else - ac_n=-n ac_c= ac_t= - fi -else - ac_n= ac_c='\c' ac_t= -fi - - - - - - -# Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" - for ac_dir in $PATH; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_prog_CC="gcc" - break - fi - done - IFS="$ac_save_ifs" -fi -fi -CC="$ac_cv_prog_CC" -if test -n "$CC"; then - echo "$ac_t""$CC" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - -if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" - ac_prog_rejected=no - for ac_dir in $PATH; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - break - fi - done - IFS="$ac_save_ifs" -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_CC - shift - if test $# -gt 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set CC to just the basename; use the full file name. - shift - set dummy "$ac_dir/$ac_word" "$@" - shift - ac_cv_prog_CC="$@" - fi -fi -fi -fi -CC="$ac_cv_prog_CC" -if test -n "$CC"; then - echo "$ac_t""$CC" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - - test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; } -fi - -echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 -if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.c <<EOF -#ifdef __GNUC__ - yes; -#endif -EOF -if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:613: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then - ac_cv_prog_gcc=yes -else - ac_cv_prog_gcc=no -fi -fi - -echo "$ac_t""$ac_cv_prog_gcc" 1>&6 -if test $ac_cv_prog_gcc = yes; then - GCC=yes - if test "${CFLAGS+set}" != set; then - echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 -if eval "test \"`echo '$''{'ac_cv_prog_gcc_g'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - echo 'void f(){}' > conftest.c -if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then - ac_cv_prog_gcc_g=yes -else - ac_cv_prog_gcc_g=no -fi -rm -f conftest* - -fi - -echo "$ac_t""$ac_cv_prog_gcc_g" 1>&6 - if test $ac_cv_prog_gcc_g = yes; then - CFLAGS="-g -O" - else - CFLAGS="-O" - fi - fi -else - GCC= - test "${CFLAGS+set}" = set || CFLAGS="-g" -fi - -for ac_prog in $CCC c++ g++ gcc CC cxx -do -# Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -if eval "test \"`echo '$''{'ac_cv_prog_CXX'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test -n "$CXX"; then - ac_cv_prog_CXX="$CXX" # Let the user override the test. -else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" - for ac_dir in $PATH; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_prog_CXX="$ac_prog" - break - fi - done - IFS="$ac_save_ifs" -fi -fi -CXX="$ac_cv_prog_CXX" -if test -n "$CXX"; then - echo "$ac_t""$CXX" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - -test -n "$CXX" && break -done -test -n "$CXX" || CXX="gcc" - - -echo $ac_n "checking whether we are using GNU C++""... $ac_c" 1>&6 -if eval "test \"`echo '$''{'ac_cv_prog_gxx'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.C <<EOF -#ifdef __GNUC__ - yes; -#endif -EOF -if { ac_try='${CXX-g++} -E conftest.C'; { (eval echo configure:693: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then - ac_cv_prog_gxx=yes -else - ac_cv_prog_gxx=no -fi -fi - -echo "$ac_t""$ac_cv_prog_gxx" 1>&6 -if test $ac_cv_prog_gxx = yes; then - GXX=yes - if test "${CXXFLAGS+set}" != set; then - echo $ac_n "checking whether ${CXX-g++} accepts -g""... $ac_c" 1>&6 -if eval "test \"`echo '$''{'ac_cv_prog_gxx_g'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - echo 'void f(){}' > conftest.cc -if test -z "`${CXX-g++} -g -c conftest.cc 2>&1`"; then - ac_cv_prog_gxx_g=yes -else - ac_cv_prog_gxx_g=no -fi -rm -f conftest* - -fi - -echo "$ac_t""$ac_cv_prog_gxx_g" 1>&6 - if test $ac_cv_prog_gxx_g = yes; then - CXXFLAGS="-g -O" - else - CXXFLAGS="-O" - fi - fi -else - GXX= - test "${CXXFLAGS+set}" = set || CXXFLAGS="-g" -fi - - -dpkg_archset='' -# Check whether --with-arch or --without-arch was given. -if test "${with_arch+set}" = set; then - withval="$with_arch" - - if test "x$with_arch" = x; then - { echo "configure: error: --with-arch requires an architecture name" 1>&2; exit 1; } - fi - dpkg_archset="${with_arch}" - -else - - echo $ac_n "checking system architecture""... $ac_c" 1>&6 - dpkg_archwhy='' - if eval "test \"`echo '$''{'dpkg_cv_arch'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - - dpkg_arch="`dpkg --print-architecture 2>/dev/null`" - if test "x$dpkg_arch" != x; then - dpkg_archwhy=" (obtained from dpkg)" - elif test "${GCC-no}" = yes; then - dpkg_arch="`${CC} --print-libgcc-file-name | - sed -e 's,^.*/gcc-lib/,,; s,/libgcc\.a$,,; s,/[0-9.][0-9.]*$,,; s/-.*$//'`" - if test "x`echo \"$dpkg_arch\" | tr -d a-z0-9-`" != x -o "x$dpkg_arch" = x - then - dpkg_arch="" - dpkg_archwhy=" (bad output from --print-libgcc-file-name)" - else - dpkg_arch2="`awk '$1 == "'$dpkg_arch'" { print $2 }' $srcdir/archtable`" - if test "x$dpkg_arch2" = "x$dpkg_arch"; then - dpkg_archwhy=" (obtained from gcc)" - elif test "x$dpkg_arch2" != x; then - dpkg_archwhy=" (from gcc, canonical form of $dpkg_arch)" - dpkg_arch="$dpkg_arch2" - else - dpkg_archwhy=" (from gcc, but not in archtable)" - fi - fi - else - dpkg_archwhy='' - fi - dpkg_cv_arch="$dpkg_arch" - -fi - - if test "x$dpkg_cv_arch" != x; then - echo "$ac_t"""$dpkg_cv_arch$dpkg_archwhy"" 1>&6 - dpkg_archset="${dpkg_cv_arch}" - else - echo "$ac_t"""failed$dpkg_archwhy"" 1>&6 - fi - -fi - -if test "x$dpkg_archset" != x -then - cat >> confdefs.h <<EOF -#define ARCHITECTURE "${dpkg_cv_arch}" -EOF - -fi - -if test "x${dpkg_archset}" = xi386; then - echo $ac_n "checking for i386 system/binary format""... $ac_c" 1>&6 - dpkg_libgcc="`$CC --print-libgcc-file-name 2>/dev/null`" - case "$dpkg_libgcc" in - *-linux*) - if ar p "$dpkg_libgcc" __main.o 2>/dev/null | file - 2>/dev/null | grep ELF >/dev/null; then - echo "$ac_t""Linux ELF" 1>&6 - dpkg_cc_binfmt=elf - else - echo "$ac_t""Linux a.out" 1>&6 - dpkg_cc_binfmt=a.out - fi - cat >> confdefs.h <<EOF -#define ARCHBINFMT " $dpkg_cc_binfmt" -EOF - - ;; - *) - echo "$ac_t""non-Linux" 1>&6 - ;; - esac -fi - -# Check whether --with-newdeb or --without-newdeb was given. -if test "${with_newdeb+set}" = set; then - withval="$with_newdeb" - cat >> confdefs.h <<\EOF -#define BUILDOLDPKGFORMAT 0 -EOF - -fi - -# Check whether --with-olddeb or --without-olddeb was given. -if test "${with_olddeb+set}" = set; then - withval="$with_olddeb" - cat >> confdefs.h <<\EOF -#define BUILDOLDPKGFORMAT 1 -EOF - -fi - - -echo $ac_n "checking for /usr/bin/perl""... $ac_c" 1>&6 -if test -f /usr/bin/perl -then - echo "$ac_t""yes" 1>&6 - perlpath=/usr/bin/perl - -else - echo "$ac_t""no" 1>&6 - # Extract the first word of "perl", so it can be a program name with args. -set dummy perl; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -if eval "test \"`echo '$''{'ac_cv_path_perlpath'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - case "$perlpath" in - /*) - ac_cv_path_perlpath="$perlpath" # Let the user override the test with a path. - ;; - *) - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" - for ac_dir in $PATH; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_path_perlpath="$ac_dir/$ac_word" - break - fi - done - IFS="$ac_save_ifs" - ;; -esac -fi -perlpath="$ac_cv_path_perlpath" -if test -n "$perlpath"; then - echo "$ac_t""$perlpath" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - -fi - -echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then -if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - # This must be in double quotes, not single quotes, because CPP may get - # substituted into the Makefile and "${CC-cc}" will confuse make. - CPP="${CC-cc} -E" - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. - cat > conftest.$ac_ext <<EOF -#line 891 "configure" -#include "confdefs.h" -#include <assert.h> -Syntax Error -EOF -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:897: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out` -if test -z "$ac_err"; then - : -else - echo "$ac_err" >&5 - rm -rf conftest* - CPP="${CC-cc} -E -traditional-cpp" - cat > conftest.$ac_ext <<EOF -#line 906 "configure" -#include "confdefs.h" -#include <assert.h> -Syntax Error -EOF -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:912: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out` -if test -z "$ac_err"; then - : -else - echo "$ac_err" >&5 - rm -rf conftest* - CPP=/lib/cpp -fi -rm -f conftest* -fi -rm -f conftest* - ac_cv_prog_CPP="$CPP" -fi - CPP="$ac_cv_prog_CPP" -else - ac_cv_prog_CPP="$CPP" -fi -echo "$ac_t""$CPP" 1>&6 - -# If we cannot run a trivial program, we must be cross compiling. -echo $ac_n "checking whether cross-compiling""... $ac_c" 1>&6 -if eval "test \"`echo '$''{'ac_cv_c_cross'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test "$cross_compiling" = yes; then - ac_cv_c_cross=yes -else -cat > conftest.$ac_ext <<EOF -#line 941 "configure" -#include "confdefs.h" -main(){return(0);} -EOF -{ (eval echo configure:945: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } -if test -s conftest && (./conftest; exit) 2>/dev/null; then - ac_cv_c_cross=no -else - ac_cv_c_cross=yes -fi -fi -rm -fr conftest* -fi - -echo "$ac_t""$ac_cv_c_cross" 1>&6 -cross_compiling=$ac_cv_c_cross - -echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 -if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 963 "configure" -#include "confdefs.h" -#include <stdlib.h> -#include <stdarg.h> -#include <string.h> -#include <float.h> -EOF -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:971: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out` -if test -z "$ac_err"; then - rm -rf conftest* - ac_cv_header_stdc=yes -else - echo "$ac_err" >&5 - rm -rf conftest* - ac_cv_header_stdc=no -fi -rm -f conftest* - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. -cat > conftest.$ac_ext <<EOF -#line 986 "configure" -#include "confdefs.h" -#include <string.h> -EOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - egrep "memchr" >/dev/null 2>&1; then - : -else - rm -rf conftest* - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. -cat > conftest.$ac_ext <<EOF -#line 1004 "configure" -#include "confdefs.h" -#include <stdlib.h> -EOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - egrep "free" >/dev/null 2>&1; then - : -else - rm -rf conftest* - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. -if test "$cross_compiling" = yes; then - : -else -cat > conftest.$ac_ext <<EOF -#line 1025 "configure" -#include "confdefs.h" -#include <ctype.h> -#define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -#define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int main () { int i; for (i = 0; i < 256; i++) -if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); -exit (0); } - -EOF -{ (eval echo configure:1036: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } -if test -s conftest && (./conftest; exit) 2>/dev/null; then - : -else - ac_cv_header_stdc=no -fi -fi -rm -fr conftest* -fi -fi - -echo "$ac_t""$ac_cv_header_stdc" 1>&6 -if test $ac_cv_header_stdc = yes; then - cat >> confdefs.h <<\EOF -#define STDC_HEADERS 1 -EOF - -fi - -ac_aux_dir= -for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do - if test -f $ac_dir/install-sh; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install-sh -c" - break - elif test -f $ac_dir/install.sh; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install.sh -c" - break - fi -done -if test -z "$ac_aux_dir"; then - { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; } -fi -ac_config_guess=$ac_aux_dir/config.guess -ac_config_sub=$ac_aux_dir/config.sub -ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. - -# Find a good install program. We prefer a C program (faster), -# so one script is as good as another. But avoid the broken or -# incompatible versions: -# SysV /etc/install, /usr/sbin/install -# SunOS /usr/etc/install -# IRIX /sbin/install -# AIX /bin/install -# AFS /usr/afsws/bin/install, which mishandles nonexistent args -# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" -# ./install, which can be erroneously created by make from ./install.sh. -echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 -if test -z "$INSTALL"; then -if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" - for ac_dir in $PATH; do - # Account for people who put trailing slashes in PATH elements. - case "$ac_dir/" in - /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;; - *) - # OSF1 and SCO ODT 3.0 have their own names for install. - for ac_prog in ginstall installbsd scoinst install; do - if test -f $ac_dir/$ac_prog; then - if test $ac_prog = install && - grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then - # AIX install. It has an incompatible calling convention. - # OSF/1 installbsd also uses dspmsg, but is usable. - : - else - ac_cv_path_install="$ac_dir/$ac_prog -c" - break 2 - fi - fi - done - ;; - esac - done - IFS="$ac_save_ifs" - -fi - if test "${ac_cv_path_install+set}" = set; then - INSTALL="$ac_cv_path_install" - else - # As a last resort, use the slow shell script. We don't cache a - # path for INSTALL within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the path is relative. - INSTALL="$ac_install_sh" - fi -fi -echo "$ac_t""$INSTALL" 1>&6 - -# Use test -z because SunOS4 sh mishandles braces in ${var-val}. -# It thinks the first close brace ends the variable substitution. -test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' - -test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' - -# Extract the first word of "ranlib", so it can be a program name with args. -set dummy ranlib; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test -n "$RANLIB"; then - ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. -else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" - for ac_dir in $PATH; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_prog_RANLIB="ranlib" - break - fi - done - IFS="$ac_save_ifs" - test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":" -fi -fi -RANLIB="$ac_cv_prog_RANLIB" -if test -n "$RANLIB"; then - echo "$ac_t""$RANLIB" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - -echo $ac_n "checking for mode_t""... $ac_c" 1>&6 -if eval "test \"`echo '$''{'ac_cv_type_mode_t'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 1166 "configure" -#include "confdefs.h" -#include <sys/types.h> -#if STDC_HEADERS -#include <stdlib.h> -#endif -EOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - egrep "mode_t" >/dev/null 2>&1; then - rm -rf conftest* - ac_cv_type_mode_t=yes -else - rm -rf conftest* - ac_cv_type_mode_t=no -fi -rm -f conftest* - -fi -echo "$ac_t""$ac_cv_type_mode_t" 1>&6 -if test $ac_cv_type_mode_t = no; then - cat >> confdefs.h <<\EOF -#define mode_t int -EOF - -fi - -echo $ac_n "checking for pid_t""... $ac_c" 1>&6 -if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 1197 "configure" -#include "confdefs.h" -#include <sys/types.h> -#if STDC_HEADERS -#include <stdlib.h> -#endif -EOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - egrep "pid_t" >/dev/null 2>&1; then - rm -rf conftest* - ac_cv_type_pid_t=yes -else - rm -rf conftest* - ac_cv_type_pid_t=no -fi -rm -f conftest* - -fi -echo "$ac_t""$ac_cv_type_pid_t" 1>&6 -if test $ac_cv_type_pid_t = no; then - cat >> confdefs.h <<\EOF -#define pid_t int -EOF - -fi - -echo $ac_n "checking for size_t""... $ac_c" 1>&6 -if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 1228 "configure" -#include "confdefs.h" -#include <sys/types.h> -#if STDC_HEADERS -#include <stdlib.h> -#endif -EOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - egrep "size_t" >/dev/null 2>&1; then - rm -rf conftest* - ac_cv_type_size_t=yes -else - rm -rf conftest* - ac_cv_type_size_t=no -fi -rm -f conftest* - -fi -echo "$ac_t""$ac_cv_type_size_t" 1>&6 -if test $ac_cv_type_size_t = no; then - cat >> confdefs.h <<\EOF -#define size_t unsigned -EOF - -fi - -echo $ac_n "checking for vprintf""... $ac_c" 1>&6 -if eval "test \"`echo '$''{'ac_cv_func_vprintf'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 1259 "configure" -#include "confdefs.h" -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char vprintf(); below. */ -#include <assert.h> -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char vprintf(); - -int main() { return 0; } -int t() { - -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_vprintf) || defined (__stub___vprintf) -choke me -#else -vprintf(); -#endif - -; return 0; } -EOF -if { (eval echo configure:1283: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then - rm -rf conftest* - eval "ac_cv_func_vprintf=yes" -else - rm -rf conftest* - eval "ac_cv_func_vprintf=no" -fi -rm -f conftest* - -fi -if eval "test \"`echo '$ac_cv_func_'vprintf`\" = yes"; then - echo "$ac_t""yes" 1>&6 - cat >> confdefs.h <<\EOF -#define HAVE_VPRINTF 1 -EOF - -else - echo "$ac_t""no" 1>&6 -fi - -if test "$ac_cv_func_vprintf" != yes; then -echo $ac_n "checking for _doprnt""... $ac_c" 1>&6 -if eval "test \"`echo '$''{'ac_cv_func__doprnt'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 1309 "configure" -#include "confdefs.h" -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char _doprnt(); below. */ -#include <assert.h> -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char _doprnt(); - -int main() { return 0; } -int t() { - -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub__doprnt) || defined (__stub____doprnt) -choke me -#else -_doprnt(); -#endif - -; return 0; } -EOF -if { (eval echo configure:1333: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then - rm -rf conftest* - eval "ac_cv_func__doprnt=yes" -else - rm -rf conftest* - eval "ac_cv_func__doprnt=no" -fi -rm -f conftest* - -fi -if eval "test \"`echo '$ac_cv_func_'_doprnt`\" = yes"; then - echo "$ac_t""yes" 1>&6 - cat >> confdefs.h <<\EOF -#define HAVE_DOPRNT 1 -EOF - -else - echo "$ac_t""no" 1>&6 -fi - -fi - -echo $ac_n "checking for working const""... $ac_c" 1>&6 -if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 1360 "configure" -#include "confdefs.h" - -int main() { return 0; } -int t() { - -/* Ultrix mips cc rejects this. */ -typedef int charset[2]; const charset x; -/* SunOS 4.1.1 cc rejects this. */ -char const *const *ccp; -char **p; -/* NEC SVR4.0.2 mips cc rejects this. */ -struct point {int x, y;}; -static struct point const zero = {0,0}; -/* AIX XL C 1.02.0.0 rejects this. - It does not let you subtract one const X* pointer from another in an arm - of an if-expression whose if-part is not a constant expression */ -const char *g = "string"; -ccp = &g + (g ? g-g : 0); -/* HPUX 7.0 cc rejects these. */ -++ccp; -p = (char**) ccp; -ccp = (char const *const *) p; -{ /* SCO 3.2v4 cc rejects this. */ - char *t; - char const *s = 0 ? (char *) 0 : (char const *) 0; - - *t++ = 0; -} -{ /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ - int x[] = {25, 17}; - const int *foo = &x[0]; - ++foo; -} -{ /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ - typedef const int *iptr; - iptr p = 0; - ++p; -} -{ /* AIX XL C 1.02.0.0 rejects this saying - "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ - struct s { int j; const int *ap[3]; }; - struct s *b; b->j = 5; -} -{ /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ - const int foo = 10; -} - -; return 0; } -EOF -if { (eval echo configure:1410: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - ac_cv_c_const=yes -else - rm -rf conftest* - ac_cv_c_const=no -fi -rm -f conftest* - -fi - -echo "$ac_t""$ac_cv_c_const" 1>&6 -if test $ac_cv_c_const = no; then - cat >> confdefs.h <<\EOF -#define const -EOF - -fi - -echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6 -if eval "test \"`echo '$''{'ac_cv_c_bigendian'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - ac_cv_c_bigendian=unknown -# See if sys/param.h defines the BYTE_ORDER macro. -cat > conftest.$ac_ext <<EOF -#line 1436 "configure" -#include "confdefs.h" -#include <sys/types.h> -#include <sys/param.h> -int main() { return 0; } -int t() { - -#if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN - bogus endian macros -#endif -; return 0; } -EOF -if { (eval echo configure:1448: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - # It does; now see whether it defined to BIG_ENDIAN or not. -cat > conftest.$ac_ext <<EOF -#line 1452 "configure" -#include "confdefs.h" -#include <sys/types.h> -#include <sys/param.h> -int main() { return 0; } -int t() { - -#if BYTE_ORDER != BIG_ENDIAN - not big endian -#endif -; return 0; } -EOF -if { (eval echo configure:1464: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - ac_cv_c_bigendian=yes -else - rm -rf conftest* - ac_cv_c_bigendian=no -fi -rm -f conftest* - -fi -rm -f conftest* - -if test $ac_cv_c_bigendian = unknown; then -if test "$cross_compiling" = yes; then - { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } -else -cat > conftest.$ac_ext <<EOF -#line 1481 "configure" -#include "confdefs.h" -main () { - /* Are we little or big endian? From Harbison&Steele. */ - union - { - long l; - char c[sizeof (long)]; - } u; - u.l = 1; - exit (u.c[sizeof (long) - 1] == 1); -} -EOF -{ (eval echo configure:1494: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } -if test -s conftest && (./conftest; exit) 2>/dev/null; then - ac_cv_c_bigendian=no -else - ac_cv_c_bigendian=yes -fi -fi -rm -fr conftest* -fi -fi - -echo "$ac_t""$ac_cv_c_bigendian" 1>&6 -if test $ac_cv_c_bigendian = yes; then - cat >> confdefs.h <<\EOF -#define WORDS_BIGENDIAN 1 -EOF - -fi - -echo $ac_n "checking size of unsigned long""... $ac_c" 1>&6 -if eval "test \"`echo '$''{'ac_cv_sizeof_unsigned_long'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test "$cross_compiling" = yes; then - { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } -else -cat > conftest.$ac_ext <<EOF -#line 1521 "configure" -#include "confdefs.h" -#include <stdio.h> -main() -{ - FILE *f=fopen("conftestval", "w"); - if (!f) exit(1); - fprintf(f, "%d\n", sizeof(unsigned long)); - exit(0); -} -EOF -{ (eval echo configure:1532: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } -if test -s conftest && (./conftest; exit) 2>/dev/null; then - ac_cv_sizeof_unsigned_long=`cat conftestval` -else - ac_cv_sizeof_unsigned_long=0 -fi -fi -rm -fr conftest* -fi -echo "$ac_t""$ac_cv_sizeof_unsigned_long" 1>&6 -cat >> confdefs.h <<EOF -#define SIZEOF_UNSIGNED_LONG $ac_cv_sizeof_unsigned_long -EOF - - -echo $ac_n "checking size of unsigned int""... $ac_c" 1>&6 -if eval "test \"`echo '$''{'ac_cv_sizeof_unsigned_int'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test "$cross_compiling" = yes; then - { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } -else -cat > conftest.$ac_ext <<EOF -#line 1555 "configure" -#include "confdefs.h" -#include <stdio.h> -main() -{ - FILE *f=fopen("conftestval", "w"); - if (!f) exit(1); - fprintf(f, "%d\n", sizeof(unsigned int)); - exit(0); -} -EOF -{ (eval echo configure:1566: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } -if test -s conftest && (./conftest; exit) 2>/dev/null; then - ac_cv_sizeof_unsigned_int=`cat conftestval` -else - ac_cv_sizeof_unsigned_int=0 -fi -fi -rm -fr conftest* -fi -echo "$ac_t""$ac_cv_sizeof_unsigned_int" 1>&6 -cat >> confdefs.h <<EOF -#define SIZEOF_UNSIGNED_INT $ac_cv_sizeof_unsigned_int -EOF - - -for ac_func in unsetenv alphasort scandir strerror strsignal strtoul vsnprintf -do -echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 1588 "configure" -#include "confdefs.h" -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func(); below. */ -#include <assert.h> -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func(); - -int main() { return 0; } -int t() { - -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -$ac_func(); -#endif - -; return 0; } -EOF -if { (eval echo configure:1612: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then - rm -rf conftest* - eval "ac_cv_func_$ac_func=yes" -else - rm -rf conftest* - eval "ac_cv_func_$ac_func=no" -fi -rm -f conftest* - -fi -if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then - echo "$ac_t""yes" 1>&6 - ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` - cat >> confdefs.h <<EOF -#define $ac_tr_func 1 -EOF - -else - echo "$ac_t""no" 1>&6 -fi -done - -for ac_hdr in sys/cdefs.h -do -ac_safe=`echo "$ac_hdr" | tr './\055' '___'` -echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 1642 "configure" -#include "confdefs.h" -#include <$ac_hdr> -EOF -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1647: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out` -if test -z "$ac_err"; then - rm -rf conftest* - eval "ac_cv_header_$ac_safe=yes" -else - echo "$ac_err" >&5 - rm -rf conftest* - eval "ac_cv_header_$ac_safe=no" -fi -rm -f conftest* -fi -if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then - echo "$ac_t""yes" 1>&6 - ac_tr_hdr=HAVE_`echo $ac_hdr | tr 'abcdefghijklmnopqrstuvwxyz./\055' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ___'` - cat >> confdefs.h <<EOF -#define $ac_tr_hdr 1 -EOF - -else - echo "$ac_t""no" 1>&6 -fi -done - - -echo $ac_n "checking for sysinfo""... $ac_c" 1>&6 -if eval "test \"`echo '$''{'ac_cv_func_sysinfo'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 1677 "configure" -#include "confdefs.h" -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char sysinfo(); below. */ -#include <assert.h> -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char sysinfo(); - -int main() { return 0; } -int t() { - -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_sysinfo) || defined (__stub___sysinfo) -choke me -#else -sysinfo(); -#endif - -; return 0; } -EOF -if { (eval echo configure:1701: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then - rm -rf conftest* - eval "ac_cv_func_sysinfo=yes" -else - rm -rf conftest* - eval "ac_cv_func_sysinfo=no" -fi -rm -f conftest* - -fi -if eval "test \"`echo '$ac_cv_func_'sysinfo`\" = yes"; then - echo "$ac_t""yes" 1>&6 - cat >> confdefs.h <<\EOF -#define HAVE_SYSINFO 1 -EOF - -else - echo "$ac_t""no" 1>&6 -echo $ac_n "checking __NR_sysinfo""... $ac_c" 1>&6 - cat > conftest.$ac_ext <<EOF -#line 1721 "configure" -#include "confdefs.h" - -#include <linux/sys.h> -#include <linux/kernel.h> -#include <linux/unistd.h> -#ifdef __NR_sysinfo - yes -#endif - -EOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - egrep "yes" >/dev/null 2>&1; then - rm -rf conftest* - echo "$ac_t""yes; tsk tsk - get your libc fixed." 1>&6 - cat >> confdefs.h <<\EOF -#define HAVE_NRSYSINFO 1 -EOF - -else - rm -rf conftest* - echo "$ac_t""no" 1>&6 - echo "configure: warning: sysinfo missing; compilation of dpkg proper may fail." 1>&2 -fi -rm -f conftest* - -fi - - - -if test "${GCC-no}" = yes; then - CFLAGS=-O2; OPTCFLAGS=-O3 -else - CFLAGS=-O -fi - - - - - echo $ac_n "checking your C compiler""... $ac_c" 1>&6 - if eval "test \"`echo '$''{'dpkg_cv_c_works'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - - cat > conftest.$ac_ext <<EOF -#line 1766 "configure" -#include "confdefs.h" -#include <string.h> -int main() { return 0; } -int t() { -strcmp("a","b") -; return 0; } -EOF -if { (eval echo configure:1774: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - dpkg_cv_c_works=yes -else - rm -rf conftest* - dpkg_cv_c_works=no -fi -rm -f conftest* - - -fi - - if test "x$dpkg_cv_c_works" = xyes; then - true - echo "$ac_t""works" 1>&6 - else - true - echo "$ac_t""broken" 1>&6 - { echo "configure: error: C compiler is broken" 1>&2; exit 1; } - fi - - - - echo $ac_n "checking alphasort declaration""... $ac_c" 1>&6 - if eval "test \"`echo '$''{'dpkg_cv_header_alphasort'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - - cat > conftest.$ac_ext <<EOF -#line 1803 "configure" -#include "confdefs.h" - -#include <sys/types.h> -#include <sys/dir.h> - -int main() { return 0; } -int t() { -alphasort -; return 0; } -EOF -if { (eval echo configure:1814: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - dpkg_cv_header_alphasort=yes -else - rm -rf conftest* - dpkg_cv_header_alphasort=no -fi -rm -f conftest* - - -fi - - if test "x$dpkg_cv_header_alphasort" = xyes; then - true - echo "$ac_t""yes" 1>&6 - cat >> confdefs.h <<\EOF -#define HAVE_ALPHASORT_DECLARATION 1 -EOF - - else - true - echo "$ac_t""no" 1>&6 - fi - - - - echo $ac_n "checking inlines""... $ac_c" 1>&6 - if eval "test \"`echo '$''{'dpkg_cv_c_inline'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - - cat > conftest.$ac_ext <<EOF -#line 1846 "configure" -#include "confdefs.h" - -int main() { return 0; } -int t() { -} inline int foo (int x) { -; return 0; } -EOF -if { (eval echo configure:1854: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - dpkg_cv_c_inline=yes -else - rm -rf conftest* - dpkg_cv_c_inline=no -fi -rm -f conftest* - - -fi - - if test "x$dpkg_cv_c_inline" = xyes; then - true - echo "$ac_t""yes" 1>&6 - cat >> confdefs.h <<\EOF -#define HAVE_INLINE 1 -EOF - - else - true - echo "$ac_t""no" 1>&6 - fi - - - - echo $ac_n "checking __attribute__((,,))""... $ac_c" 1>&6 - if eval "test \"`echo '$''{'dpkg_cv_c_attribute_supported'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - - cat > conftest.$ac_ext <<EOF -#line 1886 "configure" -#include "confdefs.h" - -int main() { return 0; } -int t() { -extern int testfunction(int x) __attribute__((,,)) -; return 0; } -EOF -if { (eval echo configure:1894: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - dpkg_cv_c_attribute_supported=yes -else - rm -rf conftest* - dpkg_cv_c_attribute_supported=no -fi -rm -f conftest* - - -fi - - if test "x$dpkg_cv_c_attribute_supported" = xyes; then - true - echo "$ac_t""yes" 1>&6 - cat >> confdefs.h <<\EOF -#define HAVE_GNUC25_ATTRIB 1 -EOF - - - echo $ac_n "checking __attribute__((noreturn))""... $ac_c" 1>&6 - if eval "test \"`echo '$''{'dpkg_cv_c_attribute_noreturn'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - - cat > conftest.$ac_ext <<EOF -#line 1920 "configure" -#include "confdefs.h" - -int main() { return 0; } -int t() { -extern int testfunction(int x) __attribute__((noreturn)) -; return 0; } -EOF -if { (eval echo configure:1928: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - dpkg_cv_c_attribute_noreturn=yes -else - rm -rf conftest* - dpkg_cv_c_attribute_noreturn=no -fi -rm -f conftest* - - -fi - - if test "x$dpkg_cv_c_attribute_noreturn" = xyes; then - true - echo "$ac_t""yes" 1>&6 - cat >> confdefs.h <<\EOF -#define HAVE_GNUC25_NORETURN 1 -EOF - - else - true - echo "$ac_t""no" 1>&6 - fi - - - echo $ac_n "checking __attribute__((const))""... $ac_c" 1>&6 - if eval "test \"`echo '$''{'dpkg_cv_c_attribute_const'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - - cat > conftest.$ac_ext <<EOF -#line 1959 "configure" -#include "confdefs.h" - -int main() { return 0; } -int t() { -extern int testfunction(int x) __attribute__((const)) -; return 0; } -EOF -if { (eval echo configure:1967: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - dpkg_cv_c_attribute_const=yes -else - rm -rf conftest* - dpkg_cv_c_attribute_const=no -fi -rm -f conftest* - - -fi - - if test "x$dpkg_cv_c_attribute_const" = xyes; then - true - echo "$ac_t""yes" 1>&6 - cat >> confdefs.h <<\EOF -#define HAVE_GNUC25_CONST 1 -EOF - - else - true - echo "$ac_t""no" 1>&6 - fi - - - echo $ac_n "checking __attribute__((format...))""... $ac_c" 1>&6 - if eval "test \"`echo '$''{'dpkg_cv_attribute_format'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - - cat > conftest.$ac_ext <<EOF -#line 1998 "configure" -#include "confdefs.h" - -int main() { return 0; } -int t() { -extern int testfunction(char *y, ...) __attribute__((format(printf,1,2))) -; return 0; } -EOF -if { (eval echo configure:2006: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - dpkg_cv_attribute_format=yes -else - rm -rf conftest* - dpkg_cv_attribute_format=no -fi -rm -f conftest* - - -fi - - if test "x$dpkg_cv_attribute_format" = xyes; then - true - echo "$ac_t""yes" 1>&6 - cat >> confdefs.h <<\EOF -#define HAVE_GNUC25_PRINTFFORMAT 1 -EOF - - else - true - echo "$ac_t""no" 1>&6 - fi - - else - true - echo "$ac_t""no" 1>&6 - fi - - - -CWARNS="" - - - - - echo $ac_n "checking GCC warning flag(s) -Wall -Wno-implicit""... $ac_c" 1>&6 - if test "${GCC-no}" = yes - then - if eval "test \"`echo '$''{'dpkg_cv_c_gcc_warn_all'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - - oldcflags="${CFLAGS-}" - CFLAGS="${CFLAGS-} ${CWARNS} -Wall -Wno-implicit -Werror" - cat > conftest.$ac_ext <<EOF -#line 2052 "configure" -#include "confdefs.h" - -#include <string.h> -#include <stdio.h> - -int main() { return 0; } -int t() { - - strcmp("a","b"); fprintf(stdout,"test ok\n"); - -; return 0; } -EOF -if { (eval echo configure:2065: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - dpkg_cv_c_gcc_warn_all=yes -else - rm -rf conftest* - dpkg_cv_c_gcc_warn_all=no -fi -rm -f conftest* - - CFLAGS="${oldcflags}" -fi - - if test "x$dpkg_cv_c_gcc_warn_all" = xyes; then - CWARNS="${CWARNS} -Wall -Wno-implicit" - echo "$ac_t""ok" 1>&6 - else - dpkg_cv_c_gcc_warn_all='' - echo "$ac_t""no" 1>&6 - fi - else - echo "$ac_t""no" 1>&6 - fi - - - echo $ac_n "checking GCC warning flag(s) -Wwrite-strings""... $ac_c" 1>&6 - if test "${GCC-no}" = yes - then - if eval "test \"`echo '$''{'dpkg_cv_c_gcc_warn_writestrings'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - - oldcflags="${CFLAGS-}" - CFLAGS="${CFLAGS-} ${CWARNS} -Wwrite-strings -Werror" - cat > conftest.$ac_ext <<EOF -#line 2099 "configure" -#include "confdefs.h" - -#include <string.h> -#include <stdio.h> - -int main() { return 0; } -int t() { - - strcmp("a","b"); fprintf(stdout,"test ok\n"); - -; return 0; } -EOF -if { (eval echo configure:2112: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - dpkg_cv_c_gcc_warn_writestrings=yes -else - rm -rf conftest* - dpkg_cv_c_gcc_warn_writestrings=no -fi -rm -f conftest* - - CFLAGS="${oldcflags}" -fi - - if test "x$dpkg_cv_c_gcc_warn_writestrings" = xyes; then - CWARNS="${CWARNS} -Wwrite-strings" - echo "$ac_t""ok" 1>&6 - else - dpkg_cv_c_gcc_warn_writestrings='' - echo "$ac_t""no" 1>&6 - fi - else - echo "$ac_t""no" 1>&6 - fi - - - echo $ac_n "checking GCC warning flag(s) -Wpointer-arith""... $ac_c" 1>&6 - if test "${GCC-no}" = yes - then - if eval "test \"`echo '$''{'dpkg_cv_c_gcc_warn_pointerarith'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - - oldcflags="${CFLAGS-}" - CFLAGS="${CFLAGS-} ${CWARNS} -Wpointer-arith -Werror" - cat > conftest.$ac_ext <<EOF -#line 2146 "configure" -#include "confdefs.h" - -#include <string.h> -#include <stdio.h> - -int main() { return 0; } -int t() { - - strcmp("a","b"); fprintf(stdout,"test ok\n"); - -; return 0; } -EOF -if { (eval echo configure:2159: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - dpkg_cv_c_gcc_warn_pointerarith=yes -else - rm -rf conftest* - dpkg_cv_c_gcc_warn_pointerarith=no -fi -rm -f conftest* - - CFLAGS="${oldcflags}" -fi - - if test "x$dpkg_cv_c_gcc_warn_pointerarith" = xyes; then - CWARNS="${CWARNS} -Wpointer-arith" - echo "$ac_t""ok" 1>&6 - else - dpkg_cv_c_gcc_warn_pointerarith='' - echo "$ac_t""no" 1>&6 - fi - else - echo "$ac_t""no" 1>&6 - fi - - - echo $ac_n "checking GCC warning flag(s) -Wimplicit -Wnested-externs""... $ac_c" 1>&6 - if test "${GCC-no}" = yes - then - if eval "test \"`echo '$''{'dpkg_cv_c_gcc_warn_implicit'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - - oldcflags="${CFLAGS-}" - CFLAGS="${CFLAGS-} ${CWARNS} -Wimplicit -Wnested-externs -Werror" - cat > conftest.$ac_ext <<EOF -#line 2193 "configure" -#include "confdefs.h" - -#include <string.h> -#include <stdio.h> - -int main() { return 0; } -int t() { - - strcmp("a","b"); fprintf(stdout,"test ok\n"); - -; return 0; } -EOF -if { (eval echo configure:2206: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - dpkg_cv_c_gcc_warn_implicit=yes -else - rm -rf conftest* - dpkg_cv_c_gcc_warn_implicit=no -fi -rm -f conftest* - - CFLAGS="${oldcflags}" -fi - - if test "x$dpkg_cv_c_gcc_warn_implicit" = xyes; then - CWARNS="${CWARNS} -Wimplicit -Wnested-externs" - echo "$ac_t""ok" 1>&6 - else - dpkg_cv_c_gcc_warn_implicit='' - echo "$ac_t""no" 1>&6 - fi - else - echo "$ac_t""no" 1>&6 - fi - - -if test "${GCC-no}" = yes; then - CWARNS="${CWARNS} -Wmissing-prototypes -Wstrict-prototypes" -fi - -trap '' 1 2 15 -cat > confcache <<\EOF -# This file is a shell script that caches the results of configure -# tests run on this system so they can be shared between configure -# scripts and configure runs. It is not useful on other systems. -# If it contains results you don't want to keep, you may remove or edit it. -# -# By default, configure uses ./config.cache as the cache file, -# creating it if it does not exist already. You can give configure -# the --cache-file=FILE option to use a different cache file; that is -# what configure does when it calls configure scripts in -# subdirectories, so they share the cache. -# Giving --cache-file=/dev/null disables caching, for debugging configure. -# config.status only pays attention to the cache file if you give it the -# --recheck option to rerun configure. -# -EOF -# Ultrix sh set writes to stderr and can't be redirected directly, -# and sets the high bit in the cache file unless we assign to the vars. -(set) 2>&1 | - sed -n "s/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=\${\1='\2'}/p" \ - >> confcache -if cmp -s $cache_file confcache; then - : -else - if test -w $cache_file; then - echo "updating cache $cache_file" - cat confcache > $cache_file - else - echo "not updating unwritable cache $cache_file" - fi -fi -rm -f confcache - -trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 - -test "x$prefix" = xNONE && prefix=$ac_default_prefix -# Let make expand exec_prefix. -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - -# Any assignment to VPATH causes Sun make to only execute -# the first set of double-colon rules, so remove it if not needed. -# If there is a colon in the path, we need to keep it. -if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d' -fi - -trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15 - -DEFS=-DHAVE_CONFIG_H - -# Without the "./", some shells look in PATH for config.status. -: ${CONFIG_STATUS=./config.status} - -echo creating $CONFIG_STATUS -rm -f $CONFIG_STATUS -cat > $CONFIG_STATUS <<EOF -#! /bin/sh -# Generated automatically by configure. -# Run this file to recreate the current configuration. -# This directory was configured as follows, -# on host `(hostname || uname -n) 2>/dev/null | sed 1q`: -# -# $0 $ac_configure_args -# -# Compiler output produced by configure, useful for debugging -# configure, is in ./config.log if it exists. - -ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]" -for ac_option -do - case "\$ac_option" in - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion" - exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;; - -version | --version | --versio | --versi | --vers | --ver | --ve | --v) - echo "$CONFIG_STATUS generated by autoconf version 2.10" - exit 0 ;; - -help | --help | --hel | --he | --h) - echo "\$ac_cs_usage"; exit 0 ;; - *) echo "\$ac_cs_usage"; exit 1 ;; - esac -done - -ac_given_srcdir=$srcdir -ac_given_INSTALL="$INSTALL" - -trap 'rm -fr `echo "Makefile dpkg-deb/Makefile lib/Makefile include/Makefile - dselect/Makefile split/Makefile methods/Makefile - md5sum/Makefile main/Makefile doc/Makefile scripts/Makefile config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 -EOF -cat >> $CONFIG_STATUS <<EOF - -# Protect against being on the right side of a sed subst in config.status. -sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g; - s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF -$ac_vpsub -$extrasub -s%@CFLAGS@%$CFLAGS%g -s%@CPPFLAGS@%$CPPFLAGS%g -s%@CXXFLAGS@%$CXXFLAGS%g -s%@DEFS@%$DEFS%g -s%@LDFLAGS@%$LDFLAGS%g -s%@LIBS@%$LIBS%g -s%@exec_prefix@%$exec_prefix%g -s%@prefix@%$prefix%g -s%@program_transform_name@%$program_transform_name%g -s%@bindir@%$bindir%g -s%@sbindir@%$sbindir%g -s%@libexecdir@%$libexecdir%g -s%@datadir@%$datadir%g -s%@sysconfdir@%$sysconfdir%g -s%@sharedstatedir@%$sharedstatedir%g -s%@localstatedir@%$localstatedir%g -s%@libdir@%$libdir%g -s%@includedir@%$includedir%g -s%@oldincludedir@%$oldincludedir%g -s%@infodir@%$infodir%g -s%@mandir@%$mandir%g -s%@CC@%$CC%g -s%@CXX@%$CXX%g -s%@perlpath@%$perlpath%g -s%@CPP@%$CPP%g -s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g -s%@INSTALL_DATA@%$INSTALL_DATA%g -s%@RANLIB@%$RANLIB%g -s%@OPTCFLAGS@%$OPTCFLAGS%g -s%@CWARNS@%$CWARNS%g - -CEOF -EOF -cat >> $CONFIG_STATUS <<EOF - -CONFIG_FILES=\${CONFIG_FILES-"Makefile dpkg-deb/Makefile lib/Makefile include/Makefile - dselect/Makefile split/Makefile methods/Makefile - md5sum/Makefile main/Makefile doc/Makefile scripts/Makefile"} -EOF -cat >> $CONFIG_STATUS <<\EOF -for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then - # Support "outfile[:infile]", defaulting infile="outfile.in". - case "$ac_file" in - *:*) ac_file_in=`echo "$ac_file"|sed 's%.*:%%'` - ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; - *) ac_file_in="${ac_file}.in" ;; - esac - - # Adjust relative srcdir, etc. for subdirectories. - - # Remove last slash and all that follows it. Not all systems have dirname. - ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` - if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then - # The file is in a subdirectory. - test ! -d "$ac_dir" && mkdir "$ac_dir" - ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`" - # A "../" for each directory in $ac_dir_suffix. - ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'` - else - ac_dir_suffix= ac_dots= - fi - - case "$ac_given_srcdir" in - .) srcdir=. - if test -z "$ac_dots"; then top_srcdir=. - else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;; - /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;; - *) # Relative path. - srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix" - top_srcdir="$ac_dots$ac_given_srcdir" ;; - esac - - case "$ac_given_INSTALL" in - [/$]*) INSTALL="$ac_given_INSTALL" ;; - *) INSTALL="$ac_dots$ac_given_INSTALL" ;; - esac - echo creating "$ac_file" - rm -f "$ac_file" - configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure." - case "$ac_file" in - *Makefile*) ac_comsub="1i\\ -# $configure_input" ;; - *) ac_comsub= ;; - esac - sed -e "$ac_comsub -s%@configure_input@%$configure_input%g -s%@srcdir@%$srcdir%g -s%@top_srcdir@%$top_srcdir%g -s%@INSTALL@%$INSTALL%g -" -f conftest.subs $ac_given_srcdir/$ac_file_in > $ac_file -fi; done -rm -f conftest.subs - -# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where -# NAME is the cpp macro being defined and VALUE is the value it is being given. -# -# ac_d sets the value in "#define NAME VALUE" lines. -ac_dA='s%^\([ ]*\)#\([ ]*define[ ][ ]*\)' -ac_dB='\([ ][ ]*\)[^ ]*%\1#\2' -ac_dC='\3' -ac_dD='%g' -# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE". -ac_uA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' -ac_uB='\([ ]\)%\1#\2define\3' -ac_uC=' ' -ac_uD='\4%g' -# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE". -ac_eA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' -ac_eB='$%\1#\2define\3' -ac_eC=' ' -ac_eD='%g' - -CONFIG_HEADERS=${CONFIG_HEADERS-"config.h"} -for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then - # Support "outfile[:infile]", defaulting infile="outfile.in". - case "$ac_file" in - *:*) ac_file_in=`echo "$ac_file"|sed 's%.*:%%'` - ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; - *) ac_file_in="${ac_file}.in" ;; - esac - - echo creating $ac_file - - rm -f conftest.frag conftest.in conftest.out - cp $ac_given_srcdir/$ac_file_in conftest.in - -EOF - -# Transform confdefs.h into a sed script conftest.vals that substitutes -# the proper values into config.h.in to produce config.h. And first: -# Protect against being on the right side of a sed subst in config.status. -# Protect against being in an unquoted here document in config.status. -rm -f conftest.vals -cat > conftest.hdr <<\EOF -s/[\\&%]/\\&/g -s%[\\$`]%\\&%g -s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp -s%ac_d%ac_u%gp -s%ac_u%ac_e%gp -EOF -sed -n -f conftest.hdr confdefs.h > conftest.vals -rm -f conftest.hdr - -# This sed command replaces #undef with comments. This is necessary, for -# example, in the case of _POSIX_SOURCE, which is predefined and required -# on some systems where configure will not decide to define it. -cat >> conftest.vals <<\EOF -s%^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */% -EOF - -# Break up conftest.vals because some shells have a limit on -# the size of here documents, and old seds have small limits too. -# Maximum number of lines to put in a single here document. -ac_max_here_lines=12 - -rm -f conftest.tail -while : -do - ac_lines=`grep -c . conftest.vals` - # grep -c gives empty output for an empty file on some AIX systems. - if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi - # Write a limited-size here document to conftest.frag. - echo ' cat > conftest.frag <<CEOF' >> $CONFIG_STATUS - sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS - echo 'CEOF - sed -f conftest.frag conftest.in > conftest.out - rm -f conftest.in - mv conftest.out conftest.in -' >> $CONFIG_STATUS - sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail - rm -f conftest.vals - mv conftest.tail conftest.vals -done -rm -f conftest.vals - -cat >> $CONFIG_STATUS <<\EOF - rm -f conftest.frag conftest.h - echo "/* $ac_file. Generated automatically by configure. */" > conftest.h - cat conftest.in >> conftest.h - rm -f conftest.in - if cmp -s $ac_file conftest.h 2>/dev/null; then - echo "$ac_file is unchanged" - rm -f conftest.h - else - # Remove last slash and all that follows it. Not all systems have dirname. - ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` - if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then - # The file is in a subdirectory. - test ! -d "$ac_dir" && mkdir "$ac_dir" - fi - rm -f $ac_file - mv conftest.h $ac_file - fi -fi; done - - - -exit 0 -EOF -chmod +x $CONFIG_STATUS -rm -fr confdefs* $ac_clean_files -test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1 - diff --git a/configure.in b/configure.in index 22921e20d..fc97395ff 100644 --- a/configure.in +++ b/configure.in @@ -1,83 +1,84 @@ dnl Process this file with autoconf to produce a configure script. -AC_INIT(include/dpkg.h) -AC_CONFIG_HEADER(config.h) +AC_PREREQ([2.12]) -AC_PREFIX_DEFAULT(/usr) +AC_INIT(include/dpkg.h.in) +AM_CONFIG_HEADER(config.h) + +tl_CHECK_TOOL_PREFIX + +tl_PROG_CC +tl_CANONICAL_SYSTEM +tl_CHECK_TOOL_PREFIX -AC_PROG_CC +tl_PROG_CXX AC_PROG_CXX +AM_CONDITIONAL(HAVE_CPLUSPLUS, [test "$CXX" != ""]) + +tl_CHECK_TOOL(LD, ld, ld) + +AM_INIT_AUTOMAKE(dpkg,[`sed -n '1s/dpkg (\([0-9.]\+\)).*/\1/p' ${srcdir}/debian/changelog`]) +ACLOCAL="$ACLOCAL -I automake" +AC_MSG_CHECKING(dpkg version) +AC_MSG_RESULT($VERSION) + +AC_PREFIX_DEFAULT(/usr) dpkg_archset='' AC_ARG_WITH(arch, -[ --with-arch=value set/override (Debian) architecture value], +[ --with-arch=value set/override (Debian) architecture value (deprecated)], [ if test "x$with_arch" = x; then AC_MSG_ERROR(--with-arch requires an architecture name) fi dpkg_archset="${with_arch}" + dpkg_tmp="`awk '$1 == "'$target_cpu'" { print $2 }' $srcdir/archtable`" + if test "x$dpkg_tmp" = "x"; then + AC_MSG_WARN([unable to find specified architecture $dpkg_archset in archtable]) + elif test "x$dpkg_tmp" != "x$dpkg_archset"; then + AC_MSG_WARN([canonical architecture is $dpkg_tmp (from archtable)]) + fi ],[ AC_MSG_CHECKING(system architecture) - dpkg_archwhy='' - AC_CACHE_VAL(dpkg_cv_arch,[ - dpkg_arch="`dpkg --print-architecture 2>/dev/null`" - if test "x$dpkg_arch" != x; then - dpkg_archwhy=" (obtained from dpkg)" - elif test "${GCC-no}" = yes; then -changequote(, )dnl - dpkg_arch="`${CC} --print-libgcc-file-name | - sed -e 's,^.*/gcc-lib/,,; s,/libgcc\.a$,,; s,/[0-9.][0-9.]*$,,; s/-.*$//'`" -changequote([, ])dnl - if test "x`echo \"$dpkg_arch\" | tr -d a-z0-9-`" != x -o "x$dpkg_arch" = x - then - dpkg_arch="" - dpkg_archwhy=" (bad output from --print-libgcc-file-name)" - else - dpkg_arch2="`awk '$1 == "'$dpkg_arch'" { print $2 }' $srcdir/archtable`" - if test "x$dpkg_arch2" = "x$dpkg_arch"; then - dpkg_archwhy=" (obtained from gcc)" - elif test "x$dpkg_arch2" != x; then - dpkg_archwhy=" (from gcc, canonical form of $dpkg_arch)" - dpkg_arch="$dpkg_arch2" - else - dpkg_archwhy=" (from gcc, but not in archtable)" - fi - fi - else - dpkg_archwhy='' - fi - dpkg_cv_arch="$dpkg_arch" - ]) - if test "x$dpkg_cv_arch" != x; then - AC_MSG_RESULT("$dpkg_cv_arch$dpkg_archwhy") - dpkg_archset="${dpkg_cv_arch}" - else - AC_MSG_RESULT("failed$dpkg_archwhy") + dpkg_archset="`awk '$1 == "'$target_cpu'" { print $2 }' $srcdir/archtable`" + # Finish off + if test "x$dpkg_archset" = "x"; then + AC_MSG_ERROR(failed: use --with-arch= or --target=) fi + AC_MSG_RESULT($dpkg_archset) ]) + if test "x$dpkg_archset" != x then - AC_DEFINE_UNQUOTED(ARCHITECTURE, "${dpkg_cv_arch}") + AC_DEFINE_UNQUOTED(ARCHITECTURE, "${dpkg_archset}") fi if test "x${dpkg_archset}" = xi386; then - AC_MSG_CHECKING(for i386 system/binary format) - dpkg_libgcc="`$CC --print-libgcc-file-name 2>/dev/null`" - case "$dpkg_libgcc" in - *-linux*) - if ar p "$dpkg_libgcc" __main.o 2>/dev/null | file - 2>/dev/null | grep ELF >/dev/null; then - AC_MSG_RESULT(Linux ELF) - dpkg_cc_binfmt=elf - else - AC_MSG_RESULT(Linux a.out) - dpkg_cc_binfmt=a.out - fi - AC_DEFINE_UNQUOTED(ARCHBINFMT, " $dpkg_cc_binfmt") - ;; + AC_MSG_CHECKING(target i386 system/binary format) + case "${target_os}" in + linuxaout|linux-gnuaout) + AC_MSG_RESULT(Linux a.out) + dpkg_cc_binfmt=a.out + ;; + + linuxcoff|linux-gnucoff) + AC_MSG_RESULT(Linux COFF) + dpkg_cc_binfmt=coff + ;; + + linux|linuxelf|linux-gnu*) + AC_MSG_RESULT(Linux ELF) + dpkg_cc_binfmt=elf + ;; + *) - AC_MSG_RESULT(non-Linux) - ;; + AC_MSG_RESULT([other (${target_os})]) + dpkg_cc_binfmt="" + ;; esac + if test "x$dpkg_cc_binfmt" != "x"; then + AC_DEFINE_UNQUOTED(ARCHBINFMT," $dpkg_cc_binfmt") + fi fi AC_ARG_WITH(newdeb, @@ -87,6 +88,15 @@ AC_ARG_WITH(olddeb, [ --with-olddeb make dpkg-deb default to old archives], [AC_DEFINE(BUILDOLDPKGFORMAT, 1)]) +dnl gettext + +ALL_LINGUAS="en fr" +AM_GNU_GETTEXT +AC_LINK_FILES($nls_cv_header_libgt, $nls_cv_header_intl) +AC_OUTPUT_COMMANDS([sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile]) + +dnl Other stuff + AC_MSG_CHECKING(for /usr/bin/perl) if test -f /usr/bin/perl then @@ -100,9 +110,10 @@ fi AC_STDC_HEADERS AC_PROG_INSTALL -dnl AC_PROGRAM_PATH(GZIP, gzip, ) use these from $PATH -dnl AC_PROGRAM_PATH(TAR, tar, ) use these from $PATH -AC_PROG_RANLIB +AM_PROG_LIBTOOL +dnl Default in case EMACS == no +lispdir="\$(datadir)/emacs/site-lisp" +AM_PATH_LISPDIR AC_MODE_T AC_PID_T AC_SIZE_T @@ -111,7 +122,7 @@ AC_C_CONST AC_C_BIGENDIAN AC_CHECK_SIZEOF(unsigned long) AC_CHECK_SIZEOF(unsigned int) -AC_CHECK_FUNCS(unsetenv alphasort scandir strerror strsignal strtoul vsnprintf) +AC_CHECK_FUNCS(unsetenv alphasort scandir strerror strsignal strtoul vsnprintf lchown) AC_CHECK_HEADERS(sys/cdefs.h) AC_CHECK_FUNC(sysinfo, @@ -132,26 +143,14 @@ AC_CHECK_FUNC(sysinfo, AC_SUBST(OPTCFLAGS) if test "${GCC-no}" = yes; then - CFLAGS=-O2; OPTCFLAGS=-O3 + CFLAGS="-D_REENTRANT -D_GNU_SOURCE -O2" + CXXFLAGS="-D_REENTRANT -D_GNU_SOURCE -O2" + OPTCFLAGS="-O3" else - CFLAGS=-O + CFLAGS="-D_REENTRANT -D_GNU_SOURCE -O" + CXXFLAGS="-D_REENTRANT -D_GNU_SOURCE -O" fi -dnl DPKG_CACHED_TRY_COMPILE(<description>,<cachevar>,<include>,<program>,<ifyes>,<ifno>) -define(DPKG_CACHED_TRY_COMPILE,[ - AC_MSG_CHECKING($1) - AC_CACHE_VAL($2,[ - AC_TRY_COMPILE([$3],[$4],[$2=yes],[$2=no]) - ]) - if test "x$$2" = xyes; then - true - $5 - else - true - $6 - fi -]) - DPKG_CACHED_TRY_COMPILE(your C compiler,dpkg_cv_c_works, [#include <string.h>], [strcmp("a","b")], AC_MSG_RESULT(works), @@ -196,33 +195,6 @@ DPKG_CACHED_TRY_COMPILE(__attribute__((,,)),dpkg_cv_c_attribute_supported,, AC_SUBST(CWARNS) CWARNS="" -dnl DPKG_C_GCC_TRY_WARNS(<warnings>,<cachevar>) -define(DPKG_C_GCC_TRY_WARNS,[ - AC_MSG_CHECKING([GCC warning flag(s) $1]) - if test "${GCC-no}" = yes - then - AC_CACHE_VAL($2,[ - oldcflags="${CFLAGS-}" - CFLAGS="${CFLAGS-} ${CWARNS} $1 -Werror" - AC_TRY_COMPILE([ -#include <string.h> -#include <stdio.h> -],[ - strcmp("a","b"); fprintf(stdout,"test ok\n"); -], [$2=yes], [$2=no]) - CFLAGS="${oldcflags}"]) - if test "x$$2" = xyes; then - CWARNS="${CWARNS} $1" - AC_MSG_RESULT(ok) - else - $2='' - AC_MSG_RESULT(no) - fi - else - AC_MSG_RESULT(no, not using GCC) - fi -]) - DPKG_C_GCC_TRY_WARNS(-Wall -Wno-implicit, dpkg_cv_c_gcc_warn_all) DPKG_C_GCC_TRY_WARNS(-Wwrite-strings, dpkg_cv_c_gcc_warn_writestrings) DPKG_C_GCC_TRY_WARNS(-Wpointer-arith, dpkg_cv_c_gcc_warn_pointerarith) @@ -232,6 +204,10 @@ if test "${GCC-no}" = yes; then CWARNS="${CWARNS} -Wmissing-prototypes -Wstrict-prototypes" fi -AC_OUTPUT(Makefile dpkg-deb/Makefile lib/Makefile include/Makefile - dselect/Makefile split/Makefile methods/Makefile - md5sum/Makefile main/Makefile doc/Makefile scripts/Makefile) +echo "#define DPKG_VERSION \"$VERSION\" /* This line modified by configure */" > version.h.new +cmp -s version.h.new version.h || mv version.h.new version.h + +AC_OUTPUT([Makefile intl/Makefile dpkg-deb/Makefile lib/Makefile + include/Makefile dselect/Makefile split/Makefile methods/Makefile + md5sum/Makefile main/Makefile doc/Makefile scripts/Makefile + po/Makefile.in]) diff --git a/debian/.cvsignore b/debian/.cvsignore new file mode 100644 index 000000000..9d711a9ee --- /dev/null +++ b/debian/.cvsignore @@ -0,0 +1,4 @@ +build +tmp-main +tmp-dev +substvars diff --git a/debian/50dpkg-dev.el b/debian/50dpkg-dev.el new file mode 100644 index 000000000..90fd1d3e8 --- /dev/null +++ b/debian/50dpkg-dev.el @@ -0,0 +1,8 @@ +;; +;; /etc/emacs/site-start.d/50dpkg-dev.el +;; +;; Copyright (C) 1997, Klee Dienes <klee@mit.edu> +;; I hereby release this progam into the public domain. + +(autoload 'debian-changelog-mode "/usr/lib/emacs/site-lisp/debian-changelog-mode.el" + "Major mode for editing Debian-style change logs." t) diff --git a/debian/README.compile b/debian/README.compile new file mode 100644 index 000000000..198e2d0a0 --- /dev/null +++ b/debian/README.compile @@ -0,0 +1,21 @@ + +To compile this package you need to have some less-then-standard packages +installed. Here's a list: + +automake +autoconf +debiandoc-sgml +dpkg-perl +gettext +libtool +libpaperg +lout +psutils +sgml-base +sgml-data +sgml-tools +sgmlspm +sp +tetex-base +tetex-bin + diff --git a/debian/changelog b/debian/changelog index c0ccf5fb8..c28b80e9b 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,496 @@ +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 seperate "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 2018 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 accomodate 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, realy, 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.) @@ -1407,7 +1900,7 @@ Changes in dpkg 0.93.29: Changes in dpkg 0.93.28: -* Removed undef of %xx_p21 in read_database_file, which caused the +* 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. diff --git a/debian/control b/debian/control index fdc01ef70..8bfcf1140 100644 --- a/debian/control +++ b/debian/control @@ -1,13 +1,14 @@ Source: dpkg Section: base Priority: required -Maintainer: Ian Jackson <ian@chiark.greenend.org.uk> +Maintainer: Ian Jackson and others <dpkg-maint@chiark.greenend.org.uk> Standards-Version: 2.1.0.0 Package: dpkg Architecture: any Essential: yes Pre-Depends: ${shlibs:Pre-Depends} +Suggests: developer-keyring Description: Package maintenance system for Debian Linux This package contains the programs which handle the installation and removal of packages on your system. @@ -23,7 +24,9 @@ Package: dpkg-dev Section: devel Priority: important Architecture: all -Recommends: cpio (>= 2.4.2-2), patch +Depends: perl +Recommends: cpio (>= 2.4.2-2), patch (>= 2.2-1), gcc, make +Suggests: gnupg, developer-keyring Conflicts: dpkgname Replaces: dpkgname, dpkg (<< 1.4.0) Description: Package building tools for Debian Linux diff --git a/debian/copyright b/debian/copyright index fe0baf1e9..37e210560 100644 --- a/debian/copyright +++ b/debian/copyright @@ -30,8 +30,8 @@ for more details. You should have received a copy of the GNU General Public License with your Debian GNU/Linux system, in /usr/doc/copyright/GPL, or with the dpkg source package as the file COPYING. If not, write to the Free -Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - +Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +02111-1307, USA. /usr/bin/md5sum is compiled from md5.[ch] (written by Colin Plumb in 1993 and modified by Ian Jackson in 1995) and md5sum.c (written by diff --git a/debian/postinst b/debian/postinst index ff2566925..9aeb9b480 100755 --- a/debian/postinst +++ b/debian/postinst @@ -142,13 +142,13 @@ if [ ! -f status ] then echo 'Adding "status" file to dpkg system database ...' - rm -f /tmp/dpp.$$ || true + rm -f dpp.$$ || true - ls -1 deb/*.control >/tmp/dpp.$$ + ls -1 deb/*.control >dpp.$$ sed -e 's:^deb/::; s:\.control$: Install OK Installed:;' \ - </tmp/dpp.$$ >status.new + <dpp.$$ >status.new - rm /tmp/dpp.$$ + rm dpp.$$ mv status.new status fi diff --git a/debian/preinst b/debian/preinst index b7a3b21bf..94ced19e7 100755 --- a/debian/preinst +++ b/debian/preinst @@ -3,7 +3,7 @@ if [ "$1" != "upgrade" ]; then exit 0; fi set -e -# i386elf: dpkg --assert-support-predepends +# i386elf: [ "$2" = "1.4.0.6" ] || dpkg --assert-support-predepends oldver="$2" @@ -15,21 +15,21 @@ esac echo ' contemplating upgrade of dpkg from pre-0.93.50 version ...' -trap 'es=$?; rm -f /tmp/bp.$$; exit $es' 0 +trap 'es=$?; rm -f /var/lib/dpkg/bp.$$; exit $es' 0 perl -000 -ne 'print $x if m/^Package:\s+(\S+\n)/im && ($x=$1) ne "dpkg\n" && m/^Status:.*(unpacked|postinst)/im' \ - /var/lib/dpkg/status >/tmp/bp.$$ + /var/lib/dpkg/status >/var/lib/dpkg/bp.$$ -if test -s /tmp/bp.$$ +if test -s /var/lib/dpkg/bp.$$ then echo ' WARNING - have you read the release notes for this upgrade ? The following packages have been unpacked but not yet configured:' - echo '' `cat /tmp/bp.$$` + echo '' `cat /var/lib/dpkg/bp.$$` echo -n ' If you proceed with the dpkg upgrade with these packages in this state you will LOSE ANY CONFIGURATION CHANGES that have been made to their diff --git a/debian/rules b/debian/rules index 82ab3d3a7..e0a72966f 100755 --- a/debian/rules +++ b/debian/rules @@ -1,31 +1,84 @@ #!/usr/bin/make -f -DIR:=$(shell pwd) +SHELL=bash + +.PHONY: clean build binary binary-trees binary-arch binary-indep + +BUILD := $(shell pwd)/debian/build +DIR := $(shell pwd) arch=$(shell dpkg --print-architecture) mcidir=debian/tmp-main/DEBIAN -build: + +Makefile.in: Makefile.am $(checkdir) - ./configure --prefix=/usr - $(MAKE) - touch build + $(RM) config.status + mkdir -p automake + aclocal -I ./automake + autoheader + autoconf + gettextize --force + libtoolize --automake --copy --force + $(RM) config.sub config.guess + ln -s /usr/share/automake/config.sub . + automake --add-missing -clean: +$(BUILD)/Makefile: Makefile.in $(checkdir) - -rm -f build - -$(MAKE) -i distclean || $(MAKE) -f Makefile.in -i distclean - -rm -rf debian/tmp* *~ *.orig ./#*# tmp.* debian/files* - -rm -f config.cache config.status config.h install config.log - find -name '*~' -print0 | xargs -r0 rm -- + $(RM) -r debian/build + install -d debian/build + cd $(BUILD) && ../../configure \ + --enable-shared --with-included-gettext \ + --prefix=/usr \ + --datadir=/usr/share \ + --sysconfdir=/etc \ + --sharedstatedir=/var/lib \ + --localstatedir=/var/lib +# libtool -rpath workaround based on a suggestion by Yann Dirson +# <dirson@debian.org> +# +# It is supposed to be inserted in configure.in, but I didn't want +# to re-run autoconf (since that bloats the Debian diff unnecessarily), +# so I just patch libtool after running configure. -- Richard Braakman +# <dark@xs4all.nl> +# +# The version of libtool included with LessTif unfortunately insists on +# linking with -rpath, i.e. hardwiring locations. This is not desirable. +# +# The dummy define is improbable enough not to conflict with anything; it is +# just here to fool libtool by making it believe it gave some useful info to +# gcc. + sed < $(BUILD)/libtool > $(BUILD)/libtool.foo \ + 's/^hardcode_libdir_flag_spec.*$$/hardcode_libdir_flag_spec=" -D__LIBTOOL_IS_A_FOOL__ "/' + mv $(BUILD)/libtool.foo $(BUILD)/libtool +# More hackery: this will also patch the generated libtool to explicitly +# link libraries against the libraries they depend on. (particularly libc) + sed < $(BUILD)/libtool > $(BUILD)/libtool.foo '/^archive_cmds="/s/"$$/ \\$$deplibs"/' + mv $(BUILD)/libtool.foo $(BUILD)/libtool + chmod 755 $(BUILD)/libtool -binary: binary-arch binary-indep +clean: $(BUILD)/Makefile + $(checkdir) + $(MAKE) -C $(BUILD) -i maintainer-clean + $(RM) -r debian/{build,files,substvars,tmp*} + $(RM) $(BUILD)/dpkg-*.tar.gz + $(RM) po/*.gmo + $(RM) config.log + find . \( -name '*~' -o -name '#*#' \) -print0 | xargs -r0 $(RM) -- -binary-trees: checkroot build +build: $(BUILD)/Makefile $(checkdir) - -rm -rf debian/tmp-{main,dev} + $(MAKE) -C $(BUILD) + +binary: binary-arch binary-indep + +binary-trees: build + $(checkdir) + -$(RM) -r debian/tmp-{main,dev} install -d debian/tmp-{main,dev}/{DEBIAN,etc/dpkg,usr/doc/dpkg} install -d debian/tmp-dev/usr/{lib/dpkg,doc/dpkg-dev,man/man1,man/man8,sbin,bin} + install -d debian/tmp-main/sbin set -e; if [ $(arch) = i386 ]; then \ sed -e 's/^# i386elf: //' <debian/preinst >$(mcidir)/preinst ; \ else \ @@ -37,65 +90,89 @@ binary-trees: checkroot build debian/tmp-dev/etc/dpkg/shlibs.default ; \ fi cp debian/{prerm,postinst} $(mcidir)/. + install -d debian/tmp-dev/etc/emacs/site-start.d + install -c debian/50dpkg-dev.el debian/tmp-dev/etc/emacs/site-start.d/ + install -d debian/tmp-dev/etc/xemacs/site-start-19.d + install -c debian/50dpkg-dev.el debian/tmp-dev/etc/xemacs/site-start-19.d/ chmod +x $(mcidir)/{postinst,prerm,preinst} - $(MAKE) prefix=$(DIR)/debian/tmp-main/usr \ - datadir=$(DIR)/debian/tmp-main/var/lib/dpkg \ - etcdir=$(DIR)/debian/tmp-main/etc \ + $(MAKE) -C $(BUILD) top_distdir=. dist + $(MAKE) -C $(BUILD) \ + prefix=$(DIR)/debian/tmp-main/usr \ + sysconfdir=$(DIR)/debian/tmp-main/etc \ + datadir=$(DIR)/debian/tmp-main/usr/share \ + sharedstatedir=$(DIR)/debian/tmp-main/var/lib \ + localstatedir=$(DIR)/debian/tmp-main/var/lib \ install - find debian/tmp-main/usr/man -type f | xargs gzip -9v + find debian/tmp-main/usr/man -type f | xargs gzip -9vf set -e; for f in dpkg-buildpackage dpkg-gencontrol dpkg-distaddfile \ dpkg-parsechangelog dpkg-genchanges dpkg-shlibdeps; do \ rm debian/tmp-main/usr/man/man1/$$f.1; \ ln -s dpkg-source.1.gz debian/tmp-main/usr/man/man1/$$f.1.gz ; \ done - gzip -9v debian/tmp-main/usr/doc/dpkg/changelog.* + ln -s ../man7/undocumented.7.gz debian/tmp-main/usr/man/man1/dpkg-divert.1.gz + gzip -9vf debian/tmp-main/usr/doc/dpkg/changelog* cp debian/copyright debian/tmp-main/usr/doc/dpkg/copyright cp debian/copyright debian/tmp-dev/usr/doc/dpkg-dev/copyright cp debian/dev-README debian/tmp-dev/usr/doc/dpkg-dev/README - cp TODO debian/tmp-dev/usr/doc/dpkg/WISHLIST set -e; for f in \ - usr/doc/dpkg/{programmer.html,policy.html,developer-keys.pgp,changelog.manuals.gz} \ + usr/doc/dpkg/{internals.html,changelog.manuals.gz} \ usr/bin/dpkg-{source,genchanges,gencontrol,shlibdeps,buildpackage,parsechangelog} \ - usr/bin/{dpkg-distaddfile,822-date,dpkg-scanpackages} \ + usr/bin/{dpkg-distaddfile,822-date,dpkg-scanpackages,dpkg-name} \ usr/man/man1/dpkg-{source,genchanges,gencontrol,shlibdeps,buildpackage}.1.gz \ - usr/man/man1/{dpkg-parsechangelog,dpkg-distaddfile,822-date}.1.gz \ - usr/man/man5 usr/man/man8/dpkg-scanpackages.8.gz usr/lib/emacs \ + usr/man/man1/{dpkg-parsechangelog,dpkg-distaddfile,822-date,dpkg-name}.1.gz \ + usr/man/man5 usr/man/man8/dpkg-scanpackages.8.gz \ usr/lib/dpkg/parsechangelog usr/lib/dpkg/controllib.pl \ ; do mv debian/tmp-main/$$f debian/tmp-dev/$$f; done -binary-indep: checkroot build binary-trees +binary-indep: binary-trees $(checkdir) dpkg-gencontrol -pdpkg-dev -Pdebian/tmp-dev chown -R root.root debian/tmp-dev chmod -R g-ws,a+r,u+w debian/tmp-dev dpkg-deb --build debian/tmp-dev .. - set -e -x; cd doc; for f in policy programmer; do \ - debiandoc2ps -pa4 -O $$f.sgml | gzip -9v >../../$$f.ps.gz; \ - dpkg-distaddfile -f../debian/files $$f.ps.gz byhand -; \ - GZIP=-9v tar zcf ../../$$f.html.tar.gz $$f.html; \ - dpkg-distaddfile -f../debian/files $$f.html.tar.gz byhand -; \ + set -e -x; for f in internals; do \ + if test -f $(BUILD)/doc/$$f.ps; then \ + cp -p $(BUILD)/doc/$$f.ps $(DIR)/..; \ + elif test -f $(DIR)/doc/$$f.ps; then \ + cp -p $(DIR)/doc/$$f.ps $(DIR)/..; \ + else \ + echo "unable to locate $$f.ps"; false; \ + fi; \ + gzip -9vf $(DIR)/../$$f.ps; \ + dpkg-distaddfile -f$(DIR)/debian/files $$f.ps.gz byhand -; \ + if test -d $(BUILD)/doc/$$f.html; then \ + GZIP=-9vf tar -C $(BUILD)/doc -zcf $(DIR)/../$$f.html.tar.gz $$f.html; \ + elif test -d $(DIR)/doc/$$f.html; then \ + GZIP=-9vf tar -C $(DIR)/doc -zcf $(DIR)/../$$f.html.tar.gz $$f.html; \ + else \ + echo "unable to locate $$f.html"; false; \ + fi; \ + dpkg-distaddfile -f$(DIR)/debian/files $$f.html.tar.gz byhand -; \ done + set -e; \ + version=`sed -n 's/^Version: //p' $(DIR)/debian/tmp-dev/DEBIAN/control`; \ + file=dpkg-$${version}.tar.gz; \ + cp $(BUILD)/$${file} $(DIR)/..; \ + dpkg-distaddfile -f$(DIR)/debian/files $${file} byhand -; -binary-arch: checkroot build binary-trees - touch debian/tmp-main/var/lib/dpkg/{status,available} - dpkg-shlibdeps -dPre-Depends main/dpkg dselect/dselect +binary-arch: binary-trees + $(checkdir) + mv debian/tmp-main/usr/sbin/start-stop-daemon debian/tmp-main/sbin/start-stop-daemon + -strip debian/tmp-main/usr/{bin,sbin}/* debian/tmp-main/sbin/* + -strip --strip-unneeded debian/tmp-main/usr/lib/libdpkg.so.* + -strip --strip-debug debian/tmp-main/usr/lib/libdpkg.a + dpkg-shlibdeps -dPre-Depends debian/tmp-main/usr/{bin,sbin}/* dpkg-gencontrol -pdpkg -Pdebian/tmp-main chown -R root.root debian/tmp-main chmod -R g-ws,a+r,u+w debian/tmp-main - set -e; cd debian/tmp-main; \ - version=`sed -n 's/^Version: //p' DEBIAN/control`; \ - file=dpkg_$${version}_$(arch).nondebbin.tar; \ - tar cf ../../../$${file} usr var && gzip -9vf ../../../$${file}; \ - cd ../..; dpkg-distaddfile $${file}.gz byhand - - rm debian/tmp-main/var/lib/dpkg/{status,available} + set -e; \ + version=`sed -n 's/^Version: //p' $(DIR)/debian/tmp-main/DEBIAN/control`; \ + file=dpkg_$${version}_$(arch).nondebbin.tar; \ + tar -C $(DIR)/debian/tmp-main -cf $(DIR)/../$${file} usr var; \ + gzip -9vf $(DIR)/../$${file}; \ + dpkg-distaddfile -f$(DIR)/debian/files $${file}.gz byhand - dpkg-deb --build debian/tmp-main .. define checkdir - test -f include/dpkg.h + test -f include/dpkg.h.in endef - -checkroot: - $(checkdir) - test root = "`whoami`" - -.PHONY: binary source diff clean checkroot diff --git a/debian/shlibs b/debian/shlibs new file mode 100644 index 000000000..f06ce99eb --- /dev/null +++ b/debian/shlibs @@ -0,0 +1 @@ +libdpkg 0 dpkg (>= 1.4.0.9) diff --git a/debian/shlibs.default.i386 b/debian/shlibs.default.i386 index 10591b270..ea52269cb 100644 --- a/debian/shlibs.default.i386 +++ b/debian/shlibs.default.i386 @@ -1,14 +1,15 @@ -libc 5 libc5 (>= 5.2.18) -libm 5 libc5 (>= 5.2.18) -libncurses 3.0 ncurses3.0 -libICE 6 elf-x11r6lib -libPEX5 6 elf-x11r6lib -libSM 6 elf-x11r6lib -libX11 6 elf-x11r6lib -libXIE 6 elf-x11r6lib -libXaw 6 elf-x11r6lib -libXext 6 elf-x11r6lib -libXi 6 elf-x11r6lib -libXmu 6 elf-x11r6lib -libXt 6 elf-x11r6lib -libXtst 6 elf-x11r6lib +libc 6 libc6 +libm 6 libc6 +libncurses 3.4 ncurses3.4 +libICE 6 xlib6g (>= 3.3-5) +libPEX5 6 xlib6g (>= 3.3-5) +libSM 6 xlib6g (>= 3.3-5) +libX11 6 xlib6g (>= 3.3-5) +libXIE 6 xlib6g (>= 3.3-5) +libXaw 6 xlib6g (>= 3.3-5) +libXext 6 xlib6g (>= 3.3-5) +libXi 6 xlib6g (>= 3.3-5) +libXmu 6 xlib6g (>= 3.3-5) +libXt 6 xlib6g (>= 3.3-5) +libXtst 6 xlib6g (>= 3.3-5) +libXp 6 xlib6g (>= 3.3-5) diff --git a/debian/shlibs.default.m68k b/debian/shlibs.default.m68k deleted file mode 120000 index bd1befd67..000000000 --- a/debian/shlibs.default.m68k +++ /dev/null @@ -1 +0,0 @@ -shlibs.default.i386
\ No newline at end of file diff --git a/debian/shlibs.local b/debian/shlibs.local new file mode 100644 index 000000000..f1b46238a --- /dev/null +++ b/debian/shlibs.local @@ -0,0 +1 @@ +libdpkg 0 diff --git a/debian/substvars b/debian/substvars deleted file mode 100644 index 915d7d536..000000000 --- a/debian/substvars +++ /dev/null @@ -1 +0,0 @@ -shlibs:Pre-Depends=libc5 (>= 5.2.18), ncurses3.0 diff --git a/doc/ChangeLog b/doc/ChangeLog new file mode 100644 index 000000000..336bc0ae7 --- /dev/null +++ b/doc/ChangeLog @@ -0,0 +1,147 @@ +debian-manuals (2.1.2.2) frozen unstable; + + * Fixed even more typographical and grammatical errors in Policy and + Programmer's manual + * Corrected the contact email addresses again. + * Added a paragraph to Policy 6.3 on taking over an old package (Guy Maor) + * Added a paragraph to Programmer 4.2.14 on listing distributions to load + a package into. (Guy Maor) + * Further clarification of use of absolute pathnames in scripts in + Programmer 6.1. + + -- David Morris <bweaver@worf.netins.net> Tue, 3 Dec 1996 23:28:04 -0600 + +debian-manuals (2.1.2.1) frozen unstable; + + * Many editorial and formatting revisions with suggestions from Ian Jackson, + Guy Maor and others + * correction of chiark address in Policy 6.2 + * footnote in Programmers chapter 2 pointing to deb(5) manpage for + description of deb file format. + * addition of more dpkg examples in Programmer chapter 2 + * Replace paragraph in Policy 4.1 outlining compiling parameters for + shared libraries. + * Added paragraph in Programmer 6.1 on paths in maintainer scripts + (Bug #2481) + * Cleaned up language and formatting of Programmer's 12.2, shlibs + * Corrected contact addresses for listmaster and override-change + + -- David Morris <bweaver@worf.netins.net> Wed, 27 Nov 1996 08:17:16 -0600 + +debian-manuals (2.1.2.0) frozen unstable; + + * Mostly editorial changes in Policy Manual. + * Added summary of distribution criteria to Introduction + * Added section headings for copyright criteria + * Fixed typos (Bugs #4485, #4622) + * Added paragraph in Compilation Options related to use of shared and + static libraries. (Bug #5299) + * Paragraph added about where to find PGP and other export restricted + packages in section on Procedure + * Change in List administrator and in the contact address for becoming + a package maintainer + * A paragraph added related to who to contact for package maintainer changes. + * Changed where to send upload announcements: uploads destined for unstable, + frozen, or experimental go to debian-devel-changes. + + * Made some mostly editorial changes to Programmers Manual. + * Added a recommendation to debmake in Introduction. + * A further interpretation of the various Distributions is added with + the intent of helping people decide which one to choose. (section 4.2.14) + * Section 12 on Shared Libraries expanded with further technical information + on various shlib files + * Section in 2.2 on format of shlib file moved to new subsection within 12. + * Paragraph on adding a symlink without version number added to Shared + Library Section (Guy Maor, Bug #5299) + + -- David Morris <bweaver@worf.netins.net> Fri, 22 Nov 1996 23:41:39 -0600 + +debian-manuals (2.1.1.0) unstable; + + * Hard links are forbidden in source packages (they didn't work anyway, + and can't easily be made to work reliably). + * Do not use dpkg-divert or update-alternatives without consultation. + + * Do not need to declare dependencies on Essential packages. + * Restrictions on Pre-Depends stated in policy manual. + * debian/substvars file is now almost always auto-generated. + * Shared libraries must be installed stripped. + * Essential and Pre-Depends put together in policy manual. + + * Explained component-wise (file-wise) vs. package-wise dependencies. + + -- Ian Jackson <ian@chiark.greenend.org.uk> Thu, 12 Sep 1996 01:00:41 +0100 + +debian-manuals (2.1.0.0) unstable; + + * Upstream changelog must be installed too (was just recommended). + + * Modification to use dpkg-shlibdeps added to conversion instructions. + * Packages which are buggy and orphaned but which are preserved for + compatibility go in contrib. + + * Programmers' manual source package section refers to conversion + instructions in policy manual. + * Make it clear that recommending a non-free or contrib package puts a + package in contrib. + + -- Ian Jackson <ian@chiark.chu.cam.ac.uk> Sun, 1 Sep 1996 17:47:18 +0100 + +debian-manuals (2.0.1.0) unstable; + + * varargs.h and libtermcap are obsolete - use stdarg.h and ncurses. + * Shared library link/library ordering corrected (aargh). + * When to byte-compile Elisp files. + * Missing final newlines not represented by dpkg-source. + + * Must post upload announcements to debian-changes. + * Moved some sections into new `configuring and building' chapter. + * Typo fixes. + + -- Ian Jackson <ian@chiark.chu.cam.ac.uk> Sat, 31 Aug 1996 20:07:22 +0100 + +debian-manuals (2.0.0.0) unstable; + + * Footnote added OK'ing copyrights which require name changes. + * More detail about changelog format names. + + * Problematic licence restrictions are formatted as lists. + * Mentioned 822-date utility as way to generate RFC822 format dates. + * Typos corrected. + * Released. + + -- Ian Jackson <ian@chiark.chu.cam.ac.uk> Mon, 26 Aug 1996 14:27:34 +0100 + +debian-manuals (0.2.1.1) unstable; + + * Can't overwrite directories in one package with files in another. + + -- Ian Jackson <ian@chiark.chu.cam.ac.uk> Sat, 24 Aug 1996 18:44:54 +0100 + +debian-manuals (0.2.1.0) unstable; + + * Policy says when and how to include original source in upload. + + * Need -sa on dpkg-genchanges/dpkg-buildpackage when converting. + + * Use minor patchlevel for meaning changes which don't affect packages. + * More verbosity about netiquette. + * Reorganised participation and upload policy: merged with mailing lists. + + -- Ian Jackson <ian@chiark.chu.cam.ac.uk> Fri, 23 Aug 1996 12:48:09 +0100 + +debian-manuals (0.2.0.1) experimental; + + * Said that system administrators' manual does not exist. + + -- Ian Jackson <ian@chiark.chu.cam.ac.uk> Fri, 23 Aug 1996 04:05:36 +0100 + +debian-manuals (0.2.0.0) experimental; + + * Draft releases. + + -- Ian Jackson <ian@chiark.chu.cam.ac.uk> Wed, 21 Aug 1996 15:07:53 +0100 + +Local variables: +mode: debian-changelog +End: diff --git a/doc/Makefile.am b/doc/Makefile.am new file mode 100644 index 000000000..8c0350258 --- /dev/null +++ b/doc/Makefile.am @@ -0,0 +1,110 @@ +## Process this file with automake to produce a Makefile.in + +AUTOMAKE_OPTIONS = 1.1 foreign + +## Directory definitions + +docdir = $(prefix)/doc +pkgdocdir = $(docdir)/@PACKAGE@ + +## Automake variables + +man_MANS = deb.5 deb-old.5 deb-control.5 +pkgdoc_DATA = +EXTRA_DIST = database-structure.fig changelog \ + manuals-version \ + $(SGMLFILES) $(man_MANS) \ + texinfo.dtd \ + texinfo.texi_mapping texinfo.debian_mapping + +HTMLDOCSTAMPS = internals.html-stamp +HTMLDIRS = internals.html +SGMLFILES = internals.sgml +HARDCOPY = internals.ps internals.dvi + +CLEANFILES = $(srcdir)/manuals-version.new +DISTCLEANFILES = +INFOFILES = internals.info + +## Rules + +SUFFIXES = .html-stamp .sgml .ps .fig .monops + +.PHONY: all install-data-local uninstall-local dist-hook clean-local + +all: $(HTMLDOCSTAMPS) $(HARDCOPY) $(INFOFILES) + +$(srcdir)/manuals-version: $(top_srcdir)/debian/changelog + v=`dpkg-parsechangelog -l$< | sed -n 's/^Version: //p'` && \ + echo "<!entity manuals-version \"$$v\">" >$@.new + echo "<!entity dpkg-version \"$(VERSION)\">" >>$@.new + (cmp -s $@.new $@ || mv -f $@.new $@) && rm -f $@.new + +internals.sgmls: internals.sgml texinfo.dtd manuals-version + nsgmls $< > $@ || ($(RM) $@ && false) + +internals.texi: internals.sgmls texinfo.texi_mapping + sgmlsasp $(srcdir)/texinfo.texi_mapping < $< > $@ || ($(RM) $@ && false) + perl -pi -e 's/printindex FN/printindex fn/' $@ || ($(RM) $@ && false) + +internals.ps: internals.dvi + dvips -t letter -o $@ $^ + +internals.dvi: internals.texi + texi2dvi $^ + +internals.info: internals.texi + makeinfo $^ + +internals.html-stamp: internals.texi + -$(RM) -r $*.html* + mkdir $*.html + (cd $*.html && texi2html -monolithic ../$<) + ln -s internals.html $*.html/index.html + touch $@ + +database-structure.ps: database-structure.fig + fig2dev -L ps -c -l _ -P <$< >ps + mv -f ps $@ + +database-structure.monops: database-structure.ps + perl -pe 's:^/(col[0-7]) \{[01 ]*1[01 ]* setrgbcolor\}\ + bind def$$::/$$1 {} bind def:' $< >ps + mv -f ps $@ + +install-data-local: $(HTMLDOCSTAMPS) + $(mkinstalldirs) $(pkgdocdir) + $(INSTALL_DATA) $(top_srcdir)/debian/changelog $(pkgdocdir)/changelog + $(INSTALL_DATA) $(srcdir)/changelog $(pkgdocdir)/changelog.manuals + set -e; for f in $^; do \ + g=`echo $$f | sed -e 's/-stamp$$//'`; \ + cp -r $$g $(pkgdocdir)/`basename $$g`; \ + done + +uninstall-local: + -$(RM) $(pkgdocdir)/changelog.manuals $(pkgdocdir)/changelog + -cd $(pkgdocdir) && rm -rf $(HTMLDIRS) + +dist-hook: $(HTMLDOCSTAMPS) $(HARDCOPY) internals.sgmls internals.texi internals.info + cp -p $^ $(distdir) + for f in `echo $^ | tr ' \t' '\n\n' | sed -ne 's:.html-stamp::gp'`; do set -e; \ + $(RM) -r $(distdir)/`basename $$f.html`; \ + mkdir $(distdir)/`basename $$f.html`; \ + cp -p $$f.html/* $(distdir)/`basename $$f.html`; \ + done + $(RM) -r $(distdir)/obsolete + cp -rp $(srcdir)/obsolete $(distdir)/ + cp -p $(HARDCOPY) $(distdir)/ + +maintainer-clean-local: doc-clean + $(RM) manuals-version + -$(RM) $(srcdir)/Makefile.in + +doc-clean: + -$(RM) *.{aux,cp,dvi,fn,ky,log,pg,toc,tp,vr,bak} + -$(RM) internals.{FN,fns,sgmls,texi,info*} + -$(RM) -r {packaging,internals}.{texi,html-stamp,text,ps,lout} + -$(RM) -r {packaging,internals}.html + -$(RM) manuals-version* + +## End of file. diff --git a/doc/Makefile.in b/doc/Makefile.in deleted file mode 100644 index 381f98c99..000000000 --- a/doc/Makefile.in +++ /dev/null @@ -1,93 +0,0 @@ -# Copyright (C) 1994 Ian Murdock <imurdock@debian.org> -# Copyright (C) 1994,1995 Ian Jackson <ijackson@nyx.cs.du.edu> -# -# This is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as -# published by the Free Software Foundation; either version 2, -# or (at your option) any later version. -# -# This is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public -# License along with dpkg; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -srcdir = @srcdir@ -VPATH = @srcdir@ - -prefix = @prefix@ -infodir = $(prefix)/info -mandir = $(prefix)/man -man5dir = $(mandir)/man5 -man5 = 5 -docdir = $(prefix)/doc -dpkgdocdir = $(docdir)/dpkg - -DIST = Makefile.in $(SRC) $(MAN) - -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ - -MAKEINFO = makeinfo -TEXI2DVI = texi2dvi - -SGMLDOCSTAMPS= programmer.html-stamp policy.html-stamp - -# Files folded into manuals -OBSOLETEDOCS= descriptions.txt upgrades+errors.txt \ - maintainer-script-args.txt virtual-dependencies.txt \ - auto-deconfiguration.txt dependency-ordering.txt \ - disappear-replace.txt diversions.text \ - essential-flag.txt version-ordering.txt - -all: $(DPKGDOCS) $(SGMLDOCSTAMPS) - -manuals-version: changelog Makefile - v=`dpkg-parsechangelog -lchangelog | sed -n 's/^Version: //p'` && \ - echo "<!entity manuals-version \"$$v\">" >$@.new - d=`pwd | sed -e 's,/doc$$,,; s,^.*dpkg-\([0-9.]*\),\1,'` && \ - echo "<!entity dpkg-version \"$$d\">" >>$@.new - mv $@.new $@ - -%.html-stamp: %.sgml manuals-version - rm -rf $*.html - debiandoc2html $< - touch $@ - -guidelines.info: guidelines.texi - $(MAKEINFO) $(srcdir)/guidelines.texi - -database-structure.ps: database-structure.fig - fig2dev -L ps -c -l _ -P <database-structure.fig >ps - mv ps database-structure.ps - -database-structure.monops: database-structure.ps - perl -pe 's:^/(col[0-7]) \{[01 ]*1[01 ]* setrgbcolor\}\ - bind def$$:/$$1 {} bind def:' database-structure.ps >ps - mv ps database-structure.monops - -clean: - rm -f $(SGMLDOCSTAMPS) - rm -f database-structure.ps database-structure.monops ps - rm -f *.{aux,cp,dvi,fn,ky,log,pg,toc,tp,vr,bak} - rm -f guidelines.info* - rm -rf {programmer,policy}.{html*,sasp*,text*,ps*,lout*} - -distclean: - rm -f Makefile *.orig *~ *.~* ./#*# - -install: all - $(INSTALL_DATA) deb.5 $(man5dir)/deb.$(man5) - $(INSTALL_DATA) deb-old.5 $(man5dir)/deb-old.$(man5) - $(INSTALL_DATA) deb-control.5 $(man5dir)/deb-control.$(man5) - set -e; for f in $(SGMLDOCSTAMPS) ; do \ - g=`echo $$f | sed -e 's/-stamp$$//'` ; \ - cp -r $$g $(dpkgdocdir)/$$g ; \ - done - $(INSTALL_DATA) developer-keys.pgp $(dpkgdocdir)/. - $(INSTALL_DATA) ../debian/changelog $(dpkgdocdir)/changelog.dpkg - $(INSTALL_DATA) changelog $(dpkgdocdir)/changelog.manuals diff --git a/doc/changelog b/doc/changelog index c16a1edba..336bc0ae7 100644 --- a/doc/changelog +++ b/doc/changelog @@ -1,3 +1,61 @@ +debian-manuals (2.1.2.2) frozen unstable; + + * Fixed even more typographical and grammatical errors in Policy and + Programmer's manual + * Corrected the contact email addresses again. + * Added a paragraph to Policy 6.3 on taking over an old package (Guy Maor) + * Added a paragraph to Programmer 4.2.14 on listing distributions to load + a package into. (Guy Maor) + * Further clarification of use of absolute pathnames in scripts in + Programmer 6.1. + + -- David Morris <bweaver@worf.netins.net> Tue, 3 Dec 1996 23:28:04 -0600 + +debian-manuals (2.1.2.1) frozen unstable; + + * Many editorial and formatting revisions with suggestions from Ian Jackson, + Guy Maor and others + * correction of chiark address in Policy 6.2 + * footnote in Programmers chapter 2 pointing to deb(5) manpage for + description of deb file format. + * addition of more dpkg examples in Programmer chapter 2 + * Replace paragraph in Policy 4.1 outlining compiling parameters for + shared libraries. + * Added paragraph in Programmer 6.1 on paths in maintainer scripts + (Bug #2481) + * Cleaned up language and formatting of Programmer's 12.2, shlibs + * Corrected contact addresses for listmaster and override-change + + -- David Morris <bweaver@worf.netins.net> Wed, 27 Nov 1996 08:17:16 -0600 + +debian-manuals (2.1.2.0) frozen unstable; + + * Mostly editorial changes in Policy Manual. + * Added summary of distribution criteria to Introduction + * Added section headings for copyright criteria + * Fixed typos (Bugs #4485, #4622) + * Added paragraph in Compilation Options related to use of shared and + static libraries. (Bug #5299) + * Paragraph added about where to find PGP and other export restricted + packages in section on Procedure + * Change in List administrator and in the contact address for becoming + a package maintainer + * A paragraph added related to who to contact for package maintainer changes. + * Changed where to send upload announcements: uploads destined for unstable, + frozen, or experimental go to debian-devel-changes. + + * Made some mostly editorial changes to Programmers Manual. + * Added a recommendation to debmake in Introduction. + * A further interpretation of the various Distributions is added with + the intent of helping people decide which one to choose. (section 4.2.14) + * Section 12 on Shared Libraries expanded with further technical information + on various shlib files + * Section in 2.2 on format of shlib file moved to new subsection within 12. + * Paragraph on adding a symlink without version number added to Shared + Library Section (Guy Maor, Bug #5299) + + -- David Morris <bweaver@worf.netins.net> Fri, 22 Nov 1996 23:41:39 -0600 + debian-manuals (2.1.1.0) unstable; * Hard links are forbidden in source packages (they didn't work anyway, diff --git a/doc/deb-old.5 b/doc/deb-old.5 index df6a017a0..d415281dc 100644 --- a/doc/deb-old.5 +++ b/doc/deb-old.5 @@ -15,7 +15,7 @@ changed since Debian 0.93 and the new format is being phased in. The old format is described here. Please see .BR deb (5) -for details of the old format. +for details of the new format. .SH FORMAT The file is two lines of format information as ASCII text, followed by two concatenated gzipped ustar files. diff --git a/doc/developer-keys.pgp b/doc/developer-keys.pgp Binary files differdeleted file mode 100644 index 84587e742..000000000 --- a/doc/developer-keys.pgp +++ /dev/null diff --git a/doc/internals.sgml b/doc/internals.sgml new file mode 100644 index 000000000..994abb5f3 --- /dev/null +++ b/doc/internals.sgml @@ -0,0 +1,552 @@ +<!doctype texinfo system "texinfo.dtd" [ +<!entity % manuals-version-def system "manuals-version"> +%manuals-version-def; +]> + +<texinfo> + +<setfilename>internals.info</> + +<titlepage> +<title>dpkg Internals Manual</title> +<author>Klee Dienes</author> +<date>Version &manuals-version; (dpkg &dpkg-version;)</date> +<abstract> +This manual describes the internal structure of the <code/dpkg/ package +management system. +</abstract> +</titlepage> + +<chapter>Copyright + +<p> +Copyright ©1997 Klee Dienes <samp/<klee@@mit.edu>/. + +<p> +This manual is free software; you may redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation; either version 2, or (at your option) any +later version. + +<p> +This is distributed in the hope that it will be useful, but +<em>without any warranty</em>; without even the implied warranty of +merchantability or fitness for a particular purpose. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License with +your Debian GNU/Linux system, in <file>/usr/doc/copyright/GPL</>, or +with the <code/dpkg/ source package as the file <file>COPYING</>. If +not, write to the Free Software Foundation, Inc., 675 Mass Ave, +Cambridge, MA 02139, USA. + +</chapter> + +<chapter>Build Notes + +<section>Automake + +<p> +This chapter by Tom Lees <tom&at;lpsg.demon.co.uk> on Tue, 4 Mar 1997 +21:34:57 +0000, with subsequent modifications by Klee Dienes <klee&at;debian.org> + +<p> +This chapter contains general notes about the conversion to +<code/automake/. If you plan on doing anything with <code/dpkg/, you +should probably read all of this file first. You have been warned. + +<p> +The current version of automake used is version <code/automake-1.1n/, +which is currently a beta version. It has several significant +advantages over the released version, including: + +<itemize> +<item>it supports emacs lisp properly +<item>It supports libtool properly +<item>it includes the aclocal utility +</itemize> + +<p> +The <code/aclocal/ utility is a very useful program which will automatically +build an <file/aclocal.m4/ file from the <file/configure.in/ file to include the +appropriate macros. + +<p> +<code/automake-1.1n/ can be retreived from +<file>ftp://ftp.cygnus.com/pub/tromey</file> + +<p> +This doesn't affect anything other than rebuilding the <file/Makefile.in/ files +from the sources. + +<p> +Probably the main difference which is noticable is that instead of +using proprietary directory names, it now supports <code/configure +--sharedstatedir/, and <code/configure --localstatedir/. To set these +to the Debian defaults, you should use <code>./configure +--localstatedir=/etc --sharedstatedir=/var/lib</>. + +<p> +I have also customized the canonicalizing macros found in +<code/autoconf-2.12/ to include the old way of finding the <code/dpkg/ +``architecture'', i.e. to be a bit more smart. Instead of it trying to +determine the architecture only, I changed it to use the `host', +`build', and `target' system types. The target CPU type is checked +against the archtable to find the architecture on which dpkg will run. + +<p> +It uses <code/gcc --print-libgcc-file-name/ to find out the build +architecture if possible (used later to determine ELF or <code/a.out/ +format), and also uses <code/dpkg --print-architecture/ if possible to +modify the <samp/cpu/ field before it passes on the target alias to +config.sub. If you want to specify the architecture, you should now +use "--target=", rather than <code/--with-arch/, which was essentially +a hack anyway. The old <code/--with-arch/ is still there, but it is +somewhat less functional. I have also moved the <code/DPKG_CACHED_/ +macros into dpkg.m4 to make configure.in a bit more readable. + +<p> +I also converted to libtool 0.7 (which can be found in the Debian +distribution now). Essentially, this means that all the dpkg tools can +be compiled against a shared <samp/libdpkg/ without much hassle (in +fact, it is the default). You do not need to install libtool to use +this feature (it works like autoconf), and generally, it should not be +needed much at all. + +<p> +The new <samp/dist/ targets will build a distribution including all +files built by the <code/debiandoc2html/, <code/debiandoc2ps/, etc., +which are included in the distribution so that people may build <code/dpkg/ +without these (especially useful to porters). + +<p> +A target <samp/make debian/ has been added, which will build the +Debian files from a working directory (does a <samp/make dist/ +first). Now all we need is a modified dpkg-source so that the +<file/dpkg-1.4.0.8.tar.gz/ GNU-distribution file can be used as part +of the Debian dsitribution. I'm working on this, but it doesn't work +too well at the moment (find it in examples). + +<p> +I removed the <samp/make portable/ target - it doesn't do anything useful. + +<p> +I have added <samp/make uninstall/ targets to aid non-Debian users who simply +want to try out certain Debian packages, and the "dist" targets are also +useful to build a "distribution" of the dpkg tool. Note that since automake +automatically includes dependencies into the Makefiles in a distribution, +if you want to modify the C files, it would be advisable to get and install +automake, and then re-run it in the base dpkg distribution directory, so that +automatic dependency generation will be switched back on, and any +dependencies which change will be taken account of. The "make maintainer-clean" +targets will remove all files which any of the following utilities create: + +<itemize> +<item>automake +<item>autoconf +<item>aclocal +<item>autoheader +<item>gettextize +<item>libtoolize +</itemize> + +<p> +If you want to modify any of the sources, I recommend that you do the following +first (after having installed the appropriate utilities, of course):- + +<itemize> +<item> +make maintainer-clean +<item> +aclocal +<item> +autoheader +<item> +autoconf +<item> +gettextize +<item> +libtoolize (do not let automake run this, as it will cause it not to +include the libtool files in the dist targets) +<item> +for i in COPYING INSTALL; do ln -s /usr/share/automake/$i .; done +<item> +automake +</itemize> + +<p> +I have also incorporated the patches originally made by Galen +Hazelwood to internationalize dpkg using GNU gettext - see the file +"NOTES.intl" for more information about this. + +<p> +Other minor changes are: + +<itemize> +<item> +The version number is now determined from debian/changelog, not from +the directory name. +<item> +Creation of version.h now handled from configure script, not Makefile. +<item> +include/dpkg.h is now generated from include/dpkg.h.in by a sed +script, inserting the appropriate directory definitions - so now it +supports changing the dpkg directories (can install in /usr/local) +<item> +Updated the COPYING (1 very minor change) and INSTALL files to those +distributed with automake-1.1l +<item> +Since the shared libdpkg is now installed, I also made +include/Makefile install dpkg.h and dpkg-db.h into /usr/include by +default +</itemize> + +Questions: + +<itemize> +<item> +Should I use <samp/localstatedir/ and <samp/sharedstatedir/ instead of +<samp/sysconfdir/ and <samp/datadir/? +</itemize> + +</section> + +<section>Internationalization + +<p> +This section by Galen Hazelwood. + +<p> +Dpkg is, to say the least, generous in its error reporting. The vast +majority of the output strings are error messages of one kind or another. +And if you feel that you've stumbled into the Department of Redundancy +Department, you would be absolutely correct. Many of the error messages +in dpkg.pot are duplicates, used at different points in the program. + +<p> +To avoid swamping the translators completely, I made some executive decisions +on what kinds of strings to translate. All the strings sent to debug() are +left alone, on the grounds that these are for dpkg developers, and not for +the general public. Most interal error messages were very cryptic, and +would probably confuse the translators when seen just sitting there in +the dpkg.pot file, and are also left alone. (I did mark some of the more +verbose ones for translation.) + +<p> +If others disagree with me about the necessity of translating these strings, +it's easy enough to just go through and mark them later. + +<p> +I added the startup gettext code to the main routine in dselect, which was +necessary as many of the strings in lib are translated. Dselect is otherwise +unchanged. + +<p> +Changes: + +<itemize> +<item> +The files in intl and po were taken from gettext 0.10.26, by way of +the gettextize program. I altered the makefiles to remove the VERSION +symbol, which is only used in targets which dpkg does not support. +<item> +aclocal.m4 was stolen from the textutils package, configure.in was +altered to use these new tests, symbols were added to acconfig.h, and +the two new directories were added to Makefile.in. +<item> +The dpkg, dpkg-deb, md5sum, split, and dselect Makefiles now look for +headers in ../intl, and try to link with whatever i18n libraries +configure finds. They also now define LOCALEDIR in CFLAGS. +<item> +include/dpkg.h has the necessary NLS boilerplate, and the only file +which dosen't include this (md5sum/md5sum.c) had it added directly. +<item> +The most intrusive change is due to a disagreement between xgettext +and the dpkg coding style. Although xgettext understands string +constant concatenation, it can't handle the case where preprocessor +symbols are used as well. The dpkg code uses this a lot, especially +in cases like this: +<example> +ohshite("error reading from " BACKEND " pipe"); +</example> +where BACKEND is defined as "dpkg-deb". Because xgettext can't handle +this, I have changed this usage in all cases to something like: +<example> +ohshite(_("error reading from dpkg-deb pipe"); +</example> +This isn't very kind to Ian, I know. But what can I do? +</itemize> + +</section> + +</chapter> + +<chapter>Code Internals + +<section>Structure Definitons + +<subsection>versionrevision +<p> +<example> +struct versionrevision @{ + unsigned long epoch; + char *version; + char *revision; +@}; +</example> + +<p> +The <tt/versionrevision/ structure is used to store a Debian version specification +</subsection> + +</section> + +<section>Functions + +<subsection>Parsing translation tables +<p> +Each of these tables is used to associate a set of strings with a +corresponding set of integers. + +Current tables are: + +<p> +<example> +const struct namevalue booleaninfos[]; +</example> + +<p> +Maps boolean strings (<code/"yes"/,<code/"no"/) to their binary values. + +<subsubsection><code/priorityinfos[]/ + +<p> +<example> +const struct namevalue priorityinfos[]; +</example> + +<p> +Maps priority strings to and from values of +type <code/enum pkgpriority/. +Current priority values are: + +<table> +<item><code/required/</item> +required +<item><code/important/</item> +important +<item><code/standard/</item> +standard +<item><code/recommended/</item> +recommended +<item><code/optional/</item> +optional +<item><code/extra/</item> +extra +<item><code/contrib/</item> +contrib +<item><code/other/</item> +other +<item><code/unknown/</item> +unknown +<item><code/base/</item> +This is obsolete, but is accepted as an alias for <code/required/. +</table> +</subsubsection> + +<subsubsection><code/statusinfos[]/ + +<p> +<example> +const struct namevalue statusinfos[]; +</example> + +Maps package status strings to values of type <code/enum ???/. + +Package status strings are: + +"not-installed" "unpacked" "half-configured" "installed" +"half-installed" "config-files" "postinst-failed" "removal-failed" +</subsubsection> + +<subsubsection><code/eflaginfos[]/ + +<p> +<example> +const struct namevalue eflaginfos[]; +</example> +</subsubsection> + +<subsubsection><code/wantinfos[]/ + +<p> +<example> +const struct namevalue wantinfos[]; +</example> +</subsubsection> + +<subsubsection><code/nicknames[]/ + +<p> +<example> +const struct nickname nicknames[]; +</example> + +Maps obsolete control fields to their current versions. + +</subsubsection> + +</subsection> + +<subsection>Parsing functions + +<subsubsection><code/parseerr/ +<findex/parseerr()/ + +<p> +<example> +void parseerr +(FILE *file, const char *filename, int lno, + FILE *warnto, int *warncount, const struct pkginfo *pigp, + int warnonly, const char *fmt, ...); +</example> + +Report an error parsing a control data stream. Checks <var/file/ for +error status on <var/file/, printing an error message to stderr and +exiting with error status if an error is present on the stream. +Formats the variable arguments according to the <code/printf/-style +string in <var/fmt/, preceding the result with <var/filename/, +<var/lno/, and <var/pigp/ (if not NULL). If <var/warnonly/ is 0, +writes the result to stderr and exits with error status. Otherwise, +increments <var/warncount/ and returns normally. +</subsubsection> + +<subsubsection><code/illegal_packagename/ +<findex/illegal_packagename()/ + +<p> +<example> +const char *illegal_packagename +(const char *p, const char **ep) +</example> + +Checks the package name at <var/p/ for proper syntax. Returns NULL in +case of success, setting <var/*ep/ to point after the last character +in the package name, including any trailing whitespace (as defined by +isspace()). In case of error, returns the error message as a pointer +to a static buffer. +</subsubsection> + +<subsubsection><code/informativeversion/ +<findex/informativeversion()/ + +<p> +<example> +int informativeversion(const struct versionrevision *version) +</example> + +<p> +Returns true if and only if the <code/versionrevision/ is non-empty; +otherwise returns false. +</subsubsection> + +<subsubsection><code/varbufversion/ +<findex/varbufversion()/ + +<p> +<example> +void varbufversion +(struct varbuf *vb, + const struct versionrevision *version, + enum versiondisplayepochwhen vdew); +</example> + +Writes a human-readable representation of <var/version/ to <var/vb/. +Possible values of <var/vdew/: + +<table> +<item><tt/vdew_never/</item> +never include epoch +<item><tt/vdew_nonambig/</item> +include epoch string if non-zero +<item><tt/vdew_always/</item> +always include epoch string +</table> +</subsubsection> + +<subsubsection><code/versiondescribe/ +<findex/versiondescribe()/ + +<p> +<example> +const char *versiondescribe +(const struct versionrevision *version, + enum versiondisplayepochwhen vdew); +</example> + +<p> +Return a human-readable representation of <var/version/ as a pointer +to a static buffer. If the version structure is empty, return +<code/"<none>"/. Static buffers are allocated from a set of 10 +in round-robin fashion (they will be re-used after 10 successive calls +to <code/versiondescribe/). +</subsubsection> + +<subsubsection><code/parseversion/ +<findex/parseversion()/ + +<p> +<example> +const char *parseversion +(struct versionrevision *rversion, const char *string); +</example> + +<p> +Parse the contents of <var/string/ into <var/rversion/. If +successful, returns NULL, otherwise returns a pointer to a static +error string. +</subsubsection> + +<subsubsection><code/parsemustfield/ +<findex/parsemustfield()/ + +<p> +<example> +void parsemustfield +(FILE *file, const char *filename, int lno, + FILE *warnto, int *warncount, + const struct pkginfo *pigp, int warnonly, + char **value, const char *what); +</example> +</subsubsection> + +<subsubsection><code/skip_slash_dotslash/ +<findex/skip_slash_dotslash()/ + +<p> +<example> +const char *skip_slash_dotslash (const char *p); +</example> +</subsubsection> + +<subsubsection><code/convert_string/ +<findex/convert_string()/ + +<p> +<example> +static int convert_string +(const char *filename, int lno, const char *what, int otherwise, + FILE *warnto, int *warncount, const struct pkginfo *pigp, + const char *startp, const struct namevalue *nvip, + const char **endpp) +</example> +</subsubsection> + +</subsection> + +</section> + +<contents> +<printindex name="fn"> + +</texinfo> diff --git a/doc/lout.li b/doc/lout.li deleted file mode 100644 index 04dfdb4cc..000000000 --- a/doc/lout.li +++ /dev/null @@ -1,1123 +0,0 @@ -00symbol 1 @DocumentLayout @TheoremCounterMarker -00symbol 10 @DocumentLayout @FigureCounterMarker -00symbol 11 @DocumentLayout @TablePrefixMarker -00symbol 12 @DocumentLayout @TableCounterMarker -00symbol 13 @PageMarker -00symbol 14 @DocumentLayout @FootNoteCounterMarker -00symbol 15 @DocumentLayout @Runner -00symbol 16 @DocumentLayout @NumberMarker -00symbol 17 @DocumentLayout listitem -00symbol 18 @DocumentLayout @FootNote -00symbol 19 @OptGall -00symbol 2 @DocumentLayout @DefinitionCounterMarker -00symbol 3 @DocumentLayout @ClaimCounterMarker -00symbol 4 @DocumentLayout @PropositionCounterMarker -00symbol 5 @DocumentLayout @LemmaCounterMarker -00symbol 6 @DocumentLayout @CorollaryCounterMarker -00symbol 7 @DocumentLayout @ExampleCounterMarker -00symbol 8 @DocumentLayout @NumDispCounterMarker -00symbol 9 @DocumentLayout @FigurePrefixMarker -1&3278.policy.lout.1 0 00001 0 policy.lout -1&3278.programmer.lout.1 0 00349 0 programmer.lout -10&4161.policy.lout.1 0 00010 1602 policy.lout -10&4161.programmer.lout.1 0 00350 1638 programmer.lout -11&4334.policy.lout.1 0 00011 1720 policy.lout -11&4334.programmer.lout.1 0 00351 1760 programmer.lout -12&4342.policy.lout.1 0 00012 1836 policy.lout -12&4342.programmer.lout.1 0 00352 1880 programmer.lout -13&1655.policy.lout.1 0 00034 4442 policy.lout -13&1655.policy.lout.10 0 00176 17809 policy.lout -13&1655.policy.lout.11 0 00180 17809 policy.lout -13&1655.policy.lout.12 0 00184 17809 policy.lout -13&1655.policy.lout.13 0 00188 17809 policy.lout -13&1655.policy.lout.14 0 00192 17809 policy.lout -13&1655.policy.lout.15 0 00196 17809 policy.lout -13&1655.policy.lout.16 0 00210 23905 policy.lout -13&1655.policy.lout.17 0 00214 23905 policy.lout -13&1655.policy.lout.18 0 00218 23905 policy.lout -13&1655.policy.lout.19 0 00222 23905 policy.lout -13&1655.policy.lout.2 0 00038 4442 policy.lout -13&1655.policy.lout.20 0 00226 23905 policy.lout -13&1655.policy.lout.21 0 00230 23905 policy.lout -13&1655.policy.lout.22 0 00234 23905 policy.lout -13&1655.policy.lout.23 0 00238 23905 policy.lout -13&1655.policy.lout.24 0 00242 23905 policy.lout -13&1655.policy.lout.25 0 00246 23905 policy.lout -13&1655.policy.lout.26 0 00250 23905 policy.lout -13&1655.policy.lout.27 0 00254 23905 policy.lout -13&1655.policy.lout.28 0 00258 23905 policy.lout -13&1655.policy.lout.29 0 00262 23905 policy.lout -13&1655.policy.lout.3 0 00042 4442 policy.lout -13&1655.policy.lout.30 0 00266 23905 policy.lout -13&1655.policy.lout.31 0 00270 23905 policy.lout -13&1655.policy.lout.32 0 00274 23905 policy.lout -13&1655.policy.lout.33 0 00278 23905 policy.lout -13&1655.policy.lout.34 0 00285 89259 policy.lout -13&1655.policy.lout.35 0 00289 89259 policy.lout -13&1655.policy.lout.36 0 00293 89259 policy.lout -13&1655.policy.lout.37 0 00297 89259 policy.lout -13&1655.policy.lout.38 0 00301 89259 policy.lout -13&1655.policy.lout.39 0 00305 89259 policy.lout -13&1655.policy.lout.4 0 00152 17809 policy.lout -13&1655.policy.lout.40 0 00309 89259 policy.lout -13&1655.policy.lout.41 0 00313 89259 policy.lout -13&1655.policy.lout.42 0 00317 89259 policy.lout -13&1655.policy.lout.43 0 00321 89259 policy.lout -13&1655.policy.lout.5 0 00156 17809 policy.lout -13&1655.policy.lout.6 0 00160 17809 policy.lout -13&1655.policy.lout.7 0 00164 17809 policy.lout -13&1655.policy.lout.8 0 00168 17809 policy.lout -13&1655.policy.lout.9 0 00172 17809 policy.lout -13&1655.programmer.lout.1 0 00353 6890 programmer.lout -13&1655.programmer.lout.10 0 00354 6890 programmer.lout -13&1655.programmer.lout.100 0 00355 117524 programmer.lout -13&1655.programmer.lout.101 0 00356 117524 programmer.lout -13&1655.programmer.lout.102 0 00357 117524 programmer.lout -13&1655.programmer.lout.103 0 00358 128121 programmer.lout -13&1655.programmer.lout.104 0 00359 128121 programmer.lout -13&1655.programmer.lout.105 0 00360 128121 programmer.lout -13&1655.programmer.lout.11 0 00361 15938 programmer.lout -13&1655.programmer.lout.12 0 00362 15938 programmer.lout -13&1655.programmer.lout.13 0 00363 15938 programmer.lout -13&1655.programmer.lout.14 0 00364 15938 programmer.lout -13&1655.programmer.lout.15 0 00365 18049 programmer.lout -13&1655.programmer.lout.16 0 00366 18049 programmer.lout -13&1655.programmer.lout.17 0 00367 18049 programmer.lout -13&1655.programmer.lout.18 0 00368 18049 programmer.lout -13&1655.programmer.lout.19 0 00369 18049 programmer.lout -13&1655.programmer.lout.2 0 00370 6890 programmer.lout -13&1655.programmer.lout.20 0 00371 18049 programmer.lout -13&1655.programmer.lout.21 0 00372 22306 programmer.lout -13&1655.programmer.lout.22 0 00373 22306 programmer.lout -13&1655.programmer.lout.23 0 00374 22306 programmer.lout -13&1655.programmer.lout.24 0 00375 22306 programmer.lout -13&1655.programmer.lout.25 0 00376 22306 programmer.lout -13&1655.programmer.lout.26 0 00377 22306 programmer.lout -13&1655.programmer.lout.27 0 00378 22306 programmer.lout -13&1655.programmer.lout.28 0 00379 25795 programmer.lout -13&1655.programmer.lout.29 0 00380 25795 programmer.lout -13&1655.programmer.lout.3 0 00381 6890 programmer.lout -13&1655.programmer.lout.30 0 00382 25795 programmer.lout -13&1655.programmer.lout.31 0 00383 25795 programmer.lout -13&1655.programmer.lout.32 0 00384 25795 programmer.lout -13&1655.programmer.lout.33 0 00385 25795 programmer.lout -13&1655.programmer.lout.34 0 00386 25795 programmer.lout -13&1655.programmer.lout.35 0 00387 31375 programmer.lout -13&1655.programmer.lout.36 0 00388 31375 programmer.lout -13&1655.programmer.lout.37 0 00389 31375 programmer.lout -13&1655.programmer.lout.38 0 00390 31375 programmer.lout -13&1655.programmer.lout.39 0 00391 31375 programmer.lout -13&1655.programmer.lout.4 0 00392 6890 programmer.lout -13&1655.programmer.lout.40 0 00393 31375 programmer.lout -13&1655.programmer.lout.41 0 00394 31375 programmer.lout -13&1655.programmer.lout.42 0 00395 31375 programmer.lout -13&1655.programmer.lout.43 0 00396 31375 programmer.lout -13&1655.programmer.lout.44 0 00397 36795 programmer.lout -13&1655.programmer.lout.45 0 00398 36795 programmer.lout -13&1655.programmer.lout.46 0 00399 47127 programmer.lout -13&1655.programmer.lout.47 0 00400 47127 programmer.lout -13&1655.programmer.lout.48 0 00401 47127 programmer.lout -13&1655.programmer.lout.49 0 00402 47127 programmer.lout -13&1655.programmer.lout.5 0 00403 6890 programmer.lout -13&1655.programmer.lout.50 0 00404 47127 programmer.lout -13&1655.programmer.lout.51 0 00405 47127 programmer.lout -13&1655.programmer.lout.52 0 00406 47127 programmer.lout -13&1655.programmer.lout.53 0 00407 47127 programmer.lout -13&1655.programmer.lout.54 0 00408 47127 programmer.lout -13&1655.programmer.lout.55 0 00409 47127 programmer.lout -13&1655.programmer.lout.56 0 00410 47127 programmer.lout -13&1655.programmer.lout.57 0 00411 47127 programmer.lout -13&1655.programmer.lout.58 0 00412 54014 programmer.lout -13&1655.programmer.lout.59 0 00413 54014 programmer.lout -13&1655.programmer.lout.6 0 00414 6890 programmer.lout -13&1655.programmer.lout.60 0 00415 54014 programmer.lout -13&1655.programmer.lout.61 0 00416 54014 programmer.lout -13&1655.programmer.lout.62 0 00417 54014 programmer.lout -13&1655.programmer.lout.63 0 00418 54014 programmer.lout -13&1655.programmer.lout.64 0 00419 54014 programmer.lout -13&1655.programmer.lout.65 0 00420 54014 programmer.lout -13&1655.programmer.lout.66 0 00421 54014 programmer.lout -13&1655.programmer.lout.67 0 00422 54014 programmer.lout -13&1655.programmer.lout.68 0 00423 54014 programmer.lout -13&1655.programmer.lout.69 0 00424 54014 programmer.lout -13&1655.programmer.lout.7 0 00425 6890 programmer.lout -13&1655.programmer.lout.70 0 00426 54014 programmer.lout -13&1655.programmer.lout.71 0 00427 54014 programmer.lout -13&1655.programmer.lout.72 0 00428 54014 programmer.lout -13&1655.programmer.lout.73 0 00429 54014 programmer.lout -13&1655.programmer.lout.74 0 00430 54014 programmer.lout -13&1655.programmer.lout.75 0 00431 54014 programmer.lout -13&1655.programmer.lout.76 0 00432 54014 programmer.lout -13&1655.programmer.lout.77 0 00433 89803 programmer.lout -13&1655.programmer.lout.78 0 00434 89803 programmer.lout -13&1655.programmer.lout.79 0 00435 89803 programmer.lout -13&1655.programmer.lout.8 0 00436 6890 programmer.lout -13&1655.programmer.lout.80 0 00437 89803 programmer.lout -13&1655.programmer.lout.81 0 00438 89803 programmer.lout -13&1655.programmer.lout.82 0 00439 89803 programmer.lout -13&1655.programmer.lout.83 0 00440 89803 programmer.lout -13&1655.programmer.lout.84 0 00441 89803 programmer.lout -13&1655.programmer.lout.85 0 00442 89803 programmer.lout -13&1655.programmer.lout.86 0 00443 89803 programmer.lout -13&1655.programmer.lout.87 0 00444 89803 programmer.lout -13&1655.programmer.lout.88 0 00445 111402 programmer.lout -13&1655.programmer.lout.89 0 00446 111402 programmer.lout -13&1655.programmer.lout.9 0 00447 6890 programmer.lout -13&1655.programmer.lout.90 0 00448 111402 programmer.lout -13&1655.programmer.lout.91 0 00449 111402 programmer.lout -13&1655.programmer.lout.92 0 00450 111402 programmer.lout -13&1655.programmer.lout.93 0 00451 111402 programmer.lout -13&1655.programmer.lout.94 0 00452 111402 programmer.lout -13&1655.programmer.lout.95 0 00453 111402 programmer.lout -13&1655.programmer.lout.96 0 00454 111402 programmer.lout -13&1655.programmer.lout.97 0 00455 116385 programmer.lout -13&1655.programmer.lout.98 0 00456 116385 programmer.lout -13&1655.programmer.lout.99 0 00457 117524 programmer.lout -13&582.policy.lout.1 0 00019 2989 policy.lout -13&582.policy.lout.10 0 00079 10050 policy.lout -13&582.policy.lout.11 0 00085 10474 policy.lout -13&582.policy.lout.12 0 00090 10817 policy.lout -13&582.policy.lout.13 0 00094 11242 policy.lout -13&582.policy.lout.14 0 00098 11585 policy.lout -13&582.policy.lout.15 0 00106 12867 policy.lout -13&582.policy.lout.16 0 00110 13210 policy.lout -13&582.policy.lout.17 0 00117 14303 policy.lout -13&582.policy.lout.18 0 00125 15546 policy.lout -13&582.policy.lout.19 0 00129 15971 policy.lout -13&582.policy.lout.2 0 00023 3550 policy.lout -13&582.policy.lout.20 0 00133 16314 policy.lout -13&582.policy.lout.21 0 00141 17466 policy.lout -13&582.policy.lout.22 0 00146 17809 policy.lout -13&582.policy.lout.23 0 00197 22857 policy.lout -13&582.policy.lout.24 0 00204 23905 policy.lout -13&582.policy.lout.25 0 00279 89259 policy.lout -13&582.policy.lout.3 0 00025 4102 policy.lout -13&582.policy.lout.4 0 00028 4442 policy.lout -13&582.policy.lout.5 0 00043 6301 policy.lout -13&582.policy.lout.6 0 00049 7245 policy.lout -13&582.policy.lout.7 0 00057 7666 policy.lout -13&582.policy.lout.8 0 00066 8660 policy.lout -13&582.policy.lout.9 0 00071 9082 policy.lout -13&582.programmer.lout.1 0 00458 3061 programmer.lout -13&582.programmer.lout.10 0 00459 15506 programmer.lout -13&582.programmer.lout.11 0 00460 15938 programmer.lout -13&582.programmer.lout.12 0 00461 18049 programmer.lout -13&582.programmer.lout.13 0 00462 21955 programmer.lout -13&582.programmer.lout.14 0 00463 22306 programmer.lout -13&582.programmer.lout.15 0 00464 25795 programmer.lout -13&582.programmer.lout.16 0 00465 31375 programmer.lout -13&582.programmer.lout.17 0 00466 36795 programmer.lout -13&582.programmer.lout.18 0 00467 39415 programmer.lout -13&582.programmer.lout.19 0 00468 40814 programmer.lout -13&582.programmer.lout.2 0 00469 3634 programmer.lout -13&582.programmer.lout.20 0 00470 42360 programmer.lout -13&582.programmer.lout.21 0 00471 43468 programmer.lout -13&582.programmer.lout.22 0 00472 45126 programmer.lout -13&582.programmer.lout.23 0 00473 45559 programmer.lout -13&582.programmer.lout.24 0 00474 45910 programmer.lout -13&582.programmer.lout.25 0 00475 46343 programmer.lout -13&582.programmer.lout.26 0 00476 46694 programmer.lout -13&582.programmer.lout.27 0 00477 47127 programmer.lout -13&582.programmer.lout.28 0 00478 54014 programmer.lout -13&582.programmer.lout.29 0 00479 89803 programmer.lout -13&582.programmer.lout.3 0 00480 4194 programmer.lout -13&582.programmer.lout.30 0 00481 111402 programmer.lout -13&582.programmer.lout.31 0 00482 116385 programmer.lout -13&582.programmer.lout.32 0 00483 117524 programmer.lout -13&582.programmer.lout.33 0 00484 121000 programmer.lout -13&582.programmer.lout.34 0 00485 121351 programmer.lout -13&582.programmer.lout.35 0 00486 121784 programmer.lout -13&582.programmer.lout.36 0 00487 122135 programmer.lout -13&582.programmer.lout.37 0 00488 123417 programmer.lout -13&582.programmer.lout.38 0 00489 123768 programmer.lout -13&582.programmer.lout.39 0 00490 124201 programmer.lout -13&582.programmer.lout.4 0 00491 5264 programmer.lout -13&582.programmer.lout.40 0 00492 124552 programmer.lout -13&582.programmer.lout.41 0 00493 124985 programmer.lout -13&582.programmer.lout.42 0 00494 125336 programmer.lout -13&582.programmer.lout.43 0 00495 125769 programmer.lout -13&582.programmer.lout.44 0 00496 126120 programmer.lout -13&582.programmer.lout.45 0 00497 126553 programmer.lout -13&582.programmer.lout.46 0 00498 126904 programmer.lout -13&582.programmer.lout.47 0 00499 127337 programmer.lout -13&582.programmer.lout.48 0 00500 127688 programmer.lout -13&582.programmer.lout.49 0 00501 128121 programmer.lout -13&582.programmer.lout.5 0 00502 5693 programmer.lout -13&582.programmer.lout.50 0 00503 129729 programmer.lout -13&582.programmer.lout.6 0 00504 6890 programmer.lout -13&582.programmer.lout.7 0 00505 12936 programmer.lout -13&582.programmer.lout.8 0 00506 13285 programmer.lout -13&582.programmer.lout.9 0 00507 15157 programmer.lout -13&ch-alternatives 0 00508 125769 programmer.lout -13&ch-binarypkg 0 00051 7245 policy.lout -13&ch-binarypkg 0 00509 5264 programmer.lout -13&ch-conffiles 0 00510 124985 programmer.lout -13&ch-controlfields 0 00511 39415 programmer.lout -13&ch-conversion 0 00206 23905 policy.lout -13&ch-descriptions 0 00512 117524 programmer.lout -13&ch-developer 0 00143 17466 policy.lout -13&ch-diversions 0 00513 126120 programmer.lout -13&ch-mailinglists 0 00199 22857 policy.lout -13&ch-maintainerscripts 0 00514 47127 programmer.lout -13&ch-methif 0 00515 128121 programmer.lout -13&ch-pkgcopyright 0 00030 4442 policy.lout -13&ch-relationships 0 00516 121784 programmer.lout -13&ch-scope 0 00027 4102 policy.lout -13&ch-scope 0 00517 4194 programmer.lout -13&ch-sharedlibs 0 00518 126553 programmer.lout -13&ch-sourcepkg 0 00127 15546 policy.lout -13&ch-sourcepkg 0 00519 12936 programmer.lout -13&ch-sysvinit 0 00520 126904 programmer.lout -13&ch-versions 0 00521 46343 programmer.lout -13&last.page 0 00348 89259 policy.lout -13&last.page 0 00522 129729 programmer.lout -13&s-bincreating 0 00523 5264 programmer.lout -13&s-changesfiles 0 00148 17809 policy.lout -13&s-conflicts 0 00524 123417 programmer.lout -13&s-controlarea 0 00525 5693 programmer.lout -13&s-controlfile 0 00526 6890 programmer.lout -13&s-copyrightfile 0 00084 10050 policy.lout -13&s-depsyntax 0 00527 121784 programmer.lout -13&s-dpkgchangelog 0 00528 18049 programmer.lout -13&s-f-Architecture 0 00529 40814 programmer.lout -13&s-f-Binary 0 00530 43468 programmer.lout -13&s-f-Changes 0 00531 45559 programmer.lout -13&s-f-Conffiles 0 00532 45559 programmer.lout -13&s-f-Config-Version 0 00533 45559 programmer.lout -13&s-f-Date 0 00534 45126 programmer.lout -13&s-f-Description 0 00535 42360 programmer.lout -13&s-f-Distribution 0 00536 45126 programmer.lout -13&s-f-Essential 0 00537 42360 programmer.lout -13&s-f-Filename 0 00538 45559 programmer.lout -13&s-f-Files 0 00539 43468 programmer.lout -13&s-f-Format 0 00540 45559 programmer.lout -13&s-f-Installed-Size 0 00541 43468 programmer.lout -13&s-f-Maintainer 0 00542 40814 programmer.lout -13&s-f-Package 0 00543 39415 programmer.lout -13&s-f-Size 0 00544 45559 programmer.lout -13&s-f-Source 0 00545 42360 programmer.lout -13&s-f-Standards-Version 0 00546 45126 programmer.lout -13&s-f-Status 0 00547 45559 programmer.lout -13&s-f-Urgency 0 00548 45126 programmer.lout -13&s-f-Version 0 00549 40814 programmer.lout -13&s-f-classification 0 00550 42360 programmer.lout -13&s-instchangelog 0 00083 10050 policy.lout -13&s-mail 0 00109 12867 policy.lout -13&s-mscriptsinstact 0 00551 47127 programmer.lout -13&s-replaces 0 00552 124201 programmer.lout -13&s-sourcearchives 0 00553 25795 programmer.lout -13&s-sourcetools 0 00554 12936 programmer.lout -13&s-sourcetree 0 00555 15506 programmer.lout -13&s-srcsubstvars 0 00556 22306 programmer.lout -13&s-virtual 0 00557 123768 programmer.lout -13&s13.1 0 00558 126904 programmer.lout -13&s13.2 0 00559 126904 programmer.lout -13&s13.3 0 00560 127337 programmer.lout -13&s13.4 0 00561 127337 programmer.lout -13&s13.5 0 00562 127337 programmer.lout -13&s13.6 0 00563 127688 programmer.lout -13&s14.1 0 00564 128121 programmer.lout -13&s14.2 0 00565 128121 programmer.lout -13&s3.1 0 00052 7245 policy.lout -13&s3.1.1 0 00053 7245 policy.lout -13&s3.1.1 0 00566 12936 programmer.lout -13&s3.1.2 0 00054 7245 policy.lout -13&s3.1.2 0 00567 12936 programmer.lout -13&s3.1.3 0 00055 7245 policy.lout -13&s3.1.3 0 00568 13285 programmer.lout -13&s3.1.3.1 0 00056 7245 policy.lout -13&s3.1.3.2 0 00060 7666 policy.lout -13&s3.1.4 0 00061 7666 policy.lout -13&s3.1.4 0 00569 13285 programmer.lout -13&s3.1.5 0 00062 7666 policy.lout -13&s3.1.5 0 00570 15157 programmer.lout -13&s3.1.6 0 00068 8660 policy.lout -13&s3.1.6 0 00571 15157 programmer.lout -13&s3.1.7 0 00572 15157 programmer.lout -13&s3.11 0 00113 13210 policy.lout -13&s3.12 0 00119 14303 policy.lout -13&s3.13 0 00121 14303 policy.lout -13&s3.2 0 00069 8660 policy.lout -13&s3.2.1 0 00070 8660 policy.lout -13&s3.2.1 0 00573 15506 programmer.lout -13&s3.2.2 0 00073 9082 policy.lout -13&s3.2.2 0 00574 15938 programmer.lout -13&s3.2.2.1 0 00575 18049 programmer.lout -13&s3.2.3 0 00074 9082 policy.lout -13&s3.2.3.1 0 00576 21955 programmer.lout -13&s3.2.4 0 00081 10050 policy.lout -13&s3.2.4.1 0 00082 10050 policy.lout -13&s3.2.5 0 00577 22306 programmer.lout -13&s3.2.6 0 00578 25795 programmer.lout -13&s3.2.7 0 00087 10474 policy.lout -13&s3.2.8 0 00088 10474 policy.lout -13&s3.2.9 0 00089 10474 policy.lout -13&s3.3 0 00092 10817 policy.lout -13&s3.4 0 00093 10817 policy.lout -13&s3.4 0 00579 31375 programmer.lout -13&s3.4.1 0 00580 31375 programmer.lout -13&s3.5 0 00096 11242 policy.lout -13&s3.6 0 00097 11242 policy.lout -13&s3.7 0 00100 11585 policy.lout -13&s3.8 0 00101 11585 policy.lout -13&s3.9 0 00108 12867 policy.lout -13&s4.1 0 00128 15546 policy.lout -13&s4.1 0 00581 39415 programmer.lout -13&s4.2 0 00131 15971 policy.lout -13&s4.2 0 00582 39415 programmer.lout -13&s4.2.24 0 00583 45910 programmer.lout -13&s4.2.6 0 00584 42360 programmer.lout -13&s4.3 0 00132 15971 policy.lout -13&s4.4 0 00136 16314 policy.lout -13&s4.5 0 00137 16314 policy.lout -13&s5.1 0 00144 17466 policy.lout -13&s5.2 0 00145 17466 policy.lout -13&s6.1 0 00585 47127 programmer.lout -13&s6.3 0 00586 54014 programmer.lout -13&s6.4 0 00587 111402 programmer.lout -13&s6.5 0 00588 111402 programmer.lout -13&s7.1 0 00589 117524 programmer.lout -13&s7.2 0 00590 117524 programmer.lout -13&s7.3 0 00591 121000 programmer.lout -13&s8.2 0 00592 121784 programmer.lout -13&s8.2.1 0 00593 123417 programmer.lout -13&s8.2.2 0 00594 123417 programmer.lout -13&s8.5.1 0 00595 124201 programmer.lout -13&s8.5.2 0 00596 124201 programmer.lout -13&s8.6 0 00597 124201 programmer.lout -13&s9.1 0 00598 124985 programmer.lout -13&s9.2 0 00599 125336 programmer.lout -14&2495.policy.lout.1 0 00020 3340 policy.lout -14&2495.policy.lout.10 0 00067 8961 policy.lout -14&2495.policy.lout.11 0 00072 9302 policy.lout -14&2495.policy.lout.12 0 00077 9617 policy.lout -14&2495.policy.lout.13 0 00080 10353 policy.lout -14&2495.policy.lout.14 0 00086 10696 policy.lout -14&2495.policy.lout.15 0 00091 11121 policy.lout -14&2495.policy.lout.16 0 00095 11464 policy.lout -14&2495.policy.lout.17 0 00099 11889 policy.lout -14&2495.policy.lout.18 0 00104 12434 policy.lout -14&2495.policy.lout.19 0 00107 13089 policy.lout -14&2495.policy.lout.2 0 00024 3982 policy.lout -14&2495.policy.lout.20 0 00111 13514 policy.lout -14&2495.policy.lout.21 0 00115 13870 policy.lout -14&2495.policy.lout.22 0 00118 14525 policy.lout -14&2495.policy.lout.23 0 00123 15113 policy.lout -14&2495.policy.lout.24 0 00126 15850 policy.lout -14&2495.policy.lout.25 0 00130 16193 policy.lout -14&2495.policy.lout.26 0 00134 16618 policy.lout -14&2495.policy.lout.27 0 00139 17033 policy.lout -14&2495.policy.lout.28 0 00142 17688 policy.lout -14&2495.policy.lout.29 0 00147 18113 policy.lout -14&2495.policy.lout.3 0 00026 4322 policy.lout -14&2495.policy.lout.30 0 00198 23079 policy.lout -14&2495.policy.lout.31 0 00202 23472 policy.lout -14&2495.policy.lout.32 0 00205 24209 policy.lout -14&2495.policy.lout.33 0 00280 89481 policy.lout -14&2495.policy.lout.4 0 00029 4743 policy.lout -14&2495.policy.lout.5 0 00044 6521 policy.lout -14&2495.policy.lout.6 0 00047 6813 policy.lout -14&2495.policy.lout.7 0 00050 7546 policy.lout -14&2495.policy.lout.8 0 00058 7886 policy.lout -14&2495.policy.lout.9 0 00064 8228 policy.lout -14&2495.programmer.lout.1 0 00600 3416 programmer.lout -14&2495.programmer.lout.10 0 00601 13160 programmer.lout -14&2495.programmer.lout.11 0 00602 13590 programmer.lout -14&2495.programmer.lout.12 0 00603 14259 programmer.lout -14&2495.programmer.lout.13 0 00604 14708 programmer.lout -14&2495.programmer.lout.14 0 00605 15381 programmer.lout -14&2495.programmer.lout.15 0 00606 15813 programmer.lout -14&2495.programmer.lout.16 0 00607 16164 programmer.lout -14&2495.programmer.lout.17 0 00608 18357 programmer.lout -14&2495.programmer.lout.18 0 00609 21506 programmer.lout -14&2495.programmer.lout.19 0 00610 22181 programmer.lout -14&2495.programmer.lout.2 0 00611 4070 programmer.lout -14&2495.programmer.lout.20 0 00612 22614 programmer.lout -14&2495.programmer.lout.21 0 00613 26021 programmer.lout -14&2495.programmer.lout.22 0 00614 30926 programmer.lout -14&2495.programmer.lout.23 0 00615 31683 programmer.lout -14&2495.programmer.lout.24 0 00616 36346 programmer.lout -14&2495.programmer.lout.25 0 00617 37021 programmer.lout -14&2495.programmer.lout.26 0 00618 38966 programmer.lout -14&2495.programmer.lout.27 0 00619 39723 programmer.lout -14&2495.programmer.lout.28 0 00620 40362 programmer.lout -14&2495.programmer.lout.29 0 00621 41040 programmer.lout -14&2495.programmer.lout.3 0 00622 4418 programmer.lout -14&2495.programmer.lout.30 0 00623 41456 programmer.lout -14&2495.programmer.lout.31 0 00624 41908 programmer.lout -14&2495.programmer.lout.32 0 00625 42668 programmer.lout -14&2495.programmer.lout.33 0 00626 43016 programmer.lout -14&2495.programmer.lout.34 0 00627 43694 programmer.lout -14&2495.programmer.lout.35 0 00628 44222 programmer.lout -14&2495.programmer.lout.36 0 00629 44674 programmer.lout -14&2495.programmer.lout.37 0 00630 45434 programmer.lout -14&2495.programmer.lout.38 0 00631 45785 programmer.lout -14&2495.programmer.lout.39 0 00632 46218 programmer.lout -14&2495.programmer.lout.4 0 00633 4816 programmer.lout -14&2495.programmer.lout.40 0 00634 46569 programmer.lout -14&2495.programmer.lout.41 0 00635 47002 programmer.lout -14&2495.programmer.lout.42 0 00636 47353 programmer.lout -14&2495.programmer.lout.43 0 00637 54322 programmer.lout -14&2495.programmer.lout.44 0 00638 90029 programmer.lout -14&2495.programmer.lout.45 0 00639 110950 programmer.lout -14&2495.programmer.lout.46 0 00640 111710 programmer.lout -14&2495.programmer.lout.47 0 00641 116611 programmer.lout -14&2495.programmer.lout.48 0 00642 117832 programmer.lout -14&2495.programmer.lout.49 0 00643 120548 programmer.lout -14&2495.programmer.lout.5 0 00644 5569 programmer.lout -14&2495.programmer.lout.50 0 00645 121226 programmer.lout -14&2495.programmer.lout.51 0 00646 121659 programmer.lout -14&2495.programmer.lout.52 0 00647 122010 programmer.lout -14&2495.programmer.lout.53 0 00648 122443 programmer.lout -14&2495.programmer.lout.54 0 00649 122965 programmer.lout -14&2495.programmer.lout.55 0 00650 123643 programmer.lout -14&2495.programmer.lout.56 0 00651 124076 programmer.lout -14&2495.programmer.lout.57 0 00652 124427 programmer.lout -14&2495.programmer.lout.58 0 00653 124860 programmer.lout -14&2495.programmer.lout.59 0 00654 125211 programmer.lout -14&2495.programmer.lout.6 0 00655 5917 programmer.lout -14&2495.programmer.lout.60 0 00656 125644 programmer.lout -14&2495.programmer.lout.61 0 00657 125995 programmer.lout -14&2495.programmer.lout.62 0 00658 126428 programmer.lout -14&2495.programmer.lout.63 0 00659 126779 programmer.lout -14&2495.programmer.lout.64 0 00660 127212 programmer.lout -14&2495.programmer.lout.65 0 00661 127563 programmer.lout -14&2495.programmer.lout.66 0 00662 127996 programmer.lout -14&2495.programmer.lout.67 0 00663 128347 programmer.lout -14&2495.programmer.lout.68 0 00664 130037 programmer.lout -14&2495.programmer.lout.7 0 00665 6442 programmer.lout -14&2495.programmer.lout.8 0 00666 7195 programmer.lout -14&2495.programmer.lout.9 0 00667 12488 programmer.lout -14&2521.policy.lout.1 0 00046 6521 policy.lout -14&2521.policy.lout.2 0 00063 7886 policy.lout -14&2521.policy.lout.3 0 00076 9302 policy.lout -14&2521.policy.lout.4 0 00103 11889 policy.lout -14&2521.policy.lout.5 0 00114 13514 policy.lout -14&2521.policy.lout.6 0 00122 14525 policy.lout -14&2521.policy.lout.7 0 00138 16618 policy.lout -14&2521.policy.lout.8 0 00201 23079 policy.lout -14&2521.programmer.lout.1 0 00668 4418 programmer.lout -14&2521.programmer.lout.10 0 00669 39723 programmer.lout -14&2521.programmer.lout.11 0 00670 41040 programmer.lout -14&2521.programmer.lout.12 0 00671 41456 programmer.lout -14&2521.programmer.lout.13 0 00672 42668 programmer.lout -14&2521.programmer.lout.14 0 00673 43694 programmer.lout -14&2521.programmer.lout.15 0 00674 44222 programmer.lout -14&2521.programmer.lout.16 0 00675 90029 programmer.lout -14&2521.programmer.lout.17 0 00676 117832 programmer.lout -14&2521.programmer.lout.18 0 00677 122443 programmer.lout -14&2521.programmer.lout.2 0 00678 5917 programmer.lout -14&2521.programmer.lout.3 0 00679 7195 programmer.lout -14&2521.programmer.lout.4 0 00680 13590 programmer.lout -14&2521.programmer.lout.5 0 00681 14259 programmer.lout -14&2521.programmer.lout.6 0 00682 18357 programmer.lout -14&2521.programmer.lout.7 0 00683 26021 programmer.lout -14&2521.programmer.lout.8 0 00684 31683 programmer.lout -14&2521.programmer.lout.9 0 00685 37021 programmer.lout -15&1954.policy.lout.2 0 00347 108761 policy.lout -15&1954.policy.lout.3 0 00022 3460 policy.lout -15&1954.policy.lout.4 0 00346 108668 policy.lout -15&1954.programmer.lout.2 0 00686 130425 programmer.lout -15&1954.programmer.lout.3 0 00687 3540 programmer.lout -15&1954.programmer.lout.4 0 00688 130328 programmer.lout -15&policy.lout_1 0 00021 3460 policy.lout -15&policy.lout_10 0 00327 108668 policy.lout -15&policy.lout_11 0 00328 108668 policy.lout -15&policy.lout_12 0 00329 108668 policy.lout -15&policy.lout_13 0 00330 108668 policy.lout -15&policy.lout_14 0 00331 108668 policy.lout -15&policy.lout_15 0 00332 108668 policy.lout -15&policy.lout_16 0 00333 108668 policy.lout -15&policy.lout_17 0 00334 108668 policy.lout -15&policy.lout_18 0 00335 108668 policy.lout -15&policy.lout_19 0 00336 108668 policy.lout -15&policy.lout_20 0 00337 108668 policy.lout -15&policy.lout_21 0 00338 108668 policy.lout -15&policy.lout_22 0 00339 108668 policy.lout -15&policy.lout_23 0 00340 108668 policy.lout -15&policy.lout_24 0 00341 108668 policy.lout -15&policy.lout_25 0 00342 108668 policy.lout -15&policy.lout_26 0 00343 108668 policy.lout -15&policy.lout_27 0 00344 108668 policy.lout -15&policy.lout_28 0 00345 108668 policy.lout -15&policy.lout_5 0 00322 108668 policy.lout -15&policy.lout_6 0 00323 108668 policy.lout -15&policy.lout_7 0 00324 108668 policy.lout -15&policy.lout_8 0 00325 108668 policy.lout -15&policy.lout_9 0 00326 108668 policy.lout -15&programmer.lout_1 0 00689 3540 programmer.lout -15&programmer.lout_10 0 00690 130328 programmer.lout -15&programmer.lout_11 0 00691 130328 programmer.lout -15&programmer.lout_12 0 00692 130328 programmer.lout -15&programmer.lout_13 0 00693 130328 programmer.lout -15&programmer.lout_14 0 00694 130328 programmer.lout -15&programmer.lout_15 0 00695 130328 programmer.lout -15&programmer.lout_16 0 00696 130328 programmer.lout -15&programmer.lout_17 0 00697 130328 programmer.lout -15&programmer.lout_18 0 00698 130328 programmer.lout -15&programmer.lout_19 0 00699 130328 programmer.lout -15&programmer.lout_20 0 00700 130328 programmer.lout -15&programmer.lout_21 0 00701 130328 programmer.lout -15&programmer.lout_22 0 00702 130328 programmer.lout -15&programmer.lout_23 0 00703 130328 programmer.lout -15&programmer.lout_24 0 00704 130328 programmer.lout -15&programmer.lout_25 0 00705 130328 programmer.lout -15&programmer.lout_26 0 00706 130328 programmer.lout -15&programmer.lout_27 0 00707 130328 programmer.lout -15&programmer.lout_28 0 00708 130328 programmer.lout -15&programmer.lout_29 0 00709 130328 programmer.lout -15&programmer.lout_30 0 00710 130328 programmer.lout -15&programmer.lout_31 0 00711 130328 programmer.lout -15&programmer.lout_32 0 00712 130328 programmer.lout -15&programmer.lout_33 0 00713 130328 programmer.lout -15&programmer.lout_34 0 00714 130328 programmer.lout -15&programmer.lout_35 0 00715 130328 programmer.lout -15&programmer.lout_36 0 00716 130328 programmer.lout -15&programmer.lout_37 0 00717 130328 programmer.lout -15&programmer.lout_38 0 00718 130328 programmer.lout -15&programmer.lout_39 0 00719 130328 programmer.lout -15&programmer.lout_40 0 00720 130328 programmer.lout -15&programmer.lout_41 0 00721 130328 programmer.lout -15&programmer.lout_42 0 00722 130328 programmer.lout -15&programmer.lout_43 0 00723 130328 programmer.lout -15&programmer.lout_44 0 00724 130328 programmer.lout -15&programmer.lout_45 0 00725 130328 programmer.lout -15&programmer.lout_46 0 00726 130328 programmer.lout -15&programmer.lout_47 0 00727 130328 programmer.lout -15&programmer.lout_48 0 00728 130328 programmer.lout -15&programmer.lout_49 0 00729 130328 programmer.lout -15&programmer.lout_5 0 00730 130328 programmer.lout -15&programmer.lout_50 0 00731 130328 programmer.lout -15&programmer.lout_51 0 00732 130328 programmer.lout -15&programmer.lout_52 0 00733 130328 programmer.lout -15&programmer.lout_53 0 00734 130328 programmer.lout -15&programmer.lout_6 0 00735 130328 programmer.lout -15&programmer.lout_7 0 00736 130328 programmer.lout -15&programmer.lout_8 0 00737 130328 programmer.lout -15&programmer.lout_9 0 00738 130328 programmer.lout -16&1306.policy.lout.1 0 00031 4863 policy.lout -16&1306.policy.lout.10 0 00173 20538 policy.lout -16&1306.policy.lout.11 0 00177 20924 policy.lout -16&1306.policy.lout.12 0 00181 21310 policy.lout -16&1306.policy.lout.13 0 00185 21696 policy.lout -16&1306.policy.lout.14 0 00189 22083 policy.lout -16&1306.policy.lout.15 0 00193 22470 policy.lout -16&1306.policy.lout.16 0 00207 24330 policy.lout -16&1306.policy.lout.17 0 00211 25241 policy.lout -16&1306.policy.lout.18 0 00215 25797 policy.lout -16&1306.policy.lout.19 0 00219 26166 policy.lout -16&1306.policy.lout.2 0 00035 5369 policy.lout -16&1306.policy.lout.20 0 00223 26535 policy.lout -16&1306.policy.lout.21 0 00227 31188 policy.lout -16&1306.policy.lout.22 0 00231 35574 policy.lout -16&1306.policy.lout.23 0 00235 39888 policy.lout -16&1306.policy.lout.24 0 00239 44296 policy.lout -16&1306.policy.lout.25 0 00243 48828 policy.lout -16&1306.policy.lout.26 0 00247 53553 policy.lout -16&1306.policy.lout.27 0 00251 53922 policy.lout -16&1306.policy.lout.28 0 00255 59072 policy.lout -16&1306.policy.lout.29 0 00259 64483 policy.lout -16&1306.policy.lout.3 0 00039 5827 policy.lout -16&1306.policy.lout.30 0 00263 69640 policy.lout -16&1306.policy.lout.31 0 00267 74577 policy.lout -16&1306.policy.lout.32 0 00271 79521 policy.lout -16&1306.policy.lout.33 0 00275 84380 policy.lout -16&1306.policy.lout.34 0 00282 89692 policy.lout -16&1306.policy.lout.35 0 00286 90802 policy.lout -16&1306.policy.lout.36 0 00290 91171 policy.lout -16&1306.policy.lout.37 0 00294 94284 policy.lout -16&1306.policy.lout.38 0 00298 97420 policy.lout -16&1306.policy.lout.39 0 00302 100591 policy.lout -16&1306.policy.lout.4 0 00149 18234 policy.lout -16&1306.policy.lout.40 0 00306 103557 policy.lout -16&1306.policy.lout.41 0 00310 106632 policy.lout -16&1306.policy.lout.42 0 00314 107021 policy.lout -16&1306.policy.lout.43 0 00318 107874 policy.lout -16&1306.policy.lout.5 0 00153 18618 policy.lout -16&1306.policy.lout.6 0 00157 19002 policy.lout -16&1306.policy.lout.7 0 00161 19386 policy.lout -16&1306.policy.lout.8 0 00165 19770 policy.lout -16&1306.policy.lout.9 0 00169 20154 policy.lout -16&1306.programmer.lout.1 0 00739 7319 programmer.lout -16&1306.programmer.lout.10 0 00740 12093 programmer.lout -16&1306.programmer.lout.100 0 00741 115339 programmer.lout -16&1306.programmer.lout.101 0 00742 115716 programmer.lout -16&1306.programmer.lout.103 0 00743 116736 programmer.lout -16&1306.programmer.lout.104 0 00744 117113 programmer.lout -16&1306.programmer.lout.105 0 00745 117957 programmer.lout -16&1306.programmer.lout.106 0 00746 118510 programmer.lout -16&1306.programmer.lout.107 0 00747 119333 programmer.lout -16&1306.programmer.lout.108 0 00748 119895 programmer.lout -16&1306.programmer.lout.109 0 00749 128472 programmer.lout -16&1306.programmer.lout.11 0 00750 16289 programmer.lout -16&1306.programmer.lout.110 0 00751 128897 programmer.lout -16&1306.programmer.lout.111 0 00752 129326 programmer.lout -16&1306.programmer.lout.12 0 00753 16740 programmer.lout -16&1306.programmer.lout.13 0 00754 17134 programmer.lout -16&1306.programmer.lout.14 0 00755 17655 programmer.lout -16&1306.programmer.lout.15 0 00756 18482 programmer.lout -16&1306.programmer.lout.16 0 00757 18934 programmer.lout -16&1306.programmer.lout.17 0 00758 19391 programmer.lout -16&1306.programmer.lout.18 0 00759 19785 programmer.lout -16&1306.programmer.lout.19 0 00760 20295 programmer.lout -16&1306.programmer.lout.2 0 00761 7769 programmer.lout -16&1306.programmer.lout.20 0 00762 20689 programmer.lout -16&1306.programmer.lout.21 0 00763 22739 programmer.lout -16&1306.programmer.lout.22 0 00764 23133 programmer.lout -16&1306.programmer.lout.23 0 00765 23585 programmer.lout -16&1306.programmer.lout.24 0 00766 24042 programmer.lout -16&1306.programmer.lout.25 0 00767 24494 programmer.lout -16&1306.programmer.lout.26 0 00768 24949 programmer.lout -16&1306.programmer.lout.27 0 00769 25343 programmer.lout -16&1306.programmer.lout.28 0 00770 26656 programmer.lout -16&1306.programmer.lout.29 0 00771 27266 programmer.lout -16&1306.programmer.lout.3 0 00772 8219 programmer.lout -16&1306.programmer.lout.30 0 00773 27876 programmer.lout -16&1306.programmer.lout.31 0 00774 28486 programmer.lout -16&1306.programmer.lout.32 0 00775 29096 programmer.lout -16&1306.programmer.lout.33 0 00776 29706 programmer.lout -16&1306.programmer.lout.34 0 00777 30316 programmer.lout -16&1306.programmer.lout.35 0 00778 31808 programmer.lout -16&1306.programmer.lout.36 0 00779 32297 programmer.lout -16&1306.programmer.lout.37 0 00780 32930 programmer.lout -16&1306.programmer.lout.38 0 00781 33423 programmer.lout -16&1306.programmer.lout.39 0 00782 33897 programmer.lout -16&1306.programmer.lout.4 0 00783 9538 programmer.lout -16&1306.programmer.lout.40 0 00784 34561 programmer.lout -16&1306.programmer.lout.41 0 00785 35006 programmer.lout -16&1306.programmer.lout.42 0 00786 35438 programmer.lout -16&1306.programmer.lout.43 0 00787 35913 programmer.lout -16&1306.programmer.lout.44 0 00788 37146 programmer.lout -16&1306.programmer.lout.45 0 00789 38453 programmer.lout -16&1306.programmer.lout.46 0 00790 47478 programmer.lout -16&1306.programmer.lout.47 0 00791 47952 programmer.lout -16&1306.programmer.lout.48 0 00792 48460 programmer.lout -16&1306.programmer.lout.49 0 00793 48968 programmer.lout -16&1306.programmer.lout.5 0 00794 10035 programmer.lout -16&1306.programmer.lout.50 0 00795 49491 programmer.lout -16&1306.programmer.lout.51 0 00796 50017 programmer.lout -16&1306.programmer.lout.52 0 00797 50541 programmer.lout -16&1306.programmer.lout.53 0 00798 51161 programmer.lout -16&1306.programmer.lout.54 0 00799 51919 programmer.lout -16&1306.programmer.lout.55 0 00800 52384 programmer.lout -16&1306.programmer.lout.56 0 00801 52890 programmer.lout -16&1306.programmer.lout.57 0 00802 53412 programmer.lout -16&1306.programmer.lout.58 0 00803 54447 programmer.lout -16&1306.programmer.lout.59 0 00804 55188 programmer.lout -16&1306.programmer.lout.6 0 00805 10427 programmer.lout -16&1306.programmer.lout.60 0 00806 55654 programmer.lout -16&1306.programmer.lout.61 0 00807 56119 programmer.lout -16&1306.programmer.lout.62 0 00808 56626 programmer.lout -16&1306.programmer.lout.63 0 00809 57149 programmer.lout -16&1306.programmer.lout.64 0 00810 57637 programmer.lout -16&1306.programmer.lout.65 0 00811 58159 programmer.lout -16&1306.programmer.lout.66 0 00812 58681 programmer.lout -16&1306.programmer.lout.68 0 00813 59607 programmer.lout -16&1306.programmer.lout.69 0 00814 59231 programmer.lout -16&1306.programmer.lout.7 0 00815 10819 programmer.lout -16&1306.programmer.lout.70 0 00816 62563 programmer.lout -16&1306.programmer.lout.71 0 00817 65519 programmer.lout -16&1306.programmer.lout.72 0 00818 65895 programmer.lout -16&1306.programmer.lout.73 0 00819 71553 programmer.lout -16&1306.programmer.lout.75 0 00820 77587 programmer.lout -16&1306.programmer.lout.76 0 00821 77211 programmer.lout -16&1306.programmer.lout.77 0 00822 81659 programmer.lout -16&1306.programmer.lout.78 0 00823 85731 programmer.lout -16&1306.programmer.lout.79 0 00824 90154 programmer.lout -16&1306.programmer.lout.8 0 00825 11309 programmer.lout -16&1306.programmer.lout.81 0 00826 92505 programmer.lout -16&1306.programmer.lout.82 0 00827 92129 programmer.lout -16&1306.programmer.lout.83 0 00828 96157 programmer.lout -16&1306.programmer.lout.84 0 00829 99809 programmer.lout -16&1306.programmer.lout.85 0 00830 100270 programmer.lout -16&1306.programmer.lout.86 0 00831 100680 programmer.lout -16&1306.programmer.lout.87 0 00832 101098 programmer.lout -16&1306.programmer.lout.88 0 00833 101474 programmer.lout -16&1306.programmer.lout.89 0 00834 104492 programmer.lout -16&1306.programmer.lout.9 0 00835 11701 programmer.lout -16&1306.programmer.lout.90 0 00836 107554 programmer.lout -16&1306.programmer.lout.91 0 00837 111835 programmer.lout -16&1306.programmer.lout.92 0 00838 112421 programmer.lout -16&1306.programmer.lout.93 0 00839 112859 programmer.lout -16&1306.programmer.lout.94 0 00840 113488 programmer.lout -16&1306.programmer.lout.96 0 00841 114161 programmer.lout -16&1306.programmer.lout.97 0 00842 114537 programmer.lout -16&1306.programmer.lout.99 0 00843 114963 programmer.lout -16&1655.policy.lout.1 0 00033 4863 policy.lout -16&1655.policy.lout.10 0 00175 20538 policy.lout -16&1655.policy.lout.11 0 00179 20924 policy.lout -16&1655.policy.lout.12 0 00183 21310 policy.lout -16&1655.policy.lout.13 0 00187 21696 policy.lout -16&1655.policy.lout.14 0 00191 22083 policy.lout -16&1655.policy.lout.15 0 00195 22470 policy.lout -16&1655.policy.lout.16 0 00209 24330 policy.lout -16&1655.policy.lout.17 0 00213 25241 policy.lout -16&1655.policy.lout.18 0 00217 25797 policy.lout -16&1655.policy.lout.19 0 00221 26166 policy.lout -16&1655.policy.lout.2 0 00037 5369 policy.lout -16&1655.policy.lout.20 0 00225 26535 policy.lout -16&1655.policy.lout.21 0 00229 31188 policy.lout -16&1655.policy.lout.22 0 00233 35574 policy.lout -16&1655.policy.lout.23 0 00237 39888 policy.lout -16&1655.policy.lout.24 0 00241 44296 policy.lout -16&1655.policy.lout.25 0 00245 48828 policy.lout -16&1655.policy.lout.26 0 00249 53553 policy.lout -16&1655.policy.lout.27 0 00253 53922 policy.lout -16&1655.policy.lout.28 0 00257 59072 policy.lout -16&1655.policy.lout.29 0 00261 64483 policy.lout -16&1655.policy.lout.3 0 00041 5827 policy.lout -16&1655.policy.lout.30 0 00265 69640 policy.lout -16&1655.policy.lout.31 0 00269 74577 policy.lout -16&1655.policy.lout.32 0 00273 79521 policy.lout -16&1655.policy.lout.33 0 00277 84380 policy.lout -16&1655.policy.lout.34 0 00284 89692 policy.lout -16&1655.policy.lout.35 0 00288 90802 policy.lout -16&1655.policy.lout.36 0 00292 91171 policy.lout -16&1655.policy.lout.37 0 00296 94284 policy.lout -16&1655.policy.lout.38 0 00300 97420 policy.lout -16&1655.policy.lout.39 0 00304 100591 policy.lout -16&1655.policy.lout.4 0 00151 18234 policy.lout -16&1655.policy.lout.40 0 00308 103557 policy.lout -16&1655.policy.lout.41 0 00312 106632 policy.lout -16&1655.policy.lout.42 0 00316 107021 policy.lout -16&1655.policy.lout.43 0 00320 107874 policy.lout -16&1655.policy.lout.5 0 00155 18618 policy.lout -16&1655.policy.lout.6 0 00159 19002 policy.lout -16&1655.policy.lout.7 0 00163 19386 policy.lout -16&1655.policy.lout.8 0 00167 19770 policy.lout -16&1655.policy.lout.9 0 00171 20154 policy.lout -16&1655.programmer.lout.1 0 00844 7319 programmer.lout -16&1655.programmer.lout.10 0 00845 12093 programmer.lout -16&1655.programmer.lout.100 0 00846 118510 programmer.lout -16&1655.programmer.lout.101 0 00847 119333 programmer.lout -16&1655.programmer.lout.102 0 00848 119895 programmer.lout -16&1655.programmer.lout.103 0 00849 128472 programmer.lout -16&1655.programmer.lout.104 0 00850 128897 programmer.lout -16&1655.programmer.lout.105 0 00851 129326 programmer.lout -16&1655.programmer.lout.11 0 00852 16289 programmer.lout -16&1655.programmer.lout.12 0 00853 16740 programmer.lout -16&1655.programmer.lout.13 0 00854 17134 programmer.lout -16&1655.programmer.lout.14 0 00855 17655 programmer.lout -16&1655.programmer.lout.15 0 00856 18482 programmer.lout -16&1655.programmer.lout.16 0 00857 18934 programmer.lout -16&1655.programmer.lout.17 0 00858 19391 programmer.lout -16&1655.programmer.lout.18 0 00859 19785 programmer.lout -16&1655.programmer.lout.19 0 00860 20295 programmer.lout -16&1655.programmer.lout.2 0 00861 7769 programmer.lout -16&1655.programmer.lout.20 0 00862 20689 programmer.lout -16&1655.programmer.lout.21 0 00863 22739 programmer.lout -16&1655.programmer.lout.22 0 00864 23133 programmer.lout -16&1655.programmer.lout.23 0 00865 23585 programmer.lout -16&1655.programmer.lout.24 0 00866 24042 programmer.lout -16&1655.programmer.lout.25 0 00867 24494 programmer.lout -16&1655.programmer.lout.26 0 00868 24949 programmer.lout -16&1655.programmer.lout.27 0 00869 25343 programmer.lout -16&1655.programmer.lout.28 0 00870 26656 programmer.lout -16&1655.programmer.lout.29 0 00871 27266 programmer.lout -16&1655.programmer.lout.3 0 00872 8219 programmer.lout -16&1655.programmer.lout.30 0 00873 27876 programmer.lout -16&1655.programmer.lout.31 0 00874 28486 programmer.lout -16&1655.programmer.lout.32 0 00875 29096 programmer.lout -16&1655.programmer.lout.33 0 00876 29706 programmer.lout -16&1655.programmer.lout.34 0 00877 30316 programmer.lout -16&1655.programmer.lout.35 0 00878 31808 programmer.lout -16&1655.programmer.lout.36 0 00879 32297 programmer.lout -16&1655.programmer.lout.37 0 00880 32930 programmer.lout -16&1655.programmer.lout.38 0 00881 33423 programmer.lout -16&1655.programmer.lout.39 0 00882 33897 programmer.lout -16&1655.programmer.lout.4 0 00883 9538 programmer.lout -16&1655.programmer.lout.40 0 00884 34561 programmer.lout -16&1655.programmer.lout.41 0 00885 35006 programmer.lout -16&1655.programmer.lout.42 0 00886 35438 programmer.lout -16&1655.programmer.lout.43 0 00887 35913 programmer.lout -16&1655.programmer.lout.44 0 00888 37146 programmer.lout -16&1655.programmer.lout.45 0 00889 38453 programmer.lout -16&1655.programmer.lout.46 0 00890 47478 programmer.lout -16&1655.programmer.lout.47 0 00891 47952 programmer.lout -16&1655.programmer.lout.48 0 00892 48460 programmer.lout -16&1655.programmer.lout.49 0 00893 48968 programmer.lout -16&1655.programmer.lout.5 0 00894 10035 programmer.lout -16&1655.programmer.lout.50 0 00895 49491 programmer.lout -16&1655.programmer.lout.51 0 00896 50017 programmer.lout -16&1655.programmer.lout.52 0 00897 50541 programmer.lout -16&1655.programmer.lout.53 0 00898 51161 programmer.lout -16&1655.programmer.lout.54 0 00899 51919 programmer.lout -16&1655.programmer.lout.55 0 00900 52384 programmer.lout -16&1655.programmer.lout.56 0 00901 52890 programmer.lout -16&1655.programmer.lout.57 0 00902 53412 programmer.lout -16&1655.programmer.lout.58 0 00903 54447 programmer.lout -16&1655.programmer.lout.59 0 00904 55188 programmer.lout -16&1655.programmer.lout.6 0 00905 10427 programmer.lout -16&1655.programmer.lout.60 0 00906 55654 programmer.lout -16&1655.programmer.lout.61 0 00907 56119 programmer.lout -16&1655.programmer.lout.62 0 00908 56626 programmer.lout -16&1655.programmer.lout.63 0 00909 57149 programmer.lout -16&1655.programmer.lout.64 0 00910 57637 programmer.lout -16&1655.programmer.lout.65 0 00911 58159 programmer.lout -16&1655.programmer.lout.66 0 00912 58681 programmer.lout -16&1655.programmer.lout.67 0 00913 59231 programmer.lout -16&1655.programmer.lout.68 0 00914 59607 programmer.lout -16&1655.programmer.lout.69 0 00915 62563 programmer.lout -16&1655.programmer.lout.7 0 00916 10819 programmer.lout -16&1655.programmer.lout.70 0 00917 65519 programmer.lout -16&1655.programmer.lout.71 0 00918 65895 programmer.lout -16&1655.programmer.lout.72 0 00919 71553 programmer.lout -16&1655.programmer.lout.73 0 00920 77211 programmer.lout -16&1655.programmer.lout.74 0 00921 77587 programmer.lout -16&1655.programmer.lout.75 0 00922 81659 programmer.lout -16&1655.programmer.lout.76 0 00923 85731 programmer.lout -16&1655.programmer.lout.77 0 00924 90154 programmer.lout -16&1655.programmer.lout.78 0 00925 92129 programmer.lout -16&1655.programmer.lout.79 0 00926 92505 programmer.lout -16&1655.programmer.lout.8 0 00927 11309 programmer.lout -16&1655.programmer.lout.80 0 00928 96157 programmer.lout -16&1655.programmer.lout.81 0 00929 99809 programmer.lout -16&1655.programmer.lout.82 0 00930 100270 programmer.lout -16&1655.programmer.lout.83 0 00931 100680 programmer.lout -16&1655.programmer.lout.84 0 00932 101098 programmer.lout -16&1655.programmer.lout.85 0 00933 101474 programmer.lout -16&1655.programmer.lout.86 0 00934 104492 programmer.lout -16&1655.programmer.lout.87 0 00935 107554 programmer.lout -16&1655.programmer.lout.88 0 00936 111835 programmer.lout -16&1655.programmer.lout.89 0 00937 112421 programmer.lout -16&1655.programmer.lout.9 0 00938 11701 programmer.lout -16&1655.programmer.lout.90 0 00939 112859 programmer.lout -16&1655.programmer.lout.91 0 00940 113488 programmer.lout -16&1655.programmer.lout.92 0 00941 114161 programmer.lout -16&1655.programmer.lout.93 0 00942 114537 programmer.lout -16&1655.programmer.lout.94 0 00943 114963 programmer.lout -16&1655.programmer.lout.95 0 00944 115339 programmer.lout -16&1655.programmer.lout.96 0 00945 115716 programmer.lout -16&1655.programmer.lout.97 0 00946 116736 programmer.lout -16&1655.programmer.lout.98 0 00947 117113 programmer.lout -16&1655.programmer.lout.99 0 00948 117957 programmer.lout -16&2521.policy.lout.1 0 00048 7015 policy.lout -16&2521.policy.lout.2 0 00065 8430 policy.lout -16&2521.policy.lout.3 0 00078 9820 policy.lout -16&2521.policy.lout.4 0 00105 12637 policy.lout -16&2521.policy.lout.5 0 00116 14073 policy.lout -16&2521.policy.lout.6 0 00124 15316 policy.lout -16&2521.policy.lout.7 0 00140 17236 policy.lout -16&2521.policy.lout.8 0 00203 23675 policy.lout -16&2521.programmer.lout.1 0 00949 5026 programmer.lout -16&2521.programmer.lout.10 0 00950 40574 programmer.lout -16&2521.programmer.lout.11 0 00951 41668 programmer.lout -16&2521.programmer.lout.12 0 00952 42120 programmer.lout -16&2521.programmer.lout.13 0 00953 43228 programmer.lout -16&2521.programmer.lout.14 0 00954 44434 programmer.lout -16&2521.programmer.lout.15 0 00955 44886 programmer.lout -16&2521.programmer.lout.16 0 00956 111162 programmer.lout -16&2521.programmer.lout.17 0 00957 120760 programmer.lout -16&2521.programmer.lout.18 0 00958 123177 programmer.lout -16&2521.programmer.lout.2 0 00959 6652 programmer.lout -16&2521.programmer.lout.3 0 00960 12698 programmer.lout -16&2521.programmer.lout.4 0 00961 14470 programmer.lout -16&2521.programmer.lout.5 0 00962 14919 programmer.lout -16&2521.programmer.lout.6 0 00963 21717 programmer.lout -16&2521.programmer.lout.7 0 00964 31137 programmer.lout -16&2521.programmer.lout.8 0 00965 36557 programmer.lout -16&2521.programmer.lout.9 0 00966 39177 programmer.lout -17&1655.policy.lout.1 0 00032 5108 policy.lout -17&1655.policy.lout.10 0 00174 20784 policy.lout -17&1655.policy.lout.11 0 00178 21170 policy.lout -17&1655.policy.lout.12 0 00182 21556 policy.lout -17&1655.policy.lout.13 0 00186 21943 policy.lout -17&1655.policy.lout.14 0 00190 22330 policy.lout -17&1655.policy.lout.15 0 00194 22717 policy.lout -17&1655.policy.lout.16 0 00208 24559 policy.lout -17&1655.policy.lout.17 0 00212 25470 policy.lout -17&1655.policy.lout.18 0 00216 26026 policy.lout -17&1655.policy.lout.19 0 00220 26395 policy.lout -17&1655.policy.lout.2 0 00036 5614 policy.lout -17&1655.policy.lout.20 0 00224 28715 policy.lout -17&1655.policy.lout.21 0 00228 33368 policy.lout -17&1655.policy.lout.22 0 00232 37754 policy.lout -17&1655.policy.lout.23 0 00236 42068 policy.lout -17&1655.policy.lout.24 0 00240 46476 policy.lout -17&1655.policy.lout.25 0 00244 51008 policy.lout -17&1655.policy.lout.26 0 00248 53782 policy.lout -17&1655.policy.lout.27 0 00252 56374 policy.lout -17&1655.policy.lout.28 0 00256 61524 policy.lout -17&1655.policy.lout.29 0 00260 66935 policy.lout -17&1655.policy.lout.3 0 00040 6072 policy.lout -17&1655.policy.lout.30 0 00264 72092 policy.lout -17&1655.policy.lout.31 0 00268 77029 policy.lout -17&1655.policy.lout.32 0 00272 81973 policy.lout -17&1655.policy.lout.33 0 00276 86832 policy.lout -17&1655.policy.lout.34 0 00283 89921 policy.lout -17&1655.policy.lout.35 0 00287 91031 policy.lout -17&1655.policy.lout.36 0 00291 92683 policy.lout -17&1655.policy.lout.37 0 00295 95796 policy.lout -17&1655.policy.lout.38 0 00299 98932 policy.lout -17&1655.policy.lout.39 0 00303 102103 policy.lout -17&1655.policy.lout.4 0 00150 18479 policy.lout -17&1655.policy.lout.40 0 00307 105069 policy.lout -17&1655.policy.lout.41 0 00311 106861 policy.lout -17&1655.policy.lout.42 0 00315 107250 policy.lout -17&1655.policy.lout.43 0 00319 108104 policy.lout -17&1655.policy.lout.5 0 00154 18863 policy.lout -17&1655.policy.lout.6 0 00158 19247 policy.lout -17&1655.policy.lout.7 0 00162 19631 policy.lout -17&1655.policy.lout.8 0 00166 20015 policy.lout -17&1655.policy.lout.9 0 00170 20399 policy.lout -17&1655.programmer.lout.1 0 00967 7568 programmer.lout -17&1655.programmer.lout.10 0 00968 12344 programmer.lout -17&1655.programmer.lout.100 0 00969 118744 programmer.lout -17&1655.programmer.lout.101 0 00970 119567 programmer.lout -17&1655.programmer.lout.102 0 00971 120129 programmer.lout -17&1655.programmer.lout.103 0 00972 128723 programmer.lout -17&1655.programmer.lout.104 0 00973 129148 programmer.lout -17&1655.programmer.lout.105 0 00974 129577 programmer.lout -17&1655.programmer.lout.11 0 00975 16539 programmer.lout -17&1655.programmer.lout.12 0 00976 16990 programmer.lout -17&1655.programmer.lout.13 0 00977 17384 programmer.lout -17&1655.programmer.lout.14 0 00978 17905 programmer.lout -17&1655.programmer.lout.15 0 00979 18732 programmer.lout -17&1655.programmer.lout.16 0 00980 19184 programmer.lout -17&1655.programmer.lout.17 0 00981 19641 programmer.lout -17&1655.programmer.lout.18 0 00982 20035 programmer.lout -17&1655.programmer.lout.19 0 00983 20545 programmer.lout -17&1655.programmer.lout.2 0 00984 8018 programmer.lout -17&1655.programmer.lout.20 0 00985 20939 programmer.lout -17&1655.programmer.lout.21 0 00986 22989 programmer.lout -17&1655.programmer.lout.22 0 00987 23383 programmer.lout -17&1655.programmer.lout.23 0 00988 23835 programmer.lout -17&1655.programmer.lout.24 0 00989 24292 programmer.lout -17&1655.programmer.lout.25 0 00990 24744 programmer.lout -17&1655.programmer.lout.26 0 00991 25199 programmer.lout -17&1655.programmer.lout.27 0 00992 25593 programmer.lout -17&1655.programmer.lout.28 0 00993 27014 programmer.lout -17&1655.programmer.lout.29 0 00994 27624 programmer.lout -17&1655.programmer.lout.3 0 00995 8468 programmer.lout -17&1655.programmer.lout.30 0 00996 28234 programmer.lout -17&1655.programmer.lout.31 0 00997 28844 programmer.lout -17&1655.programmer.lout.32 0 00998 29454 programmer.lout -17&1655.programmer.lout.33 0 00999 30064 programmer.lout -17&1655.programmer.lout.34 0 01000 30674 programmer.lout -17&1655.programmer.lout.35 0 01001 32057 programmer.lout -17&1655.programmer.lout.36 0 01002 32546 programmer.lout -17&1655.programmer.lout.37 0 01003 33179 programmer.lout -17&1655.programmer.lout.38 0 01004 33672 programmer.lout -17&1655.programmer.lout.39 0 01005 34146 programmer.lout -17&1655.programmer.lout.4 0 01006 9787 programmer.lout -17&1655.programmer.lout.40 0 01007 34811 programmer.lout -17&1655.programmer.lout.41 0 01008 35256 programmer.lout -17&1655.programmer.lout.42 0 01009 35688 programmer.lout -17&1655.programmer.lout.43 0 01010 36163 programmer.lout -17&1655.programmer.lout.44 0 01011 37396 programmer.lout -17&1655.programmer.lout.45 0 01012 38703 programmer.lout -17&1655.programmer.lout.46 0 01013 47728 programmer.lout -17&1655.programmer.lout.47 0 01014 48202 programmer.lout -17&1655.programmer.lout.48 0 01015 48710 programmer.lout -17&1655.programmer.lout.49 0 01016 49218 programmer.lout -17&1655.programmer.lout.5 0 01017 10284 programmer.lout -17&1655.programmer.lout.50 0 01018 49741 programmer.lout -17&1655.programmer.lout.51 0 01019 50267 programmer.lout -17&1655.programmer.lout.52 0 01020 50791 programmer.lout -17&1655.programmer.lout.53 0 01021 51411 programmer.lout -17&1655.programmer.lout.54 0 01022 52169 programmer.lout -17&1655.programmer.lout.55 0 01023 52634 programmer.lout -17&1655.programmer.lout.56 0 01024 53140 programmer.lout -17&1655.programmer.lout.57 0 01025 53662 programmer.lout -17&1655.programmer.lout.58 0 01026 54697 programmer.lout -17&1655.programmer.lout.59 0 01027 55438 programmer.lout -17&1655.programmer.lout.6 0 01028 10676 programmer.lout -17&1655.programmer.lout.60 0 01029 55904 programmer.lout -17&1655.programmer.lout.61 0 01030 56369 programmer.lout -17&1655.programmer.lout.62 0 01031 56876 programmer.lout -17&1655.programmer.lout.63 0 01032 57399 programmer.lout -17&1655.programmer.lout.64 0 01033 57887 programmer.lout -17&1655.programmer.lout.65 0 01034 58409 programmer.lout -17&1655.programmer.lout.66 0 01035 58931 programmer.lout -17&1655.programmer.lout.67 0 01036 59463 programmer.lout -17&1655.programmer.lout.68 0 01037 61134 programmer.lout -17&1655.programmer.lout.69 0 01038 64090 programmer.lout -17&1655.programmer.lout.7 0 01039 11068 programmer.lout -17&1655.programmer.lout.70 0 01040 65751 programmer.lout -17&1655.programmer.lout.71 0 01041 68773 programmer.lout -17&1655.programmer.lout.72 0 01042 74431 programmer.lout -17&1655.programmer.lout.73 0 01043 77443 programmer.lout -17&1655.programmer.lout.74 0 01044 79672 programmer.lout -17&1655.programmer.lout.75 0 01045 83744 programmer.lout -17&1655.programmer.lout.76 0 01046 87816 programmer.lout -17&1655.programmer.lout.77 0 01047 90386 programmer.lout -17&1655.programmer.lout.78 0 01048 92361 programmer.lout -17&1655.programmer.lout.79 0 01049 94380 programmer.lout -17&1655.programmer.lout.8 0 01050 11558 programmer.lout -17&1655.programmer.lout.80 0 01051 98032 programmer.lout -17&1655.programmer.lout.81 0 01052 100041 programmer.lout -17&1655.programmer.lout.82 0 01053 100502 programmer.lout -17&1655.programmer.lout.83 0 01054 100912 programmer.lout -17&1655.programmer.lout.84 0 01055 101330 programmer.lout -17&1655.programmer.lout.85 0 01056 103032 programmer.lout -17&1655.programmer.lout.86 0 01057 106050 programmer.lout -17&1655.programmer.lout.87 0 01058 109112 programmer.lout -17&1655.programmer.lout.88 0 01059 112068 programmer.lout -17&1655.programmer.lout.89 0 01060 112654 programmer.lout -17&1655.programmer.lout.9 0 01061 11950 programmer.lout -17&1655.programmer.lout.90 0 01062 113092 programmer.lout -17&1655.programmer.lout.91 0 01063 113721 programmer.lout -17&1655.programmer.lout.92 0 01064 114393 programmer.lout -17&1655.programmer.lout.93 0 01065 114769 programmer.lout -17&1655.programmer.lout.94 0 01066 115195 programmer.lout -17&1655.programmer.lout.95 0 01067 115572 programmer.lout -17&1655.programmer.lout.96 0 01068 115949 programmer.lout -17&1655.programmer.lout.97 0 01069 116969 programmer.lout -17&1655.programmer.lout.98 0 01070 117346 programmer.lout -17&1655.programmer.lout.99 0 01071 118191 programmer.lout -18&2521.policy.lout.1 0 00045 6641 policy.lout -18&2521.policy.lout.2 0 00059 8006 policy.lout -18&2521.policy.lout.3 0 00075 9423 policy.lout -18&2521.policy.lout.4 0 00102 12010 policy.lout -18&2521.policy.lout.5 0 00112 13635 policy.lout -18&2521.policy.lout.6 0 00120 14646 policy.lout -18&2521.policy.lout.7 0 00135 16739 policy.lout -18&2521.policy.lout.8 0 00200 23200 policy.lout -18&2521.programmer.lout.1 0 01072 4542 programmer.lout -18&2521.programmer.lout.10 0 01073 39848 programmer.lout -18&2521.programmer.lout.11 0 01074 41165 programmer.lout -18&2521.programmer.lout.12 0 01075 41317 programmer.lout -18&2521.programmer.lout.13 0 01076 42793 programmer.lout -18&2521.programmer.lout.14 0 01077 43819 programmer.lout -18&2521.programmer.lout.15 0 01078 43998 programmer.lout -18&2521.programmer.lout.16 0 01079 90530 programmer.lout -18&2521.programmer.lout.17 0 01080 120385 programmer.lout -18&2521.programmer.lout.18 0 01081 122568 programmer.lout -18&2521.programmer.lout.2 0 01082 6041 programmer.lout -18&2521.programmer.lout.3 0 01083 8851 programmer.lout -18&2521.programmer.lout.4 0 01084 13715 programmer.lout -18&2521.programmer.lout.5 0 01085 13928 programmer.lout -18&2521.programmer.lout.6 0 01086 21165 programmer.lout -18&2521.programmer.lout.7 0 01087 26146 programmer.lout -18&2521.programmer.lout.8 0 01088 34393 programmer.lout -18&2521.programmer.lout.9 0 01089 37766 programmer.lout -19&@DocumentBody.28 0 00281 89602 policy.lout -19&@DocumentBody.28 0 01090 130162 programmer.lout -2&3336.policy.lout.1 0 00002 171 policy.lout -2&3336.policy.lout.2 0 00013 1953 policy.lout -2&3336.programmer.lout.1 0 01091 175 programmer.lout -2&3336.programmer.lout.2 0 01092 2001 programmer.lout -3&3391.policy.lout.1 0 00003 348 policy.lout -3&3391.policy.lout.2 0 00014 2130 policy.lout -3&3391.programmer.lout.1 0 01093 356 programmer.lout -3&3391.programmer.lout.2 0 01094 2182 programmer.lout -4&3445.policy.lout.1 0 00004 515 policy.lout -4&3445.policy.lout.2 0 00015 2297 policy.lout -4&3445.programmer.lout.1 0 01095 527 programmer.lout -4&3445.programmer.lout.2 0 01096 2353 programmer.lout -5&3500.policy.lout.1 0 00005 694 policy.lout -5&3500.policy.lout.2 0 00016 2476 policy.lout -5&3500.programmer.lout.1 0 01097 710 programmer.lout -5&3500.programmer.lout.2 0 01098 2536 programmer.lout -6&3554.policy.lout.1 0 00006 861 policy.lout -6&3554.policy.lout.2 0 00017 2643 policy.lout -6&3554.programmer.lout.1 0 01099 881 programmer.lout -6&3554.programmer.lout.2 0 01100 2707 programmer.lout -7&3609.policy.lout.1 0 00007 1036 policy.lout -7&3609.policy.lout.2 0 00018 2818 policy.lout -7&3609.programmer.lout.1 0 01101 1060 programmer.lout -7&3609.programmer.lout.2 0 01102 2886 programmer.lout -8&1400.policy.lout.1 0 00008 1207 policy.lout -8&1400.programmer.lout.1 0 01103 1235 programmer.lout -9&4153.policy.lout.1 0 00009 1485 policy.lout -9&4153.programmer.lout.1 0 01104 1517 programmer.lout diff --git a/doc/manuals-version b/doc/manuals-version index 1020fd06f..db2968290 100644 --- a/doc/manuals-version +++ b/doc/manuals-version @@ -1,2 +1,2 @@ -<!entity manuals-version "2.1.1.0"> -<!entity dpkg-version "1.4.0"> +<!entity manuals-version ""> +<!entity dpkg-version "1.4.1"> diff --git a/doc/obsolete/dependency-ordering.txt b/doc/obsolete/dependency-ordering.txt deleted file mode 100644 index f3f679408..000000000 --- a/doc/obsolete/dependency-ordering.txt +++ /dev/null @@ -1,97 +0,0 @@ -To: Debian developers list <debian-devel@pixar.com> -Subject: Note about the default for virtal package dependencies - -As I wrote some time ago (see below), ordering is significant in the -Depends and Recommended fields - in the absence of other information -dselect will suggest to the user that they select the first named -package in a list of options. - -However, there is no way to specify the `order' of several packages -which all Provide the same thing, when that thing is listed as a -Dependency. - -Eg, if we have: - Package: glibcdoc - Recommended: info-browser - - Package: info - Provides: info-browser - - Package: emacs - Provides: info-browser - -then (if emacs and info are both in the same Class) dselect's choice -will be essentially random. - -It is important to think about this problem, and to consider whether -to list one the the packages explicitly. - -For example, - Package: glibcdoc - Recommended: info | info-browser - -will do the same as the above, except that it will ensure that `info' -is the package which dselect will suggest to the user they also select -if the user has neither it nor Emacs and asks to select glibcdoc. - -This is not necessary if one of the packages has a more fundamental -Class - see the details below. - -Ian. - -------- Start of forwarded message ------- -To: Debian developers list <debian-devel@pixar.com> -Subject: Ordering is significant in Depends: and Recommends: - -For dselect, the ordering of alternative packages in a Depends: or -Recommended: line is significant. - -When an unsatisfied dependency (Depends or Recommended) or a conflict -is detected dselect will go into a `recursive package list', where the -user gets to choose how to resolve the problem. - -Usually dselect will suggest to the user that they select the package -with the most `fundamental' class (eg, it will prefer Base packages to -Optional ones), or the one that they `most wanted' to select in some -sense. - -However, in the absence of other information dselect will prefer -packages listed earlier in the unsatisfied entry in the Depends or -Recommended field. - -NB: this doesn't apply to constructions of the form: - Package: auctex - Depends: emacs, tex -which specifies that auctex depends on *both* emacs and tex. In this -case dselect will suggest to the user that they select both packages. - -It applies to constructions of the form: - Package: a2gs - Recommended: gs_x | gs_both | gs_svga -Here, dselect will prefer gs_x because it is listed earlier. (In the -future I may make it more clever - it may be able to notice, to -continue the example, that the dependencies of gs_x are not yet -satisfied while those of gs_svga, are, and thus prefer the latter, or -in a different situation to notice that gs_both has extra dependencies -which are satisfied, and thus prefer it to gs_x and gs_svga. More -thought is needed in this area.) - -One final example. In the more complicated construction: - Package: trn - Depends: smail | sendmail, inn | inewsinn -dselect will prefer smail because it is a Standard package, and -Sendmail is only Optional, and will prefer inewsinn because it is -Recommended and inn is only Optional. So, the default (if none of the -other packages were selected) would be to select smail and inewsinn. - -However, if inewsinn were moved to Optional this would change, and inn -would be preferred whenever the issue arose after the change. - -Optional fields have the same structure as Depends and Recommended -fields, but they will not arrange for the packages they list to be -suggested for selection, though they will be offered to the user. - -Ian M: can this go in an appendix to the Guidelines ? - -Ian. -------- End of forwarded message ------- diff --git a/doc/obsolete/descriptions.txt b/doc/obsolete/descriptions.txt deleted file mode 100644 index fdc302b1a..000000000 --- a/doc/obsolete/descriptions.txt +++ /dev/null @@ -1,112 +0,0 @@ -To: Debian developers list <debian-devel@pixar.com> -Subject: Package maintainers please look at your Description fields. - -dselect will be much more useful when more packages are more -informative in the Description they provide in their control file. - -So, when you next release a package, could you please check whether -the `control' file has a good description of the package, formatted as -described below ? - -A small amount of effort here on the part of package maintainers will -improve the looks of things quite a bit, I think. - -BTW, a number of packages have been indenting continuation lines in -their Description fields thus: - Description: gnomovision - Gnomovision is .... - further blurb ... -Please don't do this. According to the scheme described below (which -I've now implemented), dselect interprets the extra indentation to -mean `preformatted' text, and doesn't wordwrap it. - -Ian. - - -The format of the Description field is as follows: - -Description: <single line synopsis> - <extended description over several lines> - -The extended description has several kinds of line: - - - those starting with a single space are part of a paragraph. -Successive lines of this form will be word-wrapped when displayed. -The leading space will usually be stripped off. - - - those starting with two or more spaces. These will be displayed -verbatim. If the display cannot be panned horizontally the displaying -program will linewrap them `hard' (ie, without taking account of word -breaks). If it can they will be allowed to trail off to the right. -None, one or two initial spaces may be deleted, but the number of -spaces deleted from each line will be the same (so that you can have -indenting work right, for example). - - - those containing a single space followed by a single full stop -character. These are rendered as blank lines. This is the ONLY way -to get a blank line - see below. - - - those containing a space, a full stop and some more characters. -These are for future expansion. Don't use them. - -IMPORTANT and not so important TIPS: - -* ALWAYS START EXTENDED DESCRIPTION LINES WITH AT LEAST ONE WHITESPACE -CHARACTER. Fields in the control file and in the Packages file are -separated by field names starting in the first column, just as in -RFC822. Forgetting the whitespace will cause dpkg-deb (>=0.93.23) to -produce a syntax error when trying to build the package. If you force -it to build anyway dpkg will refuse to install the resulting mess. - -* DO NOT INCLUDE ANY COMPLETELY EMPTY LINES. These separate different -records in the Packages file, and are forbidden in control files. See -the previous paragraph for what happens if you get this wrong. - -* The single line synopsis should be kept brief - certainly under 80 -characters. My current working half-dselect displays the first 49 -characters if you're using an 80-column terminal. - -* Don't include the package name in the synopsis line. The display -software knows how to display this already, and you don't need to -state it. - -* The extended description should describe what the package does, and -what component it forms of any larger subsystem of which it is a part. - -* Put important information first, both in the synopis and extended -description. Sometimes only the first part of the synopsis or of the -description will be displayed. You can assume that there will usually -be a way to see the whole extended description. - -* You may include information about dependencies and so forth in the -extended description, if you wish. - -* Don't use tab characters. Their effect is not predictable. - -Example control file for Smail: - -Package: smail -Version: 3.1.29.1 -Package_Revision: 8 -Maintainer: Ian Jackson <iwj10@cus.cam.ac.uk> -Recommended: pine | elm | emacs | mh | mailx -Optional: metamail -Depends: cron -Conflicts: sendmail -Description: Electronic mail transport system. - Smail is the recommended mail transport agent (MTA) for Debian. - . - An MTA is the innards of the mail system - it takes messages from - user-friendly mailer programs and arranges for them to be delivered - locally or passed on to other systems as required. - . - In order to make use of it you must have one or more user level - mailreader programs such as elm, pine, mailx or Emacs (which has Rmail - and VM as mailreaders) installed. If you wish to send messages other - than just to other users of your system you must also have appropriate - networking support, in the form of IP or UUCP. - --- -Ian Jackson, at home. ijackson@nyx.cs.du.edu or iwj10@cus.cam.ac.uk -+44 1223 575512 Escoerea on IRC. http://www.cl.cam.ac.uk/users/iwj10/ -2 Lexington Close, Cambridge, CB4 3LS, England. Urgent: iwj@cam-orl.co.uk diff --git a/doc/obsolete/disappear-replace.txt b/doc/obsolete/disappear-replace.txt deleted file mode 100644 index 8335a0ea4..000000000 --- a/doc/obsolete/disappear-replace.txt +++ /dev/null @@ -1,44 +0,0 @@ -From ian Tue Apr 18 23:30:04 1995 -X-VM-v5-Data: ([nil nil nil nil nil nil nil nil nil] - [nil nil nil nil nil nil nil nil nil nil nil nil "^To:" nil nil nil nil nil nil nil] - nil) -X-VM-Summary-Format: "%3n %a %2d %3m %-19.19F %s\n" -X-VM-Labels: nil -X-VM-VHeader: ("Resent-" "From:" "Sender:" "To:" "Apparently-To:" "Cc:" "Subject:" "Date:") nil -X-VM-Bookmark: 5 -To: Debian developers list <debian-devel@pixar.com> -Subject: Handling of base packages - -I propose to implement the following scheme to enable obsolete base -packages to disappear, and to allow files in the base packages to move -between one package and another. - -1. When a package is installed, and contains files that are already -marked as belonging to some other package, the older package will have -the files that have been overwritten removed from its file list. - -2. When a package ceases to contain any files due to the action of -point 1 above, its postrm script is run with the argument `disappear' -(in place of `remove', `purge' or whatever). It will then be moved -into the `purge ok not-installed' state, so that it will cease to -appear in dpkg and dselect lists. Its conffiles will be ignored, -*not* purged. The prerm will *not* be run as the packaging system -doesn't know what files are in a package until it unpacks it. - -This will all happen during the `unpack' phase of the replacing -package. - -3. If a base system package which is being installed conflicts with -another base system package which is currently installed on the -system, the currently installed one will be removed first (the prerm -will be run with `replace <package> <version>' as arguments, then the -package will be removed, then the postrm will be run, likewise with -`replace'). If the replacement fails the removal will be aborted, -involving running the old packages' scripts with `abort-replace'. - -4. Base system packages may not be removed except under 2. or 3. -above. (There will be a --force-remove-base flag to allow foolhardy -users to go ahead anyway.) - -Ian. - diff --git a/doc/obsolete/diversions.text b/doc/obsolete/diversions.txt index ade33af5f..ade33af5f 100644 --- a/doc/obsolete/diversions.text +++ b/doc/obsolete/diversions.txt diff --git a/doc/obsolete/dpkg.texi b/doc/obsolete/dpkg.texi deleted file mode 100644 index b9530d6a5..000000000 --- a/doc/obsolete/dpkg.texi +++ /dev/null @@ -1,101 +0,0 @@ -\input texinfo @c -*-texinfo-*- -@c %**start of header -@setfilename dpkg.info -@settitle The @code{dpkg} Package Maintenance System -@c %**end of header - -@ifinfo -@format -START-INFO-DIR-ENTRY -* dpkg: (dpkg). The @code{dpkg} package maintenance system. -END-INFO-DIR-ENTRY -@end format -@end ifinfo - -@setchapternewpage off - -@ifinfo -This file documents the @code{dpkg} package maintenance system. - -Copyright (C) 1994 Ian A. Murdock - -Permission is granted to make and distribute verbatim copies of this -document provided the copyright notice and this permission notice are -preserved on all copies. - -@ignore -Permission is granted to process this file through TeX and print the -results, provided the printed document carries a copying permission -notice identical to this one, except for the removal of this paragraph -(this paragraph not being relevant to the printed manual). -@end ignore - -Permission is granted to copy and distribute modified versions of this -document under the conditions for verbatim copying, provided that the -entire resulting derived work is distributed under the terms of a -permission notice identical to this one. - -Permission is granted to copy and distribute translations of this document -into another language, under the above conditions for modified versions, -except that this permission notice may be stated in a translation approved -by The Debian Linux Association. -@end ifinfo - -@titlepage -@title The @code{dpkg} Package Maintenance System -@author Ian A. Murdock -@page - -@vskip 0pt plus 1filll -Copyright @copyright{} 1994 Ian A. Murdock - -Permission is granted to make and distribute verbatim copies of this -document provided the copyright notice and this permission notice are -preserved on all copies. - -Permission is granted to copy and distribute modified versions of this -document under the conditions for verbatim copying, provided that the -entire resulting derived work is distributed under the terms of a -permission notice identical to this one. - -Permission is granted to copy and distribute translations of this document -into another language, under the above conditions for modified versions, -except that this permission notice may be stated in a translation approved -by The Debian Linux Association. -@end titlepage - -@node Top, Overview, (dir), (dir) - -@top Introduction -@menu -* Overview:: An overview of the @code{dpkg} package - maintenance system. -* Installation:: How to install a package with @code{dpkg}. -* Removal:: How to remove a package with @code{dpkg}. -* Information:: How to obtain information about both - installed and not-yet-installed packages. -* Extension:: How to extend @code{dpkg} to support new - package formats. -* Guidelines:: Guidelines for creating and maintaining - packages for Debian GNU/Linux. -@end menu - -@node Overview -@chapter Overview - -@node Installation -@chapter Package Installation - -@node Removal -@chapter Package Removal - -@node Information -@chapter Package Information - -@node Guidelines -@chapter Debian GNU/Linux Guidelines - -@node Extension -@chapter How to Extend @code{dpkg} to Support New Package Formats - -@bye diff --git a/doc/obsolete/dselect-methods.txt b/doc/obsolete/dselect-methods.txt deleted file mode 100644 index d90e73058..000000000 --- a/doc/obsolete/dselect-methods.txt +++ /dev/null @@ -1,124 +0,0 @@ -From ian Sun May 14 18:21:53 +0100 1995 -To: Debian developers list <debian-devel@pixar.com> -Subject: dselect installation method scripts - -Below is a (somewhat amended) repost of the posting I made a little -while ago about the interface between dselect and the installation -scripts it can run to extract packages. - -Carl Streeter has some hard disk scripts that look fairly good (I -haven't tested them). Anyone else looking to write such scripts -should see his code (Carl, can you upload them please ?). - -Howevever, there are a few points to note: - * Each set of scripts can support several `options' as they're called -- this saves having different code for the CD-ROM, hard disk, &c -methods. - * You have to supply a /usr/[local]/lib/dpkg/methods/<method>/names -file listing the options - see below. - -dselect *will* look in /usr/local/lib/dpkg/methods as well as -/usr/lib. Put your scripts there until you send them to me for -inclusion in dpkg. - -Details if the installation method handling is below, and in -method-scripts.txt; an example `test' method that just shows you how -to write a `names' file and how dselect reacts is available as: - -ab2022c57a1198838034c5f87ea501b1 dselect-example-test-method.tar --rw-rw-r-- 1 ian ian 10240 May 14 18:19 dselect-example-test-method.tar - -NB that the code in dselect to select and call installation scripts is -ALPHA ! - -Ian. - -Each `installation method' will have three scripts: - - * Setup installation parameters. - * Update list of available packages. - * Unpack. - -Which set of scripts is to be used is selectable by the user, from the -`[S]etup' menu option. Basically, the user hits `Setup', gets -presented with a menu of choices and picks one. - -This (a) sets that `choice' to be the default installation method and -(b) runs the `setup' script for that choice. - -The setup script should prompt the user for parameters like the site -to NFS-mount or FTP from, the directory to use, or the directory or -filesystem where the .deb files can be found, or the tape or floppy -device to install from. It should store the responses under -/var/lib/dpkg/methods - see below. - -The update script should obtain a list of available packages if -possible (this is the Packages file from the FTP sites), and copy it -to /var/lib/dpkg/available. Be careful not to overwrite the available -file if something goes wrong - I'd suggest copying to `available.new' -and renaming. If no available list is available :-) it should print a -message saying so. - -The unpack script should feed all the available .deb files to - dpkg --unpack --no-also-select -(the --auto option may also be useful here). In the future there will -be a mechanism to allow (for example) a floppy-based installation -scheme to tell the user which packages are still to be processed; in -the meantime you should just keep going until the user says `stop'. - -If any of these scripts needs to display a message for the user, it -should wait for the user to hit `return' before exiting so that -dselect doesn't immediately rewrite the screen. - -If a script gives a non-zero exit status dselect will print a message -about it and prompt the user for an acknowledgement. If it exits with -a zero exit status then dselect will immediately go back into curses -and any message that the script printed just before exiting will not -be visible. - -The scripts will be kept in /usr/lib/dpkg/methods/. Each method -should have a directory under methods, containing: - `names' - a list of `user-visible options', see below. - `setup', `update', `unpack' - executable programs. - `desc.<option>' - description file. - -A method may provide several options on the `main menu' with different -behaviour. For example, there might be a generic get-packages-by-FTP -method which might provide entries in the main menu for installation -directly from one of the Debian mirror sites as well as for -installation from a user-specified site. - -The `setup', `update' and `unpack' will be invoked with three -arguments. - -The first argument is the directory with the dpkg status information, -usually /var/lib/dpkg. They should $1/methods/<method-name> to store -their data (remember that the user can give a --admindir option to -dselect). - -The second and third argument are the name of the method and the -option within that method, respectively. This information is provided -by dselect (from the user's choice of installation option). - -`names' will be formatted as a list of lines, each containing: - <sequence> <option> <summary> - -<sequence> is a two-digit number that will be used much like rc.d -prefixes to control the order in the main menu. If in doubt use 50. - -<option> is a name which will be passed to `setup', `update' and -`unpack' as their third argument (see above). - -<summary> is the menu entry string. - -Each option may have an extended description in `desc.<option>'. This -should be formatted like a Description: field entry *shifted one -character to the left*. - -/var/lib/dpkg/methods will exist, and a method may use a -/var/lib/dpkg/methods/<method> directory or file (or <method>.* files) -to store its state. - -<method> and <option> must follow the rules for C identifiers. - --- Ian Jackson 14th May 1995 diff --git a/doc/obsolete/essential-flag.txt b/doc/obsolete/essential-flag.txt deleted file mode 100644 index 34e821135..000000000 --- a/doc/obsolete/essential-flag.txt +++ /dev/null @@ -1,43 +0,0 @@ -From ian Thu Jul 6 21:14:08 +0100 1995 -X-VM-v5-Data: ([nil nil nil nil nil nil nil nil nil] - [nil nil nil nil nil nil nil nil nil nil nil nil "^To:" nil nil nil nil nil nil nil] - nil) -In-Reply-To: <m0sTw2a-00063aC@mongo.pixar.com> -References: <m0sTw2a-00063aC@mongo.pixar.com> -To: debian-devel@pixar.com -Subject: Re: non-uninstallable packages - -Bruce Perens writes ("non-uninstallable packages"): -> Assume that a package, such as one in the base, is supposed to be -> non-uninstallable because it is a critical system component. We should -> specify that in an unambiguous form, rather than indicating it by -> specifying "Class: base" in the control file. -> -> I suggest yet another control file field, called "Flags: ". This is -> followed by a comma-delimited set of flags. An example might be: -> Flags: no-uninstall -> -> Another alternative would be to add control-file fields for each flag. -> In this case, the field would appear as: -> Allow-uninstall: no -> ...and the default would be "yes". - -I think you're right. Bill spotted that we were trying to overload -the `Class' field. - -I don't think there's any need for a generic `Flags:' field; a simple -extra field is fine, unless we're going to have an awful lot of -boolean flags applying to packages (any attribute with a value is -better handled using a field of its own anyway). - -I propose to call the new field `Essential', with allowable values -`yes' and `no' and a default of `no'. - -This will be clearer all round, I think, than attempting to describe -dpkg behaviour in the field name. - -If I don't have to make an emergency bugfix release of dpkg first this -will be in the next version. I'll modify dselect too. - -Ian. - diff --git a/doc/obsolete/maintainer-script-args.txt b/doc/obsolete/maintainer-script-args.txt deleted file mode 100644 index a1cd3c75c..000000000 --- a/doc/obsolete/maintainer-script-args.txt +++ /dev/null @@ -1,173 +0,0 @@ -Richard Kettlewell has asked me to document this, so here is a brief -summary. More documentation will probably have to wait until someone -has time ... - -... hmm, it has turned out not to be so brief, and I've spent the last -hour or so writing it. Perhaps someone can use it as the basis for a -spec or a manpage or something. - -In all cases version numbers are <version>-<revision>, if the package -has both, or just <version>. `upgrade' is used even when the new -version number looks lower than the old. - -*** SUMMARY - listing of possible scripts with arguments: - - <new preinst> install - <new preinst> install <old-version> - <new preinst> upgrade <old-version> - <old preinst> abort-upgrade <new-version> - - <postinst> configure - <old postinst> abort-upgrade <new version> - <conflictor's postinst> abort-remove in-favour <package> <new version> - <deconfigured's postinst> abort-deconfigure \ - in-favour <package-being-installed-but-failed> <version> - removing <conflicting-package> <version> - - <prerm> remove - <old prerm> upgrade <new version> - <new prerm> failed-upgrade <old-vppersion> - <conflictor's prerm> remove in-favour <package> <new version> - <deconfigured's prerm> deconfigure \ - in-favour <package-being-installed> <version> \ - removing <conflicting-package> <version> - - <postrm> remove - <postrm> purge - <old postrm> upgrade <new-version> - <new postrm> failed-upgrade <old-version> - <new postrm> abort-install - <new postrm> abort-install <old-version> - <new postrm> abort-upgrade <old-version> - <disappearer's postrm> disappear <overwriter> <new version> - -*** INSTALLATION (unpack): - -The procedure on installation/upgrade/overwrite/disappear (ie, when -running dpkg --unpack, or the unpack stage of dpkg --install) is as -follows. In each case if an error occurs the actions in are general -run backwards - this means that the maintainer scripts are run with -different arguments in reverse order. These are the `error unwind' -calls listed below. - -1a. If a version the package is already installed, call - <old prerm> upgrade <new version> -1b. If this gives an error (ie, a non-zero exit status), dpkg will -attempt instead: - <new prerm> failed-upgrade <old-version> - ... error unwind, for both the above cases: - <old postinst> abort-upgrade <new version> - -2. If a `conflicting' package is being removed at the same time: -2a. If any packages depended on that conflicting package and ---auto-deconfigure is specified, call, for each such package: - <deconfigured's prerm> deconfigure \ - in-favour <package-being-installed> <version> \ - removing <conflicting-package> <version> - ... error unwind: - <deconfigured's postinst> abort-deconfigure \ - in-favour <package-being-installed-but-failed> <version> - removing <conflicting-package> <version> -The deconfigured packages are marked as requiring configuration, so -that if --install is used they will be configured again if possible. -2b. To prepare for removal of the conflicting package, call: - <conflictor's prerm> remove in-favour <package> <new version> - ... error unwind: - <conflictor's postinst> abort-remove in-favour <package> <new version> - -3a. If the package is being upgraded, call - <new preinst> upgrade <old-version> -3b. otherwise, if the package had some configuration files from a -previous version installed (ie, it is in the conffiles-only state): - <new preinst> install <old-version> -3c. otherwise (ie, the package was completely purged): - <new preinst> install - ... error unwind versions, respectively: - <new postrm> abort-upgrade <old-version> - <new postrm> abort-install <old-version> - <new postrm> abort-install - -4. The new package's files are unpacked, overwriting any that may be -on the system already, for example any from the old package or from -another package (backups of the old files are left around, and if -anything goes wrong dpkg will attempt to put them back as part of the -error unwind). - -5a. If the package is being upgraded, call - <old postrm> upgrade <new-version> -5b. If this fails, dpkg will attempt: - <new postrm> failed-upgrade <old-version> - ... error unwind, for both cases: - <old preinst> abort-upgrade <new-version> - -This is the point of no return - if dpkg gets this far, it won't back -off past this point if an error occurs. This will leave the package -in a fairly bad state, which will require a successful reinstallation -to clear up, but it's when dpkg starts doing things that are -irreversible. - -6. Any files which were in the old version of the package but not in - the new are removed. -7. The new file list replaces the old. -8. The new maintainer scripts replace the old. - -9. Any packages all of whose files have been overwritten during the -installation, and which aren't required for dependencies, are -considered to have been removed. For each such package, -9a. dpkg calls: - <disappearer's postrm> disappear <overwriter> <new version> -9b. The package's maintainer scripts are removed. -9c. It is noted in the status database as being in a sane state, -namely not installed (any conffiles it may have are ignored). -Note that disappearing packages don't have their prerm called, because -dpkg doesn't know in advance that the package is going to vanish. - -10. Any files in the package we're unpacking that are also listed in -the file lists of other packages are removed from those lists. (This -will lobotomise the file list of the `conflicting' package if there is -one.) - -11. The backup files made at 4. are deleted. -12. The new package's status is now sane, and recorded as `unpacked'. - -Here is another point of no return - if the conflicting package's -removal fails we don't unwind the rest of the installation; the -conflicting package is left in a half-removed limbo. - -13. If there was a conflicting package we go and do the removal -actions, starting from point 2. of the removal, below. - - -*** CONFIGURATION: - -When we configure a package (this happens with dpkg --install, or with ---configure), we first update the conffiles and then call: - <postinst> configure -(I'm planning to make available as an argument the version of the most -recent successfully-configured version of the package.) - -No attempt is made to unwind after errors during configuration. - - -*** REMOVAL: - -1. <prerm> remove - -2. The package's files are removed (except conffiles). - -3. <postrm> remove - -4. All the maintainer scripts except the postrm are removed. - -If we aren't purging the package we stop here. Note that packages -which have no postrm and no conffiles are automatically purged when -removed, as there is no difference except for the dpkg status. - -5. The conffiles and any backup files (~-files, #*# files, %-files, -.dpkg-{old,new,tmp}, &c &c &c) are removed. - -6. <postrm> purge - -7. The package's file list is removed. - -No attempt is made to unwind after errors during removal. diff --git a/doc/obsolete/version-ordering.txt b/doc/obsolete/version-ordering.txt deleted file mode 100644 index 7bbda6304..000000000 --- a/doc/obsolete/version-ordering.txt +++ /dev/null @@ -1,59 +0,0 @@ -(This has been edited to conform to the intent in dpkg 1.0.16. - When recent versions of dpkg compare versions they break the Version - into an upstream version and debian revision first, by splitting the - Version at the last hyphen. The revisions are only considered if the - upstream versions compare equal.) - -To: debian-devel@pixar.com -Subject: Re: dpkg 0.93.8 released - -[...] -Well, here is what I came up with after a bit of thought and testing. -I propose the following algorithm for comparing version numbers: - - forever { - remove initial non-digit substring from string a - remove initial non-digit substring from string b - compare initial non-digit substrings lexically, - counting letters as coming before punctuation - if (they differ) return the answer - remove initial digit substring from string a - remove initial digit substring from string b - compare initial digit substrings numerically - if (they differ) return the answer - if (both strings are now empty) - the version numbers are the same, stop - if (one string is now empty) - it is the `lesser', return the answer - } - -This will have the desired results: - 2.1 < 2.7 < 2.7a < 2.7a-2 < 2.15 - -An implementation in Perl is attached below. - -Ian. - -#!/usr/bin/perl -- - -if (@ARGV) { - print &compare(@ARGV),"\n"; -} else { - while(<>) { chop; chop($x=<>); print &compare($_,$x),"\n"; } -} - -sub compare { - local ($a,$b) = @_; - do { - $a =~ s/^\D*//; $ad= $&; $ad =~ s/\W/ /g; - $b =~ s/^\D*//; $bd= $&; $bd =~ s/\W/ /g; -print "\t[$ad|$a] [$bd|$b]\n"; - $cm = $ad cmp $bd; return $cm if $cm; - $a =~ s/^\d*//; $ad= $&; - $b =~ s/^\d*//; $bd= $&; -print "\t<$ad|$a> <$bd|$b>\n"; - $cm = $ad <=> $bd; return $cm if $cm; - } while (length($a) && length($b)); -print "\t{$a} {$b}\n"; - return length($a) cmp length($b); -} diff --git a/doc/obsolete/virtual-dependencies.txt b/doc/obsolete/virtual-dependencies.txt deleted file mode 100644 index 1f45eb7a0..000000000 --- a/doc/obsolete/virtual-dependencies.txt +++ /dev/null @@ -1,105 +0,0 @@ -To: Debian users list <debian-user@pixar.com> -Subject: dpkg 0.93.36: dselect does virtual packages - -This release contains virtual package support in the C parts of the -system, which at the moment includes dselect and dpkg-deb. - -It works as I outlined in a mail to debian-devel a little while ago. - -Package maintainers: please start adding `Provides:' fields to your -packages. dselect will use and understand them; dpkg-deb will check -the syntax of the Provides field instead of warning you about it. -dpkg will not understand the new field and will ignore it. - -When almost all the packages have Provides: fields in place we can -start replacing old-style Recommended: fields. - -Note that we can't change Depends: fields since they're also -interpreted by dpkg, which doesn't know about Provides (yet). - -[...] --------------------- - -From: iwj10@cus.cam.ac.uk (Ian Jackson) -To: debian-devel@pixar.com -Subject: `virtual' packages in Depends, Conflicts &c -Date: Fri, 31 Mar 95 15:44 BST - -We're starting to have a problem with package name changes and -multiple packages providing the same service. - -I liked the idea (put forward by [Bruce Perens]) of having `virtual' -packages; it seems that it would solve many of these problems straight -away. - -What I'm proposing to do is as follows: - -Depends, Conflicts, Recommended and Optional lines will now be able to -contain `virtual' package names as well as real package names. - -Virtual packages are in the same namespace as real packages, and may -have the same name. The meaning of a virtual package in a -dependency/conflicts list is exactly that of listing all the real -packages which state that they are an instantiation of that virtual -package. - -This is done with a new Provides field in the control file, with a -syntax much like the Conflicts field. - -The idea is that we can have something like: - Package: elm - Depends: mta - - Package: smail - Provides: mta - Conflicts: mta - - Package: sendmail - Provides: mta - Conflicts: mta -&c. The result is equivalent to elm having said - Depends: smail | sendmail - -(There'll be a special case to say that a package may conflict with a -virtual package which it provides - clearly ...) - -If there are both a real and a virtual package of the same name then -the dependency may be satisfied (or the conflict caused) by either the -real package or any of the virtual packages which provide it. This is -so that, for example, supposing we have - Package: lout - Optional: ghostview -(this is a fictional example - the Lout package shouldn't mention -ghostview), and someone else comes up with a nice PostScript -previewer, then they can just say - Package: marvelpostview - Provides: ghostview -and all will work in the interim (until, say, the Lout maintainer -changes things). - -If a dependency or a conflict has a version number attached then only -real packages will be considered to see whether the relationship is -satisfied (or prohibited, for a conflict) - it is assumed that a real -package which provides virtual package is not of the `right' version. -If there is demand I could arrange that a package which provides a -virtual package may mention a version number, eg. - Provides: mta (2.0) -though I tbink this is unlikely to be helpful. - -If you want to specify which of a set of real packages should be the -default to satisfy a particular dependency on a virtual package, you -can simply list the real package as alternative before the virtual -one. E.g.: - Package: xbaseR6 - Recommended: xsvga | x-server - Provides: x-base, xr6shlib - - Package: xsvga - Recommended: x-base - Provides: x-server - - Package: x8514 - Recommended: x-base - Provides: x-server - -Ian. diff --git a/doc/policy.sgml b/doc/policy.sgml deleted file mode 100644 index 112d51d30..000000000 --- a/doc/policy.sgml +++ /dev/null @@ -1,1619 +0,0 @@ -<!doctype debiandoc system [ -<!entity % manuals-version-def system "manuals-version"> -%manuals-version-def; -]> - -<!-- - Debian Linux package policy manual. - Copyright (C)1996 Ian Jackson; released under the terms of the GNU - General Public License, version 2 or (at your option) any later. - --> - -<book> - -<title>Debian policy manual -<author>Ian Jackson <email/ijackson@gnu.ai.mit.edu/ -<version>version &manuals-version; (dpkg &dpkg-version;), <date> - -<abstract> -This manual describes the policy requirements which must be satisfied -for a package to be included in the Debian distribution. This -includes details of the permissions and ownerships of files in -packages and other technical requirements as well as information like -the upload procedure. -</abstract> - -<copyright>Copyright ©1996 Ian Jackson. -<p> - -This manual is free software; you may redistribute it and/or modify it -under the terms of the GNU General Public License as published by the -Free Software Foundation; either version 2, or (at your option) any -later version. -<p> - -This is distributed in the hope that it will be useful, but -<em>without any warranty</em>; without even the implied warranty of -merchantability or fitness for a particular purpose. See the GNU -General Public License for more details. -<p> - -You should have received a copy of the GNU General Public License with -your Debian GNU/Linux system, in <tt>/usr/doc/copyright/GPL</tt>, or -with the <prgn/dpkg/ source package as the file <tt>COPYING</tt>. If -not, write to the Free Software Foundation, Inc., 675 Mass Ave, -Cambridge, MA 02139, USA. - -<toc sect> - -<chapt id="scope">Introduction and scope of this manual -<p> - -This manual describes the criteria that a Debian-format package must -satisfy to be included in the Debian distribution. -<p> - -Much of this information will be useful even when building a package -which is to be distributed in some other way or is for local use. -<p> - -This manual does <em/not/ describe the technical mechanisms involved -in package creation, installation and removal. This information can -be found in the <prgn/dpkg/ programmers' manual and the <prgn/dpkg/ system -administrators' manual. -<p> - -This document assumes familiarity with these other two manuals. -Unfortunately the system administrators' manual does not exist yet. -<p> - -The Debian version of the FSF's GNU <prgn/hello/ program is provided -as an example for people wishing to create Debian packages. -<p> - -<em>Note that this document is still a draft!</em> - -<chapt id="pkgcopyright">Package copyright -<p> - -Please study the copyright of your submission <em/carefully/ and -understand it before proceeding. If you have doubts or questions, -please ask. -<p> - -The aims of the policy detailed below are: -<list compact> -<item> -That any user be able to rebuild any package in the official Debian -distribution from the original source plus our patches. -<item> -That we make available in our packaging formats as much software as we -can. -<item> -That it be easy for people to make CDROMs of our distribution without -violating copyrights. -</list> -<p> - -All packages in the Debian distribution proper must be freely useable, -modifiable and redistributable in both source and binary -form.<footnote>It is OK for there to be a requirement that modified -versions carry a warning, or that they be released with a different -name or version number, or something similar, because we can comply -with this requirement if necessary.</footnote> -It must be possible for anyone to distribute and use modified source -code and their own compiled binaries, at least when they do so as part -of a Debian distribution. -<p> - -Packages -<list compact> -<item> -whose copyright permission notices (or patent problems) do not allow -distribution and copying for profit, without restriction on the amount -charged, or -<item> -where distribution is restricted according to the medium used, or -<item> -where the distributor must ask any kind of special permission of the -authors, or -<item> -with other onerous conditions, -</list> -may only be placed in the semi-supported non-free section of the -Debian FTP archives. This is important so that CDROM manufacturers -can distribute Debian without having to check the copyright of each -package individually, simply by leaving out the contents of the -non-free area; CDROM distributors are encouraged, though, to check the -copyrights on programs in non-free individually and include as many as -they can. -<p> - -Packages -<list compact> -<item> -whose copyright permission notices (or patent problems) allow only -distribution of compiled binaries (and thus of which only binaries are -available), or -<item> -where the source code which may be -distributed is not the complete source code required to compile the -program (ie, the program cannot be compiled using only packages in the -main Debian distribution), or -<item> -which depend for their use on non-free or contrib -packages<footnote>This includes all packages which declare a -dependency on a non-free or contrib package, and almost all packages -which declare a recommendation.</footnote>, or -<item> -allow free use only for a trial period (shareware), or -<item> -are demonstration programs lacking vital functionality (crippleware), -or -<item> -are only installer-packages which require the user to supply a -separate file to be installed, or -<item> -which are buggy and no longer maintained, but are preserved for -backward compatibility, or -<item> -which fail to meet some other policy requirements, -</list> -may only be placed in the semi-supported contrib section of the Debian -FTP archives (unless they need to be in non-free - see above). -<p> - -Programs whose authors encourage the user to make donations are fine -for the main distribution, provided that the authors do not claim that -not donating is immoral, unethical, illegal or something similar; -otherwise they must go in contrib (or non-free, if even distribution -is restricted by such statements). -<p> - -Packages whose copyright permission notices (or patent problems) do -not allow redistribution even of only binaries, and where no special -permission has been obtained, cannot placed on the Debian FTP site and -its mirrors at all. -<p> - -Note that under international copyright law<footnote>This applies in -the United States, too.</footnote> <em/no/ distribution or modification -of a work is allowed without an explicit notice saying so. Therefore -a program without a copyright notice <em/is/ copyrighted and you may -not do anything to it without risking being sued! Likewise if a -program has a copyright notice but no statement saying what is -permitted then nothing is permitted. -<p> - -Many authors are unaware of the problems that restrictive copyrights -(or lack of copyright notices) can cause for the users of their -supposedly-free software. It is often worthwhile contacting such -authors diplomatically to ask them to modify their terms generally, or -specially for Debian. However, this is a politically difficult thing -to do and you should ask for advice on <prgn/debian-devel/ first. -<p> - -When in doubt, send mail to <email/debian-devel@lists.debian.org/. Be -prepared to provide us with the copyright statement. Software covered -by the GPL, public domain software and BSD-like copyrights are safe; -be wary of the phrases `commercial use prohibited' and `distribution -restricted'. -<p> - -Every package submission <em/must/ be accompanied by verbatim copy of -its copyright (with the exceptions of public domain packages and those -covered by the UCB BSD licence or the GNU GPL or LGPL; in these cases -simply indicate which is appropriate). This information must be -included in a file installed by the binary package - see <ref -id="copyrightfile">. - -<chapt id="binarypkg">Contents of the binary package - -<sect>Control file requirements - -<sect1><tt/Maintainer/ information -<p> - -All packages must have a <tt/Maintainer/ field with the correct name -and a working email address for the Debian maintainer of the package. -If one person maintains several packages they should try to avoid -having different forms of their name and address in different -<tt/Maintainer/ fields. - -<sect1>Dependencies and virtual packages -<p> - -Add a dependency for any shared libraries required by -dynamically-linked executable binaries in your package, by using -<prgn/dpkg-shlibdeps/. -<p> - -All packages must use virtual package names where appropriate, and -arrange to create new ones if necessary. They must not use virtual -package names (except privately, amongst a cooperating group of -packages) unless they have been agreed upon and appear in the list of -virtual package names. -<p> - -The latest version of the authoritative list of virtual package names -can be found on <ftpsite>ftp.debian.org</> in -<ftppath>/debian/doc/package-developer/virtual-package-names-list.text</> -or your local mirror. The procedure for updating it is described at -the top of the file. - -<sect1><tt/Section/ and <tt/Priority/ -<p> - -Decide whether your package can go in <tt/non-free/, <tt/contrib/ or -the main distribution - see <ref id="pkgcopyright">, and put -an appropriate value for the distribution in the -<tt>debian/changelog</> file. -<p> - -The <tt/Priority/ and <tt/Section/ control file fields give -information for classifying the package in <prgn/dselect/ and say -which directory to place it in the FTP archive. -<p> - -They are ultimately the responsibility of the distribution -maintainers; however, you should suggest values for them in your -<tt/.changes/ information when you upload a package. You do this by -including appropriate information in the <tt>debian/control</tt> file -before building the packages. -<p> - -For a list of the currently in-use sections, please see the FTP -archive. Packages in the non-free and contrib areas should have -section <tt/non-free/ and <tt/contrib/, respectively. - -<sect2><tt/Priority/ values -<p> - -<taglist> -<tag><tt/required/ -<item> -<tt/required/ packages are necessary for the proper functioning of the -system. You must not remove these packages or your system may become -totally broken and you may probably not even be able to use -<prgn/dpkg/ to put things back. Systems with only the <tt/required/ -packages are probably unuseable, but they do have enough functionality -to allow the sysadmin to boot and install more software. - -<tag><tt/important/ -<item> -Important programs, including those which one would expect to find on -any Unix-like system. If the expectation is that an experienced Unix -person who found it missing would go `What the F*!@<+ is going on, -where is <prgn/foo/', it should be in <tt/important/. This is an -important criterion because we are trying to produce, amongst other -things, a free Unix. Other packages without which the system will not -run well or be useable should also be here. This does <em/not/ -include Emacs or X11 or TeX or any other large applications. The -<tt/important/ packages are just a bare minimum of commonly-expected -and necessary tools. - -<tag><tt/standard/ -<item> -These packages provide a reasonably small but not too limited -character-mode system. This is what will install by default if the -user doesn't select anything else. It doesn't include many large -applications, but it does include Emacs (this is more of a piece of -infrastructure than an application) and a reasonable subset of TeX and -LaTeX (if this is possible without X). - -<tag><tt/optional/<footnote>In a sense everything is optional that -isn't required, but that's not what is meant here.</footnote> -<item> -This is all the software that you might reasonably want to install if -you didn't know what it was or don't have specialised requirements. -This is a much larger system and includes X11, a full TeX -distribution, and lots of applications. - -<tag><tt/extra/ -<item> -This contains packages that conflict with others with higher -priorities, or are only likely to be useful if you already know what -they are or have specialised requirements. - -</taglist> -<p> - -Priority values are not case-sensitive. - -<sect2>Base packages -<p> - -Some packages have <tt/Section: base/ and are in the <tt/base/ -subdirectory on the FTP archives. These are the packages that are -supplied on the base disks. They are the minimum sensible set for -installing new packages (perhaps via a network). -<p> - -Most of these packages should have <tt/Priority: required/ or at least -<tt/Priority: important/, and many will be essential (see below). - -<sect1><tt/Pre-Depends/ and the <tt/Essential/ flag -<p> - -Do not use <tt/Pre-Depends/ or <tt/Essential: yes/ unless your package -is absolutely vital to the functioning of the system and the -installation of other packages. Do not do either of these things -without consultation with the distribution maintainers or on -<prgn/debian-devel/. -<p> - -Usually, neither of these fields should not be used unless removing a -package really will completely hose the system, making it impossible -to recover by (re)installing packages with <prgn/dpkg/. -<p> - -<tt/Essential/ should not be used for a shared library package - the -dependencies will prevent its premature removal, and we need to be -able to remove it when it has been superseded. -<p> - -It is not necessary for other packages to declare any dependencies -they have on other packages which are marked <tt/Essential/. - -<sect1>Including <tt/Priority/ and <tt/Section/ in the <tt/.deb/ -control file -<p> - -If a user installs a package which is not part of the standard -distribution, or without downloading and updating from a new -<prgn/Packages/ file, the information about the priority and section -of a package will be absent, and the <prgn/dselect/ package listing -will have the package listed under `unclassified'. In order to -improve this it is permissible to use the <tt/-is/, <tt/-isp/ or -<tt/-ip/ option to <prgn/dpkg-gencontrol/, so that the <tt/Section/ -and/or <tt/Priority/ is copied into the actual control information in -the <tt/.deb/ file. However, if you do this you should make sure you -keep the information up to date so that users are not shown -conflicting information. - - -<sect1>Formatting of the <tt/Description/ control file field -<p> - -Every Debian package should have an extended description. -<p> - -The description should be written so that it tells the user what they -need to know to decide whether to install the package. This -description should not just be copied from the blurb for the program. -Instructions for configuring or using the package should not be -included - that is what installation scripts, manpages, Info files and -<tt>/usr/doc/<var/package/</> are for. Copyright statements and other -administrivia should not be included - that is what -<tt>/usr/doc/<var/package//copyright</> is for. -<p> - -If you wish to include a list in your extended with entries which are -a line or more each you must indent each entry by one space to make -sure that it doesn't get wordwrapped. The start of each list entry -should be marked with an asterisk, followed by a single space. You -must wrap the list entries yourself to 75 columns, and should start -continuation lines indented by three spaces so that they line up with -the start of the text on the first line of each list entry. -<p> - -See the programmers' manual for further requirements and pitfalls. - -<sect>Locations of files -<p> - -The location of all installed files and directories must comply fully -with the Linux File System Standard (FSSTND). The latest version of -this document can be found alongside this manual or on -<ftpsite/tsx-11.mit.edu/ in -<ftppath>/pub/linux/docs/linux-standards/fsstnd/</>. Specific questions -about following the standard may be asked on <prgn/debian-devel/, or -referred to Daniel Quinlan, the FSSTND coordinator, at -<email/quinlan@yggdrasil.com/. -<p> - -<sect1>Manpages -<p> - -You must install manpages in <prgn/nroff/ source form, in appropriate -places under <tt>/usr/man</tt>. You should only use sections 1 to 9 -(see the FSSTND for more details). You must <em/not/ install a -preformatted `cat page'. -<p> - -If no manual page is available for a particular program, utility or -function and this is reported as a bug on debian-bugs, a symbolic link -from the requested manual page to the <manref name=undocumented -section=7> manual page should be provided. This symbolic link can be -created from <tt>debian/rules</> like this: -<example> -ln -s ../man7/undocumented.7 \ - debian/tmp/usr/man/man[1-9]/the_requested_manpage.[1-9] -</example> -This manpage claims that the lack of a manpage has been reported as a -bug, so you may only do this if it really has (you can report it -yourself, if you like). Do not close the bug report until a proper -manpage is available. -<p> - -You may forward a complaint about a missing manpage to the upstream -authors, and mark the bug as forwarded in the Debian bug tracking -system. Even though the GNU Project do not in general consider the -lack of a manpage to be a bug, we do - if they tell you that they -don't consider it a bug you should leave the bug in our bug tracking -system open anyway. -<p> - -Manpages should be installed compressed using <tt/gzip -9/. -<p> - -If one manpage needs to be accesssible via several names it is better -to use a symbolic link than the <tt/.so/ feature, but there is no need -to fiddle with the relevant parts of the upstream source to change -from <tt/.so/ to symlinks - don't do it unless it's easy. Do not -create hard links in the manual page directories, and do not put -absolute filenames in <tt/.so/ directives. The filename in a -<tt/.so/ in a manpage should be relative to the base of the manpage -tree (usually <tt>/usr/man</tt>). - -<sect1>Info documents -<p> - -Info documents should be installed in <tt>/usr/info</tt>. They should -be compressed with <tt/gzip -9/. -<p> - -Your package must call <prgn/install-info/ to update the Info <tt/dir/ -file, in its post-installation script: -<example> -install-info --quiet --section Development Development \ - /usr/info/foobar.info -</example> -<p> - -It is a good idea to specify a section for the location of your -program; this is done with the <tt/--section/ switch. To determine -which section to use, you should look at <tt>/usr/info/dir</> on your -system and choose the most relevant (or create a new section if none -of the current sections are relevant). Note that the <tt/--section/ -flag takes two arguments; the first is a regular expression to match -(case-insensitively) against an existing section, the second is used -when creating a new one. -<p> - -You must remove the entries in the pre-removal script: -<example> -install-info --quiet --remove /usr/info/foobar.info -</example> -<p> - -If <prgn/install-info/ cannot find a description entry in the Info file -you will have to supply one. See <manref name=install-info section=8> -for details. - -<sect1>Additional documentation -<p> - -Any additional documentation that comes with the package can be -installed at the discretion of the package maintainer. Text -documentation should be installed in a directory -<tt>/usr/doc/<var/package/</tt><footnote>Where <var/package/ is the -name of the package.</footnote> and compressed with <tt/gzip -9/ -unless it is small. -<p> - -If a package comes with large amounts of documentation which many -users of the package will not require you should create a separate -binary package to contain it, so that it does not take up disk space -on the machines of users who do not need or want it installed. -<p> - -It is often a good idea to put text information files (<tt/README/s, -changelogs, and so forth) that come with the source package in -<tt>/usr/doc/<var/package/</> in the binary package. However, don't -install the instructions for building and installing the package, of -course! - -<sect1>Preferred documentation formats -<p> - -The unification of Debian documentation is being carried out via HTML. -<p> - -If your package comes with extensive documentation in a markup format -that can be converted to various other formats you should if possible -ship HTML versions in the binary package, in the directory -<tt>/usr/doc/<var/package/</> or its subdirectories. -<p> - -Other formats such as PostScript may be provided at your option. - -<sect2>Examples -<p> - -Any examples (configurations, source files, whatever), should be -installed in a directory <tt>/usr/doc/<var/package//examples</tt>. -These files should not be referenced by any program - they're there -for the benefit of the system administrator and users, as -documentation only. - -<sect1 id="instchangelog"><tt>/usr/doc/<var/package//changelog.Debian.gz</> -and <tt>/usr/doc/<var/package//changelog.upstream.gz</>. -<p> - -This installed file must contain a copy of the <tt>debian/changelog</> -file from your Debian source tree, and a copy of the upstream -changelog file if there is one. They should usually be installed in -<tt>/usr/doc/<var/package/</> as <tt/changelog.Debian.gz/ and -<tt/changelog.gz/ respectively. -<p> - -Both should be installed compressed using <tt/gzip -9/, as they will -become large with time even if they start out small. -<p> - -If the package has only one changelog which is used both as the Debian -changelog and the upstream one because there is no separate upstream -maintainer then that changelog should usually be installed as -<tt>/usr/doc/<var/package//changelog.gz</>; if there is a separate -upstream maintainer, but no upstream changelog, then the Debian -changelog should still be called <tt/changelog.Debian.gz/. - -<sect1 id="copyrightfile"><tt>/usr/doc/<var/package//copyright</tt> -<p> - -This file must contain details of the authorship and copyright of the -package. It must say where the upstream sources (if any) were -obtained, and explain briefly what modifications were made in the -Debian version of the package compared to the upstream one. It must -name the original authors of the package and the Debian maintainer(s) -who were involved with its creation. -<p> - -It must contain the full text of the copyright notice and any -acknowledgements for the program and the licence terms under which the -program is distributed. If the package is distributed under the GNU -General Public Licence, the GNU Library General Public Licence, the -Regents of the University of California at Berkeley (BSD) licence or -Larry Wall's Artistic Licence please say so instead of including a -copy of the licence. The files <tt/BSD/, <tt/GPL/, <tt/LGPL/ and -<tt/Artistic/ are be available in <tt>/usr/doc/copyright</tt> for you -to refer to. -<p> - -The copyright file should not be compressed unless it is very large. -<p> - -Do not use the copyright file as a general <tt/README/ file. If your -package has such a file it should be installed in -<tt>/usr/doc/<var/package//README</> or <tt/README.Debian/ or some -other appropriate place. - -<sect1>Symbolic links -<p> - -Most symbolic links should be relative, not absolute. Absolute links, -in general, cause problems when a file system is not mounted where it -"normally" resides (for example, when mounted via NFS). -<p> - -In particular, symlinks from one part of <tt>/usr</tt> to another -should be relative. -<p> - -In certain cases, however, relative links may cause more problems. -For example, links into <tt>/etc</tt> and <tt>/var</tt> should be -absolute. -<p> - -Note that when creating a relative link using <prgn/ln/ it is not -necessary for the target of the link to exist relative to the working -directory you're running <prgn/ln/ from; nor is it necessary to change -directory to the directory where the link is to be made. Simply -include the string that should appear as the target of the link (this -will be a pathname relative to the directory in which the link -resides) as the first argument to <prgn/ln/. -<p> - -For example, in your <prgn/Makefile/ or <tt>debian/rules</>, do things -like: -<example> -ln -fs gcc $(prefix)/bin/cc -ln -fs gcc debian/tmp/usr/bin/cc -ln -fs ../sbin/sendmail $(prefix)/bin/runq -ln -fs ../sbin/sendmail debian/tmp/usr/bin/runq -</example> - -<sect1>Logfiles -<p> - -Logfiles should usually be named -<tt>/var/log/<var/package/.log</tt>. If you have many logfiles, -or need a separate directory for permissions reasons -(<tt>/var/log</tt> is writeable only by <tt/root/), you should usually -create a directory named <tt>/var/log/<var/package/</tt>. -<p> - -Make sure that any logfiles are rotated occasionally so that they -don't grow indefinitely; the best way to do this is to use -<prgn/savelog/ program in an <tt>/etc/cron.daily</>, -<tt>/etc/cron.weekly</> or <tt>/etc/cron.monthly</> script. -<p> - -Make sure that any logfiles are removed when the package is purged -(but not when it is only removed), by checking the argument to the -postrm script (see the programmer's manual for details). - -<sect1><tt>/usr/local</> - for the use of the system administrator -<p> - -As mandated by the FSSTND no package should place any files in -<tt>/usr/local</>, either by putting them in the filesystem archive to -be unpacked by <prgn/dpkg/ or by manipulating them in their maintainer -scripts. -<p> - -Every package that searches a number of directories or files for -something (for example, looking for shared libraries in <tt>/lib</> or -<tt>/usr/lib</>) should search an appropriate directory in -<tt>/usr/local</> too. -<p> - -In order that the system administrator may know where to place -additional files a package should create an empty directory in the -appropriate place in <tt>/usr/local</> by supplying it in the -filesystem archive for unpacking by <prgn/dpkg/. The -<tt>/usr/local</> directory itself and all the subdirectories created -by the package should have permissions 2775 (group-writeable and -set-group-id) and be owned by <tt/root.staff/. -<p> - -In the future it will be possible to tell <prgn/dpkg/ not to unpack -files matching certain patterns, so that system administrators who do -not wish these directories in <tt>/usr/local</> do not need to have -them. - -<sect>Permissions and ownerships -<p> - -The rules in this section are guidelines for general use. If -necessary you may deviate from the details below. However, if you do -so you must make sure that what is done is secure and you must try to -be as consistent as possible with the rest of the system. You should -probably also discuss it on <prgn/debian-devel/ first. -<p> - -Files should be owned by <tt/root.root/, and made writeable only by -the owner and universally readable (and executable, if appropriate). -<p> - -Directories should be mode 755 or (for group-writability) mode 2775. -The ownership of the directory should be consistent with its mode - -if a directory is mode 2775, it should be owned by the group that -needs write access to it. -<p> - -Setuid and setgid executables should be mode 4755 or 2755 -respectively, and owned by the appropriate user or group. They should -not be made unreadable (modes like 4711 or 2711 or even 4111); doing -so achieves no extra security, because anyone can find the binary in -the freely available Debian package - it is merely inconvenient. For -the same reason you should not restrict read or execute permissions on -non-set-id executables. -<p> - -Some setuid programs need to be restricted to particular sets of -users, using file permissions. In this case they should be owned by -the uid to which they are set-id, and by the group which should be -allowed to execute them. They should have mode 4754; there is no -point in making them unreadable to those users who must not be allowed -to execute them. -<p> - -Do not arrange that the system administrator can only reconfigure the -package to correspond to their local security policy by changing the -permissions on a binary. Ordinary files installed by <prgn/dpkg/ (as -opposed to conffiles and other similar objects) have their permissions -reset to the distributed permissions when the package is reinstalled. -Instead you should consider (for example) creating a group for people -allowed to use the program(s) and making any setuid executables -executable only by that group. -<p> - -Shared libraries should be installed executable. - -<sect>Configuration files -<p> - -Any configuration files created or used by your package should reside -in <tt>/etc</tt>. If there are several you should consider creating a -subdirectory named after your package. -<p> - -It is almost certain that any file in <tt>/etc</tt> that is in your -package's filesystem archive should be listed in <prgn/dpkg/'s -<tt/conffiles/ control area file. (See the <prgn/dpkg/ programmers' -manual). - -<sect>Maintainer scripts -<p> - -The package installation scripts should avoid producing output which -it is unnecessary for the user to see and should rely on <prgn/dpkg/ to -stave off boredom on the part of a user installing many packages. -This means, amongst other things, using the <tt/--quiet/ option on -<prgn/install-info/. -<p> - -Packages should try to minimise the amount of prompting they need to -do, and they should ensure that the user will only every be asked each -question once. This means that packages should try to use appropriate -shared configuration files (such as <tt>/etc/papersize</> and -<tt>/etc/news/server</>, rather than each prompting for their own -list of required pieces of information. -<p> - -It also means that an upgrade should not ask the same questions again, -unless the user has used <tt/dpkg --purge/ to remove the package's -configuration. The answers to configuration questions should be -stored in an appropriate place in <tt>/etc</> so that the user can -modify them, and how this has been done should be documented. -<p> - -If a package has a vitally important piece of information to pass to -the user (such as "don't run me as I am, you must edit the following -configuration files first or you risk your system emitting -badly-formatted messages"), it should display this in the -<prgn/postinst/ script and prompt the user to hit return to -acknowledge the message. Copyright messages do not count as vitally -important (they belong in <tt>/usr/doc/copyright</>); neither do -instructions on how to use a program (these should be in on line -documentation, where all the users can see them). -<p> - -Any necessary prompting should almost always be confined to the -post-installation script, and should be protected with a conditional -so that unnecssary prompting doesn't happen if a package's -installation fails and the <prgn/postinst/ is called with -<tt/abort-upgrade/, <tt/abort-remove/ or <tt/abort-deconfigure/. -<p> - -Errors which occur during the execution of an installation script -<em/must/ be checked and the installation <em/must not/ continue after -an error. -<p> - -The section below on scripts in general applies to package maintainer -scripts too. - -<sect>Scripts in general -<p> - -All command scripts, including the package maintainer scripts inside -the package and used by <prgn/dpkg/, should have a <tt/#!/ line naming -the shell to be used to interpret them. -<p> - -In the case of Perl scripts this should be <tt>#!/usr/bin/perl</tt>. -<p> - -Shell scripts (<prgn/sh/ and <prgn/bash/) should almost certainly -start with <tt>set -e</> so that errors are detected. Every script -<em/must/ use <tt/set -e/ or check the exit status of <em/every/ -command. -<p> - -Perl scripts should check for errors when making any system calls, -including <tt/open/, <tt/print/, <tt/close/, <tt/rename/ and -<tt/system/. -<p> - -<prgn/csh/ and <prgn/tcsh/ should be avoided as scripting languages. See -Csh Programming Considered Harmful, one of the <tt/comp.unix.*/ FAQs. -If an upstream package comes with <prgn/csh/ scripts then you must make -sure that they start with <tt>#!/bin/csh</tt> and make your package -depend on <prgn/csh/. -<p> - -<sect>Shared library packages -<p> - -Packages involving shared libraries should be split up into several -binary packages. -<p> - -For a straightforward library which has a development environment and -a runtime kit including just shared libraries you need to create two -packages: <tt/<var/libraryname/<var/soname//<footnote><var/soname/ is -the shared object name of the shared library - it's the thing that has -to match exactly between building an executable and running it for the -dynamic linker to be able run the program. Usually the <var/soname/ -is the major number of the library.</footnote> and -<tt/<var/libraryname/<var/soname/-dev/. -<p> - -If you prefer only to support one development version at a time you -may name the development package <tt/<var/libraryname/-dev/; otherwise -you may wish to use <prgn/dpkg/'s conflicts mechanism to ensure that -the user only installs one development version at a time (after all, -different development versions are likely to have the same header -files in them, causing a filename clash if both are installed). -Typically the development version will also need an exact version -dependency on the runtime library, to make sure that compilation and -linking happens correctly. -<p> - -Packages which use the shared library should have a dependency on the -name of the shared library package, -<tt/<var/libraryname/<var/soname//. When the <var/soname/ changes you -can have both versions of the library installed while moving from the -old library to the new. -<p> - -If your package has some run-time support programs which use the -shared library you must <em/not/ put them in the shared library -package. If you do that then you won't be able to install several -versions of the shared library without getting filename clashes. -Instead, either create a third package for the runtime binaries (this -package might typically be named <tt/<var/libraryname/-runtime/ - note -the absence of the <var/soname/ in the package name) or if the -development package is small include them in there. -<p> - -If you have several shared libraries built from the same source tree -you can lump them all togther into a single shared library package, -provided that you change all their <var/soname/s at once (so that you -don't get filename clashes if you try to install different versions of -the combined shared libraries package). -<p> - -Follow the directions in the <prgn/dpkg/ programmers' manual for -putting the shared library in its package, and make sure you include a -<tt/shlibs/ control area file with details of the dependencies for -packages which use the library. - -<sect>Application configuration files, dotfiles and <tt>/etc/skel</> -<p> - -Files in <tt>/etc/skel</> will automatically be copied into new user -accounts by <prgn/adduser/. They should not be referenced there by -any program. -<p> - -Therefore, if a program needs a dotfile to exist in advance in -<tt/$HOME/ to work sensibly that dotfile should be installed in -<tt>/etc/skel</> (and listed in conffiles, if it is not generated and -modified dynamically by the package's installation scripts). -<p> - -However, programs that require dotfiles in order to operate sensibly -(dotfiles that they do not create themselves automatically, that is) -are a bad thing, and programs should be configured by the Debian -default installation as close to normal as possible. -<p> - -Therefore, if a program in a Debian package needs to be configured in -some way in order to operate sensibly that configuration should be -done in a site-wide global configuration file elsewhere in -<tt>/etc</>. Only if the program doesn't support a site-wide default -configuration and the package maintainer doesn't have time to add it -should a default per-user file be placed in <tt>/etc/skel</>. -<p> - -<tt>/etc/skel</> should be as empty as we can make it. This is -particularly true because there is no easy mechanism for ensuring that -the appropriate dotfiles are copied into the accounts of existing -users when a package is installed. -<p> - -Ideally the sysadmin should ideally not have to do any configuration -other than that done (semi-)automatically by the postinst script. - - -<sect>Games -<p> - -The permissions on /var/lib/games are 755 <tt/root.root/. -<p> - -Each game decides on its own security policy. -<p> - -Games which require protected, privileged access to high-score files, -savegames, &c, must be made set-<em/group/-id (mode 2755) and -owned by <tt/root.games/, and use files and directories with -appropriate permissions (770 <tt/root.games/, for example). They must -<em/not/ be made set-<em/user/-id, as this causes security -problems.<footnote>If an attacker can subvert any set-user-id game -they can overwrite the executable of any other, causing other players -of these cames to run a trojan. With a set-group-id game the attacker -only gets access to less important game data, and if they can get at -the other players' accounts at all it will take considerably more -effort.</footnote> -<p> - -Some packages, for example some fortune cookie programs, are -configured by the upstream authors to install with their data files or -other static information made unreadable so that they can only be -accessed through set-id programs provided. Do not do this in a Debian -package: anyone can download the <tt/.deb/ file and read the data from -it, so there is no point making the files unreadable. Not making the -files unreadable also means that you don't have to make so many -programs set-id, which reduces the risk of a security hole. - -<sect>Allocating package-specific users and groups -<p> - -If you need to create a new user or group for your package there are -two possibilities. Firstly, you may need to make some files in the -binary package be owned by this user or group, or you may need to -compile the user or group id (rather than just the name) into the -binary (though this latter should be avoided if possible). In this -case you need a statically allocated id. -<p> - -You must ask for a user or group id from the base system maintainer, -and must not release the package until you have been allocated one. -Once you have been allocated one you must make the package depend -on a version of the base system with the id present in -<tt>/etc/passwd</tt> or <tt>/etc/group</tt>, or alternatively arrange -for your package to create the user or group itself with the correct -id (using <tt/adduser/) in its pre- or post-installation script (the -latter is to be preferred if it is possible). -<p> - -On the other hand, the program may able to determine the uid or gid -from the group name at runtime, so that a dynamic id can be used. In -this case you must choose an appropriate user or group name, -discussing this on <prgn/debian-devel/ and checking with the base system -maintainer that it is unique and that they do not wish you to use a -statically allocated id instead. When this has been checked you must -arrange for your package to create the user or group if necessary -using <prgn/adduser/ in the pre- or post-installation script (again, the -latter is to be preferred if it is possible). -<p> - -Note that changing the numeric value of an id associated with a name -is very difficult, and involves searching the filesystem for all -appropriate files. You need to think carefully whether a static or -dynamic id is required, since changing your mind later will cause -problems. - - -<sect>Installation of Emacs-lisp files -<p> - -Generally, if a package includes an elisp helper file, it probably -doesn't need to be byte-compiled. If the package is <em/written/ -primarily in emacs, it is probably complex enough that speed is an -issue and should be byte compiled. - - -<sect>Use of <prgn/dpkg-divert/ and <prgn/update-alternatives/ -<p> - -Do not use <prgn/dpkg-divert/ on a file belonging to another package -without consulting the maintainer of that package first. -<p> - -In order for <prgn/update-alternatives/ to work correctly all the -packages which supply an instance of the `shared' command name (or, -in general, filename) must use it. You can use <tt/Conflicts/ to -force the deinstallation of other packages supplying it which do not -(yet) use <prgn/update-alternatives/. It may in this case be -appropriate to specify a conflict on earlier versions on something - -this is an exception to the usual rule that this is not allowed. - - -<chapt>Configuring and building the programs in the package - -<sect>Compilation options -<p> - -Generally the following compilation parameters should be used: -<example> -CC = gcc -CFLAGS = -O2 -g -Wall # sane warning options vary between programs -LDFLAGS = # none -install -s # (or use strip on the files in debian/tmp) -</example> -<p> - -Note that all installed binaries and shared libraries should be -stripped<footnote>Shared libraries can function perfectly well when -stripped, since the symbols for dynamic linking are in a separate part -of the ELF object file.</footnote><footnote>Under some circumstances -it may be useful to install a shared library unstripped, for example -when building a separate package to support debugging.</footnote>, -either by using the <tt/-s/ flag to <prgn/install/, or by calling -<prgn/strip/ on the binaries after they have been copied into -<tt>debian/tmp</> but before the tree is made into a package. -<p> - -Make sure that you do not link with <tt/-g/, as this makes a.out -compilers produce huge statically linked binaries. The <tt/-g/ flag -is useful on compilation so that you have available a full set of -debugging symbols in your built source tree, in case anyone should -file a bug report involving (for example) a core dump. -<p> - -The <tt/-N/ flag should not be used. On a.out systems it may have -been useful for some very small binaries, but for ELF it has no good -effect. -<p> - -It is up to the package maintainer to decide what compilation options -are best for the package. Certain binaries (such as -computationally-intensive programs) may function better with certain -flags (<tt/-O3/, for example); feel free to use them. Please use good -judgment here. Don't use flags for the sake of it; only use them if -there is good reason to do so. Feel free to override the upstream -author's ideas about which compilation options are best - they are -often inappropriate for our environment. -<p> - -Please make sure that you use only released versions of shared -libraries to build your packages; otherwise other users will not be -able to run your binaries properly. Producing source packages that -depend on unreleased compilers is also usually a bad idea. - - -<sect>Packages which can use the X shared libraries -<p> - -Some programs can be configured with or without support for X Windows. -Typically these binaries produced when configured for X will need the -X shared libraries to run. -<p> - -Such programs should be configured <em/with/ X support, and should -declare a dependency on <tt/elf-x11r6lib/ (for the X11R6 libraries). -Users who wish to use the program can install just the relatively -small <tt/xlib/ package, and do not need to install the whole of X. -<p> - -Do not create two versions (one with X support and one without) of -your package. - - -<sect id="mail">Mail processing on Debian systems -<p> - -Debian packages which process electronic mail, whether -mail-user-agents (MUAs) or mail-transport-agents (MTAs), <em/must/ -make sure that they are compatible with the configuration decisions -below. Failure to do this may result in lost mail, broken <tt/From:/ -lines, and other serious brain damage! -<p> - -The mail spool is <tt>/var/spool/mail</> and the interface to send a -mail message is <tt>/usr/sbin/sendmail</> (as per the FSSTND). The -mail spool is part of the base system and not part of the MTA package. -<p> - -Mailboxes are locked using the <tt/<var/username/.lock/ lockfile -convention, rather than <prgn/fcntl/, <prgn/flock/ or <prgn/lockf/. -<p> - -Mailboxes are generally 660 <tt/<var/user/.mail/ unless the user has -chosen otherwise. A MUA may remove a mailbox (unless it has -nonstandard permissions) in which case the MTA or another MUA must -recreate it if needed. Mailboxes must be writeable by group mail. -<p> - -The mail spool is 2775 <tt/mail.mail/, and MUA's need to be setgid -mail to do the locking mentioned above (and obviously need to avoid -accessing other users' mailboxes using this privilege). -<p> - -<tt>/etc/aliases</> is the source file for the system mail aliases -(e.g. postmaster, usenet, etc.) - it is the one which the sysadmin -and postinst scripts may edit. After <tt>/etc/aliases</> is edited -the program or human editing it must call <prgn/newaliases/. All MTA -packages should come with a <prgn/newaliases/ program, even if it does -nothing, but older MTA packages do not do this so programs should not -fail if <prgn/newaliases/ cannot be found. -<p> - -The convention of writing <tt/forward to <var/address// in the mailbox -itself is not supported. Use a <tt/.forward/ file instead. -<p> - -The location for the <prgn/rmail/ program used by UUCP for incoming -mail is <tt>/usr/sbin/rmail</>, as per the FSSTND. Likewise, -<prgn/rsmtp/, for receiving batch-SMTP-over-UUCP, is in -<tt>/usr/sbin/rsmtp</> if it is supported. -<p> - -If you need to know what name to use (for example) on outgoing news -and mail messages which are generated locally, you should use the file -<tt>/etc/mailname</>. It will contain the portion after the username -and <tt/@/ (at) sign for email addresses of users on the machine -(followed by a newline). -<p> - -A package should check for the existence of this file. If it exists -it should use it without comment.<footnote>An MTA's prompting -configuration script may wish to prompt the user even if it finds this -file exists.</footnote> If it does not exist it should prompt the user -for the value and store it in <tt>/etc/mailname</> as well as using it -in the package's configuration. The prompt should make it clear that -the name will not just be used by that package. E.g., in this -situation the INN package says: -<example> -Please enter the `mail name' of your system. This is the hostname -portion of the address to be shown on outgoing news and mail messages. -The default is <var/syshostname/, your system's host name. -Mail name [`<var/syshostname/']: -</example> -where <var/syshostname/ is the output of <tt/hostname -fqdn/. - - -<sect>Obsolete constructs and libraries: varargs and libtermcap -<p> - -<prgn/<varargs.h>/ is provided to support end-users compiling -very old software; libtermcap is provided to support the execution of -software which has been linked against it (either old programs or -those such as Netscape which are only available in binary form). -<p> - -Debian packages should be ported to <prgn/<stdarg.h>/ and -ncurses when they are built. - - -<chapt id="sourcepkg">Source packaging, changelogs, etc. - -<sect>Releases of packages by other than the usual Debian maintainer -<p> - -Under certain circumstances it is necessary for someone other than the -usual package maintainer to make a release of a package. For example, -a porter for another architecture may have to make some small changes -to the source package and does not wish to wait with uploading their -release until the main maintainer has incorporated the patch, or a -serious security problem may have come to light requiring immediate -attention. -<p> - -Maintainers other than the usual package maintainer should make as few -changes to the package as possible, and they should always send a -unified context diff (<tt/diff -u/) detailing their changes to the bug -tracking system properly flagged with the correct package so that the -usual maintainer is kept aware of the situation. -<p> - -When someone other than the usual maintainer releases a package they -should add a new component to the <var/debian-revision/ component of -the version number - that is, the portion after the (last) hyphen. -This extra component will start at <tt/1/. This is to avoid -`stealing' one of the usual maintainer's version numbers, possibly -disrupting their work. If there is no <var/debian-revision/ component -in the version number then one should be created, starting at <tt/1/. -<p> - -If it is absolutely necessary for someone other than the usual -maintainer to make a release based on a new upstream version then the -person making the release should start with the <var/debian-revision/ -value <tt/0.1/. The usual maintainer of a package should start their -<var/debian-revision/ numbering at <tt/1/. - - -<sect>Standards conformance and <tt/Standards-Version/ -<p> - -You should specify the most recent version of the packaging standards -with which your package complies in the source package's -<tt/Standards-Version/ field. -<p> - -This value will be used to file bug reports automatically if your -package becomes too much out of date. -<p> - -The value corresponds to a version of the Debian manuals, as can be -found on the title page or page headers and footers (depending on the -format). The value for this version of the manuals and packaging -standards is <tt/&manuals-version;/. -<p> - -The version number has four components - major and minor number and -major and minor patchlevel. When the standards change in a way that -requires every package to change the major number will be changed. -Significant changes that will require work in many packages will be -signaled by a change to the minor number. The major patchlevel will -be changed for any change to the meaning of the standards, however -small; the minor patchlevel will be changed when only cosmetic, -typographical or other edits which do not change the meaning are made, -or changes which do not affect the contents of packages. -<p> - -You should regularly, and especially if your package has become out of -date, install the most recent version of dpkg and read -<tt>/usr/doc/dpkg/changelog-manuals</> to see which changes, if any, -are relevant. If any are relevant you should look up the relevant -section in the policy or programmers' manuals and update your package. -When your package complies with the new standards you may update the -<tt/Standards-Version/ source package field and release it. - - -<sect>Documentation and the <tt/changelog/ -<p> - -Document your changes and updates to the source package properly in -the <tt>debian/changelog</tt> file. -<p> - -A copy of the file which will be installed in -<tt>/usr/doc/<var/package//copyright</tt> should be in -<tt>debian/copyright</tt>. -<p> - -In non-experimental packages you may only use a format for -<tt>debian/changelog</> which is supported by the most recent released -version of <prgn/dpkg/. If your format is not supported and there is -general support for it you should contact the <prgn/dpkg/ maintainer -to have the parser script for your format included in the <prgn/dpkg/ -package.<footnote>You will need to agree that the parser and its -manpage may be distributed under the GNU GPL, just as the rest of -<prgn/dpkg/ is.</footnote> - -<sect>Changes to the upstream sources -<p> - -If you need to edit a <prgn/Makefile/ where GNU-style <prgn/configure/ -scripts are used, you should edit the <tt/.in/ files rather than -editing the <prgn/Makefile/ directly. This allows the user to -reconfigure the package if necessary. You should <em/not/ configure -the package and edit the generated <prgn/Makefile/! This makes it -impossible for someone else to later reconfigure the package. -<p> - -If changes to the source code are made that are generally applicable -please try to get them included in the upstream version of the package -by supplying the upstream authors with the changes in whatever form -they prefer. -<p> - -If you need to configure the package differently for Debian or for -Linux, and the upstream source doesn't provide a way to configure it -the way you need to, please add such configuration facilities (for -example, a new <prgn/autoconf/ test or <tt/#define/) and send the -patch to the upstream authors, with the default set to the way they -originally had it. You can then easily override the default in your -<tt>debian/rules</tt> or wherever is appropriate. - -<sect>Error trapping in makefiles -<p> - -When <prgn/make/ invokes a command in a makefile (including your -package's upstream makefiles and the <tt>debian/rules</>) it does so -using <tt/sh/. This means that <tt/sh/'s usual bad error handling -properties apply: if you include a miniature script as one of the -commands in your makefile you'll find that if you don't do anything -about it then errors are not detected and <prgn/make/ will blithely -continue after problems. -<p> - -Every time you put more than one shell command (this includes using a -loop) in a makefile command you <em/must/ make sure that errors are -trapped. For simple compound commands, such as changing directory and -then running a program, using <tt/&&/ rather than semicolon as -a command separator is sufficient. For more complex commands -including most loops and conditionals you must include a separate -<tt/set -e/ command at the start of every makefile command that's -actually one of these miniature shellscripts. - -<chapt id="developer">Procedure - how to participate in the Debian project - -<sect>Before you start work on a package -<p> - -So, you've read all the documentation, you understand what everything -in the <prgn/hello/ example package is for, and you're about to -Debianise your favourite package. How do you actually become a Debian -developer so that your work can be incorporated into the Project? -<p> - -Firstly, subscribe to <prgn/debian-devel/ if you haven't already. -Send the word <tt/subscribe/ in the <em/Subject/ of a mail to -<email/debian-devel-REQUEST@lists.debian.org/. In case of problems -contact the list administrator, Anders Chrigstrom <email/ac@netg.se/. -<p> - -You should to subscribe and lurk for a bit before doing any coding, -and you should post about your intentions to work on something to -avoid duplicated effort. -<p> - -If you do not have a PGP key yet generate one. You should probably -read the PGP manual, as it has much important information which is -critical to its security. Many more security failures are due to -human error than to software failure or high-powered spy techniques. -<p> - -If you live in a country where use of cryptography even for signing is -forbidden then please contact us so we can make special arrangements. -This does not apply in France, where I believe only encryption and not -signing is forbidden. - - -<sect>When you have a package to upload -<p> - -When you have your package ready to be uploaded you must send a -message to the project leader, Bruce Perens <email/bruce@pixar.com/, -the administrator of <tt/master.debian.org/, Simon Shapiro -<email/shimon@i-connect.net/, the mailing list administrator, Anders -Chrigstrom <email/ac@netg.se/ and the <prgn/dpkg/ maintainer, Ian -Jackson <email/ijackson@gnu.ai.mit.edu/. -<p> - -The message should say what you've done and who you are, and should -ask for an account on <prgn/master/ and to be subscribed to -<prgn/debian-private/ (the developers-only mailing list). It should -contain your PGP key (extracted using <tt/pgp -kxa/) for the database -of keys which is shipped with <prgn/dpkg/. - -When you have your personal account on <prgn/master/ log in and -transfer the files to -<tt>/home/Debian/ftp/private/project/Incoming</>. You cannot upload -to <prgn/Incoming/ on <prgn/master/ using anonymous FTP. -<p> - -You can also upload files to <prgn/Incoming/ via a <prgn/cron/-driven -upload queue in Europe on <ftpsite/chiark.chu.cam.ac.uk/. For details -connect to <prgn/chiark/ using anonymous FTP and read -<ftppath>/pub/debian/private/project/README.how-to-upload</ftppath>. - - -<sect id="changesfiles">Upload handling - <tt/.changes/ files -<p> - -When a package is uploaded to the Debian FTP archive, it must be -accompanied by a <tt/.changes/ file which gives directions for its -handling. This is usually generated by <prgn/dpkg-genchanges/. -<p> - -This file is a control file with the following fields: -<list compact> -<item><tt/Format/ -<item><tt/Date/ -<item><tt/Source/ -<item><tt/Binary/ -<item><tt/Architecture/ -<item><tt/Version/ -<item><tt/Distribution/ -<item><tt/Urgency/ -<item><tt/Maintainer/ -<item><tt/Description/ -<item><tt/Changes/ -<item><tt/Files/ -</list> -<p> - -All of them are mandatory for a Debian upload. See the list of -control fields in the <prgn/dpkg/ programmers' manual for the contents -of these fields. -<p> - -The first time a version is uploaded which corresponds to a particular -upstream version the original source tarfile should be uploaded and -included in the <tt/.changes/ file; subsequent times the very same -tarfile should be used to build the new diffs and <tt/.dsc/ files, and -it need not then be uploaded. -<p> - -By default <prgn/dpkg-genchanges/ and <prgn/dpkg-buildpackage/ will -include the original source tarfile if and only if the Debian revision -part of the source version number is <tt/0/ or <tt/1/, indicating a -new upstream version. This behaviour may be modified by using -<tt/-sa/ to always include it or <tt/-sd/ to always leave it out. -<p> - -If no original source is included in the upload then the original -source tarfile used by <prgn/dpkg-source/ when constructing the -<tt/.dsc/ file and diff to be uploaded <em/must/ be byte-for-byte -identical with the one already in the archive. If there is some -reason why this is not the case then the new version of the original -source should be uploaded, possibly by using the <tt/-sa/ flag. - - -<sect>Upload handling - announcements -<p> - -When a package is uploaded an announcement should be posted to -<tt/debian-changes/. The announcement should give the (source) -package name and version number, and a very short summary of the -changes, in the <prgn/Subject/ field, and should contain the -PGP-signed <tt/.changes/ file. Some additional explanatory text may -be added before the start of the <tt/.changes/ file. -<p> - -If a package is released with <tt/Distribution: experimental/ the -announcement should be posted to <tt/debian-devel/ instead. - - -<sect id="mailinglists">The Debian mailing lists -<p> - -The mailing list server is at <tt/lists.debian.org/. Mail -<tt/debian-<var/foo/-REQUEST@lists.debian.org/<footnote>where -<tt/debian-<var/foo// is the name of the list</footnote> with the word -<tt/subscribe/ in the Subject to subscribe or <tt/unsubscribe/ to -unsubscribe. -<p> - -When replying to messages on the mailing list, please do not send a -carbon copy (<tt/CC/ - this does not mean `courtesy copy') to the -original poster. Anyone who posts to a mailing list should read it to -see the responses. -<p> - -As ever on the net, please trim down the quoting of articles you're -replying to. In general, please adhere to the usual conventions for -posting messages. - - -<chapt id="conversion">Conversion procedure from old source packages -<p> - -This is a brief summary of the procedure for converting a -pre-2.0.0.0-format source package into the new format. -<p> - -You are strongly advised to download and examine the <prgn/hello/ -package, and to read the section in the <prgn/dpkg/ programmers' -manual describing the source packaging tools. More detail about the -exact functionality of these tools is available in <manref -name=dpkg-source section=1>. -<p> - -<list> - -<item> -Download the original source code from wherever it can be found and do -any rearrangement required to make it look like the original tree of -the Debian source. Put it in -<tt><var/package/-<var/upstream-version/.orig/</> or -<tt/<var/package/_<var/upstream-version/.orig.tar.gz/. - -<item> -Rename all files <tt/debian.*/ to <tt>debian/*</>. There may be some -exceptions to this, but this is a good start. - -<item> -Edit the <tt>debian/changelog</> - create or rename it if necessary. -Add a new revision to the top with the appropriate details, and a -local variables entry to the bottom to set Emacs to the right mode: -<example> -Local variables: -mode: debian-changelog -End: -</example> - -<item> -Edit/create <tt>debian/control</>: -<list compact> -<item> -Remove the <tt/Version/ field. If it is generated unusually (not -equal to the source version) you must use the -v option to -dpkg-gencontrol (see below). <tt/Section/, <tt/Priority/, -<tt/Maintainer/ go above the first blank line, most of the rest below. - -<item> -Reorder the fields and add a blank line at an appropriate point, -separating the source package fields from the binary package -fields. - -<item> -Add the <tt/Source/ field. - -<item> -Add the <tt/Standards-Version/ field. The current value is -<tt/&manuals-version;/. - -<item> -Change the <tt/Architecture/ field for each package to <tt/any/, -<tt/all/ or whatever. If there isn't an <tt/Architecture/ field add -one. - -<item> -If any other seddery or things used to happen to make the binary -control files use <prgn/dpkg-gencontrol/'s variable substitution -features to achieve the same effect. Use <tt>debian/substvars</> if -you need to put unusally-generated information (apart from details of -<tt/.deb/ files) in the <tt/.changes/ file too. -</list> - -<item> -Edit the <tt>debian/rules</>: -<list compact> -<item> -Remove the <prgn/source/ and <prgn/diff/ and any <prgn/changes/ and -<prgn/dist/ targets. These things now happen in a package-independent -way and are not done by <tt>debian/rules</>. -<item> -Split the <prgn/binary/ target into <prgn/binary-arch/ and -<prgn/binary-indep/; in many cases all of <prgn/binary/ should go into -<prgn/binary-arch/. Create the <prgn/binary/ target and the unused of -the two other <prgn/binary-*/ targets if there is one - you can copy -the ones from the <prgn/hello/ package. -<item> -Change the <prgn/binary/ target to use <prgn/dpkg-gencontrol/ to make -the package control file(s). Move it to after all the files have been -installed but just before the last <prgn/chown/ and <prgn/chmod/ in -the target. -<item> -Change occurrences of <tt/debian-tmp/ to <tt>debian/tmp</>. -<item> -Change occurrences of <tt/debian.{post,pre}{inst,rm}/ to -<tt>debian/*</>. -<item> -Remove the version number setting at the top, if there is one. -<item> -Ensure that the package's Debian-specific and upstream changelogs are -installed. -</list> - -<item> -Change the package to use <prgn/dpkg-shlibdeps/ to determine its -shared library dependencies and substitute them in. Shared library -dependencies should no longer be hardwired in the source package. - -<item> -Check that the <tt>debian/README</> is really the copyright file, and -if so rename it to <tt>debian/copyright</> and edit -<tt>debian/rules</> to cope with this and to change the installation -of the copyright file from <tt>/usr/doc/<var/package//copyright</> -instead of <tt>/usr/doc/copyright/<var/package/</>. If it isn't then -find <tt>debian/copyright</> and decide what to do with the -<tt>README</>. - -<item> -Check for various other anachronisms and problems: -<list compact> -<item> -Remove any <tt/Package_Revision/, <tt/Package-Revision/ or -<tt/Revision/ fields. -<item> -Rename <tt/Optional/ to <tt/Suggests/, <tt/Recommended/ to -<tt/Recommends/. -<item> -Change <tt>/usr/doc/examples/<var/package/</> to -<tt>/usr/doc/<var/package//examples</>. -<item> -Make sure that manpages are installed compressed. -<item> -Check that the description has an extended description, is -well-formatted and meaningful and helpful to people wanting to know -whether to install a package. -</list> - -<item> -Look everything over. - -<item> -Do a test build using <tt/dpkg-buildpackage -ur -uc -sa --r<var/whatever//. Check the permissions and locations of files in -the resulting package by eyeballing the output of <tt/dpkg-deb ---contents/, and check that the source build happened OK. Test -install the binary package(s) and test extract the source package(s). - -<item> -Sign the release: either rebuild everything with <tt/dpkg-buildpackage --sa/, or PGP-sign the <tt/.dsc/, rebuild the <tt/.changes/ using -<tt/dpkg-genchanges -sa/, and then PGP-sign the <tt/.changes/. - -</list> -<p> - -The use of <tt/-sa/ on <prgn/dpkg-buildpackage/ and -<prgn/dpkg-genchanges/ is important when doing the first -build/uploading of a new-format source package. Unless this happens -to be Debian revision <tt/0/ or <tt/1/ by default the original source -tarfile will not be included in the uploaded files listed in the -<tt/.changes/ file, and so it won't be installed on the FTP site. -<tt/-sa/ requests that the original source be included regardless. - -</book> diff --git a/doc/programmer.sgml b/doc/programmer.sgml deleted file mode 100644 index 0dcd867b3..000000000 --- a/doc/programmer.sgml +++ /dev/null @@ -1,3370 +0,0 @@ -<!doctype debiandoc system [ -<!entity % manuals-version-def system "manuals-version"> -%manuals-version-def; -]> - -<!-- - Debian Linux dpkg package installation tool. - programmers' manual. - Copyright (C)1996 Ian Jackson; released under the terms of the GNU - General Public License, version 2 or (at your option) any later. - --> - -<book> - -<title><prgn/dpkg/ programmers' manual -<author>Ian Jackson <email/ijackson@gnu.ai.mit.edu/ -<version>version &manuals-version; (dpkg &dpkg-version;), <date> - -<abstract> -This manual describes the technical aspects of creating Debian binary -and source packages. It also documents the interface between -<prgn/dselect/ and its access method scripts. It does not deal with -the Debian Project policy requirements, and it assumes familiarity -with <prgn/dpkg/'s functions from the system administrator's -perspective. - -<copyright>Copyright ©1996 Ian Jackson. -<p> - -This manual is free software; you may redistribute it and/or modify it -under the terms of the GNU General Public License as published by the -Free Software Foundation; either version 2, or (at your option) any -later version. -<p> - -This is distributed in the hope that it will be useful, but -<em>without any warranty</em>; without even the implied warranty of -merchantability or fitness for a particular purpose. See the GNU -General Public License for more details. -<p> - -You should have received a copy of the GNU General Public License with -your Debian GNU/Linux system, in <tt>/usr/doc/copyright/GPL</tt>, or -with the <prgn/dpkg/ source package as the file <tt>COPYING</tt>. If -not, write to the Free Software Foundation, Inc., 675 Mass Ave, -Cambridge, MA 02139, USA. - -<toc sect> - -<!-- Describes the technical interface between a package and dpkg. - -How to safely put shared libraries in a package. Details of dpkg's -handling of individual files. Sections on when to use which feature -(eg Replaces vs. Replaces/Conflicts vs. update-alternatives -vs. diversions) Cross-references to the policy document (see below) -where appropriate. Description of the interface between dselect and -its access methods. Hints on where to start with a new package (ie, -the hello package). What to do about file aliasing. - -file aliasing - -Manpages are required for: update-rc.d, diversions, -update-alternatives, install-info in a package. - ---> - -<chapt id="scope">Introduction and scope of this manual -<p> - -<prgn/dpkg/ is a suite of programs for creating binary package files -and installing and removing them on Unix systems.<footnote><prgn/dpkg/ -is targetted primarily at Debian GNU/Linux, but may work on or be -ported to other systems.</footnote> -<p> - -The binary packages are designed for the management of installed -executable programs (usually compiled binaries) and their associated -data, though source code examples and documentation are provided as -part of some packages. -<p> - -This manual describes the technical aspects of creating Debian binary -packages (<tt/.deb/ files). It documents the behaviour of the -package management programs <prgn/dpkg/, <prgn/dselect/ et al. and and the -way they interact with packages. -<p> - -It also documents the interaction between <prgn/dselect/'s core and the -access method scripts it uses to actually install the selected -packages, and describes how to create a new access method. -<p> - -This manual does not go into detail about the options and usage of the -package building and installation tools. It should therefore be read -in conjuction with those programs' manpages. -<p> - -The utility programs which are provided with <prgn/dpkg/ for managing -various system configuration and similar issues, such as -<prgn/update-rc.d/ and <prgn/install-info/, are not described in -detail here - please see their manpages. -<p> - -It does <em/not/ describe the policy requirements imposed on Debian -packages, such as the permissions on files and directories, -documentation requirements, upload procedure, and so on. You should -see the Debian packaging policy manual for these details. (Many of -them will probably turn out to be helpful even if you don't plan to -upload your package and make it available as part of the -distribution.) -<p> - -It is assumed that the reader is reasonably familiar with the -<prgn/dpkg/ System Administrators' manual. Unfortunately this manual -does not yet exist. -<p> - -The Debian version of the FSF's GNU hello program is provided as an -example for people wishing to create Debian packages. -<p> - -<em>Note that this document is still a draft!</em> - -<chapt id="binarypkg">Binary packages -<p> - -The binary package has two main sections. The first part consists of -various control information files and scripts used by <prgn/dpkg/ when -installing and removing. See <ref id="controlarea">. -<p> - -The second part is an archive (currently a <prgn/tar/ archive) -containing files and directories to be installed. -<p> - -In the future binary packages may also contain other components, such -as checksums and digital signatures. - - -<sect id="bincreating">Creating package files - <prgn/dpkg-deb/ -<p> - -All manipulation of binary package files is done by <prgn/dpkg-deb/; -it's the only program that has knowledge of the format. -(<prgn/dpkg-deb/ may be invoked by calling <prgn/dpkg/, as <prgn/dpkg/ will -spot that the options requested are appropriate to <prgn/dpkg-deb/ and -invoke that instead with the same arguments.) -<p> - -In order to create a binary package you must make a directory tree -which contains all the files and directories you want to have in the -filesystem data part of the package. In Debian-format source packages -this directory is usually <tt>debian/tmp</tt>, relative to the top of -the package's source tree. -<p> - -They should have the locations (relative to the root of the directory -tree you're constructing) ownerships and permissions which you want -them to have on the system when they are installed. -<p> - -With current versions of <prgn/dpkg/ the uid/username and gid/groupname -mappings for the users and groups being used should be the same on the -system where the package is built and the one where it is installed. -<p> - -You need to add one special directory to the root of the miniature -filesystem tree you're creating: <prgn/DEBIAN/. It should contain the -control information files, notably the binary package control file -(see <ref id="controlfile">). -<p> - -The <prgn/DEBIAN/ directory will not appear in the filesystem archive of -the package, and so won't be installed by <prgn/dpkg/ when the package -is installed. -<p> - -When you've prepared the package, you should invoke: -<example> -dpkg --build <var/directory/ -</example> -<p> - -This will build the package in <tt/<var/directory/.deb/. -(<prgn/dpkg/ knows that <tt/--build/ is a <prgn/dpkg-deb/ option, so it -invokes <prgn/dpkg-deb/ with the same arguments to build the package.) -<p> - -See the manpage <manref name="dpkg-deb" section=8> for details of how -to examine the contents of this newly-created file. You may find the -output of following commands enlightening: -<example> -dpkg-deb --info <var/filename/.deb -dpkg-deb --contents <var/filename/.deb -</example> - -<sect id="controlarea">Package control information files -<p> - -The control information portion of a binary package is a collection of -files with names known to <prgn/dpkg/. It will treat the contents of -these files specially - some of them contain information used by -<prgn/dpkg/ when installing or removing the package; others are scripts -which the package maintainer wants <prgn/dpkg/ to run. -<p> - -It is possible to put other files in the package control area, but -this is not generally a good idea (though they will largely be -ignored). -<p> - -Here is a brief list of the control info files supported by <prgn/dpkg/ -and a summary of what they're used for. -<p> - -<taglist> -<tag><tt/control/ -<item> - -This is the key description file used by <prgn/dpkg/. It specifies the -package's name and version, gives its description for the user, states -its relationships with other packages, and so forth. -See <ref id="controlfile">. -<p> - -It is usually generated automatically from information in the source -package by the <prgn/dpkg-gencontrol/ program, and with assistance -from <prgn/dpkg-shlibdeps/. See <ref id="sourcetools">. - -<tag><tt/postinst/, <tt/preinst/, <tt/postrm/, <tt/prerm/ -<item> - -These are exectuable files (usually scripts) which <prgn/dpkg/ runs -during installation, upgrade and removal of packages. They allow the -package to deal with matters which are particular to that package or -require more complicated processing than that provided by <prgn/dpkg/. -Details of when and how they are called are in -<ref id="maintainerscripts">. -<p> - -It is very important to make these scripts itempotent.<footnote>That -means that if it runs successfully or fails and then you call it again -it doesn't bomb out, but just ensures that everything is the way it -ought to be.</footnote> This is so that if an error occurs, the user -interrupts <prgn/dpkg/ or some other unforeseen circumstance happens you -don't leave the user with a badly-broken package. -<p> - -The maintainer scripts are guaranteed to run with a controlling -terminal and can interact with the user. If they need to prompt for -passwords, do full-screen interaction or something similar you should -do these things to and from <tt>/dev/tty</>, since <prgn/dpkg/ will at -some point redirect scripts' standard input and output so that it can -log the installation process. Likewise, because these scripts may be -executed with standard output redirected into a pipe for logging -purposes, Perl scripts should set unbuffered output by setting -<tt/$|=1/ so that the output is printed immediately rather than being -buffered. -<p> - -Each script should return a zero exit status for success, or a nonzero -one for failure. - -<tag><tt/conffiles/ -<item> - -This file contains a list of configuration files which are to be -handled automatically by <prgn/dpkg/ (see <ref id="conffiles">). Note -that not necessarily every configuration file should be listed here. - -<tag><tt/shlibs/ -<item> - -This file contains a list of the shared libraries supplied by the -package, with dependency details for each. This is used by -<prgn/dpkg-shlibdeps/ when it determines what dependencies are -required in a package control file. -<p> - -Each line is of the form: -<example> -<var/library-name/ <var/version-or-soname/ <var/dependencies .../ -</example> -<p> - -<var/library-name/ is the name of the shared library, for example -<tt/libc5/. -<p> - -<var/version-or-soname/ is the soname of the library - ie, the thing -that must exactly match for the library to be recognised by -<prgn/ld.so/. Usually this is major version number of the library. -<p> - -<var/dependencies/ has the same syntax as a dependency field in a -binary package control file. It should give details of which -package(s) are required to satisfy a binary built against the version -of the library contained in the package. See <ref id="depsyntax">. -<p> - -For example, if the package <tt/foo/ contains <tt/libfoo.so.1.2.3/, -where the soname of the library is <tt/libfoo.so.1/, and the first -version of the package which contained a minor number of at least -<tt/2.3/ was <var/1.2.3-1/, then the package's <var/shlibs/ could -say: -<example> -libfoo 1 foo (>= 1.2.3-1) -</example> -<p> - -The version-specific dependency is to avoid warnings from <prgn/ld.so/ -about using older shared libraries with newer binaries. - -</taglist> - -<sect id="controlfile">The main control information file: <tt/control/ -<p> - -The most important control information file used by <prgn/dpkg/ when it -installs a package is <tt/control/. It contains all the package's -`vital statistics'. -<p> - -The binary package control files of packages built from Debian sources -are made by a special tool, <prgn/dpkg-gencontrol/, which reads -<tt>debian/control</> and <tt>debian/changelog</> to find the -information it needs. See <ref id="sourcepkg"> for more details. -<p> - -The fields in binary package control files are: -<list compact> - -<item><qref id="f-Package"><tt/Package/</> (mandatory) -<item><qref id="versions"><tt/Version/</> (mandatory) - -<item><qref id="f-Architecture"><tt/Architecture/</> -(mandatory)<footnote>This field should appear in all packages, though -<prgn/dpkg/ doesn't require it yet so that old packages can still be -installed.</footnote> - -<item><qref id="relationships"><tt/Depends/, <tt/Provides/ et al.</> -<item><qref id="f-Essential"><tt/Essential/</> -<item><qref id="f-Maintainer"><tt/Maintainer/</> -<item><qref id="f-classification"><tt/Section/, <tt/Priority/</> -<item><qref id="f-Source"><tt/Source/</> -<item><qref id="descriptions"><tt/Description/</> -<item><qref id="f-Installed-Size"><tt/Installed-Size/</> - -</list> -<p> - -A description of the syntax of control files and the purpose of these -fields is available in <ref id="controlfields">. - - -<chapt id="sourcepkg">Source packages -<p> - -The Debian binary packages in the distribution are generated from -Debian sources, which are in a special format to assist the easy and -automatic building of binaries. -<p> - -There was a previous version of the Debian source format, which is now -being phased out. Instructions for converting an old-style package -are given in the Debian policy manual. - -<sect id="sourcetools">Tools for processing source packages -<p> - -Various tools are provided for manipulating source packages; they pack -and unpack sources and help build of binary packages and help manage -the distribution of new versions. -<p> - -They are introduced and typical uses described here; see <manref -name=dpkg-source section=1> for full documentation about their -arguments and operation. -<p> - -For examples of how to construct a Debian source package, and how to -use those utilities that are used by Debian source packages, please -see the <prgn/hello/ example package. - -<sect1><prgn/dpkg-source/ - packs and unpacks Debian source packages -<p> - -This program is frequently used by hand, and is also called from -package-independent automated building scripts such as -<prgn/dpkg-buildpackage/. -<p> - -To unpack a package it is typically invoked with -<example> -dpkg-source -x <var>.../path/to/filename</>.dsc -</example> -with the <tt/<var/filename/.tar.gz/ and -<tt/<var/filename/.diff.gz/ (if applicable) in the same directory. It -unpacks into <tt/<var/package/-<var/version//, and if applicable -<tt/<var/package/-<var/version/.orig/, in the current directory. -<p> - -To create a packed source archive it is typically invoked: -<example> -dpkg-source -b <var/package/-<var/version/ -</example> -This will create the <tt/.dsc/, <tt/.tar.gz/ and <tt/.diff.gz/ (if -appropriate) in the current directory. <prgn/dpkg-source/ does not -clean the source tree first - this must be done separately if it is -required. -<p> - -See also <ref id="sourcearchives">. - - -<sect1><prgn/dpkg-buildpackage/ - overall package-building control -script -<p> - -<prgn/dpkg-buildpackage/ is a script which invokes <prgn/dpkg-source/, -the <tt>debian/rules</> targets <prgn/clean/, <prgn/build/ and -<prgn/binary/, <prgn/dpkg-genchanges/ and <prgn/pgp/ to build a signed -source and binary package upload. -<p> - -It is usually invoked by hand from the top level of the built or -unbuilt source directory. It may be invoked with no arguments; useful -arguments include: -<taglist compact> -<tag><tt/-uc/, <tt/-us/ -<item>Do not PGP-sign the <tt/.changes/ file or the source package -<tt/.dsc/ file, respectively. - -<tag><tt/-p<var/pgp-command// -<item>Invoke <var/pgp-command/ instead of finding <tt/pgp/ on the -<prgn/PATH/. <var/pgp-command/ must behave just like <prgn/pgp/. - -<tag><tt/-r<var/root-command// -<item>When root privilege is required, invoke the command -<var/root-command/. <var/root-command/ should invoke its first -argument as a command, from the <prgn/PATH/ if necessary, and pass its -second and subsequent arguments to the command it calls. If no -<var/root-command/ is supplied then <var/dpkg-buildpackage/ will take -no special action to gain root privilege, so that for most packages it -will have to be invoked as root to start with. - -<tag><tt/-b/, <tt/-B/ -<item>Two types of binary-only build and upload - see <manref -name=dpkg-source section=1>. -</taglist> - - -<sect1><prgn/dpkg-gencontrol/ - generates binary package control files -<p> - -This program is usually called from <tt>debian/rules</> (see <ref -id="sourcetree">) in the top level of the source tree. -<p> - -This is usually done just before the files and directories in the -temporary directory tree where the package is being built have their -permissions and ownerships set and the package is constructed using -<prgn/dpkg-deb/<footnote>This is so that the control file which is -produced has the right permissions</footnote>. -<p> - -<prgn/dpkg-gencontrol/ must be called after all the files which are to -go into the package have been placed in the temporary build directory, -so that its calculation of the installed size of a package is correct. -<p> - -It is also necessary for <prgn/dpkg-gencontrol/ to be run after -<prgn/dpkg-shlibdeps/ so that the variable substitutions created by -<prgn/dpkg-shlibdeps/ in <tt>debian/substvars</> are available. -<p> - -For a package which generates only one binary package, and which -builds it in <tt>debian/tmp</> relative to the top of the source -package, it is usually sufficient to call: -<example> -dpkg-gencontrol -</example> -<p> - -Sources which build several binaries will typically need something -like: -<example> -dpkg-gencontrol -Pdebian/tmp-<var/pkg/ -p<var/package/ -</example> -The <tt/-P/ tells <prgn/dpkg-gencontrol/ that the package is being -built in a non-default directory, and the <tt/-p/ tells it which -package's control file should be generated. -<p> - -<prgn/dpkg-gencontrol/ also adds information to the list of files in -<tt>debian/files</>, for the benefit of (for example) a future -invocation of <prgn/dpkg-genchanges/. - - -<sect1><prgn/dpkg-shlibdeps/ - calculates shared library dependencies -<p> - -This program is usually called from <tt>debian/rules</> just before -<prgn/dpkg-gencontrol/ (see <ref id="sourcetree">), in the top level -of the source tree. -<p> - -Its arguments are executables<footnote>They may be specified either -in the locations in the source tree where they are created or in the -locations in the temporary build tree where they are installed prior -to binary package creation.</footnote> for which shared library -dependencies should be included in the binary package's control file. -<p> - -If some of the executable(s) shared libraries should only warrant a -<tt/Recommends/ or <tt/Suggests/, or if some warrant a -<tt/Pre-Depends/, this can be achieved by using the -<tt/-d<var/dependency-field// option before those executable(s). -(Each <tt/-d/ option takes effect until the next <tt/-d/.) -<p> - -<prgn/dpkg-shlibdeps/ does not directly cause the output control file -to be modified. Instead by default it adds to the -<tt>debian/substvars</> file variable settings like -<tt/shlibs:Depends/. These variable settings must be referenced in -dependency fields in the appropriate per-binary-package sections of -the source control file. -<p> - -For example, the <prgn/procps/ package generates two kinds of -binaries, simple C binaries like <prgn/ps/ which require a -predependency and full-screen ncurses binaries like <prgn/top/ which -require only a recommendation. It can say in its <tt>debian/rules</>: -<example> -dpkg-shlibdeps -dPre-Depends ps -dRecommends top -</example> -and then in its main control file <tt>debian/control</>: -<example> -<var/.../ -Package: procps -Pre-Depends: ${shlibs:Pre-Depends} -Recommends: ${shlibs:Recommends} -<var/.../ -</example> -<p> - -Sources which produce several binary packages with different shared -library dependency requirements can use the <tt/-p<var/varnameprefix// -option to override the default <tt/shlib:/ prefix (one invocation of -<prgn/dpkg-shlibdeps/ per setting of this option). They can thus -produce several sets of dependency variables, each of the form -<tt/<var/varnameprefix/:<var/dependencyfield//, which can be referred -to in the appropriate parts of the binary package control files. - - -<sect1><prgn/dpkg-distaddfile/ - adds a file to <tt>debian/files</> -<p> - -Some packages' uploads need to include files other than the source and -binary package files. -<p> - -<prgn/dpkg-distaddfile/ adds a file to the <tt>debian/files</> file so -that it will be included in the <tt/.changes/ file when -<prgn/dpkg-genchanges/ is run. -<p> - -It is usually invoked from the <prgn/binary/ target of -<tt>debian/rules</>: -<example> -dpkg-distaddfile <var/filename/ <var/section/ <var/priority/ -</example> -The <var/filename/ is relative to the directory where -<prgn/dpkg-genchanges/ will expect to find it - this is usually the -directory above the top level of the source tree. The -<tt>debian/rules</> target should put the file there just before or -just after calling <prgn/dpkg-distaddfile/. -<p> - -The <var/section/ and <var/priority/ are passed unchanged into the -resulting <tt/.changes/ file. See <ref id="f-classification">. - - -<sect1><prgn/dpkg-genchanges/ - generates a <tt/.changes/ upload -control file -<p> - -This program is usually called by package-independent automatic -building scripts such as <prgn/dpkg-buildpackage/, but it may also be -called by hand. -<p> - -It is usually called in the top level of a built source tree, and when -invoked with no arguments will print out a straightforward -<tt/.changes/ file based on the information in the source package's -changelog and control file and the binary and source packages which -should have been built. - - -<sect1><prgn/dpkg-parsechangelog/ - produces parsed representation of -a changelog -<p> - -This program is used internally by <prgn/dpkg-source/ et al. It may -also occasionally be useful in <tt>debian/rules</> and elsewhere. It -parses a changelog, <tt>debian/changelog</> by default, and prints a -control-file format representation of the information in it to -standard output. - -<sect id="sourcetree">The Debianised source tree -<p> - -The source archive scheme described later is intended to allow a -Debianised source tree with some associated control information to be -reproduced and transported easily. The Debianised source tree is a -version of the original program with certain files added for the -benefit of the Debianisation process, and with any other changes -required made to the rest of the source code and installation scripts. -<p> - -The extra files created for Debian are in the subdirectory <tt/debian/ -of the top level of the Debianised source tree. They are described -below. - -<sect1><tt>debian/rules</tt> - the main building script -<p> - -This file is an executable makefile, and contains the package-specific -recipies for compiling the package and building binary package(s) out -of the source. -<p> - -It must start with the line <tt>#!/usr/bin/make -f</tt>, so that it -can be invoked by saying its name rather than invoking <prgn/make/ -explicitly. -<p> - -The targets which are required to be present are: - -<taglist> -<tag/<tt/build// -<item> - -This should perform all non-interactive configuration and compilation -of the package. If a package has an interactive pre-build -configuration routine, the Debianised source package should be built -after this has taken place, so that it can be built without rerunning -the configuration. -<p> - -For some packages, notably ones where the same source tree is compiled -in different ways to produce two binary packages, the <prgn/build/ -target does not make much sense. For these packages it is good enough -to provide two (or more) targets (<tt/build-a/ and <tt/build-b/ or -whatever) for each of the ways of building the package, and a -<prgn/build/ target that does nothing. The <prgn/binary/ target will have -to build the package in each of the possible ways and make the binary -package out of each. -<p> - -The <prgn/build/ target must not do anything that might require root -privilege. -<p> - -The <prgn/build/ target may need to run <prgn/clean/ first - see below. -<p> - -When a package has a configuration routine that takes a long time, or -when the makefiles are poorly designed, or when <prgn/build/ needs to -run <prgn/clean/ first, it is a good idea to <tt/touch build/ when the -build process is complete. This will ensure that if <tt>debian/rules -build</tt> is run again it will not rebuild the whole program. - -<tag/<tt/binary/, <tt/binary-arch/, <tt/binary-indep/ -<item> - -The <prgn/binary/ target should be all that is necessary for the user -to build the binary package. It is split into two parts: -<prgn/binary-arch/ builds the packages' output files which are -specific to a particular architecture, and <prgn/binary-indep/ -builds those which are not. -<p> - -<prgn/binary/ should usually be a target with no commands which simply -depends on <prgn/binary-arch/ and <prgn/binary-indep/. -<p> - -Both <prgn/binary-*/ targets should depend on the <prgn/build/ target, -above, so that the package is built if it has not been already. It -should then create the relevant binary package(s), using -<prgn/dpkg-gencontrol/ to make their control files and <prgn/dpkg-deb/ -to build them and place them in the parent of the top level directory. -<p> - -If one of the <prgn/binary-*/ targets has nothing to do (this will be -always be the case if the source generates only a single binary -package, whether architecture-dependent or not) it <em/must/ still -exist, but should always succeed. -<p> - -<ref id="binarypkg"> describes how to construct binary packages. -<p> - -The <prgn/binary/ targets must be invoked as root. - -<tag/<tt/clean// -<item> - -This should undo any effects that the <prgn/build/ and <prgn/binary/ -targets may have had, except that it should leave alone any output -files created in the parent directory by a run of <prgn/binary/. -<p> - -If a <prgn/build/ file is touched at the end of the <prgn/build/ target, -as suggested above, it must be removed as the first thing that -<prgn/clean/ does, so that running <prgn/build/ again after an interrupted -<prgn/clean/ doesn't think that everything is already done. -<p> - -The <prgn/clean/ target must be invoked as root if <prgn/binary/ has -been invoked since the last <prgn/clean/, or if <prgn/build/ has been -invoked as root (since <prgn/build/ may create directories, for -example). - -<tag/<tt/get-orig-source// -<item> - -This target fetches the most recent version of the original source -package from a canonical archive site (via FTP or WWW, for example), -does any necessary rearrangement to turn it into the original source -tarfile format described below, and leaves it in the current directory. -<p> - -This target may be invoked in any directory, and should take care to -clean up any temporary files it may have left. -<p> - -This target is optional, but providing it if possible is a good idea. - -</taglist> - -The <prgn/build/, <prgn/binary/ and <prgn/clean/ targets must be -invoked with a current directory of the package's top-level -directory. - -<p> - -Additional targets may exist in <tt>debian/rules</tt>, either as -published or undocumented interfaces or for the package's internal -use. - - -<sect1><tt>debian/control</tt> -<p> - -This file contains version-independent details about the source -package and about the binary packages it creates. -<p> - -It is a series of sets of control fields, each syntactically similar -to a binary package control file. The sets are separated by one or -more blank lines. The first set is information about the source -package in general; each subsequent set describes one binary package -that the source tree builds. -<p> - -The syntax and semantics of the fields are described below in -<ref id="controlfields">. -<p> - -The general (binary-package-independent) fields are: -<list compact> -<item><qref id="f-Source"><tt/Source/</> (mandatory) -<item><qref id="f-Maintainer"><tt/Maintainer/</> -<item><qref id="f-classification"><tt/Section/ and <tt/Priority/</> -(classification, mandatory) -<item><qref id="f-Standards-Version"><tt/Standards-Version/</> -</list> -<p> - -The per-binary-package fields are: -<list compact> -<item><qref id="f-Package"><tt/Package/</> (mandatory) -<item><qref id="f-Architecture"><tt/Architecture/</> (mandatory) -<item><qref id="descriptions"><tt/Description/</> -<item><qref id="f-classification"><tt/Section/ and <tt/Priority/</> (classification) -<item><qref id="f-Essential"><tt/Essential/</> -<item><qref id="relationships"><tt/Depends/ et al.</> (package interrelationships) -</list> -<p> - -These fields are used by <prgn/dpkg-gencontrol/ to generate control -files for binary packages (see below), by <prgn/dpkg-genchanges/ to -generate the <tt/.changes/ file to accompany the upload, and by -<prgn/dpkg-source/ when it creates the <tt/.dsc/ source control file as -part of a source archive. -<p> - -The fields here may contain variable references - their values will be -substituted by <prgn/dpkg-gencontrol/, <prgn/dpkg-genchanges/ or -<prgn/dpkg-source/ when they generate output control files. See <ref -id="srcsubstvars"> for details. -<p> - -<sect2>User-defined fields -<p> - -Additional user-defined fields may be added to the source package -control file. Such fields will be ignored, and not copied to (for -example) binary or source package control files or upload control -files. -<p> - -If you wish to add additional unsupported fields to these output files -you should use the mechanism described here. -<p> - -Fields in the main source control information file with names starting -<tt/X/, followed by one or more of the letters <tt/BCS/ and a hyphen -<tt/-/, will be copied to the output files. Only the part of the -field name after the hyphen will be used in the output file. Where -the letter <tt/B/ is used the field will appear in binary package -control files, where the letter <tt/S/ is used in source package -control files and where <tt/C/ is used in upload control -(<tt/.changes/) files. -<p> - -For example, if the main source information control file contains the -field -<example> -XBS-Comment: I stand between the candle and the star. -</example> -then the binary and source package control files will contain the -field -<example> -Comment: I stand between the candle and the star. -</example> - -<sect1 id="dpkgchangelog"><tt>debian/changelog</> -<p> - -This file records the changes to the Debian-specific parts of the -package<footnote>Though there is nothing stopping an author who is -also the Debian maintainer from using it for all their changes, it -will have to be renamed if the Debian and upstream maintainers become -different people.</footnote>. -<p> - -It has a special format which allows the package building tools to -discover which version of the package is being built and find out -other release-specific information. -<p> - -That format is a series of entries like this: -<example> -<var/package/ (<var/version/) <var/distribution(s)/; urgency=<var/urgency/ - - * <var/change details/ - <var/more change details/ - * <var/even more change details/ - - -- <var/maintainer name and email address/ <var/date/ -</example> -<p> - -<var/package/ and <var/version/ are the source package name and -version number. <var/distribution(s)/ lists the distributions where -this version should be installed when it is uploaded - it is copied to -the <tt/Distribution/ field in the <tt/.changes/ file. See <ref -id="f-Distribution">. -<p> - -<var/urgency/ is the value for the <tt/Urgency/ field in the -<tt/.changes/ file for the upload. See <ref id="f-Urgency">. It is -not possible to specify an urgency containing commas; commas are used -to separate <tt/<var/keyword/=<var/value// settings in the <prgn/dpkg/ -changelog format (though there is currently only one useful -<var/keyword/, <tt/urgency/). -<p> - -The change details may in fact be any series of lines starting with at -least two spaces, but conventionally each change starts with an -asterisk and a separating space and continuation lines are indented so -as to bring them in line with the start of the text above. Blank -lines may be used here to separate groups of changes, if desired. -<p> - -The maintainer name and email address should <em/not/ necessarily be -those of the usual package maintainer. They should be the details of -the person doing <em/this/ version. The information here will be -copied to the <tt/.changes/ file, and then later used to send an -acknowledgement when the upload has been installed. -<p> - -The <var/date/ should be in RFC822 format<footnote>This is generated -by the <prgn/822-date/ program.</footnote>; it should include the -timezone specified numerically, with the timezone name or abbreviation -optionally present as a comment. -<p> - -The first `title' line with the package name should start at the left -hand margin; the `trailer' line with the maintainer and date details -should be preceded by exactly one space. The maintainer details and -the date must be separated by exactly two spaces. -<p> - -An Emacs mode for editing this format is available: it is called -<tt/debian-changelog-mode/. You can have this mode selected -automatically when you edit a Debian changelog by adding a local -variables clause to the end of the changelog. - -<sect2>Defining alternative changelog formats -<p> - -It is possible to use a different format to the standard one, by -providing a parser for the format you wish to use. -<p> - -In order to have <tt/dpkg-parsechangelog/ run your parser, you must -include a line within the last 40 lines of your file matching the Perl -regular expression: -<tt>\schangelog-format:\s+([0-9a-z]+)\W</tt> -The part in parentheses should be the name of the format. For -example, you might say: -<example> -@@@ changelog-format: joebloggs @@@ -</example> -Changelog format names are non-empty strings of alphanumerics. -<p> - -If such a line exists then <tt/dpkg-parsechangelog/ will look for the -parser as <tt>/usr/lib/dpkg/parsechangelog/<var/format-name/</> or -<tt>/usr/local/lib/dpkg/parsechangelog/<var/format-name/</>; it is an -error for it not to find it, or for it not to be an executable -program. The default changelog format is <tt/dpkg/, and a parser for -it is provided with the <tt/dpkg/ package. -<p> - -The parser will be invoked with the changelog open on standard input -at the start of the file. It should read the file (it may seek if it -wishes) to determine the information required and return the parsed -information to standard output in the form of a series of control -fields in the standard format. By default it should return -information about only the most recent version in the changelog; it -should accept a <tt/-v<var/version// option to return changes -information from all versions present <em/strictly after/ -<var/version/, and it should then be an error for <var/version/ not to -be present in the changelog. -<p> - -The fields are: -<list compact> -<item><qref id="f-Source"><tt/Source/</> -<item><qref id="versions"><tt/Version/</> (mandatory) -<item><qref id="f-Distribution"><tt/Distribution/</> (mandatory) -<item><qref id="f-Urgency"><tt/Urgency/</> (mandatory) -<item><qref id="f-Maintainer"><tt/Maintainer/</> (mandatory) -<item><qref id="f-Date"><tt/Date/</> -<item><qref id="f-Changes"><tt/Changes/</> (mandatory) -</list> -<p> - -If several versions are being returned (due to the use of <tt/-v/), -the urgency value should be of the highest urgency code listed at the -start of any of the versions requested followed by the concatenated -(space-separated) comments from all the versions requested; the -maintainer, version, distribution and date should always be from the -most recent version. -<p> - -For the format of the <tt/Changes/ field see <ref id="f-Changes">. -<p> - -If the changelog format which is being parsed always or almost always -leaves a blank line between individual change notes these blank lines -should be stripped out, so as to make the resulting output compact. -<p> - -If the changelog format does not contain date or package name -information this information should be omitted from the output. The -parser should not attempt to synthesise it or find it from other -sources. -<p> - -If the changelog does not have the expected format the parser should -exit with a nonzero exit status, rather than trying to muddle through -and possibly generating incorrect output. -<p> - -A changelog parser may not interact with the user at all. - -<sect1 id="srcsubstvars"><tt>debian/substvars</> and variable substitutions -<p> - -When <prgn/dpkg-gencontrol/, <prgn/dpkg-genchanges/ and -<prgn/dpkg-source/ generate control files they do variable -substitutions on their output just before writing it. Variable -substitutions have the form <tt/${<var/variable-name/}/. The optional -file <tt>debian/substvars</> contains variable substitutions to be -used; variables can also be set directly from <tt>debian/rules</> -using the <tt/-V/ option to the source packaging commands, and certain -predefined variables are available. -<p> - -The is usually generated and modified dynamically by -<tt>debian/rules</> targets; in this case it must be removed by the -<prgn/clean/ target. -<p> - - - -See <manref name=dpkg-source section=1> for full details about source -variable substitutions, including the format of -<tt>debian/substvars</>. - -<sect1><tt>debian/files</> -<p> - -This file is not a permanent part of the source tree; it is used while -building packages to record which files are being generated. -<prgn/dpkg-genchanges/ uses it when it generates a <tt/.changes/ file. -<p> - -It should not exist in a shipped source package, and so it (and any -backup files or temporary files such as -<tt/files.new/<footnote><tt/files.new/ is used as a temporary file by -<prgn/dpkg-gencontrol/ and <prgn/dpkg-distaddfile/ - they write a new -version of <tt/files/ here before renaming it, to avoid leaving a -corrupted copy if an error occurs</footnote>) should be removed by the -<prgn/clean/ target. It may also be wise to ensure a fresh start by -emptying or removing it at the start of the <prgn/binary/ target. -<p> - -<prgn/dpkg-gencontrol/ adds an entry to this file for the <tt/.deb/ -file that will be created by <prgn/dpkg-deb/ from the control file -that it generates, so for most packages all that needs to be done with -this file is to delete it in <prgn/clean/. -<p> - -If a package upload includes files besides the source package and any -binary packages whose control files were made with -<prgn/dpkg-gencontrol/ then they should be placed in the parent of the -package's top-level directory and <prgn/dpkg-distaddfile/ should be -called to add the file to the list in <tt>debian/files</>. - -<sect1><tt>debian/tmp</> -<p> - -This is the canonical temporary location for the construction of -binary packages by the <prgn/binary/ target. The directory <tt/tmp/ -serves as the root of the filesystem tree as it is being constructed -(for example, by using the package's upstream makefiles install -targets and redirecting the output there), and it also contains the -<tt/DEBIAN/ subdirectory. See <ref id="bincreating">. -<p> - -If several binary packages are generated from the same source tree it -is usual to use several <tt>debian/tmp<var/something/</> directories, -for example <tt/tmp-a/ or <tt/tmp-doc/. -<p> - -Whatever <tt>tmp</> directories are created and used by <prgn/binary/ -must of course be removed by the <prgn/clean/ target. - - -<sect id="sourcearchives">Source packages as archives -<p> - -As it exists on the FTP site, a Debian source package consists of -three related files. You must have the right versions of all three to -be able to use them. -<p> - -<taglist> -<tag/Debian source control file - <tt/.dsc// -<item> - -This file contains a series of fields, identified and separated just -like the fields in the control file of a binary package. The fields -are listed below; their syntax is described above, in -<ref id="controlfields">. -<list compact> -<item><qref id="f-Source"><tt/Source/</> -<item><qref id="versions"><tt/Version/</> -<item><qref id="f-Maintainer"><tt/Maintainer/</> -<item><qref id="f-Binary"><tt/Binary/</> -<item><qref id="f-Architecture"><tt/Architecture/</> -<item><qref id="f-Standards-Version"><tt/Standards-Version/</> -<item><qref id="f-Files"><tt/Files/</> -</list> -<p> - -The source package control file is generated by <prgn/dpkg-source/ -when it builds the source archive, from other files in the source -package, described above. When unpacking it is checked against the -files and directories in the other parts of the source package, as -described below. - -<tag/Original source archive - <tt/<var/package/_<var/upstream-version/.orig.tar.gz// -<item> - -This is a compressed (with <tt/gzip -9/) <prgn/tar/ file containing -the source code from the upstream authors of the program. The tarfile -unpacks into a directory -<tt/<var/package/-<var/upstream-version/.orig/, and does not contain -files anywhere other than in there or in its subdirectories. - -<tag/Debianisation diff - <tt/<var/package/_<var/version-revision/.diff.gz// -<item> - -This is a unified context diff (<tt/diff -u/) giving the changes which -are required to turn the original source into the Debian source. -These changes may only include editing and creating plain files. The -permissions of files, the targets of symbolic links and the -characteristics of special files or pipes may not be changed and no -files may be removed or renamed. -<p> - -All the directories in the diff must exist, except the <tt/debian/ -subdirectory of the top of the source tree, which will be created by -<prgn/dpkg-source/ if necessary when unpacking. -<p> - -The <prgn/dpkg-source/ program will automatically make the -<tt>debian/rules</tt> file executable (see below). - -</taglist> -<p> - -If there is no original source code - for example, if the package is -specially prepared for Debian or the Debian maintainer is the same as -the upstream maintainer - the format is slightly different: then there -is no diff, and the tarfile is named -<tt/<var/package/_<var/version/.tar.gz</> and contains a directory -<tt/<var/package/-<var/version/</>. - -<sect>Unpacking a Debian source package without <prgn/dpkg-source/ -<p> - -<tt/dpkg-source -x/ is the recommended way to unpack a Debian source -package. However, if it is not available it is possible to unpack a -Debian source archive as follows: - -<enumlist compact> -<item>Untar the tarfile, which will create a <tt/.orig/ directory. -<item>Rename the <tt/.orig/ directory to -<tt/<var/package/-<var/version//. -<item>Create the subdirectory <tt/debian/ at the top of the source -tree. -<item>Apply the diff using <tt/patch -p0/. -<item>Untar the tarfile again if you want a copy of the original -source code alongside the Debianised version. -</enumlist> -<p> - -It is not possible to generate a valid Debian source archive without -using <prgn/dpkg-source/. In particular, attempting to use -<prgn/diff/ directly to generate the <tt/.diff.gz/ file will not work. - -<sect1>Restrictions on objects in source packages -<p> - -The source package may not contain any hard links<footnote>This is not -currently detected when building source packages, but only when -extracting them.</footnote><footnote>Hard links may be permitted at -some point in the future, but would require a fair amount of -work.</footnote>, device special files, sockets or setuid or setgid -files.<footnote>Setgid directories are allowed.</footnote> -<p> - -The source packaging tools manage the changes between the original and -Debianised source using <prgn/diff/ and <prgn/patch/. Turning the -original source tree as included in the <tt/.orig.tar.gz/ into the -debianised source must not involve any changes which cannot be handled -by these tools. Problematic changes which cause <prgn/dpkg-source/ to -halt with an error when building the source package are: -<list compact> -<item>Adding or removing symbolic links, sockets or pipes. -<item>Changing the targets of symbolic links. -<item>Creating directories, other than <tt/debian/. -<item>Changes to the contents of binary files. -</list> -Changes which cause <prgn/dpkg-source/ to print a warning but continue -anyway are: -<list compact> -<item>Removing files, directories or symlinks. <footnote>Renaming a -file is not treated specially - it is seen as the removal of the old -file (which generates a warning, but is otherwise ignored), and the -creation of the new one.</footnote> -<item>Changed text files which are missing the usual final newline -(either in the original or the modified source tree). -</list> -Changes which are not represented, but which are not detected by -<prgn/dpkg-source/, are: -<list compact> -<item>Changing the permissions of files (other than -<tt>debian/rules</>) and directories. -</list> -<p> - -The <tt/debian/ directory and <tt>debian/rules</> are handled -specially by <prgn/dpkg-source/ - before applying the changes it will -create the <tt/debian/ directory, and afterwards it will make -<tt>debian/rules</> world-exectuable. - -<chapt id="controlfields">Control files and their fields -<p> - -Many of the tools in the <prgn/dpkg/ suite manipulate data in a common -format, known as control files. Binary and source packages have -control data as do the <tt/.changes/ files which control the -installation of uploaded files, and <prgn/dpkg/'s internal databases -are in a similar format. - -<sect>Syntax of control files -<p> - -A file consists of one or more paragraphs of fields. The paragraphs -are separated by blank lines. Some control files only allow one -paragraph; others allow several, in which case each paragraph often -refers to a different package. -<p> - -Each paragraph is a series of fields and values; each field consists -of a name, followed by a colon and the value. It ends at the end of -the line. Horizontal whitespace (spaces and tabs) may occur before or -after the value and is ignored there; it is conventional to put a -single space after the colon. -<p> - -Some fields' values may span several lines; in this case each -continuation line <em/must/ start with a space or tab. Any trailing -spaces or tabs at the end of individual lines of a field value are -ignored. -<p> - -Except where otherwise stated only a single line of data is allowed -and whitespace is not significant in a field body. Whitespace may -never appear inside names (of packages, architectures, files or -anything else), version numbers or in between the characters of -multi-character version relationships. -<p> - -Field names are not case-sensitive, but it is usual to capitalise the -fields using mixed case as shown below. -<p> - -Blank lines, or lines consisting only of spaces and tabs, are not -allowed within field values or between fields - that would mean a new -paragraph. -<p> - -It is important to note that there are several fields which are -optional as far as <prgn/dpkg/ and the related tools are concerned, -but which must appear in every Debian package, or whose omission may -cause problems. When writing the control files for Debian packages -you <em/must/ read the Debian policy manual in conjuction with the -details below and the list of fields for the particular file. - -<sect>List of fields - -<sect1 id="f-Package"><tt/Package/ -<p> - -The name of the binary package. Package names consist of the -alphanumerics and <tt/+/ <tt/-/ <tt/./ (plus, minus and full -stop).<footnote>The characters <tt/@/ <tt/:/ <tt/=/ <tt/%/ <tt/_/ (at, -colon, equals, percent and underscore) used to be legal and are still -accepted when found in a package file, but may not be used in new -packages</footnote> -<p> - -They must be at least two characters and must start with an -alphanumeric. In current versions of dpkg they are sort of -case-sensitive<footnote>This is a bug.</footnote>; use lowercase -package names unless the package you're building (or referring to, in -other fields) is already using uppercase. - -<sect1 id="f-Version"><tt/Version/ -<p> - -This lists the source or binary package's version number - see <ref -id="versions">. - -<sect1 id="f-Architecture"><tt/Architecture/ -<p> - -This is the architecture string; it is a single word for the CPU -architecture. -<p> - -<prgn/dpkg/ will check the declared architecture of a binary package -against its own compiled-in value before it installs it. -<p> - -The special value <tt/all/ indicates that the package is -architecture-independent. -<p> - -In the main <tt>debian/control</> file in the source package, or in -the source package control file <tt/.dsc/, a list of architectures -(separated by spaces) is also allowed, as is the special value -<tt/any/. A list indicates that the source will build an -architecture-dependent package, and will only work correctly on the -listed architectures. <tt/any/ indicates that though the source -package isn't dependent on any particular architecture and should -compile fine on any one, the binary package(s) produced are not -architecture-independent but will instead be specific to whatever the -current build architecture is. -<p> - -In a <tt/.changes/ file the <tt/Architecture/ field lists the -architecture(s) of the package(s) currently being uploaded. This will -be a list; if the source for the package is being uploaded too the -special entry <tt/source/ is also present. -<p> - -The current build architecture can be determined using <tt/dpkg ---print-architecture/.<footnote>This actually invokes -<example> -gcc --print-libgcc-file-name -</example> -and parses and decomposes the output and looks the CPU type from the -GCC configuration in a table in <prgn/dpkg/. This is so that it will -work if you're cross-compiling. -</footnote> -This value is automatically used by <prgn/dpkg-gencontrol/ when -building the control file for a binary package for which the source -control information doesn't specify architecture <tt/all/. -<p> - -There is a separate option, <tt/--print-installation-architecture/, -for finding out what architecture <prgn/dpkg/ is willing to install. -This information is also in the output of <tt/dpkg --version/. - -<sect1 id="f-Maintainer"><tt/Maintainer/ -<p> - -The package maintainer's name and email address. The name should come -first, then the email address inside angle brackets <tt/<>/ (in -RFC822 format). -<p> - -If the maintainer's name contains a full stop then the whole field -will not work directly as an email address due to a misfeature in the -syntax specified in RFC822; a program using this field as an address -must check for this and correct the problem if necessary (for example -by putting the name in round brackets and moving it to the end, and -bringing the email address forward). -<p> - -In a <tt/.changes/ file or parsed changelog data this contains the -name and email address of the person responsible for the particular -version in question - this may not be the package's usual maintainer. -<p> - -This field is usually optional in as far as the <prgn/dpkg/ are -concerned, but its absence when building packages usually generates a -warning. - -<sect1 id="f-Source"><tt/Source/ -<p> - -This field identifies the source package name. -<p> - -In a main source control information or a <tt/.changes/ or <tt/.dsc/ -file or parsed changelog data this may contain only the name of the -source package. -<p> - -In the control file of a binary package (or in a <tt/Packages/ file) -it may be followed by a version number in parentheses.<footnote>It is -usual to leave a space after the package name if a version number is -specified.</footnote> This version number may be omitted (and is, by -<prgn/dpkg-gencontrol/) if it has the same value as the <tt/Version/ -field of the binary package in question. The field itself may be -omitted from a binary package control file when the source package has -the same name and version as the binary package. - -<sect1>Package interrelationship fields: -<tt/Depends/, <tt/Pre-Depends/, <tt/Recommends/ -<tt/Suggests/, <tt/Conflicts/, <tt/Provides/, <tt/Replaces/ -<p> - -These fields describe the package's relationships with other packages. -Their syntax and semantics are described in <ref id="relationships">. - -<sect1 id="f-Description"><tt/Description/ -<p> - -In a binary package <tt/Packages/ file or main source control file -this field contains a description of the binary package, in a special -format. See <ref id="descriptions"> for details. -<p> - -In a <tt/.changes/ file it contains a summary of the descriptions for -the packages being uploaded. The part of the field before the first -newline is empty; thereafter each line has the name of a binary -package and the summary description line from that binary package. -Each line is indented by one space. - -<sect1 id="f-Essential"><tt/Essential/ -<p> - -This is a boolean field which may occur only in the control file of a -binary package (or in the <tt/Packages/ file) or in a per-package -fields paragraph of a main source control data file. -<p> - -If set to <tt/yes/ then <prgn/dpkg/ and <prgn/dselect/ will refuse to -remove the package (though it can be upgraded and/or replaced). The -other possible value is <tt/no/, which is the same as not having the -field at all. - -<sect1 id="f-classification"><tt/Section/ and <tt/Priority/ -<p> - -These two fields classify the package. The <tt/Priority/ represents -how important that it is that the user have it installed; the -<tt/Section/ represents an application area into which the package has -been classified. -<p> - -When they appear in the <tt>debian/control</> file these fields give -values for the section and priority subfields of the <tt/Files/ field -of the <tt/.changes/ file, and give defaults for the section and -priority of the binary packages. -<p> - -The section and priority are represented, though not as separate -fields, in the information for each file in the <qref -id="f-Files"><tt/Files/</> field of a <tt/.changes/ file. The -section value in a <tt/.changes/ file is used to decide where to -install a package in the FTP archive. -<p> - -These fields are not used by by <prgn/dpkg/ proper, but by -<prgn/dselect/ when it sorts packages and selects defaults. See the -Debian policy manual for the priorities in use and the criteria for -selecting the priority for a Debian package, and look at the Debian -FTP archive for a list of currently in-use priorities. -<p> - -These fields may appear in binary package control files, in which case -they provide a default value in case the <tt/Packages/ files are -missing the information. <prgn/dpkg/ and <prgn/dselect/ will only use -the value from a <tt/.deb/ file if they have no other information; a -value listed in a <tt/Packages/ file will always take precedence. By -default <prgn/dpkg-genchanges/ does not include the section and -priority in the control file of a binary package - use the <tt/-isp/, -<tt/-is/ or <tt/-ip/ options to achieve this effect. - -<sect1 id="f-Binary"><tt/Binary/ -<p> - -This field is a list of binary packages. -<p> - -When it appears in the <tt/.dsc/ file it is the list of binary -packages which a source package can produce. It does not necessarily -produce all of these binary packages for every architecture. The -source control file doesn't contain details of which architectures are -appropriate for which of the binary packages. -<p> - -When it appears in a <tt/.changes/ file it lists the names of the -binary packages actually being uploaded. -<p> - -The syntax is a list of binary packages separated by -commas.<footnote>A space after each comma is conventional.</footnote> -Currently the packages must be separated using only spaces in the -<tt/.changes/ file. - -<sect1 id="f-Installed-Size"><tt/Installed-Size/ -<p> - -This field appears in the control files of binary packages, and in the -<tt/Packages/ files. It gives the total amount of disk space -required to install the named package. -<p> - -The disk space is represented in kilobytes as a simple decimal number. - -<sect1 id="f-Files"><tt/Files/ -<p> - -This field contains a list of files with information about each one. -The exact information and syntax varies with the context. In all -cases the the part of the field contents on the same line as the field -name is empty. The remainder of the field is one line per file, each -line being indented by one space and containing a number of sub-fields -separated by spaces. -<p> - -In the <tt/.dsc/ (Debian source control) file each line contains the -MD5 checksum, size and filename of the tarfile and (if applicable) -diff file which make up the remainder of the source -package.<footnote>That is, the parts which are not the -<tt/.dsc/.</footnote> The exact forms of the filenames are described -in <ref id="sourcearchives">. -<p> - -In the <tt/.changes/ file this contains one line per file being -uploaded. Each line contains the MD5 checksum, size, section and -priority and the filename. The section and priority are the values of -the corresponding fields in the main source control file - see <ref -id="f-classification">. If no section or priority is specified then -<tt/-/ should be used, though section and priority values must be -specified for new packages to be installed properly. -<p> - -The special value <tt/byhand/ for the section in a <tt/.changes/ file -indicates that the file in question is not an ordinary package file -and must by installed by hand by the distribution maintainers. If the -section is <tt/byhand/ the priority should be <tt/-/. -<p> - -If a new Debian revision of a package is being shipped and no new -original source archive is being distributed the <tt/.dsc/ must still -contain the <tt/Files/ field entry for the original source archive -<tt/<var/package/-<var/upstream-version/.orig.tar.gz/, but the -<tt/.changes/ file should leave it out. In this case the original -source archive on the distribution site must match exactly, -byte-for-byte, the original source archive which was used to generate -the <tt/.dsc/ file and diff which are being uploaded. - - -<sect1 id="f-Standards-Version"><tt/Standards-Version/ -<p> - -The most recent version of the standards (the <prgn/dpkg/ programmers' -and policy manuals and associated texts) with which the package -complies. This is updated manually when editing the source package to -conform to newer standards; it can sometimes be used to tell when a -package needs attention. -<p> - -Its format is the same as that of a version number except that no -epoch or Debian revision is allowed - see <ref id="versions">. - - -<sect1 id="f-Distribution"><tt/Distribution/ -<p> - -In a <tt/.changes/ file or parsed changelog output this contains the -(space-separated) name(s) of the distribution(s) where this version of -the package should be or was installed. Distribution names follow the -rules for package names. (See <ref id="f-Package">). -<p> - -Current distribution values are <tt/stable/, <tt/unstable/, -<tt/contrib/, <tt/non-free/ and <tt/experimental/. - -<sect1 id="f-Urgency"><tt/Urgency/ -<p> - -This is a description of how important it is to upgrade to this -version from previous ones. It consists of a single keyword usually -taking one of the values <tt/LOW/, <tt/MEDIUM/ or <tt/HIGH/) followed -by an optional commentary (separated by a space) which is usually in -parentheses. For example: -<example> -Urgency: LOW (HIGH for diversions users) -</example> -<p> - -This field appears in the <tt/.changes/ file and in parsed changelogs; -its value appears as the value of the <tt/urgency/ attribute in a -<prgn/dpkg/-style changelog (see <ref id="dpkgchangelog">). -<p> - -Urgency keywords are not case-sensitive. - -<sect1 id="f-Date"><tt/Date/ -<p> - -In <tt/.changes/ files and parsed changelogs, this gives the date the -package was built or last edited. - -<sect1 id="f-Format"><tt/Format/ -<p> - -This field occurs in <tt/.changes/ files, and specifies a format -revision for the file. The format described here is version <tt/1.5/. -The syntax of the format value is the same as that of a package -version number except that no epoch or Debian revision is allowed - -see <ref id="versions">. - -<sect1 id="f-Changes"><tt/Changes/ -<p> - -In a <tt/.changes/ file or parsed changelog this field contains the -human-readable changes data, describing the differences between the -last version and the current one. -<p> - -There should be nothing in this field before the first newline; all -the subsequent lines must be indented by at least one space; blank -lines must be represented by a line consiting only of a space and a -full stop. -<p> - -Each version's change information should be preceded by a `title' line -giving at least the version, distribution(s) and urgency, in a -human-readable way. -<p> - -If data from several versions is being returned the entry for the most -recent version should be returned first, and entries should be -separated by the representation of a blank line (the `title' line may -also be followed by the representation of blank line). - -<sect1 id="f-Filename"><tt/Filename/ and <tt/MSDOS-Filename/ -<p> - -These fields in <tt/Packages/ files give the filename(s) of (the parts -of) a package in the distribution directories, relative to the root of -the Debian hierarchy. If the package has been split into several -parts the parts are all listed in order, separated by spaces. - -<sect1 id="f-Size"><tt/Size/ and <tt/MD5sum/ -<p> - -These fields in <tt/Packages/ files give the size (in bytes, expressed -in decimal) and MD5 checksum of the file(s) which make(s) up a binary -package in the distribution. If the package is split into several -parts the values for the parts are listed in order, separated by -spaces. - -<sect1 id="f-Status"><tt/Status/ -<p> - -This field in <prgn/dpkg/'s status file records whether the user wants a -package installed, removed or left alone, whether it is broken -(requiring reinstallation) or not and what its current state on the -system is. Each of these pieces of information is a single word. - -<sect1 id="f-Config-Version"><tt/Config-Version/ -<p> - -If a package is not installed or not configured, this field in -<prgn/dpkg/'s status file records the last version of the package which -was successfully configured. - -<sect1 id="f-Conffiles"><tt/Conffiles/ -<p> - -This field in <prgn/dpkg/'s status file contains information about the -automatically-managed configuration files held by a package. This -field should <em/not/ appear anywhere in a package! - -<sect1>Obsolete fields -<p> - -These are still recognised by <prgn/dpkg/ but should not appear anywhere -any more. - -<taglist compact> - -<tag><tt/Revision/ -<tag><tt/Package-Revision/ -<tag><tt/Package_Revision/ -<item> -The Debian revision part of the package version was at one point in a -separate control file field. This field went through several names. - -<tag><tt/Recommended/ -<item>Old name for <tt/Recommends/ - -<tag><tt/Optional/ -<item>Old name for <tt/Suggests/. - -<tag><tt/Class/ -<item>Old name for <tt/Priority/. - -</taglist> - -<chapt id="versions">Version numbering -<p> - -Every package has a version number, in its <tt/Version/ control file -field. -<p> - -<prgn/dpkg/ imposes an ordering on version numbers, so that it can tell -whether packages are being up- or downgraded and so that <prgn/dselect/ -can tell whether a package it finds available is newer than the one -installed on the system. The version number format has the most -significant parts (as far as comparison is concerned) at the -beginning. -<p> - -The version number format is: -&lsqb<var/epoch/<tt/:/]<var/upstream-version/[<tt/-/<var/debian-revision/]. -<p> - -The three components here are: - -<taglist> - -<tag><var/epoch/ -<item> - -This is a single unsigned integer, which should usually be small. It -may be omitted, in which case zero is assumed. If it is omitted then -the <var/upstream-version/ may not contain any colons. -<p> - -It is provided to allow mistakes in the version numbers of older -versions of a package, and also a package's previous version numbering -schemes, to be left behind. -<p> - -<prgn/dpkg/ will not usually display the epoch unless it is essential -(non-zero, or if the <var/upstream-version/ contains a colon); -<prgn/dselect/ does not display epochs at all in the main part of the -package selection display. - -<tag><var/upstream-version/ -<item> - -This is the main part of the version. It is usually version number of -the original (`upstream') package of which the <tt/.deb/ file has been -made, if this is applicable. Usually this will be in the same format -as that specified by the upstream author(s); however, it may need to -be reformatted to fit into <prgn/dpkg/'s format and comparison scheme. -<p> - -The comparison behaviour of <prgn/dpkg/ with respect to the -<var/upstream-version/ is described below. The <var/upstream-version/ -portion of the version number is mandatory. -<p> - -The <var/upstream-version/ may contain only alphanumerics and the -characters <tt/+/ <tt/./ <tt/-/ <tt/:/ (full stop, plus, hyphen, -colon) and should start with a digit. If there is no -<var/debian-revision/ then hyphens are not allowed; if there is no -<var/epoch/ then colons are not allowed. - -<tag><var/debian-revision/ -<item> - -This part of the version represents the version of the modifications -that were made to the package to make it a Debian binary package. It -is in the same format as the <var/upstream-version/ and <prgn/dpkg/ -compares it in the same way. -<p> - -It is optional; if it isn't present then the <var/upstream-version/ -may not contain a hyphen. This format represents the case where a -piece of software was written specifically to be turned into a Debian -binary package, and so there is only one `debianization' of it and -therefore no revision indication is required. -<p> - -It is conventional to restart the <var/debian-revision/ at <tt/1/ each -time the <var/upstream-version/ is increased. -<p> - -<prgn/dpkg/ will break the <var/upstream-version/ and -<var/debian-revision/ apart at the last hyphen in the string. The -absence of a <var/debian-revision/ compares earlier than the presence -of one (but note that the <var/debian-revision/ is the least -significant part of the version number). -<p> - -The <var/debian-revision/ may contain only alphanumerics and the -characters <tt/+/ and <tt/./ (plus and full stop). - -</taglist> - -The <var/upstream-version/ and <var/debian-revision/ parts are -compared by <prgn/dpkg/ using the same algorithm: -<p> - -The strings are compared from left to right. -<p> - -First the initial part of each string consisting entirely of non-digit -characters is determined. These two parts (one of which may be empty) -are compared lexically. If a difference is found it is returned. The -lexical comparison is a comparison of ASCII values modified so that -all the letters sort earlier than all the non-letters. -<p> - -Then the initial part of the remainder of each string which consists -entirely of digit characters is determined. The numerical values of -these two parts are compared, and any difference found is returned as -the result of the comparison. For these purposes an empty string -(which can only occur at the end of one or both version strings being -compared) counts as zero. -<p> - -These two steps are repeated (chopping initial non-digit strings and -initial digit strings off from the start) until a difference is found -or both strings are exhausted. -<p> - -Note that the purpose of epochs is to allow us to leave behind -mistakes in version numbering, and to cope with situations where the -version numbering changes. It is <em/not/ there to cope with version -numbers containing strings of letters which <prgn/dpkg/ cannot interpret -(such as <tt/ALPHA/ or <tt/pre-/), or with silly orderings (the author -of this manual has heard of a package whose versions went <tt/1.1/, -<tt/1.2/, <tt/1.3/, <tt/1/, <tt/2.1/, <tt/2.2/, <tt/2/ and so forth). -<p> - -If an upstream package has problematic version numbers they should be -converted to a sane form for use in the <tt/Version/ field. - - -<chapt id="maintainerscripts">Package maintainer scripts -and installation procedure -<sect>Introduction to package maintainer scripts -<p> - -It is possible supply scripts as part of a package which <prgn/dpkg/ -will run for you when your package is installed, upgraded or removed. -<p> - -These scripts should be the files <tt/preinst/, <tt/postinst/, -<tt/prerm/ and <tt/postrm/ in the control area of the package. They -must be proper exectuable files; if they are scripts (which is -recommended) they must start with the usual <tt/#!/ convention. They -should be readable and executable to anyone, and not world-writeable. -<p> - -<prgn/dpkg/ looks at the exit status from these scripts. It is -important that they exit with a non-zero status if there is an error, -so that <prgn/dpkg/ can stop its processing. For shell scripts this -means that you <em/almost always/ need to use <tt/set -e/ (this is -usually true when writing shell scripts, in fact). It is also -important, of course, that they don't exit with a non-zero status if -everything went well. -<p> - -It is necessary for the error recovery procedures that the scripts be -idempotent: ie, invoking the same script several times in the same -situation should do no harm. If the first call failed, or aborted -half way through for some reason, the second call should merely do the -things that were left undone the first time, if any, and exit with a -success status. -<p> - -When a package is upgraded a combination of the scripts from the old -and new packages is called in amongst the other steps of the upgrade -procedure. If your scripts are going to be at all complicated you -need to be aware of this, and may need to check the arguments to your -scripts. -<p> - -Broadly speaking the <prgn/preinst/ is called before (a particular -version of) a package is installed, and the <prgn/postinst/ afterwards; -the <prgn/prerm/ before (a version of) a package is removed and the -<prgn/postrm/ afterwards. - - -<sect id="mscriptsinstact">Summary of ways maintainer scripts are called -<p> - -<list compact> -<item><var/new-preinst/ <tt/install/ -<item><var/new-preinst/ <tt/install/ <var/old-version/ -<item><var/new-preinst/ <tt/upgrade/ <var/old-version/ -<item><var/old-preinst/ <tt/abort-upgrade/ <var/new-version/ -</list> -<p> - -<list compact> -<item><var/postinst/ <tt/configure/ <var/most-recently-configured-version/ -<item><var/old-postinst/ <tt/abort-upgrade/ <var/new version/ -<item><var/conflictor's-postinst/ <tt/abort-remove/ - <tt/in-favour/ <var/package/ <var/new-version/ -<item><var/deconfigured's-postinst/ <tt/abort-deconfigure/ - <tt/in-favour/ <var/failed-install-package/ <var/version/ - <tt/removing/ <var/conflicting-package/ <var/version/ -</list> -<p> - -<list compact> -<item><var/prerm/ <tt/remove/ -<item><var/old-prerm/ <tt/upgrade/ <var/new-version/ -<item><var/new-prerm/ <tt/failed-upgrade/ <var/old-version/ -<item><var/conflictor's-prerm/ <tt/remove/ <tt/in-favour/ - <var/package/ <var/new-version/ -<item><var/deconfigured's-prerm/ <tt/deconfigure/ - <tt/in-favour/ <var/package-being-installed/ <var/version/ - <tt/removing/ <var/conflicting-package/ <var/version/ -</list> -<p> - -<list compact> -<item><var/postrm/ <tt/remove/ -<item><var/postrm/ <tt/purge/ -<item><var/old-postrm/ <tt/upgrade/ <var/new-version/ -<item><var/new-postrm/ <tt/failed-upgrade/ <var/old-version/ -<item><var/new-postrm/ <tt/abort-install/ -<item><var/new-postrm/ <tt/abort-install/ <var/old-version/ -<item><var/new-postrm/ <tt/abort-upgrade/ <var/old-version/ -<item><var/disappearer's-postrm/ <tt/disappear/ <var/overwriter/ <var/new-version/ -</list> - - -<sect>Details of unpack phase of installation or upgrade -<p> - -The procedure on installation/upgrade/overwrite/disappear (ie, when -running <tt/dpkg --unpack/, or the unpack stage of <tt/dpkg ---install/) is as follows. In each case if an error occurs the -actions in are general run backwards - this means that the maintainer -scripts are run with different arguments in reverse order. These are -the `error unwind' calls listed below. - -<enumlist> -<item> - -<enumlist> -<item> -If a version the package is already -installed, call -<example> -<var/old-prerm/ upgrade <var/new-version/ -</example> - -<item> -If this gives an error (ie, a non-zero exit status), dpkg will -attempt instead: -<example> -<var/new-prerm/ failed-upgrade <var/old-version/ -</example> -Error unwind, for both the above cases: -<example> -<var/old-postinst/ abort-upgrade <var/new-version/ -</example> - -</enumlist> - -<item> -If a `conflicting' package is being removed at the same time: -<enumlist> - -<item> -If any packages depended on that conflicting package and -<tt/--auto-deconfigure/ is specified, call, for each such package: -<example> -<var/deconfigured's-prerm/ deconfigure \ - in-favour <var/package-being-installed/ <var/version/ \ - removing <var/conflicting-package/ <var/version/ -</example> -Error unwind: -<example> -<var/deconfigured's-postinst/ abort-deconfigure \ - in-favour <var/package-being-installed-but-failed/ <var/version/ \ - removing <var/conflicting-package/ <var/version/ -</example> -The deconfigured packages are marked as requiring configuration, so -that if <tt/--install/ is used they will be configured again if -possible. - -<item> -To prepare for removal of the conflicting package, call: -<example> -<var/conflictor's-prerm/ remove in-favour <var/package/ <var/new-version/ -</example> -Error unwind: -<example> -<var/conflictor's-postinst/ abort-remove \ - in-favour <var/package/ <var/new-version/ -</example> - -</enumlist> - -<item> -<enumlist> -<item> -If the package is being upgraded, call: -<example> -<var/new-preinst/ upgrade <var/old-version/ -</example> - -<item> -Otherwise, if the package had some configuration files from a previous -version installed (ie, it is in the `configuration files only' state): -<example> -<var/new-preinst/ install <var/old-version/ -</example> - -<item> -Otherwise (ie, the package was completely purged): -<example> -<var/new-preinst/ install -</example> -Error unwind versions, respectively: -<example> -<var/new-postrm/ abort-upgrade <var/old-version/ -<var/new-postrm/ abort-install <var/old-version/ -<var/new-postrm/ abort-install -</example> - -</enumlist> - -<item> -The new package's files are unpacked, overwriting any that may be on -the system already, for example any from the old version of the same -package or from another package (backups of the old files are left -around, and if anything goes wrong dpkg will attempt to put them back -as part of the error unwind). -<p> - -It is an error for a package to contains files which are on the system -in another package, unless <tt/Replaces/ is used (see -<ref id="replaces">). Currently the <tt/--force-overwrite/ flag is -enabled, downgrading it to a warning, but this may not always be the -case. -<p> - -It is a more serious error for a package to contain a plain file or -other kind of nondirectory where another package has a directory -(again, unless <tt/Replaces/ is used). This error can be overridden -if desired using <tt/--force-overwrite-dir/, but this is not --> ---advisable. -<p> - -Packages which overwrite each other's files produce behaviour which -though deterministic is hard for the system administrator to -understand. It can easily lead to `missing' programs if, for example, -a package is installed which overwrites a file from another package, -and is then removed again.<footnote>Part of the problem is due to what -is arguably a bug in <prgn/dpkg/.</footnote> -<p> - -A directory will never be replaced by a symbolic links to a directory -or vice versa; instead, the existing state (symlink or not) will be -left alone and <prgn/dpkg/ will follow the symlink if there is one. - -<item> - -<enumlist> -<item> -If the package is being upgraded, call -<example> -<var/old-postrm/ upgrade <var/new-version/ -</example> - -<item> -If this fails, <prgn/dpkg/ will attempt: -<example> -<var/new-postrm/ failed-upgrade <var/old-version/ -</example> -Error unwind, for both cases: -<example> -<var/old-preinst/ abort-upgrade <var/new-version/ -</example> - -</enumlist> - -This is the point of no return - if <prgn/dpkg/ gets this far, it won't -back off past this point if an error occurs. This will leave the -package in a fairly bad state, which will require a successful -reinstallation to clear up, but it's when <prgn/dpkg/ starts doing -things that are irreversible. - -<item> -Any files which were in the old version of the package but not in the -new are removed. - -<item> -The new file list replaces the old. - -<item> -The new maintainer scripts replace the old. - -<item> -Any packages all of whose files have been overwritten during the -installation, and which aren't required for dependencies, are considered -to have been removed. For each such package, - -<enumlist> -<item> -<prgn/dpkg/ calls: -<example> -<var/disappearer's-postrm/ disappear \ - <var/overwriter/ <var/overwriter-version/ -</example> - -<item> -The package's maintainer scripts are removed. - -<item> -It is noted in the status database as being in a sane state, namely -not installed (any conffiles it may have are ignored, rather than -being removed by <prgn/dpkg/). Note that disappearing packages do not -have their prerm called, because <prgn/dpkg/ doesn't know in advance -that the package is going to vanish. - -</enumlist> - -<item> -Any files in the package we're unpacking that are also listed in the -file lists of other packages are removed from those lists. (This will -lobotomise the file list of the `conflicting' package if there is one.) - -<item> -The backup files made during installation, above, are deleted. - -<item> -The new package's status is now sane, and recorded as `unpacked'. Here -is another point of no return - if the conflicting package's removal -fails we do not unwind the rest of the installation; the conflicting -package is left in a half-removed limbo. - -<item> -If there was a conflicting package we go and do the removal actions -(described below), starting with the removal of the conflicting -package's files (any that are also in the package being installed -have already been removed from the conflicting package's file list, -and so do not get removed now). - -</enumlist> - -<sect>Details of configuration -<p> - -When we configure a package (this happens with <tt/dpkg --install/, or -with <tt/--configure/), we first update the conffiles and then call: -<example> -<var/postinst/ configure <var/most-recently-configured-version/ -</example> -<p> - -No attempt is made to unwind after errors during configuration. -<p> - -If there is no most recently configured version <prgn/dpkg/ will pass a -null argument; older versions of dpkg may pass -<tt><unknown></tt> (including the angle brackets) in this case. -Even older ones do not pass a second argument at all, under any -circumstances. - -<sect>Details of removal and/or configuration purging -<p> - -<enumlist> -<item> -<example> -<var/prerm/ remove -</example> - -<item> -The package's files are removed (except conffiles). - -<item> -<example> -<var/postrm/ remove -</example> - -<item> -All the maintainer scripts except the postrm are removed. -<p> - -If we aren't purging the package we stop here. Note that packages -which have no postrm and no conffiles are automatically purged when -removed, as there is no difference except for the <prgn/dpkg/ status. - -<item> -The conffiles and any backup files (<tt/~/-files, <tt/#*#/ files, -<tt/%/-files, <tt/.dpkg-{old,new,tmp}/, etc.) are removed. - -<item> -<example> -<var/postrm/ purge -</example> - -<item> -The package's file list is removed. - -</enumlist> - -No attempt is made to unwind after errors during removal. - - -<chapt id="descriptions">Descriptions of packages - the -<tt/Description/ field -<p> - -The <tt/Description/ control file field is used by <prgn/dselect/ when -the user is selecting which packages to install and by <prgn/dpkg/ -when it displays information about the status of packages and so -forth. It is included on the FTP site in the <prgn/Packages/ files, -and may also be used by the Debian WWW pages. -<p> - -The description is intended to describe the program to a user who has -never met it before so that they know whether they want to install it. -It should also give information about the significant dependencies and -conflicts between this package and others, so that the user knows why -these dependencies and conflicts have been declared. -<p> - -The field's format is as follows: -<example> -Description: <var/single line synopsis/ - <var/extended description over several lines/ -</example> -<p> - -The synopsis is often printed in lists of packages and so forth, and -should be as informative as possible. Every package should also have -an extended description. -<p> - -<sect>Types of formatting line in the extended description -<p> - -<list> -<item> -Those starting with a single space are part of a paragraph. -Successive lines of this form will be word-wrapped when displayed. -The leading space will usually be stripped off. - -<item> -Those starting with two or more spaces. These will be displayed -verbatim. If the display cannot be panned horizontally the -displaying program will linewrap them `hard' (ie, without taking -account of word breaks). If it can they will be allowed to trail -off to the right. None, one or two initial spaces may be deleted, -but the number of spaces deleted from each line will be the same -(so that you can have indenting work correctly, for example). - -<item> -Those containing a single space followed by a single full stop -character. These are rendered as blank lines. This is the <em/only/ -way to get a blank line - see below. - -<item> -Those containing a space, a full stop and some more characters. These -are for future expansion. Do not use them. -</list> - -<sect>Notes about writing descriptions -<p> - -<em/Always/ start extended description lines with at least one -whitespace character. Fields in the control file and in the Packages -file are separated by field names starting in the first column, just -as message header fields are in RFC822. Forgetting the whitespace -will cause <prgn/dpkg-deb/<footnote>Version 0.93.23 or -later.</footnote> to produce a syntax error when trying to build the -package. If you force it to build anyway <prgn/dpkg/ will refuse to -install the resulting mess. -<p> - -<em/Do not/ include any completely <em/empty/ lines. These separate -different records in the Packages file and different packages in the -<tt>debian/control</> file, and are forbidden in package control -files. See the previous paragraph for what happens if you get this -wrong. -<p> - -The single line synopsis should be kept brief - certainly under 80 -characters. <prgn/dselect/ displays between 25 and 49 characters -without panning if you're using an 80-column terminal, depending on -what display options are in effect. -<p> - -Do not include the package name in the synopsis line. The display -software knows how to display this already, and you do not need to -state it. Remember that in many situations the user may only see -the synopsis line - make it as informative as you can. -<p> - -The extended description should describe what the package does and -how it relates to the rest of the system (in terms of, for -example, which subsystem it is which part of). -<p> - -The blurb that comes with a program in its announcements and/or -<prgn/README/ files is rarely suitable for use in a description. It -is usually aimed at people who are already in the community where the -package is used. The description field needs to make sense to anyone, -even people who have no idea about any of the -things the package deals with. -<p> - -Put important information first, both in the synopis and extended -description. Sometimes only the first part of the synopsis or of -the description will be displayed. You can assume that there will -usually be a way to see the whole extended description. -<p> - -You may include information about dependencies and so forth in the -extended description, if you wish. -<p> - -Do not use tab characters. Their effect is not predictable. -<p> - -Do not try to linewrap the summary (the part on the same line as the -field name <tt/Description/) into the extended description. This will -not work correctly when the full description is displayed, and makes -no sense where only the summary is available. - -<sect>Example description in control file for Smail -<p> - -<example> -Package: smail -Version: 3.1.29.1-13 -Maintainer: Ian Jackson <iwj10@cus.cam.ac.uk> -Recommends: pine | mailx | elm | emacs | mail-user-agent -Suggests: metamail -Depends: cron, libc5 -Conflicts: sendmail -Provides: mail-transport-agent -Description: Electronic mail transport system. - Smail is the recommended mail transport agent (MTA) for Debian. - . - An MTA is the innards of the mail system - it takes messages from - user-friendly mailer programs and arranges for them to be delivered - locally or passed on to other systems as required. - . - In order to make use of it you must have one or more user level - mailreader programs such as elm, pine, mailx or Emacs (which has Rmail - and VM as mailreaders) installed. If you wish to send messages other - than just to other users of your system you must also have appropriate - and VM as mailreaders) installed. If you wish to send messages other - than just to other users of your system you must also have appropriate - networking support, in the form of IP or UUCP. -</example> - -<chapt id="relationships">Declaring relationships between packages -<p> - -Packages can declare in their control file that they have certain -relationships to other packages - for example, that they may not be -installed at the same time as certain other packages, and/or that they -depend on the presence of others, or that they should overwrite files -in certain other packages if present. -<p> - -This is done using the <tt/Depends/, <tt/Recommends/, <tt/Suggests/, -<tt/Conflicts/, <tt/Provides/ and <tt/Replaces/ control file fields. -<p> - -<sect id="depsyntax">Syntax of relationship fields -<p> - -These fields all have a uniform syntax. They are a list of package -names separated by commas. -<p> - -In <tt/Depends/, <tt/Recommends/, <tt/Suggests/ and <tt/Pre-Depends/ -(the fields which declare dependencies of the package in which they -occur on other packages) these package names may also be lists of -alternative package names, separated by vertical bar symbols <tt/|/ -(pipe symbols). -<p> - -All the fields except <tt/Provides/ may restrict their applicability -to particular versions of each named package. This is done in -parentheses after each individual package name; the parentheses should -contain a relation from the list below followed by a version number, -in the format described in <ref id="versions">. -<p> - -The relations allowed are -<tt/<</, -<tt/<=/, -<tt/=/, -<tt/>=/ and -<tt/>>/ -for strictly earlier, earlier or equal, exactly equal, later or equal -and strictly later, respectively. The forms <tt/</ and <tt/>/ -were used to mean earlier/later or equal, rather than strictly -earlier/later, so they should not appear in new packages (though -<prgn/dpkg/ still supports them). -<p> - -Whitespace may appear at any point in the version specification, and -must appear where it's necessary to disambiguate; it is not otherwise -significant. For consistency and in case of future changes to -<prgn/dpkg/ it is recommended that a single space be used after a -version relationship and before a version number; it is usual also to -put a single space after each comma, on either side of each vertical -bar, and before each open parenthesis. -<p> - -For example: -<example> -Package: metamail -Version: 2.7-3 -Depends: libc5 (>= 5.2.18-4), mime-support, csh | tcsh -</example> - -<sect>Dependencies - <tt/Depends/, <tt/Recommends/, <tt/Suggests/, <tt/Pre-Depends/ -<p> - -These four fields are used to declare a dependency by one package on -another. They appear in the depending package's control file. -<p> - -All but <tt/Pre-Depends/ (discussed below) take effect <em/only/ when -a package is to be configured. They do not prevent a package being on -the system in an unconfigured state while its dependencies are -unsatisfied, and it is possible to replace a package whose -dependencies are satisfied and which is properly installed with a -different version whose dependencies are not and cannot be satisfied; -when this is done the depending package will be left unconfigured -(since attempts to configure it will give errors) and will not -function properly. -<p> - -For this reason packages in an installation run are usually all -unpacked first and all configured later; this gives later versions of -packages with dependencies on later versions of other packages the -opportunity to have their dependencies satisfied. -<p> - -Thus <tt/Depends/ allows package maintainers to impose an order in -which packages should be configured. - -<taglist> -<tag><tt/Depends/ -<item> - -This declares an absolute dependency. -<p> - -<prgn/dpkg/ will not configure -packages whose dependencies aren't satisfied. If it is asked to make -an installation which would cause an installed package's dependencies -to become unsatisfied it will complain<footnote>Current versions -(1.2.4) of <prgn/dpkg/ have a bug in this area which will cause some of -these problems to be ignored.</footnote>, unless -<tt/--auto-deconfigure/ is specified, in which case those packages -will be deconfigured before the installation proceeds. -<p> - -<prgn/dselect/ makes it hard for the user to select packages for -installation, removal or upgrade in a way that would mean that -packages' <prgn/Depends/ fields would be unsatisfied. The user can -override this if they wish, for example if they know that <prgn/dselect/ -has an out-of-date view of the real package relationships. -<p> - -The <tt/Depends/ field should be used if the depended-on package is -required for the depending package to provide a significant amount of -functionality. - -<tag><tt/Recommends/ -<item> -This declares a strong, but not absolute, dependency. -<p> - -<tt/Recommends/ is ignored by <prgn/dpkg/, so that users using the -command-line (who are presumed to know what they're doing) will not be -impeded. -<p> - -It is treated by <prgn/dselect/ exactly as <tt/Depends/ is; this makes -it hard for the user to select things so as to leave <tt/Recommends/ -fields unsatisfied, but they are able to do so by being persistent. -<p> - -The <tt/Recommends/ field should list packages that would be found -together with this one in all but unusual installations. - -<tag><tt/Suggests/ -<item> - -This is used to declare that one package may be more useful with one -or more others. Using this field tells the packaging system and the -user that the listed packages are be related to this one and can -perhaps enhance its usefulness, but that installing this one without -them is perfectly reasonable. -<p> - -<prgn/dselect/ will offer suggsted packages to the system administrator -when they select the suggesting package, but the default is not to -install the suggested package. - -<tag><tt/Pre-Depends/ -<item> - -This field is like <tt/Depends/, except that it also forces <prgn/dpkg/ -to complete installation of the packages named before even starting -the installation of the package which declares the predependency. -<p> - -<prgn/dselect/ checks for predependencies when it is doing an -installation run, and will attempt to find the packages which are -required to be installed first and do so in the right order. -<p> - -However, this process is slow (because it requires repeated -invocations of <prgn/dpkg/) and troublesome (because it requires -guessing where to find the appropriate files). -<p> - -For these reasons, and because this field imposes restrictions on the -order in which packages may be unpacked (which can be difficult for -installations from multipart media, for example), <tt/Pre-Depends/ -should be used sparingly, preferably only by packages whose premature -upgrade or installation would hamper the ability of the system to -continue with any upgrade that might be in progress. -<p> - -When the package declaring it is being configured, a -<tt/Pre-Dependency/ will be considered satisfied only if the depending -package has been correctly configured, just as if an ordinary -<tt/Depends/ had been used. -<p> - -However, when a package declaring a predependency is being unpacked -the predependency can be satisfied even if the depended-on package(s) -are only unpacked or half-configured, provided that they have been -configured correctly at some point in the past (and not removed or -partially removed since). In this case both the previously-configured -and currently unpacked or half-configured versions must satisfy any -version clause in the <tt/Pre-Depends/ field. - -</taglist> - -When selecting which level of dependency to use you should consider -how important the depended-on package is to the functionality of the -one declaring the dependency. Some packages are composed of -components of varying degrees of importance. Such a package should -list using <tt/Depends/ the package(s) which are required by the more -important components. The other components' requirements may be -mentioned as Suggestions or Recommendations, as appropriate to the -components' relative importance. - -<sect1>Dependencies on shared libraries -<p> - -The dependency fields listed above are used by packages which need -shared libraries to declare dependencies on the appropriate packages. -<p> - -These dependencies are usually determined automatically using -<prgn/dpkg-shlibdeps/ and inserted in the package control file using -the control file substitution variables mechanism; see <ref -id="srcsubstvars"> and <ref id="sourcetools">. - -<sect1>Deconfiguration due to removal during bulk installations -<p> - -If <prgn/dpkg/ would like to remove a package due to a conflict, as -described above, but this would violate a dependency of some other -package on the system, <prgn/dpkg/ will usually not remove the -conflicting package and halt with an error. -<p> - -However, if the <tt/--auto-deconfigure/ (<tt/-B/) option is used -<prgn/dpkg/ will automatically `deconfigure' the package with the -problematic dependency, so that the conflicting package can be removed -and the package we're trying to install can be installed. If -<prgn/dpkg/ is being asked to install packages (rather than just -unpacking them) it will try to reconfigure the package when it has -unpacked all its arguments, in the hope that one of the other packages -it is installing will satisfy the problematic dependency. -<p> - -<prgn/dselect/ supplies this argument to <prgn/dpkg/ when it invokes it, -so that bulk installations proceed smoothly. - -<sect id="conflicts">Alternative packages - <tt/Conflicts/ and <tt/Replaces/ -<p> - -When one package declares a conflict with another <prgn/dpkg/ will -refuse to allow them to be installed on the system at the same time. -<p> - -If one package is to be installed, the other must be removed first - -if the package being installed is marked as replacing (<ref -id="replaces">) the one on the system, or the one on the system is -marked as deselected, or both packages are marked <tt/Essential/, then -<prgn/dpkg/ will automatically remove the package which is causing the -conflict, otherwise it will halt the installation of the new package -with an error. -<p> - -<prgn/dselect/ makes it hard to select conflicting packages, though the -user can override this if they wish. If they do not override it then -<prgn/dselect/ will select one of the packages for removal, and the user -must make sure it is the right one. In the future <prgn/dselect/ will -look for the presence of a <tt/Replaces/ field to help decide which -package should be installed and which removed. -<p> - -A package will not cause a conflict merely because its configuration -files are still installed; it must be at least half-installed. -<p> - -A special exception is made for packages which declare a conflict with -their own package name, or with a virtual package which they provide -(see below): this does not prevent their installation, and allows a -package to conflict with others providing a replacement for it. You -use this feature when you want the package in question to be the only -package providing something. -<p> - -A <tt/Conflicts/ entry should almost never have an `earlier than' -version clause. This would prevent <prgn/dpkg/ from upgrading or -installing the package which declared such a conflict until the -upgrade or removal of the conflicted-with package had been completed. -This aspect of installation ordering is not handled by <prgn/dselect/, -so that the use <tt/Conflicts/ in this way is likely to cause problems -for `bulk run' upgrades and installations. -<p> - - -<sect id="virtual">Virtual packages - <tt/Provides/ -<p> - -As well as the names of actual (`concrete') packages, the package -relationship fields <tt/Depends/, <tt/Recommends/, <tt/Suggests/ and -<tt/Conflicts/ may mention virtual packages. -<p> - -A virtual package is one which appears in the <tt/Provides/ control -file field of another package. The effect is as if the package(s) -which provide a particular virtual package name had been listed by -name everywhere were the virtual package name appears. -<p> - -If there are both a real and a virtual package of the same name then -the dependency may be satisfied (or the conflict caused) by either the -real package or any of the virtual packages which provide it. This is -so that, for example, supposing we have -<example> -Package: vm -Depends: emacs -</example> -and someone else releases an xemacs package they can say -<example> -Package: xemacs -Provides: emacs -</example> -and all will work in the interim (until a purely virtual package name -is decided on and the <tt/emacs/ and <tt/vm/ packages are changed to -use it). -<p> - -If a dependency or a conflict has a version number attached then only -real packages will be considered to see whether the relationship is -satisfied (or the prohibition violated, for a conflict) - it is -assumed that a real package which provides virtual package is not of -the `right' version. So, a <tt/Provides/ field may not contain -version numbers, and the version number of the concrete package which -provides a particular virtual package will not be looked at when -considering a dependency on or conflict with the virtual package name. -<p> - -If you want to specify which of a set of real packages should be the -default to satisfy a particular dependency on a virtual package, you -should list the real package as alternative before the virtual. -<p> - - -<sect id="replaces"><tt/Replaces/ - overwriting files and replacing packages -<p> - -The <tt/Replaces/ control file field has two purposes, which come into -play in different situations. -<p> - -Virtual packages (<ref id="virtual">) are not considered when looking -at a <tt/Replaces/ field - the packages declared as being replaced -must be mentioned by their real names. - -<sect1>Overwriting files in other packages -<p> - -Firstly, as mentioned before, it is usually an error for a package to -contains files which are on the system in another package, though -currently the <tt/--force-overwrite/ flag is enabled by default, -downgrading the error to a warning, -<p> - -If the overwriting package declares that it replaces the one -containing the file being overwritten then <prgn/dpkg/ will proceed, and -replace the file from the old package with that from the new. The -file will no longer be listed as `owned' by the old package. -<p> - -If a package is completely replaced in this way, so that <prgn/dpkg/ -does not know of any files it still contains, it is considered to have -disappeared. It will be marked as not wanted on the system (selected -for removal) and not installed. Any conffiles details noted in the -package will be ignored, as they will have been taken over by the -replacing package(s). The package's <prgn/postrm/ script will be run to -allow the package to do any final cleanup required. -See <ref id="mscriptsinstact">. -<p> - -In the future <prgn/dpkg/ will discard files which overwrite those from -another package which declares that it replaces the one being -installed (so that you can install an older version of a package -without problems). -<p> - -This usage of <tt/Replaces/ only takes effect when both packages are -at least partially on the system at once, so that it can only happen -if they do not conflict or if the conflict has been overridden. - -<sect1>Replacing whole packages, forcing their removal -<p> - -Secondly, <tt/Replaces/ allows <prgn/dpkg/ and <prgn/dselect/ to resolve -which package should be removed when a conflict - see -<ref id="conflicts">. This usage only takes effect when the two -packages <em/do/ conflict, so that the two effects do not interfere -with each other. -<p> - -<sect>Defaults for satisfying dependencies - ordering -<p> - -Ordering is significant in dependency fields. -<p> - -Usually dselect will suggest to the user that they select the package -with the most `fundamental' class (eg, it will prefer Base packages to -Optional ones), or the one that they `most wanted' to select in some -sense. -<p> - -In the absence of other information <prgn/dselect/ will offer a -default selection of the first named package in a list of -alternatives. -<p> - -However, there is no way to specify the `order' of several packages -which all provide the same thing, when that thing is listed as a -dependency. -<p> - -Therefore a dependency on a virtual package should contain a concrete -package name as the first alternative, so that this is the default. -<p> - -For example, consider the set of packages: - -<example> -Package: glibcdoc -Recommends: info-browser - -Package: info -Provides: info-browser - -Package: emacs -Provides: info-browser -</example> -<p> - -If <prgn/emacs/ and <prgn/info/ both have the same priority then -<prgn/dselect/'s choice is essentially random. Better would be -<example> -Package: glibcdoc -Recommends: info | info-browser -</example> -so that <prgn/dselect/ defaults to selecting the lightweight standalone -info browser. - - - -<chapt id="conffiles">Configuration file handling -<p> - -<prgn/dpkg/ can do a certain amount of automatic handling of package -configuration files. -<p> - -Whether this mechanism is appropriate depends on a number of factors, -but basically there are two approaches to any particular configuration -file. -<p> - -The easy method is to ship a best-effort configuration in the package, -and use <prgn/dpkg/'s conffile mechanism to handle updates. If the user -is unlikely to want to edit the file, but you need them to be able to -without losing their changes, and a new package with a changed version -of the file is only released infrequently, this is a good approach. -<p> - -The hard method is to build the configuration file from scratch in the -<prgn/postinst/ script, and to take the responsibility for fixing any -mistakes made in earlier versions of the package automatically. This -will be appropriate if the file is likely to need to be different on -each system. - -<sect>Automatic handling of configuration files by <prgn/dpkg/ -<p> - -A package may contain a control area file called <tt/conffiles/. This -file should be a list of filenames of configuration files needing -automatic handling, separated by newlines. The filenames should be -absolute pathnames, and the files referred to should actually exist in -the package. -<p> - -When a package is upgraded <prgn/dpkg/ will process the configuration -files during the configuration stage, shortly before it runs the -package's <prgn/postinst/ script, -<p> - -For each file it checks to see whether the version of the file -included in the package is the same as the one that was included in -the last version of the package (the one that is being upgraded -from); it also compares the version currently installed on the system -with the one shipped with the last version. -<p> - -If neither the user nor the package maintainer has changed the file, -it is left alone. If one or the other has changed their version, then -the changed version is preferred - ie, if the user edits their file, -but the package maintainer doesn't ship a different version, the -user's changes will stay, silently, but if the maintainer ships a new -version and the user hasn't edited it the new version will be -installed (with an informative message). If both have changed their -version the user is prompted about the problem and must resolve the -differences themselves. -<p> - -The comparisons are done by calculating the MD5 message digests of the -files, and storing the MD5 of the file as it was included in the most -recent version of the package. -<p> - -When a package is installed for the first time <prgn/dpkg/ will install -the file that comes with it, unless that would mean overwriting a file -already on the filesystem. -<p> - -However, note that <prgn/dpkg/ will <em/not/ replace a conffile that -was removed by the user (or by a script). This is necessary because -with some programs a missing file produces an effect hard or -impossible to achieve in another way, so that a missing file needs to -be kept that way if the user did it. -<p> - -Note that a package should <em/not/ modify a <prgn/dpkg/-handled -conffile in its maintainer scripts. Doing this will lead to -<prgn/dpkg/ giving the user confusing and possibly dangerous options -for conffile update when the package is upgraded. - -<sect>Fully-featured maintainer script configuration handling -<p> - -For files which contain site-specific information such as the hostname -and networking details and so forth, it is better to create the file -in the package's <prgn/postinst/ script. -<p> - -This will typically involve examining the state of the rest of the -system to determine values and other information, and may involve -prompting the user for some information which can't be obtained some -other way. -<p> - -When using this method there are a couple of important issues which -should be considered: -<p> - -If you discover a bug in the program which generates the configuration -file, or if the format of the file changes from one version to the -next, you will have to arrange for the postinst script to do something -sensible - usually this will mean editing the installed configuration -file to remove the problem or change the syntax. You will have to do -this very carefully, since the user may have changed the file, perhaps -to fix the very problem that your script is trying to deal with - you -will have to detect these situations and deal with them correctly. -<p> - -If you do go down this route it's probably a good idea to make the -program that generates the configuration file(s) a separate program in -<tt>/usr/sbin</>, by convention called <tt/<var/package/config/ and -then run that if appropriate from the post-installation script. The -<tt/<var/package/config/ program should not unquestioningly overwrite -an existing configuration - if its mode of operation is geared towards -setting up a package for the first time (rather than any arbitrary -reconfiguration later) you should have it check whether the -configuration already exists, and require a <tt/--force/ flag to -overwrite it. - - - -<chapt id="alternatives">Alternative versions of an interface - -<prgn/update-alternatives/ -<p> - -When several packages all provide different versions of the same -program or file it is useful to have the system select a default, but -to allow the system administrator to change it and have their -decisions respected. -<p> - -For example, there are several versions of the <prgn/vi/ editor, and -there is no reason to prevent all of them from being installed at -once, each under their own name (<prgn/nvi/, <prgn/vim/ or whatever). -Nevertheless it is desirable to have the name <tt/vi/ refer to -something, at least by default. -<p> - -If all the packages involved cooperate, this can be done with -<prgn/update-alternatives/. -<p> - -Each package provides its own version under its own name, and calls -<prgn/update-alternatives/ in its postinst to register its version -(and again in its prerm to deregister it). -<p> - -See the manpage <manref name=update-alternatives section=8> for -details. -<p> - -If <prgn/update-alternatives/ does not seem appropriate you may wish -to consider using diversions instead. - - -<chapt id="diversions">Diversions - overriding a package's version of a file -<p> - -It is possible to have <prgn/dpkg/ not overwrite a file when it -reinstalls the package it belongs to, and to have it put the file from -the package somewhere else instead. -<p> - -This can be used locally to override a package's version of a file, or -by one package to override another's version (or provide a wrapper for -it). -<p> - -Before deciding to use a diversion, read <ref id="alternatives"> to -see if you really want a diversion rather than several alternative -versions of a program. -<p> - -There is a diversion list, which is read by <prgn/dpkg/, and updated -by a special program <prgn/dpkg-divert/. Please see <manref -name=dpkg-divert section=8> for full details of its operation. -<p> - -When a package wishes to divert a file from another, it should call -<prgn/dpkg-divert/ in its preinst to add the diversion and rename the -existing file. For example, supposing that a <prgn/smailwrapper/ -package wishes to install a wrapper around <tt>/usr/sbin/smail</>: -<example> -if [ install = "$1" ]; then - dpkg-divert --package smailwrapper --add --rename \ - --divert /usr/sbin/smail.real /usr/sbin/smail -fi -</example> -Testing <tt/$1/ is necessary so that the script doesn't try to add the -diversion again when <prgn/smailwrapper/ is upgraded. The -<tt/--package smailwrapper/ ensures that <prgn/smailwrapper/'s copy of -<tt>/usr/sbin/smail</> can bypass the diversion and get installed as -the true version. -<p> - -The postrm has to do the reverse: -<example> -if [ remove = "$1" ]; then - dpkg-divert --package smailwrapper --remove --rename \ - --divert /usr/sbin/smail.real /usr/sbin/smail -fi -</example> -<p> - -Do not attempt to divert a file which is vitally important for the -system's operation - when using <prgn/dpkg-divert/ there is a time, -after it has been diverted but before <prgn/dpkg/ has installed the -new version, when the file does not exist. - - -<chapt id="sharedlibs">Shared libraries -<p> - -Packages containing shared libraries must be constructed with a little -care to make sure that the shared library is always available. This -is especially important for packages whose shared libraries are -vitally important, such as the libc. -<p> - -Firstly, your package should install the shared libraries under their -normal names. For example, the <prgn/libgdbm1/ package should install -<tt/libgdbm.so.1.7.3/ as <tt>/usr/lib/libgdbm.so.1.7.3</tt>. The -files should not be renamed or relinked by any prerm or postrm -scripts; <prgn/dpkg/ will take care of renaming things safely without -affecting running programs, and attempts to interfere with this are -likely to lead to problems. -<p> - -Secondly, your package should include the symlink that <prgn/ldconfig/ -would create for the shared libraries. For example, the -<prgn/libgdbm1/ package should include a symlink from -<tt>/usr/lib/libgdbm.so.1</tt> to <tt/libgdbm.so.1.7.3/. This is -needed so that <prgn/ld.so/ can find the library in between the time -<prgn/dpkg/ installs it and <prgn/ldconfig/ is run in the -<prgn/postinst/ script. Futhermore, and <em/this is very important/, -the library must be placed before the symlink pointing to it in the -<tt/.deb/ file. This is so that by the time <prgn/dpkg/ comes to -install the symlink (overwriting the previous symlink pointing at an -older version of the library) the new shared library is already in -place. Currently the way to ensure the ordering is done properly is -to install the library in the appropriate <tt>debian/tmp/.../lib</> -directory before creating the symlink, by putting the commands in the -<tt>debian/rules</> in the appropriate order. -<p> - -If you do the above your package does not need to call <prgn/ldconfig/ -in its maintainer scripts. It is especially important not to call -<prgn/ldconfig/ in the postrm or preinst scripts in the case where the -package is being upgraded (see the programmer's manual), as -<prgn/ldconfig/ will see the temporary names that <prgn/dpkg/ uses for the -files while it is installing them and will make the shared library -links point to them, just before <prgn/dpkg/ continues the installation -and removes the links! - - - -<chapt id="sysvinit">Configuration of <prgn/init/ -<p> - -<sect>Introduction to the <tt/init.d/ scheme -<p> - -The <tt>/etc/init.d</> directory contains the scripts executed by -<prgn/init/ when init state (or `runlevel') is changed (see <manref -name=init section=8>). -<p> - -These scripts are be referenced by symbolic links in the -<tt>/etc/rc<var/n/.d</> directories. When changing runlevels, init -looks in the directory <tt>/etc/rc<var/n/.d</> for the scripts it -should execute, where <var/n/ is the runlevel that is being changed -to. -<p> - -The names of the links all have the form <tt/S<var/mm/<var/script// or -<tt/K<var/mm/<var/script// where <var/mm/ is a two-digit number and -<var/script/ is the name of the script (this should be the same as the -name of the actual script in <tt>/etc/init.d</>. - -When <prgn/init/ changes runlevel first the targets of the links whose -names starting with a <tt/K/ are executed, each with the single -argument <tt/stop/, followed by the scripts prefixed with an <tt/S/, -each with the single argument <tt/start/. The <tt/K/ links are -responsible for killing services and the <tt/S/ link for starting -services upon entering the runlevel. -<p> - -For example, if we are changing from runlevel 2 to runlevel 3, init -will first execute all of the <tt/K/ prefixed scripts it finds in -<tt>/etc/rc3.d</>, and then all of the <tt/S/ prefixed scripts. The -links starting with <tt/K/ will cause the referred-to file to be -executed with an argument of <tt/stop/, and the <tt/S/ links with an -argument of <tt/start/. -<p> - -The two-digit number <var/mm/ is used to decide which order to start -and stop things in - low-numbered links have their scripts run first. -For example, the <tt/K20/ scripts will be executed before the <tt/K30/ -scripts. This is used when a certain service must be started before -another. For example, the name server <prgn/bind/ might need to be -started before the news server <prgn/inn/ so that <prgn/inn/ can set -up its access lists. In this case, the script that starts <prgn/bind/ -should have a lower number than the script that starts <prgn/inn/ so -that it runs first: -<example> -/etc/rc2.d/S17bind -/etc/rc2.d/S70inn -</example> - -<sect>Writing <tt/init.d/ scripts -<p> - -Packages can and should place scripts in <tt>/etc/init.d</> to start -or stop services at boot time or during a change of runlevel. These -scripts should be named <tt>/etc/init.d/<var/package/</>, and they -should accept one argument, saying what to do: <tt/start/, meaning to -starts the service, or <tt/stop/, to stop the service. Optionally -they can support <tt/reload/ which causes the configuration to be -reloaded. -<p> - -The <tt/init.d/ scripts should ensure that they will behave sensibly -if invoked with <tt/start/ when the service is already running, or -with <tt/stop/ when it isn't, and that they don't kill -unfortunately-named user processes. The best way to achieve this is -usually to use <prgn/start-stop-daemon/. -<p> - -These scripts should not fail obscurely when the configuration files -remain but the package has been removed, as the default in <prgn/dpkg/ -is to leave configuration files on the system after the package has -been removed. Only when it is executed with the <tt/--purge/ option -will dpkg remove configuration files. Therefore, you should include a -<tt/test/ statement at the top of the script, like this: -<example> -test -f <var/program-executed-later-in-script/ || exit 0 -</example> - -<sect>Managing the <tt/rc<var/n/.d/ links - <prgn/update-rc.d/ -<p> - -A program is provided, <prgn/update-rc.d/, to make it easier for -package maintainers to arrange for the proper creation and removal of -<tt>/etc/rc<var/n/.d</> symbolic links from their postinst and postrm -scripts. -<p> - -You should use this script to make changes to <tt>/etc/rc<var/n/.d</> -and <em/never/ include any <tt>/etc/rc<var/n/.d</> symbolic links in -the actual archive. -<p> - -By default <prgn/update-rc.d/ will start services in each of the -multi-user state runlevels (2, 3, 4, and 5) and stop them in the halt -runlevel (0), the single-user runlevel (1) and the reboot runlevel -(6). The system administrator will have the opportunity to customize -runlevels by simply adding, moving, or removing the symbolic links in -<tt>/etc/rc<var/n/.d</>. -<p> - -To get the default behaviour for your package, put in your postinst -script -<example> -update-rc.d <var/package/ default >/dev/null -</example> -and in your postrm -<example> -if [ purge = "$1" ]; then - update-rc.d <var/package/ remove >/dev/null -fi -</example> -<p> - -This will use a default sequence number of 20. If it does not matter -when or in which order the script is run, use this default. If it -does, then you should talk to the maintainer of the <prgn/sysvinit/ -package or post to <tt>debian-devel</>, and they will help you choose -a number. -<p> - -For more information about using <tt/update-rc.d/, please consult its -manpage <manref name=update-rc.d section=8>. - -<sect>Boot-time initialisation - <tt/rc.boot/ -<p> - -There is another directory, <tt>/etc/rc.boot</>, which contains -scripts which are run once per machine boot. This facility is -provided for initialisation of hardware devices, cleaning up of -leftover files, and so forth. -<p> - -For example, the <prgn/kbd/ package provides a script here for -initialising the keyboard layout and console font and mode. -<p> - -The files in <tt>/etc/rc.boot</> should <em/not/ be links into -<tt>/etc/init.d</> - they should be the scripts themselves. -<p> - -<tt/rc.boot/ should <em/not/ be used for starting general-purpose -daemons and similar activities. This should be done using the -<tt/rc<var/n/.d/ scheme, above, so that the services can be started -and stopped cleanly when the runlevel changes or the machine is to be -shut down or rebooted. - -<sect>Notes -<p> - -<em/Do not/ include the <tt>/etc/rc<var/n/.d/*</> symbolic links in -the <tt/.deb/ filesystem archive! <em/This will cause problems!/ -You should create them with <prgn/update-rc.d/, as above. -<p> - -<em/Do not/ include the <tt>/etc/rc<var/n/.d/*</> symbolic links in -<prgn/dpkg/'s conffiles list! <em/This will cause problems!/ -<em/Do/, however, include the <tt>/etc/init.d</> scripts in conffiles. - -<sect>Example -<p> - -The <prgn/bind/ DNS (nameserver) package wants to make sure that the -nameserver is running in multiuser runlevels, and is properly shut -down with the system. It puts a script in <tt>/etc/init.d</>, naming -the script appropriately <tt/bind/. As you can see, the script -interprets the argument <tt/reload/ to send the nameserver a <tt/HUP/ -signal (causing it to reload its configuration); this way the user can -say <tt>/etc/init.d/bind reload</> to reload the nameserver. -<p> - -<example> -#!/bin/sh -# Original version by Robert Leslie <rob@mars.org>, edited by iwj -test -x /usr/sbin/named || exit 0 -case "$1" in - start) - test -f /etc/named.boot -a -f /var/named/boot.options || exit 0 - start-stop-daemon --start --verbose --exec /usr/sbin/named - ;; - stop) - start-stop-daemon --stop --verbose \ - --pidfile /var/run/named.pid --exec /usr/sbin/named - ;; - reload) - start-stop-daemon --stop --signal 1 --verbose \ - --pidfile /var/run/named.pid --exec /usr/sbin/named - ;; - *) - echo "Usage: /etc/init.d/bind {start|stop|reload}" >&2 - exit 1 - ;; -esac -exit 0 -</example> -<p> - -Another example on which to base your <tt>/etc/init.d</> scripts is in -<tt>/etc/init.d/skeleton</>. -<p> - -If this package is happy with the default setup from -<prgn/update-rc.d/, namely an ordering number of 20 and having named -running in all runlevels, it can say in its postinst: -<example> -update-rc.d bind default >/dev/null -</example> -And in its postrm, to remove the links when the package is purged: -<example> -if [ purge = "$1" ]; then - update-rc.d acct remove >/dev/null -fi -</example> - - - -<chapt id="methif"><prgn/dselect/'s interface to its installation methods -<p> - -<prgn/dselect/ calls scripts from its installation methods when it -needs to actually access data from the distribution. The core program -<prgn/dselect/ itself just calls these scripts and provides the -package and access method selection interfaces. The installation -methods are responsible for invoking <prgn/dpkg/ as appropriate. -<p> - -Each installation method has three scripts: -<list compact> -<item>Setup installation parameters. -<item>Update list of available packages. -<item>Install. -</list> -<p> - -<prgn/dselect/ searches for methods in <tt>/usr/lib/dpkg/methods</> -and <tt>/usr/local/lib/dpkg/methods</>. - -<sect>Functions of the method scripts -<p> - -The setup script is run just after the user has chosen an installation -method. It should prompt the user for parameters like the site to -NFS-mount or FTP from, the directory to use, or the directory or -filesystem where the <tt/.deb/ files can be found, or the tape or -floppy device to install from. It should store the responses under -<tt>/var/lib/dpkg/methods</> - see below. If no available -packages list is available it should perhaps offer to scan the -available packages. -<p> - -The update script should obtain a list of available packages if -possible, and run <tt/dpkg --update-avail/, <tt/dpkg --merge-avail/ -and/or <tt/dpkg --forget-old-unavail/ to load it into <prgn/dpkg/ and -<prgn/dselect/'s database of available packages. If no packages list -was available and the user was offered and accepted the option of -scanning the actual files available this scan should be done here, -using <tt/dpkg --record-avail/. -<p> - -The install script should feed all the available <tt/.deb/ files to -<tt/dpkg --iGOEB/ (this is equivalent to <tt/dpkg --install ---refuse-downgrade --selected-only --skip-same-version ---auto-deconfigure/). The <tt/-R/ (<tt/--recursive/) option for -traversing subdirectories may also be useful here). -<p> - -If any of these scripts needs to display a message for the user, it -should wait for the user to hit `return' before exiting so that -dselect doesn't immediately rewrite the screen. -<p> - -If a method script succeeds (returns a zero exit status) -<prgn/dselect/ will return immediately to the main menu, with the -`next' option highlighted ready for the user to select it. If it -fails <prgn/dselect/ will display a message and wait for the user to -hit return. - -<sect>Location and arguments of the method scripts -<p> - -A set of scripts (henceforth known as a group) may provide several -methods on the `main menu' with different behaviour. For example, -there might be a generic get-packages-by-FTP group which might provide -methods in the main menu for installation directly from one of the -Debian mirror sites as well as for installation from a user-specified -site. -<p> - -Each group of methods implemented by the same set of scripts should -have a subdirectory <tt>/usr/lib/dpkg/methods/<var/group/</> or -<tt>/usr/local/lib/dpkg/methods/<var/group/</>, containing: -<taglist compact> -<tag><tt/names/ -<item>a list of user-visible methods provided by these scripts. -<tag><tt/setup/ -<tag><tt/update/ -<tag><tt/install/ -<item>executable programs, the scripts themselves. -<tag><tt/desc.<var/option// -<item>description file. -</taglist> -<p> - -<tt/names/ will be formatted as a list of lines, each containing: -<example> -<var/sequence/ <var/method/ <var/summary/ -</example> -<p> - -<var/sequence/ is a two-digit number that will be used much like -<tt/rc.d/ prefixes to control the order in the main menu. If in doubt -use 50. -<p> - -<var/method/ is a name which is displayed by <prgn/dselect/ as the -name of the method, and which will be passed to <tt/setup/, -<tt/update/ and <tt/unpack/ as their first argument. -<p> - -<var/summary/ is the brief description string for <prgn/dselect/'s menu. -<p> - -Each of the three scripts gets the same three arguments: <var/vardir/, -<var/group/ and <var/method/. <var/vardir/ is the base directory for -storing <prgn/dpkg/ and <prgn/dselect/'s state, usually -<tt>/var/lib/dpkg</>; this is passed in so that the <tt/--admindir/ -option to <prgn/dselect/ is honoured). -<p> - -Each option may have an extended description in -<tt/desc.<var/option//. This should be formatted like the extended -description part of a <tt/Description/ field entry <em/shifted one -character to the left/. -<p> - -<tt><var/vardir//methods</> will exist, and a method group may use a -<tt><var/vardir//methods/<var/group/</> directory to store its state. -<p> - -The group name and method name must follow the rules for C identifiers. - -</book> diff --git a/doc/texinfo.debian_mapping b/doc/texinfo.debian_mapping new file mode 100644 index 000000000..35c429827 --- /dev/null +++ b/doc/texinfo.debian_mapping @@ -0,0 +1,18 @@ +% texinfo.debian_mapping +% - sgmlsasp mapping file for TeXinfo/SGML->debiandoc/SGML +% +% Copyright (C) 1997 Klee Dienes <klee@mit.edu> +% +% This is free software; you can redistribute it and/or modify +% it under the terms of the GNU General Public License as +% published by the Free Software Foundation; either version 2, +% or (at your option) any later version. +% +% This is distributed in the hope that it will be useful, but +% WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. +% +% You should have received a copy of the GNU General Public +% License along with dpkg; if not, write to the Free Software +% Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. diff --git a/doc/texinfo.dtd b/doc/texinfo.dtd new file mode 100644 index 000000000..6484519a5 --- /dev/null +++ b/doc/texinfo.dtd @@ -0,0 +1,94 @@ +<!-- + texinfo.dtd - TeXinfo/SGML document type definition + + Copyright (C) 1997 Klee Dienes <klee@mit.edu> + + This is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License as published by the Free + Software Foundation; either version 2, or (at your option) any later + version. + + This is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public + License along with dpkg; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +--> + +<!entity at sdata "@@"> +<!entity copy sdata "@copyright{}"> +<!entity amp sdata "@&"> +<!entity lt sdata "<"> +<!entity gt sdata ">"> +<!entity lsqb sdata "["> +<!entity rsqb sdata "]"> +<!entity bsol sdata "\"> + +<!element setfilename - o (#pcdata)> + +<!element titlepage - - (title?,author?,date?,abstract?)> +<!element texinfo - - (setfilename,titlepage?,chapter+,closing)> + +<!element title - - (#pcdata)> +<!element author - - (#pcdata)> +<!element date - - (#pcdata)> +<!element abstract - - (#pcdata|file|samp|var|code)*> + +<!element quotation - - (#pcdata)> +<!element example - - (#pcdata)> +<!element lisp - - (#pcdata)> +<!element smallexample - - (#pcdata)> +<!element smalllisp - - (#pcdata)> +<!element display - - (#pcdata)> +<!element format - - (#pcdata)> + +<!element code - - (#pcdata)> +<!element kbd - - (#pcdata)> +<!element key - - (#pcdata)> +<!element samp - - (#pcdata)> +<!element var - - (#pcdata)> +<!element file - - (#pcdata)> +<!element dfn - - (#pcdata)> +<!element cite - - (#pcdata)> + +<!element tt - - (#pcdata)+> +<!element em - - (#pcdata)+> +<!element it - - (#pcdata)+> + +<!element heading o o (#pcdata|label|code|var|file|samp)+> +<!element body o o (#pcdata|index|ref|file|samp|var|code|example|tt|em|it|htmlurl|url|itemize|enumerate|table|ftable|vtable)+> + +<!element chapter - o (heading, (section|cindex|findex|vindex|kindex|pindex|tindex|p)*)> +<!element section - o (heading, (subsection|cindex|findex|vindex|kindex|pindex|tindex|p)*)> +<!element subsection - o (heading, (subsubsection|cindex|findex|vindex|kindex|pindex|tindex|p)*)> +<!element subsubsection - o (heading, (cindex|findex|vindex|kindex|pindex|tindex|p)*)> + +<!element itemize - - (item)*> +<!element enumerate - - (item)*> +<!element table - - (item, body)*> +<!element ftable - - (item, body)*> +<!element vtable - - (item, body)*> + +<!element item - o (body)> + +<!element p - o (body)> + +<!element contents - o empty> +<!element shortcontents - o empty> +<!element summarycontents - o empty> + +<!element printindex - o empty> + +<!attlist printindex name NAME "fn"> + +<!element closing o o (contents|shortcontents|summarycontents|printindex)*> + +<!element cindex - - (#pcdata|code|var|file|samp)+> +<!element findex - - (#pcdata|code|var|file|samp)+> +<!element vindex - - (#pcdata|code|var|file|samp)+> +<!element kindex - - (#pcdata|code|var|file|samp)+> +<!element pindex - - (#pcdata|code|var|file|samp)+> +<!element tindex - - (#pcdata|code|var|file|samp)+> diff --git a/doc/texinfo.texi_mapping b/doc/texinfo.texi_mapping new file mode 100644 index 000000000..2f879144a --- /dev/null +++ b/doc/texinfo.texi_mapping @@ -0,0 +1,120 @@ +% texinfo.mapping - sgmlsasp mapping file for TeXinfo/SGML->TeXinfo +% +% Copyright (C) 1997 Klee Dienes <klee@mit.edu> +% +% This is free software; you can redistribute it and/or modify +% it under the terms of the GNU General Public License as +% published by the Free Software Foundation; either version 2, +% or (at your option) any later version. +% +% This is distributed in the hope that it will be useful, but +% WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. +% +% You should have received a copy of the GNU General Public +% License along with dpkg; if not, write to the Free Software +% Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +<texinfo> "\\input texinfo\n" +</texinfo> "@bye\n" + +<setfilename> "@setfilename " +</setfilename> "\n" + +<titlepage> "@titlepage\n" +</titlepage> "\n@end titlepage\n" + +<title> "@title " +</title> "\n" + +<author> "@author " +</author> "\n" + +<chapter> "@chapter " +<section> "@section " +<subsection> "@subsection " +<subsubsection> "@subsubsection " + +<heading> "" +</heading> "\n" + +<code> "@code{" +</code> "}" + +<kbd> "@kbd{" +</kbd> "}" + +<key> "@key{" +</key> "}" + +<p> "\n\n" + +<samp> "@samp{" +</samp> "}" + +<var> "@var{" +</var> "}" + +<file> "@file{" +</file> "}" + +<dfn> "@dfn{" +</dfn> "}" + +<cite> "@cite{" +</cite> "}" + +<itemize> "@itemize @asis\n" +</itemize> "@end itemize\n" + +<table> "@table @asis\n" +</table> "\n@end table\n" + +<item> "@item " +</item> "\n" + +<quotation> "@quotation\n" +</quotation> "@end quotation\n" + +<example> "@example\n" +</example> "@end example\n" + +<lisp> "@lisp\n" +</lisp> "@end lisp\n" + +<smallexample> "@smallexample\n" +</smallexample> "@end smallexample\n" + +<smalllisp> "@smalllisp\n" +</smalllisp> "@end smalllisp\n" + +<display> "@display\n" +</display> "@end display\n" + +<format> "@format\n" +</format> "@end format\n" + +<contents> "@contents\n" +<shortcontents> "@shortcontents\n" +<summarycontents> "@summarycontents\n" + +<cindex> "@cindex " +</cindex> "\n" + +<findex> "@findex " +</findex> "\n" + +<vindex> "@vindex " +</vindex> "\n" + +<kindex> "@kindex " +</kindex> "\n" + +<pindex> "@pindex " +</pindex> "\n" + +<tindex> "@tindex " +</tindex> "\n" + +<printindex> "@printindex [name]\n"
\ No newline at end of file diff --git a/dpkg-deb/.cvsignore b/dpkg-deb/.cvsignore new file mode 100644 index 000000000..70845e08e --- /dev/null +++ b/dpkg-deb/.cvsignore @@ -0,0 +1 @@ +Makefile.in diff --git a/dpkg-deb/Makefile.am b/dpkg-deb/Makefile.am new file mode 100644 index 000000000..2bead26ba --- /dev/null +++ b/dpkg-deb/Makefile.am @@ -0,0 +1,36 @@ +## Process this file with automake to produce a Makefile.in + +AUTOMAKE_OPTIONS = 1.1 foreign + +## Directory definitions + +localedir = $(datadir)/locale + +## Various options + +CFLAGS = @CFLAGS@ @CWARNS@ -g $(XCFLAGS) -DLOCALEDIR=\"$(localedir)\" +OPTCFLAGS = @CFLAGS@ @OPTCFLAGS@ @CWARNS@ -g $(XCFLAGS) +LDFLAGS = @LDFLAGS@ $(XLDFLAGS) +LIBS = @INTLLIBS@ @LIBS@ $(XLIBS) + +CXXFLAGS = @CXXFLAGS@ @CWARNS@ -g $(XCXXFLAGS) +OPTCXXFLAGS = @CXXFLAGS @OPTCFLAGS@ @CWARNS@ -g $(XCXXFLAGS) + +DEFS = -I$(top_srcdir)/include -I$(top_srcdir) -I$(srcdir) \ + -I$(top_builddir) -I$(top_builddir)/include -I. \ + -I$(top_srcdir)/intl -I$(top_builddir)/intl @DEFS@ + +## Automake variables + +MAINTAINERCLEANFILES = $(srcdir)/Makefile.in +EXTRA_DIST = dpkg-deb.1 + +## Rules + +bin_PROGRAMS = dpkg-deb +man_MANS = dpkg-deb.1 + +dpkg_deb_SOURCES = main.c build.c extract.c info.c dpkg-deb.h +dpkg_deb_LDADD = ../lib/libdpkg.la ../lib/myopt.o + +## End of file. diff --git a/dpkg-deb/Makefile.in b/dpkg-deb/Makefile.in deleted file mode 100644 index e3377a7f6..000000000 --- a/dpkg-deb/Makefile.in +++ /dev/null @@ -1,66 +0,0 @@ -# Copyright (C) 1994 Ian Murdock <imurdock@debian.org> -# Copyright (C) 1994,1995 Ian Jackson <ijackson@nyx.cs.du.edu> -# -# This is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as -# published by the Free Software Foundation; either version 2, -# or (at your option) any later version. -# -# This is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public -# License along with dpkg; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -srcdir = @srcdir@ -VPATH = @srcdir@ - -prefix = @prefix@ -exec_prefix = $(prefix) -bindir = $(exec_prefix)/bin -libdir = $(prefix)/lib -mandir = $(prefix)/man -man1dir = $(mandir)/man1 -man1 = 1 - -SRC = main.c build.c extract.c info.c -OBJ = main.o build.o extract.o info.o - -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ - -CC = @CC@ - -CFLAGS = @CFLAGS@ @CWARNS@ -g $(XCFLAGS) -LDFLAGS = $(XLDFLAGS) -LIBS = -L../lib -ldpkg $(XLIBS) -ALL_CFLAGS = -I../include -I.. @DEFS@ $(CFLAGS) - -.SUFFIXES: .c .o - -.c.o: - $(CC) $(ALL_CFLAGS) -c $< - -all: dpkg-deb - -dpkg-deb: $(OBJ) ../lib/libdpkg.a - $(CC) $(LDFLAGS) -o dpkg-deb $(OBJ) $(LIBS) - -$(OBJ): dpkg-deb.h ../config.h ../include/dpkg.h -build.o: ../include/dpkg-db.h -info.o extract.o main.o: ../include/myopt.h -main.o: ../version.h - -clean: - rm -f *.o core dpkg-deb - -distclean: clean - rm -f Makefile *.orig *~ *.~* ./#*# - -install: all - $(INSTALL_PROGRAM) -s dpkg-deb $(bindir)/dpkg-deb - $(INSTALL_DATA) dpkg-deb.1 $(man1dir)/dpkg-deb.$(man1) diff --git a/dpkg-deb/build.c b/dpkg-deb/build.c index 277c2ebe8..d02ae0e85 100644 --- a/dpkg-deb/build.c +++ b/dpkg-deb/build.c @@ -34,9 +34,9 @@ #include <ctype.h> #include <assert.h> -#include "config.h" -#include "dpkg.h" -#include "dpkg-db.h" +#include <config.h> +#include <dpkg.h> +#include <dpkg-db.h> #include "dpkg-deb.h" #ifndef S_ISLNK @@ -47,7 +47,7 @@ static void checkversion(const char *vstring, const char *valuename, int *errs) const char *p; if (!vstring || !*vstring) return; for (p=vstring; *p; p++) if (isdigit(*p)) return; - fprintf(stderr, BACKEND " - error: %s (`%s') doesn't contain any digits\n", + fprintf(stderr, _("dpkg-deb - error: %s (`%s') doesn't contain any digits\n"), valuename, vstring); (*errs)++; } @@ -69,14 +69,14 @@ void do_build(const char *const *argv) { char conffilename[MAXCONFFILENAME+1]; time_t thetime= 0; - directory= *argv++; if (!directory) badusage("--build needs a directory argument"); + directory= *argv++; if (!directory) badusage(_("--build needs a directory argument")); subdir= 0; if ((debar= *argv++) !=0) { - if (*argv) badusage("--build takes at most two arguments"); + if (*argv) badusage(_("--build takes at most two arguments")); if (debar) { if (stat(debar,&debarstab)) { if (errno != ENOENT) - ohshite("unable to check for existence of archive `%.250s'",debar); + ohshite(_("unable to check for existence of archive `%.250s'"),debar); } else if (S_ISDIR(debarstab.st_mode)) { subdir= 1; } @@ -89,9 +89,9 @@ void do_build(const char *const *argv) { if (nocheckflag) { if (subdir) - ohshit("target is directory - cannot skip control file check"); - printf(BACKEND ": warning, not checking contents of control area.\n" - BACKEND ": building an unknown package in `%s'.\n", debar); + ohshit(_("target is directory - cannot skip control file check")); + printf(_("dpkg-deb: warning, not checking contents of control area.\n" + "dpkg-deb: building an unknown package in `%s'.\n"), debar); } else { controlfile= m_malloc(strlen(directory) + sizeof(BUILDCONTROLDIR) + sizeof(CONTROLFILE) + sizeof(CONFFILESFILE) + @@ -107,20 +107,20 @@ void do_build(const char *const *argv) { if (strspn(checkedinfo->name, "abcdefghijklmnopqrstuvwxyz0123456789+-.") != strlen(checkedinfo->name)) - ohshit("package name has characters that aren't lowercase alphanums or `-+.'"); + ohshit(_("package name has characters that aren't lowercase alphanums or `-+.'")); if (checkedinfo->priority == pri_other) { - fprintf(stderr, "warning, `%s' contains user-defined Priority value `%s'\n", + fprintf(stderr, _("warning, `%s' contains user-defined Priority value `%s'\n"), controlfile, checkedinfo->otherpriority); warns++; } for (field= checkedinfo->available.arbs; field; field= field->next) { - fprintf(stderr, "warning, `%s' contains user-defined field `%s'\n", + fprintf(stderr, _("warning, `%s' contains user-defined field `%s'\n"), controlfile, field->name); warns++; } checkversion(checkedinfo->available.version.version,"(upstream) version",&errs); checkversion(checkedinfo->available.version.revision,"Debian revision",&errs); - if (errs) ohshit("%d errors in control file",errs); + if (errs) ohshit(_("%d errors in control file"),errs); if (subdir) { versionstring= versiondescribe(&checkedinfo->available.version,vdew_never); @@ -131,15 +131,15 @@ void do_build(const char *const *argv) { arch[0] ? "_" : "", arch); debar= m; } - printf(BACKEND ": building package `%s' in `%s'.\n", checkedinfo->name, debar); + printf(_("dpkg-deb: building package `%s' in `%s'.\n"), checkedinfo->name, debar); strcpy(controlfile, directory); strcat(controlfile, "/" BUILDCONTROLDIR "/"); if (lstat(controlfile,&mscriptstab)) ohshite("unable to stat control directory"); if (!S_ISDIR(mscriptstab.st_mode)) ohshit("control directory is not a directory"); if ((mscriptstab.st_mode & 07757) != 0755) - ohshit("control directory has bad permissions %03lo (must be >=0755 " - "and <=0775)", (unsigned long)(mscriptstab.st_mode & 07777)); + ohshit(_("control directory has bad permissions %03lo (must be >=0755 " + "and <=0775)"), (unsigned long)(mscriptstab.st_mode & 07777)); for (mscriptp= maintainerscripts; *mscriptp; mscriptp++) { strcpy(controlfile, directory); @@ -149,13 +149,13 @@ void do_build(const char *const *argv) { if (!lstat(controlfile,&mscriptstab)) { if (S_ISLNK(mscriptstab.st_mode)) continue; if (!S_ISREG(mscriptstab.st_mode)) - ohshit("maintainer script `%.50s' is not a plain file or symlink",*mscriptp); + ohshit(_("maintainer script `%.50s' is not a plain file or symlink"),*mscriptp); if ((mscriptstab.st_mode & 07557) != 0555) - ohshit("maintainer script `%.50s' has bad permissions %03lo " - "(must be >=0555 and <=0775)", + ohshit(_("maintainer script `%.50s' has bad permissions %03lo " + "(must be >=0555 and <=0775)"), *mscriptp, (unsigned long)(mscriptstab.st_mode & 07777)); } else if (errno != ENOENT) { - ohshite("maintainer script `%.50s' is not stattable",*mscriptp); + ohshite(_("maintainer script `%.50s' is not stattable"),*mscriptp); } } @@ -164,9 +164,10 @@ void do_build(const char *const *argv) { if ((cf= fopen(controlfile,"r"))) { while (fgets(conffilename,MAXCONFFILENAME+1,cf)) { n= strlen(conffilename); - if (!n) ohshite("empty string from fgets reading conffiles"); + if (!n) ohshite(_("empty string from fgets reading conffiles")); if (conffilename[n-1] != '\n') { - fprintf(stderr, "warning, conffile name `%.50s...' is too long", conffilename); + fprintf(stderr, _("warning, conffile name `%.50s...' is too long, or missing final newline\n"), + conffilename); warns++; while ((c= getc(cf)) != EOF && c != '\n'); continue; @@ -177,46 +178,46 @@ void do_build(const char *const *argv) { strcat(controlfile, conffilename); if (lstat(controlfile,&controlstab)) { if (errno == ENOENT) - ohshit("conffile `%.250s' does not appear in package",conffilename); + ohshit(_("conffile `%.250s' does not appear in package"),conffilename); else - ohshite("conffile `%.250s' is not stattable",conffilename); + ohshite(_("conffile `%.250s' is not stattable"),conffilename); } else if (!S_ISREG(controlstab.st_mode)) { - fprintf(stderr, "warning, conffile `%s'" - " is not a plain file\n", conffilename); + fprintf(stderr, _("warning, conffile `%s'" + " is not a plain file\n"), conffilename); warns++; } } - if (ferror(cf)) ohshite("error reading conffiles file"); + if (ferror(cf)) ohshite(_("error reading conffiles file")); fclose(cf); } else if (errno != ENOENT) { - ohshite("error opening conffiles file"); + ohshite(_("error opening conffiles file")); } if (warns) { - if (fprintf(stderr, BACKEND ": ignoring %d warnings about the control" - " file(s)\n", warns) == EOF) werr("stderr"); + if (fprintf(stderr, _("dpkg-deb: ignoring %d warnings about the control" + " file(s)\n"), warns) == EOF) werr("stderr"); } } if (ferror(stdout)) werr("stdout"); - if (!(ar=fopen(debar,"wb"))) ohshite("unable to create `%.255s'",debar); - if (setvbuf(ar, 0, _IONBF, 0)) ohshite("unable to unbuffer `%.255s'",debar); + if (!(ar=fopen(debar,"wb"))) ohshite(_("unable to create `%.255s'"),debar); + if (setvbuf(ar, 0, _IONBF, 0)) ohshite(_("unable to unbuffer `%.255s'"),debar); m_pipe(p1); if (!(c1= m_fork())) { m_dup2(p1[1],1); close(p1[0]); close(p1[1]); - if (chdir(directory)) ohshite("failed to chdir to `%.255s'",directory); - if (chdir(BUILDCONTROLDIR)) ohshite("failed to chdir to .../" BUILDCONTROLDIR); - execlp(TAR,"tar","-cf","-",".",(char*)0); ohshite("failed to exec tar -cf"); + if (chdir(directory)) ohshite(_("failed to chdir to `%.255s'"),directory); + if (chdir(BUILDCONTROLDIR)) ohshite(_("failed to chdir to .../DEBIAN")); + execlp(TAR,"tar","-cf","-",".",(char*)0); ohshite(_("failed to exec tar -cf")); } close(p1[1]); - if (!(gz= tmpfile())) ohshite("failed to make tmpfile (control)"); + if (!(gz= tmpfile())) ohshite(_("failed to make tmpfile (control)")); if (!(c2= m_fork())) { m_dup2(p1[0],0); m_dup2(fileno(gz),1); close(p1[0]); - execlp(GZIP,"gzip","-9c",(char*)0); ohshite("failed to exec gzip -9c"); + execlp(GZIP,"gzip","-9c",(char*)0); ohshite(_("failed to exec gzip -9c")); } close(p1[0]); waitsubproc(c2,"gzip -9c",0); waitsubproc(c1,"tar -cf",0); - if (fstat(fileno(gz),&controlstab)) ohshite("failed to fstat tmpfile (control)"); + if (fstat(fileno(gz),&controlstab)) ohshite(_("failed to fstat tmpfile (control)")); if (oldformatflag) { if (fprintf(ar, "%-8s\n%ld\n", OLDARCHIVEVERSION, (long)controlstab.st_size) == EOF) werr(debar); @@ -236,36 +237,36 @@ void do_build(const char *const *argv) { werr(debar); } - if (lseek(fileno(gz),0,SEEK_SET)) ohshite("failed to rewind tmpfile (control)"); + if (lseek(fileno(gz),0,SEEK_SET)) ohshite(_("failed to rewind tmpfile (control)")); if (!(c3= m_fork())) { m_dup2(fileno(gz),0); m_dup2(fileno(ar),1); - execlp(CAT,"cat",(char*)0); ohshite("failed to exec cat (control)"); + execlp(CAT,"cat",(char*)0); ohshite(_("failed to exec cat (control)")); } waitsubproc(c3,"cat (control)",0); if (!oldformatflag) { fclose(gz); - if (!(gz= tmpfile())) ohshite("failed to make tmpfile (data)"); + if (!(gz= tmpfile())) ohshite(_("failed to make tmpfile (data)")); } m_pipe(p2); if (!(c4= m_fork())) { m_dup2(p2[1],1); close(p2[0]); close(p2[1]); - if (chdir(directory)) ohshite("failed to chdir to `%.255s'",directory); + if (chdir(directory)) ohshite(_("failed to chdir to `%.255s'"),directory); execlp(TAR,"tar","--exclude",BUILDCONTROLDIR,"-cf","-",".",(char*)0); - ohshite("failed to exec tar --exclude"); + ohshite(_("failed to exec tar --exclude")); } close(p2[1]); if (!(c5= m_fork())) { m_dup2(p2[0],0); close(p2[0]); m_dup2(oldformatflag ? fileno(ar) : fileno(gz),1); execlp(GZIP,"gzip","-9c",(char*)0); - ohshite("failed to exec gzip -9c from tar --exclude"); + ohshite(_("failed to exec gzip -9c from tar --exclude")); } close(p2[0]); waitsubproc(c5,"gzip -9c from tar --exclude",0); waitsubproc(c4,"tar --exclude",0); if (!oldformatflag) { - if (fstat(fileno(gz),&datastab)) ohshite("failed to fstat tmpfile (data)"); + if (fstat(fileno(gz),&datastab)) ohshite("_(failed to fstat tmpfile (data))"); if (fprintf(ar, "%s" DATAMEMBER "%-12lu0 0 100644 %-10ld`\n", @@ -274,10 +275,10 @@ void do_build(const char *const *argv) { (long)datastab.st_size) == EOF) werr(debar); - if (lseek(fileno(gz),0,SEEK_SET)) ohshite("failed to rewind tmpfile (data)"); + if (lseek(fileno(gz),0,SEEK_SET)) ohshite(_("failed to rewind tmpfile (data)")); if (!(c3= m_fork())) { m_dup2(fileno(gz),0); m_dup2(fileno(ar),1); - execlp(CAT,"cat",(char*)0); ohshite("failed to exec cat (data)"); + execlp(CAT,"cat",(char*)0); ohshite(_("failed to exec cat (data)")); } waitsubproc(c3,"cat (data)",0); diff --git a/dpkg-deb/debugmake b/dpkg-deb/debugmake deleted file mode 100755 index 638c74dc9..000000000 --- a/dpkg-deb/debugmake +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh -set -x -make XCFLAGS='-g -O0' LDFLAGS=-g LIBS='-lefence -L../lib -ldpkg' "$@" diff --git a/dpkg-deb/extract.c b/dpkg-deb/extract.c index 5b3f2b77b..7f080a8d0 100644 --- a/dpkg-deb/extract.c +++ b/dpkg-deb/extract.c @@ -34,10 +34,10 @@ #include <assert.h> #include <ar.h> -#include "config.h" -#include "dpkg.h" -#include "dpkg-deb.h" -#include "myopt.h" +#include <config.h> +#include <dpkg.h> +#include <dpkg-deb.h> +#include <myopt.h> static void movecontrolfiles(const char *thing) { char buf[200]; @@ -45,16 +45,16 @@ static void movecontrolfiles(const char *thing) { sprintf(buf, "mv %s/* . && rmdir %s", thing, thing); if (!(c1= m_fork())) { - execlp("sh","sh","-c",buf,(char*)0); ohshite("failed to exec sh -c mv foo/* &c"); + execlp("sh","sh","-c",buf,(char*)0); ohshite(_("failed to exec sh -c mv foo/* &c")); } waitsubproc(c1,"sh -c mv foo/* &c",0); } static void readfail(FILE *a, const char *filename, const char *what) { if (ferror(a)) { - ohshite("error reading %s from %.255s",what,filename); + ohshite(_("error reading %s from %.255s"),what,filename); } else { - ohshit("unexpected end of file in %s in %.255s",what,filename); + ohshit(_("unexpected end of file in %s in %.255s"),what,filename); } } @@ -65,14 +65,14 @@ static unsigned long parseheaderlength(const char *inh, size_t len, char *endp; if (memchr(inh,0,len)) - ohshit("file `%.250s' is corrupt - %.250s length contains nulls",fn,what); + ohshit(_("file `%.250s' is corrupt - %.250s length contains nulls"),fn,what); assert(sizeof(lintbuf) > len); memcpy(lintbuf,inh,len); lintbuf[len]= ' '; *strchr(lintbuf,' ')= 0; r= strtoul(lintbuf,&endp,10); if (*endp) - ohshit("file `%.250s' is corrupt - bad digit (code %d) in %s",fn,*endp,what); + ohshit(_("file `%.250s' is corrupt - bad digit (code %d) in %s"),fn,*endp,what); return r; } @@ -102,9 +102,12 @@ void extracthalf(const char *debar, const char *directory, char *cur; struct ar_hdr arh; int readfromfd, oldformat, header_done, adminmember, c; +#if defined(__GLIBC__) && (__GLIBC__ == 2) && (__GLIBC_MINOR__ > 0) + fpos_t fpos; +#endif - ar= fopen(debar,"r"); if (!ar) ohshite("failed to read archive `%.255s'",debar); - if (fstat(fileno(ar),&stab)) ohshite("failed to fstat archive"); + ar= fopen(debar,"r"); if (!ar) ohshite(_("failed to read archive `%.255s'"),debar); + if (fstat(fileno(ar),&stab)) ohshite(_("failed to fstat archive")); if (!fgets(versionbuf,sizeof(versionbuf),ar)) readfail(ar,debar,"version number"); if (!strcmp(versionbuf,"!<arch>\n")) { @@ -116,26 +119,26 @@ void extracthalf(const char *debar, const char *directory, if (fread(&arh,1,sizeof(arh),ar) != sizeof(arh)) readfail(ar,debar,"between members"); if (memcmp(arh.ar_fmag,ARFMAG,sizeof(arh.ar_fmag))) - ohshit("file `%.250s' is corrupt - bad magic at end of first header",debar); + ohshit(_("file `%.250s' is corrupt - bad magic at end of first header"),debar); memberlen= parseheaderlength(arh.ar_size,sizeof(arh.ar_size), debar,"member length"); if (memberlen<0) - ohshit("file `%.250s' is corrupt - negative member length %ld",debar,memberlen); + ohshit(_("file `%.250s' is corrupt - negative member length %ld"),debar,memberlen); if (!header_done) { if (memcmp(arh.ar_name,"debian-binary ",sizeof(arh.ar_name))) - ohshit("file `%.250s' is not a debian binary archive (try dpkg-split?)",debar); + ohshit(_("file `%.250s' is not a debian binary archive (try dpkg-split?)"),debar); infobuf= m_malloc(memberlen+1); if (fread(infobuf,1, memberlen + (memberlen&1), ar) != memberlen + (memberlen&1)) readfail(ar,debar,"header info member"); infobuf[memberlen]= 0; cur= strchr(infobuf,'\n'); - if (!cur) ohshit("archive has no newlines in header"); + if (!cur) ohshit(_("archive has no newlines in header")); *cur= 0; cur= strchr(infobuf,'.'); - if (!cur) ohshit("archive has no dot in version number"); + if (!cur) ohshit(_("archive has no dot in version number")); *cur= 0; if (strcmp(infobuf,"2")) - ohshit("archive version %.250s not understood, get newer " BACKEND, infobuf); + ohshit(_("archive version %.250s not understood, get newer dpkg-deb"), infobuf); *cur= '.'; strncpy(versionbuf,infobuf,sizeof(versionbuf)); versionbuf[sizeof(versionbuf)-1]= 0; @@ -151,12 +154,12 @@ void extracthalf(const char *debar, const char *directory, !memcmp(arh.ar_name,DATAMEMBER,sizeof(arh.ar_name)) ? 0 : -1; if (adminmember == -1) { - ohshit("file `%.250s' contains ununderstood data member %.*s, giving up", + ohshit(_("file `%.250s' contains ununderstood data member %.*s, giving up"), debar, (int)sizeof(arh.ar_name), arh.ar_name); } if (adminmember == 1) { if (ctrllennum != 0) - ohshit("file `%.250s' contains two control members, giving up", debar); + ohshit(_("file `%.250s' contains two control members, giving up"), debar); ctrllennum= memberlen; } if (!adminmember != !admininfo) { @@ -168,8 +171,8 @@ void extracthalf(const char *debar, const char *directory, } if (admininfo >= 2) - if (printf(" new debian package, version %s.\n" - " size %ld bytes: control archive= %ld bytes.\n", + if (printf(_(" new debian package, version %s.\n" + " size %ld bytes: control archive= %ld bytes.\n"), versionbuf, (long)stab.st_size, ctrllennum) == EOF || fflush(stdout)) werr("stdout"); @@ -182,11 +185,11 @@ void extracthalf(const char *debar, const char *directory, if (!fgets(ctrllenbuf,sizeof(ctrllenbuf),ar)) readfail(ar,debar,"ctrl information length"); if (sscanf(ctrllenbuf,"%ld%c%d",&ctrllennum,&nlc,&dummy) !=2 || nlc != '\n') - ohshit("archive has malformatted ctrl len `%s'",ctrllenbuf); + ohshit(_("archive has malformatted ctrl len `%s'"),ctrllenbuf); if (admininfo >= 2) - if (printf(" old debian package, version %s.\n" - " size %ld bytes: control archive= %ld, main archive= %ld.\n", + if (printf(_(" old debian package, version %s.\n" + " size %ld bytes: control archive= %ld, main archive= %ld.\n"), versionbuf, (long)stab.st_size, ctrllennum, (long) (stab.st_size - ctrllennum - strlen(ctrllenbuf) - l)) == EOF || fflush(stdout)) werr("stdout"); @@ -199,33 +202,39 @@ void extracthalf(const char *debar, const char *directory, } else { if (!strncmp(versionbuf,"!<arch>",7)) { - if (fprintf(stderr, BACKEND - ": file looks like it might be an archive which has been\n" - BACKEND ": corrupted by being downloaded in ASCII mode\n") + if (fprintf(stderr, + _("dpkg-deb: file looks like it might be an archive which has been\n" + "dpkg-deb: corrupted by being downloaded in ASCII mode\n")) == EOF) werr("stderr"); } - ohshit("`%.255s' is not a debian format archive",debar); + ohshit(_("`%.255s' is not a debian format archive"),debar); } +#if defined(__GLIBC__) && (__GLIBC__ == 2) && (__GLIBC_MINOR__ > 0) + if(fgetpos(ar, &fpos)) ohshit(_("fgetpos failed")); +#endif fflush(ar); +#if defined(__GLIBC__) && (__GLIBC__ == 2) && (__GLIBC_MINOR__ > 0) + if(fsetpos(ar, &fpos)) ohshit(_("fsetpos failed")); +#endif if (oldformat) { if (admininfo) { m_pipe(p1); if (!(c1= m_fork())) { close(p1[0]); - if (!(pi= fdopen(p1[1],"w"))) ohshite("failed to fdopen p1 in paste"); + if (!(pi= fdopen(p1[1],"w"))) ohshite(_("failed to fdopen p1 in paste")); errno=0; if (fwrite(ctrlarea,1,ctrllennum,pi) != ctrllennum) - ohshit("failed to write to gzip -dc"); - if (fclose(pi)) ohshit("failed to close gzip -dc"); + ohshit(_("failed to write to gzip -dc")); + if (fclose(pi)) ohshit(_("failed to close gzip -dc")); exit(0); } close(p1[1]); readfromfd= p1[0]; } else { if (lseek(fileno(ar),l+strlen(ctrllenbuf)+ctrllennum,SEEK_SET) == -1) - ohshite("failed to syscall lseek to files archive portion"); + ohshite(_("failed to syscall lseek to files archive portion")); c1= -1; readfromfd= fileno(ar); } @@ -233,13 +242,13 @@ void extracthalf(const char *debar, const char *directory, m_pipe(p1); if (!(c1= m_fork())) { close(p1[0]); - if (!(pi= fdopen(p1[1],"w"))) ohshite("failed to fdopen p1 in copy"); + if (!(pi= fdopen(p1[1],"w"))) ohshite(_("failed to fdopen p1 in copy")); while (memberlen > 0) { if ((c= getc(ar)) == EOF) readfail(ar,debar,"member data"); - if (putc(c,pi) == EOF) ohshite("failed to write to pipe in copy"); + if (putc(c,pi) == EOF) ohshite(_("failed to write to pipe in copy")); memberlen--; } - if (fclose(pi) == EOF) ohshite("failed to close pipe in copy"); + if (fclose(pi) == EOF) ohshite(_("failed to close pipe in copy")); exit(0); } close(p1[1]); @@ -252,7 +261,7 @@ void extracthalf(const char *debar, const char *directory, m_dup2(readfromfd,0); if (admininfo) close(p1[0]); if (taroption) { m_dup2(p2[1],1); close(p2[0]); close(p2[1]); } - execlp(GZIP,"gzip","-dc",(char*)0); ohshite("failed to exec gzip -dc"); + execlp(GZIP,"gzip","-dc",(char*)0); ohshite(_("failed to exec gzip -dc")); } if (readfromfd != fileno(ar)) close(readfromfd); close(p2[1]); @@ -260,10 +269,10 @@ void extracthalf(const char *debar, const char *directory, if (taroption && directory) { if (chdir(directory)) { if (errno == ENOENT) { - if (mkdir(directory,0777)) ohshite("failed to create directory"); - if (chdir(directory)) ohshite("failed to chdir to directory after creating it"); + if (mkdir(directory,0777)) ohshite(_("failed to create directory")); + if (chdir(directory)) ohshite(_("failed to chdir to directory after creating it")); } else { - ohshite("failed to chdir to directory"); + ohshite(_("failed to chdir to directory")); } } } @@ -276,7 +285,7 @@ void extracthalf(const char *debar, const char *directory, strcat(buffer, "f"); m_dup2(p2[0],0); execlp(TAR,"tar",buffer,"-",(char*)0); - ohshite("failed to exec tar"); + ohshite(_("failed to exec tar")); } close(p2[0]); waitsubproc(c3,"tar",0); @@ -299,13 +308,13 @@ static void controlextractvextract(int admin, const char *debar, *directory; if (!(debar= *argv++)) - badusage("--%s needs a .deb filename argument",cipaction->olong); + badusage(_("--%s needs a .deb filename argument"),cipaction->olong); if (!(directory= *argv++)) { if (admin) directory= EXTRACTCONTROLDIR; - else ohshit("--%s needs a target directory.\n" - "Perhaps you should be using " DPKG " --install ?",cipaction->olong); + else ohshit(_("--%s needs a target directory.\n" + "Perhaps you should be using dpkg --install ?"),cipaction->olong); } else if (*argv) { - badusage("--%s takes at most two arguments (.deb and directory",cipaction->olong); + badusage(_("--%s takes at most two arguments (.deb and directory"),cipaction->olong); } extracthalf(debar, directory, taroptions, admin); } @@ -314,12 +323,15 @@ void do_fsystarfile(const char *const *argv) { const char *debar; if (!(debar= *argv++)) - badusage("--%s needs a .deb filename argument",cipaction->olong); + badusage(_("--%s needs a .deb filename argument"),cipaction->olong); if (*argv) - badusage("--%s takes only one argument (.deb filename)",cipaction->olong); + badusage(_("--%s takes only one argument (.deb filename)"),cipaction->olong); extracthalf(debar,0,0,0); } void do_control(const char *const *argv) { controlextractvextract(1, "x", argv); } void do_extract(const char *const *argv) { controlextractvextract(0, "xp", argv); } void do_vextract(const char *const *argv) { controlextractvextract(0, "xpv", argv); } + + + diff --git a/dpkg-deb/info.c b/dpkg-deb/info.c index a3ddbc29b..438d76fdc 100644 --- a/dpkg-deb/info.c +++ b/dpkg-deb/info.c @@ -32,10 +32,10 @@ #include <limits.h> #include <ctype.h> -#include "config.h" -#include "dpkg.h" +#include <config.h> +#include <dpkg.h> +#include <myopt.h> #include "dpkg-deb.h" -#include "myopt.h" static void cu_info_prepare(int argc, void **argv) { pid_t c1; @@ -44,15 +44,15 @@ static void cu_info_prepare(int argc, void **argv) { struct stat stab; directory= (char*)(argv[0]); - if (chdir("/")) { perror("failed to chdir to `/' for cleanup"); return; } + if (chdir("/")) { perror(_("failed to chdir to `/' for cleanup")); return; } if (lstat(directory,&stab) && errno==ENOENT) return; - if ((c1= fork()) == -1) { perror("failed to fork for cleanup"); return; } + if ((c1= fork()) == -1) { perror(_("failed to fork for cleanup")); return; } if (!c1) { execlp(RM,"rm","-rf",directory,(char*)0); - perror("failed to exec " RM " for cleanup"); _exit(1); + perror(_("failed to exec rm for cleanup")); _exit(1); } - if (waitpid(c1,&status,0) != c1) { perror("failed to wait for rm cleanup"); return; } - if (status) { fprintf(stderr,"rm cleanup failed, code %d\n",status); } + if (waitpid(c1,&status,0) != c1) { perror(_("failed to wait for rm cleanup")); return; } + if (status) { fprintf(stderr,_("rm cleanup failed, code %d\n"),status); } } static void info_prepare(const char *const **argvp, @@ -63,12 +63,12 @@ static void info_prepare(const char *const **argvp, pid_t c1; *debarp= *(*argvp)++; - if (!*debarp) badusage("--%s needs a .deb filename argument",cipaction->olong); - if (!tmpnam(dbuf)) ohshite("failed to make temporary filename"); + if (!*debarp) badusage(_("--%s needs a .deb filename argument"),cipaction->olong); + if (!tmpnam(dbuf)) ohshite(_("failed to make temporary filename")); *directoryp= dbuf; if (!(c1= m_fork())) { - execlp(RM,"rm","-rf",dbuf,(char*)0); ohshite("failed to exec rm -rf"); + execlp(RM,"rm","-rf",dbuf,(char*)0); ohshite(_("failed to exec rm -rf")); } waitsubproc(c1,"rm -rf",0); push_cleanup(cu_info_prepare,-1, 0,0, 1, (void*)dbuf); @@ -91,19 +91,19 @@ static void info_spew(const char *debar, const char *directory, if (co) { if (!(c1= m_fork())) { m_dup2(fileno(co),0); - execlp(CAT,"cat",(char*)0); ohshite("failed to exec cat component"); + execlp(CAT,"cat",(char*)0); ohshite(_("failed to exec cat component")); } waitsubproc(c1,"cat component",0); } else if (errno == ENOENT) { - if (fprintf(stderr, BACKEND ": `%.255s' contains no control component `%.255s'\n", + if (fprintf(stderr, _("dpkg-deb: `%.255s' contains no control component `%.255s'\n"), debar, component) == EOF) werr("stderr"); re= 1; } else { - ohshite("open component `%.255s' (in %.255s) failed in an unexpected way", + ohshite(_("open component `%.255s' (in %.255s) failed in an unexpected way"), component, directory); } } - if (re) ohshit("at least one requested control component missing"); + if (re) ohshit(_("at least one requested control component missing")); } static void info_list(const char *debar, const char *directory) { @@ -116,15 +116,15 @@ static void info_list(const char *debar, const char *directory) { int c; cdn= scandir(".", &cdlist, &ilist_select, alphasort); - if (cdn == -1) ohshite("cannot scan directory `%.255s'",directory); + if (cdn == -1) ohshite(_("cannot scan directory `%.255s'"),directory); while (cdn-- >0) { cdep= *cdlist++; if (stat(cdep->d_name,&stab)) - ohshite("cannot stat `%.255s' (in `%.255s')",cdep->d_name,directory); + ohshite(_("cannot stat `%.255s' (in `%.255s')"),cdep->d_name,directory); if (S_ISREG(stab.st_mode)) { if (!(cc= fopen(cdep->d_name,"r"))) - ohshite("cannot open `%.255s' (in `%.255s')",cdep->d_name,directory); + ohshite(_("cannot open `%.255s' (in `%.255s')"),cdep->d_name,directory); lines= 0; interpreter[0]= 0; if ((c= getc(cc))== '#') { if ((c= getc(cc))== '!') { @@ -138,22 +138,22 @@ static void info_list(const char *debar, const char *directory) { } } while ((c= getc(cc))!= EOF) { if (c == '\n') lines++; } - if (ferror(cc)) ohshite("failed to read `%.255s' (in `%.255s')", + if (ferror(cc)) ohshite(_("failed to read `%.255s' (in `%.255s')"), cdep->d_name,directory); fclose(cc); - if (printf(" %7ld bytes, %5d lines %c %-20.127s %.127s\n", + if (printf(_(" %7ld bytes, %5d lines %c %-20.127s %.127s\n"), (long)stab.st_size, lines, S_IXUSR & stab.st_mode ? '*' : ' ', cdep->d_name, interpreter) == EOF) werr("stdout"); } else { - if (printf(" not a plain file %.255s\n",cdep->d_name) == EOF) + if (printf(_(" not a plain file %.255s\n"),cdep->d_name) == EOF) werr("stdout"); } } if (!(cc= fopen("control","r"))) { - if (errno != ENOENT) ohshite("failed to read `control' (in `%.255s')",directory); - if (!fputs("(no `control' file in control archive!)\n",stdout)) werr("stdout"); + if (errno != ENOENT) ohshite(_("failed to read `control' (in `%.255s')"),directory); + if (fputs(_("(no `control' file in control archive!)\n"),stdout) < 0) werr("stdout"); } else { lines= 1; while ((c= getc(cc))!= EOF) { @@ -173,7 +173,7 @@ static void info_field(const char *debar, const char *directory, const char *const *fp; int doing, c, lno, fnl; - if (!(cc= fopen("control","r"))) ohshite("could not open the `control' component"); + if (!(cc= fopen("control","r"))) ohshite(_("could not open the `control' component")); doing= 1; lno= 1; for (;;) { c= getc(cc); if (c==EOF) { doing=0; break; } @@ -203,7 +203,7 @@ static void info_field(const char *debar, const char *directory, } if (c == EOF) break; } - if (ferror(cc)) ohshite("failed during read of `control' component"); + if (ferror(cc)) ohshite(_("failed during read of `control' component")); if (doing) putc('\n',stdout); if (ferror(stdout)) werr("stdout"); } @@ -235,6 +235,6 @@ void do_field(const char *const *argv) { void do_contents(const char *const *argv) { const char *debar; - if (!(debar= *argv++) || *argv) badusage("--contents takes exactly one argument"); + if (!(debar= *argv++) || *argv) badusage(_("--contents takes exactly one argument")); extracthalf(debar, 0, "tv", 0); } diff --git a/dpkg-deb/main.c b/dpkg-deb/main.c index ee2321aa1..5906edb70 100644 --- a/dpkg-deb/main.c +++ b/dpkg-deb/main.c @@ -33,49 +33,50 @@ #include <ctype.h> #include <assert.h> -#include "config.h" -#include "dpkg.h" -#include "version.h" -#include "myopt.h" +#include <config.h> +#include <dpkg.h> +#include <version.h> +#include <myopt.h> + #include "dpkg-deb.h" static void printversion(void) { - if (!fputs("Debian Linux `" BACKEND "' package archive backend " - "version " DPKG_VERSION_ARCH ".\n" - "Copyright (C) 1994-1996 Ian Jackson. This is free software; see the\n" - "GNU General Public Licence version 2 or later for copying conditions.\n" - "There is NO warranty. See dpkg-deb --licence for details.\n", - stdout)) werr("stdout"); + if (fputs(_("Debian Linux `" BACKEND "' package archive backend version "), stdout) < 0) werr("stdout"); + if (fputs(DPKG_VERSION_ARCH ".\n", stdout) < 0) werr("stdout"); + if (fputs(_("Copyright (C) 1994-1996 Ian Jackson. This is free software; see the\n" + "GNU General Public Licence version 2 or later for copying conditions.\n" + "There is NO warranty. See dpkg-deb --licence for details.\n"), + stdout) < 0) werr("stdout"); } static void usage(void) { - if (!fputs("\ -Usage: " BACKEND " -b|--build <directory> [<deb>] Build an archive.\n\ - " BACKEND " -c|--contents <deb> List contents.\n\ - " BACKEND " -I|--info <deb> [<cfile>...] Show info to stdout.\n\ - " BACKEND " -f|--field <deb> [<cfield>...] Show field(s) to stdout.\n\ - " BACKEND " -e|--control <deb> [<directory>] Extract control info.\n\ - " BACKEND " -x|--extract <deb> <directory> Extract files.\n\ - " BACKEND " -X|--vextract <deb> <directory> Extract & list files.\n\ - " BACKEND " --fsys-tarfile <deb> Output filesystem tarfile.\n\ - " BACKEND " -h|--help Display this message.\n\ - " BACKEND " --version | --licence Show version/licence.\n\ + if (fputs(_("\ +Usage: dpkg-deb -b|--build <directory> [<deb>] Build an archive.\n\ + dpkg-deb -c|--contents <deb> List contents.\n\ + dpkg-deb -I|--info <deb> [<cfile>...] Show info to stdout.\n\ + dpkg-deb -f|--field <deb> [<cfield>...] Show field(s) to stdout.\n\ + dpkg-deb -e|--control <deb> [<directory>] Extract control info.\n\ + dpkg-deb -x|--extract <deb> <directory> Extract files.\n\ + dpkg-deb -X|--vextract <deb> <directory> Extract & list files.\n\ + dpkg-deb --fsys-tarfile <deb> Output filesystem tarfile.\n\ + dpkg-deb -h|--help Display this message.\n\ + dpkg-deb --version | --licence Show version/licence.\n\ <deb> is the filename of a Debian format archive.\n\ <cfile> is the name of an administrative file component.\n\ <cfield> is the name of a field in the main `control' file.\n\ Options: -D for debugging output; --old or --new controls archive format;\n\ --no-check to suppress control file check (build bad package).\n\ \n\ -Use `" DPKG "' to install and remove packages from your system, or\n\ -`" DSELECT "' for user-friendly package management. Packages unpacked\n\ -using `" BACKEND " --extract' will be incorrectly installed !\n", - stdout)) werr("stdout"); +Use `dpkg' to install and remove packages from your system, or\n\ +`dselect' for user-friendly package management. Packages unpacked\n\ +using `dpkg-deb --extract' will be incorrectly installed !\n"), + stdout) < 0) werr("stdout"); } const char thisname[]= BACKEND; const char printforhelp[]= - "Type " BACKEND " --help for help about manipulating *.deb files;\n" - "Type " DPKG " --help for help about installing and deinstalling packages."; + N_("Type dpkg-deb --help for help about manipulating *.deb files;\n" + "Type dpkg --help for help about installing and deinstalling packages."); int debugflag=0, nocheckflag=0, oldformatflag=BUILDOLDPKGFORMAT; const struct cmdinfo *cipaction=0; @@ -126,7 +127,7 @@ static const struct cmdinfo cmdinfos[]= { static void setaction(const struct cmdinfo *cip, const char *value) { if (cipaction) - badusage("conflicting actions --%s and --%s",cip->olong,cipaction->olong); + badusage(_("conflicting actions --%s and --%s"),cip->olong,cipaction->olong); cipaction= cip; assert(cip-cmdinfos < sizeof(dofunctions)*sizeof(dofunction*)); action= dofunctions[cip-cmdinfos]; @@ -135,13 +136,18 @@ static void setaction(const struct cmdinfo *cip, const char *value) { int main(int argc, const char *const *argv) { jmp_buf ejbuf; + setlocale(LC_ALL, ""); + setlocale(LC_NUMERIC, "POSIX"); + bindtextdomain(PACKAGE, LOCALEDIR); + textdomain(PACKAGE); + if (setjmp(ejbuf)) { /* expect warning about possible clobbering of argv */ error_unwind(ehflag_bombout); exit(2); } push_error_handler(&ejbuf,print_error_fatal,0); myopt(&argv,cmdinfos); - if (!cipaction) badusage("need an action option"); + if (!cipaction) badusage(_("need an action option")); unsetenv("GZIP"); action(argv); diff --git a/dselect/.cvsignore b/dselect/.cvsignore new file mode 100644 index 000000000..70845e08e --- /dev/null +++ b/dselect/.cvsignore @@ -0,0 +1 @@ +Makefile.in diff --git a/dselect/Makefile.am b/dselect/Makefile.am new file mode 100644 index 000000000..3e49b477f --- /dev/null +++ b/dselect/Makefile.am @@ -0,0 +1,74 @@ +## Process this file with automake to produce a Makefile.in + +AUTOMAKE_OPTIONS = 1.1 foreign + +## Directory definitions + +localedir = $(datadir)/locale + +## Various options + +CFLAGS = @CFLAGS@ @CWARNS@ -g $(XCFLAGS) -DLOCALEDIR=\"$(localedir)\" +OPTCFLAGS = @CFLAGS@ @OPTCFLAGS@ @CWARNS@ -g $(XCFLAGS) -DLOCALEDIR=\"$(localedir)\" +LDFLAGS = @LDFLAGS@ $(XLDFLAGS) +LIBS = @INTLLIBS@ @LIBS@ $(XLIBS) + +CXXFLAGS = @CXXFLAGS@ @CWARNS@ -g $(XCXXFLAGS) -DLOCALEDIR=\"$(localedir)\" +OPTCXXFLAGS = @CXXFLAGS@ @OPTCFLAGS@ @CWARNS@ -g $(XCXXFLAGS) -DLOCALEDIR=\"$(localedir)\" + +DEFS = -I$(top_srcdir)/include -I$(top_srcdir) -I$(srcdir) \ + -I$(top_builddir) -I$(top_builddir)/include -I. \ + -I$(top_srcdir)/intl -I$(top_builddir)/intl @DEFS@ +## Automake variables + +bin_PROGRAMS = dselect +man_MANS = dselect.8 + +EXTRA_DIST = keyoverride mkcurkeys.pl mkhelpmsgs.pl helpmsgs.src \ + checkunimp.pl $(man_MANS) + +dselect_SOURCES = main.cc bindings.cc curkeys.cc helpmsgs.cc \ + basecmds.cc baselist.cc basetop.cc \ + pkgcmds.cc pkgdepcon.cc pkgdisplay.cc pkginfo.cc \ + pkgkeys.cc pkglist.cc pkgsublist.cc pkgtop.cc \ + methkeys.cc method.cc methparse.cc methlist.cc \ + dselect.h bindings.h pkglist.h method.h +dselect_LDADD = ../lib/libdpkg.la ../lib/myopt.o -lncurses + + +BUILT_SOURCES = curkeys.h helpmsgs.h helpmsgs.cc +CLEANFILES = curkeys.h.new helpmsgs.h.new helpmsgs.cc.new $(BUILT_SOURCES) + +DISTCLEANFILES = updates status available *.old +MAINTAINERCLEANFILES = $(srcdir)/Makefile.in + +## Rules + +helpmsgs.h helpmsgs.cc: helpmsgs.src $(srcdir)/mkhelpmsgs.pl + perl $(srcdir)/mkhelpmsgs.pl $< + +curkeys.h: keyoverride $(srcdir)/mkcurkeys.pl + cursesfile=`echo '#include <curses.h>' | \ + $(CC) -E - | grep 'curses.h' | head -1 | \ + sed -e 's/^[^"]*"//; s/".*$$//'`; \ + if [ "$$cursesfile" == "" ]; then echo "can't find curses file"; exit 1; fi; \ + perl $(srcdir)/mkcurkeys.pl $< $$cursesfile > $@.new + mv $@.new $@ + +$(DEP_FILES): helpmsgs.h curkeys.h + +## Optimize for speed, not space, for most commonly used files + +pkgdepcon.o: pkgdepcon.cc + $(CXX) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(OPTCXXFLAGS) -c $< + +pkgdisplay.o: pkgdisplay.cc + $(CXX) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(OPTCXXFLAGS) -c $< + +curkeys.o: curkeys.cc + $(CXX) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(OPTCXXFLAGS) -c $< + +dist-hook: + cp -p helpmsgs.h helpmsgs.cc curkeys.h $(distdir)/ + +## End of file. diff --git a/dselect/Makefile.in b/dselect/Makefile.in deleted file mode 100644 index 1ef6f9cd6..000000000 --- a/dselect/Makefile.in +++ /dev/null @@ -1,119 +0,0 @@ -# Copyright (C) 1994 Ian Murdock <imurdock@debian.org> -# Copyright (C) 1994,1995 Ian Jackson <ijackson@nyx.cs.du.edu> -# -# This is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as -# published by the Free Software Foundation; either version 2, -# or (at your option) any later version. -# -# This is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public -# License along with dpkg; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -srcdir = @srcdir@ -VPATH = @srcdir@ - -prefix = @prefix@ -exec_prefix = $(prefix) -bindir = $(exec_prefix)/bin -libdir = $(prefix)/lib -mandir = $(prefix)/man -man8dir = $(mandir)/man8 -man8 = 8 - -SRC = \ - main.cc bindings.cc curkeys.cc helpmsgs.cc \ - basecmds.cc baselist.cc basetop.cc \ - pkgcmds.cc pkgdepcon.cc pkgdisplay.cc pkginfo.cc pkgkeys.cc \ - pkglist.cc pkgsublist.cc pkgtop.cc \ - methkeys.cc method.cc methparse.cc methlist.cc - -OBJ = \ - main.o bindings.o curkeys.o helpmsgs.o \ - basecmds.o baselist.o basetop.o \ - pkgcmds.o pkgdepcon.o pkgdisplay.o pkginfo.o pkgkeys.o \ - pkglist.o pkgsublist.o pkgtop.o \ - methkeys.o method.o methparse.o methlist.o - -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ - -CC = @CC@ -CPLUSPLUS = @CXX@ - -CFLAGS = @CFLAGS@ @CWARNS@ -g $(XCFLAGS) -OPTCFLAGS = @OPTCFLAGS@ -LDFLAGS = $(XLDFLAGS) - -EXTERNLIBS = -lncurses -LIBS = -L../lib -ldpkg $(EXTERNLIBS) $(XLIBS) -ALL_CFLAGS = -I../include -I.. @DEFS@ $(CFLAGS) -ALL_CFLAGS_OPT = $(ALL_CFLAGS) $(OPTCFLAGS) - -.SUFFIXES: .cc .o .c - -.cc.o: - $(CPLUSPLUS) $(ALL_CFLAGS) -c $< - -.c.o: - $(CC) $(ALL_CFLAGS) -c $< - -all: dselect - -dselect: $(OBJ) ../lib/libdpkg.a - $(CC) $(LDFLAGS) -o dselect $(OBJ) $(LIBS) - -# These next few files are very heavily used, and should be optimised -# for speed rather than space. (ALL_CFLAGS_OPT usually means -O3.) -pkgdepcon.o: pkgdepcon.cc - $(CPLUSPLUS) $(ALL_CFLAGS_OPT) -c $< - -pkgdisplay.o: pkgdisplay.cc - $(CPLUSPLUS) $(ALL_CFLAGS_OPT) -c $< - -curkeys.o: curkeys.cc curkeys.inc - $(CPLUSPLUS) $(ALL_CFLAGS) -c curkeys.cc - -helpmsgs.h helpmsgs.cc: helpmsgs.src mkhelpmsgs.pl - perl mkhelpmsgs.pl - -curkeys.inc: keyoverride mkcurkeys.pl - perl mkcurkeys.pl keyoverride \ - `echo '#include <ncurses/curses.h>' | \ - $(CC) -E - | grep ncurses | head -1 | \ - sed -e 's/^[^"]*"//; s/".*$$//'` > curkeys.inc.new - mv curkeys.inc.new curkeys.inc - -kt: kt.o - $(CC) $(LDFLAGS) -o kt kt.o $(LIBS) - -kt.o: kt.c curkeys.inc - -clean: - rm -f curkeys.inc curkeys.inc.new - rm -f helpmsgs.h helpmsgs.cc helpmsgs.h.new helpmsgs.cc.new - rm -f *.o core dselect kt - -distclean: clean - rm -f Makefile *.orig *~ *.~* ./#*# - rm -rf t updates status available *.old - -install: all - $(INSTALL_PROGRAM) -s dselect $(bindir)/dselect - -# $(INSTALL_DATA) dselect.8 $(man8dir)/dselect.$(man8) - -$(OBJ): dselect.h ../config.h ../include/dpkg.h ../include/dpkg-db.h -main.o: ../version.h ../include/myopt.h -method.o: method.h -pkgcmds.o pkgdepcon.o pkgdisplay.o pkgtop.o: pkglist.h -baselist.o bindings.o curkeys.o main.o: bindings.h method.h pkglist.h -methlist.o methkeys.o pkginfo.o pkgkeys.o: bindings.h method.h pkglist.h -pkglist.o pkgsublist.o methparse.o: bindings.h method.h pkglist.h -helpmsgs.o methlist.o pkginfo.o basecmds.o: helpmsgs.h helpmsgs.cc diff --git a/dselect/basecmds.cc b/dselect/basecmds.cc index 85d2d7f96..e113fbbe6 100644 --- a/dselect/basecmds.cc +++ b/dselect/basecmds.cc @@ -21,14 +21,14 @@ #include <stdio.h> #include <string.h> -#include <ncurses.h> +#include <curses.h> #include <assert.h> #include <signal.h> extern "C" { -#include "config.h" -#include "dpkg.h" -#include "dpkg-db.h" +#include <config.h> +#include <dpkg.h> +#include <dpkg-db.h> } #include "dselect.h" #include "helpmsgs.h" @@ -97,11 +97,12 @@ void baselist::kd_searchagain() { void baselist::kd_search() { werase(querywin); mvwaddstr(querywin,0,0, "Search for ? "); - echo(); + echo(); /* fixme: ncurses documentation or implementation */ /* fixme: make / RET do `search again' and / DEL to abort */ if (wgetnstr(querywin,searchstring,sizeof(searchstring)-1) == ERR) searchstring[0]= 0; - noecho(); + raise(SIGWINCH); /* fixme: ncurses and xterm arrow keys */ + noecho(); /* fixme: ncurses */ if (whatinfo_height) { touchwin(whatinfowin); refreshinfo(); } else if (info_height) { touchwin(infopad); refreshinfo(); } else if (thisstate_height) redrawthisstate(); diff --git a/dselect/baselist.cc b/dselect/baselist.cc index c3f97edfa..19a416653 100644 --- a/dselect/baselist.cc +++ b/dselect/baselist.cc @@ -21,15 +21,15 @@ #include <stdio.h> #include <string.h> -#include <ncurses.h> +#include <curses.h> #include <assert.h> #include <signal.h> #include <ctype.h> extern "C" { -#include "config.h" -#include "dpkg.h" -#include "dpkg-db.h" +#include <config.h> +#include <dpkg.h> +#include <dpkg-db.h> } #include "dselect.h" #include "bindings.h" diff --git a/dselect/basetop.cc b/dselect/basetop.cc index 54b792750..3493b4756 100644 --- a/dselect/basetop.cc +++ b/dselect/basetop.cc @@ -21,15 +21,15 @@ #include <stdio.h> #include <string.h> -#include <ncurses.h> +#include <curses.h> #include <assert.h> #include <signal.h> #include <ctype.h> extern "C" { -#include "config.h" -#include "dpkg.h" -#include "dpkg-db.h" +#include <config.h> +#include <dpkg.h> +#include <dpkg-db.h> } #include "dselect.h" diff --git a/dselect/bindings.cc b/dselect/bindings.cc index 4fb545072..ce7c0b688 100644 --- a/dselect/bindings.cc +++ b/dselect/bindings.cc @@ -21,14 +21,14 @@ #include <stdio.h> #include <string.h> -#include <ncurses.h> +#include <curses.h> #include <assert.h> #include <signal.h> extern "C" { -#include "config.h" -#include "dpkg.h" -#include "dpkg-db.h" +#include <config.h> +#include <dpkg.h> +#include <dpkg-db.h> } #include "dselect.h" #include "bindings.h" diff --git a/dselect/curkeys.cc b/dselect/curkeys.cc index 532b2695d..f22c9b680 100644 --- a/dselect/curkeys.cc +++ b/dselect/curkeys.cc @@ -21,13 +21,13 @@ extern "C" { #include <ncurses/curses.h> -#include "config.h" -#include "dpkg.h" -#include "dpkg-db.h" +#include <config.h> +#include <dpkg.h> +#include <dpkg-db.h> } #include "dselect.h" #include "bindings.h" const keybindings::keyname keybindings::keynames[] = { -#include "curkeys.inc" +#include "curkeys.h" }; diff --git a/dselect/debugmake b/dselect/debugmake deleted file mode 100755 index 027029770..000000000 --- a/dselect/debugmake +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh -set -x -make 'XCFLAGS=-g -O0' LDFLAGS=-g 'EXTERNLIBS= -lncurses_g -lefence' "$@" diff --git a/dselect/dselect.h b/dselect/dselect.h index 7978c8b3a..e11130917 100644 --- a/dselect/dselect.h +++ b/dselect/dselect.h @@ -25,6 +25,8 @@ #define TOTAL_LIST_WIDTH 180 #define MAX_DISPLAY_INFO 120 +#include <signal.h> + struct helpmenuentry { char key; const struct helpmessage *msg; diff --git a/dselect/kt.cc b/dselect/kt.cc deleted file mode 100644 index d448a5878..000000000 --- a/dselect/kt.cc +++ /dev/null @@ -1,30 +0,0 @@ -#include <stdio.h> -#include <string.h> -#include <assert.h> -#include <ncurses/curses.h> - -struct kd { int v; const char *n; } kds[]= { -#include "curkeys.inc" -}; - -int main(int argc, char **argv) { - int n=0, c, y,x; - struct kd *kdp; - - initscr(); cbreak(); noecho(); nonl(); - keypad(stdscr,TRUE); - getmaxyx(stdscr,y,x); - mvprintw(5,5,"q to quit; b to beep; (y%d x%d)",y,x); - - for (;;) { - refresh(); - c= getch(); if (c==ERR) { endwin(); perror("err"); exit(1); } - for (kdp=kds; kdp->v != -1 && kdp->v != c; kdp++); - n++; mvprintw(10 + (n%4),10,"n %10d keycode %4d %-10s F0 + %4d",n,c, - kdp->n, c-KEY_F0); - if (c == 'q') break; - if (c == 'b') beep(); - } - endwin(); - return 0; -} diff --git a/dselect/main.cc b/dselect/main.cc index e15d1b561..dbad037b1 100644 --- a/dselect/main.cc +++ b/dselect/main.cc @@ -33,15 +33,15 @@ #include <ctype.h> #include <assert.h> -#include <ncurses.h> +#include <curses.h> #include <term.h> extern "C" { -#include "config.h" -#include "dpkg.h" -#include "dpkg-db.h" -#include "version.h" -#include "myopt.h" +#include <config.h> +#include <dpkg.h> +#include <dpkg-db.h> +#include <version.h> +#include <myopt.h> } #include "dselect.h" #include "bindings.h" diff --git a/dselect/methkeys.cc b/dselect/methkeys.cc index cf3bca9ac..a0587feab 100644 --- a/dselect/methkeys.cc +++ b/dselect/methkeys.cc @@ -21,14 +21,14 @@ #include <stdio.h> #include <string.h> -#include <ncurses.h> +#include <curses.h> #include <assert.h> #include <signal.h> extern "C" { -#include "config.h" -#include "dpkg.h" -#include "dpkg-db.h" +#include <config.h> +#include <dpkg.h> +#include <dpkg-db.h> } #include "dselect.h" #include "bindings.h" @@ -56,7 +56,7 @@ const keybindings::interpretation methodlist_kinterps[] = { { "redraw", methodlist::kd_redraw, 0, qa_noquit }, { "select-and-quit", methodlist::kd_quit, 0, qa_quitchecksave }, { "abort", methodlist::kd_abort, 0, qa_quitnochecksave }, - { 0, 0, qa_noquit } + { 0, 0, 0, qa_noquit } }; #define C(x) ((x)-'a'+1) diff --git a/dselect/methlist.cc b/dselect/methlist.cc index c81ce8e1c..f995189a7 100644 --- a/dselect/methlist.cc +++ b/dselect/methlist.cc @@ -21,14 +21,14 @@ #include <stdio.h> #include <string.h> -#include <ncurses.h> +#include <curses.h> #include <assert.h> #include <signal.h> extern "C" { -#include "config.h" -#include "dpkg.h" -#include "dpkg-db.h" +#include <config.h> +#include <dpkg.h> +#include <dpkg-db.h> } #include "dselect.h" #include "bindings.h" diff --git a/dselect/method.cc b/dselect/method.cc index 67939ebaa..a835d0a50 100644 --- a/dselect/method.cc +++ b/dselect/method.cc @@ -36,12 +36,12 @@ #include <fcntl.h> #include <sys/file.h> -#include <ncurses.h> +#include <curses.h> extern "C" { -#include "config.h" -#include "dpkg.h" -#include "dpkg-db.h" +#include <config.h> +#include <dpkg.h> +#include <dpkg-db.h> } #include "dselect.h" #include "method.h" diff --git a/dselect/methparse.cc b/dselect/methparse.cc index ffa280ee5..4388415cc 100644 --- a/dselect/methparse.cc +++ b/dselect/methparse.cc @@ -33,12 +33,12 @@ #include <ctype.h> #include <assert.h> -#include <ncurses.h> +#include <curses.h> extern "C" { -#include "config.h" -#include "dpkg.h" -#include "dpkg-db.h" +#include <config.h> +#include <dpkg.h> +#include <dpkg-db.h> } #include "dselect.h" #include "bindings.h" @@ -47,12 +47,13 @@ int noptions=0; struct option *options=0, *coption=0; struct method *methods=0; -static void badmethod(const char *pathname, const char *why) __NORETURN; -static void badmethod(const char *pathname, const char *why) { +static void badmethod(const char *pathname, const char *why) NONRETURNING; +static void badmethod(const char *pathname, const char *why) +{ ohshit("syntax error in method options file `%.250s' -- %s", pathname, why); } -static void eofmethod(const char *pathname, FILE *f, const char *why) __NORETURN; +static void eofmethod(const char *pathname, FILE *f, const char *why) NONRETURNING; static void eofmethod(const char *pathname, FILE *f, const char *why) { if (ferror(f)) ohshite("error reading options file `%.250s'",pathname); badmethod(pathname,why); @@ -98,6 +99,8 @@ void readmethods(const char *pathbase, option **optionspp, int *nread) { if (methodlen > IMETHODMAXLEN) ohshit("method `%.250s' has name that is too long (%d > %d characters)", dent->d_name, methodlen, IMETHODMAXLEN); + /* Check if there is a localized version of this method */ + strcpy(pathmeth, dent->d_name); strcpy(pathmeth+methodlen, "/"); pathinmeth= pathmeth+methodlen+1; @@ -195,12 +198,12 @@ void readmethods(const char *pathbase, option **optionspp, int *nread) { if (debug) fprintf(debug," readmethods(`%s',...) new option" " index=`%s' name=`%s' summary=`%.20s'" - " strlen(description=%s)=%d" + " strlen(description=%s)=%ld" " method name=`%s' path=`%s' pathinmeth=`%s'\n", pathbase, opt->index, opt->name, opt->summary, opt->description ? "`...'" : "null", - opt->description ? strlen(opt->description) : -1, + opt->description ? (long) strlen(opt->description) : -1, opt->meth->name, opt->meth->path, opt->meth->pathinmeth); for (optinsert= optionspp; *optinsert && strcmp(opt->index,(*optinsert)->index) > 0; diff --git a/dselect/mkcurkeys.pl b/dselect/mkcurkeys.pl index 192914297..045f8a155 100755 --- a/dselect/mkcurkeys.pl +++ b/dselect/mkcurkeys.pl @@ -19,13 +19,14 @@ # License along with this; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -@ARGV == 2 || die; +$#ARGV == 1 || die ("usage: mkcurkeys.pl <filename> <curses.h>"); open(OV,"<$ARGV[0]") || die $!; while (<OV>) { - m/^#/ && next; - m/\S/ || next; - m/^(\w+)\s+(\S.*\S)\s+$/ || die; + chomp; + /^#/ && next; # skip comments + /\S/ || next; # ignore blank lines + /^(\w+)\s+(\S.*\S)\s*$/ || die ("cannot parse line:\n$_\n"); $over{$1}= $2; $base{$1}= ''; } @@ -60,7 +61,7 @@ close(NCH); printf(<<'END') || die $!; /* * WARNING - THIS FILE IS GENERATED AUTOMATICALLY - DO NOT EDIT - * It is generated by mkcurkeys.pl from <ncurses/curses.h> + * It is generated by mkcurkeys.pl from <curses.h> * and keyoverride. If you want to override things try adding * them to keyoverride. */ diff --git a/dselect/mkhelpmsgs.pl b/dselect/mkhelpmsgs.pl index 878620fe7..d6eb3140c 100755 --- a/dselect/mkhelpmsgs.pl +++ b/dselect/mkhelpmsgs.pl @@ -2,7 +2,7 @@ $maxnlines= 22; -open(SRC,"helpmsgs.src") || die $!; +open(SRC,$ARGV[0]) || die $!; open(NC,">helpmsgs.cc.new") || die $!; open(NH,">helpmsgs.h.new") || die $!; diff --git a/dselect/pkgcmds.cc b/dselect/pkgcmds.cc index 7950bb9b9..a2e9d2915 100644 --- a/dselect/pkgcmds.cc +++ b/dselect/pkgcmds.cc @@ -21,14 +21,14 @@ #include <stdio.h> #include <string.h> -#include <ncurses.h> +#include <curses.h> #include <assert.h> #include <signal.h> extern "C" { -#include "config.h" -#include "dpkg.h" -#include "dpkg-db.h" +#include <config.h> +#include <dpkg.h> +#include <dpkg-db.h> } #include "dselect.h" #include "pkglist.h" diff --git a/dselect/pkgdepcon.cc b/dselect/pkgdepcon.cc index a6abb3094..9395b6626 100644 --- a/dselect/pkgdepcon.cc +++ b/dselect/pkgdepcon.cc @@ -21,13 +21,13 @@ #include <stdio.h> #include <string.h> -#include <ncurses.h> +#include <curses.h> #include <assert.h> extern "C" { -#include "config.h" -#include "dpkg.h" -#include "dpkg-db.h" +#include <config.h> +#include <dpkg.h> +#include <dpkg-db.h> } #include "dselect.h" #include "pkglist.h" @@ -86,7 +86,7 @@ int packagelist::resolvesuggest() { int index; for (index=0; index<nitems; index++) { if (!table[index]->pkg->name) continue; - if (depdebug) + if (depdebug && debug) fprintf(debug,"packagelist[%p]::resolvesuggest() loop[%i] %s / %d\n", this, index, table[index]->pkg->name, changemade); dependency *depends; @@ -102,7 +102,7 @@ int packagelist::resolvesuggest() { if (depends->type != dep_provides) continue; changemade= checkdependers(depends->list->ed,changemade); } - if (depdebug) + if (depdebug && debug) fprintf(debug,"packagelist[%p]::resolvesuggest() loop[%i] %s / -> %d\n", this, index, table[index]->pkg->name, changemade); } @@ -119,7 +119,7 @@ static int dep_update_best_to_change_stop(perpackagestate *& best, pkginfo *tryt // There's no point trying to select a pure virtual package. if (!trythis->clientdata) return 0; - if (depdebug) + if (depdebug && debug) fprintf(debug,"update_best_to_change(best=%s{%d}, test=%s{%d});\n", best ? best->pkg->name : "", best ? (int)best->spriority : -1, trythis->name, trythis->clientdata->spriority); @@ -150,7 +150,7 @@ static int dep_update_best_to_change_stop(perpackagestate *& best, pkginfo *tryt return 0; yes: - if (depdebug) fprintf(debug,"update_best_to_change(); yes\n"); + if (depdebug && debug) fprintf(debug,"update_best_to_change(); yes\n"); best=trythis->clientdata; return 0; } @@ -167,7 +167,7 @@ int packagelist::deselect_one_of(pkginfo *per, pkginfo *ped, dependency *display er= per->clientdata; // these can be changed by add ed= ped->clientdata; - if (depdebug) + if (depdebug && debug) fprintf(debug,"packagelist[%p]::deselect_one_of(): er %s{%d} ed %s{%d} [%p]\n", this, er->pkg->name, er->spriority, ed->pkg->name, ed->spriority, display); @@ -184,7 +184,7 @@ int packagelist::deselect_one_of(pkginfo *per, pkginfo *ped, dependency *display else best= ed; // ... failing that, the second - if (depdebug) + if (depdebug && debug) fprintf(debug,"packagelist[%p]::deselect_one_of(): best %s{%d}\n", this, best->pkg->name, best->spriority); @@ -203,7 +203,7 @@ int packagelist::resolvedepcon(dependency *depends) { deppossi *possi, *provider; int r, foundany; - if (depdebug) { + if (depdebug && debug) { fprintf(debug,"packagelist[%p]::resolvedepcon([%p] %s --%s-->", this,depends,depends->up->name,relatestrings[depends->type]); for (possi=depends->list; possi; possi=possi->next) @@ -237,7 +237,7 @@ int packagelist::resolvedepcon(dependency *depends) { for (possi= depends->list; possi && !deppossatisfied(possi,&fixbyupgrade); possi= possi->next); - if (depdebug) + if (depdebug && debug) fprintf(debug,"packagelist[%p]::resolvedepcon([%p]): depends found %s\n", this,depends, possi ? possi->ed->name : "[none]"); @@ -249,7 +249,7 @@ int packagelist::resolvedepcon(dependency *depends) { if (depends->type == dep_suggests) return r; if (fixbyupgrade) { - if (depdebug) fprintf(debug,"packagelist[%p]::resolvedepcon([%p]): " + if (depdebug && debug) fprintf(debug,"packagelist[%p]::resolvedepcon([%p]): " "fixbyupgrade %s\n", this,depends,fixbyupgrade->pkg->name); best= fixbyupgrade; } else { @@ -270,12 +270,12 @@ int packagelist::resolvedepcon(dependency *depends) { if (!foundany) addunavailable(possi); } if (!best) { - if (depdebug) fprintf(debug,"packagelist[%p]::resolvedepcon([%p]): " + if (depdebug && debug) fprintf(debug,"packagelist[%p]::resolvedepcon([%p]): " "mustdeselect nobest\n", this,depends); return r; } } - if (depdebug) + if (depdebug && debug) fprintf(debug,"packagelist[%p]::resolvedepcon([%p]): select best=%s{%d}\n", this,depends, best->pkg->name, best->spriority); if (best->spriority >= sp_selecting) return r; @@ -285,7 +285,7 @@ int packagelist::resolvedepcon(dependency *depends) { mustdeselect: best= depends->up->clientdata; - if (depdebug) + if (depdebug && debug) fprintf(debug,"packagelist[%p]::resolvedepcon([%p]): mustdeselect best=%s{%d}\n", this,depends, best->pkg->name, best->spriority); @@ -298,20 +298,20 @@ int packagelist::resolvedepcon(dependency *depends) { case dep_conflicts: - if (depdebug) + if (depdebug && debug) fprintf(debug,"packagelist[%p]::resolvedepcon([%p]): conflict\n", this,depends); if (would_like_to_install(depends->up->clientdata->selected,depends->up) == 0) return 0; - if (depdebug) + if (depdebug && debug) fprintf(debug,"packagelist[%p]::resolvedepcon([%p]): conflict installing 1\n", this,depends); if (!deppossatisfied(depends->list,0)) return 0; - if (depdebug) + if (depdebug && debug) fprintf(debug,"packagelist[%p]::resolvedepcon([%p]): conflict satisfied - ouch\n", this,depends); @@ -326,7 +326,7 @@ int packagelist::resolvedepcon(dependency *depends) { if (provider->up->up == depends->up) continue; // conflicts & provides same thing r= deselect_one_of(depends->up, provider->up->up, depends); if (r) return r; } - if (depdebug) + if (depdebug && debug) fprintf(debug,"packagelist[%p]::resolvedepcon([%p]): no desel\n", this,depends); return 0; @@ -365,7 +365,7 @@ int packagelist::deppossatisfied(deppossi *possi, perpackagestate **fixbyupgrade return 0; } } - if (possi->verrel != deppossi::dvr_none) return 0; + if (possi->verrel != dvr_none) return 0; deppossi *provider; if (possi->ed->installed.valid) { for (provider= possi->ed->installed.depended; diff --git a/dselect/pkgdisplay.cc b/dselect/pkgdisplay.cc index 92c31a868..16a4ff286 100644 --- a/dselect/pkgdisplay.cc +++ b/dselect/pkgdisplay.cc @@ -21,14 +21,14 @@ #include <stdio.h> #include <string.h> -#include <ncurses.h> +#include <curses.h> #include <assert.h> #include <signal.h> extern "C" { -#include "config.h" -#include "dpkg.h" -#include "dpkg-db.h" +#include <config.h> +#include <dpkg.h> +#include <dpkg-db.h> } #include "dselect.h" #include "pkglist.h" diff --git a/dselect/pkginfo.cc b/dselect/pkginfo.cc index 718bc1fbb..3ed653657 100644 --- a/dselect/pkginfo.cc +++ b/dselect/pkginfo.cc @@ -21,14 +21,14 @@ #include <stdio.h> #include <string.h> -#include <ncurses.h> +#include <curses.h> #include <assert.h> #include <ctype.h> extern "C" { -#include "config.h" -#include "dpkg.h" -#include "dpkg-db.h" +#include <config.h> +#include <dpkg.h> +#include <dpkg-db.h> } #include "dselect.h" #include "bindings.h" diff --git a/dselect/pkgkeys.cc b/dselect/pkgkeys.cc index 198b040b0..35c9dd617 100644 --- a/dselect/pkgkeys.cc +++ b/dselect/pkgkeys.cc @@ -21,14 +21,14 @@ #include <stdio.h> #include <string.h> -#include <ncurses.h> +#include <curses.h> #include <assert.h> #include <signal.h> extern "C" { -#include "config.h" -#include "dpkg.h" -#include "dpkg-db.h" +#include <config.h> +#include <dpkg.h> +#include <dpkg-db.h> } #include "dselect.h" #include "bindings.h" @@ -72,7 +72,7 @@ const keybindings::interpretation packagelist_kinterps[] = { { "revert", 0, packagelist::kd_revert_abort, qa_noquit }, { "revertsuggest", 0, packagelist::kd_revertsuggest, qa_noquit }, { "revertdirect", 0, packagelist::kd_revertdirect, qa_noquit }, - { 0, 0, qa_noquit } + { 0, 0, 0, qa_noquit } }; #define C(x) ((x)-'a'+1) diff --git a/dselect/pkglist.cc b/dselect/pkglist.cc index eabd60c33..cdc3a2b08 100644 --- a/dselect/pkglist.cc +++ b/dselect/pkglist.cc @@ -21,14 +21,14 @@ #include <stdio.h> #include <string.h> -#include <ncurses.h> +#include <curses.h> #include <assert.h> #include <signal.h> extern "C" { -#include "config.h" -#include "dpkg.h" -#include "dpkg-db.h" +#include <config.h> +#include <dpkg.h> +#include <dpkg-db.h> } #include "dselect.h" #include "bindings.h" diff --git a/dselect/pkgsublist.cc b/dselect/pkgsublist.cc index 75216f4e0..1c301f62f 100644 --- a/dselect/pkgsublist.cc +++ b/dselect/pkgsublist.cc @@ -21,14 +21,14 @@ #include <stdio.h> #include <string.h> -#include <ncurses.h> +#include <curses.h> #include <assert.h> #include <signal.h> extern "C" { -#include "config.h" -#include "dpkg.h" -#include "dpkg-db.h" +#include <config.h> +#include <dpkg.h> +#include <dpkg-db.h> } #include "dselect.h" #include "bindings.h" @@ -122,13 +122,13 @@ int packagelist::add(dependency *depends, showpriority displayimportance) { possi=possi->next, comma=(possi && possi->next ? ", " : " or ")) { info(comma); info(possi->ed->name); - if (possi->verrel != deppossi::dvr_none) { + if (possi->verrel != dvr_none) { switch (possi->verrel) { - case deppossi::dvr_earlierequal: info(" (<= "); break; - case deppossi::dvr_laterequal: info(" (>= "); break; - case deppossi::dvr_earlierstrict: info(" (<< "); break; - case deppossi::dvr_laterstrict: info(" (>> "); break; - case deppossi::dvr_exact: info(" (= "); break; + case dvr_earlierequal: info(" (<= "); break; + case dvr_laterequal: info(" (>= "); break; + case dvr_earlierstrict: info(" (<< "); break; + case dvr_laterstrict: info(" (>> "); break; + case dvr_exact: info(" (= "); break; default: internerr("unknown verrel"); } info(versiondescribe(&possi->version,vdew_never)); @@ -139,7 +139,7 @@ int packagelist::add(dependency *depends, showpriority displayimportance) { add(depends->up,info.string(),displayimportance); for (possi=depends->list; possi; possi=possi->next) { add(possi->ed,info.string(),displayimportance); - if (possi->verrel == deppossi::dvr_none && depends->type != dep_provides) { + if (possi->verrel == dvr_none && depends->type != dep_provides) { // providers aren't relevant if a version was specified, or // if we're looking at a provider relationship already deppossi *provider; diff --git a/dselect/pkgtop.cc b/dselect/pkgtop.cc index 00d642fc2..80577786d 100644 --- a/dselect/pkgtop.cc +++ b/dselect/pkgtop.cc @@ -21,15 +21,15 @@ #include <stdio.h> #include <string.h> -#include <ncurses.h> +#include <curses.h> #include <assert.h> #include <signal.h> #include <ctype.h> extern "C" { -#include "config.h" -#include "dpkg.h" -#include "dpkg-db.h" +#include <config.h> +#include <dpkg.h> +#include <dpkg-db.h> } #include "dselect.h" #include "pkglist.h" diff --git a/dselect/rp b/dselect/rp deleted file mode 100755 index 632348822..000000000 --- a/dselect/rp +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/sh -while cat p; do echo ===================; done diff --git a/include/.cvsignore b/include/.cvsignore new file mode 100644 index 000000000..70845e08e --- /dev/null +++ b/include/.cvsignore @@ -0,0 +1 @@ +Makefile.in diff --git a/include/Makefile.am b/include/Makefile.am new file mode 100644 index 000000000..031773a4f --- /dev/null +++ b/include/Makefile.am @@ -0,0 +1,52 @@ +## Process this file with automake to produce a Makefile.in + +AUTOMAKE_OPTIONS = 1.1 foreign + +## Directory definitions + +pkgincludedir = $(includedir)/@PACKAGE@ +pkglocalstatedir = $(localstatedir)/@PACKAGE@ +pkgsysconfdir = $(sysconfdir)/@PACKAGE@ + +methods_suffix = methods +pinfo_suffix = info +pupdates_suffix = updates +parts_suffix = parts + +## Automake variables + +pkginclude_HEADERS = dpkg.h dpkg-db.h tarfn.h +noinst_HEADERS = myopt.h +EXTRA_DIST = dpkg.h.in + +BUILT_SOURCES = # dpkg.h +CLEANFILES = dpkg.h dpkg.h.new $(BUILT_SOURCES) + +MAINTAINERCLEANFILES = $(srcdir)/Makefile.in + +## Rules + +.PHONY: install-data-local uninstall-local + +install-data-local: + $(mkinstalldirs) $(pkglocalstatedir)/{$(pinfo_suffix),$(pupdates_suffix)} + +uninstall-local: + -for d in $(pkglocalstatedir)/{$(pinfo_suffix),$(pupdates_suffix)} \ + $(pkgincludedir) $(pkglocalstatedir) $(pkglocalstatedir); do \ + [ -e $$d ] && rmdir $$d; \ + done + +dpkg.h: stamp-dpkg.h +stamp-dpkg.h: dpkg.h.in Makefile + sed 's:^\(#define ADMINDIR[ ]*"\).*\(".*\):\1$(pkglocalstatedir)\2:; \ + s:^\(#define UPDATESDIR[ ]*"\).*\(".*\):\1$(pupdates_suffix)/\2:; \ + s:^\(#define INFODIR[ ]*"\).*\(".*\):\1$(pinfo_suffix)/\2:; \ + s:^\(#define PARTSDIR[ ]*"\).*\(".*\):\1$(parts_suffix)/\2:; \ + s:^\(#define LIBDIR[ ]*"\).*\(".*\):\1$(pkglibdir)/\2:; \ + s:^\(#define METHODSDIR[ ]*"\).*\(".*\):\1$(methods_suffix)\2:' \ + < $< > dpkg.h.new + (cmp -s dpkg.h.new dpkg.h) || mv -f dpkg.h.new dpkg.h + touch $@ + +## End of file. diff --git a/include/Makefile.in b/include/Makefile.in deleted file mode 100644 index b2c0ddc89..000000000 --- a/include/Makefile.in +++ /dev/null @@ -1,26 +0,0 @@ -# Copyright (C) 1994 Ian Murdock <imurdock@debian.org> -# Copyright (C) 1994,1995 Ian Jackson <ijackson@nyx.cs.du.edu> -# -# This is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as -# published by the Free Software Foundation; either version 2, -# or (at your option) any later version. -# -# This is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public -# License along with dpkg; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -all: - -clean: - rm -f core - -distclean: clean - rm -f Makefile *.orig *~ *.~* ./#*# - -install: all diff --git a/include/dpkg-db.h b/include/dpkg-db.h index e84745d7b..0a58faa9a 100644 --- a/include/dpkg-db.h +++ b/include/dpkg-db.h @@ -25,6 +25,12 @@ #include <stdio.h> #include <stdlib.h> +struct versionrevision { + unsigned long epoch; + const char *version; + const char *revision; +}; + enum deptype { dep_suggests, dep_recommends, @@ -35,36 +41,33 @@ enum deptype { dep_replaces }; -struct dependency { /* dy */ +enum depverrel { + dvrf_earlier= 0001, + dvrf_later= 0002, + dvrf_strict= 0010, + dvrf_orequal= 0020, + dvrf_builtup= 0100, + dvr_none= 0200, + dvr_earlierequal= dvrf_builtup | dvrf_earlier | dvrf_orequal, + dvr_earlierstrict= dvrf_builtup | dvrf_earlier | dvrf_strict, + dvr_laterequal= dvrf_builtup | dvrf_later | dvrf_orequal, + dvr_laterstrict= dvrf_builtup | dvrf_later | dvrf_strict, + dvr_exact= 0400 +}; + +struct dependency { struct pkginfo *up; struct dependency *next; struct deppossi *list; enum deptype type; }; -struct versionrevision { - unsigned long epoch; - char *version, *revision; -}; - -struct deppossi { /* do */ +struct deppossi { struct dependency *up; struct pkginfo *ed; struct deppossi *next, *nextrev, *backrev; - enum depverrel { - dvrf_earlier= 0001, - dvrf_later= 0002, - dvrf_strict= 0010, - dvrf_orequal= 0020, - dvrf_builtup= 0100, - dvr_none= 0200, - dvr_earlierequal= dvrf_builtup | dvrf_earlier | dvrf_orequal, - dvr_earlierstrict= dvrf_builtup | dvrf_earlier | dvrf_strict, - dvr_laterequal= dvrf_builtup | dvrf_later | dvrf_orequal, - dvr_laterstrict= dvrf_builtup | dvrf_later | dvrf_strict, - dvr_exact= 0400 - } verrel; struct versionrevision version; + enum depverrel verrel; int cyclebreak; }; @@ -82,7 +85,10 @@ struct conffile { struct filedetails { struct filedetails *next; - char *name, *msdosname, *size, *md5sum; + char *name; + char *msdosname; + char *size; + char *md5sum; }; struct pkginfoperfile { /* pif */ diff --git a/include/dpkg.h b/include/dpkg.h.in index d00f77fee..4c91940c4 100644 --- a/include/dpkg.h +++ b/include/dpkg.h.in @@ -1,4 +1,3 @@ - /* * libdpkg - Debian packaging suite library routines * dpkg.h - general header for Debian package handling @@ -27,6 +26,7 @@ #include <stdarg.h> #include <stdio.h> #include <sys/types.h> +#include <sys/sysinfo.h> #define ARCHIVEVERSION "2.0" #define SPLITVERSION "2.1" @@ -131,6 +131,28 @@ #define TARBLKSZ 512 +/* Take care of NLS matters. */ + +#if HAVE_LOCALE_H +# include <locale.h> +#endif +#if !HAVE_SETLOCALE +# define setlocale(Category, Locale) /* empty */ +#endif + +#if ENABLE_NLS +# include <libintl.h> +# define _(Text) gettext (Text) +# define N_(Text) Text +#else +# undef bindtextdomain +# define bindtextdomain(Domain, Directory) /* empty */ +# undef textdomain +# define textdomain(Domain) /* empty */ +# define _(Text) Text +# define N_(Text) Text +#endif + extern const char thisname[]; /* defined separately in each program */ extern const char printforhelp[]; diff --git a/insert-version.pl b/insert-version.pl deleted file mode 100755 index 4b1451d9b..000000000 --- a/insert-version.pl +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/perl -- -chop($v=`pwd`); -$v =~ s,^.*/dpkg-,, || die; -$v =~ s,/\w+$,,; -$v =~ m,^[-0-9.]+$, || die; -while (<STDIN>) { - $_= $1.$v.$2."\n" if - m|^(#define DPKG_VERSION ")[-0-9.]+(" /\* This line modified by Makefile \*/)$|; - $_= $1.$v.$2."\n" if - m/^(\$version= ')[-0-9.]+('; # This line modified by Makefile)$/; - $_= $1.$v.$2."\n" if - m/^(version=")[-0-9.]+("; # This line modified by Makefile)$/; - print || die; -} diff --git a/install.sh b/install.sh deleted file mode 100755 index 0ff4b6a08..000000000 --- a/install.sh +++ /dev/null @@ -1,119 +0,0 @@ -#!/bin/sh - -# -# install - install a program, script, or datafile -# This comes from X11R5; it is not part of GNU. -# -# $XConsortium: install.sh,v 1.2 89/12/18 14:47:22 jim Exp $ -# -# This script is compatible with the BSD install script, but was written -# from scratch. -# - - -# set DOITPROG to echo to test this script - -# Don't use :- since 4.3BSD and earlier shells don't like it. -doit="${DOITPROG-}" - - -# put in absolute paths if you don't have them in your path; or use env. vars. - -mvprog="${MVPROG-mv}" -cpprog="${CPPROG-cp}" -chmodprog="${CHMODPROG-chmod}" -chownprog="${CHOWNPROG-chown}" -chgrpprog="${CHGRPPROG-chgrp}" -stripprog="${STRIPPROG-strip}" -rmprog="${RMPROG-rm}" - -instcmd="$mvprog" -chmodcmd="" -chowncmd="" -chgrpcmd="" -stripcmd="" -rmcmd="$rmprog -f" -mvcmd="$mvprog" -src="" -dst="" - -while [ x"$1" != x ]; do - case $1 in - -c) instcmd="$cpprog" - shift - continue;; - - -m) chmodcmd="$chmodprog $2" - shift - shift - continue;; - - -o) chowncmd="$chownprog $2" - shift - shift - continue;; - - -g) chgrpcmd="$chgrpprog $2" - shift - shift - continue;; - - -s) stripcmd="$stripprog" - shift - continue;; - - *) if [ x"$src" = x ] - then - src=$1 - else - dst=$1 - fi - shift - continue;; - esac -done - -if [ x"$src" = x ] -then - echo "install: no input file specified" - exit 1 -fi - -if [ x"$dst" = x ] -then - echo "install: no destination specified" - exit 1 -fi - - -# If destination is a directory, append the input filename; if your system -# does not like double slashes in filenames, you may need to add some logic - -if [ -d $dst ] -then - dst="$dst"/`basename $src` -fi - -# Make a temp file name in the proper directory. - -dstdir=`dirname $dst` -dsttmp=$dstdir/#inst.$$# - -# Move or copy the file name to the temp name - -$doit $instcmd $src $dsttmp - -# and set any options; do chmod last to preserve setuid bits - -if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; fi -if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; fi -if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; fi -if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; fi - -# Now rename the file to the real destination. - -$doit $rmcmd $dst -$doit $mvcmd $dsttmp $dst - - -exit 0 diff --git a/lib/.cvsignore b/lib/.cvsignore new file mode 100644 index 000000000..70845e08e --- /dev/null +++ b/lib/.cvsignore @@ -0,0 +1 @@ +Makefile.in diff --git a/lib/Makefile.am b/lib/Makefile.am new file mode 100644 index 000000000..4a8de2d03 --- /dev/null +++ b/lib/Makefile.am @@ -0,0 +1,43 @@ +## Process this file with automake to produce a Makefile.in + +AUTOMAKE_OPTIONS = 1.1 foreign + +## Directory definitions + +docdir = $(prefix)/doc +pkgdocdir = $(docdir)/@PACKAGE@ +copyingfile = $(pkgdocdir)/copyright + +## Various options + +CFLAGS = @CFLAGS@ @CWARNS@ -g $(XCFLAGS) +OPTCFLAGS = @CFLAGS@ @OPTCFLAGS@ @CWARNS@ -g $(XCFLAGS) +LDFLAGS = @LDFLAGS@ $(XLDFLAGS) +LIBS = @LIBS@ $(XLIBS) + +CXXFLAGS = @CXXFLAGS@ @CWARNS@ -g $(XCXXFLAGS) +OPTCXXFLAGS = @CXXFLAGS@ @OPTCFLAGS@ @CWARNS@ -g $(XCXXFLAGS) + +DEFS = -I$(top_srcdir)/include -I$(top_srcdir) -I$(srcdir) \ + -I$(top_builddir) -I$(top_builddir)/include -I. \ + -I$(top_srcdir)/intl -I$(top_builddir)/intl @DEFS@ \ + -DCOPYINGFILE=\"$(copyingfile)\" + +## Automake variables + +lib_LTLIBRARIES = libdpkg.la +noinst_OBJECTS = myopt.o + +libdpkg_la_SOURCES = ehandle.c mlib.c parse.c parsehelp.c fields.c dump.c \ + nfmalloc.c varbuf.c database.c vercmp.c \ + compat.c lock.c dbmodify.c showcright.c \ + tarfn.c parsedump.h +libdpkg_la_LDFLAGS = -version-info 0:0:0 -rpath $(libdir) + +EXTRA_DIST = myopt.c + +all: myopt.o + +MAINTAINERCLEANFILES = $(srcdir)/Makefile.in + +## End of file. diff --git a/lib/Makefile.in b/lib/Makefile.in deleted file mode 100644 index 50d8dd5e1..000000000 --- a/lib/Makefile.in +++ /dev/null @@ -1,91 +0,0 @@ -# Copyright (C) 1994 Ian Murdock <imurdock@debian.org> -# Copyright (C) 1994,1995 Ian Jackson <ijackson@nyx.cs.du.edu> -# -# This is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as -# published by the Free Software Foundation; either version 2, -# or (at your option) any later version. -# -# This is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public -# License along with dpkg; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -srcdir = @srcdir@ -VPATH = @srcdir@ - -prefix = @prefix@ -copyingfile = $(prefix)/doc/dpkg/copyright - -SRC = ehandle.c mlib.c parse.c parsehelp.c fields.c dump.c nfmalloc.c \ - varbuf.c database.c myopt.c vercmp.c compat.c lock.c dbmodify.c \ - showcright.c tarfn.c star.c -OBJ = ehandle.o mlib.o parse.o parsehelp.o fields.o dump.o nfmalloc.o \ - varbuf.o database.o myopt.o vercmp.o compat.o lock.o dbmodify.o \ - showcright.o tarfn.o star.o - -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ - -CC = @CC@ - -CFLAGS = @CFLAGS@ @CWARNS@ $(XCFLAGS) -g # fixme: remove -g -OPTCFLAGS = @OPTCFLAGS@ -LDFLAGS = -s $(XLDFLAGS) -ALL_CFLAGS = -I../include -I.. @DEFS@ $(CFLAGS) -ALL_CFLAGS_OPT = $(ALL_CFLAGS) $(OPTCFLAGS) - -AR = ar crv -RANLIB = @RANLIB@ - -.SUFFIXES: .c .o - -all: libdpkg.a - -libdpkg.a: $(OBJ) - $(AR) libdpkg.a $(OBJ) - $(RANLIB) libdpkg.a - -showcright.o: showcright.c - $(CC) -DCOPYINGFILE=\"$(copyingfile)\" $(ALL_CFLAGS) -c $< - -.c.o: - $(CC) $(ALL_CFLAGS) -c $< - -# These next few files are very heavily used, and should be optimised -# for speed rather than space. (ALL_CFLAGS_OPT usually means -O3.) -database.o: database.c - $(CC) $(ALL_CFLAGS_OPT) -c $< - -fields.o: fields.c - $(CC) $(ALL_CFLAGS_OPT) -c $< - -nfmalloc.o: nfmalloc.c - $(CC) $(ALL_CFLAGS_OPT) -c $< - -parse.o: parse.c - $(CC) $(ALL_CFLAGS_OPT) -c $< - -parsehelp.o: parsehelp.c - $(CC) $(ALL_CFLAGS_OPT) -c $< - -varbuf.o: varbuf.c - $(CC) $(ALL_CFLAGS_OPT) -c $< - -clean: - rm -f *.o core libdpkg.a - -distclean: clean - rm -f Makefile *.orig *~ *.~* ./#*# - -install: all - -dump.o fields.o parse.o parsehelp.o vercmp.o: parsedump.h -$(OBJ): ../include/dpkg.h ../include/dpkg-db.h -myopt.o: ../include/myopt.h -tarfn.o star.o: ../include/tarfn.h diff --git a/lib/compat.c b/lib/compat.c index 90abd4e8a..b5cd17cb1 100644 --- a/lib/compat.c +++ b/lib/compat.c @@ -30,8 +30,8 @@ #include <sys/stat.h> #include <unistd.h> -#include "config.h" -#include "dpkg.h" +#include <config.h> +#include <dpkg.h> #ifndef HAVE_VSNPRINTF int vsnprintf (char *buf, size_t maxsize, const char *fmt, va_list al) { @@ -43,15 +43,15 @@ int vsnprintf (char *buf, size_t maxsize, const char *fmt, va_list al) { if (maxsize == 0) return -1; if (!file) { - file= tmpfile(); if (!file) ohshite("unable to open tmpfile for vsnprintf"); + file= tmpfile(); if (!file) ohshite(_("unable to open tmpfile for vsnprintf")); } else { - if (fseek(file,0,0)) ohshite("unable to rewind at start of vsnprintf"); - if (ftruncate(fileno(file),0)) ohshite("unable to truncate in vsnprintf"); + if (fseek(file,0,0)) ohshite(_("unable to rewind at start of vsnprintf")); + if (ftruncate(fileno(file),0)) ohshite(_("unable to truncate in vsnprintf")); } - if (vfprintf(file,fmt,al) == EOF) ohshite("write error in vsnprintf"); - if (fflush(file)) ohshite("unable to flush in vsnprintf"); - if (fstat(fileno(file),&stab)) ohshite("unable to stat in vsnprintf"); - if (fseek(file,0,0)) ohshite("unable to rewind in vsnprintf"); + if (vfprintf(file,fmt,al) == EOF) ohshite(_("write error in vsnprintf")); + if (fflush(file)) ohshite(_("unable to flush in vsnprintf")); + if (fstat(fileno(file),&stab)) ohshite(_("unable to stat in vsnprintf")); + if (fseek(file,0,0)) ohshite(_("unable to rewind in vsnprintf")); want= stab.st_size; if (want >= maxsize) { want= maxsize-1; retval= -1; @@ -59,7 +59,7 @@ int vsnprintf (char *buf, size_t maxsize, const char *fmt, va_list al) { retval= want; } nr= fread(buf,1,want-1,file); - if (nr != want-1) ohshite("read error in vsnprintf truncated"); + if (nr != want-1) ohshite(_("read error in vsnprintf truncated")); buf[want]= 0; return retval; @@ -72,7 +72,7 @@ extern const int sys_nerr; const char *strerror(int e) { static char buf[100]; if (e >= 0 && e < sys_nerr) return sys_errlist[e]; - sprintf(buf, "System error no.%d", e); + sprintf(buf, _("System error no.%d"), e); return buf; } #endif @@ -82,7 +82,7 @@ extern const char *const sys_siglist[]; const char *strsignal(int e) { static char buf[100]; if (e >= 0 && e < NSIG) return sys_siglist[e]; - sprintf(buf, "Signal no.%d", e); + sprintf(buf, _("Signal no.%d"), e); return buf; } #endif diff --git a/lib/database.c b/lib/database.c index e20431161..dc6f25b5e 100644 --- a/lib/database.c +++ b/lib/database.c @@ -22,9 +22,9 @@ #include <ctype.h> #include <string.h> -#include "config.h" -#include "dpkg.h" -#include "dpkg-db.h" +#include <config.h> +#include <dpkg.h> +#include <dpkg-db.h> #define BINS (1 << 7) /* This must always be a power of two. If you change it @@ -233,7 +233,7 @@ void hashreport(FILE *file) { } for (i=npackages; i>0 && freq[i]==0; i--); while (i>=0) { fprintf(file,"size %7d occurs %5d times\n",i,freq[i]); i--; } - if (ferror(file)) ohshite("failed write during hashreport"); + if (ferror(file)) ohshite(_("failed write during hashreport")); } /* @@ -255,3 +255,10 @@ void hashreport(FILE *file) { * xgames xherc xmach32 xmach8 xmono xnet xs3 xsvga xtexstuff xv * xvga16 xxgdb zip */ + + + + + + + diff --git a/lib/dbmodify.c b/lib/dbmodify.c index 819d4db47..c21c3b539 100644 --- a/lib/dbmodify.c +++ b/lib/dbmodify.c @@ -33,9 +33,9 @@ #include <ctype.h> #include <assert.h> -#include "config.h" -#include "dpkg.h" -#include "dpkg-db.h" +#include <config.h> +#include <dpkg.h> +#include <dpkg-db.h> char *statusfile=0, *availablefile=0; @@ -54,12 +54,12 @@ static int ulist_select(const struct dirent *de) { for (p= de->d_name, l=0; *p; p++, l++) if (!isdigit(*p)) return 0; if (l > IMPORTANTMAXLEN) - ohshit("updates directory contains file `%.250s' whose name is too long " - "(length=%d, max=%d)", de->d_name, l, IMPORTANTMAXLEN); + ohshit(_("updates directory contains file `%.250s' whose name is too long " + "(length=%d, max=%d)"), de->d_name, l, IMPORTANTMAXLEN); if (updateslength == -1) updateslength= l; else if (l != updateslength) - ohshit("updates directory contains files with different length names " - "(both %d and %d)", l, updateslength); + ohshit(_("updates directory contains files with different length names " + "(both %d and %d)"), l, updateslength); return 1; } @@ -72,7 +72,7 @@ static void cleanupdates(void) { *updatefnrest= 0; updateslength= -1; cdn= scandir(updatefnbuf, &cdlist, &ulist_select, alphasort); - if (cdn == -1) ohshite("cannot scan updates directory `%.255s'",updatefnbuf); + if (cdn == -1) ohshite(_("cannot scan updates directory `%.255s'"),updatefnbuf); if (cdn) { @@ -88,7 +88,7 @@ static void cleanupdates(void) { for (i=0; i<cdn; i++) { strcpy(updatefnrest, cdlist[i]->d_name); if (unlink(updatefnbuf)) - ohshite("failed to remove incorporated update file %.255s",updatefnbuf); + ohshite(_("failed to remove incorporated update file %.255s"),updatefnbuf); free(cdlist[i]); } } @@ -105,14 +105,14 @@ static void createimptmp(void) { onerr_abort++; importanttmp= fopen(importanttmpfile,"w"); - if (!importanttmp) ohshite("unable to create %.250s",importanttmpfile); + if (!importanttmp) ohshite(_("unable to create %.250s"),importanttmpfile); for (i=0; i<512; i++) fputs("#padding\n",importanttmp); if (ferror(importanttmp)) - ohshite("unable to fill %.250s with padding",importanttmpfile); + ohshite(_("unable to fill %.250s with padding"),importanttmpfile); if (fflush(importanttmp)) - ohshite("unable flush %.250s after padding",importanttmpfile); + ohshite(_("unable flush %.250s after padding"),importanttmpfile); if (fseek(importanttmp,0,SEEK_SET)) - ohshite("unable seek to start of %.250s after padding",importanttmpfile); + ohshite(_("unable seek to start of %.250s after padding"),importanttmpfile); onerr_abort--; } @@ -140,14 +140,14 @@ enum modstatdb_rw modstatdb_init(const char *adir, enum modstatdb_rw readwritere case msdbrw_needsuperuser: case msdbrw_needsuperuserlockonly: if (getuid() || geteuid()) - ohshit("requested operation requires superuser privilege"); + ohshit(_("requested operation requires superuser privilege")); /* fall through */ case msdbrw_write: case msdbrw_writeifposs: if (access(adir,W_OK)) { if (errno != EACCES) - ohshite("unable to access dpkg status area"); + ohshite(_("unable to access dpkg status area")); else if (readwritereq == msdbrw_write) - ohshit("operation requires read/write access to dpkg status area"); + ohshit(_("operation requires read/write access to dpkg status area")); cstatus= msdbrw_readonly; } else { lockdatabase(adir); @@ -194,7 +194,7 @@ static void checkpoint(void) { sprintf(updatefnrest, IMPORTANTFMT, i); assert(strlen(updatefnrest)<=IMPORTANTMAXLEN); /* or we've made a real mess */ if (unlink(updatefnbuf)) - ohshite("failed to remove my own update file %.255s",updatefnbuf); + ohshite(_("failed to remove my own update file %.255s"),updatefnbuf); } nextupdate= 0; } @@ -226,18 +226,18 @@ void modstatdb_note(struct pkginfo *pkg) { varbufreset(&uvb); varbufrecord(&uvb, pkg, &pkg->installed); if (fwrite(uvb.buf, 1, uvb.used, importanttmp) != uvb.used) - ohshite("unable to write updated status of `%.250s'", pkg->name); + ohshite(_("unable to write updated status of `%.250s'"), pkg->name); if (fflush(importanttmp)) - ohshite("unable to flush updated status of `%.250s'", pkg->name); + ohshite(_("unable to flush updated status of `%.250s'"), pkg->name); if (ftruncate(fileno(importanttmp), uvb.used)) - ohshite("unable to truncate for updated status of `%.250s'", pkg->name); + ohshite(_("unable to truncate for updated status of `%.250s'"), pkg->name); if (fsync(fileno(importanttmp))) - ohshite("unable to fsync updated status of `%.250s'", pkg->name); + ohshite(_("unable to fsync updated status of `%.250s'"), pkg->name); if (fclose(importanttmp)) - ohshite("unable to close updated status of `%.250s'", pkg->name); + ohshite(_("unable to close updated status of `%.250s'"), pkg->name); sprintf(updatefnrest, IMPORTANTFMT, nextupdate); if (rename(importanttmpfile, updatefnbuf)) - ohshite("unable to install updated status of `%.250s'", pkg->name); + ohshite(_("unable to install updated status of `%.250s'"), pkg->name); assert(strlen(updatefnrest)<=IMPORTANTMAXLEN); /* or we've made a real mess */ nextupdate++; diff --git a/lib/debugmake b/lib/debugmake deleted file mode 100755 index 57ac0b17d..000000000 --- a/lib/debugmake +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh -set -x -make 'XCFLAGS=-g -DMDEBUG -O0' LDFLAGS=-g 'LIBS= -lefence -L../lib -ldpkg' "$@" diff --git a/lib/dump.c b/lib/dump.c index 5309bc7c8..a43be264e 100644 --- a/lib/dump.c +++ b/lib/dump.c @@ -28,9 +28,9 @@ #include <ctype.h> #include <assert.h> -#include "config.h" -#include "dpkg.h" -#include "dpkg-db.h" +#include <config.h> +#include <dpkg.h> +#include <dpkg-db.h> #include "parsedump.h" void w_name(struct varbuf *vb, @@ -218,7 +218,7 @@ void writerecord(FILE *file, const char *filename, varbufinit(&vb); varbufrecord(&vb,pigp,pifp); varbufaddc(&vb,'\0'); - if (!fputs(vb.buf,file)) + if (fputs(vb.buf,file) < 0) ohshite("failed to write details of `%.50s' to `%.250s'", pigp->name, filename); } @@ -232,6 +232,7 @@ void writedb(const char *filename, int available, int mustsync) { const char *which; FILE *file; struct varbuf vb; + int old_umask; which= available ? "available" : "status"; oldfn= m_malloc(strlen(filename)+sizeof(OLDDBEXT)); @@ -240,11 +241,13 @@ void writedb(const char *filename, int available, int mustsync) { strcpy(newfn,filename); strcat(newfn,NEWDBEXT); varbufinit(&vb); + old_umask = umask(022); file= fopen(newfn,"w"); - if (!file) ohshite("failed to open `%s' for writing %s information",filename,which); + umask(old_umask); + if (!file) ohshite(_("failed to open `%s' for writing %s information"),filename,which); if (setvbuf(file,writebuf,_IOFBF,sizeof(writebuf))) - ohshite("unable to set buffering on status file"); + ohshite(_("unable to set buffering on status file")); it= iterpkgstart(); while ((pigp= iterpkgnext(it)) != 0) { @@ -254,25 +257,25 @@ void writedb(const char *filename, int available, int mustsync) { if (!pifp->valid) blankpackageperfile(pifp); varbufrecord(&vb,pigp,pifp); varbufaddc(&vb,'\n'); varbufaddc(&vb,0); - if (!fputs(vb.buf,file)) - ohshite("failed to write %s record about `%.50s' to `%.250s'", + if (fputs(vb.buf,file) < 0) + ohshite(_("failed to write %s record about `%.50s' to `%.250s'"), which, pigp->name, filename); varbufreset(&vb); } varbuffree(&vb); if (mustsync) { if (fflush(file)) - ohshite("failed to flush %s information to `%.250s'", which, filename); + ohshite(_("failed to flush %s information to `%.250s'"), which, filename); if (fsync(fileno(file))) - ohshite("failed to fsync %s information to `%.250s'", which, filename); + ohshite(_("failed to fsync %s information to `%.250s'"), which, filename); } - if (fclose(file)) ohshite("failed to close `%.250s' after writing %s information", + if (fclose(file)) ohshite(_("failed to close `%.250s' after writing %s information"), filename, which); unlink(oldfn); if (link(filename,oldfn) && errno != ENOENT) - ohshite("failed to link `%.250s' to `%.250s' for backup of %s info", + ohshite(_("failed to link `%.250s' to `%.250s' for backup of %s info"), filename, oldfn, which); if (rename(newfn,filename)) - ohshite("failed to install `%.250s' as `%.250s' containing %s info", + ohshite(_("failed to install `%.250s' as `%.250s' containing %s info"), newfn, filename, which); } diff --git a/lib/ehandle.c b/lib/ehandle.c index f0843b9d7..1b8bb925e 100644 --- a/lib/ehandle.c +++ b/lib/ehandle.c @@ -27,9 +27,9 @@ #include <stdarg.h> #include <assert.h> -#include "config.h" -#include "dpkg.h" -#include "dpkg-db.h" +#include <config.h> +#include <dpkg.h> +#include <dpkg-db.h> static const char *errmsg; /* points to errmsgbuf or malloc'd */ static char errmsgbuf[4096]; @@ -77,7 +77,7 @@ void push_error_handler(jmp_buf *jbufp, necp= malloc(sizeof(struct errorcontext)); if (!necp) { int e= errno; - strcpy(errmsgbuf, "out of memory pushing error handler: "); + strcpy(errmsgbuf, (_("out of memory pushing error handler: "))); strcat(errmsgbuf, strerror(e)); errmsg= errmsgbuf; if (econtext) longjmp(*econtext->jbufp,1); fprintf(stderr, "%s: %s\n", thisname, errmsgbuf); exit(2); @@ -92,7 +92,7 @@ void push_error_handler(jmp_buf *jbufp, } static void print_error_cleanup(const char *emsg, const char *contextstring) { - fprintf(stderr, "%s: error while cleaning up:\n %s\n",thisname,emsg); + fprintf(stderr, _("%s: error while cleaning up:\n %s\n"),thisname,emsg); } static void run_cleanups(struct errorcontext *econ, int flagsetin) { @@ -107,7 +107,7 @@ static void run_cleanups(struct errorcontext *econ, int flagsetin) { if (++preventrecurse > 3) { onerr_abort++; - fprintf(stderr, DPKG ": too many nested errors during error recovery !!\n"); + fprintf(stderr, _("dpkg: too many nested errors during error recovery !!\n")); flagset= 0; } else { flagset= flagsetin; @@ -180,7 +180,7 @@ void push_cleanup(void (*call1)(int argc, void **argv), int mask1, cep= malloc(sizeof(struct cleanupentry) + sizeof(char*)*(nargs+1)); if (!cep) { if (nargs > sizeof(emergency.args)/sizeof(void*)) - ohshite("out of memory for new cleanup entry with many arguments"); + ohshite(_("out of memory for new cleanup entry with many arguments")); e= errno; cep= &emergency.ce; } cep->calls[0].call= call1; cep->calls[0].mask= mask1; @@ -261,16 +261,18 @@ void badusage(const char *fmt, ...) { vsprintf(errmsgbuf,fmt,al); va_end(al); strcat(errmsgbuf,"\n\n"); - strcat(errmsgbuf,printforhelp); + strcat(errmsgbuf,gettext(printforhelp)); errmsg= errmsgbuf; longjmp(*econtext->jbufp,1); } void werr(const char *fn) { - ohshite("error writing `%.250s'",fn); + ohshite(_("error writing `%.250s'"),fn); } void do_internerr(const char *string, int line, const char *file) { - fprintf(stderr,"%s:%d: internal error `%s'\n",file,line,string); + fprintf(stderr,_("%s:%d: internal error `%s'\n"),file,line,string); abort(); } + + diff --git a/lib/fields.c b/lib/fields.c index a2b26fb8a..47e186ac4 100644 --- a/lib/fields.c +++ b/lib/fields.c @@ -23,15 +23,17 @@ #include <ctype.h> #include <string.h> -#include "config.h" -#include "dpkg.h" -#include "dpkg-db.h" +#include <config.h> +#include <dpkg.h> +#include <dpkg-db.h> #include "parsedump.h" -static int convert_string(const char *filename, int lno, const char *what, int otherwise, - FILE *warnto, int *warncount, const struct pkginfo *pigp, - const char *startp, const struct namevalue *nvip, - const char **endpp) { +static int convert_string +(const char *filename, int lno, const char *what, int otherwise, + FILE *warnto, int *warncount, const struct pkginfo *pigp, + const char *startp, const struct namevalue *nvip, + const char **endpp) +{ const char *ep; int c, l; @@ -42,12 +44,12 @@ static int convert_string(const char *filename, int lno, const char *what, int o while (nvip->name && (strncasecmp(nvip->name,startp,l) || nvip->name[l])) nvip++; if (!nvip->name) { if (otherwise != -1) return otherwise; - parseerr(0,filename,lno, warnto,warncount,pigp,0, "`%.*s' is not allowed for %s", + parseerr(0,filename,lno, warnto,warncount,pigp,0, _("`%.*s' is not allowed for %s"), l > 50 ? 50 : l, startp, what); } while (isspace(c)) c= *++ep; if (c && !endpp) - parseerr(0,filename,lno, warnto,warncount,pigp,0, "junk after %s",what); + parseerr(0,filename,lno, warnto,warncount,pigp,0, _("junk after %s"),what); if (endpp) *endpp= ep; return nvip->value; } @@ -57,7 +59,7 @@ void f_name(struct pkginfo *pigp, struct pkginfoperfile *pifp, enum parsedbflags const char *value, const struct fieldinfo *fip) { const char *e; if ((e= illegal_packagename(value,0)) != 0) - parseerr(0,filename,lno, warnto,warncount,pigp,0, "invalid package name (%.250s)",e); + parseerr(0,filename,lno, warnto,warncount,pigp,0, _("invalid package name (%.250s)"),e); pigp->name= nfstrsave(value); findpackage(value); /* We discard the value from findpackage, but calling it * forces an entry in the hash table to be made if it isn't @@ -76,10 +78,10 @@ void f_filecharf(struct pkginfo *pigp, struct pkginfoperfile *pifp, if (!*value) parseerr(0,filename,lno, warnto,warncount,pigp,0, - "empty file details field `%s'",fip->name); + _("empty file details field `%s'"),fip->name); if (!(flags & pdb_recordavailable)) parseerr(0,filename,lno, warnto,warncount,pigp,0, - "file details field `%s' not allowed in status file",fip->name); + _("file details field `%s' not allowed in status file"),fip->name); allowextend= !pigp->files; fdpp= &pigp->files; cpos= nfstrsave(value); @@ -89,8 +91,8 @@ void f_filecharf(struct pkginfo *pigp, struct pkginfoperfile *pifp, fdp= *fdpp; if (!fdp) { if (!allowextend) - parseerr(0,filename,lno, warnto,warncount,pigp,0, "too many values " - "in file details field `%s' (compared to others)",fip->name); + parseerr(0,filename,lno, warnto,warncount,pigp,0, _("too many values " + "in file details field `%s' (compared to others)"),fip->name); fdp= nfmalloc(sizeof(struct filedetails)); fdp->next= 0; fdp->name= fdp->msdosname= fdp->size= fdp->md5sum= 0; @@ -102,8 +104,8 @@ void f_filecharf(struct pkginfo *pigp, struct pkginfoperfile *pifp, cpos= space; } if (*fdpp) - parseerr(0,filename,lno, warnto,warncount,pigp,0, "too few values " - "in file details field `%s' (compared to others)",fip->name); + parseerr(0,filename,lno, warnto,warncount,pigp,0, _("too few values " + "in file details field `%s' (compared to others)"),fip->name); } void f_charfield(struct pkginfo *pigp, struct pkginfoperfile *pifp, @@ -151,7 +153,7 @@ void f_status(struct pkginfo *pigp, struct pkginfoperfile *pifp, if (flags & pdb_rejectstatus) parseerr(0,filename,lno, warnto,warncount,pigp,0, - "value for `status' field not allowed in this context"); + _("value for `status' field not allowed in this context")); if (flags & pdb_recordavailable) return; pigp->want= convert_string(filename,lno,"first (want) word in `status' field", -1, @@ -173,8 +175,8 @@ void f_version(struct pkginfo *pigp, struct pkginfoperfile *pifp, const char *emsg; emsg= parseversion(&pifp->version,value); - if (emsg) parseerr(0,filename,lno, warnto,warncount,pigp,0, "error " - "in Version string `%.250s': %.250s",value,emsg); + if (emsg) parseerr(0,filename,lno, warnto,warncount,pigp,0, _("error " + "in Version string `%.250s': %.250s"),value,emsg); } void f_revision(struct pkginfo *pigp, struct pkginfoperfile *pifp, @@ -184,7 +186,7 @@ void f_revision(struct pkginfo *pigp, struct pkginfoperfile *pifp, char *newversion; parseerr(0,filename,lno, warnto,warncount,pigp,1, - "obsolete `Revision' or `Package-Revision' field used"); + _("obsolete `Revision' or `Package-Revision' field used")); if (!*value) return; if (pifp->version.revision && *pifp->version.revision) { newversion= nfmalloc(strlen(pifp->version.version)+strlen(pifp->version.revision)+2); @@ -202,12 +204,12 @@ void f_configversion(struct pkginfo *pigp, struct pkginfoperfile *pifp, if (flags & pdb_rejectstatus) parseerr(0,filename,lno, warnto,warncount,pigp,0, - "value for `config-version' field not allowed in this context"); + _("value for `config-version' field not allowed in this context")); if (flags & pdb_recordavailable) return; emsg= parseversion(&pigp->configversion,value); - if (emsg) parseerr(0,filename,lno, warnto,warncount,pigp,0, "error " - "in Config-Version string `%.250s': %.250s",value,emsg); + if (emsg) parseerr(0,filename,lno, warnto,warncount,pigp,0, _("error " + "in Config-Version string `%.250s': %.250s"),value,emsg); } void f_conffiles(struct pkginfo *pigp, struct pkginfoperfile *pifp, @@ -222,19 +224,19 @@ void f_conffiles(struct pkginfo *pigp, struct pkginfoperfile *pifp, while (*value) { c= *value++; if (c == '\n') continue; - if (c != ' ') parseerr(0,filename,lno, warnto,warncount,pigp,0, "value for" - " `conffiles' has line starting with non-space `%c'", c); + if (c != ' ') parseerr(0,filename,lno, warnto,warncount,pigp,0, _("value for" + " `conffiles' has line starting with non-space `%c'"), c); for (endent= value; (c= *endent)!=0 && c != '\n'; endent++); for (endfn= endent; *endfn != ' '; endfn--); if (endfn <= value+1 || endfn >= endent-1) parseerr(0,filename,lno, warnto,warncount,pigp,0, - "value for `conffiles' has malformatted line `%.*s'", + _("value for `conffiles' has malformatted line `%.*s'"), (int)(endent-value > 250 ? 250 : endent-value), value); newlink= nfmalloc(sizeof(struct conffile)); value= skip_slash_dotslash(value); namelen= (int)(endfn-value); if (namelen <= 0) parseerr(0,filename,lno, warnto,warncount,pigp,0, - "root or null directory is listed as a conffile"); + _("root or null directory is listed as a conffile")); newlink->name= nfmalloc(namelen+2); newlink->name[0]= '/'; memcpy(newlink->name+1,value,namelen); @@ -277,11 +279,11 @@ void f_dependency(struct pkginfo *pigp, struct pkginfoperfile *pifp, } varbufaddc(&depname,0); if (!*depname.buf) - parseerr(0,filename,lno, warnto,warncount,pigp,0, "`%s' field, missing" - " package name, or garbage where package name expected", fip->name); + parseerr(0,filename,lno, warnto,warncount,pigp,0, _("`%s' field, missing" + " package name, or garbage where package name expected"), fip->name); emsg= illegal_packagename(depname.buf,0); - if (emsg) parseerr(0,filename,lno, warnto,warncount,pigp,0, "`%s' field," - " invalid package name `%.255s': %s", + if (emsg) parseerr(0,filename,lno, warnto,warncount,pigp,0, _("`%s' field," + " invalid package name `%.255s': %s"), fip->name,depname.buf,emsg); dop= nfmalloc(sizeof(struct deppossi)); dop->up= dyp; @@ -311,14 +313,14 @@ void f_dependency(struct pkginfo *pigp, struct pkginfoperfile *pifp, p++; } else if (c2 == '<' || c2 == '>') { parseerr(0,filename,lno, warnto,warncount,pigp,0, - "`%s' field, reference to `%.255s':\n" - " bad version relationship %c%c", + _("`%s' field, reference to `%.255s':\n" + " bad version relationship %c%c"), fip->name,depname.buf,c1,c2); dop->verrel= dvr_none; } else { parseerr(0,filename,lno, warnto,warncount,pigp,1, - "`%s' field, reference to `%.255s':\n" - " `%c' is obsolete, use `%c=' or `%c%c' instead", + _("`%s' field, reference to `%.255s':\n" + " `%c' is obsolete, use `%c=' or `%c%c' instead"), fip->name,depname.buf,c1,c1,c1,c1); dop->verrel |= (dvrf_orequal | dvrf_builtup); } @@ -327,15 +329,15 @@ void f_dependency(struct pkginfo *pigp, struct pkginfoperfile *pifp, p++; } else { parseerr(0,filename,lno, warnto,warncount,pigp,1, - "`%s' field, reference to `%.255s':\n" - " implicit exact match on version number, suggest using `=' instead", + _("`%s' field, reference to `%.255s':\n" + " implicit exact match on version number, suggest using `=' instead"), fip->name,depname.buf); dop->verrel= dvr_exact; } if (!isspace(*p) && !isalnum(*p)) { parseerr(0,filename,lno, warnto,warncount,pigp,1, - "`%s' field, reference to `%.255s':\n" - " version value starts with non-alphanumeric, suggest adding a space", + _("`%s' field, reference to `%.255s':\n" + " version value starts with non-alphanumeric, suggest adding a space"), fip->name,depname.buf); } while (isspace(*p)) p++; @@ -344,16 +346,16 @@ void f_dependency(struct pkginfo *pigp, struct pkginfoperfile *pifp, p++; } if (*p == '(') parseerr(0,filename,lno, warnto,warncount,pigp,0, - "`%s' field, reference to `%.255s': " - "version contains `('",fip->name,depname.buf); + _("`%s' field, reference to `%.255s': " + "version contains `('"),fip->name,depname.buf); else if (*p == 0) parseerr(0,filename,lno, warnto,warncount,pigp,0, - "`%s' field, reference to `%.255s': " - "version unterminated",fip->name,depname.buf); + _("`%s' field, reference to `%.255s': " + "version unterminated"),fip->name,depname.buf); varbufaddc(&version,0); emsg= parseversion(&dop->version,version.buf); if (emsg) parseerr(0,filename,lno, warnto,warncount,pigp,0, - "`%s' field, reference to `%.255s': " - "error in version: %.255s",fip->name,depname.buf,emsg); + _("`%s' field, reference to `%.255s': " + "error in version: %.255s"),fip->name,depname.buf,emsg); p++; while (isspace(*p)) p++; } else { dop->verrel= dvr_none; @@ -361,14 +363,14 @@ void f_dependency(struct pkginfo *pigp, struct pkginfoperfile *pifp, } if (!*p || *p == ',') break; if (*p != '|') - parseerr(0,filename,lno, warnto,warncount,pigp,0, "`%s' field, syntax" - " error after reference to package `%.255s'", + parseerr(0,filename,lno, warnto,warncount,pigp,0, _("`%s' field, syntax" + " error after reference to package `%.255s'"), fip->name, dop->ed->name); if (fip->integer == dep_conflicts || fip->integer == dep_provides || fip->integer == dep_replaces) parseerr(0,filename,lno, warnto,warncount,pigp,0, - "alternatives (`|') not allowed in %s field", + _("alternatives (`|') not allowed in %s field"), fip->name); p++; while (isspace(*p)) p++; } diff --git a/lib/lock.c b/lib/lock.c index e0af62a78..624646823 100644 --- a/lib/lock.c +++ b/lib/lock.c @@ -28,9 +28,9 @@ #include <fcntl.h> #include <sys/file.h> -#include "config.h" -#include "dpkg.h" -#include "dpkg-db.h" +#include <config.h> +#include <dpkg.h> +#include <dpkg-db.h> static char *dblockfile= 0; static int dblockfd= -1; @@ -44,7 +44,7 @@ static void cu_unlockdb(int argc, void **argv) { fl.l_start= 0; fl.l_len= 1; if (fcntl(dblockfd,F_SETLK,&fl) == -1) - ohshite("unable to unlock dpkg status database"); + ohshite(_("unable to unlock dpkg status database")); } void unlockdatabase(const char *admindir) { @@ -65,8 +65,8 @@ void lockdatabase(const char *admindir) { dblockfd= open(dblockfile, O_RDWR|O_CREAT|O_TRUNC, 0660); if (dblockfd == -1) { if (errno == EPERM) - ohshit("you do not have permission to lock the dpkg status database"); - ohshite("unable to open/create status database lockfile"); + ohshit(_("you do not have permission to lock the dpkg status database")); + ohshite(_("unable to open/create status database lockfile")); } } fl.l_type= F_WRLCK; @@ -75,8 +75,8 @@ void lockdatabase(const char *admindir) { fl.l_len= 1; if (fcntl(dblockfd,F_SETLK,&fl) == -1) { if (errno == EWOULDBLOCK || errno == EAGAIN) - ohshit("status database area is locked - another dpkg/dselect is running"); - ohshite("unable to lock dpkg status database"); + ohshit(_("status database area is locked - another dpkg/dselect is running")); + ohshite(_("unable to lock dpkg status database")); } push_cleanup(cu_unlockdb,~0, 0,0, 0); } diff --git a/lib/mlib.c b/lib/mlib.c index 5fee2a406..df8acc853 100644 --- a/lib/mlib.c +++ b/lib/mlib.c @@ -28,8 +28,8 @@ #include <sys/wait.h> #include <sys/types.h> -#include "config.h" -#include "dpkg.h" +#include <config.h> +#include <dpkg.h> /* Incremented when we do some kind of generally necessary operation, so that * loops &c know to quit if we take an error exit. Decremented again afterwards. @@ -44,7 +44,7 @@ void *m_malloc(size_t amount) { onerr_abort++; r= malloc(amount); - if (!r) ohshite("malloc failed (%ld bytes)",(long)amount); + if (!r) ohshite(_("malloc failed (%ld bytes)"),(long)amount); onerr_abort--; #ifdef MDEBUG @@ -57,14 +57,14 @@ void *m_malloc(size_t amount) { void *m_realloc(void *r, size_t amount) { onerr_abort++; r= realloc(r,amount); - if (!r) ohshite("realloc failed (%ld bytes)",(long)amount); + if (!r) ohshite(_("realloc failed (%ld bytes)"),(long)amount); onerr_abort--; return r; } static void print_error_forked(const char *emsg, const char *contextstring) { - fprintf(stderr, "%s (subprocess): %s\n", thisname, emsg); + fprintf(stderr, _("%s (subprocess): %s\n"), thisname, emsg); } static void cu_m_fork(int argc, void **argv) { @@ -77,7 +77,7 @@ static void cu_m_fork(int argc, void **argv) { int m_fork(void) { pid_t r; r= fork(); - if (r == -1) { onerr_abort++; ohshite("fork failed"); } + if (r == -1) { onerr_abort++; ohshite(_("fork failed")); } if (r > 0) return r; push_cleanup(cu_m_fork,~0, 0,0, 0); set_error_display(print_error_forked,0); @@ -90,27 +90,27 @@ void m_dup2(int oldfd, int newfd) { if (dup2(oldfd,newfd) == newfd) return; onerr_abort++; - if (newfd < 3) ohshite("failed to dup for std%s",stdstrings[newfd]); - ohshite("failed to dup for fd %d",newfd); + if (newfd < 3) ohshite(_("failed to dup for std%s"),stdstrings[newfd]); + ohshite(_("failed to dup for fd %d"),newfd); } void m_pipe(int *fds) { if (!pipe(fds)) return; onerr_abort++; - ohshite("failed to create pipe"); + ohshite(_("failed to create pipe")); } void checksubprocerr(int status, const char *description, int sigpipeok) { int n; if (WIFEXITED(status)) { n= WEXITSTATUS(status); if (!n) return; - ohshit("subprocess %s returned error exit status %d",description,n); + ohshit(_("subprocess %s returned error exit status %d"),description,n); } else if (WIFSIGNALED(status)) { n= WTERMSIG(status); if (!n || (sigpipeok && n==SIGPIPE)) return; - ohshit("subprocess %s killed by signal (%s)%s", + ohshit(_("subprocess %s killed by signal (%s)%s"), description, strsignal(n), WCOREDUMP(status) ? ", core dumped" : ""); } else { - ohshit("subprocess %s failed with wait status code %d",description,status); + ohshit(_("subprocess %s failed with wait status code %d"),description,status); } } @@ -119,6 +119,6 @@ void waitsubproc(pid_t pid, const char *description, int sigpipeok) { int status; while ((r= waitpid(pid,&status,0)) == -1 && errno == EINTR); - if (r != pid) { onerr_abort++; ohshite("wait for %s failed",description); } + if (r != pid) { onerr_abort++; ohshite(_("wait for %s failed"),description); } checksubprocerr(status,description,sigpipeok); } diff --git a/lib/myopt.c b/lib/myopt.c index b3c216739..3a2d4a9c7 100644 --- a/lib/myopt.c +++ b/lib/myopt.c @@ -21,9 +21,9 @@ #include <string.h> -#include "config.h" -#include "myopt.h" -#include "dpkg.h" +#include <config.h> +#include <myopt.h> +#include <dpkg.h> void myopt(const char *const **argvp, const struct cmdinfo *cmdinfos) { const struct cmdinfo *cip; @@ -45,28 +45,28 @@ void myopt(const char *const **argvp, const struct cmdinfo *cmdinfos) { if (!strncmp(p,cip->olong,l) && (p[l]== ((cip->takesvalue==2) ? '-' : '='))) { value=p+l+1; break; } } - if (!cip->olong) badusage("unknown option --%s",p); + if (!cip->olong) badusage(_("unknown option --%s"),p); if (cip->takesvalue) { if (!value) { value= *(*argvp)++; - if (!value) badusage("--%s option takes a value",cip->olong); + if (!value) badusage(_("--%s option takes a value"),cip->olong); } if (cip->call) cip->call(cip,value); else *cip->sassignto= value; } else { - if (value) badusage("--%s option does not take a value",cip->olong); + if (value) badusage(_("--%s option does not take a value"),cip->olong); if (cip->call) cip->call(cip,0); else *cip->iassignto= cip->arg; } } else { while (*p) { for (cip= cmdinfos; (cip->olong || cip->oshort) && *p != cip->oshort; cip++); - if (!cip->oshort) badusage("unknown option -%c",*p); + if (!cip->oshort) badusage(_("unknown option -%c"),*p); p++; if (cip->takesvalue) { if (!*p) { value= *(*argvp)++; - if (!value) badusage("-%c option takes a value",cip->oshort); + if (!value) badusage(_("-%c option takes a value"),cip->oshort); } else { value= p; p=""; if (*value == '=') value++; @@ -74,7 +74,7 @@ void myopt(const char *const **argvp, const struct cmdinfo *cmdinfos) { if (cip->call) cip->call(cip,value); else *cip->sassignto= value; } else { - if (*p == '=') badusage("-%c option does not take a value",cip->oshort); + if (*p == '=') badusage(_("-%c option does not take a value"),cip->oshort); if (cip->call) cip->call(cip,0); else *cip->iassignto= cip->arg; } diff --git a/lib/nfmalloc.c b/lib/nfmalloc.c index 225e69846..d2703b13e 100644 --- a/lib/nfmalloc.c +++ b/lib/nfmalloc.c @@ -22,9 +22,9 @@ #include <stdlib.h> #include <string.h> -#include "config.h" -#include "dpkg.h" -#include "dpkg-db.h" +#include <config.h> +#include <dpkg.h> +#include <dpkg-db.h> #define ABLOCKSIZE 65536 #define UNIQUE 4096 diff --git a/lib/parse.c b/lib/parse.c index 728756aeb..c1b4164a1 100644 --- a/lib/parse.c +++ b/lib/parse.c @@ -24,9 +24,9 @@ #include <ctype.h> #include <stdarg.h> -#include "config.h" -#include "dpkg.h" -#include "dpkg-db.h" +#include <config.h> +#include <dpkg.h> +#include <dpkg-db.h> #include "parsedump.h" const struct fieldinfo fieldinfos[]= { @@ -87,11 +87,11 @@ int parsedb(const char *filename, enum parsedbflags flags, if (warncount) *warncount= 0; newpifp= (flags & pdb_recordavailable) ? &newpig.available : &newpig.installed; file= fopen(filename,"r"); - if (!file) ohshite("failed to open package info file `%.255s' for reading",filename); + if (!file) ohshite(_("failed to open package info file `%.255s' for reading"),filename); if (!donep) /* Reading many packages, use a nice big buffer. */ if (setvbuf(file,readbuf,_IOFBF,sizeof(readbuf))) - ohshite("unable to set buffering on status file"); + ohshite(_("unable to set buffering on status file")); push_cleanup(cu_parsedb,~0, 0,0, 1,(void*)file); varbufinit(&field); varbufinit(&value); @@ -118,16 +118,16 @@ int parsedb(const char *filename, enum parsedbflags flags, while (c != EOF && c != '\n' && isspace(c)) c= getc(file); if (c == EOF) parseerr(file,filename,lno, warnto,warncount,&newpig,0, - "EOF after field name `%.50s'",field.buf); + _("EOF after field name `%.50s'"),field.buf); if (c == '\n') parseerr(file,filename,lno, warnto,warncount,&newpig,0, - "newline in field name `%.50s'",field.buf); + _("newline in field name `%.50s'"),field.buf); if (c == MSDOS_EOF_CHAR) parseerr(file,filename,lno, warnto,warncount,&newpig,0, - "MSDOS EOF (^Z) in field name `%.50s'", field.buf); + _("MSDOS EOF (^Z) in field name `%.50s'"), field.buf); if (c != ':') parseerr(file,filename,lno, warnto,warncount,&newpig,0, - "field name `%.50s' must be followed by colon", field.buf); + _("field name `%.50s' must be followed by colon"), field.buf); varbufreset(&value); for (;;) { c= getc(file); @@ -135,11 +135,11 @@ int parsedb(const char *filename, enum parsedbflags flags, } if (c == EOF) parseerr(file,filename,lno, warnto,warncount,&newpig,0, - "EOF before value of field `%.50s' (missing final newline)", + _("EOF before value of field `%.50s' (missing final newline)"), field.buf); if (c == MSDOS_EOF_CHAR) parseerr(file,filename,lno, warnto,warncount,&newpig,0, - "MSDOS EOF char in value of field `%.50s' (missing newline?)", + _("MSDOS EOF char in value of field `%.50s' (missing newline?)"), field.buf); for (;;) { if (c == '\n' || c == MSDOS_EOF_CHAR) { @@ -150,7 +150,7 @@ int parsedb(const char *filename, enum parsedbflags flags, c= '\n'; } else if (c == EOF) { parseerr(file,filename,lno, warnto,warncount,&newpig,0, - "EOF during value of field `%.50s' (missing final newline)", + _("EOF during value of field `%.50s' (missing final newline)"), field.buf); } varbufaddc(&value,c); @@ -167,17 +167,17 @@ int parsedb(const char *filename, enum parsedbflags flags, if (fip->name) { if (*ip++) parseerr(file,filename,lno, warnto,warncount,&newpig,0, - "duplicate value for `%s' field", fip->name); + _("duplicate value for `%s' field"), fip->name); fip->rcall(&newpig,newpifp,flags,filename,lno-1,warnto,warncount,value.buf,fip); } else { if (strlen(fieldname)<2) parseerr(file,filename,lno, warnto,warncount,&newpig,0, - "user-defined field name `%s' too short", fieldname); + _("user-defined field name `%s' too short"), fieldname); larpp= &newpifp->arbs; while ((arp= *larpp) != 0) { if (!strcasecmp(arp->name,fieldname)) parseerr(file,filename,lno, warnto,warncount,&newpig,0, - "duplicate value for user-defined field `%.50s'", fieldname); + _("duplicate value for user-defined field `%.50s'"), fieldname); larpp= &arp->next; } arp= nfmalloc(sizeof(struct arbitraryfield)); @@ -190,7 +190,7 @@ int parsedb(const char *filename, enum parsedbflags flags, } /* loop per field */ if (pdone && donep) parseerr(file,filename,lno, warnto,warncount,&newpig,0, - "several package info entries found, only one allowed"); + _("several package info entries found, only one allowed")); parsemustfield(file,filename,lno, warnto,warncount,&newpig,0, &newpig.name, "package name"); if ((flags & pdb_recordavailable) || newpig.status != stat_notinstalled) { @@ -218,7 +218,7 @@ int parsedb(const char *filename, enum parsedbflags flags, if (newpig.configversion.version) { if (newpig.status == stat_installed || newpig.status == stat_notinstalled) parseerr(file,filename,lno, warnto,warncount,&newpig,0, - "Configured-Version for package with inappropriate Status"); + _("Configured-Version for package with inappropriate Status")); } else { if (newpig.status == stat_installed) newpig.configversion= newpifp->version; } @@ -232,7 +232,7 @@ int parsedb(const char *filename, enum parsedbflags flags, newpig.status == stat_notinstalled && newpifp->conffiles) { parseerr(file,filename,lno, warnto,warncount,&newpig,1, - "Package which in state not-installed has conffiles, forgetting them"); + _("Package which in state not-installed has conffiles, forgetting them")); newpifp->conffiles= 0; } @@ -280,10 +280,10 @@ int parsedb(const char *filename, enum parsedbflags flags, if (c == EOF) break; if (c == '\n') lno++; } - if (ferror(file)) ohshite("failed to read from `%.255s'",filename); + if (ferror(file)) ohshite(_("failed to read from `%.255s'"),filename); pop_cleanup(0); - if (fclose(file)) ohshite("failed to close after read: `%.255s'",filename); - if (donep && !pdone) ohshit("no package information in `%.255s'",filename); + if (fclose(file)) ohshite(_("failed to close after read: `%.255s'"),filename); + if (donep && !pdone) ohshit(_("no package information in `%.255s'"),filename); varbuffree(&field); varbuffree(&value); return pdone; diff --git a/lib/parsehelp.c b/lib/parsehelp.c index c6b81f7db..58ddeb4be 100644 --- a/lib/parsehelp.c +++ b/lib/parsehelp.c @@ -23,21 +23,23 @@ #include <ctype.h> #include <string.h> -#include "config.h" -#include "dpkg.h" -#include "dpkg-db.h" +#include <config.h> +#include <dpkg.h> +#include <dpkg-db.h> #include "parsedump.h" -void parseerr(FILE *file, const char *filename, int lno, FILE *warnto, int *warncount, - const struct pkginfo *pigp, int warnonly, - const char *fmt, ...) { +void parseerr +(FILE *file, const char *filename, int lno, FILE *warnto, int *warncount, + const struct pkginfo *pigp, int warnonly, + const char *fmt, ...) +{ va_list al; char buf1[768], buf2[1000], *p, *q; - if (file && ferror(file)) ohshite("failed to read `%s' at line %d",filename,lno); - sprintf(buf1, "%s, in file `%.255s' near line %d", - warnonly ? "warning" : "parse error", filename, lno); + if (file && ferror(file)) ohshite(_("failed to read `%s' at line %d"),filename,lno); + sprintf(buf1, _("%s, in file `%.255s' near line %d"), + warnonly ? _("warning") : _("parse error"), filename, lno); if (pigp && pigp->name) { - sprintf(buf2, " package `%.255s'", pigp->name); + sprintf(buf2, _(" package `%.255s'"), pigp->name); strcat(buf1,buf2); } for (p=buf1, q=buf2; *p; *q++= *p++) if (*p == '%') *q++= '%'; @@ -48,7 +50,7 @@ void parseerr(FILE *file, const char *filename, int lno, FILE *warnto, int *warn if (warnto) { strcat(q,"\n"); if (vfprintf(warnto,buf2,al) == EOF) - ohshite("failed to write parsing warning"); + ohshite(_("failed to write parsing warning")); } va_end(al); } @@ -109,9 +111,9 @@ const char *illegal_packagename(const char *p, const char **ep) { static char buf[150]; int c; - if (!*p) return "may not be empty string"; - if (!isalnum(*p)) return "must start with an alphanumeric"; - if (!*++p) return "must be at least two characters"; + if (!*p) return _("may not be empty string"); + if (!isalnum(*p)) return _("must start with an alphanumeric"); + if (!*++p) return _("must be at least two characters"); while ((c= *p++)!=0) if (!isalnum(c) && !strchr(alsoallowed,c)) break; if (!c) return 0; @@ -119,8 +121,8 @@ const char *illegal_packagename(const char *p, const char **ep) { while (isspace(*p)) p++; *ep= p; return 0; } - sprintf(buf, - "character `%c' not allowed - only letters, digits and %s allowed", + snprintf(buf, sizeof(buf), + _("character `%c' not allowed - only letters, digits and %s allowed"), c, alsoallowed); return buf; } @@ -141,9 +143,11 @@ int informativeversion(const struct versionrevision *version) { (version->revision && *version->revision)); } -void varbufversion(struct varbuf *vb, - const struct versionrevision *version, - enum versiondisplayepochwhen vdew) { +void varbufversion +(struct varbuf *vb, + const struct versionrevision *version, + enum versiondisplayepochwhen vdew) +{ switch (vdew) { case vdew_never: break; @@ -164,8 +168,10 @@ void varbufversion(struct varbuf *vb, } } -const char *versiondescribe(const struct versionrevision *version, - enum versiondisplayepochwhen vdew) { +const char *versiondescribe +(const struct versionrevision *version, + enum versiondisplayepochwhen vdew) +{ static struct varbuf bufs[10]; static int bufnum=0; @@ -185,14 +191,14 @@ const char *parseversion(struct versionrevision *rversion, const char *string) { char *hyphen, *colon, *eepochcolon; unsigned long epoch; - if (!*string) return "version string is empty"; + if (!*string) return _("version string is empty"); colon= strchr(string,':'); if (colon) { epoch= strtoul(string,&eepochcolon,10); - if (colon != eepochcolon) return "epoch in version is not number"; - if (!*++colon) return "nothing after colon in version number"; - string= colon+1; + if (colon != eepochcolon) return _("epoch in version is not number"); + if (!*++colon) return _("nothing after colon in version number"); + string= colon; rversion->epoch= epoch; } else { rversion->epoch= 0; @@ -205,16 +211,18 @@ const char *parseversion(struct versionrevision *rversion, const char *string) { return 0; } -void parsemustfield(FILE *file, const char *filename, int lno, - FILE *warnto, int *warncount, - const struct pkginfo *pigp, int warnonly, - char **value, const char *what) { +void parsemustfield +(FILE *file, const char *filename, int lno, + FILE *warnto, int *warncount, + const struct pkginfo *pigp, int warnonly, + char **value, const char *what) +{ if (!*value) { - parseerr(file,filename,lno, warnto,warncount,pigp,warnonly, "missing %s",what); + parseerr(file,filename,lno, warnto,warncount,pigp,warnonly, _("missing %s"),what); *value= nfstrsave(""); } else if (!**value) { parseerr(file,filename,lno, warnto,warncount,pigp,warnonly, - "empty value for %s",what); + _("empty value for %s"),what); } } diff --git a/lib/showcright.c b/lib/showcright.c index 57de25f24..6abfa50fc 100644 --- a/lib/showcright.c +++ b/lib/showcright.c @@ -22,14 +22,14 @@ #include <unistd.h> #include <fcntl.h> -#include "config.h" -#include "dpkg.h" +#include <config.h> +#include <dpkg.h> void showcopyright(const struct cmdinfo *c, const char *v) { int fd; fd= open(COPYINGFILE,O_RDONLY); - if (fd < 0) ohshite("cannot open GPL file " COPYINGFILE); + if (fd < 0) ohshite(_("cannot open GPL file /usr/doc/dpkg/copyright")); m_dup2(fd,0); execlp(CAT,CAT,"-",(char*)0); - ohshite("unable to exec cat for displaying GPL file"); + ohshite(_("unable to exec cat for displaying GPL file")); } diff --git a/lib/star.c b/lib/star.c index e43ddf09b..7965cb412 100644 --- a/lib/star.c +++ b/lib/star.c @@ -1,4 +1,7 @@ -#include "tarfn.h" +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif +#include <tarfn.h> #include <stdlib.h> #include <stdio.h> #include <unistd.h> @@ -76,7 +79,11 @@ static int SetModes(TarInfo * i) { struct utimbuf t; +#ifdef HAVE_LCHOWN + lchown(i->Name, i->UserID, i->GroupID); +#else chown(i->Name, i->UserID, i->GroupID); +#endif chmod(i->Name, i->Mode & ~S_IFMT); t.actime = time(0); t.modtime = i->ModTime; diff --git a/lib/tarfn.c b/lib/tarfn.c index 5a16a1642..8b049005f 100644 --- a/lib/tarfn.c +++ b/lib/tarfn.c @@ -5,12 +5,13 @@ * This is free software under the GNU General Public License. */ #include <stdlib.h> +#include <string.h> #include <stdio.h> #include <unistd.h> #include <pwd.h> #include <grp.h> #include <errno.h> -#include "tarfn.h" +#include <tarfn.h> struct TarHeader { char Name[100]; diff --git a/lib/varbuf.c b/lib/varbuf.c index 5d1785c56..60c19abdc 100644 --- a/lib/varbuf.c +++ b/lib/varbuf.c @@ -20,10 +20,12 @@ */ #include <stdlib.h> +#include <string.h> +#include <stdio.h> -#include "config.h" -#include "dpkg.h" -#include "dpkg-db.h" +#include <config.h> +#include <dpkg.h> +#include <dpkg-db.h> void varbufaddc(struct varbuf *v, int c) { if (v->used >= v->size) varbufextend(v); @@ -71,7 +73,7 @@ void varbufextend(struct varbuf *v) { newsize= v->size + 80 + v->used; newbuf= realloc(v->buf,newsize); - if (!newbuf) ohshite("failed to realloc for variable buffer"); + if (!newbuf) ohshite(_("failed to realloc for variable buffer")); v->size= newsize; v->buf= newbuf; } diff --git a/lib/vercmp.c b/lib/vercmp.c index 2e18877f8..fecc74562 100644 --- a/lib/vercmp.c +++ b/lib/vercmp.c @@ -22,9 +22,9 @@ #include <ctype.h> #include <string.h> -#include "config.h" -#include "dpkg.h" -#include "dpkg-db.h" +#include <config.h> +#include <dpkg.h> +#include <dpkg-db.h> #include "parsedump.h" int epochsdiffer(const struct versionrevision *a, @@ -66,7 +66,7 @@ int versioncompare(const struct versionrevision *version, int r; if (version->epoch > refversion->epoch) return 1; - if (version->epoch < refversion->epoch) return 1; + if (version->epoch < refversion->epoch) return -1; r= verrevcmp(version->version,refversion->version); if (r) return r; return verrevcmp(version->revision,refversion->revision); } diff --git a/main/.cvsignore b/main/.cvsignore new file mode 100644 index 000000000..70845e08e --- /dev/null +++ b/main/.cvsignore @@ -0,0 +1 @@ +Makefile.in diff --git a/main/Makefile.am b/main/Makefile.am new file mode 100644 index 000000000..d90f5c612 --- /dev/null +++ b/main/Makefile.am @@ -0,0 +1,59 @@ +## Process this file with automake to produce a Makefile.in + +AUTOMAKE_OPTIONS = 1.1 foreign + +## Directory definitions + +localedir = $(datadir)/locale + +## Various options + +CFLAGS = @CFLAGS@ @CWARNS@ -g $(XCFLAGS) -DLOCALEDIR=\"$(localedir)\" +OPTCFLAGS = @CFLAGS@ @OPTCFLAGS@ @CWARNS@ -g $(XCFLAGS) -DLOCALEDIR=\"$(localedir)\" +LDFLAGS = @LDFLAGS@ $(XLDFLAGS) +LIBS = @INTLLIBS@ @LIBS@ $(XLIBS) + +CXXFLAGS = @CXXFLAGS@ @CWARNS@ -g $(XCXXFLAGS) -DLOCALEDIR=\"$(localedir)\" +OPTCXXFLAGS = @CXXFLAGS@ @OPTCFLAGS@ @CWARNS@ -g $(XCXXFLAGS) -DLOCALEDIR=\"$(localedir)\" + +DEFS = -I$(top_srcdir)/include -I$(top_srcdir) -I$(srcdir) \ + -I$(top_builddir) -I$(top_builddir)/include -I. \ + -I$(top_srcdir)/intl -I$(top_builddir)/intl @DEFS@ + +## Automake variables + +bin_PROGRAMS = dpkg +man_MANS = dpkg.8 + +dpkg_SOURCES = main.c enquiry.c filesdb.c archives.c processarc.c \ + cleanup.c select.c packages.c configure.c remove.c \ + help.c depcon.c errors.c update.c main.h filesdb.h \ + archives.h +dpkg_LDADD = ../lib/libdpkg.la ../lib/myopt.o + +BUILT_SOURCES = archtable.h +CLEANFILES = archtable.h.new $(BUILT_SOURCES) + +DISTCLEANFILES = updates status available *.old +MAINTAINERCLEANFILES = $(srcdir)/Makefile.in + +EXTRA_DIST = dpkg.8 + +## Rules + +filesdb.o: filesdb.c + $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(OPTCFLAGS) -c $< + +$(DEP_FILES): archtable.h + +archtable.h: $(top_srcdir)/archtable + expand $(top_srcdir)/archtable | \ + perl -ne 'print " { \"$$1\",$$2\"$$3\",$$4\"$$5\" },\n" \ + if m/^\s*(\w+)(\s+)(\w+)(\s+)(\w+)\s*$$/' \ + >$@.new + mv $@.new $@ + +dist-hook: + cp -p archtable.h $(distdir)/ + +## End of file. diff --git a/main/Makefile.in b/main/Makefile.in deleted file mode 100644 index 1b4adc188..000000000 --- a/main/Makefile.in +++ /dev/null @@ -1,88 +0,0 @@ -# Copyright (C) 1994 Ian Murdock <imurdock@debian.org> -# Copyright (C) 1994,1995 Ian Jackson <ijackson@nyx.cs.du.edu> -# -# This is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as -# published by the Free Software Foundation; either version 2, -# or (at your option) any later version. -# -# This is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public -# License along with dpkg; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -srcdir = @srcdir@ -VPATH = @srcdir@ - -prefix = @prefix@ -exec_prefix = $(prefix) -bindir = $(exec_prefix)/bin -libdir = $(prefix)/lib -mandir = $(prefix)/man -man8dir = $(mandir)/man8 -man8 = 8 - -SRC = main.c enquiry.c filesdb.c archives.c processarc.c cleanup.c select.c \ - packages.c configure.c remove.c help.c depcon.c errors.c update.c - -OBJ = main.o enquiry.o filesdb.o archives.o processarc.o cleanup.o select.o \ - packages.o configure.o remove.o help.o depcon.o errors.o update.o - -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ - -CC = @CC@ - -CFLAGS = @CFLAGS@ @CWARNS@ -g $(XCFLAGS) -OPTCFLAGS = @OPTCFLAGS@ -LDFLAGS = $(XLDFLAGS) -LIBS = -L../lib -ldpkg $(XLIBS) -ALL_CFLAGS = -I../include -I.. @DEFS@ $(CFLAGS) -ALL_CFLAGS_OPT = $(ALL_CFLAGS) $(OPTCFLAGS) - -.SUFFIXES: .c .o - -.c.o: - $(CC) $(ALL_CFLAGS) -c $< - -all: dpkg - -dpkg: $(OBJ) ../lib/libdpkg.a - $(CC) $(LDFLAGS) -o dpkg $(OBJ) $(LIBS) - -# This next file is very heavily used, and should be optimised -# for speed rather than space. (ALL_CFLAGS_OPT usually means -O3.) -filesdb.o: filesdb.c - $(CC) $(ALL_CFLAGS_OPT) -c $< - -archtable.inc: ../archtable - expand ../archtable | \ - perl -ne 'print " { \"$$1\",$$2\"$$3\",$$4\"$$5\" },\n" \ - if m/^\s*(\w+)(\s+)(\w+)(\s+)(\w+)\s*$$/' \ - >archtable.inc.new - mv archtable.inc.new archtable.inc - -clean: - rm -f *.o core dpkg *.new archtable.inc - -distclean: clean - rm -f Makefile *.orig *~ *.~* ./#*# - rm -rf t updates status available *.old - -install: all - $(INSTALL_PROGRAM) -s dpkg $(bindir)/dpkg - $(INSTALL_DATA) dpkg.8 $(man8dir)/dpkg.$(man8) - -$(OBJ): main.h ../config.h ../include/dpkg.h ../include/dpkg-db.h -main.o: ../version.h -main.o enquiry.o errors.o update.o: ../include/myopt.h -enquiry.o: filesdb.h archtable.inc -filesdb.o: filesdb.h -packages.o remove.o configure.o: filesdb.h ../include/myopt.h -archives.o processarc.o help.o: filesdb.h ../include/myopt.h -archives.o processarc.o: archives.h ../include/tarfn.h diff --git a/main/archives.c b/main/archives.c index 5a1fa04c7..5b7769ce8 100644 --- a/main/archives.c +++ b/main/archives.c @@ -19,6 +19,7 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +#include <errno.h> #include <stdio.h> #include <string.h> #include <stdlib.h> @@ -31,11 +32,11 @@ #include <sys/stat.h> #include <sys/types.h> -#include "config.h" -#include "dpkg.h" -#include "dpkg-db.h" -#include "myopt.h" -#include "tarfn.h" +#include <config.h> +#include <dpkg.h> +#include <dpkg-db.h> +#include <tarfn.h> +#include <myopt.h> #include "filesdb.h" #include "main.h" @@ -119,7 +120,7 @@ int tarfileread(void *ud, char *buf, int len) { int r; r= fread(buf,1,len,tc->backendpipe); if (r != len && ferror(tc->backendpipe)) - ohshite("error reading from " BACKEND " pipe"); + ohshite(_("error reading from dpkg-deb pipe")); return r; } @@ -156,14 +157,14 @@ static void newtarobject_utime(const char *path, struct TarInfo *ti) { utb.actime= currenttime; utb.modtime= ti->ModTime; if (utime(path,&utb)) - ohshite("error setting timestamps of `%.255s'",ti->Name); + ohshite(_("error setting timestamps of `%.255s'"),ti->Name); } static void newtarobject_allmodes(const char *path, struct TarInfo *ti) { if (chown(path,ti->UserID,ti->GroupID)) - ohshite("error setting ownership of `%.255s'",ti->Name); + ohshite(_("error setting ownership of `%.255s'"),ti->Name); if (chmod(path,ti->Mode & ~S_IFMT)) - ohshite("error setting permissions of `%.255s'",ti->Name); + ohshite(_("error setting permissions of `%.255s'"),ti->Name); newtarobject_utime(path,ti); } @@ -244,8 +245,8 @@ int tarobject(struct TarInfo *ti) { if (nifd->namenode->divert && nifd->namenode->divert->camefrom) { divpkg= nifd->namenode->divert->pkg; forcibleerr(fc_overwritediverted, - "trying to overwrite `%.250s', which is the " - "diverted version of `%.250s'%.10s%.100s%.10s", + _("trying to overwrite `%.250s', which is the " + "diverted version of `%.250s'%.10s%.100s%.10s"), nifd->namenode->name, nifd->namenode->divert->camefrom->name, divpkg ? " (package: " : "", @@ -270,7 +271,7 @@ int tarobject(struct TarInfo *ti) { if (statr) { /* The lstat failed. */ if (errno != ENOENT && errno != ENOTDIR) - ohshite("unable to stat `%.255s' (which I was about to install)",ti->Name); + ohshite(_("unable to stat `%.255s' (which I was about to install)"),ti->Name); /* OK, so it doesn't exist. * However, it's possible that we were in the middle of some other * backup/restore operation and were rudely interrupted. @@ -278,14 +279,14 @@ int tarobject(struct TarInfo *ti) { */ if (rename(fnametmpvb.buf,fnamevb.buf)) { if (errno != ENOENT && errno != ENOTDIR) - ohshite("unable to clean up mess surrounding `%.255s' before " - "installing another version",ti->Name); + ohshite(_("unable to clean up mess surrounding `%.255s' before " + "installing another version"),ti->Name); debug(dbg_eachfiledetail,"tarobject nonexistent"); } else { debug(dbg_eachfiledetail,"tarobject restored tmp to main"); statr= lstat(fnamevb.buf,&stab); - if (statr) ohshite("unable to stat restored `%.255s' before installing" - " another version", ti->Name); + if (statr) ohshite(_("unable to stat restored `%.255s' before installing" + " another version"), ti->Name); } } else { debug(dbg_eachfiledetail,"tarobject already exists"); @@ -316,7 +317,7 @@ int tarobject(struct TarInfo *ti) { case HardLink: break; default: - ohshit("archive contained object `%.255s' of unknown type 0x%x",ti->Name,ti->Type); + ohshit(_("archive contained object `%.255s' of unknown type 0x%x"),ti->Name,ti->Type); } if (!existingdirectory) { @@ -351,12 +352,12 @@ int tarobject(struct TarInfo *ti) { otherpkg->clientdata->replacingfilesandsaid= 1; } else { if (S_ISDIR(stab.st_mode)) { - forcibleerr(fc_overwritedir, "trying to overwrite directory `%.250s' " - "in package %.250s with nondirectory", + forcibleerr(fc_overwritedir, _("trying to overwrite directory `%.250s' " + "in package %.250s with nondirectory"), nifd->namenode->name,otherpkg->name); } else { forcibleerr(fc_overwrite, - "trying to overwrite `%.250s', which is also in package %.250s", + _("trying to overwrite `%.250s', which is also in package %.250s"), nifd->namenode->name,otherpkg->name); } } @@ -384,7 +385,7 @@ int tarobject(struct TarInfo *ti) { ti->Mode & (S_IRUSR|S_IRGRP|S_IROTH)); if (fd < 0) ohshite("unable to create `%.255s'",ti->Name); thefile= fdopen(fd,"w"); - if (!thefile) { close(fd); ohshite("unable to fdopen for `%.255s'",ti->Name); } + if (!thefile) { close(fd); ohshite(_("unable to fdopen for `%.255s'"),ti->Name); } push_cleanup(cu_closefile,ehflag_bombout, 0,0, 1,(void*)thefile); debug(dbg_eachfiledetail,"tarobject NormalFile[01] open size=%lu", (unsigned long)ti->Size); @@ -393,33 +394,39 @@ int tarobject(struct TarInfo *ti) { r= fread(databuf,1,TARBLKSZ,tc->backendpipe); if (r<TARBLKSZ) { if (ferror(tc->backendpipe)) { - ohshite("error reading " BACKEND " during `%.255s'",ti->Name); + ohshite(_("error reading dpkg-deb during `%.255s'"),ti->Name); } else { errno= 0; return -1; } } if (fwrite(databuf,1,wsz,thefile) != wsz) - ohshite("error writing to `%.255s'",ti->Name); + ohshite(_("error writing to `%.255s'"),ti->Name); } if (fchown(fd,ti->UserID,ti->GroupID)) - ohshite("error setting ownership of `%.255s'",ti->Name); + ohshite(_("error setting ownership of `%.255s'"),ti->Name); + /* We flush the stream here to avoid any future + * writes, which will mask any setuid or setgid + * attemps by fchmod below. + */ + if (fflush(thefile) == EOF) + ohshite(_("error flushing `%.255s'"),ti->Name); if (fchmod(fd,ti->Mode & ~S_IFMT)) - ohshite("error setting permissions of `%.255s'",ti->Name); + ohshite(_("error setting permissions of `%.255s'"),ti->Name); pop_cleanup(ehflag_normaltidy); /* thefile= fdopen(fd) */ if (fclose(thefile)) - ohshite("error closing/writing `%.255s'",ti->Name); + ohshite(_("error closing/writing `%.255s'"),ti->Name); newtarobject_utime(fnamenewvb.buf,ti); break; case FIFO: if (mkfifo(fnamenewvb.buf,ti->Mode & S_IFMT)) - ohshite("error creating pipe `%.255s'",ti->Name); + ohshite(_("error creating pipe `%.255s'"),ti->Name); debug(dbg_eachfiledetail,"tarobject FIFO"); newtarobject_allmodes(fnamenewvb.buf,ti); break; case CharacterDevice: case BlockDevice: if (mknod(fnamenewvb.buf,ti->Mode & S_IFMT,ti->Device)) - ohshite("error creating device `%.255s'",ti->Name); + ohshite(_("error creating device `%.255s'"),ti->Name); debug(dbg_eachfiledetail,"tarobject CharacterDevice|BlockDevice"); newtarobject_allmodes(fnamenewvb.buf,ti); break; @@ -428,28 +435,32 @@ int tarobject(struct TarInfo *ti) { varbufaddstr(&hardlinkfn,instdir); varbufaddc(&hardlinkfn,'/'); varbufaddstr(&hardlinkfn,ti->LinkName); varbufaddc(&hardlinkfn,0); if (link(hardlinkfn.buf,fnamenewvb.buf)) - ohshite("error creating hard link `%.255s'",ti->Name); + ohshite(_("error creating hard link `%.255s'"),ti->Name); debug(dbg_eachfiledetail,"tarobject HardLink"); newtarobject_allmodes(fnamenewvb.buf,ti); break; case SymbolicLink: /* We've already cheched for an existing directory. */ if (symlink(ti->LinkName,fnamenewvb.buf)) - ohshite("error creating symbolic link `%.255s'",ti->Name); + ohshite(_("error creating symbolic link `%.255s'"),ti->Name); debug(dbg_eachfiledetail,"tarobject SymbolicLink creating"); +#ifdef HAVE_LCHOWN + if (lchown(fnamenewvb.buf,ti->UserID,ti->GroupID)) +#else if (chown(fnamenewvb.buf,ti->UserID,ti->GroupID)) - ohshite("error setting ownership of symlink `%.255s'",ti->Name); +#endif + ohshite(_("error setting ownership of symlink `%.255s'"),ti->Name); break; case Directory: /* We've already checked for an existing directory. */ if (mkdir(fnamenewvb.buf, ti->Mode & (S_IRUSR|S_IRGRP|S_IROTH | S_IXUSR|S_IXGRP|S_IXOTH))) - ohshite("error creating directory `%.255s'",ti->Name); + ohshite(_("error creating directory `%.255s'"),ti->Name); debug(dbg_eachfiledetail,"tarobject Directory creating"); newtarobject_allmodes(fnamenewvb.buf,ti); break; default: - internerr("bad tar type, but already checked"); + internerr(_("bad tar type, but already checked")); } /* * Now we have extracted the new object in .dpkg-new (or, if the @@ -479,7 +490,7 @@ int tarobject(struct TarInfo *ti) { debug(dbg_eachfiledetail,"tarobject directory, nonatomic"); nifd->namenode->flags |= fnnf_no_atomic_overwrite; if (rename(fnamevb.buf,fnametmpvb.buf)) - ohshite("unable to move aside `%.255s' to install new version",ti->Name); + ohshite(_("unable to move aside `%.255s' to install new version"),ti->Name); } else if (S_ISLNK(stab.st_mode)) { /* We can't make a symlink with two hardlinks, so we'll have to copy it. * (Pretend that making a copy of a symlink is the same as linking to it.) @@ -492,19 +503,23 @@ int tarobject(struct TarInfo *ti) { } while (r == symlinkfn.size); symlinkfn.used= r; varbufaddc(&symlinkfn,0); if (symlink(symlinkfn.buf,fnametmpvb.buf)) - ohshite("unable to make backup symlink for `%.255s'",ti->Name); + ohshite(_("unable to make backup symlink for `%.255s'"),ti->Name); +#ifdef HAVE_LCHOWN + if (lchown(fnametmpvb.buf,stab.st_uid,stab.st_gid)) +#else if (chown(fnametmpvb.buf,stab.st_uid,stab.st_gid)) - ohshite("unable to chown backup symlink for `%.255s'",ti->Name); +#endif + ohshite(_("unable to chown backup symlink for `%.255s'"),ti->Name); } else { debug(dbg_eachfiledetail,"tarobject nondirectory, `link' backup"); if (link(fnamevb.buf,fnametmpvb.buf)) - ohshite("unable to make backup link of `%.255s' before installing new version", + ohshite(_("unable to make backup link of `%.255s' before installing new version"), ti->Name); } } if (rename(fnamenewvb.buf,fnamevb.buf)) - ohshite("unable to install new version of `%.255s'",ti->Name); + ohshite(_("unable to install new version of `%.255s'"),ti->Name); nifd->namenode->flags |= fnnf_elide_other_lists; @@ -518,19 +533,19 @@ static int try_remove_can(struct deppossi *pdep, struct packageinlist *newdeconf; if (force_depends(pdep)) { - fprintf(stderr, DPKG ": warning - " - "ignoring dependency problem with removal of %s:\n%s", + fprintf(stderr, _("dpkg: warning - " + "ignoring dependency problem with removal of %s:\n%s"), fixbyrm->name, why); return 1; } else if (f_autodeconf) { if (pdep->up->up->installed.essential) { if (fc_removeessential) { - fprintf(stderr, DPKG ": warning - considering deconfiguration of essential\n" - " package %s, to enable removal of %s.\n", + fprintf(stderr, _("dpkg: warning - considering deconfiguration of essential\n" + " package %s, to enable removal of %s.\n"), pdep->up->up->name,fixbyrm->name); } else { - fprintf(stderr, DPKG ": no, %s is essential, will not deconfigure\n" - " it in order to enable removal of %s.\n", + fprintf(stderr, _("dpkg: no, %s is essential, will not deconfigure\n" + " it in order to enable removal of %s.\n"), pdep->up->up->name,fixbyrm->name); return 0; } @@ -542,7 +557,7 @@ static int try_remove_can(struct deppossi *pdep, deconfigure= newdeconf; return 1; } else { - fprintf(stderr, DPKG ": no, cannot remove %s (--auto-deconfigure will help):\n%s", + fprintf(stderr, _("dpkg: no, cannot remove %s (--auto-deconfigure will help):\n%s"), fixbyrm->name, why); return 0; } @@ -576,11 +591,11 @@ void check_conflict(struct dependency *dep, struct pkginfo *pkg, (!fixbyrm->installed.essential || fc_removeessential)))) { assert(fixbyrm->clientdata->istobe == itb_normal); fixbyrm->clientdata->istobe= itb_remove; - fprintf(stderr, DPKG ": considering removing %s in favour of %s ...\n", + fprintf(stderr, _("dpkg: considering removing %s in favour of %s ...\n"), fixbyrm->name, pkg->name); if (fixbyrm->status != stat_installed) { fprintf(stderr, - "%s is not properly installed - ignoring any dependencies on it.\n", + _("%s is not properly installed - ignoring any dependencies on it.\n"), fixbyrm->name); pdep= 0; } else { @@ -607,8 +622,8 @@ void check_conflict(struct dependency *dep, struct pkginfo *pkg, continue; if (depisok(pdep->up, &removalwhy, 0,0)) continue; varbufaddc(&removalwhy,0); - fprintf(stderr, DPKG - ": may have trouble removing %s, as it provides %s ...\n", + fprintf(stderr, _("dpkg" + ": may have trouble removing %s, as it provides %s ...\n"), fixbyrm->name, providecheck->list->ed->name); if (!try_remove_can(pdep,fixbyrm,removalwhy.buf)) goto break_from_both_loops_at_once; @@ -622,11 +637,11 @@ void check_conflict(struct dependency *dep, struct pkginfo *pkg, } if (!pdep && (fixbyrm->eflag & eflagf_reinstreq)) { if (fc_removereinstreq) { - fprintf(stderr, DPKG ": package %s requires reinstallation, but will" - " remove anyway as you request.\n", fixbyrm->name); + fprintf(stderr, _("dpkg: package %s requires reinstallation, but will" + " remove anyway as you request.\n"), fixbyrm->name); } else { - fprintf(stderr, DPKG ": package %s requires reinstallation, " - "will not remove.\n", fixbyrm->name); + fprintf(stderr, _("dpkg: package %s requires reinstallation, " + "will not remove.\n"), fixbyrm->name); pdep= &flagdeppossi; } } @@ -634,7 +649,7 @@ void check_conflict(struct dependency *dep, struct pkginfo *pkg, /* This conflict is OK - we'll remove the conflictor. */ *conflictorp= fixbyrm; varbuffree(&conflictwhy); varbuffree(&removalwhy); - fprintf(stderr, DPKG ": yes, will remove %s in favour of %s.\n", + fprintf(stderr, _("dpkg: yes, will remove %s in favour of %s.\n"), fixbyrm->name, pkg->name); return; } @@ -642,11 +657,11 @@ void check_conflict(struct dependency *dep, struct pkginfo *pkg, } } varbufaddc(&conflictwhy,0); - fprintf(stderr, DPKG ": regarding %s containing %s:\n%s", + fprintf(stderr, _("dpkg: regarding %s containing %s:\n%s"), pfilename, pkg->name, conflictwhy.buf); if (!force_conflicts(dep->list)) - ohshit("conflicting packages - not installing %.250s",pkg->name); - fprintf(stderr, DPKG ": warning - ignoring conflict, may proceed anyway !\n"); + ohshit(_("conflicting packages - not installing %.250s"),pkg->name); + fprintf(stderr, _("dpkg: warning - ignoring conflict, may proceed anyway !\n")); varbuffree(&conflictwhy); return; @@ -683,7 +698,7 @@ void archivefiles(const char *const *argv) { if (f_recursive) { if (!*argv) - badusage("--%s --recursive needs at least one path argument",cipaction->olong); + badusage(_("--%s --recursive needs at least one path argument"),cipaction->olong); m_pipe(pi); if (!(fc= m_fork())) { @@ -712,23 +727,23 @@ void archivefiles(const char *const *argv) { arglist[i++]= "-print0"; arglist[i++]= 0; execvp(FIND, (char* const*)arglist); - ohshite("failed to exec " FIND " for --recursive"); + ohshite(_("failed to exec find for --recursive")); } nfiles= 0; - pf= fdopen(pi[0],"r"); if (!pf) ohshite("failed to fdopen find's pipe"); + pf= fdopen(pi[0],"r"); if (!pf) ohshite(_("failed to fdopen find's pipe")); close(pi[1]); varbufreset(&findoutput); while ((c= fgetc(pf)) != EOF) { varbufaddc(&findoutput,c); if (!c) nfiles++; } - if (ferror(pf)) ohshite("error reading find's pipe"); - if (fclose(pf)) ohshite("error closing find's pipe"); + if (ferror(pf)) ohshite(_("error reading find's pipe")); + if (fclose(pf)) ohshite(_("error closing find's pipe")); waitsubproc(fc,"find",0); - if (!nfiles) ohshit("searched, but found no packages (files matching " - ARCHIVE_FILENAME_PATTERN ")"); + if (!nfiles) ohshit(_("searched, but found no packages (files matching " + "*.deb")); varbufaddc(&findoutput,0); varbufaddc(&findoutput,0); @@ -744,7 +759,7 @@ void archivefiles(const char *const *argv) { } else { - if (!*argv) badusage("--%s needs at least one package archive file argument", + if (!*argv) badusage(_("--%s needs at least one package archive file argument"), cipaction->olong); argp= argv; @@ -791,7 +806,7 @@ void archivefiles(const char *const *argv) { case act_avail: break; default: - internerr("unknown action"); + internerr(_("unknown action")); } modstatdb_shutdown(); diff --git a/main/cleanup.c b/main/cleanup.c index a7057805e..0db14809d 100644 --- a/main/cleanup.c +++ b/main/cleanup.c @@ -19,6 +19,7 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +#include <errno.h> #include <stdio.h> #include <string.h> #include <stdlib.h> @@ -31,11 +32,11 @@ #include <sys/stat.h> #include <sys/types.h> -#include "config.h" -#include "dpkg.h" -#include "dpkg-db.h" -#include "myopt.h" -#include "tarfn.h" +#include <config.h> +#include <dpkg.h> +#include <dpkg-db.h> +#include <tarfn.h> +#include <myopt.h> #include "filesdb.h" #include "main.h" @@ -80,20 +81,20 @@ void cu_installnew(int argc, void **argv) { */ debug(dbg_eachfiledetail,"cu_installnew restoring nonatomic"); if (unlinkorrmdir(fnamevb.buf) && errno != ENOENT && errno != ENOTDIR) - ohshite("unable to remove newly-installed version of `%.250s' to allow" - " reinstallation of backup copy",namenode->name); + ohshite(_("unable to remove newly-installed version of `%.250s' to allow" + " reinstallation of backup copy"),namenode->name); } else { debug(dbg_eachfiledetail,"cu_installnew restoring atomic"); } /* Either we can do an atomic restore, or we've made room: */ if (rename(fnametmpvb.buf,fnamevb.buf)) - ohshite("unable to restore backup version of `%.250s'",namenode->name); + ohshite(_("unable to restore backup version of `%.250s'"),namenode->name); } else { debug(dbg_eachfiledetail,"cu_installnew not restoring"); } /* Whatever, we delete <foo>.dpkg-new now, if it still exists. */ if (unlinkorrmdir(fnamenewvb.buf) && errno != ENOENT && errno != ENOTDIR) - ohshite("unable to remove newly-extracted version of `%.250s'",namenode->name); + ohshite(_("unable to remove newly-extracted version of `%.250s'"),namenode->name); cleanup_pkg_failed--; cleanup_conflictor_failed--; } diff --git a/main/configure.c b/main/configure.c index dbd79f562..6565fde65 100644 --- a/main/configure.c +++ b/main/configure.c @@ -19,6 +19,8 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +#include <errno.h> +#include <signal.h> #include <stdio.h> #include <string.h> #include <stdlib.h> @@ -33,10 +35,9 @@ #include <assert.h> #include <sys/wait.h> -#include "config.h" -#include "dpkg.h" -#include "dpkg-db.h" -#include "myopt.h" +#include <config.h> +#include <dpkg.h> +#include <dpkg-db.h> #include "filesdb.h" #include "main.h" @@ -76,10 +77,10 @@ void deferred_configure(struct pkginfo *pkg) { const char *s; if (pkg->status == stat_notinstalled) - ohshit("no package named `%s' is installed, cannot configure",pkg->name); + ohshit(_("no package named `%s' is installed, cannot configure"),pkg->name); if (pkg->status != stat_unpacked && pkg->status != stat_halfconfigured) - ohshit("package %.250s is not ready for configuration\n" - " cannot configure (current status `%.250s')", + ohshit(_("package %.250s is not ready for configuration\n" + " cannot configure (current status `%.250s')"), pkg->name, statusinfos[pkg->status].name); if (dependtry > 1) { if (findbreakcycle(pkg,0)) sincenothing= 0; } @@ -95,14 +96,14 @@ void deferred_configure(struct pkginfo *pkg) { sincenothing= 0; varbufaddc(&aemsgs,0); fprintf(stderr, - DPKG ": dependency problems prevent configuration of %s:\n%s", + _("dpkg: dependency problems prevent configuration of %s:\n%s"), pkg->name, aemsgs.buf); varbuffree(&aemsgs); - ohshit("dependency problems - leaving unconfigured"); + ohshit(_("dependency problems - leaving unconfigured")); } else if (aemsgs.used) { varbufaddc(&aemsgs,0); fprintf(stderr, - DPKG ": %s: dependency problems, but configuring anyway as you request:\n%s", + _("dpkg: %s: dependency problems, but configuring anyway as you request:\n%s"), pkg->name, aemsgs.buf); } varbuffree(&aemsgs); @@ -110,10 +111,10 @@ void deferred_configure(struct pkginfo *pkg) { if (pkg->eflag & eflagf_reinstreq) forcibleerr(fc_removereinstreq, - "Package is in a very bad inconsistent state - you should\n" - " reinstall it before attempting configuration."); + _("Package is in a very bad inconsistent state - you should\n" + " reinstall it before attempting configuration.")); - printf("Setting up %s (%s) ...\n",pkg->name, + printf(_("Setting up %s (%s) ...\n"),pkg->name, versiondescribe(&pkg->installed.version,vdew_never)); if (f_noact) { @@ -161,7 +162,7 @@ void deferred_configure(struct pkginfo *pkg) { /* If the .dpkg-new file is no longer there, ignore this one. */ if (lstat(cdr2.buf,&stab)) { if (errno == ENOENT) continue; - ohshite("unable to stat new dist conffile `%.250s'",cdr2.buf); + ohshite(_("unable to stat new dist conffile `%.250s'"),cdr2.buf); } md5hash(pkg,newdisthash,cdr2.buf); @@ -170,13 +171,13 @@ void deferred_configure(struct pkginfo *pkg) { */ if (!stat(cdr.buf,&stab)) { if (chown(cdr2.buf,stab.st_uid,stab.st_gid)) - ohshite("unable to change ownership of new dist conffile `%.250s'",cdr2.buf); + ohshite(_("unable to change ownership of new dist conffile `%.250s'"),cdr2.buf); if (chmod(cdr2.buf,stab.st_mode & 07777)) if (errno != ENOENT) - ohshite("unable to set mode of new dist conffile `%.250s'",cdr2.buf); + ohshite(_("unable to set mode of new dist conffile `%.250s'"),cdr2.buf); } else { if (errno != ENOENT) - ohshite("unable to stat current installed conffile `%.250s'",cdr.buf); + ohshite(_("unable to stat current installed conffile `%.250s'"),cdr.buf); } if (!strcmp(currenthash,newdisthash)) { @@ -208,57 +209,57 @@ void deferred_configure(struct pkginfo *pkg) { do { - fprintf(stderr, "\nConfiguration file `%s'", conff->name); + fprintf(stderr, _("\nConfiguration file `%s'"), conff->name); if (strcmp(conff->name,cdr.buf)) - fprintf(stderr," (actually `%s')",cdr.buf); + fprintf(stderr,_(" (actually `%s')"),cdr.buf); if (cfof_isnew) { fprintf(stderr, - "\n" + _("\n" " ==> File on system created by you or by a script.\n" - " ==> File also in package provided by package maintainer.\n"); + " ==> File also in package provided by package maintainer.\n")); } else { fprintf(stderr, useredited ? - "\n ==> Modified (by you or by a script) since installation.\n" : - "\n Not modified since installation.\n"); + _("\n ==> Modified (by you or by a script) since installation.\n") : + _("\n Not modified since installation.\n")); fprintf(stderr, distedited ? - " ==> Package distributor has shipped an updated version.\n" : - " Version in package is the same as at last installation.\n"); + _(" ==> Package distributor has shipped an updated version.\n") : + _(" Version in package is the same as at last installation.\n")); } fprintf(stderr, - " What would you like to do about it ? Your options are:\n" + _(" What would you like to do about it ? Your options are:\n" " Y or I : install the package maintainer's version\n" " N or O : keep your currently-installed version\n" - " Z : background this process to examine the situation\n"); + " Z : background this process to examine the situation\n")); if (what & cfof_keep) - fprintf(stderr, " The default action is to keep your current version.\n"); + fprintf(stderr, _(" The default action is to keep your current version.\n")); else if (what & cfof_install) - fprintf(stderr, " The default action is to install the new version.\n"); + fprintf(stderr, _(" The default action is to install the new version.\n")); s= strrchr(conff->name,'/'); if (!s || !*++s) s= conff->name; fprintf(stderr, "*** %s (Y/I/N/O/Z) %s ? ", s, - (what & cfof_keep) ? "[default=N]" : - (what & cfof_install) ? "[default=Y]" : "[no default]"); + (what & cfof_keep) ? _("[default=N]") : + (what & cfof_install) ? _("[default=Y]") : _("[no default]")); if (ferror(stderr)) - ohshite("error writing to stderr, discovered before conffile prompt"); + ohshite(_("error writing to stderr, discovered before conffile prompt")); cc= 0; while ((c= getchar()) != EOF && c != '\n') if (!isspace(c) && !cc) cc= tolower(c); if (c == EOF) { - if (ferror(stdin)) ohshite("read error on stdin at conffile prompt"); - ohshit("EOF on stdin at conffile prompt"); + if (ferror(stdin)) ohshite(_("read error on stdin at conffile prompt")); + ohshit(_("EOF on stdin at conffile prompt")); } if (!cc) { @@ -273,29 +274,29 @@ void deferred_configure(struct pkginfo *pkg) { strcpy(cdr2rest, DPKGNEWEXT); fprintf(stderr, - "Your currently installed version of the file is in:\n" + _("Your currently installed version of the file is in:\n" " %s\n" "The version contained in the new version of the package is in:\n" " %s\n" "If you decide to take care of the update yourself, perhaps by editing\n" " the installed version, you should choose `N' when you return, so that\n" - " I do not mess up your careful work.\n", + " I do not mess up your careful work.\n"), cdr.buf, cdr2.buf); s= getenv(NOJOBCTRLSTOPENV); if (s && *s) { - fputs("Type `exit' when you're done.\n",stderr); + fputs(_("Type `exit' when you're done.\n"),stderr); if (!(c1= m_fork())) { s= getenv(SHELLENV); if (!s || !*s) s= DEFAULTSHELL; execlp(s,s,"-i",(char*)0); - ohshite("failed to exec shell (%.250s)",s); + ohshite(_("failed to exec shell (%.250s)"),s); } while ((r= waitpid(c1,&status,0)) == -1 && errno == EINTR); - if (r != c1) { onerr_abort++; ohshite("wait for shell failed"); } + if (r != c1) { onerr_abort++; ohshite(_("wait for shell failed")); } } else { - fputs("Don't forget to foreground (`fg') this " - "process when you're done !\n",stderr); + fputs(_("Don't forget to foreground (`fg') this " + "process when you're done !\n"),stderr); kill(-getpgid(0),SIGTSTP); } } @@ -315,7 +316,7 @@ void deferred_configure(struct pkginfo *pkg) { strcpy(cdr2rest,DPKGOLDEXT); if (unlink(cdr2.buf) && errno != ENOENT) fprintf(stderr, - DPKG ": %s: warning - failed to remove old backup `%.250s': %s\n", + _("dpkg: %s: warning - failed to remove old backup `%.250s': %s\n"), pkg->name, cdr2.buf, strerror(errno)); cdr.used--; varbufaddstr(&cdr,DPKGDISTEXT); @@ -323,7 +324,7 @@ void deferred_configure(struct pkginfo *pkg) { strcpy(cdr2rest,DPKGNEWEXT); if (rename(cdr2.buf,cdr.buf)) fprintf(stderr, - DPKG ": %s: warning - failed to rename `%.250s' to `%.250s': %s\n", + _("dpkg: %s: warning - failed to rename `%.250s' to `%.250s': %s\n"), pkg->name, cdr2.buf, cdr.buf, strerror(errno)); break; @@ -331,32 +332,32 @@ void deferred_configure(struct pkginfo *pkg) { strcpy(cdr2rest,DPKGNEWEXT); if (unlink(cdr2.buf)) fprintf(stderr, - DPKG ": %s: warning - failed to remove `%.250s': %s\n", + _("dpkg: %s: warning - failed to remove `%.250s': %s\n"), pkg->name, cdr2.buf, strerror(errno)); break; case cfo_install | cfof_backup: strcpy(cdr2rest,DPKGDISTEXT); if (unlink(cdr2.buf) && errno != ENOENT) - fprintf(stderr, DPKG - ": %s: warning - failed to remove old distrib version `%.250s': %s\n", + fprintf(stderr, + _("dpkg: %s: warning - failed to remove old distrib version `%.250s': %s\n"), pkg->name, cdr2.buf, strerror(errno)); strcpy(cdr2rest,DPKGOLDEXT); if (unlink(cdr2.buf) && errno != ENOENT) - fprintf(stderr, DPKG - ": %s: warning - failed to remove `%.250s' (before overwrite): %s\n", + fprintf(stderr, + _("dpkg: %s: warning - failed to remove `%.250s' (before overwrite): %s\n"), pkg->name, cdr2.buf, strerror(errno)); if (link(cdr.buf,cdr2.buf)) - fprintf(stderr, DPKG - ": %s: warning - failed to link `%.250s' to `%.250s': %s\n", + fprintf(stderr, + _("dpkg: %s: warning - failed to link `%.250s' to `%.250s': %s\n"), pkg->name, cdr.buf, cdr2.buf, strerror(errno)); /* fall through */ case cfo_install: - printf("Installing new version of config file %s ...\n",conff->name); + printf(_("Installing new version of config file %s ...\n"),conff->name); case cfo_newconff: strcpy(cdr2rest,DPKGNEWEXT); if (rename(cdr2.buf,cdr.buf)) - ohshite("unable to install `%.250s' as `%.250s'",cdr2.buf,cdr.buf); + ohshite(_("unable to install `%.250s' as `%.250s'"),cdr2.buf,cdr.buf); break; default: @@ -412,8 +413,8 @@ int conffderef(struct pkginfo *pkg, struct varbuf *result, const char *in) { debug(dbg_conffdetail,"conffderef in=`%s' current working=`%s'", in, result->buf); if (lstat(result->buf,&stab)) { if (errno != ENOENT) - fprintf(stderr, DPKG ": %s: warning - unable to stat config file `%s'\n" - " (= `%s'): %s\n", + fprintf(stderr, _("dpkg: %s: warning - unable to stat config file `%s'\n" + " (= `%s'): %s\n"), pkg->name, in, result->buf, strerror(errno)); debug(dbg_conffdetail,"conffderef nonexistent"); return 0; @@ -423,8 +424,8 @@ int conffderef(struct pkginfo *pkg, struct varbuf *result, const char *in) { } else if (S_ISLNK(stab.st_mode)) { debug(dbg_conffdetail,"conffderef symlink loopprotect=%d",loopprotect); if (loopprotect++ >= 25) { - fprintf(stderr, DPKG ": %s: warning - config file `%s' is a circular link\n" - " (= `%s')\n", pkg->name, in, result->buf); + fprintf(stderr, _("dpkg: %s: warning - config file `%s' is a circular link\n" + " (= `%s')\n"), pkg->name, in, result->buf); return -1; } need= 255; @@ -436,8 +437,8 @@ int conffderef(struct pkginfo *pkg, struct varbuf *result, const char *in) { } r= readlink(result->buf,linkreadbuf,linkreadbufsize-1); if (r < 0) { - fprintf(stderr, DPKG ": %s: warning - unable to readlink conffile `%s'\n" - " (= `%s'): %s\n", + fprintf(stderr, _("dpkg: %s: warning - unable to readlink conffile `%s'\n" + " (= `%s'): %s\n"), pkg->name, in, result->buf, strerror(errno)); return -1; } @@ -454,9 +455,9 @@ int conffderef(struct pkginfo *pkg, struct varbuf *result, const char *in) { } else { for (r=result->used-2; r>0 && result->buf[r] != '/'; r--); if (r < 0) { - fprintf(stderr, DPKG - ": %s: warning - conffile `%.250s' resolves to degenerate filename\n" - " (`%s' is a symlink to `%s')\n", + fprintf(stderr, + _("dpkg: %s: warning - conffile `%.250s' resolves to degenerate filename\n" + " (`%s' is a symlink to `%s')\n"), pkg->name, in, result->buf, linkreadbuf); return -1; } @@ -468,8 +469,8 @@ int conffderef(struct pkginfo *pkg, struct varbuf *result, const char *in) { varbufaddstr(result,linkreadbuf); varbufaddc(result,0); } else { - fprintf(stderr, DPKG ": %s: warning - conffile `%.250s' is not a plain" - " file or symlink (= `%s')\n", + fprintf(stderr, _("dpkg: %s: warning - conffile `%.250s' is not a plain" + " file or symlink (= `%s')\n"), pkg->name, in, result->buf); return -1; } @@ -490,12 +491,12 @@ static void md5hash(struct pkginfo *pkg, char hashbuf[33], const char *fn) { if (!(c1= m_fork())) { m_dup2(fd,0); m_dup2(p1[1],1); close(p1[0]); execlp(MD5SUM,MD5SUM,(char*)0); - ohshite("failed to exec md5sum"); + ohshite(_("failed to exec md5sum")); } close(p1[1]); close(fd); file= fdopen(p1[0],"r"); push_cleanup(cu_closefile,ehflag_bombout, 0,0, 1,(void*)file); - if (!file) ohshite("unable to fdopen for md5sum of `%.250s'",fn); + if (!file) ohshite(_("unable to fdopen for md5sum of `%.250s'"),fn); ok= 1; memset(hashbuf,0,33); if (fread(hashbuf,1,32,file) != 32) ok=0; @@ -503,16 +504,16 @@ static void md5hash(struct pkginfo *pkg, char hashbuf[33], const char *fn) { if (getc(file) != EOF) ok=0; waitsubproc(c1,"md5sum",0); if (strspn(hashbuf,"0123456789abcdef") != 32) ok=0; - if (ferror(file)) ohshite("error reading pipe from md5sum"); - if (fclose(file)) ohshite("error closing pipe from md5sum"); + if (ferror(file)) ohshite(_("error reading pipe from md5sum")); + if (fclose(file)) ohshite(_("error closing pipe from md5sum")); pop_cleanup(ehflag_normaltidy); /* file= fdopen(p1[0]) */ pop_cleanup(ehflag_normaltidy); /* m_pipe() */ pop_cleanup(ehflag_normaltidy); /* fd= open(cdr.buf) */ - if (!ok) ohshit("md5sum gave malformatted output `%.250s'",hashbuf); + if (!ok) ohshit(_("md5sum gave malformatted output `%.250s'"),hashbuf); } else if (errno == ENOENT) { strcpy(hashbuf,NONEXISTENTFLAG); } else { - fprintf(stderr, DPKG ": %s: warning - unable to open conffile %s for hash: %s\n", + fprintf(stderr, _("dpkg: %s: warning - unable to open conffile %s for hash: %s\n"), pkg->name, fn, strerror(errno)); strcpy(hashbuf,"-"); } diff --git a/main/debugmake b/main/debugmake deleted file mode 100755 index 7c142c58d..000000000 --- a/main/debugmake +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh -set -x -make XCFLAGS=-g LDFLAGS=-g 'LIBS= -lefence -L../lib -ldpkg' "$@" diff --git a/main/depcon.c b/main/depcon.c index b59c2cd49..06bea4784 100644 --- a/main/depcon.c +++ b/main/depcon.c @@ -19,14 +19,15 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +#include <errno.h> #include <unistd.h> #include <sys/stat.h> #include <sys/types.h> #include <assert.h> -#include "config.h" -#include "dpkg.h" -#include "dpkg-db.h" +#include <config.h> +#include <dpkg.h> +#include <dpkg-db.h> #include "main.h" @@ -69,7 +70,7 @@ static int foundcyclebroken(struct cyclesofarlink *thislink, postinstfilename= pkgadminfile(sol->pkg,POSTINSTFILE); if (lstat(postinstfilename,&stab)) { if (errno == ENOENT) break; - ohshite("unable to check for existence of `%.250s'",postinstfilename); + ohshite(_("unable to check for existence of `%.250s'"),postinstfilename); } } /* Now we have either a package with no postinst, or the other @@ -132,10 +133,10 @@ int findbreakcycle(struct pkginfo *pkg, struct cyclesofarlink *sofar) { void describedepcon(struct varbuf *addto, struct dependency *dep) { varbufaddstr(addto,dep->up->name); switch (dep->type) { - case dep_depends: varbufaddstr(addto, " depends on "); break; - case dep_predepends: varbufaddstr(addto, " pre-depends on "); break; - case dep_recommends: varbufaddstr(addto, " recommends "); break; - case dep_conflicts: varbufaddstr(addto, " conflicts with "); break; + case dep_depends: varbufaddstr(addto, _(" depends on ")); break; + case dep_predepends: varbufaddstr(addto, _(" pre-depends on ")); break; + case dep_recommends: varbufaddstr(addto, _(" recommends ")); break; + case dep_conflicts: varbufaddstr(addto, _(" conflicts with ")); break; default: internerr("unknown deptype"); } varbufdependency(addto, dep); @@ -209,14 +210,14 @@ int depisok(struct dependency *dep, struct varbuf *whynot, for (possi= dep->list; possi; possi= possi->next) { switch (possi->ed->clientdata->istobe) { case itb_remove: - sprintf(linebuf," %.250s is to be removed.\n",possi->ed->name); + sprintf(linebuf,_(" %.250s is to be removed.\n"),possi->ed->name); break; case itb_deconfigure: - sprintf(linebuf," %.250s is to be deconfigured.\n",possi->ed->name); + sprintf(linebuf,_(" %.250s is to be deconfigured.\n"),possi->ed->name); break; case itb_installnew: if (versionsatisfied(&possi->ed->available,possi)) return 1; - sprintf(linebuf," %.250s is to be installed, but is version %.250s.\n", + sprintf(linebuf,_(" %.250s is to be installed, but is version %.250s.\n"), possi->ed->name, versiondescribe(&possi->ed->available.version,vdew_nonambig)); break; @@ -224,7 +225,7 @@ int depisok(struct dependency *dep, struct varbuf *whynot, switch (possi->ed->status) { case stat_installed: if (versionsatisfied(&possi->ed->installed,possi)) return 1; - sprintf(linebuf," %.250s is installed, but is version %.250s.\n", + sprintf(linebuf,_(" %.250s is installed, but is version %.250s.\n"), possi->ed->name, versiondescribe(&possi->ed->installed.version,vdew_nonambig)); break; @@ -239,17 +240,17 @@ int depisok(struct dependency *dep, struct varbuf *whynot, case stat_halfconfigured: if (allowunconfigd) { if (!informativeversion(&possi->ed->configversion)) { - sprintf(linebuf, " %.250s is unpacked, but has never been configured.\n", + sprintf(linebuf, _(" %.250s is unpacked, but has never been configured.\n"), possi->ed->name); break; } else if (!versionsatisfied(&possi->ed->installed, possi)) { - sprintf(linebuf, " %.250s is unpacked, but is version %.250s.\n", + sprintf(linebuf, _(" %.250s is unpacked, but is version %.250s.\n"), possi->ed->name, versiondescribe(&possi->ed->available.version,vdew_nonambig)); break; } else if (!versionsatisfied3(&possi->ed->configversion, &possi->version,possi->verrel)) { - sprintf(linebuf, " %.250s latest configured version is %.250s.\n", + sprintf(linebuf, _(" %.250s latest configured version is %.250s.\n"), possi->ed->name, versiondescribe(&possi->ed->configversion,vdew_nonambig)); break; @@ -258,8 +259,8 @@ int depisok(struct dependency *dep, struct varbuf *whynot, } } default: - sprintf(linebuf, " %.250s is %s.\n", - possi->ed->name, statusstrings[possi->ed->status]); + sprintf(linebuf, _(" %.250s is %s.\n"), + possi->ed->name, gettext(statusstrings[possi->ed->status])); break; } break; @@ -294,18 +295,18 @@ int depisok(struct dependency *dep, struct varbuf *whynot, */ continue; case itb_remove: - sprintf(linebuf, " %.250s provides %.250s but is to be removed.\n", + sprintf(linebuf, _(" %.250s provides %.250s but is to be removed.\n"), provider->up->up->name, possi->ed->name); break; case itb_deconfigure: - sprintf(linebuf, " %.250s provides %.250s but is to be deconfigured.\n", + sprintf(linebuf, _(" %.250s provides %.250s but is to be deconfigured.\n"), provider->up->up->name, possi->ed->name); break; case itb_normal: case itb_preinstall: if (provider->up->up->status == stat_installed) return 1; - sprintf(linebuf, " %.250s provides %.250s but is %s.\n", + sprintf(linebuf, _(" %.250s provides %.250s but is %s.\n"), provider->up->up->name, possi->ed->name, - statusstrings[provider->up->up->status]); + gettext(statusstrings[provider->up->up->status])); break; default: internerr("unknown istobe provider"); @@ -348,7 +349,7 @@ int depisok(struct dependency *dep, struct varbuf *whynot, break; case itb_installnew: if (!versionsatisfied(&possi->ed->available, possi)) break; - sprintf(linebuf, " %.250s (version %.250s) is to be installed.\n", + sprintf(linebuf, _(" %.250s (version %.250s) is to be installed.\n"), possi->ed->name, versiondescribe(&possi->ed->available.version,vdew_nonambig)); varbufaddstr(whynot, linebuf); @@ -362,10 +363,10 @@ int depisok(struct dependency *dep, struct varbuf *whynot, break; default: if (!versionsatisfied(&possi->ed->installed, possi)) break; - sprintf(linebuf, " %.250s (version %.250s) is %s.\n", + sprintf(linebuf, _(" %.250s (version %.250s) is %s.\n"), possi->ed->name, versiondescribe(&possi->ed->installed.version,vdew_nonambig), - statusstrings[possi->ed->status]); + gettext(statusstrings[possi->ed->status])); varbufaddstr(whynot, linebuf); if (!canfixbyremove) return 0; nconflicts++; @@ -387,7 +388,7 @@ int depisok(struct dependency *dep, struct varbuf *whynot, if (provider->up->type != dep_provides) continue; if (provider->up->up->clientdata->istobe != itb_installnew) continue; if (provider->up->up == dep->up) continue; /* conflicts and provides the same */ - sprintf(linebuf, " %.250s provides %.250s and is to be installed.\n", + sprintf(linebuf, _(" %.250s provides %.250s and is to be installed.\n"), provider->up->up->name, possi->ed->name); varbufaddstr(whynot, linebuf); /* We can't remove the one we're about to install: */ @@ -418,9 +419,9 @@ int depisok(struct dependency *dep, struct varbuf *whynot, case stat_notinstalled: case stat_configfiles: continue; default: - sprintf(linebuf, " %.250s provides %.250s and is %s.\n", + sprintf(linebuf, _(" %.250s provides %.250s and is %s.\n"), provider->up->up->name, possi->ed->name, - statusstrings[provider->up->up->status]); + gettext(statusstrings[provider->up->up->status])); varbufaddstr(whynot, linebuf); if (!canfixbyremove) return 0; nconflicts++; diff --git a/main/dpkg.8 b/main/dpkg.8 index 9d4de1307..2eb475a4c 100644 --- a/main/dpkg.8 +++ b/main/dpkg.8 @@ -1,322 +1,309 @@ -.TH dpkg 8 +.\" Hey Emacs! This file is -*- nroff -*- source. +.TH DPKG 8 "April 12, 1998" "Debian Project" "Debian GNU/Linux" .SH NAME -dpkg - a low-level package manager for Debian GNU/Linux +dpkg - a medium-level package manager for Debian GNU/Linux .SH SYNOPSIS - -.B dpkg -[options] action - -.SH WARNING WARNING WARNING - -This manual was inaccurate when it was written and is now also out of -date. - -It should -.I not -be used by package maintainers wishing to understand how .B dpkg -will install their packages. +[\fIoptions\fP] \fIaction\fP -It may be useful to users wishing to understand -.BR "dpkg"'s +.SH WARNING +This manual is intended for users wishing to understand \fBdpkg\fP's command line options and package states in more detail than that -provided by -.BR "dpkg --help" . +provided by \fBdpkg --help\fP. -The descriptions of what -.B dpkg -does when installing and removing packages are particularly -inadequate. For detailed information about this please refer to the -Debian Packaging Guidelines, available under -.I guidelines -in the GNU Info system. +It should \fInot\fP be used by package maintainers wishing to +understand how \fBdpkg\fP will install their packages. The +descriptions of what \fBdpkg\fP does when installing and removing +packages are particularly inadequate. For detailed information about +this, please refer to the \fIPackage Management System\fP topic under +\fIdebian-faq\fP in the GNU Info system. For information about +creating Debian packages, see the \fIDebian Package Management +Tools\fP topic in the same place. .SH DESCRIPTION +\fBdpkg\fP is a medium-level tool to install, build, remove and manage +Debian GNU/Linux packages. The primary and more user-friendly +front-end for \fBdpkg\fP is \fBdselect\fP(8). \fBdpkg\fP itself is +controlled entirely via command line parameters, which consist of exactly +one action and zero or more options. The action-parameter tells dpkg +what to do and options control the behavior of the action in some way. + +\fBdpkg\fP can be also be used as a front-end to \fBdpkg-deb\fP. +The following +are \fBdpkg-deb\fP actions, and if they are encountered, \fBdpkg\fP +just runs \fBdpkg-deb\fP with the parameters given to it: +.nf + \fB-b\fP, \fB--build\fP, + \fB-c\fP, \fB--contents\fP, + \fB-I\fP, \fB--info\fP, + \fB-f\fP, \fB--field\fP, + \fB-e\fP, \fB--control\fP, + \fB-x\fP, \fB--extract\fP, + \fB-X\fP, \fB--vextract\fP, and + \fB--fsys-tarfile\fP. +.fi +Please refer to \fBdpkg-deb\fP(8) for information about these actions. -.B dpkg -is a medium-level tool to install, build, remove and manage Debian -GNU/Linux packages. The primary and more user-friendly front-end -for -.B dpkg -is -.B dselect(8). -.B dpkg -itself is totally controlled via command line parameters, whose include -one or more options and exactly one action. The action-parameter tells -dpkg what to do and options control the behaviour of the action in some -way. +.SH INFORMATION ABOUT PACKAGES +\fBdpkg\fP maintains some usable information about available +packages. The information is divided in three classes: \fBstates\fP, +\fBselection states\fP and \fBflags\fP. These values are intended to +be changed mainly with \fBdselect\fP. +.SS PACKAGE STATES +.TP +.B installed +The package is unpacked and configured OK. +.TP +.B half-installed +The installation of the package has been started, but not completed for +some reason. +.TP +.B not-installed +The package is not installed on your system. +.TP +.B unpacked +The package is unpacked, but not configured. +.TP +.B half-configured +The package is unpacked and configuration has been started, but not yet +completed for some reason. +.TP +.B config-files +Only the configuration files of the package exist on the system. +.SS PACKAGE SELECTION STATES +.TP +.B install +The package is selected for installation. +.TP +.B deinstall +The package is selected for deinstallation (i.e. we want to remove all +files, except configuration files). +.TP +.B purge +The package is selected to be purged (i.e. we want to remove everything, +even configuration files). +.SS PACKAGE FLAGS +.TP +.B hold +A package marked to be on \fBhold\fP is not handled by \fBdpkg\fP, +unless forced to do that with option \fB--force-hold\fP. +.TP +.B reinst-required +A package marked \fBreinst-required\fP is broken and requires +reinstallation. These packages cannot be removed, unless forced with +option \fB--force-reinstreq\fP. -.B dpkg -can be also be used as a front-end to -.B dpkg-deb. -Actions -.B -b -, -.B --build -, -.B -c -, -.B --contents -, -.B -I -, -.B --info -, -.B -f -, -.B --field -, -.B -e -, -.B --control -, -.B -x -, -.B --extract -, -.B -X -, -.B --vextract -and -.B --fsys-tarfile -are -.B dpkg-deb -actions and if they are encountered, -.B dpkg -just runs -.B dpkg-deb -with the parameters given to it. Please refer to -.B dpkg-deb(8) -for information about these actions. - -.SS ACTIONS - -.TP -.B dpkg -i | --install <package file name> ... -Install specified packages. If -.B --recursive -or -.B -R -option is specified, -.I <package file name> -must refer to a directory instead. +.SH ACTIONS +.TP +\fBdpkg -i\fP | \fB--install\fP \fIpackage_file\fP... +Install the package. If \fB--recursive\fP or \fB-R\fP option is +specified, \fIpackage_file\fP must refer to a directory instead. Installation consists of the following steps: .br -.B 1. -Extract the controlfiles of the new package. + +\fB1.\fP Extract the control files of the new package. .br -.B 2. -If another version of the same package was installed before the -new installation, execute -.I prerm -script of the old package. + +\fB2.\fP If another version of the same package was installed before +the new installation, execute \fIprerm\fP script of the old package. .br -.B 3. -Run -.I preinst -script, if provided by the package. + +\fB3.\fP Run \fIpreinst\fP script, if provided by the package. .br -.B 4. -Unpack the files and at the same time, backup the old files -so that if something goes wrong, we can restore them. + +\fB4.\fP Unpack the new files, and at the same time back up the old +files, so that if something goes wrong, they can be restored. .br -.B 5. -If another version of the same package was installed before -the new installation, execute the -.I postrm -script of the old package. Note that this script is executed after the -.I preinst + +\fB5.\fP If another version of the same package was installed before +the new installation, execute the \fIpostrm\fP script of the old +package. Note that this script is executed after the \fIpreinst\fP script of the new package, because new files are written at the same -time, old files are removed. +time old files are removed. .br -.B 6. -eonfigure the package. See -.B --configure -for detailed information about how this is done. -.TP -.B dpkg --unpack <package file name> ... -Unpack package, but don't configure it. If -.B --recursive -or -.B -R -option is specified, -.I <package file name> -must refer to a directory instead. + +\fB6.\fP Configure the package. See \fB--configure\fP for detailed +information about how this is done. .TP -.B dpkg --configure <package name> ... | -a|--pending -Reconfigure an unpacked package. -If -.B -a -or -.B --pending -is given instead of package name, all unpacked, but unconfigured +\fBdpkg --unpack \fP\fIpackage_file\fP ... +Unpack the package, but don't configure it. If \fB--recursive\fP or +\fB-R\fP option is specified, \fIpackage_file\fP must refer to a +directory instead. +.TP +\fBdpkg --configure \fP\fIpackage\fP ... | \fB-a\fP | \fB--pending\fP +Reconfigure an unpacked package. If \fB-a\fP or \fB--pending\fP is +given instead of \fIpackage\fP, all unpacked but unconfigured packages are configured. Configuring consists of the following steps: .br -.B 1. -Unpack the configuration files and at the same time, backup the old -configuration files, so that we can restore them, if -something goes -wrong. + +\fB1.\fP Unpack the configuration files, and at the same time back up +the old configuration files, so that they can be restored if +something goes wrong. .br -.B 2. -Run -.I postinst -script, if provided by the package. -.TP -.B dpkg -r|--remove | --purge <package name> ... | -a|--pending -Remove an installed package. -.B --purge -removes everything, including configuration files, -.B --remove -removes everything, but not configuration files. (configuration files are -the files listed in -.I conffiles --control file). If -.B -a -or -.B --pending -is given instead of package name all packages unpacked, but marked to be -removed or purged are removed or purged (in file -.I /var/lib/dpkg/status -). + +\fB2.\fP Run \fIpostinst\fP script, if provided by the package. +.TP +\fBdpkg -r\fP | \fB--remove\fP | \fB --purge \fP\fIpackage\fP ... | \fB-a\fP | \fB--pending\fP +Remove an installed package. \fB-r\fP or \fB--remove\fP remove +everything except configuration files. This may avoid having to +reconfigure the package if it is reinstalled later. (Configuration +files are the files listed in the \fIdebian/conffiles\fP control +file). \fB--purge\fP removes everything, including configuration +files. If \fB-a\fP or \fB--pending\fP is given instead of a package +name, then all packages unpacked, but marked to be removed or purged +in file \fI/var/lib/dpkg/status\fP, are removed or purged, +respectively. Removing of a package consists of the following steps: .br -.B 1. -Run prerm script + +\fB1.\fP Run \fIprerm\fP script .br -.B 2. -Remove the installed files + +\fB2.\fP Remove the installed files .br -.B 3. -Run postrm script + +\fB3.\fP Run \fIpostrm\fP script .br .TP -.B dpkg -A | --avail <package file name> ... -Update -.B dpkg -and -.B dselect's -idea of which packages are available with information about the package -.I <package file name>. -If -.B --recursive -or -.B -R -option is specified, -.I <package file name> +.BI "dpkg --print-avail " package +Display details about \fIpackage\fP, as found in +\fI/var/lib/dpkg/available\fP. +.TP +\fBdpkg --update-avail\fP | \fB--merge-avail\fP \fIPackages-file\fP +Update \fBdpkg\fP's and \fBdselect\fP's idea of which packages are +available. With action \fB--merge-avail\fP, old information is +combined with information from \fIPackages-file\fP. With action +\fB--update-avail\fP, old information is replaced with the information +in the \fIPackages-file\fP. The \fIPackages-file\fP distributed with +Debian GNU/Linux is simply named \fIPackages\fP. \fBdpkg\fP keeps its +record of available packages in \fI/var/lib/dpkg/available\fP. +.TP +\fBdpkg -A\fP | \fB--record-avail\fP \fIpackage_file\fP ... +Update \fBdpkg\fP and \fBdselect\fP's idea of which packages are +available with information from the package \fIpackage_file\fP. If +\fB--recursive\fP or \fB-R\fP option is specified, \fIpackage_file\fP must refer to a directory instead. .TP -.B dpkg --update-avail | --merge-avail <Packages-file> -Update -.B dpkg's -and -.B dselect's -idea of which packages are available. With action -.B --merge-avail, -information is combined from the old information and from the -.I <Packages-file>. -With action -.B --update-avail, -old information is replaced with the information in the -.I <Packages-file>. -The -.I <Packages-file> -distributed with Debian GNU/Linux is simply named -.I Packages. +.B dpkg --forget-old-unavail +Forget about uninstalled unavailable packages. +.TP +.B dpkg --clear-avail +Erase the existing information about what packages are available. +.TP +\fBdpkg -l\fP | \fB--list\fP \fIpackage-name-pattern\fP ... +List packages matching given pattern. If no \fIpackage-name-pattern\fP +is given, list all packages in \fI/var/lib/dpkg/available\fP. Normal +shell wildchars are allowed in \fIpackage-name-pattern\fP. (You will +probably have to quote \fIpackage-name-pattern\fP to prevent the shell +from performing filename expansion. For example, \fBdpkg -l 'libc5*'\fP will list all the package names starting with "libc5".) +.TP +\fBdpkg -s\fP | \fB--status\fP \fIpackage-name\fP ... +Report status of specified package. This just displays the entry in +the installed package status database. +.TP +\fBdpkg -C\fP | \fB--audit\fP +Searches for packages that have been installed only partially on your +system. \fBdpkg\fP will suggest what to do with them to get them +working. +.TP +\fBdpkg --get-selections\fP [\fIpattern\fP...] +Get list of package selections, and write it to stdout. +.TP +.B dpkg --set-selections +Set package selections using file read from stdin. .TP .B dpkg --yet-to-unpack Searches for packages selected for installation, but which for some reason still haven't been installed. .TP -.B dpkg -l|--list [<package-name-pattern> ...] -List packages matching given pattern. If no -.B <package-name-pattern> -is given, list all packages in -.I /var/lib/dpkg/available. -Normal shell wildchars are allowed in -.B <package-name-pattern>. -.TP -.B dpkg -L|--listfiles <package-name> ... -List files installed to your system from a package -.B <package-name>. +\fBdpkg -L\fP | \fB--listfiles\fP \fIpackage\fP ... +List files installed to your system from \fBpackage\fP. However, note that files created by package-specific installation-scripts are not listed. .TP -.B dpkg -C|--audit -Searches for packages that have been installed only partially on your -system. -.B dpkg -will suggest what to do with them to get them working. -.TP -.B dpkg -S|--search <filename-search-pattern> ... +\fBdpkg -S\fP | \fB--search\fP \fIfilename-search-pattern\fP ... Search for a filename from installed packages. All standard shell wildchars can be used in the pattern. .TP -.B dpkg -s|--status <package-name> ... -Report status of specified package. This just displays the entry in from -the installed package status database. +.B dpkg --print-architecture +Print target architecture (for example, "i386"). This option uses +\fBgcc\fP. +.TP +.B dpkg --print-gnu-build-architecture +Print GNU version of target architecture (for example, "i486"). +.TP +.B dpkg --print-installation-architecture +Print host architecture for installation. +.TP +.B dpkg --compare-versions \fIver1 op ver2\fP +Compare version numbers, where \fIop\fP is a binary operator. \fBdpkg\fP +returns success (zero result) if the specified condition is satisfied, +and failure (nonzero result) otherwise. There are +two groups of operators, which differ in how they treat a missing +\fIver1\fP or \fIver2\fP. These treat no version as earlier than any +version: \fBlt le eq ne ge gt\fP. These treat no version as later +than any version: \fBlt-nl le-nl ge-nl gt-nl\fP. These are provided +only for compatibility with control file syntax: \fB< << <= = >= >> +>\fP. .TP .B dpkg --help -Display a brief help. +Display a brief help message. .TP -.B dpkg --licence -Display licence of -.B dpkg. +.B dpkg --force-help +Give help about the \fB--force-\fP\fIthing\fP options. .TP -.B dpkg --version -Display version information. +.BR "dpkg -Dh " | " --debug=help" +Give help about debugging options. .TP -.B dpkg-deb-actions -See -.B dpkg-deb(8) -for more information about these actions. - -.B dpkg -b|--build <directory> [<filename>] -- Build a Debian GNU/Linux package. -.br -.B dpkg -c|--contents <filename> -- List contents of Debian GNU/Linux package. -.br -.B dpkg -e|--control <filename> [<directory>] -- Extract control-information from a package. -.br -.B dpkg -x|--extract <filename> <directory> -- Extract the files contained by package. +\fBdpkg --licence\fP | \fBdpkg --license\fP +Display \fBdpkg\fP licence. +.TP +\fBdpkg --version\fP +Display \fBdpkg\fP version information. +.TP +\fBdpkg-deb-actions\fP +See \fBdpkg-deb\fP(8) for more information about the following actions. + +.nf +\fBdpkg -b\fP | \fB--build\fP \fIdirectory\fP [\fIfilename\fP] + Build a Debian GNU/Linux package. +\fBdpkg -c\fP | \fB--contents\fP \fIfilename\fP + List contents of Debian GNU/Linux package. +\fBdpkg -e\fP | \fB--control\fP \fIfilename\fP [\fIdirectory\fP] + Extract control-information from a package. +\fBdpkg -x\fP | \fB--extract\fP \fIfilename directory\fP + Extract the files contained by package. +\fBdpkg -f\fP | \fB--field\fP \fIfilename\fP [\fIcontrol-field\fP] ... + Display control field(s) of a package. +\fBdpkg --fsys-tarfile\fP \fIfilename\fP + Display the filesystem tar-file contained by a + Debian package. +\fBdpkg -I\fP | \fB--info\fP \fIfilename\fP [\fIcontrol-file\fP] + Show information about a package. +\fBdpkg -X\fP | \fB--vextract\fP \fIfilename\fP \fIdirectory\fP + Extract and display the filenames contained by a + package. +.fi + +.SH OPTIONS .br -.B dpkg -f|--field <filename> [<control-field>...] -- Display control field(s) of a package. -.br -.B dpkg --fsys-tarfile <filename> -- Display the filesystem tar-file contained by a Debian package. -.br -.B dpkg -I|--info <filename> [<control-file>] -- Show information about a package. -.br -.B dpkg -X|--vextract <filename> <directory> -- Extract and display the filenames contained by a package. - -.SS OPTIONS - .TP -.B -B | --auto-deconfigure -While a package is removed, there is a possibility that another +.BR -B | --auto-deconfigure +When a package is removed, there is a possibility that another installed package depended on the removed package. Specifying this -option will cause automatical deconfiguration of the package which +option will cause automatic deconfiguration of the package which depended on the removed package. .TP -.B -Dh | --debug=help -Give help about debugging options. -.TP -.B -D<octal> | --debug=<octal> -Set debugging on. -.B <octal> -is a octal number formed by bitwise-orring desired values together from -the list below (note that these values may change in future releases). +\fB-D\fIoctal\fP | \fB--debug=\fP\fIoctal\fP +Set debugging on. \fIoctal\fP is formed by bitwise-orring desired +values together from the list below (note that these values may change +in future releases). \fB-Dh\fP or \fB--debug=help\fP display these +debugging values. number description 1 Generally helpful progress information @@ -327,287 +314,236 @@ the list below (note that these values may change in future releases). 200 Lots of output for each configuration file 40 Dependencies and conflicts 400 Lots of dependencies/conflicts output - 1000 Lots of drivel about eg the dpkg/info dir + 1000 Lots of drivel about e.g. the dpkg/info dir 2000 Insane amounts of drivel .TP -.B --force-<things> | --no-force-<things> | --refuse-<things> -Force or refuse (no-force and refuse stands for the same thing) to do -some things. -.B <things> -is a comma separated list of things specified below: +\fB--force-\fP\fIthings\fP | \fB--no-force-\fP\fIthings\fP | \fB--refuse-\fP\fIthings\fP + +Force or refuse (\fBno-force\fP and \fBrefuse\fP mean the same thing) +to do some things. \fIthings\fP is a comma separated list of things +specified below. \fB--force-help\fP displays a message describing them. +Things marked with (*) are forced by default. -.I downgrade(*): +\fIWarning: These options are mostly intended to be used by experts +only. Using them without fully understanding their effects may break +your whole system.\fP + +\fBauto-select\fP(*): +Select packages to install them, and deselect packages to remove them. + +\fBdowngrade\fP(*): Install a package, even if newer version of it is already installed. -.I configure-any: -Configure also unpacked, but unconfigured packages on whose current -package depends on. +\fBconfigure-any\fP: +Configure also any unpacked but unconfigured packages on which the current +package depends. -.I remove-reinstreq: -Remove a package, even if it's broken and marked to require -reinstallation. This may, for example, cause parts of the package to -remain on the system, which will then be forgotten by -.B dpkg. +\fBhold\fP: +Process packages even when marked "hold". -.I hold: -Don't care, wheter a package is on hold or not. +\fBremove-reinstreq\fP: +Remove a package, even if it's broken and marked to require +reinstallation. This may, for example, cause parts of the package to +remain on the system, which will then be forgotten by \fBdpkg\fP. -.I remove-essential: -Remove, even if the package is considered essential. Essential packages -contains mostly very basic unix commands and such. Removing them might +\fBremove-essential\fP: +Remove, even if the package is considered essential. Essential +packages contain mostly very basic Unix commands. Removing them might cause the whole system to stop working, so use with caution. -.I conflicts: +\fBdepends\fP: +Turn all dependency problems into warnings. + +\fBdepends-version\fP: +Don't care about versions when checking dependencies. + +\fBconflicts\fP: Install, even if it conflicts with another package. This is dangerous, for it will usually cause overwriting of some files. -.I depends: -Remove, even if another package depends on this one. This will usually -break the other package. +\fBoverwrite\fP(*): +Overwrite one package's file with another's file. -.I depends-version: -Don't care about versions when checking depencies. This will usually -break the other package. +\fBoverwrite-dir\fP +Overwrite one package's directory with another's file. -Things marked with (*) are forced by default. -.I Warning: -These options are mostly intended to be used by experts only. Using them -without fully understanding their effects may break your whole system. +\fBoverwrite-diverted\fP: +Overwrite a diverted file with an undiverted version. + +\fBarchitecture\fP: +Process even packages with the wrong architecture. + +\fBbad-path\fP: +\fBPATH\fP is missing important programs, so problems are likely. + +\fBnot-root\fP: +Try to (de)install things even when not root. .TP -.B --ignore-depends=<package>,... -Ignore depency-checking for specified packages (actually, checking is +\fB--ignore-depends\fP=\fIpackage\fP,... +Ignore dependency-checking for specified packages (actually, checking is performed, but only warnings about conflicts are given, nothing else). .TP -.B --largemem | --smallmem -Tells -.B dpkg -wheter to preserve memory or consume it as much as needed. +\fB--largemem\fP | \fB--smallmem\fP +Tells \fBdpkg\fP whether to preserve memory (e.g. with less than 4 MB +of RAM) or consume as much as needed. .TP -.B --new | --old -Select new or old package format. This is a -.B dpkg-deb(8) +\fB--new\fP | \fB--old\fP +Select new or old binary package format. This is a \fBdpkg-deb\fP(8) option. .TP .B --nocheck Don't read or check contents of control file while building a package. -This is a -.B dpkg-deb(8) -option. +This is a \fBdpkg-deb\fP(8) option. .TP .B --no-act -Do everything, which is supposed to be done, but don't write any -changes. This is used to see, what would happen with specified action, -without actually modifying anything. - -Be sure to give -.B --no-act -before action-parameter, or you might end up with undesirable results. -(e.g. -.B dpkg --purge foo --no-act -will first purge package foo and then try to purge package --no-act, -even though you propably expected it to actually do nothing) -.TP -.B -R | --recursive -Recursively handle all regular files matching pattern -.I *.deb -found at specified directories and all of its subdirectories. This -can be used with -.B -i -, -.B -A -, -.B --install -, -.B --unpack -and -.B --avail -actions. -.TP -.B -G -Don't install package, if newer version of the same package is already -installed. This is an alias to -.B--refuse-downgrade. -.TP -.B -R|--root=<dir> | --admindir=<dir> | --instdir=<dir> -Change default directories. -.B admindir -defaults to -.I /var/lib/dpkg -and contains many files that give information about status of installed -or uninstalled packages, etc. -.B instdir -defaults to -.I / -and refers to the directory where packages are to be installed. -.B instdir -is also the directory passed to -.B chroot(2) -before running package's installation scripts, which means that the -scripts see -.B instdir -as a root directory. -Changing -.B root -changes -.B instdir -to -.I <dir> -and -.B admindir -to -.I <dir>/var/lib/dpkg. -.TP -.B -O | --selected-only -Only process the packages that are selected for installation. The actual -marking is done with -.B dselect -or by -.B dpkg, -when it handles packages. i.e. When, for example a package is removed, -it will be marked selected for installation, etc. -.TP -.B -E | --skip-same-version -Don't install the package, if the same version of the package is already +Do everything which is supposed to be done, but don't write any +changes. This is used to see what would happen with the specified +action, without actually modifying anything. + +Be sure to give \fB--no-act\fP before the action-parameter, or you might +end up with undesirable results. (e.g. \fBdpkg --purge foo +--no-act\fP will first purge package foo and then try to purge package +--no-act, even though you probably expected it to actually do nothing) +.TP +\fB-R\fP | \fB--recursive\fP +Recursively handle all regular files matching pattern \fB*.deb\fP +found at specified directories and all of its subdirectories. This can +be used with \fB-i\fP, \fB-A\fP, \fB--install\fP, \fB--unpack\fP and +\fB--avail\fP actions. +.TP +\fB-G\fP +Don't install a package if a newer version of the same package is already +installed. This is an alias of \fB--refuse-downgrade.\fP +.TP +\fB-R\fP | \fB--root=\fP\fIdir\fP | \fB--admindir=\fP\fIdir\fP | \fB--instdir=\fP\fIdir\fP +Change default directories. \fBadmindir\fP defaults to +\fI/var/lib/dpkg\fP and contains many files that give information +about status of installed or uninstalled packages, etc. \fBinstdir\fP +defaults to \fI/\fP and refers to the directory where packages are to +be installed. \fBinstdir\fP is also the directory passed to +\fBchroot\fP(2) before running \fIpackage\fP's installation scripts, which +means that the scripts see \fBinstdir\fP as a root directory. +Changing \fBroot\fP changes \fBinstdir\fP to \fIdir\fP and +\fBadmindir\fP to \fIdir\fP\fB/var/lib/dpkg\fP. +.TP +\fB-O\fP | \fB--selected-only\fP +Only process the packages that are selected for installation. The +actual marking is done with \fBdselect\fP or by \fBdpkg\fP, when it +handles packages. For example, when a package is removed, it will +be marked selected for installation. +.TP +.BR -E " | " --skip-same-version +Don't install the package if the same version of the package is already installed. -.SH INFORMATION ABOUT PACKAGES -.B dpkg -maintains some usable information about available packages. The -information is divided in three classes: -.B states -, -.B selection states -and -.B flags. -These values are intended to be changed mainly with -.B dselect. -.SS PACKAGE STATES -.TP -.B installed -The package is unpacked and configured ok. -.TP -.B half-installed -The installation of the package has been started, but not completed for -some reason. -.TP -.B not-installed -The package is not installed on your system. -.TP -.B unpacked -The package is unpacked, but not configured. -.TP -.B half-configured -The package is unpacked and configuration has been started, but not yet -completed for some reason. -.TP -.B config-files -Only the configuration files of the package exist on the system. -.SS PACKAGE SELECTION STATES -.TP -.B install -The package is selected for installation. -.TP -.B deinstall -The package is selected for deinstallation (i.e. we want to remove all -files, except configuration files). -.TP -.B purge -The package is selected to be purged (i.e. we want to remove everything, -even configuration files). -.SS PACKAGE FLAGS -.TP -.B hold -A package marked to be on -.B hold -is not handled by -.B dpkg, -unless forced to do that with option -.B --force-hold. -.TP -.B reinst-required -A package marked -.B reinst-required -is broken and requires reinstallation. These packages cannot be removed, -unless forced with option -.B --force-reinstreq. - .SH FILES The files listed here are in their default directories, see option -.B --admindir -to see how to change locations of these files. +\fB--admindir\fP to see how to change locations of these files. .TP .I /var/lib/dpkg/available List of available packages. .TP .I /var/lib/dpkg/status Statuses of available packages. This file contains information about -wheter a package is marked for removing or not, wheter it is installed -or not, etc. See section -.B INFORMATION ABOUT PACKAGES +whether a package is marked for removing or not, whether it is +installed or not, etc. See section \fBINFORMATION ABOUT PACKAGES\fP for more info. +.P +The following files are components of a binary package. See \fBdeb\fP(5) +for more information about them: .TP .I control -See -.B deb(5) -for more information about this file. .TP .I conffiles -.B dpkg. -See -.B deb(5) -for more information about this file. .TP .I preinst -See -.B deb(5) -for more information about this file. .TP .I postinst -See -.B deb(5) -for more information about this file. .TP .I prerm -See -.B deb(5) -for more information about this file. .TP .I postrm -See -.B deb(5) -for more information about this file. .SH ENVIRONMENT VARIABLES .TP .B DPKG_NO_TSTP -Define this to something, if you prefer -.B dpkg -starting a new shell rather than suspending -.B dpkg, -while doing a shell escape. +Define this to something if you prefer \fBdpkg\fP starting a new +shell rather than suspending \fBdpkg\fP, while doing a shell escape. .TP .B SHELL -The program -.B dpkg -will execute while starting a new shell. +The program \fBdpkg\fP will execute while starting a new shell. + +.SH EXAMPLES +To list packages related to the editor vi: +.br +\fB dpkg -l '*vi*'\fP +.br + +To see the entries in \fI/var/lib/dpkg/available\fP on two packages: +.br +\fB dpkg --print-avail elvis vim | less\fP +.br + +To search the listing of packages yourself: +.br +\fB less /var/lib/dpkg/available\fP +.br + +To remove an installed elvis package: +.br +\fB dpkg -r elvis\fP +.br + +To install a package, you first need to find it in an archive or +CDROM. The "available" file shows that the vim package is in section +"editors": +.br +\fB cd /cdrom/hamm/hamm/binary/editors\fP +\fB dpkg -i vim_4.5-3.tar.gz\fP +.br + +To make a local copy of the package selection states: +.br +\fB dpkg --get-selections >myselections\fP +.br + +You might transfer this file to another computer, and install it there +with: +.br +\fB dpkg --set-selections <myselections\fP +.br +Ordinarily, you will find that \fBdselect\fP(8) provides a more +convenient way to modify the package selection states. +.br .SH SEE ALSO -.B deb(5) -, -.B dpkg-deb(8) -, -.B dselect(8) +\fBdselect\fP(8), +\fBdpkg-deb\fP(8), +\fBdeb\fP(5), and -.B deb-control(5) +\fBdeb-control\fP(5) .SH BUGS -.B --no-act -usually gives less information that might be helpful. -.SH AUTHOR -.B dpkg -is written by Ian Jackson (ian@chiark.chu.cam.ac.uk). Manual page added -by Juho Vuori (javuori@cc.helsinki.fi). - - +\fB--no-act\fP usually gives less information than might be helpful. + +.SH AUTHORS +.nf +\fBdpkg\fP was written by: + Ian Jackson <ian@chiark.chu.cam.ac.uk> + Klee Dienes <klee@debian.org> + Erick Branderhorst <branderhorst@heel.fgg.eur.nl> + Miquel van Smoorenburg <miquels@cistron.nl> + Kim-Minh Kaplan <kkaplan@cdfhp3.in2p3.fr> + Michael Shields <shields@crosslink.net> + Bruce Perens <bruce@pixar.com> + Streeter <streeter@cae.wisc.edu> + Matt Welsh <mdw@sunsite.unc.edu> + Ian Murdock <imurdock@debian.org> + Colin Plumb + Branko Lankester +.fi +The manual page was written by Juho Vuori +<javuori@cc.helsinki.fi> and updated by Jim Van Zandt +<jrv@vanzandt.mv.com>. diff --git a/main/enquiry.c b/main/enquiry.c index 23b6231ec..36bd031f6 100644 --- a/main/enquiry.c +++ b/main/enquiry.c @@ -28,10 +28,10 @@ #include <assert.h> #include <unistd.h> -#include "config.h" -#include "dpkg.h" -#include "dpkg-db.h" -#include "myopt.h" +#include <config.h> +#include <dpkg.h> +#include <dpkg-db.h> +#include <myopt.h> #include "filesdb.h" #include "main.h" @@ -60,12 +60,12 @@ static void list1package(struct pkginfo *pkg, int *head) { const char *pdesc; if (!*head) { - fputs("\ + fputs(_("\ Desired=Unknown/Install/Remove/Purge\n\ | Status=Not/Installed/Config-files/Unpacked/Failed-config/Half-installed\n\ |/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: uppercase=bad)\n\ ||/ Name Version Description\n\ -+++-===============-==============-============================================\n", ++++-===============-==============-============================================\n"), stdout); *head= 1; } @@ -118,7 +118,7 @@ void listpackages(const char *const *argv) { list1package(pkg,&head); found++; } if (!found) - fprintf(stderr,"No packages found matching %s.\n",thisarg); + fprintf(stderr,_("No packages found matching %s.\n"),thisarg); } } if (ferror(stdout)) werr("stdout"); @@ -143,24 +143,24 @@ static int bsyn_status(struct pkginfo *pkg, const struct badstatinfo *bsi) { static const struct badstatinfo badstatinfos[]= { { bsyn_reinstreq, 0, - "The following packages are in a mess due to serious problems during\n" + N_("The following packages are in a mess due to serious problems during\n" "installation. They must be reinstalled for them (and any packages\n" - "that depend on them) to function properly:\n" + "that depend on them) to function properly:\n") }, { bsyn_status, stat_unpacked, - "The following packages have been unpacked but not yet configured.\n" - "They must be configured using " DPKG " --configure or the configure\n" - "menu option in " DSELECT " for them to work:\n" + N_("The following packages have been unpacked but not yet configured.\n" + "They must be configured using dpkg --configure or the configure\n" + "menu option in dselect for them to work:\n") }, { bsyn_status, stat_halfconfigured, - "The following packages are only half configured, probably due to problems\n" + N_("The following packages are only half configured, probably due to problems\n" "configuring them the first time. The configuration should be retried using\n" - DPKG " --configure <package> or the configure menu option in " DSELECT ":\n" + "dpkg --configure <package> or the configure menu option in " DSELECT ":\n") }, { bsyn_status, stat_halfinstalled, - "The following packages are only half installed, due to problems during\n" + N_("The following packages are only half installed, due to problems during\n" "installation. The installation can probably be completed by retrying it;\n" - "the packages can be removed using " DSELECT " or " DPKG " --remove:\n" + "the packages can be removed using dselect or dpkg --remove:\n") }, { 0 } @@ -183,7 +183,7 @@ void audit(const char *const *argv) { const struct badstatinfo *bsi; int head; - if (*argv) badusage("--audit does not take any arguments"); + if (*argv) badusage(_("--audit does not take any arguments")); modstatdb_init(admindir,msdbrw_readonly); @@ -193,7 +193,7 @@ void audit(const char *const *argv) { while ((pkg= iterpkgnext(it))) { if (!bsi->yesno(pkg,bsi)) continue; if (!head) { - fputs(bsi->explanation,stdout); + fputs(gettext(bsi->explanation),stdout); head= 1; } describebriefly(pkg); @@ -234,7 +234,7 @@ void unpackchk(const char *const *argv) { char buf[20]; int width; - if (*argv) badusage("--yet-to-unpack does not take any arguments"); + if (*argv) badusage(_("--yet-to-unpack does not take any arguments")); modstatdb_init(admindir,msdbrw_readonly); @@ -287,7 +287,7 @@ void unpackchk(const char *const *argv) { putchar('\n'); } } else { - printf(" %d packages, from the following sections:",totalcount); + printf(_(" %d packages, from the following sections:"),totalcount); width= 0; for (se= sectionentries; se; se= se->next) { sprintf(buf,"%d",se->count); @@ -307,9 +307,9 @@ static int searchoutput(struct filenamenode *namenode) { if (namenode->divert) { for (i=0; i<2; i++) { - if (namenode->divert->pkg) printf("diversion by %s",namenode->divert->pkg->name); - else printf("local diversion"); - printf(" %s: %s\n", i ? "to" : "from", + if (namenode->divert->pkg) printf(_("diversion by %s"),namenode->divert->pkg->name); + else printf(_("local diversion")); + printf(" %s: %s\n", i ? _("to") : _("from"), i ? (namenode->divert->useinstead ? namenode->divert->useinstead->name @@ -342,7 +342,7 @@ void searchfiles(const char *const *argv) { static struct varbuf vb; if (!*argv) - badusage("--search needs at least one file name pattern argument"); + badusage(_("--search needs at least one file name pattern argument")); modstatdb_init(admindir,msdbrw_readonly); ensure_allinstfiles_available_quiet(); @@ -370,7 +370,7 @@ void searchfiles(const char *const *argv) { iterfileend(it); } if (!found) { - fprintf(stderr,DPKG ": %s not found.\n",thisarg); + fprintf(stderr,_("dpkg: %s not found.\n"),thisarg); if (ferror(stderr)) werr("stderr"); } else { if (ferror(stdout)) werr("stdout"); @@ -386,7 +386,7 @@ void enqperpackage(const char *const *argv) { struct filenamenode *namenode; if (!*argv) - badusage("--%s needs at least one package name argument", cipaction->olong); + badusage(_("--%s needs at least one package name argument"), cipaction->olong); failures= 0; modstatdb_init(admindir,msdbrw_readonly); @@ -403,7 +403,7 @@ void enqperpackage(const char *const *argv) { !pkg->files && pkg->want == want_unknown && !informative(pkg,&pkg->installed)) { - printf("Package `%s' is not installed and no info is available.\n",pkg->name); + printf(_("Package `%s' is not installed and no info is available.\n"),pkg->name); failures++; } else { writerecord(stdout, "<stdout>", pkg, &pkg->installed); @@ -412,7 +412,7 @@ void enqperpackage(const char *const *argv) { case act_printavail: if (!informative(pkg,&pkg->available)) { - printf("Package `%s' is not available.\n",pkg->name); + printf(_("Package `%s' is not available.\n"),pkg->name); failures++; } else { writerecord(stdout, "<stdout>", pkg, &pkg->available); @@ -422,7 +422,7 @@ void enqperpackage(const char *const *argv) { case act_listfiles: switch (pkg->status) { case stat_notinstalled: - printf("Package `%s' is not installed.\n",pkg->name); + printf(_("Package `%s' is not installed.\n"),pkg->name); failures++; break; @@ -431,15 +431,15 @@ void enqperpackage(const char *const *argv) { ensure_diversions(); file= pkg->clientdata->files; if (!file) { - printf("Package `%s' does not contain any files (!)\n",pkg->name); + printf(_("Package `%s' does not contain any files (!)\n"),pkg->name); } else { while (file) { namenode= file->namenode; puts(namenode->name); if (namenode->divert && !namenode->divert->camefrom) { - if (!namenode->divert->pkg) printf("locally diverted"); - else if (pkg == namenode->divert->pkg) printf("package diverts others"); - else printf("diverted by %s",namenode->divert->pkg->name); + if (!namenode->divert->pkg) printf(_("locally diverted")); + else if (pkg == namenode->divert->pkg) printf(_("package diverts others")); + else printf(_("diverted by %s"),namenode->divert->pkg->name); printf(" to: %s\n",namenode->divert->useinstead->name); } file= file->next; @@ -458,21 +458,49 @@ void enqperpackage(const char *const *argv) { } if (failures) { - puts("Use " DPKG " --info (= " BACKEND " --info) to examine archive files,\n" - "and " DPKG " --contents (= " BACKEND " --contents) to list their contents."); + puts(_("Use dpkg --info (= dpkg-deb --info) to examine archive files,\n" + "and dpkg --contents (= dpkg-deb --contents) to list their contents.")); if (ferror(stdout)) werr("stdout"); } } +void assertepoch(const char *const *argv) { + static struct versionrevision epochversion = {~0UL,0,0}; + struct pkginfo *pkg; + + if (*argv) badusage("--assert-working-epoch does not take any arguments"); + + modstatdb_init(admindir,msdbrw_readonly); + pkg= findpackage("dpkg"); + if (epochversion.epoch == ~0UL) { + epochversion.epoch= 0; + epochversion.version= nfstrsave("1.4.0.7"); + epochversion.revision= 0; + } + switch (pkg->status) { + case stat_installed: + break; + case stat_unpacked: case stat_halfconfigured: case stat_halfinstalled: + if (versionsatisfied3(&pkg->configversion,&epochversion,dvr_laterequal)) + break; + printf("Version of dpkg with working epoch support not yet configured.\n" + " Please use `dpkg --configure dpkg', and then try again.\n"); + exit(1); + default: + printf("dpkg not recorded as installed, cannot check for epoch support !\n"); + exit(1); + } +} + void assertpredep(const char *const *argv) { static struct versionrevision predepversion = {~0UL,0,0}; struct pkginfo *pkg; - if (*argv) badusage("--assert-support-predepends does not take any arguments"); + if (*argv) badusage(_("--assert-support-predepends does not take any arguments")); modstatdb_init(admindir,msdbrw_readonly); pkg= findpackage("dpkg"); - if (!predepversion.epoch == ~0UL) { + if (predepversion.epoch == ~0UL) { predepversion.epoch= 0; predepversion.version= nfstrsave("1.1.0"); predepversion.revision= 0; @@ -483,11 +511,11 @@ void assertpredep(const char *const *argv) { case stat_unpacked: case stat_halfconfigured: case stat_halfinstalled: if (versionsatisfied3(&pkg->configversion,&predepversion,dvr_laterequal)) break; - printf("Version of dpkg with Pre-Depends support not yet configured.\n" - " Please use `dpkg --configure dpkg', and then try again.\n"); + printf(_("Version of dpkg with Pre-Depends support not yet configured.\n" + " Please use `dpkg --configure dpkg', and then try again.\n")); exit(1); default: - printf("dpkg not recorded as installed, cannot check for Pre-Depends support !\n"); + printf(_("dpkg not recorded as installed, cannot check for Pre-Depends support !\n")); exit(1); } } @@ -510,7 +538,7 @@ void predeppackage(const char *const *argv) { struct dependency *dep; struct deppossi *possi, *provider; - if (*argv) badusage("--predep-package does not take any argument"); + if (*argv) badusage(_("--predep-package does not take any argument")); modstatdb_init(admindir,msdbrw_readonly); clear_istobes(); /* We use clientdata->istobe to detect loops */ @@ -562,8 +590,8 @@ void predeppackage(const char *const *argv) { varbufreset(&vb); describedepcon(&vb,dep); varbufaddc(&vb,0); - fprintf(stderr, DPKG ": cannot see how to satisfy pre-dependency:\n %s\n",vb.buf); - ohshit("cannot satisfy pre-dependencies for %.250s (wanted due to %.250s)", + fprintf(stderr, _("dpkg: cannot see how to satisfy pre-dependency:\n %s\n"),vb.buf); + ohshit(_("cannot satisfy pre-dependencies for %.250s (wanted due to %.250s)"), dep->up->name,startpkg->name); } pkg->clientdata->istobe= itb_preinstall; @@ -583,14 +611,14 @@ static void badlgccfn(const char *compiler, const char *output, const char *why) NONRETURNING; static void badlgccfn(const char *compiler, const char *output, const char *why) { fprintf(stderr, - DPKG ": unexpected output from `%s --print-libgcc-file-name':\n" - " `%s'\n", + _("dpkg: unexpected output from `%s --print-libgcc-file-name':\n" + " `%s'\n"), compiler,output); - ohshit("compiler libgcc filename not understood: %.250s",why); + ohshit(_("compiler libgcc filename not understood: %.250s"),why); } void printinstarch(const char *const *argv) { - if (*argv) badusage("--print-installation-architecture does not take any argument"); + if (*argv) badusage(_("--print-installation-architecture does not take any argument")); if (printf("%s\n",architecture) == EOF) werr("stdout"); if (fflush(stdout)) werr("stdout"); @@ -598,7 +626,7 @@ void printinstarch(const char *const *argv) { void printarch(const char *const *argv) { static const struct { const char *from, *to, *gnu; } archtable[]= { -#include "archtable.inc" +#include "archtable.h" { 0,0,0 } }, *archp; @@ -610,30 +638,30 @@ void printarch(const char *const *argv) { ptrdiff_t ll; char *p, *q; - if (*argv) badusage("--print-architecture does not take any argument"); + if (*argv) badusage(_("--print-architecture does not take any argument")); ccompiler= getenv("CC"); if (!ccompiler) ccompiler= "gcc"; varbufinit(&vb); m_pipe(p1); - ccpipe= fdopen(p1[0],"r"); if (!ccpipe) ohshite("failed to fdopen CC pipe"); + ccpipe= fdopen(p1[0],"r"); if (!ccpipe) ohshite(_("failed to fdopen CC pipe")); if (!(c1= m_fork())) { m_dup2(p1[1],1); close(p1[0]); close(p1[1]); execlp(ccompiler,ccompiler,"--print-libgcc-file-name",(char*)0); - ohshite("failed to exec C compiler `%.250s'",ccompiler); + ohshite(_("failed to exec C compiler `%.250s'"),ccompiler); } close(p1[1]); while ((c= getc(ccpipe)) != EOF) varbufaddc(&vb,c); - if (ferror(ccpipe)) ohshite("error reading from CC pipe"); + if (ferror(ccpipe)) ohshite(_("error reading from CC pipe")); waitsubproc(c1,"gcc --print-libgcc-file-name",0); - if (!vb.used) badlgccfn(ccompiler,"","empty output"); + if (!vb.used) badlgccfn(ccompiler,"",_("empty output")); varbufaddc(&vb,0); - if (vb.buf[vb.used-2] != '\n') badlgccfn(ccompiler,vb.buf,"no newline"); + if (vb.buf[vb.used-2] != '\n') badlgccfn(ccompiler,vb.buf,_("no newline")); vb.used-= 2; varbufaddc(&vb,0); p= strstr(vb.buf,"/gcc-lib/"); - if (!p) badlgccfn(ccompiler,vb.buf,"no gcc-lib component"); + if (!p) badlgccfn(ccompiler,vb.buf,_("no gcc-lib component")); p+= 9; - q= strchr(p,'-'); if (!q) badlgccfn(ccompiler,vb.buf,"no hyphen after gcc-lib"); + q= strchr(p,'-'); if (!q) badlgccfn(ccompiler,vb.buf,_("no hyphen after gcc-lib")); ll= q-p; for (archp=archtable; archp->from && !(strlen(archp->from) == ll && !strncmp(archp->from,p,ll)); @@ -645,7 +673,7 @@ void printarch(const char *const *argv) { } if (!arch) { *q= 0; arch= p; - fprintf(stderr,DPKG ": warning, architecture `%s' not in remapping table\n",arch); + fprintf(stderr, _("dpkg: warning, architecture `%s' not in remapping table\n"),arch); } if (printf("%s\n",arch) == EOF) werr("stdout"); if (fflush(stdout)) werr("stdout"); @@ -656,7 +684,7 @@ void cmpversions(const char *const *argv) { const char *string; /* These values are exit status codes, so 0=true, 1=false */ int if_lesser, if_equal, if_greater; - int if_none_a, if_none_b, if_none_both; + int if_none_a, if_none_both, if_none_b; }; static const struct relationinfo relationinfos[]= { @@ -667,15 +695,15 @@ void cmpversions(const char *const *argv) { { "ne", 0,1,0, 0,1,0 }, { "ge", 1,0,0, 1,0,0 }, { "gt", 1,1,0, 1,1,0 }, - { "le-nl", 0,0,1, 1,0,0 }, /* Here none - { "lt-nl", 0,1,1, 1,1,0 }, * is counted - { "ge-nl", 1,0,0, 0,0,1 }, * than any version. - { "gt-nl", 1,1,0, 0,1,1 }, */ - { "<", 0,0,1, 0,0,1 }, /* For compatibility - { "<=", 0,0,1, 0,0,1 }, * with dpkg - { "<<", 0,1,1, 0,1,1 }, * control file - { "=", 1,0,1, 1,0,1 }, * syntax - { ">", 1,0,0, 1,0,0 }, */ + { "le-nl", 0,0,1, 1,0,0 }, /* Here none */ + { "lt-nl", 0,1,1, 1,1,0 }, /* is counted */ + { "ge-nl", 1,0,0, 0,0,1 }, /* than any version.*/ + { "gt-nl", 1,1,0, 0,1,1 }, /* */ + { "<", 0,0,1, 0,0,1 }, /* For compatibility*/ + { "<=", 0,0,1, 0,0,1 }, /* with dpkg */ + { "<<", 0,1,1, 0,1,1 }, /* control file */ + { "=", 1,0,1, 1,0,1 }, /* syntax */ + { ">", 1,0,0, 1,0,0 }, /* */ { ">=", 1,0,0, 1,0,0 }, { ">>", 1,1,0, 1,1,0 }, { 0 } @@ -687,17 +715,17 @@ void cmpversions(const char *const *argv) { int r; if (!argv[0] || !argv[1] || !argv[2] || argv[3]) - badusage("--cmpversions takes three arguments:" - " <version> <relation> <version>"); + badusage(_("--cmpversions takes three arguments:" + " <version> <relation> <version>")); for (rip=relationinfos; rip->string && strcmp(rip->string,argv[1]); rip++); - if (!rip->string) badusage("--cmpversions bad relation"); + if (!rip->string) badusage(_("--cmpversions bad relation")); if (*argv[0] && strcmp(argv[0],"<unknown>")) { emsg= parseversion(&a,argv[0]); if (emsg) { - if (printf("version a has bad syntax: %s\n",emsg) == EOF) werr("stdout"); + if (printf(_("version a has bad syntax: %s\n"),emsg) == EOF) werr("stdout"); if (fflush(stdout)) werr("stdout"); exit(1); } @@ -707,7 +735,7 @@ void cmpversions(const char *const *argv) { if (*argv[2] && strcmp(argv[2],"<unknown>")) { emsg= parseversion(&b,argv[2]); if (emsg) { - if (printf("version b has bad syntax: %s\n",emsg) == EOF) werr("stdout"); + if (printf(_("version b has bad syntax: %s\n"),emsg) == EOF) werr("stdout"); if (fflush(stdout)) werr("stdout"); exit(1); } diff --git a/main/errors.c b/main/errors.c index 495a16e51..07eb2db74 100644 --- a/main/errors.c +++ b/main/errors.c @@ -32,10 +32,10 @@ #include <limits.h> #include <ctype.h> -#include "config.h" -#include "dpkg.h" -#include "dpkg-db.h" -#include "myopt.h" +#include <config.h> +#include <dpkg.h> +#include <dpkg-db.h> +#include <myopt.h> #include "main.h" @@ -57,7 +57,7 @@ void print_error_perpackage(const char *emsg, const char *arg) { arg, cipaction->olong, emsg); nr= malloc(sizeof(struct error_report)); if (!nr) { - perror(DPKG ": failed to allocate memory for new entry in list of failed packages."); + perror(_("dpkg: failed to allocate memory for new entry in list of failed packages.")); onerr_abort++; nr= &emergency; } @@ -67,20 +67,20 @@ void print_error_perpackage(const char *emsg, const char *arg) { lastreport= &nr->next; if (nerrs++ < 20) return; - fprintf(stderr, DPKG ": too many errors, stopping\n"); + fprintf(stderr, _("dpkg: too many errors, stopping\n")); onerr_abort++; } int reportbroken_retexitstatus(void) { if (reports) { - fputs("Errors were encountered while processing:\n",stderr); + fputs(_("Errors were encountered while processing:\n"),stderr); while (reports) { fprintf(stderr," %s\n",reports->what); reports= reports->next; } } if (onerr_abort) { - fputs("Processing was halted because there were too many errors.\n",stderr); + fputs(_("Processing was halted because there were too many errors.\n"),stderr); } return nerrs || onerr_abort ? 1 : 0; } @@ -88,7 +88,7 @@ int reportbroken_retexitstatus(void) { int skip_due_to_hold(struct pkginfo *pkg) { if (pkg->want != want_hold) return 0; if (fc_hold) { - fprintf(stderr, "Package %s was on hold, processing it anyway as you request\n", + fprintf(stderr, _("Package %s was on hold, processing it anyway as you request\n"), pkg->name); return 0; } @@ -101,7 +101,7 @@ void forcibleerr(int forceflag, const char *fmt, ...) { va_list al; va_start(al,fmt); if (forceflag) { - fputs(DPKG " - warning, overriding problem because --force enabled:\n ",stderr); + fputs(_("dpkg - warning, overriding problem because --force enabled:\n "),stderr); vfprintf(stderr,fmt,al); fputc('\n',stderr); } else { diff --git a/main/filesdb.c b/main/filesdb.c index 8a0a786f6..c53db0eea 100644 --- a/main/filesdb.c +++ b/main/filesdb.c @@ -25,9 +25,9 @@ #include <errno.h> #include <sys/stat.h> -#include "config.h" -#include "dpkg.h" -#include "dpkg-db.h" +#include <config.h> +#include <dpkg.h> +#include <dpkg-db.h> #include "filesdb.h" #include "main.h" @@ -113,13 +113,13 @@ void ensure_packagefiles_available(struct pkginfo *pkg) { if (!file) { if (errno != ENOENT) - ohshite("unable to open files list file for package `%.250s'",pkg->name); + ohshite(_("unable to open files list file for package `%.250s'"),pkg->name); onerr_abort--; if (pkg->status != stat_configfiles) { if (saidread == 1) putc('\n',stderr); fprintf(stderr, - DPKG ": serious warning: files list file for package `%.250s' missing," - " assuming package has no files currently installed.\n", pkg->name); + _("dpkg: serious warning: files list file for package `%.250s' missing," + " assuming package has no files currently installed.\n"), pkg->name); } pkg->clientdata->files= 0; pkg->clientdata->fileslistvalid= 1; @@ -129,7 +129,7 @@ void ensure_packagefiles_available(struct pkginfo *pkg) { push_cleanup(cu_closefile,ehflag_bombout, 0,0, 1,(void*)file); if (setvbuf(file,stdiobuf,_IOFBF,sizeof(stdiobuf))) - ohshite("unable to set buffering on `%.250s'",filelistfile); + ohshite(_("unable to set buffering on `%.250s'"),filelistfile); lendp= &pkg->clientdata->files; varbufreset(&fnvb); @@ -139,7 +139,7 @@ void ensure_packagefiles_available(struct pkginfo *pkg) { * avoid copying where possible. */ l= strlen(linebuf); - if (l == 0) ohshit("fgets gave an empty null-terminated string from `%.250s'", + if (l == 0) ohshit(_("fgets gave an empty null-terminated string from `%.250s'"), filelistfile); l--; if (linebuf[l] != '\n') { @@ -157,7 +157,7 @@ void ensure_packagefiles_available(struct pkginfo *pkg) { thefilename= fnvb.buf; } if (!*thefilename) - ohshit("files list file for package `%.250s' contains empty filename",pkg->name); + ohshit(_("files list file for package `%.250s' contains empty filename"),pkg->name); newent= nfmalloc(sizeof(struct fileinlist)); newent->namenode= findnamenode(thefilename); newent->next= 0; @@ -165,12 +165,12 @@ void ensure_packagefiles_available(struct pkginfo *pkg) { lendp= &newent->next; } if (ferror(file)) - ohshite("error reading files list file for package `%.250s'",pkg->name); + ohshite(_("error reading files list file for package `%.250s'"),pkg->name); pop_cleanup(ehflag_normaltidy); /* file= fopen() */ if (fclose(file)) - ohshite("error closing files list file for package `%.250s'",pkg->name); + ohshite(_("error closing files list file for package `%.250s'"),pkg->name); if (fnvb.used) - ohshit("files list file for package `%.250s' is truncated",pkg->name); + ohshit(_("files list file for package `%.250s' is truncated"),pkg->name); onerr_abort--; @@ -201,7 +201,7 @@ void ensure_allinstfiles_available(void) { if (allpackagesdone) return; if (saidread<2) { saidread=1; - printf(f_largemem>0 ? "(Reading database ... " : "(Scanning database ... "); + printf(f_largemem>0 ? _("(Reading database ... ") : _("(Scanning database ... ")); } it= iterpkgstart(); while ((pkg= iterpkgnext(it)) != 0) ensure_packagefiles_available(pkg); @@ -209,7 +209,7 @@ void ensure_allinstfiles_available(void) { allpackagesdone= 1; if (saidread==1) { - printf("%d files and directories currently installed.)\n",nfiles); + printf(_("%d files and directories currently installed.)\n"),nfiles); saidread=2; } } @@ -240,7 +240,7 @@ void write_filelist_except(struct pkginfo *pkg, struct fileinlist *list, int lea file= fopen(newvb.buf,"w+"); if (!file) - ohshite("unable to create updated files list file for package %s",pkg->name); + ohshite(_("unable to create updated files list file for package %s"),pkg->name); push_cleanup(cu_closefile,ehflag_bombout, 0,0, 1,(void*)file); while (list) { if (!(leaveout && (list->namenode->flags & fnnf_elide_other_lists))) { @@ -250,16 +250,16 @@ void write_filelist_except(struct pkginfo *pkg, struct fileinlist *list, int lea list= list->next; } if (ferror(file)) - ohshite("failed to write to updated files list file for package %s",pkg->name); + ohshite(_("failed to write to updated files list file for package %s"),pkg->name); if (fflush(file)) - ohshite("failed to flush updated files list file for package %s",pkg->name); + ohshite(_("failed to flush updated files list file for package %s"),pkg->name); if (fsync(fileno(file))) - ohshite("failed to sync updated files list file for package %s",pkg->name); + ohshite(_("failed to sync updated files list file for package %s"),pkg->name); pop_cleanup(ehflag_normaltidy); /* file= fopen() */ if (fclose(file)) - ohshite("failed to close updated files list file for package %s",pkg->name); + ohshite(_("failed to close updated files list file for package %s"),pkg->name); if (rename(newvb.buf,vb.buf)) - ohshite("failed to install updated files list file for package %s",pkg->name); + ohshite(_("failed to install updated files list file for package %s"),pkg->name); note_must_reread_files_inpackage(pkg); } @@ -323,13 +323,13 @@ void ensure_diversions(void) { file= fopen(vb.buf,"r"); if (!file) { - if (errno != ENOENT) ohshite("failed to open diversions file"); + if (errno != ENOENT) ohshite(_("failed to open diversions file")); if (!diversionsfile) { onerr_abort--; return; } } else if (diversionsfile) { if (fstat(fileno(diversionsfile),&stab1)) - ohshite("failed to fstat previous diversions file"); + ohshite(_("failed to fstat previous diversions file")); if (fstat(fileno(file),&stab2)) - ohshite("failed to fstat diversions file"); + ohshite(_("failed to fstat diversions file")); if (stab1.st_dev == stab2.st_dev && stab1.st_ino == stab2.st_ino) { fclose(file); onerr_abort--; return; } @@ -349,33 +349,33 @@ void ensure_diversions(void) { oialtname= nfmalloc(sizeof(struct diversion)); l= strlen(linebuf); - if (l == 0) ohshit("fgets gave an empty string from diversions [i]"); - if (linebuf[--l] != '\n') ohshit("diversions file has too-long line or EOF [i]"); + if (l == 0) ohshit(_("fgets gave an empty string from diversions [i]")); + if (linebuf[--l] != '\n') ohshit(_("diversions file has too-long line or EOF [i]")); linebuf[l]= 0; oialtname->camefrom= findnamenode(linebuf); if (!fgets(linebuf,sizeof(linebuf),file)) - if (ferror(file)) ohshite("read error in diversions [ii]"); - else ohshit("unexpected EOF in diversions [ii]"); + if (ferror(file)) ohshite(_("read error in diversions [ii]")); + else ohshit(_("unexpected EOF in diversions [ii]")); l= strlen(linebuf); - if (l == 0) ohshit("fgets gave an empty string from diversions [ii]"); - if (linebuf[--l] != '\n') ohshit("diversions file has too-long line or EOF [ii]"); + if (l == 0) ohshit(_("fgets gave an empty string from diversions [ii]")); + if (linebuf[--l] != '\n') ohshit(_("diversions file has too-long line or EOF [ii]")); linebuf[l]= 0; oicontest->useinstead= findnamenode(linebuf); if (!fgets(linebuf,sizeof(linebuf),file)) - if (ferror(file)) ohshite("read error in diversions [iii]"); - else ohshit("unexpected EOF in diversions [iii]"); + if (ferror(file)) ohshite(_("read error in diversions [iii]")); + else ohshit(_("unexpected EOF in diversions [iii]")); l= strlen(linebuf); - if (l == 0) ohshit("fgets gave an empty string from diversions [iii]"); - if (linebuf[--l] != '\n') ohshit("diversions file has too-long line or EOF [ii]"); + if (l == 0) ohshit(_("fgets gave an empty string from diversions [iii]")); + if (linebuf[--l] != '\n') ohshit(_("diversions file has too-long line or EOF [ii]")); linebuf[l]= 0; oicontest->pkg= oialtname->pkg= strcmp(linebuf,":") ? findpackage(linebuf) : 0; if (oialtname->camefrom->divert || oicontest->useinstead->divert) - ohshit("conflicting diversions involving `%.250s' or `%.250s'", + ohshit(_("conflicting diversions involving `%.250s' or `%.250s'"), oialtname->camefrom->name, oicontest->useinstead->name); oialtname->camefrom->divert= oicontest; @@ -384,7 +384,7 @@ void ensure_diversions(void) { oicontest->next= diversions; diversions= oicontest; } - if (ferror(file)) ohshite("read error in diversions [i]"); + if (ferror(file)) ohshite(_("read error in diversions [i]")); diversionsfile= file; onerr_abort--; diff --git a/main/help.c b/main/help.c index edccc5d88..5c1a68c67 100644 --- a/main/help.c +++ b/main/help.c @@ -19,6 +19,7 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +#include <errno.h> #include <unistd.h> #include <dirent.h> #include <assert.h> @@ -26,21 +27,21 @@ #include <sys/stat.h> #include <sys/types.h> #include <sys/wait.h> +#include <signal.h> -#include "config.h" -#include "dpkg.h" -#include "dpkg-db.h" -#include "myopt.h" +#include <config.h> +#include <dpkg.h> +#include <dpkg-db.h> #include "filesdb.h" #include "main.h" const char *const statusstrings[]= { - "not installed", "unpacked but not configured", - "broken due to postinst failure", - "installed", - "broken due to failed removal", - "not installed but configs remain" + N_("not installed"), N_("unpacked but not configured"), + N_("broken due to postinst failure"), + N_("installed"), + N_("broken due to failed removal"), + N_("not installed but configs remain") }; struct filenamenode *namenodetouse(struct filenamenode *namenode, struct pkginfo *pkg) { @@ -77,7 +78,7 @@ void checkpath(void) { long l; path= getenv("PATH"); - if (!path) fputs(DPKG " - warning: PATH is not set.\n", stderr); + if (!path) fputs(_("dpkg - warning: PATH is not set.\n"), stderr); for (clp=checklist; *clp; clp++) { s= path; @@ -92,14 +93,14 @@ void checkpath(void) { s= p; if (s) s++; } if (!s) { - fprintf(stderr,DPKG ": `%s' not found on PATH.\n",*clp); + fprintf(stderr,_("dpkg: `%s' not found on PATH.\n"),*clp); warned++; } } if (warned) - forcibleerr(fc_badpath,"%d expected program(s) not found on PATH.\nNB: root's " - "PATH should usually contain /usr/local/sbin, /usr/sbin and /sbin.", + forcibleerr(fc_badpath,_("%d expected program(s) not found on PATH.\nNB: root's " + "PATH should usually contain /usr/local/sbin, /usr/sbin and /sbin."), warned); } @@ -163,7 +164,7 @@ const char *pkgadminfile(struct pkginfo *pkg, const char *whichfile) { static void preexecscript(const char *path, char *const *argv) { if (*instdir) { /* fixme: won't work right when instdir != admindir */ - if (chroot(instdir)) ohshite("failed to chroot to `%.250s'",instdir); + if (chdir(instdir) || chroot(instdir)) ohshite("failed to chroot to `%.250s'",instdir); } if (f_debug & dbg_scripts) { fprintf(stderr,"D0%05o: fork/exec %s (",dbg_scripts,path); @@ -178,7 +179,7 @@ static char *const *vbuildarglist(const char *scriptname, va_list ap) { int i; i=0; - bufs[i++]= (char*)scriptname; /* yes, cast away cost because exec wants it that way */ + bufs[i++]= (char*)scriptname; /* yes, cast away const because exec wants it that way */ for (;;) { assert(i < PKGSCRIPTMAXARGS); nextarg= va_arg(ap,char*); @@ -206,7 +207,7 @@ static void cu_restorescriptsignals(int argc, void **argv) { int i; for (i=0; i<NSCRIPTCATCHSIGNALS; i++) { if (sigaction(script_catchsignallist[i],&script_uncatchsignal[i],0)) { - fprintf(stderr,"error un-catching signal %s: %s\n", + fprintf(stderr,_("error un-catching signal %s: %s\n"), strsignal(script_catchsignallist[i]),strerror(errno)); onerr_abort++; } @@ -224,7 +225,7 @@ static void script_catchsignals(void) { catchsig.sa_flags= 0; for (i=0; i<NSCRIPTCATCHSIGNALS; i++) if (sigaction(script_catchsignallist[i],&catchsig,&script_uncatchsignal[i])) - ohshite("unable to ignore signal %s before running script", + ohshite(_("unable to ignore signal %s before running script"), strsignal(script_catchsignallist[i])); push_cleanup(cu_restorescriptsignals,~0, 0,0, 0); onerr_abort--; @@ -233,7 +234,7 @@ static void script_catchsignals(void) { static void setexecute(const char *path, struct stat *stab) { if ((stab->st_mode & 0555) == 0555) return; if (!chmod(path,0755)) return; - ohshite("unable to set execute permissions on `%.250s'",path); + ohshite(_("unable to set execute permissions on `%.250s'"),path); } int maintainer_script_installed(struct pkginfo *pkg, const char *scriptname, @@ -257,14 +258,14 @@ int maintainer_script_installed(struct pkginfo *pkg, const char *scriptname, debug(dbg_scripts,"maintainer_script_installed nonexistent %s",scriptname); return 0; } - ohshite("unable to stat installed %s script `%.250s'",description,scriptpath); + ohshite(_("unable to stat installed %s script `%.250s'"),description,scriptpath); } setexecute(scriptpath,&stab); c1= m_fork(); if (!c1) { preexecscript(scriptpath,arglist); - execv(scriptpath,arglist); - ohshite("unable to execute %s",buf); + execv(scriptpath+strlen(instdir),arglist); + ohshite(_("unable to execute %s"),buf); } script_catchsignals(); /* This does a push_cleanup() */ waitsubproc(c1,buf,0); @@ -293,14 +294,14 @@ int maintainer_script_new(const char *scriptname, const char *description, debug(dbg_scripts,"maintainer_script_new nonexistent %s `%s'",scriptname,cidir); return 0; } - ohshite("unable to stat new %s script `%.250s'",description,cidir); + ohshite(_("unable to stat new %s script `%.250s'"),description,cidir); } setexecute(cidir,&stab); c1= m_fork(); if (!c1) { preexecscript(cidir,arglist); - execv(cidir,arglist); - ohshite("unable to execute new %s",buf); + execv(cidir+strlen(instdir),arglist); + ohshite(_("unable to execute new %s"),buf); } script_catchsignals(); /* This does a push_cleanup() */ waitsubproc(c1,buf,0); @@ -334,59 +335,59 @@ int maintainer_script_alternative(struct pkginfo *pkg, return 0; } fprintf(stderr, - DPKG ": warning - unable to stat %s `%.250s': %s\n", + _("dpkg: warning - unable to stat %s `%.250s': %s\n"), buf,oldscriptpath,strerror(errno)); } else { setexecute(oldscriptpath,&stab); c1= m_fork(); if (!c1) { preexecscript(oldscriptpath,arglist); - execv(oldscriptpath,arglist); - ohshite("unable to execute %s",buf); + execv(oldscriptpath+strlen(instdir),arglist); + ohshite(_("unable to execute %s"),buf); } script_catchsignals(); /* This does a push_cleanup() */ while ((r= waitpid(c1,&status,0)) == -1 && errno == EINTR); - if (r != c1) ohshite("wait for %s failed",buf); + if (r != c1) ohshite(_("wait for %s failed"),buf); pop_cleanup(ehflag_normaltidy); if (WIFEXITED(status)) { n= WEXITSTATUS(status); if (!n) return 1; - fprintf(stderr, DPKG ": warning - %s returned error exit status %d\n",buf,n); + fprintf(stderr, _("dpkg: warning - %s returned error exit status %d\n"),buf,n); } else if (WIFSIGNALED(status)) { n= WTERMSIG(status); - fprintf(stderr, DPKG ": warning - %s killed by signal (%s)%s\n", + fprintf(stderr, _("dpkg: warning - %s killed by signal (%s)%s\n"), buf, strsignal(n), WCOREDUMP(status) ? ", core dumped" : ""); } else { - ohshit("%s failed with unknown wait status code %d",buf,status); + ohshit(_("%s failed with unknown wait status code %d"),buf,status); } ensure_diversions(); } - fprintf(stderr, DPKG " - trying script from the new package instead ...\n"); + fprintf(stderr, _("dpkg - trying script from the new package instead ...\n")); arglist= buildarglist(scriptname, iffallback,versiondescribe(&pkg->installed.version, vdew_nonambig), (char*)0); strcpy(cidirrest,scriptname); - sprintf(buf,"new %s script",description); + sprintf(buf,_("new %s script"),description); if (stat(cidir,&stab)) if (errno == ENOENT) - ohshit("there is no script in the new version of the package - giving up"); + ohshit(_("there is no script in the new version of the package - giving up")); else - ohshite("unable to stat %s `%.250s'",buf,cidir); + ohshite(_("unable to stat %s `%.250s'"),buf,cidir); setexecute(cidir,&stab); c1= m_fork(); if (!c1) { preexecscript(cidir,arglist); - execv(cidir,arglist); - ohshite("unable to execute %s",buf); + execv(cidir+strlen(instdir),arglist); + ohshite(_("unable to execute %s"),buf); } script_catchsignals(); /* This does a push_cleanup() */ waitsubproc(c1,buf,0); pop_cleanup(ehflag_normaltidy); - fprintf(stderr, DPKG ": ... it looks like that went OK.\n"); + fprintf(stderr, _("dpkg: ... it looks like that went OK.\n")); ensure_diversions(); return 1; @@ -465,11 +466,11 @@ void ensure_pathname_nonexisting(const char *pathname) { if (errno == ENOTDIR) return; } if (errno != ENOTEMPTY) /* Huh ? */ - ohshite("failed to rmdir/unlink `%.255s'",pathname); + ohshite(_("failed to rmdir/unlink `%.255s'"),pathname); c1= m_fork(); if (!c1) { execlp(RM,"rm","-rf","--",pathname,(char*)0); - ohshite("failed to exec " RM " for cleanup"); + ohshite(_("failed to exec rm for cleanup")); } debug(dbg_eachfile,"ensure_pathname_nonexisting running rm -rf"); waitsubproc(c1,"rm cleanup",0); diff --git a/main/main.c b/main/main.c index 71e345442..047ff388a 100644 --- a/main/main.c +++ b/main/main.c @@ -32,61 +32,63 @@ #include <limits.h> #include <ctype.h> -#include "config.h" -#include "dpkg.h" -#include "dpkg-db.h" -#include "version.h" -#include "myopt.h" +#include <config.h> +#include <dpkg.h> +#include <dpkg-db.h> +#include <version.h> +#include <myopt.h> #include "main.h" static void printversion(void) { - if (!fputs("Debian Linux `" DPKG "' package management program version " - DPKG_VERSION_ARCH ".\n" - "Copyright 1994-1996 Ian Jackson, Bruce Perens. This is free software;\n" + if (fputs(_("Debian Linux `dpkg' package management program version "), stdout) < 0) + werr("stdout"); + if (fputs( DPKG_VERSION_ARCH ".\n", stdout) < 0) werr("stdout"); + if (fputs(_("Copyright 1994-1996 Ian Jackson, Bruce Perens. This is free software;\n" "see the GNU General Public Licence version 2 or later for copying\n" - "conditions. There is NO warranty. See dpkg --licence for details.\n", - stdout)) werr("stdout"); + "conditions. There is NO warranty. See dpkg --licence for details.\n"), + stdout) < 0) werr("stdout"); } /* options that need fixing: - " DPKG " --yet-to-unpack \n\ + dpkg --yet-to-unpack \n\ */ static void usage(void) { - if (!fputs("\ + if (fprintf (stdout, _("\ Usage: \n\ - " DPKG " -i|--install <.deb file name> ... | -R|--recursive <dir> ...\n\ - " DPKG " --unpack <.deb file name> ... | -R|--recursive <dir> ...\n\ - " DPKG " -A|--record-avail <.deb file name> ... | -R|--recursive <dir> ...\n\ - " DPKG " --configure <package name> ... | -a|--pending\n\ - " DPKG " -r|--remove | --purge <package name> ... | -a|--pending\n\ - " DPKG " --get-selections [<pattern> ...] get list of selections to stdout\n\ - " DPKG " --set-selections set package selections from stdin\n\ - " DPKG " --update-avail <Packages-file> replace available packages info\n\ - " DPKG " --merge-avail <Packages-file> merge with info from file\n\ - " DPKG " --clear-avail erase existing available info\n\ - " DPKG " --forget-old-unavail forget uninstalled unavailable pkgs\n\ - " DPKG " -s|--status <package-name> ... display package status details\n\ - " DPKG " --print-avail <package-name> ... display available version details\n\ - " DPKG " -L|--listfiles <package-name> ... list files `owned' by package(s)\n\ - " DPKG " -l|--list [<pattern> ...] list packages concisely\n\ - " DPKG " -S|--search <pattern> ... find package(s) owning file(s)\n\ - " DPKG " -C|--audit check for broken package(s)\n\ - " DPKG " --print-architecture print target architecture (uses GCC)\n\ - " DPKG " --print-gnu-build-architecture print GNU version of target arch\n\ - " DPKG " --print-installation-architecture print host architecture (for inst'n)\n\ - " DPKG " --compare-versions <a> <rel> <b> compare version numbers - see below\n\ - " DPKG " --help | --version show this help / version number\n\ - " DPKG " --force-help | -Dh|--debug=help help on forcing resp. debugging\n\ - " DPKG " --licence print copyright licencing terms\n\ + dpkg -i|--install <.deb file name> ... | -R|--recursive <dir> ...\n\ + dpkg --unpack <.deb file name> ... | -R|--recursive <dir> ...\n\ + dpkg -A|--record-avail <.deb file name> ... | -R|--recursive <dir> ...\n\ + dpkg --configure <package name> ... | -a|--pending\n\ + dpkg -r|--remove | --purge <package name> ... | -a|--pending\n\ + dpkg --get-selections [<pattern> ...] get list of selections to stdout\n\ + dpkg --set-selections set package selections from stdin\n\ + dpkg --update-avail <Packages-file> replace available packages info\n\ + dpkg --merge-avail <Packages-file> merge with info from file\n\ + dpkg --clear-avail erase existing available info\n\ + dpkg --forget-old-unavail forget uninstalled unavailable pkgs\n\ + dpkg -s|--status <package-name> ... display package status details\n\ + dpkg --print-avail <package-name> ... display available version details\n\ + dpkg -L|--listfiles <package-name> ... list files `owned' by package(s)\n\ + dpkg -l|--list [<pattern> ...] list packages concisely\n\ + dpkg -S|--search <pattern> ... find package(s) owning file(s)\n\ + dpkg -C|--audit check for broken package(s)\n\ + dpkg --print-architecture print target architecture (uses GCC)\n\ + dpkg --print-gnu-build-architecture print GNU version of target arch\n\ + dpkg --print-installation-architecture print host architecture (for inst'n)\n\ + dpkg --compare-versions <a> <rel> <b> compare version numbers - see below\n\ + dpkg --help | --version show this help / version number\n\ + dpkg --force-help | -Dh|--debug=help help on forcing resp. debugging\n\ + dpkg --licence print copyright licencing terms\n\ \n\ -Use " DPKG " -b|--build|-c|--contents|-e|--control|-I|--info|-f|--field|\n\ - -x|--extract|-X|--vextract|--fsys-tarfile on archives (type " BACKEND " --help.)\n\ +Use dpkg -b|--build|-c|--contents|-e|--control|-I|--info|-f|--field|\n\ + -x|--extract|-X|--vextract|--fsys-tarfile on archives (type %s --help.)\n\ \n\ -For internal use: " DPKG " --assert-support-predepends | --predep-package\n\ +For internal use: dpkg --assert-support-predepends | --predep-package |\n\ + --assert-working-epoch\n\ \n\ Options: - --admindir=<directory> Use <directory> instead of " ADMINDIR "\n\ + --admindir=<directory> Use <directory> instead of %s\n\ --root=<directory> Install on alternative system rooted elsewhere\n\ --instdir=<directory> Change inst'n root without changing admin dir\n\ -O|--selected-only Skip packages not selected for install/upgrade\n\ @@ -95,36 +97,37 @@ Options: -B|--auto-deconfigure Install even if it would break some other package\n\ --largemem | --smallmem Optimise for large (>4Mb) or small (<4Mb) RAM use\n\ --no-act Just say what we would do - don't do it\n\ - -D|--debug=<octal> Enable debugging - see -Dhelp or --debug=help + -D|--debug=<octal> Enable debugging - see -Dhelp or --debug=help\n\ --ignore-depends=<package>,... Ignore dependencies involving <package>\n\ --force-... Override problems - see --force-help\n\ --no-force-...|--refuse-... Stop when problems encountered\n\ \n\ Comparison operators for --compare-versions are:\n\ lt le eq ne ge gt (treat no version as earlier than any version);\n\ - lt-nl le-nl ge-nl gt-nl (tread no version as later than any version);\n\ + lt-nl le-nl ge-nl gt-nl (treat no version as later than any version);\n\ < << <= = >= >> > (only for compatibility with control file syntax).\n\ \n\ -Use `" DSELECT "' for user-friendly package management.\n", - stdout)) werr("stdout"); +Use `dselect' for user-friendly package management.\n"), + BACKEND, ADMINDIR) < 0) werr ("stdout"); } -const char thisname[]= DPKG; +const char thisname[]= "dpkg"; const char architecture[]= ARCHITECTURE; -const char printforhelp[]= "\ -Type " DPKG " --help for help about installing and deinstalling packages [*];\n\ -Use " DSELECT " for user-friendly package management;\n\ -Type " DPKG " -Dhelp for a list of " DPKG " debug flag values;\n\ -Type " DPKG " --force-help for a list of forcing options;\n\ -Type " BACKEND " --help for help about manipulating *.deb files;\n\ -Type " DPKG " --licence for copyright licence and lack of warranty (GNU GPL) [*].\n\ +const char printforhelp[]= N_("\ +Type dpkg --help for help about installing and deinstalling packages [*];\n\ +Use dselect for user-friendly package management;\n\ +Type dpkg -Dhelp for a list of dpkg debug flag values;\n\ +Type dpkg --force-help for a list of forcing options;\n\ +Type dpkg-deb --help for help about manipulating *.deb files;\n\ +Type dpkg --licence for copyright licence and lack of warranty (GNU GPL) [*].\n\ \n\ -Options marked [*] produce a lot of output - pipe it through `less' or `more' !"; +Options marked [*] produce a lot of output - pipe it through `less' or `more' !"); const struct cmdinfo *cipaction= 0; int f_pending=0, f_recursive=0, f_alsoselect=1, f_skipsame=0, f_noact=0; int f_autodeconf=0, f_largemem=0; unsigned long f_debug=0; +/* Change fc_overwrite to 1 to enable force-overwrite by default */ int fc_downgrade=1, fc_configureany=0, fc_hold=0, fc_removereinstreq=0, fc_overwrite=1; int fc_removeessential=0, fc_conflicts=0, fc_depends=0, fc_dependsversion=0; int fc_autoselect=1, fc_badpath=0, fc_overwritediverted=0, fc_architecture=0; @@ -165,7 +168,7 @@ static void versiononly(const struct cmdinfo *cip, const char *value) { static void setaction(const struct cmdinfo *cip, const char *value) { if (cipaction) - badusage("conflicting actions --%s and --%s",cip->olong,cipaction->olong); + badusage(_("conflicting actions --%s and --%s"),cip->olong,cipaction->olong); cipaction= cip; } @@ -173,7 +176,7 @@ static void setdebug(const struct cmdinfo *cpi, const char *value) { char *endp; if (*value == 'h') { - if (!fputs( + if (fputs( DPKG " debugging option, --debug=<octal> or -D<octal>:\n\n\ number ref. in source description\n\ 1 general Generally helpful progress information\n\ @@ -188,7 +191,7 @@ DPKG " debugging option, --debug=<octal> or -D<octal>:\n\n\ 2000 stupidlyverbose Insane amounts of drivel\n\n\ Debugging options are be mixed using bitwise-or.\n\ Note that the meanings and values are subject to change.\n", - stderr)) werr("stderr"); + stdout) < 0) werr("stdout"); exit(0); } @@ -217,14 +220,14 @@ static void ignoredepends(const struct cmdinfo *cip, const char *value) { if (*p != ',') continue; *p++= 0; if (!*p || *p==',' || p==copy+1) - badusage("null package name in --ignore-depends comma-separated list `%.250s'", + badusage(_("null package name in --ignore-depends comma-separated list `%.250s'"), value); } p= copy; while (*p) { pnerr= illegal_packagename(value,0); - if (pnerr) ohshite("--ignore-depends requires a legal package name. " - "`%.250s' is not; %s", value, pnerr); + if (pnerr) ohshite(_("--ignore-depends requires a legal package name. " + "`%.250s' is not; %s"), value, pnerr); ni= m_malloc(sizeof(struct packageinlist)); ni->pkg= findpackage(value); ni->next= ignoredependss; @@ -239,8 +242,7 @@ static void setforce(const struct cmdinfo *cip, const char *value) { const struct forceinfo *fip; if (!strcmp(value,"help")) { - if (!fputs( -DPKG " forcing options - control behaviour when problems found:\n\ + if (fputs(_("dpkg forcing options - control behaviour when problems found:\n\ warn but continue: --force-<thing>,<thing>,...\n\ stop with error: --refuse-<thing>,<thing>,... | --no-force-<thing>,...\n\ Forcing things:\n\ @@ -250,7 +252,7 @@ DPKG " forcing options - control behaviour when problems found:\n\ hold Process incidental packages even when on hold\n\ bad-path PATH is missing important programs, problems likely\n\ not-root Try to (de)install things even when not root\n\ - overwrite [*] Overwrite a file from one package with another\n\ + overwrite Overwrite a file from one package with another\n\ overwrite-diverted Overwrite a diverted file with an undiverted version\n\ depends-version [!] Turn dependency version problems into warnings\n\ depends [!] Turn all dependency problems into warnings\n\ @@ -261,8 +263,8 @@ DPKG " forcing options - control behaviour when problems found:\n\ remove-essential [!] Remove an essential package\n\ \n\ WARNING - use of options marked [!] can seriously damage your installation.\n\ -Forcing options marked [*] are enabled by default.\n", - stderr)) werr("stderr"); +Forcing options marked [*] are enabled by default.\n"), + stdout) < 0) werr("stdout"); exit(0); } @@ -272,7 +274,7 @@ Forcing options marked [*] are enabled by default.\n", for (fip=forceinfos; fip->name; fip++) if (!strncmp(fip->name,value,l) && strlen(fip->name)==l) break; if (!fip->name) - badusage("unknown force/refuse option `%.*s'", l<250 ? l : 250, value); + badusage(_("unknown force/refuse option `%.*s'"), l<250 ? l : 250, value); *fip->opt= cip->arg; if (!comma) break; value= ++comma; @@ -316,6 +318,7 @@ static const struct cmdinfo cmdinfos[]= { ACTION( "print-architecture", 0, act_printarch, printarch ), ACTION( "print-gnu-build-architecture", 0, act_printgnuarch, printarch ), ACTION( "assert-support-predepends", 0, act_assertpredep, assertpredep ), + ACTION( "assert-working-epoch", 0, act_assertepoch, assertepoch ), ACTION( "print-installation-architecture", 0, act_printinstarch, printinstarch ), ACTION( "predep-package", 0, act_predeppackage, predeppackage ), ACTION( "compare-versions", 0, act_cmpversions, cmpversions ), @@ -347,7 +350,7 @@ static const struct cmdinfo cmdinfos[]= { static void execbackend(int argc, const char *const *argv) { execvp(BACKEND, (char* const*) argv); - ohshite("failed to exec " BACKEND); + ohshite(_("failed to exec dpkg-deb")); } int main(int argc, const char *const *argv) { @@ -356,6 +359,10 @@ int main(int argc, const char *const *argv) { const char *argp, *const *blongopts, *const *argvs; static void (*actionfunction)(const char *const *argv); + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, LOCALEDIR); + textdomain(PACKAGE); + if (setjmp(ejbuf)) { /* expect warning about possible clobbering of argv */ error_unwind(ehflag_bombout); exit(2); } @@ -379,7 +386,7 @@ int main(int argc, const char *const *argv) { } myopt(&argv,cmdinfos); - if (!cipaction) badusage("need an action option"); + if (!cipaction) badusage(_("need an action option")); setvbuf(stdout,0,_IONBF,0); filesdbinit(); diff --git a/main/main.h b/main/main.h index fb1e50e50..3c9c747ad 100644 --- a/main/main.h +++ b/main/main.h @@ -53,7 +53,8 @@ enum action { act_unset, act_install, act_unpack, act_avail, act_configure, act_unpackchk, act_status, act_searchfiles, act_audit, act_listfiles, act_assertpredep, act_printarch, act_predeppackage, act_cmpversions, act_printinstarch, act_compareversions, act_printavail, act_avclear, - act_forgetold, act_getselections, act_setselections, act_printgnuarch }; + act_forgetold, act_getselections, act_setselections, act_printgnuarch, + act_assertepoch }; enum conffopt { cfof_prompt = 001, @@ -110,6 +111,7 @@ void audit(const char *const *argv); void unpackchk(const char *const *argv); void searchfiles(const char *const *argv); void enqperpackage(const char *const *argv); +void assertepoch(const char *const *argv); void assertpredep(const char *const *argv); void predeppackage(const char *const *argv); void printarch(const char *const *argv); diff --git a/main/packages.c b/main/packages.c index a87621648..3dea58bbe 100644 --- a/main/packages.c +++ b/main/packages.c @@ -32,10 +32,10 @@ #include <string.h> #include <assert.h> -#include "config.h" -#include "dpkg.h" -#include "dpkg-db.h" -#include "myopt.h" +#include <config.h> +#include <dpkg.h> +#include <dpkg-db.h> +#include <myopt.h> #include "filesdb.h" #include "main.h" @@ -76,7 +76,7 @@ void packages(const char *const *argv) { if (f_pending) { if (*argv) - badusage("--%s --pending does not take any non-option arguments",cipaction->olong); + badusage(_("--%s --pending does not take any non-option arguments"),cipaction->olong); it= iterpkgstart(); while ((pkg= iterpkgnext(it)) != 0) { @@ -106,15 +106,15 @@ void packages(const char *const *argv) { } else { if (!*argv) - badusage("--%s needs at least one package name argument", cipaction->olong); + badusage(_("--%s needs at least one package name argument"), cipaction->olong); while ((thisarg= *argv++) != 0) { pkg= findpackage(thisarg); if (pkg->status == stat_notinstalled) { l= strlen(pkg->name); if (l >= sizeof(DEBEXT) && !strcmp(pkg->name+l-sizeof(DEBEXT)+1,DEBEXT)) - badusage("you must specify packages by their own names," - " not by quoting the names of the files they come in"); + badusage(_("you must specify packages by their own names," + " not by quoting the names of the files they come in")); } add_to_queue(pkg); } @@ -147,12 +147,12 @@ void process_queue(void) { /* Remove it from the queue - this is a second copy ! */ switch (cipaction->arg) { case act_configure: case act_remove: case act_purge: - printf("Package %s listed more than once, only processing once.\n", + printf(_("Package %s listed more than once, only processing once.\n"), rundown->pkg->name); break; case act_install: - printf("More than one copy of package %s has been unpacked\n" - " in this run ! Only configuring it once.\n", + printf(_("More than one copy of package %s has been unpacked\n" + " in this run ! Only configuring it once.\n"), rundown->pkg->name); break; default: @@ -261,13 +261,13 @@ static int deppossi_ok_found(struct pkginfo *possdependee, } thisf= 0; if (possdependee == removing) { - varbufaddstr(oemsgs," Package "); + varbufaddstr(oemsgs,_(" Package ")); varbufaddstr(oemsgs,possdependee->name); if (providing) { - varbufaddstr(oemsgs," which provides "); + varbufaddstr(oemsgs,_(" which provides ")); varbufaddstr(oemsgs,providing->name); } - varbufaddstr(oemsgs," is to be removed.\n"); + varbufaddstr(oemsgs,_(" is to be removed.\n")); *matched= 1; if (fc_depends) thisf= (dependtry >= 4) ? 2 : 1; debug(dbg_depcondetail," removing possdependee, returning %d",thisf); @@ -279,9 +279,9 @@ static int deppossi_ok_found(struct pkginfo *possdependee, case stat_halfconfigured: assert(possdependee->installed.valid); if (checkversion && !versionsatisfied(&possdependee->installed,checkversion)) { - varbufaddstr(oemsgs," Version of "); + varbufaddstr(oemsgs,_(" Version of ")); varbufaddstr(oemsgs,possdependee->name); - varbufaddstr(oemsgs," on system is "); + varbufaddstr(oemsgs,_(" on system is ")); varbufaddstr(oemsgs,versiondescribe(&possdependee->installed.version, vdew_nonambig)); varbufaddstr(oemsgs,".\n"); @@ -300,31 +300,31 @@ static int deppossi_ok_found(struct pkginfo *possdependee, debug(dbg_depcondetail," unpacked/halfconfigured, defer"); return 1; } else if (!removing && fc_configureany && !skip_due_to_hold(possdependee)) { - fprintf(stderr, DPKG - ": also configuring `%s' (required by `%s')\n", + fprintf(stderr, + _("dpkg: also configuring `%s' (required by `%s')\n"), possdependee->name, requiredby->name); add_to_queue(possdependee); sincenothing=0; return 1; } else { - varbufaddstr(oemsgs," Package "); + varbufaddstr(oemsgs,_(" Package ")); varbufaddstr(oemsgs,possdependee->name); if (providing) { - varbufaddstr(oemsgs," which provides "); + varbufaddstr(oemsgs,_(" which provides ")); varbufaddstr(oemsgs,providing->name); } - varbufaddstr(oemsgs," is not configured yet.\n"); + varbufaddstr(oemsgs,_(" is not configured yet.\n")); if (fc_depends) thisf= (dependtry >= 4) ? 2 : 1; debug(dbg_depcondetail," not configured/able - returning %d",thisf); (*interestingwarnings)++; return thisf; } default: - varbufaddstr(oemsgs," Package "); + varbufaddstr(oemsgs,_(" Package ")); varbufaddstr(oemsgs,possdependee->name); if (providing) { - varbufaddstr(oemsgs," which provides "); + varbufaddstr(oemsgs,_(" which provides ")); varbufaddstr(oemsgs,providing->name); } - varbufaddstr(oemsgs," is not installed.\n"); + varbufaddstr(oemsgs,_(" is not installed.\n")); if (fc_depends) thisf= (dependtry >= 4) ? 2 : 1; debug(dbg_depcondetail," not installed - returning %d",thisf); (*interestingwarnings)++; @@ -383,13 +383,13 @@ int dependencies_ok(struct pkginfo *pkg, struct pkginfo *removing, case 2: varbufaddstr(aemsgs, " "); varbufaddstr(aemsgs, pkg->name); - varbufaddstr(aemsgs, " depends on "); + varbufaddstr(aemsgs, _(" depends on ")); varbufdependency(aemsgs, dep); if (interestingwarnings) { /* Don't print the line about the package to be removed if * that's the only line. */ - varbufaddstr(aemsgs, "; however:\n"); + varbufaddstr(aemsgs, _("; however:\n")); varbufaddc(&oemsgs, 0); varbufaddstr(aemsgs, oemsgs.buf); } else { diff --git a/main/processarc.c b/main/processarc.c index e9bad04ad..bf5f9d3fc 100644 --- a/main/processarc.c +++ b/main/processarc.c @@ -19,6 +19,7 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +#include <errno.h> #include <stdio.h> #include <string.h> #include <stdlib.h> @@ -33,11 +34,11 @@ #include <sys/types.h> #include <sys/wait.h> -#include "config.h" -#include "dpkg.h" -#include "dpkg-db.h" -#include "myopt.h" -#include "tarfn.h" +#include <config.h> +#include <dpkg.h> +#include <dpkg-db.h> +#include <tarfn.h> +#include <myopt.h> #include "filesdb.h" #include "main.h" @@ -57,7 +58,7 @@ void process_archive(const char *filename) { static int p1[2]; static char cidirtmpnambuf[L_tmpnam+100]; static char *cidirbuf=0, *reasmbuf=0; - static struct fileinlist *newconffiles; + static struct fileinlist *newconffiles, *newfileslist; static enum pkgstatus oldversionstatus; static struct varbuf infofnvb, fnvb, depprobwhy; static struct tarcontext tc; @@ -68,7 +69,7 @@ void process_archive(const char *filename) { char *cidir, *cidirrest, *p; char pfilenamebuf[35], conffilenamebuf[MAXCONFFILENAME]; const char *pfilename, *newinfofilename; - struct fileinlist *newconff, **newconffileslastp, *newfileslist; + struct fileinlist *newconff, **newconffileslastp; struct fileinlist *cfile; struct reversefilelistiter rlistit; struct conffile *searchconff, **iconffileslastp, *newiconff; @@ -101,7 +102,7 @@ void process_archive(const char *filename) { pfilename= filename; } - if (stat(filename,&stab)) ohshite("cannot access archive"); + if (stat(filename,&stab)) ohshite(_("cannot access archive")); if (!f_noact) { /* We can't `tentatively-reassemble' packages. */ @@ -111,15 +112,15 @@ void process_archive(const char *filename) { strcat(reasmbuf,"/" REASSEMBLETMP); } if (unlink(reasmbuf) && errno != ENOENT) - ohshite("error ensuring `%.250s' doesn't exist",reasmbuf); + ohshite(_("error ensuring `%.250s' doesn't exist"),reasmbuf); push_cleanup(cu_pathname,~0, 0,0, 1,(void*)reasmbuf); c1= m_fork(); if (!c1) { execlp(SPLITTER, SPLITTER,"-Qao",reasmbuf,filename,(char*)0); - ohshite("failed to exec " SPLITTER " to see if it's part of a multiparter"); + ohshite(_("failed to exec dpkg-split to see if it's part of a multiparter")); } while ((r= waitpid(c1,&status,0)) == -1 && errno == EINTR); - if (r != c1) { onerr_abort++; ohshite("wait for " SPLITTER " failed"); } + if (r != c1) { onerr_abort++; ohshite(_("wait for dpkg-split failed")); } switch (WIFEXITED(status) ? WEXITSTATUS(status) : -1) { case 0: /* It was a part - is it complete ? */ @@ -140,7 +141,7 @@ void process_archive(const char *filename) { if (f_noact) { cidir= cidirtmpnambuf; - if (!tmpnam(cidir)) ohshite("unable to get unique filename for control info"); + if (!tmpnam(cidir)) ohshite(_("unable to get unique filename for control info")); strcat(cidir,"/"); } else { /* We want it to be on the same filesystem so that we can @@ -162,7 +163,7 @@ void process_archive(const char *filename) { if (!c1) { cidirrest[-1]= 0; execlp(BACKEND, BACKEND,"--control",filename,cidir,(char*)0); - ohshite("failed to exec " BACKEND " to extract control information"); + ohshite(_("failed to exec dpkg-deb to extract control information")); } waitsubproc(c1,BACKEND " --control",0); strcpy(cidirrest,CONTROLFILE); @@ -176,7 +177,7 @@ void process_archive(const char *filename) { sprintf(pkg->files->size,"%lu",(unsigned long)stab.st_size); if (cipaction->arg == act_avail) { - printf("Recorded info about %s from %s.\n",pkg->name,pfilename); + printf(_("Recorded info about %s from %s.\n"),pkg->name,pfilename); pop_cleanup(ehflag_normaltidy); return; } @@ -185,7 +186,7 @@ void process_archive(const char *filename) { strcmp(pkg->available.architecture,"all") && strcmp(pkg->available.architecture,architecture)) forcibleerr(fc_architecture, - "package architecture (%s) does not match system (%s)", + _("package architecture (%s) does not match system (%s)"), pkg->available.architecture,architecture); if (!pkg->installed.valid) blankpackageperfile(&pkg->installed); @@ -202,10 +203,10 @@ void process_archive(const char *filename) { if (pkg->want != want_install) { if (f_alsoselect) { - printf("Selecting previously deselected package %s.\n",pkg->name); + printf(_("Selecting previously deselected package %s.\n"),pkg->name); pkg->want= want_install; } else { - printf("Skipping deselected package %s.\n",pkg->name); + printf(_("Skipping deselected package %s.\n"),pkg->name); return; } } @@ -216,13 +217,13 @@ void process_archive(const char *filename) { needepochs= epochsdiffer(&pkg->available.version,&pkg->installed.version) ? vdew_always : vdew_never; if (fc_downgrade) { - fprintf(stderr, DPKG " - warning: downgrading %.250s from %.250s to %.250s.\n", + fprintf(stderr, _("dpkg - warning: downgrading %.250s from %.250s to %.250s.\n"), pkg->name, versiondescribe(&pkg->installed.version,needepochs), versiondescribe(&pkg->available.version,needepochs)); } else { - fprintf(stderr, "Will not downgrade" - " %.250s from version %.250s to %.250s, skipping.\n", + fprintf(stderr, _("Will not downgrade" + " %.250s from version %.250s to %.250s, skipping.\n"), pkg->name, versiondescribe(&pkg->installed.version,needepochs), versiondescribe(&pkg->available.version,needepochs)); @@ -231,7 +232,7 @@ void process_archive(const char *filename) { } } else if (r == 0 && f_skipsame && /* same version fully installed ? */ pkg->status == stat_installed && !(pkg->eflag &= eflagf_reinstreq)) { - fprintf(stderr, "Version %.250s of %.250s already installed, skipping.\n", + fprintf(stderr, _("Version %.250s of %.250s already installed, skipping.\n"), versiondescribe(&pkg->installed.version,vdew_never), pkg->name); pop_cleanup(ehflag_normaltidy); @@ -264,11 +265,11 @@ void process_archive(const char *filename) { case dep_predepends: if (!depisok(dsearch,&depprobwhy,0,1)) { varbufaddc(&depprobwhy,0); - fprintf(stderr, DPKG ": regarding %s containing %s, pre-dependency problem:\n%s", + fprintf(stderr, _("dpkg: regarding %s containing %s, pre-dependency problem:\n%s"), pfilename, pkg->name, depprobwhy.buf); if (!force_depends(dsearch->list)) - ohshit("pre-dependency problem - not installing %.250s",pkg->name); - fprintf(stderr, DPKG ": warning - ignoring pre-dependency problem !\n"); + ohshit(_("pre-dependency problem - not installing %.250s"),pkg->name); + fprintf(stderr, _("dpkg: warning - ignoring pre-dependency problem !\n")); } } } @@ -282,12 +283,12 @@ void process_archive(const char *filename) { filesdbinit(); if (pkg->status != stat_notinstalled && pkg->status != stat_configfiles) - printf("Preparing to replace %s %s (using %s) ...\n", + printf(_("Preparing to replace %s %s (using %s) ...\n"), pkg->name, versiondescribe(&pkg->installed.version,vdew_nonambig), pfilename); else - printf("Unpacking %s (from %s) ...\n",pkg->name,pfilename); + printf(_("Unpacking %s (from %s) ...\n"),pkg->name,pfilename); if (f_noact) { pop_cleanup(ehflag_normaltidy); @@ -307,7 +308,7 @@ void process_archive(const char *filename) { p= conffilenamebuf + strlen(conffilenamebuf); assert(p != conffilenamebuf); if (p[-1] != '\n') - ohshit("name of conffile (starting `%.250s') is too long (>%d characters)", + ohshit(_("name of conffile (starting `%.250s') is too long (>%d characters)"), conffilenamebuf, MAXCONFFILENAME); while (p > conffilenamebuf && isspace(p[-1])) --p; if (p == conffilenamebuf) continue; @@ -361,11 +362,11 @@ void process_archive(const char *filename) { } newconff->namenode->flags |= fnnf_new_conff; } - if (ferror(conff)) ohshite("read error in %.250s",cidir); + if (ferror(conff)) ohshite(_("read error in %.250s"),cidir); pop_cleanup(ehflag_normaltidy); /* conff= fopen() */ - if (fclose(conff)) ohshite("error closing %.250s",cidir); + if (fclose(conff)) ohshite(_("error closing %.250s"),cidir); } else { - if (errno != ENOENT) ohshite("error trying to open %.250s",cidir); + if (errno != ENOENT) ohshite(_("error trying to open %.250s"),cidir); } /* All the old conffiles are marked with a flag, so that we don't delete @@ -397,7 +398,7 @@ void process_archive(const char *filename) { conflictor->status == stat_installed)) { for (deconpil= deconfigure; deconpil; deconpil= deconpil->next) { - printf("De-configuring %s, so that we can remove %s ...\n", + printf(_("De-configuring %s, so that we can remove %s ...\n"), deconpil->pkg->name, conflictor->name); deconpil->pkg->status= stat_halfconfigured; modstatdb_note(deconpil->pkg); @@ -454,7 +455,7 @@ void process_archive(const char *filename) { "upgrade", versiondescribe(&pkg->installed.version, vdew_nonambig), (char*)0); - printf("Unpacking replacement %.250s ...\n",pkg->name); + printf(_("Unpacking replacement %.250s ...\n"),pkg->name); } /* @@ -530,7 +531,7 @@ void process_archive(const char *filename) { if (!c1) { m_dup2(p1[1],1); close(p1[0]); close(p1[1]); execlp(BACKEND, BACKEND, "--fsys-tarfile", filename, (char*)0); - ohshite("unable to exec " BACKEND " to get filesystem archive"); + ohshite(_("unable to exec dpkg-deb to get filesystem archive")); } close(p1[1]); @@ -538,18 +539,18 @@ void process_archive(const char *filename) { push_cleanup(cu_fileslist,~0, 0,0, 1,(void*)&newfileslist); tc.pkg= pkg; tc.backendpipe= fdopen(p1[0],"r"); - if (!tc.backendpipe) ohshite("unable to fdopen " BACKEND " extract pipe"); + if (!tc.backendpipe) ohshite(_("unable to fdopen dpkg-deb extract pipe")); push_cleanup(cu_backendpipe,~ehflag_bombout, 0,0, 1,(void*)&tc.backendpipe); r= TarExtractor((void*)&tc, &tf); if (r) { if (errno) { - ohshite("error reading " BACKEND " tar output"); + ohshite(_("error reading dpkg-deb tar output")); } else if (feof(tc.backendpipe)) { waitsubproc(c1,BACKEND " --fsys-tarfile (EOF)",1); - ohshit("unexpected EOF in filesystem tarfile - corrupted package archive"); + ohshit(_("unexpected EOF in filesystem tarfile - corrupted package archive")); } else { - ohshit("corrupted filesystem tarfile - corrupted package archive"); + ohshit(_("corrupted filesystem tarfile - corrupted package archive")); } } tmpf= tc.backendpipe; @@ -606,7 +607,7 @@ void process_archive(const char *filename) { if (errno == ENOTDIR) continue; } fprintf(stderr, - DPKG ": warning - unable to delete old file `%.250s': %s\n", + _("dpkg: warning - unable to delete old file `%.250s': %s\n"), namenode->name, strerror(errno)); } @@ -628,7 +629,7 @@ void process_archive(const char *filename) { infodirlen= infofnvb.used; varbufaddc(&infofnvb,0); dsd= opendir(infofnvb.buf); - if (!dsd) ohshite("cannot read info directory"); + if (!dsd) ohshite(_("cannot read info directory")); push_cleanup(cu_closedir,~0, 0,0, 1,(void*)dsd); while ((de= readdir(dsd)) != 0) { debug(dbg_veryverbose, "process_archive info file `%s'", de->d_name); @@ -641,7 +642,7 @@ void process_archive(const char *filename) { p++; /* skip past the full stop */ if (!strcmp(p,LISTFILE)) continue; /* We do the list separately */ if (strlen(p) > MAXCONTROLFILENAME) - ohshit("old version of package has overly-long info file name starting `%.250s'", + ohshit(_("old version of package has overly-long info file name starting `%.250s'"), de->d_name); infofnvb.used= infodirlen; varbufaddstr(&infofnvb,de->d_name); @@ -653,17 +654,17 @@ void process_archive(const char *filename) { } else if (errno == ENOENT) { /* Right, no new version. */ if (unlink(infofnvb.buf)) - ohshite("unable to remove obsolete info file `%.250s'",infofnvb.buf); + ohshite(_("unable to remove obsolete info file `%.250s'"),infofnvb.buf); debug(dbg_scripts, "process_archive info unlinked %s",infofnvb.buf); } else { - ohshite("unable to install (supposed) new info file `%.250s'",cidir); + ohshite(_("unable to install (supposed) new info file `%.250s'"),cidir); } } pop_cleanup(ehflag_normaltidy); /* closedir */ *cidirrest= 0; /* the directory itself */ dsd= opendir(cidir); - if (!dsd) ohshite("unable to open temp control directory"); + if (!dsd) ohshite(_("unable to open temp control directory")); push_cleanup(cu_closedir,~0, 0,0, 1,(void*)dsd); while ((de= readdir(dsd))) { if (strchr(de->d_name,'.')) { @@ -672,27 +673,27 @@ void process_archive(const char *filename) { continue; } if (strlen(de->d_name) > MAXCONTROLFILENAME) - ohshit("package contains overly-long control info file name (starting `%.50s')", + ohshit(_("package contains overly-long control info file name (starting `%.50s')"), de->d_name); strcpy(cidirrest,de->d_name); /* First we check it's not a directory. */ if (!rmdir(cidir)) - ohshit("package control info contained directory `%.250s'",cidir); + ohshit(_("package control info contained directory `%.250s'"),cidir); else if (errno != ENOTDIR) - ohshite("package control info rmdir of `%.250s' didn't say not a dir",de->d_name); + ohshite(_("package control info rmdir of `%.250s' didn't say not a dir"),de->d_name); if (!strcmp(de->d_name,CONTROLFILE)) { debug(dbg_scripts,"process_archive tmp.ci script/file `%s' is control",cidir); continue; /* ignore the control file */ } if (!strcmp(de->d_name,LISTFILE)) { - fprintf(stderr, DPKG ": warning - package %s" - " contained list as info file", pkg->name); + fprintf(stderr, _("dpkg: warning - package %s" + " contained list as info file"), pkg->name); continue; } /* Right, install it */ newinfofilename= pkgadminfile(pkg,de->d_name); if (rename(cidir,newinfofilename)) - ohshite("unable to install new info file `%.250s' as `%.250s'", + ohshite(_("unable to install new info file `%.250s' as `%.250s'"), cidir,newinfofilename); debug(dbg_scripts,"process_archive tmp.ci script/file `%s' installed as `%s'", cidir, newinfofilename); @@ -843,7 +844,7 @@ void process_archive(const char *filename) { otherpkg->clientdata->istobe= itb_normal; if (pdep) continue; - printf("(Noting disappearance of %s, which has been completely replaced.)\n", + printf(_("(Noting disappearance of %s, which has been completely replaced.)\n"), otherpkg->name); debug(dbg_general, "process_archive disappearing %s",otherpkg->name); /* No, we're disappearing it. This is the wrong time to go and @@ -863,7 +864,7 @@ void process_archive(const char *filename) { varbufaddstr(&fnvb,"/" INFODIR); infodirbaseused= fnvb.used; varbufaddc(&fnvb,0); - dsd= opendir(fnvb.buf); if (!dsd) ohshite("cannot read info directory"); + dsd= opendir(fnvb.buf); if (!dsd) ohshite(_("cannot read info directory")); push_cleanup(cu_closedir,~0, 0,0, 1,(void*)dsd); debug(dbg_general, "process_archive disappear cleaning info directory"); @@ -879,7 +880,7 @@ void process_archive(const char *filename) { varbufaddstr(&fnvb,de->d_name); varbufaddc(&fnvb,0); if (unlink(fnvb.buf)) - ohshite("unable to delete disappearing control info file `%.250s'",fnvb.buf); + ohshite(_("unable to delete disappearing control info file `%.250s'"),fnvb.buf); debug(dbg_scripts, "process_archive info unlinked %s",fnvb.buf); } pop_cleanup(ehflag_normaltidy); /* closedir */ diff --git a/main/remove.c b/main/remove.c index 37e974385..ee713c1a2 100644 --- a/main/remove.c +++ b/main/remove.c @@ -19,6 +19,7 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +#include <errno.h> #include <stdio.h> #include <string.h> #include <stdlib.h> @@ -32,10 +33,10 @@ #include <string.h> #include <assert.h> -#include "config.h" -#include "dpkg.h" -#include "dpkg-db.h" -#include "myopt.h" +#include <config.h> +#include <dpkg.h> +#include <dpkg-db.h> +#include <myopt.h> #include "filesdb.h" #include "main.h" @@ -73,17 +74,17 @@ void deferred_remove(struct pkginfo *pkg) { debug(dbg_general,"deferred_remove package %s",pkg->name); if (pkg->status == stat_notinstalled) { - fprintf(stderr, DPKG - " - warning: ignoring request to remove %.250s which isn't installed.\n", + fprintf(stderr, + _("dpkg - warning: ignoring request to remove %.250s which isn't installed.\n"), pkg->name); pkg->clientdata->istobe= itb_normal; return; } else if (!f_pending && pkg->status == stat_configfiles && cipaction->arg != act_purge) { - fprintf(stderr, DPKG - " - warning: ignoring request to remove %.250s, only the config\n" - " files of which are on the system. Use --purge to remove them too.\n", + fprintf(stderr, + _("dpkg - warning: ignoring request to remove %.250s, only the config\n" + " files of which are on the system. Use --purge to remove them too.\n"), pkg->name); pkg->clientdata->istobe= itb_normal; return; @@ -91,8 +92,8 @@ void deferred_remove(struct pkginfo *pkg) { assert(pkg->installed.valid); if (pkg->installed.essential && pkg->status != stat_configfiles) - forcibleerr(fc_removeessential, "This is an essential package -" - " it should not be removed."); + forcibleerr(fc_removeessential, _("This is an essential package -" + " it should not be removed.")); if (!f_pending) pkg->want= (cipaction->arg == act_purge) ? want_purge : want_deinstall; @@ -117,13 +118,13 @@ void deferred_remove(struct pkginfo *pkg) { sincenothing= 0; varbufaddc(&raemsgs,0); fprintf(stderr, - DPKG ": dependency problems prevent removal of %s:\n%s", + _("dpkg: dependency problems prevent removal of %s:\n%s"), pkg->name, raemsgs.buf); - ohshit("dependency problems - not removing"); + ohshit(_("dependency problems - not removing")); } else if (raemsgs.used) { varbufaddc(&raemsgs,0); fprintf(stderr, - DPKG ": %s: dependency problems, but removing anyway as you request:\n%s", + _("dpkg: %s: dependency problems, but removing anyway as you request:\n%s"), pkg->name, raemsgs.buf); } varbuffree(&raemsgs); @@ -131,14 +132,14 @@ void deferred_remove(struct pkginfo *pkg) { if (pkg->eflag & eflagf_reinstreq) forcibleerr(fc_removereinstreq, - "Package is in a very bad inconsistent state - you should\n" - " reinstall it before attempting a removal."); + _("Package is in a very bad inconsistent state - you should\n" + " reinstall it before attempting a removal.")); ensure_allinstfiles_available(); filesdbinit(); if (f_noact) { - printf("Would remove or purge %s ...\n",pkg->name); + printf(_("Would remove or purge %s ...\n"),pkg->name); pkg->status= stat_notinstalled; pkg->clientdata->istobe= itb_normal; return; @@ -146,7 +147,7 @@ void deferred_remove(struct pkginfo *pkg) { oldconffsetflags(pkg->installed.conffiles); - printf("Removing %s ...\n",pkg->name); + printf(_("Removing %s ...\n"),pkg->name); if (pkg->status == stat_halfconfigured || pkg->status == stat_installed) { if (pkg->status == stat_installed || pkg->status == stat_halfconfigured) { @@ -241,23 +242,39 @@ void removal_bulk(struct pkginfo *pkg) { debug(dbg_eachfiledetail, "removal_bulk removing `%s'", fnvb.buf); if (!rmdir(fnvb.buf) || errno == ENOENT || errno == ELOOP) continue; if (errno == ENOTEMPTY) { - fprintf(stderr, DPKG - " - warning: while removing %.250s, directory `%.250s' not empty " - "so not removed.\n", + fprintf(stderr, + _("dpkg - warning: while removing %.250s, directory `%.250s' not empty " + "so not removed.\n"), pkg->name, namenode->name); push_leftover(&leftover,namenode); continue; } else if (errno == EBUSY || errno == EPERM) { - fprintf(stderr, DPKG " - warning: while removing %.250s," + fprintf(stderr, _("dpkg - warning: while removing %.250s," " unable to remove directory `%.250s':" - " %s - directory may be a mount point ?\n", + " %s - directory may be a mount point ?\n"), pkg->name, namenode->name, strerror(errno)); push_leftover(&leftover,namenode); continue; } - if (errno != ENOTDIR) ohshite("cannot remove `%.250s'",fnvb.buf); + if (errno != ENOTDIR) ohshite(_("cannot remove `%.250s'"),fnvb.buf); debug(dbg_eachfiledetail, "removal_bulk unlinking `%s'", fnvb.buf); - if (unlink(fnvb.buf)) ohshite("cannot remove file `%.250s'",fnvb.buf); + { + /* + * If file to remove is a device or s[gu]id, change its mode + * so that a malicious user cannot use it even if it's linked + * to another file + */ + struct stat stat_buf; + if (stat(fnvb.buf,&stat_buf)==0) { + if (S_ISCHR(stat_buf.st_mode) || S_ISBLK(stat_buf.st_mode)) { + chmod(fnvb.buf,0); + } + if (stat_buf.st_mode & (S_ISUID|S_ISGID)) { + chmod(fnvb.buf,stat_buf.st_mode & ~(S_ISUID|S_ISGID)); + } + } + } + if (unlink(fnvb.buf)) ohshite(_("cannot remove file `%.250s'"),fnvb.buf); } write_filelist_except(pkg,leftover,0); maintainer_script_installed(pkg, POSTRMFILE, "post-removal", @@ -267,7 +284,7 @@ void removal_bulk(struct pkginfo *pkg) { varbufaddstr(&fnvb,"/" INFODIR); infodirbaseused= fnvb.used; varbufaddc(&fnvb,0); - dsd= opendir(fnvb.buf); if (!dsd) ohshite("cannot read info directory"); + dsd= opendir(fnvb.buf); if (!dsd) ohshite(_("cannot read info directory")); push_cleanup(cu_closedir,~0, 0,0, 1,(void*)dsd); foundpostrm= 0; @@ -288,7 +305,7 @@ void removal_bulk(struct pkginfo *pkg) { varbufaddstr(&fnvb,de->d_name); varbufaddc(&fnvb,0); if (unlink(fnvb.buf)) - ohshite("unable to delete control info file `%.250s'",fnvb.buf); + ohshite(_("unable to delete control info file `%.250s'"),fnvb.buf); debug(dbg_scripts, "removal_bulk info unlinked %s",fnvb.buf); } pop_cleanup(ehflag_normaltidy); /* closedir */ @@ -303,7 +320,7 @@ void removal_bulk(struct pkginfo *pkg) { postrmfilename= pkgadminfile(pkg,POSTRMFILE); if (!lstat(postrmfilename,&stab)) foundpostrm= 1; else if (errno == ENOENT) foundpostrm= 0; - else ohshite("unable to check existence of `%.250s'",postrmfilename); + else ohshite(_("unable to check existence of `%.250s'"),postrmfilename); } @@ -318,7 +335,7 @@ void removal_bulk(struct pkginfo *pkg) { } else if (pkg->want == want_purge) { - printf("Purging configuration files for %s ...\n",pkg->name); + printf(_("Purging configuration files for %s ...\n"),pkg->name); ensure_packagefiles_available(pkg); /* We may have modified this above. */ /* We're about to remove the configuration, so remove the note @@ -362,7 +379,7 @@ void removal_bulk(struct pkginfo *pkg) { if (r == -1) continue; conffnameused= fnvb.used-1; if (unlink(fnvb.buf) && errno != ENOENT && errno != ENOTDIR) - ohshite("cannot remove old config file `%.250s' (= `%.250s')", + ohshite(_("cannot remove old config file `%.250s' (= `%.250s')"), conff->name, fnvb.buf); p= strrchr(fnvb.buf,'/'); if (!p) continue; *p= 0; @@ -377,7 +394,7 @@ void removal_bulk(struct pkginfo *pkg) { debug(dbg_conffdetail, "removal_bulk conffile no dsd %s %s", fnvb.buf, strerror(e)); errno= e; if (errno == ENOENT || errno == ENOTDIR) continue; - ohshite("cannot read config file dir `%.250s' (from `%.250s')", + ohshite(_("cannot read config file dir `%.250s' (from `%.250s')"), fnvb.buf, conff->name); } debug(dbg_conffdetail, "removal_bulk conffile cleaning dsd %s", fnvb.buf); @@ -412,7 +429,7 @@ void removal_bulk(struct pkginfo *pkg) { debug(dbg_conffdetail, "removal_bulk conffile dsd entry removing `%s'", removevb.buf); if (unlink(removevb.buf) && errno != ENOENT && errno != ENOTDIR) - ohshite("cannot remove old backup config file `%.250s' (of `%.250s')", + ohshite(_("cannot remove old backup config file `%.250s' (of `%.250s')"), removevb.buf, conff->name); } pop_cleanup(ehflag_normaltidy); /* closedir */ @@ -441,13 +458,13 @@ void removal_bulk(struct pkginfo *pkg) { varbufaddstr(&fnvb,"." LISTFILE); varbufaddc(&fnvb,0); debug(dbg_general, "removal_bulk purge done, removing list `%s'",fnvb.buf); - if (unlink(fnvb.buf) && errno != ENOENT) ohshite("cannot remove old files list"); + if (unlink(fnvb.buf) && errno != ENOENT) ohshite(_("cannot remove old files list")); fnvb.used= pkgnameused; varbufaddstr(&fnvb,"." POSTRMFILE); varbufaddc(&fnvb,0); debug(dbg_general, "removal_bulk purge done, removing postrm `%s'",fnvb.buf); - if (unlink(fnvb.buf) && errno != ENOENT) ohshite("can't remove old postrm script"); + if (unlink(fnvb.buf) && errno != ENOENT) ohshite(_("can't remove old postrm script")); pkg->status= stat_notinstalled; diff --git a/main/select.c b/main/select.c index 0f94c6098..4d6a80dab 100644 --- a/main/select.c +++ b/main/select.c @@ -25,10 +25,9 @@ #include <fnmatch.h> #include <ctype.h> -#include "config.h" -#include "dpkg.h" -#include "dpkg-db.h" -#include "myopt.h" +#include <config.h> +#include <dpkg.h> +#include <dpkg-db.h> #include "filesdb.h" #include "main.h" @@ -78,7 +77,7 @@ void getselections(const char *const *argv) { getsel1package(pkg); found++; } if (!found) - fprintf(stderr,"No packages found matching %s.\n",thisarg); + fprintf(stderr,_("No packages found matching %s.\n"),thisarg); } } if (ferror(stdout)) werr("stdout"); @@ -93,7 +92,7 @@ void setselections(const char *const *argv) { struct varbuf namevb; struct varbuf selvb; - if (*argv) badusage("--set-selections does not take any argument"); + if (*argv) badusage(_("--set-selections does not take any argument")); modstatdb_init(admindir,msdbrw_write); @@ -112,13 +111,13 @@ void setselections(const char *const *argv) { while (!isspace(c)) { varbufaddc(&namevb,c); c= getchar(); - if (c == EOF) ohshit("unexpected eof in package name at line %d",lno); - if (c == '\n') ohshit("unexpected end of line in package name at line %d",lno); + if (c == EOF) ohshit(_("unexpected eof in package name at line %d"),lno); + if (c == '\n') ohshit(_("unexpected end of line in package name at line %d"),lno); } while (c != EOF && isspace(c)) { c= getchar(); - if (c == EOF) ohshit("unexpected eof after package name at line %d",lno); - if (c == '\n') ohshit("unexpected end of line after package name at line %d",lno); + if (c == EOF) ohshit(_("unexpected eof after package name at line %d"),lno); + if (c == '\n') ohshit(_("unexpected end of line after package name at line %d"),lno); } while (c != EOF && !isspace(c)) { varbufaddc(&selvb,c); @@ -127,20 +126,20 @@ void setselections(const char *const *argv) { while (c != EOF && c != '\n') { c= getchar(); if (!isspace(c)) - ohshit("unexpected data after package and selection at line %d",lno); + ohshit(_("unexpected data after package and selection at line %d"),lno); } varbufaddc(&namevb,0); varbufaddc(&selvb,0); e= illegal_packagename(namevb.buf,0); - if (e) ohshit("illegal package name at line %d: %.250s",lno,e); + if (e) ohshit(_("illegal package name at line %d: %.250s"),lno,e); for (nvp=wantinfos; nvp->name && strcmp(nvp->name,selvb.buf); nvp++); - if (!nvp->name) ohshit("unknown wanted status at line %d: %.250s",lno,selvb.buf); + if (!nvp->name) ohshit(_("unknown wanted status at line %d: %.250s"),lno,selvb.buf); pkg= findpackage(namevb.buf); pkg->want= nvp->value; if (c == EOF) break; lno++; } - if (ferror(stdin)) ohshite("read error on standard input"); + if (ferror(stdin)) ohshite(_("read error on standard input")); modstatdb_shutdown(); varbufreset(&namevb); varbufreset(&selvb); diff --git a/main/update.c b/main/update.c index ad4b4faf6..797d519ff 100644 --- a/main/update.c +++ b/main/update.c @@ -19,6 +19,7 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +#include <errno.h> #include <stdio.h> #include <string.h> #include <stdlib.h> @@ -26,10 +27,10 @@ #include <assert.h> #include <unistd.h> -#include "config.h" -#include "dpkg.h" -#include "dpkg-db.h" -#include "myopt.h" +#include <config.h> +#include <dpkg.h> +#include <dpkg-db.h> +#include <myopt.h> #include "main.h" @@ -40,11 +41,11 @@ void updateavailable(const char *const *argv) { switch (cipaction->arg) { case act_avclear: - if (sourcefile) badusage("--%s takes no arguments",cipaction->olong); + if (sourcefile) badusage(_("--%s takes no arguments"),cipaction->olong); break; case act_avreplace: case act_avmerge: if (!sourcefile || argv[1]) - badusage("--%s needs exactly one Packages file argument",cipaction->olong); + badusage(_("--%s needs exactly one Packages file argument"),cipaction->olong); break; default: internerr("bad cipaction->arg in updateavailable"); @@ -53,19 +54,19 @@ void updateavailable(const char *const *argv) { if (!f_noact) { if (access(admindir,W_OK)) { if (errno != EACCES) - ohshite("unable to access dpkg status area for bulk available update"); + ohshite(_("unable to access dpkg status area for bulk available update")); else - ohshit("bulk available update requires write access to dpkg status area"); + ohshit(_("bulk available update requires write access to dpkg status area")); } lockdatabase(admindir); } switch (cipaction->arg) { case act_avreplace: - printf("Replacing available packages info, using %s.\n",sourcefile); + printf(_("Replacing available packages info, using %s.\n"),sourcefile); break; case act_avmerge: - printf("Updating available packages info, using %s.\n",sourcefile); + printf(_("Updating available packages info, using %s.\n"),sourcefile); break; case act_avclear: break; @@ -89,7 +90,7 @@ void updateavailable(const char *const *argv) { } if (cipaction->arg != act_avclear) - printf("Information about %d package(s) was updated.\n",count); + printf(_("Information about %d package(s) was updated.\n"),count); } void forgetold(const char *const *argv) { @@ -97,7 +98,7 @@ void forgetold(const char *const *argv) { struct pkginfo *pkg; enum pkgwant oldwant; - if (*argv) badusage("--forget-old-unavail takes no arguments"); + if (*argv) badusage(_("--forget-old-unavail takes no arguments")); modstatdb_init(admindir, f_noact ? msdbrw_readonly : msdbrw_write); diff --git a/md5sum/.cvsignore b/md5sum/.cvsignore new file mode 100644 index 000000000..70845e08e --- /dev/null +++ b/md5sum/.cvsignore @@ -0,0 +1 @@ +Makefile.in diff --git a/md5sum/Makefile.am b/md5sum/Makefile.am new file mode 100644 index 000000000..db6e59240 --- /dev/null +++ b/md5sum/Makefile.am @@ -0,0 +1,33 @@ +## Process this file with automake to produce a Makefile.in + +AUTOMAKE_OPTIONS = 1.1 foreign + +## Directory definitions + +localedir = $(datadir)/locale + +## Various options + +CFLAGS = @CFLAGS@ @CWARNS@ -g $(XCFLAGS) -DLOCALEDIR=\"$(localedir)\" +OPTCFLAGS = @CFLAGS@ @OPTCFLAGS@ @CWARNS@ -g $(XCFLAGS) -DLOCALEDIR=\"$(localedir)\" +LDFLAGS = @LDFLAGS@ $(XLDFLAGS) +LIBS = @INTLLIBS@ @LIBS@ $(XLIBS) + +CXXFLAGS = @CXXFLAGS@ @CWARNS@ -g $(XCXXFLAGS) -DLOCALEDIR=\"$(localedir)\" +OPTCXXFLAGS = @CXXFLAGS@ @OPTCFLAGS@ @CWARNS@ -g $(XCXXFLAGS) -DLOCALEDIR=\"$(localedir)\" + +DEFS = -I$(top_srcdir)/include -I$(top_srcdir) -I$(srcdir) \ + -I$(top_builddir) -I$(top_builddir)/include -I. \ + -I$(top_srcdir)/intl -I$(top_builddir)/intl @DEFS@ + +MAINTAINERCLEANFILES = $(srcdir)/Makefile.in + +## Automake variables + +bin_PROGRAMS = md5sum +man_MANS = md5sum.1 + +md5sum_SOURCES = md5.c md5sum.c md5.h +EXTRA_DIST = md5sum.1 + +## End of file. diff --git a/md5sum/Makefile.in b/md5sum/Makefile.in deleted file mode 100644 index 0cd7f852c..000000000 --- a/md5sum/Makefile.in +++ /dev/null @@ -1,44 +0,0 @@ -# (-*- Fundamental -*-) - -srcdir = @srcdir@ -VPATH = @srcdir@ - -prefix = @prefix@ -exec_prefix = $(prefix) -bindir = $(exec_prefix)/bin -mandir = $(prefix)/man/man1 - -SRC = md5.c md5sum.c -OBJ = md5.o md5sum.o -HDR = md5.h - -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ - -CC = @CC@ - -CFLAGS = @CFLAGS@ $(XCFLAGS) -LDFLAGS = $(XLDFLAGS) -LIBS = -L../lib $(XLIBS) -ALL_CFLAGS = -I../lib -I.. @DEFS@ $(CFLAGS) - -.SUFFIXES: .c .o - -.c.o: - $(CC) $(ALL_CFLAGS) -c $< - -all: md5sum - -md5sum: md5.o md5sum.o - $(CC) $(LDFLAGS) -o md5sum md5.o md5sum.o - -clean: - rm -f *.o core md5sum - -distclean: clean - rm -f Makefile *.orig *~ *.~* ./#*# - -install: all - $(INSTALL_PROGRAM) -s md5sum $(bindir)/md5sum - $(INSTALL_DATA) md5sum.1 $(mandir)/md5sum.1 diff --git a/md5sum/md5sum.c b/md5sum/md5sum.c index cec2be761..f5a0fdf85 100644 --- a/md5sum/md5sum.c +++ b/md5sum/md5sum.c @@ -9,13 +9,36 @@ * Written March 1993 by Branko Lankester * Modified June 1993 by Colin Plumb for altered md5.c. * Modified Feburary 1995 by Ian Jackson for use with Colin Plumb's md5.c. + * Hacked (modified is too nice a word) January 1997 by Galen Hazelwood + * to support GNU gettext. * This file is in the public domain. */ #include <stdio.h> #include <string.h> +#include <getopt.h> #include "config.h" #include "md5.h" +/* Take care of NLS matters. */ + +#if HAVE_LOCALE_H +# include <locale.h> +#endif +#if !HAVE_SETLOCALE +# define setlocale(Category, Locale) /* empty */ +#endif + +#if ENABLE_NLS +# include <libintl.h> +# define _(Text) gettext (Text) +#else +# undef bindtextdomain +# define bindtextdomain(Domain, Directory) /* empty */ +# undef textdomain +# define textdomain(Domain) /* empty */ +# define _(Text) Text +#endif + #ifdef UNIX #define FOPRTXT "r" #define FOPRBIN "r" @@ -32,10 +55,12 @@ extern char *optarg; extern int optind; -void usage(); -void print_digest(); +void usage(void); +void print_digest(unsigned char *p); int mdfile(FILE *fp, unsigned char *digest); int do_check(FILE *chkf); +int hex_digit(int c); +int get_md5_line(FILE *fp, unsigned char *digest, char *file); char *progname; int verbose = 0; @@ -46,9 +71,13 @@ main(int argc, char **argv) { int opt, rc = 0; int check = 0; - FILE *fp; + FILE *fp = NULL; unsigned char digest[16]; + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, LOCALEDIR); + textdomain(PACKAGE); + progname = *argv; while ((opt = getopt(argc, argv, "cbvp:h")) != EOF) { switch (opt) { @@ -74,7 +103,7 @@ main(int argc, char **argv) } if (argc == 0) { if (mdfile(stdin, digest)) { - fprintf(stderr, "%s: read error on stdin\n", progname); + fprintf(stderr, _("%s: read error on stdin\n"), progname); exit(2); } print_digest(digest); @@ -92,7 +121,7 @@ main(int argc, char **argv) continue; } if (mdfile(fp, digest)) { - fprintf(stderr, "%s: error reading %s\n", progname, *argv); + fprintf(stderr, _("%s: error reading %s\n"), progname, *argv); rc = 2; } else { print_digest(digest); @@ -106,13 +135,13 @@ main(int argc, char **argv) void usage() { - fprintf(stderr, "usage: md5sum [-bv] [-c [file]] | [file...]\n"); - fprintf(stderr, "Generates or checks MD5 Message Digests\n"); - fprintf(stderr, " -c check message digests (default is generate)\n"); - fprintf(stderr, " -v verbose, print file names when checking\n"); - fprintf(stderr, " -b read files in binary mode\n"); - fprintf(stderr, "The input for -c should be the list of message digests and file names\n"); - fprintf(stderr, "that is printed on stdout by this program when it generates digests.\n"); + fputs(_("usage: md5sum [-bv] [-c [file]] | [file...]\n\ +Generates or checks MD5 Message Digests\n\ + -c check message digests (default is generate)\n\ + -v verbose, print file names when checking\n\ + -b read files in binary mode\n\ +The input for -c should be the list of message digests and file names\n\ +that is printed on stdout by this program when it generates digests.\n"), stderr); exit(2); } @@ -179,7 +208,7 @@ get_md5_line(FILE *fp, unsigned char *digest, char *file) else if (*p == '*') rc = 2; else { - fprintf(stderr, "%s: unrecognized line: %s", progname, buf); + fprintf(stderr, _("%s: unrecognized line: %s"), progname, buf); return 0; } ++p; @@ -213,12 +242,12 @@ do_check(FILE *chkf) else fp = fopen(filename, FOPRTXT); if (fp == NULL) { - fprintf(stderr, "%s: can't open %s\n", progname, filename); + fprintf(stderr, _("%s: can't open %s\n"), progname, filename); ex = 2; continue; } if (mdfile(fp, file_digest)) { - fprintf(stderr, "%s: error reading %s\n", progname, filename); + fprintf(stderr, _("%s: error reading %s\n"), progname, filename); ex = 2; fclose(fp); continue; @@ -226,21 +255,22 @@ do_check(FILE *chkf) fclose(fp); if (memcmp(chk_digest, file_digest, 16) != 0) { if (verbose) - fprintf(stderr, "FAILED\n"); + fprintf(stderr, _("FAILED\n")); else - fprintf(stderr, "%s: MD5 check failed for '%s'\n", progname, filename); + fprintf(stderr, _("%s: MD5 check failed for '%s'\n"), progname, filename); ++failed; } else if (verbose) - fprintf(stderr, "OK\n"); + fprintf(stderr, _("OK\n")); ++checked; } if (verbose && failed) - fprintf(stderr, "%s: %d of %d file(s) failed MD5 check\n", progname, failed, checked); + fprintf(stderr, _("%s: %d of %d file(s) failed MD5 check\n"), progname, failed, checked); if (!checked) { - fprintf(stderr, "%s: no files checked\n", progname); + fprintf(stderr, _("%s: no files checked\n"), progname); return 3; } if (!ex && failed) ex = 1; return ex; } + diff --git a/methods/.cvsignore b/methods/.cvsignore new file mode 100644 index 000000000..70845e08e --- /dev/null +++ b/methods/.cvsignore @@ -0,0 +1 @@ +Makefile.in diff --git a/methods/Makefile.am b/methods/Makefile.am new file mode 100644 index 000000000..f338c4df9 --- /dev/null +++ b/methods/Makefile.am @@ -0,0 +1,87 @@ +## Process this file with automake to produce a Makefile.in + +AUTOMAKE_OPTIONS = 1.1 foreign + +## Directory definitions + +pkglibdir = $(libdir)/@PACKAGE@ +pkglocalstatedir = $(sharedstatedir)/@PACKAGE@ + +methodsdir = $(pkglibdir)/methods +methodsdatadir = $(pkglocalstatedir)/methods +methodsmnt = $(methodsdatadir)/mnt + +## Automake variables + +MSCRIPTS = setup update install +METHODS = disk floppy +DESCS = disk.desc.harddisk disk.desc.mounted disk.desc.cdrom \ + disk.desc.nfs floppy.desc.floppy + +MAINTAINERCLEANFILES = $(srcdir)/Makefile.in + +## Rules + +.PHONY: install-data-local install-methods-data install-descs-data \ + install-exec-local dist-hook uninstall-local + +install-data-local: install-methods-data install-descs-data + $(mkinstalldirs) $(methodsmnt) + +install-methods-data: + set -e; for m in $(METHODS); do \ + $(mkinstalldirs) $(methodsdir)/$$m $(methodsdatadir)/$$m; \ + $(INSTALL_DATA) $(srcdir)/$$m.names $(methodsdir)/$$m/names; \ + done + +install-descs-data: + set -e; for x in $(DESCS); do \ + d=`echo $$x | sed 's:.*/\([^/]*\)$$:\1:; s:\.:/:'`; \ + $(INSTALL_DATA) $(srcdir)/$$x $(methodsdir)/$$d; \ + done + +install-exec-local: + set -e; for m in $(METHODS); do \ + $(mkinstalldirs) $(methodsdir)/$$m $(methodsdatadir)/$$m; \ + done + set -e; for m in $(METHODS); do \ + for s in $(MSCRIPTS); do \ + $(INSTALL_PROGRAM) $(srcdir)/$$m.$$s $(methodsdir)/$$m/$$s; \ + done; \ + done + +uninstall-local: + -for m in $(METHODS); do \ + rm -f $(methodsdir)/$$m/names; \ + [ -e $(methodsdir)/$$m ] && rmdir $(methodsdir)/$$m; \ + done + -for x in $(DESCS); do \ + d=`echo $$x | sed 's:\.:/:'`; \ + dir=`echo $$d | sed 's:\(.*\)/[^/]*$$:\1:'`; \ + rm -f $(methodsdir)/$$d; \ + [ -e $$dir ] && rmdir $$dir; \ + done + -for m in $(METHODS); do \ + for s in $(MSCRIPTS); do \ + rm -f $(methodsdir)/$$m/$$s; \ + done; \ + [ -e $(methodsdir)/$$m ] && rmdir $(methodsdir)/$$m; \ + [ -e $(methodsdatadir)/$$m ] && rmdir $(methodsdatadir)/$$m; \ + [ -e $(methodsmnt)/$$m ] && rmdir $(methodsmnt)/$$m; \ + done + -[ -e $(methodsmnt) ] && rmdir $(methodsmnt) + -[ -e $(methodsdir) ] && rmdir $(methodsdir) + -[ -e $(methodsdatadir) ] && rmdir $(methodsdatadir) + +dist-hook: + set -e; for m in $(METHODS); do \ + cp -p $(srcdir)/$$m.names $(distdir)/; \ + for s in $(MSCRIPTS); do \ + cp -p $(srcdir)/$$m.$$s $(distdir)/; \ + done; \ + done + for d in $(DESCS); do \ + cp -p $(srcdir)/$$d $(distdir)/; \ + done + +## End of file. diff --git a/methods/Makefile.in b/methods/Makefile.in deleted file mode 100644 index 47b5d835b..000000000 --- a/methods/Makefile.in +++ /dev/null @@ -1,60 +0,0 @@ -# Copyright (C) 1994 Ian Murdock <imurdock@debian.org> -# Copyright (C) 1994,1995 Ian Jackson <ijackson@nyx.cs.du.edu> -# -# This is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as -# published by the Free Software Foundation; either version 2, -# or (at your option) any later version. -# -# This is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public -# License along with dpkg; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -srcdir = @srcdir@ -VPATH = @srcdir@ - -prefix = @prefix@ -libdir = $(prefix)/lib -dpkglibdir = $(libdir)/dpkg -methodsdir = $(dpkglibdir)/methods -datadir = /var/lib/dpkg -methodsdatadir = $(datadir)/methods -methodsmnt = $(datadir)/methods/mnt - -SCRIPTS = setup update install -METHODS = disk floppy -DESCS = disk.desc.harddisk disk.desc.mounted disk.desc.cdrom \ - disk.desc.nfs floppy.desc.floppy - -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ - -all: - -install: - set -e; for m in $(METHODS) ; do \ - d=$(methodsdir)/$$m ; \ - test -d $$d || mkdir $$d ; \ - e=$(methodsdatadir)/$$m ; \ - test -d $$e || mkdir $$e ; \ - $(INSTALL_DATA) $$m.names $$d/names ; \ - for s in $(SCRIPTS) ; do \ - $(INSTALL_PROGRAM) $$m.$$s $$d/$$s ; \ - done ; \ - done - set -e; for x in $(DESCS) ; do \ - d=`echo $$x | sed -e 's:\.:/:'` ; \ - $(INSTALL_DATA) $$x $(methodsdir)/$$d ; \ - done - -clean: - rm -f core - -distclean: clean - rm -f Makefile *.orig *~ *.~* ./#*# diff --git a/methods/disk.install b/methods/disk.install index f23620e74..f47d12979 100644 --- a/methods/disk.install +++ b/methods/disk.install @@ -107,7 +107,7 @@ package by using `dpkg --install --auto-deconfigure'\'' by hand. ' -- "$p_mountpoint$p_main_binary" "$predep" done -for f in main ctb nf lcl +for f in main ctb nf nus lcl do eval 'this_binary=$p_'$f'_binary' if [ -z "$this_binary" ]; then continue; fi diff --git a/methods/disk.setup b/methods/disk.setup index 2ba78cedc..8bbb5cfe2 100644 --- a/methods/disk.setup +++ b/methods/disk.setup @@ -129,11 +129,12 @@ If you make a mistake, use the interrupt key ($intrkey) to abort. " # State variables, `best first' -# {main,ctb,nf,lcl}_{packages,binary} +# {main,ctb,nf,nus,lcl}_{packages,binary} # Empty before we've found them or if they're not available, # set to the relevant bit under mountpoint otherwise. # hierbase -# A directory containing a Debian FTP site mirror tree. +# A directory containing a Debian FTP site mirror tree for ONE distribution. +# eg /pub/debian/dists/stable # mountpoint # The mountpoint for the filesystem containing the stuff # empty or unset if we don't know yet, or if we haven't mounted anything; @@ -145,14 +146,12 @@ If you make a mistake, use the interrupt key ($intrkey) to abort. # defaultdevice # The default block device to mount. -p_usedevel=no if [ -f shvar.$option ] then . ./shvar.$option defaultdevice="$p_blockdev" defaultnfsserver="$p_nfsserver" defaultnfsrempath="$p_nfsrempath" - usedevel="$p_usedevel" fi if [ $option = cdrom ] @@ -261,7 +260,7 @@ then do echo -n " What is the pathname on the NFS server of the filesystem with -the Debian files ? [$defaultnfsrempath] " +the Debian files? [$defaultnfsrempath] " read response if [ -z "$response" -a -n "$defaultnfsrempath" ] then @@ -337,7 +336,8 @@ do then echo \ "I would like to know where on the CD-ROM the top level of the Debian -distribution is - this will usually contain the Packages-Master file. +distribution is (eg. 'dists/stable') - this directory usually contains the +Packages-Master file. If the CD-ROM is badly organised and doesn't have a straightforward copy of the distribution you may answer \`none' and we'll go through the parts @@ -347,15 +347,18 @@ I need individually." "In order to make it easy for me to find the relevant files I'd ideally like to install from a straightforward copy of the Debian distribution. To use this I'll need to know where the top level of that copy of the -distribution is - this directory usually contains the Packages-Master file. +distribution is (eg. 'debian/dists/stable') - this directory usually +contains the Packages-Master file. If you do not have a straightforward copy of the distribution available just answer \`none' and we'll go through the parts I need individually." fi defhierbase=none +# maybe ask for debian/dists and then show and ask for available dists +# eg. {stable,frozen,unstable,bo,hamm,slink} if [ -n "$p_hierbase" ] then - if [ -d "$mountpoint/$p_hierbase/stable/binary-i386" ] + if [ -d "$mountpoint/$p_hierbase/main/binary-$iarch" ] then echo " Last time you said \`$p_hierbase', and that looks plausible." @@ -363,14 +366,22 @@ Last time you said \`$p_hierbase', and that looks plausible." else echo " Last time you said \`$p_hierbase', but that doesn't look plausible, -since \`$p_hierbase/stable/binary' doesn't seem to exist." +since \`$p_hierbase/main/binary-$iarch' doesn't seem to exist." fi fi - if [ none = "$defhierbase" -a -d "$mountpoint/debian/stable/binary-i386" ] + if [ none = "$defhierbase" ] then - echo " -\`/debian' exists and looks plausible, so that's the default." - defhierbase=/debian + if [ -d "$mountpoint/debian/dists/stable/main/binary-$iarch" ] + then + echo " +\`/debian/dists/stable' exists and looks plausible, so that's the default." + defhierbase=/debian/dists/stable + elif [ -d "$mountpoint/dists/stable/main/binary-$iarch" ] + then + echo " +\`/dists/stable' exists and looks plausible, so that's the default." + defhierbase=/dists/stable + fi fi echo -n \ "Distribution top level ? [$defhierbase] " @@ -383,38 +394,16 @@ since \`$p_hierbase/stable/binary' doesn't seem to exist." then hierbase="" break - elif [ -d "$mountpoint/$response/stable/binary-i386" ] + elif [ -d "$mountpoint/$response/main/binary-$iarch" ] then - hierbase="`echo \"$response\" | sed -e 's:/$::; s:^/*:/:'`" + hierbase="`echo \"$response\" | sed -e 's:/*$::; s:^/*:/:'`" break fi echo \ -"$response/stable/binary-i386 does not exist. +"$response/main/binary-$iarch does not exist. " done -whichmain=stable -if [ -n "$hierbase" ] -then - if [ -d "$mountpoint/$hierbase/unstable/binary-$iarch" ] - then - echo \ -' -Both a stable released distribution and a work-in-progress -development tree are available for installation. Would you like to -use the unreleased development tree (this is only recommended for -experts who like to live dangerously and want to help with testing) ?' - yesno "$p_usedevel" 'Use unreleased development distribution ?' - usedevel="$yesno" - if [ "$usedevel" = yes ] - then - whichmain=development - fi - else - usedevel=no - fi - echo -fi case "$hierbase" in /* ) ;; @@ -424,13 +413,16 @@ esac check_binary () { # args: area-in-messages directory - if ! [ -d "$mountpoint$2" ] + # eg: main "$hierbase/main/binary-$iarch" + # checks wether $2 contains *.deb + if ! [ -d "$mountpoint$2/" ] then echo "\`$2' does not exist." return fi - if ! find "$mountpoint$2" -follow -name '*.deb' -print \ - 2>/dev/null | head -1 | grep . >/dev/null + + if ! ( find "$mountpoint$2/" -follow -name '*.deb' -print \ + | head -1 ) 2>/dev/null | grep . >/dev/null then echo "\`$2' does not contain any *.deb packages. Hmmpf." return @@ -442,12 +434,16 @@ check_binary () { find_area () { # args: area-in-messages area-in-vars subdirectory-in-hier # last-time-binary last-time-packages + # eg: main main main + # "$p_main_binary" "$p_main_packages" + this_binary='' this_packages='' if [ -n "$hierbase" ] then check_binary $1 "$hierbase/$3/binary-$iarch" fi + if [ $option = cdrom -a $2 = nf -a -z "$this_binary" ] then echo ' @@ -457,13 +453,18 @@ This is because these programs have copyrights that prevent distribution for profit on a CD-ROM - ie they are not free software. If you wish to install these programs you'\''ll have to get them from an alternative source.' + elif [ $2 = lcl -a -z "$this_binary" ] + then + echo ' +Note: By default there is no `local'\'' directory. It is intended for +packages you made yourself.' fi while [ -z "$this_binary" ] do defaultbinary="$4" echo " Which directory contains the *.deb packages from the $1 distribution -area (this directory is named \`$3/binary' on the distribution site) ? +area (this directory is named \`$3/binary-$iarch' on the distribution site) ? Say \`none' if this area is not available." if [ $2 != main -a -z "$defaultbinary" ] then @@ -507,7 +508,7 @@ installations, and is very useful for upgrades. If you overlooked it when downloading you should do get it now and return to this installation procedure when you have done so: you will find one Packages file and one Packages.gz file -- either will do -- -in the \`binary' subdirectory of each area on the FTP sites and +in the \`binary-$iarch' subdirectory of each area on the FTP sites and CD-ROMs. Alternatively (and this will be rather slow) I can scan the packages in the distribution area - say \`scan' if you want me to do so. @@ -535,9 +536,10 @@ Where is the _$1_ \`Packages' file (if none is available, say \`none') eval $2'_packages="$this_packages"' } -find_area main main "$whichmain" "$p_main_binary" "$p_main_packages" +find_area main main main "$p_main_binary" "$p_main_packages" find_area contrib ctb contrib "$p_ctb_binary" "$p_ctb_packages" find_area non-free nf non-free "$p_nf_binary" "$p_nf_packages" +find_area non-US nus non-US "$p_nus_binary" "$p_nus_packages" find_area local lcl local "$p_lcl_binary" "$p_lcl_packages" echo -n ' @@ -553,16 +555,20 @@ outputparam p_nfsserver "$nfsserver" outputparam p_nfsrempath "$nfsrempath" outputparam p_nfs "$nfs" outputparam p_hierbase "$hierbase" -outputparam p_usedevel "$usedevel" + outputparam p_main_packages "$main_packages" outputparam p_main_binary "$main_binary" outputparam p_ctb_packages "$ctb_packages" outputparam p_ctb_binary "$ctb_binary" outputparam p_nf_packages "$nf_packages" outputparam p_nf_binary "$nf_binary" +outputparam p_nus_packages "$nus_packages" +outputparam p_nus_binary "$nus_binary" outputparam p_lcl_packages "$lcl_packages" outputparam p_lcl_binary "$lcl_binary" mv shvar.$option.new shvar.$option xit=0 + + diff --git a/methods/disk.update b/methods/disk.update index def5f37a3..932ee30b0 100644 --- a/methods/disk.update +++ b/methods/disk.update @@ -10,7 +10,8 @@ cd "$vardir/methods/disk" . ./shvar.$option if [ -z "$p_main_packages" -a -z "$p_ctb_packages" -a \ - -z "$p_nf_packages" -a -z "$p_lcl_packages " ] + -z "$p_nf_packages" -a -z "$p_nus_packages " -a \ + -z "$p_lcl_packages" ] then echo ' No Packages files available, cannot update available packages list. @@ -21,7 +22,7 @@ fi xit=1 trap ' - rm -f packages-{main,ctb,nf,lcl} + rm -f packages-{main,ctb,nf,nus,lcl} if [ -n "$umount" ] then umount "$umount" >/dev/null 2>&1 @@ -43,7 +44,7 @@ fi updatetype=update -for f in main ctb nf lcl +for f in main ctb nf nus lcl do eval 'this_packages=$p_'$f'_packages' case "$this_packages" in @@ -88,3 +89,4 @@ echo -n 'Update OK. Hit RETURN. ' read response xit=0 + diff --git a/methods/hd.setup b/methods/hd.setup index a238c5292..a238c5292 100755..100644 --- a/methods/hd.setup +++ b/methods/hd.setup diff --git a/methods/hd.unpack b/methods/hd.unpack index ad22c6b0b..ad22c6b0b 100755..100644 --- a/methods/hd.unpack +++ b/methods/hd.unpack diff --git a/methods/hd.update b/methods/hd.update index 98bf56b35..98bf56b35 100755..100644 --- a/methods/hd.update +++ b/methods/hd.update diff --git a/mkinstalldirs b/mkinstalldirs deleted file mode 100755 index 0e2937731..000000000 --- a/mkinstalldirs +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/sh -# Make directory hierarchy. -# Written by Noah Friedman <friedman@prep.ai.mit.edu> -# Public domain. - -defaultIFS=' -' -IFS="${IFS-${defaultIFS}}" - -errstatus=0 - -for file in ${1+"$@"} ; do - oIFS="${IFS}" - # Some sh's can't handle IFS=/ for some reason. - IFS='%' - set - `echo ${file} | sed -e 's@/@%@g' -e 's@^%@/@'` - IFS="${oIFS}" - - pathcomp='' - - for d in ${1+"$@"} ; do - pathcomp="${pathcomp}${d}" - - if test ! -d "${pathcomp}"; then - echo "mkdir $pathcomp" 1>&2 - mkdir "${pathcomp}" || errstatus=$? - fi - - pathcomp="${pathcomp}/" - done -done - -exit $errstatus - -# eof diff --git a/po/.cvsignore b/po/.cvsignore new file mode 100644 index 000000000..6d0f3f91a --- /dev/null +++ b/po/.cvsignore @@ -0,0 +1,6 @@ +Makefile.in +cat-id-tbl.c +dpkg.pot +en.fmo +fr.gmo +stamp-cat-id diff --git a/po/ChangeLog b/po/ChangeLog new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/po/ChangeLog diff --git a/po/POTFILES b/po/POTFILES new file mode 100644 index 000000000..b0bdaeda8 --- /dev/null +++ b/po/POTFILES @@ -0,0 +1,37 @@ + ../lib/compat.c \ + ../lib/database.c \ + ../lib/dbmodify.c \ + ../lib/dump.c \ + ../lib/ehandle.c \ + ../lib/fields.c \ + ../lib/lock.c \ + ../lib/mlib.c \ + ../lib/myopt.c \ + ../lib/parse.c \ + ../lib/parsehelp.c \ + ../lib/showcright.c \ + ../lib/varbuf.c \ + ../dpkg/archives.c \ + ../dpkg/cleanup.c \ + ../dpkg/configure.c \ + ../dpkg/depcon.c \ + ../dpkg/enquiry.c \ + ../dpkg/errors.c \ + ../dpkg/filesdb.c \ + ../dpkg/help.c \ + ../dpkg/main.c \ + ../dpkg/packages.c \ + ../dpkg/processarc.c \ + ../dpkg/remove.c \ + ../dpkg/select.c \ + ../dpkg/update.c \ + ../dpkg-deb/build.c \ + ../dpkg-deb/extract.c \ + ../dpkg-deb/info.c \ + ../dpkg-deb/main.c \ + ../split/info.c \ + ../split/join.c \ + ../split/main.c \ + ../split/queue.c \ + ../split/split.c \ + ../md5sum/md5sum.c diff --git a/po/POTFILES.in b/po/POTFILES.in new file mode 100644 index 000000000..e691686bd --- /dev/null +++ b/po/POTFILES.in @@ -0,0 +1,43 @@ +# This is the list of all source files with translatable strings. + +lib/compat.c +lib/database.c +lib/dbmodify.c +lib/dump.c +lib/ehandle.c +lib/fields.c +lib/lock.c +lib/mlib.c +lib/myopt.c +lib/parse.c +lib/parsehelp.c +lib/showcright.c +lib/varbuf.c + +main/archives.c +main/cleanup.c +main/configure.c +main/depcon.c +main/enquiry.c +main/errors.c +main/filesdb.c +main/help.c +main/main.c +main/packages.c +main/processarc.c +main/remove.c +main/select.c +main/update.c + +dpkg-deb/build.c +dpkg-deb/extract.c +dpkg-deb/info.c +dpkg-deb/main.c + +split/info.c +split/join.c +split/main.c +split/queue.c +split/split.c + +md5sum/md5sum.c diff --git a/po/en.po b/po/en.po new file mode 100644 index 000000000..a4d3fb599 --- /dev/null +++ b/po/en.po @@ -0,0 +1,3539 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR Free Software Foundation, Inc. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"POT-Creation-Date: 1998-11-01 17:14+0000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: ENCODING\n" + +#: lib/compat.c:46 +msgid "unable to open tmpfile for vsnprintf" +msgstr "unable to open tmpfile for vsnprintf" + +#: lib/compat.c:48 +msgid "unable to rewind at start of vsnprintf" +msgstr "unable to rewind at start of vsnprintf" + +#: lib/compat.c:49 +msgid "unable to truncate in vsnprintf" +msgstr "unable to truncate in vsnprintf" + +#: lib/compat.c:51 +msgid "write error in vsnprintf" +msgstr "write error in vsnprintf" + +#: lib/compat.c:52 +msgid "unable to flush in vsnprintf" +msgstr "unable to flush in vsnprintf" + +#: lib/compat.c:53 +msgid "unable to stat in vsnprintf" +msgstr "unable to stat in vsnprintf" + +#: lib/compat.c:54 +msgid "unable to rewind in vsnprintf" +msgstr "unable to rewind in vsnprintf" + +#: lib/compat.c:62 +msgid "read error in vsnprintf truncated" +msgstr "read error in vsnprintf truncated" + +#: lib/compat.c:75 +#, c-format +msgid "System error no.%d" +msgstr "System error no.%d" + +#: lib/compat.c:85 +#, c-format +msgid "Signal no.%d" +msgstr "Signal no.%d" + +#: lib/database.c:236 +msgid "failed write during hashreport" +msgstr "failed write during hashreport" + +#: lib/dbmodify.c:57 +#, c-format +msgid "" +"updates directory contains file `%.250s' whose name is too long (length=%d, " +"max=%d)" +msgstr "" +"updates directory contains file `%.250s' whose name is too long (length=%d, " +"max=%d)" + +#: lib/dbmodify.c:61 +#, c-format +msgid "" +"updates directory contains files with different length names (both %d and %d)" +msgstr "" +"updates directory contains files with different length names (both %d and %d)" + +#: lib/dbmodify.c:75 +#, c-format +msgid "cannot scan updates directory `%.255s'" +msgstr "cannot scan updates directory `%.255s'" + +#: lib/dbmodify.c:91 +#, c-format +msgid "failed to remove incorporated update file %.255s" +msgstr "failed to remove incorporated update file %.255s" + +#: lib/dbmodify.c:108 +#, c-format +msgid "unable to create %.250s" +msgstr "unable to create %.250s" + +#: lib/dbmodify.c:111 +#, c-format +msgid "unable to fill %.250s with padding" +msgstr "unable to fill %.250s with padding" + +#: lib/dbmodify.c:113 +#, c-format +msgid "unable flush %.250s after padding" +msgstr "unable flush %.250s after padding" + +#: lib/dbmodify.c:115 +#, c-format +msgid "unable seek to start of %.250s after padding" +msgstr "unable seek to start of %.250s after padding" + +#: lib/dbmodify.c:143 +msgid "requested operation requires superuser privilege" +msgstr "requested operation requires superuser privilege" + +#: lib/dbmodify.c:148 +msgid "unable to access dpkg status area" +msgstr "unable to access dpkg status area" + +#: lib/dbmodify.c:150 +msgid "operation requires read/write access to dpkg status area" +msgstr "operation requires read/write access to dpkg status area" + +#: lib/dbmodify.c:197 +#, c-format +msgid "failed to remove my own update file %.255s" +msgstr "failed to remove my own update file %.255s" + +#: lib/dbmodify.c:229 +#, c-format +msgid "unable to write updated status of `%.250s'" +msgstr "unable to write updated status of `%.250s'" + +#: lib/dbmodify.c:231 +#, c-format +msgid "unable to flush updated status of `%.250s'" +msgstr "unable to flush updated status of `%.250s'" + +#: lib/dbmodify.c:233 +#, c-format +msgid "unable to truncate for updated status of `%.250s'" +msgstr "unable to truncate for updated status of `%.250s'" + +#: lib/dbmodify.c:235 +#, c-format +msgid "unable to fsync updated status of `%.250s'" +msgstr "unable to fsync updated status of `%.250s'" + +#: lib/dbmodify.c:237 +#, c-format +msgid "unable to close updated status of `%.250s'" +msgstr "unable to close updated status of `%.250s'" + +#: lib/dbmodify.c:240 +#, c-format +msgid "unable to install updated status of `%.250s'" +msgstr "unable to install updated status of `%.250s'" + +#: lib/dump.c:247 +#, c-format +msgid "failed to open `%s' for writing %s information" +msgstr "failed to open `%s' for writing %s information" + +#: lib/dump.c:250 lib/parse.c:94 +msgid "unable to set buffering on status file" +msgstr "unable to set buffering on status file" + +#: lib/dump.c:261 +#, c-format +msgid "failed to write %s record about `%.50s' to `%.250s'" +msgstr "failed to write %s record about `%.50s' to `%.250s'" + +#: lib/dump.c:268 +#, c-format +msgid "failed to flush %s information to `%.250s'" +msgstr "failed to flush %s information to `%.250s'" + +#: lib/dump.c:270 +#, c-format +msgid "failed to fsync %s information to `%.250s'" +msgstr "failed to fsync %s information to `%.250s'" + +#: lib/dump.c:272 +#, c-format +msgid "failed to close `%.250s' after writing %s information" +msgstr "failed to close `%.250s' after writing %s information" + +#: lib/dump.c:276 +#, c-format +msgid "failed to link `%.250s' to `%.250s' for backup of %s info" +msgstr "failed to link `%.250s' to `%.250s' for backup of %s info" + +#: lib/dump.c:279 +#, c-format +msgid "failed to install `%.250s' as `%.250s' containing %s info" +msgstr "failed to install `%.250s' as `%.250s' containing %s info" + +#: lib/ehandle.c:80 +msgid "out of memory pushing error handler: " +msgstr "out of memory pushing error handler: " + +#: lib/ehandle.c:95 +#, c-format +msgid "" +"%s: error while cleaning up:\n" +" %s\n" +msgstr "" +"%s: error while cleaning up:\n" +" %s\n" + +#: lib/ehandle.c:110 +msgid "dpkg: too many nested errors during error recovery !!\n" +msgstr "dpkg: too many nested errors during error recovery !!\n" + +#: lib/ehandle.c:183 +msgid "out of memory for new cleanup entry with many arguments" +msgstr "out of memory for new cleanup entry with many arguments" + +#: lib/ehandle.c:270 +#, c-format +msgid "error writing `%.250s'" +msgstr "error writing `%.250s'" + +#: lib/ehandle.c:274 +#, c-format +msgid "%s:%d: internal error `%s'\n" +msgstr "%s:%d: internal error `%s'\n" + +#: lib/fields.c:47 +#, c-format +msgid "`%.*s' is not allowed for %s" +msgstr "`%.*s' is not allowed for %s" + +#: lib/fields.c:52 +#, c-format +msgid "junk after %s" +msgstr "junk after %s" + +#: lib/fields.c:62 +#, c-format +msgid "invalid package name (%.250s)" +msgstr "invalid package name (%.250s)" + +#: lib/fields.c:81 +#, c-format +msgid "empty file details field `%s'" +msgstr "empty file details field `%s'" + +#: lib/fields.c:84 +#, c-format +msgid "file details field `%s' not allowed in status file" +msgstr "file details field `%s' not allowed in status file" + +#: lib/fields.c:94 +#, c-format +msgid "too many values in file details field `%s' (compared to others)" +msgstr "too many values in file details field `%s' (compared to others)" + +#: lib/fields.c:107 +#, c-format +msgid "too few values in file details field `%s' (compared to others)" +msgstr "too few values in file details field `%s' (compared to others)" + +#: lib/fields.c:156 +msgid "value for `status' field not allowed in this context" +msgstr "value for `status' field not allowed in this context" + +#: lib/fields.c:178 +#, c-format +msgid "error in Version string `%.250s': %.250s" +msgstr "error in Version string `%.250s': %.250s" + +#: lib/fields.c:189 +msgid "obsolete `Revision' or `Package-Revision' field used" +msgstr "obsolete `Revision' or `Package-Revision' field used" + +#: lib/fields.c:207 +msgid "value for `config-version' field not allowed in this context" +msgstr "value for `config-version' field not allowed in this context" + +#: lib/fields.c:211 +#, c-format +msgid "error in Config-Version string `%.250s': %.250s" +msgstr "error in Config-Version string `%.250s': %.250s" + +#: lib/fields.c:227 +#, c-format +msgid "value for `conffiles' has line starting with non-space `%c'" +msgstr "value for `conffiles' has line starting with non-space `%c'" + +#: lib/fields.c:233 +#, c-format +msgid "value for `conffiles' has malformatted line `%.*s'" +msgstr "value for `conffiles' has malformatted line `%.*s'" + +#: lib/fields.c:239 +msgid "root or null directory is listed as a conffile" +msgstr "root or null directory is listed as a conffile" + +#: lib/fields.c:282 +#, c-format +msgid "" +"`%s' field, missing package name, or garbage where package name expected" +msgstr "" +"`%s' field, missing package name, or garbage where package name expected" + +#: lib/fields.c:285 +#, c-format +msgid "`%s' field, invalid package name `%.255s': %s" +msgstr "`%s' field, invalid package name `%.255s': %s" + +#: lib/fields.c:316 +#, c-format +msgid "" +"`%s' field, reference to `%.255s':\n" +" bad version relationship %c%c" +msgstr "" +"`%s' field, reference to `%.255s':\n" +" bad version relationship %c%c" + +#: lib/fields.c:322 +#, c-format +msgid "" +"`%s' field, reference to `%.255s':\n" +" `%c' is obsolete, use `%c=' or `%c%c' instead" +msgstr "" +"`%s' field, reference to `%.255s':\n" +" `%c' is obsolete, use `%c=' or `%c%c' instead" + +#: lib/fields.c:332 +#, c-format +msgid "" +"`%s' field, reference to `%.255s':\n" +" implicit exact match on version number, suggest using `=' instead" +msgstr "" +"`%s' field, reference to `%.255s':\n" +" implicit exact match on version number, suggest using `=' instead" + +#: lib/fields.c:339 +#, c-format +msgid "" +"`%s' field, reference to `%.255s':\n" +" version value starts with non-alphanumeric, suggest adding a space" +msgstr "" +"`%s' field, reference to `%.255s':\n" +" version value starts with non-alphanumeric, suggest adding a space" + +#: lib/fields.c:349 +#, c-format +msgid "`%s' field, reference to `%.255s': version contains `('" +msgstr "`%s' field, reference to `%.255s': version contains `('" + +#: lib/fields.c:352 +#, c-format +msgid "`%s' field, reference to `%.255s': version unterminated" +msgstr "`%s' field, reference to `%.255s': version unterminated" + +#: lib/fields.c:357 +#, c-format +msgid "`%s' field, reference to `%.255s': error in version: %.255s" +msgstr "`%s' field, reference to `%.255s': error in version: %.255s" + +#: lib/fields.c:366 +#, c-format +msgid "`%s' field, syntax error after reference to package `%.255s'" +msgstr "`%s' field, syntax error after reference to package `%.255s'" + +#: lib/fields.c:373 +#, c-format +msgid "alternatives (`|') not allowed in %s field" +msgstr "alternatives (`|') not allowed in %s field" + +#: lib/lock.c:47 +msgid "unable to unlock dpkg status database" +msgstr "unable to unlock dpkg status database" + +#: lib/lock.c:68 +msgid "you do not have permission to lock the dpkg status database" +msgstr "you do not have permission to lock the dpkg status database" + +#: lib/lock.c:69 +msgid "unable to open/create status database lockfile" +msgstr "unable to open/create status database lockfile" + +#: lib/lock.c:78 +msgid "status database area is locked - another dpkg/dselect is running" +msgstr "status database area is locked - another dpkg/dselect is running" + +#: lib/lock.c:79 +msgid "unable to lock dpkg status database" +msgstr "unable to lock dpkg status database" + +#: lib/mlib.c:47 +#, c-format +msgid "malloc failed (%ld bytes)" +msgstr "malloc failed (%ld bytes)" + +#: lib/mlib.c:60 +#, c-format +msgid "realloc failed (%ld bytes)" +msgstr "realloc failed (%ld bytes)" + +#: lib/mlib.c:67 +#, c-format +msgid "%s (subprocess): %s\n" +msgstr "%s (subprocess): %s\n" + +#: lib/mlib.c:80 +msgid "fork failed" +msgstr "fork failed" + +#: lib/mlib.c:93 +#, c-format +msgid "failed to dup for std%s" +msgstr "failed to dup for std%s" + +#: lib/mlib.c:94 +#, c-format +msgid "failed to dup for fd %d" +msgstr "failed to dup for fd %d" + +#: lib/mlib.c:100 +msgid "failed to create pipe" +msgstr "failed to create pipe" + +#: lib/mlib.c:107 +#, c-format +msgid "subprocess %s returned error exit status %d" +msgstr "subprocess %s returned error exit status %d" + +#: lib/mlib.c:110 +#, c-format +msgid "subprocess %s killed by signal (%s)%s" +msgstr "subprocess %s killed by signal (%s)%s" + +#: lib/mlib.c:113 +#, c-format +msgid "subprocess %s failed with wait status code %d" +msgstr "subprocess %s failed with wait status code %d" + +#: lib/mlib.c:122 main/help.c:350 +#, c-format +msgid "wait for %s failed" +msgstr "wait for %s failed" + +#: lib/myopt.c:48 +#, c-format +msgid "unknown option --%s" +msgstr "unknown option --%s" + +#: lib/myopt.c:52 +#, c-format +msgid "--%s option takes a value" +msgstr "--%s option takes a value" + +#: lib/myopt.c:57 +#, c-format +msgid "--%s option does not take a value" +msgstr "--%s option does not take a value" + +#: lib/myopt.c:64 +#, c-format +msgid "unknown option -%c" +msgstr "unknown option -%c" + +#: lib/myopt.c:69 +#, c-format +msgid "-%c option takes a value" +msgstr "-%c option takes a value" + +#: lib/myopt.c:77 +#, c-format +msgid "-%c option does not take a value" +msgstr "-%c option does not take a value" + +#: lib/parse.c:90 +#, c-format +msgid "failed to open package info file `%.255s' for reading" +msgstr "failed to open package info file `%.255s' for reading" + +#: lib/parse.c:121 +#, c-format +msgid "EOF after field name `%.50s'" +msgstr "EOF after field name `%.50s'" + +#: lib/parse.c:124 +#, c-format +msgid "newline in field name `%.50s'" +msgstr "newline in field name `%.50s'" + +#: lib/parse.c:127 +#, c-format +msgid "MSDOS EOF (^Z) in field name `%.50s'" +msgstr "MSDOS EOF (^Z) in field name `%.50s'" + +#: lib/parse.c:130 +#, c-format +msgid "field name `%.50s' must be followed by colon" +msgstr "field name `%.50s' must be followed by colon" + +#: lib/parse.c:138 +#, c-format +msgid "EOF before value of field `%.50s' (missing final newline)" +msgstr "EOF before value of field `%.50s' (missing final newline)" + +#: lib/parse.c:142 +#, c-format +msgid "MSDOS EOF char in value of field `%.50s' (missing newline?)" +msgstr "MSDOS EOF char in value of field `%.50s' (missing newline?)" + +#: lib/parse.c:153 +#, c-format +msgid "EOF during value of field `%.50s' (missing final newline)" +msgstr "EOF during value of field `%.50s' (missing final newline)" + +#: lib/parse.c:170 +#, c-format +msgid "duplicate value for `%s' field" +msgstr "duplicate value for `%s' field" + +#: lib/parse.c:175 +#, c-format +msgid "user-defined field name `%s' too short" +msgstr "user-defined field name `%s' too short" + +#: lib/parse.c:180 +#, c-format +msgid "duplicate value for user-defined field `%.50s'" +msgstr "duplicate value for user-defined field `%.50s'" + +#: lib/parse.c:193 +msgid "several package info entries found, only one allowed" +msgstr "several package info entries found, only one allowed" + +#: lib/parse.c:221 +msgid "Configured-Version for package with inappropriate Status" +msgstr "Configured-Version for package with inappropriate Status" + +#: lib/parse.c:235 +msgid "Package which in state not-installed has conffiles, forgetting them" +msgstr "Package which in state not-installed has conffiles, forgetting them" + +#: lib/parse.c:283 +#, c-format +msgid "failed to read from `%.255s'" +msgstr "failed to read from `%.255s'" + +#: lib/parse.c:285 +#, c-format +msgid "failed to close after read: `%.255s'" +msgstr "failed to close after read: `%.255s'" + +#: lib/parse.c:286 +#, c-format +msgid "no package information in `%.255s'" +msgstr "no package information in `%.255s'" + +#: lib/parsehelp.c:38 +#, c-format +msgid "failed to read `%s' at line %d" +msgstr "failed to read `%s' at line %d" + +#: lib/parsehelp.c:39 +#, c-format +msgid "%s, in file `%.255s' near line %d" +msgstr "%s, in file `%.255s' near line %d" + +#: lib/parsehelp.c:40 +msgid "warning" +msgstr "warning" + +#: lib/parsehelp.c:40 +msgid "parse error" +msgstr "parse error" + +#: lib/parsehelp.c:42 +#, c-format +msgid " package `%.255s'" +msgstr " package `%.255s'" + +#: lib/parsehelp.c:53 +msgid "failed to write parsing warning" +msgstr "failed to write parsing warning" + +#: lib/parsehelp.c:114 +msgid "may not be empty string" +msgstr "may not be empty string" + +#: lib/parsehelp.c:115 +msgid "must start with an alphanumeric" +msgstr "must start with an alphanumeric" + +#: lib/parsehelp.c:116 +msgid "must be at least two characters" +msgstr "must be at least two characters" + +#: lib/parsehelp.c:125 +#, c-format +msgid "character `%c' not allowed - only letters, digits and %s allowed" +msgstr "character `%c' not allowed - only letters, digits and %s allowed" + +#: lib/parsehelp.c:194 +msgid "version string is empty" +msgstr "version string is empty" + +#: lib/parsehelp.c:199 +msgid "epoch in version is not number" +msgstr "epoch in version is not number" + +#: lib/parsehelp.c:200 +msgid "nothing after colon in version number" +msgstr "nothing after colon in version number" + +#: lib/parsehelp.c:221 +#, c-format +msgid "missing %s" +msgstr "missing %s" + +#: lib/parsehelp.c:225 +#, c-format +msgid "empty value for %s" +msgstr "empty value for %s" + +#: lib/showcright.c:31 +msgid "cannot open GPL file /usr/doc/dpkg/copyright" +msgstr "cannot open GPL file /usr/doc/dpkg/copyright" + +#: lib/showcright.c:34 +msgid "unable to exec cat for displaying GPL file" +msgstr "unable to exec cat for displaying GPL file" + +#: lib/varbuf.c:76 +msgid "failed to realloc for variable buffer" +msgstr "failed to realloc for variable buffer" + +#: main/archives.c:123 +msgid "error reading from dpkg-deb pipe" +msgstr "error reading from dpkg-deb pipe" + +#: main/archives.c:160 +#, c-format +msgid "error setting timestamps of `%.255s'" +msgstr "error setting timestamps of `%.255s'" + +#: main/archives.c:165 main/archives.c:407 +#, c-format +msgid "error setting ownership of `%.255s'" +msgstr "error setting ownership of `%.255s'" + +#: main/archives.c:167 main/archives.c:415 +#, c-format +msgid "error setting permissions of `%.255s'" +msgstr "error setting permissions of `%.255s'" + +#: main/archives.c:248 +#, c-format +msgid "" +"trying to overwrite `%.250s', which is the diverted version of " +"`%.250s'%.10s%.100s%.10s" +msgstr "" +"trying to overwrite `%.250s', which is the diverted version of " +"`%.250s'%.10s%.100s%.10s" + +#: main/archives.c:274 +#, c-format +msgid "unable to stat `%.255s' (which I was about to install)" +msgstr "unable to stat `%.255s' (which I was about to install)" + +#: main/archives.c:282 +#, c-format +msgid "" +"unable to clean up mess surrounding `%.255s' before installing another " +"version" +msgstr "" +"unable to clean up mess surrounding `%.255s' before installing another " +"version" + +#: main/archives.c:288 +#, c-format +msgid "unable to stat restored `%.255s' before installing another version" +msgstr "unable to stat restored `%.255s' before installing another version" + +#: main/archives.c:320 +#, c-format +msgid "archive contained object `%.255s' of unknown type 0x%x" +msgstr "archive contained object `%.255s' of unknown type 0x%x" + +#: main/archives.c:355 +#, c-format +msgid "" +"trying to overwrite directory `%.250s' in package %.250s with nondirectory" +msgstr "" +"trying to overwrite directory `%.250s' in package %.250s with nondirectory" + +#: main/archives.c:360 +#, c-format +msgid "trying to overwrite `%.250s', which is also in package %.250s" +msgstr "trying to overwrite `%.250s', which is also in package %.250s" + +#: main/archives.c:388 +#, c-format +msgid "unable to fdopen for `%.255s'" +msgstr "unable to fdopen for `%.255s'" + +#: main/archives.c:397 +#, c-format +msgid "error reading dpkg-deb during `%.255s'" +msgstr "error reading dpkg-deb during `%.255s'" + +#: main/archives.c:404 +#, c-format +msgid "error writing to `%.255s'" +msgstr "error writing to `%.255s'" + +#: main/archives.c:413 +#, c-format +msgid "error flushing `%.255s'" +msgstr "error flushing `%.255s'" + +#: main/archives.c:418 +#, c-format +msgid "error closing/writing `%.255s'" +msgstr "error closing/writing `%.255s'" + +#: main/archives.c:423 +#, c-format +msgid "error creating pipe `%.255s'" +msgstr "error creating pipe `%.255s'" + +#: main/archives.c:429 +#, c-format +msgid "error creating device `%.255s'" +msgstr "error creating device `%.255s'" + +#: main/archives.c:438 +#, c-format +msgid "error creating hard link `%.255s'" +msgstr "error creating hard link `%.255s'" + +#: main/archives.c:445 +#, c-format +msgid "error creating symbolic link `%.255s'" +msgstr "error creating symbolic link `%.255s'" + +#: main/archives.c:452 +#, c-format +msgid "error setting ownership of symlink `%.255s'" +msgstr "error setting ownership of symlink `%.255s'" + +#: main/archives.c:458 +#, c-format +msgid "error creating directory `%.255s'" +msgstr "error creating directory `%.255s'" + +#: main/archives.c:463 +msgid "bad tar type, but already checked" +msgstr "bad tar type, but already checked" + +#: main/archives.c:493 +#, c-format +msgid "unable to move aside `%.255s' to install new version" +msgstr "unable to move aside `%.255s' to install new version" + +#: main/archives.c:506 +#, c-format +msgid "unable to make backup symlink for `%.255s'" +msgstr "unable to make backup symlink for `%.255s'" + +#: main/archives.c:512 +#, c-format +msgid "unable to chown backup symlink for `%.255s'" +msgstr "unable to chown backup symlink for `%.255s'" + +#: main/archives.c:516 +#, c-format +msgid "unable to make backup link of `%.255s' before installing new version" +msgstr "unable to make backup link of `%.255s' before installing new version" + +#: main/archives.c:522 +#, c-format +msgid "unable to install new version of `%.255s'" +msgstr "unable to install new version of `%.255s'" + +#: main/archives.c:536 +#, c-format +msgid "" +"dpkg: warning - ignoring dependency problem with removal of %s:\n" +"%s" +msgstr "" +"dpkg: warning - ignoring dependency problem with removal of %s:\n" +"%s" + +#: main/archives.c:543 +#, c-format +msgid "" +"dpkg: warning - considering deconfiguration of essential\n" +" package %s, to enable removal of %s.\n" +msgstr "" +"dpkg: warning - considering deconfiguration of essential\n" +" package %s, to enable removal of %s.\n" + +#: main/archives.c:547 +#, c-format +msgid "" +"dpkg: no, %s is essential, will not deconfigure\n" +" it in order to enable removal of %s.\n" +msgstr "" +"dpkg: no, %s is essential, will not deconfigure\n" +" it in order to enable removal of %s.\n" + +#: main/archives.c:560 +#, c-format +msgid "" +"dpkg: no, cannot remove %s (--auto-deconfigure will help):\n" +"%s" +msgstr "" +"dpkg: no, cannot remove %s (--auto-deconfigure will help):\n" +"%s" + +#: main/archives.c:594 +#, c-format +msgid "dpkg: considering removing %s in favour of %s ...\n" +msgstr "dpkg: considering removing %s in favour of %s ...\n" + +#: main/archives.c:598 +#, c-format +msgid "%s is not properly installed - ignoring any dependencies on it.\n" +msgstr "%s is not properly installed - ignoring any dependencies on it.\n" + +#: main/archives.c:625 +#, c-format +msgid "dpkg: may have trouble removing %s, as it provides %s ...\n" +msgstr "dpkg: may have trouble removing %s, as it provides %s ...\n" + +#: main/archives.c:640 +#, c-format +msgid "" +"dpkg: package %s requires reinstallation, but will remove anyway as you " +"request.\n" +msgstr "" +"dpkg: package %s requires reinstallation, but will remove anyway as you " +"request.\n" + +#: main/archives.c:643 +#, c-format +msgid "dpkg: package %s requires reinstallation, will not remove.\n" +msgstr "dpkg: package %s requires reinstallation, will not remove.\n" + +#: main/archives.c:652 +#, c-format +msgid "dpkg: yes, will remove %s in favour of %s.\n" +msgstr "dpkg: yes, will remove %s in favour of %s.\n" + +#: main/archives.c:660 +#, c-format +msgid "" +"dpkg: regarding %s containing %s:\n" +"%s" +msgstr "" +"dpkg: regarding %s containing %s:\n" +"%s" + +#: main/archives.c:663 +#, c-format +msgid "conflicting packages - not installing %.250s" +msgstr "conflicting packages - not installing %.250s" + +#: main/archives.c:664 +msgid "dpkg: warning - ignoring conflict, may proceed anyway !\n" +msgstr "dpkg: warning - ignoring conflict, may proceed anyway !\n" + +#: main/archives.c:701 +#, c-format +msgid "--%s --recursive needs at least one path argument" +msgstr "--%s --recursive needs at least one path argument" + +#: main/archives.c:730 +msgid "failed to exec find for --recursive" +msgstr "failed to exec find for --recursive" + +#: main/archives.c:734 +msgid "failed to fdopen find's pipe" +msgstr "failed to fdopen find's pipe" + +#: main/archives.c:741 +msgid "error reading find's pipe" +msgstr "error reading find's pipe" + +#: main/archives.c:742 +msgid "error closing find's pipe" +msgstr "error closing find's pipe" + +#: main/archives.c:745 +msgid "searched, but found no packages (files matching *.deb" +msgstr "searched, but found no packages (files matching *.deb" + +#: main/archives.c:762 +#, c-format +msgid "--%s needs at least one package archive file argument" +msgstr "--%s needs at least one package archive file argument" + +#: main/archives.c:809 +msgid "unknown action" +msgstr "unknown action" + +#: main/cleanup.c:84 +#, c-format +msgid "" +"unable to remove newly-installed version of `%.250s' to allow reinstallation " +"of backup copy" +msgstr "" +"unable to remove newly-installed version of `%.250s' to allow reinstallation " +"of backup copy" + +#: main/cleanup.c:91 +#, c-format +msgid "unable to restore backup version of `%.250s'" +msgstr "unable to restore backup version of `%.250s'" + +#: main/cleanup.c:97 +#, c-format +msgid "unable to remove newly-extracted version of `%.250s'" +msgstr "unable to remove newly-extracted version of `%.250s'" + +#: main/configure.c:80 +#, c-format +msgid "no package named `%s' is installed, cannot configure" +msgstr "no package named `%s' is installed, cannot configure" + +#: main/configure.c:82 +#, c-format +msgid "" +"package %.250s is not ready for configuration\n" +" cannot configure (current status `%.250s')" +msgstr "" +"package %.250s is not ready for configuration\n" +" cannot configure (current status `%.250s')" + +#: main/configure.c:99 +#, c-format +msgid "" +"dpkg: dependency problems prevent configuration of %s:\n" +"%s" +msgstr "" +"dpkg: dependency problems prevent configuration of %s:\n" +"%s" + +#: main/configure.c:102 +msgid "dependency problems - leaving unconfigured" +msgstr "dependency problems - leaving unconfigured" + +#: main/configure.c:106 +#, c-format +msgid "" +"dpkg: %s: dependency problems, but configuring anyway as you request:\n" +"%s" +msgstr "" +"dpkg: %s: dependency problems, but configuring anyway as you request:\n" +"%s" + +#: main/configure.c:114 +msgid "" +"Package is in a very bad inconsistent state - you should\n" +" reinstall it before attempting configuration." +msgstr "" +"Package is in a very bad inconsistent state - you should\n" +" reinstall it before attempting configuration." + +#: main/configure.c:117 +#, c-format +msgid "Setting up %s (%s) ...\n" +msgstr "Setting up %s (%s) ...\n" + +#: main/configure.c:165 +#, c-format +msgid "unable to stat new dist conffile `%.250s'" +msgstr "unable to stat new dist conffile `%.250s'" + +#: main/configure.c:174 +#, c-format +msgid "unable to change ownership of new dist conffile `%.250s'" +msgstr "unable to change ownership of new dist conffile `%.250s'" + +#: main/configure.c:177 +#, c-format +msgid "unable to set mode of new dist conffile `%.250s'" +msgstr "unable to set mode of new dist conffile `%.250s'" + +#: main/configure.c:180 +#, c-format +msgid "unable to stat current installed conffile `%.250s'" +msgstr "unable to stat current installed conffile `%.250s'" + +#: main/configure.c:212 +#, c-format +msgid "" +"\n" +"Configuration file `%s'" +msgstr "" +"\n" +"Configuration file `%s'" + +#: main/configure.c:214 +#, c-format +msgid " (actually `%s')" +msgstr " (actually `%s')" + +#: main/configure.c:219 +msgid "" +"\n" +" ==> File on system created by you or by a script.\n" +" ==> File also in package provided by package maintainer.\n" +msgstr "" +"\n" +" ==> File on system created by you or by a script.\n" +" ==> File also in package provided by package maintainer.\n" + +#: main/configure.c:226 +msgid "" +"\n" +" ==> Modified (by you or by a script) since installation.\n" +msgstr "" +"\n" +" ==> Modified (by you or by a script) since installation.\n" + +#: main/configure.c:227 +msgid "" +"\n" +" Not modified since installation.\n" +msgstr "" +"\n" +" Not modified since installation.\n" + +#: main/configure.c:230 +msgid " ==> Package distributor has shipped an updated version.\n" +msgstr " ==> Package distributor has shipped an updated version.\n" + +#: main/configure.c:231 +msgid " Version in package is the same as at last installation.\n" +msgstr " Version in package is the same as at last installation.\n" + +#: main/configure.c:236 +msgid "" +" What would you like to do about it ? Your options are:\n" +" Y or I : install the package maintainer's version\n" +" N or O : keep your currently-installed version\n" +" Z : background this process to examine the situation\n" +msgstr "" +" What would you like to do about it ? Your options are:\n" +" Y or I : install the package maintainer's version\n" +" N or O : keep your currently-installed version\n" +" Z : background this process to examine the situation\n" + +#: main/configure.c:242 +msgid " The default action is to keep your current version.\n" +msgstr " The default action is to keep your current version.\n" + +#: main/configure.c:244 +msgid " The default action is to install the new version.\n" +msgstr " The default action is to install the new version.\n" + +#: main/configure.c:250 +msgid "[default=N]" +msgstr "[default=N]" + +#: main/configure.c:251 +msgid "[default=Y]" +msgstr "[default=Y]" + +#: main/configure.c:251 +msgid "[no default]" +msgstr "[no default]" + +#: main/configure.c:254 +msgid "error writing to stderr, discovered before conffile prompt" +msgstr "error writing to stderr, discovered before conffile prompt" + +#: main/configure.c:261 +msgid "read error on stdin at conffile prompt" +msgstr "read error on stdin at conffile prompt" + +#: main/configure.c:262 +msgid "EOF on stdin at conffile prompt" +msgstr "EOF on stdin at conffile prompt" + +#: main/configure.c:277 +#, c-format +msgid "" +"Your currently installed version of the file is in:\n" +" %s\n" +"The version contained in the new version of the package is in:\n" +" %s\n" +"If you decide to take care of the update yourself, perhaps by editing\n" +" the installed version, you should choose `N' when you return, so that\n" +" I do not mess up your careful work.\n" +msgstr "" +"Your currently installed version of the file is in:\n" +" %s\n" +"The version contained in the new version of the package is in:\n" +" %s\n" +"If you decide to take care of the update yourself, perhaps by editing\n" +" the installed version, you should choose `N' when you return, so that\n" +" I do not mess up your careful work.\n" + +#: main/configure.c:288 +msgid "Type `exit' when you're done.\n" +msgstr "Type `exit' when you're done.\n" + +#: main/configure.c:293 +#, c-format +msgid "failed to exec shell (%.250s)" +msgstr "failed to exec shell (%.250s)" + +#: main/configure.c:296 +msgid "wait for shell failed" +msgstr "wait for shell failed" + +#: main/configure.c:298 +msgid "Don't forget to foreground (`fg') this process when you're done !\n" +msgstr "Don't forget to foreground (`fg') this process when you're done !\n" + +#: main/configure.c:319 +#, c-format +msgid "dpkg: %s: warning - failed to remove old backup `%.250s': %s\n" +msgstr "dpkg: %s: warning - failed to remove old backup `%.250s': %s\n" + +#: main/configure.c:327 +#, c-format +msgid "dpkg: %s: warning - failed to rename `%.250s' to `%.250s': %s\n" +msgstr "dpkg: %s: warning - failed to rename `%.250s' to `%.250s': %s\n" + +#: main/configure.c:335 +#, c-format +msgid "dpkg: %s: warning - failed to remove `%.250s': %s\n" +msgstr "dpkg: %s: warning - failed to remove `%.250s': %s\n" + +#: main/configure.c:343 +#, c-format +msgid "dpkg: %s: warning - failed to remove old distrib version `%.250s': %s\n" +msgstr "" +"dpkg: %s: warning - failed to remove old distrib version `%.250s': %s\n" + +#: main/configure.c:348 +#, c-format +msgid "dpkg: %s: warning - failed to remove `%.250s' (before overwrite): %s\n" +msgstr "dpkg: %s: warning - failed to remove `%.250s' (before overwrite): %s\n" + +#: main/configure.c:352 +#, c-format +msgid "dpkg: %s: warning - failed to link `%.250s' to `%.250s': %s\n" +msgstr "dpkg: %s: warning - failed to link `%.250s' to `%.250s': %s\n" + +#: main/configure.c:356 +#, c-format +msgid "Installing new version of config file %s ...\n" +msgstr "Installing new version of config file %s ...\n" + +#: main/configure.c:360 +#, c-format +msgid "unable to install `%.250s' as `%.250s'" +msgstr "unable to install `%.250s' as `%.250s'" + +#: main/configure.c:416 +#, c-format +msgid "" +"dpkg: %s: warning - unable to stat config file `%s'\n" +" (= `%s'): %s\n" +msgstr "" +"dpkg: %s: warning - unable to stat config file `%s'\n" +" (= `%s'): %s\n" + +#: main/configure.c:427 +#, c-format +msgid "" +"dpkg: %s: warning - config file `%s' is a circular link\n" +" (= `%s')\n" +msgstr "" +"dpkg: %s: warning - config file `%s' is a circular link\n" +" (= `%s')\n" + +#: main/configure.c:440 +#, c-format +msgid "" +"dpkg: %s: warning - unable to readlink conffile `%s'\n" +" (= `%s'): %s\n" +msgstr "" +"dpkg: %s: warning - unable to readlink conffile `%s'\n" +" (= `%s'): %s\n" + +#: main/configure.c:459 +#, c-format +msgid "" +"dpkg: %s: warning - conffile `%.250s' resolves to degenerate filename\n" +" (`%s' is a symlink to `%s')\n" +msgstr "" +"dpkg: %s: warning - conffile `%.250s' resolves to degenerate filename\n" +" (`%s' is a symlink to `%s')\n" + +#: main/configure.c:472 +#, c-format +msgid "" +"dpkg: %s: warning - conffile `%.250s' is not a plain file or symlink (= " +"`%s')\n" +msgstr "" +"dpkg: %s: warning - conffile `%.250s' is not a plain file or symlink (= " +"`%s')\n" + +#: main/configure.c:494 +msgid "failed to exec md5sum" +msgstr "failed to exec md5sum" + +#: main/configure.c:499 +#, c-format +msgid "unable to fdopen for md5sum of `%.250s'" +msgstr "unable to fdopen for md5sum of `%.250s'" + +#: main/configure.c:507 +msgid "error reading pipe from md5sum" +msgstr "error reading pipe from md5sum" + +#: main/configure.c:508 +msgid "error closing pipe from md5sum" +msgstr "error closing pipe from md5sum" + +#. file= fdopen(p1[0]) +#. m_pipe() +#. fd= open(cdr.buf) +#: main/configure.c:512 +#, c-format +msgid "md5sum gave malformatted output `%.250s'" +msgstr "md5sum gave malformatted output `%.250s'" + +#: main/configure.c:516 +#, c-format +msgid "dpkg: %s: warning - unable to open conffile %s for hash: %s\n" +msgstr "dpkg: %s: warning - unable to open conffile %s for hash: %s\n" + +#: main/depcon.c:73 +#, c-format +msgid "unable to check for existence of `%.250s'" +msgstr "unable to check for existence of `%.250s'" + +#: main/depcon.c:136 main/packages.c:386 +msgid " depends on " +msgstr " depends on " + +#: main/depcon.c:137 +msgid " pre-depends on " +msgstr " pre-depends on " + +#: main/depcon.c:138 +msgid " recommends " +msgstr " recommends " + +#: main/depcon.c:139 +msgid " conflicts with " +msgstr " conflicts with " + +#: main/depcon.c:213 +#, c-format +msgid " %.250s is to be removed.\n" +msgstr " %.250s is to be removed.\n" + +#: main/depcon.c:216 +#, c-format +msgid " %.250s is to be deconfigured.\n" +msgstr " %.250s is to be deconfigured.\n" + +#: main/depcon.c:220 +#, c-format +msgid " %.250s is to be installed, but is version %.250s.\n" +msgstr " %.250s is to be installed, but is version %.250s.\n" + +#: main/depcon.c:228 +#, c-format +msgid " %.250s is installed, but is version %.250s.\n" +msgstr " %.250s is installed, but is version %.250s.\n" + +#: main/depcon.c:243 +#, c-format +msgid " %.250s is unpacked, but has never been configured.\n" +msgstr " %.250s is unpacked, but has never been configured.\n" + +#: main/depcon.c:247 +#, c-format +msgid " %.250s is unpacked, but is version %.250s.\n" +msgstr " %.250s is unpacked, but is version %.250s.\n" + +#: main/depcon.c:253 +#, c-format +msgid " %.250s latest configured version is %.250s.\n" +msgstr " %.250s latest configured version is %.250s.\n" + +#: main/depcon.c:262 +#, c-format +msgid " %.250s is %s.\n" +msgstr " %.250s is %s.\n" + +#: main/depcon.c:298 +#, c-format +msgid " %.250s provides %.250s but is to be removed.\n" +msgstr " %.250s provides %.250s but is to be removed.\n" + +#: main/depcon.c:302 +#, c-format +msgid " %.250s provides %.250s but is to be deconfigured.\n" +msgstr " %.250s provides %.250s but is to be deconfigured.\n" + +#: main/depcon.c:307 +#, c-format +msgid " %.250s provides %.250s but is %s.\n" +msgstr " %.250s provides %.250s but is %s.\n" + +#: main/depcon.c:352 +#, c-format +msgid " %.250s (version %.250s) is to be installed.\n" +msgstr " %.250s (version %.250s) is to be installed.\n" + +#: main/depcon.c:366 +#, c-format +msgid " %.250s (version %.250s) is %s.\n" +msgstr " %.250s (version %.250s) is %s.\n" + +#. conflicts and provides the same +#: main/depcon.c:391 +#, c-format +msgid " %.250s provides %.250s and is to be installed.\n" +msgstr " %.250s provides %.250s and is to be installed.\n" + +#: main/depcon.c:422 +#, c-format +msgid " %.250s provides %.250s and is %s.\n" +msgstr " %.250s provides %.250s and is %s.\n" + +#: main/enquiry.c:63 +msgid "" +"Desired=Unknown/Install/Remove/Purge\n" +"| Status=Not/Installed/Config-files/Unpacked/Failed-config/Half-installed\n" +"|/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: " +"uppercase=bad)\n" +"||/ Name Version Description\n" +"+++-===============-==============-==========================================" +"==\n" +msgstr "" +"Desired=Unknown/Install/Remove/Purge\n" +"| Status=Not/Installed/Config-files/Unpacked/Failed-config/Half-installed\n" +"|/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: " +"uppercase=bad)\n" +"||/ Name Version Description\n" +"+++-===============-==============-==========================================" +"==\n" + +#: main/enquiry.c:121 main/select.c:80 +#, c-format +msgid "No packages found matching %s.\n" +msgstr "No packages found matching %s.\n" + +#: main/enquiry.c:146 +msgid "" +"The following packages are in a mess due to serious problems during\n" +"installation. They must be reinstalled for them (and any packages\n" +"that depend on them) to function properly:\n" +msgstr "" +"The following packages are in a mess due to serious problems during\n" +"installation. They must be reinstalled for them (and any packages\n" +"that depend on them) to function properly:\n" + +#: main/enquiry.c:151 +msgid "" +"The following packages have been unpacked but not yet configured.\n" +"They must be configured using dpkg --configure or the configure\n" +"menu option in dselect for them to work:\n" +msgstr "" +"The following packages have been unpacked but not yet configured.\n" +"They must be configured using dpkg --configure or the configure\n" +"menu option in dselect for them to work:\n" + +#: main/enquiry.c:156 +msgid "" +"The following packages are only half configured, probably due to problems\n" +"configuring them the first time. The configuration should be retried using\n" +"dpkg --configure <package> or the configure menu option in " +msgstr "" +"The following packages are only half configured, probably due to problems\n" +"configuring them the first time. The configuration should be retried using\n" +"dpkg --configure <package> or the configure menu option in " + +#: main/enquiry.c:161 +msgid "" +"The following packages are only half installed, due to problems during\n" +"installation. The installation can probably be completed by retrying it;\n" +"the packages can be removed using dselect or dpkg --remove:\n" +msgstr "" +"The following packages are only half installed, due to problems during\n" +"installation. The installation can probably be completed by retrying it;\n" +"the packages can be removed using dselect or dpkg --remove:\n" + +#: main/enquiry.c:186 +msgid "--audit does not take any arguments" +msgstr "--audit does not take any arguments" + +#: main/enquiry.c:237 +msgid "--yet-to-unpack does not take any arguments" +msgstr "--yet-to-unpack does not take any arguments" + +#: main/enquiry.c:290 +#, c-format +msgid " %d packages, from the following sections:" +msgstr " %d packages, from the following sections:" + +#: main/enquiry.c:310 +#, c-format +msgid "diversion by %s" +msgstr "diversion by %s" + +#: main/enquiry.c:311 +msgid "local diversion" +msgstr "local diversion" + +#: main/enquiry.c:312 +msgid "to" +msgstr "to" + +#: main/enquiry.c:312 +msgid "from" +msgstr "from" + +#: main/enquiry.c:345 +msgid "--search needs at least one file name pattern argument" +msgstr "--search needs at least one file name pattern argument" + +#: main/enquiry.c:373 +#, c-format +msgid "dpkg: %s not found.\n" +msgstr "dpkg: %s not found.\n" + +#: main/enquiry.c:389 main/packages.c:109 +#, c-format +msgid "--%s needs at least one package name argument" +msgstr "--%s needs at least one package name argument" + +#: main/enquiry.c:406 +#, c-format +msgid "Package `%s' is not installed and no info is available.\n" +msgstr "Package `%s' is not installed and no info is available.\n" + +#: main/enquiry.c:415 +#, c-format +msgid "Package `%s' is not available.\n" +msgstr "Package `%s' is not available.\n" + +#: main/enquiry.c:425 +#, c-format +msgid "Package `%s' is not installed.\n" +msgstr "Package `%s' is not installed.\n" + +#: main/enquiry.c:434 +#, c-format +msgid "Package `%s' does not contain any files (!)\n" +msgstr "Package `%s' does not contain any files (!)\n" + +#: main/enquiry.c:440 +msgid "locally diverted" +msgstr "locally diverted" + +#: main/enquiry.c:441 +msgid "package diverts others" +msgstr "package diverts others" + +#: main/enquiry.c:442 +#, c-format +msgid "diverted by %s" +msgstr "diverted by %s" + +#: main/enquiry.c:461 +msgid "" +"Use dpkg --info (= dpkg-deb --info) to examine archive files,\n" +"and dpkg --contents (= dpkg-deb --contents) to list their contents." +msgstr "" +"Use dpkg --info (= dpkg-deb --info) to examine archive files,\n" +"and dpkg --contents (= dpkg-deb --contents) to list their contents." + +#: main/enquiry.c:499 +msgid "--assert-support-predepends does not take any arguments" +msgstr "--assert-support-predepends does not take any arguments" + +#: main/enquiry.c:514 +msgid "" +"Version of dpkg with Pre-Depends support not yet configured.\n" +" Please use `dpkg --configure dpkg', and then try again.\n" +msgstr "" +"Version of dpkg with Pre-Depends support not yet configured.\n" +" Please use `dpkg --configure dpkg', and then try again.\n" + +#: main/enquiry.c:518 +msgid "" +"dpkg not recorded as installed, cannot check for Pre-Depends support !\n" +msgstr "" +"dpkg not recorded as installed, cannot check for Pre-Depends support !\n" + +#: main/enquiry.c:541 +msgid "--predep-package does not take any argument" +msgstr "--predep-package does not take any argument" + +#: main/enquiry.c:593 +#, c-format +msgid "" +"dpkg: cannot see how to satisfy pre-dependency:\n" +" %s\n" +msgstr "" +"dpkg: cannot see how to satisfy pre-dependency:\n" +" %s\n" + +#: main/enquiry.c:594 +#, c-format +msgid "cannot satisfy pre-dependencies for %.250s (wanted due to %.250s)" +msgstr "cannot satisfy pre-dependencies for %.250s (wanted due to %.250s)" + +#: main/enquiry.c:614 +#, c-format +msgid "" +"dpkg: unexpected output from `%s --print-libgcc-file-name':\n" +" `%s'\n" +msgstr "" +"dpkg: unexpected output from `%s --print-libgcc-file-name':\n" +" `%s'\n" + +#: main/enquiry.c:617 +#, c-format +msgid "compiler libgcc filename not understood: %.250s" +msgstr "compiler libgcc filename not understood: %.250s" + +#: main/enquiry.c:621 +msgid "--print-installation-architecture does not take any argument" +msgstr "--print-installation-architecture does not take any argument" + +#: main/enquiry.c:641 +msgid "--print-architecture does not take any argument" +msgstr "--print-architecture does not take any argument" + +#: main/enquiry.c:647 +msgid "failed to fdopen CC pipe" +msgstr "failed to fdopen CC pipe" + +#: main/enquiry.c:651 +#, c-format +msgid "failed to exec C compiler `%.250s'" +msgstr "failed to exec C compiler `%.250s'" + +#: main/enquiry.c:655 +msgid "error reading from CC pipe" +msgstr "error reading from CC pipe" + +#: main/enquiry.c:657 +msgid "empty output" +msgstr "empty output" + +#: main/enquiry.c:659 +msgid "no newline" +msgstr "no newline" + +#: main/enquiry.c:662 +msgid "no gcc-lib component" +msgstr "no gcc-lib component" + +#: main/enquiry.c:664 +msgid "no hyphen after gcc-lib" +msgstr "no hyphen after gcc-lib" + +#: main/enquiry.c:676 +#, c-format +msgid "dpkg: warning, architecture `%s' not in remapping table\n" +msgstr "dpkg: warning, architecture `%s' not in remapping table\n" + +#: main/enquiry.c:718 +msgid "--cmpversions takes three arguments: <version> <relation> <version>" +msgstr "--cmpversions takes three arguments: <version> <relation> <version>" + +#: main/enquiry.c:723 +msgid "--cmpversions bad relation" +msgstr "--cmpversions bad relation" + +#: main/enquiry.c:728 +#, c-format +msgid "version a has bad syntax: %s\n" +msgstr "version a has bad syntax: %s\n" + +#: main/enquiry.c:738 +#, c-format +msgid "version b has bad syntax: %s\n" +msgstr "version b has bad syntax: %s\n" + +#: main/errors.c:60 +msgid "" +"dpkg: failed to allocate memory for new entry in list of failed packages." +msgstr "" +"dpkg: failed to allocate memory for new entry in list of failed packages." + +#: main/errors.c:70 +msgid "dpkg: too many errors, stopping\n" +msgstr "dpkg: too many errors, stopping\n" + +#: main/errors.c:76 +msgid "Errors were encountered while processing:\n" +msgstr "Errors were encountered while processing:\n" + +#: main/errors.c:83 +msgid "Processing was halted because there were too many errors.\n" +msgstr "Processing was halted because there were too many errors.\n" + +#: main/errors.c:91 +#, c-format +msgid "Package %s was on hold, processing it anyway as you request\n" +msgstr "Package %s was on hold, processing it anyway as you request\n" + +#: main/errors.c:104 +msgid "" +"dpkg - warning, overriding problem because --force enabled:\n" +" " +msgstr "" +"dpkg - warning, overriding problem because --force enabled:\n" +" " + +#: main/filesdb.c:116 +#, c-format +msgid "unable to open files list file for package `%.250s'" +msgstr "unable to open files list file for package `%.250s'" + +#: main/filesdb.c:121 +#, c-format +msgid "" +"dpkg: serious warning: files list file for package `%.250s' missing, " +"assuming package has no files currently installed.\n" +msgstr "" +"dpkg: serious warning: files list file for package `%.250s' missing, " +"assuming package has no files currently installed.\n" + +#: main/filesdb.c:132 +#, c-format +msgid "unable to set buffering on `%.250s'" +msgstr "unable to set buffering on `%.250s'" + +#: main/filesdb.c:142 +#, c-format +msgid "fgets gave an empty null-terminated string from `%.250s'" +msgstr "fgets gave an empty null-terminated string from `%.250s'" + +#: main/filesdb.c:160 +#, c-format +msgid "files list file for package `%.250s' contains empty filename" +msgstr "files list file for package `%.250s' contains empty filename" + +#: main/filesdb.c:168 +#, c-format +msgid "error reading files list file for package `%.250s'" +msgstr "error reading files list file for package `%.250s'" + +#: main/filesdb.c:171 +#, c-format +msgid "error closing files list file for package `%.250s'" +msgstr "error closing files list file for package `%.250s'" + +#: main/filesdb.c:173 +#, c-format +msgid "files list file for package `%.250s' is truncated" +msgstr "files list file for package `%.250s' is truncated" + +#: main/filesdb.c:204 +msgid "(Reading database ... " +msgstr "(Reading database ... " + +#: main/filesdb.c:204 +msgid "(Scanning database ... " +msgstr "(Scanning database ... " + +#: main/filesdb.c:212 +#, c-format +msgid "%d files and directories currently installed.)\n" +msgstr "%d files and directories currently installed.)\n" + +#: main/filesdb.c:243 +#, c-format +msgid "unable to create updated files list file for package %s" +msgstr "unable to create updated files list file for package %s" + +#: main/filesdb.c:253 +#, c-format +msgid "failed to write to updated files list file for package %s" +msgstr "failed to write to updated files list file for package %s" + +#: main/filesdb.c:255 +#, c-format +msgid "failed to flush updated files list file for package %s" +msgstr "failed to flush updated files list file for package %s" + +#: main/filesdb.c:257 +#, c-format +msgid "failed to sync updated files list file for package %s" +msgstr "failed to sync updated files list file for package %s" + +#: main/filesdb.c:260 +#, c-format +msgid "failed to close updated files list file for package %s" +msgstr "failed to close updated files list file for package %s" + +#: main/filesdb.c:262 +#, c-format +msgid "failed to install updated files list file for package %s" +msgstr "failed to install updated files list file for package %s" + +#: main/filesdb.c:326 +msgid "failed to open diversions file" +msgstr "failed to open diversions file" + +#: main/filesdb.c:330 +msgid "failed to fstat previous diversions file" +msgstr "failed to fstat previous diversions file" + +#: main/filesdb.c:332 +msgid "failed to fstat diversions file" +msgstr "failed to fstat diversions file" + +#: main/filesdb.c:352 +msgid "fgets gave an empty string from diversions [i]" +msgstr "fgets gave an empty string from diversions [i]" + +#: main/filesdb.c:353 +msgid "diversions file has too-long line or EOF [i]" +msgstr "diversions file has too-long line or EOF [i]" + +#: main/filesdb.c:358 +msgid "read error in diversions [ii]" +msgstr "read error in diversions [ii]" + +#: main/filesdb.c:359 +msgid "unexpected EOF in diversions [ii]" +msgstr "unexpected EOF in diversions [ii]" + +#: main/filesdb.c:361 +msgid "fgets gave an empty string from diversions [ii]" +msgstr "fgets gave an empty string from diversions [ii]" + +#: main/filesdb.c:362 main/filesdb.c:371 +msgid "diversions file has too-long line or EOF [ii]" +msgstr "diversions file has too-long line or EOF [ii]" + +#: main/filesdb.c:367 +msgid "read error in diversions [iii]" +msgstr "read error in diversions [iii]" + +#: main/filesdb.c:368 +msgid "unexpected EOF in diversions [iii]" +msgstr "unexpected EOF in diversions [iii]" + +#: main/filesdb.c:370 +msgid "fgets gave an empty string from diversions [iii]" +msgstr "fgets gave an empty string from diversions [iii]" + +#: main/filesdb.c:378 +#, c-format +msgid "conflicting diversions involving `%.250s' or `%.250s'" +msgstr "conflicting diversions involving `%.250s' or `%.250s'" + +#: main/filesdb.c:387 +msgid "read error in diversions [i]" +msgstr "read error in diversions [i]" + +#: main/help.c:40 +msgid "not installed" +msgstr "not installed" + +#: main/help.c:40 +msgid "unpacked but not configured" +msgstr "unpacked but not configured" + +#: main/help.c:41 +msgid "broken due to postinst failure" +msgstr "broken due to postinst failure" + +#: main/help.c:42 +msgid "installed" +msgstr "installed" + +#: main/help.c:43 +msgid "broken due to failed removal" +msgstr "broken due to failed removal" + +#: main/help.c:44 +msgid "not installed but configs remain" +msgstr "not installed but configs remain" + +#: main/help.c:81 +msgid "dpkg - warning: PATH is not set.\n" +msgstr "dpkg - warning: PATH is not set.\n" + +#: main/help.c:96 +#, c-format +msgid "dpkg: `%s' not found on PATH.\n" +msgstr "dpkg: `%s' not found on PATH.\n" + +#: main/help.c:102 +#, c-format +msgid "" +"%d expected program(s) not found on PATH.\n" +"NB: root's PATH should usually contain /usr/local/sbin, /usr/sbin and /sbin." +msgstr "" +"%d expected program(s) not found on PATH.\n" +"NB: root's PATH should usually contain /usr/local/sbin, /usr/sbin and /sbin." + +#: main/help.c:210 +#, c-format +msgid "error un-catching signal %s: %s\n" +msgstr "error un-catching signal %s: %s\n" + +#: main/help.c:228 +#, c-format +msgid "unable to ignore signal %s before running script" +msgstr "unable to ignore signal %s before running script" + +#: main/help.c:237 +#, c-format +msgid "unable to set execute permissions on `%.250s'" +msgstr "unable to set execute permissions on `%.250s'" + +#: main/help.c:261 +#, c-format +msgid "unable to stat installed %s script `%.250s'" +msgstr "unable to stat installed %s script `%.250s'" + +#: main/help.c:268 main/help.c:346 main/help.c:385 +#, c-format +msgid "unable to execute %s" +msgstr "unable to execute %s" + +#: main/help.c:297 +#, c-format +msgid "unable to stat new %s script `%.250s'" +msgstr "unable to stat new %s script `%.250s'" + +#: main/help.c:304 +#, c-format +msgid "unable to execute new %s" +msgstr "unable to execute new %s" + +#: main/help.c:338 +#, c-format +msgid "dpkg: warning - unable to stat %s `%.250s': %s\n" +msgstr "dpkg: warning - unable to stat %s `%.250s': %s\n" + +#: main/help.c:354 +#, c-format +msgid "dpkg: warning - %s returned error exit status %d\n" +msgstr "dpkg: warning - %s returned error exit status %d\n" + +#: main/help.c:357 +#, c-format +msgid "dpkg: warning - %s killed by signal (%s)%s\n" +msgstr "dpkg: warning - %s killed by signal (%s)%s\n" + +#: main/help.c:360 +#, c-format +msgid "%s failed with unknown wait status code %d" +msgstr "%s failed with unknown wait status code %d" + +#: main/help.c:364 +msgid "dpkg - trying script from the new package instead ...\n" +msgstr "dpkg - trying script from the new package instead ...\n" + +#: main/help.c:371 +#, c-format +msgid "new %s script" +msgstr "new %s script" + +#: main/help.c:375 +msgid "there is no script in the new version of the package - giving up" +msgstr "there is no script in the new version of the package - giving up" + +#: main/help.c:377 +#, c-format +msgid "unable to stat %s `%.250s'" +msgstr "unable to stat %s `%.250s'" + +#: main/help.c:390 +msgid "dpkg: ... it looks like that went OK.\n" +msgstr "dpkg: ... it looks like that went OK.\n" + +#. Huh ? +#: main/help.c:469 +#, c-format +msgid "failed to rmdir/unlink `%.255s'" +msgstr "failed to rmdir/unlink `%.255s'" + +#: dpkg-deb/info.c:52 main/help.c:473 +msgid "failed to exec rm for cleanup" +msgstr "failed to exec rm for cleanup" + +#: main/main.c:44 +msgid "Debian Linux `dpkg' package management program version " +msgstr "Debian Linux `dpkg' package management program version " + +#: main/main.c:47 +msgid "" +"Copyright 1994-1996 Ian Jackson, Bruce Perens. This is free software;\n" +"see the GNU General Public Licence version 2 or later for copying\n" +"conditions. There is NO warranty. See dpkg --licence for details.\n" +msgstr "" +"Copyright 1994-1996 Ian Jackson, Bruce Perens. This is free software;\n" +"see the GNU General Public Licence version 2 or later for copying\n" +"conditions. There is NO warranty. See dpkg --licence for details.\n" + +#: main/main.c:57 +#, fuzzy, c-format +msgid "" +"Usage: \n" +" dpkg -i|--install <.deb file name> ... | -R|--recursive <dir> ...\n" +" dpkg --unpack <.deb file name> ... | -R|--recursive <dir> ...\n" +" dpkg -A|--record-avail <.deb file name> ... | -R|--recursive <dir> ...\n" +" dpkg --configure <package name> ... | -a|--pending\n" +" dpkg -r|--remove | --purge <package name> ... | -a|--pending\n" +" dpkg --get-selections [<pattern> ...] get list of selections to stdout\n" +" dpkg --set-selections set package selections from stdin\n" +" dpkg --update-avail <Packages-file> replace available packages info\n" +" dpkg --merge-avail <Packages-file> merge with info from file\n" +" dpkg --clear-avail erase existing available info\n" +" dpkg --forget-old-unavail forget uninstalled unavailable " +"pkgs\n" +" dpkg -s|--status <package-name> ... display package status details\n" +" dpkg --print-avail <package-name> ... display available version details\n" +" dpkg -L|--listfiles <package-name> ... list files `owned' by package(s)\n" +" dpkg -l|--list [<pattern> ...] list packages concisely\n" +" dpkg -S|--search <pattern> ... find package(s) owning file(s)\n" +" dpkg -C|--audit check for broken package(s)\n" +" dpkg --print-architecture print target architecture (uses " +"GCC)\n" +" dpkg --print-gnu-build-architecture print GNU version of target arch\n" +" dpkg --print-installation-architecture print host architecture (for " +"inst'n)\n" +" dpkg --compare-versions <a> <rel> <b> compare version numbers - see " +"below\n" +" dpkg --help | --version show this help / version number\n" +" dpkg --force-help | -Dh|--debug=help help on forcing resp. debugging\n" +" dpkg --licence print copyright licencing terms\n" +"\n" +"Use dpkg -b|--build|-c|--contents|-e|--control|-I|--info|-f|--field|\n" +" -x|--extract|-X|--vextract|--fsys-tarfile on archives (type %s --help.)\n" +"\n" +"For internal use: dpkg --assert-support-predepends | --predep-package |\n" +" --assert-working-epoch\n" +"\n" +"Options:" +msgstr "" +"Usage: \n" +" dpkg -i|--install <.deb file name> ... | -R|--recursive <dir> ...\n" +" dpkg --unpack <.deb file name> ... | -R|--recursive <dir> ...\n" +" dpkg -A|--record-avail <.deb file name> ... | -R|--recursive <dir> ...\n" +" dpkg --configure <package name> ... | -a|--pending\n" +" dpkg -r|--remove | --purge <package name> ... | -a|--pending\n" +" dpkg --get-selections [<pattern> ...] get list of selections to stdout\n" +" dpkg --set-selections set package selections from stdin\n" +" dpkg --update-avail <Packages-file> replace available packages info\n" +" dpkg --merge-avail <Packages-file> merge with info from file\n" +" dpkg --clear-avail erase existing available info\n" +" dpkg --forget-old-unavail forget uninstalled unavailable " +"pkgs\n" +" dpkg -s|--status <package-name> ... display package status details\n" +" dpkg --print-avail <package-name> ... display available version details\n" +" dpkg -L|--listfiles <package-name> ... list files `owned' by package(s)\n" +" dpkg -l|--list [<pattern> ...] list packages concisely\n" +" dpkg -S|--search <pattern> ... find package(s) owning file(s)\n" +" dpkg -C|--audit check for broken package(s)\n" +" dpkg --print-architecture print target architecture (uses " +"GCC)\n" +" dpkg --print-gnu-build-architecture print GNU version of target arch\n" +" dpkg --print-installation-architecture print host architecture (for " +"inst'n)\n" +" dpkg --compare-versions <a> <rel> <b> compare version numbers - see " +"below\n" +" dpkg --help | --version show this help / version number\n" +" dpkg --force-help | -Dh|--debug=help help on forcing resp. debugging\n" +" dpkg --licence print copyright licencing terms\n" +"\n" +"Use dpkg -b|--build|-c|--contents|-e|--control|-I|--info|-f|--field|\n" +" -x|--extract|-X|--vextract|--fsys-tarfile on archives (type %s --help.)\n" +"\n" +"For internal use: dpkg --assert-support-predepends | --predep-package |\n" +" --assert-working-epoch\n" +"\n" +"Options:\n" +" --admindir=<directory> Use <directory> instead of %s\n" +" --root=<directory> Install on alternative system rooted elsewhere\n" +" --instdir=<directory> Change inst'n root without changing admin dir\n" +" -O|--selected-only Skip packages not selected for install/upgrade\n" +" -E|--skip-same-version Skip packages whose same version is installed\n" +" -G=--refuse-downgrade Skip packages with earlier version than " +"installed\n" +" -B|--auto-deconfigure Install even if it would break some other " +"package\n" +" --largemem | --smallmem Optimise for large (>4Mb) or small (<4Mb) RAM " +"use\n" +" --no-act Just say what we would do - don't do it\n" +" -D|--debug=<octal> Enable debugging - see -Dhelp or --debug=help\n" +" --ignore-depends=<package>,... Ignore dependencies involving <package>\n" +" --force-... Override problems - see --force-help\n" +" --no-force-...|--refuse-... Stop when problems encountered\n" +"\n" +"Comparison operators for --compare-versions are:\n" +" lt le eq ne ge gt (treat no version as earlier than any version);\n" +" lt-nl le-nl ge-nl gt-nl (treat no version as later than any version);\n" +" < << <= = >= >> > (only for compatibility with control file syntax).\n" +"\n" +"Use `dselect' for user-friendly package management.\n" + +#: main/main.c:116 +msgid "" +"Type dpkg --help for help about installing and deinstalling packages [*];\n" +"Use dselect for user-friendly package management;\n" +"Type dpkg -Dhelp for a list of dpkg debug flag values;\n" +"Type dpkg --force-help for a list of forcing options;\n" +"Type dpkg-deb --help for help about manipulating *.deb files;\n" +"Type dpkg --licence for copyright licence and lack of warranty (GNU GPL) " +"[*].\n" +"\n" +"Options marked [*] produce a lot of output - pipe it through `less' or " +"`more' !" +msgstr "" +"Type dpkg --help for help about installing and deinstalling packages [*];\n" +"Use dselect for user-friendly package management;\n" +"Type dpkg -Dhelp for a list of dpkg debug flag values;\n" +"Type dpkg --force-help for a list of forcing options;\n" +"Type dpkg-deb --help for help about manipulating *.deb files;\n" +"Type dpkg --licence for copyright licence and lack of warranty (GNU GPL) " +"[*].\n" +"\n" +"Options marked [*] produce a lot of output - pipe it through `less' or " +"`more' !" + +#: dpkg-deb/main.c:130 main/main.c:171 split/main.c:142 +#, c-format +msgid "conflicting actions --%s and --%s" +msgstr "conflicting actions --%s and --%s" + +#: main/main.c:223 +#, c-format +msgid "null package name in --ignore-depends comma-separated list `%.250s'" +msgstr "null package name in --ignore-depends comma-separated list `%.250s'" + +#: main/main.c:229 +#, c-format +msgid "--ignore-depends requires a legal package name. `%.250s' is not; %s" +msgstr "--ignore-depends requires a legal package name. `%.250s' is not; %s" + +#: main/main.c:245 +#, fuzzy +msgid "" +"dpkg forcing options - control behaviour when problems found:\n" +" warn but continue: --force-<thing>,<thing>,...\n" +" stop with error: --refuse-<thing>,<thing>,... | --no-force-<thing>,...\n" +" Forcing things:\n" +" auto-select [*] (De)select packages to install (remove) them\n" +" dowgrade [*] Replace a package with a lower version\n" +" configure-any Configure any package which may help this one\n" +" hold Process incidental packages even when on hold\n" +" bad-path PATH is missing important programs, problems " +"likely\n" +" not-root Try to (de)install things even when not root\n" +" overwrite Overwrite a file from one package with another\n" +" overwrite-diverted Overwrite a diverted file with an undiverted " +"version\n" +" depends-version [!] Turn dependency version problems into warnings\n" +" depends [!] Turn all dependency problems into warnings\n" +" conflicts [!] Allow installation of conflicting packages\n" +" architecture [!] Process even packages with wrong architecture\n" +" overwrite-dir [!] Overwrite one package's directory with another's " +"file\n" +" remove-reinstreq [!] Remove packages which require installation\n" +" remove-essential [!] Remove an essential package\n" +"\n" +"WARNING - use of options marked [!] can seriously damage your installation.\n" +"Forcing options marked [*] are enabled by default.\n" +msgstr "" +"dpkg forcing options - control behaviour when problems found:\n" +" warn but continue: --force-<thing>,<thing>,...\n" +" stop with error: --refuse-<thing>,<thing>,... | --no-force-<thing>,...\n" +" Forcing things:\n" +" auto-select [*] (De)select packages to install (remove) them\n" +" dowgrade [*] Replace a package with a lower version\n" +" configure-any Configure any package which may help this one\n" +" hold Process incidental packages even when on hold\n" +" bad-path PATH is missing important programs, problems " +"likely\n" +" not-root Try to (de)install things even when not root\n" +" overwrite [*] Overwrite a file from one package with another\n" +" overwrite-diverted Overwrite a diverted file with an undiverted " +"version\n" +" depends-version [!] Turn dependency version problems into warnings\n" +" depends [!] Turn all dependency problems into warnings\n" +" conflicts [!] Allow installation of conflicting packages\n" +" architecture [!] Process even packages with wrong architecture\n" +" overwrite-dir [!] Overwrite one package's directory with another's " +"file\n" +" remove-reinstreq [!] Remove packages which require installation\n" +" remove-essential [!] Remove an essential package\n" +"\n" +"WARNING - use of options marked [!] can seriously damage your installation.\n" +"Forcing options marked [*] are enabled by default.\n" + +#: main/main.c:277 +#, c-format +msgid "unknown force/refuse option `%.*s'" +msgstr "unknown force/refuse option `%.*s'" + +#: main/main.c:353 +msgid "failed to exec dpkg-deb" +msgstr "failed to exec dpkg-deb" + +#: dpkg-deb/main.c:150 main/main.c:389 split/main.c:163 +msgid "need an action option" +msgstr "need an action option" + +#: main/packages.c:79 +#, c-format +msgid "--%s --pending does not take any non-option arguments" +msgstr "--%s --pending does not take any non-option arguments" + +#: main/packages.c:116 +msgid "" +"you must specify packages by their own names, not by quoting the names of " +"the files they come in" +msgstr "" +"you must specify packages by their own names, not by quoting the names of " +"the files they come in" + +#: main/packages.c:150 +#, c-format +msgid "Package %s listed more than once, only processing once.\n" +msgstr "Package %s listed more than once, only processing once.\n" + +#: main/packages.c:154 +#, c-format +msgid "" +"More than one copy of package %s has been unpacked\n" +" in this run ! Only configuring it once.\n" +msgstr "" +"More than one copy of package %s has been unpacked\n" +" in this run ! Only configuring it once.\n" + +#: main/packages.c:264 main/packages.c:308 main/packages.c:321 +msgid " Package " +msgstr " Package " + +#: main/packages.c:267 main/packages.c:311 main/packages.c:324 +msgid " which provides " +msgstr " which provides " + +#: main/packages.c:270 +msgid " is to be removed.\n" +msgstr " is to be removed.\n" + +#: main/packages.c:282 +msgid " Version of " +msgstr " Version of " + +#: main/packages.c:284 +msgid " on system is " +msgstr " on system is " + +#: main/packages.c:304 +#, c-format +msgid "dpkg: also configuring `%s' (required by `%s')\n" +msgstr "dpkg: also configuring `%s' (required by `%s')\n" + +#: main/packages.c:314 +msgid " is not configured yet.\n" +msgstr " is not configured yet.\n" + +#: main/packages.c:327 +msgid " is not installed.\n" +msgstr " is not installed.\n" + +#. Don't print the line about the package to be removed if +#. * that's the only line. +#. +#: main/packages.c:392 +msgid "; however:\n" +msgstr "; however:\n" + +#: main/processarc.c:105 +msgid "cannot access archive" +msgstr "cannot access archive" + +#: main/processarc.c:115 +#, c-format +msgid "error ensuring `%.250s' doesn't exist" +msgstr "error ensuring `%.250s' doesn't exist" + +#: main/processarc.c:120 +msgid "failed to exec dpkg-split to see if it's part of a multiparter" +msgstr "failed to exec dpkg-split to see if it's part of a multiparter" + +#: main/processarc.c:123 +msgid "wait for dpkg-split failed" +msgstr "wait for dpkg-split failed" + +#: main/processarc.c:144 +msgid "unable to get unique filename for control info" +msgstr "unable to get unique filename for control info" + +#: main/processarc.c:166 +msgid "failed to exec dpkg-deb to extract control information" +msgstr "failed to exec dpkg-deb to extract control information" + +#: main/processarc.c:180 +#, c-format +msgid "Recorded info about %s from %s.\n" +msgstr "Recorded info about %s from %s.\n" + +#: main/processarc.c:189 +#, c-format +msgid "package architecture (%s) does not match system (%s)" +msgstr "package architecture (%s) does not match system (%s)" + +#: main/processarc.c:206 +#, c-format +msgid "Selecting previously deselected package %s.\n" +msgstr "Selecting previously deselected package %s.\n" + +#: main/processarc.c:209 +#, c-format +msgid "Skipping deselected package %s.\n" +msgstr "Skipping deselected package %s.\n" + +#: main/processarc.c:220 +#, c-format +msgid "dpkg - warning: downgrading %.250s from %.250s to %.250s.\n" +msgstr "dpkg - warning: downgrading %.250s from %.250s to %.250s.\n" + +#: main/processarc.c:225 +#, c-format +msgid "Will not downgrade %.250s from version %.250s to %.250s, skipping.\n" +msgstr "Will not downgrade %.250s from version %.250s to %.250s, skipping.\n" + +#: main/processarc.c:235 +#, c-format +msgid "Version %.250s of %.250s already installed, skipping.\n" +msgstr "Version %.250s of %.250s already installed, skipping.\n" + +#: main/processarc.c:268 +#, c-format +msgid "" +"dpkg: regarding %s containing %s, pre-dependency problem:\n" +"%s" +msgstr "" +"dpkg: regarding %s containing %s, pre-dependency problem:\n" +"%s" + +#: main/processarc.c:271 +#, c-format +msgid "pre-dependency problem - not installing %.250s" +msgstr "pre-dependency problem - not installing %.250s" + +#: main/processarc.c:272 +msgid "dpkg: warning - ignoring pre-dependency problem !\n" +msgstr "dpkg: warning - ignoring pre-dependency problem !\n" + +#: main/processarc.c:286 +#, c-format +msgid "Preparing to replace %s %s (using %s) ...\n" +msgstr "Preparing to replace %s %s (using %s) ...\n" + +#: main/processarc.c:291 +#, c-format +msgid "Unpacking %s (from %s) ...\n" +msgstr "Unpacking %s (from %s) ...\n" + +#: main/processarc.c:311 +#, c-format +msgid "name of conffile (starting `%.250s') is too long (>%d characters)" +msgstr "name of conffile (starting `%.250s') is too long (>%d characters)" + +#: main/processarc.c:365 +#, c-format +msgid "read error in %.250s" +msgstr "read error in %.250s" + +#. conff= fopen() +#: main/processarc.c:367 +#, c-format +msgid "error closing %.250s" +msgstr "error closing %.250s" + +#: main/processarc.c:369 +#, c-format +msgid "error trying to open %.250s" +msgstr "error trying to open %.250s" + +#: main/processarc.c:401 +#, c-format +msgid "De-configuring %s, so that we can remove %s ...\n" +msgstr "De-configuring %s, so that we can remove %s ...\n" + +#: main/processarc.c:458 +#, c-format +msgid "Unpacking replacement %.250s ...\n" +msgstr "Unpacking replacement %.250s ...\n" + +#: main/processarc.c:534 +msgid "unable to exec dpkg-deb to get filesystem archive" +msgstr "unable to exec dpkg-deb to get filesystem archive" + +#: main/processarc.c:542 +msgid "unable to fdopen dpkg-deb extract pipe" +msgstr "unable to fdopen dpkg-deb extract pipe" + +#: main/processarc.c:548 +msgid "error reading dpkg-deb tar output" +msgstr "error reading dpkg-deb tar output" + +#: main/processarc.c:551 +msgid "unexpected EOF in filesystem tarfile - corrupted package archive" +msgstr "unexpected EOF in filesystem tarfile - corrupted package archive" + +#: main/processarc.c:553 +msgid "corrupted filesystem tarfile - corrupted package archive" +msgstr "corrupted filesystem tarfile - corrupted package archive" + +#: main/processarc.c:610 +#, c-format +msgid "dpkg: warning - unable to delete old file `%.250s': %s\n" +msgstr "dpkg: warning - unable to delete old file `%.250s': %s\n" + +#: main/processarc.c:632 main/processarc.c:867 main/remove.c:287 +msgid "cannot read info directory" +msgstr "cannot read info directory" + +#: main/processarc.c:645 +#, c-format +msgid "old version of package has overly-long info file name starting `%.250s'" +msgstr "" +"old version of package has overly-long info file name starting `%.250s'" + +#: main/processarc.c:657 +#, c-format +msgid "unable to remove obsolete info file `%.250s'" +msgstr "unable to remove obsolete info file `%.250s'" + +#: main/processarc.c:660 +#, c-format +msgid "unable to install (supposed) new info file `%.250s'" +msgstr "unable to install (supposed) new info file `%.250s'" + +#: main/processarc.c:667 +msgid "unable to open temp control directory" +msgstr "unable to open temp control directory" + +#: main/processarc.c:676 +#, c-format +msgid "package contains overly-long control info file name (starting `%.50s')" +msgstr "package contains overly-long control info file name (starting `%.50s')" + +#: main/processarc.c:681 +#, c-format +msgid "package control info contained directory `%.250s'" +msgstr "package control info contained directory `%.250s'" + +#: main/processarc.c:683 +#, c-format +msgid "package control info rmdir of `%.250s' didn't say not a dir" +msgstr "package control info rmdir of `%.250s' didn't say not a dir" + +#: main/processarc.c:689 +#, c-format +msgid "dpkg: warning - package %s contained list as info file" +msgstr "dpkg: warning - package %s contained list as info file" + +#: main/processarc.c:696 +#, c-format +msgid "unable to install new info file `%.250s' as `%.250s'" +msgstr "unable to install new info file `%.250s' as `%.250s'" + +#: main/processarc.c:847 +#, c-format +msgid "(Noting disappearance of %s, which has been completely replaced.)\n" +msgstr "(Noting disappearance of %s, which has been completely replaced.)\n" + +#: main/processarc.c:883 +#, c-format +msgid "unable to delete disappearing control info file `%.250s'" +msgstr "unable to delete disappearing control info file `%.250s'" + +#: main/remove.c:78 +#, c-format +msgid "" +"dpkg - warning: ignoring request to remove %.250s which isn't installed.\n" +msgstr "" +"dpkg - warning: ignoring request to remove %.250s which isn't installed.\n" + +#: main/remove.c:86 +#, c-format +msgid "" +"dpkg - warning: ignoring request to remove %.250s, only the config\n" +" files of which are on the system. Use --purge to remove them too.\n" +msgstr "" +"dpkg - warning: ignoring request to remove %.250s, only the config\n" +" files of which are on the system. Use --purge to remove them too.\n" + +#: main/remove.c:95 +msgid "This is an essential package - it should not be removed." +msgstr "This is an essential package - it should not be removed." + +#: main/remove.c:121 +#, c-format +msgid "" +"dpkg: dependency problems prevent removal of %s:\n" +"%s" +msgstr "" +"dpkg: dependency problems prevent removal of %s:\n" +"%s" + +#: main/remove.c:123 +msgid "dependency problems - not removing" +msgstr "dependency problems - not removing" + +#: main/remove.c:127 +#, c-format +msgid "" +"dpkg: %s: dependency problems, but removing anyway as you request:\n" +"%s" +msgstr "" +"dpkg: %s: dependency problems, but removing anyway as you request:\n" +"%s" + +#: main/remove.c:135 +msgid "" +"Package is in a very bad inconsistent state - you should\n" +" reinstall it before attempting a removal." +msgstr "" +"Package is in a very bad inconsistent state - you should\n" +" reinstall it before attempting a removal." + +#: main/remove.c:142 +#, c-format +msgid "Would remove or purge %s ...\n" +msgstr "Would remove or purge %s ...\n" + +#: main/remove.c:150 +#, c-format +msgid "Removing %s ...\n" +msgstr "Removing %s ...\n" + +#: main/remove.c:246 +#, c-format +msgid "" +"dpkg - warning: while removing %.250s, directory `%.250s' not empty so not " +"removed.\n" +msgstr "" +"dpkg - warning: while removing %.250s, directory `%.250s' not empty so not " +"removed.\n" + +#: main/remove.c:252 +#, c-format +msgid "" +"dpkg - warning: while removing %.250s, unable to remove directory `%.250s': " +"%s - directory may be a mount point ?\n" +msgstr "" +"dpkg - warning: while removing %.250s, unable to remove directory `%.250s': " +"%s - directory may be a mount point ?\n" + +#: main/remove.c:259 +#, c-format +msgid "cannot remove `%.250s'" +msgstr "cannot remove `%.250s'" + +#: main/remove.c:277 +#, c-format +msgid "cannot remove file `%.250s'" +msgstr "cannot remove file `%.250s'" + +#: main/remove.c:308 +#, c-format +msgid "unable to delete control info file `%.250s'" +msgstr "unable to delete control info file `%.250s'" + +#: main/remove.c:323 +#, c-format +msgid "unable to check existence of `%.250s'" +msgstr "unable to check existence of `%.250s'" + +#: main/remove.c:338 +#, c-format +msgid "Purging configuration files for %s ...\n" +msgstr "Purging configuration files for %s ...\n" + +#: main/remove.c:382 +#, c-format +msgid "cannot remove old config file `%.250s' (= `%.250s')" +msgstr "cannot remove old config file `%.250s' (= `%.250s')" + +#: main/remove.c:397 +#, c-format +msgid "cannot read config file dir `%.250s' (from `%.250s')" +msgstr "cannot read config file dir `%.250s' (from `%.250s')" + +#: main/remove.c:432 +#, c-format +msgid "cannot remove old backup config file `%.250s' (of `%.250s')" +msgstr "cannot remove old backup config file `%.250s' (of `%.250s')" + +#: main/remove.c:461 +msgid "cannot remove old files list" +msgstr "cannot remove old files list" + +#: main/remove.c:467 +msgid "can't remove old postrm script" +msgstr "can't remove old postrm script" + +#: main/select.c:95 +msgid "--set-selections does not take any argument" +msgstr "--set-selections does not take any argument" + +#: main/select.c:114 +#, c-format +msgid "unexpected eof in package name at line %d" +msgstr "unexpected eof in package name at line %d" + +#: main/select.c:115 +#, c-format +msgid "unexpected end of line in package name at line %d" +msgstr "unexpected end of line in package name at line %d" + +#: main/select.c:119 +#, c-format +msgid "unexpected eof after package name at line %d" +msgstr "unexpected eof after package name at line %d" + +#: main/select.c:120 +#, c-format +msgid "unexpected end of line after package name at line %d" +msgstr "unexpected end of line after package name at line %d" + +#: main/select.c:129 +#, c-format +msgid "unexpected data after package and selection at line %d" +msgstr "unexpected data after package and selection at line %d" + +#: main/select.c:134 +#, c-format +msgid "illegal package name at line %d: %.250s" +msgstr "illegal package name at line %d: %.250s" + +#: main/select.c:136 +#, c-format +msgid "unknown wanted status at line %d: %.250s" +msgstr "unknown wanted status at line %d: %.250s" + +#: main/select.c:142 +msgid "read error on standard input" +msgstr "read error on standard input" + +#: main/update.c:44 +#, c-format +msgid "--%s takes no arguments" +msgstr "--%s takes no arguments" + +#: main/update.c:48 +#, c-format +msgid "--%s needs exactly one Packages file argument" +msgstr "--%s needs exactly one Packages file argument" + +#: main/update.c:57 +msgid "unable to access dpkg status area for bulk available update" +msgstr "unable to access dpkg status area for bulk available update" + +#: main/update.c:59 +msgid "bulk available update requires write access to dpkg status area" +msgstr "bulk available update requires write access to dpkg status area" + +#: main/update.c:66 +#, c-format +msgid "Replacing available packages info, using %s.\n" +msgstr "Replacing available packages info, using %s.\n" + +#: main/update.c:69 +#, c-format +msgid "Updating available packages info, using %s.\n" +msgstr "Updating available packages info, using %s.\n" + +#: main/update.c:93 +#, c-format +msgid "Information about %d package(s) was updated.\n" +msgstr "Information about %d package(s) was updated.\n" + +#: main/update.c:101 +msgid "--forget-old-unavail takes no arguments" +msgstr "--forget-old-unavail takes no arguments" + +#: dpkg-deb/build.c:50 +#, c-format +msgid "dpkg-deb - error: %s (`%s') doesn't contain any digits\n" +msgstr "dpkg-deb - error: %s (`%s') doesn't contain any digits\n" + +#: dpkg-deb/build.c:72 +msgid "--build needs a directory argument" +msgstr "--build needs a directory argument" + +#: dpkg-deb/build.c:75 +msgid "--build takes at most two arguments" +msgstr "--build takes at most two arguments" + +#: dpkg-deb/build.c:79 +#, c-format +msgid "unable to check for existence of archive `%.250s'" +msgstr "unable to check for existence of archive `%.250s'" + +#: dpkg-deb/build.c:92 +msgid "target is directory - cannot skip control file check" +msgstr "target is directory - cannot skip control file check" + +#: dpkg-deb/build.c:93 +#, c-format +msgid "" +"dpkg-deb: warning, not checking contents of control area.\n" +"dpkg-deb: building an unknown package in `%s'.\n" +msgstr "" +"dpkg-deb: warning, not checking contents of control area.\n" +"dpkg-deb: building an unknown package in `%s'.\n" + +#: dpkg-deb/build.c:110 +msgid "package name has characters that aren't lowercase alphanums or `-+.'" +msgstr "package name has characters that aren't lowercase alphanums or `-+.'" + +#: dpkg-deb/build.c:112 +#, c-format +msgid "warning, `%s' contains user-defined Priority value `%s'\n" +msgstr "warning, `%s' contains user-defined Priority value `%s'\n" + +#: dpkg-deb/build.c:117 +#, c-format +msgid "warning, `%s' contains user-defined field `%s'\n" +msgstr "warning, `%s' contains user-defined field `%s'\n" + +#: dpkg-deb/build.c:123 +#, c-format +msgid "%d errors in control file" +msgstr "%d errors in control file" + +#: dpkg-deb/build.c:134 +#, c-format +msgid "dpkg-deb: building package `%s' in `%s'.\n" +msgstr "dpkg-deb: building package `%s' in `%s'.\n" + +#: dpkg-deb/build.c:141 +#, c-format +msgid "control directory has bad permissions %03lo (must be >=0755 and <=0775)" +msgstr "" +"control directory has bad permissions %03lo (must be >=0755 and <=0775)" + +#: dpkg-deb/build.c:152 +#, c-format +msgid "maintainer script `%.50s' is not a plain file or symlink" +msgstr "maintainer script `%.50s' is not a plain file or symlink" + +#: dpkg-deb/build.c:154 +#, c-format +msgid "" +"maintainer script `%.50s' has bad permissions %03lo (must be >=0555 and " +"<=0775)" +msgstr "" +"maintainer script `%.50s' has bad permissions %03lo (must be >=0555 and " +"<=0775)" + +#: dpkg-deb/build.c:158 +#, c-format +msgid "maintainer script `%.50s' is not stattable" +msgstr "maintainer script `%.50s' is not stattable" + +#: dpkg-deb/build.c:167 +msgid "empty string from fgets reading conffiles" +msgstr "empty string from fgets reading conffiles" + +#: dpkg-deb/build.c:169 +#, fuzzy, c-format +msgid "" +"warning, conffile name `%.50s...' is too long, or missing final newline\n" +msgstr "warning, conffile name `%.50s...' is too long" + +#: dpkg-deb/build.c:181 +#, c-format +msgid "conffile `%.250s' does not appear in package" +msgstr "conffile `%.250s' does not appear in package" + +#: dpkg-deb/build.c:183 +#, c-format +msgid "conffile `%.250s' is not stattable" +msgstr "conffile `%.250s' is not stattable" + +#: dpkg-deb/build.c:185 +#, c-format +msgid "warning, conffile `%s' is not a plain file\n" +msgstr "warning, conffile `%s' is not a plain file\n" + +#: dpkg-deb/build.c:190 +msgid "error reading conffiles file" +msgstr "error reading conffiles file" + +#: dpkg-deb/build.c:193 +msgid "error opening conffiles file" +msgstr "error opening conffiles file" + +#: dpkg-deb/build.c:196 +#, c-format +msgid "dpkg-deb: ignoring %d warnings about the control file(s)\n" +msgstr "dpkg-deb: ignoring %d warnings about the control file(s)\n" + +#: dpkg-deb/build.c:202 +#, c-format +msgid "unable to create `%.255s'" +msgstr "unable to create `%.255s'" + +#: dpkg-deb/build.c:203 +#, c-format +msgid "unable to unbuffer `%.255s'" +msgstr "unable to unbuffer `%.255s'" + +#: dpkg-deb/build.c:207 dpkg-deb/build.c:254 +#, c-format +msgid "failed to chdir to `%.255s'" +msgstr "failed to chdir to `%.255s'" + +#: dpkg-deb/build.c:208 +msgid "failed to chdir to .../DEBIAN" +msgstr "failed to chdir to .../DEBIAN" + +#: dpkg-deb/build.c:209 +msgid "failed to exec tar -cf" +msgstr "failed to exec tar -cf" + +#: dpkg-deb/build.c:212 +msgid "failed to make tmpfile (control)" +msgstr "failed to make tmpfile (control)" + +#: dpkg-deb/build.c:215 +msgid "failed to exec gzip -9c" +msgstr "failed to exec gzip -9c" + +#: dpkg-deb/build.c:220 +msgid "failed to fstat tmpfile (control)" +msgstr "failed to fstat tmpfile (control)" + +#: dpkg-deb/build.c:240 +msgid "failed to rewind tmpfile (control)" +msgstr "failed to rewind tmpfile (control)" + +#: dpkg-deb/build.c:243 +msgid "failed to exec cat (control)" +msgstr "failed to exec cat (control)" + +#: dpkg-deb/build.c:249 +msgid "failed to make tmpfile (data)" +msgstr "failed to make tmpfile (data)" + +#: dpkg-deb/build.c:256 +msgid "failed to exec tar --exclude" +msgstr "failed to exec tar --exclude" + +#: dpkg-deb/build.c:263 +msgid "failed to exec gzip -9c from tar --exclude" +msgstr "failed to exec gzip -9c from tar --exclude" + +#: dpkg-deb/build.c:278 +msgid "failed to rewind tmpfile (data)" +msgstr "failed to rewind tmpfile (data)" + +#: dpkg-deb/build.c:281 +msgid "failed to exec cat (data)" +msgstr "failed to exec cat (data)" + +#: dpkg-deb/extract.c:48 +msgid "failed to exec sh -c mv foo/* &c" +msgstr "failed to exec sh -c mv foo/* &c" + +#: dpkg-deb/extract.c:55 +#, c-format +msgid "error reading %s from %.255s" +msgstr "error reading %s from %.255s" + +#: dpkg-deb/extract.c:57 +#, c-format +msgid "unexpected end of file in %s in %.255s" +msgstr "unexpected end of file in %s in %.255s" + +#: dpkg-deb/extract.c:68 split/info.c:52 +#, c-format +msgid "file `%.250s' is corrupt - %.250s length contains nulls" +msgstr "file `%.250s' is corrupt - %.250s length contains nulls" + +#: dpkg-deb/extract.c:75 split/info.c:43 +#, c-format +msgid "file `%.250s' is corrupt - bad digit (code %d) in %s" +msgstr "file `%.250s' is corrupt - bad digit (code %d) in %s" + +#: dpkg-deb/extract.c:109 +#, c-format +msgid "failed to read archive `%.255s'" +msgstr "failed to read archive `%.255s'" + +#: dpkg-deb/extract.c:110 +msgid "failed to fstat archive" +msgstr "failed to fstat archive" + +#: dpkg-deb/extract.c:122 split/info.c:93 +#, c-format +msgid "file `%.250s' is corrupt - bad magic at end of first header" +msgstr "file `%.250s' is corrupt - bad magic at end of first header" + +#: dpkg-deb/extract.c:126 +#, c-format +msgid "file `%.250s' is corrupt - negative member length %ld" +msgstr "file `%.250s' is corrupt - negative member length %ld" + +#: dpkg-deb/extract.c:129 +#, c-format +msgid "file `%.250s' is not a debian binary archive (try dpkg-split?)" +msgstr "file `%.250s' is not a debian binary archive (try dpkg-split?)" + +#: dpkg-deb/extract.c:135 +msgid "archive has no newlines in header" +msgstr "archive has no newlines in header" + +#: dpkg-deb/extract.c:138 +msgid "archive has no dot in version number" +msgstr "archive has no dot in version number" + +#: dpkg-deb/extract.c:141 +#, c-format +msgid "archive version %.250s not understood, get newer dpkg-deb" +msgstr "archive version %.250s not understood, get newer dpkg-deb" + +#: dpkg-deb/extract.c:157 +#, c-format +msgid "file `%.250s' contains ununderstood data member %.*s, giving up" +msgstr "file `%.250s' contains ununderstood data member %.*s, giving up" + +#: dpkg-deb/extract.c:162 +#, c-format +msgid "file `%.250s' contains two control members, giving up" +msgstr "file `%.250s' contains two control members, giving up" + +#: dpkg-deb/extract.c:174 +#, c-format +msgid "" +" new debian package, version %s.\n" +" size %ld bytes: control archive= %ld bytes.\n" +msgstr "" +" new debian package, version %s.\n" +" size %ld bytes: control archive= %ld bytes.\n" + +#: dpkg-deb/extract.c:188 +#, c-format +msgid "archive has malformatted ctrl len `%s'" +msgstr "archive has malformatted ctrl len `%s'" + +#: dpkg-deb/extract.c:191 +#, c-format +msgid "" +" old debian package, version %s.\n" +" size %ld bytes: control archive= %ld, main archive= %ld.\n" +msgstr "" +" old debian package, version %s.\n" +" size %ld bytes: control archive= %ld, main archive= %ld.\n" + +#: dpkg-deb/extract.c:206 +msgid "" +"dpkg-deb: file looks like it might be an archive which has been\n" +"dpkg-deb: corrupted by being downloaded in ASCII mode\n" +msgstr "" +"dpkg-deb: file looks like it might be an archive which has been\n" +"dpkg-deb: corrupted by being downloaded in ASCII mode\n" + +#: dpkg-deb/extract.c:211 +#, c-format +msgid "`%.255s' is not a debian format archive" +msgstr "`%.255s' is not a debian format archive" + +#: dpkg-deb/extract.c:216 +#, fuzzy +msgid "fgetpos failed" +msgstr "fork failed" + +#: dpkg-deb/extract.c:220 +#, fuzzy +msgid "fsetpos failed" +msgstr "fork failed" + +#: dpkg-deb/extract.c:227 +msgid "failed to fdopen p1 in paste" +msgstr "failed to fdopen p1 in paste" + +#: dpkg-deb/extract.c:229 +msgid "failed to write to gzip -dc" +msgstr "failed to write to gzip -dc" + +#: dpkg-deb/extract.c:230 +msgid "failed to close gzip -dc" +msgstr "failed to close gzip -dc" + +#: dpkg-deb/extract.c:237 +msgid "failed to syscall lseek to files archive portion" +msgstr "failed to syscall lseek to files archive portion" + +#: dpkg-deb/extract.c:245 +msgid "failed to fdopen p1 in copy" +msgstr "failed to fdopen p1 in copy" + +#: dpkg-deb/extract.c:248 +msgid "failed to write to pipe in copy" +msgstr "failed to write to pipe in copy" + +#: dpkg-deb/extract.c:251 +msgid "failed to close pipe in copy" +msgstr "failed to close pipe in copy" + +#: dpkg-deb/extract.c:264 +msgid "failed to exec gzip -dc" +msgstr "failed to exec gzip -dc" + +#: dpkg-deb/extract.c:272 +msgid "failed to create directory" +msgstr "failed to create directory" + +#: dpkg-deb/extract.c:273 +msgid "failed to chdir to directory after creating it" +msgstr "failed to chdir to directory after creating it" + +#: dpkg-deb/extract.c:275 +msgid "failed to chdir to directory" +msgstr "failed to chdir to directory" + +#: dpkg-deb/extract.c:288 +msgid "failed to exec tar" +msgstr "failed to exec tar" + +#: dpkg-deb/extract.c:311 dpkg-deb/extract.c:326 dpkg-deb/info.c:66 +#, c-format +msgid "--%s needs a .deb filename argument" +msgstr "--%s needs a .deb filename argument" + +#: dpkg-deb/extract.c:314 +#, c-format +msgid "" +"--%s needs a target directory.\n" +"Perhaps you should be using dpkg --install ?" +msgstr "" +"--%s needs a target directory.\n" +"Perhaps you should be using dpkg --install ?" + +#: dpkg-deb/extract.c:317 +#, c-format +msgid "--%s takes at most two arguments (.deb and directory" +msgstr "--%s takes at most two arguments (.deb and directory" + +#: dpkg-deb/extract.c:328 +#, c-format +msgid "--%s takes only one argument (.deb filename)" +msgstr "--%s takes only one argument (.deb filename)" + +#: dpkg-deb/info.c:47 +msgid "failed to chdir to `/' for cleanup" +msgstr "failed to chdir to `/' for cleanup" + +#: dpkg-deb/info.c:49 +msgid "failed to fork for cleanup" +msgstr "failed to fork for cleanup" + +#: dpkg-deb/info.c:54 +msgid "failed to wait for rm cleanup" +msgstr "failed to wait for rm cleanup" + +#: dpkg-deb/info.c:55 +#, c-format +msgid "rm cleanup failed, code %d\n" +msgstr "rm cleanup failed, code %d\n" + +#: dpkg-deb/info.c:67 +msgid "failed to make temporary filename" +msgstr "failed to make temporary filename" + +#: dpkg-deb/info.c:71 +msgid "failed to exec rm -rf" +msgstr "failed to exec rm -rf" + +#: dpkg-deb/info.c:94 +msgid "failed to exec cat component" +msgstr "failed to exec cat component" + +#: dpkg-deb/info.c:98 +#, c-format +msgid "dpkg-deb: `%.255s' contains no control component `%.255s'\n" +msgstr "dpkg-deb: `%.255s' contains no control component `%.255s'\n" + +#: dpkg-deb/info.c:102 +#, c-format +msgid "open component `%.255s' (in %.255s) failed in an unexpected way" +msgstr "open component `%.255s' (in %.255s) failed in an unexpected way" + +#: dpkg-deb/info.c:106 +msgid "at least one requested control component missing" +msgstr "at least one requested control component missing" + +#: dpkg-deb/info.c:119 +#, c-format +msgid "cannot scan directory `%.255s'" +msgstr "cannot scan directory `%.255s'" + +#: dpkg-deb/info.c:124 +#, c-format +msgid "cannot stat `%.255s' (in `%.255s')" +msgstr "cannot stat `%.255s' (in `%.255s')" + +#: dpkg-deb/info.c:127 +#, c-format +msgid "cannot open `%.255s' (in `%.255s')" +msgstr "cannot open `%.255s' (in `%.255s')" + +#: dpkg-deb/info.c:141 +#, c-format +msgid "failed to read `%.255s' (in `%.255s')" +msgstr "failed to read `%.255s' (in `%.255s')" + +#: dpkg-deb/info.c:144 +#, c-format +msgid " %7ld bytes, %5d lines %c %-20.127s %.127s\n" +msgstr " %7ld bytes, %5d lines %c %-20.127s %.127s\n" + +#: dpkg-deb/info.c:150 +#, c-format +msgid " not a plain file %.255s\n" +msgstr " not a plain file %.255s\n" + +#: dpkg-deb/info.c:155 +#, c-format +msgid "failed to read `control' (in `%.255s')" +msgstr "failed to read `control' (in `%.255s')" + +#: dpkg-deb/info.c:156 +msgid "(no `control' file in control archive!)\n" +msgstr "(no `control' file in control archive!)\n" + +#: dpkg-deb/info.c:176 +msgid "could not open the `control' component" +msgstr "could not open the `control' component" + +#: dpkg-deb/info.c:206 +msgid "failed during read of `control' component" +msgstr "failed during read of `control' component" + +#: dpkg-deb/info.c:238 +msgid "--contents takes exactly one argument" +msgstr "--contents takes exactly one argument" + +#: dpkg-deb/main.c:44 +msgid "Debian Linux `" +msgstr "Debian Linux `" + +#: dpkg-deb/main.c:46 +msgid "" +"Copyright (C) 1994-1996 Ian Jackson. This is free software; see the\n" +"GNU General Public Licence version 2 or later for copying conditions.\n" +"There is NO warranty. See dpkg-deb --licence for details.\n" +msgstr "" +"Copyright (C) 1994-1996 Ian Jackson. This is free software; see the\n" +"GNU General Public Licence version 2 or later for copying conditions.\n" +"There is NO warranty. See dpkg-deb --licence for details.\n" + +#: dpkg-deb/main.c:53 +msgid "" +"Usage: dpkg-deb -b|--build <directory> [<deb>] Build an archive.\n" +" dpkg-deb -c|--contents <deb> List contents.\n" +" dpkg-deb -I|--info <deb> [<cfile>...] Show info to stdout.\n" +" dpkg-deb -f|--field <deb> [<cfield>...] Show field(s) to stdout.\n" +" dpkg-deb -e|--control <deb> [<directory>] Extract control info.\n" +" dpkg-deb -x|--extract <deb> <directory> Extract files.\n" +" dpkg-deb -X|--vextract <deb> <directory> Extract & list files.\n" +" dpkg-deb --fsys-tarfile <deb> Output filesystem " +"tarfile.\n" +" dpkg-deb -h|--help Display this message.\n" +" dpkg-deb --version | --licence Show version/licence.\n" +"<deb> is the filename of a Debian format archive.\n" +"<cfile> is the name of an administrative file component.\n" +"<cfield> is the name of a field in the main `control' file.\n" +"Options: -D for debugging output; --old or --new controls archive format;\n" +" --no-check to suppress control file check (build bad package).\n" +"\n" +"Use `dpkg' to install and remove packages from your system, or\n" +"`dselect' for user-friendly package management. Packages unpacked\n" +"using `dpkg-deb --extract' will be incorrectly installed !\n" +msgstr "" +"Usage: dpkg-deb -b|--build <directory> [<deb>] Build an archive.\n" +" dpkg-deb -c|--contents <deb> List contents.\n" +" dpkg-deb -I|--info <deb> [<cfile>...] Show info to stdout.\n" +" dpkg-deb -f|--field <deb> [<cfield>...] Show field(s) to stdout.\n" +" dpkg-deb -e|--control <deb> [<directory>] Extract control info.\n" +" dpkg-deb -x|--extract <deb> <directory> Extract files.\n" +" dpkg-deb -X|--vextract <deb> <directory> Extract & list files.\n" +" dpkg-deb --fsys-tarfile <deb> Output filesystem " +"tarfile.\n" +" dpkg-deb -h|--help Display this message.\n" +" dpkg-deb --version | --licence Show version/licence.\n" +"<deb> is the filename of a Debian format archive.\n" +"<cfile> is the name of an administrative file component.\n" +"<cfield> is the name of a field in the main `control' file.\n" +"Options: -D for debugging output; --old or --new controls archive format;\n" +" --no-check to suppress control file check (build bad package).\n" +"\n" +"Use `dpkg' to install and remove packages from your system, or\n" +"`dselect' for user-friendly package management. Packages unpacked\n" +"using `dpkg-deb --extract' will be incorrectly installed !\n" + +#: dpkg-deb/main.c:78 +msgid "" +"Type dpkg-deb --help for help about manipulating *.deb files;\n" +"Type dpkg --help for help about installing and deinstalling packages." +msgstr "" +"Type dpkg-deb --help for help about manipulating *.deb files;\n" +"Type dpkg --help for help about installing and deinstalling packages." + +#: split/info.c:64 +#, c-format +msgid "file `%.250s' is corrupt - %.250s missing" +msgstr "file `%.250s' is corrupt - %.250s missing" + +#: split/info.c:67 +#, c-format +msgid "file `%.250s' is corrupt - missing newline after %.250s" +msgstr "file `%.250s' is corrupt - missing newline after %.250s" + +#: split/info.c:89 +msgid "unable to seek back" +msgstr "unable to seek back" + +#: split/info.c:103 +#, c-format +msgid "file `%.250s' is corrupt - bad padding character (code %d)" +msgstr "file `%.250s' is corrupt - bad padding character (code %d)" + +#: split/info.c:107 +#, c-format +msgid "file `%.250s' is corrupt - nulls in info section" +msgstr "file `%.250s' is corrupt - nulls in info section" + +#: split/info.c:114 +#, c-format +msgid "file `%.250s' is format version `%.250s' - you need a newer dpkg-split" +msgstr "file `%.250s' is format version `%.250s' - you need a newer dpkg-split" + +#: split/info.c:122 +#, c-format +msgid "file `%.250s' is corrupt - bad MD5 checksum `%.250s'" +msgstr "file `%.250s' is corrupt - bad MD5 checksum `%.250s'" + +#: split/info.c:129 +#, c-format +msgid "file `%.250s' is corrupt - no slash between part numbers" +msgstr "file `%.250s' is corrupt - no slash between part numbers" + +#: split/info.c:138 +#, c-format +msgid "file `%.250s' is corrupt - bad part number" +msgstr "file `%.250s' is corrupt - bad part number" + +#: split/info.c:143 +#, c-format +msgid "file `%.250s' is corrupt - bad magic at end of second header" +msgstr "file `%.250s' is corrupt - bad magic at end of second header" + +#: split/info.c:145 +#, c-format +msgid "file `%.250s' is corrupt - second member is not data member" +msgstr "file `%.250s' is corrupt - second member is not data member" + +#: split/info.c:151 +#, c-format +msgid "file `%.250s' is corrupt - wrong number of parts for quoted sizes" +msgstr "file `%.250s' is corrupt - wrong number of parts for quoted sizes" + +#: split/info.c:155 +#, c-format +msgid "file `%.250s' is corrupt - size is wrong for quoted part number" +msgstr "file `%.250s' is corrupt - size is wrong for quoted part number" + +#: split/info.c:161 +#, c-format +msgid "unable to fstat part file `%.250s'" +msgstr "unable to fstat part file `%.250s'" + +#: split/info.c:167 +#, c-format +msgid "file `%.250s' is corrupt - too short" +msgstr "file `%.250s' is corrupt - too short" + +#: split/info.c:179 split/info.c:220 +#, c-format +msgid "cannot open archive part file `%.250s'" +msgstr "cannot open archive part file `%.250s'" + +#: split/info.c:181 +#, c-format +msgid "file `%.250s' is not an archive part" +msgstr "file `%.250s' is not an archive part" + +#: split/info.c:186 +#, c-format +msgid "" +"%s:\n" +" Part format version: %s\n" +" Part of package: %s\n" +" ... version: %s\n" +" ... MD5 checksum: %s\n" +" ... length: %lu bytes\n" +" ... split every: %lu bytes\n" +" Part number: %d/%d\n" +" Part length: %lu bytes\n" +" Part offset: %lu bytes\n" +" Part file size (used portion): %lu bytes\n" +"\n" +msgstr "" +"%s:\n" +" Part format version: %s\n" +" Part of package: %s\n" +" ... version: %s\n" +" ... MD5 checksum: %s\n" +" ... length: %lu bytes\n" +" ... split every: %lu bytes\n" +" Part number: %d/%d\n" +" Part length: %lu bytes\n" +" Part offset: %lu bytes\n" +" Part file size (used portion): %lu bytes\n" +"\n" + +#: split/info.c:216 +msgid "--info requires one or more part file arguments" +msgstr "--info requires one or more part file arguments" + +#: split/info.c:226 +#, c-format +msgid "file `%s' is not an archive part\n" +msgstr "file `%s' is not an archive part\n" + +#: split/join.c:48 +#, c-format +msgid "unable to open output file `%.250s'" +msgstr "unable to open output file `%.250s'" + +#: split/join.c:52 +#, c-format +msgid "unable to (re)open input part file `%.250s'" +msgstr "unable to (re)open input part file `%.250s'" + +#: split/join.c:68 +msgid "done\n" +msgstr "done\n" + +#: split/join.c:84 +#, c-format +msgid "files `%.250s' and `%.250s' are not parts of the same file" +msgstr "files `%.250s' and `%.250s' are not parts of the same file" + +#: split/join.c:89 +#, c-format +msgid "there are several versions of part %d - at least `%.250s' and `%.250s'" +msgstr "there are several versions of part %d - at least `%.250s' and `%.250s'" + +#: split/join.c:102 +msgid "--join requires one or more part file arguments" +msgstr "--join requires one or more part file arguments" + +#: split/join.c:123 +#, c-format +msgid "part %d is missing" +msgstr "part %d is missing" + +#: split/main.c:38 +msgid "Debian Linux `dpkg-split' package split/join tool; version " +msgstr "Debian Linux `dpkg-split' package split/join tool; version " + +#: split/main.c:40 +msgid "" +"Copyright (C) 1994-1996 Ian Jackson. This is free software; see the\n" +"GNU General Public Licence version 2 or later for copying conditions.\n" +"There is NO warranty. See dpkg-split --licence for details.\n" +msgstr "" +"Copyright (C) 1994-1996 Ian Jackson. This is free software; see the\n" +"GNU General Public Licence version 2 or later for copying conditions.\n" +"There is NO warranty. See dpkg-split --licence for details.\n" + +#: split/main.c:47 +msgid "" +"Usage: dpkg-split -s|--split <file> [<prefix>] Split an archive.\n" +" dpkg-split -j|--join <part> <part> ... Join parts together.\n" +" dpkg-split -I|--info <part> ... Display info about a " +"part.\n" +" dpkg-split -h|--help|--version|--licence Show " +"help/version/licence.\n" +"\n" +" dpkg-split -a|--auto -o <complete> <part> Auto-accumulate parts.\n" +" dpkg-split -l|--listq List unmatched pieces.\n" +" dpkg-split -d|--discard [<filename> ...] Discard unmatched " +"pieces.\n" +"\n" +"Options: --depotdir <directory> (default is " +msgstr "" +"Usage: dpkg-split -s|--split <file> [<prefix>] Split an archive.\n" +" dpkg-split -j|--join <part> <part> ... Join parts together.\n" +" dpkg-split -I|--info <part> ... Display info about a " +"part.\n" +" dpkg-split -h|--help|--version|--licence Show " +"help/version/licence.\n" +"\n" +" dpkg-split -a|--auto -o <complete> <part> Auto-accumulate parts.\n" +" dpkg-split -l|--listq List unmatched pieces.\n" +" dpkg-split -d|--discard [<filename> ...] Discard unmatched " +"pieces.\n" +"\n" +"Options: --depotdir <directory> (default is " + +#: split/main.c:68 +msgid "Type dpkg-split --help for help." +msgstr "Type dpkg-split --help for help." + +#: split/main.c:78 +#, c-format +msgid "error reading %s" +msgstr "error reading %s" + +#: split/main.c:82 +#, c-format +msgid "error reading %.250s" +msgstr "error reading %.250s" + +#: split/main.c:83 +#, c-format +msgid "unexpected end of file in %.250s" +msgstr "unexpected end of file in %.250s" + +#: split/main.c:101 +msgid "part size is far too large or is not positive" +msgstr "part size is far too large or is not positive" + +#: split/main.c:105 +#, c-format +msgid "part size must be at least %dk (to allow for header)" +msgstr "part size must be at least %dk (to allow for header)" + +#: split/queue.c:69 +#, c-format +msgid "unable to read depot directory `%.250s'" +msgstr "unable to read depot directory `%.250s'" + +#: split/queue.c:105 +msgid "--auto requires the use of the --output option" +msgstr "--auto requires the use of the --output option" + +#: split/queue.c:107 +msgid "--auto requires exactly one part file argument" +msgstr "--auto requires exactly one part file argument" + +#: split/queue.c:111 +#, c-format +msgid "unable to read part file `%.250s'" +msgstr "unable to read part file `%.250s'" + +#: split/queue.c:114 +#, c-format +msgid "File `%.250s' is not part of a multipart archive.\n" +msgstr "File `%.250s' is not part of a multipart archive.\n" + +#: split/queue.c:141 +#, c-format +msgid "unable to reopen part file `%.250s'" +msgstr "unable to reopen part file `%.250s'" + +#: split/queue.c:145 +#, c-format +msgid "part file `%.250s' has trailing garbage" +msgstr "part file `%.250s' has trailing garbage" + +#: split/queue.c:154 +#, c-format +msgid "unable to open new depot file `%.250s'" +msgstr "unable to open new depot file `%.250s'" + +#: split/queue.c:158 +#, c-format +msgid "unable to rename new depot file `%.250s' to `%.250s'" +msgstr "unable to rename new depot file `%.250s' to `%.250s'" + +#: split/queue.c:160 +#, c-format +msgid "Part %d of package %s filed (still want " +msgstr "Part %d of package %s filed (still want " + +#: split/queue.c:164 +msgid " and " +msgstr " and " + +#: split/queue.c:177 +#, c-format +msgid "unable to delete used-up depot file `%.250s'" +msgstr "unable to delete used-up depot file `%.250s'" + +#: split/queue.c:192 +msgid "--listq does not take any arguments" +msgstr "--listq does not take any arguments" + +#: split/queue.c:195 +msgid "Junk files left around in the depot directory:\n" +msgstr "Junk files left around in the depot directory:\n" + +#: split/queue.c:200 split/queue.c:224 +#, c-format +msgid "unable to stat `%.250s'" +msgstr "unable to stat `%.250s'" + +#: split/queue.c:203 +#, c-format +msgid " %s (%lu bytes)\n" +msgstr " %s (%lu bytes)\n" + +#: split/queue.c:205 +#, c-format +msgid " %s (not a plain file)\n" +msgstr " %s (not a plain file)\n" + +#: split/queue.c:210 +msgid "Packages not yet reassembled:\n" +msgstr "Packages not yet reassembled:\n" + +#: split/queue.c:226 +#, c-format +msgid "part file `%.250s' is not a plain file" +msgstr "part file `%.250s' is not a plain file" + +#: split/queue.c:231 +#, c-format +msgid "(total %lu bytes)\n" +msgstr "(total %lu bytes)\n" + +#: split/queue.c:254 +#, c-format +msgid "unable to discard `%.250s'" +msgstr "unable to discard `%.250s'" + +#: split/queue.c:255 +#, c-format +msgid "Deleted %s.\n" +msgstr "Deleted %s.\n" + +#: split/split.c:45 +msgid "--split needs a source filename argument" +msgstr "--split needs a source filename argument" + +#: split/split.c:48 +msgid "--split takes at most a source filename and destination prefix" +msgstr "--split takes at most a source filename and destination prefix" + +#: split/split.c:62 +#, c-format +msgid "unable to open source file `%.250s'" +msgstr "unable to open source file `%.250s'" + +#: split/split.c:63 +msgid "unable to fstat source file" +msgstr "unable to fstat source file" + +#: split/split.c:64 +#, c-format +msgid "source file `%.250s' not a plain file" +msgstr "source file `%.250s' not a plain file" + +#: split/split.c:70 +msgid "unable to exec mksplit" +msgstr "unable to exec mksplit" + +#: md5sum/md5sum.c:106 +#, c-format +msgid "%s: read error on stdin\n" +msgstr "%s: read error on stdin\n" + +#: md5sum/md5sum.c:124 md5sum/md5sum.c:250 +#, c-format +msgid "%s: error reading %s\n" +msgstr "%s: error reading %s\n" + +#: md5sum/md5sum.c:138 +msgid "" +"usage: md5sum [-bv] [-c [file]] | [file...]\n" +"Generates or checks MD5 Message Digests\n" +" -c check message digests (default is generate)\n" +" -v verbose, print file names when checking\n" +" -b read files in binary mode\n" +"The input for -c should be the list of message digests and file names\n" +"that is printed on stdout by this program when it generates digests.\n" +msgstr "" +"usage: md5sum [-bv] [-c [file]] | [file...]\n" +"Generates or checks MD5 Message Digests\n" +" -c check message digests (default is generate)\n" +" -v verbose, print file names when checking\n" +" -b read files in binary mode\n" +"The input for -c should be the list of message digests and file names\n" +"that is printed on stdout by this program when it generates digests.\n" + +#: md5sum/md5sum.c:211 +#, c-format +msgid "%s: unrecognized line: %s" +msgstr "%s: unrecognized line: %s" + +#: md5sum/md5sum.c:245 +#, c-format +msgid "%s: can't open %s\n" +msgstr "%s: can't open %s\n" + +#: md5sum/md5sum.c:258 +msgid "FAILED\n" +msgstr "FAILED\n" + +#: md5sum/md5sum.c:260 +#, c-format +msgid "%s: MD5 check failed for '%s'\n" +msgstr "%s: MD5 check failed for '%s'\n" + +#: md5sum/md5sum.c:263 +msgid "OK\n" +msgstr "OK\n" + +#: md5sum/md5sum.c:267 +#, c-format +msgid "%s: %d of %d file(s) failed MD5 check\n" +msgstr "%s: %d of %d file(s) failed MD5 check\n" + +#: md5sum/md5sum.c:269 +#, c-format +msgid "%s: no files checked\n" +msgstr "%s: no files checked\n" diff --git a/po/fr.po b/po/fr.po new file mode 100644 index 000000000..1487a29a2 --- /dev/null +++ b/po/fr.po @@ -0,0 +1,3790 @@ +# Dpkg --- the Debian GNU/Linux package maintenance system. +# +# Copyright (C) 1994,1995,1996 Ian Jackson <ian@chiark.chu.cam.ac.uk> +# Copyright (C) 1995,1996 Erick Branderhorst <branderhorst@heel.fgg.eur.nl> +# Copyright (C) 1996 Miquel van Smoorenburg <miquels@cistron.nl> +# Copyright (C) 1996 Kim-Minh Kaplan <kkaplan@cdfhp3.in2p3.fr> +# Copyright (C) 1996 Michael Shields <shields@crosslink.net> +# Copyright (C) 1995 Bruce Perens <bruce@pixar.com> +# Copyright (C) 1994 Carl Streeter <streeter@cae.wisc.edu> +# Copyright (C) 1994 Matt Welsh <mdw@sunsite.unc.edu> +# Copyright (C) 1994 Ian Murdock <imurdock@debian.org> +# Parts written by Colin Plumb and Branko Lankester in 1993. +# +# Messages français pour dpkg (Linux/GNU Debian). +# Copyright (C) 1997 Christophe Le Bars <clebars@debian.org>. +# +msgid "" +msgstr "" +"Project-Id-Version: Debian dpkg 1.4.0.14\n" +"POT-Creation-Date: 1998-11-01 17:14+0000\n" +"PO-Revision-Date: 1997-05-13 22:07 EDT\n" +"Last-Translator: Christophe Le Bars <clebars@debian.org>\n" +"Language-Team: French\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8-bit\n" + +# #######################################" +# +# Notes de traduction +# +# +# maintainer: responsable +# package: paquet +# to divert: détourner +# +# to set: paramétrer +# status: état +# unable: impossible +# failure: echec +# warning: avertissement +# to scan: parcourir +# +# force: forçage +# pattern: motif? +# to overwrite: remplacer? +# to stat: analyser? +# to rewind: revenir? (rembobiner?) +# incorporated: incorporé? +# unable seek: déplacement impossible? +# padding: remplissage? +# ou of memory: manque de mémoire? +# file details field: champ détail de fichier? +# matching: correspondance? +# +# checksums? +# depot? +# has trailing garbage? +# resolves to degenerate filename? +# readlink? +# mess? +# timestamps? +# to seek? +# buffering? +# handler? +# garbage? +# junk? +# abréviation postint... +# to fsync (synchroniser?) +#: lib/compat.c:46 +msgid "unable to open tmpfile for vsnprintf" +msgstr "impossible d'ouvrir \"tmpfile\" pour \"vsnprintf\"" + +#: lib/compat.c:48 +msgid "unable to rewind at start of vsnprintf" +msgstr "impossible de revenir au début de \"vsnprintf\"" + +#: lib/compat.c:49 +msgid "unable to truncate in vsnprintf" +msgstr "impossible de troncaténer dans \"vsnprintf\"" + +#: lib/compat.c:51 +msgid "write error in vsnprintf" +msgstr "erreur d'écriture dans \"vsnprintf\"" + +#: lib/compat.c:52 +msgid "unable to flush in vsnprintf" +msgstr "impossible de vider dans \"vsnprintf\"" + +#: lib/compat.c:53 +msgid "unable to stat in vsnprintf" +msgstr "impossible d'analyser dans \"vsnprintf\"" + +#: lib/compat.c:54 +msgid "unable to rewind in vsnprintf" +msgstr "impossible de revenir dans \"vsnprintf\"" + +#: lib/compat.c:62 +msgid "read error in vsnprintf truncated" +msgstr "erreur de lecture dans la troncaténation de \"vsnprintf\"" + +#: lib/compat.c:75 +#, c-format +msgid "System error no.%d" +msgstr "Erreur système n°.%d" + +#: lib/compat.c:85 +#, c-format +msgid "Signal no.%d" +msgstr "Signal n°.%d" + +#: lib/database.c:236 +msgid "failed write during hashreport" +msgstr "échec d'écriture durant \"hashreport\"" + +#: lib/dbmodify.c:57 +#, c-format +msgid "" +"updates directory contains file `%.250s' whose name is too long (length=%d, " +"max=%d)" +msgstr "" +"mise à jour d'un répertoire contenant un fichier `%.250s' dont le nom est " +"troplong (longueur=%d, max=%d)" + +#: lib/dbmodify.c:61 +#, c-format +msgid "" +"updates directory contains files with different length names (both %d and %d)" +msgstr "" +"mise à jour d'un répertoire contenant des fichiers avec des noms de " +"différenteslongueurs (à la fois %d et %d)" + +#: lib/dbmodify.c:75 +#, c-format +msgid "cannot scan updates directory `%.255s'" +msgstr "ne peut pas parcourir les mises à jour du répertoire `%.255s'" + +#: lib/dbmodify.c:91 +#, c-format +msgid "failed to remove incorporated update file %.255s" +msgstr "échec pour supprimer le fichier de mise à jour incorporé %.255s" + +#: lib/dbmodify.c:108 +#, c-format +msgid "unable to create %.250s" +msgstr "impossible de créer %.250s" + +#: lib/dbmodify.c:111 +#, c-format +msgid "unable to fill %.250s with padding" +msgstr "impossible de compléter %.250s avec du remplissage" + +#: lib/dbmodify.c:113 +#, c-format +msgid "unable flush %.250s after padding" +msgstr "impossible de vider %.250s après le remplissage" + +#: lib/dbmodify.c:115 +#, c-format +msgid "unable seek to start of %.250s after padding" +msgstr "déplacement impossible pour commencer à %.250s après le remplissage" + +#: lib/dbmodify.c:143 +msgid "requested operation requires superuser privilege" +msgstr "l'opération demandée requiert les privilèges du super-utilisateur" + +#: lib/dbmodify.c:148 +msgid "unable to access dpkg status area" +msgstr "impossible d'accéder à la zone d'états de dpkg" + +#: lib/dbmodify.c:150 +msgid "operation requires read/write access to dpkg status area" +msgstr "" +"opération demandant un accès en lecture-écriture dans la zone d'états de dpkg" + +#: lib/dbmodify.c:197 +#, c-format +msgid "failed to remove my own update file %.255s" +msgstr "échec pour retirer mon propre fichier de mise à jour %.255s" + +#: lib/dbmodify.c:229 +#, c-format +msgid "unable to write updated status of `%.250s'" +msgstr "impossible d'écrire l'état modifié de `%.250s'" + +#: lib/dbmodify.c:231 +#, c-format +msgid "unable to flush updated status of `%.250s'" +msgstr "impossible de vider l'état modifié de `%.250s'" + +#: lib/dbmodify.c:233 +#, c-format +msgid "unable to truncate for updated status of `%.250s'" +msgstr "impossible de troncaténer pour l'état modifié de `%.250s'" + +#: lib/dbmodify.c:235 +#, c-format +msgid "unable to fsync updated status of `%.250s'" +msgstr "impossible de \"fsync\" l'état modifié de `%.250s'" + +#: lib/dbmodify.c:237 +#, c-format +msgid "unable to close updated status of `%.250s'" +msgstr "impossible de fermer l'état modifié de `%.250s'" + +#: lib/dbmodify.c:240 +#, c-format +msgid "unable to install updated status of `%.250s'" +msgstr "impossible d'installer l'état modifié de `%.250s'" + +#: lib/dump.c:247 +#, c-format +msgid "failed to open `%s' for writing %s information" +msgstr "échec pour ouvrir `%s' afin d'écrire %s informations" + +#: lib/dump.c:250 lib/parse.c:94 +msgid "unable to set buffering on status file" +msgstr "impossible de paramétrer le \"buffering\" sur le fichier d'états" + +#: lib/dump.c:261 +#, c-format +msgid "failed to write %s record about `%.50s' to `%.250s'" +msgstr "échec pour écrire %s enregistrements de `%.50s' à `%.250s'" + +#: lib/dump.c:268 +#, c-format +msgid "failed to flush %s information to `%.250s'" +msgstr "échec pour vider %s informations dans `%.250s'" + +#: lib/dump.c:270 +#, c-format +msgid "failed to fsync %s information to `%.250s'" +msgstr "échec pour \"fsync\" %s informations dans `%.250s'" + +#: lib/dump.c:272 +#, c-format +msgid "failed to close `%.250s' after writing %s information" +msgstr "échec pour fermer `%.250s' après l'écriture de %s informations" + +#: lib/dump.c:276 +#, c-format +msgid "failed to link `%.250s' to `%.250s' for backup of %s info" +msgstr "échec pour lier `%.250s' à `%.250s' pour la sauvegarde de %s infos" + +#: lib/dump.c:279 +#, c-format +msgid "failed to install `%.250s' as `%.250s' containing %s info" +msgstr "échec pour installer `%.250s' comme `%.250s' contenant %s infos" + +#: lib/ehandle.c:80 +msgid "out of memory pushing error handler: " +msgstr "manque de mémoire déclenchant le \"handler\" d'erreur: " + +#: lib/ehandle.c:95 +#, c-format +msgid "" +"%s: error while cleaning up:\n" +" %s\n" +msgstr "" +"%s: erreur lors du nettoyage:\n" +" %s\n" + +#: lib/ehandle.c:110 +msgid "dpkg: too many nested errors during error recovery !!\n" +msgstr "dpkg: trop d'erreurs imbriquées lors d'une reprise d'erreur!!\n" + +#: lib/ehandle.c:183 +msgid "out of memory for new cleanup entry with many arguments" +msgstr "" +"manque de mémoire pour une nouvelle entrée nettoyée avec beaucoup d'arguments" + +#: lib/ehandle.c:270 +#, c-format +msgid "error writing `%.250s'" +msgstr "erreur d'écriture `%.250s'" + +#: lib/ehandle.c:274 +#, c-format +msgid "%s:%d: internal error `%s'\n" +msgstr "%s:%d: erreur interne `%s'\n" + +#: lib/fields.c:47 +#, c-format +msgid "`%.*s' is not allowed for %s" +msgstr "`%.*s' n'est pas autorisé pour %s" + +#: lib/fields.c:52 +#, c-format +msgid "junk after %s" +msgstr "\"junk\" après %s" + +#: lib/fields.c:62 +#, c-format +msgid "invalid package name (%.250s)" +msgstr "nom de paquet invalide (%.250s)" + +#: lib/fields.c:81 +#, c-format +msgid "empty file details field `%s'" +msgstr "champ détail de fichier '%s' vide" + +#: lib/fields.c:84 +#, c-format +msgid "file details field `%s' not allowed in status file" +msgstr "champ détail de fichier `%s' non-autorisé dans le fichier d'états" + +#: lib/fields.c:94 +#, c-format +msgid "too many values in file details field `%s' (compared to others)" +msgstr "" +"trop de valeurs dans le champ détail de fichier `%s' (par rapport aux autres)" + +#: lib/fields.c:107 +#, c-format +msgid "too few values in file details field `%s' (compared to others)" +msgstr "" +"trop peu de valeurs dans le champ détail de fichier `%s' (par rapport aux " +"autres)" + +#: lib/fields.c:156 +msgid "value for `status' field not allowed in this context" +msgstr "valeur du champ `status' non autorisée dans ce contexte" + +#: lib/fields.c:178 +#, c-format +msgid "error in Version string `%.250s': %.250s" +msgstr "erreur dans la chaine Version `%.250s': %.250s" + +#: lib/fields.c:189 +msgid "obsolete `Revision' or `Package-Revision' field used" +msgstr "utilisation d'un champ obsolète `Revision' ou `Package-Revision'" + +#: lib/fields.c:207 +msgid "value for `config-version' field not allowed in this context" +msgstr "valeur du champ `config-version' non-autorisée dans ce contexte" + +#: lib/fields.c:211 +#, c-format +msgid "error in Config-Version string `%.250s': %.250s" +msgstr "erreur dans la chaine Config-Version `%.250s': %.250s" + +#: lib/fields.c:227 +#, c-format +msgid "value for `conffiles' has line starting with non-space `%c'" +msgstr "" +"valeur de `conffiles' contenant une ligne commençant par le caractère `%c'" + +#: lib/fields.c:233 +#, c-format +msgid "value for `conffiles' has malformatted line `%.*s'" +msgstr "valeur de `conffiles' contenant la ligne mal-formatée `%.*s'" + +#: lib/fields.c:239 +msgid "root or null directory is listed as a conffile" +msgstr "répertoire racine ou nul déclaré comme \"conffile\"" + +#: lib/fields.c:282 +#, c-format +msgid "" +"`%s' field, missing package name, or garbage where package name expected" +msgstr "" +"champ `%s', nom de paquet manquant, ou \"garbage\" à la place d'un nom de " +"paquet" + +#: lib/fields.c:285 +#, c-format +msgid "`%s' field, invalid package name `%.255s': %s" +msgstr "champ `%s', nom de paquet invalide `%.255s': %s" + +#: lib/fields.c:316 +#, c-format +msgid "" +"`%s' field, reference to `%.255s':\n" +" bad version relationship %c%c" +msgstr "" +"champ `%s', référence à `%.255s':\n" +" mauvaise version de la relation %c%c" + +#: lib/fields.c:322 +#, c-format +msgid "" +"`%s' field, reference to `%.255s':\n" +" `%c' is obsolete, use `%c=' or `%c%c' instead" +msgstr "" +"champ `%s', référence à `%.255s':\n" +" `%c' est obsolète, utiliser `%c=' ou `%c%c' à la place" + +#: lib/fields.c:332 +#, c-format +msgid "" +"`%s' field, reference to `%.255s':\n" +" implicit exact match on version number, suggest using `=' instead" +msgstr "" +"champ `%s', référence à `%.255s':\n" +" correspondance exacte implicite pour le numéro de version, utiliser plutôt " +"`=' à la place" + +#: lib/fields.c:339 +#, c-format +msgid "" +"`%s' field, reference to `%.255s':\n" +" version value starts with non-alphanumeric, suggest adding a space" +msgstr "" +"champ `%s', référence à `%.255s':\n" +" valeur de version commençant avec un caractère non-alphanumérique, ajouter " +"plutôt un espace" + +#: lib/fields.c:349 +#, c-format +msgid "`%s' field, reference to `%.255s': version contains `('" +msgstr "champ `%s', référence à `%.255s': version contenant `('" + +#: lib/fields.c:352 +#, c-format +msgid "`%s' field, reference to `%.255s': version unterminated" +msgstr "champ `%s', référence à `%.255s': version non-terminée" + +#: lib/fields.c:357 +#, c-format +msgid "`%s' field, reference to `%.255s': error in version: %.255s" +msgstr "champ `%s', référence à `%.255s': erreur dans la version: %.255s" + +#: lib/fields.c:366 +#, c-format +msgid "`%s' field, syntax error after reference to package `%.255s'" +msgstr "champ `%s', erreur de syntaxe après la référence au paquet `%.255s'" + +#: lib/fields.c:373 +#, c-format +msgid "alternatives (`|') not allowed in %s field" +msgstr "alternatives (`|') non-autorisées dans le champ %s" + +#: lib/lock.c:47 +msgid "unable to unlock dpkg status database" +msgstr "impossible de dévérouiller la base de données d'états de dpkg" + +#: lib/lock.c:68 +msgid "you do not have permission to lock the dpkg status database" +msgstr "" +"vous n'avez pas la permission de vérouiller la base de données d'états de " +"dpkg" + +#: lib/lock.c:69 +msgid "unable to open/create status database lockfile" +msgstr "" +"impossible de créer/ouvrir le fichier verrou de la base de données d'états" + +#: lib/lock.c:78 +msgid "status database area is locked - another dpkg/dselect is running" +msgstr "" +"zone de la base de données d'états verrouillée - un autre dpkg/dselect " +"fonctionne" + +#: lib/lock.c:79 +msgid "unable to lock dpkg status database" +msgstr "impossible de verrouiller la base de données d'états" + +#: lib/mlib.c:47 +#, c-format +msgid "malloc failed (%ld bytes)" +msgstr "échec de `malloc' (%ld octects)" + +#: lib/mlib.c:60 +#, c-format +msgid "realloc failed (%ld bytes)" +msgstr "échec de `realloc' (%ld octects)" + +#: lib/mlib.c:67 +#, c-format +msgid "%s (subprocess): %s\n" +msgstr "%s (sous-processus): %s\n" + +#: lib/mlib.c:80 +msgid "fork failed" +msgstr "échec de \"fork\"" + +#: lib/mlib.c:93 +#, c-format +msgid "failed to dup for std%s" +msgstr "échec pour \"dup\" vers std%s" + +#: lib/mlib.c:94 +#, c-format +msgid "failed to dup for fd %d" +msgstr "échec pour dup vers fd %d" + +#: lib/mlib.c:100 +msgid "failed to create pipe" +msgstr "échec pour créer un tube" + +#: lib/mlib.c:107 +#, c-format +msgid "subprocess %s returned error exit status %d" +msgstr "sous-processus %s a retourné une erreur de sortie d'état %d" + +#: lib/mlib.c:110 +#, c-format +msgid "subprocess %s killed by signal (%s)%s" +msgstr "sous-processus %s tué par le signal (%s)%s" + +#: lib/mlib.c:113 +#, c-format +msgid "subprocess %s failed with wait status code %d" +msgstr "sous-processus %s a échoué avec le code d'état d'attente %d" + +#: lib/mlib.c:122 main/help.c:350 +#, c-format +msgid "wait for %s failed" +msgstr "attente de l'échec de %s" + +#: lib/myopt.c:48 +#, c-format +msgid "unknown option --%s" +msgstr "option --%s inconnue" + +#: lib/myopt.c:52 +#, c-format +msgid "--%s option takes a value" +msgstr "l'option --%s prend une valeur" + +#: lib/myopt.c:57 +#, c-format +msgid "--%s option does not take a value" +msgstr "l'option --%s ne prend pas de valeur" + +#: lib/myopt.c:64 +#, c-format +msgid "unknown option -%c" +msgstr "option -%c inconnue" + +#: lib/myopt.c:69 +#, c-format +msgid "-%c option takes a value" +msgstr "l'option -%c prend une valeur" + +#: lib/myopt.c:77 +#, c-format +msgid "-%c option does not take a value" +msgstr "l'option -%c ne prend pas de valeur" + +#: lib/parse.c:90 +#, c-format +msgid "failed to open package info file `%.255s' for reading" +msgstr "échec pour ouvrir le fichier \"info\" `%.255s' en lecture" + +#: lib/parse.c:121 +#, c-format +msgid "EOF after field name `%.50s'" +msgstr "EOF après le nom de champ `%.50s'" + +#: lib/parse.c:124 +#, c-format +msgid "newline in field name `%.50s'" +msgstr "saut de ligne dans le nom de champ `%.50s'" + +#: lib/parse.c:127 +#, c-format +msgid "MSDOS EOF (^Z) in field name `%.50s'" +msgstr "EOF de MSDOS (^Z) dans le nom de champ `%.50s'" + +#: lib/parse.c:130 +#, c-format +msgid "field name `%.50s' must be followed by colon" +msgstr "nom de champ `%.50s' devant être suivi par deux-points" + +#: lib/parse.c:138 +#, c-format +msgid "EOF before value of field `%.50s' (missing final newline)" +msgstr "EOF avant la valeur du champ `%.50s' (manque le saut de ligne final)" + +#: lib/parse.c:142 +#, c-format +msgid "MSDOS EOF char in value of field `%.50s' (missing newline?)" +msgstr "" +"caractère EOF de MSDOS dans la valeur du champ `%.50s' (manque un saut de " +"ligne?)" + +#: lib/parse.c:153 +#, c-format +msgid "EOF during value of field `%.50s' (missing final newline)" +msgstr "EOF dans la valeur du champ `%.50s' (manque le saut de ligne final)" + +#: lib/parse.c:170 +#, c-format +msgid "duplicate value for `%s' field" +msgstr "valeur en double pour le champ `%s'" + +#: lib/parse.c:175 +#, c-format +msgid "user-defined field name `%s' too short" +msgstr "nom de champ `%s' défini par l'utilisateur trop court" + +#: lib/parse.c:180 +#, c-format +msgid "duplicate value for user-defined field `%.50s'" +msgstr "valeur en double pour le champ `%.50s' défini par l'utilisateur" + +#: lib/parse.c:193 +msgid "several package info entries found, only one allowed" +msgstr "plusieurs entrées d'infos de paquet trouvées, seule une est autorisée" + +#: lib/parse.c:221 +msgid "Configured-Version for package with inappropriate Status" +msgstr "\"Configured-Version\" du paquet avec un état inapproprié" + +#: lib/parse.c:235 +msgid "Package which in state not-installed has conffiles, forgetting them" +msgstr "" +"Paquet dans l'état non-installé possédant des fichiers de configuration, " +"fichiers ignorés" + +#: lib/parse.c:283 +#, c-format +msgid "failed to read from `%.255s'" +msgstr "échec pour lire à partir de `%.255s'" + +#: lib/parse.c:285 +#, c-format +msgid "failed to close after read: `%.255s'" +msgstr "échec pour fermer après lecture: `%.255s'" + +#: lib/parse.c:286 +#, c-format +msgid "no package information in `%.255s'" +msgstr "pas d'informations du paquet dans `%.255s'" + +#: lib/parsehelp.c:38 +#, c-format +msgid "failed to read `%s' at line %d" +msgstr "échec pour lire `%s' à la ligne %d" + +#: lib/parsehelp.c:39 +#, c-format +msgid "%s, in file `%.255s' near line %d" +msgstr "%s, dans le fichier `%.255s' près de la ligne %d" + +#: lib/parsehelp.c:40 +msgid "warning" +msgstr "avertissement" + +#: lib/parsehelp.c:40 +msgid "parse error" +msgstr "erreur d'analyse syntaxique" + +#: lib/parsehelp.c:42 +#, c-format +msgid " package `%.255s'" +msgstr " paquet `%.255s'" + +#: lib/parsehelp.c:53 +msgid "failed to write parsing warning" +msgstr "échec pour écrire un avertissement d'analyse syntaxique" + +#: lib/parsehelp.c:114 +msgid "may not be empty string" +msgstr "ne doit pas être une chaine vide" + +#: lib/parsehelp.c:115 +msgid "must start with an alphanumeric" +msgstr "doit commencer par un caractère alphanumérique" + +#: lib/parsehelp.c:116 +msgid "must be at least two characters" +msgstr "doit être au moins de deux caractères" + +#: lib/parsehelp.c:125 +#, c-format +msgid "character `%c' not allowed - only letters, digits and %s allowed" +msgstr "" +"caractère `%c' non-autorisé - seuls les lettres, les chiffres et %s sont " +"autorisés" + +#: lib/parsehelp.c:194 +msgid "version string is empty" +msgstr "la chaine version est vide" + +#: lib/parsehelp.c:199 +msgid "epoch in version is not number" +msgstr "\"epoch\" dans la version n'est pas un nombre" + +#: lib/parsehelp.c:200 +msgid "nothing after colon in version number" +msgstr "rien après deux-points dans le nombre de la version" + +#: lib/parsehelp.c:221 +#, c-format +msgid "missing %s" +msgstr "manque %s" + +#: lib/parsehelp.c:225 +#, c-format +msgid "empty value for %s" +msgstr "valeur nulle pour %s" + +#: lib/showcright.c:31 +msgid "cannot open GPL file /usr/doc/dpkg/copyright" +msgstr "ne peut pas ouvrir le fichier GPL /usr/doc/dpkg/copyright" + +#: lib/showcright.c:34 +msgid "unable to exec cat for displaying GPL file" +msgstr "impossible d'exécuter \"cat\" pour afficher le fichier GPL" + +#: lib/varbuf.c:76 +msgid "failed to realloc for variable buffer" +msgstr "échec pour réallouer les variables \"buffer\"" + +#: main/archives.c:123 +msgid "error reading from dpkg-deb pipe" +msgstr "erreur en lisant du tube de dpkg-deb" + +#: main/archives.c:160 +#, c-format +msgid "error setting timestamps of `%.255s'" +msgstr "erreur en paramétrant les \"timestamps\" de `%.255s'" + +#: main/archives.c:165 main/archives.c:407 +#, c-format +msgid "error setting ownership of `%.255s'" +msgstr "erreur en paramétrant les droits de `%.255s'" + +#: main/archives.c:167 main/archives.c:415 +#, c-format +msgid "error setting permissions of `%.255s'" +msgstr "erreur en paramétrant les permissions de `%.255s'" + +#: main/archives.c:248 +#, c-format +msgid "" +"trying to overwrite `%.250s', which is the diverted version of " +"`%.250s'%.10s%.100s%.10s" +msgstr "" +"tentative pour remplacer `%.250s', qui est la version détournée de " +"`%.250s'%.10s%.100s%.10s" + +#: main/archives.c:274 +#, c-format +msgid "unable to stat `%.255s' (which I was about to install)" +msgstr "impossible d'analyser `%.255s' (lequel était en cours d'installation)" + +#: main/archives.c:282 +#, c-format +msgid "" +"unable to clean up mess surrounding `%.255s' before installing another " +"version" +msgstr "" +"impossible de nettoyer des choses entourant `%.255s' avant d'installer " +"uneautre version" + +#: main/archives.c:288 +#, c-format +msgid "unable to stat restored `%.255s' before installing another version" +msgstr "" +"impossible d'analyser `%.255s' restauré avant d'installer une autre version" + +#: main/archives.c:320 +#, c-format +msgid "archive contained object `%.255s' of unknown type 0x%x" +msgstr "l'archive contient un objet `%.255s' de type inconnu 0x%x" + +#: main/archives.c:355 +#, c-format +msgid "" +"trying to overwrite directory `%.250s' in package %.250s with nondirectory" +msgstr "" +"tentative pour remplacer le répertoire `%.250s' du paquet %.250s avec un " +"non-répertoire" + +#: main/archives.c:360 +#, c-format +msgid "trying to overwrite `%.250s', which is also in package %.250s" +msgstr "" +"tentative pour remplacer `%.250s', qui appartient aussi au paquet %.250s" + +#: main/archives.c:388 +#, c-format +msgid "unable to fdopen for `%.255s'" +msgstr "impossible de faire \"fdopen\" pour `%.255s'" + +#: main/archives.c:397 +#, c-format +msgid "error reading dpkg-deb during `%.255s'" +msgstr "erreur de lecture de dpkg-deb pendant `%.255s'" + +#: main/archives.c:404 +#, c-format +msgid "error writing to `%.255s'" +msgstr "erreur en écrivant dans `%.255s'" + +#: main/archives.c:413 +#, c-format +msgid "error flushing `%.255s'" +msgstr "erreur en vidant `%.255s'" + +#: main/archives.c:418 +#, c-format +msgid "error closing/writing `%.255s'" +msgstr "erreur en fermant/écrivant `%.255s'" + +#: main/archives.c:423 +#, c-format +msgid "error creating pipe `%.255s'" +msgstr "erreur en créant le tube `%.255s'" + +#: main/archives.c:429 +#, c-format +msgid "error creating device `%.255s'" +msgstr "erreur en créant le périphérique `%.255s'" + +#: main/archives.c:438 +#, c-format +msgid "error creating hard link `%.255s'" +msgstr "erreur en créant le lien physique `%.255s'" + +#: main/archives.c:445 +#, c-format +msgid "error creating symbolic link `%.255s'" +msgstr "erreur en créant le lien symbolique `%.255s'" + +#: main/archives.c:452 +#, c-format +msgid "error setting ownership of symlink `%.255s'" +msgstr "erreur en paramétrant les droits du lien symbolique `%.255s'" + +#: main/archives.c:458 +#, c-format +msgid "error creating directory `%.255s'" +msgstr "erreur en créant le répertoire `%.255s'" + +#: main/archives.c:463 +msgid "bad tar type, but already checked" +msgstr "mauvais type de tar, mais déjà contrôlé" + +#: main/archives.c:493 +#, c-format +msgid "unable to move aside `%.255s' to install new version" +msgstr "" +"impossible de déplacer ailleurs `%.255s' pour installer une nouvelle version" + +#: main/archives.c:506 +#, c-format +msgid "unable to make backup symlink for `%.255s'" +msgstr "impossible de faire un lien symbolique de secours pour `%.255s'" + +#: main/archives.c:512 +#, c-format +msgid "unable to chown backup symlink for `%.255s'" +msgstr "" +"impossible de modifier les droits du lien symbolique de secours pour `%.255s'" + +#: main/archives.c:516 +#, c-format +msgid "unable to make backup link of `%.255s' before installing new version" +msgstr "" +"impossible de faire un lien symbolique de secours de `%.255s' avant " +"d'installer une nouvelle version" + +#: main/archives.c:522 +#, c-format +msgid "unable to install new version of `%.255s'" +msgstr "impossible d'installer une nouvelle version de `%.255s'" + +#: main/archives.c:536 +#, c-format +msgid "" +"dpkg: warning - ignoring dependency problem with removal of %s:\n" +"%s" +msgstr "" +"dpkg: avertissement - problème de dépendance ignoré pendant la suppression " +"de %s:\n" +"%s" + +#: main/archives.c:543 +#, c-format +msgid "" +"dpkg: warning - considering deconfiguration of essential\n" +" package %s, to enable removal of %s.\n" +msgstr "" +"dpkg: avertissement - décision de déconfigurer le paquet\n" +" essentiel %s pour autoriser la suppression de %s.\n" + +#: main/archives.c:547 +#, c-format +msgid "" +"dpkg: no, %s is essential, will not deconfigure\n" +" it in order to enable removal of %s.\n" +msgstr "" +"dpkg: non, %s est essentiel, il ne sera pas déconfigurer\n" +" pour autoriser la suppression de %s.\n" + +#: main/archives.c:560 +#, c-format +msgid "" +"dpkg: no, cannot remove %s (--auto-deconfigure will help):\n" +"%s" +msgstr "" +"dpkg: non, ne peut retirer %s (voir --auto-deconfigure):\n" +"%s" + +#: main/archives.c:594 +#, c-format +msgid "dpkg: considering removing %s in favour of %s ...\n" +msgstr "dpkg: décision pour retirer %s en faveur de %s ...\n" + +#: main/archives.c:598 +#, c-format +msgid "%s is not properly installed - ignoring any dependencies on it.\n" +msgstr "%s n'est pas correctement installé - ses dépendances sont ignorés.\n" + +#: main/archives.c:625 +#, c-format +msgid "dpkg: may have trouble removing %s, as it provides %s ...\n" +msgstr "" +"dpkg: la suppression de %s peut-être problématique, puisqu'il fournit %s " +"...\n" + +#: main/archives.c:640 +#, c-format +msgid "" +"dpkg: package %s requires reinstallation, but will remove anyway as you " +"request.\n" +msgstr "" +"dpkg: le paquet %s requiert une réinstallation, mais suppressioncomme " +"demandée.\n" + +#: main/archives.c:643 +#, c-format +msgid "dpkg: package %s requires reinstallation, will not remove.\n" +msgstr "dpkg: le paquet %s requiert une réinstallation, suppression annulée.\n" + +#: main/archives.c:652 +#, c-format +msgid "dpkg: yes, will remove %s in favour of %s.\n" +msgstr "dpkg: oui, suppression de %s en faveur de %s.\n" + +#: main/archives.c:660 +#, c-format +msgid "" +"dpkg: regarding %s containing %s:\n" +"%s" +msgstr "" +"dpkg: concernant %s contenant %s:\n" +"%s" + +#: main/archives.c:663 +#, c-format +msgid "conflicting packages - not installing %.250s" +msgstr "paquets en conflit - %.250s non installé" + +#: main/archives.c:664 +msgid "dpkg: warning - ignoring conflict, may proceed anyway !\n" +msgstr "dpkg: avertissement - conflit ignoré, poursuite possible !\n" + +#: main/archives.c:701 +#, c-format +msgid "--%s --recursive needs at least one path argument" +msgstr "--%s --recursive a besoin au moins d'un chemin comme argument" + +#: main/archives.c:730 +msgid "failed to exec find for --recursive" +msgstr "échec pour exécuter \"find\" pour --recursive" + +#: main/archives.c:734 +msgid "failed to fdopen find's pipe" +msgstr "échec pour \"fdopen\" le tube de \"find\"" + +#: main/archives.c:741 +msgid "error reading find's pipe" +msgstr "erreur en lisant le tube de \"find\"" + +#: main/archives.c:742 +msgid "error closing find's pipe" +msgstr "erreur en fermant le tube de \"find\"" + +#: main/archives.c:745 +msgid "searched, but found no packages (files matching *.deb" +msgstr "recherché, mais aucun paquet trouvé (fichiers *.deb" + +#: main/archives.c:762 +#, c-format +msgid "--%s needs at least one package archive file argument" +msgstr "--%s a besoin au moins d'un fichier archive de paquet comme argument" + +#: main/archives.c:809 +msgid "unknown action" +msgstr "action inconnue" + +#: main/cleanup.c:84 +#, c-format +msgid "" +"unable to remove newly-installed version of `%.250s' to allow reinstallation " +"of backup copy" +msgstr "" +"impossible de supprimer la version nouvellement installée de `%.250s' pour " +"permettre la réinstallation d'un copie de secours" + +#: main/cleanup.c:91 +#, c-format +msgid "unable to restore backup version of `%.250s'" +msgstr "impossible de restaurer la copie de secours de `%.250s'" + +#: main/cleanup.c:97 +#, c-format +msgid "unable to remove newly-extracted version of `%.250s'" +msgstr "impossible de supprimer la version nouvellement extraite de `%.250s'" + +#: main/configure.c:80 +#, c-format +msgid "no package named `%s' is installed, cannot configure" +msgstr "aucun paquet nommé `%s' n'est installé, configuration impossible" + +#: main/configure.c:82 +#, c-format +msgid "" +"package %.250s is not ready for configuration\n" +" cannot configure (current status `%.250s')" +msgstr "" +"paquet %.250s n'est pas prêt pour la configuration\n" +" configuration impossible (état courant `%.250s')" + +#: main/configure.c:99 +#, c-format +msgid "" +"dpkg: dependency problems prevent configuration of %s:\n" +"%s" +msgstr "" +"dpkg: des problèmes de dépendances empêchent la configuration de %s:\n" +"%s" + +#: main/configure.c:102 +msgid "dependency problems - leaving unconfigured" +msgstr "problèmes de dépendances - laissé non-configuré" + +#: main/configure.c:106 +#, c-format +msgid "" +"dpkg: %s: dependency problems, but configuring anyway as you request:\n" +"%s" +msgstr "" +"dpkg: %s: problèmes de dépendances, mais configuration comme demandée:\n" +"%s" + +#: main/configure.c:114 +msgid "" +"Package is in a very bad inconsistent state - you should\n" +" reinstall it before attempting configuration." +msgstr "" +"Le paquet est dans un état très inconsistant - vous devriez\n" +" le réinstaller avant de tenter sa configuration." + +#: main/configure.c:117 +#, c-format +msgid "Setting up %s (%s) ...\n" +msgstr "Paramétrage de %s (%s) ...\n" + +#: main/configure.c:165 +#, c-format +msgid "unable to stat new dist conffile `%.250s'" +msgstr "impossible d'analyser le nouveau fichier de configuration `%.250s'" + +#: main/configure.c:174 +#, c-format +msgid "unable to change ownership of new dist conffile `%.250s'" +msgstr "" +"impossible de changer les droits du nouveau fichier de configuration `%.250s'" + +#: main/configure.c:177 +#, c-format +msgid "unable to set mode of new dist conffile `%.250s'" +msgstr "" +"impossible de changer les permissions du nouveau fichier de configuration " +"`%.250s'" + +#: main/configure.c:180 +#, c-format +msgid "unable to stat current installed conffile `%.250s'" +msgstr "" +"impossible d'analyser le fichier de configuration actuellement installé " +"`%.250s'" + +#: main/configure.c:212 +#, c-format +msgid "" +"\n" +"Configuration file `%s'" +msgstr "" +"\n" +"Fichier de configuration `%s'" + +#: main/configure.c:214 +#, c-format +msgid " (actually `%s')" +msgstr " (actuellement `%s')" + +#: main/configure.c:219 +msgid "" +"\n" +" ==> File on system created by you or by a script.\n" +" ==> File also in package provided by package maintainer.\n" +msgstr "" +"\n" +" ==> Fichier du système créé par vous ou par un script.\n" +" ==> Fichier également dans le paquet fourni par le responsable du paquet.\n" + +#: main/configure.c:226 +msgid "" +"\n" +" ==> Modified (by you or by a script) since installation.\n" +msgstr "" +"\n" +" ==> Modifié (par vous ou un script) depuis l'installation.\n" + +#: main/configure.c:227 +msgid "" +"\n" +" Not modified since installation.\n" +msgstr "" +"\n" +" Non modifié depuis l'installation.\n" + +#: main/configure.c:230 +msgid " ==> Package distributor has shipped an updated version.\n" +msgstr " ==> Le distributeur du paquet a fourni une nouvelle version.\n" + +#: main/configure.c:231 +msgid " Version in package is the same as at last installation.\n" +msgstr "" +" La version du paquet est la même que celle que la dernière " +"installation.\n" + +#: main/configure.c:236 +msgid "" +" What would you like to do about it ? Your options are:\n" +" Y or I : install the package maintainer's version\n" +" N or O : keep your currently-installed version\n" +" Z : background this process to examine the situation\n" +msgstr "" +" Que voulez-vous faire ? Vos options sont:\n" +" Y ou I : installer la version du responsable du paquet\n" +" N ou O : garder votre version actuellement installée\n" +" Z : suspendre ce processus pour examiner la situation\n" + +#: main/configure.c:242 +msgid " The default action is to keep your current version.\n" +msgstr " L'action par défaut est de garder votre version actuelle.\n" + +#: main/configure.c:244 +msgid " The default action is to install the new version.\n" +msgstr " L'action par défaut est d'installer la nouvelle version.\n" + +#: main/configure.c:250 +msgid "[default=N]" +msgstr "[défaut=N]" + +#: main/configure.c:251 +msgid "[default=Y]" +msgstr "[défaut=Y]" + +#: main/configure.c:251 +msgid "[no default]" +msgstr "[pas de défaut]" + +#: main/configure.c:254 +msgid "error writing to stderr, discovered before conffile prompt" +msgstr "" +"erreur d'écriture sur \"stderr\", constaté avant le prompt de configuration" + +#: main/configure.c:261 +msgid "read error on stdin at conffile prompt" +msgstr "erreur de lecture sur \"stdin\" au prompt de configuration" + +#: main/configure.c:262 +msgid "EOF on stdin at conffile prompt" +msgstr "EOF sur \"stdin\" au prompt de configuration" + +#: main/configure.c:277 +#, c-format +msgid "" +"Your currently installed version of the file is in:\n" +" %s\n" +"The version contained in the new version of the package is in:\n" +" %s\n" +"If you decide to take care of the update yourself, perhaps by editing\n" +" the installed version, you should choose `N' when you return, so that\n" +" I do not mess up your careful work.\n" +msgstr "" +"Votre version actuellement installée du fichier est dans:\n" +" %s\n" +"La version contenue dans le nouveau paquet est dans:\n" +" %s\n" +"Si vous décidez de prendre en charge vous-même la mise à jour, par exemple " +"en éditant\n" +" la version installée, vous devriez choisir `N' au retour, afin que\n" +" votre précieux travail ne soit pas dérangé.\n" + +#: main/configure.c:288 +msgid "Type `exit' when you're done.\n" +msgstr "Tapez `exit' lorsque vous aurez fini.\n" + +#: main/configure.c:293 +#, c-format +msgid "failed to exec shell (%.250s)" +msgstr "échec pour exécuter un shell (%.250s)" + +#: main/configure.c:296 +msgid "wait for shell failed" +msgstr "échec de l'attente du shell" + +#: main/configure.c:298 +msgid "Don't forget to foreground (`fg') this process when you're done !\n" +msgstr "" +"N'oubliez pas de mettre à l'avant plan (`fg') ce processus lorsque vous " +"aurez fini !\n" + +#: main/configure.c:319 +#, c-format +msgid "dpkg: %s: warning - failed to remove old backup `%.250s': %s\n" +msgstr "" +"dpkg: %s: avertissement - échec pour supprimer l'ancienne copie de secours " +"`%.250s': %s\n" + +#: main/configure.c:327 +#, c-format +msgid "dpkg: %s: warning - failed to rename `%.250s' to `%.250s': %s\n" +msgstr "" +"dpkg: %s: avertissement - échec pour renommer `%.250s' en `%.250s': %s\n" + +#: main/configure.c:335 +#, c-format +msgid "dpkg: %s: warning - failed to remove `%.250s': %s\n" +msgstr "dpkg: %s: avertissement - échec pour supprimer `%.250s': %s\n" + +#: main/configure.c:343 +#, c-format +msgid "dpkg: %s: warning - failed to remove old distrib version `%.250s': %s\n" +msgstr "" +"dpkg: %s: avertissement - échec pour supprimer l'ancienne copie distribuée " +"`%.250s': %s\n" + +#: main/configure.c:348 +#, c-format +msgid "dpkg: %s: warning - failed to remove `%.250s' (before overwrite): %s\n" +msgstr "" +"dpkg: %s: avertissement - échec pour supprimer `%.250s' (avant " +"remplacement): %s\n" + +#: main/configure.c:352 +#, c-format +msgid "dpkg: %s: warning - failed to link `%.250s' to `%.250s': %s\n" +msgstr "dpkg: %s: avertissement - échec pour lier `%.250s' à `%.250s': %s\n" + +#: main/configure.c:356 +#, c-format +msgid "Installing new version of config file %s ...\n" +msgstr "" +"Installation de la nouvelle version du fichier de configuration %s ...\n" + +#: main/configure.c:360 +#, c-format +msgid "unable to install `%.250s' as `%.250s'" +msgstr "impossible d'installer `%.250s' comme `%.250s'" + +#: main/configure.c:416 +#, c-format +msgid "" +"dpkg: %s: warning - unable to stat config file `%s'\n" +" (= `%s'): %s\n" +msgstr "" +"dpkg: %s: avertissement - impossible d'analyser le fichier de configuration " +"`%s'\n" +" (= `%s'): %s\n" + +#: main/configure.c:427 +#, c-format +msgid "" +"dpkg: %s: warning - config file `%s' is a circular link\n" +" (= `%s')\n" +msgstr "" +"dpkg: %s: avertissement - le fichier de configuration `%s' est un lien " +"circulaire\n" +" (= `%s')\n" + +#: main/configure.c:440 +#, c-format +msgid "" +"dpkg: %s: warning - unable to readlink conffile `%s'\n" +" (= `%s'): %s\n" +msgstr "" +"dpkg: %s: avertissement - impossible de \"readlink\" le fichier de " +"configuration `%s'\n" +" (= `%s'): %s\n" + +#: main/configure.c:459 +#, c-format +msgid "" +"dpkg: %s: warning - conffile `%.250s' resolves to degenerate filename\n" +" (`%s' is a symlink to `%s')\n" +msgstr "" +"dpkg: %s: avertissement - le fichier de configuration `%.250s' \"resolves to " +"degenerate\" le nom de fichier\n" +" (`%s' est un lien symbolique vers `%s')\n" + +#: main/configure.c:472 +#, c-format +msgid "" +"dpkg: %s: warning - conffile `%.250s' is not a plain file or symlink (= " +"`%s')\n" +msgstr "" +"dpkg: %s: avertissement - le fichier de configuration `%.250s' n'est pas un " +"vrai fichier ou lien (= `%s')\n" + +#: main/configure.c:494 +msgid "failed to exec md5sum" +msgstr "échec pour exécuter \"md5sum\"" + +#: main/configure.c:499 +#, c-format +msgid "unable to fdopen for md5sum of `%.250s'" +msgstr "impossible de \"fdopen\" pour le \"md5sum\" de `%.250s'" + +#: main/configure.c:507 +msgid "error reading pipe from md5sum" +msgstr "erreur en lisant le tube de \"md5sum\"" + +#: main/configure.c:508 +msgid "error closing pipe from md5sum" +msgstr "erreur en fermant le tube de \"md5sum\"" + +#. file= fdopen(p1[0]) +#. m_pipe() +#. fd= open(cdr.buf) +#: main/configure.c:512 +#, c-format +msgid "md5sum gave malformatted output `%.250s'" +msgstr "\"md5sum\" donne la sortie malformatée `%.250s'" + +#: main/configure.c:516 +#, c-format +msgid "dpkg: %s: warning - unable to open conffile %s for hash: %s\n" +msgstr "" +"dpkg: %s: avertissement -- impossible d'ouvrir le fichier de configuration " +"%s pour hachage: %s\n" + +#: main/depcon.c:73 +#, c-format +msgid "unable to check for existence of `%.250s'" +msgstr "impossible de vérifier l'existence de `%.250s'" + +#: main/depcon.c:136 main/packages.c:386 +msgid " depends on " +msgstr " dépend de " + +#: main/depcon.c:137 +msgid " pre-depends on " +msgstr " pré-dépend de " + +#: main/depcon.c:138 +msgid " recommends " +msgstr " recommande " + +#: main/depcon.c:139 +msgid " conflicts with " +msgstr " rentre en conflit avec " + +#: main/depcon.c:213 +#, c-format +msgid " %.250s is to be removed.\n" +msgstr " %.250s doit être supprimé.\n" + +#: main/depcon.c:216 +#, c-format +msgid " %.250s is to be deconfigured.\n" +msgstr " %.250s doit être déconfiguré.\n" + +#: main/depcon.c:220 +#, c-format +msgid " %.250s is to be installed, but is version %.250s.\n" +msgstr " %.250s doit être installé, mais c'est la version %.250s.\n" + +#: main/depcon.c:228 +#, c-format +msgid " %.250s is installed, but is version %.250s.\n" +msgstr " %.250s est installé, mais c'est la version %.250s.\n" + +#: main/depcon.c:243 +#, c-format +msgid " %.250s is unpacked, but has never been configured.\n" +msgstr " %.250s est dépaqueté, mais n'a jamais été configuré.\n" + +#: main/depcon.c:247 +#, c-format +msgid " %.250s is unpacked, but is version %.250s.\n" +msgstr " %.250s est dépaqueté, mais c'est la version %.250s.\n" + +#: main/depcon.c:253 +#, c-format +msgid " %.250s latest configured version is %.250s.\n" +msgstr " la dernière version configuré de %.250s est %.250s.\n" + +#: main/depcon.c:262 +#, c-format +msgid " %.250s is %s.\n" +msgstr " %.250s est %s.\n" + +#: main/depcon.c:298 +#, c-format +msgid " %.250s provides %.250s but is to be removed.\n" +msgstr " %.250s fourni %.250s mais doit être supprimé.\n" + +#: main/depcon.c:302 +#, c-format +msgid " %.250s provides %.250s but is to be deconfigured.\n" +msgstr " %.250s fourni %.250s mais doit être déconfiguré.\n" + +#: main/depcon.c:307 +#, c-format +msgid " %.250s provides %.250s but is %s.\n" +msgstr " %.250s fourni %.250s mais est %s.\n" + +#: main/depcon.c:352 +#, c-format +msgid " %.250s (version %.250s) is to be installed.\n" +msgstr " %.250s (version %.250s) doit être installé.\n" + +#: main/depcon.c:366 +#, c-format +msgid " %.250s (version %.250s) is %s.\n" +msgstr " %.250s (version %.250s) est %s.\n" + +#. conflicts and provides the same +#: main/depcon.c:391 +#, c-format +msgid " %.250s provides %.250s and is to be installed.\n" +msgstr " %.250s fourni %.250s et doit être installé.\n" + +#: main/depcon.c:422 +#, c-format +msgid " %.250s provides %.250s and is %s.\n" +msgstr " %.250s fourni %.250s et est %s.\n" + +#: main/enquiry.c:63 +msgid "" +"Desired=Unknown/Install/Remove/Purge\n" +"| Status=Not/Installed/Config-files/Unpacked/Failed-config/Half-installed\n" +"|/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: " +"uppercase=bad)\n" +"||/ Name Version Description\n" +"+++-===============-==============-==========================================" +"==\n" +msgstr "" +"Souhait=inconnU/Installé/suppRimé/Purgé\n" +"| Etat=Non/Installé/fichier-Config/DépaqUeté/échec-conFig/H=demi-installé\n" +"|/ Err?=(aucune)/H=arrété/R=besoin-réinstallation/X=les-deux (Etat,Err: " +"majuscule=mauvais)\n" +"||/ Nom Version Description\n" +"+++-===============-==============-==========================================" +"==\n" + +#: main/enquiry.c:121 main/select.c:80 +#, c-format +msgid "No packages found matching %s.\n" +msgstr "Aucun paquet ne correspondant à %s.\n" + +#: main/enquiry.c:146 +msgid "" +"The following packages are in a mess due to serious problems during\n" +"installation. They must be reinstalled for them (and any packages\n" +"that depend on them) to function properly:\n" +msgstr "" +"Les paquets suivants sont dans un état trouble à cause de sérieux problèmes\n" +"durant l'installation. Ils doivent être réinstallés (et tous les paquets\n" +"qui dépendent d'eux) pour qu'ils puissent fonctionner correctement:\n" + +#: main/enquiry.c:151 +msgid "" +"The following packages have been unpacked but not yet configured.\n" +"They must be configured using dpkg --configure or the configure\n" +"menu option in dselect for them to work:\n" +msgstr "" +"Les paquets suivants ont été dépaquetés mais ne sont pas configurés.\n" +"Ils doivent être configurés en utilisant dpkg --configure ou l'option\n" +"de menu configure dans dselect pour qu'ils puissent fonctionner:\n" + +#: main/enquiry.c:156 +msgid "" +"The following packages are only half configured, probably due to problems\n" +"configuring them the first time. The configuration should be retried using\n" +"dpkg --configure <package> or the configure menu option in " +msgstr "" +"Les paquets suivants sont à demi configurés, probablement à cause de " +"problèmes\n" +"durant la première configuration. La configuration devrait être réessayer " +"en\n" +"utilisant dpkg --configure ou l'option de menu configure dans " + +#: main/enquiry.c:161 +msgid "" +"The following packages are only half installed, due to problems during\n" +"installation. The installation can probably be completed by retrying it;\n" +"the packages can be removed using dselect or dpkg --remove:\n" +msgstr "" +"Les paquets suivants sont à demi installés, à cause de problèmes durant\n" +"l'installation. L'installation peut certainement être complétée en la " +"réessayant;\n" +"les paquets peuvent être supprimés en utilisant dselect ou dpkg --remove:\n" + +#: main/enquiry.c:186 +msgid "--audit does not take any arguments" +msgstr "--audit ne prend aucun argument" + +#: main/enquiry.c:237 +msgid "--yet-to-unpack does not take any arguments" +msgstr "--yet-to-unpack ne prend aucun argument" + +#: main/enquiry.c:290 +#, c-format +msgid " %d packages, from the following sections:" +msgstr " %d paquets, des sections suivantes:" + +#: main/enquiry.c:310 +#, c-format +msgid "diversion by %s" +msgstr "détourné par %s" + +#: main/enquiry.c:311 +msgid "local diversion" +msgstr "détournement local" + +#: main/enquiry.c:312 +msgid "to" +msgstr "à" + +#: main/enquiry.c:312 +msgid "from" +msgstr "de" + +#: main/enquiry.c:345 +msgid "--search needs at least one file name pattern argument" +msgstr "--search a besoin au moins d'un motif de nom de fichier comme argument" + +#: main/enquiry.c:373 +#, c-format +msgid "dpkg: %s not found.\n" +msgstr "dpkg: %s non trouvé,\n" + +#: main/enquiry.c:389 main/packages.c:109 +#, c-format +msgid "--%s needs at least one package name argument" +msgstr "--%s a besoin au moins d'un nom de paquet comme argument" + +#: main/enquiry.c:406 +#, c-format +msgid "Package `%s' is not installed and no info is available.\n" +msgstr "" +"Le paquet `%s' n'est pas installé et aucune information n'est disponible.\n" + +#: main/enquiry.c:415 +#, c-format +msgid "Package `%s' is not available.\n" +msgstr "Le paquet `%s' n'est pas disponible.\n" + +#: main/enquiry.c:425 +#, c-format +msgid "Package `%s' is not installed.\n" +msgstr "Le paquet `%s' n'est pas installé.\n" + +#: main/enquiry.c:434 +#, c-format +msgid "Package `%s' does not contain any files (!)\n" +msgstr "Le paquet `%s' ne contient aucun fichier (!)\n" + +#: main/enquiry.c:440 +msgid "locally diverted" +msgstr "détournement local" + +#: main/enquiry.c:441 +msgid "package diverts others" +msgstr "paquet détournant d'autres" + +#: main/enquiry.c:442 +#, c-format +msgid "diverted by %s" +msgstr "détourné par %s" + +#: main/enquiry.c:461 +msgid "" +"Use dpkg --info (= dpkg-deb --info) to examine archive files,\n" +"and dpkg --contents (= dpkg-deb --contents) to list their contents." +msgstr "" +"Utilisez dpkg --info (= dpkg-deb --info) pour examiner les fichiers " +"archives,\n" +"et dpkg --contents (= dpkg-deb --contents) pour afficher leurs contenus." + +#: main/enquiry.c:499 +msgid "--assert-support-predepends does not take any arguments" +msgstr "--assert-support-predepends ne prend aucun argument" + +#: main/enquiry.c:514 +msgid "" +"Version of dpkg with Pre-Depends support not yet configured.\n" +" Please use `dpkg --configure dpkg', and then try again.\n" +msgstr "" +"Version de dpkg avec support des pré-dépendances non encore configurée.\n" +" Utilisez s'il vous plaît `dpkg --configure dpkg' et essayez à nouveau.\n" + +#: main/enquiry.c:518 +msgid "" +"dpkg not recorded as installed, cannot check for Pre-Depends support !\n" +msgstr "" +"dpkg non enregistré comme installé, vérification du support des " +"pré-dépendances impossible !\n" + +#: main/enquiry.c:541 +msgid "--predep-package does not take any argument" +msgstr "--predep-package ne prend aucun argument" + +#: main/enquiry.c:593 +#, c-format +msgid "" +"dpkg: cannot see how to satisfy pre-dependency:\n" +" %s\n" +msgstr "" +"dpkg: ne peut pas voir comment satisfaire les pré-dépendances:\n" +" %s\n" + +#: main/enquiry.c:594 +#, c-format +msgid "cannot satisfy pre-dependencies for %.250s (wanted due to %.250s)" +msgstr "" +"ne peut satisfaire les pré-dépendances pour %.250s (réclamé par %.250s)" + +#: main/enquiry.c:614 +#, c-format +msgid "" +"dpkg: unexpected output from `%s --print-libgcc-file-name':\n" +" `%s'\n" +msgstr "" +"dpkg: sortie inattendu de `%s --print-libgcc-file-name':\n" +" `%s'\n" + +#: main/enquiry.c:617 +#, c-format +msgid "compiler libgcc filename not understood: %.250s" +msgstr "fichier libgcc du compilateur non compris: %.250s" + +#: main/enquiry.c:621 +msgid "--print-installation-architecture does not take any argument" +msgstr "--print-installation-architecture ne prend aucun argument" + +#: main/enquiry.c:641 +msgid "--print-architecture does not take any argument" +msgstr "--print-architecture ne prend aucun argument" + +#: main/enquiry.c:647 +msgid "failed to fdopen CC pipe" +msgstr "échec pour \"fdopen\" le tube de CC" + +#: main/enquiry.c:651 +#, c-format +msgid "failed to exec C compiler `%.250s'" +msgstr "échec pour exécuter le compilateur C `%.250s'" + +#: main/enquiry.c:655 +msgid "error reading from CC pipe" +msgstr "erreur en lisant le tube de CC" + +#: main/enquiry.c:657 +msgid "empty output" +msgstr "sortie vide" + +#: main/enquiry.c:659 +msgid "no newline" +msgstr "pas de saut de ligne" + +#: main/enquiry.c:662 +msgid "no gcc-lib component" +msgstr "pas de composant gcc-lib" + +#: main/enquiry.c:664 +msgid "no hyphen after gcc-lib" +msgstr "pas de trait d'union pas gcc-lib" + +#: main/enquiry.c:676 +#, c-format +msgid "dpkg: warning, architecture `%s' not in remapping table\n" +msgstr "" +"dpkg: avertissement, architecture `%s' inexistante dans la tale des " +"correspondances\n" + +#: main/enquiry.c:718 +msgid "--cmpversions takes three arguments: <version> <relation> <version>" +msgstr "--cmpversions prend trois arguments: <version> <relation> <version>" + +#: main/enquiry.c:723 +msgid "--cmpversions bad relation" +msgstr "--cmpversions mauvaise relation" + +#: main/enquiry.c:728 +#, c-format +msgid "version a has bad syntax: %s\n" +msgstr "mauvaise syntaxe de la version a: %s\n" + +#: main/enquiry.c:738 +#, c-format +msgid "version b has bad syntax: %s\n" +msgstr "mauvaise syntaxe de la version b: %s\n" + +#: main/errors.c:60 +msgid "" +"dpkg: failed to allocate memory for new entry in list of failed packages." +msgstr "" +"dpkg: impossible d'allouer de la mémoire pour une nouvelle entrée dans la " +"liste des paquets en échec." + +#: main/errors.c:70 +msgid "dpkg: too many errors, stopping\n" +msgstr "dpkg: trop d'erreurs, arrêt\n" + +#: main/errors.c:76 +msgid "Errors were encountered while processing:\n" +msgstr "Des erreurs ont été rencontrées pendant l'exécution:\n" + +#: main/errors.c:83 +msgid "Processing was halted because there were too many errors.\n" +msgstr "L'exécution a été arrêté car il y avait trop d'erreurs.\n" + +#: main/errors.c:91 +#, c-format +msgid "Package %s was on hold, processing it anyway as you request\n" +msgstr "Le paquet %s était suspendu, traiter quand même puisque désiré\n" + +#: main/errors.c:104 +msgid "" +"dpkg - warning, overriding problem because --force enabled:\n" +" " +msgstr "" +"dpkg - avertissement, problème de recouvrement à cause de --force:\n" +" " + +#: main/filesdb.c:116 +#, c-format +msgid "unable to open files list file for package `%.250s'" +msgstr "" +"impossible d'ouvrir le fichier comprenant la liste des fichiers du paquet " +"`%.250s'" + +#: main/filesdb.c:121 +#, c-format +msgid "" +"dpkg: serious warning: files list file for package `%.250s' missing, " +"assuming package has no files currently installed.\n" +msgstr "" +"dpkg: avertissement important: le fichier comprenant la liste des fichiers " +"du paquet `%.250s' étant manquant, il est considéré que le paquet n'a aucun " +"fichier actuellement installé.\n" + +#: main/filesdb.c:132 +#, c-format +msgid "unable to set buffering on `%.250s'" +msgstr "impossible de paramétrer le \"buffering\" sur `%.250s'" + +#: main/filesdb.c:142 +#, c-format +msgid "fgets gave an empty null-terminated string from `%.250s'" +msgstr "\"fgets\" a donné une chaine vide de `%.250s'" + +#: main/filesdb.c:160 +#, c-format +msgid "files list file for package `%.250s' contains empty filename" +msgstr "" +"la liste des fichiers pour le paquet `%.250s' contient un nom de fichier vide" + +#: main/filesdb.c:168 +#, c-format +msgid "error reading files list file for package `%.250s'" +msgstr "" +"erreur de lecture du fichier contenant la liste des fichiers du paquet " +"`%.250s'" + +#: main/filesdb.c:171 +#, c-format +msgid "error closing files list file for package `%.250s'" +msgstr "" +"erreur de fermeture du fichier contenant la liste des fichiers du paquet " +"`%.250s'" + +#: main/filesdb.c:173 +#, c-format +msgid "files list file for package `%.250s' is truncated" +msgstr "" +"le fichier contenant la liste des fichiers du paquet `%.250s' est coupé" + +#: main/filesdb.c:204 +msgid "(Reading database ... " +msgstr "(Lecture de la base de données ... " + +#: main/filesdb.c:204 +msgid "(Scanning database ... " +msgstr "(Recherche dans la base de données ... " + +#: main/filesdb.c:212 +#, c-format +msgid "%d files and directories currently installed.)\n" +msgstr "%d fichiers et répertoires déjà installés.)\n" + +#: main/filesdb.c:243 +#, c-format +msgid "unable to create updated files list file for package %s" +msgstr "" +"impossible de créer le fichier contenant la liste mise à jour des fichiers " +"du paquet %s" + +#: main/filesdb.c:253 +#, c-format +msgid "failed to write to updated files list file for package %s" +msgstr "" +"échec pour écrire le fichier contenant la liste mise à jour des fichiers du " +"paquet %s" + +#: main/filesdb.c:255 +#, c-format +msgid "failed to flush updated files list file for package %s" +msgstr "" +"échec pour vider le fichier contenant la liste mise à jour des fichiers du " +"paquet %s" + +#: main/filesdb.c:257 +#, c-format +msgid "failed to sync updated files list file for package %s" +msgstr "" +"échec pour \"sync\" le fichier contenant la liste mise à jour des fichiers " +"du paquet %s" + +#: main/filesdb.c:260 +#, c-format +msgid "failed to close updated files list file for package %s" +msgstr "" +"échec pour fermer le fichier contenant la liste mise à jour des fichiers du " +"paquet %s" + +#: main/filesdb.c:262 +#, c-format +msgid "failed to install updated files list file for package %s" +msgstr "" +"échec pour installer le fichier contenant la liste mise à jour des fichiers " +"du paquet %s" + +#: main/filesdb.c:326 +msgid "failed to open diversions file" +msgstr "échec pour ouvrir le fichier des détournements" + +#: main/filesdb.c:330 +msgid "failed to fstat previous diversions file" +msgstr "échec pour \"fstat\" l'ancien fichier des détournements" + +#: main/filesdb.c:332 +msgid "failed to fstat diversions file" +msgstr "échec pour \"fstat\" le fichier des détournements" + +#: main/filesdb.c:352 +msgid "fgets gave an empty string from diversions [i]" +msgstr "\"fgets\" a donné une chaine vide pour les détournements [i]" + +#: main/filesdb.c:353 +msgid "diversions file has too-long line or EOF [i]" +msgstr "le fichier des détournements a une ligne trop longue ou EOF [i]" + +#: main/filesdb.c:358 +msgid "read error in diversions [ii]" +msgstr "erreur de lecture dans les détournements [ii]" + +#: main/filesdb.c:359 +msgid "unexpected EOF in diversions [ii]" +msgstr "EOF inattendu dans les détournements [ii]" + +#: main/filesdb.c:361 +msgid "fgets gave an empty string from diversions [ii]" +msgstr "\"fgets\" a donné une chaine vide pour les détournements [ii]" + +#: main/filesdb.c:362 main/filesdb.c:371 +msgid "diversions file has too-long line or EOF [ii]" +msgstr "le fichier des détournements a une ligne trop longue ou EOF [ii]" + +#: main/filesdb.c:367 +msgid "read error in diversions [iii]" +msgstr "erreur de lecture dans les détournements [iii]" + +#: main/filesdb.c:368 +msgid "unexpected EOF in diversions [iii]" +msgstr "EOF inattendu dans les détournements [iii]" + +#: main/filesdb.c:370 +msgid "fgets gave an empty string from diversions [iii]" +msgstr "\"fgets\" a donné une chaine vide pour les détournements [iii]" + +#: main/filesdb.c:378 +#, c-format +msgid "conflicting diversions involving `%.250s' or `%.250s'" +msgstr "détournements contradictoires impliquant `%.250s' ou `%.250s'" + +#: main/filesdb.c:387 +msgid "read error in diversions [i]" +msgstr "erreur de lecture dans les détournements [i]" + +#: main/help.c:40 +msgid "not installed" +msgstr "non installé" + +#: main/help.c:40 +msgid "unpacked but not configured" +msgstr "dépaqueté mais non configuré" + +#: main/help.c:41 +msgid "broken due to postinst failure" +msgstr "arrêt causé par l'échec de \"postinst\"" + +#: main/help.c:42 +msgid "installed" +msgstr "installé" + +#: main/help.c:43 +msgid "broken due to failed removal" +msgstr "arrêt causé par l'échec d'une suppression" + +#: main/help.c:44 +msgid "not installed but configs remain" +msgstr "non installé mais la configuration reste" + +#: main/help.c:81 +msgid "dpkg - warning: PATH is not set.\n" +msgstr "dpkg - avertissement: la variable PATH n'est pas paramétrée.\n" + +#: main/help.c:96 +#, c-format +msgid "dpkg: `%s' not found on PATH.\n" +msgstr "dpkg: `%s' non trouvé dans la variable PATH.\n" + +#: main/help.c:102 +#, c-format +msgid "" +"%d expected program(s) not found on PATH.\n" +"NB: root's PATH should usually contain /usr/local/sbin, /usr/sbin and /sbin." +msgstr "" +"%d programme(s) attendu(s) non trouvé(s)s dans la variable PATH.\n" +"NB: la variable PATH de root doit normalement contenir /usr/local/sbin, " +"/usr/sbin et /sbin." + +#: main/help.c:210 +#, c-format +msgid "error un-catching signal %s: %s\n" +msgstr "erreur signal %s non-capturé: %s\n" + +#: main/help.c:228 +#, c-format +msgid "unable to ignore signal %s before running script" +msgstr "impossible d'ignorer le signal %s avant le lancement du script" + +#: main/help.c:237 +#, c-format +msgid "unable to set execute permissions on `%.250s'" +msgstr "impossible de paramétrer les permissions en exécution sur `%.250s'" + +#: main/help.c:261 +#, c-format +msgid "unable to stat installed %s script `%.250s'" +msgstr "impossible d'analyser le script installé %s `%.250s'" + +#: main/help.c:268 main/help.c:346 main/help.c:385 +#, c-format +msgid "unable to execute %s" +msgstr "impossible d'exécuter %s" + +#: main/help.c:297 +#, c-format +msgid "unable to stat new %s script `%.250s'" +msgstr "impossible d'analyser le nouveau script %s `%.250s'" + +#: main/help.c:304 +#, c-format +msgid "unable to execute new %s" +msgstr "impossible d'exécuter le nouveau %s" + +#: main/help.c:338 +#, c-format +msgid "dpkg: warning - unable to stat %s `%.250s': %s\n" +msgstr "dpkg: avertissement - impossible d'analyser %s `%.250s': %s\n" + +#: main/help.c:354 +#, c-format +msgid "dpkg: warning - %s returned error exit status %d\n" +msgstr "dpkg: avertissement- %s a retourné un code d'erreur de sortie %d\n" + +#: main/help.c:357 +#, c-format +msgid "dpkg: warning - %s killed by signal (%s)%s\n" +msgstr "dpkg: avertissement - %s a été tué par le signal (%s)%s\n" + +#: main/help.c:360 +#, c-format +msgid "%s failed with unknown wait status code %d" +msgstr "%s a échoué avec le code d'attente inconnu %d" + +#: main/help.c:364 +msgid "dpkg - trying script from the new package instead ...\n" +msgstr "dpkg - tentative avec le script du nouveau paquet à la place ...\n" + +#: main/help.c:371 +#, c-format +msgid "new %s script" +msgstr "nouveau script %s" + +#: main/help.c:375 +msgid "there is no script in the new version of the package - giving up" +msgstr "il n'y a pas de script dans cette nouvelle version du paquet - abandon" + +#: main/help.c:377 +#, c-format +msgid "unable to stat %s `%.250s'" +msgstr "impossible d'analyser %s `%.250s'" + +#: main/help.c:390 +msgid "dpkg: ... it looks like that went OK.\n" +msgstr "dpkg: ... tout a certainement fonctionné correctement.\n" + +#. Huh ? +#: main/help.c:469 +#, c-format +msgid "failed to rmdir/unlink `%.255s'" +msgstr "échec pour \"rmdir/unlink\" `%.255s'" + +#: dpkg-deb/info.c:52 main/help.c:473 +msgid "failed to exec rm for cleanup" +msgstr "échec pour exécuter \"rm\" pour nettoyage" + +#: main/main.c:44 +msgid "Debian Linux `dpkg' package management program version " +msgstr "Programme `dpkg' de gestion des paquets de Linux Debian version " + +#: main/main.c:47 +msgid "" +"Copyright 1994-1996 Ian Jackson, Bruce Perens. This is free software;\n" +"see the GNU General Public Licence version 2 or later for copying\n" +"conditions. There is NO warranty. See dpkg --licence for details.\n" +msgstr "" +"Copyright 1994-1996 Ian Jackson, Bruce Perens. Ceci est un logiciel libre;\n" +"consultez la GNU General Public Licence version 2 ou supérieure pour les " +"conditions\n" +"de reproduction. Il n'y a AUCUNE garantie. Consultez dpkg --licence pour " +"les détails.\n" + +#: main/main.c:57 +#, fuzzy, c-format +msgid "" +"Usage: \n" +" dpkg -i|--install <.deb file name> ... | -R|--recursive <dir> ...\n" +" dpkg --unpack <.deb file name> ... | -R|--recursive <dir> ...\n" +" dpkg -A|--record-avail <.deb file name> ... | -R|--recursive <dir> ...\n" +" dpkg --configure <package name> ... | -a|--pending\n" +" dpkg -r|--remove | --purge <package name> ... | -a|--pending\n" +" dpkg --get-selections [<pattern> ...] get list of selections to stdout\n" +" dpkg --set-selections set package selections from stdin\n" +" dpkg --update-avail <Packages-file> replace available packages info\n" +" dpkg --merge-avail <Packages-file> merge with info from file\n" +" dpkg --clear-avail erase existing available info\n" +" dpkg --forget-old-unavail forget uninstalled unavailable " +"pkgs\n" +" dpkg -s|--status <package-name> ... display package status details\n" +" dpkg --print-avail <package-name> ... display available version details\n" +" dpkg -L|--listfiles <package-name> ... list files `owned' by package(s)\n" +" dpkg -l|--list [<pattern> ...] list packages concisely\n" +" dpkg -S|--search <pattern> ... find package(s) owning file(s)\n" +" dpkg -C|--audit check for broken package(s)\n" +" dpkg --print-architecture print target architecture (uses " +"GCC)\n" +" dpkg --print-gnu-build-architecture print GNU version of target arch\n" +" dpkg --print-installation-architecture print host architecture (for " +"inst'n)\n" +" dpkg --compare-versions <a> <rel> <b> compare version numbers - see " +"below\n" +" dpkg --help | --version show this help / version number\n" +" dpkg --force-help | -Dh|--debug=help help on forcing resp. debugging\n" +" dpkg --licence print copyright licencing terms\n" +"\n" +"Use dpkg -b|--build|-c|--contents|-e|--control|-I|--info|-f|--field|\n" +" -x|--extract|-X|--vextract|--fsys-tarfile on archives (type %s --help.)\n" +"\n" +"For internal use: dpkg --assert-support-predepends | --predep-package |\n" +" --assert-working-epoch\n" +"\n" +"Options:" +msgstr "" +"Syntaxe: \n" +" dpkg -i|--install <nom fichier .deb> ... | -R|--recursive <rép> ...\n" +" dpkg --unpack <nom fichier .deb> ... | -R|--recursive <rép> ...\n" +" dpkg -A|--record-avail <nom fichier .deb> ... | -R|--recursive <rép> ...\n" +" dpkg --configure <nom paquet> ... | -a|--pending\n" +" dpkg -r|--remove | --purge <nom paquet> ... | -a|--pending\n" +" dpkg --get-selections [<motif> ...] affiche la liste des sélections " +"sur la sortie standard\n" +" dpkg --set-selections paramètre la liste des sélections " +"à partir de l'entrée standard\n" +" dpkg --update-avail <fichier Packages> remplace les informations sur les " +"paquets disponibles\n" +" dpkg --merge-avail <fichier Packages> fusionne les informations sur les " +"paquets avec le fichier\n" +" dpkg --clear-avail efface les informations sur les " +"paquets\n" +" dpkg --forget-old-unavail oublie les paquets non-installés " +"et non-disponibles\n" +" dpkg -s|--status <nom paquet> ... affiche les détails de l'état du " +"paquet\n" +" dpkg --print-avail <nom paquet> ... affiche les détails de la version " +"disponible\n" +" dpkg -L|--listfiles <nom paquet> ... liste les fichiers appartenant " +"au(x) paquet(s)\n" +" dpkg -l|--list [<motif> ...] liste les paquets en condensé\n" +" dpkg -S|--search <motif> ... trouve le(s) paquet(s) possédant " +"le(s) fichier(s)\n" +" dpkg -C|--audit vérifie la présence de paquet(s) " +"abîmé(s)\n" +" dpkg --print-architecture affiche l'architecture cible " +"(utilise GCC)\n" +" dpkg --print-gnu-build-architecture affiche la version GNU de " +"l'archive cible\n" +" dpkg --print-installation-architecture affiche l'architecture de la " +"machine (pour l'installation)\n" +" dpkg --compare-versions <a> <rel> <b> compare les nombres de version - " +"voir ci-dessous\n" +" dpkg --help | --version affiche cette aide/le numéro de " +"version\n" +" dpkg --force-help | -Dh|--debug=help aide sur respectivement le " +"forçage/débogage\n" +" dpkg --licence affiche les termes de la licence " +"copyright\n" +"\n" +"Utiliser dpkg -b|--build|-c|--contents|-e|--control|-I|--info|-f|--field|\n" +" -x|--extract|-X|--vextract|--fsys-tarfile sur les archives (taper %s " +"--help.)\n" +"\n" +"For internal use: dpkg --assert-support-predepends | --predep-package |\n" +" --assert-working-epoch\n" +"\n" +"Options:\n" +" --admindir=<directory> Use <directory> instead of %s\n" +" --root=<directory> Install on alternative system rooted elsewhere\n" +" --instdir=<directory> Change inst'n root without changing admin dir\n" +" -O|--selected-only Skip packages not selected for install/upgrade\n" +" -E|--skip-same-version Skip packages whose same version is installed\n" +" -G=--refuse-downgrade Skip packages with earlier version tha\n" +"installed\n" +" -B|--auto-deconfigure Install even if it would break some othe\n" +"package\n" +" --largemem | --smallmem Optimise for large (>4Mb) or small (<4Mb) RA\n" +"use\n" +" --no-act Just say what we would do - don't do it\n" +" -D|--debug=<octal> Enable debugging - see -Dhelp or --debug=help\n" +" --ignore-depends=<package>,... Ignore dependencies involving <package>\n" +" --force-... Override problems - see --force-help\n" +" --no-force-...|--refuse-... Stop when problems encountered\n" +"\n" +"Comparison operators for --compare-versions are:\n" +" lt le eq ne ge gt (treat no version as earlier than any version);\n" +" lt-nl le-nl ge-nl gt-nl (treat no version as later than any version);\n" +" < << <= = >= >> > (only for compatibility with control file syntax).\n" +"\n" +"Use `dselect' for user-friendly package management.\n" + +#: main/main.c:116 +msgid "" +"Type dpkg --help for help about installing and deinstalling packages [*];\n" +"Use dselect for user-friendly package management;\n" +"Type dpkg -Dhelp for a list of dpkg debug flag values;\n" +"Type dpkg --force-help for a list of forcing options;\n" +"Type dpkg-deb --help for help about manipulating *.deb files;\n" +"Type dpkg --licence for copyright licence and lack of warranty (GNU GPL) " +"[*].\n" +"\n" +"Options marked [*] produce a lot of output - pipe it through `less' or " +"`more' !" +msgstr "" +"Taper dpkg --help pour une aide sur l'installation et la désinstallation des " +"paquets [*];\n" +"Utiliser dselect pour une gestion des paquets conviviale;\n" +"Taper dpkg -Dhelp pour une liste des valeurs drapeaux de débogage;\n" +"Taper dpkg --force-help pour une liste des options de forçage;\n" +"Taper dpkg-deb --help pour une aide sur la manipulation des fichiers *.deb;\n" +"Taper dpkg --licence pour la licence copyright et le défaut de garantie (GNU " +"GPL) [*].\n" +"\n" +"Les options marquées de [*] produisent un affichage important - tuber-les à " +"travers `less' ou `more' !" + +#: dpkg-deb/main.c:130 main/main.c:171 split/main.c:142 +#, c-format +msgid "conflicting actions --%s and --%s" +msgstr "actions conflictuelles --%s et --%s" + +#: main/main.c:223 +#, c-format +msgid "null package name in --ignore-depends comma-separated list `%.250s'" +msgstr "nom de paquet vide dans la liste `%.250s' de --ignore-depends" + +#: main/main.c:229 +#, c-format +msgid "--ignore-depends requires a legal package name. `%.250s' is not; %s" +msgstr "" +"--ignore-depends requiert un nom de paquet légal. `%.250s' ne l'est pas; %s" + +#: main/main.c:245 +#, fuzzy +msgid "" +"dpkg forcing options - control behaviour when problems found:\n" +" warn but continue: --force-<thing>,<thing>,...\n" +" stop with error: --refuse-<thing>,<thing>,... | --no-force-<thing>,...\n" +" Forcing things:\n" +" auto-select [*] (De)select packages to install (remove) them\n" +" dowgrade [*] Replace a package with a lower version\n" +" configure-any Configure any package which may help this one\n" +" hold Process incidental packages even when on hold\n" +" bad-path PATH is missing important programs, problems " +"likely\n" +" not-root Try to (de)install things even when not root\n" +" overwrite Overwrite a file from one package with another\n" +" overwrite-diverted Overwrite a diverted file with an undiverted " +"version\n" +" depends-version [!] Turn dependency version problems into warnings\n" +" depends [!] Turn all dependency problems into warnings\n" +" conflicts [!] Allow installation of conflicting packages\n" +" architecture [!] Process even packages with wrong architecture\n" +" overwrite-dir [!] Overwrite one package's directory with another's " +"file\n" +" remove-reinstreq [!] Remove packages which require installation\n" +" remove-essential [!] Remove an essential package\n" +"\n" +"WARNING - use of options marked [!] can seriously damage your installation.\n" +"Forcing options marked [*] are enabled by default.\n" +msgstr "" +"options de forçage de dpkg - contrôlent le comportement en cas de " +"problèmes:\n" +" avertir mais continuer: --force-<option>,<option>,...\n" +" sortir en erreur: --refuse-<option>,<option>,... | " +"--no-force-<option>,...\n" +" Options de forçage:\n" +" auto-select [*] (Dé)sélectionner les paquets à installer " +"(supprimer)\n" +" dowgrade [*] Remplacer un paquet avec une version inférieure\n" +" configure-any Configurer tous les paquets en rapport\n" +" hold Traiter même les paquets suspendus\n" +" bad-path Programmes non-visibles par la variable PATH et " +"similaire\n" +" not-root Tenter de (dé)installer même sans être root\n" +" overwrite [*] Remplacer un fichier d'un paquet par celui d'un " +"autre\n" +" overwrite-diverted Remplacer un fichier détourné avec une version " +"non-détournée\n" +" depends-version [!] Changer les problèmes de dépendance de version en " +"avertissements\n" +" depends [!] Changer tous les problèmes de dépendance en " +"avertissements\n" +" conflicts [!] Autoriser l'installation de paquets conflictuels\n" +" architecture [!] Traiter même les paquets d'une autre architecture\n" +" overwrite-dir [!] Remplacer un répertoire d'un paquet par le fichier " +"d'un autre\n" +" remove-reinstreq [!] Supprimer les paquets requierant une installation\n" +" remove-essential [!] Supprimer un paquet essentiel\n" +"\n" +"AVERTISSEMENT - utiliser une option marquée [!] peut sérieusement endommager " +"votre installation.\n" +"Les options de forçage marquées [*] sont activées par défaut.\n" + +#: main/main.c:277 +#, c-format +msgid "unknown force/refuse option `%.*s'" +msgstr "option de forçage `%.*s' inconnue" + +#: main/main.c:353 +msgid "failed to exec dpkg-deb" +msgstr "échec pour exécuter \"dpkg-deb\"" + +#: dpkg-deb/main.c:150 main/main.c:389 split/main.c:163 +msgid "need an action option" +msgstr "manque une option d'action" + +#: main/packages.c:79 +#, c-format +msgid "--%s --pending does not take any non-option arguments" +msgstr "--%s --pending ne prend pas d'argument non-optionnel" + +#: main/packages.c:116 +msgid "" +"you must specify packages by their own names, not by quoting the names of " +"the files they come in" +msgstr "" +"vous devez spécifier les paquets par leurs noms, et non par les noms des " +"fichiers qui les contiennent" + +#: main/packages.c:150 +#, c-format +msgid "Package %s listed more than once, only processing once.\n" +msgstr "Paquet %s listé plus d'un fois, traité une seule fois.\n" + +#: main/packages.c:154 +#, c-format +msgid "" +"More than one copy of package %s has been unpacked\n" +" in this run ! Only configuring it once.\n" +msgstr "" +"Plus d'une copie du paquet %s ont été dépaquetées\n" +" dans ce traitement ! Configuration d'un seul.\n" + +#: main/packages.c:264 main/packages.c:308 main/packages.c:321 +msgid " Package " +msgstr " Paquet " + +#: main/packages.c:267 main/packages.c:311 main/packages.c:324 +msgid " which provides " +msgstr " qui fourni " + +#: main/packages.c:270 +msgid " is to be removed.\n" +msgstr " doit être supprimé.\n" + +#: main/packages.c:282 +msgid " Version of " +msgstr " version de " + +#: main/packages.c:284 +msgid " on system is " +msgstr " sur le système est " + +#: main/packages.c:304 +#, c-format +msgid "dpkg: also configuring `%s' (required by `%s')\n" +msgstr "dpkg: configuration aussi de `%s' (requis par `%s')\n" + +#: main/packages.c:314 +msgid " is not configured yet.\n" +msgstr " n'est pas encore configuré.\n" + +#: main/packages.c:327 +msgid " is not installed.\n" +msgstr " n'est pas installé.\n" + +#. Don't print the line about the package to be removed if +#. * that's the only line. +#. +#: main/packages.c:392 +msgid "; however:\n" +msgstr "; malgré tout:\n" + +#: main/processarc.c:105 +msgid "cannot access archive" +msgstr "ne peut pas accéder à l'archive" + +#: main/processarc.c:115 +#, c-format +msgid "error ensuring `%.250s' doesn't exist" +msgstr "erreur en considérant que `%.250s' n'existe pas" + +#: main/processarc.c:120 +msgid "failed to exec dpkg-split to see if it's part of a multiparter" +msgstr "" +"échec pour exécuter dpkg-split pour voir si c'est une partie d'un fichier " +"découpé" + +#: main/processarc.c:123 +msgid "wait for dpkg-split failed" +msgstr "attente de l'échec de dpkg-split" + +#: main/processarc.c:144 +msgid "unable to get unique filename for control info" +msgstr "" +"impossible d'obtenir un nom de fichier unique pour les informations de " +"contrôle" + +#: main/processarc.c:166 +msgid "failed to exec dpkg-deb to extract control information" +msgstr "" +"échec pour exécuter dpkg-deb pour extraire les informations de contrôle" + +#: main/processarc.c:180 +#, c-format +msgid "Recorded info about %s from %s.\n" +msgstr "Enregistrement de l'information sur %s de %s.\n" + +#: main/processarc.c:189 +#, c-format +msgid "package architecture (%s) does not match system (%s)" +msgstr "l'architecture du paquet (%s) ne correspond pas celle du système (%s)" + +#: main/processarc.c:206 +#, c-format +msgid "Selecting previously deselected package %s.\n" +msgstr "Sélection du paquet %s précédemment déselectionné.\n" + +#: main/processarc.c:209 +#, c-format +msgid "Skipping deselected package %s.\n" +msgstr "Paquet déselectionné %s ignoré.\n" + +#: main/processarc.c:220 +#, c-format +msgid "dpkg - warning: downgrading %.250s from %.250s to %.250s.\n" +msgstr "" +"dpkg - avertissement: %.250s mis à jour de %.250s vers l'ancienne %.250s.\n" + +#: main/processarc.c:225 +#, c-format +msgid "Will not downgrade %.250s from version %.250s to %.250s, skipping.\n" +msgstr "" +"Mise à jour de %.250s de la version %.250s vers l'ancienne %.250s ignorée.\n" + +#: main/processarc.c:235 +#, c-format +msgid "Version %.250s of %.250s already installed, skipping.\n" +msgstr "Version %.250s de %.250s déjà installée, paquet ignoré.\n" + +#: main/processarc.c:268 +#, c-format +msgid "" +"dpkg: regarding %s containing %s, pre-dependency problem:\n" +"%s" +msgstr "" +"dpkg: concernant %s contenant %s, problème de pré-dépendance:\n" +"%s" + +#: main/processarc.c:271 +#, c-format +msgid "pre-dependency problem - not installing %.250s" +msgstr "problème de pré-dépendance - %.250s non installé" + +#: main/processarc.c:272 +msgid "dpkg: warning - ignoring pre-dependency problem !\n" +msgstr "dpkg: avertissement - problème de pré-dépendance ignoré !\n" + +#: main/processarc.c:286 +#, c-format +msgid "Preparing to replace %s %s (using %s) ...\n" +msgstr "Préparation de la mise à jour de %s %s (en utilisant %s) ...\n" + +#: main/processarc.c:291 +#, c-format +msgid "Unpacking %s (from %s) ...\n" +msgstr "Dépaquetage de %s (à partir de %s) ...\n" + +#: main/processarc.c:311 +#, c-format +msgid "name of conffile (starting `%.250s') is too long (>%d characters)" +msgstr "" +"le nom du fichier de configuration (commençant par `%.250s') est trop long " +"(>%d caractères)" + +#: main/processarc.c:365 +#, c-format +msgid "read error in %.250s" +msgstr "erreur de lecture dans %.250s" + +#. conff= fopen() +#: main/processarc.c:367 +#, c-format +msgid "error closing %.250s" +msgstr "erreur de fermeture de %.250s" + +#: main/processarc.c:369 +#, c-format +msgid "error trying to open %.250s" +msgstr "erreur en essayant d'ouvrir %.250s" + +#: main/processarc.c:401 +#, c-format +msgid "De-configuring %s, so that we can remove %s ...\n" +msgstr "Déconfiguration de %s, pour pouvoir supprimer %s ...\n" + +#: main/processarc.c:458 +#, c-format +msgid "Unpacking replacement %.250s ...\n" +msgstr "Dépaquetage de la mise à jour de %.250s ...\n" + +#: main/processarc.c:534 +msgid "unable to exec dpkg-deb to get filesystem archive" +msgstr "" +"impossible d'exécuter dpkg-deb pour obtenir l'archive du système de fichiers" + +#: main/processarc.c:542 +msgid "unable to fdopen dpkg-deb extract pipe" +msgstr "impossible de \"fdopen\" le tube d'extraction de dpkg-deb" + +#: main/processarc.c:548 +msgid "error reading dpkg-deb tar output" +msgstr "erreur en lisant la sortie du \"tar\" de dpkg-deb" + +#: main/processarc.c:551 +msgid "unexpected EOF in filesystem tarfile - corrupted package archive" +msgstr "" +"EOF inattendu dans l'archive du système de fichiers - archive du paquet " +"corrompue" + +#: main/processarc.c:553 +msgid "corrupted filesystem tarfile - corrupted package archive" +msgstr "archive du système de fichiers corrompue - archive du paquet corrompue" + +#: main/processarc.c:610 +#, c-format +msgid "dpkg: warning - unable to delete old file `%.250s': %s\n" +msgstr "" +"dpkg: avertissement - impossible de supprimer le fichier `%.250s': %s\n" + +#: main/processarc.c:632 main/processarc.c:867 main/remove.c:287 +msgid "cannot read info directory" +msgstr "ne peut pas lire le répertoire d'informations" + +#: main/processarc.c:645 +#, c-format +msgid "old version of package has overly-long info file name starting `%.250s'" +msgstr "" +"l'ancienne version du paquet a un nom de fichier d'information commençant " +"par `%.250s' trop long" + +#: main/processarc.c:657 +#, c-format +msgid "unable to remove obsolete info file `%.250s'" +msgstr "impossible de supprimer le fichier d'information obsolète `%.250s'" + +#: main/processarc.c:660 +#, c-format +msgid "unable to install (supposed) new info file `%.250s'" +msgstr "" +"impossible d'installer le (supposé) nouveau fichier d'information `%.250s'" + +#: main/processarc.c:667 +msgid "unable to open temp control directory" +msgstr "impossible d'ouvrir le répertoire de contrôle temporaire" + +#: main/processarc.c:676 +#, c-format +msgid "package contains overly-long control info file name (starting `%.50s')" +msgstr "" +"le paquet contient un nom de fichier de contrôle trop long (commençant par " +"`%.50s')" + +#: main/processarc.c:681 +#, c-format +msgid "package control info contained directory `%.250s'" +msgstr "l'information de contrôle du paquet contient le répertoire `%.250s'" + +#: main/processarc.c:683 +#, c-format +msgid "package control info rmdir of `%.250s' didn't say not a dir" +msgstr "" +"l'information de contrôle du paquet \"rmdir\" de `%.250s' ne dit pas que ce " +"n'est pas un répertoire" + +#: main/processarc.c:689 +#, c-format +msgid "dpkg: warning - package %s contained list as info file" +msgstr "" +"dpkg: avertissement - le paquet %s contient une liste comme fichier " +"d'information" + +#: main/processarc.c:696 +#, c-format +msgid "unable to install new info file `%.250s' as `%.250s'" +msgstr "" +"impossible d'installer le nouveau fichier d'information `%.250s' comme " +"`%.250s'" + +#: main/processarc.c:847 +#, c-format +msgid "(Noting disappearance of %s, which has been completely replaced.)\n" +msgstr "(A noter la disparition de %s, qui a été complètement remplacé.)\n" + +#: main/processarc.c:883 +#, c-format +msgid "unable to delete disappearing control info file `%.250s'" +msgstr "" +"impossible de supprimer le fichier d'information de contrôle disparu `%.250s'" + +#: main/remove.c:78 +#, c-format +msgid "" +"dpkg - warning: ignoring request to remove %.250s which isn't installed.\n" +msgstr "" +"dpkg - avertissement: requête pour supprimer %.250s qui n'a pas été installé " +"ignorée.\n" + +#: main/remove.c:86 +#, c-format +msgid "" +"dpkg - warning: ignoring request to remove %.250s, only the config\n" +" files of which are on the system. Use --purge to remove them too.\n" +msgstr "" +"dpkg - avertissement: requête pour supprimer %.250s ignorée, seuls les " +"fichiers\n" +"de configuration sont installés. Utiliser --purge pour les supprimer aussi.\n" + +#: main/remove.c:95 +msgid "This is an essential package - it should not be removed." +msgstr "C'est un paquet essentiel - il ne doit pas être supprimé." + +#: main/remove.c:121 +#, c-format +msgid "" +"dpkg: dependency problems prevent removal of %s:\n" +"%s" +msgstr "" +"dpkg: un problème de dépendance empêche la suppression de %s:\n" +"%s" + +#: main/remove.c:123 +msgid "dependency problems - not removing" +msgstr "problème de dépendance - suppression ignorée" + +#: main/remove.c:127 +#, c-format +msgid "" +"dpkg: %s: dependency problems, but removing anyway as you request:\n" +"%s" +msgstr "" +"dpkg: %s: problème de dépendance, mais suppression comme demandé:\n" +"%s" + +#: main/remove.c:135 +msgid "" +"Package is in a very bad inconsistent state - you should\n" +" reinstall it before attempting a removal." +msgstr "" +"Paquet dans un très mauvais état d'inconsistance - vous devriez\n" +" le réinstaller avant d'essayer de le supprimer." + +#: main/remove.c:142 +#, c-format +msgid "Would remove or purge %s ...\n" +msgstr "Devrait supprimer ou purger %s ...\n" + +#: main/remove.c:150 +#, c-format +msgid "Removing %s ...\n" +msgstr "Suppression de %s ...\n" + +#: main/remove.c:246 +#, c-format +msgid "" +"dpkg - warning: while removing %.250s, directory `%.250s' not empty so not " +"removed.\n" +msgstr "" +"dpkg: avertissement: lors de la suppression de %.250s, le répertoire " +"`%.250s' n'était pas vide, donc il n'a pas été supprimé.\n" + +#: main/remove.c:252 +#, c-format +msgid "" +"dpkg - warning: while removing %.250s, unable to remove directory `%.250s': " +"%s - directory may be a mount point ?\n" +msgstr "" +"dpkg: avertissement: lors de la suppression de %.250s, impossible de retirer " +"`%.250s': %s - le répertoire est peut-être un point de montage ?\n" + +#: main/remove.c:259 +#, c-format +msgid "cannot remove `%.250s'" +msgstr "ne peut pas retirer %.250s'" + +#: main/remove.c:277 +#, c-format +msgid "cannot remove file `%.250s'" +msgstr "ne peut pas retirer le fichier %.250s'" + +#: main/remove.c:308 +#, c-format +msgid "unable to delete control info file `%.250s'" +msgstr "impossible de supprimer le fichier d'information de contrôle `%.250s'" + +#: main/remove.c:323 +#, c-format +msgid "unable to check existence of `%.250s'" +msgstr "impossible de vérifier l'existence de `%.250s'" + +#: main/remove.c:338 +#, c-format +msgid "Purging configuration files for %s ...\n" +msgstr "Purge des fichiers de configuration de %s ...\n" + +#: main/remove.c:382 +#, c-format +msgid "cannot remove old config file `%.250s' (= `%.250s')" +msgstr "" +"ne peut pas supprimer l'ancien fichier de configuration `%.250s' (= `%.250s')" + +#: main/remove.c:397 +#, c-format +msgid "cannot read config file dir `%.250s' (from `%.250s')" +msgstr "" +"ne peut pas lire le répertoire de fichier de configuration `%.250s' (from " +"`%.250s')" + +#: main/remove.c:432 +#, c-format +msgid "cannot remove old backup config file `%.250s' (of `%.250s')" +msgstr "" +"ne peut pas supprimer l'ancien fichier de configuration de secours `%.250s' " +"(de `%.250s')" + +#: main/remove.c:461 +msgid "cannot remove old files list" +msgstr "ne peut pas supprimer la liste des anciens fichiers" + +#: main/remove.c:467 +msgid "can't remove old postrm script" +msgstr "ne peut pas supprimer l'ancien script \"postrm\"" + +#: main/select.c:95 +msgid "--set-selections does not take any argument" +msgstr "--set-selections ne prend aucun argument" + +#: main/select.c:114 +#, c-format +msgid "unexpected eof in package name at line %d" +msgstr "EOF inattendu dans le nom de paquet à la ligne %d" + +#: main/select.c:115 +#, c-format +msgid "unexpected end of line in package name at line %d" +msgstr "fin de ligne inattendu dans le nom de paquet à la ligne %d" + +#: main/select.c:119 +#, c-format +msgid "unexpected eof after package name at line %d" +msgstr "EOF inattendu après le nom de paquet à la ligne %d" + +#: main/select.c:120 +#, c-format +msgid "unexpected end of line after package name at line %d" +msgstr "fin de ligne inattendu après le nom de paquet à la ligne %d" + +#: main/select.c:129 +#, c-format +msgid "unexpected data after package and selection at line %d" +msgstr "donnée inattendu après le paquet et la sélection à la ligne %d" + +#: main/select.c:134 +#, c-format +msgid "illegal package name at line %d: %.250s" +msgstr "nom de paquet illégal à la ligne %d: %.250s" + +#: main/select.c:136 +#, c-format +msgid "unknown wanted status at line %d: %.250s" +msgstr "état désiré inconnu à la ligne %d: %.250s" + +#: main/select.c:142 +msgid "read error on standard input" +msgstr "erreur de lecture sur l'entrée standard" + +#: main/update.c:44 +#, c-format +msgid "--%s takes no arguments" +msgstr "-%s ne prend pas d'arguments" + +#: main/update.c:48 +#, c-format +msgid "--%s needs exactly one Packages file argument" +msgstr "--%s a besoin exactement d'un fichier \"Packages\"" + +#: main/update.c:57 +msgid "unable to access dpkg status area for bulk available update" +msgstr "" +"impossible d'accéder à l'aire des états de dpkg pour une mise à jour en masse" + +#: main/update.c:59 +msgid "bulk available update requires write access to dpkg status area" +msgstr "" +"une mise à jour en masse requiert un accès en écriture dans l'aire des états " +"de dpkg" + +#: main/update.c:66 +#, c-format +msgid "Replacing available packages info, using %s.\n" +msgstr "" +"Remplacement de l'information sur les paquets disponibles, en utilisant %s.\n" + +#: main/update.c:69 +#, c-format +msgid "Updating available packages info, using %s.\n" +msgstr "" +"Mise à jour de l'information sur les paquets disponibles, en utilisant %s.\n" + +#: main/update.c:93 +#, c-format +msgid "Information about %d package(s) was updated.\n" +msgstr "L'information sur %d paquet(s) a été mise à jour.\n" + +#: main/update.c:101 +msgid "--forget-old-unavail takes no arguments" +msgstr "--forget-old-unavail ne prend pas d'arguments" + +#: dpkg-deb/build.c:50 +#, c-format +msgid "dpkg-deb - error: %s (`%s') doesn't contain any digits\n" +msgstr "dpkg-deb - erreur: %s (`%s') ne contient pas de chiffres\n" + +#: dpkg-deb/build.c:72 +msgid "--build needs a directory argument" +msgstr "--build a besoin d'un répertoire comme argument" + +#: dpkg-deb/build.c:75 +msgid "--build takes at most two arguments" +msgstr "--build prend au plus deux arguments" + +#: dpkg-deb/build.c:79 +#, c-format +msgid "unable to check for existence of archive `%.250s'" +msgstr "impossible de vérifier l'existence de l'archive `%.250s'" + +#: dpkg-deb/build.c:92 +msgid "target is directory - cannot skip control file check" +msgstr "" +"la cible est un répertoire - ne peut pas ignorer la vérification du fichier " +"\"control\"" + +#: dpkg-deb/build.c:93 +#, c-format +msgid "" +"dpkg-deb: warning, not checking contents of control area.\n" +"dpkg-deb: building an unknown package in `%s'.\n" +msgstr "" +"dpkg-deb: avertissement, non vérification du contenu de l'aire de contrôle.\n" +"dpkg-deb: construction d'un paquet inconnu dans `%s'.\n" + +#: dpkg-deb/build.c:110 +msgid "package name has characters that aren't lowercase alphanums or `-+.'" +msgstr "" +"le nom de paquet possède des caractères qui ne sont pas des minuscule " +"alphanums ou `-+.'" + +#: dpkg-deb/build.c:112 +#, c-format +msgid "warning, `%s' contains user-defined Priority value `%s'\n" +msgstr "" +"avertissement, `%s' contient une valeur \"Priority\" `%s' non conforme\n" + +#: dpkg-deb/build.c:117 +#, c-format +msgid "warning, `%s' contains user-defined field `%s'\n" +msgstr "avertissement, `%s' contient le champ `%s' non conforme\n" + +#: dpkg-deb/build.c:123 +#, c-format +msgid "%d errors in control file" +msgstr "%d erreurs dans le fichier \"control\"" + +#: dpkg-deb/build.c:134 +#, c-format +msgid "dpkg-deb: building package `%s' in `%s'.\n" +msgstr "dpkg-deb: construction du paquet `%s' dans `%s'.\n" + +#: dpkg-deb/build.c:141 +#, c-format +msgid "control directory has bad permissions %03lo (must be >=0755 and <=0775)" +msgstr "" +"le répertoire de contrôle possède de mauvaises permissions %03lo (doit être " +">=0755 et <=0775)" + +#: dpkg-deb/build.c:152 +#, c-format +msgid "maintainer script `%.50s' is not a plain file or symlink" +msgstr "le script `%.50s' du responsable n'est pas un vrai fichier ou lien" + +#: dpkg-deb/build.c:154 +#, c-format +msgid "" +"maintainer script `%.50s' has bad permissions %03lo (must be >=0555 and " +"<=0775)" +msgstr "" +"le script `%.50s' du responsable possède de mauvaises permissions %03lo " +"(doit être >=0755 et <=0775)" + +#: dpkg-deb/build.c:158 +#, c-format +msgid "maintainer script `%.50s' is not stattable" +msgstr "le script `%.50s' du responsable n'est pas \"stattable\"" + +#: dpkg-deb/build.c:167 +msgid "empty string from fgets reading conffiles" +msgstr "" +"\"fgets\" renvoie une chaine vide en lisant les fichiers de configuration" + +#: dpkg-deb/build.c:169 +#, fuzzy, c-format +msgid "" +"warning, conffile name `%.50s...' is too long, or missing final newline\n" +msgstr "" +"avertissement, le nom du fichier de configuration `%.50s...' est trop long" + +#: dpkg-deb/build.c:181 +#, c-format +msgid "conffile `%.250s' does not appear in package" +msgstr "le fichier de configuration `%.250s' n'apparaît pas dans le paquet" + +#: dpkg-deb/build.c:183 +#, c-format +msgid "conffile `%.250s' is not stattable" +msgstr "le fichier de configuration `%.250s' n'est pas \"stattable\"" + +#: dpkg-deb/build.c:185 +#, c-format +msgid "warning, conffile `%s' is not a plain file\n" +msgstr "" +"avertissement, le fichier de configuration `%s' n'est pas un vrai fichier\n" + +#: dpkg-deb/build.c:190 +msgid "error reading conffiles file" +msgstr "erreur en lisant un fichier de configuration" + +#: dpkg-deb/build.c:193 +msgid "error opening conffiles file" +msgstr "erreur en ouvrant un fichier de configuration" + +#: dpkg-deb/build.c:196 +#, c-format +msgid "dpkg-deb: ignoring %d warnings about the control file(s)\n" +msgstr "dpkg-deb: %d avertissements sur les fichiers \"control\" ignorés\n" + +#: dpkg-deb/build.c:202 +#, c-format +msgid "unable to create `%.255s'" +msgstr "impossible de créer `%.255s'" + +#: dpkg-deb/build.c:203 +#, c-format +msgid "unable to unbuffer `%.255s'" +msgstr "impossible de \"unbuffer\" `%.255s'" + +#: dpkg-deb/build.c:207 dpkg-deb/build.c:254 +#, c-format +msgid "failed to chdir to `%.255s'" +msgstr "échec pour changer de répertoire vers `%.255s'" + +#: dpkg-deb/build.c:208 +msgid "failed to chdir to .../DEBIAN" +msgstr "échec pour changer de répertoire vers .../DEBIAN" + +#: dpkg-deb/build.c:209 +msgid "failed to exec tar -cf" +msgstr "échec pour exécuter \"tar -cf\"" + +#: dpkg-deb/build.c:212 +msgid "failed to make tmpfile (control)" +msgstr "échec pour créer un fichier temporaire (\"control\")" + +#: dpkg-deb/build.c:215 +msgid "failed to exec gzip -9c" +msgstr "échec pour exécuter \"gzip -9c\"" + +#: dpkg-deb/build.c:220 +msgid "failed to fstat tmpfile (control)" +msgstr "échec pour \"fstat\" un fichier temporaire (\"control\")" + +#: dpkg-deb/build.c:240 +msgid "failed to rewind tmpfile (control)" +msgstr "échec pour \"rewind\" un fichier temporaire (\"control\")" + +#: dpkg-deb/build.c:243 +msgid "failed to exec cat (control)" +msgstr "échec pour exécuter \"cat\" (\"control\")" + +#: dpkg-deb/build.c:249 +msgid "failed to make tmpfile (data)" +msgstr "échec pour créer un fichier temporaire (\"data\")" + +#: dpkg-deb/build.c:256 +msgid "failed to exec tar --exclude" +msgstr "échec pour exécuter \"tar --exclude\"" + +#: dpkg-deb/build.c:263 +msgid "failed to exec gzip -9c from tar --exclude" +msgstr "échec pour exécuter \"gzip -9c\" de \"tar --exclude\"" + +#: dpkg-deb/build.c:278 +msgid "failed to rewind tmpfile (data)" +msgstr "échec pour \"rewind\" un fichier temporaire (\"data\")" + +#: dpkg-deb/build.c:281 +msgid "failed to exec cat (data)" +msgstr "échec pour exécuter \"cat\" (\"data\")" + +#: dpkg-deb/extract.c:48 +msgid "failed to exec sh -c mv foo/* &c" +msgstr "échec pour exécuter \"sh -c mv foo/* &c\"" + +#: dpkg-deb/extract.c:55 +#, c-format +msgid "error reading %s from %.255s" +msgstr "erreur en lisant %s de %.255s" + +#: dpkg-deb/extract.c:57 +#, c-format +msgid "unexpected end of file in %s in %.255s" +msgstr "fin de fichier inattendu dans %s dans %.255s" + +#: dpkg-deb/extract.c:68 split/info.c:52 +#, c-format +msgid "file `%.250s' is corrupt - %.250s length contains nulls" +msgstr "le fichier `%.250s' est corrompu - %.250s long contient \"nulls\"" + +#: dpkg-deb/extract.c:75 split/info.c:43 +#, c-format +msgid "file `%.250s' is corrupt - bad digit (code %d) in %s" +msgstr "le fichier `%.250s' est corrompu - mauvais chiffre (code %d) dans %s" + +#: dpkg-deb/extract.c:109 +#, c-format +msgid "failed to read archive `%.255s'" +msgstr "échec pour lire l'archive `%.255s'" + +#: dpkg-deb/extract.c:110 +msgid "failed to fstat archive" +msgstr "échec pour \"fstat\" l'archive" + +#: dpkg-deb/extract.c:122 split/info.c:93 +#, c-format +msgid "file `%.250s' is corrupt - bad magic at end of first header" +msgstr "" +"le fichier `%.250s' est corrompu - mauvais \"magic\" à la fin du premier " +"en-tête" + +#: dpkg-deb/extract.c:126 +#, c-format +msgid "file `%.250s' is corrupt - negative member length %ld" +msgstr "le fichier `%.250s' est corrompu - longueur de membre négative %ld" + +#: dpkg-deb/extract.c:129 +#, c-format +msgid "file `%.250s' is not a debian binary archive (try dpkg-split?)" +msgstr "" +"le fichier `%.250s n'est pas une archive binaire debian (essayer dpkg-split?)" + +#: dpkg-deb/extract.c:135 +msgid "archive has no newlines in header" +msgstr "l'archive n'a pas de saut de ligne dans l'en-tête" + +#: dpkg-deb/extract.c:138 +msgid "archive has no dot in version number" +msgstr "l'archive n'a pas de point dans le nombre de la version" + +#: dpkg-deb/extract.c:141 +#, c-format +msgid "archive version %.250s not understood, get newer dpkg-deb" +msgstr "" +"version %.250s de l'archive non comprise, récupérer dpkg-deb plus récent" + +#: dpkg-deb/extract.c:157 +#, c-format +msgid "file `%.250s' contains ununderstood data member %.*s, giving up" +msgstr "" +"le fichier `%.250s' contient un membre données non compris (%.*s), abandon" + +#: dpkg-deb/extract.c:162 +#, c-format +msgid "file `%.250s' contains two control members, giving up" +msgstr "le fichier `%.250s' contient deux membres, abandon" + +#: dpkg-deb/extract.c:174 +#, c-format +msgid "" +" new debian package, version %s.\n" +" size %ld bytes: control archive= %ld bytes.\n" +msgstr "" +" nouveau paquet debian, version %s.\n" +" taille %ld octets: archive de contrôle= %ld octets.\n" + +#: dpkg-deb/extract.c:188 +#, c-format +msgid "archive has malformatted ctrl len `%s'" +msgstr "l'archive possède une \"ctrl len\" `%s' mal-formée" + +#: dpkg-deb/extract.c:191 +#, c-format +msgid "" +" old debian package, version %s.\n" +" size %ld bytes: control archive= %ld, main archive= %ld.\n" +msgstr "" +" ancien paquet debian, version %s.\n" +" taille %ld octets: archive de contrôle= %ld, archive principale= %ld.\n" + +#: dpkg-deb/extract.c:206 +msgid "" +"dpkg-deb: file looks like it might be an archive which has been\n" +"dpkg-deb: corrupted by being downloaded in ASCII mode\n" +msgstr "" +"dpkg-deb: le fichier ressemble apparemment à une archive ayant été\n" +"dpkg-deb: corrompue par un téléchargement en mode ASCII\n" + +#: dpkg-deb/extract.c:211 +#, c-format +msgid "`%.255s' is not a debian format archive" +msgstr "`%.255s' n'est pas une archive de format debian" + +#: dpkg-deb/extract.c:216 +#, fuzzy +msgid "fgetpos failed" +msgstr "échec de \"fork\"" + +#: dpkg-deb/extract.c:220 +#, fuzzy +msgid "fsetpos failed" +msgstr "échec de \"fork\"" + +#: dpkg-deb/extract.c:227 +msgid "failed to fdopen p1 in paste" +msgstr "échec pour \"fdopen p1 in paste\"" + +#: dpkg-deb/extract.c:229 +msgid "failed to write to gzip -dc" +msgstr "échec pour écrire vers \"gzip -dc\"" + +#: dpkg-deb/extract.c:230 +msgid "failed to close gzip -dc" +msgstr "échec pour fermer \"gzip -dc\"" + +#: dpkg-deb/extract.c:237 +msgid "failed to syscall lseek to files archive portion" +msgstr "échec pour \"syscall lseek\" vers la portion d'archive des fichiers" + +#: dpkg-deb/extract.c:245 +msgid "failed to fdopen p1 in copy" +msgstr "échec pour \"fdopen p1 in copy\"" + +#: dpkg-deb/extract.c:248 +msgid "failed to write to pipe in copy" +msgstr "échec pour écrire dans le tube en copie" + +#: dpkg-deb/extract.c:251 +msgid "failed to close pipe in copy" +msgstr "échec pour fermer le tube en copie" + +#: dpkg-deb/extract.c:264 +msgid "failed to exec gzip -dc" +msgstr "échec pour exécuter \"gzip -dc\"" + +#: dpkg-deb/extract.c:272 +msgid "failed to create directory" +msgstr "échec pour créer le répertoire" + +#: dpkg-deb/extract.c:273 +msgid "failed to chdir to directory after creating it" +msgstr "échec pour changer vers le répertoire après l'avoir créer" + +#: dpkg-deb/extract.c:275 +msgid "failed to chdir to directory" +msgstr "échec pour changer vers le répertoire" + +#: dpkg-deb/extract.c:288 +msgid "failed to exec tar" +msgstr "échec pour exécuter \"tar\"" + +#: dpkg-deb/extract.c:311 dpkg-deb/extract.c:326 dpkg-deb/info.c:66 +#, c-format +msgid "--%s needs a .deb filename argument" +msgstr "--%s a besoin d'un fichier .deb comme argument" + +#: dpkg-deb/extract.c:314 +#, c-format +msgid "" +"--%s needs a target directory.\n" +"Perhaps you should be using dpkg --install ?" +msgstr "" +"--%s a besoin d'un répertoire cible.\n" +"Peut-être devriez-vous utiliser dpkg --install ?" + +#: dpkg-deb/extract.c:317 +#, c-format +msgid "--%s takes at most two arguments (.deb and directory" +msgstr "--%s a besoin au plus de deux arguments (.deb et répertoire" + +#: dpkg-deb/extract.c:328 +#, c-format +msgid "--%s takes only one argument (.deb filename)" +msgstr "--%s a besoin seulement d'un argument (nom de fichier .deb)" + +#: dpkg-deb/info.c:47 +msgid "failed to chdir to `/' for cleanup" +msgstr "échec pour changer de répertoire vers `/' pour nettoyage" + +#: dpkg-deb/info.c:49 +msgid "failed to fork for cleanup" +msgstr "échec du \"fork\" pour nettoyage" + +#: dpkg-deb/info.c:54 +msgid "failed to wait for rm cleanup" +msgstr "échec du \"wait\" pour nettoyage par \"rm\"" + +#: dpkg-deb/info.c:55 +#, c-format +msgid "rm cleanup failed, code %d\n" +msgstr "échec du nettoyage par \"rm\", code %d\n" + +#: dpkg-deb/info.c:67 +msgid "failed to make temporary filename" +msgstr "échec pour créer un nom de fichier temporaire" + +#: dpkg-deb/info.c:71 +msgid "failed to exec rm -rf" +msgstr "échec pour exécuter \"rm -rf\"" + +#: dpkg-deb/info.c:94 +msgid "failed to exec cat component" +msgstr "échec pour exécuter \"cat\" composant" + +#: dpkg-deb/info.c:98 +#, c-format +msgid "dpkg-deb: `%.255s' contains no control component `%.255s'\n" +msgstr "dpkg-deb: `%.255s' ne contient pas de composant de contrôle `%.255s'\n" + +#: dpkg-deb/info.c:102 +#, c-format +msgid "open component `%.255s' (in %.255s) failed in an unexpected way" +msgstr "" +"échec de l'ouverture du composant `%.255s' (dans %.255s) d'une manière " +"inattendue" + +#: dpkg-deb/info.c:106 +msgid "at least one requested control component missing" +msgstr "au moins un composant de contrôle nécessaire manque" + +#: dpkg-deb/info.c:119 +#, c-format +msgid "cannot scan directory `%.255s'" +msgstr "ne peut pas parcourir le répertoire `%.255s'" + +#: dpkg-deb/info.c:124 +#, c-format +msgid "cannot stat `%.255s' (in `%.255s')" +msgstr "ne peut pas \"stat\" `%.255s' (dans `%.255s')" + +#: dpkg-deb/info.c:127 +#, c-format +msgid "cannot open `%.255s' (in `%.255s')" +msgstr "ne peut pas ouvrir `%.255s' (dans `%.255s')" + +#: dpkg-deb/info.c:141 +#, c-format +msgid "failed to read `%.255s' (in `%.255s')" +msgstr "échec pour lire `%.255s' (dans `%.255s')" + +#: dpkg-deb/info.c:144 +#, c-format +msgid " %7ld bytes, %5d lines %c %-20.127s %.127s\n" +msgstr " %7ld octets, %5d lignes %c %-20.127s %.127s\n" + +#: dpkg-deb/info.c:150 +#, c-format +msgid " not a plain file %.255s\n" +msgstr " pas un vrai fichier %.255s\n" + +#: dpkg-deb/info.c:155 +#, c-format +msgid "failed to read `control' (in `%.255s')" +msgstr "échec pour lire `control' (dans `%.255s')" + +#: dpkg-deb/info.c:156 +msgid "(no `control' file in control archive!)\n" +msgstr "(pas de fichier `control' dans l'archive de contrôle!)\n" + +#: dpkg-deb/info.c:176 +msgid "could not open the `control' component" +msgstr "ne peut pas ouvrir le composant `control'" + +#: dpkg-deb/info.c:206 +msgid "failed during read of `control' component" +msgstr "échec pendant la lecture du composant `control'" + +#: dpkg-deb/info.c:238 +msgid "--contents takes exactly one argument" +msgstr "--contents prend exactement un argument" + +#: dpkg-deb/main.c:44 +msgid "Debian Linux `" +msgstr "Debian Linux `" + +#: dpkg-deb/main.c:46 +msgid "" +"Copyright (C) 1994-1996 Ian Jackson. This is free software; see the\n" +"GNU General Public Licence version 2 or later for copying conditions.\n" +"There is NO warranty. See dpkg-deb --licence for details.\n" +msgstr "" +"Copyright (C) 1994-1996 Ian Jackson. Ceci est un logiciel libre; consulter\n" +"la GNU General Public Licence version 2 ou supérieure pour les conditions " +"de\n" +"reproduction. Il n'y a AUCUNE garantie. Consulter dpkg-deb --licence pour " +"les détails.\n" + +#: dpkg-deb/main.c:53 +msgid "" +"Usage: dpkg-deb -b|--build <directory> [<deb>] Build an archive.\n" +" dpkg-deb -c|--contents <deb> List contents.\n" +" dpkg-deb -I|--info <deb> [<cfile>...] Show info to stdout.\n" +" dpkg-deb -f|--field <deb> [<cfield>...] Show field(s) to stdout.\n" +" dpkg-deb -e|--control <deb> [<directory>] Extract control info.\n" +" dpkg-deb -x|--extract <deb> <directory> Extract files.\n" +" dpkg-deb -X|--vextract <deb> <directory> Extract & list files.\n" +" dpkg-deb --fsys-tarfile <deb> Output filesystem " +"tarfile.\n" +" dpkg-deb -h|--help Display this message.\n" +" dpkg-deb --version | --licence Show version/licence.\n" +"<deb> is the filename of a Debian format archive.\n" +"<cfile> is the name of an administrative file component.\n" +"<cfield> is the name of a field in the main `control' file.\n" +"Options: -D for debugging output; --old or --new controls archive format;\n" +" --no-check to suppress control file check (build bad package).\n" +"\n" +"Use `dpkg' to install and remove packages from your system, or\n" +"`dselect' for user-friendly package management. Packages unpacked\n" +"using `dpkg-deb --extract' will be incorrectly installed !\n" +msgstr "" +"Syntaxe:\n" +" dpkg-deb -b|--build <répertoire> [<deb>] Construit une archive.\n" +" dpkg-deb -c|--contents <deb> Liste le contenu.\n" +" dpkg-deb -I|--info <deb> [<cfile>...] Affiche les informations " +"sur la sortie standard.\n" +" dpkg-deb -f|--field <deb> [<cfield>...] Affiche le(s) champ(s) sur " +"la sortie standard.\n" +" dpkg-deb -e|--control <deb> [<répertoire>] Extrait l'information de " +"contrôle.\n" +" dpkg-deb -x|--extract <deb> <répertoire> Extrait les fichiers.\n" +" dpkg-deb -X|--vextract <deb> <répertoire> Extrait et liste les " +"fichiers.\n" +" dpkg-deb --fsys-tarfile <deb> Sort le système de " +"fichiers du fichier tar.\n" +" dpkg-deb -h|--help Affiche ce message.\n" +" dpkg-deb --version | --licence Affiche la " +"version/licence.\n" +"<deb> est le nom de fichier d'une archive au format debian.\n" +"<cfile> est le nom d'un composant fichier administratif.\n" +"<cfield> est le nom d'un champ dans le fichier `control' principal.\n" +"Options: -D pour sortie de débogage; --old ou --new contrôle le format " +"d'archive;\n" +" --no-check pour supprimer la vérification du fichier control " +"(construit de mauvais paquet).\n" +"\n" +"Utiliser `dpkg' pour installer et supprimer des paquets de votre système, " +"ou\n" +"`dselect' pour une gestion des paquets conviviale. Les paquets dépaquetés " +"en\n" +"utilisant `dpkg-deb --extract' seront incorrectement installés !\n" + +#: dpkg-deb/main.c:78 +msgid "" +"Type dpkg-deb --help for help about manipulating *.deb files;\n" +"Type dpkg --help for help about installing and deinstalling packages." +msgstr "" +"Taper dpkg-deb --help pour une aide à propos de la manipulation des fichiers " +"*.deb;\n" +"Taper dpkg --help pour une aide sur l'installation et la désinstallation des " +"paquets." + +#: split/info.c:64 +#, c-format +msgid "file `%.250s' is corrupt - %.250s missing" +msgstr "le fichier `%.250s' est corrompu - %.250s manquant" + +#: split/info.c:67 +#, c-format +msgid "file `%.250s' is corrupt - missing newline after %.250s" +msgstr "le fichier `%.250s' est corrompu - saut de ligne après %.250s manquant" + +#: split/info.c:89 +msgid "unable to seek back" +msgstr "impossible de \"seek back\"" + +#: split/info.c:103 +#, c-format +msgid "file `%.250s' is corrupt - bad padding character (code %d)" +msgstr "" +"le fichier `%.250s' est corrompu - mauvais \"padding\" caractère (code %d)" + +#: split/info.c:107 +#, c-format +msgid "file `%.250s' is corrupt - nulls in info section" +msgstr "le fichier `%.250s' est corrompu - \"nulls\" dans la section info" + +#: split/info.c:114 +#, c-format +msgid "file `%.250s' is format version `%.250s' - you need a newer dpkg-split" +msgstr "" +"le fichier `%.250s' est de format version `%.250s' - vous avez besoin d'un " +"dpkg-split plus récent" + +#: split/info.c:122 +#, c-format +msgid "file `%.250s' is corrupt - bad MD5 checksum `%.250s'" +msgstr "le fichier `%.250s' est corrompu - mauvais MD5 checksum `%.250s'" + +#: split/info.c:129 +#, c-format +msgid "file `%.250s' is corrupt - no slash between part numbers" +msgstr "le fichier `%.250s' est corrompu - \"no slash between part numbers\"" + +#: split/info.c:138 +#, c-format +msgid "file `%.250s' is corrupt - bad part number" +msgstr "le fichier `%.250s' est corrompu - \"bad part number\"" + +#: split/info.c:143 +#, c-format +msgid "file `%.250s' is corrupt - bad magic at end of second header" +msgstr "" +"le fichier `%.250s' est corrompu - \"bad magic at end of second header\"" + +#: split/info.c:145 +#, c-format +msgid "file `%.250s' is corrupt - second member is not data member" +msgstr "" +"le fichier `%.250s' est corrompu - \"second member is not data member\"" + +#: split/info.c:151 +#, c-format +msgid "file `%.250s' is corrupt - wrong number of parts for quoted sizes" +msgstr "" +"le fichier `%.250s' est corrompu - \"wrong number of parts for quoted sizes\"" + +#: split/info.c:155 +#, c-format +msgid "file `%.250s' is corrupt - size is wrong for quoted part number" +msgstr "" +"le fichier `%.250s' est corrompu - \"size is wrong for quoted part number\"" + +#: split/info.c:161 +#, c-format +msgid "unable to fstat part file `%.250s'" +msgstr "impossible de \"fstat\" le fichier partie `%.250s'" + +#: split/info.c:167 +#, c-format +msgid "file `%.250s' is corrupt - too short" +msgstr "le fichier `%.250s' est corrompu - trop court" + +#: split/info.c:179 split/info.c:220 +#, c-format +msgid "cannot open archive part file `%.250s'" +msgstr "ne peut pas ouvrir le fichier partie `%.250s' de l'archive" + +#: split/info.c:181 +#, c-format +msgid "file `%.250s' is not an archive part" +msgstr "le fichier `%.250s' n'est pas une partie de l'archive" + +#: split/info.c:186 +#, c-format +msgid "" +"%s:\n" +" Part format version: %s\n" +" Part of package: %s\n" +" ... version: %s\n" +" ... MD5 checksum: %s\n" +" ... length: %lu bytes\n" +" ... split every: %lu bytes\n" +" Part number: %d/%d\n" +" Part length: %lu bytes\n" +" Part offset: %lu bytes\n" +" Part file size (used portion): %lu bytes\n" +"\n" +msgstr "" +"%s:\n" +" Version du format de partie: %s\n" +" Partie du paquet: %s\n" +" ... version: %s\n" +" ... checksum MD5: %s\n" +" ... longueur: %lu octets\n" +" ... coupé tous les: %lu octets\n" +" Partie numéro: %d/%d\n" +" Longueur de la partie: %lu octets\n" +" Décalage de la partie: %lu octets\n" +" Taille du fichier partie (portion utilisée): %lu octets\n" +"\n" + +#: split/info.c:216 +msgid "--info requires one or more part file arguments" +msgstr "--info requiert un ou plusieurs fichiers parties comme arguments" + +#: split/info.c:226 +#, c-format +msgid "file `%s' is not an archive part\n" +msgstr "le fichier `%s' n'est pas une partie d'archive\n" + +#: split/join.c:48 +#, c-format +msgid "unable to open output file `%.250s'" +msgstr "impossible d'ouvrir le fichier sortie `%.250s'" + +#: split/join.c:52 +#, c-format +msgid "unable to (re)open input part file `%.250s'" +msgstr "impossible de (ré)ouvrir le fichier partie d'entrée `%.250s'" + +#: split/join.c:68 +msgid "done\n" +msgstr "fait\n" + +#: split/join.c:84 +#, c-format +msgid "files `%.250s' and `%.250s' are not parts of the same file" +msgstr "" +"les fichiers `%.250s' et `%.250s' ne sont pas des parties du même fichier" + +#: split/join.c:89 +#, c-format +msgid "there are several versions of part %d - at least `%.250s' and `%.250s'" +msgstr "" +"il y a plusieurs versions de la partie %d - au moins `%.250s' et `%.250s'" + +#: split/join.c:102 +msgid "--join requires one or more part file arguments" +msgstr "--join requiert un ou plusieurs fichiers parties comme arguments" + +#: split/join.c:123 +#, c-format +msgid "part %d is missing" +msgstr "la partie %d est manquante" + +#: split/main.c:38 +msgid "Debian Linux `dpkg-split' package split/join tool; version " +msgstr "Outil `dpkg-split' Linux Debian de (dé)assemblage de paquets; version " + +#: split/main.c:40 +msgid "" +"Copyright (C) 1994-1996 Ian Jackson. This is free software; see the\n" +"GNU General Public Licence version 2 or later for copying conditions.\n" +"There is NO warranty. See dpkg-split --licence for details.\n" +msgstr "" +"Copyright (C) 1994-1996 Ian Jackson. Ceci est un logiciel libre;\n" +"consultez la GNU General Public Licence version 2 ou supérieure pour les " +"conditions\n" +"de reproduction. Il n'y a AUCUNE garantie. Consultez dpkg-split --licence " +"pour les détails.\n" + +#: split/main.c:47 +msgid "" +"Usage: dpkg-split -s|--split <file> [<prefix>] Split an archive.\n" +" dpkg-split -j|--join <part> <part> ... Join parts together.\n" +" dpkg-split -I|--info <part> ... Display info about a " +"part.\n" +" dpkg-split -h|--help|--version|--licence Show " +"help/version/licence.\n" +"\n" +" dpkg-split -a|--auto -o <complete> <part> Auto-accumulate parts.\n" +" dpkg-split -l|--listq List unmatched pieces.\n" +" dpkg-split -d|--discard [<filename> ...] Discard unmatched " +"pieces.\n" +"\n" +"Options: --depotdir <directory> (default is " +msgstr "" +"Syntaxe:\n" +" dpkg-split -s|--split <fichier> [<préfixe>] Découpe une archive.\n" +" dpkg-split -j|--join <partie> <partie> ... Fusionne les parties " +"ensemble.\n" +" dpkg-split -I|--info <partie> ... Affiche l'information " +"sur une partie.\n" +" dpkg-split -h|--help|--version|--licence Affiche l'aide/la " +"version/licence.\n" +"\n" +" dpkg-split -a|--auto -o <complet> <partie> Auto-assemble les " +"parties.\n" +" dpkg-split -l|--listq Liste les pièces " +"isolées.\n" +" dpkg-split -d|--discard [<nom fichier> ...] Annule les pièces " +"isolées.\n" +"\n" +"Options: --depotdir <répertoire> (défaut est " + +#: split/main.c:68 +msgid "Type dpkg-split --help for help." +msgstr "Taper dpkg-split --help pour une aide." + +#: split/main.c:78 +#, c-format +msgid "error reading %s" +msgstr "erreur en lisant %s" + +#: split/main.c:82 +#, c-format +msgid "error reading %.250s" +msgstr "erreur en lisant %.250s" + +#: split/main.c:83 +#, c-format +msgid "unexpected end of file in %.250s" +msgstr "fin de fichier inattendue dans %.250s" + +#: split/main.c:101 +msgid "part size is far too large or is not positive" +msgstr "taille de partie beaucoup trop grande ou négative" + +#: split/main.c:105 +#, c-format +msgid "part size must be at least %dk (to allow for header)" +msgstr "" +"la taille de partie doit être au moins %dk (pour autoriser les en-têtes)" + +#: split/queue.c:69 +#, c-format +msgid "unable to read depot directory `%.250s'" +msgstr "impossible de lire de répertoire de \"depot\" `%.250s'" + +#: split/queue.c:105 +msgid "--auto requires the use of the --output option" +msgstr "--auto requiert l'utilisation de l'option --output" + +#: split/queue.c:107 +msgid "--auto requires exactly one part file argument" +msgstr "--auto requiert exactement un fichier partie comme argument" + +#: split/queue.c:111 +#, c-format +msgid "unable to read part file `%.250s'" +msgstr "impossible de lire le fichier partie `%.250s'" + +#: split/queue.c:114 +#, c-format +msgid "File `%.250s' is not part of a multipart archive.\n" +msgstr "Le fichier `%.250s' n'appartient pas à une archive multi-parties\n" + +#: split/queue.c:141 +#, c-format +msgid "unable to reopen part file `%.250s'" +msgstr "impossible de réouvrir le fichier parties `%.250s'" + +#: split/queue.c:145 +#, c-format +msgid "part file `%.250s' has trailing garbage" +msgstr "le fichier partie `%.250s' \"has trailing garbage\"" + +#: split/queue.c:154 +#, c-format +msgid "unable to open new depot file `%.250s'" +msgstr "impossible d'ouvrir un nouveau fichier \"depot\" `%.250s'" + +#: split/queue.c:158 +#, c-format +msgid "unable to rename new depot file `%.250s' to `%.250s'" +msgstr "impossible de renommer le fichier \"depot\" `%.250s' en `%.250s'" + +#: split/queue.c:160 +#, c-format +msgid "Part %d of package %s filed (still want " +msgstr "Partie %d du paquet %s remplie (manque toujours " + +#: split/queue.c:164 +msgid " and " +msgstr " et " + +#: split/queue.c:177 +#, c-format +msgid "unable to delete used-up depot file `%.250s'" +msgstr "impossible de supprimer le fichier \"used-up depot\" `%.250s'" + +#: split/queue.c:192 +msgid "--listq does not take any arguments" +msgstr "--listq ne prend aucun argument" + +#: split/queue.c:195 +msgid "Junk files left around in the depot directory:\n" +msgstr "Fichiers inutiles laissés dans le répertoire \"depot\":\n" + +#: split/queue.c:200 split/queue.c:224 +#, c-format +msgid "unable to stat `%.250s'" +msgstr "impossible de \"stat\" `%.250s'" + +#: split/queue.c:203 +#, c-format +msgid " %s (%lu bytes)\n" +msgstr " %s (%lu octets)\n" + +#: split/queue.c:205 +#, c-format +msgid " %s (not a plain file)\n" +msgstr " %s (ce n'est pas un vrai fichier)\n" + +#: split/queue.c:210 +msgid "Packages not yet reassembled:\n" +msgstr "Paquets non encore assemblés:\n" + +#: split/queue.c:226 +#, c-format +msgid "part file `%.250s' is not a plain file" +msgstr "le fichier partie `%.250s' n'est pas un vrai fichier" + +#: split/queue.c:231 +#, c-format +msgid "(total %lu bytes)\n" +msgstr "(%lu octets au total)\n" + +#: split/queue.c:254 +#, c-format +msgid "unable to discard `%.250s'" +msgstr "impossible d'annuler `%.250s'" + +#: split/queue.c:255 +#, c-format +msgid "Deleted %s.\n" +msgstr "Suppression de %s.\n" + +#: split/split.c:45 +msgid "--split needs a source filename argument" +msgstr "--split a besoin d'un nom de fichier source comme argument" + +#: split/split.c:48 +msgid "--split takes at most a source filename and destination prefix" +msgstr "" +"--split prend au plus un nom de fichier source et un préfixe de destination" + +#: split/split.c:62 +#, c-format +msgid "unable to open source file `%.250s'" +msgstr "impossible d'ouvrir le fichier source `%.250s'" + +#: split/split.c:63 +msgid "unable to fstat source file" +msgstr "impossible de \"fstat\" le fichier source" + +#: split/split.c:64 +#, c-format +msgid "source file `%.250s' not a plain file" +msgstr "le fichier source `%.250s' n'est pas un vrai fichier" + +#: split/split.c:70 +msgid "unable to exec mksplit" +msgstr "impossible d'exécuter mksplit" + +#: md5sum/md5sum.c:106 +#, c-format +msgid "%s: read error on stdin\n" +msgstr "%s: erreur de lecture sur l'entrée standard\n" + +#: md5sum/md5sum.c:124 md5sum/md5sum.c:250 +#, c-format +msgid "%s: error reading %s\n" +msgstr "%s: erreur en lisant %s\n" + +#: md5sum/md5sum.c:138 +msgid "" +"usage: md5sum [-bv] [-c [file]] | [file...]\n" +"Generates or checks MD5 Message Digests\n" +" -c check message digests (default is generate)\n" +" -v verbose, print file names when checking\n" +" -b read files in binary mode\n" +"The input for -c should be the list of message digests and file names\n" +"that is printed on stdout by this program when it generates digests.\n" +msgstr "" +"Syntaxe: md5sum [-bv] [-c [fichier]] | [fichier...]\n" +"Génère ou vérifie les \"checksums\" MD5\n" +" -c vérifie les \"checksums\" (les génère par défaut)\n" +" -v verbeux, affiche les noms des fichiers en vérifiant\n" +" -b lit les fichiers en mode binaire\n" +"L'entrée pour -c devrait être la liste des \"checksums\" et des nom de " +"fichiers\n" +"tel qu'elle est affichée sur la sortie standard par le programme lors de la " +"génération des checksums.\n" + +#: md5sum/md5sum.c:211 +#, c-format +msgid "%s: unrecognized line: %s" +msgstr "%s: ligne non reconnue: %s" + +#: md5sum/md5sum.c:245 +#, c-format +msgid "%s: can't open %s\n" +msgstr "%s: ne peut pas ouvrir %s\n" + +#: md5sum/md5sum.c:258 +msgid "FAILED\n" +msgstr "ECHEC\n" + +#: md5sum/md5sum.c:260 +#, c-format +msgid "%s: MD5 check failed for '%s'\n" +msgstr "%s: échec de la vérification MD5 pour '%s'\n" + +#: md5sum/md5sum.c:263 +msgid "OK\n" +msgstr "OK\n" + +#: md5sum/md5sum.c:267 +#, c-format +msgid "%s: %d of %d file(s) failed MD5 check\n" +msgstr "%s: échec de la vérification MD5 pour %d sur %d fichier(s)\n" + +#: md5sum/md5sum.c:269 +#, c-format +msgid "%s: no files checked\n" +msgstr "%s: aucun fichiers vérifiés\n" diff --git a/scripts/.cvsignore b/scripts/.cvsignore new file mode 100644 index 000000000..8d678982c --- /dev/null +++ b/scripts/.cvsignore @@ -0,0 +1,2 @@ +Makefile.in +elisp-comp diff --git a/scripts/822-date.pl b/scripts/822-date.pl index 7ce7602a0..1cde75928 100644..100755 --- a/scripts/822-date.pl +++ b/scripts/822-date.pl @@ -1,9 +1,56 @@ #!/usr/bin/perl -- # I hereby place this in the public domain - Ian Jackson, 1995. +# Changes by Klee Dienes also placed in public domain (1997). + +# time structure: +# [ sec min hour mday mon year wday yday isdst ] + @ARGV && die "usage: 822-date\n"; -$x=time; sub z { $_[1]+$_[2]*60; }; @l=localtime($x); $od=1440; -$d=&z(@l)-&z(gmtime($x)); $d+=$od; $d%=$od; $s=$d>$od/2?($d=$od-$d,'-'):'+'; -printf("%s, %d %s %d %02d:%02d:%02d %s%02d%02d\n", - (Sun,Mon,Tue,Wed,Thu,Fri,Sat)[$l[6]], $l[3], - (Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec)[$l[4]], $l[5]+1900, - $l[2],$l[1],$l[0], $s,$d/60,$d%60) || die "822-date: output error: $!\n"; + +$curtime = time; +@localtm = localtime ($curtime); +$localtms = localtime ($curtime); +@gmttm = gmtime ($curtime); +$gmttms = gmtime ($curtime); + +if ($localtm[0] != $gmttm[0]) { + die (sprintf ("local timezone differs from GMT by a non-minute interval\n" + . "local time: %s\n" + . "GMT time: %s\n", $localtms, $gmttms)); +} + +$localmin = $localtm[1] + $localtm[2] * 60; +$gmtmin = $gmttm[1] + $gmttm[2] * 60; + +if ((($gmttm[6] + 1) % 7) == $localtm[6]) { + $localmin += 1440; +} elsif ((($gmttm[6] - 1) % 7) == $localtm[6]) { + $localmin -= 1440; +} elsif ($gmttm[6] == $localtm[6]) { + 1; +} else { + die ("822-date: local time offset greater than or equal to 24 hours\n"); +} + +$offset = $localmin - $gmtmin; +$offhour = $offset / 60; +$offmin = abs ($offset % 60); + +if (abs ($offhour) >= 24) { + die ("822-date: local time offset greater than or equal to 24 hours\n"); +} + +printf + ( + "%s, %2d %s %d %02d:%02d:%02d %s%02d%02d\n", + (Sun,Mon,Tue,Wed,Thu,Fri,Sat)[$localtm[6]], # day of week + $localtm[3], # day of month + (Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec)[$localtm[4]], # month + $localtm[5]+1900, # year + $localtm[2], # hour + $localtm[1], # minute + $localtm[0], # sec + ($offset >= 0) ? '+' : '-',# TZ offset direction + abs ($offhour), # TZ offset hour + $offmin, # TZ offset minute + ) || die "822-date: output error: $!\n"; diff --git a/scripts/Makefile.am b/scripts/Makefile.am new file mode 100644 index 000000000..85e8bdf15 --- /dev/null +++ b/scripts/Makefile.am @@ -0,0 +1,90 @@ +## Process this file with automake to produce a Makefile.in + +AUTOMAKE_OPTIONS = 1.1 foreign + +## Directory definitions + +pkglibdir = $(libdir)/@PACKAGE@ +pkglocalstatedir = $(sharedstatedir)/@PACKAGE@ + +parsechangelogdir = $(pkglibdir)/parsechangelog +altssysconfdir = $(pkgsysconfdir)/alternatives +altslocalstatedir = $(pkglocalstatedir)/alternatives + +# This should be $(pkgsysconfdir), but uses $(sysconfdir) for backwards compatibility. +altssysconfdir = $(sysconfdir)/alternatives + + +## Automake variables + +bin_SCRIPTS = dpkg-name dpkg-source dpkg-genchanges dpkg-gencontrol \ + dpkg-shlibdeps dpkg-buildpackage dpkg-parsechangelog \ + dpkg-distaddfile 822-date dpkg-scanpackages + +sbin_PROGRAMS = start-stop-daemon +start_stop_daemon_SOURCES = start-stop-daemon.c + +sbin_SCRIPTS = update-rc.d update-alternatives \ + install-info dpkg-divert cleanup-info + +pkglib_SCRIPTS = controllib.pl + +lisp_LISP = debian-changelog-mode.el +ELCFILES = debian-changelog-mode.elc + +man_MANS = dpkg-name.1 dpkg-source.1 822-date.1 update-rc.d.8 \ + start-stop-daemon.8 update-alternatives.8 \ + install-info.8 dpkg-scanpackages.8 + +EXTRA_DIST = update-rc.d.pl \ + dpkg-name.sh dpkg-source.pl dpkg-genchanges.pl \ + dpkg-gencontrol.pl dpkg-shlibdeps.pl \ + dpkg-buildpackage.sh dpkg-parsechangelog.pl \ + dpkg-distaddfile.pl 822-date.pl dpkg-scanpackages.pl \ + update-alternatives.pl install-info.pl dpkg-divert.pl \ + cleanup-info.pl controllib.pl debian-changelog-mode.el \ + cl-debian.pl \ + $(man_MANS) + +noinst_DATA = cl-debian + +LSMANL = dpkg-gencontrol dpkg-genchanges dpkg-buildpackage \ + dpkg-distaddfile dpkg-parsechangelog dpkg-shlibdeps + +CLEANFILES = $(bin_SCRIPTS) $(sbin_SCRIPTS) $(noinst_DATA) $(ELCFILES) +MAINTAINERCLEANFILES = $(srcdir)/Makefile.in $(srcdir)/elisp-comp + +## Rules + +.PHONY: install-data-local uninstall-local + +SUFFIXES = .pl .sh + +%: %.pl + sed -e "s:^#![:space:]*/usr/bin/perl:#! $(perlpath):; \ + s:\$$dpkglibdir[[:space:]]*=[[:space:]]*['\"][^'\"]*['\"]:\$$dpkglibdir=\"$(pkglibdir)\":; \ + s:\$$version[[:space:]]*=[[:space:]]*['\"][^'\"]*[\"']:\$$version=\"$(VERSION)\":" \ + < $< > $@.new + chmod 755 $@.new + mv $@.new $@ + +%: %.sh + sed -e "s:version=\"[^\"]*\":version=\"$(VERSION)\":" \ + < $< > $@.new + chmod 755 $@.new + mv $@.new $@ + +install-data-local: cl-debian + $(mkinstalldirs) $(altslocalstatedir) $(altssysconfdir) + set -e; for f in $(LSMANL); do ln -sf $(mandir)/man1/dpkg-source.1 $(mandir)/man1/$$f.1; done + $(mkinstalldirs) $(parsechangelogdir) + $(INSTALL_PROGRAM) cl-debian $(parsechangelogdir)/debian + +uninstall-local: + $(RM) $(parsechangelogdir)/debian + -[ -e $(parsechangelogdir) ] && rmdir $(parsechangelogdir) + set -e; for f in $(LSMANL); do $(RM) $(mandir)/man1/$$f.1; done + -[ -e $(altssysconfdir) ] && rmdir $(altssysconfdir) + -[ -e $(altslocalstatedir) ] && rmdir $(altslocalstatedir) + +## End of file. diff --git a/scripts/Makefile.in b/scripts/Makefile.in deleted file mode 100644 index cff872874..000000000 --- a/scripts/Makefile.in +++ /dev/null @@ -1,98 +0,0 @@ -# Copyright (C) 1994 Ian Murdock <imurdock@debian.org> -# Copyright (C) 1994,1995,1996 Ian Jackson <ijackson@nyx.cs.du.edu> -# -# This is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as -# published by the Free Software Foundation; either version 2, -# or (at your option) any later version. -# -# This is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public -# License along with dpkg; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -srcdir = @srcdir@ -VPATH = @srcdir@ - -prefix = @prefix@ -bindir = $(prefix)/bin -sbindir = $(prefix)/sbin -datadir = /var/lib/dpkg -altsdatadir = $(datadir)/alternatives -mandir = $(prefix)/man -man1dir = $(mandir)/man1 -man8dir = $(mandir)/man8 -man1 = 1 -man8 = 8 -libdir = $(prefix)/lib -dpkglibdir = $(libdir)/dpkg -parsechangelogdir = $(dpkglibdir)/parsechangelog -elispdir = $(libdir)/emacs/site-lisp -etcdir= /etc -altsetcdir = $(etcdir)/alternatives -perlpath = @perlpath@ - -MAN1 = dpkg-name dpkg-source 822-date -LSMAN = dpkg-source.$(man1) -LSMANL= dpkg-gencontrol dpkg-genchanges dpkg-buildpackage \ - dpkg-distaddfile dpkg-parsechangelog dpkg-shlibdeps -EXC = dpkg-name dpkg-source dpkg-genchanges dpkg-gencontrol dpkg-shlibdeps \ - dpkg-buildpackage dpkg-parsechangelog dpkg-distaddfile 822-date \ - dpkg-scanpackages -MAN8 = update-rc.d start-stop-daemon update-alternatives install-info \ - dpkg-scanpackages -SBIN = update-rc.d start-stop-daemon update-alternatives install-info \ - dpkg-divert cleanup-info -LIB = controllib.pl -ELISP = debian-changelog-mode.el -CHGLGS= cl-debian - -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ - -.SUFFIXES: .pl .sh .gzuue - -.pl: - sed <$@.pl 's:^#!/usr/bin/perl:#!$(perlpath):; \ - s:\$dpkglibdir= "\.":\$dpkglibdir= "$(dpkglibdir)":' \ - | ../insert-version.pl >$@.new - chmod +x $@.new - mv $@.new $@ - -.sh: - sed <$@.sh 's:^dpkglibdir=/usr/lib/dpkg$$:dpkglibdir=$(dpkglibdir):' \ - | ../insert-version.pl >$@.new - chmod +x $@.new - mv $@.new $@ - -.gzuue: - uudecode <$@.gzuue - gunzip <$@.gz >$@.new - test ! -x $@.gz || chmod +x $@.new - rm $@.gz - mv $@.new $@ - -all: $(EXC) $(SBIN) $(CHGLGS) - -clean: - rm -f $(EXC) $(SBIN) $(CHGLGS) core *.new - -distclean: clean - rm -f Makefile *.orig *~ *.~* ./#*# i386elf-hello-world.gz - -install: all - for f in $(EXC) ; do $(INSTALL_PROGRAM) $$f $(bindir)/$$f ; done - for f in $(MAN1) ; do $(INSTALL_DATA) $$f.1 $(man1dir)/$$f.$(man1) ; done - for f in $(LSMANL) ; do ln -s $(LSMAN) $(man1dir)/$$f.$(man1) ; done - for f in $(SBIN) ; do $(INSTALL_PROGRAM) $$f $(sbindir)/$$f ; done - for f in $(MAN8) ; do $(INSTALL_DATA) $$f.8 $(man8dir)/$$f.$(man8) ; done - for f in $(LIB) ; do $(INSTALL_DATA) $$f $(dpkglibdir)/$$f ; done - for f in $(ELISP) ; do $(INSTALL_DATA) $$f $(elispdir)/$$f ; done - for f in $(CHGLGS) ; do $(INSTALL_PROGRAM) $$f \ - $(dpkglibdir)/parsechangelog/`echo $$f | sed -e 's/^cl-//'` ; \ - done diff --git a/scripts/cl-debian.pl b/scripts/cl-debian.pl index e97327c3c..dd2eb1e51 100644..100755 --- a/scripts/cl-debian.pl +++ b/scripts/cl-debian.pl @@ -25,7 +25,7 @@ sub usageversion { Ian Jackson. This is free software; see the GNU General Public Licence version 2 or later for copying conditions. There is NO warranty. -Usage: parsechangelog/dpkg [-v<versionsince] | -h +Usage: parsechangelog/dpkg [-v<versionsince>] | -h "; } @@ -107,11 +107,11 @@ while (<STDIN>) { $f{'Changes'}.= " $_\n .\n"; } elsif (m/^\S/) { &clerror("badly formatted heading line"); - } elsif (m/^ \-\- (\S.*\S) ((\w+\,\s*)?\d{1,2}\s+\w+\s+\d{4}\s+\d{1,2}:\d\d:\d\d\s+[-+]\d{4}(\s+\([^\\\(\)]\))?)$/) { + } elsif (m/^ \-\- (.*) <(.*)> ((\w+\,\s*)?\d{1,2}\s+\w+\s+\d{4}\s+\d{1,2}:\d\d:\d\d\s+[-+]\d{4}(\s+\([^\\\(\)]\))?)$/) { $expect eq 'more change data or trailer' || &clerror("found trailer where expected $expect"); - $f{'Maintainer'}= $1 unless defined($f{'Maintainer'}); - $f{'Date'}= $2 unless defined($f{'Date'}); + $f{'Maintainer'}= "$1 <$2>" unless defined($f{'Maintainer'}); + $f{'Date'}= $3 unless defined($f{'Date'}); # $f{'Changes'}.= " .\n $_\n"; $expect= 'next heading or eof'; last if $since eq ''; @@ -137,7 +137,7 @@ $expect eq 'next heading or eof' || die "found eof where expected $expect"; $f{'Changes'} =~ s/\n$//; $f{'Changes'} =~ s/^/\n/; -&outputclose; +&outputclose(0); sub clerror { &error("$_[0], at changelog line $."); } sub clwarn { &warn("$_[0], at changelog line $."); } diff --git a/scripts/cleanup-info.pl b/scripts/cleanup-info.pl index e6bfcc319..e6bfcc319 100644..100755 --- a/scripts/cleanup-info.pl +++ b/scripts/cleanup-info.pl diff --git a/scripts/controllib.pl b/scripts/controllib.pl index f662b6f83..6b9441839 100644..100755 --- a/scripts/controllib.pl +++ b/scripts/controllib.pl @@ -1,3 +1,4 @@ + $parsechangelog= 'dpkg-parsechangelog'; grep($capit{lc $_}=$_, qw(Pre-Depends Standards-Version Installed-Size)); @@ -10,6 +11,51 @@ $maxsubsts=50; $progname= $0; $progname= $& if $progname =~ m,[^/]+$,; +$getlogin = getlogin(); +if(!defined($getlogin)) { + open(SAVEIN, "<&STDIN"); + close(STDIN); + open(STDIN, "<&STDERR"); + + $getlogin = getlogin(); + + close(STDIN); + open(STDIN, "<&SAVEIN"); + close(SAVEIN); +} +if(!defined($getlogin)) { + open(SAVEIN, "<&STDIN"); + close(STDIN); + open(STDIN, "<&STDOUT"); + + $getlogin = getlogin(); + + close(STDIN); + open(STDIN, "<&SAVEIN"); + close(SAVEIN); +} + +if (defined ($ENV{'LOGNAME'})) { + if (!defined ($getlogin)) { + warn (sprintf ('no utmp entry available, using value of LOGNAME ("%s")', $ENV{'LOGNAME'})); + } else { + if ($getlogin ne $ENV{'LOGNAME'}) { + warn (sprintf ('utmp entry ("%s") does not match value of LOGNAME ("%s"); using "%s"', + $getlogin, $ENV{'LOGNAME'}, $ENV{'LOGNAME'})); + } + } + @fowner = getpwnam ($ENV{'LOGNAME'}); + if (! @fowner) { die (sprintf ('unable to get login information for username "%s"', $ENV{'LOGNAME'})); } +} elsif (defined ($getlogin)) { + @fowner = getpwnam ($getlogin); + if (! @fowner) { die (sprintf ('unable to get login information for username "%s"', $getlogin)); } +} else { + warn (sprintf ('no utmp entry available and LOGNAME not defined; using uid of process (%d)', $<)); + @fowner = getpwuid ($<); + if (! @fowner) { die (sprintf ('unable to get login information for uid %d', $<)); } +} +@fowner = @fowner[2,3]; + sub capit { return defined($capit{lc $_[0]}) ? $capit{lc $_[0]} : (uc substr($_[0],0,1)).(lc substr($_[0],1)); @@ -17,14 +63,14 @@ sub capit { sub findarch { $arch=`dpkg --print-architecture`; - $? && &subprocerr("dpkg --print-archictecture"); + $? && &subprocerr("dpkg --print-architecture"); $arch =~ s/\n$//; $substvar{'Arch'}= $arch; } sub substvars { my ($v) = @_; - my $lhs,$vn,$rhs,$count; + my ($lhs,$vn,$rhs,$count); $count=0; while ($v =~ m/\$\{([-:0-9a-z]+)\}/i) { $count < $maxsubsts || @@ -42,6 +88,7 @@ sub substvars { } sub outputclose { + my ($dosubstvars) = @_; for $f (keys %f) { $substvar{"F:$f"}= $f{$f}; } if (length($varlistfile)) { $varlistfile="./$varlistfile" if $varlistfile =~ m/\s/; @@ -55,12 +102,14 @@ sub outputclose { } close(SV); } elsif ($! !~ m/no such file or directory/i) { - &error("unable to open substvars file $varlistvile: $!"); + &error("unable to open substvars file $varlistfile: $!"); } } for $f (sort { $fieldimps{$b} <=> $fieldimps{$a} } keys %f) { $v= $f{$f}; - $v= &substvars($v); + if ($dosubstvars) { + $v= &substvars($v); + } $v =~ m/\S/ || next; # delete whitespace-only fields $v =~ m/\n\S/ && &internerr("field $f has newline then non whitespace >$v<"); $v =~ m/\n[ \t]*\n/ && &internerr("field $f has blank lines >$v<"); diff --git a/scripts/debian-changelog-mode.el b/scripts/debian-changelog-mode.el index 33af1f1cf..23b72d80d 100644 --- a/scripts/debian-changelog-mode.el +++ b/scripts/debian-changelog-mode.el @@ -3,6 +3,7 @@ ;; Keywords: maint ;; Copyright (C) 1996 Ian Jackson +;; Copyright (C) 1997 Klee Dienes ;; This file is part of dpkg. ;; ;; It is free software; you can redistribute it and/or modify @@ -22,13 +23,24 @@ (require 'add-log) -(defvar debian-changelog-urgencies - '((?l."low") (?m."medium") (?h."HIGH")) - "alist of keystrokes vs. urgency values for debian-changelog-urgency \\[debian-changelog-urgency].") +(defun debian-changelog-setheadervalue (re str) + (let (a b v k + (lineend (save-excursion (end-of-line) (point)))) + (save-excursion + (goto-char (point-min)) + (re-search-forward re lineend) + (setq a (match-beginning 1) + b (match-end 1)) + (goto-char a) + (delete-region a b) + (insert str)))) -(defvar debian-changelog-distributions - '((?s."stable") (?u."unstable") (?c."contrib") (?n."non-free") (?e."experimental")) - "alist of keystrokes vs. distribution values for debian-changelog-distribution \\[debian-changelog-distribution].") +(defun debian-changelog-getheadervalue (re) + (let ((lineend (save-excursion (end-of-line) (point)))) + (save-excursion + (goto-char (point-min)) + (re-search-forward re lineend) + (buffer-substring-no-properties (match-beginning 1) (match-end 1))))) (defvar debian-changelog-mode-map nil "Keymap for Debian changelog major mode.") @@ -59,45 +71,44 @@ (insert " * ") (save-excursion (insert "\n"))) -(defun debian-changelog-headervalue (arg re alist) - (let (a b v k - (lineend (save-excursion (end-of-line) (point)))) - (save-excursion - (goto-char (point-min)) - (re-search-forward re lineend) - (setq a (match-beginning 1) - b (match-end 1)) - (goto-char a) - (if arg nil - (message (mapconcat - (function (lambda (x) (format "%c:%s" (car x) (cdr x)))) - alist " ")) - (while (not v) - (setq k (read-char)) - (setq v (assoc k alist)))) - (delete-region a b) - (if arg nil (insert (cdr v)))) - (if arg (goto-char a)))) - -(defun debian-changelog-urgency (arg) - "Without argument, prompt for a key for a new urgency value (using -debian-changelog-urgencies). With argument, delete the current urgency -and position the cursor to type a new one." +(defun debian-changelog-distribution (arg) + "Delete the current distribution and prompt for a new one." (interactive "P") - (debian-changelog-headervalue - arg - "\\;[^\n]* urgency=\\(\\sw+\\)" - debian-changelog-urgencies)) + (let* ((curstr + (debian-changelog-getheadervalue ") \\(.*\\)\\;")) + (str (completing-read + "Select distribution: " + '(("stable" 1) + ("frozen" 2) + ("unstable" 3) + ("stable frozen unstable" 4) + ("stable unstable frozen" 4) + ("unstable stable frozen" 4) + ("unstable frozen stable" 4) + ("frozen unstable stable" 4) + ("frozen stable unstable" 4) + ("frozen unstable" 5) + ("unstable frozen" 5) + ("stable frozen" 6) + ("frozen stable" 6) + ("stable unstable" 7) + ("unstable stable" 7)) + nil t nil))) + (if (not (equal str "")) + (debian-changelog-setheadervalue ") \\(.*\\)\\;" str)))) -(defun debian-changelog-distribution (arg) - "Without argument, prompt for a key for a new distribution value (using -debian-changelog-distributions). With argument, delete the current distribution -and position the cursor to type a new one." +(defun debian-changelog-urgency (arg) + "Delete the current urgency and prompt for a new one." (interactive "P") - (debian-changelog-headervalue - arg - ") \\(.*\\)\\;" - debian-changelog-distributions)) + (let* ((urgency-regex "\\;[^\n]* urgency=\\(\\sw+\\)") + (curstr + (debian-changelog-getheadervalue urgency-regex)) + (str (completing-read + "Select urgency: " + '(("low" 1) ("medium" 2) ("high" 3)) + nil t nil))) + (if (not (equal str "")) + (debian-changelog-setheadervalue urgency-regex str)))) (defun debian-changelog-finalised-p () "Check whether the most recent debian-style changelog entry is @@ -135,14 +146,16 @@ release date." (match-string 3)) (let ((pkg (read-string "Package name: ")) (ver (read-string "New version (including any revision): "))) - (concat pkg " (" ver ") unstable; urgency=" - (cdr (car debian-changelog-urgencies))))))) + (concat pkg " (" ver ") unstable; urgency=low"))))) (insert headstring "\n\n * ") (save-excursion - (if (re-search-backward "\;[^\n]* urgency=\\(\\sw+\\)" (point-min) t) - (progn (goto-char (match-beginning 1)) - (delete-region (point) (match-end 1)) - (insert (cdr (car debian-changelog-urgencies)))))) + (if (re-search-backward ") \\([^\n]*\\);[^\n]* urgency=\\(\\sw+\\)" (point-min) t) + (progn (goto-char (match-beginning 2)) + (delete-region (point) (match-end 2)) + (insert "low") + (goto-char (match-beginning 1)) + (delete-region (point) (match-end 1)) + (insert "unstable")))) (save-excursion (insert "\n\n --\n\n")))) (defun debian-changelog-finalise-and-save () @@ -153,6 +166,25 @@ release date." (or f (debian-changelog-finalise-last-version))) (save-buffer)) +(defun debian-changelog-date-string () + "Return RFC-822 format date string" + (let* ((dp "822-date") + (cp (point)) + (ret (call-process "822-date" nil t)) + (np (point)) + (out nil)) + (cond ((not (or (eq ret nil) (eq ret 0))) + (setq out (buffer-substring-no-properties cp np)) + (delete-region cp np) + (error (concat "error from " dp ": " out))) + (t + (backward-char) + (or (looking-at "\n") + (error (concat "error from " dp ": expected newline after date string"))) + (setq out (buffer-substring-no-properties cp (- np 1))) + (delete-region cp np) + out)))) + (defun debian-changelog-finalise-last-version () "Remove the `finalisation' information (maintainer's name and email address and release date) so that new entries can be made." @@ -164,14 +196,8 @@ address and release date) so that new entries can be made." (goto-char (point-min)) (re-search-forward "\n --\\([ \t]*\\)") (delete-region (match-beginning 1) (match-end 1)) - (insert " " add-log-full-name " <" add-log-mailing-address "> ") - (let* ((dp "822-date") - (r (call-process dp nil t))) - (or (= r 0) (error (concat dp " returned error status " (prin1-to-string r))))) - (backward-char) - (or (looking-at "\n") - (error (concat "expected newline after date from " dp))) - (delete-char 1))) + (insert " " add-log-full-name " <" add-log-mailing-address "> " + (debian-changelog-date-string)))) (defun debian-changelog-unfinalise-last-version () "Remove the `finalisation' information (maintainer's name and email diff --git a/scripts/dpkg-buildpackage.sh b/scripts/dpkg-buildpackage.sh index 80204d934..e4fb94fc9 100755 --- a/scripts/dpkg-buildpackage.sh +++ b/scripts/dpkg-buildpackage.sh @@ -13,9 +13,12 @@ version 2 or later for copying conditions. There is NO warranty. Usage: dpkg-buildpackage [options] Options: -r<gain-root-command> - -p<pgp-command> + -p<sign-command> + -sgpg the sign-command is called like GPG + -spgp the sign-command is called like PGP -us unsigned source -uc unsigned changes + -a<arch> architecture field of the changes _file_name_ -b binary-only, do not build source } also passed to -B binary-only, no arch-indep files } dpkg-genchanges -v<version> changes since version <version> } @@ -24,21 +27,35 @@ Options: -r<gain-root-command> -si (default) src includes orig for rev. 0 or 1 } genchanges -sa uploaded src always includes orig } -sd uploaded src is diff and .dsc only } + -nc do not clean source tree (implies -b) -tc clean source tree when finished -h print this message END } rootcommand='' -pgpcommand=pgp +signcommand=pgp # Default command for signing +warnpgp='no' # Display a warning to encourage switching to gpg? +if [ ! -e $HOME/.gnupg/secring.gpg ] ; then + warnpgp=yes +fi +if [ -e $HOME/.gnupg/secring.gpg -a ! -e $HOME/.pgp/secring.pgp ] ; then + signcommand=gpg +fi +if [ -e $HOME/.pgp/secring.pgp -a ! -e $HOME/.gnupg/secring.gpg ] ; then + signcommand=pgp +fi +signinterface=$signcommand signsource='withecho signfile' signchanges='withecho signfile' cleansource=false binarytarget=binary sourcestyle='' version='' +since='' maint='' desc='' +noclean=false while [ $# != 0 ] do @@ -46,16 +63,20 @@ do case "$1" in -h) usageversion; exit 0 ;; -r*) rootcommand="$value" ;; - -p*) pgpcommand="$value" ;; - -us) signsource=: ;; - -uc) signchanges=: ;; + -p*) signcommand="$value"; warnpgp='' ;; + -sgpg) signinterface=gpg ;; + -spgp) signinterface=pgp ;; + -us) signsource=: ; warnpgp='' ;; + -uc) signchanges=: ; warnpgp='' ;; + -a*) opt_a=1; arch="$value" ;; -si) sourcestyle=-si ;; -sa) sourcestyle=-sa ;; -sd) sourcestyle=-sd ;; -tc) cleansource=true ;; + -nc) noclean=true; binaryonly=-b ;; -b) binaryonly=-b ;; - -B) binaryonly=-b; binarytarget=binary-arch ;; - -v*) version="$value" ;; + -B) binaryonly=-B; binarytarget=binary-arch ;; + -v*) since="$value" ;; -m*) maint="$value" ;; -C*) descfile="$value" ;; *) echo >&2 "$progname: unknown option or argument $1" @@ -64,12 +85,20 @@ do shift done +if test "X$warnpgp" = "Xyes" ; then + echo >&2 <<EOWARN +The Debian project will switch to using GPG (the GNU Privacy Guard) instead +of PGP for signing packages. You might want to make preparations. Check out +the gnupg and debian-keyring packages. +EOWARN +fi + mustsetvar () { if [ "x$2" = x ]; then - echo >&2 "$progname: unable to determine $3" + echo >&2 "$progname: unable to determine $3" ; \ exit 1 else - echo "$progname: $3 is $2" + echo "$progname: $3 is $2" ; \ eval "$1=\"\$2\"" fi } @@ -78,12 +107,27 @@ curd="`pwd`" dirn="`basename \"$curd\"`" mustsetvar package "`dpkg-parsechangelog | sed -n 's/^Source: //p'`" "source package" mustsetvar version "`dpkg-parsechangelog | sed -n 's/^Version: //p'`" "source version" -mustsetvar arch "`dpkg --print-architecture`" "build architecture" -pv="${package}_${version}" -pva="${package}_${version}_${arch}" +if [ -n "$maint" ]; then maintainer="$maint"; +else mustsetvar maintainer "`dpkg-parsechangelog | sed -n 's/^Maintainer: //p'`" "source maintainer"; fi +test "${opt_a}" \ + || mustsetvar arch "`dpkg --print-architecture`" "build architecture" + +sversion=`echo "$version" | perl -pe 's/^\d+://'` +pv="${package}_${sversion}" +pva="${package}_${sversion}${arch:+_${arch}}" signfile () { - $pgpcommand +clearsig=on -fast <"../$1" >"../$1.asc" + if test $signinterface = gpg ; then + # --textmode doesn't seem to work; we use perl to filter ^M; + # this doesn't affect the actual signature. + (cat "../$1" ; echo "") | \ + $signcommand --local-user "$maintainer" --clearsign --armor \ + --textmode --output - - | \ + perl -n -p -e 's/\r$//' > "../$1.asc" + else + $signcommand -u "$maintainer" +clearsig=on -fast <"../$1" \ + >"../$1.asc" + fi echo mv -- "../$1.asc" "../$1" } @@ -93,20 +137,24 @@ withecho () { "$@" } -set -- $binaryonly +set -- $binaryonly $sourcestyle if [ -n "$maint" ]; then set -- "$@" "-m$maint" ; fi -if [ -n "$version" ]; then set -- "$@" "-v$version" ; fi +if [ -n "$since" ]; then set -- "$@" "-v$since" ; fi if [ -n "$desc" ]; then set -- "$@" "-C$desc" ; fi -withecho $rootcommand debian/rules clean +if [ x$noclean != xtrue ]; then + withecho $rootcommand debian/rules clean +fi if [ x$binaryonly = x ]; then cd ..; withecho dpkg-source -b "$dirn"; cd "$dirn" fi withecho debian/rules build withecho $rootcommand debian/rules $binarytarget -$signsource "$pv.dsc" +if [ x$binaryonly = x ]; then + $signsource "$pv.dsc" +fi chg=../"$pva.changes" -withecho dpkg-genchanges $binaryonly $sourcestyle >"$chg" +withecho dpkg-genchanges "$@" >"$chg" fileomitted () { set +e diff --git a/scripts/dpkg-distaddfile.pl b/scripts/dpkg-distaddfile.pl index 6bbfebcaf..3bebc2c82 100644..100755 --- a/scripts/dpkg-distaddfile.pl +++ b/scripts/dpkg-distaddfile.pl @@ -45,6 +45,8 @@ while (@ARGV && $ARGV[0] =~ m/^-/) { $fileslistfile="./$fileslistfile" if $fileslistfile =~ m/^\s/; open(Y,"> $fileslistfile.new") || &syserr("open new files list file"); +chown(@fowner, "$fileslistfile.new") + || &syserr("chown new files list file"); if (open(X,"< $fileslistfile")) { while (<X>) { s/\n$//; diff --git a/scripts/dpkg-divert.pl b/scripts/dpkg-divert.pl index 26cb9341f..ce58e8d93 100644..100755 --- a/scripts/dpkg-divert.pl +++ b/scripts/dpkg-divert.pl @@ -188,6 +188,7 @@ sub checkrename { sub dorename { return unless $dorename; + return if $testmode; if (@ssrc) { if (@sdest) { unlink($rsrc) || &quit("rename: remove duplicate old link \`$rsrc': $!"); @@ -200,6 +201,7 @@ sub dorename { sub save { return if $testmode; open(N,"> $admindir/diversions-new") || &quit("create diversions-new: $!"); + chmod 0644, "$admindir/diversions-new"; for ($i=0; $i<=$#contest; $i++) { print(N "$contest[$i]\n$altname[$i]\n$package[$i]\n") || &quit("write diversions-new: $!"); diff --git a/scripts/dpkg-genchanges.pl b/scripts/dpkg-genchanges.pl index 61e321bfd..35b1f904d 100644..100755 --- a/scripts/dpkg-genchanges.pl +++ b/scripts/dpkg-genchanges.pl @@ -25,7 +25,8 @@ version 2 or later for copying conditions. There is NO warranty. Usage: dpkg-genchanges [options ...] -Options: -b or -B (identical) binary-only build - no source files +Options: -b binary-only build - no source files + -B arch-specific - no source or arch-indep files -c<controlfile> get control info from this file -l<changelogfile> get per-version info from this file -f<fileslistfile> get .deb files list from this file @@ -52,8 +53,12 @@ $i=100;grep($fieldimps{$_}=$i--, while (@ARGV) { $_=shift(@ARGV); - if (m/^-b$|^-B$/) { + if (m/^-b$/) { $binaryonly= 1; + } elsif (m/^-B$/) { + $archspecific=1; + $binaryonly= 1; + print STDERR "$progname: arch-specific upload - not including arch-independent packages\n"; } elsif (m/^-s([iad])$/) { $sourcestyle= $1; } elsif (m/^-q$/) { @@ -76,6 +81,8 @@ while (@ARGV) { $changelogformat=$1; } elsif (m/^-D([^\=:]+)[=:]/) { $override{$1}= $'; + } elsif (m/^-u/) { + $uploadfilesdir= $'; } elsif (m/^-U([^\=:]+)$/) { $remove{$1}= 1; } elsif (m/^-V(\w[-:0-9A-Za-z]*)[=:]/) { @@ -95,8 +102,10 @@ $fileslistfile="./$fileslistfile" if $fileslistfile =~ m/^\s/; open(FL,"< $fileslistfile") || &syserr("cannot read files list file"); while(<FL>) { if (m/^(([-+.0-9a-z]+)_([^_]+)_(\w+)\.deb) (\S+) (\S+)$/) { - defined($p2f{$2}) && + defined($p2f{"$2 $4"}) && &warn("duplicate files list entry for package $2 (line $.)"); + $f2p{$1}= $2; + $p2f{"$2 $4"}= $1; $p2f{$2}= $1; $p2ver{$2}= $3; defined($f2sec{$1}) && @@ -105,7 +114,7 @@ while(<FL>) { $f2pri{$1}= $6; push(@fileslistfiles,$1); } elsif (m/^([-+.,_0-9a-zA-Z]+) (\S+) (\S+)$/) { - defined($f2sec{$1}) && + defined($f2sec{$1}) && &warn("duplicate files list entry for file $1 (line $.)"); $f2sec{$1}= $2; $f2pri{$1}= $3; @@ -116,39 +125,49 @@ while(<FL>) { } close(FL); -$archspecific=0; for $_ (keys %fi) { $v= $fi{$_}; if (s/^C //) { #print STDERR "G key >$_< value >$v<\n"; - if (m/^Source$/) { &setsourcepackage; } - elsif (m/^Section$|^Priority$/) { $sourcedefault{$_}= $v; } - elsif (s/^X[BS]*C[BS]*-//i) { $f{$_}= $v; } - elsif (m/|^X[BS]+-|^Standards-Version$|^Maintainer$/i) { } - else { &unknown('general section of control info file'); } + if (m/^Source$/) { &setsourcepackage; } + elsif (m/^Section$|^Priority$/) { $sourcedefault{$_}= $v; } + elsif (s/^X[BS]*C[BS]*-//i) { $f{$_}= $v; } + elsif (m/|^X[BS]+-|^Standards-Version$|^Maintainer$/i) { } + else { &unknown('general section of control info file'); } } elsif (s/^C(\d+) //) { #print STDERR "P key >$_< value >$v<\n"; - $i=$1; $p=$fi{"C$i Package"}; - defined($p2f{$p}) || &error("package $p in control file but not in files list"); - $f= $p2f{$p}; - if (m/^Description$/) { - $v=$` if $v =~ m/\n/; - push(@descriptions,sprintf("%-10s - %-.65s",$p,$v)); - } elsif (m/^Section$/) { - $f2seccf{$f}= $v; - } elsif (m/^Priority$/) { - $f2pricf{$f}= $v; - } elsif (s/^X[BS]*C[BS]*-//i) { - $f{$_}= $v; - } elsif (m/^Architecture$/) { - $v= $arch if $v eq 'any'; - push(@archvalues,$v) unless $archadded{$v}++; - } elsif (m/^(Package|Essential|Pre-Depends|Depends|Provides)$/ || - m/^(Recommends|Suggests|Optional|Conflicts|Replaces)$/ || - m/^X[CS]+-/i) { - } else { - &unknown("package's section of control info file"); - } + $i=$1; $p=$fi{"C$i Package"}; $a=$fi{"C$i Architecture"}; + if (!defined($p2f{$p})) { + if ($a eq 'any' || ($a eq 'all' && !$archspecific) || + grep($_ eq $substvar{'Arch'}, split(/\s+/, $a))) { + &error("package $p in control file but not in files list"); + } + } else { + $p2arch{$p}=$a; + $f=$p2f{$p}; + if (m/^Description$/) { + $v=$` if $v =~ m/\n/; + push(@descriptions,sprintf("%-10s - %-.65s",$p,$v)); + } elsif (m/^Section$/) { + $f2seccf{$f}= $v; + } elsif (m/^Priority$/) { + $f2pricf{$f}= $v; + } elsif (s/^X[BS]*C[BS]*-//i) { + $f{$_}= $v; + } elsif (m/^Architecture$/) { + if ($v eq 'any' || grep($_ eq $arch, split(/\s+/, $v))) { + $v= $arch; + } elsif ($v ne 'all') { + $v= ''; + } + push(@archvalues,$v) unless !$v || $archadded{$v}++; + } elsif (m/^(Package|Essential|Pre-Depends|Depends|Provides)$/ || + m/^(Recommends|Suggests|Optional|Conflicts|Replaces)$/ || + m/^X[CS]+-/i) { + } else { + &unknown("package's section of control info file"); + } + } } elsif (s/^L //) { #print STDERR "L key >$_< value >$v<\n"; if (m/^Source$/) { @@ -177,18 +196,19 @@ if ($changesdescription) { } for $p (keys %p2f) { - defined($p2i{"C $p"}) || - &warn("package $p listed in files list but not in control info"); + my ($pp, $aa) = (split / /, $p); + defined($p2i{"C $pp"}) || + &warn("package $pp listed in files list but not in control info"); } for $p (keys %p2f) { $f= $p2f{$p}; $sec= $f2seccf{$f}; $sec= $sourcedefault{'Section'} if !length($sec); - if (!length($sec)) { $sec='-'; &warn("missing Section for binary package $p"); } + if (!length($sec)) { $sec='-'; &warn("missing Section for binary package $p; using '-'"); } $sec eq $f2sec{$f} || &error("package $p has section $sec in control file". " but $f2sec{$f} in files list"); $pri= $f2pricf{$f}; $pri= $sourcedefault{'Priority'} if !length($pri); - if (!length($pri)) { $pri='-'; &warn("missing Priority for binary package $p"); } + if (!length($pri)) { $pri='-'; &warn("missing Priority for binary package $p; using '-'"); } $pri eq $f2pri{$f} || &error("package $p has priority $pri in control". " file but $f2pri{$f} in files list"); } @@ -201,9 +221,10 @@ if (!$binaryonly) { $pri= $sourcedefault{'Priority'}; if (!length($pri)) { $pri='-'; &warn("missing Priority for source files"); } - $dsc= "$uploadfilesdir/${sourcepackage}_${version}.dsc"; + ($sversion = $version) =~ s/^\d+://; + $dsc= "$uploadfilesdir/${sourcepackage}_${sversion}.dsc"; open(CDATA,"< $dsc") || &error("cannot open .dsc file $dsc: $!"); - push(@sourcefiles,"${sourcepackage}_${version}.dsc"); + push(@sourcefiles,"${sourcepackage}_${sversion}.dsc"); &parsecdata('S',-1,"source control file $dsc"); $files= $fi{'S Files'}; @@ -247,6 +268,7 @@ $f{'Description'}= "\n ".join("\n ",sort @descriptions); $f{'Files'}= ''; for $f (@sourcefiles,@fileslistfiles) { + next if ($archspecific && ($p2arch{$f2p{$f}} eq 'all')); next if $filedone{$f}++; $uf= "$uploadfilesdir/$f"; open(STDIN,"< $uf") || &syserr("cannot open upload file $uf for reading"); @@ -277,4 +299,4 @@ for $f (qw(Urgency)) { for $f (keys %override) { $f{&capit($f)}= $override{$f}; } for $f (keys %remove) { delete $f{&capit($f)}; } -&outputclose; +&outputclose(0); diff --git a/scripts/dpkg-gencontrol.pl b/scripts/dpkg-gencontrol.pl index 4a8c28f62..6f4604ff5 100644..100755 --- a/scripts/dpkg-gencontrol.pl +++ b/scripts/dpkg-gencontrol.pl @@ -87,8 +87,10 @@ while (@ARGV) { } } -$arch=`dpkg --print-architecture`; -$? && &subprocerr("dpkg --print-architecture"); +$arch = $override{Architecture} or do { + $arch=`dpkg --print-architecture`; + $? && &subprocerr("dpkg --print-architecture"); +}; $arch =~ s/\n$//; &parsechangelog; @@ -201,17 +203,22 @@ if (length($substvar{'Installed-Size'})) { $fileslistfile="./$fileslistfile" if $fileslistfile =~ m/^\s/; open(Y,"> $fileslistfile.new") || &syserr("open new files list file"); +chown(@fowner, "$fileslistfile.new") + || &syserr("chown new files list file"); if (open(X,"< $fileslistfile")) { while (<X>) { s/\n$//; - next if m/^([-+0-9a-z.]+)_[^_]+_\w+\.deb / && $1 eq $oppackage; + next if m/^([-+0-9a-z.]+)_[^_]+_(\w+)\.deb / + && ($1 eq $oppackage) && ($2 eq $arch); print(Y "$_\n") || &syserr("copy old entry to new files list file"); } } elsif ($! != ENOENT) { &syserr("read old files list file"); } +$sversion=$f{'Version'}; +$sversion =~ s/^\d+://; print(Y &substvars(sprintf("%s_%s_%s.deb %s %s\n", - $oppackage,$f{'Version'},$f{'Architecture'}, + $oppackage,$sversion,$f{'Architecture'}, &spfileslistvalue('Section'), &spfileslistvalue('Priority')))) || &syserr("write new entry to new files list file"); close(Y) || &syserr("close new files list file"); @@ -226,7 +233,7 @@ if (!$stdout) { open(STDOUT,"> $cf.new") || &syserr("cannot open new output control file \`$cf.new'"); } -&outputclose; +&outputclose(1); if (!$stdout) { rename("$cf.new","$cf") || &syserr("cannot install output control file \`$cf'"); } diff --git a/scripts/dpkg-name.sh b/scripts/dpkg-name.sh index 545789659..545789659 100644..100755 --- a/scripts/dpkg-name.sh +++ b/scripts/dpkg-name.sh diff --git a/scripts/dpkg-parsechangelog.pl b/scripts/dpkg-parsechangelog.pl index f5eeb5eab..f5eeb5eab 100644..100755 --- a/scripts/dpkg-parsechangelog.pl +++ b/scripts/dpkg-parsechangelog.pl diff --git a/scripts/dpkg-shlibdeps.pl b/scripts/dpkg-shlibdeps.pl index c2e05b420..91d92f528 100644..100755 --- a/scripts/dpkg-shlibdeps.pl +++ b/scripts/dpkg-shlibdeps.pl @@ -70,40 +70,65 @@ while (@ARGV) { @exec || usageerr("need at least one executable"); +sub isbin { + open (F, $_[0]) || die("unable to open '$_[0]' for test"); + if (read (F, $d, 4) != 4) { + die ("unable to read first four bytes of '$_[0]' as magic number"); + } + if ($d =~ /^\177ELF$/) { # ELF binary + return 1; + } elsif ($d =~ /^\#\!..$/) { # shell script + return 0; + } elsif (unpack ('N', $d) == 0xcafebabe) { # JAVA binary + return 0; + } else { + die("unrecognized file type for '$_[0]'"); + } +} + for ($i=0;$i<=$#exec;$i++) { + if (!isbin ($exec[$i])) { next; } defined($c= open(P,"-|")) || syserr("cannot fork for ldd"); if (!$c) { exec("ldd","--",$exec[$i]); syserr("cannot exec ldd"); } $nthisldd=0; while (<P>) { - s/\n$//; - if (m,^\t(\S+)\.so\.(\S+) \=\> (/\S+)$,) { - push(@libname,$1); push(@libsoname,$2); push(@libpath,$3); - push(@libf,$execf[$i]); - push(@libpaths,$3) if !$libpathadded{$3}++; - $nthisldd++; - } else { - &warn("unknown output from ldd on \`$exec[$i]': \`$_'"); - } + chomp; + if (m,^\s+(\S+)\s+\=\>\s+\1$,) { + # shared libraries depend on themselves (unsure why) + # Only under old ld.so + $nthisldd++; + } elsif (m,\s+statically linked(\s+\(ELF\))?$,) { + $nthisldd++; + } elsif (m,^\s+(\S+)\.so\.(\S+)\s+=>\s+(/\S+)(\s+\(0x.+\))?$,) { + push(@libname,$1); push(@libsoname,$2); push(@libpath,$3); + push(@libf,$execf[$i]); + push(@libpaths,$3) if !$libpathadded{$3}++; + $nthisldd++; + } else { + &warn("unknown output from ldd on \`$exec[$i]': \`$_'"); + } } close(P); $? && subprocerr("ldd on \`$exec[$i]'"); $nthisldd || &warn("ldd on \`$exec[$i]' gave nothing on standard output"); } -grep(s/\[\?\*/\\$&/g, @libpaths); -defined($c= open(P,"-|")) || syserr("cannot fork for dpkg --search"); -if (!$c) { exec("dpkg","--search","--",@libpaths); syserr("cannot exec dpkg"); } -while (<P>) { - s/\n$//; - if (m/^local diversion |^diversion by/) { - &warn("diversions involved - output may be incorrect"); - print(STDERR " $_\n") || syserr("write diversion info to stderr"); - } elsif (m=^(\S+(, \S+)*): (/.+)$=) { - $pathpackages{$+}= $1; - } else { - &warn("unknown output from dpkg --search: \`$_'"); +if ($#libpaths >= 0) { + grep(s/\[\?\*/\\$&/g, @libpaths); + defined($c= open(P,"-|")) || syserr("cannot fork for dpkg --search"); + if (!$c) { exec("dpkg","--search","--",@libpaths); syserr("cannot exec dpkg"); } + while (<P>) { + s/\n$//; + if (m/^local diversion |^diversion by/) { + &warn("diversions involved - output may be incorrect"); + print(STDERR " $_\n") || syserr("write diversion info to stderr"); + } elsif (m=^(\S+(, \S+)*): (/.+)$=) { + $pathpackages{$+}= $1; + } else { + &warn("unknown output from dpkg --search: \`$_'"); + } } + close(P); $? && subprocerr("dpkg --search"); } -close(P); $? && subprocerr("dpkg --search"); LIB: for ($i=0;$i<=$#libname;$i++) { scanshlibsfile($shlibslocal,$libname[$i],$libsoname[$i],$libf[$i]) && next; @@ -169,6 +194,8 @@ if (!$stdout) { $varlistfile="./$varlistfile" if $fileslistfile =~ m/^\s/; open(Y,"> $varlistfile.new") || syserr("open new substvars file \`$varlistfile.new'"); + chown(@fowner, "$varlistfile.new") || + syserr("chown of \`$varlistfile.new'"); if (open(X,"< $varlistfile")) { while (<X>) { s/\n$//; diff --git a/scripts/dpkg-source.1 b/scripts/dpkg-source.1 index 5147e4dc8..cd6ce7c1a 100644 --- a/scripts/dpkg-source.1 +++ b/scripts/dpkg-source.1 @@ -62,7 +62,7 @@ control area file of the package containing the file which reports as satisfying the library dependency, or .BR /etc/dpkg/shlibs.default . The first match will be used. See the -.I dpkg programmers' manual +.I Debian packaging manual for details of the format of shared library dependency files. .B dpkg-genchanges @@ -218,10 +218,10 @@ This option is understood by .BI -F changelogformat Specifies the format of the changelog. By default the format is read from a special line near the bottom of the changelog (see the -programmers' manual) or failing that defaults to +Debian packaging manual) or failing that defaults to .BR debian , the standard format described in the -.IR "dpkg programmers' manual" . +.IR "Debian packaging manual" . This option is understood by .BR dpkg-source ", " dpkg-gencontrol " and " dpkg-genchanges . .SH DPKG-SOURCE OPTIONS @@ -371,7 +371,7 @@ does not take any non-option arguments. .BI -p package Generate information for the binary package .IR package . -If the source control file lists several binary packages then this +If the source control file lists only one binary package then this option may be omitted; otherwise it is essential to select which binary package's information to generate. .TP @@ -507,6 +507,7 @@ and will get as arguments the name of the real command to run and the arguments it should take. .I gain-root-command should not contain spaces or any other shell metacharacters. +.\" what happens, if it contains spaces? (hs) .I gain-root-command might typically be .BR sudo ", " super " or " really . @@ -518,24 +519,29 @@ shell with .B -c instead of passing arguments individually to the command to be run. .TP -.BI -p pgp-command +.BI -p sign-command When .B dpkg-buildpackage -needs to execute PGP to sign a source control +needs to execute GPG or PGP to sign a source control .RB ( .dsc ) file or a .B .changes file it will run -.I pgp-command +.I sign-command (searching the .B PATH if necessary) instead of .BR pgp . -.I pgp-command +.I sign-command will get all the arguments that .B pgp -would have done. -.I pgp-command +would have gotten. If +.I sign-command +takes its arguments in GPG rather than PGP style, you should give +the +.B -sgpg +option. +.I sign-command should not contain spaces or any other shell metacharacters. .TP .B -tc @@ -545,7 +551,7 @@ Clean the source tree (using after the package has been built. .TP .BR -us ", " -uc -Do not PGP-sign the source package or the changelog, respectively. +Do not sign the source package or the changelog, respectively. .SH DPKG-DISTADDFILE ARGUMENTS .B dpkg-distaddfile does not take any non-common options. It takes three non-option @@ -705,15 +711,17 @@ are not legal in package names or version numbers. It should be possible to specify spaces and shell metacharacters in and initial arguments for -.IR gain-root-command " and " pgp-command . +.IR gain-root-command " and " sign-command . .SH SEE ALSO -.IR "dpkg programmers' manual" , +.IR "Debian packaging manual" , .br .IR "Debian policy manual" , .br .BR dpkg\-deb (1), .BR dpkg (8), -.BR dselect (8). +.BR dselect (8), +.BR gpg (1), +.BR pgp (1). .SH AUTHOR The utilities and this manpage were written by Ian Jackson. They are Copyright (C)1995-1996 by him and released under the GNU General diff --git a/scripts/dpkg-source.pl b/scripts/dpkg-source.pl index 09f42c918..db741fde8 100644..100755 --- a/scripts/dpkg-source.pl +++ b/scripts/dpkg-source.pl @@ -1,21 +1,29 @@ -#!/usr/bin/perl +#! /usr/bin/perl -$dpkglibdir= "."; -$version= '1.3.0'; # This line modified by Makefile +my $dpkglibdir = "."; +my $version = "1.3.0"; # This line modified by Makefile -$sourcestyle= 'X'; +my @filesinarchive; +my %dirincluded; +my %notfileobject; +my $fn; + +$sourcestyle = 'X'; use POSIX; -use POSIX qw(:errno_h :signal_h); +use POSIX qw (:errno_h :signal_h); + +use strict 'refs'; -push(@INC,$dpkglibdir); +push (@INC, $dpkglibdir); require 'controllib.pl'; sub usageversion { print STDERR "Debian GNU/Linux dpkg-source $version. Copyright (C) 1996 -Ian Jackson. This is free software; see the GNU General Public Licence -version 2 or later for copying conditions. There is NO warranty. +Ian Jackson and Klee Dienes. This is free software; see the GNU +General Public Licence version 2 or later for copying conditions. +There is NO warranty. Usage: dpkg-source -x <filename>.dsc dpkg-source -b <directory> [<orig-directory>|<orig-targz>|\'\'] @@ -41,8 +49,9 @@ General options: -h print this message "; } -$i=100;grep($fieldimps{$_}=$i--, - qw(Source Version Binary Maintainer Architecture Standards-Version)); +$i = 100; +grep ($fieldimps {$_} = $i--, + qw (Source Version Binary Maintainer Architecture Standards-Version)); while (@ARGV && $ARGV[0] =~ m/^-/) { $_=shift(@ARGV); @@ -246,7 +255,7 @@ if ($opmode eq 'build') { ".orig.tar.gz (wanted $basename.orig.tar.gz)"); } else { $tardirbase= $dirbase; $tardirname= $dirname; - $tarname= "$basename.tar.gz"; + $tarname= "$basenamerev.tar.gz"; } #print STDERR ">$dir|$origdir|$origtargz|$sourcestyle<\n"; @@ -304,13 +313,13 @@ if ($opmode eq 'build') { $expectprefix= $origdir; $expectprefix =~ s,^\./,,; checktarsane($origtargz,$expectprefix); mkdir("$origtargz.tmp-nest",0755) || - &syserr("unable to create \`$origdirtargz.tmp-nest'"); - extracttar($origtargz,"$origtargz.tmp-nest"); + &syserr("unable to create \`$origtargz.tmp-nest'"); + extracttar($origtargz,"$origtargz.tmp-nest",$expectprefix); rename("$origtargz.tmp-nest/$expectprefix",$expectprefix) || &syserr("unable to rename \`$origtargz.tmp-nest/$expectprefix' to ". "\`$expectprefix'"); rmdir("$origtargz.tmp-nest") || - &syserr("unable to remove \`$origdirtargz.tmp-nest'"); + &syserr("unable to remove \`$origtargz.tmp-nest'"); } @@ -366,7 +375,7 @@ if ($opmode eq 'build') { next file; } elsif (m/^[-+\@ ]/) { $difflinefound=1; - } elsif (m/^\\ No newline at end of file/) { + } elsif (m/^\\ No newline at end of file$/) { &warn("file $fn has no final newline ". "(either original or modified version)"); } else { @@ -431,7 +440,7 @@ if ($opmode eq 'build') { print("$progname: building $sourcepackage in $basenamerev.dsc\n") || &syserr("write building message"); open(STDOUT,"> $basenamerev.dsc") || &syserr("create $basenamerev.dsc"); - &outputclose; + &outputclose(1); if ($ur) { print(STDERR "$progname: unrepresentable changes to source\n") @@ -454,6 +463,7 @@ if ($opmode eq 'build') { open(CDATA,"< $dsc") || &error("cannot open .dsc file $dsc: $!"); &parsecdata('S',-1,"source control file $dsc"); + close(CDATA); for $f (qw(Source Version Files)) { defined($fi{"S $f"}) || @@ -496,24 +506,21 @@ if ($opmode eq 'build') { checktarsane("$dscdir/$tarfile",$expectprefix); if (length($difffile)) { - if (!$dirincluded{"$expectprefix/debian"}) { - $mkdebian=1; $dirincluded{"$expectprefix/debian"}= 1; - } &forkgzipread("$dscdir/$difffile"); $/="\n"; - while (length($_=<GZIP>)) { + while (<GZIP>) { s/\n$// || &error("diff is missing trailing newline"); - if (m/^--- /) { + if (/^--- /) { $fn= $'; substr($fn,0,length($expectprefix)+1) eq "$expectprefix/" || &error("diff patches file ($fn) not in expected subdirectory"); $fn =~ m/\.dpkg-orig$/ && &error("diff patches file with name ending .dpkg-orig"); $dirname= $fn; - $dirname =~ s,/[^/]+$,, && defined($dirincluded{$dirname}) || - &error("diff patches file ($fn) whose directory does not appear". - " in tarfile"); + if ($dirname =~ s,/[^/]+$,, && !defined($dirincluded{$dirname})) { + $dirtocreate{$dirname} = 1; + } defined($notfileobject{$fn}) && &error("diff patches something which is not a plain file"); $_= <GZIP>; s/\n$// || @@ -521,8 +528,10 @@ if ($opmode eq 'build') { $_ eq '+++ '.$newdirectory.substr($fn,length($expectprefix)) || &error("line after --- for file $fn isn't as expected"); $filepatched{$fn}++ && &error("diff patches file $fn twice"); - } elsif (!m/^[-+ \@]/) { - &error("diff contains unknown line \`$_'"); + } elsif (/^\\ No newline at end of file$/) { + } elsif (/^[-+ \@]/) { + } else { + &error ("diff contains unknown line \`$_'"); } } close(GZIP); @@ -536,15 +545,46 @@ if ($opmode eq 'build') { &erasedir($newdirectory); &erasedir("$newdirectory.orig"); - extracttar("$dscdir/$tarfile",'.'); + mkdir("$expectprefix.tmp-nest",0755) + || &syserr("unable to create \`$expectprefix.tmp-nest'"); + extracttar("$dscdir/$tarfile","$expectprefix.tmp-nest","$expectprefix"); + rename("$expectprefix.tmp-nest/$expectprefix","$expectprefix") + || &syserr("unable to rename \`$expectprefix.tmp-nest/$expectprefix' " + ."to \`$expectprefix'"); + rmdir("$expectprefix.tmp-nest") + || &syserr("unable to remove \`$expectprefix.tmp-nest'"); + + for $dircreate (keys %dirtocreate) { + $dircreatem= ""; + for $dircreatep (split("/",$dirc)) { + $dircreatem.= $dircreatep; + if (!lstat($dircreatem)) { + $! == ENOENT || &syserr("cannot stat $dircreatem"); + mkdir($dircreatem,0777) + || &syserr("failed to create $dircreatem subdirectory"); + } + else { + -d _ || &error("diff patches file in directory \`$dircreate'," + ." but $dircreatem isn't a directory !"); + } + } + } if (length($difffile)) { rename($expectprefix,$newdirectory) || &syserr("failed to rename newly-extracted $expectprefix to $newdirectory"); if ($sourcestyle =~ m/u/) { - extracttar("$dscdir/$tarfile",'.'); - } elsif ($sourcestyle =~ m/p/) { + mkdir("$expectprefix.tmp-nest",0755) + || &syserr("unable to create \`$expectprefix.tmp-nest'"); + extracttar("$dscdir/$tarfile","$expectprefix.tmp-nest", + "$expectprefix"); + rename("$expectprefix.tmp-nest/$expectprefix","$expectprefix") + || &syserr("unable to rename \`$expectprefix.tmp-nest/" + ."$expectprefix' to \`$expectprefix'"); + rmdir("$expectprefix.tmp-nest") + || &syserr("unable to remove \`$expectprefix.tmp-nest'"); + } elsif ($sourcestyle =~ m/p/) { stat("$dscdir/$tarfile") || &syserr("failed to stat \`$dscdir/$tarfile' to see if need to copy"); ($dsctardev,$dsctarino) = stat _; @@ -564,17 +604,13 @@ if ($opmode eq 'build') { } } - if ($mkdebian) { - mkdir("$newdirectory/debian",0777) || - &syserr("failed to create $newdirectory/debian subdirectory"); - } &forkgzipread("$dscdir/$difffile"); defined($c2= fork) || &syserr("fork for patch"); if (!$c2) { open(STDIN,"<&GZIP") || &syserr("reopen gzip for patch"); chdir($newdirectory) || &syserr("chdir to $newdirectory for patch"); exec('patch','-s','-t','-F','0','-N','-p1','-u', - '-V','never','-b','.dpkg-orig'); + '-V','never','-b','-z','.dpkg-orig'); &syserr("exec patch"); } close(GZIP); @@ -617,7 +653,7 @@ if ($opmode eq 'build') { } elsif (!-l _) { &internerr("unknown object \`$fn' after extract (mode ". sprintf("0%o",$mode).")"); - } + } else { next; } next if ($mode & 07777) == $newmode; chmod($newmode,$fn) || &syserr(sprintf("cannot change mode of \`%s' to 0%o from 0%o", @@ -627,8 +663,9 @@ if ($opmode eq 'build') { } sub checkstats { - my ($f)= @_; - my @s,$m; + my ($f) = @_; + my @s; + my $m; open(STDIN,"< $dscdir/$f") || &syserr("cannot read $dscdir/$f"); (@s= stat(STDIN)) || &syserr("cannot fstat $dscdir/$f"); $s[7] == $size{$f} || &error("file $f has size $s[7] instead of expected $size{$f}"); @@ -653,104 +690,216 @@ sub erasedir { &failure("rm -rf failed to remove \`$dir'"); } -sub checktarsane { - my ($tarfileread,$epfx) = @_; - my $c2,$fn,$pname,$slash,$mode,$dirname,$type; +use strict 'vars'; - &forkgzipread("$tarfileread"); - defined($c2= open(CPIO,"-|")) || &syserr("fork for cpio"); +sub checktarcpio { + + my ($tarfileread, $wpfx) = @_; + my ($tarprefix, $c2); + + @filesinarchive = (); + + # make <CPIO> read from the uncompressed archive file + &forkgzipread ("$tarfileread"); + if (! defined ($c2 = open (CPIO,"-|"))) { &syserr ("fork for cpio"); } if (!$c2) { - open(STDIN,"<&GZIP") || &syserr("reopen gzip for cpio"); + open (STDIN,"<&GZIP") || &syserr ("reopen gzip for cpio"); &cpiostderr; - exec('cpio','-0t'); &syserr("exec cpio"); + exec ('cpio','-0t'); + &syserr ("exec cpio"); } - $/= "\0"; - close(GZIP); - file: - while (defined($fn= <CPIO>)) { - $fn =~ s/\0$//; $pname= $fn; $pname =~ y/ -~/?/c; - if ($fn =~ m/\n/) { - if (!@filesinarchive) { + close (GZIP); + + $/ = "\0"; + open (CPIO, "<cpiolog"); + while (defined ($fn = <CPIO>)) { + + $fn =~ s/\0$//; + + # store printable name of file for error messages + my $pname = $fn; + $pname =~ y/ -~/?/c; + + if (! $tarprefix) { + if ($fn =~ m/\n/) { &error("first output from cpio -0t (from \`$tarfileread') ". "contains newline - you probably have an out of ". - "date version of cpio. 2.4.2-2 is known to work"); - } else { - &error("tarfile \`$tarfileread' contains object with". - " newline in its name ($pname)"); - } - } - $slash= substr($fn,length($epfx),1); - (($slash eq '/' || $slash eq '') && - substr($fn,0,length($epfx)) eq $epfx) || - &error("tarfile \`$tarfileread' contains object ($pname) ". - "not in expected directory ($epfx)"); - $fn =~ m,/\.\./, && - &error("tarfile \`$tarfilread' contains object with". - " /../ in its name ($pname)"); - push(@filesinarchive,$fn); + "date version of cpio. GNU cpio 2.4.2-2 is known to work"); + } + $tarprefix = ($fn =~ m,([^/]*)[/],)[0]; + # need to check for multiple dots on some operating systems + # empty tarprefix (due to regex failer) will match emptry string + if ($tarprefix =~ /^[.]*$/) { + &error("tarfile \`$tarfileread' does not extract into a ". + "directory off the current directory ($tarprefix from $pname)"); + } + } + + if ($fn =~ m/\n/) { + &error ("tarfile \`$tarfileread' contains object with". + " newline in its name ($pname)"); + } + + next if ($fn eq '././@LongLink'); + + my $fprefix = substr ($fn, 0, length ($tarprefix)); + my $slash = substr ($fn, length ($tarprefix), 1); + if ((($slash ne '/') && ($slash ne '')) || ($fprefix ne $tarprefix)) { + &error ("tarfile \`$tarfileread' contains object ($pname) ". + "not in expected directory ($tarprefix)"); + } + + # need to check for multiple dots on some operating systems + if ($fn =~ m/[.]{2,}/) { + &error ("tarfile \`$tarfileread' contains object with". + " /../ in its name ($pname)"); + } + push (@filesinarchive, $fn); } - close(CPIO); $? && subprocerr("cpio"); - - $/= "\n"; + close (CPIO); + $? && subprocerr ("cpio"); &reapgzip; - &forkgzipread("$tarfileread"); - defined($c2= open(TAR,"-|")) || &syserr("fork for tar -t"); - if (!$c2) { + $/= "\n"; + + my $tarsubst = quotemeta ($tarprefix); + @filesinarchive = map { s/^$tarsubst/$wpfx/; $_ } @filesinarchive; + + return $tarprefix; +} + +sub checktarsane { + + my ($tarfileread, $wpfx) = @_; + my ($c2); + + %dirincluded = (); + %notfileobject = (); + + my $tarprefix = &checktarcpio ($tarfileread, $wpfx); + + # make <TAR> read from the uncompressed archive file + &forkgzipread ("$tarfileread"); + if (! defined ($c2 = open (TAR,"-|"))) { &syserr ("fork for tar -t"); } + if (! $c2) { $ENV{'LANG'}= 'C'; - open(STDIN,"<&GZIP") || &syserr("reopen gzip for tar -t"); - exec('tar','-vvtf','-'); &syserr("exec tar -vvtf -"); + open (STDIN, "<&GZIP") || &syserr ("reopen gzip for tar -t"); + exec ('tar', '-vvtf', '-'); &syserr ("exec tar -vvtf -"); } - close(GZIP); - $efix= 0; - file: - while (length($_= <TAR>)) { - s/\n$//; - m,^(\S{10})\s, || + close (GZIP); + + my $efix= 0; + open (TAR, "<tarlog"); + while (<TAR>) { + + chomp; + + if (! m,^(\S{10})\s,) { &error("tarfile \`$tarfileread' contains unknown object ". "listed by tar as \`$_'"); - $fn= $filesinarchive[$efix++]; $mode= $1; - if ($mode =~ m/^l/) { $_ =~ s/ -\> .*//; } - substr($_,length($_)-length($fn)-1) eq " $fn" || - &error("tarfile \`$tarfileread' contains unexpected object". - " listed by tar as \`$_', expected \`$fn'"); + } + my $mode = $1; + $mode =~ s/^([-dpsl])// || &error("tarfile \`$tarfileread' contains object \`$fn' with ". "unknown or forbidden type \`".substr($_,0,1)."'"); - $fn =~ m/\.dpkg-orig$/ && - &error("tarfile \`$tarfileread' contains file with name ending .dpkg-orig"); - $type= $&; - $mode =~ m/[sStT]/ && $type ne 'd' && - &error("tarfile \`$tarfileread' contains setuid, setgid". - " or sticky object \`$fn'"); - $fn eq "$epfx/debian" && $type ne 'd' && - &error("tarfile \`$tarfileread' contains object \`debian'". + my $type = $&; + + if ($mode =~ /^l/) { $_ =~ s/ -\> .*//; } + s/ link to .+//; + + if (length ($_) <= 48) { + &error ("tarfile \`$tarfileread' contains incomplete entry \`$_'\n"); + } + + my $tarfn = substr ($_, 48, length ($_) - 48); + $tarfn = deoctify ($tarfn); + + # store printable name of file for error messages + my $pname = $tarfn; + $pname =~ y/ -~/?/c; + + # fetch name of file as given by cpio + $fn = $filesinarchive[$efix++]; + + if ($tarfn ne $fn) { + if ((length ($fn) == 99) && (length ($tarfn) >= 99) + && (substr ($fn, 0, 99) eq substr ($tarfn, 0, 99))) { + # this file doesn't match because cpio truncated the name + # to the first 100 characters. let it slide for now. + &warn ("filename \`$pname' was truncated by cpio;" . + " unable to check full pathname"); + } else { + &error ("tarfile \`$tarfileread' contains unexpected object". + " listed by tar as \`$_'; expected \`$pname'"); + } + } + + # if cpio truncated the name above, + # we still can't allow files to expand into /../ + # need to check for multiple dots on some operating systems + if ($tarfn =~ m/[.]{2,}/) { + &error ("tarfile \`$tarfileread' contains object with". + "/../ in its name ($pname)"); + } + + if ($tarfn =~ /\.dpkg-orig$/) { + &error ("tarfile \`$tarfileread' contains file with name ending in .dpkg-orig"); + } + + if ($mode =~ /[sStT]/ && $type ne 'd') { + &error ("tarfile \`$tarfileread' contains setuid, setgid". + " or sticky object \`$pname'"); + } + + if ($tarfn eq "$tarprefix/debian" && $type ne 'd') { + &error ("tarfile \`$tarfileread' contains object \`debian'". " that isn't a directory"); - $fn =~ s,/$,, if $type eq 'd'; - $dirname= $fn; - $dirname =~ s,/[^/]+$,, && !defined($dirincluded{$dirname}) && - &error("tarfile \`$tarfileread' contains object \`$fn' but its containing ". - "directory \`$dirname' does not precede it"); - $dirincluded{$fn}= 1 if $type eq 'd'; - $notfileobject{$fn}= 1 if $type ne '-'; + } + + if ($type eq 'd') { $tarfn =~ s,/$,,; } + my $dirname = $tarfn; + + if (($dirname =~ s,/[^/]+$,,) && (! defined ($dirincluded{$dirname}))) { + &error ("tarfile \`$tarfileread' contains object \`$pname' but its containing ". + "directory \`$dirname' does not precede it"); + } + if ($type eq 'd') { $dirincluded{$tarfn} = 1; } + if ($type ne '-') { $notfileobject{$tarfn} = 1; } } - close(TAR); $? && subprocerr("tar -t"); + close (TAR); + #$? && subprocerr ("tar -vvtf"); &reapgzip; + + my $tarsubst = quotemeta ($tarprefix); + %dirincluded = map { s/^$tarsubst/$wpfx/; $_=>1 } (keys %dirincluded); + %notfileobject = map { s/^$tarsubst/$wpfx/; $_=>1 } (keys %notfileobject); } +no strict 'vars'; + sub extracttar { - my ($tarfileread,$dirchdir) = @_; + my ($tarfileread,$dirchdir,$newtopdir) = @_; &forkgzipread("$tarfileread"); - defined($c2= fork) || &syserr("fork for cpio -i"); + defined($c2= fork) || &syserr("fork for tar -xkf -"); if (!$c2) { chdir("$dirchdir") || &syserr("cannot chdir to \`$dirchdir' for tar extract"); open(STDIN,"<&GZIP") || &syserr("reopen gzip for cpio -i"); &cpiostderr; - exec('cpio','-Hustar','-im','--no-preserve-owner'); &syserr("exec cpio -i"); + exec('tar','-xkf','-'); &syserr("exec tar -xkf -"); } close(GZIP); - $c2 == waitpid($c2,0) || &syserr("wait for cpio -i"); - $? && subprocerr("cpio -i"); + $c2 == waitpid($c2,0) || &syserr("wait for tar -xkf -"); + $? && subprocerr("tar -xkf -"); &reapgzip; + + opendir(D,"$dirchdir") || &syserr("Unable to open dir $dirchdir"); + @dirchdirfiles = grep($_ ne "." && $_ ne "..",readdir(D)); + closedir(D) || &syserr("Unable to close dir $dirchdir"); + (@dirchdirfiles==1 && -d "$dirchdir/$dirchdirfiles[0]") || + &error("$tarfileread extracted into >1 directory"); + rename("$dirchdir/$dirchdirfiles[0]", "$dirchdir/$newtopdir") || + &syserr("Unable to rename $dirchdir/$dirchdirfiles[0] to ". + "$dirchdir/$newtopdir"); } sub cpiostderr { @@ -759,9 +908,11 @@ sub cpiostderr { } sub setfile { - my ($varref)= @_; - &error("repeated file type - files ".$$varref." and $file") if length($$varref); - $$varref= $file; + my ($varref) = @_; + if (defined ($$varref)) { + &error ("repeated file type - files " . $$varref . " and $file"); + } + $$varref = $file; } sub checktype { @@ -839,3 +990,23 @@ sub addfile { $md5sum =~ s/^([0-9a-f]{32})\n$/$1/ || &failure("md5sum gave bogus output \`$_'"); $f{'Files'}.= "\n $md5sum $size $filename"; } + +# replace \ddd with their corresponding character, refuse \ddd > \377 +# modifies $_ (hs) +{ + my $backslash; +sub deoctify { + my $fn= $_[0]; + $backslash= sprintf("\\%03o", unpack("C", "\\")) if !$backslash; + + s/\\{2}/$backslash/g; + @_= split(/\\/, $fn); + + foreach (@_) { + /^(\d{3})/ or next; + &failure("bogus character `\\$1' in `$fn'\n") if oct($1) > 255; + $_= pack("c", oct($1)) . $'; + } + return join("", @_); +} } + diff --git a/scripts/install-info.pl b/scripts/install-info.pl index 0b41eb369..cc2994fb8 100755 --- a/scripts/install-info.pl +++ b/scripts/install-info.pl @@ -17,8 +17,9 @@ sub usage { print STDERR <<END; usage: install-info [--version] [--help] [--debug] [--maxwidth=nnn] [--section regexp title] [--infodir=xxx] [--align=nnn] - [--calign=nnn] [--quiet] [--menuentry=xxx] [--keep-old] - [--description=xxx] [--test] [--remove] [--] filename + [--calign=nnn] [--quiet] [--menuentry=xxx] [--info-dir=xxx] + [--keep-old] [--description=xxx] [--test] [--remove] [--] + filename END } @@ -38,7 +39,7 @@ $0 =~ m|[^/]+$|; $name= $&; while ($ARGV[0] =~ m/^--/) { $_= shift(@ARGV); - last if $eq eq '--'; + last if $_ eq '--'; if ($_ eq '--version') { &version; exit 0; } elsif ($_ eq '--quiet') { @@ -70,6 +71,8 @@ while ($ARGV[0] =~ m/^--/) { $infodir=$'; } elsif (m/^--menuentry=/) { $menuentry=$'; + } elsif (m/^--info-dir=/) { + $infodir=$'; } elsif (m/^--description=/) { $description=$'; } else { diff --git a/scripts/start-stop-daemon.8 b/scripts/start-stop-daemon.8 index 787072016..a7f1b9290 100644 --- a/scripts/start-stop-daemon.8 +++ b/scripts/start-stop-daemon.8 @@ -1,19 +1,138 @@ .\" Hey, Emacs! This is an -*- nroff -*- source file. -.TH START\-STOP\-DAEMON 8 "29th November 1995" "Debian Project" "Debian GNU/Linux" +.TH START\-STOP\-DAEMON 8 "15th March 1997" "Debian Project" "Debian GNU/Linux" .SH NAME -start\-stop\-daemon \- Debian package installation tool +start\-stop\-daemon \- start and stop system daemon programs +.SH SYNOPSIS +.B start-stop-daemon +.BR -S|--start +.IR "options ... -- arguments ..." +.HP +.B start-stop-daemon +.BR -K|--stop +.IR "options ..." +.HP +.B start-stop-daemon +.BR -H|--help +.HP +.B start-stop-daemon +.BR -V|--version .SH DESCRIPTION .B start\-stop\-daemon -does not have a useful man page. Please do not report this as a bug, -as this has already been done many times. +is used to control the creation and termination of system-level processes. +Using the +.BR --exec +, +.BR --pidfile +, +.BR --user +, and +.BR --name +options, +.B start\-stop\-daemon +can be configured to find existing instances of a running process. + +With +.BR --start +, +.B start\-stop\-daemon +checks for the existence of a specified process. +If such a process exists, +.B start\-stop\-daemon +does nothing, and exits with error status 1 (0 if +.BR --oknodo +is specified). +If such a process does not exist, it starts an +instance, using either the executable specified by +.BR --exec +, (or, if specified, by +.BR --startas +). +Any arguments given after +.BR -- +on the command line are passed unmodified to the program being +started. + +With +.BR --stop +, +.B start\-stop\-daemon +also checks for the existence of a specified process. +If such a process exists, +.B start\-stop\-daemon +sends it the signal specified by +.BR --signal +, and exits with error status 0. +If such a process does not exist, +.B start\-stop\-daemon +exits with error status 1 +(0 if +.BR --oknodo +is specified). + +.SH OPTIONS + +.TP +.I -x|--exec executable +Check for processes that are instances of this executable (according to +.B /proc/ +.I pid +.B /exe +). +.TP +.I -p|--pidfile pid-file +Check for processes whose process-id is specified in +.I pid-file. +.TP +.I -u|--user username|uid +Check for processes owned by the user specified by +.I username +or +.I uid. +.TP +.I -n|--name process-name +Check for processes with the name +.I process-name +(according to +.B /proc/ +.I pid +.B /stat +). +.TP +.I -s|--signal signal +With +.BR --stop +, specifies the signal to send to processes being stopped (default 15). +.TP +.I -a|--startas pathname +With +.B --start +, start the process specified by +.I pathname. +If not specified, defaults to the argument given to +.B --exec. +.TP +.I -t|--test +Print actions that would be taken and set appropriate return value, +but take no action. +.TP +.I -o|--oknodo +Return exit status 0 instead of 1 if no actions are (would be) taken. +.TP +.I -q|--quiet +Do not print informational messages; only display error messages. +.TP +.I -v|--verbose +Print verbose informational messages. +.TP +.I -H|--help +Print help information; then exit. +.TP +.I -V|--version +Print version information; then exit. -Instead, if you are a competent and accurate writer and are willing to -spend the time reading the source code and writing good manpages -please write a better man page than this one. +.SH AUTHORS +Ian Jackson <ijackson@gnu.ai.mit.edu> -Type -.B start\-stop\-daemon \-\-help -for a brief summary of how to use dpkg. +Marek Michalkiewicz <marekm@i17linuxb.ists.pwr.wroc.pl> -.SH AUTHOR -Ian Jackson <ijackson@gnu.ai.mit.edu>. +Manual page by Klee Dienes <klee@mit.edu>. diff --git a/scripts/start-stop-daemon.c b/scripts/start-stop-daemon.c new file mode 100644 index 000000000..f062e1be1 --- /dev/null +++ b/scripts/start-stop-daemon.c @@ -0,0 +1,481 @@ +/* + * A rewrite of the original Debian's start-stop-daemon Perl script + * in C (faster - it is executed many times during system startup). + * + * Written by Marek Michalkiewicz <marekm@i17linuxb.ists.pwr.wroc.pl>, + * public domain. Based conceptually on start-stop-daemon.pl, by Ian + * Jackson <ijackson@gnu.ai.mit.edu>. May be used and distributed + * freely for any purpose. Changes by Christian Schwarz + * <schwarz@monet.m.isar.de>, to make output conform to the Debian + * Console Message Standard, also placed in public domain. Minor + * changes by Klee Dienes <klee@debian.org>, also placed in the Public + * Domain. */ + +#include <errno.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <stdarg.h> +#include <signal.h> +#include <sys/stat.h> +#include <dirent.h> +#include <unistd.h> +#include <getopt.h> +#include <pwd.h> + +#define VERSION "version 0.4.1, 1997-01-29" + +static int testmode = 0; +static int quietmode = 0; +static int exitnodo = 1; +static int start = 0; +static int stop = 0; +static int signal_nr = 15; +static const char *signal_str = NULL; +static int user_id = -1; +static const char *userspec = NULL; +static const char *cmdname = NULL; +static char *execname = NULL; +static char *startas = NULL; +static const char *pidfile = NULL; +static const char *progname = ""; + +static struct stat exec_stat; + +struct pid_list { + struct pid_list *next; + int pid; +}; + +static struct pid_list *found = NULL; +static struct pid_list *killed = NULL; + +static void *xmalloc(int size); +static void push(struct pid_list **list, int pid); +static void do_help(void); +static void parse_options(int argc, char * const *argv); +static int pid_is_exec(int pid, const struct stat *esb); +static int pid_is_user(int pid, int uid); +static int pid_is_cmd(int pid, const char *name); +static void check(int pid); +static void do_pidfile(const char *name); +static void do_procfs(void); +static void do_stop(void); + +#ifdef __GNUC__ +static void fatal(const char *format, ...) + __attribute__((noreturn, format(printf, 1, 2))); +static void badusage(const char *msg) + __attribute__((noreturn)); +#else +static void fatal(const char *format, ...); +static void badusage(const char *msg); +#endif + +static void +fatal(const char *format, ...) +{ + va_list arglist; + + fprintf(stderr, "%s: ", progname); + va_start(arglist, format); + vfprintf(stderr, format, arglist); + va_end(arglist); + putc('\n', stderr); + exit(2); +} + + +static void * +xmalloc(int size) +{ + void *ptr; + + ptr = malloc(size); + if (ptr) + return ptr; + fatal("malloc(%d) failed", size); +} + + +static void +push(struct pid_list **list, int pid) +{ + struct pid_list *p; + + p = xmalloc(sizeof(*p)); + p->next = *list; + p->pid = pid; + *list = p; +} + + +static void +do_help(void) +{ + printf("\ +start-stop-daemon for Debian Linux - small and fast C version written by\n\ +Marek Michalkiewicz <marekm@i17linuxb.ists.pwr.wroc.pl>, public domain.\n" +VERSION "\n\ +\n\ +Usage: + start-stop-daemon -S|--start options ... -- arguments ...\n\ + start-stop-daemon -K|--stop options ...\n\ + start-stop-daemon -H|--help\n\ + start-stop-daemon -V|--version\n\ +\n\ +Options (at least one of --exec|--pidfile|--user is required): + -x|--exec <executable> program to start/check if it is running\n\ + -p|--pidfile <pid-file> pid file to check\n\ + -u|--user <username>|<uid> stop processes owned by this user\n\ + -n|--name <process-name> stop processes with this name\n\ + -s|--signal <signal> signal to send (default TERM)\n\ + -a|--startas <pathname> program to start (default is <executable>)\n\ + -t|--test test mode, don't do anything\n\ + -o|--oknodo exit status 0 (not 1) if nothing done\n\ + -q|--quiet be more quiet\n\ + -v|--verbose be more verbose\n\ +\n\ +Exit status: 0 = done 1 = nothing done (=> 0 if --oknodo) 2 = trouble\n"); +} + + +static void +badusage(const char *msg) +{ + if (msg) + fprintf(stderr, "%s: %s\n", progname, msg); + fprintf(stderr, "Try `%s --help' for more information.\n", progname); + exit(2); +} + +struct sigpair { + const char *name; + int signal; +}; + +const struct sigpair siglist[] = { + { "ABRT", SIGABRT }, + { "ALRM", SIGALRM }, + { "FPE", SIGFPE }, + { "HUP", SIGHUP }, + { "ILL", SIGILL }, + { "INT", SIGINT }, + { "KILL", SIGKILL }, + { "PIPE", SIGPIPE }, + { "QUIT", SIGQUIT }, + { "SEGV", SIGSEGV }, + { "TERM", SIGTERM }, + { "USR1", SIGUSR1 }, + { "USR2", SIGUSR2 }, + { "CHLD", SIGCHLD }, + { "CONT", SIGCONT }, + { "STOP", SIGSTOP }, + { "TSTP", SIGTSTP }, + { "TTIN", SIGTTIN }, + { "TTOU", SIGTTOU } +}; + +static int parse_signal (const char *signal_str, int *signal_nr) +{ + int i; + for (i = 0; i < sizeof (siglist) / sizeof (siglist[0]); i++) { + if (strcmp (signal_str, siglist[i].name) == 0) { + *signal_nr = siglist[i].signal; + return 0; + } + } + return -1; +} + +static void +parse_options(int argc, char * const *argv) +{ + static struct option longopts[] = { + { "help", 0, NULL, 'H'}, + { "stop", 0, NULL, 'K'}, + { "start", 0, NULL, 'S'}, + { "version", 0, NULL, 'V'}, + { "startas", 1, NULL, 'a'}, + { "name", 1, NULL, 'n'}, + { "oknodo", 0, NULL, 'o'}, + { "pidfile", 1, NULL, 'p'}, + { "quiet", 0, NULL, 'q'}, + { "signal", 1, NULL, 's'}, + { "test", 0, NULL, 't'}, + { "user", 1, NULL, 'u'}, + { "verbose", 0, NULL, 'v'}, + { "exec", 1, NULL, 'x'}, + { NULL, 0, NULL, 0} + }; + int c; + + for (;;) { + c = getopt_long(argc, argv, "HKSVa:n:op:qs:tu:vx:", + longopts, (int *) 0); + if (c == -1) + break; + switch (c) { + case 'H': /* --help */ + do_help(); + exit(0); + case 'K': /* --stop */ + stop = 1; + break; + case 'S': /* --start */ + start = 1; + break; + case 'V': /* --version */ + printf("start-stop-daemon " VERSION "\n"); + exit(0); + case 'a': /* --startas <pathname> */ + startas = optarg; + break; + case 'n': /* --name <process-name> */ + cmdname = optarg; + break; + case 'o': /* --oknodo */ + exitnodo = 0; + break; + case 'p': /* --pidfile <pid-file> */ + pidfile = optarg; + break; + case 'q': /* --quiet */ + quietmode = 1; + break; + case 's': /* --signal <signal> */ + signal_str = optarg; + break; + case 't': /* --test */ + testmode = 1; + break; + case 'u': /* --user <username>|<uid> */ + userspec = optarg; + break; + case 'v': /* --verbose */ + quietmode = -1; + break; + case 'x': /* --exec <executable> */ + execname = optarg; + break; + default: + badusage(NULL); /* message printed by getopt */ + } + } + + if (signal_str != NULL) { + if (sscanf (signal_str, "%d", &signal_nr) != 1) { + if (parse_signal (signal_str, &signal_nr) != 0) { + badusage ("--signal takes a numeric argument or name of signal (KILL, INTR, ...)"); + } + } + } + + if (start == stop) + badusage("need one of --start or --stop"); + + if (!execname && !pidfile && !userspec) + badusage("need at least one of --exec, --pidfile or --user"); + + if (!startas) + startas = execname; + + if (start && !startas) + badusage("--start needs --exec or --startas"); +} + + +static int +pid_is_exec(int pid, const struct stat *esb) +{ + struct stat sb; + char buf[32]; + + sprintf(buf, "/proc/%d/exe", pid); + if (stat(buf, &sb) != 0) + return 0; + return (sb.st_dev == esb->st_dev && sb.st_ino == esb->st_ino); +} + + +static int +pid_is_user(int pid, int uid) +{ + struct stat sb; + char buf[32]; + + sprintf(buf, "/proc/%d", pid); + if (stat(buf, &sb) != 0) + return 0; + return (sb.st_uid == uid); +} + + +static int +pid_is_cmd(int pid, const char *name) +{ + char buf[32]; + FILE *f; + int c; + + sprintf(buf, "/proc/%d/stat", pid); + f = fopen(buf, "r"); + if (!f) + return 0; + while ((c = getc(f)) != EOF && c != '(') + ; + if (c != '(') { + fclose(f); + return 0; + } + /* this hopefully handles command names containing ')' */ + while ((c = getc(f)) != EOF && c == *name) + name++; + fclose(f); + return (c == ')' && *name == '\0'); +} + + +static void +check(int pid) +{ + if (execname && !pid_is_exec(pid, &exec_stat)) + return; + if (userspec && !pid_is_user(pid, user_id)) + return; + if (cmdname && !pid_is_cmd(pid, cmdname)) + return; + push(&found, pid); +} + + +static void +do_pidfile(const char *name) +{ + FILE *f; + int pid; + + f = fopen(name, "r"); + if (f) { + if (fscanf(f, "%d", &pid) == 1) + check(pid); + fclose(f); + } +} + + +static void +do_procfs(void) +{ + DIR *procdir; + struct dirent *entry; + int foundany, pid; + + procdir = opendir("/proc"); + if (!procdir) + fatal("opendir /proc: %s", strerror(errno)); + + foundany = 0; + while ((entry = readdir(procdir)) != NULL) { + if (sscanf(entry->d_name, "%d", &pid) != 1) + continue; + foundany++; + check(pid); + } + closedir(procdir); + if (!foundany) + fatal("nothing in /proc - not mounted?"); +} + + +static void +do_stop(void) +{ + char what[1024]; + struct pid_list *p; + + if (cmdname) + strcpy(what, cmdname); + else if (execname) + strcpy(what, execname); + else if (pidfile) + sprintf(what, "process in pidfile `%s'", pidfile); + else if (userspec) + sprintf(what, "process(es) owned by `%s'", userspec); + else + fatal("internal error, please report"); + + if (!found) { + if (quietmode <= 0) + printf("No %s found running; none killed.\n", what); + exit(exitnodo); + } + for (p = found; p; p = p->next) { + if (testmode) + printf("Would send signal %d to %d.\n", + signal_nr, p->pid); + else if (kill(p->pid, signal_nr) == 0) + push(&killed, p->pid); + else + printf("%s: warning: failed to kill %d: %s\n", + progname, p->pid, strerror(errno)); + } + if (quietmode < 0 && killed) { + printf("Stopped %s (pid", what); + for (p = killed; p; p = p->next) + printf(" %d", p->pid); + printf(").\n"); + } +} + + +int +main(int argc, char **argv) +{ + progname = argv[0]; + + parse_options(argc, argv); + argc -= optind; + argv += optind; + + if (execname && stat(execname, &exec_stat)) + fatal("stat %s: %s", execname, strerror(errno)); + + if (userspec && sscanf(userspec, "%d", &user_id) != 1) { + struct passwd *pw; + + pw = getpwnam(userspec); + if (!pw) + fatal("user `%s' not found\n", userspec); + + user_id = pw->pw_uid; + } + + if (pidfile) + do_pidfile(pidfile); + else + do_procfs(); + + if (stop) { + do_stop(); + exit(0); + } + + if (found) { + if (quietmode <= 0) + printf("%s already running.\n", execname); + exit(exitnodo); + } + if (testmode) { + printf("Would start %s ", startas); + while (argc-- > 0) + printf("%s ", *argv++); + printf(".\n"); + exit(0); + } + if (quietmode < 0) + printf("Starting %s...\n", startas); + *--argv = startas; + execv(startas, argv); + fatal("Unable to start %s: %s", startas, strerror(errno)); +} diff --git a/scripts/update-alternatives.8 b/scripts/update-alternatives.8 index d6719afd9..7becd5751 100644 --- a/scripts/update-alternatives.8 +++ b/scripts/update-alternatives.8 @@ -1,19 +1,344 @@ -.\" Hey, Emacs! This is an -*- nroff -*- source file. -.TH UPDATE\-ALTERNATIVES 8 "29th November 1995" "Debian Project" "Debian GNU/Linux" +.\" update-alternatives.8 +.\" This man page is copyright 1997 Charles Briscoe-Smith +.\" This is free documentation; you can redistribute it and/or modify +.\" it under the terms of the GNU General Public License as published +.\" by the Free Software Foundation; either version 2 of the License, or +.\" (at your option) any later version. There is NO WARRANTY. You can +.\" find the GNU GPL in /usr/doc/copyright/GPL on any Debian system. +.TH UPDATE-ALTERNATIVES 8 "19 January 1998" "DEBIAN" "Debian GNU/Linux" .SH NAME -update\-alternatives \- Debian package installation tool +update-alternatives \- maintain symbolic links determining default commands +.SH SYNOPSIS +.B update-alternatives +.RI [ options ] +.B --install +.I link name path priority +.RB [ --slave +.I link name +.IR path ]... +.PP +.B update-alternatives +.RI [ options ] +.B --remove +.I name path +.PP +.B update-alternatives +.RI [ options ] +.B --auto +.I name +.PP +.B update-alternatives +.RI [ options ] +.B --display +.I name .SH DESCRIPTION -.B update\-alternatives -does not have a useful man page. Please do not report this as a bug, -as this has already been done many times. - -Instead, if you are a competent and accurate writer and are willing to -spend the time reading the source code and writing good manpages -please write a better man page than this one. - -Type -.B update\-alternatives \-\-help -for a brief summary of how to use dpkg. - +.B update-alternatives +creates, removes, maintains and displays information about the symbolic +links comprising the Debian alternatives system. +.PP +It is possible for several programs fulfilling the same or similar +functions to be installed on a single system at the same time. +For example, many systems have several text editors installed at once. +This gives choice to the users of a system, allowing each to use a +different editor, if desired, but makes it difficult for a program +to make a good choice of editor to invoke if the +user has not specified a particular preference. +.PP +Debian's alternatives system aims to solve this problem. +A generic name in the filesystem is +shared by all files providing interchangable functionality. +The alternatives system and the system administrator +together determine which actual file is referenced by this generic name. +For example, if the text editors +.BR ed (1) +and +.BR nvi (1) +are both installed on the system, the alternatives system will cause +the generic name +.I /usr/bin/editor +to refer to +.I /usr/bin/nvi +by default. The system administrator can override this and cause +it +to refer to +.I /usr/bin/ed +instead, +and the alternatives system will not alter this setting until explicitly +requested to do so. +.PP +The generic name is not a direct symbolic link to the selected alternative. +Instead, it is a symbolic link to a name in the +.I alternatives +.IR directory , +which in turn is a symbolic link to the actual file referenced. +This is done so that the system administrator's changes can be confined +within the +.I /etc +directory: the FSSTND (q.v.) gives reasons why this is a Good Thing. +.PP +When each package +providing a file with a particular functionality is +installed, changed or removed, +.B update-alternatives +is called to update information about that file in the alternatives system. +.B update-alternatives +is usually called from the +.B postinst +or +.B prerm +scripts in Debian packages. +.PP +It is often useful for a number of alternatives to be synchronised, +so that they are changed as a group; for example, when several versions +of the +.BR vi (1) +editor are installed, the man page referenced by +.I /usr/man/man1/vi.1 +should correspond to the executable referenced by +.IR /usr/bin/vi . +.B update-alternatives +handles this by means of +.I master +and +.I slave +links; when the master is changed, any associated slaves are changed +too. +A master link and its associated slaves make up a +.I link +.IR group . +.PP +Each link group is, at any given time, +in one of two modes: automatic or manual. +When a group is in automatic mode, the alternatives system will +automatically decide, as packages are installed and removed, +whether and how to update the links. +In manual mode, the alternatives system will not change the links; +it will leave all the decisions to the system administrator. +.PP +Link groups are in automatic mode when they are first introduced to +the system. +If the system administrator makes changes to the system's +automatic settings, +this will be noticed the next time +.B update-alternatives +is run on the changed link's group, +and the group will automatically be switched to manual mode. +.PP +Each alternative has a +.I priority +associated with it. +When a link group is in automatic mode, +the alternatives pointed to by members of the group +will be those which have the highest priority. +.SH TERMINOLOGY +Since the activities of +.B update-alternatives +are quite involved, some specific terms will help to explain its +operation. +.TP +generic name +A name, like +.IR /usr/bin/editor , +which refers, via the alternatives system, to one of a number of +files of similar function. +.TP +symlink +Without any further qualification, this means a symbolic link in the +alternatives directory: one which the system administrator is expected +to adjust. +.TP +alternative +The name of a specific file in the filesystem, which may be made +accessible via a generic name using the alternatives system. +.TP +alternatives directory +A directory, by default +.IR /etc/alternatives , +containing the symlinks. +.TP +administrative directory +A directory, by default +.IR /var/lib/dpkg/alternatives , +containing +.BR update-alternatives ' +state information. +.TP +link group +A set of related symlinks, intended to be updated as a group. +.TP +master link +The link in a link group which determines how the other links in the +group are configured. +.TP +slave link +A link in a link group which is controlled by the setting of +the master link. +.TP +automatic mode +When a link group is in automatic mode, +the alternatives system ensures that the links in the group +point to the highest priority alternatives +appropriate for the group. +.TP +manual mode +When a link group is in manual mode, +the alternatives system will not make any changes +to the system administrator's settings. +.SH OPTIONS +Exactly one action must be specified if +.B update-alternatives +is to perform any meaningful task. +Any number of the common options may be specified together with any action. +.SS "COMMON OPTIONS" +.TP +.B --verbose +Generate more comments about what +.B update-alternatives +is doing. +This option is not yet implemented. +.TP +.B --quiet +Don't generate any comments unless errors occur. +This option is not yet implemented. +.TP +.B --test +Don't actually do anything, just say what would be done. +This option is not yet implemented. +.TP +.B --help +Give some usage information (and say which version of +.B update-alternatives +this is). +.TP +.B --version +Tell which version of +.B update-alternatives +this is (and give some usage information). +.TP +\fB--altdir\fR \fIdirectory\fR +Specifies the alternatives directory, when this is to be +different from the default. +.TP +\fB--admindir\fR \fIdirectory\fR +Specifies the administrative directory, when this is to be +different from the default. +.SS ACTIONS +.TP +\fB--install\fR \fIgen link path pri\fR [\fB--slave\fR \fIsgen slink spath\fR] ... +Add a group of alternatives to the system. +.I gen +is the generic name for the master link, +.I link +is the name of its symlink, and +.I path +is the alternative being introduced for the master link. +.IR sgen , +.I slink +and +.I spath +are the generic name, symlink name and alternative +for a slave link. +Zero or more +.B --slave +options, each followed by three arguments, +may be specified. +.IP +If the master symlink specified exists already +in the alternatives system's records, +the information supplied will be added as a new +set of alternatives for the group. +Otherwise, a new group, set to automatic mode, +will be added with this information. +If the group is in automatic mode, +and the newly added alternatives' priority is higher than +any other installed alternatives for this group, +the symlinks will be updated to point to the newly added alternatives. +.TP +\fB--remove\fR \fIlink path\fR +Remove an alternative and all of its associated slave links. +.I link +is a name in the alternatives directory, and +.I path +is an absolute filename to which +.I name +could be linked. If +.I link +is indeed linked to +.IR path , +.I link +will be updated to point to another appropriate alternative, or +removed if there is no such alternative left. +Associated slave links will be updated or removed, correspondingly. +If the link is not currently pointing to +.IR path , +no links are changed; +only the information about the alternative is removed. +.TP +\fB--auto\fR \fIlink\fR +Switch the master symlink +.I link +to automatic mode. +In the process, this symlink and its slaves are updated +to point to the highest priority installed alternatives. +.TP +\fB--display\fR \fIlink\fR +Display information about the link group of which +.I link +is the master link. +Information displayed includes the group's mode +(auto or manual), +which alternative the symlink currently points to, +what other alternatives are available +(and their corresponding slave alternatives), +and the highest priority alternative currently installed. +.SH FILES +.TP +.I /etc/alternatives/ +The default alternatives directory. +Can be overridden by the +.B --altdir +option. +.TP +.I /var/lib/dpkg/alternatives/ +The default administration directory. +Can be overridden by the +.B --admindir +option. +.SH "EXIT STATUS" +.IP 0 +The requested action was successfully performed. +.IP 2 +Problems were encountered whilst parsing the command line +or performing the action. +.SH DIAGNOSTICS +.B update-alternatives +chatters incessantly about its activities on its standard output channel. +If problems occur, +.B update-alternatives +outputs error messages on its standard error channel and +returns an exit status of 2. +These diagnostics should be self-explanatory; +if you do not find them so, please report this as a bug. +.SH BUGS +If you find a bug, please report it using the Debian bug-tracking system, +or, if that is not possible, email the author directly. +.PP +If you find any discrepancy between the operation of +.B update-alternatives +and this manual page, it is a bug, +either in the implementation or the documentation; +please report it. .SH AUTHOR -Ian Jackson <ijackson@gnu.ai.mit.edu>. +Debian GNU/Linux update-alternatives is copyright 1995 +Ian Jackson. It is free software; see the GNU General Public Licence +version 2 or later for copying conditions. There is NO warranty. +.PP +This manual page is copyright 1997/98 Charles Briscoe-Smith. +This is free documentation; see the GNU General Public Licence +version 2 or later for copying conditions. There is NO WARRANTY. +.PP +You can find the GNU GPL in /usr/doc/copyright/GPL on any Debian system. +.\" .SH ACKNOWLEDGEMENTS +.SH "SEE ALSO" +.BR ln (1), +FSSTND, the linux Filesystem Standard. diff --git a/scripts/update-alternatives.pl b/scripts/update-alternatives.pl index a961253dc..722250ed3 100755 --- a/scripts/update-alternatives.pl +++ b/scripts/update-alternatives.pl @@ -79,10 +79,10 @@ while (@ARGV) { $aslavelink{$sname}= $slink; $aslavepath{$sname}= $spath; } elsif (m/^--altdir$/) { - @ARGV && &badusage("--altdir needs a <directory> argument"); + @ARGV || &badusage("--altdir needs a <directory> argument"); $altdir= shift(@ARGV); } elsif (m/^--admindir$/) { - @ARGV && &badusage("--admindir needs a <directory> argument"); + @ARGV || &badusage("--admindir needs a <directory> argument"); $admindir= shift(@ARGV); } else { &badusage("unknown option \`$_'"); diff --git a/scripts/update-rc.d.8 b/scripts/update-rc.d.8 index d9971a84e..480c86d0b 100644 --- a/scripts/update-rc.d.8 +++ b/scripts/update-rc.d.8 @@ -1,17 +1,23 @@ .\" Hey, Emacs! This is an -*- nroff -*- source file. .\" Authors: Ian Jackson -.TH UPDATE\-RC.D 8 "23rd August 1996" "Debian Project" "Debian/GNU Linux" +.TH UPDATE\-RC.D 8 "2 March 1998" "Debian Project" "Debian/GNU Linux" .SH NAME update\-rc.d \- install and remove System-V style init script links .SH SYNOPSIS .B update\-rc.d +.RI [ -n ] +.RI [ -f ] .IB name " remove" .HP .B update-rc.d +.RI [ -n ] +.RI [ -f ] .IB name " defaults" .RI [ NN " | " NN-start " " NN-stop ] .HP .B update-rc.d +.RI [ -n ] +.RI [ -f ] .I name .BR start | stop .IR "NN runlevel runlevel " ... @@ -31,7 +37,7 @@ when changing runlevels and are generally used to start and stop system services such as daemons. .I runlevel is one of the runlevels supported by -.BR init ", " 0123456 , +.BR init ", " 0123456789S , and .I NN is the two-digit sequence code used by @@ -53,8 +59,8 @@ options, update-rc.d makes links pointing to the script .BI /etc/init.d/ name\fR, -If any links -.BI /etc/rc runlevel .d/?? name +If any files +.BI /etc/rc runlevel .d/[SK]?? name already exist then .B update-rc.d does nothing. This is so that the system administrator can rearrange @@ -69,7 +75,7 @@ will make links to start the service in runlevels .B 2345 and stop the service in runlevels .BR 016 . -By default all the links will have sequence code, but +By default all the links will have sequence code 20, but this can be overridden by supplying one or two .I NN arguments; one argument overrides the sequence code for both start and @@ -120,17 +126,27 @@ directories to the script The script must have been deleted already - .B update-rc.d checks for this. - .B update-rc.d is usually called from a package's post-removal script when that script detects that its first argument is .BR purge , indicating that the user has requested the configuration for the package to be removed. +Any files in the +.BI /etc/rc runlevel .d +directories that are not symbolic links to the script +.BI /etc/init.d/ name +will be left untouched. +.SH EXAMPLES +Insert links using the defaults: +.nf +.B " update-rc.d foobar defaults" +.fi +Equivalent command using explicit argument sets: +.nf +.B " update-rc.d foobar start 20 2 3 4 5 . stop 20 0 1 6 ." +.fi .SH BUGS -This script is written in -.B sh -and is therefore far too slow. There should be a way for the system administrator to specify at least the default start and stop runlevels to be used by @@ -143,14 +159,14 @@ The directory containing the actual init scripts. .TP .B /etc/rc?.d/ The directories containing the links used by +.BR init +and managed by +.BR update-rc.d . .TP .B /etc/init.d/skeleton Model for use by writers of .B init.d scripts. -.BR init -and managed by -.BR update-rc.d . .SH SEE ALSO .IR "dpkg programmers manual" , .br diff --git a/scripts/update-rc.d.new-pl b/scripts/update-rc.d.new-pl deleted file mode 100644 index 7c8c9116c..000000000 --- a/scripts/update-rc.d.new-pl +++ /dev/null @@ -1,166 +0,0 @@ -#! /usr/bin/perl -# -# update-rc.d Perl script to update links in /etc/rc?.d -# -# Usage: -# update-rc.d [-f] <basename> remove -# update-rc.d <basename> [options] -# -# Options are: -# start <codenumber> <runlevel> <runlevel> <runlevel> . -# stop <codenumber> <runlevel> <runlevel> <runlevel> . -# -# defaults [<codenumber> | <startcode> <stopcode>] -# (means start <startcode> 2 3 4 5 -# as well as stop <stopcode> 0 1 2 3 4 5 6 -# <codenumber> defaults to 20) -# -# Version: @(#)update-rc.d 1.02 11-Jul-1996 miquels@cistron.nl -# -# Changes: 1.00 Wrote perl version directly derived from shell version. -# 1.01 Fixed problem when dangling symlinks are found in -# /etc/rc?.d/. The shell version just exits silently! -# 1.02 More misc bugs fixed caused by sh -> perl translation -# - -$version= '1.3.2'; # This line modified by Makefile - -chdir('/etc') || die "chdir /etc: $!\n"; - -$initd='init.d'; - -sub usage { - print STDERR <<EOF; -Debian GNU/Linux update-rc.d $version. Copyright (C) 1996 Miquel van -Smoorenburg. This is free software; see the GNU General Public Licence -version 2 or later for copying conditions. There is NO warranty. - -update-rc.d: error: @_ -usage: update-rc.d [-f] <basename> remove - update-rc.d <basename> defaults [<cn> | <scn> <kcn>] - update-rc.d <basename> start|stop <cn> <r> <r> . ... -EOF - &leave(1); -} - - -sub getinode { - local @tmp; - - unless (@tmp = stat($_[0])) { - print STDERR "stat($_[0]): $!\n"; - $tmp[1] = 0; - } - $tmp[1]; -} - -sub leave { - eval $atexit if ($atexit ne ''); - exit($_[0]); -} - -$force = 0; -if ($ARGV[0] eq '-f') { - shift @ARGV; - $force = 1; -} - -&usage("too few arguments") if ($#ARGV < 1); - -$bn = shift @ARGV; -$action = shift @ARGV; - -if ($action eq 'remove') { - &usage("remove must be only action") if ($#ARGV > 0); - if (-f "$initd/$bn") { - unless ($force) { - print STDERR "update-rc.d: error: /etc/$initd/$bn exists during rc.d purge (use -f to force).\n"; - &leave(1); - } - } else { - $atexit = "unlink('$initd/$bn');"; - } - print " Removing any system startup links to /etc/$initd/$bn ...\n"; - open(FD, ">>$initd/$bn"); - close FD; - $own = &getinode("$initd/$bn"); - @files = split(/\s+/, `echo rc?.d/[SK]*`); - foreach $f (@files) { - $inode = &getinode($f); - if ($inode == $own) { - unless (unlink($f)) { - print STDERR "unlink($f): $!\n"; - &leave(1); - } - print " $f\n"; - } - } - &leave(0); -} elsif ($action eq 'defaults') { - if ($#ARGV < 0) { - $sn = $kn = 20; - } elsif ($#ARGV == 0) { - $sn = $kn = $ARGV[0]; - } elsif ($#ARGV == 1) { - $sn = $ARGV[0]; - $kn = $ARGV[1]; - } else { - &usage("defaults takes only one or two codenumbers"); - } - @ARGV = ('start', "$sn", '2', '3', '4', '5', 'stop', - "$kn", '0', '1', '6'); -} elsif ($action ne 'start' && $action ne 'stop') { - &usage("unknown mode or add action $action"); -} - -unless (-f "$initd/$bn") { - print STDERR "update-rc.d: warning /etc/$initd/$bn doesn't exist during rc.d setup.\n"; - exit(0); -} - -$own = &getinode("$initd/$bn"); - -@files = split(/\s+/, `echo rc?.d/[SK]*`); -foreach $f (@files) { - $inode = &getinode($f); - if ($inode == $own) { - print STDERR " System startup links pointing to /etc/$initd/$bn already exist.\n"; - exit(0); - } -} - - -print " Adding system startup links pointing to /etc/$initd/$bn ...\n"; -while ($#ARGV >= 1) { - if ($ARGV[0] eq 'start') { - $ks = 'S'; - } elsif ($ARGV[0] eq 'stop') { - $ks = 'K'; - } else { - &usage("unknown action $1"); - } - shift @ARGV; - $number = shift @ARGV; - while ($#ARGV >= 0) { - $_ = $ARGV[0]; - if (/^\.$/) { - shift @ARGV; - last; - } elsif (/^.$/) { - symlink("../$initd/$bn", "rc$_.d/$ks$number$bn") || - die "symlink: $!\n"; - print " rc$_.d/$ks$number$bn -> ../$initd/$bn\n"; - shift @ARGV; - next; - } elsif (/^(start|stop)$/) { - last; - } - &usage('runlevel is more than one character\n'); - } -} - -if ($#ARGV >= 0) { - &usage("surplus arguments, but not enough for an add action: @ARGV\n"); -} - -0; diff --git a/scripts/update-rc.d.pl b/scripts/update-rc.d.pl index 2a38f9cf4..71a610684 100644 --- a/scripts/update-rc.d.pl +++ b/scripts/update-rc.d.pl @@ -1,165 +1,207 @@ #! /usr/bin/perl # -# update-rc.d Perl script to update links in /etc/rc?.d +# update-rc.d Update the links in /etc/rc[0-9S].d/ # -# Usage: -# update-rc.d [-f] <basename> remove -# update-rc.d <basename> [options] -# -# Options are: -# start <codenumber> <runlevel> <runlevel> <runlevel> . -# stop <codenumber> <runlevel> <runlevel> <runlevel> . -# -# defaults [<codenumber> | <startcode> <stopcode>] -# (means start <startcode> 2 3 4 5 -# as well as stop <stopcode> 0 1 2 3 4 5 6 -# <codenumber> defaults to 20) -# -# Version: @(#)update-rc.d 1.02 11-Jul-1996 miquels@cistron.nl -# -# Changes: 1.00 Wrote perl version directly derived from shell version. -# 1.01 Fixed problem when dangling symlinks are found in -# /etc/rc?.d/. The shell version just exits silently! -# 1.02 More misc bugs fixed caused by sh -> perl translation +# Version: @(#)update-rc.d.pl 2.02 05-Mar-1998 miquels@cistron.nl # -$version= '1.3.2'; # This line modified by Makefile +$initd = "/etc/init.d"; +$etcd = "/etc/rc"; +$notreally = 0; -chdir('/etc') || die "chdir /etc: $!\n"; - -$initd='init.d'; +# Print usage message and die. sub usage { - print STDERR <<EOF; -Debian GNU/Linux update-rc.d $version. Copyright (C) 1996 Miquel van -Smoorenburg. This is free software; see the GNU General Public Licence -version 2 or later for copying conditions. There is NO warranty. - -update-rc.d: error: @_ -usage: update-rc.d [-f] <basename> remove - update-rc.d <basename> defaults [<cn> | <scn> <kcn>] - update-rc.d <basename> start|stop <cn> <r> <r> . ... + print STDERR "update-rc.d: error: @_\n" if ($#_ >= 0); + print STDERR <<EOF; +usage: update-rc.d [-n] [-f] <basename> remove + update-rc.d [-n] [-f] <basename> defaults [NN | sNN kNN] + update-rc.d [-n] [-f] <basename> start|stop NN runlvl runlvl . ... + -n: not really + -f: force EOF - &leave(1); + exit (1); } +# Check out options. -sub getinode { - local @tmp; - - unless (@tmp = stat($_[0])) { - print STDERR "stat($_[0]): $!\n"; - $tmp[1] = 0; - } - $tmp[1]; +while($#ARGV >= 0 && ($_ = $ARGV[0]) =~ /^-/) { + shift @ARGV; + if (/^-n$/) { $notreally++; next } + if (/^-f$/) { $force++; next } + if (/^-h|--help$/) { &usage; } + &usage("unknown option"); } -sub leave { - eval $atexit if ($atexit ne ''); - exit($_[0]); +# Action. + +&usage() if ($#ARGV < 1); +$bn = shift @ARGV; +if ($ARGV[0] ne 'remove') { + if (! -f "$initd/$bn") { + print STDERR "update-rc.d: $initd/$bn: file does not exist\n"; + exit (1); + } +} elsif (-f "$initd/$bn") { + if (!$force) { + printf STDERR "update-rc.d: $initd/$bn exists during rc.d purge (use -f to force)\n"; + exit (1); + } else { + printf STDERR "update-rc.d: $initd/$bn exists during rc.d purge (continuing)\n"; + } } -$force = 0; -if ($ARGV[0] eq '-f') { - shift @ARGV; - $force = 1; +$_ = $ARGV[0]; +if (/^remove$/) { &checklinks ("remove"); } +elsif (/^defaults$/) { &defaults; &makelinks } +elsif (/^start|stop$/) { &startstop; &makelinks; } +else { &usage; } + +exit (0); + +# Check if there are links in /etc/rc[0-9S].d/ +# Remove if the first argument is "remove" and the links +# point to $bn. + +sub is_link () { + my ($op, $fn, $bn) = @_; + if (! -l $fn) { + print STDERR "update-rc.d: warning: $fn is not a symbolic link\n"; + return 0; + } else { + $linkdst = readlink ($fn); + if (! defined $linkdst) { + die ("update-rc.d: error reading symbolic link: $!\n"); + } + if (($linkdst ne "../init.d/$bn") && ($linkdst ne "../init.d/$bn")) { + print STDERR "update-rc.d: warning: $fn is not a link to ../init.d/$bn\n"; + return 0; + } + } + return 1; } -&usage("too few arguments") if ($#ARGV < 1); +sub checklinks { + my ($i, $found, $fn, $islnk); -$bn = shift @ARGV; -$action = shift @ARGV; - -if ($action eq 'remove') { - &usage("remove must be only action") if ($#ARGV > 0); - if (-f "$initd/$bn") { - unless ($force) { - print STDERR "update-rc.d: error: /etc/$initd/$bn exists during rc.d purge (use -f to force).\n"; - &leave(1); - } - } else { - $atexit = "unlink('$initd/$bn');"; - } - print " Removing any system startup links to /etc/$initd/$bn ...\n"; - open(FD, ">>$initd/$bn"); - close FD; - $own = &getinode("$initd/$bn"); - @files = split(/\s+/, `echo rc?.d/[SK]*`); - foreach $f (@files) { - $inode = &getinode($f); - if ($inode == $own) { - unless (unlink($f)) { - print STDERR "unlink($f): $!\n"; - &leave(1); - } - print " $f\n"; - } + print " Removing any system startup links for $initd/$bn ...\n" + if ($_[0] eq 'remove'); + + $found = 0; + + foreach $i (0..9, 'S') { + unless (chdir ("$etcd$i.d")) { + next if ($i =~ m/^[789S]$/); + die("update-rc.d: chdir $etcd$i.d: $!\n"); } - &leave(0); -} elsif ($action eq 'defaults') { - if ($#ARGV < 0) { - $sn = $kn = 20; - } elsif ($#ARGV == 0) { - $sn = $kn = $ARGV[0]; - } elsif ($#ARGV == 1) { - $sn = $ARGV[0]; - $kn = $ARGV[1]; - } else { - &usage("defaults takes only one or two codenumbers"); + opendir(DIR, "."); + foreach $_ (readdir(DIR)) { + next unless (/^[S|K][0-9]*$bn$/); + $fn = "$etcd$i.d/$_"; + $found = 1; + $islnk = &is_link ($_[0], $fn, $bn); + next if ($_[0] ne 'remove'); + if (! $islnk) { + print " $fn is not a link to ../init.d/$bn; not removing\n"; + next; + } + print " $etcd$i.d/$_\n"; + next if ($notreally); + unlink ("$etcd$i.d/$_") || + die("update-rc.d: unlink: $!\n"); } - @ARGV = ('start', "$sn", '2', '3', '4', '5', 'stop', - "$kn", '0', '1', '6'); -} elsif ($action ne 'start' && $action ne 'stop') { - &usage("unknown mode or add action $action"); + closedir(DIR); + } + $found; } -unless (-f "$initd/$bn") { - print STDERR "update-rc.d: warning /etc/$initd/$bn doesn't exist during rc.d setup.\n"; - exit(0); -} +# Process the arguments after the "defaults" keyword. -$own = &getinode("$initd/$bn"); +sub defaults { + my ($start, $stop) = (20, 20); -@files = split(/\s+/, `echo rc?.d/[SK]*`); -foreach $f (@files) { - $inode = &getinode($f); - if ($inode == $own) { - print STDERR " System startup links pointing to /etc/$initd/$bn already exist.\n"; - exit(0); - } + &usage ("defaults takes only one or two codenumbers") if ($#ARGV > 2); + $start = $stop = $ARGV[1] if ($#ARGV >= 1); + $stop = $ARGV[2] if ($#ARGV >= 2); + &usage ("codenumber must be a number") + if ($start !~ /^[0-9]+$/ || $stop !~ /^[0-9]+$/); + + $start = sprintf("%02d", $start); + $stop = sprintf("%02d", $stop); + + $stoplinks[0] = $stoplinks[1] = $stoplinks[6] = "K$stop"; + $startlinks[2] = $startlinks[3] = + $startlinks[4] = $startlinks[5] = "S$start"; + + 1; } -print " Adding system startup links pointing to /etc/$initd/$bn ...\n"; -while ($#ARGV >= 1) { - if ($ARGV[0] eq 'start') { - $ks = 'S'; - } elsif ($ARGV[0] eq 'stop') { - $ks = 'K'; - } else { - &usage("unknown action $1"); +# Process the arguments after the start or stop keyword. + +sub startstop { + + my($letter, $NN, $level); + + while ($#ARGV >= 0) { + if ($ARGV[0] eq 'start') { $letter = 'S'; } + elsif ($ARGV[0] eq 'stop') { $letter = 'K' } + else { + &usage("expected start|stop"); } - shift @ARGV; - $number = shift @ARGV; - while ($#ARGV >= 0) { - $_ = $ARGV[0]; - if (/^\.$/) { - shift @ARGV; - last; - } elsif (/^.$/) { - symlink("../$initd/$bn", "rc$_.d/$ks$number$bn") || - die "symlink: $!\n"; - print " rc$_.d/$ks$number$bn -> ../$initd/$bn\n"; - shift @ARGV; - next; - } elsif (/^(start|stop)$/) { - last; - } - &usage('runlevel is more than one character\n'); + + if ($ARGV[1] !~ /^[0-9]+$/) { + &usage("expected NN after $ARGV[0]"); } + $NN = sprintf("%02d", $ARGV[1]); + + shift @ARGV; shift @ARGV; + $level = shift @ARGV; + do { + if ($level !~ m/^[0-9S]$/) { + &usage( + "expected runlevel [0-9S] (did you forget \".\" ?)"); + } + if (! -d "$etcd$level.d") { + print STDERR + "update-rc.d: $etcd$level.d: no such directory\n"; + exit(1); + } + $level = 99 if ($level eq 'S'); + $startlinks[$level] = "$letter$NN" if ($letter eq 'S'); + $stoplinks[$level] = "$letter$NN" if ($letter eq 'K'); + } while (($level = shift @ARGV) ne '.'); + &usage("action with list of runlevels not terminated by \`.'") + if ($level ne '.'); + } + 1; } -if ($#ARGV >= 0) { - &usage("surplus arguments, but not enough for an add action: @ARGV\n"); -} +# Create the links. + +sub makelinks { + my($t, $i); + my @links; + + if (&checklinks) { + print " System startup links for $initd/$bn already exist.\n"; + exit (0); + } + print " Adding system startup for $initd/$bn ...\n"; + + # nice unreadable perl mess :) + + for($t = 0; $t < 2; $t++) { + @links = $t ? @startlinks : @stoplinks; + for($i = 0; $i <= $#links; $i++) { + $lvl = $i; + $lvl = 'S' if ($i == 99); + next if ($links[$i] eq ''); + print " $etcd$lvl.d/$links[$i]$bn -> ../init.d/$bn\n"; + next if ($notreally); + symlink("../init.d/$bn", "$etcd$lvl.d/$links[$i]$bn") + || die("update-rc.d: symlink: $!\n"); + } + } -0; + 1; +} diff --git a/split/.cvsignore b/split/.cvsignore new file mode 100644 index 000000000..70845e08e --- /dev/null +++ b/split/.cvsignore @@ -0,0 +1 @@ +Makefile.in diff --git a/split/Makefile.am b/split/Makefile.am new file mode 100644 index 000000000..9d190421f --- /dev/null +++ b/split/Makefile.am @@ -0,0 +1,50 @@ +## Process this file with automake to produce a Makefile.in + +AUTOMAKE_OPTIONS = 1.1 foreign + +## Directory definitions + +pkglibdir = $(libdir)/@PACKAGE@ +localedir = $(datadir)/locale + +## Various options + +CFLAGS = @CFLAGS@ @CWARNS@ -g $(XCFLAGS) -DLOCALEDIR=\"$(localedir)\" +OPTCFLAGS = @CFLAGS@ @OPTCFLAGS@ @CWARNS@ -g $(XCFLAGS) -DLOCALEDIR=\"$(localedir)\" +LDFLAGS = @LDFLAGS@ $(XLDFLAGS) +LIBS = @INTLLIBS@ @LIBS@ $(XLIBS) + +CXXFLAGS = @CXXFLAGS@ @CWARNS@ -g $(XCXXFLAGS) -DLOCALEDIR=\"$(localedir)\" +OPTCXXFLAGS = @CXXFLAGS @OPTCFLAGS@ @CWARNS@ -g $(XCXXFLAGS) -DLOCALEDIR=\"$(localedir)\" + +DEFS = -I$(top_srcdir)/include -I$(top_srcdir) -I$(srcdir) \ + -I$(top_builddir) -I$(top_builddir)/include -I. \ + -I$(top_srcdir)/intl -I$(top_builddir)/intl @DEFS@ \ + -DMKSPLITSCRIPT=\"$(pkglibdir)/mksplit\" + +## Automake variables + +bin_PROGRAMS = dpkg-split +pkglib_SCRIPTS = mksplit +man_MANS = dpkg-split.8 + +EXTRA_DIST = mksplit.pl dpkg-split.8 + +dpkg_split_SOURCES = main.c split.c info.c queue.c join.c dpkg-split.h +dpkg_split_LDADD = ../lib/libdpkg.la ../lib/myopt.o + + +CLEANFILES = $(pkglib_SCRIPTS) +MAINTAINERCLEANFILES = $(srcdir)/Makefile.in + +## Rules + +SUFFIXES = .pl + +.pl: + sed -e "s:^#![:space:]*/usr/bin/perl:#! $(perlpath):;" \ + < $< > $@.new + chmod 755 $@.new + mv $@.new $@ + +## End of file. diff --git a/split/Makefile.in b/split/Makefile.in deleted file mode 100644 index 8cdeaf0a7..000000000 --- a/split/Makefile.in +++ /dev/null @@ -1,80 +0,0 @@ -# Copyright (C) 1994 Ian Murdock <imurdock@debian.org> -# Copyright (C) 1994,1995 Ian Jackson <ijackson@nyx.cs.du.edu> -# -# This is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as -# published by the Free Software Foundation; either version 2, -# or (at your option) any later version. -# -# This is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public -# License along with dpkg; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -srcdir = @srcdir@ -VPATH = @srcdir@ - -prefix = @prefix@ -exec_prefix = $(prefix) -bindir = $(exec_prefix)/bin -libdir = $(prefix)/lib -dpkglibdir = $(libdir)/dpkg -datadir = /var/lib/dpkg -partsdir = $(datadir)/parts -mandir = $(prefix)/man -man8dir = $(mandir)/man8 -man8 = 8 -perlpath = @perlpath@ - -SRC = main.c split.c info.c queue.c join.c -OBJ = main.o split.o info.o queue.o join.o - -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ - -CC = @CC@ - -CFLAGS = @CFLAGS@ @CWARNS@ -g $(XCFLAGS) -LDFLAGS = $(XLDFLAGS) -LIBS = -L../lib -ldpkg $(XLIBS) -ALL_CFLAGS = -I../include -I.. @DEFS@ $(CFLAGS) - -.SUFFIXES: .c .o .pl - -.c.o: - $(CC) $(ALL_CFLAGS) -c $< - -.pl: - sed <$@.pl 's:^#!/usr/bin/perl:#!$(perlpath):' \ - | ../insert-version.pl >$@.new - chmod +x $@.new - mv $@.new $@ - -all: dpkg-split mksplit - -dpkg-split: $(OBJ) ../lib/libdpkg.a - $(CC) $(LDFLAGS) -o dpkg-split $(OBJ) $(LIBS) - -split.o: split.c - $(CC) -DMKSPLITSCRIPT=\"$(dpkglibdir)/mksplit\" $(ALL_CFLAGS) -c $< - -$(OBJ): dpkg-split.h ../config.h ../include/dpkg.h -build.o split.o queue.o join.o main.o: ../include/dpkg-db.h -info.o extract.o main.o: ../include/myopt.h -main.o: ../version.h - -clean: - rm -f *.o core dpkg-split - -distclean: clean - rm -f Makefile *.orig *~ *.~* ./#*# - -install: all - $(INSTALL_PROGRAM) -s dpkg-split $(bindir)/dpkg-split - $(INSTALL_PROGRAM) mksplit $(dpkglibdir)/mksplit -# $(INSTALL_DATA) dpkg-split.8 $(man8dir)/dpkg-split.$(man8) diff --git a/split/debugmake b/split/debugmake deleted file mode 100755 index 53497bcd5..000000000 --- a/split/debugmake +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh -set -x -make 'XCFLAGS=-g -O0' LDFLAGS=-g 'LIBS= -lefence -L../lib -ldpkg' "$@" diff --git a/split/info.c b/split/info.c index fcc36d2b1..8491cddbf 100644 --- a/split/info.c +++ b/split/info.c @@ -29,9 +29,9 @@ #include <ar.h> #include <ctype.h> -#include "config.h" -#include "dpkg.h" -#include "dpkg-db.h" +#include <config.h> +#include <dpkg.h> +#include <dpkg-db.h> #include "dpkg-split.h" static unsigned long unsignedlong(const char *value, const char *fn, const char *what) { @@ -40,7 +40,7 @@ static unsigned long unsignedlong(const char *value, const char *fn, const char r= strtoul(value,&endp,10); if (*endp) - ohshit("file `%.250s' is corrupt - bad digit (code %d) in %s",fn,*endp,what); + ohshit(_("file `%.250s' is corrupt - bad digit (code %d) in %s"),fn,*endp,what); return r; } @@ -49,7 +49,7 @@ static unsigned long parseheaderlength(const char *inh, size_t len, char lintbuf[15]; if (memchr(inh,0,len)) - ohshit("file `%.250s' is corrupt - %.250s length contains nulls",fn,what); + ohshit(_("file `%.250s' is corrupt - %.250s length contains nulls"),fn,what); assert(sizeof(lintbuf) > len); memcpy(lintbuf,inh,len); lintbuf[len]= ' '; @@ -61,10 +61,10 @@ static char *nextline(char **ripp, const char *fn, const char *what) { char *newline, *rip; rip= *ripp; - if (!rip) ohshit("file `%.250s' is corrupt - %.250s missing",fn,what); + if (!rip) ohshit(_("file `%.250s' is corrupt - %.250s missing"),fn,what); newline= strchr(rip,'\n'); if (!newline) - ohshit("file `%.250s' is corrupt - missing newline after %.250s",fn,what); + ohshit(_("file `%.250s' is corrupt - missing newline after %.250s"),fn,what); *ripp= newline+1; while (newline > rip && isspace(newline[-1])) newline--; *newline= 0; @@ -86,11 +86,11 @@ struct partinfo *read_info(FILE *partfile, const char *fn, struct partinfo *ir) if (ferror(partfile)) rerr(fn); else return 0; if (memcmp(magicbuf,PARTMAGIC,sizeof(magicbuf))) return 0; if (fseek(partfile,-sizeof(arh.ar_name),SEEK_CUR)) - ohshite("unable to seek back"); + ohshite(_("unable to seek back")); if (fread(&arh,1,sizeof(arh),partfile) != sizeof(arh)) rerreof(partfile,fn); if (memcmp(arh.ar_fmag,ARFMAG,sizeof(arh.ar_fmag))) - ohshit("file `%.250s' is corrupt - bad magic at end of first header",fn); + ohshit(_("file `%.250s' is corrupt - bad magic at end of first header"),fn); thisilen= parseheaderlength(arh.ar_size,sizeof(arh.ar_size),fn,"info length"); if (thisilen >= readinfobuflen) { readinfobuflen= thisilen+1; @@ -100,18 +100,18 @@ struct partinfo *read_info(FILE *partfile, const char *fn, struct partinfo *ir) if (thisilen & 1) { c= getc(partfile); if (c==EOF) rerreof(partfile,fn); if (c != '\n') - ohshit("file `%.250s' is corrupt - bad padding character (code %d)",fn,c); + ohshit(_("file `%.250s' is corrupt - bad padding character (code %d)"),fn,c); } readinfobuf[thisilen]= 0; if (memchr(readinfobuf,0,thisilen)) - ohshit("file `%.250s' is corrupt - nulls in info section",fn); + ohshit(_("file `%.250s' is corrupt - nulls in info section"),fn); ir->filename= fn; rip= readinfobuf; ir->fmtversion= nfstrsave(nextline(&rip,fn,"format version number")); if (strcmp(ir->fmtversion,SPLITVERSION)) - ohshit("file `%.250s' is format version `%.250s' - you need a newer " SPLITTER, + ohshit(_("file `%.250s' is format version `%.250s' - you need a newer dpkg-split"), fn,ir->fmtversion); ir->package= nfstrsave(nextline(&rip,fn,"package name")); @@ -119,14 +119,14 @@ struct partinfo *read_info(FILE *partfile, const char *fn, struct partinfo *ir) ir->md5sum= nfstrsave(nextline(&rip,fn,"package file MD5 checksum")); if (strlen(ir->md5sum) != 32 || strspn(ir->md5sum,"0123456789abcdef") != 32) - ohshit("file `%.250s' is corrupt - bad MD5 checksum `%.250s'",fn,ir->md5sum); + ohshit(_("file `%.250s' is corrupt - bad MD5 checksum `%.250s'"),fn,ir->md5sum); ir->orglength= unsignedlong(nextline(&rip,fn,"total length"),fn,"total length"); ir->maxpartlen= unsignedlong(nextline(&rip,fn,"part offset"),fn,"part offset"); partnums= nextline(&rip,fn,"part numbers"); slash= strchr(partnums,'/'); - if (!slash) ohshit("file `%.250s' is corrupt - no slash between part numbers",fn); + if (!slash) ohshit(_("file `%.250s' is corrupt - no slash between part numbers"),fn); *slash++= 0; templong= unsignedlong(slash,fn,"number of parts"); @@ -135,36 +135,36 @@ struct partinfo *read_info(FILE *partfile, const char *fn, struct partinfo *ir) ir->maxpartn= templong; templong= unsignedlong(partnums,fn,"parts number"); if (templong <= 0 || templong > ir->maxpartn) - ohshit("file `%.250s' is corrupt - bad part number",fn); + ohshit(_("file `%.250s' is corrupt - bad part number"),fn); ir->thispartn= templong; if (fread(&arh,1,sizeof(arh),partfile) != sizeof(arh)) rerreof(partfile,fn); if (memcmp(arh.ar_fmag,ARFMAG,sizeof(arh.ar_fmag))) - ohshit("file `%.250s' is corrupt - bad magic at end of second header",fn); + ohshit(_("file `%.250s' is corrupt - bad magic at end of second header"),fn); if (strncmp(arh.ar_name,"data",4)) - ohshit("file `%.250s' is corrupt - second member is not data member",fn); + ohshit(_("file `%.250s' is corrupt - second member is not data member"),fn); ir->thispartlen= parseheaderlength(arh.ar_size,sizeof(arh.ar_size),fn,"data length"); ir->thispartoffset= (ir->thispartn-1)*ir->maxpartlen; if (ir->maxpartn != (ir->orglength+ir->maxpartlen-1)/ir->maxpartlen) - ohshit("file `%.250s' is corrupt - wrong number of parts for quoted sizes",fn); + ohshit(_("file `%.250s' is corrupt - wrong number of parts for quoted sizes"),fn); if (ir->thispartlen != (ir->thispartn == ir->maxpartn ? ir->orglength - ir->thispartoffset : ir->maxpartlen)) - ohshit("file `%.250s' is corrupt - size is wrong for quoted part number",fn); + ohshit(_("file `%.250s' is corrupt - size is wrong for quoted part number"),fn); ir->filesize= (SARMAG + sizeof(arh) + thisilen + (thisilen&1) + sizeof(arh) + ir->thispartlen + (ir->thispartlen&1)); - if (fstat(fileno(partfile),&stab)) ohshite("unable to fstat part file `%.250s'",fn); + if (fstat(fileno(partfile),&stab)) ohshite(_("unable to fstat part file `%.250s'"),fn); if (S_ISREG(stab.st_mode)) { /* Don't do this check if it's coming from a pipe or something. It's * only an extra sanity check anyway. */ if (stab.st_size < ir->filesize) - ohshit("file `%.250s' is corrupt - too short",fn); + ohshit(_("file `%.250s' is corrupt - too short"),fn); } ir->headerlen= SARMAG + sizeof(arh) + thisilen + (thisilen&1) + sizeof(arh); @@ -176,14 +176,14 @@ void mustgetpartinfo(const char *filename, struct partinfo *ri) { FILE *part; part= fopen(filename,"r"); - if (!part) ohshite("cannot open archive part file `%.250s'",filename); + if (!part) ohshite(_("cannot open archive part file `%.250s'"),filename); if (!read_info(part,filename,ri)) - ohshite("file `%.250s' is not an archive part",filename); + ohshite(_("file `%.250s' is not an archive part"),filename); fclose(part); } void print_info(const struct partinfo *pi) { - printf("%s:\n" + printf(_("%s:\n" " Part format version: %s\n" " Part of package: %s\n" " ... version: %s\n" @@ -193,7 +193,7 @@ void print_info(const struct partinfo *pi) { " Part number: %d/%d\n" " Part length: %lu bytes\n" " Part offset: %lu bytes\n" - " Part file size (used portion): %lu bytes\n\n", + " Part file size (used portion): %lu bytes\n\n"), pi->filename, pi->fmtversion, pi->package, @@ -213,17 +213,17 @@ void do_info(const char *const *argv) { struct partinfo *pi, ps; FILE *part; - if (!*argv) badusage("--info requires one or more part file arguments"); + if (!*argv) badusage(_("--info requires one or more part file arguments")); while ((thisarg= *argv++)) { part= fopen(thisarg,"r"); - if (!part) ohshite("cannot open archive part file `%.250s'",thisarg); + if (!part) ohshite(_("cannot open archive part file `%.250s'"),thisarg); pi= read_info(part,thisarg,&ps); fclose(part); if (pi) { print_info(pi); } else { - printf("file `%s' is not an archive part\n",thisarg); + printf(_("file `%s' is not an archive part\n"),thisarg); } if (ferror(stdout)) werr("stdout"); } diff --git a/split/join.c b/split/join.c index 9e99f643b..69993df46 100644 --- a/split/join.c +++ b/split/join.c @@ -25,9 +25,9 @@ #include <assert.h> #include <string.h> -#include "config.h" -#include "dpkg.h" -#include "dpkg-db.h" +#include <config.h> +#include <dpkg.h> +#include <dpkg-db.h> #include "dpkg-split.h" void reassemble(struct partinfo **partlist, const char *outputfile) { @@ -45,11 +45,11 @@ void reassemble(struct partinfo **partlist, const char *outputfile) { if (partlist[0]->headerlen > buffersize) buffersize= partlist[0]->headerlen; buffer= m_malloc(partlist[0]->maxpartlen); output= fopen(outputfile,"w"); - if (!output) ohshite("unable to open output file `%.250s'",outputfile); + if (!output) ohshite(_("unable to open output file `%.250s'"),outputfile); for (i=0; i<partlist[0]->maxpartn; i++) { pi= partlist[i]; input= fopen(pi->filename,"r"); - if (!input) ohshite("unable to (re)open input part file `%.250s'",pi->filename); + if (!input) ohshite(_("unable to (re)open input part file `%.250s'"),pi->filename); assert(pi->headerlen <= buffersize); nr= fread(buffer,1,pi->headerlen,input); if (nr != pi->headerlen) rerreof(input,pi->filename); @@ -65,7 +65,7 @@ void reassemble(struct partinfo **partlist, const char *outputfile) { if (nr != pi->thispartlen) werr(outputfile); } if (fclose(output)) werr(outputfile); - printf("done\n"); + printf(_("done\n")); } @@ -81,12 +81,12 @@ void addtopartlist(struct partinfo **partlist, pi->maxpartlen != refi->maxpartlen) { print_info(pi); print_info(refi); - ohshit("files `%.250s' and `%.250s' are not parts of the same file", + ohshit(_("files `%.250s' and `%.250s' are not parts of the same file"), pi->filename,refi->filename); } i= pi->thispartn-1; if (partlist[i]) - ohshit("there are several versions of part %d - at least `%.250s' and `%.250s'", + ohshit(_("there are several versions of part %d - at least `%.250s' and `%.250s'"), pi->thispartn, pi->filename, partlist[i]->filename); partlist[i]= pi; } @@ -99,7 +99,7 @@ void do_join(const char *const *argv) { int i; assert(!queue); - if (!*argv) badusage("--join requires one or more part file arguments"); + if (!*argv) badusage(_("--join requires one or more part file arguments")); while ((thisarg= *argv++)) { pq= nfmalloc(sizeof(struct partqueue)); @@ -120,7 +120,7 @@ void do_join(const char *const *argv) { addtopartlist(partlist,pi,refi); } for (i=0; i<refi->maxpartn; i++) { - if (!partlist[i]) ohshit("part %d is missing",i+1); + if (!partlist[i]) ohshit(_("part %d is missing"),i+1); } if (!outputfile) { p= nfmalloc(strlen(refi->package)+1+strlen(refi->version)+sizeof(DEBEXT)); diff --git a/split/main.c b/split/main.c index 756dbf4e6..560d10c56 100644 --- a/split/main.c +++ b/split/main.c @@ -19,52 +19,53 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +#include <string.h> #include <stdio.h> #include <stdlib.h> #include <limits.h> #include <assert.h> -#include "config.h" -#include "dpkg.h" -#include "dpkg-db.h" -#include "version.h" -#include "myopt.h" +#include <config.h> +#include <dpkg.h> +#include <dpkg-db.h> +#include <version.h> +#include <myopt.h> #include "dpkg-split.h" static void printversion(void) { - if (!fputs - ("Debian Linux `" SPLITTER "' package split/join tool; " - "version " DPKG_VERSION_ARCH ".\n" - "Copyright (C) 1994-1996 Ian Jackson. This is free software; see the\n" + if (fputs + (_("Debian Linux `dpkg-split' package split/join tool; version "), stdout) < 0) werr ("stdout"); + if (fputs (DPKG_VERSION_ARCH ".\n", stdout) < 0) werr ("stdout"); + if (fputs (_("Copyright (C) 1994-1996 Ian Jackson. This is free software; see the\n" "GNU General Public Licence version 2 or later for copying conditions.\n" - "There is NO warranty. See dpkg-split --licence for details.\n", - stdout)) werr("stdout"); + "There is NO warranty. See dpkg-split --licence for details.\n"), + stdout) < 0) werr("stdout"); } static void usage(void) { - if (!fputs("\ -Usage: " SPLITTER " -s|--split <file> [<prefix>] Split an archive.\n\ - " SPLITTER " -j|--join <part> <part> ... Join parts together.\n\ - " SPLITTER " -I|--info <part> ... Display info about a part.\n\ - " SPLITTER " -h|--help|--version|--licence Show help/version/licence.\n\ + if (fputs(_("\ +Usage: dpkg-split -s|--split <file> [<prefix>] Split an archive.\n\ + dpkg-split -j|--join <part> <part> ... Join parts together.\n\ + dpkg-split -I|--info <part> ... Display info about a part.\n\ + dpkg-split -h|--help|--version|--licence Show help/version/licence.\n\ \n\ - " SPLITTER " -a|--auto -o <complete> <part> Auto-accumulate parts.\n\ - " SPLITTER " -l|--listq List unmatched pieces.\n\ - " SPLITTER " -d|--discard [<filename> ...] Discard unmatched pieces.\n\ + dpkg-split -a|--auto -o <complete> <part> Auto-accumulate parts.\n\ + dpkg-split -l|--listq List unmatched pieces.\n\ + dpkg-split -d|--discard [<filename> ...] Discard unmatched pieces.\n\ \n\ -Options: --depotdir <directory> (default is /var/lib/dpkg/parts)\n\ +Options: --depotdir <directory> (default is " ADMINDIR "/" PARTSDIR ")\n\ -S|--partsize <size> (in Kb, for -s, default is 450)\n\ -o|--output <file> (for -j, default is <package>-<version>.deb)\n\ -Q|--npquiet (be quiet when -a is not a part)\n\ --msdos (generate 8.3 filenames)\n\ \n\ -Exit status: 0 = OK; 1 = -a is not a part; 2 = trouble!\n", - stdout)) werr("stdout"); +Exit status: 0 = OK; 1 = -a is not a part; 2 = trouble!\n"), + stdout) < 0) werr("stdout"); } const char thisname[]= SPLITTER; -const char printforhelp[]= "Type " SPLITTER " --help for help."; +const char printforhelp[]= N_("Type dpkg-split --help for help."); dofunction *action=0; const struct cmdinfo *cipaction=0; @@ -74,12 +75,12 @@ struct partqueue *queue= 0; int npquiet= 0, msdos= 0; void rerr(const char *fn) { - ohshite("error reading %s",fn); + ohshite(_("error reading %s"),fn); } void rerreof(FILE *f, const char *fn) { - if (ferror(f)) ohshite("error reading %.250s",fn); - ohshit("unexpected end of file in %.250s",fn); + if (ferror(f)) ohshite(_("error reading %.250s"),fn); + ohshit(_("unexpected end of file in %.250s"),fn); } static void helponly(const struct cmdinfo *cip, const char *value) { @@ -97,11 +98,11 @@ static void setpartsize(const struct cmdinfo *cip, const char *value) { newpartsize= strtol(value,&endp,10); if (newpartsize <= 0 || newpartsize > (INT_MAX >> 10)) - badusage("part size is far too large or is not positive"); + badusage(_("part size is far too large or is not positive")); maxpartsize= newpartsize << 10; if (maxpartsize <= HEADERALLOWANCE) - badusage("part size must be at least %dk (to allow for header)", + badusage(_("part size must be at least %dk (to allow for header)"), (HEADERALLOWANCE >> 10) + 1); } @@ -138,7 +139,7 @@ static const struct cmdinfo cmdinfos[]= { static void setaction(const struct cmdinfo *cip, const char *value) { if (cipaction) - badusage("conflicting actions --%s and --%s",cip->olong,cipaction->olong); + badusage(_("conflicting actions --%s and --%s"),cip->olong,cipaction->olong); cipaction= cip; assert(cip-cmdinfos < sizeof(dofunctions)*sizeof(dofunction*)); action= dofunctions[cip-cmdinfos]; @@ -149,13 +150,17 @@ int main(int argc, const char *const *argv) { int l; char *p; + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, LOCALEDIR); + textdomain(PACKAGE); + if (setjmp(ejbuf)) { /* expect warning about possible clobbering of argv */ error_unwind(ehflag_bombout); exit(2); } push_error_handler(&ejbuf,print_error_fatal,0); myopt(&argv,cmdinfos); - if (!cipaction) badusage("need an action option"); + if (!cipaction) badusage(_("need an action option")); l= strlen(depotdir); if (l && depotdir[l-1] != '/') { diff --git a/split/mksplit b/split/mksplit deleted file mode 100755 index 697d8fdbf..000000000 --- a/split/mksplit +++ /dev/null @@ -1,89 +0,0 @@ -#!/usr/bin/perl -- -# This script is only supposed to be called by dpkg-split. -# Its arguments are: -# <sourcefile> <partsize> <prefix> <totalsize> <partsizeallow> <msdostruncyesno> -# Stdin is also redirected from the source archive by dpkg-split. - -# Copyright (C) 1995 Ian Jackson <ijackson@nyx.cs.du.edu> -# -# This is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as -# published by the Free Software Foundation; either version 2, -# or (at your option) any later version. -# -# This is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public -# License along with dpkg; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -@ARGV == 6 || die "mksplit: bad invocation\n"; - -($sourcefile,$partsize,$prefix,$orgsize,$partsizeallow,$msdos) = @ARGV; - -sub output { - $!=0; $rv= `$_[0]`; $? && die "mksplit $_[0]: $! $?\n"; - $rv =~ s/\n$//; $rv =~ s/\s+$//; $rv =~ s/^\s+//; - $rv; -} - -$myversion='2.1'; -$csum= &output("md5sum <\"$sourcefile\""); -$package= &output("dpkg-deb --field \"$sourcefile\" Package"); -$version= &output("dpkg-deb --field \"$sourcefile\" Version"); -$revision= &output("dpkg-deb --field \"$sourcefile\" Package_Revision"); -$version.= "-$revision" if length($revision); -$nparts=int(($orgsize+$partsize-1)/$partsize); -$startat=0; -$showpartnum=1; - -$|=1; -print("Splitting package $package into $nparts parts: "); - -$msdos= ($msdos eq 'yes'); -if ($msdos) { - $prefixdir= $prefix; $prefixdir =~ s:(/?)/*[^/]+$:$1:; - $cleanprefix= $prefix; $cleanprefix =~ s:^.*/+::; - $cleanprefix =~ y/A-Za-z0-9+/a-za-z0-9x/; - $cleanprefix =~ y/a-z0-9//cd; -} - -sub add { - $data .= - sprintf("%-16s%-12d0 0 100644 %-10d%c\n%s%s", - $_[0], time, length($_[1]), 0140, $_[1], - (length($_[1]) & 1) ? "\n" : ""); -} - -while ($startat < $orgsize) { - $dsp= "$myversion\n$package\n$version\n$csum\n$orgsize\n$partsize\n". - "$showpartnum/$nparts\n"; - defined($thispartreallen= read(STDIN,$pd,$partsize)) || die "mksplit: read: $!\n"; - $data= "!<arch>\n"; - print("$showpartnum "); - &add('debian-split',$dsp); - &add("data.$showpartnum",$pd); - if ($thispartreallen > $partsizeallow) { - die "Header is too long, making part too long. Your package name or version\n". - "numbers must be extraordinarily long, or something. Giving up.\n"; - } - if ($msdos) { - $basename= "${showpartnum}of$nparts.$cleanprefix"; - $basename= substr($basename,0,9); - $basename =~ s/^([^.]*)\.(.*)$/$2$1/; - $basename= "$prefixdir$basename"; - } else { - $basename= "$prefix.${showpartnum}of$nparts"; - } - open(O,"> $basename.deb") || die("mksplit: open $basename.deb: $!\n"); - print(O $data) || die("mksplit: write $basename.deb: $!\n"); - close(O) || die("mksplit: close $basename.deb: $!\n"); - $startat += $partsize; - $showpartnum++; -} -print("done\n"); - -exit(0); diff --git a/split/queue.c b/split/queue.c index 5f26f66f5..a7f2cc646 100644 --- a/split/queue.c +++ b/split/queue.c @@ -38,9 +38,9 @@ #include <dirent.h> #include <string.h> -#include "config.h" -#include "dpkg.h" -#include "dpkg-db.h" +#include <config.h> +#include <dpkg.h> +#include <dpkg-db.h> #include "dpkg-split.h" static int decompose_filename(const char *filename, struct partqueue *pq) { @@ -66,7 +66,7 @@ void scandepot(void) { assert(!queue); depot= opendir(depotdir); - if (!depot) ohshite("unable to read depot directory `%.250s'",depotdir); + if (!depot) ohshite(_("unable to read depot directory `%.250s'"),depotdir); while ((de= readdir(depot))) { if (de->d_name[0] == '.') continue; pq= nfmalloc(sizeof(struct partqueue)); @@ -102,16 +102,16 @@ void do_auto(const char *const *argv) { void *buffer; char *p, *q; - if (!outputfile) badusage("--auto requires the use of the --output option"); + if (!outputfile) badusage(_("--auto requires the use of the --output option")); if (!(partfile= *argv++) || *argv) - badusage("--auto requires exactly one part file argument"); + badusage(_("--auto requires exactly one part file argument")); refi= nfmalloc(sizeof(struct partqueue)); part= fopen(partfile,"r"); - if (!part) ohshite("unable to read part file `%.250s'",partfile); + if (!part) ohshite(_("unable to read part file `%.250s'"),partfile); if (!read_info(part,partfile,refi)) { if (!npquiet) - printf("File `%.250s' is not part of a multipart archive.\n",partfile); + printf(_("File `%.250s' is not part of a multipart archive.\n"),partfile); if (fclose(stdout)) werr("stdout"); exit(1); } @@ -138,11 +138,11 @@ void do_auto(const char *const *argv) { if (j>=0) { part= fopen(partfile,"r"); - if (!part) ohshite("unable to reopen part file `%.250s'",partfile); + if (!part) ohshite(_("unable to reopen part file `%.250s'"),partfile); buffer= nfmalloc(refi->filesize); nr= fread(buffer,1,refi->filesize,part); if (nr != refi->filesize) rerreof(part,partfile); - if (getc(part) != EOF) ohshit("part file `%.250s' has trailing garbage",partfile); + if (getc(part) != EOF) ohshit(_("part file `%.250s' has trailing garbage"),partfile); if (ferror(part)) rerr(partfile); fclose(part); p= nfmalloc(strlen(depotdir)+50); @@ -151,17 +151,17 @@ void do_auto(const char *const *argv) { sprintf(q,"%s%s.%lx.%x.%x",depotdir,refi->md5sum, refi->maxpartlen,refi->thispartn,refi->maxpartn); part= fopen(p,"w"); - if (!part) ohshite("unable to open new depot file `%.250s'",p); + if (!part) ohshite(_("unable to open new depot file `%.250s'"),p); nr= fwrite(buffer,1,refi->filesize,part); if (nr != refi->filesize) werr(p); if (fclose(part)) werr(p); - if (rename(p,q)) ohshite("unable to rename new depot file `%.250s' to `%.250s'",p,q); + if (rename(p,q)) ohshite(_("unable to rename new depot file `%.250s' to `%.250s'"),p,q); - printf("Part %d of package %s filed (still want ",refi->thispartn,refi->package); + printf(_("Part %d of package %s filed (still want "),refi->thispartn,refi->package); /* There are still some parts missing. */ for (i=0, ap=0; i<refi->maxpartn; i++) if (!partlist[i]) - printf("%s%d", !ap++ ? "" : i==j ? " and " : ", ", i+1); + printf("%s%d", !ap++ ? "" : i==j ? _(" and ") : ", ", i+1); printf(").\n"); } else { @@ -174,7 +174,7 @@ void do_auto(const char *const *argv) { for (i=0; i<refi->maxpartn; i++) if (partlist[i]) if (unlink(partlist[i]->filename)) - ohshite("unable to delete used-up depot file `%.250s'",partlist[i]->filename); + ohshite(_("unable to delete used-up depot file `%.250s'"),partlist[i]->filename); } @@ -189,29 +189,29 @@ void do_queue(const char *const *argv) { unsigned long bytes; int i; - if (*argv) badusage("--listq does not take any arguments"); + if (*argv) badusage(_("--listq does not take any arguments")); scandepot(); - head= "Junk files left around in the depot directory:\n"; + head= N_("Junk files left around in the depot directory:\n"); for (pq= queue; pq; pq= pq->nextinqueue) { if (pq->info.md5sum) continue; - fputs(head,stdout); head= ""; + fputs(gettext(head),stdout); head= ""; if (lstat(pq->info.filename,&stab)) - ohshit("unable to stat `%.250s'",pq->info.filename); + ohshit(_("unable to stat `%.250s'"),pq->info.filename); if (S_ISREG(stab.st_mode)) { bytes= stab.st_size; - printf(" %s (%lu bytes)\n",pq->info.filename,bytes); + printf(_(" %s (%lu bytes)\n"),pq->info.filename,bytes); } else { - printf(" %s (not a plain file)\n",pq->info.filename); + printf(_(" %s (not a plain file)\n"),pq->info.filename); } } if (!*head) putchar('\n'); - head= "Packages not yet reassembled:\n"; + head= N_("Packages not yet reassembled:\n"); for (pq= queue; pq; pq= pq->nextinqueue) { if (!pq->info.md5sum) continue; mustgetpartinfo(pq->info.filename,&ti); - fputs(head,stdout); head= ""; + fputs(gettext(head),stdout); head= ""; printf(" Package %s: part(s) ",ti.package); bytes= 0; for (i=0; i<ti.maxpartn; i++) { @@ -221,14 +221,14 @@ void do_queue(const char *const *argv) { if (qq) { printf("%d ",i+1); if (lstat(qq->info.filename,&stab)) - ohshite("unable to stat `%.250s'",qq->info.filename); + ohshite(_("unable to stat `%.250s'"),qq->info.filename); if (!S_ISREG(stab.st_mode)) - ohshit("part file `%.250s' is not a plain file",qq->info.filename); + ohshit(_("part file `%.250s' is not a plain file"),qq->info.filename); bytes+= stab.st_size; qq->info.md5sum= 0; /* don't find this package again */ } } - printf("(total %lu bytes)\n",bytes); + printf(_("(total %lu bytes)\n"),bytes); } if (fclose(stdout)) werr("stdout"); } @@ -251,8 +251,8 @@ static void discardsome(enum discardwhich which, const char *package) { default: internerr("bad discardsome which"); } if (unlink(pq->info.filename)) - ohshite("unable to discard `%.250s'",pq->info.filename); - printf("Deleted %s.\n",pq->info.filename); + ohshite(_("unable to discard `%.250s'"),pq->info.filename); + printf(_("Deleted %s.\n"),pq->info.filename); } } diff --git a/split/split.c b/split/split.c index facdeb0e5..9b7ec963e 100644 --- a/split/split.c +++ b/split/split.c @@ -28,9 +28,9 @@ #include <sys/stat.h> #include <fcntl.h> -#include "config.h" -#include "dpkg.h" -#include "dpkg-db.h" +#include <config.h> +#include <dpkg.h> +#include <dpkg-db.h> #include "dpkg-split.h" void do_split(const char *const *argv) { @@ -42,10 +42,10 @@ void do_split(const char *const *argv) { sourcefile= *argv++; if (!sourcefile) - badusage("--split needs a source filename argument"); + badusage(_("--split needs a source filename argument")); prefix= *argv++; if (prefix && *argv) - badusage("--split takes at most a source filename and destination prefix"); + badusage(_("--split takes at most a source filename and destination prefix")); if (!prefix) { l= strlen(sourcefile); palloc= nfmalloc(l+1); @@ -59,13 +59,16 @@ void do_split(const char *const *argv) { sprintf(partsizebuf,"%ld",maxpartsize-HEADERALLOWANCE); sprintf(partsizeallowbuf,"%ld",maxpartsize); fd= open(sourcefile,O_RDONLY); - if (!fd) ohshite("unable to open source file `%.250s'",sourcefile); - if (fstat(fd,&stab)) ohshite("unable to fstat source file"); - if (!S_ISREG(stab.st_mode)) ohshit("source file `%.250s' not a plain file",sourcefile); + if (!fd) ohshite(_("unable to open source file `%.250s'"),sourcefile); + if (fstat(fd,&stab)) ohshite(_("unable to fstat source file")); + if (!S_ISREG(stab.st_mode)) ohshit(_("source file `%.250s' not a plain file"),sourcefile); sprintf(lengthbuf,"%lu",(unsigned long)stab.st_size); m_dup2(fd,0); execl(MKSPLITSCRIPT,MKSPLITSCRIPT, sourcefile,partsizebuf,prefix,lengthbuf,partsizeallowbuf,msdos?"yes":"no", (char*)0); - ohshite("unable to exec " MKSPLITSCRIPT); + ohshite(_("unable to exec mksplit")); } + + + diff --git a/version.h b/version.h deleted file mode 100644 index a3eacf5b8..000000000 --- a/version.h +++ /dev/null @@ -1 +0,0 @@ -#define DPKG_VERSION "1.4.0" /* This line modified by Makefile */ |