summaryrefslogtreecommitdiffstats
path: root/scripts
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 14:58:51 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 14:58:51 +0000
commitcbffab246997fb5a06211dfb706b54e5ae5bb59f (patch)
tree0573c5d96f58d74d76a49c0f2a70398e389a36d3 /scripts
parentInitial commit. (diff)
downloaddpkg-cbffab246997fb5a06211dfb706b54e5ae5bb59f.tar.xz
dpkg-cbffab246997fb5a06211dfb706b54e5ae5bb59f.zip
Adding upstream version 1.21.22.upstream/1.21.22upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'scripts')
-rw-r--r--scripts/Build.PL.in171
-rw-r--r--scripts/Dpkg.pm307
-rw-r--r--scripts/Dpkg/Arch.pm707
-rw-r--r--scripts/Dpkg/Build/Info.pm97
-rw-r--r--scripts/Dpkg/BuildEnv.pm113
-rw-r--r--scripts/Dpkg/BuildFlags.pm612
-rw-r--r--scripts/Dpkg/BuildInfo.pm154
-rw-r--r--scripts/Dpkg/BuildOptions.pm246
-rw-r--r--scripts/Dpkg/BuildProfiles.pm146
-rw-r--r--scripts/Dpkg/BuildTypes.pm284
-rw-r--r--scripts/Dpkg/Changelog.pm775
-rw-r--r--scripts/Dpkg/Changelog/Debian.pm271
-rw-r--r--scripts/Dpkg/Changelog/Entry.pm324
-rw-r--r--scripts/Dpkg/Changelog/Entry/Debian.pm462
-rw-r--r--scripts/Dpkg/Changelog/Parse.pm197
-rw-r--r--scripts/Dpkg/Checksums.pm430
-rw-r--r--scripts/Dpkg/Compression.pm448
-rw-r--r--scripts/Dpkg/Compression/FileHandle.pm473
-rw-r--r--scripts/Dpkg/Compression/Process.pm208
-rw-r--r--scripts/Dpkg/Conf.pm269
-rw-r--r--scripts/Dpkg/Control.pm269
-rw-r--r--scripts/Dpkg/Control/Changelog.pm65
-rw-r--r--scripts/Dpkg/Control/Fields.pm69
-rw-r--r--scripts/Dpkg/Control/FieldsCore.pm1377
-rw-r--r--scripts/Dpkg/Control/Hash.pm48
-rw-r--r--scripts/Dpkg/Control/HashCore.pm589
-rw-r--r--scripts/Dpkg/Control/Info.pm227
-rw-r--r--scripts/Dpkg/Control/Tests.pm83
-rw-r--r--scripts/Dpkg/Control/Tests/Entry.pm94
-rw-r--r--scripts/Dpkg/Control/Types.pm102
-rw-r--r--scripts/Dpkg/Deps.pm490
-rw-r--r--scripts/Dpkg/Deps/AND.pm182
-rw-r--r--scripts/Dpkg/Deps/KnownFacts.pm218
-rw-r--r--scripts/Dpkg/Deps/Multiple.pm250
-rw-r--r--scripts/Dpkg/Deps/OR.pm174
-rw-r--r--scripts/Dpkg/Deps/Simple.pm668
-rw-r--r--scripts/Dpkg/Deps/Union.pm119
-rw-r--r--scripts/Dpkg/Dist/Files.pm198
-rw-r--r--scripts/Dpkg/ErrorHandling.pm263
-rw-r--r--scripts/Dpkg/Exit.pm132
-rw-r--r--scripts/Dpkg/File.pm79
-rw-r--r--scripts/Dpkg/Getopt.pm48
-rw-r--r--scripts/Dpkg/Gettext.pm235
-rw-r--r--scripts/Dpkg/IPC.pm420
-rw-r--r--scripts/Dpkg/Index.pm457
-rw-r--r--scripts/Dpkg/Interface/Storable.pm163
-rw-r--r--scripts/Dpkg/Lock.pm61
-rw-r--r--scripts/Dpkg/OpenPGP.pm155
-rw-r--r--scripts/Dpkg/OpenPGP/Backend.pm127
-rw-r--r--scripts/Dpkg/OpenPGP/Backend/GnuPG.pm301
-rw-r--r--scripts/Dpkg/OpenPGP/Backend/SOP.pm108
-rw-r--r--scripts/Dpkg/OpenPGP/Backend/Sequoia.pm123
-rw-r--r--scripts/Dpkg/OpenPGP/ErrorCodes.pm93
-rw-r--r--scripts/Dpkg/OpenPGP/KeyHandle.pm103
-rw-r--r--scripts/Dpkg/Package.pm47
-rw-r--r--scripts/Dpkg/Path.pm354
-rw-r--r--scripts/Dpkg/Shlibs.pm184
-rw-r--r--scripts/Dpkg/Shlibs/Cppfilt.pm120
-rw-r--r--scripts/Dpkg/Shlibs/Objdump.pm582
-rw-r--r--scripts/Dpkg/Shlibs/Symbol.pm531
-rw-r--r--scripts/Dpkg/Shlibs/SymbolFile.pm697
-rw-r--r--scripts/Dpkg/Source/Archive.pm240
-rw-r--r--scripts/Dpkg/Source/BinaryFiles.pm161
-rw-r--r--scripts/Dpkg/Source/Format.pm191
-rw-r--r--scripts/Dpkg/Source/Functions.pm124
-rw-r--r--scripts/Dpkg/Source/Package.pm741
-rw-r--r--scripts/Dpkg/Source/Package/V1.pm512
-rw-r--r--scripts/Dpkg/Source/Package/V2.pm744
-rw-r--r--scripts/Dpkg/Source/Package/V3/Bzr.pm213
-rw-r--r--scripts/Dpkg/Source/Package/V3/Custom.pm74
-rw-r--r--scripts/Dpkg/Source/Package/V3/Git.pm283
-rw-r--r--scripts/Dpkg/Source/Package/V3/Native.pm121
-rw-r--r--scripts/Dpkg/Source/Package/V3/Quilt.pm269
-rw-r--r--scripts/Dpkg/Source/Patch.pm697
-rw-r--r--scripts/Dpkg/Source/Quilt.pm383
-rw-r--r--scripts/Dpkg/Substvars.pm501
-rw-r--r--scripts/Dpkg/Vars.pm53
-rw-r--r--scripts/Dpkg/Vendor.pm289
-rw-r--r--scripts/Dpkg/Vendor/Debian.pm522
-rw-r--r--scripts/Dpkg/Vendor/Default.pm229
-rw-r--r--scripts/Dpkg/Vendor/Devuan.pm68
-rw-r--r--scripts/Dpkg/Vendor/Ubuntu.pm174
-rw-r--r--scripts/Dpkg/Version.pm491
-rw-r--r--scripts/Makefile.am452
-rw-r--r--scripts/Makefile.in1417
-rw-r--r--scripts/README.cpan.in5
-rw-r--r--scripts/Test/Dpkg.pm227
-rw-r--r--scripts/completion/zsh/_dpkg-parsechangelog23
-rwxr-xr-xscripts/dpkg-architecture.pl396
-rwxr-xr-xscripts/dpkg-buildflags.pl226
-rwxr-xr-xscripts/dpkg-buildpackage.pl1011
-rwxr-xr-xscripts/dpkg-checkbuilddeps.pl223
-rwxr-xr-xscripts/dpkg-distaddfile.pl97
-rwxr-xr-xscripts/dpkg-fsys-usrunmess.pl634
-rwxr-xr-xscripts/dpkg-genbuildinfo.pl595
-rwxr-xr-xscripts/dpkg-genchanges.pl532
-rwxr-xr-xscripts/dpkg-gencontrol.pl436
-rwxr-xr-xscripts/dpkg-gensymbols.pl330
-rwxr-xr-xscripts/dpkg-mergechangelogs.pl321
-rwxr-xr-xscripts/dpkg-name.pl259
-rwxr-xr-xscripts/dpkg-parsechangelog.pl151
-rwxr-xr-xscripts/dpkg-scanpackages.pl303
-rwxr-xr-xscripts/dpkg-scansources.pl326
-rwxr-xr-xscripts/dpkg-shlibdeps.pl936
-rwxr-xr-xscripts/dpkg-source.pl671
-rwxr-xr-xscripts/dpkg-vendor.pl108
-rw-r--r--scripts/mk/Makefile.am27
-rw-r--r--scripts/mk/Makefile.in648
-rw-r--r--scripts/mk/architecture.mk11
-rw-r--r--scripts/mk/buildflags.mk46
-rw-r--r--scripts/mk/buildopts.mk10
-rw-r--r--scripts/mk/buildtools.mk78
-rw-r--r--scripts/mk/default.mk9
-rw-r--r--scripts/mk/pkg-info.mk27
-rw-r--r--scripts/mk/vendor.mk43
-rw-r--r--scripts/po/ChangeLog.old448
-rw-r--r--scripts/po/LINGUAS11
-rw-r--r--scripts/po/Makefile.in.in510
-rw-r--r--scripts/po/Makevars82
-rw-r--r--scripts/po/POTFILES.in94
-rw-r--r--scripts/po/Rules-quot62
-rw-r--r--scripts/po/boldquot.sed10
-rw-r--r--scripts/po/ca.gmobin0 -> 120343 bytes
-rw-r--r--scripts/po/ca.po4586
-rw-r--r--scripts/po/de.gmobin0 -> 119047 bytes
-rw-r--r--scripts/po/de.po5386
-rw-r--r--scripts/po/dpkg-dev.pot3587
-rw-r--r--scripts/po/en@boldquot.header25
-rw-r--r--scripts/po/en@quot.header22
-rw-r--r--scripts/po/es.gmobin0 -> 54472 bytes
-rw-r--r--scripts/po/es.po5199
-rw-r--r--scripts/po/fr.gmobin0 -> 124546 bytes
-rw-r--r--scripts/po/fr.po5263
-rw-r--r--scripts/po/insert-header.sin28
-rw-r--r--scripts/po/nl.gmobin0 -> 117508 bytes
-rw-r--r--scripts/po/nl.po4242
-rw-r--r--scripts/po/pl.gmobin0 -> 56707 bytes
-rw-r--r--scripts/po/pl.po5448
-rw-r--r--scripts/po/pt.gmobin0 -> 117434 bytes
-rw-r--r--scripts/po/pt.po4234
-rw-r--r--scripts/po/quot.sed6
-rw-r--r--scripts/po/remove-potcdate.sin25
-rw-r--r--scripts/po/ru.gmobin0 -> 74729 bytes
-rw-r--r--scripts/po/ru.po5311
-rw-r--r--scripts/po/stamp-po1
-rw-r--r--scripts/po/sv.gmobin0 -> 113314 bytes
-rw-r--r--scripts/po/sv.po4140
-rw-r--r--scripts/t/Dpkg_Arch.t203
-rw-r--r--scripts/t/Dpkg_BuildEnv.t50
-rw-r--r--scripts/t/Dpkg_BuildFlags.t133
-rw-r--r--scripts/t/Dpkg_BuildFlags_Ubuntu.t94
-rw-r--r--scripts/t/Dpkg_BuildInfo.t28
-rw-r--r--scripts/t/Dpkg_BuildOptions.t109
-rw-r--r--scripts/t/Dpkg_BuildProfiles.t61
-rw-r--r--scripts/t/Dpkg_BuildTypes.t89
-rw-r--r--scripts/t/Dpkg_Changelog.t383
-rw-r--r--scripts/t/Dpkg_Changelog/countme41
-rw-r--r--scripts/t/Dpkg_Changelog/date-format17
-rw-r--r--scripts/t/Dpkg_Changelog/fields40
-rw-r--r--scripts/t/Dpkg_Changelog/misplaced-tz12
-rw-r--r--scripts/t/Dpkg_Changelog/regressions7
-rw-r--r--scripts/t/Dpkg_Changelog/shadow1755
-rw-r--r--scripts/t/Dpkg_Changelog/stop-modeline13
-rw-r--r--scripts/t/Dpkg_Changelog/unreleased11
-rw-r--r--scripts/t/Dpkg_Changelog_Ubuntu.t25
-rw-r--r--scripts/t/Dpkg_Checksums.t151
-rw-r--r--scripts/t/Dpkg_Checksums/data-11
-rw-r--r--scripts/t/Dpkg_Checksums/data-21
-rw-r--r--scripts/t/Dpkg_Checksums/empty0
-rw-r--r--scripts/t/Dpkg_Compression.t176
-rw-r--r--scripts/t/Dpkg_Conf.t121
-rw-r--r--scripts/t/Dpkg_Conf/config-mixed26
-rw-r--r--scripts/t/Dpkg_Control.t148
-rw-r--r--scripts/t/Dpkg_Control/bogus-armor-double.dsc13
-rw-r--r--scripts/t/Dpkg_Control/bogus-armor-formfeed.dsc19
-rw-r--r--scripts/t/Dpkg_Control/bogus-armor-inline.dsc9
-rw-r--r--scripts/t/Dpkg_Control/bogus-armor-nested.dsc15
-rw-r--r--scripts/t/Dpkg_Control/bogus-armor-no-sig.dsc4
-rw-r--r--scripts/t/Dpkg_Control/bogus-armor-spaces.dsc18
-rw-r--r--scripts/t/Dpkg_Control/bogus-armor-trail.dsc14
-rw-r--r--scripts/t/Dpkg_Control/bogus-unsigned.dsc5
-rw-r--r--scripts/t/Dpkg_Control/control-130
-rw-r--r--scripts/t/Dpkg_Control_Fields.t540
-rw-r--r--scripts/t/Dpkg_Control_Tests.t71
-rw-r--r--scripts/t/Dpkg_Control_Tests/tests-missing-fields7
-rw-r--r--scripts/t/Dpkg_Control_Tests/tests-plain-text6
-rw-r--r--scripts/t/Dpkg_Control_Tests/tests-valid18
-rw-r--r--scripts/t/Dpkg_Deps.t363
-rw-r--r--scripts/t/Dpkg_Dist_Files.t216
-rw-r--r--scripts/t/Dpkg_Dist_Files/files-byhand5
-rw-r--r--scripts/t/Dpkg_Dist_Files/files-fragment-a1
-rw-r--r--scripts/t/Dpkg_Dist_Files/files-fragment-b1
-rw-r--r--scripts/t/Dpkg_ErrorHandling.t27
-rw-r--r--scripts/t/Dpkg_Exit.t68
-rw-r--r--scripts/t/Dpkg_File.t80
-rw-r--r--scripts/t/Dpkg_File/append-me3
-rw-r--r--scripts/t/Dpkg_File/dump-partial2
-rw-r--r--scripts/t/Dpkg_File/slurp-me3
-rw-r--r--scripts/t/Dpkg_Getopt.t40
-rw-r--r--scripts/t/Dpkg_Gettext.t27
-rw-r--r--scripts/t/Dpkg_IPC.t71
-rw-r--r--scripts/t/Dpkg_Index.t27
-rw-r--r--scripts/t/Dpkg_Interface_Storable.t27
-rw-r--r--scripts/t/Dpkg_Lock.t27
-rw-r--r--scripts/t/Dpkg_OpenPGP.t116
-rw-r--r--scripts/t/Dpkg_OpenPGP/dpkg-test-pub.asc24
-rw-r--r--scripts/t/Dpkg_OpenPGP/dpkg-test-sec.asc28
-rw-r--r--scripts/t/Dpkg_OpenPGP/sign-file5
-rw-r--r--scripts/t/Dpkg_OpenPGP/sign-file-inline.asc16
-rw-r--r--scripts/t/Dpkg_OpenPGP/sign-file-inline.sigbin0 -> 382 bytes
-rw-r--r--scripts/t/Dpkg_OpenPGP/sign-file.asc8
-rw-r--r--scripts/t/Dpkg_OpenPGP/sign-file.sigbin0 -> 191 bytes
-rw-r--r--scripts/t/Dpkg_OpenPGP_KeyHandle.t92
-rw-r--r--scripts/t/Dpkg_Package.t31
-rw-r--r--scripts/t/Dpkg_Path.t237
-rw-r--r--scripts/t/Dpkg_Shlibs.t786
-rw-r--r--scripts/t/Dpkg_Shlibs/basictags.c63
-rw-r--r--scripts/t/Dpkg_Shlibs/basictags.symbols15
-rw-r--r--scripts/t/Dpkg_Shlibs/ld.so.conf9
-rw-r--r--scripts/t/Dpkg_Shlibs/ld.so.conf.d/inf_recurse.conf1
-rw-r--r--scripts/t/Dpkg_Shlibs/ld.so.conf.d/normal.conf1
-rw-r--r--scripts/t/Dpkg_Shlibs/ld.so.conf.d/recursive.conf1
-rw-r--r--scripts/t/Dpkg_Shlibs/ld.so.conf_21
-rw-r--r--scripts/t/Dpkg_Shlibs/objdump.basictags-amd6478
-rw-r--r--scripts/t/Dpkg_Shlibs/objdump.basictags-i38680
-rw-r--r--scripts/t/Dpkg_Shlibs/objdump.basictags-mips79
-rw-r--r--scripts/t/Dpkg_Shlibs/objdump.dbd-pg309
-rw-r--r--scripts/t/Dpkg_Shlibs/objdump.glib-ia64350
-rw-r--r--scripts/t/Dpkg_Shlibs/objdump.internal15
-rw-r--r--scripts/t/Dpkg_Shlibs/objdump.libc6-2.32276
-rw-r--r--scripts/t/Dpkg_Shlibs/objdump.libc6-2.62345
-rw-r--r--scripts/t/Dpkg_Shlibs/objdump.ls536
-rw-r--r--scripts/t/Dpkg_Shlibs/objdump.patterns235
-rw-r--r--scripts/t/Dpkg_Shlibs/objdump.space8
-rw-r--r--scripts/t/Dpkg_Shlibs/objdump.spacesyms119
-rw-r--r--scripts/t/Dpkg_Shlibs/patterns.cpp99
-rw-r--r--scripts/t/Dpkg_Shlibs/patterns.map9
-rw-r--r--scripts/t/Dpkg_Shlibs/patterns.symbols47
-rwxr-xr-xscripts/t/Dpkg_Shlibs/spacesyms-c-gen.pl37
-rwxr-xr-xscripts/t/Dpkg_Shlibs/spacesyms-o-map.pl25
-rw-r--r--scripts/t/Dpkg_Shlibs/spacesyms.map7
-rw-r--r--scripts/t/Dpkg_Shlibs/symbols.fake-13
-rw-r--r--scripts/t/Dpkg_Shlibs/symbols.fake-29
-rw-r--r--scripts/t/Dpkg_Shlibs/symbols.fake-35
-rw-r--r--scripts/t/Dpkg_Shlibs/symbols.include-19
-rw-r--r--scripts/t/Dpkg_Shlibs/symbols.include-23
-rw-r--r--scripts/t/Dpkg_Shlibs/symbols.include-35
-rw-r--r--scripts/t/Dpkg_Shlibs/symbols.internal4
-rw-r--r--scripts/t/Dpkg_Shlibs/symbols.internal-allow3
-rw-r--r--scripts/t/Dpkg_Shlibs/symbols.internal-allow-groups4
-rw-r--r--scripts/t/Dpkg_Shlibs/symbols.internal-filter3
-rw-r--r--scripts/t/Dpkg_Shlibs_Cppfilt.t90
-rw-r--r--scripts/t/Dpkg_Source_Archive.t124
-rw-r--r--scripts/t/Dpkg_Source_Format.t65
-rw-r--r--scripts/t/Dpkg_Source_Functions.t27
-rw-r--r--scripts/t/Dpkg_Source_Package.t64
-rw-r--r--scripts/t/Dpkg_Source_Package/package_1.0.orig.tar0
-rw-r--r--scripts/t/Dpkg_Source_Package/package_1.0.orig.tar.asc16
-rw-r--r--scripts/t/Dpkg_Source_Package/package_1.0.orig.tar.sigbin0 -> 566 bytes
-rw-r--r--scripts/t/Dpkg_Source_Patch.t74
-rw-r--r--scripts/t/Dpkg_Source_Patch/c-style.patch4
-rw-r--r--scripts/t/Dpkg_Source_Patch/ghost-hunk.patch7
-rw-r--r--scripts/t/Dpkg_Source_Patch/indent-header.patch9
-rw-r--r--scripts/t/Dpkg_Source_Patch/index-+++.patch4
-rw-r--r--scripts/t/Dpkg_Source_Patch/index-alone.patch3
-rw-r--r--scripts/t/Dpkg_Source_Patch/index-inert.patch8
-rw-r--r--scripts/t/Dpkg_Source_Patch/partial.patch3
-rw-r--r--scripts/t/Dpkg_Source_Quilt.t38
-rw-r--r--scripts/t/Dpkg_Source_Quilt/parse/debian/patches/series9
-rw-r--r--scripts/t/Dpkg_Substvars.t192
-rw-r--r--scripts/t/Dpkg_Substvars/substvars110
-rw-r--r--scripts/t/Dpkg_Substvars/substvars27
-rw-r--r--scripts/t/Dpkg_Vars.t38
-rw-r--r--scripts/t/Dpkg_Vendor.t40
-rw-r--r--scripts/t/Dpkg_Version.t214
-rw-r--r--scripts/t/dpkg_buildpackage.t221
-rw-r--r--scripts/t/dpkg_buildpackage/dpkgdb/status0
-rw-r--r--scripts/t/dpkg_buildpackage/test-source_0.dsc15
-rw-r--r--scripts/t/dpkg_buildpackage/test-source_0_all.changes26
-rw-r--r--scripts/t/dpkg_buildpackage/test-source_0_any.changes26
-rw-r--r--scripts/t/dpkg_buildpackage/test-source_0_binary.changes30
-rw-r--r--scripts/t/dpkg_buildpackage/test-source_0_full.changes36
-rw-r--r--scripts/t/dpkg_buildpackage/test-source_0_source.changes26
-rw-r--r--scripts/t/dpkg_source.t186
-rw-r--r--scripts/t/dpkg_source/testsuite_0.dsc16
-rw-r--r--scripts/t/dpkg_source/testsuite_1.dsc16
-rw-r--r--scripts/t/dpkg_source/testsuite_2.dsc17
-rw-r--r--scripts/t/dpkg_source/testsuite_3.dsc15
-rw-r--r--scripts/t/merge_changelogs.t67
-rw-r--r--scripts/t/merge_changelogs/ch-a94
-rw-r--r--scripts/t/merge_changelogs/ch-b89
-rw-r--r--scripts/t/merge_changelogs/ch-badver-a5
-rw-r--r--scripts/t/merge_changelogs/ch-badver-b11
-rw-r--r--scripts/t/merge_changelogs/ch-badver-merged11
-rw-r--r--scripts/t/merge_changelogs/ch-badver-old5
-rw-r--r--scripts/t/merge_changelogs/ch-merged115
-rw-r--r--scripts/t/merge_changelogs/ch-merged-basic138
-rw-r--r--scripts/t/merge_changelogs/ch-merged-pr108
-rw-r--r--scripts/t/merge_changelogs/ch-merged-pr-basic140
-rw-r--r--scripts/t/merge_changelogs/ch-old87
-rw-r--r--scripts/t/merge_changelogs/ch-unreleased-a12
-rw-r--r--scripts/t/merge_changelogs/ch-unreleased-b12
-rw-r--r--scripts/t/merge_changelogs/ch-unreleased-merged24
-rw-r--r--scripts/t/merge_changelogs/ch-unreleased-merged-basic25
-rw-r--r--scripts/t/merge_changelogs/ch-unreleased-old5
-rw-r--r--scripts/t/mk.t154
-rw-r--r--scripts/t/mk/architecture.mk36
-rw-r--r--scripts/t/mk/buildflags.mk16
-rw-r--r--scripts/t/mk/buildopts.mk4
-rw-r--r--scripts/t/mk/buildtools.mk35
-rw-r--r--scripts/t/mk/debian/changelog5
-rw-r--r--scripts/t/mk/pkg-info.mk11
-rw-r--r--scripts/t/mk/vendor-v0.mk6
-rw-r--r--scripts/t/mk/vendor-v1.mk6
-rw-r--r--scripts/t/mk/vendor.mk6
-rwxr-xr-xscripts/t/mock-bin/dpkg20
-rwxr-xr-xscripts/t/mock-bin/gcc20
-rw-r--r--scripts/t/origins/debian3
-rw-r--r--scripts/t/origins/default3
-rw-r--r--scripts/t/origins/devuan4
-rw-r--r--scripts/t/origins/gnewsense4
-rw-r--r--scripts/t/origins/ubuntu4
322 files changed, 100226 insertions, 0 deletions
diff --git a/scripts/Build.PL.in b/scripts/Build.PL.in
new file mode 100644
index 0000000..17a0d84
--- /dev/null
+++ b/scripts/Build.PL.in
@@ -0,0 +1,171 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+eval {
+ require Module::Build;
+} or do {
+ die "error: Missing Module::Build module, cannot proceed.\n";
+};
+
+if (-e 'Build.PL.in') {
+ die "error: This is an in-tree build, not a proper perl distribution.\n" .
+ "To create one please configure normally and then run 'make dist'.\n";
+}
+
+my $class = Module::Build->subclass(
+ class => 'Module::Build::Dpkg',
+ code => q{
+ require Config;
+ require IPC::Cmd;
+
+ sub find_command {
+ my (@alts) = @_;
+
+ foreach my $cmd (@alts) {
+ my $pathname = IPC::Cmd::can_run($cmd);
+ return $pathname if defined $pathname;
+ }
+ die "error: cannot find any of @alts\n";
+ }
+
+ sub subst {
+ my ($self, $file) = @_;
+ my $path = $self->install_path();
+ my $version = $self->dist_version();
+
+ my $progmake = find_command(qw(gmake make));
+ my $progpatch = find_command(qw(gpatch patch));
+ my $progtar = find_command(qw(gtar tar));
+
+ unlink "blib/$file"
+ or die "error: cannot remove blib/$file: $!\n";
+ open my $fhin, '<', $file
+ or die "error: cannot open $file: $!\n";
+ open my $fhout, '>', "blib/$file"
+ or die "error: cannot create blib/$file: $!\n";
+ while (<$fhin>) {
+ s{our \$PROGVERSION = .*;}{our \$PROGVERSION = '$version';};
+ s{our \$PROGMAKE = .*;}{our \$PROGMAKE = '$progmake';};
+ s{our \$PROGPATCH = .*;}{our \$PROGPATCH = '$progpatch';};
+ s{our \$PROGTAR = .*;}{our \$PROGTAR = '$progtar';};
+ s{our \$CONFDIR = .*;}{our \$CONFDIR = '$path->{conf}';};
+ s{our \$DATADIR = .*;}{our \$DATADIR = '$path->{data}';};
+ s{our \$ADMINDIR = .*;}{our \$ADMINDIR = '$path->{admin}';};
+ s{our \$LIBDIR = .*;}{our \$LIBDIR = '$path->{libexec}';};
+ print { $fhout } $_;
+ }
+ close $fhout or die "error: cannot write blib/$file: $!\n";
+ close $fhin;
+ }
+
+ sub ACTION_build {
+ my $self = shift;
+
+ $self->SUPER::ACTION_build;
+ $self->subst('lib/Dpkg.pm');
+ }
+ sub ACTION_test {
+ my $self = shift;
+
+ local $ENV{LANG} = 'C';
+ local $ENV{LC_ALL} = 'C';
+ local $ENV{PERL} = $Config::Config{perlpath} || $^X || 'perl';
+ local $ENV{DPKG_TEST_MODE} = 'cpan';
+ local $ENV{DPKG_DATADIR} = 'data';
+ local $ENV{DPKG_ORIGINS_DIR} = 't/origins';
+ # To avoid requiring dpkg(1).
+ local $ENV{DEB_BUILD_ARCH} = 'amd64';
+ $self->SUPER::ACTION_test;
+ }
+ },
+);
+
+my $build = $class->new(
+ dist_name => '@PACKAGE_CPAN_NAME@',
+ dist_abstract => 'Debian Package Manager Perl modules',
+ dist_version => '@PACKAGE_VERSION@',
+ dist_author => '@PACKAGE_COPYRIGHT_HOLDER@ <@PACKAGE_BUGREPORT@>',
+ license => 'GPL_2',
+
+ release_status => @PACKAGE_DIST_IS_RELEASE@ ? 'stable' : 'testing',
+
+ # Set only to avoid warnings.
+ module_name => '@PACKAGE_CPAN_NAME@',
+
+ meta_merge => {
+ 'meta-spec' => {
+ version => 2,
+ },
+ prereqs => {
+ configure => {
+ recommends => {
+ 'Module::Signature' => 0,
+ },
+ },
+ test => {
+ recommends => {
+ 'Test::Pod' => 0,
+ 'Test::Strict' => 0,
+ },
+ },
+ develop => {
+ recommends => {
+ 'Test::MinimumVersion' => 0,
+ 'Test::Perl::Critic' => 0,
+ 'Test::Pod::Coverage' => 0,
+ 'Test::Spelling' => 0,
+ 'Test::Synopsis' => 0,
+ },
+ },
+ },
+ resources => {
+ homepage => '@PACKAGE_URL@',
+ repository => {
+ type => '@PACKAGE_VCS_TYPE@',
+ url => '@PACKAGE_VCS_URL@',
+ web => '@PACKAGE_VCS_WEB@',
+ },
+ bugtracker => {
+ web => '@PACKAGE_BUG_WEB@',
+ },
+ },
+ keywords => [ qw(dpkg debian perl) ],
+ },
+
+ sign => @PACKAGE_DIST_IS_RELEASE@,
+ dynamic_config => 0,
+
+ configure_requires => {
+ 'Module::Build' => '0.4004',
+ },
+ test_requires => {
+ 'TAP::Harness' => 0,
+ 'Test::More' => 0,
+ },
+ recommends => {
+ 'Algorithm::Merge' => 0,
+ 'File::FcntlLock' => 0,
+ 'Locale::gettext' => 0,
+
+ },
+ requires => {
+ 'perl' => '@PERL_MIN_VERSION@',
+ },
+
+ data_files => {
+ map { $_ => $_ } glob 'data/*'
+ },
+ install_path => {
+ conf => '/etc/dpkg',
+ data => '/usr/share/dpkg',
+ admin => '/var/lib/dpkg',
+ libexec => '/usr/lib/dpkg',
+ },
+);
+
+$build->add_build_element('data');
+$build->create_build_script();
+
+1;
diff --git a/scripts/Dpkg.pm b/scripts/Dpkg.pm
new file mode 100644
index 0000000..edb0d32
--- /dev/null
+++ b/scripts/Dpkg.pm
@@ -0,0 +1,307 @@
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg;
+
+=encoding utf8
+
+=head1 NAME
+
+Dpkg - module with core variables
+
+=head1 DESCRIPTION
+
+The Dpkg module provides a set of variables with information concerning
+this system installation.
+
+It is also the entry point to the Dpkg module hierarchy.
+
+=cut
+
+use strict;
+use warnings;
+
+our $VERSION = '2.00';
+our @EXPORT_OK = qw(
+ $PROGNAME
+ $PROGVERSION
+ $PROGMAKE
+ $PROGTAR
+ $PROGPATCH
+ $CONFDIR
+ $ADMINDIR
+ $LIBDIR
+ $DATADIR
+);
+
+use Exporter qw(import);
+
+=head1 VARIABLES
+
+=over 4
+
+=item $Dpkg::PROGNAME
+
+Contains the name of the current program.
+
+=item $Dpkg::PROGVERSION
+
+Contains the version of the dpkg suite.
+
+=item $Dpkg::PROGMAKE
+
+Contains the name of the system GNU make program.
+
+=item $Dpkg::PROGTAR
+
+Contains the name of the system GNU tar program.
+
+=item $Dpkg::PROGPATCH
+
+Contains the name of the system GNU patch program (or another implementation
+that is directory traversal resistant).
+
+=item $Dpkg::CONFDIR
+
+Contains the path to the dpkg system configuration directory.
+
+=item $Dpkg::ADMINDIR
+
+Contains the path to the dpkg database directory.
+
+=item $Dpkg::LIBDIR
+
+Contains the path to the dpkg methods and plugins directory.
+
+=item $Dpkg::DATADIR
+
+Contains the path to the dpkg architecture tables directory.
+
+=back
+
+=cut
+
+our ($PROGNAME) = $0 =~ m{(?:.*/)?([^/]*)};
+
+# The following lines are automatically fixed at install time
+our $PROGVERSION = '1.21.x';
+our $PROGMAKE = $ENV{DPKG_PROGMAKE} // 'make';
+our $PROGTAR = $ENV{DPKG_PROGTAR} // 'tar';
+our $PROGPATCH = $ENV{DPKG_PROGPATCH} // 'patch';
+
+our $CONFDIR = '/etc/dpkg';
+our $ADMINDIR = '/var/lib/dpkg';
+our $LIBDIR = '.';
+our $DATADIR = '../data';
+
+$DATADIR = $ENV{DPKG_DATADIR} if defined $ENV{DPKG_DATADIR};
+
+=head1 MODULES
+
+The following is the list of public modules within the Dpkg hierarchy. Only
+modules with versions 1.00 or higher, and only the interfaces documented in
+their POD are considered public.
+
+=over
+
+=item L<Dpkg>
+
+This module, core variables.
+
+=item L<Dpkg::Arch>
+
+Architecture handling functions.
+
+=item L<Dpkg::BuildFlags>
+
+Set, modify and query compilation build flags.
+
+=item L<Dpkg::BuildInfo>
+
+Build information functions.
+
+=item L<Dpkg::BuildOptions>
+
+Parse and manipulate B<DEB_BUILD_OPTIONS>.
+
+=item L<Dpkg::BuildProfiles>
+
+Parse and manipulate build profiles.
+
+=item L<Dpkg::Changelog>
+
+Parse changelogs.
+
+=item L<Dpkg::Changelog::Entry>
+
+Represents a changelog entry.
+
+=item L<Dpkg::Changelog::Parse>
+
+Generic changelog parser for F<dpkg-parsechangelog>.
+
+=item L<Dpkg::Checksums>
+
+Generate and parse checksums.
+
+=item L<Dpkg::Compression>
+
+Simple database of available compression methods.
+
+=item L<Dpkg::Compression::FileHandle>
+
+Transparently compress and decompress files.
+
+=item L<Dpkg::Compression::Process>
+
+Wrapper around compression tools.
+
+=item L<Dpkg::Conf>
+
+Parse F<dpkg> configuration files.
+
+=item L<Dpkg::Control>
+
+Parse and manipulate Debian control information (F<.dsc>, F<.changes>,
+F<Packages>/F<Sources> entries, etc.).
+
+=item L<Dpkg::Control::Changelog>
+
+Represent fields output by F<dpkg-parsechangelog>.
+
+=item L<Dpkg::Control::Fields>
+
+Manage (list of known) control fields.
+
+=item L<Dpkg::Control::Hash>
+
+Parse and manipulate a stanza of deb822 fields.
+
+=item L<Dpkg::Control::Info>
+
+Parse files like F<debian/control>.
+
+=item L<Dpkg::Control::Tests>
+
+Parse files like F<debian/tests/control>.
+
+=item L<Dpkg::Control::Tests::Entry>
+
+Represents a F<debian/tests/control> stanza.
+
+=item L<Dpkg::Deps>
+
+Parse and manipulate dependencies.
+
+=item L<Dpkg::Deps::Simple>
+
+Represents a single dependency statement.
+
+=item L<Dpkg::Deps::Multiple>
+
+Base module to represent multiple dependencies.
+
+=item L<Dpkg::Deps::Union>
+
+List of unrelated dependencies.
+
+=item L<Dpkg::Deps::AND>
+
+List of AND dependencies.
+
+=item L<Dpkg::Deps::OR>
+
+List of OR dependencies.
+
+=item L<Dpkg::Deps::KnownFacts>
+
+List of installed and virtual packages.
+
+=item L<Dpkg::Exit>
+
+Push, pop and run exit handlers.
+
+=item L<Dpkg::Gettext>
+
+Wrapper around L<Locale::gettext>.
+
+=item L<Dpkg::IPC>
+
+Spawn sub-processes and feed/retrieve data.
+
+=item L<Dpkg::Index>
+
+Collections of L<Dpkg::Control> (F<Packages>/F<Sources> files for example).
+
+=item L<Dpkg::Interface::Storable>
+
+Base object serializer.
+
+=item L<Dpkg::Path>
+
+Common path handling functions.
+
+=item L<Dpkg::Source::Format>
+
+Parse and manipulate debian/source/format files.
+
+=item L<Dpkg::Source::Package>
+
+Extract Debian source packages.
+
+=item L<Dpkg::Substvars>
+
+Substitute variables in strings.
+
+=item L<Dpkg::Vendor>
+
+Identify current distribution vendor.
+
+=item L<Dpkg::Version>
+
+Parse and manipulate Debian package versions.
+
+=back
+
+=head1 CHANGES
+
+=head2 Version 2.00 (dpkg 1.20.0)
+
+Remove variables: $version, $progname, $admindir, $dpkglibdir and $pkgdatadir.
+
+=head2 Version 1.03 (dpkg 1.18.24)
+
+New variable: $PROGPATCH.
+
+=head2 Version 1.02 (dpkg 1.18.11)
+
+New variable: $PROGTAR, $PROGMAKE.
+
+=head2 Version 1.01 (dpkg 1.17.0)
+
+New variables: $PROGNAME, $PROGVERSION, $CONFDIR, $ADMINDIR, $LIBDIR and
+$DATADIR.
+
+Deprecated variables: $version, $admindir, $dpkglibdir and $pkgdatadir.
+
+=head2 Version 1.00 (dpkg 1.15.6)
+
+Mark the module as public.
+
+=head1 LICENSE
+
+See the header comment on each module for their particular license.
+
+=cut
+
+1;
diff --git a/scripts/Dpkg/Arch.pm b/scripts/Dpkg/Arch.pm
new file mode 100644
index 0000000..3d8d095
--- /dev/null
+++ b/scripts/Dpkg/Arch.pm
@@ -0,0 +1,707 @@
+# Copyright © 2006-2015 Guillem Jover <guillem@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::Arch;
+
+=encoding utf8
+
+=head1 NAME
+
+Dpkg::Arch - handle architectures
+
+=head1 DESCRIPTION
+
+The Dpkg::Arch module provides functions to handle Debian architectures,
+wildcards, and mapping from and to GNU triplets.
+
+No symbols are exported by default. The :all tag can be used to import all
+symbols. The :getters, :parsers, :mappers and :operators tags can be used
+to import specific symbol subsets.
+
+=cut
+
+use strict;
+use warnings;
+use feature qw(state);
+
+our $VERSION = '1.03';
+our @EXPORT_OK = qw(
+ get_raw_build_arch
+ get_raw_host_arch
+ get_build_arch
+ get_host_arch
+ get_host_gnu_type
+ get_valid_arches
+ debarch_eq
+ debarch_is
+ debarch_is_wildcard
+ debarch_is_illegal
+ debarch_is_concerned
+ debarch_to_abiattrs
+ debarch_to_cpubits
+ debarch_to_gnutriplet
+ debarch_to_debtuple
+ debarch_to_multiarch
+ debarch_list_parse
+ debtuple_to_debarch
+ debtuple_to_gnutriplet
+ gnutriplet_to_debarch
+ gnutriplet_to_debtuple
+ gnutriplet_to_multiarch
+);
+our %EXPORT_TAGS = (
+ all => [ @EXPORT_OK ],
+ getters => [ qw(
+ get_raw_build_arch
+ get_raw_host_arch
+ get_build_arch
+ get_host_arch
+ get_host_gnu_type
+ get_valid_arches
+ ) ],
+ parsers => [ qw(
+ debarch_list_parse
+ ) ],
+ mappers => [ qw(
+ debarch_to_abiattrs
+ debarch_to_gnutriplet
+ debarch_to_debtuple
+ debarch_to_multiarch
+ debtuple_to_debarch
+ debtuple_to_gnutriplet
+ gnutriplet_to_debarch
+ gnutriplet_to_debtuple
+ gnutriplet_to_multiarch
+ ) ],
+ operators => [ qw(
+ debarch_eq
+ debarch_is
+ debarch_is_wildcard
+ debarch_is_illegal
+ debarch_is_concerned
+ ) ],
+);
+
+
+use Exporter qw(import);
+use List::Util qw(any);
+
+use Dpkg ();
+use Dpkg::Gettext;
+use Dpkg::ErrorHandling;
+use Dpkg::BuildEnv;
+
+my (@cpu, @os);
+my (%cputable, %ostable);
+my (%cputable_re, %ostable_re);
+my (%cpubits, %cpuendian);
+my %abibits;
+
+my %debtuple_to_debarch;
+my %debarch_to_debtuple;
+
+=head1 FUNCTIONS
+
+=over 4
+
+=item $arch = get_raw_build_arch()
+
+Get the raw build Debian architecture, without taking into account variables
+from the environment.
+
+=cut
+
+sub get_raw_build_arch()
+{
+ state $build_arch;
+
+ return $build_arch if defined $build_arch;
+
+ # Note: We *always* require an installed dpkg when inferring the
+ # build architecture. The bootstrapping case is handled by
+ # dpkg-architecture itself, by avoiding computing the DEB_BUILD_
+ # variables when they are not requested.
+
+ ## no critic (TestingAndDebugging::ProhibitNoWarnings)
+ no warnings qw(exec);
+ $build_arch = qx(dpkg --print-architecture);
+ syserr('dpkg --print-architecture failed') if $? >> 8;
+
+ chomp $build_arch;
+ return $build_arch;
+}
+
+=item $arch = get_build_arch()
+
+Get the build Debian architecture, using DEB_BUILD_ARCH from the environment
+if available.
+
+=cut
+
+sub get_build_arch()
+{
+ return Dpkg::BuildEnv::get('DEB_BUILD_ARCH') || get_raw_build_arch();
+}
+
+{
+ my %cc_host_gnu_type;
+
+ sub get_host_gnu_type()
+ {
+ my $CC = $ENV{CC} || 'gcc';
+
+ return $cc_host_gnu_type{$CC} if defined $cc_host_gnu_type{$CC};
+
+ ## no critic (TestingAndDebugging::ProhibitNoWarnings)
+ no warnings qw(exec);
+ $cc_host_gnu_type{$CC} = qx($CC -dumpmachine);
+ if ($? >> 8) {
+ $cc_host_gnu_type{$CC} = '';
+ } else {
+ chomp $cc_host_gnu_type{$CC};
+ }
+
+ return $cc_host_gnu_type{$CC};
+ }
+
+ sub set_host_gnu_type
+ {
+ my ($host_gnu_type) = @_;
+ my $CC = $ENV{CC} || 'gcc';
+
+ $cc_host_gnu_type{$CC} = $host_gnu_type;
+ }
+}
+
+=item $arch = get_raw_host_arch()
+
+Get the raw host Debian architecture, without taking into account variables
+from the environment.
+
+=cut
+
+sub get_raw_host_arch()
+{
+ state $host_arch;
+
+ return $host_arch if defined $host_arch;
+
+ my $host_gnu_type = get_host_gnu_type();
+
+ if ($host_gnu_type eq '') {
+ warning(g_('cannot determine CC system type, falling back to ' .
+ 'default (native compilation)'));
+ } else {
+ my (@host_archtuple) = gnutriplet_to_debtuple($host_gnu_type);
+ $host_arch = debtuple_to_debarch(@host_archtuple);
+
+ if (defined $host_arch) {
+ $host_gnu_type = debtuple_to_gnutriplet(@host_archtuple);
+ } else {
+ warning(g_('unknown CC system type %s, falling back to ' .
+ 'default (native compilation)'), $host_gnu_type);
+ $host_gnu_type = '';
+ }
+ set_host_gnu_type($host_gnu_type);
+ }
+
+ if (!defined($host_arch)) {
+ # Switch to native compilation.
+ $host_arch = get_raw_build_arch();
+ }
+
+ return $host_arch;
+}
+
+=item $arch = get_host_arch()
+
+Get the host Debian architecture, using DEB_HOST_ARCH from the environment
+if available.
+
+=cut
+
+sub get_host_arch()
+{
+ return Dpkg::BuildEnv::get('DEB_HOST_ARCH') || get_raw_host_arch();
+}
+
+=item @arch_list = get_valid_arches()
+
+Get an array with all currently known Debian architectures.
+
+=cut
+
+sub get_valid_arches()
+{
+ _load_cputable();
+ _load_ostable();
+
+ my @arches;
+
+ foreach my $os (@os) {
+ foreach my $cpu (@cpu) {
+ my $arch = debtuple_to_debarch(split(/-/, $os, 3), $cpu);
+ push @arches, $arch if defined($arch);
+ }
+ }
+
+ return @arches;
+}
+
+my %table_loaded;
+sub _load_table
+{
+ my ($table, $loader) = @_;
+
+ return if $table_loaded{$table};
+
+ local $_;
+ local $/ = "\n";
+
+ open my $table_fh, '<', "$Dpkg::DATADIR/$table"
+ or syserr(g_('cannot open %s'), $table);
+ while (<$table_fh>) {
+ $loader->($_);
+ }
+ close $table_fh;
+
+ $table_loaded{$table} = 1;
+}
+
+sub _load_cputable
+{
+ _load_table('cputable', sub {
+ if (m/^(?!\#)(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)/) {
+ $cputable{$1} = $2;
+ $cputable_re{$1} = $3;
+ $cpubits{$1} = $4;
+ $cpuendian{$1} = $5;
+ push @cpu, $1;
+ }
+ });
+}
+
+sub _load_ostable
+{
+ _load_table('ostable', sub {
+ if (m/^(?!\#)(\S+)\s+(\S+)\s+(\S+)/) {
+ $ostable{$1} = $2;
+ $ostable_re{$1} = $3;
+ push @os, $1;
+ }
+ });
+}
+
+sub _load_abitable()
+{
+ _load_table('abitable', sub {
+ if (m/^(?!\#)(\S+)\s+(\S+)/) {
+ $abibits{$1} = $2;
+ }
+ });
+}
+
+sub _load_tupletable()
+{
+ _load_cputable();
+
+ _load_table('tupletable', sub {
+ if (m/^(?!\#)(\S+)\s+(\S+)/) {
+ my $debtuple = $1;
+ my $debarch = $2;
+
+ if ($debtuple =~ /<cpu>/) {
+ foreach my $_cpu (@cpu) {
+ (my $dt = $debtuple) =~ s/<cpu>/$_cpu/;
+ (my $da = $debarch) =~ s/<cpu>/$_cpu/;
+
+ next if exists $debarch_to_debtuple{$da}
+ or exists $debtuple_to_debarch{$dt};
+
+ $debarch_to_debtuple{$da} = $dt;
+ $debtuple_to_debarch{$dt} = $da;
+ }
+ } else {
+ $debarch_to_debtuple{$2} = $1;
+ $debtuple_to_debarch{$1} = $2;
+ }
+ }
+ });
+}
+
+sub debtuple_to_gnutriplet(@)
+{
+ my ($abi, $libc, $os, $cpu) = @_;
+
+ _load_cputable();
+ _load_ostable();
+
+ return unless
+ defined $abi && defined $libc && defined $os && defined $cpu &&
+ exists $cputable{$cpu} && exists $ostable{"$abi-$libc-$os"};
+ return join('-', $cputable{$cpu}, $ostable{"$abi-$libc-$os"});
+}
+
+sub gnutriplet_to_debtuple($)
+{
+ my $gnu = shift;
+ return unless defined($gnu);
+ my ($gnu_cpu, $gnu_os) = split(/-/, $gnu, 2);
+ return unless defined($gnu_cpu) && defined($gnu_os);
+
+ _load_cputable();
+ _load_ostable();
+
+ my ($os, $cpu);
+
+ foreach my $_cpu (@cpu) {
+ if ($gnu_cpu =~ /^$cputable_re{$_cpu}$/) {
+ $cpu = $_cpu;
+ last;
+ }
+ }
+
+ foreach my $_os (@os) {
+ if ($gnu_os =~ /^(.*-)?$ostable_re{$_os}$/) {
+ $os = $_os;
+ last;
+ }
+ }
+
+ return if !defined($cpu) || !defined($os);
+ return (split(/-/, $os, 3), $cpu);
+}
+
+=item $multiarch = gnutriplet_to_multiarch($gnutriplet)
+
+Map a GNU triplet into a Debian multiarch triplet.
+
+=cut
+
+sub gnutriplet_to_multiarch($)
+{
+ my $gnu = shift;
+ my ($cpu, $cdr) = split(/-/, $gnu, 2);
+
+ if ($cpu =~ /^i[4567]86$/) {
+ return "i386-$cdr";
+ } else {
+ return $gnu;
+ }
+}
+
+=item $multiarch = debarch_to_multiarch($arch)
+
+Map a Debian architecture into a Debian multiarch triplet.
+
+=cut
+
+sub debarch_to_multiarch($)
+{
+ my $arch = shift;
+
+ return gnutriplet_to_multiarch(debarch_to_gnutriplet($arch));
+}
+
+sub debtuple_to_debarch(@)
+{
+ my ($abi, $libc, $os, $cpu) = @_;
+
+ _load_tupletable();
+
+ if (!defined $abi || !defined $libc || !defined $os || !defined $cpu) {
+ return;
+ } elsif (exists $debtuple_to_debarch{"$abi-$libc-$os-$cpu"}) {
+ return $debtuple_to_debarch{"$abi-$libc-$os-$cpu"};
+ } else {
+ return;
+ }
+}
+
+sub debarch_to_debtuple($)
+{
+ my $arch = shift;
+
+ return if not defined $arch;
+
+ _load_tupletable();
+
+ if ($arch =~ /^linux-([^-]*)/) {
+ # XXX: Might disappear in the future, not sure yet.
+ $arch = $1;
+ }
+
+ my $tuple = $debarch_to_debtuple{$arch};
+
+ if (defined($tuple)) {
+ my @tuple = split /-/, $tuple, 4;
+ return @tuple if wantarray;
+ return {
+ abi => $tuple[0],
+ libc => $tuple[1],
+ os => $tuple[2],
+ cpu => $tuple[3],
+ };
+ } else {
+ return;
+ }
+}
+
+=item $gnutriplet = debarch_to_gnutriplet($arch)
+
+Map a Debian architecture into a GNU triplet.
+
+=cut
+
+sub debarch_to_gnutriplet($)
+{
+ my $arch = shift;
+
+ return debtuple_to_gnutriplet(debarch_to_debtuple($arch));
+}
+
+=item $arch = gnutriplet_to_debarch($gnutriplet)
+
+Map a GNU triplet into a Debian architecture.
+
+=cut
+
+sub gnutriplet_to_debarch($)
+{
+ my $gnu = shift;
+
+ return debtuple_to_debarch(gnutriplet_to_debtuple($gnu));
+}
+
+sub debwildcard_to_debtuple($)
+{
+ my $arch = shift;
+ my @tuple = split /-/, $arch, 4;
+
+ if (any { $_ eq 'any' } @tuple) {
+ if (scalar @tuple == 4) {
+ return @tuple;
+ } elsif (scalar @tuple == 3) {
+ return ('any', @tuple);
+ } elsif (scalar @tuple == 2) {
+ return ('any', 'any', @tuple);
+ } else {
+ return ('any', 'any', 'any', 'any');
+ }
+ } else {
+ return debarch_to_debtuple($arch);
+ }
+}
+
+sub debarch_to_abiattrs($)
+{
+ my $arch = shift;
+ my ($abi, $libc, $os, $cpu) = debarch_to_debtuple($arch);
+
+ if (defined($cpu)) {
+ _load_abitable();
+
+ return ($abibits{$abi} // $cpubits{$cpu}, $cpuendian{$cpu});
+ } else {
+ return;
+ }
+}
+
+sub debarch_to_cpubits($)
+{
+ my $arch = shift;
+ my (undef, undef, undef, $cpu) = debarch_to_debtuple($arch);
+
+ if (defined $cpu) {
+ return $cpubits{$cpu};
+ } else {
+ return;
+ }
+}
+
+=item $bool = debarch_eq($arch_a, $arch_b)
+
+Evaluate the equality of a Debian architecture, by comparing with another
+Debian architecture. No wildcard matching is performed.
+
+=cut
+
+sub debarch_eq($$)
+{
+ my ($a, $b) = @_;
+
+ return 1 if ($a eq $b);
+
+ my @a = debarch_to_debtuple($a);
+ my @b = debarch_to_debtuple($b);
+
+ return 0 if scalar @a != 4 or scalar @b != 4;
+
+ return $a[0] eq $b[0] && $a[1] eq $b[1] && $a[2] eq $b[2] && $a[3] eq $b[3];
+}
+
+=item $bool = debarch_is($arch, $arch_wildcard)
+
+Evaluate the identity of a Debian architecture, by matching with an
+architecture wildcard.
+
+=cut
+
+sub debarch_is($$)
+{
+ my ($real, $alias) = @_;
+
+ return 1 if ($alias eq $real or $alias eq 'any');
+
+ my @real = debarch_to_debtuple($real);
+ my @alias = debwildcard_to_debtuple($alias);
+
+ return 0 if scalar @real != 4 or scalar @alias != 4;
+
+ if (($alias[0] eq $real[0] || $alias[0] eq 'any') &&
+ ($alias[1] eq $real[1] || $alias[1] eq 'any') &&
+ ($alias[2] eq $real[2] || $alias[2] eq 'any') &&
+ ($alias[3] eq $real[3] || $alias[3] eq 'any')) {
+ return 1;
+ }
+
+ return 0;
+}
+
+=item $bool = debarch_is_wildcard($arch)
+
+Evaluate whether a Debian architecture is an architecture wildcard.
+
+=cut
+
+sub debarch_is_wildcard($)
+{
+ my $arch = shift;
+
+ return 0 if $arch eq 'all';
+
+ my @tuple = debwildcard_to_debtuple($arch);
+
+ return 0 if scalar @tuple != 4;
+ return 1 if any { $_ eq 'any' } @tuple;
+ return 0;
+}
+
+=item $bool = debarch_is_illegal($arch, %options)
+
+Validate an architecture name.
+
+If the "positive" option is set to a true value, only positive architectures
+will be accepted, otherwise negated architectures are allowed.
+
+=cut
+
+sub debarch_is_illegal
+{
+ my ($arch, %opts) = @_;
+ my $arch_re = qr/[a-zA-Z0-9][a-zA-Z0-9-]*/;
+
+ if ($opts{positive}) {
+ return $arch !~ m/^$arch_re$/;
+ } else {
+ return $arch !~ m/^!?$arch_re$/;
+ }
+}
+
+=item $bool = debarch_is_concerned($arch, @arches)
+
+Evaluate whether a Debian architecture applies to the list of architecture
+restrictions, as usually found in dependencies inside square brackets.
+
+=cut
+
+sub debarch_is_concerned
+{
+ my ($host_arch, @arches) = @_;
+
+ my $seen_arch = 0;
+ foreach my $arch (@arches) {
+ $arch = lc $arch;
+
+ if ($arch =~ /^!/) {
+ my $not_arch = $arch;
+ $not_arch =~ s/^!//;
+
+ if (debarch_is($host_arch, $not_arch)) {
+ $seen_arch = 0;
+ last;
+ } else {
+ # !arch includes by default all other arches
+ # unless they also appear in a !otherarch
+ $seen_arch = 1;
+ }
+ } elsif (debarch_is($host_arch, $arch)) {
+ $seen_arch = 1;
+ last;
+ }
+ }
+ return $seen_arch;
+}
+
+=item @array = debarch_list_parse($arch_list, %options)
+
+Parse an architecture list.
+
+If the "positive" option is set to a true value, only positive architectures
+will be accepted, otherwise negated architectures are allowed.
+
+=cut
+
+sub debarch_list_parse
+{
+ my ($arch_list, %opts) = @_;
+ my @arch_list = split ' ', $arch_list;
+
+ foreach my $arch (@arch_list) {
+ if (debarch_is_illegal($arch, %opts)) {
+ error(g_("'%s' is not a legal architecture in list '%s'"),
+ $arch, $arch_list);
+ }
+ }
+
+ return @arch_list;
+}
+
+1;
+
+=back
+
+=head1 CHANGES
+
+=head2 Version 1.03 (dpkg 1.19.1)
+
+New argument: Accept a "positive" option in debarch_is_illegal() and
+debarch_list_parse().
+
+=head2 Version 1.02 (dpkg 1.18.19)
+
+New import tags: ":all", ":getters", ":parsers", ":mappers", ":operators".
+
+=head2 Version 1.01 (dpkg 1.18.5)
+
+New functions: debarch_is_illegal(), debarch_list_parse().
+
+=head2 Version 1.00 (dpkg 1.18.2)
+
+Mark the module as public.
+
+=head1 SEE ALSO
+
+dpkg-architecture(1).
diff --git a/scripts/Dpkg/Build/Info.pm b/scripts/Dpkg/Build/Info.pm
new file mode 100644
index 0000000..d789a36
--- /dev/null
+++ b/scripts/Dpkg/Build/Info.pm
@@ -0,0 +1,97 @@
+# Copyright © 2016-2022 Guillem Jover <guillem@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::Build::Info;
+
+use strict;
+use warnings;
+
+our $VERSION = '1.02';
+our @EXPORT_OK = qw(
+ get_build_env_whitelist
+ get_build_env_allowed
+);
+
+use Exporter qw(import);
+
+use Dpkg::BuildInfo;
+
+=encoding utf8
+
+=head1 NAME
+
+Dpkg::Build::Info - handle build information
+
+=head1 DESCRIPTION
+
+The Dpkg::Build::Info module provides functions to handle the build
+information.
+
+This module is deprecated, use Dpkg::BuildInfo instead.
+
+=head1 FUNCTIONS
+
+=over 4
+
+=item @envvars = get_build_env_allowed()
+
+Get an array with the allowed list of environment variables that can affect
+the build, but are still not privacy revealing.
+
+This is a deprecated alias for Dpkg::BuildInfo::get_build_env_allowed().
+
+=cut
+
+sub get_build_env_allowed {
+ #warnings::warnif('deprecated',
+ # 'Dpkg::Build::Info::get_build_env_allowed() is deprecated, ' .
+ # 'use Dpkg::BuildInfo::get_build_env_allowed() instead');
+ return Dpkg::BuildInfo::get_build_env_allowed();
+}
+
+=item @envvars = get_build_env_whitelist()
+
+This is a deprecated alias for Dpkg::BuildInfo::get_build_env_allowed().
+
+=cut
+
+sub get_build_env_whitelist {
+ warnings::warnif('deprecated',
+ 'Dpkg::Build::Info::get_build_env_whitelist() is deprecated, ' .
+ 'use Dpkg::BuildInfo::get_build_env_allowed() instead');
+ return Dpkg::BuildInfo::get_build_env_allowed();
+}
+
+=back
+
+=head1 CHANGES
+
+=head2 Version 1.02 (dpkg 1.21.14)
+
+Deprecate module: replaced by Dpkg::BuildInfo.
+
+=head2 Version 1.01 (dpkg 1.20.1)
+
+New function: get_build_env_allowed().
+
+Deprecated function: get_build_env_whitelist().
+
+=head2 Version 1.00 (dpkg 1.18.14)
+
+Mark the module as public.
+
+=cut
+
+1;
diff --git a/scripts/Dpkg/BuildEnv.pm b/scripts/Dpkg/BuildEnv.pm
new file mode 100644
index 0000000..1b6295b
--- /dev/null
+++ b/scripts/Dpkg/BuildEnv.pm
@@ -0,0 +1,113 @@
+# Copyright © 2012 Guillem Jover <guillem@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::BuildEnv;
+
+use strict;
+use warnings;
+
+our $VERSION = '0.01';
+
+my %env_modified = ();
+my %env_accessed = ();
+
+=encoding utf8
+
+=head1 NAME
+
+Dpkg::BuildEnv - track build environment
+
+=head1 DESCRIPTION
+
+The Dpkg::BuildEnv module is used by dpkg-buildflags to track the build
+environment variables being used and modified.
+
+=head1 FUNCTIONS
+
+=over 4
+
+=item set($varname, $value)
+
+Update the build environment variable $varname with value $value. Record
+it as being accessed and modified.
+
+=cut
+
+sub set {
+ my ($varname, $value) = @_;
+ $env_modified{$varname} = 1;
+ $env_accessed{$varname} = 1;
+ $ENV{$varname} = $value;
+}
+
+=item get($varname)
+
+Get the build environment variable $varname value. Record it as being
+accessed.
+
+=cut
+
+sub get {
+ my $varname = shift;
+ $env_accessed{$varname} = 1;
+ return $ENV{$varname};
+}
+
+=item has($varname)
+
+Return a boolean indicating whether the environment variable exists.
+Record it as being accessed.
+
+=cut
+
+sub has {
+ my $varname = shift;
+ $env_accessed{$varname} = 1;
+ return exists $ENV{$varname};
+}
+
+=item @list = list_accessed()
+
+Returns a list of all environment variables that have been accessed.
+
+=cut
+
+sub list_accessed {
+ my @list = sort keys %env_accessed;
+ return @list;
+}
+
+=item @list = list_modified()
+
+Returns a list of all environment variables that have been modified.
+
+=cut
+
+sub list_modified {
+ my @list = sort keys %env_modified;
+ return @list;
+}
+
+=back
+
+=head1 CHANGES
+
+=head2 Version 0.xx
+
+This is a private module.
+
+=cut
+
+1;
diff --git a/scripts/Dpkg/BuildFlags.pm b/scripts/Dpkg/BuildFlags.pm
new file mode 100644
index 0000000..5975bb0
--- /dev/null
+++ b/scripts/Dpkg/BuildFlags.pm
@@ -0,0 +1,612 @@
+# Copyright © 2010-2011 Raphaël Hertzog <hertzog@debian.org>
+# Copyright © 2012-2022 Guillem Jover <guillem@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::BuildFlags;
+
+use strict;
+use warnings;
+
+our $VERSION = '1.06';
+
+use Dpkg ();
+use Dpkg::Gettext;
+use Dpkg::BuildEnv;
+use Dpkg::ErrorHandling;
+use Dpkg::Vendor qw(run_vendor_hook);
+
+=encoding utf8
+
+=head1 NAME
+
+Dpkg::BuildFlags - query build flags
+
+=head1 DESCRIPTION
+
+This class is used by dpkg-buildflags and can be used
+to query the same information.
+
+=head1 METHODS
+
+=over 4
+
+=item $bf = Dpkg::BuildFlags->new()
+
+Create a new Dpkg::BuildFlags object. It will be initialized based
+on the value of several configuration files and environment variables.
+
+If the option B<vendor_defaults> is set to false, then no vendor defaults are
+initialized (it defaults to true).
+
+=cut
+
+sub new {
+ my ($this, %opts) = @_;
+ my $class = ref($this) || $this;
+
+ my $self = {
+ };
+ bless $self, $class;
+
+ $opts{vendor_defaults} //= 1;
+
+ if ($opts{vendor_defaults}) {
+ $self->load_vendor_defaults();
+ } else {
+ $self->_init_vendor_defaults();
+ }
+ return $self;
+}
+
+sub _init_vendor_defaults {
+ my $self = shift;
+
+ $self->{features} = {};
+ $self->{builtins} = {};
+ $self->{optvals} = {};
+ $self->{flags} = {
+ ASFLAGS => '',
+ CPPFLAGS => '',
+ CFLAGS => '',
+ CXXFLAGS => '',
+ OBJCFLAGS => '',
+ OBJCXXFLAGS => '',
+ GCJFLAGS => '',
+ DFLAGS => '',
+ FFLAGS => '',
+ FCFLAGS => '',
+ LDFLAGS => '',
+ };
+ $self->{origin} = {
+ ASFLAGS => 'vendor',
+ CPPFLAGS => 'vendor',
+ CFLAGS => 'vendor',
+ CXXFLAGS => 'vendor',
+ OBJCFLAGS => 'vendor',
+ OBJCXXFLAGS => 'vendor',
+ GCJFLAGS => 'vendor',
+ DFLAGS => 'vendor',
+ FFLAGS => 'vendor',
+ FCFLAGS => 'vendor',
+ LDFLAGS => 'vendor',
+ };
+ $self->{maintainer} = {
+ ASFLAGS => 0,
+ CPPFLAGS => 0,
+ CFLAGS => 0,
+ CXXFLAGS => 0,
+ OBJCFLAGS => 0,
+ OBJCXXFLAGS => 0,
+ GCJFLAGS => 0,
+ DFLAGS => 0,
+ FFLAGS => 0,
+ FCFLAGS => 0,
+ LDFLAGS => 0,
+ };
+}
+
+=item $bf->load_vendor_defaults()
+
+Reset the flags stored to the default set provided by the vendor.
+
+=cut
+
+sub load_vendor_defaults {
+ my $self = shift;
+
+ $self->_init_vendor_defaults();
+
+ # The vendor hook will add the feature areas build flags.
+ run_vendor_hook('update-buildflags', $self);
+}
+
+=item $bf->load_system_config()
+
+Update flags from the system configuration.
+
+=cut
+
+sub load_system_config {
+ my $self = shift;
+
+ $self->update_from_conffile("$Dpkg::CONFDIR/buildflags.conf", 'system');
+}
+
+=item $bf->load_user_config()
+
+Update flags from the user configuration.
+
+=cut
+
+sub load_user_config {
+ my $self = shift;
+
+ my $confdir = $ENV{XDG_CONFIG_HOME};
+ $confdir ||= $ENV{HOME} . '/.config' if length $ENV{HOME};
+ if (length $confdir) {
+ $self->update_from_conffile("$confdir/dpkg/buildflags.conf", 'user');
+ }
+}
+
+=item $bf->load_environment_config()
+
+Update flags based on user directives stored in the environment. See
+dpkg-buildflags(1) for details.
+
+=cut
+
+sub load_environment_config {
+ my $self = shift;
+
+ foreach my $flag (keys %{$self->{flags}}) {
+ my $envvar = 'DEB_' . $flag . '_SET';
+ if (Dpkg::BuildEnv::has($envvar)) {
+ $self->set($flag, Dpkg::BuildEnv::get($envvar), 'env');
+ }
+ $envvar = 'DEB_' . $flag . '_STRIP';
+ if (Dpkg::BuildEnv::has($envvar)) {
+ $self->strip($flag, Dpkg::BuildEnv::get($envvar), 'env');
+ }
+ $envvar = 'DEB_' . $flag . '_APPEND';
+ if (Dpkg::BuildEnv::has($envvar)) {
+ $self->append($flag, Dpkg::BuildEnv::get($envvar), 'env');
+ }
+ $envvar = 'DEB_' . $flag . '_PREPEND';
+ if (Dpkg::BuildEnv::has($envvar)) {
+ $self->prepend($flag, Dpkg::BuildEnv::get($envvar), 'env');
+ }
+ }
+}
+
+=item $bf->load_maintainer_config()
+
+Update flags based on maintainer directives stored in the environment. See
+dpkg-buildflags(1) for details.
+
+=cut
+
+sub load_maintainer_config {
+ my $self = shift;
+
+ foreach my $flag (keys %{$self->{flags}}) {
+ my $envvar = 'DEB_' . $flag . '_MAINT_SET';
+ if (Dpkg::BuildEnv::has($envvar)) {
+ $self->set($flag, Dpkg::BuildEnv::get($envvar), undef, 1);
+ }
+ $envvar = 'DEB_' . $flag . '_MAINT_STRIP';
+ if (Dpkg::BuildEnv::has($envvar)) {
+ $self->strip($flag, Dpkg::BuildEnv::get($envvar), undef, 1);
+ }
+ $envvar = 'DEB_' . $flag . '_MAINT_APPEND';
+ if (Dpkg::BuildEnv::has($envvar)) {
+ $self->append($flag, Dpkg::BuildEnv::get($envvar), undef, 1);
+ }
+ $envvar = 'DEB_' . $flag . '_MAINT_PREPEND';
+ if (Dpkg::BuildEnv::has($envvar)) {
+ $self->prepend($flag, Dpkg::BuildEnv::get($envvar), undef, 1);
+ }
+ }
+}
+
+
+=item $bf->load_config()
+
+Call successively load_system_config(), load_user_config(),
+load_environment_config() and load_maintainer_config() to update the
+default build flags defined by the vendor.
+
+=cut
+
+sub load_config {
+ my $self = shift;
+
+ $self->load_system_config();
+ $self->load_user_config();
+ $self->load_environment_config();
+ $self->load_maintainer_config();
+}
+
+=item $bf->unset($flag)
+
+Unset the build flag $flag, so that it will not be known anymore.
+
+=cut
+
+sub unset {
+ my ($self, $flag) = @_;
+
+ delete $self->{flags}->{$flag};
+ delete $self->{origin}->{$flag};
+ delete $self->{maintainer}->{$flag};
+}
+
+=item $bf->set($flag, $value, $source, $maint)
+
+Update the build flag $flag with value $value and record its origin as
+$source (if defined). Record it as maintainer modified if $maint is
+defined and true.
+
+=cut
+
+sub set {
+ my ($self, $flag, $value, $src, $maint) = @_;
+ $self->{flags}->{$flag} = $value;
+ $self->{origin}->{$flag} = $src if defined $src;
+ $self->{maintainer}->{$flag} = $maint if $maint;
+}
+
+=item $bf->set_feature($area, $feature, $enabled)
+
+Update the boolean state of whether a specific feature within a known
+feature area has been enabled. The only currently known feature areas
+are "future", "qa", "sanitize", "optimize", "hardening" and "reproducible".
+
+=cut
+
+sub set_feature {
+ my ($self, $area, $feature, $enabled) = @_;
+ $self->{features}{$area}{$feature} = $enabled;
+}
+
+=item $bf->get_feature($area, $feature)
+
+Returns the value for the given feature within a known feature area.
+This is relevant for builtin features where the feature has a ternary
+state of true, false and undef, and where the latter cannot be retrieved
+with use_feature().
+
+=cut
+
+sub get_feature {
+ my ($self, $area, $feature) = @_;
+
+ return if ! $self->has_features($area);
+ return $self->{features}{$area}{$feature};
+}
+
+=item $bf->use_feature($area, $feature)
+
+Returns true if the given feature within a known feature areas has been
+enabled, and false otherwise.
+The only currently recognized feature areas are "future", "qa", "sanitize",
+"optimize", "hardening" and "reproducible".
+
+=cut
+
+sub use_feature {
+ my ($self, $area, $feature) = @_;
+
+ return 0 if ! $self->has_features($area);
+ return 0 if ! $self->{features}{$area}{$feature};
+ return 1;
+}
+
+=item $bf->set_builtin($area, $feature, $enabled)
+
+Update the boolean state of whether a specific feature within a known
+feature area is handled (even if only in some architectures) as a builtin
+default by the compiler.
+
+=cut
+
+sub set_builtin {
+ my ($self, $area, $feature, $enabled) = @_;
+ $self->{builtins}{$area}{$feature} = $enabled;
+}
+
+=item $bf->get_builtins($area)
+
+Return, for the given area, a hash with keys as feature names, and values
+as booleans indicating whether the feature is handled as a builtin default
+by the compiler or not. Only features that might be handled as builtins on
+some architectures are returned as part of the hash. Missing features mean
+they are currently never handled as builtins by the compiler.
+
+=cut
+
+sub get_builtins {
+ my ($self, $area) = @_;
+ return if ! exists $self->{builtins}{$area};
+ return %{$self->{builtins}{$area}};
+}
+
+=item $bf->set_option_value($option, $value)
+
+B<Private> method to set the value of a build option.
+Do not use outside of the dpkg project.
+
+=cut
+
+sub set_option_value {
+ my ($self, $option, $value) = @_;
+
+ $self->{optvals}{$option} = $value;
+}
+
+=item $bf->get_option_value($option)
+
+B<Private> method to get the value of a build option.
+Do not use outside of the dpkg project.
+
+=cut
+
+sub get_option_value {
+ my ($self, $option) = @_;
+
+ return $self->{optvals}{$option};
+}
+
+=item $bf->strip($flag, $value, $source, $maint)
+
+Update the build flag $flag by stripping the flags listed in $value and
+record its origin as $source (if defined). Record it as maintainer modified
+if $maint is defined and true.
+
+=cut
+
+sub strip {
+ my ($self, $flag, $value, $src, $maint) = @_;
+
+ my %strip = map { $_ => 1 } split /\s+/, $value;
+
+ $self->{flags}->{$flag} = join q{ }, grep {
+ ! exists $strip{$_}
+ } split q{ }, $self->{flags}{$flag};
+ $self->{origin}->{$flag} = $src if defined $src;
+ $self->{maintainer}->{$flag} = $maint if $maint;
+}
+
+=item $bf->append($flag, $value, $source, $maint)
+
+Append the options listed in $value to the current value of the flag $flag.
+Record its origin as $source (if defined). Record it as maintainer modified
+if $maint is defined and true.
+
+=cut
+
+sub append {
+ my ($self, $flag, $value, $src, $maint) = @_;
+ if (length($self->{flags}->{$flag})) {
+ $self->{flags}->{$flag} .= " $value";
+ } else {
+ $self->{flags}->{$flag} = $value;
+ }
+ $self->{origin}->{$flag} = $src if defined $src;
+ $self->{maintainer}->{$flag} = $maint if $maint;
+}
+
+=item $bf->prepend($flag, $value, $source, $maint)
+
+Prepend the options listed in $value to the current value of the flag $flag.
+Record its origin as $source (if defined). Record it as maintainer modified
+if $maint is defined and true.
+
+=cut
+
+sub prepend {
+ my ($self, $flag, $value, $src, $maint) = @_;
+ if (length($self->{flags}->{$flag})) {
+ $self->{flags}->{$flag} = "$value " . $self->{flags}->{$flag};
+ } else {
+ $self->{flags}->{$flag} = $value;
+ }
+ $self->{origin}->{$flag} = $src if defined $src;
+ $self->{maintainer}->{$flag} = $maint if $maint;
+}
+
+
+=item $bf->update_from_conffile($file, $source)
+
+Update the current build flags based on the configuration directives
+contained in $file. See dpkg-buildflags(1) for the format of the directives.
+
+$source is the origin recorded for any build flag set or modified.
+
+=cut
+
+sub update_from_conffile {
+ my ($self, $file, $src) = @_;
+ local $_;
+
+ return unless -e $file;
+ open(my $conf_fh, '<', $file) or syserr(g_('cannot read %s'), $file);
+ while (<$conf_fh>) {
+ chomp;
+ next if /^\s*#/; # Skip comments
+ next if /^\s*$/; # Skip empty lines
+ if (/^(append|prepend|set|strip)\s+(\S+)\s+(\S.*\S)\s*$/i) {
+ my ($op, $flag, $value) = ($1, $2, $3);
+ unless (exists $self->{flags}->{$flag}) {
+ warning(g_('line %d of %s mentions unknown flag %s'), $., $file, $flag);
+ $self->{flags}->{$flag} = '';
+ }
+ if (lc($op) eq 'set') {
+ $self->set($flag, $value, $src);
+ } elsif (lc($op) eq 'strip') {
+ $self->strip($flag, $value, $src);
+ } elsif (lc($op) eq 'append') {
+ $self->append($flag, $value, $src);
+ } elsif (lc($op) eq 'prepend') {
+ $self->prepend($flag, $value, $src);
+ }
+ } else {
+ warning(g_('line %d of %s is invalid, it has been ignored'), $., $file);
+ }
+ }
+ close($conf_fh);
+}
+
+=item $bf->get($flag)
+
+Return the value associated to the flag. It might be undef if the
+flag doesn't exist.
+
+=cut
+
+sub get {
+ my ($self, $key) = @_;
+ return $self->{flags}{$key};
+}
+
+=item $bf->get_feature_areas()
+
+Return the feature areas (i.e. the area values has_features will return
+true for).
+
+=cut
+
+sub get_feature_areas {
+ my $self = shift;
+
+ return keys %{$self->{features}};
+}
+
+=item $bf->get_features($area)
+
+Return, for the given area, a hash with keys as feature names, and values
+as booleans indicating whether the feature is enabled or not.
+
+=cut
+
+sub get_features {
+ my ($self, $area) = @_;
+ return %{$self->{features}{$area}};
+}
+
+=item $bf->get_origin($flag)
+
+Return the origin associated to the flag. It might be undef if the
+flag doesn't exist.
+
+=cut
+
+sub get_origin {
+ my ($self, $key) = @_;
+ return $self->{origin}{$key};
+}
+
+=item $bf->is_maintainer_modified($flag)
+
+Return true if the flag is modified by the maintainer.
+
+=cut
+
+sub is_maintainer_modified {
+ my ($self, $key) = @_;
+ return $self->{maintainer}{$key};
+}
+
+=item $bf->has_features($area)
+
+Returns true if the given area of features is known, and false otherwise.
+The only currently recognized feature areas are "future", "qa", "sanitize",
+"optimize", "hardening" and "reproducible".
+
+=cut
+
+sub has_features {
+ my ($self, $area) = @_;
+ return exists $self->{features}{$area};
+}
+
+=item $bf->has($option)
+
+Returns a boolean indicating whether the flags exists in the object.
+
+=cut
+
+sub has {
+ my ($self, $key) = @_;
+ return exists $self->{flags}{$key};
+}
+
+=item @flags = $bf->list()
+
+Returns the list of flags stored in the object.
+
+=cut
+
+sub list {
+ my $self = shift;
+ my @list = sort keys %{$self->{flags}};
+ return @list;
+}
+
+=back
+
+=head1 CHANGES
+
+=head2 Version 1.06 (dpkg 1.21.15)
+
+New method: $bf->get_feature().
+
+=head2 Version 1.05 (dpkg 1.21.14)
+
+New option: 'vendor_defaults' in new().
+
+New methods: $bf->load_vendor_defaults(), $bf->use_feature(),
+$bf->set_builtin(), $bf->get_builtins().
+
+=head2 Version 1.04 (dpkg 1.20.0)
+
+New method: $bf->unset().
+
+=head2 Version 1.03 (dpkg 1.16.5)
+
+New method: $bf->get_feature_areas() to list possible values for
+$bf->get_features.
+
+New method $bf->is_maintainer_modified() and new optional parameter to
+$bf->set(), $bf->append(), $bf->prepend(), $bf->strip().
+
+=head2 Version 1.02 (dpkg 1.16.2)
+
+New methods: $bf->get_features(), $bf->has_features(), $bf->set_feature().
+
+=head2 Version 1.01 (dpkg 1.16.1)
+
+New method: $bf->prepend() very similar to append(). Implement support of
+the prepend operation everywhere.
+
+New method: $bf->load_maintainer_config() that update the build flags
+based on the package maintainer directives.
+
+=head2 Version 1.00 (dpkg 1.15.7)
+
+Mark the module as public.
+
+=cut
+
+1;
diff --git a/scripts/Dpkg/BuildInfo.pm b/scripts/Dpkg/BuildInfo.pm
new file mode 100644
index 0000000..7be6bc7
--- /dev/null
+++ b/scripts/Dpkg/BuildInfo.pm
@@ -0,0 +1,154 @@
+# Copyright © 2016-2022 Guillem Jover <guillem@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::BuildInfo;
+
+use strict;
+use warnings;
+
+our $VERSION = '1.00';
+our @EXPORT_OK = qw(
+ get_build_env_allowed
+);
+
+use Exporter qw(import);
+
+=encoding utf8
+
+=head1 NAME
+
+Dpkg::BuildInfo - handle build information
+
+=head1 DESCRIPTION
+
+The Dpkg::BuildInfo module provides functions to handle the build
+information.
+
+=head1 FUNCTIONS
+
+=over 4
+
+=item @envvars = get_build_env_allowed()
+
+Get an array with the allowed list of environment variables that can affect
+the build, but are still not privacy revealing.
+
+=cut
+
+my @env_allowed = (
+ # Toolchain.
+ qw(
+ CC
+ CPP
+ CXX
+ OBJC
+ OBJCXX
+ PC
+ FC
+ M2C
+ AS
+ LD
+ AR
+ RANLIB
+ MAKE
+ AWK
+ LEX
+ YACC
+ ),
+ # Toolchain flags.
+ qw(
+ ASFLAGS
+ CFLAGS
+ CPPFLAGS
+ CXXFLAGS
+ OBJCFLAGS
+ OBJCXXFLAGS
+ GCJFLAGS
+ DFLAGS
+ FFLAGS
+ LDFLAGS
+ ARFLAGS
+ MAKEFLAGS
+ ),
+ # Dynamic linker, see ld(1).
+ qw(
+ LD_LIBRARY_PATH
+ ),
+ # Locale, see locale(1).
+ qw(
+ LANG
+ LC_ALL
+ LC_CTYPE
+ LC_NUMERIC
+ LC_TIME
+ LC_COLLATE
+ LC_MONETARY
+ LC_MESSAGES
+ LC_PAPER
+ LC_NAME
+ LC_ADDRESS
+ LC_TELEPHONE
+ LC_MEASUREMENT
+ LC_IDENTIFICATION
+ ),
+ # Build flags, see dpkg-buildpackage(1).
+ qw(
+ DEB_BUILD_OPTIONS
+ DEB_BUILD_PROFILES
+ ),
+ # DEB_flag_{SET,STRIP,APPEND,PREPEND} will be recorded after being merged
+ # with system config and user config.
+ # See deb-vendor(1).
+ qw(
+ DEB_VENDOR
+ ),
+ # See dpkg(1).
+ qw(
+ DPKG_ROOT
+ DPKG_ADMINDIR
+ ),
+ # See dpkg-architecture(1).
+ qw(
+ DPKG_DATADIR
+ ),
+ # See Dpkg::Vendor(3).
+ qw(
+ DPKG_ORIGINS_DIR
+ ),
+ # See dpkg-gensymbols(1).
+ qw(
+ DPKG_GENSYMBOLS_CHECK_LEVEL
+ ),
+ # See <https://reproducible-builds.org/specs/source-date-epoch>.
+ qw(
+ SOURCE_DATE_EPOCH
+ ),
+);
+
+sub get_build_env_allowed {
+ return @env_allowed;
+}
+
+=back
+
+=head1 CHANGES
+
+=head2 Version 1.00 (dpkg 1.21.14)
+
+Mark the module as public.
+
+=cut
+
+1;
diff --git a/scripts/Dpkg/BuildOptions.pm b/scripts/Dpkg/BuildOptions.pm
new file mode 100644
index 0000000..62a84ea
--- /dev/null
+++ b/scripts/Dpkg/BuildOptions.pm
@@ -0,0 +1,246 @@
+# Copyright © 2007 Frank Lichtenheld <djpig@debian.org>
+# Copyright © 2008, 2012-2017 Guillem Jover <guillem@debian.org>
+# Copyright © 2010 Raphaël Hertzog <hertzog@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::BuildOptions;
+
+use strict;
+use warnings;
+
+our $VERSION = '1.02';
+
+use Dpkg::Gettext;
+use Dpkg::ErrorHandling;
+use Dpkg::BuildEnv;
+
+=encoding utf8
+
+=head1 NAME
+
+Dpkg::BuildOptions - parse and update build options
+
+=head1 DESCRIPTION
+
+This class can be used to manipulate options stored
+in environment variables like DEB_BUILD_OPTIONS and
+DEB_BUILD_MAINT_OPTIONS.
+
+=head1 METHODS
+
+=over 4
+
+=item $bo = Dpkg::BuildOptions->new(%opts)
+
+Create a new Dpkg::BuildOptions object. It will be initialized based
+on the value of the environment variable named $opts{envvar} (or
+DEB_BUILD_OPTIONS if that option is not set).
+
+=cut
+
+sub new {
+ my ($this, %opts) = @_;
+ my $class = ref($this) || $this;
+
+ my $self = {
+ options => {},
+ source => {},
+ envvar => $opts{envvar} // 'DEB_BUILD_OPTIONS',
+ };
+ bless $self, $class;
+ $self->merge(Dpkg::BuildEnv::get($self->{envvar}), $self->{envvar});
+ return $self;
+}
+
+=item $bo->reset()
+
+Reset the object to not have any option (it's empty).
+
+=cut
+
+sub reset {
+ my $self = shift;
+ $self->{options} = {};
+ $self->{source} = {};
+}
+
+=item $bo->merge($content, $source)
+
+Merge the options set in $content and record that they come from the
+source $source. $source is mainly used in warning messages currently
+to indicate where invalid options have been detected.
+
+$content is a space separated list of options with optional assigned
+values like "nocheck parallel=2".
+
+=cut
+
+sub merge {
+ my ($self, $content, $source) = @_;
+ return 0 unless defined $content;
+ my $count = 0;
+ foreach (split(/\s+/, $content)) {
+ unless (/^([a-z][a-z0-9_-]*)(?:=(\S*))?$/) {
+ warning(g_('invalid flag in %s: %s'), $source, $_);
+ next;
+ }
+ $count += $self->set($1, $2, $source);
+ }
+ return $count;
+}
+
+=item $bo->set($option, $value, [$source])
+
+Store the given option in the object with the given value. It's legitimate
+for a value to be undefined if the option is a simple boolean (its
+presence means true, its absence means false). The $source is optional
+and indicates where the option comes from.
+
+The known options have their values checked for sanity. Options without
+values have their value removed and options with invalid values are
+discarded.
+
+=cut
+
+sub set {
+ my ($self, $key, $value, $source) = @_;
+
+ # Sanity checks
+ if ($key =~ /^(terse|noopt|nostrip|nocheck)$/ && defined($value)) {
+ $value = undef;
+ } elsif ($key eq 'parallel') {
+ $value //= '';
+ return 0 if $value !~ /^\d*$/;
+ }
+
+ $self->{options}{$key} = $value;
+ $self->{source}{$key} = $source;
+
+ return 1;
+}
+
+=item $bo->get($option)
+
+Return the value associated to the option. It might be undef even if the
+option exists. You might want to check with $bo->has($option) to verify if
+the option is stored in the object.
+
+=cut
+
+sub get {
+ my ($self, $key) = @_;
+ return $self->{options}{$key};
+}
+
+=item $bo->has($option)
+
+Returns a boolean indicating whether the option is stored in the object.
+
+=cut
+
+sub has {
+ my ($self, $key) = @_;
+ return exists $self->{options}{$key};
+}
+
+=item $bo->parse_features($option, $use_feature)
+
+Parse the $option values, as a set of known features to enable or disable,
+as specified in the $use_feature hash reference.
+
+Each feature is prefixed with a 'B<+>' or a 'B<->' character as a marker
+to enable or disable it. The special feature "B<all>" can be used to act
+on all known features.
+
+Unknown or malformed features will emit warnings.
+
+=cut
+
+sub parse_features {
+ my ($self, $option, $use_feature) = @_;
+
+ foreach my $feature (split(/,/, $self->get($option) // '')) {
+ $feature = lc $feature;
+ if ($feature =~ s/^([+-])//) {
+ my $value = ($1 eq '+') ? 1 : 0;
+ if ($feature eq 'all') {
+ $use_feature->{$_} = $value foreach keys %{$use_feature};
+ } else {
+ if (exists $use_feature->{$feature}) {
+ $use_feature->{$feature} = $value;
+ } else {
+ warning(g_('unknown %s feature in %s variable: %s'),
+ $option, $self->{envvar}, $feature);
+ }
+ }
+ } else {
+ warning(g_('incorrect value in %s option of %s variable: %s'),
+ $option, $self->{envvar}, $feature);
+ }
+ }
+}
+
+=item $string = $bo->output($fh)
+
+Return a string representation of the build options suitable to be
+assigned to an environment variable. Can optionally output that string to
+the given filehandle.
+
+=cut
+
+sub output {
+ my ($self, $fh) = @_;
+ my $o = $self->{options};
+ my $res = join(' ', map { defined($o->{$_}) ? $_ . '=' . $o->{$_} : $_ } sort keys %$o);
+ print { $fh } $res if defined $fh;
+ return $res;
+}
+
+=item $bo->export([$var])
+
+Export the build options to the given environment variable. If omitted,
+the environment variable defined at creation time is assumed. The value
+set to the variable is also returned.
+
+=cut
+
+sub export {
+ my ($self, $var) = @_;
+ $var //= $self->{envvar};
+ my $content = $self->output();
+ Dpkg::BuildEnv::set($var, $content);
+ return $content;
+}
+
+=back
+
+=head1 CHANGES
+
+=head2 Version 1.02 (dpkg 1.18.19)
+
+New method: $bo->parse_features().
+
+=head2 Version 1.01 (dpkg 1.16.1)
+
+Enable to use another environment variable instead of DEB_BUILD_OPTIONS.
+Thus add support for the "envvar" option at creation time.
+
+=head2 Version 1.00 (dpkg 1.15.6)
+
+Mark the module as public.
+
+=cut
+
+1;
diff --git a/scripts/Dpkg/BuildProfiles.pm b/scripts/Dpkg/BuildProfiles.pm
new file mode 100644
index 0000000..df3ec48
--- /dev/null
+++ b/scripts/Dpkg/BuildProfiles.pm
@@ -0,0 +1,146 @@
+# Copyright © 2013 Guillem Jover <guillem@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::BuildProfiles;
+
+use strict;
+use warnings;
+
+our $VERSION = '1.00';
+our @EXPORT_OK = qw(
+ get_build_profiles
+ set_build_profiles
+ parse_build_profiles
+ evaluate_restriction_formula
+);
+
+use Exporter qw(import);
+use List::Util qw(any);
+
+use Dpkg::BuildEnv;
+
+my $cache_profiles;
+my @build_profiles;
+
+=encoding utf8
+
+=head1 NAME
+
+Dpkg::BuildProfiles - handle build profiles
+
+=head1 DESCRIPTION
+
+The Dpkg::BuildProfiles module provides functions to handle the build
+profiles.
+
+=head1 FUNCTIONS
+
+=over 4
+
+=item @profiles = get_build_profiles()
+
+Get an array with the currently active build profiles, taken from
+the environment variable B<DEB_BUILD_PROFILES>.
+
+=cut
+
+sub get_build_profiles {
+ return @build_profiles if $cache_profiles;
+
+ if (Dpkg::BuildEnv::has('DEB_BUILD_PROFILES')) {
+ @build_profiles = split ' ', Dpkg::BuildEnv::get('DEB_BUILD_PROFILES');
+ }
+ $cache_profiles = 1;
+
+ return @build_profiles;
+}
+
+=item set_build_profiles(@profiles)
+
+Set C<@profiles> as the current active build profiles, by setting
+the environment variable B<DEB_BUILD_PROFILES>.
+
+=cut
+
+sub set_build_profiles {
+ my (@profiles) = @_;
+
+ $cache_profiles = 1;
+ @build_profiles = @profiles;
+ Dpkg::BuildEnv::set('DEB_BUILD_PROFILES', join ' ', @profiles);
+}
+
+=item @profiles = parse_build_profiles($string)
+
+Parses a build profiles specification, into an array of array references.
+
+=cut
+
+sub parse_build_profiles {
+ my $string = shift;
+
+ $string =~ s/^\s*<\s*(.*)\s*>\s*$/$1/;
+
+ return map { [ split ' ' ] } split /\s*>\s+<\s*/, $string;
+}
+
+=item evaluate_restriction_formula(\@formula, \@profiles)
+
+Evaluate whether a restriction formula of the form "<foo bar> <baz>", given as
+a nested array, is true or false, given the array of enabled build profiles.
+
+=cut
+
+sub evaluate_restriction_formula {
+ my ($formula, $profiles) = @_;
+
+ # Restriction formulas are in disjunctive normal form:
+ # (foo AND bar) OR (blub AND bla)
+ foreach my $restrlist (@{$formula}) {
+ my $seen_profile = 1;
+
+ foreach my $restriction (@$restrlist) {
+ next if $restriction !~ m/^(!)?(.+)/;
+
+ my $negated = defined $1 && $1 eq '!';
+ my $profile = $2;
+ my $found = any { $_ eq $profile } @{$profiles};
+
+ # If a negative set profile is encountered, stop processing.
+ # If a positive unset profile is encountered, stop processing.
+ if ($found == $negated) {
+ $seen_profile = 0;
+ last;
+ }
+ }
+
+ # This conjunction evaluated to true so we don't have to evaluate
+ # the others.
+ return 1 if $seen_profile;
+ }
+ return 0;
+}
+
+=back
+
+=head1 CHANGES
+
+=head2 Version 1.00 (dpkg 1.17.17)
+
+Mark the module as public.
+
+=cut
+
+1;
diff --git a/scripts/Dpkg/BuildTypes.pm b/scripts/Dpkg/BuildTypes.pm
new file mode 100644
index 0000000..9f20d0d
--- /dev/null
+++ b/scripts/Dpkg/BuildTypes.pm
@@ -0,0 +1,284 @@
+# Copyright © 2007 Frank Lichtenheld <djpig@debian.org>
+# Copyright © 2010, 2013-2016 Guillem Jover <guillem@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::BuildTypes;
+
+use strict;
+use warnings;
+
+our $VERSION = '0.02';
+our @EXPORT = qw(
+ BUILD_DEFAULT
+ BUILD_SOURCE
+ BUILD_ARCH_DEP
+ BUILD_ARCH_INDEP
+ BUILD_BINARY
+ BUILD_FULL
+ build_has_any
+ build_has_all
+ build_has_none
+ build_is
+ set_build_type
+ set_build_type_from_options
+ set_build_type_from_targets
+ get_build_options_from_type
+);
+
+use Exporter qw(import);
+
+use Dpkg::Gettext;
+use Dpkg::ErrorHandling;
+
+=encoding utf8
+
+=head1 NAME
+
+Dpkg::BuildTypes - track build types
+
+=head1 DESCRIPTION
+
+The Dpkg::BuildTypes module is used by various tools to track and decide
+what artifacts need to be built.
+
+The build types are bit constants that are exported by default. Multiple
+types can be ORed.
+
+=head1 CONSTANTS
+
+=over 4
+
+=item BUILD_DEFAULT
+
+This build is the default.
+
+=item BUILD_SOURCE
+
+This build includes source artifacts.
+
+=item BUILD_ARCH_DEP
+
+This build includes architecture dependent binary artifacts.
+
+=item BUILD_ARCH_INDEP
+
+This build includes architecture independent binary artifacts.
+
+=item BUILD_BINARY
+
+This build includes binary artifacts.
+
+=item BUILD_FULL
+
+This build includes source and binary artifacts.
+
+=cut
+
+# Simple types.
+use constant {
+ BUILD_DEFAULT => 1,
+ BUILD_SOURCE => 2,
+ BUILD_ARCH_DEP => 4,
+ BUILD_ARCH_INDEP => 8,
+};
+
+# Composed types.
+use constant BUILD_BINARY => BUILD_ARCH_DEP | BUILD_ARCH_INDEP;
+use constant BUILD_FULL => BUILD_BINARY | BUILD_SOURCE;
+
+my $current_type = BUILD_FULL | BUILD_DEFAULT;
+my $current_option = undef;
+
+my @build_types = qw(full source binary any all);
+my %build_types = (
+ full => BUILD_FULL,
+ source => BUILD_SOURCE,
+ binary => BUILD_BINARY,
+ any => BUILD_ARCH_DEP,
+ all => BUILD_ARCH_INDEP,
+);
+my %build_targets = (
+ 'clean' => BUILD_SOURCE,
+ 'build' => BUILD_BINARY,
+ 'build-arch' => BUILD_ARCH_DEP,
+ 'build-indep' => BUILD_ARCH_INDEP,
+ 'binary' => BUILD_BINARY,
+ 'binary-arch' => BUILD_ARCH_DEP,
+ 'binary-indep' => BUILD_ARCH_INDEP,
+);
+
+=back
+
+=head1 FUNCTIONS
+
+=over 4
+
+=item build_has_any($bits)
+
+Return a boolean indicating whether the current build type has any of the
+specified $bits.
+
+=cut
+
+sub build_has_any
+{
+ my ($bits) = @_;
+
+ return $current_type & $bits;
+}
+
+=item build_has_all($bits)
+
+Return a boolean indicating whether the current build type has all the
+specified $bits.
+
+=cut
+
+sub build_has_all
+{
+ my ($bits) = @_;
+
+ return ($current_type & $bits) == $bits;
+}
+
+=item build_has_none($bits)
+
+Return a boolean indicating whether the current build type has none of the
+specified $bits.
+
+=cut
+
+sub build_has_none
+{
+ my ($bits) = @_;
+
+ return !($current_type & $bits);
+}
+
+=item build_is($bits)
+
+Return a boolean indicating whether the current build type is the specified
+set of $bits.
+
+=cut
+
+sub build_is
+{
+ my ($bits) = @_;
+
+ return $current_type == $bits;
+}
+
+=item set_build_type($build_type, $build_option, %opts)
+
+Set the current build type to $build_type, which was specified via the
+$build_option command-line option.
+
+The function will check and abort on incompatible build type assignments,
+this behavior can be disabled by using the boolean option "nocheck".
+
+=cut
+
+sub set_build_type
+{
+ my ($build_type, $build_option, %opts) = @_;
+
+ usageerr(g_('cannot combine %s and %s'), $current_option, $build_option)
+ if not $opts{nocheck} and
+ build_has_none(BUILD_DEFAULT) and $current_type != $build_type;
+
+ $current_type = $build_type;
+ $current_option = $build_option;
+}
+
+=item set_build_type_from_options($build_types, $build_option, %opts)
+
+Set the current build type from a list of comma-separated build type
+components.
+
+The function will check and abort on incompatible build type assignments,
+this behavior can be disabled by using the boolean option "nocheck".
+
+=cut
+
+sub set_build_type_from_options
+{
+ my ($build_parts, $build_option, %opts) = @_;
+
+ my $build_type = 0;
+ foreach my $type (split /,/, $build_parts) {
+ usageerr(g_('unknown build type %s'), $type)
+ unless exists $build_types{$type};
+ $build_type |= $build_types{$type};
+ }
+
+ set_build_type($build_type, $build_option, %opts);
+}
+
+=item set_build_type_from_targets($build_targets, $build_option, %opts)
+
+Set the current build type from a list of comma-separated build target
+components.
+
+The function will check and abort on incompatible build type assignments,
+this behavior can be disabled by using the boolean option "nocheck".
+
+=cut
+
+sub set_build_type_from_targets
+{
+ my ($build_targets, $build_option, %opts) = @_;
+
+ my $build_type = 0;
+ foreach my $target (split /,/, $build_targets) {
+ $build_type |= $build_targets{$target} // BUILD_BINARY;
+ }
+
+ set_build_type($build_type, $build_option, %opts);
+}
+
+=item get_build_options_from_type()
+
+Get the current build type as a set of comma-separated string options.
+
+=cut
+
+sub get_build_options_from_type
+{
+ my $local_type = $current_type;
+
+ my @parts;
+ foreach my $type (@build_types) {
+ my $part_bits = $build_types{$type};
+ if (($local_type & $part_bits) == $part_bits) {
+ push @parts, $type;
+ $local_type &= ~$part_bits;
+ }
+ }
+
+ return join ',', @parts;
+}
+
+=back
+
+=head1 CHANGES
+
+=head2 Version 0.xx
+
+This is a private module.
+
+=cut
+
+1;
diff --git a/scripts/Dpkg/Changelog.pm b/scripts/Dpkg/Changelog.pm
new file mode 100644
index 0000000..ffa7fc2
--- /dev/null
+++ b/scripts/Dpkg/Changelog.pm
@@ -0,0 +1,775 @@
+# Copyright © 2005, 2007 Frank Lichtenheld <frank@lichtenheld.de>
+# Copyright © 2009 Raphaël Hertzog <hertzog@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+=encoding utf8
+
+=head1 NAME
+
+Dpkg::Changelog - base class to implement a changelog parser
+
+=head1 DESCRIPTION
+
+Dpkg::Changelog is a class representing a changelog file
+as an array of changelog entries (Dpkg::Changelog::Entry).
+By deriving this class and implementing its parse method, you
+add the ability to fill this object with changelog entries.
+
+=cut
+
+package Dpkg::Changelog;
+
+use strict;
+use warnings;
+
+our $VERSION = '2.00';
+
+use Carp;
+
+use Dpkg::Gettext;
+use Dpkg::ErrorHandling qw(:DEFAULT report REPORT_WARN);
+use Dpkg::Control;
+use Dpkg::Control::Changelog;
+use Dpkg::Control::Fields;
+use Dpkg::Index;
+use Dpkg::Version;
+use Dpkg::Vendor qw(run_vendor_hook);
+
+use parent qw(Dpkg::Interface::Storable);
+
+use overload
+ '@{}' => sub { return $_[0]->{data} };
+
+=head1 METHODS
+
+=over 4
+
+=item $c = Dpkg::Changelog->new(%options)
+
+Creates a new changelog object.
+
+=cut
+
+sub new {
+ my ($this, %opts) = @_;
+ my $class = ref($this) || $this;
+ my $self = {
+ verbose => 1,
+ parse_errors => []
+ };
+ bless $self, $class;
+ $self->set_options(%opts);
+ return $self;
+}
+
+=item $c->set_options(%opts)
+
+Change the value of some options. "verbose" (defaults to 1) defines
+whether parse errors are displayed as warnings by default. "reportfile"
+is a string to use instead of the name of the file parsed, in particular
+in error messages. "range" defines the range of entries that we want to
+parse, the parser will stop as soon as it has parsed enough data to
+satisfy $c->get_range($opts{range}).
+
+=cut
+
+sub set_options {
+ my ($self, %opts) = @_;
+ $self->{$_} = $opts{$_} foreach keys %opts;
+}
+
+=item $count = $c->parse($fh, $description)
+
+Read the filehandle and parse a changelog in it. The data in the object is
+reset before parsing new data.
+
+Returns the number of changelog entries that have been parsed with success.
+
+This method needs to be implemented by one of the specialized changelog
+format subclasses.
+
+=item $count = $c->load($filename)
+
+Parse $filename contents for a changelog.
+
+Returns the number of changelog entries that have been parsed with success.
+
+=item $c->reset_parse_errors()
+
+Can be used to delete all information about errors occurred during
+previous L<parse> runs.
+
+=cut
+
+sub reset_parse_errors {
+ my $self = shift;
+ $self->{parse_errors} = [];
+}
+
+=item $c->parse_error($file, $line_nr, $error, [$line])
+
+Record a new parse error in $file at line $line_nr. The error message is
+specified with $error and a copy of the line can be recorded in $line.
+
+=cut
+
+sub parse_error {
+ my ($self, $file, $line_nr, $error, $line) = @_;
+
+ push @{$self->{parse_errors}}, [ $file, $line_nr, $error, $line ];
+
+ if ($self->{verbose}) {
+ if ($line) {
+ warning("%20s(l$line_nr): $error\nLINE: $line", $file);
+ } else {
+ warning("%20s(l$line_nr): $error", $file);
+ }
+ }
+}
+
+=item $c->get_parse_errors()
+
+Returns all error messages from the last L<parse> run.
+If called in scalar context returns a human readable
+string representation. If called in list context returns
+an array of arrays. Each of these arrays contains
+
+=over 4
+
+=item 1.
+
+a string describing the origin of the data (a filename usually). If the
+reportfile configuration option was given, its value will be used instead.
+
+=item 2.
+
+the line number where the error occurred
+
+=item 3.
+
+an error description
+
+=item 4.
+
+the original line
+
+=back
+
+=cut
+
+sub get_parse_errors {
+ my $self = shift;
+
+ if (wantarray) {
+ return @{$self->{parse_errors}};
+ } else {
+ my $res = '';
+ foreach my $e (@{$self->{parse_errors}}) {
+ if ($e->[3]) {
+ $res .= report(REPORT_WARN, g_("%s(l%s): %s\nLINE: %s"), @$e);
+ } else {
+ $res .= report(REPORT_WARN, g_('%s(l%s): %s'), @$e);
+ }
+ }
+ return $res;
+ }
+}
+
+=item $c->set_unparsed_tail($tail)
+
+Add a string representing unparsed lines after the changelog entries.
+Use undef as $tail to remove the unparsed lines currently set.
+
+=item $c->get_unparsed_tail()
+
+Return a string representing the unparsed lines after the changelog
+entries. Returns undef if there's no such thing.
+
+=cut
+
+sub set_unparsed_tail {
+ my ($self, $tail) = @_;
+ $self->{unparsed_tail} = $tail;
+}
+
+sub get_unparsed_tail {
+ my $self = shift;
+ return $self->{unparsed_tail};
+}
+
+=item @{$c}
+
+Returns all the Dpkg::Changelog::Entry objects contained in this changelog
+in the order in which they have been parsed.
+
+=item $c->get_range($range)
+
+Returns an array (if called in list context) or a reference to an array of
+Dpkg::Changelog::Entry objects which each represent one entry of the
+changelog. $range is a hash reference describing the range of entries
+to return. See section L<"RANGE SELECTION">.
+
+=cut
+
+sub _sanitize_range {
+ my ($self, $r) = @_;
+ my $data = $self->{data};
+
+ if (defined($r->{offset}) and not defined($r->{count})) {
+ warning(g_("'offset' without 'count' has no effect")) if $self->{verbose};
+ delete $r->{offset};
+ }
+
+ ## no critic (ControlStructures::ProhibitUntilBlocks)
+ if ((defined($r->{count}) || defined($r->{offset})) &&
+ (defined($r->{from}) || defined($r->{since}) ||
+ defined($r->{to}) || defined($r->{until})))
+ {
+ warning(g_("you can't combine 'count' or 'offset' with any other " .
+ 'range option')) if $self->{verbose};
+ delete $r->{from};
+ delete $r->{since};
+ delete $r->{to};
+ delete $r->{until};
+ }
+ if (defined($r->{from}) && defined($r->{since})) {
+ warning(g_("you can only specify one of 'from' and 'since', using " .
+ "'since'")) if $self->{verbose};
+ delete $r->{from};
+ }
+ if (defined($r->{to}) && defined($r->{until})) {
+ warning(g_("you can only specify one of 'to' and 'until', using " .
+ "'until'")) if $self->{verbose};
+ delete $r->{to};
+ }
+
+ # Handle non-existing versions
+ my (%versions, @versions);
+ foreach my $entry (@{$data}) {
+ my $version = $entry->get_version();
+ next unless defined $version;
+ $versions{$version->as_string()} = 1;
+ push @versions, $version->as_string();
+ }
+ if ((defined($r->{since}) and not exists $versions{$r->{since}})) {
+ warning(g_("'%s' option specifies non-existing version '%s'"), 'since', $r->{since});
+ warning(g_('use newest entry that is earlier than the one specified'));
+ foreach my $v (@versions) {
+ if (version_compare_relation($v, REL_LT, $r->{since})) {
+ $r->{since} = $v;
+ last;
+ }
+ }
+ if (not exists $versions{$r->{since}}) {
+ # No version was earlier, include all
+ warning(g_('none found, starting from the oldest entry'));
+ delete $r->{since};
+ $r->{from} = $versions[-1];
+ }
+ }
+ if ((defined($r->{from}) and not exists $versions{$r->{from}})) {
+ warning(g_("'%s' option specifies non-existing version '%s'"), 'from', $r->{from});
+ warning(g_('use oldest entry that is later than the one specified'));
+ my $oldest;
+ foreach my $v (@versions) {
+ if (version_compare_relation($v, REL_GT, $r->{from})) {
+ $oldest = $v;
+ }
+ }
+ if (defined($oldest)) {
+ $r->{from} = $oldest;
+ } else {
+ warning(g_("no such entry found, ignoring '%s' parameter '%s'"), 'from', $r->{from});
+ delete $r->{from}; # No version was oldest
+ }
+ }
+ if (defined($r->{until}) and not exists $versions{$r->{until}}) {
+ warning(g_("'%s' option specifies non-existing version '%s'"), 'until', $r->{until});
+ warning(g_('use oldest entry that is later than the one specified'));
+ my $oldest;
+ foreach my $v (@versions) {
+ if (version_compare_relation($v, REL_GT, $r->{until})) {
+ $oldest = $v;
+ }
+ }
+ if (defined($oldest)) {
+ $r->{until} = $oldest;
+ } else {
+ warning(g_("no such entry found, ignoring '%s' parameter '%s'"), 'until', $r->{until});
+ delete $r->{until}; # No version was oldest
+ }
+ }
+ if (defined($r->{to}) and not exists $versions{$r->{to}}) {
+ warning(g_("'%s' option specifies non-existing version '%s'"), 'to', $r->{to});
+ warning(g_('use newest entry that is earlier than the one specified'));
+ foreach my $v (@versions) {
+ if (version_compare_relation($v, REL_LT, $r->{to})) {
+ $r->{to} = $v;
+ last;
+ }
+ }
+ if (not exists $versions{$r->{to}}) {
+ # No version was earlier
+ warning(g_("no such entry found, ignoring '%s' parameter '%s'"), 'to', $r->{to});
+ delete $r->{to};
+ }
+ }
+
+ if (defined($r->{since}) and $data->[0]->get_version() eq $r->{since}) {
+ warning(g_("'since' option specifies most recent version '%s', ignoring"), $r->{since});
+ delete $r->{since};
+ }
+ if (defined($r->{until}) and $data->[-1]->get_version() eq $r->{until}) {
+ warning(g_("'until' option specifies oldest version '%s', ignoring"), $r->{until});
+ delete $r->{until};
+ }
+ ## use critic
+}
+
+sub get_range {
+ my ($self, $range) = @_;
+ $range //= {};
+ my $res = $self->_data_range($range);
+ return unless defined $res;
+ if (wantarray) {
+ return reverse @{$res} if $range->{reverse};
+ return @{$res};
+ } else {
+ return $res;
+ }
+}
+
+sub _is_full_range {
+ my ($self, $range) = @_;
+
+ return 1 if $range->{all};
+
+ # If no range delimiter is specified, we want everything.
+ foreach my $delim (qw(since until from to count offset)) {
+ return 0 if exists $range->{$delim};
+ }
+
+ return 1;
+}
+
+sub _data_range {
+ my ($self, $range) = @_;
+
+ my $data = $self->{data} or return;
+
+ return [ @$data ] if $self->_is_full_range($range);
+
+ $self->_sanitize_range($range);
+
+ my ($start, $end);
+ if (defined($range->{count})) {
+ my $offset = $range->{offset} // 0;
+ my $count = $range->{count};
+ # Convert count/offset in start/end
+ if ($offset > 0) {
+ $offset -= ($count < 0);
+ } elsif ($offset < 0) {
+ $offset = $#$data + ($count > 0) + $offset;
+ } else {
+ $offset = $#$data if $count < 0;
+ }
+ $start = $end = $offset;
+ $start += $count+1 if $count < 0;
+ $end += $count-1 if $count > 0;
+ # Check limits
+ $start = 0 if $start < 0;
+ return if $start > $#$data;
+ $end = $#$data if $end > $#$data;
+ return if $end < 0;
+ $end = $start if $end < $start;
+ return [ @{$data}[$start .. $end] ];
+ }
+
+ ## no critic (ControlStructures::ProhibitUntilBlocks)
+ my @result;
+ my $include = 1;
+ $include = 0 if defined($range->{to}) or defined($range->{until});
+ foreach my $entry (@{$data}) {
+ my $v = $entry->get_version();
+ $include = 1 if defined($range->{to}) and $v eq $range->{to};
+ last if defined($range->{since}) and $v eq $range->{since};
+
+ push @result, $entry if $include;
+
+ $include = 1 if defined($range->{until}) and $v eq $range->{until};
+ last if defined($range->{from}) and $v eq $range->{from};
+ }
+ ## use critic
+
+ return \@result if scalar(@result);
+ return;
+}
+
+=item $c->abort_early()
+
+Returns true if enough data have been parsed to be able to return all
+entries selected by the range set at creation (or with set_options).
+
+=cut
+
+sub abort_early {
+ my $self = shift;
+
+ my $data = $self->{data} or return;
+ my $r = $self->{range} or return;
+ my $count = $r->{count} // 0;
+ my $offset = $r->{offset} // 0;
+
+ return if $self->_is_full_range($r);
+ return if $offset < 0 or $count < 0;
+ if (defined($r->{count})) {
+ if ($offset > 0) {
+ $offset -= ($count < 0);
+ }
+ my $start = my $end = $offset;
+ $end += $count-1 if $count > 0;
+ return ($start < @$data and $end < @$data);
+ }
+
+ return unless defined($r->{since}) or defined($r->{from});
+ foreach my $entry (@{$data}) {
+ my $v = $entry->get_version();
+ return 1 if defined($r->{since}) and $v eq $r->{since};
+ return 1 if defined($r->{from}) and $v eq $r->{from};
+ }
+
+ return;
+}
+
+=item $str = $c->output()
+
+=item "$c"
+
+Returns a string representation of the changelog (it's a concatenation of
+the string representation of the individual changelog entries).
+
+=item $c->output($fh)
+
+Output the changelog to the given filehandle.
+
+=cut
+
+sub output {
+ my ($self, $fh) = @_;
+ my $str = '';
+ foreach my $entry (@{$self}) {
+ my $text = $entry->output();
+ print { $fh } $text if defined $fh;
+ $str .= $text if defined wantarray;
+ }
+ my $text = $self->get_unparsed_tail();
+ if (defined $text) {
+ print { $fh } $text if defined $fh;
+ $str .= $text if defined wantarray;
+ }
+ return $str;
+}
+
+=item $c->save($filename)
+
+Save the changelog in the given file.
+
+=cut
+
+our ( @URGENCIES, %URGENCIES );
+BEGIN {
+ @URGENCIES = qw(
+ low
+ medium
+ high
+ critical
+ emergency
+ );
+ my $i = 1;
+ %URGENCIES = map { $_ => $i++ } @URGENCIES;
+}
+
+sub _format_dpkg {
+ my ($self, $range) = @_;
+
+ my @data = $self->get_range($range) or return;
+ my $src = shift @data;
+
+ my $f = Dpkg::Control::Changelog->new();
+ $f->{Urgency} = $src->get_urgency() || 'unknown';
+ $f->{Source} = $src->get_source() || 'unknown';
+ $f->{Version} = $src->get_version() // 'unknown';
+ $f->{Distribution} = join(' ', $src->get_distributions());
+ $f->{Maintainer} = $src->get_maintainer() // '';
+ $f->{Date} = $src->get_timestamp() // '';
+ $f->{Timestamp} = $src->get_timepiece && $src->get_timepiece->epoch // '';
+ $f->{Changes} = $src->get_dpkg_changes();
+
+ # handle optional fields
+ my $opts = $src->get_optional_fields();
+ my %closes;
+ foreach (keys %$opts) {
+ if (/^Urgency$/i) { # Already dealt
+ } elsif (/^Closes$/i) {
+ $closes{$_} = 1 foreach (split(/\s+/, $opts->{Closes}));
+ } else {
+ field_transfer_single($opts, $f);
+ }
+ }
+
+ foreach my $bin (@data) {
+ my $oldurg = $f->{Urgency} // '';
+ my $oldurgn = $URGENCIES{$f->{Urgency}} // -1;
+ my $newurg = $bin->get_urgency() // '';
+ my $newurgn = $URGENCIES{$newurg} // -1;
+ $f->{Urgency} = ($newurgn > $oldurgn) ? $newurg : $oldurg;
+ $f->{Changes} .= "\n" . $bin->get_dpkg_changes();
+
+ # handle optional fields
+ $opts = $bin->get_optional_fields();
+ foreach (keys %$opts) {
+ if (/^Closes$/i) {
+ $closes{$_} = 1 foreach (split(/\s+/, $opts->{Closes}));
+ } elsif (not exists $f->{$_}) { # Don't overwrite an existing field
+ field_transfer_single($opts, $f);
+ }
+ }
+ }
+
+ if (scalar keys %closes) {
+ $f->{Closes} = join ' ', sort { $a <=> $b } keys %closes;
+ }
+ run_vendor_hook('post-process-changelog-entry', $f);
+
+ return $f;
+}
+
+sub _format_rfc822 {
+ my ($self, $range) = @_;
+
+ my @data = $self->get_range($range) or return;
+ my @ctrl;
+
+ foreach my $entry (@data) {
+ my $f = Dpkg::Control::Changelog->new();
+ $f->{Urgency} = $entry->get_urgency() || 'unknown';
+ $f->{Source} = $entry->get_source() || 'unknown';
+ $f->{Version} = $entry->get_version() // 'unknown';
+ $f->{Distribution} = join(' ', $entry->get_distributions());
+ $f->{Maintainer} = $entry->get_maintainer() // '';
+ $f->{Date} = $entry->get_timestamp() // '';
+ $f->{Timestamp} = $entry->get_timepiece && $entry->get_timepiece->epoch // '';
+ $f->{Changes} = $entry->get_dpkg_changes();
+
+ # handle optional fields
+ my $opts = $entry->get_optional_fields();
+ foreach (keys %$opts) {
+ field_transfer_single($opts, $f) unless exists $f->{$_};
+ }
+
+ run_vendor_hook('post-process-changelog-entry', $f);
+
+ push @ctrl, $f;
+ }
+
+ return @ctrl;
+}
+
+=item $control = $c->format_range($format, $range)
+
+Formats the changelog into Dpkg::Control::Changelog objects representing the
+entries selected by the optional range specifier (see L<"RANGE SELECTION">
+for details). In scalar context returns a Dpkg::Index object containing the
+selected entries, in list context returns an array of Dpkg::Control::Changelog
+objects.
+
+With format B<dpkg> the returned Dpkg::Control::Changelog object is coalesced
+from the entries in the changelog that are part of the range requested,
+with the fields described below, but considering that "selected entry"
+means the first entry of the selected range.
+
+With format B<rfc822> each returned Dpkg::Control::Changelog objects
+represents one entry in the changelog that is part of the range requested,
+with the fields described below, but considering that "selected entry"
+means for each entry.
+
+The different formats return undef if no entries are matched. The following
+fields are contained in the object(s) returned:
+
+=over 4
+
+=item Source
+
+package name (selected entry)
+
+=item Version
+
+packages' version (selected entry)
+
+=item Distribution
+
+target distribution (selected entry)
+
+=item Urgency
+
+urgency (highest of all entries in range)
+
+=item Maintainer
+
+person that created the (selected) entry
+
+=item Date
+
+date of the (selected) entry
+
+=item Timestamp
+
+date of the (selected) entry as a timestamp in seconds since the epoch
+
+=item Closes
+
+bugs closed by the (selected) entry/entries, sorted by bug number
+
+=item Changes
+
+content of the (selected) entry/entries
+
+=back
+
+=cut
+
+sub format_range {
+ my ($self, $format, $range) = @_;
+
+ my @ctrl;
+
+ if ($format eq 'dpkg') {
+ @ctrl = $self->_format_dpkg($range);
+ } elsif ($format eq 'rfc822') {
+ @ctrl = $self->_format_rfc822($range);
+ } else {
+ croak "unknown changelog output format $format";
+ }
+
+ if (wantarray) {
+ return @ctrl;
+ } else {
+ my $index = Dpkg::Index->new(type => CTRL_CHANGELOG);
+
+ foreach my $f (@ctrl) {
+ $index->add($f);
+ }
+
+ return $index;
+ }
+}
+
+=back
+
+=head1 RANGE SELECTION
+
+A range selection is described by a hash reference where
+the allowed keys and values are described below.
+
+The following options take a version number as value.
+
+=over 4
+
+=item since
+
+Causes changelog information from all versions strictly
+later than B<version> to be used.
+
+=item until
+
+Causes changelog information from all versions strictly
+earlier than B<version> to be used.
+
+=item from
+
+Similar to C<since> but also includes the information for the
+specified B<version> itself.
+
+=item to
+
+Similar to C<until> but also includes the information for the
+specified B<version> itself.
+
+=back
+
+The following options don't take version numbers as values:
+
+=over 4
+
+=item all
+
+If set to a true value, all entries of the changelog are returned,
+this overrides all other options.
+
+=item count
+
+Expects a signed integer as value. Returns C<value> entries from the
+top of the changelog if set to a positive integer, and C<abs(value)>
+entries from the tail if set to a negative integer.
+
+=item offset
+
+Expects a signed integer as value. Changes the starting point for
+C<count>, either counted from the top (positive integer) or from
+the tail (negative integer). C<offset> has no effect if C<count>
+wasn't given as well.
+
+=back
+
+Some examples for the above options. Imagine an example changelog with
+entries for the versions 1.2, 1.3, 2.0, 2.1, 2.2, 3.0 and 3.1.
+
+ Range Included entries
+ ----- ----------------
+ since => '2.0' 3.1, 3.0, 2.2
+ until => '2.0' 1.3, 1.2
+ from => '2.0' 3.1, 3.0, 2.2, 2.1, 2.0
+ to => '2.0' 2.0, 1.3, 1.2
+ count => 2 3.1, 3.0
+ count => -2 1.3, 1.2
+ count => 3, offset => 2 2.2, 2.1, 2.0
+ count => 2, offset => -3 2.0, 1.3
+ count => -2, offset => 3 3.0, 2.2
+ count => -2, offset => -3 2.2, 2.1
+
+Any combination of one option of C<since> and C<from> and one of
+C<until> and C<to> returns the intersection of the two results
+with only one of the options specified.
+
+=head1 CHANGES
+
+=head2 Version 2.00 (dpkg 1.20.0)
+
+Remove methods: $c->dpkg(), $c->rfc822().
+
+=head2 Version 1.01 (dpkg 1.18.8)
+
+New method: $c->format_range().
+
+Deprecated methods: $c->dpkg(), $c->rfc822().
+
+New field Timestamp in output formats.
+
+=head2 Version 1.00 (dpkg 1.15.6)
+
+Mark the module as public.
+
+=cut
+1;
diff --git a/scripts/Dpkg/Changelog/Debian.pm b/scripts/Dpkg/Changelog/Debian.pm
new file mode 100644
index 0000000..44f0be0
--- /dev/null
+++ b/scripts/Dpkg/Changelog/Debian.pm
@@ -0,0 +1,271 @@
+# Copyright © 1996 Ian Jackson
+# Copyright © 2005 Frank Lichtenheld <frank@lichtenheld.de>
+# Copyright © 2009 Raphaël Hertzog <hertzog@debian.org>
+# Copyright © 2012-2017 Guillem Jover <guillem@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+=encoding utf8
+
+=head1 NAME
+
+Dpkg::Changelog::Debian - parse Debian changelogs
+
+=head1 DESCRIPTION
+
+This class represents a Debian changelog file as an array of changelog
+entries (Dpkg::Changelog::Entry::Debian).
+It implements the generic interface Dpkg::Changelog.
+Only methods specific to this implementation are described below,
+the rest are inherited.
+
+Dpkg::Changelog::Debian parses Debian changelogs as described in
+deb-changelog(5).
+
+The parser tries to ignore most cruft like # or /* */ style comments,
+RCS keywords, Vim modelines, Emacs local variables and stuff from
+older changelogs with other formats at the end of the file.
+NOTE: most of these are ignored silently currently, there is no
+parser error issued for them. This should become configurable in the
+future.
+
+=cut
+
+package Dpkg::Changelog::Debian;
+
+use strict;
+use warnings;
+
+our $VERSION = '1.00';
+
+use Dpkg::Gettext;
+use Dpkg::File;
+use Dpkg::Changelog qw(:util);
+use Dpkg::Changelog::Entry::Debian qw(match_header match_trailer);
+
+use parent qw(Dpkg::Changelog);
+
+use constant {
+ FIRST_HEADING => g_('first heading'),
+ NEXT_OR_EOF => g_('next heading or end of file'),
+ START_CHANGES => g_('start of change data'),
+ CHANGES_OR_TRAILER => g_('more change data or trailer'),
+};
+
+my $ancient_delimiter_re = qr{
+ ^
+ (?: # Ancient GNU style changelog entry with expanded date
+ (?:
+ \w+\s+ # Day of week (abbreviated)
+ \w+\s+ # Month name (abbreviated)
+ \d{1,2} # Day of month
+ \Q \E
+ \d{1,2}:\d{1,2}:\d{1,2}\s+ # Time
+ [\w\s]* # Timezone
+ \d{4} # Year
+ )
+ \s+
+ (?:.*) # Maintainer name
+ \s+
+ [<\(]
+ (?:.*) # Maintainer email
+ [\)>]
+ | # Old GNU style changelog entry with expanded date
+ (?:
+ \w+\s+ # Day of week (abbreviated)
+ \w+\s+ # Month name (abbreviated)
+ \d{1,2},?\s* # Day of month
+ \d{4} # Year
+ )
+ \s+
+ (?:.*) # Maintainer name
+ \s+
+ [<\(]
+ (?:.*) # Maintainer email
+ [\)>]
+ | # Ancient changelog header w/o key=value options
+ (?:\w[-+0-9a-z.]*) # Package name
+ \Q \E
+ \(
+ (?:[^\(\) \t]+) # Package version
+ \)
+ \;?
+ | # Ancient changelog header
+ (?:[\w.+-]+) # Package name
+ [- ]
+ (?:\S+) # Package version
+ \ Debian
+ \ (?:\S+) # Package revision
+ |
+ Changes\ from\ version\ (?:.*)\ to\ (?:.*):
+ |
+ Changes\ for\ [\w.+-]+-[\w.+-]+:?\s*$
+ |
+ Old\ Changelog:\s*$
+ |
+ (?:\d+:)?
+ \w[\w.+~-]*:?
+ \s*$
+ )
+}xi;
+
+=head1 METHODS
+
+=over 4
+
+=item $count = $c->parse($fh, $description)
+
+Read the filehandle and parse a Debian changelog in it, to store the entries
+as an array of Dpkg::Changelog::Entry::Debian objects.
+Any previous entries in the object are reset before parsing new data.
+
+Returns the number of changelog entries that have been parsed with success.
+
+=cut
+
+sub parse {
+ my ($self, $fh, $file) = @_;
+ $file = $self->{reportfile} if exists $self->{reportfile};
+
+ $self->reset_parse_errors;
+
+ $self->{data} = [];
+ $self->set_unparsed_tail(undef);
+
+ my $expect = FIRST_HEADING;
+ my $entry = Dpkg::Changelog::Entry::Debian->new();
+ my @blanklines = ();
+ # To make version unique, for example for using as id.
+ my $unknowncounter = 1;
+ local $_;
+
+ while (<$fh>) {
+ chomp;
+ if (match_header($_)) {
+ unless ($expect eq FIRST_HEADING || $expect eq NEXT_OR_EOF) {
+ $self->parse_error($file, $.,
+ sprintf(g_('found start of entry where expected %s'),
+ $expect), "$_");
+ }
+ unless ($entry->is_empty) {
+ push @{$self->{data}}, $entry;
+ $entry = Dpkg::Changelog::Entry::Debian->new();
+ last if $self->abort_early();
+ }
+ $entry->set_part('header', $_);
+ foreach my $error ($entry->parse_header()) {
+ $self->parse_error($file, $., $error, $_);
+ }
+ $expect = START_CHANGES;
+ @blanklines = ();
+ } elsif (m/^(?:;;\s*)?Local variables:/io) {
+ # Save any trailing Emacs variables at end of file.
+ $self->set_unparsed_tail("$_\n" . (file_slurp($fh) // ''));
+ last;
+ } elsif (m/^vim:/io) {
+ # Save any trailing Vim modelines at end of file.
+ $self->set_unparsed_tail("$_\n" . (file_slurp($fh) // ''));
+ last;
+ } elsif (m/^\$\w+:.*\$/o) {
+ next; # skip stuff that look like a RCS keyword
+ } elsif (m/^\# /o) {
+ next; # skip comments, even that's not supported
+ } elsif (m{^/\*.*\*/}o) {
+ next; # more comments
+ } elsif (m/$ancient_delimiter_re/) {
+ # save entries on old changelog format verbatim
+ # we assume the rest of the file will be in old format once we
+ # hit it for the first time
+ $self->set_unparsed_tail("$_\n" . file_slurp($fh));
+ } elsif (m/^\S/) {
+ $self->parse_error($file, $., g_('badly formatted heading line'), "$_");
+ } elsif (match_trailer($_)) {
+ unless ($expect eq CHANGES_OR_TRAILER) {
+ $self->parse_error($file, $.,
+ sprintf(g_('found trailer where expected %s'), $expect), "$_");
+ }
+ $entry->set_part('trailer', $_);
+ $entry->extend_part('blank_after_changes', [ @blanklines ]);
+ @blanklines = ();
+ foreach my $error ($entry->parse_trailer()) {
+ $self->parse_error($file, $., $error, $_);
+ }
+ $expect = NEXT_OR_EOF;
+ } elsif (m/^ \-\-/) {
+ $self->parse_error($file, $., g_('badly formatted trailer line'), "$_");
+ } elsif (m/^\s{2,}(?:\S)/) {
+ unless ($expect eq START_CHANGES or $expect eq CHANGES_OR_TRAILER) {
+ $self->parse_error($file, $., sprintf(g_('found change data' .
+ ' where expected %s'), $expect), "$_");
+ if ($expect eq NEXT_OR_EOF and not $entry->is_empty) {
+ # lets assume we have missed the actual header line
+ push @{$self->{data}}, $entry;
+ $entry = Dpkg::Changelog::Entry::Debian->new();
+ $entry->set_part('header', 'unknown (unknown' . ($unknowncounter++) . ') unknown; urgency=unknown');
+ }
+ }
+ # Keep raw changes
+ $entry->extend_part('changes', [ @blanklines, $_ ]);
+ @blanklines = ();
+ $expect = CHANGES_OR_TRAILER;
+ } elsif (!m/\S/) {
+ if ($expect eq START_CHANGES) {
+ $entry->extend_part('blank_after_header', $_);
+ next;
+ } elsif ($expect eq NEXT_OR_EOF) {
+ $entry->extend_part('blank_after_trailer', $_);
+ next;
+ } elsif ($expect ne CHANGES_OR_TRAILER) {
+ $self->parse_error($file, $.,
+ sprintf(g_('found blank line where expected %s'), $expect));
+ }
+ push @blanklines, $_;
+ } else {
+ $self->parse_error($file, $., g_('unrecognized line'), "$_");
+ unless ($expect eq START_CHANGES or $expect eq CHANGES_OR_TRAILER) {
+ # lets assume change data if we expected it
+ $entry->extend_part('changes', [ @blanklines, $_]);
+ @blanklines = ();
+ $expect = CHANGES_OR_TRAILER;
+ }
+ }
+ }
+
+ unless ($expect eq NEXT_OR_EOF) {
+ $self->parse_error($file, $.,
+ sprintf(g_('found end of file where expected %s'),
+ $expect));
+ }
+ unless ($entry->is_empty) {
+ push @{$self->{data}}, $entry;
+ }
+
+ return scalar @{$self->{data}};
+}
+
+1;
+
+=back
+
+=head1 CHANGES
+
+=head2 Version 1.00 (dpkg 1.15.6)
+
+Mark the module as public.
+
+=head1 SEE ALSO
+
+Dpkg::Changelog
+
+=cut
diff --git a/scripts/Dpkg/Changelog/Entry.pm b/scripts/Dpkg/Changelog/Entry.pm
new file mode 100644
index 0000000..79b741d
--- /dev/null
+++ b/scripts/Dpkg/Changelog/Entry.pm
@@ -0,0 +1,324 @@
+# Copyright © 2009 Raphaël Hertzog <hertzog@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::Changelog::Entry;
+
+use strict;
+use warnings;
+
+our $VERSION = '1.01';
+
+use Carp;
+
+use Dpkg::Gettext;
+use Dpkg::ErrorHandling;
+use Dpkg::Control::Changelog;
+
+use overload
+ '""' => \&output,
+ 'eq' => sub { defined($_[1]) and "$_[0]" eq "$_[1]" },
+ fallback => 1;
+
+=encoding utf8
+
+=head1 NAME
+
+Dpkg::Changelog::Entry - represents a changelog entry
+
+=head1 DESCRIPTION
+
+This class represents a changelog entry. It is composed
+of a set of lines with specific purpose: a header line, changes lines, a
+trailer line. Blank lines can be between those kind of lines.
+
+=head1 METHODS
+
+=over 4
+
+=item $entry = Dpkg::Changelog::Entry->new()
+
+Creates a new object. It doesn't represent a real changelog entry
+until one has been successfully parsed or built from scratch.
+
+=cut
+
+sub new {
+ my $this = shift;
+ my $class = ref($this) || $this;
+
+ my $self = {
+ header => undef,
+ changes => [],
+ trailer => undef,
+ blank_after_header => [],
+ blank_after_changes => [],
+ blank_after_trailer => [],
+ };
+ bless $self, $class;
+ return $self;
+}
+
+=item $str = $entry->output()
+
+=item "$entry"
+
+Get a string representation of the changelog entry.
+
+=item $entry->output($fh)
+
+Print the string representation of the changelog entry to a
+filehandle.
+
+=cut
+
+sub _format_output_block {
+ my $lines = shift;
+ return join('', map { $_ . "\n" } @{$lines});
+}
+
+sub output {
+ my ($self, $fh) = @_;
+ my $str = '';
+ $str .= $self->{header} . "\n" if defined($self->{header});
+ $str .= _format_output_block($self->{blank_after_header});
+ $str .= _format_output_block($self->{changes});
+ $str .= _format_output_block($self->{blank_after_changes});
+ $str .= $self->{trailer} . "\n" if defined($self->{trailer});
+ $str .= _format_output_block($self->{blank_after_trailer});
+ print { $fh } $str if defined $fh;
+ return $str;
+}
+
+=item $entry->get_part($part)
+
+Return either a string (for a single line) or an array ref (for multiple
+lines) corresponding to the requested part. $part can be
+"header, "changes", "trailer", "blank_after_header",
+"blank_after_changes", "blank_after_trailer".
+
+=cut
+
+sub get_part {
+ my ($self, $part) = @_;
+ croak "invalid part of changelog entry: $part" unless exists $self->{$part};
+ return $self->{$part};
+}
+
+=item $entry->set_part($part, $value)
+
+Set the value of the corresponding part. $value can be a string
+or an array ref.
+
+=cut
+
+sub set_part {
+ my ($self, $part, $value) = @_;
+ croak "invalid part of changelog entry: $part" unless exists $self->{$part};
+ if (ref($self->{$part})) {
+ if (ref($value)) {
+ $self->{$part} = $value;
+ } else {
+ $self->{$part} = [ $value ];
+ }
+ } else {
+ $self->{$part} = $value;
+ }
+}
+
+=item $entry->extend_part($part, $value)
+
+Concatenate $value at the end of the part. If the part is already a
+multi-line value, $value is added as a new line otherwise it's
+concatenated at the end of the current line.
+
+=cut
+
+sub extend_part {
+ my ($self, $part, $value, @rest) = @_;
+ croak "invalid part of changelog entry: $part" unless exists $self->{$part};
+ if (ref($self->{$part})) {
+ if (ref($value)) {
+ push @{$self->{$part}}, @$value;
+ } else {
+ push @{$self->{$part}}, $value;
+ }
+ } else {
+ if (defined($self->{$part})) {
+ if (ref($value)) {
+ $self->{$part} = [ $self->{$part}, @$value ];
+ } else {
+ $self->{$part} .= $value;
+ }
+ } else {
+ $self->{$part} = $value;
+ }
+ }
+}
+
+=item $is_empty = $entry->is_empty()
+
+Returns 1 if the changelog entry doesn't contain anything at all.
+Returns 0 as soon as it contains something in any of its non-blank
+parts.
+
+=cut
+
+sub is_empty {
+ my $self = shift;
+ return !(defined($self->{header}) || defined($self->{trailer}) ||
+ scalar(@{$self->{changes}}));
+}
+
+=item $entry->normalize()
+
+Normalize the content. Strip whitespaces at end of lines, use a single
+empty line to separate each part.
+
+=cut
+
+sub normalize {
+ my $self = shift;
+ if (defined($self->{header})) {
+ $self->{header} =~ s/\s+$//g;
+ $self->{blank_after_header} = [''];
+ } else {
+ $self->{blank_after_header} = [];
+ }
+ if (scalar(@{$self->{changes}})) {
+ s/\s+$//g foreach @{$self->{changes}};
+ $self->{blank_after_changes} = [''];
+ } else {
+ $self->{blank_after_changes} = [];
+ }
+ if (defined($self->{trailer})) {
+ $self->{trailer} =~ s/\s+$//g;
+ $self->{blank_after_trailer} = [''];
+ } else {
+ $self->{blank_after_trailer} = [];
+ }
+}
+
+=item $src = $entry->get_source()
+
+Return the name of the source package associated to the changelog entry.
+
+=cut
+
+sub get_source {
+ return;
+}
+
+=item $ver = $entry->get_version()
+
+Return the version associated to the changelog entry.
+
+=cut
+
+sub get_version {
+ return;
+}
+
+=item @dists = $entry->get_distributions()
+
+Return a list of target distributions for this version.
+
+=cut
+
+sub get_distributions {
+ return;
+}
+
+=item $fields = $entry->get_optional_fields()
+
+Return a set of optional fields exposed by the changelog entry.
+It always returns a Dpkg::Control object (possibly empty though).
+
+=cut
+
+sub get_optional_fields {
+ return Dpkg::Control::Changelog->new();
+}
+
+=item $urgency = $entry->get_urgency()
+
+Return the urgency of the associated upload.
+
+=cut
+
+sub get_urgency {
+ return;
+}
+
+=item $maint = $entry->get_maintainer()
+
+Return the string identifying the person who signed this changelog entry.
+
+=cut
+
+sub get_maintainer {
+ return;
+}
+
+=item $time = $entry->get_timestamp()
+
+Return the timestamp of the changelog entry.
+
+=cut
+
+sub get_timestamp {
+ return;
+}
+
+=item $time = $entry->get_timepiece()
+
+Return the timestamp of the changelog entry as a Time::Piece object.
+
+This function might return undef if there was no timestamp.
+
+=cut
+
+sub get_timepiece {
+ return;
+}
+
+=item $str = $entry->get_dpkg_changes()
+
+Returns a string that is suitable for usage in a C<Changes> field
+in the output format of C<dpkg-parsechangelog>.
+
+=cut
+
+sub get_dpkg_changes {
+ my $self = shift;
+ my $header = $self->get_part('header') // '';
+ $header =~ s/\s+$//;
+ return "\n$header\n\n" . join("\n", @{$self->get_part('changes')});
+}
+
+=back
+
+=head1 CHANGES
+
+=head2 Version 1.01 (dpkg 1.18.8)
+
+New method: $entry->get_timepiece().
+
+=head2 Version 1.00 (dpkg 1.15.6)
+
+Mark the module as public.
+
+=cut
+
+1;
diff --git a/scripts/Dpkg/Changelog/Entry/Debian.pm b/scripts/Dpkg/Changelog/Entry/Debian.pm
new file mode 100644
index 0000000..fee5be8
--- /dev/null
+++ b/scripts/Dpkg/Changelog/Entry/Debian.pm
@@ -0,0 +1,462 @@
+# Copyright © 2009 Raphaël Hertzog <hertzog@debian.org>
+# Copyright © 2012-2013 Guillem Jover <guillem@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::Changelog::Entry::Debian;
+
+use strict;
+use warnings;
+
+our $VERSION = '2.00';
+our @EXPORT_OK = qw(
+ match_header
+ match_trailer
+ find_closes
+);
+
+use Exporter qw(import);
+use Time::Piece;
+
+use Dpkg::Gettext;
+use Dpkg::Control::Fields;
+use Dpkg::Control::Changelog;
+use Dpkg::Changelog::Entry;
+use Dpkg::Version;
+
+use parent qw(Dpkg::Changelog::Entry);
+
+=encoding utf8
+
+=head1 NAME
+
+Dpkg::Changelog::Entry::Debian - represents a Debian changelog entry
+
+=head1 DESCRIPTION
+
+This class represents a Debian changelog entry.
+It implements the generic interface Dpkg::Changelog::Entry.
+Only functions specific to this implementation are described below,
+the rest are inherited.
+
+=cut
+
+my $name_chars = qr/[-+0-9a-z.]/i;
+
+# The matched content is the source package name ($1), the version ($2),
+# the target distributions ($3) and the options on the rest of the line ($4).
+my $regex_header = qr{
+ ^
+ (\w$name_chars*) # Package name
+ \ \(([^\(\) \t]+)\) # Package version
+ ((?:\s+$name_chars+)+) # Target distribution
+ \; # Separator
+ (.*?) # Key=Value options
+ \s*$ # Trailing space
+}xi;
+
+# The matched content is the maintainer name ($1), its email ($2),
+# some blanks ($3) and the timestamp ($4), which is decomposed into
+# day of week ($6), date-time ($7) and this into month name ($8).
+my $regex_trailer = qr<
+ ^
+ \ \-\- # Trailer marker
+ \ (.*) # Maintainer name
+ \ \<(.*)\> # Maintainer email
+ (\ \ ?) # Blanks
+ (
+ ((\w+)\,\s*)? # Day of week (abbreviated)
+ (
+ \d{1,2}\s+ # Day of month
+ (\w+)\s+ # Month name (abbreviated)
+ \d{4}\s+ # Year
+ \d{1,2}:\d\d:\d\d\s+[-+]\d{4} # ISO 8601 date
+ )
+ )
+ \s*$ # Trailing space
+>xo;
+
+my %week_day = map { $_ => 1 } qw(Mon Tue Wed Thu Fri Sat Sun);
+my @month_abbrev = qw(
+ Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
+);
+my %month_abbrev = map { $_ => 1 } @month_abbrev;
+my @month_name = qw(
+ January February March April May June July
+ August September October November December
+);
+my %month_name = map { $month_name[$_] => $month_abbrev[$_] } 0 .. 11;
+
+=head1 METHODS
+
+=over 4
+
+=item @items = $entry->get_change_items()
+
+Return a list of change items. Each item contains at least one line.
+A change line starting with an asterisk denotes the start of a new item.
+Any change line like "C<[ Raphaël Hertzog ]>" is treated like an item of its
+own even if it starts a set of items attributed to this person (the
+following line necessarily starts a new item).
+
+=cut
+
+sub get_change_items {
+ my $self = shift;
+ my (@items, @blanks, $item);
+ foreach my $line (@{$self->get_part('changes')}) {
+ if ($line =~ /^\s*\*/) {
+ push @items, $item if defined $item;
+ $item = "$line\n";
+ } elsif ($line =~ /^\s*\[\s[^\]]+\s\]\s*$/) {
+ push @items, $item if defined $item;
+ push @items, "$line\n";
+ $item = undef;
+ @blanks = ();
+ } elsif ($line =~ /^\s*$/) {
+ push @blanks, "$line\n";
+ } else {
+ if (defined $item) {
+ $item .= "@blanks$line\n";
+ } else {
+ $item = "$line\n";
+ }
+ @blanks = ();
+ }
+ }
+ push @items, $item if defined $item;
+ return @items;
+}
+
+=item @errors = $entry->parse_header()
+
+=item @errors = $entry->parse_trailer()
+
+Return a list of errors. Each item in the list is an error message
+describing the problem. If the empty list is returned, no errors
+have been found.
+
+=cut
+
+sub parse_header {
+ my $self = shift;
+ my @errors;
+ if (defined($self->{header}) and $self->{header} =~ $regex_header) {
+ $self->{header_source} = $1;
+
+ my $version = Dpkg::Version->new($2);
+ my ($ok, $msg) = version_check($version);
+ if ($ok) {
+ $self->{header_version} = $version;
+ } else {
+ push @errors, sprintf(g_("version '%s' is invalid: %s"), $version, $msg);
+ }
+
+ @{$self->{header_dists}} = split ' ', $3;
+
+ my $options = $4;
+ $options =~ s/^\s+//;
+ my $f = Dpkg::Control::Changelog->new();
+ foreach my $opt (split(/\s*,\s*/, $options)) {
+ unless ($opt =~ m/^([-0-9a-z]+)\=\s*(.*\S)$/i) {
+ push @errors, sprintf(g_("bad key-value after ';': '%s'"), $opt);
+ next;
+ }
+ my ($k, $v) = (field_capitalize($1), $2);
+ if (exists $f->{$k}) {
+ push @errors, sprintf(g_('repeated key-value %s'), $k);
+ } else {
+ $f->{$k} = $v;
+ }
+ if ($k eq 'Urgency') {
+ push @errors, sprintf(g_('badly formatted urgency value: %s'), $v)
+ unless ($v =~ m/^([-0-9a-z]+)((\s+.*)?)$/i);
+ } elsif ($k eq 'Binary-Only') {
+ push @errors, sprintf(g_('bad binary-only value: %s'), $v)
+ unless ($v eq 'yes');
+ } elsif ($k =~ m/^X[BCS]+-/i) {
+ } else {
+ push @errors, sprintf(g_('unknown key-value %s'), $k);
+ }
+ }
+ $self->{header_fields} = $f;
+ } else {
+ push @errors, g_("the header doesn't match the expected regex");
+ }
+ return @errors;
+}
+
+sub parse_trailer {
+ my $self = shift;
+ my @errors;
+ if (defined($self->{trailer}) and $self->{trailer} =~ $regex_trailer) {
+ $self->{trailer_maintainer} = "$1 <$2>";
+
+ if ($3 ne ' ') {
+ push @errors, g_('badly formatted trailer line');
+ }
+
+ # Validate the week day. Date::Parse used to ignore it, but Time::Piece
+ # is much more strict and it does not gracefully handle bogus values.
+ if (defined $5 and not exists $week_day{$6}) {
+ push @errors, sprintf(g_('ignoring invalid week day \'%s\''), $6);
+ }
+
+ # Ignore the week day ('%a, '), as we have validated it above.
+ local $ENV{LC_ALL} = 'C';
+ eval {
+ my $tp = Time::Piece->strptime($7, '%d %b %Y %T %z');
+ $self->{trailer_timepiece} = $tp;
+ } or do {
+ # Validate the month. Date::Parse used to accept both abbreviated
+ # and full months, but Time::Piece strptime() implementation only
+ # matches the abbreviated one with %b, which is what we want anyway.
+ if (not exists $month_abbrev{$8}) {
+ # We have to nest the conditionals because May is the same in
+ # full and abbreviated forms!
+ if (exists $month_name{$8}) {
+ push @errors, sprintf(g_('uses full \'%s\' instead of abbreviated month name \'%s\''),
+ $8, $month_name{$8});
+ } else {
+ push @errors, sprintf(g_('invalid abbreviated month name \'%s\''), $8);
+ }
+ }
+ push @errors, sprintf(g_("cannot parse non-conformant date '%s'"), $7);
+ };
+ $self->{trailer_timestamp_date} = $4;
+ } else {
+ push @errors, g_("the trailer doesn't match the expected regex");
+ }
+ return @errors;
+}
+
+=item $entry->normalize()
+
+Normalize the content. Strip whitespaces at end of lines, use a single
+empty line to separate each part.
+
+=cut
+
+sub normalize {
+ my $self = shift;
+ $self->SUPER::normalize();
+ #XXX: recreate header/trailer
+}
+
+=item $src = $entry->get_source()
+
+Return the name of the source package associated to the changelog entry.
+
+=cut
+
+sub get_source {
+ my $self = shift;
+
+ return $self->{header_source};
+}
+
+=item $ver = $entry->get_version()
+
+Return the version associated to the changelog entry.
+
+=cut
+
+sub get_version {
+ my $self = shift;
+
+ return $self->{header_version};
+}
+
+=item @dists = $entry->get_distributions()
+
+Return a list of target distributions for this version.
+
+=cut
+
+sub get_distributions {
+ my $self = shift;
+
+ if (defined $self->{header_dists}) {
+ return @{$self->{header_dists}} if wantarray;
+ return $self->{header_dists}[0];
+ }
+ return;
+}
+
+=item $fields = $entry->get_optional_fields()
+
+Return a set of optional fields exposed by the changelog entry.
+It always returns a Dpkg::Control object (possibly empty though).
+
+=cut
+
+sub get_optional_fields {
+ my $self = shift;
+ my $f;
+
+ if (defined $self->{header_fields}) {
+ $f = $self->{header_fields};
+ } else {
+ $f = Dpkg::Control::Changelog->new();
+ }
+
+ my @closes = find_closes(join("\n", @{$self->{changes}}));
+ if (@closes) {
+ $f->{Closes} = join(' ', @closes);
+ }
+
+ return $f;
+}
+
+=item $urgency = $entry->get_urgency()
+
+Return the urgency of the associated upload.
+
+=cut
+
+sub get_urgency {
+ my $self = shift;
+ my $f = $self->get_optional_fields();
+ if (exists $f->{Urgency}) {
+ $f->{Urgency} =~ s/\s.*$//;
+ return lc($f->{Urgency});
+ }
+ return;
+}
+
+=item $maint = $entry->get_maintainer()
+
+Return the string identifying the person who signed this changelog entry.
+
+=cut
+
+sub get_maintainer {
+ my $self = shift;
+
+ return $self->{trailer_maintainer};
+}
+
+=item $time = $entry->get_timestamp()
+
+Return the timestamp of the changelog entry.
+
+=cut
+
+sub get_timestamp {
+ my $self = shift;
+
+ return $self->{trailer_timestamp_date};
+}
+
+=item $time = $entry->get_timepiece()
+
+Return the timestamp of the changelog entry as a Time::Piece object.
+
+This function might return undef if there was no timestamp.
+
+=cut
+
+sub get_timepiece {
+ my $self = shift;
+
+ return $self->{trailer_timepiece};
+}
+
+=back
+
+=head1 UTILITY FUNCTIONS
+
+=over 4
+
+=item $bool = match_header($line)
+
+Checks if the line matches a valid changelog header line.
+
+=cut
+
+sub match_header {
+ my $line = shift;
+
+ return $line =~ /$regex_header/;
+}
+
+=item $bool = match_trailer($line)
+
+Checks if the line matches a valid changelog trailing line.
+
+=cut
+
+sub match_trailer {
+ my $line = shift;
+
+ return $line =~ /$regex_trailer/;
+}
+
+=item @closed_bugs = find_closes($changes)
+
+Takes one string as argument and finds "Closes: #123456, #654321" statements
+as supported by the Debian Archive software in it. Returns all closed bug
+numbers in an array.
+
+=cut
+
+sub find_closes {
+ my $changes = shift;
+ my %closes;
+
+ while ($changes && ($changes =~ m{
+ closes:\s*
+ (?:bug)?\#?\s?\d+
+ (?:,\s*(?:bug)?\#?\s?\d+)*
+ }pigx)) {
+ $closes{$_} = 1 foreach (${^MATCH} =~ /\#?\s?(\d+)/g);
+ }
+
+ my @closes = sort { $a <=> $b } keys %closes;
+ return @closes;
+}
+
+=back
+
+=head1 CHANGES
+
+=head2 Version 2.00 (dpkg 1.20.0)
+
+Remove methods: $entry->check_header(), $entry->check_trailer().
+
+Hide variables: $regex_header, $regex_trailer.
+
+=head2 Version 1.03 (dpkg 1.18.8)
+
+New methods: $entry->get_timepiece().
+
+=head2 Version 1.02 (dpkg 1.18.5)
+
+New methods: $entry->parse_header(), $entry->parse_trailer().
+
+Deprecated methods: $entry->check_header(), $entry->check_trailer().
+
+=head2 Version 1.01 (dpkg 1.17.2)
+
+New functions: match_header(), match_trailer()
+
+Deprecated variables: $regex_header, $regex_trailer
+
+=head2 Version 1.00 (dpkg 1.15.6)
+
+Mark the module as public.
+
+=cut
+
+1;
diff --git a/scripts/Dpkg/Changelog/Parse.pm b/scripts/Dpkg/Changelog/Parse.pm
new file mode 100644
index 0000000..ec9e9ad
--- /dev/null
+++ b/scripts/Dpkg/Changelog/Parse.pm
@@ -0,0 +1,197 @@
+# Copyright © 2005, 2007 Frank Lichtenheld <frank@lichtenheld.de>
+# Copyright © 2009 Raphaël Hertzog <hertzog@debian.org>
+# Copyright © 2010, 2012-2015 Guillem Jover <guillem@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+=encoding utf8
+
+=head1 NAME
+
+Dpkg::Changelog::Parse - generic changelog parser for dpkg-parsechangelog
+
+=head1 DESCRIPTION
+
+This module provides a set of functions which reproduce all the features
+of dpkg-parsechangelog.
+
+=cut
+
+package Dpkg::Changelog::Parse;
+
+use strict;
+use warnings;
+
+our $VERSION = '2.01';
+our @EXPORT = qw(
+ changelog_parse
+);
+
+use Exporter qw(import);
+use List::Util qw(none);
+
+use Dpkg ();
+use Dpkg::Gettext;
+use Dpkg::ErrorHandling;
+use Dpkg::Control::Changelog;
+
+sub _changelog_detect_format {
+ my $file = shift;
+ my $format = 'debian';
+
+ # Extract the format from the changelog file if possible
+ if ($file ne '-') {
+ local $_;
+
+ open my $format_fh, '<', $file
+ or syserr(g_('cannot open file %s'), $file);
+ if (-s $format_fh > 4096) {
+ seek $format_fh, -4096, 2
+ or syserr(g_('cannot seek into file %s'), $file);
+ }
+ while (<$format_fh>) {
+ $format = $1 if m/\schangelog-format:\s+([0-9a-z]+)\W/;
+ }
+ close $format_fh;
+ }
+
+ return $format;
+}
+
+=head1 FUNCTIONS
+
+=over 4
+
+=item $fields = changelog_parse(%opt)
+
+This function will parse a changelog. In list context, it returns as many
+Dpkg::Control objects as the parser did create. In scalar context, it will
+return only the first one. If the parser did not return any data, it will
+return an empty list in list context or undef on scalar context. If the
+parser failed, it will die. Any parse errors will be printed as warnings
+on standard error, but this can be disabled by passing $opt{verbose} to 0.
+
+The changelog file that is parsed is F<debian/changelog> by default but it
+can be overridden with $opt{file}. The changelog name used in output messages
+can be specified with $opt{label}, otherwise it will default to $opt{file}.
+The default output format is "dpkg" but it can be overridden with $opt{format}.
+
+The parsing itself is done by a parser module (searched in the standard
+perl library directories. That module is named according to the format that
+it is able to parse, with the name capitalized. By default it is either
+Dpkg::Changelog::Debian (from the "debian" format) or the format name looked
+up in the 40 last lines of the changelog itself (extracted with this perl
+regular expression "\schangelog-format:\s+([0-9a-z]+)\W"). But it can be
+overridden with $opt{changelogformat}.
+
+If $opt{compression} is false, the file will be loaded without compression
+support, otherwise by default compression support is disabled if the file
+is the default.
+
+All the other keys in %opt are forwarded to the parser module constructor.
+
+=cut
+
+sub changelog_parse {
+ my (%options) = @_;
+
+ $options{verbose} //= 1;
+ $options{file} //= 'debian/changelog';
+ $options{label} //= $options{file};
+ $options{changelogformat} //= _changelog_detect_format($options{file});
+ $options{format} //= 'dpkg';
+ $options{compression} //= $options{file} ne 'debian/changelog';
+
+ my @range_opts = qw(since until from to offset count reverse all);
+ $options{all} = 1 if exists $options{all};
+ if (none { defined $options{$_} } @range_opts) {
+ $options{count} = 1;
+ }
+ my $range;
+ foreach my $opt (@range_opts) {
+ $range->{$opt} = $options{$opt} if exists $options{$opt};
+ }
+
+ # Find the right changelog parser.
+ my $format = ucfirst lc $options{changelogformat};
+ my $changes;
+ eval qq{
+ pop \@INC if \$INC[-1] eq '.';
+ require Dpkg::Changelog::$format;
+ \$changes = Dpkg::Changelog::$format->new();
+ };
+ error(g_('changelog format %s is unknown: %s'), $format, $@) if $@;
+ error(g_('changelog format %s is not a Dpkg::Changelog class'), $format)
+ unless $changes->isa('Dpkg::Changelog');
+ $changes->set_options(reportfile => $options{label},
+ verbose => $options{verbose},
+ range => $range);
+
+ # Load and parse the changelog.
+ $changes->load($options{file}, compression => $options{compression})
+ or error(g_('fatal error occurred while parsing %s'), $options{file});
+
+ # Get the output into several Dpkg::Control objects.
+ my @res;
+ if ($options{format} eq 'dpkg') {
+ push @res, $changes->format_range('dpkg', $range);
+ } elsif ($options{format} eq 'rfc822') {
+ push @res, $changes->format_range('rfc822', $range);
+ } else {
+ error(g_('unknown output format %s'), $options{format});
+ }
+
+ if (wantarray) {
+ return @res;
+ } else {
+ return $res[0] if @res;
+ return;
+ }
+}
+
+=back
+
+=head1 CHANGES
+
+=head2 Version 2.01 (dpkg 1.20.6)
+
+New option: 'verbose' in changelog_parse().
+
+=head2 Version 2.00 (dpkg 1.20.0)
+
+Remove functions: changelog_parse_debian(), changelog_parse_plugin().
+
+Remove warnings: For options 'forceplugin', 'libdir'.
+
+=head2 Version 1.03 (dpkg 1.19.0)
+
+New option: 'compression' in changelog_parse().
+
+=head2 Version 1.02 (dpkg 1.18.8)
+
+Deprecated functions: changelog_parse_debian(), changelog_parse_plugin().
+
+Obsolete options: forceplugin, libdir.
+
+=head2 Version 1.01 (dpkg 1.18.2)
+
+New functions: changelog_parse_debian(), changelog_parse_plugin().
+
+=head2 Version 1.00 (dpkg 1.15.6)
+
+Mark the module as public.
+
+=cut
+
+1;
diff --git a/scripts/Dpkg/Checksums.pm b/scripts/Dpkg/Checksums.pm
new file mode 100644
index 0000000..4744447
--- /dev/null
+++ b/scripts/Dpkg/Checksums.pm
@@ -0,0 +1,430 @@
+# Copyright © 2008 Frank Lichtenheld <djpig@debian.org>
+# Copyright © 2008, 2012-2015 Guillem Jover <guillem@debian.org>
+# Copyright © 2010 Raphaël Hertzog <hertzog@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::Checksums;
+
+use strict;
+use warnings;
+
+our $VERSION = '1.04';
+our @EXPORT = qw(
+ checksums_is_supported
+ checksums_get_list
+ checksums_get_property
+);
+
+use Exporter qw(import);
+use Digest;
+
+use Dpkg::Gettext;
+use Dpkg::ErrorHandling;
+
+=encoding utf8
+
+=head1 NAME
+
+Dpkg::Checksums - generate and manipulate file checksums
+
+=head1 DESCRIPTION
+
+This module provides a class that can generate and manipulate
+various file checksums as well as some methods to query information
+about supported checksums.
+
+=head1 FUNCTIONS
+
+=over 4
+
+=cut
+
+my $CHECKSUMS = {
+ md5 => {
+ name => 'MD5',
+ regex => qr/[0-9a-f]{32}/,
+ strong => 0,
+ },
+ sha1 => {
+ name => 'SHA-1',
+ regex => qr/[0-9a-f]{40}/,
+ strong => 0,
+ },
+ sha256 => {
+ name => 'SHA-256',
+ regex => qr/[0-9a-f]{64}/,
+ strong => 1,
+ },
+};
+
+=item @list = checksums_get_list()
+
+Returns the list of supported checksums algorithms.
+
+=cut
+
+sub checksums_get_list() {
+ my @list = sort keys %{$CHECKSUMS};
+ return @list;
+}
+
+=item $bool = checksums_is_supported($alg)
+
+Returns a boolean indicating whether the given checksum algorithm is
+supported. The checksum algorithm is case-insensitive.
+
+=cut
+
+sub checksums_is_supported($) {
+ my $alg = shift;
+ return exists $CHECKSUMS->{lc($alg)};
+}
+
+=item $value = checksums_get_property($alg, $property)
+
+Returns the requested property of the checksum algorithm. Returns undef if
+either the property or the checksum algorithm doesn't exist. Valid
+properties currently include "name" (returns the name of the digest
+algorithm), "regex" for the regular expression describing the common
+string representation of the checksum, and "strong" for a boolean describing
+whether the checksum algorithm is considered cryptographically strong.
+
+=cut
+
+sub checksums_get_property($$) {
+ my ($alg, $property) = @_;
+
+ return unless checksums_is_supported($alg);
+ return $CHECKSUMS->{lc($alg)}{$property};
+}
+
+=back
+
+=head1 METHODS
+
+=over 4
+
+=item $ck = Dpkg::Checksums->new()
+
+Create a new Dpkg::Checksums object. This object is able to store
+the checksums of several files to later export them or verify them.
+
+=cut
+
+sub new {
+ my ($this, %opts) = @_;
+ my $class = ref($this) || $this;
+
+ my $self = {};
+ bless $self, $class;
+ $self->reset();
+
+ return $self;
+}
+
+=item $ck->reset()
+
+Forget about all checksums stored. The object is again in the same state
+as if it was newly created.
+
+=cut
+
+sub reset {
+ my $self = shift;
+
+ $self->{files} = [];
+ $self->{checksums} = {};
+ $self->{size} = {};
+}
+
+=item $ck->add_from_file($filename, %opts)
+
+Add or verify checksums information for the file $filename. The file must
+exists for the call to succeed. If you don't want the given filename to
+appear when you later export the checksums you might want to set the "key"
+option with the public name that you want to use. Also if you don't want
+to generate all the checksums, you can pass an array reference of the
+wanted checksums in the "checksums" option.
+
+It the object already contains checksums information associated the
+filename (or key), it will error out if the newly computed information
+does not match what's stored, and the caller did not request that it be
+updated with the boolean "update" option.
+
+=cut
+
+sub add_from_file {
+ my ($self, $file, %opts) = @_;
+ my $key = exists $opts{key} ? $opts{key} : $file;
+ my @alg;
+ if (exists $opts{checksums}) {
+ push @alg, map { lc } @{$opts{checksums}};
+ } else {
+ push @alg, checksums_get_list();
+ }
+
+ push @{$self->{files}}, $key unless exists $self->{size}{$key};
+ (my @s = stat($file)) or syserr(g_('cannot fstat file %s'), $file);
+ if (not $opts{update} and exists $self->{size}{$key} and
+ $self->{size}{$key} != $s[7]) {
+ error(g_('file %s has size %u instead of expected %u'),
+ $file, $s[7], $self->{size}{$key});
+ }
+ $self->{size}{$key} = $s[7];
+
+ foreach my $alg (@alg) {
+ my $digest = Digest->new($CHECKSUMS->{$alg}{name});
+ open my $fh, '<', $file or syserr(g_('cannot open file %s'), $file);
+ $digest->addfile($fh);
+ close $fh;
+
+ my $newsum = $digest->hexdigest;
+ if (not $opts{update} and exists $self->{checksums}{$key}{$alg} and
+ $self->{checksums}{$key}{$alg} ne $newsum) {
+ error(g_('file %s has checksum %s instead of expected %s (algorithm %s)'),
+ $file, $newsum, $self->{checksums}{$key}{$alg}, $alg);
+ }
+ $self->{checksums}{$key}{$alg} = $newsum;
+ }
+}
+
+=item $ck->add_from_string($alg, $value, %opts)
+
+Add checksums of type $alg that are stored in the $value variable.
+$value can be multi-lines, each line should be a space separated list
+of checksum, file size and filename. Leading or trailing spaces are
+not allowed.
+
+It the object already contains checksums information associated to the
+filenames, it will error out if the newly read information does not match
+what's stored, and the caller did not request that it be updated with
+the boolean "update" option.
+
+=cut
+
+sub add_from_string {
+ my ($self, $alg, $fieldtext, %opts) = @_;
+ $alg = lc($alg);
+ my $rx_fname = qr/[0-9a-zA-Z][-+:.,=0-9a-zA-Z_~]+/;
+ my $regex = checksums_get_property($alg, 'regex');
+ my $checksums = $self->{checksums};
+
+ for my $checksum (split /\n */, $fieldtext) {
+ next if $checksum eq '';
+ unless ($checksum =~ m/^($regex)\s+(\d+)\s+($rx_fname)$/) {
+ error(g_('invalid line in %s checksums string: %s'),
+ $alg, $checksum);
+ }
+ my ($sum, $size, $file) = ($1, $2, $3);
+ if (not $opts{update} and exists($checksums->{$file}{$alg})
+ and $checksums->{$file}{$alg} ne $sum) {
+ error(g_("conflicting checksums '%s' and '%s' for file '%s'"),
+ $checksums->{$file}{$alg}, $sum, $file);
+ }
+ if (not $opts{update} and exists $self->{size}{$file}
+ and $self->{size}{$file} != $size) {
+ error(g_("conflicting file sizes '%u' and '%u' for file '%s'"),
+ $self->{size}{$file}, $size, $file);
+ }
+ push @{$self->{files}}, $file unless exists $self->{size}{$file};
+ $checksums->{$file}{$alg} = $sum;
+ $self->{size}{$file} = $size;
+ }
+}
+
+=item $ck->add_from_control($control, %opts)
+
+Read checksums from Checksums-* fields stored in the Dpkg::Control object
+$control. It uses $self->add_from_string() on the field values to do the
+actual work.
+
+If the option "use_files_for_md5" evaluates to true, then the "Files"
+field is used in place of the "Checksums-Md5" field. By default the option
+is false.
+
+=cut
+
+sub add_from_control {
+ my ($self, $control, %opts) = @_;
+ $opts{use_files_for_md5} //= 0;
+ foreach my $alg (checksums_get_list()) {
+ my $key = "Checksums-$alg";
+ $key = 'Files' if ($opts{use_files_for_md5} and $alg eq 'md5');
+ if (exists $control->{$key}) {
+ $self->add_from_string($alg, $control->{$key}, %opts);
+ }
+ }
+}
+
+=item @files = $ck->get_files()
+
+Return the list of files whose checksums are stored in the object.
+
+=cut
+
+sub get_files {
+ my $self = shift;
+ return @{$self->{files}};
+}
+
+=item $bool = $ck->has_file($file)
+
+Return true if we have checksums for the given file. Returns false
+otherwise.
+
+=cut
+
+sub has_file {
+ my ($self, $file) = @_;
+ return exists $self->{size}{$file};
+}
+
+=item $ck->remove_file($file)
+
+Remove all checksums of the given file.
+
+=cut
+
+sub remove_file {
+ my ($self, $file) = @_;
+ return unless $self->has_file($file);
+ delete $self->{checksums}{$file};
+ delete $self->{size}{$file};
+ @{$self->{files}} = grep { $_ ne $file } $self->get_files();
+}
+
+=item $checksum = $ck->get_checksum($file, $alg)
+
+Return the checksum of type $alg for the requested $file. This will not
+compute the checksum but only return the checksum stored in the object, if
+any.
+
+If $alg is not defined, it returns a reference to a hash: keys are
+the checksum algorithms and values are the checksums themselves. The
+hash returned must not be modified, it's internal to the object.
+
+=cut
+
+sub get_checksum {
+ my ($self, $file, $alg) = @_;
+ $alg = lc($alg) if defined $alg;
+ if (exists $self->{checksums}{$file}) {
+ return $self->{checksums}{$file} unless defined $alg;
+ return $self->{checksums}{$file}{$alg};
+ }
+ return;
+}
+
+=item $size = $ck->get_size($file)
+
+Return the size of the requested file if it's available in the object.
+
+=cut
+
+sub get_size {
+ my ($self, $file) = @_;
+ return $self->{size}{$file};
+}
+
+=item $bool = $ck->has_strong_checksums($file)
+
+Return a boolean on whether the file has a strong checksum.
+
+=cut
+
+sub has_strong_checksums {
+ my ($self, $file) = @_;
+
+ foreach my $alg (checksums_get_list()) {
+ return 1 if defined $self->get_checksum($file, $alg) and
+ checksums_get_property($alg, 'strong');
+ }
+
+ return 0;
+}
+
+=item $ck->export_to_string($alg, %opts)
+
+Return a multi-line string containing the checksums of type $alg. The
+string can be stored as-is in a Checksum-* field of a Dpkg::Control
+object.
+
+=cut
+
+sub export_to_string {
+ my ($self, $alg, %opts) = @_;
+ my $res = '';
+ foreach my $file ($self->get_files()) {
+ my $sum = $self->get_checksum($file, $alg);
+ my $size = $self->get_size($file);
+ next unless defined $sum and defined $size;
+ $res .= "\n$sum $size $file";
+ }
+ return $res;
+}
+
+=item $ck->export_to_control($control, %opts)
+
+Export the checksums in the Checksums-* fields of the Dpkg::Control
+$control object.
+
+=cut
+
+sub export_to_control {
+ my ($self, $control, %opts) = @_;
+ $opts{use_files_for_md5} //= 0;
+ foreach my $alg (checksums_get_list()) {
+ my $key = "Checksums-$alg";
+ $key = 'Files' if ($opts{use_files_for_md5} and $alg eq 'md5');
+ $control->{$key} = $self->export_to_string($alg, %opts);
+ }
+}
+
+=back
+
+=head1 CHANGES
+
+=head2 Version 1.04 (dpkg 1.20.0)
+
+Remove warning: For obsolete property 'program'.
+
+=head2 Version 1.03 (dpkg 1.18.5)
+
+New property: Add new 'strong' property.
+
+New member: $ck->has_strong_checksums().
+
+=head2 Version 1.02 (dpkg 1.18.0)
+
+Obsolete property: Getting the 'program' checksum property will warn and
+return undef, the Digest module is used internally now.
+
+New property: Add new 'name' property with the name of the Digest algorithm
+to use.
+
+=head2 Version 1.01 (dpkg 1.17.6)
+
+New argument: Accept an options argument in $ck->export_to_string().
+
+New option: Accept new option 'update' in $ck->add_from_file() and
+$ck->add_from_control().
+
+=head2 Version 1.00 (dpkg 1.15.6)
+
+Mark the module as public.
+
+=cut
+
+1;
diff --git a/scripts/Dpkg/Compression.pm b/scripts/Dpkg/Compression.pm
new file mode 100644
index 0000000..189be8b
--- /dev/null
+++ b/scripts/Dpkg/Compression.pm
@@ -0,0 +1,448 @@
+# Copyright © 2007-2022 Guillem Jover <guillem@debian.org>
+# Copyright © 2010 Raphaël Hertzog <hertzog@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::Compression;
+
+use strict;
+use warnings;
+
+our $VERSION = '2.01';
+our @EXPORT = qw(
+ compression_is_supported
+ compression_get_list
+ compression_get_property
+ compression_guess_from_filename
+ compression_get_file_extension_regex
+ compression_get_file_extension
+ compression_get_default
+ compression_set_default
+ compression_get_default_level
+ compression_set_default_level
+ compression_get_level
+ compression_set_level
+ compression_is_valid_level
+ compression_get_threads
+ compression_set_threads
+ compression_get_cmdline_compress
+ compression_get_cmdline_decompress
+);
+
+use Exporter qw(import);
+use Config;
+use List::Util qw(any);
+
+use Dpkg::ErrorHandling;
+use Dpkg::Gettext;
+
+=encoding utf8
+
+=head1 NAME
+
+Dpkg::Compression - simple database of available compression methods
+
+=head1 DESCRIPTION
+
+This modules provides a few public functions and a public regex to
+interact with the set of supported compression methods.
+
+=cut
+
+my %COMP = (
+ gzip => {
+ file_ext => 'gz',
+ comp_prog => [ 'gzip', '-n' ],
+ decomp_prog => [ 'gunzip' ],
+ default_level => 9,
+ },
+ bzip2 => {
+ file_ext => 'bz2',
+ comp_prog => [ 'bzip2' ],
+ decomp_prog => [ 'bunzip2' ],
+ default_level => 9,
+ },
+ lzma => {
+ file_ext => 'lzma',
+ comp_prog => [ 'xz', '--format=lzma' ],
+ decomp_prog => [ 'unxz', '--format=lzma' ],
+ default_level => 6,
+ },
+ xz => {
+ file_ext => 'xz',
+ comp_prog => [ 'xz' ],
+ decomp_prog => [ 'unxz' ],
+ default_level => 6,
+ },
+);
+
+# The gzip --rsyncable option is not universally supported, so we need to
+# conditionally use it. Ideally we would invoke 'gzip --help' and check
+# whether the option is supported, but that would imply forking and executing
+# that process for any module that ends up loading this one, which is not
+# acceptable performance-wise. Instead we will approximate it by osname, which
+# is not ideal, but better than nothing.
+#
+# Requires GNU gzip >= 1.7 for the --rsyncable option. On AIX GNU gzip is
+# too old. On the BSDs they use their own implementation based on zlib,
+# which does not currently support the --rsyncable option.
+if (any { $Config{osname} eq $_ } qw(linux gnu solaris)) {
+ push @{$COMP{gzip}{comp_prog}}, '--rsyncable';
+}
+
+my $default_compression = 'xz';
+my $default_compression_level = undef;
+my $default_compression_threads = 0;
+
+my $regex = join '|', map { $_->{file_ext} } values %COMP;
+my $compression_re_file_ext = qr/(?:$regex)/;
+
+=head1 FUNCTIONS
+
+=over 4
+
+=item @list = compression_get_list()
+
+Returns a list of supported compression methods (sorted alphabetically).
+
+=cut
+
+sub compression_get_list {
+ my @list = sort keys %COMP;
+ return @list;
+}
+
+=item compression_is_supported($comp)
+
+Returns a boolean indicating whether the give compression method is
+known and supported.
+
+=cut
+
+sub compression_is_supported {
+ my $comp = shift;
+
+ return exists $COMP{$comp};
+}
+
+=item compression_get_property($comp, $property)
+
+Returns the requested property of the compression method. Returns undef if
+either the property or the compression method doesn't exist. Valid
+properties currently include "file_ext" for the file extension,
+"default_level" for the default compression level,
+"comp_prog" for the name of the compression program and "decomp_prog" for
+the name of the decompression program.
+
+This function is deprecated, please switch to one of the new specialized
+getters instead.
+
+=cut
+
+sub compression_get_property {
+ my ($comp, $property) = @_;
+
+ #warnings::warnif('deprecated',
+ # 'Dpkg::Compression::compression_get_property() is deprecated, ' .
+ # 'use one of the specialized getters instead');
+ return unless compression_is_supported($comp);
+ return $COMP{$comp}{$property} if exists $COMP{$comp}{$property};
+ return;
+}
+
+=item compression_guess_from_filename($filename)
+
+Returns the compression method that is likely used on the indicated
+filename based on its file extension.
+
+=cut
+
+sub compression_guess_from_filename {
+ my $filename = shift;
+ foreach my $comp (compression_get_list()) {
+ my $ext = $COMP{$comp}{file_ext};
+ if ($filename =~ /^(.*)\.\Q$ext\E$/) {
+ return $comp;
+ }
+ }
+ return;
+}
+
+=item $regex = compression_get_file_extension_regex()
+
+Returns a regex that matches a file extension of a file compressed with
+one of the supported compression methods.
+
+=cut
+
+sub compression_get_file_extension_regex {
+ return $compression_re_file_ext;
+}
+
+=item $ext = compression_get_file_extension($comp)
+
+Return the file extension for the compressor $comp.
+
+=cut
+
+sub compression_get_file_extension {
+ my $comp = shift;
+
+ error(g_('%s is not a supported compression'), $comp)
+ unless compression_is_supported($comp);
+
+ return $COMP{$comp}{file_ext};
+}
+
+=item $comp = compression_get_default()
+
+Return the default compression method. It is "xz" unless
+C<compression_set_default> has been used to change it.
+
+=cut
+
+sub compression_get_default {
+ return $default_compression;
+}
+
+=item compression_set_default($comp)
+
+Change the default compression method. Errors out if the
+given compression method is not supported.
+
+=cut
+
+sub compression_set_default {
+ my $method = shift;
+ error(g_('%s is not a supported compression'), $method)
+ unless compression_is_supported($method);
+ $default_compression = $method;
+}
+
+=item $level = compression_get_default_level()
+
+Return the global default compression level used when compressing data if
+it has been set, otherwise the default level for the default compressor.
+
+It's "9" for "gzip" and "bzip2", "6" for "xz" and "lzma", unless
+C<compression_set_default_level> has been used to change it.
+
+=cut
+
+sub compression_get_default_level {
+ if (defined $default_compression_level) {
+ return $default_compression_level;
+ } else {
+ return $COMP{$default_compression}{default_level};
+ }
+}
+
+=item compression_set_default_level($level)
+
+Change the global default compression level. Passing undef as the level will
+reset it to the global default compressor specific default, otherwise errors
+out if the level is not valid (see C<compression_is_valid_level>).
+
+=cut
+
+sub compression_set_default_level {
+ my $level = shift;
+ error(g_('%s is not a compression level'), $level)
+ if defined($level) and not compression_is_valid_level($level);
+ $default_compression_level = $level;
+}
+
+=item $level = compression_get_level($comp)
+
+Return the compression level used when compressing data with a specific
+compressor. The value returned is the specific compression level if it has
+been set, otherwise the global default compression level if it has been set,
+falling back to the specific default compression level.
+
+=cut
+
+sub compression_get_level {
+ my $comp = shift;
+
+ error(g_('%s is not a supported compression'), $comp)
+ unless compression_is_supported($comp);
+
+ return $COMP{$comp}{level} //
+ $default_compression_level //
+ $COMP{$comp}{default_level};
+}
+
+=item compression_set_level($comp, $level)
+
+Change the compression level for a specific compressor. Passing undef as
+the level will reset it to the specific default compressor level, otherwise
+errors out if the level is not valid (see C<compression_is_valid_level>).
+
+=cut
+
+sub compression_set_level {
+ my ($comp, $level) = @_;
+
+ error(g_('%s is not a supported compression'), $comp)
+ unless compression_is_supported($comp);
+ error(g_('%s is not a compression level'), $level)
+ if defined $level && ! compression_is_valid_level($level);
+
+ $COMP{$comp}{level} = $level;
+}
+
+=item compression_is_valid_level($level)
+
+Returns a boolean indicating whether $level is a valid compression level
+(it must be either a number between 1 and 9 or "fast" or "best")
+
+=cut
+
+sub compression_is_valid_level {
+ my $level = shift;
+ return $level =~ /^([1-9]|fast|best)$/;
+}
+
+=item $threads = compression_get_threads()
+
+Return the number of threads to use for compression and decompression.
+
+=cut
+
+sub compression_get_threads {
+ return $default_compression_threads;
+}
+
+=item compression_set_threads($threads)
+
+Change the threads to use for compression and decompression. Passing C<undef>
+or B<0> requests to use automatic mode, based on the current CPU cores on
+the system.
+
+=cut
+
+sub compression_set_threads {
+ my $threads = shift;
+
+ error(g_('compression threads %s is not a number'), $threads)
+ if defined $threads && $threads !~ m/^\d+$/;
+ $default_compression_threads = $threads;
+}
+
+=item @exec = compression_get_cmdline_compress($comp)
+
+Returns a list ready to be passed to C<exec>, its first element is the
+program name for compression and the following elements are parameters
+for the program.
+
+When executed the program will act as a filter between its standard input
+and its standard output.
+
+=cut
+
+sub compression_get_cmdline_compress {
+ my $comp = shift;
+
+ error(g_('%s is not a supported compression'), $comp)
+ unless compression_is_supported($comp);
+
+ my @prog = @{$COMP{$comp}{comp_prog}};
+ my $level = compression_get_level($comp);
+ if ($level =~ m/^[1-9]$/) {
+ push @prog, "-$level";
+ } else {
+ push @prog, "--$level";
+ }
+ my $threads = compression_get_threads();
+ if ($comp eq 'xz') {
+ # Do not generate warnings when adjusting memory usage, nor
+ # exit with non-zero due to those not emitted warnings.
+ push @prog, qw(--quiet --no-warn);
+
+ # Do not let xz fallback to single-threaded mode, to avoid
+ # non-reproducible output.
+ push @prog, '--no-adjust';
+
+ # The xz -T1 option selects a single-threaded mode which generates
+ # different output than in multi-threaded mode. To avoid the
+ # non-reproducible output we pass -T+1 (supported with xz >= 5.4.0)
+ # to request multi-threaded mode with a single thread.
+ push @prog, $threads == 1 ? '-T+1' : "-T$threads";
+ }
+ return @prog;
+}
+
+=item @exec = compression_get_cmdline_decompress($comp)
+
+Returns a list ready to be passed to C<exec>, its first element is the
+program name for decompression and the following elements are parameters
+for the program.
+
+When executed the program will act as a filter between its standard input
+and its standard output.
+
+=cut
+
+sub compression_get_cmdline_decompress {
+ my $comp = shift;
+
+ error(g_('%s is not a supported compression'), $comp)
+ unless compression_is_supported($comp);
+
+ my @prog = @{$COMP{$comp}{decomp_prog}};
+
+ my $threads = compression_get_threads();
+ if ($comp eq 'xz') {
+ push @prog, "-T$threads";
+ }
+
+ return @prog;
+}
+
+=back
+
+=head1 CHANGES
+
+=head2 Version 2.01 (dpkg 1.21.14)
+
+New functions: compression_get_file_extension(), compression_get_level(),
+compression_set_level(), compression_get_cmdline_compress(),
+compression_get_cmdline_decompress(), compression_get_threads() and
+compression_set_threads().
+
+Deprecated functions: compression_get_property().
+
+=head2 Version 2.00 (dpkg 1.20.0)
+
+Hide variables: $default_compression, $default_compression_level
+and $compression_re_file_ext.
+
+=head2 Version 1.02 (dpkg 1.17.2)
+
+New function: compression_get_file_extension_regex()
+
+Deprecated variables: $default_compression, $default_compression_level
+and $compression_re_file_ext
+
+=head2 Version 1.01 (dpkg 1.16.1)
+
+Default compression level is not global any more, it is per compressor type.
+
+=head2 Version 1.00 (dpkg 1.15.6)
+
+Mark the module as public.
+
+=cut
+
+1;
diff --git a/scripts/Dpkg/Compression/FileHandle.pm b/scripts/Dpkg/Compression/FileHandle.pm
new file mode 100644
index 0000000..5b3fd1c
--- /dev/null
+++ b/scripts/Dpkg/Compression/FileHandle.pm
@@ -0,0 +1,473 @@
+# Copyright © 2008-2010 Raphaël Hertzog <hertzog@debian.org>
+# Copyright © 2012-2014 Guillem Jover <guillem@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::Compression::FileHandle;
+
+use strict;
+use warnings;
+
+our $VERSION = '1.01';
+
+use Carp;
+
+use Dpkg::Compression;
+use Dpkg::Compression::Process;
+use Dpkg::Gettext;
+use Dpkg::ErrorHandling;
+
+use parent qw(IO::File Tie::Handle);
+
+# Useful reference to understand some kludges required to
+# have the class behave like a filehandle
+# http://blog.woobling.org/2009/10/are-filehandles-objects.html
+
+=encoding utf8
+
+=head1 NAME
+
+Dpkg::Compression::FileHandle - class dealing transparently with file compression
+
+=head1 SYNOPSIS
+
+ use Dpkg::Compression::FileHandle;
+
+ my ($fh, @lines);
+
+ $fh = Dpkg::Compression::FileHandle->new(filename => 'sample.gz');
+ print $fh "Something\n";
+ close $fh;
+
+ $fh = Dpkg::Compression::FileHandle->new();
+ open($fh, '>', 'sample.bz2');
+ print $fh "Something\n";
+ close $fh;
+
+ $fh = Dpkg::Compression::FileHandle->new();
+ $fh->open('sample.xz', 'w');
+ $fh->print("Something\n");
+ $fh->close();
+
+ $fh = Dpkg::Compression::FileHandle->new(filename => 'sample.gz');
+ @lines = <$fh>;
+ close $fh;
+
+ $fh = Dpkg::Compression::FileHandle->new();
+ open($fh, '<', 'sample.bz2');
+ @lines = <$fh>;
+ close $fh;
+
+ $fh = Dpkg::Compression::FileHandle->new();
+ $fh->open('sample.xz', 'r');
+ @lines = $fh->getlines();
+ $fh->close();
+
+=head1 DESCRIPTION
+
+Dpkg::Compression::FileHandle is a class that can be used
+like any filehandle and that deals transparently with compressed
+files. By default, the compression scheme is guessed from the filename
+but you can override this behaviour with the method C<set_compression>.
+
+If you don't open the file explicitly, it will be auto-opened on the
+first read or write operation based on the filename set at creation time
+(or later with the C<set_filename> method).
+
+Once a file has been opened, the filehandle must be closed before being
+able to open another file.
+
+=head1 STANDARD FUNCTIONS
+
+The standard functions acting on filehandles should accept a
+Dpkg::Compression::FileHandle object transparently including
+C<open> (only when using the variant with 3 parameters), C<close>,
+C<binmode>, C<eof>, C<fileno>, C<getc>, C<print>, C<printf>, C<read>,
+C<sysread>, C<say>, C<write>, C<syswrite>, C<seek>, C<sysseek>, C<tell>.
+
+Note however that C<seek> and C<sysseek> will only work on uncompressed
+files as compressed files are really pipes to the compressor programs
+and you can't seek on a pipe.
+
+=head1 FileHandle METHODS
+
+The class inherits from IO::File so all methods that work on this
+class should work for Dpkg::Compression::FileHandle too. There
+may be exceptions though.
+
+=head1 PUBLIC METHODS
+
+=over 4
+
+=item $fh = Dpkg::Compression::FileHandle->new(%opts)
+
+Creates a new filehandle supporting on-the-fly compression/decompression.
+Supported options are "filename", "compression", "compression_level" (see
+respective set_* functions) and "add_comp_ext". If "add_comp_ext"
+evaluates to true, then the extension corresponding to the selected
+compression scheme is automatically added to the recorded filename. It's
+obviously incompatible with automatic detection of the compression method.
+
+=cut
+
+# Class methods
+sub new {
+ my ($this, %args) = @_;
+ my $class = ref($this) || $this;
+ my $self = IO::File->new();
+ # Tying is required to overload the open functions and to auto-open
+ # the file on first read/write operation
+ tie *$self, $class, $self; ## no critic (Miscellanea::ProhibitTies)
+ bless $self, $class;
+ # Initializations
+ *$self->{compression} = 'auto';
+ *$self->{compressor} = Dpkg::Compression::Process->new();
+ *$self->{add_comp_ext} = $args{add_compression_extension} ||
+ $args{add_comp_ext} || 0;
+ *$self->{allow_sigpipe} = 0;
+ if (exists $args{filename}) {
+ $self->set_filename($args{filename});
+ }
+ if (exists $args{compression}) {
+ $self->set_compression($args{compression});
+ }
+ if (exists $args{compression_level}) {
+ $self->set_compression_level($args{compression_level});
+ }
+ return $self;
+}
+
+=item $fh->ensure_open($mode, %opts)
+
+Ensure the file is opened in the requested mode ("r" for read and "w" for
+write). The options are passed down to the compressor's spawn() call, if one
+is used. Opens the file with the recorded filename if needed. If the file
+is already open but not in the requested mode, then it errors out.
+
+=cut
+
+sub ensure_open {
+ my ($self, $mode, %opts) = @_;
+ if (exists *$self->{mode}) {
+ return if *$self->{mode} eq $mode;
+ croak "ensure_open requested incompatible mode: $mode";
+ } else {
+ # Sanitize options.
+ delete $opts{from_pipe};
+ delete $opts{from_file};
+ delete $opts{to_pipe};
+ delete $opts{to_file};
+
+ if ($mode eq 'w') {
+ $self->_open_for_write(%opts);
+ } elsif ($mode eq 'r') {
+ $self->_open_for_read(%opts);
+ } else {
+ croak "invalid mode in ensure_open: $mode";
+ }
+ }
+}
+
+##
+## METHODS FOR TIED HANDLE
+##
+sub TIEHANDLE {
+ my ($class, $self) = @_;
+ return $self;
+}
+
+sub WRITE {
+ my ($self, $scalar, $length, $offset) = @_;
+ $self->ensure_open('w');
+ return *$self->{file}->write($scalar, $length, $offset);
+}
+
+sub READ {
+ my ($self, $scalar, $length, $offset) = @_;
+ $self->ensure_open('r');
+ return *$self->{file}->read($scalar, $length, $offset);
+}
+
+sub READLINE {
+ my ($self) = shift;
+ $self->ensure_open('r');
+ return *$self->{file}->getlines() if wantarray;
+ return *$self->{file}->getline();
+}
+
+sub OPEN {
+ my ($self) = shift;
+ if (scalar(@_) == 2) {
+ my ($mode, $filename) = @_;
+ $self->set_filename($filename);
+ if ($mode eq '>') {
+ $self->_open_for_write();
+ } elsif ($mode eq '<') {
+ $self->_open_for_read();
+ } else {
+ croak 'Dpkg::Compression::FileHandle does not support ' .
+ "open() mode $mode";
+ }
+ } else {
+ croak 'Dpkg::Compression::FileHandle only supports open() ' .
+ 'with 3 parameters';
+ }
+ return 1; # Always works (otherwise errors out)
+}
+
+sub CLOSE {
+ my ($self) = shift;
+ my $ret = 1;
+ if (defined *$self->{file}) {
+ $ret = *$self->{file}->close(@_) if *$self->{file}->opened();
+ } else {
+ $ret = 0;
+ }
+ $self->_cleanup();
+ return $ret;
+}
+
+sub FILENO {
+ my ($self) = shift;
+ return *$self->{file}->fileno(@_) if defined *$self->{file};
+ return;
+}
+
+sub EOF {
+ # Since perl 5.12, an integer parameter is passed describing how the
+ # function got called, just ignore it.
+ my ($self, $param) = (shift, shift);
+ return *$self->{file}->eof(@_) if defined *$self->{file};
+ return 1;
+}
+
+sub SEEK {
+ my ($self) = shift;
+ return *$self->{file}->seek(@_) if defined *$self->{file};
+ return 0;
+}
+
+sub TELL {
+ my ($self) = shift;
+ return *$self->{file}->tell(@_) if defined *$self->{file};
+ return -1;
+}
+
+sub BINMODE {
+ my ($self) = shift;
+ return *$self->{file}->binmode(@_) if defined *$self->{file};
+ return;
+}
+
+##
+## NORMAL METHODS
+##
+
+=item $fh->set_compression($comp)
+
+Defines the compression method used. $comp should one of the methods supported by
+B<Dpkg::Compression> or "none" or "auto". "none" indicates that the file is
+uncompressed and "auto" indicates that the method must be guessed based
+on the filename extension used.
+
+=cut
+
+sub set_compression {
+ my ($self, $method) = @_;
+ if ($method ne 'none' and $method ne 'auto') {
+ *$self->{compressor}->set_compression($method);
+ }
+ *$self->{compression} = $method;
+}
+
+=item $fh->set_compression_level($level)
+
+Indicate the desired compression level. It should be a value accepted
+by the function C<compression_is_valid_level> of B<Dpkg::Compression>.
+
+=cut
+
+sub set_compression_level {
+ my ($self, $level) = @_;
+ *$self->{compressor}->set_compression_level($level);
+}
+
+=item $fh->set_filename($name, [$add_comp_ext])
+
+Use $name as filename when the file must be opened/created. If
+$add_comp_ext is passed, it indicates whether the default extension
+of the compression method must be automatically added to the filename
+(or not).
+
+=cut
+
+sub set_filename {
+ my ($self, $filename, $add_comp_ext) = @_;
+ *$self->{filename} = $filename;
+ # Automatically add compression extension to filename
+ if (defined($add_comp_ext)) {
+ *$self->{add_comp_ext} = $add_comp_ext;
+ }
+ my $comp_ext_regex = compression_get_file_extension_regex();
+ if (*$self->{add_comp_ext} and $filename =~ /\.$comp_ext_regex$/) {
+ warning('filename %s already has an extension of a compressed file ' .
+ 'and add_comp_ext is active', $filename);
+ }
+}
+
+=item $file = $fh->get_filename()
+
+Returns the filename that would be used when the filehandle must
+be opened (both in read and write mode). This function errors out
+if "add_comp_ext" is enabled while the compression method is set
+to "auto". The returned filename includes the extension of the compression
+method if "add_comp_ext" is enabled.
+
+=cut
+
+sub get_filename {
+ my $self = shift;
+ my $comp = *$self->{compression};
+ if (*$self->{add_comp_ext}) {
+ if ($comp eq 'auto') {
+ croak 'automatic detection of compression is ' .
+ 'incompatible with add_comp_ext';
+ } elsif ($comp eq 'none') {
+ return *$self->{filename};
+ } else {
+ return *$self->{filename} . '.' .
+ compression_get_file_extension($comp);
+ }
+ } else {
+ return *$self->{filename};
+ }
+}
+
+=item $ret = $fh->use_compression()
+
+Returns "0" if no compression is used and the compression method used
+otherwise. If the compression is set to "auto", the value returned
+depends on the extension of the filename obtained with the B<get_filename>
+method.
+
+=cut
+
+sub use_compression {
+ my $self = shift;
+ my $comp = *$self->{compression};
+ if ($comp eq 'none') {
+ return 0;
+ } elsif ($comp eq 'auto') {
+ $comp = compression_guess_from_filename($self->get_filename());
+ *$self->{compressor}->set_compression($comp) if $comp;
+ }
+ return $comp;
+}
+
+=item $real_fh = $fh->get_filehandle()
+
+Returns the real underlying filehandle. Useful if you want to pass it
+along in a derived class.
+
+=cut
+
+sub get_filehandle {
+ my $self = shift;
+ return *$self->{file} if exists *$self->{file};
+}
+
+## INTERNAL METHODS
+
+sub _open_for_write {
+ my ($self, %opts) = @_;
+ my $filehandle;
+
+ croak 'cannot reopen an already opened compressed file'
+ if exists *$self->{mode};
+
+ if ($self->use_compression()) {
+ *$self->{compressor}->compress(from_pipe => \$filehandle,
+ to_file => $self->get_filename(), %opts);
+ } else {
+ CORE::open($filehandle, '>', $self->get_filename)
+ or syserr(g_('cannot write %s'), $self->get_filename());
+ }
+ *$self->{mode} = 'w';
+ *$self->{file} = $filehandle;
+}
+
+sub _open_for_read {
+ my ($self, %opts) = @_;
+ my $filehandle;
+
+ croak 'cannot reopen an already opened compressed file'
+ if exists *$self->{mode};
+
+ if ($self->use_compression()) {
+ *$self->{compressor}->uncompress(to_pipe => \$filehandle,
+ from_file => $self->get_filename(), %opts);
+ *$self->{allow_sigpipe} = 1;
+ } else {
+ CORE::open($filehandle, '<', $self->get_filename)
+ or syserr(g_('cannot read %s'), $self->get_filename());
+ }
+ *$self->{mode} = 'r';
+ *$self->{file} = $filehandle;
+}
+
+sub _cleanup {
+ my $self = shift;
+ my $cmdline = *$self->{compressor}{cmdline} // '';
+ *$self->{compressor}->wait_end_process(nocheck => *$self->{allow_sigpipe});
+ if (*$self->{allow_sigpipe}) {
+ require POSIX;
+ unless (($? == 0) || (POSIX::WIFSIGNALED($?) &&
+ (POSIX::WTERMSIG($?) == POSIX::SIGPIPE()))) {
+ subprocerr($cmdline);
+ }
+ *$self->{allow_sigpipe} = 0;
+ }
+ delete *$self->{mode};
+ delete *$self->{file};
+}
+
+=back
+
+=head1 DERIVED CLASSES
+
+If you want to create a class that inherits from
+Dpkg::Compression::FileHandle you must be aware that
+the object is a reference to a GLOB that is returned by Symbol::gensym()
+and as such it's not a HASH.
+
+You can store internal data in a hash but you have to use
+C<*$self->{...}> to access the associated hash like in the example below:
+
+ sub set_option {
+ my ($self, $value) = @_;
+ *$self->{option} = $value;
+ }
+
+=head1 CHANGES
+
+=head2 Version 1.01 (dpkg 1.17.11)
+
+New argument: $fh->ensure_open() accepts an %opts argument.
+
+=head2 Version 1.00 (dpkg 1.15.6)
+
+Mark the module as public.
+
+=cut
+1;
diff --git a/scripts/Dpkg/Compression/Process.pm b/scripts/Dpkg/Compression/Process.pm
new file mode 100644
index 0000000..3f08d48
--- /dev/null
+++ b/scripts/Dpkg/Compression/Process.pm
@@ -0,0 +1,208 @@
+# Copyright © 2008-2010 Raphaël Hertzog <hertzog@debian.org>
+# Copyright © 2008-2022 Guillem Jover <guillem@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::Compression::Process;
+
+use strict;
+use warnings;
+
+our $VERSION = '1.00';
+
+use Carp;
+
+use Dpkg::Compression;
+use Dpkg::ErrorHandling;
+use Dpkg::Gettext;
+use Dpkg::IPC;
+
+=encoding utf8
+
+=head1 NAME
+
+Dpkg::Compression::Process - run compression/decompression processes
+
+=head1 DESCRIPTION
+
+This module provides an object oriented interface to run and manage
+compression/decompression processes.
+
+=head1 METHODS
+
+=over 4
+
+=item $proc = Dpkg::Compression::Process->new(%opts)
+
+Create a new instance of the object. Supported options are "compression"
+and "compression_level" (see corresponding set_* functions).
+
+=cut
+
+sub new {
+ my ($this, %args) = @_;
+ my $class = ref($this) || $this;
+ my $self = {};
+ bless $self, $class;
+ $self->set_compression($args{compression} || compression_get_default());
+ $self->set_compression_level($args{compression_level} ||
+ compression_get_default_level());
+ return $self;
+}
+
+=item $proc->set_compression($comp)
+
+Select the compression method to use. It errors out if the method is not
+supported according to C<compression_is_supported> (of
+B<Dpkg::Compression>).
+
+=cut
+
+sub set_compression {
+ my ($self, $method) = @_;
+ error(g_('%s is not a supported compression method'), $method)
+ unless compression_is_supported($method);
+ $self->{compression} = $method;
+}
+
+=item $proc->set_compression_level($level)
+
+Select the compression level to use. It errors out if the level is not
+valid according to C<compression_is_valid_level> (of
+B<Dpkg::Compression>).
+
+=cut
+
+sub set_compression_level {
+ my ($self, $level) = @_;
+
+ compression_set_level($self->{compression}, $level);
+}
+
+=item @exec = $proc->get_compress_cmdline()
+
+=item @exec = $proc->get_uncompress_cmdline()
+
+Returns a list ready to be passed to C<exec>, its first element is the
+program name (either for compression or decompression) and the following
+elements are parameters for the program.
+
+When executed the program acts as a filter between its standard input
+and its standard output.
+
+=cut
+
+sub get_compress_cmdline {
+ my $self = shift;
+
+ return compression_get_cmdline_compress($self->{compression});
+}
+
+sub get_uncompress_cmdline {
+ my $self = shift;
+
+ return compression_get_cmdline_decompress($self->{compression});
+}
+
+sub _check_opts {
+ my ($self, %opts) = @_;
+ # Check for proper cleaning before new start
+ error(g_('Dpkg::Compression::Process can only start one subprocess at a time'))
+ if $self->{pid};
+ # Check options
+ my $to = my $from = 0;
+ foreach my $thing (qw(file handle string pipe)) {
+ $to++ if $opts{"to_$thing"};
+ $from++ if $opts{"from_$thing"};
+ }
+ croak 'exactly one to_* parameter is needed' if $to != 1;
+ croak 'exactly one from_* parameter is needed' if $from != 1;
+ return %opts;
+}
+
+=item $proc->compress(%opts)
+
+Starts a compressor program. You must indicate where it will read its
+uncompressed data from and where it will write its compressed data to.
+This is accomplished by passing one parameter C<to_*> and one parameter
+C<from_*> as accepted by B<Dpkg::IPC::spawn>.
+
+You must call C<wait_end_process> after having called this method to
+properly close the sub-process (and verify that it exited without error).
+
+=cut
+
+sub compress {
+ my ($self, %opts) = @_;
+
+ $self->_check_opts(%opts);
+ my @prog = $self->get_compress_cmdline();
+ $opts{exec} = \@prog;
+ $self->{cmdline} = "@prog";
+ $self->{pid} = spawn(%opts);
+ delete $self->{pid} if $opts{to_string}; # wait_child already done
+}
+
+=item $proc->uncompress(%opts)
+
+Starts a decompressor program. You must indicate where it will read its
+compressed data from and where it will write its uncompressed data to.
+This is accomplished by passing one parameter C<to_*> and one parameter
+C<from_*> as accepted by B<Dpkg::IPC::spawn>.
+
+You must call C<wait_end_process> after having called this method to
+properly close the sub-process (and verify that it exited without error).
+
+=cut
+
+sub uncompress {
+ my ($self, %opts) = @_;
+
+ $self->_check_opts(%opts);
+ my @prog = $self->get_uncompress_cmdline();
+ $opts{exec} = \@prog;
+ $self->{cmdline} = "@prog";
+ $self->{pid} = spawn(%opts);
+ delete $self->{pid} if $opts{to_string}; # wait_child already done
+}
+
+=item $proc->wait_end_process(%opts)
+
+Call B<Dpkg::IPC::wait_child> to wait until the sub-process has exited
+and verify its return code. Any given option will be forwarded to
+the C<wait_child> function. Most notably you can use the "nocheck" option
+to verify the return code yourself instead of letting C<wait_child> do
+it for you.
+
+=cut
+
+sub wait_end_process {
+ my ($self, %opts) = @_;
+ $opts{cmdline} //= $self->{cmdline};
+ wait_child($self->{pid}, %opts) if $self->{pid};
+ delete $self->{pid};
+ delete $self->{cmdline};
+}
+
+=back
+
+=head1 CHANGES
+
+=head2 Version 1.00 (dpkg 1.15.6)
+
+Mark the module as public.
+
+=cut
+
+1;
diff --git a/scripts/Dpkg/Conf.pm b/scripts/Dpkg/Conf.pm
new file mode 100644
index 0000000..028a293
--- /dev/null
+++ b/scripts/Dpkg/Conf.pm
@@ -0,0 +1,269 @@
+# Copyright © 2009-2010 Raphaël Hertzog <hertzog@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::Conf;
+
+use strict;
+use warnings;
+
+our $VERSION = '1.04';
+
+use Carp;
+
+use Dpkg::Gettext;
+use Dpkg::ErrorHandling;
+
+use parent qw(Dpkg::Interface::Storable);
+
+use overload
+ '@{}' => sub { return [ $_[0]->get_options() ] },
+ fallback => 1;
+
+=encoding utf8
+
+=head1 NAME
+
+Dpkg::Conf - parse dpkg configuration files
+
+=head1 DESCRIPTION
+
+The Dpkg::Conf object can be used to read options from a configuration
+file. It can export an array that can then be parsed exactly like @ARGV.
+
+=head1 METHODS
+
+=over 4
+
+=item $conf = Dpkg::Conf->new(%opts)
+
+Create a new Dpkg::Conf object. Some options can be set through %opts:
+if allow_short evaluates to true (it defaults to false), then short
+options are allowed in the configuration file, they should be prepended
+with a single hyphen.
+
+=cut
+
+sub new {
+ my ($this, %opts) = @_;
+ my $class = ref($this) || $this;
+
+ my $self = {
+ options => [],
+ allow_short => 0,
+ };
+ foreach my $opt (keys %opts) {
+ $self->{$opt} = $opts{$opt};
+ }
+ bless $self, $class;
+
+ return $self;
+}
+
+=item @$conf
+
+=item @options = $conf->get_options()
+
+Returns the list of options that can be parsed like @ARGV.
+
+=cut
+
+sub get_options {
+ my $self = shift;
+
+ return @{$self->{options}};
+}
+
+=item $conf->load($file)
+
+Read options from a file. Return the number of options parsed.
+
+=item $conf->load_system_config($file)
+
+Read options from a system configuration file.
+
+Return the number of options parsed.
+
+=cut
+
+sub load_system_config {
+ my ($self, $file) = @_;
+
+ return 0 unless -e "$Dpkg::CONFDIR/$file";
+ return $self->load("$Dpkg::CONFDIR/$file");
+}
+
+=item $conf->load_user_config($file)
+
+Read options from a user configuration file. It will try to use the XDG
+directory, either $XDG_CONFIG_HOME/dpkg/ or $HOME/.config/dpkg/.
+
+Return the number of options parsed.
+
+=cut
+
+sub load_user_config {
+ my ($self, $file) = @_;
+
+ my $confdir = $ENV{XDG_CONFIG_HOME};
+ $confdir ||= $ENV{HOME} . '/.config' if length $ENV{HOME};
+
+ return 0 unless length $confdir;
+ return 0 unless -e "$confdir/dpkg/$file";
+ return $self->load("$confdir/dpkg/$file") if length $confdir;
+ return 0;
+}
+
+=item $conf->load_config($file)
+
+Read options from system and user configuration files.
+
+Return the number of options parsed.
+
+=cut
+
+sub load_config {
+ my ($self, $file) = @_;
+
+ my $nopts = 0;
+
+ $nopts += $self->load_system_config($file);
+ $nopts += $self->load_user_config($file);
+
+ return $nopts;
+}
+
+=item $conf->parse($fh)
+
+Parse options from a file handle. When called multiple times, the parsed
+options are accumulated.
+
+Return the number of options parsed.
+
+=cut
+
+sub parse {
+ my ($self, $fh, $desc) = @_;
+ my $count = 0;
+ local $_;
+
+ while (<$fh>) {
+ chomp;
+ s/^\s+//; # Strip leading spaces
+ s/\s+$//; # Strip trailing spaces
+ s/\s+=\s+/=/; # Remove spaces around the first =
+ s/\s+/=/ unless m/=/; # First spaces becomes = if no =
+ # Skip empty lines and comments
+ next if /^#/ or length == 0;
+ if (/^-[^-]/ and not $self->{allow_short}) {
+ warning(g_('short option not allowed in %s, line %d'), $desc, $.);
+ next;
+ }
+ if (/^([^=]+)(?:=(.*))?$/) {
+ my ($name, $value) = ($1, $2);
+ $name = "--$name" unless $name =~ /^-/;
+ if (defined $value) {
+ $value =~ s/^"(.*)"$/$1/ or $value =~ s/^'(.*)'$/$1/;
+ push @{$self->{options}}, "$name=$value";
+ } else {
+ push @{$self->{options}}, $name;
+ }
+ $count++;
+ } else {
+ warning(g_('invalid syntax for option in %s, line %d'), $desc, $.);
+ }
+ }
+ return $count;
+}
+
+=item $conf->filter(%opts)
+
+Filter the list of options, either removing or keeping all those that
+return true when $opts{remove}->($option) or $opts{keep}->($option) is called.
+
+=cut
+
+sub filter {
+ my ($self, %opts) = @_;
+ my $remove = $opts{remove} // sub { 0 };
+ my $keep = $opts{keep} // sub { 1 };
+
+ @{$self->{options}} = grep { not $remove->($_) and $keep->($_) }
+ @{$self->{options}};
+}
+
+=item $string = $conf->output([$fh])
+
+Write the options in the given filehandle (if defined) and return a string
+representation of the content (that would be) written.
+
+=item "$conf"
+
+Return a string representation of the content.
+
+=cut
+
+sub output {
+ my ($self, $fh) = @_;
+ my $ret = '';
+ foreach my $opt ($self->get_options()) {
+ $opt =~ s/^--//;
+ $opt =~ s/^([^=]+)=(.*)$/$1 = "$2"/;
+ $opt .= "\n";
+ print { $fh } $opt if defined $fh;
+ $ret .= $opt;
+ }
+ return $ret;
+}
+
+=item $conf->save($file)
+
+Save the options in a file.
+
+=back
+
+=head1 CHANGES
+
+=head2 Version 1.04 (dpkg 1.20.0)
+
+Remove croak: For 'format_argv' in $conf->filter().
+
+Remove methods: $conf->get(), $conf->set().
+
+=head2 Version 1.03 (dpkg 1.18.8)
+
+Obsolete option: 'format_argv' in $conf->filter().
+
+Obsolete methods: $conf->get(), $conf->set().
+
+New methods: $conf->load_system_config(), $conf->load_system_user(),
+$conf->load_config().
+
+=head2 Version 1.02 (dpkg 1.18.5)
+
+New option: Accept new option 'format_argv' in $conf->filter().
+
+New methods: $conf->get(), $conf->set().
+
+=head2 Version 1.01 (dpkg 1.15.8)
+
+New method: $conf->filter()
+
+=head2 Version 1.00 (dpkg 1.15.6)
+
+Mark the module as public.
+
+=cut
+
+1;
diff --git a/scripts/Dpkg/Control.pm b/scripts/Dpkg/Control.pm
new file mode 100644
index 0000000..7da5993
--- /dev/null
+++ b/scripts/Dpkg/Control.pm
@@ -0,0 +1,269 @@
+# Copyright © 2007-2009 Raphaël Hertzog <hertzog@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::Control;
+
+use strict;
+use warnings;
+
+our $VERSION = '1.03';
+our @EXPORT = qw(
+ CTRL_UNKNOWN
+ CTRL_INFO_SRC
+ CTRL_INFO_PKG
+ CTRL_INDEX_SRC
+ CTRL_INDEX_PKG
+ CTRL_REPO_RELEASE
+ CTRL_PKG_SRC
+ CTRL_PKG_DEB
+ CTRL_FILE_BUILDINFO
+ CTRL_FILE_CHANGES
+ CTRL_FILE_VENDOR
+ CTRL_FILE_STATUS
+ CTRL_CHANGELOG
+ CTRL_COPYRIGHT_HEADER
+ CTRL_COPYRIGHT_FILES
+ CTRL_COPYRIGHT_LICENSE
+ CTRL_TESTS
+);
+
+use Exporter qw(import);
+
+use Dpkg::Gettext;
+use Dpkg::ErrorHandling;
+use Dpkg::Control::Types;
+use Dpkg::Control::Hash;
+use Dpkg::Control::Fields;
+
+use parent qw(Dpkg::Control::Hash);
+
+=encoding utf8
+
+=head1 NAME
+
+Dpkg::Control - parse and manipulate official control-like information
+
+=head1 DESCRIPTION
+
+The Dpkg::Control object is a smart version of Dpkg::Control::Hash.
+It associates a type to the control information. That type can be
+used to know what fields are allowed and in what order they must be
+output.
+
+The types are constants that are exported by default. Here's the full
+list:
+
+=over 4
+
+=item CTRL_UNKNOWN
+
+This type is the default type, it indicates that the type of control
+information is not yet known.
+
+=item CTRL_INFO_SRC
+
+Corresponds to the first stanza in a F<debian/control> file in
+a Debian source package.
+
+=item CTRL_INFO_PKG
+
+Corresponds to subsequent stanza in a F<debian/control> file
+in a Debian source package.
+
+=item CTRL_REPO_RELEASE
+
+Corresponds to a F<Release> file in a repository.
+
+=item CTRL_INDEX_SRC
+
+Corresponds to a stanza in a F<Sources> file of a source package
+repository.
+
+=item CTRL_INDEX_PKG
+
+Corresponds to a stanza in a F<Packages> file of a binary package
+repository.
+
+=item CTRL_PKG_SRC
+
+Corresponds to a .dsc file of a Debian source package.
+
+=item CTRL_PKG_DEB
+
+Corresponds to the F<control> file generated by dpkg-gencontrol
+(F<DEBIAN/control>) and to the same file inside .deb packages.
+
+=item CTRL_FILE_BUILDINFO
+
+Corresponds to a .buildinfo file.
+
+=item CTRL_FILE_CHANGES
+
+Corresponds to a .changes file.
+
+=item CTRL_FILE_VENDOR
+
+Corresponds to a vendor file in $Dpkg::CONFDIR/origins/.
+
+=item CTRL_FILE_STATUS
+
+Corresponds to a stanza in dpkg's F<status> file ($Dpkg::ADMINDIR/status).
+
+=item CTRL_CHANGELOG
+
+Corresponds to the output of dpkg-parsechangelog.
+
+=item CTRL_COPYRIGHT_HEADER
+
+Corresponds to the header stanza in a F<debian/copyright> file in
+machine readable format.
+
+=item CTRL_COPYRIGHT_FILES
+
+Corresponds to a files stanza in a F<debian/copyright> file in
+machine readable format.
+
+=item CTRL_COPYRIGHT_LICENSE
+
+Corresponds to a license stanza in a F<debian/copyright> file in
+machine readable format.
+
+=item CTRL_TESTS
+
+Corresponds to a package tests control file in F<debian/tests/control>.
+
+=back
+
+=head1 METHODS
+
+All the methods of Dpkg::Control::Hash are available. Those listed below
+are either new or overridden with a different behaviour.
+
+=over 4
+
+=item $c = Dpkg::Control->new(%opts)
+
+If the "type" option is given, it's used to setup default values
+for other options. See set_options() for more details.
+
+=cut
+
+sub new {
+ my ($this, %opts) = @_;
+ my $class = ref($this) || $this;
+
+ my $self = Dpkg::Control::Hash->new();
+ bless $self, $class;
+ $self->set_options(%opts);
+
+ return $self;
+}
+
+=item $c->set_options(%opts)
+
+Changes the value of one or more options. If the "type" option is changed,
+it is used first to define default values for others options. The option
+"allow_pgp" is set to 1 for CTRL_PKG_SRC, CTRL_FILE_CHANGES and
+CTRL_REPO_RELEASE and to 0 otherwise. The option "drop_empty" is set to 0
+for CTRL_INFO_PKG and CTRL_INFO_SRC and to 1 otherwise. The option "name"
+is set to a textual description of the type of control information.
+
+The output order is also set to match the ordered list returned by
+Dpkg::Control::Fields::field_ordered_list($type).
+
+=cut
+
+sub set_options {
+ my ($self, %opts) = @_;
+ if (exists $opts{type}) {
+ my $t = $opts{type};
+ $$self->{allow_pgp} = ($t & (CTRL_PKG_SRC | CTRL_FILE_CHANGES | CTRL_REPO_RELEASE)) ? 1 : 0;
+ $$self->{drop_empty} = ($t & (CTRL_INFO_PKG | CTRL_INFO_SRC)) ? 0 : 1;
+ if ($t == CTRL_INFO_SRC) {
+ $$self->{name} = g_('general section of control info file');
+ } elsif ($t == CTRL_INFO_PKG) {
+ $$self->{name} = g_("package's section of control info file");
+ } elsif ($t == CTRL_CHANGELOG) {
+ $$self->{name} = g_('parsed version of changelog');
+ } elsif ($t == CTRL_COPYRIGHT_HEADER) {
+ $$self->{name} = g_('header stanza of copyright file');
+ } elsif ($t == CTRL_COPYRIGHT_FILES) {
+ $$self->{name} = g_('files stanza of copyright file');
+ } elsif ($t == CTRL_COPYRIGHT_HEADER) {
+ $$self->{name} = g_('license stanza of copyright file');
+ } elsif ($t == CTRL_TESTS) {
+ $$self->{name} = g_("package's tests control file");
+ } elsif ($t == CTRL_REPO_RELEASE) {
+ $$self->{name} = sprintf(g_("repository's %s file"), 'Release');
+ } elsif ($t == CTRL_INDEX_SRC) {
+ $$self->{name} = sprintf(g_("stanza in repository's %s file"), 'Sources');
+ } elsif ($t == CTRL_INDEX_PKG) {
+ $$self->{name} = sprintf(g_("stanza in repository's %s file"), 'Packages');
+ } elsif ($t == CTRL_PKG_SRC) {
+ $$self->{name} = sprintf(g_('%s file'), '.dsc');
+ } elsif ($t == CTRL_PKG_DEB) {
+ $$self->{name} = g_('control info of a .deb package');
+ } elsif ($t == CTRL_FILE_BUILDINFO) {
+ $$self->{name} = g_('build information file');
+ } elsif ($t == CTRL_FILE_CHANGES) {
+ $$self->{name} = sprintf(g_('%s file'), '.changes');
+ } elsif ($t == CTRL_FILE_VENDOR) {
+ $$self->{name} = g_('vendor file');
+ } elsif ($t == CTRL_FILE_STATUS) {
+ $$self->{name} = g_("stanza in dpkg's status file");
+ }
+ $self->set_output_order(field_ordered_list($opts{type}));
+ }
+
+ # Options set by the user override default values
+ $$self->{$_} = $opts{$_} foreach keys %opts;
+}
+
+=item $c->get_type()
+
+Returns the type of control information stored. See the type parameter
+set during new().
+
+=cut
+
+sub get_type {
+ my $self = shift;
+ return $$self->{type};
+}
+
+=back
+
+=head1 CHANGES
+
+=head2 Version 1.03 (dpkg 1.18.11)
+
+New type: CTRL_FILE_BUILDINFO.
+
+=head2 Version 1.02 (dpkg 1.18.8)
+
+New type: CTRL_TESTS.
+
+=head2 Version 1.01 (dpkg 1.18.5)
+
+New types: CTRL_REPO_RELEASE, CTRL_COPYRIGHT_HEADER, CTRL_COPYRIGHT_FILES,
+CTRL_COPYRIGHT_LICENSE.
+
+=head2 Version 1.00 (dpkg 1.15.6)
+
+Mark the module as public.
+
+=cut
+
+1;
diff --git a/scripts/Dpkg/Control/Changelog.pm b/scripts/Dpkg/Control/Changelog.pm
new file mode 100644
index 0000000..9184ced
--- /dev/null
+++ b/scripts/Dpkg/Control/Changelog.pm
@@ -0,0 +1,65 @@
+# Copyright © 2009 Raphaël Hertzog <hertzog@debian.org>
+
+# This program 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 of the License, or
+# (at your option) any later version.
+
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::Control::Changelog;
+
+use strict;
+use warnings;
+
+our $VERSION = '1.00';
+
+use Dpkg::Control;
+
+use parent qw(Dpkg::Control);
+
+=encoding utf8
+
+=head1 NAME
+
+Dpkg::Control::Changelog - represent info fields output by dpkg-parsechangelog
+
+=head1 DESCRIPTION
+
+This class derives directly from Dpkg::Control with the type
+CTRL_CHANGELOG.
+
+=head1 METHODS
+
+=over 4
+
+=item $c = Dpkg::Control::Changelog->new()
+
+Create a new empty set of changelog related fields.
+
+=cut
+
+sub new {
+ my $this = shift;
+ my $class = ref($this) || $this;
+ my $self = Dpkg::Control->new(type => CTRL_CHANGELOG, @_);
+ return bless $self, $class;
+}
+
+=back
+
+=head1 CHANGES
+
+=head2 Version 1.00 (dpkg 1.15.6)
+
+Mark the module as public.
+
+=cut
+
+1;
diff --git a/scripts/Dpkg/Control/Fields.pm b/scripts/Dpkg/Control/Fields.pm
new file mode 100644
index 0000000..33beeec
--- /dev/null
+++ b/scripts/Dpkg/Control/Fields.pm
@@ -0,0 +1,69 @@
+# Copyright © 2007-2009 Raphaël Hertzog <hertzog@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::Control::Fields;
+
+use strict;
+use warnings;
+
+our $VERSION = '1.00';
+our @EXPORT = @Dpkg::Control::FieldsCore::EXPORT;
+
+use Carp;
+use Exporter qw(import);
+
+use Dpkg::Control::FieldsCore;
+use Dpkg::Vendor qw(run_vendor_hook);
+
+# Register vendor specifics fields
+foreach my $op (run_vendor_hook('register-custom-fields')) {
+ next if not (defined $op and ref $op); # Skip when not implemented by vendor
+ my $func = shift @$op;
+ if ($func eq 'register') {
+ my ($field, $allowed_type, @opts) = @{$op};
+ field_register($field, $allowed_type, @opts);
+ } elsif ($func eq 'insert_before') {
+ my ($type, $ref, @fields) = @{$op};
+ field_insert_before($type, $ref, @fields);
+ } elsif ($func eq 'insert_after') {
+ my ($type, $ref, @fields) = @{$op};
+ field_insert_after($type, $ref, @fields);
+ } else {
+ croak "vendor hook register-custom-fields sent bad data: @$op";
+ }
+}
+
+=encoding utf8
+
+=head1 NAME
+
+Dpkg::Control::Fields - manage (list of official) control fields
+
+=head1 DESCRIPTION
+
+The module contains a list of vendor-neutral and vendor-specific fieldnames
+with associated meta-data explaining in which type of control information
+they are allowed. The vendor-neutral fieldnames and all functions are
+inherited from Dpkg::Control::FieldsCore.
+
+=head1 CHANGES
+
+=head2 Version 1.00 (dpkg 1.15.6)
+
+Mark the module as public.
+
+=cut
+
+1;
diff --git a/scripts/Dpkg/Control/FieldsCore.pm b/scripts/Dpkg/Control/FieldsCore.pm
new file mode 100644
index 0000000..77216c7
--- /dev/null
+++ b/scripts/Dpkg/Control/FieldsCore.pm
@@ -0,0 +1,1377 @@
+# Copyright © 2007-2009 Raphaël Hertzog <hertzog@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::Control::FieldsCore;
+
+use strict;
+use warnings;
+
+our $VERSION = '1.01';
+our @EXPORT = qw(
+ field_capitalize
+ field_is_official
+ field_is_allowed_in
+ field_transfer_single
+ field_transfer_all
+ field_parse_binary_source
+ field_list_src_dep
+ field_list_pkg_dep
+ field_get_dep_type
+ field_get_sep_type
+ field_ordered_list
+ field_register
+ field_insert_after
+ field_insert_before
+ FIELD_SEP_UNKNOWN
+ FIELD_SEP_SPACE
+ FIELD_SEP_COMMA
+ FIELD_SEP_LINE
+);
+
+use Exporter qw(import);
+
+use Dpkg::Gettext;
+use Dpkg::ErrorHandling;
+use Dpkg::Control::Types;
+
+use constant {
+ ALL_PKG => CTRL_INFO_PKG | CTRL_INDEX_PKG | CTRL_PKG_DEB | CTRL_FILE_STATUS,
+ ALL_SRC => CTRL_INFO_SRC | CTRL_INDEX_SRC | CTRL_PKG_SRC,
+ ALL_FILE_MANIFEST => CTRL_FILE_BUILDINFO | CTRL_FILE_CHANGES,
+ ALL_CHANGES => CTRL_FILE_CHANGES | CTRL_CHANGELOG,
+ ALL_COPYRIGHT => CTRL_COPYRIGHT_HEADER | CTRL_COPYRIGHT_FILES | CTRL_COPYRIGHT_LICENSE,
+};
+
+use constant {
+ FIELD_SEP_UNKNOWN => 0,
+ FIELD_SEP_SPACE => 1,
+ FIELD_SEP_COMMA => 2,
+ FIELD_SEP_LINE => 4,
+};
+
+# The canonical list of fields.
+
+# Note that fields used only in dpkg's available file are not listed.
+# Deprecated fields of dpkg's status file are also not listed.
+our %FIELDS = (
+ 'acquire-by-hash' => {
+ name => 'Acquire-By-Hash',
+ allowed => CTRL_REPO_RELEASE,
+ },
+ 'architecture' => {
+ name => 'Architecture',
+ allowed => (ALL_PKG | ALL_SRC | ALL_FILE_MANIFEST | CTRL_TESTS) & (~CTRL_INFO_SRC),
+ separator => FIELD_SEP_SPACE,
+ },
+ 'architectures' => {
+ name => 'Architectures',
+ allowed => CTRL_REPO_RELEASE,
+ separator => FIELD_SEP_SPACE,
+ },
+ 'auto-built-package' => {
+ name => 'Auto-Built-Package',
+ allowed => ALL_PKG & ~CTRL_INFO_PKG,
+ separator => FIELD_SEP_SPACE,
+ },
+ 'binary' => {
+ name => 'Binary',
+ allowed => CTRL_PKG_SRC | CTRL_INDEX_SRC | ALL_FILE_MANIFEST,
+ # XXX: This field values are separated either by space or comma
+ # depending on the context.
+ separator => FIELD_SEP_SPACE | FIELD_SEP_COMMA,
+ },
+ 'binary-only' => {
+ name => 'Binary-Only',
+ allowed => ALL_CHANGES,
+ },
+ 'binary-only-changes' => {
+ name => 'Binary-Only-Changes',
+ allowed => CTRL_FILE_BUILDINFO,
+ },
+ 'breaks' => {
+ name => 'Breaks',
+ allowed => ALL_PKG,
+ separator => FIELD_SEP_COMMA,
+ dependency => 'union',
+ dep_order => 7,
+ },
+ 'bugs' => {
+ name => 'Bugs',
+ allowed => (ALL_PKG | CTRL_INFO_SRC | CTRL_FILE_VENDOR) & (~CTRL_INFO_PKG),
+ },
+ 'build-architecture' => {
+ name => 'Build-Architecture',
+ allowed => CTRL_FILE_BUILDINFO,
+ },
+ 'build-conflicts' => {
+ name => 'Build-Conflicts',
+ allowed => ALL_SRC,
+ separator => FIELD_SEP_COMMA,
+ dependency => 'union',
+ dep_order => 4,
+ },
+ 'build-conflicts-arch' => {
+ name => 'Build-Conflicts-Arch',
+ allowed => ALL_SRC,
+ separator => FIELD_SEP_COMMA,
+ dependency => 'union',
+ dep_order => 5,
+ },
+ 'build-conflicts-indep' => {
+ name => 'Build-Conflicts-Indep',
+ allowed => ALL_SRC,
+ separator => FIELD_SEP_COMMA,
+ dependency => 'union',
+ dep_order => 6,
+ },
+ 'build-date' => {
+ name => 'Build-Date',
+ allowed => CTRL_FILE_BUILDINFO,
+ },
+ 'build-depends' => {
+ name => 'Build-Depends',
+ allowed => ALL_SRC,
+ separator => FIELD_SEP_COMMA,
+ dependency => 'normal',
+ dep_order => 1,
+ },
+ 'build-depends-arch' => {
+ name => 'Build-Depends-Arch',
+ allowed => ALL_SRC,
+ separator => FIELD_SEP_COMMA,
+ dependency => 'normal',
+ dep_order => 2,
+ },
+ 'build-depends-indep' => {
+ name => 'Build-Depends-Indep',
+ allowed => ALL_SRC,
+ separator => FIELD_SEP_COMMA,
+ dependency => 'normal',
+ dep_order => 3,
+ },
+ 'build-essential' => {
+ name => 'Build-Essential',
+ allowed => ALL_PKG,
+ },
+ 'build-kernel-version' => {
+ name => 'Build-Kernel-Version',
+ allowed => CTRL_FILE_BUILDINFO,
+ },
+ 'build-origin' => {
+ name => 'Build-Origin',
+ allowed => CTRL_FILE_BUILDINFO,
+ },
+ 'build-path' => {
+ name => 'Build-Path',
+ allowed => CTRL_FILE_BUILDINFO,
+ },
+ 'build-profiles' => {
+ name => 'Build-Profiles',
+ allowed => CTRL_INFO_PKG,
+ separator => FIELD_SEP_SPACE,
+ },
+ 'build-tainted-by' => {
+ name => 'Build-Tainted-By',
+ allowed => CTRL_FILE_BUILDINFO,
+ separator => FIELD_SEP_SPACE,
+ },
+ 'built-for-profiles' => {
+ name => 'Built-For-Profiles',
+ allowed => ALL_PKG | CTRL_FILE_CHANGES,
+ separator => FIELD_SEP_SPACE,
+ },
+ 'built-using' => {
+ name => 'Built-Using',
+ allowed => ALL_PKG,
+ separator => FIELD_SEP_COMMA,
+ dependency => 'union',
+ dep_order => 10,
+ },
+ 'butautomaticupgrades' => {
+ name => 'ButAutomaticUpgrades',
+ allowed => CTRL_REPO_RELEASE,
+ },
+ 'changed-by' => {
+ name => 'Changed-By',
+ allowed => CTRL_FILE_CHANGES,
+ },
+ 'changelogs' => {
+ name => 'Changelogs',
+ allowed => CTRL_REPO_RELEASE,
+ },
+ 'changes' => {
+ name => 'Changes',
+ allowed => ALL_CHANGES,
+ },
+ 'checksums-md5' => {
+ name => 'Checksums-Md5',
+ allowed => CTRL_PKG_SRC | CTRL_INDEX_SRC | ALL_FILE_MANIFEST,
+ },
+ 'checksums-sha1' => {
+ name => 'Checksums-Sha1',
+ allowed => CTRL_PKG_SRC | CTRL_INDEX_SRC | ALL_FILE_MANIFEST,
+ },
+ 'checksums-sha256' => {
+ name => 'Checksums-Sha256',
+ allowed => CTRL_PKG_SRC | CTRL_INDEX_SRC | ALL_FILE_MANIFEST,
+ },
+ 'classes' => {
+ name => 'Classes',
+ allowed => CTRL_TESTS,
+ separator => FIELD_SEP_COMMA,
+ },
+ 'closes' => {
+ name => 'Closes',
+ allowed => ALL_CHANGES,
+ separator => FIELD_SEP_SPACE,
+ },
+ 'codename' => {
+ name => 'Codename',
+ allowed => CTRL_REPO_RELEASE,
+ },
+ 'comment' => {
+ name => 'Comment',
+ allowed => ALL_COPYRIGHT,
+ },
+ 'components' => {
+ name => 'Components',
+ allowed => CTRL_REPO_RELEASE,
+ separator => FIELD_SEP_SPACE,
+ },
+ 'conffiles' => {
+ name => 'Conffiles',
+ allowed => CTRL_FILE_STATUS,
+ separator => FIELD_SEP_LINE | FIELD_SEP_SPACE,
+ },
+ 'config-version' => {
+ name => 'Config-Version',
+ allowed => CTRL_FILE_STATUS,
+ },
+ 'conflicts' => {
+ name => 'Conflicts',
+ allowed => ALL_PKG,
+ separator => FIELD_SEP_COMMA,
+ dependency => 'union',
+ dep_order => 6,
+ },
+ 'copyright' => {
+ name => 'Copyright',
+ allowed => CTRL_COPYRIGHT_HEADER | CTRL_COPYRIGHT_FILES,
+ },
+ 'date' => {
+ name => 'Date',
+ allowed => ALL_CHANGES | CTRL_REPO_RELEASE,
+ },
+ 'depends' => {
+ name => 'Depends',
+ allowed => ALL_PKG | CTRL_TESTS,
+ separator => FIELD_SEP_COMMA,
+ dependency => 'normal',
+ dep_order => 2,
+ },
+ 'description' => {
+ name => 'Description',
+ allowed => ALL_SRC | ALL_PKG | CTRL_FILE_CHANGES | CTRL_REPO_RELEASE,
+ },
+ 'disclaimer' => {
+ name => 'Disclaimer',
+ allowed => CTRL_COPYRIGHT_HEADER,
+ },
+ 'directory' => {
+ name => 'Directory',
+ allowed => CTRL_INDEX_SRC,
+ },
+ 'distribution' => {
+ name => 'Distribution',
+ allowed => ALL_CHANGES,
+ },
+ 'enhances' => {
+ name => 'Enhances',
+ allowed => ALL_PKG,
+ separator => FIELD_SEP_COMMA,
+ dependency => 'union',
+ dep_order => 5,
+ },
+ 'environment' => {
+ name => 'Environment',
+ allowed => CTRL_FILE_BUILDINFO,
+ separator => FIELD_SEP_LINE,
+ },
+ 'essential' => {
+ name => 'Essential',
+ allowed => ALL_PKG,
+ },
+ 'features' => {
+ name => 'Features',
+ allowed => CTRL_TESTS,
+ separator => FIELD_SEP_SPACE,
+ },
+ 'filename' => {
+ name => 'Filename',
+ allowed => CTRL_INDEX_PKG,
+ separator => FIELD_SEP_LINE | FIELD_SEP_SPACE,
+ },
+ 'files' => {
+ name => 'Files',
+ allowed => CTRL_PKG_SRC | CTRL_INDEX_SRC | CTRL_FILE_CHANGES | CTRL_COPYRIGHT_FILES,
+ separator => FIELD_SEP_LINE | FIELD_SEP_SPACE,
+ },
+ 'format' => {
+ name => 'Format',
+ allowed => CTRL_PKG_SRC | CTRL_INDEX_SRC | ALL_FILE_MANIFEST | CTRL_COPYRIGHT_HEADER,
+ },
+ 'homepage' => {
+ name => 'Homepage',
+ allowed => ALL_SRC | ALL_PKG,
+ },
+ 'installed-build-depends' => {
+ name => 'Installed-Build-Depends',
+ allowed => CTRL_FILE_BUILDINFO,
+ separator => FIELD_SEP_COMMA,
+ dependency => 'union',
+ dep_order => 12,
+ },
+ 'installed-size' => {
+ name => 'Installed-Size',
+ allowed => ALL_PKG & ~CTRL_INFO_PKG,
+ },
+ 'installer-menu-item' => {
+ name => 'Installer-Menu-Item',
+ allowed => ALL_PKG,
+ },
+ 'kernel-version' => {
+ name => 'Kernel-Version',
+ allowed => ALL_PKG,
+ },
+ 'label' => {
+ name => 'Label',
+ allowed => CTRL_REPO_RELEASE,
+ },
+ 'license' => {
+ name => 'License',
+ allowed => ALL_COPYRIGHT,
+ },
+ 'origin' => {
+ name => 'Origin',
+ allowed => (ALL_PKG | ALL_SRC | CTRL_REPO_RELEASE) & (~CTRL_INFO_PKG),
+ },
+ 'maintainer' => {
+ name => 'Maintainer',
+ allowed => CTRL_PKG_DEB | CTRL_INDEX_PKG | CTRL_FILE_STATUS | ALL_SRC | ALL_CHANGES,
+ },
+ 'md5sum' => {
+ # XXX: Wrong capitalization due to historical reasons.
+ name => 'MD5sum',
+ allowed => CTRL_INDEX_PKG | CTRL_REPO_RELEASE,
+ separator => FIELD_SEP_LINE | FIELD_SEP_SPACE,
+ },
+ 'multi-arch' => {
+ name => 'Multi-Arch',
+ allowed => ALL_PKG,
+ },
+ 'no-support-for-architecture-all' => {
+ name => 'No-Support-for-Architecture-all',
+ allowed => CTRL_REPO_RELEASE,
+ },
+ 'notautomatic' => {
+ name => 'NotAutomatic',
+ allowed => CTRL_REPO_RELEASE,
+ },
+ 'package' => {
+ name => 'Package',
+ allowed => ALL_PKG | CTRL_INDEX_SRC,
+ },
+ 'package-list' => {
+ name => 'Package-List',
+ allowed => ALL_SRC & ~CTRL_INFO_SRC,
+ separator => FIELD_SEP_LINE | FIELD_SEP_SPACE,
+ },
+ 'package-type' => {
+ name => 'Package-Type',
+ allowed => ALL_PKG,
+ },
+ 'parent' => {
+ name => 'Parent',
+ allowed => CTRL_FILE_VENDOR,
+ },
+ 'pre-depends' => {
+ name => 'Pre-Depends',
+ allowed => ALL_PKG,
+ separator => FIELD_SEP_COMMA,
+ dependency => 'normal',
+ dep_order => 1,
+ },
+ 'priority' => {
+ name => 'Priority',
+ allowed => CTRL_INFO_SRC | CTRL_INDEX_SRC | ALL_PKG,
+ },
+ 'protected' => {
+ name => 'Protected',
+ allowed => ALL_PKG,
+ },
+ 'provides' => {
+ name => 'Provides',
+ allowed => ALL_PKG,
+ separator => FIELD_SEP_COMMA,
+ dependency => 'union',
+ dep_order => 9,
+ },
+ 'recommends' => {
+ name => 'Recommends',
+ allowed => ALL_PKG,
+ separator => FIELD_SEP_COMMA,
+ dependency => 'normal',
+ dep_order => 3,
+ },
+ 'replaces' => {
+ name => 'Replaces',
+ allowed => ALL_PKG,
+ separator => FIELD_SEP_COMMA,
+ dependency => 'union',
+ dep_order => 8,
+ },
+ 'restrictions' => {
+ name => 'Restrictions',
+ allowed => CTRL_TESTS,
+ separator => FIELD_SEP_SPACE,
+ },
+ 'rules-requires-root' => {
+ name => 'Rules-Requires-Root',
+ allowed => CTRL_INFO_SRC,
+ separator => FIELD_SEP_SPACE,
+ },
+ 'section' => {
+ name => 'Section',
+ allowed => CTRL_INFO_SRC | CTRL_INDEX_SRC | ALL_PKG,
+ },
+ 'sha1' => {
+ # XXX: Wrong capitalization due to historical reasons.
+ name => 'SHA1',
+ allowed => CTRL_INDEX_PKG | CTRL_REPO_RELEASE,
+ separator => FIELD_SEP_LINE | FIELD_SEP_SPACE,
+ },
+ 'sha256' => {
+ # XXX: Wrong capitalization due to historical reasons.
+ name => 'SHA256',
+ allowed => CTRL_INDEX_PKG | CTRL_REPO_RELEASE,
+ separator => FIELD_SEP_LINE | FIELD_SEP_SPACE,
+ },
+ 'size' => {
+ name => 'Size',
+ allowed => CTRL_INDEX_PKG,
+ separator => FIELD_SEP_LINE | FIELD_SEP_SPACE,
+ },
+ 'source' => {
+ name => 'Source',
+ allowed => (ALL_PKG | ALL_SRC | ALL_CHANGES | CTRL_COPYRIGHT_HEADER | CTRL_FILE_BUILDINFO) &
+ (~(CTRL_INDEX_SRC | CTRL_INFO_PKG)),
+ },
+ 'standards-version' => {
+ name => 'Standards-Version',
+ allowed => ALL_SRC,
+ },
+ 'static-built-using' => {
+ name => 'Static-Built-Using',
+ allowed => ALL_PKG,
+ separator => FIELD_SEP_COMMA,
+ dependency => 'union',
+ dep_order => 11,
+ },
+ 'status' => {
+ name => 'Status',
+ allowed => CTRL_FILE_STATUS,
+ separator => FIELD_SEP_SPACE,
+ },
+ 'subarchitecture' => {
+ name => 'Subarchitecture',
+ allowed => ALL_PKG,
+ },
+ 'suite' => {
+ name => 'Suite',
+ allowed => CTRL_REPO_RELEASE,
+ },
+ 'suggests' => {
+ name => 'Suggests',
+ allowed => ALL_PKG,
+ separator => FIELD_SEP_COMMA,
+ dependency => 'normal',
+ dep_order => 4,
+ },
+ 'tag' => {
+ name => 'Tag',
+ allowed => ALL_PKG,
+ separator => FIELD_SEP_COMMA,
+ },
+ 'task' => {
+ name => 'Task',
+ allowed => ALL_PKG,
+ },
+ 'test-command' => {
+ name => 'Test-Command',
+ allowed => CTRL_TESTS,
+ },
+ 'tests' => {
+ name => 'Tests',
+ allowed => CTRL_TESTS,
+ separator => FIELD_SEP_SPACE,
+ },
+ 'tests-directory' => {
+ name => 'Tests-Directory',
+ allowed => CTRL_TESTS,
+ },
+ 'testsuite' => {
+ name => 'Testsuite',
+ allowed => ALL_SRC,
+ separator => FIELD_SEP_COMMA,
+ },
+ 'testsuite-triggers' => {
+ name => 'Testsuite-Triggers',
+ allowed => ALL_SRC,
+ separator => FIELD_SEP_COMMA,
+ },
+ 'timestamp' => {
+ name => 'Timestamp',
+ allowed => CTRL_CHANGELOG,
+ },
+ 'triggers-awaited' => {
+ name => 'Triggers-Awaited',
+ allowed => CTRL_FILE_STATUS,
+ separator => FIELD_SEP_SPACE,
+ },
+ 'triggers-pending' => {
+ name => 'Triggers-Pending',
+ allowed => CTRL_FILE_STATUS,
+ separator => FIELD_SEP_SPACE,
+ },
+ 'uploaders' => {
+ name => 'Uploaders',
+ allowed => ALL_SRC,
+ separator => FIELD_SEP_COMMA,
+ },
+ 'upstream-name' => {
+ name => 'Upstream-Name',
+ allowed => CTRL_COPYRIGHT_HEADER,
+ },
+ 'upstream-contact' => {
+ name => 'Upstream-Contact',
+ allowed => CTRL_COPYRIGHT_HEADER,
+ },
+ 'urgency' => {
+ name => 'Urgency',
+ allowed => ALL_CHANGES,
+ },
+ 'valid-until' => {
+ name => 'Valid-Until',
+ allowed => CTRL_REPO_RELEASE,
+ },
+ 'vcs-browser' => {
+ name => 'Vcs-Browser',
+ allowed => ALL_SRC,
+ },
+ 'vcs-arch' => {
+ name => 'Vcs-Arch',
+ allowed => ALL_SRC,
+ },
+ 'vcs-bzr' => {
+ name => 'Vcs-Bzr',
+ allowed => ALL_SRC,
+ },
+ 'vcs-cvs' => {
+ name => 'Vcs-Cvs',
+ allowed => ALL_SRC,
+ },
+ 'vcs-darcs' => {
+ name => 'Vcs-Darcs',
+ allowed => ALL_SRC,
+ },
+ 'vcs-git' => {
+ name => 'Vcs-Git',
+ allowed => ALL_SRC,
+ },
+ 'vcs-hg' => {
+ name => 'Vcs-Hg',
+ allowed => ALL_SRC,
+ },
+ 'vcs-mtn' => {
+ name => 'Vcs-Mtn',
+ allowed => ALL_SRC,
+ },
+ 'vcs-svn' => {
+ name => 'Vcs-Svn',
+ allowed => ALL_SRC,
+ },
+ 'vendor' => {
+ name => 'Vendor',
+ allowed => CTRL_FILE_VENDOR,
+ },
+ 'vendor-url' => {
+ name => 'Vendor-Url',
+ allowed => CTRL_FILE_VENDOR,
+ },
+ 'version' => {
+ name => 'Version',
+ allowed => (ALL_PKG | ALL_SRC | CTRL_FILE_BUILDINFO | ALL_CHANGES | CTRL_REPO_RELEASE) &
+ (~(CTRL_INFO_SRC | CTRL_INFO_PKG)),
+ },
+);
+
+my @src_vcs_fields = qw(
+ vcs-browser
+ vcs-arch
+ vcs-bzr
+ vcs-cvs
+ vcs-darcs
+ vcs-git
+ vcs-hg
+ vcs-mtn
+ vcs-svn
+);
+
+my @src_dep_fields = qw(
+ build-depends
+ build-depends-arch
+ build-depends-indep
+ build-conflicts
+ build-conflicts-arch
+ build-conflicts-indep
+);
+my @bin_dep_fields = qw(
+ pre-depends
+ depends
+ recommends
+ suggests
+ enhances
+ conflicts
+ breaks
+ replaces
+ provides
+ built-using
+ static-built-using
+);
+
+my @src_test_fields = qw(
+ testsuite
+ testsuite-triggers
+);
+
+my @src_checksums_fields = qw(
+ checksums-md5
+ checksums-sha1
+ checksums-sha256
+);
+my @bin_checksums_fields = qw(
+ md5sum
+ sha1
+ sha256
+);
+
+our %FIELD_ORDER = (
+ CTRL_INFO_SRC() => [
+ qw(
+ source
+ section
+ priority
+ maintainer
+ uploaders
+ origin
+ bugs
+ ),
+ @src_vcs_fields,
+ qw(
+ homepage
+ standards-version
+ rules-requires-root
+ ),
+ @src_dep_fields,
+ @src_test_fields,
+ qw(
+ description
+ ),
+ ],
+ CTRL_INFO_PKG() => [
+ qw(
+ package
+ package-type
+ section
+ priority
+ architecture
+ subarchitecture
+ multi-arch
+ essential
+ protected
+ build-essential
+ build-profiles
+ built-for-profiles
+ kernel-version
+ ),
+ @bin_dep_fields,
+ qw(
+ homepage
+ installer-menu-item
+ task
+ tag
+ description
+ ),
+ ],
+ CTRL_PKG_SRC() => [
+ qw(
+ format
+ source
+ binary
+ architecture
+ version
+ origin
+ maintainer
+ uploaders
+ homepage
+ description
+ standards-version
+ ),
+ @src_vcs_fields,
+ @src_test_fields,
+ @src_dep_fields,
+ qw(
+ package-list
+ ),
+ @src_checksums_fields,
+ qw(
+ files
+ ),
+ ],
+ CTRL_PKG_DEB() => [
+ qw(
+ package
+ package-type
+ source
+ version
+ kernel-version
+ built-for-profiles
+ auto-built-package
+ architecture
+ subarchitecture
+ installer-menu-item
+ build-essential
+ essential
+ protected
+ origin
+ bugs
+ maintainer
+ installed-size
+ ),
+ @bin_dep_fields,
+ qw(
+ section
+ priority
+ multi-arch
+ homepage
+ description
+ tag
+ task
+ ),
+ ],
+ CTRL_INDEX_SRC() => [
+ qw(
+ format
+ package
+ binary
+ architecture
+ version
+ priority
+ section
+ origin
+ maintainer
+ uploaders
+ homepage
+ description
+ standards-version
+ ),
+ @src_vcs_fields,
+ @src_test_fields,
+ @src_dep_fields,
+ qw(
+ package-list
+ directory
+ ),
+ @src_checksums_fields,
+ qw(
+ files
+ ),
+ ],
+ CTRL_INDEX_PKG() => [
+ qw(
+ package
+ package-type
+ source
+ version
+ kernel-version
+ built-for-profiles
+ auto-built-package
+ architecture
+ subarchitecture
+ installer-menu-item
+ build-essential
+ essential
+ protected
+ origin
+ bugs
+ maintainer
+ installed-size
+ ),
+ @bin_dep_fields,
+ qw(
+ filename
+ size
+ ),
+ @bin_checksums_fields,
+ qw(
+ section
+ priority
+ multi-arch
+ homepage
+ description
+ tag
+ task
+ ),
+ ],
+ CTRL_REPO_RELEASE() => [
+ qw(
+ origin
+ label
+ suite
+ version
+ codename
+ changelogs
+ date
+ valid-until
+ notautomatic
+ butautomaticupgrades
+ acquire-by-hash
+ no-support-for-architecture-all
+ architectures
+ components
+ description
+ ),
+ @bin_checksums_fields
+ ],
+ CTRL_CHANGELOG() => [
+ qw(
+ source
+ binary-only
+ version
+ distribution
+ urgency
+ maintainer
+ timestamp
+ date
+ closes
+ changes
+ ),
+ ],
+ CTRL_COPYRIGHT_HEADER() => [
+ qw(
+ format
+ upstream-name
+ upstream-contact
+ source
+ disclaimer
+ comment
+ license
+ copyright
+ ),
+ ],
+ CTRL_COPYRIGHT_FILES() => [
+ qw(
+ files
+ copyright
+ license
+ comment
+ ),
+ ],
+ CTRL_COPYRIGHT_LICENSE() => [
+ qw(
+ license
+ comment
+ ),
+ ],
+ CTRL_FILE_BUILDINFO() => [
+ qw(
+ format
+ source
+ binary
+ architecture
+ version
+ binary-only-changes
+ ),
+ @src_checksums_fields,
+ qw(
+ build-origin
+ build-architecture
+ build-kernel-version
+ build-date
+ build-path
+ build-tainted-by
+ installed-build-depends
+ environment
+ ),
+ ],
+ CTRL_FILE_CHANGES() => [
+ qw(
+ format
+ date
+ source
+ binary
+ binary-only
+ built-for-profiles
+ architecture
+ version
+ distribution
+ urgency
+ maintainer
+ changed-by
+ description
+ closes
+ changes
+ ),
+ @src_checksums_fields,
+ qw(
+ files
+ ),
+ ],
+ CTRL_FILE_VENDOR() => [
+ qw(
+ vendor
+ vendor-url
+ bugs
+ parent
+ ),
+ ],
+ CTRL_FILE_STATUS() => [
+ # Same as fieldinfos in lib/dpkg/parse.c
+ qw(
+ package
+ essential
+ protected
+ status
+ priority
+ section
+ installed-size
+ origin
+ maintainer
+ bugs
+ architecture
+ multi-arch
+ source
+ version
+ config-version
+ replaces
+ provides
+ depends
+ pre-depends
+ recommends
+ suggests
+ breaks
+ conflicts
+ enhances
+ conffiles
+ description
+ triggers-pending
+ triggers-awaited
+ ),
+ # These are allowed here, but not tracked by lib/dpkg/parse.c.
+ qw(
+ auto-built-package
+ build-essential
+ built-for-profiles
+ built-using
+ static-built-using
+ homepage
+ installer-menu-item
+ kernel-version
+ package-type
+ subarchitecture
+ tag
+ task
+ ),
+ ],
+ CTRL_TESTS() => [
+ qw(
+ test-command
+ tests
+ tests-directory
+ architecture
+ restrictions
+ features
+ classes
+ depends
+ ),
+ ],
+);
+
+=encoding utf8
+
+=head1 NAME
+
+Dpkg::Control::FieldsCore - manage (list of official) control fields
+
+=head1 DESCRIPTION
+
+The modules contains a list of fieldnames with associated meta-data explaining
+in which type of control information they are allowed. The types are the
+CTRL_* constants exported by Dpkg::Control.
+
+=head1 FUNCTIONS
+
+=over 4
+
+=item $f = field_capitalize($field_name)
+
+Returns the field name properly capitalized. All characters are lowercase,
+except the first of each word (words are separated by a hyphen in field names).
+
+=cut
+
+sub field_capitalize($) {
+ my $field = lc(shift);
+
+ # Use known fields first.
+ return $FIELDS{$field}{name} if exists $FIELDS{$field};
+
+ # Generic case
+ return join '-', map { ucfirst } split /-/, $field;
+}
+
+=item $bool = field_is_official($fname)
+
+Returns true if the field is official and known.
+
+=cut
+
+sub field_is_official($) {
+ my $field = lc shift;
+
+ return exists $FIELDS{$field};
+}
+
+=item $bool = field_is_allowed_in($fname, @types)
+
+Returns true (1) if the field $fname is allowed in all the types listed in
+the list. Note that you can use type sets instead of individual types (ex:
+CTRL_FILE_CHANGES | CTRL_CHANGELOG).
+
+field_allowed_in(A|B, C) returns true only if the field is allowed in C
+and either A or B.
+
+Undef is returned for non-official fields.
+
+=cut
+
+sub field_is_allowed_in($@) {
+ my ($field, @types) = @_;
+ $field = lc $field;
+
+ return unless exists $FIELDS{$field};
+
+ return 0 if not scalar(@types);
+ foreach my $type (@types) {
+ next if $type == CTRL_UNKNOWN; # Always allowed
+ return 0 unless $FIELDS{$field}{allowed} & $type;
+ }
+ return 1;
+}
+
+=item $new_field = field_transfer_single($from, $to, $field)
+
+If appropriate, copy the value of the field named $field taken from the
+$from Dpkg::Control object to the $to Dpkg::Control object.
+
+Official fields are copied only if the field is allowed in both types of
+objects. Custom fields are treated in a specific manner. When the target
+is not among CTRL_PKG_SRC, CTRL_PKG_DEB or CTRL_FILE_CHANGES, then they
+are always copied as is (the X- prefix is kept). Otherwise they are not
+copied except if the target object matches the target destination encoded
+in the field name. The initial X denoting custom fields can be followed by
+one or more letters among "S" (Source: corresponds to CTRL_PKG_SRC), "B"
+(Binary: corresponds to CTRL_PKG_DEB) or "C" (Changes: corresponds to
+CTRL_FILE_CHANGES).
+
+Returns undef if nothing has been copied or the name of the new field
+added to $to otherwise.
+
+=cut
+
+sub field_transfer_single($$;$) {
+ my ($from, $to, $field) = @_;
+ $field //= $_;
+ my ($from_type, $to_type) = ($from->get_type(), $to->get_type());
+ $field = field_capitalize($field);
+
+ if (field_is_allowed_in($field, $from_type, $to_type)) {
+ $to->{$field} = $from->{$field};
+ return $field;
+ } elsif ($field =~ /^X([SBC]*)-/i) {
+ my $dest = $1;
+ if (($dest =~ /B/i and $to_type == CTRL_PKG_DEB) or
+ ($dest =~ /S/i and $to_type == CTRL_PKG_SRC) or
+ ($dest =~ /C/i and $to_type == CTRL_FILE_CHANGES))
+ {
+ my $new = $field;
+ $new =~ s/^X([SBC]*)-//i;
+ $to->{$new} = $from->{$field};
+ return $new;
+ } elsif ($to_type != CTRL_PKG_DEB and
+ $to_type != CTRL_PKG_SRC and
+ $to_type != CTRL_FILE_CHANGES)
+ {
+ $to->{$field} = $from->{$field};
+ return $field;
+ }
+ } elsif (not field_is_allowed_in($field, $from_type)) {
+ warning(g_("unknown information field '%s' in input data in %s"),
+ $field, $from->get_option('name') || g_('control information'));
+ }
+ return;
+}
+
+=item @field_list = field_transfer_all($from, $to)
+
+Transfer all appropriate fields from $from to $to. Calls
+field_transfer_single() on all fields available in $from.
+
+Returns the list of fields that have been added to $to.
+
+=cut
+
+sub field_transfer_all($$) {
+ my ($from, $to) = @_;
+ my (@res, $res);
+ foreach my $k (keys %$from) {
+ $res = field_transfer_single($from, $to, $k);
+ push @res, $res if $res and defined wantarray;
+ }
+ return @res;
+}
+
+=item @field_list = field_ordered_list($type)
+
+Returns an ordered list of fields for a given type of control information.
+This list can be used to output the fields in a predictable order.
+The list might be empty for types where the order does not matter much.
+
+=cut
+
+sub field_ordered_list($) {
+ my $type = shift;
+
+ if (exists $FIELD_ORDER{$type}) {
+ return map { $FIELDS{$_}{name} } @{$FIELD_ORDER{$type}};
+ }
+ return ();
+}
+
+=item ($source, $version) = field_parse_binary_source($ctrl)
+
+Parse the B<Source> field in a binary package control stanza. The field
+contains the source package name where it was built from, and optionally
+a space and the source version enclosed in parenthesis if it is different
+from the binary version.
+
+Returns a list with the $source name, and the source $version, or undef
+or an empty list when $ctrl does not contain a binary package control stanza.
+Neither $source nor $version are validated, but that can be done with
+Dpkg::Package::pkg_name_is_illegal() and Dpkg::Version::version_check().
+
+=cut
+
+sub field_parse_binary_source($) {
+ my $ctrl = shift;
+ my $ctrl_type = $ctrl->get_type();
+
+ if ($ctrl_type != CTRL_INDEX_PKG and
+ $ctrl_type != CTRL_PKG_DEB and
+ $ctrl_type != CTRL_FILE_CHANGES and
+ $ctrl_type != CTRL_FILE_BUILDINFO and
+ $ctrl_type != CTRL_FILE_STATUS) {
+ return;
+ }
+
+ my ($source, $version);
+
+ # For .changes and .buildinfo the Source field always exists,
+ # and there is no Package field.
+ if (exists $ctrl->{'Source'}) {
+ $source = $ctrl->{'Source'};
+ if ($source =~ m/^([^ ]+) +\(([^)]*)\)$/) {
+ $source = $1;
+ $version = $2;
+ } else {
+ $version = $ctrl->{'Version'};
+ }
+ } else {
+ $source = $ctrl->{'Package'};
+ $version = $ctrl->{'Version'};
+ }
+
+ return ($source, $version);
+}
+
+=item @field_list = field_list_src_dep()
+
+List of fields that contains dependencies-like information in a source
+Debian package.
+
+=cut
+
+sub field_list_src_dep() {
+ my @list = map {
+ $FIELDS{$_}{name}
+ } sort {
+ $FIELDS{$a}{dep_order} <=> $FIELDS{$b}{dep_order}
+ } grep {
+ field_is_allowed_in($_, CTRL_PKG_SRC) and
+ exists $FIELDS{$_}{dependency}
+ } keys %FIELDS;
+ return @list;
+}
+
+=item @field_list = field_list_pkg_dep()
+
+List of fields that contains dependencies-like information in a binary
+Debian package. The fields that express real dependencies are sorted from
+the stronger to the weaker.
+
+=cut
+
+sub field_list_pkg_dep() {
+ my @list = map {
+ $FIELDS{$_}{name}
+ } sort {
+ $FIELDS{$a}{dep_order} <=> $FIELDS{$b}{dep_order}
+ } grep {
+ field_is_allowed_in($_, CTRL_PKG_DEB) and
+ exists $FIELDS{$_}{dependency}
+ } keys %FIELDS;
+ return @list;
+}
+
+=item $dep_type = field_get_dep_type($field)
+
+Return the type of the dependency expressed by the given field. Can
+either be "normal" for a real dependency field (Pre-Depends, Depends, ...)
+or "union" for other relation fields sharing the same syntax (Conflicts,
+Breaks, ...). Returns undef for fields which are not dependencies.
+
+=cut
+
+sub field_get_dep_type($) {
+ my $field = lc shift;
+
+ return unless exists $FIELDS{$field};
+ return $FIELDS{$field}{dependency} if exists $FIELDS{$field}{dependency};
+ return;
+}
+
+=item $sep_type = field_get_sep_type($field)
+
+Return the type of the field value separator. Can be one of FIELD_SEP_UNKNOWN,
+FIELD_SEP_SPACE, FIELD_SEP_COMMA or FIELD_SEP_LINE.
+
+=cut
+
+sub field_get_sep_type($) {
+ my $field = lc shift;
+
+ return $FIELDS{$field}{separator} if exists $FIELDS{$field}{separator};
+ return FIELD_SEP_UNKNOWN;
+}
+
+=item field_register($field, $allowed_types, %opts)
+
+Register a new field as being allowed in control information of specified
+types. %opts is optional.
+
+=cut
+
+sub field_register($$;@) {
+ my ($field, $types, %opts) = @_;
+
+ $field = lc $field;
+ $FIELDS{$field} = {
+ name => field_capitalize($field),
+ allowed => $types,
+ %opts
+ };
+
+ return;
+}
+
+=item $bool = field_insert_after($type, $ref, @fields)
+
+Place field after another one ($ref) in output of control information of
+type $type.
+
+Return true if the field was inserted, otherwise false.
+
+=cut
+
+sub field_insert_after($$@) {
+ my ($type, $field, @fields) = @_;
+
+ return 0 if not exists $FIELD_ORDER{$type};
+
+ ($field, @fields) = map { lc } ($field, @fields);
+ @{$FIELD_ORDER{$type}} = map {
+ ($_ eq $field) ? ($_, @fields) : $_
+ } @{$FIELD_ORDER{$type}};
+
+ return 1;
+}
+
+=item $bool = field_insert_before($type, $ref, @fields)
+
+Place field before another one ($ref) in output of control information of
+type $type.
+
+Return true if the field was inserted, otherwise false.
+
+=cut
+
+sub field_insert_before($$@) {
+ my ($type, $field, @fields) = @_;
+
+ return 0 if not exists $FIELD_ORDER{$type};
+
+ ($field, @fields) = map { lc } ($field, @fields);
+ @{$FIELD_ORDER{$type}} = map {
+ ($_ eq $field) ? (@fields, $_) : $_
+ } @{$FIELD_ORDER{$type}};
+
+ return 1;
+}
+
+=back
+
+=head1 CHANGES
+
+=head2 Version 1.01 (dpkg 1.21.0)
+
+New function: field_parse_binary_source().
+
+=head2 Version 1.00 (dpkg 1.17.0)
+
+Mark the module as public.
+
+=cut
+
+1;
diff --git a/scripts/Dpkg/Control/Hash.pm b/scripts/Dpkg/Control/Hash.pm
new file mode 100644
index 0000000..8b7f54f
--- /dev/null
+++ b/scripts/Dpkg/Control/Hash.pm
@@ -0,0 +1,48 @@
+# Copyright © 2007-2009 Raphaël Hertzog <hertzog@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::Control::Hash;
+
+use strict;
+use warnings;
+
+our $VERSION = '1.00';
+
+use Dpkg::Gettext;
+use Dpkg::ErrorHandling;
+use Dpkg::Control::Fields; # Force execution of vendor hook.
+
+use parent qw(Dpkg::Control::HashCore);
+
+=encoding utf8
+
+=head1 NAME
+
+Dpkg::Control::Hash - parse and manipulate a stanza of deb822 fields
+
+=head1 DESCRIPTION
+
+This module is just like Dpkg::Control::HashCore, with vendor-specific
+field knowledge.
+
+=head1 CHANGES
+
+=head2 Version 1.00 (dpkg 1.15.6)
+
+Mark the module as public.
+
+=cut
+
+1;
diff --git a/scripts/Dpkg/Control/HashCore.pm b/scripts/Dpkg/Control/HashCore.pm
new file mode 100644
index 0000000..0bdb812
--- /dev/null
+++ b/scripts/Dpkg/Control/HashCore.pm
@@ -0,0 +1,589 @@
+# Copyright © 2007-2009 Raphaël Hertzog <hertzog@debian.org>
+# Copyright © 2009, 2012-2019, 2021 Guillem Jover <guillem@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::Control::HashCore;
+
+use strict;
+use warnings;
+
+our $VERSION = '1.02';
+
+use Dpkg::Gettext;
+use Dpkg::ErrorHandling;
+use Dpkg::Control::FieldsCore;
+
+# This module cannot use Dpkg::Control::Fields, because that one makes use
+# of Dpkg::Vendor which at the same time uses this module, which would turn
+# into a compilation error. We can use Dpkg::Control::FieldsCore instead.
+
+use parent qw(Dpkg::Interface::Storable);
+
+use overload
+ '%{}' => sub { ${$_[0]}->{fields} },
+ 'eq' => sub { "$_[0]" eq "$_[1]" };
+
+=encoding utf8
+
+=head1 NAME
+
+Dpkg::Control::HashCore - parse and manipulate a stanza of deb822 fields
+
+=head1 DESCRIPTION
+
+The Dpkg::Control::Hash class is a hash-like representation of a set of
+RFC822-like fields. The fields names are case insensitive and are always
+capitalized the same when output (see field_capitalize function in
+Dpkg::Control::Fields).
+The order in which fields have been set is remembered and is used
+to be able to dump back the same content. The output order can also be
+overridden if needed.
+
+You can store arbitrary values in the hash, they will always be properly
+escaped in the output to conform to the syntax of control files. This is
+relevant mainly for multilines values: while the first line is always output
+unchanged directly after the field name, supplementary lines are
+modified. Empty lines and lines containing only dots are prefixed with
+" ." (space + dot) while other lines are prefixed with a single space.
+
+During parsing, trailing spaces are stripped on all lines while leading
+spaces are stripped only on the first line of each field.
+
+=head1 METHODS
+
+=over 4
+
+=item $c = Dpkg::Control::Hash->new(%opts)
+
+Creates a new object with the indicated options. Supported options
+are:
+
+=over 8
+
+=item allow_pgp
+
+Configures the parser to accept OpenPGP signatures around the control
+information. Value can be 0 (default) or 1.
+
+=item allow_duplicate
+
+Configures the parser to allow duplicate fields in the control
+information.
+The last value overrides any previous values.
+Value can be 0 (default) or 1.
+
+=item keep_duplicate
+
+Configure the parser to keep values for duplicate fields found in the control
+information (when B<allow_duplicate> is enabled), as array references.
+Value can be 0 (default) or 1.
+
+=item drop_empty
+
+Defines if empty fields are dropped during the output. Value can be 0
+(default) or 1.
+
+=item name
+
+The user friendly name of the information stored in the object. It might
+be used in some error messages or warnings. A default name might be set
+depending on the type.
+
+=item is_pgp_signed
+
+Set by the parser (starting in dpkg 1.17.0) if it finds an OpenPGP
+signature around the control information. Value can be 0 (default)
+or 1, and undef when the option is not supported by the code (in
+versions older than dpkg 1.17.0).
+
+=back
+
+=cut
+
+sub new {
+ my ($this, %opts) = @_;
+ my $class = ref($this) || $this;
+
+ # Object is a scalar reference and not a hash ref to avoid
+ # infinite recursion due to overloading hash-dereferencing
+ my $self = \{
+ in_order => [],
+ out_order => [],
+ is_pgp_signed => 0,
+ allow_pgp => 0,
+ allow_duplicate => 0,
+ keep_duplicate => 0,
+ drop_empty => 0,
+ };
+ bless $self, $class;
+
+ $$self->{fields} = Dpkg::Control::HashCore::Tie->new($self);
+
+ # Options set by the user override default values
+ $$self->{$_} = $opts{$_} foreach keys %opts;
+
+ return $self;
+}
+
+# There is naturally a circular reference between the tied hash and its
+# containing object. Happily, the extra layer of scalar reference can
+# be used to detect the destruction of the object and break the loop so
+# that everything gets garbage-collected.
+
+sub DESTROY {
+ my $self = shift;
+ delete $$self->{fields};
+}
+
+=item $c->set_options($option, %opts)
+
+Changes the value of one or more options.
+
+=cut
+
+sub set_options {
+ my ($self, %opts) = @_;
+ $$self->{$_} = $opts{$_} foreach keys %opts;
+}
+
+=item $value = $c->get_option($option)
+
+Returns the value of the corresponding option.
+
+=cut
+
+sub get_option {
+ my ($self, $k) = @_;
+ return $$self->{$k};
+}
+
+=item $c->parse_error($file, $fmt, ...)
+
+Prints an error message and dies on syntax parse errors.
+
+=cut
+
+sub parse_error {
+ my ($self, $file, $msg) = (shift, shift, shift);
+
+ $msg = sprintf($msg, @_) if (@_);
+ error(g_('syntax error in %s at line %d: %s'), $file, $., $msg);
+}
+
+=item $c->parse($fh, $description)
+
+Parse a control file from the given filehandle. Exits in case of errors.
+$description is used to describe the filehandle, ideally it's a filename
+or a description of where the data comes from. It's used in error
+messages. When called multiple times, the parsed fields are accumulated.
+
+Returns true if some fields have been parsed.
+
+=cut
+
+sub parse {
+ my ($self, $fh, $desc) = @_;
+
+ my $paraborder = 1;
+ my $parabody = 0;
+ my $cf; # Current field
+ my $expect_pgp_sig = 0;
+ local $_;
+
+ while (<$fh>) {
+ # In the common case there will be just a trailing \n character,
+ # so using chomp here which is very fast will avoid the latter
+ # s/// doing anything, which gives usa significant speed up.
+ chomp;
+ my $armor = $_;
+ s/\s+$//;
+
+ next if length == 0 and $paraborder;
+
+ my $lead = substr $_, 0, 1;
+ next if $lead eq '#';
+ $paraborder = 0;
+
+ my ($name, $value) = split /\s*:\s*/, $_, 2;
+ if (defined $name and $name =~ m/^\S+?$/) {
+ $parabody = 1;
+ if ($lead eq '-') {
+ $self->parse_error($desc, g_('field cannot start with a hyphen'));
+ }
+ if (exists $self->{$name}) {
+ unless ($$self->{allow_duplicate}) {
+ $self->parse_error($desc, g_('duplicate field %s found'), $name);
+ }
+ if ($$self->{keep_duplicate}) {
+ if (ref $self->{$name} ne 'ARRAY') {
+ # Switch value into an array.
+ $self->{$name} = [ $self->{$name}, $value ];
+ } else {
+ # Append the value.
+ push @{$self->{$name}}, $value;
+ }
+ } else {
+ # Overwrite with last value.
+ $self->{$name} = $value;
+ }
+ } else {
+ $self->{$name} = $value;
+ }
+ $cf = $name;
+ } elsif (m/^\s(\s*\S.*)$/) {
+ my $line = $1;
+ unless (defined($cf)) {
+ $self->parse_error($desc, g_('continued value line not in field'));
+ }
+ if ($line =~ /^\.+$/) {
+ $line = substr $line, 1;
+ }
+ $self->{$cf} .= "\n$line";
+ } elsif (length == 0 ||
+ ($expect_pgp_sig && $armor =~ m/^-----BEGIN PGP SIGNATURE-----[\r\t ]*$/)) {
+ if ($expect_pgp_sig) {
+ # Skip empty lines
+ $_ = <$fh> while defined && m/^\s*$/;
+ unless (length) {
+ $self->parse_error($desc, g_('expected OpenPGP signature, ' .
+ 'found end of file after blank line'));
+ }
+ chomp;
+ unless (m/^-----BEGIN PGP SIGNATURE-----[\r\t ]*$/) {
+ $self->parse_error($desc, g_('expected OpenPGP signature, ' .
+ "found something else '%s'"), $_);
+ }
+ # Skip OpenPGP signature
+ while (<$fh>) {
+ chomp;
+ last if m/^-----END PGP SIGNATURE-----[\r\t ]*$/;
+ }
+ unless (defined) {
+ $self->parse_error($desc, g_('unfinished OpenPGP signature'));
+ }
+ # This does not mean the signature is correct, that needs to
+ # be verified by an OpenPGP backend.
+ $$self->{is_pgp_signed} = 1;
+ }
+ # Finished parsing one stanza.
+ last;
+ } elsif ($armor =~ m/^-----BEGIN PGP SIGNED MESSAGE-----[\r\t ]*$/) {
+ $expect_pgp_sig = 1;
+ if ($$self->{allow_pgp} and not $parabody) {
+ # Skip OpenPGP headers
+ while (<$fh>) {
+ last if m/^\s*$/;
+ }
+ } else {
+ $self->parse_error($desc, g_('OpenPGP signature not allowed here'));
+ }
+ } else {
+ $self->parse_error($desc,
+ g_('line with unknown format (not field-colon-value)'));
+ }
+ }
+
+ if ($expect_pgp_sig and not $$self->{is_pgp_signed}) {
+ $self->parse_error($desc, g_('unfinished OpenPGP signature'));
+ }
+
+ return defined($cf);
+}
+
+=item $c->load($file)
+
+Parse the content of $file. Exits in case of errors. Returns true if some
+fields have been parsed.
+
+=item $c->find_custom_field($name)
+
+Scan the fields and look for a user specific field whose name matches the
+following regex: /X[SBC]*-$name/i. Return the name of the field found or
+undef if nothing has been found.
+
+=cut
+
+sub find_custom_field {
+ my ($self, $name) = @_;
+ foreach my $key (keys %$self) {
+ return $key if $key =~ /^X[SBC]*-\Q$name\E$/i;
+ }
+ return;
+}
+
+=item $c->get_custom_field($name)
+
+Identify a user field and retrieve its value.
+
+=cut
+
+sub get_custom_field {
+ my ($self, $name) = @_;
+ my $key = $self->find_custom_field($name);
+ return $self->{$key} if defined $key;
+ return;
+}
+
+=item $str = $c->output()
+
+=item "$c"
+
+Get a string representation of the control information. The fields
+are sorted in the order in which they have been read or set except
+if the order has been overridden with set_output_order().
+
+=item $c->output($fh)
+
+Print the string representation of the control information to a
+filehandle.
+
+=cut
+
+sub output {
+ my ($self, $fh) = @_;
+ my $str = '';
+ my @keys;
+ if (@{$$self->{out_order}}) {
+ my $i = 1;
+ my $imp = {};
+ $imp->{$_} = $i++ foreach @{$$self->{out_order}};
+ @keys = sort {
+ if (defined $imp->{$a} && defined $imp->{$b}) {
+ $imp->{$a} <=> $imp->{$b};
+ } elsif (defined($imp->{$a})) {
+ -1;
+ } elsif (defined($imp->{$b})) {
+ 1;
+ } else {
+ $a cmp $b;
+ }
+ } keys %$self;
+ } else {
+ @keys = @{$$self->{in_order}};
+ }
+
+ foreach my $key (@keys) {
+ if (exists $self->{$key}) {
+ my $value = $self->{$key};
+ # Skip whitespace-only fields
+ next if $$self->{drop_empty} and $value !~ m/\S/;
+ # Escape data to follow control file syntax
+ my ($first_line, @lines) = split /\n/, $value;
+
+ my $kv = "$key:";
+ $kv .= ' ' . $first_line if length $first_line;
+ $kv .= "\n";
+ foreach (@lines) {
+ s/\s+$//;
+ if (length == 0 or /^\.+$/) {
+ $kv .= " .$_\n";
+ } else {
+ $kv .= " $_\n";
+ }
+ }
+ # Print it out
+ if ($fh) {
+ print { $fh } $kv
+ or syserr(g_('write error on control data'));
+ }
+ $str .= $kv if defined wantarray;
+ }
+ }
+ return $str;
+}
+
+=item $c->save($filename)
+
+Write the string representation of the control information to a file.
+
+=item $c->set_output_order(@fields)
+
+Define the order in which fields will be displayed in the output() method.
+
+=cut
+
+sub set_output_order {
+ my ($self, @fields) = @_;
+
+ $$self->{out_order} = [@fields];
+}
+
+=item $c->apply_substvars($substvars)
+
+Update all fields by replacing the variables references with
+the corresponding value stored in the Dpkg::Substvars object.
+
+=cut
+
+sub apply_substvars {
+ my ($self, $substvars, %opts) = @_;
+
+ # Add substvars to refer to other fields
+ $substvars->set_field_substvars($self, 'F');
+
+ foreach my $f (keys %$self) {
+ my $v = $substvars->substvars($self->{$f}, %opts);
+ if ($v ne $self->{$f}) {
+ my $sep;
+
+ $sep = field_get_sep_type($f);
+
+ # If we replaced stuff, ensure we're not breaking
+ # a dependency field by introducing empty lines, or multiple
+ # commas
+
+ if ($sep & (FIELD_SEP_COMMA | FIELD_SEP_LINE)) {
+ # Drop empty/whitespace-only lines
+ $v =~ s/\n[ \t]*(\n|$)/$1/;
+ }
+
+ if ($sep & FIELD_SEP_COMMA) {
+ $v =~ s/,[\s,]*,/,/g;
+ $v =~ s/^\s*,\s*//;
+ $v =~ s/\s*,\s*$//;
+ }
+ }
+ # Replace ${} with $, which is otherwise an invalid substitution, but
+ # this then makes it possible to use ${} as an escape sequence such
+ # as ${}{VARIABLE}.
+ $v =~ s/\$\{\}/\$/g;
+
+ $self->{$f} = $v;
+ }
+}
+
+package Dpkg::Control::HashCore::Tie;
+
+# This class is used to tie a hash. It implements hash-like functions by
+# normalizing the name of fields received in keys (using
+# Dpkg::Control::Fields::field_capitalize). It also stores the order in
+# which fields have been added in order to be able to dump them in the
+# same order. But the order information is stored in a parent object of
+# type Dpkg::Control.
+
+use strict;
+use warnings;
+
+use Dpkg::Control::FieldsCore;
+
+use Carp;
+use Tie::Hash;
+use parent -norequire, qw(Tie::ExtraHash);
+
+# $self->[0] is the real hash
+# $self->[1] is a reference to the hash contained by the parent object.
+# This reference bypasses the top-level scalar reference of a
+# Dpkg::Control::Hash, hence ensuring that reference gets DESTROYed
+# properly.
+
+# Dpkg::Control::Hash->new($parent)
+#
+# Return a reference to a tied hash implementing storage of simple
+# "field: value" mapping as used in many Debian-specific files.
+
+sub new {
+ my $class = shift;
+ my $hash = {};
+ tie %{$hash}, $class, @_; ## no critic (Miscellanea::ProhibitTies)
+ return $hash;
+}
+
+sub TIEHASH {
+ my ($class, $parent) = @_;
+ croak 'parent object must be Dpkg::Control::Hash'
+ if not $parent->isa('Dpkg::Control::HashCore') and
+ not $parent->isa('Dpkg::Control::Hash');
+ return bless [ {}, $$parent ], $class;
+}
+
+sub FETCH {
+ my ($self, $key) = @_;
+ $key = lc($key);
+ return $self->[0]->{$key} if exists $self->[0]->{$key};
+ return;
+}
+
+sub STORE {
+ my ($self, $key, $value) = @_;
+ $key = lc($key);
+ if (not exists $self->[0]->{$key}) {
+ push @{$self->[1]->{in_order}}, field_capitalize($key);
+ }
+ $self->[0]->{$key} = $value;
+}
+
+sub EXISTS {
+ my ($self, $key) = @_;
+ $key = lc($key);
+ return exists $self->[0]->{$key};
+}
+
+sub DELETE {
+ my ($self, $key) = @_;
+ my $parent = $self->[1];
+ my $in_order = $parent->{in_order};
+ $key = lc($key);
+ if (exists $self->[0]->{$key}) {
+ delete $self->[0]->{$key};
+ @{$in_order} = grep { lc ne $key } @{$in_order};
+ return 1;
+ } else {
+ return 0;
+ }
+}
+
+sub FIRSTKEY {
+ my $self = shift;
+ my $parent = $self->[1];
+ foreach my $key (@{$parent->{in_order}}) {
+ return $key if exists $self->[0]->{lc $key};
+ }
+}
+
+sub NEXTKEY {
+ my ($self, $last) = @_;
+ my $parent = $self->[1];
+ my $found = 0;
+ foreach my $key (@{$parent->{in_order}}) {
+ if ($found) {
+ return $key if exists $self->[0]->{lc $key};
+ } else {
+ $found = 1 if $key eq $last;
+ }
+ }
+ return;
+}
+
+1;
+
+=back
+
+=head1 CHANGES
+
+=head2 Version 1.02 (dpkg 1.21.0)
+
+New option: "keep_duplicate" in new().
+
+=head2 Version 1.01 (dpkg 1.17.2)
+
+New method: $c->parse_error().
+
+=head2 Version 1.00 (dpkg 1.17.0)
+
+Mark the module as public.
+
+=cut
+
+1;
diff --git a/scripts/Dpkg/Control/Info.pm b/scripts/Dpkg/Control/Info.pm
new file mode 100644
index 0000000..e4bc85e
--- /dev/null
+++ b/scripts/Dpkg/Control/Info.pm
@@ -0,0 +1,227 @@
+# Copyright © 2007-2010 Raphaël Hertzog <hertzog@debian.org>
+# Copyright © 2009, 2012-2015 Guillem Jover <guillem@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::Control::Info;
+
+use strict;
+use warnings;
+
+our $VERSION = '1.01';
+
+use Dpkg::Control;
+use Dpkg::ErrorHandling;
+use Dpkg::Gettext;
+
+use parent qw(Dpkg::Interface::Storable);
+
+use overload
+ '@{}' => sub { return [ $_[0]->{source}, @{$_[0]->{packages}} ] };
+
+=encoding utf8
+
+=head1 NAME
+
+Dpkg::Control::Info - parse files like debian/control
+
+=head1 DESCRIPTION
+
+It provides a class to access data of files that follow the same
+syntax as F<debian/control>.
+
+=head1 METHODS
+
+=over 4
+
+=item $c = Dpkg::Control::Info->new(%opts)
+
+Create a new Dpkg::Control::Info object. Loads the file from the filename
+option, if no option is specified filename defaults to F<debian/control>.
+If a scalar is passed instead, it will be used as the filename. If filename
+is "-", it parses the standard input. If filename is undef no loading will
+be performed.
+
+=cut
+
+sub new {
+ my ($this, @args) = @_;
+ my $class = ref($this) || $this;
+ my $self = {
+ source => undef,
+ packages => [],
+ };
+ bless $self, $class;
+
+ my %opts;
+ if (scalar @args == 0) {
+ $opts{filename} = 'debian/control';
+ } elsif (scalar @args == 1) {
+ $opts{filename} = $args[0];
+ } else {
+ %opts = @args;
+ }
+
+ $self->load($opts{filename}) if $opts{filename};
+
+ return $self;
+}
+
+=item $c->reset()
+
+Resets what got read.
+
+=cut
+
+sub reset {
+ my $self = shift;
+ $self->{source} = undef;
+ $self->{packages} = [];
+}
+
+=item $c->parse($fh, $description)
+
+Parse a control file from the given filehandle. Exits in case of errors.
+$description is used to describe the filehandle, ideally it's a filename
+or a description of where the data comes from. It is used in error messages.
+The data in the object is reset before parsing new control files.
+
+=cut
+
+sub parse {
+ my ($self, $fh, $desc) = @_;
+ $self->reset();
+ my $cdata = Dpkg::Control->new(type => CTRL_INFO_SRC);
+ return if not $cdata->parse($fh, $desc);
+ $self->{source} = $cdata;
+ unless (exists $cdata->{Source}) {
+ $cdata->parse_error($desc, g_("first stanza lacks a '%s' field"),
+ 'Source');
+ }
+ while (1) {
+ $cdata = Dpkg::Control->new(type => CTRL_INFO_PKG);
+ last if not $cdata->parse($fh, $desc);
+ push @{$self->{packages}}, $cdata;
+ unless (exists $cdata->{Package}) {
+ $cdata->parse_error($desc, g_("stanza lacks the '%s' field"),
+ 'Package');
+ }
+ unless (exists $cdata->{Architecture}) {
+ $cdata->parse_error($desc, g_("stanza lacks the '%s' field"),
+ 'Architecture');
+ }
+ }
+}
+
+=item $c->load($file)
+
+Load the content of $file. Exits in case of errors. If file is "-", it
+loads from the standard input.
+
+=item $c->[0]
+
+=item $c->get_source()
+
+Returns a Dpkg::Control object containing the fields concerning the
+source package.
+
+=cut
+
+sub get_source {
+ my $self = shift;
+ return $self->{source};
+}
+
+=item $c->get_pkg_by_idx($idx)
+
+Returns a Dpkg::Control object containing the fields concerning the binary
+package numbered $idx (starting at 1).
+
+=cut
+
+sub get_pkg_by_idx {
+ my ($self, $idx) = @_;
+ return $self->{packages}[--$idx];
+}
+
+=item $c->get_pkg_by_name($name)
+
+Returns a Dpkg::Control object containing the fields concerning the binary
+package named $name.
+
+=cut
+
+sub get_pkg_by_name {
+ my ($self, $name) = @_;
+ foreach my $pkg (@{$self->{packages}}) {
+ return $pkg if ($pkg->{Package} eq $name);
+ }
+ return;
+}
+
+
+=item $c->get_packages()
+
+Returns a list containing the Dpkg::Control objects for all binary packages.
+
+=cut
+
+sub get_packages {
+ my $self = shift;
+ return @{$self->{packages}};
+}
+
+=item $str = $c->output([$fh])
+
+Return the content info into a string. If $fh is specified print it into
+the filehandle.
+
+=cut
+
+sub output {
+ my ($self, $fh) = @_;
+ my $str;
+ $str .= $self->{source}->output($fh);
+ foreach my $pkg (@{$self->{packages}}) {
+ print { $fh } "\n" if defined $fh;
+ $str .= "\n" . $pkg->output($fh);
+ }
+ return $str;
+}
+
+=item "$c"
+
+Return a string representation of the content.
+
+=item @{$c}
+
+Return a list of Dpkg::Control objects, the first one is corresponding to
+source information and the following ones are the binary packages
+information.
+
+=back
+
+=head1 CHANGES
+
+=head2 Version 1.01 (dpkg 1.18.0)
+
+New argument: The $c->new() constructor accepts an %opts argument.
+
+=head2 Version 1.00 (dpkg 1.15.6)
+
+Mark the module as public.
+
+=cut
+
+1;
diff --git a/scripts/Dpkg/Control/Tests.pm b/scripts/Dpkg/Control/Tests.pm
new file mode 100644
index 0000000..3c8d1c0
--- /dev/null
+++ b/scripts/Dpkg/Control/Tests.pm
@@ -0,0 +1,83 @@
+# Copyright © 2016 Guillem Jover <guillem@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::Control::Tests;
+
+use strict;
+use warnings;
+
+our $VERSION = '1.00';
+
+use Dpkg::Control;
+use Dpkg::Control::Tests::Entry;
+use Dpkg::Index;
+
+use parent qw(Dpkg::Index);
+
+=encoding utf8
+
+=head1 NAME
+
+Dpkg::Control::Tests - parse files like debian/tests/control
+
+=head1 DESCRIPTION
+
+It provides a class to access data of files that follow the same
+syntax as F<debian/tests/control>.
+
+=head1 METHODS
+
+All the methods of Dpkg::Index are available. Those listed below are either
+new or overridden with a different behavior.
+
+=over 4
+
+=item $c = Dpkg::Control::Tests->new(%opts)
+
+Create a new Dpkg::Control::Tests object, which inherits from Dpkg::Index.
+
+=cut
+
+sub new {
+ my ($this, %opts) = @_;
+ my $class = ref($this) || $this;
+ my $self = Dpkg::Index->new(type => CTRL_TESTS, %opts);
+
+ return bless $self, $class;
+}
+
+=item $item = $tests->new_item()
+
+Creates a new item.
+
+=cut
+
+sub new_item {
+ my $self = shift;
+
+ return Dpkg::Control::Tests::Entry->new();
+}
+
+=back
+
+=head1 CHANGES
+
+=head2 Version 1.00 (dpkg 1.18.8)
+
+Mark the module as public.
+
+=cut
+
+1;
diff --git a/scripts/Dpkg/Control/Tests/Entry.pm b/scripts/Dpkg/Control/Tests/Entry.pm
new file mode 100644
index 0000000..cbcd7e8
--- /dev/null
+++ b/scripts/Dpkg/Control/Tests/Entry.pm
@@ -0,0 +1,94 @@
+# Copyright © 2016 Guillem Jover <guillem@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::Control::Tests::Entry;
+
+use strict;
+use warnings;
+
+our $VERSION = '1.00';
+
+use Dpkg::Gettext;
+use Dpkg::ErrorHandling;
+use Dpkg::Control;
+
+use parent qw(Dpkg::Control);
+
+=encoding utf8
+
+=head1 NAME
+
+Dpkg::Control::Tests::Entry - represents a test suite entry
+
+=head1 DESCRIPTION
+
+This class represents a test suite entry.
+
+=head1 METHODS
+
+All the methods of Dpkg::Control are available. Those listed below are either
+new or overridden with a different behavior.
+
+=over 4
+
+=item $entry = Dpkg::Control::Tests::Entry->new()
+
+Creates a new object. It does not represent a real control test entry
+until one has been successfully parsed or built from scratch.
+
+=cut
+
+sub new {
+ my ($this, %opts) = @_;
+ my $class = ref($this) || $this;
+
+ my $self = Dpkg::Control->new(type => CTRL_TESTS, %opts);
+ bless $self, $class;
+ return $self;
+}
+
+=item $entry->parse($fh, $desc)
+
+Parse a control test entry from a filehandle. When called multiple times,
+the parsed fields are accumulated.
+
+Returns true if parsing was a success.
+
+=cut
+
+sub parse {
+ my ($self, $fh, $desc) = @_;
+
+ return if not $self->SUPER::parse($fh, $desc);
+
+ if (not exists $self->{'Tests'} and not exists $self->{'Test-Command'}) {
+ $self->parse_error($desc, g_('stanza lacks either %s or %s fields'),
+ 'Tests', 'Test-Command');
+ }
+
+ return 1;
+}
+
+=back
+
+=head1 CHANGES
+
+=head2 Version 1.00 (dpkg 1.18.8)
+
+Mark the module as public.
+
+=cut
+
+1;
diff --git a/scripts/Dpkg/Control/Types.pm b/scripts/Dpkg/Control/Types.pm
new file mode 100644
index 0000000..8dd1aa1
--- /dev/null
+++ b/scripts/Dpkg/Control/Types.pm
@@ -0,0 +1,102 @@
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::Control::Types;
+
+use strict;
+use warnings;
+
+our $VERSION = '0.01';
+our @EXPORT = qw(
+ CTRL_UNKNOWN
+ CTRL_INFO_SRC
+ CTRL_INFO_PKG
+ CTRL_REPO_RELEASE
+ CTRL_INDEX_SRC
+ CTRL_INDEX_PKG
+ CTRL_PKG_SRC
+ CTRL_PKG_DEB
+ CTRL_FILE_BUILDINFO
+ CTRL_FILE_CHANGES
+ CTRL_FILE_VENDOR
+ CTRL_FILE_STATUS
+ CTRL_CHANGELOG
+ CTRL_COPYRIGHT_HEADER
+ CTRL_COPYRIGHT_FILES
+ CTRL_COPYRIGHT_LICENSE
+ CTRL_TESTS
+);
+
+use Exporter qw(import);
+
+=encoding utf8
+
+=head1 NAME
+
+Dpkg::Control::Types - export CTRL_* constants
+
+=head1 DESCRIPTION
+
+You should not use this module directly. Instead you more likely
+want to use Dpkg::Control which also re-exports the same constants.
+
+This module has been introduced solely to avoid a dependency loop
+between Dpkg::Control and Dpkg::Control::Fields.
+
+=cut
+
+use constant {
+ CTRL_UNKNOWN => 0,
+ # First control stanza in debian/control.
+ CTRL_INFO_SRC => 1 << 0,
+ # Subsequent control stanza in debian/control.
+ CTRL_INFO_PKG => 1 << 1,
+ # Entry in repository's Sources files.
+ CTRL_INDEX_SRC => 1 << 2,
+ # Entry in repository's Packages files.
+ CTRL_INDEX_PKG => 1 << 3,
+ # .dsc file of source package.
+ CTRL_PKG_SRC => 1 << 4,
+ # DEBIAN/control in binary packages.
+ CTRL_PKG_DEB => 1 << 5,
+ # .changes file.
+ CTRL_FILE_CHANGES => 1 << 6,
+ # File in $Dpkg::CONFDIR/origins.
+ CTRL_FILE_VENDOR => 1 << 7,
+ # $Dpkg::ADMINDIR/status.
+ CTRL_FILE_STATUS => 1 << 8,
+ # Output of dpkg-parsechangelog.
+ CTRL_CHANGELOG => 1 << 9,
+ # Repository's (In)Release file.
+ CTRL_REPO_RELEASE => 1 << 10,
+ # Header control stanza in debian/copyright.
+ CTRL_COPYRIGHT_HEADER => 1 << 11,
+ # Files control stanza in debian/copyright.
+ CTRL_COPYRIGHT_FILES => 1 << 12,
+ # License control stanza in debian/copyright.
+ CTRL_COPYRIGHT_LICENSE => 1 << 13,
+ # Package test suite control file in debian/tests/control.
+ CTRL_TESTS => 1 << 14,
+ # .buildinfo file
+ CTRL_FILE_BUILDINFO => 1 << 15,
+};
+
+=head1 CHANGES
+
+=head2 Version 0.xx
+
+This is a private module.
+
+=cut
+
+1;
diff --git a/scripts/Dpkg/Deps.pm b/scripts/Dpkg/Deps.pm
new file mode 100644
index 0000000..5afa384
--- /dev/null
+++ b/scripts/Dpkg/Deps.pm
@@ -0,0 +1,490 @@
+# Copyright © 1998 Richard Braakman
+# Copyright © 1999 Darren Benham
+# Copyright © 2000 Sean 'Shaleh' Perry
+# Copyright © 2004 Frank Lichtenheld
+# Copyright © 2006 Russ Allbery
+# Copyright © 2007-2009 Raphaël Hertzog <hertzog@debian.org>
+# Copyright © 2008-2009,2012-2014 Guillem Jover <guillem@debian.org>
+#
+# This program 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 of the License, 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::Deps;
+
+=encoding utf8
+
+=head1 NAME
+
+Dpkg::Deps - parse and manipulate dependencies of Debian packages
+
+=head1 DESCRIPTION
+
+The Dpkg::Deps module provides classes implementing various types of
+dependencies.
+
+The most important function is deps_parse(), it turns a dependency line in
+a set of Dpkg::Deps::{Simple,AND,OR,Union} objects depending on the case.
+
+=head1 FUNCTIONS
+
+All the deps_* functions are exported by default.
+
+=over 4
+
+=cut
+
+use strict;
+use warnings;
+use feature qw(current_sub);
+
+our $VERSION = '1.07';
+our @EXPORT = qw(
+ deps_concat
+ deps_parse
+ deps_eval_implication
+ deps_iterate
+ deps_compare
+);
+
+use Carp;
+use Exporter qw(import);
+
+use Dpkg::Version;
+use Dpkg::Arch qw(get_host_arch get_build_arch debarch_to_debtuple);
+use Dpkg::BuildProfiles qw(get_build_profiles);
+use Dpkg::ErrorHandling;
+use Dpkg::Gettext;
+use Dpkg::Deps::Simple;
+use Dpkg::Deps::Union;
+use Dpkg::Deps::AND;
+use Dpkg::Deps::OR;
+use Dpkg::Deps::KnownFacts;
+
+=item deps_eval_implication($rel_p, $v_p, $rel_q, $v_q)
+
+($rel_p, $v_p) and ($rel_q, $v_q) express two dependencies as (relation,
+version). The relation variable can have the following values that are
+exported by Dpkg::Version: REL_EQ, REL_LT, REL_LE, REL_GT, REL_GT.
+
+This functions returns 1 if the "p" dependency implies the "q"
+dependency. It returns 0 if the "p" dependency implies that "q" is
+not satisfied. It returns undef when there's no implication.
+
+The $v_p and $v_q parameter should be Dpkg::Version objects.
+
+=cut
+
+sub deps_eval_implication {
+ my ($rel_p, $v_p, $rel_q, $v_q) = @_;
+
+ # If versions are not valid, we can't decide of any implication
+ return unless defined($v_p) and $v_p->is_valid();
+ return unless defined($v_q) and $v_q->is_valid();
+
+ # q wants an exact version, so p must provide that exact version. p
+ # disproves q if q's version is outside the range enforced by p.
+ if ($rel_q eq REL_EQ) {
+ if ($rel_p eq REL_LT) {
+ return ($v_p <= $v_q) ? 0 : undef;
+ } elsif ($rel_p eq REL_LE) {
+ return ($v_p < $v_q) ? 0 : undef;
+ } elsif ($rel_p eq REL_GT) {
+ return ($v_p >= $v_q) ? 0 : undef;
+ } elsif ($rel_p eq REL_GE) {
+ return ($v_p > $v_q) ? 0 : undef;
+ } elsif ($rel_p eq REL_EQ) {
+ return ($v_p == $v_q);
+ }
+ }
+
+ # A greater than clause may disprove a less than clause. An equal
+ # cause might as well. Otherwise, if
+ # p's clause is <<, <=, or =, the version must be <= q's to imply q.
+ if ($rel_q eq REL_LE) {
+ if ($rel_p eq REL_GT) {
+ return ($v_p >= $v_q) ? 0 : undef;
+ } elsif ($rel_p eq REL_GE) {
+ return ($v_p > $v_q) ? 0 : undef;
+ } elsif ($rel_p eq REL_EQ) {
+ return ($v_p <= $v_q) ? 1 : 0;
+ } else { # <<, <=
+ return ($v_p <= $v_q) ? 1 : undef;
+ }
+ }
+
+ # Similar, but << is stronger than <= so p's version must be << q's
+ # version if the p relation is <= or =.
+ if ($rel_q eq REL_LT) {
+ if ($rel_p eq REL_GT or $rel_p eq REL_GE) {
+ return ($v_p >= $v_p) ? 0 : undef;
+ } elsif ($rel_p eq REL_LT) {
+ return ($v_p <= $v_q) ? 1 : undef;
+ } elsif ($rel_p eq REL_EQ) {
+ return ($v_p < $v_q) ? 1 : 0;
+ } else { # <<, <=
+ return ($v_p < $v_q) ? 1 : undef;
+ }
+ }
+
+ # Same logic as above, only inverted.
+ if ($rel_q eq REL_GE) {
+ if ($rel_p eq REL_LT) {
+ return ($v_p <= $v_q) ? 0 : undef;
+ } elsif ($rel_p eq REL_LE) {
+ return ($v_p < $v_q) ? 0 : undef;
+ } elsif ($rel_p eq REL_EQ) {
+ return ($v_p >= $v_q) ? 1 : 0;
+ } else { # >>, >=
+ return ($v_p >= $v_q) ? 1 : undef;
+ }
+ }
+ if ($rel_q eq REL_GT) {
+ if ($rel_p eq REL_LT or $rel_p eq REL_LE) {
+ return ($v_p <= $v_q) ? 0 : undef;
+ } elsif ($rel_p eq REL_GT) {
+ return ($v_p >= $v_q) ? 1 : undef;
+ } elsif ($rel_p eq REL_EQ) {
+ return ($v_p > $v_q) ? 1 : 0;
+ } else {
+ return ($v_p > $v_q) ? 1 : undef;
+ }
+ }
+
+ return;
+}
+
+=item $dep = deps_concat(@dep_list)
+
+This function concatenates multiple dependency lines into a single line,
+joining them with ", " if appropriate, and always returning a valid string.
+
+=cut
+
+sub deps_concat {
+ my (@dep_list) = @_;
+
+ return join ', ', grep { defined } @dep_list;
+}
+
+=item $dep = deps_parse($line, %options)
+
+This function parses the dependency line and returns an object, either a
+Dpkg::Deps::AND or a Dpkg::Deps::Union. Various options can alter the
+behaviour of that function.
+
+=over 4
+
+=item use_arch (defaults to 1)
+
+Take into account the architecture restriction part of the dependencies.
+Set to 0 to completely ignore that information.
+
+=item host_arch (defaults to the current architecture)
+
+Define the host architecture. By default it uses
+Dpkg::Arch::get_host_arch() to identify the proper architecture.
+
+=item build_arch (defaults to the current architecture)
+
+Define the build architecture. By default it uses
+Dpkg::Arch::get_build_arch() to identify the proper architecture.
+
+=item reduce_arch (defaults to 0)
+
+If set to 1, ignore dependencies that do not concern the current host
+architecture. This implicitly strips off the architecture restriction
+list so that the resulting dependencies are directly applicable to the
+current architecture.
+
+=item use_profiles (defaults to 1)
+
+Take into account the profile restriction part of the dependencies. Set
+to 0 to completely ignore that information.
+
+=item build_profiles (defaults to no profile)
+
+Define the active build profiles. By default no profile is defined.
+
+=item reduce_profiles (defaults to 0)
+
+If set to 1, ignore dependencies that do not concern the current build
+profile. This implicitly strips off the profile restriction formula so
+that the resulting dependencies are directly applicable to the current
+profiles.
+
+=item reduce_restrictions (defaults to 0)
+
+If set to 1, ignore dependencies that do not concern the current set of
+restrictions. This implicitly strips off any architecture restriction list
+or restriction formula so that the resulting dependencies are directly
+applicable to the current restriction.
+This currently implies C<reduce_arch> and C<reduce_profiles>, and overrides
+them if set.
+
+=item union (defaults to 0)
+
+If set to 1, returns a Dpkg::Deps::Union instead of a Dpkg::Deps::AND. Use
+this when parsing non-dependency fields like Conflicts.
+
+=item virtual (defaults to 0)
+
+If set to 1, allow only virtual package version relations, that is none,
+or "=".
+This should be set whenever working with Provides fields.
+
+=item build_dep (defaults to 0)
+
+If set to 1, allow build-dep only arch qualifiers, that is ":native".
+This should be set whenever working with build-deps.
+
+=item tests_dep (defaults to 0)
+
+If set to 1, allow tests-specific package names in dependencies, that is
+"@" and "@builddeps@" (since dpkg 1.18.7). This should be set whenever
+working with dependency fields from F<debian/tests/control>.
+
+=back
+
+=cut
+
+sub deps_parse {
+ my ($dep_line, %options) = @_;
+
+ # Validate arguments.
+ croak "invalid host_arch $options{host_arch}"
+ if defined $options{host_arch} and not defined debarch_to_debtuple($options{host_arch});
+ croak "invalid build_arch $options{build_arch}"
+ if defined $options{build_arch} and not defined debarch_to_debtuple($options{build_arch});
+
+ $options{use_arch} //= 1;
+ $options{reduce_arch} //= 0;
+ $options{use_profiles} //= 1;
+ $options{reduce_profiles} //= 0;
+ $options{reduce_restrictions} //= 0;
+ $options{union} //= 0;
+ $options{virtual} //= 0;
+ $options{build_dep} //= 0;
+ $options{tests_dep} //= 0;
+
+ if ($options{reduce_restrictions}) {
+ $options{reduce_arch} = 1;
+ $options{reduce_profiles} = 1;
+ }
+ if ($options{reduce_arch}) {
+ $options{host_arch} //= get_host_arch();
+ $options{build_arch} //= get_build_arch();
+ }
+ if ($options{reduce_profiles}) {
+ $options{build_profiles} //= [ get_build_profiles() ];
+ }
+
+ # Options for Dpkg::Deps::Simple.
+ my %deps_options = (
+ host_arch => $options{host_arch},
+ build_arch => $options{build_arch},
+ build_dep => $options{build_dep},
+ tests_dep => $options{tests_dep},
+ );
+
+ # Merge in a single-line
+ $dep_line =~ s/\s*[\r\n]\s*/ /g;
+ # Strip trailing/leading spaces
+ $dep_line =~ s/^\s+//;
+ $dep_line =~ s/\s+$//;
+
+ my @dep_list;
+ foreach my $dep_and (split(/\s*,\s*/m, $dep_line)) {
+ my @or_list = ();
+ foreach my $dep_or (split(/\s*\|\s*/m, $dep_and)) {
+ my $dep_simple = Dpkg::Deps::Simple->new($dep_or, %deps_options);
+ if (not defined $dep_simple->{package}) {
+ warning(g_("can't parse dependency %s"), $dep_or);
+ return;
+ }
+ if ($options{virtual} && defined $dep_simple->{relation} &&
+ $dep_simple->{relation} ne '=') {
+ warning(g_('virtual dependency contains invalid relation: %s'),
+ $dep_simple->output);
+ return;
+ }
+ $dep_simple->{arches} = undef if not $options{use_arch};
+ if ($options{reduce_arch}) {
+ $dep_simple->reduce_arch($options{host_arch});
+ next if not $dep_simple->arch_is_concerned($options{host_arch});
+ }
+ $dep_simple->{restrictions} = undef if not $options{use_profiles};
+ if ($options{reduce_profiles}) {
+ $dep_simple->reduce_profiles($options{build_profiles});
+ next if not $dep_simple->profile_is_concerned($options{build_profiles});
+ }
+ push @or_list, $dep_simple;
+ }
+ next if not @or_list;
+ if (scalar @or_list == 1) {
+ push @dep_list, $or_list[0];
+ } else {
+ my $dep_or = Dpkg::Deps::OR->new();
+ $dep_or->add($_) foreach (@or_list);
+ push @dep_list, $dep_or;
+ }
+ }
+ my $dep_and;
+ if ($options{union}) {
+ $dep_and = Dpkg::Deps::Union->new();
+ } else {
+ $dep_and = Dpkg::Deps::AND->new();
+ }
+ foreach my $dep (@dep_list) {
+ if ($options{union} and not $dep->isa('Dpkg::Deps::Simple')) {
+ warning(g_('an union dependency can only contain simple dependencies'));
+ return;
+ }
+ $dep_and->add($dep);
+ }
+ return $dep_and;
+}
+
+=item $bool = deps_iterate($deps, $callback_func)
+
+This function visits all elements of the dependency object, calling the
+callback function for each element.
+
+The callback function is expected to return true when everything is fine,
+or false if something went wrong, in which case the iteration will stop.
+
+Return the same value as the callback function.
+
+=cut
+
+sub deps_iterate {
+ my ($deps, $callback_func) = @_;
+
+ my $visitor_func = sub {
+ foreach my $dep (@_) {
+ return unless defined $dep;
+
+ if ($dep->isa('Dpkg::Deps::Simple')) {
+ return unless $callback_func->($dep);
+ } else {
+ return unless __SUB__->($dep->get_deps());
+ }
+ }
+ return 1;
+ };
+
+ return $visitor_func->($deps);
+}
+
+=item deps_compare($a, $b)
+
+Implements a comparison operator between two dependency objects.
+This function is mainly used to implement the sort() method.
+
+=back
+
+=cut
+
+my %relation_ordering = (
+ undef => 0,
+ REL_GE() => 1,
+ REL_GT() => 2,
+ REL_EQ() => 3,
+ REL_LT() => 4,
+ REL_LE() => 5,
+);
+
+sub deps_compare {
+ my ($aref, $bref) = @_;
+
+ my (@as, @bs);
+ deps_iterate($aref, sub { push @as, @_ });
+ deps_iterate($bref, sub { push @bs, @_ });
+
+ while (1) {
+ my ($a, $b) = (shift @as, shift @bs);
+ my $aundef = not defined $a or $a->is_empty();
+ my $bundef = not defined $b or $b->is_empty();
+
+ return 0 if $aundef and $bundef;
+ return -1 if $aundef;
+ return 1 if $bundef;
+
+ my $ar = $a->{relation} // 'undef';
+ my $br = $b->{relation} // 'undef';
+ my $av = $a->{version} // '';
+ my $bv = $b->{version} // '';
+
+ my $res = (($a->{package} cmp $b->{package}) ||
+ ($relation_ordering{$ar} <=> $relation_ordering{$br}) ||
+ ($av cmp $bv));
+ return $res if $res != 0;
+ }
+}
+
+=head1 CLASSES - Dpkg::Deps::*
+
+There are several kind of dependencies. A Dpkg::Deps::Simple dependency
+represents a single dependency statement (it relates to one package only).
+Dpkg::Deps::Multiple dependencies are built on top of this class
+and combine several dependencies in different manners. Dpkg::Deps::AND
+represents the logical "AND" between dependencies while Dpkg::Deps::OR
+represents the logical "OR". Dpkg::Deps::Multiple objects can contain
+Dpkg::Deps::Simple object as well as other Dpkg::Deps::Multiple objects.
+
+In practice, the code is only meant to handle the realistic cases which,
+given Debian's dependencies structure, imply those restrictions: AND can
+contain Simple or OR objects, OR can only contain Simple objects.
+
+Dpkg::Deps::KnownFacts is a special class that is used while evaluating
+dependencies and while trying to simplify them. It represents a set of
+installed packages along with the virtual packages that they might
+provide.
+
+=head1 CHANGES
+
+=head2 Version 1.07 (dpkg 1.20.0)
+
+New option: Add virtual option to Dpkg::Deps::deps_parse().
+
+=head2 Version 1.06 (dpkg 1.18.7; module version bumped on dpkg 1.18.24)
+
+New option: Add tests_dep option to Dpkg::Deps::deps_parse().
+
+=head2 Version 1.05 (dpkg 1.17.14)
+
+New function: Dpkg::Deps::deps_iterate().
+
+=head2 Version 1.04 (dpkg 1.17.10)
+
+New options: Add use_profiles, build_profiles, reduce_profiles and
+reduce_restrictions to Dpkg::Deps::deps_parse().
+
+=head2 Version 1.03 (dpkg 1.17.0)
+
+New option: Add build_arch option to Dpkg::Deps::deps_parse().
+
+=head2 Version 1.02 (dpkg 1.17.0)
+
+New function: Dpkg::Deps::deps_concat()
+
+=head2 Version 1.01 (dpkg 1.16.1)
+
+<Used to document changes to Dpkg::Deps::* modules before they were split.>
+
+=head2 Version 1.00 (dpkg 1.15.6)
+
+Mark the module as public.
+
+=cut
+
+1;
diff --git a/scripts/Dpkg/Deps/AND.pm b/scripts/Dpkg/Deps/AND.pm
new file mode 100644
index 0000000..7b403c2
--- /dev/null
+++ b/scripts/Dpkg/Deps/AND.pm
@@ -0,0 +1,182 @@
+# Copyright © 1998 Richard Braakman
+# Copyright © 1999 Darren Benham
+# Copyright © 2000 Sean 'Shaleh' Perry
+# Copyright © 2004 Frank Lichtenheld
+# Copyright © 2006 Russ Allbery
+# Copyright © 2007-2009 Raphaël Hertzog <hertzog@debian.org>
+# Copyright © 2008-2009, 2012-2014 Guillem Jover <guillem@debian.org>
+#
+# This program 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 of the License, 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::Deps::AND;
+
+=encoding utf8
+
+=head1 NAME
+
+Dpkg::Deps::AND - list of AND dependencies
+
+=head1 DESCRIPTION
+
+This class represents a list of dependencies that must be met at the same
+time. It inherits from Dpkg::Deps::Multiple.
+
+=cut
+
+use strict;
+use warnings;
+
+our $VERSION = '1.00';
+
+use parent qw(Dpkg::Deps::Multiple);
+
+=head1 METHODS
+
+=over 4
+
+=item $dep->output([$fh])
+
+The output method uses ", " to join the list of sub-dependencies.
+
+=cut
+
+sub output {
+ my ($self, $fh) = @_;
+
+ my $res = join(', ', map {
+ $_->output()
+ } grep {
+ not $_->is_empty()
+ } $self->get_deps());
+
+ if (defined $fh) {
+ print { $fh } $res;
+ }
+ return $res;
+}
+
+=item $dep->implies($other_dep)
+
+Returns 1 when $dep implies $other_dep. Returns 0 when $dep implies
+NOT($other_dep). Returns undef when there's no implication. $dep and
+$other_dep do not need to be of the same type.
+
+=cut
+
+sub implies {
+ my ($self, $o) = @_;
+
+ # If any individual member can imply $o or NOT $o, we're fine
+ foreach my $dep ($self->get_deps()) {
+ my $implication = $dep->implies($o);
+ return 1 if defined $implication and $implication == 1;
+ return 0 if defined $implication and $implication == 0;
+ }
+
+ # If o is an AND, we might have an implication, if we find an
+ # implication within us for each predicate in o
+ if ($o->isa('Dpkg::Deps::AND')) {
+ my $subset = 1;
+ foreach my $odep ($o->get_deps()) {
+ my $found = 0;
+ foreach my $dep ($self->get_deps()) {
+ $found = 1 if $dep->implies($odep);
+ }
+ $subset = 0 if not $found;
+ }
+ return 1 if $subset;
+ }
+ return;
+}
+
+=item $dep->get_evaluation($facts)
+
+Evaluates the dependency given a list of installed packages and a list of
+virtual packages provided. These lists are part of the Dpkg::Deps::KnownFacts
+object given as parameters.
+
+Returns 1 when it's true, 0 when it's false, undef when some information
+is lacking to conclude.
+
+=cut
+
+sub get_evaluation {
+ my ($self, $facts) = @_;
+
+ # Return 1 only if all members evaluates to true
+ # Return 0 if at least one member evaluates to false
+ # Return undef otherwise
+ my $result = 1;
+ foreach my $dep ($self->get_deps()) {
+ my $eval = $dep->get_evaluation($facts);
+ if (not defined $eval) {
+ $result = undef;
+ } elsif ($eval == 0) {
+ $result = 0;
+ last;
+ } elsif ($eval == 1) {
+ # Still possible
+ }
+ }
+ return $result;
+}
+
+=item $dep->simplify_deps($facts, @assumed_deps)
+
+Simplifies the dependency as much as possible given the list of facts (see
+object Dpkg::Deps::KnownFacts) and a list of other dependencies that are
+known to be true.
+
+=cut
+
+sub simplify_deps {
+ my ($self, $facts, @knowndeps) = @_;
+ my @new;
+
+WHILELOOP:
+ while (@{$self->{list}}) {
+ my $dep = shift @{$self->{list}};
+ my $eval = $dep->get_evaluation($facts);
+ next if defined $eval and $eval == 1;
+ foreach my $odep (@knowndeps, @new) {
+ next WHILELOOP if $odep->implies($dep);
+ }
+ # When a dependency is implied by another dependency that
+ # follows, then invert them
+ # "a | b, c, a" becomes "a, c" and not "c, a"
+ my $i = 0;
+ foreach my $odep (@{$self->{list}}) {
+ if (defined $odep and $odep->implies($dep)) {
+ splice @{$self->{list}}, $i, 1;
+ unshift @{$self->{list}}, $odep;
+ next WHILELOOP;
+ }
+ $i++;
+ }
+ push @new, $dep;
+ }
+ $self->{list} = [ @new ];
+}
+
+=back
+
+=head1 CHANGES
+
+=head2 Version 1.00 (dpkg 1.15.6)
+
+Mark the module as public.
+
+=cut
+
+1;
diff --git a/scripts/Dpkg/Deps/KnownFacts.pm b/scripts/Dpkg/Deps/KnownFacts.pm
new file mode 100644
index 0000000..ef8655f
--- /dev/null
+++ b/scripts/Dpkg/Deps/KnownFacts.pm
@@ -0,0 +1,218 @@
+# Copyright © 1998 Richard Braakman
+# Copyright © 1999 Darren Benham
+# Copyright © 2000 Sean 'Shaleh' Perry
+# Copyright © 2004 Frank Lichtenheld
+# Copyright © 2006 Russ Allbery
+# Copyright © 2007-2009 Raphaël Hertzog <hertzog@debian.org>
+# Copyright © 2008-2009, 2012-2014 Guillem Jover <guillem@debian.org>
+#
+# This program 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 of the License, 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::Deps::KnownFacts;
+
+=encoding utf8
+
+=head1 NAME
+
+Dpkg::Deps::KnownFacts - list of installed real and virtual packages
+
+=head1 DESCRIPTION
+
+This class represents a list of installed packages and a list of virtual
+packages provided (by the set of installed packages).
+
+=cut
+
+use strict;
+use warnings;
+
+our $VERSION = '2.00';
+
+use Dpkg::Version;
+
+=head1 METHODS
+
+=over 4
+
+=item $facts = Dpkg::Deps::KnownFacts->new();
+
+Creates a new object.
+
+=cut
+
+sub new {
+ my $this = shift;
+ my $class = ref($this) || $this;
+ my $self = {
+ pkg => {},
+ virtualpkg => {},
+ };
+
+ bless $self, $class;
+ return $self;
+}
+
+=item $facts->add_installed_package($package, $version, $arch, $multiarch)
+
+Records that the given version of the package is installed. If
+$version/$arch is undefined we know that the package is installed but we
+don't know which version/architecture it is. $multiarch is the Multi-Arch
+field of the package. If $multiarch is undef, it will be equivalent to
+"Multi-Arch: no".
+
+Note that $multiarch is only used if $arch is provided.
+
+=cut
+
+sub add_installed_package {
+ my ($self, $pkg, $ver, $arch, $multiarch) = @_;
+ my $p = {
+ package => $pkg,
+ version => $ver,
+ architecture => $arch,
+ multiarch => $multiarch // 'no',
+ };
+
+ $self->{pkg}{"$pkg:$arch"} = $p if defined $arch;
+ push @{$self->{pkg}{$pkg}}, $p;
+}
+
+=item $facts->add_provided_package($virtual, $relation, $version, $by)
+
+Records that the "$by" package provides the $virtual package. $relation
+and $version correspond to the associated relation given in the Provides
+field (if present).
+
+=cut
+
+sub add_provided_package {
+ my ($self, $pkg, $rel, $ver, $by) = @_;
+ my $v = {
+ package => $pkg,
+ relation => $rel,
+ version => $ver,
+ provider => $by,
+ };
+
+ $self->{virtualpkg}{$pkg} //= [];
+ push @{$self->{virtualpkg}{$pkg}}, $v;
+}
+
+##
+## The functions below are private to Dpkg::Deps::KnownFacts.
+##
+
+sub _find_package {
+ my ($self, $dep, $lackinfos) = @_;
+ my ($pkg, $archqual) = ($dep->{package}, $dep->{archqual});
+
+ return if not exists $self->{pkg}{$pkg};
+
+ my $host_arch = $dep->{host_arch} // Dpkg::Arch::get_host_arch();
+ my $build_arch = $dep->{build_arch} // Dpkg::Arch::get_build_arch();
+
+ foreach my $p (@{$self->{pkg}{$pkg}}) {
+ my $a = $p->{architecture};
+ my $ma = $p->{multiarch};
+
+ if (not defined $a) {
+ $$lackinfos = 1;
+ next;
+ }
+ if (not defined $archqual) {
+ return $p if $ma eq 'foreign';
+ return $p if $a eq $host_arch or $a eq 'all';
+ } elsif ($archqual eq 'any') {
+ return $p if $ma eq 'allowed';
+ } elsif ($archqual eq 'native') {
+ return if $ma eq 'foreign';
+ return $p if $a eq $build_arch or $a eq 'all';
+ } else {
+ return $p if $a eq $archqual;
+ }
+ }
+ return;
+}
+
+sub _find_virtual_packages {
+ my ($self, $pkg) = @_;
+
+ return () if not exists $self->{virtualpkg}{$pkg};
+ return @{$self->{virtualpkg}{$pkg}};
+}
+
+=item $facts->evaluate_simple_dep()
+
+This method is private and should not be used except from within Dpkg::Deps.
+
+=cut
+
+sub evaluate_simple_dep {
+ my ($self, $dep) = @_;
+ my ($lackinfos, $pkg) = (0, $dep->{package});
+
+ my $p = $self->_find_package($dep, \$lackinfos);
+ if ($p) {
+ if (defined $dep->{relation}) {
+ if (defined $p->{version}) {
+ return 1 if version_compare_relation($p->{version},
+ $dep->{relation},
+ $dep->{version});
+ } else {
+ $lackinfos = 1;
+ }
+ } else {
+ return 1;
+ }
+ }
+ foreach my $virtpkg ($self->_find_virtual_packages($pkg)) {
+ next if defined $virtpkg->{relation} and
+ $virtpkg->{relation} ne REL_EQ;
+
+ if (defined $dep->{relation}) {
+ next if not defined $virtpkg->{version};
+ return 1 if version_compare_relation($virtpkg->{version},
+ $dep->{relation},
+ $dep->{version});
+ } else {
+ return 1;
+ }
+ }
+ return if $lackinfos;
+ return 0;
+}
+
+=back
+
+=head1 CHANGES
+
+=head2 Version 2.00 (dpkg 1.20.0)
+
+Remove method: $facts->check_package().
+
+=head2 Version 1.01 (dpkg 1.16.1)
+
+New option: Dpkg::Deps::KnownFacts->add_installed_package() now accepts 2
+supplementary parameters ($arch and $multiarch).
+
+Deprecated method: Dpkg::Deps::KnownFacts->check_package() is obsolete,
+it should not have been part of the public API.
+
+=head2 Version 1.00 (dpkg 1.15.6)
+
+Mark the module as public.
+
+=cut
+
+1;
diff --git a/scripts/Dpkg/Deps/Multiple.pm b/scripts/Dpkg/Deps/Multiple.pm
new file mode 100644
index 0000000..da12f51
--- /dev/null
+++ b/scripts/Dpkg/Deps/Multiple.pm
@@ -0,0 +1,250 @@
+# Copyright © 1998 Richard Braakman
+# Copyright © 1999 Darren Benham
+# Copyright © 2000 Sean 'Shaleh' Perry
+# Copyright © 2004 Frank Lichtenheld
+# Copyright © 2006 Russ Allbery
+# Copyright © 2007-2009 Raphaël Hertzog <hertzog@debian.org>
+# Copyright © 2008-2009, 2012-2014 Guillem Jover <guillem@debian.org>
+#
+# This program 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 of the License, 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::Deps::Multiple;
+
+=encoding utf8
+
+=head1 NAME
+
+Dpkg::Deps::Multiple - base module to represent multiple dependencies
+
+=head1 DESCRIPTION
+
+The Dpkg::Deps::Multiple module provides objects implementing various types
+of dependencies. It is the base class for Dpkg::Deps::{AND,OR,Union}.
+
+=cut
+
+use strict;
+use warnings;
+
+our $VERSION = '1.02';
+
+use Carp;
+
+use Dpkg::ErrorHandling;
+
+use parent qw(Dpkg::Interface::Storable);
+
+=head1 METHODS
+
+=over 4
+
+=item $dep = Dpkg::Deps::Multiple->new(%opts);
+
+Creates a new object.
+
+=cut
+
+sub new {
+ my $this = shift;
+ my $class = ref($this) || $this;
+ my $self = { list => [ @_ ] };
+
+ bless $self, $class;
+ return $self;
+}
+
+=item $dep->reset()
+
+Clears any dependency information stored in $dep so that $dep->is_empty()
+returns true.
+
+=cut
+
+sub reset {
+ my $self = shift;
+
+ $self->{list} = [];
+}
+
+=item $dep->add(@deps)
+
+Adds new dependency objects at the end of the list.
+
+=cut
+
+sub add {
+ my $self = shift;
+
+ push @{$self->{list}}, @_;
+}
+
+=item $dep->get_deps()
+
+Returns a list of sub-dependencies.
+
+=cut
+
+sub get_deps {
+ my $self = shift;
+
+ return grep { not $_->is_empty() } @{$self->{list}};
+}
+
+=item $dep->sort()
+
+Sorts alphabetically the internal list of dependencies.
+
+=cut
+
+sub sort {
+ my $self = shift;
+
+ my @res = ();
+ @res = sort { Dpkg::Deps::deps_compare($a, $b) } @{$self->{list}};
+ $self->{list} = [ @res ];
+}
+
+=item $dep->arch_is_concerned($arch)
+
+Returns true if at least one of the sub-dependencies apply to this
+architecture.
+
+=cut
+
+sub arch_is_concerned {
+ my ($self, $host_arch) = @_;
+
+ my $res = 0;
+ foreach my $dep (@{$self->{list}}) {
+ $res = 1 if $dep->arch_is_concerned($host_arch);
+ }
+ return $res;
+}
+
+=item $dep->reduce_arch($arch)
+
+Simplifies the dependencies to contain only information relevant to the
+given architecture. The non-relevant sub-dependencies are simply removed.
+
+This trims off the architecture restriction list of Dpkg::Deps::Simple
+objects.
+
+=cut
+
+sub reduce_arch {
+ my ($self, $host_arch) = @_;
+
+ my @new;
+ foreach my $dep (@{$self->{list}}) {
+ $dep->reduce_arch($host_arch);
+ push @new, $dep if $dep->arch_is_concerned($host_arch);
+ }
+ $self->{list} = [ @new ];
+}
+
+=item $dep->has_arch_restriction()
+
+Returns the list of package names that have such a restriction.
+
+=cut
+
+sub has_arch_restriction {
+ my $self = shift;
+
+ my @res;
+ foreach my $dep (@{$self->{list}}) {
+ push @res, $dep->has_arch_restriction();
+ }
+ return @res;
+}
+
+=item $dep->profile_is_concerned()
+
+Returns true if at least one of the sub-dependencies apply to this profile.
+
+=cut
+
+sub profile_is_concerned {
+ my ($self, $build_profiles) = @_;
+
+ my $res = 0;
+ foreach my $dep (@{$self->{list}}) {
+ $res = 1 if $dep->profile_is_concerned($build_profiles);
+ }
+ return $res;
+}
+
+=item $dep->reduce_profiles()
+
+Simplifies the dependencies to contain only information relevant to the
+given profile. The non-relevant sub-dependencies are simply removed.
+
+This trims off the profile restriction list of Dpkg::Deps::Simple objects.
+
+=cut
+
+sub reduce_profiles {
+ my ($self, $build_profiles) = @_;
+
+ my @new;
+ foreach my $dep (@{$self->{list}}) {
+ $dep->reduce_profiles($build_profiles);
+ push @new, $dep if $dep->profile_is_concerned($build_profiles);
+ }
+ $self->{list} = [ @new ];
+}
+
+=item $dep->is_empty()
+
+Returns true if the dependency is empty and doesn't contain any useful
+information. This is true when a (descendant of) Dpkg::Deps::Multiple
+contains an empty list of dependencies.
+
+=cut
+
+sub is_empty {
+ my $self = shift;
+
+ return scalar @{$self->{list}} == 0;
+}
+
+=item $dep->merge_union($other_dep)
+
+This method is not meaningful for this object, and will always croak.
+
+=cut
+
+sub merge_union {
+ croak 'method merge_union() is only valid for Dpkg::Deps::Simple';
+}
+
+=back
+
+=head1 CHANGES
+
+=head2 Version 1.02 (dpkg 1.17.10)
+
+New methods: Add $dep->profile_is_concerned() and $dep->reduce_profiles().
+
+=head2 Version 1.01 (dpkg 1.16.1)
+
+New method: Add $dep->reset().
+
+=head2 Version 1.00 (dpkg 1.15.6)
+
+Mark the module as public.
+
+=cut
+
+1;
diff --git a/scripts/Dpkg/Deps/OR.pm b/scripts/Dpkg/Deps/OR.pm
new file mode 100644
index 0000000..4ce5c98
--- /dev/null
+++ b/scripts/Dpkg/Deps/OR.pm
@@ -0,0 +1,174 @@
+# Copyright © 1998 Richard Braakman
+# Copyright © 1999 Darren Benham
+# Copyright © 2000 Sean 'Shaleh' Perry
+# Copyright © 2004 Frank Lichtenheld
+# Copyright © 2006 Russ Allbery
+# Copyright © 2007-2009 Raphaël Hertzog <hertzog@debian.org>
+# Copyright © 2008-2009, 2012-2014 Guillem Jover <guillem@debian.org>
+#
+# This program 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 of the License, 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::Deps::OR;
+
+=encoding utf8
+
+=head1 NAME
+
+Dpkg::Deps::OR - list of OR dependencies
+
+=head1 DESCRIPTION
+
+This class represents a list of dependencies of which only one must be met
+for the dependency to be true. It inherits from Dpkg::Deps::Multiple.
+
+=cut
+
+use strict;
+use warnings;
+
+our $VERSION = '1.00';
+
+use parent qw(Dpkg::Deps::Multiple);
+
+=head1 METHODS
+
+=over 4
+
+=item $dep->output([$fh])
+
+The output method uses " | " to join the list of sub-dependencies.
+
+=cut
+
+sub output {
+ my ($self, $fh) = @_;
+
+ my $res = join(' | ', map {
+ $_->output()
+ } grep {
+ not $_->is_empty()
+ } $self->get_deps());
+
+ if (defined $fh) {
+ print { $fh } $res;
+ }
+ return $res;
+}
+
+=item $dep->implies($other_dep)
+
+Returns 1 when $dep implies $other_dep. Returns 0 when $dep implies
+NOT($other_dep). Returns undef when there's no implication. $dep and
+$other_dep do not need to be of the same type.
+
+=cut
+
+sub implies {
+ my ($self, $o) = @_;
+
+ # Special case for AND with a single member, replace it by its member
+ if ($o->isa('Dpkg::Deps::AND')) {
+ my @subdeps = $o->get_deps();
+ if (scalar(@subdeps) == 1) {
+ $o = $subdeps[0];
+ }
+ }
+
+ # In general, an OR dependency can't imply anything except if each
+ # of its member implies a member in the other OR dependency
+ if ($o->isa('Dpkg::Deps::OR')) {
+ my $subset = 1;
+ foreach my $dep ($self->get_deps()) {
+ my $found = 0;
+ foreach my $odep ($o->get_deps()) {
+ $found = 1 if $dep->implies($odep);
+ }
+ $subset = 0 if not $found;
+ }
+ return 1 if $subset;
+ }
+ return;
+}
+
+=item $dep->get_evaluation($facts)
+
+Evaluates the dependency given a list of installed packages and a list of
+virtual packages provided. These lists are part of the Dpkg::Deps::KnownFacts
+object given as parameters.
+
+Returns 1 when it's true, 0 when it's false, undef when some information
+is lacking to conclude.
+
+=cut
+
+sub get_evaluation {
+ my ($self, $facts) = @_;
+
+ # Returns false if all members evaluates to 0
+ # Returns true if at least one member evaluates to true
+ # Returns undef otherwise
+ my $result = 0;
+ foreach my $dep ($self->get_deps()) {
+ my $eval = $dep->get_evaluation($facts);
+ if (not defined $eval) {
+ $result = undef;
+ } elsif ($eval == 1) {
+ $result = 1;
+ last;
+ } elsif ($eval == 0) {
+ # Still possible to have a false evaluation
+ }
+ }
+ return $result;
+}
+
+=item $dep->simplify_deps($facts, @assumed_deps)
+
+Simplifies the dependency as much as possible given the list of facts (see
+object Dpkg::Deps::KnownFacts) and a list of other dependencies that are
+known to be true.
+
+=cut
+
+sub simplify_deps {
+ my ($self, $facts) = @_;
+ my @new;
+
+WHILELOOP:
+ while (@{$self->{list}}) {
+ my $dep = shift @{$self->{list}};
+ my $eval = $dep->get_evaluation($facts);
+ if (defined $eval and $eval == 1) {
+ $self->{list} = [];
+ return;
+ }
+ foreach my $odep (@new, @{$self->{list}}) {
+ next WHILELOOP if $odep->implies($dep);
+ }
+ push @new, $dep;
+ }
+ $self->{list} = [ @new ];
+}
+
+=back
+
+=head1 CHANGES
+
+=head2 Version 1.00 (dpkg 1.15.6)
+
+Mark the module as public.
+
+=cut
+
+1;
diff --git a/scripts/Dpkg/Deps/Simple.pm b/scripts/Dpkg/Deps/Simple.pm
new file mode 100644
index 0000000..e6ed550
--- /dev/null
+++ b/scripts/Dpkg/Deps/Simple.pm
@@ -0,0 +1,668 @@
+# Copyright © 1998 Richard Braakman
+# Copyright © 1999 Darren Benham
+# Copyright © 2000 Sean 'Shaleh' Perry
+# Copyright © 2004 Frank Lichtenheld
+# Copyright © 2006 Russ Allbery
+# Copyright © 2007-2009 Raphaël Hertzog <hertzog@debian.org>
+# Copyright © 2008-2009, 2012-2014 Guillem Jover <guillem@debian.org>
+#
+# This program 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 of the License, 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::Deps::Simple;
+
+=encoding utf8
+
+=head1 NAME
+
+Dpkg::Deps::Simple - represents a single dependency statement
+
+=head1 DESCRIPTION
+
+This class represents a single dependency statement.
+It has several interesting properties:
+
+=over 4
+
+=item package
+
+The package name (can be undef if the dependency has not been initialized
+or if the simplification of the dependency lead to its removal).
+
+=item relation
+
+The relational operator: "=", "<<", "<=", ">=" or ">>". It can be
+undefined if the dependency had no version restriction. In that case the
+following field is also undefined.
+
+=item version
+
+The version.
+
+=item arches
+
+The list of architectures where this dependency is applicable. It is
+undefined when there's no restriction, otherwise it is an
+array ref. It can contain an exclusion list, in that case each
+architecture is prefixed with an exclamation mark.
+
+=item archqual
+
+The arch qualifier of the dependency (can be undef if there is none).
+In the dependency "python:any (>= 2.6)", the arch qualifier is "any".
+
+=item restrictions
+
+The restrictions formula for this dependency. It is undefined when there
+is no restriction formula. Otherwise it is an array ref.
+
+=back
+
+=head1 METHODS
+
+=over 4
+
+=cut
+
+use strict;
+use warnings;
+
+our $VERSION = '1.02';
+
+use Carp;
+
+use Dpkg::Arch qw(debarch_is_concerned debarch_list_parse);
+use Dpkg::BuildProfiles qw(parse_build_profiles evaluate_restriction_formula);
+use Dpkg::Version;
+use Dpkg::ErrorHandling;
+use Dpkg::Gettext;
+
+use parent qw(Dpkg::Interface::Storable);
+
+=item $dep = Dpkg::Deps::Simple->new([$dep[, %opts]]);
+
+Creates a new object. Some options can be set through %opts:
+
+=over
+
+=item host_arch
+
+Sets the host architecture.
+
+=item build_arch
+
+Sets the build architecture.
+
+=item build_dep
+
+Specifies whether the parser should consider it a build dependency.
+Defaults to 0.
+
+=item tests_dep
+
+Specifies whether the parser should consider it a tests dependency.
+Defaults to 0.
+
+=back
+
+=cut
+
+sub new {
+ my ($this, $arg, %opts) = @_;
+ my $class = ref($this) || $this;
+ my $self = {};
+
+ bless $self, $class;
+ $self->reset();
+ $self->{host_arch} = $opts{host_arch};
+ $self->{build_arch} = $opts{build_arch};
+ $self->{build_dep} = $opts{build_dep} // 0;
+ $self->{tests_dep} = $opts{tests_dep} // 0;
+ $self->parse_string($arg) if defined $arg;
+ return $self;
+}
+
+=item $dep->reset()
+
+Clears any dependency information stored in $dep so that $dep->is_empty()
+returns true.
+
+=cut
+
+sub reset {
+ my $self = shift;
+
+ $self->{package} = undef;
+ $self->{relation} = undef;
+ $self->{version} = undef;
+ $self->{arches} = undef;
+ $self->{archqual} = undef;
+ $self->{restrictions} = undef;
+}
+
+=item $dep->parse_string($dep_string)
+
+Parses the dependency string and modifies internal properties to match the
+parsed dependency.
+
+=cut
+
+sub parse_string {
+ my ($self, $dep) = @_;
+
+ my $pkgname_re;
+ if ($self->{tests_dep}) {
+ $pkgname_re = qr/[\@a-zA-Z0-9][\@a-zA-Z0-9+.-]*/;
+ } else {
+ $pkgname_re = qr/[a-zA-Z0-9][a-zA-Z0-9+.-]*/;
+ }
+
+ return if not $dep =~
+ m{^\s* # skip leading whitespace
+ ($pkgname_re) # package name
+ (?: # start of optional part
+ : # colon for architecture
+ ([a-zA-Z0-9][a-zA-Z0-9-]*) # architecture name
+ )? # end of optional part
+ (?: # start of optional part
+ \s* \( # open parenthesis for version part
+ \s* (<<|<=|=|>=|>>|[<>]) # relation part
+ \s* ([^\)\s]+) # do not attempt to parse version
+ \s* \) # closing parenthesis
+ )? # end of optional part
+ (?: # start of optional architecture
+ \s* \[ # open bracket for architecture
+ \s* ([^\]]+) # don't parse architectures now
+ \s* \] # closing bracket
+ )? # end of optional architecture
+ (
+ (?: # start of optional restriction
+ \s* < # open bracket for restriction
+ \s* [^>]+ # do not parse restrictions now
+ \s* > # closing bracket
+ )+
+ )? # end of optional restriction
+ \s*$ # trailing spaces at end
+ }x;
+ if (defined $2) {
+ return if $2 eq 'native' and not $self->{build_dep};
+ $self->{archqual} = $2;
+ }
+ $self->{package} = $1;
+ $self->{relation} = version_normalize_relation($3) if defined $3;
+ if (defined $4) {
+ $self->{version} = Dpkg::Version->new($4);
+ }
+ if (defined $5) {
+ $self->{arches} = [ debarch_list_parse($5) ];
+ }
+ if (defined $6) {
+ $self->{restrictions} = [ parse_build_profiles($6) ];
+ }
+}
+
+=item $dep->parse($fh, $desc)
+
+Parse a dependency line from a filehandle.
+
+=cut
+
+sub parse {
+ my ($self, $fh, $desc) = @_;
+
+ my $line = <$fh>;
+ chomp $line;
+ return $self->parse_string($line);
+}
+
+=item $dep->load($filename)
+
+Parse a dependency line from $filename.
+
+=item $dep->output([$fh])
+
+=item "$dep"
+
+Returns a string representing the dependency. If $fh is set, it prints
+the string to the filehandle.
+
+=cut
+
+sub output {
+ my ($self, $fh) = @_;
+
+ my $res = $self->{package};
+ if (defined $self->{archqual}) {
+ $res .= ':' . $self->{archqual};
+ }
+ if (defined $self->{relation}) {
+ $res .= ' (' . $self->{relation} . ' ' . $self->{version} . ')';
+ }
+ if (defined $self->{arches}) {
+ $res .= ' [' . join(' ', @{$self->{arches}}) . ']';
+ }
+ if (defined $self->{restrictions}) {
+ for my $restrlist (@{$self->{restrictions}}) {
+ $res .= ' <' . join(' ', @{$restrlist}) . '>';
+ }
+ }
+ if (defined $fh) {
+ print { $fh } $res;
+ }
+ return $res;
+}
+
+=item $dep->save($filename)
+
+Save the dependency into the given $filename.
+
+=cut
+
+# _arch_is_superset(\@p, \@q)
+#
+# Returns true if the arch list @p is a superset of arch list @q.
+# The arguments can also be undef in case there's no explicit architecture
+# restriction.
+sub _arch_is_superset {
+ my ($p, $q) = @_;
+ my $p_arch_neg = defined $p and $p->[0] =~ /^!/;
+ my $q_arch_neg = defined $q and $q->[0] =~ /^!/;
+
+ if (not defined $p) {
+ # If "p" has no arches, it is a superset of q and we should fall through
+ # to the version check.
+ return 1;
+ } elsif (not defined $q) {
+ # If q has no arches, it is a superset of p and there are no useful
+ # implications.
+ return 0;
+ } elsif (not $p_arch_neg and not $q_arch_neg) {
+ # Both have arches. If neither are negated, we know nothing useful
+ # unless q is a subset of p.
+
+ my %p_arches = map { $_ => 1 } @{$p};
+ my $subset = 1;
+ for my $arch (@{$q}) {
+ $subset = 0 unless $p_arches{$arch};
+ }
+ return 0 unless $subset;
+ } elsif ($p_arch_neg and $q_arch_neg) {
+ # If both are negated, we know nothing useful unless p is a subset of
+ # q (and therefore has fewer things excluded, and therefore is more
+ # general).
+
+ my %q_arches = map { $_ => 1 } @{$q};
+ my $subset = 1;
+ for my $arch (@{$p}) {
+ $subset = 0 unless $q_arches{$arch};
+ }
+ return 0 unless $subset;
+ } elsif (not $p_arch_neg and $q_arch_neg) {
+ # If q is negated and p isn't, we'd need to know the full list of
+ # arches to know if there's any relationship, so bail.
+ return 0;
+ } elsif ($p_arch_neg and not $q_arch_neg) {
+ # If p is negated and q isn't, q is a subset of p if none of the
+ # negated arches in p are present in q.
+
+ my %q_arches = map { $_ => 1 } @{$q};
+ my $subset = 1;
+ for my $arch (@{$p}) {
+ $subset = 0 if $q_arches{substr($arch, 1)};
+ }
+ return 0 unless $subset;
+ }
+ return 1;
+}
+
+# _arch_qualifier_implies($p, $q)
+#
+# Returns true if the arch qualifier $p and $q are compatible with the
+# implication $p -> $q, false otherwise. $p/$q can be undef/"any"/"native"
+# or an architecture string.
+#
+# Because we are handling dependencies in isolation, and the full context
+# of the implications are only known when doing dependency resolution at
+# run-time, we can only assert that they are implied if they are equal.
+#
+# For example dependencies with different arch-qualifiers cannot be simplified
+# as these depend on the state of Multi-Arch field in the package depended on.
+sub _arch_qualifier_implies {
+ my ($p, $q) = @_;
+
+ return $p eq $q if defined $p and defined $q;
+ return 1 if not defined $p and not defined $q;
+ return 0;
+}
+
+# _restrictions_imply($p, $q)
+#
+# Returns true if the restrictions $p and $q are compatible with the
+# implication $p -> $q, false otherwise.
+# NOTE: We don't try to be very clever here, so we may conservatively
+# return false when there is an implication.
+sub _restrictions_imply {
+ my ($p, $q) = @_;
+
+ if (not defined $p) {
+ return 1;
+ } elsif (not defined $q) {
+ return 0;
+ } else {
+ # Check whether set difference is empty.
+ my %restr;
+
+ for my $restrlist (@{$q}) {
+ my $reststr = join ' ', sort @{$restrlist};
+ $restr{$reststr} = 1;
+ }
+ for my $restrlist (@{$p}) {
+ my $reststr = join ' ', sort @{$restrlist};
+ delete $restr{$reststr};
+ }
+
+ return keys %restr == 0;
+ }
+}
+
+=item $dep->implies($other_dep)
+
+Returns 1 when $dep implies $other_dep. Returns 0 when $dep implies
+NOT($other_dep). Returns undef when there is no implication. $dep and
+$other_dep do not need to be of the same type.
+
+=cut
+
+sub implies {
+ my ($self, $o) = @_;
+
+ if ($o->isa('Dpkg::Deps::Simple')) {
+ # An implication is only possible on the same package
+ return if $self->{package} ne $o->{package};
+
+ # Our architecture set must be a superset of the architectures for
+ # o, otherwise we can't conclude anything.
+ return unless _arch_is_superset($self->{arches}, $o->{arches});
+
+ # The arch qualifier must not forbid an implication
+ return unless _arch_qualifier_implies($self->{archqual},
+ $o->{archqual});
+
+ # Our restrictions must imply the restrictions for o
+ return unless _restrictions_imply($self->{restrictions},
+ $o->{restrictions});
+
+ # If o has no version clause, then our dependency is stronger
+ return 1 if not defined $o->{relation};
+ # If o has a version clause, we must also have one, otherwise there
+ # can't be an implication
+ return if not defined $self->{relation};
+
+ return Dpkg::Deps::deps_eval_implication($self->{relation},
+ $self->{version}, $o->{relation}, $o->{version});
+ } elsif ($o->isa('Dpkg::Deps::AND')) {
+ # TRUE: Need to imply all individual elements
+ # FALSE: Need to NOT imply at least one individual element
+ my $res = 1;
+ foreach my $dep ($o->get_deps()) {
+ my $implication = $self->implies($dep);
+ unless (defined $implication and $implication == 1) {
+ $res = $implication;
+ last if defined $res;
+ }
+ }
+ return $res;
+ } elsif ($o->isa('Dpkg::Deps::OR')) {
+ # TRUE: Need to imply at least one individual element
+ # FALSE: Need to not apply all individual elements
+ # UNDEF: The rest
+ my $res = undef;
+ foreach my $dep ($o->get_deps()) {
+ my $implication = $self->implies($dep);
+ if (defined $implication) {
+ if (not defined $res) {
+ $res = $implication;
+ } else {
+ if ($implication) {
+ $res = 1;
+ } else {
+ $res = 0;
+ }
+ }
+ last if defined $res and $res == 1;
+ }
+ }
+ return $res;
+ } else {
+ croak 'Dpkg::Deps::Simple cannot evaluate implication with a ' .
+ ref($o);
+ }
+}
+
+=item $dep->get_deps()
+
+Returns a list of sub-dependencies, which for this object it means it
+returns itself.
+
+=cut
+
+sub get_deps {
+ my $self = shift;
+
+ return $self;
+}
+
+=item $dep->sort()
+
+This method is a no-op for this object.
+
+=cut
+
+sub sort {
+ # Nothing to sort
+}
+
+=item $dep->arch_is_concerned($arch)
+
+Returns true if the dependency applies to the indicated architecture.
+
+=cut
+
+sub arch_is_concerned {
+ my ($self, $host_arch) = @_;
+
+ return 0 if not defined $self->{package}; # Empty dep
+ return 1 if not defined $self->{arches}; # Dep without arch spec
+
+ return debarch_is_concerned($host_arch, @{$self->{arches}});
+}
+
+=item $dep->reduce_arch($arch)
+
+Simplifies the dependency to contain only information relevant to the given
+architecture. This object can be left empty after this operation. This trims
+off the architecture restriction list of these objects.
+
+=cut
+
+sub reduce_arch {
+ my ($self, $host_arch) = @_;
+
+ if (not $self->arch_is_concerned($host_arch)) {
+ $self->reset();
+ } else {
+ $self->{arches} = undef;
+ }
+}
+
+=item $dep->has_arch_restriction()
+
+Returns the package name if the dependency applies only to a subset of
+architectures.
+
+=cut
+
+sub has_arch_restriction {
+ my $self = shift;
+
+ if (defined $self->{arches}) {
+ return $self->{package};
+ } else {
+ return ();
+ }
+}
+
+=item $dep->profile_is_concerned()
+
+Returns true if the dependency applies to the indicated profile.
+
+=cut
+
+sub profile_is_concerned {
+ my ($self, $build_profiles) = @_;
+
+ return 0 if not defined $self->{package}; # Empty dep
+ return 1 if not defined $self->{restrictions}; # Dep without restrictions
+ return evaluate_restriction_formula($self->{restrictions}, $build_profiles);
+}
+
+=item $dep->reduce_profiles()
+
+Simplifies the dependency to contain only information relevant to the given
+profile. This object can be left empty after this operation. This trims off
+the profile restriction list of this object.
+
+=cut
+
+sub reduce_profiles {
+ my ($self, $build_profiles) = @_;
+
+ if (not $self->profile_is_concerned($build_profiles)) {
+ $self->reset();
+ } else {
+ $self->{restrictions} = undef;
+ }
+}
+
+=item $dep->get_evaluation($facts)
+
+Evaluates the dependency given a list of installed packages and a list of
+virtual packages provided. These lists are part of the Dpkg::Deps::KnownFacts
+object given as parameters.
+
+Returns 1 when it's true, 0 when it's false, undef when some information
+is lacking to conclude.
+
+=cut
+
+sub get_evaluation {
+ my ($self, $facts) = @_;
+
+ return if not defined $self->{package};
+ return $facts->evaluate_simple_dep($self);
+}
+
+=item $dep->simplify_deps($facts, @assumed_deps)
+
+Simplifies the dependency as much as possible given the list of facts (see
+class Dpkg::Deps::KnownFacts) and a list of other dependencies that are
+known to be true.
+
+=cut
+
+sub simplify_deps {
+ my ($self, $facts) = @_;
+
+ my $eval = $self->get_evaluation($facts);
+ $self->reset() if defined $eval and $eval == 1;
+}
+
+=item $dep->is_empty()
+
+Returns true if the dependency is empty and doesn't contain any useful
+information. This is true when the object has not yet been initialized.
+
+=cut
+
+sub is_empty {
+ my $self = shift;
+
+ return not defined $self->{package};
+}
+
+=item $dep->merge_union($other_dep)
+
+Returns true if $dep could be modified to represent the union of both
+dependencies. Otherwise returns false.
+
+=cut
+
+sub merge_union {
+ my ($self, $o) = @_;
+
+ return 0 if not $o->isa('Dpkg::Deps::Simple');
+ return 0 if $self->is_empty() or $o->is_empty();
+ return 0 if $self->{package} ne $o->{package};
+ return 0 if defined $self->{arches} or defined $o->{arches};
+
+ if (not defined $o->{relation} and defined $self->{relation}) {
+ # Union is the non-versioned dependency
+ $self->{relation} = undef;
+ $self->{version} = undef;
+ return 1;
+ }
+
+ my $implication = $self->implies($o);
+ my $rev_implication = $o->implies($self);
+ if (defined $implication) {
+ if ($implication) {
+ $self->{relation} = $o->{relation};
+ $self->{version} = $o->{version};
+ return 1;
+ } else {
+ return 0;
+ }
+ }
+ if (defined $rev_implication) {
+ if ($rev_implication) {
+ # Already merged...
+ return 1;
+ } else {
+ return 0;
+ }
+ }
+ return 0;
+}
+
+=back
+
+=head1 CHANGES
+
+=head2 Version 1.02 (dpkg 1.17.10)
+
+New methods: Add $dep->profile_is_concerned() and $dep->reduce_profiles().
+
+=head2 Version 1.01 (dpkg 1.16.1)
+
+New method: Add $dep->reset().
+
+New property: recognizes the arch qualifier "any" and stores it in the
+"archqual" property when present.
+
+=head2 Version 1.00 (dpkg 1.15.6)
+
+Mark the module as public.
+
+=cut
+
+1;
diff --git a/scripts/Dpkg/Deps/Union.pm b/scripts/Dpkg/Deps/Union.pm
new file mode 100644
index 0000000..148e38e
--- /dev/null
+++ b/scripts/Dpkg/Deps/Union.pm
@@ -0,0 +1,119 @@
+# Copyright © 1998 Richard Braakman
+# Copyright © 1999 Darren Benham
+# Copyright © 2000 Sean 'Shaleh' Perry
+# Copyright © 2004 Frank Lichtenheld
+# Copyright © 2006 Russ Allbery
+# Copyright © 2007-2009 Raphaël Hertzog <hertzog@debian.org>
+# Copyright © 2008-2009, 2012-2014 Guillem Jover <guillem@debian.org>
+#
+# This program 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 of the License, 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::Deps::Union;
+
+=encoding utf8
+
+=head1 NAME
+
+Dpkg::Deps::Union - list of unrelated dependencies
+
+=head1 DESCRIPTION
+
+This class represents a list of relationships.
+It inherits from Dpkg::Deps::Multiple.
+
+=cut
+
+use strict;
+use warnings;
+
+our $VERSION = '1.00';
+
+use parent qw(Dpkg::Deps::Multiple);
+
+=head1 METHODS
+
+=over 4
+
+=item $dep->output([$fh])
+
+The output method uses ", " to join the list of relationships.
+
+=cut
+
+sub output {
+ my ($self, $fh) = @_;
+
+ my $res = join(', ', map {
+ $_->output()
+ } grep {
+ not $_->is_empty()
+ } $self->get_deps());
+
+ if (defined $fh) {
+ print { $fh } $res;
+ }
+ return $res;
+}
+
+=item $dep->implies($other_dep)
+
+=item $dep->get_evaluation($other_dep)
+
+These methods are not meaningful for this object and always return undef.
+
+=cut
+
+sub implies {
+ # Implication test is not useful on Union.
+ return;
+}
+
+sub get_evaluation {
+ # Evaluation is not useful on Union.
+ return;
+}
+
+=item $dep->simplify_deps($facts)
+
+The simplification is done to generate an union of all the relationships.
+It uses $simple_dep->merge_union($other_dep) to get its job done.
+
+=cut
+
+sub simplify_deps {
+ my ($self, $facts) = @_;
+ my @new;
+
+WHILELOOP:
+ while (@{$self->{list}}) {
+ my $odep = shift @{$self->{list}};
+ foreach my $dep (@new) {
+ next WHILELOOP if $dep->merge_union($odep);
+ }
+ push @new, $odep;
+ }
+ $self->{list} = [ @new ];
+}
+
+=back
+
+=head1 CHANGES
+
+=head2 Version 1.00 (dpkg 1.15.6)
+
+Mark the module as public.
+
+=cut
+
+1;
diff --git a/scripts/Dpkg/Dist/Files.pm b/scripts/Dpkg/Dist/Files.pm
new file mode 100644
index 0000000..ac58b98
--- /dev/null
+++ b/scripts/Dpkg/Dist/Files.pm
@@ -0,0 +1,198 @@
+# Copyright © 2014-2015 Guillem Jover <guillem@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::Dist::Files;
+
+use strict;
+use warnings;
+
+our $VERSION = '0.01';
+
+use IO::Dir;
+
+use Dpkg::Gettext;
+use Dpkg::ErrorHandling;
+
+use parent qw(Dpkg::Interface::Storable);
+
+sub new {
+ my ($this, %opts) = @_;
+ my $class = ref($this) || $this;
+
+ my $self = {
+ options => [],
+ files => {},
+ };
+ foreach my $opt (keys %opts) {
+ $self->{$opt} = $opts{$opt};
+ }
+ bless $self, $class;
+
+ return $self;
+}
+
+sub reset {
+ my $self = shift;
+
+ $self->{files} = {};
+}
+
+sub parse_filename {
+ my ($self, $fn) = @_;
+
+ my $file;
+
+ if ($fn =~ m/^(([-+:.0-9a-z]+)_([^_]+)_([-\w]+)\.([a-z0-9.]+))$/) {
+ # Artifact using the common <name>_<version>_<arch>.<type> pattern.
+ $file->{filename} = $1;
+ $file->{package} = $2;
+ $file->{version} = $3;
+ $file->{arch} = $4;
+ $file->{package_type} = $5;
+ } elsif ($fn =~ m/^([-+:.,_0-9a-zA-Z~]+)$/) {
+ # Artifact with no common pattern, usually called byhand or raw, as
+ # they might require manual processing on the server side, or custom
+ # actions per file type.
+ $file->{filename} = $1;
+ } else {
+ $file = undef;
+ }
+
+ return $file;
+}
+
+sub parse {
+ my ($self, $fh, $desc) = @_;
+ my $count = 0;
+
+ local $_;
+ binmode $fh;
+
+ while (<$fh>) {
+ chomp;
+
+ my $file;
+
+ if (m/^(\S+) (\S+) (\S+)((?:\s+[0-9a-z-]+=\S+)*)$/) {
+ $file = $self->parse_filename($1);
+ error(g_('badly formed file name in files list file, line %d'), $.)
+ unless defined $file;
+ $file->{section} = $2;
+ $file->{priority} = $3;
+ my $attrs = $4;
+ $file->{attrs} = { map { split /=/ } split ' ', $attrs };
+ } else {
+ error(g_('badly formed line in files list file, line %d'), $.);
+ }
+
+ if (defined $self->{files}->{$file->{filename}}) {
+ warning(g_('duplicate files list entry for file %s (line %d)'),
+ $file->{filename}, $.);
+ } else {
+ $count++;
+ $self->{files}->{$file->{filename}} = $file;
+ }
+ }
+
+ return $count;
+}
+
+sub load_dir {
+ my ($self, $dir) = @_;
+
+ my $count = 0;
+ my $dh = IO::Dir->new($dir) or syserr(g_('cannot open directory %s'), $dir);
+
+ while (defined(my $file = $dh->read)) {
+ my $pathname = "$dir/$file";
+ next unless -f $pathname;
+ $count += $self->load($pathname);
+ }
+
+ return $count;
+}
+
+sub get_files {
+ my $self = shift;
+
+ return map { $self->{files}->{$_} } sort keys %{$self->{files}};
+}
+
+sub get_file {
+ my ($self, $filename) = @_;
+
+ return $self->{files}->{$filename};
+}
+
+sub add_file {
+ my ($self, $filename, $section, $priority, %attrs) = @_;
+
+ my $file = $self->parse_filename($filename);
+ error(g_('invalid filename %s'), $filename) unless defined $file;
+ $file->{section} = $section;
+ $file->{priority} = $priority;
+ $file->{attrs} = \%attrs;
+
+ $self->{files}->{$filename} = $file;
+
+ return $file;
+}
+
+sub del_file {
+ my ($self, $filename) = @_;
+
+ delete $self->{files}->{$filename};
+}
+
+sub filter {
+ my ($self, %opts) = @_;
+ my $remove = $opts{remove} // sub { 0 };
+ my $keep = $opts{keep} // sub { 1 };
+
+ foreach my $filename (keys %{$self->{files}}) {
+ my $file = $self->{files}->{$filename};
+
+ if (not $keep->($file) or $remove->($file)) {
+ delete $self->{files}->{$filename};
+ }
+ }
+}
+
+sub output {
+ my ($self, $fh) = @_;
+ my $str = '';
+
+ binmode $fh if defined $fh;
+
+ foreach my $filename (sort keys %{$self->{files}}) {
+ my $file = $self->{files}->{$filename};
+ my $entry = "$filename $file->{section} $file->{priority}";
+
+ if (exists $file->{attrs}) {
+ foreach my $attr (sort keys %{$file->{attrs}}) {
+ $entry .= " $attr=$file->{attrs}->{$attr}";
+ }
+ }
+
+ $entry .= "\n";
+
+ print { $fh } $entry if defined $fh;
+ $str .= $entry;
+ }
+
+ return $str;
+}
+
+1;
diff --git a/scripts/Dpkg/ErrorHandling.pm b/scripts/Dpkg/ErrorHandling.pm
new file mode 100644
index 0000000..81bc00d
--- /dev/null
+++ b/scripts/Dpkg/ErrorHandling.pm
@@ -0,0 +1,263 @@
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::ErrorHandling;
+
+use strict;
+use warnings;
+use feature qw(state);
+
+our $VERSION = '0.02';
+our @EXPORT_OK = qw(
+ REPORT_PROGNAME
+ REPORT_COMMAND
+ REPORT_STATUS
+ REPORT_DEBUG
+ REPORT_INFO
+ REPORT_NOTICE
+ REPORT_WARN
+ REPORT_ERROR
+ report_pretty
+ report_color
+ report
+);
+our @EXPORT = qw(
+ report_options
+ debug
+ info
+ notice
+ warning
+ error
+ errormsg
+ syserr
+ printcmd
+ subprocerr
+ usageerr
+);
+
+use Exporter qw(import);
+
+use Dpkg ();
+use Dpkg::Gettext;
+
+my $quiet_warnings = 0;
+my $debug_level = 0;
+my $info_fh = \*STDOUT;
+
+sub setup_color
+{
+ my $mode = $ENV{'DPKG_COLORS'} // 'auto';
+ my $use_color;
+
+ if ($mode eq 'auto') {
+ ## no critic (InputOutput::ProhibitInteractiveTest)
+ $use_color = 1 if -t *STDOUT or -t *STDERR;
+ } elsif ($mode eq 'always') {
+ $use_color = 1;
+ } else {
+ $use_color = 0;
+ }
+
+ require Term::ANSIColor if $use_color;
+}
+
+use constant {
+ REPORT_PROGNAME => 1,
+ REPORT_COMMAND => 2,
+ REPORT_STATUS => 3,
+ REPORT_INFO => 4,
+ REPORT_NOTICE => 5,
+ REPORT_WARN => 6,
+ REPORT_ERROR => 7,
+ REPORT_DEBUG => 8,
+};
+
+my %report_mode = (
+ REPORT_PROGNAME() => {
+ color => 'bold',
+ },
+ REPORT_COMMAND() => {
+ color => 'bold magenta',
+ },
+ REPORT_STATUS() => {
+ color => 'clear',
+ # We do not translate this name because the untranslated output is
+ # part of the interface.
+ name => 'status',
+ },
+ REPORT_DEBUG() => {
+ color => 'clear',
+ # We do not translate this name because it is a developer interface
+ # and all debug messages are untranslated anyway.
+ name => 'debug',
+ },
+ REPORT_INFO() => {
+ color => 'green',
+ name => g_('info'),
+ },
+ REPORT_NOTICE() => {
+ color => 'yellow',
+ name => g_('notice'),
+ },
+ REPORT_WARN() => {
+ color => 'bold yellow',
+ name => g_('warning'),
+ },
+ REPORT_ERROR() => {
+ color => 'bold red',
+ name => g_('error'),
+ },
+);
+
+sub report_options
+{
+ my (%options) = @_;
+
+ if (exists $options{quiet_warnings}) {
+ $quiet_warnings = $options{quiet_warnings};
+ }
+ if (exists $options{debug_level}) {
+ $debug_level = $options{debug_level};
+ }
+ if (exists $options{info_fh}) {
+ $info_fh = $options{info_fh};
+ }
+}
+
+sub report_name
+{
+ my $type = shift;
+
+ return $report_mode{$type}{name} // '';
+}
+
+sub report_color
+{
+ my $type = shift;
+
+ return $report_mode{$type}{color} // 'clear';
+}
+
+sub report_pretty
+{
+ my ($msg, $color) = @_;
+
+ state $use_color = setup_color();
+
+ if ($use_color) {
+ return Term::ANSIColor::colored($msg, $color);
+ } else {
+ return $msg;
+ }
+}
+
+sub _progname_prefix
+{
+ return report_pretty("$Dpkg::PROGNAME: ", report_color(REPORT_PROGNAME));
+}
+
+sub _typename_prefix
+{
+ my $type = shift;
+
+ return report_pretty(report_name($type), report_color($type));
+}
+
+sub report(@)
+{
+ my ($type, $msg) = (shift, shift);
+
+ $msg = sprintf($msg, @_) if (@_);
+
+ my $progname = _progname_prefix();
+ my $typename = _typename_prefix($type);
+
+ return "$progname$typename: $msg\n";
+}
+
+sub debug
+{
+ my $level = shift;
+ print report(REPORT_DEBUG, @_) if $level <= $debug_level;
+}
+
+sub info($;@)
+{
+ print { $info_fh } report(REPORT_INFO, @_) if not $quiet_warnings;
+}
+
+sub notice
+{
+ warn report(REPORT_NOTICE, @_) if not $quiet_warnings;
+}
+
+sub warning($;@)
+{
+ warn report(REPORT_WARN, @_) if not $quiet_warnings;
+}
+
+sub syserr($;@)
+{
+ my $msg = shift;
+ die report(REPORT_ERROR, "$msg: $!", @_);
+}
+
+sub error($;@)
+{
+ die report(REPORT_ERROR, @_);
+}
+
+sub errormsg($;@)
+{
+ print { *STDERR } report(REPORT_ERROR, @_);
+}
+
+sub printcmd
+{
+ my (@cmd) = @_;
+
+ print { *STDERR } report_pretty(" @cmd\n", report_color(REPORT_COMMAND));
+}
+
+sub subprocerr(@)
+{
+ my ($p) = (shift);
+
+ $p = sprintf($p, @_) if (@_);
+
+ require POSIX;
+
+ if (POSIX::WIFEXITED($?)) {
+ my $ret = POSIX::WEXITSTATUS($?);
+ error(g_('%s subprocess returned exit status %d'), $p, $ret);
+ } elsif (POSIX::WIFSIGNALED($?)) {
+ my $sig = POSIX::WTERMSIG($?);
+ error(g_('%s subprocess was killed by signal %d'), $p, $sig);
+ } else {
+ error(g_('%s subprocess failed with unknown status code %d'), $p, $?);
+ }
+}
+
+sub usageerr(@)
+{
+ my ($msg) = (shift);
+
+ state $printforhelp = g_('Use --help for program usage information.');
+
+ $msg = sprintf($msg, @_) if (@_);
+ warn report(REPORT_ERROR, $msg);
+ warn "\n$printforhelp\n";
+ exit(2);
+}
+
+1;
diff --git a/scripts/Dpkg/Exit.pm b/scripts/Dpkg/Exit.pm
new file mode 100644
index 0000000..460b4ee
--- /dev/null
+++ b/scripts/Dpkg/Exit.pm
@@ -0,0 +1,132 @@
+# Copyright © 2002 Adam Heath <doogie@debian.org>
+# Copyright © 2012-2013 Guillem Jover <guillem@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::Exit;
+
+use strict;
+use warnings;
+
+our $VERSION = '2.00';
+our @EXPORT_OK = qw(
+ push_exit_handler
+ pop_exit_handler
+ run_exit_handlers
+);
+
+use Exporter qw(import);
+
+my @handlers = ();
+
+=encoding utf8
+
+=head1 NAME
+
+Dpkg::Exit - program exit handlers
+
+=head1 DESCRIPTION
+
+The Dpkg::Exit module provides support functions to run handlers on exit.
+
+=head1 FUNCTIONS
+
+=over 4
+
+=item push_exit_handler($func)
+
+Register a code reference into the exit function handlers stack.
+
+=cut
+
+sub push_exit_handler {
+ my ($func) = shift;
+
+ _setup_exit_handlers() if @handlers == 0;
+ push @handlers, $func;
+}
+
+=item pop_exit_handler()
+
+Pop the last registered exit handler from the handlers stack.
+
+=cut
+
+sub pop_exit_handler {
+ _reset_exit_handlers() if @handlers == 1;
+ pop @handlers;
+}
+
+=item run_exit_handlers()
+
+Run the registered exit handlers.
+
+=cut
+
+sub run_exit_handlers {
+ while (my $handler = pop @handlers) {
+ $handler->();
+ }
+ _reset_exit_handlers();
+}
+
+sub _exit_handler {
+ run_exit_handlers();
+ exit(127);
+}
+
+my @SIGNAMES = qw(INT HUP QUIT);
+my %SIGOLD;
+
+sub _setup_exit_handlers
+{
+ foreach my $signame (@SIGNAMES) {
+ $SIGOLD{$signame} = $SIG{$signame};
+ $SIG{$signame} = \&_exit_handler;
+ }
+}
+
+sub _reset_exit_handlers
+{
+ foreach my $signame (@SIGNAMES) {
+ $SIG{$signame} = $SIGOLD{$signame};
+ }
+}
+
+END {
+ local $?;
+ run_exit_handlers();
+}
+
+=back
+
+=head1 CHANGES
+
+=head2 Version 2.00 (dpkg 1.20.0)
+
+Hide variable: @handlers.
+
+=head2 Version 1.01 (dpkg 1.17.2)
+
+New functions: push_exit_handler(), pop_exit_handler(), run_exit_handlers()
+
+Deprecated variable: @handlers
+
+=head2 Version 1.00 (dpkg 1.15.6)
+
+Mark the module as public.
+
+=cut
+
+1;
diff --git a/scripts/Dpkg/File.pm b/scripts/Dpkg/File.pm
new file mode 100644
index 0000000..dd3fd9f
--- /dev/null
+++ b/scripts/Dpkg/File.pm
@@ -0,0 +1,79 @@
+# Copyright © 2011 Raphaël Hertzog <hertzog@debian.org>
+# Copyright © 2012 Guillem Jover <guillem@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::File;
+
+use strict;
+use warnings;
+
+our $VERSION = '0.01';
+our @EXPORT = qw(
+ file_slurp
+ file_dump
+ file_touch
+);
+
+use Exporter qw(import);
+use Scalar::Util qw(openhandle);
+
+use Dpkg::ErrorHandling;
+use Dpkg::Gettext;
+
+sub file_slurp {
+ my $file = shift;
+ my $fh;
+ my $doclose = 0;
+
+ if (openhandle($file)) {
+ $fh = $file;
+ } else {
+ open $fh, '<', $file or syserr(g_('cannot read %s'), $fh);
+ $doclose = 1;
+ }
+ local $/;
+ my $data = <$fh>;
+ close $fh if $doclose;
+
+ return $data;
+}
+
+sub file_dump {
+ my ($file, $data) = @_;
+ my $fh;
+ my $doclose = 0;
+
+ if (openhandle($file)) {
+ $fh = $file;
+ } else {
+ open $fh, '>', $file or syserr(g_('cannot create file %s'), $file);
+ $doclose = 1;
+ }
+ print { $fh } $data;
+ if ($doclose) {
+ close $fh or syserr(g_('cannot write %s'), $file);
+ }
+
+ return;
+}
+
+sub file_touch {
+ my $file = shift;
+
+ open my $fh, '>', $file or syserr(g_('cannot create file %s'), $file);
+ close $fh or syserr(g_('cannot write %s'), $file);
+}
+
+1;
diff --git a/scripts/Dpkg/Getopt.pm b/scripts/Dpkg/Getopt.pm
new file mode 100644
index 0000000..bebe9f8
--- /dev/null
+++ b/scripts/Dpkg/Getopt.pm
@@ -0,0 +1,48 @@
+# Copyright © 2014 Guillem Jover <guillem@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::Getopt;
+
+use strict;
+use warnings;
+
+our $VERSION = '0.02';
+our @EXPORT = qw(
+ normalize_options
+);
+
+use Exporter qw(import);
+
+sub normalize_options
+{
+ my (%opts) = @_;
+ my $norm = 1;
+ my @args;
+
+ @args = map {
+ if ($norm and m/^(-[A-Za-z])(.+)$/) {
+ ($1, $2)
+ } elsif ($norm and m/^(--[A-Za-z-]+)=(.*)$/) {
+ ($1, $2)
+ } else {
+ $norm = 0 if defined $opts{delim} and $_ eq $opts{delim};
+ $_;
+ }
+ } @{$opts{args}};
+
+ return @args;
+}
+
+1;
diff --git a/scripts/Dpkg/Gettext.pm b/scripts/Dpkg/Gettext.pm
new file mode 100644
index 0000000..bac8f57
--- /dev/null
+++ b/scripts/Dpkg/Gettext.pm
@@ -0,0 +1,235 @@
+# Copied from /usr/share/perl5/Debconf/Gettext.pm
+#
+# Copyright © 2000 Joey Hess <joeyh@debian.org>
+# Copyright © 2007-2022 Guillem Jover <guillem@debian.org>
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY AUTHORS AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+
+package Dpkg::Gettext;
+
+use strict;
+use warnings;
+use feature qw(state);
+
+our $VERSION = '2.01';
+our @EXPORT = qw(
+ textdomain
+ gettext
+ ngettext
+ g_
+ P_
+ N_
+);
+
+use Exporter qw(import);
+
+=encoding utf8
+
+=head1 NAME
+
+Dpkg::Gettext - convenience wrapper around Locale::gettext
+
+=head1 DESCRIPTION
+
+The Dpkg::Gettext module is a convenience wrapper over the Locale::gettext
+module, to guarantee we always have working gettext functions, and to add
+some commonly used aliases.
+
+=head1 ENVIRONMENT
+
+=over 4
+
+=item DPKG_NLS
+
+When set to 0, this environment variable will disable the National Language
+Support in all Dpkg modules.
+
+=back
+
+=head1 VARIABLES
+
+=over 4
+
+=item $Dpkg::Gettext::DEFAULT_TEXT_DOMAIN
+
+Specifies the default text domain name to be used with the short function
+aliases. This is intended to be used by the Dpkg modules, so that they
+can produce localized messages even when the calling program has set the
+current domain with textdomain(). If you would like to use the aliases
+for your own modules, you might want to set this variable to undef, or
+to another domain, but then the Dpkg modules will not produce localized
+messages.
+
+=back
+
+=cut
+
+our $DEFAULT_TEXT_DOMAIN = 'dpkg-dev';
+
+=head1 FUNCTIONS
+
+=over 4
+
+=item $domain = textdomain($new_domain)
+
+Compatibility textdomain() fallback when Locale::gettext is not available.
+
+If $new_domain is not undef, it will set the current domain to $new_domain.
+Returns the current domain, after possibly changing it.
+
+=item $trans = gettext($msgid)
+
+Compatibility gettext() fallback when Locale::gettext is not available.
+
+Returns $msgid.
+
+=item $trans = ngettext($msgid, $msgid_plural, $n)
+
+Compatibility ngettext() fallback when Locale::gettext is not available.
+
+Returns $msgid if $n is 1 or $msgid_plural otherwise.
+
+=item $trans = g_($msgid)
+
+Calls dgettext() on the $msgid and returns its translation for the current
+locale. If dgettext() is not available, simply returns $msgid.
+
+=item $trans = C_($msgctxt, $msgid)
+
+Calls dgettext() on the $msgid and returns its translation for the specific
+$msgctxt supplied. If dgettext() is not available, simply returns $msgid.
+
+=item $trans = P_($msgid, $msgid_plural, $n)
+
+Calls dngettext(), returning the correct translation for the plural form
+dependent on $n. If dngettext() is not available, returns $msgid if $n is 1
+or $msgid_plural otherwise.
+
+=cut
+
+use constant GETTEXT_CONTEXT_GLUE => "\004";
+
+BEGIN {
+ my $use_gettext = $ENV{DPKG_NLS} // 1;
+ if ($use_gettext) {
+ eval q{
+ pop @INC if $INC[-1] eq '.';
+ use Locale::gettext;
+ };
+ $use_gettext = not $@;
+ }
+ if (not $use_gettext) {
+ *g_ = sub {
+ return shift;
+ };
+ *textdomain = sub {
+ my $new_domain = shift;
+ state $domain = $DEFAULT_TEXT_DOMAIN;
+
+ $domain = $new_domain if defined $new_domain;
+
+ return $domain;
+ };
+ *gettext = sub {
+ my $msgid = shift;
+ return $msgid;
+ };
+ *ngettext = sub {
+ my ($msgid, $msgid_plural, $n) = @_;
+ if ($n == 1) {
+ return $msgid;
+ } else {
+ return $msgid_plural;
+ }
+ };
+ *C_ = sub {
+ my ($msgctxt, $msgid) = @_;
+ return $msgid;
+ };
+ *P_ = sub {
+ return ngettext(@_);
+ };
+ } else {
+ *g_ = sub {
+ return dgettext($DEFAULT_TEXT_DOMAIN, shift);
+ };
+ *C_ = sub {
+ my ($msgctxt, $msgid) = @_;
+ return dgettext($DEFAULT_TEXT_DOMAIN,
+ $msgctxt . GETTEXT_CONTEXT_GLUE . $msgid);
+ };
+ *P_ = sub {
+ return dngettext($DEFAULT_TEXT_DOMAIN, @_);
+ };
+ }
+}
+
+=item $msgid = N_($msgid)
+
+A pseudo function that servers as a marker for automated extraction of
+messages, but does not call gettext(). The run-time translation is done
+at a different place in the code.
+
+=back
+
+=cut
+
+sub N_
+{
+ my $msgid = shift;
+ return $msgid;
+}
+
+=head1 CHANGES
+
+=head2 Version 2.01 (dpkg 1.21.10)
+
+New function: gettext().
+
+=head2 Version 2.00 (dpkg 1.20.0)
+
+Remove function: _g().
+
+=head2 Version 1.03 (dpkg 1.19.0)
+
+New envvar: Add support for new B<DPKG_NLS> environment variable.
+
+=head2 Version 1.02 (dpkg 1.18.3)
+
+New function: N_().
+
+=head2 Version 1.01 (dpkg 1.18.0)
+
+Now the short aliases (g_ and P_) will call domain aware functions with
+$DEFAULT_TEXT_DOMAIN.
+
+New functions: g_(), C_().
+
+Deprecated function: _g().
+
+=head2 Version 1.00 (dpkg 1.15.6)
+
+Mark the module as public.
+
+=cut
+
+1;
diff --git a/scripts/Dpkg/IPC.pm b/scripts/Dpkg/IPC.pm
new file mode 100644
index 0000000..2503642
--- /dev/null
+++ b/scripts/Dpkg/IPC.pm
@@ -0,0 +1,420 @@
+# Copyright © 2008-2009 Raphaël Hertzog <hertzog@debian.org>
+# Copyright © 2008 Frank Lichtenheld <djpig@debian.org>
+# Copyright © 2008-2010, 2012-2015 Guillem Jover <guillem@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::IPC;
+
+use strict;
+use warnings;
+
+our $VERSION = '1.02';
+our @EXPORT = qw(
+ spawn
+ wait_child
+);
+
+use Carp;
+use Exporter qw(import);
+
+use Dpkg::ErrorHandling;
+use Dpkg::Gettext;
+
+=encoding utf8
+
+=head1 NAME
+
+Dpkg::IPC - helper functions for IPC
+
+=head1 DESCRIPTION
+
+Dpkg::IPC offers helper functions to allow you to execute
+other programs in an easy, yet flexible way, while hiding
+all the gory details of IPC (Inter-Process Communication)
+from you.
+
+=head1 FUNCTIONS
+
+=over 4
+
+=item $pid = spawn(%opts)
+
+Creates a child process and executes another program in it.
+The arguments are interpreted as a hash of options, specifying
+how to handle the in and output of the program to execute.
+Returns the pid of the child process (unless the wait_child
+option was given).
+
+Any error will cause the function to exit with one of the
+Dpkg::ErrorHandling functions.
+
+Options:
+
+=over 4
+
+=item exec
+
+Can be either a scalar, i.e. the name of the program to be
+executed, or an array reference, i.e. the name of the program
+plus additional arguments. Note that the program will never be
+executed via the shell, so you can't specify additional arguments
+in the scalar string and you can't use any shell facilities like
+globbing.
+
+Mandatory Option.
+
+=item from_file, to_file, error_to_file
+
+Filename as scalar. Standard input/output/error of the
+child process will be redirected to the file specified.
+
+=item from_handle, to_handle, error_to_handle
+
+Filehandle. Standard input/output/error of the child process will be
+dup'ed from the handle.
+
+=item from_pipe, to_pipe, error_to_pipe
+
+Scalar reference or object based on IO::Handle. A pipe will be opened for
+each of the two options and either the reading (C<to_pipe> and
+C<error_to_pipe>) or the writing end (C<from_pipe>) will be returned in
+the referenced scalar. Standard input/output/error of the child process
+will be dup'ed to the other ends of the pipes.
+
+=item from_string, to_string, error_to_string
+
+Scalar reference. Standard input/output/error of the child
+process will be redirected to the string given as reference. Note
+that it wouldn't be strictly necessary to use a scalar reference
+for C<from_string>, as the string is not modified in any way. This was
+chosen only for reasons of symmetry with C<to_string> and
+C<error_to_string>. C<to_string> and C<error_to_string> imply the
+C<wait_child> option.
+
+=item wait_child
+
+Scalar. If containing a true value, wait_child() will be called before
+returning. The return value of spawn() will be a true value, not the pid.
+
+=item nocheck
+
+Scalar. Option of the wait_child() call.
+
+=item timeout
+
+Scalar. Option of the wait_child() call.
+
+=item chdir
+
+Scalar. The child process will chdir in the indicated directory before
+calling exec.
+
+=item env
+
+Hash reference. The child process will populate %ENV with the items of the
+hash before calling exec. This allows exporting environment variables.
+
+=item delete_env
+
+Array reference. The child process will remove all environment variables
+listed in the array before calling exec.
+
+=item sig
+
+Hash reference. The child process will populate %SIG with the items of the
+hash before calling exec. This allows setting signal dispositions.
+
+=item delete_sig
+
+Array reference. The child process will reset all signals listed in the
+array to their default dispositions before calling exec.
+
+=back
+
+=cut
+
+sub _check_opts {
+ my (%opts) = @_;
+
+ croak 'exec parameter is mandatory in spawn()'
+ unless $opts{exec};
+
+ my $to = my $error_to = my $from = 0;
+ foreach my $thing (qw(file handle string pipe)) {
+ $to++ if $opts{"to_$thing"};
+ $error_to++ if $opts{"error_to_$thing"};
+ $from++ if $opts{"from_$thing"};
+ }
+ croak 'not more than one of to_* parameters is allowed'
+ if $to > 1;
+ croak 'not more than one of error_to_* parameters is allowed'
+ if $error_to > 1;
+ croak 'not more than one of from_* parameters is allowed'
+ if $from > 1;
+
+ foreach my $param (qw(to_string error_to_string from_string)) {
+ if (exists $opts{$param} and
+ (not ref $opts{$param} or ref $opts{$param} ne 'SCALAR')) {
+ croak "parameter $param must be a scalar reference";
+ }
+ }
+
+ foreach my $param (qw(to_pipe error_to_pipe from_pipe)) {
+ if (exists $opts{$param} and
+ (not ref $opts{$param} or (ref $opts{$param} ne 'SCALAR' and
+ not $opts{$param}->isa('IO::Handle')))) {
+ croak "parameter $param must be a scalar reference or " .
+ 'an IO::Handle object';
+ }
+ }
+
+ if (exists $opts{timeout} and defined($opts{timeout}) and
+ $opts{timeout} !~ /^\d+$/) {
+ croak 'parameter timeout must be an integer';
+ }
+
+ if (exists $opts{env} and ref($opts{env}) ne 'HASH') {
+ croak 'parameter env must be a hash reference';
+ }
+
+ if (exists $opts{delete_env} and ref($opts{delete_env}) ne 'ARRAY') {
+ croak 'parameter delete_env must be an array reference';
+ }
+
+ if (exists $opts{sig} and ref($opts{sig}) ne 'HASH') {
+ croak 'parameter sig must be a hash reference';
+ }
+
+ if (exists $opts{delete_sig} and ref($opts{delete_sig}) ne 'ARRAY') {
+ croak 'parameter delete_sig must be an array reference';
+ }
+
+ return %opts;
+}
+
+sub spawn {
+ my (%opts) = @_;
+ my @prog;
+
+ _check_opts(%opts);
+ $opts{close_in_child} //= [];
+ if (ref($opts{exec}) =~ /ARRAY/) {
+ push @prog, @{$opts{exec}};
+ } elsif (not ref($opts{exec})) {
+ push @prog, $opts{exec};
+ } else {
+ croak 'invalid exec parameter in spawn()';
+ }
+ my ($from_string_pipe, $to_string_pipe, $error_to_string_pipe);
+ if ($opts{to_string}) {
+ $opts{to_pipe} = \$to_string_pipe;
+ $opts{wait_child} = 1;
+ }
+ if ($opts{error_to_string}) {
+ $opts{error_to_pipe} = \$error_to_string_pipe;
+ $opts{wait_child} = 1;
+ }
+ if ($opts{from_string}) {
+ $opts{from_pipe} = \$from_string_pipe;
+ }
+ # Create pipes if needed
+ my ($input_pipe, $output_pipe, $error_pipe);
+ if ($opts{from_pipe}) {
+ pipe($opts{from_handle}, $input_pipe)
+ or syserr(g_('pipe for %s'), "@prog");
+ ${$opts{from_pipe}} = $input_pipe;
+ push @{$opts{close_in_child}}, $input_pipe;
+ }
+ if ($opts{to_pipe}) {
+ pipe($output_pipe, $opts{to_handle})
+ or syserr(g_('pipe for %s'), "@prog");
+ ${$opts{to_pipe}} = $output_pipe;
+ push @{$opts{close_in_child}}, $output_pipe;
+ }
+ if ($opts{error_to_pipe}) {
+ pipe($error_pipe, $opts{error_to_handle})
+ or syserr(g_('pipe for %s'), "@prog");
+ ${$opts{error_to_pipe}} = $error_pipe;
+ push @{$opts{close_in_child}}, $error_pipe;
+ }
+ # Fork and exec
+ my $pid = fork();
+ syserr(g_('cannot fork for %s'), "@prog") unless defined $pid;
+ if (not $pid) {
+ # Define environment variables
+ if ($opts{env}) {
+ foreach (keys %{$opts{env}}) {
+ $ENV{$_} = $opts{env}{$_};
+ }
+ }
+ if ($opts{delete_env}) {
+ delete $ENV{$_} foreach (@{$opts{delete_env}});
+ }
+ # Define signal dispositions.
+ if ($opts{sig}) {
+ foreach (keys %{$opts{sig}}) {
+ $SIG{$_} = $opts{sig}{$_};
+ }
+ }
+ if ($opts{delete_sig}) {
+ delete $SIG{$_} foreach (@{$opts{delete_sig}});
+ }
+ # Change the current directory
+ if ($opts{chdir}) {
+ chdir($opts{chdir}) or syserr(g_('chdir to %s'), $opts{chdir});
+ }
+ # Redirect STDIN if needed
+ if ($opts{from_file}) {
+ open(STDIN, '<', $opts{from_file})
+ or syserr(g_('cannot open %s'), $opts{from_file});
+ } elsif ($opts{from_handle}) {
+ open(STDIN, '<&', $opts{from_handle})
+ or syserr(g_('reopen stdin'));
+ # has been duped, can be closed
+ push @{$opts{close_in_child}}, $opts{from_handle};
+ }
+ # Redirect STDOUT if needed
+ if ($opts{to_file}) {
+ open(STDOUT, '>', $opts{to_file})
+ or syserr(g_('cannot write %s'), $opts{to_file});
+ } elsif ($opts{to_handle}) {
+ open(STDOUT, '>&', $opts{to_handle})
+ or syserr(g_('reopen stdout'));
+ # has been duped, can be closed
+ push @{$opts{close_in_child}}, $opts{to_handle};
+ }
+ # Redirect STDERR if needed
+ if ($opts{error_to_file}) {
+ open(STDERR, '>', $opts{error_to_file})
+ or syserr(g_('cannot write %s'), $opts{error_to_file});
+ } elsif ($opts{error_to_handle}) {
+ open(STDERR, '>&', $opts{error_to_handle})
+ or syserr(g_('reopen stdout'));
+ # has been duped, can be closed
+ push @{$opts{close_in_child}}, $opts{error_to_handle};
+ }
+ # Close some inherited filehandles
+ close($_) foreach (@{$opts{close_in_child}});
+ # Execute the program
+ exec({ $prog[0] } @prog) or syserr(g_('unable to execute %s'), "@prog");
+ }
+ # Close handle that we can't use any more
+ close($opts{from_handle}) if exists $opts{from_handle};
+ close($opts{to_handle}) if exists $opts{to_handle};
+ close($opts{error_to_handle}) if exists $opts{error_to_handle};
+
+ if ($opts{from_string}) {
+ print { $from_string_pipe } ${$opts{from_string}};
+ close($from_string_pipe);
+ }
+ if ($opts{to_string}) {
+ local $/ = undef;
+ ${$opts{to_string}} = readline($to_string_pipe);
+ }
+ if ($opts{error_to_string}) {
+ local $/ = undef;
+ ${$opts{error_to_string}} = readline($error_to_string_pipe);
+ }
+ if ($opts{wait_child}) {
+ my $cmdline = "@prog";
+ if ($opts{env}) {
+ foreach (keys %{$opts{env}}) {
+ $cmdline = "$_=\"" . $opts{env}{$_} . "\" $cmdline";
+ }
+ }
+ wait_child($pid, nocheck => $opts{nocheck},
+ timeout => $opts{timeout}, cmdline => $cmdline);
+ return 1;
+ }
+
+ return $pid;
+}
+
+
+=item wait_child($pid, %opts)
+
+Takes as first argument the pid of the process to wait for.
+Remaining arguments are taken as a hash of options. Returns
+nothing. Fails if the child has been ended by a signal or
+if it exited non-zero.
+
+Options:
+
+=over 4
+
+=item cmdline
+
+String to identify the child process in error messages.
+Defaults to "child process".
+
+=item nocheck
+
+If true do not check the return status of the child (and thus
+do not fail it has been killed or if it exited with a
+non-zero return code).
+
+=item timeout
+
+Set a maximum time to wait for the process, after that kill the process and
+fail with an error message.
+
+=back
+
+=cut
+
+sub wait_child {
+ my ($pid, %opts) = @_;
+ $opts{cmdline} //= g_('child process');
+ croak 'no PID set, cannot wait end of process' unless $pid;
+ eval {
+ local $SIG{ALRM} = sub { die "alarm\n" };
+ alarm($opts{timeout}) if defined($opts{timeout});
+ $pid == waitpid($pid, 0) or syserr(g_('wait for %s'), $opts{cmdline});
+ alarm(0) if defined($opts{timeout});
+ };
+ if ($@) {
+ die $@ unless $@ eq "alarm\n";
+ kill 'TERM', $pid;
+ error(P_("%s didn't complete in %d second",
+ "%s didn't complete in %d seconds",
+ $opts{timeout}),
+ $opts{cmdline}, $opts{timeout});
+ }
+ unless ($opts{nocheck}) {
+ subprocerr($opts{cmdline}) if $?;
+ }
+}
+
+1;
+
+=back
+
+=head1 CHANGES
+
+=head2 Version 1.02 (dpkg 1.18.0)
+
+Change options: wait_child() now kills the process when reaching the 'timeout'.
+
+=head2 Version 1.01 (dpkg 1.17.11)
+
+New options: spawn() now accepts 'sig' and 'delete_sig'.
+
+=head2 Version 1.00 (dpkg 1.15.6)
+
+Mark the module as public.
+
+=head1 SEE ALSO
+
+Dpkg, Dpkg::ErrorHandling
diff --git a/scripts/Dpkg/Index.pm b/scripts/Dpkg/Index.pm
new file mode 100644
index 0000000..46027d0
--- /dev/null
+++ b/scripts/Dpkg/Index.pm
@@ -0,0 +1,457 @@
+# Copyright © 2009 Raphaël Hertzog <hertzog@debian.org>
+# Copyright © 2012-2017 Guillem Jover <guillem@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::Index;
+
+use strict;
+use warnings;
+
+our $VERSION = '3.00';
+
+use Dpkg::Gettext;
+use Dpkg::ErrorHandling;
+use Dpkg::Control;
+
+use parent qw(Dpkg::Interface::Storable);
+
+use overload
+ '@{}' => sub { return $_[0]->{order} },
+ fallback => 1;
+
+=encoding utf8
+
+=head1 NAME
+
+Dpkg::Index - generic index of control information
+
+=head1 DESCRIPTION
+
+This class represent a set of Dpkg::Control objects.
+
+=head1 METHODS
+
+=over 4
+
+=item $index = Dpkg::Index->new(%opts)
+
+Creates a new empty index. See set_options() for more details.
+
+=cut
+
+sub new {
+ my ($this, %opts) = @_;
+ my $class = ref($this) || $this;
+
+ my $self = {
+ items => {},
+ order => [],
+ unique_tuple_key => 1,
+ get_key_func => sub { return $_[0]->{Package} },
+ type => CTRL_UNKNOWN,
+ item_opts => {},
+ };
+ bless $self, $class;
+ $self->set_options(%opts);
+ if (exists $opts{load}) {
+ $self->load($opts{load});
+ }
+
+ return $self;
+}
+
+=item $index->set_options(%opts)
+
+The "type" option is checked first to define default values for other
+options. Here are the relevant options: "get_key_func" is a function
+returning a key for the item passed in parameters, "unique_tuple_key" is
+a boolean requesting whether the default key should be the unique tuple
+(default to true), "item_opts" is a hash reference that will be passed to
+the item constructor in the new_item() method.
+The index can only contain one item with a given key.
+The "get_key_func" function used depends on the type:
+
+=over
+
+=item *
+
+for CTRL_INFO_SRC, it is the Source field;
+
+=item *
+
+for CTRL_INDEX_SRC and CTRL_PKG_SRC it is the Package and Version fields
+(concatenated with "_") when "unique_tuple_key" is true (the default), or
+otherwise the Package field;
+
+=item *
+
+for CTRL_INFO_PKG it is simply the Package field;
+
+=item *
+
+for CTRL_INDEX_PKG and CTRL_PKG_DEB it is the Package, Version and
+Architecture fields (concatenated with "_") when "unique_tuple_key" is
+true (the default) or otherwise the Package field;
+
+=item *
+
+for CTRL_CHANGELOG it is the Source and the Version fields (concatenated
+with an intermediary "_");
+
+=item *
+
+for CTRL_TESTS is an integer index (0-based) corresponding to the Tests or
+Test-Command field stanza;
+
+=item *
+
+for CTRL_FILE_CHANGES it is the Source, Version and Architecture fields
+(concatenated with "_");
+
+=item *
+
+for CTRL_FILE_VENDOR it is the Vendor field;
+
+=item *
+
+for CTRL_FILE_STATUS it is the Package and Architecture fields (concatenated
+with "_");
+
+=item *
+
+otherwise it is the Package field by default.
+
+=back
+
+=cut
+
+sub set_options {
+ my ($self, %opts) = @_;
+
+ # Default values based on type
+ if (exists $opts{type}) {
+ my $t = $opts{type};
+ if ($t == CTRL_INFO_PKG) {
+ $self->{get_key_func} = sub { return $_[0]->{Package}; };
+ } elsif ($t == CTRL_INFO_SRC) {
+ $self->{get_key_func} = sub { return $_[0]->{Source}; };
+ } elsif ($t == CTRL_CHANGELOG) {
+ $self->{get_key_func} = sub {
+ return $_[0]->{Source} . '_' . $_[0]->{Version};
+ };
+ } elsif ($t == CTRL_COPYRIGHT_HEADER) {
+ # This is a bit pointless, because the value will almost always
+ # be the same, but guarantees that we use a known field.
+ $self->{get_key_func} = sub { return $_[0]->{Format}; };
+ } elsif ($t == CTRL_COPYRIGHT_FILES) {
+ $self->{get_key_func} = sub { return $_[0]->{Files}; };
+ } elsif ($t == CTRL_COPYRIGHT_LICENSE) {
+ $self->{get_key_func} = sub { return $_[0]->{License}; };
+ } elsif ($t == CTRL_TESTS) {
+ $self->{get_key_func} = sub {
+ return scalar @{$self->{order}};
+ };
+ } elsif ($t == CTRL_INDEX_SRC or $t == CTRL_PKG_SRC) {
+ if ($opts{unique_tuple_key} // $self->{unique_tuple_key}) {
+ $self->{get_key_func} = sub {
+ return $_[0]->{Package} . '_' . $_[0]->{Version};
+ };
+ } else {
+ $self->{get_key_func} = sub {
+ return $_[0]->{Package};
+ };
+ }
+ } elsif ($t == CTRL_INDEX_PKG or $t == CTRL_PKG_DEB) {
+ if ($opts{unique_tuple_key} // $self->{unique_tuple_key}) {
+ $self->{get_key_func} = sub {
+ return $_[0]->{Package} . '_' . $_[0]->{Version} . '_' .
+ $_[0]->{Architecture};
+ };
+ } else {
+ $self->{get_key_func} = sub {
+ return $_[0]->{Package};
+ };
+ }
+ } elsif ($t == CTRL_FILE_CHANGES) {
+ $self->{get_key_func} = sub {
+ return $_[0]->{Source} . '_' . $_[0]->{Version} . '_' .
+ $_[0]->{Architecture};
+ };
+ } elsif ($t == CTRL_FILE_VENDOR) {
+ $self->{get_key_func} = sub { return $_[0]->{Vendor}; };
+ } elsif ($t == CTRL_FILE_STATUS) {
+ $self->{get_key_func} = sub {
+ return $_[0]->{Package} . '_' . $_[0]->{Architecture};
+ };
+ }
+ }
+
+ # Options set by the user override default values
+ $self->{$_} = $opts{$_} foreach keys %opts;
+}
+
+=item $index->get_type()
+
+Returns the type of control information stored. See the type parameter
+set during new().
+
+=cut
+
+sub get_type {
+ my $self = shift;
+ return $self->{type};
+}
+
+=item $index->add($item, [$key])
+
+Add a new item in the index. If the $key parameter is omitted, the key
+will be generated with the get_key_func function (see set_options() for
+details).
+
+=cut
+
+sub add {
+ my ($self, $item, $key) = @_;
+
+ $key //= $self->{get_key_func}($item);
+ if (not exists $self->{items}{$key}) {
+ push @{$self->{order}}, $key;
+ }
+ $self->{items}{$key} = $item;
+}
+
+=item $index->parse($fh, $desc)
+
+Reads the filehandle and creates all items parsed. When called multiple
+times, the parsed stanzas are accumulated.
+
+Returns the number of items parsed.
+
+=cut
+
+sub parse {
+ my ($self, $fh, $desc) = @_;
+ my $item = $self->new_item();
+ my $i = 0;
+ while ($item->parse($fh, $desc)) {
+ $self->add($item);
+ $item = $self->new_item();
+ $i++;
+ }
+ return $i;
+}
+
+=item $index->load($file)
+
+Reads the file and creates all items parsed. Returns the number of items
+parsed. Handles compressed files transparently based on their extensions.
+
+=item $item = $index->new_item()
+
+Creates a new item. Mainly useful for derived objects that would want
+to override this method to return something else than a Dpkg::Control
+object.
+
+=cut
+
+sub new_item {
+ my $self = shift;
+ return Dpkg::Control->new(%{$self->{item_opts}}, type => $self->{type});
+}
+
+=item $item = $index->get_by_key($key)
+
+Returns the item identified by $key or undef.
+
+=cut
+
+sub get_by_key {
+ my ($self, $key) = @_;
+ return $self->{items}{$key} if exists $self->{items}{$key};
+ return;
+}
+
+=item @keys = $index->get_keys(%criteria)
+
+Returns the keys of items that matches all the criteria. The key of the
+%criteria hash is a field name and the value is either a regex that needs
+to match the field value, or a reference to a function that must return
+true and that receives the field value as single parameter, or a scalar
+that must be equal to the field value.
+
+=cut
+
+sub get_keys {
+ my ($self, %crit) = @_;
+ my @selected = @{$self->{order}};
+ foreach my $s_crit (keys %crit) { # search criteria
+ if (ref($crit{$s_crit}) eq 'Regexp') {
+ @selected = grep {
+ exists $self->{items}{$_}{$s_crit} and
+ $self->{items}{$_}{$s_crit} =~ $crit{$s_crit}
+ } @selected;
+ } elsif (ref($crit{$s_crit}) eq 'CODE') {
+ @selected = grep {
+ $crit{$s_crit}->($self->{items}{$_}{$s_crit});
+ } @selected;
+ } else {
+ @selected = grep {
+ exists $self->{items}{$_}{$s_crit} and
+ $self->{items}{$_}{$s_crit} eq $crit{$s_crit}
+ } @selected;
+ }
+ }
+ return @selected;
+}
+
+=item @items = $index->get(%criteria)
+
+Returns all the items that matches all the criteria.
+
+=cut
+
+sub get {
+ my ($self, %crit) = @_;
+ return map { $self->{items}{$_} } $self->get_keys(%crit);
+}
+
+=item $index->remove_by_key($key)
+
+Remove the item identified by the given key.
+
+=cut
+
+sub remove_by_key {
+ my ($self, $key) = @_;
+ @{$self->{order}} = grep { $_ ne $key } @{$self->{order}};
+ return delete $self->{items}{$key};
+}
+
+=item @items = $index->remove(%criteria)
+
+Returns and removes all the items that matches all the criteria.
+
+=cut
+
+sub remove {
+ my ($self, %crit) = @_;
+ my @keys = $self->get_keys(%crit);
+ my (%keys, @ret);
+ foreach my $key (@keys) {
+ $keys{$key} = 1;
+ push @ret, $self->{items}{$key} if defined wantarray;
+ delete $self->{items}{$key};
+ }
+ @{$self->{order}} = grep { not exists $keys{$_} } @{$self->{order}};
+ return @ret;
+}
+
+=item $index->merge($other_index, %opts)
+
+Merge the entries of the other index. While merging, the keys of the merged
+index are used, they are not re-computed (unless you have set the options
+"keep_keys" to "0"). It's your responsibility to ensure that they have been
+computed with the same function.
+
+=cut
+
+sub merge {
+ my ($self, $other, %opts) = @_;
+ $opts{keep_keys} //= 1;
+ foreach my $key ($other->get_keys()) {
+ $self->add($other->get_by_key($key), $opts{keep_keys} ? $key : undef);
+ }
+}
+
+=item $index->sort(\&sortfunc)
+
+Sort the index with the given sort function. If no function is given, an
+alphabetic sort is done based on the keys. The sort function receives the
+items themselves as parameters and not the keys.
+
+=cut
+
+sub sort {
+ my ($self, $func) = @_;
+ if (defined $func) {
+ @{$self->{order}} = sort {
+ $func->($self->{items}{$a}, $self->{items}{$b})
+ } @{$self->{order}};
+ } else {
+ @{$self->{order}} = sort @{$self->{order}};
+ }
+}
+
+=item $str = $index->output([$fh])
+
+=item "$index"
+
+Get a string representation of the index. The L<Dpkg::Control> objects are
+output in the order which they have been read or added except if the order
+have been changed with sort().
+
+Print the string representation of the index to a filehandle if $fh has
+been passed.
+
+=cut
+
+sub output {
+ my ($self, $fh) = @_;
+ my $str = '';
+ foreach my $key ($self->get_keys()) {
+ if (defined $fh) {
+ print { $fh } $self->get_by_key($key) . "\n";
+ }
+ if (defined wantarray) {
+ $str .= $self->get_by_key($key) . "\n";
+ }
+ }
+ return $str;
+}
+
+=item $index->save($file)
+
+Writes the content of the index in a file. Auto-compresses files
+based on their extensions.
+
+=back
+
+=head1 CHANGES
+
+=head2 Version 3.00 (dpkg 1.21.2)
+
+Change behavior: The CTRL_TESTS key now defaults to a stanza index.
+
+=head2 Version 2.01 (dpkg 1.20.6)
+
+New option: Add new "item_opts" option.
+
+=head2 Version 2.00 (dpkg 1.20.0)
+
+Change behavior: The "unique_tuple_key" option now defaults to true.
+
+=head2 Version 1.01 (dpkg 1.19.0)
+
+New option: Add new "unique_tuple_key" option to $index->set_options() to set
+better default "get_key_func" options, which will become the default behavior
+in 1.20.x.
+
+=head2 Version 1.00 (dpkg 1.15.6)
+
+Mark the module as public.
+
+=cut
+
+1;
diff --git a/scripts/Dpkg/Interface/Storable.pm b/scripts/Dpkg/Interface/Storable.pm
new file mode 100644
index 0000000..5ac078a
--- /dev/null
+++ b/scripts/Dpkg/Interface/Storable.pm
@@ -0,0 +1,163 @@
+# Copyright © 2010 Raphaël Hertzog <hertzog@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::Interface::Storable;
+
+use strict;
+use warnings;
+
+our $VERSION = '1.01';
+
+use Carp;
+
+use Dpkg::Gettext;
+use Dpkg::ErrorHandling;
+
+use overload
+ '""' => \&_stringify,
+ 'fallback' => 1;
+
+=encoding utf8
+
+=head1 NAME
+
+Dpkg::Interface::Storable - common methods related to object serialization
+
+=head1 DESCRIPTION
+
+Dpkg::Interface::Storable is only meant to be used as parent
+class for other classes. It provides common methods that are
+all implemented on top of two basic methods parse() and output().
+
+=head1 BASE METHODS
+
+Those methods must be provided by the class that wish to inherit
+from Dpkg::Interface::Storable so that the methods provided can work.
+
+=over 4
+
+=item $obj->parse($fh[, $desc])
+
+This methods initialize the object with the data stored in the
+filehandle. $desc is optional and is a textual description of
+the filehandle used in error messages.
+
+=item $string = $obj->output([$fh])
+
+This method returns a string representation of the object in $string
+and it writes the same string to $fh (if it's defined).
+
+=back
+
+=head1 PROVIDED METHODS
+
+=over 4
+
+=item $obj->load($filename, %opts)
+
+Initialize the object with the data stored in the file. The file can be
+compressed, it will be decompressed on the fly by using a
+Dpkg::Compression::FileHandle object. If $opts{compression} is false the
+decompression support will be disabled. If $filename is "-", then the
+standard input is read (no compression is allowed in that case).
+
+=cut
+
+sub load {
+ my ($self, $file, %opts) = @_;
+ $opts{compression} //= 1;
+ unless ($self->can('parse')) {
+ croak ref($self) . ' cannot be loaded, it lacks the parse method';
+ }
+ my ($desc, $fh) = ($file, undef);
+ if ($file eq '-') {
+ $fh = \*STDIN;
+ $desc = g_('<standard input>');
+ } else {
+ if ($opts{compression}) {
+ require Dpkg::Compression::FileHandle;
+ $fh = Dpkg::Compression::FileHandle->new();
+ }
+ open($fh, '<', $file) or syserr(g_('cannot read %s'), $file);
+ }
+ my $res = $self->parse($fh, $desc, %opts);
+ if ($file ne '-') {
+ close($fh) or syserr(g_('cannot close %s'), $file);
+ }
+ return $res;
+}
+
+=item $obj->save($filename, %opts)
+
+Store the object in the file. If the filename ends with a known
+compression extension, it will be compressed on the fly by using a
+Dpkg::Compression::FileHandle object. If $opts{compression} is false the
+compression support will be disabled. If $filename is "-", then the
+standard output is used (data are written uncompressed in that case).
+
+=cut
+
+sub save {
+ my ($self, $file, %opts) = @_;
+ $opts{compression} //= 1;
+ unless ($self->can('output')) {
+ croak ref($self) . ' cannot be saved, it lacks the output method';
+ }
+ my $fh;
+ if ($file eq '-') {
+ $fh = \*STDOUT;
+ } else {
+ if ($opts{compression}) {
+ require Dpkg::Compression::FileHandle;
+ $fh = Dpkg::Compression::FileHandle->new();
+ }
+ open($fh, '>', $file) or syserr(g_('cannot write %s'), $file);
+ }
+ $self->output($fh, %opts);
+ if ($file ne '-') {
+ close($fh) or syserr(g_('cannot close %s'), $file);
+ }
+}
+
+=item "$obj"
+
+Return a string representation of the object.
+
+=cut
+
+sub _stringify {
+ my $self = shift;
+ unless ($self->can('output')) {
+ croak ref($self) . ' cannot be stringified, it lacks the output method';
+ }
+ return $self->output();
+}
+
+=back
+
+=head1 CHANGES
+
+=head2 Version 1.01 (dpkg 1.19.0)
+
+New options: The $obj->load() and $obj->save() methods support a new
+compression option.
+
+=head2 Version 1.00 (dpkg 1.15.6)
+
+Mark the module as public.
+
+=cut
+
+1;
diff --git a/scripts/Dpkg/Lock.pm b/scripts/Dpkg/Lock.pm
new file mode 100644
index 0000000..6344779
--- /dev/null
+++ b/scripts/Dpkg/Lock.pm
@@ -0,0 +1,61 @@
+# Copyright © 2011 Raphaël Hertzog <hertzog@debian.org>
+# Copyright © 2012 Guillem Jover <guillem@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::Lock;
+
+use strict;
+use warnings;
+
+our $VERSION = '0.01';
+our @EXPORT = qw(
+ file_lock
+);
+
+use Exporter qw(import);
+use Fcntl qw(:flock);
+
+use Dpkg::Gettext;
+use Dpkg::ErrorHandling;
+
+sub file_lock($$) {
+ my ($fh, $filename) = @_;
+
+ # A strict dependency on libfile-fcntllock-perl being it an XS module,
+ # and dpkg-dev indirectly making use of it, makes building new perl
+ # package which bump the perl ABI impossible as these packages cannot
+ # be installed alongside.
+ eval q{
+ pop @INC if $INC[-1] eq '.';
+ use File::FcntlLock;
+ };
+ if ($@) {
+ # On Linux systems the flock() locks get converted to file-range
+ # locks on NFS mounts.
+ if ($^O ne 'linux') {
+ warning(g_('File::FcntlLock not available; using flock which is not NFS-safe'));
+ }
+ flock($fh, LOCK_EX)
+ or syserr(g_('failed to get a write lock on %s'), $filename);
+ } else {
+ eval q{
+ my $fs = File::FcntlLock->new(l_type => F_WRLCK);
+ $fs->lock($fh, F_SETLKW)
+ or syserr(g_('failed to get a write lock on %s'), $filename);
+ }
+ }
+}
+
+1;
diff --git a/scripts/Dpkg/OpenPGP.pm b/scripts/Dpkg/OpenPGP.pm
new file mode 100644
index 0000000..2e12ea7
--- /dev/null
+++ b/scripts/Dpkg/OpenPGP.pm
@@ -0,0 +1,155 @@
+# Copyright © 2017 Guillem Jover <guillem@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::OpenPGP;
+
+use strict;
+use warnings;
+
+use List::Util qw(none);
+
+use Dpkg::Gettext;
+use Dpkg::ErrorHandling;
+use Dpkg::IPC;
+use Dpkg::Path qw(find_command);
+
+our $VERSION = '0.01';
+
+my @BACKENDS = qw(
+ sop
+ sq
+ gpg
+);
+my %BACKEND = (
+ sop => 'SOP',
+ sq => 'Sequoia',
+ gpg => 'GnuPG',
+);
+
+sub new {
+ my ($this, %opts) = @_;
+ my $class = ref($this) || $this;
+
+ my $self = {};
+ bless $self, $class;
+
+ my $backend = $opts{backend} // 'auto';
+ my %backend_opts = (
+ cmdv => $opts{cmdv} // 'auto',
+ cmd => $opts{cmd} // 'auto',
+ );
+
+ if ($backend eq 'auto') {
+ # Defaults for stateless full API auto-detection.
+ $opts{needs}{api} //= 'full';
+ $opts{needs}{keystore} //= 0;
+
+ if (none { $opts{needs}{api} eq $_ } qw(full verify)) {
+ error(g_('unknown OpenPGP api requested %s'), $opts{needs}{api});
+ }
+
+ $self->{backend} = $self->_auto_backend($opts{needs}, %backend_opts);
+ } elsif (exists $BACKEND{$backend}) {
+ $self->{backend} = $self->_load_backend($BACKEND{$backend}, %backend_opts);
+ if (! $self->{backend}) {
+ error(g_('cannot load OpenPGP backend %s'), $backend);
+ }
+ } else {
+ error(g_('unknown OpenPGP backend %s'), $backend);
+ }
+
+ return $self;
+}
+
+sub _load_backend {
+ my ($self, $backend, %opts) = @_;
+
+ my $module = "Dpkg::OpenPGP::Backend::$backend";
+ eval qq{
+ pop \@INC if \$INC[-1] eq '.';
+ require $module;
+ };
+ return if $@;
+
+ return $module->new(%opts);
+}
+
+sub _auto_backend {
+ my ($self, $needs, %opts) = @_;
+
+ foreach my $backend (@BACKENDS) {
+ my $module = $self->_load_backend($BACKEND{$backend}, %opts);
+
+ if ($needs->{api} eq 'verify') {
+ next if ! $module->has_verify_cmd();
+ } else {
+ next if ! $module->has_backend_cmd();
+ }
+ next if $needs->{keystore} && ! $module->has_keystore();
+
+ return $module;
+ }
+
+ # Otherwise load a dummy backend.
+ return Dpkg::OpenPGP::Backend->new();
+}
+
+sub can_use_secrets {
+ my ($self, $key) = @_;
+
+ return 0 unless $self->{backend}->has_backend_cmd();
+ return 0 if $key->type eq 'keyfile' && ! -f $key->handle;
+ return 0 if $key->type eq 'keystore' && ! -e $key->handle;
+ return 0 unless $self->{backend}->can_use_key($key);
+ return 1;
+}
+
+sub get_trusted_keyrings {
+ my $self = shift;
+
+ return $self->{backend}->get_trusted_keyrings();
+}
+
+sub armor {
+ my ($self, $type, $in, $out) = @_;
+
+ return $self->{backend}->armor($type, $in, $out);
+}
+
+sub dearmor {
+ my ($self, $type, $in, $out) = @_;
+
+ return $self->{backend}->dearmor($type, $in, $out);
+}
+
+sub inline_verify {
+ my ($self, $inlinesigned, $data, @certs) = @_;
+
+ return $self->{backend}->inline_verify($inlinesigned, $data, @certs);
+}
+
+sub verify {
+ my ($self, $data, $sig, @certs) = @_;
+
+ return $self->{backend}->verify($data, $sig, @certs);
+}
+
+sub inline_sign {
+ my ($self, $data, $inlinesigned, $key) = @_;
+
+ return $self->{backend}->inline_sign($data, $inlinesigned, $key);
+}
+
+1;
diff --git a/scripts/Dpkg/OpenPGP/Backend.pm b/scripts/Dpkg/OpenPGP/Backend.pm
new file mode 100644
index 0000000..48cfd22
--- /dev/null
+++ b/scripts/Dpkg/OpenPGP/Backend.pm
@@ -0,0 +1,127 @@
+# Copyright © 2017, 2022 Guillem Jover <guillem@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::OpenPGP::Backend;
+
+use strict;
+use warnings;
+
+our $VERSION = '0.01';
+
+use List::Util qw(first);
+
+use Dpkg::Path qw(find_command);
+use Dpkg::OpenPGP::ErrorCodes;
+
+sub DEFAULT_CMDV {
+ return [];
+}
+
+sub DEFAULT_CMDSTORE {
+ return [];
+}
+
+sub DEFAULT_CMD {
+ return [];
+}
+
+sub _detect_cmd {
+ my ($cmd, $default) = @_;
+
+ if (! defined $cmd || $cmd eq 'auto') {
+ return first { find_command($_) } @{$default};
+ } else {
+ return find_command($cmd);
+ }
+}
+
+sub new {
+ my ($this, %opts) = @_;
+ my $class = ref($this) || $this;
+
+ my $self = {
+ strict_verify => $opts{strict_verify} // 1,
+ };
+ bless $self, $class;
+
+ $self->{cmdv} = _detect_cmd($opts{cmdv}, $self->DEFAULT_CMDV());
+ $self->{cmdstore} = _detect_cmd($opts{cmdstore}, $self->DEFAULT_CMDSTORE());
+ $self->{cmd} = _detect_cmd($opts{cmd}, $self->DEFAULT_CMD());
+
+ return $self;
+}
+
+sub has_backend_cmd {
+ my $self = shift;
+
+ return defined $self->{cmd};
+}
+
+sub has_verify_cmd {
+ my $self = shift;
+
+ return defined $self->{cmd};
+}
+
+sub has_keystore {
+ my $self = shift;
+
+ return 0;
+}
+
+sub can_use_key {
+ my ($self, $key) = @_;
+
+ return $self->has_keystore() if $key->needs_keystore();
+ return 1;
+}
+
+sub get_trusted_keyrings {
+ my $self = shift;
+
+ return ();
+}
+
+sub armor {
+ my ($self, $type, $in, $out) = @_;
+
+ return OPENPGP_UNSUPPORTED_SUBCMD;
+}
+
+sub dearmor {
+ my ($self, $type, $in, $out) = @_;
+
+ return OPENPGP_UNSUPPORTED_SUBCMD;
+}
+
+sub inline_verify {
+ my ($self, $inlinesigned, $data, @certs) = @_;
+
+ return OPENPGP_UNSUPPORTED_SUBCMD;
+}
+
+sub verify {
+ my ($self, $data, $sig, @certs) = @_;
+
+ return OPENPGP_UNSUPPORTED_SUBCMD;
+}
+
+sub inline_sign {
+ my ($self, $data, $inlinesigned, $key) = @_;
+
+ return OPENPGP_UNSUPPORTED_SUBCMD;
+}
+
+1;
diff --git a/scripts/Dpkg/OpenPGP/Backend/GnuPG.pm b/scripts/Dpkg/OpenPGP/Backend/GnuPG.pm
new file mode 100644
index 0000000..7cc7bc7
--- /dev/null
+++ b/scripts/Dpkg/OpenPGP/Backend/GnuPG.pm
@@ -0,0 +1,301 @@
+# Copyright © 207, 2022 Guillem Jover <guillem@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::OpenPGP::Backend::GnuPG;
+
+use strict;
+use warnings;
+
+our $VERSION = '0.01';
+
+use POSIX qw(:sys_wait_h);
+use File::Temp;
+use MIME::Base64;
+
+use Dpkg::ErrorHandling;
+use Dpkg::IPC;
+use Dpkg::File;
+use Dpkg::Path qw(find_command);
+use Dpkg::OpenPGP::ErrorCodes;
+
+use parent qw(Dpkg::OpenPGP::Backend);
+
+sub DEFAULT_CMDV {
+ return [ qw(gpgv) ];
+}
+
+sub DEFAULT_CMDSTORE {
+ return [ qw(gpg-agent) ];
+}
+
+sub DEFAULT_CMD {
+ return [ qw(gpg) ];
+}
+
+sub has_backend_cmd {
+ my $self = shift;
+
+ return defined $self->{cmd} && defined $self->{cmdstore};
+}
+
+sub has_keystore {
+ my $self = shift;
+
+ return 0 if not defined $self->{cmdstore};
+ return 1 if ($ENV{GNUPGHOME} && -e $ENV{GNUPGHOME}) ||
+ ($ENV{HOME} && -e "$ENV{HOME}/.gnupg");
+ return 0;
+}
+
+sub can_use_key {
+ my ($self, $key) = @_;
+
+ # With gpg, a secret key always requires gpg-agent (the key store).
+ return $self->has_keystore();
+}
+
+sub has_verify_cmd {
+ my $self = shift;
+
+ return defined $self->{cmdv} || defined $self->{cmd};
+}
+
+sub get_trusted_keyrings {
+ my $self = shift;
+
+ my @keyrings;
+ if (length $ENV{HOME} and -r "$ENV{HOME}/.gnupg/trustedkeys.gpg") {
+ push @keyrings, "$ENV{HOME}/.gnupg/trustedkeys.gpg";
+ }
+ return @keyrings;
+}
+
+# _pgp_* functions are strictly for applying or removing ASCII armor.
+# See <https://datatracker.ietf.org/doc/html/rfc4880#section-6> for more
+# details.
+#
+# Note that these _pgp_* functions are only necessary while relying on
+# gpgv, and gpgv itself does not verify multiple signatures correctly
+# (see https://bugs.debian.org/1010955).
+
+sub _pgp_dearmor_data {
+ my ($type, $data) = @_;
+
+ # Note that we ignore an incorrect or absent checksum, following the
+ # guidance of
+ # <https://datatracker.ietf.org/doc/draft-ietf-openpgp-crypto-refresh/>.
+ my $armor_regex = qr{
+ -----BEGIN\ PGP\ \Q$type\E-----[\r\t ]*\n
+ (?:[^:]+:\ [^\n]*[\r\t ]*\n)*
+ [\r\t ]*\n
+ ([a-zA-Z0-9/+\n]+={0,2})[\r\t ]*\n
+ (?:=[a-zA-Z0-9/+]{4}[\r\t ]*\n)?
+ -----END\ PGP\ \Q$type\E-----
+ }xm;
+
+ if ($data =~ m/$armor_regex/) {
+ return decode_base64($1);
+ }
+ return;
+}
+
+sub _pgp_armor_checksum {
+ my ($data) = @_;
+
+ # From the upcoming revision to RFC 4880
+ # <https://datatracker.ietf.org/doc/draft-ietf-openpgp-crypto-refresh/>.
+ #
+ # The resulting three-octet-wide value then gets base64-encoded into
+ # four base64 ASCII characters.
+
+ my $CRC24_INIT = 0xB704CE;
+ my $CRC24_GENERATOR = 0x864CFB;
+
+ my @bytes = unpack 'C*', $data;
+ my $crc = $CRC24_INIT;
+ for my $b (@bytes) {
+ $crc ^= ($b << 16);
+ for (1 .. 8) {
+ $crc <<= 1;
+ if ($crc & 0x1000000) {
+ # Clear bit 25 to avoid overflow.
+ $crc &= 0xffffff;
+ $crc ^= $CRC24_GENERATOR;
+ }
+ }
+ }
+ my $sum = pack 'CCC', ($crc >> 16) & 0xff, ($crc >> 8) & 0xff, $crc & 0xff;
+ return encode_base64($sum, q{});
+}
+
+sub _pgp_armor_data {
+ my ($type, $data) = @_;
+
+ my $out = encode_base64($data, q{}) =~ s/(.{1,64})/$1\n/gr;
+ chomp $out;
+ my $crc = _pgp_armor_checksum($data);
+ my $armor = <<~"ARMOR";
+ -----BEGIN PGP $type-----
+
+ $out
+ =$crc
+ -----END PGP $type-----
+ ARMOR
+ return $armor;
+}
+
+sub armor {
+ my ($self, $type, $in, $out) = @_;
+
+ my $raw_data = file_slurp($in);
+ my $data = _pgp_dearmor_data($type, $raw_data) // $raw_data;
+ my $armor = _pgp_armor_data($type, $data);
+ return OPENPGP_BAD_DATA unless defined $armor;
+ file_dump($out, $armor);
+
+ return OPENPGP_OK;
+}
+
+sub dearmor {
+ my ($self, $type, $in, $out) = @_;
+
+ my $armor = file_slurp($in);
+ my $data = _pgp_dearmor_data($type, $armor);
+ return OPENPGP_BAD_DATA unless defined $data;
+ file_dump($out, $data);
+
+ return OPENPGP_OK;
+}
+
+sub _gpg_exec
+{
+ my ($self, @exec) = @_;
+
+ my ($stdout, $stderr);
+ spawn(exec => \@exec, wait_child => 1, nocheck => 1, timeout => 10,
+ to_string => \$stdout, error_to_string => \$stderr);
+ if (WIFEXITED($?)) {
+ my $status = WEXITSTATUS($?);
+ print { *STDERR } "$stdout$stderr" if $status;
+ return $status;
+ } else {
+ subprocerr("@exec");
+ }
+}
+
+sub _gpg_options_weak_digests {
+ my @gpg_weak_digests = map {
+ (qw(--weak-digest), $_)
+ } qw(SHA1 RIPEMD160);
+
+ return @gpg_weak_digests;
+}
+
+sub _gpg_verify {
+ my ($self, $signeddata, $sig, $data, @certs) = @_;
+
+ return OPENPGP_MISSING_CMD if ! $self->has_verify_cmd();
+
+ my $gpg_home = File::Temp->newdir('dpkg-gpg-verify.XXXXXXXX', TMPDIR => 1);
+ my @cmd_opts = qw(--no-options --no-default-keyring --batch --quiet);
+ my @gpg_opts;
+ push @gpg_opts, _gpg_options_weak_digests();
+ push @gpg_opts, '--homedir', $gpg_home;
+ push @cmd_opts, @gpg_opts;
+
+ my @exec;
+ if ($self->{cmdv}) {
+ push @exec, $self->{cmdv};
+ push @exec, @gpg_opts;
+ # We need to touch the trustedkeys.gpg keyring, otherwise gpgv will
+ # emit an error about the trustedkeys.kbx file being of unknown type.
+ file_touch("$gpg_home/trustedkeys.gpg");
+ } else {
+ push @exec, $self->{cmd};
+ push @exec, @cmd_opts;
+ }
+ foreach my $cert (@certs) {
+ my $certring = File::Temp->new(UNLINK => 1, SUFFIX => '.pgp');
+ my $rc;
+ # XXX: The internal dearmor() does not handle concatenated ASCII Armor,
+ # but the old implementation handled such certificate keyrings, so to
+ # avoid regressing for now, we fallback to use the GnuPG dearmor.
+ if (defined $self->{cmd}) {
+ $rc = $self->_gpg_exec($self->{cmd}, @cmd_opts, '--yes',
+ '--output', $certring,
+ '--dearmor', $cert);
+ } else {
+ $rc = $self->dearmor('PUBLIC KEY BLOCK', $cert, $certring);
+ }
+ $certring = $cert if $rc;
+ push @exec, '--keyring', $certring;
+ }
+ push @exec, '--output', $data if defined $data;
+ if (! $self->{cmdv}) {
+ push @exec, '--verify';
+ }
+ push @exec, $sig if defined $sig;
+ push @exec, $signeddata;
+
+ my $rc = $self->_gpg_exec(@exec);
+ return OPENPGP_NO_SIG if $rc;
+ return OPENPGP_OK;
+}
+
+sub inline_verify {
+ my ($self, $inlinesigned, $data, @certs) = @_;
+
+ return $self->_gpg_verify($inlinesigned, undef, $data, @certs);
+}
+
+sub verify {
+ my ($self, $data, $sig, @certs) = @_;
+
+ return $self->_gpg_verify($data, $sig, undef, @certs);
+}
+
+sub inline_sign {
+ my ($self, $data, $inlinesigned, $key) = @_;
+
+ return OPENPGP_MISSING_CMD if ! $self->has_backend_cmd();
+
+ my @exec = ($self->{cmd});
+ push @exec, _gpg_options_weak_digests();
+ push @exec, qw(--utf8-strings --textmode --armor);
+ # Set conformance level.
+ push @exec, '--openpgp';
+ # Set secure algorithm preferences.
+ push @exec, '--personal-digest-preferences', 'SHA512 SHA384 SHA256 SHA224';
+ if ($key->type eq 'keyfile') {
+ # Promote the keyfile keyhandle to a keystore, this way we share the
+ # same gpg-agent and can get any password cached.
+ my $gpg_home = File::Temp->newdir('dpkg-sign.XXXXXXXX', TMPDIR => 1);
+
+ push @exec, '--homedir', $gpg_home;
+ $self->_gpg_exec(@exec, qw(--quiet --no-tty --batch --import), $key->handle);
+ $key->set('keystore', $gpg_home);
+ } elsif ($key->type eq 'keystore') {
+ push @exec, '--homedir', $key->handle;
+ } else {
+ push @exec, '--local-user', $key->handle;
+ }
+ push @exec, '--output', $inlinesigned;
+
+ my $rc = $self->_gpg_exec(@exec, '--clearsign', $data);
+ return OPENPGP_KEY_CANNOT_SIGN if $rc;
+ return OPENPGP_OK;
+}
+
+1;
diff --git a/scripts/Dpkg/OpenPGP/Backend/SOP.pm b/scripts/Dpkg/OpenPGP/Backend/SOP.pm
new file mode 100644
index 0000000..1c5073b
--- /dev/null
+++ b/scripts/Dpkg/OpenPGP/Backend/SOP.pm
@@ -0,0 +1,108 @@
+# Copyright © 2021-2022 Guillem Jover <guillem@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::OpenPGP::Backend::SOP;
+
+use strict;
+use warnings;
+
+our $VERSION = '0.01';
+
+use POSIX qw(:sys_wait_h);
+
+use Dpkg::ErrorHandling;
+use Dpkg::IPC;
+use Dpkg::OpenPGP::ErrorCodes;
+
+use parent qw(Dpkg::OpenPGP::Backend);
+
+# - Once "gosop" implements inline-verify and inline-sign, add as alternative.
+# Ref: https://github.com/ProtonMail/gosop/issues/6
+# - Once "hop" implements the new SOP draft, add as alternative.
+# Ref: https://salsa.debian.org/clint/hopenpgp-tools/-/issues/4
+# - Once the SOP MR !23 is finalized and merged, implement a way to select
+# whether the SOP instance supports the expected draft.
+# Ref: https://gitlab.com/dkg/openpgp-stateless-cli/-/merge_requests/23
+# - Once the SOP issue #42 is resolved we can perhaps remove the alternative
+# dependencies and commands to check?
+# Ref: https://gitlab.com/dkg/openpgp-stateless-cli/-/issues/42
+
+sub DEFAULT_CMD {
+ return [ qw(sqop pgpainless-cli) ];
+}
+
+sub _sop_exec
+{
+ my ($self, $io, @exec) = @_;
+
+ return OPENPGP_MISSING_CMD unless $self->{cmd};
+
+ $io->{out} //= '/dev/null';
+ my $stderr;
+ spawn(exec => [ $self->{cmd}, @exec ],
+ wait_child => 1, nocheck => 1, timeout => 10,
+ from_file => $io->{in}, to_file => $io->{out},
+ error_to_string => \$stderr);
+ if (WIFEXITED($?)) {
+ my $status = WEXITSTATUS($?);
+ print { *STDERR } "$stderr" if $status;
+ return $status;
+ } else {
+ subprocerr("$self->{cmd} @exec");
+ }
+}
+
+sub armor
+{
+ my ($self, $type, $in, $out) = @_;
+
+ # We ignore the $type, and let "sop" handle this automatically.
+ return $self->_sop_exec({ in => $in, out => $out }, 'armor');
+}
+
+sub dearmor
+{
+ my ($self, $type, $in, $out) = @_;
+
+ # We ignore the $type, and let "sop" handle this automatically.
+ return $self->_sop_exec({ in => $in, out => $out }, 'dearmor');
+}
+
+sub inline_verify
+{
+ my ($self, $inlinesigned, $data, @certs) = @_;
+
+ return $self->_sop_exec({ in => $inlinesigned, out => $data },
+ 'inline-verify', @certs);
+}
+
+sub verify
+{
+ my ($self, $data, $sig, @certs) = @_;
+
+ return $self->_sop_exec({ in => $data }, 'verify', $sig, @certs);
+}
+
+sub inline_sign
+{
+ my ($self, $data, $inlinesigned, $key) = @_;
+
+ return OPENPGP_NEEDS_KEYSTORE if $key->needs_keystore();
+
+ return $self->_sop_exec({ in => $data, out => $inlinesigned },
+ qw(inline-sign --as clearsigned --), $key->handle);
+}
+
+1;
diff --git a/scripts/Dpkg/OpenPGP/Backend/Sequoia.pm b/scripts/Dpkg/OpenPGP/Backend/Sequoia.pm
new file mode 100644
index 0000000..5313393
--- /dev/null
+++ b/scripts/Dpkg/OpenPGP/Backend/Sequoia.pm
@@ -0,0 +1,123 @@
+# Copyright © 2021-2022 Guillem Jover <guillem@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::OpenPGP::Backend::Sequoia;
+
+use strict;
+use warnings;
+
+our $VERSION = '0.01';
+
+use POSIX qw(:sys_wait_h);
+
+use Dpkg::ErrorHandling;
+use Dpkg::IPC;
+use Dpkg::OpenPGP::ErrorCodes;
+
+use parent qw(Dpkg::OpenPGP::Backend);
+
+sub DEFAULT_CMD {
+ return [ qw(sq) ];
+}
+
+sub _sq_exec
+{
+ my ($self, @exec) = @_;
+
+ my ($stdout, $stderr);
+ spawn(exec => [ $self->{cmd}, @exec ],
+ wait_child => 1, nocheck => 1, timeout => 10,
+ to_string => \$stdout, error_to_string => \$stderr);
+ if (WIFEXITED($?)) {
+ my $status = WEXITSTATUS($?);
+ print { *STDERR } "$stdout$stderr" if $status;
+ return $status;
+ } else {
+ subprocerr("$self->{cmd} @exec");
+ }
+}
+
+sub armor
+{
+ my ($self, $type, $in, $out) = @_;
+
+ return OPENPGP_MISSING_CMD unless $self->{cmd};
+
+ # We ignore the $type, and let "sq" handle this automatically.
+ my $rc = $self->_sq_exec(qw(armor --output), $out, $in);
+ return OPENPGP_BAD_DATA if $rc;
+ return OPENPGP_OK;
+}
+
+sub dearmor
+{
+ my ($self, $type, $in, $out) = @_;
+
+ return OPENPGP_MISSING_CMD unless $self->{cmd};
+
+ # We ignore the $type, and let "sq" handle this automatically.
+ my $rc = $self->_sq_exec(qw(dearmor --output), $out, $in);
+ return OPENPGP_BAD_DATA if $rc;
+ return OPENPGP_OK;
+}
+
+sub inline_verify
+{
+ my ($self, $inlinesigned, $data, @certs) = @_;
+
+ return OPENPGP_MISSING_CMD unless $self->{cmd};
+
+ my @opts;
+ push @opts, map { ('--signer-cert', $_) } @certs;
+ push @opts, '--output', $data if defined $data;
+
+ my $rc = $self->_sq_exec(qw(verify), @opts, $inlinesigned);
+ return OPENPGP_NO_SIG if $rc;
+ return OPENPGP_OK;
+}
+
+sub verify
+{
+ my ($self, $data, $sig, @certs) = @_;
+
+ return OPENPGP_MISSING_CMD unless $self->{cmd};
+
+ my @opts;
+ push @opts, map { ('--signer-cert', $_) } @certs;
+ push @opts, '--detached', $sig;
+
+ my $rc = $self->_sq_exec(qw(verify), @opts, $data);
+ return OPENPGP_NO_SIG if $rc;
+ return OPENPGP_OK;
+}
+
+sub inline_sign
+{
+ my ($self, $data, $inlinesigned, $key) = @_;
+
+ return OPENPGP_MISSING_CMD unless $self->{cmd};
+ return OPENPGP_NEEDS_KEYSTORE if $key->needs_keystore();
+
+ my @opts;
+ push @opts, '--cleartext-signature';
+ push @opts, '--signer-key', $key->handle;
+ push @opts, '--output', $inlinesigned;
+
+ my $rc = $self->_sq_exec('sign', @opts, $data);
+ return OPENPGP_KEY_CANNOT_SIGN if $rc;
+ return OPENPGP_OK;
+}
+
+1;
diff --git a/scripts/Dpkg/OpenPGP/ErrorCodes.pm b/scripts/Dpkg/OpenPGP/ErrorCodes.pm
new file mode 100644
index 0000000..67bd39b
--- /dev/null
+++ b/scripts/Dpkg/OpenPGP/ErrorCodes.pm
@@ -0,0 +1,93 @@
+# Copyright © 2022 Guillem Jover <guillem@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::OpenPGP::ErrorCodes;
+
+use strict;
+use warnings;
+
+our $VERSION = '0.01';
+our @EXPORT = qw(
+ OPENPGP_OK
+ OPENPGP_NO_SIG
+ OPENPGP_MISSING_ARG
+ OPENPGP_UNSUPPORTED_OPTION
+ OPENPGP_BAD_DATA
+ OPENPGP_EXPECTED_TEXT
+ OPENPGP_OUTPUT_EXISTS
+ OPENPGP_MISSING_INPUT
+ OPENPGP_KEY_IS_PROTECTED
+ OPENPGP_UNSUPPORTED_SUBCMD
+ OPENPGP_KEY_CANNOT_SIGN
+
+ OPENPGP_MISSING_CMD
+ OPENPGP_NEEDS_KEYSTORE
+
+ openpgp_errorcode_to_string
+);
+
+use Exporter qw(import);
+
+use Dpkg::Gettext;
+
+# Error codes based on
+# https://ietf.org/archive/id/draft-dkg-openpgp-stateless-cli-04.html#section-6
+#
+# Local error codes use a negative number, as that should not conflict with
+# the SOP exit codes.
+
+use constant {
+ OPENPGP_OK => 0,
+ OPENPGP_NO_SIG => 3,
+ OPENPGP_MISSING_ARG => 19,
+ OPENPGP_UNSUPPORTED_OPTION => 37,
+ OPENPGP_BAD_DATA => 41,
+ OPENPGP_EXPECTED_TEXT => 53,
+ OPENPGP_OUTPUT_EXISTS => 59,
+ OPENPGP_MISSING_INPUT => 61,
+ OPENPGP_KEY_IS_PROTECTED => 67,
+ OPENPGP_UNSUPPORTED_SUBCMD => 69,
+ OPENPGP_KEY_CANNOT_SIGN => 79,
+
+ OPENPGP_MISSING_CMD => -1,
+ OPENPGP_NEEDS_KEYSTORE => -2,
+};
+
+my %code2error = (
+ OPENPGP_OK() => N_('success'),
+ OPENPGP_NO_SIG() => N_('no acceptable signature found'),
+ OPENPGP_MISSING_ARG() => N_('missing required argument'),
+ OPENPGP_UNSUPPORTED_OPTION() => N_('unsupported option'),
+ OPENPGP_BAD_DATA() => N_('invalid data type'),
+ OPENPGP_EXPECTED_TEXT() => N_('non-text input where text expected'),
+ OPENPGP_OUTPUT_EXISTS() => N_('output file already exists'),
+ OPENPGP_MISSING_INPUT() => N_('input file does not exist'),
+ OPENPGP_KEY_IS_PROTECTED() => N_('cannot unlock password-protected key'),
+ OPENPGP_UNSUPPORTED_SUBCMD() => N_('unsupported subcommand'),
+ OPENPGP_KEY_CANNOT_SIGN() => N_('key is not signature-capable'),
+
+ OPENPGP_MISSING_CMD() => N_('missing OpenPGP implementation'),
+ OPENPGP_NEEDS_KEYSTORE() => N_('specified key needs a keystore'),
+);
+
+sub openpgp_errorcode_to_string
+{
+ my $code = shift;
+
+ return gettext($code2error{$code}) if exists $code2error{$code};
+ return sprintf g_('error code %d'), $code;
+}
+
+1;
diff --git a/scripts/Dpkg/OpenPGP/KeyHandle.pm b/scripts/Dpkg/OpenPGP/KeyHandle.pm
new file mode 100644
index 0000000..89ae448
--- /dev/null
+++ b/scripts/Dpkg/OpenPGP/KeyHandle.pm
@@ -0,0 +1,103 @@
+# Copyright © 2022 Guillem Jover <guillem@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::OpenPGP::KeyHandle;
+
+use strict;
+use warnings;
+
+our $VERSION = '0.01';
+
+use Carp;
+use List::Util qw(any none);
+
+sub new {
+ my ($this, %opts) = @_;
+ my $class = ref($this) || $this;
+
+ my $self = {
+ type => $opts{type} // 'auto',
+ handle => $opts{handle},
+ };
+ bless $self, $class;
+
+ $self->_sanitize();
+
+ return $self;
+}
+
+my $keyid_regex = qr/^(?:0x)?([[:xdigit:]]+)$/;
+
+sub _sanitize {
+ my ($self) = shift;
+
+ my $type = $self->{type};
+ if ($type eq 'auto') {
+ if (-e $self->{handle}) {
+ $type = 'keyfile';
+ } else {
+ $type = 'autoid';
+ }
+ }
+
+ if ($type eq 'autoid') {
+ if ($self->{handle} =~ m/$keyid_regex/) {
+ $self->{handle} = $1;
+ $type = 'keyid';
+ } else {
+ $type = 'userid';
+ }
+ $self->{type} = $type;
+ } elsif ($type eq 'keyid') {
+ if ($self->{handle} =~ m/$keyid_regex/) {
+ $self->{handle} = $1;
+ }
+ }
+
+ if (none { $type eq $_ } qw(userid keyid keyfile keystore)) {
+ croak "unknown type parameter value $type";
+ }
+
+ return;
+}
+
+sub needs_keystore {
+ my $self = shift;
+
+ return any { $self->{type} eq $_ } qw(keyid userid);
+}
+
+sub set {
+ my ($self, $type, $handle) = @_;
+
+ $self->{type} = $type;
+ $self->{handle} = $handle;
+
+ $self->_sanitize();
+}
+
+sub type {
+ my $self = shift;
+
+ return $self->{type};
+}
+
+sub handle {
+ my $self = shift;
+
+ return $self->{handle};
+}
+
+1;
diff --git a/scripts/Dpkg/Package.pm b/scripts/Dpkg/Package.pm
new file mode 100644
index 0000000..e49c01b
--- /dev/null
+++ b/scripts/Dpkg/Package.pm
@@ -0,0 +1,47 @@
+# Copyright © 2006 Frank Lichtenheld <djpig@debian.org>
+# Copyright © 2007,2012 Guillem Jover <guillem@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::Package;
+
+use strict;
+use warnings;
+
+our $VERSION = '0.01';
+our @EXPORT = qw(
+ pkg_name_is_illegal
+);
+
+use Exporter qw(import);
+
+use Dpkg::Gettext;
+
+sub pkg_name_is_illegal($) {
+ my $name = shift // '';
+
+ if ($name eq '') {
+ return g_('may not be empty string');
+ }
+ if ($name =~ m/[^-+.0-9a-z]/op) {
+ return sprintf(g_("character '%s' not allowed"), ${^MATCH});
+ }
+ if ($name !~ m/^[0-9a-z]/o) {
+ return g_('must start with an alphanumeric character');
+ }
+
+ return;
+}
+
+1;
diff --git a/scripts/Dpkg/Path.pm b/scripts/Dpkg/Path.pm
new file mode 100644
index 0000000..e9dff5c
--- /dev/null
+++ b/scripts/Dpkg/Path.pm
@@ -0,0 +1,354 @@
+# Copyright © 2007-2011 Raphaël Hertzog <hertzog@debian.org>
+# Copyright © 2011 Linaro Limited
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::Path;
+
+use strict;
+use warnings;
+
+our $VERSION = '1.05';
+our @EXPORT_OK = qw(
+ canonpath
+ resolve_symlink
+ check_files_are_the_same
+ check_directory_traversal
+ find_command
+ find_build_file
+ get_control_path
+ get_pkg_root_dir
+ guess_pkg_root_dir
+ relative_to_pkg_root
+);
+
+use Exporter qw(import);
+use Errno qw(ENOENT);
+use File::Spec;
+use File::Find;
+use Cwd qw(realpath);
+
+use Dpkg::ErrorHandling;
+use Dpkg::Gettext;
+use Dpkg::Arch qw(get_host_arch debarch_to_debtuple);
+use Dpkg::IPC;
+
+=encoding utf8
+
+=head1 NAME
+
+Dpkg::Path - some common path handling functions
+
+=head1 DESCRIPTION
+
+It provides some functions to handle various path.
+
+=head1 FUNCTIONS
+
+=over 8
+
+=item get_pkg_root_dir($file)
+
+This function will scan upwards the hierarchy of directory to find out
+the directory which contains the "DEBIAN" sub-directory and it will return
+its path. This directory is the root directory of a package being built.
+
+If no DEBIAN subdirectory is found, it will return undef.
+
+=cut
+
+sub get_pkg_root_dir($) {
+ my $file = shift;
+ $file =~ s{/+$}{};
+ $file =~ s{/+[^/]+$}{} if not -d $file;
+ while ($file) {
+ return $file if -d "$file/DEBIAN";
+ last if $file !~ m{/};
+ $file =~ s{/+[^/]+$}{};
+ }
+ return;
+}
+
+=item relative_to_pkg_root($file)
+
+Returns the filename relative to get_pkg_root_dir($file).
+
+=cut
+
+sub relative_to_pkg_root($) {
+ my $file = shift;
+ my $pkg_root = get_pkg_root_dir($file);
+ if (defined $pkg_root) {
+ $pkg_root .= '/';
+ return $file if ($file =~ s/^\Q$pkg_root\E//);
+ }
+ return;
+}
+
+=item guess_pkg_root_dir($file)
+
+This function tries to guess the root directory of the package build tree.
+It will first use get_pkg_root_dir(), but it will fallback to a more
+imprecise check: namely it will use the parent directory that is a
+sub-directory of the debian directory.
+
+It can still return undef if a file outside of the debian sub-directory is
+provided.
+
+=cut
+
+sub guess_pkg_root_dir($) {
+ my $file = shift;
+ my $root = get_pkg_root_dir($file);
+ return $root if defined $root;
+
+ $file =~ s{/+$}{};
+ $file =~ s{/+[^/]+$}{} if not -d $file;
+ my $parent = $file;
+ while ($file) {
+ $parent =~ s{/+[^/]+$}{};
+ last if not -d $parent;
+ return $file if check_files_are_the_same('debian', $parent);
+ $file = $parent;
+ last if $file !~ m{/};
+ }
+ return;
+}
+
+=item check_files_are_the_same($file1, $file2, $resolve_symlink)
+
+This function verifies that both files are the same by checking that the device
+numbers and the inode numbers returned by stat()/lstat() are the same. If
+$resolve_symlink is true then stat() is used, otherwise lstat() is used.
+
+=cut
+
+sub check_files_are_the_same($$;$) {
+ my ($file1, $file2, $resolve_symlink) = @_;
+
+ return 1 if $file1 eq $file2;
+ return 0 if ((! -e $file1) || (! -e $file2));
+ my (@stat1, @stat2);
+ if ($resolve_symlink) {
+ @stat1 = stat($file1);
+ @stat2 = stat($file2);
+ } else {
+ @stat1 = lstat($file1);
+ @stat2 = lstat($file2);
+ }
+ my $result = ($stat1[0] == $stat2[0]) && ($stat1[1] == $stat2[1]);
+ return $result;
+}
+
+
+=item canonpath($file)
+
+This function returns a cleaned path. It simplifies double //, and remove
+/./ and /../ intelligently. For /../ it simplifies the path only if the
+previous element is not a symlink. Thus it should only be used on real
+filenames.
+
+=cut
+
+sub canonpath($) {
+ my $path = shift;
+ $path = File::Spec->canonpath($path);
+ my ($v, $dirs, $file) = File::Spec->splitpath($path);
+ my @dirs = File::Spec->splitdir($dirs);
+ my @new;
+ foreach my $d (@dirs) {
+ if ($d eq '..') {
+ if (scalar(@new) > 0 and $new[-1] ne '..') {
+ next if $new[-1] eq ''; # Root directory has no parent
+ my $parent = File::Spec->catpath($v,
+ File::Spec->catdir(@new), '');
+ if (not -l $parent) {
+ pop @new;
+ } else {
+ push @new, $d;
+ }
+ } else {
+ push @new, $d;
+ }
+ } else {
+ push @new, $d;
+ }
+ }
+ return File::Spec->catpath($v, File::Spec->catdir(@new), $file);
+}
+
+=item $newpath = resolve_symlink($symlink)
+
+Return the filename of the file pointed by the symlink. The new name is
+canonicalized by canonpath().
+
+=cut
+
+sub resolve_symlink($) {
+ my $symlink = shift;
+ my $content = readlink($symlink);
+ return unless defined $content;
+ if (File::Spec->file_name_is_absolute($content)) {
+ return canonpath($content);
+ } else {
+ my ($link_v, $link_d, $link_f) = File::Spec->splitpath($symlink);
+ my ($cont_v, $cont_d, $cont_f) = File::Spec->splitpath($content);
+ my $new = File::Spec->catpath($link_v, $link_d . '/' . $cont_d, $cont_f);
+ return canonpath($new);
+ }
+}
+
+=item check_directory_traversal($basedir, $dir)
+
+This function verifies that the directory $dir does not contain any symlink
+that goes beyond $basedir (which should be either equal or a parent of $dir).
+
+=cut
+
+sub check_directory_traversal {
+ my ($basedir, $dir) = @_;
+
+ my $canon_basedir = realpath($basedir);
+ # On Solaris /dev/null points to /devices/pseudo/mm@0:null.
+ my $canon_devnull = realpath('/dev/null');
+ my $check_symlinks = sub {
+ my $canon_pathname = realpath($_);
+ if (not defined $canon_pathname) {
+ return if $! == ENOENT;
+
+ syserr(g_("pathname '%s' cannot be canonicalized"), $_);
+ }
+ return if $canon_pathname eq $canon_devnull;
+ return if $canon_pathname eq $canon_basedir;
+ return if $canon_pathname =~ m{^\Q$canon_basedir/\E};
+
+ error(g_("pathname '%s' points outside source root (to '%s')"),
+ $_, $canon_pathname);
+ };
+
+ find({
+ wanted => $check_symlinks,
+ no_chdir => 1,
+ follow => 1,
+ follow_skip => 2,
+ }, $dir);
+
+ return;
+}
+
+=item $cmdpath = find_command($command)
+
+Return the path of the command if defined and available on an absolute or
+relative path or on the $PATH, undef otherwise.
+
+=cut
+
+sub find_command($) {
+ my $cmd = shift;
+
+ return if not $cmd;
+ if ($cmd =~ m{/}) {
+ return "$cmd" if -x "$cmd";
+ } else {
+ foreach my $dir (split(/:/, $ENV{PATH})) {
+ return "$dir/$cmd" if -x "$dir/$cmd";
+ }
+ }
+ return;
+}
+
+=item $control_file = get_control_path($pkg, $filetype)
+
+Return the path of the control file of type $filetype for the given
+package.
+
+=item @control_files = get_control_path($pkg)
+
+Return the path of all available control files for the given package.
+
+=cut
+
+sub get_control_path($;$) {
+ my ($pkg, $filetype) = @_;
+ my $control_file;
+ my @exec = ('dpkg-query', '--control-path', $pkg);
+ push @exec, $filetype if defined $filetype;
+ spawn(exec => \@exec, wait_child => 1, to_string => \$control_file);
+ chomp($control_file);
+ if (defined $filetype) {
+ return if $control_file eq '';
+ return $control_file;
+ }
+ return () if $control_file eq '';
+ return split(/\n/, $control_file);
+}
+
+=item $file = find_build_file($basename)
+
+Selects the right variant of the given file: the arch-specific variant
+("$basename.$arch") has priority over the OS-specific variant
+("$basename.$os") which has priority over the default variant
+("$basename"). If none of the files exists, then it returns undef.
+
+=item @files = find_build_file($basename)
+
+Return the available variants of the given file. Returns an empty
+list if none of the files exists.
+
+=cut
+
+sub find_build_file($) {
+ my $base = shift;
+ my $host_arch = get_host_arch();
+ my ($abi, $libc, $host_os, $cpu) = debarch_to_debtuple($host_arch);
+ my @files;
+ foreach my $f ("$base.$host_arch", "$base.$host_os", "$base") {
+ push @files, $f if -f $f;
+ }
+ return @files if wantarray;
+ return $files[0] if scalar @files;
+ return;
+}
+
+=back
+
+=head1 CHANGES
+
+=head2 Version 1.05 (dpkg 1.20.4)
+
+New function: check_directory_traversal().
+
+=head2 Version 1.04 (dpkg 1.17.11)
+
+Update semantics: find_command() now handles an empty or undef argument.
+
+=head2 Version 1.03 (dpkg 1.16.1)
+
+New function: find_build_file()
+
+=head2 Version 1.02 (dpkg 1.16.0)
+
+New function: get_control_path()
+
+=head2 Version 1.01 (dpkg 1.15.8)
+
+New function: find_command()
+
+=head2 Version 1.00 (dpkg 1.15.6)
+
+Mark the module as public.
+
+=cut
+
+1;
diff --git a/scripts/Dpkg/Shlibs.pm b/scripts/Dpkg/Shlibs.pm
new file mode 100644
index 0000000..22fecc4
--- /dev/null
+++ b/scripts/Dpkg/Shlibs.pm
@@ -0,0 +1,184 @@
+# Copyright © 2007, 2016 Raphaël Hertzog <hertzog@debian.org>
+# Copyright © 2007-2008, 2012-2015 Guillem Jover <guillem@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::Shlibs;
+
+use strict;
+use warnings;
+use feature qw(state);
+
+our $VERSION = '0.03';
+our @EXPORT_OK = qw(
+ blank_library_paths
+ setup_library_paths
+ get_library_paths
+ add_library_dir
+ find_library
+);
+
+use Exporter qw(import);
+use List::Util qw(none);
+use File::Spec;
+
+use Dpkg::Gettext;
+use Dpkg::ErrorHandling;
+use Dpkg::Shlibs::Objdump;
+use Dpkg::Path qw(resolve_symlink canonpath);
+use Dpkg::Arch qw(get_build_arch get_host_arch :mappers);
+
+use constant DEFAULT_LIBRARY_PATH =>
+ qw(/lib /usr/lib);
+# XXX: Deprecated multilib paths.
+use constant DEFAULT_MULTILIB_PATH =>
+ qw(/lib32 /usr/lib32 /lib64 /usr/lib64);
+
+# Library paths set by the user.
+my @custom_librarypaths;
+# Library paths from the system.
+my @system_librarypaths;
+my $librarypaths_init;
+
+sub parse_ldso_conf {
+ my $file = shift;
+ state %visited;
+ local $_;
+
+ open my $fh, '<', $file or syserr(g_('cannot open %s'), $file);
+ $visited{$file}++;
+ while (<$fh>) {
+ next if /^\s*$/;
+ chomp;
+ s{/+$}{};
+ if (/^include\s+(\S.*\S)\s*$/) {
+ foreach my $include (glob($1)) {
+ parse_ldso_conf($include) if -e $include
+ && !$visited{$include};
+ }
+ } elsif (m{^\s*/}) {
+ s/^\s+//;
+ my $libdir = $_;
+ if (none { $_ eq $libdir } (@custom_librarypaths, @system_librarypaths)) {
+ push @system_librarypaths, $libdir;
+ }
+ }
+ }
+ close $fh;
+}
+
+sub blank_library_paths {
+ @custom_librarypaths = ();
+ @system_librarypaths = ();
+ $librarypaths_init = 1;
+}
+
+sub setup_library_paths {
+ @custom_librarypaths = ();
+ @system_librarypaths = ();
+
+ # XXX: Deprecated. Update library paths with LD_LIBRARY_PATH.
+ if ($ENV{LD_LIBRARY_PATH}) {
+ require Cwd;
+ my $cwd = Cwd::getcwd;
+
+ foreach my $path (split /:/, $ENV{LD_LIBRARY_PATH}) {
+ $path =~ s{/+$}{};
+
+ my $realpath = Cwd::realpath($path);
+ next unless defined $realpath;
+ if ($realpath =~ m/^\Q$cwd\E/) {
+ warning(g_('deprecated use of LD_LIBRARY_PATH with private ' .
+ 'library directory which interferes with ' .
+ 'cross-building, please use -l option instead'));
+ }
+
+ # XXX: This should be added to @custom_librarypaths, but as this
+ # is deprecated we do not care as the code will go away.
+ push @system_librarypaths, $path;
+ }
+ }
+
+ # Adjust set of directories to consider when we're in a situation of a
+ # cross-build or a build of a cross-compiler.
+ my $multiarch;
+
+ # Detect cross compiler builds.
+ if ($ENV{DEB_TARGET_GNU_TYPE} and
+ ($ENV{DEB_TARGET_GNU_TYPE} ne $ENV{DEB_BUILD_GNU_TYPE}))
+ {
+ $multiarch = gnutriplet_to_multiarch($ENV{DEB_TARGET_GNU_TYPE});
+ }
+ # Host for normal cross builds.
+ if (get_build_arch() ne get_host_arch()) {
+ $multiarch = debarch_to_multiarch(get_host_arch());
+ }
+ # Define list of directories containing crossbuilt libraries.
+ if ($multiarch) {
+ push @system_librarypaths, "/lib/$multiarch", "/usr/lib/$multiarch";
+ }
+
+ push @system_librarypaths, DEFAULT_LIBRARY_PATH;
+
+ # Update library paths with ld.so config.
+ parse_ldso_conf('/etc/ld.so.conf') if -e '/etc/ld.so.conf';
+
+ push @system_librarypaths, DEFAULT_MULTILIB_PATH;
+
+ $librarypaths_init = 1;
+}
+
+sub add_library_dir {
+ my $dir = shift;
+
+ setup_library_paths() if not $librarypaths_init;
+
+ push @custom_librarypaths, $dir;
+}
+
+sub get_library_paths {
+ setup_library_paths() if not $librarypaths_init;
+
+ return (@custom_librarypaths, @system_librarypaths);
+}
+
+# find_library ($soname, \@rpath, $format, $root)
+sub find_library {
+ my ($lib, $rpath, $format, $root) = @_;
+
+ setup_library_paths() if not $librarypaths_init;
+
+ my @librarypaths = (@{$rpath}, @custom_librarypaths, @system_librarypaths);
+ my @libs;
+
+ $root //= '';
+ $root =~ s{/+$}{};
+ foreach my $dir (@librarypaths) {
+ my $checkdir = "$root$dir";
+ if (-e "$checkdir/$lib") {
+ my $libformat = Dpkg::Shlibs::Objdump::get_format("$checkdir/$lib");
+ if (not defined $libformat) {
+ warning(g_("unknown executable format in file '%s'"), "$checkdir/$lib");
+ } elsif ($format eq $libformat) {
+ push @libs, canonpath("$checkdir/$lib");
+ } else {
+ debug(1, "Skipping lib $checkdir/$lib, libabi=0x%s != objabi=0x%s",
+ unpack('H*', $libformat), unpack('H*', $format));
+ }
+ }
+ }
+ return @libs;
+}
+
+1;
diff --git a/scripts/Dpkg/Shlibs/Cppfilt.pm b/scripts/Dpkg/Shlibs/Cppfilt.pm
new file mode 100644
index 0000000..c2a4756
--- /dev/null
+++ b/scripts/Dpkg/Shlibs/Cppfilt.pm
@@ -0,0 +1,120 @@
+# Copyright © 2009-2010 Modestas Vainius <modax@debian.org>
+# Copyright © 2010, 2012-2015 Guillem Jover <guillem@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::Shlibs::Cppfilt;
+
+use strict;
+use warnings;
+
+our $VERSION = '0.01';
+our @EXPORT = qw(
+ cppfilt_demangle_cpp
+);
+our @EXPORT_OK = qw(
+ cppfilt_demangle
+);
+
+use Exporter qw(import);
+
+use Dpkg::ErrorHandling;
+use Dpkg::IPC;
+
+# A hash of 'objects' referring to preforked c++filt processes for the distinct
+# demangling types.
+my %cppfilts;
+
+sub get_cppfilt {
+ my $type = shift || 'auto';
+
+ # Fork c++filt process for demangling $type unless it is forked already.
+ # Keeping c++filt running improves performance a lot.
+ my $filt;
+ if (exists $cppfilts{$type}) {
+ $filt = $cppfilts{$type};
+ } else {
+ $filt = {
+ from => undef,
+ to => undef,
+ last_symbol => '',
+ last_result => '',
+ };
+ $filt->{pid} = spawn(exec => [ 'c++filt', "--format=$type" ],
+ from_pipe => \$filt->{from},
+ to_pipe => \$filt->{to});
+ syserr(g_('unable to execute %s'), 'c++filt')
+ unless defined $filt->{from};
+ $filt->{from}->autoflush(1);
+
+ $cppfilts{$type} = $filt;
+ }
+ return $filt;
+}
+
+# Demangle the given $symbol using demangler for the specified $type (defaults
+# to 'auto') . Extraneous characters trailing after a mangled name are kept
+# intact. If neither whole $symbol nor portion of it could be demangled, undef
+# is returned.
+sub cppfilt_demangle {
+ my ($symbol, $type) = @_;
+
+ # Start or get c++filt 'object' for the requested type.
+ my $filt = get_cppfilt($type);
+
+ # Remember the last result. Such a local optimization is cheap and useful
+ # when sequential pattern matching is performed.
+ if ($filt->{last_symbol} ne $symbol) {
+ # This write/read operation should not deadlock because c++filt flushes
+ # output buffer on LF or each invalid character.
+ print { $filt->{from} } $symbol, "\n";
+ my $demangled = readline($filt->{to});
+ chop $demangled;
+
+ # If the symbol was not demangled, return undef
+ $demangled = undef if $symbol eq $demangled;
+
+ # Remember the last result
+ $filt->{last_symbol} = $symbol;
+ $filt->{last_result} = $demangled;
+ }
+ return $filt->{last_result};
+}
+
+sub cppfilt_demangle_cpp {
+ my $symbol = shift;
+ return cppfilt_demangle($symbol, 'auto');
+}
+
+sub terminate_cppfilts {
+ foreach my $type (keys %cppfilts) {
+ next if not defined $cppfilts{$type}{pid};
+ close $cppfilts{$type}{from};
+ close $cppfilts{$type}{to};
+ wait_child($cppfilts{$type}{pid}, cmdline => 'c++filt',
+ nocheck => 1,
+ timeout => 5);
+ delete $cppfilts{$type};
+ }
+}
+
+# Close/terminate running c++filt process(es)
+END {
+ # Make sure exitcode is not changed (by wait_child)
+ my $exitcode = $?;
+ terminate_cppfilts();
+ $? = $exitcode;
+}
+
+1;
diff --git a/scripts/Dpkg/Shlibs/Objdump.pm b/scripts/Dpkg/Shlibs/Objdump.pm
new file mode 100644
index 0000000..c9af965
--- /dev/null
+++ b/scripts/Dpkg/Shlibs/Objdump.pm
@@ -0,0 +1,582 @@
+# Copyright © 2007-2010 Raphaël Hertzog <hertzog@debian.org>
+# Copyright © 2007-2009,2012-2015,2017-2018 Guillem Jover <guillem@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::Shlibs::Objdump;
+
+use strict;
+use warnings;
+use feature qw(state);
+
+our $VERSION = '0.01';
+
+use Dpkg::Gettext;
+use Dpkg::ErrorHandling;
+
+sub new {
+ my $this = shift;
+ my $class = ref($this) || $this;
+ my $self = { objects => {} };
+ bless $self, $class;
+ return $self;
+}
+
+sub add_object {
+ my ($self, $obj) = @_;
+ my $id = $obj->get_id;
+ if ($id) {
+ $self->{objects}{$id} = $obj;
+ }
+ return $id;
+}
+
+sub analyze {
+ my ($self, $file) = @_;
+ my $obj = Dpkg::Shlibs::Objdump::Object->new($file);
+
+ return $self->add_object($obj);
+}
+
+sub locate_symbol {
+ my ($self, $name) = @_;
+ foreach my $obj (values %{$self->{objects}}) {
+ my $sym = $obj->get_symbol($name);
+ if (defined($sym) && $sym->{defined}) {
+ return $sym;
+ }
+ }
+ return;
+}
+
+sub get_object {
+ my ($self, $objid) = @_;
+ if ($self->has_object($objid)) {
+ return $self->{objects}{$objid};
+ }
+ return;
+}
+
+sub has_object {
+ my ($self, $objid) = @_;
+ return exists $self->{objects}{$objid};
+}
+
+use constant {
+ # ELF Class.
+ ELF_BITS_NONE => 0,
+ ELF_BITS_32 => 1,
+ ELF_BITS_64 => 2,
+
+ # ELF Data encoding.
+ ELF_ORDER_NONE => 0,
+ ELF_ORDER_2LSB => 1,
+ ELF_ORDER_2MSB => 2,
+
+ # ELF Machine.
+ EM_SPARC => 2,
+ EM_MIPS => 8,
+ EM_SPARC64_OLD => 11,
+ EM_SPARC32PLUS => 18,
+ EM_PPC64 => 21,
+ EM_S390 => 22,
+ EM_ARM => 40,
+ EM_ALPHA_OLD => 41,
+ EM_SH => 42,
+ EM_SPARC64 => 43,
+ EM_IA64 => 50,
+ EM_AVR => 83,
+ EM_M32R => 88,
+ EM_MN10300 => 89,
+ EM_MN10200 => 90,
+ EM_OR1K => 92,
+ EM_XTENSA => 94,
+ EM_MICROBLAZE => 189,
+ EM_ARCV2 => 195,
+ EM_LOONGARCH => 258,
+ EM_AVR_OLD => 0x1057,
+ EM_OR1K_OLD => 0x8472,
+ EM_ALPHA => 0x9026,
+ EM_M32R_CYGNUS => 0x9041,
+ EM_S390_OLD => 0xa390,
+ EM_XTENSA_OLD => 0xabc7,
+ EM_MICROBLAZE_OLD => 0xbaab,
+ EM_MN10300_CYGNUS => 0xbeef,
+ EM_MN10200_CYGNUS => 0xdead,
+
+ # ELF Version.
+ EV_NONE => 0,
+ EV_CURRENT => 1,
+
+ # ELF Flags (might influence the ABI).
+ EF_ARM_ALIGN8 => 0x00000040,
+ EF_ARM_NEW_ABI => 0x00000080,
+ EF_ARM_OLD_ABI => 0x00000100,
+ EF_ARM_SOFT_FLOAT => 0x00000200,
+ EF_ARM_HARD_FLOAT => 0x00000400,
+ EF_ARM_EABI_MASK => 0xff000000,
+
+ EF_IA64_ABI64 => 0x00000010,
+
+ EF_LOONGARCH_SOFT_FLOAT => 0x00000001,
+ EF_LOONGARCH_SINGLE_FLOAT => 0x00000002,
+ EF_LOONGARCH_DOUBLE_FLOAT => 0x00000003,
+ EF_LOONGARCH_ABI_MASK => 0x00000007,
+
+ EF_MIPS_ABI2 => 0x00000020,
+ EF_MIPS_32BIT => 0x00000100,
+ EF_MIPS_FP64 => 0x00000200,
+ EF_MIPS_NAN2008 => 0x00000400,
+ EF_MIPS_ABI_MASK => 0x0000f000,
+ EF_MIPS_ARCH_MASK => 0xf0000000,
+
+ EF_PPC64_ABI64 => 0x00000003,
+
+ EF_SH_MACH_MASK => 0x0000001f,
+};
+
+# These map alternative or old machine IDs to their canonical form.
+my %elf_mach_map = (
+ EM_ALPHA_OLD() => EM_ALPHA,
+ EM_AVR_OLD() => EM_AVR,
+ EM_M32R_CYGNUS() => EM_M32R,
+ EM_MICROBLAZE_OLD() => EM_MICROBLAZE,
+ EM_MN10200_CYGNUS() => EM_MN10200,
+ EM_MN10300_CYGNUS() => EM_MN10300,
+ EM_OR1K_OLD() => EM_OR1K,
+ EM_S390_OLD() => EM_S390,
+ EM_SPARC32PLUS() => EM_SPARC,
+ EM_SPARC64_OLD() => EM_SPARC64,
+ EM_XTENSA_OLD() => EM_XTENSA,
+);
+
+# These masks will try to expose processor flags that are ABI incompatible,
+# and as such are part of defining the architecture ABI. If uncertain it is
+# always better to not mask a flag, because that preserves the historical
+# behavior, and we do not drop dependencies.
+my %elf_flags_mask = (
+ EM_IA64() => EF_IA64_ABI64,
+ EM_LOONGARCH() => EF_LOONGARCH_ABI_MASK,
+ EM_MIPS() => EF_MIPS_ABI_MASK | EF_MIPS_ABI2,
+ EM_PPC64() => EF_PPC64_ABI64,
+);
+
+sub get_format {
+ my ($file) = @_;
+ state %format;
+
+ return $format{$file} if exists $format{$file};
+
+ my $header;
+
+ open my $fh, '<', $file or syserr(g_('cannot read %s'), $file);
+ my $rc = read $fh, $header, 64;
+ if (not defined $rc) {
+ syserr(g_('cannot read %s'), $file);
+ } elsif ($rc != 64) {
+ return;
+ }
+ close $fh;
+
+ my %elf;
+
+ # Unpack the identifier field.
+ @elf{qw(magic bits endian vertype osabi verabi)} = unpack 'a4C5', $header;
+
+ return unless $elf{magic} eq "\x7fELF";
+ return unless $elf{vertype} == EV_CURRENT;
+
+ my ($elf_word, $elf_endian);
+ if ($elf{bits} == ELF_BITS_32) {
+ $elf_word = 'L';
+ } elsif ($elf{bits} == ELF_BITS_64) {
+ $elf_word = 'Q';
+ } else {
+ return;
+ }
+ if ($elf{endian} == ELF_ORDER_2LSB) {
+ $elf_endian = '<';
+ } elsif ($elf{endian} == ELF_ORDER_2MSB) {
+ $elf_endian = '>';
+ } else {
+ return;
+ }
+
+ # Unpack the endianness and size dependent fields.
+ my $tmpl = "x16(S2Lx[${elf_word}3]L)${elf_endian}";
+ @elf{qw(type mach version flags)} = unpack $tmpl, $header;
+
+ # Canonicalize the machine ID.
+ $elf{mach} = $elf_mach_map{$elf{mach}} // $elf{mach};
+
+ # Mask any processor flags that might not change the architecture ABI.
+ $elf{flags} &= $elf_flags_mask{$elf{mach}} // 0;
+
+ # Repack for easy comparison, as a big-endian byte stream, so that
+ # unpacking for output gives meaningful results.
+ $format{$file} = pack 'C2(SL)>', @elf{qw(bits endian mach flags)};
+
+ return $format{$file};
+}
+
+sub is_elf {
+ my $file = shift;
+ open(my $file_fh, '<', $file) or syserr(g_('cannot read %s'), $file);
+ my ($header, $result) = ('', 0);
+ if (read($file_fh, $header, 4) == 4) {
+ $result = 1 if ($header =~ /^\177ELF$/);
+ }
+ close($file_fh);
+ return $result;
+}
+
+package Dpkg::Shlibs::Objdump::Object;
+
+use strict;
+use warnings;
+use feature qw(state);
+
+use Dpkg::Gettext;
+use Dpkg::ErrorHandling;
+use Dpkg::Path qw(find_command);
+use Dpkg::Arch qw(debarch_to_gnutriplet get_build_arch get_host_arch);
+
+sub new {
+ my $this = shift;
+ my $file = shift // '';
+ my $class = ref($this) || $this;
+ my $self = {};
+ bless $self, $class;
+
+ $self->reset;
+ if ($file) {
+ $self->analyze($file);
+ }
+
+ return $self;
+}
+
+sub reset {
+ my $self = shift;
+
+ $self->{file} = '';
+ $self->{id} = '';
+ $self->{HASH} = '';
+ $self->{GNU_HASH} = '';
+ $self->{INTERP} = 0;
+ $self->{SONAME} = '';
+ $self->{NEEDED} = [];
+ $self->{RPATH} = [];
+ $self->{dynsyms} = {};
+ $self->{flags} = {};
+ $self->{dynrelocs} = {};
+
+ return $self;
+}
+
+sub _select_objdump {
+ # Decide which objdump to call
+ if (get_build_arch() ne get_host_arch()) {
+ my $od = debarch_to_gnutriplet(get_host_arch()) . '-objdump';
+ return $od if find_command($od);
+ }
+ return 'objdump';
+}
+
+sub analyze {
+ my ($self, $file) = @_;
+
+ $file ||= $self->{file};
+ return unless $file;
+
+ $self->reset;
+ $self->{file} = $file;
+
+ $self->{exec_abi} = Dpkg::Shlibs::Objdump::get_format($file);
+
+ if (not defined $self->{exec_abi}) {
+ warning(g_("unknown executable format in file '%s'"), $file);
+ return;
+ }
+
+ state $OBJDUMP = _select_objdump();
+ local $ENV{LC_ALL} = 'C';
+ open(my $objdump, '-|', $OBJDUMP, '-w', '-f', '-p', '-T', '-R', $file)
+ or syserr(g_('cannot fork for %s'), $OBJDUMP);
+ my $ret = $self->parse_objdump_output($objdump);
+ close($objdump);
+ return $ret;
+}
+
+sub parse_objdump_output {
+ my ($self, $fh) = @_;
+
+ my $section = 'none';
+ while (<$fh>) {
+ s/\s*$//;
+ next if length == 0;
+
+ if (/^DYNAMIC SYMBOL TABLE:/) {
+ $section = 'dynsym';
+ next;
+ } elsif (/^DYNAMIC RELOCATION RECORDS/) {
+ $section = 'dynreloc';
+ $_ = <$fh>; # Skip header
+ next;
+ } elsif (/^Dynamic Section:/) {
+ $section = 'dyninfo';
+ next;
+ } elsif (/^Program Header:/) {
+ $section = 'program';
+ next;
+ } elsif (/^Version definitions:/) {
+ $section = 'verdef';
+ next;
+ } elsif (/^Version References:/) {
+ $section = 'verref';
+ next;
+ }
+
+ if ($section eq 'dynsym') {
+ $self->parse_dynamic_symbol($_);
+ } elsif ($section eq 'dynreloc') {
+ if (/^\S+\s+(\S+)\s+(.+)$/) {
+ $self->{dynrelocs}{$2} = $1;
+ } else {
+ warning(g_("couldn't parse dynamic relocation record: %s"), $_);
+ }
+ } elsif ($section eq 'dyninfo') {
+ if (/^\s*NEEDED\s+(\S+)/) {
+ push @{$self->{NEEDED}}, $1;
+ } elsif (/^\s*SONAME\s+(\S+)/) {
+ $self->{SONAME} = $1;
+ } elsif (/^\s*HASH\s+(\S+)/) {
+ $self->{HASH} = $1;
+ } elsif (/^\s*GNU_HASH\s+(\S+)/) {
+ $self->{GNU_HASH} = $1;
+ } elsif (/^\s*RUNPATH\s+(\S+)/) {
+ # RUNPATH takes precedence over RPATH but is
+ # considered after LD_LIBRARY_PATH while RPATH
+ # is considered before (if RUNPATH is not set).
+ my $runpath = $1;
+ $self->{RPATH} = [ split /:/, $runpath ];
+ } elsif (/^\s*RPATH\s+(\S+)/) {
+ my $rpath = $1;
+ unless (scalar(@{$self->{RPATH}})) {
+ $self->{RPATH} = [ split /:/, $rpath ];
+ }
+ }
+ } elsif ($section eq 'program') {
+ if (/^\s*INTERP\s+/) {
+ $self->{INTERP} = 1;
+ }
+ } elsif ($section eq 'none') {
+ if (/^\s*.+:\s*file\s+format\s+(\S+)$/) {
+ $self->{format} = $1;
+ } elsif (/^architecture:\s*\S+,\s*flags\s*\S+:$/) {
+ # Parse 2 lines of "-f"
+ # architecture: i386, flags 0x00000112:
+ # EXEC_P, HAS_SYMS, D_PAGED
+ # start address 0x08049b50
+ $_ = <$fh>;
+ chomp;
+ $self->{flags}{$_} = 1 foreach (split(/,\s*/));
+ }
+ }
+ }
+ # Update status of dynamic symbols given the relocations that have
+ # been parsed after the symbols...
+ $self->apply_relocations();
+
+ return $section ne 'none';
+}
+
+# Output format of objdump -w -T
+#
+# /lib/libc.so.6: file format elf32-i386
+#
+# DYNAMIC SYMBOL TABLE:
+# 00056ef0 g DF .text 000000db GLIBC_2.2 getwchar
+# 00000000 g DO *ABS* 00000000 GCC_3.0 GCC_3.0
+# 00069960 w DF .text 0000001e GLIBC_2.0 bcmp
+# 00000000 w D *UND* 00000000 _pthread_cleanup_pop_restore
+# 0000b788 g DF .text 0000008e Base .protected xine_close
+# 0000b788 g DF .text 0000008e .hidden IA__g_free
+# | ||||||| | | | |
+# | ||||||| | | Version str (.visibility) + Symbol name
+# | ||||||| | Alignment
+# | ||||||| Section name (or *UND* for an undefined symbol)
+# | ||||||F=Function,f=file,O=object
+# | |||||d=debugging,D=dynamic
+# | ||||I=Indirect
+# | |||W=warning
+# | ||C=constructor
+# | |w=weak
+# | g=global,l=local,!=both global/local
+# Size of the symbol
+#
+# GLIBC_2.2 is the version string associated to the symbol
+# (GLIBC_2.2) is the same but the symbol is hidden, a newer version of the
+# symbol exist
+
+my $vis_re = qr/(\.protected|\.hidden|\.internal|0x\S+)/;
+my $dynsym_re = qr<
+ ^
+ [0-9a-f]+ # Symbol size
+ \ (.{7}) # Flags
+ \s+(\S+) # Section name
+ \s+[0-9a-f]+ # Alignment
+ (?:\s+(\S+))? # Version string
+ (?:\s+$vis_re)? # Visibility
+ \s+(.+) # Symbol name
+>x;
+
+sub parse_dynamic_symbol {
+ my ($self, $line) = @_;
+ if ($line =~ $dynsym_re) {
+ my ($flags, $sect, $ver, $vis, $name) = ($1, $2, $3, $4, $5);
+
+ # Special case if version is missing but extra visibility
+ # attribute replaces it in the match
+ if (defined($ver) and $ver =~ /^$vis_re$/) {
+ $vis = $ver;
+ $ver = '';
+ }
+
+ # Cleanup visibility field
+ $vis =~ s/^\.// if defined($vis);
+
+ my $symbol = {
+ name => $name,
+ version => $ver // '',
+ section => $sect,
+ dynamic => substr($flags, 5, 1) eq 'D',
+ debug => substr($flags, 5, 1) eq 'd',
+ type => substr($flags, 6, 1),
+ weak => substr($flags, 1, 1) eq 'w',
+ local => substr($flags, 0, 1) eq 'l',
+ global => substr($flags, 0, 1) eq 'g',
+ visibility => $vis // '',
+ hidden => '',
+ defined => $sect ne '*UND*'
+ };
+
+ # Handle hidden symbols
+ if (defined($ver) and $ver =~ /^\((.*)\)$/) {
+ $ver = $1;
+ $symbol->{version} = $1;
+ $symbol->{hidden} = 1;
+ }
+
+ # Register symbol
+ $self->add_dynamic_symbol($symbol);
+ } elsif ($line =~ /^[0-9a-f]+ (.{7})\s+(\S+)\s+[0-9a-f]+/) {
+ # Same start but no version and no symbol ... just ignore
+ } elsif ($line =~ /^REG_G\d+\s+/) {
+ # Ignore some s390-specific output like
+ # REG_G6 g R *UND* 0000000000000000 #scratch
+ } else {
+ warning(g_("couldn't parse dynamic symbol definition: %s"), $line);
+ }
+}
+
+sub apply_relocations {
+ my $self = shift;
+ foreach my $sym (values %{$self->{dynsyms}}) {
+ # We want to mark as undefined symbols those which are currently
+ # defined but that depend on a copy relocation
+ next if not $sym->{defined};
+
+ my @relocs;
+
+ # When objdump qualifies the symbol with a version it will use @ when
+ # the symbol is in an undefined section (which we discarded above, or
+ # @@ otherwise.
+ push @relocs, $sym->{name} . '@@' . $sym->{version} if $sym->{version};
+
+ # Symbols that are not versioned, or versioned but shown with objdump
+ # from binutils < 2.26, do not have a version appended.
+ push @relocs, $sym->{name};
+
+ foreach my $reloc (@relocs) {
+ next if not exists $self->{dynrelocs}{$reloc};
+ next if not $self->{dynrelocs}{$reloc} =~ /^R_.*_COPY$/;
+
+ $sym->{defined} = 0;
+ last;
+ }
+ }
+}
+
+sub add_dynamic_symbol {
+ my ($self, $symbol) = @_;
+ $symbol->{objid} = $symbol->{soname} = $self->get_id();
+ $symbol->{soname} =~ s{^.*/}{} unless $self->{SONAME};
+ if ($symbol->{version}) {
+ $self->{dynsyms}{$symbol->{name} . '@' . $symbol->{version}} = $symbol;
+ } else {
+ $self->{dynsyms}{$symbol->{name} . '@Base'} = $symbol;
+ }
+}
+
+sub get_id {
+ my $self = shift;
+ return $self->{SONAME} || $self->{file};
+}
+
+sub get_symbol {
+ my ($self, $name) = @_;
+ if (exists $self->{dynsyms}{$name}) {
+ return $self->{dynsyms}{$name};
+ }
+ if ($name !~ /@/) {
+ if (exists $self->{dynsyms}{$name . '@Base'}) {
+ return $self->{dynsyms}{$name . '@Base'};
+ }
+ }
+ return;
+}
+
+sub get_exported_dynamic_symbols {
+ my $self = shift;
+ return grep {
+ $_->{defined} && $_->{dynamic} && !$_->{local}
+ } values %{$self->{dynsyms}};
+}
+
+sub get_undefined_dynamic_symbols {
+ my $self = shift;
+ return grep {
+ (!$_->{defined}) && $_->{dynamic}
+ } values %{$self->{dynsyms}};
+}
+
+sub get_needed_libraries {
+ my $self = shift;
+ return @{$self->{NEEDED}};
+}
+
+sub is_executable {
+ my $self = shift;
+ return (exists $self->{flags}{EXEC_P} && $self->{flags}{EXEC_P}) ||
+ (exists $self->{INTERP} && $self->{INTERP});
+}
+
+sub is_public_library {
+ my $self = shift;
+ return exists $self->{flags}{DYNAMIC} && $self->{flags}{DYNAMIC}
+ && exists $self->{SONAME} && $self->{SONAME};
+}
+
+1;
diff --git a/scripts/Dpkg/Shlibs/Symbol.pm b/scripts/Dpkg/Shlibs/Symbol.pm
new file mode 100644
index 0000000..e6460ce
--- /dev/null
+++ b/scripts/Dpkg/Shlibs/Symbol.pm
@@ -0,0 +1,531 @@
+# Copyright © 2007 Raphaël Hertzog <hertzog@debian.org>
+# Copyright © 2009-2010 Modestas Vainius <modax@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::Shlibs::Symbol;
+
+use strict;
+use warnings;
+
+our $VERSION = '0.01';
+
+use Storable ();
+use List::Util qw(any);
+
+use Dpkg::Gettext;
+use Dpkg::ErrorHandling;
+use Dpkg::Arch qw(debarch_is_concerned debarch_to_abiattrs);
+use Dpkg::Version;
+use Dpkg::Shlibs::Cppfilt;
+
+# Supported alias types in the order of matching preference
+use constant ALIAS_TYPES => qw(
+ c++
+ symver
+);
+
+# Needed by the deprecated key, which is a correct use.
+no if $Dpkg::Version::VERSION ge '1.02',
+ warnings => qw(Dpkg::Version::semantic_change::overload::bool);
+
+sub new {
+ my ($this, %args) = @_;
+ my $class = ref($this) || $this;
+ my $self = bless {
+ symbol => undef,
+ symbol_templ => undef,
+ minver => undef,
+ dep_id => 0,
+ deprecated => 0,
+ tags => {},
+ tagorder => [],
+ }, $class;
+ $self->{$_} = $args{$_} foreach keys %args;
+ return $self;
+}
+
+# Deep clone
+sub clone {
+ my ($self, %args) = @_;
+ my $clone = Storable::dclone($self);
+ $clone->{$_} = $args{$_} foreach keys %args;
+ return $clone;
+}
+
+sub parse_tagspec {
+ my ($self, $tagspec) = @_;
+
+ if ($tagspec =~ /^\s*\((.*?)\)(.*)$/ && $1) {
+ # (tag1=t1 value|tag2|...|tagN=tNp)
+ # Symbols ()|= cannot appear in the tag names and values
+ my $tagspec = $1;
+ my $rest = ($2) ? $2 : '';
+ my @tags = split(/\|/, $tagspec);
+
+ # Parse each tag
+ for my $tag (@tags) {
+ if ($tag =~ /^(.*)=(.*)$/) {
+ # Tag with value
+ $self->add_tag($1, $2);
+ } else {
+ # Tag without value
+ $self->add_tag($tag, undef);
+ }
+ }
+ return $rest;
+ }
+ return;
+}
+
+sub parse_symbolspec {
+ my ($self, $symbolspec, %opts) = @_;
+ my $symbol;
+ my $symbol_templ;
+ my $symbol_quoted;
+ my $rest;
+
+ if (defined($symbol = $self->parse_tagspec($symbolspec))) {
+ # (tag1=t1 value|tag2|...|tagN=tNp)"Foo::Bar::foobar()"@Base 1.0 1
+ # Symbols ()|= cannot appear in the tag names and values
+
+ # If the tag specification exists symbol name template might be quoted too
+ if ($symbol =~ /^(['"])/ && $symbol =~ /^($1)(.*?)$1(.*)$/) {
+ $symbol_quoted = $1;
+ $symbol_templ = $2;
+ $symbol = $2;
+ $rest = $3;
+ } else {
+ if ($symbol =~ m/^(\S+)(.*)$/) {
+ $symbol_templ = $1;
+ $symbol = $1;
+ $rest = $2;
+ }
+ }
+ error(g_('symbol name unspecified: %s'), $symbolspec) if (!$symbol);
+ } else {
+ # No tag specification. Symbol name is up to the first space
+ # foobarsymbol@Base 1.0 1
+ if ($symbolspec =~ m/^(\S+)(.*)$/) {
+ $symbol = $1;
+ $rest = $2;
+ } else {
+ return 0;
+ }
+ }
+ $self->{symbol} = $symbol;
+ $self->{symbol_templ} = $symbol_templ;
+ $self->{symbol_quoted} = $symbol_quoted if ($symbol_quoted);
+
+ # Now parse "the rest" (minver and dep_id)
+ if ($rest =~ /^\s(\S+)(?:\s(\d+))?/) {
+ $self->{minver} = $1;
+ $self->{dep_id} = $2 // 0;
+ } elsif (defined $opts{default_minver}) {
+ $self->{minver} = $opts{default_minver};
+ $self->{dep_id} = 0;
+ } else {
+ return 0;
+ }
+ return 1;
+}
+
+# A hook for symbol initialization (typically processing of tags). The code
+# here may even change symbol name. Called from
+# Dpkg::Shlibs::SymbolFile::create_symbol().
+sub initialize {
+ my $self = shift;
+
+ # Look for tags marking symbol patterns. The pattern may match multiple
+ # real symbols.
+ my $type;
+ if ($self->has_tag('c++')) {
+ # Raw symbol name is always demangled to the same alias while demangled
+ # symbol name cannot be reliably converted back to raw symbol name.
+ # Therefore, we can use hash for mapping.
+ $type = 'alias-c++';
+ }
+
+ # Support old style wildcard syntax. That's basically a symver
+ # with an optional tag.
+ if ($self->get_symbolname() =~ /^\*@(.*)$/) {
+ $self->add_tag('symver') unless $self->has_tag('symver');
+ $self->add_tag('optional') unless $self->has_tag('optional');
+ $self->{symbol} = $1;
+ }
+
+ if ($self->has_tag('symver')) {
+ # Each symbol is matched against its version rather than full
+ # name@version string.
+ $type = (defined $type) ? 'generic' : 'alias-symver';
+ if ($self->get_symbolname() =~ /@/) {
+ warning(g_('symver tag with versioned symbol will not match: %s'),
+ $self->get_symbolspec(1));
+ }
+ if ($self->get_symbolname() eq 'Base') {
+ error(g_("you can't use symver tag to catch unversioned symbols: %s"),
+ $self->get_symbolspec(1));
+ }
+ }
+
+ # As soon as regex is involved, we need to match each real
+ # symbol against each pattern (aka 'generic' pattern).
+ if ($self->has_tag('regex')) {
+ $type = 'generic';
+ # Pre-compile regular expression for better performance.
+ my $regex = $self->get_symbolname();
+ $self->{pattern}{regex} = qr/$regex/;
+ }
+ if (defined $type) {
+ $self->init_pattern($type);
+ }
+}
+
+sub get_symbolname {
+ my $self = shift;
+
+ return $self->{symbol};
+}
+
+sub get_symboltempl {
+ my $self = shift;
+
+ return $self->{symbol_templ} || $self->{symbol};
+}
+
+sub set_symbolname {
+ my ($self, $name, $templ, $quoted) = @_;
+
+ $name //= $self->{symbol};
+ if (!defined $templ && $name =~ /\s/) {
+ $templ = $name;
+ }
+ if (!defined $quoted && defined $templ && $templ =~ /\s/) {
+ $quoted = '"';
+ }
+ $self->{symbol} = $name;
+ $self->{symbol_templ} = $templ;
+ if ($quoted) {
+ $self->{symbol_quoted} = $quoted;
+ } else {
+ delete $self->{symbol_quoted};
+ }
+}
+
+sub has_tags {
+ my $self = shift;
+ return scalar (@{$self->{tagorder}});
+}
+
+sub add_tag {
+ my ($self, $tagname, $tagval) = @_;
+ if (exists $self->{tags}{$tagname}) {
+ $self->{tags}{$tagname} = $tagval;
+ return 0;
+ } else {
+ $self->{tags}{$tagname} = $tagval;
+ push @{$self->{tagorder}}, $tagname;
+ }
+ return 1;
+}
+
+sub delete_tag {
+ my ($self, $tagname) = @_;
+ if (exists $self->{tags}{$tagname}) {
+ delete $self->{tags}{$tagname};
+ $self->{tagorder} = [ grep { $_ ne $tagname } @{$self->{tagorder}} ];
+ return 1;
+ }
+ return 0;
+}
+
+sub has_tag {
+ my ($self, $tag) = @_;
+ return exists $self->{tags}{$tag};
+}
+
+sub get_tag_value {
+ my ($self, $tag) = @_;
+ return $self->{tags}{$tag};
+}
+
+# Checks if the symbol is equal to another one (by name and optionally,
+# tag sets, versioning info (minver and depid))
+sub equals {
+ my ($self, $other, %opts) = @_;
+ $opts{versioning} //= 1;
+ $opts{tags} //= 1;
+
+ return 0 if $self->{symbol} ne $other->{symbol};
+
+ if ($opts{versioning}) {
+ return 0 if $self->{minver} ne $other->{minver};
+ return 0 if $self->{dep_id} ne $other->{dep_id};
+ }
+
+ if ($opts{tags}) {
+ return 0 if scalar(@{$self->{tagorder}}) != scalar(@{$other->{tagorder}});
+
+ for my $i (0 .. scalar(@{$self->{tagorder}}) - 1) {
+ my $tag = $self->{tagorder}->[$i];
+ return 0 if $tag ne $other->{tagorder}->[$i];
+ if (defined $self->{tags}{$tag} && defined $other->{tags}{$tag}) {
+ return 0 if $self->{tags}{$tag} ne $other->{tags}{$tag};
+ } elsif (defined $self->{tags}{$tag} || defined $other->{tags}{$tag}) {
+ return 0;
+ }
+ }
+ }
+
+ return 1;
+}
+
+
+sub is_optional {
+ my $self = shift;
+ return $self->has_tag('optional');
+}
+
+sub is_arch_specific {
+ my $self = shift;
+ return $self->has_tag('arch');
+}
+
+sub arch_is_concerned {
+ my ($self, $arch) = @_;
+ my $arches = $self->{tags}{arch};
+
+ return 0 if defined $arch && defined $arches &&
+ !debarch_is_concerned($arch, split /[\s,]+/, $arches);
+
+ my ($bits, $endian) = debarch_to_abiattrs($arch);
+ return 0 if defined $bits && defined $self->{tags}{'arch-bits'} &&
+ $bits ne $self->{tags}{'arch-bits'};
+ return 0 if defined $endian && defined $self->{tags}{'arch-endian'} &&
+ $endian ne $self->{tags}{'arch-endian'};
+
+ return 1;
+}
+
+# Get reference to the pattern the symbol matches (if any)
+sub get_pattern {
+ my $self = shift;
+
+ return $self->{matching_pattern};
+}
+
+### NOTE: subroutines below require (or initialize) $self to be a pattern ###
+
+# Initializes this symbol as a pattern of the specified type.
+sub init_pattern {
+ my ($self, $type) = @_;
+
+ $self->{pattern}{type} = $type;
+ # To be filled with references to symbols matching this pattern.
+ $self->{pattern}{matches} = [];
+}
+
+# Is this symbol a pattern or not?
+sub is_pattern {
+ my $self = shift;
+
+ return exists $self->{pattern};
+}
+
+# Get pattern type if this symbol is a pattern.
+sub get_pattern_type {
+ my $self = shift;
+
+ return $self->{pattern}{type} // '';
+}
+
+# Get (sub)type of the alias pattern. Returns empty string if current
+# pattern is not alias.
+sub get_alias_type {
+ my $self = shift;
+
+ return ($self->get_pattern_type() =~ /^alias-(.+)/ && $1) || '';
+}
+
+# Get a list of symbols matching this pattern if this symbol is a pattern
+sub get_pattern_matches {
+ my $self = shift;
+
+ return @{$self->{pattern}{matches}};
+}
+
+# Create a new symbol based on the pattern (i.e. $self)
+# and add it to the pattern matches list.
+sub create_pattern_match {
+ my $self = shift;
+ return unless $self->is_pattern();
+
+ # Leave out 'pattern' subfield while deep-cloning
+ my $pattern_stuff = $self->{pattern};
+ delete $self->{pattern};
+ my $newsym = $self->clone(@_);
+ $self->{pattern} = $pattern_stuff;
+
+ # Clean up symbol name related internal fields
+ $newsym->set_symbolname();
+
+ # Set newsym pattern reference, add to pattern matches list
+ $newsym->{matching_pattern} = $self;
+ push @{$self->{pattern}{matches}}, $newsym;
+ return $newsym;
+}
+
+### END of pattern subroutines ###
+
+# Given a raw symbol name the call returns its alias according to the rules of
+# the current pattern ($self). Returns undef if the supplied raw name is not
+# transformable to alias.
+sub convert_to_alias {
+ my ($self, $rawname, $type) = @_;
+ $type = $self->get_alias_type() unless $type;
+
+ if ($type) {
+ if ($type eq 'symver') {
+ # In case of symver, alias is symbol version. Extract it from the
+ # rawname.
+ return "$1" if ($rawname =~ /\@([^@]+)$/);
+ } elsif ($rawname =~ /^_Z/ && $type eq 'c++') {
+ return cppfilt_demangle_cpp($rawname);
+ }
+ }
+ return;
+}
+
+sub get_tagspec {
+ my $self = shift;
+ if ($self->has_tags()) {
+ my @tags;
+ for my $tagname (@{$self->{tagorder}}) {
+ my $tagval = $self->{tags}{$tagname};
+ if (defined $tagval) {
+ push @tags, $tagname . '=' . $tagval;
+ } else {
+ push @tags, $tagname;
+ }
+ }
+ return '(' . join('|', @tags) . ')';
+ }
+ return '';
+}
+
+sub get_symbolspec {
+ my $self = shift;
+ my $template_mode = shift;
+ my $spec = '';
+ $spec .= "#MISSING: $self->{deprecated}#" if $self->{deprecated};
+ $spec .= ' ';
+ if ($template_mode) {
+ if ($self->has_tags()) {
+ $spec .= sprintf('%s%3$s%s%3$s', $self->get_tagspec(),
+ $self->get_symboltempl(), $self->{symbol_quoted} // '');
+ } else {
+ $spec .= $self->get_symboltempl();
+ }
+ } else {
+ $spec .= $self->get_symbolname();
+ }
+ $spec .= " $self->{minver}";
+ $spec .= " $self->{dep_id}" if $self->{dep_id};
+ return $spec;
+}
+
+# Sanitize the symbol when it is confirmed to be found in
+# the respective library.
+sub mark_found_in_library {
+ my ($self, $minver, $arch) = @_;
+
+ if ($self->{deprecated}) {
+ # Symbol reappeared somehow
+ $self->{deprecated} = 0;
+ $self->{minver} = $minver if (not $self->is_optional());
+ } else {
+ # We assume that the right dependency information is already
+ # there.
+ if (version_compare($minver, $self->{minver}) < 0) {
+ $self->{minver} = $minver;
+ }
+ }
+ # Never remove arch tags from patterns
+ if (not $self->is_pattern()) {
+ if (not $self->arch_is_concerned($arch)) {
+ # Remove arch tags because they are incorrect.
+ $self->delete_tag('arch');
+ $self->delete_tag('arch-bits');
+ $self->delete_tag('arch-endian');
+ }
+ }
+}
+
+# Sanitize the symbol when it is confirmed to be NOT found in
+# the respective library.
+# Mark as deprecated those that are no more provided (only if the
+# minver is later than the version where the symbol was introduced)
+sub mark_not_found_in_library {
+ my ($self, $minver, $arch) = @_;
+
+ # Ignore symbols from foreign arch
+ return if not $self->arch_is_concerned($arch);
+
+ if ($self->{deprecated}) {
+ # Bump deprecated if the symbol is optional so that it
+ # keeps reappearing in the diff while it's missing
+ $self->{deprecated} = $minver if $self->is_optional();
+ } elsif (version_compare($minver, $self->{minver}) > 0) {
+ $self->{deprecated} = $minver;
+ }
+}
+
+# Checks if the symbol (or pattern) is legitimate as a real symbol for the
+# specified architecture.
+sub is_legitimate {
+ my ($self, $arch) = @_;
+ return ! $self->{deprecated} &&
+ $self->arch_is_concerned($arch);
+}
+
+# Determine whether a supplied raw symbol name matches against current ($self)
+# symbol or pattern.
+sub matches_rawname {
+ my ($self, $rawname) = @_;
+ my $target = $rawname;
+ my $ok = 1;
+ my $do_eq_match = 1;
+
+ if ($self->is_pattern()) {
+ # Process pattern tags in the order they were specified.
+ for my $tag (@{$self->{tagorder}}) {
+ if (any { $tag eq $_ } ALIAS_TYPES) {
+ $ok = not not ($target = $self->convert_to_alias($target, $tag));
+ } elsif ($tag eq 'regex') {
+ # Symbol name is a regex. Match it against the target
+ $do_eq_match = 0;
+ $ok = ($target =~ $self->{pattern}{regex});
+ }
+ last if not $ok;
+ }
+ }
+
+ # Equality match by default
+ if ($ok && $do_eq_match) {
+ $ok = $target eq $self->get_symbolname();
+ }
+ return $ok;
+}
+
+1;
diff --git a/scripts/Dpkg/Shlibs/SymbolFile.pm b/scripts/Dpkg/Shlibs/SymbolFile.pm
new file mode 100644
index 0000000..d492055
--- /dev/null
+++ b/scripts/Dpkg/Shlibs/SymbolFile.pm
@@ -0,0 +1,697 @@
+# Copyright © 2007 Raphaël Hertzog <hertzog@debian.org>
+# Copyright © 2009-2010 Modestas Vainius <modax@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::Shlibs::SymbolFile;
+
+use strict;
+use warnings;
+
+our $VERSION = '0.01';
+
+use Dpkg::Gettext;
+use Dpkg::ErrorHandling;
+use Dpkg::Version;
+use Dpkg::Control::Fields;
+use Dpkg::Shlibs::Symbol;
+use Dpkg::Arch qw(get_host_arch);
+
+use parent qw(Dpkg::Interface::Storable);
+
+# Needed by the deprecated key, which is a correct use.
+no if $Dpkg::Version::VERSION ge '1.02',
+ warnings => qw(Dpkg::Version::semantic_change::overload::bool);
+
+my %internal_symbol = (
+ __bss_end__ => 1, # arm
+ __bss_end => 1, # arm
+ _bss_end__ => 1, # arm
+ __bss_start => 1, # ALL
+ __bss_start__ => 1, # arm
+ __data_start => 1, # arm
+ __do_global_ctors_aux => 1, # ia64
+ __do_global_dtors_aux => 1, # ia64
+ __do_jv_register_classes => 1, # ia64
+ _DYNAMIC => 1, # ALL
+ _edata => 1, # ALL
+ _end => 1, # ALL
+ __end__ => 1, # arm
+ __exidx_end => 1, # armel
+ __exidx_start => 1, # armel
+ _fbss => 1, # mips, mipsel
+ _fdata => 1, # mips, mipsel
+ _fini => 1, # ALL
+ _ftext => 1, # mips, mipsel
+ _GLOBAL_OFFSET_TABLE_ => 1, # hppa, mips, mipsel
+ __gmon_start__ => 1, # hppa
+ __gnu_local_gp => 1, # mips, mipsel
+ _gp => 1, # mips, mipsel
+ _init => 1, # ALL
+ _PROCEDURE_LINKAGE_TABLE_ => 1, # sparc, alpha
+ _SDA2_BASE_ => 1, # powerpc
+ _SDA_BASE_ => 1, # powerpc
+);
+
+for my $i (14 .. 31) {
+ # Many powerpc specific symbols
+ $internal_symbol{"_restfpr_$i"} = 1;
+ $internal_symbol{"_restfpr_$i\_x"} = 1;
+ $internal_symbol{"_restgpr_$i"} = 1;
+ $internal_symbol{"_restgpr_$i\_x"} = 1;
+ $internal_symbol{"_savefpr_$i"} = 1;
+ $internal_symbol{"_savegpr_$i"} = 1;
+}
+
+sub symbol_is_internal {
+ my ($symbol, $include_groups) = @_;
+
+ return 1 if exists $internal_symbol{$symbol};
+
+ # The ARM Embedded ABI spec states symbols under this namespace as
+ # possibly appearing in output objects.
+ return 1 if not ${$include_groups}{aeabi} and $symbol =~ /^__aeabi_/;
+
+ # The GNU implementation of the OpenMP spec, specifies symbols under
+ # this namespace as possibly appearing in output objects.
+ return 1 if not ${$include_groups}{gomp}
+ and $symbol =~ /^\.gomp_critical_user_/;
+
+ return 0;
+}
+
+sub new {
+ my ($this, %opts) = @_;
+ my $class = ref($this) || $this;
+ my $self = \%opts;
+ bless $self, $class;
+ $self->{arch} //= get_host_arch();
+ $self->clear();
+ if (exists $self->{file}) {
+ $self->load($self->{file}) if -e $self->{file};
+ }
+ return $self;
+}
+
+sub get_arch {
+ my $self = shift;
+ return $self->{arch};
+}
+
+sub clear {
+ my $self = shift;
+ $self->{objects} = {};
+}
+
+sub clear_except {
+ my ($self, @ids) = @_;
+
+ my %has = map { $_ => 1 } @ids;
+ foreach my $objid (keys %{$self->{objects}}) {
+ delete $self->{objects}{$objid} unless exists $has{$objid};
+ }
+}
+
+sub get_sonames {
+ my $self = shift;
+ return keys %{$self->{objects}};
+}
+
+sub get_symbols {
+ my ($self, $soname) = @_;
+ if (defined $soname) {
+ my $obj = $self->get_object($soname);
+ return (defined $obj) ? values %{$obj->{syms}} : ();
+ } else {
+ my @syms;
+ foreach my $soname ($self->get_sonames()) {
+ push @syms, $self->get_symbols($soname);
+ }
+ return @syms;
+ }
+}
+
+sub get_patterns {
+ my ($self, $soname) = @_;
+ my @patterns;
+ if (defined $soname) {
+ my $obj = $self->get_object($soname);
+ foreach my $alias (values %{$obj->{patterns}{aliases}}) {
+ push @patterns, values %$alias;
+ }
+ return (@patterns, @{$obj->{patterns}{generic}});
+ } else {
+ foreach my $soname ($self->get_sonames()) {
+ push @patterns, $self->get_patterns($soname);
+ }
+ return @patterns;
+ }
+}
+
+# Create a symbol from the supplied string specification.
+sub create_symbol {
+ my ($self, $spec, %opts) = @_;
+ my $symbol = (exists $opts{base}) ? $opts{base} :
+ Dpkg::Shlibs::Symbol->new();
+
+ my $ret = $opts{dummy} ? $symbol->parse_symbolspec($spec, default_minver => 0) :
+ $symbol->parse_symbolspec($spec);
+ if ($ret) {
+ $symbol->initialize(arch => $self->get_arch());
+ return $symbol;
+ }
+ return;
+}
+
+sub add_symbol {
+ my ($self, $symbol, $soname) = @_;
+ my $object = $self->get_object($soname);
+
+ if ($symbol->is_pattern()) {
+ if (my $alias_type = $symbol->get_alias_type()) {
+ $object->{patterns}{aliases}{$alias_type} //= {};
+ # Alias hash for matching.
+ my $aliases = $object->{patterns}{aliases}{$alias_type};
+ $aliases->{$symbol->get_symbolname()} = $symbol;
+ } else {
+ # Otherwise assume this is a generic sequential pattern. This
+ # should be always safe.
+ push @{$object->{patterns}{generic}}, $symbol;
+ }
+ return 'pattern';
+ } else {
+ # invalidate the minimum version cache
+ $object->{minver_cache} = [];
+ $object->{syms}{$symbol->get_symbolname()} = $symbol;
+ return 'sym';
+ }
+}
+
+sub _new_symbol {
+ my $base = shift || 'Dpkg::Shlibs::Symbol';
+ return (ref $base) ? $base->clone(@_) : $base->new(@_);
+}
+
+# Option state is only used for recursive calls.
+sub parse {
+ my ($self, $fh, $file, %opts) = @_;
+ my $state = $opts{state} //= {};
+
+ if (exists $state->{seen}) {
+ return if exists $state->{seen}{$file}; # Avoid include loops
+ } else {
+ $self->{file} = $file;
+ $state->{seen} = {};
+ }
+ $state->{seen}{$file} = 1;
+
+ if (not ref $state->{obj_ref}) { # Init ref to name of current object/lib
+ ${$state->{obj_ref}} = undef;
+ }
+
+ while (<$fh>) {
+ chomp;
+
+ if (/^(?:\s+|#(?:DEPRECATED|MISSING): ([^#]+)#\s*)(.*)/) {
+ if (not defined ${$state->{obj_ref}}) {
+ error(g_('symbol information must be preceded by a header (file %s, line %s)'), $file, $.);
+ }
+ # Symbol specification
+ my $deprecated = ($1) ? Dpkg::Version->new($1) : 0;
+ my $sym = _new_symbol($state->{base_symbol}, deprecated => $deprecated);
+ if ($self->create_symbol($2, base => $sym)) {
+ $self->add_symbol($sym, ${$state->{obj_ref}});
+ } else {
+ warning(g_('failed to parse line in %s: %s'), $file, $_);
+ }
+ } elsif (/^(\(.*\))?#include\s+"([^"]+)"/) {
+ my $tagspec = $1;
+ my $filename = $2;
+ my $dir = $file;
+ my $old_base_symbol = $state->{base_symbol};
+ my $new_base_symbol;
+ if (defined $tagspec) {
+ $new_base_symbol = _new_symbol($old_base_symbol);
+ $new_base_symbol->parse_tagspec($tagspec);
+ }
+ $state->{base_symbol} = $new_base_symbol;
+ $dir =~ s{[^/]+$}{}; # Strip filename
+ $self->load("$dir$filename", %opts);
+ $state->{base_symbol} = $old_base_symbol;
+ } elsif (/^#|^$/) {
+ # Skip possible comments and empty lines
+ } elsif (/^\|\s*(.*)$/) {
+ # Alternative dependency template
+ push @{$self->{objects}{${$state->{obj_ref}}}{deps}}, "$1";
+ } elsif (/^\*\s*([^:]+):\s*(.*\S)\s*$/) {
+ # Add meta-fields
+ $self->{objects}{${$state->{obj_ref}}}{fields}{field_capitalize($1)} = $2;
+ } elsif (/^(\S+)\s+(.*)$/) {
+ # New object and dependency template
+ ${$state->{obj_ref}} = $1;
+ if (exists $self->{objects}{${$state->{obj_ref}}}) {
+ # Update/override infos only
+ $self->{objects}{${$state->{obj_ref}}}{deps} = [ "$2" ];
+ } else {
+ # Create a new object
+ $self->create_object(${$state->{obj_ref}}, "$2");
+ }
+ } else {
+ warning(g_('failed to parse a line in %s: %s'), $file, $_);
+ }
+ }
+ delete $state->{seen}{$file};
+}
+
+# Beware: we reuse the data structure of the provided symfile so make
+# sure to not modify them after having called this function
+sub merge_object_from_symfile {
+ my ($self, $src, $objid) = @_;
+ if (not $self->has_object($objid)) {
+ $self->{objects}{$objid} = $src->get_object($objid);
+ } else {
+ warning(g_('tried to merge the same object (%s) twice in a symfile'), $objid);
+ }
+}
+
+sub output {
+ my ($self, $fh, %opts) = @_;
+ $opts{template_mode} //= 0;
+ $opts{with_deprecated} //= 1;
+ $opts{with_pattern_matches} //= 0;
+ my $res = '';
+ foreach my $soname (sort $self->get_sonames()) {
+ my @deps = $self->get_dependencies($soname);
+ my $dep_first = shift @deps;
+ if (exists $opts{package} and not $opts{template_mode}) {
+ $dep_first =~ s/#PACKAGE#/$opts{package}/g;
+ }
+ print { $fh } "$soname $dep_first\n" if defined $fh;
+ $res .= "$soname $dep_first\n" if defined wantarray;
+
+ foreach my $dep_next (@deps) {
+ if (exists $opts{package} and not $opts{template_mode}) {
+ $dep_next =~ s/#PACKAGE#/$opts{package}/g;
+ }
+ print { $fh } "| $dep_next\n" if defined $fh;
+ $res .= "| $dep_next\n" if defined wantarray;
+ }
+ my $f = $self->{objects}{$soname}{fields};
+ foreach my $field (sort keys %{$f}) {
+ my $value = $f->{$field};
+ if (exists $opts{package} and not $opts{template_mode}) {
+ $value =~ s/#PACKAGE#/$opts{package}/g;
+ }
+ print { $fh } "* $field: $value\n" if defined $fh;
+ $res .= "* $field: $value\n" if defined wantarray;
+ }
+
+ my @symbols;
+ if ($opts{template_mode}) {
+ # Exclude symbols matching a pattern, but include patterns themselves
+ @symbols = grep { not $_->get_pattern() } $self->get_symbols($soname);
+ push @symbols, $self->get_patterns($soname);
+ } else {
+ @symbols = $self->get_symbols($soname);
+ }
+ foreach my $sym (sort { $a->get_symboltempl() cmp
+ $b->get_symboltempl() } @symbols) {
+ next if $sym->{deprecated} and not $opts{with_deprecated};
+ # Do not dump symbols from foreign arch unless dumping a template.
+ next if not $opts{template_mode} and
+ not $sym->arch_is_concerned($self->get_arch());
+ # Dump symbol specification. Dump symbol tags only in template mode.
+ print { $fh } $sym->get_symbolspec($opts{template_mode}), "\n" if defined $fh;
+ $res .= $sym->get_symbolspec($opts{template_mode}) . "\n" if defined wantarray;
+ # Dump pattern matches as comments (if requested)
+ if ($opts{with_pattern_matches} && $sym->is_pattern()) {
+ for my $match (sort { $a->get_symboltempl() cmp
+ $b->get_symboltempl() } $sym->get_pattern_matches())
+ {
+ print { $fh } '#MATCH:', $match->get_symbolspec(0), "\n" if defined $fh;
+ $res .= '#MATCH:' . $match->get_symbolspec(0) . "\n" if defined wantarray;
+ }
+ }
+ }
+ }
+ return $res;
+}
+
+# Tries to match a symbol name and/or version against the patterns defined.
+# Returns a pattern which matches (if any).
+sub find_matching_pattern {
+ my ($self, $refsym, $sonames, $inc_deprecated) = @_;
+ $inc_deprecated //= 0;
+ my $name = (ref $refsym) ? $refsym->get_symbolname() : $refsym;
+
+ my $pattern_ok = sub {
+ my $p = shift;
+ return defined $p && ($inc_deprecated || !$p->{deprecated}) &&
+ $p->arch_is_concerned($self->get_arch());
+ };
+
+ foreach my $soname ((ref($sonames) eq 'ARRAY') ? @$sonames : $sonames) {
+ my $obj = $self->get_object($soname);
+ my ($type, $pattern);
+ next unless defined $obj;
+
+ my $all_aliases = $obj->{patterns}{aliases};
+ for my $type (Dpkg::Shlibs::Symbol::ALIAS_TYPES) {
+ if (exists $all_aliases->{$type} && keys(%{$all_aliases->{$type}})) {
+ my $aliases = $all_aliases->{$type};
+ my $converter = $aliases->{(keys %$aliases)[0]};
+ if (my $alias = $converter->convert_to_alias($name)) {
+ if ($alias && exists $aliases->{$alias}) {
+ $pattern = $aliases->{$alias};
+ last if $pattern_ok->($pattern);
+ $pattern = undef; # otherwise not found yet
+ }
+ }
+ }
+ }
+
+ # Now try generic patterns and use the first that matches
+ if (not defined $pattern) {
+ for my $p (@{$obj->{patterns}{generic}}) {
+ if ($pattern_ok->($p) && $p->matches_rawname($name)) {
+ $pattern = $p;
+ last;
+ }
+ }
+ }
+ if (defined $pattern) {
+ return (wantarray) ?
+ ( symbol => $pattern, soname => $soname ) : $pattern;
+ }
+ }
+ return;
+}
+
+# merge_symbols($object, $minver)
+# Needs $Objdump->get_object($soname) as parameter
+# Do not merge symbols found in the list of (arch-specific) internal symbols.
+sub merge_symbols {
+ my ($self, $object, $minver) = @_;
+
+ my $soname = $object->{SONAME};
+ error(g_('cannot merge symbols from objects without SONAME'))
+ unless $soname;
+
+ my %include_groups = ();
+ my $groups = $self->get_field($soname, 'Allow-Internal-Symbol-Groups');
+ if (not defined $groups) {
+ $groups = $self->get_field($soname, 'Ignore-Blacklist-Groups');
+ if (defined $groups) {
+ warnings::warnif('deprecated',
+ 'symbols file field "Ignore-Blacklist-Groups" is deprecated, ' .
+ 'use "Allow-Internal-Symbol-Groups" instead');
+ }
+ }
+ if (defined $groups) {
+ $include_groups{$_} = 1 foreach (split ' ', $groups);
+ }
+
+ my %dynsyms;
+ foreach my $sym ($object->get_exported_dynamic_symbols()) {
+ my $name = $sym->{name} . '@' .
+ ($sym->{version} ? $sym->{version} : 'Base');
+ my $symobj = $self->lookup_symbol($name, $soname);
+ if (symbol_is_internal($sym->{name}, \%include_groups)) {
+ next unless defined $symobj;
+
+ if ($symobj->has_tag('allow-internal')) {
+ # Allow the symbol.
+ } elsif ($symobj->has_tag('ignore-blacklist')) {
+ # Allow the symbol and warn.
+ warnings::warnif('deprecated',
+ 'symbol tag "ignore-blacklist" is deprecated, ' .
+ 'use "allow-internal" instead');
+ } else {
+ # Ignore the symbol.
+ next;
+ }
+ }
+ $dynsyms{$name} = $sym;
+ }
+
+ unless ($self->has_object($soname)) {
+ $self->create_object($soname, '');
+ }
+ # Scan all symbols provided by the objects
+ my $obj = $self->get_object($soname);
+ # invalidate the minimum version cache - it is not sufficient to
+ # invalidate in add_symbol, since we might change a minimum
+ # version for a particular symbol without adding it
+ $obj->{minver_cache} = [];
+ foreach my $name (keys %dynsyms) {
+ my $sym;
+ if ($sym = $self->lookup_symbol($name, $obj, 1)) {
+ # If the symbol is already listed in the file
+ $sym->mark_found_in_library($minver, $self->get_arch());
+ } else {
+ # The exact symbol is not present in the file, but it might match a
+ # pattern.
+ my $pattern = $self->find_matching_pattern($name, $obj, 1);
+ if (defined $pattern) {
+ $pattern->mark_found_in_library($minver, $self->get_arch());
+ $sym = $pattern->create_pattern_match(symbol => $name);
+ } else {
+ # Symbol without any special info as no pattern matched
+ $sym = Dpkg::Shlibs::Symbol->new(symbol => $name,
+ minver => $minver);
+ }
+ $self->add_symbol($sym, $obj);
+ }
+ }
+
+ # Process all symbols which could not be found in the library.
+ foreach my $sym ($self->get_symbols($soname)) {
+ if (not exists $dynsyms{$sym->get_symbolname()}) {
+ $sym->mark_not_found_in_library($minver, $self->get_arch());
+ }
+ }
+
+ # Deprecate patterns which didn't match anything
+ for my $pattern (grep { $_->get_pattern_matches() == 0 }
+ $self->get_patterns($soname)) {
+ $pattern->mark_not_found_in_library($minver, $self->get_arch());
+ }
+}
+
+sub is_empty {
+ my $self = shift;
+ return scalar(keys %{$self->{objects}}) ? 0 : 1;
+}
+
+sub has_object {
+ my ($self, $soname) = @_;
+ return exists $self->{objects}{$soname};
+}
+
+sub get_object {
+ my ($self, $soname) = @_;
+ return ref($soname) ? $soname : $self->{objects}{$soname};
+}
+
+sub create_object {
+ my ($self, $soname, @deps) = @_;
+ $self->{objects}{$soname} = {
+ syms => {},
+ fields => {},
+ patterns => {
+ aliases => {},
+ generic => [],
+ },
+ deps => [ @deps ],
+ minver_cache => []
+ };
+}
+
+sub get_dependency {
+ my ($self, $soname, $dep_id) = @_;
+ $dep_id //= 0;
+ return $self->get_object($soname)->{deps}[$dep_id];
+}
+
+sub get_smallest_version {
+ my ($self, $soname, $dep_id) = @_;
+ $dep_id //= 0;
+ my $so_object = $self->get_object($soname);
+ return $so_object->{minver_cache}[$dep_id]
+ if defined $so_object->{minver_cache}[$dep_id];
+ my $minver;
+ foreach my $sym ($self->get_symbols($so_object)) {
+ next if $dep_id != $sym->{dep_id};
+ $minver //= $sym->{minver};
+ if (version_compare($minver, $sym->{minver}) > 0) {
+ $minver = $sym->{minver};
+ }
+ }
+ $so_object->{minver_cache}[$dep_id] = $minver;
+ return $minver;
+}
+
+sub get_dependencies {
+ my ($self, $soname) = @_;
+ return @{$self->get_object($soname)->{deps}};
+}
+
+sub get_field {
+ my ($self, $soname, $name) = @_;
+ if (my $obj = $self->get_object($soname)) {
+ if (exists $obj->{fields}{$name}) {
+ return $obj->{fields}{$name};
+ }
+ }
+ return;
+}
+
+# Tries to find a symbol like the $refsym and returns its descriptor.
+# $refsym may also be a symbol name.
+sub lookup_symbol {
+ my ($self, $refsym, $sonames, $inc_deprecated) = @_;
+ $inc_deprecated //= 0;
+ my $name = (ref $refsym) ? $refsym->get_symbolname() : $refsym;
+
+ foreach my $so ((ref($sonames) eq 'ARRAY') ? @$sonames : $sonames) {
+ if (my $obj = $self->get_object($so)) {
+ my $sym = $obj->{syms}{$name};
+ if ($sym and ($inc_deprecated or not $sym->{deprecated}))
+ {
+ return (wantarray) ?
+ ( symbol => $sym, soname => $so ) : $sym;
+ }
+ }
+ }
+ return;
+}
+
+# Tries to find a pattern like the $refpat and returns its descriptor.
+# $refpat may also be a pattern spec.
+sub lookup_pattern {
+ my ($self, $refpat, $sonames, $inc_deprecated) = @_;
+ $inc_deprecated //= 0;
+ # If $refsym is a string, we need to create a dummy ref symbol.
+ $refpat = $self->create_symbol($refpat, dummy => 1) if ! ref($refpat);
+
+ if ($refpat && $refpat->is_pattern()) {
+ foreach my $soname ((ref($sonames) eq 'ARRAY') ? @$sonames : $sonames) {
+ if (my $obj = $self->get_object($soname)) {
+ my $pat;
+ if (my $type = $refpat->get_alias_type()) {
+ if (exists $obj->{patterns}{aliases}{$type}) {
+ $pat = $obj->{patterns}{aliases}{$type}{$refpat->get_symbolname()};
+ }
+ } elsif ($refpat->get_pattern_type() eq 'generic') {
+ for my $p (@{$obj->{patterns}{generic}}) {
+ if (($inc_deprecated || !$p->{deprecated}) &&
+ $p->equals($refpat, versioning => 0))
+ {
+ $pat = $p;
+ last;
+ }
+ }
+ }
+ if ($pat && ($inc_deprecated || !$pat->{deprecated})) {
+ return (wantarray) ?
+ (symbol => $pat, soname => $soname) : $pat;
+ }
+ }
+ }
+ }
+ return;
+}
+
+# Get symbol object reference either by symbol name or by a reference object.
+sub get_symbol_object {
+ my ($self, $refsym, $soname) = @_;
+ my $sym = $self->lookup_symbol($refsym, $soname, 1);
+ if (! defined $sym) {
+ $sym = $self->lookup_pattern($refsym, $soname, 1);
+ }
+ return $sym;
+}
+
+sub get_new_symbols {
+ my ($self, $ref, %opts) = @_;
+ my $with_optional = (exists $opts{with_optional}) ?
+ $opts{with_optional} : 0;
+ my @res;
+ foreach my $soname ($self->get_sonames()) {
+ next if not $ref->has_object($soname);
+
+ # Scan raw symbols first.
+ foreach my $sym (grep { ($with_optional || ! $_->is_optional())
+ && $_->is_legitimate($self->get_arch()) }
+ $self->get_symbols($soname))
+ {
+ my $refsym = $ref->lookup_symbol($sym, $soname, 1);
+ my $isnew;
+ if (defined $refsym) {
+ # If the symbol exists in the $ref symbol file, it might
+ # still be new if $refsym is not legitimate.
+ $isnew = not $refsym->is_legitimate($self->get_arch());
+ } else {
+ # If the symbol does not exist in the $ref symbol file, it does
+ # not mean that it's new. It might still match a pattern in the
+ # symbol file. However, due to performance reasons, first check
+ # if the pattern that the symbol matches (if any) exists in the
+ # ref symbol file as well.
+ $isnew = not (
+ ($sym->get_pattern() and $ref->lookup_pattern($sym->get_pattern(), $soname, 1)) or
+ $ref->find_matching_pattern($sym, $soname, 1)
+ );
+ }
+ push @res, { symbol => $sym, soname => $soname } if $isnew;
+ }
+
+ # Now scan patterns
+ foreach my $p (grep { ($with_optional || ! $_->is_optional())
+ && $_->is_legitimate($self->get_arch()) }
+ $self->get_patterns($soname))
+ {
+ my $refpat = $ref->lookup_pattern($p, $soname, 0);
+ # If reference pattern was not found or it is not legitimate,
+ # considering current one as new.
+ if (not defined $refpat or
+ not $refpat->is_legitimate($self->get_arch()))
+ {
+ push @res, { symbol => $p , soname => $soname };
+ }
+ }
+ }
+ return @res;
+}
+
+sub get_lost_symbols {
+ my ($self, $ref, %opts) = @_;
+ return $ref->get_new_symbols($self, %opts);
+}
+
+
+sub get_new_libs {
+ my ($self, $ref) = @_;
+ my @res;
+ foreach my $soname ($self->get_sonames()) {
+ push @res, $soname if not $ref->get_object($soname);
+ }
+ return @res;
+}
+
+sub get_lost_libs {
+ my ($self, $ref) = @_;
+ return $ref->get_new_libs($self);
+}
+
+1;
diff --git a/scripts/Dpkg/Source/Archive.pm b/scripts/Dpkg/Source/Archive.pm
new file mode 100644
index 0000000..88e6700
--- /dev/null
+++ b/scripts/Dpkg/Source/Archive.pm
@@ -0,0 +1,240 @@
+# Copyright © 2008 Raphaël Hertzog <hertzog@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::Source::Archive;
+
+use strict;
+use warnings;
+
+our $VERSION = '0.01';
+
+use Carp;
+use Errno qw(ENOENT);
+use File::Temp qw(tempdir);
+use File::Basename qw(basename);
+use File::Spec;
+use File::Find;
+use Cwd;
+
+use Dpkg ();
+use Dpkg::Gettext;
+use Dpkg::ErrorHandling;
+use Dpkg::IPC;
+use Dpkg::Source::Functions qw(erasedir fixperms);
+
+use parent qw(Dpkg::Compression::FileHandle);
+
+sub create {
+ my ($self, %opts) = @_;
+ $opts{options} //= [];
+ my %spawn_opts;
+ # Possibly run tar from another directory
+ if ($opts{chdir}) {
+ $spawn_opts{chdir} = $opts{chdir};
+ *$self->{chdir} = $opts{chdir};
+ }
+ # Redirect input/output appropriately
+ $self->ensure_open('w');
+ $spawn_opts{to_handle} = $self->get_filehandle();
+ $spawn_opts{from_pipe} = \*$self->{tar_input};
+ # Try to use a deterministic mtime.
+ my $mtime = $opts{source_date} // $ENV{SOURCE_DATE_EPOCH} || time;
+ # Call tar creation process
+ $spawn_opts{delete_env} = [ 'TAR_OPTIONS' ];
+ $spawn_opts{exec} = [
+ $Dpkg::PROGTAR, '-cf', '-', '--format=gnu', '--sort=name',
+ '--mtime', "\@$mtime", '--clamp-mtime', '--null',
+ '--numeric-owner', '--owner=0', '--group=0',
+ @{$opts{options}}, '-T', '-',
+ ];
+ *$self->{pid} = spawn(%spawn_opts);
+ *$self->{cwd} = getcwd();
+}
+
+sub _add_entry {
+ my ($self, $file) = @_;
+ my $cwd = *$self->{cwd};
+ croak 'call create() first' unless *$self->{tar_input};
+ $file = $2 if ($file =~ /^\Q$cwd\E\/(.+)$/); # Relative names
+ print({ *$self->{tar_input} } "$file\0")
+ or syserr(g_('write on tar input'));
+}
+
+sub add_file {
+ my ($self, $file) = @_;
+ my $testfile = $file;
+ if (*$self->{chdir}) {
+ $testfile = File::Spec->catfile(*$self->{chdir}, $file);
+ }
+ croak 'add_file() does not handle directories'
+ if not -l $testfile and -d _;
+ $self->_add_entry($file);
+}
+
+sub add_directory {
+ my ($self, $file) = @_;
+ my $testfile = $file;
+ if (*$self->{chdir}) {
+ $testfile = File::Spec->catdir(*$self->{chdir}, $file);
+ }
+ croak 'add_directory() only handles directories'
+ if -l $testfile or not -d _;
+ $self->_add_entry($file);
+}
+
+sub finish {
+ my $self = shift;
+
+ close(*$self->{tar_input}) or syserr(g_('close on tar input'));
+ wait_child(*$self->{pid}, cmdline => 'tar -cf -');
+ delete *$self->{pid};
+ delete *$self->{tar_input};
+ delete *$self->{cwd};
+ delete *$self->{chdir};
+ $self->close();
+}
+
+sub extract {
+ my ($self, $dest, %opts) = @_;
+ $opts{options} //= [];
+ $opts{in_place} //= 0;
+ $opts{no_fixperms} //= 0;
+ my %spawn_opts = (wait_child => 1);
+
+ # Prepare destination
+ my $template = basename($self->get_filename()) . '.tmp-extract.XXXXX';
+ unless (-e $dest) {
+ # Kludge so that realpath works
+ mkdir($dest) or syserr(g_('cannot create directory %s'), $dest);
+ }
+ my $tmp = tempdir($template, DIR => Cwd::realpath("$dest/.."), CLEANUP => 1);
+ $spawn_opts{chdir} = $tmp;
+
+ # Prepare stuff that handles the input of tar
+ $self->ensure_open('r', delete_sig => [ 'PIPE' ]);
+ $spawn_opts{from_handle} = $self->get_filehandle();
+
+ # Call tar extraction process
+ $spawn_opts{delete_env} = [ 'TAR_OPTIONS' ];
+ $spawn_opts{exec} = [
+ $Dpkg::PROGTAR, '-xf', '-', '--no-same-permissions',
+ '--no-same-owner', @{$opts{options}},
+ ];
+ spawn(%spawn_opts);
+ $self->close();
+
+ # Fix permissions on extracted files because tar insists on applying
+ # our umask _to the original permissions_ rather than mostly-ignoring
+ # the original permissions.
+ # We still need --no-same-permissions because otherwise tar might
+ # extract directory setgid (which we want inherited, not
+ # extracted); we need --no-same-owner because putting the owner
+ # back is tedious - in particular, correct group ownership would
+ # have to be calculated using mount options and other madness.
+ fixperms($tmp) unless $opts{no_fixperms};
+
+ # If we are extracting "in-place" do not remove the destination directory.
+ if ($opts{in_place}) {
+ my $canon_basedir = Cwd::realpath($dest);
+ # On Solaris /dev/null points to /devices/pseudo/mm@0:null.
+ my $canon_devnull = Cwd::realpath('/dev/null');
+ my $check_symlink = sub {
+ my $pathname = shift;
+ my $canon_pathname = Cwd::realpath($pathname);
+ if (not defined $canon_pathname) {
+ return if $! == ENOENT;
+
+ syserr(g_("pathname '%s' cannot be canonicalized"), $pathname);
+ }
+ return if $canon_pathname eq $canon_devnull;
+ return if $canon_pathname eq $canon_basedir;
+ return if $canon_pathname =~ m{^\Q$canon_basedir/\E};
+ warning(g_("pathname '%s' points outside source root (to '%s')"),
+ $pathname, $canon_pathname);
+ };
+
+ my $move_in_place = sub {
+ my $relpath = File::Spec->abs2rel($File::Find::name, $tmp);
+ my $destpath = File::Spec->catfile($dest, $relpath);
+
+ my ($mode, $atime, $mtime);
+ lstat $File::Find::name
+ or syserr(g_('cannot get source pathname %s metadata'), $File::Find::name);
+ ((undef) x 2, $mode, (undef) x 5, $atime, $mtime) = lstat _;
+ my $src_is_dir = -d _;
+
+ my $dest_exists = 1;
+ if (not lstat $destpath) {
+ if ($! == ENOENT) {
+ $dest_exists = 0;
+ } else {
+ syserr(g_('cannot get target pathname %s metadata'), $destpath);
+ }
+ }
+ my $dest_is_dir = -d _;
+ if ($dest_exists) {
+ if ($dest_is_dir && $src_is_dir) {
+ # Refresh the destination directory attributes with the
+ # ones from the tarball.
+ chmod $mode, $destpath
+ or syserr(g_('cannot change directory %s mode'), $File::Find::name);
+ utime $atime, $mtime, $destpath
+ or syserr(g_('cannot change directory %s times'), $File::Find::name);
+
+ # We should do nothing, and just walk further tree.
+ return;
+ } elsif ($dest_is_dir) {
+ rmdir $destpath
+ or syserr(g_('cannot remove destination directory %s'), $destpath);
+ } else {
+ $check_symlink->($destpath);
+ unlink $destpath
+ or syserr(g_('cannot remove destination file %s'), $destpath);
+ }
+ }
+ # If we are moving a directory, we do not need to walk it.
+ if ($src_is_dir) {
+ $File::Find::prune = 1;
+ }
+ rename $File::Find::name, $destpath
+ or syserr(g_('cannot move %s to %s'), $File::Find::name, $destpath);
+ };
+
+ find({
+ wanted => $move_in_place,
+ no_chdir => 1,
+ dangling_symlinks => 0,
+ }, $tmp);
+ } else {
+ # Rename extracted directory
+ opendir(my $dir_dh, $tmp) or syserr(g_('cannot opendir %s'), $tmp);
+ my @entries = grep { $_ ne '.' && $_ ne '..' } readdir($dir_dh);
+ closedir($dir_dh);
+
+ erasedir($dest);
+
+ if (scalar(@entries) == 1 && ! -l "$tmp/$entries[0]" && -d _) {
+ rename("$tmp/$entries[0]", $dest)
+ or syserr(g_('unable to rename %s to %s'),
+ "$tmp/$entries[0]", $dest);
+ } else {
+ rename($tmp, $dest)
+ or syserr(g_('unable to rename %s to %s'), $tmp, $dest);
+ }
+ }
+ erasedir($tmp);
+}
+
+1;
diff --git a/scripts/Dpkg/Source/BinaryFiles.pm b/scripts/Dpkg/Source/BinaryFiles.pm
new file mode 100644
index 0000000..48c84c8
--- /dev/null
+++ b/scripts/Dpkg/Source/BinaryFiles.pm
@@ -0,0 +1,161 @@
+# Copyright © 2008-2011 Raphaël Hertzog <hertzog@debian.org>
+# Copyright © 2008-2015 Guillem Jover <guillem@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::Source::BinaryFiles;
+
+use strict;
+use warnings;
+
+our $VERSION = '0.01';
+
+use Cwd;
+use File::Path qw(make_path);
+use File::Spec;
+use File::Find;
+
+use Dpkg::ErrorHandling;
+use Dpkg::Gettext;
+use Dpkg::Source::Functions qw(is_binary);
+
+sub new {
+ my ($this, $dir) = @_;
+ my $class = ref($this) || $this;
+
+ my $self = {
+ dir => $dir,
+ allowed_binaries => {},
+ seen_binaries => {},
+ include_binaries_path =>
+ File::Spec->catfile($dir, 'debian', 'source', 'include-binaries'),
+ };
+ bless $self, $class;
+ $self->load_allowed_binaries();
+ return $self;
+}
+
+sub new_binary_found {
+ my ($self, $path) = @_;
+
+ $self->{seen_binaries}{$path} = 1;
+}
+
+sub load_allowed_binaries {
+ my $self = shift;
+ my $incbin_file = $self->{include_binaries_path};
+
+ if (-f $incbin_file) {
+ open my $incbin_fh, '<', $incbin_file
+ or syserr(g_('cannot read %s'), $incbin_file);
+ while (<$incbin_fh>) {
+ chomp;
+ s/^\s*//;
+ s/\s*$//;
+ next if /^#/ or length == 0;
+ $self->{allowed_binaries}{$_} = 1;
+ }
+ close $incbin_fh;
+ }
+}
+
+sub binary_is_allowed {
+ my ($self, $path) = @_;
+
+ return 1 if exists $self->{allowed_binaries}{$path};
+ return 0;
+}
+
+sub update_debian_source_include_binaries {
+ my $self = shift;
+
+ my @unknown_binaries = $self->get_unknown_binaries();
+ return unless scalar @unknown_binaries;
+
+ my $incbin_file = $self->{include_binaries_path};
+ make_path(File::Spec->catdir($self->{dir}, 'debian', 'source'));
+ open my $incbin_fh, '>>', $incbin_file
+ or syserr(g_('cannot write %s'), $incbin_file);
+ foreach my $binary (@unknown_binaries) {
+ print { $incbin_fh } "$binary\n";
+ info(g_('adding %s to %s'), $binary, 'debian/source/include-binaries');
+ $self->{allowed_binaries}{$binary} = 1;
+ }
+ close $incbin_fh;
+}
+
+sub get_unknown_binaries {
+ my $self = shift;
+
+ return grep { not $self->binary_is_allowed($_) } $self->get_seen_binaries();
+}
+
+sub get_seen_binaries {
+ my $self = shift;
+ my @seen = sort keys %{$self->{seen_binaries}};
+
+ return @seen;
+}
+
+sub detect_binary_files {
+ my ($self, %opts) = @_;
+
+ my $unwanted_binaries = 0;
+ my $check_binary = sub {
+ if (-f and is_binary($_)) {
+ my $fn = File::Spec->abs2rel($_, $self->{dir});
+ $self->new_binary_found($fn);
+ unless ($opts{include_binaries} or $self->binary_is_allowed($fn)) {
+ errormsg(g_('unwanted binary file: %s'), $fn);
+ $unwanted_binaries++;
+ }
+ }
+ };
+ my $exclude_glob = '{' .
+ join(',', map { s/,/\\,/rg } @{$opts{exclude_globs}}) .
+ '}';
+ my $filter_ignore = sub {
+ # Filter out files that are not going to be included in the debian
+ # tarball due to ignores.
+ my %exclude;
+ my $reldir = File::Spec->abs2rel($File::Find::dir, $self->{dir});
+ my $cwd = getcwd();
+ # Apply the pattern both from the top dir and from the inspected dir
+ chdir $self->{dir}
+ or syserr(g_("unable to chdir to '%s'"), $self->{dir});
+ $exclude{$_} = 1 foreach glob $exclude_glob;
+ chdir $cwd or syserr(g_("unable to chdir to '%s'"), $cwd);
+ chdir $File::Find::dir
+ or syserr(g_("unable to chdir to '%s'"), $File::Find::dir);
+ $exclude{$_} = 1 foreach glob $exclude_glob;
+ chdir $cwd or syserr(g_("unable to chdir to '%s'"), $cwd);
+ my @result;
+ foreach my $fn (@_) {
+ unless (exists $exclude{$fn} or exists $exclude{"$reldir/$fn"}) {
+ push @result, $fn;
+ }
+ }
+ return @result;
+ };
+ find({ wanted => $check_binary, preprocess => $filter_ignore,
+ no_chdir => 1 }, File::Spec->catdir($self->{dir}, 'debian'));
+ error(P_('detected %d unwanted binary file (add it in ' .
+ 'debian/source/include-binaries to allow its inclusion).',
+ 'detected %d unwanted binary files (add them in ' .
+ 'debian/source/include-binaries to allow their inclusion).',
+ $unwanted_binaries), $unwanted_binaries)
+ if $unwanted_binaries;
+}
+
+1;
diff --git a/scripts/Dpkg/Source/Format.pm b/scripts/Dpkg/Source/Format.pm
new file mode 100644
index 0000000..41596a2
--- /dev/null
+++ b/scripts/Dpkg/Source/Format.pm
@@ -0,0 +1,191 @@
+# Copyright © 2008-2011 Raphaël Hertzog <hertzog@debian.org>
+# Copyright © 2008-2018 Guillem Jover <guillem@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::Source::Format;
+
+=encoding utf8
+
+=head1 NAME
+
+Dpkg::Source::Format - manipulate debian/source/format files
+
+=head1 DESCRIPTION
+
+This module provides a class that can manipulate Debian source
+package F<debian/source/format> files.
+
+=cut
+
+use strict;
+use warnings;
+
+our $VERSION = '1.00';
+
+use Dpkg::Gettext;
+use Dpkg::ErrorHandling;
+
+use parent qw(Dpkg::Interface::Storable);
+
+=head1 METHODS
+
+=over 4
+
+=item $f = Dpkg::Source::Format->new(%opts)
+
+Creates a new object corresponding to a source package's
+F<debian/source/format> file. When the key B<filename> is set, it will
+be used to parse and set the format. Otherwise if the B<format> key is
+set it will be validated and used to set the format.
+
+=cut
+
+sub new {
+ my ($this, %opts) = @_;
+ my $class = ref($this) || $this;
+ my $self = {
+ filename => undef,
+ major => undef,
+ minor => undef,
+ variant => undef,
+ };
+ bless $self, $class;
+
+ if (exists $opts{filename}) {
+ $self->load($opts{filename}, compression => 0);
+ } elsif ($opts{format}) {
+ $self->set($opts{format});
+ }
+ return $self;
+}
+
+=item $f->set_from_parts($major[, $minor[, $variant]])
+
+Sets the source format from its parts. The $major part is mandatory.
+The $minor and $variant parts are optional.
+
+B<Notice>: This function performs no validation.
+
+=cut
+
+sub set_from_parts {
+ my ($self, $major, $minor, $variant) = @_;
+
+ $self->{major} = $major;
+ $self->{minor} = $minor // 0;
+ $self->{variant} = $variant;
+}
+
+=item ($major, $minor, $variant) = $f->set($format)
+
+Sets (and validates) the source $format specified. Will return the parsed
+format parts as a list, the optional $minor and $variant parts might be
+undef.
+
+=cut
+
+sub set {
+ my ($self, $format) = @_;
+
+ if ($format =~ /^(\d+)(?:\.(\d+))?(?:\s+\(([a-z0-9]+)\))?$/) {
+ my ($major, $minor, $variant) = ($1, $2, $3);
+
+ $self->set_from_parts($major, $minor, $variant);
+
+ return ($major, $minor, $variant);
+ } else {
+ error(g_("source package format '%s' is invalid"), $format);
+ }
+}
+
+=item ($major, $minor, $variant) = $f->get()
+
+=item $format = $f->get()
+
+Gets the source format, either as properly formatted scalar, or as a list
+of its parts, where the optional $minor and $variant parts might be undef.
+
+=cut
+
+sub get {
+ my $self = shift;
+
+ if (wantarray) {
+ return ($self->{major}, $self->{minor}, $self->{variant});
+ } else {
+ my $format = "$self->{major}.$self->{minor}";
+ $format .= " ($self->{variant})" if defined $self->{variant};
+
+ return $format;
+ }
+}
+
+=item $count = $f->parse($fh, $desc)
+
+Parse the source format string from $fh, with filehandle description $desc.
+
+=cut
+
+sub parse {
+ my ($self, $fh, $desc) = @_;
+
+ my $format = <$fh>;
+ chomp $format if defined $format;
+ error(g_('%s is empty'), $desc)
+ unless defined $format and length $format;
+
+ $self->set($format);
+
+ return 1;
+}
+
+=item $count = $f->load($filename)
+
+Parse $filename contents for a source package format string.
+
+=item $str = $f->output([$fh])
+
+=item "$f"
+
+Returns a string representing the source package format version.
+If $fh is set, it prints the string to the filehandle.
+
+=cut
+
+sub output {
+ my ($self, $fh) = @_;
+
+ my $str = $self->get();
+
+ print { $fh } "$str\n" if defined $fh;
+
+ return $str;
+}
+
+=item $f->save($filename)
+
+Save the source package format into the given $filename.
+
+=back
+
+=head1 CHANGES
+
+=head2 Version 1.00 (dpkg 1.19.3)
+
+Mark the module as public.
+
+=cut
+
+1;
diff --git a/scripts/Dpkg/Source/Functions.pm b/scripts/Dpkg/Source/Functions.pm
new file mode 100644
index 0000000..0576657
--- /dev/null
+++ b/scripts/Dpkg/Source/Functions.pm
@@ -0,0 +1,124 @@
+# Copyright © 2008-2010, 2012-2015 Guillem Jover <guillem@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::Source::Functions;
+
+use strict;
+use warnings;
+
+our $VERSION = '0.01';
+our @EXPORT_OK = qw(
+ erasedir
+ fixperms
+ chmod_if_needed
+ fs_time
+ is_binary
+);
+
+use Exporter qw(import);
+use Errno qw(ENOENT);
+
+use Dpkg::ErrorHandling;
+use Dpkg::Gettext;
+use Dpkg::File;
+use Dpkg::IPC;
+
+sub erasedir {
+ my $dir = shift;
+ if (not lstat($dir)) {
+ return if $! == ENOENT;
+ syserr(g_('cannot stat directory %s (before removal)'), $dir);
+ }
+ system 'rm', '-rf', '--', $dir;
+ subprocerr("rm -rf $dir") if $?;
+ if (not stat($dir)) {
+ return if $! == ENOENT;
+ syserr(g_("unable to check for removal of directory '%s'"), $dir);
+ }
+ error(g_("rm -rf failed to remove '%s'"), $dir);
+}
+
+sub fixperms {
+ my $dir = shift;
+ my ($mode, $modes_set);
+ # Unfortunately tar insists on applying our umask _to the original
+ # permissions_ rather than mostly-ignoring the original
+ # permissions. We fix it up with chmod -R (which saves us some
+ # work) but we have to construct a u+/- string which is a bit
+ # of a palaver. (Numeric doesn't work because we need [ugo]+X
+ # and [ugo]=<stuff> doesn't work because that unsets sgid on dirs.)
+ $mode = 0777 & ~umask;
+ for my $i (0 .. 2) {
+ $modes_set .= ',' if $i;
+ $modes_set .= qw(u g o)[$i];
+ for my $j (0 .. 2) {
+ $modes_set .= $mode & (0400 >> ($i * 3 + $j)) ? '+' : '-';
+ $modes_set .= qw(r w X)[$j];
+ }
+ }
+ system('chmod', '-R', '--', $modes_set, $dir);
+ subprocerr("chmod -R -- $modes_set $dir") if $?;
+}
+
+# Only change the pathname permissions if they differ from the desired.
+#
+# To be able to build a source tree, a user needs write permissions on it,
+# but not necessarily ownership of those files.
+sub chmod_if_needed {
+ my ($newperms, $pathname) = @_;
+ my $oldperms = (stat $pathname)[2] & 07777;
+
+ return 1 if $oldperms == $newperms;
+ return chmod $newperms, $pathname;
+}
+
+# Touch the file and read the resulting mtime.
+#
+# If the file doesn't exist, create it, read the mtime and unlink it.
+#
+# Use this instead of time() when the timestamp is going to be
+# used to set file timestamps. This avoids confusion when an
+# NFS server and NFS client disagree about what time it is.
+sub fs_time($) {
+ my $file = shift;
+ my $is_temp = 0;
+ if (not -e $file) {
+ file_touch($file);
+ $is_temp = 1;
+ } else {
+ utime(undef, undef, $file) or
+ syserr(g_('cannot change timestamp for %s'), $file);
+ }
+ stat($file) or syserr(g_('cannot read timestamp from %s'), $file);
+ my $mtime = (stat(_))[9];
+ unlink($file) if $is_temp;
+ return $mtime;
+}
+
+sub is_binary($) {
+ my $file = shift;
+
+ # Perform the same check as diff(1), look for a NUL character in the first
+ # 4 KiB of the file.
+ open my $fh, '<', $file
+ or syserr(g_('cannot open file %s for binary detection'), $file);
+ read $fh, my $buf, 4096, 0;
+ my $res = index $buf, "\0";
+ close $fh;
+
+ return $res >= 0;
+}
+
+1;
diff --git a/scripts/Dpkg/Source/Package.pm b/scripts/Dpkg/Source/Package.pm
new file mode 100644
index 0000000..412ea5d
--- /dev/null
+++ b/scripts/Dpkg/Source/Package.pm
@@ -0,0 +1,741 @@
+# Copyright © 2008-2011 Raphaël Hertzog <hertzog@debian.org>
+# Copyright © 2008-2019 Guillem Jover <guillem@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::Source::Package;
+
+=encoding utf8
+
+=head1 NAME
+
+Dpkg::Source::Package - manipulate Debian source packages
+
+=head1 DESCRIPTION
+
+This module provides a class that can manipulate Debian source
+packages. While it supports both the extraction and the creation
+of source packages, the only API that is officially supported
+is the one that supports the extraction of the source package.
+
+=cut
+
+use strict;
+use warnings;
+
+our $VERSION = '2.02';
+our @EXPORT_OK = qw(
+ get_default_diff_ignore_regex
+ set_default_diff_ignore_regex
+ get_default_tar_ignore_pattern
+);
+
+use Exporter qw(import);
+use POSIX qw(:errno_h :sys_wait_h);
+use Carp;
+use File::Temp;
+use File::Copy qw(cp);
+use File::Basename;
+use File::Spec;
+
+use Dpkg::Gettext;
+use Dpkg::ErrorHandling;
+use Dpkg::Control;
+use Dpkg::Checksums;
+use Dpkg::Version;
+use Dpkg::Compression;
+use Dpkg::Path qw(check_files_are_the_same check_directory_traversal);
+use Dpkg::Vendor qw(run_vendor_hook);
+use Dpkg::Source::Format;
+use Dpkg::OpenPGP;
+use Dpkg::OpenPGP::ErrorCodes;
+
+my $diff_ignore_default_regex = '
+# Ignore general backup files
+(?:^|/).*~$|
+# Ignore emacs recovery files
+(?:^|/)\.#.*$|
+# Ignore vi swap files
+(?:^|/)\..*\.sw.$|
+# Ignore baz-style junk files or directories
+(?:^|/),,.*(?:$|/.*$)|
+# File-names that should be ignored (never directories)
+(?:^|/)(?:DEADJOE|\.arch-inventory|\.(?:bzr|cvs|hg|git|mtn-)ignore)$|
+# File or directory names that should be ignored
+(?:^|/)(?:CVS|RCS|\.deps|\{arch\}|\.arch-ids|\.svn|
+\.hg(?:tags|sigs)?|_darcs|\.git(?:attributes|modules|review)?|
+\.mailmap|\.shelf|_MTN|\.be|\.bzr(?:\.backup|tags)?)(?:$|/.*$)
+';
+# Take out comments and newlines
+$diff_ignore_default_regex =~ s/^#.*$//mg;
+$diff_ignore_default_regex =~ s/\n//sg;
+
+no warnings 'qw'; ## no critic (TestingAndDebugging::ProhibitNoWarnings)
+my @tar_ignore_default_pattern = qw(
+*.a
+*.la
+*.o
+*.so
+.*.sw?
+*/*~
+,,*
+.[#~]*
+.arch-ids
+.arch-inventory
+.be
+.bzr
+.bzr.backup
+.bzr.tags
+.bzrignore
+.cvsignore
+.deps
+.git
+.gitattributes
+.gitignore
+.gitmodules
+.gitreview
+.hg
+.hgignore
+.hgsigs
+.hgtags
+.mailmap
+.mtn-ignore
+.shelf
+.svn
+CVS
+DEADJOE
+RCS
+_MTN
+_darcs
+{arch}
+);
+## use critic
+
+=head1 FUNCTIONS
+
+=over 4
+
+=item $string = get_default_diff_ignore_regex()
+
+Returns the default diff ignore regex.
+
+=cut
+
+sub get_default_diff_ignore_regex {
+ return $diff_ignore_default_regex;
+}
+
+=item set_default_diff_ignore_regex($string)
+
+Set a regex as the new default diff ignore regex.
+
+=cut
+
+sub set_default_diff_ignore_regex {
+ my $regex = shift;
+
+ $diff_ignore_default_regex = $regex;
+}
+
+=item @array = get_default_tar_ignore_pattern()
+
+Returns the default tar ignore pattern, as an array.
+
+=cut
+
+sub get_default_tar_ignore_pattern {
+ return @tar_ignore_default_pattern;
+}
+
+=back
+
+=head1 METHODS
+
+=over 4
+
+=item $p = Dpkg::Source::Package->new(%opts, options => {})
+
+Creates a new object corresponding to a source package. When the key
+B<filename> is set to a F<.dsc> file, it will be used to initialize the
+source package with its description. Otherwise if the B<format> key is
+set to a valid value, the object will be initialized for that format
+(since dpkg 1.19.3).
+
+The B<options> key is a hash ref which supports the following options:
+
+=over 8
+
+=item skip_debianization
+
+If set to 1, do not apply Debian changes on the extracted source package.
+
+=item skip_patches
+
+If set to 1, do not apply Debian-specific patches. This options is
+specific for source packages using format "2.0" and "3.0 (quilt)".
+
+=item require_valid_signature
+
+If set to 1, the check_signature() method will be stricter and will error
+out if the signature can't be verified.
+
+=item require_strong_checksums
+
+If set to 1, the check_checksums() method will be stricter and will error
+out if there is no strong checksum.
+
+=item copy_orig_tarballs
+
+If set to 1, the extraction will copy the upstream tarballs next the
+target directory. This is useful if you want to be able to rebuild the
+source package after its extraction.
+
+=back
+
+=cut
+
+# Class methods
+sub new {
+ my ($this, %args) = @_;
+ my $class = ref($this) || $this;
+ my $self = {
+ fields => Dpkg::Control->new(type => CTRL_PKG_SRC),
+ format => Dpkg::Source::Format->new(),
+ options => {},
+ checksums => Dpkg::Checksums->new(),
+ openpgp => Dpkg::OpenPGP->new(needs => { api => 'verify' }),
+ };
+ bless $self, $class;
+ if (exists $args{options}) {
+ $self->{options} = $args{options};
+ }
+ if (exists $args{filename}) {
+ $self->initialize($args{filename});
+ $self->init_options();
+ } elsif ($args{format}) {
+ $self->{fields}{Format} = $args{format};
+ $self->upgrade_object_type(0);
+ $self->init_options();
+ }
+
+ if ($self->{options}{require_valid_signature}) {
+ $self->{report_verify} = \&error;
+ } else {
+ $self->{report_verify} = \&warning;
+ }
+
+ return $self;
+}
+
+sub init_options {
+ my $self = shift;
+ # Use full ignore list by default
+ # note: this function is not called by V1 packages
+ $self->{options}{diff_ignore_regex} ||= $diff_ignore_default_regex;
+ $self->{options}{diff_ignore_regex} .= '|(?:^|/)debian/source/local-.*$';
+ $self->{options}{diff_ignore_regex} .= '|(?:^|/)debian/files(?:\.new)?$';
+ if (defined $self->{options}{tar_ignore}) {
+ $self->{options}{tar_ignore} = [ @tar_ignore_default_pattern ]
+ unless @{$self->{options}{tar_ignore}};
+ } else {
+ $self->{options}{tar_ignore} = [ @tar_ignore_default_pattern ];
+ }
+ push @{$self->{options}{tar_ignore}},
+ 'debian/source/local-options',
+ 'debian/source/local-patch-header',
+ 'debian/files',
+ 'debian/files.new';
+ $self->{options}{copy_orig_tarballs} //= 0;
+
+ # Skip debianization while specific to some formats has an impact
+ # on code common to all formats
+ $self->{options}{skip_debianization} //= 0;
+ $self->{options}{skip_patches} //= 0;
+
+ # Set default validation checks.
+ $self->{options}{require_valid_signature} //= 0;
+ $self->{options}{require_strong_checksums} //= 0;
+
+ # Set default compressor for new formats.
+ $self->{options}{compression} //= 'xz';
+ $self->{options}{comp_level} //= compression_get_level($self->{options}{compression});
+ $self->{options}{comp_ext} //= compression_get_file_extension($self->{options}{compression});
+}
+
+sub initialize {
+ my ($self, $filename) = @_;
+ my ($fn, $dir) = fileparse($filename);
+ error(g_('%s is not the name of a file'), $filename) unless $fn;
+ $self->{basedir} = $dir || './';
+ $self->{filename} = $fn;
+
+ # Read the fields
+ my $fields = $self->{fields};
+ $fields->load($filename);
+ $self->{is_signed} = $fields->get_option('is_pgp_signed');
+
+ foreach my $f (qw(Source Version Files)) {
+ unless (defined($fields->{$f})) {
+ error(g_('missing critical source control field %s'), $f);
+ }
+ }
+
+ $self->{checksums}->add_from_control($fields, use_files_for_md5 => 1);
+
+ $self->upgrade_object_type(0);
+}
+
+sub upgrade_object_type {
+ my ($self, $update_format) = @_;
+ $update_format //= 1;
+
+ my $format = $self->{fields}{'Format'} // '1.0';
+ my ($major, $minor, $variant) = $self->{format}->set($format);
+
+ my $module = "Dpkg::Source::Package::V$major";
+ $module .= '::' . ucfirst $variant if defined $variant;
+ eval qq{
+ pop \@INC if \$INC[-1] eq '.';
+ require $module;
+ \$minor = \$${module}::CURRENT_MINOR_VERSION;
+ };
+ if ($@) {
+ error(g_("source package format '%s' is not supported: %s"),
+ $format, $@);
+ }
+ if ($update_format) {
+ $self->{format}->set_from_parts($major, $minor, $variant);
+ $self->{fields}{'Format'} = $self->{format}->get();
+ }
+
+ $module->prerequisites() if $module->can('prerequisites');
+ bless $self, $module;
+}
+
+=item $p->get_filename()
+
+Returns the filename of the DSC file.
+
+=cut
+
+sub get_filename {
+ my $self = shift;
+ return File::Spec->catfile($self->{basedir}, $self->{filename});
+}
+
+=item $p->get_files()
+
+Returns the list of files referenced by the source package. The filenames
+usually do not have any path information.
+
+=cut
+
+sub get_files {
+ my $self = shift;
+ return $self->{checksums}->get_files();
+}
+
+=item $p->check_checksums()
+
+Verify the checksums embedded in the DSC file. It requires the presence of
+the other files constituting the source package. If any inconsistency is
+discovered, it immediately errors out. It will make sure at least one strong
+checksum is present.
+
+If the object has been created with the "require_strong_checksums" option,
+then any problem will result in a fatal error.
+
+=cut
+
+sub check_checksums {
+ my $self = shift;
+ my $checksums = $self->{checksums};
+ my $warn_on_weak = 0;
+
+ # add_from_file verify the checksums if they are already existing
+ foreach my $file ($checksums->get_files()) {
+ if (not $checksums->has_strong_checksums($file)) {
+ if ($self->{options}{require_strong_checksums}) {
+ error(g_('source package uses only weak checksums'));
+ } else {
+ $warn_on_weak = 1;
+ }
+ }
+ my $pathname = File::Spec->catfile($self->{basedir}, $file);
+ $checksums->add_from_file($pathname, key => $file);
+ }
+
+ warning(g_('source package uses only weak checksums')) if $warn_on_weak;
+}
+
+sub get_basename {
+ my ($self, $with_revision) = @_;
+ my $f = $self->{fields};
+ unless (exists $f->{'Source'} and exists $f->{'Version'}) {
+ error(g_('%s and %s fields are required to compute the source basename'),
+ 'Source', 'Version');
+ }
+ my $v = Dpkg::Version->new($f->{'Version'});
+ my $vs = $v->as_string(omit_epoch => 1, omit_revision => !$with_revision);
+ return $f->{'Source'} . '_' . $vs;
+}
+
+sub find_original_tarballs {
+ my ($self, %opts) = @_;
+ $opts{extension} //= compression_get_file_extension_regex();
+ $opts{include_main} //= 1;
+ $opts{include_supplementary} //= 1;
+ my $basename = $self->get_basename();
+ my @tar;
+ foreach my $dir ('.', $self->{basedir}, $self->{options}{origtardir}) {
+ next unless defined($dir) and -d $dir;
+ opendir(my $dir_dh, $dir) or syserr(g_('cannot opendir %s'), $dir);
+ push @tar, map { File::Spec->catfile($dir, $_) } grep {
+ ($opts{include_main} and
+ /^\Q$basename\E\.orig\.tar\.$opts{extension}$/) or
+ ($opts{include_supplementary} and
+ /^\Q$basename\E\.orig-[[:alnum:]-]+\.tar\.$opts{extension}$/)
+ } readdir($dir_dh);
+ closedir($dir_dh);
+ }
+ return @tar;
+}
+
+=item $p->get_upstream_signing_key($dir)
+
+Get the filename for the upstream key.
+
+=cut
+
+sub get_upstream_signing_key {
+ my ($self, $dir) = @_;
+
+ return "$dir/debian/upstream/signing-key.asc";
+}
+
+=item $p->armor_original_tarball_signature($bin, $asc)
+
+Convert a signature from binary to ASCII armored form. If the signature file
+does not exist, it is a no-op. If the signature file is already ASCII armored
+then simply copy it, otherwise convert it from binary to ASCII armored form.
+
+=cut
+
+sub armor_original_tarball_signature {
+ my ($self, $bin, $asc) = @_;
+
+ if (-e $bin) {
+ return $self->{openpgp}->armor('SIGNATURE', $bin, $asc);
+ }
+
+ return;
+}
+
+=item $p->check_original_tarball_signature($dir, @asc)
+
+Verify the original upstream tarball signatures @asc using the upstream
+public keys. It requires the origin upstream tarballs, their signatures
+and the upstream signing key, as found in an unpacked source tree $dir.
+If any inconsistency is discovered, it immediately errors out.
+
+=cut
+
+sub check_original_tarball_signature {
+ my ($self, $dir, @asc) = @_;
+
+ my $upstream_key = $self->get_upstream_signing_key($dir);
+ if (not -e $upstream_key) {
+ warning(g_('upstream tarball signatures but no upstream signing key'));
+ return;
+ }
+
+ foreach my $asc (@asc) {
+ my $datafile = $asc =~ s/\.asc$//r;
+
+ info(g_('verifying %s'), $asc);
+ my $rc = $self->{openpgp}->verify($datafile, $asc, $upstream_key);
+ if ($rc) {
+ $self->{report_verify}->(g_('cannot verify upstream tarball signature for %s: %s'),
+ $datafile, openpgp_errorcode_to_string($rc));
+ }
+ }
+}
+
+=item $bool = $p->is_signed()
+
+Returns 1 if the DSC files contains an embedded OpenPGP signature.
+Otherwise returns 0.
+
+=cut
+
+sub is_signed {
+ my $self = shift;
+ return $self->{is_signed};
+}
+
+=item $p->check_signature()
+
+Implement the same OpenPGP signature check that dpkg-source does.
+In case of problems, it prints a warning or errors out.
+
+If the object has been created with the "require_valid_signature" option,
+then any problem will result in a fatal error.
+
+=cut
+
+sub check_signature {
+ my $self = shift;
+ my $dsc = $self->get_filename();
+ my @certs;
+
+ push @certs, $self->{openpgp}->get_trusted_keyrings();
+
+ foreach my $vendor_keyring (run_vendor_hook('package-keyrings')) {
+ if (-r $vendor_keyring) {
+ push @certs, $vendor_keyring;
+ }
+ }
+
+ my $rc = $self->{openpgp}->inline_verify($dsc, undef, @certs);
+ if ($rc) {
+ $self->{report_verify}->(g_('cannot verify inline signature for %s: %s'),
+ $dsc, openpgp_errorcode_to_string($rc));
+ }
+}
+
+sub describe_cmdline_options {
+ return;
+}
+
+sub parse_cmdline_options {
+ my ($self, @opts) = @_;
+ foreach my $option (@opts) {
+ if (not $self->parse_cmdline_option($option)) {
+ warning(g_('%s is not a valid option for %s'), $option, ref $self);
+ }
+ }
+}
+
+sub parse_cmdline_option {
+ return 0;
+}
+
+=item $p->extract($targetdir)
+
+Extracts the source package in the target directory $targetdir. Beware
+that if $targetdir already exists, it will be erased (as long as the
+no_overwrite_dir option is set).
+
+=cut
+
+sub extract {
+ my ($self, $newdirectory) = @_;
+
+ my ($ok, $error) = version_check($self->{fields}{'Version'});
+ if (not $ok) {
+ if ($self->{options}{ignore_bad_version}) {
+ warning($error);
+ } else {
+ error($error);
+ }
+ }
+
+ # Copy orig tarballs
+ if ($self->{options}{copy_orig_tarballs}) {
+ my $basename = $self->get_basename();
+ my ($dirname, $destdir) = fileparse($newdirectory);
+ $destdir ||= './';
+ my $ext = compression_get_file_extension_regex();
+ foreach my $orig (grep { /^\Q$basename\E\.orig(-[[:alnum:]-]+)?\.tar\.$ext$/ }
+ $self->get_files())
+ {
+ my $src = File::Spec->catfile($self->{basedir}, $orig);
+ my $dst = File::Spec->catfile($destdir, $orig);
+ if (not check_files_are_the_same($src, $dst, 1)) {
+ cp($src, $dst)
+ or syserr(g_('cannot copy %s to %s'), $src, $dst);
+ }
+ }
+ }
+
+ # Try extract
+ $self->do_extract($newdirectory);
+
+ # Check for directory traversals.
+ if (not $self->{options}{skip_debianization} and not $self->{no_check}) {
+ # We need to add a trailing slash to handle the debian directory
+ # possibly being a symlink.
+ check_directory_traversal($newdirectory, "$newdirectory/debian/");
+ }
+
+ # Store format if non-standard so that next build keeps the same format
+ if ($self->{fields}{'Format'} and
+ $self->{fields}{'Format'} ne '1.0' and
+ not $self->{options}{skip_debianization})
+ {
+ my $srcdir = File::Spec->catdir($newdirectory, 'debian', 'source');
+ my $format_file = File::Spec->catfile($srcdir, 'format');
+ unless (-e $format_file) {
+ mkdir($srcdir) unless -e $srcdir;
+ $self->{format}->save($format_file);
+ }
+ }
+
+ # Make sure debian/rules is executable
+ my $rules = File::Spec->catfile($newdirectory, 'debian', 'rules');
+ my @s = lstat($rules);
+ if (not scalar(@s)) {
+ unless ($! == ENOENT) {
+ syserr(g_('cannot stat %s'), $rules);
+ }
+ warning(g_('%s does not exist'), $rules)
+ unless $self->{options}{skip_debianization};
+ } elsif (-f _) {
+ chmod($s[2] | 0111, $rules)
+ or syserr(g_('cannot make %s executable'), $rules);
+ } else {
+ warning(g_('%s is not a plain file'), $rules);
+ }
+}
+
+sub do_extract {
+ croak 'Dpkg::Source::Package does not know how to unpack a ' .
+ 'source package; use one of the subclasses';
+}
+
+# Function used specifically during creation of a source package
+
+sub before_build {
+ my ($self, $dir) = @_;
+}
+
+sub build {
+ my $self = shift;
+
+ $self->do_build(@_);
+}
+
+sub after_build {
+ my ($self, $dir) = @_;
+}
+
+sub do_build {
+ croak 'Dpkg::Source::Package does not know how to build a ' .
+ 'source package; use one of the subclasses';
+}
+
+sub can_build {
+ my ($self, $dir) = @_;
+ return (0, 'can_build() has not been overridden');
+}
+
+sub add_file {
+ my ($self, $filename) = @_;
+ my ($fn, $dir) = fileparse($filename);
+ if ($self->{checksums}->has_file($fn)) {
+ croak "tried to add file '$fn' twice";
+ }
+ $self->{checksums}->add_from_file($filename, key => $fn);
+ $self->{checksums}->export_to_control($self->{fields},
+ use_files_for_md5 => 1);
+}
+
+sub commit {
+ my $self = shift;
+
+ $self->do_commit(@_);
+}
+
+sub do_commit {
+ my ($self, $dir) = @_;
+ info(g_("'%s' is not supported by the source format '%s'"),
+ 'dpkg-source --commit', $self->{fields}{'Format'});
+}
+
+sub write_dsc {
+ my ($self, %opts) = @_;
+ my $fields = $self->{fields};
+
+ foreach my $f (keys %{$opts{override}}) {
+ $fields->{$f} = $opts{override}{$f};
+ }
+
+ unless ($opts{nocheck}) {
+ foreach my $f (qw(Source Version Architecture)) {
+ unless (defined($fields->{$f})) {
+ error(g_('missing information for critical output field %s'), $f);
+ }
+ }
+ foreach my $f (qw(Maintainer Standards-Version)) {
+ unless (defined($fields->{$f})) {
+ warning(g_('missing information for output field %s'), $f);
+ }
+ }
+ }
+
+ foreach my $f (keys %{$opts{remove}}) {
+ delete $fields->{$f};
+ }
+
+ my $filename = $opts{filename};
+ $filename //= $self->get_basename(1) . '.dsc';
+ open(my $dsc_fh, '>', $filename)
+ or syserr(g_('cannot write %s'), $filename);
+ $fields->apply_substvars($opts{substvars});
+ $fields->output($dsc_fh);
+ close($dsc_fh);
+}
+
+=back
+
+=head1 CHANGES
+
+=head2 Version 2.02 (dpkg 1.21.10)
+
+New method: armor_original_tarball_signature().
+
+=head2 Version 2.01 (dpkg 1.20.1)
+
+New method: get_upstream_signing_key().
+
+=head2 Version 2.00 (dpkg 1.20.0)
+
+New method: check_original_tarball_signature().
+
+Remove variable: $diff_ignore_default_regexp.
+
+Hide variable: @tar_ignore_default_pattern.
+
+=head2 Version 1.03 (dpkg 1.19.3)
+
+New option: format in new().
+
+=head2 Version 1.02 (dpkg 1.18.7)
+
+New option: require_strong_checksums in check_checksums().
+
+=head2 Version 1.01 (dpkg 1.17.2)
+
+New functions: get_default_diff_ignore_regex(), set_default_diff_ignore_regex(),
+get_default_tar_ignore_pattern()
+
+Deprecated variables: $diff_ignore_default_regexp, @tar_ignore_default_pattern
+
+=head2 Version 1.00 (dpkg 1.16.1)
+
+Mark the module as public.
+
+=cut
+
+1;
diff --git a/scripts/Dpkg/Source/Package/V1.pm b/scripts/Dpkg/Source/Package/V1.pm
new file mode 100644
index 0000000..96e2932
--- /dev/null
+++ b/scripts/Dpkg/Source/Package/V1.pm
@@ -0,0 +1,512 @@
+# Copyright © 2008-2009 Raphaël Hertzog <hertzog@debian.org>
+# Copyright © 2008, 2012-2015 Guillem Jover <guillem@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::Source::Package::V1;
+
+use strict;
+use warnings;
+
+our $VERSION = '0.01';
+
+use Errno qw(ENOENT);
+use Cwd;
+use File::Basename;
+use File::Temp qw(tempfile);
+use File::Spec;
+
+use Dpkg ();
+use Dpkg::Gettext;
+use Dpkg::ErrorHandling;
+use Dpkg::Compression;
+use Dpkg::Source::Archive;
+use Dpkg::Source::Patch;
+use Dpkg::Exit qw(push_exit_handler pop_exit_handler);
+use Dpkg::Source::Functions qw(erasedir);
+use Dpkg::Source::Package::V3::Native;
+
+use parent qw(Dpkg::Source::Package);
+
+our $CURRENT_MINOR_VERSION = '0';
+
+sub init_options {
+ my $self = shift;
+
+ # Don't call $self->SUPER::init_options() on purpose, V1.0 has no
+ # ignore by default
+ if ($self->{options}{diff_ignore_regex}) {
+ $self->{options}{diff_ignore_regex} .= '|(?:^|/)debian/source/local-.*$';
+ } else {
+ $self->{options}{diff_ignore_regex} = '(?:^|/)debian/source/local-.*$';
+ }
+ $self->{options}{diff_ignore_regex} .= '|(?:^|/)debian/files(?:\.new)?$';
+ push @{$self->{options}{tar_ignore}},
+ 'debian/source/local-options',
+ 'debian/source/local-patch-header',
+ 'debian/files',
+ 'debian/files.new';
+ $self->{options}{sourcestyle} //= 'X';
+ $self->{options}{skip_debianization} //= 0;
+ $self->{options}{ignore_bad_version} //= 0;
+ $self->{options}{abort_on_upstream_changes} //= 0;
+
+ # Set default validation checks.
+ $self->{options}{require_valid_signature} //= 0;
+ $self->{options}{require_strong_checksums} //= 0;
+
+ # V1.0 only supports gzip compression.
+ $self->{options}{compression} //= 'gzip';
+ $self->{options}{comp_level} //= compression_get_level('gzip');
+ $self->{options}{comp_ext} //= compression_get_file_extension('gzip');
+}
+
+my @module_cmdline = (
+ {
+ name => '-sa',
+ help => N_('auto select original source'),
+ when => 'build',
+ }, {
+ name => '-sk',
+ help => N_('use packed original source (unpack and keep)'),
+ when => 'build',
+ }, {
+ name => '-sp',
+ help => N_('use packed original source (unpack and remove)'),
+ when => 'build',
+ }, {
+ name => '-su',
+ help => N_('use unpacked original source (pack and keep)'),
+ when => 'build',
+ }, {
+ name => '-sr',
+ help => N_('use unpacked original source (pack and remove)'),
+ when => 'build',
+ }, {
+ name => '-ss',
+ help => N_('trust packed and unpacked original sources are same'),
+ when => 'build',
+ }, {
+ name => '-sn',
+ help => N_('there is no diff, do main tarfile only'),
+ when => 'build',
+ }, {
+ name => '-sA, -sK, -sP, -sU, -sR',
+ help => N_('like -sa, -sk, -sp, -su, -sr but may overwrite'),
+ when => 'build',
+ }, {
+ name => '--abort-on-upstream-changes',
+ help => N_('abort if generated diff has upstream files changes'),
+ when => 'build',
+ }, {
+ name => '-sp',
+ help => N_('leave original source packed in current directory'),
+ when => 'extract',
+ }, {
+ name => '-su',
+ help => N_('do not copy original source to current directory'),
+ when => 'extract',
+ }, {
+ name => '-sn',
+ help => N_('unpack original source tree too'),
+ when => 'extract',
+ }, {
+ name => '--skip-debianization',
+ help => N_('do not apply debian diff to upstream sources'),
+ when => 'extract',
+ },
+);
+
+sub describe_cmdline_options {
+ return @module_cmdline;
+}
+
+sub parse_cmdline_option {
+ my ($self, $opt) = @_;
+ my $o = $self->{options};
+ if ($opt =~ m/^-s([akpursnAKPUR])$/) {
+ warning(g_('-s%s option overrides earlier -s%s option'), $1,
+ $o->{sourcestyle}) if $o->{sourcestyle} ne 'X';
+ $o->{sourcestyle} = $1;
+ $o->{copy_orig_tarballs} = 0 if $1 eq 'n'; # Extract option -sn
+ return 1;
+ } elsif ($opt eq '--skip-debianization') {
+ $o->{skip_debianization} = 1;
+ return 1;
+ } elsif ($opt eq '--ignore-bad-version') {
+ $o->{ignore_bad_version} = 1;
+ return 1;
+ } elsif ($opt eq '--abort-on-upstream-changes') {
+ $o->{abort_on_upstream_changes} = 1;
+ return 1;
+ }
+ return 0;
+}
+
+sub do_extract {
+ my ($self, $newdirectory) = @_;
+ my $sourcestyle = $self->{options}{sourcestyle};
+ my $fields = $self->{fields};
+
+ $sourcestyle =~ y/X/p/;
+ unless ($sourcestyle =~ m/[pun]/) {
+ usageerr(g_('source handling style -s%s not allowed with -x'),
+ $sourcestyle);
+ }
+
+ my $basename = $self->get_basename();
+ my $basenamerev = $self->get_basename(1);
+
+ # V1.0 only supports gzip compression
+ my ($tarfile, $difffile);
+ my $tarsign;
+ foreach my $file ($self->get_files()) {
+ if ($file =~ /^(?:\Q$basename\E\.orig|\Q$basenamerev\E)\.tar\.gz$/) {
+ error(g_('multiple tarfiles in v1.0 source package')) if $tarfile;
+ $tarfile = $file;
+ } elsif ($file =~ /^\Q$basename\E\.orig\.tar\.gz\.asc$/) {
+ $tarsign = $file;
+ } elsif ($file =~ /^\Q$basenamerev\E\.diff\.gz$/) {
+ $difffile = $file;
+ } else {
+ error(g_('unrecognized file for a %s source package: %s'),
+ 'v1.0', $file);
+ }
+ }
+
+ error(g_('no tarfile in Files field')) unless $tarfile;
+ my $native = $difffile ? 0 : 1;
+ if ($native and ($tarfile =~ /\.orig\.tar\.gz$/)) {
+ warning(g_('native package with .orig.tar'));
+ $native = 0; # V3::Native doesn't handle orig.tar
+ }
+
+ if ($native) {
+ Dpkg::Source::Package::V3::Native::do_extract($self, $newdirectory);
+ } else {
+ my $expectprefix = $newdirectory;
+ $expectprefix .= '.orig';
+
+ if ($self->{options}{no_overwrite_dir} and -e $newdirectory) {
+ error(g_('unpack target exists: %s'), $newdirectory);
+ } else {
+ erasedir($newdirectory);
+ }
+ if (-e $expectprefix) {
+ rename($expectprefix, "$newdirectory.tmp-keep")
+ or syserr(g_("unable to rename '%s' to '%s'"), $expectprefix,
+ "$newdirectory.tmp-keep");
+ }
+
+ info(g_('unpacking %s'), $tarfile);
+ my $tar = Dpkg::Source::Archive->new(
+ filename => File::Spec->catfile($self->{basedir}, $tarfile),
+ );
+ $tar->extract($expectprefix);
+
+ if ($sourcestyle =~ /u/) {
+ # -su: keep .orig directory unpacked
+ if (-e "$newdirectory.tmp-keep") {
+ error(g_('unable to keep orig directory (already exists)'));
+ }
+ system('cp', '-ar', '--', $expectprefix, "$newdirectory.tmp-keep");
+ subprocerr("cp $expectprefix to $newdirectory.tmp-keep") if $?;
+ }
+
+ rename($expectprefix, $newdirectory)
+ or syserr(g_('failed to rename newly-extracted %s to %s'),
+ $expectprefix, $newdirectory);
+
+ # rename the copied .orig directory
+ if (-e "$newdirectory.tmp-keep") {
+ rename("$newdirectory.tmp-keep", $expectprefix)
+ or syserr(g_('failed to rename saved %s to %s'),
+ "$newdirectory.tmp-keep", $expectprefix);
+ }
+ }
+
+ if ($difffile and not $self->{options}{skip_debianization}) {
+ my $patch = File::Spec->catfile($self->{basedir}, $difffile);
+ info(g_('applying %s'), $difffile);
+ my $patch_obj = Dpkg::Source::Patch->new(filename => $patch);
+ my $analysis = $patch_obj->apply($newdirectory, force_timestamp => 1);
+ my @files = grep { ! m{^\Q$newdirectory\E/debian/} }
+ sort keys %{$analysis->{filepatched}};
+ info(g_('upstream files that have been modified: %s'),
+ "\n " . join("\n ", @files)) if scalar @files;
+ }
+}
+
+sub can_build {
+ my ($self, $dir) = @_;
+
+ # As long as we can use gzip, we can do it as we have
+ # native packages as fallback
+ return (0, g_('only supports gzip compression'))
+ unless $self->{options}{compression} eq 'gzip';
+ return 1;
+}
+
+sub do_build {
+ my ($self, $dir) = @_;
+ my $sourcestyle = $self->{options}{sourcestyle};
+ my @argv = @{$self->{options}{ARGV}};
+ my @tar_ignore = map { "--exclude=$_" } @{$self->{options}{tar_ignore}};
+ my $diff_ignore_regex = $self->{options}{diff_ignore_regex};
+
+ if (scalar(@argv) > 1) {
+ usageerr(g_('-b takes at most a directory and an orig source ' .
+ 'argument (with v1.0 source package)'));
+ }
+
+ $sourcestyle =~ y/X/a/;
+ unless ($sourcestyle =~ m/[akpursnAKPUR]/) {
+ usageerr(g_('source handling style -s%s not allowed with -b'),
+ $sourcestyle);
+ }
+
+ my $sourcepackage = $self->{fields}{'Source'};
+ my $basenamerev = $self->get_basename(1);
+ my $basename = $self->get_basename();
+ my $basedirname = $basename;
+ $basedirname =~ s/_/-/;
+
+ # Try to find a .orig tarball for the package
+ my $origdir = "$dir.orig";
+ my $origtargz = $self->get_basename() . '.orig.tar.gz';
+ if (-e $origtargz) {
+ unless (-f $origtargz) {
+ error(g_("packed orig '%s' exists but is not a plain file"), $origtargz);
+ }
+ } else {
+ $origtargz = undef;
+ }
+
+ if (@argv) {
+ # We have a second-argument <orig-dir> or <orig-targz>, check what it
+ # is to decide the mode to use
+ my $origarg = shift(@argv);
+ if (length($origarg)) {
+ stat($origarg)
+ or syserr(g_('cannot stat orig argument %s'), $origarg);
+ if (-d _) {
+ $origdir = File::Spec->catdir($origarg);
+
+ $sourcestyle =~ y/aA/rR/;
+ unless ($sourcestyle =~ m/[ursURS]/) {
+ error(g_('orig argument is unpacked but source handling ' .
+ 'style -s%s calls for packed (.orig.tar.<ext>)'),
+ $sourcestyle);
+ }
+ } elsif (-f _) {
+ $origtargz = $origarg;
+ $sourcestyle =~ y/aA/pP/;
+ unless ($sourcestyle =~ m/[kpsKPS]/) {
+ error(g_('orig argument is packed but source handling ' .
+ 'style -s%s calls for unpacked (.orig/)'),
+ $sourcestyle);
+ }
+ } else {
+ error(g_('orig argument %s is not a plain file or directory'),
+ $origarg);
+ }
+ } else {
+ $sourcestyle =~ y/aA/nn/;
+ unless ($sourcestyle =~ m/n/) {
+ error(g_('orig argument is empty (means no orig, no diff) ' .
+ 'but source handling style -s%s wants something'),
+ $sourcestyle);
+ }
+ }
+ } elsif ($sourcestyle =~ m/[aA]/) {
+ # We have no explicit <orig-dir> or <orig-targz>, try to use
+ # a .orig tarball first, then a .orig directory and fall back to
+ # creating a native .tar.gz
+ if ($origtargz) {
+ $sourcestyle =~ y/aA/pP/; # .orig.tar.<ext>
+ } else {
+ if (stat($origdir)) {
+ unless (-d _) {
+ error(g_("unpacked orig '%s' exists but is not a directory"),
+ $origdir);
+ }
+ $sourcestyle =~ y/aA/rR/; # .orig directory
+ } elsif ($! != ENOENT) {
+ syserr(g_("unable to stat putative unpacked orig '%s'"), $origdir);
+ } else {
+ $sourcestyle =~ y/aA/nn/; # Native tar.gz
+ }
+ }
+ }
+
+ my $v = Dpkg::Version->new($self->{fields}->{'Version'});
+ if ($sourcestyle =~ m/[kpursKPUR]/) {
+ error(g_('non-native package version does not contain a revision'))
+ if $v->is_native();
+ } else {
+ # TODO: This will become fatal in the near future.
+ warning(g_('native package version may not have a revision'))
+ unless $v->is_native();
+ }
+
+ my ($dirname, $dirbase) = fileparse($dir);
+ if ($dirname ne $basedirname) {
+ warning(g_("source directory '%s' is not <sourcepackage>" .
+ "-<upstreamversion> '%s'"), $dir, $basedirname);
+ }
+
+ my ($tarname, $tardirname, $tardirbase);
+ my $tarsign;
+ if ($sourcestyle ne 'n') {
+ my ($origdirname, $origdirbase) = fileparse($origdir);
+
+ if ($origdirname ne "$basedirname.orig") {
+ warning(g_('.orig directory name %s is not <package>' .
+ '-<upstreamversion> (wanted %s)'),
+ $origdirname, "$basedirname.orig");
+ }
+ $tardirbase = $origdirbase;
+ $tardirname = $origdirname;
+
+ $tarname = $origtargz || "$basename.orig.tar.gz";
+ $tarsign = "$tarname.asc";
+ unless ($tarname =~ /\Q$basename\E\.orig\.tar\.gz/) {
+ warning(g_('.orig.tar name %s is not <package>_<upstreamversion>' .
+ '.orig.tar (wanted %s)'),
+ $tarname, "$basename.orig.tar.gz");
+ }
+ }
+
+ if ($sourcestyle eq 'n') {
+ $self->{options}{ARGV} = []; # ensure we have no error
+ Dpkg::Source::Package::V3::Native::do_build($self, $dir);
+ } elsif ($sourcestyle =~ m/[urUR]/) {
+ if (stat($tarname)) {
+ unless ($sourcestyle =~ m/[UR]/) {
+ error(g_("tarfile '%s' already exists, not overwriting, " .
+ 'giving up; use -sU or -sR to override'), $tarname);
+ }
+ } elsif ($! != ENOENT) {
+ syserr(g_("unable to check for existence of '%s'"), $tarname);
+ }
+
+ info(g_('building %s in %s'),
+ $sourcepackage, $tarname);
+
+ my ($ntfh, $newtar) = tempfile("$tarname.new.XXXXXX",
+ DIR => getcwd(), UNLINK => 0);
+ my $tar = Dpkg::Source::Archive->new(filename => $newtar,
+ compression => compression_guess_from_filename($tarname),
+ compression_level => $self->{options}{comp_level});
+ $tar->create(options => \@tar_ignore, chdir => $tardirbase);
+ $tar->add_directory($tardirname);
+ $tar->finish();
+ rename($newtar, $tarname)
+ or syserr(g_("unable to rename '%s' (newly created) to '%s'"),
+ $newtar, $tarname);
+ chmod(0666 &~ umask(), $tarname)
+ or syserr(g_("unable to change permission of '%s'"), $tarname);
+ } else {
+ info(g_('building %s using existing %s'),
+ $sourcepackage, $tarname);
+ }
+
+ if ($tarname) {
+ $self->add_file($tarname);
+ if (-e "$tarname.sig" and not -e "$tarname.asc") {
+ $self->armor_original_tarball_signature("$tarname.sig", "$tarname.asc");
+ }
+ }
+ if ($tarsign and -e $tarsign) {
+ $self->check_original_tarball_signature($dir, $tarsign);
+
+ info(g_('building %s using existing %s'), $sourcepackage, $tarsign);
+ $self->add_file($tarsign);
+ } else {
+ my $key = $self->get_upstream_signing_key($dir);
+ if (-e $key) {
+ warning(g_('upstream signing key but no upstream tarball signature'));
+ }
+ }
+
+ if ($sourcestyle =~ m/[kpKP]/) {
+ if (stat($origdir)) {
+ unless ($sourcestyle =~ m/[KP]/) {
+ error(g_("orig directory '%s' already exists, not overwriting, ".
+ 'giving up; use -sA, -sK or -sP to override'),
+ $origdir);
+ }
+ erasedir($origdir);
+ } elsif ($! != ENOENT) {
+ syserr(g_("unable to check for existence of orig directory '%s'"),
+ $origdir);
+ }
+
+ my $tar = Dpkg::Source::Archive->new(filename => $origtargz);
+ $tar->extract($origdir);
+ }
+
+ my $ur; # Unrepresentable changes
+ if ($sourcestyle =~ m/[kpursKPUR]/) {
+ my $diffname = "$basenamerev.diff.gz";
+ info(g_('building %s in %s'),
+ $sourcepackage, $diffname);
+ my ($ndfh, $newdiffgz) = tempfile("$diffname.new.XXXXXX",
+ DIR => getcwd(), UNLINK => 0);
+ push_exit_handler(sub { unlink($newdiffgz) });
+ my $diff = Dpkg::Source::Patch->new(filename => $newdiffgz,
+ compression => 'gzip',
+ compression_level => $self->{options}{comp_level});
+ $diff->create();
+ $diff->add_diff_directory($origdir, $dir,
+ basedirname => $basedirname,
+ diff_ignore_regex => $diff_ignore_regex,
+ options => []); # Force empty set of options to drop the
+ # default -p option
+ $diff->finish() || $ur++;
+ pop_exit_handler();
+
+ my $analysis = $diff->analyze($origdir);
+ my @files = grep { ! m{^debian/} }
+ map { s{^[^/]+/+}{}r }
+ sort keys %{$analysis->{filepatched}};
+ if (scalar @files) {
+ warning(g_('the diff modifies the following upstream files: %s'),
+ "\n " . join("\n ", @files));
+ info(g_("use the '3.0 (quilt)' format to have separate and " .
+ 'documented changes to upstream files, see dpkg-source(1)'));
+ error(g_('aborting due to --abort-on-upstream-changes'))
+ if $self->{options}{abort_on_upstream_changes};
+ }
+
+ rename($newdiffgz, $diffname)
+ or syserr(g_("unable to rename '%s' (newly created) to '%s'"),
+ $newdiffgz, $diffname);
+ chmod(0666 &~ umask(), $diffname)
+ or syserr(g_("unable to change permission of '%s'"), $diffname);
+
+ $self->add_file($diffname);
+ }
+
+ if ($sourcestyle =~ m/[prPR]/) {
+ erasedir($origdir);
+ }
+
+ if ($ur) {
+ errormsg(g_('unrepresentable changes to source'));
+ exit(1);
+ }
+}
+
+1;
diff --git a/scripts/Dpkg/Source/Package/V2.pm b/scripts/Dpkg/Source/Package/V2.pm
new file mode 100644
index 0000000..b3c21e5
--- /dev/null
+++ b/scripts/Dpkg/Source/Package/V2.pm
@@ -0,0 +1,744 @@
+# Copyright © 2008-2011 Raphaël Hertzog <hertzog@debian.org>
+# Copyright © 2008-2015 Guillem Jover <guillem@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::Source::Package::V2;
+
+use strict;
+use warnings;
+
+our $VERSION = '0.01';
+
+use List::Util qw(first);
+use Cwd;
+use File::Basename;
+use File::Temp qw(tempfile tempdir);
+use File::Path qw(make_path);
+use File::Spec;
+use File::Find;
+use File::Copy;
+
+use Dpkg::Gettext;
+use Dpkg::ErrorHandling;
+use Dpkg::File;
+use Dpkg::Path qw(find_command);
+use Dpkg::Compression;
+use Dpkg::Source::Archive;
+use Dpkg::Source::Patch;
+use Dpkg::Source::BinaryFiles;
+use Dpkg::Exit qw(push_exit_handler pop_exit_handler);
+use Dpkg::Source::Functions qw(erasedir chmod_if_needed fs_time);
+use Dpkg::Vendor qw(run_vendor_hook);
+use Dpkg::Control;
+use Dpkg::Changelog::Parse;
+
+use parent qw(Dpkg::Source::Package);
+
+our $CURRENT_MINOR_VERSION = '0';
+
+sub init_options {
+ my $self = shift;
+ $self->SUPER::init_options();
+ $self->{options}{include_removal} //= 0;
+ $self->{options}{include_timestamp} //= 0;
+ $self->{options}{include_binaries} //= 0;
+ $self->{options}{preparation} //= 1;
+ $self->{options}{skip_patches} //= 0;
+ $self->{options}{unapply_patches} //= 'auto';
+ $self->{options}{skip_debianization} //= 0;
+ $self->{options}{create_empty_orig} //= 0;
+ $self->{options}{auto_commit} //= 0;
+ $self->{options}{ignore_bad_version} //= 0;
+}
+
+my @module_cmdline = (
+ {
+ name => '--include-removal',
+ help => N_('include removed files in the patch'),
+ when => 'build',
+ }, {
+ name => '--include-timestamp',
+ help => N_('include timestamp in the patch'),
+ when => 'build',
+ }, {
+ name => '--include-binaries',
+ help => N_('include binary files in the tarball'),
+ when => 'build',
+ }, {
+ name => '--no-preparation',
+ help => N_('do not prepare build tree by applying patches'),
+ when => 'build',
+ }, {
+ name => '--no-unapply-patches',
+ help => N_('do not unapply patches if previously applied'),
+ when => 'build',
+ }, {
+ name => '--unapply-patches',
+ help => N_('unapply patches if previously applied (default)'),
+ when => 'build',
+ }, {
+ name => '--create-empty-orig',
+ help => N_('create an empty original tarball if missing'),
+ when => 'build',
+ }, {
+ name => '--abort-on-upstream-changes',
+ help => N_('abort if generated diff has upstream files changes'),
+ when => 'build',
+ }, {
+ name => '--auto-commit',
+ help => N_('record generated patches, instead of aborting'),
+ when => 'build',
+ }, {
+ name => '--skip-debianization',
+ help => N_('do not extract debian tarball into upstream sources'),
+ when => 'extract',
+ }, {
+ name => '--skip-patches',
+ help => N_('do not apply patches at the end of the extraction'),
+ when => 'extract',
+ }
+);
+
+sub describe_cmdline_options {
+ return @module_cmdline;
+}
+
+sub parse_cmdline_option {
+ my ($self, $opt) = @_;
+ if ($opt eq '--include-removal') {
+ $self->{options}{include_removal} = 1;
+ return 1;
+ } elsif ($opt eq '--include-timestamp') {
+ $self->{options}{include_timestamp} = 1;
+ return 1;
+ } elsif ($opt eq '--include-binaries') {
+ $self->{options}{include_binaries} = 1;
+ return 1;
+ } elsif ($opt eq '--no-preparation') {
+ $self->{options}{preparation} = 0;
+ return 1;
+ } elsif ($opt eq '--skip-patches') {
+ $self->{options}{skip_patches} = 1;
+ return 1;
+ } elsif ($opt eq '--unapply-patches') {
+ $self->{options}{unapply_patches} = 'yes';
+ return 1;
+ } elsif ($opt eq '--no-unapply-patches') {
+ $self->{options}{unapply_patches} = 'no';
+ return 1;
+ } elsif ($opt eq '--skip-debianization') {
+ $self->{options}{skip_debianization} = 1;
+ return 1;
+ } elsif ($opt eq '--create-empty-orig') {
+ $self->{options}{create_empty_orig} = 1;
+ return 1;
+ } elsif ($opt eq '--abort-on-upstream-changes') {
+ $self->{options}{auto_commit} = 0;
+ return 1;
+ } elsif ($opt eq '--auto-commit') {
+ $self->{options}{auto_commit} = 1;
+ return 1;
+ } elsif ($opt eq '--ignore-bad-version') {
+ $self->{options}{ignore_bad_version} = 1;
+ return 1;
+ }
+ return 0;
+}
+
+sub do_extract {
+ my ($self, $newdirectory) = @_;
+ my $fields = $self->{fields};
+
+ my $basename = $self->get_basename();
+ my $basenamerev = $self->get_basename(1);
+
+ my ($tarfile, $debianfile, %addonfile, %seen);
+ my ($tarsign, %addonsign);
+ my $re_ext = compression_get_file_extension_regex();
+ foreach my $file ($self->get_files()) {
+ my $uncompressed = $file;
+ $uncompressed =~ s/\.$re_ext$/.*/;
+ $uncompressed =~ s/\.$re_ext\.asc$/.*.asc/;
+ error(g_('duplicate files in %s source package: %s'), 'v2.0',
+ $uncompressed) if $seen{$uncompressed};
+ $seen{$uncompressed} = 1;
+ if ($file =~ /^\Q$basename\E\.orig\.tar\.$re_ext$/) {
+ $tarfile = $file;
+ } elsif ($file =~ /^\Q$basename\E\.orig\.tar\.$re_ext\.asc$/) {
+ $tarsign = $file;
+ } elsif ($file =~ /^\Q$basename\E\.orig-([[:alnum:]-]+)\.tar\.$re_ext$/) {
+ $addonfile{$1} = $file;
+ } elsif ($file =~ /^\Q$basename\E\.orig-([[:alnum:]-]+)\.tar\.$re_ext\.asc$/) {
+ $addonsign{$1} = $file;
+ } elsif ($file =~ /^\Q$basenamerev\E\.debian\.tar\.$re_ext$/) {
+ $debianfile = $file;
+ } else {
+ error(g_('unrecognized file for a %s source package: %s'),
+ 'v2.0', $file);
+ }
+ }
+
+ unless ($tarfile and $debianfile) {
+ error(g_('missing orig.tar or debian.tar file in v2.0 source package'));
+ }
+ if ($tarsign and $tarfile ne substr $tarsign, 0, -4) {
+ error(g_('mismatched orig.tar %s for signature %s in source package'),
+ $tarfile, $tarsign);
+ }
+ foreach my $name (keys %addonsign) {
+ error(g_('missing addon orig.tar for signature %s in source package'),
+ $addonsign{$name})
+ if not exists $addonfile{$name};
+ error(g_('mismatched addon orig.tar %s for signature %s in source package'),
+ $addonfile{$name}, $addonsign{$name})
+ if $addonfile{$name} ne substr $addonsign{$name}, 0, -4;
+ }
+
+ if ($self->{options}{no_overwrite_dir} and -e $newdirectory) {
+ error(g_('unpack target exists: %s'), $newdirectory);
+ } else {
+ erasedir($newdirectory);
+ }
+
+ # Extract main tarball
+ info(g_('unpacking %s'), $tarfile);
+ my $tar = Dpkg::Source::Archive->new(
+ filename => File::Spec->catfile($self->{basedir}, $tarfile),
+ );
+ $tar->extract($newdirectory,
+ options => [ '--anchored', '--no-wildcards-match-slash',
+ '--exclude', '*/.pc', '--exclude', '.pc' ]);
+ # The .pc exclusion is only needed for 3.0 (quilt) and to avoid
+ # having an upstream tarball provide a directory with symlinks
+ # that would be blindly followed when applying the patches
+
+ # Extract additional orig tarballs
+ foreach my $subdir (sort keys %addonfile) {
+ my $file = $addonfile{$subdir};
+ info(g_('unpacking %s'), $file);
+
+ # If the pathname is an empty directory, just silently remove it, as
+ # it might be part of a git repository, as a submodule for example.
+ rmdir "$newdirectory/$subdir";
+ if (-e "$newdirectory/$subdir") {
+ warning(g_("required removal of '%s' installed by original tarball"),
+ $subdir);
+ erasedir("$newdirectory/$subdir");
+ }
+ $tar = Dpkg::Source::Archive->new(
+ filename => File::Spec->catfile($self->{basedir}, $file),
+ );
+ $tar->extract("$newdirectory/$subdir");
+ }
+
+ # Stop here if debianization is not wanted
+ return if $self->{options}{skip_debianization};
+
+ # Extract debian tarball after removing the debian directory
+ info(g_('unpacking %s'), $debianfile);
+ erasedir("$newdirectory/debian");
+ $tar = Dpkg::Source::Archive->new(
+ filename => File::Spec->catfile($self->{basedir}, $debianfile),
+ );
+ $tar->extract($newdirectory, in_place => 1);
+
+ # Apply patches (in a separate method as it might be overridden)
+ $self->apply_patches($newdirectory, usage => 'unpack')
+ unless $self->{options}{skip_patches};
+}
+
+sub get_autopatch_name {
+ return 'zz_debian-diff-auto';
+}
+
+sub _get_patches {
+ my ($self, $dir, %opts) = @_;
+ $opts{skip_auto} //= 0;
+ my @patches;
+ my $pd = "$dir/debian/patches";
+ my $auto_patch = $self->get_autopatch_name();
+ if (-d $pd) {
+ opendir(my $dir_dh, $pd) or syserr(g_('cannot opendir %s'), $pd);
+ foreach my $patch (sort readdir($dir_dh)) {
+ # patches match same rules as run-parts
+ next unless $patch =~ /^[\w-]+$/ and -f "$pd/$patch";
+ next if $opts{skip_auto} and $patch eq $auto_patch;
+ push @patches, $patch;
+ }
+ closedir($dir_dh);
+ }
+ return @patches;
+}
+
+sub apply_patches {
+ my ($self, $dir, %opts) = @_;
+ $opts{skip_auto} //= 0;
+ my @patches = $self->_get_patches($dir, %opts);
+ return unless scalar(@patches);
+ my $applied = File::Spec->catfile($dir, 'debian', 'patches', '.dpkg-source-applied');
+ open(my $applied_fh, '>', $applied)
+ or syserr(g_('cannot write %s'), $applied);
+ print { $applied_fh } "# During $opts{usage}\n";
+ my $timestamp = fs_time($applied);
+ foreach my $patch ($self->_get_patches($dir, %opts)) {
+ my $path = File::Spec->catfile($dir, 'debian', 'patches', $patch);
+ info(g_('applying %s'), $patch) unless $opts{skip_auto};
+ my $patch_obj = Dpkg::Source::Patch->new(filename => $path);
+ $patch_obj->apply($dir, force_timestamp => 1,
+ timestamp => $timestamp,
+ add_options => [ '-E' ]);
+ print { $applied_fh } "$patch\n";
+ }
+ close($applied_fh);
+}
+
+sub unapply_patches {
+ my ($self, $dir, %opts) = @_;
+ my @patches = reverse($self->_get_patches($dir, %opts));
+ return unless scalar(@patches);
+ my $applied = File::Spec->catfile($dir, 'debian', 'patches', '.dpkg-source-applied');
+ my $timestamp = fs_time($applied);
+ foreach my $patch (@patches) {
+ my $path = File::Spec->catfile($dir, 'debian', 'patches', $patch);
+ info(g_('unapplying %s'), $patch) unless $opts{quiet};
+ my $patch_obj = Dpkg::Source::Patch->new(filename => $path);
+ $patch_obj->apply($dir, force_timestamp => 1, verbose => 0,
+ timestamp => $timestamp,
+ add_options => [ '-E', '-R' ]);
+ }
+ unlink($applied);
+}
+
+sub _upstream_tarball_template {
+ my $self = shift;
+ my $ext = '{' . join(',',
+ sort map {
+ compression_get_file_extension($_)
+ } compression_get_list()) . '}';
+ return File::Spec->catfile('..', $self->get_basename() . ".orig.tar.$ext");
+}
+
+sub can_build {
+ my ($self, $dir) = @_;
+ return 1 if $self->find_original_tarballs(include_supplementary => 0);
+ return 1 if $self->{options}{create_empty_orig} and
+ $self->find_original_tarballs(include_main => 0);
+ return (0, sprintf(g_('no upstream tarball found at %s'),
+ $self->_upstream_tarball_template()));
+}
+
+sub before_build {
+ my ($self, $dir) = @_;
+ $self->check_patches_applied($dir) if $self->{options}{preparation};
+}
+
+sub after_build {
+ my ($self, $dir) = @_;
+ my $applied = File::Spec->catfile($dir, 'debian', 'patches', '.dpkg-source-applied');
+ my $reason = '';
+ if (-e $applied) {
+ $reason = file_slurp($applied);
+ }
+ my $opt_unapply = $self->{options}{unapply_patches};
+ if (($opt_unapply eq 'auto' and $reason =~ /^# During preparation/) or
+ $opt_unapply eq 'yes') {
+ $self->unapply_patches($dir);
+ }
+}
+
+sub prepare_build {
+ my ($self, $dir) = @_;
+ $self->{diff_options} = {
+ diff_ignore_regex => $self->{options}{diff_ignore_regex} .
+ '|(^|/)debian/patches/.dpkg-source-applied$',
+ include_removal => $self->{options}{include_removal},
+ include_timestamp => $self->{options}{include_timestamp},
+ use_dev_null => 1,
+ };
+ push @{$self->{options}{tar_ignore}}, 'debian/patches/.dpkg-source-applied';
+ $self->check_patches_applied($dir) if $self->{options}{preparation};
+ if ($self->{options}{create_empty_orig} and
+ not $self->find_original_tarballs(include_supplementary => 0))
+ {
+ # No main orig.tar, create a dummy one
+ my $filename = $self->get_basename() . '.orig.tar.' .
+ $self->{options}{comp_ext};
+ my $tar = Dpkg::Source::Archive->new(filename => $filename,
+ compression_level => $self->{options}{comp_level});
+ $tar->create();
+ $tar->finish();
+ }
+}
+
+sub check_patches_applied {
+ my ($self, $dir) = @_;
+ my $applied = File::Spec->catfile($dir, 'debian', 'patches', '.dpkg-source-applied');
+ unless (-e $applied) {
+ info(g_('patches are not applied, applying them now'));
+ $self->apply_patches($dir, usage => 'preparation');
+ }
+}
+
+sub _generate_patch {
+ my ($self, $dir, %opts) = @_;
+ my ($dirname, $updir) = fileparse($dir);
+ my $basedirname = $self->get_basename();
+ $basedirname =~ s/_/-/;
+
+ # Identify original tarballs
+ my ($tarfile, %addonfile);
+ my $comp_ext_regex = compression_get_file_extension_regex();
+ my @origtarfiles;
+ my @origtarsigns;
+ foreach my $file (sort $self->find_original_tarballs()) {
+ if ($file =~ /\.orig\.tar\.$comp_ext_regex$/) {
+ if (defined($tarfile)) {
+ error(g_('several orig.tar files found (%s and %s) but only ' .
+ 'one is allowed'), $tarfile, $file);
+ }
+ $tarfile = $file;
+ } elsif ($file =~ /\.orig-([[:alnum:]-]+)\.tar\.$comp_ext_regex$/) {
+ $addonfile{$1} = $file;
+ } else {
+ next;
+ }
+
+ push @origtarfiles, $file;
+ $self->add_file($file);
+
+ # Check for an upstream signature.
+ if (-e "$file.sig" and not -e "$file.asc") {
+ $self->armor_original_tarball_signature("$file.sig", "$file.asc");
+ }
+ if (-e "$file.asc") {
+ push @origtarfiles, "$file.asc";
+ push @origtarsigns, "$file.asc";
+ $self->add_file("$file.asc")
+ }
+ }
+
+ error(g_('no upstream tarball found at %s'),
+ $self->_upstream_tarball_template()) unless $tarfile;
+
+ if ($opts{usage} eq 'build') {
+ if (@origtarsigns) {
+ $self->check_original_tarball_signature($dir, @origtarsigns);
+ } else {
+ my $key = $self->get_upstream_signing_key($dir);
+ if (-e $key) {
+ warning(g_('upstream signing key but no upstream tarball signature'));
+ }
+ }
+
+ foreach my $origtarfile (@origtarfiles) {
+ info(g_('building %s using existing %s'),
+ $self->{fields}{'Source'}, $origtarfile);
+ }
+ }
+
+ # Unpack a second copy for comparison
+ my $tmp = tempdir("$dirname.orig.XXXXXX", DIR => $updir);
+ push_exit_handler(sub { erasedir($tmp) });
+
+ # Extract main tarball
+ my $tar = Dpkg::Source::Archive->new(filename => $tarfile);
+ $tar->extract($tmp);
+
+ # Extract additional orig tarballs
+ foreach my $subdir (keys %addonfile) {
+ my $file = $addonfile{$subdir};
+ $tar = Dpkg::Source::Archive->new(filename => $file);
+ $tar->extract("$tmp/$subdir");
+ }
+
+ # Copy over the debian directory
+ erasedir("$tmp/debian");
+ system('cp', '-a', '--', "$dir/debian", "$tmp/");
+ subprocerr(g_('copy of the debian directory')) if $?;
+
+ # Apply all patches except the last automatic one
+ $opts{skip_auto} //= 0;
+ $self->apply_patches($tmp, skip_auto => $opts{skip_auto}, usage => 'build');
+
+ # Create a patch
+ my ($difffh, $tmpdiff) = tempfile($self->get_basename(1) . '.diff.XXXXXX',
+ TMPDIR => 1, UNLINK => 0);
+ push_exit_handler(sub { unlink($tmpdiff) });
+ my $diff = Dpkg::Source::Patch->new(filename => $tmpdiff,
+ compression => 'none');
+ $diff->create();
+ $diff->set_header(sub {
+ if ($opts{header_from} and -e $opts{header_from}) {
+ my $header_from = Dpkg::Source::Patch->new(
+ filename => $opts{header_from});
+ my $analysis = $header_from->analyze($dir, verbose => 0);
+ return $analysis->{patchheader};
+ } else {
+ return $self->_get_patch_header($dir);
+ }
+ });
+ $diff->add_diff_directory($tmp, $dir, basedirname => $basedirname,
+ %{$self->{diff_options}},
+ handle_binary_func => $opts{handle_binary},
+ order_from => $opts{order_from});
+ error(g_('unrepresentable changes to source')) if not $diff->finish();
+
+ if (-s $tmpdiff) {
+ info(g_('local changes detected, the modified files are:'));
+ my $analysis = $diff->analyze($dir, verbose => 0);
+ foreach my $fn (sort keys %{$analysis->{filepatched}}) {
+ print " $fn\n";
+ }
+ }
+
+ # Remove the temporary directory
+ erasedir($tmp);
+ pop_exit_handler();
+ pop_exit_handler();
+
+ return $tmpdiff;
+}
+
+sub do_build {
+ my ($self, $dir) = @_;
+ my @argv = @{$self->{options}{ARGV}};
+ if (scalar(@argv)) {
+ usageerr(g_("-b takes only one parameter with format '%s'"),
+ $self->{fields}{'Format'});
+ }
+ $self->prepare_build($dir);
+
+ my $include_binaries = $self->{options}{include_binaries};
+ my @tar_ignore = map { "--exclude=$_" } @{$self->{options}{tar_ignore}};
+
+ my $sourcepackage = $self->{fields}{'Source'};
+ my $basenamerev = $self->get_basename(1);
+
+ # Check if the debian directory contains unwanted binary files
+ my $binaryfiles = Dpkg::Source::BinaryFiles->new($dir);
+
+ $binaryfiles->detect_binary_files(
+ exclude_globs => $self->{options}{tar_ignore},
+ include_binaries => $include_binaries,
+ );
+
+ # Handle modified binary files detected by the auto-patch generation
+ my $handle_binary = sub {
+ my ($self, $old, $new, %opts) = @_;
+
+ my $file = $opts{filename};
+ $binaryfiles->new_binary_found($file);
+ unless ($include_binaries or $binaryfiles->binary_is_allowed($file)) {
+ errormsg(g_('cannot represent change to %s: %s'), $file,
+ g_('binary file contents changed'));
+ errormsg(g_('add %s in debian/source/include-binaries if you want ' .
+ 'to store the modified binary in the debian tarball'),
+ $file);
+ $self->register_error();
+ }
+ };
+
+ # Create a patch
+ my $autopatch = File::Spec->catfile($dir, 'debian', 'patches',
+ $self->get_autopatch_name());
+ my $tmpdiff = $self->_generate_patch($dir, order_from => $autopatch,
+ header_from => $autopatch,
+ handle_binary => $handle_binary,
+ skip_auto => $self->{options}{auto_commit},
+ usage => 'build');
+ unless (-z $tmpdiff or $self->{options}{auto_commit}) {
+ info(g_('Hint: make sure the version in debian/changelog matches ' .
+ 'the unpacked source tree'));
+ info(g_('you can integrate the local changes with %s'),
+ 'dpkg-source --commit');
+ error(g_('aborting due to unexpected upstream changes, see %s'),
+ $tmpdiff);
+ }
+ push_exit_handler(sub { unlink($tmpdiff) });
+ $binaryfiles->update_debian_source_include_binaries() if $include_binaries;
+
+ # Install the diff as the new autopatch
+ if ($self->{options}{auto_commit}) {
+ make_path(File::Spec->catdir($dir, 'debian', 'patches'));
+ $autopatch = $self->register_patch($dir, $tmpdiff,
+ $self->get_autopatch_name());
+ info(g_('local changes have been recorded in a new patch: %s'),
+ $autopatch) if -e $autopatch;
+ rmdir(File::Spec->catdir($dir, 'debian', 'patches')); # No check on purpose
+ }
+ unlink($tmpdiff) or syserr(g_('cannot remove %s'), $tmpdiff);
+ pop_exit_handler();
+
+ # Create the debian.tar
+ my $debianfile = "$basenamerev.debian.tar." . $self->{options}{comp_ext};
+ info(g_('building %s in %s'), $sourcepackage, $debianfile);
+ my $tar = Dpkg::Source::Archive->new(filename => $debianfile,
+ compression_level => $self->{options}{comp_level});
+ $tar->create(options => \@tar_ignore, chdir => $dir);
+ $tar->add_directory('debian');
+ foreach my $binary ($binaryfiles->get_seen_binaries()) {
+ $tar->add_file($binary) unless $binary =~ m{^debian/};
+ }
+ $tar->finish();
+
+ $self->add_file($debianfile);
+}
+
+sub _get_patch_header {
+ my ($self, $dir) = @_;
+
+ my $ph = File::Spec->catfile($dir, 'debian', 'source', 'local-patch-header');
+ unless (-f $ph) {
+ $ph = File::Spec->catfile($dir, 'debian', 'source', 'patch-header');
+ }
+ if (-f $ph) {
+ return file_slurp($ph);
+ }
+
+ if ($self->{options}->{single_debian_patch}) {
+ return <<'AUTOGEN_HEADER';
+This is an autogenerated patch header for a single-debian-patch file. The
+delta against upstream is either kept as a single patch, or maintained
+in some VCS, and exported as a single patch instead of more manageable
+atomic patches.
+
+AUTOGEN_HEADER
+ }
+
+ my $ch_info = changelog_parse(offset => 0, count => 1,
+ file => $self->{options}{changelog_file});
+ return '' if not defined $ch_info;
+ my $header = Dpkg::Control->new(type => CTRL_UNKNOWN);
+ $header->{'Description'} = "<short summary of the patch>\n";
+ $header->{'Description'} .=
+"TODO: Put a short summary on the line above and replace this paragraph
+with a longer explanation of this change. Complete the meta-information
+with other relevant fields (see below for details). To make it easier, the
+information below has been extracted from the changelog. Adjust it or drop
+it.\n";
+ $header->{'Description'} .= $ch_info->{'Changes'} . "\n";
+ $header->{'Author'} = $ch_info->{'Maintainer'};
+ my $yyyy_mm_dd = POSIX::strftime('%Y-%m-%d', gmtime);
+
+ my $text;
+ $text = "$header";
+ run_vendor_hook('extend-patch-header', \$text, $ch_info);
+ $text .= "\n---
+The information above should follow the Patch Tagging Guidelines, please
+checkout https://dep.debian.net/deps/dep3/ to learn about the format. Here
+are templates for supplementary fields that you might want to add:
+
+Origin: (upstream|backport|vendor|other), (<patch-url>|commit:<commit-id>)
+Bug: <upstream-bugtracker-url>
+Bug-Debian: https://bugs.debian.org/<bugnumber>
+Bug-Ubuntu: https://launchpad.net/bugs/<bugnumber>
+Forwarded: (no|not-needed|<patch-forwarded-url>)
+Applied-Upstream: <version>, (<commit-url>|commit:<commid-id>)
+Reviewed-By: <name and email of someone who approved/reviewed the patch>
+Last-Update: $yyyy_mm_dd\n\n";
+ return $text;
+}
+
+sub register_patch {
+ my ($self, $dir, $patch_file, $patch_name) = @_;
+ my $patch = File::Spec->catfile($dir, 'debian', 'patches', $patch_name);
+ if (-s $patch_file) {
+ copy($patch_file, $patch)
+ or syserr(g_('failed to copy %s to %s'), $patch_file, $patch);
+ chmod_if_needed(0666 & ~ umask(), $patch)
+ or syserr(g_("unable to change permission of '%s'"), $patch);
+ my $applied = File::Spec->catfile($dir, 'debian', 'patches', '.dpkg-source-applied');
+ open(my $applied_fh, '>>', $applied)
+ or syserr(g_('cannot write %s'), $applied);
+ print { $applied_fh } "$patch\n";
+ close($applied_fh) or syserr(g_('cannot close %s'), $applied);
+ } elsif (-e $patch) {
+ unlink($patch) or syserr(g_('cannot remove %s'), $patch);
+ }
+ return $patch;
+}
+
+sub _is_bad_patch_name {
+ my ($dir, $patch_name) = @_;
+
+ return 1 if not defined($patch_name);
+ return 1 if not length($patch_name);
+
+ my $patch = File::Spec->catfile($dir, 'debian', 'patches', $patch_name);
+ if (-e $patch) {
+ warning(g_('cannot register changes in %s, this patch already exists'),
+ $patch);
+ return 1;
+ }
+ return 0;
+}
+
+sub do_commit {
+ my ($self, $dir) = @_;
+ my ($patch_name, $tmpdiff) = @{$self->{options}{ARGV}};
+
+ $self->prepare_build($dir);
+
+ # Try to fix up a broken relative filename for the patch
+ if ($tmpdiff and not -e $tmpdiff) {
+ $tmpdiff = File::Spec->catfile($dir, $tmpdiff)
+ unless File::Spec->file_name_is_absolute($tmpdiff);
+ error(g_("patch file '%s' doesn't exist"), $tmpdiff) if not -e $tmpdiff;
+ }
+
+ my $binaryfiles = Dpkg::Source::BinaryFiles->new($dir);
+ my $handle_binary = sub {
+ my ($self, $old, $new, %opts) = @_;
+ my $fn = File::Spec->abs2rel($new, $dir);
+ $binaryfiles->new_binary_found($fn);
+ };
+
+ unless ($tmpdiff) {
+ $tmpdiff = $self->_generate_patch($dir, handle_binary => $handle_binary,
+ usage => 'commit');
+ $binaryfiles->update_debian_source_include_binaries();
+ }
+ push_exit_handler(sub { unlink($tmpdiff) });
+ unless (-s $tmpdiff) {
+ unlink($tmpdiff) or syserr(g_('cannot remove %s'), $tmpdiff);
+ info(g_('there are no local changes to record'));
+ return;
+ }
+ while (_is_bad_patch_name($dir, $patch_name)) {
+ # Ask the patch name interactively
+ print g_('Enter the desired patch name: ');
+ $patch_name = <STDIN>;
+ if (not defined $patch_name) {
+ error(g_('no patch name given; cannot proceed'));
+ }
+ chomp $patch_name;
+ $patch_name =~ s/\s+/-/g;
+ $patch_name =~ s/\///g;
+ }
+ make_path(File::Spec->catdir($dir, 'debian', 'patches'));
+ my $patch = $self->register_patch($dir, $tmpdiff, $patch_name);
+ my @editors = ('sensible-editor', $ENV{VISUAL}, $ENV{EDITOR}, 'vi');
+ my $editor = first { find_command($_) } @editors;
+ if (not $editor) {
+ error(g_('cannot find an editor'));
+ }
+ system($editor, $patch);
+ subprocerr($editor) if $?;
+ unlink($tmpdiff) or syserr(g_('cannot remove %s'), $tmpdiff);
+ pop_exit_handler();
+ info(g_('local changes have been recorded in a new patch: %s'), $patch);
+}
+
+1;
diff --git a/scripts/Dpkg/Source/Package/V3/Bzr.pm b/scripts/Dpkg/Source/Package/V3/Bzr.pm
new file mode 100644
index 0000000..2f18fee
--- /dev/null
+++ b/scripts/Dpkg/Source/Package/V3/Bzr.pm
@@ -0,0 +1,213 @@
+#
+# bzr support for dpkg-source
+#
+# Copyright © 2007 Colin Watson <cjwatson@debian.org>.
+# Based on Dpkg::Source::Package::V3_0::git, which is:
+# Copyright © 2007 Joey Hess <joeyh@debian.org>.
+# Copyright © 2008 Frank Lichtenheld <djpig@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::Source::Package::V3::Bzr;
+
+use strict;
+use warnings;
+
+our $VERSION = '0.01';
+
+use Cwd;
+use File::Basename;
+use File::Spec;
+use File::Find;
+use File::Temp qw(tempdir);
+
+use Dpkg::Gettext;
+use Dpkg::Compression;
+use Dpkg::ErrorHandling;
+use Dpkg::Source::Archive;
+use Dpkg::Exit qw(push_exit_handler pop_exit_handler);
+use Dpkg::Path qw(find_command);
+use Dpkg::Source::Functions qw(erasedir);
+
+use parent qw(Dpkg::Source::Package);
+
+our $CURRENT_MINOR_VERSION = '0';
+
+sub prerequisites {
+ return 1 if find_command('bzr');
+ error(g_('cannot unpack bzr-format source package because ' .
+ 'bzr is not in the PATH'));
+}
+
+sub _check_workdir {
+ my $srcdir = shift;
+
+ if (! -d "$srcdir/.bzr") {
+ error(g_('source directory is not the top directory of a bzr repository (%s/.bzr not present), but Format bzr was specified'),
+ $srcdir);
+ }
+
+ # Symlinks from .bzr to outside could cause unpack failures, or
+ # point to files they shouldn't, so check for and don't allow.
+ if (-l "$srcdir/.bzr") {
+ error(g_('%s is a symlink'), "$srcdir/.bzr");
+ }
+ my $abs_srcdir = Cwd::abs_path($srcdir);
+ find(sub {
+ if (-l) {
+ if (Cwd::abs_path(readlink) !~ /^\Q$abs_srcdir\E(?:\/|$)/) {
+ error(g_('%s is a symlink to outside %s'),
+ $File::Find::name, $srcdir);
+ }
+ }
+ }, "$srcdir/.bzr");
+
+ return 1;
+}
+
+sub can_build {
+ my ($self, $dir) = @_;
+
+ return (0, g_("doesn't contain a bzr repository")) unless -d "$dir/.bzr";
+ return 1;
+}
+
+sub do_build {
+ my ($self, $dir) = @_;
+ my @argv = @{$self->{options}{ARGV}};
+ # TODO: warn here?
+ #my @tar_ignore = map { "--exclude=$_" } @{$self->{options}{tar_ignore}};
+ my $diff_ignore_regex = $self->{options}{diff_ignore_regex};
+
+ $dir =~ s{/+$}{}; # Strip trailing /
+ my ($dirname, $updir) = fileparse($dir);
+
+ if (scalar(@argv)) {
+ usageerr(g_("-b takes only one parameter with format '%s'"),
+ $self->{fields}{'Format'});
+ }
+
+ my $sourcepackage = $self->{fields}{'Source'};
+ my $basenamerev = $self->get_basename(1);
+ my $basename = $self->get_basename();
+ my $basedirname = $basename;
+ $basedirname =~ s/_/-/;
+
+ _check_workdir($dir);
+
+ my $old_cwd = getcwd();
+ chdir $dir or syserr(g_("unable to chdir to '%s'"), $dir);
+
+ local $_;
+
+ # Check for uncommitted files.
+ # To support dpkg-source -i, remove any ignored files from the
+ # output of bzr status.
+ open(my $bzr_status_fh, '-|', 'bzr', 'status')
+ or subprocerr('bzr status');
+ my @files;
+ while (<$bzr_status_fh>) {
+ chomp;
+ next unless s/^ +//;
+ if (! length $diff_ignore_regex ||
+ ! m/$diff_ignore_regex/o) {
+ push @files, $_;
+ }
+ }
+ close($bzr_status_fh) or syserr(g_('bzr status exited nonzero'));
+ if (@files) {
+ error(g_('uncommitted, not-ignored changes in working directory: %s'),
+ join(' ', @files));
+ }
+
+ chdir $old_cwd or syserr(g_("unable to chdir to '%s'"), $old_cwd);
+
+ my $tmp = tempdir("$dirname.bzr.XXXXXX", DIR => $updir);
+ push_exit_handler(sub { erasedir($tmp) });
+ my $tardir = "$tmp/$dirname";
+
+ system('bzr', 'branch', $dir, $tardir);
+ subprocerr("bzr branch $dir $tardir") if $?;
+
+ # Remove the working tree.
+ system('bzr', 'remove-tree', $tardir);
+ subprocerr("bzr remove-tree $tardir") if $?;
+
+ # Some branch metadata files are unhelpful.
+ unlink("$tardir/.bzr/branch/branch-name",
+ "$tardir/.bzr/branch/parent");
+
+ # Create the tar file
+ my $debianfile = "$basenamerev.bzr.tar." . $self->{options}{comp_ext};
+ info(g_('building %s in %s'),
+ $sourcepackage, $debianfile);
+ my $tar = Dpkg::Source::Archive->new(filename => $debianfile,
+ compression => $self->{options}{compression},
+ compression_level => $self->{options}{comp_level});
+ $tar->create(chdir => $tmp);
+ $tar->add_directory($dirname);
+ $tar->finish();
+
+ erasedir($tmp);
+ pop_exit_handler();
+
+ $self->add_file($debianfile);
+}
+
+# Called after a tarball is unpacked, to check out the working copy.
+sub do_extract {
+ my ($self, $newdirectory) = @_;
+ my $fields = $self->{fields};
+
+ my $basename = $self->get_basename();
+ my $basenamerev = $self->get_basename(1);
+
+ my @files = $self->get_files();
+ if (@files > 1) {
+ error(g_('format v3.0 (bzr) uses only one source file'));
+ }
+ my $tarfile = $files[0];
+ my $comp_ext_regex = compression_get_file_extension_regex();
+ if ($tarfile !~ /^\Q$basenamerev\E\.bzr\.tar\.$comp_ext_regex$/) {
+ error(g_('expected %s, got %s'),
+ "$basenamerev.bzr.tar.$comp_ext_regex", $tarfile);
+ }
+
+ if ($self->{options}{no_overwrite_dir} and -e $newdirectory) {
+ error(g_('unpack target exists: %s'), $newdirectory);
+ } else {
+ erasedir($newdirectory);
+ }
+
+ # Extract main tarball
+ info(g_('unpacking %s'), $tarfile);
+ my $tar = Dpkg::Source::Archive->new(
+ filename => File::Spec->catfile($self->{basedir}, $tarfile),
+ );
+ $tar->extract($newdirectory);
+
+ _check_workdir($newdirectory);
+
+ my $old_cwd = getcwd();
+ chdir($newdirectory)
+ or syserr(g_("unable to chdir to '%s'"), $newdirectory);
+
+ # Reconstitute the working tree.
+ system('bzr', 'checkout');
+ subprocerr('bzr checkout') if $?;
+
+ chdir $old_cwd or syserr(g_("unable to chdir to '%s'"), $old_cwd);
+}
+
+1;
diff --git a/scripts/Dpkg/Source/Package/V3/Custom.pm b/scripts/Dpkg/Source/Package/V3/Custom.pm
new file mode 100644
index 0000000..63f1769
--- /dev/null
+++ b/scripts/Dpkg/Source/Package/V3/Custom.pm
@@ -0,0 +1,74 @@
+# Copyright © 2008 Raphaël Hertzog <hertzog@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::Source::Package::V3::Custom;
+
+use strict;
+use warnings;
+
+our $VERSION = '0.01';
+
+use Dpkg::Gettext;
+use Dpkg::ErrorHandling;
+
+use parent qw(Dpkg::Source::Package);
+
+our $CURRENT_MINOR_VERSION = '0';
+
+my @module_cmdline = (
+ {
+ name => '--target-format=<value>',
+ help => N_('define the format of the generated source package'),
+ when => 'build',
+ }
+);
+
+sub describe_cmdline_options {
+ return @module_cmdline;
+}
+
+sub parse_cmdline_option {
+ my ($self, $opt) = @_;
+ if ($opt =~ /^--target-format=(.*)$/) {
+ $self->{options}{target_format} = $1;
+ return 1;
+ }
+ return 0;
+}
+sub do_extract {
+ error(g_("Format '3.0 (custom)' is only used to create source packages"));
+}
+
+sub can_build {
+ my ($self, $dir) = @_;
+
+ return (0, g_('no files indicated on command line'))
+ unless scalar(@{$self->{options}{ARGV}});
+ return 1;
+}
+
+sub do_build {
+ my ($self, $dir) = @_;
+ # Update real target format
+ my $format = $self->{options}{target_format};
+ error(g_('--target-format option is missing')) unless $format;
+ $self->{fields}{'Format'} = $format;
+ # Add all files
+ foreach my $file (@{$self->{options}{ARGV}}) {
+ $self->add_file($file);
+ }
+}
+
+1;
diff --git a/scripts/Dpkg/Source/Package/V3/Git.pm b/scripts/Dpkg/Source/Package/V3/Git.pm
new file mode 100644
index 0000000..721036a
--- /dev/null
+++ b/scripts/Dpkg/Source/Package/V3/Git.pm
@@ -0,0 +1,283 @@
+#
+# git support for dpkg-source
+#
+# Copyright © 2007,2010 Joey Hess <joeyh@debian.org>.
+# Copyright © 2008 Frank Lichtenheld <djpig@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::Source::Package::V3::Git;
+
+use strict;
+use warnings;
+
+our $VERSION = '0.02';
+
+use Cwd qw(abs_path getcwd);
+use File::Basename;
+use File::Spec;
+use File::Temp qw(tempdir);
+
+use Dpkg::Gettext;
+use Dpkg::ErrorHandling;
+use Dpkg::Exit qw(push_exit_handler pop_exit_handler);
+use Dpkg::Path qw(find_command);
+use Dpkg::Source::Functions qw(erasedir);
+
+use parent qw(Dpkg::Source::Package);
+
+our $CURRENT_MINOR_VERSION = '0';
+
+# Remove variables from the environment that might cause git to do
+# something unexpected.
+delete $ENV{GIT_DIR};
+delete $ENV{GIT_INDEX_FILE};
+delete $ENV{GIT_OBJECT_DIRECTORY};
+delete $ENV{GIT_ALTERNATE_OBJECT_DIRECTORIES};
+delete $ENV{GIT_WORK_TREE};
+
+sub prerequisites {
+ return 1 if find_command('git');
+ error(g_('cannot unpack git-format source package because ' .
+ 'git is not in the PATH'));
+}
+
+sub _check_workdir {
+ my $srcdir = shift;
+
+ if (! -d "$srcdir/.git") {
+ error(g_('source directory is not the top directory of a git ' .
+ 'repository (%s/.git not present), but Format git was ' .
+ 'specified'), $srcdir);
+ }
+ if (-s "$srcdir/.gitmodules") {
+ error(g_('git repository %s uses submodules; this is not yet supported'),
+ $srcdir);
+ }
+
+ return 1;
+}
+
+sub _parse_vcs_git {
+ my $vcs_git = shift;
+ my ($url, $opt, $branch) = split ' ', $vcs_git;
+
+ if (defined $opt && $opt eq '-b' && defined $branch) {
+ return ($url, $branch);
+ } else {
+ return ($url);
+ }
+}
+
+my @module_cmdline = (
+ {
+ name => '--git-ref=<ref>',
+ help => N_('specify a git <ref> to include in the git bundle'),
+ when => 'build',
+ }, {
+ name => '--git-depth=<number>',
+ help => N_('create a shallow clone with <number> depth'),
+ when => 'build',
+ }
+);
+
+sub describe_cmdline_options {
+ my $self = shift;
+
+ my @cmdline = ( $self->SUPER::describe_cmdline_options(), @module_cmdline );
+
+ return @cmdline;
+}
+
+sub parse_cmdline_option {
+ my ($self, $opt) = @_;
+ return 1 if $self->SUPER::parse_cmdline_option($opt);
+ if ($opt =~ /^--git-ref=(.*)$/) {
+ push @{$self->{options}{git_ref}}, $1;
+ return 1;
+ } elsif ($opt =~ /^--git-depth=(\d+)$/) {
+ $self->{options}{git_depth} = $1;
+ return 1;
+ }
+ return 0;
+}
+
+sub can_build {
+ my ($self, $dir) = @_;
+
+ return (0, g_("doesn't contain a git repository")) unless -d "$dir/.git";
+ return 1;
+}
+
+sub do_build {
+ my ($self, $dir) = @_;
+ my $diff_ignore_regex = $self->{options}{diff_ignore_regex};
+
+ $dir =~ s{/+$}{}; # Strip trailing /
+ my ($dirname, $updir) = fileparse($dir);
+ my $basenamerev = $self->get_basename(1);
+
+ _check_workdir($dir);
+
+ my $old_cwd = getcwd();
+ chdir $dir or syserr(g_("unable to chdir to '%s'"), $dir);
+
+ # Check for uncommitted files.
+ # To support dpkg-source -i, get a list of files
+ # equivalent to the ones git status finds, and remove any
+ # ignored files from it.
+ my @ignores = '--exclude-per-directory=.gitignore';
+ my $core_excludesfile = qx(git config --get core.excludesfile);
+ chomp $core_excludesfile;
+ if (length $core_excludesfile && -e $core_excludesfile) {
+ push @ignores, "--exclude-from=$core_excludesfile";
+ }
+ if (-e '.git/info/exclude') {
+ push @ignores, '--exclude-from=.git/info/exclude';
+ }
+ open(my $git_ls_files_fh, '-|', 'git', 'ls-files', '--modified', '--deleted',
+ '-z', '--others', @ignores) or subprocerr('git ls-files');
+ my @files;
+ {
+ local $_;
+ local $/ = "\0";
+ while (<$git_ls_files_fh>) {
+ chomp;
+ if (! length $diff_ignore_regex ||
+ ! m/$diff_ignore_regex/o) {
+ push @files, $_;
+ }
+ }
+ }
+ close($git_ls_files_fh) or syserr(g_('git ls-files exited nonzero'));
+ if (@files) {
+ error(g_('uncommitted, not-ignored changes in working directory: %s'),
+ join(' ', @files));
+ }
+
+ # If a depth was specified, need to create a shallow clone and
+ # bundle that.
+ my $tmp;
+ my $shallowfile;
+ if ($self->{options}{git_depth}) {
+ chdir $old_cwd or syserr(g_("unable to chdir to '%s'"), $old_cwd);
+ $tmp = tempdir("$dirname.git.XXXXXX", DIR => $updir);
+ push_exit_handler(sub { erasedir($tmp) });
+ my $clone_dir = "$tmp/repo.git";
+ # file:// is needed to avoid local cloning, which does not
+ # create a shallow clone.
+ info(g_('creating shallow clone with depth %s'),
+ $self->{options}{git_depth});
+ system('git', 'clone', '--depth=' . $self->{options}{git_depth},
+ '--quiet', '--bare', 'file://' . abs_path($dir), $clone_dir);
+ subprocerr('git clone') if $?;
+ chdir($clone_dir)
+ or syserr(g_("unable to chdir to '%s'"), $clone_dir);
+ $shallowfile = "$basenamerev.gitshallow";
+ system('cp', '-f', 'shallow', "$old_cwd/$shallowfile");
+ subprocerr('cp shallow') if $?;
+ }
+
+ # Create the git bundle.
+ my $bundlefile = "$basenamerev.git";
+ my @bundle_arg = $self->{options}{git_ref} ?
+ (@{$self->{options}{git_ref}}) : '--all';
+ info(g_('bundling: %s'), join(' ', @bundle_arg));
+ system('git', 'bundle', 'create', "$old_cwd/$bundlefile",
+ @bundle_arg,
+ 'HEAD', # ensure HEAD is included no matter what
+ '--', # avoids ambiguity error when referring to eg, a debian branch
+ );
+ subprocerr('git bundle') if $?;
+
+ chdir $old_cwd or syserr(g_("unable to chdir to '%s'"), $old_cwd);
+
+ if (defined $tmp) {
+ erasedir($tmp);
+ pop_exit_handler();
+ }
+
+ $self->add_file($bundlefile);
+ if (defined $shallowfile) {
+ $self->add_file($shallowfile);
+ }
+}
+
+sub do_extract {
+ my ($self, $newdirectory) = @_;
+ my $fields = $self->{fields};
+
+ my $basenamerev = $self->get_basename(1);
+
+ my @files = $self->get_files();
+ my ($bundle, $shallow);
+ foreach my $file (@files) {
+ if ($file =~ /^\Q$basenamerev\E\.git$/) {
+ if (! defined $bundle) {
+ $bundle = $file;
+ } else {
+ error(g_('format v3.0 (git) uses only one .git file'));
+ }
+ } elsif ($file =~ /^\Q$basenamerev\E\.gitshallow$/) {
+ if (! defined $shallow) {
+ $shallow = $file;
+ } else {
+ error(g_('format v3.0 (git) uses only one .gitshallow file'));
+ }
+ } else {
+ error(g_('format v3.0 (git) unknown file: %s'), $file);
+ }
+ }
+ if (! defined $bundle) {
+ error(g_('format v3.0 (git) expected %s'), "$basenamerev.git");
+ }
+
+ if ($self->{options}{no_overwrite_dir} and -e $newdirectory) {
+ error(g_('unpack target exists: %s'), $newdirectory);
+ } else {
+ erasedir($newdirectory);
+ }
+
+ # Extract git bundle.
+ info(g_('cloning %s'), $bundle);
+ my $bundle_path = File::Spec->catfile($self->{basedir}, $bundle);
+ system('git', 'clone', '--quiet', '--origin=bundle', $bundle_path, $newdirectory);
+ subprocerr('git bundle') if $?;
+
+ if (defined $shallow) {
+ # Move shallow info file into place, so git does not
+ # try to follow parents of shallow refs.
+ info(g_('setting up shallow clone'));
+ my $shallow_orig = File::Spec->catfile($self->{basedir}, $shallow);
+ my $shallow_dest = File::Spec->catfile($newdirectory, '.git', 'shallow');
+ system('cp', '-f', $shallow_orig, $shallow_dest);
+ subprocerr('cp') if $?;
+ }
+
+ _check_workdir($newdirectory);
+
+ if (defined $fields->{'Vcs-Git'}) {
+ my $remote = 'origin';
+ my ($url, $head) = _parse_vcs_git($fields->{'Vcs-Git'});
+
+ my @git_remote_add = (qw(git -C), $newdirectory, qw(remote add));
+ push @git_remote_add, '-m', $head if defined $head;
+
+ info(g_('setting remote %s to %s'), $remote, $url);
+ system(@git_remote_add, $remote, $url);
+ subprocerr('git remote add') if $?;
+ }
+}
+
+1;
diff --git a/scripts/Dpkg/Source/Package/V3/Native.pm b/scripts/Dpkg/Source/Package/V3/Native.pm
new file mode 100644
index 0000000..933315a
--- /dev/null
+++ b/scripts/Dpkg/Source/Package/V3/Native.pm
@@ -0,0 +1,121 @@
+# Copyright © 2008 Raphaël Hertzog <hertzog@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::Source::Package::V3::Native;
+
+use strict;
+use warnings;
+
+our $VERSION = '0.01';
+
+use Cwd;
+use File::Basename;
+use File::Spec;
+use File::Temp qw(tempfile);
+
+use Dpkg::Gettext;
+use Dpkg::ErrorHandling;
+use Dpkg::Compression;
+use Dpkg::Exit qw(push_exit_handler pop_exit_handler);
+use Dpkg::Version;
+use Dpkg::Source::Archive;
+use Dpkg::Source::Functions qw(erasedir);
+
+use parent qw(Dpkg::Source::Package);
+
+our $CURRENT_MINOR_VERSION = '0';
+
+sub do_extract {
+ my ($self, $newdirectory) = @_;
+ my $sourcestyle = $self->{options}{sourcestyle};
+ my $fields = $self->{fields};
+
+ my $basename = $self->get_basename();
+ my $basenamerev = $self->get_basename(1);
+
+ my $tarfile;
+ my $comp_ext_regex = compression_get_file_extension_regex();
+ foreach my $file ($self->get_files()) {
+ if ($file =~ /^\Q$basenamerev\E\.tar\.$comp_ext_regex$/) {
+ error(g_('multiple tarfiles in native source package')) if $tarfile;
+ $tarfile = $file;
+ } else {
+ error(g_('unrecognized file for a native source package: %s'), $file);
+ }
+ }
+
+ error(g_('no tarfile in Files field')) unless $tarfile;
+
+ if ($self->{options}{no_overwrite_dir} and -e $newdirectory) {
+ error(g_('unpack target exists: %s'), $newdirectory);
+ } else {
+ erasedir($newdirectory);
+ }
+
+ info(g_('unpacking %s'), $tarfile);
+ my $tar = Dpkg::Source::Archive->new(
+ filename => File::Spec->catfile($self->{basedir}, $tarfile),
+ );
+ $tar->extract($newdirectory);
+}
+
+sub can_build {
+ my ($self, $dir) = @_;
+
+ my $v = Dpkg::Version->new($self->{fields}->{'Version'});
+ return (0, g_('native package version may not have a revision'))
+ unless $v->is_native();
+
+ return 1;
+}
+
+sub do_build {
+ my ($self, $dir) = @_;
+ my @tar_ignore = map { "--exclude=$_" } @{$self->{options}{tar_ignore}};
+ my @argv = @{$self->{options}{ARGV}};
+
+ if (scalar(@argv)) {
+ usageerr(g_("-b takes only one parameter with format '%s'"),
+ $self->{fields}{'Format'});
+ }
+
+ my $sourcepackage = $self->{fields}{'Source'};
+ my $basenamerev = $self->get_basename(1);
+ my $tarname = "$basenamerev.tar." . $self->{options}{comp_ext};
+
+ info(g_('building %s in %s'), $sourcepackage, $tarname);
+
+ my ($ntfh, $newtar) = tempfile("$tarname.new.XXXXXX",
+ DIR => getcwd(), UNLINK => 0);
+ push_exit_handler(sub { unlink($newtar) });
+
+ my ($dirname, $dirbase) = fileparse($dir);
+ my $tar = Dpkg::Source::Archive->new(filename => $newtar,
+ compression => compression_guess_from_filename($tarname),
+ compression_level => $self->{options}{comp_level});
+ $tar->create(options => \@tar_ignore, chdir => $dirbase);
+ $tar->add_directory($dirname);
+ $tar->finish();
+ rename($newtar, $tarname)
+ or syserr(g_("unable to rename '%s' (newly created) to '%s'"),
+ $newtar, $tarname);
+ pop_exit_handler();
+ chmod(0666 &~ umask(), $tarname)
+ or syserr(g_("unable to change permission of '%s'"), $tarname);
+
+ $self->add_file($tarname);
+}
+
+1;
diff --git a/scripts/Dpkg/Source/Package/V3/Quilt.pm b/scripts/Dpkg/Source/Package/V3/Quilt.pm
new file mode 100644
index 0000000..1359168
--- /dev/null
+++ b/scripts/Dpkg/Source/Package/V3/Quilt.pm
@@ -0,0 +1,269 @@
+# Copyright © 2008-2012 Raphaël Hertzog <hertzog@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::Source::Package::V3::Quilt;
+
+use strict;
+use warnings;
+
+our $VERSION = '0.01';
+
+use List::Util qw(any);
+use File::Spec;
+use File::Copy;
+
+use Dpkg::Gettext;
+use Dpkg::ErrorHandling;
+use Dpkg::File;
+use Dpkg::Version;
+use Dpkg::Source::Patch;
+use Dpkg::Source::Functions qw(erasedir chmod_if_needed fs_time);
+use Dpkg::Source::Quilt;
+use Dpkg::Exit;
+
+# Based on wig&pen implementation
+use parent qw(Dpkg::Source::Package::V2);
+
+our $CURRENT_MINOR_VERSION = '0';
+
+sub init_options {
+ my $self = shift;
+ $self->{options}{single_debian_patch} //= 0;
+ $self->{options}{allow_version_of_quilt_db} //= [];
+
+ $self->SUPER::init_options();
+}
+
+my @module_cmdline = (
+ {
+ name => '--single-debian-patch',
+ help => N_('use a single debianization patch'),
+ when => 'build',
+ }, {
+ name => '--allow-version-of-quilt-db=<version>',
+ help => N_('accept quilt metadata <version> even if unknown'),
+ when => 'build',
+ }
+);
+
+sub describe_cmdline_options {
+ my $self = shift;
+
+ my @cmdline = ( $self->SUPER::describe_cmdline_options(), @module_cmdline );
+
+ return @cmdline;
+}
+
+sub parse_cmdline_option {
+ my ($self, $opt) = @_;
+ return 1 if $self->SUPER::parse_cmdline_option($opt);
+ if ($opt eq '--single-debian-patch') {
+ $self->{options}{single_debian_patch} = 1;
+ # For backwards compatibility.
+ $self->{options}{auto_commit} = 1;
+ return 1;
+ } elsif ($opt =~ /^--allow-version-of-quilt-db=(.*)$/) {
+ push @{$self->{options}{allow_version_of_quilt_db}}, $1;
+ return 1;
+ }
+ return 0;
+}
+
+sub _build_quilt_object {
+ my ($self, $dir) = @_;
+ return $self->{quilt}{$dir} if exists $self->{quilt}{$dir};
+ $self->{quilt}{$dir} = Dpkg::Source::Quilt->new($dir);
+ return $self->{quilt}{$dir};
+}
+
+sub can_build {
+ my ($self, $dir) = @_;
+ my ($code, $msg) = $self->SUPER::can_build($dir);
+ return ($code, $msg) if $code == 0;
+
+ my $v = Dpkg::Version->new($self->{fields}->{'Version'});
+ return (0, g_('non-native package version does not contain a revision'))
+ if $v->is_native();
+
+ my $quilt = $self->_build_quilt_object($dir);
+ $msg = $quilt->find_problems();
+ return (0, $msg) if $msg;
+ return 1;
+}
+
+sub get_autopatch_name {
+ my $self = shift;
+ if ($self->{options}{single_debian_patch}) {
+ return 'debian-changes';
+ } else {
+ return 'debian-changes-' . $self->{fields}{'Version'};
+ }
+}
+
+sub apply_patches {
+ my ($self, $dir, %opts) = @_;
+
+ if ($opts{usage} eq 'unpack') {
+ $opts{verbose} = 1;
+ } elsif ($opts{usage} eq 'build') {
+ $opts{warn_options} = 1;
+ $opts{verbose} = 0;
+ }
+
+ my $quilt = $self->_build_quilt_object($dir);
+ $quilt->load_series(%opts) if $opts{warn_options}; # Trigger warnings
+
+ # Always create the quilt db so that if the maintainer calls quilt to
+ # create a patch, it's stored in the right directory
+ $quilt->save_db();
+
+ # Update debian/patches/series symlink if needed to allow quilt usage
+ my $series = $quilt->get_series_file();
+ my $basename = (File::Spec->splitpath($series))[2];
+ if ($basename ne 'series') {
+ my $dest = $quilt->get_patch_file('series');
+ unlink($dest) if -l $dest;
+ unless (-f _) { # Don't overwrite real files
+ symlink($basename, $dest)
+ or syserr(g_("can't create symlink %s"), $dest);
+ }
+ }
+
+ return unless scalar($quilt->series());
+
+ info(g_('using patch list from %s'), "debian/patches/$basename");
+
+ if ($opts{usage} eq 'preparation' and
+ $self->{options}{unapply_patches} eq 'auto') {
+ # We're applying the patches in --before-build, remember to unapply
+ # them afterwards in --after-build
+ my $pc_unapply = $quilt->get_db_file('.dpkg-source-unapply');
+ file_touch($pc_unapply);
+ }
+
+ # Apply patches
+ my $pc_applied = $quilt->get_db_file('applied-patches');
+ $opts{timestamp} = fs_time($pc_applied);
+ if ($opts{skip_auto}) {
+ my $auto_patch = $self->get_autopatch_name();
+ $quilt->push(%opts) while ($quilt->next() and $quilt->next() ne $auto_patch);
+ } else {
+ $quilt->push(%opts) while $quilt->next();
+ }
+}
+
+sub unapply_patches {
+ my ($self, $dir, %opts) = @_;
+
+ my $quilt = $self->_build_quilt_object($dir);
+
+ $opts{verbose} //= 1;
+
+ my $pc_applied = $quilt->get_db_file('applied-patches');
+ my @applied = $quilt->applied();
+ $opts{timestamp} = fs_time($pc_applied) if @applied;
+
+ $quilt->pop(%opts) while $quilt->top();
+
+ erasedir($quilt->get_db_dir());
+}
+
+sub prepare_build {
+ my ($self, $dir) = @_;
+ $self->SUPER::prepare_build($dir);
+ # Skip .pc directories of quilt by default and ignore difference
+ # on debian/patches/series symlinks and d/p/.dpkg-source-applied
+ # stamp file created by ourselves
+ my $func = sub {
+ my $pathname = shift;
+
+ return 1 if $pathname eq 'debian/patches/series' and -l $pathname;
+ return 1 if $pathname =~ /^\.pc(\/|$)/;
+ return 1 if $pathname =~ /$self->{options}{diff_ignore_regex}/;
+ return 0;
+ };
+ $self->{diff_options}{diff_ignore_func} = $func;
+}
+
+sub do_build {
+ my ($self, $dir) = @_;
+
+ my $quilt = $self->_build_quilt_object($dir);
+ my $version = $quilt->get_db_version();
+
+ if (defined($version) and $version != 2) {
+ if (any { $version eq $_ }
+ @{$self->{options}{allow_version_of_quilt_db}})
+ {
+ warning(g_('unsupported version of the quilt metadata: %s'), $version);
+ } else {
+ error(g_('unsupported version of the quilt metadata: %s'), $version);
+ }
+ }
+
+ $self->SUPER::do_build($dir);
+}
+
+sub after_build {
+ my ($self, $dir) = @_;
+ my $quilt = $self->_build_quilt_object($dir);
+ my $pc_unapply = $quilt->get_db_file('.dpkg-source-unapply');
+ my $opt_unapply = $self->{options}{unapply_patches};
+ if (($opt_unapply eq 'auto' and -e $pc_unapply) or $opt_unapply eq 'yes') {
+ unlink($pc_unapply);
+ $self->unapply_patches($dir);
+ }
+}
+
+sub check_patches_applied {
+ my ($self, $dir) = @_;
+
+ my $quilt = $self->_build_quilt_object($dir);
+ my $next = $quilt->next();
+ return if not defined $next;
+
+ my $first_patch = File::Spec->catfile($dir, 'debian', 'patches', $next);
+ my $patch_obj = Dpkg::Source::Patch->new(filename => $first_patch);
+ return unless $patch_obj->check_apply($dir, fatal_dupes => 1);
+
+ $self->apply_patches($dir, usage => 'preparation', verbose => 1);
+}
+
+sub register_patch {
+ my ($self, $dir, $tmpdiff, $patch_name) = @_;
+
+ my $quilt = $self->_build_quilt_object($dir);
+ my $patch = $quilt->get_patch_file($patch_name);
+
+ if (-s $tmpdiff) {
+ copy($tmpdiff, $patch)
+ or syserr(g_('failed to copy %s to %s'), $tmpdiff, $patch);
+ chmod_if_needed(0666 & ~ umask(), $patch)
+ or syserr(g_("unable to change permission of '%s'"), $patch);
+ } elsif (-e $patch) {
+ unlink($patch) or syserr(g_('cannot remove %s'), $patch);
+ }
+
+ if (-e $patch) {
+ # Add patch to series file
+ $quilt->register($patch_name);
+ } else {
+ # Remove auto_patch from series
+ $quilt->unregister($patch_name);
+ }
+ return $patch;
+}
+
+1;
diff --git a/scripts/Dpkg/Source/Patch.pm b/scripts/Dpkg/Source/Patch.pm
new file mode 100644
index 0000000..e670898
--- /dev/null
+++ b/scripts/Dpkg/Source/Patch.pm
@@ -0,0 +1,697 @@
+# Copyright © 2008 Raphaël Hertzog <hertzog@debian.org>
+# Copyright © 2008-2010, 2012-2015 Guillem Jover <guillem@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::Source::Patch;
+
+use strict;
+use warnings;
+
+our $VERSION = '0.01';
+
+use POSIX qw(:errno_h :sys_wait_h);
+use File::Find;
+use File::Basename;
+use File::Spec;
+use File::Path qw(make_path);
+use File::Compare;
+use Fcntl ':mode';
+use Time::HiRes qw(stat);
+
+use Dpkg;
+use Dpkg::Gettext;
+use Dpkg::ErrorHandling;
+use Dpkg::IPC;
+use Dpkg::Source::Functions qw(fs_time);
+
+use parent qw(Dpkg::Compression::FileHandle);
+
+sub create {
+ my ($self, %opts) = @_;
+ $self->ensure_open('w'); # Creates the file
+ *$self->{errors} = 0;
+ *$self->{empty} = 1;
+ if ($opts{old} and $opts{new} and $opts{filename}) {
+ $opts{old} = '/dev/null' unless -e $opts{old};
+ $opts{new} = '/dev/null' unless -e $opts{new};
+ if (-d $opts{old} and -d $opts{new}) {
+ $self->add_diff_directory($opts{old}, $opts{new}, %opts);
+ } elsif (-f $opts{old} and -f $opts{new}) {
+ $self->add_diff_file($opts{old}, $opts{new}, %opts);
+ } else {
+ $self->_fail_not_same_type($opts{old}, $opts{new}, $opts{filename});
+ }
+ $self->finish() unless $opts{nofinish};
+ }
+}
+
+sub set_header {
+ my ($self, $header) = @_;
+ *$self->{header} = $header;
+}
+
+sub get_header {
+ my $self = shift;
+
+ if (ref *$self->{header} eq 'CODE') {
+ return *$self->{header}->();
+ } else {
+ return *$self->{header};
+ }
+}
+
+sub add_diff_file {
+ my ($self, $old, $new, %opts) = @_;
+ $opts{include_timestamp} //= 0;
+ my $handle_binary = $opts{handle_binary_func} // sub {
+ my ($self, $old, $new, %opts) = @_;
+ my $file = $opts{filename};
+ $self->_fail_with_msg($file, g_('binary file contents changed'));
+ };
+ # Optimization to avoid forking diff if unnecessary
+ return 1 if compare($old, $new, 4096) == 0;
+ # Default diff options
+ my @options;
+ if ($opts{options}) {
+ push @options, @{$opts{options}};
+ } else {
+ push @options, '-p';
+ }
+ # Add labels
+ if ($opts{label_old} and $opts{label_new}) {
+ if ($opts{include_timestamp}) {
+ my $ts = (stat($old))[9];
+ my $t = POSIX::strftime('%Y-%m-%d %H:%M:%S', gmtime($ts));
+ $opts{label_old} .= sprintf("\t%s.%09d +0000", $t,
+ ($ts - int($ts)) * 1_000_000_000);
+ $ts = (stat($new))[9];
+ $t = POSIX::strftime('%Y-%m-%d %H:%M:%S', gmtime($ts));
+ $opts{label_new} .= sprintf("\t%s.%09d +0000", $t,
+ ($ts - int($ts)) * 1_000_000_000);
+ } else {
+ # Space in filenames need special treatment
+ $opts{label_old} .= "\t" if $opts{label_old} =~ / /;
+ $opts{label_new} .= "\t" if $opts{label_new} =~ / /;
+ }
+ push @options, '-L', $opts{label_old},
+ '-L', $opts{label_new};
+ }
+ # Generate diff
+ my $diffgen;
+ my $diff_pid = spawn(
+ exec => [ 'diff', '-u', @options, '--', $old, $new ],
+ env => { LC_ALL => 'C', LANG => 'C', TZ => 'UTC0' },
+ to_pipe => \$diffgen,
+ );
+ # Check diff and write it in patch file
+ my $difflinefound = 0;
+ my $binary = 0;
+ local $_;
+
+ while (<$diffgen>) {
+ if (m/^(?:binary|[^-+\@ ].*\bdiffer\b)/i) {
+ $binary = 1;
+ $handle_binary->($self, $old, $new, %opts);
+ last;
+ } elsif (m/^[-+\@ ]/) {
+ $difflinefound++;
+ } elsif (m/^\\ /) {
+ warning(g_('file %s has no final newline (either ' .
+ 'original or modified version)'), $new);
+ } else {
+ chomp;
+ error(g_("unknown line from diff -u on %s: '%s'"), $new, $_);
+ }
+ if (*$self->{empty} and defined(*$self->{header})) {
+ $self->print($self->get_header()) or syserr(g_('failed to write'));
+ *$self->{empty} = 0;
+ }
+ print { $self } $_ or syserr(g_('failed to write'));
+ }
+ close($diffgen) or syserr('close on diff pipe');
+ wait_child($diff_pid, nocheck => 1,
+ cmdline => "diff -u @options -- $old $new");
+ # Verify diff process ended successfully
+ # Exit code of diff: 0 => no difference, 1 => diff ok, 2 => error
+ # Ignore error if binary content detected
+ my $exit = WEXITSTATUS($?);
+ unless (WIFEXITED($?) && ($exit == 0 || $exit == 1 || $binary)) {
+ subprocerr(g_('diff on %s'), $new);
+ }
+ return ($exit == 0 || $exit == 1);
+}
+
+sub add_diff_directory {
+ my ($self, $old, $new, %opts) = @_;
+ # TODO: make this function more configurable
+ # - offer to disable some checks
+ my $basedir = $opts{basedirname} || basename($new);
+ my $diff_ignore;
+ if ($opts{diff_ignore_func}) {
+ $diff_ignore = $opts{diff_ignore_func};
+ } elsif ($opts{diff_ignore_regex}) {
+ $diff_ignore = sub { return $_[0] =~ /$opts{diff_ignore_regex}/o };
+ } else {
+ $diff_ignore = sub { return 0 };
+ }
+
+ my @diff_files;
+ my %files_in_new;
+ my $scan_new = sub {
+ my $fn = (length > length($new)) ? substr($_, length($new) + 1) : '.';
+ return if $diff_ignore->($fn);
+ $files_in_new{$fn} = 1;
+ lstat("$new/$fn") or syserr(g_('cannot stat file %s'), "$new/$fn");
+ my $mode = S_IMODE((lstat(_))[2]);
+ my $size = (lstat(_))[7];
+ if (-l _) {
+ unless (-l "$old/$fn") {
+ $self->_fail_not_same_type("$old/$fn", "$new/$fn", $fn);
+ return;
+ }
+ my $n = readlink("$new/$fn");
+ unless (defined $n) {
+ syserr(g_('cannot read link %s'), "$new/$fn");
+ }
+ my $n2 = readlink("$old/$fn");
+ unless (defined $n2) {
+ syserr(g_('cannot read link %s'), "$old/$fn");
+ }
+ unless ($n eq $n2) {
+ $self->_fail_not_same_type("$old/$fn", "$new/$fn", $fn);
+ }
+ } elsif (-f _) {
+ my $old_file = "$old/$fn";
+ if (not lstat("$old/$fn")) {
+ if ($! != ENOENT) {
+ syserr(g_('cannot stat file %s'), "$old/$fn");
+ }
+ $old_file = '/dev/null';
+ } elsif (not -f _) {
+ $self->_fail_not_same_type("$old/$fn", "$new/$fn", $fn);
+ return;
+ }
+
+ my $label_old = "$basedir.orig/$fn";
+ if ($opts{use_dev_null}) {
+ $label_old = $old_file if $old_file eq '/dev/null';
+ }
+ push @diff_files, [$fn, $mode, $size, $old_file, "$new/$fn",
+ $label_old, "$basedir/$fn"];
+ } elsif (-p _) {
+ unless (-p "$old/$fn") {
+ $self->_fail_not_same_type("$old/$fn", "$new/$fn", $fn);
+ }
+ } elsif (-b _ || -c _ || -S _) {
+ $self->_fail_with_msg("$new/$fn",
+ g_('device or socket is not allowed'));
+ } elsif (-d _) {
+ if (not lstat("$old/$fn")) {
+ if ($! != ENOENT) {
+ syserr(g_('cannot stat file %s'), "$old/$fn");
+ }
+ } elsif (not -d _) {
+ $self->_fail_not_same_type("$old/$fn", "$new/$fn", $fn);
+ }
+ } else {
+ $self->_fail_with_msg("$new/$fn", g_('unknown file type'));
+ }
+ };
+ my $scan_old = sub {
+ my $fn = (length > length($old)) ? substr($_, length($old) + 1) : '.';
+ return if $diff_ignore->($fn);
+ return if $files_in_new{$fn};
+ lstat("$old/$fn") or syserr(g_('cannot stat file %s'), "$old/$fn");
+ if (-f _) {
+ if (not defined $opts{include_removal}) {
+ warning(g_('ignoring deletion of file %s'), $fn);
+ } elsif (not $opts{include_removal}) {
+ warning(g_('ignoring deletion of file %s, use --include-removal to override'), $fn);
+ } else {
+ push @diff_files, [$fn, 0, 0, "$old/$fn", '/dev/null',
+ "$basedir.orig/$fn", '/dev/null'];
+ }
+ } elsif (-d _) {
+ warning(g_('ignoring deletion of directory %s'), $fn);
+ } elsif (-l _) {
+ warning(g_('ignoring deletion of symlink %s'), $fn);
+ } else {
+ $self->_fail_not_same_type("$old/$fn", "$new/$fn", $fn);
+ }
+ };
+
+ find({ wanted => $scan_new, no_chdir => 1 }, $new);
+ find({ wanted => $scan_old, no_chdir => 1 }, $old);
+
+ if ($opts{order_from} and -e $opts{order_from}) {
+ my $order_from = Dpkg::Source::Patch->new(
+ filename => $opts{order_from});
+ my $analysis = $order_from->analyze($basedir, verbose => 0);
+ my %patchorder;
+ my $i = 0;
+ foreach my $fn (@{$analysis->{patchorder}}) {
+ $fn =~ s{^[^/]+/}{};
+ $patchorder{$fn} = $i++;
+ }
+ # 'quilt refresh' sorts files as follows:
+ # - Any files in the existing patch come first, in the order in
+ # which they appear in the existing patch.
+ # - New files follow, sorted lexicographically.
+ # This seems a reasonable policy to follow, and avoids autopatches
+ # being shuffled when they are regenerated.
+ foreach my $diff_file (sort { $a->[0] cmp $b->[0] } @diff_files) {
+ my $fn = $diff_file->[0];
+ $patchorder{$fn} //= $i++;
+ }
+ @diff_files = sort { $patchorder{$a->[0]} <=> $patchorder{$b->[0]} }
+ @diff_files;
+ } else {
+ @diff_files = sort { $a->[0] cmp $b->[0] } @diff_files;
+ }
+
+ foreach my $diff_file (@diff_files) {
+ my ($fn, $mode, $size,
+ $old_file, $new_file, $label_old, $label_new) = @$diff_file;
+ my $success = $self->add_diff_file($old_file, $new_file,
+ filename => $fn,
+ label_old => $label_old,
+ label_new => $label_new, %opts);
+ if ($success and
+ $old_file eq '/dev/null' and $new_file ne '/dev/null') {
+ if (not $size) {
+ warning(g_("newly created empty file '%s' will not " .
+ 'be represented in diff'), $fn);
+ } else {
+ if ($mode & (S_IXUSR | S_IXGRP | S_IXOTH)) {
+ warning(g_("executable mode %04o of '%s' will " .
+ 'not be represented in diff'), $mode, $fn)
+ unless $fn eq 'debian/rules';
+ }
+ if ($mode & (S_ISUID | S_ISGID | S_ISVTX)) {
+ warning(g_("special mode %04o of '%s' will not " .
+ 'be represented in diff'), $mode, $fn);
+ }
+ }
+ }
+ }
+}
+
+sub finish {
+ my $self = shift;
+ close($self) or syserr(g_('cannot close %s'), $self->get_filename());
+ return not *$self->{errors};
+}
+
+sub register_error {
+ my $self = shift;
+ *$self->{errors}++;
+}
+sub _fail_with_msg {
+ my ($self, $file, $msg) = @_;
+ errormsg(g_('cannot represent change to %s: %s'), $file, $msg);
+ $self->register_error();
+}
+sub _fail_not_same_type {
+ my ($self, $old, $new, $file) = @_;
+ my $old_type = get_type($old);
+ my $new_type = get_type($new);
+ errormsg(g_('cannot represent change to %s:'), $file);
+ errormsg(g_(' new version is %s'), $new_type);
+ errormsg(g_(' old version is %s'), $old_type);
+ $self->register_error();
+}
+
+sub _getline {
+ my $handle = shift;
+
+ my $line = <$handle>;
+ if (defined $line) {
+ # Strip end-of-line chars
+ chomp($line);
+ $line =~ s/\r$//;
+ }
+ return $line;
+}
+
+# Fetch the header filename ignoring the optional timestamp
+sub _fetch_filename {
+ my ($diff, $header) = @_;
+
+ # Strip any leading spaces.
+ $header =~ s/^\s+//;
+
+ # Is it a C-style string?
+ if ($header =~ m/^"/) {
+ error(g_('diff %s patches file with C-style encoded filename'), $diff);
+ } else {
+ # Tab is the official separator, it's always used when
+ # filename contain spaces. Try it first, otherwise strip on space
+ # if there's no tab
+ $header =~ s/\s.*// unless $header =~ s/\t.*//;
+ }
+
+ return $header;
+}
+
+sub _intuit_file_patched {
+ my ($old, $new) = @_;
+
+ return $new unless defined $old;
+ return $old unless defined $new;
+ return $new if -e $new and not -e $old;
+ return $old if -e $old and not -e $new;
+
+ # We don't consider the case where both files are non-existent and
+ # where patch picks the one with the fewest directories to create
+ # since dpkg-source will pre-create the required directories
+
+ # Precalculate metrics used by patch
+ my ($tmp_o, $tmp_n) = ($old, $new);
+ my ($len_o, $len_n) = (length($old), length($new));
+ $tmp_o =~ s{[/\\]+}{/}g;
+ $tmp_n =~ s{[/\\]+}{/}g;
+ my $nb_comp_o = ($tmp_o =~ tr{/}{/});
+ my $nb_comp_n = ($tmp_n =~ tr{/}{/});
+ $tmp_o =~ s{^.*/}{};
+ $tmp_n =~ s{^.*/}{};
+ my ($blen_o, $blen_n) = (length($tmp_o), length($tmp_n));
+
+ # Decide like patch would
+ if ($nb_comp_o != $nb_comp_n) {
+ return ($nb_comp_o < $nb_comp_n) ? $old : $new;
+ } elsif ($blen_o != $blen_n) {
+ return ($blen_o < $blen_n) ? $old : $new;
+ } elsif ($len_o != $len_n) {
+ return ($len_o < $len_n) ? $old : $new;
+ }
+ return $old;
+}
+
+# check diff for sanity, find directories to create as a side effect
+sub analyze {
+ my ($self, $destdir, %opts) = @_;
+
+ $opts{verbose} //= 1;
+ my $diff = $self->get_filename();
+ my %filepatched;
+ my %dirtocreate;
+ my @patchorder;
+ my $patch_header = '';
+ my $diff_count = 0;
+
+ my $line = _getline($self);
+
+ HUNK:
+ while (defined $line or not eof $self) {
+ my (%path, %fn);
+
+ # Skip comments leading up to the patch (if any). Although we do not
+ # look for an Index: pseudo-header in the comments, because we would
+ # not use it anyway, as we require both ---/+++ filename headers.
+ while (1) {
+ if ($line =~ /^(?:--- |\+\+\+ |@@ -)/) {
+ last;
+ } else {
+ $patch_header .= "$line\n";
+ }
+ $line = _getline($self);
+ last HUNK if not defined $line;
+ }
+ $diff_count++;
+ # read file header (---/+++ pair)
+ unless ($line =~ s/^--- //) {
+ error(g_("expected ^--- in line %d of diff '%s'"), $., $diff);
+ }
+ $path{old} = $line = _fetch_filename($diff, $line);
+ if ($line ne '/dev/null' and $line =~ s{^[^/]*/+}{$destdir/}) {
+ $fn{old} = $line;
+ }
+ if ($line =~ /\.dpkg-orig$/) {
+ error(g_("diff '%s' patches file with name ending in .dpkg-orig"),
+ $diff);
+ }
+
+ $line = _getline($self);
+ unless (defined $line) {
+ error(g_("diff '%s' finishes in middle of ---/+++ (line %d)"),
+ $diff, $.);
+ }
+ unless ($line =~ s/^\+\+\+ //) {
+ error(g_("line after --- isn't as expected in diff '%s' (line %d)"),
+ $diff, $.);
+ }
+ $path{new} = $line = _fetch_filename($diff, $line);
+ if ($line ne '/dev/null' and $line =~ s{^[^/]*/+}{$destdir/}) {
+ $fn{new} = $line;
+ }
+
+ unless (defined $fn{old} or defined $fn{new}) {
+ error(g_("none of the filenames in ---/+++ are valid in diff '%s' (line %d)"),
+ $diff, $.);
+ }
+
+ # Safety checks on both filenames that patch could use
+ foreach my $key ('old', 'new') {
+ next unless defined $fn{$key};
+ if ($path{$key} =~ m{/\.\./}) {
+ error(g_('%s contains an insecure path: %s'), $diff, $path{$key});
+ }
+ my $path = $fn{$key};
+ while (1) {
+ if (-l $path) {
+ error(g_('diff %s modifies file %s through a symlink: %s'),
+ $diff, $fn{$key}, $path);
+ }
+ last unless $path =~ s{/+[^/]*$}{};
+ last if length($path) <= length($destdir); # $destdir is assumed safe
+ }
+ }
+
+ if ($path{old} eq '/dev/null' and $path{new} eq '/dev/null') {
+ error(g_("original and modified files are /dev/null in diff '%s' (line %d)"),
+ $diff, $.);
+ } elsif ($path{new} eq '/dev/null') {
+ error(g_("file removal without proper filename in diff '%s' (line %d)"),
+ $diff, $. - 1) unless defined $fn{old};
+ if ($opts{verbose}) {
+ warning(g_('diff %s removes a non-existing file %s (line %d)'),
+ $diff, $fn{old}, $.) unless -e $fn{old};
+ }
+ }
+ my $fn = _intuit_file_patched($fn{old}, $fn{new});
+
+ my $dirname = $fn;
+ if ($dirname =~ s{/[^/]+$}{} and not -d $dirname) {
+ $dirtocreate{$dirname} = 1;
+ }
+
+ if (-e $fn and not -f _) {
+ error(g_("diff '%s' patches something which is not a plain file"),
+ $diff);
+ }
+
+ if ($filepatched{$fn}) {
+ $filepatched{$fn}++;
+
+ if ($opts{fatal_dupes}) {
+ error(g_("diff '%s' patches files multiple times; split the " .
+ 'diff in multiple files or merge the hunks into a ' .
+ 'single one'), $diff);
+ } elsif ($opts{verbose} and $filepatched{$fn} == 2) {
+ warning(g_("diff '%s' patches file %s more than once"), $diff, $fn)
+ }
+ } else {
+ $filepatched{$fn} = 1;
+ push @patchorder, $fn;
+ }
+
+ # read hunks
+ my $hunk = 0;
+ while (defined($line = _getline($self))) {
+ # read hunk header (@@)
+ next if $line =~ /^\\ /;
+ last unless $line =~ /^@@ -\d+(,(\d+))? \+\d+(,(\d+))? @\@(?: .*)?$/;
+ my ($olines, $nlines) = ($1 ? $2 : 1, $3 ? $4 : 1);
+ # read hunk
+ while ($olines || $nlines) {
+ unless (defined($line = _getline($self))) {
+ if (($olines == $nlines) and ($olines < 3)) {
+ warning(g_("unexpected end of diff '%s'"), $diff)
+ if $opts{verbose};
+ last;
+ } else {
+ error(g_("unexpected end of diff '%s'"), $diff);
+ }
+ }
+ next if $line =~ /^\\ /;
+ # Check stats
+ if ($line =~ /^ / or length $line == 0) {
+ --$olines;
+ --$nlines;
+ } elsif ($line =~ /^-/) {
+ --$olines;
+ } elsif ($line =~ /^\+/) {
+ --$nlines;
+ } else {
+ error(g_("expected [ +-] at start of line %d of diff '%s'"),
+ $., $diff);
+ }
+ }
+ $hunk++;
+ }
+ unless ($hunk) {
+ error(g_("expected ^\@\@ at line %d of diff '%s'"), $., $diff);
+ }
+ }
+ close($self);
+ unless ($diff_count) {
+ warning(g_("diff '%s' doesn't contain any patch"), $diff)
+ if $opts{verbose};
+ }
+ *$self->{analysis}{$destdir}{dirtocreate} = \%dirtocreate;
+ *$self->{analysis}{$destdir}{filepatched} = \%filepatched;
+ *$self->{analysis}{$destdir}{patchorder} = \@patchorder;
+ *$self->{analysis}{$destdir}{patchheader} = $patch_header;
+ return *$self->{analysis}{$destdir};
+}
+
+sub prepare_apply {
+ my ($self, $analysis, %opts) = @_;
+ if ($opts{create_dirs}) {
+ foreach my $dir (keys %{$analysis->{dirtocreate}}) {
+ eval { make_path($dir, { mode => 0777 }) };
+ syserr(g_('cannot create directory %s'), $dir) if $@;
+ }
+ }
+}
+
+sub apply {
+ my ($self, $destdir, %opts) = @_;
+ # Set default values to options
+ $opts{force_timestamp} //= 1;
+ $opts{remove_backup} //= 1;
+ $opts{create_dirs} //= 1;
+ $opts{options} ||= [
+ '-t',
+ '-F', '0',
+ '-N',
+ '-p1',
+ '-u',
+ '-V', 'never',
+ '-b',
+ '-z', '.dpkg-orig',
+ ];
+ $opts{add_options} //= [];
+ push @{$opts{options}}, @{$opts{add_options}};
+ # Check the diff and create missing directories
+ my $analysis = $self->analyze($destdir, %opts);
+ $self->prepare_apply($analysis, %opts);
+ # Apply the patch
+ $self->ensure_open('r');
+ my ($stdout, $stderr) = ('', '');
+ spawn(
+ exec => [ $Dpkg::PROGPATCH, @{$opts{options}} ],
+ chdir => $destdir,
+ env => { LC_ALL => 'C', LANG => 'C', PATCH_GET => '0' },
+ delete_env => [ 'POSIXLY_CORRECT' ], # ensure expected patch behaviour
+ wait_child => 1,
+ nocheck => 1,
+ from_handle => $self->get_filehandle(),
+ to_string => \$stdout,
+ error_to_string => \$stderr,
+ );
+ if ($?) {
+ print { *STDOUT } $stdout;
+ print { *STDERR } $stderr;
+ subprocerr("LC_ALL=C $Dpkg::PROGPATCH " . join(' ', @{$opts{options}}) .
+ ' < ' . $self->get_filename());
+ }
+ $self->close();
+ # Reset the timestamp of all the patched files
+ # and remove .dpkg-orig files
+ my @files = keys %{$analysis->{filepatched}};
+ my $now = $opts{timestamp};
+ $now //= fs_time($files[0]) if $opts{force_timestamp} && scalar @files;
+ foreach my $fn (@files) {
+ if ($opts{force_timestamp}) {
+ utime($now, $now, $fn) or $! == ENOENT
+ or syserr(g_('cannot change timestamp for %s'), $fn);
+ }
+ if ($opts{remove_backup}) {
+ $fn .= '.dpkg-orig';
+ unlink($fn) or syserr(g_('remove patch backup file %s'), $fn);
+ }
+ }
+ return $analysis;
+}
+
+# Verify if check will work...
+sub check_apply {
+ my ($self, $destdir, %opts) = @_;
+ # Set default values to options
+ $opts{create_dirs} //= 1;
+ $opts{options} ||= [
+ '--dry-run',
+ '-s',
+ '-t',
+ '-F', '0',
+ '-N',
+ '-p1',
+ '-u',
+ '-V', 'never',
+ '-b',
+ '-z', '.dpkg-orig',
+ ];
+ $opts{add_options} //= [];
+ push @{$opts{options}}, @{$opts{add_options}};
+ # Check the diff and create missing directories
+ my $analysis = $self->analyze($destdir, %opts);
+ $self->prepare_apply($analysis, %opts);
+ # Apply the patch
+ $self->ensure_open('r');
+ my $patch_pid = spawn(
+ exec => [ $Dpkg::PROGPATCH, @{$opts{options}} ],
+ chdir => $destdir,
+ env => { LC_ALL => 'C', LANG => 'C', PATCH_GET => '0' },
+ delete_env => [ 'POSIXLY_CORRECT' ], # ensure expected patch behaviour
+ from_handle => $self->get_filehandle(),
+ to_file => '/dev/null',
+ error_to_file => '/dev/null',
+ );
+ wait_child($patch_pid, nocheck => 1);
+ my $exit = WEXITSTATUS($?);
+ subprocerr("$Dpkg::PROGPATCH --dry-run") unless WIFEXITED($?);
+ $self->close();
+ return ($exit == 0);
+}
+
+# Helper functions
+sub get_type {
+ my $file = shift;
+ if (not lstat($file)) {
+ return g_('nonexistent') if $! == ENOENT;
+ syserr(g_('cannot stat %s'), $file);
+ } else {
+ -f _ && return g_('plain file');
+ -d _ && return g_('directory');
+ -l _ && return sprintf(g_('symlink to %s'), readlink($file));
+ -b _ && return g_('block device');
+ -c _ && return g_('character device');
+ -p _ && return g_('named pipe');
+ -S _ && return g_('named socket');
+ }
+}
+
+1;
diff --git a/scripts/Dpkg/Source/Quilt.pm b/scripts/Dpkg/Source/Quilt.pm
new file mode 100644
index 0000000..3e655fa
--- /dev/null
+++ b/scripts/Dpkg/Source/Quilt.pm
@@ -0,0 +1,383 @@
+# Copyright © 2008-2012 Raphaël Hertzog <hertzog@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::Source::Quilt;
+
+use strict;
+use warnings;
+
+our $VERSION = '0.02';
+
+use List::Util qw(any none);
+use File::Spec;
+use File::Copy;
+use File::Find;
+use File::Path qw(make_path);
+use File::Basename;
+
+use Dpkg::Gettext;
+use Dpkg::ErrorHandling;
+use Dpkg::File;
+use Dpkg::Source::Patch;
+use Dpkg::Source::Functions qw(erasedir chmod_if_needed fs_time);
+use Dpkg::Vendor qw(get_current_vendor);
+
+sub new {
+ my ($this, $dir, %opts) = @_;
+ my $class = ref($this) || $this;
+
+ my $self = {
+ dir => $dir,
+ };
+ bless $self, $class;
+
+ $self->load_series();
+ $self->load_db();
+
+ return $self;
+}
+
+sub setup_db {
+ my $self = shift;
+ my $db_dir = $self->get_db_file();
+ if (not -d $db_dir) {
+ mkdir $db_dir or syserr(g_('cannot mkdir %s'), $db_dir);
+ }
+ my $file = $self->get_db_file('.version');
+ if (not -e $file) {
+ file_dump($file, "2\n");
+ }
+ # The files below are used by quilt to know where patches are stored
+ # and what file contains the patch list (supported by quilt >= 0.48-5
+ # in Debian).
+ $file = $self->get_db_file('.quilt_patches');
+ if (not -e $file) {
+ file_dump($file, "debian/patches\n");
+ }
+ $file = $self->get_db_file('.quilt_series');
+ if (not -e $file) {
+ my $series = $self->get_series_file();
+ $series = (File::Spec->splitpath($series))[2];
+ file_dump($file, "$series\n");
+ }
+}
+
+sub load_db {
+ my $self = shift;
+
+ my $pc_applied = $self->get_db_file('applied-patches');
+ $self->{applied_patches} = [ $self->read_patch_list($pc_applied) ];
+}
+
+sub save_db {
+ my $self = shift;
+
+ $self->setup_db();
+ my $pc_applied = $self->get_db_file('applied-patches');
+ $self->write_patch_list($pc_applied, $self->{applied_patches});
+}
+
+sub load_series {
+ my ($self, %opts) = @_;
+
+ my $series = $self->get_series_file();
+ $self->{series} = [ $self->read_patch_list($series, %opts) ];
+}
+
+sub series {
+ my $self = shift;
+ return @{$self->{series}};
+}
+
+sub applied {
+ my $self = shift;
+ return @{$self->{applied_patches}};
+}
+
+sub top {
+ my $self = shift;
+ my $count = scalar @{$self->{applied_patches}};
+ return $self->{applied_patches}[$count - 1] if $count;
+ return;
+}
+
+sub register {
+ my ($self, $patch_name) = @_;
+
+ return if any { $_ eq $patch_name } @{$self->{series}};
+
+ # Add patch to series files.
+ $self->setup_db();
+ $self->_file_add_line($self->get_series_file(), $patch_name);
+ $self->_file_add_line($self->get_db_file('applied-patches'), $patch_name);
+ $self->load_db();
+ $self->load_series();
+
+ # Ensure quilt meta-data is created and in sync with some trickery:
+ # Reverse-apply the patch, drop .pc/$patch, and re-apply it with the
+ # correct options to recreate the backup files.
+ $self->pop(reverse_apply => 1);
+ $self->push();
+}
+
+sub unregister {
+ my ($self, $patch_name) = @_;
+
+ return if none { $_ eq $patch_name } @{$self->{series}};
+
+ my $series = $self->get_series_file();
+
+ $self->_file_drop_line($series, $patch_name);
+ $self->_file_drop_line($self->get_db_file('applied-patches'), $patch_name);
+ erasedir($self->get_db_file($patch_name));
+ $self->load_db();
+ $self->load_series();
+
+ # Clean up empty series.
+ unlink $series if -z $series;
+}
+
+sub next {
+ my $self = shift;
+ my $count_applied = scalar @{$self->{applied_patches}};
+ my $count_series = scalar @{$self->{series}};
+ return $self->{series}[$count_applied] if ($count_series > $count_applied);
+ return;
+}
+
+sub push {
+ my ($self, %opts) = @_;
+ $opts{verbose} //= 0;
+ $opts{timestamp} //= fs_time($self->{dir});
+
+ my $patch = $self->next();
+ return unless defined $patch;
+
+ my $path = $self->get_patch_file($patch);
+ my $obj = Dpkg::Source::Patch->new(filename => $path);
+
+ info(g_('applying %s'), $patch) if $opts{verbose};
+ eval {
+ $obj->apply($self->{dir}, timestamp => $opts{timestamp},
+ verbose => $opts{verbose},
+ force_timestamp => 1, create_dirs => 1, remove_backup => 0,
+ options => [ '-t', '-F', '0', '-N', '-p1', '-u',
+ '-V', 'never', '-E', '-b',
+ '-B', ".pc/$patch/", '--reject-file=-' ]);
+ };
+ if ($@) {
+ info(g_('the patch has fuzz which is not allowed, or is malformed'));
+ info(g_("if patch '%s' is correctly applied by quilt, use '%s' to update it"),
+ $patch, 'quilt refresh');
+ info(g_('if the file is present in the unpacked source, make sure it ' .
+ 'is also present in the orig tarball'));
+ $self->restore_quilt_backup_files($patch, %opts);
+ erasedir($self->get_db_file($patch));
+ die $@;
+ }
+ CORE::push @{$self->{applied_patches}}, $patch;
+ $self->save_db();
+}
+
+sub pop {
+ my ($self, %opts) = @_;
+ $opts{verbose} //= 0;
+ $opts{timestamp} //= fs_time($self->{dir});
+ $opts{reverse_apply} //= 0;
+
+ my $patch = $self->top();
+ return unless defined $patch;
+
+ info(g_('unapplying %s'), $patch) if $opts{verbose};
+ my $backup_dir = $self->get_db_file($patch);
+ if (-d $backup_dir and not $opts{reverse_apply}) {
+ # Use the backup copies to restore
+ $self->restore_quilt_backup_files($patch);
+ } else {
+ # Otherwise reverse-apply the patch
+ my $path = $self->get_patch_file($patch);
+ my $obj = Dpkg::Source::Patch->new(filename => $path);
+
+ $obj->apply($self->{dir}, timestamp => $opts{timestamp},
+ verbose => 0, force_timestamp => 1, remove_backup => 0,
+ options => [ '-R', '-t', '-N', '-p1',
+ '-u', '-V', 'never', '-E',
+ '--no-backup-if-mismatch' ]);
+ }
+
+ erasedir($backup_dir);
+ pop @{$self->{applied_patches}};
+ $self->save_db();
+}
+
+sub get_db_version {
+ my $self = shift;
+ my $pc_ver = $self->get_db_file('.version');
+ if (-f $pc_ver) {
+ my $version = file_slurp($pc_ver);
+ chomp $version;
+ return $version;
+ }
+ return;
+}
+
+sub find_problems {
+ my $self = shift;
+ my $patch_dir = $self->get_patch_file();
+ if (-e $patch_dir and not -d _) {
+ return sprintf(g_('%s should be a directory or non-existing'), $patch_dir);
+ }
+ my $series = $self->get_series_file();
+ if (-e $series and not -f _) {
+ return sprintf(g_('%s should be a file or non-existing'), $series);
+ }
+ return;
+}
+
+sub get_series_file {
+ my $self = shift;
+ my $vendor = lc(get_current_vendor() || 'debian');
+ # Series files are stored alongside patches
+ my $default_series = $self->get_patch_file('series');
+ my $vendor_series = $self->get_patch_file("$vendor.series");
+ return $vendor_series if -e $vendor_series;
+ return $default_series;
+}
+
+sub get_db_file {
+ my $self = shift;
+ return File::Spec->catfile($self->{dir}, '.pc', @_);
+}
+
+sub get_db_dir {
+ my $self = shift;
+ return $self->get_db_file();
+}
+
+sub get_patch_file {
+ my $self = shift;
+ return File::Spec->catfile($self->{dir}, 'debian', 'patches', @_);
+}
+
+sub get_patch_dir {
+ my $self = shift;
+ return $self->get_patch_file();
+}
+
+## METHODS BELOW ARE INTERNAL ##
+
+sub _file_load {
+ my ($self, $file) = @_;
+
+ open my $file_fh, '<', $file or syserr(g_('cannot read %s'), $file);
+ my @lines = <$file_fh>;
+ close $file_fh;
+
+ return @lines;
+}
+
+sub _file_add_line {
+ my ($self, $file, $line) = @_;
+
+ my @lines;
+ @lines = $self->_file_load($file) if -f $file;
+ CORE::push @lines, $line;
+ chomp @lines;
+
+ open my $file_fh, '>', $file or syserr(g_('cannot write %s'), $file);
+ print { $file_fh } "$_\n" foreach @lines;
+ close $file_fh;
+}
+
+sub _file_drop_line {
+ my ($self, $file, $re) = @_;
+
+ my @lines = $self->_file_load($file);
+ open my $file_fh, '>', $file or syserr(g_('cannot write %s'), $file);
+ print { $file_fh } $_ foreach grep { not /^\Q$re\E\s*$/ } @lines;
+ close $file_fh;
+}
+
+sub read_patch_list {
+ my ($self, $file, %opts) = @_;
+ return () if not defined $file or not -f $file;
+ $opts{warn_options} //= 0;
+ my @patches;
+ open(my $series_fh, '<' , $file) or syserr(g_('cannot read %s'), $file);
+ while (defined(my $line = <$series_fh>)) {
+ chomp $line;
+ # Strip leading/trailing spaces
+ $line =~ s/^\s+//;
+ $line =~ s/\s+$//;
+ # Strip comment
+ $line =~ s/(?:^|\s+)#.*$//;
+ next unless $line;
+ if ($line =~ /^(\S+)\s+(.*)$/) {
+ $line = $1;
+ if ($2 ne '-p1') {
+ warning(g_('the series file (%s) contains unsupported ' .
+ "options ('%s', line %s); dpkg-source might " .
+ 'fail when applying patches'),
+ $file, $2, $.) if $opts{warn_options};
+ }
+ }
+ if ($line =~ m{(^|/)\.\./}) {
+ error(g_('%s contains an insecure path: %s'), $file, $line);
+ }
+ CORE::push @patches, $line;
+ }
+ close($series_fh);
+ return @patches;
+}
+
+sub write_patch_list {
+ my ($self, $series, $patches) = @_;
+
+ open my $series_fh, '>', $series or syserr(g_('cannot write %s'), $series);
+ foreach my $patch (@{$patches}) {
+ print { $series_fh } "$patch\n";
+ }
+ close $series_fh;
+}
+
+sub restore_quilt_backup_files {
+ my ($self, $patch, %opts) = @_;
+ my $patch_dir = $self->get_db_file($patch);
+ return unless -d $patch_dir;
+ info(g_('restoring quilt backup files for %s'), $patch) if $opts{verbose};
+ find({
+ no_chdir => 1,
+ wanted => sub {
+ return if -d;
+ my $relpath_in_srcpkg = File::Spec->abs2rel($_, $patch_dir);
+ my $target = File::Spec->catfile($self->{dir}, $relpath_in_srcpkg);
+ if (-s) {
+ unlink($target);
+ make_path(dirname($target));
+ unless (link($_, $target)) {
+ copy($_, $target)
+ or syserr(g_('failed to copy %s to %s'), $_, $target);
+ chmod_if_needed((stat _)[2], $target)
+ or syserr(g_("unable to change permission of '%s'"), $target);
+ }
+ } else {
+ # empty files are "backups" for new files that patch created
+ unlink($target);
+ }
+ }
+ }, $patch_dir);
+}
+
+1;
diff --git a/scripts/Dpkg/Substvars.pm b/scripts/Dpkg/Substvars.pm
new file mode 100644
index 0000000..d2abc3f
--- /dev/null
+++ b/scripts/Dpkg/Substvars.pm
@@ -0,0 +1,501 @@
+# Copyright © 2006-2009, 2012-2020, 2022 Guillem Jover <guillem@debian.org>
+# Copyright © 2007-2010 Raphaël Hertzog <hertzog@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::Substvars;
+
+use strict;
+use warnings;
+
+our $VERSION = '2.01';
+
+use Dpkg ();
+use Dpkg::Arch qw(get_host_arch);
+use Dpkg::Vendor qw(get_current_vendor);
+use Dpkg::Version;
+use Dpkg::ErrorHandling;
+use Dpkg::Gettext;
+
+use parent qw(Dpkg::Interface::Storable);
+
+my $maxsubsts = 50;
+
+=encoding utf8
+
+=head1 NAME
+
+Dpkg::Substvars - handle variable substitution in strings
+
+=head1 DESCRIPTION
+
+It provides a class which is able to substitute variables in strings.
+
+=cut
+
+use constant {
+ SUBSTVAR_ATTR_USED => 1,
+ SUBSTVAR_ATTR_AUTO => 2,
+ SUBSTVAR_ATTR_AGED => 4,
+ SUBSTVAR_ATTR_OPT => 8,
+};
+
+=head1 METHODS
+
+=over 8
+
+=item $s = Dpkg::Substvars->new($file)
+
+Create a new object that can do substitutions. By default it contains
+generic substitutions like ${Newline}, ${Space}, ${Tab}, ${dpkg:Version}
+and ${dpkg:Upstream-Version}.
+
+Additional substitutions will be read from the $file passed as parameter.
+
+It keeps track of which substitutions were actually used (only counting
+substvars(), not get()), and warns about unused substvars when asked to. The
+substitutions that are always present are not included in these warnings.
+
+=cut
+
+sub new {
+ my ($this, $arg) = @_;
+ my $class = ref($this) || $this;
+ my $self = {
+ vars => {
+ 'Newline' => "\n",
+ 'Space' => ' ',
+ 'Tab' => "\t",
+ 'dpkg:Version' => $Dpkg::PROGVERSION,
+ 'dpkg:Upstream-Version' => $Dpkg::PROGVERSION,
+ },
+ attr => {},
+ msg_prefix => '',
+ };
+ $self->{vars}{'dpkg:Upstream-Version'} =~ s/-[^-]+$//;
+ bless $self, $class;
+
+ my $attr = SUBSTVAR_ATTR_USED | SUBSTVAR_ATTR_AUTO;
+ $self->{attr}{$_} = $attr foreach keys %{$self->{vars}};
+ if ($arg) {
+ $self->load($arg) if -e $arg;
+ }
+ return $self;
+}
+
+=item $s->set($key, $value)
+
+Add/replace a substitution.
+
+=cut
+
+sub set {
+ my ($self, $key, $value, $attr) = @_;
+
+ $attr //= 0;
+
+ $self->{vars}{$key} = $value;
+ $self->{attr}{$key} = $attr;
+}
+
+=item $s->set_as_used($key, $value)
+
+Add/replace a substitution and mark it as used (no warnings will be produced
+even if unused).
+
+=cut
+
+sub set_as_used {
+ my ($self, $key, $value) = @_;
+
+ $self->set($key, $value, SUBSTVAR_ATTR_USED);
+}
+
+=item $s->set_as_auto($key, $value)
+
+Add/replace a substitution and mark it as used and automatic (no warnings
+will be produced even if unused).
+
+=cut
+
+sub set_as_auto {
+ my ($self, $key, $value) = @_;
+
+ $self->set($key, $value, SUBSTVAR_ATTR_USED | SUBSTVAR_ATTR_AUTO);
+}
+
+=item $s->get($key)
+
+Get the value of a given substitution.
+
+=cut
+
+sub get {
+ my ($self, $key) = @_;
+ return $self->{vars}{$key};
+}
+
+=item $s->delete($key)
+
+Remove a given substitution.
+
+=cut
+
+sub delete {
+ my ($self, $key) = @_;
+ delete $self->{attr}{$key};
+ return delete $self->{vars}{$key};
+}
+
+=item $s->mark_as_used($key)
+
+Prevents warnings about a unused substitution, for example if it is provided by
+default.
+
+=cut
+
+sub mark_as_used {
+ my ($self, $key) = @_;
+ $self->{attr}{$key} |= SUBSTVAR_ATTR_USED;
+}
+
+=item $s->parse($fh, $desc)
+
+Add new substitutions read from the filehandle. $desc is used to identify
+the filehandle in error messages.
+
+Returns the number of substitutions that have been parsed with success.
+
+=cut
+
+sub parse {
+ my ($self, $fh, $varlistfile) = @_;
+ my $count = 0;
+ local $_;
+
+ binmode($fh);
+ while (<$fh>) {
+ my $attr;
+
+ next if m/^\s*\#/ || !m/\S/;
+ s/\s*\n$//;
+ if (! m/^(\w[-:0-9A-Za-z]*)(\?)?\=(.*)$/) {
+ error(g_('bad line in substvars file %s at line %d'),
+ $varlistfile, $.);
+ }
+ if (defined $2) {
+ $attr = (SUBSTVAR_ATTR_USED | SUBSTVAR_ATTR_OPT) if $2 eq '?';
+ }
+ $self->set($1, $3, $attr);
+ $count++;
+ }
+
+ return $count
+}
+
+=item $s->load($file)
+
+Add new substitutions read from $file.
+
+=item $s->set_version_substvars($sourceversion, $binaryversion)
+
+Defines ${binary:Version}, ${source:Version} and
+${source:Upstream-Version} based on the given version strings.
+
+These will never be warned about when unused.
+
+=cut
+
+sub set_version_substvars {
+ my ($self, $sourceversion, $binaryversion) = @_;
+
+ # Handle old function signature taking only one argument.
+ $binaryversion //= $sourceversion;
+
+ # For backwards compatibility on binNMUs that do not use the Binary-Only
+ # field on the changelog, always fix up the source version.
+ $sourceversion =~ s/\+b[0-9]+$//;
+
+ my $vs = Dpkg::Version->new($sourceversion, check => 1);
+ if (not defined $vs) {
+ error(g_('invalid source version %s'), $sourceversion);
+ }
+ my $upstreamversion = $vs->as_string(omit_revision => 1);
+
+ my $attr = SUBSTVAR_ATTR_USED | SUBSTVAR_ATTR_AUTO;
+
+ $self->set('binary:Version', $binaryversion, $attr);
+ $self->set('source:Version', $sourceversion, $attr);
+ $self->set('source:Upstream-Version', $upstreamversion, $attr);
+
+ # XXX: Source-Version is now obsolete, remove in 1.19.x.
+ $self->set('Source-Version', $binaryversion, $attr | SUBSTVAR_ATTR_AGED);
+}
+
+=item $s->set_arch_substvars()
+
+Defines architecture variables: ${Arch}.
+
+This will never be warned about when unused.
+
+=cut
+
+sub set_arch_substvars {
+ my $self = shift;
+
+ my $attr = SUBSTVAR_ATTR_USED | SUBSTVAR_ATTR_AUTO;
+
+ $self->set('Arch', get_host_arch(), $attr);
+}
+
+=item $s->set_vendor_substvars()
+
+Defines vendor variables: ${vendor:Name} and ${vendor:Id}.
+
+These will never be warned about when unused.
+
+=cut
+
+sub set_vendor_substvars {
+ my ($self, $desc) = @_;
+
+ my $attr = SUBSTVAR_ATTR_USED | SUBSTVAR_ATTR_AUTO;
+
+ my $vendor = get_current_vendor();
+ $self->set('vendor:Name', $vendor, $attr);
+ $self->set('vendor:Id', lc $vendor, $attr);
+}
+
+=item $s->set_desc_substvars()
+
+Defines source description variables: ${source:Synopsis} and
+${source:Extended-Description}.
+
+These will never be warned about when unused.
+
+=cut
+
+sub set_desc_substvars {
+ my ($self, $desc) = @_;
+
+ my ($synopsis, $extended) = split /\n/, $desc, 2;
+
+ my $attr = SUBSTVAR_ATTR_USED | SUBSTVAR_ATTR_AUTO;
+
+ $self->set('source:Synopsis', $synopsis, $attr);
+ $self->set('source:Extended-Description', $extended, $attr);
+}
+
+=item $s->set_field_substvars($ctrl, $prefix)
+
+Defines field variables from a Dpkg::Control object, with each variable
+having the form "${$prefix:$field}".
+
+They will never be warned about when unused.
+
+=cut
+
+sub set_field_substvars {
+ my ($self, $ctrl, $prefix) = @_;
+
+ foreach my $field (keys %{$ctrl}) {
+ $self->set_as_auto("$prefix:$field", $ctrl->{$field});
+ }
+}
+
+=item $newstring = $s->substvars($string)
+
+Substitutes variables in $string and return the result in $newstring.
+
+=cut
+
+sub substvars {
+ my ($self, $v, %opts) = @_;
+ my $lhs;
+ my $vn;
+ my $rhs = '';
+ my $count = 0;
+ $opts{msg_prefix} //= $self->{msg_prefix};
+ $opts{no_warn} //= 0;
+
+ while ($v =~ m/^(.*?)\$\{([-:0-9a-z]+)\}(.*)$/si) {
+ # If we have consumed more from the leftover data, then
+ # reset the recursive counter.
+ $count = 0 if (length($3) < length($rhs));
+
+ if ($count >= $maxsubsts) {
+ error($opts{msg_prefix} .
+ g_("too many substitutions - recursive ? - in '%s'"), $v);
+ }
+ $lhs = $1;
+ $vn = $2;
+ $rhs = $3;
+ if (defined($self->{vars}{$vn})) {
+ $v = $lhs . $self->{vars}{$vn} . $rhs;
+ $self->mark_as_used($vn);
+ $count++;
+
+ if ($self->{attr}{$vn} & SUBSTVAR_ATTR_AGED) {
+ error($opts{msg_prefix} .
+ g_('obsolete substitution variable ${%s}'), $vn);
+ }
+ } else {
+ warning($opts{msg_prefix} .
+ g_('substitution variable ${%s} used, but is not defined'),
+ $vn) unless $opts{no_warn};
+ $v = $lhs . $rhs;
+ }
+ }
+ return $v;
+}
+
+=item $s->warn_about_unused()
+
+Issues warning about any variables that were set, but not used.
+
+=cut
+
+sub warn_about_unused {
+ my ($self, %opts) = @_;
+ $opts{msg_prefix} //= $self->{msg_prefix};
+
+ foreach my $vn (sort keys %{$self->{vars}}) {
+ next if $self->{attr}{$vn} & SUBSTVAR_ATTR_USED;
+ # Empty substitutions variables are ignored on the basis
+ # that they are not required in the current situation
+ # (example: debhelper's misc:Depends in many cases)
+ next if $self->{vars}{$vn} eq '';
+ warning($opts{msg_prefix} .
+ g_('substitution variable ${%s} unused, but is defined'),
+ $vn);
+ }
+}
+
+=item $s->set_msg_prefix($prefix)
+
+Define a prefix displayed before all warnings/error messages output
+by the module.
+
+=cut
+
+sub set_msg_prefix {
+ my ($self, $prefix) = @_;
+ $self->{msg_prefix} = $prefix;
+}
+
+=item $s->filter(remove => $rmfunc)
+
+=item $s->filter(keep => $keepfun)
+
+Filter the substitution variables, either removing or keeping all those
+that return true when $rmfunc->($key) or $keepfunc->($key) is called.
+
+=cut
+
+sub filter {
+ my ($self, %opts) = @_;
+
+ my $remove = $opts{remove} // sub { 0 };
+ my $keep = $opts{keep} // sub { 1 };
+
+ foreach my $vn (keys %{$self->{vars}}) {
+ $self->delete($vn) if $remove->($vn) or not $keep->($vn);
+ }
+}
+
+=item "$s"
+
+Return a string representation of all substitutions variables except the
+automatic ones.
+
+=item $str = $s->output([$fh])
+
+Return all substitutions variables except the automatic ones. If $fh
+is passed print them into the filehandle.
+
+=cut
+
+sub output {
+ my ($self, $fh) = @_;
+ my $str = '';
+ # Store all non-automatic substitutions only
+ foreach my $vn (sort keys %{$self->{vars}}) {
+ next if $self->{attr}{$vn} & SUBSTVAR_ATTR_AUTO;
+ my $op = $self->{attr}{$vn} & SUBSTVAR_ATTR_OPT ? '?=' : '=';
+ my $line = "$vn$op" . $self->{vars}{$vn} . "\n";
+ print { $fh } $line if defined $fh;
+ $str .= $line;
+ }
+ return $str;
+}
+
+=item $s->save($file)
+
+Store all substitutions variables except the automatic ones in the
+indicated file.
+
+=back
+
+=head1 CHANGES
+
+=head2 Version 2.01 (dpkg 1.21.8)
+
+New feature: Add support for optional substitution variables.
+
+=head2 Version 2.00 (dpkg 1.20.0)
+
+Remove method: $s->no_warn().
+
+New method: $s->set_vendor_substvars().
+
+=head2 Version 1.06 (dpkg 1.19.0)
+
+New method: $s->set_desc_substvars().
+
+=head2 Version 1.05 (dpkg 1.18.11)
+
+Obsolete substvar: Emit an error on Source-Version substvar usage.
+
+New return: $s->parse() now returns the number of parsed substvars.
+
+New method: $s->set_field_substvars().
+
+=head2 Version 1.04 (dpkg 1.18.0)
+
+New method: $s->filter().
+
+=head2 Version 1.03 (dpkg 1.17.11)
+
+New method: $s->set_as_auto().
+
+=head2 Version 1.02 (dpkg 1.16.5)
+
+New argument: Accept a $binaryversion in $s->set_version_substvars(),
+passing a single argument is still supported.
+
+New method: $s->mark_as_used().
+
+Deprecated method: $s->no_warn(), use $s->mark_as_used() instead.
+
+=head2 Version 1.01 (dpkg 1.16.4)
+
+New method: $s->set_as_used().
+
+=head2 Version 1.00 (dpkg 1.15.6)
+
+Mark the module as public.
+
+=cut
+
+1;
diff --git a/scripts/Dpkg/Vars.pm b/scripts/Dpkg/Vars.pm
new file mode 100644
index 0000000..2253e39
--- /dev/null
+++ b/scripts/Dpkg/Vars.pm
@@ -0,0 +1,53 @@
+# Copyright © 2007-2009,2012-2013 Guillem Jover <guillem@debian.org>
+# Copyright © 2007 Raphaël Hertzog <hertzog@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::Vars;
+
+use strict;
+use warnings;
+
+our $VERSION = '0.03';
+our @EXPORT = qw(
+ get_source_package
+ set_source_package
+);
+
+use Exporter qw(import);
+
+use Dpkg::ErrorHandling;
+use Dpkg::Gettext;
+use Dpkg::Package;
+
+my $sourcepackage;
+
+sub get_source_package {
+ return $sourcepackage;
+}
+
+sub set_source_package {
+ my $v = shift;
+ my $err = pkg_name_is_illegal($v);
+ error(g_("source package name '%s' is illegal: %s"), $v, $err) if $err;
+
+ if (not defined($sourcepackage)) {
+ $sourcepackage = $v;
+ } elsif ($v ne $sourcepackage) {
+ error(g_('source package has two conflicting values - %s and %s'),
+ $sourcepackage, $v);
+ }
+}
+
+1;
diff --git a/scripts/Dpkg/Vendor.pm b/scripts/Dpkg/Vendor.pm
new file mode 100644
index 0000000..059e442
--- /dev/null
+++ b/scripts/Dpkg/Vendor.pm
@@ -0,0 +1,289 @@
+# Copyright © 2008-2009 Raphaël Hertzog <hertzog@debian.org>
+# Copyright © 2008-2009, 2012-2017, 2022 Guillem Jover <guillem@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::Vendor;
+
+use strict;
+use warnings;
+use feature qw(state);
+
+our $VERSION = '1.02';
+our @EXPORT_OK = qw(
+ get_current_vendor
+ get_vendor_info
+ get_vendor_file
+ get_vendor_dir
+ get_vendor_object
+ run_vendor_hook
+);
+
+use Exporter qw(import);
+use List::Util qw(uniq);
+
+use Dpkg ();
+use Dpkg::ErrorHandling;
+use Dpkg::Gettext;
+use Dpkg::BuildEnv;
+use Dpkg::Control::HashCore;
+
+my $origins = "$Dpkg::CONFDIR/origins";
+$origins = $ENV{DPKG_ORIGINS_DIR} if $ENV{DPKG_ORIGINS_DIR};
+
+=encoding utf8
+
+=head1 NAME
+
+Dpkg::Vendor - get access to some vendor specific information
+
+=head1 DESCRIPTION
+
+The files in $Dpkg::CONFDIR/origins/ can provide information about various
+vendors who are providing Debian packages. Currently those files look like
+this:
+
+ Vendor: Debian
+ Vendor-URL: https://www.debian.org/
+ Bugs: debbugs://bugs.debian.org
+
+If the vendor derives from another vendor, the file should document
+the relationship by listing the base distribution in the Parent field:
+
+ Parent: Debian
+
+The file should be named according to the vendor name. The usual convention
+is to name the vendor file using the vendor name in all lowercase, but some
+variation is permitted. Namely, spaces are mapped to dashes ('-'), and the
+file can have the same casing as the Vendor field, or it can be capitalized.
+
+=head1 FUNCTIONS
+
+=over 4
+
+=item $dir = get_vendor_dir()
+
+Returns the current dpkg origins directory name, where the vendor files
+are stored.
+
+=cut
+
+sub get_vendor_dir {
+ return $origins;
+}
+
+=item $fields = get_vendor_info($name)
+
+Returns a Dpkg::Control object with the information parsed from the
+corresponding vendor file in $Dpkg::CONFDIR/origins/. If $name is omitted,
+it will use $Dpkg::CONFDIR/origins/default which is supposed to be a symlink
+to the vendor of the currently installed operating system. Returns undef
+if there's no file for the given vendor.
+
+=cut
+
+my $vendor_sep_regex = qr{[^A-Za-z0-9]+};
+
+sub get_vendor_info(;$) {
+ my $vendor = shift || 'default';
+ my $vendor_key = lc $vendor =~ s{$vendor_sep_regex}{}gr;
+ state %VENDOR_CACHE;
+ return $VENDOR_CACHE{$vendor_key} if exists $VENDOR_CACHE{$vendor_key};
+
+ my $file = get_vendor_file($vendor);
+ return unless $file;
+ my $fields = Dpkg::Control::HashCore->new();
+ $fields->load($file, compression => 0) or error(g_('%s is empty'), $file);
+ $VENDOR_CACHE{$vendor_key} = $fields;
+ return $fields;
+}
+
+=item $name = get_vendor_file($name)
+
+Check if there's a file for the given vendor and returns its
+name.
+
+The vendor filename will be derived from the vendor name, by replacing any
+number of non-alphanumeric characters (that is B<[^A-Za-z0-9]>) into "B<->",
+then the resulting name will be tried in sequence by lower-casing it,
+keeping it as is, lower-casing then capitalizing it, and capitalizing it.
+
+In addition, for historical and backwards compatibility, the name will
+be tried keeping it as is without non-alphanumeric characters remapping,
+then the resulting name will be tried in sequence by lower-casing it,
+keeping it as is, lower-casing then capitalizing it, and capitalizing it.
+And finally the name will be tried by replacing only spaces to "B<->",
+then the resulting name will be tried in sequence by lower-casing it,
+keeping it as is, lower-casing then capitalizing it, and capitalizing it.
+
+But these backwards compatible name lookups will be removed during
+the dpkg 1.22.x release cycle.
+
+=cut
+
+sub get_vendor_file(;$) {
+ my $vendor = shift || 'default';
+
+ my @names;
+ my $vendor_sep = $vendor =~ s{$vendor_sep_regex}{-}gr;
+ push @names, lc $vendor_sep, $vendor_sep, ucfirst lc $vendor_sep, ucfirst $vendor_sep;
+
+ # XXX: Backwards compatibility, remove on 1.22.x.
+ my %name_seen = map { $_ => 1 } @names;
+ my @obsolete_names = uniq grep {
+ my $seen = exists $name_seen{$_};
+ $name_seen{$_} = 1;
+ not $seen;
+ } (
+ (lc $vendor, $vendor, ucfirst lc $vendor, ucfirst $vendor),
+ ($vendor =~ s{\s+}{-}g) ?
+ (lc $vendor, $vendor, ucfirst lc $vendor, ucfirst $vendor) : ()
+ );
+ my %obsolete_name = map { $_ => 1 } @obsolete_names;
+ push @names, @obsolete_names;
+
+ foreach my $name (uniq @names) {
+ next unless -e "$origins/$name";
+ if (exists $obsolete_name{$name}) {
+ warning(g_('%s origin filename is deprecated; ' .
+ 'it should have only alphanumeric or dash characters'),
+ $name);
+ }
+ return "$origins/$name";
+ }
+ return;
+}
+
+=item $name = get_current_vendor()
+
+Returns the name of the current vendor. If DEB_VENDOR is set, it uses
+that first, otherwise it falls back to parsing $Dpkg::CONFDIR/origins/default.
+If that file doesn't exist, it returns undef.
+
+=cut
+
+sub get_current_vendor() {
+ my $f;
+ if (Dpkg::BuildEnv::has('DEB_VENDOR')) {
+ $f = get_vendor_info(Dpkg::BuildEnv::get('DEB_VENDOR'));
+ return $f->{'Vendor'} if defined $f;
+ }
+ $f = get_vendor_info();
+ return $f->{'Vendor'} if defined $f;
+ return;
+}
+
+=item $object = get_vendor_object($name)
+
+Return the Dpkg::Vendor::* object of the corresponding vendor.
+If $name is omitted, return the object of the current vendor.
+If no vendor can be identified, then return the Dpkg::Vendor::Default
+object.
+
+The module name will be derived from the vendor name, by splitting parts
+around groups of non alphanumeric character (that is B<[^A-Za-z0-9]>)
+separators, by either capitalizing or lower-casing and capitalizing each part
+and then joining them without the separators. So the expected casing is based
+on the one from the B<Vendor> field in the F<origins> file.
+
+In addition, for historical and backwards compatibility, the module name
+will also be looked up without non-alphanumeric character stripping, by
+capitalizing, lower-casing then capitalizing, as-is or lower-casing.
+But these name lookups will be removed during the 1.22.x release cycle.
+
+=cut
+
+sub get_vendor_object {
+ my $vendor = shift || get_current_vendor() || 'Default';
+ my $vendor_key = lc $vendor =~ s{$vendor_sep_regex}{}gr;
+ state %OBJECT_CACHE;
+ return $OBJECT_CACHE{$vendor_key} if exists $OBJECT_CACHE{$vendor_key};
+
+ my ($obj, @names);
+
+ my @vendor_parts = split m{$vendor_sep_regex}, $vendor;
+ push @names, join q{}, map { ucfirst } @vendor_parts;
+ push @names, join q{}, map { ucfirst lc } @vendor_parts;
+
+ # XXX: Backwards compatibility, remove on 1.22.x.
+ my %name_seen = map { $_ => 1 } @names;
+ my @obsolete_names = uniq grep {
+ my $seen = exists $name_seen{$_};
+ $name_seen{$_} = 1;
+ not $seen;
+ } (ucfirst $vendor, ucfirst lc $vendor, $vendor, lc $vendor);
+ my %obsolete_name = map { $_ => 1 } @obsolete_names;
+ push @names, @obsolete_names;
+
+ foreach my $name (uniq @names) {
+ eval qq{
+ pop \@INC if \$INC[-1] eq '.';
+ require Dpkg::Vendor::$name;
+ \$obj = Dpkg::Vendor::$name->new();
+ };
+ unless ($@) {
+ $OBJECT_CACHE{$vendor_key} = $obj;
+ if (exists $obsolete_name{$name}) {
+ warning(g_('%s module name is deprecated; ' .
+ 'it should be capitalized with only alphanumeric characters'),
+ "Dpkg::Vendor::$name");
+ }
+ return $obj;
+ }
+ }
+
+ my $info = get_vendor_info($vendor);
+ if (defined $info and defined $info->{'Parent'}) {
+ return get_vendor_object($info->{'Parent'});
+ } else {
+ return get_vendor_object('Default');
+ }
+}
+
+=item run_vendor_hook($hookid, @params)
+
+Run a hook implemented by the current vendor object.
+
+=cut
+
+sub run_vendor_hook {
+ my $vendor_obj = get_vendor_object();
+ $vendor_obj->run_hook(@_);
+}
+
+=back
+
+=head1 CHANGES
+
+=head2 Version 1.02 (dpkg 1.21.10)
+
+Deprecated behavior: get_vendor_file() loading vendor files with no special
+characters remapping. get_vendor_object() loading vendor module names with
+no special character stripping.
+
+=head2 Version 1.01 (dpkg 1.17.0)
+
+New function: get_vendor_dir().
+
+=head2 Version 1.00 (dpkg 1.16.1)
+
+Mark the module as public.
+
+=head1 SEE ALSO
+
+deb-origin(5).
+
+=cut
+
+1;
diff --git a/scripts/Dpkg/Vendor/Debian.pm b/scripts/Dpkg/Vendor/Debian.pm
new file mode 100644
index 0000000..06aa49a
--- /dev/null
+++ b/scripts/Dpkg/Vendor/Debian.pm
@@ -0,0 +1,522 @@
+# Copyright © 2009-2011 Raphaël Hertzog <hertzog@debian.org>
+# Copyright © 2009, 2011-2017 Guillem Jover <guillem@debian.org>
+#
+# Hardening build flags handling derived from work of:
+# Copyright © 2009-2011 Kees Cook <kees@debian.org>
+# Copyright © 2007-2008 Canonical, Ltd.
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::Vendor::Debian;
+
+use strict;
+use warnings;
+
+our $VERSION = '0.01';
+
+use Dpkg;
+use Dpkg::Gettext;
+use Dpkg::ErrorHandling;
+use Dpkg::Control::Types;
+
+use parent qw(Dpkg::Vendor::Default);
+
+=encoding utf8
+
+=head1 NAME
+
+Dpkg::Vendor::Debian - Debian vendor class
+
+=head1 DESCRIPTION
+
+This vendor class customizes the behaviour of dpkg scripts for Debian
+specific behavior and policies.
+
+=cut
+
+sub run_hook {
+ my ($self, $hook, @params) = @_;
+
+ if ($hook eq 'package-keyrings') {
+ return ('/usr/share/keyrings/debian-keyring.gpg',
+ '/usr/share/keyrings/debian-nonupload.gpg',
+ '/usr/share/keyrings/debian-maintainers.gpg');
+ } elsif ($hook eq 'archive-keyrings') {
+ return ('/usr/share/keyrings/debian-archive-keyring.gpg');
+ } elsif ($hook eq 'archive-keyrings-historic') {
+ return ('/usr/share/keyrings/debian-archive-removed-keys.gpg');
+ } elsif ($hook eq 'builtin-build-depends') {
+ return qw(build-essential:native);
+ } elsif ($hook eq 'builtin-build-conflicts') {
+ return ();
+ } elsif ($hook eq 'register-custom-fields') {
+ } elsif ($hook eq 'extend-patch-header') {
+ my ($textref, $ch_info) = @params;
+ if ($ch_info->{'Closes'}) {
+ foreach my $bug (split(/\s+/, $ch_info->{'Closes'})) {
+ $$textref .= "Bug-Debian: https://bugs.debian.org/$bug\n";
+ }
+ }
+
+ # XXX: Layer violation...
+ require Dpkg::Vendor::Ubuntu;
+ my $b = Dpkg::Vendor::Ubuntu::find_launchpad_closes($ch_info->{'Changes'});
+ foreach my $bug (@$b) {
+ $$textref .= "Bug-Ubuntu: https://bugs.launchpad.net/bugs/$bug\n";
+ }
+ } elsif ($hook eq 'update-buildflags') {
+ $self->set_build_features(@params);
+ $self->_add_build_flags(@params);
+ } elsif ($hook eq 'builtin-system-build-paths') {
+ return qw(/build/);
+ } elsif ($hook eq 'build-tainted-by') {
+ return $self->_build_tainted_by();
+ } elsif ($hook eq 'sanitize-environment') {
+ # Reset umask to a sane default.
+ umask 0022;
+ # Reset locale to a sane default.
+ $ENV{LC_COLLATE} = 'C.UTF-8';
+ } elsif ($hook eq 'backport-version-regex') {
+ return qr/~(bpo|deb)/;
+ } else {
+ return $self->SUPER::run_hook($hook, @params);
+ }
+}
+
+sub init_build_features {
+ my ($self, $use_feature, $builtin_feature) = @_;
+}
+
+sub set_build_features {
+ my ($self, $flags) = @_;
+
+ # Default feature states.
+ my %use_feature = (
+ future => {
+ lfs => 0,
+ },
+ qa => {
+ bug => 0,
+ canary => 0,
+ },
+ reproducible => {
+ timeless => 1,
+ fixfilepath => 1,
+ fixdebugpath => 1,
+ },
+ optimize => {
+ lto => 0,
+ },
+ sanitize => {
+ address => 0,
+ thread => 0,
+ leak => 0,
+ undefined => 0,
+ },
+ hardening => {
+ # XXX: This is set to undef so that we can cope with the brokenness
+ # of gcc managing this feature builtin.
+ pie => undef,
+ stackprotector => 1,
+ stackprotectorstrong => 1,
+ fortify => 1,
+ format => 1,
+ relro => 1,
+ bindnow => 0,
+ },
+ );
+
+ my %builtin_feature = (
+ hardening => {
+ pie => 1,
+ },
+ );
+
+ $self->init_build_features(\%use_feature, \%builtin_feature);
+
+ ## Setup
+
+ require Dpkg::BuildOptions;
+
+ # Adjust features based on user or maintainer's desires.
+ my $opts_build = Dpkg::BuildOptions->new(envvar => 'DEB_BUILD_OPTIONS');
+ my $opts_maint = Dpkg::BuildOptions->new(envvar => 'DEB_BUILD_MAINT_OPTIONS');
+
+ foreach my $area (sort keys %use_feature) {
+ $opts_build->parse_features($area, $use_feature{$area});
+ $opts_maint->parse_features($area, $use_feature{$area});
+ }
+
+ require Dpkg::Arch;
+
+ my $arch = Dpkg::Arch::get_host_arch();
+ my ($abi, $libc, $os, $cpu) = Dpkg::Arch::debarch_to_debtuple($arch);
+
+ unless (defined $abi and defined $libc and defined $os and defined $cpu) {
+ warning(g_("unknown host architecture '%s'"), $arch);
+ ($abi, $os, $cpu) = ('', '', '');
+ }
+
+ ## Area: future
+
+ if ($use_feature{future}{lfs}) {
+ my ($abi_bits, $abi_endian) = Dpkg::Arch::debarch_to_abiattrs($arch);
+ my $cpu_bits = Dpkg::Arch::debarch_to_cpubits($arch);
+
+ if ($abi_bits != 32 or $cpu_bits != 32) {
+ $use_feature{future}{lfs} = 0;
+ }
+ }
+
+ ## Area: reproducible
+
+ # Mask features that might have an unsafe usage.
+ if ($use_feature{reproducible}{fixfilepath} or
+ $use_feature{reproducible}{fixdebugpath}) {
+ require Cwd;
+
+ my $build_path =$ENV{DEB_BUILD_PATH} || Cwd::getcwd();
+
+ $flags->set_option_value('build-path', $build_path);
+
+ # If we have any unsafe character in the path, disable the flag,
+ # so that we do not need to worry about escaping the characters
+ # on output.
+ if ($build_path =~ m/[^-+:.0-9a-zA-Z~\/_]/) {
+ $use_feature{reproducible}{fixfilepath} = 0;
+ $use_feature{reproducible}{fixdebugpath} = 0;
+ }
+ }
+
+ ## Area: optimize
+
+ if ($opts_build->has('noopt')) {
+ $flags->set_option_value('optimize-level', 0);
+ } else {
+ $flags->set_option_value('optimize-level', 2);
+ }
+
+ ## Area: sanitize
+
+ # Handle logical feature interactions.
+ if ($use_feature{sanitize}{address} and $use_feature{sanitize}{thread}) {
+ # Disable the thread sanitizer when the address one is active, they
+ # are mutually incompatible.
+ $use_feature{sanitize}{thread} = 0;
+ }
+ if ($use_feature{sanitize}{address} or $use_feature{sanitize}{thread}) {
+ # Disable leak sanitizer, it is implied by the address or thread ones.
+ $use_feature{sanitize}{leak} = 0;
+ }
+
+ ## Area: hardening
+
+ # Mask builtin features that are not enabled by default in the compiler.
+ my %builtin_pie_arch = map { $_ => 1 } qw(
+ amd64
+ arm64
+ armel
+ armhf
+ hurd-i386
+ i386
+ kfreebsd-amd64
+ kfreebsd-i386
+ mips
+ mipsel
+ mips64el
+ powerpc
+ ppc64
+ ppc64el
+ riscv64
+ s390x
+ sparc
+ sparc64
+ );
+ if (not exists $builtin_pie_arch{$arch}) {
+ $builtin_feature{hardening}{pie} = 0;
+ }
+
+ # Mask features that are not available on certain architectures.
+ if ($os !~ /^(?:linux|kfreebsd|knetbsd|hurd)$/ or
+ $cpu =~ /^(?:hppa|avr32)$/) {
+ # Disabled on non-(linux/kfreebsd/knetbsd/hurd).
+ # Disabled on hppa, avr32
+ # (#574716).
+ $use_feature{hardening}{pie} = 0;
+ }
+ if ($cpu =~ /^(?:ia64|alpha|hppa|nios2)$/ or $arch eq 'arm') {
+ # Stack protector disabled on ia64, alpha, hppa, nios2.
+ # "warning: -fstack-protector not supported for this target"
+ # Stack protector disabled on arm (ok on armel).
+ # compiler supports it incorrectly (leads to SEGV)
+ $use_feature{hardening}{stackprotector} = 0;
+ }
+ if ($cpu =~ /^(?:ia64|hppa|avr32)$/) {
+ # relro not implemented on ia64, hppa, avr32.
+ $use_feature{hardening}{relro} = 0;
+ }
+
+ # Mask features that might be influenced by other flags.
+ if ($flags->get_option_value('optimize-level') == 0) {
+ # glibc 2.16 and later warn when using -O0 and _FORTIFY_SOURCE.
+ $use_feature{hardening}{fortify} = 0;
+ }
+
+ # Handle logical feature interactions.
+ if ($use_feature{hardening}{relro} == 0) {
+ # Disable bindnow if relro is not enabled, since it has no
+ # hardening ability without relro and may incur load penalties.
+ $use_feature{hardening}{bindnow} = 0;
+ }
+ if ($use_feature{hardening}{stackprotector} == 0) {
+ # Disable stackprotectorstrong if stackprotector is disabled.
+ $use_feature{hardening}{stackprotectorstrong} = 0;
+ }
+
+ ## Commit
+
+ # Set used features to their builtin setting if unset.
+ foreach my $area (sort keys %builtin_feature) {
+ while (my ($feature, $enabled) = each %{$builtin_feature{$area}}) {
+ $flags->set_builtin($area, $feature, $enabled);
+ }
+ }
+
+ # Store the feature usage.
+ foreach my $area (sort keys %use_feature) {
+ while (my ($feature, $enabled) = each %{$use_feature{$area}}) {
+ $flags->set_feature($area, $feature, $enabled);
+ }
+ }
+}
+
+sub _add_build_flags {
+ my ($self, $flags) = @_;
+
+ ## Global default flags
+
+ my @compile_flags = qw(
+ CFLAGS
+ CXXFLAGS
+ OBJCFLAGS
+ OBJCXXFLAGS
+ FFLAGS
+ FCFLAGS
+ GCJFLAGS
+ );
+
+ my $default_flags;
+ my $default_d_flags;
+
+ my $optimize_level = $flags->get_option_value('optimize-level');
+ $default_flags = "-g -O$optimize_level";
+ if ($optimize_level == 0) {
+ $default_d_flags = '-fdebug';
+ } else {
+ $default_d_flags = '-frelease';
+ }
+
+ $flags->append($_, $default_flags) foreach @compile_flags;
+ $flags->append('DFLAGS', $default_d_flags);
+
+ ## Area: future
+
+ if ($flags->use_feature('future', 'lfs')) {
+ $flags->append('CPPFLAGS',
+ '-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64');
+ }
+
+ ## Area: qa
+
+ # Warnings that detect actual bugs.
+ if ($flags->use_feature('qa', 'bug')) {
+ # C flags
+ my @cflags = qw(
+ implicit-function-declaration
+ );
+ foreach my $warnflag (@cflags) {
+ $flags->append('CFLAGS', "-Werror=$warnflag");
+ }
+
+ # C/C++ flags
+ my @cfamilyflags = qw(
+ array-bounds
+ clobbered
+ volatile-register-var
+ );
+ foreach my $warnflag (@cfamilyflags) {
+ $flags->append('CFLAGS', "-Werror=$warnflag");
+ $flags->append('CXXFLAGS', "-Werror=$warnflag");
+ }
+ }
+
+ # Inject dummy canary options to detect issues with build flag propagation.
+ if ($flags->use_feature('qa', 'canary')) {
+ require Digest::MD5;
+ my $id = Digest::MD5::md5_hex(int rand 4096);
+
+ foreach my $flag (qw(CPPFLAGS CFLAGS OBJCFLAGS CXXFLAGS OBJCXXFLAGS)) {
+ $flags->append($flag, "-D__DEB_CANARY_${flag}_${id}__");
+ }
+ $flags->append('LDFLAGS', "-Wl,-z,deb-canary-${id}");
+ }
+
+ ## Area: reproducible
+
+ # Warn when the __TIME__, __DATE__ and __TIMESTAMP__ macros are used.
+ if ($flags->use_feature('reproducible', 'timeless')) {
+ $flags->append('CPPFLAGS', '-Wdate-time');
+ }
+
+ # Avoid storing the build path in the binaries.
+ if ($flags->use_feature('reproducible', 'fixfilepath') or
+ $flags->use_feature('reproducible', 'fixdebugpath')) {
+ my $build_path = $flags->get_option_value('build-path');
+ my $map;
+
+ # -ffile-prefix-map is a superset of -fdebug-prefix-map, prefer it
+ # if both are set.
+ if ($flags->use_feature('reproducible', 'fixfilepath')) {
+ $map = '-ffile-prefix-map=' . $build_path . '=.';
+ } else {
+ $map = '-fdebug-prefix-map=' . $build_path . '=.';
+ }
+
+ $flags->append($_, $map) foreach @compile_flags;
+ }
+
+ ## Area: optimize
+
+ if ($flags->use_feature('optimize', 'lto')) {
+ my $flag = '-flto=auto -ffat-lto-objects';
+ $flags->append($_, $flag) foreach (@compile_flags, 'LDFLAGS');
+ }
+
+ ## Area: sanitize
+
+ if ($flags->use_feature('sanitize', 'address')) {
+ my $flag = '-fsanitize=address -fno-omit-frame-pointer';
+ $flags->append('CFLAGS', $flag);
+ $flags->append('CXXFLAGS', $flag);
+ $flags->append('LDFLAGS', '-fsanitize=address');
+ }
+
+ if ($flags->use_feature('sanitize', 'thread')) {
+ my $flag = '-fsanitize=thread';
+ $flags->append('CFLAGS', $flag);
+ $flags->append('CXXFLAGS', $flag);
+ $flags->append('LDFLAGS', $flag);
+ }
+
+ if ($flags->use_feature('sanitize', 'leak')) {
+ $flags->append('LDFLAGS', '-fsanitize=leak');
+ }
+
+ if ($flags->use_feature('sanitize', 'undefined')) {
+ my $flag = '-fsanitize=undefined';
+ $flags->append('CFLAGS', $flag);
+ $flags->append('CXXFLAGS', $flag);
+ $flags->append('LDFLAGS', $flag);
+ }
+
+ ## Area: hardening
+
+ # PIE
+ my $use_pie = $flags->get_feature('hardening', 'pie');
+ my %hardening_builtins = $flags->get_builtins('hardening');
+ if (defined $use_pie && $use_pie && ! $hardening_builtins{pie}) {
+ my $flag = "-specs=$Dpkg::DATADIR/pie-compile.specs";
+ $flags->append($_, $flag) foreach @compile_flags;
+ $flags->append('LDFLAGS', "-specs=$Dpkg::DATADIR/pie-link.specs");
+ } elsif (defined $use_pie && ! $use_pie && $hardening_builtins{pie}) {
+ my $flag = "-specs=$Dpkg::DATADIR/no-pie-compile.specs";
+ $flags->append($_, $flag) foreach @compile_flags;
+ $flags->append('LDFLAGS', "-specs=$Dpkg::DATADIR/no-pie-link.specs");
+ }
+
+ # Stack protector
+ if ($flags->use_feature('hardening', 'stackprotectorstrong')) {
+ my $flag = '-fstack-protector-strong';
+ $flags->append($_, $flag) foreach @compile_flags;
+ } elsif ($flags->use_feature('hardening', 'stackprotector')) {
+ my $flag = '-fstack-protector --param=ssp-buffer-size=4';
+ $flags->append($_, $flag) foreach @compile_flags;
+ }
+
+ # Fortify Source
+ if ($flags->use_feature('hardening', 'fortify')) {
+ $flags->append('CPPFLAGS', '-D_FORTIFY_SOURCE=2');
+ }
+
+ # Format Security
+ if ($flags->use_feature('hardening', 'format')) {
+ my $flag = '-Wformat -Werror=format-security';
+ $flags->append('CFLAGS', $flag);
+ $flags->append('CXXFLAGS', $flag);
+ $flags->append('OBJCFLAGS', $flag);
+ $flags->append('OBJCXXFLAGS', $flag);
+ }
+
+ # Read-only Relocations
+ if ($flags->use_feature('hardening', 'relro')) {
+ $flags->append('LDFLAGS', '-Wl,-z,relro');
+ }
+
+ # Bindnow
+ if ($flags->use_feature('hardening', 'bindnow')) {
+ $flags->append('LDFLAGS', '-Wl,-z,now');
+ }
+}
+
+sub _build_tainted_by {
+ my $self = shift;
+ my %tainted;
+
+ foreach my $pathname (qw(/bin /sbin /lib /lib32 /libo32 /libx32 /lib64)) {
+ next unless -l $pathname;
+
+ my $linkname = readlink $pathname;
+ if ($linkname eq "usr$pathname" or $linkname eq "/usr$pathname") {
+ $tainted{'merged-usr-via-aliased-dirs'} = 1;
+ last;
+ }
+ }
+
+ require File::Find;
+ my %usr_local_types = (
+ configs => [ qw(etc) ],
+ includes => [ qw(include) ],
+ programs => [ qw(bin sbin) ],
+ libraries => [ qw(lib) ],
+ );
+ foreach my $type (keys %usr_local_types) {
+ File::Find::find({
+ wanted => sub { $tainted{"usr-local-has-$type"} = 1 if -f },
+ no_chdir => 1,
+ }, grep { -d } map { "/usr/local/$_" } @{$usr_local_types{$type}});
+ }
+
+ my @tainted = sort keys %tainted;
+ return @tainted;
+}
+
+=head1 CHANGES
+
+=head2 Version 0.xx
+
+This is a private module.
+
+=cut
+
+1;
diff --git a/scripts/Dpkg/Vendor/Default.pm b/scripts/Dpkg/Vendor/Default.pm
new file mode 100644
index 0000000..8362b5b
--- /dev/null
+++ b/scripts/Dpkg/Vendor/Default.pm
@@ -0,0 +1,229 @@
+# Copyright © 2009 Raphaël Hertzog <hertzog@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::Vendor::Default;
+
+use strict;
+use warnings;
+
+our $VERSION = '0.01';
+
+# If you use this file as template to create a new vendor class, please
+# uncomment the following lines
+#use parent qw(Dpkg::Vendor::Default);
+
+=encoding utf8
+
+=head1 NAME
+
+Dpkg::Vendor::Default - default vendor class
+
+=head1 DESCRIPTION
+
+A vendor class is used to provide vendor specific behaviour
+in various places. This is the default class used in case
+there's none for the current vendor or in case the vendor could
+not be identified (see Dpkg::Vendor documentation).
+
+It provides some hooks that are called by various dpkg-* tools.
+If you need a new hook, please file a bug against dpkg-dev and explain
+your need. Note that the hook API has no guarantee to be stable over an
+extended period of time. If you run an important distribution that makes
+use of vendor hooks, you'd better submit them for integration so that
+we avoid breaking your code.
+
+=head1 METHODS
+
+=over 4
+
+=item $vendor_obj = Dpkg::Vendor::Default->new()
+
+Creates the default vendor object. Can be inherited by all vendor objects
+if they don't need any specific initialization at object creation time.
+
+=cut
+
+sub new {
+ my $this = shift;
+ my $class = ref($this) || $this;
+ my $self = {};
+ bless $self, $class;
+ return $self;
+}
+
+=item $vendor_obj->run_hook($id, @params)
+
+Run the corresponding hook. The parameters are hook-specific. The
+supported hooks are:
+
+=over 8
+
+=item before-source-build ($srcpkg)
+
+The first parameter is a Dpkg::Source::Package object. The hook is called
+just before the execution of $srcpkg->build().
+
+=item package-keyrings ()
+
+The hook is called when dpkg-source is checking a signature on a source
+package (since dpkg 1.18.11). It takes no parameters, but returns a
+(possibly empty) list of vendor-specific keyrings.
+
+=item archive-keyrings ()
+
+The hook is called when there is a need to check signatures on artifacts
+from repositories, for example by a download method (since dpkg 1.18.11).
+It takes no parameters, but returns a (possibly empty) list of
+vendor-specific keyrings.
+
+=item archive-keyrings-historic ()
+
+The hook is called when there is a need to check signatures on artifacts
+from historic repositories, for example by a download method
+(since dpkg 1.18.11). It takes no parameters, but returns a (possibly empty)
+list of vendor-specific keyrings.
+
+=item builtin-build-depends ()
+
+The hook is called when dpkg-checkbuilddeps is initializing the source
+package build dependencies (since dpkg 1.18.2). It takes no parameters,
+but returns a (possibly empty) list of vendor-specific B<Build-Depends>.
+
+=item builtin-build-conflicts ()
+
+The hook is called when dpkg-checkbuilddeps is initializing the source
+package build conflicts (since dpkg 1.18.2). It takes no parameters,
+but returns a (possibly empty) list of vendor-specific B<Build-Conflicts>.
+
+=item register-custom-fields ()
+
+The hook is called in Dpkg::Control::Fields to register custom fields.
+You should return a list of arrays. Each array is an operation to perform.
+The first item is the name of the operation and corresponds
+to a field_* function provided by Dpkg::Control::Fields. The remaining
+fields are the parameters that are passed unchanged to the corresponding
+function.
+
+Known operations are "register", "insert_after" and "insert_before".
+
+=item post-process-changelog-entry ($fields)
+
+The hook is called in Dpkg::Changelog to post-process a
+Dpkg::Changelog::Entry after it has been created and filled with the
+appropriate values.
+
+=item update-buildflags ($flags)
+
+The hook is called in Dpkg::BuildFlags to allow the vendor to override
+the default values set for the various build flags. $flags is a
+Dpkg::BuildFlags object.
+
+=item builtin-system-build-paths ()
+
+The hook is called by dpkg-genbuildinfo to determine if the current path
+should be recorded in the B<Build-Path> field (since dpkg 1.18.11). It takes
+no parameters, but returns a (possibly empty) list of root paths considered
+acceptable. As an example, if the list contains "/build/", a Build-Path
+field will be created if the current directory is "/build/dpkg-1.18.0". If
+the list contains "/", the path will always be recorded. If the list is
+empty, the current path will never be recorded.
+
+=item build-tainted-by ()
+
+The hook is called by dpkg-genbuildinfo to determine if the current system
+has been tainted in some way that could affect the resulting build, which
+will be recorded in the B<Build-Tainted-By> field (since dpkg 1.19.5). It
+takes no parameters, but returns a (possibly empty) list of tainted reason
+tags (formed by alphanumeric and dash characters).
+
+=item sanitize-environment ()
+
+The hook is called by dpkg-buildpackage to sanitize its build environment
+(since dpkg 1.20.0).
+
+=item backport-version-regex ()
+
+The hook is called by dpkg-genchanges and dpkg-mergechangelog to determine
+the backport version string that should be specially handled as not an earlier
+than version or remapped so that it does not get considered as a pre-release
+(since dpkg 1.21.3).
+The returned string is a regex with one capture group for the backport
+delimiter string, or undef if there is no regex.
+
+=back
+
+=cut
+
+sub run_hook {
+ my ($self, $hook, @params) = @_;
+
+ if ($hook eq 'before-source-build') {
+ my $srcpkg = shift @params;
+ } elsif ($hook eq 'package-keyrings') {
+ return ();
+ } elsif ($hook eq 'archive-keyrings') {
+ return ();
+ } elsif ($hook eq 'archive-keyrings-historic') {
+ return ();
+ } elsif ($hook eq 'register-custom-fields') {
+ return ();
+ } elsif ($hook eq 'builtin-build-depends') {
+ return ();
+ } elsif ($hook eq 'builtin-build-conflicts') {
+ return ();
+ } elsif ($hook eq 'post-process-changelog-entry') {
+ my $fields = shift @params;
+ } elsif ($hook eq 'extend-patch-header') {
+ my ($textref, $ch_info) = @params;
+ } elsif ($hook eq 'update-buildflags') {
+ my $flags = shift @params;
+ } elsif ($hook eq 'builtin-system-build-paths') {
+ return ();
+ } elsif ($hook eq 'build-tainted-by') {
+ return ();
+ } elsif ($hook eq 'sanitize-environment') {
+ return;
+ } elsif ($hook eq 'backport-version-regex') {
+ return;
+ }
+
+ # Default return value for unknown/unimplemented hooks
+ return;
+}
+
+=item $vendor->set_build_features($flags)
+
+Sets the vendor build features, which will then be used to initialize the
+build flags.
+
+=cut
+
+sub set_build_features {
+ my ($self, $flags) = @_;
+
+ return;
+}
+
+=back
+
+=head1 CHANGES
+
+=head2 Version 0.xx
+
+This is a private module.
+
+=cut
+
+1;
diff --git a/scripts/Dpkg/Vendor/Devuan.pm b/scripts/Dpkg/Vendor/Devuan.pm
new file mode 100644
index 0000000..661dc9e
--- /dev/null
+++ b/scripts/Dpkg/Vendor/Devuan.pm
@@ -0,0 +1,68 @@
+# Copyright © 2022 Guillem Jover <guillem@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::Vendor::Devuan;
+
+use strict;
+use warnings;
+
+our $VERSION = '0.01';
+
+use parent qw(Dpkg::Vendor::Debian);
+
+=encoding utf8
+
+=head1 NAME
+
+Dpkg::Vendor::Devuan - Devuan vendor class
+
+=head1 DESCRIPTION
+
+This vendor class customizes the behaviour of dpkg scripts for Devuan
+specific behavior and policies.
+
+=cut
+
+sub run_hook {
+ my ($self, $hook, @params) = @_;
+
+ if ($hook eq 'package-keyrings') {
+ return ('/usr/share/keyrings/devuan-keyring.gpg',
+ '/usr/share/keyrings/devuan-maintainers.gpg');
+ } elsif ($hook eq 'archive-keyrings') {
+ return ('/usr/share/keyrings/devuan-archive-keyring.gpg');
+ } elsif ($hook eq 'archive-keyrings-historic') {
+ return ('/usr/share/keyrings/devuan-archive-removed-keys.gpg');
+ } elsif ($hook eq 'extend-patch-header') {
+ my ($textref, $ch_info) = @params;
+ if ($ch_info->{'Closes'}) {
+ foreach my $bug (split(/\s+/, $ch_info->{'Closes'})) {
+ $$textref .= "Bug-Devuan: https://bugs.devuan.org/$bug\n";
+ }
+ }
+ } else {
+ return $self->SUPER::run_hook($hook, @params);
+ }
+}
+
+=head1 CHANGES
+
+=head2 Version 0.xx
+
+This is a private module.
+
+=cut
+
+1;
diff --git a/scripts/Dpkg/Vendor/Ubuntu.pm b/scripts/Dpkg/Vendor/Ubuntu.pm
new file mode 100644
index 0000000..9c77519
--- /dev/null
+++ b/scripts/Dpkg/Vendor/Ubuntu.pm
@@ -0,0 +1,174 @@
+# Copyright © 2008 Ian Jackson <ijackson@chiark.greenend.org.uk>
+# Copyright © 2008 Canonical, Ltd.
+# written by Colin Watson <cjwatson@ubuntu.com>
+# Copyright © 2008 James Westby <jw+debian@jameswestby.net>
+# Copyright © 2009 Raphaël Hertzog <hertzog@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::Vendor::Ubuntu;
+
+use strict;
+use warnings;
+
+our $VERSION = '0.01';
+
+use List::Util qw(any);
+
+use Dpkg::ErrorHandling;
+use Dpkg::Gettext;
+use Dpkg::Control::Types;
+
+use parent qw(Dpkg::Vendor::Debian);
+
+=encoding utf8
+
+=head1 NAME
+
+Dpkg::Vendor::Ubuntu - Ubuntu vendor class
+
+=head1 DESCRIPTION
+
+This vendor class customizes the behaviour of dpkg scripts for Ubuntu
+specific behavior and policies.
+
+=cut
+
+sub run_hook {
+ my ($self, $hook, @params) = @_;
+
+ if ($hook eq 'before-source-build') {
+ my $src = shift @params;
+ my $fields = $src->{fields};
+
+ # check that Maintainer/XSBC-Original-Maintainer comply to
+ # https://wiki.ubuntu.com/DebianMaintainerField
+ if (defined($fields->{'Version'}) and defined($fields->{'Maintainer'}) and
+ $fields->{'Version'} =~ /ubuntu/) {
+ if ($fields->{'Maintainer'} !~ /(?:ubuntu|canonical)/i) {
+ if (length $ENV{DEBEMAIL} and $ENV{DEBEMAIL} =~ /\@(?:ubuntu|canonical)\.com/) {
+ error(g_('Version number suggests Ubuntu changes, but Maintainer: does not have Ubuntu address'));
+ } else {
+ warning(g_('Version number suggests Ubuntu changes, but Maintainer: does not have Ubuntu address'));
+ }
+ }
+ unless ($fields->{'Original-Maintainer'}) {
+ warning(g_('Version number suggests Ubuntu changes, but there is no XSBC-Original-Maintainer field'));
+ }
+ }
+ } elsif ($hook eq 'package-keyrings') {
+ return ($self->SUPER::run_hook($hook),
+ '/usr/share/keyrings/ubuntu-archive-keyring.gpg');
+ } elsif ($hook eq 'archive-keyrings') {
+ return ($self->SUPER::run_hook($hook),
+ '/usr/share/keyrings/ubuntu-archive-keyring.gpg');
+ } elsif ($hook eq 'archive-keyrings-historic') {
+ return ($self->SUPER::run_hook($hook),
+ '/usr/share/keyrings/ubuntu-archive-removed-keys.gpg');
+ } elsif ($hook eq 'register-custom-fields') {
+ my @field_ops = $self->SUPER::run_hook($hook);
+ push @field_ops, [
+ 'register', 'Launchpad-Bugs-Fixed',
+ CTRL_FILE_CHANGES | CTRL_CHANGELOG,
+ ], [
+ 'insert_after', CTRL_FILE_CHANGES, 'Closes', 'Launchpad-Bugs-Fixed',
+ ], [
+ 'insert_after', CTRL_CHANGELOG, 'Closes', 'Launchpad-Bugs-Fixed',
+ ];
+ return @field_ops;
+ } elsif ($hook eq 'post-process-changelog-entry') {
+ my $fields = shift @params;
+
+ # Add Launchpad-Bugs-Fixed field
+ my $bugs = find_launchpad_closes($fields->{'Changes'} // '');
+ if (scalar(@$bugs)) {
+ $fields->{'Launchpad-Bugs-Fixed'} = join(' ', @$bugs);
+ }
+ } elsif ($hook eq 'update-buildflags') {
+ my $flags = shift @params;
+
+ # Run the Debian hook to add hardening flags
+ $self->SUPER::run_hook($hook, $flags);
+
+ # Per https://wiki.ubuntu.com/DistCompilerFlags
+ $flags->prepend('LDFLAGS', '-Wl,-Bsymbolic-functions');
+ } else {
+ return $self->SUPER::run_hook($hook, @params);
+ }
+}
+
+# Override Debian default features.
+sub init_build_features {
+ my ($self, $use_feature, $builtin_feature) = @_;
+
+ $self->SUPER::init_build_features($use_feature, $builtin_feature);
+
+ require Dpkg::Arch;
+ my $arch = Dpkg::Arch::get_host_arch();
+
+ if (any { $_ eq $arch } qw(amd64 arm64 ppc64el s390x)) {
+ $use_feature->{optimize}{lto} = 1;
+ }
+}
+
+sub set_build_features {
+ my ($self, $flags) = @_;
+
+ $self->SUPER::set_build_features($flags);
+
+ require Dpkg::Arch;
+ my $arch = Dpkg::Arch::get_host_arch();
+
+ if ($arch eq 'ppc64el' && $flags->get_option_value('optimize-level') != 0) {
+ $flags->set_option_value('optimize-level', 3);
+ }
+}
+
+=head1 PUBLIC FUNCTIONS
+
+=over
+
+=item $bugs = Dpkg::Vendor::Ubuntu::find_launchpad_closes($changes)
+
+Takes one string as argument and finds "LP: #123456, #654321" statements,
+which are references to bugs on Launchpad. Returns all closed bug
+numbers in an array reference.
+
+=cut
+
+sub find_launchpad_closes {
+ my $changes = shift;
+ my %closes;
+
+ while ($changes &&
+ ($changes =~ /lp:\s+\#\d+(?:,\s*\#\d+)*/pig)) {
+ $closes{$_} = 1 foreach (${^MATCH} =~ /\#?\s?(\d+)/g);
+ }
+
+ my @closes = sort { $a <=> $b } keys %closes;
+
+ return \@closes;
+}
+
+=back
+
+=head1 CHANGES
+
+=head2 Version 0.xx
+
+This is a semi-private module. Only documented functions are public.
+
+=cut
+
+1;
diff --git a/scripts/Dpkg/Version.pm b/scripts/Dpkg/Version.pm
new file mode 100644
index 0000000..51d46c5
--- /dev/null
+++ b/scripts/Dpkg/Version.pm
@@ -0,0 +1,491 @@
+# Copyright © Colin Watson <cjwatson@debian.org>
+# Copyright © Ian Jackson <ijackson@chiark.greenend.org.uk>
+# Copyright © 2007 Don Armstrong <don@donarmstrong.com>.
+# Copyright © 2009 Raphaël Hertzog <hertzog@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Dpkg::Version;
+
+use strict;
+use warnings;
+use warnings::register qw(semantic_change::overload::bool);
+
+our $VERSION = '1.03';
+our @EXPORT = qw(
+ version_compare
+ version_compare_relation
+ version_normalize_relation
+ version_compare_string
+ version_compare_part
+ version_split_digits
+ version_check
+ REL_LT
+ REL_LE
+ REL_EQ
+ REL_GE
+ REL_GT
+);
+
+use Exporter qw(import);
+use Carp;
+
+use Dpkg::Gettext;
+use Dpkg::ErrorHandling;
+
+use constant {
+ REL_LT => '<<',
+ REL_LE => '<=',
+ REL_EQ => '=',
+ REL_GE => '>=',
+ REL_GT => '>>',
+};
+
+use overload
+ '<=>' => \&_comparison,
+ 'cmp' => \&_comparison,
+ '""' => sub { return $_[0]->as_string(); },
+ 'bool' => sub { return $_[0]->is_valid(); },
+ 'fallback' => 1;
+
+=encoding utf8
+
+=head1 NAME
+
+Dpkg::Version - handling and comparing dpkg-style version numbers
+
+=head1 DESCRIPTION
+
+The Dpkg::Version module provides pure-Perl routines to compare
+dpkg-style version numbers (as used in Debian packages) and also
+an object oriented interface overriding perl operators
+to do the right thing when you compare Dpkg::Version object between
+them.
+
+=head1 METHODS
+
+=over 4
+
+=item $v = Dpkg::Version->new($version, %opts)
+
+Create a new Dpkg::Version object corresponding to the version indicated in
+the string (scalar) $version. By default it will accepts any string
+and consider it as a valid version. If you pass the option "check => 1",
+it will return undef if the version is invalid (see version_check for
+details).
+
+You can always call $v->is_valid() later on to verify that the version is
+valid.
+
+=cut
+
+sub new {
+ my ($this, $ver, %opts) = @_;
+ my $class = ref($this) || $this;
+ $ver = "$ver" if ref($ver); # Try to stringify objects
+
+ if ($opts{check}) {
+ return unless version_check($ver);
+ }
+
+ my $self = {};
+ if ($ver =~ /^([^:]*):(.+)$/) {
+ $self->{epoch} = $1;
+ $ver = $2;
+ } else {
+ $self->{epoch} = 0;
+ $self->{no_epoch} = 1;
+ }
+ if ($ver =~ /(.*)-(.*)$/) {
+ $self->{version} = $1;
+ $self->{revision} = $2;
+ } else {
+ $self->{version} = $ver;
+ $self->{revision} = 0;
+ $self->{no_revision} = 1;
+ }
+
+ return bless $self, $class;
+}
+
+=item boolean evaluation
+
+When the Dpkg::Version object is used in a boolean evaluation (for example
+in "if ($v)" or "$v ? \"$v\" : 'default'") it returns true if the version
+stored is valid ($v->is_valid()) and false otherwise.
+
+B<Notice>: Between dpkg 1.15.7.2 and 1.19.1 this overload used to return
+$v->as_string() if $v->is_valid(), a breaking change in behavior that caused
+"0" versions to be evaluated as false. To catch any possibly intended code
+that relied on those semantics, this overload will emit a warning with
+category "Dpkg::Version::semantic_change::overload::bool" until dpkg 1.20.x.
+Once fixed, or for already valid code the warning can be quiesced with
+
+ no if $Dpkg::Version::VERSION ge '1.02',
+ warnings => qw(Dpkg::Version::semantic_change::overload::bool);
+
+added after the C<use Dpkg::Version>.
+
+=item $v->is_valid()
+
+Returns true if the version is valid, false otherwise.
+
+=cut
+
+sub is_valid {
+ my $self = shift;
+ return scalar version_check($self);
+}
+
+=item $v->epoch(), $v->version(), $v->revision()
+
+Returns the corresponding part of the full version string.
+
+=cut
+
+sub epoch {
+ my $self = shift;
+ return $self->{epoch};
+}
+
+sub version {
+ my $self = shift;
+ return $self->{version};
+}
+
+sub revision {
+ my $self = shift;
+ return $self->{revision};
+}
+
+=item $v->is_native()
+
+Returns true if the version is native, false if it has a revision.
+
+=cut
+
+sub is_native {
+ my $self = shift;
+ return $self->{no_revision};
+}
+
+=item $v1 <=> $v2, $v1 < $v2, $v1 <= $v2, $v1 > $v2, $v1 >= $v2
+
+Numerical comparison of various versions numbers. One of the two operands
+needs to be a Dpkg::Version, the other one can be anything provided that
+its string representation is a version number.
+
+=cut
+
+sub _comparison {
+ my ($a, $b, $inverted) = @_;
+ if (not ref($b) or not $b->isa('Dpkg::Version')) {
+ $b = Dpkg::Version->new($b);
+ }
+ ($a, $b) = ($b, $a) if $inverted;
+ my $r = version_compare_part($a->epoch(), $b->epoch());
+ return $r if $r;
+ $r = version_compare_part($a->version(), $b->version());
+ return $r if $r;
+ return version_compare_part($a->revision(), $b->revision());
+}
+
+=item "$v", $v->as_string(), $v->as_string(%options)
+
+Accepts an optional option hash reference, affecting the string conversion.
+
+Options:
+
+=over 8
+
+=item omit_epoch (defaults to 0)
+
+Omit the epoch, if present, in the output string.
+
+=item omit_revision (defaults to 0)
+
+Omit the revision, if present, in the output string.
+
+=back
+
+Returns the string representation of the version number.
+
+=cut
+
+sub as_string {
+ my ($self, %opts) = @_;
+ my $no_epoch = $opts{omit_epoch} || $self->{no_epoch};
+ my $no_revision = $opts{omit_revision} || $self->{no_revision};
+
+ my $str = '';
+ $str .= $self->{epoch} . ':' unless $no_epoch;
+ $str .= $self->{version};
+ $str .= '-' . $self->{revision} unless $no_revision;
+ return $str;
+}
+
+=back
+
+=head1 FUNCTIONS
+
+All the functions are exported by default.
+
+=over 4
+
+=item version_compare($a, $b)
+
+Returns -1 if $a is earlier than $b, 0 if they are equal and 1 if $a
+is later than $b.
+
+If $a or $b are not valid version numbers, it dies with an error.
+
+=cut
+
+sub version_compare($$) {
+ my ($a, $b) = @_;
+ my $va = Dpkg::Version->new($a, check => 1);
+ defined($va) || error(g_('%s is not a valid version'), "$a");
+ my $vb = Dpkg::Version->new($b, check => 1);
+ defined($vb) || error(g_('%s is not a valid version'), "$b");
+ return $va <=> $vb;
+}
+
+=item version_compare_relation($a, $rel, $b)
+
+Returns the result (0 or 1) of the given comparison operation. This
+function is implemented on top of version_compare().
+
+Allowed values for $rel are the exported constants REL_GT, REL_GE,
+REL_EQ, REL_LE, REL_LT. Use version_normalize_relation() if you
+have an input string containing the operator.
+
+=cut
+
+sub version_compare_relation($$$) {
+ my ($a, $op, $b) = @_;
+ my $res = version_compare($a, $b);
+
+ if ($op eq REL_GT) {
+ return $res > 0;
+ } elsif ($op eq REL_GE) {
+ return $res >= 0;
+ } elsif ($op eq REL_EQ) {
+ return $res == 0;
+ } elsif ($op eq REL_LE) {
+ return $res <= 0;
+ } elsif ($op eq REL_LT) {
+ return $res < 0;
+ } else {
+ croak "unsupported relation for version_compare_relation(): '$op'";
+ }
+}
+
+=item $rel = version_normalize_relation($rel_string)
+
+Returns the normalized constant of the relation $rel (a value
+among REL_GT, REL_GE, REL_EQ, REL_LE and REL_LT). Supported
+relations names in input are: "gt", "ge", "eq", "le", "lt", ">>", ">=",
+"=", "<=", "<<". ">" and "<" are also supported but should not be used as
+they are obsolete aliases of ">=" and "<=".
+
+=cut
+
+sub version_normalize_relation($) {
+ my $op = shift;
+
+ warning('relation %s is deprecated: use %s or %s',
+ $op, "$op$op", "$op=") if ($op eq '>' or $op eq '<');
+
+ if ($op eq '>>' or $op eq 'gt') {
+ return REL_GT;
+ } elsif ($op eq '>=' or $op eq 'ge' or $op eq '>') {
+ return REL_GE;
+ } elsif ($op eq '=' or $op eq 'eq') {
+ return REL_EQ;
+ } elsif ($op eq '<=' or $op eq 'le' or $op eq '<') {
+ return REL_LE;
+ } elsif ($op eq '<<' or $op eq 'lt') {
+ return REL_LT;
+ } else {
+ croak "bad relation '$op'";
+ }
+}
+
+=item version_compare_string($a, $b)
+
+String comparison function used for comparing non-numerical parts of version
+numbers. Returns -1 if $a is earlier than $b, 0 if they are equal and 1 if $a
+is later than $b.
+
+The "~" character always sort lower than anything else. Digits sort lower
+than non-digits. Among remaining characters alphabetic characters (A-Z, a-z)
+sort lower than the other ones. Within each range, the ASCII decimal value
+of the character is used to sort between characters.
+
+=cut
+
+sub _version_order {
+ my $x = shift;
+
+ if ($x eq '~') {
+ return -1;
+ } elsif ($x =~ /^\d$/) {
+ return $x * 1 + 1;
+ } elsif ($x =~ /^[A-Za-z]$/) {
+ return ord($x);
+ } else {
+ return ord($x) + 256;
+ }
+}
+
+sub version_compare_string($$) {
+ my @a = map { _version_order($_) } split(//, shift);
+ my @b = map { _version_order($_) } split(//, shift);
+ while (1) {
+ my ($a, $b) = (shift @a, shift @b);
+ return 0 if not defined($a) and not defined($b);
+ $a ||= 0; # Default order for "no character"
+ $b ||= 0;
+ return 1 if $a > $b;
+ return -1 if $a < $b;
+ }
+}
+
+=item version_compare_part($a, $b)
+
+Compare two corresponding sub-parts of a version number (either upstream
+version or debian revision).
+
+Each parameter is split by version_split_digits() and resulting items
+are compared together. As soon as a difference happens, it returns -1 if
+$a is earlier than $b, 0 if they are equal and 1 if $a is later than $b.
+
+=cut
+
+sub version_compare_part($$) {
+ my @a = version_split_digits(shift);
+ my @b = version_split_digits(shift);
+ while (1) {
+ my ($a, $b) = (shift @a, shift @b);
+ return 0 if not defined($a) and not defined($b);
+ $a ||= 0; # Default value for lack of version
+ $b ||= 0;
+ if ($a =~ /^\d+$/ and $b =~ /^\d+$/) {
+ # Numerical comparison
+ my $cmp = $a <=> $b;
+ return $cmp if $cmp;
+ } else {
+ # String comparison
+ my $cmp = version_compare_string($a, $b);
+ return $cmp if $cmp;
+ }
+ }
+}
+
+=item @items = version_split_digits($version)
+
+Splits a string in items that are each entirely composed either
+of digits or of non-digits. For instance for "1.024~beta1+svn234" it would
+return ("1", ".", "024", "~beta", "1", "+svn", "234").
+
+=cut
+
+sub version_split_digits($) {
+ my $version = shift;
+
+ return split /(?<=\d)(?=\D)|(?<=\D)(?=\d)/, $version;
+}
+
+=item ($ok, $msg) = version_check($version)
+
+=item $ok = version_check($version)
+
+Checks the validity of $version as a version number. Returns 1 in $ok
+if the version is valid, 0 otherwise. In the latter case, $msg
+contains a description of the problem with the $version scalar.
+
+=cut
+
+sub version_check($) {
+ my $version = shift;
+ my $str;
+ if (defined $version) {
+ $str = "$version";
+ $version = Dpkg::Version->new($str) unless ref($version);
+ }
+ if (not defined($str) or not length($str)) {
+ my $msg = g_('version number cannot be empty');
+ return (0, $msg) if wantarray;
+ return 0;
+ }
+ if (not defined $version->epoch() or not length $version->epoch()) {
+ my $msg = sprintf(g_('epoch part of the version number cannot be empty'));
+ return (0, $msg) if wantarray;
+ return 0;
+ }
+ if (not defined $version->version() or not length $version->version()) {
+ my $msg = g_('upstream version cannot be empty');
+ return (0, $msg) if wantarray;
+ return 0;
+ }
+ if (not defined $version->revision() or not length $version->revision()) {
+ my $msg = sprintf(g_('revision cannot be empty'));
+ return (0, $msg) if wantarray;
+ return 0;
+ }
+ if ($version->version() =~ m/^[^\d]/) {
+ my $msg = g_('version number does not start with digit');
+ return (0, $msg) if wantarray;
+ return 0;
+ }
+ if ($str =~ m/([^-+:.0-9a-zA-Z~])/o) {
+ my $msg = sprintf g_("version number contains illegal character '%s'"), $1;
+ return (0, $msg) if wantarray;
+ return 0;
+ }
+ if ($version->epoch() !~ /^\d*$/) {
+ my $msg = sprintf(g_('epoch part of the version number ' .
+ "is not a number: '%s'"), $version->epoch());
+ return (0, $msg) if wantarray;
+ return 0;
+ }
+ return (1, '') if wantarray;
+ return 1;
+}
+
+=back
+
+=head1 CHANGES
+
+=head2 Version 1.03 (dpkg 1.20.0)
+
+Remove deprecation warning from semantic change in 1.02.
+
+=head2 Version 1.02 (dpkg 1.19.1)
+
+Semantic change: bool evaluation semantics restored to their original behavior.
+
+=head2 Version 1.01 (dpkg 1.17.0)
+
+New argument: Accept an options argument in $v->as_string().
+
+New method: $v->is_native().
+
+=head2 Version 1.00 (dpkg 1.15.6)
+
+Mark the module as public.
+
+=cut
+
+1;
diff --git a/scripts/Makefile.am b/scripts/Makefile.am
new file mode 100644
index 0000000..6766461
--- /dev/null
+++ b/scripts/Makefile.am
@@ -0,0 +1,452 @@
+## Process this file with automake to produce Makefile.in
+
+SUBDIRS = mk po
+
+sbin_SCRIPTS = \
+ dpkg-fsys-usrunmess \
+ # EOL
+
+bin_SCRIPTS = \
+ dpkg-architecture \
+ dpkg-buildflags \
+ dpkg-buildpackage \
+ dpkg-checkbuilddeps \
+ dpkg-distaddfile \
+ dpkg-genbuildinfo \
+ dpkg-genchanges \
+ dpkg-gencontrol \
+ dpkg-gensymbols \
+ dpkg-mergechangelogs \
+ dpkg-name \
+ dpkg-parsechangelog \
+ dpkg-scanpackages \
+ dpkg-scansources \
+ dpkg-shlibdeps \
+ dpkg-source \
+ dpkg-vendor \
+ # EOL
+
+EXTRA_DIST = \
+ dpkg-architecture.pl \
+ dpkg-buildflags.pl \
+ dpkg-buildpackage.pl \
+ dpkg-checkbuilddeps.pl \
+ dpkg-distaddfile.pl \
+ dpkg-fsys-usrunmess.pl \
+ dpkg-genbuildinfo.pl \
+ dpkg-genchanges.pl \
+ dpkg-gencontrol.pl \
+ dpkg-gensymbols.pl \
+ dpkg-mergechangelogs.pl \
+ dpkg-name.pl \
+ dpkg-parsechangelog.pl \
+ dpkg-scanpackages.pl \
+ dpkg-scansources.pl \
+ dpkg-shlibdeps.pl \
+ dpkg-source.pl \
+ dpkg-vendor.pl \
+ $(test_scripts) \
+ $(test_data) \
+ # EOL
+
+dist_zshcompletions_DATA = \
+ completion/zsh/_dpkg-parsechangelog \
+ # EOL
+
+CLEANFILES = \
+ $(test_data_objects) \
+ $(sbin_SCRIPTS) \
+ $(bin_SCRIPTS) \
+ # EOL
+
+perllibdir = $(PERL_LIBDIR)
+nobase_dist_perllib_DATA = \
+ Dpkg/Arch.pm \
+ Dpkg/BuildEnv.pm \
+ Dpkg/BuildFlags.pm \
+ Dpkg/BuildInfo.pm \
+ Dpkg/BuildOptions.pm \
+ Dpkg/BuildProfiles.pm \
+ Dpkg/BuildTypes.pm \
+ Dpkg/Build/Info.pm \
+ Dpkg/Changelog.pm \
+ Dpkg/Changelog/Debian.pm \
+ Dpkg/Changelog/Entry.pm \
+ Dpkg/Changelog/Entry/Debian.pm \
+ Dpkg/Changelog/Parse.pm \
+ Dpkg/Checksums.pm \
+ Dpkg/Compression.pm \
+ Dpkg/Compression/FileHandle.pm \
+ Dpkg/Compression/Process.pm \
+ Dpkg/Conf.pm \
+ Dpkg/Control.pm \
+ Dpkg/Control/Changelog.pm \
+ Dpkg/Control/FieldsCore.pm \
+ Dpkg/Control/Fields.pm \
+ Dpkg/Control/Info.pm \
+ Dpkg/Control/HashCore.pm \
+ Dpkg/Control/Hash.pm \
+ Dpkg/Control/Tests.pm \
+ Dpkg/Control/Tests/Entry.pm \
+ Dpkg/Control/Types.pm \
+ Dpkg/Deps.pm \
+ Dpkg/Deps/AND.pm \
+ Dpkg/Deps/KnownFacts.pm \
+ Dpkg/Deps/Multiple.pm \
+ Dpkg/Deps/OR.pm \
+ Dpkg/Deps/Simple.pm \
+ Dpkg/Deps/Union.pm \
+ Dpkg/Dist/Files.pm \
+ Dpkg/ErrorHandling.pm \
+ Dpkg/Exit.pm \
+ Dpkg/File.pm \
+ Dpkg/Getopt.pm \
+ Dpkg/Gettext.pm \
+ Dpkg/Index.pm \
+ Dpkg/Interface/Storable.pm \
+ Dpkg/IPC.pm \
+ Dpkg/Lock.pm \
+ Dpkg/OpenPGP.pm \
+ Dpkg/OpenPGP/Backend.pm \
+ Dpkg/OpenPGP/Backend/GnuPG.pm \
+ Dpkg/OpenPGP/Backend/SOP.pm \
+ Dpkg/OpenPGP/Backend/Sequoia.pm \
+ Dpkg/OpenPGP/ErrorCodes.pm \
+ Dpkg/OpenPGP/KeyHandle.pm \
+ Dpkg/Package.pm \
+ Dpkg/Path.pm \
+ Dpkg/Shlibs.pm \
+ Dpkg/Shlibs/Objdump.pm \
+ Dpkg/Shlibs/Symbol.pm \
+ Dpkg/Shlibs/SymbolFile.pm \
+ Dpkg/Shlibs/Cppfilt.pm \
+ Dpkg/Source/Archive.pm \
+ Dpkg/Source/BinaryFiles.pm \
+ Dpkg/Source/Format.pm \
+ Dpkg/Source/Functions.pm \
+ Dpkg/Source/Package.pm \
+ Dpkg/Source/Package/V1.pm \
+ Dpkg/Source/Package/V2.pm \
+ Dpkg/Source/Package/V3/Bzr.pm \
+ Dpkg/Source/Package/V3/Custom.pm \
+ Dpkg/Source/Package/V3/Native.pm \
+ Dpkg/Source/Package/V3/Git.pm \
+ Dpkg/Source/Package/V3/Quilt.pm \
+ Dpkg/Source/Patch.pm \
+ Dpkg/Source/Quilt.pm \
+ Dpkg/Substvars.pm \
+ Dpkg/Vars.pm \
+ Dpkg/Vendor.pm \
+ Dpkg/Vendor/Debian.pm \
+ Dpkg/Vendor/Default.pm \
+ Dpkg/Vendor/Devuan.pm \
+ Dpkg/Vendor/Ubuntu.pm \
+ Dpkg/Version.pm \
+ Dpkg.pm \
+ # EOL
+
+EXTRA_DIST += \
+ Test/Dpkg.pm \
+ # EOL
+
+# Keep it even if empty to have man3dir correctly set
+man3_MANS =
+
+man_perl_section = 3perl
+
+SUFFIXES =
+
+include $(top_srcdir)/build-aux/subst.am
+
+install-data-local:
+if BUILD_POD_DOC
+# Install manual pages for perl modules manually as make can't deal
+# properly with filenames containing colons
+# Remove empty manual pages (perl modules not documented)
+ $(MKDIR_P) $(DESTDIR)$(man3dir)
+ for module in $(nobase_dist_perllib_DATA); do \
+ name=`echo $$module | $(SED) -e 's|/|::|g' -e 's/\.pm$$//'`; \
+ $(POD2MAN) --utf8 --center=libdpkg-perl --release=$(VERSION) \
+ --name="$$name" --section=$(man_perl_section) $(srcdir)/$$module \
+ >$(DESTDIR)$(man3dir)/$$name.$(man_perl_section); \
+ test -s $(DESTDIR)$(man3dir)/$$name.$(man_perl_section) || \
+ rm -f $(DESTDIR)$(man3dir)/$$name.$(man_perl_section); \
+ done
+endif
+
+# Ideally we'd use '$(SED) -i', but unfortunately that's not portable.
+install-data-hook:
+ $(do_perl_subst) <$(DESTDIR)$(perllibdir)/Dpkg.pm \
+ >$(DESTDIR)$(perllibdir)/Dpkg.pm.new
+ mv $(DESTDIR)$(perllibdir)/Dpkg.pm.new \
+ $(DESTDIR)$(perllibdir)/Dpkg.pm
+
+uninstall-local:
+if BUILD_POD_DOC
+ for module in $(nobase_dist_perllib_DATA); do \
+ rm -f $(DESTDIR)$(man3dir)/`echo $$module | $(SED) -e 's|/|::|g' -e 's/\.pm$$/.$(man_perl_section)/'`; \
+ done
+endif
+
+coverage: check
+ $(PERL_COVER) -silent \
+ -ignore_re '^t/.*\.t' \
+ -outputdir $(top_builddir)/doc/coverage/scripts
+ : # Cleanup coverage report index
+ $(PERL) -i -p -e "s:$(abs_top_builddir)::" \
+ $(top_builddir)/doc/coverage/scripts/coverage.html
+
+coverage-clean:
+ rm -rf cover_db
+
+TEST_ENV_VARS = \
+ DPKG_PROGTAR=$(TAR) \
+ DPKG_PROGPATCH=$(PATCH) \
+ DPKG_PROGMAKE=$(MAKE) \
+ DPKG_DATADIR=$(top_srcdir)/data \
+ DPKG_ORIGINS_DIR=$(srcdir)/t/origins \
+ # EOL
+TEST_COVERAGE = $(PERL_COVERAGE)
+
+test_tmpdir = t.tmp
+
+test_scripts = \
+ t/Dpkg_Version.t \
+ t/Dpkg_Arch.t \
+ t/Dpkg_Package.t \
+ t/Dpkg_Shlibs_Cppfilt.t \
+ t/Dpkg_Shlibs.t \
+ t/Dpkg_BuildEnv.t \
+ t/Dpkg_BuildFlags.t \
+ t/Dpkg_BuildFlags_Ubuntu.t \
+ t/Dpkg_BuildInfo.t \
+ t/Dpkg_BuildOptions.t \
+ t/Dpkg_BuildProfiles.t \
+ t/Dpkg_BuildTypes.t \
+ t/Dpkg_Checksums.t \
+ t/Dpkg_ErrorHandling.t \
+ t/Dpkg_Exit.t \
+ t/Dpkg_File.t \
+ t/Dpkg_Lock.t \
+ t/Dpkg_Getopt.t \
+ t/Dpkg_Gettext.t \
+ t/Dpkg_Conf.t \
+ t/Dpkg_Deps.t \
+ t/Dpkg_Path.t \
+ t/Dpkg_Vars.t \
+ t/Dpkg_Interface_Storable.t \
+ t/Dpkg_OpenPGP_KeyHandle.t \
+ t/Dpkg_OpenPGP.t \
+ t/Dpkg_Vendor.t \
+ t/Dpkg_Changelog.t \
+ t/Dpkg_Changelog_Ubuntu.t \
+ t/Dpkg_Control_Fields.t \
+ t/Dpkg_Control.t \
+ t/Dpkg_Control_Tests.t \
+ t/Dpkg_Index.t \
+ t/Dpkg_Substvars.t \
+ t/Dpkg_IPC.t \
+ t/Dpkg_Compression.t \
+ t/Dpkg_Source_Functions.t \
+ t/Dpkg_Source_Patch.t \
+ t/Dpkg_Source_Quilt.t \
+ t/Dpkg_Source_Format.t \
+ t/Dpkg_Source_Archive.t \
+ t/Dpkg_Source_Package.t \
+ t/Dpkg_Dist_Files.t \
+ t/dpkg_source.t \
+ t/dpkg_buildpackage.t \
+ t/merge_changelogs.t \
+ t/mk.t \
+ # EOL
+
+test_data = \
+ t/Dpkg_Changelog/countme \
+ t/Dpkg_Changelog/date-format \
+ t/Dpkg_Changelog/fields \
+ t/Dpkg_Changelog/misplaced-tz \
+ t/Dpkg_Changelog/regressions \
+ t/Dpkg_Changelog/shadow \
+ t/Dpkg_Changelog/stop-modeline \
+ t/Dpkg_Changelog/unreleased \
+ t/Dpkg_Checksums/data-1 \
+ t/Dpkg_Checksums/data-2 \
+ t/Dpkg_Checksums/empty \
+ t/Dpkg_Conf/config-mixed \
+ t/Dpkg_Control/bogus-armor-double.dsc \
+ t/Dpkg_Control/bogus-armor-formfeed.dsc \
+ t/Dpkg_Control/bogus-armor-inline.dsc \
+ t/Dpkg_Control/bogus-armor-nested.dsc \
+ t/Dpkg_Control/bogus-armor-no-sig.dsc \
+ t/Dpkg_Control/bogus-armor-spaces.dsc \
+ t/Dpkg_Control/bogus-armor-trail.dsc \
+ t/Dpkg_Control/bogus-unsigned.dsc \
+ t/Dpkg_Control/control-1 \
+ t/Dpkg_Control_Tests/tests-missing-fields \
+ t/Dpkg_Control_Tests/tests-plain-text \
+ t/Dpkg_Control_Tests/tests-valid \
+ t/Dpkg_Dist_Files/files-byhand \
+ t/Dpkg_Dist_Files/files-fragment-a \
+ t/Dpkg_Dist_Files/files-fragment-b \
+ t/Dpkg_File/append-me \
+ t/Dpkg_File/dump-partial \
+ t/Dpkg_File/slurp-me \
+ t/Dpkg_OpenPGP/dpkg-test-pub.asc \
+ t/Dpkg_OpenPGP/dpkg-test-sec.asc \
+ t/Dpkg_OpenPGP/sign-file \
+ t/Dpkg_OpenPGP/sign-file-inline.asc \
+ t/Dpkg_OpenPGP/sign-file-inline.sig \
+ t/Dpkg_OpenPGP/sign-file.asc \
+ t/Dpkg_OpenPGP/sign-file.sig \
+ t/Dpkg_Shlibs/basictags.c \
+ t/Dpkg_Shlibs/basictags.symbols \
+ t/Dpkg_Shlibs/ld.so.conf \
+ t/Dpkg_Shlibs/ld.so.conf.d/inf_recurse.conf \
+ t/Dpkg_Shlibs/ld.so.conf.d/normal.conf \
+ t/Dpkg_Shlibs/ld.so.conf.d/recursive.conf \
+ t/Dpkg_Shlibs/ld.so.conf_2 \
+ t/Dpkg_Shlibs/objdump.basictags-amd64 \
+ t/Dpkg_Shlibs/objdump.basictags-i386 \
+ t/Dpkg_Shlibs/objdump.basictags-mips \
+ t/Dpkg_Shlibs/objdump.dbd-pg \
+ t/Dpkg_Shlibs/objdump.glib-ia64 \
+ t/Dpkg_Shlibs/objdump.internal \
+ t/Dpkg_Shlibs/objdump.libc6-2.3 \
+ t/Dpkg_Shlibs/objdump.libc6-2.6 \
+ t/Dpkg_Shlibs/objdump.ls \
+ t/Dpkg_Shlibs/objdump.patterns \
+ t/Dpkg_Shlibs/objdump.space \
+ t/Dpkg_Shlibs/objdump.spacesyms \
+ t/Dpkg_Shlibs/patterns.cpp \
+ t/Dpkg_Shlibs/patterns.map \
+ t/Dpkg_Shlibs/patterns.symbols \
+ t/Dpkg_Shlibs/spacesyms-c-gen.pl \
+ t/Dpkg_Shlibs/spacesyms-o-map.pl \
+ t/Dpkg_Shlibs/spacesyms.map \
+ t/Dpkg_Shlibs/symbols.fake-1 \
+ t/Dpkg_Shlibs/symbols.fake-2 \
+ t/Dpkg_Shlibs/symbols.fake-3 \
+ t/Dpkg_Shlibs/symbols.include-1 \
+ t/Dpkg_Shlibs/symbols.include-2 \
+ t/Dpkg_Shlibs/symbols.include-3 \
+ t/Dpkg_Shlibs/symbols.internal \
+ t/Dpkg_Shlibs/symbols.internal-allow \
+ t/Dpkg_Shlibs/symbols.internal-allow-groups \
+ t/Dpkg_Shlibs/symbols.internal-filter \
+ t/Dpkg_Source_Patch/c-style.patch \
+ t/Dpkg_Source_Patch/ghost-hunk.patch \
+ t/Dpkg_Source_Patch/indent-header.patch \
+ t/Dpkg_Source_Patch/index-+++.patch \
+ t/Dpkg_Source_Patch/index-alone.patch \
+ t/Dpkg_Source_Patch/index-inert.patch \
+ t/Dpkg_Source_Patch/partial.patch \
+ t/Dpkg_Source_Quilt/parse/debian/patches/series \
+ t/Dpkg_Source_Package/package_1.0.orig.tar \
+ t/Dpkg_Source_Package/package_1.0.orig.tar.asc \
+ t/Dpkg_Source_Package/package_1.0.orig.tar.sig \
+ t/Dpkg_Substvars/substvars1 \
+ t/Dpkg_Substvars/substvars2 \
+ t/dpkg_buildpackage/dpkgdb/status \
+ t/dpkg_buildpackage/test-source_0.dsc \
+ t/dpkg_buildpackage/test-source_0_all.changes \
+ t/dpkg_buildpackage/test-source_0_any.changes \
+ t/dpkg_buildpackage/test-source_0_binary.changes \
+ t/dpkg_buildpackage/test-source_0_full.changes \
+ t/dpkg_buildpackage/test-source_0_source.changes \
+ t/dpkg_source/testsuite_0.dsc \
+ t/dpkg_source/testsuite_1.dsc \
+ t/dpkg_source/testsuite_2.dsc \
+ t/dpkg_source/testsuite_3.dsc \
+ t/merge_changelogs/ch-a \
+ t/merge_changelogs/ch-b \
+ t/merge_changelogs/ch-badver-a \
+ t/merge_changelogs/ch-badver-b \
+ t/merge_changelogs/ch-badver-merged \
+ t/merge_changelogs/ch-badver-old \
+ t/merge_changelogs/ch-merged \
+ t/merge_changelogs/ch-merged-basic \
+ t/merge_changelogs/ch-merged-pr \
+ t/merge_changelogs/ch-merged-pr-basic \
+ t/merge_changelogs/ch-old \
+ t/merge_changelogs/ch-unreleased-a \
+ t/merge_changelogs/ch-unreleased-b \
+ t/merge_changelogs/ch-unreleased-merged \
+ t/merge_changelogs/ch-unreleased-merged-basic \
+ t/merge_changelogs/ch-unreleased-old \
+ t/mk/architecture.mk \
+ t/mk/buildflags.mk \
+ t/mk/buildopts.mk \
+ t/mk/buildtools.mk \
+ t/mk/debian/changelog \
+ t/mk/pkg-info.mk \
+ t/mk/vendor-v0.mk \
+ t/mk/vendor-v1.mk \
+ t/mk/vendor.mk \
+ t/mock-bin/dpkg \
+ t/mock-bin/gcc \
+ t/origins/debian \
+ t/origins/devuan \
+ t/origins/default \
+ t/origins/gnewsense \
+ t/origins/ubuntu \
+ # EOL
+
+test_data_objects = \
+ t/Dpkg_Shlibs/libobjdump.basictags-amd64.so \
+ t/Dpkg_Shlibs/libobjdump.basictags-i386.so \
+ t/Dpkg_Shlibs/libobjdump.basictags-mips.so \
+ t/Dpkg_Shlibs/libobjdump.patterns.so \
+ t/Dpkg_Shlibs/libobjdump.spacesyms.so \
+ # EOL
+
+$(srcdir)/t/Dpkg_Shlibs/libobjdump.basictags-amd64.so: $(srcdir)/t/Dpkg_Shlibs/basictags.c
+ $(CC) $(CFLAGS) -shared -fPIC -Wl,-soname -Wl,libbasictags.so.1 $< \
+ -DAMD64 -o $@
+
+$(srcdir)/t/Dpkg_Shlibs/libobjdump.basictags-mips.so: $(srcdir)/t/Dpkg_Shlibs/basictags.c
+ $(CC) $(CFLAGS) -shared -fPIC -Wl,-soname -Wl,libbasictags.so.1 $< \
+ -DMIPS -o $@
+
+$(srcdir)/t/Dpkg_Shlibs/libobjdump.basictags-i386.so: $(srcdir)/t/Dpkg_Shlibs/basictags.c
+ $(CC) $(CFLAGS) -shared -fPIC -Wl,-soname -Wl,libbasictags.so.1 $< \
+ -DI386 -o $@
+
+$(srcdir)/t/Dpkg_Shlibs/libobjdump.patterns.so: $(srcdir)/t/Dpkg_Shlibs/patterns.cpp $(srcdir)/t/Dpkg_Shlibs/patterns.map
+ $(CXX) $(CXXFLAGS) -shared -fPIC -Wl,-soname -Wl,libpatterns.so.1 \
+ -Wl,--version-script=$(srcdir)/t/Dpkg_Shlibs/patterns.map $< -o $@
+
+$(srcdir)/t/Dpkg_Shlibs/spacesyms.c: $(srcdir)/t/Dpkg_Shlibs/spacesyms-c-gen.pl
+ $(srcdir)/t/Dpkg_Shlibs/spacesyms-c-gen.pl > $@
+
+$(srcdir)/t/Dpkg_Shlibs/spacesyms.o: $(srcdir)/t/Dpkg_Shlibs/spacesyms.c $(srcdir)/t/Dpkg_Shlibs/spacesyms-o-map.pl
+ $(CC) $(CFLAGS) -c -fPIC -o $@.tmp $<
+ $(srcdir)/t/Dpkg_Shlibs/spacesyms-o-map.pl $@.tmp $@
+ rm -f $@.tmp
+
+$(srcdir)/t/Dpkg_Shlibs/libobjdump.spacesyms.so: $(srcdir)/t/Dpkg_Shlibs/spacesyms.o $(srcdir)/t/Dpkg_Shlibs/spacesyms.map
+ $(CC) -shared -Wl,-soname -Wl,libspacesyms.so.1 \
+ -Wl,--version-script=$(srcdir)/t/Dpkg_Shlibs/spacesyms.map $< -o $@
+
+.PHONY: refresh-test-data
+
+OBJDUMP = objdump -w -f -p -T -R
+
+refresh-test-data: $(test_data_objects)
+ $(OBJDUMP) $(srcdir)/t/Dpkg_Shlibs/libobjdump.basictags-amd64.so \
+ >$(srcdir)/t/Dpkg_Shlibs/objdump.basictags-amd64
+ $(OBJDUMP) $(srcdir)/t/Dpkg_Shlibs/libobjdump.basictags-i386.so \
+ >$(srcdir)/t/Dpkg_Shlibs/objdump.basictags-i386
+ $(OBJDUMP) $(srcdir)/t/Dpkg_Shlibs/libobjdump.basictags-mips.so \
+ >$(srcdir)/t/Dpkg_Shlibs/objdump.basictags-mips
+ $(OBJDUMP) $(srcdir)/t/Dpkg_Shlibs/libobjdump.patterns.so \
+ >$(srcdir)/t/Dpkg_Shlibs/objdump.patterns
+ $(OBJDUMP) $(srcdir)/t/Dpkg_Shlibs/libobjdump.spacesyms.so \
+ >$(srcdir)/t/Dpkg_Shlibs/objdump.spacesyms
+ $(OBJDUMP) `which ls` >$(srcdir)/t/Dpkg_Shlibs/objdump.ls
+
+include $(top_srcdir)/build-aux/tap.am
+
+check-local: tap-check
+
+clean-local: tap-clean coverage-clean
+ rm -fr man
diff --git a/scripts/Makefile.in b/scripts/Makefile.in
new file mode 100644
index 0000000..ac46071
--- /dev/null
+++ b/scripts/Makefile.in
@@ -0,0 +1,1417 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+#
+# Build time variable substitution for generated files.
+#
+
+# Shell support.
+
+# Variables to be defined:
+#
+# TEST_VERBOSE - set to 0 (default) or 1 to control test suite verbosity
+# TEST_PARALLEL - set to 1 (default) or N to control the parallel jobs
+# TEST_ENV_VARS - environment variables to be set for the test suite
+# TEST_COVERAGE - set to the perl module in charge of getting test coverage
+# test_tmpdir - test suite temporary directory
+# test_scripts - list of test case scripts
+# test_programs - list of test case programs
+# test_data - list of test data files
+
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = scripts
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/dpkg-arch.m4 \
+ $(top_srcdir)/m4/dpkg-build.m4 \
+ $(top_srcdir)/m4/dpkg-compiler.m4 \
+ $(top_srcdir)/m4/dpkg-coverage.m4 \
+ $(top_srcdir)/m4/dpkg-funcs.m4 $(top_srcdir)/m4/dpkg-libs.m4 \
+ $(top_srcdir)/m4/dpkg-linker.m4 $(top_srcdir)/m4/dpkg-progs.m4 \
+ $(top_srcdir)/m4/dpkg-types.m4 \
+ $(top_srcdir)/m4/dpkg-unicode.m4 $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(dist_zshcompletions_DATA) \
+ $(nobase_dist_perllib_DATA) $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES = Build.PL README.cpan
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sbindir)" \
+ "$(DESTDIR)$(man3dir)" "$(DESTDIR)$(zshcompletionsdir)" \
+ "$(DESTDIR)$(perllibdir)"
+SCRIPTS = $(bin_SCRIPTS) $(sbin_SCRIPTS)
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+ ctags-recursive dvi-recursive html-recursive info-recursive \
+ install-data-recursive install-dvi-recursive \
+ install-exec-recursive install-html-recursive \
+ install-info-recursive install-pdf-recursive \
+ install-ps-recursive install-recursive installcheck-recursive \
+ installdirs-recursive pdf-recursive ps-recursive \
+ tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+man3dir = $(mandir)/man3
+NROFF = nroff
+MANS = $(man3_MANS)
+DATA = $(dist_zshcompletions_DATA) $(nobase_dist_perllib_DATA)
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+ $(RECURSIVE_TARGETS) \
+ $(RECURSIVE_CLEAN_TARGETS) \
+ $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+ distdir distdir-am
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+DIST_SUBDIRS = $(SUBDIRS)
+am__DIST_COMMON = $(srcdir)/Build.PL.in $(srcdir)/Makefile.in \
+ $(srcdir)/README.cpan.in $(top_srcdir)/build-aux/subst.am \
+ $(top_srcdir)/build-aux/tap.am
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOM4TE = @AUTOM4TE@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_DEVEL_DOCS = @BUILD_DEVEL_DOCS@
+BZ2_LIBS = @BZ2_LIBS@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CURSES_LIBS = @CURSES_LIBS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOXYGEN = @DOXYGEN@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GCOV = @GCOV@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_DOT = @HAVE_DOT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+KVM_LIBS = @KVM_LIBS@
+LCOV = @LCOV@
+LCOV_GENHTML = @LCOV_GENHTML@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+LZMA_LIBS = @LZMA_LIBS@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MD_LIBS = @MD_LIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGMERGE = @MSGMERGE@
+MSGMERGE_FOR_MSGFMT_OPTION = @MSGMERGE_FOR_MSGFMT_OPTION@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = objdump -w -f -p -T -R
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_BUG_WEB = @PACKAGE_BUG_WEB@
+PACKAGE_COPYRIGHT_HOLDER = @PACKAGE_COPYRIGHT_HOLDER@
+PACKAGE_CPAN_NAME = @PACKAGE_CPAN_NAME@
+PACKAGE_DIST_IS_RELEASE = @PACKAGE_DIST_IS_RELEASE@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_RELEASE_DATE = @PACKAGE_RELEASE_DATE@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VCS_TYPE = @PACKAGE_VCS_TYPE@
+PACKAGE_VCS_URL = @PACKAGE_VCS_URL@
+PACKAGE_VCS_WEB = @PACKAGE_VCS_WEB@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATCH = @PATCH@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+PERL_COVER = @PERL_COVER@
+PERL_COVERAGE = @PERL_COVERAGE@
+PERL_LIBDIR = @PERL_LIBDIR@
+PERL_MIN_VERSION = @PERL_MIN_VERSION@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+PO4A = @PO4A@
+POD2MAN = @POD2MAN@
+POSUB = @POSUB@
+PS_LIBS = @PS_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SOCKET_LIBS = @SOCKET_LIBS@
+STRIP = @STRIP@
+TAR = @TAR@
+USE_NLS = @USE_NLS@
+USE_PO4A = @USE_PO4A@
+USE_UNICODE = @USE_UNICODE@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+ZSTD_LIBS = @ZSTD_LIBS@
+Z_LIBS = @Z_LIBS@
+Z_NG_LIBS = @Z_NG_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+admindir = @admindir@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+backupsdir = @backupsdir@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+devlibdir = @devlibdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+logdir = @logdir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgconfdir = @pkgconfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+zshcompletionsdir = @zshcompletionsdir@
+SUBDIRS = mk po
+sbin_SCRIPTS = \
+ dpkg-fsys-usrunmess \
+ # EOL
+
+bin_SCRIPTS = \
+ dpkg-architecture \
+ dpkg-buildflags \
+ dpkg-buildpackage \
+ dpkg-checkbuilddeps \
+ dpkg-distaddfile \
+ dpkg-genbuildinfo \
+ dpkg-genchanges \
+ dpkg-gencontrol \
+ dpkg-gensymbols \
+ dpkg-mergechangelogs \
+ dpkg-name \
+ dpkg-parsechangelog \
+ dpkg-scanpackages \
+ dpkg-scansources \
+ dpkg-shlibdeps \
+ dpkg-source \
+ dpkg-vendor \
+ # EOL
+
+EXTRA_DIST = dpkg-architecture.pl dpkg-buildflags.pl \
+ dpkg-buildpackage.pl dpkg-checkbuilddeps.pl \
+ dpkg-distaddfile.pl dpkg-fsys-usrunmess.pl \
+ dpkg-genbuildinfo.pl dpkg-genchanges.pl dpkg-gencontrol.pl \
+ dpkg-gensymbols.pl dpkg-mergechangelogs.pl dpkg-name.pl \
+ dpkg-parsechangelog.pl dpkg-scanpackages.pl \
+ dpkg-scansources.pl dpkg-shlibdeps.pl dpkg-source.pl \
+ dpkg-vendor.pl $(test_scripts) $(test_data) Test/Dpkg.pm # EOL
+dist_zshcompletions_DATA = \
+ completion/zsh/_dpkg-parsechangelog \
+ # EOL
+
+CLEANFILES = \
+ $(test_data_objects) \
+ $(sbin_SCRIPTS) \
+ $(bin_SCRIPTS) \
+ # EOL
+
+perllibdir = $(PERL_LIBDIR)
+nobase_dist_perllib_DATA = \
+ Dpkg/Arch.pm \
+ Dpkg/BuildEnv.pm \
+ Dpkg/BuildFlags.pm \
+ Dpkg/BuildInfo.pm \
+ Dpkg/BuildOptions.pm \
+ Dpkg/BuildProfiles.pm \
+ Dpkg/BuildTypes.pm \
+ Dpkg/Build/Info.pm \
+ Dpkg/Changelog.pm \
+ Dpkg/Changelog/Debian.pm \
+ Dpkg/Changelog/Entry.pm \
+ Dpkg/Changelog/Entry/Debian.pm \
+ Dpkg/Changelog/Parse.pm \
+ Dpkg/Checksums.pm \
+ Dpkg/Compression.pm \
+ Dpkg/Compression/FileHandle.pm \
+ Dpkg/Compression/Process.pm \
+ Dpkg/Conf.pm \
+ Dpkg/Control.pm \
+ Dpkg/Control/Changelog.pm \
+ Dpkg/Control/FieldsCore.pm \
+ Dpkg/Control/Fields.pm \
+ Dpkg/Control/Info.pm \
+ Dpkg/Control/HashCore.pm \
+ Dpkg/Control/Hash.pm \
+ Dpkg/Control/Tests.pm \
+ Dpkg/Control/Tests/Entry.pm \
+ Dpkg/Control/Types.pm \
+ Dpkg/Deps.pm \
+ Dpkg/Deps/AND.pm \
+ Dpkg/Deps/KnownFacts.pm \
+ Dpkg/Deps/Multiple.pm \
+ Dpkg/Deps/OR.pm \
+ Dpkg/Deps/Simple.pm \
+ Dpkg/Deps/Union.pm \
+ Dpkg/Dist/Files.pm \
+ Dpkg/ErrorHandling.pm \
+ Dpkg/Exit.pm \
+ Dpkg/File.pm \
+ Dpkg/Getopt.pm \
+ Dpkg/Gettext.pm \
+ Dpkg/Index.pm \
+ Dpkg/Interface/Storable.pm \
+ Dpkg/IPC.pm \
+ Dpkg/Lock.pm \
+ Dpkg/OpenPGP.pm \
+ Dpkg/OpenPGP/Backend.pm \
+ Dpkg/OpenPGP/Backend/GnuPG.pm \
+ Dpkg/OpenPGP/Backend/SOP.pm \
+ Dpkg/OpenPGP/Backend/Sequoia.pm \
+ Dpkg/OpenPGP/ErrorCodes.pm \
+ Dpkg/OpenPGP/KeyHandle.pm \
+ Dpkg/Package.pm \
+ Dpkg/Path.pm \
+ Dpkg/Shlibs.pm \
+ Dpkg/Shlibs/Objdump.pm \
+ Dpkg/Shlibs/Symbol.pm \
+ Dpkg/Shlibs/SymbolFile.pm \
+ Dpkg/Shlibs/Cppfilt.pm \
+ Dpkg/Source/Archive.pm \
+ Dpkg/Source/BinaryFiles.pm \
+ Dpkg/Source/Format.pm \
+ Dpkg/Source/Functions.pm \
+ Dpkg/Source/Package.pm \
+ Dpkg/Source/Package/V1.pm \
+ Dpkg/Source/Package/V2.pm \
+ Dpkg/Source/Package/V3/Bzr.pm \
+ Dpkg/Source/Package/V3/Custom.pm \
+ Dpkg/Source/Package/V3/Native.pm \
+ Dpkg/Source/Package/V3/Git.pm \
+ Dpkg/Source/Package/V3/Quilt.pm \
+ Dpkg/Source/Patch.pm \
+ Dpkg/Source/Quilt.pm \
+ Dpkg/Substvars.pm \
+ Dpkg/Vars.pm \
+ Dpkg/Vendor.pm \
+ Dpkg/Vendor/Debian.pm \
+ Dpkg/Vendor/Default.pm \
+ Dpkg/Vendor/Devuan.pm \
+ Dpkg/Vendor/Ubuntu.pm \
+ Dpkg/Version.pm \
+ Dpkg.pm \
+ # EOL
+
+
+# Keep it even if empty to have man3dir correctly set
+man3_MANS =
+man_perl_section = 3perl
+SUFFIXES = .sh .pl
+do_shell_subst = $(AM_V_GEN) $(SED) \
+ -e "s:^ADMINDIR=.*$$:ADMINDIR='$(admindir)':" \
+ -e "s:^BACKUPSDIR=.*$$:BACKUPSDIR='$(backupsdir)':" \
+ -e "s:^PKGDATADIR_DEFAULT=.*$$:PKGDATADIR_DEFAULT='$(pkgdatadir)':" \
+ -e "s:^version=['\"][^'\"]*[\"']:version=\"$(PACKAGE_VERSION)\":" \
+ # EOL
+
+
+# Perl support.
+do_perl_subst = $(AM_V_GEN) $(SED) \
+ -e "s:^\#![[:space:]]*/usr/bin/perl:\#!$(PERL):" \
+ -e "s:our \$$CONFDIR = .*;:our \$$CONFDIR = '$(pkgconfdir)';:" \
+ -e "s:our \$$ADMINDIR = .*;:our \$$ADMINDIR = '$(admindir)';:" \
+ -e "s:our \$$LIBDIR = .*;:our \$$LIBDIR = '$(pkglibexecdir)';:" \
+ -e "s:our \$$DATADIR = .*;:our \$$DATADIR = '$(pkgdatadir)';:" \
+ -e "s:our \$$PROGMAKE = .*;:our \$$PROGMAKE = '$(MAKE)';:" \
+ -e "s:our \$$PROGTAR = .*;:our \$$PROGTAR = '$(TAR)';:" \
+ -e "s:our \$$PROGPATCH = .*;:our \$$PROGPATCH = '$(PATCH)';:" \
+ -e "s:our \$$PROGVERSION = .*;:our \$$PROGVERSION = '$(PACKAGE_VERSION)';:" \
+ # EOL
+
+
+# Makefile support.
+do_make_subst = $(AM_V_GEN) $(SED) \
+ -e "s:dpkg_datadir[[:space:]]*=[[:space:]]*[^[:space:]]*:dpkg_datadir = $(pkgdatadir):" \
+ # EOL
+
+TEST_ENV_VARS = \
+ DPKG_PROGTAR=$(TAR) \
+ DPKG_PROGPATCH=$(PATCH) \
+ DPKG_PROGMAKE=$(MAKE) \
+ DPKG_DATADIR=$(top_srcdir)/data \
+ DPKG_ORIGINS_DIR=$(srcdir)/t/origins \
+ # EOL
+
+TEST_COVERAGE = $(PERL_COVERAGE)
+test_tmpdir = t.tmp
+test_scripts = \
+ t/Dpkg_Version.t \
+ t/Dpkg_Arch.t \
+ t/Dpkg_Package.t \
+ t/Dpkg_Shlibs_Cppfilt.t \
+ t/Dpkg_Shlibs.t \
+ t/Dpkg_BuildEnv.t \
+ t/Dpkg_BuildFlags.t \
+ t/Dpkg_BuildFlags_Ubuntu.t \
+ t/Dpkg_BuildInfo.t \
+ t/Dpkg_BuildOptions.t \
+ t/Dpkg_BuildProfiles.t \
+ t/Dpkg_BuildTypes.t \
+ t/Dpkg_Checksums.t \
+ t/Dpkg_ErrorHandling.t \
+ t/Dpkg_Exit.t \
+ t/Dpkg_File.t \
+ t/Dpkg_Lock.t \
+ t/Dpkg_Getopt.t \
+ t/Dpkg_Gettext.t \
+ t/Dpkg_Conf.t \
+ t/Dpkg_Deps.t \
+ t/Dpkg_Path.t \
+ t/Dpkg_Vars.t \
+ t/Dpkg_Interface_Storable.t \
+ t/Dpkg_OpenPGP_KeyHandle.t \
+ t/Dpkg_OpenPGP.t \
+ t/Dpkg_Vendor.t \
+ t/Dpkg_Changelog.t \
+ t/Dpkg_Changelog_Ubuntu.t \
+ t/Dpkg_Control_Fields.t \
+ t/Dpkg_Control.t \
+ t/Dpkg_Control_Tests.t \
+ t/Dpkg_Index.t \
+ t/Dpkg_Substvars.t \
+ t/Dpkg_IPC.t \
+ t/Dpkg_Compression.t \
+ t/Dpkg_Source_Functions.t \
+ t/Dpkg_Source_Patch.t \
+ t/Dpkg_Source_Quilt.t \
+ t/Dpkg_Source_Format.t \
+ t/Dpkg_Source_Archive.t \
+ t/Dpkg_Source_Package.t \
+ t/Dpkg_Dist_Files.t \
+ t/dpkg_source.t \
+ t/dpkg_buildpackage.t \
+ t/merge_changelogs.t \
+ t/mk.t \
+ # EOL
+
+test_data = \
+ t/Dpkg_Changelog/countme \
+ t/Dpkg_Changelog/date-format \
+ t/Dpkg_Changelog/fields \
+ t/Dpkg_Changelog/misplaced-tz \
+ t/Dpkg_Changelog/regressions \
+ t/Dpkg_Changelog/shadow \
+ t/Dpkg_Changelog/stop-modeline \
+ t/Dpkg_Changelog/unreleased \
+ t/Dpkg_Checksums/data-1 \
+ t/Dpkg_Checksums/data-2 \
+ t/Dpkg_Checksums/empty \
+ t/Dpkg_Conf/config-mixed \
+ t/Dpkg_Control/bogus-armor-double.dsc \
+ t/Dpkg_Control/bogus-armor-formfeed.dsc \
+ t/Dpkg_Control/bogus-armor-inline.dsc \
+ t/Dpkg_Control/bogus-armor-nested.dsc \
+ t/Dpkg_Control/bogus-armor-no-sig.dsc \
+ t/Dpkg_Control/bogus-armor-spaces.dsc \
+ t/Dpkg_Control/bogus-armor-trail.dsc \
+ t/Dpkg_Control/bogus-unsigned.dsc \
+ t/Dpkg_Control/control-1 \
+ t/Dpkg_Control_Tests/tests-missing-fields \
+ t/Dpkg_Control_Tests/tests-plain-text \
+ t/Dpkg_Control_Tests/tests-valid \
+ t/Dpkg_Dist_Files/files-byhand \
+ t/Dpkg_Dist_Files/files-fragment-a \
+ t/Dpkg_Dist_Files/files-fragment-b \
+ t/Dpkg_File/append-me \
+ t/Dpkg_File/dump-partial \
+ t/Dpkg_File/slurp-me \
+ t/Dpkg_OpenPGP/dpkg-test-pub.asc \
+ t/Dpkg_OpenPGP/dpkg-test-sec.asc \
+ t/Dpkg_OpenPGP/sign-file \
+ t/Dpkg_OpenPGP/sign-file-inline.asc \
+ t/Dpkg_OpenPGP/sign-file-inline.sig \
+ t/Dpkg_OpenPGP/sign-file.asc \
+ t/Dpkg_OpenPGP/sign-file.sig \
+ t/Dpkg_Shlibs/basictags.c \
+ t/Dpkg_Shlibs/basictags.symbols \
+ t/Dpkg_Shlibs/ld.so.conf \
+ t/Dpkg_Shlibs/ld.so.conf.d/inf_recurse.conf \
+ t/Dpkg_Shlibs/ld.so.conf.d/normal.conf \
+ t/Dpkg_Shlibs/ld.so.conf.d/recursive.conf \
+ t/Dpkg_Shlibs/ld.so.conf_2 \
+ t/Dpkg_Shlibs/objdump.basictags-amd64 \
+ t/Dpkg_Shlibs/objdump.basictags-i386 \
+ t/Dpkg_Shlibs/objdump.basictags-mips \
+ t/Dpkg_Shlibs/objdump.dbd-pg \
+ t/Dpkg_Shlibs/objdump.glib-ia64 \
+ t/Dpkg_Shlibs/objdump.internal \
+ t/Dpkg_Shlibs/objdump.libc6-2.3 \
+ t/Dpkg_Shlibs/objdump.libc6-2.6 \
+ t/Dpkg_Shlibs/objdump.ls \
+ t/Dpkg_Shlibs/objdump.patterns \
+ t/Dpkg_Shlibs/objdump.space \
+ t/Dpkg_Shlibs/objdump.spacesyms \
+ t/Dpkg_Shlibs/patterns.cpp \
+ t/Dpkg_Shlibs/patterns.map \
+ t/Dpkg_Shlibs/patterns.symbols \
+ t/Dpkg_Shlibs/spacesyms-c-gen.pl \
+ t/Dpkg_Shlibs/spacesyms-o-map.pl \
+ t/Dpkg_Shlibs/spacesyms.map \
+ t/Dpkg_Shlibs/symbols.fake-1 \
+ t/Dpkg_Shlibs/symbols.fake-2 \
+ t/Dpkg_Shlibs/symbols.fake-3 \
+ t/Dpkg_Shlibs/symbols.include-1 \
+ t/Dpkg_Shlibs/symbols.include-2 \
+ t/Dpkg_Shlibs/symbols.include-3 \
+ t/Dpkg_Shlibs/symbols.internal \
+ t/Dpkg_Shlibs/symbols.internal-allow \
+ t/Dpkg_Shlibs/symbols.internal-allow-groups \
+ t/Dpkg_Shlibs/symbols.internal-filter \
+ t/Dpkg_Source_Patch/c-style.patch \
+ t/Dpkg_Source_Patch/ghost-hunk.patch \
+ t/Dpkg_Source_Patch/indent-header.patch \
+ t/Dpkg_Source_Patch/index-+++.patch \
+ t/Dpkg_Source_Patch/index-alone.patch \
+ t/Dpkg_Source_Patch/index-inert.patch \
+ t/Dpkg_Source_Patch/partial.patch \
+ t/Dpkg_Source_Quilt/parse/debian/patches/series \
+ t/Dpkg_Source_Package/package_1.0.orig.tar \
+ t/Dpkg_Source_Package/package_1.0.orig.tar.asc \
+ t/Dpkg_Source_Package/package_1.0.orig.tar.sig \
+ t/Dpkg_Substvars/substvars1 \
+ t/Dpkg_Substvars/substvars2 \
+ t/dpkg_buildpackage/dpkgdb/status \
+ t/dpkg_buildpackage/test-source_0.dsc \
+ t/dpkg_buildpackage/test-source_0_all.changes \
+ t/dpkg_buildpackage/test-source_0_any.changes \
+ t/dpkg_buildpackage/test-source_0_binary.changes \
+ t/dpkg_buildpackage/test-source_0_full.changes \
+ t/dpkg_buildpackage/test-source_0_source.changes \
+ t/dpkg_source/testsuite_0.dsc \
+ t/dpkg_source/testsuite_1.dsc \
+ t/dpkg_source/testsuite_2.dsc \
+ t/dpkg_source/testsuite_3.dsc \
+ t/merge_changelogs/ch-a \
+ t/merge_changelogs/ch-b \
+ t/merge_changelogs/ch-badver-a \
+ t/merge_changelogs/ch-badver-b \
+ t/merge_changelogs/ch-badver-merged \
+ t/merge_changelogs/ch-badver-old \
+ t/merge_changelogs/ch-merged \
+ t/merge_changelogs/ch-merged-basic \
+ t/merge_changelogs/ch-merged-pr \
+ t/merge_changelogs/ch-merged-pr-basic \
+ t/merge_changelogs/ch-old \
+ t/merge_changelogs/ch-unreleased-a \
+ t/merge_changelogs/ch-unreleased-b \
+ t/merge_changelogs/ch-unreleased-merged \
+ t/merge_changelogs/ch-unreleased-merged-basic \
+ t/merge_changelogs/ch-unreleased-old \
+ t/mk/architecture.mk \
+ t/mk/buildflags.mk \
+ t/mk/buildopts.mk \
+ t/mk/buildtools.mk \
+ t/mk/debian/changelog \
+ t/mk/pkg-info.mk \
+ t/mk/vendor-v0.mk \
+ t/mk/vendor-v1.mk \
+ t/mk/vendor.mk \
+ t/mock-bin/dpkg \
+ t/mock-bin/gcc \
+ t/origins/debian \
+ t/origins/devuan \
+ t/origins/default \
+ t/origins/gnewsense \
+ t/origins/ubuntu \
+ # EOL
+
+test_data_objects = \
+ t/Dpkg_Shlibs/libobjdump.basictags-amd64.so \
+ t/Dpkg_Shlibs/libobjdump.basictags-i386.so \
+ t/Dpkg_Shlibs/libobjdump.basictags-mips.so \
+ t/Dpkg_Shlibs/libobjdump.patterns.so \
+ t/Dpkg_Shlibs/libobjdump.spacesyms.so \
+ # EOL
+
+all: all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .sh .pl
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/build-aux/subst.am $(top_srcdir)/build-aux/tap.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign scripts/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign scripts/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+$(top_srcdir)/build-aux/subst.am $(top_srcdir)/build-aux/tap.am $(am__empty):
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+Build.PL: $(top_builddir)/config.status $(srcdir)/Build.PL.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+README.cpan: $(top_builddir)/config.status $(srcdir)/README.cpan.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+install-binSCRIPTS: $(bin_SCRIPTS)
+ @$(NORMAL_INSTALL)
+ @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n' \
+ -e 'h;s|.*|.|' \
+ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+ if (++n[d] == $(am__install_max)) { \
+ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+ else { print "f", d "/" $$4, $$1 } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-binSCRIPTS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 's,.*/,,;$(transform)'`; \
+ dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir)
+install-sbinSCRIPTS: $(sbin_SCRIPTS)
+ @$(NORMAL_INSTALL)
+ @list='$(sbin_SCRIPTS)'; test -n "$(sbindir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(sbindir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(sbindir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n' \
+ -e 'h;s|.*|.|' \
+ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+ if (++n[d] == $(am__install_max)) { \
+ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+ else { print "f", d "/" $$4, $$1 } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(sbindir)$$dir'"; \
+ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(sbindir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-sbinSCRIPTS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(sbin_SCRIPTS)'; test -n "$(sbindir)" || exit 0; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 's,.*/,,;$(transform)'`; \
+ dir='$(DESTDIR)$(sbindir)'; $(am__uninstall_files_from_dir)
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-man3: $(man3_MANS)
+ @$(NORMAL_INSTALL)
+ @list1='$(man3_MANS)'; \
+ list2=''; \
+ test -n "$(man3dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man3dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man3dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.3[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^3][0-9a-z]*$$,3,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man3dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man3dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man3dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man3dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man3:
+ @$(NORMAL_UNINSTALL)
+ @list='$(man3_MANS)'; test -n "$(man3dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^3][0-9a-z]*$$,3,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man3dir)'; $(am__uninstall_files_from_dir)
+install-dist_zshcompletionsDATA: $(dist_zshcompletions_DATA)
+ @$(NORMAL_INSTALL)
+ @list='$(dist_zshcompletions_DATA)'; test -n "$(zshcompletionsdir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(zshcompletionsdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(zshcompletionsdir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(zshcompletionsdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(zshcompletionsdir)" || exit $$?; \
+ done
+
+uninstall-dist_zshcompletionsDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(dist_zshcompletions_DATA)'; test -n "$(zshcompletionsdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ dir='$(DESTDIR)$(zshcompletionsdir)'; $(am__uninstall_files_from_dir)
+install-nobase_dist_perllibDATA: $(nobase_dist_perllib_DATA)
+ @$(NORMAL_INSTALL)
+ @list='$(nobase_dist_perllib_DATA)'; test -n "$(perllibdir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(perllibdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(perllibdir)" || exit 1; \
+ fi; \
+ $(am__nobase_list) | while read dir files; do \
+ xfiles=; for file in $$files; do \
+ if test -f "$$file"; then xfiles="$$xfiles $$file"; \
+ else xfiles="$$xfiles $(srcdir)/$$file"; fi; done; \
+ test -z "$$xfiles" || { \
+ test "x$$dir" = x. || { \
+ echo " $(MKDIR_P) '$(DESTDIR)$(perllibdir)/$$dir'"; \
+ $(MKDIR_P) "$(DESTDIR)$(perllibdir)/$$dir"; }; \
+ echo " $(INSTALL_DATA) $$xfiles '$(DESTDIR)$(perllibdir)/$$dir'"; \
+ $(INSTALL_DATA) $$xfiles "$(DESTDIR)$(perllibdir)/$$dir" || exit $$?; }; \
+ done
+
+uninstall-nobase_dist_perllibDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(nobase_dist_perllib_DATA)'; test -n "$(perllibdir)" || list=; \
+ $(am__nobase_strip_setup); files=`$(am__nobase_strip)`; \
+ dir='$(DESTDIR)$(perllibdir)'; $(am__uninstall_files_from_dir)
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+# (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+ @fail=; \
+ if $(am__make_keepgoing); then \
+ failcom='fail=yes'; \
+ else \
+ failcom='exit 1'; \
+ fi; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ $(am__make_dryrun) \
+ || test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+ $(MAKE) $(AM_MAKEFLAGS) check-local
+check: check-recursive
+all-am: Makefile $(SCRIPTS) $(MANS) $(DATA)
+installdirs: installdirs-recursive
+installdirs-am:
+ for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(man3dir)" "$(DESTDIR)$(zshcompletionsdir)" "$(DESTDIR)$(perllibdir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool clean-local mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am: install-data-local install-dist_zshcompletionsDATA \
+ install-man install-nobase_dist_perllibDATA
+ @$(NORMAL_INSTALL)
+ $(MAKE) $(AM_MAKEFLAGS) install-data-hook
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am: install-binSCRIPTS install-sbinSCRIPTS
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man: install-man3
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-binSCRIPTS uninstall-dist_zshcompletionsDATA \
+ uninstall-local uninstall-man \
+ uninstall-nobase_dist_perllibDATA uninstall-sbinSCRIPTS
+
+uninstall-man: uninstall-man3
+
+.MAKE: $(am__recursive_targets) check-am install-am install-data-am \
+ install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+ check-am check-local clean clean-generic clean-libtool \
+ clean-local cscopelist-am ctags ctags-am distclean \
+ distclean-generic distclean-libtool distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-binSCRIPTS install-data install-data-am \
+ install-data-hook install-data-local \
+ install-dist_zshcompletionsDATA install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-man3 \
+ install-nobase_dist_perllibDATA install-pdf install-pdf-am \
+ install-ps install-ps-am install-sbinSCRIPTS install-strip \
+ installcheck installcheck-am installdirs installdirs-am \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-am uninstall uninstall-am uninstall-binSCRIPTS \
+ uninstall-dist_zshcompletionsDATA uninstall-local \
+ uninstall-man uninstall-man3 uninstall-nobase_dist_perllibDATA \
+ uninstall-sbinSCRIPTS
+
+.PRECIOUS: Makefile
+
+
+.sh: Makefile
+ @test -d `dirname $@` || $(MKDIR_P) `dirname $@`
+ $(do_shell_subst) <$< >$@
+ $(AM_V_at) chmod +x $@
+
+.pl: Makefile
+ @test -d `dirname $@` || $(MKDIR_P) `dirname $@`
+ $(do_perl_subst) <$< >$@
+ $(AM_V_at) chmod +x $@
+
+install-data-local:
+# Install manual pages for perl modules manually as make can't deal
+# properly with filenames containing colons
+# Remove empty manual pages (perl modules not documented)
+@BUILD_POD_DOC_TRUE@ $(MKDIR_P) $(DESTDIR)$(man3dir)
+@BUILD_POD_DOC_TRUE@ for module in $(nobase_dist_perllib_DATA); do \
+@BUILD_POD_DOC_TRUE@ name=`echo $$module | $(SED) -e 's|/|::|g' -e 's/\.pm$$//'`; \
+@BUILD_POD_DOC_TRUE@ $(POD2MAN) --utf8 --center=libdpkg-perl --release=$(VERSION) \
+@BUILD_POD_DOC_TRUE@ --name="$$name" --section=$(man_perl_section) $(srcdir)/$$module \
+@BUILD_POD_DOC_TRUE@ >$(DESTDIR)$(man3dir)/$$name.$(man_perl_section); \
+@BUILD_POD_DOC_TRUE@ test -s $(DESTDIR)$(man3dir)/$$name.$(man_perl_section) || \
+@BUILD_POD_DOC_TRUE@ rm -f $(DESTDIR)$(man3dir)/$$name.$(man_perl_section); \
+@BUILD_POD_DOC_TRUE@ done
+
+# Ideally we'd use '$(SED) -i', but unfortunately that's not portable.
+install-data-hook:
+ $(do_perl_subst) <$(DESTDIR)$(perllibdir)/Dpkg.pm \
+ >$(DESTDIR)$(perllibdir)/Dpkg.pm.new
+ mv $(DESTDIR)$(perllibdir)/Dpkg.pm.new \
+ $(DESTDIR)$(perllibdir)/Dpkg.pm
+
+uninstall-local:
+@BUILD_POD_DOC_TRUE@ for module in $(nobase_dist_perllib_DATA); do \
+@BUILD_POD_DOC_TRUE@ rm -f $(DESTDIR)$(man3dir)/`echo $$module | $(SED) -e 's|/|::|g' -e 's/\.pm$$/.$(man_perl_section)/'`; \
+@BUILD_POD_DOC_TRUE@ done
+
+coverage: check
+ $(PERL_COVER) -silent \
+ -ignore_re '^t/.*\.t' \
+ -outputdir $(top_builddir)/doc/coverage/scripts
+ : # Cleanup coverage report index
+ $(PERL) -i -p -e "s:$(abs_top_builddir)::" \
+ $(top_builddir)/doc/coverage/scripts/coverage.html
+
+coverage-clean:
+ rm -rf cover_db
+
+$(srcdir)/t/Dpkg_Shlibs/libobjdump.basictags-amd64.so: $(srcdir)/t/Dpkg_Shlibs/basictags.c
+ $(CC) $(CFLAGS) -shared -fPIC -Wl,-soname -Wl,libbasictags.so.1 $< \
+ -DAMD64 -o $@
+
+$(srcdir)/t/Dpkg_Shlibs/libobjdump.basictags-mips.so: $(srcdir)/t/Dpkg_Shlibs/basictags.c
+ $(CC) $(CFLAGS) -shared -fPIC -Wl,-soname -Wl,libbasictags.so.1 $< \
+ -DMIPS -o $@
+
+$(srcdir)/t/Dpkg_Shlibs/libobjdump.basictags-i386.so: $(srcdir)/t/Dpkg_Shlibs/basictags.c
+ $(CC) $(CFLAGS) -shared -fPIC -Wl,-soname -Wl,libbasictags.so.1 $< \
+ -DI386 -o $@
+
+$(srcdir)/t/Dpkg_Shlibs/libobjdump.patterns.so: $(srcdir)/t/Dpkg_Shlibs/patterns.cpp $(srcdir)/t/Dpkg_Shlibs/patterns.map
+ $(CXX) $(CXXFLAGS) -shared -fPIC -Wl,-soname -Wl,libpatterns.so.1 \
+ -Wl,--version-script=$(srcdir)/t/Dpkg_Shlibs/patterns.map $< -o $@
+
+$(srcdir)/t/Dpkg_Shlibs/spacesyms.c: $(srcdir)/t/Dpkg_Shlibs/spacesyms-c-gen.pl
+ $(srcdir)/t/Dpkg_Shlibs/spacesyms-c-gen.pl > $@
+
+$(srcdir)/t/Dpkg_Shlibs/spacesyms.o: $(srcdir)/t/Dpkg_Shlibs/spacesyms.c $(srcdir)/t/Dpkg_Shlibs/spacesyms-o-map.pl
+ $(CC) $(CFLAGS) -c -fPIC -o $@.tmp $<
+ $(srcdir)/t/Dpkg_Shlibs/spacesyms-o-map.pl $@.tmp $@
+ rm -f $@.tmp
+
+$(srcdir)/t/Dpkg_Shlibs/libobjdump.spacesyms.so: $(srcdir)/t/Dpkg_Shlibs/spacesyms.o $(srcdir)/t/Dpkg_Shlibs/spacesyms.map
+ $(CC) -shared -Wl,-soname -Wl,libspacesyms.so.1 \
+ -Wl,--version-script=$(srcdir)/t/Dpkg_Shlibs/spacesyms.map $< -o $@
+
+.PHONY: refresh-test-data
+
+refresh-test-data: $(test_data_objects)
+ $(OBJDUMP) $(srcdir)/t/Dpkg_Shlibs/libobjdump.basictags-amd64.so \
+ >$(srcdir)/t/Dpkg_Shlibs/objdump.basictags-amd64
+ $(OBJDUMP) $(srcdir)/t/Dpkg_Shlibs/libobjdump.basictags-i386.so \
+ >$(srcdir)/t/Dpkg_Shlibs/objdump.basictags-i386
+ $(OBJDUMP) $(srcdir)/t/Dpkg_Shlibs/libobjdump.basictags-mips.so \
+ >$(srcdir)/t/Dpkg_Shlibs/objdump.basictags-mips
+ $(OBJDUMP) $(srcdir)/t/Dpkg_Shlibs/libobjdump.patterns.so \
+ >$(srcdir)/t/Dpkg_Shlibs/objdump.patterns
+ $(OBJDUMP) $(srcdir)/t/Dpkg_Shlibs/libobjdump.spacesyms.so \
+ >$(srcdir)/t/Dpkg_Shlibs/objdump.spacesyms
+ $(OBJDUMP) `which ls` >$(srcdir)/t/Dpkg_Shlibs/objdump.ls
+
+TEST_VERBOSE ?= 0
+TEST_PARALLEL ?= 1
+
+tap-clean:
+ [ -z "$(test_tmpdir)" ] || rm -fr $(test_tmpdir)
+
+tap-check: $(test_data) $(test_programs) $(test_scripts)
+ [ -z "$(test_tmpdir)" ] || $(MKDIR_P) $(test_tmpdir)
+ $(TEST_ENV_VARS) \
+ abs_top_srcdir=$(abs_top_srcdir) \
+ abs_top_builddir=$(abs_top_builddir) \
+ srcdir=$(srcdir) builddir=$(builddir) \
+ CC=$(CC) \
+ SHELL=$(SHELL) \
+ PERL=$(PERL) \
+ PERL_DL_NONLAZY=1 \
+ PERL5OPT=$(TEST_COVERAGE) \
+ $(PERL) $(top_srcdir)/build-aux/test-runner \
+ $(addprefix $(builddir)/,$(test_programs)) \
+ $(addprefix $(srcdir)/,$(test_scripts))
+
+authorcheck:
+ AUTHOR_TESTING=1 $(MAKE) check
+
+check-local: tap-check
+
+clean-local: tap-clean coverage-clean
+ rm -fr man
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/scripts/README.cpan.in b/scripts/README.cpan.in
new file mode 100644
index 0000000..5bf8161
--- /dev/null
+++ b/scripts/README.cpan.in
@@ -0,0 +1,5 @@
+This archive contains the CPAN distribution for @PACKAGE_CPAN_NAME@, which
+is part of the @PACKAGE@ project.
+
+Only the perl modules are included. The rest of the content can be found in
+the original upstream source code, from <@PACKAGE_URL@>.
diff --git a/scripts/Test/Dpkg.pm b/scripts/Test/Dpkg.pm
new file mode 100644
index 0000000..2cbbb02
--- /dev/null
+++ b/scripts/Test/Dpkg.pm
@@ -0,0 +1,227 @@
+# Copyright © 2015 Guillem Jover <guillem@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Test::Dpkg;
+
+use strict;
+use warnings;
+
+our $VERSION = '0.00';
+our @EXPORT_OK = qw(
+ all_po_files
+ all_perl_files
+ all_perl_modules
+ test_get_po_dirs
+ test_get_perl_dirs
+ test_get_data_path
+ test_get_temp_path
+ test_needs_author
+ test_needs_module
+ test_needs_command
+ test_needs_openpgp_backend
+ test_needs_srcdir_switch
+ test_neutralize_checksums
+);
+our %EXPORT_TAGS = (
+ needs => [ qw(
+ test_needs_author
+ test_needs_module
+ test_needs_command
+ test_needs_openpgp_backend
+ test_needs_srcdir_switch
+ ) ],
+ paths => [ qw(
+ all_po_files
+ all_perl_files
+ all_perl_modules
+ test_get_po_dirs
+ test_get_perl_dirs
+ test_get_data_path
+ test_get_temp_path
+ ) ],
+);
+
+use Exporter qw(import);
+use Cwd;
+use File::Find;
+use File::Basename;
+use File::Path qw(make_path rmtree);
+use IPC::Cmd qw(can_run);
+use Test::More;
+
+my $test_mode;
+
+BEGIN {
+ $test_mode = $ENV{DPKG_TEST_MODE} // 'dpkg';
+}
+
+sub _test_get_caller_dir
+{
+ my (undef, $path, undef) = caller 1;
+
+ $path =~ s{\.t$}{};
+ $path =~ s{^\./}{};
+
+ return $path;
+}
+
+sub test_get_data_path
+{
+ my $path = shift;
+
+ if (defined $path) {
+ my $srcdir;
+ $srcdir = $ENV{srcdir} if $test_mode ne 'cpan';
+ $srcdir ||= '.';
+ return "$srcdir/$path";
+ } else {
+ return _test_get_caller_dir();
+ }
+}
+
+sub test_get_temp_path
+{
+ my $path = shift // _test_get_caller_dir();
+ $path = 't.tmp/' . fileparse($path);
+
+ rmtree($path);
+ make_path($path);
+ return $path;
+}
+
+sub test_get_po_dirs
+{
+ if ($test_mode eq 'cpan') {
+ return qw();
+ } else {
+ return qw(po scripts/po dselect/po man/po);
+ }
+}
+
+sub test_get_perl_dirs
+{
+ if ($test_mode eq 'cpan') {
+ return qw(t lib);
+ } else {
+ return qw(t lib utils/t scripts dselect);
+ }
+}
+
+sub _test_get_files
+{
+ my ($filter, $dirs) = @_;
+ my @files;
+ my $scan_files = sub {
+ push @files, $File::Find::name if m/$filter/;
+ };
+
+ find($scan_files, @{$dirs});
+
+ return @files;
+}
+
+sub all_po_files
+{
+ return _test_get_files(qr/\.(?:po|pot)$/, [ test_get_po_dirs() ]);
+}
+
+sub all_perl_files
+{
+ return _test_get_files(qr/\.(?:PL|pl|pm|t)$/, [ test_get_perl_dirs() ]);
+}
+
+sub all_perl_modules
+{
+ return _test_get_files(qr/\.pm$/, [ test_get_perl_dirs() ]);
+}
+
+sub test_needs_author
+{
+ if (not $ENV{AUTHOR_TESTING}) {
+ plan skip_all => 'author test';
+ }
+}
+
+sub test_needs_module
+{
+ my ($module, @imports) = @_;
+ my ($package) = caller;
+
+ require version;
+ my $version = '';
+ if (@imports >= 1 and version::is_lax($imports[0])) {
+ $version = shift @imports;
+ }
+
+ eval qq{
+ package $package;
+ use $module $version \@imports;
+ 1;
+ } or do {
+ plan skip_all => "requires module $module $version";
+ }
+}
+
+sub test_needs_command
+{
+ my $command = shift;
+
+ if (not can_run($command)) {
+ plan skip_all => "requires command $command";
+ }
+}
+
+sub test_needs_openpgp_backend
+{
+ my @backends = qw(
+ gpg
+ sq
+ sqop
+ pgpainless-cli
+ );
+ my @cmds = grep { can_run($_) } @backends;
+ if (@cmds == 0) {
+ plan skip_all => "requires >= 1 openpgp command: @backends";
+ }
+
+ return @cmds;
+}
+
+sub test_needs_srcdir_switch
+{
+ if (defined $ENV{srcdir}) {
+ chdir $ENV{srcdir} or BAIL_OUT("cannot chdir to source directory: $!");
+ }
+}
+
+sub test_neutralize_checksums
+{
+ my $filename = shift;
+ my $filenamenew = "$filename.new";
+
+ my $cwd = getcwd();
+ open my $fhnew, '>', $filenamenew or die "cannot open new $filenamenew in $cwd: $!";
+ open my $fh, '<', $filename or die "cannot open $filename in $cwd: $!";
+ while (<$fh>) {
+ s/^ ([0-9a-f]{32,}) [1-9][0-9]* /q{ } . $1 =~ tr{0-9a-f}{0}r . q{ 0 }/e;
+ print { $fhnew } $_;
+ }
+ close $fh or die "cannot close $filename";
+ close $fhnew or die "cannot close $filenamenew";
+
+ rename $filenamenew, $filename or die "cannot rename $filenamenew to $filename";
+}
+
+1;
diff --git a/scripts/completion/zsh/_dpkg-parsechangelog b/scripts/completion/zsh/_dpkg-parsechangelog
new file mode 100644
index 0000000..21fd9bc
--- /dev/null
+++ b/scripts/completion/zsh/_dpkg-parsechangelog
@@ -0,0 +1,23 @@
+#compdef dpkg-parsechangelog
+
+local -a args
+args=(
+ '(-l --file)'{-l+,--file=}'[specify path to d/changelog]: :_files'
+ # Note: We have to use "= " since _perl_modules in zsh ≤5.8 assumes ${words[1]} is a perl. (See workers/48321)
+ '-F+[specify changelog format]:changelog format:= _perl_modules --strip-prefix --perl-hierarchy=Dpkg\:\:Changelog'
+ '!-L+'
+ '(-S --show-field)'{-S+,--show-field=}'[show only one field]:changelog field:(Source Version Distribution Urgency Maintainer Date Timestamp Closes Changelog)'
+ '(-)'{-\?,--help}'[show the usage message]'
+ '(-)--version[show the version information]'
+ '--format=[set the output format]:output format:((dpkg\:classic rfc822))'
+ '(--all)--reverse[print all changes, oldest to newest]'
+ '(--reverse)--all[print all changes, newest to oldest]'
+ # TODO: all these should complete version numbers from ${(Q)opt_args[-l]:-debian/changelog}
+ '(-s --since -v)'{-s+,--since=,-v+}'[specify strict lower bound]:version number'
+ '(-u --until)'{-u+,--until=}'[specify strict upper bound]:version number'
+ '(-f --from)'{-f+,--from=}'[specify weak lower bound]:version number'
+ '(-t --to)'{-t+,-to=}'[specify weak upper bound]:version number'
+ '(-c --count -n)'{-c+,-n+,--count=}'[specify number of entries to print]:limit (integer)'
+ '(-o --offset)'{-o+,--offset=}'[offset the number of entries to print]:offset (integer)'
+)
+_arguments : "${args[@]}"
diff --git a/scripts/dpkg-architecture.pl b/scripts/dpkg-architecture.pl
new file mode 100755
index 0000000..11fb0bd
--- /dev/null
+++ b/scripts/dpkg-architecture.pl
@@ -0,0 +1,396 @@
+#!/usr/bin/perl
+#
+# dpkg-architecture
+#
+# Copyright © 1999-2001 Marcus Brinkmann <brinkmd@debian.org>
+# Copyright © 2004-2005 Scott James Remnant <scott@netsplit.com>,
+# Copyright © 2006-2014 Guillem Jover <guillem@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use Dpkg ();
+use Dpkg::Gettext;
+use Dpkg::Getopt;
+use Dpkg::ErrorHandling;
+use Dpkg::Arch qw(:getters :mappers debarch_eq debarch_is);
+
+textdomain('dpkg-dev');
+
+sub version {
+ printf g_("Debian %s version %s.\n"), $Dpkg::PROGNAME, $Dpkg::PROGVERSION;
+
+ printf g_('
+This is free software; see the GNU General Public License version 2 or
+later for copying conditions. There is NO warranty.
+');
+}
+
+sub usage {
+ printf g_(
+'Usage: %s [<option>...] [<command>]')
+ . "\n\n" . g_(
+'Commands:
+ -l, --list list variables (default).
+ -L, --list-known list valid architectures (matching some criteria).
+ -e, --equal <arch> compare with host Debian architecture.
+ -i, --is <arch-wildcard> match against host Debian architecture.
+ -q, --query <variable> prints only the value of <variable>.
+ -s, --print-set print command to set environment variables.
+ -u, --print-unset print command to unset environment variables.
+ -c, --command <command> set environment and run the command in it.
+ -?, --help show this help message.
+ --version show the version.')
+ . "\n\n" . g_(
+'Options:
+ -a, --host-arch <arch> set host Debian architecture.
+ -t, --host-type <type> set host GNU system type.
+ -A, --target-arch <arch> set target Debian architecture.
+ -T, --target-type <type> set target GNU system type.
+ -W, --match-wildcard <arch-wildcard>
+ restrict architecture list matching <arch-wildcard>.
+ -B, --match-bits <arch-bits>
+ restrict architecture list matching <arch-bits>.
+ -E, --match-endian <arch-endian>
+ restrict architecture list matching <arch-endian>.
+ --print-format <format>
+ use <format> for --print-set and --print-unset,
+ allowed values: shell (default), make.
+ -f, --force force flag (override variables set in environment).')
+ . "\n", $Dpkg::PROGNAME;
+}
+
+sub check_arch_coherency
+{
+ my ($arch, $gnu_type) = @_;
+
+ if ($arch ne '' && $gnu_type eq '') {
+ $gnu_type = debarch_to_gnutriplet($arch);
+ error(g_('unknown Debian architecture %s, you must specify ' .
+ 'GNU system type, too'), $arch)
+ unless defined $gnu_type;
+ }
+
+ if ($gnu_type ne '' && $arch eq '') {
+ $arch = gnutriplet_to_debarch($gnu_type);
+ error(g_('unknown GNU system type %s, you must specify ' .
+ 'Debian architecture, too'), $gnu_type)
+ unless defined $arch;
+ }
+
+ if ($gnu_type ne '' && $arch ne '') {
+ my $dfl_gnu_type = debarch_to_gnutriplet($arch);
+ error(g_('unknown default GNU system type for Debian architecture %s'),
+ $arch)
+ unless defined $dfl_gnu_type;
+ warning(g_('default GNU system type %s for Debian arch %s does not ' .
+ 'match specified GNU system type %s'), $dfl_gnu_type,
+ $arch, $gnu_type)
+ if $dfl_gnu_type ne $gnu_type;
+ }
+
+ return ($arch, $gnu_type);
+}
+
+use constant {
+ INFO_BUILD_ARCH_NAME => 0b00001,
+ INFO_BUILD_ARCH_TUPLE => 0b00010,
+ INFO_BUILD_ARCH_ATTR => 0b00100,
+ INFO_BUILD_MULTIARCH => 0b01000,
+ INFO_BUILD_GNU_TUPLE => 0b10000,
+
+ INFO_HOST_ARCH_NAME => 0b0000100000,
+ INFO_HOST_ARCH_TUPLE => 0b0001000000,
+ INFO_HOST_ARCH_ATTR => 0b0010000000,
+ INFO_HOST_MULTIARCH => 0b0100000000,
+ INFO_HOST_GNU_TUPLE => 0b1000000000,
+
+ INFO_TARGET_ARCH_NAME => 0b000010000000000,
+ INFO_TARGET_ARCH_TUPLE => 0b000100000000000,
+ INFO_TARGET_ARCH_ATTR => 0b001000000000000,
+ INFO_TARGET_MULTIARCH => 0b010000000000000,
+ INFO_TARGET_GNU_TUPLE => 0b100000000000000,
+};
+
+my %arch_vars = (
+ DEB_BUILD_ARCH => INFO_BUILD_ARCH_NAME,
+ DEB_BUILD_ARCH_ABI => INFO_BUILD_ARCH_NAME | INFO_BUILD_ARCH_TUPLE,
+ DEB_BUILD_ARCH_LIBC => INFO_BUILD_ARCH_NAME | INFO_BUILD_ARCH_TUPLE,
+ DEB_BUILD_ARCH_OS => INFO_BUILD_ARCH_NAME | INFO_BUILD_ARCH_TUPLE,
+ DEB_BUILD_ARCH_CPU => INFO_BUILD_ARCH_NAME | INFO_BUILD_ARCH_TUPLE,
+ DEB_BUILD_ARCH_BITS => INFO_BUILD_ARCH_NAME | INFO_BUILD_ARCH_ATTR,
+ DEB_BUILD_ARCH_ENDIAN => INFO_BUILD_ARCH_NAME | INFO_BUILD_ARCH_ATTR,
+ DEB_BUILD_MULTIARCH => INFO_BUILD_ARCH_NAME | INFO_BUILD_MULTIARCH,
+ DEB_BUILD_GNU_CPU => INFO_BUILD_ARCH_NAME | INFO_BUILD_GNU_TUPLE,
+ DEB_BUILD_GNU_SYSTEM => INFO_BUILD_ARCH_NAME | INFO_BUILD_GNU_TUPLE,
+ DEB_BUILD_GNU_TYPE => INFO_BUILD_ARCH_NAME | INFO_BUILD_GNU_TUPLE,
+ DEB_HOST_ARCH => INFO_HOST_ARCH_NAME,
+ DEB_HOST_ARCH_ABI => INFO_HOST_ARCH_NAME | INFO_HOST_ARCH_TUPLE,
+ DEB_HOST_ARCH_LIBC => INFO_HOST_ARCH_NAME | INFO_HOST_ARCH_TUPLE,
+ DEB_HOST_ARCH_OS => INFO_HOST_ARCH_NAME | INFO_HOST_ARCH_TUPLE,
+ DEB_HOST_ARCH_CPU => INFO_HOST_ARCH_NAME | INFO_HOST_ARCH_TUPLE,
+ DEB_HOST_ARCH_BITS => INFO_HOST_ARCH_NAME | INFO_HOST_ARCH_ATTR,
+ DEB_HOST_ARCH_ENDIAN => INFO_HOST_ARCH_NAME | INFO_HOST_ARCH_ATTR,
+ DEB_HOST_MULTIARCH => INFO_HOST_ARCH_NAME | INFO_HOST_MULTIARCH,
+ DEB_HOST_GNU_CPU => INFO_HOST_ARCH_NAME | INFO_HOST_GNU_TUPLE,
+ DEB_HOST_GNU_SYSTEM => INFO_HOST_ARCH_NAME | INFO_HOST_GNU_TUPLE,
+ DEB_HOST_GNU_TYPE => INFO_HOST_ARCH_NAME | INFO_HOST_GNU_TUPLE,
+ DEB_TARGET_ARCH => INFO_TARGET_ARCH_NAME,
+ DEB_TARGET_ARCH_ABI => INFO_TARGET_ARCH_NAME | INFO_TARGET_ARCH_TUPLE,
+ DEB_TARGET_ARCH_LIBC => INFO_TARGET_ARCH_NAME | INFO_TARGET_ARCH_TUPLE,
+ DEB_TARGET_ARCH_OS => INFO_TARGET_ARCH_NAME | INFO_TARGET_ARCH_TUPLE,
+ DEB_TARGET_ARCH_CPU => INFO_TARGET_ARCH_NAME | INFO_TARGET_ARCH_TUPLE,
+ DEB_TARGET_ARCH_BITS => INFO_TARGET_ARCH_NAME | INFO_TARGET_ARCH_ATTR,
+ DEB_TARGET_ARCH_ENDIAN => INFO_TARGET_ARCH_NAME | INFO_TARGET_ARCH_ATTR,
+ DEB_TARGET_MULTIARCH => INFO_TARGET_ARCH_NAME | INFO_TARGET_MULTIARCH,
+ DEB_TARGET_GNU_CPU => INFO_TARGET_ARCH_NAME | INFO_TARGET_GNU_TUPLE,
+ DEB_TARGET_GNU_SYSTEM => INFO_TARGET_ARCH_NAME | INFO_TARGET_GNU_TUPLE,
+ DEB_TARGET_GNU_TYPE => INFO_TARGET_ARCH_NAME | INFO_TARGET_GNU_TUPLE,
+);
+
+my %known_print_format = map { $_ => 1 } qw(shell make);
+my $print_format = 'shell';
+
+my %req_vars = %arch_vars;
+my $req_info = 0;
+my $req_host_arch = '';
+my $req_host_gnu_type = '';
+my $req_target_arch = '';
+my $req_target_gnu_type = '';
+my $req_eq_arch = '';
+my $req_is_arch = '';
+my $req_match_wildcard = '';
+my $req_match_bits = '';
+my $req_match_endian = '';
+my $req_variable_to_print;
+my $action = 'list';
+my $force = 0;
+
+sub action_needs($) {
+ my $bits = shift;
+ return (($req_info & $bits) == $bits);
+}
+
+@ARGV = normalize_options(args => \@ARGV, delim => '-c');
+
+while (@ARGV) {
+ my $arg = shift;
+
+ if ($arg eq '-a' or $arg eq '--host-arch') {
+ $req_host_arch = shift;
+ } elsif ($arg eq '-t' or $arg eq '--host-type') {
+ $req_host_gnu_type = shift;
+ } elsif ($arg eq '-A' or $arg eq '--target-arch') {
+ $req_target_arch = shift;
+ } elsif ($arg eq '-T' or $arg eq '--target-type') {
+ $req_target_gnu_type = shift;
+ } elsif ($arg eq '-W' or $arg eq '--match-wildcard') {
+ $req_match_wildcard = shift;
+ } elsif ($arg eq '-B' or $arg eq '--match-bits') {
+ $req_match_bits = shift;
+ } elsif ($arg eq '-E' or $arg eq '--match-endian') {
+ $req_match_endian = shift;
+ } elsif ($arg eq '-e' or $arg eq '--equal') {
+ $req_eq_arch = shift;
+ %req_vars = %arch_vars{DEB_HOST_ARCH};
+ $action = 'equal';
+ } elsif ($arg eq '-i' or $arg eq '--is') {
+ $req_is_arch = shift;
+ %req_vars = %arch_vars{DEB_HOST_ARCH};
+ $action = 'is';
+ } elsif ($arg eq '-u' or $arg eq '--print-unset') {
+ %req_vars = ();
+ $action = 'print-unset';
+ } elsif ($arg eq '-l' or $arg eq '--list') {
+ $action = 'list';
+ } elsif ($arg eq '-s' or $arg eq '--print-set') {
+ %req_vars = %arch_vars;
+ $action = 'print-set';
+ } elsif ($arg eq '--print-format') {
+ $print_format = shift;
+ error(g_('%s is not a supported print format'), $print_format)
+ unless exists $known_print_format{$print_format};
+ } elsif ($arg eq '-f' or $arg eq '--force') {
+ $force = 1;
+ } elsif ($arg eq '-q' or $arg eq '--query') {
+ my $varname = shift;
+ error(g_('%s is not a supported variable name'), $varname)
+ unless (exists $arch_vars{$varname});
+ $req_variable_to_print = "$varname";
+ %req_vars = %arch_vars{$varname};
+ $action = 'query';
+ } elsif ($arg eq '-c' or $arg eq '--command') {
+ $action = 'command';
+ last;
+ } elsif ($arg eq '-L' or $arg eq '--list-known') {
+ %req_vars = ();
+ $action = 'list-known';
+ } elsif ($arg eq '-?' or $arg eq '--help') {
+ usage();
+ exit 0;
+ } elsif ($arg eq '--version') {
+ version();
+ exit 0;
+ } else {
+ usageerr(g_("unknown option '%s'"), $arg);
+ }
+}
+
+my %v;
+
+# Initialize variables from environment and information to gather.
+foreach my $k (keys %req_vars) {
+ if (length $ENV{$k} && ! $force) {
+ $v{$k} = $ENV{$k};
+ delete $req_vars{$k};
+ } else {
+ $req_info |= $req_vars{$k};
+ }
+}
+
+#
+# Set build variables
+#
+
+$v{DEB_BUILD_ARCH} = get_raw_build_arch()
+ if (action_needs(INFO_BUILD_ARCH_NAME));
+($v{DEB_BUILD_ARCH_ABI}, $v{DEB_BUILD_ARCH_LIBC},
+ $v{DEB_BUILD_ARCH_OS}, $v{DEB_BUILD_ARCH_CPU}) = debarch_to_debtuple($v{DEB_BUILD_ARCH})
+ if (action_needs(INFO_BUILD_ARCH_TUPLE));
+($v{DEB_BUILD_ARCH_BITS}, $v{DEB_BUILD_ARCH_ENDIAN}) = debarch_to_abiattrs($v{DEB_BUILD_ARCH})
+ if (action_needs(INFO_BUILD_ARCH_ATTR));
+
+$v{DEB_BUILD_MULTIARCH} = debarch_to_multiarch($v{DEB_BUILD_ARCH})
+ if (action_needs(INFO_BUILD_MULTIARCH));
+
+if (action_needs(INFO_BUILD_GNU_TUPLE)) {
+ $v{DEB_BUILD_GNU_TYPE} = debarch_to_gnutriplet($v{DEB_BUILD_ARCH});
+ ($v{DEB_BUILD_GNU_CPU}, $v{DEB_BUILD_GNU_SYSTEM}) = split(/-/, $v{DEB_BUILD_GNU_TYPE}, 2);
+}
+
+#
+# Set host variables
+#
+
+# First perform some sanity checks on the host arguments passed.
+
+($req_host_arch, $req_host_gnu_type) = check_arch_coherency($req_host_arch, $req_host_gnu_type);
+
+# Proceed to compute the host variables if needed.
+
+$v{DEB_HOST_ARCH} = $req_host_arch || get_raw_host_arch()
+ if (action_needs(INFO_HOST_ARCH_NAME));
+($v{DEB_HOST_ARCH_ABI}, $v{DEB_HOST_ARCH_LIBC},
+ $v{DEB_HOST_ARCH_OS}, $v{DEB_HOST_ARCH_CPU}) = debarch_to_debtuple($v{DEB_HOST_ARCH})
+ if (action_needs(INFO_HOST_ARCH_TUPLE));
+($v{DEB_HOST_ARCH_BITS}, $v{DEB_HOST_ARCH_ENDIAN}) = debarch_to_abiattrs($v{DEB_HOST_ARCH})
+ if (action_needs(INFO_HOST_ARCH_ATTR));
+
+$v{DEB_HOST_MULTIARCH} = debarch_to_multiarch($v{DEB_HOST_ARCH})
+ if (action_needs(INFO_HOST_MULTIARCH));
+
+if (action_needs(INFO_HOST_GNU_TUPLE)) {
+ if ($req_host_gnu_type eq '') {
+ $v{DEB_HOST_GNU_TYPE} = debarch_to_gnutriplet($v{DEB_HOST_ARCH});
+ } else {
+ $v{DEB_HOST_GNU_TYPE} = $req_host_gnu_type;
+ }
+ ($v{DEB_HOST_GNU_CPU}, $v{DEB_HOST_GNU_SYSTEM}) = split(/-/, $v{DEB_HOST_GNU_TYPE}, 2);
+
+ my $host_gnu_type = get_host_gnu_type();
+
+ warning(g_('specified GNU system type %s does not match CC system ' .
+ 'type %s, try setting a correct CC environment variable'),
+ $v{DEB_HOST_GNU_TYPE}, $host_gnu_type)
+ if ($host_gnu_type ne '') && ($host_gnu_type ne $v{DEB_HOST_GNU_TYPE});
+}
+
+#
+# Set target variables
+#
+
+# First perform some sanity checks on the target arguments passed.
+
+($req_target_arch, $req_target_gnu_type) = check_arch_coherency($req_target_arch, $req_target_gnu_type);
+
+# Proceed to compute the target variables if needed.
+
+$v{DEB_TARGET_ARCH} = $req_target_arch || $v{DEB_HOST_ARCH} || $req_host_arch || get_raw_host_arch()
+ if (action_needs(INFO_TARGET_ARCH_NAME));
+($v{DEB_TARGET_ARCH_ABI}, $v{DEB_TARGET_ARCH_LIBC},
+ $v{DEB_TARGET_ARCH_OS}, $v{DEB_TARGET_ARCH_CPU}) = debarch_to_debtuple($v{DEB_TARGET_ARCH})
+ if (action_needs(INFO_TARGET_ARCH_TUPLE));
+($v{DEB_TARGET_ARCH_BITS}, $v{DEB_TARGET_ARCH_ENDIAN}) = debarch_to_abiattrs($v{DEB_TARGET_ARCH})
+ if (action_needs(INFO_TARGET_ARCH_ATTR));
+
+$v{DEB_TARGET_MULTIARCH} = debarch_to_multiarch($v{DEB_TARGET_ARCH})
+ if (action_needs(INFO_TARGET_MULTIARCH));
+
+if (action_needs(INFO_TARGET_GNU_TUPLE)) {
+ if ($req_target_gnu_type eq '') {
+ $v{DEB_TARGET_GNU_TYPE} = debarch_to_gnutriplet($v{DEB_TARGET_ARCH});
+ } else {
+ $v{DEB_TARGET_GNU_TYPE} = $req_target_gnu_type;
+ }
+ ($v{DEB_TARGET_GNU_CPU}, $v{DEB_TARGET_GNU_SYSTEM}) = split(/-/, $v{DEB_TARGET_GNU_TYPE}, 2);
+}
+
+
+if ($action eq 'list') {
+ foreach my $k (sort keys %arch_vars) {
+ print "$k=$v{$k}\n";
+ }
+} elsif ($action eq 'print-set') {
+ if ($print_format eq 'shell') {
+ foreach my $k (sort keys %arch_vars) {
+ print "$k=$v{$k}; ";
+ }
+ print 'export ' . join(' ', sort keys %arch_vars) . "\n";
+ } elsif ($print_format eq 'make') {
+ foreach my $k (sort keys %arch_vars) {
+ print "export $k = $v{$k}\n";
+ }
+ }
+} elsif ($action eq 'print-unset') {
+ if ($print_format eq 'shell') {
+ print 'unset ' . join(' ', sort keys %arch_vars) . "\n";
+ } elsif ($print_format eq 'make') {
+ foreach my $k (sort keys %arch_vars) {
+ print "undefine $k\n";
+ }
+ }
+} elsif ($action eq 'equal') {
+ exit !debarch_eq($v{DEB_HOST_ARCH}, $req_eq_arch);
+} elsif ($action eq 'is') {
+ exit !debarch_is($v{DEB_HOST_ARCH}, $req_is_arch);
+} elsif ($action eq 'command') {
+ @ENV{keys %v} = values %v;
+ ## no critic (TestingAndDebugging::ProhibitNoWarnings)
+ no warnings qw(exec);
+ exec @ARGV or syserr(g_('unable to execute %s'), "@ARGV");
+} elsif ($action eq 'query') {
+ print "$v{$req_variable_to_print}\n";
+} elsif ($action eq 'list-known') {
+ foreach my $arch (get_valid_arches()) {
+ my ($bits, $endian) = debarch_to_abiattrs($arch);
+
+ next if $req_match_endian and $endian ne $req_match_endian;
+ next if $req_match_bits and $bits ne $req_match_bits;
+ next if $req_match_wildcard and not debarch_is($arch, $req_match_wildcard);
+
+ print "$arch\n";
+ }
+}
diff --git a/scripts/dpkg-buildflags.pl b/scripts/dpkg-buildflags.pl
new file mode 100755
index 0000000..1489f32
--- /dev/null
+++ b/scripts/dpkg-buildflags.pl
@@ -0,0 +1,226 @@
+#!/usr/bin/perl
+#
+# dpkg-buildflags
+#
+# Copyright © 2010-2011 Raphaël Hertzog <hertzog@debian.org>
+# Copyright © 2012-2013 Guillem Jover <guillem@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use Dpkg ();
+use Dpkg::Gettext;
+use Dpkg::ErrorHandling qw(:DEFAULT report REPORT_STATUS);
+use Dpkg::BuildEnv;
+use Dpkg::BuildFlags;
+use Dpkg::Vendor qw(get_current_vendor);
+
+textdomain('dpkg-dev');
+
+sub version {
+ printf g_("Debian %s version %s.\n"), $Dpkg::PROGNAME, $Dpkg::PROGVERSION;
+
+ printf g_('
+This is free software; see the GNU General Public License version 2 or
+later for copying conditions. There is NO warranty.
+');
+}
+
+sub usage {
+ printf g_(
+'Usage: %s [<command>]')
+ . "\n\n" . g_(
+'Commands:
+ --get <flag> output the requested flag to stdout.
+ --origin <flag> output the origin of the flag to stdout:
+ value is one of vendor, system, user, env.
+ --status output a synopsis with all parameters affecting the
+ program behaviour, the resulting flags and their origin.
+ --query like --status, but in deb822 format.
+ --query-features <area>
+ output the status of features for the given area.
+ --list output a list of the flags supported by the current vendor.
+ --export=(sh|make|cmdline|configure)
+ output something convenient to import the compilation
+ flags in a shell script, in make, or in a command line.
+ --dump output all compilation flags with their values.
+ --help show this help message.
+ --version show the version.
+'), $Dpkg::PROGNAME;
+}
+
+my ($param, $action);
+my $load_config = 1;
+
+while (@ARGV) {
+ $_ = shift(@ARGV);
+ if (m/^--(get|origin|query-features)$/) {
+ usageerr(g_('two commands specified: --%s and --%s'), $1, $action)
+ if defined($action);
+ $action = $1;
+ $param = shift(@ARGV);
+ usageerr(g_('%s needs a parameter'), $_) unless defined $param;
+ } elsif (m/^--export(?:=(sh|make|cmdline|configure))?$/) {
+ usageerr(g_('two commands specified: --%s and --%s'), 'export', $action)
+ if defined($action);
+ my $type = $1 || 'sh';
+ # Map legacy aliases.
+ $type = 'cmdline' if $type eq 'configure';
+ $action = "export-$type";
+ } elsif (m/^--(list|status|dump|query)$/) {
+ usageerr(g_('two commands specified: --%s and --%s'), $1, $action)
+ if defined($action);
+ $action = $1;
+ $load_config = 0 if $action eq 'list';
+ } elsif (m/^-(?:\?|-help)$/) {
+ usage();
+ exit 0;
+ } elsif (m/^--version$/) {
+ version();
+ exit 0;
+ } else {
+ usageerr(g_("unknown option '%s'"), $_);
+ }
+}
+
+$action //= 'dump';
+
+my $build_flags = Dpkg::BuildFlags->new();
+
+$build_flags->load_config() if $load_config;
+
+if ($action eq 'list') {
+ foreach my $flag ($build_flags->list()) {
+ print "$flag\n";
+ }
+} elsif ($action eq 'get') {
+ exit 1 unless $build_flags->has($param);
+
+ print $build_flags->get($param) . "\n";
+} elsif ($action eq 'origin') {
+ exit 1 unless $build_flags->has($param);
+
+ print $build_flags->get_origin($param) . "\n";
+} elsif ($action eq 'query-features') {
+ exit 1 unless $build_flags->has_features($param);
+
+ my %features = $build_flags->get_features($param);
+ my %builtins = $build_flags->get_builtins($param);
+ my $para_shown = 0;
+ foreach my $feature (sort keys %features) {
+ print $para_shown++ ? "\n" : '';
+ printf "Feature: %s\n", $feature;
+ printf "Enabled: %s\n", $features{$feature} // $builtins{$feature} ? 'yes' : 'no';
+ printf "Builtin: %s\n", $builtins{$feature} ? 'yes' : 'no' if exists $builtins{$feature};
+ }
+} elsif ($action =~ m/^export-(.*)$/) {
+ my $export_type = $1;
+ foreach my $flag ($build_flags->list()) {
+ next unless $flag =~ /^[A-Z]/; # Skip flags starting with lowercase
+ my $value = $build_flags->get($flag);
+ if ($export_type eq 'sh') {
+ $value =~ s/"/\"/g;
+ print "export $flag=\"$value\"\n";
+ } elsif ($export_type eq 'make') {
+ $value =~ s/\$/\$\$/g;
+ print "export $flag := $value\n";
+ } elsif ($export_type eq 'cmdline') {
+ print "$flag=\"$value\" ";
+ }
+ }
+} elsif ($action eq 'dump') {
+ foreach my $flag ($build_flags->list()) {
+ my $value = $build_flags->get($flag);
+ print "$flag=$value\n";
+ }
+} elsif ($action eq 'query') {
+ # First print all environment variables that might have changed the
+ # results (only existing ones, might make sense to add an option to
+ # also show which ones could have set to modify it).
+ printf "Vendor: %s\n", Dpkg::Vendor::get_current_vendor() || 'undefined';
+ print "Environment:\n";
+ for my $envvar (Dpkg::BuildEnv::list_accessed()) {
+ print " $envvar=$ENV{$envvar}\n" if exists $ENV{$envvar};
+ }
+
+ # Then the resulting features:
+ foreach my $area (sort $build_flags->get_feature_areas()) {
+ print "\n";
+ print "Area: $area\n";
+ print "Features:\n";
+ my %features = $build_flags->get_features($area);
+ my %builtins = $build_flags->get_builtins($area);
+ foreach my $feature (sort keys %features) {
+ printf " %s=%s\n", $feature, $features{$feature} // $builtins{$feature} ? 'yes' : 'no';
+ }
+ print "Builtins:\n";
+ foreach my $feature (sort keys %builtins) {
+ printf " %s=%s\n", $feature, $builtins{$feature} ? 'yes' : 'no';
+ }
+ }
+
+ # Then the resulting values (with their origin):
+ foreach my $flag ($build_flags->list()) {
+ print "\n";
+ print "Flag: $flag\n";
+ printf "Value: %s\n", $build_flags->get($flag);
+ my $origin = $build_flags->get_origin($flag);
+ if ($build_flags->is_maintainer_modified($flag)) {
+ $origin .= '+maintainer';
+ }
+ print "Origin: $origin\n";
+ }
+} elsif ($action eq 'status') {
+ # Prefix everything with "dpkg-buildflags: status: " to allow easy
+ # extraction from a build log. Thus we use report with a non-translated
+ # type string.
+
+ # First print all environment variables that might have changed the
+ # results (only existing ones, might make sense to add an option to
+ # also show which ones could have set to modify it).
+ my @envvars = Dpkg::BuildEnv::list_accessed();
+ for my $envvar (@envvars) {
+ if (exists $ENV{$envvar}) {
+ printf report(REPORT_STATUS, 'environment variable %s=%s',
+ $envvar, $ENV{$envvar});
+ }
+ }
+ my $vendor = Dpkg::Vendor::get_current_vendor() || 'undefined';
+ print report(REPORT_STATUS, "vendor is $vendor");
+ # Then the resulting features:
+ foreach my $area (sort $build_flags->get_feature_areas()) {
+ my $fs;
+ my %features = $build_flags->get_features($area);
+ my %builtins = $build_flags->get_builtins($area);
+ foreach my $feature (sort keys %features) {
+ $fs .= sprintf(' %s=%s', $feature, $features{$feature} // $builtins{$feature} ? 'yes' : 'no');
+ }
+ print report(REPORT_STATUS, "$area features:$fs");
+ my $bs = q{};
+ foreach my $feature (sort keys %builtins) {
+ next if ! exists $builtins{$feature};
+ $bs .= sprintf(' %s=%s', $feature, $builtins{$feature} ? 'yes' : 'no');
+ }
+ print report(REPORT_STATUS, "$area builtins:$bs");
+ }
+ # Then the resulting values (with their origin):
+ foreach my $flag ($build_flags->list()) {
+ my $value = $build_flags->get($flag);
+ my $origin = $build_flags->get_origin($flag);
+ my $maintainer = $build_flags->is_maintainer_modified($flag) ? '+maintainer' : '';
+ print report(REPORT_STATUS, "$flag [$origin$maintainer]: $value");
+ }
+}
diff --git a/scripts/dpkg-buildpackage.pl b/scripts/dpkg-buildpackage.pl
new file mode 100755
index 0000000..eca544c
--- /dev/null
+++ b/scripts/dpkg-buildpackage.pl
@@ -0,0 +1,1011 @@
+#!/usr/bin/perl
+#
+# dpkg-buildpackage
+#
+# Copyright © 1996 Ian Jackson
+# Copyright © 2000 Wichert Akkerman
+# Copyright © 2006-2010, 2012-2015 Guillem Jover <guillem@debian.org>
+# Copyright © 2007 Frank Lichtenheld
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use File::Temp qw(tempdir);
+use File::Basename;
+use File::Copy;
+use File::Glob qw(bsd_glob GLOB_TILDE GLOB_NOCHECK);
+use POSIX qw(:sys_wait_h);
+
+use Dpkg ();
+use Dpkg::Gettext;
+use Dpkg::ErrorHandling;
+use Dpkg::BuildTypes;
+use Dpkg::BuildOptions;
+use Dpkg::BuildProfiles qw(set_build_profiles);
+use Dpkg::Conf;
+use Dpkg::Compression;
+use Dpkg::Checksums;
+use Dpkg::Package;
+use Dpkg::Version;
+use Dpkg::Control;
+use Dpkg::Control::Info;
+use Dpkg::Changelog::Parse;
+use Dpkg::OpenPGP;
+use Dpkg::OpenPGP::ErrorCodes;
+use Dpkg::OpenPGP::KeyHandle;
+use Dpkg::Path qw(find_command);
+use Dpkg::IPC;
+use Dpkg::Vendor qw(run_vendor_hook);
+
+textdomain('dpkg-dev');
+
+sub showversion {
+ printf g_("Debian %s version %s.\n"), $Dpkg::PROGNAME, $Dpkg::PROGVERSION;
+
+ print g_('
+This is free software; see the GNU General Public License version 2 or
+later for copying conditions. There is NO warranty.
+');
+}
+
+sub usage {
+ printf g_(
+'Usage: %s [<option>...]')
+ . "\n\n" . g_(
+'Options:
+ --build=<type>[,...] specify the build <type>: full, source, binary,
+ any, all (default is \'full\').
+ -F, --build=full normal full build (source and binary; default).
+ -g, --build=source,all source and arch-indep build.
+ -G, --build=source,any source and arch-specific build.
+ -b, --build=binary binary-only, no source files.
+ -B, --build=any binary-only, only arch-specific files.
+ -A, --build=all binary-only, only arch-indep files.
+ -S, --build=source source-only, no binary files.
+ -nc, --no-pre-clean do not pre clean source tree (implies -b).
+ --pre-clean pre clean source tree (default).
+ --no-post-clean do not post clean source tree (default).
+ -tc, --post-clean post clean source tree.
+ --sanitize-env sanitize the build environment.
+ -D, --check-builddeps check build dependencies and conflicts (default).
+ -d, --no-check-builddeps do not check build dependencies and conflicts.
+ --ignore-builtin-builddeps
+ do not check builtin build dependencies.
+ -P, --build-profiles=<profiles>
+ assume comma-separated build <profiles> as active.
+ --rules-requires-root assume legacy Rules-Requires-Root field value.
+ -R, --rules-file=<rules> rules file to execute (default is debian/rules).
+ -T, --rules-target=<target> call debian/rules <target>.
+ --as-root ensure -T calls the target with root rights.
+ -j, --jobs[=<jobs>|auto] jobs to run simultaneously (passed to <rules>),
+ (default; default is auto, opt-in mode).
+ -J, --jobs-try[=<jobs>|auto]
+ alias for -j, --jobs.
+ --jobs-force[=<jobs>|auto]
+ jobs to run simultaneously (passed to <rules>),
+ (default is auto, forced mode).
+ -r, --root-command=<command>
+ command to gain root rights (default is fakeroot).
+ --check-command=<command>
+ command to check the .changes file (no default).
+ --check-option=<opt> pass <opt> to check <command>.
+ --hook-<name>=<command> set <command> as the hook <name>, known hooks:
+ init preclean source build binary buildinfo
+ changes postclean check sign done
+ --buildinfo-file=<file> set the .buildinfo filename to generate.
+ --buildinfo-option=<opt>
+ pass option <opt> to dpkg-genbuildinfo.
+ --changes-file=<file> set the .changes filename to generate.
+ --sign-backend=<backend>
+ OpenPGP backend to use to sign
+ (default is auto).
+ -p, --sign-command=<command>
+ command to sign .dsc and/or .changes files
+ (default is gpg).
+ --sign-keyfile=<file> the key file to use for signing.
+ -k, --sign-keyid=<keyid> the key id to use for signing.
+ --sign-key=<keyid> alias for -k, --sign-keyid.
+ -ap, --sign-pause add pause before starting signature process.
+ -us, --unsigned-source unsigned source package.
+ -ui, --unsigned-buildinfo unsigned .buildinfo file.
+ -uc, --unsigned-changes unsigned .buildinfo and .changes file.
+ --no-sign do not sign any file.
+ --force-sign force signing the resulting files.
+ --admindir=<directory> change the administrative directory.
+ -?, --help show this help message.
+ --version show the version.')
+ . "\n\n" . g_(
+'Options passed to dpkg-architecture:
+ -a, --host-arch <arch> set the host Debian architecture.
+ -t, --host-type <type> set the host GNU system type.
+ --target-arch <arch> set the target Debian architecture.
+ --target-type <type> set the target GNU system type.')
+ . "\n\n" . g_(
+'Options passed to dpkg-genchanges:
+ -si source includes orig, if new upstream (default).
+ -sa source includes orig, always.
+ -sd source is diff and .dsc only.
+ -v<version> changes since version <version>.
+ -m, --source-by=<maint> maintainer for this source or build is <maint>.
+ --build-by=<maint> ditto.
+ -e, --release-by=<maint> maintainer for this change or release is <maint>.
+ --changed-by=<maint> ditto.
+ -C<descfile> changes are described in <descfile>.
+ --changes-option=<opt> pass option <opt> to dpkg-genchanges.')
+ . "\n\n" . g_(
+'Options passed to dpkg-source:
+ -sn force Debian native source format.
+ -s[sAkurKUR] see dpkg-source for explanation.
+ -z, --compression-level=<level>
+ compression level to use for source.
+ -Z, --compression=<compressor>
+ compression to use for source (gz|xz|bzip2|lzma).
+ -i, --diff-ignore[=<regex>] ignore diffs of files matching <regex>.
+ -I, --tar-ignore[=<pattern>]
+ filter out files when building tarballs.
+ --source-option=<opt> pass option <opt> to dpkg-source.
+'), $Dpkg::PROGNAME;
+}
+
+my $admindir;
+my @debian_rules = ('debian/rules');
+my @rootcommand = ();
+my $signbackend;
+my $signcommand;
+my $preclean = 1;
+my $postclean = 0;
+my $sanitize_env = 0;
+my $parallel;
+my $parallel_force = 0;
+my $checkbuilddep = 1;
+my $check_builtin_builddep = 1;
+my @source_opts;
+my $check_command = $ENV{DEB_CHECK_COMMAND};
+my @check_opts;
+my $signpause;
+my $signkeyfile = $ENV{DEB_SIGN_KEYFILE};
+my $signkeyid = $ENV{DEB_SIGN_KEYID};
+my $signforce = 0;
+my $signreleased = 1;
+my $signsource = 1;
+my $signbuildinfo = 1;
+my $signchanges = 1;
+my $buildtarget = 'build';
+my $binarytarget = 'binary';
+my $host_arch = '';
+my $host_type = '';
+my $target_arch = '';
+my $target_type = '';
+my @build_profiles = ();
+my $rrr_override;
+my @call_target = ();
+my $call_target_as_root = 0;
+my $since;
+my $maint;
+my $changedby;
+my $desc;
+my $buildinfo_file;
+my @buildinfo_opts;
+my $changes_file;
+my @changes_opts;
+my %target_legacy_root = map { $_ => 1 } qw(
+ clean binary binary-arch binary-indep
+);
+my %target_official = map { $_ => 1 } qw(
+ clean build build-arch build-indep binary binary-arch binary-indep
+);
+my @hook_names = qw(
+ init preclean source build binary buildinfo changes postclean check sign done
+);
+my %hook;
+$hook{$_} = undef foreach @hook_names;
+
+
+my $conf = Dpkg::Conf->new();
+$conf->load_config('buildpackage.conf');
+
+# Inject config options for command-line parser.
+unshift @ARGV, @{$conf};
+
+my $build_opts = Dpkg::BuildOptions->new();
+
+if ($build_opts->has('nocheck')) {
+ $check_command = undef;
+} elsif (not find_command($check_command)) {
+ $check_command = undef;
+}
+
+while (@ARGV) {
+ $_ = shift @ARGV;
+
+ if (/^(?:--help|-\?)$/) {
+ usage;
+ exit 0;
+ } elsif (/^--version$/) {
+ showversion;
+ exit 0;
+ } elsif (/^--admindir$/) {
+ $admindir = shift @ARGV;
+ } elsif (/^--admindir=(.*)$/) {
+ $admindir = $1;
+ } elsif (/^--source-option=(.*)$/) {
+ push @source_opts, $1;
+ } elsif (/^--buildinfo-file=(.*)$/) {
+ $buildinfo_file = $1;
+ usageerr(g_('missing .buildinfo filename')) if not length $buildinfo_file;
+ } elsif (/^--buildinfo-option=(.*)$/) {
+ my $buildinfo_opt = $1;
+ if ($buildinfo_opt =~ m/^-O(.*)/) {
+ warning(g_('passing %s via %s is not supported; please use %s instead'),
+ '-O', '--buildinfo-option', '--buildinfo-file');
+ $buildinfo_file = $1;
+ } else {
+ push @buildinfo_opts, $buildinfo_opt;
+ }
+ } elsif (/^--changes-file=(.*)$/) {
+ $changes_file = $1;
+ usageerr(g_('missing .changes filename')) if not length $changes_file;
+ } elsif (/^--changes-option=(.*)$/) {
+ my $changes_opt = $1;
+ if ($changes_opt =~ m/^-O(.*)/) {
+ warning(g_('passing %s via %s is not supported; please use %s instead'),
+ '-O', '--changes-option', '--changes-file');
+ $changes_file = $1;
+ } else {
+ push @changes_opts, $changes_opt;
+ }
+ } elsif (/^--jobs(?:-try)?$/) {
+ $parallel = '';
+ $parallel_force = 0;
+ } elsif (/^(?:-[jJ]|--jobs(?:-try)?=)(\d*|auto)$/) {
+ $parallel = $1 || '';
+ $parallel_force = 0;
+ } elsif (/^--jobs-force(?:=(\d*|auto))?$/) {
+ $parallel = $1 || '';
+ $parallel_force = 1;
+ } elsif (/^(?:-r|--root-command=)(.*)$/) {
+ my $arg = $1;
+ @rootcommand = split ' ', $arg;
+ } elsif (/^--check-command=(.*)$/) {
+ $check_command = $1;
+ } elsif (/^--check-option=(.*)$/) {
+ push @check_opts, $1;
+ } elsif (/^--hook-([^=]+)=(.*)$/) {
+ my ($hook_name, $hook_cmd) = ($1, $2);
+ usageerr(g_('unknown hook name %s'), $hook_name)
+ if not exists $hook{$hook_name};
+ usageerr(g_('missing hook %s command'), $hook_name)
+ if not defined $hook_cmd;
+ $hook{$hook_name} = $hook_cmd;
+ } elsif (/^(--buildinfo-id)=.*$/) {
+ # Deprecated option
+ warning(g_('%s is deprecated; it is without effect'), $1);
+ } elsif (/^--sign-backend=(.*)$/) {
+ $signbackend = $1;
+ } elsif (/^(?:-p|--sign-command=)(.*)$/) {
+ $signcommand = $1;
+ } elsif (/^--sign-keyfile=(.*)$/) {
+ $signkeyfile = $1;
+ } elsif (/^(?:-k|--sign-keyid=|--sign-key=)(.*)$/) {
+ $signkeyid = $1;
+ } elsif (/^--(no-)?check-builddeps$/) {
+ $checkbuilddep = !(defined $1 and $1 eq 'no-');
+ } elsif (/^-([dD])$/) {
+ $checkbuilddep = ($1 eq 'D');
+ } elsif (/^--ignore-builtin-builddeps$/) {
+ $check_builtin_builddep = 0;
+ } elsif (/^-s(gpg|pgp)$/) {
+ # Deprecated option
+ warning(g_('-s%s is deprecated; always using gpg style interface'), $1);
+ } elsif (/^--force-sign$/) {
+ $signforce = 1;
+ } elsif (/^--no-sign$/) {
+ $signforce = 0;
+ $signsource = 0;
+ $signbuildinfo = 0;
+ $signchanges = 0;
+ } elsif (/^-us$/ or /^--unsigned-source$/) {
+ $signsource = 0;
+ } elsif (/^-ui$/ or /^--unsigned-buildinfo$/) {
+ $signbuildinfo = 0;
+ } elsif (/^-uc$/ or /^--unsigned-changes$/) {
+ $signbuildinfo = 0;
+ $signchanges = 0;
+ } elsif (/^-ap$/ or /^--sign-pausa$/) {
+ $signpause = 1;
+ } elsif (/^-a$/ or /^--host-arch$/) {
+ $host_arch = shift;
+ } elsif (/^-a(.*)$/ or /^--host-arch=(.*)$/) {
+ $host_arch = $1;
+ } elsif (/^-P(.*)$/ or /^--build-profiles=(.*)$/) {
+ my $arg = $1;
+ @build_profiles = split /,/, $arg;
+ } elsif (/^-s[iad]$/) {
+ push @changes_opts, $_;
+ } elsif (/^--(?:compression-level|compression)=.+$/) {
+ push @source_opts, $_;
+ } elsif (/^--(?:diff-ignore|tar-ignore)(?:=.+)?$/) {
+ push @source_opts, $_;
+ } elsif (/^-(?:s[nsAkurKUR]|[zZ].*|i.*|I.*)$/) {
+ push @source_opts, $_; # passed to dpkg-source
+ } elsif (/^-tc$/ or /^--post-clean$/) {
+ $postclean = 1;
+ } elsif (/^--no-post-clean$/) {
+ $postclean = 0;
+ } elsif (/^--sanitize-env$/) {
+ $sanitize_env = 1;
+ } elsif (/^-t$/ or /^--host-type$/) {
+ $host_type = shift; # Order DOES matter!
+ } elsif (/^-t(.*)$/ or /^--host-type=(.*)$/) {
+ $host_type = $1; # Order DOES matter!
+ } elsif (/^--target-arch$/) {
+ $target_arch = shift;
+ } elsif (/^--target-arch=(.*)$/) {
+ $target_arch = $1;
+ } elsif (/^--target-type$/) {
+ $target_type = shift;
+ } elsif (/^--target-type=(.*)$/) {
+ $target_type = $1;
+ } elsif (/^(?:--target|--rules-target|-T)$/) {
+ push @call_target, split /,/, shift @ARGV;
+ } elsif (/^(?:--target=|--rules-target=|-T)(.+)$/) {
+ my $arg = $1;
+ push @call_target, split /,/, $arg;
+ } elsif (/^--rules-requires-root$/) {
+ $rrr_override = 'binary-targets';
+ } elsif (/^--as-root$/) {
+ $call_target_as_root = 1;
+ } elsif (/^--pre-clean$/) {
+ $preclean = 1;
+ } elsif (/^-nc$/ or /^--no-pre-clean$/) {
+ $preclean = 0;
+ } elsif (/^--build=(.*)$/) {
+ set_build_type_from_options($1, $_);
+ } elsif (/^-b$/) {
+ set_build_type(BUILD_BINARY, $_);
+ } elsif (/^-B$/) {
+ set_build_type(BUILD_ARCH_DEP, $_);
+ } elsif (/^-A$/) {
+ set_build_type(BUILD_ARCH_INDEP, $_);
+ } elsif (/^-S$/) {
+ set_build_type(BUILD_SOURCE, $_);
+ } elsif (/^-G$/) {
+ set_build_type(BUILD_SOURCE | BUILD_ARCH_DEP, $_);
+ } elsif (/^-g$/) {
+ set_build_type(BUILD_SOURCE | BUILD_ARCH_INDEP, $_);
+ } elsif (/^-F$/) {
+ set_build_type(BUILD_FULL, $_);
+ } elsif (/^-v(.*)$/) {
+ $since = $1;
+ } elsif (/^-m(.*)$/ or /^--(?:source|build)-by=(.*)$/) {
+ $maint = $1;
+ } elsif (/^-e(.*)$/ or /^--(?:changed|release)-by=(.*)$/) {
+ $changedby = $1;
+ } elsif (/^-C(.*)$/) {
+ $desc = $1;
+ } elsif (m/^-[EW]$/) {
+ # Deprecated option
+ warning(g_('%s is deprecated; it is without effect'), $_);
+ } elsif (/^-R(.*)$/ or /^--rules-file=(.*)$/) {
+ my $arg = $1;
+ @debian_rules = split ' ', $arg;
+ } else {
+ usageerr(g_('unknown option or argument %s'), $_);
+ }
+}
+
+if (@call_target) {
+ my $targets = join ',', @call_target;
+ set_build_type_from_targets($targets, '--rules-target', nocheck => 1);
+}
+
+if (build_has_all(BUILD_BINARY)) {
+ $buildtarget = 'build';
+ $binarytarget = 'binary';
+} elsif (build_has_any(BUILD_ARCH_DEP)) {
+ $buildtarget = 'build-arch';
+ $binarytarget = 'binary-arch';
+} elsif (build_has_any(BUILD_ARCH_INDEP)) {
+ $buildtarget = 'build-indep';
+ $binarytarget = 'binary-indep';
+}
+
+if (not $preclean) {
+ # -nc without -b/-B/-A/-S/-F implies -b
+ set_build_type(BUILD_BINARY) if build_has_any(BUILD_DEFAULT);
+ # -nc with -S implies no dependency checks
+ $checkbuilddep = 0 if build_is(BUILD_SOURCE);
+}
+
+if ($call_target_as_root and @call_target == 0) {
+ error(g_('option %s is only meaningful with option %s'),
+ '--as-root', '--rules-target');
+}
+
+if ($check_command and not find_command($check_command)) {
+ error(g_("check-command '%s' not found"), $check_command);
+}
+
+if ($signcommand and not find_command($signcommand)) {
+ error(g_("sign-command '%s' not found"), $signcommand);
+}
+
+# Default to auto if none of parallel=N, -J or -j have been specified.
+if (not defined $parallel and not $build_opts->has('parallel')) {
+ $parallel = 'auto';
+}
+
+if (defined $parallel) {
+ if ($parallel eq 'auto') {
+ # Most Unices.
+ $parallel = qx(getconf _NPROCESSORS_ONLN 2>/dev/null);
+ # Fallback for at least Irix.
+ $parallel = qx(getconf _NPROC_ONLN 2>/dev/null) if $?;
+ # Fallback to serial execution if cannot infer the number of online
+ # processors.
+ $parallel = '1' if $?;
+ chomp $parallel;
+ }
+ if ($parallel_force) {
+ $ENV{MAKEFLAGS} //= '';
+ $ENV{MAKEFLAGS} .= " -j$parallel";
+ }
+ $build_opts->set('parallel', $parallel);
+ $build_opts->export();
+}
+
+if ($build_opts->has('terse')) {
+ $ENV{MAKEFLAGS} //= '';
+ $ENV{MAKEFLAGS} .= ' --no-print-directory';
+}
+
+set_build_profiles(@build_profiles) if @build_profiles;
+
+my $changelog = changelog_parse();
+my $ctrl = Dpkg::Control::Info->new();
+
+# Check whether we are doing some kind of rootless build, and sanity check
+# the fields values.
+my %rules_requires_root = parse_rules_requires_root($ctrl->get_source());
+
+my $pkg = mustsetvar($changelog->{source}, g_('source package'));
+my $version = mustsetvar($changelog->{version}, g_('source version'));
+my $v = Dpkg::Version->new($version);
+my ($ok, $error) = version_check($v);
+error($error) unless $ok;
+
+my $sversion = $v->as_string(omit_epoch => 1);
+my $uversion = $v->version();
+
+my $distribution = mustsetvar($changelog->{distribution}, g_('source distribution'));
+
+my $maintainer;
+if ($changedby) {
+ $maintainer = $changedby;
+} elsif ($maint) {
+ $maintainer = $maint;
+} else {
+ $maintainer = mustsetvar($changelog->{maintainer}, g_('source changed by'));
+}
+
+# <https://reproducible-builds.org/specs/source-date-epoch/>
+$ENV{SOURCE_DATE_EPOCH} ||= $changelog->{timestamp} || time;
+
+my @arch_opts;
+push @arch_opts, ('--host-arch', $host_arch) if $host_arch;
+push @arch_opts, ('--host-type', $host_type) if $host_type;
+push @arch_opts, ('--target-arch', $target_arch) if $target_arch;
+push @arch_opts, ('--target-type', $target_type) if $target_type;
+
+open my $arch_env, '-|', 'dpkg-architecture', '-f', @arch_opts
+ or subprocerr('dpkg-architecture');
+while (<$arch_env>) {
+ chomp;
+ my ($key, $value) = split /=/, $_, 2;
+ $ENV{$key} = $value;
+}
+close $arch_env or subprocerr('dpkg-architecture');
+
+my $arch;
+if (build_has_any(BUILD_ARCH_DEP)) {
+ $arch = mustsetvar($ENV{DEB_HOST_ARCH}, g_('host architecture'));
+} elsif (build_has_any(BUILD_ARCH_INDEP)) {
+ $arch = 'all';
+} elsif (build_has_any(BUILD_SOURCE)) {
+ $arch = 'source';
+}
+
+my $pv = "${pkg}_$sversion";
+my $pva = "${pkg}_${sversion}_$arch";
+
+my $signkeytype;
+my $signkeyhandle;
+if (defined $signkeyfile) {
+ $signkeytype = 'keyfile';
+ $signkeyhandle = bsd_glob($signkeyfile, GLOB_TILDE | GLOB_NOCHECK);
+} elsif (defined $signkeyid) {
+ $signkeytype = 'autoid';
+ $signkeyhandle = $signkeyid;
+} else {
+ $signkeytype = 'userid';
+ $signkeyhandle = $maintainer;
+}
+my $signkey = Dpkg::OpenPGP::KeyHandle->new(
+ type => $signkeytype,
+ handle => $signkeyhandle,
+);
+signkey_validate();
+
+my $openpgp = Dpkg::OpenPGP->new(
+ backend => $signbackend // 'auto',
+ cmd => $signcommand // 'auto',
+ needs => {
+ keystore => $signkey->needs_keystore(),
+ },
+);
+
+if (not $openpgp->can_use_secrets($signkey)) {
+ $signsource = 0;
+ $signbuildinfo = 0;
+ $signchanges = 0;
+} elsif ($signforce) {
+ $signsource = 1;
+ $signbuildinfo = 1;
+ $signchanges = 1;
+} elsif (($signsource or $signbuildinfo or $signchanges) and
+ $distribution eq 'UNRELEASED') {
+ $signreleased = 0;
+ $signsource = 0;
+ $signbuildinfo = 0;
+ $signchanges = 0;
+}
+
+if ($signsource && build_has_none(BUILD_SOURCE)) {
+ $signsource = 0;
+}
+
+# Sanitize build environment.
+if ($sanitize_env) {
+ run_vendor_hook('sanitize-environment');
+}
+
+#
+# Preparation of environment stops here
+#
+
+run_hook('init', 1);
+
+if (not -x 'debian/rules') {
+ warning(g_('debian/rules is not executable; fixing that'));
+ chmod(0755, 'debian/rules'); # No checks of failures, non fatal
+}
+
+if (scalar @call_target == 0) {
+ run_cmd('dpkg-source', @source_opts, '--before-build', '.');
+}
+
+if ($checkbuilddep) {
+ my @checkbuilddep_opts;
+
+ push @checkbuilddep_opts, '-A' if build_has_none(BUILD_ARCH_DEP);
+ push @checkbuilddep_opts, '-B' if build_has_none(BUILD_ARCH_INDEP);
+ push @checkbuilddep_opts, '-I' if not $check_builtin_builddep;
+ push @checkbuilddep_opts, "--admindir=$admindir" if $admindir;
+
+ system('dpkg-checkbuilddeps', @checkbuilddep_opts);
+ if (not WIFEXITED($?)) {
+ subprocerr('dpkg-checkbuilddeps');
+ } elsif (WEXITSTATUS($?)) {
+ warning(g_('build dependencies/conflicts unsatisfied; aborting'));
+ warning(g_('(Use -d flag to override.)'));
+ exit 3;
+ }
+}
+
+foreach my $call_target (@call_target) {
+ run_rules_cond_root($call_target);
+}
+exit 0 if scalar @call_target;
+
+run_hook('preclean', $preclean);
+
+if ($preclean) {
+ run_rules_cond_root('clean');
+}
+
+run_hook('source', build_has_any(BUILD_SOURCE));
+
+if (build_has_any(BUILD_SOURCE)) {
+ warning(g_('building a source package without cleaning up as you asked; ' .
+ 'it might contain undesired files')) if not $preclean;
+ run_cmd('dpkg-source', @source_opts, '-b', '.');
+}
+
+run_hook('build', build_has_any(BUILD_BINARY));
+
+my $build_types = get_build_options_from_type();
+
+if (build_has_any(BUILD_BINARY)) {
+ # XXX Use some heuristics to decide whether to use build-{arch,indep}
+ # targets. This is a temporary measure to not break too many packages
+ # on a flag day.
+ build_target_fallback($ctrl);
+
+ # If we are building rootless, there is no need to call the build target
+ # independently as non-root.
+ run_cmd(@debian_rules, $buildtarget) if rules_requires_root($binarytarget);
+ run_hook('binary', 1);
+ run_rules_cond_root($binarytarget);
+}
+
+run_hook('buildinfo', 1);
+
+$buildinfo_file //= "../$pva.buildinfo";
+
+push @buildinfo_opts, "--build=$build_types" if build_has_none(BUILD_DEFAULT);
+push @buildinfo_opts, "--admindir=$admindir" if $admindir;
+push @buildinfo_opts, "-O$buildinfo_file" if $buildinfo_file;
+
+run_cmd('dpkg-genbuildinfo', @buildinfo_opts);
+
+run_hook('changes', 1);
+
+$changes_file //= "../$pva.changes";
+
+push @changes_opts, "--build=$build_types" if build_has_none(BUILD_DEFAULT);
+push @changes_opts, "-m$maint" if defined $maint;
+push @changes_opts, "-e$changedby" if defined $changedby;
+push @changes_opts, "-v$since" if defined $since;
+push @changes_opts, "-C$desc" if defined $desc;
+push @changes_opts, "-O$changes_file";
+
+my $changes = Dpkg::Control->new(type => CTRL_FILE_CHANGES);
+
+run_cmd('dpkg-genchanges', @changes_opts);
+$changes->load($changes_file);
+
+run_hook('postclean', $postclean);
+
+if ($postclean) {
+ run_rules_cond_root('clean');
+}
+
+run_cmd('dpkg-source', @source_opts, '--after-build', '.');
+
+info(describe_build($changes->{'Files'}));
+
+run_hook('check', $check_command);
+
+if ($check_command) {
+ run_cmd($check_command, @check_opts, $changes_file);
+}
+
+if ($signpause && ($signsource || $signbuildinfo || $signchanges)) {
+ print g_("Press <enter> to start the signing process.\n");
+ getc();
+}
+
+run_hook('sign', $signsource || $signbuildinfo || $signchanges);
+
+if ($signsource) {
+ signfile("$pv.dsc");
+
+ # Recompute the checksums as the .dsc has changed now.
+ my $buildinfo = Dpkg::Control->new(type => CTRL_FILE_BUILDINFO);
+ $buildinfo->load($buildinfo_file);
+ my $checksums = Dpkg::Checksums->new();
+ $checksums->add_from_control($buildinfo);
+ $checksums->add_from_file("../$pv.dsc", update => 1, key => "$pv.dsc");
+ $checksums->export_to_control($buildinfo);
+ $buildinfo->save($buildinfo_file);
+}
+if ($signbuildinfo) {
+ signfile("$pva.buildinfo");
+}
+if ($signsource or $signbuildinfo) {
+ # Recompute the checksums as the .dsc and/or .buildinfo have changed.
+ my $checksums = Dpkg::Checksums->new();
+ $checksums->add_from_control($changes);
+ $checksums->add_from_file("../$pv.dsc", update => 1, key => "$pv.dsc")
+ if $signsource;
+ $checksums->add_from_file($buildinfo_file, update => 1, key => "$pva.buildinfo");
+ $checksums->export_to_control($changes);
+ delete $changes->{'Checksums-Md5'};
+ update_files_field($changes, $checksums, "$pv.dsc")
+ if $signsource;
+ update_files_field($changes, $checksums, "$pva.buildinfo");
+ $changes->save($changes_file);
+}
+if ($signchanges) {
+ signfile("$pva.changes");
+}
+
+if (not $signreleased) {
+ warning(g_('not signing UNRELEASED build; use --force-sign to override'));
+}
+
+run_hook('done', 1);
+
+sub mustsetvar {
+ my ($var, $text) = @_;
+
+ error(g_('unable to determine %s'), $text)
+ unless defined($var);
+
+ info("$text $var");
+ return $var;
+}
+
+sub setup_rootcommand {
+ if ($< == 0) {
+ warning(g_('using a gain-root-command while being root')) if @rootcommand;
+ } else {
+ push @rootcommand, 'fakeroot' unless @rootcommand;
+ }
+
+ if (@rootcommand and not find_command($rootcommand[0])) {
+ if ($rootcommand[0] eq 'fakeroot' and $< != 0) {
+ error(g_("fakeroot not found, either install the fakeroot\n" .
+ 'package, specify a command with the -r option, ' .
+ 'or run this as root'));
+ } else {
+ error(g_("gain-root-command '%s' not found"), $rootcommand[0]);
+ }
+ }
+}
+
+sub parse_rules_requires_root {
+ my $ctrl = shift;
+
+ my %rrr;
+ my $rrr;
+ my $keywords_base;
+ my $keywords_impl;
+
+ $rrr = $rrr_override // $ctrl->{'Rules-Requires-Root'} // 'binary-targets';
+
+ foreach my $keyword (split ' ', $rrr) {
+ if ($keyword =~ m{/}) {
+ if ($keyword =~ m{^dpkg/target/(.*)$}p and $target_official{$1}) {
+ error(g_('disallowed target in %s field keyword "%s"'),
+ 'Rules-Requires-Root', $keyword);
+ } elsif ($keyword ne 'dpkg/target-subcommand') {
+ error(g_('%s field keyword "%s" is unknown in dpkg namespace'),
+ 'Rules-Requires-Root', $keyword);
+ }
+ $keywords_impl++;
+ } else {
+ if ($keyword ne lc $keyword and
+ (lc $keyword eq 'no' or lc $keyword eq 'binary-targets')) {
+ error(g_('%s field keyword "%s" is uppercase; use "%s" instead'),
+ 'Rules-Requires-Root', $keyword, lc $keyword);
+ } elsif (lc $keyword eq 'yes') {
+ error(g_('%s field keyword "%s" is invalid; use "%s" instead'),
+ 'Rules-Requires-Root', $keyword, 'binary-targets');
+ } elsif ($keyword ne 'no' and $keyword ne 'binary-targets') {
+ warning(g_('%s field keyword "%s" is unknown'),
+ 'Rules-Requires-Root', $keyword);
+ }
+ $keywords_base++;
+ }
+
+ if ($rrr{$keyword}++) {
+ error(g_('field %s contains duplicate keyword "%s"'),
+ 'Rules-Requires-Root', $keyword);
+ }
+ }
+
+ if ($call_target_as_root or not exists $rrr{no}) {
+ setup_rootcommand();
+ }
+
+ # Notify the children we do support R³.
+ $ENV{DEB_RULES_REQUIRES_ROOT} = join ' ', sort keys %rrr;
+
+ if ($keywords_base > 1 or $keywords_base and $keywords_impl) {
+ error(g_('%s field contains both global and implementation specific keywords'),
+ 'Rules-Requires-Root');
+ } elsif ($keywords_impl) {
+ # Set only on <implementations-keywords>.
+ $ENV{DEB_GAIN_ROOT_CMD} = join ' ', @rootcommand;
+ } else {
+ # We should not provide the variable otherwise.
+ delete $ENV{DEB_GAIN_ROOT_CMD};
+ }
+
+ return %rrr;
+}
+
+sub run_cmd {
+ printcmd(@_);
+ system @_ and subprocerr("@_");
+}
+
+sub rules_requires_root {
+ my $target = shift;
+
+ return 1 if $call_target_as_root;
+ return 1 if $rules_requires_root{"dpkg/target/$target"};
+ return 1 if $rules_requires_root{'binary-targets'} and $target_legacy_root{$target};
+ return 0;
+}
+
+sub run_rules_cond_root {
+ my $target = shift;
+
+ my @cmd;
+ push @cmd, @rootcommand if rules_requires_root($target);
+ push @cmd, @debian_rules, $target;
+
+ run_cmd(@cmd);
+}
+
+sub run_hook {
+ my ($name, $enabled) = @_;
+ my $cmd = $hook{$name};
+
+ return if not $cmd;
+
+ info("running hook $name");
+
+ my %hook_vars = (
+ '%' => '%',
+ 'a' => $enabled ? 1 : 0,
+ 'p' => $pkg,
+ 'v' => $version,
+ 's' => $sversion,
+ 'u' => $uversion,
+ );
+
+ my $subst_hook_var = sub {
+ my $var = shift;
+
+ if (exists $hook_vars{$var}) {
+ return $hook_vars{$var};
+ } else {
+ warning(g_('unknown %% substitution in hook: %%%s'), $var);
+ return "\%$var";
+ }
+ };
+
+ $cmd =~ s/\%(.)/$subst_hook_var->($1)/eg;
+
+ run_cmd($cmd);
+}
+
+sub update_files_field {
+ my ($ctrl, $checksums, $filename) = @_;
+
+ my $md5sum_regex = checksums_get_property('md5', 'regex');
+ my $md5sum = $checksums->get_checksum($filename, 'md5');
+ my $size = $checksums->get_size($filename);
+ my $file_regex = qr/$md5sum_regex\s+\d+\s+(\S+\s+\S+\s+\Q$filename\E)/;
+
+ $ctrl->{'Files'} =~ s/^$file_regex$/$md5sum $size $1/m;
+}
+
+sub signkey_validate {
+ return unless $signkey->type eq 'keyid';
+
+ if (length $signkey->handle <= 8) {
+ error(g_('short OpenPGP key IDs are broken; ' .
+ 'please use key fingerprints in %s or %s instead'),
+ '-k', 'DEB_SIGN_KEYID');
+ } elsif (length $signkey->handle <= 16) {
+ warning(g_('long OpenPGP key IDs are strongly discouraged; ' .
+ 'please use key fingerprints in %s or %s instead'),
+ '-k', 'DEB_SIGN_KEYID');
+ }
+}
+
+sub signfile {
+ my $file = shift;
+
+ printcmd("signfile $file");
+
+ my $signdir = tempdir('dpkg-sign.XXXXXXXX', CLEANUP => 1);
+ my $signfile = "$signdir/$file";
+
+ # Make sure the file to sign ends with a newline.
+ copy("../$file", $signfile);
+ open my $signfh, '>>', $signfile or syserr(g_('cannot open %s'), $signfile);
+ print { $signfh } "\n";
+ close $signfh or syserr(g_('cannot close %s'), $signfile);
+
+ my $status = $openpgp->inline_sign($signfile, "$signfile.asc", $signkey);
+ if ($status == OPENPGP_OK) {
+ move("$signfile.asc", "../$file")
+ or syserror(g_('cannot move %s to %s'), "$signfile.asc", "../$file");
+ } else {
+ error(g_('failed to sign %s file: %s'), $file,
+ openpgp_errorcode_to_string($status));
+ }
+
+ return $status
+}
+
+sub fileomitted {
+ my ($files, $regex) = @_;
+
+ return $files !~ m/$regex$/m
+}
+
+sub describe_build {
+ my $files = shift;
+ my $ext = compression_get_file_extension_regex();
+
+ if (fileomitted($files, qr/\.deb/)) {
+ # source-only upload
+ if (fileomitted($files, qr/\.diff\.$ext/) and
+ fileomitted($files, qr/\.debian\.tar\.$ext/)) {
+ return g_('source-only upload: Debian-native package');
+ } elsif (fileomitted($files, qr/\.orig\.tar\.$ext/)) {
+ return g_('source-only, diff-only upload (original source NOT included)');
+ } else {
+ return g_('source-only upload (original source is included)');
+ }
+ } elsif (fileomitted($files, qr/\.dsc/)) {
+ return g_('binary-only upload (no source included)');
+ } elsif (fileomitted($files, qr/\.diff\.$ext/) and
+ fileomitted($files, qr/\.debian\.tar\.$ext/)) {
+ return g_('full upload; Debian-native package (full source is included)');
+ } elsif (fileomitted($files, qr/\.orig\.tar\.$ext/)) {
+ return g_('binary and diff upload (original source NOT included)');
+ } else {
+ return g_('full upload (original source is included)');
+ }
+}
+
+sub build_target_fallback {
+ my $ctrl = shift;
+
+ # If we are building rootless, there is no need to call the build target
+ # independently as non-root.
+ return if not rules_requires_root($binarytarget);
+
+ return if $buildtarget eq 'build';
+ return if scalar @debian_rules != 1;
+
+ # Check if we are building both arch:all and arch:any packages, in which
+ # case we now require working build-indep and build-arch targets.
+ my $pkg_arch = 0;
+
+ foreach my $bin ($ctrl->get_packages()) {
+ if ($bin->{Architecture} eq 'all') {
+ $pkg_arch |= BUILD_ARCH_INDEP;
+ } else {
+ $pkg_arch |= BUILD_ARCH_DEP;
+ }
+ }
+
+ return if $pkg_arch == BUILD_BINARY;
+
+ # Check if the build-{arch,indep} targets are supported. If not, fallback
+ # to build.
+ my $pid = spawn(exec => [ $Dpkg::PROGMAKE, '-f', @debian_rules, '-qn', $buildtarget ],
+ from_file => '/dev/null', to_file => '/dev/null',
+ error_to_file => '/dev/null');
+ my $cmdline = "make -f @debian_rules -qn $buildtarget";
+ wait_child($pid, nocheck => 1, cmdline => $cmdline);
+ my $exitcode = WEXITSTATUS($?);
+ subprocerr($cmdline) unless WIFEXITED($?);
+ if ($exitcode == 2) {
+ warning(g_("%s must be updated to support the 'build-arch' and " .
+ "'build-indep' targets (at least '%s' seems to be " .
+ 'missing)'), "@debian_rules", $buildtarget);
+ $buildtarget = 'build';
+ }
+}
diff --git a/scripts/dpkg-checkbuilddeps.pl b/scripts/dpkg-checkbuilddeps.pl
new file mode 100755
index 0000000..83d7e79
--- /dev/null
+++ b/scripts/dpkg-checkbuilddeps.pl
@@ -0,0 +1,223 @@
+#!/usr/bin/perl
+#
+# dpkg-checkbuilddeps
+#
+# Copyright © 2001 Joey Hess <joeyh@debian.org>
+# Copyright © 2006-2009, 2011-2015 Guillem Jover <guillem@debian.org>
+# Copyright © 2007-2011 Raphael Hertzog <hertzog@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use Getopt::Long qw(:config posix_default bundling_values no_ignorecase);
+
+use Dpkg ();
+use Dpkg::Gettext;
+use Dpkg::ErrorHandling;
+use Dpkg::Arch qw(get_host_arch);
+use Dpkg::Vendor qw(run_vendor_hook);
+use Dpkg::BuildProfiles qw(get_build_profiles set_build_profiles);
+use Dpkg::Deps;
+use Dpkg::Control::Info;
+
+textdomain('dpkg-dev');
+
+sub version()
+{
+ printf g_("Debian %s version %s.\n"), $Dpkg::PROGNAME, $Dpkg::PROGVERSION;
+}
+
+sub usage {
+ printf g_(
+'Usage: %s [<option>...] [<control-file>]')
+ . "\n\n" . g_(
+'Options:
+ -A ignore Build-Depends-Arch and Build-Conflicts-Arch.
+ -B ignore Build-Depends-Indep and Build-Conflicts-Indep.
+ -I ignore built-in build dependencies and conflicts.
+ -d build-deps use given string as build dependencies instead of
+ retrieving them from control file
+ -c build-conf use given string for build conflicts instead of
+ retrieving them from control file
+ -a arch assume given host architecture
+ -P profiles assume given build profiles (comma-separated list)
+ --admindir=<directory>
+ change the administrative directory.
+ -?, --help show this help message.
+ --version show the version.')
+ . "\n\n" . g_(
+'<control-file> is the control file to process (default: debian/control).')
+ . "\n", $Dpkg::PROGNAME;
+}
+
+my $ignore_bd_arch = 0;
+my $ignore_bd_indep = 0;
+my $ignore_bd_builtin = 0;
+my ($bd_value, $bc_value);
+my $bp_value;
+my $host_arch = get_host_arch();
+my $admindir = $Dpkg::ADMINDIR;
+my @options_spec = (
+ 'help|?' => sub { usage(); exit(0); },
+ 'version' => sub { version(); exit 0; },
+ 'A' => \$ignore_bd_arch,
+ 'B' => \$ignore_bd_indep,
+ 'I' => \$ignore_bd_builtin,
+ 'd=s' => \$bd_value,
+ 'c=s' => \$bc_value,
+ 'a=s' => \$host_arch,
+ 'P=s' => \$bp_value,
+ 'admindir=s' => \$admindir,
+);
+
+{
+ local $SIG{__WARN__} = sub { usageerr($_[0]) };
+ GetOptions(@options_spec);
+}
+
+# Update currently active build profiles.
+set_build_profiles(split(/,/, $bp_value)) if ($bp_value);
+my @build_profiles = get_build_profiles();
+
+my $controlfile = shift // 'debian/control';
+
+my $control = Dpkg::Control::Info->new($controlfile);
+my $fields = $control->get_source();
+
+my $facts = parse_status("$admindir/status");
+
+unless (defined($bd_value) or defined($bc_value)) {
+ my @bd_list;
+ push @bd_list, run_vendor_hook('builtin-build-depends')
+ if not $ignore_bd_builtin;
+ push @bd_list, $fields->{'Build-Depends'};
+ push @bd_list, $fields->{'Build-Depends-Arch'} if not $ignore_bd_arch;
+ push @bd_list, $fields->{'Build-Depends-Indep'} if not $ignore_bd_indep;
+ $bd_value = deps_concat(@bd_list);
+
+ my @bc_list;
+ push @bc_list, run_vendor_hook('builtin-build-conflicts')
+ if not $ignore_bd_builtin;
+ push @bc_list, $fields->{'Build-Conflicts'};
+ push @bc_list, $fields->{'Build-Conflicts-Arch'} if not $ignore_bd_arch;
+ push @bc_list, $fields->{'Build-Conflicts-Indep'} if not $ignore_bd_indep;
+ $bc_value = deps_concat(@bc_list);
+}
+my (@unmet, @conflicts);
+
+if ($bd_value) {
+ my $dep = deps_parse($bd_value, reduce_restrictions => 1,
+ build_dep => 1, build_profiles => \@build_profiles,
+ host_arch => $host_arch);
+ error(g_('cannot parse %s field'),
+ 'Build-Depends/Build-Depends-Arch/Build-Depends-Indep')
+ unless defined $dep;
+ push @unmet, build_depends($dep, $facts);
+}
+if ($bc_value) {
+ my $dep = deps_parse($bc_value, reduce_restrictions => 1, union => 1,
+ build_dep => 1, build_profiles => \@build_profiles,
+ host_arch => $host_arch);
+ error(g_('cannot parse %s field'),
+ 'Build-Conflicts/Build-Conflicts-Arch/Build-Conflicts-Indep')
+ unless defined $dep;
+ push @conflicts, build_conflicts($dep, $facts);
+}
+
+if (@unmet) {
+ errormsg(g_('Unmet build dependencies: %s'),
+ join(' ', map { $_->output() } @unmet));
+}
+if (@conflicts) {
+ errormsg(g_('Build conflicts: %s'),
+ join(' ', map { $_->output() } @conflicts));
+}
+exit 1 if @unmet || @conflicts;
+
+# Silly little status file parser that returns a Dpkg::Deps::KnownFacts
+sub parse_status {
+ my $status = shift;
+
+ my $facts = Dpkg::Deps::KnownFacts->new();
+ local $/ = '';
+ open(my $status_fh, '<', $status)
+ or syserr(g_('cannot open %s'), $status);
+ while (<$status_fh>) {
+ next unless /^Status: .*ok installed$/m;
+
+ my ($package) = /^Package: (.*)$/m;
+ my ($version) = /^Version: (.*)$/m;
+ my ($arch) = /^Architecture: (.*)$/m;
+ my ($multiarch) = /^Multi-Arch: (.*)$/m;
+ $facts->add_installed_package($package, $version, $arch, $multiarch);
+
+ if (/^Provides: (.*)$/m) {
+ my $provides = deps_parse($1, reduce_arch => 1, virtual => 1, union => 1);
+ next if not defined $provides;
+ foreach (grep { $_->isa('Dpkg::Deps::Simple') }
+ $provides->get_deps())
+ {
+ $facts->add_provided_package($_->{package},
+ $_->{relation}, $_->{version},
+ $package);
+ }
+ }
+ }
+ close $status_fh;
+
+ return $facts;
+}
+
+# This function checks the build dependencies passed in as the first
+# parameter. If they are satisfied, returns false. If they are unsatisfied,
+# a list of the unsatisfied depends is returned.
+#
+# Additional parameters that must be passed:
+# * A reference to a hash of all "ok installed" the packages on the system,
+# with the hash key being the package name, and the value being the
+# installed version.
+# * A reference to a hash, where the keys are package names, and the
+# value is a true value iff some package installed on the system provides
+# that package (all installed packages provide themselves)
+#
+# Optionally, the architecture the package is to be built for can be passed
+# in as the 4th parameter. If not set, dpkg will be queried for the build
+# architecture.
+sub build_depends {
+ my ($dep_list, $facts) = @_;
+
+ $dep_list->simplify_deps($facts);
+ if ($dep_list->is_empty()) {
+ return ();
+ } else {
+ return $dep_list->get_deps();
+ }
+}
+
+# This function is exactly like build_depends(), except it
+# checks for build conflicts, and returns a list of the packages
+# that are installed and are conflicted with.
+sub build_conflicts {
+ my ($dep_list, $facts) = @_;
+
+ my @conflicts = ();
+ foreach my $dep ($dep_list->get_deps()) {
+ if ($dep->get_evaluation($facts)) {
+ push @conflicts, $dep;
+ }
+ }
+ return @conflicts;
+}
diff --git a/scripts/dpkg-distaddfile.pl b/scripts/dpkg-distaddfile.pl
new file mode 100755
index 0000000..e8418a2
--- /dev/null
+++ b/scripts/dpkg-distaddfile.pl
@@ -0,0 +1,97 @@
+#!/usr/bin/perl
+#
+# dpkg-distaddfile
+#
+# Copyright © 1996 Ian Jackson
+# Copyright © 2006-2008,2010,2012-2014 Guillem Jover <guillem@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use POSIX qw(:errno_h :fcntl_h);
+
+use Dpkg ();
+use Dpkg::Gettext;
+use Dpkg::ErrorHandling;
+use Dpkg::Lock;
+use Dpkg::Dist::Files;
+
+textdomain('dpkg-dev');
+
+my $fileslistfile = 'debian/files';
+
+
+sub version {
+ printf g_("Debian %s version %s.\n"), $Dpkg::PROGNAME, $Dpkg::PROGVERSION;
+
+ printf g_('
+This is free software; see the GNU General Public License version 2 or
+later for copying conditions. There is NO warranty.
+');
+}
+
+sub usage {
+ printf g_(
+'Usage: %s [<option>...] <filename> <section> <priority>
+
+Options:
+ -f<files-list-file> write files here instead of debian/files.
+ -?, --help show this help message.
+ --version show the version.
+'), $Dpkg::PROGNAME;
+}
+
+while (@ARGV && $ARGV[0] =~ m/^-/) {
+ $_ = shift @ARGV;
+ if (m/^-f/p) {
+ $fileslistfile = ${^POSTMATCH};
+ } elsif (m/^-(?:\?|-help)$/) {
+ usage();
+ exit(0);
+ } elsif (m/^--version$/) {
+ version();
+ exit(0);
+ } elsif (m/^--$/) {
+ last;
+ } else {
+ usageerr(g_("unknown option '%s'"), $_);
+ }
+}
+usageerr(g_('need exactly a filename, section and priority')) if @ARGV != 3;
+
+my ($filename, $section, $priority) = @ARGV;
+
+($filename =~ m/\s/ || $section =~ m/\s/ || $priority =~ m/\s/) &&
+ error(g_('filename, section and priority may contain no whitespace'));
+
+# Obtain a lock on debian/control to avoid simultaneous updates
+# of debian/files when parallel building is in use
+my $lockfh;
+my $lockfile = 'debian/control';
+sysopen($lockfh, $lockfile, O_WRONLY)
+ or syserr(g_('cannot write %s'), $lockfile);
+file_lock($lockfh, $lockfile);
+
+my $dist = Dpkg::Dist::Files->new();
+$dist->load($fileslistfile) if -e $fileslistfile;
+$dist->add_file($filename, $section, $priority);
+$dist->save("$fileslistfile.new");
+
+rename("$fileslistfile.new", $fileslistfile)
+ or syserr(g_('install new files list file'));
+
+# Release the lock
+close($lockfh) or syserr(g_('cannot close %s'), $lockfile);
diff --git a/scripts/dpkg-fsys-usrunmess.pl b/scripts/dpkg-fsys-usrunmess.pl
new file mode 100755
index 0000000..978f6f5
--- /dev/null
+++ b/scripts/dpkg-fsys-usrunmess.pl
@@ -0,0 +1,634 @@
+#!/usr/bin/perl
+#
+# dpkg-fsys-usrunmess - Undoes the merged-/usr-via-aliased-dirs mess
+#
+# Copyright © 2020-2021 Guillem Jover <guillem@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>
+
+use strict;
+use warnings;
+use feature qw(state);
+
+our ($PROGNAME) = $0 =~ m{(?:.*/)?([^/]*)};
+our $PROGVERSION = '1.21.x';
+our $ADMINDIR = '/var/lib/dpkg/';
+
+use POSIX;
+use File::Temp qw(tempdir);
+use File::Find;
+use Getopt::Long qw(:config posix_default bundling_values no_ignorecase);
+
+eval q{
+ pop @INC if $INC[-1] eq '.';
+ use File::FcntlLock;
+};
+if ($@) {
+ fatal('missing File::FcntlLock module; please install libfile-fcntllock-perl');
+}
+
+my $opt_noact = length $ENV{DPKG_USRUNMESS_NOACT} ? 1 : 0;
+my $opt_prompt = 0;
+my $opt_prevent = -1;
+
+my @options_spec = (
+ 'help|?' => sub { usage(); exit 0; },
+ 'version' => sub { version(); exit 0; },
+ 'dry-run|no-act|n' => \$opt_noact,
+ 'prompt|p' => \$opt_prompt,
+ 'prevention!' => \$opt_prevent,
+);
+
+{
+ local $SIG{__WARN__} = sub { usageerr($_[0]) };
+ GetOptions(@options_spec);
+}
+
+# Set a known umask.
+umask 0022;
+
+my @aliased_dirs;
+
+#
+# Scan all dirs under / and check whether any are aliased to /usr.
+#
+
+foreach my $path (glob '/*') {
+ debug("checking symlink? $path");
+ next unless -l $path;
+ debug("checking merged-usr symlink? $path");
+ my $symlink = readlink $path;
+ next unless $symlink eq "usr$path" or $symlink eq "/usr$path";
+ debug("merged-usr breakage, queueing $path");
+ push @aliased_dirs, $path;
+}
+
+if (@aliased_dirs == 0) {
+ print "System is fine, no aliased directories found, congrats!\n";
+ exit 0;
+}
+
+#
+# dpkg consistency checks
+#
+
+debug('checking dpkg database consistency');
+system(qw(dpkg --audit)) == 0
+ or fatal("cannot audit the dpkg database: $!");
+
+debug('checking whether dpkg has been interrupted');
+if (glob "$ADMINDIR/updates/*") {
+ fatal('dpkg is in an inconsistent state, please fix that');
+}
+
+$opt_prevent = prompt('Generate and install a regression prevention package')
+ if $opt_prevent < 0;
+
+if ($opt_prevent) {
+ debug('building regression prevention measures');
+ my $tmpdir = tempdir(CLEANUP => 1, TMPDIR => 1);
+ my $pkgdir = "$tmpdir/pkg";
+ my $pkgfile = "$tmpdir/dpkg-fsys-usrunmess.deb";
+
+ mkdir "$pkgdir" or fatal('cannot create temporary package directory');
+ mkdir "$pkgdir/DEBIAN" or fatal('cannot create temporary directory');
+ open my $ctrl_fh, '>', "$pkgdir/DEBIAN/control"
+ or fatal('cannot create temporary control file');
+ print { $ctrl_fh } <<"CTRL";
+Package: dpkg-fsys-usrunmess
+Version: $PROGVERSION
+Architecture: all
+Protected: yes
+Multi-Arch: foreign
+Section: admin
+Priority: optional
+Maintainer: Dpkg Developers <debian-dpkg\@lists.debian.org>
+Installed-Size: 5
+Conflicts: usrmerge
+Provides: usrmerge (= 25)
+Replaces: usrmerge
+Description: prevention measure to avoid unsuspected filesystem breakage
+ This package will prevent automatic migration of the filesystem to the
+ broken merge-/usr-via-aliased-dirs via the usrmerge package.
+ .
+ This package was generated and installed by the dpkg-fsys-usrunmess(8)
+ program.
+
+CTRL
+ close $ctrl_fh or fatal('cannot write temporary control file');
+
+ system(('dpkg-deb', '-b', $pkgdir, $pkgfile)) == 0
+ or fatal('cannot create prevention package');
+
+ if (not $opt_noact) {
+ system(('dpkg', '-GBi', $pkgfile)) == 0
+ or fatal('cannot install prevention package');
+ }
+} else {
+ print "Will not generate and install a regression prevention package.\n";
+}
+
+my $aliased_regex = '^(' . join('|', @aliased_dirs) . ')/';
+
+#
+# Get a list of all paths (including diversion) under the aliased dirs.
+#
+
+my @search_args;
+my %aliased_pathnames;
+foreach my $dir (@aliased_dirs) {
+ push @search_args, "$dir/*";
+}
+
+# We also need to track /usr/lib/modules to then be able to compute its
+# complement when looking for untracked kernel module files under aliased
+# dirs.
+my %usr_mod_pathnames;
+push @search_args, '/usr/lib/modules/*';
+
+open my $fh_paths, '-|', 'dpkg-query', '--search', @search_args
+ or fatal("cannot execute dpkg-query --search: $!");
+while (<$fh_paths>) {
+ if (m/^diversion by [^ ]+ from: .*$/) {
+ # Ignore.
+ } elsif (m/^diversion by [^ ]+ to: (.*)$/) {
+ if (-e $1) {
+ add_pathname($1, 'diverted pathname');
+ }
+ } elsif (m/^.*: (.*)$/) {
+ add_pathname($1, 'pathname');
+ }
+}
+close $fh_paths;
+
+#
+# Get a list of all update-alternatives under the aliased dirs.
+#
+
+my @selections = qx(update-alternatives --get-selections);
+foreach my $selection (@selections) {
+ my $name = (split(' ', $selection))[0];
+ my $slaves = 0;
+
+ open my $fh_alts, '-|', 'update-alternatives', '--query', $name
+ or fatal("cannot execute update-alternatives --query: $!");
+ while (<$fh_alts>) {
+ if (m/^\s*$/) {
+ last;
+ } elsif (m/^Link: (.*)$/) {
+ add_pathname($1, 'alternative link');
+ } elsif (m/^Slaves:\s*$/) {
+ $slaves = 1;
+ } elsif ($slaves and m/^\s\S+\s(\S+)$/) {
+ add_pathname($1, 'alternative slave');
+ } else {
+ $slaves = 0;
+ }
+ }
+ close $fh_alts;
+}
+
+#
+# Unfortunately we need to special case untracked kernel module files,
+# as these are required for system booting. To reduce potentially moving
+# undesired non-kernel module files (such as apache, python or ruby ones),
+# we only look for sub-dirs starting with a digit, which should match for
+# both Linux and kFreeBSD modules, and also for the modprobe.conf filename.
+#
+
+find({
+ no_chdir => 1,
+ wanted => sub {
+ my $path = $_;
+
+ if (exists $aliased_pathnames{$path}) {
+ # Ignore pathname already handled.
+ } elsif (exists $usr_mod_pathnames{"/usr$path"}) {
+ # Ignore pathname owned elsewhere.
+ } elsif ($path eq '/lib/modules' or
+ $path eq '/lib/modules/modprobe.conf' or
+ $path =~ m{^/lib/modules/[0-9]}) {
+ add_pathname($path, 'untracked modules');
+ }
+ },
+}, '/lib/modules');
+
+
+my $sroot = '/.usrunmess';
+my @relabel;
+
+#
+# Create a shadow hierarchy under / for the new unmessed dir:
+#
+
+debug("creating shadow dir = $sroot");
+mkdir $sroot
+ or sysfatal("cannot create directory $sroot");
+foreach my $dir (@aliased_dirs) {
+ debug("creating shadow dir = $sroot$dir");
+ mkdir "$sroot$dir"
+ or sysfatal("cannot create directory $sroot$dir");
+ chmod 0755, "$sroot$dir"
+ or sysfatal("cannot chmod 0755 $sroot$dir");
+ chown 0, 0, "$sroot$dir"
+ or sysfatal("cannot chown 0 0 $sroot$dir");
+ push @relabel, "$sroot$dir";
+}
+
+#
+# Populate the split dirs with hardlinks or copies of the objects from
+# their counter-parts in /usr.
+#
+
+foreach my $pathname (sort keys %aliased_pathnames) {
+ my (@meta) = lstat $pathname
+ or sysfatal("cannot lstat object $pathname for shadow hierarchy");
+
+ if (-d _) {
+ my $mode = $meta[2];
+ my ($uid, $gid) = @meta[4, 5];
+ my ($atime, $mtime, $ctime) = @meta[8, 9, 10];
+
+ debug("creating shadow dir = $sroot$pathname");
+ mkdir "$sroot$pathname"
+ or sysfatal("cannot mkdir $sroot$pathname");
+ chmod $mode, "$sroot$pathname"
+ or sysfatal("cannot chmod $mode $sroot$pathname");
+ chown $uid, $gid, "$sroot$pathname"
+ or sysfatal("cannot chown $uid $gid $sroot$pathname");
+ utime $atime, $mtime, "$sroot$pathname"
+ or sysfatal("cannot utime $atime $mtime $sroot$pathname");
+ push @relabel, "$sroot$pathname";
+ } elsif (-f _) {
+ debug("creating shadow file = $sroot$pathname");
+ copy("/usr$pathname", "$sroot$pathname");
+ } elsif (-l _) {
+ my $target = readlink "/usr$pathname";
+
+ debug("creating shadow symlink = $sroot$pathname");
+ symlink $target, "$sroot$pathname"
+ or sysfatal("cannot symlink $target to $sroot$pathname");
+ push @relabel, "$sroot$pathname";
+ } else {
+ fatal("unhandled object type for '$pathname'");
+ }
+}
+
+#
+# Prompt at the point of no return, if the user requested it.
+#
+
+if ($opt_prompt) {
+ if (!prompt("Shadow hierarchy created at '$sroot', ready to proceed")) {
+ print "Aborting migration, shadow hierarchy left in place.\n";
+ exit 0;
+ }
+}
+
+#
+# Mark all packages as half-configured so that we can force a mass
+# reconfiguration, to trigger any code in maintainer scripts that might
+# create files.
+#
+# XXX: We do this manually by editing the status file.
+# XXX: We do this for packages that might not have maintscripts, or might
+# not involve affected directories.
+#
+
+debug('marking all dpkg packages as half-configured');
+if (not $opt_noact) {
+ open my $fh_lock, '>', "$ADMINDIR/lock"
+ or sysfatal('cannot open dpkg database lock file');
+ my $fs = File::FcntlLock->new(l_type => F_WRLCK);
+ $fs->lock($fh_lock, F_SETLKW)
+ or sysfatal('cannot get a write lock on dpkg database');
+
+ my $file_db = "$ADMINDIR/status";
+ my $file_dbnew = $file_db . '.new';
+
+ open my $fh_dbnew, '>', $file_dbnew
+ or sysfatal('cannot open new dpkg database');
+ open my $fh_db, '<', $file_db
+ or sysfatal('cannot open dpkg database');
+ while (<$fh_db>) {
+ if (m/^Status: /) {
+ s/ installed$/ half-configured/;
+ }
+ print { $fh_dbnew } $_;
+ }
+ close $fh_db;
+ $fh_dbnew->flush() or sysfatal('cannot flush new dpkg database');
+ $fh_dbnew->sync() or sysfatal('cannot fsync new dpkg database');
+ close $fh_dbnew or sysfatal('cannot close new dpkg database');
+
+ rename $file_dbnew, $file_db
+ or sysfatal('cannot rename new dpkg database');
+}
+
+#
+# Replace things as quickly as possible:
+#
+
+foreach my $dir (@aliased_dirs) {
+ debug("making dir backup = $dir.aliased");
+ if (not $opt_noact) {
+ rename $dir, "$dir.aliased"
+ or sysfatal("cannot make backup directory $dir.aliased");
+ }
+
+ debug("renaming $sroot$dir to $dir");
+ if (not $opt_noact) {
+ rename "$sroot$dir", $dir
+ or sysfatal("cannot install fixed directory $dir");
+ }
+}
+
+mac_relabel();
+
+#
+# Cleanup backup directories.
+#
+
+foreach my $dir (@aliased_dirs) {
+ debug("removing backup = $dir.aliased");
+ if (not $opt_noact) {
+ unlink "$dir.aliased"
+ or sysfatal("cannot cleanup backup directory $dir.aliased");
+ }
+}
+
+my %deferred_dirnames;
+
+#
+# Cleanup moved objects.
+#
+
+foreach my $pathname (sort keys %aliased_pathnames) {
+ my (@meta) = lstat $pathname
+ or sysfatal("cannot lstat object $pathname for cleanup");
+
+ if (-d _) {
+ # Skip directories as this might be shared by a proper path under the
+ # aliased hierearchy. And so that we can remove them in reverse order.
+ debug("deferring merged dir cleanup = /usr$pathname");
+ $deferred_dirnames{"/usr$pathname"} = 1;
+ } else {
+ debug("cleaning up pathname = /usr$pathname");
+ next if $opt_noact;
+ unlink "/usr$pathname"
+ or sysfatal("cannot unlink object /usr$pathname");
+ }
+}
+
+#
+# Cleanup deferred directories.
+#
+
+debug("cleaning up shadow deferred dir = $sroot");
+my $arg_max = POSIX::sysconf(POSIX::_SC_ARG_MAX) // POSIX::_POSIX_ARG_MAX;
+my @batch_dirs;
+my $batch_size = 0;
+
+foreach my $dir (keys %deferred_dirnames) {
+ my $dir_size = length($dir) + 1;
+ if ($batch_size + $dir_size < $arg_max) {
+ $batch_size += length($dir) + 1;
+ push @batch_dirs, $dir;
+
+ } else {
+ next;
+ }
+ next if length $batch_size == 0;
+
+ open my $fh_dirs, '-|', 'dpkg-query', '--search', @batch_dirs
+ or fatal("cannot execute dpkg-query --search: $!");
+ while (<$fh_dirs>) {
+ if (m/^.*: (.*)$/) {
+ # If the directory is known by its aliased name, it should not be
+ # cleaned up.
+ if (exists $deferred_dirnames{$1}) {
+ delete $deferred_dirnames{$1};
+ }
+ }
+ }
+ close $fh_dirs;
+
+ @batch_dirs = ();
+ $batch_size = 0;
+}
+
+my @dirs_linger;
+
+if (not $opt_noact) {
+ foreach my $dirname (reverse sort keys %deferred_dirnames) {
+ next if rmdir $dirname;
+ warning("cannot remove shadow directory $dirname: $!");
+
+ push @dirs_linger, $dirname;
+ }
+}
+
+if (not $opt_noact) {
+ debug("cleaning up shadow root dir = $sroot");
+ rmdir $sroot
+ or warning("cannot remove shadow directory $sroot: $!");
+}
+
+#
+# Re-configure all packages, so that postinst maintscripts are executed.
+#
+
+my $policypath = '/usr/sbin/dpkg-fsys-usrunmess-policy-rc.d';
+
+debug('installing local policy-rc.d');
+if (not $opt_noact) {
+ open my $policyfh, '>', $policypath
+ or sysfatal("cannot create $policypath");
+ print { $policyfh } <<'POLICYRC';
+#!/bin/sh
+echo "$0: Denied action $2 for service $1"
+exit 101
+POLICYRC
+ close $policyfh or fatal("cannot write $policypath");
+
+ my @alt = (qw(/usr/sbin/policy-rc.d policy-rc.d), $policypath, qw(1000));
+ system(qw(update-alternatives --install), @alt) == 0
+ or fatal("cannot register $policypath");
+
+ system(qw(update-alternatives --set policy-rc.d), $policypath) == 0
+ or fatal("cannot select alternative $policypath");
+}
+
+debug('reconfiguring all packages');
+if (not $opt_noact) {
+ local $ENV{DEBIAN_FRONTEND} = 'noninteractive';
+ system(qw(dpkg --configure --pending)) == 0
+ or fatal("cannot reconfigure packages: $!");
+}
+
+debug('removing local policy-rc.d');
+if (not $opt_noact) {
+ system(qw(update-alternatives --remove policy-rc.d), $policypath) == 0
+ or fatal("cannot unregister $policypath: $!");
+
+ unlink $policypath
+ or warning("cannot remove $policypath");
+
+ # Restore the selections we saved initially.
+ open my $altfh, '|-', qw(update-alternatives --set-selections)
+ or fatal('cannot restore alternatives state');
+ print { $altfh } $_ foreach @selections;
+ close $altfh or fatal('cannot restore alternatives state');
+}
+
+print "\n";
+
+if (@dirs_linger) {
+ warning('lingering directories that could not be removed:');
+ foreach my $dir (@dirs_linger) {
+ warning(" $dir");
+ }
+}
+
+print "Done, hierarchy unmessed, congrats!\n";
+print "Rebooting now is very strongly advised.\n";
+
+print "(Note: you might need to run 'hash -r' in your shell.)\n";
+
+1;
+
+##
+## Functions
+##
+
+sub debug
+{
+ my $msg = shift;
+
+ print { *STDERR } "D: $msg\n";
+}
+
+sub warning
+{
+ my $msg = shift;
+
+ warn "warning: $msg\n";
+}
+
+sub fatal
+{
+ my $msg = shift;
+
+ die "error: $msg\n";
+}
+
+sub sysfatal
+{
+ my $msg = shift;
+
+ fatal("$msg: $!");
+}
+
+sub copy
+{
+ my ($src, $dst) = @_;
+
+ # Try to hardlink first.
+ return if link $src, $dst;
+
+ # If we are on different filesystems, try a copy.
+ if ($! == POSIX::EXDEV) {
+ # XXX: This will not preserve hardlinks, these would get restored
+ # after the next package upgrade.
+ system('cp', '-a', $src, $dst) == 0
+ or fatal("cannot copy file $src to $dst: $?");
+ } else {
+ sysfatal("cannot link file $src to $dst");
+ }
+}
+
+sub mac_relabel
+{
+ my $has_cmd = 0;
+ foreach my $path (split /:/, $ENV{PATH}) {
+ if (-x "$path/restorecon") {
+ $has_cmd = 1;
+ last;
+ }
+ }
+ return unless $has_cmd;
+
+ foreach my $pathname (@relabel) {
+ system('restorecon', $pathname) == 0
+ or fatal("cannot restore MAC context for $pathname: $?");
+ }
+}
+
+sub add_pathname
+{
+ my ($pathname, $origin) = @_;
+
+ if ($pathname =~ m{^/usr/lib/modules/}) {
+ debug("tracking $origin = $pathname");
+ $usr_mod_pathnames{$pathname} = 1;
+ } elsif ($pathname =~ m/$aliased_regex/) {
+ debug("adding $origin = $pathname");
+ $aliased_pathnames{$pathname} = 1;
+ }
+}
+
+sub prompt
+{
+ my $query = shift;
+
+ print "$query (y/N)? ";
+ my $reply = <STDIN>;
+ chomp $reply;
+
+ return 0 if $reply ne 'y' and $reply ne 'yes';
+ return 1;
+}
+
+sub version()
+{
+ printf "Debian %s version %s.\n", $PROGNAME, $PROGVERSION;
+}
+
+sub usage
+{
+ printf
+'Usage: %s [<option>...]'
+ . "\n\n" .
+'Options:
+ -p, --prompt prompt before the point of no return.
+ --prevention enable regression prevention package installation.
+ --no-prevention disable regression prevention package installation.
+ -n, --no-act just check and create the new structure, no switch.
+ --dry-run ditto.
+ -?, --help show this help message.
+ --version show the version.'
+ . "\n", $PROGNAME;
+}
+
+sub usageerr
+{
+ my $msg = shift;
+
+ state $printforhelp = 'Use --help for program usage information.';
+
+ $msg = sprintf $msg, @_ if @_;
+ warn "$PROGNAME: error: $msg\n";
+ warn "$printforhelp\n";
+ exit 2;
+}
diff --git a/scripts/dpkg-genbuildinfo.pl b/scripts/dpkg-genbuildinfo.pl
new file mode 100755
index 0000000..f26e396
--- /dev/null
+++ b/scripts/dpkg-genbuildinfo.pl
@@ -0,0 +1,595 @@
+#!/usr/bin/perl
+#
+# dpkg-genbuildinfo
+#
+# Copyright © 1996 Ian Jackson
+# Copyright © 2000,2001 Wichert Akkerman
+# Copyright © 2003-2013 Yann Dirson <dirson@debian.org>
+# Copyright © 2006-2016 Guillem Jover <guillem@debian.org>
+# Copyright © 2014 Niko Tyni <ntyni@debian.org>
+# Copyright © 2014-2015 Jérémy Bobbio <lunar@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use List::Util qw(any);
+use Cwd;
+use File::Basename;
+use File::Temp;
+use POSIX qw(:fcntl_h :locale_h strftime);
+
+use Dpkg ();
+use Dpkg::Gettext;
+use Dpkg::Checksums;
+use Dpkg::ErrorHandling;
+use Dpkg::IPC;
+use Dpkg::Path qw(find_command);
+use Dpkg::Arch qw(
+ get_build_arch
+ get_host_arch
+ debarch_eq debarch_to_gnutriplet
+);
+use Dpkg::BuildTypes;
+use Dpkg::BuildOptions;
+use Dpkg::BuildFlags;
+use Dpkg::BuildProfiles qw(get_build_profiles);
+use Dpkg::BuildInfo qw(get_build_env_allowed);
+use Dpkg::Control::Info;
+use Dpkg::Control::Fields;
+use Dpkg::Control;
+use Dpkg::Changelog::Parse;
+use Dpkg::Deps;
+use Dpkg::Dist::Files;
+use Dpkg::Lock;
+use Dpkg::Version;
+use Dpkg::Vendor qw(get_current_vendor run_vendor_hook);
+
+textdomain('dpkg-dev');
+
+my $controlfile = 'debian/control';
+my $changelogfile = 'debian/changelog';
+my $changelogformat;
+my $fileslistfile = 'debian/files';
+my $uploadfilesdir = '..';
+my $outputfile;
+my $stdout = 0;
+my $admindir = $Dpkg::ADMINDIR;
+my %use_feature = (
+ kernel => 0,
+ path => 0,
+);
+my @build_profiles = get_build_profiles();
+my $buildinfo_format = '1.0';
+my $buildinfo;
+
+my $checksums = Dpkg::Checksums->new();
+my %distbinaries;
+my %archadded;
+my @archvalues;
+
+sub get_build_date {
+ my $date;
+
+ setlocale(LC_TIME, 'C');
+ $date = strftime('%a, %d %b %Y %T %z', localtime);
+ setlocale(LC_TIME, '');
+
+ return $date;
+}
+
+# There is almost the same function in dpkg-checkbuilddeps, they probably
+# should be factored out.
+sub parse_status {
+ my $status = shift;
+
+ my $facts = Dpkg::Deps::KnownFacts->new();
+ my %depends;
+ my @essential_pkgs;
+
+ local $/ = '';
+ open my $status_fh, '<', $status or syserr(g_('cannot open %s'), $status);
+ while (<$status_fh>) {
+ next unless /^Status: .*ok installed$/m;
+
+ my ($package) = /^Package: (.*)$/m;
+ my ($version) = /^Version: (.*)$/m;
+ my ($arch) = /^Architecture: (.*)$/m;
+ my ($multiarch) = /^Multi-Arch: (.*)$/m;
+
+ $facts->add_installed_package($package, $version, $arch, $multiarch);
+
+ if (/^Essential: yes$/m) {
+ push @essential_pkgs, $package;
+ }
+
+ if (/^Provides: (.*)$/m) {
+ my $provides = deps_parse($1, reduce_arch => 1, union => 1);
+
+ next if not defined $provides;
+
+ deps_iterate($provides, sub {
+ my $dep = shift;
+ $facts->add_provided_package($dep->{package}, $dep->{relation},
+ $dep->{version}, $package);
+ });
+ }
+
+ foreach my $deptype (qw(Pre-Depends Depends)) {
+ next unless /^$deptype: (.*)$/m;
+
+ my $depends = $1;
+ foreach (split /,\s*/, $depends) {
+ push @{$depends{"$package:$arch"}}, $_;
+ }
+ }
+ }
+ close $status_fh;
+
+ return ($facts, \%depends, \@essential_pkgs);
+}
+
+sub append_deps {
+ my $pkgs = shift;
+
+ foreach my $dep_str (@_) {
+ next unless $dep_str;
+
+ my $deps = deps_parse($dep_str, reduce_restrictions => 1,
+ build_dep => 1,
+ build_profiles => \@build_profiles);
+
+ # We add every sub-dependencies as we cannot know which package in
+ # an OR dependency has been effectively used.
+ deps_iterate($deps, sub {
+ push @{$pkgs},
+ $_[0]->{package} . (defined $_[0]->{archqual} ? ':' . $_[0]->{archqual} : '');
+ 1
+ });
+ }
+}
+
+sub collect_installed_builddeps {
+ my $control = shift;
+
+ my ($facts, $depends, $essential_pkgs) = parse_status("$admindir/status");
+ my %seen_pkgs;
+ my @unprocessed_pkgs;
+
+ # Parse essential packages list.
+ append_deps(\@unprocessed_pkgs,
+ @{$essential_pkgs},
+ run_vendor_hook('builtin-build-depends'),
+ $control->get_source->{'Build-Depends'});
+
+ if (build_has_any(BUILD_ARCH_DEP)) {
+ append_deps(\@unprocessed_pkgs,
+ $control->get_source->{'Build-Depends-Arch'});
+ }
+
+ if (build_has_any(BUILD_ARCH_INDEP)) {
+ append_deps(\@unprocessed_pkgs,
+ $control->get_source->{'Build-Depends-Indep'});
+ }
+
+ my $installed_deps = Dpkg::Deps::AND->new();
+
+ while (my $pkg_name = shift @unprocessed_pkgs) {
+ next if $seen_pkgs{$pkg_name};
+ $seen_pkgs{$pkg_name} = 1;
+
+ my $required_architecture;
+ if ($pkg_name =~ /\A(.*):(.*)\z/) {
+ $pkg_name = $1;
+ my $arch = $2;
+ $required_architecture = $arch if $arch !~ /\A(?:all|any|native)\Z/
+ }
+ my $pkg;
+ my $qualified_pkg_name;
+ foreach my $installed_pkg (@{$facts->{pkg}->{$pkg_name}}) {
+ if (!defined $required_architecture ||
+ $required_architecture eq $installed_pkg->{architecture}) {
+ $pkg = $installed_pkg;
+ $qualified_pkg_name = $pkg_name . ':' . $installed_pkg->{architecture};
+ last;
+ }
+ }
+ if (defined $pkg) {
+ my $version = $pkg->{version};
+ my $architecture = $pkg->{architecture};
+ my $new_deps_str = defined $depends->{$qualified_pkg_name} ? deps_concat(@{$depends->{$qualified_pkg_name}}) : '';
+ my $new_deps = deps_parse($new_deps_str);
+ if (!defined $required_architecture) {
+ $installed_deps->add(Dpkg::Deps::Simple->new("$pkg_name (= $version)"));
+ } else {
+ $installed_deps->add(Dpkg::Deps::Simple->new("$qualified_pkg_name (= $version)"));
+
+ # Dependencies of foreign packages are also foreign packages
+ # (or Arch:all) so we need to qualify them as well. We figure
+ # out if the package is actually foreign by searching for an
+ # installed package of the right architecture.
+ deps_iterate($new_deps, sub {
+ my $dep = shift;
+ return unless defined $facts->{pkg}->{$dep->{package}};
+ $dep->{archqual} //= $architecture
+ if any { $_[0]->{architecture} eq $architecture }, @{$facts->{pkg}->{$dep->{package}}};
+ 1;
+ });
+ }
+
+ # We add every sub-dependencies as we cannot know which package
+ # in an OR dependency has been effectively used.
+ deps_iterate($new_deps, sub {
+ push @unprocessed_pkgs,
+ $_[0]->{package} . (defined $_[0]->{archqual} ? ':' . $_[0]->{archqual} : '');
+ 1
+ });
+ } elsif (defined $facts->{virtualpkg}->{$pkg_name}) {
+ # virtual package: we cannot know for sure which implementation
+ # is the one that has been used, so let's add them all...
+ foreach my $provided (@{$facts->{virtualpkg}->{$pkg_name}}) {
+ push @unprocessed_pkgs, $provided->{provider};
+ }
+ }
+ # else: it is a package in an OR dependency that has been otherwise
+ # satisfied.
+ }
+ $installed_deps->simplify_deps(Dpkg::Deps::KnownFacts->new());
+ $installed_deps->sort();
+ $installed_deps = "\n" . $installed_deps->output();
+ $installed_deps =~ s/, /,\n/g;
+
+ return $installed_deps;
+}
+
+sub is_cross_executable {
+ my $host_arch = get_host_arch();
+ my $build_arch = get_build_arch();
+
+ return if $host_arch eq $build_arch;
+
+ # If we are cross-compiling, record whether it was possible to execute
+ # the host architecture by cross-compiling and executing a small
+ # host-arch binary.
+ my $CC = debarch_to_gnutriplet($host_arch) . '-gcc';
+
+ # If we do not have a cross-compiler, we might be in the process of
+ # building one or cross-compiling using a language other than C/C++,
+ # and aborting the build is then not very useful.
+ return if ! find_command($CC);
+
+ my $crossprog = <<~'CROSSPROG';
+ #include <unistd.h>
+ int main() { write(1, "ok", 2); return 0; }
+ CROSSPROG
+ my ($stdout, $stderr) = ('', '');
+ my $tmpfh = File::Temp->new();
+ spawn(
+ exec => [ $CC, '-w', '-x', 'c', '-o', $tmpfh->filename, '-' ],
+ from_string => \$crossprog,
+ to_string => \$stdout,
+ error_to_string => \$stderr,
+ wait_child => 1,
+ nocheck => 1,
+ );
+ if ($?) {
+ print { *STDOUT } $stdout;
+ print { *STDERR } $stderr;
+ eval {
+ subprocerr("$CC -w -x c -");
+ };
+ warning($@);
+ return;
+ }
+ close $tmpfh;
+ spawn(
+ exec => [ $tmpfh->filename ],
+ error_to_file => '/dev/null',
+ to_string => \$stdout,
+ wait_child => 1,
+ nocheck => 1,
+ );
+
+ return 1 if $? == 0 && $stdout eq 'ok';
+ return 0;
+}
+
+sub get_build_tainted_by {
+ my @tainted = run_vendor_hook('build-tainted-by');
+
+ if (is_cross_executable()) {
+ push @tainted, 'can-execute-cross-built-programs';
+ }
+
+ return @tainted;
+}
+
+sub cleansed_environment {
+ # Consider only allowed variables which are not supposed to leak
+ # local user information.
+ my %env = map {
+ $_ => $ENV{$_}
+ } grep {
+ exists $ENV{$_}
+ } get_build_env_allowed();
+
+ # Record flags from dpkg-buildflags.
+ my $bf = Dpkg::BuildFlags->new();
+ $bf->load_system_config();
+ $bf->load_user_config();
+ $bf->load_environment_config();
+ foreach my $flag ($bf->list()) {
+ next if $bf->get_origin($flag) eq 'vendor';
+
+ # We do not need to record *_{STRIP,APPEND,PREPEND} as they
+ # have been used already to compute the above value.
+ $env{"DEB_${flag}_SET"} = $bf->get($flag);
+ }
+
+ return join "\n", map { $_ . '="' . ($env{$_} =~ s/"/\\"/gr) . '"' }
+ sort keys %env;
+}
+
+sub version {
+ printf g_("Debian %s version %s.\n"), $Dpkg::PROGNAME, $Dpkg::PROGVERSION;
+
+ printf g_('
+This is free software; see the GNU General Public License version 2 or
+later for copying conditions. There is NO warranty.
+');
+}
+
+sub usage {
+ printf g_(
+'Usage: %s [<option>...]')
+ . "\n\n" . g_(
+"Options:
+ --build=<type>[,...] specify the build <type>: full, source, binary,
+ any, all (default is \'full\').
+ -c<control-file> get control info from this file.
+ -l<changelog-file> get per-version info from this file.
+ -f<files-list-file> get .deb files list from this file.
+ -F<changelog-format> force changelog format.
+ -O[<buildinfo-file>] write to stdout (or <buildinfo-file>).
+ -u<upload-files-dir> directory with files (default is '..').
+ --always-include-kernel always include Build-Kernel-Version.
+ --always-include-path always include Build-Path.
+ --admindir=<directory> change the administrative directory.
+ -?, --help show this help message.
+ --version show the version.
+"), $Dpkg::PROGNAME;
+}
+
+my $build_opts = Dpkg::BuildOptions->new();
+$build_opts->parse_features('buildinfo', \%use_feature);
+
+while (@ARGV) {
+ $_ = shift @ARGV ;
+ if (m/^--build=(.*)$/) {
+ set_build_type_from_options($1, $_);
+ } elsif (m/^-c(.*)$/) {
+ $controlfile = $1;
+ } elsif (m/^-l(.*)$/) {
+ $changelogfile = $1;
+ } elsif (m/^-f(.*)$/) {
+ $fileslistfile = $1;
+ } elsif (m/^-F([0-9a-z]+)$/) {
+ $changelogformat = $1;
+ } elsif (m/^-u(.*)$/) {
+ $uploadfilesdir = $1;
+ } elsif (m/^-O$/) {
+ $stdout = 1;
+ } elsif (m/^-O(.*)$/) {
+ $outputfile = $1;
+ } elsif (m/^(--buildinfo-id)=.*$/) {
+ # Deprecated option
+ warning(g_('%s is deprecated; it is without effect'), $1);
+ } elsif (m/^--always-include-kernel$/) {
+ $use_feature{kernel} = 1;
+ } elsif (m/^--always-include-path$/) {
+ $use_feature{path} = 1;
+ } elsif (m/^--admindir=(.*)$/) {
+ $admindir = $1;
+ } elsif (m/^-(?:\?|-help)$/) {
+ usage();
+ exit(0);
+ } elsif (m/^--version$/) {
+ version();
+ exit(0);
+ } else {
+ usageerr(g_("unknown option '%s'"), $_);
+ }
+}
+
+my $control = Dpkg::Control::Info->new($controlfile);
+my $fields = Dpkg::Control->new(type => CTRL_FILE_BUILDINFO);
+my $dist = Dpkg::Dist::Files->new();
+
+# Retrieve info from the current changelog entry.
+my %options = (file => $changelogfile);
+$options{changelogformat} = $changelogformat if $changelogformat;
+my $changelog = changelog_parse(%options);
+
+# Retrieve info from the former changelog entry to handle binNMUs.
+$options{count} = 1;
+$options{offset} = 1;
+my $prev_changelog = changelog_parse(%options);
+
+my $sourceversion = Dpkg::Version->new($changelog->{'Binary-Only'} ?
+ $prev_changelog->{'Version'} : $changelog->{'Version'});
+my $binaryversion = Dpkg::Version->new($changelog->{'Version'});
+
+# Include .dsc if available.
+my $spackage = $changelog->{'Source'};
+my $sversion = $sourceversion->as_string(omit_epoch => 1);
+
+if (build_has_any(BUILD_SOURCE)) {
+ my $dsc = "${spackage}_${sversion}.dsc";
+
+ $checksums->add_from_file("$uploadfilesdir/$dsc", key => $dsc);
+
+ push @archvalues, 'source';
+}
+
+my $dist_count = 0;
+
+$dist_count = $dist->load($fileslistfile) if -e $fileslistfile;
+
+if (build_has_any(BUILD_BINARY)) {
+ error(g_('binary build with no binary artifacts found; .buildinfo is meaningless'))
+ if $dist_count == 0;
+
+ foreach my $file ($dist->get_files()) {
+ # Make us a bit idempotent.
+ next if $file->{filename} =~ m/\.buildinfo$/;
+
+ if (defined $file->{arch}) {
+ my $arch_all = debarch_eq('all', $file->{arch});
+
+ next if build_has_none(BUILD_ARCH_INDEP) and $arch_all;
+ next if build_has_none(BUILD_ARCH_DEP) and not $arch_all;
+
+ $distbinaries{$file->{package}} = 1 if defined $file->{package};
+ }
+
+ my $path = "$uploadfilesdir/$file->{filename}";
+ $checksums->add_from_file($path, key => $file->{filename});
+
+ if (defined $file->{package_type} and $file->{package_type} =~ m/^u?deb$/) {
+ push @archvalues, $file->{arch}
+ if defined $file->{arch} and not $archadded{$file->{arch}}++;
+ }
+ }
+}
+
+$fields->{'Format'} = $buildinfo_format;
+$fields->{'Source'} = $spackage;
+$fields->{'Binary'} = join(' ', sort keys %distbinaries);
+# Avoid overly long line by splitting over multiple lines.
+if (length($fields->{'Binary'}) > 980) {
+ $fields->{'Binary'} =~ s/(.{0,980}) /$1\n/g;
+}
+
+$fields->{'Architecture'} = join ' ', sort @archvalues;
+$fields->{'Version'} = $binaryversion;
+
+if ($changelog->{'Binary-Only'}) {
+ $fields->{'Source'} .= ' (' . $sourceversion . ')';
+ $fields->{'Binary-Only-Changes'} =
+ $changelog->{'Changes'} . "\n\n"
+ . ' -- ' . $changelog->{'Maintainer'}
+ . ' ' . $changelog->{'Date'};
+}
+
+$fields->{'Build-Origin'} = get_current_vendor();
+$fields->{'Build-Architecture'} = get_build_arch();
+$fields->{'Build-Date'} = get_build_date();
+
+if ($use_feature{kernel}) {
+ my (undef, undef, $kern_rel, $kern_ver, undef) = POSIX::uname();
+ $fields->{'Build-Kernel-Version'} = "$kern_rel $kern_ver";
+}
+
+my $cwd = getcwd();
+if ($use_feature{path}) {
+ $fields->{'Build-Path'} = $cwd;
+} else {
+ # Only include the build path if its root path is considered acceptable
+ # by the vendor.
+ foreach my $root_path (run_vendor_hook('builtin-system-build-paths')) {
+ if (index($cwd, $root_path) == 0) {
+ $fields->{'Build-Path'} = $cwd;
+ last;
+ }
+ }
+}
+
+$fields->{'Build-Tainted-By'} = "\n" . join "\n", get_build_tainted_by();
+
+$checksums->export_to_control($fields);
+
+$fields->{'Installed-Build-Depends'} = collect_installed_builddeps($control);
+
+$fields->{'Environment'} = "\n" . cleansed_environment();
+
+# Generate the buildinfo filename.
+if ($stdout) {
+ # Nothing to do.
+} elsif (defined $outputfile) {
+ $buildinfo = basename($outputfile);
+} else {
+ my $arch;
+
+ if (build_has_any(BUILD_ARCH_DEP)) {
+ $arch = get_host_arch();
+ } elsif (build_has_any(BUILD_ARCH_INDEP)) {
+ $arch = 'all';
+ } elsif (build_has_any(BUILD_SOURCE)) {
+ $arch = 'source';
+ }
+
+ my $bversion = $binaryversion->as_string(omit_epoch => 1);
+ $buildinfo = "${spackage}_${bversion}_${arch}.buildinfo";
+ $outputfile = "$uploadfilesdir/$buildinfo";
+}
+
+# Write out the generated .buildinfo file.
+
+if ($stdout) {
+ $fields->output(\*STDOUT);
+} else {
+ my $section = $control->get_source->{'Section'} || '-';
+ my $priority = $control->get_source->{'Priority'} || '-';
+
+ # Obtain a lock on debian/control to avoid simultaneous updates
+ # of debian/files when parallel building is in use
+ my $lockfh;
+ my $lockfile = 'debian/control';
+ $lockfile = $controlfile if not -e $lockfile;
+
+ sysopen $lockfh, $lockfile, O_WRONLY
+ or syserr(g_('cannot write %s'), $lockfile);
+ file_lock($lockfh, $lockfile);
+
+ $dist = Dpkg::Dist::Files->new();
+ $dist->load($fileslistfile) if -e $fileslistfile;
+
+ foreach my $file ($dist->get_files()) {
+ if (defined $file->{package} &&
+ $file->{package} eq $spackage &&
+ $file->{package_type} eq 'buildinfo' &&
+ (debarch_eq($file->{arch}, $fields->{'Architecture'}) ||
+ debarch_eq($file->{arch}, 'all') ||
+ debarch_eq($file->{arch}, 'source'))) {
+ $dist->del_file($file->{filename});
+ }
+ }
+
+ $dist->add_file($buildinfo, $section, $priority);
+ $dist->save("$fileslistfile.new");
+
+ rename "$fileslistfile.new", $fileslistfile
+ or syserr(g_('install new files list file'));
+
+ # Release the lock
+ close $lockfh or syserr(g_('cannot close %s'), $lockfile);
+
+ $fields->save("$outputfile.new");
+
+ rename "$outputfile.new", $outputfile
+ or syserr(g_("cannot install output buildinfo file '%s'"), $outputfile);
+}
+
+1;
diff --git a/scripts/dpkg-genchanges.pl b/scripts/dpkg-genchanges.pl
new file mode 100755
index 0000000..c6e2b05
--- /dev/null
+++ b/scripts/dpkg-genchanges.pl
@@ -0,0 +1,532 @@
+#!/usr/bin/perl
+#
+# dpkg-genchanges
+#
+# Copyright © 1996 Ian Jackson
+# Copyright © 2000,2001 Wichert Akkerman
+# Copyright © 2006-2014 Guillem Jover <guillem@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use List::Util qw(any all none);
+use Encode;
+use POSIX qw(:errno_h :locale_h);
+
+use Dpkg ();
+use Dpkg::Gettext;
+use Dpkg::File;
+use Dpkg::Checksums;
+use Dpkg::ErrorHandling;
+use Dpkg::BuildTypes;
+use Dpkg::BuildProfiles qw(get_build_profiles parse_build_profiles
+ evaluate_restriction_formula);
+use Dpkg::Arch qw(get_host_arch debarch_eq debarch_is debarch_list_parse);
+use Dpkg::Compression;
+use Dpkg::Control::Info;
+use Dpkg::Control::Fields;
+use Dpkg::Control;
+use Dpkg::Substvars;
+use Dpkg::Vars;
+use Dpkg::Changelog::Parse;
+use Dpkg::Dist::Files;
+use Dpkg::Version;
+use Dpkg::Vendor qw(run_vendor_hook);
+
+textdomain('dpkg-dev');
+
+my $controlfile = 'debian/control';
+my $changelogfile = 'debian/changelog';
+my $changelogformat;
+my $fileslistfile = 'debian/files';
+my $outputfile;
+my $uploadfilesdir = '..';
+my $sourcestyle = 'i';
+my $quiet = 0;
+my $host_arch = get_host_arch();
+my @profiles = get_build_profiles();
+my $changes_format = '1.8';
+
+my %p2f; # - package to file map, has entries for "packagename"
+my %f2seccf; # - package to section map, from control file
+my %f2pricf; # - package to priority map, from control file
+my %sourcedefault; # - default values as taken from source (used for Section,
+ # Priority and Maintainer)
+
+my @descriptions;
+
+my $checksums = Dpkg::Checksums->new();
+my %remove; # - fields to remove
+my %override;
+my %archadded;
+my @archvalues;
+my $changesdescription;
+my $forcemaint;
+my $forcechangedby;
+my $since;
+
+my $substvars_loaded = 0;
+my $substvars = Dpkg::Substvars->new();
+$substvars->set_as_auto('Format', $changes_format);
+
+sub version {
+ printf g_("Debian %s version %s.\n"), $Dpkg::PROGNAME, $Dpkg::PROGVERSION;
+
+ printf g_('
+This is free software; see the GNU General Public License version 2 or
+later for copying conditions. There is NO warranty.
+');
+}
+
+sub usage {
+ printf g_(
+'Usage: %s [<option>...]')
+ . "\n\n" . g_(
+"Options:
+ --build=<type>[,...] specify the build <type>: full, source, binary,
+ any, all (default is \'full\').
+ -g source and arch-indep build.
+ -G source and arch-specific build.
+ -b binary-only, no source files.
+ -B binary-only, only arch-specific files.
+ -A binary-only, only arch-indep files.
+ -S source-only, no binary files.
+ -c<control-file> get control info from this file.
+ -l<changelog-file> get per-version info from this file.
+ -f<files-list-file> get .deb files list from this file.
+ -v<since-version> include all changes later than version.
+ -C<changes-description> use change description from this file.
+ -m<maintainer> override control's maintainer value.
+ -e<maintainer> override changelog's maintainer value.
+ -u<upload-files-dir> directory with files (default is '..').
+ -si source includes orig, if new upstream (default).
+ -sa source includes orig, always.
+ -sd source is diff and .dsc only.
+ -q quiet - no informational messages on stderr.
+ -F<changelog-format> force changelog format.
+ -V<name>=<value> set a substitution variable.
+ -T<substvars-file> read variables here, not debian/substvars.
+ -D<field>=<value> override or add a field and value.
+ -U<field> remove a field.
+ -O[<filename>] write to stdout (default) or <filename>.
+ -?, --help show this help message.
+ --version show the version.
+"), $Dpkg::PROGNAME;
+}
+
+
+while (@ARGV) {
+ $_ = shift @ARGV;
+ if (m/^--build=(.*)$/) {
+ set_build_type_from_options($1, $_);
+ } elsif (m/^-b$/) {
+ set_build_type(BUILD_BINARY, $_);
+ } elsif (m/^-B$/) {
+ set_build_type(BUILD_ARCH_DEP, $_);
+ } elsif (m/^-A$/) {
+ set_build_type(BUILD_ARCH_INDEP, $_);
+ } elsif (m/^-S$/) {
+ set_build_type(BUILD_SOURCE, $_);
+ } elsif (m/^-G$/) {
+ set_build_type(BUILD_SOURCE | BUILD_ARCH_DEP, $_);
+ } elsif (m/^-g$/) {
+ set_build_type(BUILD_SOURCE | BUILD_ARCH_INDEP, $_);
+ } elsif (m/^-s([iad])$/) {
+ $sourcestyle = $1;
+ } elsif (m/^-q$/) {
+ $quiet = 1;
+ } elsif (m/^-c(.*)$/) {
+ $controlfile = $1;
+ } elsif (m/^-l(.*)$/) {
+ $changelogfile = $1;
+ } elsif (m/^-C(.*)$/) {
+ $changesdescription = $1;
+ } elsif (m/^-f(.*)$/) {
+ $fileslistfile = $1;
+ } elsif (m/^-v(.*)$/) {
+ $since = $1;
+ } elsif (m/^-T(.*)$/) {
+ $substvars->load($1) if -e $1;
+ $substvars_loaded = 1;
+ } elsif (m/^-m(.*)$/s) {
+ $forcemaint = $1;
+ } elsif (m/^-e(.*)$/s) {
+ $forcechangedby = $1;
+ } elsif (m/^-F([0-9a-z]+)$/) {
+ $changelogformat = $1;
+ } elsif (m/^-D([^\=:]+)[=:](.*)$/s) {
+ $override{$1} = $2;
+ } elsif (m/^-u(.*)$/) {
+ $uploadfilesdir = $1;
+ } elsif (m/^-U([^\=:]+)$/) {
+ $remove{$1} = 1;
+ } elsif (m/^-V(\w[-:0-9A-Za-z]*)[=:](.*)$/s) {
+ $substvars->set($1, $2);
+ } elsif (m/^-O(.*)$/) {
+ $outputfile = $1;
+ } elsif (m/^-(?:\?|-help)$/) {
+ usage();
+ exit(0);
+ } elsif (m/^--version$/) {
+ version();
+ exit(0);
+ } else {
+ usageerr(g_("unknown option '%s'"), $_);
+ }
+}
+
+# Do not pollute STDOUT with info messages if the .changes file goes there.
+if (not defined $outputfile) {
+ report_options(info_fh => \*STDERR, quiet_warnings => $quiet);
+ $outputfile = '-';
+}
+
+# Retrieve info from the current changelog entry
+my %options = (file => $changelogfile);
+$options{changelogformat} = $changelogformat if $changelogformat;
+$options{since} = $since if defined($since);
+my $changelog = changelog_parse(%options);
+# Change options to retrieve info of the former changelog entry
+delete $options{since};
+$options{count} = 1;
+$options{offset} = 1;
+my $prev_changelog = changelog_parse(%options);
+# Other initializations
+my $control = Dpkg::Control::Info->new($controlfile);
+my $fields = Dpkg::Control->new(type => CTRL_FILE_CHANGES);
+
+my $sourceversion = $changelog->{'Binary-Only'} ?
+ $prev_changelog->{'Version'} : $changelog->{'Version'};
+my $binaryversion = $changelog->{'Version'};
+
+$substvars->set_version_substvars($sourceversion, $binaryversion);
+$substvars->set_vendor_substvars();
+$substvars->set_arch_substvars();
+$substvars->load('debian/substvars') if -e 'debian/substvars' and not $substvars_loaded;
+
+my $backport_version_regex = run_vendor_hook('backport-version-regex') // qr/^$/;
+my $is_backport = $changelog->{'Version'} =~ m/$backport_version_regex/;
+
+# Versions with backport markers have a lower version number by definition.
+if (! $is_backport && defined $prev_changelog &&
+ version_compare_relation($changelog->{'Version'}, REL_LT,
+ $prev_changelog->{'Version'}))
+{
+ warning(g_('the current version (%s) is earlier than the previous one (%s)'),
+ $changelog->{'Version'}, $prev_changelog->{'Version'});
+}
+
+# Scan control info of source package
+my $src_fields = $control->get_source();
+foreach (keys %{$src_fields}) {
+ my $v = $src_fields->{$_};
+ if (m/^Source$/) {
+ set_source_package($v);
+ } elsif (m/^Section$|^Priority$/i) {
+ $sourcedefault{$_} = $v;
+ } elsif (m/^Description$/i) {
+ # Description in changes is computed, do not copy this field, only
+ # initialize the description substvars.
+ $substvars->set_desc_substvars($v);
+ } else {
+ field_transfer_single($src_fields, $fields);
+ }
+}
+
+my $dist = Dpkg::Dist::Files->new();
+my $origsrcmsg;
+
+if (build_has_any(BUILD_SOURCE)) {
+ my $sec = $sourcedefault{'Section'} // '-';
+ my $pri = $sourcedefault{'Priority'} // '-';
+ warning(g_('missing Section for source files')) if $sec eq '-';
+ warning(g_('missing Priority for source files')) if $pri eq '-';
+
+ my $spackage = get_source_package();
+ (my $sversion = $substvars->get('source:Version')) =~ s/^\d+://;
+
+ my $dsc = "${spackage}_${sversion}.dsc";
+ my $dsc_pathname = "$uploadfilesdir/$dsc";
+ my $dsc_fields = Dpkg::Control->new(type => CTRL_PKG_SRC);
+ $dsc_fields->load($dsc_pathname) or error(g_('%s is empty'), $dsc_pathname);
+ $checksums->add_from_file($dsc_pathname, key => $dsc);
+ $checksums->add_from_control($dsc_fields, use_files_for_md5 => 1);
+
+ # Compare upstream version to previous upstream version to decide if
+ # the .orig tarballs must be included
+ my $include_tarball;
+ if (defined($prev_changelog)) {
+ my $cur = Dpkg::Version->new($changelog->{'Version'});
+ my $prev = Dpkg::Version->new($prev_changelog->{'Version'});
+ if ($cur->version() ne $prev->version()) {
+ $include_tarball = 1;
+ } elsif ($changelog->{'Source'} ne $prev_changelog->{'Source'}) {
+ $include_tarball = 1;
+ } else {
+ $include_tarball = 0;
+ }
+ } else {
+ # No previous entry means first upload, tarball required
+ $include_tarball = 1;
+ }
+
+ my $ext = compression_get_file_extension_regex();
+ if ((($sourcestyle =~ m/i/ && !$include_tarball) ||
+ $sourcestyle =~ m/d/) &&
+ any { m/\.(?:debian\.tar|diff)\.$ext$/ } $checksums->get_files())
+ {
+ $origsrcmsg = g_('not including original source code in upload');
+ foreach my $f (grep { m/\.orig(-.+)?\.tar\.$ext$/ } $checksums->get_files()) {
+ $checksums->remove_file($f);
+ $checksums->remove_file("$f.asc");
+ }
+ } else {
+ if ($sourcestyle =~ m/d/ &&
+ none { m/\.(?:debian\.tar|diff)\.$ext$/ } $checksums->get_files()) {
+ warning(g_('ignoring -sd option for native Debian package'));
+ }
+ $origsrcmsg = g_('including full source code in upload');
+ }
+
+ push @archvalues, 'source';
+
+ # Only add attributes for files being distributed.
+ for my $f ($checksums->get_files()) {
+ $dist->add_file($f, $sec, $pri);
+ }
+} elsif (build_is(BUILD_ARCH_DEP)) {
+ $origsrcmsg = g_('binary-only arch-specific upload ' .
+ '(source code and arch-indep packages not included)');
+} elsif (build_is(BUILD_ARCH_INDEP)) {
+ $origsrcmsg = g_('binary-only arch-indep upload ' .
+ '(source code and arch-specific packages not included)');
+} else {
+ $origsrcmsg = g_('binary-only upload (no source code included)');
+}
+
+my $dist_binaries = 0;
+
+$dist->load($fileslistfile) if -e $fileslistfile;
+
+foreach my $file ($dist->get_files()) {
+ my $f = $file->{filename};
+ my $p = $file->{package};
+ my $a = $file->{arch};
+
+ if (defined $p && $file->{package_type} eq 'buildinfo') {
+ # We always distribute the .buildinfo file.
+ $checksums->add_from_file("$uploadfilesdir/$f", key => $f);
+ next;
+ }
+
+ # If this is a source-only upload, ignore any other artifacts.
+ next if build_has_none(BUILD_BINARY);
+
+ if (defined $a) {
+ my $arch_all = debarch_eq('all', $a);
+
+ next if build_has_none(BUILD_ARCH_INDEP) and $arch_all;
+ next if build_has_none(BUILD_ARCH_DEP) and not $arch_all;
+
+ push @archvalues, $a if not $archadded{$a}++;
+ }
+ if (defined $p && $file->{package_type} =~ m/^u?deb$/) {
+ $p2f{$p} //= [];
+ push @{$p2f{$p}}, $f;
+ }
+
+ $checksums->add_from_file("$uploadfilesdir/$f", key => $f);
+ $dist_binaries++;
+}
+
+error(g_('binary build with no binary artifacts found; cannot distribute'))
+ if build_has_any(BUILD_BINARY) && $dist_binaries == 0;
+
+# Scan control info of all binary packages
+foreach my $pkg ($control->get_packages()) {
+ my $p = $pkg->{'Package'};
+ my $a = $pkg->{'Architecture'};
+ my $bp = $pkg->{'Build-Profiles'};
+ my $d = $pkg->{'Description'} || 'no description available';
+ $d = $1 if $d =~ /^(.*)\n/;
+ my $pkg_type = $pkg->{'Package-Type'} ||
+ $pkg->get_custom_field('Package-Type') || 'deb';
+
+ my @restrictions;
+ @restrictions = parse_build_profiles($bp) if defined $bp;
+
+ if (not defined($p2f{$p})) {
+ # No files for this package... warn if it's unexpected
+ if (((build_has_any(BUILD_ARCH_INDEP) and debarch_eq('all', $a)) or
+ (build_has_any(BUILD_ARCH_DEP) and
+ (any { debarch_is($host_arch, $_) } debarch_list_parse($a, positive => 1)))) and
+ (@restrictions == 0 or
+ evaluate_restriction_formula(\@restrictions, \@profiles)))
+ {
+ warning(g_('package %s in control file but not in files list'),
+ $p);
+ }
+ next; # and skip it
+ }
+
+ # Add description of all binary packages
+ $d = $substvars->substvars($d);
+ my $desc = encode_utf8(sprintf('%-10s - %-.65s', $p, decode_utf8($d)));
+ $desc .= " ($pkg_type)" if $pkg_type ne 'deb';
+ push @descriptions, $desc;
+
+ # List of files for this binary package.
+ my @f = @{$p2f{$p}};
+
+ foreach (keys %{$pkg}) {
+ my $v = $pkg->{$_};
+
+ if (m/^Section$/) {
+ $f2seccf{$_} = $v foreach (@f);
+ } elsif (m/^Priority$/) {
+ $f2pricf{$_} = $v foreach (@f);
+ } elsif (m/^Architecture$/) {
+ if (build_has_any(BUILD_ARCH_DEP) and
+ (any { debarch_is($host_arch, $_) } debarch_list_parse($v, positive => 1))) {
+ $v = $host_arch;
+ } elsif (!debarch_eq('all', $v)) {
+ $v = '';
+ }
+ push(@archvalues, $v) if $v and not $archadded{$v}++;
+ } elsif (m/^Description$/) {
+ # Description in changes is computed, do not copy this field
+ } else {
+ field_transfer_single($pkg, $fields);
+ }
+ }
+}
+
+# Scan fields of dpkg-parsechangelog
+foreach (keys %{$changelog}) {
+ my $v = $changelog->{$_};
+ if (m/^Source$/i) {
+ set_source_package($v);
+ } elsif (m/^Maintainer$/i) {
+ $fields->{'Changed-By'} = $v;
+ } else {
+ field_transfer_single($changelog, $fields);
+ }
+}
+
+if ($changesdescription) {
+ $fields->{'Changes'} = "\n" . file_slurp($changesdescription);
+}
+
+for my $p (keys %p2f) {
+ if (not defined $control->get_pkg_by_name($p)) {
+ # Skip automatically generated packages (such as debugging symbol
+ # packages), by using the Auto-Built-Package field.
+ next if all {
+ my $file = $dist->get_file($_);
+
+ $file->{attrs}->{automatic} eq 'yes'
+ } @{$p2f{$p}};
+
+ warning(g_('package %s listed in files list but not in control info'), $p);
+ next;
+ }
+
+ foreach my $f (@{$p2f{$p}}) {
+ my $file = $dist->get_file($f);
+
+ my $sec = $f2seccf{$f} || $sourcedefault{'Section'} // '-';
+ if ($sec eq '-') {
+ warning(g_("missing Section for binary package %s; using '-'"), $p);
+ }
+ if ($sec ne $file->{section}) {
+ error(g_('package %s has section %s in control file but %s in ' .
+ 'files list'), $p, $sec, $file->{section});
+ }
+
+ my $pri = $f2pricf{$f} || $sourcedefault{'Priority'} // '-';
+ if ($pri eq '-') {
+ warning(g_("missing Priority for binary package %s; using '-'"), $p);
+ }
+ if ($pri ne $file->{priority}) {
+ error(g_('package %s has priority %s in control file but %s in ' .
+ 'files list'), $p, $pri, $file->{priority});
+ }
+ }
+}
+
+info($origsrcmsg);
+
+$fields->{'Format'} = $substvars->get('Format');
+
+if (length $fields->{'Date'} == 0) {
+ setlocale(LC_TIME, 'C');
+ $fields->{'Date'} = POSIX::strftime('%a, %d %b %Y %T %z', localtime);
+ setlocale(LC_TIME, '');
+}
+
+$fields->{'Binary'} = join ' ', sort keys %p2f;
+# Avoid overly long line by splitting over multiple lines
+if (length($fields->{'Binary'}) > 980) {
+ $fields->{'Binary'} =~ s/(.{0,980}) /$1\n/g;
+}
+
+$fields->{'Architecture'} = join ' ', @archvalues;
+
+$fields->{'Built-For-Profiles'} = join ' ', get_build_profiles();
+
+$fields->{'Description'} = "\n" . join("\n", sort @descriptions);
+
+$fields->{'Files'} = '';
+
+foreach my $f ($checksums->get_files()) {
+ my $file = $dist->get_file($f);
+
+ $fields->{'Files'} .= "\n" . $checksums->get_checksum($f, 'md5') .
+ ' ' . $checksums->get_size($f) .
+ " $file->{section} $file->{priority} $f";
+}
+$checksums->export_to_control($fields);
+# redundant with the Files field
+delete $fields->{'Checksums-Md5'};
+
+$fields->{'Source'} = get_source_package();
+if ($fields->{'Version'} ne $substvars->get('source:Version')) {
+ $fields->{'Source'} .= ' (' . $substvars->get('source:Version') . ')';
+}
+
+$fields->{'Maintainer'} = $forcemaint if defined($forcemaint);
+$fields->{'Changed-By'} = $forcechangedby if defined($forcechangedby);
+
+for my $f (qw(Version Distribution Maintainer Changes)) {
+ error(g_('missing information for critical output field %s'), $f)
+ unless defined $fields->{$f};
+}
+
+for my $f (qw(Urgency)) {
+ warning(g_('missing information for output field %s'), $f)
+ unless defined $fields->{$f};
+}
+
+for my $f (keys %override) {
+ $fields->{$f} = $override{$f};
+}
+for my $f (keys %remove) {
+ delete $fields->{$f};
+}
+
+# Note: do not perform substitution of variables, one of the reasons is that
+# they could interfere with field values, for example the Changes field.
+$fields->save($outputfile);
diff --git a/scripts/dpkg-gencontrol.pl b/scripts/dpkg-gencontrol.pl
new file mode 100755
index 0000000..87eb6e6
--- /dev/null
+++ b/scripts/dpkg-gencontrol.pl
@@ -0,0 +1,436 @@
+#!/usr/bin/perl
+#
+# dpkg-gencontrol
+#
+# Copyright © 1996 Ian Jackson
+# Copyright © 2000,2002 Wichert Akkerman
+# Copyright © 2006-2015 Guillem Jover <guillem@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use List::Util qw(none);
+use POSIX qw(:errno_h :fcntl_h);
+use File::Find;
+
+use Dpkg ();
+use Dpkg::Gettext;
+use Dpkg::ErrorHandling;
+use Dpkg::Lock;
+use Dpkg::Arch qw(get_host_arch debarch_eq debarch_is debarch_list_parse);
+use Dpkg::Package;
+use Dpkg::BuildProfiles qw(get_build_profiles);
+use Dpkg::Deps;
+use Dpkg::Control;
+use Dpkg::Control::Info;
+use Dpkg::Control::Fields;
+use Dpkg::Substvars;
+use Dpkg::Vars;
+use Dpkg::Changelog::Parse;
+use Dpkg::Dist::Files;
+
+textdomain('dpkg-dev');
+
+
+my $controlfile = 'debian/control';
+my $changelogfile = 'debian/changelog';
+my $changelogformat;
+my $fileslistfile = 'debian/files';
+my $packagebuilddir = 'debian/tmp';
+my $outputfile;
+
+my $sourceversion;
+my $binaryversion;
+my $forceversion;
+my $forcefilename;
+my $stdout;
+my %remove;
+my %override;
+my $oppackage;
+my $substvars = Dpkg::Substvars->new();
+my $substvars_loaded = 0;
+
+
+sub version {
+ printf g_("Debian %s version %s.\n"), $Dpkg::PROGNAME, $Dpkg::PROGVERSION;
+
+ printf g_('
+This is free software; see the GNU General Public License version 2 or
+later for copying conditions. There is NO warranty.
+');
+}
+
+sub usage {
+ printf g_(
+'Usage: %s [<option>...]')
+ . "\n\n" . g_(
+'Options:
+ -p<package> print control file for package.
+ -c<control-file> get control info from this file.
+ -l<changelog-file> get per-version info from this file.
+ -F<changelog-format> force changelog format.
+ -v<force-version> set version of binary package.
+ -f<files-list-file> write files here instead of debian/files.
+ -P<package-build-dir> temporary build directory instead of debian/tmp.
+ -n<filename> assume the package filename will be <filename>.
+ -O[<file>] write to stdout (or <file>), not .../DEBIAN/control.
+ -is, -ip, -isp, -ips deprecated, ignored for compatibility.
+ -D<field>=<value> override or add a field and value.
+ -U<field> remove a field.
+ -V<name>=<value> set a substitution variable.
+ -T<substvars-file> read variables here, not debian/substvars.
+ -?, --help show this help message.
+ --version show the version.
+'), $Dpkg::PROGNAME;
+}
+
+while (@ARGV) {
+ $_ = shift @ARGV;
+ if (m/^-p/p) {
+ $oppackage = ${^POSTMATCH};
+ my $err = pkg_name_is_illegal($oppackage);
+ error(g_("illegal package name '%s': %s"), $oppackage, $err) if $err;
+ } elsif (m/^-c/p) {
+ $controlfile = ${^POSTMATCH};
+ } elsif (m/^-l/p) {
+ $changelogfile = ${^POSTMATCH};
+ } elsif (m/^-P/p) {
+ $packagebuilddir = ${^POSTMATCH};
+ } elsif (m/^-f/p) {
+ $fileslistfile = ${^POSTMATCH};
+ } elsif (m/^-v(.+)$/) {
+ $forceversion = $1;
+ } elsif (m/^-O$/) {
+ $stdout = 1;
+ } elsif (m/^-O(.+)$/) {
+ $outputfile = $1;
+ } elsif (m/^-i[sp][sp]?$/) {
+ warning(g_('%s is deprecated; it is without effect'), $_);
+ } elsif (m/^-F([0-9a-z]+)$/) {
+ $changelogformat = $1;
+ } elsif (m/^-D([^\=:]+)[=:]/p) {
+ $override{$1} = ${^POSTMATCH};
+ } elsif (m/^-U([^\=:]+)$/) {
+ $remove{$1} = 1;
+ } elsif (m/^-V(\w[-:0-9A-Za-z]*)[=:]/p) {
+ $substvars->set_as_used($1, ${^POSTMATCH});
+ } elsif (m/^-T(.*)$/) {
+ $substvars->load($1) if -e $1;
+ $substvars_loaded = 1;
+ } elsif (m/^-n/p) {
+ $forcefilename = ${^POSTMATCH};
+ } elsif (m/^-(?:\?|-help)$/) {
+ usage();
+ exit(0);
+ } elsif (m/^--version$/) {
+ version();
+ exit(0);
+ } else {
+ usageerr(g_("unknown option '%s'"), $_);
+ }
+}
+
+umask 0022; # ensure sane default permissions for created files
+my %options = (file => $changelogfile);
+$options{changelogformat} = $changelogformat if $changelogformat;
+my $changelog = changelog_parse(%options);
+if ($changelog->{'Binary-Only'}) {
+ $options{count} = 1;
+ $options{offset} = 1;
+ my $prev_changelog = changelog_parse(%options);
+ $sourceversion = $prev_changelog->{'Version'};
+} else {
+ $sourceversion = $changelog->{'Version'};
+}
+
+if (defined $forceversion) {
+ $binaryversion = $forceversion;
+} else {
+ $binaryversion = $changelog->{'Version'};
+}
+
+$substvars->set_version_substvars($sourceversion, $binaryversion);
+$substvars->set_vendor_substvars();
+$substvars->set_arch_substvars();
+$substvars->load('debian/substvars') if -e 'debian/substvars' and not $substvars_loaded;
+my $control = Dpkg::Control::Info->new($controlfile);
+my $fields = Dpkg::Control->new(type => CTRL_PKG_DEB);
+
+# Old-style bin-nmus change the source version submitted to
+# set_version_substvars()
+$sourceversion = $substvars->get('source:Version');
+
+my $pkg;
+
+if (defined($oppackage)) {
+ $pkg = $control->get_pkg_by_name($oppackage);
+ if (not defined $pkg) {
+ error(g_('package %s not in control info'), $oppackage)
+ }
+} else {
+ my @packages = map { $_->{'Package'} } $control->get_packages();
+ if (@packages == 0) {
+ error(g_('no package stanza found in control info'));
+ } elsif (@packages > 1) {
+ error(g_('must specify package since control info has many (%s)'),
+ "@packages");
+ }
+ $pkg = $control->get_pkg_by_idx(1);
+}
+$substvars->set_msg_prefix(sprintf(g_('package %s: '), $pkg->{Package}));
+
+# Scan source package
+my $src_fields = $control->get_source();
+foreach (keys %{$src_fields}) {
+ if (m/^Source$/) {
+ set_source_package($src_fields->{$_});
+ } elsif (m/^Description$/) {
+ # Description in binary packages is not inherited, do not copy this
+ # field, only initialize the description substvars.
+ $substvars->set_desc_substvars($src_fields->{$_});
+ } else {
+ field_transfer_single($src_fields, $fields);
+ }
+}
+$substvars->set_field_substvars($src_fields, 'S');
+
+# Scan binary package
+foreach (keys %{$pkg}) {
+ my $v = $pkg->{$_};
+ if (field_get_dep_type($_)) {
+ # Delay the parsing until later
+ } elsif (m/^Architecture$/) {
+ my $host_arch = get_host_arch();
+
+ if (debarch_eq('all', $v)) {
+ $fields->{$_} = $v;
+ } else {
+ my @archlist = debarch_list_parse($v, positive => 1);
+
+ if (none { debarch_is($host_arch, $_) } @archlist) {
+ error(g_("current host architecture '%s' does not " .
+ "appear in package '%s' architecture list (%s)"),
+ $host_arch, $oppackage, "@archlist");
+ }
+ $fields->{$_} = $host_arch;
+ }
+ } else {
+ field_transfer_single($pkg, $fields);
+ }
+}
+
+# Scan fields of dpkg-parsechangelog
+foreach (keys %{$changelog}) {
+ my $v = $changelog->{$_};
+
+ if (m/^Source$/) {
+ set_source_package($v);
+ } elsif (m/^Version$/) {
+ # Already handled previously.
+ } elsif (m/^Maintainer$/) {
+ # That field must not be copied from changelog even if it's
+ # allowed in the binary package control information
+ } else {
+ field_transfer_single($changelog, $fields);
+ }
+}
+
+$fields->{'Version'} = $binaryversion;
+
+# Process dependency fields in a second pass, now that substvars have been
+# initialized.
+
+my $facts = Dpkg::Deps::KnownFacts->new();
+$facts->add_installed_package($fields->{'Package'}, $fields->{'Version'},
+ $fields->{'Architecture'}, $fields->{'Multi-Arch'});
+if (exists $pkg->{'Provides'}) {
+ my $provides = deps_parse($substvars->substvars($pkg->{'Provides'}, no_warn => 1),
+ reduce_restrictions => 1, virtual => 1, union => 1);
+ if (defined $provides) {
+ foreach my $subdep ($provides->get_deps()) {
+ if ($subdep->isa('Dpkg::Deps::Simple')) {
+ $facts->add_provided_package($subdep->{package},
+ $subdep->{relation}, $subdep->{version},
+ $fields->{'Package'});
+ }
+ }
+ }
+}
+
+my (@seen_deps);
+foreach my $field (field_list_pkg_dep()) {
+ # Arch: all can't be simplified as the host architecture is not known
+ my $reduce_arch = debarch_eq('all', $pkg->{Architecture} || 'all') ? 0 : 1;
+ if (exists $pkg->{$field}) {
+ my $dep;
+ my $field_value = $substvars->substvars($pkg->{$field},
+ msg_prefix => sprintf(g_('%s field of package %s: '), $field, $pkg->{Package}));
+ if (field_get_dep_type($field) eq 'normal') {
+ $dep = deps_parse($field_value, use_arch => 1,
+ reduce_arch => $reduce_arch,
+ reduce_profiles => 1);
+ error(g_("parsing package '%s' %s field: %s"), $oppackage,
+ $field, $field_value) unless defined $dep;
+ $dep->simplify_deps($facts, @seen_deps);
+ # Remember normal deps to simplify even further weaker deps
+ push @seen_deps, $dep;
+ } else {
+ $dep = deps_parse($field_value, use_arch => 1,
+ reduce_arch => $reduce_arch,
+ reduce_profiles => 1, union => 1);
+ error(g_("parsing package '%s' %s field: %s"), $oppackage,
+ $field, $field_value) unless defined $dep;
+ $dep->simplify_deps($facts);
+ $dep->sort();
+ }
+ error(g_('the %s field contains an arch-specific dependency but the ' .
+ "package '%s' is architecture all"), $field, $oppackage)
+ if $dep->has_arch_restriction();
+ $fields->{$field} = $dep->output();
+ delete $fields->{$field} unless $fields->{$field}; # Delete empty field
+ }
+}
+
+for my $f (qw(Package Version Architecture)) {
+ error(g_('missing information for output field %s'), $f)
+ unless defined $fields->{$f};
+}
+for my $f (qw(Maintainer Description)) {
+ warning(g_('missing information for output field %s'), $f)
+ unless defined $fields->{$f};
+}
+
+my $pkg_type = $pkg->{'Package-Type'} ||
+ $pkg->get_custom_field('Package-Type') || 'deb';
+
+if ($pkg_type eq 'udeb') {
+ delete $fields->{'Package-Type'};
+ delete $fields->{'Homepage'};
+} else {
+ for my $f (qw(Subarchitecture Kernel-Version Installer-Menu-Item)) {
+ warning(g_("%s package '%s' with udeb specific field %s"),
+ $pkg_type, $oppackage, $f)
+ if defined($fields->{$f});
+ }
+}
+
+my $sourcepackage = get_source_package();
+my $binarypackage = $override{'Package'} // $fields->{'Package'};
+my $verdiff = $binaryversion ne $sourceversion;
+if ($binarypackage ne $sourcepackage || $verdiff) {
+ $fields->{'Source'} = $sourcepackage;
+ $fields->{'Source'} .= ' (' . $sourceversion . ')' if $verdiff;
+}
+
+if (!defined($substvars->get('Installed-Size'))) {
+ my $installed_size = 0;
+ my %hardlink;
+ my $scan_installed_size = sub {
+ lstat or syserr(g_('cannot stat %s'), $File::Find::name);
+
+ if (-f _ or -l _) {
+ my ($dev, $ino, $nlink) = (lstat _)[0, 1, 3];
+
+ # For filesystem objects with actual content accumulate the size
+ # in 1 KiB units.
+ $installed_size += POSIX::ceil((-s _) / 1024)
+ if not exists $hardlink{"$dev:$ino"};
+
+ # Track hardlinks to avoid repeated additions.
+ $hardlink{"$dev:$ino"} = 1 if $nlink > 1;
+ } else {
+ # For other filesystem objects assume a minimum 1 KiB baseline,
+ # as directories are shared resources between packages, and other
+ # object types are mainly metadata-only, supposedly consuming
+ # at most an inode.
+ $installed_size += 1;
+ }
+ };
+ find($scan_installed_size, $packagebuilddir) if -d $packagebuilddir;
+
+ $substvars->set_as_auto('Installed-Size', $installed_size);
+}
+if (defined($substvars->get('Extra-Size'))) {
+ my $size = $substvars->get('Extra-Size') + $substvars->get('Installed-Size');
+ $substvars->set_as_auto('Installed-Size', $size);
+}
+if (defined($substvars->get('Installed-Size'))) {
+ $fields->{'Installed-Size'} = $substvars->get('Installed-Size');
+}
+
+for my $f (keys %override) {
+ $fields->{$f} = $override{$f};
+}
+for my $f (keys %remove) {
+ delete $fields->{$f};
+}
+
+$fields->apply_substvars($substvars);
+
+if ($stdout) {
+ $fields->output(\*STDOUT);
+} else {
+ $outputfile //= "$packagebuilddir/DEBIAN/control";
+
+ my $sversion = $fields->{'Version'};
+ $sversion =~ s/^\d+://;
+ $forcefilename //= sprintf('%s_%s_%s.%s', $fields->{'Package'}, $sversion,
+ $fields->{'Architecture'}, $pkg_type);
+ my $section = $fields->{'Section'} || '-';
+ my $priority = $fields->{'Priority'} || '-';
+
+ # Obtain a lock on debian/control to avoid simultaneous updates
+ # of debian/files when parallel building is in use
+ my $lockfh;
+ my $lockfile = 'debian/control';
+ $lockfile = $controlfile if not -e $lockfile;
+
+ sysopen $lockfh, $lockfile, O_WRONLY
+ or syserr(g_('cannot write %s'), $lockfile);
+ file_lock($lockfh, $lockfile);
+
+ my $dist = Dpkg::Dist::Files->new();
+ $dist->load($fileslistfile) if -e $fileslistfile;
+
+ foreach my $file ($dist->get_files()) {
+ if (defined $file->{package} &&
+ ($file->{package} eq $fields->{'Package'}) &&
+ ($file->{package_type} eq $pkg_type) &&
+ (debarch_eq($file->{arch}, $fields->{'Architecture'}) ||
+ debarch_eq($file->{arch}, 'all'))) {
+ $dist->del_file($file->{filename});
+ }
+ }
+
+ my %fileattrs;
+ $fileattrs{automatic} = 'yes' if $fields->{'Auto-Built-Package'};
+
+ $dist->add_file($forcefilename, $section, $priority, %fileattrs);
+ $dist->save("$fileslistfile.new");
+
+ rename "$fileslistfile.new", $fileslistfile
+ or syserr(g_('install new files list file'));
+
+ # Release the lock
+ close $lockfh or syserr(g_('cannot close %s'), $lockfile);
+
+ $fields->save("$outputfile.new");
+
+ rename "$outputfile.new", $outputfile
+ or syserr(g_("cannot install output control file '%s'"), $outputfile);
+}
+
+$substvars->warn_about_unused();
diff --git a/scripts/dpkg-gensymbols.pl b/scripts/dpkg-gensymbols.pl
new file mode 100755
index 0000000..8811d5f
--- /dev/null
+++ b/scripts/dpkg-gensymbols.pl
@@ -0,0 +1,330 @@
+#!/usr/bin/perl
+#
+# dpkg-gensymbols
+#
+# Copyright © 2007 Raphaël Hertzog
+# Copyright © 2007-2013 Guillem Jover <guillem@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use Dpkg ();
+use Dpkg::Arch qw(get_host_arch);
+use Dpkg::Package;
+use Dpkg::Shlibs qw(get_library_paths);
+use Dpkg::Shlibs::Objdump;
+use Dpkg::Shlibs::SymbolFile;
+use Dpkg::Gettext;
+use Dpkg::ErrorHandling;
+use Dpkg::Control::Info;
+use Dpkg::Changelog::Parse;
+use Dpkg::Path qw(check_files_are_the_same find_command);
+
+textdomain('dpkg-dev');
+
+my $packagebuilddir = 'debian/tmp';
+
+my $sourceversion;
+my $stdout;
+my $oppackage;
+my $compare = 1; # Bail on missing symbols by default
+my $quiet = 0;
+my $input;
+my $output;
+my $template_mode = 0; # non-template mode by default
+my $verbose_output = 0;
+my $debug = 0;
+my $host_arch = get_host_arch();
+
+sub version {
+ printf g_("Debian %s version %s.\n"), $Dpkg::PROGNAME, $Dpkg::PROGVERSION;
+
+ printf g_('
+This is free software; see the GNU General Public License version 2 or
+later for copying conditions. There is NO warranty.
+');
+}
+
+sub usage {
+ printf g_(
+'Usage: %s [<option>...]')
+ . "\n\n" . g_(
+'Options:
+ -l<library-path> add directory to private shared library search list.
+ -p<package> generate symbols file for package.
+ -P<package-build-dir> temporary build directory instead of debian/tmp.
+ -e<library> explicitly list libraries to scan.
+ -v<version> version of the packages (defaults to
+ version extracted from debian/changelog).
+ -c<level> compare generated symbols file with the reference
+ template in the debian directory and fail if
+ difference is too important; level goes from 0 for
+ no check, to 4 for all checks (default level is 1).
+ -q keep quiet and never emit any warnings or
+ generate a diff between generated symbols
+ file and the reference template.
+ -I<file> force usage of <file> as reference symbols
+ file instead of the default file.
+ -O[<file>] write to stdout (or <file>), not .../DEBIAN/symbols.
+ -t write in template mode (tags are not
+ processed and included in output).
+ -V verbose output; write deprecated symbols and pattern
+ matching symbols as comments (in template mode only).
+ -a<arch> assume <arch> as host architecture when processing
+ symbol files.
+ -d display debug information during work.
+ -?, --help show this help message.
+ --version show the version.
+'), $Dpkg::PROGNAME;
+}
+
+my @files;
+while (@ARGV) {
+ $_ = shift(@ARGV);
+ if (m/^-p/p) {
+ $oppackage = ${^POSTMATCH};
+ my $err = pkg_name_is_illegal($oppackage);
+ error(g_("illegal package name '%s': %s"), $oppackage, $err) if $err;
+ } elsif (m/^-l(.*)$/) {
+ Dpkg::Shlibs::add_library_dir($1);
+ } elsif (m/^-c(\d)?$/) {
+ $compare = $1 // 1;
+ } elsif (m/^-q$/) {
+ $quiet = 1;
+ } elsif (m/^-d$/) {
+ $debug = 1;
+ } elsif (m/^-v(.+)$/) {
+ $sourceversion = $1;
+ } elsif (m/^-e(.+)$/) {
+ my $file = $1;
+ if (-e $file) {
+ push @files, $file;
+ } else {
+ my @to_add = glob($file);
+ push @files, @to_add;
+ warning(g_("pattern '%s' did not match any file"), $file)
+ unless scalar(@to_add);
+ }
+ } elsif (m/^-P(.+)$/) {
+ $packagebuilddir = $1;
+ $packagebuilddir =~ s{/+$}{};
+ } elsif (m/^-O$/) {
+ $stdout = 1;
+ } elsif (m/^-I(.+)$/) {
+ $input = $1;
+ } elsif (m/^-O(.+)$/) {
+ $output = $1;
+ } elsif (m/^-t$/) {
+ $template_mode = 1;
+ } elsif (m/^-V$/) {
+ $verbose_output = 1;
+ } elsif (m/^-a(.+)$/) {
+ $host_arch = $1;
+ } elsif (m/^-(?:\?|-help)$/) {
+ usage();
+ exit(0);
+ } elsif (m/^--version$/) {
+ version();
+ exit(0);
+ } else {
+ usageerr(g_("unknown option '%s'"), $_);
+ }
+}
+
+report_options(debug_level => $debug);
+
+umask 0022; # ensure sane default permissions for created files
+
+if (exists $ENV{DPKG_GENSYMBOLS_CHECK_LEVEL}) {
+ $compare = $ENV{DPKG_GENSYMBOLS_CHECK_LEVEL};
+}
+
+if (not defined($sourceversion)) {
+ my $changelog = changelog_parse();
+ $sourceversion = $changelog->{'Version'};
+}
+if (not defined($oppackage)) {
+ my $control = Dpkg::Control::Info->new();
+ my @packages = map { $_->{'Package'} } $control->get_packages();
+ if (@packages == 0) {
+ error(g_('no package stanza found in control info'));
+ } elsif (@packages > 1) {
+ error(g_('must specify package since control info has many (%s)'),
+ "@packages");
+ }
+ $oppackage = $packages[0];
+}
+
+my $symfile = Dpkg::Shlibs::SymbolFile->new(arch => $host_arch);
+my $ref_symfile = Dpkg::Shlibs::SymbolFile->new(arch => $host_arch);
+# Load source-provided symbol information
+foreach my $file ($input, $output, "debian/$oppackage.symbols.$host_arch",
+ "debian/symbols.$host_arch", "debian/$oppackage.symbols",
+ 'debian/symbols')
+{
+ if (defined $file and -e $file) {
+ debug(1, "Using references symbols from $file");
+ $symfile->load($file);
+ $ref_symfile->load($file) if $compare || ! $quiet;
+ last;
+ }
+}
+
+# Scan package build dir looking for libraries
+if (not scalar @files) {
+ PATH: foreach my $path (get_library_paths()) {
+ my $libdir = "$packagebuilddir$path";
+ $libdir =~ s{/+}{/}g;
+ lstat $libdir;
+ next if not -d _;
+ next if -l _; # Skip directories which are symlinks
+ # Skip any directory _below_ a symlink as well
+ my $updir = $libdir;
+ while (($updir =~ s{/[^/]*$}{}) and
+ not check_files_are_the_same($packagebuilddir, $updir)) {
+ next PATH if -l $updir;
+ }
+ opendir(my $libdir_dh, "$libdir")
+ or syserr(g_("can't read directory %s: %s"), $libdir, $!);
+ push @files, grep {
+ /(\.so\.|\.so$)/ && -f &&
+ Dpkg::Shlibs::Objdump::is_elf($_);
+ } map { "$libdir/$_" } readdir($libdir_dh);
+ closedir $libdir_dh;
+ }
+}
+
+# Merge symbol information
+my $od = Dpkg::Shlibs::Objdump->new();
+foreach my $file (@files) {
+ debug(1, "Scanning $file for symbol information");
+ my $objid = $od->analyze($file);
+ unless (defined($objid) && $objid) {
+ warning(g_("Dpkg::Shlibs::Objdump couldn't parse %s\n"), $file);
+ next;
+ }
+ my $object = $od->get_object($objid);
+ if ($object->{SONAME}) { # Objects without soname are of no interest
+ debug(1, "Merging symbols from $file as $object->{SONAME}");
+ if (not $symfile->has_object($object->{SONAME})) {
+ $symfile->create_object($object->{SONAME}, "$oppackage #MINVER#");
+ }
+ $symfile->merge_symbols($object, $sourceversion);
+ } else {
+ debug(1, "File $file doesn't have a soname. Ignoring.");
+ }
+}
+$symfile->clear_except(keys %{$od->{objects}});
+
+# Write out symbols files
+if ($stdout) {
+ $output = g_('<standard output>');
+ $symfile->output(\*STDOUT, package => $oppackage,
+ template_mode => $template_mode,
+ with_pattern_matches => $verbose_output,
+ with_deprecated => $verbose_output);
+} else {
+ unless (defined($output)) {
+ unless ($symfile->is_empty()) {
+ $output = "$packagebuilddir/DEBIAN/symbols";
+ mkdir("$packagebuilddir/DEBIAN") if not -e "$packagebuilddir/DEBIAN";
+ }
+ }
+ if (defined($output)) {
+ debug(1, "Storing symbols in $output.");
+ $symfile->save($output, package => $oppackage,
+ template_mode => $template_mode,
+ with_pattern_matches => $verbose_output,
+ with_deprecated => $verbose_output);
+ } else {
+ debug(1, 'No symbol information to store.');
+ }
+}
+
+# Check if generated files differs from reference file
+my $exitcode = 0;
+
+sub compare_problem
+{
+ my ($level, $msg, @args) = @_;
+
+ if ($compare >= $level) {
+ errormsg($msg, @args);
+ $exitcode = $level;
+ } else {
+ warning($msg, @args) unless $quiet;
+ }
+}
+
+if ($compare || ! $quiet) {
+ # Compare
+ if (my @libs = $symfile->get_new_libs($ref_symfile)) {
+ compare_problem(4, g_('new libraries appeared in the symbols file: %s'), "@libs");
+ }
+ if (my @libs = $symfile->get_lost_libs($ref_symfile)) {
+ compare_problem(3, g_('some libraries disappeared in the symbols file: %s'), "@libs");
+ }
+ if ($symfile->get_new_symbols($ref_symfile)) {
+ compare_problem(2, g_('some new symbols appeared in the symbols file: %s'),
+ g_('see diff output below'));
+ }
+ if ($symfile->get_lost_symbols($ref_symfile)) {
+ compare_problem(1, g_('some symbols or patterns disappeared in the symbols file: %s'),
+ g_('see diff output below'))
+ }
+}
+
+unless ($quiet) {
+ require File::Temp;
+ require Digest::MD5;
+
+ my $file_label;
+
+ # Compare template symbols files before and after
+ my $before = File::Temp->new(TEMPLATE => 'dpkg-gensymbolsXXXXXX');
+ my $after = File::Temp->new(TEMPLATE => 'dpkg-gensymbolsXXXXXX');
+ if ($ref_symfile->{file}) {
+ $file_label = $ref_symfile->{file};
+ } else {
+ $file_label = 'new_symbol_file';
+ }
+ $ref_symfile->output($before, package => $oppackage, template_mode => 1);
+ $symfile->output($after, package => $oppackage, template_mode => 1);
+
+ seek $before, 0, 0;
+ seek $after, 0, 0;
+ my ($md5_before, $md5_after) = (Digest::MD5->new(), Digest::MD5->new());
+ $md5_before->addfile($before);
+ $md5_after->addfile($after);
+
+ # Output diffs between symbols files if any
+ if ($md5_before->hexdigest() ne $md5_after->hexdigest()) {
+ if (not defined($output)) {
+ warning(g_('the generated symbols file is empty'));
+ } elsif (defined($ref_symfile->{file})) {
+ warning(g_("%s doesn't match completely %s"),
+ $output, $ref_symfile->{file});
+ } else {
+ warning(g_('no debian/symbols file used as basis for generating %s'),
+ $output);
+ }
+ my ($a, $b) = ($before->filename, $after->filename);
+ my $diff_label = sprintf('%s (%s_%s_%s)', $file_label, $oppackage,
+ $sourceversion, $host_arch);
+ system('diff', '-u', '-L', $diff_label, $a, $b) if find_command('diff');
+ }
+}
+exit($exitcode);
diff --git a/scripts/dpkg-mergechangelogs.pl b/scripts/dpkg-mergechangelogs.pl
new file mode 100755
index 0000000..68d6d79
--- /dev/null
+++ b/scripts/dpkg-mergechangelogs.pl
@@ -0,0 +1,321 @@
+#!/usr/bin/perl
+
+# Copyright © 2009-2010 Raphaël Hertzog <hertzog@debian.org>
+# Copyright © 2012 Guillem Jover <guillem@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+use warnings;
+use strict;
+
+use Scalar::Util qw(blessed);
+use Getopt::Long qw(:config posix_default bundling_values no_ignorecase);
+
+use Dpkg ();
+use Dpkg::Changelog::Debian;
+use Dpkg::ErrorHandling;
+use Dpkg::Gettext;
+use Dpkg::Version;
+use Dpkg::Vendor qw(run_vendor_hook);
+
+textdomain('dpkg-dev');
+
+sub merge_entries($$$);
+sub merge_block($$$;&);
+sub merge_entry_item($$$$);
+sub merge_conflict($$);
+sub get_conflict_block($$);
+sub join_lines($);
+
+BEGIN {
+ eval q{
+ pop @INC if $INC[-1] eq '.';
+ use Algorithm::Merge qw(merge);
+ };
+ if ($@) {
+ *merge = sub {
+ my ($o, $a, $b) = @_;
+ return @$a if join("\n", @$a) eq join("\n", @$b);
+ return get_conflict_block($a, $b);
+ };
+ }
+}
+
+sub version {
+ printf g_("Debian %s version %s.\n"), $Dpkg::PROGNAME, $Dpkg::PROGVERSION;
+
+ printf "\n" . g_(
+'This is free software; see the GNU General Public License version 2 or
+later for copying conditions. There is NO warranty.
+');
+}
+
+sub usage {
+ printf g_(
+"Usage: %s [<option>...] <old> <new-a> <new-b> [<out>]
+
+Options:
+ -m, --merge-prereleases merge pre-releases together, ignores everything
+ after the last '~' in the version.
+ --merge-unreleased merge UNRELEASED entries together, ignoring their
+ version numbers.
+ -?, --help show this help message.
+ --version show the version.
+"), $Dpkg::PROGNAME;
+}
+
+my $merge_prereleases;
+my $merge_unreleased;
+
+my @options_spec = (
+ 'help|?' => sub { usage(); exit(0) },
+ 'version' => sub { version(); exit(0) },
+ 'merge-prereleases|m' => \$merge_prereleases,
+ 'merge-unreleased' => \$merge_unreleased,
+);
+
+{
+ local $SIG{__WARN__} = sub { usageerr($_[0]) };
+ GetOptions(@options_spec);
+}
+
+my $backport_version_regex = run_vendor_hook('backport-version-regex');
+
+my ($old, $new_a, $new_b, $out_file) = @ARGV;
+unless (defined $old and defined $new_a and defined $new_b)
+{
+ usageerr(g_('needs at least three arguments'));
+}
+unless (-e $old and -e $new_a and -e $new_b)
+{
+ usageerr(g_('file arguments need to exist'));
+}
+
+my ($cho, $cha, $chb);
+$cho = Dpkg::Changelog::Debian->new();
+$cho->load($old);
+$cha = Dpkg::Changelog::Debian->new();
+$cha->load($new_a);
+$chb = Dpkg::Changelog::Debian->new();
+$chb->load($new_b);
+
+my @o = reverse @$cho;
+my @a = reverse @$cha;
+my @b = reverse @$chb;
+
+my @result; # Lines to output
+my $exitcode = 0; # 1 if conflict encountered
+
+unless (merge_block($cho, $cha, $chb, sub {
+ my $changes = shift;
+ my $tail = $changes->get_unparsed_tail();
+ chomp $tail if defined $tail;
+ return $tail;
+ }))
+{
+ merge_conflict($cha->get_unparsed_tail(), $chb->get_unparsed_tail());
+}
+
+while (1) {
+ my ($o, $a, $b) = get_items_to_merge();
+ last unless defined $o or defined $a or defined $b;
+ next if merge_block($o, $a, $b);
+ # We only have the usually conflicting cases left
+ if (defined $a and defined $b) {
+ # Same entry, merge sub-items separately for a nicer result
+ merge_entries($o, $a, $b);
+ } else {
+ # Non-existing on one side, changed on the other side
+ merge_conflict($a, $b);
+ }
+}
+
+if (defined($out_file) and $out_file ne '-') {
+ open(my $out_fh, '>', $out_file)
+ or syserr(g_('cannot write %s'), $out_file);
+ print { $out_fh } ((blessed $_) ? "$_" : "$_\n") foreach @result;
+ close($out_fh) or syserr(g_('cannot write %s'), $out_file);
+} else {
+ print ((blessed $_) ? "$_" : "$_\n") foreach @result;
+}
+
+exit $exitcode;
+
+# Returns the next items to merge, all items returned correspond to the
+# same minimal version among the 3 possible next items (undef is returned
+# if the next item on the given changelog is skipped)
+sub get_items_to_merge {
+ my @items = (shift @o, shift @a, shift @b);
+ my @arrays = (\@o, \@a, \@b);
+ my $minitem;
+ foreach my $i (0 .. 2) {
+ if (defined $minitem and defined $items[$i]) {
+ my $cmp = compare_versions($minitem, $items[$i]);
+ if ($cmp > 0) {
+ $minitem = $items[$i];
+ foreach my $j (0 .. $i - 1) {
+ unshift @{$arrays[$j]}, $items[$j];
+ $items[$j] = undef;
+ }
+ } elsif ($cmp < 0) {
+ unshift @{$arrays[$i]}, $items[$i];
+ $items[$i] = undef;
+ }
+ } else {
+ $minitem = $items[$i] if defined $items[$i];
+ }
+ }
+ return @items;
+}
+
+# Compares the versions taking into account some oddities like the fact
+# that we want backport versions to sort higher than the version
+# on which they are based.
+sub compare_versions {
+ my ($a, $b) = @_;
+
+ return 0 if not defined $a and not defined $b;
+ return 1 if not defined $b;
+ return -1 if not defined $a;
+
+ my ($av, $bv) = ($a, $b);
+
+ $av = $a->get_version() if ref $a and $a->isa('Dpkg::Changelog::Entry');
+ $bv = $b->get_version() if ref $b and $b->isa('Dpkg::Changelog::Entry');
+
+ if ($merge_unreleased) {
+ return 0 if $a->get_distributions() eq 'UNRELEASED' and
+ $b->get_distributions() eq 'UNRELEASED';
+ }
+ # Backports are not real prereleases.
+ if (defined $backport_version_regex) {
+ $a =~ s/$backport_version_regex/+$1/;
+ $b =~ s/$backport_version_regex/+$1/;
+ }
+ if ($merge_prereleases) {
+ $av =~ s/~[^~]*$//;
+ $bv =~ s/~[^~]*$//;
+ }
+ $av = Dpkg::Version->new($av);
+ $bv = Dpkg::Version->new($bv);
+ return $av <=> $bv;
+}
+
+# Merge changelog entries smartly by merging individually the different
+# parts constituting an entry
+sub merge_entries($$$) {
+ my ($o, $a, $b) = @_;
+ # NOTE: Only $o can be undef
+
+ # Merge the trailer line
+ unless (merge_entry_item('blank_after_trailer', $o, $a, $b)) {
+ unshift @result, '';
+ }
+ unless (merge_entry_item('trailer', $o, $a, $b)) {
+ merge_conflict($a->get_part('trailer'), $b->get_part('trailer'));
+ }
+
+ # Merge the changes
+ unless (merge_entry_item('blank_after_changes', $o, $a, $b)) {
+ unshift @result, '';
+ }
+ my @merged = merge(defined $o ? $o->get_part('changes') : [],
+ $a->get_part('changes'), $b->get_part('changes'),
+ {
+ CONFLICT => sub {
+ my ($ca, $cb) = @_;
+ $exitcode = 1;
+ return get_conflict_block($ca, $cb);
+ }
+ });
+ unshift @result, @merged;
+
+ # Merge the header line
+ unless (merge_entry_item('blank_after_header', $o, $a, $b)) {
+ unshift @result, '';
+ }
+ unless (merge_entry_item('header', $o, $a, $b)) {
+ merge_conflict($a->get_part('header'), $b->get_part('header'));
+ }
+}
+
+sub join_lines($) {
+ my $array = shift;
+ return join("\n", @$array) if ref($array) eq 'ARRAY';
+ return $array;
+}
+
+# Try to merge the obvious cases, return 1 on success and 0 on failure
+# O A B
+# - x x => x
+# o o b => b
+# - - b => b
+# o a o => a
+# - a - => a
+sub merge_block($$$;&) {
+ my ($o, $a, $b, $preprocess) = @_;
+ $preprocess //= \&join_lines;
+ $o = $preprocess->($o) if defined $o;
+ $a = $preprocess->($a) if defined $a;
+ $b = $preprocess->($b) if defined $b;
+ return 1 if not defined($a) and not defined($b);
+ if (defined($a) and defined($b) and ($a eq $b)) {
+ unshift @result, $a;
+ } elsif ((defined($a) and defined($o) and ($a eq $o)) or
+ (not defined($a) and not defined($o))) {
+ unshift @result, $b if defined $b;
+ } elsif ((defined($b) and defined($o) and ($b eq $o)) or
+ (not defined($b) and not defined($o))) {
+ unshift @result, $a if defined $a;
+ } else {
+ return 0;
+ }
+ return 1;
+}
+
+sub merge_entry_item($$$$) {
+ my ($item, $o, $a, $b) = @_;
+ if (blessed($o) and $o->isa('Dpkg::Changelog::Entry')) {
+ $o = $o->get_part($item);
+ } elsif (ref $o) {
+ $o = $o->{$item};
+ }
+ if (blessed($a) and $a->isa('Dpkg::Changelog::Entry')) {
+ $a = $a->get_part($item);
+ } elsif (ref $a) {
+ $a = $a->{$item};
+ }
+ if (blessed($b) and $b->isa('Dpkg::Changelog::Entry')) {
+ $b = $b->get_part($item);
+ } elsif (ref $b) {
+ $b = $b->{$item};
+ }
+ return merge_block($o, $a, $b);
+}
+
+sub merge_conflict($$) {
+ my ($a, $b) = @_;
+ unshift @result, get_conflict_block($a, $b);
+ $exitcode = 1;
+}
+
+sub get_conflict_block($$) {
+ my ($a, $b) = @_;
+ my (@a, @b);
+ push @a, $a if defined $a;
+ push @b, $b if defined $b;
+ @a = @{$a} if ref($a) eq 'ARRAY';
+ @b = @{$b} if ref($b) eq 'ARRAY';
+ return ('<<<<<<<', @a, '=======', @b, '>>>>>>>');
+}
diff --git a/scripts/dpkg-name.pl b/scripts/dpkg-name.pl
new file mode 100755
index 0000000..0fc4b32
--- /dev/null
+++ b/scripts/dpkg-name.pl
@@ -0,0 +1,259 @@
+#!/usr/bin/perl
+#
+# dpkg-name
+#
+# Copyright © 1995,1996 Erick Branderhorst <branderh@debian.org>.
+# Copyright © 2006-2010, 2012-2015 Guillem Jover <guillem@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+use warnings;
+use strict;
+
+use List::Util qw(none);
+use File::Basename;
+use File::Path qw(make_path);
+
+use Dpkg ();
+use Dpkg::Gettext;
+use Dpkg::ErrorHandling;
+use Dpkg::Version;
+use Dpkg::Control;
+use Dpkg::Arch qw(get_host_arch);
+
+textdomain('dpkg-dev');
+
+my %options = (
+ subdir => 0,
+ destdir => '',
+ createdir => 0,
+ overwrite => 0,
+ symlink => 0,
+ architecture => 1,
+);
+
+sub version()
+{
+ printf(g_("Debian %s version %s.\n"), $Dpkg::PROGNAME, $Dpkg::PROGVERSION);
+}
+
+sub usage()
+{
+ printf(g_("Usage: %s [<option>...] <file>...\n"), $Dpkg::PROGNAME);
+
+ print(g_("
+Options:
+ -a, --no-architecture no architecture part in filename.
+ -o, --overwrite overwrite if file exists.
+ -k, --symlink don't create a new file, but a symlink.
+ -s, --subdir [dir] move file into subdirectory (use with care).
+ -c, --create-dir create target directory if not there (use with care).
+ -?, --help show this help message.
+ -v, --version show the version.
+
+file.deb changes to <package>_<version>_<architecture>.<package_type>
+according to the 'underscores convention'.
+"));
+}
+
+sub fileexists($)
+{
+ my $filename = shift;
+
+ if (-f $filename) {
+ return 1;
+ } else {
+ warning(g_("cannot find '%s'"), $filename);
+ return 0;
+ }
+}
+
+sub filesame($$)
+{
+ my ($a, $b) = @_;
+ my @sta = stat($a);
+ my @stb = stat($b);
+
+ # Same device and inode numbers.
+ return (@sta and @stb and $sta[0] == $stb[0] and $sta[1] == $stb[1]);
+}
+
+sub getfields($)
+{
+ my $filename = shift;
+
+ # Read the fields
+ open(my $cdata_fh, '-|', 'dpkg-deb', '-f', '--', $filename)
+ or syserr(g_('cannot open %s'), $filename);
+ my $fields = Dpkg::Control->new(type => CTRL_PKG_DEB);
+ $fields->parse($cdata_fh, sprintf(g_('binary control file %s'), $filename));
+ close($cdata_fh);
+
+ return $fields;
+}
+
+sub getarch($$)
+{
+ my ($filename, $fields) = @_;
+
+ my $arch = $fields->{Architecture};
+ if (not $fields->{Architecture} and $options{architecture}) {
+ $arch = get_host_arch();
+ warning(g_("assuming architecture '%s' for '%s'"), $arch, $filename);
+ }
+
+ return $arch;
+}
+
+sub getname($$$)
+{
+ my ($filename, $fields, $arch) = @_;
+
+ my $pkg = $fields->{Package};
+ my $v = Dpkg::Version->new($fields->{Version});
+ my $version = $v->as_string(omit_epoch => 1);
+ my $type = $fields->{'Package-Type'} || 'deb';
+
+ my $tname;
+ if ($options{architecture}) {
+ $tname = "$pkg\_$version\_$arch.$type";
+ } else {
+ $tname = "$pkg\_$version.$type";
+ }
+ (my $name = $tname) =~ s/ //g;
+ if ($tname ne $name) { # control fields have spaces
+ warning(g_("bad package control information for '%s'"), $filename);
+ }
+ return $name;
+}
+
+sub getdir($$$)
+{
+ my ($filename, $fields, $arch) = @_;
+ my $dir;
+
+ if (!$options{destdir}) {
+ $dir = dirname($filename);
+ if ($options{subdir}) {
+ my $section = $fields->{Section};
+ if (!$section) {
+ $section = 'no-section';
+ warning(g_("assuming section '%s' for '%s'"), $section,
+ $filename);
+ }
+ if (none { $section eq $_ } qw(no-section contrib non-free)) {
+ $dir = "unstable/binary-$arch/$section";
+ } else {
+ $dir = "$section/binary-$arch";
+ }
+ }
+ } else {
+ $dir = $options{destdir};
+ }
+
+ return $dir;
+}
+
+sub move($)
+{
+ my $filename = shift;
+
+ if (fileexists($filename)) {
+ my $fields = getfields($filename);
+
+ unless (exists $fields->{Package}) {
+ warning(g_("no Package field found in '%s', skipping package"),
+ $filename);
+ return;
+ }
+
+ my $arch = getarch($filename, $fields);
+
+ my $name = getname($filename, $fields, $arch);
+
+ my $dir = getdir($filename, $fields, $arch);
+ if (! -d $dir) {
+ if ($options{createdir}) {
+ if (make_path($dir)) {
+ info(g_("created directory '%s'"), $dir);
+ } else {
+ error(g_("cannot create directory '%s'"), $dir);
+ }
+ } else {
+ error(g_("no such directory '%s', try --create-dir (-c) option"),
+ $dir);
+ }
+ }
+
+ my $newname = "$dir/$name";
+
+ my @command;
+ if ($options{symlink}) {
+ @command = qw(ln -s --);
+ } else {
+ @command = qw(mv --);
+ }
+
+ if (filesame($newname, $filename)) {
+ warning(g_("skipping '%s'"), $filename);
+ } elsif (-f $newname and not $options{overwrite}) {
+ warning(g_("cannot move '%s' to existing file"), $filename);
+ } elsif (system(@command, $filename, $newname) == 0) {
+ info(g_("moved '%s' to '%s'"), basename($filename), $newname);
+ } else {
+ error(g_('mkdir can be used to create directory'));
+ }
+ }
+}
+
+my @files;
+
+while (@ARGV) {
+ $_ = shift(@ARGV);
+ if (m/^-\?|--help$/) {
+ usage();
+ exit(0);
+ } elsif (m/^-v|--version$/) {
+ version();
+ exit(0);
+ } elsif (m/^-c|--create-dir$/) {
+ $options{createdir} = 1;
+ } elsif (m/^-s|--subdir$/) {
+ $options{subdir} = 1;
+ if (-d $ARGV[0]) {
+ $options{destdir} = shift(@ARGV);
+ }
+ } elsif (m/^-o|--overwrite$/) {
+ $options{overwrite} = 1;
+ } elsif (m/^-k|--symlink$/) {
+ $options{symlink} = 1;
+ } elsif (m/^-a|--no-architecture$/) {
+ $options{architecture} = 0;
+ } elsif (m/^--$/) {
+ push @files, @ARGV;
+ last;
+ } elsif (m/^-/) {
+ usageerr(g_("unknown option '%s'"), $_);
+ } else {
+ push @files, $_;
+ }
+}
+
+@files or usageerr(g_('need at least a filename'));
+
+foreach my $file (@files) {
+ move($file);
+}
+
+0;
diff --git a/scripts/dpkg-parsechangelog.pl b/scripts/dpkg-parsechangelog.pl
new file mode 100755
index 0000000..939e610
--- /dev/null
+++ b/scripts/dpkg-parsechangelog.pl
@@ -0,0 +1,151 @@
+#!/usr/bin/perl
+#
+# dpkg-parsechangelog
+#
+# Copyright © 1996 Ian Jackson
+# Copyright © 2001 Wichert Akkerman
+# Copyright © 2006-2012 Guillem Jover <guillem@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use Dpkg ();
+use Dpkg::Gettext;
+use Dpkg::Getopt;
+use Dpkg::ErrorHandling;
+use Dpkg::Changelog::Parse;
+
+textdomain('dpkg-dev');
+
+my %options;
+my $fieldname;
+
+sub version {
+ printf g_("Debian %s version %s.\n"), $Dpkg::PROGNAME, $Dpkg::PROGVERSION;
+
+ printf g_('
+This is free software; see the GNU General Public License version 2 or
+later for copying conditions. There is NO warranty.
+');
+}
+
+sub usage {
+ printf g_(
+'Usage: %s [<option>...]')
+ . "\n\n" . g_(
+'Options:
+ -l, --file <changelog-file>
+ get per-version info from this file.
+ -F <changelog-format> force changelog format.
+ -S, --show-field <field> show the values for <field>.
+ -?, --help show this help message.
+ --version show the version.')
+ . "\n\n" . g_(
+"Parser options:
+ --format <output-format>
+ set output format (defaults to 'dpkg').
+ --reverse include all changes in reverse order.
+ --all include all changes.
+ -s, --since <version> include all changes later than <version>.
+ -v <version> ditto.
+ -u, --until <version> include all changes earlier than <version>.
+ -f, --from <version> include all changes equal or later than <version>.
+ -t, --to <version> include all changes up to or equal than <version>.
+ -c, --count <number> include <number> entries from the top (or tail
+ if <number> is lower than 0).
+ -n <number> ditto.
+ -o, --offset <number> change starting point for --count, counted from
+ the top (or tail if <number> is lower than 0).
+"), $Dpkg::PROGNAME;
+}
+
+@ARGV = normalize_options(args => \@ARGV, delim => '--');
+
+while (@ARGV) {
+ last unless $ARGV[0] =~ m/^-/;
+
+ my $arg = shift;
+
+ if ($arg eq '--') {
+ last;
+ } elsif ($arg eq '-L') {
+ warning(g_('-L is obsolete; it is without effect'));
+ } elsif ($arg eq '-F') {
+ $options{changelogformat} = shift;
+ usageerr(g_('bad changelog format name'))
+ unless length $options{changelogformat} and
+ $options{changelogformat} =~ m/^([0-9a-z]+)$/;
+ } elsif ($arg eq '--format') {
+ $options{format} = shift;
+ } elsif ($arg eq '--reverse') {
+ $options{reverse} = 1;
+ } elsif ($arg eq '-l' or $arg eq '--file') {
+ $options{file} = shift;
+ usageerr(g_('missing changelog filename'))
+ unless length $options{file};
+ } elsif ($arg eq '-S' or $arg eq '--show-field') {
+ $fieldname = shift;
+ } elsif ($arg eq '-c' or $arg eq '--count' or $arg eq '-n') {
+ $options{count} = shift;
+ } elsif ($arg eq '-f' or $arg eq '--from') {
+ $options{from} = shift;
+ } elsif ($arg eq '-o' or $arg eq '--offset') {
+ $options{offset} = shift;
+ } elsif ($arg eq '-s' or $arg eq '--since' or $arg eq '-v') {
+ $options{since} = shift;
+ } elsif ($arg eq '-t' or $arg eq '--to') {
+ $options{to} = shift;
+ } elsif ($arg eq '-u' or $arg eq '--until') {
+ ## no critic (ControlStructures::ProhibitUntilBlocks)
+ $options{until} = shift;
+ ## use critic
+ } elsif ($arg eq '--all') {
+ $options{all} = undef;
+ } elsif ($arg eq '-?' or $arg eq '--help') {
+ usage(); exit(0);
+ } elsif ($arg eq '--version') {
+ version(); exit(0);
+ } else {
+ usageerr(g_("unknown option '%s'"), $arg);
+ }
+}
+usageerr(g_('takes no non-option arguments')) if @ARGV;
+
+my $count = 0;
+my @fields = changelog_parse(%options);
+foreach my $f (@fields) {
+ print "\n" if $count++;
+ if ($fieldname) {
+ next if not exists $f->{$fieldname};
+
+ my ($first_line, @lines) = split /\n/, $f->{$fieldname};
+
+ my $v = '';
+ $v .= $first_line if length $first_line;
+ $v .= "\n";
+ foreach (@lines) {
+ s/\s+$//;
+ if (length == 0 or /^\.+$/) {
+ $v .= ".$_\n";
+ } else {
+ $v .= "$_\n";
+ }
+ }
+ print $v;
+ } else {
+ print $f->output();
+ }
+}
diff --git a/scripts/dpkg-scanpackages.pl b/scripts/dpkg-scanpackages.pl
new file mode 100755
index 0000000..2fa6e53
--- /dev/null
+++ b/scripts/dpkg-scanpackages.pl
@@ -0,0 +1,303 @@
+#!/usr/bin/perl
+#
+# dpkg-scanpackages
+#
+# Copyright © 2006-2015 Guillem Jover <guillem@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+use warnings;
+use strict;
+
+use Getopt::Long qw(:config posix_default bundling_values no_ignorecase);
+use List::Util qw(none);
+use File::Find;
+
+use Dpkg ();
+use Dpkg::Gettext;
+use Dpkg::ErrorHandling;
+use Dpkg::Control;
+use Dpkg::Version;
+use Dpkg::Checksums;
+use Dpkg::Compression::FileHandle;
+
+textdomain('dpkg-dev');
+
+# Do not pollute STDOUT with info messages
+report_options(info_fh => \*STDERR);
+
+my (@samemaint, @changedmaint);
+my @multi_instances;
+my @spuriousover;
+my %packages;
+my %overridden;
+my @checksums;
+
+my %options = (
+ help => sub { usage(); exit 0; },
+ version => sub { version(); exit 0; },
+ type => undef,
+ arch => undef,
+ hash => undef,
+ multiversion => 0,
+ 'extra-override' => undef,
+ medium => undef,
+);
+
+my @options_spec = (
+ 'help|?',
+ 'version',
+ 'type|t=s',
+ 'arch|a=s',
+ 'hash|h=s',
+ 'multiversion|m!',
+ 'extra-override|e=s',
+ 'medium|M=s',
+);
+
+sub version {
+ printf g_("Debian %s version %s.\n"), $Dpkg::PROGNAME, $Dpkg::PROGVERSION;
+}
+
+sub usage {
+ printf g_(
+"Usage: %s [<option>...] <binary-path> [<override-file> [<path-prefix>]] > Packages
+
+Options:
+ -t, --type <type> scan for <type> packages (default is 'deb').
+ -a, --arch <arch> architecture to scan for.
+ -h, --hash <hash-list> only generate hashes for the specified list.
+ -m, --multiversion allow multiple versions of a single package.
+ -e, --extra-override <file>
+ use extra override file.
+ -M, --medium <medium> add X-Medium field for dselect media access method
+ -?, --help show this help message.
+ --version show the version.
+"), $Dpkg::PROGNAME;
+}
+
+sub load_override
+{
+ my $override = shift;
+ my $comp_file = Dpkg::Compression::FileHandle->new(filename => $override);
+
+ while (<$comp_file>) {
+ s/\#.*//;
+ s/\s+$//;
+ next unless $_;
+
+ my ($p, $priority, $section, $maintainer) = split(/\s+/, $_, 4);
+
+ if (not defined($packages{$p})) {
+ push(@spuriousover, $p);
+ next;
+ }
+
+ for my $package (@{$packages{$p}}) {
+ if ($maintainer) {
+ if ($maintainer =~ m/(.+?)\s*=\>\s*(.+)/) {
+ my $oldmaint = $1;
+ my $newmaint = $2;
+ my $debmaint = $$package{Maintainer};
+ if (none { $debmaint eq $_ } split m{\s*//\s*}, $oldmaint) {
+ push(@changedmaint,
+ sprintf(g_(' %s (package says %s, not %s)'),
+ $p, $$package{Maintainer}, $oldmaint));
+ } else {
+ $$package{Maintainer} = $newmaint;
+ }
+ } elsif ($$package{Maintainer} eq $maintainer) {
+ push(@samemaint, " $p ($maintainer)");
+ } else {
+ warning(g_('unconditional maintainer override for %s'), $p);
+ $$package{Maintainer} = $maintainer;
+ }
+ }
+ $$package{Priority} = $priority;
+ $$package{Section} = $section;
+ }
+ $overridden{$p} = 1;
+ }
+
+ close($comp_file);
+}
+
+sub load_override_extra
+{
+ my $extra_override = shift;
+ my $comp_file = Dpkg::Compression::FileHandle->new(filename => $extra_override);
+
+ while (<$comp_file>) {
+ s/\#.*//;
+ s/\s+$//;
+ next unless $_;
+
+ my ($p, $field, $value) = split(/\s+/, $_, 3);
+
+ next unless defined($packages{$p});
+
+ for my $package (@{$packages{$p}}) {
+ $$package{$field} = $value;
+ }
+ }
+
+ close($comp_file);
+}
+
+sub process_deb {
+ my ($pathprefix, $fn) = @_;
+
+ my $fields = Dpkg::Control->new(type => CTRL_INDEX_PKG);
+
+ open my $output_fh, '-|', 'dpkg-deb', '-I', $fn, 'control'
+ or syserr(g_('cannot fork for %s'), 'dpkg-deb');
+ $fields->parse($output_fh, $fn)
+ or error(g_("couldn't parse control information from %s"), $fn);
+ close $output_fh;
+ if ($?) {
+ warning(g_("'dpkg-deb -I %s control' exited with %d, skipping package"),
+ $fn, $?);
+ return;
+ }
+
+ my $p = $fields->{'Package'};
+ error(g_('no Package field in control file of %s'), $fn)
+ if not defined $p;
+
+ if (defined($packages{$p}) and not $options{multiversion}) {
+ my $pkg = ${$packages{$p}}[0];
+
+ @multi_instances = ($pkg->{Filename}) if @multi_instances == 0;
+ push @multi_instances, "$pathprefix$fn";
+
+ if (version_compare_relation($fields->{'Version'}, REL_GT,
+ $pkg->{'Version'}))
+ {
+ warning(g_('package %s (filename %s) is repeat but newer ' .
+ 'version; used that one and ignored data from %s!'),
+ $p, $fn, $pkg->{Filename});
+ $packages{$p} = [];
+ } else {
+ warning(g_('package %s (filename %s) is repeat; ' .
+ 'ignored that one and using data from %s!'),
+ $p, $fn, $pkg->{Filename});
+ return;
+ }
+ }
+
+ warning(g_('package %s (filename %s) has Filename field!'), $p, $fn)
+ if defined($fields->{'Filename'});
+ $fields->{'Filename'} = "$pathprefix$fn";
+
+ my $sums = Dpkg::Checksums->new();
+ $sums->add_from_file($fn, checksums => \@checksums);
+ foreach my $alg (@checksums) {
+ if ($alg eq 'md5') {
+ $fields->{'MD5sum'} = $sums->get_checksum($fn, $alg);
+ } else {
+ $fields->{$alg} = $sums->get_checksum($fn, $alg);
+ }
+ }
+ $fields->{'Size'} = $sums->get_size($fn);
+ $fields->{'X-Medium'} = $options{medium} if defined $options{medium};
+
+ push @{$packages{$p}}, $fields;
+}
+
+{
+ local $SIG{__WARN__} = sub { usageerr($_[0]) };
+ GetOptions(\%options, @options_spec);
+}
+
+if (not (@ARGV >= 1 and @ARGV <= 3)) {
+ usageerr(g_('one to three arguments expected'));
+}
+
+my $type = $options{type} // 'deb';
+my $arch = $options{arch};
+my %hash = map { $_ => 1 } split /,/, $options{hash} // '';
+
+foreach my $alg (keys %hash) {
+ if (not checksums_is_supported($alg)) {
+ usageerr(g_('unsupported checksum \'%s\''), $alg);
+ }
+}
+@checksums = %hash ? keys %hash : checksums_get_list();
+
+my ($binarypath, $override, $pathprefix) = @ARGV;
+
+if (not -e $binarypath) {
+ error(g_('binary path %s not found'), $binarypath);
+}
+if (defined $override and not -e $override) {
+ error(g_('override file %s not found'), $override);
+}
+
+$pathprefix //= '';
+
+my $find_filter;
+if ($options{arch}) {
+ $find_filter = qr/_(?:all|${arch})\.$type$/;
+} else {
+ $find_filter = qr/\.$type$/;
+}
+my @archives;
+my $scan_archives = sub {
+ push @archives, $File::Find::name if m/$find_filter/;
+};
+
+find({ follow => 1, follow_skip => 2, wanted => $scan_archives}, $binarypath);
+foreach my $fn (@archives) {
+ process_deb($pathprefix, $fn);
+}
+
+load_override($override) if defined $override;
+load_override_extra($options{'extra-override'}) if defined $options{'extra-override'};
+
+my @missingover = ();
+
+my $records_written = 0;
+for my $p (sort keys %packages) {
+ if (defined($override) and not defined($overridden{$p})) {
+ push @missingover, $p;
+ }
+ for my $package (sort { $a->{Version} cmp $b->{Version} } @{$packages{$p}}) {
+ print("$package\n") or syserr(g_('failed when writing stdout'));
+ $records_written++;
+ }
+}
+close(STDOUT) or syserr(g_("couldn't close stdout"));
+
+if (@multi_instances) {
+ warning(g_('Packages with multiple instances but no --multiversion specified:'));
+ warning($_) foreach (sort @multi_instances);
+}
+if (@changedmaint) {
+ warning(g_('Packages in override file with incorrect old maintainer value:'));
+ warning($_) foreach (@changedmaint);
+}
+if (@samemaint) {
+ warning(g_('Packages specifying same maintainer as override file:'));
+ warning($_) foreach (@samemaint);
+}
+if (@missingover) {
+ warning(g_('Packages in archive but missing from override file:'));
+ warning(' %s', join(' ', @missingover));
+}
+if (@spuriousover) {
+ warning(g_('Packages in override file but not in archive:'));
+ warning(' %s', join(' ', @spuriousover));
+}
+
+info(g_('Wrote %s entries to output Packages file.'), $records_written);
diff --git a/scripts/dpkg-scansources.pl b/scripts/dpkg-scansources.pl
new file mode 100755
index 0000000..da19ba7
--- /dev/null
+++ b/scripts/dpkg-scansources.pl
@@ -0,0 +1,326 @@
+#!/usr/bin/perl
+#
+# Copyright © 1999 Roderick Schertler
+# Copyright © 2002 Wichert Akkerman <wakkerma@debian.org>
+# Copyright © 2006-2009, 2011-2015 Guillem Jover <guillem@debian.org>
+#
+# This program 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 of the License, or (at
+# your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use Getopt::Long qw(:config posix_default bundling_values no_ignorecase);
+use List::Util qw(any);
+use File::Find;
+
+use Dpkg ();
+use Dpkg::Gettext;
+use Dpkg::ErrorHandling;
+use Dpkg::Control;
+use Dpkg::Checksums;
+use Dpkg::Compression::FileHandle;
+use Dpkg::Compression;
+
+textdomain('dpkg-dev');
+
+# Hash of lists. The constants below describe what is in the lists.
+my %override;
+use constant {
+ O_PRIORITY => 0,
+ O_SECTION => 1,
+ O_MAINT_FROM => 2, # undef for non-specific, else listref
+ O_MAINT_TO => 3, # undef if there's no maint override
+};
+
+my %extra_override;
+
+my %priority = (
+ 'extra' => 1,
+ 'optional' => 2,
+ 'standard' => 3,
+ 'important' => 4,
+ 'required' => 5,
+);
+
+# Switches
+
+my $debug = 0;
+my $no_sort = 0;
+my $src_override = undef;
+my $extra_override_file = undef;
+my @sources;
+
+my @option_spec = (
+ 'debug!' => \$debug,
+ 'help|?' => sub { usage(); exit 0; },
+ 'version' => sub { version(); exit 0; },
+ 'no-sort|n' => \$no_sort,
+ 'source-override|s=s' => \$src_override,
+ 'extra-override|e=s' => \$extra_override_file,
+);
+
+sub version {
+ printf g_("Debian %s version %s.\n"), $Dpkg::PROGNAME, $Dpkg::PROGVERSION;
+}
+
+sub usage {
+ printf g_(
+"Usage: %s [<option>...] <binary-path> [<override-file> [<path-prefix>]] > Sources
+
+Options:
+ -n, --no-sort don't sort by package before outputting.
+ -e, --extra-override <file>
+ use extra override file.
+ -s, --source-override <file>
+ use file for additional source overrides, default
+ is regular override file with .src appended.
+ --debug turn debugging on.
+ -?, --help show this help message.
+ --version show the version.
+
+See the man page for the full documentation.
+"), $Dpkg::PROGNAME;
+}
+
+sub load_override {
+ my $file = shift;
+ local $_;
+
+ my $comp_file = Dpkg::Compression::FileHandle->new(filename => $file);
+ while (<$comp_file>) {
+ s/#.*//;
+ next if /^\s*$/;
+ s/\s+$//;
+
+ my @data = split ' ', $_, 4;
+ unless (@data == 3 || @data == 4) {
+ warning(g_('invalid override entry at line %d (%d fields)'),
+ $., 0 + @data);
+ next;
+ }
+ my ($package, $priority, $section, $maintainer) = @data;
+ if (exists $override{$package}) {
+ warning(g_('ignoring duplicate override entry for %s at line %d'),
+ $package, $.);
+ next;
+ }
+ if (!$priority{$priority}) {
+ warning(g_('ignoring override entry for %s, invalid priority %s'),
+ $package, $priority);
+ next;
+ }
+
+ $override{$package} = [];
+ $override{$package}[O_PRIORITY] = $priority;
+ $override{$package}[O_SECTION] = $section;
+ if (!defined $maintainer) {
+ # do nothing
+ } elsif ($maintainer =~ /^(.*\S)\s*=>\s*(.*)$/) {
+ $override{$package}[O_MAINT_FROM] = [split m{\s*//\s*}, $1];
+ $override{$package}[O_MAINT_TO] = $2;
+ } else {
+ $override{$package}[O_MAINT_TO] = $maintainer;
+ }
+ }
+ close($comp_file);
+}
+
+sub load_src_override {
+ my ($user_file, $regular_file) = @_;
+ my ($file);
+ local $_;
+
+ if (defined $user_file) {
+ $file = $user_file;
+ } elsif (defined $regular_file) {
+ my $comp = compression_guess_from_filename($regular_file);
+ if (defined($comp)) {
+ $file = $regular_file;
+ my $ext = compression_get_file_extension($comp);
+ $file =~ s/\.$ext$/.src.$ext/;
+ } else {
+ $file = "$regular_file.src";
+ }
+ return unless -e $file;
+ } else {
+ return;
+ }
+
+ debug(1, "source override file $file");
+ my $comp_file = Dpkg::Compression::FileHandle->new(filename => $file);
+ while (<$comp_file>) {
+ s/#.*//;
+ next if /^\s*$/;
+ s/\s+$//;
+
+ my @data = split ' ';
+ unless (@data == 2) {
+ warning(g_('invalid source override entry at line %d (%d fields)'),
+ $., 0 + @data);
+ next;
+ }
+
+ my ($package, $section) = @data;
+ my $key = "source/$package";
+ if (exists $override{$key}) {
+ warning(g_('ignoring duplicate source override entry for %s at line %d'),
+ $package, $.);
+ next;
+ }
+ $override{$key} = [];
+ $override{$key}[O_SECTION] = $section;
+ }
+ close($comp_file);
+}
+
+sub load_override_extra
+{
+ my $extra_override = shift;
+ my $comp_file = Dpkg::Compression::FileHandle->new(filename => $extra_override);
+
+ while (<$comp_file>) {
+ s/\#.*//;
+ s/\s+$//;
+ next unless $_;
+
+ my ($p, $field, $value) = split(/\s+/, $_, 3);
+ $extra_override{$p}{$field} = $value;
+ }
+ close($comp_file);
+}
+
+# Given PREFIX and DSC-FILE, process the file and returns the fields.
+
+sub process_dsc {
+ my ($prefix, $file) = @_;
+
+ my $basename = $file;
+ my $dir = ($basename =~ s{^(.*)/}{}) ? $1 : '';
+ $dir = "$prefix$dir";
+ $dir =~ s{/+$}{};
+ $dir = '.' if $dir eq '';
+
+ # Parse ‘.dsc’ file.
+ my $fields = Dpkg::Control->new(type => CTRL_PKG_SRC);
+ $fields->load($file);
+ $fields->set_options(type => CTRL_INDEX_SRC);
+
+ # Get checksums
+ my $checksums = Dpkg::Checksums->new();
+ $checksums->add_from_file($file, key => $basename);
+ $checksums->add_from_control($fields, use_files_for_md5 => 1);
+
+ my $source = $fields->{Source};
+ my @binary = split /\s*,\s*/, $fields->{Binary} // '';
+
+ error(g_('no binary packages specified in %s'), $file) unless (@binary);
+
+ # Rename the source field to package.
+ $fields->{Package} = $fields->{Source};
+ delete $fields->{Source};
+
+ # The priority for the source package is the highest priority of the
+ # binary packages it produces.
+ my @binary_by_priority = sort {
+ ($override{$a} ? $priority{$override{$a}[O_PRIORITY]} : 0)
+ <=>
+ ($override{$b} ? $priority{$override{$b}[O_PRIORITY]} : 0)
+ } @binary;
+ my $priority_override = $override{$binary_by_priority[-1]};
+ my $priority = $priority_override
+ ? $priority_override->[O_PRIORITY]
+ : undef;
+ $fields->{Priority} = $priority if defined $priority;
+
+ # For the section override, first check for a record from the source
+ # override file, else use the regular override file.
+ my $section_override = $override{"source/$source"} || $override{$source};
+ my $section = $section_override
+ ? $section_override->[O_SECTION]
+ : undef;
+ $fields->{Section} = $section if defined $section;
+
+ # For the maintainer override, use the override record for the first
+ # binary. Modify the maintainer if necessary.
+ my $maintainer_override = $override{$binary[0]};
+ if ($maintainer_override && defined $maintainer_override->[O_MAINT_TO]) {
+ if (!defined $maintainer_override->[O_MAINT_FROM] ||
+ any { $fields->{Maintainer} eq $_ }
+ @{ $maintainer_override->[O_MAINT_FROM] }) {
+ $fields->{Maintainer} = $maintainer_override->[O_MAINT_TO];
+ }
+ }
+
+ # Process extra override
+ if (exists $extra_override{$source}) {
+ my ($field, $value);
+ while (($field, $value) = each %{$extra_override{$source}}) {
+ $fields->{$field} = $value;
+ }
+ }
+
+ # A directory field will be inserted just before the files field.
+ $fields->{Directory} = $dir;
+
+ $checksums->export_to_control($fields, use_files_for_md5 => 1);
+
+ push @sources, $fields;
+}
+
+### Main
+
+{
+ local $SIG{__WARN__} = sub { usageerr($_[0]) };
+ GetOptions(@option_spec);
+}
+
+usageerr(g_('one to three arguments expected'))
+ if @ARGV < 1 or @ARGV > 3;
+
+push @ARGV, undef if @ARGV < 2;
+push @ARGV, '' if @ARGV < 3;
+my ($dir, $override, $prefix) = @ARGV;
+
+report_options(debug_level => $debug);
+
+load_override $override if defined $override;
+load_src_override $src_override, $override;
+load_override_extra $extra_override_file if defined $extra_override_file;
+
+my @dsc;
+my $scan_dsc = sub {
+ push @dsc, $File::Find::name if m/\.dsc$/;
+};
+
+find({ follow => 1, follow_skip => 2, wanted => $scan_dsc }, $dir);
+foreach my $fn (@dsc) {
+ # FIXME: Fix it instead to not die on syntax and general errors?
+ eval {
+ process_dsc($prefix, $fn);
+ };
+ if ($@) {
+ warn $@;
+ next;
+ }
+}
+
+if (not $no_sort) {
+ @sources = sort {
+ $a->{Package} . $a->{Version} cmp $b->{Package} . $b->{Version}
+ } @sources;
+}
+foreach my $dsc (@sources) {
+ $dsc->output(\*STDOUT);
+ print "\n";
+}
diff --git a/scripts/dpkg-shlibdeps.pl b/scripts/dpkg-shlibdeps.pl
new file mode 100755
index 0000000..557a66f
--- /dev/null
+++ b/scripts/dpkg-shlibdeps.pl
@@ -0,0 +1,936 @@
+#!/usr/bin/perl
+#
+# dpkg-shlibdeps
+#
+# Copyright © 1996 Ian Jackson
+# Copyright © 2000 Wichert Akkerman
+# Copyright © 2006 Frank Lichtenheld
+# Copyright © 2006-2010,2012-2015 Guillem Jover <guillem@debian.org>
+# Copyright © 2007, 2016 Raphaël Hertzog <hertzog@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+use feature qw(state);
+
+use List::Util qw(any none);
+use Cwd qw(realpath);
+use File::Basename qw(dirname);
+
+use Dpkg ();
+use Dpkg::Gettext;
+use Dpkg::ErrorHandling;
+use Dpkg::Path qw(relative_to_pkg_root guess_pkg_root_dir
+ check_files_are_the_same get_control_path);
+use Dpkg::Version;
+use Dpkg::Shlibs qw(find_library get_library_paths);
+use Dpkg::Shlibs::Objdump;
+use Dpkg::Shlibs::SymbolFile;
+use Dpkg::Substvars;
+use Dpkg::Arch qw(get_host_arch);
+use Dpkg::Deps;
+use Dpkg::Control::Info;
+use Dpkg::Control::Fields;
+
+
+use constant {
+ WARN_SYM_NOT_FOUND => 1,
+ WARN_DEP_AVOIDABLE => 2,
+ WARN_NOT_NEEDED => 4,
+};
+
+# By increasing importance
+my @depfields = qw(Suggests Recommends Depends Pre-Depends);
+my $i = 0; my %depstrength = map { $_ => $i++ } @depfields;
+
+textdomain('dpkg-dev');
+
+my $admindir = $Dpkg::ADMINDIR;
+my $shlibsoverride = "$Dpkg::CONFDIR/shlibs.override";
+my $shlibsdefault = "$Dpkg::CONFDIR/shlibs.default";
+my $shlibslocal = 'debian/shlibs.local';
+my $packagetype = 'deb';
+my $dependencyfield = 'Depends';
+my $varlistfile = 'debian/substvars';
+my $varlistfilenew;
+my $varnameprefix = 'shlibs';
+my $ignore_missing_info = 0;
+my $warnings = WARN_SYM_NOT_FOUND | WARN_DEP_AVOIDABLE;
+my $debug = 0;
+my @exclude = ();
+my @pkg_dir_to_search = ();
+my @pkg_dir_to_ignore = ();
+my $host_arch = get_host_arch();
+
+my (@pkg_shlibs, @pkg_symbols, @pkg_root_dirs);
+
+my ($stdout, %exec);
+foreach (@ARGV) {
+ if (m/^-T(.*)$/) {
+ $varlistfile = $1;
+ } elsif (m/^-p(\w[-:0-9A-Za-z]*)$/) {
+ $varnameprefix = $1;
+ } elsif (m/^-L(.*)$/) {
+ $shlibslocal = $1;
+ } elsif (m/^-l(.*)$/) {
+ Dpkg::Shlibs::add_library_dir($1);
+ } elsif (m/^-S(.*)$/) {
+ push @pkg_dir_to_search, $1;
+ } elsif (m/^-I(.*)$/) {
+ push @pkg_dir_to_ignore, $1;
+ } elsif (m/^-O$/) {
+ $stdout = 1;
+ } elsif (m/^-O(.+)$/) {
+ $varlistfile = $1;
+ } elsif (m/^-(?:\?|-help)$/) {
+ usage(); exit(0);
+ } elsif (m/^--version$/) {
+ version(); exit(0);
+ } elsif (m/^--admindir=(.*)$/) {
+ $admindir = $1;
+ if (not -d $admindir) {
+ error(g_("administrative directory '%s' does not exist"), $admindir);
+ }
+ $ENV{DPKG_ADMINDIR} = $admindir;
+ } elsif (m/^-d(.*)$/) {
+ $dependencyfield = field_capitalize($1);
+ if (not defined $depstrength{$dependencyfield}) {
+ warning(g_("unrecognized dependency field '%s'"), $dependencyfield);
+ }
+ } elsif (m/^-e(.*)$/) {
+ if (exists $exec{$1}) {
+ # Affect the binary to the most important field
+ if ($depstrength{$dependencyfield} > $depstrength{$exec{$1}}) {
+ $exec{$1} = $dependencyfield;
+ }
+ } else {
+ $exec{$1} = $dependencyfield;
+ }
+ } elsif (m/^--ignore-missing-info$/) {
+ $ignore_missing_info = 1;
+ } elsif (m/^--warnings=(\d+)$/) {
+ $warnings = $1;
+ } elsif (m/^-t(.*)$/) {
+ $packagetype = $1;
+ } elsif (m/^-v$/) {
+ $debug++;
+ } elsif (m/^-x(.*)$/) {
+ push @exclude, $1;
+ } elsif (m/^-/) {
+ usageerr(g_("unknown option '%s'"), $_);
+ } else {
+ if (exists $exec{$_}) {
+ # Affect the binary to the most important field
+ if ($depstrength{$dependencyfield} > $depstrength{$exec{$_}}) {
+ $exec{$_} = $dependencyfield;
+ }
+ } else {
+ $exec{$_} = $dependencyfield;
+ }
+ }
+}
+usageerr(g_('need at least one executable')) unless scalar keys %exec;
+
+report_options(debug_level => $debug);
+
+sub ignore_pkgdir {
+ my $path = shift;
+ return any { $path =~ /^\Q$_\E/ } @pkg_dir_to_ignore;
+}
+
+if (-d 'debian') {
+ push @pkg_symbols, grep { !ignore_pkgdir($_) } glob 'debian/*/DEBIAN/symbols';
+ push @pkg_shlibs, grep { !ignore_pkgdir($_) } glob 'debian/*/DEBIAN/shlibs';
+ my %uniq = map { guess_pkg_root_dir($_) => 1 } (@pkg_symbols, @pkg_shlibs);
+ push @pkg_root_dirs, keys %uniq;
+}
+
+my $control = Dpkg::Control::Info->new();
+my $fields = $control->get_source();
+my $bd_value = deps_concat($fields->{'Build-Depends'}, $fields->{'Build-Depends-Arch'});
+my $build_deps = deps_parse($bd_value, build_dep => 1, reduce_restrictions => 1);
+error(g_('cannot parse %s field'), 'Build-Depends/Build-Depends-Arch')
+ unless defined $build_deps;
+
+my %dependencies;
+
+# Statistics on soname seen in the whole run (with multiple analysis of
+# binaries)
+my %global_soname_notfound;
+my %global_soname_used;
+my %global_soname_needed;
+
+# Cached data.
+my %shlibs_cache;
+my %symfile_cache;
+my %objdump_cache;
+my %symfile_has_soname_cache;
+
+# Used to count errors due to missing libraries
+my $error_count = 0;
+
+my $cur_field;
+foreach my $file (keys %exec) {
+ $cur_field = $exec{$file};
+ debug(1, ">> Scanning $file (for $cur_field field)");
+
+ my $obj = Dpkg::Shlibs::Objdump::Object->new($file);
+ my @sonames = $obj->get_needed_libraries;
+
+ # Load symbols files for all needed libraries (identified by SONAME)
+ my %libfiles;
+ my %altlibfiles;
+ my %soname_libs;
+ my %soname_notfound;
+ my %alt_soname;
+ foreach my $soname (@sonames) {
+ my @libs = my_find_library($soname, $obj->{RPATH}, $obj->{exec_abi}, $file);
+ unless (scalar @libs) {
+ $soname_notfound{$soname} = 1;
+ $global_soname_notfound{$soname} = 1;
+ my $msg = g_('cannot find library %s needed by %s (ELF ' .
+ "format: '%s' abi: '%s'; RPATH: '%s')");
+ my $exec_abi = unpack 'H*', $obj->{exec_abi};
+ if (scalar(split_soname($soname))) {
+ errormsg($msg, $soname, $file, $obj->{format}, $exec_abi, join(':', @{$obj->{RPATH}}));
+ $error_count++;
+ } else {
+ warning($msg, $soname, $file, $obj->{format}, $exec_abi, join(':', @{$obj->{RPATH}}));
+ }
+ next;
+ }
+
+ # Track shared libraries for a given SONAME.
+ push @{$soname_libs{$soname}}, @libs;
+
+ # Track shared libraries for package mapping.
+ foreach my $lib (@libs) {
+ $libfiles{$lib} = $soname;
+ my $reallib = realpath($lib);
+ if ($reallib ne $lib) {
+ $altlibfiles{$reallib} = $soname;
+ }
+ debug(1, "Library $soname found in $lib");
+ }
+ }
+ my $file2pkg = find_packages(keys %libfiles, keys %altlibfiles);
+ my $symfile = Dpkg::Shlibs::SymbolFile->new();
+ my $dumplibs_wo_symfile = Dpkg::Shlibs::Objdump->new();
+ SONAME: foreach my $soname (@sonames) {
+ # Select the first good entry from the ordered list that we got from
+ # find_library(), and skip to the next SONAME.
+
+ foreach my $lib (@{$soname_libs{$soname}}) {
+ if (none { $_ ne '' } @{$file2pkg->{$lib}}) {
+ # The path of the library as calculated is not the
+ # official path of a packaged file, try to fallback on
+ # the realpath() first, maybe this one is part of a package
+ my $reallib = realpath($lib);
+ if (exists $file2pkg->{$reallib}) {
+ $file2pkg->{$lib} = $file2pkg->{$reallib};
+ }
+ }
+ if (none { $_ ne '' } @{$file2pkg->{$lib}}) {
+ # If the library is really not available in an installed package,
+ # it's because it's in the process of being built
+ # Empty package name will lead to consideration of symbols
+ # file from the package being built only
+ $file2pkg->{$lib} = [''];
+ debug(1, "No associated package found for $lib");
+ }
+
+ # Load symbols/shlibs files from packages providing libraries
+ my $missing_wanted_shlibs_info = 0;
+ foreach my $pkg (@{$file2pkg->{$lib}}) {
+ my $symfile_path;
+ my $haslocaldep = 0;
+ if (-e $shlibslocal and
+ defined(extract_from_shlibs($soname, $shlibslocal)))
+ {
+ $haslocaldep = 1;
+ }
+ if ($packagetype eq 'deb' and not $haslocaldep) {
+ # Use fine-grained dependencies only on real deb
+ # and only if the dependency is not provided by shlibs.local
+ $symfile_path = find_symbols_file($pkg, $soname, $lib);
+ }
+ if (defined($symfile_path)) {
+ # Load symbol information
+ debug(1, "Using symbols file $symfile_path for $soname");
+ $symfile_cache{$symfile_path} //=
+ Dpkg::Shlibs::SymbolFile->new(file => $symfile_path);
+ $symfile->merge_object_from_symfile($symfile_cache{$symfile_path}, $soname);
+ }
+ if (defined($symfile_path) && $symfile->has_object($soname)) {
+ # Initialize dependencies with the smallest minimal version
+ # of all symbols (unversioned dependency is not ok as the
+ # library might not have always been available in the
+ # package and we really need it)
+ my $dep = $symfile->get_dependency($soname);
+ my $minver = $symfile->get_smallest_version($soname) || '';
+ update_dependency_version($dep, $minver);
+ debug(2, " Minimal version of ($dep) initialized with ($minver)");
+
+ # Found a symbols file for the SONAME.
+ next SONAME;
+ } else {
+ # No symbol file found, fall back to standard shlibs
+ debug(1, "Using shlibs+objdump for $soname (file $lib)");
+ $objdump_cache{$lib} //= Dpkg::Shlibs::Objdump::Object->new($lib);
+ my $libobj = $objdump_cache{$lib};
+ my $id = $dumplibs_wo_symfile->add_object($libobj);
+ if (($id ne $soname) and ($id ne $lib)) {
+ warning(g_('%s has an unexpected SONAME (%s)'), $lib, $id);
+ $alt_soname{$id} = $soname;
+ }
+
+ # Only try to generate a dependency for libraries with a SONAME
+ if (not $libobj->is_public_library()) {
+ debug(1, "Skipping shlibs+objdump info for private library $lib");
+ next;
+ }
+
+ # If we found a shlibs file for the SONAME, skip to the next.
+ next SONAME if add_shlibs_dep($soname, $pkg, $lib);
+
+ $missing_wanted_shlibs_info = 1;
+
+ debug(1, "No shlibs+objdump info available, trying next package for $lib");
+ }
+ }
+
+ next if not $missing_wanted_shlibs_info;
+
+ # We will only reach this point, if we have found no symbols nor
+ # shlibs files for the given SONAME.
+
+ # This failure is fairly new, try to be kind by
+ # ignoring as many cases that can be safely ignored
+ my $ignore = 0;
+ # 1/ when the lib and the binary are in the same
+ # package
+ my $root_file = guess_pkg_root_dir($file);
+ my $root_lib = guess_pkg_root_dir($lib);
+ $ignore++ if defined $root_file and defined $root_lib
+ and check_files_are_the_same($root_file, $root_lib);
+ # 2/ when the lib is not versioned and can't be
+ # handled by shlibs
+ $ignore++ unless scalar split_soname($soname);
+ # 3/ when we have been asked to do so
+ $ignore++ if $ignore_missing_info;
+ error(g_('no dependency information found for %s ' .
+ "(used by %s)\n" .
+ 'Hint: check if the library actually comes ' .
+ 'from a package.'), $lib, $file)
+ unless $ignore;
+ }
+ }
+
+ # Scan all undefined symbols of the binary and resolve to a
+ # dependency
+ my %soname_used;
+ foreach my $soname (@sonames) {
+ # Initialize statistics
+ $soname_used{$soname} = 0;
+ $global_soname_used{$soname} //= 0;
+ if (exists $global_soname_needed{$soname}) {
+ push @{$global_soname_needed{$soname}}, $file;
+ } else {
+ $global_soname_needed{$soname} = [ $file ];
+ }
+ }
+ my $nb_warnings = 0;
+ my $nb_skipped_warnings = 0;
+ # Disable warnings about missing symbols when we have not been able to
+ # find all libs
+ my $disable_warnings = scalar(keys(%soname_notfound));
+ my $in_public_dir = 1;
+ if (my $relname = relative_to_pkg_root($file)) {
+ my $parent_dir = '/' . dirname($relname);
+ $in_public_dir = any { $parent_dir eq $_ } get_library_paths();
+ } else {
+ warning(g_('binaries to analyze should already be ' .
+ "installed in their package's directory"));
+ }
+ debug(2, 'Analyzing all undefined symbols');
+ foreach my $sym ($obj->get_undefined_dynamic_symbols()) {
+ my $name = $sym->{name};
+ if ($sym->{version}) {
+ $name .= '@' . "$sym->{version}";
+ } else {
+ $name .= '@' . 'Base';
+ }
+ debug(2, " Looking up symbol $name");
+ my %symdep = $symfile->lookup_symbol($name, \@sonames);
+ if (keys %symdep) {
+ my $depends = $symfile->get_dependency($symdep{soname},
+ $symdep{symbol}{dep_id});
+ debug(2, " Found in symbols file of $symdep{soname} (minver: " .
+ "$symdep{symbol}{minver}, dep: $depends)");
+ $soname_used{$symdep{soname}}++;
+ $global_soname_used{$symdep{soname}}++;
+ if (exists $alt_soname{$symdep{soname}}) {
+ # Also count usage on alternate soname
+ $soname_used{$alt_soname{$symdep{soname}}}++;
+ $global_soname_used{$alt_soname{$symdep{soname}}}++;
+ }
+ update_dependency_version($depends, $symdep{symbol}{minver});
+ } else {
+ my $syminfo = $dumplibs_wo_symfile->locate_symbol($name);
+ if (not defined($syminfo)) {
+ debug(2, ' Not found');
+ next unless ($warnings & WARN_SYM_NOT_FOUND);
+ next if $disable_warnings;
+ # Complain about missing symbols only for executables
+ # and public libraries
+ if ($obj->is_executable() or $obj->is_public_library()) {
+ my $print_name = $name;
+ # Drop the default suffix for readability
+ $print_name =~ s/\@Base$//;
+ unless ($sym->{weak}) {
+ if ($debug or ($in_public_dir and $nb_warnings < 10)
+ or (not $in_public_dir and $nb_warnings < 1))
+ {
+ if ($in_public_dir) {
+ warning(g_('symbol %s used by %s found in none of the ' .
+ 'libraries'), $print_name, $file);
+ } else {
+ warning(g_('%s contains an unresolvable reference to ' .
+ "symbol %s: it's probably a plugin"),
+ $file, $print_name);
+ }
+ $nb_warnings++;
+ } else {
+ $nb_skipped_warnings++;
+ }
+ }
+ }
+ } else {
+ debug(2, " Found in $syminfo->{soname} ($syminfo->{objid})");
+ if (exists $alt_soname{$syminfo->{soname}}) {
+ # Also count usage on alternate soname
+ $soname_used{$alt_soname{$syminfo->{soname}}}++;
+ $global_soname_used{$alt_soname{$syminfo->{soname}}}++;
+ }
+ $soname_used{$syminfo->{soname}}++;
+ $global_soname_used{$syminfo->{soname}}++;
+ }
+ }
+ }
+ warning(P_('%d similar warning has been skipped (use -v to see it)',
+ '%d other similar warnings have been skipped (use -v to see ' .
+ 'them all)', $nb_skipped_warnings), $nb_skipped_warnings)
+ if $nb_skipped_warnings;
+ foreach my $soname (@sonames) {
+ # Adjust minimal version of dependencies with information
+ # extracted from build-dependencies
+ my $dev_pkgs = $symfile->get_field($soname, 'Build-Depends-Packages') //
+ $symfile->get_field($soname, 'Build-Depends-Package');
+ foreach my $dev_pkg (split /[,\s]+/, $dev_pkgs // '') {
+ debug(1, "Updating dependencies of $soname with build-dependencies");
+ my $minver = get_min_version_from_deps($build_deps, $dev_pkg);
+ if (defined $minver) {
+ foreach my $dep ($symfile->get_dependencies($soname)) {
+ update_dependency_version($dep, $minver, 1);
+ debug(1, " Minimal version of $dep updated with $minver");
+ }
+ } else {
+ debug(1, " No minimal version found in $dev_pkg build-dependency");
+ }
+ }
+
+ # Warn about un-NEEDED libraries
+ unless ($soname_notfound{$soname} or $soname_used{$soname}) {
+ # Ignore warning for libm.so.6 if also linked against libstdc++
+ next if ($soname =~ /^libm\.so\.\d+$/ and
+ any { m/^libstdc\+\+\.so\.\d+/ } @sonames);
+ next unless ($warnings & WARN_NOT_NEEDED);
+ warning(g_('%s should not be linked against %s (it uses none of ' .
+ "the library's symbols)"), $file, $soname);
+ }
+ }
+}
+
+# Warn of unneeded libraries at the "package" level (i.e. over all
+# binaries that we have inspected)
+foreach my $soname (keys %global_soname_needed) {
+ unless ($global_soname_notfound{$soname} or $global_soname_used{$soname}) {
+ next if ($soname =~ /^libm\.so\.\d+$/ and
+ any { m/^libstdc\+\+\.so\.\d+/ } keys %global_soname_needed);
+ next unless ($warnings & WARN_DEP_AVOIDABLE);
+ warning(P_('package could avoid a useless dependency if %s was not ' .
+ "linked against %s (it uses none of the library's symbols)",
+ 'package could avoid a useless dependency if %s were not ' .
+ "linked against %s (they use none of the library's symbols)",
+ scalar @{$global_soname_needed{$soname}}),
+ join(' ', @{$global_soname_needed{$soname}}), $soname);
+ }
+}
+
+# Quit now if any missing libraries
+if ($error_count >= 1) {
+ my $note = g_('Note: libraries are not searched in other binary packages ' .
+ "that do not have any shlibs or symbols file.\n" .
+ 'To help dpkg-shlibdeps find private libraries, you might ' .
+ 'need to use -l.');
+ error(P_('cannot continue due to the error above',
+ 'cannot continue due to the errors listed above',
+ $error_count) . "\n" . $note);
+}
+
+# Open substvars file
+
+my $substvars = Dpkg::Substvars->new();
+if ($stdout) {
+ $varlistfilenew = '-';
+} else {
+ $substvars->load($varlistfile) if -e $varlistfile;
+ $substvars->filter(remove => sub { $_[0] =~ m/^\Q$varnameprefix\E:/ });
+
+ $varlistfilenew = "$varlistfile.new";
+}
+
+# Write out the shlibs substvars
+my %depseen;
+
+sub filter_deps {
+ my ($dep, $field) = @_;
+ # Skip dependencies on excluded packages
+ foreach my $exc (@exclude) {
+ return 0 if $dep =~ /^\s*\Q$exc\E\b/;
+ }
+ # Don't include dependencies if they are already
+ # mentioned in a higher priority field
+ if (not exists($depseen{$dep})) {
+ $depseen{$dep} = $dependencies{$field}{$dep};
+ return 1;
+ } else {
+ # Since dependencies can be versioned, we have to
+ # verify if the dependency is stronger than the
+ # previously seen one
+ my $stronger;
+ if ($depseen{$dep} eq $dependencies{$field}{$dep}) {
+ # If both versions are the same (possibly unversioned)
+ $stronger = 0;
+ } elsif ($dependencies{$field}{$dep} eq '') {
+ $stronger = 0; # If the dep is unversioned
+ } elsif ($depseen{$dep} eq '') {
+ $stronger = 1; # If the dep seen is unversioned
+ } elsif (version_compare_relation($depseen{$dep}, REL_GT,
+ $dependencies{$field}{$dep})) {
+ # The version of the dep seen is stronger...
+ $stronger = 0;
+ } else {
+ $stronger = 1;
+ }
+ $depseen{$dep} = $dependencies{$field}{$dep} if $stronger;
+ return $stronger;
+ }
+}
+
+foreach my $field (reverse @depfields) {
+ my $dep = '';
+ if (exists $dependencies{$field} and scalar keys %{$dependencies{$field}}) {
+ $dep = join ', ',
+ map {
+ # Translate dependency templates into real dependencies
+ my $templ = $_;
+ if ($dependencies{$field}{$templ}->is_valid() and
+ $dependencies{$field}{$templ}->as_string()) {
+ $templ =~ s/#MINVER#/(>= $dependencies{$field}{$templ})/g;
+ } else {
+ $templ =~ s/#MINVER#//g;
+ }
+ $templ =~ s/\s+/ /g;
+ $templ;
+ } grep {
+ filter_deps($_, $field)
+ } keys %{$dependencies{$field}};
+ }
+ if ($dep) {
+ my $obj = deps_parse($dep);
+ error(g_('invalid dependency got generated: %s'), $dep) unless defined $obj;
+ $obj->sort();
+ $substvars->set_as_used("$varnameprefix:$field", "$obj");
+ }
+}
+
+$substvars->save($varlistfilenew);
+
+# Replace old file by new one
+if (!$stdout) {
+ rename $varlistfilenew, $varlistfile
+ or syserr(g_("install new varlist file '%s'"), $varlistfile);
+}
+
+##
+## Functions
+##
+
+sub version {
+ printf g_("Debian %s version %s.\n"), $Dpkg::PROGNAME, $Dpkg::PROGVERSION;
+
+ printf g_('
+This is free software; see the GNU General Public License version 2 or
+later for copying conditions. There is NO warranty.
+');
+}
+
+sub usage {
+ printf g_(
+'Usage: %s [<option>...] <executable>|-e<executable> [<option>...]')
+ . "\n\n" . g_(
+"Positional options (order is significant):
+ <executable> include dependencies for <executable>,
+ -e<executable> (use -e if <executable> starts with '-')
+ -d<dependency-field> next executable(s) set shlibs:<dependency-field>.")
+ . "\n\n" . g_(
+"Options:
+ -l<library-dir> add directory to private shared library search list.
+ -p<varname-prefix> set <varname-prefix>:* instead of shlibs:*.
+ -O[<file>] write variable settings to stdout (or <file>).
+ -L<local-shlibs-file> shlibs override file, not debian/shlibs.local.
+ -T<substvars-file> update variables here, not debian/substvars.
+ -t<type> set package type (default is deb).
+ -x<package> exclude package from the generated dependencies.
+ -S<package-build-dir> search needed libraries in the given
+ package build directory first.
+ -I<package-build-dir> ignore needed libraries, shlibs and symbols files
+ in the given build directory.
+ -v enable verbose mode (can be used multiple times).
+ --ignore-missing-info don't fail if dependency information can't be found.
+ --warnings=<value> define set of active warnings (see manual page).
+ --admindir=<directory> change the administrative directory.
+ -?, --help show this help message.
+ --version show the version.")
+ . "\n\n" . g_(
+'Dependency fields recognized are:
+ %s
+'), $Dpkg::PROGNAME, join('/', @depfields);
+}
+
+sub get_min_version_from_deps {
+ my ($dep, $pkg) = @_;
+ if ($dep->isa('Dpkg::Deps::Simple')) {
+ if (($dep->{package} eq $pkg) &&
+ defined($dep->{relation}) &&
+ (($dep->{relation} eq REL_GE) ||
+ ($dep->{relation} eq REL_GT)))
+ {
+ return $dep->{version};
+ }
+ return;
+ } else {
+ my $res;
+ foreach my $subdep ($dep->get_deps()) {
+ my $minver = get_min_version_from_deps($subdep, $pkg);
+ next if not defined $minver;
+ if (defined $res) {
+ if (version_compare_relation($minver, REL_GT, $res)) {
+ $res = $minver;
+ }
+ } else {
+ $res = $minver;
+ }
+ }
+ return $res;
+ }
+}
+
+sub update_dependency_version {
+ my ($dep, $minver, $existing_only) = @_;
+ return if not defined($minver);
+ $minver = Dpkg::Version->new($minver);
+ foreach my $subdep (split /\s*,\s*/, $dep) {
+ if (exists $dependencies{$cur_field}{$subdep} and
+ defined($dependencies{$cur_field}{$subdep}))
+ {
+ if ($dependencies{$cur_field}{$subdep} eq '' or $minver ne '' and
+ version_compare_relation($minver, REL_GT,
+ $dependencies{$cur_field}{$subdep}))
+ {
+ $dependencies{$cur_field}{$subdep} = $minver;
+ }
+ } elsif (!$existing_only) {
+ $dependencies{$cur_field}{$subdep} = $minver;
+ }
+ }
+}
+
+sub add_shlibs_dep {
+ my ($soname, $pkg, $libfile) = @_;
+ my @shlibs = ($shlibslocal, $shlibsoverride);
+ if ($pkg eq '') {
+ # If the file is not packaged, try to find out the shlibs file in
+ # the package being built where the lib has been found
+ my $pkg_root = guess_pkg_root_dir($libfile);
+ if (defined $pkg_root) {
+ push @shlibs, "$pkg_root/DEBIAN/shlibs";
+ }
+ # Fallback to other shlibs files but it shouldn't be necessary
+ push @shlibs, @pkg_shlibs;
+ } else {
+ my $control_file = get_control_path($pkg, 'shlibs');
+ push @shlibs, $control_file if defined $control_file;
+ }
+ push @shlibs, $shlibsdefault;
+ debug(1, " Looking up shlibs dependency of $soname provided by '$pkg'");
+ foreach my $file (@shlibs) {
+ next if not -e $file;
+ my $dep = extract_from_shlibs($soname, $file);
+ if (defined($dep)) {
+ debug(1, " Found $dep in $file");
+ foreach (split(/,\s*/, $dep)) {
+ # Note: the value is empty for shlibs based dependency
+ # symbol based dependency will put a valid version as value
+ $dependencies{$cur_field}{$_} = Dpkg::Version->new('');
+ }
+ return 1;
+ }
+ }
+ debug(1, ' Found nothing');
+ return 0;
+}
+
+sub split_soname {
+ my $soname = shift;
+
+ if ($soname =~ /^(.+)\.so\.(.+)$/) {
+ # Shared library with stable <name>.so.<version> format.
+ return wantarray ? ($1, $2) : 1;
+ } elsif ($soname =~ /^(.+)-(\d.*)\.so$/) {
+ # Shared library/module with unstable <name>-<version>.so format.
+ return wantarray ? ($1, $2) : 1;
+ } else {
+ # Something else.
+ return wantarray ? () : 0;
+ }
+}
+
+sub extract_from_shlibs {
+ my ($soname, $shlibfile) = @_;
+
+ if (exists $shlibs_cache{$shlibfile}{$soname}) {
+ return $shlibs_cache{$shlibfile}{$soname};
+ }
+
+ my $shlibs_re = qr{
+ ^\s*
+ (?:(\S+):\s+)? # Optional type
+ (\S+)\s+ # Library
+ (\S+) # Version
+ (?:
+ \s+
+ (\S.*\S) # Dependencies
+ )?
+ \s*$
+ }x;
+
+ # Split soname in name/version
+ my ($libname, $libversion) = split_soname($soname);
+ unless (defined $libname) {
+ warning(g_("can't extract name and version from library name '%s'"),
+ $soname);
+ $shlibs_cache{$shlibfile}{$soname} = undef;
+ return;
+ }
+ # Open shlibs file
+ open(my $shlibs_fh, '<', $shlibfile)
+ or syserr(g_("unable to open shared libs info file '%s'"), $shlibfile);
+ my $dep;
+ while (<$shlibs_fh>) {
+ s/\s*\n$//;
+ next if m/^\#/;
+ if (!m/$shlibs_re/) {
+ warning(g_("shared libs info file '%s' line %d: bad line '%s'"),
+ $shlibfile, $., $_);
+ next;
+ }
+ my $depread = $4 // '';
+ if (($libname eq $2) && ($libversion eq $3)) {
+ # Define dep and end here if the package type explicitly
+ # matches. Otherwise if the packagetype is not specified, use
+ # the dep only as a default that can be overridden by a later
+ # line
+ if (defined($1)) {
+ if ($1 eq $packagetype) {
+ $dep = $depread;
+ last;
+ }
+ } else {
+ $dep //= $depread;
+ }
+ }
+ }
+ close($shlibs_fh);
+ $shlibs_cache{$shlibfile}{$soname} = $dep;
+ return $dep;
+}
+
+sub find_symbols_file {
+ my ($pkg, $soname, $libfile) = @_;
+ my @files;
+ if ($pkg eq '') {
+ # If the file is not packaged, try to find out the symbols file in
+ # the package being built where the lib has been found
+ my $pkg_root = guess_pkg_root_dir($libfile);
+ if (defined $pkg_root) {
+ push @files, "$pkg_root/DEBIAN/symbols";
+ }
+ # Fallback to other symbols files but it shouldn't be necessary
+ push @files, @pkg_symbols;
+ } else {
+ push @files, "$Dpkg::CONFDIR/symbols/$pkg.symbols.$host_arch",
+ "$Dpkg::CONFDIR/symbols/$pkg.symbols";
+
+ state %control_file_cache;
+ if (not exists $control_file_cache{$pkg}) {
+ $control_file_cache{$pkg} = get_control_path($pkg, 'symbols');
+ }
+ my $control_file = $control_file_cache{$pkg};
+ push @files, $control_file if defined $control_file;
+ }
+
+ foreach my $file (@files) {
+ if (-e $file and symfile_has_soname($file, $soname)) {
+ return $file;
+ }
+ }
+ return;
+}
+
+sub symfile_has_soname {
+ my ($file, $soname) = @_;
+
+ if (exists $symfile_has_soname_cache{$file}{$soname}) {
+ return $symfile_has_soname_cache{$file}{$soname};
+ }
+
+ open(my $symfile_fh, '<', $file)
+ or syserr(g_('cannot open file %s'), $file);
+ my $result = 0;
+ while (<$symfile_fh>) {
+ if (/^\Q$soname\E /) {
+ $result = 1;
+ last;
+ }
+ }
+ close($symfile_fh);
+ $symfile_has_soname_cache{$file}{$soname} = $result;
+ return $result;
+}
+
+# find_library ($soname, \@rpath, $format)
+sub my_find_library {
+ my ($lib, $rpath, $format, $execfile) = @_;
+
+ # Create real RPATH in case $ORIGIN is used
+ # Note: ld.so also supports $PLATFORM and $LIB but they are
+ # used in real case (yet)
+ my $libdir = relative_to_pkg_root($execfile);
+ my $origin;
+ if (defined $libdir) {
+ $origin = "/$libdir";
+ $origin =~ s{/+[^/]*$}{};
+ }
+ my @RPATH = ();
+ foreach my $path (@{$rpath}) {
+ if ($path =~ /\$ORIGIN|\$\{ORIGIN\}/) {
+ if (defined $origin) {
+ $path =~ s/\$ORIGIN/$origin/g;
+ $path =~ s/\$\{ORIGIN\}/$origin/g;
+ } else {
+ warning(g_('$ORIGIN is used in RPATH of %s and the corresponding ' .
+ 'directory could not be identified due to lack of DEBIAN ' .
+ "sub-directory in the root of package's build tree"), $execfile);
+ }
+ }
+ push @RPATH, $path;
+ }
+
+ # Look into the packages we're currently building in the following
+ # order:
+ # - package build tree of the binary which is analyzed
+ # - package build tree given on the command line (option -S)
+ # - other package build trees that contain either a shlibs or a
+ # symbols file
+ # But ignore:
+ # - package build tree given on the command line (option -I)
+
+ my @builddirs;
+ my $pkg_root = guess_pkg_root_dir($execfile);
+ push @builddirs, $pkg_root if defined $pkg_root;
+ push @builddirs, @pkg_dir_to_search;
+ push @builddirs, @pkg_root_dirs;
+ my %dir_checked;
+ foreach my $builddir (@builddirs) {
+ next if defined($dir_checked{$builddir});
+ next if ignore_pkgdir($builddir);
+ my @libs = find_library($lib, \@RPATH, $format, $builddir);
+ return @libs if scalar @libs;
+ $dir_checked{$builddir} = 1;
+ }
+
+ # Fallback in the root directory if we have not found what we were
+ # looking for in the packages
+ return find_library($lib, \@RPATH, $format, '');
+}
+
+my %cached_pkgmatch = ();
+
+sub find_packages {
+ my @files;
+ my $pkgmatch = {};
+
+ foreach my $path (@_) {
+ if (exists $cached_pkgmatch{$path}) {
+ $pkgmatch->{$path} = $cached_pkgmatch{$path};
+ } else {
+ push @files, $path;
+ $cached_pkgmatch{$path} = ['']; # placeholder to cache misses too.
+ $pkgmatch->{$path} = ['']; # might be replaced later on
+ }
+ }
+ return $pkgmatch unless scalar(@files);
+
+ my $pid = open(my $dpkg_fh, '-|');
+ syserr(g_('cannot fork for %s'), 'dpkg-query --search') unless defined $pid;
+ if (!$pid) {
+ # Child process running dpkg --search and discarding errors
+ close STDERR;
+ open STDERR, '>', '/dev/null'
+ or syserr(g_('cannot open file %s'), '/dev/null');
+ $ENV{LC_ALL} = 'C';
+ exec 'dpkg-query', '--search', '--', @files
+ or syserr(g_('unable to execute %s'), 'dpkg');
+ }
+ while (<$dpkg_fh>) {
+ chomp;
+ if (m/^local diversion |^diversion by/) {
+ warning(g_('diversions involved - output may be incorrect'));
+ print { *STDERR } " $_\n"
+ or syserr(g_('write diversion info to stderr'));
+ } elsif (m/^([-a-z0-9+.:, ]+): (\/.*)$/) {
+ my ($pkgs, $path) = ($1, $2);
+ my $realpath = realpath($path);
+ $cached_pkgmatch{$path} = $pkgmatch->{$path} = [ split /, /, $pkgs ];
+ $cached_pkgmatch{$realpath} = $pkgmatch->{$realpath} = [ split /, /, $pkgs ];
+ } else {
+ warning(g_("unknown output from dpkg --search: '%s'"), $_);
+ }
+ }
+ close($dpkg_fh);
+ return $pkgmatch;
+}
diff --git a/scripts/dpkg-source.pl b/scripts/dpkg-source.pl
new file mode 100755
index 0000000..63caeb2
--- /dev/null
+++ b/scripts/dpkg-source.pl
@@ -0,0 +1,671 @@
+#!/usr/bin/perl
+#
+# dpkg-source
+#
+# Copyright © 1996 Ian Jackson <ijackson@chiark.greenend.org.uk>
+# Copyright © 1997 Klee Dienes <klee@debian.org>
+# Copyright © 1999-2003 Wichert Akkerman <wakkerma@debian.org>
+# Copyright © 1999 Ben Collins <bcollins@debian.org>
+# Copyright © 2000-2003 Adam Heath <doogie@debian.org>
+# Copyright © 2005 Brendan O'Dea <bod@debian.org>
+# Copyright © 2006-2008 Frank Lichtenheld <djpig@debian.org>
+# Copyright © 2006-2009,2012 Guillem Jover <guillem@debian.org>
+# Copyright © 2008-2011 Raphaël Hertzog <hertzog@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use List::Util qw(any none);
+use Cwd;
+use File::Basename;
+use File::Spec;
+
+use Dpkg ();
+use Dpkg::Gettext;
+use Dpkg::ErrorHandling;
+use Dpkg::Arch qw(:operators);
+use Dpkg::Deps;
+use Dpkg::Compression;
+use Dpkg::Conf;
+use Dpkg::Control::Info;
+use Dpkg::Control::Tests;
+use Dpkg::Control::Fields;
+use Dpkg::Substvars;
+use Dpkg::Version;
+use Dpkg::Vars;
+use Dpkg::Changelog::Parse;
+use Dpkg::Source::Format;
+use Dpkg::Source::Package qw(get_default_diff_ignore_regex
+ set_default_diff_ignore_regex
+ get_default_tar_ignore_pattern);
+use Dpkg::Vendor qw(run_vendor_hook);
+
+textdomain('dpkg-dev');
+
+my $controlfile;
+my $changelogformat;
+
+my $build_format;
+my %options = (
+ # Ignore files
+ tar_ignore => [],
+ diff_ignore_regex => '',
+ # Misc options
+ copy_orig_tarballs => 1,
+ no_check => 0,
+ no_overwrite_dir => 1,
+ require_valid_signature => 0,
+ require_strong_checksums => 0,
+);
+
+# Fields to remove/override
+my %remove;
+my %override;
+
+my $substvars = Dpkg::Substvars->new();
+my $tar_ignore_default_pattern_done;
+my $diff_ignore_regex = get_default_diff_ignore_regex();
+
+my @options;
+my @cmdline_options;
+while (@ARGV && $ARGV[0] =~ m/^-/) {
+ my $arg = shift @ARGV;
+
+ if ($arg eq '-b' or $arg eq '--build') {
+ setopmode('build');
+ } elsif ($arg eq '-x' or $arg eq '--extract') {
+ setopmode('extract');
+ } elsif ($arg eq '--before-build') {
+ setopmode('before-build');
+ } elsif ($arg eq '--after-build') {
+ setopmode('after-build');
+ } elsif ($arg eq '--commit') {
+ setopmode('commit');
+ } elsif ($arg eq '--print-format') {
+ setopmode('print-format');
+ report_options(info_fh => \*STDERR); # Avoid clutter on STDOUT
+ } else {
+ push @options, $arg;
+ }
+}
+
+my $dir;
+if (defined($options{opmode}) &&
+ $options{opmode} =~ /^(build|print-format|(before|after)-build|commit)$/) {
+ if (not scalar(@ARGV)) {
+ usageerr(g_('--%s needs a directory'), $options{opmode})
+ unless $1 eq 'commit';
+ $dir = '.';
+ } else {
+ $dir = File::Spec->catdir(shift(@ARGV));
+ }
+ stat($dir) or syserr(g_('cannot stat directory %s'), $dir);
+ if (not -d $dir) {
+ error(g_('directory argument %s is not a directory'), $dir);
+ }
+ if ($dir eq '.') {
+ # . is never correct, adjust automatically
+ $dir = basename(getcwd());
+ chdir '..' or syserr(g_("unable to chdir to '%s'"), '..');
+ }
+ # --format options are not allowed, they would take precedence
+ # over real command line options, debian/source/format should be used
+ # instead
+ # --unapply-patches is only allowed in local-options as it's a matter
+ # of personal taste and the default should be to keep patches applied
+ my $forbidden_opts_re = {
+ 'options' => qr/^--(?:format=|unapply-patches$|abort-on-upstream-changes$)/,
+ 'local-options' => qr/^--format=/,
+ };
+ foreach my $filename ('local-options', 'options') {
+ my $conf = Dpkg::Conf->new();
+ my $optfile = File::Spec->catfile($dir, 'debian', 'source', $filename);
+ next unless -f $optfile;
+ $conf->load($optfile);
+ $conf->filter(remove => sub { $_[0] =~ $forbidden_opts_re->{$filename} });
+ if (@$conf) {
+ info(g_('using options from %s: %s'), $optfile, join(' ', @$conf))
+ unless $options{opmode} eq 'print-format';
+ unshift @options, @$conf;
+ }
+ }
+}
+
+while (@options) {
+ $_ = shift(@options);
+ if (m/^--format=(.*)$/) {
+ $build_format //= $1;
+ } elsif (m/^-(?:Z|-compression=)(.*)$/) {
+ my $compression = $1;
+ $options{compression} = $compression;
+ usageerr(g_('%s is not a supported compression'), $compression)
+ unless compression_is_supported($compression);
+ compression_set_default($compression);
+ } elsif (m/^-(?:z|-compression-level=)(.*)$/) {
+ my $comp_level = $1;
+ $options{comp_level} = $comp_level;
+ usageerr(g_('%s is not a compression level'), $comp_level)
+ unless compression_is_valid_level($comp_level);
+ compression_set_default_level($comp_level);
+ } elsif (m/^--threads-max=(.*)$/) {
+ my $threads = $1;
+ $options{comp_threads} = $threads;
+ compression_set_threads($threads);
+ } elsif (m/^-c(.*)$/) {
+ $controlfile = $1;
+ } elsif (m/^-l(.*)$/) {
+ $options{changelog_file} = $1;
+ } elsif (m/^-F([0-9a-z]+)$/) {
+ $changelogformat = $1;
+ } elsif (m/^-D([^\=:]+)[=:](.*)$/s) {
+ $override{$1} = $2;
+ } elsif (m/^-U([^\=:]+)$/) {
+ $remove{$1} = 1;
+ } elsif (m/^--diff-ignore$/) {
+ $options{diff_ignore_regex} = $diff_ignore_regex;
+ } elsif (m/^-(?:i|-diff-ignore=)(.*)$/) {
+ $options{diff_ignore_regex} = $1 ? $1 : $diff_ignore_regex;
+ } elsif (m/^--extend-diff-ignore=(.+)$/) {
+ $diff_ignore_regex .= "|$1";
+ if ($options{diff_ignore_regex}) {
+ $options{diff_ignore_regex} .= "|$1";
+ }
+ set_default_diff_ignore_regex($diff_ignore_regex);
+ } elsif (m/^-(?:I|-tar-ignore=)(.+)$/) {
+ push @{$options{tar_ignore}}, $1;
+ } elsif (m/^-(?:I|-tar-ignore)$/) {
+ unless ($tar_ignore_default_pattern_done) {
+ push @{$options{tar_ignore}}, get_default_tar_ignore_pattern();
+ # Prevent adding multiple times
+ $tar_ignore_default_pattern_done = 1;
+ }
+ } elsif (m/^--no-copy$/) {
+ $options{copy_orig_tarballs} = 0;
+ } elsif (m/^--no-check$/) {
+ $options{no_check} = 1;
+ } elsif (m/^--no-overwrite-dir$/) {
+ $options{no_overwrite_dir} = 1;
+ } elsif (m/^--require-valid-signature$/) {
+ $options{require_valid_signature} = 1;
+ } elsif (m/^--require-strong-checksums$/) {
+ $options{require_strong_checksums} = 1;
+ } elsif (m/^-V(\w[-:0-9A-Za-z]*)[=:](.*)$/s) {
+ $substvars->set($1, $2);
+ } elsif (m/^-T(.*)$/) {
+ $substvars->load($1) if -e $1;
+ } elsif (m/^-(?:\?|-help)$/) {
+ usage();
+ exit(0);
+ } elsif (m/^--version$/) {
+ version();
+ exit(0);
+ } elsif (m/^-[EW]$/) {
+ # Deprecated option
+ warning(g_('-E and -W are deprecated, they are without effect'));
+ } elsif (m/^-q$/) {
+ report_options(quiet_warnings => 1);
+ $options{quiet} = 1;
+ } elsif (m/^--$/) {
+ last;
+ } else {
+ push @cmdline_options, $_;
+ }
+}
+
+unless (defined($options{opmode})) {
+ usageerr(g_('need an action option'));
+}
+
+if ($options{opmode} =~ /^(build|print-format|(before|after)-build|commit)$/) {
+ $options{ARGV} = \@ARGV;
+ $options{changelog_file} ||= "$dir/debian/changelog";
+ $controlfile ||= "$dir/debian/control";
+
+ my %ch_options = (file => $options{changelog_file});
+ $ch_options{changelogformat} = $changelogformat if $changelogformat;
+ my $changelog = changelog_parse(%ch_options);
+ my $control = Dpkg::Control::Info->new($controlfile);
+
+ # <https://reproducible-builds.org/specs/source-date-epoch/>
+ $ENV{SOURCE_DATE_EPOCH} ||= $changelog->{timestamp} || time;
+
+ # Select the format to use
+ if (not defined $build_format) {
+ my $format_file = "$dir/debian/source/format";
+ if (-e $format_file) {
+ my $format = Dpkg::Source::Format->new(filename => $format_file);
+ $build_format = $format->get();
+ } else {
+ warning(g_('no source format specified in %s, ' .
+ 'see dpkg-source(1)'), 'debian/source/format')
+ if $options{opmode} eq 'build';
+ $build_format = '1.0';
+ }
+ }
+
+ my $srcpkg = Dpkg::Source::Package->new(format => $build_format,
+ options => \%options);
+ my $fields = $srcpkg->{fields};
+
+ $srcpkg->parse_cmdline_options(@cmdline_options);
+
+ my @sourcearch;
+ my %archadded;
+ my @binarypackages;
+
+ # Scan control info of source package
+ my $src_fields = $control->get_source();
+ error(g_("%s doesn't contain any information about the source package"),
+ $controlfile) unless defined $src_fields;
+ my $src_sect = $src_fields->{'Section'} || 'unknown';
+ my $src_prio = $src_fields->{'Priority'} || 'unknown';
+ foreach (keys %{$src_fields}) {
+ my $v = $src_fields->{$_};
+ if (m/^Source$/i) {
+ set_source_package($v);
+ $fields->{$_} = $v;
+ } elsif (m/^Uploaders$/i) {
+ ($fields->{$_} = $v) =~ s/\s*[\r\n]\s*/ /g; # Merge in a single-line
+ } elsif (m/^Build-(?:Depends|Conflicts)(?:-Arch|-Indep)?$/i) {
+ my $dep;
+ my $type = field_get_dep_type($_);
+ $dep = deps_parse($v, build_dep => 1, union => $type eq 'union');
+ error(g_('cannot parse %s field'), $_) unless defined $dep;
+ my $facts = Dpkg::Deps::KnownFacts->new();
+ $dep->simplify_deps($facts);
+ $dep->sort() if $type eq 'union';
+ $fields->{$_} = $dep->output();
+ } else {
+ field_transfer_single($src_fields, $fields);
+ }
+ }
+
+ # Scan control info of binary packages
+ my @pkglist;
+ foreach my $pkg ($control->get_packages()) {
+ my $p = $pkg->{'Package'};
+ my $sect = $pkg->{'Section'} || $src_sect;
+ my $prio = $pkg->{'Priority'} || $src_prio;
+ my $type = $pkg->{'Package-Type'} ||
+ $pkg->get_custom_field('Package-Type') || 'deb';
+ my $arch = $pkg->{'Architecture'};
+ my $profile = $pkg->{'Build-Profiles'};
+
+ my $pkg_summary = sprintf('%s %s %s %s', $p, $type, $sect, $prio);
+
+ $pkg_summary .= ' arch=' . join ',', split ' ', $arch;
+
+ if (defined $profile) {
+ # Instead of splitting twice and then joining twice, we just do
+ # simple string replacements:
+
+ # Remove the enclosing <>
+ $profile =~ s/^\s*<(.*)>\s*$/$1/;
+ # Join lists with a plus (OR)
+ $profile =~ s/>\s+</+/g;
+ # Join their elements with a comma (AND)
+ $profile =~ s/\s+/,/g;
+ $pkg_summary .= " profile=$profile";
+ }
+ if (defined $pkg->{'Protected'} and $pkg->{'Protected'} eq 'yes') {
+ $pkg_summary .= ' protected=yes';
+ }
+ if (defined $pkg->{'Essential'} and $pkg->{'Essential'} eq 'yes') {
+ $pkg_summary .= ' essential=yes';
+ }
+
+ push @pkglist, $pkg_summary;
+ push @binarypackages, $p;
+ foreach (keys %{$pkg}) {
+ my $v = $pkg->{$_};
+ if (m/^Architecture$/) {
+ # Gather all binary architectures in one set. 'any' and 'all'
+ # are special-cased as they need to be the only ones in the
+ # current stanza if present.
+ if (debarch_eq($v, 'any') || debarch_eq($v, 'all')) {
+ push(@sourcearch, $v) unless $archadded{$v}++;
+ } else {
+ for my $a (split(/\s+/, $v)) {
+ error(g_("'%s' is not a legal architecture string " .
+ "in package '%s'"), $a, $p)
+ if debarch_is_illegal($a);
+ error(g_('architecture %s only allowed on its ' .
+ "own (list for package %s is '%s')"),
+ $a, $p, $a)
+ if $a eq 'any' or $a eq 'all';
+ push(@sourcearch, $a) unless $archadded{$a}++;
+ }
+ }
+ } elsif (m/^(?:Homepage|Description)$/) {
+ # Do not overwrite the same field from the source entry
+ } else {
+ field_transfer_single($pkg, $fields);
+ }
+ }
+ }
+ unless (scalar(@pkglist)) {
+ error(g_("%s doesn't list any binary package"), $controlfile);
+ }
+ if (any { $_ eq 'any' } @sourcearch) {
+ # If we encounter one 'any' then the other arches become insignificant
+ # except for 'all' that must also be kept
+ if (any { $_ eq 'all' } @sourcearch) {
+ @sourcearch = qw(any all);
+ } else {
+ @sourcearch = qw(any);
+ }
+ } else {
+ # Minimize arch list, by removing arches already covered by wildcards
+ my @arch_wildcards = grep { debarch_is_wildcard($_) } @sourcearch;
+ my @mini_sourcearch = @arch_wildcards;
+ foreach my $arch (@sourcearch) {
+ if (none { debarch_is($arch, $_) } @arch_wildcards) {
+ push @mini_sourcearch, $arch;
+ }
+ }
+ @sourcearch = @mini_sourcearch;
+ }
+ $fields->{'Architecture'} = join(' ', @sourcearch);
+ $fields->{'Package-List'} = "\n" . join("\n", sort @pkglist);
+
+ # Check if we have a testsuite, and handle manual and automatic values.
+ set_testsuite_fields($fields, @binarypackages);
+
+ # Scan fields of dpkg-parsechangelog
+ foreach (keys %{$changelog}) {
+ my $v = $changelog->{$_};
+
+ if (m/^Source$/) {
+ set_source_package($v);
+ $fields->{$_} = $v;
+ } elsif (m/^Version$/) {
+ my ($ok, $error) = version_check($v);
+ error($error) unless $ok;
+ $fields->{$_} = $v;
+ } elsif (m/^Binary-Only$/) {
+ error(g_('building source for a binary-only release'))
+ if $v eq 'yes' and $options{opmode} eq 'build';
+ } elsif (m/^Maintainer$/i) {
+ # Do not replace the field coming from the source entry
+ } else {
+ field_transfer_single($changelog, $fields);
+ }
+ }
+
+ $fields->{'Binary'} = join(', ', @binarypackages);
+ # Avoid overly long line by splitting over multiple lines
+ if (length($fields->{'Binary'}) > 980) {
+ $fields->{'Binary'} =~ s/(.{0,980}), ?/$1,\n/g;
+ }
+
+ if ($options{opmode} eq 'print-format') {
+ print $fields->{'Format'} . "\n";
+ exit(0);
+ } elsif ($options{opmode} eq 'before-build') {
+ $srcpkg->before_build($dir);
+ exit(0);
+ } elsif ($options{opmode} eq 'after-build') {
+ $srcpkg->after_build($dir);
+ exit(0);
+ } elsif ($options{opmode} eq 'commit') {
+ $srcpkg->commit($dir);
+ exit(0);
+ }
+
+ # Verify pre-requisites are met
+ my ($res, $msg) = $srcpkg->can_build($dir);
+ error(g_("can't build with source format '%s': %s"), $build_format, $msg) unless $res;
+
+ # Only -b left
+ info(g_("using source format '%s'"), $fields->{'Format'});
+ run_vendor_hook('before-source-build', $srcpkg);
+ # Build the files (.tar.gz, .diff.gz, etc)
+ $srcpkg->build($dir);
+
+ # Write the .dsc
+ my $dscname = $srcpkg->get_basename(1) . '.dsc';
+ info(g_('building %s in %s'), get_source_package(), $dscname);
+ $srcpkg->write_dsc(filename => $dscname,
+ remove => \%remove,
+ override => \%override,
+ substvars => $substvars);
+ exit(0);
+} elsif ($options{opmode} eq 'extract') {
+ # Check command line
+ unless (scalar(@ARGV)) {
+ usageerr(g_('--%s needs at least one argument, the .dsc'),
+ $options{opmode});
+ }
+ if (scalar(@ARGV) > 2) {
+ usageerr(g_('--%s takes no more than two arguments'), $options{opmode});
+ }
+ my $dsc = shift(@ARGV);
+ if (-d $dsc) {
+ usageerr(g_('--%s needs the .dsc file as first argument, not a directory'),
+ $options{opmode});
+ }
+
+ # Create the object that does everything
+ my $srcpkg = Dpkg::Source::Package->new(filename => $dsc,
+ options => \%options);
+
+ # Parse command line options
+ $srcpkg->parse_cmdline_options(@cmdline_options);
+
+ # Decide where to unpack
+ my $newdirectory = $srcpkg->get_basename();
+ $newdirectory =~ s/_/-/g;
+ if (@ARGV) {
+ $newdirectory = File::Spec->catdir(shift(@ARGV));
+ if (-e $newdirectory) {
+ error(g_('unpack target exists: %s'), $newdirectory);
+ }
+ }
+
+ # Various checks before unpacking
+ unless ($options{no_check}) {
+ if ($srcpkg->is_signed()) {
+ $srcpkg->check_signature();
+ } else {
+ if ($options{require_valid_signature}) {
+ error(g_("%s doesn't contain a valid OpenPGP signature"), $dsc);
+ } else {
+ warning(g_('extracting unsigned source package (%s)'), $dsc);
+ }
+ }
+ $srcpkg->check_checksums();
+ }
+
+ # Unpack the source package (delegated to Dpkg::Source::Package::*)
+ info(g_('extracting %s in %s'), $srcpkg->{fields}{'Source'}, $newdirectory);
+ $srcpkg->extract($newdirectory);
+
+ exit(0);
+}
+
+sub set_testsuite_fields
+{
+ my ($fields, @binarypackages) = @_;
+
+ my $testsuite_field = $fields->{'Testsuite'} // '';
+ my %testsuite = map { $_ => 1 } split /\s*,\s*/, $testsuite_field;
+ if (-e "$dir/debian/tests/control") {
+ error(g_('test control %s is not a regular file'),
+ 'debian/tests/control') unless -f _;
+ $testsuite{autopkgtest} = 1;
+
+ my $tests = Dpkg::Control::Tests->new();
+ $tests->load("$dir/debian/tests/control");
+
+ set_testsuite_triggers_field($tests, $fields, @binarypackages);
+ } elsif ($testsuite{autopkgtest}) {
+ warning(g_('%s field contains value %s, but no tests control file %s'),
+ 'Testsuite', 'autopkgtest', 'debian/tests/control');
+ delete $testsuite{autopkgtest};
+ }
+ $fields->{'Testsuite'} = join ', ', sort keys %testsuite;
+}
+
+sub set_testsuite_triggers_field
+{
+ my ($tests, $fields, @binarypackages) = @_;
+ my %testdeps;
+
+ # Never overwrite a manually defined field.
+ return if $fields->{'Testsuite-Triggers'};
+
+ foreach my $test ($tests->get()) {
+ if (not exists $test->{Tests} and not exists $test->{'Test-Command'}) {
+ error(g_('test control %s is missing %s or %s field'),
+ 'debian/tests/control', 'Tests', 'Test-Command');
+ }
+
+ next unless $test->{Depends};
+
+ my $deps = deps_parse($test->{Depends}, use_arch => 0, tests_dep => 1);
+ deps_iterate($deps, sub { $testdeps{$_[0]->{package}} = 1 });
+ }
+
+ # Remove our own binaries and its meta-depends variant.
+ foreach my $pkg (@binarypackages, qw(@)) {
+ delete $testdeps{$pkg};
+ }
+ $fields->{'Testsuite-Triggers'} = join ', ', sort keys %testdeps;
+}
+
+sub setopmode {
+ my $opmode = shift;
+
+ if (defined($options{opmode})) {
+ usageerr(g_('two commands specified: --%s and --%s'),
+ $options{opmode}, $opmode);
+ }
+ $options{opmode} = $opmode;
+}
+
+sub print_option {
+ my $opt = shift;
+
+ my $help = gettext($opt->{help});
+ if (length $opt->{name} > 25) {
+ return sprintf " %-25s\n%s%s.\n", $opt->{name}, ' ' x 27, $help;
+ } else {
+ return sprintf " %-25s%s.\n", $opt->{name}, $help;
+ }
+}
+
+sub get_format_help {
+ $build_format //= '1.0';
+
+ my $srcpkg = Dpkg::Source::Package->new(format => $build_format);
+
+ my @cmdline = $srcpkg->describe_cmdline_options();
+ return '' unless @cmdline;
+
+ my $help_build = my $help_extract = '';
+ my $help;
+
+ foreach my $opt (@cmdline) {
+ $help_build .= print_option($opt) if $opt->{when} eq 'build';
+ $help_extract .= print_option($opt) if $opt->{when} eq 'extract';
+ }
+
+ if ($help_build) {
+ $help .= "\n";
+ $help .= "Build format $build_format options:\n";
+ $help .= $help_build || C_('source options', '<none>');
+ }
+ if ($help_extract) {
+ $help .= "\n";
+ $help .= "Extract format $build_format options:\n";
+ $help .= $help_extract || C_('source options', '<none>');
+ }
+
+ return $help;
+}
+
+sub version {
+ printf g_("Debian %s version %s.\n"), $Dpkg::PROGNAME, $Dpkg::PROGVERSION;
+
+ print g_('
+This is free software; see the GNU General Public License version 2 or
+later for copying conditions. There is NO warranty.
+');
+}
+
+sub usage {
+ printf g_(
+'Usage: %s [<option>...] <command>')
+ . "\n\n" . g_(
+'Commands:
+ -x, --extract <filename>.dsc [<output-dir>]
+ extract source package.
+ -b, --build <dir> build source package.
+ --print-format <dir> print the format to be used for the source package.
+ --before-build <dir> run the corresponding source package format hook.
+ --after-build <dir> run the corresponding source package format hook.
+ --commit [<dir> [<patch-name>]]
+ store upstream changes in a new patch.')
+ . "\n\n" . g_(
+"Build options:
+ -c<control-file> get control info from this file.
+ -l<changelog-file> get per-version info from this file.
+ -F<changelog-format> force changelog format.
+ --format=<source-format> set the format to be used for the source package.
+ -V<name>=<value> set a substitution variable.
+ -T<substvars-file> read variables here.
+ -D<field>=<value> override or add a .dsc field and value.
+ -U<field> remove a field.
+ -i, --diff-ignore[=<regex>]
+ filter out files to ignore diffs of
+ (defaults to: '%s').
+ -I, --tar-ignore[=<pattern>]
+ filter out files when building tarballs
+ (defaults to: %s).
+ -Z, --compression=<compression>
+ select compression to use (defaults to '%s',
+ supported are: %s).
+ -z, --compression-level=<level>
+ compression level to use (defaults to '%d',
+ supported are: '1'-'9', 'best', 'fast')")
+ . "\n\n" . g_(
+"Extract options:
+ --no-copy don't copy .orig tarballs
+ --no-check don't check signature and checksums before unpacking
+ --no-overwrite-dir do not overwrite directory on extraction
+ --require-valid-signature abort if the package doesn't have a valid signature
+ --require-strong-checksums
+ abort if the package contains no strong checksums
+ --ignore-bad-version allow bad source package versions.")
+ . "\n" .
+ get_format_help()
+ . "\n" . g_(
+'General options:
+ --threads-max=<threads>
+ use at most <threads> with compressor.
+ -q quiet mode.
+ -?, --help show this help message.
+ --version show the version.')
+ . "\n\n" . g_(
+'Source format specific build and extract options are available;
+use --format with --help to see them.') . "\n",
+ $Dpkg::PROGNAME,
+ get_default_diff_ignore_regex(),
+ join(' ', map { "-I$_" } get_default_tar_ignore_pattern()),
+ compression_get_default(),
+ join(' ', compression_get_list()),
+ compression_get_default_level();
+}
diff --git a/scripts/dpkg-vendor.pl b/scripts/dpkg-vendor.pl
new file mode 100755
index 0000000..a3887ec
--- /dev/null
+++ b/scripts/dpkg-vendor.pl
@@ -0,0 +1,108 @@
+#!/usr/bin/perl
+#
+# dpkg-vendor
+#
+# Copyright © 2009 Raphaël Hertzog <hertzog@debian.org>
+# Copyright © 2009,2012 Guillem Jover <guillem@debian.org>
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use Dpkg ();
+use Dpkg::Gettext;
+use Dpkg::ErrorHandling;
+use Dpkg::Vendor qw(get_vendor_dir get_vendor_info get_current_vendor);
+
+textdomain('dpkg-dev');
+
+sub version {
+ printf g_("Debian %s version %s.\n"), $Dpkg::PROGNAME, $Dpkg::PROGVERSION;
+
+ printf g_('
+This is free software; see the GNU General Public License version 2 or
+later for copying conditions. There is NO warranty.
+');
+}
+
+sub usage {
+ printf g_(
+'Usage: %s [<option>...] [<command>]')
+ . "\n\n" . g_(
+'Commands:
+ --is <vendor> returns true if current vendor is <vendor>.
+ --derives-from <vendor> returns true if current vendor derives from <vendor>.
+ --query <field> print the content of the vendor-specific field.
+ --help show this help message.
+ --version show the version.')
+ . "\n\n" . g_(
+'Options:
+ --vendor <vendor> assume <vendor> is the current vendor.')
+ . "\n", $Dpkg::PROGNAME;
+}
+
+my ($vendor, $param, $action);
+
+while (@ARGV) {
+ $_ = shift(@ARGV);
+ if (m/^--vendor$/) {
+ $vendor = shift(@ARGV);
+ usageerr(g_('%s needs a parameter'), $_) unless defined $vendor;
+ } elsif (m/^--(is|derives-from|query)$/) {
+ usageerr(g_('two commands specified: --%s and --%s'), $1, $action)
+ if defined($action);
+ $action = $1;
+ $param = shift(@ARGV);
+ usageerr(g_('%s needs a parameter'), $_) unless defined $param;
+ } elsif (m/^-(?:\?|-help)$/) {
+ usage();
+ exit 0;
+ } elsif (m/^--version$/) {
+ version();
+ exit 0;
+ } else {
+ usageerr(g_("unknown option '%s'"), $_);
+ }
+}
+
+usageerr(g_('need an action option')) unless defined($action);
+
+# Uses $ENV{DEB_VENDOR} if set
+$vendor //= get_current_vendor();
+
+my $info = get_vendor_info($vendor);
+unless (defined($info)) {
+ error(g_("vendor %s doesn't exist in %s"), $vendor || 'default',
+ get_vendor_dir());
+}
+
+if ($action eq 'is') {
+ exit(0) if lc($param) eq lc($info->{'Vendor'});
+ exit(1);
+} elsif ($action eq 'derives-from') {
+ exit(0) if lc($param) eq lc($info->{'Vendor'});
+ while (defined($info) && exists $info->{'Parent'}) {
+ $info = get_vendor_info($info->{'Parent'});
+ exit(0) if lc($param) eq lc($info->{'Vendor'});
+ }
+ exit(1);
+} elsif ($action eq 'query') {
+ if (exists $info->{$param}) {
+ print $info->{$param} . "\n";
+ exit(0);
+ } else {
+ exit(1);
+ }
+}
diff --git a/scripts/mk/Makefile.am b/scripts/mk/Makefile.am
new file mode 100644
index 0000000..a82e409
--- /dev/null
+++ b/scripts/mk/Makefile.am
@@ -0,0 +1,27 @@
+## Process this file with automake to produce Makefile.in
+
+dist_pkgdata_DATA = \
+ architecture.mk \
+ buildflags.mk \
+ buildopts.mk \
+ buildtools.mk \
+ default.mk \
+ pkg-info.mk \
+ vendor.mk \
+ # EOL
+
+SUFFIXES =
+
+include $(top_srcdir)/build-aux/subst.am
+
+# Ideally we'd use '$(SED) -i', but unfortunately that's not portable.
+install-data-hook:
+ $(do_make_subst) <$(DESTDIR)$(pkgdatadir)/default.mk \
+ >$(DESTDIR)$(pkgdatadir)/default.mk.new
+ mv $(DESTDIR)$(pkgdatadir)/default.mk.new \
+ $(DESTDIR)$(pkgdatadir)/default.mk
+
+ $(do_make_subst) <$(DESTDIR)$(pkgdatadir)/buildtools.mk \
+ >$(DESTDIR)$(pkgdatadir)/buildtools.mk.new
+ mv $(DESTDIR)$(pkgdatadir)/buildtools.mk.new \
+ $(DESTDIR)$(pkgdatadir)/buildtools.mk
diff --git a/scripts/mk/Makefile.in b/scripts/mk/Makefile.in
new file mode 100644
index 0000000..a34a4b7
--- /dev/null
+++ b/scripts/mk/Makefile.in
@@ -0,0 +1,648 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+#
+# Build time variable substitution for generated files.
+#
+
+# Shell support.
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = scripts/mk
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/dpkg-arch.m4 \
+ $(top_srcdir)/m4/dpkg-build.m4 \
+ $(top_srcdir)/m4/dpkg-compiler.m4 \
+ $(top_srcdir)/m4/dpkg-coverage.m4 \
+ $(top_srcdir)/m4/dpkg-funcs.m4 $(top_srcdir)/m4/dpkg-libs.m4 \
+ $(top_srcdir)/m4/dpkg-linker.m4 $(top_srcdir)/m4/dpkg-progs.m4 \
+ $(top_srcdir)/m4/dpkg-types.m4 \
+ $(top_srcdir)/m4/dpkg-unicode.m4 $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(dist_pkgdata_DATA) \
+ $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+am__installdirs = "$(DESTDIR)$(pkgdatadir)"
+DATA = $(dist_pkgdata_DATA)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in \
+ $(top_srcdir)/build-aux/subst.am
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOM4TE = @AUTOM4TE@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_DEVEL_DOCS = @BUILD_DEVEL_DOCS@
+BZ2_LIBS = @BZ2_LIBS@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CURSES_LIBS = @CURSES_LIBS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOXYGEN = @DOXYGEN@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GCOV = @GCOV@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_DOT = @HAVE_DOT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+KVM_LIBS = @KVM_LIBS@
+LCOV = @LCOV@
+LCOV_GENHTML = @LCOV_GENHTML@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+LZMA_LIBS = @LZMA_LIBS@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MD_LIBS = @MD_LIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGMERGE = @MSGMERGE@
+MSGMERGE_FOR_MSGFMT_OPTION = @MSGMERGE_FOR_MSGFMT_OPTION@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_BUG_WEB = @PACKAGE_BUG_WEB@
+PACKAGE_COPYRIGHT_HOLDER = @PACKAGE_COPYRIGHT_HOLDER@
+PACKAGE_CPAN_NAME = @PACKAGE_CPAN_NAME@
+PACKAGE_DIST_IS_RELEASE = @PACKAGE_DIST_IS_RELEASE@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_RELEASE_DATE = @PACKAGE_RELEASE_DATE@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VCS_TYPE = @PACKAGE_VCS_TYPE@
+PACKAGE_VCS_URL = @PACKAGE_VCS_URL@
+PACKAGE_VCS_WEB = @PACKAGE_VCS_WEB@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATCH = @PATCH@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+PERL_COVER = @PERL_COVER@
+PERL_COVERAGE = @PERL_COVERAGE@
+PERL_LIBDIR = @PERL_LIBDIR@
+PERL_MIN_VERSION = @PERL_MIN_VERSION@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+PO4A = @PO4A@
+POD2MAN = @POD2MAN@
+POSUB = @POSUB@
+PS_LIBS = @PS_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SOCKET_LIBS = @SOCKET_LIBS@
+STRIP = @STRIP@
+TAR = @TAR@
+USE_NLS = @USE_NLS@
+USE_PO4A = @USE_PO4A@
+USE_UNICODE = @USE_UNICODE@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+ZSTD_LIBS = @ZSTD_LIBS@
+Z_LIBS = @Z_LIBS@
+Z_NG_LIBS = @Z_NG_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+admindir = @admindir@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+backupsdir = @backupsdir@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+devlibdir = @devlibdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+logdir = @logdir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgconfdir = @pkgconfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+zshcompletionsdir = @zshcompletionsdir@
+dist_pkgdata_DATA = \
+ architecture.mk \
+ buildflags.mk \
+ buildopts.mk \
+ buildtools.mk \
+ default.mk \
+ pkg-info.mk \
+ vendor.mk \
+ # EOL
+
+SUFFIXES = .sh .pl
+do_shell_subst = $(AM_V_GEN) $(SED) \
+ -e "s:^ADMINDIR=.*$$:ADMINDIR='$(admindir)':" \
+ -e "s:^BACKUPSDIR=.*$$:BACKUPSDIR='$(backupsdir)':" \
+ -e "s:^PKGDATADIR_DEFAULT=.*$$:PKGDATADIR_DEFAULT='$(pkgdatadir)':" \
+ -e "s:^version=['\"][^'\"]*[\"']:version=\"$(PACKAGE_VERSION)\":" \
+ # EOL
+
+
+# Perl support.
+do_perl_subst = $(AM_V_GEN) $(SED) \
+ -e "s:^\#![[:space:]]*/usr/bin/perl:\#!$(PERL):" \
+ -e "s:our \$$CONFDIR = .*;:our \$$CONFDIR = '$(pkgconfdir)';:" \
+ -e "s:our \$$ADMINDIR = .*;:our \$$ADMINDIR = '$(admindir)';:" \
+ -e "s:our \$$LIBDIR = .*;:our \$$LIBDIR = '$(pkglibexecdir)';:" \
+ -e "s:our \$$DATADIR = .*;:our \$$DATADIR = '$(pkgdatadir)';:" \
+ -e "s:our \$$PROGMAKE = .*;:our \$$PROGMAKE = '$(MAKE)';:" \
+ -e "s:our \$$PROGTAR = .*;:our \$$PROGTAR = '$(TAR)';:" \
+ -e "s:our \$$PROGPATCH = .*;:our \$$PROGPATCH = '$(PATCH)';:" \
+ -e "s:our \$$PROGVERSION = .*;:our \$$PROGVERSION = '$(PACKAGE_VERSION)';:" \
+ # EOL
+
+
+# Makefile support.
+do_make_subst = $(AM_V_GEN) $(SED) \
+ -e "s:dpkg_datadir[[:space:]]*=[[:space:]]*[^[:space:]]*:dpkg_datadir = $(pkgdatadir):" \
+ # EOL
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .sh .pl
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/build-aux/subst.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign scripts/mk/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign scripts/mk/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+$(top_srcdir)/build-aux/subst.am $(am__empty):
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-dist_pkgdataDATA: $(dist_pkgdata_DATA)
+ @$(NORMAL_INSTALL)
+ @list='$(dist_pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(pkgdatadir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(pkgdatadir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgdatadir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgdatadir)" || exit $$?; \
+ done
+
+uninstall-dist_pkgdataDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(dist_pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ dir='$(DESTDIR)$(pkgdatadir)'; $(am__uninstall_files_from_dir)
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(DATA)
+installdirs:
+ for dir in "$(DESTDIR)$(pkgdatadir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-dist_pkgdataDATA
+ @$(NORMAL_INSTALL)
+ $(MAKE) $(AM_MAKEFLAGS) install-data-hook
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-dist_pkgdataDATA
+
+.MAKE: install-am install-data-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ cscopelist-am ctags-am distclean distclean-generic \
+ distclean-libtool distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am \
+ install-data-hook install-dist_pkgdataDATA install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags-am uninstall uninstall-am uninstall-dist_pkgdataDATA
+
+.PRECIOUS: Makefile
+
+
+.sh: Makefile
+ @test -d `dirname $@` || $(MKDIR_P) `dirname $@`
+ $(do_shell_subst) <$< >$@
+ $(AM_V_at) chmod +x $@
+
+.pl: Makefile
+ @test -d `dirname $@` || $(MKDIR_P) `dirname $@`
+ $(do_perl_subst) <$< >$@
+ $(AM_V_at) chmod +x $@
+
+# Ideally we'd use '$(SED) -i', but unfortunately that's not portable.
+install-data-hook:
+ $(do_make_subst) <$(DESTDIR)$(pkgdatadir)/default.mk \
+ >$(DESTDIR)$(pkgdatadir)/default.mk.new
+ mv $(DESTDIR)$(pkgdatadir)/default.mk.new \
+ $(DESTDIR)$(pkgdatadir)/default.mk
+
+ $(do_make_subst) <$(DESTDIR)$(pkgdatadir)/buildtools.mk \
+ >$(DESTDIR)$(pkgdatadir)/buildtools.mk.new
+ mv $(DESTDIR)$(pkgdatadir)/buildtools.mk.new \
+ $(DESTDIR)$(pkgdatadir)/buildtools.mk
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/scripts/mk/architecture.mk b/scripts/mk/architecture.mk
new file mode 100644
index 0000000..c11cada
--- /dev/null
+++ b/scripts/mk/architecture.mk
@@ -0,0 +1,11 @@
+# This Makefile fragment (since dpkg 1.16.1) defines all the DEB_HOST_* and
+# DEB_BUILD_* variables that dpkg-architecture can return. Existing values
+# of those variables are preserved as per policy.
+
+dpkg_lazy_eval ?= $$(or $$(value DPKG_CACHE_$(1)),$$(eval DPKG_CACHE_$(1) := $$(shell $(2)))$$(value DPKG_CACHE_$(1)))
+
+dpkg_architecture_setvar = export $(1) ?= $(call dpkg_lazy_eval,$(1),dpkg-architecture -q$(1))
+
+$(foreach machine,BUILD HOST TARGET,\
+ $(foreach var,ARCH ARCH_ABI ARCH_LIBC ARCH_OS ARCH_CPU ARCH_BITS ARCH_ENDIAN GNU_CPU GNU_SYSTEM GNU_TYPE MULTIARCH,\
+ $(eval $(call dpkg_architecture_setvar,DEB_$(machine)_$(var)))))
diff --git a/scripts/mk/buildflags.mk b/scripts/mk/buildflags.mk
new file mode 100644
index 0000000..9cef0c0
--- /dev/null
+++ b/scripts/mk/buildflags.mk
@@ -0,0 +1,46 @@
+# This Makefile fragment (since dpkg 1.16.1) defines the following variables:
+#
+# ASFLAGS: flags for the assembler (since 1.21.0).
+# CFLAGS: flags for the C compiler.
+# CPPFLAGS: flags for the C preprocessor.
+# CXXFLAGS: flags for the C++ compiler.
+# OBJCFLAGS: flags for the Objective C compiler.
+# OBJCXXFLAGS: flags for the Objective C++ compiler.
+# GCJFLAGS: flags for the GNU Java compiler.
+# DFLAGS: flags for the D compiler.
+# FFLAGS: flags for the Fortran 77 compiler.
+# FCFLAGS: flags for the Fortran 9x compiler.
+# LDFLAGS: flags for the linker.
+#
+# You can also export them in the environment by setting
+# DPKG_EXPORT_BUILDFLAGS to a non-empty value.
+#
+# This list is kept in sync with the default set of flags returned
+# by dpkg-buildflags.
+
+dpkg_lazy_eval ?= $$(or $$(value DPKG_CACHE_$(1)),$$(eval DPKG_CACHE_$(1) := $$(shell $(2)))$$(value DPKG_CACHE_$(1)))
+
+DPKG_BUILDFLAGS_LIST = ASFLAGS CFLAGS CPPFLAGS CXXFLAGS OBJCFLAGS OBJCXXFLAGS \
+ GCJFLAGS DFLAGS FFLAGS FCFLAGS LDFLAGS
+
+define dpkg_buildflags_export_envvar
+ ifdef $(1)
+ DPKG_BUILDFLAGS_EXPORT_ENVVAR += $(1)="$$(value $(1))"
+ endif
+endef
+
+$(eval $(call dpkg_buildflags_export_envvar,DEB_BUILD_OPTIONS))
+$(eval $(call dpkg_buildflags_export_envvar,DEB_BUILD_MAINT_OPTIONS))
+$(eval $(call dpkg_buildflags_export_envvar,DEB_BUILD_PATH))
+$(foreach flag,$(DPKG_BUILDFLAGS_LIST),\
+ $(foreach operation,SET STRIP APPEND PREPEND,\
+ $(eval $(call dpkg_buildflags_export_envvar,DEB_$(flag)_MAINT_$(operation)))))
+
+dpkg_buildflags_setvar = $(1) = $(call dpkg_lazy_eval,$(1),$(DPKG_BUILDFLAGS_EXPORT_ENVVAR) dpkg-buildflags --get $(1))
+
+$(foreach flag,$(DPKG_BUILDFLAGS_LIST),\
+ $(eval $(call dpkg_buildflags_setvar,$(flag))))
+
+ifdef DPKG_EXPORT_BUILDFLAGS
+ export $(DPKG_BUILDFLAGS_LIST)
+endif
diff --git a/scripts/mk/buildopts.mk b/scripts/mk/buildopts.mk
new file mode 100644
index 0000000..c957777
--- /dev/null
+++ b/scripts/mk/buildopts.mk
@@ -0,0 +1,10 @@
+# This Makefile fragment (since dpkg 1.20.1) parses option arguments from
+# DEB_BUILD_OPTIONS, and exposes these as variables.
+#
+# Defines the following variables:
+#
+# DEB_BUILD_OPTION_PARALLEL: the argument for the parallel=N option.
+
+ifneq (,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
+ DEB_BUILD_OPTION_PARALLEL = $(patsubst parallel=%,%,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
+endif
diff --git a/scripts/mk/buildtools.mk b/scripts/mk/buildtools.mk
new file mode 100644
index 0000000..dc28017
--- /dev/null
+++ b/scripts/mk/buildtools.mk
@@ -0,0 +1,78 @@
+# This Makefile fragment (since dpkg 1.19.0) defines the following variables
+# for host tools:
+#
+# AS: assembler (since dpkg 1.19.1).
+# CPP: C preprocessor.
+# CC: C compiler.
+# CXX: C++ compiler.
+# OBJC: Objective C compiler.
+# OBJCXX: Objective C++ compiler.
+# GCJ: GNU Java compiler.
+# F77: Fortran 77 compiler.
+# FC: Fortran 9x compiler.
+# LD: linker.
+# STRIP: strip objects (since dpkg 1.19.1).
+# OBJCOPY: copy objects (since dpkg 1.19.1).
+# OBJDUMP: dump objects (since dpkg 1.19.1).
+# NM: names lister (since dpkg 1.19.1).
+# AR: archiver (since dpkg 1.19.1).
+# RANLIB: archive index generator (since dpkg 1.19.1).
+# PKG_CONFIG: pkg-config tool.
+# QMAKE: Qt build system generator (since dpkg 1.20.0).
+#
+# All the above variables have a counterpart variable for the build tool,
+# as in CC → CC_FOR_BUILD.
+#
+# The variables are not exported by default. This can be changed by
+# defining DPKG_EXPORT_BUILDTOOLS.
+
+dpkg_datadir = $(srcdir)/mk
+include $(dpkg_datadir)/architecture.mk
+
+# We set the TOOL_FOR_BUILD variables to the specified value, and the TOOL
+# variables (for the host) to their triplet-prefixed form iff they are
+# not defined or contain the make built-in defaults. On native builds if
+# TOOL is defined and TOOL_FOR_BUILD is not, we fallback to use TOOL.
+define dpkg_buildtool_setvar
+ ifeq (,$(findstring $(3),$(DEB_BUILD_OPTIONS)))
+ ifeq ($(origin $(1)),default)
+ $(1) = $(DEB_HOST_GNU_TYPE)-$(2)
+ else
+ $(1) ?= $(DEB_HOST_GNU_TYPE)-$(2)
+ endif
+
+ # On native build fallback to use TOOL if that's defined.
+ ifeq ($(DEB_BUILD_GNU_TYPE),$(DEB_HOST_GNU_TYPE))
+ $(1)_FOR_BUILD ?= $$($(1))
+ else
+ $(1)_FOR_BUILD ?= $(DEB_BUILD_GNU_TYPE)-$(2)
+ endif
+ else
+ $(1) = :
+ $(1)_FOR_BUILD = :
+ endif
+
+ ifdef DPKG_EXPORT_BUILDTOOLS
+ export $(1)
+ export $(1)_FOR_BUILD
+ endif
+endef
+
+$(eval $(call dpkg_buildtool_setvar,AS,as))
+$(eval $(call dpkg_buildtool_setvar,CPP,gcc -E))
+$(eval $(call dpkg_buildtool_setvar,CC,gcc))
+$(eval $(call dpkg_buildtool_setvar,CXX,g++))
+$(eval $(call dpkg_buildtool_setvar,OBJC,gcc))
+$(eval $(call dpkg_buildtool_setvar,OBJCXX,g++))
+$(eval $(call dpkg_buildtool_setvar,GCJ,gcj))
+$(eval $(call dpkg_buildtool_setvar,F77,gfortran))
+$(eval $(call dpkg_buildtool_setvar,FC,gfortran))
+$(eval $(call dpkg_buildtool_setvar,LD,ld))
+$(eval $(call dpkg_buildtool_setvar,STRIP,strip,nostrip))
+$(eval $(call dpkg_buildtool_setvar,OBJCOPY,objcopy))
+$(eval $(call dpkg_buildtool_setvar,OBJDUMP,objdump))
+$(eval $(call dpkg_buildtool_setvar,NM,nm))
+$(eval $(call dpkg_buildtool_setvar,AR,ar))
+$(eval $(call dpkg_buildtool_setvar,RANLIB,ranlib))
+$(eval $(call dpkg_buildtool_setvar,PKG_CONFIG,pkg-config))
+$(eval $(call dpkg_buildtool_setvar,QMAKE,qmake))
diff --git a/scripts/mk/default.mk b/scripts/mk/default.mk
new file mode 100644
index 0000000..3916a0c
--- /dev/null
+++ b/scripts/mk/default.mk
@@ -0,0 +1,9 @@
+# This Makefile fragment (since dpkg 1.16.1) includes all the Makefile
+# fragments that define variables that can be useful within debian/rules.
+
+dpkg_datadir = $(srcdir)/mk
+include $(dpkg_datadir)/architecture.mk
+include $(dpkg_datadir)/buildflags.mk
+include $(dpkg_datadir)/buildopts.mk
+include $(dpkg_datadir)/pkg-info.mk
+include $(dpkg_datadir)/vendor.mk
diff --git a/scripts/mk/pkg-info.mk b/scripts/mk/pkg-info.mk
new file mode 100644
index 0000000..bccde23
--- /dev/null
+++ b/scripts/mk/pkg-info.mk
@@ -0,0 +1,27 @@
+# This Makefile fragment (since dpkg 1.16.1) defines the following package
+# information variables:
+#
+# DEB_SOURCE: source package name.
+# DEB_VERSION: package's full version (epoch + upstream vers. + revision).
+# DEB_VERSION_EPOCH_UPSTREAM: package's version without the Debian revision.
+# DEB_VERSION_UPSTREAM_REVISION: package's version without the Debian epoch.
+# DEB_VERSION_UPSTREAM: package's upstream version.
+# DEB_DISTRIBUTION: distribution(s) listed in the current debian/changelog
+# entry.
+#
+# SOURCE_DATE_EPOCH: source release date as seconds since the epoch, as
+# specified by <https://reproducible-builds.org/specs/source-date-epoch/>
+# (since dpkg 1.18.8).
+
+dpkg_late_eval ?= $(or $(value DPKG_CACHE_$(1)),$(eval DPKG_CACHE_$(1) := $(shell $(2)))$(value DPKG_CACHE_$(1)))
+
+DEB_SOURCE = $(call dpkg_late_eval,DEB_SOURCE,dpkg-parsechangelog -SSource)
+DEB_VERSION = $(call dpkg_late_eval,DEB_VERSION,dpkg-parsechangelog -SVersion)
+DEB_VERSION_EPOCH_UPSTREAM = $(call dpkg_late_eval,DEB_VERSION_EPOCH_UPSTREAM,echo '$(DEB_VERSION)' | sed -e 's/-[^-]*$$//')
+DEB_VERSION_UPSTREAM_REVISION = $(call dpkg_late_eval,DEB_VERSION_UPSTREAM_REVISION,echo '$(DEB_VERSION)' | sed -e 's/^[0-9]*://')
+DEB_VERSION_UPSTREAM = $(call dpkg_late_eval,DEB_VERSION_UPSTREAM,echo '$(DEB_VERSION_EPOCH_UPSTREAM)' | sed -e 's/^[0-9]*://')
+DEB_DISTRIBUTION = $(call dpkg_late_eval,DEB_DISTRIBUTION,dpkg-parsechangelog -SDistribution)
+
+SOURCE_DATE_EPOCH ?= $(call dpkg_late_eval,SOURCE_DATE_EPOCH,dpkg-parsechangelog -STimestamp)
+
+export SOURCE_DATE_EPOCH
diff --git a/scripts/mk/vendor.mk b/scripts/mk/vendor.mk
new file mode 100644
index 0000000..f7c61bf
--- /dev/null
+++ b/scripts/mk/vendor.mk
@@ -0,0 +1,43 @@
+# This Makefile fragment (since dpkg 1.16.1) defines the following
+# vendor-related variables:
+#
+# DEB_VENDOR: output of «dpkg-vendor --query Vendor».
+# DEB_PARENT_VENDOR: output of «dpkg-vendor --query Parent» (can be empty).
+#
+# This Makefile fragment also defines a set of "dpkg_vendor_derives_from"
+# macros that can be used to verify if the current vendor derives from
+# another vendor. The unversioned variant defaults to the v0 version if
+# undefined, which can be defined explicitly to one of the versions or the
+# versioned macros can be used directly. The following are example usages:
+#
+# - dpkg_vendor_derives_from (since dpkg 1.16.1)
+#
+# ifeq ($(shell $(call dpkg_vendor_derives_from,ubuntu)),yes)
+# ...
+# endif
+#
+# - dpkg_vendor_derives_from_v0 (since dpkg 1.19.3)
+#
+# ifeq ($(shell $(call dpkg_vendor_derives_from_v0,ubuntu)),yes)
+# ...
+# endif
+#
+# - dpkg_vendor_derives_from_v1 (since dpkg 1.19.3)
+#
+# dpkg_vendor_derives_from = $(dpkg_vendor_derives_from_v1)
+# ifeq ($(call dpkg_vendor_derives_from,ubuntu),yes)
+# ...
+# endif
+# ifeq ($(call dpkg_vendor_derives_from_v1,ubuntu),yes)
+# ...
+# endif
+
+dpkg_late_eval ?= $(or $(value DPKG_CACHE_$(1)),$(eval DPKG_CACHE_$(1) := $(shell $(2)))$(value DPKG_CACHE_$(1)))
+
+DEB_VENDOR = $(call dpkg_late_eval,DEB_VENDOR,dpkg-vendor --query Vendor)
+DEB_PARENT_VENDOR = $(call dpkg_late_eval,DEB_PARENT_VENDOR,dpkg-vendor --query Parent)
+
+dpkg_vendor_derives_from_v0 = dpkg-vendor --derives-from $(1) && echo yes || echo no
+dpkg_vendor_derives_from_v1 = $(shell $(dpkg_vendor_derives_from_v0))
+
+dpkg_vendor_derives_from ?= $(dpkg_vendor_derives_from_v0)
diff --git a/scripts/po/ChangeLog.old b/scripts/po/ChangeLog.old
new file mode 100644
index 0000000..9c02bd2
--- /dev/null
+++ b/scripts/po/ChangeLog.old
@@ -0,0 +1,448 @@
+2009-03-02 Guillem Jover <guillem@debian.org>
+
+ * dpkg-dev.pot: Regenerated.
+ * *.po: Merged with dpkg-dev.pot.
+
+2009-02-21 Frank Lichtenheld <djpig@debian.org>
+
+ * de.po: Fix typo.
+
+2009-02-05 Wiktor Wandachowicz <siryes@gmail.com>
+
+ * pl.po: Updated to 472t.
+
+2009-01-02 Guillem Jover <guillem@debian.org>
+
+ * fr.po: Merged with dpkg-dev.pot.
+
+2008-01-05 Christian Perrier <bubulle@debian.org>
+
+ * fr.po: Missing space added ("devriez définir").
+
+2008-12-29 Guillem Jover <guillem@debian.org>
+
+ * dpkg-dev.pot: Regenerated.
+ * *.po: Merged with dpkg-dev.pot.
+
+2008-12-27 Helge Kreutzmann <debian@helgefjell.de>
+
+ * de.po: Change translation of "Usage".
+
+2008-11-15 Christian Perrier <bubulle@debian.org>
+
+ * fr.po: Updated to 473t.
+
+2008-11-14 Guillem Jover <guillem@debian.org>
+
+ * dpkg-dev.pot: Regenerated.
+ * *.po: Merged with dpkg-dev.pot.
+
+2008-11-01 Christian Perrier <bubulle@debian.org>
+
+ * fr.po: Fix wrong translation (#504123).
+
+2008-09-23 Yuri Kozlov <kozlov.y@gmail.com>
+
+ * ru.po: Fix typo (#499736).
+
+2008-08-29 Peter Krefting <peterk@debian.org>
+
+ * sv.po: Updated to 473t.
+
+2008-08-18 Helge Kreutzmann <debian@helgefjell.de>
+
+ * de.po: Updated to 473t.
+
+2008-08-17 Guillem Jover <guillem@debian.org>
+
+ * dpkg-dev.pot: Regenerated.
+ * *.po: Merged with dpkg-dev.pot.
+
+2008-08-04 Helge Kreutzmann <debian@helgefjell.de>
+
+ * de.po: Updated to 473t.
+
+2008-08-04 Cyril Brulebois <kibi@debian.org>
+
+ * fr.po: Fixed mis-translation.
+
+2008-07-22 Helge Kreutzmann <debian@helgefjell.de>
+
+ * de.po: Unify translation of "diversion".
+
+2008-07-10 Yuri Kozlov <kozlov.y@gmail.com>
+
+ * ru.po: Updated to 473t.
+
+2008-06-10 Wiktor Wandachowicz <siryes@gmail.com>
+
+ * pl.po: Updated to 473t.
+
+2008-06-09 Christian perrier <bubulle@debian.org>
+
+ * fr.po: Updated to 473t
+
+2008-06-09 Helge Kreutzmann <debian@helgefjell.de>
+
+ * de.po: Updated to 471t0f2u.
+
+2008-06-09 Peter Karlsson <peterk@debian.org>
+
+ * sv.po: Updated to 473t.
+
+2008-06-09 Raphaël Hertzog <hertzog@debian.org>
+
+ * dpkg-dev.pot: Regenerated.
+ * *.po: Merged with dpkg-dev.pot (2 new strings).
+
+2008-06-07 Christian perrier <bubulle@debian.org>
+
+ * fr.po: Updated to 471t.
+
+2008-06-06 Wiktor Wandachowicz <siryes@gmail.com>
+
+ * pl.po: Updated to 471t.
+
+2008-05-19 Yuri Kozlov <kozlov.y@gmail.com>
+
+ * ru.po: Updated to 469t.
+
+2008-05-18 Helge Kreutzmann <debian@helgefjell.de>
+
+ * de.po: Updated to 469t0f2u.
+
+2008-05-13 Christian perrier <bubulle@debian.org>
+
+ * fr.po: Updated to 326t78f67u.
+
+2008-05-13 Peter Karlsson <peterk@debian.org>
+
+ * sv.po: Updated to 471t.
+
+2008-05-12 Guillem Jover <guillem@debian.org>
+
+ * dpkg-dev.pot: Regenerated.
+ * *.po: Merged with dpkg-dev.pot.
+
+2008-05-05 Wiktor Wandachowicz <siryes@gmail.com>
+
+ * pl.po: Updated to 469t.
+
+2008-05-05 Helge Kreutzmann <debian@helgefjell.de>
+
+ * de.po: Updated to 467t0f2u. / a minor fix.
+
+2008-05-03 Yuri Kozlov <kozlov.y@gmail.com>
+
+ * ru.po: Updated to 468t1f.
+
+2008-04-29 Helge Kreutzmann <debian@helgefjell.de>
+
+ * de.po: Updated to 458t0f11u.
+
+2008-04-29 Peter Karlsson <peterk@debian.org>
+
+ * sv.po: Updated to 469t.
+
+2008-04-29 Guillem Jover <guillem@debian.org>
+
+ * dpkg-dev.pot: Regenerated.
+ * *.po: Merged with dpkg-dev.pot.
+
+2008-04-22 Helge Kreutzmann <debian@helgefjell.de>
+
+ * de.po: Fix a translation after seeing it in practice.
+
+2008-04-22 Helge Kreutzmann <debian@helgefjell.de>
+
+ * de.po: Updated to 448t0f20u.
+
+2008-04-20 Robert Luberda <robert@debian.org>
+
+ * pl.po: Updated to 449t6f13u.
+
+2008-04-08 Guillem Jover <guillem@debian.org>
+
+ * dpkg-dev.pot: Regenerated.
+ * *.po: Merged with dpkg-dev.pot.
+
+2008-04-03 Helge Kreutzmann <debian@helgefjell.de>
+
+ * de.po: Updated to 386t0f81u.
+
+2008-04-03 Peter Karlsson <peterk@debian.org>
+
+ * sv.po: Updated to 468t and fixed a typo.
+
+2008-04-01 Helge Kreutzmann <debian@helgefjell.de>
+
+ * de.po: Updated to 368t3f96u.
+
+2008-03-30 Guillem Jover <guillem@debian.org>
+
+ * dpkg-dev.pot: Regenerated.
+ * *.po: Merged with dpkg-dev.pot.
+
+2008-03-18 Helge Kreutzmann <debian@helgefjell.de>
+
+ * de.po: Updated to 356t0f127u.
+
+2008-03-09 Robert Luberda <robert@debian.org>
+
+ * pl.po: Updated to 490t.
+ * pl.po: Consistently use Polish quotation marks in translations.
+
+2008-02-26 Peter Karlsson <peterk@debian.org>
+
+ * sv.po: Updated to 489t.
+
+2008-02-24 Robert Luberda <robert@debian.org>
+
+ * pl.po: Recoded to UTF-8.
+ * pl.po: Updated to 484t1f4u.
+
+2008-01-22 Helge Kreutzmann <debian@helgefjell.de>
+
+ * de.po: Updated to 335t0f148u.
+
+2008-01-28 Raphaël Hertzog <hertzog@debian.org>
+
+ * *.po: Avoid fuzzy translations on a cosmetic string change.
+
+2008-01-04 Peter Karlsson <peterk@debian.org>
+
+ * sv.po: Updated to 482t1u.
+
+2008-01-22 Helge Kreutzmann <debian@helgefjell.de>
+
+ * de.po: Updated to 311t0f172u.
+
+2008-01-21 Guillem Jover <guillem@debian.org>
+
+ * dpkg-dev.pot: Regenerated.
+ * *.po: Merged with dpkg-dev.pot.
+
+2008-01-21 Guillem Jover <guillem@debian.org>
+
+ * LINGUAS: Add Russian.
+
+2008-01-19 Frank Lichtenheld <djpig@debian.org>
+
+ * dpkg-dev.pot: Regenerated.
+ * *.po: Merged with dpkg-dev.pot.
+
+2008-01-04 Peter Karlsson <peterk@debian.org>
+
+ * sv.po: Updated to 483t.
+
+2008-01-14 Cyril Brulebois <cyril.brulebois@enst-bretagne.fr>
+
+ * fr.po: Fix spelling error.
+
+2008-01-14 Yuri Kozlov <kozlov.y@gmail.com>
+
+ * ru.po: Updated to 483t.
+
+2008-01-07 Guillem Jover <guillem@debian.org>
+
+ * dpkg-dev.pot: Regenerated.
+ * *.po: Merged with dpkg-dev.pot.
+
+2008-01-04 Peter Karlsson <peterk@debian.org>
+
+ * sv.po: Updated to 482t.
+
+2008-01-02 Christian Perrier <bubulle@debian.org>
+
+ * fr.po: Updated to 482t and converted to UTF-8.
+
+2007-12-29 Guillem Jover <guillem@debian.org>
+
+ * dpkg-dev.pot: Regenerated.
+ * *.po: Merged with dpkg-dev.pot.
+
+2007-12-17 Helge Kreutzmann <debian@helgefjell.de>
+
+ * de.po: Updated to 255t0f227u.
+
+2007-12-19 Peter Karlsson <peterk@debian.org>
+
+ * dpkg-dev.pot: Regenerated.
+ * *.po: Merged with dpkg-dev.pot.
+ * sv.po: Updated to 482t.
+
+2007-12-17 Helge Kreutzmann <debian@helgefjell.de>
+
+ * de.po: Updated to 253t0f227u.
+
+2007-12-10 Helge Kreutzmann <debian@helgefjell.de>
+
+ * de.po: Updated to 221t0f259u.
+
+2007-12-09 Helge Kreutzmann <debian@helgefjell.de>
+
+ * de.po: Updated to 206t0f274u.
+
+2007-12-05 Frédéric Bothamy <frederic.bothamy@free.fr>
+
+ * fr.po: Updated to 480t.
+
+2007-11-20 Peter Karlsson <peterk@debian.org>
+
+ * sv.po: Updated to 480t.
+
+2007-11-29 Guillem Jover <guillem@debian.org>
+
+ * dpkg-dev.pot: Regenerated.
+ * *.po: Merged with dpkg-dev.pot.
+
+2007-11-20 Peter Karlsson <peterk@debian.org>
+
+ * sv.po: Updated to 480t.
+
+2007-11-20 Guillem Jover <guillem@debian.org>
+
+ * dpkg-dev.pot: Regenerated.
+ * *.po: Merged with dpkg-dev.pot.
+
+2007-11-19 Guillem Jover <guillem@debian.org>
+
+ * dpkg-dev.pot: Regenerated.
+ * *.po: Merged with dpkg-dev.pot.
+
+2007-11-15 Guillem Jover <guillem@debian.org>
+
+ * pl.po: Mark two bogus translations as fuzzy. Fix one format
+ parameter from 's' to '%s' and another from '%d' to '%s'.
+
+2007-11-11 Helge Kreutzmann <debian@helgefjell.de>
+
+ * de.po: Updated to 172t0f306u.
+
+2007-11-04 Robert Luberda <robert@debian.org>
+
+ * pl.po: Updated to 478t.
+
+2007-11-04 Helge Kreutzmann <debian@helgefjell.de>
+
+ * de.po: Updated to 141t0f337u.
+
+2007-10-26 Peter Karlsson <peterk@debian.org>
+
+ * dpkg-dev.pot: Regenerated.
+ * *.po: Merged with dpkg-dev.pot.
+ * sv.po: Updated Swedish to 478t.
+
+2007-10-08 Robert Luberda <robert@debian.org>
+
+ * LINGUAS: Add Polish.
+ * pl.po: New file. Initial translation with 322t69f71u.
+
+2007-09-28 Peter Karlsson <peterk@debian.org>
+
+ * sv.po: Updated to 462t.
+
+2007-09-23 Frank Lichtenheld <djpig@debian.org>
+
+ * dpkg-dev.pot: Regenerated.
+ * *.po: Merged with dpkg-dev.pot.
+
+2007-09-20 Christian Perrier <bubulle@debian.org>
+
+ * fr.po: Typo correction.
+
+2007-08-30 Peter Karlsson <peterk@debian.org>
+
+ * LINGUAS: Added Swedish.
+ * sv.po: New file.
+
+2007-08-18 Guillem Jover <guillem@debian.org>
+
+ * dpkg-dev.pot: Regenerated.
+ * *.po: Merged with dpkg-dev.pot.
+
+2007-07-08 Frédéric Bothamy <frederic.bothamy@free.fr>
+
+ * fr.po: Proofread.
+
+2007-07-06 Christian Perrier <bubulle@debian.org>
+
+ * fr.po: Re-re-re-re-completed (438t).
+
+2007-07-02 Frank Lichtenheld <djpig@debian.org>
+
+ * dpkg-dev.pot: Regenerated.
+ * *.po: Merged with dpkg-dev.pot.
+
+2007-05-24 Guillem Jover <guillem@debian.org>
+
+ * dpkg-dev.pot: Regenerated.
+ * *.po: Merged with dpkg-dev.pot.
+
+2007-05-15 Guillem Jover <guillem@debian.org>
+
+ * dpkg-dev.pot: Regenerated.
+ * *.po: Merged with dpkg-dev.pot.
+
+2007-05-11 Frédéric Bothamy <frederic.bothamy@free.fr>
+
+ * fr.po: Typo corrected (s/-O/-0).
+
+2007-05-08 Guillem Jover <guillem@debian.org>
+
+ * dpkg-dev.pot: Regenerated.
+ * *.po: Merged with dpkg-dev.pot.
+
+2007-03-21 Guillem Jover <guillem@debian.org>
+
+ * Makefile.in.in: Updated from gettext 0.16.1.
+
+2007-03-21 Guillem Jover <guillem@debian.org>
+
+ * dpkg-dev.pot: Regenerated.
+
+2006-12-04 Jordi Mallach <jordi@debian.org>
+
+ * ca.po: Fix typo.
+
+2006-10-11 Nicolas Francois <nicolas.francois@centraliens.net>
+
+ * LINGUAS: Activate the Catalan translation.
+
+2006-10-11 Jordi Mallach <jordi@debian.org>
+
+ * ca.po: New Catalan translation (24t406u).
+
+2006-07-08 Philippe Batailler <philippe.batailler@free.fr>
+
+ * fr.po: Typos fixed.
+
+2006-07-01 Philippe Batailler <philippe.batailler@free.fr>
+
+ * fr.po: First translation.
+ * LINGUAS: New language: French.
+
+2006-06-21 Guillem Jover <guillem@debian.org>
+
+ * dpkg-dev.pot: Regenerated.
+
+2006-06-04 Guillem Jover <guillem@debian.org>
+
+ * dpkg-dev.pot: Regenerated.
+
+2006-05-31 Guillem Jover <guillem@debian.org>
+
+ * dpkg-dev.pot: Regenerated.
+
+2006-05-23 Guillem Jover <guillem@debian.org>
+
+ * dpkg-dev.pot: Regenerated.
+
+2006-05-13 Frank Lichtenheld <djpig@debian.org>
+
+ * LINGUAS: New file.
+ * POTFILES.in: Likewise.
+ * Makefile.in.in: Likewise.
+ * Makevars: Likewise.
+ * remove-potcdate.sin: Likewise.
+ * dpkg-dev.pot: Likewise.
diff --git a/scripts/po/LINGUAS b/scripts/po/LINGUAS
new file mode 100644
index 0000000..7797633
--- /dev/null
+++ b/scripts/po/LINGUAS
@@ -0,0 +1,11 @@
+# This file contains the list of available and enabled translations.
+
+ca
+de
+es
+fr
+nl
+pl
+pt
+ru
+sv
diff --git a/scripts/po/Makefile.in.in b/scripts/po/Makefile.in.in
new file mode 100644
index 0000000..6b25f0d
--- /dev/null
+++ b/scripts/po/Makefile.in.in
@@ -0,0 +1,510 @@
+# Makefile for PO directory in any package using GNU gettext.
+# Copyright (C) 1995-2000 Ulrich Drepper <drepper@gnu.ai.mit.edu>
+# Copyright (C) 2000-2020 Free Software Foundation, Inc.
+#
+# Copying and distribution of this file, with or without modification,
+# are permitted in any medium without royalty provided the copyright
+# notice and this notice are preserved. This file is offered as-is,
+# without any warranty.
+#
+# Origin: gettext-0.21
+GETTEXT_MACRO_VERSION = 0.20
+
+PACKAGE = @PACKAGE@
+VERSION = @VERSION@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+
+SED = @SED@
+SHELL = /bin/sh
+@SET_MAKE@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+datarootdir = @datarootdir@
+datadir = @datadir@
+localedir = @localedir@
+gettextsrcdir = $(datadir)/gettext/po
+
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+
+# We use $(mkdir_p).
+# In automake <= 1.9.x, $(mkdir_p) is defined either as "mkdir -p --" or as
+# "$(mkinstalldirs)" or as "$(install_sh) -d". For these automake versions,
+# @install_sh@ does not start with $(SHELL), so we add it.
+# In automake >= 1.10, @mkdir_p@ is derived from ${MKDIR_P}, which is defined
+# either as "/path/to/mkdir -p" or ".../install-sh -c -d". For these automake
+# versions, $(mkinstalldirs) and $(install_sh) are unused.
+mkinstalldirs = $(SHELL) @install_sh@ -d
+install_sh = $(SHELL) @install_sh@
+MKDIR_P = @MKDIR_P@
+mkdir_p = @mkdir_p@
+
+# When building gettext-tools, we prefer to use the built programs
+# rather than installed programs. However, we can't do that when we
+# are cross compiling.
+CROSS_COMPILING = @CROSS_COMPILING@
+
+GMSGFMT_ = @GMSGFMT@
+GMSGFMT_no = @GMSGFMT@
+GMSGFMT_yes = @GMSGFMT_015@
+GMSGFMT = $(GMSGFMT_$(USE_MSGCTXT))
+XGETTEXT_ = @XGETTEXT@
+XGETTEXT_no = @XGETTEXT@
+XGETTEXT_yes = @XGETTEXT_015@
+XGETTEXT = $(XGETTEXT_$(USE_MSGCTXT))
+MSGMERGE = @MSGMERGE@
+MSGMERGE_UPDATE = @MSGMERGE@ --update
+MSGMERGE_FOR_MSGFMT_OPTION = @MSGMERGE_FOR_MSGFMT_OPTION@
+MSGINIT = msginit
+MSGCONV = msgconv
+MSGFILTER = msgfilter
+
+POFILES = @POFILES@
+GMOFILES = @GMOFILES@
+UPDATEPOFILES = @UPDATEPOFILES@
+DUMMYPOFILES = @DUMMYPOFILES@
+DISTFILES.common = Makefile.in.in remove-potcdate.sin \
+$(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3)
+DISTFILES = $(DISTFILES.common) Makevars POTFILES.in \
+$(POFILES) $(GMOFILES) \
+$(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3)
+
+POTFILES = \
+
+CATALOGS = @CATALOGS@
+
+POFILESDEPS_ = $(srcdir)/$(DOMAIN).pot
+POFILESDEPS_yes = $(POFILESDEPS_)
+POFILESDEPS_no =
+POFILESDEPS = $(POFILESDEPS_$(PO_DEPENDS_ON_POT))
+
+DISTFILESDEPS_ = update-po
+DISTFILESDEPS_yes = $(DISTFILESDEPS_)
+DISTFILESDEPS_no =
+DISTFILESDEPS = $(DISTFILESDEPS_$(DIST_DEPENDS_ON_UPDATE_PO))
+
+# Makevars gets inserted here. (Don't remove this line!)
+
+all: all-@USE_NLS@
+
+
+.SUFFIXES:
+.SUFFIXES: .po .gmo .sed .sin .nop .po-create .po-update
+
+# The .pot file, stamp-po, .po files, and .gmo files appear in release tarballs.
+# The GNU Coding Standards say in
+# <https://www.gnu.org/prep/standards/html_node/Makefile-Basics.html>:
+# "GNU distributions usually contain some files which are not source files
+# ... . Since these files normally appear in the source directory, they
+# should always appear in the source directory, not in the build directory.
+# So Makefile rules to update them should put the updated files in the
+# source directory."
+# Therefore we put these files in the source directory, not the build directory.
+
+# During .po -> .gmo conversion, take into account the most recent changes to
+# the .pot file. This eliminates the need to update the .po files when the
+# .pot file has changed, which would be troublesome if the .po files are put
+# under version control.
+$(GMOFILES): $(srcdir)/$(DOMAIN).pot
+.po.gmo:
+ @lang=`echo $* | sed -e 's,.*/,,'`; \
+ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
+ echo "$${cdcmd}rm -f $${lang}.gmo && $(MSGMERGE) $(MSGMERGE_FOR_MSGFMT_OPTION) -o $${lang}.1po $${lang}.po $(DOMAIN).pot && $(GMSGFMT) -c --statistics --verbose -o $${lang}.gmo $${lang}.1po && rm -f $${lang}.1po"; \
+ cd $(srcdir) && \
+ rm -f $${lang}.gmo && \
+ $(MSGMERGE) $(MSGMERGE_FOR_MSGFMT_OPTION) -o $${lang}.1po $${lang}.po $(DOMAIN).pot && \
+ $(GMSGFMT) -c --statistics --verbose -o t-$${lang}.gmo $${lang}.1po && \
+ mv t-$${lang}.gmo $${lang}.gmo && \
+ rm -f $${lang}.1po
+
+.sin.sed:
+ sed -e '/^#/d' $< > t-$@
+ mv t-$@ $@
+
+
+all-yes: $(srcdir)/stamp-po
+all-no:
+
+# Ensure that the gettext macros and this Makefile.in.in are in sync.
+CHECK_MACRO_VERSION = \
+ test "$(GETTEXT_MACRO_VERSION)" = "@GETTEXT_MACRO_VERSION@" \
+ || { echo "*** error: gettext infrastructure mismatch: using a Makefile.in.in from gettext version $(GETTEXT_MACRO_VERSION) but the autoconf macros are from gettext version @GETTEXT_MACRO_VERSION@" 1>&2; \
+ exit 1; \
+ }
+
+# $(srcdir)/$(DOMAIN).pot is only created when needed. When xgettext finds no
+# internationalized messages, no $(srcdir)/$(DOMAIN).pot is created (because
+# we don't want to bother translators with empty POT files). We assume that
+# LINGUAS is empty in this case, i.e. $(POFILES) and $(GMOFILES) are empty.
+# In this case, $(srcdir)/stamp-po is a nop (i.e. a phony target).
+
+# $(srcdir)/stamp-po is a timestamp denoting the last time at which the CATALOGS
+# have been loosely updated. Its purpose is that when a developer or translator
+# checks out the package from a version control system, and the $(DOMAIN).pot
+# file is not under version control, "make" will update the $(DOMAIN).pot and
+# the $(CATALOGS), but subsequent invocations of "make" will do nothing. This
+# timestamp would not be necessary if updating the $(CATALOGS) would always
+# touch them; however, the rule for $(POFILES) has been designed to not touch
+# files that don't need to be changed.
+$(srcdir)/stamp-po: $(srcdir)/$(DOMAIN).pot
+ @$(CHECK_MACRO_VERSION)
+ test ! -f $(srcdir)/$(DOMAIN).pot || \
+ test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES)
+ @test ! -f $(srcdir)/$(DOMAIN).pot || { \
+ echo "touch $(srcdir)/stamp-po" && \
+ echo timestamp > $(srcdir)/stamp-poT && \
+ mv $(srcdir)/stamp-poT $(srcdir)/stamp-po; \
+ }
+
+# Note: Target 'all' must not depend on target '$(DOMAIN).pot-update',
+# otherwise packages like GCC can not be built if only parts of the source
+# have been downloaded.
+
+# This target rebuilds $(DOMAIN).pot; it is an expensive operation.
+# Note that $(DOMAIN).pot is not touched if it doesn't need to be changed.
+# The determination of whether the package xyz is a GNU one is based on the
+# heuristic whether some file in the top level directory mentions "GNU xyz".
+# If GNU 'find' is available, we avoid grepping through monster files.
+$(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed
+ package_gnu="$(PACKAGE_GNU)"; \
+ test -n "$$package_gnu" || { \
+ if { if (LC_ALL=C find --version) 2>/dev/null | grep GNU >/dev/null; then \
+ LC_ALL=C find -L $(top_srcdir) -maxdepth 1 -type f -size -10000000c -exec grep -i 'GNU @PACKAGE@' /dev/null '{}' ';' 2>/dev/null; \
+ else \
+ LC_ALL=C grep -i 'GNU @PACKAGE@' $(top_srcdir)/* 2>/dev/null; \
+ fi; \
+ } | grep -v 'libtool:' >/dev/null; then \
+ package_gnu=yes; \
+ else \
+ package_gnu=no; \
+ fi; \
+ }; \
+ if test "$$package_gnu" = "yes"; then \
+ package_prefix='GNU '; \
+ else \
+ package_prefix=''; \
+ fi; \
+ if test -n '$(MSGID_BUGS_ADDRESS)' || test '$(PACKAGE_BUGREPORT)' = '@'PACKAGE_BUGREPORT'@'; then \
+ msgid_bugs_address='$(MSGID_BUGS_ADDRESS)'; \
+ else \
+ msgid_bugs_address='$(PACKAGE_BUGREPORT)'; \
+ fi; \
+ case `$(XGETTEXT) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].* | 0.16 | 0.16.[0-1]*) \
+ $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
+ --add-comments=TRANSLATORS: \
+ --files-from=$(srcdir)/POTFILES.in \
+ --copyright-holder='$(COPYRIGHT_HOLDER)' \
+ --msgid-bugs-address="$$msgid_bugs_address" \
+ $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \
+ ;; \
+ *) \
+ $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
+ --add-comments=TRANSLATORS: \
+ --files-from=$(srcdir)/POTFILES.in \
+ --copyright-holder='$(COPYRIGHT_HOLDER)' \
+ --package-name="$${package_prefix}@PACKAGE@" \
+ --package-version='@VERSION@' \
+ --msgid-bugs-address="$$msgid_bugs_address" \
+ $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \
+ ;; \
+ esac
+ test ! -f $(DOMAIN).po || { \
+ if test -f $(srcdir)/$(DOMAIN).pot-header; then \
+ sed -e '1,/^#$$/d' < $(DOMAIN).po > $(DOMAIN).1po && \
+ cat $(srcdir)/$(DOMAIN).pot-header $(DOMAIN).1po > $(DOMAIN).po && \
+ rm -f $(DOMAIN).1po \
+ || exit 1; \
+ fi; \
+ if test -f $(srcdir)/$(DOMAIN).pot; then \
+ sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \
+ sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \
+ if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \
+ rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \
+ else \
+ rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \
+ mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \
+ fi; \
+ else \
+ mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \
+ fi; \
+ }
+
+# This rule has no dependencies: we don't need to update $(DOMAIN).pot at
+# every "make" invocation, only create it when it is missing.
+# Only "make $(DOMAIN).pot-update" or "make dist" will force an update.
+$(srcdir)/$(DOMAIN).pot:
+ $(MAKE) $(DOMAIN).pot-update
+
+# This target rebuilds a PO file if $(DOMAIN).pot has changed.
+# Note that a PO file is not touched if it doesn't need to be changed.
+$(POFILES): $(POFILESDEPS)
+ @test -f $(srcdir)/$(DOMAIN).pot || $(MAKE) $(srcdir)/$(DOMAIN).pot
+ @lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \
+ if test -f "$(srcdir)/$${lang}.po"; then \
+ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
+ echo "$${cdcmd}$(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} --previous $${lang}.po $(DOMAIN).pot"; \
+ cd $(srcdir) \
+ && { case `$(MSGMERGE_UPDATE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].*) \
+ $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) $${lang}.po $(DOMAIN).pot;; \
+ 0.1[6-7] | 0.1[6-7].*) \
+ $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --previous $${lang}.po $(DOMAIN).pot;; \
+ *) \
+ $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} --previous $${lang}.po $(DOMAIN).pot;; \
+ esac; \
+ }; \
+ else \
+ $(MAKE) $${lang}.po-create; \
+ fi
+
+
+install: install-exec install-data
+install-exec:
+install-data: install-data-@USE_NLS@
+ if test "$(PACKAGE)" = "gettext-tools"; then \
+ $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \
+ for file in $(DISTFILES.common) Makevars.template; do \
+ $(INSTALL_DATA) $(srcdir)/$$file \
+ $(DESTDIR)$(gettextsrcdir)/$$file; \
+ done; \
+ for file in Makevars; do \
+ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
+ done; \
+ else \
+ : ; \
+ fi
+install-data-no: all
+install-data-yes: all
+ @catalogs='$(CATALOGS)'; \
+ for cat in $$catalogs; do \
+ cat=`basename $$cat`; \
+ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
+ dir=$(localedir)/$$lang/LC_MESSAGES; \
+ $(mkdir_p) $(DESTDIR)$$dir; \
+ if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \
+ $(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \
+ echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \
+ for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
+ if test -n "$$lc"; then \
+ if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
+ link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
+ mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
+ for file in *; do \
+ if test -f $$file; then \
+ ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
+ fi; \
+ done); \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+ else \
+ if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
+ :; \
+ else \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ fi; \
+ fi; \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
+ ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
+ ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
+ cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
+ echo "installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \
+ fi; \
+ done; \
+ done
+
+install-strip: install
+
+installdirs: installdirs-exec installdirs-data
+installdirs-exec:
+installdirs-data: installdirs-data-@USE_NLS@
+ if test "$(PACKAGE)" = "gettext-tools"; then \
+ $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \
+ else \
+ : ; \
+ fi
+installdirs-data-no:
+installdirs-data-yes:
+ @catalogs='$(CATALOGS)'; \
+ for cat in $$catalogs; do \
+ cat=`basename $$cat`; \
+ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
+ dir=$(localedir)/$$lang/LC_MESSAGES; \
+ $(mkdir_p) $(DESTDIR)$$dir; \
+ for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
+ if test -n "$$lc"; then \
+ if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
+ link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
+ mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
+ for file in *; do \
+ if test -f $$file; then \
+ ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
+ fi; \
+ done); \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+ else \
+ if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
+ :; \
+ else \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ fi; \
+ fi; \
+ fi; \
+ done; \
+ done
+
+# Define this as empty until I found a useful application.
+installcheck:
+
+uninstall: uninstall-exec uninstall-data
+uninstall-exec:
+uninstall-data: uninstall-data-@USE_NLS@
+ if test "$(PACKAGE)" = "gettext-tools"; then \
+ for file in $(DISTFILES.common) Makevars.template; do \
+ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
+ done; \
+ else \
+ : ; \
+ fi
+uninstall-data-no:
+uninstall-data-yes:
+ catalogs='$(CATALOGS)'; \
+ for cat in $$catalogs; do \
+ cat=`basename $$cat`; \
+ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
+ for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
+ done; \
+ done
+
+check: all
+
+info dvi ps pdf html tags TAGS ctags CTAGS ID:
+
+install-dvi install-ps install-pdf install-html:
+
+mostlyclean:
+ rm -f remove-potcdate.sed
+ rm -f $(srcdir)/stamp-poT
+ rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po
+ rm -fr *.o
+
+clean: mostlyclean
+
+distclean: clean
+ rm -f Makefile Makefile.in POTFILES
+
+maintainer-clean: distclean
+ @echo "This command is intended for maintainers to use;"
+ @echo "it deletes files that may require special tools to rebuild."
+ rm -f $(srcdir)/$(DOMAIN).pot $(srcdir)/stamp-po $(GMOFILES)
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+dist distdir:
+ test -z "$(DISTFILESDEPS)" || $(MAKE) $(DISTFILESDEPS)
+ @$(MAKE) dist2
+# This is a separate target because 'update-po' must be executed before.
+dist2: $(srcdir)/stamp-po $(DISTFILES)
+ @dists="$(DISTFILES)"; \
+ if test "$(PACKAGE)" = "gettext-tools"; then \
+ dists="$$dists Makevars.template"; \
+ fi; \
+ if test -f $(srcdir)/$(DOMAIN).pot; then \
+ dists="$$dists $(DOMAIN).pot stamp-po"; \
+ else \
+ case $(XGETTEXT) in \
+ :) echo "Warning: Creating a tarball without '$(DOMAIN).pot', because a suitable 'xgettext' program was not found in PATH." 1>&2;; \
+ *) echo "Warning: Creating a tarball without '$(DOMAIN).pot', because 'xgettext' found no strings to extract. Check the contents of the POTFILES.in file and the XGETTEXT_OPTIONS in the Makevars file." 1>&2;; \
+ esac; \
+ fi; \
+ if test -f $(srcdir)/ChangeLog; then \
+ dists="$$dists ChangeLog"; \
+ fi; \
+ for i in 0 1 2 3 4 5 6 7 8 9; do \
+ if test -f $(srcdir)/ChangeLog.$$i; then \
+ dists="$$dists ChangeLog.$$i"; \
+ fi; \
+ done; \
+ if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \
+ for file in $$dists; do \
+ if test -f $$file; then \
+ cp -p $$file $(distdir) || exit 1; \
+ else \
+ cp -p $(srcdir)/$$file $(distdir) || exit 1; \
+ fi; \
+ done
+
+update-po: Makefile
+ $(MAKE) $(DOMAIN).pot-update
+ test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES)
+ $(MAKE) update-gmo
+
+# General rule for creating PO files.
+
+.nop.po-create:
+ @lang=`echo $@ | sed -e 's/\.po-create$$//'`; \
+ echo "File $$lang.po does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \
+ exit 1
+
+# General rule for updating PO files.
+
+.nop.po-update:
+ @lang=`echo $@ | sed -e 's/\.po-update$$//'`; \
+ if test "$(PACKAGE)" = "gettext-tools" && test "$(CROSS_COMPILING)" != "yes"; then PATH=`pwd`/../src:$$PATH; fi; \
+ tmpdir=`pwd`; \
+ echo "$$lang:"; \
+ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
+ echo "$${cdcmd}$(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang --previous $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \
+ cd $(srcdir); \
+ if { case `$(MSGMERGE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].*) \
+ $(MSGMERGE) $(MSGMERGE_OPTIONS) -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \
+ 0.1[6-7] | 0.1[6-7].*) \
+ $(MSGMERGE) $(MSGMERGE_OPTIONS) --previous -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \
+ *) \
+ $(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang --previous -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \
+ esac; \
+ }; then \
+ if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
+ rm -f $$tmpdir/$$lang.new.po; \
+ else \
+ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
+ :; \
+ else \
+ echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
+ exit 1; \
+ fi; \
+ fi; \
+ else \
+ echo "msgmerge for $$lang.po failed!" 1>&2; \
+ rm -f $$tmpdir/$$lang.new.po; \
+ fi
+
+$(DUMMYPOFILES):
+
+update-gmo: Makefile $(GMOFILES)
+ @:
+
+# Recreate Makefile by invoking config.status. Explicitly invoke the shell,
+# because execution permission bits may not work on the current file system.
+# Use @SHELL@, which is the shell determined by autoconf for the use by its
+# scripts, not $(SHELL) which is hardwired to /bin/sh and may be deficient.
+Makefile: Makefile.in.in Makevars $(top_builddir)/config.status @POMAKEFILEDEPS@
+ cd $(top_builddir) \
+ && @SHELL@ ./config.status $(subdir)/$@.in po-directories
+
+force:
+
+# Tell versions [3.59,3.63) of GNU make not to export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/scripts/po/Makevars b/scripts/po/Makevars
new file mode 100644
index 0000000..f9c8fd9
--- /dev/null
+++ b/scripts/po/Makevars
@@ -0,0 +1,82 @@
+# Makefile variables for PO directory in any package using GNU gettext.
+
+# Usually the message domain is the same as the package name.
+DOMAIN = dpkg-dev
+
+# These two variables depend on the location of this directory.
+subdir = scripts/po
+top_builddir = ../..
+
+# These options get passed to xgettext.
+XGETTEXT_OPTIONS = --from-code=UTF-8 --add-location=file \
+ --keyword --keyword=g_ --keyword=N_ \
+ --keyword=P_:1,2 --keyword=C_:1c,2
+
+# This is the copyright holder that gets inserted into the header of the
+# $(DOMAIN).pot file. Set this to the copyright holder of the surrounding
+# package. (Note that the msgstr strings, extracted from the package's
+# sources, belong to the copyright holder of the package.) Translators are
+# expected to transfer the copyright for their translations to this person
+# or entity, or to disclaim their copyright. The empty string stands for
+# the public domain; in this case the translators are expected to disclaim
+# their copyright.
+COPYRIGHT_HOLDER = Dpkg Developers
+
+# This tells whether or not to prepend "GNU " prefix to the package
+# name that gets inserted into the header of the $(DOMAIN).pot file.
+# Possible values are "yes", "no", or empty. If it is empty, try to
+# detect it automatically by scanning the files in $(top_srcdir) for
+# "GNU packagename" string.
+PACKAGE_GNU = no
+
+# This is the email address or URL to which the translators shall report
+# bugs in the untranslated strings:
+# - Strings which are not entire sentences, see the maintainer guidelines
+# in the GNU gettext documentation, section 'Preparing Strings'.
+# - Strings which use unclear terms or require additional context to be
+# understood.
+# - Strings which make invalid assumptions about notation of date, time or
+# money.
+# - Pluralisation problems.
+# - Incorrect English spelling.
+# - Incorrect formatting.
+# It can be your email address, or a mailing list address where translators
+# can write to without being subscribed, or the URL of a web page through
+# which the translators can contact you.
+MSGID_BUGS_ADDRESS = $(PACKAGE_BUGREPORT)
+
+# This is the list of locale categories, beyond LC_MESSAGES, for which the
+# message catalogs shall be used. It is usually empty.
+EXTRA_LOCALE_CATEGORIES =
+
+# This tells whether the $(DOMAIN).pot file contains messages with an 'msgctxt'
+# context. Possible values are "yes" and "no". Set this to yes if the
+# package uses functions taking also a message context, like pgettext(), or
+# if in $(XGETTEXT_OPTIONS) you define keywords with a context argument.
+USE_MSGCTXT = yes
+
+# These options get passed to msgmerge.
+# Useful options are in particular:
+# --previous to keep previous msgids of translated messages,
+# --quiet to reduce the verbosity.
+MSGMERGE_OPTIONS = --previous --add-location=file --quiet
+
+# These options get passed to msginit.
+# If you want to disable line wrapping when writing PO files, add
+# --no-wrap to MSGMERGE_OPTIONS, XGETTEXT_OPTIONS, and
+# MSGINIT_OPTIONS.
+MSGINIT_OPTIONS =
+
+# This tells whether or not to regenerate a PO file when $(DOMAIN).pot
+# has changed. Possible values are "yes" and "no". Set this to no if
+# the POT file is checked in the repository and the version control
+# program ignores timestamps.
+PO_DEPENDS_ON_POT = yes
+
+# This tells whether or not to forcibly update $(DOMAIN).pot and
+# regenerate PO files on "make dist". Possible values are "yes" and
+# "no". Set this to no if the POT file and PO files are maintained
+# externally.
+DIST_DEPENDS_ON_UPDATE_PO = yes
+
+DISTFILES.extra1 = ChangeLog.old
diff --git a/scripts/po/POTFILES.in b/scripts/po/POTFILES.in
new file mode 100644
index 0000000..e88a1cd
--- /dev/null
+++ b/scripts/po/POTFILES.in
@@ -0,0 +1,94 @@
+# This is the list of all source files with translatable strings.
+
+scripts/dpkg-architecture.pl
+scripts/dpkg-buildflags.pl
+scripts/dpkg-buildpackage.pl
+scripts/dpkg-checkbuilddeps.pl
+scripts/dpkg-distaddfile.pl
+scripts/dpkg-genbuildinfo.pl
+scripts/dpkg-genchanges.pl
+scripts/dpkg-gencontrol.pl
+scripts/dpkg-gensymbols.pl
+scripts/dpkg-mergechangelogs.pl
+scripts/dpkg-name.pl
+scripts/dpkg-parsechangelog.pl
+scripts/dpkg-scanpackages.pl
+scripts/dpkg-scansources.pl
+scripts/dpkg-shlibdeps.pl
+scripts/dpkg-source.pl
+scripts/dpkg-vendor.pl
+scripts/Dpkg.pm
+scripts/Dpkg/Arch.pm
+scripts/Dpkg/BuildEnv.pm
+scripts/Dpkg/BuildFlags.pm
+scripts/Dpkg/BuildInfo.pm
+scripts/Dpkg/BuildOptions.pm
+scripts/Dpkg/BuildProfiles.pm
+scripts/Dpkg/BuildTypes.pm
+scripts/Dpkg/Build/Info.pm
+scripts/Dpkg/Changelog.pm
+scripts/Dpkg/Changelog/Debian.pm
+scripts/Dpkg/Changelog/Entry.pm
+scripts/Dpkg/Changelog/Entry/Debian.pm
+scripts/Dpkg/Changelog/Parse.pm
+scripts/Dpkg/Checksums.pm
+scripts/Dpkg/Compression.pm
+scripts/Dpkg/Compression/FileHandle.pm
+scripts/Dpkg/Compression/Process.pm
+scripts/Dpkg/Conf.pm
+scripts/Dpkg/Control.pm
+scripts/Dpkg/Control/Changelog.pm
+scripts/Dpkg/Control/Fields.pm
+scripts/Dpkg/Control/FieldsCore.pm
+scripts/Dpkg/Control/Hash.pm
+scripts/Dpkg/Control/HashCore.pm
+scripts/Dpkg/Control/Info.pm
+scripts/Dpkg/Control/Tests.pm
+scripts/Dpkg/Control/Tests/Entry.pm
+scripts/Dpkg/Control/Types.pm
+scripts/Dpkg/Deps.pm
+scripts/Dpkg/Deps/AND.pm
+scripts/Dpkg/Deps/KnownFacts.pm
+scripts/Dpkg/Deps/Multiple.pm
+scripts/Dpkg/Deps/OR.pm
+scripts/Dpkg/Deps/Simple.pm
+scripts/Dpkg/Deps/Union.pm
+scripts/Dpkg/Dist/Files.pm
+scripts/Dpkg/ErrorHandling.pm
+scripts/Dpkg/Exit.pm
+scripts/Dpkg/File.pm
+scripts/Dpkg/Getopt.pm
+scripts/Dpkg/Gettext.pm
+scripts/Dpkg/IPC.pm
+scripts/Dpkg/Index.pm
+scripts/Dpkg/Interface/Storable.pm
+scripts/Dpkg/Lock.pm
+scripts/Dpkg/OpenPGP.pm
+scripts/Dpkg/OpenPGP/ErrorCodes.pm
+scripts/Dpkg/Package.pm
+scripts/Dpkg/Path.pm
+scripts/Dpkg/Shlibs.pm
+scripts/Dpkg/Shlibs/Cppfilt.pm
+scripts/Dpkg/Shlibs/Objdump.pm
+scripts/Dpkg/Shlibs/Symbol.pm
+scripts/Dpkg/Shlibs/SymbolFile.pm
+scripts/Dpkg/Source/Archive.pm
+scripts/Dpkg/Source/Functions.pm
+scripts/Dpkg/Source/BinaryFiles.pm
+scripts/Dpkg/Source/Package.pm
+scripts/Dpkg/Source/Package/V1.pm
+scripts/Dpkg/Source/Package/V2.pm
+scripts/Dpkg/Source/Package/V3/Bzr.pm
+scripts/Dpkg/Source/Package/V3/Custom.pm
+scripts/Dpkg/Source/Package/V3/Git.pm
+scripts/Dpkg/Source/Package/V3/Native.pm
+scripts/Dpkg/Source/Package/V3/Quilt.pm
+scripts/Dpkg/Source/Patch.pm
+scripts/Dpkg/Source/Quilt.pm
+scripts/Dpkg/Substvars.pm
+scripts/Dpkg/Vars.pm
+scripts/Dpkg/Vendor.pm
+scripts/Dpkg/Vendor/Debian.pm
+scripts/Dpkg/Vendor/Default.pm
+scripts/Dpkg/Vendor/Ubuntu.pm
+scripts/Dpkg/Version.pm
diff --git a/scripts/po/Rules-quot b/scripts/po/Rules-quot
new file mode 100644
index 0000000..18c024b
--- /dev/null
+++ b/scripts/po/Rules-quot
@@ -0,0 +1,62 @@
+# Special Makefile rules for English message catalogs with quotation marks.
+#
+# Copyright (C) 2001-2017 Free Software Foundation, Inc.
+# This file, Rules-quot, and its auxiliary files (listed under
+# DISTFILES.common.extra1) are free software; the Free Software Foundation
+# gives unlimited permission to use, copy, distribute, and modify them.
+
+DISTFILES.common.extra1 = quot.sed boldquot.sed en@quot.header en@boldquot.header insert-header.sin Rules-quot
+
+.SUFFIXES: .insert-header .po-update-en
+
+en@quot.po-create:
+ $(MAKE) en@quot.po-update
+en@boldquot.po-create:
+ $(MAKE) en@boldquot.po-update
+
+en@quot.po-update: en@quot.po-update-en
+en@boldquot.po-update: en@boldquot.po-update-en
+
+.insert-header.po-update-en:
+ @lang=`echo $@ | sed -e 's/\.po-update-en$$//'`; \
+ if test "$(PACKAGE)" = "gettext-tools" && test "$(CROSS_COMPILING)" != "yes"; then PATH=`pwd`/../src:$$PATH; GETTEXTLIBDIR=`cd $(top_srcdir)/src && pwd`; export GETTEXTLIBDIR; fi; \
+ tmpdir=`pwd`; \
+ echo "$$lang:"; \
+ ll=`echo $$lang | sed -e 's/@.*//'`; \
+ LC_ALL=C; export LC_ALL; \
+ cd $(srcdir); \
+ if $(MSGINIT) $(MSGINIT_OPTIONS) -i $(DOMAIN).pot --no-translator -l $$lang -o - 2>/dev/null \
+ | $(SED) -f $$tmpdir/$$lang.insert-header | $(MSGCONV) -t UTF-8 | \
+ { case `$(MSGFILTER) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-8] | 0.1[0-8].*) \
+ $(MSGFILTER) $(SED) -f `echo $$lang | sed -e 's/.*@//'`.sed \
+ ;; \
+ *) \
+ $(MSGFILTER) `echo $$lang | sed -e 's/.*@//'` \
+ ;; \
+ esac } 2>/dev/null > $$tmpdir/$$lang.new.po \
+ ; then \
+ if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
+ rm -f $$tmpdir/$$lang.new.po; \
+ else \
+ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
+ :; \
+ else \
+ echo "creation of $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
+ exit 1; \
+ fi; \
+ fi; \
+ else \
+ echo "creation of $$lang.po failed!" 1>&2; \
+ rm -f $$tmpdir/$$lang.new.po; \
+ fi
+
+en@quot.insert-header: insert-header.sin
+ sed -e '/^#/d' -e 's/HEADER/en@quot.header/g' $(srcdir)/insert-header.sin > en@quot.insert-header
+
+en@boldquot.insert-header: insert-header.sin
+ sed -e '/^#/d' -e 's/HEADER/en@boldquot.header/g' $(srcdir)/insert-header.sin > en@boldquot.insert-header
+
+mostlyclean: mostlyclean-quot
+mostlyclean-quot:
+ rm -f *.insert-header
diff --git a/scripts/po/boldquot.sed b/scripts/po/boldquot.sed
new file mode 100644
index 0000000..4b937aa
--- /dev/null
+++ b/scripts/po/boldquot.sed
@@ -0,0 +1,10 @@
+s/"\([^"]*\)"/“\1”/g
+s/`\([^`']*\)'/‘\1’/g
+s/ '\([^`']*\)' / ‘\1’ /g
+s/ '\([^`']*\)'$/ ‘\1’/g
+s/^'\([^`']*\)' /‘\1’ /g
+s/“”/""/g
+s/“/“/g
+s/”/”/g
+s/‘/‘/g
+s/’/’/g
diff --git a/scripts/po/ca.gmo b/scripts/po/ca.gmo
new file mode 100644
index 0000000..bcffebf
--- /dev/null
+++ b/scripts/po/ca.gmo
Binary files differ
diff --git a/scripts/po/ca.po b/scripts/po/ca.po
new file mode 100644
index 0000000..b7b70da
--- /dev/null
+++ b/scripts/po/ca.po
@@ -0,0 +1,4586 @@
+# Catalan translation of dpkg-dev.
+# Copyright © 2006, 2010 Software in the Public Interest, Inc.
+# This file is distributed under the same license as the dpkg package.
+# Jordi Mallach <jordi@debian.org>, 2006, 2010.
+# Guillem Jover <guillem@debian.org>, 2010-2023.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: dpkg-dev 1.21.18\n"
+"Report-Msgid-Bugs-To: debian-dpkg@lists.debian.org\n"
+"POT-Creation-Date: 2023-05-11 02:03+0000\n"
+"PO-Revision-Date: 2023-01-11 23:19+0100\n"
+"Last-Translator: Guillem Jover <guillem@debian.org>\n"
+"Language-Team: Catalan <debian-l10n-catalan@lists.debian.org>\n"
+"Language: ca\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n!=1;\n"
+
+#: scripts/dpkg-architecture.pl scripts/dpkg-buildflags.pl
+#: scripts/dpkg-buildpackage.pl scripts/dpkg-checkbuilddeps.pl
+#: scripts/dpkg-distaddfile.pl scripts/dpkg-genbuildinfo.pl
+#: scripts/dpkg-genchanges.pl scripts/dpkg-gencontrol.pl
+#: scripts/dpkg-gensymbols.pl scripts/dpkg-mergechangelogs.pl
+#: scripts/dpkg-name.pl scripts/dpkg-parsechangelog.pl
+#: scripts/dpkg-scanpackages.pl scripts/dpkg-scansources.pl
+#: scripts/dpkg-shlibdeps.pl scripts/dpkg-source.pl scripts/dpkg-vendor.pl
+#, perl-format
+msgid "Debian %s version %s.\n"
+msgstr "Debian %s versió %s.\n"
+
+#: scripts/dpkg-architecture.pl scripts/dpkg-buildflags.pl
+#: scripts/dpkg-buildpackage.pl scripts/dpkg-distaddfile.pl
+#: scripts/dpkg-genbuildinfo.pl scripts/dpkg-genchanges.pl
+#: scripts/dpkg-gencontrol.pl scripts/dpkg-gensymbols.pl
+#: scripts/dpkg-parsechangelog.pl scripts/dpkg-shlibdeps.pl
+#: scripts/dpkg-source.pl scripts/dpkg-vendor.pl
+msgid ""
+"\n"
+"This is free software; see the GNU General Public License version 2 or\n"
+"later for copying conditions. There is NO warranty.\n"
+msgstr ""
+"\n"
+"Aquest és programari lliure; vegeu la Llicència Pública General GNU versió 2 "
+"o posterior per a les condicions de còpia. NO hi ha garantia.\n"
+
+#: scripts/dpkg-architecture.pl scripts/dpkg-vendor.pl
+#, perl-format
+msgid "Usage: %s [<option>...] [<command>]"
+msgstr "Forma d'ús: %s [<opció>…] [<ordre>]"
+
+#: scripts/dpkg-architecture.pl
+msgid ""
+"Commands:\n"
+" -l, --list list variables (default).\n"
+" -L, --list-known list valid architectures (matching some "
+"criteria).\n"
+" -e, --equal <arch> compare with host Debian architecture.\n"
+" -i, --is <arch-wildcard> match against host Debian architecture.\n"
+" -q, --query <variable> prints only the value of <variable>.\n"
+" -s, --print-set print command to set environment variables.\n"
+" -u, --print-unset print command to unset environment variables.\n"
+" -c, --command <command> set environment and run the command in it.\n"
+" -?, --help show this help message.\n"
+" --version show the version."
+msgstr ""
+"Ordres:\n"
+" -l, --list llista variables (predeterminat).\n"
+" -L, --list-known llista arquitectures vàlides (combinant alguns "
+"criteris).\n"
+" -e, --equal <arq> compara amb l'arquitectura amfitrió de Debian.\n"
+" -i, --is <comodí-arq> concorda amb l'arquitectura amfitrió de Debian.\n"
+" -q, --query <variable> mostra només el valor de <variable>.\n"
+" -s, --print-set mostra ordres per assignar les variables "
+"d'entorn.\n"
+" -u, --print-unset mostra ordres per suprimir les variables "
+"d'entorn.\n"
+" -c, --command <ordre> configura l'entorn i executa-hi l'ordre.\n"
+" -?, --help mostra aquest missatge d'ajuda.\n"
+" --version mostra la versió."
+
+#: scripts/dpkg-architecture.pl
+msgid ""
+"Options:\n"
+" -a, --host-arch <arch> set host Debian architecture.\n"
+" -t, --host-type <type> set host GNU system type.\n"
+" -A, --target-arch <arch> set target Debian architecture.\n"
+" -T, --target-type <type> set target GNU system type.\n"
+" -W, --match-wildcard <arch-wildcard>\n"
+" restrict architecture list matching <arch-"
+"wildcard>.\n"
+" -B, --match-bits <arch-bits>\n"
+" restrict architecture list matching <arch-"
+"bits>.\n"
+" -E, --match-endian <arch-endian>\n"
+" restrict architecture list matching <arch-"
+"endian>.\n"
+" --print-format <format>\n"
+" use <format> for --print-set and --print-unset,\n"
+" allowed values: shell (default), make.\n"
+" -f, --force force flag (override variables set in "
+"environment)."
+msgstr ""
+"Opcions:\n"
+" -a, --host-arch <arq> estableix l'arquitectura amfitrió de Debian.\n"
+" -t, --host-type <tipus> estableix el tipus de sistema amfitrió GNU.\n"
+" -A, --target-arch <arq> estableix l'arquitectura objectiu de Debian.\n"
+" -T, --target-type <tipus> estableix el tipus de sistema objectiu GNU.\n"
+" -W, --match-wildcard <arq-comodí>\n"
+" restringeix la llista d'arquitectures "
+"concordant\n"
+" amb <arq-comodí>.\n"
+" -B, --match-bits <arq-bits>\n"
+" restringeix la llista d'arquitectures "
+"concordant\n"
+" amb <arq-bits>.\n"
+" -E, --match-endian <arq-endian>\n"
+" restringeix la llista d'arquitectures "
+"concordant\n"
+" amb <arq-endian>.\n"
+" --print-format <format>\n"
+" empra <format> per --print-set i --print-unset,\n"
+" valors admesos: shell (per defecte), make.\n"
+" -f, --force senyalador de forçat (sobreescriu les variables\n"
+" de l'entorn)."
+
+#: scripts/dpkg-architecture.pl
+#, perl-format
+msgid "unknown Debian architecture %s, you must specify GNU system type, too"
+msgstr ""
+"la arquitectura de Debian %s és desconeguda, també heu d'especificar el "
+"tipus de sistema GNU"
+
+#: scripts/dpkg-architecture.pl
+#, perl-format
+msgid "unknown GNU system type %s, you must specify Debian architecture, too"
+msgstr ""
+"el tipus de sistema GNU %s és desconegut, també heu d'especificar la "
+"arquitectura de Debian"
+
+#: scripts/dpkg-architecture.pl
+#, perl-format
+msgid "unknown default GNU system type for Debian architecture %s"
+msgstr ""
+"el tipus de sistema GNU predeterminat per a la arquitectura de Debian %s és "
+"desconegut"
+
+#: scripts/dpkg-architecture.pl
+#, perl-format
+msgid ""
+"default GNU system type %s for Debian arch %s does not match specified GNU "
+"system type %s"
+msgstr ""
+"el tipus de sistema GNU predeterminat %s per a la arquitectura de Debian %s "
+"no coincideix amb el tipus de sistema GNU especificat %s"
+
+#: scripts/dpkg-architecture.pl
+#, perl-format
+msgid "%s is not a supported print format"
+msgstr "%s no és un mètode de format de mostra admès"
+
+#: scripts/dpkg-architecture.pl
+#, perl-format
+msgid "%s is not a supported variable name"
+msgstr "%s no és un nom de variable gestionat"
+
+#: scripts/dpkg-architecture.pl scripts/dpkg-buildflags.pl
+#: scripts/dpkg-distaddfile.pl scripts/dpkg-genbuildinfo.pl
+#: scripts/dpkg-genchanges.pl scripts/dpkg-gencontrol.pl
+#: scripts/dpkg-gensymbols.pl scripts/dpkg-name.pl
+#: scripts/dpkg-parsechangelog.pl scripts/dpkg-shlibdeps.pl
+#: scripts/dpkg-vendor.pl
+#, perl-format
+msgid "unknown option '%s'"
+msgstr "l'opció «%s» és desconeguda"
+
+#: scripts/dpkg-architecture.pl
+#, perl-format
+msgid ""
+"specified GNU system type %s does not match CC system type %s, try setting a "
+"correct CC environment variable"
+msgstr ""
+"el tipus de sistema GNU %s especificat no correspon amb el tipus de sistema "
+"del CC %s, proveu a especificar una variable d'entorn CC correcta"
+
+#: scripts/dpkg-architecture.pl scripts/dpkg-shlibdeps.pl scripts/Dpkg/IPC.pm
+#: scripts/Dpkg/Shlibs/Cppfilt.pm
+#, perl-format
+msgid "unable to execute %s"
+msgstr "no es pot executar %s"
+
+#: scripts/dpkg-buildflags.pl
+#, perl-format
+msgid "Usage: %s [<command>]"
+msgstr "Format d'ús: %s [<ordre>]"
+
+#: scripts/dpkg-buildflags.pl
+msgid ""
+"Commands:\n"
+" --get <flag> output the requested flag to stdout.\n"
+" --origin <flag> output the origin of the flag to stdout:\n"
+" value is one of vendor, system, user, env.\n"
+" --status output a synopsis with all parameters affecting the\n"
+" program behaviour, the resulting flags and their "
+"origin.\n"
+" --query like --status, but in deb822 format.\n"
+" --query-features <area>\n"
+" output the status of features for the given area.\n"
+" --list output a list of the flags supported by the current "
+"vendor.\n"
+" --export=(sh|make|cmdline|configure)\n"
+" output something convenient to import the compilation\n"
+" flags in a shell script, in make, or in a command "
+"line.\n"
+" --dump output all compilation flags with their values.\n"
+" --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+"Ordres:\n"
+" --get <senyalador> mostra el senyalador sol·licitat a stdout.\n"
+" --origin <senyalador>\n"
+" mostra l'origen del senyalador a stdout, el valor és:\n"
+" vendor, system, user, env.\n"
+" --status mostra una sinopsis amb tots els paràmetres que "
+"afecten\n"
+" el comportament de dpkg-buildflags, els senyaladors\n"
+" resultants i els seus orígens.\n"
+" --query com --status, però en format deb822.\n"
+" --query-features <àrea>\n"
+" mostra l'estat de les característiques de l'àrea "
+"donada.\n"
+" --list mostra la llista de senyaladors admesos per el "
+"proveïdor\n"
+" actual.\n"
+" --export=(sh|make|cmdline|configure)\n"
+" mostra codi per importar els senyaladors de compilació\n"
+" a un guió d'ordres, a make o a la línia d'ordres.\n"
+" --dump mostra tots els senyaladors de compilació amb els seus\n"
+" valors.\n"
+" --help mostra aquest missatge d'ajuda.\n"
+" --version mostra la versió.\n"
+
+#: scripts/dpkg-buildflags.pl scripts/dpkg-source.pl scripts/dpkg-vendor.pl
+#, perl-format
+msgid "two commands specified: --%s and --%s"
+msgstr "s'ha especificat dos ordres: --%s i --%s"
+
+#: scripts/dpkg-buildflags.pl scripts/dpkg-vendor.pl
+#, perl-format
+msgid "%s needs a parameter"
+msgstr "%s requereix un paràmetre"
+
+#: scripts/dpkg-buildpackage.pl scripts/dpkg-genbuildinfo.pl
+#: scripts/dpkg-genchanges.pl scripts/dpkg-gencontrol.pl
+#: scripts/dpkg-gensymbols.pl scripts/dpkg-parsechangelog.pl
+#, perl-format
+msgid "Usage: %s [<option>...]"
+msgstr "Forma d'ús: %s [<opció>…]"
+
+#: scripts/dpkg-buildpackage.pl
+msgid ""
+"Options:\n"
+" --build=<type>[,...] specify the build <type>: full, source, "
+"binary,\n"
+" any, all (default is 'full').\n"
+" -F, --build=full normal full build (source and binary; "
+"default).\n"
+" -g, --build=source,all source and arch-indep build.\n"
+" -G, --build=source,any source and arch-specific build.\n"
+" -b, --build=binary binary-only, no source files.\n"
+" -B, --build=any binary-only, only arch-specific files.\n"
+" -A, --build=all binary-only, only arch-indep files.\n"
+" -S, --build=source source-only, no binary files.\n"
+" -nc, --no-pre-clean do not pre clean source tree (implies -b).\n"
+" --pre-clean pre clean source tree (default).\n"
+" --no-post-clean do not post clean source tree (default).\n"
+" -tc, --post-clean post clean source tree.\n"
+" --sanitize-env sanitize the build environment.\n"
+" -D, --check-builddeps check build dependencies and conflicts "
+"(default).\n"
+" -d, --no-check-builddeps do not check build dependencies and "
+"conflicts.\n"
+" --ignore-builtin-builddeps\n"
+" do not check builtin build dependencies.\n"
+" -P, --build-profiles=<profiles>\n"
+" assume comma-separated build <profiles> as "
+"active.\n"
+" --rules-requires-root assume legacy Rules-Requires-Root field "
+"value.\n"
+" -R, --rules-file=<rules> rules file to execute (default is debian/"
+"rules).\n"
+" -T, --rules-target=<target> call debian/rules <target>.\n"
+" --as-root ensure -T calls the target with root rights.\n"
+" -j, --jobs[=<jobs>|auto] jobs to run simultaneously (passed to "
+"<rules>),\n"
+" (default; default is auto, opt-in mode).\n"
+" -J, --jobs-try[=<jobs>|auto]\n"
+" alias for -j, --jobs.\n"
+" --jobs-force[=<jobs>|auto]\n"
+" jobs to run simultaneously (passed to "
+"<rules>),\n"
+" (default is auto, forced mode).\n"
+" -r, --root-command=<command>\n"
+" command to gain root rights (default is "
+"fakeroot).\n"
+" --check-command=<command>\n"
+" command to check the .changes file (no "
+"default).\n"
+" --check-option=<opt> pass <opt> to check <command>.\n"
+" --hook-<name>=<command> set <command> as the hook <name>, known "
+"hooks:\n"
+" init preclean source build binary buildinfo\n"
+" changes postclean check sign done\n"
+" --buildinfo-file=<file> set the .buildinfo filename to generate.\n"
+" --buildinfo-option=<opt>\n"
+" pass option <opt> to dpkg-genbuildinfo.\n"
+" --changes-file=<file> set the .changes filename to generate.\n"
+" --sign-backend=<backend>\n"
+" OpenPGP backend to use to sign\n"
+" (default is auto).\n"
+" -p, --sign-command=<command>\n"
+" command to sign .dsc and/or .changes files\n"
+" (default is gpg).\n"
+" --sign-keyfile=<file> the key file to use for signing.\n"
+" -k, --sign-keyid=<keyid> the key id to use for signing.\n"
+" --sign-key=<keyid> alias for -k, --sign-keyid.\n"
+" -ap, --sign-pause add pause before starting signature process.\n"
+" -us, --unsigned-source unsigned source package.\n"
+" -ui, --unsigned-buildinfo unsigned .buildinfo file.\n"
+" -uc, --unsigned-changes unsigned .buildinfo and .changes file.\n"
+" --no-sign do not sign any file.\n"
+" --force-sign force signing the resulting files.\n"
+" --admindir=<directory> change the administrative directory.\n"
+" -?, --help show this help message.\n"
+" --version show the version."
+msgstr ""
+"Opcions:\n"
+" --build=<tipus>[,…] especifica el <tipus> de construcció: full,\n"
+" source, binary, any, all (predeterminat a\n"
+" “full”).\n"
+" -F, --build=full construcció normal completa (binaris i fonts;\n"
+" predeterminat).\n"
+" -g, --build=source,all només fonts i fitxers independents "
+"d'arquitectura.\n"
+" -G, --build=source,any només fonts i fitxers dependents "
+"d'arquitectura.\n"
+" -b, --build=binary només binaris, sense fitxers font.\n"
+" -B, --build=any només binaris (fitxers dependents "
+"d'arquitectura).\n"
+" -A, --build=all només binaris (fitxers independents "
+"d'arquitectura).\n"
+" -S, --build=source només fonts, sense fitxers binaris.\n"
+" -nc, --no-pre-clean no preneteja l'arbre font (implica -b).\n"
+" --pre-clean preneteja l'arbre font (predeterminat)\n"
+" --no-post-clean no neteja l'arbre font al finalitzar\n"
+" (predeterminat).\n"
+" -tc, --post-clean neteja l'arbre font al finalitzar.\n"
+" --sanitize-env neteja l'entorn de construcció.\n"
+" -D, --check-builddeps verifica dependències i conflictes de\n"
+" construcció (predeterminat).\n"
+" -d, --no-check-builddeps no verifica dependències ni conflictes de\n"
+" construcció.\n"
+" --ignore-builtin-builddeps\n"
+" no verifica dependències de construcció\n"
+" incorporades.\n"
+" -P, --build-profiles=<perfils>\n"
+" assumeix els <perfils> de construcció com "
+"actius\n"
+" (llista de valors separats per comes).\n"
+" --rules-requires-root assumeix el valor antic del camp\n"
+" Rules-Requires-Root.\n"
+" -R, --rules-file=<regles> regles a executar (predeterminat a debian/"
+"rules).\n"
+" -T, --rules-target=<objectiu>\n"
+" crida debian/rules <objectiu> amb l'entorn "
+"adequat.\n"
+" --as-root assegura que -T crida l'objectiu amb permisos\n"
+" de superusuari.\n"
+" -j, --jobs[=<feines>|auto] especifica les feines a executar "
+"simultàniament\n"
+" (es passa a <regles>), (predeterminat;\n"
+" predeterminat a auto, mode opcional).\n"
+" -J, --jobs-try[=<feines>|auto]\n"
+" alias per a -j, --jobs.\n"
+" --jobs-force[=<feines>|auto]\n"
+" especifica les feines a executar "
+"simultàniament\n"
+" (es passa a <regles>), (predeterminat a "
+"auto,\n"
+" mode forçat).\n"
+" -r, --root-command=<ordre-assolir-superusuari>\n"
+" ordre per assolir privilegis de superusuari\n"
+" (predeterminat a fakeroot).\n"
+" --check-command=<ordre-verificació>\n"
+" ordre per verificar el fitxer .changes (no hi\n"
+" ha valor predeterminat).\n"
+" --check-option=<opció> passa <opció> a <ordre-verificació>.\n"
+" --hook-<nom-lligam>=<ordre-lligam>\n"
+" estableix <ordre-lligam> com a lligam\n"
+" <nom-lligam>, s'admeten:\n"
+" init preclean source build binary changes\n"
+" postclean check sign done\n"
+" --buildinfo-file=<fitxer>\n"
+" estableix el fitxer .buildinfo a generar.\n"
+" --buildinfo-option=<opció>\n"
+" passa l'opció <opt> a dpkg-genbuildinfo.\n"
+" --changes-file=<fitxer> estableix el fitxer .changes a generar.\n"
+" --sign-backend=<fons> empra fons d'OpenPGP per signatures\n"
+" (predeterminat a auto).\n"
+" -p, --sign-command=<ordre-signat>\n"
+" ordre per signar els fitxer .dsc i/o .changes\n"
+" (predeterminat a gpg).\n"
+" --sign-keyfile=<fitxer> el fitxer de clau a emprar per signar.\n"
+" -k, --sign-keyid=<id-clau> l'identificador de clau a emprar per signar.\n"
+" --sign-key=<id-clau> alias per -k, --sign-keyid.\n"
+" -ap, --sign-pause afegeix una pausa abans de signar.\n"
+" -us, --unsigned-source paquet font sense signar.\n"
+" -ui, --unsigned-buildinfo fitxer .buildinfo sense signar.\n"
+" -uc, --unsigned-changes fitxer .buildinfo i .changes sense signar.\n"
+" --no-sign no signa cap fitxer.\n"
+" --force-sign força els signat dels fitxers resultants.\n"
+" --admindir=<directori> canvia el directori administratiu.\n"
+" -?, --help mostra aquest missatge d'ajuda.\n"
+" --version mostra la versió."
+
+#: scripts/dpkg-buildpackage.pl
+msgid ""
+"Options passed to dpkg-architecture:\n"
+" -a, --host-arch <arch> set the host Debian architecture.\n"
+" -t, --host-type <type> set the host GNU system type.\n"
+" --target-arch <arch> set the target Debian architecture.\n"
+" --target-type <type> set the target GNU system type."
+msgstr ""
+"Opcions passades a dpkg-architecture:\n"
+" -a, --host-arch <arq> estableix l'arquitectura amfitrió de Debian.\n"
+" -t, --host-type <tipus> estableix el tipus de sistema amfitrió GNU.\n"
+" --target-arch <arq> estableix l'arquitectura objectiu de Debian.\n"
+" --target-type <tipus> estableix el tipus de sistema objectiu GNU."
+
+#: scripts/dpkg-buildpackage.pl
+msgid ""
+"Options passed to dpkg-genchanges:\n"
+" -si source includes orig, if new upstream "
+"(default).\n"
+" -sa source includes orig, always.\n"
+" -sd source is diff and .dsc only.\n"
+" -v<version> changes since version <version>.\n"
+" -m, --source-by=<maint> maintainer for this source or build is "
+"<maint>.\n"
+" --build-by=<maint> ditto.\n"
+" -e, --release-by=<maint> maintainer for this change or release is "
+"<maint>.\n"
+" --changed-by=<maint> ditto.\n"
+" -C<descfile> changes are described in <descfile>.\n"
+" --changes-option=<opt> pass option <opt> to dpkg-genchanges."
+msgstr ""
+"Opcions passades a dpkg-genchanges:\n"
+" -si el font inclou l'orig, si és un nou original\n"
+" (predeterminat).\n"
+" -sa el font inclou l'orig, sempre.\n"
+" -sd el font és només el diff i el .dsc.\n"
+" -v<versió> inclou canvis des de la versió <versió>.\n"
+" -m, --source-by=<mantenidor>\n"
+" el mantenidor del codi o de la construcció és\n"
+" <mantenidor>.\n"
+" --build-by=<mantenidor> ídem.\n"
+" -e, --release-by=<mantenidor>\n"
+" el mantenidor d'aquest canvi o llançament és\n"
+" <mantenidor>.\n"
+" --changed-by=<mantenidor>\n"
+" ídem.\n"
+" -C<fitxerdesc> els canvis es descriuen a <fitxerdesc>.\n"
+" --changes-option=<opció>\n"
+" passa l'opció <opció> a dpkg-genchanges."
+
+#: scripts/dpkg-buildpackage.pl
+msgid ""
+"Options passed to dpkg-source:\n"
+" -sn force Debian native source format.\n"
+" -s[sAkurKUR] see dpkg-source for explanation.\n"
+" -z, --compression-level=<level>\n"
+" compression level to use for source.\n"
+" -Z, --compression=<compressor>\n"
+" compression to use for source (gz|xz|bzip2|"
+"lzma).\n"
+" -i, --diff-ignore[=<regex>] ignore diffs of files matching <regex>.\n"
+" -I, --tar-ignore[=<pattern>]\n"
+" filter out files when building tarballs.\n"
+" --source-option=<opt> pass option <opt> to dpkg-source.\n"
+msgstr ""
+"Opcions passades a dpkg-source:\n"
+" -sn força el format de font nadiu de Debian.\n"
+" -s[sAkurKUR] vegeu dpkg-source per a més informació.\n"
+" -z, --compression-level=<nivell>\n"
+" nivell de compressió per al font.\n"
+" -Z, --compression=<compressor>\n"
+" tipus de compressió per al font (gz|xz|bzip2|lzma).\n"
+" -i, --diff-ignore[=<regex>]\n"
+" ignora els diffs de fitxers que concorden amb regex.\n"
+" -I, --tar-ignore[=<patró>]\n"
+" filtra fitxers al construir l'arxiu tar.\n"
+" --source-option=<opció>\n"
+" passa l'opció <opció> a dpkg-source.\n"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "missing .buildinfo filename"
+msgstr "manca el nom de fitxer «.buildinfo»"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "passing %s via %s is not supported; please use %s instead"
+msgstr "no s'admet passar %s via %s; empreu %s"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "missing .changes filename"
+msgstr "manca el nom de fitxer «.changes»"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "unknown hook name %s"
+msgstr "el nom del lligam %s és desconegut"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "missing hook %s command"
+msgstr "manca l'ordre del lligam %s"
+
+#: scripts/dpkg-buildpackage.pl scripts/dpkg-genbuildinfo.pl
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid "%s is deprecated; it is without effect"
+msgstr "%s és obsolet; no té efecte"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "-s%s is deprecated; always using gpg style interface"
+msgstr "-s%s és obsolet; sempre s'utilitzarà la interfície d'estil gpg"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "unknown option or argument %s"
+msgstr "l'opció o argument %s és desconeguda"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "option %s is only meaningful with option %s"
+msgstr "l'opció %s només te sentit juntament amb l'opció %s"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "check-command '%s' not found"
+msgstr "no s'ha trobat l'ordre-per-verificar «%s»"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "sign-command '%s' not found"
+msgstr "no s'ha trobat l'ordre-per-signar «%s»"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source package"
+msgstr "paquet font"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source version"
+msgstr "versió del font"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source distribution"
+msgstr "distribució del font"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source changed by"
+msgstr "font canviat per"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "host architecture"
+msgstr "arquitectura de l'amfitrió"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "debian/rules is not executable; fixing that"
+msgstr "debian/rules no és executable: s'està corregint això"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "build dependencies/conflicts unsatisfied; aborting"
+msgstr "dependències/conflictes de construcció no satisfetes; s'està avortant"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "(Use -d flag to override.)"
+msgstr "(Empreu el senyalador -d per a ometre-ho.)"
+
+#: scripts/dpkg-buildpackage.pl
+msgid ""
+"building a source package without cleaning up as you asked; it might contain "
+"undesired files"
+msgstr ""
+"s'esta construint un paquet font sense netejar-lo, com heu demanat; podria "
+"contenir fitxers no desitjats"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "Press <enter> to start the signing process.\n"
+msgstr "Premeu la tecla de <retorn> per a començar el procés de signat.\n"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "not signing UNRELEASED build; use --force-sign to override"
+msgstr ""
+"no es signarà la construcció UNRELEASED; empreu --force-sign per a forçar-ho"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "unable to determine %s"
+msgstr "no es pot determinar %s"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "using a gain-root-command while being root"
+msgstr "s'està emprant una ordre-assolir-superusuari mentre s'és superusuari"
+
+#: scripts/dpkg-buildpackage.pl
+msgid ""
+"fakeroot not found, either install the fakeroot\n"
+"package, specify a command with the -r option, or run this as root"
+msgstr ""
+"no s'ha trobat fakeroot, instal·leu el paquet fakeroot,\n"
+"especifiqueu una ordre amb l'opció -r, o executeu-ho com superusuari"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "gain-root-command '%s' not found"
+msgstr "no s'ha trobat l'ordre-assolir-superusuari «%s»"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "disallowed target in %s field keyword \"%s\""
+msgstr "no s'accepta l'objectiu en el camp %s amb la paraula clau “%s”"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "%s field keyword \"%s\" is unknown in dpkg namespace"
+msgstr ""
+"la paraula clau “%2$s” desconeguda en el camp %1$s a l'espai de noms de dpkg"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "%s field keyword \"%s\" is uppercase; use \"%s\" instead"
+msgstr "la paraula clau “%2$s” és en majúscules en el camp %1$s; empreu “%3$s”"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "%s field keyword \"%s\" is invalid; use \"%s\" instead"
+msgstr "la paraula clau “%2$s” no és vàlida en el camp %1$s; empreu “%3$s”"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "%s field keyword \"%s\" is unknown"
+msgstr "la paraula clau “%2$s” és desconeguda en el camp %1$s"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "field %s contains duplicate keyword \"%s\""
+msgstr "la paraula clau “%2$s” és duplicada en el camp %1$s"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "%s field contains both global and implementation specific keywords"
+msgstr "el camp %s conté paraules clau globals i especifiques d'implementació"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "unknown %% substitution in hook: %%%s"
+msgstr "la substitució %% és desconeguda en el lligam: %%%s"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid ""
+"short OpenPGP key IDs are broken; please use key fingerprints in %s or %s "
+"instead"
+msgstr ""
+"els identificador de clau OpenPGP curts estan trencats; empreu empremtes de "
+"clau a %s o %s"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid ""
+"long OpenPGP key IDs are strongly discouraged; please use key fingerprints "
+"in %s or %s instead"
+msgstr ""
+"els identificadors de clau OpenPGP llargs estan descoratjats; empreu "
+"empremtes de clau a %s o %s"
+
+#: scripts/dpkg-buildpackage.pl scripts/dpkg-checkbuilddeps.pl
+#: scripts/dpkg-genbuildinfo.pl scripts/dpkg-name.pl scripts/Dpkg/Arch.pm
+#: scripts/Dpkg/IPC.pm scripts/Dpkg/Shlibs.pm
+#, perl-format
+msgid "cannot open %s"
+msgstr "no es pot obrir %s"
+
+#: scripts/dpkg-buildpackage.pl scripts/dpkg-distaddfile.pl
+#: scripts/dpkg-genbuildinfo.pl scripts/dpkg-gencontrol.pl
+#: scripts/Dpkg/Interface/Storable.pm scripts/Dpkg/Source/Package/V2.pm
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot close %s"
+msgstr "no es pot tancar %s"
+
+#: scripts/dpkg-buildpackage.pl scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "cannot move %s to %s"
+msgstr "no es pot moure %s a %s"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "failed to sign %s file: %s"
+msgstr "no s'ha pogut signar el fitxer «%s»: %s"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source-only upload: Debian-native package"
+msgstr "pujada de només font: paquet nadiu de Debian"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source-only, diff-only upload (original source NOT included)"
+msgstr "pujada de només font, només diff (NO s'inclou el codi font original)"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source-only upload (original source is included)"
+msgstr "pujada de només font (s'inclou el codi font original)"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "binary-only upload (no source included)"
+msgstr "pujada de només binaris (no s'inclou el codi font)"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "full upload; Debian-native package (full source is included)"
+msgstr "pujada sencera; paquet nadiu de Debian (s'inclou el codi font sencer)"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "binary and diff upload (original source NOT included)"
+msgstr "pujada de binaris i diff (NO s'inclou el codi font original)"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "full upload (original source is included)"
+msgstr "pujada sencera (s'inclou el codi font original)"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid ""
+"%s must be updated to support the 'build-arch' and 'build-indep' targets (at "
+"least '%s' seems to be missing)"
+msgstr ""
+"s'ha d'actualitzar %s per admetre els objectius «build-arch» i «build-"
+"indep» (almenys sembla que manca «%s»)"
+
+#: scripts/dpkg-checkbuilddeps.pl
+#, perl-format
+msgid "Usage: %s [<option>...] [<control-file>]"
+msgstr "Forma d'ús: %s [<opció>…] [<fitxer-control>]"
+
+#: scripts/dpkg-checkbuilddeps.pl
+msgid ""
+"Options:\n"
+" -A ignore Build-Depends-Arch and Build-Conflicts-Arch.\n"
+" -B ignore Build-Depends-Indep and Build-Conflicts-Indep.\n"
+" -I ignore built-in build dependencies and conflicts.\n"
+" -d build-deps use given string as build dependencies instead of\n"
+" retrieving them from control file\n"
+" -c build-conf use given string for build conflicts instead of\n"
+" retrieving them from control file\n"
+" -a arch assume given host architecture\n"
+" -P profiles assume given build profiles (comma-separated list)\n"
+" --admindir=<directory>\n"
+" change the administrative directory.\n"
+" -?, --help show this help message.\n"
+" --version show the version."
+msgstr ""
+"Opcions:\n"
+" -A ignora Build-Depends-Arch i Build-Conflicts-Arch.\n"
+" -B ignora Build-Depends-Indep i Build-Conflicts-Indep.\n"
+" -I ignora dependències i conflictes de construcció "
+"incorporades.\n"
+" -d <dep> empra la cadena donada com dependències de construcció en\n"
+" comptes d'obtenir-les del fitxer de control.\n"
+" -c <dep> empra la cadena donada com conflictes de construcció en\n"
+" comptes d'obtenir-les del fitxer de control.\n"
+" -a <arq> assumeix l'arquitectura amfitrió especificada.\n"
+" -P <perfils> assumeix els perfils de construcció especificats (llista\n"
+" de valors separats per comes).\n"
+" --admindir=<directori>\n"
+" canvia el directori administratiu.\n"
+" -?, --help mostra aquest missatge d'ajuda.\n"
+" --version mostra la versió."
+
+#: scripts/dpkg-checkbuilddeps.pl
+msgid ""
+"<control-file> is the control file to process (default: debian/control)."
+msgstr ""
+"<fitxer-control> és el fitxer de control a processar (predeterminat: debian/"
+"control)."
+
+#: scripts/dpkg-checkbuilddeps.pl scripts/dpkg-shlibdeps.pl
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "cannot parse %s field"
+msgstr "no es pot analitzar el camp %s"
+
+#: scripts/dpkg-checkbuilddeps.pl
+#, perl-format
+msgid "Unmet build dependencies: %s"
+msgstr "Dependències de construcció no satisfetes: %s"
+
+#: scripts/dpkg-checkbuilddeps.pl
+#, perl-format
+msgid "Build conflicts: %s"
+msgstr "Conflictes de construcció: %s"
+
+#: scripts/dpkg-distaddfile.pl
+#, perl-format
+msgid ""
+"Usage: %s [<option>...] <filename> <section> <priority>\n"
+"\n"
+"Options:\n"
+" -f<files-list-file> write files here instead of debian/files.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+"Forma d'ús: %s [<opció>…] <nom-de-fitxer> <secció> <prioritat>\n"
+"\n"
+"Opcions:\n"
+" -f<fitxer-de-fitxers> escriu fitxers aquí en comptes de debian/files.\n"
+" -?, --help mostra aquest missatge d'ajuda.\n"
+" --version mostra la versió.\n"
+
+#: scripts/dpkg-distaddfile.pl
+msgid "need exactly a filename, section and priority"
+msgstr "es necessita exactament un nom de fitxer, una secció i una prioritat"
+
+#: scripts/dpkg-distaddfile.pl
+msgid "filename, section and priority may contain no whitespace"
+msgstr ""
+"el nom de fitxer, la secció i la prioritat no poden contenir espais blancs"
+
+#: scripts/dpkg-distaddfile.pl scripts/dpkg-genbuildinfo.pl
+#: scripts/dpkg-gencontrol.pl scripts/dpkg-mergechangelogs.pl
+#: scripts/Dpkg/Compression/FileHandle.pm scripts/Dpkg/File.pm
+#: scripts/Dpkg/IPC.pm scripts/Dpkg/Interface/Storable.pm
+#: scripts/Dpkg/Source/BinaryFiles.pm scripts/Dpkg/Source/Package.pm
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "cannot write %s"
+msgstr "no es pot escriure %s"
+
+#: scripts/dpkg-distaddfile.pl scripts/dpkg-genbuildinfo.pl
+#: scripts/dpkg-gencontrol.pl
+msgid "install new files list file"
+msgstr "no es pot instal·lar la nova llista de fitxers"
+
+#: scripts/dpkg-genbuildinfo.pl
+msgid ""
+"Options:\n"
+" --build=<type>[,...] specify the build <type>: full, source, binary,\n"
+" any, all (default is 'full').\n"
+" -c<control-file> get control info from this file.\n"
+" -l<changelog-file> get per-version info from this file.\n"
+" -f<files-list-file> get .deb files list from this file.\n"
+" -F<changelog-format> force changelog format.\n"
+" -O[<buildinfo-file>] write to stdout (or <buildinfo-file>).\n"
+" -u<upload-files-dir> directory with files (default is '..').\n"
+" --always-include-kernel always include Build-Kernel-Version.\n"
+" --always-include-path always include Build-Path.\n"
+" --admindir=<directory> change the administrative directory.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+" --build=<tipus>[,…] especifica el <tipus> de construcció: full,\n"
+" source, binary, any, all (predeterminat a "
+"“full”).\n"
+" -c<fitxer-control> fitxer d'informació de control.\n"
+" -l<fitxer-registre> fitxer del registre de canvis.\n"
+" -f<fitxer-de-fitxers> fitxer amb la llista de fitxers a publicar.\n"
+" -F<format-registre> força el format del registre de canvis.\n"
+" -O[<fitxer-buildinfo>] escriu a stdout (o <fitxer-buildinfo>).\n"
+" -u<dir-publicació> directori amb fitxers a publicar (predeterminat a "
+"«..»).\n"
+" --always-include-kernel inclou sempre el camp Build-Kernel-Version.\n"
+" --always-include-path inclou sempre el camp Build-Path.\n"
+" --admindir=<directori> canvia el directori administratiu.\n"
+" -?, --help mostra aquest missatge d'ajuda.\n"
+" --version mostra la versió.\n"
+
+#: scripts/dpkg-genbuildinfo.pl
+msgid "binary build with no binary artifacts found; .buildinfo is meaningless"
+msgstr ""
+"no s'ha trobat cap artefacte binari en construcció binaria; el .buildinfo no "
+"té sentit"
+
+#: scripts/dpkg-genbuildinfo.pl
+#, perl-format
+msgid "cannot install output buildinfo file '%s'"
+msgstr "no s'ha pogut instal·lar el fitxer buildinfo de sortida «%s»"
+
+#: scripts/dpkg-genchanges.pl
+msgid ""
+"Options:\n"
+" --build=<type>[,...] specify the build <type>: full, source, binary,\n"
+" any, all (default is 'full').\n"
+" -g source and arch-indep build.\n"
+" -G source and arch-specific build.\n"
+" -b binary-only, no source files.\n"
+" -B binary-only, only arch-specific files.\n"
+" -A binary-only, only arch-indep files.\n"
+" -S source-only, no binary files.\n"
+" -c<control-file> get control info from this file.\n"
+" -l<changelog-file> get per-version info from this file.\n"
+" -f<files-list-file> get .deb files list from this file.\n"
+" -v<since-version> include all changes later than version.\n"
+" -C<changes-description> use change description from this file.\n"
+" -m<maintainer> override control's maintainer value.\n"
+" -e<maintainer> override changelog's maintainer value.\n"
+" -u<upload-files-dir> directory with files (default is '..').\n"
+" -si source includes orig, if new upstream (default).\n"
+" -sa source includes orig, always.\n"
+" -sd source is diff and .dsc only.\n"
+" -q quiet - no informational messages on stderr.\n"
+" -F<changelog-format> force changelog format.\n"
+" -V<name>=<value> set a substitution variable.\n"
+" -T<substvars-file> read variables here, not debian/substvars.\n"
+" -D<field>=<value> override or add a field and value.\n"
+" -U<field> remove a field.\n"
+" -O[<filename>] write to stdout (default) or <filename>.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+"Opcions:\n"
+" --build=<tipus>[,…] especifica el <tipus> de construcció: full, "
+"source,\n"
+" binary, any, all (predeterminat a “full”).\n"
+" -g només fonts i fitxers independents "
+"d'arquitectura.\n"
+" -G només fonts i fitxers dependents d'arquitectura.\n"
+" -b només binaris, sense fitxers font.\n"
+" -B només binaris (fitxers dependents "
+"d'arquitectura).\n"
+" -A només binaris (fitxers independents "
+"d'arquitectura).\n"
+" -S només fonts, sense fitxers binaris.\n"
+" -c<fitxer-control> fitxer d'informació de control.\n"
+" -l<fitxer-registre> fitxer del registre de canvis.\n"
+" -f<fitxer-de-fitxers> fitxer amb la llista de fitxers a publicar.\n"
+" -v<versió> inclou tots els canvis posteriors a <versió>.\n"
+" -C<descripció-canvis> fitxer amb la descripció dels canvis.\n"
+" -m<mantenidor> substitueix el valor del mantenidor de control.\n"
+" -e<mantenidor> substitueix el valor del mantenidor del registre\n"
+" de canvis.\n"
+" -u<dir-publicació> directori amb fitxers a publicar (predeterminat a "
+"«..»).\n"
+" -si (predeterminat) el font inclou l'orig, si és un nou original.\n"
+" -sa el font inclou l'orig, sempre.\n"
+" -sd el font és només el diff i el .dsc.\n"
+" -q mode silenciós, sense missatges d'informació a "
+"stderr.\n"
+" -F<format-registre> força el format del registre de canvis.\n"
+" -V<nom>=<valor> estableix una variable de substitució.\n"
+" -T<fitxer-substitució> fitxer de les variables de substitució, i no\n"
+" debian/substvars.\n"
+" -D<camp>=<valor> afegeix o sobreescriu un camp i valor.\n"
+" -U<camp> suprimeix un camp.\n"
+" -O[<fitxer>] escriu les variables a stdout (predeterminat)\n"
+" o al <fitxer>.\n"
+" -?, --help mostra aquest missatge d'ajuda.\n"
+" --version mostra la versió.\n"
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "the current version (%s) is earlier than the previous one (%s)"
+msgstr "la versió actual (%s) és inferior a l'anterior (%s)"
+
+#: scripts/dpkg-genchanges.pl
+msgid "missing Section for source files"
+msgstr "manca el camp Section pels fitxers font"
+
+#: scripts/dpkg-genchanges.pl
+msgid "missing Priority for source files"
+msgstr "manca el camp Priority pels fitxers font"
+
+#: scripts/dpkg-genchanges.pl scripts/Dpkg/Vendor.pm
+#, perl-format
+msgid "%s is empty"
+msgstr "%s és buit"
+
+#: scripts/dpkg-genchanges.pl
+msgid "not including original source code in upload"
+msgstr "no s'està incloent el codi font original a la pujada"
+
+#: scripts/dpkg-genchanges.pl
+msgid "ignoring -sd option for native Debian package"
+msgstr "s'omet l'opció -sd per al paquet de Debian nadiu"
+
+#: scripts/dpkg-genchanges.pl
+msgid "including full source code in upload"
+msgstr "s'esta incloent el codi font complet a la pujada"
+
+#: scripts/dpkg-genchanges.pl
+msgid ""
+"binary-only arch-specific upload (source code and arch-indep packages not "
+"included)"
+msgstr ""
+"pujada només de binaris dependents d'arquitectura (no s'inclouen el codi "
+"font ni els paquets independents d'arquitectura)"
+
+#: scripts/dpkg-genchanges.pl
+msgid ""
+"binary-only arch-indep upload (source code and arch-specific packages not "
+"included)"
+msgstr ""
+"pujada només de binaris independents d'arquitectura (no s'inclouen el codi "
+"font ni els paquets dependents d'arquitectura)"
+
+#: scripts/dpkg-genchanges.pl
+msgid "binary-only upload (no source code included)"
+msgstr "pujada només de binaris (no s'inclou el codi font)"
+
+#: scripts/dpkg-genchanges.pl
+msgid "binary build with no binary artifacts found; cannot distribute"
+msgstr ""
+"no s'ha trobat cap artefacte binari en construcció binaria; no es pot "
+"distribuir"
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "package %s in control file but not in files list"
+msgstr "el paquet %s és al fitxer de control però no a la llista de fitxers"
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "package %s listed in files list but not in control info"
+msgstr ""
+"el paquet %s és a la llista de fitxers però no a la informació de control"
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "missing Section for binary package %s; using '-'"
+msgstr "manca el camp Section pel paquet binari %s; s'emprarà '-'"
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "package %s has section %s in control file but %s in files list"
+msgstr ""
+"el paquet %s té la secció %s en el fitxer de control però %s en la llista de "
+"fitxers"
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "missing Priority for binary package %s; using '-'"
+msgstr "manca el camp Priority pel paquet binari %s; s'emprarà '-'"
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "package %s has priority %s in control file but %s in files list"
+msgstr ""
+"el paquet %s té la prioritat %s en el fitxer de control però %s en la llista "
+"de fitxers"
+
+#: scripts/dpkg-genchanges.pl scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "missing information for critical output field %s"
+msgstr "manca informació per al camp d'eixida imprescindible %s"
+
+#: scripts/dpkg-genchanges.pl scripts/dpkg-gencontrol.pl
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "missing information for output field %s"
+msgstr "manca informació per al camp d'eixida %s"
+
+#: scripts/dpkg-gencontrol.pl
+msgid ""
+"Options:\n"
+" -p<package> print control file for package.\n"
+" -c<control-file> get control info from this file.\n"
+" -l<changelog-file> get per-version info from this file.\n"
+" -F<changelog-format> force changelog format.\n"
+" -v<force-version> set version of binary package.\n"
+" -f<files-list-file> write files here instead of debian/files.\n"
+" -P<package-build-dir> temporary build directory instead of debian/tmp.\n"
+" -n<filename> assume the package filename will be <filename>.\n"
+" -O[<file>] write to stdout (or <file>), not .../DEBIAN/"
+"control.\n"
+" -is, -ip, -isp, -ips deprecated, ignored for compatibility.\n"
+" -D<field>=<value> override or add a field and value.\n"
+" -U<field> remove a field.\n"
+" -V<name>=<value> set a substitution variable.\n"
+" -T<substvars-file> read variables here, not debian/substvars.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+"Opcions:\n"
+" -p<paquet> mostra el fitxer de control per al paquet.\n"
+" -c<fitxer-control> fitxer d'informació de control.\n"
+" -l<fitxer-registre> fitxer del registre de canvis.\n"
+" -F<format-registre> força el format del registre de canvis.\n"
+" -v<versió-binari> estableix la versió del paquet binari.\n"
+" -f<fitxer-de-fitxers> fitxer amb la llista de fitxers a publicar, i no\n"
+" a debian/files.\n"
+" -P<dir-construcció> directori temporal de construcció, i no debian/"
+"tmp.\n"
+" -n<fitxer> assumeix que el nom de fitxer del paquet serà\n"
+" <fitxer>.\n"
+" -O[<fitxer>] escriu les variables a stdout (o al <fitxer>), i "
+"no\n"
+" a …/DEBIAN/control.\n"
+" -is, -ip, -isp, -ips obsoletes, s'ignoren per compatibilitat.\n"
+" -D<camp>=<valor> afegeix o sobreescriu un camp i valor.\n"
+" -U<camp> suprimeix un camp.\n"
+" -V<nom>=<valor> estableix una variable de substitució.\n"
+" -T<fitxer-substitució> fitxer de les variables de substitució, i no\n"
+" debian/substvars.\n"
+" -?, --help mostra aquest missatge d'ajuda.\n"
+" --version mostra la versió.\n"
+
+#: scripts/dpkg-gencontrol.pl scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "illegal package name '%s': %s"
+msgstr "el nom de paquet «%s» és il·legal: %s"
+
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid "package %s not in control info"
+msgstr "el paquet %s no és a la informació de control"
+
+#: scripts/dpkg-gencontrol.pl scripts/dpkg-gensymbols.pl
+msgid "no package stanza found in control info"
+msgstr "no s'ha trobat cap paràgraf de paquet a la informació de control"
+
+#: scripts/dpkg-gencontrol.pl scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "must specify package since control info has many (%s)"
+msgstr ""
+"heu d'especificar el paquet ja que la informació de control en conté molts "
+"(%s)"
+
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid "package %s: "
+msgstr "paquet %s: "
+
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid ""
+"current host architecture '%s' does not appear in package '%s' architecture "
+"list (%s)"
+msgstr ""
+"l'arquitectura amfitrió «%1$s» no apareix a la llista d'arquitectures (%3$s) "
+"del paquet «%2$s»"
+
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid "%s field of package %s: "
+msgstr "camp %s del paquet %s: "
+
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid "parsing package '%s' %s field: %s"
+msgstr "en analitzar el camp %2$s del paquet «%1$s»: %3$s"
+
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid ""
+"the %s field contains an arch-specific dependency but the package '%s' is "
+"architecture all"
+msgstr ""
+"el camp %s conté una dependència especifica d'arquitectura però el paquet "
+"«%s» és d'arquitectura «all»"
+
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid "%s package '%s' with udeb specific field %s"
+msgstr "paquet %s «%s» amb camp específic d'udeb %s"
+
+#: scripts/dpkg-gencontrol.pl scripts/Dpkg/Source/Package.pm
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot stat %s"
+msgstr "no es pot fer «stat» a «%s»"
+
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid "cannot install output control file '%s'"
+msgstr "no s'ha pogut instal·lar el fitxer de control de sortida «%s»"
+
+#: scripts/dpkg-gensymbols.pl
+msgid ""
+"Options:\n"
+" -l<library-path> add directory to private shared library search "
+"list.\n"
+" -p<package> generate symbols file for package.\n"
+" -P<package-build-dir> temporary build directory instead of debian/tmp.\n"
+" -e<library> explicitly list libraries to scan.\n"
+" -v<version> version of the packages (defaults to\n"
+" version extracted from debian/changelog).\n"
+" -c<level> compare generated symbols file with the "
+"reference\n"
+" template in the debian directory and fail if\n"
+" difference is too important; level goes from 0 "
+"for\n"
+" no check, to 4 for all checks (default level is "
+"1).\n"
+" -q keep quiet and never emit any warnings or\n"
+" generate a diff between generated symbols\n"
+" file and the reference template.\n"
+" -I<file> force usage of <file> as reference symbols\n"
+" file instead of the default file.\n"
+" -O[<file>] write to stdout (or <file>), not .../DEBIAN/"
+"symbols.\n"
+" -t write in template mode (tags are not\n"
+" processed and included in output).\n"
+" -V verbose output; write deprecated symbols and "
+"pattern\n"
+" matching symbols as comments (in template mode "
+"only).\n"
+" -a<arch> assume <arch> as host architecture when "
+"processing\n"
+" symbol files.\n"
+" -d display debug information during work.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+"Opcions:\n"
+" -l<directori> afegeix el directori a la llista de cerca de\n"
+" biblioteques compartides privades.\n"
+" -p<paquet> genera el fitxer de símbols per a <paquet>.\n"
+" -P<dir-construcció> directori temporal de construcció, i no debian/"
+"tmp.\n"
+" -e<biblioteca> llista explicita de biblioteques a cercar.\n"
+" -v<versió> versió dels paquets (predeterminada a la versió\n"
+" extreta de debian/changelog).\n"
+" -c<nivell> compara el fitxer de símbols generat amb la\n"
+" plantilla de referència al directori de debian "
+"i\n"
+" falla si les diferencies són massa importants; "
+"el\n"
+" nivell va de 0 per no verificació a 4 per a "
+"totes\n"
+" les verificacions (predeterminat a 1).\n"
+" -q mode silenciós, no emet cap avís ni genera diff\n"
+" entre el fitxer generat de símbols i la\n"
+" plantilla de referència.\n"
+" -I<fitxer> força l'ús de <fitxer> com a fitxer de símbols "
+"de\n"
+" referència en comptes del fitxer "
+"predeterminat.\n"
+" -O[<fitxer>] escriu a stdout (o <fitxer>), i no a\n"
+" …/DEBIAN/symbols.\n"
+" -t escriu en mode plantilla (les etiquetes no es\n"
+" processen ni s'inclouen a la sortida).\n"
+" -V sortida detallada; escriu símbols obsoletes i "
+"símbols\n"
+" concordants amb patrons com a comentaris (només "
+"en\n"
+" mode de plantilla).\n"
+" -a<arq> empra <arq> com arquitectura amfitrió en "
+"analitzar\n"
+" fitxers de símbols.\n"
+" -d mostra informació de depuració.\n"
+" -?, --help mostra aquest missatge d'ajuda.\n"
+" --version mostra la versió.\n"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "pattern '%s' did not match any file"
+msgstr "el patró «%s» no coincideix amb cap fitxer"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "can't read directory %s: %s"
+msgstr "no es pot llegir el directori %s: %s"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "Dpkg::Shlibs::Objdump couldn't parse %s\n"
+msgstr "Dpkg::Shlibs::Objdump no ha pogut analitzar %s\n"
+
+#: scripts/dpkg-gensymbols.pl
+msgid "<standard output>"
+msgstr "<eixida estàndard>"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "new libraries appeared in the symbols file: %s"
+msgstr "han aparegut noves biblioteques en el fitxer «symbols»: %s"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "some libraries disappeared in the symbols file: %s"
+msgstr "han desaparegut algunes biblioteques del fitxer «symbols»: %s"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "some new symbols appeared in the symbols file: %s"
+msgstr "han aparegut alguns símbols nous en el fitxer «symbols»: %s"
+
+#: scripts/dpkg-gensymbols.pl
+msgid "see diff output below"
+msgstr "vegeu la sortida «diff» més avall"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "some symbols or patterns disappeared in the symbols file: %s"
+msgstr "han desaparegut alguns símbols o patrons en el fitxer «symbols»: %s"
+
+#: scripts/dpkg-gensymbols.pl
+msgid "the generated symbols file is empty"
+msgstr "el fitxer «symbols» generat està buit"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "%s doesn't match completely %s"
+msgstr "%s no coincideix completament amb %s"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "no debian/symbols file used as basis for generating %s"
+msgstr "no s'ha emprat cap fitxer debian/symbols com a base per a generar %s"
+
+#: scripts/dpkg-mergechangelogs.pl
+msgid ""
+"This is free software; see the GNU General Public License version 2 or\n"
+"later for copying conditions. There is NO warranty.\n"
+msgstr ""
+"Aquest és programari lliure; vegeu la Llicència Pública General GNU versió 2 "
+"o posterior per a les condicions de còpia. NO hi ha garantia.\n"
+
+#: scripts/dpkg-mergechangelogs.pl
+#, perl-format
+msgid ""
+"Usage: %s [<option>...] <old> <new-a> <new-b> [<out>]\n"
+"\n"
+"Options:\n"
+" -m, --merge-prereleases merge pre-releases together, ignores everything\n"
+" after the last '~' in the version.\n"
+" --merge-unreleased merge UNRELEASED entries together, ignoring "
+"their\n"
+" version numbers.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+"Forma d'ús: %s [<opció> …] <antic> <nou-a> <nou-b> [<eixida>]\n"
+"\n"
+"Opcions:\n"
+" -m, --merge-prereleases fusiona prellançaments, omet qualsevol cosa\n"
+" després de l'últim «~» a la versió.\n"
+" --merge-unreleased fusiona entrades «UNRELEASED», omet les "
+"versions.\n"
+" -?, --help mostra aquest missatge d'ajuda.\n"
+" --version mostra la versió.\n"
+
+#: scripts/dpkg-mergechangelogs.pl
+msgid "needs at least three arguments"
+msgstr "necessita almenys tres arguments"
+
+#: scripts/dpkg-mergechangelogs.pl
+msgid "file arguments need to exist"
+msgstr "els arguments fitxer han d'existir"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "Usage: %s [<option>...] <file>...\n"
+msgstr "Forma d'ús: %s [<opció>…] <fitxer>…\n"
+
+#: scripts/dpkg-name.pl
+msgid ""
+"\n"
+"Options:\n"
+" -a, --no-architecture no architecture part in filename.\n"
+" -o, --overwrite overwrite if file exists.\n"
+" -k, --symlink don't create a new file, but a symlink.\n"
+" -s, --subdir [dir] move file into subdirectory (use with care).\n"
+" -c, --create-dir create target directory if not there (use with "
+"care).\n"
+" -?, --help show this help message.\n"
+" -v, --version show the version.\n"
+"\n"
+"file.deb changes to <package>_<version>_<architecture>.<package_type>\n"
+"according to the 'underscores convention'.\n"
+msgstr ""
+"\n"
+"Opcions:\n"
+" -a, --no-architecture no afegeix la part d'arquitectura al nom de "
+"fitxer.\n"
+" -o, --overwrite sobreescriu el fitxer si existeix.\n"
+" -k, --symlink crear un enllaç simbòlic i no un fitxer nou.\n"
+" -s, --subdir [<dir>] mou el fitxer al <dir> (empreu amb cura).\n"
+" -c, --create-dir crea el <dir> destí si no existeix (empreu amb "
+"cura).\n"
+" -?, --help mostra aquest missatge d'ajuda.\n"
+" -v, --version mostra la versió.\n"
+"\n"
+"fitxer.deb canvia a <paquet>_<versió>_<arquitectura>.<tipus_de_paquet>\n"
+"d'acord amb la “convenció de caràcters de subratllat”.\n"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "cannot find '%s'"
+msgstr "no s'ha trobat «%s»"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "binary control file %s"
+msgstr "fitxer de control binari %s"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "assuming architecture '%s' for '%s'"
+msgstr "s'està assumint l'arquitectura «%s» per a «%s»"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "bad package control information for '%s'"
+msgstr "informació de control del paquet errònia per a «%s»"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "assuming section '%s' for '%s'"
+msgstr "s'està assumint la secció «%s» per a «%s»"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "no Package field found in '%s', skipping package"
+msgstr "no s'ha trobat el camp Package a «%s», s'ometrà el paquet"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "created directory '%s'"
+msgstr "s'ha creat el directori «%s»"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "cannot create directory '%s'"
+msgstr "no es pot crear el directori «%s»"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "no such directory '%s', try --create-dir (-c) option"
+msgstr "el directori «%s» no existeix, proveu amb l'opció --create-dir (-c)"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "skipping '%s'"
+msgstr "s'està ometent «%s»"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "cannot move '%s' to existing file"
+msgstr "no es pot moure «%s» a un fitxer existent"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "moved '%s' to '%s'"
+msgstr "s'ha mogut «%s» a «%s»"
+
+#: scripts/dpkg-name.pl
+msgid "mkdir can be used to create directory"
+msgstr "es pot emprar mkdir per a crear un directori"
+
+#: scripts/dpkg-name.pl
+msgid "need at least a filename"
+msgstr "es necessita almenys un directori"
+
+#: scripts/dpkg-parsechangelog.pl
+msgid ""
+"Options:\n"
+" -l, --file <changelog-file>\n"
+" get per-version info from this file.\n"
+" -F <changelog-format> force changelog format.\n"
+" -S, --show-field <field> show the values for <field>.\n"
+" -?, --help show this help message.\n"
+" --version show the version."
+msgstr ""
+"Opcions:\n"
+" -l, --file <fitxer-registre>\n"
+" fitxer del registre de canvis.\n"
+" -F <format-registre> força el format del registre de canvis.\n"
+" -S, --show-field <camp> mostra els valors per al <camp>.\n"
+" -?, --help mostra aquest missatge d'ajuda.\n"
+" --version mostra la versió."
+
+#: scripts/dpkg-parsechangelog.pl
+msgid ""
+"Parser options:\n"
+" --format <output-format>\n"
+" set output format (defaults to 'dpkg').\n"
+" --reverse include all changes in reverse order.\n"
+" --all include all changes.\n"
+" -s, --since <version> include all changes later than <version>.\n"
+" -v <version> ditto.\n"
+" -u, --until <version> include all changes earlier than <version>.\n"
+" -f, --from <version> include all changes equal or later than "
+"<version>.\n"
+" -t, --to <version> include all changes up to or equal than "
+"<version>.\n"
+" -c, --count <number> include <number> entries from the top (or tail\n"
+" if <number> is lower than 0).\n"
+" -n <number> ditto.\n"
+" -o, --offset <number> change starting point for --count, counted from\n"
+" the top (or tail if <number> is lower than 0).\n"
+msgstr ""
+"Opcions de l'analitzador:\n"
+" --format <format-sortida>\n"
+" vegeu la pàgina de manual per la llista de "
+"formats\n"
+" de sortida disponibles, el valor predeterminat\n"
+" és «dpkg».\n"
+" --reverse inclou tots els canvis en ordre invertit.\n"
+" --all inclou tots els canvis.\n"
+" -s, --since <versió> inclou tots els canvis posteriors a <versió>.\n"
+" -v <versió> ídem.\n"
+" -u, --until <versió> inclou tots els canvis anteriors a <versió>.\n"
+" -f, --from <versió> inclou tots els canvis iguals o posteriors a\n"
+" <versió>.\n"
+" -t, --to <versió> inclou tots els canvis fins o iguals a <versió>.\n"
+" -c, --count <número> inclou el <número> d'entrades des del principi,\n"
+" o des del final si <número> és inferior a 0.\n"
+" -n <número> ídem.\n"
+" -o, --offset <número> canvia el punt d'inici per a --count, contant\n"
+" des del principi, o des del final si <número>\n"
+" és inferior a 0.\n"
+
+#: scripts/dpkg-parsechangelog.pl
+msgid "-L is obsolete; it is without effect"
+msgstr "-L és obsolet; no té efecte"
+
+#: scripts/dpkg-parsechangelog.pl
+msgid "bad changelog format name"
+msgstr "el format %s del registre de canvis no és vàlid"
+
+#: scripts/dpkg-parsechangelog.pl
+msgid "missing changelog filename"
+msgstr "manca el nom de fitxer del registre de canvis"
+
+#: scripts/dpkg-parsechangelog.pl
+msgid "takes no non-option arguments"
+msgstr "no accepta cap argument que no siguen opcions"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid ""
+"Usage: %s [<option>...] <binary-path> [<override-file> [<path-prefix>]] > "
+"Packages\n"
+"\n"
+"Options:\n"
+" -t, --type <type> scan for <type> packages (default is 'deb').\n"
+" -a, --arch <arch> architecture to scan for.\n"
+" -h, --hash <hash-list> only generate hashes for the specified list.\n"
+" -m, --multiversion allow multiple versions of a single package.\n"
+" -e, --extra-override <file>\n"
+" use extra override file.\n"
+" -M, --medium <medium> add X-Medium field for dselect media access "
+"method\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+"Format d'ús: %s [<opció>…] <camí-binari> [<fitxer-subsitutció> [<prefix-"
+"camí>]] > Packages\n"
+"\n"
+"Opcions:\n"
+" -t, --type <tipus> cerca paquets de <tipus> («deb» és el "
+"predeterminat).\n"
+" -a, --arch <arq> arquitectura a cercar.\n"
+" -h, --hash <llista> genera només les sumes de resum llistades.\n"
+" -m, --multiversion permet múltiples versions de cada paquet.\n"
+" -e, --extra-override <fitxer>\n"
+" empra el fitxer de substitució extra.\n"
+" -M, --medium <mitjà> afegeix el camp X-Medium per al mètode d'accés\n"
+" dels suports de dselect.\n"
+" -?, --help mostra quest missatge d'ajuda.\n"
+" --version mostra la versió.\n"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid " %s (package says %s, not %s)"
+msgstr " %s (el paquet especifica %s, i no %s)"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "unconditional maintainer override for %s"
+msgstr "substitució de mantenidor incondicional per a %s"
+
+#: scripts/dpkg-scanpackages.pl scripts/dpkg-shlibdeps.pl scripts/Dpkg/IPC.pm
+#: scripts/Dpkg/Shlibs/Objdump.pm
+#, perl-format
+msgid "cannot fork for %s"
+msgstr "no es pot fer «fork» per a %s"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "couldn't parse control information from %s"
+msgstr "no s'ha pogut analitzar la informació de control de %s"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "'dpkg-deb -I %s control' exited with %d, skipping package"
+msgstr "«dpkg-deb -I %s control» ha sortit amb %d, s'ometrà el paquet"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "no Package field in control file of %s"
+msgstr "el fitxer de control de %s no conté el camp Package"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid ""
+"package %s (filename %s) is repeat but newer version; used that one and "
+"ignored data from %s!"
+msgstr ""
+"el paquet %s (nom de fitxer %s) és duplicat però amb versió més nova; s'està "
+"emprant i s'ha ignorat la informació de %s!"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid ""
+"package %s (filename %s) is repeat; ignored that one and using data from %s!"
+msgstr ""
+"el paquet %s (nom de fitxer %s) és duplicat; s'ha ignorat i s'està emprant "
+"informació de %s!"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "package %s (filename %s) has Filename field!"
+msgstr "el paquet %s (nom de fitxer %s) conté un camp Filename!"
+
+#: scripts/dpkg-scanpackages.pl scripts/dpkg-scansources.pl
+msgid "one to three arguments expected"
+msgstr "s'esperen d'un a tres arguments"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "unsupported checksum '%s'"
+msgstr "suma de verificació «%s» no admesa"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "binary path %s not found"
+msgstr "no s'ha trobat el camí del binari %s"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "override file %s not found"
+msgstr "no s'ha trobat el fitxer de substitució %s"
+
+#: scripts/dpkg-scanpackages.pl
+msgid "failed when writing stdout"
+msgstr "s'ha produït un error en escriure la sortida estàndard"
+
+#: scripts/dpkg-scanpackages.pl
+msgid "couldn't close stdout"
+msgstr "no s'ha pogut tancar la sortida estàndard"
+
+#: scripts/dpkg-scanpackages.pl
+msgid "Packages with multiple instances but no --multiversion specified:"
+msgstr ""
+"Paquets amb múltiples instancies però no s'ha especificat --multiversion:"
+
+#: scripts/dpkg-scanpackages.pl
+msgid "Packages in override file with incorrect old maintainer value:"
+msgstr ""
+"Paquets en el fitxer de substitució amb valor antic de mantenidor incorrecte:"
+
+#: scripts/dpkg-scanpackages.pl
+msgid "Packages specifying same maintainer as override file:"
+msgstr "Paquets amb el mateix mantenidor al fitxer de substitució:"
+
+#: scripts/dpkg-scanpackages.pl
+msgid "Packages in archive but missing from override file:"
+msgstr "Paquets a l'arxiu però no presents en el fitxer de substitució:"
+
+#: scripts/dpkg-scanpackages.pl
+msgid "Packages in override file but not in archive:"
+msgstr "Paquets en el fitxer de substitució però on a l'arxiu:"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "Wrote %s entries to output Packages file."
+msgstr "S'han escrit %s entrades al fitxer Packages de sortida."
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid ""
+"Usage: %s [<option>...] <binary-path> [<override-file> [<path-prefix>]] > "
+"Sources\n"
+"\n"
+"Options:\n"
+" -n, --no-sort don't sort by package before outputting.\n"
+" -e, --extra-override <file>\n"
+" use extra override file.\n"
+" -s, --source-override <file>\n"
+" use file for additional source overrides, "
+"default\n"
+" is regular override file with .src appended.\n"
+" --debug turn debugging on.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+"\n"
+"See the man page for the full documentation.\n"
+msgstr ""
+"Forma d'ús: %s [<opció>…] <camí-binari> [<fitxer-substitució> [<prefix-"
+"camí>]] > Sources\n"
+"\n"
+"Opcions:\n"
+" -n, --no-sort no ordena els paquets de sortida.\n"
+" -e, --extra-override <fitxer>\n"
+" empra el fitxer de substitució extra.\n"
+" -s, --source-override <fitxer>\n"
+" empra el fitxer de substitució de font "
+"addicional\n"
+" per defecte és el fitxer de substitució normal "
+"amb\n"
+" «.src» afegit.\n"
+" --debug activa la depuració.\n"
+" -?, --help mostra aquest missatge d'ajuda.\n"
+" --version mostra la versió.\n"
+"\n"
+"Vegeu la pàgina de manual per a la documentació completa.\n"
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid "invalid override entry at line %d (%d fields)"
+msgstr "entrada de substitució no vàlida en la línia %d (%d camps)"
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid "ignoring duplicate override entry for %s at line %d"
+msgstr "s'omet l'entrada de substitució duplicada per %s en la línia %d"
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid "ignoring override entry for %s, invalid priority %s"
+msgstr "s'omet l'entrada de substitució per %s amb prioritat %s no vàlida"
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid "invalid source override entry at line %d (%d fields)"
+msgstr ""
+"l'entrada de substitució de font no és valida en la línia %d (%d camps) "
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid "ignoring duplicate source override entry for %s at line %d"
+msgstr ""
+"s'omet l'entrada duplicada de substitució de font per %s en la línia %d"
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid "no binary packages specified in %s"
+msgstr "no s'ha especificat cap paquet binari a %s"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "administrative directory '%s' does not exist"
+msgstr "el directori administratiu «%s» no existeix"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "unrecognized dependency field '%s'"
+msgstr "camp de dependència «%s» no reconegut"
+
+#: scripts/dpkg-shlibdeps.pl
+msgid "need at least one executable"
+msgstr "es necessita almenys un executable"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid ""
+"cannot find library %s needed by %s (ELF format: '%s' abi: '%s'; RPATH: '%s')"
+msgstr ""
+"no s'ha trobat la biblioteca %s necessària per %s (format ELF: «%s»; ABI: "
+"«%s»; RPATH: «%s»)"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "%s has an unexpected SONAME (%s)"
+msgstr "%s conté un SONAME (%s) inesperat"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid ""
+"no dependency information found for %s (used by %s)\n"
+"Hint: check if the library actually comes from a package."
+msgstr ""
+"no s'ha trobar la informació de dependències per %s (utilitzat per %s)\n"
+"Consell: comproveu si la biblioteca prové realment d'un paquet."
+
+#: scripts/dpkg-shlibdeps.pl
+msgid ""
+"binaries to analyze should already be installed in their package's directory"
+msgstr ""
+"els binaris a analitzar haurien d'estar instal·lats en el directori del seu "
+"paquet"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "symbol %s used by %s found in none of the libraries"
+msgstr "no s'ha trobat el símbol %s utilitzat per %s en cap biblioteca"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid ""
+"%s contains an unresolvable reference to symbol %s: it's probably a plugin"
+msgstr ""
+"%s conté una referència no resolta al símbol %s: segurament és un connector"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "%d similar warning has been skipped (use -v to see it)"
+msgid_plural ""
+"%d other similar warnings have been skipped (use -v to see them all)"
+msgstr[0] "s'ha ignorat %d avís similar (empreu -v per veure'l)"
+msgstr[1] "s'han ignorat %d avisos similars (empreu -v per veure'ls)"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid ""
+"%s should not be linked against %s (it uses none of the library's symbols)"
+msgstr ""
+"%s no hauria d'estar vinculat a %s (no empra cap símbol de la biblioteca)"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid ""
+"package could avoid a useless dependency if %s was not linked against %s (it "
+"uses none of the library's symbols)"
+msgid_plural ""
+"package could avoid a useless dependency if %s were not linked against %s "
+"(they use none of the library's symbols)"
+msgstr[0] ""
+"el paquet podria evitar una dependència innecessària si %s no estigues "
+"vinculat a %s (no empra cap símbol de la biblioteca)"
+msgstr[1] ""
+"el paquet podria evitar una dependència innecessària si %s no estiguessin "
+"vinculats a %s (no empren cap símbol de la biblioteca)"
+
+#: scripts/dpkg-shlibdeps.pl
+msgid ""
+"Note: libraries are not searched in other binary packages that do not have "
+"any shlibs or symbols file.\n"
+"To help dpkg-shlibdeps find private libraries, you might need to use -l."
+msgstr ""
+"Nota: les biblioteques no es cerquen en altres paquets binaris sense "
+"fitxers\n"
+"shlibs o symbols.\n"
+"Per ajudar a dpkg-shlibdeps a trobar biblioteques privades, podeu "
+"necessitar\n"
+"emprar -l."
+
+#: scripts/dpkg-shlibdeps.pl
+msgid "cannot continue due to the error above"
+msgid_plural "cannot continue due to the errors listed above"
+msgstr[0] "no es pot continuar a causa de l'error anterior"
+msgstr[1] "no es pot continuar a causa dels errors anteriors"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "invalid dependency got generated: %s"
+msgstr "s'ha generat una dependència no vàlida: %s"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "install new varlist file '%s'"
+msgstr "no es pot instal·lar el nou fitxer de substitució de variables «%s»"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "Usage: %s [<option>...] <executable>|-e<executable> [<option>...]"
+msgstr "Forma d'ús: %s [<opció>…] <executable>|-e<executable> [<opció>…]"
+
+#: scripts/dpkg-shlibdeps.pl
+msgid ""
+"Positional options (order is significant):\n"
+" <executable> include dependencies for <executable>,\n"
+" -e<executable> (use -e if <executable> starts with '-')\n"
+" -d<dependency-field> next executable(s) set shlibs:<dependency-field>."
+msgstr ""
+"Opcions posicionals (l'ordre és significatiu):\n"
+" <executable> inclou dependències per <executable>,\n"
+" -e<executable> (empreu -e si <executable> comença amb ‘-’).\n"
+" -d<camp-dependència> el següent executable(s) estableix\n"
+" shlibs:<camp-dependència>."
+
+#: scripts/dpkg-shlibdeps.pl
+msgid ""
+"Options:\n"
+" -l<library-dir> add directory to private shared library search "
+"list.\n"
+" -p<varname-prefix> set <varname-prefix>:* instead of shlibs:*.\n"
+" -O[<file>] write variable settings to stdout (or <file>).\n"
+" -L<local-shlibs-file> shlibs override file, not debian/shlibs.local.\n"
+" -T<substvars-file> update variables here, not debian/substvars.\n"
+" -t<type> set package type (default is deb).\n"
+" -x<package> exclude package from the generated dependencies.\n"
+" -S<package-build-dir> search needed libraries in the given\n"
+" package build directory first.\n"
+" -I<package-build-dir> ignore needed libraries, shlibs and symbols "
+"files\n"
+" in the given build directory.\n"
+" -v enable verbose mode (can be used multiple "
+"times).\n"
+" --ignore-missing-info don't fail if dependency information can't be "
+"found.\n"
+" --warnings=<value> define set of active warnings (see manual page).\n"
+" --admindir=<directory> change the administrative directory.\n"
+" -?, --help show this help message.\n"
+" --version show the version."
+msgstr ""
+"Opcions:\n"
+" -l<directori> afegeix el directori a la llista de cerca de\n"
+" biblioteques compartides privades.\n"
+" -p<prefix-variable> estableix <prefix-variable>:* en comptes de "
+"shlibs:*.\n"
+" -O[<fitxer>] escriu les variables a stdout (o al <fitxer>).\n"
+" -L<fitxer-shlibs-local> fitxer de substitució de shlibs, no debian/shlibs."
+"local.\n"
+" -T<fitxer-substitució> fitxer de variables, no debian/substvars.\n"
+" -t<tipus> estableix el tipus de paquet (per defecte és "
+"deb).\n"
+" -x<paquet> exclou el paquet de les dependències generades.\n"
+" -S<dir-construcció> cerca les biblioteques necessàries primer al\n"
+" directori de construcció del paquet.\n"
+" -I<dir-construcció> ignora biblioteques, fitxers shlibs i fitxers\n"
+" symbols necessaris del directori de "
+"construcció.\n"
+" -v activa el mode detallat (es pot emprar múltiples "
+"cops).\n"
+" --ignore-missing-info no falla si no es pot trobar la informació de\n"
+" dependències.\n"
+" --warnings=<valor> defineix el conjunt d'avisos actius (vegeu la "
+"pàgina de manual).\n"
+" --admindir=<directori> canvia el directori administratiu.\n"
+" -?, --help mostra aquest missatge d'ajuda.\n"
+" --version mostra la versió."
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid ""
+"Dependency fields recognized are:\n"
+" %s\n"
+msgstr ""
+"Els camps de dependències reconeguts són:\n"
+" %s\n"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "can't extract name and version from library name '%s'"
+msgstr "no es pot extreure el nom i la versió del nom de biblioteca «%s»"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "unable to open shared libs info file '%s'"
+msgstr "no es pot obrir el fitxer d'informació «%s» de la biblioteca dinàmica"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "shared libs info file '%s' line %d: bad line '%s'"
+msgstr ""
+"fitxer d'informació «%.255s» de la biblioteca dinàmica, línia %d dolenta: "
+"«%s»"
+
+#: scripts/dpkg-shlibdeps.pl scripts/Dpkg/Changelog/Parse.pm
+#: scripts/Dpkg/Checksums.pm
+#, perl-format
+msgid "cannot open file %s"
+msgstr "no es pot obrir el fitxer %s"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid ""
+"$ORIGIN is used in RPATH of %s and the corresponding directory could not be "
+"identified due to lack of DEBIAN sub-directory in the root of package's "
+"build tree"
+msgstr ""
+"l'RPATH de %s empra $ORIGIN, i el directori corresponent no s'ha pogut "
+"identificar a causa de la manca de subdirectori DEBIAN en l'arrel de l'arbre "
+"de construcció del paquet"
+
+#: scripts/dpkg-shlibdeps.pl
+msgid "diversions involved - output may be incorrect"
+msgstr "hi ha desviacions involucrades, la sortida pot ser incorrecta"
+
+#: scripts/dpkg-shlibdeps.pl
+msgid "write diversion info to stderr"
+msgstr "no es pot escriure la informació de desviació a stderr"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "unknown output from dpkg --search: '%s'"
+msgstr "sortida desconeguda de «dpkg --search»: '%s'"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "--%s needs a directory"
+msgstr "--%s necessita un directori"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "cannot stat directory %s"
+msgstr "no es pot fer «stat» sobre el fitxer %s"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "directory argument %s is not a directory"
+msgstr "l'argument directori %s no és un directori"
+
+#: scripts/dpkg-source.pl scripts/Dpkg/Source/BinaryFiles.pm
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "unable to chdir to '%s'"
+msgstr "s'ha produït un error en canviar al directori «%s»"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "using options from %s: %s"
+msgstr "s'estan emprant opcions de %s: %s"
+
+#: scripts/dpkg-source.pl scripts/Dpkg/Compression.pm
+#, perl-format
+msgid "%s is not a supported compression"
+msgstr "%s no es una compressió admesa"
+
+#: scripts/dpkg-source.pl scripts/Dpkg/Compression.pm
+#, perl-format
+msgid "%s is not a compression level"
+msgstr "%s no és un nivell de compressió"
+
+#: scripts/dpkg-source.pl
+msgid "-E and -W are deprecated, they are without effect"
+msgstr "-E i -W són obsolets, no tenen efecte"
+
+#: scripts/dpkg-source.pl scripts/dpkg-vendor.pl
+msgid "need an action option"
+msgstr "es requereix una opció d'acció"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "no source format specified in %s, see dpkg-source(1)"
+msgstr "no s'ha especificat el format del font a %s, vegeu dpkg-source(1)"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "%s doesn't contain any information about the source package"
+msgstr "%s no conté cap informació del paquet font"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "'%s' is not a legal architecture string in package '%s'"
+msgstr "«%s» no és una cadena d'arquitectura vàlida en el paquet «%s»"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "architecture %s only allowed on its own (list for package %s is '%s')"
+msgstr ""
+"només es permet la arquitectura %s pel seu compte (la llista pel paquet %s "
+"és “%s”)"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "%s doesn't list any binary package"
+msgstr "%s no conté cap paquet binari"
+
+#: scripts/dpkg-source.pl
+msgid "building source for a binary-only release"
+msgstr "s'està construint el font per a un llançament només binari"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "can't build with source format '%s': %s"
+msgstr "no es pot construir amb format de font «%s»: %s"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "using source format '%s'"
+msgstr "s'està emprant el format de font «%s»"
+
+#: scripts/dpkg-source.pl scripts/Dpkg/Source/Package/V1.pm
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Package/V3/Bzr.pm
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+#, perl-format
+msgid "building %s in %s"
+msgstr "s'està construint %s a %s"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "--%s needs at least one argument, the .dsc"
+msgstr "--%s necessita almenys un argument, el .dsc"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "--%s takes no more than two arguments"
+msgstr "--%s no accepta més de dos arguments"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "--%s needs the .dsc file as first argument, not a directory"
+msgstr "--%s necessita el fitxer .dsc com a primer argument, no un directori"
+
+#: scripts/dpkg-source.pl scripts/Dpkg/Source/Package/V1.pm
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Package/V3/Bzr.pm
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+#, perl-format
+msgid "unpack target exists: %s"
+msgstr "la destinació del desempaquetat existeix: %s"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "%s doesn't contain a valid OpenPGP signature"
+msgstr "%s no conté una signatura OpenPGP vàlida"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "extracting unsigned source package (%s)"
+msgstr "s'està extraient el paquet font sense signar (%s)"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "extracting %s in %s"
+msgstr "s'està extraient %s a %s"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "test control %s is not a regular file"
+msgstr "fitxer de control test %s no és un fitxer regular"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "%s field contains value %s, but no tests control file %s"
+msgstr ""
+"el camp %s conté el valor %s, però el fitxer de control de verificació %s no "
+"existeix"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "test control %s is missing %s or %s field"
+msgstr "al fitxer de control test %s li manca el camp %s o %s"
+
+#: scripts/dpkg-source.pl
+msgctxt "source options"
+msgid "<none>"
+msgstr "<cap>"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "Usage: %s [<option>...] <command>"
+msgstr "Forma d'ús: %s [<opció>…] <ordre>"
+
+#: scripts/dpkg-source.pl
+msgid ""
+"Commands:\n"
+" -x, --extract <filename>.dsc [<output-dir>]\n"
+" extract source package.\n"
+" -b, --build <dir> build source package.\n"
+" --print-format <dir> print the format to be used for the source "
+"package.\n"
+" --before-build <dir> run the corresponding source package format "
+"hook.\n"
+" --after-build <dir> run the corresponding source package format "
+"hook.\n"
+" --commit [<dir> [<patch-name>]]\n"
+" store upstream changes in a new patch."
+msgstr ""
+"Ordres:\n"
+" -x, --extract <fitxer>.dsc [<dir-sortida>]\n"
+" extreu el paquet font.\n"
+" -b, --build <dir> construeix el paquet font.\n"
+" --print-format <dir> mostra el format a emprar per al paquet font.\n"
+" --before-build <dir> executa el lligam corresponent al format del\n"
+" paquet font.\n"
+" --after-build <dir> executa el lligam corresponent al format del\n"
+" paquet font.\n"
+" --commit [<dir> [<nom-de-pedaç>]]\n"
+" desa canvis als fitxers originals en un pedaç nou."
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid ""
+"Build options:\n"
+" -c<control-file> get control info from this file.\n"
+" -l<changelog-file> get per-version info from this file.\n"
+" -F<changelog-format> force changelog format.\n"
+" --format=<source-format> set the format to be used for the source "
+"package.\n"
+" -V<name>=<value> set a substitution variable.\n"
+" -T<substvars-file> read variables here.\n"
+" -D<field>=<value> override or add a .dsc field and value.\n"
+" -U<field> remove a field.\n"
+" -i, --diff-ignore[=<regex>]\n"
+" filter out files to ignore diffs of\n"
+" (defaults to: '%s').\n"
+" -I, --tar-ignore[=<pattern>]\n"
+" filter out files when building tarballs\n"
+" (defaults to: %s).\n"
+" -Z, --compression=<compression>\n"
+" select compression to use (defaults to '%s',\n"
+" supported are: %s).\n"
+" -z, --compression-level=<level>\n"
+" compression level to use (defaults to '%d',\n"
+" supported are: '1'-'9', 'best', 'fast')"
+msgstr ""
+"Opcions de construcció:\n"
+" -c<fitxer-control> fitxer d'informació de control.\n"
+" -l<fitxer-registre> fitxer del registre de canvis.\n"
+" -F<format-registre> força el format del registre de canvis.\n"
+" --format=<format-font> estableix el format del paquet font.\n"
+" -V<nom>=<valor> estableix una variable de substitució.\n"
+" -T<fitxer-variables> fitxer de les variables de substitució.\n"
+" -D<field>=<value> afegeix o sobreescriu un camp i valor al .dsc.\n"
+" -U<field> suprimeix un camp.\n"
+" -i, --diff-ignore[=<regex>]\n"
+" ignora els diffs de fitxers que concorden amb "
+"regex\n"
+" (predeterminat a: «%s»).\n"
+" -I, --tar-ignore[=<patró>]\n"
+" filtra fitxers al construir l'arxiu tar\n"
+" (predeterminat a: %s).\n"
+" -Z, --compression=<compressió>\n"
+" tipus de compressió (predeterminat a «%s»,\n"
+" són admesos: %s).\n"
+" -z, --compression-level=<nivell>\n"
+" nivell de compressió (predeterminat a «%d»,\n"
+" són admesos: ‘1’-‘9’, ‘best’, ‘fast’)"
+
+#: scripts/dpkg-source.pl
+msgid ""
+"Extract options:\n"
+" --no-copy don't copy .orig tarballs\n"
+" --no-check don't check signature and checksums before "
+"unpacking\n"
+" --no-overwrite-dir do not overwrite directory on extraction\n"
+" --require-valid-signature abort if the package doesn't have a valid "
+"signature\n"
+" --require-strong-checksums\n"
+" abort if the package contains no strong "
+"checksums\n"
+" --ignore-bad-version allow bad source package versions."
+msgstr ""
+"Opcions d'extracció:\n"
+" --no-copy no copia l'arxiu tar «.orig».\n"
+" --no-check no verifica la signatura ni la suma de "
+"verificació\n"
+" abans del desempaquetat.\n"
+" --require-valid-signature\n"
+" interromp si el paquet no té una signatura "
+"vàlida.\n"
+" --require-strong-checksums\n"
+" interromp si el paquet no té sumes de "
+"verificació\n"
+" fortes.\n"
+" --ignore-bad-version permet versions de font no vàlides."
+
+#: scripts/dpkg-source.pl
+msgid ""
+"General options:\n"
+" --threads-max=<threads>\n"
+" use at most <threads> with compressor.\n"
+" -q quiet mode.\n"
+" -?, --help show this help message.\n"
+" --version show the version."
+msgstr ""
+"Opcions generals:\n"
+" --threads-max=<fils> empra com a molt <fils> amb el compressor.\n"
+" -q mode silenciós.\n"
+" -?, --help mostra aquest missatge d'ajuda.\n"
+" --version mostra la versió."
+
+#: scripts/dpkg-source.pl
+msgid ""
+"Source format specific build and extract options are available;\n"
+"use --format with --help to see them."
+msgstr ""
+"Hi ha opcions de construcció i extracció específiques de format de font;\n"
+"empreu --format amb --help per veure-les."
+
+#: scripts/dpkg-vendor.pl
+msgid ""
+"Commands:\n"
+" --is <vendor> returns true if current vendor is <vendor>.\n"
+" --derives-from <vendor> returns true if current vendor derives from "
+"<vendor>.\n"
+" --query <field> print the content of the vendor-specific field.\n"
+" --help show this help message.\n"
+" --version show the version."
+msgstr ""
+"Ordres:\n"
+" --is <proveïdor> torna vertader si el proveïdor actual és "
+"<proveïdor>.\n"
+" --derives-from <proveïdor>\n"
+" torna vertader si el proveïdor actual deriva de\n"
+" <proveïdor>.\n"
+" --query <camp> mostra el contingut del camp específic del "
+"proveïdor.\n"
+" --help mostra aquest missatge d'ajuda.\n"
+" --version mostra la versió."
+
+#: scripts/dpkg-vendor.pl
+msgid ""
+"Options:\n"
+" --vendor <vendor> assume <vendor> is the current vendor."
+msgstr ""
+"Opcions:\n"
+" --vendor <proveïdor> assumeix que <proveïdor> és el proveïdor actual."
+
+#: scripts/dpkg-vendor.pl
+#, perl-format
+msgid "vendor %s doesn't exist in %s"
+msgstr "el proveïdor %s no existeix a %s"
+
+#: scripts/Dpkg/Arch.pm
+msgid ""
+"cannot determine CC system type, falling back to default (native compilation)"
+msgstr ""
+"no es pot determinar el tipus de sistema de CC, s'emprarà el predeterminat "
+"(construcció nadiua)"
+
+#: scripts/Dpkg/Arch.pm
+#, perl-format
+msgid "unknown CC system type %s, falling back to default (native compilation)"
+msgstr ""
+"el tipus de sistema de CC %s és desconegut, s'emprarà el predeterminat "
+"(construcció nadiua)"
+
+#: scripts/Dpkg/Arch.pm
+#, perl-format
+msgid "'%s' is not a legal architecture in list '%s'"
+msgstr "«%s» no és una cadena d'arquitectura vàlida a la llista «%s»"
+
+#: scripts/Dpkg/BuildFlags.pm scripts/Dpkg/Compression/FileHandle.pm
+#: scripts/Dpkg/File.pm scripts/Dpkg/Interface/Storable.pm
+#: scripts/Dpkg/Shlibs/Objdump.pm scripts/Dpkg/Source/BinaryFiles.pm
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "cannot read %s"
+msgstr "no es pot llegir %s"
+
+#: scripts/Dpkg/BuildFlags.pm
+#, perl-format
+msgid "line %d of %s mentions unknown flag %s"
+msgstr "la línia %d de %s menciona un senyalador desconegut %s"
+
+#: scripts/Dpkg/BuildFlags.pm
+#, perl-format
+msgid "line %d of %s is invalid, it has been ignored"
+msgstr "la línia %d de %s no és valida, s'ha ignorat"
+
+#: scripts/Dpkg/BuildOptions.pm
+#, perl-format
+msgid "invalid flag in %s: %s"
+msgstr "senyalador invàlid a %s: %s"
+
+#: scripts/Dpkg/BuildOptions.pm
+#, perl-format
+msgid "unknown %s feature in %s variable: %s"
+msgstr "característica %s desconeguda a la variable %s: %s"
+
+#: scripts/Dpkg/BuildOptions.pm
+#, perl-format
+msgid "incorrect value in %s option of %s variable: %s"
+msgstr "el valor en l'opció %s de la variable %s no és correcte: %s"
+
+#: scripts/Dpkg/BuildTypes.pm
+#, perl-format
+msgid "cannot combine %s and %s"
+msgstr "no es pot combinar %s amb %s"
+
+#: scripts/Dpkg/BuildTypes.pm
+#, perl-format
+msgid "unknown build type %s"
+msgstr "tipus de construcció «%s» desconegut"
+
+#: scripts/Dpkg/Changelog.pm
+#, perl-format
+msgid ""
+"%s(l%s): %s\n"
+"LINE: %s"
+msgstr ""
+"%s(l%s): %s\n"
+"LÍNIA: %s"
+
+#: scripts/Dpkg/Changelog.pm
+#, perl-format
+msgid "%s(l%s): %s"
+msgstr "%s(l%s): %s"
+
+#: scripts/Dpkg/Changelog.pm
+msgid "'offset' without 'count' has no effect"
+msgstr "«offset» sense «count» no té efecte"
+
+#: scripts/Dpkg/Changelog.pm
+msgid "you can't combine 'count' or 'offset' with any other range option"
+msgstr "no es pot combinar «count» o «offset» amb altres opcions d'interval"
+
+#: scripts/Dpkg/Changelog.pm
+msgid "you can only specify one of 'from' and 'since', using 'since'"
+msgstr "només es pot especificar «from» o «since», s'emprarà «since»"
+
+#: scripts/Dpkg/Changelog.pm
+msgid "you can only specify one of 'to' and 'until', using 'until'"
+msgstr "només es pot especificar «to» o «until», s'emprarà «until»"
+
+#: scripts/Dpkg/Changelog.pm
+#, perl-format
+msgid "'%s' option specifies non-existing version '%s'"
+msgstr "l'opció «%s» especifica una versió «%s» inexistent"
+
+#: scripts/Dpkg/Changelog.pm
+msgid "use newest entry that is earlier than the one specified"
+msgstr "empra l'entrada més nova que és anterior a l'especificada"
+
+#: scripts/Dpkg/Changelog.pm
+msgid "none found, starting from the oldest entry"
+msgstr "no s'ha trobat cap, es començarà per l'entrada mes antiga"
+
+#: scripts/Dpkg/Changelog.pm
+msgid "use oldest entry that is later than the one specified"
+msgstr "empra l'entrada més antiga que és posterior a l'especificada"
+
+#: scripts/Dpkg/Changelog.pm
+#, perl-format
+msgid "no such entry found, ignoring '%s' parameter '%s'"
+msgstr "no s'ha trobat l'entrada, s'ignorarà el paràmetre «%s» = «%s»"
+
+#: scripts/Dpkg/Changelog.pm
+#, perl-format
+msgid "'since' option specifies most recent version '%s', ignoring"
+msgstr "l'opció «since» especifica la versió «%s» més recent, s'ignorarà"
+
+#: scripts/Dpkg/Changelog.pm
+#, perl-format
+msgid "'until' option specifies oldest version '%s', ignoring"
+msgstr "l'opció «until» especifica la versió «%s» més antiga, s'ignorarà"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+msgid "first heading"
+msgstr "primer encapçalament"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+msgid "next heading or end of file"
+msgstr "següent encapçalament o fi de fitxer"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+msgid "start of change data"
+msgstr "principi de la informació del canvi"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+msgid "more change data or trailer"
+msgstr "més informació de canvi o final"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+#, perl-format
+msgid "found start of entry where expected %s"
+msgstr "s'ha trobat el principi d'entrada on s'esperava %s"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+msgid "badly formatted heading line"
+msgstr "línia d'encapçalament amb format erroni"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+#, perl-format
+msgid "found trailer where expected %s"
+msgstr "s'ha trobat final on s'esperava %s"
+
+#: scripts/Dpkg/Changelog/Debian.pm scripts/Dpkg/Changelog/Entry/Debian.pm
+msgid "badly formatted trailer line"
+msgstr "línia final amb format erroni"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+#, perl-format
+msgid "found change data where expected %s"
+msgstr "s'ha trobat informació de canvi on s'esperava %s"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+#, perl-format
+msgid "found blank line where expected %s"
+msgstr "s'ha trobat una línia buida on s'esperava %s"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+msgid "unrecognized line"
+msgstr "línia no reconeguda"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+#, perl-format
+msgid "found end of file where expected %s"
+msgstr "s'ha trobat el fi de fitxer on s'esperava %s"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "version '%s' is invalid: %s"
+msgstr "la versió «%s» no és vàlida: %s"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "bad key-value after ';': '%s'"
+msgstr "clau-valor no vàlida després de ‘;’: «%s»"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "repeated key-value %s"
+msgstr "repetició de clau-valor %s"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "badly formatted urgency value: %s"
+msgstr "valor d'urgència mal format: %s"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "bad binary-only value: %s"
+msgstr "valor incorrecte de «binary-only»: %s"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "unknown key-value %s"
+msgstr "clau-valor %s desconeguda"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+msgid "the header doesn't match the expected regex"
+msgstr "la capçalera no coincideix amb la regex esperada"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "ignoring invalid week day '%s'"
+msgstr "s'esta ignorant el dia de la setmana no vàlid «%s»"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "uses full '%s' instead of abbreviated month name '%s'"
+msgstr "empra nom del mes complet «%s» en comptes d'abreviat «%s»"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "invalid abbreviated month name '%s'"
+msgstr "el nom del mes abreviat «%s» no es vàlid"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "cannot parse non-conformant date '%s'"
+msgstr "no es pot analitzar la data no conforme «%s»"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+msgid "the trailer doesn't match the expected regex"
+msgstr "el final no coincideix amb la regex esperada"
+
+#: scripts/Dpkg/Changelog/Parse.pm
+#, perl-format
+msgid "cannot seek into file %s"
+msgstr "no es pot reposicionar al fitxer «%s»"
+
+#: scripts/Dpkg/Changelog/Parse.pm
+#, perl-format
+msgid "changelog format %s is unknown: %s"
+msgstr "el format %s del registre de canvis és desconegut: %s"
+
+#: scripts/Dpkg/Changelog/Parse.pm
+#, perl-format
+msgid "changelog format %s is not a Dpkg::Changelog class"
+msgstr "el format %s del registre de canvis no és una classe Dpkg::Changelog"
+
+#: scripts/Dpkg/Changelog/Parse.pm
+#, perl-format
+msgid "fatal error occurred while parsing %s"
+msgstr "s'ha produït un error fatal en analitzar %s"
+
+#: scripts/Dpkg/Changelog/Parse.pm
+#, perl-format
+msgid "unknown output format %s"
+msgstr "format de sortida «%s» desconegut"
+
+#: scripts/Dpkg/Checksums.pm
+#, perl-format
+msgid "cannot fstat file %s"
+msgstr "no es pot fer «fstat» al fitxer «%s»"
+
+#: scripts/Dpkg/Checksums.pm
+#, perl-format
+msgid "file %s has size %u instead of expected %u"
+msgstr "el fitxer %s té mida %u en lloc de l'esperada %u"
+
+#: scripts/Dpkg/Checksums.pm
+#, perl-format
+msgid "file %s has checksum %s instead of expected %s (algorithm %s)"
+msgstr ""
+"el fitxer %s té suma de verificació %s en lloc de l'esperada %s (algorisme "
+"%s)"
+
+#: scripts/Dpkg/Checksums.pm
+#, perl-format
+msgid "invalid line in %s checksums string: %s"
+msgstr "línia no vàlida en la cadena de sumes de verificació %s: %s"
+
+#: scripts/Dpkg/Checksums.pm
+#, perl-format
+msgid "conflicting checksums '%s' and '%s' for file '%s'"
+msgstr "sumes de verificació contradictòries «%s» i «%s» pel fitxer «%s»"
+
+#: scripts/Dpkg/Checksums.pm
+#, perl-format
+msgid "conflicting file sizes '%u' and '%u' for file '%s'"
+msgstr "mides de fitxer contradictòries «%u» i «%u» pel fitxer «%s»"
+
+#: scripts/Dpkg/Compression.pm
+#, perl-format
+msgid "compression threads %s is not a number"
+msgstr "els fils de compressió %s no és un nombre"
+
+#: scripts/Dpkg/Compression/Process.pm
+#, perl-format
+msgid "%s is not a supported compression method"
+msgstr "%s no és un mètode de compressió admès"
+
+#: scripts/Dpkg/Compression/Process.pm
+msgid "Dpkg::Compression::Process can only start one subprocess at a time"
+msgstr "Dpkg::Compression::Process només pot iniciar un subprocés cada cop"
+
+#: scripts/Dpkg/Conf.pm
+#, perl-format
+msgid "short option not allowed in %s, line %d"
+msgstr "no s'admet l'opció curta a %s, línia %d"
+
+#: scripts/Dpkg/Conf.pm
+#, perl-format
+msgid "invalid syntax for option in %s, line %d"
+msgstr "sintaxis no vàlida per a l'opció %s, línia %d"
+
+#: scripts/Dpkg/Control.pm
+msgid "general section of control info file"
+msgstr "secció general del fitxer d'informació de control"
+
+#: scripts/Dpkg/Control.pm
+msgid "package's section of control info file"
+msgstr "secció del paquet del fitxer d'informació de control"
+
+#: scripts/Dpkg/Control.pm
+msgid "parsed version of changelog"
+msgstr "versió analitzada del registre de canvis"
+
+#: scripts/Dpkg/Control.pm
+msgid "header stanza of copyright file"
+msgstr "estrofa de capçalera del fitxer de copyright"
+
+#: scripts/Dpkg/Control.pm
+msgid "files stanza of copyright file"
+msgstr "estrofa de fitxer del fitxer de copyright"
+
+#: scripts/Dpkg/Control.pm
+msgid "license stanza of copyright file"
+msgstr "estrofa de llicencia del fitxer de copyright"
+
+#: scripts/Dpkg/Control.pm
+msgid "package's tests control file"
+msgstr "fitxer de control tests del paquet"
+
+#: scripts/Dpkg/Control.pm
+#, perl-format
+msgid "repository's %s file"
+msgstr "fitxer de dipòsit %s"
+
+#: scripts/Dpkg/Control.pm
+#, perl-format
+msgid "stanza in repository's %s file"
+msgstr "estrofa al fitxer de dipòsit %s"
+
+#: scripts/Dpkg/Control.pm
+#, perl-format
+msgid "%s file"
+msgstr "fitxer %s"
+
+#: scripts/Dpkg/Control.pm
+msgid "control info of a .deb package"
+msgstr "informació de control d'un paquet .deb"
+
+#: scripts/Dpkg/Control.pm
+msgid "build information file"
+msgstr "fitxer d'informació de construcció"
+
+#: scripts/Dpkg/Control.pm
+msgid "vendor file"
+msgstr "fitxer de proveïdor"
+
+#: scripts/Dpkg/Control.pm
+msgid "stanza in dpkg's status file"
+msgstr "estrofa al fitxer d'estat de dpkg"
+
+#: scripts/Dpkg/Control/FieldsCore.pm
+#, perl-format
+msgid "unknown information field '%s' in input data in %s"
+msgstr "camp d'informació «%s» desconegut en les dades d'entrada a %s"
+
+#: scripts/Dpkg/Control/FieldsCore.pm
+msgid "control information"
+msgstr "informació de control"
+
+#: scripts/Dpkg/Control/HashCore.pm
+#, perl-format
+msgid "syntax error in %s at line %d: %s"
+msgstr "error de sintaxi a %s en la línia %d: %s"
+
+#: scripts/Dpkg/Control/HashCore.pm
+msgid "field cannot start with a hyphen"
+msgstr "el camp no pot començar amb un guió"
+
+#: scripts/Dpkg/Control/HashCore.pm
+#, perl-format
+msgid "duplicate field %s found"
+msgstr "s'ha trobat un camp %s duplicat"
+
+#: scripts/Dpkg/Control/HashCore.pm
+msgid "continued value line not in field"
+msgstr "línia de continuació de valor no està al camp"
+
+#: scripts/Dpkg/Control/HashCore.pm
+msgid "expected OpenPGP signature, found end of file after blank line"
+msgstr ""
+"s'esperava una signatura OpenPGP, s'ha trobat el fi de fitxer desprès de "
+"línia buida"
+
+#: scripts/Dpkg/Control/HashCore.pm
+#, perl-format
+msgid "expected OpenPGP signature, found something else '%s'"
+msgstr "s'esperava una signatura OpenPGP, s'ha trobat una altra cosa «%s»"
+
+#: scripts/Dpkg/Control/HashCore.pm
+msgid "unfinished OpenPGP signature"
+msgstr "signatura OpenPGP sense finalitzar"
+
+#: scripts/Dpkg/Control/HashCore.pm
+msgid "OpenPGP signature not allowed here"
+msgstr "no s'admet aquí una signatura OpenPGP"
+
+#: scripts/Dpkg/Control/HashCore.pm
+msgid "line with unknown format (not field-colon-value)"
+msgstr "línia amb format desconegut (no és camp-"
+
+#: scripts/Dpkg/Control/HashCore.pm
+msgid "write error on control data"
+msgstr "s'ha produït un error d'escriptura en les dades de control"
+
+#: scripts/Dpkg/Control/Info.pm
+#, perl-format
+msgid "first stanza lacks a '%s' field"
+msgstr "la primera estrofa no conté un camp «%s»"
+
+#: scripts/Dpkg/Control/Info.pm
+#, perl-format
+msgid "stanza lacks the '%s' field"
+msgstr "l'estrofa no conté el camp «%s»"
+
+#: scripts/Dpkg/Control/Tests/Entry.pm
+#, perl-format
+msgid "stanza lacks either %s or %s fields"
+msgstr "l'estrofa no conté els camps «%s» o «%s»"
+
+#: scripts/Dpkg/Deps.pm
+#, perl-format
+msgid "can't parse dependency %s"
+msgstr "no s'ha pogut analitzar la dependència %s"
+
+#: scripts/Dpkg/Deps.pm
+#, perl-format
+msgid "virtual dependency contains invalid relation: %s"
+msgstr "la dependència virtual conté una relació no vàlida: %s"
+
+#: scripts/Dpkg/Deps.pm
+msgid "an union dependency can only contain simple dependencies"
+msgstr "una dependència d'unió només pot contenir dependències senzilles"
+
+#: scripts/Dpkg/Dist/Files.pm
+#, perl-format
+msgid "badly formed file name in files list file, line %d"
+msgstr "nom de fitxer mal format en la llista de fitxers, línia %d"
+
+#: scripts/Dpkg/Dist/Files.pm
+#, perl-format
+msgid "badly formed line in files list file, line %d"
+msgstr "línia mal formada en la llista de fitxers, línia %d"
+
+#: scripts/Dpkg/Dist/Files.pm
+#, perl-format
+msgid "duplicate files list entry for file %s (line %d)"
+msgstr "entrada duplicada a la llista de fitxers per al fitxer %s (línia %d)"
+
+#: scripts/Dpkg/Dist/Files.pm
+#, perl-format
+msgid "cannot open directory %s"
+msgstr "no es pot obrir el directori %s"
+
+#: scripts/Dpkg/Dist/Files.pm
+#, perl-format
+msgid "invalid filename %s"
+msgstr "nom de fitxer %s no vàlid"
+
+#: scripts/Dpkg/ErrorHandling.pm
+msgid "info"
+msgstr "info"
+
+#: scripts/Dpkg/ErrorHandling.pm
+msgid "notice"
+msgstr "notificació"
+
+#: scripts/Dpkg/ErrorHandling.pm
+msgid "warning"
+msgstr "avís"
+
+#: scripts/Dpkg/ErrorHandling.pm
+msgid "error"
+msgstr "error"
+
+#: scripts/Dpkg/ErrorHandling.pm
+#, perl-format
+msgid "%s subprocess returned exit status %d"
+msgstr "el subprocés «%s» ha retornat codi d'eixida %d"
+
+#: scripts/Dpkg/ErrorHandling.pm
+#, perl-format
+msgid "%s subprocess was killed by signal %d"
+msgstr "el subprocés «%s» ha estat finalitzat pel senyal %d"
+
+#: scripts/Dpkg/ErrorHandling.pm
+#, perl-format
+msgid "%s subprocess failed with unknown status code %d"
+msgstr "el subprocés «%s» ha fallat amb el codi d'estat desconegut %d"
+
+#: scripts/Dpkg/ErrorHandling.pm
+msgid "Use --help for program usage information."
+msgstr "Empreu --help per a obtenir informació d'ús del programa."
+
+#: scripts/Dpkg/File.pm
+#, perl-format
+msgid "cannot create file %s"
+msgstr "no es pot crear el fitxer «%s»"
+
+#: scripts/Dpkg/IPC.pm
+#, perl-format
+msgid "pipe for %s"
+msgstr "conducte per a %s"
+
+#: scripts/Dpkg/IPC.pm
+#, perl-format
+msgid "chdir to %s"
+msgstr "«chdir» a %s"
+
+#: scripts/Dpkg/IPC.pm
+msgid "reopen stdin"
+msgstr "torna a obrir stdin"
+
+#: scripts/Dpkg/IPC.pm
+msgid "reopen stdout"
+msgstr "torna a obrir stdout"
+
+#: scripts/Dpkg/IPC.pm
+msgid "child process"
+msgstr "procés fill"
+
+#: scripts/Dpkg/IPC.pm
+#, perl-format
+msgid "wait for %s"
+msgstr "espera de %s"
+
+#: scripts/Dpkg/IPC.pm
+#, perl-format
+msgid "%s didn't complete in %d second"
+msgid_plural "%s didn't complete in %d seconds"
+msgstr[0] "%s no s'ha completat en %d segon"
+msgstr[1] "%s no s'ha completat en %d segons"
+
+#: scripts/Dpkg/Interface/Storable.pm
+msgid "<standard input>"
+msgstr "<entrada estàndard>"
+
+#: scripts/Dpkg/Lock.pm
+msgid "File::FcntlLock not available; using flock which is not NFS-safe"
+msgstr ""
+"File::FcntlLock no està disponible; s'emprarà flock que no és segur per NFS"
+
+#: scripts/Dpkg/Lock.pm
+#, perl-format
+msgid "failed to get a write lock on %s"
+msgstr "no s'ha pogut obtenir el blocatge d'escriptura per a %s"
+
+#: scripts/Dpkg/OpenPGP.pm
+#, perl-format
+msgid "unknown OpenPGP api requested %s"
+msgstr "l'api OpenPGP %s és desconeguda"
+
+#: scripts/Dpkg/OpenPGP.pm
+#, perl-format
+msgid "cannot load OpenPGP backend %s"
+msgstr "no es pot carregar el fons d'OpenPGP %s"
+
+#: scripts/Dpkg/OpenPGP.pm
+#, perl-format
+msgid "unknown OpenPGP backend %s"
+msgstr "el fons d'OpenPGP %s és desconegut"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "success"
+msgstr "amb èxit"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "no acceptable signature found"
+msgstr "no s'ha trobat una signatura acceptable"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "missing required argument"
+msgstr "manca un argument requerit"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "unsupported option"
+msgstr "l'opció no s'admet"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "invalid data type"
+msgstr "el tipus de dades no és vàlid"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "non-text input where text expected"
+msgstr "s'ha trobat entrada que no és text on s'esperava text"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "output file already exists"
+msgstr "el fitxer de sortida ja existeix"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "input file does not exist"
+msgstr "el fitxer d'entrada no existeix"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "cannot unlock password-protected key"
+msgstr "no es pot desblocar la clau protegida amb contrasenya"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "unsupported subcommand"
+msgstr "subordre no admesa"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "key is not signature-capable"
+msgstr "la clau no te la capacitat de signar"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "missing OpenPGP implementation"
+msgstr "no es troba la implementació d'OpenPGP"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "specified key needs a keystore"
+msgstr "la clau especificada necessita un magatzem de claus"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+#, perl-format
+msgid "error code %d"
+msgstr "codi d'error %d"
+
+#: scripts/Dpkg/Package.pm
+msgid "may not be empty string"
+msgstr "no pot ser una cadena buida"
+
+#: scripts/Dpkg/Package.pm
+#, perl-format
+msgid "character '%s' not allowed"
+msgstr "el caràcter «%s» no és permès"
+
+#: scripts/Dpkg/Package.pm
+msgid "must start with an alphanumeric character"
+msgstr "ha de començar amb un caràcter alfanumèric"
+
+#: scripts/Dpkg/Path.pm scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "pathname '%s' cannot be canonicalized"
+msgstr "el nom de camí «%s» no es pot canonicalitzar"
+
+#: scripts/Dpkg/Path.pm scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "pathname '%s' points outside source root (to '%s')"
+msgstr "el nom de camí «%s» apunta fora de l'arrel del codi font (a «%s»)"
+
+#: scripts/Dpkg/Shlibs.pm
+msgid ""
+"deprecated use of LD_LIBRARY_PATH with private library directory which "
+"interferes with cross-building, please use -l option instead"
+msgstr ""
+"ús obsolet de LD_LIBRARY_PATH amb directori de biblioteques privades que "
+"interfereix amb la compilació creuada, empreu l'opció -l en el seu lloc"
+
+#: scripts/Dpkg/Shlibs.pm scripts/Dpkg/Shlibs/Objdump.pm
+#, perl-format
+msgid "unknown executable format in file '%s'"
+msgstr "el format del fitxer executable «%s» és desconegut"
+
+#: scripts/Dpkg/Shlibs/Objdump.pm
+#, perl-format
+msgid "couldn't parse dynamic relocation record: %s"
+msgstr "no s'ha pogut analitzar el registre dinàmic de reubicació: %s"
+
+#: scripts/Dpkg/Shlibs/Objdump.pm
+#, perl-format
+msgid "couldn't parse dynamic symbol definition: %s"
+msgstr "no s'ha pogut analitzar la definició dinàmica del símbol: %s"
+
+#: scripts/Dpkg/Shlibs/Symbol.pm
+#, perl-format
+msgid "symbol name unspecified: %s"
+msgstr "no s'ha especificat el nom del símbol: %s"
+
+#: scripts/Dpkg/Shlibs/Symbol.pm
+#, perl-format
+msgid "symver tag with versioned symbol will not match: %s"
+msgstr "l'etiqueta symver amb símbol versionat no coincidirà: %s"
+
+#: scripts/Dpkg/Shlibs/Symbol.pm
+#, perl-format
+msgid "you can't use symver tag to catch unversioned symbols: %s"
+msgstr ""
+"no es pot emprar una etiqueta symver per capturar símbols sense versió: %s"
+
+#: scripts/Dpkg/Shlibs/SymbolFile.pm
+#, perl-format
+msgid "symbol information must be preceded by a header (file %s, line %s)"
+msgstr ""
+"la informació de símbol ha d'estar precedida per una capçalera (fitxer %s, "
+"línia %s)"
+
+#: scripts/Dpkg/Shlibs/SymbolFile.pm
+#, perl-format
+msgid "failed to parse line in %s: %s"
+msgstr "no s'ha pogut analitzar la línia en %s: %s"
+
+#: scripts/Dpkg/Shlibs/SymbolFile.pm
+#, perl-format
+msgid "failed to parse a line in %s: %s"
+msgstr "no s'ha pogut analitzar una línia en %s: %s"
+
+#: scripts/Dpkg/Shlibs/SymbolFile.pm
+#, perl-format
+msgid "tried to merge the same object (%s) twice in a symfile"
+msgstr ""
+"s'ha intentat fusionar el mateix objecte (%s) dues vegades en un symfile"
+
+#: scripts/Dpkg/Shlibs/SymbolFile.pm
+msgid "cannot merge symbols from objects without SONAME"
+msgstr "no es poden fusionar símbols d'objectes sense SONAME"
+
+#: scripts/Dpkg/Source/Archive.pm
+msgid "write on tar input"
+msgstr "no es pot escriure en l'entrada de tar"
+
+#: scripts/Dpkg/Source/Archive.pm
+msgid "close on tar input"
+msgstr "no es pot tancar l'entrada de tar"
+
+#: scripts/Dpkg/Source/Archive.pm scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot create directory %s"
+msgstr "no es pot crear el directori %s"
+
+#: scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "cannot get source pathname %s metadata"
+msgstr "no es poden obtenir les metadades del nom de camí origen %s"
+
+#: scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "cannot get target pathname %s metadata"
+msgstr "no es poden obtenir les metadades del nom de camí destí %s"
+
+#: scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "cannot change directory %s mode"
+msgstr "no es pot canviar el mode del directori %s"
+
+#: scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "cannot change directory %s times"
+msgstr "no es poden canviar els temps del directori %s"
+
+#: scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "cannot remove destination directory %s"
+msgstr "no es eliminar el directori de destí %s"
+
+#: scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "cannot remove destination file %s"
+msgstr "no es pot eliminar el fitxer de destí %s"
+
+#: scripts/Dpkg/Source/Archive.pm scripts/Dpkg/Source/Package.pm
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "cannot opendir %s"
+msgstr "no es pot obrir el directori %s"
+
+#: scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "unable to rename %s to %s"
+msgstr "no es pot canviar el nom de %s a %s"
+
+#: scripts/Dpkg/Source/Functions.pm
+#, perl-format
+msgid "cannot stat directory %s (before removal)"
+msgstr "no es pot fer «stat» al directori %s (abans de la eliminació)"
+
+#: scripts/Dpkg/Source/Functions.pm
+#, perl-format
+msgid "unable to check for removal of directory '%s'"
+msgstr "no es pot comprovar la eliminació del directori «%s»"
+
+#: scripts/Dpkg/Source/Functions.pm
+#, perl-format
+msgid "rm -rf failed to remove '%s'"
+msgstr "rm -rf no ha pogut eliminar «%s»"
+
+#: scripts/Dpkg/Source/Functions.pm scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot change timestamp for %s"
+msgstr "no es pot canviar la marca horària per a %s"
+
+#: scripts/Dpkg/Source/Functions.pm
+#, perl-format
+msgid "cannot read timestamp from %s"
+msgstr "no es pot llegir la marca horària de %s"
+
+#: scripts/Dpkg/Source/Functions.pm
+#, perl-format
+msgid "cannot open file %s for binary detection"
+msgstr "no es pot obrir el fitxer %s per a detecció binaria"
+
+#: scripts/Dpkg/Source/BinaryFiles.pm
+#, perl-format
+msgid "adding %s to %s"
+msgstr "s'està afegint %s a %s"
+
+#: scripts/Dpkg/Source/BinaryFiles.pm
+#, perl-format
+msgid "unwanted binary file: %s"
+msgstr "fitxer binari no desitjat: %s"
+
+#: scripts/Dpkg/Source/BinaryFiles.pm
+#, perl-format
+msgid ""
+"detected %d unwanted binary file (add it in debian/source/include-binaries "
+"to allow its inclusion)."
+msgid_plural ""
+"detected %d unwanted binary files (add them in debian/source/include-"
+"binaries to allow their inclusion)."
+msgstr[0] ""
+"s'ha detectat %d fitxer binari no desitjat (afegiu-lo a debian/source/"
+"include-binaries per permetre la seva inclusió)."
+msgstr[1] ""
+"s'han detectat %d fitxers binaries no desitjats (afegiu-los a debian/source/"
+"include-binaries per permetre la seva inclusió)."
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "%s is not the name of a file"
+msgstr "%s no és el nom d'un fitxer"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "missing critical source control field %s"
+msgstr "manca el camp de control font imprescindible %s"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "source package format '%s' is not supported: %s"
+msgstr "no s'admet el format del paquet font «%s»: %s"
+
+#: scripts/Dpkg/Source/Package.pm
+msgid "source package uses only weak checksums"
+msgstr "el paquet font només empra sumes de comprovació dèbils"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "%s and %s fields are required to compute the source basename"
+msgstr "els camps %s i %s són necessaris per calcular el nom base del font"
+
+#: scripts/Dpkg/Source/Package.pm
+msgid "upstream tarball signatures but no upstream signing key"
+msgstr ""
+"hi ha signatura d'arxiu tar original però no hi ha clau de signatura original"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "verifying %s"
+msgstr "s'està verificant %s"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "cannot verify upstream tarball signature for %s: %s"
+msgstr "no es pot verificar la signatura d'arxiu tar original «%s»: %s"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "cannot verify inline signature for %s: %s"
+msgstr "no es pot verificar la signatura en línia «%s»: %s"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "%s is not a valid option for %s"
+msgstr "%s no és una opció vàlida per a %s"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "cannot copy %s to %s"
+msgstr "no es pot copiar %s a %s"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "%s does not exist"
+msgstr "%s no existeix"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "cannot make %s executable"
+msgstr "no es pot fer «%s» executable"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "%s is not a plain file"
+msgstr "%s no és un fitxer normal"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "'%s' is not supported by the source format '%s'"
+msgstr "«%s» no és admès pel format de font «%s»"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "auto select original source"
+msgstr "selecciona el codi font original automàticament"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "use packed original source (unpack and keep)"
+msgstr "empra el codi font original empaquetat (desempaqueta i preserva)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "use packed original source (unpack and remove)"
+msgstr "empra el codi font original empaquetat (desempaqueta i suprimeix)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "use unpacked original source (pack and keep)"
+msgstr "empra el codi font original desempaquetat (empaqueta i preserva)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "use unpacked original source (pack and remove)"
+msgstr "empra el codi font original desempaquetat (empaqueta i suprimeix)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "trust packed and unpacked original sources are same"
+msgstr "confia que el codi font empaquetat i desempaquetat és el mateix"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "there is no diff, do main tarfile only"
+msgstr "no hi ha un diff, només es fa l'arxiu tar principal"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "like -sa, -sk, -sp, -su, -sr but may overwrite"
+msgstr "com -sa, -sk, -sp, -su o -sr però pot sobreescriure"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+msgid "abort if generated diff has upstream files changes"
+msgstr "interromp si el diff generat modifica fitxers originals"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "leave original source packed in current directory"
+msgstr "deixa les fonts originals empaquetades al directori actual"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "do not copy original source to current directory"
+msgstr "no copia la font original al directori actual"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "unpack original source tree too"
+msgstr "desempaqueta també l'arbre de fonts originals"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "do not apply debian diff to upstream sources"
+msgstr "no aplica el diff de debian a les fonts originals"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "-s%s option overrides earlier -s%s option"
+msgstr "l'opció -s%s sobreescriu l'opció -s%s anterior"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "source handling style -s%s not allowed with -x"
+msgstr "no es permet l'estil de maneig de font -s%s amb -x"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "multiple tarfiles in v1.0 source package"
+msgstr "múltiples arxius tar en el paquet font v1.0"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "unrecognized file for a %s source package: %s"
+msgstr "no es reconeix el fitxer pel paquet font %s: %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V3/Native.pm
+msgid "no tarfile in Files field"
+msgstr "no hi ha cap arxiu tar al camp Files"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "native package with .orig.tar"
+msgstr "paquet nadiu amb .orig.tar"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "unable to rename '%s' to '%s'"
+msgstr "no es pot canviar el nom de «%s» a «%s»"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+#, perl-format
+msgid "unpacking %s"
+msgstr "s'està desempaquetant %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "unable to keep orig directory (already exists)"
+msgstr "no es pot mantenir el directori orig (ja existeix)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "failed to rename newly-extracted %s to %s"
+msgstr "no es pot canviar el nom de %s acabat d'extraure a %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "failed to rename saved %s to %s"
+msgstr "no es pot canviar el nom de %s guardat a %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "applying %s"
+msgstr "s'està aplicant %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "upstream files that have been modified: %s"
+msgstr "fitxers font originals modificats: %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "only supports gzip compression"
+msgstr "només admet compressió gzip"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid ""
+"-b takes at most a directory and an orig source argument (with v1.0 source "
+"package)"
+msgstr ""
+"-b accepta com a molt un directori i un argument orig font (amb paquet font "
+"v1.0)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "source handling style -s%s not allowed with -b"
+msgstr "no es permet l'estil de maneig de font -s%s amb -b"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "packed orig '%s' exists but is not a plain file"
+msgstr "el nom de l'orig empaquetat «%s» existeix però no es un fitxer normal"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "cannot stat orig argument %s"
+msgstr "no es pot fer «stat» sobre l'argument original %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid ""
+"orig argument is unpacked but source handling style -s%s calls for packed (."
+"orig.tar.<ext>)"
+msgstr ""
+"l'argument orig està desempaquetat però l'estil de maneig de font -s%s el "
+"requereix empaquetat (.orig.tar.<ext>)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid ""
+"orig argument is packed but source handling style -s%s calls for unpacked (."
+"orig/)"
+msgstr ""
+"l'argument orig està empaquetat però l'estil de maneig de font -s%s el "
+"requereix desempaquetat (.orig/)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "orig argument %s is not a plain file or directory"
+msgstr "l'argument orig %s no és un fitxer normal o un directori"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid ""
+"orig argument is empty (means no orig, no diff) but source handling style -"
+"s%s wants something"
+msgstr ""
+"l'argument orig és buit (equivalent a no orig i no diff) però l'estil de "
+"maneig de font -s%s en requereix algun"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "unpacked orig '%s' exists but is not a directory"
+msgstr "el nom de l'orig desempaquetat «%s» existeix però no és un directori"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "unable to stat putative unpacked orig '%s'"
+msgstr "no es pot fer «stat» al directori orig desempaquetat putatiu «%s»"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V3/Quilt.pm
+msgid "non-native package version does not contain a revision"
+msgstr "la versió del paquet no nadiu no conté una revisió"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V3/Native.pm
+msgid "native package version may not have a revision"
+msgstr "la versió del paquet nadiu no pot tenir una revisió"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "source directory '%s' is not <sourcepackage>-<upstreamversion> '%s'"
+msgstr "el directori font «%s» no és <paquet-font>-<versió-original> «%s»"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid ".orig directory name %s is not <package>-<upstreamversion> (wanted %s)"
+msgstr ""
+"el nom del directori .orig %s no és <paquet-font>-<versió-original> "
+"(desitjat %s)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid ""
+".orig.tar name %s is not <package>_<upstreamversion>.orig.tar (wanted %s)"
+msgstr ""
+"el nom del fitxer .orig.tar %s no és <paquet-font>_<versió-original> "
+"(desitjat %s)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid ""
+"tarfile '%s' already exists, not overwriting, giving up; use -sU or -sR to "
+"override"
+msgstr ""
+"l'arxiu tar «%s» ja existeix, no es sobreescriurà, s'està abandonant; empreu "
+"-sU or -sR per a forçar-ho"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "unable to check for existence of '%s'"
+msgstr "no es pot comprovar l'existència de «%s»"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V3/Native.pm
+#, perl-format
+msgid "unable to rename '%s' (newly created) to '%s'"
+msgstr "no es pot canviar el nom de %s (acabat de crear) a %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+#: scripts/Dpkg/Source/Package/V3/Quilt.pm scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "unable to change permission of '%s'"
+msgstr "no es poden establir els permisos d'execució en «%s»"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "building %s using existing %s"
+msgstr "s'està construint %s emprant %s existent"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+msgid "upstream signing key but no upstream tarball signature"
+msgstr ""
+"hi ha clau de signatura original però no hi ha signatura d'arxiu tar original"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid ""
+"orig directory '%s' already exists, not overwriting, giving up; use -sA, -sK "
+"or -sP to override"
+msgstr ""
+"el directori «%s» ja existeix, no es sobreescriurà, s'està abandonant; "
+"empreu -sA, -sK o -sP per a forçar-ho"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "unable to check for existence of orig directory '%s'"
+msgstr "no es pot comprovar l'existència del directori orig «%s»"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "the diff modifies the following upstream files: %s"
+msgstr "el diff modifica els següents fitxers de desenvolupament originals: %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid ""
+"use the '3.0 (quilt)' format to have separate and documented changes to "
+"upstream files, see dpkg-source(1)"
+msgstr ""
+"empreu el format «3.0 (quilt)» per a tenir el canvis al fitxers originals de "
+"desenvolupament separats i documentats, vegeu dpkg-source(1)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "aborting due to --abort-on-upstream-changes"
+msgstr "s'està interrompent a causa de --abort-on-upstream-changes"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+msgid "unrepresentable changes to source"
+msgstr "hi ha canvis no representables al font"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "include removed files in the patch"
+msgstr "inclou fitxers suprimits al pedaç"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "include timestamp in the patch"
+msgstr "inclou la marca horària al pedaç"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "include binary files in the tarball"
+msgstr "inclou fitxers binaris a l'arxiu tar"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "do not prepare build tree by applying patches"
+msgstr "no prepara l'arbre de construcció aplicant els pedaços"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "do not unapply patches if previously applied"
+msgstr "no desfà l'aplicació dels pedaços si ja estan aplicats"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "unapply patches if previously applied (default)"
+msgstr "desfà l'aplicació dels pedaços si ja estan aplicats (predeterminat)"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "create an empty original tarball if missing"
+msgstr "crea un arxiu original tar buit si no existeix"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "record generated patches, instead of aborting"
+msgstr "registra els pedaços generats, en comptes d'avortar"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "do not extract debian tarball into upstream sources"
+msgstr "no s'extreu l'arxiu tar de debian a les fonts originals"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "do not apply patches at the end of the extraction"
+msgstr "no aplica pedaços al final de l'extracció"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "duplicate files in %s source package: %s"
+msgstr "fitxers duplicats en el paquet font %s: %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "missing orig.tar or debian.tar file in v2.0 source package"
+msgstr "manca el fitxer orig.tar o debian.tar en el paquet font v2.0"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "mismatched orig.tar %s for signature %s in source package"
+msgstr ""
+"la signatura %s no concorda amb el fitxer orig.tar %s en el paquet font"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "missing addon orig.tar for signature %s in source package"
+msgstr ""
+"manca el fitxer orig.tar complementari per a la signatura %s en el paquet "
+"font"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "mismatched addon orig.tar %s for signature %s in source package"
+msgstr ""
+"la signatura %s no concorda amb el fitxer orig.tar complementari %s en el "
+"paquet font"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "required removal of '%s' installed by original tarball"
+msgstr "s'ha d'eliminar «%s» que es proveït per l'arxiu tar original"
+
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "unapplying %s"
+msgstr "s'està desaplicant %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "no upstream tarball found at %s"
+msgstr "no s'ha trobat l'arxiu tar de desenvolupament original a %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "patches are not applied, applying them now"
+msgstr "els pedaços no estan aplicats, s'estan aplicant ara"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "several orig.tar files found (%s and %s) but only one is allowed"
+msgstr ""
+"s'han trobat diversos fitxers orig.tar (%s i %s) però només se'n permet una"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "copy of the debian directory"
+msgstr "copia del directori debian"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "local changes detected, the modified files are:"
+msgstr "s'han trobat canvis locals, els fitxers modificats són:"
+
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Package/V3/Bzr.pm
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+#, perl-format
+msgid "-b takes only one parameter with format '%s'"
+msgstr "l'opció -b només admet un paràmetre amb el format «%s»"
+
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot represent change to %s: %s"
+msgstr "no es pot representar el canvi a %s: %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Patch.pm
+msgid "binary file contents changed"
+msgstr "ha canviat el contingut d'un fitxer binari"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid ""
+"add %s in debian/source/include-binaries if you want to store the modified "
+"binary in the debian tarball"
+msgstr ""
+"afegiu %s a debian/source/include-binaries si voleu desar el binari "
+"modificat en l'arxiu tar de debian"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid ""
+"Hint: make sure the version in debian/changelog matches the unpacked source "
+"tree"
+msgstr ""
+"Consell: assegureu-vos que la versió a debian/changelog coincideix amb el "
+"codi font desempaquetat"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "you can integrate the local changes with %s"
+msgstr "podeu integrar els canvis locals amb %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "aborting due to unexpected upstream changes, see %s"
+msgstr ""
+"s'està interrompent a causa de canvis inesperats als fonts originals, vegeu "
+"%s"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "local changes have been recorded in a new patch: %s"
+msgstr "els canvis locals s'han enregistrar en un nou pedaç: %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Package/V3/Quilt.pm
+#, perl-format
+msgid "cannot remove %s"
+msgstr "no es pot eliminar %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Package/V3/Quilt.pm
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "failed to copy %s to %s"
+msgstr "no es pot copiar %s a %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "cannot register changes in %s, this patch already exists"
+msgstr "no es poden registrar els canvis a %s, aquest pedaç ja existeix"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "patch file '%s' doesn't exist"
+msgstr "el fitxer pedaç «%s» no existeix"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "there are no local changes to record"
+msgstr "no hi ha canvis locals per inscriure"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "Enter the desired patch name: "
+msgstr "Introduïu el nom desitjat del pedaç: "
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "no patch name given; cannot proceed"
+msgstr "no s'ha donat cap nom de pedaç; no es pot continuar"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "cannot find an editor"
+msgstr "no s'ha trobat un editor"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+msgid "cannot unpack bzr-format source package because bzr is not in the PATH"
+msgstr ""
+"no es pot desempaquetar el paquet font amb format bzr ja que bzr no és troba "
+"al PATH"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+#, perl-format
+msgid ""
+"source directory is not the top directory of a bzr repository (%s/.bzr not "
+"present), but Format bzr was specified"
+msgstr ""
+"el directori font no és el directori superior d'un dipòsit bzr (%s/.bzr no "
+"és present), però s'ha especificat el Format bzr"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+#, perl-format
+msgid "%s is a symlink"
+msgstr "%s és un enllaç simbòlic"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+#, perl-format
+msgid "%s is a symlink to outside %s"
+msgstr "%s és un enllaç simbòlic a l'exterior de %s"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+msgid "doesn't contain a bzr repository"
+msgstr "no conté un dipòsit bzr"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+msgid "bzr status exited nonzero"
+msgstr "«bzr status» ha sortit amb valor no zero"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "uncommitted, not-ignored changes in working directory: %s"
+msgstr "hi ha canvis sense publicar no ignorats en el directori de treball: %s"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+msgid "format v3.0 (bzr) uses only one source file"
+msgstr "el format v3.0 (bzr) només empra un sol fitxer font"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+#, perl-format
+msgid "expected %s, got %s"
+msgstr "s'esperava %s, s'ha obtingut %s"
+
+#: scripts/Dpkg/Source/Package/V3/Custom.pm
+msgid "define the format of the generated source package"
+msgstr "defineix el format del paquet font generat"
+
+#: scripts/Dpkg/Source/Package/V3/Custom.pm
+msgid "Format '3.0 (custom)' is only used to create source packages"
+msgstr "el format «3.0 (custom)» només s'empra per crear paquets font"
+
+#: scripts/Dpkg/Source/Package/V3/Custom.pm
+msgid "no files indicated on command line"
+msgstr "no s'ha indicat cap fitxer a la línia d'ordres"
+
+#: scripts/Dpkg/Source/Package/V3/Custom.pm
+msgid "--target-format option is missing"
+msgstr "manca l'opció --target-format"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "cannot unpack git-format source package because git is not in the PATH"
+msgstr ""
+"no es pot desempaquetar el paquet font amb format git ja que git no és troba "
+"al PATH"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid ""
+"source directory is not the top directory of a git repository (%s/.git not "
+"present), but Format git was specified"
+msgstr ""
+"el directori font no és el directori superior d'un dipòsit git (%s/.git no "
+"és present), però s'ha especificat el Format git"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "git repository %s uses submodules; this is not yet supported"
+msgstr "el dipòsit git %s empra submòduls; això encara no està implementat"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "specify a git <ref> to include in the git bundle"
+msgstr "especifica una <ref> git per incloure al «git bundle»"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "create a shallow clone with <number> depth"
+msgstr "crea un clon amb profunditat <número>"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "doesn't contain a git repository"
+msgstr "no conté un dipòsit git"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "git ls-files exited nonzero"
+msgstr "«git ls-files» ha sortit amb valor no zero"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "creating shallow clone with depth %s"
+msgstr "s'esta creant un clon amb profunditat %s"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "bundling: %s"
+msgstr "agrupant: %s"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "format v3.0 (git) uses only one .git file"
+msgstr "el format v3.0 (git) només empra un fitxer .git"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "format v3.0 (git) uses only one .gitshallow file"
+msgstr "el format v3.0 (git) només empra un fitxer .gitshallow"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "format v3.0 (git) unknown file: %s"
+msgstr "fitxer desconegut per al format v3.0 (git): %s"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "format v3.0 (git) expected %s"
+msgstr "el format v3.0 (git) esperava %s"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "cloning %s"
+msgstr "s'està clonant %s"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "setting up shallow clone"
+msgstr "s'està preparant un clon sense profunditat"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "setting remote %s to %s"
+msgstr "no es pot configurar el remot %s a %s"
+
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+msgid "multiple tarfiles in native source package"
+msgstr "múltiples arxius tar en el paquet font nadiu"
+
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+#, perl-format
+msgid "unrecognized file for a native source package: %s"
+msgstr "fitxer no reconegut per un paquet font nadiu: %s"
+
+#: scripts/Dpkg/Source/Package/V3/Quilt.pm
+msgid "use a single debianization patch"
+msgstr "empra un sol pedaç de debianització"
+
+#: scripts/Dpkg/Source/Package/V3/Quilt.pm
+msgid "accept quilt metadata <version> even if unknown"
+msgstr "accepta <versió> de metadades de quilt encara que no es conegui"
+
+#: scripts/Dpkg/Source/Package/V3/Quilt.pm
+#, perl-format
+msgid "can't create symlink %s"
+msgstr "no es pot crear l'enllaç simbòlic %s"
+
+#: scripts/Dpkg/Source/Package/V3/Quilt.pm
+#, perl-format
+msgid "using patch list from %s"
+msgstr "s'esta emprant la llista de pedaços de %s"
+
+#: scripts/Dpkg/Source/Package/V3/Quilt.pm
+#, perl-format
+msgid "unsupported version of the quilt metadata: %s"
+msgstr "versió no admesa de les metadades quilt: %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "file %s has no final newline (either original or modified version)"
+msgstr ""
+"el fitxer %s no té línia final (tant la versió original o la modificada)"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "unknown line from diff -u on %s: '%s'"
+msgstr "línia desconeguda de diff -u a %s: «%s»"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "failed to write"
+msgstr "no s'ha pogut escriure"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff on %s"
+msgstr "diff de %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot stat file %s"
+msgstr "no es pot fer «stat» al fitxer «%s»"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot read link %s"
+msgstr "no es pot llegir l'enllaç %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "device or socket is not allowed"
+msgstr "no es permeten dispositius ni sòcols"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "unknown file type"
+msgstr "tipus de fitxer desconegut"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "ignoring deletion of file %s"
+msgstr "s'omet la supressió del fitxer %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "ignoring deletion of file %s, use --include-removal to override"
+msgstr ""
+"s'omet la supressió del fitxer %s, empreu --include-removal per forçar-ho"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "ignoring deletion of directory %s"
+msgstr "s'omet la supressió del directori %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "ignoring deletion of symlink %s"
+msgstr "s'omet la supressió de l'enllaç simbòlic %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "newly created empty file '%s' will not be represented in diff"
+msgstr "el fitxer buit acabat de crear «%s» no es representarà en el diff"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "executable mode %04o of '%s' will not be represented in diff"
+msgstr "el mode executable %04o de «%s» no es representarà en el diff"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "special mode %04o of '%s' will not be represented in diff"
+msgstr "el mode especial %04o de «%s» no es representarà en el diff"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot represent change to %s:"
+msgstr "no es pot representar el canvi a %s:"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid " new version is %s"
+msgstr " la versió nova és %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid " old version is %s"
+msgstr " la versió antiga és %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff %s patches file with C-style encoded filename"
+msgstr "el diff «%s» aplica pedaços a un fitxer amb nom codificat en estil C"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "expected ^--- in line %d of diff '%s'"
+msgstr "s'esperava ^--- a la línia %d del diff «%s»"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff '%s' patches file with name ending in .dpkg-orig"
+msgstr "el diff «%s» aplica pedaços a un fitxer amb nom acabat en .dpkg-orig"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff '%s' finishes in middle of ---/+++ (line %d)"
+msgstr "el diff «%s» acaba enmig de ---/+++ (línia %d)"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "line after --- isn't as expected in diff '%s' (line %d)"
+msgstr "la línia després de --- no es l'esperada en el diff «%s» (línia %d)"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "none of the filenames in ---/+++ are valid in diff '%s' (line %d)"
+msgstr ""
+"cap dels noms de fitxer a ---/+++ són vàlids en el diff «%s» (línia %d)"
+
+#: scripts/Dpkg/Source/Patch.pm scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "%s contains an insecure path: %s"
+msgstr "%s conté un no segur: %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff %s modifies file %s through a symlink: %s"
+msgstr "el diff %s modifica el fitxer %s a través d'un enllaç simbòlic: %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "original and modified files are /dev/null in diff '%s' (line %d)"
+msgstr ""
+"el fitxer original i el modificat són /dev/null al diff «%s» (línia %d)"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "file removal without proper filename in diff '%s' (line %d)"
+msgstr "eliminació de fitxer sense nom de fitxer en el diff «%s» (línia %d)"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff %s removes a non-existing file %s (line %d)"
+msgstr "el diff %s elimina un fitxer no existent %s (línia %d)"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff '%s' patches something which is not a plain file"
+msgstr "el diff «%s» aplica pedaços a alguna cosa que no és un fitxer pla"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid ""
+"diff '%s' patches files multiple times; split the diff in multiple files or "
+"merge the hunks into a single one"
+msgstr ""
+"el diff «%s» aplica pedaços a fitxers múltiples vegades; separeu el diff en "
+"múltiples fitxers o combineu els trossos"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff '%s' patches file %s more than once"
+msgstr "el diff «%s» aplica pedaços al fitxer %s més d'una vegada"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "unexpected end of diff '%s'"
+msgstr "s'ha trobat un fi inesperat del diff «%s»"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "expected [ +-] at start of line %d of diff '%s'"
+msgstr "s'esperava [ +-] al principi de la línia %d del diff «%s»"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "expected ^@@ at line %d of diff '%s'"
+msgstr "s'esperava ^@@ en la línia %d del diff «%s»"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff '%s' doesn't contain any patch"
+msgstr "el diff «%s» no conté cap pedaç"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "remove patch backup file %s"
+msgstr "no es pot eliminar la còpia de seguretat del pedaç %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "nonexistent"
+msgstr "no existent"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "plain file"
+msgstr "fitxer normal"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "directory"
+msgstr "directori"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "symlink to %s"
+msgstr "enllaç simbòlic a %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "block device"
+msgstr "dispositiu de bloc"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "character device"
+msgstr "dispositiu de caràcter"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "named pipe"
+msgstr "conducte amb nom"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "named socket"
+msgstr "sòcol amb nom"
+
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "cannot mkdir %s"
+msgstr "no es pot crear el directori %s"
+
+#: scripts/Dpkg/Source/Quilt.pm
+msgid "the patch has fuzz which is not allowed, or is malformed"
+msgstr "el pedaç conté marques difuses no permeses, o està mal format"
+
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "if patch '%s' is correctly applied by quilt, use '%s' to update it"
+msgstr ""
+"si quilt aplica el pedaç «%s» correctament, empreu «%s» per actualitzar-lo"
+
+#: scripts/Dpkg/Source/Quilt.pm
+msgid ""
+"if the file is present in the unpacked source, make sure it is also present "
+"in the orig tarball"
+msgstr ""
+"si el fitxer existeix en el codi font desempaquetat, assegureu-vos que també "
+"existeix en l'arxiu tar original"
+
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "%s should be a directory or non-existing"
+msgstr "%s ha de ser un directori o no existir"
+
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "%s should be a file or non-existing"
+msgstr "%s ha de ser un fitxer o no existir"
+
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid ""
+"the series file (%s) contains unsupported options ('%s', line %s); dpkg-"
+"source might fail when applying patches"
+msgstr ""
+"el fitxer de sèrie (%s) conté opcions no admeses («%s», línia %s); dpkg-"
+"source pot fallar en aplicar pedaços"
+
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "restoring quilt backup files for %s"
+msgstr ""
+"s'estan restablint les còpies de seguretat dels fitxers de quilt per %s"
+
+#: scripts/Dpkg/Substvars.pm
+#, perl-format
+msgid "bad line in substvars file %s at line %d"
+msgstr "línia errònia al fitxer de substitució de variables %s en la línia %d"
+
+#: scripts/Dpkg/Substvars.pm
+#, perl-format
+msgid "invalid source version %s"
+msgstr "la versió del font %s no és vàlida"
+
+#: scripts/Dpkg/Substvars.pm
+#, perl-format
+msgid "too many substitutions - recursive ? - in '%s'"
+msgstr "massa substitucions (recursives?) a «%s»"
+
+#: scripts/Dpkg/Substvars.pm
+#, perl-format
+msgid "obsolete substitution variable ${%s}"
+msgstr "la variable de substitució ${%s} és obsoleta"
+
+#: scripts/Dpkg/Substvars.pm
+#, perl-format
+msgid "substitution variable ${%s} used, but is not defined"
+msgstr "la variable de substitució ${%s} s'utilitza, però no s'ha definit"
+
+#: scripts/Dpkg/Substvars.pm
+#, perl-format
+msgid "substitution variable ${%s} unused, but is defined"
+msgstr "la variable de substitució ${%s} no s'utilitza, però s'ha definit"
+
+#: scripts/Dpkg/Vars.pm
+#, perl-format
+msgid "source package name '%s' is illegal: %s"
+msgstr "el nom del paquet font «%s» no és legal: %s"
+
+#: scripts/Dpkg/Vars.pm
+#, perl-format
+msgid "source package has two conflicting values - %s and %s"
+msgstr "el paquet font té dos valors contradictoris - %s i %s"
+
+#: scripts/Dpkg/Vendor.pm
+#, perl-format
+msgid ""
+"%s origin filename is deprecated; it should have only alphanumeric or dash "
+"characters"
+msgstr ""
+"el nom de fitxer de l'origen %s és obsolet; només pot contenir caràcters "
+"alfanumèrics o guió"
+
+#: scripts/Dpkg/Vendor.pm
+#, perl-format
+msgid ""
+"%s module name is deprecated; it should be capitalized with only "
+"alphanumeric characters"
+msgstr ""
+"el nom de fitxer del mòdul %s és obsolet; ha de ser una paraula amb "
+"majúscula inicial i només pot contenir caràcters alfanumèrics"
+
+#: scripts/Dpkg/Vendor/Debian.pm
+#, perl-format
+msgid "unknown host architecture '%s'"
+msgstr "arquitectura de l'amfitrió '%s' desconeguda"
+
+#: scripts/Dpkg/Vendor/Ubuntu.pm
+msgid ""
+"Version number suggests Ubuntu changes, but Maintainer: does not have Ubuntu "
+"address"
+msgstr ""
+"el número de versió suggereix canvis d'Ubuntu, però el camp Maintainer no "
+"conté una adreça d'Ubuntu"
+
+#: scripts/Dpkg/Vendor/Ubuntu.pm
+msgid ""
+"Version number suggests Ubuntu changes, but there is no XSBC-Original-"
+"Maintainer field"
+msgstr ""
+"el número de versió suggereix canvis d'Ubuntu, però no hi ha un camp XSBC-"
+"Original-Maintainer"
+
+#: scripts/Dpkg/Version.pm
+#, perl-format
+msgid "%s is not a valid version"
+msgstr "%s no és una versió vàlida"
+
+#: scripts/Dpkg/Version.pm
+msgid "version number cannot be empty"
+msgstr "el número de versió no pot ser buit"
+
+#: scripts/Dpkg/Version.pm
+msgid "epoch part of the version number cannot be empty"
+msgstr "l'època en la versió no pot ser buida"
+
+#: scripts/Dpkg/Version.pm
+msgid "upstream version cannot be empty"
+msgstr "la versió original no pot ser buida"
+
+#: scripts/Dpkg/Version.pm
+msgid "revision cannot be empty"
+msgstr "la revisió no pot ser buida"
+
+#: scripts/Dpkg/Version.pm
+msgid "version number does not start with digit"
+msgstr "el número de versió no comença amb un digit"
+
+#: scripts/Dpkg/Version.pm
+#, perl-format
+msgid "version number contains illegal character '%s'"
+msgstr "el número de versió conté un caràcter il·legal ‘%s‘"
+
+#: scripts/Dpkg/Version.pm
+#, perl-format
+msgid "epoch part of the version number is not a number: '%s'"
+msgstr "l'època en la versió no és un número: «%s»"
+
+#, perl-format
+#~ msgid "cannot execute %s program"
+#~ msgstr "no es pot executar el programa %s"
+
+#, perl-format
+#~ msgid "cannot write signature file %s"
+#~ msgstr "no es pot escriure el fitxer de signatura «%s»"
+
+#~ msgid "signature file is already OpenPGP ASCII armor, copying"
+#~ msgstr "el fitxer de signatura ja és armat en OpenPGP ASCII, s'esta copiant"
+
+#~ msgid "cannot OpenPGP ASCII armor signature file due to missing gpg"
+#~ msgstr ""
+#~ "no es pot armar el fitxer de signatura en OpenPGP ASCII ja que manca gpg"
+
+#, perl-format
+#~ msgid "cannot import key in %s since GnuPG is not installed"
+#~ msgstr "no es pot importar la clau a %s perquè GnuPG no està instal·lat"
+
+#, perl-format
+#~ msgid "cannot import key %s into %s"
+#~ msgstr "no es pot importar la clau %s a %s"
+
+#, perl-format
+#~ msgid "cannot verify signature on %s since GnuPG is not installed"
+#~ msgstr ""
+#~ "no es pot verificar la signatura de %s perquè GnuPG no està instal·lat"
+
+#, perl-format
+#~ msgid "verifying %s using existing %s"
+#~ msgstr "s'està verificant %s emprant %s existent"
+
+#~ msgid "parse changes file"
+#~ msgstr "analitza un fitxer de canvis"
+
+#~ msgid "dpkg-genchanges"
+#~ msgstr "dpkg-genchanges"
+
+#, fuzzy, perl-format
+#~| msgid "failed to parse line in %s: %s"
+#~ msgid "failed to import key in %s"
+#~ msgstr "no s'ha pogut analitzar la línia en %s: %s"
+
+#, perl-format
+#~ msgid "failed to verify signature on %s"
+#~ msgstr "no s'ha pogut verificar la signatura de %s"
+
+#~ msgid "error occurred while parsing %s"
+#~ msgstr "s'ha produït un error en analitzar %s"
+
+#~ msgid "error occurred while parsing %s field: %s"
+#~ msgstr "s'ha produït un error en analitzar el camp %s: %s"
+
+#~ msgid "'%s' is not a legal architecture string"
+#~ msgstr "«%s» no és una cadena d'arquitectura vàlida"
+
+#~ msgid "badly formed package name in files list file, line %d"
+#~ msgstr "nom de paquet mal format en la llista de fitxers, línia %d"
+
+#~ msgid ""
+#~ "binary package stanza %s is using an obsolete Build-Profiles field syntax"
+#~ msgstr ""
+#~ "el paràgraf del paquet binari %s empra una sintaxis obsoleta del camp "
+#~ "Build-Profiles"
+
+#~ msgid "format variant must be in lowercase"
+#~ msgstr "la variant de format ha de ser en minúscules"
+
+#~ msgid "invalid Format field '%s'"
+#~ msgstr "el camp Format no és vàlid «%s»"
+
+#~ msgid "cannot create pipe for %s"
+#~ msgstr "no es pot crear el conducte per a %s"
+
+#~ msgid "tail of %s"
+#~ msgstr "cua de %s"
+
+#~ msgid "unknown substitution variable ${%s}"
+#~ msgstr "la variable de substitució ${%s} és desconeguda"
+
+#~ msgid "%s died from signal %s"
+#~ msgstr "%s ha mort d'una senyal %s"
+
+#~ msgid "'hardening' flag found but 'hardening-wrapper' not installed"
+#~ msgstr ""
+#~ "s'ha trobat el senyalador «hardening» però «hardening-wrapper» no és "
+#~ "instal·lat"
+
+#~ msgid "overriding %s in environment: %s"
+#~ msgstr "s'esta sobreescrivint %s a l'entorn: %s"
+
+#~ msgid "failed to sign .dsc and .changes file"
+#~ msgstr "no s'ha pogut signar els fitxers .dsc i .changes"
+
+#, fuzzy
+#~| msgid "illegal package name '%s': %s"
+#~ msgid "illegal .buildinfo ID '%s': %s"
+#~ msgstr "el nom de paquet «%s» és il·legal: %s"
+
+#~ msgid "cannot open new output control file '%s'"
+#~ msgstr "no s'ha pogut obrir el nou fitxer de control de sortida «%s»"
+
+#~ msgid "deprecated substitution variable ${%s}"
+#~ msgstr "la variable de substitució ${%s} és obsoleta"
+
+#, fuzzy
+#~| msgid "Usage: %s [<option>...] [<control-file>]"
+#~ msgid "Usage: %s [<option>...] [<changelog-file>]"
+#~ msgstr "Forma d'ús: %s [<opció>…] [<fitxer-control>]"
+
+#, fuzzy
+#~| msgid ""
+#~| "Parser options:\n"
+#~| " --format <output-format> see man page for list of available\n"
+#~| " output formats, defaults to 'dpkg'\n"
+#~| " for compatibility with dpkg-dev\n"
+#~| " --since <version>, include all changes later than version\n"
+#~| " -s<version>, -v<version>\n"
+#~| " --until <version>, include all changes earlier than "
+#~| "version\n"
+#~| " -u<version>\n"
+#~| " --from <version>, include all changes equal or later\n"
+#~| " -f<version> than version\n"
+#~| " --to <version>, -t<version> include all changes up to or equal\n"
+#~| " than version\n"
+#~| " --count <number>, include <number> entries from the top\n"
+#~| " -c<number>, -n<number> (or the tail if <number> is lower than "
+#~| "0)\n"
+#~| " --offset <number>, change the starting point for --count,\n"
+#~| " -o<number> counted from the top (or the tail if\n"
+#~| " <number> is lower than 0)\n"
+#~| " --all include all changes\n"
+#~ msgid ""
+#~ "Options:\n"
+#~ " --file <file> changelog <file> to parse (defaults to '-').\n"
+#~ " -l, --label <file> changelog <file> name to use in error "
+#~ "messages.\n"
+#~ " --format <output-format>\n"
+#~ " set the output format (defaults to 'dpkg').\n"
+#~ " --all include all changes.\n"
+#~ " -s, --since <version> include all changes later than <version>.\n"
+#~ " -v <version> ditto.\n"
+#~ " -u, --until <version> include all changes earlier than <version>.\n"
+#~ " -f, --from <version> include all changes equal or later than "
+#~ "<version>.\n"
+#~ " -t, --to <version> include all changes up to or equal than "
+#~ "<version>.\n"
+#~ " -c, --count <number> include <number> entries from the top (or tail "
+#~ "if\n"
+#~ " <number> is lower than 0).\n"
+#~ " -n <number> ditto.\n"
+#~ " -o, --offset <number> change starting point for --count, counted "
+#~ "from\n"
+#~ " the top (or tail if <number> is lower than "
+#~ "0).\n"
+#~ " -?, --help print usage information.\n"
+#~ " -V, --version print version information.\n"
+#~ msgstr ""
+#~ "Opcions de l'analitzador:\n"
+#~ " --format <format-sortida> vegeu la pàgina de manual per la llista "
+#~ "de\n"
+#~ " formats de sortida disponibles, el "
+#~ "valor\n"
+#~ " predeterminat és «dpkg».\n"
+#~ " --since <versió>, inclou tots els canvis posteriors a "
+#~ "<versió>.\n"
+#~ " -s<versió>, -v<versió>\n"
+#~ " --until <versió>, inclou tots els canvis anteriors a "
+#~ "<versió>.\n"
+#~ " -u<versió>\n"
+#~ " --from <versió>, inclou tots els canvis iguals o "
+#~ "posteriors a\n"
+#~ " -f<versió> <versió>.\n"
+#~ " --to <versió>, -t<versió> inclou tots els canvis fins o iguals a\n"
+#~ " <versió>.\n"
+#~ " --count <número>, inclou el <número> d'entrades des del "
+#~ "principi,\n"
+#~ " -c<número>, -n<número> o des del final si <número> és inferior "
+#~ "a 0.\n"
+#~ " --offset <número>, canvia el punt d'inici per a --count, "
+#~ "contant\n"
+#~ " -o<número> des del principi, o des del final si "
+#~ "<número>\n"
+#~ " és inferior a 0.\n"
+#~ " --all inclou tots els canvis.\n"
+
+#~ msgid "output format %s not supported"
+#~ msgstr "no s'admet el el format de sortida %s"
+
+#~ msgid "more than one file specified (%s and %s)"
+#~ msgstr "s'ha especificat més d'un fitxer (%s i %s)"
+
+#~ msgid "format parser %s not executable"
+#~ msgstr "analitzador de format %s no és executable"
+
+#~ msgid "output of changelog parser"
+#~ msgstr "sortida de l'analitzador del registre de canvis"
+
+#~ msgid "changelog parser %s"
+#~ msgstr "analitzador del registre de canvis %s"
+
+#~ msgid "'%s' is not a legal architecture string."
+#~ msgid_plural "'%s' are not legal architecture strings."
+#~ msgstr[0] "«%s» no és una cadena d'arquitectura vàlida."
+#~ msgstr[1] "«%s» no són cadenes d'arquitectura vàlides"
+
+#~ msgid ""
+#~ "More options are available but they depend on the source package format.\n"
+#~ "See dpkg-source(1) for more info."
+#~ msgstr ""
+#~ "Hi ha més opcions disponibles, però depenen del format de paquet font.\n"
+#~ "Vegeu dpkg-source(1) per a més informació."
+
+#~ msgid "couldn't open %s for reading"
+#~ msgstr "no s'ha pogut obrir «%s» per a la lectura"
+
+#, fuzzy
+#~| msgid "error closing %s ($? %d, $! '%s')"
+#~ msgid "error closing %s (%s)"
+#~ msgstr "s'ha produït un error en tancar %s ($? %d, $! «%s»)"
+
+#~ msgid "couldn't parse date %s"
+#~ msgstr "no s'ha pogut analitzar la data %s"
+
+#~ msgid "%s: unrepresentable changes to source"
+#~ msgstr "%s: hi ha canvis no representables al font"
+
+#~ msgid "open new substvars file '%s'"
+#~ msgstr "no es pot obrir el fitxer nou de variables de substitució «%s»"
+
+#~ msgid "open old varlist file '%s' for reading"
+#~ msgstr ""
+#~ "no es pot obrir el fitxer antic de variables de substitució «%s» per a "
+#~ "lectura"
+
+#~ msgid "copy old entry to new varlist file '%s'"
+#~ msgstr ""
+#~ "no es pot copiar l'entrada antiga al nou fitxer de substitució de "
+#~ "variables «%s»"
+
+#~ msgid ""
+#~ "this is currently a non-fatal warning with -S, but will probably become "
+#~ "fatal in the future"
+#~ msgstr ""
+#~ "açò és actualment només un avís amb -S, però probablement serà fatal en "
+#~ "el futur"
+
+#~ msgid "read changesdescription"
+#~ msgstr "no s'ha pogut obrir el fitxer de descripció de canvis"
+
+#~ msgid "chdir for du to `%s'"
+#~ msgstr "«chdir» per a du a «%s»"
+
+#~ msgid "du in `%s'"
+#~ msgstr "du en «%s»"
+
+#~ msgid "du gave unexpected output `%s'"
+#~ msgstr "«du» ha donat un resultat inesperat «%s»"
+
+#~ msgid "used that one and ignored data from %s!"
+#~ msgstr "s'està emprant i s'ha ignorat la informació de %s!"
+
+#~ msgid "package %s (filename %s) is repeat;"
+#~ msgstr "el paquet %s (nom de fitxer %s) és duplicat;"
+
+#~ msgid ""
+#~ "Usage: %s [<option>...] [<changelogfile>]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -?, --help print usage information\n"
+#~ " --version, -V print version information\n"
+#~ " --label, -l <file> name of the changelog file to\n"
+#~ " use in error messages\n"
+#~ " --file <file> changelog file to parse, defaults\n"
+#~ " to '-' (standard input)\n"
+#~ " --format <outputformat> see man page for list of available\n"
+#~ " output formats, defaults to 'dpkg'\n"
+#~ " for compatibility with dpkg-dev\n"
+#~ " --since, -s, -v <version> include all changes later than version\n"
+#~ " --until, -u <version> include all changes earlier than version\n"
+#~ " --from, -f <version> include all changes equal or later\n"
+#~ " than version\n"
+#~ " --to, -t <version> include all changes up to or equal\n"
+#~ " than version\n"
+#~ " --count, -c, -n <number> include <number> entries from the top\n"
+#~ " (or the tail if <number> is lower than "
+#~ "0)\n"
+#~ " --offset, -o <number> change the starting point for --count,\n"
+#~ " counted from the top (or the tail if\n"
+#~ " <number> is lower than 0)\n"
+#~ " --all include all changes\n"
+#~ msgstr ""
+#~ "Forma d'ús: %s [<opció>…] [<fitxer-registre>]\n"
+#~ "\n"
+#~ "Opcions:\n"
+#~ " -l, --label <fitxer> nom del fitxer de registre de canvis a "
+#~ "emprar\n"
+#~ " en els missatges d'error.\n"
+#~ " --file <fitxer> fitxer de registre de canvis a analitzar, "
+#~ "per\n"
+#~ " defecte és «-» (entrada estàndard).\n"
+#~ " --format <format-sortida> vegeu la pàgina de manual per la llista "
+#~ "de\n"
+#~ " de formats de sortida disponibles, el "
+#~ "valor\n"
+#~ " predeterminat és «dpkg».\n"
+#~ " -s, --since <versió> inclou tots els canvis posteriors a "
+#~ "<versió>.\n"
+#~ " -v <versió>\n"
+#~ " -u, --until <versió> inclou tots els canvis anteriors a "
+#~ "<versió>.\n"
+#~ " -f, --from <versió> inclou tots els canvis iguals o "
+#~ "posteriors a\n"
+#~ " <versió>.\n"
+#~ " -t, --to <versió> inclou tots els canvis fins o iguals a "
+#~ "<versió>.\n"
+#~ " -c, --count <número> inclou el <número> d'entrades des del "
+#~ "principi,\n"
+#~ " -n <número> o des del final si <número> és inferior "
+#~ "a 0.\n"
+#~ " -o, --offset <número> canvia el punt d'inici per a --count, "
+#~ "contant\n"
+#~ " des del principi, o des del final si "
+#~ "<número>\n"
+#~ " és inferior a 0.\n"
+#~ " --all inclou tots els canvis.\n"
+#~ " -?, --help mostra aquest missatge d'ajuda.\n"
+#~ " --version, -V mostra la versió.\n"
+
+#~ msgid "checksum program gave bogus output `%s'"
+#~ msgstr ""
+#~ "el programa de suma de verificació ha tornat una sortida errònia «%s»"
diff --git a/scripts/po/de.gmo b/scripts/po/de.gmo
new file mode 100644
index 0000000..461189b
--- /dev/null
+++ b/scripts/po/de.gmo
Binary files differ
diff --git a/scripts/po/de.po b/scripts/po/de.po
new file mode 100644
index 0000000..00572fd
--- /dev/null
+++ b/scripts/po/de.po
@@ -0,0 +1,5386 @@
+# German translation of the scripts in the dpkg package
+# This file is distributed under the same license as the dpkg package.
+# (C) Helge Kreutzmann <debian@helgefjell.de>, 2007-2023.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: dpkg-dev 1.21.14\n"
+"Report-Msgid-Bugs-To: debian-dpkg@lists.debian.org\n"
+"POT-Creation-Date: 2023-05-11 02:03+0000\n"
+"PO-Revision-Date: 2023-01-02 17:18+0100\n"
+"Last-Translator: Helge Kreutzmann <debian@helgefjell.de>\n"
+"Language-Team: German <debian-l10n-german@lists.debian.org>\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: scripts/dpkg-architecture.pl scripts/dpkg-buildflags.pl
+#: scripts/dpkg-buildpackage.pl scripts/dpkg-checkbuilddeps.pl
+#: scripts/dpkg-distaddfile.pl scripts/dpkg-genbuildinfo.pl
+#: scripts/dpkg-genchanges.pl scripts/dpkg-gencontrol.pl
+#: scripts/dpkg-gensymbols.pl scripts/dpkg-mergechangelogs.pl
+#: scripts/dpkg-name.pl scripts/dpkg-parsechangelog.pl
+#: scripts/dpkg-scanpackages.pl scripts/dpkg-scansources.pl
+#: scripts/dpkg-shlibdeps.pl scripts/dpkg-source.pl scripts/dpkg-vendor.pl
+#, perl-format
+msgid "Debian %s version %s.\n"
+msgstr "Debian %s Version %s\n"
+
+#: scripts/dpkg-architecture.pl scripts/dpkg-buildflags.pl
+#: scripts/dpkg-buildpackage.pl scripts/dpkg-distaddfile.pl
+#: scripts/dpkg-genbuildinfo.pl scripts/dpkg-genchanges.pl
+#: scripts/dpkg-gencontrol.pl scripts/dpkg-gensymbols.pl
+#: scripts/dpkg-parsechangelog.pl scripts/dpkg-shlibdeps.pl
+#: scripts/dpkg-source.pl scripts/dpkg-vendor.pl
+msgid ""
+"\n"
+"This is free software; see the GNU General Public License version 2 or\n"
+"later for copying conditions. There is NO warranty.\n"
+msgstr ""
+"\n"
+"Dies ist freie Software. Lesen Sie die GNU General Public License Version 2\n"
+"oder neuer für die Kopierbedingungen. Es gibt KEINE Haftung.\n"
+
+#: scripts/dpkg-architecture.pl scripts/dpkg-vendor.pl
+#, perl-format
+msgid "Usage: %s [<option>...] [<command>]"
+msgstr "Aufruf: %s [<Option> …] [<Befehl>]"
+
+#: scripts/dpkg-architecture.pl
+msgid ""
+"Commands:\n"
+" -l, --list list variables (default).\n"
+" -L, --list-known list valid architectures (matching some "
+"criteria).\n"
+" -e, --equal <arch> compare with host Debian architecture.\n"
+" -i, --is <arch-wildcard> match against host Debian architecture.\n"
+" -q, --query <variable> prints only the value of <variable>.\n"
+" -s, --print-set print command to set environment variables.\n"
+" -u, --print-unset print command to unset environment variables.\n"
+" -c, --command <command> set environment and run the command in it.\n"
+" -?, --help show this help message.\n"
+" --version show the version."
+msgstr ""
+"Befehle:\n"
+" -l, --list Variablen auflisten (voreingestellt)\n"
+" -L, --list-known gültige Architekturen auflisten (passend auf bestimmte "
+"Kriterien)\n"
+" -e, --equal <Arch> mit Host-Debian-Architektur vergleichen\n"
+" -i, --is <Arch-Platzhalter>\n"
+" prüfen, ob Host die Debian-Architektur <Arch-"
+"Platzhalter> ist\n"
+" -q, --query <Variable>\n"
+" nur den Wert von <Variable> ausgeben\n"
+" -s, --print-set den Befehl zum Setzen von Umgebungsvariablen ausgeben\n"
+" -u, --print-unset den Befehl zum Löschen von Umgebungsvariablen ausgeben\n"
+" -c, --command <Befehl>\n"
+" Umgebung setzen und darin den Befehl ausführen\n"
+" -?, --help diese Hilfemeldung anzeigen\n"
+" --version die Version anzeigen"
+
+#: scripts/dpkg-architecture.pl
+msgid ""
+"Options:\n"
+" -a, --host-arch <arch> set host Debian architecture.\n"
+" -t, --host-type <type> set host GNU system type.\n"
+" -A, --target-arch <arch> set target Debian architecture.\n"
+" -T, --target-type <type> set target GNU system type.\n"
+" -W, --match-wildcard <arch-wildcard>\n"
+" restrict architecture list matching <arch-"
+"wildcard>.\n"
+" -B, --match-bits <arch-bits>\n"
+" restrict architecture list matching <arch-"
+"bits>.\n"
+" -E, --match-endian <arch-endian>\n"
+" restrict architecture list matching <arch-"
+"endian>.\n"
+" --print-format <format>\n"
+" use <format> for --print-set and --print-unset,\n"
+" allowed values: shell (default), make.\n"
+" -f, --force force flag (override variables set in "
+"environment)."
+msgstr ""
+"Optionen:\n"
+" -a, --host-arch <Arch> Debian-Architektur setzen\n"
+" -t, --host-type <Typ> Host-GNU-Systemtyp setzen\n"
+" -A, --target-arch <Arch> Ziel-Debian-Architektur setzen\n"
+" -T, --target-type <Typ> Ziel-GNU-Systemtyp setzen\n"
+" -W, --match-wildcard <Arch-Platzhalter>\n"
+" Architekturliste auf zu <Arch-Platzhalter> "
+"passende einschränken\n"
+" -B, --match-bits <Arch-Bits>\n"
+" Architekturliste auf zu <Arch-Bits> passende "
+"einschränken\n"
+" -E, --match-endian <Arch-Endian>\n"
+" Architekturliste auf zu <Arch-Endian> passende "
+"einschränken\n"
+" --print-format <Format>\n"
+" <Format> für --print-set und --print-unset "
+"verwenden,\n"
+" erlaubte Werte: shell (Vorgabe), make.\n"
+" -f, --force Schalter zum Erzwingen (setzt Umgebungsvariablen "
+"außer Kraft)"
+
+#: scripts/dpkg-architecture.pl
+#, perl-format
+msgid "unknown Debian architecture %s, you must specify GNU system type, too"
+msgstr ""
+"unbekannte Debian-Architektur %s, Sie müssen auch den GNU-Systemtyp angeben"
+
+#: scripts/dpkg-architecture.pl
+#, perl-format
+msgid "unknown GNU system type %s, you must specify Debian architecture, too"
+msgstr ""
+"unbekannter GNU-Systemtyp %s, Sie müssen auch die Debian-Architektur angeben"
+
+#: scripts/dpkg-architecture.pl
+#, perl-format
+msgid "unknown default GNU system type for Debian architecture %s"
+msgstr "unbekannter Standard-GNU-Systemtyp für Debian-Architektur %s"
+
+#: scripts/dpkg-architecture.pl
+#, perl-format
+msgid ""
+"default GNU system type %s for Debian arch %s does not match specified GNU "
+"system type %s"
+msgstr ""
+"Standard GNU-Systemtyp %s für Debian-Architektur %s passt nicht zu "
+"angegebenem GNU-Systemtyp %s"
+
+#: scripts/dpkg-architecture.pl
+#, perl-format
+msgid "%s is not a supported print format"
+msgstr "%s ist keine unterstütztes Print-Format"
+
+#: scripts/dpkg-architecture.pl
+#, perl-format
+msgid "%s is not a supported variable name"
+msgstr "%s ist kein unterstützter Variablenname"
+
+#: scripts/dpkg-architecture.pl scripts/dpkg-buildflags.pl
+#: scripts/dpkg-distaddfile.pl scripts/dpkg-genbuildinfo.pl
+#: scripts/dpkg-genchanges.pl scripts/dpkg-gencontrol.pl
+#: scripts/dpkg-gensymbols.pl scripts/dpkg-name.pl
+#: scripts/dpkg-parsechangelog.pl scripts/dpkg-shlibdeps.pl
+#: scripts/dpkg-vendor.pl
+#, perl-format
+msgid "unknown option '%s'"
+msgstr "unbekannte Option »%s«"
+
+#: scripts/dpkg-architecture.pl
+#, perl-format
+msgid ""
+"specified GNU system type %s does not match CC system type %s, try setting a "
+"correct CC environment variable"
+msgstr ""
+"angegebener GNU-Systemtyp %s passt nicht zu CC-Systemtyp %s, versuchen Sie, "
+"eine korrekte CC-Umgebungsvariable zu setzen"
+
+#: scripts/dpkg-architecture.pl scripts/dpkg-shlibdeps.pl scripts/Dpkg/IPC.pm
+#: scripts/Dpkg/Shlibs/Cppfilt.pm
+#, perl-format
+msgid "unable to execute %s"
+msgstr "%s konnte nicht ausgeführt werden"
+
+#: scripts/dpkg-buildflags.pl
+#, perl-format
+msgid "Usage: %s [<command>]"
+msgstr "Aufruf: %s [<Befehl>]"
+
+#: scripts/dpkg-buildflags.pl
+msgid ""
+"Commands:\n"
+" --get <flag> output the requested flag to stdout.\n"
+" --origin <flag> output the origin of the flag to stdout:\n"
+" value is one of vendor, system, user, env.\n"
+" --status output a synopsis with all parameters affecting the\n"
+" program behaviour, the resulting flags and their "
+"origin.\n"
+" --query like --status, but in deb822 format.\n"
+" --query-features <area>\n"
+" output the status of features for the given area.\n"
+" --list output a list of the flags supported by the current "
+"vendor.\n"
+" --export=(sh|make|cmdline|configure)\n"
+" output something convenient to import the compilation\n"
+" flags in a shell script, in make, or in a command "
+"line.\n"
+" --dump output all compilation flags with their values.\n"
+" --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+"Befehle:\n"
+" --get <Schalter> den angegebenen Schalter nach Stdout ausgeben\n"
+" --origin <Schalter> die Quelle des Schalters nach Stdout ausgeben,\n"
+" mögliche Werte: vendor, system, user, env\n"
+" --status eine Zusammenfassung aller Parameter ausgeben, die "
+"das\n"
+" Verhalten des Programms, die daraus entstehenden\n"
+" Schalter und ihre Quelle angeben\n"
+" --query wie --status, aber in deb822-Format.\n"
+" --query-features <Bereich>\n"
+" den Status der Funktionalitäten für den übergebenen\n"
+" Bereich ausgeben\n"
+" --list eine Liste der vom aktuellen Lieferanten (Vendor)\n"
+" unterstützen Schalter ausgeben\n"
+" --export=(sh|make|configure)\n"
+" etwas praktisches ausgeben, um die Kompilierschalter\n"
+" in einem Shell-Skript, in Make oder auf der\n"
+" Befehlszeile zu importieren\n"
+" --dump alle Kompilierschalter mit ihren Werten ausgeben\n"
+" --help diese Hilfemeldung anzeigen\n"
+" --version die Version anzeigen\n"
+
+#: scripts/dpkg-buildflags.pl scripts/dpkg-source.pl scripts/dpkg-vendor.pl
+#, perl-format
+msgid "two commands specified: --%s and --%s"
+msgstr "zwei Befehle angegeben: --%s und --%s"
+
+#: scripts/dpkg-buildflags.pl scripts/dpkg-vendor.pl
+#, perl-format
+msgid "%s needs a parameter"
+msgstr "%s benötigt einen Parameter"
+
+#: scripts/dpkg-buildpackage.pl scripts/dpkg-genbuildinfo.pl
+#: scripts/dpkg-genchanges.pl scripts/dpkg-gencontrol.pl
+#: scripts/dpkg-gensymbols.pl scripts/dpkg-parsechangelog.pl
+#, perl-format
+msgid "Usage: %s [<option>...]"
+msgstr "Aufruf: %s [<Option> …]"
+
+#: scripts/dpkg-buildpackage.pl
+msgid ""
+"Options:\n"
+" --build=<type>[,...] specify the build <type>: full, source, "
+"binary,\n"
+" any, all (default is 'full').\n"
+" -F, --build=full normal full build (source and binary; "
+"default).\n"
+" -g, --build=source,all source and arch-indep build.\n"
+" -G, --build=source,any source and arch-specific build.\n"
+" -b, --build=binary binary-only, no source files.\n"
+" -B, --build=any binary-only, only arch-specific files.\n"
+" -A, --build=all binary-only, only arch-indep files.\n"
+" -S, --build=source source-only, no binary files.\n"
+" -nc, --no-pre-clean do not pre clean source tree (implies -b).\n"
+" --pre-clean pre clean source tree (default).\n"
+" --no-post-clean do not post clean source tree (default).\n"
+" -tc, --post-clean post clean source tree.\n"
+" --sanitize-env sanitize the build environment.\n"
+" -D, --check-builddeps check build dependencies and conflicts "
+"(default).\n"
+" -d, --no-check-builddeps do not check build dependencies and "
+"conflicts.\n"
+" --ignore-builtin-builddeps\n"
+" do not check builtin build dependencies.\n"
+" -P, --build-profiles=<profiles>\n"
+" assume comma-separated build <profiles> as "
+"active.\n"
+" --rules-requires-root assume legacy Rules-Requires-Root field "
+"value.\n"
+" -R, --rules-file=<rules> rules file to execute (default is debian/"
+"rules).\n"
+" -T, --rules-target=<target> call debian/rules <target>.\n"
+" --as-root ensure -T calls the target with root rights.\n"
+" -j, --jobs[=<jobs>|auto] jobs to run simultaneously (passed to "
+"<rules>),\n"
+" (default; default is auto, opt-in mode).\n"
+" -J, --jobs-try[=<jobs>|auto]\n"
+" alias for -j, --jobs.\n"
+" --jobs-force[=<jobs>|auto]\n"
+" jobs to run simultaneously (passed to "
+"<rules>),\n"
+" (default is auto, forced mode).\n"
+" -r, --root-command=<command>\n"
+" command to gain root rights (default is "
+"fakeroot).\n"
+" --check-command=<command>\n"
+" command to check the .changes file (no "
+"default).\n"
+" --check-option=<opt> pass <opt> to check <command>.\n"
+" --hook-<name>=<command> set <command> as the hook <name>, known "
+"hooks:\n"
+" init preclean source build binary buildinfo\n"
+" changes postclean check sign done\n"
+" --buildinfo-file=<file> set the .buildinfo filename to generate.\n"
+" --buildinfo-option=<opt>\n"
+" pass option <opt> to dpkg-genbuildinfo.\n"
+" --changes-file=<file> set the .changes filename to generate.\n"
+" --sign-backend=<backend>\n"
+" OpenPGP backend to use to sign\n"
+" (default is auto).\n"
+" -p, --sign-command=<command>\n"
+" command to sign .dsc and/or .changes files\n"
+" (default is gpg).\n"
+" --sign-keyfile=<file> the key file to use for signing.\n"
+" -k, --sign-keyid=<keyid> the key id to use for signing.\n"
+" --sign-key=<keyid> alias for -k, --sign-keyid.\n"
+" -ap, --sign-pause add pause before starting signature process.\n"
+" -us, --unsigned-source unsigned source package.\n"
+" -ui, --unsigned-buildinfo unsigned .buildinfo file.\n"
+" -uc, --unsigned-changes unsigned .buildinfo and .changes file.\n"
+" --no-sign do not sign any file.\n"
+" --force-sign force signing the resulting files.\n"
+" --admindir=<directory> change the administrative directory.\n"
+" -?, --help show this help message.\n"
+" --version show the version."
+msgstr ""
+"Optionen:\n"
+" --build=<Typ>[,…] legt den Bau-<Typ> fest: full, source, binary, any,\n"
+" all (Vorgabe ist »full«)\n"
+" -F, --build=full normaler kompletter Bau (Quellen und Binärdateien,\n"
+" Standard)\n"
+" -g, --build=source,all Quell- und Architektur-unabhängiger Bau\n"
+" -G, --build=source,any Quell- und Architektur-abhängiger Bau\n"
+" -b, --build=binary nur binär, keine Quelldateien\n"
+" -B, --build=any nur binär, nur Architektur-spezifische-Dateien\n"
+" -A, --build=all nur binär, nur Architektur-indep-Dateien\n"
+" -S, --build=source nur Quelle, keine Binärdateien\n"
+" -nc, --no-pre-clean Quellbaum vorab nicht säubern (impliziert -b)\n"
+" --pre-clean Quellbaum vorab säubern (Standard)\n"
+" --no-post-clean Quellbaum nicht abschließend säubern (Standard).\n"
+" -tc, --post-clean Quellbaum abschließend säubern.\n"
+" --sanitize-env die Bauumgebung bereinigen.\n"
+" -D, --check-builddeps\n"
+" Bauabhängigkeiten und -konflikte prüfen (Standard)\n"
+" -d, --no-check-builddeps Bauabhängigkeiten und -konflikte nicht prüfen\n"
+" --ignore-builtin-builddeps\n"
+" eingebaute Bauabhängigkeiten nicht prüfen\n"
+" -P, --build-profiles=<Profile>\n"
+" Kommata-getrennte übergebene Bau-<Profile> als aktiv\n"
+" annehmen\n"
+" --rules-requires-root\n"
+" alten Feldwert »Rules-Requires-Root« annehmen\n"
+" -R, --rules-file=<rules>\n"
+" auszuführende rules-Datei (Vorgabe: debian/rules)\n"
+" -T, --rules-target=<Ziel>\n"
+" debian/rules <Ziel> mit der korrekten Umgebung "
+"aufrufen\n"
+" --as-root sicherstellen, dass -T das Ziel mit root-Rechten "
+"aufruft\n"
+" -j, --jobs[=<Aufträge>|auto]\n"
+" Aufträge, die simultan laufen sollen (an <rules>\n"
+" weitergegeben) (Vorgabe; Vorgabe ist auto,\n"
+" Opt-In-Modus)\n"
+" -J, --jobs-try[=<Aufträge>|auto]\n"
+" Alias für -j, --jobs.\n"
+" --jobs-force[=<Aufträge>|auto]\n"
+" Aufträge, die simultan laufen sollen (an "
+"<rules> weitergegeben); (Vorgabe ist auto; "
+"erzwungener\n"
+" Modus)\n"
+" -r, --root-command=<Befehl>\n"
+" Befehl, um root-Rechte zu erhalten (standardmäßig\n"
+" fakeroot)\n"
+" --check-command=<Befehl>\n"
+" Befehl, um die .changes-Datei zu prüfen (keine "
+"Vorgabe)\n"
+" --check-option=<Opt>\n"
+" <Opt> an check-<Befehl> übergeben\n"
+" --hook-<Name>=<Befehl>\n"
+" <Befehl> als Hook-<Name> setzen, bekannte Hooks:\n"
+" init preclean source build binary buildinfo\n"
+" changes postclean check sign done\n"
+" --buildinfo-file=<Datei>\n"
+" den zu erstellenden .buildinfo-Dateinamen setzen\n"
+" --buildinfo-option=<Opt>\n"
+" Option <Opt> an dpkg-genbuildinfo übergeben\n"
+" --changes-file=<Datei>\n"
+" den zu erstellenden .changes-Dateinamen setzen\n"
+" --sign-backend=<Backend>\n"
+" Zum Signieren zu verwendendes OpenPGP-Backend\n"
+" (Vorgabe ist auto).\n"
+" -p, --sign-command=<Befehl>\n"
+" Befehl, um .dsc- und/oder .changes-Dateien zu "
+"signieren\n"
+" (standardmäßig gpg)\n"
+" --sign-keyfile=<Datei>\n"
+" der zum Signieren zu verwendende Schlüssel.\n"
+" -k, --sign-keyid=<Schlüsselkennung>\n"
+" die zum Signieren zu verwendende Schlüsselkennung.\n"
+" --sign-key=<Schlüsselkennung>\n"
+" Alias für -k, --sign-keyid.\n"
+" -ap, --sign-pause Pause vor Beginn des Signaturprozesses einfügen\n"
+" -us, --unsigned-source\n"
+" unsigniertes Quellpaket\n"
+" -ui, --unsigned-buildinfo\n"
+" nicht signierte .buildinfo-Datei\n"
+" -uc, --unsigned-changes\n"
+" unsignierte .buildinfo- und .changes-Datei\n"
+" --no-sign keine Datei signieren\n"
+" --force-sign Erzwingen des Signierens der entstehenden Dateien\n"
+" --admindir=<Verz> das administrative Verzeichnis ändern\n"
+" -?, --help diese Hilfemeldung anzeigen\n"
+" --version die Version anzeigen"
+
+#: scripts/dpkg-buildpackage.pl
+msgid ""
+"Options passed to dpkg-architecture:\n"
+" -a, --host-arch <arch> set the host Debian architecture.\n"
+" -t, --host-type <type> set the host GNU system type.\n"
+" --target-arch <arch> set the target Debian architecture.\n"
+" --target-type <type> set the target GNU system type."
+msgstr ""
+"Optionen, die an dpkg-architecture weitergegeben werden:\n"
+" -a, --host-arch <Arch> setzt die Host-Debian-Architektur.\n"
+" -t, --host-type <Typ> setzt den Host-GNU-Systemtyp.\n"
+" --target-arch <Arch> setzt die Ziel-Debian-Architektur.\n"
+" --target-type <Typ> setzt den Ziel-GNU-Systemtyp."
+
+#: scripts/dpkg-buildpackage.pl
+msgid ""
+"Options passed to dpkg-genchanges:\n"
+" -si source includes orig, if new upstream "
+"(default).\n"
+" -sa source includes orig, always.\n"
+" -sd source is diff and .dsc only.\n"
+" -v<version> changes since version <version>.\n"
+" -m, --source-by=<maint> maintainer for this source or build is "
+"<maint>.\n"
+" --build-by=<maint> ditto.\n"
+" -e, --release-by=<maint> maintainer for this change or release is "
+"<maint>.\n"
+" --changed-by=<maint> ditto.\n"
+" -C<descfile> changes are described in <descfile>.\n"
+" --changes-option=<opt> pass option <opt> to dpkg-genchanges."
+msgstr ""
+"Optionen, die an Dpkg-Genchanges weitergegeben werden:\n"
+" -si Quelle enthält Orig. falls neues Upstream, "
+"Standard\n"
+" -sa Quelle enthält immer Orig\n"
+" -sd Quelle ist nur diff und .dsc\n"
+" -v<Version> Änderungen seit Version <Version>\n"
+" -m, --source-by=<Betr> <Betr> ist Betreuer für diese Quellen oder diesen "
+"Bau.\n"
+" --build-by=<Betr> dito.\n"
+" -e, --release-by=<Betr> <Betr> ist Betreuer für Änderung oder "
+"Veröffentlichung.\n"
+" --changed-by=<Betr> dito.\n"
+" -C<Desc-Datei> Änderungen sind in <Desc-Datei> beschrieben\n"
+" --changes-option=<Opt>\n"
+" <Opt> an Dpkg-Genchanges weitergeben"
+
+#: scripts/dpkg-buildpackage.pl
+msgid ""
+"Options passed to dpkg-source:\n"
+" -sn force Debian native source format.\n"
+" -s[sAkurKUR] see dpkg-source for explanation.\n"
+" -z, --compression-level=<level>\n"
+" compression level to use for source.\n"
+" -Z, --compression=<compressor>\n"
+" compression to use for source (gz|xz|bzip2|"
+"lzma).\n"
+" -i, --diff-ignore[=<regex>] ignore diffs of files matching <regex>.\n"
+" -I, --tar-ignore[=<pattern>]\n"
+" filter out files when building tarballs.\n"
+" --source-option=<opt> pass option <opt> to dpkg-source.\n"
+msgstr ""
+"Optionen, die an Dpkg-Source weitergegeben werden:\n"
+" -sn »Debian native«-Quellformat erzwingen\n"
+" -s[sAkurKUR] siehe dpkg-source für Erklärung\n"
+" -z, --compression-level=<Stufe> Kompressionsstufe für Quelle\n"
+" -Z, --compression=<Komprimierer> Kompression für Quelle (gz|xz|bzip2|"
+"lzma)\n"
+" -i, --diff-ignore[=<Regaus>] Diffs von auf <Regaus> passenden Dateien "
+"ignorieren\n"
+" -I, --tar-ignore[=<Muster>] Dateien beim Tarball-Bauen herausfiltern\n"
+" --source-option=<Opt> <Opt> an Dpkg-Source weitergeben\n"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "missing .buildinfo filename"
+msgstr "fehlender .buildinfo-Dateiname"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "passing %s via %s is not supported; please use %s instead"
+msgstr ""
+"übergeben von %s mittels %s wird nicht unterstützt; verwenden Sie "
+"stattdessen »%s«"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "missing .changes filename"
+msgstr "fehlender .changes-Dateiname"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "unknown hook name %s"
+msgstr "unbekannter Hook-Name »%s«"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "missing hook %s command"
+msgstr "Fehlender Hook-%s-Befehl"
+
+#: scripts/dpkg-buildpackage.pl scripts/dpkg-genbuildinfo.pl
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid "%s is deprecated; it is without effect"
+msgstr "%s ist veraltet; es hat keine Wirkung"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "-s%s is deprecated; always using gpg style interface"
+msgstr "-s%s ist veraltet; es wird immer die GPG-artige Schnittstelle verwandt"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "unknown option or argument %s"
+msgstr "unbekannte Option oder Argument %s"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "option %s is only meaningful with option %s"
+msgstr "Option %s hat nur zusammen mit der Option %s eine Bedeutung"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "check-command '%s' not found"
+msgstr "Prüfbefehl »%s« nicht gefunden"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "sign-command '%s' not found"
+msgstr "Signierbefehl »%s« nicht gefunden"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source package"
+msgstr "Quellpaket"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source version"
+msgstr "Quellversion"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source distribution"
+msgstr "Quelldistribution"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source changed by"
+msgstr "Quelle geändert durch"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "host architecture"
+msgstr "Host-Architektur"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "debian/rules is not executable; fixing that"
+msgstr "debian/rules ist nicht ausführbar: wird korrigiert"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "build dependencies/conflicts unsatisfied; aborting"
+msgstr "Bauabhängigkeiten/-konflikte nicht erfüllt; Abbruch"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "(Use -d flag to override.)"
+msgstr "(Verwenden Sie -d, um sich darüber hinwegzusetzen.)"
+
+#: scripts/dpkg-buildpackage.pl
+msgid ""
+"building a source package without cleaning up as you asked; it might contain "
+"undesired files"
+msgstr ""
+"wie gewünscht wird ein Quellpaket ohne vorhergehende Bereinigung erstellt; "
+"es mag unerwünschte Dateien enthalten"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "Press <enter> to start the signing process.\n"
+msgstr "Drücken Sie die <Eingabetaste>, um den Signierprozess zu starten\n"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "not signing UNRELEASED build; use --force-sign to override"
+msgstr ""
+"UNRELEASED-Bau nicht signiert; verwenden Sie --force-sign zum Übersteuern"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "unable to determine %s"
+msgstr "%s kann nicht bestimmt werden"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "using a gain-root-command while being root"
+msgstr "Verwendung eines root-werde-Befehls, obwohl bereits root"
+
+#: scripts/dpkg-buildpackage.pl
+msgid ""
+"fakeroot not found, either install the fakeroot\n"
+"package, specify a command with the -r option, or run this as root"
+msgstr ""
+"Fakeroot nicht gefunden; installieren Sie entweder das Fakeroot-Paket,\n"
+"geben Sie einen Befehl mit der Option -r an oder führen Sie dies als root aus"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "gain-root-command '%s' not found"
+msgstr "root-werde-Befehl »%s« nicht gefunden"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "disallowed target in %s field keyword \"%s\""
+msgstr "nicht erlaubtes Ziel im %s-Feld-Schlüsselwort »%s«"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "%s field keyword \"%s\" is unknown in dpkg namespace"
+msgstr "%s-Feld-Schlüsselwort »%s« ist im Dpkg-Namensraum unbekannt"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "%s field keyword \"%s\" is uppercase; use \"%s\" instead"
+msgstr ""
+"%s-Feld-Schlüsselwort »%s« ist großgeschrieben; verwenden Sie stattdessen "
+"»%s«"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "%s field keyword \"%s\" is invalid; use \"%s\" instead"
+msgstr ""
+"%s-Feld-Schlüsselwort »%s« ist ungültig; verwenden Sie stattdessen »%s«"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "%s field keyword \"%s\" is unknown"
+msgstr "%s-Feldschlüsselwort »%s« ist unbekannt"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "field %s contains duplicate keyword \"%s\""
+msgstr "Feld %s enthält doppeltes Schlüsselwort »%s«"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "%s field contains both global and implementation specific keywords"
+msgstr ""
+"Feld %s enthält sowohl globale als auch implementierungsspezifische "
+"Schlüsselwörter"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "unknown %% substitution in hook: %%%s"
+msgstr "unbekannte %% Substitution in Hook: %%%s"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid ""
+"short OpenPGP key IDs are broken; please use key fingerprints in %s or %s "
+"instead"
+msgstr ""
+"kurze OpenGPG-Schlüsselkennungen sind defekt; bitte verwenden Sie "
+"stattdessen Fingerabdrücke in %s oder %s"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid ""
+"long OpenPGP key IDs are strongly discouraged; please use key fingerprints "
+"in %s or %s instead"
+msgstr ""
+"von langen OpenPGP-Schlüsselkennungen wird klar abgeraten; bitte verwenden "
+"Sie stattdessen Fingerabdrücke in %s oder %s"
+
+#: scripts/dpkg-buildpackage.pl scripts/dpkg-checkbuilddeps.pl
+#: scripts/dpkg-genbuildinfo.pl scripts/dpkg-name.pl scripts/Dpkg/Arch.pm
+#: scripts/Dpkg/IPC.pm scripts/Dpkg/Shlibs.pm
+#, perl-format
+msgid "cannot open %s"
+msgstr "%s kann nicht geöffnet werden"
+
+#: scripts/dpkg-buildpackage.pl scripts/dpkg-distaddfile.pl
+#: scripts/dpkg-genbuildinfo.pl scripts/dpkg-gencontrol.pl
+#: scripts/Dpkg/Interface/Storable.pm scripts/Dpkg/Source/Package/V2.pm
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot close %s"
+msgstr "%s kann nicht geschlossen werden"
+
+#: scripts/dpkg-buildpackage.pl scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "cannot move %s to %s"
+msgstr "%s kann nicht in %s verschoben werden"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "failed to sign %s file: %s"
+msgstr "Signieren der %s-Datei fehlgeschlagen: %s"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source-only upload: Debian-native package"
+msgstr "Nur Quelle hochzuladen: Debian-native-Paket"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source-only, diff-only upload (original source NOT included)"
+msgstr "Nur Quelle, nur Diff hochzuladen (Originalquellen NICHT enthalten)"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source-only upload (original source is included)"
+msgstr "Nur Quelle hochzuladen (Originalquellen enthalten)"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "binary-only upload (no source included)"
+msgstr "Binärpaket(e) hochzuladen (keine Quelle enthalten)"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "full upload; Debian-native package (full source is included)"
+msgstr "Alles hochzuladen; Debian-native-Paket (komplette Quelle enthalten)"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "binary and diff upload (original source NOT included)"
+msgstr "Binärpakete(e) und Diff hochzuladen (Originalquellen NICHT enthalten)"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "full upload (original source is included)"
+msgstr "Alles hochzuladen (Originalquellen enthalten)"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid ""
+"%s must be updated to support the 'build-arch' and 'build-indep' targets (at "
+"least '%s' seems to be missing)"
+msgstr ""
+"%s muss aktualisiert werden, um die Ziele »build-arch« und »build-indep« zu "
+"unterstützen (zumindest »%s« scheint zu fehlen)."
+
+#: scripts/dpkg-checkbuilddeps.pl
+#, perl-format
+msgid "Usage: %s [<option>...] [<control-file>]"
+msgstr "Aufruf: %s [<Option> …] [<Steuerdatei>]"
+
+#: scripts/dpkg-checkbuilddeps.pl
+msgid ""
+"Options:\n"
+" -A ignore Build-Depends-Arch and Build-Conflicts-Arch.\n"
+" -B ignore Build-Depends-Indep and Build-Conflicts-Indep.\n"
+" -I ignore built-in build dependencies and conflicts.\n"
+" -d build-deps use given string as build dependencies instead of\n"
+" retrieving them from control file\n"
+" -c build-conf use given string for build conflicts instead of\n"
+" retrieving them from control file\n"
+" -a arch assume given host architecture\n"
+" -P profiles assume given build profiles (comma-separated list)\n"
+" --admindir=<directory>\n"
+" change the administrative directory.\n"
+" -?, --help show this help message.\n"
+" --version show the version."
+msgstr ""
+"Optionen:\n"
+" -A Build-Depends-Arch und Build-Conflicts-Arch ignorieren\n"
+" -B Build-Depends-Indep and Build-Conflicts-Indep ignorieren\n"
+" -I eingebaute Bauabhängigkeiten und -konflikte ignorieren\n"
+" -d Bau-Abh die übergebene Zeichenkette als Bauabhängigkeiten verwenden\n"
+" statt sie aus der Steuerdatei auszulesen\n"
+" -c Baukonfl die übergebene Zeichenkette als Baukonflikte verwenden "
+"statt\n"
+" sie aus der Steuerdatei auszulesen\n"
+" -a arch die angegebene Host-Architektur unterstellen\n"
+" -P Profile übergebene Bauprofile annehmen (Kommata-getrennte Liste)\n"
+" --admindir=<Verzeichnis>\n"
+" das administrative Verzeichnis ändern\n"
+" -?, --help diese Hilfemeldung anzeigen\n"
+" --version die Version anzeigen"
+
+#: scripts/dpkg-checkbuilddeps.pl
+msgid ""
+"<control-file> is the control file to process (default: debian/control)."
+msgstr ""
+"<Steuerdatei> ist die zu verarbeitende Steuerdatei (standardmäßig debian/"
+"control)."
+
+#: scripts/dpkg-checkbuilddeps.pl scripts/dpkg-shlibdeps.pl
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "cannot parse %s field"
+msgstr "das Feld %s kann nicht ausgewertet werden"
+
+#: scripts/dpkg-checkbuilddeps.pl
+#, perl-format
+msgid "Unmet build dependencies: %s"
+msgstr "Nicht erfüllte Bauabhängigkeiten: %s"
+
+#: scripts/dpkg-checkbuilddeps.pl
+#, perl-format
+msgid "Build conflicts: %s"
+msgstr "Baukonflikte: %s"
+
+#: scripts/dpkg-distaddfile.pl
+#, perl-format
+msgid ""
+"Usage: %s [<option>...] <filename> <section> <priority>\n"
+"\n"
+"Options:\n"
+" -f<files-list-file> write files here instead of debian/files.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+"Aufruf: %s [<Option> …] <Dateiname> <Sektion> <Priorität>\n"
+"\n"
+"Optionen:\n"
+" -f<Dateilistedatei> Dateien hierrein statt in debian/files schreiben\n"
+" -?, --help diese Hilfemeldung anzeigen\n"
+" --version die Version anzeigen\n"
+
+#: scripts/dpkg-distaddfile.pl
+msgid "need exactly a filename, section and priority"
+msgstr "genau ein Dateiname, Sektion und eine Priorität wird benötigt"
+
+#: scripts/dpkg-distaddfile.pl
+msgid "filename, section and priority may contain no whitespace"
+msgstr ""
+"Dateiname, Sektion und Priorität dürfen keine Leerraumzeichen enthalten"
+
+#: scripts/dpkg-distaddfile.pl scripts/dpkg-genbuildinfo.pl
+#: scripts/dpkg-gencontrol.pl scripts/dpkg-mergechangelogs.pl
+#: scripts/Dpkg/Compression/FileHandle.pm scripts/Dpkg/File.pm
+#: scripts/Dpkg/IPC.pm scripts/Dpkg/Interface/Storable.pm
+#: scripts/Dpkg/Source/BinaryFiles.pm scripts/Dpkg/Source/Package.pm
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "cannot write %s"
+msgstr "%s kann nicht geschrieben werden"
+
+#: scripts/dpkg-distaddfile.pl scripts/dpkg-genbuildinfo.pl
+#: scripts/dpkg-gencontrol.pl
+msgid "install new files list file"
+msgstr "neue Dateilistendatei installieren"
+
+#: scripts/dpkg-genbuildinfo.pl
+msgid ""
+"Options:\n"
+" --build=<type>[,...] specify the build <type>: full, source, binary,\n"
+" any, all (default is 'full').\n"
+" -c<control-file> get control info from this file.\n"
+" -l<changelog-file> get per-version info from this file.\n"
+" -f<files-list-file> get .deb files list from this file.\n"
+" -F<changelog-format> force changelog format.\n"
+" -O[<buildinfo-file>] write to stdout (or <buildinfo-file>).\n"
+" -u<upload-files-dir> directory with files (default is '..').\n"
+" --always-include-kernel always include Build-Kernel-Version.\n"
+" --always-include-path always include Build-Path.\n"
+" --admindir=<directory> change the administrative directory.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+"Optionen:\n"
+" --build=<Typ>[,…]\n"
+" legt den Bau-<Typ> fest: full, source, binary,\n"
+" any, all (Vorgabe ist »full«)\n"
+" -c<Steuerdatei> Steuerinformationen aus dieser Datei beziehen\n"
+" -l<changelog-Datei> pro-Version-Informationen aus dieser Datei "
+"beziehen\n"
+" -f<Dateilist-Datei> .deb-Dateiliste aus dieser Datei beziehen\n"
+" -F<changelogformat> Changelog-Format erzwingen\n"
+" -O[<Buildinfo-Datei>] nach Stdout (oder <buildinfo-file>) schreiben\n"
+" --always-include-kernel immer die Bau-Kernel-Version aufnehmen\n"
+" --always-include-path immer den Baupfad aufnehmen\n"
+" --admindir=<Verzeichnis> das administrative Verzeichnis ändern\n"
+" -?, --help diese Hilfemeldung anzeigen\n"
+" --version die Version anzeigen\n"
+
+#: scripts/dpkg-genbuildinfo.pl
+msgid "binary build with no binary artifacts found; .buildinfo is meaningless"
+msgstr ""
+"binärer Bau ohne binäre Produkte gefunden; .buildinfo ist bedeutungslos"
+
+#: scripts/dpkg-genbuildinfo.pl
+#, perl-format
+msgid "cannot install output buildinfo file '%s'"
+msgstr "Ausgabe-Buildinfo-Datei »%s« kann nicht installiert werden"
+
+#: scripts/dpkg-genchanges.pl
+msgid ""
+"Options:\n"
+" --build=<type>[,...] specify the build <type>: full, source, binary,\n"
+" any, all (default is 'full').\n"
+" -g source and arch-indep build.\n"
+" -G source and arch-specific build.\n"
+" -b binary-only, no source files.\n"
+" -B binary-only, only arch-specific files.\n"
+" -A binary-only, only arch-indep files.\n"
+" -S source-only, no binary files.\n"
+" -c<control-file> get control info from this file.\n"
+" -l<changelog-file> get per-version info from this file.\n"
+" -f<files-list-file> get .deb files list from this file.\n"
+" -v<since-version> include all changes later than version.\n"
+" -C<changes-description> use change description from this file.\n"
+" -m<maintainer> override control's maintainer value.\n"
+" -e<maintainer> override changelog's maintainer value.\n"
+" -u<upload-files-dir> directory with files (default is '..').\n"
+" -si source includes orig, if new upstream (default).\n"
+" -sa source includes orig, always.\n"
+" -sd source is diff and .dsc only.\n"
+" -q quiet - no informational messages on stderr.\n"
+" -F<changelog-format> force changelog format.\n"
+" -V<name>=<value> set a substitution variable.\n"
+" -T<substvars-file> read variables here, not debian/substvars.\n"
+" -D<field>=<value> override or add a field and value.\n"
+" -U<field> remove a field.\n"
+" -O[<filename>] write to stdout (default) or <filename>.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+"Optionen:\n"
+" --build=<Typ>[,…]\n"
+" legt den Bau-<Typ> fest: full, source, binary,\n"
+" any, all (Vorgabe ist »full«)\n"
+" -g Quell- und Architektur-unabhängiger Bau\n"
+" -G Quell- und Architektur-spezifischer Bau\n"
+" -b rein binär, keine Quelldateien\n"
+" -B rein binär, nur Architektur-spezifische Dateien\n"
+" -A rein binär, nur Architektur-unabhängige Dateien\n"
+" -S nur Quelle, keine Binärdateien\n"
+" -c<Steuerdatei> Steuerinformationen aus dieser Datei beziehen\n"
+" -l<changelog-Datei> pro-Version-Informationen aus dieser Datei "
+"beziehen\n"
+" -f<Dateilist-Datei> .deb-Dateiliste aus dieser Datei beziehen\n"
+" -v<seitVersion> alle Änderungen neuer als Version einfügen\n"
+" -C<Änderungsbeschreibung> Änderungsbeschreibung aus dieser Datei "
+"verwenden\n"
+" -m<Betreuer> den Wert von »maintainer« der Steuerdatei\n"
+" überschreiben\n"
+" -e<Betreuer> den Wert von »maintainer« im Changelog\n"
+" überschreiben\n"
+" -u<uploadDateiVerz> Verzeichnis mit Dateien (standardmäßig »..«)\n"
+" -si Quelle enthält Orig. falls neues Upstream, "
+"Standard\n"
+" -sa Quelle enthält immer Originalquellen\n"
+" -sd Quelle ist nur Diff und .dsc\n"
+" -q ruhig - keine Informationsmeldungen auf Stderr\n"
+" -F<changelogformat> Changelog-Format erzwingen\n"
+" -V<Name>=<Wert> eine Substitutionsvariable setzen\n"
+" -T<Substvar-Datei> Variablen von hier lesen statt aus debian/"
+"substvars\n"
+" -D<Feld>=<Wert> ein Feld und Wert überschreiben oder ergänzen\n"
+" -U<Feld> ein Feld entfernen\n"
+" -O[<Dateiname>] nach Stdout (Vorgabe) oder in <Dateiname>\n"
+" schreiben\n"
+" -?, --help diese Hilfemeldung anzeigen\n"
+" --version die Version anzeigen\n"
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "the current version (%s) is earlier than the previous one (%s)"
+msgstr "die aktuelle Version (%s) ist älter als die vorhergehende (%s)"
+
+#: scripts/dpkg-genchanges.pl
+msgid "missing Section for source files"
+msgstr "fehlende Sektion für Quelldateien"
+
+#: scripts/dpkg-genchanges.pl
+msgid "missing Priority for source files"
+msgstr "fehlende Priorität für Quelldateien"
+
+#: scripts/dpkg-genchanges.pl scripts/Dpkg/Vendor.pm
+#, perl-format
+msgid "%s is empty"
+msgstr "%s ist leer"
+
+#: scripts/dpkg-genchanges.pl
+msgid "not including original source code in upload"
+msgstr "Originalquellen beim Hochladen nicht hinzufügen"
+
+#: scripts/dpkg-genchanges.pl
+msgid "ignoring -sd option for native Debian package"
+msgstr "Option »-sd« wird bei »Debian native«-Paketen ignoriert"
+
+#: scripts/dpkg-genchanges.pl
+msgid "including full source code in upload"
+msgstr "kompletter Quellcode beim Hochladen hinzufügen"
+
+#: scripts/dpkg-genchanges.pl
+msgid ""
+"binary-only arch-specific upload (source code and arch-indep packages not "
+"included)"
+msgstr ""
+"rein binärer Architektur-spezifischer Upload (Quellcode und "
+"architekturabhängige Pakete sind nicht enthalten)"
+
+#: scripts/dpkg-genchanges.pl
+msgid ""
+"binary-only arch-indep upload (source code and arch-specific packages not "
+"included)"
+msgstr ""
+"rein binärer Architektur-unabhängiger Upload (Quellcode und "
+"architekturunabhängige Pakete sind nicht enthalten)"
+
+#: scripts/dpkg-genchanges.pl
+msgid "binary-only upload (no source code included)"
+msgstr "Binärpaket(e) hochzuladen (kein Quellcode enthalten)"
+
+#: scripts/dpkg-genchanges.pl
+msgid "binary build with no binary artifacts found; cannot distribute"
+msgstr "binärer Bau ohne binäre Produkte gefunden; kann nicht verteilt werden"
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "package %s in control file but not in files list"
+msgstr "Paket %s in Steuerdatei, aber nicht in Dateiliste"
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "package %s listed in files list but not in control info"
+msgstr "Paket %s in Dateienliste, aber nicht in der Steuer-Info aufgeführt"
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "missing Section for binary package %s; using '-'"
+msgstr "fehlende Sektion für Binärpaket %s; »-« wird verwendet"
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "package %s has section %s in control file but %s in files list"
+msgstr "Paket %s hat Sektion %s in der Steuerdatei, aber %s in der Dateiliste"
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "missing Priority for binary package %s; using '-'"
+msgstr "fehlende Priorität für Binärpaket %s; »-« wird verwendet"
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "package %s has priority %s in control file but %s in files list"
+msgstr "Paket %s hat Priorität %s in Steuerdatei, aber %s in Dateienliste"
+
+#: scripts/dpkg-genchanges.pl scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "missing information for critical output field %s"
+msgstr "fehlende Informationen für kritisches Ausgabefeld %s"
+
+#: scripts/dpkg-genchanges.pl scripts/dpkg-gencontrol.pl
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "missing information for output field %s"
+msgstr "fehlende Informationen für Ausgabefeld %s"
+
+# FIXME Really .../DEBIAN (three dots?)
+#: scripts/dpkg-gencontrol.pl
+msgid ""
+"Options:\n"
+" -p<package> print control file for package.\n"
+" -c<control-file> get control info from this file.\n"
+" -l<changelog-file> get per-version info from this file.\n"
+" -F<changelog-format> force changelog format.\n"
+" -v<force-version> set version of binary package.\n"
+" -f<files-list-file> write files here instead of debian/files.\n"
+" -P<package-build-dir> temporary build directory instead of debian/tmp.\n"
+" -n<filename> assume the package filename will be <filename>.\n"
+" -O[<file>] write to stdout (or <file>), not .../DEBIAN/"
+"control.\n"
+" -is, -ip, -isp, -ips deprecated, ignored for compatibility.\n"
+" -D<field>=<value> override or add a field and value.\n"
+" -U<field> remove a field.\n"
+" -V<name>=<value> set a substitution variable.\n"
+" -T<substvars-file> read variables here, not debian/substvars.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+"Optionen:\n"
+" -p<Paket> Steuerdatei für Paket ausgeben\n"
+" -c<Steuerdatei> Steuerinformationen aus dieser Datei holen\n"
+" -l<Changelog-Datei> pro-Versions-Informationen aus dieser Datei holen\n"
+" -F<Changelog-Format> Changelog-Format erzwingen\n"
+" -v<erzwinge_Version> Version des Binärpakets setzen\n"
+" -f<Dateilistedatei> Dateien hierher schreiben statt in debian/files\n"
+" -P<Paketbauverz> temporäres Bauverzeichnis statt debian/tmp\n"
+" -n<Dateiname> annehmen, dass der Paketdateiname <Dateiname> ist\n"
+" -O[<Datei>] nach Stdout (oder <Datei>) schreiben, nicht .../"
+"DEBIAN/control\n"
+" -is, -ip, -isp, -ips veraltet, wegen Kompatibilität ignoriert\n"
+" -D<Feld>=<Wert> ein Feld und Wert überschreiben oder ergänzen\n"
+" -U<Feld> ein Feld entfernen\n"
+" -V<Name>=<Wert> eine Substitutionsvariable setzen\n"
+" -T<Substvars-Datei> Variablen von hier lesen statt aus debian/"
+"substvars\n"
+" -?, --help diese Hilfemeldung anzeigen\n"
+" --version die Version anzeigen\n"
+
+#: scripts/dpkg-gencontrol.pl scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "illegal package name '%s': %s"
+msgstr "Ungültiger Paketname »%s«: %s"
+
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid "package %s not in control info"
+msgstr "Paket %s nicht in Steuer-Info"
+
+#: scripts/dpkg-gencontrol.pl scripts/dpkg-gensymbols.pl
+msgid "no package stanza found in control info"
+msgstr "kein package-Eintrag in Steuer-Info gefunden"
+
+#: scripts/dpkg-gencontrol.pl scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "must specify package since control info has many (%s)"
+msgstr "Paket muss angegeben werden, da Steuer-Info viele (%s) enthält"
+
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid "package %s: "
+msgstr "Paket %s: "
+
+# FIXME Positional arguments for %s?
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid ""
+"current host architecture '%s' does not appear in package '%s' architecture "
+"list (%s)"
+msgstr ""
+"aktuelle Host-Architektur »%s« erscheint nicht in der Architekturliste des "
+"Pakets »%s« (%s)"
+
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid "%s field of package %s: "
+msgstr "Feld %s von Paket %s: "
+
+# FIXME Positional arguments for %s?
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid "parsing package '%s' %s field: %s"
+msgstr "Pakets »%s« Feld %s wird ausgewertet: %s"
+
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid ""
+"the %s field contains an arch-specific dependency but the package '%s' is "
+"architecture all"
+msgstr ""
+"das Feld %s enthält eine architekturspezifische Abhängigkeit, aber das Paket "
+"»%s« ist »architecture all«"
+
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid "%s package '%s' with udeb specific field %s"
+msgstr "%s Paket »%s« mit udeb-spezifischem Feld %s"
+
+#: scripts/dpkg-gencontrol.pl scripts/Dpkg/Source/Package.pm
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot stat %s"
+msgstr "%s kann nicht mit stat abgefragt werden"
+
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid "cannot install output control file '%s'"
+msgstr "Ausgabe-Steurdatei »%s« kann nicht installiert werden"
+
+#: scripts/dpkg-gensymbols.pl
+msgid ""
+"Options:\n"
+" -l<library-path> add directory to private shared library search "
+"list.\n"
+" -p<package> generate symbols file for package.\n"
+" -P<package-build-dir> temporary build directory instead of debian/tmp.\n"
+" -e<library> explicitly list libraries to scan.\n"
+" -v<version> version of the packages (defaults to\n"
+" version extracted from debian/changelog).\n"
+" -c<level> compare generated symbols file with the "
+"reference\n"
+" template in the debian directory and fail if\n"
+" difference is too important; level goes from 0 "
+"for\n"
+" no check, to 4 for all checks (default level is "
+"1).\n"
+" -q keep quiet and never emit any warnings or\n"
+" generate a diff between generated symbols\n"
+" file and the reference template.\n"
+" -I<file> force usage of <file> as reference symbols\n"
+" file instead of the default file.\n"
+" -O[<file>] write to stdout (or <file>), not .../DEBIAN/"
+"symbols.\n"
+" -t write in template mode (tags are not\n"
+" processed and included in output).\n"
+" -V verbose output; write deprecated symbols and "
+"pattern\n"
+" matching symbols as comments (in template mode "
+"only).\n"
+" -a<arch> assume <arch> as host architecture when "
+"processing\n"
+" symbol files.\n"
+" -d display debug information during work.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+"Optionen:\n"
+" -l<library-path> Verzeichnis zur privaten Suchliste für gemeinsam\n"
+" benutzte Bibliotheken hinzufügen\n"
+" -p<Paket> Symboldatei für Paket erstellen\n"
+" -P<Paketbauverz> temporäres Bauverzeichnis (statt debian/tmp)\n"
+" -e<Bibliothek> explizite Liste von zu durchsuchenden Dateien\n"
+" -v<Version> Version des Pakets (standardmäßig\n"
+" aus debian/changelog extrahierte Version)\n"
+" -c<Stufe> erstellte Symboldatei mit der Referenzvorlage\n"
+" im debian-Verzeichnis vergleichen und\n"
+" fehlschlagen, falls die Unterschiede zu wichtig\n"
+" sind; Stufe reicht von 0 für keine Prüfung bis "
+"zu\n"
+" 4 für alle Prüfungen (Standardstufe ist 1)\n"
+" -q ruhig verhalten und nie irgendwelche Warnungen\n"
+" oder ein Diff zwischen der generierten\n"
+" Symboldatei und der Referenzvorlage ausgeben\n"
+" -I<Datei> Verwendung von <Datei> als Referenz-Symboldatei\n"
+" erzwingen statt der standardmäßigen Datei\n"
+" -O<Datei> nach Stdout (oder <Datei>) schreiben, nicht .../"
+"DEBIAN/symbols\n"
+" -t im Vorlagenmodus schreiben (Markierungen werden\n"
+" nicht verarbeitet und in die Ausgabe "
+"aufgenommen)\n"
+" -V detaillierte Ausgabe; veraltete Symbole und\n"
+" Muster, die auf Symbole passen, als Kommentare\n"
+" schreiben (nur im Vorlagen-Modus)\n"
+" -a<Arch> <Arch> als Host-Architektur beim Verarbeiten\n"
+" der Symboldateien annehmen\n"
+" -d bei der Arbeit Debug-Informationen anzeigen\n"
+" -?, --help diese Hilfemeldung anzeigen\n"
+" --version die Version anzeigen\n"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "pattern '%s' did not match any file"
+msgstr "Muster »%s« passte auf keine Datei"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "can't read directory %s: %s"
+msgstr "Verzeichnis %s kann nicht gelesen werden: %s"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "Dpkg::Shlibs::Objdump couldn't parse %s\n"
+msgstr "Dpkg::Shlibs::Objdump konnte %s nicht auswerten\n"
+
+#: scripts/dpkg-gensymbols.pl
+msgid "<standard output>"
+msgstr "<Standardausgabe>"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "new libraries appeared in the symbols file: %s"
+msgstr "neue Bibliotheken sind in der Symboldatei aufgetaucht: %s"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "some libraries disappeared in the symbols file: %s"
+msgstr "einige Bibliotheken sind in der Symboldatei verschwunden: %s"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "some new symbols appeared in the symbols file: %s"
+msgstr "einige neue Symbole sind in der Symboldatei aufgetaucht: %s"
+
+#: scripts/dpkg-gensymbols.pl
+msgid "see diff output below"
+msgstr "lesen Sie die folgende Diff-Ausgabe"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "some symbols or patterns disappeared in the symbols file: %s"
+msgstr "einige Symbole oder Muster sind aus der Symboldatei verschwunden: %s"
+
+#: scripts/dpkg-gensymbols.pl
+msgid "the generated symbols file is empty"
+msgstr "die erstellte Symboldatei ist leer"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "%s doesn't match completely %s"
+msgstr "%s passt nicht komplett zu %s"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "no debian/symbols file used as basis for generating %s"
+msgstr "keine debian/symbols-Datei als Basis zur Erzeugung von %s verwendet"
+
+#: scripts/dpkg-mergechangelogs.pl
+msgid ""
+"This is free software; see the GNU General Public License version 2 or\n"
+"later for copying conditions. There is NO warranty.\n"
+msgstr ""
+"Dies ist freie Software; lesen Sie die GNU General Public License Version 2\n"
+"oder neuer für die Kopierbedingungen. Es gibt KEINE Haftung.\n"
+
+#: scripts/dpkg-mergechangelogs.pl
+#, perl-format
+msgid ""
+"Usage: %s [<option>...] <old> <new-a> <new-b> [<out>]\n"
+"\n"
+"Options:\n"
+" -m, --merge-prereleases merge pre-releases together, ignores everything\n"
+" after the last '~' in the version.\n"
+" --merge-unreleased merge UNRELEASED entries together, ignoring "
+"their\n"
+" version numbers.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+"Aufruf: %s [<Option> …] <alt> <neu-a> <neu-b> [<Ausgabe>]\n"
+"\n"
+"Optionen:\n"
+" -m, --merge-prereleases vorab-Veröffentlichungen zusammenführen,\n"
+" alles nach dem letzten »~« in der Version\n"
+" ignorieren\n"
+" --merge-unreleased UNRELEASED-Einträge zusammenführen, ihre\n"
+" Versionnummern ignorieren\n"
+" -?, --help diese Hilfemeldung anzeigen\n"
+" --version die Version anzeigen\n"
+
+#: scripts/dpkg-mergechangelogs.pl
+msgid "needs at least three arguments"
+msgstr "benötigt mindestens drei Argumente"
+
+#: scripts/dpkg-mergechangelogs.pl
+msgid "file arguments need to exist"
+msgstr "Datei-Argument muss vorhanden sein"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "Usage: %s [<option>...] <file>...\n"
+msgstr "Aufruf: %s [<Option> …] <Datei> …\n"
+
+#: scripts/dpkg-name.pl
+msgid ""
+"\n"
+"Options:\n"
+" -a, --no-architecture no architecture part in filename.\n"
+" -o, --overwrite overwrite if file exists.\n"
+" -k, --symlink don't create a new file, but a symlink.\n"
+" -s, --subdir [dir] move file into subdirectory (use with care).\n"
+" -c, --create-dir create target directory if not there (use with "
+"care).\n"
+" -?, --help show this help message.\n"
+" -v, --version show the version.\n"
+"\n"
+"file.deb changes to <package>_<version>_<architecture>.<package_type>\n"
+"according to the 'underscores convention'.\n"
+msgstr ""
+"\n"
+"Optionen:\n"
+" -a, --no-architecture kein Architekturteil im Dateinamen\n"
+" -o, --overwrite überschreiben, falls Datei existiert\n"
+" -k, --symlink keine neue Datei erstellen, sondern einen "
+"Symlink\n"
+" -s, --subdir [Verz] Datei in Unterverzeichnis verschieben "
+"(Vorsicht!)\n"
+" -c, --create-dir Zielverzeichnis erstellen, falls nicht\n"
+" vorhanden (Vorsicht!)\n"
+" -?, --help diese Hilfemeldung anzeigen\n"
+" -v, --version die Version anzeigen\n"
+"\n"
+"Datei.deb ändert sich in <Paket>_<Version>_<Architektur>.<Pakettyp>\n"
+"gemäß der »Unterstrich-Konvention«.\n"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "cannot find '%s'"
+msgstr "»%s« kann nicht gefunden werden"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "binary control file %s"
+msgstr "binäre Steuerdatei %s"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "assuming architecture '%s' for '%s'"
+msgstr "Architektur »%s« wird für »%s« vermutet"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "bad package control information for '%s'"
+msgstr "ungültige Paketsteuerinformationen für »%s«"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "assuming section '%s' for '%s'"
+msgstr "Sektion »%s« wird für »%s« vermutet"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "no Package field found in '%s', skipping package"
+msgstr "kein Feld »Package« in »%s« gefunden, Paket übersprungen"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "created directory '%s'"
+msgstr "Verzeichnis %s erstellt"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "cannot create directory '%s'"
+msgstr "Verzeichnis »%s« kann nicht angelegt werden"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "no such directory '%s', try --create-dir (-c) option"
+msgstr "kein Verzeichnis »%s«, versuchen Sie die Option --create-dir (-c)"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "skipping '%s'"
+msgstr "»%s« wird übersprungen"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "cannot move '%s' to existing file"
+msgstr "»%s« kann nicht auf eine existierende Datei verschoben werden"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "moved '%s' to '%s'"
+msgstr "»%s« nach »%s« verschoben"
+
+#: scripts/dpkg-name.pl
+msgid "mkdir can be used to create directory"
+msgstr "mkdir kann zum Erstellen von Verzeichnissen verwandt werden"
+
+#: scripts/dpkg-name.pl
+msgid "need at least a filename"
+msgstr "mindestens ein Dateiname wird benötigt"
+
+#: scripts/dpkg-parsechangelog.pl
+msgid ""
+"Options:\n"
+" -l, --file <changelog-file>\n"
+" get per-version info from this file.\n"
+" -F <changelog-format> force changelog format.\n"
+" -S, --show-field <field> show the values for <field>.\n"
+" -?, --help show this help message.\n"
+" --version show the version."
+msgstr ""
+"Optionen:\n"
+" -l, --file <Changelog-Datei>\n"
+" pro-Version-Informationen aus dieser Datei\n"
+" beziehen\n"
+" -F <Changelog-Format> Changelog-Format erzwingen\n"
+" -S, --show-field <Feld> die Werte für <Feld> anzeigen\n"
+" -?, --help diese Hilfemeldung anzeigen\n"
+" --version die Version anzeigen"
+
+#: scripts/dpkg-parsechangelog.pl
+msgid ""
+"Parser options:\n"
+" --format <output-format>\n"
+" set output format (defaults to 'dpkg').\n"
+" --reverse include all changes in reverse order.\n"
+" --all include all changes.\n"
+" -s, --since <version> include all changes later than <version>.\n"
+" -v <version> ditto.\n"
+" -u, --until <version> include all changes earlier than <version>.\n"
+" -f, --from <version> include all changes equal or later than "
+"<version>.\n"
+" -t, --to <version> include all changes up to or equal than "
+"<version>.\n"
+" -c, --count <number> include <number> entries from the top (or tail\n"
+" if <number> is lower than 0).\n"
+" -n <number> ditto.\n"
+" -o, --offset <number> change starting point for --count, counted from\n"
+" the top (or tail if <number> is lower than 0).\n"
+msgstr ""
+"Auswerteroptionen:\n"
+" --format <Ausgabeformat>\n"
+" setzt das Ausgabeformat (Vorgabe: »dpkg«)\n"
+" --reverse fügt alle Änderungen in umgekehrter Reihenfolge "
+"ein\n"
+" --all fügt alle Änderungen hinzu\n"
+" -s, --since <Version> fügt alle Änderungen jünger als <Version> hinzu\n"
+" -v <Version> ebnso\n"
+" -u, --until <Version> fügt alle Änderungen älter als <Version> hinzu\n"
+" -f, --from <Version> fügt alle Änderungen identisch zu oder jünger als "
+"<Version> hinzu\n"
+" -t, --to <Version> fügt alle Änderungen bis zu (einschließlich) "
+"<Version> hinzu\n"
+" -c, --count <Zahl> fügt <Zahl> Einträge vom oben (oder von unten, "
+"falls <Zahl> kleiner 0 ist) hinzu\n"
+" -n <Zahl> ebenso\n"
+" -o, --offset <Zahl> ändert den Startpunkt für --count, gezählt von "
+"oben (oder von unten, falls <Zahl> kleiner 0 ist)\n"
+
+#: scripts/dpkg-parsechangelog.pl
+msgid "-L is obsolete; it is without effect"
+msgstr "-L ist veraltet; es hat keine Wirkung"
+
+#: scripts/dpkg-parsechangelog.pl
+msgid "bad changelog format name"
+msgstr "ungültiger Changelog-Formatname"
+
+#: scripts/dpkg-parsechangelog.pl
+msgid "missing changelog filename"
+msgstr "fehlender Changelog-Dateiname"
+
+#: scripts/dpkg-parsechangelog.pl
+msgid "takes no non-option arguments"
+msgstr "akzeptiert kein Nichtoptionsargument"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid ""
+"Usage: %s [<option>...] <binary-path> [<override-file> [<path-prefix>]] > "
+"Packages\n"
+"\n"
+"Options:\n"
+" -t, --type <type> scan for <type> packages (default is 'deb').\n"
+" -a, --arch <arch> architecture to scan for.\n"
+" -h, --hash <hash-list> only generate hashes for the specified list.\n"
+" -m, --multiversion allow multiple versions of a single package.\n"
+" -e, --extra-override <file>\n"
+" use extra override file.\n"
+" -M, --medium <medium> add X-Medium field for dselect media access "
+"method\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+"Aufruf: %s [<Option> …] <Binärpfad> [<Override-Datei> [<Pfadpräfix>]] > "
+"Packages\n"
+"\n"
+"Optionen:\n"
+" -t, --type <Typ> nach <Typ>-Paketen suchen (standardmäßig »deb«)\n"
+" -a, --arch <Arch> Architektur, nach der gesucht werden soll\n"
+" -h, --hash <Hash-Liste> nur Hashes für die angegebene Liste erzeugen\n"
+" -m, --multiversion mehrere Versionen eines einzelnen Pakets "
+"erlauben\n"
+" -e, --extra-override <Datei>\n"
+" zusätzliche Override-Datei verwenden\n"
+" -M, --medium <Medium> Feld X-Medium für Dselects Medien-"
+"Zugriffsmethode\n"
+" hinzufügen\n"
+" -?, --help diese Hilfemeldung anzeigen\n"
+" --version die Version anzeigen\n"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid " %s (package says %s, not %s)"
+msgstr " %s (laut Paket %s, nicht %s)"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "unconditional maintainer override for %s"
+msgstr "bedingungslose Übersteuerung (»override«) des Betreuers für %s"
+
+#: scripts/dpkg-scanpackages.pl scripts/dpkg-shlibdeps.pl scripts/Dpkg/IPC.pm
+#: scripts/Dpkg/Shlibs/Objdump.pm
+#, perl-format
+msgid "cannot fork for %s"
+msgstr "fork kann für %s nicht ausgeführt werden"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "couldn't parse control information from %s"
+msgstr "Steuerinformationen aus %s konnten nicht ausgewertet werden"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "'dpkg-deb -I %s control' exited with %d, skipping package"
+msgstr "»dpkg-deb -I %s control« wurde mit %d beendet, Paket wird übersprungen"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "no Package field in control file of %s"
+msgstr "Kein »Package«-Feld in Steuerdatei von %s"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid ""
+"package %s (filename %s) is repeat but newer version; used that one and "
+"ignored data from %s!"
+msgstr ""
+"Paket %s (Dateiname %s) ist wiederholt, aber neuere Version; dieses wurde "
+"verwandt und Daten aus %s ignoriert!"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid ""
+"package %s (filename %s) is repeat; ignored that one and using data from %s!"
+msgstr ""
+"Paket %s (Dateiname %s) ist wiederholt; dieses wurde ignoriert, Daten aus %s "
+"werden verwandt!"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "package %s (filename %s) has Filename field!"
+msgstr "Paket %s (Dateiname %s) hat Feld Filename!"
+
+#: scripts/dpkg-scanpackages.pl scripts/dpkg-scansources.pl
+msgid "one to three arguments expected"
+msgstr "ein bis drei Argumente erwartet"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "unsupported checksum '%s'"
+msgstr "nicht unterstützte Prüfsumme »%s«"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "binary path %s not found"
+msgstr "Programmpfad %s nicht gefunden"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "override file %s not found"
+msgstr "Override-Datei %s nicht gefunden"
+
+#: scripts/dpkg-scanpackages.pl
+msgid "failed when writing stdout"
+msgstr "Fehler beim Schreiben nach Stdout"
+
+#: scripts/dpkg-scanpackages.pl
+msgid "couldn't close stdout"
+msgstr "Stdout konnte nicht geschlossen werden"
+
+#: scripts/dpkg-scanpackages.pl
+msgid "Packages with multiple instances but no --multiversion specified:"
+msgstr "Pakete mit mehreren Instanzen aber kein --multiversion angegeben:"
+
+#: scripts/dpkg-scanpackages.pl
+msgid "Packages in override file with incorrect old maintainer value:"
+msgstr "Pakete in Override-Datei mit ungültigem alten Betreuer-Wert:"
+
+#: scripts/dpkg-scanpackages.pl
+msgid "Packages specifying same maintainer as override file:"
+msgstr "Pakete, die die gleichen Betreuer wie die Override-Datei angeben:"
+
+#: scripts/dpkg-scanpackages.pl
+msgid "Packages in archive but missing from override file:"
+msgstr "Pakete im Archiv, die aber in Override-Datei fehlen:"
+
+#: scripts/dpkg-scanpackages.pl
+msgid "Packages in override file but not in archive:"
+msgstr "Pakete in Override-Datei, aber nicht im Archiv:"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "Wrote %s entries to output Packages file."
+msgstr "%s Einträge wurden in Ausgabe-Paketdatei geschrieben."
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid ""
+"Usage: %s [<option>...] <binary-path> [<override-file> [<path-prefix>]] > "
+"Sources\n"
+"\n"
+"Options:\n"
+" -n, --no-sort don't sort by package before outputting.\n"
+" -e, --extra-override <file>\n"
+" use extra override file.\n"
+" -s, --source-override <file>\n"
+" use file for additional source overrides, "
+"default\n"
+" is regular override file with .src appended.\n"
+" --debug turn debugging on.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+"\n"
+"See the man page for the full documentation.\n"
+msgstr ""
+"Aufruf: %s [<Option> …] <Binärpfad> [<Override-Datei> [<Pfadpräfix>]] > "
+"Quellen\n"
+"\n"
+"Optionen:\n"
+" -n, --no-sort vor Ausgabe nicht nach Paketen sortieren\n"
+" -e, --extra-override <Datei>\n"
+" zusätzliche Override-Datei verwenden\n"
+" -s, --source-override <Datei>\n"
+" Datei für zusätzliche Quell-Overrides verwenden,\n"
+" standardmäßig wird an eine reguläre Override-"
+"Datei\n"
+" ».src« angehängt\n"
+" --debug Fehlersuche einschalten\n"
+" -?, --help diese Hilfemeldung anzeigen\n"
+" --version die Version anzeigen\n"
+"\n"
+"Die vollständige Dokumentation finden Sie in der Handbuchseite.\n"
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid "invalid override entry at line %d (%d fields)"
+msgstr "ungültiger Override-Eintrag in Zeile %d (%d Felder)"
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid "ignoring duplicate override entry for %s at line %d"
+msgstr "doppelte Override-Einträge für %s in Zeile %d werden ignoriert"
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid "ignoring override entry for %s, invalid priority %s"
+msgstr "Override-Eintrag für %s wird ignoriert, ungültige Priorität %s"
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid "invalid source override entry at line %d (%d fields)"
+msgstr "ungültiger Quell-Override-Eintrag in Zeile %d (%d Felder)"
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid "ignoring duplicate source override entry for %s at line %d"
+msgstr "doppelte Quell-Override-Einträge für %s in Zeile %d werden ignoriert"
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid "no binary packages specified in %s"
+msgstr "keine Binärpakete in %s angegeben"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "administrative directory '%s' does not exist"
+msgstr "administratives Verzeichnis »%s« existiert nicht"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "unrecognized dependency field '%s'"
+msgstr "Abhängigkeitsfeld »%s« nicht erkannt"
+
+#: scripts/dpkg-shlibdeps.pl
+msgid "need at least one executable"
+msgstr "mindestens ein ausführbares Programm wird benötigt"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid ""
+"cannot find library %s needed by %s (ELF format: '%s' abi: '%s'; RPATH: '%s')"
+msgstr ""
+"Bibliothek %s kann nicht gefunden werden, benötigt von %s (ELF-Format: »%s« "
+"ABI: »%s«; RPATH: »%s«)"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "%s has an unexpected SONAME (%s)"
+msgstr "%s hat einen unerwarteten SONAME (%s)"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid ""
+"no dependency information found for %s (used by %s)\n"
+"Hint: check if the library actually comes from a package."
+msgstr ""
+"keine Abhängigkeitsinformationen für %s (verwendet von %s) gefunden\n"
+"Tipp: Prüfen Sie, ob die Bibliothek tatsächlich aus einem Paket stammt."
+
+#: scripts/dpkg-shlibdeps.pl
+msgid ""
+"binaries to analyze should already be installed in their package's directory"
+msgstr ""
+"zu analysierende Programme sollten bereits in ihrem Paketverzeichnis "
+"installiert sein"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "symbol %s used by %s found in none of the libraries"
+msgstr "Symbol %s, verwendet von %s, in keiner der Bibliotheken gefunden"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid ""
+"%s contains an unresolvable reference to symbol %s: it's probably a plugin"
+msgstr ""
+"%s enthält eine nicht auflösbare Referenz auf Symbol %s: wahrscheinlich eine "
+"Erweiterung"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "%d similar warning has been skipped (use -v to see it)"
+msgid_plural ""
+"%d other similar warnings have been skipped (use -v to see them all)"
+msgstr[0] ""
+"%d andere, ähnliche Warnung wurde übersprungen (verwenden Sie -v, um sie zu "
+"sehen)"
+msgstr[1] ""
+"%d andere, ähnliche Warnungen wurden übersprungen (verwenden Sie -v, um alle "
+"zu sehen)"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid ""
+"%s should not be linked against %s (it uses none of the library's symbols)"
+msgstr ""
+"%s sollte nicht gegen %s gelinkt werden (es verwendet keines der Bibliotheks-"
+"Symbole)"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid ""
+"package could avoid a useless dependency if %s was not linked against %s (it "
+"uses none of the library's symbols)"
+msgid_plural ""
+"package could avoid a useless dependency if %s were not linked against %s "
+"(they use none of the library's symbols)"
+msgstr[0] ""
+"Das Paket könnte eine nutzlose Abhängigkeit vermeiden, falls %s nicht gegen "
+"%s gelinkt wäre (es verwendet keines der Symbole der Bibliothek)."
+msgstr[1] ""
+"Das Paket könnte eine nutzlose Abhängigkeit vermeiden, falls %s nicht gegen "
+"%s gelinkt wären (sie verwenden keine der Symbole der Bibliothek)."
+
+#: scripts/dpkg-shlibdeps.pl
+msgid ""
+"Note: libraries are not searched in other binary packages that do not have "
+"any shlibs or symbols file.\n"
+"To help dpkg-shlibdeps find private libraries, you might need to use -l."
+msgstr ""
+"Hinweis: Bibliotheken werden nicht in anderen Binärpaketen, die keine Shlibs-"
+"oder Symboldatei haben, gesucht.\n"
+"Um dpkg-shlibdeps dabei zu helfen, private Bibliotheken zu finden, könnte es "
+"notwendig sein, -l zu verwenden."
+
+#: scripts/dpkg-shlibdeps.pl
+msgid "cannot continue due to the error above"
+msgid_plural "cannot continue due to the errors listed above"
+msgstr[0] "kann wegen des vorangegangenen Fehlers nicht fortfahren"
+msgstr[1] "kann wegen der vorangegangenen Fehler nicht fortfahren"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "invalid dependency got generated: %s"
+msgstr "ungültige Abhängigkeit wurde erstellt: %s"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "install new varlist file '%s'"
+msgstr "neue Varlist-Datei »%s« installieren"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "Usage: %s [<option>...] <executable>|-e<executable> [<option>...]"
+msgstr "Aufruf: %s [<Option> …] <Programm>|-e<Programm> [<Option> …]"
+
+#: scripts/dpkg-shlibdeps.pl
+msgid ""
+"Positional options (order is significant):\n"
+" <executable> include dependencies for <executable>,\n"
+" -e<executable> (use -e if <executable> starts with '-')\n"
+" -d<dependency-field> next executable(s) set shlibs:<dependency-field>."
+msgstr ""
+"Positionsoptionen (Reihenfolge ist relevant):\n"
+" <Programm> Abhängigkeiten für <Programm> hinzunehmen,\n"
+" -e<Programm> (-e verwenden, falls <Programm> mit »-« beginnt)\n"
+" -d<Abhängigkeitsfeld> nächste(s) Programm(e) setzt/setzen\n"
+" shlibs:<Abängigkeitsfeld>."
+
+#: scripts/dpkg-shlibdeps.pl
+msgid ""
+"Options:\n"
+" -l<library-dir> add directory to private shared library search "
+"list.\n"
+" -p<varname-prefix> set <varname-prefix>:* instead of shlibs:*.\n"
+" -O[<file>] write variable settings to stdout (or <file>).\n"
+" -L<local-shlibs-file> shlibs override file, not debian/shlibs.local.\n"
+" -T<substvars-file> update variables here, not debian/substvars.\n"
+" -t<type> set package type (default is deb).\n"
+" -x<package> exclude package from the generated dependencies.\n"
+" -S<package-build-dir> search needed libraries in the given\n"
+" package build directory first.\n"
+" -I<package-build-dir> ignore needed libraries, shlibs and symbols "
+"files\n"
+" in the given build directory.\n"
+" -v enable verbose mode (can be used multiple "
+"times).\n"
+" --ignore-missing-info don't fail if dependency information can't be "
+"found.\n"
+" --warnings=<value> define set of active warnings (see manual page).\n"
+" --admindir=<directory> change the administrative directory.\n"
+" -?, --help show this help message.\n"
+" --version show the version."
+msgstr ""
+"Optionen:\n"
+" -l<Bibl-Verz> Verzeichnis zur privaten Suchliste für gemeinsam\n"
+" benutzte Bibliotheken hinzufügen\n"
+" -p<Varnamepräfix> <Varnamepräfix>:* setzen statt shlibs:*\n"
+" -O[<Datei>] Variableneinstellungen nach Stdout (oder <Datei>) "
+"ausgeben\n"
+" -L<lokaleshlibsdatei> shlibs-Überschreibe-Datei, nicht\n"
+" debian/shlibs.local\n"
+" -T<substvars-Datei> Variablen hier aktualisieren, nicht in\n"
+" debian/substvars\n"
+" -t<Typ> Pakettyp setzen (standardmäßig deb)\n"
+" -x<Paket> Paket von den erstellten Abhängigkeiten\n"
+" ausschließen\n"
+" -S<PaketBauVerz> benötigte Bibliotheken zuerst im übergebenen\n"
+" Paketbauverzeichnis suchen\n"
+" -I<PaketBauVerz> ignoriert benötigte Bibliotheken, Shlibs und\n"
+" Symboldateien im übergebenen Bauverzeichnis.\n"
+" -v detaillierte Modus aktivieren (kann mehrfach\n"
+" verwandt werden)\n"
+" --ignore-missing-info kein Fehlschlag, falls die "
+"Abhängigkeitsinformation\n"
+" nicht gefunden werden kann\n"
+" --warnings=<Wert> Satz von aktiven Warnungen definieren (siehe\n"
+" Handbuchseite)\n"
+" --admindir=<Verzeichnis> das administrative Verzeichnis ändern\n"
+" -?, --help diese Hilfemeldung anzeigen\n"
+" --version die Version anzeigen"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid ""
+"Dependency fields recognized are:\n"
+" %s\n"
+msgstr ""
+"Unterstützte Abhängigkeitsfelder sind:\n"
+" %s\n"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "can't extract name and version from library name '%s'"
+msgstr ""
+"Name und Version können nicht aus Bibliotheksnamen »%s« entnommen werden"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "unable to open shared libs info file '%s'"
+msgstr ""
+"Informationsdatei für Laufzeitbibliothek »%s« kann nicht geöffnet werden"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "shared libs info file '%s' line %d: bad line '%s'"
+msgstr ""
+"Informationsdatei »%s« der Laufzeitbibliothek, Zeile %d: ungültige Zeile »%s«"
+
+#: scripts/dpkg-shlibdeps.pl scripts/Dpkg/Changelog/Parse.pm
+#: scripts/Dpkg/Checksums.pm
+#, perl-format
+msgid "cannot open file %s"
+msgstr "Datei %s kann nicht geöffnet werden"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid ""
+"$ORIGIN is used in RPATH of %s and the corresponding directory could not be "
+"identified due to lack of DEBIAN sub-directory in the root of package's "
+"build tree"
+msgstr ""
+"$ORIGIN wird in RPATH von %s verwendet und das zugehörige Verzeichnis konnte "
+"nicht identifiziert werden, da das DEBIAN-Unterverzeichnis in der Wurzel des "
+"Paketbaubaums fehlt."
+
+#: scripts/dpkg-shlibdeps.pl
+msgid "diversions involved - output may be incorrect"
+msgstr "Umleitungen beteiligt - Ausgabe könnte nicht korrekt sein"
+
+#: scripts/dpkg-shlibdeps.pl
+msgid "write diversion info to stderr"
+msgstr "Schreiben der Informationen zu Umleitungen auf Stderr"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "unknown output from dpkg --search: '%s'"
+msgstr "unbekannte Ausgabe von »dpkg --search«: »%s«"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "--%s needs a directory"
+msgstr "--%s benötigt ein Verzeichnis"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "cannot stat directory %s"
+msgstr "Verzeichnis %s kann nicht mit stat abgefragt werden"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "directory argument %s is not a directory"
+msgstr "Verzeichnis-Argument %s ist kein Verzeichnis"
+
+#: scripts/dpkg-source.pl scripts/Dpkg/Source/BinaryFiles.pm
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "unable to chdir to '%s'"
+msgstr "Wechsel in Verzeichnis »%s« nicht möglich"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "using options from %s: %s"
+msgstr "Optionen aus %s werden verwendet: %s"
+
+#: scripts/dpkg-source.pl scripts/Dpkg/Compression.pm
+#, perl-format
+msgid "%s is not a supported compression"
+msgstr "%s ist keine unterstützte Kompression"
+
+#: scripts/dpkg-source.pl scripts/Dpkg/Compression.pm
+#, perl-format
+msgid "%s is not a compression level"
+msgstr "%s ist keine Komprimierungsstufe"
+
+#: scripts/dpkg-source.pl
+msgid "-E and -W are deprecated, they are without effect"
+msgstr "-E und -W sind veraltet, sie haben keine Wirkung"
+
+#: scripts/dpkg-source.pl scripts/dpkg-vendor.pl
+msgid "need an action option"
+msgstr "eine Aktions-Option wird benötigt"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "no source format specified in %s, see dpkg-source(1)"
+msgstr "kein Quellformat in %s angegeben, lesen Sie dpkg-source(1)"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "%s doesn't contain any information about the source package"
+msgstr "%s enthält keine Informationen über das Quellpaket"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "'%s' is not a legal architecture string in package '%s'"
+msgstr "»%s« ist keine gültige Architekturzeichenkette in Paket »%s«"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "architecture %s only allowed on its own (list for package %s is '%s')"
+msgstr ""
+"Architektur %s ist nur alleine erlaubt (Liste für Paket %s lautet »%s«)"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "%s doesn't list any binary package"
+msgstr "%s listet kein binäres Paket auf"
+
+#: scripts/dpkg-source.pl
+msgid "building source for a binary-only release"
+msgstr "Quelle für eine rein-binäre Veröffentlichung wird gebaut"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "can't build with source format '%s': %s"
+msgstr "unmöglich, mit Quellformat »%s« zu bauen: %s"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "using source format '%s'"
+msgstr "Quellformat »%s« wird verwendet"
+
+#: scripts/dpkg-source.pl scripts/Dpkg/Source/Package/V1.pm
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Package/V3/Bzr.pm
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+#, perl-format
+msgid "building %s in %s"
+msgstr "%s wird in %s gebaut"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "--%s needs at least one argument, the .dsc"
+msgstr "--%s benötigt mindestens ein Argument, die .dsc"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "--%s takes no more than two arguments"
+msgstr "--%s akzeptiert nicht mehr als zwei Argumente"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "--%s needs the .dsc file as first argument, not a directory"
+msgstr "--%s benötigt die .dsc-Datei als erstes Argument, kein Verzeichnis"
+
+#: scripts/dpkg-source.pl scripts/Dpkg/Source/Package/V1.pm
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Package/V3/Bzr.pm
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+#, perl-format
+msgid "unpack target exists: %s"
+msgstr "Entpackziel existiert: %s"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "%s doesn't contain a valid OpenPGP signature"
+msgstr "%s enthält keine gültige OpenPGP-Signatur"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "extracting unsigned source package (%s)"
+msgstr "unsigniertes Quellpaket wird extrahiert (%s)"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "extracting %s in %s"
+msgstr "%s wird nach %s extrahiert"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "test control %s is not a regular file"
+msgstr "Teststeuerdatei %s ist keine gewöhnliche Datei."
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "%s field contains value %s, but no tests control file %s"
+msgstr "%s-Feld enthält Wert %s, aber keine Teststeuerdatei %s"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "test control %s is missing %s or %s field"
+msgstr "Teststeuerdatei %s fehlt das Feld %s oder %s."
+
+#: scripts/dpkg-source.pl
+msgctxt "source options"
+msgid "<none>"
+msgstr "<keine>"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "Usage: %s [<option>...] <command>"
+msgstr "Aufruf: %s [<Option> …] [<Befehl>]"
+
+#: scripts/dpkg-source.pl
+msgid ""
+"Commands:\n"
+" -x, --extract <filename>.dsc [<output-dir>]\n"
+" extract source package.\n"
+" -b, --build <dir> build source package.\n"
+" --print-format <dir> print the format to be used for the source "
+"package.\n"
+" --before-build <dir> run the corresponding source package format "
+"hook.\n"
+" --after-build <dir> run the corresponding source package format "
+"hook.\n"
+" --commit [<dir> [<patch-name>]]\n"
+" store upstream changes in a new patch."
+msgstr ""
+"Befehle:\n"
+" -x, --extract <Dateiname>.dsc [<Ausgabe-Verz>]\n"
+" Quellpaket extrahieren.\n"
+" -b, --build <Verz> Quellpaket bauen.\n"
+" --print-format <Verz> \n"
+" das für das Quellpaket zu verwendene Format ausgeben.\n"
+" --before-build <Verz> \n"
+" den Hook des entsprechenden Quellpaketformats "
+"ausführen.\n"
+" --after-build <Verz> \n"
+" den Hook des entsprechenden Quellpaketformats "
+"ausführen.\n"
+" --commit [<Verz> [<Patch-Name>]]\n"
+" Änderungen der Originalautoren in einem neuen\n"
+" Patch speichern."
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid ""
+"Build options:\n"
+" -c<control-file> get control info from this file.\n"
+" -l<changelog-file> get per-version info from this file.\n"
+" -F<changelog-format> force changelog format.\n"
+" --format=<source-format> set the format to be used for the source "
+"package.\n"
+" -V<name>=<value> set a substitution variable.\n"
+" -T<substvars-file> read variables here.\n"
+" -D<field>=<value> override or add a .dsc field and value.\n"
+" -U<field> remove a field.\n"
+" -i, --diff-ignore[=<regex>]\n"
+" filter out files to ignore diffs of\n"
+" (defaults to: '%s').\n"
+" -I, --tar-ignore[=<pattern>]\n"
+" filter out files when building tarballs\n"
+" (defaults to: %s).\n"
+" -Z, --compression=<compression>\n"
+" select compression to use (defaults to '%s',\n"
+" supported are: %s).\n"
+" -z, --compression-level=<level>\n"
+" compression level to use (defaults to '%d',\n"
+" supported are: '1'-'9', 'best', 'fast')"
+msgstr ""
+"Bauoptionen:\n"
+" -c<Steuerdatei> Steuerinformationen aus dieser Datei beziehen\n"
+" -l<Changelog-Datei> pro-Version-Informationen aus dieser Datei\n"
+" beziehen\n"
+" -F<Changelog-Format> Changelog-Format erzwingen\n"
+" --format=<Quellformat> setzt das für das Quellpaket zu verwendende "
+"Format\n"
+" -V<Name>=<Wert> eine Substitutionsvariable setzen\n"
+" -T<Substvars-Datei> Variablen hier lesen\n"
+" -D<Feld>=<Wert> ein .dsc-Feld und Wert überschreiben oder "
+"ergänzen\n"
+" -U<Feld> ein Feld entfernen\n"
+" -i, --diff-ignore[=<Regaus>]\n"
+" Dateien herausfiltern, deren Diffs ignoriert "
+"werden\n"
+" (Vorgabe: »%s«)\n"
+" -I, --tar-ignore[=<Muster>]\n"
+" Dateien beim Bauen des Tarballs herausfiltern\n"
+" (Vorgabe: %s)\n"
+" -Z, --compression=<Komprimierung>\n"
+" zu verwendene Kompression auswählen (Vorgabe:\n"
+" »%s«, unterstützt werden: %s)\n"
+" -z, --compression-level=<Stufe>\n"
+" zu verwendende Kompressionsstufe wählen "
+"(Vorgabe:\n"
+" »%d«, unterstützt werden: »1«-»9«, »best«, "
+"»fast«)"
+
+#: scripts/dpkg-source.pl
+msgid ""
+"Extract options:\n"
+" --no-copy don't copy .orig tarballs\n"
+" --no-check don't check signature and checksums before "
+"unpacking\n"
+" --no-overwrite-dir do not overwrite directory on extraction\n"
+" --require-valid-signature abort if the package doesn't have a valid "
+"signature\n"
+" --require-strong-checksums\n"
+" abort if the package contains no strong "
+"checksums\n"
+" --ignore-bad-version allow bad source package versions."
+msgstr ""
+"Extrahierungsoptionen:\n"
+" --no-copy .orig-Tarbälle nicht kopieren\n"
+" --no-check vor dem Entpacken Signaturen und Prüfsummen\n"
+" nicht überprüfen\n"
+" --no-overwrite-dir Verzeichnis beim Entpacken nicht überschreiben\n"
+" --require-valid-signature\n"
+" abbrechen, falls das Paket keine gültige\n"
+" Signatur hat\n"
+" --require-strong-checksums\n"
+" abbrechen, falls das Paket keine "
+"starkenSignaturen\n"
+" enthält\n"
+" --ignore-bad-version fehlerhafte Quellpaketversionen erlauben"
+
+#: scripts/dpkg-source.pl
+msgid ""
+"General options:\n"
+" --threads-max=<threads>\n"
+" use at most <threads> with compressor.\n"
+" -q quiet mode.\n"
+" -?, --help show this help message.\n"
+" --version show the version."
+msgstr ""
+"Allgemeine Optionen:\n"
+" --threads-max=<Threads>\n"
+" maximal <Threads> mit Kompressor verwenden.\n"
+" -q stiller Modus\n"
+" -?, --help diese Hilfemeldung anzeigen\n"
+" --version die Version anzeigen"
+
+#: scripts/dpkg-source.pl
+msgid ""
+"Source format specific build and extract options are available;\n"
+"use --format with --help to see them."
+msgstr ""
+"Quellformat-spezifische Bau- und Entpackoptionen sind verfügbar;\n"
+"verwenden Sie »--format« mit »--help«, um sie anzuzeigen."
+
+#: scripts/dpkg-vendor.pl
+msgid ""
+"Commands:\n"
+" --is <vendor> returns true if current vendor is <vendor>.\n"
+" --derives-from <vendor> returns true if current vendor derives from "
+"<vendor>.\n"
+" --query <field> print the content of the vendor-specific field.\n"
+" --help show this help message.\n"
+" --version show the version."
+msgstr ""
+"Befehle:\n"
+" --is <Lieferant> wahr liefern, falls der aktuelle Lieferant "
+"<Lieferant> ist\n"
+" --derives-from <Lieferant>\n"
+" wahr liefern, falls der aktuelle Lieferant vom "
+"<Lieferant> abgeleitet ist\n"
+" --query <Feld> gibt den Inhalt des Lieferanten-spezifischen Feldes "
+"aus\n"
+" --help diese Hilfenachricht anzeigen\n"
+" --version die Version anzeigen"
+
+#: scripts/dpkg-vendor.pl
+msgid ""
+"Options:\n"
+" --vendor <vendor> assume <vendor> is the current vendor."
+msgstr ""
+"Optionen:\n"
+" --vendor <Lieferant> annehmen, dass <Lieferant> der aktuelle Lieferant "
+"ist."
+
+#: scripts/dpkg-vendor.pl
+#, perl-format
+msgid "vendor %s doesn't exist in %s"
+msgstr "Lieferant %s existiert in %s nicht"
+
+#: scripts/Dpkg/Arch.pm
+msgid ""
+"cannot determine CC system type, falling back to default (native compilation)"
+msgstr ""
+"CC-Systemtyp konnte nicht ermittelt werden, zurück auf Standardeinstellung "
+"(native Übersetzung)"
+
+#: scripts/Dpkg/Arch.pm
+#, perl-format
+msgid "unknown CC system type %s, falling back to default (native compilation)"
+msgstr ""
+"unbekannter CC-Systemtyp %s, zurück auf Standardeinstellung (native "
+"Übersetzung)"
+
+#: scripts/Dpkg/Arch.pm
+#, perl-format
+msgid "'%s' is not a legal architecture in list '%s'"
+msgstr "»%s« ist keine gültige Architektur in der Liste »%s«"
+
+#: scripts/Dpkg/BuildFlags.pm scripts/Dpkg/Compression/FileHandle.pm
+#: scripts/Dpkg/File.pm scripts/Dpkg/Interface/Storable.pm
+#: scripts/Dpkg/Shlibs/Objdump.pm scripts/Dpkg/Source/BinaryFiles.pm
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "cannot read %s"
+msgstr "%s kann nicht gelesen werden"
+
+#: scripts/Dpkg/BuildFlags.pm
+#, perl-format
+msgid "line %d of %s mentions unknown flag %s"
+msgstr "Zeile %d von %s erwähnt unbekannten Schalter %s"
+
+#: scripts/Dpkg/BuildFlags.pm
+#, perl-format
+msgid "line %d of %s is invalid, it has been ignored"
+msgstr "Zeile %d von %s ist ungültig, sie wurde ignoriert."
+
+#: scripts/Dpkg/BuildOptions.pm
+#, perl-format
+msgid "invalid flag in %s: %s"
+msgstr "ungültiger Schalter in %s: %s"
+
+#: scripts/Dpkg/BuildOptions.pm
+#, perl-format
+msgid "unknown %s feature in %s variable: %s"
+msgstr "unbekannte Funktionalität %s in Variable %s: %s"
+
+#: scripts/Dpkg/BuildOptions.pm
+#, perl-format
+msgid "incorrect value in %s option of %s variable: %s"
+msgstr "ungültiger Wert in der Option %s der Variablen %s: %s"
+
+#: scripts/Dpkg/BuildTypes.pm
+#, perl-format
+msgid "cannot combine %s and %s"
+msgstr "%s und %s können nicht kombiniert werden"
+
+#: scripts/Dpkg/BuildTypes.pm
+#, perl-format
+msgid "unknown build type %s"
+msgstr "unbekannter Bautyp %s"
+
+#: scripts/Dpkg/Changelog.pm
+#, perl-format
+msgid ""
+"%s(l%s): %s\n"
+"LINE: %s"
+msgstr ""
+"%s(l%s): %s\n"
+"ZEILE: %s"
+
+#: scripts/Dpkg/Changelog.pm
+#, perl-format
+msgid "%s(l%s): %s"
+msgstr "%s(l%s): %s"
+
+#: scripts/Dpkg/Changelog.pm
+msgid "'offset' without 'count' has no effect"
+msgstr "»offset« ohne »count« hat keinen Effekt"
+
+#: scripts/Dpkg/Changelog.pm
+msgid "you can't combine 'count' or 'offset' with any other range option"
+msgstr ""
+"Sie können »count« oder »offset« nicht mit einer anderen Bereichsoption "
+"kombinieren"
+
+#: scripts/Dpkg/Changelog.pm
+msgid "you can only specify one of 'from' and 'since', using 'since'"
+msgstr ""
+"Sie können nur entweder »from« oder »since« angeben, »since« wird verwendet"
+
+#: scripts/Dpkg/Changelog.pm
+msgid "you can only specify one of 'to' and 'until', using 'until'"
+msgstr ""
+"Sie können nur entweder »to« oder »until« angeben, »until« wird verwendet"
+
+#: scripts/Dpkg/Changelog.pm
+#, perl-format
+msgid "'%s' option specifies non-existing version '%s'"
+msgstr "Option »%s« gibt nicht existierende Version »%s« an"
+
+#: scripts/Dpkg/Changelog.pm
+msgid "use newest entry that is earlier than the one specified"
+msgstr "neuester Eintrag wird verwendet, der älter als der angegebene ist"
+
+#: scripts/Dpkg/Changelog.pm
+msgid "none found, starting from the oldest entry"
+msgstr "keiner gefunden, beim ältesten Eintrag wird begonnen"
+
+#: scripts/Dpkg/Changelog.pm
+msgid "use oldest entry that is later than the one specified"
+msgstr "ältester Eintrag wird verwendet, der neuer als der angegebene ist"
+
+#: scripts/Dpkg/Changelog.pm
+#, perl-format
+msgid "no such entry found, ignoring '%s' parameter '%s'"
+msgstr "kein solcher Eintrag gefunden, »%s«-Parameter »%s« wird ignoriert"
+
+#: scripts/Dpkg/Changelog.pm
+#, perl-format
+msgid "'since' option specifies most recent version '%s', ignoring"
+msgstr "Option »since« gibt die neuste Version »%s« an, wird ignoriert"
+
+#: scripts/Dpkg/Changelog.pm
+#, perl-format
+msgid "'until' option specifies oldest version '%s', ignoring"
+msgstr "Option »until« gibt die älteste Version »%s« an, wird ignoriert"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+msgid "first heading"
+msgstr "erste Überschrift"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+msgid "next heading or end of file"
+msgstr "nächste Überschrift oder Dateiende"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+msgid "start of change data"
+msgstr "Beginn der »change«-Daten"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+msgid "more change data or trailer"
+msgstr "weitere »change«-Daten oder Abspann"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+#, perl-format
+msgid "found start of entry where expected %s"
+msgstr "Beginn eines Eintrags gefunden, wo %s erwartet wurde"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+msgid "badly formatted heading line"
+msgstr "ungültig formatierte Kopfzeile"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+#, perl-format
+msgid "found trailer where expected %s"
+msgstr "Nachspann gefunden, aber %s erwartet"
+
+#: scripts/Dpkg/Changelog/Debian.pm scripts/Dpkg/Changelog/Entry/Debian.pm
+msgid "badly formatted trailer line"
+msgstr "ungültig formatierte Zeile im Nachspann"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+#, perl-format
+msgid "found change data where expected %s"
+msgstr "Änderungsdaten statt des erwarteten %s gefunden"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+#, perl-format
+msgid "found blank line where expected %s"
+msgstr "Leerzeile statt des erwarteten %s gefunden"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+msgid "unrecognized line"
+msgstr "Zeile nicht erkannt"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+#, perl-format
+msgid "found end of file where expected %s"
+msgstr "Dateiende gefunden, wo %s erwartet wurde"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "version '%s' is invalid: %s"
+msgstr "Version »%s« ist ungültig: %s"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "bad key-value after ';': '%s'"
+msgstr "ungültiger Schlüsselwert nach »;«: %s"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "repeated key-value %s"
+msgstr "wiederholter Schlüsselwert %s"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "badly formatted urgency value: %s"
+msgstr "falsch formatierter Dringlichkeitswert: %s"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "bad binary-only value: %s"
+msgstr "ungültiger reiner Binärwert: %s"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "unknown key-value %s"
+msgstr "unbekannter Schlüsselwert %s"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+msgid "the header doesn't match the expected regex"
+msgstr "die Kopfzeile passte nicht auf den erwarteten regulären Ausdruck"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "ignoring invalid week day '%s'"
+msgstr "ungültiger Wochentag »%s« wird ignoriert"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "uses full '%s' instead of abbreviated month name '%s'"
+msgstr ""
+"verwendet den vollständigen »%s« statt des abgekürzten Monatsnamens »%s«"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "invalid abbreviated month name '%s'"
+msgstr "ungültig abgekürzter Monatsname »%s«"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "cannot parse non-conformant date '%s'"
+msgstr "nicht konformes Datum kann nicht ausgewertet werden: »%s«"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+msgid "the trailer doesn't match the expected regex"
+msgstr "der Abspann passte nicht auf den erwarteten regulären Ausdruck"
+
+#: scripts/Dpkg/Changelog/Parse.pm
+#, perl-format
+msgid "cannot seek into file %s"
+msgstr "auf die Datei %s kann nicht mit seek zugegriffen werden"
+
+#: scripts/Dpkg/Changelog/Parse.pm
+#, perl-format
+msgid "changelog format %s is unknown: %s"
+msgstr "unbekanntes Changelog-Format %s: %s"
+
+#: scripts/Dpkg/Changelog/Parse.pm
+#, perl-format
+msgid "changelog format %s is not a Dpkg::Changelog class"
+msgstr "Changelog-Format %s ist keine Dpkg::Changelog-Klasse"
+
+#: scripts/Dpkg/Changelog/Parse.pm
+#, perl-format
+msgid "fatal error occurred while parsing %s"
+msgstr "Fataler Fehler beim Auswerten von %s"
+
+#: scripts/Dpkg/Changelog/Parse.pm
+#, perl-format
+msgid "unknown output format %s"
+msgstr "unbekanntes Ausgabeformat %s"
+
+#: scripts/Dpkg/Checksums.pm
+#, perl-format
+msgid "cannot fstat file %s"
+msgstr "Datei %s kann nicht mit fstat abgefragt werden"
+
+#: scripts/Dpkg/Checksums.pm
+#, perl-format
+msgid "file %s has size %u instead of expected %u"
+msgstr "Datei %s hat Größe %u statt erwarteten %u"
+
+#: scripts/Dpkg/Checksums.pm
+#, perl-format
+msgid "file %s has checksum %s instead of expected %s (algorithm %s)"
+msgstr "Datei %s hat Prüfsumme %s statt der erwarteten %s (Algorithmus %s)"
+
+#: scripts/Dpkg/Checksums.pm
+#, perl-format
+msgid "invalid line in %s checksums string: %s"
+msgstr "ungültige Zeile in %s Prüfsummenzeichenkette: %s"
+
+#: scripts/Dpkg/Checksums.pm
+#, perl-format
+msgid "conflicting checksums '%s' and '%s' for file '%s'"
+msgstr "widersprüchliche Prüfsummen »%s« und »%s« für Datei »%s«"
+
+#: scripts/Dpkg/Checksums.pm
+#, perl-format
+msgid "conflicting file sizes '%u' and '%u' for file '%s'"
+msgstr "widersprüchliche Dateigrößen »%u« und »%u« für Datei »%s«"
+
+#: scripts/Dpkg/Compression.pm
+#, perl-format
+msgid "compression threads %s is not a number"
+msgstr "Komprimierungs-Threads %s ist keine Zahl"
+
+#: scripts/Dpkg/Compression/Process.pm
+#, perl-format
+msgid "%s is not a supported compression method"
+msgstr "%s ist keine unterstützte Kompressionsmethode"
+
+#: scripts/Dpkg/Compression/Process.pm
+msgid "Dpkg::Compression::Process can only start one subprocess at a time"
+msgstr ""
+"Dpkg::Compression::Process kann nur einen Unterprozess auf einmal starten"
+
+#: scripts/Dpkg/Conf.pm
+#, perl-format
+msgid "short option not allowed in %s, line %d"
+msgstr "kurze Option in %s in Zeile %d nicht erlaubt"
+
+#: scripts/Dpkg/Conf.pm
+#, perl-format
+msgid "invalid syntax for option in %s, line %d"
+msgstr "Syntaxfehler für Option in %s in Zeile %d"
+
+#: scripts/Dpkg/Control.pm
+msgid "general section of control info file"
+msgstr "allgemeiner Abschnitt der Steuer-Infodatei"
+
+#: scripts/Dpkg/Control.pm
+msgid "package's section of control info file"
+msgstr "Paketabschnitt der Steuer-Infodatei"
+
+#: scripts/Dpkg/Control.pm
+msgid "parsed version of changelog"
+msgstr "ausgewertete Version des Changelogs"
+
+#: scripts/Dpkg/Control.pm
+msgid "header stanza of copyright file"
+msgstr "»header«-Anteil der Copyright-Datei"
+
+#: scripts/Dpkg/Control.pm
+msgid "files stanza of copyright file"
+msgstr "»files«-Anteil der Copyright-Datei"
+
+#: scripts/Dpkg/Control.pm
+msgid "license stanza of copyright file"
+msgstr "»license«-Anteil der Copyright-Datei"
+
+#: scripts/Dpkg/Control.pm
+msgid "package's tests control file"
+msgstr "Teststeuerdatei des Pakets"
+
+#: scripts/Dpkg/Control.pm
+#, perl-format
+msgid "repository's %s file"
+msgstr "Datei %s des Depots"
+
+#: scripts/Dpkg/Control.pm
+#, perl-format
+msgid "stanza in repository's %s file"
+msgstr "Absatz in Datei %s des Depots"
+
+#: scripts/Dpkg/Control.pm
+#, perl-format
+msgid "%s file"
+msgstr "%s-Datei"
+
+#: scripts/Dpkg/Control.pm
+msgid "control info of a .deb package"
+msgstr "Steuerinfo eines .deb-Pakets"
+
+#: scripts/Dpkg/Control.pm
+msgid "build information file"
+msgstr "Bauinformationsdatei"
+
+#: scripts/Dpkg/Control.pm
+msgid "vendor file"
+msgstr "Lieferanten-(vendor-)Datei"
+
+#: scripts/Dpkg/Control.pm
+msgid "stanza in dpkg's status file"
+msgstr "Absatz in Dpkgs Statusdatei"
+
+#: scripts/Dpkg/Control/FieldsCore.pm
+#, perl-format
+msgid "unknown information field '%s' in input data in %s"
+msgstr "unbekanntes Informationsfeld »%s« in den Eingabedaten in %s"
+
+#: scripts/Dpkg/Control/FieldsCore.pm
+msgid "control information"
+msgstr "Steuerinformation"
+
+#: scripts/Dpkg/Control/HashCore.pm
+#, perl-format
+msgid "syntax error in %s at line %d: %s"
+msgstr "Syntaxfehler in %s in Zeile %d: %s"
+
+#: scripts/Dpkg/Control/HashCore.pm
+msgid "field cannot start with a hyphen"
+msgstr "Feld kann nicht mit einem Bindestrich beginnen"
+
+#: scripts/Dpkg/Control/HashCore.pm
+#, perl-format
+msgid "duplicate field %s found"
+msgstr "doppeltes Feld %s gefunden"
+
+#: scripts/Dpkg/Control/HashCore.pm
+msgid "continued value line not in field"
+msgstr "fortgeführte Wertzeile nicht im Feld"
+
+#: scripts/Dpkg/Control/HashCore.pm
+msgid "expected OpenPGP signature, found end of file after blank line"
+msgstr "OpenPGP-Signatur erwartet, Dateiende nach einer Leerzeile gefunden"
+
+#: scripts/Dpkg/Control/HashCore.pm
+#, perl-format
+msgid "expected OpenPGP signature, found something else '%s'"
+msgstr "OpenPGP-Signatur erwartet, etwas anderes gefunden »%s«"
+
+#: scripts/Dpkg/Control/HashCore.pm
+msgid "unfinished OpenPGP signature"
+msgstr "unvollständige OpenPGP-Signatur"
+
+#: scripts/Dpkg/Control/HashCore.pm
+msgid "OpenPGP signature not allowed here"
+msgstr "OpenPGP-Signatur hier nicht erlaubt"
+
+#: scripts/Dpkg/Control/HashCore.pm
+msgid "line with unknown format (not field-colon-value)"
+msgstr "Zeile mit unbekanntem Format (nicht Feld-Doppelpunkt-Wert)"
+
+#: scripts/Dpkg/Control/HashCore.pm
+msgid "write error on control data"
+msgstr "Schreibfehler bei Steuerdaten (»control data«)"
+
+#: scripts/Dpkg/Control/Info.pm
+#, perl-format
+msgid "first stanza lacks a '%s' field"
+msgstr "im ersten Absatz fehlt ein Feld »%s«"
+
+#: scripts/Dpkg/Control/Info.pm
+#, perl-format
+msgid "stanza lacks the '%s' field"
+msgstr "im Absatz fehlt das Feld »%s«"
+
+#: scripts/Dpkg/Control/Tests/Entry.pm
+#, perl-format
+msgid "stanza lacks either %s or %s fields"
+msgstr "im Absatz fehlen entweder die Felder %s oder %s"
+
+#: scripts/Dpkg/Deps.pm
+#, perl-format
+msgid "can't parse dependency %s"
+msgstr "Abhängigkeit %s kann nicht ausgewertet werden"
+
+#: scripts/Dpkg/Deps.pm
+#, perl-format
+msgid "virtual dependency contains invalid relation: %s"
+msgstr "virtuelle Abhängigkeit enthält ungültige Beziehung: »%s«"
+
+#: scripts/Dpkg/Deps.pm
+msgid "an union dependency can only contain simple dependencies"
+msgstr ""
+"eine Vereinigungsabhängigkeit kann nur einfache Abhängigkeiten enthalten"
+
+#: scripts/Dpkg/Dist/Files.pm
+#, perl-format
+msgid "badly formed file name in files list file, line %d"
+msgstr "ungültiger Dateiname in Dateilistendatei, Zeile %d"
+
+#: scripts/Dpkg/Dist/Files.pm
+#, perl-format
+msgid "badly formed line in files list file, line %d"
+msgstr "ungültige Zeile in Dateilistendatei, Zeile %d"
+
+#: scripts/Dpkg/Dist/Files.pm
+#, perl-format
+msgid "duplicate files list entry for file %s (line %d)"
+msgstr "doppelter Dateilisteneintrag für Datei %s (Zeile %d)"
+
+#: scripts/Dpkg/Dist/Files.pm
+#, perl-format
+msgid "cannot open directory %s"
+msgstr "Verzeichnis %s kann nicht geöffnet werden"
+
+#: scripts/Dpkg/Dist/Files.pm
+#, perl-format
+msgid "invalid filename %s"
+msgstr "ungültiger Dateiname %s"
+
+#: scripts/Dpkg/ErrorHandling.pm
+msgid "info"
+msgstr "Information"
+
+#: scripts/Dpkg/ErrorHandling.pm
+msgid "notice"
+msgstr "Hinweis"
+
+#: scripts/Dpkg/ErrorHandling.pm
+msgid "warning"
+msgstr "Warnung"
+
+#: scripts/Dpkg/ErrorHandling.pm
+msgid "error"
+msgstr "Fehler"
+
+#: scripts/Dpkg/ErrorHandling.pm
+#, perl-format
+msgid "%s subprocess returned exit status %d"
+msgstr "Unterprozess %s lieferte Exitstatus %d"
+
+#: scripts/Dpkg/ErrorHandling.pm
+#, perl-format
+msgid "%s subprocess was killed by signal %d"
+msgstr "Unterprozess %s wurde durch Signal %d getötet"
+
+#: scripts/Dpkg/ErrorHandling.pm
+#, perl-format
+msgid "%s subprocess failed with unknown status code %d"
+msgstr "Unterprozess %s fehlgeschlagen mit unbekanntem Exit-Code %d"
+
+#: scripts/Dpkg/ErrorHandling.pm
+msgid "Use --help for program usage information."
+msgstr "Verwenden Sie --help für Programmbenutzungsinformationen"
+
+#: scripts/Dpkg/File.pm
+#, perl-format
+msgid "cannot create file %s"
+msgstr "Datei %s kann nicht erstellt werden"
+
+#: scripts/Dpkg/IPC.pm
+#, perl-format
+msgid "pipe for %s"
+msgstr "Pipe für %s"
+
+#: scripts/Dpkg/IPC.pm
+#, perl-format
+msgid "chdir to %s"
+msgstr "chdir nach %s"
+
+#: scripts/Dpkg/IPC.pm
+msgid "reopen stdin"
+msgstr "Stdin erneut öffnen"
+
+#: scripts/Dpkg/IPC.pm
+msgid "reopen stdout"
+msgstr "Stdout erneut öffnen"
+
+#: scripts/Dpkg/IPC.pm
+msgid "child process"
+msgstr "Kindprozess"
+
+#: scripts/Dpkg/IPC.pm
+#, perl-format
+msgid "wait for %s"
+msgstr "warten auf %s"
+
+#: scripts/Dpkg/IPC.pm
+#, perl-format
+msgid "%s didn't complete in %d second"
+msgid_plural "%s didn't complete in %d seconds"
+msgstr[0] "%s war nicht innerhalb von %d Sekunde beendet"
+msgstr[1] "%s war nicht innerhalb von %d Sekunden beendet"
+
+#: scripts/Dpkg/Interface/Storable.pm
+msgid "<standard input>"
+msgstr "<Standardeingabe>"
+
+#: scripts/Dpkg/Lock.pm
+msgid "File::FcntlLock not available; using flock which is not NFS-safe"
+msgstr ""
+"File::FcntlLock nicht verfügbar: verwende flock, der für NFS nicht sicher ist"
+
+#: scripts/Dpkg/Lock.pm
+#, perl-format
+msgid "failed to get a write lock on %s"
+msgstr "Fehler beim Erlangen einer Schreibsperre auf %s"
+
+#: scripts/Dpkg/OpenPGP.pm
+#, perl-format
+msgid "unknown OpenPGP api requested %s"
+msgstr "unbekanntes OpenPGP-API erbeten %s"
+
+#: scripts/Dpkg/OpenPGP.pm
+#, perl-format
+msgid "cannot load OpenPGP backend %s"
+msgstr "OpenPGP-Backend %s kann nicht geladen werden"
+
+#: scripts/Dpkg/OpenPGP.pm
+#, perl-format
+msgid "unknown OpenPGP backend %s"
+msgstr "unbekanntes OpenPGP-Backend %s"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "success"
+msgstr "Erfolg"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "no acceptable signature found"
+msgstr "keine akzeptierbaren Signaturen gefunden"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "missing required argument"
+msgstr "benötigtes Argument fehlt"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "unsupported option"
+msgstr "nicht unterstützte Option"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "invalid data type"
+msgstr "ungültiger Datentyp"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "non-text input where text expected"
+msgstr "Eingabe kein Text, obwohl Text erwartet"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "output file already exists"
+msgstr "Ausgabedatei existiert bereits"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "input file does not exist"
+msgstr "Eingabedatei existiert nicht"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "cannot unlock password-protected key"
+msgstr "Passwort-geschützter Schlüssel kann nicht entsperrt werden"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "unsupported subcommand"
+msgstr "nicht unterstützter Unterbefehl"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "key is not signature-capable"
+msgstr "Schlüssel kann nicht zum Signieren verwandt werden"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "missing OpenPGP implementation"
+msgstr "fehlende OpenPGP-Implementierung"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "specified key needs a keystore"
+msgstr "angegebener Schlüssel benötigt einen Schlüsselspeicher"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+#, perl-format
+msgid "error code %d"
+msgstr "Fehler-Code %d"
+
+#: scripts/Dpkg/Package.pm
+msgid "may not be empty string"
+msgstr "darf keine leere Zeichenkette sein"
+
+#: scripts/Dpkg/Package.pm
+#, perl-format
+msgid "character '%s' not allowed"
+msgstr "Zeichen »%s« ist nicht erlaubt"
+
+#: scripts/Dpkg/Package.pm
+msgid "must start with an alphanumeric character"
+msgstr "muss mit einem alphanumerischen Zeichen beginnen"
+
+#: scripts/Dpkg/Path.pm scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "pathname '%s' cannot be canonicalized"
+msgstr "Pfadname „%s“ kann nicht in kanonische Form gebracht werden"
+
+#: scripts/Dpkg/Path.pm scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "pathname '%s' points outside source root (to '%s')"
+msgstr "Pfadname »%s« zeigt außerhalb der Quellwurzel (nach „%s“)"
+
+#: scripts/Dpkg/Shlibs.pm
+msgid ""
+"deprecated use of LD_LIBRARY_PATH with private library directory which "
+"interferes with cross-building, please use -l option instead"
+msgstr ""
+"veraltete Verwendung von LD_LIBRARY_PATH mit privaten Bibliotheksverzeichnis "
+"stört Cross-Bau, bitte verwenden Sie stattdessen die Option »-l«"
+
+#: scripts/Dpkg/Shlibs.pm scripts/Dpkg/Shlibs/Objdump.pm
+#, perl-format
+msgid "unknown executable format in file '%s'"
+msgstr "unbekanntes Programmformat in Datei »%s«"
+
+#: scripts/Dpkg/Shlibs/Objdump.pm
+#, perl-format
+msgid "couldn't parse dynamic relocation record: %s"
+msgstr ""
+"dynamischer Adressverschiebungseintrag konnte nicht ausgewertet werden: %s"
+
+#: scripts/Dpkg/Shlibs/Objdump.pm
+#, perl-format
+msgid "couldn't parse dynamic symbol definition: %s"
+msgstr "Definition der dynamischen Symbole konnte nicht ausgewertet werden: %s"
+
+#: scripts/Dpkg/Shlibs/Symbol.pm
+#, perl-format
+msgid "symbol name unspecified: %s"
+msgstr "Symbolname nicht angegeben: %s"
+
+#: scripts/Dpkg/Shlibs/Symbol.pm
+#, perl-format
+msgid "symver tag with versioned symbol will not match: %s"
+msgstr "symver-Markierung mit versionierten Symbolen wird nicht passen: %s"
+
+#: scripts/Dpkg/Shlibs/Symbol.pm
+#, perl-format
+msgid "you can't use symver tag to catch unversioned symbols: %s"
+msgstr ""
+"Sie können die Markierung symver nicht zum Abfangen unversionierter Symbole "
+"verwenden: %s"
+
+#: scripts/Dpkg/Shlibs/SymbolFile.pm
+#, perl-format
+msgid "symbol information must be preceded by a header (file %s, line %s)"
+msgstr ""
+"Symbol-Informationen müssen durch eine Kopfzeile eingeleitet werden (Datei "
+"%s, Zeile %s)."
+
+#: scripts/Dpkg/Shlibs/SymbolFile.pm
+#, perl-format
+msgid "failed to parse line in %s: %s"
+msgstr "Zeile in %s konnte nicht ausgewertet werden: %s"
+
+#: scripts/Dpkg/Shlibs/SymbolFile.pm
+#, perl-format
+msgid "failed to parse a line in %s: %s"
+msgstr "eine Zeile in %s konnte nicht ausgewertet werden: %s"
+
+#: scripts/Dpkg/Shlibs/SymbolFile.pm
+#, perl-format
+msgid "tried to merge the same object (%s) twice in a symfile"
+msgstr ""
+"Es wurde versucht, das gleiche Objekt (%s) zweimal in einer Sym-Datei "
+"zusammenzuführen."
+
+#: scripts/Dpkg/Shlibs/SymbolFile.pm
+msgid "cannot merge symbols from objects without SONAME"
+msgstr "Symbole von Objekten ohne SONAME können nicht zusammengeführt werden."
+
+#: scripts/Dpkg/Source/Archive.pm
+msgid "write on tar input"
+msgstr "schreiben auf Tar-Eingabe"
+
+#: scripts/Dpkg/Source/Archive.pm
+msgid "close on tar input"
+msgstr "schließen auf Tar-Eingabe"
+
+#: scripts/Dpkg/Source/Archive.pm scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot create directory %s"
+msgstr "Verzeichnis %s kann nicht angelegt werden"
+
+#: scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "cannot get source pathname %s metadata"
+msgstr "Metadaten des Quellpfadnamens %s können nicht ermittelt werden"
+
+#: scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "cannot get target pathname %s metadata"
+msgstr "Metadaten des Zielpfadnamens %s können nicht ermittelt werden"
+
+#: scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "cannot change directory %s mode"
+msgstr "Verzeichnismodus von %s kann nicht geändert werden"
+
+#: scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "cannot change directory %s times"
+msgstr "Verzeichniszeit von %s kann nicht geändert werden"
+
+#: scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "cannot remove destination directory %s"
+msgstr "Zielverzeichnis %s kann nicht entfernt werden"
+
+#: scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "cannot remove destination file %s"
+msgstr "Zieldatei %s kann nicht entfernt werden"
+
+#: scripts/Dpkg/Source/Archive.pm scripts/Dpkg/Source/Package.pm
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "cannot opendir %s"
+msgstr "Verzeichnis %s kann nicht geöffnet werden"
+
+#: scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "unable to rename %s to %s"
+msgstr "%s kann nicht in %s umbenannt werden"
+
+#: scripts/Dpkg/Source/Functions.pm
+#, perl-format
+msgid "cannot stat directory %s (before removal)"
+msgstr "Verzeichnis %s kann nicht mit stat abgefragt werden (vor Entfernung)"
+
+#: scripts/Dpkg/Source/Functions.pm
+#, perl-format
+msgid "unable to check for removal of directory '%s'"
+msgstr "es kann nicht auf Entfernung des Verzeichnisses »%s« überprüft werden"
+
+#: scripts/Dpkg/Source/Functions.pm
+#, perl-format
+msgid "rm -rf failed to remove '%s'"
+msgstr "Entfernen von »%s« durch rm -rf fehlgeschlagen"
+
+#: scripts/Dpkg/Source/Functions.pm scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot change timestamp for %s"
+msgstr "Zeitstempel für %s kann nicht geändert werden"
+
+#: scripts/Dpkg/Source/Functions.pm
+#, perl-format
+msgid "cannot read timestamp from %s"
+msgstr "Zeitstempel für %s kann nicht gelesen werden"
+
+#: scripts/Dpkg/Source/Functions.pm
+#, perl-format
+msgid "cannot open file %s for binary detection"
+msgstr "kann Datei %s nicht zur Binärerkennung öffnen"
+
+#: scripts/Dpkg/Source/BinaryFiles.pm
+#, perl-format
+msgid "adding %s to %s"
+msgstr "%s wird zu %s hinzugefügt"
+
+#: scripts/Dpkg/Source/BinaryFiles.pm
+#, perl-format
+msgid "unwanted binary file: %s"
+msgstr "unerwünschte Binärdatei: %s"
+
+#: scripts/Dpkg/Source/BinaryFiles.pm
+#, perl-format
+msgid ""
+"detected %d unwanted binary file (add it in debian/source/include-binaries "
+"to allow its inclusion)."
+msgid_plural ""
+"detected %d unwanted binary files (add them in debian/source/include-"
+"binaries to allow their inclusion)."
+msgstr[0] ""
+"erkannte %d unerwünschte Binärdatei (fügen Sie sie zu debian/source/include-"
+"binaries hinzu, um ihre Aufnahme zu erlauben)."
+msgstr[1] ""
+"erkannte %d unerwünschte Binärdateien (fügen Sie sie zu debian/source/"
+"include-binaries hinzu, um ihre Aufnahme zu erlauben)."
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "%s is not the name of a file"
+msgstr "%s ist nicht der Name einer Datei"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "missing critical source control field %s"
+msgstr "kritisches Quellsteuerfeld %s fehlt"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "source package format '%s' is not supported: %s"
+msgstr "Quellpaketformat »%s« wird nicht unterstützt: %s"
+
+#: scripts/Dpkg/Source/Package.pm
+msgid "source package uses only weak checksums"
+msgstr "Quellpaket verwendet nur schwache Prüfsummen"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "%s and %s fields are required to compute the source basename"
+msgstr ""
+"Die Felder %s und %s werden benötigt, um den »basename« der Quelle zu "
+"ermitteln"
+
+#: scripts/Dpkg/Source/Package.pm
+msgid "upstream tarball signatures but no upstream signing key"
+msgstr ""
+"Tarball-Signatur der Originalautoren aber kein Signaturschlüssel der "
+"Originalautoren"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "verifying %s"
+msgstr "%s wird überprüft"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "cannot verify upstream tarball signature for %s: %s"
+msgstr ""
+"Tarball-Signatur der Originalautoren für %s kann nicht überprüft werden: %s"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "cannot verify inline signature for %s: %s"
+msgstr "eingebettete Signatur für %s kann nicht überprüft werden: %s"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "%s is not a valid option for %s"
+msgstr "%s ist keine gültige Option für %s."
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "cannot copy %s to %s"
+msgstr "%s kann nicht nach %s kopiert werden"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "%s does not exist"
+msgstr "%s existiert nicht."
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "cannot make %s executable"
+msgstr "Programm %s kann nicht ausführbar gemacht werden."
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "%s is not a plain file"
+msgstr "%s ist keine gewöhnliche Datei."
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "'%s' is not supported by the source format '%s'"
+msgstr "»%s« wird vom Quellformat »%s« nicht unterstützt."
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "auto select original source"
+msgstr "automatisch ursprüngliche Quelle auswählen"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "use packed original source (unpack and keep)"
+msgstr "gepackte ursprüngliche Quelle verwenden (entpacken und behalten)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "use packed original source (unpack and remove)"
+msgstr "gepackte ursprüngliche Quelle verwenden (entpacken und entfernen)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "use unpacked original source (pack and keep)"
+msgstr "entpackte ursprüngliche Quelle verwenden (packen und behalten)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "use unpacked original source (pack and remove)"
+msgstr "entpackte ursprüngliche Quelle verwenden (packen und entfernen)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "trust packed and unpacked original sources are same"
+msgstr "vertrauen, dass ent- und gepackte ursprüngliche Quelle identisch sind"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "there is no diff, do main tarfile only"
+msgstr "Es gibt kein Diff, nur Haupt-Tar-Datei behandeln"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "like -sa, -sk, -sp, -su, -sr but may overwrite"
+msgstr "wie -sa, -sk, -sp, -su, -sr, kann aber überschreiben"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+msgid "abort if generated diff has upstream files changes"
+msgstr "Abbruch, falls erstellter Diff Änderungen der Originalautoren enthält"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "leave original source packed in current directory"
+msgstr "ursprüngliche Quelle im aktuellen Verzeichnis gepackt lassen"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "do not copy original source to current directory"
+msgstr "ursprüngliche Quelle nicht ins aktuelle Verzeichnis kopieren"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "unpack original source tree too"
+msgstr "ursprüngliche Quellbaum entpacken nach"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "do not apply debian diff to upstream sources"
+msgstr "Debian-Diff nicht auf die Quelle der Originalautoren anwenden"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "-s%s option overrides earlier -s%s option"
+msgstr "Option -s%s überschreibt vorhergehende Option -s%s."
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "source handling style -s%s not allowed with -x"
+msgstr "Quellbearbeitungsstil -s%s mit -x nicht erlaubt"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "multiple tarfiles in v1.0 source package"
+msgstr "mehrere Tar-Dateien in v1.0-Quellpaket"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "unrecognized file for a %s source package: %s"
+msgstr "unerkannte Datei für ein %s-Quellpaket: %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V3/Native.pm
+msgid "no tarfile in Files field"
+msgstr "keine Tar-Datei im Feld Files"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "native package with .orig.tar"
+msgstr "natives Paket mit .orig.tar"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "unable to rename '%s' to '%s'"
+msgstr "»%s« kann nicht in »%s« umbenannt werden"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+#, perl-format
+msgid "unpacking %s"
+msgstr "%s wird entpackt"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "unable to keep orig directory (already exists)"
+msgstr "Originalverzeichnis kann nicht beibehalten werden (existiert bereits)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "failed to rename newly-extracted %s to %s"
+msgstr "Fehler beim Umbenennen des frisch extrahierten %s in %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "failed to rename saved %s to %s"
+msgstr "Fehler beim Umbenennen des gesicherten %s in %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "applying %s"
+msgstr "%s wird angewandt"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "upstream files that have been modified: %s"
+msgstr "Dateien der Originalautoren, die verändert wurden: %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "only supports gzip compression"
+msgstr "nur Gzip-Komprimierung wird unterstützt"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid ""
+"-b takes at most a directory and an orig source argument (with v1.0 source "
+"package)"
+msgstr ""
+"höchstens ein Verzeichnis und eine Originalquelle wird bei -b als Argument "
+"akzeptiert (mit v1.0-Quellpaket)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "source handling style -s%s not allowed with -b"
+msgstr "Bearbeitungsstil -s%s der Quelle mit -b nicht erlaubt"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "packed orig '%s' exists but is not a plain file"
+msgstr "gepackte orig. »%s« existiert, ist aber keine gewöhnliche Datei"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "cannot stat orig argument %s"
+msgstr "Originalargument %s kann nicht mit stat abgefragt werden"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid ""
+"orig argument is unpacked but source handling style -s%s calls for packed (."
+"orig.tar.<ext>)"
+msgstr ""
+"Originalargument ist ungepackt, aber bei Quellenhandhabungsstil -s%s wird "
+"ein gepacktes Argument verlangt (.orig.tar.<endung>)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid ""
+"orig argument is packed but source handling style -s%s calls for unpacked (."
+"orig/)"
+msgstr ""
+"Originalargument ist gepackt, aber bei Quellenhandhabungsstil -s%s wird ein "
+"ungepacktes Argument verlangt (.orig/)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "orig argument %s is not a plain file or directory"
+msgstr "Originalargument %s ist keine gewöhnliche Datei oder Verzeichnis"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid ""
+"orig argument is empty (means no orig, no diff) but source handling style -"
+"s%s wants something"
+msgstr ""
+"Originalargument ist leer (bedeutet kein Orig., kein Diff), aber bei "
+"Quellenhandhabungsstil -s%s wird etwas verlangt"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "unpacked orig '%s' exists but is not a directory"
+msgstr "entpacktes Orig. »%s« existiert, ist aber kein Verzeichnis"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "unable to stat putative unpacked orig '%s'"
+msgstr ""
+"unmöglich, das vermeintlich ausgepackte Original »%s« mit stat abzufragen"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V3/Quilt.pm
+msgid "non-native package version does not contain a revision"
+msgstr "nichtnative Paketversion enthält keine Revision"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V3/Native.pm
+msgid "native package version may not have a revision"
+msgstr "native Paketversion darf keine Revision haben"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "source directory '%s' is not <sourcepackage>-<upstreamversion> '%s'"
+msgstr ""
+"Quellverzeichnis »%s« lautet nicht <Quellpaket>-<Ursprungsversion> »%s«"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid ".orig directory name %s is not <package>-<upstreamversion> (wanted %s)"
+msgstr ""
+".orig-Verzeichnisname %s ist nicht <Paket>-<Ursprungsversion> (%s erwünscht)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid ""
+".orig.tar name %s is not <package>_<upstreamversion>.orig.tar (wanted %s)"
+msgstr ""
+".orig.tar-Name %s lautet nicht <Paket>_<Ursprungsversion>.orig.tar (%s "
+"erwünscht)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid ""
+"tarfile '%s' already exists, not overwriting, giving up; use -sU or -sR to "
+"override"
+msgstr ""
+"Tar-Datei »%s« existiert bereits, wird nicht überschrieben, Abbruch; "
+"verwenden Sie -sU oder -sR zum Erzwingen"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "unable to check for existence of '%s'"
+msgstr "Existenz von »%s« kann nicht überprüft werden"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V3/Native.pm
+#, perl-format
+msgid "unable to rename '%s' (newly created) to '%s'"
+msgstr "»%s« (neu angelegt) konnte nicht in »%s« umbenannt werden"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+#: scripts/Dpkg/Source/Package/V3/Quilt.pm scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "unable to change permission of '%s'"
+msgstr "Berechtigung von »%s« kann nicht geändert werden"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "building %s using existing %s"
+msgstr "%s wird unter Benutzung des existierenden %s gebaut"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+msgid "upstream signing key but no upstream tarball signature"
+msgstr ""
+"Signaturschlüssel der Originalautoren aber keine Tarball-Signatur der "
+"Originalautoren"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid ""
+"orig directory '%s' already exists, not overwriting, giving up; use -sA, -sK "
+"or -sP to override"
+msgstr ""
+"Originalverzeichnis »%s« existiert bereits, wird nicht überschrieben, "
+"Abbruch; verwenden Sie -sA, -sK oder -sP zum Erzwingen."
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "unable to check for existence of orig directory '%s'"
+msgstr "Existenz des Originalverzeichnisses »%s« kann nicht überprüft werden"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "the diff modifies the following upstream files: %s"
+msgstr ""
+"durch den Diff werden die folgenden Dateien der Originalautoren verändert: %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid ""
+"use the '3.0 (quilt)' format to have separate and documented changes to "
+"upstream files, see dpkg-source(1)"
+msgstr ""
+"verwenden Sie das Format »3.0 (quilt)«, um separate und dokumentierte "
+"Änderungen an den Dateien der Originalautoren zu erhalten, siehe dpkg-"
+"source(1)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "aborting due to --abort-on-upstream-changes"
+msgstr "Abbruch aufgrund von --abort-on-upstream-changes"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+msgid "unrepresentable changes to source"
+msgstr "nicht darstellbare Änderungen an der Quelle"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "include removed files in the patch"
+msgstr "entfernte Dateien in den Patch aufnehmen"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "include timestamp in the patch"
+msgstr "Zeitstempel in den Patch aufnehmen"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "include binary files in the tarball"
+msgstr "binäre Dateien in den Tarball aufnehmen"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "do not prepare build tree by applying patches"
+msgstr "Bau-Baum nicht durch Anwenden der Patches vorbereiten"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "do not unapply patches if previously applied"
+msgstr "Patches nicht entfernen, falls sie bereits angewandt wurden"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "unapply patches if previously applied (default)"
+msgstr "Patches entfernen, falls sie bereits angewandt wurden (Vorgabe)"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "create an empty original tarball if missing"
+msgstr "einen leeren ursprünglichen Tarball erstellen, falls er fehlt"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "record generated patches, instead of aborting"
+msgstr "angewandte Patches aufzeichnen statt abzubrechen"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "do not extract debian tarball into upstream sources"
+msgstr "Debian-Tarball nicht in die Quellen der Originalautoren extrahieren"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "do not apply patches at the end of the extraction"
+msgstr "Patches nicht am Ende der Extraktion anwenden"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "duplicate files in %s source package: %s"
+msgstr "doppelte Dateien in Quellpaket %s: %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "missing orig.tar or debian.tar file in v2.0 source package"
+msgstr "fehlende orig.tar- oder debian.tar-Datei in v2.0-Quellpaket"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "mismatched orig.tar %s for signature %s in source package"
+msgstr "unpassende orig.tar %s im Quellpaket für Signatur %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "missing addon orig.tar for signature %s in source package"
+msgstr "fehlendes ergänzendes orig.tar im Quellpaket für Signatur %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "mismatched addon orig.tar %s for signature %s in source package"
+msgstr "unpassendes ergänzendes orig.tar %s im Quellpaket für Signatur %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "required removal of '%s' installed by original tarball"
+msgstr "erforderliche Entfernung von »%s«, installiert durch Original-Tarball"
+
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "unapplying %s"
+msgstr "Patch %s wird entfernt"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "no upstream tarball found at %s"
+msgstr "unter %s wurde kein Tarball der Originalautoren gefunden"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "patches are not applied, applying them now"
+msgstr "Patches sind nicht angewandt, dies wird nun erledigt"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "several orig.tar files found (%s and %s) but only one is allowed"
+msgstr ""
+"mehrere orig.tar-Dateien gefunden (%s und %s), aber nur eine ist erlaubt"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "copy of the debian directory"
+msgstr "Kopie des debian-Verzeichnisses"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "local changes detected, the modified files are:"
+msgstr "lokale Änderungen erkannt, die veränderten Dateien sind:"
+
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Package/V3/Bzr.pm
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+#, perl-format
+msgid "-b takes only one parameter with format '%s'"
+msgstr "-b akzeptiert nur einen Parameter mit dem Format »%s«"
+
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot represent change to %s: %s"
+msgstr "Änderung in %s kann nicht dargestellt werden: %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Patch.pm
+msgid "binary file contents changed"
+msgstr "Inhalt der Binärdatei hat sich geändert"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid ""
+"add %s in debian/source/include-binaries if you want to store the modified "
+"binary in the debian tarball"
+msgstr ""
+"fügen Sie %s zu debian/source/include-binaries hinzu, falls Sie das "
+"veränderte Programm im Debian-Tarball speichern möchten."
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid ""
+"Hint: make sure the version in debian/changelog matches the unpacked source "
+"tree"
+msgstr ""
+"Tipp: Die Version in debian/changelog muss mit dem entpackten Quellbaum "
+"übereinstimmen"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "you can integrate the local changes with %s"
+msgstr "Sie können die lokalen Änderungen mit %s integrieren"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "aborting due to unexpected upstream changes, see %s"
+msgstr ""
+"Abbruch aufgrund unerwarteter Änderungen in den Originalquellen, siehe %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "local changes have been recorded in a new patch: %s"
+msgstr "lokale Änderungen wurden in einem neuen Patch aufgezeichnet: %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Package/V3/Quilt.pm
+#, perl-format
+msgid "cannot remove %s"
+msgstr "%s kann nicht entfernt werden"
+
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Package/V3/Quilt.pm
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "failed to copy %s to %s"
+msgstr "Fehler beim Kopieren von %s nach %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "cannot register changes in %s, this patch already exists"
+msgstr ""
+"Änderungen in %s können nicht registriert werden, Patch existiert bereits"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "patch file '%s' doesn't exist"
+msgstr "Patch-Datei »%s« existiert nicht"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "there are no local changes to record"
+msgstr "Es gibt keine aufzuzeichnenden lokalen Änderungen"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "Enter the desired patch name: "
+msgstr "Bitte geben Sie den gewünschten Namen für den Patch ein: "
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "no patch name given; cannot proceed"
+msgstr "Kein Patch-Name angegeben; es kann nicht fortgefahren werden"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "cannot find an editor"
+msgstr "Es kann kein Editor gefunden werden"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+msgid "cannot unpack bzr-format source package because bzr is not in the PATH"
+msgstr ""
+"Bzr-formatiertes Quellpaket kann nicht entpackt werden, da Bzr nicht im PATH "
+"ist"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+#, perl-format
+msgid ""
+"source directory is not the top directory of a bzr repository (%s/.bzr not "
+"present), but Format bzr was specified"
+msgstr ""
+"Quellverzeichnis ist nicht das oberste Verzeichnis eines bzr-Depots (%s/.bzr "
+"ist nicht vorhanden), aber das Format bzr wurde angegeben"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+#, perl-format
+msgid "%s is a symlink"
+msgstr "%s ist ein Symlink"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+#, perl-format
+msgid "%s is a symlink to outside %s"
+msgstr "%s ist ein Symlink zum außerhalb befindlichen %s"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+msgid "doesn't contain a bzr repository"
+msgstr "kein bzr-Depot enthalten"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+msgid "bzr status exited nonzero"
+msgstr "bzr mit nicht-Null-Status beendet"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "uncommitted, not-ignored changes in working directory: %s"
+msgstr ""
+"noch nicht übergebene, nicht ignorierte Änderungen im Arbeitsverzeichnis: %s"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+msgid "format v3.0 (bzr) uses only one source file"
+msgstr "Format v3.0 (bzr) verwendet nur eine Quelldatei"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+#, perl-format
+msgid "expected %s, got %s"
+msgstr "%s erwartet, %s bekommen"
+
+#: scripts/Dpkg/Source/Package/V3/Custom.pm
+msgid "define the format of the generated source package"
+msgstr "Definieren Sie das Format des erstellten Quellpakets"
+
+#: scripts/Dpkg/Source/Package/V3/Custom.pm
+msgid "Format '3.0 (custom)' is only used to create source packages"
+msgstr "Format »3.0 (custom)« wird nur zum Anlegen von Quellpaketen verwandt"
+
+#: scripts/Dpkg/Source/Package/V3/Custom.pm
+msgid "no files indicated on command line"
+msgstr "keine Dateien auf der Befehlszeile angegeben"
+
+#: scripts/Dpkg/Source/Package/V3/Custom.pm
+msgid "--target-format option is missing"
+msgstr "Option --target-format fehlt"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "cannot unpack git-format source package because git is not in the PATH"
+msgstr ""
+"Git-formatiertes Quellpaket kann nicht entpackt werden, da Git nicht im PATH "
+"ist"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid ""
+"source directory is not the top directory of a git repository (%s/.git not "
+"present), but Format git was specified"
+msgstr ""
+"Quellverzeichnis ist nicht das oberste Verzeichnis eines Git-Depots (%s/.git "
+"ist nicht vorhanden), aber das Format git wurde angegeben"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "git repository %s uses submodules; this is not yet supported"
+msgstr "Git-Depot %s verwendet Submodule; dies wird noch nicht unterstützt."
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "specify a git <ref> to include in the git bundle"
+msgstr ""
+"geben Sie ein Git <ref> an, das in das Git-Bündel aufgenommen werden soll"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "create a shallow clone with <number> depth"
+msgstr "einen seichten (shallow) Klon mit Tiefe <number> erstellen"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "doesn't contain a git repository"
+msgstr "kein Git-Depot enthalten"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "git ls-files exited nonzero"
+msgstr "git ls-files mit nicht-Null-Status beendet"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "creating shallow clone with depth %s"
+msgstr "ein seichter (shallow) Klon mit Tiefe %s wird eingerichtet"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "bundling: %s"
+msgstr "Bündeln: %s"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "format v3.0 (git) uses only one .git file"
+msgstr "Format v3.0 (git) verwendet nur eine .git-Datei"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "format v3.0 (git) uses only one .gitshallow file"
+msgstr "Format v3.0 (git) verwendet nur eine .gitshallow-Datei"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "format v3.0 (git) unknown file: %s"
+msgstr "Format v3.0 (git) unbekannte Datei: %s"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "format v3.0 (git) expected %s"
+msgstr "Format v3.0 (git) erwartete %s"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "cloning %s"
+msgstr "%s wird geklont"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "setting up shallow clone"
+msgstr "ein seichter (shallow) Klon wird eingerichtet"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "setting remote %s to %s"
+msgstr "ferner %s wird auf %s gesetzt"
+
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+msgid "multiple tarfiles in native source package"
+msgstr "mehrere Tar-Dateien in nativem Quellpaket"
+
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+#, perl-format
+msgid "unrecognized file for a native source package: %s"
+msgstr "unerkannte Datei für natives Quellpaket: %s"
+
+#: scripts/Dpkg/Source/Package/V3/Quilt.pm
+msgid "use a single debianization patch"
+msgstr "einen einzigen Debianisierungs-Patch verwenden"
+
+#: scripts/Dpkg/Source/Package/V3/Quilt.pm
+msgid "accept quilt metadata <version> even if unknown"
+msgstr "Quilt-Metadaten <Version> akzeptieren, selbst falls unbekannt"
+
+#: scripts/Dpkg/Source/Package/V3/Quilt.pm
+#, perl-format
+msgid "can't create symlink %s"
+msgstr "Symlink %s kann nicht angelegt werden"
+
+#: scripts/Dpkg/Source/Package/V3/Quilt.pm
+#, perl-format
+msgid "using patch list from %s"
+msgstr "Patchliste aus %s wird verwendet"
+
+#: scripts/Dpkg/Source/Package/V3/Quilt.pm
+#, perl-format
+msgid "unsupported version of the quilt metadata: %s"
+msgstr "nicht unterstützte Version der Quilt-Metadaten: %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "file %s has no final newline (either original or modified version)"
+msgstr ""
+"Datei %s enthält keinen abschließenden Zeilenumbruch (entweder Original oder "
+"modifizierte Version)"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "unknown line from diff -u on %s: '%s'"
+msgstr "unbekannte Zeile von diff -u auf %s: »%s«"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "failed to write"
+msgstr "Schreiben fehlgeschlagen"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff on %s"
+msgstr "Diff auf %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot stat file %s"
+msgstr "Datei %s kann nicht mit stat abgefragt werden"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot read link %s"
+msgstr "Link %s kann nicht gelesen werden"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "device or socket is not allowed"
+msgstr "Gerät oder Socket ist nicht erlaubt"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "unknown file type"
+msgstr "unbekannter Dateityp"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "ignoring deletion of file %s"
+msgstr "Löschen der Datei %s wird ignoriert"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "ignoring deletion of file %s, use --include-removal to override"
+msgstr ""
+"Löschen der Datei %s wird ignoriert, verwenden Sie --include-removal zum "
+"außer Kraft setzen"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "ignoring deletion of directory %s"
+msgstr "Löschen des Verzeichnisses %s wird ignoriert"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "ignoring deletion of symlink %s"
+msgstr "Löschen des Symlinks %s wird ignoriert"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "newly created empty file '%s' will not be represented in diff"
+msgstr "neu angelegte leere Datei »%s« wird im Diff nicht dargestellt werden"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "executable mode %04o of '%s' will not be represented in diff"
+msgstr "ausführbarer Modus %04o von »%s« wird im Diff nicht dargestellt werden"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "special mode %04o of '%s' will not be represented in diff"
+msgstr "besonderer Modus %04o von »%s« wird im Diff nicht dargestellt werden"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot represent change to %s:"
+msgstr "Änderung in %s kann nicht dargestellt werden:"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid " new version is %s"
+msgstr " neue Version ist %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid " old version is %s"
+msgstr " alte Version ist %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff %s patches file with C-style encoded filename"
+msgstr "Diff %s patcht Datei C-artig kodiertem Dateinamen"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "expected ^--- in line %d of diff '%s'"
+msgstr "^--- wurde in Zeile %d des Diffs »%s« erwartet"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff '%s' patches file with name ending in .dpkg-orig"
+msgstr "Diff »%s« patcht Datei, deren Namen auf .dpkg-orig endet"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff '%s' finishes in middle of ---/+++ (line %d)"
+msgstr "Diff »%s« endet in der Mitte von ---/+++ (Zeile %d)"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "line after --- isn't as expected in diff '%s' (line %d)"
+msgstr "Zeile nach --- ist im Diff »%s« (Zeile %d) nicht wie erwartet"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "none of the filenames in ---/+++ are valid in diff '%s' (line %d)"
+msgstr "keine der Dateinamen in ---/+++ ist im Diff »%s« (Zeile %d) gültig"
+
+#: scripts/Dpkg/Source/Patch.pm scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "%s contains an insecure path: %s"
+msgstr "%s enthält einen unsicheren Pfad: %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff %s modifies file %s through a symlink: %s"
+msgstr "Diff %s verändert Datei %s über einen Symlink: %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "original and modified files are /dev/null in diff '%s' (line %d)"
+msgstr ""
+"ursprüngliche und geänderte Dateien sind im Diff »%s« /dev/null (Zeile %d)"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "file removal without proper filename in diff '%s' (line %d)"
+msgstr "Datei-Entfernung ohne passenden Dateinamen im Diff »%s« (Zeile %d)"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff %s removes a non-existing file %s (line %d)"
+msgstr "Diff %s entfernt eine nicht existierende Datei %s (Zeile %d)"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff '%s' patches something which is not a plain file"
+msgstr "Diff »%s« patcht etwas, das keine gewöhnliche Datei ist"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid ""
+"diff '%s' patches files multiple times; split the diff in multiple files or "
+"merge the hunks into a single one"
+msgstr ""
+"Diff »%s« patcht Dateien mehrfach; zerlegen Sie das Diff in mehrere Dateien "
+"oder fügen Sie die Stücke in ein Einzelnes zusammen"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff '%s' patches file %s more than once"
+msgstr "Diff »%s« patcht Datei %s mehr als einmal"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "unexpected end of diff '%s'"
+msgstr "unerwartetes Ende des Diffs »%s«"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "expected [ +-] at start of line %d of diff '%s'"
+msgstr "[ +-] wurde am Anfang der Zeile %d des Diffs »%s« erwartet"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "expected ^@@ at line %d of diff '%s'"
+msgstr "^@@ wurde in Zeile %d des Diffs »%s« erwartet"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff '%s' doesn't contain any patch"
+msgstr "Diff »%s« enthält keinen Patch"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "remove patch backup file %s"
+msgstr "Patch-Sicherungskopiedatei %s entfernen"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "nonexistent"
+msgstr "nicht existierend"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "plain file"
+msgstr "gewöhnliche Datei"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "directory"
+msgstr "Verzeichnis"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "symlink to %s"
+msgstr "Symlink auf %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "block device"
+msgstr "Blockgerät"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "character device"
+msgstr "zeichenorientiertes Gerät"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "named pipe"
+msgstr "benannte Pipe"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "named socket"
+msgstr "benannter Socket"
+
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "cannot mkdir %s"
+msgstr "Verzeichnis %s kann nicht angelegt werden"
+
+#: scripts/Dpkg/Source/Quilt.pm
+msgid "the patch has fuzz which is not allowed, or is malformed"
+msgstr "der Patch war unscharf (nicht erlaubt) oder ist fehlerhaft"
+
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "if patch '%s' is correctly applied by quilt, use '%s' to update it"
+msgstr ""
+"falls Patch »%s« von Quilt korrekt angewandt wurde, verwenden Sie »%s« zum "
+"Aktualisieren"
+
+#: scripts/Dpkg/Source/Quilt.pm
+msgid ""
+"if the file is present in the unpacked source, make sure it is also present "
+"in the orig tarball"
+msgstr ""
+"falls die Datei in der entpackten Quelle vorhanden ist, stellen Sie sicher, "
+"dass sie auch im Orig-Tarball vorhanden ist."
+
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "%s should be a directory or non-existing"
+msgstr "%s sollte ein Verzeichnis sein oder nicht existieren"
+
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "%s should be a file or non-existing"
+msgstr "%s sollte eine Datei sein oder nicht existieren"
+
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid ""
+"the series file (%s) contains unsupported options ('%s', line %s); dpkg-"
+"source might fail when applying patches"
+msgstr ""
+"Die Seriendatei (%s) enthält nicht unterstützte Optionen (»%s«, Zeile %s), "
+"dpkg-source könnte beim Anwenden der Patche scheitern."
+
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "restoring quilt backup files for %s"
+msgstr "Quilt-Sicherungskopiedatei für %s wird wiederhergestellt"
+
+#: scripts/Dpkg/Substvars.pm
+#, perl-format
+msgid "bad line in substvars file %s at line %d"
+msgstr "ungültige Zeile in der substvars-Datei %s in Zeile %d"
+
+#: scripts/Dpkg/Substvars.pm
+#, perl-format
+msgid "invalid source version %s"
+msgstr "ungültiges Quellversion %s"
+
+#: scripts/Dpkg/Substvars.pm
+#, perl-format
+msgid "too many substitutions - recursive ? - in '%s'"
+msgstr "zu viele - rekursive? - Substitutionen in »%s«"
+
+#: scripts/Dpkg/Substvars.pm
+#, perl-format
+msgid "obsolete substitution variable ${%s}"
+msgstr "veraltete Substitutionsvariable ${%s}"
+
+#: scripts/Dpkg/Substvars.pm
+#, perl-format
+msgid "substitution variable ${%s} used, but is not defined"
+msgstr "Substitutionsvariable ${%s} verwandt, aber nicht definiert"
+
+#: scripts/Dpkg/Substvars.pm
+#, perl-format
+msgid "substitution variable ${%s} unused, but is defined"
+msgstr "Substitutionsvariable ${%s} unbenutzt, aber definiert"
+
+#: scripts/Dpkg/Vars.pm
+#, perl-format
+msgid "source package name '%s' is illegal: %s"
+msgstr "Quellpaketname »%s« ist ungültig: »%s«"
+
+#: scripts/Dpkg/Vars.pm
+#, perl-format
+msgid "source package has two conflicting values - %s and %s"
+msgstr "zwei widersprüchliche Werte für Quellpaket - %s und %s"
+
+#: scripts/Dpkg/Vendor.pm
+#, perl-format
+msgid ""
+"%s origin filename is deprecated; it should have only alphanumeric or dash "
+"characters"
+msgstr ""
+"%s-Quell-Dateiname ist veraltet; er sollte nur alphanumerische Zeichen oder "
+"den Bindestrich enthalten"
+
+#: scripts/Dpkg/Vendor.pm
+#, perl-format
+msgid ""
+"%s module name is deprecated; it should be capitalized with only "
+"alphanumeric characters"
+msgstr ""
+"%s-Modulname ist veraltet; er sollte nur aus alphanumerischen Großbuchstaben "
+"bestehen"
+
+#: scripts/Dpkg/Vendor/Debian.pm
+#, perl-format
+msgid "unknown host architecture '%s'"
+msgstr "unbekannte Host-Architektur »%s«"
+
+#: scripts/Dpkg/Vendor/Ubuntu.pm
+msgid ""
+"Version number suggests Ubuntu changes, but Maintainer: does not have Ubuntu "
+"address"
+msgstr ""
+"Versionsnummer lässt Ubuntu-Änderungen vermuten, aber »Maintainer:« enthält "
+"keine Ubuntu-Adresse"
+
+#: scripts/Dpkg/Vendor/Ubuntu.pm
+msgid ""
+"Version number suggests Ubuntu changes, but there is no XSBC-Original-"
+"Maintainer field"
+msgstr ""
+"Versionsnummer lässt Ubuntu-Änderungen vermuten, aber es gibt kein Feld XSBC-"
+"Original-Maintainer"
+
+#: scripts/Dpkg/Version.pm
+#, perl-format
+msgid "%s is not a valid version"
+msgstr "%s ist keine gültige Version"
+
+#: scripts/Dpkg/Version.pm
+msgid "version number cannot be empty"
+msgstr "Versionsnummer darf nicht leer sein"
+
+#: scripts/Dpkg/Version.pm
+msgid "epoch part of the version number cannot be empty"
+msgstr "Epoch-Teil der Versionsnummer darf nicht leer sein"
+
+#: scripts/Dpkg/Version.pm
+msgid "upstream version cannot be empty"
+msgstr "Version der Originalautoren darf nicht leer sein"
+
+#: scripts/Dpkg/Version.pm
+msgid "revision cannot be empty"
+msgstr "Revision darf nicht leer sein"
+
+#: scripts/Dpkg/Version.pm
+msgid "version number does not start with digit"
+msgstr "Versionsnummer beginnt nicht mit einer Ziffer"
+
+#: scripts/Dpkg/Version.pm
+#, perl-format
+msgid "version number contains illegal character '%s'"
+msgstr "Versionsnummer enthält ungültiges Zeichen »%s«"
+
+#: scripts/Dpkg/Version.pm
+#, perl-format
+msgid "epoch part of the version number is not a number: '%s'"
+msgstr "Epoch-Teil der Versionsnummer ist keine Zahl: »%s«"
+
+#, perl-format
+#~ msgid "cannot verify inline signature on %s since GnuPG is not installed"
+#~ msgstr ""
+#~ "eingebettete Signatur von %s kann nicht überprüft werden, da GnuPG nicht "
+#~ "installiert ist"
+
+#, perl-format
+#~ msgid "cannot verify signature on %s since GnuPG is not installed"
+#~ msgstr ""
+#~ "Signatur von %s kann nicht überprüft werden, da GnuPG nicht installiert "
+#~ "ist"
+
+#~ msgid "signature file is already OpenPGP ASCII armor, copying"
+#~ msgstr "Signaturdatei ist bereits OpenPGP-ASCII-Armor, sie wird kopiert"
+
+#, perl-format
+#~ msgid "cannot execute %s program"
+#~ msgstr "Programm %s kann nicht ausgeführt werden"
+
+#, perl-format
+#~ msgid "cannot write signature file %s"
+#~ msgstr "Signaturdatei %s kann nicht geschrieben werden"
+
+#~ msgid "cannot OpenPGP ASCII armor signature file due to missing gpg"
+#~ msgstr ""
+#~ "OpenPGP-ASCII-Armor-Signaturdatei kann wegen fehlendem GPG nicht geöffnet "
+#~ "werden"
+
+#, perl-format
+#~ msgid "cannot import key in %s since GnuPG is not installed"
+#~ msgstr ""
+#~ "Schlüssel kann nicht in %s importiert werden, da GnuPG nicht installiert "
+#~ "ist"
+
+#, perl-format
+#~ msgid "cannot import key %s into %s"
+#~ msgstr "Schlüssel %s kann nicht in %s importiert werden"
+
+#, perl-format
+#~ msgid "verifying %s using existing %s"
+#~ msgstr "%s wird unter Benutzung des existierenden %s überprüft"
+
+#~ msgid "parse changes file"
+#~ msgstr "Auswerten der changes-Datei"
+
+#~ msgid "dpkg-genchanges"
+#~ msgstr "dpkg-genchanges"
+
+#, perl-format
+#~ msgid "failed to import key in %s"
+#~ msgstr "Fehlschlag beim Import des Schlüssels in %s"
+
+#, perl-format
+#~ msgid "failed to verify signature on %s"
+#~ msgstr "Fehler beim Überprüfen der Signatur von %s"
+
+#~ msgid "badly formed package name in files list file, line %d"
+#~ msgstr "ungültiger Paketname in Dateilistendatei, Zeile %d"
+
+#~ msgid "error occurred while parsing %s"
+#~ msgstr "Fehler beim Auswerten von %s"
+
+#~ msgid "error occurred while parsing %s field: %s"
+#~ msgstr "Fehler beim Auswerten von %s Feld: %s"
+
+#~ msgid "'%s' is not a legal architecture string"
+#~ msgstr "»%s« ist keine gültige Architektur-Zeichenkette"
+
+#~ msgid ""
+#~ "binary package stanza %s is using an obsolete Build-Profiles field syntax"
+#~ msgstr ""
+#~ "Binärpaketeintrag %s verwendet eine veraltete Build-Profiles-Feldsyntax"
+
+#~ msgid "format variant must be in lowercase"
+#~ msgstr "Formatvariante muss Kleinbuchstaben verwenden"
+
+#~ msgid "invalid Format field '%s'"
+#~ msgstr "ungültiges Formatfeld »%s«"
+
+#~ msgid "unknown substitution variable ${%s}"
+#~ msgstr "unbekannte Substitutionsvariable ${%s}"
+
+#~ msgid "cannot create pipe for %s"
+#~ msgstr "Pipe für %s kann nicht angelegt werden"
+
+#~ msgid "tail of %s"
+#~ msgstr "Ende von %s"
+
+#~ msgid "%s died from signal %s"
+#~ msgstr "%s wurde durch Signal %s getötet"
+
+#~ msgid "'hardening' flag found but 'hardening-wrapper' not installed"
+#~ msgstr ""
+#~ "Schalter »hardening« gefunden, aber »hardening-wrapper« nicht installiert"
+
+#~ msgid "overriding %s in environment: %s"
+#~ msgstr "%s in Umgebung wird überschrieben: %s"
+
+#~ msgid "failed to sign .dsc and .changes file"
+#~ msgstr ".dsc- und .changes-Datei konnte nicht signiert werden"
+
+#~ msgid "illegal .buildinfo ID '%s': %s"
+#~ msgstr "Ungültige .buildinfo-iD »%s«: %s"
+
+#~ msgid "cannot open new output control file '%s'"
+#~ msgstr "neue Ausgabe-Steuerdatei »%s« kann nicht geöffnet werden"
+
+#~ msgid "deprecated substitution variable ${%s}"
+#~ msgstr "veraltete Substitutionsvariable ${%s}"
+
+#~ msgid "missing library directory"
+#~ msgstr "fehlendes Bibliotheksverzeichnis"
+
+#~ msgid "Usage: %s [<option>...] [<changelog-file>]"
+#~ msgstr "Aufruf: %s [<Option> …] [<Changelog-Datei>]"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " --file <file> changelog <file> to parse (defaults to '-').\n"
+#~ " -l, --label <file> changelog <file> name to use in error "
+#~ "messages.\n"
+#~ " --format <output-format>\n"
+#~ " set the output format (defaults to 'dpkg').\n"
+#~ " --all include all changes.\n"
+#~ " -s, --since <version> include all changes later than <version>.\n"
+#~ " -v <version> ditto.\n"
+#~ " -u, --until <version> include all changes earlier than <version>.\n"
+#~ " -f, --from <version> include all changes equal or later than "
+#~ "<version>.\n"
+#~ " -t, --to <version> include all changes up to or equal than "
+#~ "<version>.\n"
+#~ " -c, --count <number> include <number> entries from the top (or tail "
+#~ "if\n"
+#~ " <number> is lower than 0).\n"
+#~ " -n <number> ditto.\n"
+#~ " -o, --offset <number> change starting point for --count, counted "
+#~ "from\n"
+#~ " the top (or tail if <number> is lower than "
+#~ "0).\n"
+#~ " -?, --help print usage information.\n"
+#~ " -V, --version print version information.\n"
+#~ msgstr ""
+#~ "Optionen:\n"
+#~ " --file <Datei> Changelog-<Datei> auswerten (Vorgabe »-«)\n"
+#~ " -l, --label <Datei> Changelog-<Datei>name in Fehlermeldungen "
+#~ "verwenden\n"
+#~ " --format <Ausgabeformat>\n"
+#~ " das Ausgabeformat setzen (Vorgabe »dpkg«)\n"
+#~ " --all alle Änderungen hinzufügen\n"
+#~ " -s, --since <Version> alle Änderungen jünger als <Version> hinzufügen\n"
+#~ " -v <version> ebenso\n"
+#~ " -u, --until <Version> alle Änderungen älter als <Version> hinzufügen\n"
+#~ " -f, --from <Version> alle Änderungen jünger oder identisch zu "
+#~ "<Version> hinzufügen\n"
+#~ " -t, --to <Version> alle Änderungen älter bis einschließlich "
+#~ "<Version> hinzufügen\n"
+#~ " -c, --count <Zahl> <Zahl> Einträge von oben (oder von unten, falls "
+#~ "<Zahl> kleiner 0 ist) hinzufügen\n"
+#~ " -n <Zahl> ebenso\n"
+#~ " -o, --offset <Zahl> den Startpunkt ändern, gezählt von oben (oder "
+#~ "unten, falls <Zahl> kleiner 0 ist)\n"
+#~ " -?, --help Hinweise zum Aufruf anzeigen\n"
+#~ " -V, --version die Version anzeigen\n"
+
+#~ msgid "output format %s not supported"
+#~ msgstr "Ausgabeformat %s nicht unterstützt"
+
+#~ msgid "more than one file specified (%s and %s)"
+#~ msgstr "mehr als eine Datei angegeben (%s und %s)"
+
+#~ msgid "format parser %s not executable"
+#~ msgstr "Formatauswerter %s nicht ausführbar"
+
+#~ msgid "output of changelog parser"
+#~ msgstr "Ausgabe des Changelog-Auswerters"
+
+#~ msgid "changelog parser %s"
+#~ msgstr "Changelog-Auswerter %s"
+
+#~ msgid "write original source message"
+#~ msgstr "ursprüngliche Quell-Nachricht schreiben"
+
+#~ msgid "'%s' is not a legal architecture string."
+#~ msgid_plural "'%s' are not legal architecture strings."
+#~ msgstr[0] "»%s« ist keine gültige Architektur-Zeichenkette."
+#~ msgstr[1] "»%s« sind keine gültigen Architektur-Zeichenketten."
+
+#~ msgid ""
+#~ "More options are available but they depend on the source package format.\n"
+#~ "See dpkg-source(1) for more info."
+#~ msgstr ""
+#~ "Abhängig vom Quellpaketformat sind weitere Optionen verfügbar.\n"
+#~ "Weitere Informationen finden Sie in dpkg-source(1)."
+
+#~ msgid "couldn't open %s for reading"
+#~ msgstr "%s konnte nicht zum Lesen geöffnet werden"
+
+#~ msgid "error closing %s (%s)"
+#~ msgstr "Fehler beim Schließen von %s (%s)"
+
+#~ msgid "%s: unrepresentable changes to source"
+#~ msgstr "%s: nicht darstellbare Änderungen an der Quelle"
+
+#~ msgid "couldn't parse date %s"
+#~ msgstr "Datum %s konnte nicht ausgewertet werden"
+
+#~ msgid "open new substvars file '%s'"
+#~ msgstr "neue Substvars-Datei »%s« öffnen"
+
+#~ msgid "open old substvars file '%s' for reading"
+#~ msgstr "alte Substvars-Datei »%s« zum Lesen öffnen"
+
+#~ msgid "copy old entry to new substvars file '%s'"
+#~ msgstr "alte Einträge in die neue Substvars-Datei »%s« kopieren"
+
+#~ msgid "error closing %s ($? %d, $! '%s')"
+#~ msgstr "Fehler beim Schließen von %s ($? %d, $! »%s«)"
+
+#~ msgid ""
+#~ "this is currently a non-fatal warning with -S, but will probably become "
+#~ "fatal in the future"
+#~ msgstr ""
+#~ "Dies ist eine mit -S nicht fatale Warnung, allerdings wird sie "
+#~ "wahrscheinlich in der Zukunft fatal werden."
+
+#~ msgid ""
+#~ "Usage: %s [<option>...] [<changelogfile>]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -?, --help print usage information\n"
+#~ " --version, -V print version information\n"
+#~ " --label, -l <file> name of the changelog file to\n"
+#~ " use in error messages\n"
+#~ " --file <file> changelog file to parse, defaults\n"
+#~ " to '-' (standard input)\n"
+#~ " --format <outputformat> see man page for list of available\n"
+#~ " output formats, defaults to 'dpkg'\n"
+#~ " for compatibility with dpkg-dev\n"
+#~ " --since, -s, -v <version> include all changes later than version\n"
+#~ " --until, -u <version> include all changes earlier than version\n"
+#~ " --from, -f <version> include all changes equal or later\n"
+#~ " than version\n"
+#~ " --to, -t <version> include all changes up to or equal\n"
+#~ " than version\n"
+#~ " --count, -c, -n <number> include <number> entries from the top\n"
+#~ " (or the tail if <number> is lower than "
+#~ "0)\n"
+#~ " --offset, -o <number> change the starting point for --count,\n"
+#~ " counted from the top (or the tail if\n"
+#~ " <number> is lower than 0)\n"
+#~ " --all include all changes\n"
+#~ msgstr ""
+#~ "Aufruf: %s [<Option> …] [<Changelogdatei>]\n"
+#~ "\n"
+#~ "Optionen:\n"
+#~ " -?, --help Benutzungsinformationen ausgeben\n"
+#~ " --version, -V Versionsinformation ausgeben\n"
+#~ " --label, -l <Datei> Name der Changelogdatei zur Verwendung\n"
+#~ " in Fehlermeldungen\n"
+#~ " --file <Datei> auszuwertende Changelogdatei, "
+#~ "standardmäßig\n"
+#~ " »-« (Standardeingabe)\n"
+#~ " --format <Ausgabeformat> siehe Handbuchseite für verfügbare\n"
+#~ " Ausgabeformate, standardmäßig »dpkg« zur\n"
+#~ " Kompatibilität mit dpkg-dev\n"
+#~ " --since, -s, -v <Version> alle Änderungen jünger als Version "
+#~ "hinzu-\n"
+#~ " nehmen\n"
+#~ " --until, -u <Version> alle Änderungen älter als Version hinzu-\n"
+#~ " nehmen\n"
+#~ " --from, -f <Version> alle Änderungen jünger als oder "
+#~ "identisch\n"
+#~ " mit Version hinzunehmen\n"
+#~ " --to, -t <Version> alle Änderungen älter als oder identisch\n"
+#~ " mit Version hinzunehmen\n"
+#~ " --count, -c, -n <Zahl> <Zahl> Einträge von oben hinzufügen (oder "
+#~ "von\n"
+#~ " unten, falls <Zahl> kleiner als Null "
+#~ "ist)\n"
+#~ " --offset, -o <Zahl> Startpunkt für --count ändern, gezählt\n"
+#~ " von oben (oder von unten, falls <Zahl>\n"
+#~ " kleiner als Null ist)\n"
+#~ " --all alle Änderungen hinzufügen\n"
+
+#~ msgid "read changesdescription"
+#~ msgstr "Änderungsbeschreibung lesen"
+
+#~ msgid "chdir for du to `%s'"
+#~ msgstr "chdir nach »%s« für du"
+
+#~ msgid "du in `%s'"
+#~ msgstr "du in »%s«"
+
+#~ msgid "du gave unexpected output `%s'"
+#~ msgstr "du lieferte unerwartete Ausgabe »%s«"
+
+#~ msgid "used that one and ignored data from %s!"
+#~ msgstr "dieses wurde verwendet, Daten aus %s wurden ignoriert!"
+
+#~ msgid "package %s (filename %s) is repeat;"
+#~ msgstr "Paket %s (Dateiname %s) ist wiederholt;"
+
+#~ msgid "checksum program gave bogus output `%s'"
+#~ msgstr "falsche Ausgabe »%s« von Prüfsummenprogramm"
+
+#~ msgid ""
+#~ "Options passed to dpkg-architecture:\n"
+#~ " -a<arch> Debian architecture we build for.\n"
+#~ " -t<system> set GNU system type."
+#~ msgstr ""
+#~ "Optionen, die an Dpkg-Architecture weitergegeben werden:\n"
+#~ " -a<Arch> Debian-Architektur, für die gebaut wird\n"
+#~ " -t<System> GNU-Systemtyp setzen"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -a<debian-arch> set current Debian architecture.\n"
+#~ " -t<gnu-system> set current GNU system type.\n"
+#~ " -f force flag (override variables set in environment)."
+#~ msgstr ""
+#~ "Optionen:\n"
+#~ " -a<Debian-Arch> die aktuelle Debian-Architektur setzen\n"
+#~ " -t<GNU-System> den aktuellen GNU-Systemtyp setzen\n"
+#~ " -f Zwangs-Schalter (in der Umgebung gesetzte\n"
+#~ " Variablen überschreiben)"
+
+#~ msgid ""
+#~ "need a command (-x, -b, --before-build, --after-build, --print-format, --"
+#~ "commit)"
+#~ msgstr ""
+#~ "ein Befehl wird benötigt (-x, -b, --before-build, --after-build, --print-"
+#~ "format, --commit)"
+
+#~ msgid "only one of -x, -b or --print-format allowed, and only once"
+#~ msgstr "nur entweder -x, -b oder --print-format erlaubt, und nur einmal"
+
+#~ msgid "binary-only upload - not including any source code"
+#~ msgstr "rein binärer Upload - es ist kein Quellcode hinzugefügt"
+
+#~ msgid "diff %s patches file with unknown escape sequence \\%s"
+#~ msgstr "Diff %s patcht Datei mit unbekannter Maskierung \\%s"
+
+#~ msgid "open new files list file"
+#~ msgstr "neue Dateilistendatei öffnen"
+
+#~ msgid "copy old entry to new files list file"
+#~ msgstr "alten Eintrag in neue Dateienlist-Datei kopieren"
+
+#~ msgid "read old files list file"
+#~ msgstr "alte Dateilistendatei lesen"
+
+#~ msgid "write new entry to new files list file"
+#~ msgstr "neuen Eintrag in neue Dateilistendatei schreiben"
+
+#~ msgid "close new files list file"
+#~ msgstr "neue Dateilistendatei schließen"
+
+#~ msgid "cannot read files list file"
+#~ msgstr "Dateilistendatei kann nicht gelesen werden"
+
+#~ msgid "duplicate files list entry for package %s (line %d)"
+#~ msgstr "doppelter Dateilisteneintrag für Paket %s (Zeile %d)"
+
+#~ msgid "close old files list file"
+#~ msgstr "schließen der alten Dateilistendatei"
+
+#~ msgid "version does not contain a revision"
+#~ msgstr "Version enthält keine Revision"
+
+#~ msgid "internal error"
+#~ msgstr "interner Fehler"
+
+#~ msgid "fatal error occurred while parsing input"
+#~ msgstr "Fataler Fehler beim Auswerten der Eingabe"
+
+#~ msgid "will probably become fatal in the future."
+#~ msgstr "wird sie wahrscheinlich in der Zukunft fatal werden."
+
+#~ msgid ""
+#~ "This source package can only be manipulated using bzr, which is not in "
+#~ "the PATH."
+#~ msgstr ""
+#~ "Dieses Quellpaket kann nur mit Bzr bearbeitet werden, welches sich nicht "
+#~ "im PATH befindet."
+
+#~ msgid ""
+#~ "\n"
+#~ "Usage: %s [<options> ...]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -r<gain-root-command>\n"
+#~ " command to gain root privileges (default is fakeroot).\n"
+#~ " -R<rules> rules file to execute (default is debian/rules).\n"
+#~ " -p<sign-command>\n"
+#~ " -d do not check build dependencies and conflicts.\n"
+#~ " -D check build dependencies and conflicts.\n"
+#~ " -T<target> call debian/rules <target> with the proper environment\n"
+#~ " --as-root ensure -T calls the target with root rights\n"
+#~ " -j[<number>] specify jobs to run simultaneously } passed to debian/"
+#~ "rules\n"
+#~ " -k<keyid> the key to use for signing.\n"
+#~ " -sgpg the sign-command is called like GPG.\n"
+#~ " -spgp the sign-command is called like PGP.\n"
+#~ " -us unsigned source.\n"
+#~ " -uc unsigned changes.\n"
+#~ " -a<arch> Debian architecture we build for (implies -d).\n"
+#~ " -b binary-only, do not build source. } also passed to\n"
+#~ " -B binary-only, no arch-indep files. } dpkg-genchanges\n"
+#~ " -A binary-only, only arch-indep files. }\n"
+#~ " -S source only, no binary files. }\n"
+#~ " -F normal full build (binaries and sources).\n"
+#~ " -t<system> set GNU system type. } passed to dpkg-"
+#~ "architecture\n"
+#~ " -v<version> changes since version <version>. }\n"
+#~ " -m<maint> maintainer for package is <maint>. }\n"
+#~ " -e<maint> maintainer for release is <maint>. } only passed\n"
+#~ " -C<descfile> changes are described in <descfile>. } to dpkg-"
+#~ "genchanges\n"
+#~ " -si (default) src includes orig if new upstream. }\n"
+#~ " -sa uploaded src always includes orig. }\n"
+#~ " -sd uploaded src is diff and .dsc only. }\n"
+#~ " -sn force Debian native source format. }\n"
+#~ " -s[sAkurKUR] see dpkg-source for explanation. } only passed\n"
+#~ " -z<level> compression level of source } to dpkg-"
+#~ "source\n"
+#~ " -Z<compressor> compression to use for source }\n"
+#~ " -nc do not clean source tree (implies -b).\n"
+#~ " -tc clean source tree when finished.\n"
+#~ " -ap add pause before starting signature process.\n"
+#~ " -i[<regex>] ignore diffs of files matching regex. } only passed\n"
+#~ " -I[<pattern>] filter out files when building tarballs. } to dpkg-"
+#~ "source\n"
+#~ " --source-option=<opt>\n"
+#~ "\t\t pass option <opt> to dpkg-source\n"
+#~ " --changes-option=<opt>\n"
+#~ "\t\t pass option <opt> to dpkg-genchanges\n"
+#~ " --admindir=<directory>\n"
+#~ " change the administrative directory.\n"
+#~ " -h, --help show this help message.\n"
+#~ " --version show the version.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Aufruf: %s [<Optionen> …]\n"
+#~ "\n"
+#~ "Optionen:\n"
+#~ " -r<root-werde-Befehl>\n"
+#~ " Befehl, um root-Privilegien zu erhalten (standardmäßig\n"
+#~ " fakeroot)\n"
+#~ " -R<rules> auszuführende rules-Datei (Vorgabe: debian/rules)\n"
+#~ " -p<signier-Befehl>\n"
+#~ " -d Bauabhängigkeiten und -konflikte nicht prüfen\n"
+#~ " -D Bauabhängigkeiten und -konflikte prüfen\n"
+#~ " -T<Ziel> debian/rules <Ziel> mit der korrekten Umgebung aufrufen\n"
+#~ " --as-root sicherstellen, dass -T das Ziel mit root-Rechten "
+#~ "aufruft\n"
+#~ " -j[<Nummer>] Angabe der simultanen Aufträge } an debian/rules "
+#~ "weitergegeben\n"
+#~ " -k<Schlüssel-ID>\n"
+#~ " Für die Signierung zu verwendender Schlüssel\n"
+#~ " -sgpg der Signier-Befehl wird wie GPG aufgerufen\n"
+#~ " -spgp der Signier-Befehl wird wie PGP aufgerufen\n"
+#~ " -us unsignierte Quelle\n"
+#~ " -uc unsignierte changes (Änderungen)\n"
+#~ " -a<Arch> Debian-Architektur, für die gebaut wird (impliziert -d)\n"
+#~ " -b nur binär, Quelle nicht bauen } auch "
+#~ "weitergegeben an\n"
+#~ " -B nur binär, keine arch-indep-Dateien } dpkg-genchanges\n"
+#~ " -A nur binär, nur arch-indep-Dateien }\n"
+#~ " -S nur Quelle, keine Binärdateien }\n"
+#~ " -F normaler kompletter Bau (Binärdateien und Quellen)\n"
+#~ " -t<System> GNU-Systemtyp setzen } weitergegeben "
+#~ "an \n"
+#~ " dpkg-"
+#~ "architecture\n"
+#~ " -v<Version> Änderungen seit Version <Version> }\n"
+#~ " -m<Betr> <Betr> ist Betreuer des Pakets }\n"
+#~ " -e<Betr> <Betr> ist Betreuer für die Veröffentlichung} nur an\n"
+#~ " -C<Datei> Änderungen sind in <Datei> beschrieben } dpkg-"
+#~ "genchanges\n"
+#~ " } "
+#~ "weitergegeben.\n"
+#~ " -si (Standard) Quelle enthält Orig. falls neues Upstream }\n"
+#~ " -sa hochgeladene Quelle enthält immer Orig }\n"
+#~ " -sd hochgeladene Quelle ist nur diff und .dsc }\n"
+#~ " -sn »Debian native«-Quellformat erzwingen }\n"
+#~ " -s[sAkurKUR] siehe dpkg-source für Erklärung } nur "
+#~ "weitergegeben\n"
+#~ " -z<Stufe> Kompressionsstufe der Quelle } an dpkg-"
+#~ "source\n"
+#~ " -Z<Komprimierer> Für Quelle zu verwendende Kompression }\n"
+#~ " -nc Quellbaum nicht säubern (impliziert -b)\n"
+#~ " -tc nach Abschluss Quellbaum säubern\n"
+#~ " -ap Pause vor Beginn des Signaturprozesses einfügen\n"
+#~ " -i[<Regaus>] Diffs von auf Regaus passenden Dateien ignorieren} nur "
+#~ "an\n"
+#~ " -I[<Muster>] Dateien beim Tarball-Bauen herausfiltern } dpkg-"
+#~ "source\n"
+#~ " } "
+#~ "weitergegeben\n"
+#~ " --source-option=<Opt>\n"
+#~ "\t\t Option <opt> an dpkg-source übergeben\n"
+#~ " --changes-option=<Opt>\n"
+#~ "\t\t Option <opt> an dpkg-genchanges übergeben\n"
+#~ " --admindir=<Verz>\n"
+#~ " das administrative Verzeichnis ändern\n"
+#~ " -h, --help diese Hilfemeldung anzeigen\n"
+#~ " --version die Version anzeigen\n"
+
+#~ msgid "PGP support is deprecated (see README.feature-removal-schedule)"
+#~ msgstr ""
+#~ "PGP-Unterstützung ist veraltet (lesen Sie README.feature-removal-schedule)"
+
+#~ msgid ""
+#~ "-u, --udeb option is deprecated (see README.feature-removal-schedule)"
+#~ msgstr ""
+#~ "Option -u, --udeb ist veraltet (lesen Sie README.feature-removal-schedule)"
+
+#~ msgid "source package name `%s' starts with non-alphanum"
+#~ msgstr ""
+#~ "Quellpaketname »%s« beginnt mit einem nicht alphanumerischen Zeichen"
+
+#~ msgid ""
+#~ "\n"
+#~ "Copyright (C) 1999-2001 Marcus Brinkmann <brinkmd@debian.org>.\n"
+#~ "Copyright (C) 2004-2005 Scott James Remnant <scott@netsplit.com>."
+#~ msgstr ""
+#~ "\n"
+#~ "Copyright (C) 1999-2001 Marcus Brinkmann <brinkmd@debian.org>.\n"
+#~ "Copyright (C) 2004-2005 Scott James Remnant <scott@netsplit.com>."
+
+#~ msgid ""
+#~ "\n"
+#~ "Copyright (C) 2010-2011 Raphael Hertzog <hertzog@debian.org>."
+#~ msgstr ""
+#~ "\n"
+#~ "Copyright (C) 2010-2011 Raphael Hertzog <hertzog@debian.org>."
+
+#~ msgid ""
+#~ "\n"
+#~ "Copyright (C) 1996 Ian Jackson.\n"
+#~ "Copyright (C) 2000 Wichert Akkerman\n"
+#~ "Copyright (C) 2007 Frank Lichtenheld"
+#~ msgstr ""
+#~ "\n"
+#~ "Copyright (C) 1996 Ian Jackson.\n"
+#~ "Copyright (C) 2000 Wichert Akkerman.\n"
+#~ "Copyright (C) 2007 Frank Lichtenheld."
+
+#~ msgid ""
+#~ "\n"
+#~ "Copyright (C) 1996 Ian Jackson."
+#~ msgstr ""
+#~ "\n"
+#~ "Copyright (C) 1996 Ian Jackson."
+
+#~ msgid ""
+#~ "\n"
+#~ "Copyright (C) 1996 Ian Jackson.\n"
+#~ "Copyright (C) 2000,2001 Wichert Akkerman."
+#~ msgstr ""
+#~ "\n"
+#~ "Copyright (C) 1996 Ian Jackson.\n"
+#~ "Copyright (C) 2000,2001 Wichert Akkerman."
+
+#~ msgid ""
+#~ "\n"
+#~ "Copyright (C) 1996 Ian Jackson.\n"
+#~ "Copyright (C) 2000,2002 Wichert Akkerman."
+#~ msgstr ""
+#~ "\n"
+#~ "Copyright (C) 1996 Ian Jackson.\n"
+#~ "Copyright (C) 2000,2002 Wichert Akkerman."
+
+#~ msgid ""
+#~ "\n"
+#~ "Copyright (C) 2007 Raphael Hertzog.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Copyright (C) 2007 Raphael Hertzog.\n"
+
+#~ msgid "Copyright (C) 2009-2010 Raphael Hertzog."
+#~ msgstr "Copyright (C) 2009-2010 Raphael Hertzog."
+
+#~ msgid ""
+#~ "\n"
+#~ "Copyright (C) 1996 Ian Jackson.\n"
+#~ "Copyright (C) 2001 Wichert Akkerman"
+#~ msgstr ""
+#~ "\n"
+#~ "Copyright (C) 1996 Ian Jackson.\n"
+#~ "Copyright (C) 2001 Wichert Akkerman."
+
+#~ msgid ""
+#~ "\n"
+#~ "Copyright (C) 1996 Ian Jackson.\n"
+#~ "Copyright (C) 2000 Wichert Akkerman.\n"
+#~ "Copyright (C) 2006 Frank Lichtenheld.\n"
+#~ "Copyright (C) 2007 Raphael Hertzog.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Copyright (C) 1996 Ian Jackson.\n"
+#~ "Copyright (C) 2000 Wichert Akkerman.\n"
+#~ "Copyright (C) 2006 Frank Lichtenheld.\n"
+#~ "Copyright (C) 2007 Raphael Hertzog.\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "Copyright (C) 1996 Ian Jackson\n"
+#~ "Copyright (C) 1997 Klee Dienes\n"
+#~ "Copyright (C) 2008 Raphael Hertzog"
+#~ msgstr ""
+#~ "\n"
+#~ "Copyright (C) 1996 Ian Jackson.\n"
+#~ "Copyright (C) 1997 Klee Dienes.\n"
+#~ "Copyright (C) 2008 Raphael Hertzog."
+
+#~ msgid ""
+#~ "\n"
+#~ "Copyright (C) 1996 Ian Jackson.\n"
+#~ "Copyright (C) 2005,2007 Frank Lichtenheld."
+#~ msgstr ""
+#~ "\n"
+#~ "Copyright (C) 1996 Ian Jackson.\n"
+#~ "Copyright (C) 2005,2007 Frank Lichtenheld."
+
+#~ msgid "%s: dpkg-buildflags (origin: %s): %s = %s\n"
+#~ msgstr "%s: dpkg-buildflags (Quelle: %s): %s = %s\n"
+
+#~ msgid "1 to 3 args expected\n"
+#~ msgstr "1 bis 3 Argumente erwartet\n"
+
+#~ msgid "no orig.tar file found"
+#~ msgstr "keine orig.tar-Datei gefunden"
+
+#~ msgid "entry of APT's %s file"
+#~ msgstr "Eintrag von APTs %s-Datei"
+
+#~ msgid "exec %s"
+#~ msgstr "ausführen von %s"
+
+#~ msgid "git config exited nonzero"
+#~ msgstr "git config mit nicht-Null-Status beendet"
+
+#~ msgid "executable bit set on %s; clearing"
+#~ msgstr "bei %s ist das Ausführbarkeits-Bit gesetzt; dies wird entfernt"
+
+#~ msgid "unable to remove `%s'"
+#~ msgstr "»%s« kann nicht entfernt werden"
+
+#~ msgid "modifying .git/config to comment out some settings"
+#~ msgstr ""
+#~ ".git/config wird verändert, um einige Einstellungen auszukommentieren"
+
+#~ msgid "unable to append to %s"
+#~ msgstr "anhängen an %s nicht möglich"
+
+#~ msgid "The following setting(s) were disabled by dpkg-source"
+#~ msgstr "Die folgende(n) Einstellungen wurden von dpkg-source deaktiviert"
+
+#~ msgid "objdump on `%s'"
+#~ msgstr "objdump auf »%s«"
+
+#~ msgid "%s: set %s to default value: %s\n"
+#~ msgstr "%s: setze %s auf Standardwert: %s\n"
+
+#~ msgid "source format `%s' discarded: %s"
+#~ msgstr "Quellformat »%s« verworfen: %s"
+
+#~ msgid "cannot open .dsc file %s"
+#~ msgstr "kann .dsc-Datei %s nicht öffnen"
+
+#~ msgid "source control file %s"
+#~ msgstr "Quell-Steuerdatei %s"
+
+#~ msgid "Conflicting sizes `%u' and `%u' for file `%s'"
+#~ msgstr "Widersprüchliche Größen »%u« und »%u« für Datei »%s«"
+
+#~ msgid "fork for du"
+#~ msgstr "Fork für du"
+
+#~ msgid ""
+#~ "Usage: %s [<option> ...]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -p<package> generate symbols file for package.\n"
+#~ " -P<packagebuilddir> temporary build dir instead of debian/tmp.\n"
+#~ " -e<library> explicitly list libraries to scan.\n"
+#~ " -v<version> version of the packages (defaults to\n"
+#~ " version extracted from debian/changelog).\n"
+#~ " -c<level> compare generated symbols file with the\n"
+#~ " reference file in the debian directory.\n"
+#~ "\t\t\t Fails if difference are too important\n"
+#~ "\t\t\t (level goes from 0 for no check, to 4\n"
+#~ "\t\t\t for all checks). By default checks at\n"
+#~ "\t\t\t level 1.\n"
+#~ " -I<file> force usage of <file> as reference symbols\n"
+#~ " file instead of the default file.\n"
+#~ " -O<file> write to <file>, not .../DEBIAN/symbols.\n"
+#~ " -O write to stdout, not .../DEBIAN/symbols.\n"
+#~ " -t write in template mode (tags are not\n"
+#~ " processed and included in output).\n"
+#~ " -V verbose output. Write deprecated symbols and\n"
+#~ " pattern matching symbols as comments\n"
+#~ " (in template mode only).\n"
+#~ " -d display debug information during work.\n"
+#~ " -h, --help show this help message.\n"
+#~ " --version show the version.\n"
+#~ msgstr ""
+#~ "Aufruf: %s [<Option> …]\n"
+#~ "\n"
+#~ "Optionen:\n"
+#~ " -p<Paket> erstelle Symboldatei für Paket\n"
+#~ " -P<Paketbauverz> temporäres Bauverzeichnis (statt debian/tmp)\n"
+#~ " -e<Bibliothek> explizite Liste von zu durchsuchenden Dateien\n"
+#~ " -v<Version> Version des Pakets (standardmäßig\n"
+#~ " aus debian/changelog extrahierte Version)\n"
+#~ " -c<Stufe> vergleiche erstellte Symboldatei mit der\n"
+#~ " Referenzdatei im debian-Verzeichnis\n"
+#~ "\t\t\t Schlägt fehl, falls die Unterschiede zu wichtig\n"
+#~ "\t\t\t sind (Stufe läuft von 0 für keine Prüfung bis zu\n"
+#~ "\t\t\t 4 für alle Prüfungen). Standardmäßig wird auf\n"
+#~ "\t\t\t Stufe 1 geprüft.\n"
+#~ " -I<Datei> erzwingt Verwendung von <Datei> statt der\n"
+#~ " standardmäßigen Datei als Referenz-Symbol-"
+#~ "Datei.\n"
+#~ " -O<Datei> schreibe in <Datei> nicht .../DEBIAN/symbols\n"
+#~ " -O schreibe nach Stdout nicht .../DEBIAN/symbols\n"
+#~ " -t schreibe im Vorlagenmodus (Markierungen "
+#~ "werden\n"
+#~ " nicht verarbeitet und in die Ausgabe "
+#~ "aufgenommen)\n"
+#~ " -V detaillierte Ausgabe. Schreibe veraltete "
+#~ "Symbole\n"
+#~ " und Muster, die auf Symbole passen, als "
+#~ "Kommmentare\n"
+#~ " (nur im Vorlagen-Modus)\n"
+#~ " -d zeige bei Arbeit Debug-Informationen an\n"
+#~ " -h, --help zeige diese Hilfemeldung\n"
+#~ " --version zeige die Version\n"
+
+#~ msgid "some symbols disappeared in the symbols file: %s"
+#~ msgstr "einige Symbole sind aus der Symboldatei verschwunden: %s"
+
+#~ msgid "fork for %s"
+#~ msgstr "Fork für %s"
+
+#~ msgid "Unknown checksum algorithm `%s', ignoring"
+#~ msgstr "Ignoriere unbekannter Prüfsummenalgorithmus »%s«"
+
+#~ msgid "Checksums-%s field contains bad line `%s'"
+#~ msgstr "Prüfsummen-%s-Feld enthält ungültige Zeile »%s«"
+
+#~ msgid "you can't use wildcards on unversioned symbols: %s"
+#~ msgstr ""
+#~ "Sie können keine Joker-Zeichen für unversionierte Symbole verwenden: %s"
+
+#~ msgid "Dpkg::Source::Compressor can only start one subprocess at a time"
+#~ msgstr ""
+#~ "Dpkg::Source::Compressor kann nur einen Unterprozess auf einmal starten"
+
+#~ msgid "file `%s' listed twice in Files field"
+#~ msgstr "Datei »%s« zweimal im Feld Files aufgeführt"
+
+#~ msgid "unable to open substvars file %s: %s"
+#~ msgstr "kann substvars-Datei %s nicht öffnen: %s"
+
+#~ msgid "applying all patches with %s"
+#~ msgstr "wende alle Patches mit %s an"
+
+#~ msgid "Couldn't call dpkg-deb on %s: %s, skipping package"
+#~ msgstr "Konnte dpkg-deb auf %s nicht aufrufen: %s, überspringe Paket"
+
+#~ msgid ""
+#~ "Unprocessed text from %s control file; info:\n"
+#~ "%s / %s"
+#~ msgstr ""
+#~ "Unbearbeiteter Text aus %s Steuerdatei; Information:\n"
+#~ "%s / %s"
+
+#~ msgid "fatal error"
+#~ msgstr "fataler Fehler"
+
+#~ msgid "can't open file %s: %s"
+#~ msgstr "kann Datei %s nicht öffnen: %s"
+
+#~ msgid "can't load IO::String: %s"
+#~ msgstr "kann IO::String nicht laden: %s"
+
+#~ msgid "can't close file %s: %s"
+#~ msgstr "kann Datei %s nicht schließen: %s"
+
+#~ msgid "Couldn't open override file %s"
+#~ msgstr "konnte override-Datei %s nicht öffnen"
+
+#~ msgid "can't read override file %s"
+#~ msgstr "kann Override-Datei %s nicht lesen"
+
+#~ msgid "error closing override file"
+#~ msgstr "Fehler beim Schließen der Override-Datei"
+
+#~ msgid "can't read source override file %s"
+#~ msgstr "kann Quell-Override-Datei %s nicht lesen"
+
+#~ msgid "error closing source override file"
+#~ msgstr "Fehler beim Schließen der Quell-Override-Datei"
+
+#~ msgid "parsing an empty file %s"
+#~ msgstr "kann leere Datei %s nicht auswerten"
+
+#~ msgid "exec du"
+#~ msgstr "exec du"
+
+#~ msgid "can't fork"
+#~ msgstr "kann keinen Fork durchführen"
+
+#~ msgid "cannot fork for dpkg --search"
+#~ msgstr "kann Fork für »dpkg --search« nicht durchführen"
+
+#~ msgid "unable to open cputable"
+#~ msgstr "konnte cputable nicht öffnen"
+
+#~ msgid "unable to open ostable"
+#~ msgstr "konnte ostable nicht öffnen"
+
+#~ msgid "unable to open triplettable"
+#~ msgstr "konnte triplettable nicht öffnen"
+
+#~ msgid "cannot fork for objdump"
+#~ msgstr "kann keinen Fork für Objdump ausführen"
+
+#~ msgid "can't write %s"
+#~ msgstr "kann %s nicht schreiben"
+
+#~ msgid "can't read %s"
+#~ msgstr "kann %s nicht lesen"
+
+#~ msgid "%s has PGP start token but not end token"
+#~ msgstr "%s hat PGP »start«-Markierung aber keine »end«-Markierung"
+
+#~ msgid "can't read %s: %s"
+#~ msgstr "kann %s nicht lesen: %s"
+
+#~ msgid "%s invalid (contains blank line)"
+#~ msgstr "%s ungültig (enthält Leerzeile)"
+
+#~ msgid "duplicate source field in %s"
+#~ msgstr "doppeltes Quell-Feld in %s"
+
+#~ msgid "duplicate binary field in %s"
+#~ msgstr "doppeltes Binärfeld in %s"
+
+#~ msgid "Strange text from 'md5sum < %s': '%s'"
+#~ msgstr "Merkwürdiger Text von »md5sum < %s«: »%s«"
+
+#~ msgid "Couldn't stat %s"
+#~ msgstr "konnte kein Stat auf %s ausführen"
+
+#~ msgid "error doing fstat on %s: %s"
+#~ msgstr "Fehler beim Fstat auf %s: %s"
+
+#~ msgid "can't fork: %s"
+#~ msgstr "kann keinen Fork durchführen: %s"
+
+#~ msgid "can't dup %s"
+#~ msgstr "kann dup von %s nicht ausführen"
+
+#~ msgid "can't rewind %s"
+#~ msgstr "kann %s nicht zurückspulen"
+
+#~ msgid "can't exec md5sum"
+#~ msgstr "kann md5sum nicht ausführen"
+
+#~ msgid "invalid md5 output for %s (%s)"
+#~ msgstr "ungültige md5-Ausgabe für %s (%s)"
+
+#~ msgid "Usage: 822-date"
+#~ msgstr "Aufruf: 822-date"
+
+#~ msgid "This program is deprecated. Please use 'date -R' instead."
+#~ msgstr ""
+#~ "Dieses Programm ist veraltet. Bitte verwenden Sie stattdessen »date -R«."
+
+#~ msgid "cannot combine %s and -S"
+#~ msgstr "kann %s und -S nicht kombinieren"
+
+#~ msgid ""
+#~ "substvars support is deprecated (see README.feature-removal-schedule)"
+#~ msgstr ""
+#~ "Substvars-Unterstützung ist veraltet (lesen Sie README.feature-removal-"
+#~ "schedule)"
+
+#~ msgid "Dpkg::Deps::Simple can't evaluate implication with a %s!"
+#~ msgstr ""
+#~ "Dpkg::Deps::Simple kann die Implikation von einem %s nicht evaluieren!"
+
+#~ msgid "failure"
+#~ msgstr "Fehlschlag"
+
+#~ msgid "field %s has newline then non whitespace >%s<"
+#~ msgstr ""
+#~ "Feld %s hat einen Zeilenumbruch und dann ein Nichtleerraumzeichen >%s<"
+
+#~ msgid "field %s has blank lines >%s<"
+#~ msgstr "Feld %s hat Leerzeilen >%s<"
+
+#~ msgid "field %s has trailing newline >%s<"
+#~ msgstr "Feld %s hat ein abschließenden Zeilenumbruch >%s<"
+
+#~ msgid "invalid exec parameter in fork_and_exec()"
+#~ msgstr "ungültiger Ausführparameter in fork_and_exec()"
+
+#~ msgid "no PID set, cannot wait end of process"
+#~ msgstr "keine PID gesetzt, kann nicht auf Prozessende warten"
+
+#~ msgid "tried to add file `%s' twice"
+#~ msgstr "versuchte zweimal Datei »%s« hinzuzufügen"
+
+#~ msgid "diff `%s' is missing trailing newline"
+#~ msgstr "Diff »%s« fehlt ein abschließender Zeilenumbruch"
+
+#~ msgid "cannot fstat upload file %s"
+#~ msgstr "kann keinen »fstat« auf hochzuladene Datei %s durchführen"
+
+#~ msgid "upload file %s is empty"
+#~ msgstr "hochzuladene Datei %s ist leer"
+
+#~ msgid "md5sum upload file %s"
+#~ msgstr "md5sum der hochzuladenen Datei %s"
+
+#~ msgid "md5sum upload file %s gave strange output `%s'"
+#~ msgstr ""
+#~ "Die Ausgabe von md5sum für die hochzuladene Datei %s war merkwürdig: »%s«"
+
+#~ msgid "md5sum of source file %s (%s) is different from md5sum in %s (%s)"
+#~ msgstr ""
+#~ "md5sum der Quelldatei %s (%s) unterscheidet sich von md5sum in %s (%s)"
+
+#~ msgid ""
+#~ "\n"
+#~ "Copyright (C) 1996 Ian Jackson and Klee Dienes."
+#~ msgstr ""
+#~ "\n"
+#~ "Copyright (C) 1996 Ian Jackson and Klee Dienes."
+
+#~ msgid "unable to determine source package name !"
+#~ msgstr "kann Quellpaketnamen nicht bestimmen!"
+
+#~ msgid "fork for tar"
+#~ msgstr "Fork für Tar"
+
+#~ msgid "chdir to above (orig) source %s"
+#~ msgstr "Chdir zu obiger (original-)Quelle %s"
+
+#~ msgid "exec tar"
+#~ msgstr "exec tar"
+
+#~ msgid "write using existing tar message"
+#~ msgstr "schreibe unter Benutzung existierender tar-Meldungen"
+
+#~ msgid "fork for find"
+#~ msgstr "Fork für Find"
+
+#~ msgid "chdir to %s for find"
+#~ msgstr "wechsle für find Verzeichnis nach %s"
+
+#~ msgid "exec find"
+#~ msgstr "führe find aus"
+
+#~ msgid "cannot read orig link %s"
+#~ msgstr "kann Originallink %s nicht lesen"
+
+#~ msgid "something else"
+#~ msgstr "etwas anderes"
+
+#~ msgid "fork for diff"
+#~ msgstr "Fork für Diff"
+
+#~ msgid "diff gave 1 but no diff lines found"
+#~ msgstr "Diff ergab 1 aber keine Diffzeilen gefunden"
+
+#~ msgid "fork for 2nd find"
+#~ msgstr "For für zweiten Find"
+
+#~ msgid "create %s"
+#~ msgstr "lege %s an"
+
+#~ msgid "write error msg: %s"
+#~ msgstr "schreibe Fehlermeldung: %s"
+
+#~ msgid "cannot open .dsc file %s: %s"
+#~ msgstr "kann .dsc-Datei %s nicht öffnen: %s"
+
+#~ msgid "Unsupported format of .dsc file (%s)"
+#~ msgstr "Nicht unterstütztes Format der .dsc-Datei (%s)"
+
+#~ msgid "repeated file type - files `%s' and `%s'"
+#~ msgstr "wiederholter Dateityp - Dateien »%s« und »%s«"
+
+#~ msgid "unrecognised file type - `%s'"
+#~ msgstr "unerkannter Dateityp - »%s«"
+
+#~ msgid "debian.tar in %s format dsc"
+#~ msgstr "debian.tar im %s-Format dsc"
+
+#~ msgid "failed to create %s subdirectory"
+#~ msgstr "Fehler beim Anlegen des Unterverzeichnisses %s"
+
+#~ msgid "fork for patch"
+#~ msgstr "Fork für Patch"
+
+#~ msgid "wait for patch"
+#~ msgstr "Warte auf Patch"
+
+#~ msgid "fork for cpio"
+#~ msgstr "Fork für Cpio"
+
+#~ msgid "fork for tar -t"
+#~ msgstr "Fork für tar -t"
+
+#~ msgid "tarfile `%s' contains file with name ending in .dpkg-orig"
+#~ msgstr "Tar-Datei »%s« enthält Datei deren Namen auf ».dpkg-orig« endet"
+
+#~ msgid "tarfile `%s' contains object `debian' that isn't a directory"
+#~ msgstr "Tar-Datei »%s« enthält ein Objekt »debian« das kein Verzeichnis ist"
+
+#~ msgid "Expected ^@@ in line %d of diff `%s'"
+#~ msgstr "Erwartete ^@@ in Zeile %d des Diffs »%s«"
+
+#~ msgid "fork for tar -xkf -"
+#~ msgstr "Fork für tar -xkf -"
+
+#~ msgid "wait for tar -xkf -"
+#~ msgstr "Warte auf tar -xkf -"
+
+#~ msgid "Unable to close dir %s"
+#~ msgstr "Kann Verzeichnis %s nicht schließen"
+
+#~ msgid "Unable to mkdir %s"
+#~ msgstr "Kann %s nicht erstellen"
+
+#~ msgid "create file %s"
+#~ msgstr "lege Datei %s an"
+
+#~ msgid "fork for gzip"
+#~ msgstr "Fork für Gzip"
+
+#~ msgid "exec gzip"
+#~ msgstr "exec gzip"
+
+#~ msgid "wait for gzip"
+#~ msgstr "Warte auf gzip"
+
+#~ msgid "could not stat output file `%s'"
+#~ msgstr "konnte keinen Stat auf Ausgabedatei »%s« durchführen"
+
+#~ msgid "bogus character `\\%s' in `%s'"
+#~ msgstr "fehlerhaftes Zeichen »\\%s« in »%s«"
+
+#~ msgid "couldn't open %s"
+#~ msgstr "konnte %s nicht öffnen"
+
+#~ msgid "couldn't close %s"
+#~ msgstr "konnte %s nicht schließen"
+
+#~ msgid "Can't open %s for test: %s"
+#~ msgstr "Kann %s nicht zum Testen öffnen: %s"
+
+#~ msgid "Can't execute objdump: %s"
+#~ msgstr "Kann objdump nicht ausführen: %s"
+
+#~ msgid "Can't open %s: %s"
+#~ msgstr "Kann %s nicht öffnen: %s"
+
+#~ msgid "Can't open %s for writing: %s"
+#~ msgstr "Kann %s nicht zum Schreiben öffnen: %s"
+
+#~ msgid "unable to get login information for username \"%s\""
+#~ msgstr ""
+#~ "Kann Anmeldeinformationen für den Benutzernamen »%s« nicht ermitteln"
+
+#~ msgid ""
+#~ "no utmp entry available and LOGNAME not defined; using uid of process (%d)"
+#~ msgstr ""
+#~ "kein utmp-Eintrag verfügbar und LOGNAME nicht definiert; verwende UID von "
+#~ "Prozess (%d)"
+
+#~ msgid "unable to get login information for uid %d"
+#~ msgstr "kann Anmeldeinformationen für UID %d nicht ermitteln"
+
+#~ msgid "write error on close control data"
+#~ msgstr "Schreibfehler beim Schließen der Steuerdaten (»control data«)"
+
+#~ msgid "control file must have at least one binary package part"
+#~ msgstr "Steuerdatei muss mindestens einen Binärpaket-Anteil haben"
+
+#~ msgid ""
+#~ "per-package paragraph %d in control info file is missing Package line"
+#~ msgstr ""
+#~ "die »Package«-Zeile im pro-Paket Absatz %d in der Steuerinformationsdatei "
+#~ "fehlt"
+
+#~ msgid "source paragraph in control info file is missing Source line"
+#~ msgstr ""
+#~ "die »Source«-Zeile im Quell-Absatz der Steuerinformationsdatei fehlt"
+
+#~ msgid "fork for parse changelog"
+#~ msgstr "forke zum Auswerten des Changelogs"
+
+#~ msgid "parse changelog"
+#~ msgstr "werte Changelog aus"
+
+#~ msgid "expected blank line before PGP signature"
+#~ msgstr "erwartete Leerzeile vor PGP-Signatur"
+
+#~ msgid "found several `paragraphs' where only one expected"
+#~ msgstr "fand mehrere »Absätze« wo nur einer erwartet wurde"
+
+#~ msgid "found start of PGP body but no signature"
+#~ msgstr "fand Anfang des PGP-Körpers aber keine Signatur"
+
+#~ msgid "empty file"
+#~ msgstr "leere Datei"
+
+#~ msgid "chown new files list file"
+#~ msgstr "chown neue Dateilistendatei"
+
+#~ msgid "value from nowhere, with key >%s< and value >%s<"
+#~ msgstr "Wert von nirgendwo, mit Schlüssel >%s< und Wert >%s<"
+
+#~ msgid "cannot combine -b or -B and -S"
+#~ msgstr "kann -b oder -B nicht mit -S kombinieren"
+
+#~ msgid ""
+#~ "couldn't find library %s (note: only packages with 'shlibs' files are "
+#~ "looked into)."
+#~ msgstr ""
+#~ "konnte Bibliothek %s nicht finden (Hinweis: nur Pakete mit »shlibs«-"
+#~ "Dateien werden betrachtet)."
diff --git a/scripts/po/dpkg-dev.pot b/scripts/po/dpkg-dev.pot
new file mode 100644
index 0000000..c6e2605
--- /dev/null
+++ b/scripts/po/dpkg-dev.pot
@@ -0,0 +1,3587 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Dpkg Developers
+# This file is distributed under the same license as the dpkg package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: dpkg 1.21.22\n"
+"Report-Msgid-Bugs-To: debian-dpkg@lists.debian.org\n"
+"POT-Creation-Date: 2023-05-11 02:03+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"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+
+#: scripts/dpkg-architecture.pl scripts/dpkg-buildflags.pl
+#: scripts/dpkg-buildpackage.pl scripts/dpkg-checkbuilddeps.pl
+#: scripts/dpkg-distaddfile.pl scripts/dpkg-genbuildinfo.pl
+#: scripts/dpkg-genchanges.pl scripts/dpkg-gencontrol.pl
+#: scripts/dpkg-gensymbols.pl scripts/dpkg-mergechangelogs.pl
+#: scripts/dpkg-name.pl scripts/dpkg-parsechangelog.pl
+#: scripts/dpkg-scanpackages.pl scripts/dpkg-scansources.pl
+#: scripts/dpkg-shlibdeps.pl scripts/dpkg-source.pl scripts/dpkg-vendor.pl
+#, perl-format
+msgid "Debian %s version %s.\n"
+msgstr ""
+
+#: scripts/dpkg-architecture.pl scripts/dpkg-buildflags.pl
+#: scripts/dpkg-buildpackage.pl scripts/dpkg-distaddfile.pl
+#: scripts/dpkg-genbuildinfo.pl scripts/dpkg-genchanges.pl
+#: scripts/dpkg-gencontrol.pl scripts/dpkg-gensymbols.pl
+#: scripts/dpkg-parsechangelog.pl scripts/dpkg-shlibdeps.pl
+#: scripts/dpkg-source.pl scripts/dpkg-vendor.pl
+msgid ""
+"\n"
+"This is free software; see the GNU General Public License version 2 or\n"
+"later for copying conditions. There is NO warranty.\n"
+msgstr ""
+
+#: scripts/dpkg-architecture.pl scripts/dpkg-vendor.pl
+#, perl-format
+msgid "Usage: %s [<option>...] [<command>]"
+msgstr ""
+
+#: scripts/dpkg-architecture.pl
+msgid ""
+"Commands:\n"
+" -l, --list list variables (default).\n"
+" -L, --list-known list valid architectures (matching some "
+"criteria).\n"
+" -e, --equal <arch> compare with host Debian architecture.\n"
+" -i, --is <arch-wildcard> match against host Debian architecture.\n"
+" -q, --query <variable> prints only the value of <variable>.\n"
+" -s, --print-set print command to set environment variables.\n"
+" -u, --print-unset print command to unset environment variables.\n"
+" -c, --command <command> set environment and run the command in it.\n"
+" -?, --help show this help message.\n"
+" --version show the version."
+msgstr ""
+
+#: scripts/dpkg-architecture.pl
+msgid ""
+"Options:\n"
+" -a, --host-arch <arch> set host Debian architecture.\n"
+" -t, --host-type <type> set host GNU system type.\n"
+" -A, --target-arch <arch> set target Debian architecture.\n"
+" -T, --target-type <type> set target GNU system type.\n"
+" -W, --match-wildcard <arch-wildcard>\n"
+" restrict architecture list matching <arch-"
+"wildcard>.\n"
+" -B, --match-bits <arch-bits>\n"
+" restrict architecture list matching <arch-"
+"bits>.\n"
+" -E, --match-endian <arch-endian>\n"
+" restrict architecture list matching <arch-"
+"endian>.\n"
+" --print-format <format>\n"
+" use <format> for --print-set and --print-unset,\n"
+" allowed values: shell (default), make.\n"
+" -f, --force force flag (override variables set in "
+"environment)."
+msgstr ""
+
+#: scripts/dpkg-architecture.pl
+#, perl-format
+msgid "unknown Debian architecture %s, you must specify GNU system type, too"
+msgstr ""
+
+#: scripts/dpkg-architecture.pl
+#, perl-format
+msgid "unknown GNU system type %s, you must specify Debian architecture, too"
+msgstr ""
+
+#: scripts/dpkg-architecture.pl
+#, perl-format
+msgid "unknown default GNU system type for Debian architecture %s"
+msgstr ""
+
+#: scripts/dpkg-architecture.pl
+#, perl-format
+msgid ""
+"default GNU system type %s for Debian arch %s does not match specified GNU "
+"system type %s"
+msgstr ""
+
+#: scripts/dpkg-architecture.pl
+#, perl-format
+msgid "%s is not a supported print format"
+msgstr ""
+
+#: scripts/dpkg-architecture.pl
+#, perl-format
+msgid "%s is not a supported variable name"
+msgstr ""
+
+#: scripts/dpkg-architecture.pl scripts/dpkg-buildflags.pl
+#: scripts/dpkg-distaddfile.pl scripts/dpkg-genbuildinfo.pl
+#: scripts/dpkg-genchanges.pl scripts/dpkg-gencontrol.pl
+#: scripts/dpkg-gensymbols.pl scripts/dpkg-name.pl
+#: scripts/dpkg-parsechangelog.pl scripts/dpkg-shlibdeps.pl
+#: scripts/dpkg-vendor.pl
+#, perl-format
+msgid "unknown option '%s'"
+msgstr ""
+
+#: scripts/dpkg-architecture.pl
+#, perl-format
+msgid ""
+"specified GNU system type %s does not match CC system type %s, try setting a "
+"correct CC environment variable"
+msgstr ""
+
+#: scripts/dpkg-architecture.pl scripts/dpkg-shlibdeps.pl scripts/Dpkg/IPC.pm
+#: scripts/Dpkg/Shlibs/Cppfilt.pm
+#, perl-format
+msgid "unable to execute %s"
+msgstr ""
+
+#: scripts/dpkg-buildflags.pl
+#, perl-format
+msgid "Usage: %s [<command>]"
+msgstr ""
+
+#: scripts/dpkg-buildflags.pl
+msgid ""
+"Commands:\n"
+" --get <flag> output the requested flag to stdout.\n"
+" --origin <flag> output the origin of the flag to stdout:\n"
+" value is one of vendor, system, user, env.\n"
+" --status output a synopsis with all parameters affecting the\n"
+" program behaviour, the resulting flags and their "
+"origin.\n"
+" --query like --status, but in deb822 format.\n"
+" --query-features <area>\n"
+" output the status of features for the given area.\n"
+" --list output a list of the flags supported by the current "
+"vendor.\n"
+" --export=(sh|make|cmdline|configure)\n"
+" output something convenient to import the compilation\n"
+" flags in a shell script, in make, or in a command "
+"line.\n"
+" --dump output all compilation flags with their values.\n"
+" --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+
+#: scripts/dpkg-buildflags.pl scripts/dpkg-source.pl scripts/dpkg-vendor.pl
+#, perl-format
+msgid "two commands specified: --%s and --%s"
+msgstr ""
+
+#: scripts/dpkg-buildflags.pl scripts/dpkg-vendor.pl
+#, perl-format
+msgid "%s needs a parameter"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl scripts/dpkg-genbuildinfo.pl
+#: scripts/dpkg-genchanges.pl scripts/dpkg-gencontrol.pl
+#: scripts/dpkg-gensymbols.pl scripts/dpkg-parsechangelog.pl
+#, perl-format
+msgid "Usage: %s [<option>...]"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+msgid ""
+"Options:\n"
+" --build=<type>[,...] specify the build <type>: full, source, "
+"binary,\n"
+" any, all (default is 'full').\n"
+" -F, --build=full normal full build (source and binary; "
+"default).\n"
+" -g, --build=source,all source and arch-indep build.\n"
+" -G, --build=source,any source and arch-specific build.\n"
+" -b, --build=binary binary-only, no source files.\n"
+" -B, --build=any binary-only, only arch-specific files.\n"
+" -A, --build=all binary-only, only arch-indep files.\n"
+" -S, --build=source source-only, no binary files.\n"
+" -nc, --no-pre-clean do not pre clean source tree (implies -b).\n"
+" --pre-clean pre clean source tree (default).\n"
+" --no-post-clean do not post clean source tree (default).\n"
+" -tc, --post-clean post clean source tree.\n"
+" --sanitize-env sanitize the build environment.\n"
+" -D, --check-builddeps check build dependencies and conflicts "
+"(default).\n"
+" -d, --no-check-builddeps do not check build dependencies and "
+"conflicts.\n"
+" --ignore-builtin-builddeps\n"
+" do not check builtin build dependencies.\n"
+" -P, --build-profiles=<profiles>\n"
+" assume comma-separated build <profiles> as "
+"active.\n"
+" --rules-requires-root assume legacy Rules-Requires-Root field "
+"value.\n"
+" -R, --rules-file=<rules> rules file to execute (default is debian/"
+"rules).\n"
+" -T, --rules-target=<target> call debian/rules <target>.\n"
+" --as-root ensure -T calls the target with root rights.\n"
+" -j, --jobs[=<jobs>|auto] jobs to run simultaneously (passed to "
+"<rules>),\n"
+" (default; default is auto, opt-in mode).\n"
+" -J, --jobs-try[=<jobs>|auto]\n"
+" alias for -j, --jobs.\n"
+" --jobs-force[=<jobs>|auto]\n"
+" jobs to run simultaneously (passed to "
+"<rules>),\n"
+" (default is auto, forced mode).\n"
+" -r, --root-command=<command>\n"
+" command to gain root rights (default is "
+"fakeroot).\n"
+" --check-command=<command>\n"
+" command to check the .changes file (no "
+"default).\n"
+" --check-option=<opt> pass <opt> to check <command>.\n"
+" --hook-<name>=<command> set <command> as the hook <name>, known "
+"hooks:\n"
+" init preclean source build binary buildinfo\n"
+" changes postclean check sign done\n"
+" --buildinfo-file=<file> set the .buildinfo filename to generate.\n"
+" --buildinfo-option=<opt>\n"
+" pass option <opt> to dpkg-genbuildinfo.\n"
+" --changes-file=<file> set the .changes filename to generate.\n"
+" --sign-backend=<backend>\n"
+" OpenPGP backend to use to sign\n"
+" (default is auto).\n"
+" -p, --sign-command=<command>\n"
+" command to sign .dsc and/or .changes files\n"
+" (default is gpg).\n"
+" --sign-keyfile=<file> the key file to use for signing.\n"
+" -k, --sign-keyid=<keyid> the key id to use for signing.\n"
+" --sign-key=<keyid> alias for -k, --sign-keyid.\n"
+" -ap, --sign-pause add pause before starting signature process.\n"
+" -us, --unsigned-source unsigned source package.\n"
+" -ui, --unsigned-buildinfo unsigned .buildinfo file.\n"
+" -uc, --unsigned-changes unsigned .buildinfo and .changes file.\n"
+" --no-sign do not sign any file.\n"
+" --force-sign force signing the resulting files.\n"
+" --admindir=<directory> change the administrative directory.\n"
+" -?, --help show this help message.\n"
+" --version show the version."
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+msgid ""
+"Options passed to dpkg-architecture:\n"
+" -a, --host-arch <arch> set the host Debian architecture.\n"
+" -t, --host-type <type> set the host GNU system type.\n"
+" --target-arch <arch> set the target Debian architecture.\n"
+" --target-type <type> set the target GNU system type."
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+msgid ""
+"Options passed to dpkg-genchanges:\n"
+" -si source includes orig, if new upstream "
+"(default).\n"
+" -sa source includes orig, always.\n"
+" -sd source is diff and .dsc only.\n"
+" -v<version> changes since version <version>.\n"
+" -m, --source-by=<maint> maintainer for this source or build is "
+"<maint>.\n"
+" --build-by=<maint> ditto.\n"
+" -e, --release-by=<maint> maintainer for this change or release is "
+"<maint>.\n"
+" --changed-by=<maint> ditto.\n"
+" -C<descfile> changes are described in <descfile>.\n"
+" --changes-option=<opt> pass option <opt> to dpkg-genchanges."
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+msgid ""
+"Options passed to dpkg-source:\n"
+" -sn force Debian native source format.\n"
+" -s[sAkurKUR] see dpkg-source for explanation.\n"
+" -z, --compression-level=<level>\n"
+" compression level to use for source.\n"
+" -Z, --compression=<compressor>\n"
+" compression to use for source (gz|xz|bzip2|"
+"lzma).\n"
+" -i, --diff-ignore[=<regex>] ignore diffs of files matching <regex>.\n"
+" -I, --tar-ignore[=<pattern>]\n"
+" filter out files when building tarballs.\n"
+" --source-option=<opt> pass option <opt> to dpkg-source.\n"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+msgid "missing .buildinfo filename"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "passing %s via %s is not supported; please use %s instead"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+msgid "missing .changes filename"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "unknown hook name %s"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "missing hook %s command"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl scripts/dpkg-genbuildinfo.pl
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid "%s is deprecated; it is without effect"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "-s%s is deprecated; always using gpg style interface"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "unknown option or argument %s"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "option %s is only meaningful with option %s"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "check-command '%s' not found"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "sign-command '%s' not found"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source package"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source version"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source distribution"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source changed by"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+msgid "host architecture"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+msgid "debian/rules is not executable; fixing that"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+msgid "build dependencies/conflicts unsatisfied; aborting"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+msgid "(Use -d flag to override.)"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+msgid ""
+"building a source package without cleaning up as you asked; it might contain "
+"undesired files"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+msgid "Press <enter> to start the signing process.\n"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+msgid "not signing UNRELEASED build; use --force-sign to override"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "unable to determine %s"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+msgid "using a gain-root-command while being root"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+msgid ""
+"fakeroot not found, either install the fakeroot\n"
+"package, specify a command with the -r option, or run this as root"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "gain-root-command '%s' not found"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "disallowed target in %s field keyword \"%s\""
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "%s field keyword \"%s\" is unknown in dpkg namespace"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "%s field keyword \"%s\" is uppercase; use \"%s\" instead"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "%s field keyword \"%s\" is invalid; use \"%s\" instead"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "%s field keyword \"%s\" is unknown"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "field %s contains duplicate keyword \"%s\""
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "%s field contains both global and implementation specific keywords"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "unknown %% substitution in hook: %%%s"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid ""
+"short OpenPGP key IDs are broken; please use key fingerprints in %s or %s "
+"instead"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid ""
+"long OpenPGP key IDs are strongly discouraged; please use key fingerprints "
+"in %s or %s instead"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl scripts/dpkg-checkbuilddeps.pl
+#: scripts/dpkg-genbuildinfo.pl scripts/dpkg-name.pl scripts/Dpkg/Arch.pm
+#: scripts/Dpkg/IPC.pm scripts/Dpkg/Shlibs.pm
+#, perl-format
+msgid "cannot open %s"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl scripts/dpkg-distaddfile.pl
+#: scripts/dpkg-genbuildinfo.pl scripts/dpkg-gencontrol.pl
+#: scripts/Dpkg/Interface/Storable.pm scripts/Dpkg/Source/Package/V2.pm
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot close %s"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "cannot move %s to %s"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "failed to sign %s file: %s"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source-only upload: Debian-native package"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source-only, diff-only upload (original source NOT included)"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source-only upload (original source is included)"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+msgid "binary-only upload (no source included)"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+msgid "full upload; Debian-native package (full source is included)"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+msgid "binary and diff upload (original source NOT included)"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+msgid "full upload (original source is included)"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid ""
+"%s must be updated to support the 'build-arch' and 'build-indep' targets (at "
+"least '%s' seems to be missing)"
+msgstr ""
+
+#: scripts/dpkg-checkbuilddeps.pl
+#, perl-format
+msgid "Usage: %s [<option>...] [<control-file>]"
+msgstr ""
+
+#: scripts/dpkg-checkbuilddeps.pl
+msgid ""
+"Options:\n"
+" -A ignore Build-Depends-Arch and Build-Conflicts-Arch.\n"
+" -B ignore Build-Depends-Indep and Build-Conflicts-Indep.\n"
+" -I ignore built-in build dependencies and conflicts.\n"
+" -d build-deps use given string as build dependencies instead of\n"
+" retrieving them from control file\n"
+" -c build-conf use given string for build conflicts instead of\n"
+" retrieving them from control file\n"
+" -a arch assume given host architecture\n"
+" -P profiles assume given build profiles (comma-separated list)\n"
+" --admindir=<directory>\n"
+" change the administrative directory.\n"
+" -?, --help show this help message.\n"
+" --version show the version."
+msgstr ""
+
+#: scripts/dpkg-checkbuilddeps.pl
+msgid ""
+"<control-file> is the control file to process (default: debian/control)."
+msgstr ""
+
+#: scripts/dpkg-checkbuilddeps.pl scripts/dpkg-shlibdeps.pl
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "cannot parse %s field"
+msgstr ""
+
+#: scripts/dpkg-checkbuilddeps.pl
+#, perl-format
+msgid "Unmet build dependencies: %s"
+msgstr ""
+
+#: scripts/dpkg-checkbuilddeps.pl
+#, perl-format
+msgid "Build conflicts: %s"
+msgstr ""
+
+#: scripts/dpkg-distaddfile.pl
+#, perl-format
+msgid ""
+"Usage: %s [<option>...] <filename> <section> <priority>\n"
+"\n"
+"Options:\n"
+" -f<files-list-file> write files here instead of debian/files.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+
+#: scripts/dpkg-distaddfile.pl
+msgid "need exactly a filename, section and priority"
+msgstr ""
+
+#: scripts/dpkg-distaddfile.pl
+msgid "filename, section and priority may contain no whitespace"
+msgstr ""
+
+#: scripts/dpkg-distaddfile.pl scripts/dpkg-genbuildinfo.pl
+#: scripts/dpkg-gencontrol.pl scripts/dpkg-mergechangelogs.pl
+#: scripts/Dpkg/Compression/FileHandle.pm scripts/Dpkg/File.pm
+#: scripts/Dpkg/IPC.pm scripts/Dpkg/Interface/Storable.pm
+#: scripts/Dpkg/Source/BinaryFiles.pm scripts/Dpkg/Source/Package.pm
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "cannot write %s"
+msgstr ""
+
+#: scripts/dpkg-distaddfile.pl scripts/dpkg-genbuildinfo.pl
+#: scripts/dpkg-gencontrol.pl
+msgid "install new files list file"
+msgstr ""
+
+#: scripts/dpkg-genbuildinfo.pl
+msgid ""
+"Options:\n"
+" --build=<type>[,...] specify the build <type>: full, source, binary,\n"
+" any, all (default is 'full').\n"
+" -c<control-file> get control info from this file.\n"
+" -l<changelog-file> get per-version info from this file.\n"
+" -f<files-list-file> get .deb files list from this file.\n"
+" -F<changelog-format> force changelog format.\n"
+" -O[<buildinfo-file>] write to stdout (or <buildinfo-file>).\n"
+" -u<upload-files-dir> directory with files (default is '..').\n"
+" --always-include-kernel always include Build-Kernel-Version.\n"
+" --always-include-path always include Build-Path.\n"
+" --admindir=<directory> change the administrative directory.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+
+#: scripts/dpkg-genbuildinfo.pl
+msgid "binary build with no binary artifacts found; .buildinfo is meaningless"
+msgstr ""
+
+#: scripts/dpkg-genbuildinfo.pl
+#, perl-format
+msgid "cannot install output buildinfo file '%s'"
+msgstr ""
+
+#: scripts/dpkg-genchanges.pl
+msgid ""
+"Options:\n"
+" --build=<type>[,...] specify the build <type>: full, source, binary,\n"
+" any, all (default is 'full').\n"
+" -g source and arch-indep build.\n"
+" -G source and arch-specific build.\n"
+" -b binary-only, no source files.\n"
+" -B binary-only, only arch-specific files.\n"
+" -A binary-only, only arch-indep files.\n"
+" -S source-only, no binary files.\n"
+" -c<control-file> get control info from this file.\n"
+" -l<changelog-file> get per-version info from this file.\n"
+" -f<files-list-file> get .deb files list from this file.\n"
+" -v<since-version> include all changes later than version.\n"
+" -C<changes-description> use change description from this file.\n"
+" -m<maintainer> override control's maintainer value.\n"
+" -e<maintainer> override changelog's maintainer value.\n"
+" -u<upload-files-dir> directory with files (default is '..').\n"
+" -si source includes orig, if new upstream (default).\n"
+" -sa source includes orig, always.\n"
+" -sd source is diff and .dsc only.\n"
+" -q quiet - no informational messages on stderr.\n"
+" -F<changelog-format> force changelog format.\n"
+" -V<name>=<value> set a substitution variable.\n"
+" -T<substvars-file> read variables here, not debian/substvars.\n"
+" -D<field>=<value> override or add a field and value.\n"
+" -U<field> remove a field.\n"
+" -O[<filename>] write to stdout (default) or <filename>.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "the current version (%s) is earlier than the previous one (%s)"
+msgstr ""
+
+#: scripts/dpkg-genchanges.pl
+msgid "missing Section for source files"
+msgstr ""
+
+#: scripts/dpkg-genchanges.pl
+msgid "missing Priority for source files"
+msgstr ""
+
+#: scripts/dpkg-genchanges.pl scripts/Dpkg/Vendor.pm
+#, perl-format
+msgid "%s is empty"
+msgstr ""
+
+#: scripts/dpkg-genchanges.pl
+msgid "not including original source code in upload"
+msgstr ""
+
+#: scripts/dpkg-genchanges.pl
+msgid "ignoring -sd option for native Debian package"
+msgstr ""
+
+#: scripts/dpkg-genchanges.pl
+msgid "including full source code in upload"
+msgstr ""
+
+#: scripts/dpkg-genchanges.pl
+msgid ""
+"binary-only arch-specific upload (source code and arch-indep packages not "
+"included)"
+msgstr ""
+
+#: scripts/dpkg-genchanges.pl
+msgid ""
+"binary-only arch-indep upload (source code and arch-specific packages not "
+"included)"
+msgstr ""
+
+#: scripts/dpkg-genchanges.pl
+msgid "binary-only upload (no source code included)"
+msgstr ""
+
+#: scripts/dpkg-genchanges.pl
+msgid "binary build with no binary artifacts found; cannot distribute"
+msgstr ""
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "package %s in control file but not in files list"
+msgstr ""
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "package %s listed in files list but not in control info"
+msgstr ""
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "missing Section for binary package %s; using '-'"
+msgstr ""
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "package %s has section %s in control file but %s in files list"
+msgstr ""
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "missing Priority for binary package %s; using '-'"
+msgstr ""
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "package %s has priority %s in control file but %s in files list"
+msgstr ""
+
+#: scripts/dpkg-genchanges.pl scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "missing information for critical output field %s"
+msgstr ""
+
+#: scripts/dpkg-genchanges.pl scripts/dpkg-gencontrol.pl
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "missing information for output field %s"
+msgstr ""
+
+#: scripts/dpkg-gencontrol.pl
+msgid ""
+"Options:\n"
+" -p<package> print control file for package.\n"
+" -c<control-file> get control info from this file.\n"
+" -l<changelog-file> get per-version info from this file.\n"
+" -F<changelog-format> force changelog format.\n"
+" -v<force-version> set version of binary package.\n"
+" -f<files-list-file> write files here instead of debian/files.\n"
+" -P<package-build-dir> temporary build directory instead of debian/tmp.\n"
+" -n<filename> assume the package filename will be <filename>.\n"
+" -O[<file>] write to stdout (or <file>), not .../DEBIAN/"
+"control.\n"
+" -is, -ip, -isp, -ips deprecated, ignored for compatibility.\n"
+" -D<field>=<value> override or add a field and value.\n"
+" -U<field> remove a field.\n"
+" -V<name>=<value> set a substitution variable.\n"
+" -T<substvars-file> read variables here, not debian/substvars.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+
+#: scripts/dpkg-gencontrol.pl scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "illegal package name '%s': %s"
+msgstr ""
+
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid "package %s not in control info"
+msgstr ""
+
+#: scripts/dpkg-gencontrol.pl scripts/dpkg-gensymbols.pl
+msgid "no package stanza found in control info"
+msgstr ""
+
+#: scripts/dpkg-gencontrol.pl scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "must specify package since control info has many (%s)"
+msgstr ""
+
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid "package %s: "
+msgstr ""
+
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid ""
+"current host architecture '%s' does not appear in package '%s' architecture "
+"list (%s)"
+msgstr ""
+
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid "%s field of package %s: "
+msgstr ""
+
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid "parsing package '%s' %s field: %s"
+msgstr ""
+
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid ""
+"the %s field contains an arch-specific dependency but the package '%s' is "
+"architecture all"
+msgstr ""
+
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid "%s package '%s' with udeb specific field %s"
+msgstr ""
+
+#: scripts/dpkg-gencontrol.pl scripts/Dpkg/Source/Package.pm
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot stat %s"
+msgstr ""
+
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid "cannot install output control file '%s'"
+msgstr ""
+
+#: scripts/dpkg-gensymbols.pl
+msgid ""
+"Options:\n"
+" -l<library-path> add directory to private shared library search "
+"list.\n"
+" -p<package> generate symbols file for package.\n"
+" -P<package-build-dir> temporary build directory instead of debian/tmp.\n"
+" -e<library> explicitly list libraries to scan.\n"
+" -v<version> version of the packages (defaults to\n"
+" version extracted from debian/changelog).\n"
+" -c<level> compare generated symbols file with the "
+"reference\n"
+" template in the debian directory and fail if\n"
+" difference is too important; level goes from 0 "
+"for\n"
+" no check, to 4 for all checks (default level is "
+"1).\n"
+" -q keep quiet and never emit any warnings or\n"
+" generate a diff between generated symbols\n"
+" file and the reference template.\n"
+" -I<file> force usage of <file> as reference symbols\n"
+" file instead of the default file.\n"
+" -O[<file>] write to stdout (or <file>), not .../DEBIAN/"
+"symbols.\n"
+" -t write in template mode (tags are not\n"
+" processed and included in output).\n"
+" -V verbose output; write deprecated symbols and "
+"pattern\n"
+" matching symbols as comments (in template mode "
+"only).\n"
+" -a<arch> assume <arch> as host architecture when "
+"processing\n"
+" symbol files.\n"
+" -d display debug information during work.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "pattern '%s' did not match any file"
+msgstr ""
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "can't read directory %s: %s"
+msgstr ""
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "Dpkg::Shlibs::Objdump couldn't parse %s\n"
+msgstr ""
+
+#: scripts/dpkg-gensymbols.pl
+msgid "<standard output>"
+msgstr ""
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "new libraries appeared in the symbols file: %s"
+msgstr ""
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "some libraries disappeared in the symbols file: %s"
+msgstr ""
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "some new symbols appeared in the symbols file: %s"
+msgstr ""
+
+#: scripts/dpkg-gensymbols.pl
+msgid "see diff output below"
+msgstr ""
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "some symbols or patterns disappeared in the symbols file: %s"
+msgstr ""
+
+#: scripts/dpkg-gensymbols.pl
+msgid "the generated symbols file is empty"
+msgstr ""
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "%s doesn't match completely %s"
+msgstr ""
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "no debian/symbols file used as basis for generating %s"
+msgstr ""
+
+#: scripts/dpkg-mergechangelogs.pl
+msgid ""
+"This is free software; see the GNU General Public License version 2 or\n"
+"later for copying conditions. There is NO warranty.\n"
+msgstr ""
+
+#: scripts/dpkg-mergechangelogs.pl
+#, perl-format
+msgid ""
+"Usage: %s [<option>...] <old> <new-a> <new-b> [<out>]\n"
+"\n"
+"Options:\n"
+" -m, --merge-prereleases merge pre-releases together, ignores everything\n"
+" after the last '~' in the version.\n"
+" --merge-unreleased merge UNRELEASED entries together, ignoring "
+"their\n"
+" version numbers.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+
+#: scripts/dpkg-mergechangelogs.pl
+msgid "needs at least three arguments"
+msgstr ""
+
+#: scripts/dpkg-mergechangelogs.pl
+msgid "file arguments need to exist"
+msgstr ""
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "Usage: %s [<option>...] <file>...\n"
+msgstr ""
+
+#: scripts/dpkg-name.pl
+msgid ""
+"\n"
+"Options:\n"
+" -a, --no-architecture no architecture part in filename.\n"
+" -o, --overwrite overwrite if file exists.\n"
+" -k, --symlink don't create a new file, but a symlink.\n"
+" -s, --subdir [dir] move file into subdirectory (use with care).\n"
+" -c, --create-dir create target directory if not there (use with "
+"care).\n"
+" -?, --help show this help message.\n"
+" -v, --version show the version.\n"
+"\n"
+"file.deb changes to <package>_<version>_<architecture>.<package_type>\n"
+"according to the 'underscores convention'.\n"
+msgstr ""
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "cannot find '%s'"
+msgstr ""
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "binary control file %s"
+msgstr ""
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "assuming architecture '%s' for '%s'"
+msgstr ""
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "bad package control information for '%s'"
+msgstr ""
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "assuming section '%s' for '%s'"
+msgstr ""
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "no Package field found in '%s', skipping package"
+msgstr ""
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "created directory '%s'"
+msgstr ""
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "cannot create directory '%s'"
+msgstr ""
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "no such directory '%s', try --create-dir (-c) option"
+msgstr ""
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "skipping '%s'"
+msgstr ""
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "cannot move '%s' to existing file"
+msgstr ""
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "moved '%s' to '%s'"
+msgstr ""
+
+#: scripts/dpkg-name.pl
+msgid "mkdir can be used to create directory"
+msgstr ""
+
+#: scripts/dpkg-name.pl
+msgid "need at least a filename"
+msgstr ""
+
+#: scripts/dpkg-parsechangelog.pl
+msgid ""
+"Options:\n"
+" -l, --file <changelog-file>\n"
+" get per-version info from this file.\n"
+" -F <changelog-format> force changelog format.\n"
+" -S, --show-field <field> show the values for <field>.\n"
+" -?, --help show this help message.\n"
+" --version show the version."
+msgstr ""
+
+#: scripts/dpkg-parsechangelog.pl
+msgid ""
+"Parser options:\n"
+" --format <output-format>\n"
+" set output format (defaults to 'dpkg').\n"
+" --reverse include all changes in reverse order.\n"
+" --all include all changes.\n"
+" -s, --since <version> include all changes later than <version>.\n"
+" -v <version> ditto.\n"
+" -u, --until <version> include all changes earlier than <version>.\n"
+" -f, --from <version> include all changes equal or later than "
+"<version>.\n"
+" -t, --to <version> include all changes up to or equal than "
+"<version>.\n"
+" -c, --count <number> include <number> entries from the top (or tail\n"
+" if <number> is lower than 0).\n"
+" -n <number> ditto.\n"
+" -o, --offset <number> change starting point for --count, counted from\n"
+" the top (or tail if <number> is lower than 0).\n"
+msgstr ""
+
+#: scripts/dpkg-parsechangelog.pl
+msgid "-L is obsolete; it is without effect"
+msgstr ""
+
+#: scripts/dpkg-parsechangelog.pl
+msgid "bad changelog format name"
+msgstr ""
+
+#: scripts/dpkg-parsechangelog.pl
+msgid "missing changelog filename"
+msgstr ""
+
+#: scripts/dpkg-parsechangelog.pl
+msgid "takes no non-option arguments"
+msgstr ""
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid ""
+"Usage: %s [<option>...] <binary-path> [<override-file> [<path-prefix>]] > "
+"Packages\n"
+"\n"
+"Options:\n"
+" -t, --type <type> scan for <type> packages (default is 'deb').\n"
+" -a, --arch <arch> architecture to scan for.\n"
+" -h, --hash <hash-list> only generate hashes for the specified list.\n"
+" -m, --multiversion allow multiple versions of a single package.\n"
+" -e, --extra-override <file>\n"
+" use extra override file.\n"
+" -M, --medium <medium> add X-Medium field for dselect media access "
+"method\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid " %s (package says %s, not %s)"
+msgstr ""
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "unconditional maintainer override for %s"
+msgstr ""
+
+#: scripts/dpkg-scanpackages.pl scripts/dpkg-shlibdeps.pl scripts/Dpkg/IPC.pm
+#: scripts/Dpkg/Shlibs/Objdump.pm
+#, perl-format
+msgid "cannot fork for %s"
+msgstr ""
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "couldn't parse control information from %s"
+msgstr ""
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "'dpkg-deb -I %s control' exited with %d, skipping package"
+msgstr ""
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "no Package field in control file of %s"
+msgstr ""
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid ""
+"package %s (filename %s) is repeat but newer version; used that one and "
+"ignored data from %s!"
+msgstr ""
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid ""
+"package %s (filename %s) is repeat; ignored that one and using data from %s!"
+msgstr ""
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "package %s (filename %s) has Filename field!"
+msgstr ""
+
+#: scripts/dpkg-scanpackages.pl scripts/dpkg-scansources.pl
+msgid "one to three arguments expected"
+msgstr ""
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "unsupported checksum '%s'"
+msgstr ""
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "binary path %s not found"
+msgstr ""
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "override file %s not found"
+msgstr ""
+
+#: scripts/dpkg-scanpackages.pl
+msgid "failed when writing stdout"
+msgstr ""
+
+#: scripts/dpkg-scanpackages.pl
+msgid "couldn't close stdout"
+msgstr ""
+
+#: scripts/dpkg-scanpackages.pl
+msgid "Packages with multiple instances but no --multiversion specified:"
+msgstr ""
+
+#: scripts/dpkg-scanpackages.pl
+msgid "Packages in override file with incorrect old maintainer value:"
+msgstr ""
+
+#: scripts/dpkg-scanpackages.pl
+msgid "Packages specifying same maintainer as override file:"
+msgstr ""
+
+#: scripts/dpkg-scanpackages.pl
+msgid "Packages in archive but missing from override file:"
+msgstr ""
+
+#: scripts/dpkg-scanpackages.pl
+msgid "Packages in override file but not in archive:"
+msgstr ""
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "Wrote %s entries to output Packages file."
+msgstr ""
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid ""
+"Usage: %s [<option>...] <binary-path> [<override-file> [<path-prefix>]] > "
+"Sources\n"
+"\n"
+"Options:\n"
+" -n, --no-sort don't sort by package before outputting.\n"
+" -e, --extra-override <file>\n"
+" use extra override file.\n"
+" -s, --source-override <file>\n"
+" use file for additional source overrides, "
+"default\n"
+" is regular override file with .src appended.\n"
+" --debug turn debugging on.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+"\n"
+"See the man page for the full documentation.\n"
+msgstr ""
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid "invalid override entry at line %d (%d fields)"
+msgstr ""
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid "ignoring duplicate override entry for %s at line %d"
+msgstr ""
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid "ignoring override entry for %s, invalid priority %s"
+msgstr ""
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid "invalid source override entry at line %d (%d fields)"
+msgstr ""
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid "ignoring duplicate source override entry for %s at line %d"
+msgstr ""
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid "no binary packages specified in %s"
+msgstr ""
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "administrative directory '%s' does not exist"
+msgstr ""
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "unrecognized dependency field '%s'"
+msgstr ""
+
+#: scripts/dpkg-shlibdeps.pl
+msgid "need at least one executable"
+msgstr ""
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid ""
+"cannot find library %s needed by %s (ELF format: '%s' abi: '%s'; RPATH: '%s')"
+msgstr ""
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "%s has an unexpected SONAME (%s)"
+msgstr ""
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid ""
+"no dependency information found for %s (used by %s)\n"
+"Hint: check if the library actually comes from a package."
+msgstr ""
+
+#: scripts/dpkg-shlibdeps.pl
+msgid ""
+"binaries to analyze should already be installed in their package's directory"
+msgstr ""
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "symbol %s used by %s found in none of the libraries"
+msgstr ""
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid ""
+"%s contains an unresolvable reference to symbol %s: it's probably a plugin"
+msgstr ""
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "%d similar warning has been skipped (use -v to see it)"
+msgid_plural ""
+"%d other similar warnings have been skipped (use -v to see them all)"
+msgstr[0] ""
+msgstr[1] ""
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid ""
+"%s should not be linked against %s (it uses none of the library's symbols)"
+msgstr ""
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid ""
+"package could avoid a useless dependency if %s was not linked against %s (it "
+"uses none of the library's symbols)"
+msgid_plural ""
+"package could avoid a useless dependency if %s were not linked against %s "
+"(they use none of the library's symbols)"
+msgstr[0] ""
+msgstr[1] ""
+
+#: scripts/dpkg-shlibdeps.pl
+msgid ""
+"Note: libraries are not searched in other binary packages that do not have "
+"any shlibs or symbols file.\n"
+"To help dpkg-shlibdeps find private libraries, you might need to use -l."
+msgstr ""
+
+#: scripts/dpkg-shlibdeps.pl
+msgid "cannot continue due to the error above"
+msgid_plural "cannot continue due to the errors listed above"
+msgstr[0] ""
+msgstr[1] ""
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "invalid dependency got generated: %s"
+msgstr ""
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "install new varlist file '%s'"
+msgstr ""
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "Usage: %s [<option>...] <executable>|-e<executable> [<option>...]"
+msgstr ""
+
+#: scripts/dpkg-shlibdeps.pl
+msgid ""
+"Positional options (order is significant):\n"
+" <executable> include dependencies for <executable>,\n"
+" -e<executable> (use -e if <executable> starts with '-')\n"
+" -d<dependency-field> next executable(s) set shlibs:<dependency-field>."
+msgstr ""
+
+#: scripts/dpkg-shlibdeps.pl
+msgid ""
+"Options:\n"
+" -l<library-dir> add directory to private shared library search "
+"list.\n"
+" -p<varname-prefix> set <varname-prefix>:* instead of shlibs:*.\n"
+" -O[<file>] write variable settings to stdout (or <file>).\n"
+" -L<local-shlibs-file> shlibs override file, not debian/shlibs.local.\n"
+" -T<substvars-file> update variables here, not debian/substvars.\n"
+" -t<type> set package type (default is deb).\n"
+" -x<package> exclude package from the generated dependencies.\n"
+" -S<package-build-dir> search needed libraries in the given\n"
+" package build directory first.\n"
+" -I<package-build-dir> ignore needed libraries, shlibs and symbols "
+"files\n"
+" in the given build directory.\n"
+" -v enable verbose mode (can be used multiple "
+"times).\n"
+" --ignore-missing-info don't fail if dependency information can't be "
+"found.\n"
+" --warnings=<value> define set of active warnings (see manual page).\n"
+" --admindir=<directory> change the administrative directory.\n"
+" -?, --help show this help message.\n"
+" --version show the version."
+msgstr ""
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid ""
+"Dependency fields recognized are:\n"
+" %s\n"
+msgstr ""
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "can't extract name and version from library name '%s'"
+msgstr ""
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "unable to open shared libs info file '%s'"
+msgstr ""
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "shared libs info file '%s' line %d: bad line '%s'"
+msgstr ""
+
+#: scripts/dpkg-shlibdeps.pl scripts/Dpkg/Changelog/Parse.pm
+#: scripts/Dpkg/Checksums.pm
+#, perl-format
+msgid "cannot open file %s"
+msgstr ""
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid ""
+"$ORIGIN is used in RPATH of %s and the corresponding directory could not be "
+"identified due to lack of DEBIAN sub-directory in the root of package's "
+"build tree"
+msgstr ""
+
+#: scripts/dpkg-shlibdeps.pl
+msgid "diversions involved - output may be incorrect"
+msgstr ""
+
+#: scripts/dpkg-shlibdeps.pl
+msgid "write diversion info to stderr"
+msgstr ""
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "unknown output from dpkg --search: '%s'"
+msgstr ""
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "--%s needs a directory"
+msgstr ""
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "cannot stat directory %s"
+msgstr ""
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "directory argument %s is not a directory"
+msgstr ""
+
+#: scripts/dpkg-source.pl scripts/Dpkg/Source/BinaryFiles.pm
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "unable to chdir to '%s'"
+msgstr ""
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "using options from %s: %s"
+msgstr ""
+
+#: scripts/dpkg-source.pl scripts/Dpkg/Compression.pm
+#, perl-format
+msgid "%s is not a supported compression"
+msgstr ""
+
+#: scripts/dpkg-source.pl scripts/Dpkg/Compression.pm
+#, perl-format
+msgid "%s is not a compression level"
+msgstr ""
+
+#: scripts/dpkg-source.pl
+msgid "-E and -W are deprecated, they are without effect"
+msgstr ""
+
+#: scripts/dpkg-source.pl scripts/dpkg-vendor.pl
+msgid "need an action option"
+msgstr ""
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "no source format specified in %s, see dpkg-source(1)"
+msgstr ""
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "%s doesn't contain any information about the source package"
+msgstr ""
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "'%s' is not a legal architecture string in package '%s'"
+msgstr ""
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "architecture %s only allowed on its own (list for package %s is '%s')"
+msgstr ""
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "%s doesn't list any binary package"
+msgstr ""
+
+#: scripts/dpkg-source.pl
+msgid "building source for a binary-only release"
+msgstr ""
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "can't build with source format '%s': %s"
+msgstr ""
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "using source format '%s'"
+msgstr ""
+
+#: scripts/dpkg-source.pl scripts/Dpkg/Source/Package/V1.pm
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Package/V3/Bzr.pm
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+#, perl-format
+msgid "building %s in %s"
+msgstr ""
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "--%s needs at least one argument, the .dsc"
+msgstr ""
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "--%s takes no more than two arguments"
+msgstr ""
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "--%s needs the .dsc file as first argument, not a directory"
+msgstr ""
+
+#: scripts/dpkg-source.pl scripts/Dpkg/Source/Package/V1.pm
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Package/V3/Bzr.pm
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+#, perl-format
+msgid "unpack target exists: %s"
+msgstr ""
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "%s doesn't contain a valid OpenPGP signature"
+msgstr ""
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "extracting unsigned source package (%s)"
+msgstr ""
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "extracting %s in %s"
+msgstr ""
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "test control %s is not a regular file"
+msgstr ""
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "%s field contains value %s, but no tests control file %s"
+msgstr ""
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "test control %s is missing %s or %s field"
+msgstr ""
+
+#: scripts/dpkg-source.pl
+msgctxt "source options"
+msgid "<none>"
+msgstr ""
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "Usage: %s [<option>...] <command>"
+msgstr ""
+
+#: scripts/dpkg-source.pl
+msgid ""
+"Commands:\n"
+" -x, --extract <filename>.dsc [<output-dir>]\n"
+" extract source package.\n"
+" -b, --build <dir> build source package.\n"
+" --print-format <dir> print the format to be used for the source "
+"package.\n"
+" --before-build <dir> run the corresponding source package format "
+"hook.\n"
+" --after-build <dir> run the corresponding source package format "
+"hook.\n"
+" --commit [<dir> [<patch-name>]]\n"
+" store upstream changes in a new patch."
+msgstr ""
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid ""
+"Build options:\n"
+" -c<control-file> get control info from this file.\n"
+" -l<changelog-file> get per-version info from this file.\n"
+" -F<changelog-format> force changelog format.\n"
+" --format=<source-format> set the format to be used for the source "
+"package.\n"
+" -V<name>=<value> set a substitution variable.\n"
+" -T<substvars-file> read variables here.\n"
+" -D<field>=<value> override or add a .dsc field and value.\n"
+" -U<field> remove a field.\n"
+" -i, --diff-ignore[=<regex>]\n"
+" filter out files to ignore diffs of\n"
+" (defaults to: '%s').\n"
+" -I, --tar-ignore[=<pattern>]\n"
+" filter out files when building tarballs\n"
+" (defaults to: %s).\n"
+" -Z, --compression=<compression>\n"
+" select compression to use (defaults to '%s',\n"
+" supported are: %s).\n"
+" -z, --compression-level=<level>\n"
+" compression level to use (defaults to '%d',\n"
+" supported are: '1'-'9', 'best', 'fast')"
+msgstr ""
+
+#: scripts/dpkg-source.pl
+msgid ""
+"Extract options:\n"
+" --no-copy don't copy .orig tarballs\n"
+" --no-check don't check signature and checksums before "
+"unpacking\n"
+" --no-overwrite-dir do not overwrite directory on extraction\n"
+" --require-valid-signature abort if the package doesn't have a valid "
+"signature\n"
+" --require-strong-checksums\n"
+" abort if the package contains no strong "
+"checksums\n"
+" --ignore-bad-version allow bad source package versions."
+msgstr ""
+
+#: scripts/dpkg-source.pl
+msgid ""
+"General options:\n"
+" --threads-max=<threads>\n"
+" use at most <threads> with compressor.\n"
+" -q quiet mode.\n"
+" -?, --help show this help message.\n"
+" --version show the version."
+msgstr ""
+
+#: scripts/dpkg-source.pl
+msgid ""
+"Source format specific build and extract options are available;\n"
+"use --format with --help to see them."
+msgstr ""
+
+#: scripts/dpkg-vendor.pl
+msgid ""
+"Commands:\n"
+" --is <vendor> returns true if current vendor is <vendor>.\n"
+" --derives-from <vendor> returns true if current vendor derives from "
+"<vendor>.\n"
+" --query <field> print the content of the vendor-specific field.\n"
+" --help show this help message.\n"
+" --version show the version."
+msgstr ""
+
+#: scripts/dpkg-vendor.pl
+msgid ""
+"Options:\n"
+" --vendor <vendor> assume <vendor> is the current vendor."
+msgstr ""
+
+#: scripts/dpkg-vendor.pl
+#, perl-format
+msgid "vendor %s doesn't exist in %s"
+msgstr ""
+
+#: scripts/Dpkg/Arch.pm
+msgid ""
+"cannot determine CC system type, falling back to default (native compilation)"
+msgstr ""
+
+#: scripts/Dpkg/Arch.pm
+#, perl-format
+msgid "unknown CC system type %s, falling back to default (native compilation)"
+msgstr ""
+
+#: scripts/Dpkg/Arch.pm
+#, perl-format
+msgid "'%s' is not a legal architecture in list '%s'"
+msgstr ""
+
+#: scripts/Dpkg/BuildFlags.pm scripts/Dpkg/Compression/FileHandle.pm
+#: scripts/Dpkg/File.pm scripts/Dpkg/Interface/Storable.pm
+#: scripts/Dpkg/Shlibs/Objdump.pm scripts/Dpkg/Source/BinaryFiles.pm
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "cannot read %s"
+msgstr ""
+
+#: scripts/Dpkg/BuildFlags.pm
+#, perl-format
+msgid "line %d of %s mentions unknown flag %s"
+msgstr ""
+
+#: scripts/Dpkg/BuildFlags.pm
+#, perl-format
+msgid "line %d of %s is invalid, it has been ignored"
+msgstr ""
+
+#: scripts/Dpkg/BuildOptions.pm
+#, perl-format
+msgid "invalid flag in %s: %s"
+msgstr ""
+
+#: scripts/Dpkg/BuildOptions.pm
+#, perl-format
+msgid "unknown %s feature in %s variable: %s"
+msgstr ""
+
+#: scripts/Dpkg/BuildOptions.pm
+#, perl-format
+msgid "incorrect value in %s option of %s variable: %s"
+msgstr ""
+
+#: scripts/Dpkg/BuildTypes.pm
+#, perl-format
+msgid "cannot combine %s and %s"
+msgstr ""
+
+#: scripts/Dpkg/BuildTypes.pm
+#, perl-format
+msgid "unknown build type %s"
+msgstr ""
+
+#: scripts/Dpkg/Changelog.pm
+#, perl-format
+msgid ""
+"%s(l%s): %s\n"
+"LINE: %s"
+msgstr ""
+
+#: scripts/Dpkg/Changelog.pm
+#, perl-format
+msgid "%s(l%s): %s"
+msgstr ""
+
+#: scripts/Dpkg/Changelog.pm
+msgid "'offset' without 'count' has no effect"
+msgstr ""
+
+#: scripts/Dpkg/Changelog.pm
+msgid "you can't combine 'count' or 'offset' with any other range option"
+msgstr ""
+
+#: scripts/Dpkg/Changelog.pm
+msgid "you can only specify one of 'from' and 'since', using 'since'"
+msgstr ""
+
+#: scripts/Dpkg/Changelog.pm
+msgid "you can only specify one of 'to' and 'until', using 'until'"
+msgstr ""
+
+#: scripts/Dpkg/Changelog.pm
+#, perl-format
+msgid "'%s' option specifies non-existing version '%s'"
+msgstr ""
+
+#: scripts/Dpkg/Changelog.pm
+msgid "use newest entry that is earlier than the one specified"
+msgstr ""
+
+#: scripts/Dpkg/Changelog.pm
+msgid "none found, starting from the oldest entry"
+msgstr ""
+
+#: scripts/Dpkg/Changelog.pm
+msgid "use oldest entry that is later than the one specified"
+msgstr ""
+
+#: scripts/Dpkg/Changelog.pm
+#, perl-format
+msgid "no such entry found, ignoring '%s' parameter '%s'"
+msgstr ""
+
+#: scripts/Dpkg/Changelog.pm
+#, perl-format
+msgid "'since' option specifies most recent version '%s', ignoring"
+msgstr ""
+
+#: scripts/Dpkg/Changelog.pm
+#, perl-format
+msgid "'until' option specifies oldest version '%s', ignoring"
+msgstr ""
+
+#: scripts/Dpkg/Changelog/Debian.pm
+msgid "first heading"
+msgstr ""
+
+#: scripts/Dpkg/Changelog/Debian.pm
+msgid "next heading or end of file"
+msgstr ""
+
+#: scripts/Dpkg/Changelog/Debian.pm
+msgid "start of change data"
+msgstr ""
+
+#: scripts/Dpkg/Changelog/Debian.pm
+msgid "more change data or trailer"
+msgstr ""
+
+#: scripts/Dpkg/Changelog/Debian.pm
+#, perl-format
+msgid "found start of entry where expected %s"
+msgstr ""
+
+#: scripts/Dpkg/Changelog/Debian.pm
+msgid "badly formatted heading line"
+msgstr ""
+
+#: scripts/Dpkg/Changelog/Debian.pm
+#, perl-format
+msgid "found trailer where expected %s"
+msgstr ""
+
+#: scripts/Dpkg/Changelog/Debian.pm scripts/Dpkg/Changelog/Entry/Debian.pm
+msgid "badly formatted trailer line"
+msgstr ""
+
+#: scripts/Dpkg/Changelog/Debian.pm
+#, perl-format
+msgid "found change data where expected %s"
+msgstr ""
+
+#: scripts/Dpkg/Changelog/Debian.pm
+#, perl-format
+msgid "found blank line where expected %s"
+msgstr ""
+
+#: scripts/Dpkg/Changelog/Debian.pm
+msgid "unrecognized line"
+msgstr ""
+
+#: scripts/Dpkg/Changelog/Debian.pm
+#, perl-format
+msgid "found end of file where expected %s"
+msgstr ""
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "version '%s' is invalid: %s"
+msgstr ""
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "bad key-value after ';': '%s'"
+msgstr ""
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "repeated key-value %s"
+msgstr ""
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "badly formatted urgency value: %s"
+msgstr ""
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "bad binary-only value: %s"
+msgstr ""
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "unknown key-value %s"
+msgstr ""
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+msgid "the header doesn't match the expected regex"
+msgstr ""
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "ignoring invalid week day '%s'"
+msgstr ""
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "uses full '%s' instead of abbreviated month name '%s'"
+msgstr ""
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "invalid abbreviated month name '%s'"
+msgstr ""
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "cannot parse non-conformant date '%s'"
+msgstr ""
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+msgid "the trailer doesn't match the expected regex"
+msgstr ""
+
+#: scripts/Dpkg/Changelog/Parse.pm
+#, perl-format
+msgid "cannot seek into file %s"
+msgstr ""
+
+#: scripts/Dpkg/Changelog/Parse.pm
+#, perl-format
+msgid "changelog format %s is unknown: %s"
+msgstr ""
+
+#: scripts/Dpkg/Changelog/Parse.pm
+#, perl-format
+msgid "changelog format %s is not a Dpkg::Changelog class"
+msgstr ""
+
+#: scripts/Dpkg/Changelog/Parse.pm
+#, perl-format
+msgid "fatal error occurred while parsing %s"
+msgstr ""
+
+#: scripts/Dpkg/Changelog/Parse.pm
+#, perl-format
+msgid "unknown output format %s"
+msgstr ""
+
+#: scripts/Dpkg/Checksums.pm
+#, perl-format
+msgid "cannot fstat file %s"
+msgstr ""
+
+#: scripts/Dpkg/Checksums.pm
+#, perl-format
+msgid "file %s has size %u instead of expected %u"
+msgstr ""
+
+#: scripts/Dpkg/Checksums.pm
+#, perl-format
+msgid "file %s has checksum %s instead of expected %s (algorithm %s)"
+msgstr ""
+
+#: scripts/Dpkg/Checksums.pm
+#, perl-format
+msgid "invalid line in %s checksums string: %s"
+msgstr ""
+
+#: scripts/Dpkg/Checksums.pm
+#, perl-format
+msgid "conflicting checksums '%s' and '%s' for file '%s'"
+msgstr ""
+
+#: scripts/Dpkg/Checksums.pm
+#, perl-format
+msgid "conflicting file sizes '%u' and '%u' for file '%s'"
+msgstr ""
+
+#: scripts/Dpkg/Compression.pm
+#, perl-format
+msgid "compression threads %s is not a number"
+msgstr ""
+
+#: scripts/Dpkg/Compression/Process.pm
+#, perl-format
+msgid "%s is not a supported compression method"
+msgstr ""
+
+#: scripts/Dpkg/Compression/Process.pm
+msgid "Dpkg::Compression::Process can only start one subprocess at a time"
+msgstr ""
+
+#: scripts/Dpkg/Conf.pm
+#, perl-format
+msgid "short option not allowed in %s, line %d"
+msgstr ""
+
+#: scripts/Dpkg/Conf.pm
+#, perl-format
+msgid "invalid syntax for option in %s, line %d"
+msgstr ""
+
+#: scripts/Dpkg/Control.pm
+msgid "general section of control info file"
+msgstr ""
+
+#: scripts/Dpkg/Control.pm
+msgid "package's section of control info file"
+msgstr ""
+
+#: scripts/Dpkg/Control.pm
+msgid "parsed version of changelog"
+msgstr ""
+
+#: scripts/Dpkg/Control.pm
+msgid "header stanza of copyright file"
+msgstr ""
+
+#: scripts/Dpkg/Control.pm
+msgid "files stanza of copyright file"
+msgstr ""
+
+#: scripts/Dpkg/Control.pm
+msgid "license stanza of copyright file"
+msgstr ""
+
+#: scripts/Dpkg/Control.pm
+msgid "package's tests control file"
+msgstr ""
+
+#: scripts/Dpkg/Control.pm
+#, perl-format
+msgid "repository's %s file"
+msgstr ""
+
+#: scripts/Dpkg/Control.pm
+#, perl-format
+msgid "stanza in repository's %s file"
+msgstr ""
+
+#: scripts/Dpkg/Control.pm
+#, perl-format
+msgid "%s file"
+msgstr ""
+
+#: scripts/Dpkg/Control.pm
+msgid "control info of a .deb package"
+msgstr ""
+
+#: scripts/Dpkg/Control.pm
+msgid "build information file"
+msgstr ""
+
+#: scripts/Dpkg/Control.pm
+msgid "vendor file"
+msgstr ""
+
+#: scripts/Dpkg/Control.pm
+msgid "stanza in dpkg's status file"
+msgstr ""
+
+#: scripts/Dpkg/Control/FieldsCore.pm
+#, perl-format
+msgid "unknown information field '%s' in input data in %s"
+msgstr ""
+
+#: scripts/Dpkg/Control/FieldsCore.pm
+msgid "control information"
+msgstr ""
+
+#: scripts/Dpkg/Control/HashCore.pm
+#, perl-format
+msgid "syntax error in %s at line %d: %s"
+msgstr ""
+
+#: scripts/Dpkg/Control/HashCore.pm
+msgid "field cannot start with a hyphen"
+msgstr ""
+
+#: scripts/Dpkg/Control/HashCore.pm
+#, perl-format
+msgid "duplicate field %s found"
+msgstr ""
+
+#: scripts/Dpkg/Control/HashCore.pm
+msgid "continued value line not in field"
+msgstr ""
+
+#: scripts/Dpkg/Control/HashCore.pm
+msgid "expected OpenPGP signature, found end of file after blank line"
+msgstr ""
+
+#: scripts/Dpkg/Control/HashCore.pm
+#, perl-format
+msgid "expected OpenPGP signature, found something else '%s'"
+msgstr ""
+
+#: scripts/Dpkg/Control/HashCore.pm
+msgid "unfinished OpenPGP signature"
+msgstr ""
+
+#: scripts/Dpkg/Control/HashCore.pm
+msgid "OpenPGP signature not allowed here"
+msgstr ""
+
+#: scripts/Dpkg/Control/HashCore.pm
+msgid "line with unknown format (not field-colon-value)"
+msgstr ""
+
+#: scripts/Dpkg/Control/HashCore.pm
+msgid "write error on control data"
+msgstr ""
+
+#: scripts/Dpkg/Control/Info.pm
+#, perl-format
+msgid "first stanza lacks a '%s' field"
+msgstr ""
+
+#: scripts/Dpkg/Control/Info.pm
+#, perl-format
+msgid "stanza lacks the '%s' field"
+msgstr ""
+
+#: scripts/Dpkg/Control/Tests/Entry.pm
+#, perl-format
+msgid "stanza lacks either %s or %s fields"
+msgstr ""
+
+#: scripts/Dpkg/Deps.pm
+#, perl-format
+msgid "can't parse dependency %s"
+msgstr ""
+
+#: scripts/Dpkg/Deps.pm
+#, perl-format
+msgid "virtual dependency contains invalid relation: %s"
+msgstr ""
+
+#: scripts/Dpkg/Deps.pm
+msgid "an union dependency can only contain simple dependencies"
+msgstr ""
+
+#: scripts/Dpkg/Dist/Files.pm
+#, perl-format
+msgid "badly formed file name in files list file, line %d"
+msgstr ""
+
+#: scripts/Dpkg/Dist/Files.pm
+#, perl-format
+msgid "badly formed line in files list file, line %d"
+msgstr ""
+
+#: scripts/Dpkg/Dist/Files.pm
+#, perl-format
+msgid "duplicate files list entry for file %s (line %d)"
+msgstr ""
+
+#: scripts/Dpkg/Dist/Files.pm
+#, perl-format
+msgid "cannot open directory %s"
+msgstr ""
+
+#: scripts/Dpkg/Dist/Files.pm
+#, perl-format
+msgid "invalid filename %s"
+msgstr ""
+
+#: scripts/Dpkg/ErrorHandling.pm
+msgid "info"
+msgstr ""
+
+#: scripts/Dpkg/ErrorHandling.pm
+msgid "notice"
+msgstr ""
+
+#: scripts/Dpkg/ErrorHandling.pm
+msgid "warning"
+msgstr ""
+
+#: scripts/Dpkg/ErrorHandling.pm
+msgid "error"
+msgstr ""
+
+#: scripts/Dpkg/ErrorHandling.pm
+#, perl-format
+msgid "%s subprocess returned exit status %d"
+msgstr ""
+
+#: scripts/Dpkg/ErrorHandling.pm
+#, perl-format
+msgid "%s subprocess was killed by signal %d"
+msgstr ""
+
+#: scripts/Dpkg/ErrorHandling.pm
+#, perl-format
+msgid "%s subprocess failed with unknown status code %d"
+msgstr ""
+
+#: scripts/Dpkg/ErrorHandling.pm
+msgid "Use --help for program usage information."
+msgstr ""
+
+#: scripts/Dpkg/File.pm
+#, perl-format
+msgid "cannot create file %s"
+msgstr ""
+
+#: scripts/Dpkg/IPC.pm
+#, perl-format
+msgid "pipe for %s"
+msgstr ""
+
+#: scripts/Dpkg/IPC.pm
+#, perl-format
+msgid "chdir to %s"
+msgstr ""
+
+#: scripts/Dpkg/IPC.pm
+msgid "reopen stdin"
+msgstr ""
+
+#: scripts/Dpkg/IPC.pm
+msgid "reopen stdout"
+msgstr ""
+
+#: scripts/Dpkg/IPC.pm
+msgid "child process"
+msgstr ""
+
+#: scripts/Dpkg/IPC.pm
+#, perl-format
+msgid "wait for %s"
+msgstr ""
+
+#: scripts/Dpkg/IPC.pm
+#, perl-format
+msgid "%s didn't complete in %d second"
+msgid_plural "%s didn't complete in %d seconds"
+msgstr[0] ""
+msgstr[1] ""
+
+#: scripts/Dpkg/Interface/Storable.pm
+msgid "<standard input>"
+msgstr ""
+
+#: scripts/Dpkg/Lock.pm
+msgid "File::FcntlLock not available; using flock which is not NFS-safe"
+msgstr ""
+
+#: scripts/Dpkg/Lock.pm
+#, perl-format
+msgid "failed to get a write lock on %s"
+msgstr ""
+
+#: scripts/Dpkg/OpenPGP.pm
+#, perl-format
+msgid "unknown OpenPGP api requested %s"
+msgstr ""
+
+#: scripts/Dpkg/OpenPGP.pm
+#, perl-format
+msgid "cannot load OpenPGP backend %s"
+msgstr ""
+
+#: scripts/Dpkg/OpenPGP.pm
+#, perl-format
+msgid "unknown OpenPGP backend %s"
+msgstr ""
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "success"
+msgstr ""
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "no acceptable signature found"
+msgstr ""
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "missing required argument"
+msgstr ""
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "unsupported option"
+msgstr ""
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "invalid data type"
+msgstr ""
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "non-text input where text expected"
+msgstr ""
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "output file already exists"
+msgstr ""
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "input file does not exist"
+msgstr ""
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "cannot unlock password-protected key"
+msgstr ""
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "unsupported subcommand"
+msgstr ""
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "key is not signature-capable"
+msgstr ""
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "missing OpenPGP implementation"
+msgstr ""
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "specified key needs a keystore"
+msgstr ""
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+#, perl-format
+msgid "error code %d"
+msgstr ""
+
+#: scripts/Dpkg/Package.pm
+msgid "may not be empty string"
+msgstr ""
+
+#: scripts/Dpkg/Package.pm
+#, perl-format
+msgid "character '%s' not allowed"
+msgstr ""
+
+#: scripts/Dpkg/Package.pm
+msgid "must start with an alphanumeric character"
+msgstr ""
+
+#: scripts/Dpkg/Path.pm scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "pathname '%s' cannot be canonicalized"
+msgstr ""
+
+#: scripts/Dpkg/Path.pm scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "pathname '%s' points outside source root (to '%s')"
+msgstr ""
+
+#: scripts/Dpkg/Shlibs.pm
+msgid ""
+"deprecated use of LD_LIBRARY_PATH with private library directory which "
+"interferes with cross-building, please use -l option instead"
+msgstr ""
+
+#: scripts/Dpkg/Shlibs.pm scripts/Dpkg/Shlibs/Objdump.pm
+#, perl-format
+msgid "unknown executable format in file '%s'"
+msgstr ""
+
+#: scripts/Dpkg/Shlibs/Objdump.pm
+#, perl-format
+msgid "couldn't parse dynamic relocation record: %s"
+msgstr ""
+
+#: scripts/Dpkg/Shlibs/Objdump.pm
+#, perl-format
+msgid "couldn't parse dynamic symbol definition: %s"
+msgstr ""
+
+#: scripts/Dpkg/Shlibs/Symbol.pm
+#, perl-format
+msgid "symbol name unspecified: %s"
+msgstr ""
+
+#: scripts/Dpkg/Shlibs/Symbol.pm
+#, perl-format
+msgid "symver tag with versioned symbol will not match: %s"
+msgstr ""
+
+#: scripts/Dpkg/Shlibs/Symbol.pm
+#, perl-format
+msgid "you can't use symver tag to catch unversioned symbols: %s"
+msgstr ""
+
+#: scripts/Dpkg/Shlibs/SymbolFile.pm
+#, perl-format
+msgid "symbol information must be preceded by a header (file %s, line %s)"
+msgstr ""
+
+#: scripts/Dpkg/Shlibs/SymbolFile.pm
+#, perl-format
+msgid "failed to parse line in %s: %s"
+msgstr ""
+
+#: scripts/Dpkg/Shlibs/SymbolFile.pm
+#, perl-format
+msgid "failed to parse a line in %s: %s"
+msgstr ""
+
+#: scripts/Dpkg/Shlibs/SymbolFile.pm
+#, perl-format
+msgid "tried to merge the same object (%s) twice in a symfile"
+msgstr ""
+
+#: scripts/Dpkg/Shlibs/SymbolFile.pm
+msgid "cannot merge symbols from objects without SONAME"
+msgstr ""
+
+#: scripts/Dpkg/Source/Archive.pm
+msgid "write on tar input"
+msgstr ""
+
+#: scripts/Dpkg/Source/Archive.pm
+msgid "close on tar input"
+msgstr ""
+
+#: scripts/Dpkg/Source/Archive.pm scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot create directory %s"
+msgstr ""
+
+#: scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "cannot get source pathname %s metadata"
+msgstr ""
+
+#: scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "cannot get target pathname %s metadata"
+msgstr ""
+
+#: scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "cannot change directory %s mode"
+msgstr ""
+
+#: scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "cannot change directory %s times"
+msgstr ""
+
+#: scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "cannot remove destination directory %s"
+msgstr ""
+
+#: scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "cannot remove destination file %s"
+msgstr ""
+
+#: scripts/Dpkg/Source/Archive.pm scripts/Dpkg/Source/Package.pm
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "cannot opendir %s"
+msgstr ""
+
+#: scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "unable to rename %s to %s"
+msgstr ""
+
+#: scripts/Dpkg/Source/Functions.pm
+#, perl-format
+msgid "cannot stat directory %s (before removal)"
+msgstr ""
+
+#: scripts/Dpkg/Source/Functions.pm
+#, perl-format
+msgid "unable to check for removal of directory '%s'"
+msgstr ""
+
+#: scripts/Dpkg/Source/Functions.pm
+#, perl-format
+msgid "rm -rf failed to remove '%s'"
+msgstr ""
+
+#: scripts/Dpkg/Source/Functions.pm scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot change timestamp for %s"
+msgstr ""
+
+#: scripts/Dpkg/Source/Functions.pm
+#, perl-format
+msgid "cannot read timestamp from %s"
+msgstr ""
+
+#: scripts/Dpkg/Source/Functions.pm
+#, perl-format
+msgid "cannot open file %s for binary detection"
+msgstr ""
+
+#: scripts/Dpkg/Source/BinaryFiles.pm
+#, perl-format
+msgid "adding %s to %s"
+msgstr ""
+
+#: scripts/Dpkg/Source/BinaryFiles.pm
+#, perl-format
+msgid "unwanted binary file: %s"
+msgstr ""
+
+#: scripts/Dpkg/Source/BinaryFiles.pm
+#, perl-format
+msgid ""
+"detected %d unwanted binary file (add it in debian/source/include-binaries "
+"to allow its inclusion)."
+msgid_plural ""
+"detected %d unwanted binary files (add them in debian/source/include-"
+"binaries to allow their inclusion)."
+msgstr[0] ""
+msgstr[1] ""
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "%s is not the name of a file"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "missing critical source control field %s"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "source package format '%s' is not supported: %s"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package.pm
+msgid "source package uses only weak checksums"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "%s and %s fields are required to compute the source basename"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package.pm
+msgid "upstream tarball signatures but no upstream signing key"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "verifying %s"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "cannot verify upstream tarball signature for %s: %s"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "cannot verify inline signature for %s: %s"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "%s is not a valid option for %s"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "cannot copy %s to %s"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "%s does not exist"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "cannot make %s executable"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "%s is not a plain file"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "'%s' is not supported by the source format '%s'"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "auto select original source"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "use packed original source (unpack and keep)"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "use packed original source (unpack and remove)"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "use unpacked original source (pack and keep)"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "use unpacked original source (pack and remove)"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "trust packed and unpacked original sources are same"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "there is no diff, do main tarfile only"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "like -sa, -sk, -sp, -su, -sr but may overwrite"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+msgid "abort if generated diff has upstream files changes"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "leave original source packed in current directory"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "do not copy original source to current directory"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "unpack original source tree too"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "do not apply debian diff to upstream sources"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "-s%s option overrides earlier -s%s option"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "source handling style -s%s not allowed with -x"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "multiple tarfiles in v1.0 source package"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "unrecognized file for a %s source package: %s"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V3/Native.pm
+msgid "no tarfile in Files field"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "native package with .orig.tar"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "unable to rename '%s' to '%s'"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+#, perl-format
+msgid "unpacking %s"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "unable to keep orig directory (already exists)"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "failed to rename newly-extracted %s to %s"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "failed to rename saved %s to %s"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "applying %s"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "upstream files that have been modified: %s"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "only supports gzip compression"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid ""
+"-b takes at most a directory and an orig source argument (with v1.0 source "
+"package)"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "source handling style -s%s not allowed with -b"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "packed orig '%s' exists but is not a plain file"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "cannot stat orig argument %s"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid ""
+"orig argument is unpacked but source handling style -s%s calls for packed (."
+"orig.tar.<ext>)"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid ""
+"orig argument is packed but source handling style -s%s calls for unpacked (."
+"orig/)"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "orig argument %s is not a plain file or directory"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid ""
+"orig argument is empty (means no orig, no diff) but source handling style -"
+"s%s wants something"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "unpacked orig '%s' exists but is not a directory"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "unable to stat putative unpacked orig '%s'"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V3/Quilt.pm
+msgid "non-native package version does not contain a revision"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V3/Native.pm
+msgid "native package version may not have a revision"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "source directory '%s' is not <sourcepackage>-<upstreamversion> '%s'"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid ".orig directory name %s is not <package>-<upstreamversion> (wanted %s)"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid ""
+".orig.tar name %s is not <package>_<upstreamversion>.orig.tar (wanted %s)"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid ""
+"tarfile '%s' already exists, not overwriting, giving up; use -sU or -sR to "
+"override"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "unable to check for existence of '%s'"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V3/Native.pm
+#, perl-format
+msgid "unable to rename '%s' (newly created) to '%s'"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+#: scripts/Dpkg/Source/Package/V3/Quilt.pm scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "unable to change permission of '%s'"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "building %s using existing %s"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+msgid "upstream signing key but no upstream tarball signature"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid ""
+"orig directory '%s' already exists, not overwriting, giving up; use -sA, -sK "
+"or -sP to override"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "unable to check for existence of orig directory '%s'"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "the diff modifies the following upstream files: %s"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid ""
+"use the '3.0 (quilt)' format to have separate and documented changes to "
+"upstream files, see dpkg-source(1)"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "aborting due to --abort-on-upstream-changes"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+msgid "unrepresentable changes to source"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "include removed files in the patch"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "include timestamp in the patch"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "include binary files in the tarball"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "do not prepare build tree by applying patches"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "do not unapply patches if previously applied"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "unapply patches if previously applied (default)"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "create an empty original tarball if missing"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "record generated patches, instead of aborting"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "do not extract debian tarball into upstream sources"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "do not apply patches at the end of the extraction"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "duplicate files in %s source package: %s"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "missing orig.tar or debian.tar file in v2.0 source package"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "mismatched orig.tar %s for signature %s in source package"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "missing addon orig.tar for signature %s in source package"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "mismatched addon orig.tar %s for signature %s in source package"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "required removal of '%s' installed by original tarball"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "unapplying %s"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "no upstream tarball found at %s"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "patches are not applied, applying them now"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "several orig.tar files found (%s and %s) but only one is allowed"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "copy of the debian directory"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "local changes detected, the modified files are:"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Package/V3/Bzr.pm
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+#, perl-format
+msgid "-b takes only one parameter with format '%s'"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot represent change to %s: %s"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Patch.pm
+msgid "binary file contents changed"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid ""
+"add %s in debian/source/include-binaries if you want to store the modified "
+"binary in the debian tarball"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid ""
+"Hint: make sure the version in debian/changelog matches the unpacked source "
+"tree"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "you can integrate the local changes with %s"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "aborting due to unexpected upstream changes, see %s"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "local changes have been recorded in a new patch: %s"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Package/V3/Quilt.pm
+#, perl-format
+msgid "cannot remove %s"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Package/V3/Quilt.pm
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "failed to copy %s to %s"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "cannot register changes in %s, this patch already exists"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "patch file '%s' doesn't exist"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "there are no local changes to record"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "Enter the desired patch name: "
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "no patch name given; cannot proceed"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "cannot find an editor"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+msgid "cannot unpack bzr-format source package because bzr is not in the PATH"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+#, perl-format
+msgid ""
+"source directory is not the top directory of a bzr repository (%s/.bzr not "
+"present), but Format bzr was specified"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+#, perl-format
+msgid "%s is a symlink"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+#, perl-format
+msgid "%s is a symlink to outside %s"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+msgid "doesn't contain a bzr repository"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+msgid "bzr status exited nonzero"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "uncommitted, not-ignored changes in working directory: %s"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+msgid "format v3.0 (bzr) uses only one source file"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+#, perl-format
+msgid "expected %s, got %s"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V3/Custom.pm
+msgid "define the format of the generated source package"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V3/Custom.pm
+msgid "Format '3.0 (custom)' is only used to create source packages"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V3/Custom.pm
+msgid "no files indicated on command line"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V3/Custom.pm
+msgid "--target-format option is missing"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "cannot unpack git-format source package because git is not in the PATH"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid ""
+"source directory is not the top directory of a git repository (%s/.git not "
+"present), but Format git was specified"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "git repository %s uses submodules; this is not yet supported"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "specify a git <ref> to include in the git bundle"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "create a shallow clone with <number> depth"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "doesn't contain a git repository"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "git ls-files exited nonzero"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "creating shallow clone with depth %s"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "bundling: %s"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "format v3.0 (git) uses only one .git file"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "format v3.0 (git) uses only one .gitshallow file"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "format v3.0 (git) unknown file: %s"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "format v3.0 (git) expected %s"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "cloning %s"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "setting up shallow clone"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "setting remote %s to %s"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+msgid "multiple tarfiles in native source package"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+#, perl-format
+msgid "unrecognized file for a native source package: %s"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V3/Quilt.pm
+msgid "use a single debianization patch"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V3/Quilt.pm
+msgid "accept quilt metadata <version> even if unknown"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V3/Quilt.pm
+#, perl-format
+msgid "can't create symlink %s"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V3/Quilt.pm
+#, perl-format
+msgid "using patch list from %s"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V3/Quilt.pm
+#, perl-format
+msgid "unsupported version of the quilt metadata: %s"
+msgstr ""
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "file %s has no final newline (either original or modified version)"
+msgstr ""
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "unknown line from diff -u on %s: '%s'"
+msgstr ""
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "failed to write"
+msgstr ""
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff on %s"
+msgstr ""
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot stat file %s"
+msgstr ""
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot read link %s"
+msgstr ""
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "device or socket is not allowed"
+msgstr ""
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "unknown file type"
+msgstr ""
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "ignoring deletion of file %s"
+msgstr ""
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "ignoring deletion of file %s, use --include-removal to override"
+msgstr ""
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "ignoring deletion of directory %s"
+msgstr ""
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "ignoring deletion of symlink %s"
+msgstr ""
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "newly created empty file '%s' will not be represented in diff"
+msgstr ""
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "executable mode %04o of '%s' will not be represented in diff"
+msgstr ""
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "special mode %04o of '%s' will not be represented in diff"
+msgstr ""
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot represent change to %s:"
+msgstr ""
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid " new version is %s"
+msgstr ""
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid " old version is %s"
+msgstr ""
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff %s patches file with C-style encoded filename"
+msgstr ""
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "expected ^--- in line %d of diff '%s'"
+msgstr ""
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff '%s' patches file with name ending in .dpkg-orig"
+msgstr ""
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff '%s' finishes in middle of ---/+++ (line %d)"
+msgstr ""
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "line after --- isn't as expected in diff '%s' (line %d)"
+msgstr ""
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "none of the filenames in ---/+++ are valid in diff '%s' (line %d)"
+msgstr ""
+
+#: scripts/Dpkg/Source/Patch.pm scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "%s contains an insecure path: %s"
+msgstr ""
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff %s modifies file %s through a symlink: %s"
+msgstr ""
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "original and modified files are /dev/null in diff '%s' (line %d)"
+msgstr ""
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "file removal without proper filename in diff '%s' (line %d)"
+msgstr ""
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff %s removes a non-existing file %s (line %d)"
+msgstr ""
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff '%s' patches something which is not a plain file"
+msgstr ""
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid ""
+"diff '%s' patches files multiple times; split the diff in multiple files or "
+"merge the hunks into a single one"
+msgstr ""
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff '%s' patches file %s more than once"
+msgstr ""
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "unexpected end of diff '%s'"
+msgstr ""
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "expected [ +-] at start of line %d of diff '%s'"
+msgstr ""
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "expected ^@@ at line %d of diff '%s'"
+msgstr ""
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff '%s' doesn't contain any patch"
+msgstr ""
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "remove patch backup file %s"
+msgstr ""
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "nonexistent"
+msgstr ""
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "plain file"
+msgstr ""
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "directory"
+msgstr ""
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "symlink to %s"
+msgstr ""
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "block device"
+msgstr ""
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "character device"
+msgstr ""
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "named pipe"
+msgstr ""
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "named socket"
+msgstr ""
+
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "cannot mkdir %s"
+msgstr ""
+
+#: scripts/Dpkg/Source/Quilt.pm
+msgid "the patch has fuzz which is not allowed, or is malformed"
+msgstr ""
+
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "if patch '%s' is correctly applied by quilt, use '%s' to update it"
+msgstr ""
+
+#: scripts/Dpkg/Source/Quilt.pm
+msgid ""
+"if the file is present in the unpacked source, make sure it is also present "
+"in the orig tarball"
+msgstr ""
+
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "%s should be a directory or non-existing"
+msgstr ""
+
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "%s should be a file or non-existing"
+msgstr ""
+
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid ""
+"the series file (%s) contains unsupported options ('%s', line %s); dpkg-"
+"source might fail when applying patches"
+msgstr ""
+
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "restoring quilt backup files for %s"
+msgstr ""
+
+#: scripts/Dpkg/Substvars.pm
+#, perl-format
+msgid "bad line in substvars file %s at line %d"
+msgstr ""
+
+#: scripts/Dpkg/Substvars.pm
+#, perl-format
+msgid "invalid source version %s"
+msgstr ""
+
+#: scripts/Dpkg/Substvars.pm
+#, perl-format
+msgid "too many substitutions - recursive ? - in '%s'"
+msgstr ""
+
+#: scripts/Dpkg/Substvars.pm
+#, perl-format
+msgid "obsolete substitution variable ${%s}"
+msgstr ""
+
+#: scripts/Dpkg/Substvars.pm
+#, perl-format
+msgid "substitution variable ${%s} used, but is not defined"
+msgstr ""
+
+#: scripts/Dpkg/Substvars.pm
+#, perl-format
+msgid "substitution variable ${%s} unused, but is defined"
+msgstr ""
+
+#: scripts/Dpkg/Vars.pm
+#, perl-format
+msgid "source package name '%s' is illegal: %s"
+msgstr ""
+
+#: scripts/Dpkg/Vars.pm
+#, perl-format
+msgid "source package has two conflicting values - %s and %s"
+msgstr ""
+
+#: scripts/Dpkg/Vendor.pm
+#, perl-format
+msgid ""
+"%s origin filename is deprecated; it should have only alphanumeric or dash "
+"characters"
+msgstr ""
+
+#: scripts/Dpkg/Vendor.pm
+#, perl-format
+msgid ""
+"%s module name is deprecated; it should be capitalized with only "
+"alphanumeric characters"
+msgstr ""
+
+#: scripts/Dpkg/Vendor/Debian.pm
+#, perl-format
+msgid "unknown host architecture '%s'"
+msgstr ""
+
+#: scripts/Dpkg/Vendor/Ubuntu.pm
+msgid ""
+"Version number suggests Ubuntu changes, but Maintainer: does not have Ubuntu "
+"address"
+msgstr ""
+
+#: scripts/Dpkg/Vendor/Ubuntu.pm
+msgid ""
+"Version number suggests Ubuntu changes, but there is no XSBC-Original-"
+"Maintainer field"
+msgstr ""
+
+#: scripts/Dpkg/Version.pm
+#, perl-format
+msgid "%s is not a valid version"
+msgstr ""
+
+#: scripts/Dpkg/Version.pm
+msgid "version number cannot be empty"
+msgstr ""
+
+#: scripts/Dpkg/Version.pm
+msgid "epoch part of the version number cannot be empty"
+msgstr ""
+
+#: scripts/Dpkg/Version.pm
+msgid "upstream version cannot be empty"
+msgstr ""
+
+#: scripts/Dpkg/Version.pm
+msgid "revision cannot be empty"
+msgstr ""
+
+#: scripts/Dpkg/Version.pm
+msgid "version number does not start with digit"
+msgstr ""
+
+#: scripts/Dpkg/Version.pm
+#, perl-format
+msgid "version number contains illegal character '%s'"
+msgstr ""
+
+#: scripts/Dpkg/Version.pm
+#, perl-format
+msgid "epoch part of the version number is not a number: '%s'"
+msgstr ""
diff --git a/scripts/po/en@boldquot.header b/scripts/po/en@boldquot.header
new file mode 100644
index 0000000..506ca9e
--- /dev/null
+++ b/scripts/po/en@boldquot.header
@@ -0,0 +1,25 @@
+# All this catalog "translates" are quotation characters.
+# The msgids must be ASCII and therefore cannot contain real quotation
+# characters, only substitutes like grave accent (0x60), apostrophe (0x27)
+# and double quote (0x22). These substitutes look strange; see
+# https://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html
+#
+# This catalog translates grave accent (0x60) and apostrophe (0x27) to
+# left single quotation mark (U+2018) and right single quotation mark (U+2019).
+# It also translates pairs of apostrophe (0x27) to
+# left single quotation mark (U+2018) and right single quotation mark (U+2019)
+# and pairs of quotation mark (0x22) to
+# left double quotation mark (U+201C) and right double quotation mark (U+201D).
+#
+# When output to an UTF-8 terminal, the quotation characters appear perfectly.
+# When output to an ISO-8859-1 terminal, the single quotation marks are
+# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to
+# grave/acute accent (by libiconv), and the double quotation marks are
+# transliterated to 0x22.
+# When output to an ASCII terminal, the single quotation marks are
+# transliterated to apostrophes, and the double quotation marks are
+# transliterated to 0x22.
+#
+# This catalog furthermore displays the text between the quotation marks in
+# bold face, assuming the VT100/XTerm escape sequences.
+#
diff --git a/scripts/po/en@quot.header b/scripts/po/en@quot.header
new file mode 100644
index 0000000..6522f0c
--- /dev/null
+++ b/scripts/po/en@quot.header
@@ -0,0 +1,22 @@
+# All this catalog "translates" are quotation characters.
+# The msgids must be ASCII and therefore cannot contain real quotation
+# characters, only substitutes like grave accent (0x60), apostrophe (0x27)
+# and double quote (0x22). These substitutes look strange; see
+# https://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html
+#
+# This catalog translates grave accent (0x60) and apostrophe (0x27) to
+# left single quotation mark (U+2018) and right single quotation mark (U+2019).
+# It also translates pairs of apostrophe (0x27) to
+# left single quotation mark (U+2018) and right single quotation mark (U+2019)
+# and pairs of quotation mark (0x22) to
+# left double quotation mark (U+201C) and right double quotation mark (U+201D).
+#
+# When output to an UTF-8 terminal, the quotation characters appear perfectly.
+# When output to an ISO-8859-1 terminal, the single quotation marks are
+# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to
+# grave/acute accent (by libiconv), and the double quotation marks are
+# transliterated to 0x22.
+# When output to an ASCII terminal, the single quotation marks are
+# transliterated to apostrophes, and the double quotation marks are
+# transliterated to 0x22.
+#
diff --git a/scripts/po/es.gmo b/scripts/po/es.gmo
new file mode 100644
index 0000000..476c413
--- /dev/null
+++ b/scripts/po/es.gmo
Binary files differ
diff --git a/scripts/po/es.po b/scripts/po/es.po
new file mode 100644
index 0000000..65916aa
--- /dev/null
+++ b/scripts/po/es.po
@@ -0,0 +1,5199 @@
+# dpkg/scripts po translation to Spanish
+# Copyright (C) 2010 -2012 Software in the Public Interest
+# This file is distributed under the same license as the dpkg package.
+#
+# Changes:
+# - Initial translation
+# Omar Campagne Polaino <ocampagne@gmail.com>, 2010, 2011, 2012.
+#
+# - Updates
+# Javier Fernández-Sanguino <jfs@debian.org> 2014
+#
+# Traductores, si no conocen el formato PO, merece la pena leer la
+# documentación de gettext, especialmente las secciones dedicadas a este
+# formato, por ejemplo ejecutando:
+# info -n '(gettext)PO Files'
+# info -n '(gettext)Header Entry'
+#
+# Equipo de traducción al español, por favor lean antes de traducir
+# los siguientes documentos:
+#
+# - El proyecto de traducción de Debian al español
+# https://www.debian.org/intl/spanish/
+# especialmente las notas y normas de traducción en
+# https://www.debian.org/intl/spanish/notas
+#
+# - La guía de traducción de po's de debconf:
+# /usr/share/doc/po-debconf/README-trans
+# o https://www.debian.org/intl/l10n/po-debconf/README-trans
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: dpkg-dev 1.16.8\n"
+"Report-Msgid-Bugs-To: debian-dpkg@lists.debian.org\n"
+"POT-Creation-Date: 2023-05-11 02:03+0000\n"
+"PO-Revision-Date: 2014-12-02 20:24+0100\n"
+"Last-Translator: Omar Campagne <ocampagne@gmail.com>\n"
+"Language-Team: Spanish <debian-l10n-spanish@lists.debian.org>\n"
+"Language: es\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Virtaal 0.7.1\n"
+
+#: scripts/dpkg-architecture.pl scripts/dpkg-buildflags.pl
+#: scripts/dpkg-buildpackage.pl scripts/dpkg-checkbuilddeps.pl
+#: scripts/dpkg-distaddfile.pl scripts/dpkg-genbuildinfo.pl
+#: scripts/dpkg-genchanges.pl scripts/dpkg-gencontrol.pl
+#: scripts/dpkg-gensymbols.pl scripts/dpkg-mergechangelogs.pl
+#: scripts/dpkg-name.pl scripts/dpkg-parsechangelog.pl
+#: scripts/dpkg-scanpackages.pl scripts/dpkg-scansources.pl
+#: scripts/dpkg-shlibdeps.pl scripts/dpkg-source.pl scripts/dpkg-vendor.pl
+#, perl-format
+msgid "Debian %s version %s.\n"
+msgstr "Debian %s versión %s.\n"
+
+#: scripts/dpkg-architecture.pl scripts/dpkg-buildflags.pl
+#: scripts/dpkg-buildpackage.pl scripts/dpkg-distaddfile.pl
+#: scripts/dpkg-genbuildinfo.pl scripts/dpkg-genchanges.pl
+#: scripts/dpkg-gencontrol.pl scripts/dpkg-gensymbols.pl
+#: scripts/dpkg-parsechangelog.pl scripts/dpkg-shlibdeps.pl
+#: scripts/dpkg-source.pl scripts/dpkg-vendor.pl
+msgid ""
+"\n"
+"This is free software; see the GNU General Public License version 2 or\n"
+"later for copying conditions. There is NO warranty.\n"
+msgstr ""
+"\n"
+"Esto es software libre; vea la versión 2 o posterior de la Licencia Pública\n"
+"General GNU para condiciones de copia. NO hay ninguna garantía.\n"
+
+#: scripts/dpkg-architecture.pl scripts/dpkg-vendor.pl
+#, perl-format
+msgid "Usage: %s [<option>...] [<command>]"
+msgstr "Uso: %s [<opción>...] [<orden>]"
+
+#: scripts/dpkg-architecture.pl
+msgid ""
+"Commands:\n"
+" -l, --list list variables (default).\n"
+" -L, --list-known list valid architectures (matching some "
+"criteria).\n"
+" -e, --equal <arch> compare with host Debian architecture.\n"
+" -i, --is <arch-wildcard> match against host Debian architecture.\n"
+" -q, --query <variable> prints only the value of <variable>.\n"
+" -s, --print-set print command to set environment variables.\n"
+" -u, --print-unset print command to unset environment variables.\n"
+" -c, --command <command> set environment and run the command in it.\n"
+" -?, --help show this help message.\n"
+" --version show the version."
+msgstr ""
+"Órdenes:\n"
+" -l, --list Muestra las variables (por omisión).\n"
+" -L, --list-known Muestra las arquitecturas válidas (que cumplen un "
+"criterio).\n"
+" -e, --equal <arq> Compara con la arquitectura de Debian actual.\n"
+" -i, --is <arq-comodín> Comprueba si la arquitectura de Debian actual "
+"coincide con <arq-comodín>.\n"
+" -q, --query <variable> Sólo muestra el valor de <variable>.\n"
+" -s, --print-set Muestra la orden para definir variables de "
+"entorno.\n"
+" -u, --print-unset Muestra la orden para desactivar variables de "
+"entorno.\n"
+" -c, --command <orden> Define el entorno y ejecuta la orden en él.\n"
+" -?, --help Muestra este mensaje de ayuda.\n"
+" --version Muestra la versión."
+
+#: scripts/dpkg-architecture.pl
+#, fuzzy
+#| msgid ""
+#| "Options:\n"
+#| " -a, --host-arch <arch> set host Debian architecture.\n"
+#| " -t, --host-type <type> set host GNU system type.\n"
+#| " -A, --target-arch <arch> set target Debian architecture.\n"
+#| " -T, --target-type <type> set target GNU system type.\n"
+#| " -W, --match-wildcard <arch-wildcard>\n"
+#| " restrict architecture list matching <arch-"
+#| "wildcard>.\n"
+#| " -B, --match-bits <arch-bits>\n"
+#| " restrict architecture list matching <arch-"
+#| "bits>.\n"
+#| " -E, --match-endian <arch-endian>\n"
+#| " restrict architecture list matching <arch-"
+#| "endian>.\n"
+#| " -f, --force force flag (override variables set in "
+#| "environment)."
+msgid ""
+"Options:\n"
+" -a, --host-arch <arch> set host Debian architecture.\n"
+" -t, --host-type <type> set host GNU system type.\n"
+" -A, --target-arch <arch> set target Debian architecture.\n"
+" -T, --target-type <type> set target GNU system type.\n"
+" -W, --match-wildcard <arch-wildcard>\n"
+" restrict architecture list matching <arch-"
+"wildcard>.\n"
+" -B, --match-bits <arch-bits>\n"
+" restrict architecture list matching <arch-"
+"bits>.\n"
+" -E, --match-endian <arch-endian>\n"
+" restrict architecture list matching <arch-"
+"endian>.\n"
+" --print-format <format>\n"
+" use <format> for --print-set and --print-unset,\n"
+" allowed values: shell (default), make.\n"
+" -f, --force force flag (override variables set in "
+"environment)."
+msgstr ""
+"Opciones:\n"
+" -a, --host-arch <arq> fija la arquitectura del sistema Debian.\n"
+" -t, --host-type <tipo> fija el tipo de sistema GNU GNU del equipo.\n"
+" -A, --target-arch <aq> fija la arquitectura de Debian objetivo.\n"
+" -T, --target-type <tipo> sfija el tipo de sistema GNU objetivo.\n"
+" -W, --match-wildcard <arq-comodín>\n"
+" restringe la arquitectura a la lista que "
+"coincide con <arq-comodín>.\n"
+" -B, --match-bits <arq-bits>\n"
+" restringe la arquitectura a la lista que "
+"coincide con <arch-bits>.\n"
+" -E, --match-endian <arq-endian>\n"
+" restringe la arquitectura a la lista que "
+"coincide con <arch-endian>.\n"
+" -f, --force bandera de forzaje (toma precedencia sobre las "
+"variables\n"
+" definidas en el entorno)."
+
+#: scripts/dpkg-architecture.pl
+#, perl-format
+msgid "unknown Debian architecture %s, you must specify GNU system type, too"
+msgstr ""
+"la arquitectura de Debian %s es desconocida, también debe especificar el "
+"tipo de sistema GNU"
+
+#: scripts/dpkg-architecture.pl
+#, perl-format
+msgid "unknown GNU system type %s, you must specify Debian architecture, too"
+msgstr ""
+"el tipo de sistema GNU %s es desconocido, también debe especificar la "
+"arquitectura de Debian"
+
+#: scripts/dpkg-architecture.pl
+#, perl-format
+msgid "unknown default GNU system type for Debian architecture %s"
+msgstr ""
+"el tipo de sistema GNU para la arquitectura de Debian %s es desconocido"
+
+#: scripts/dpkg-architecture.pl
+#, perl-format
+msgid ""
+"default GNU system type %s for Debian arch %s does not match specified GNU "
+"system type %s"
+msgstr ""
+"El tipo de sistema GNU predefinido «%s» para la arquitectura de Debian «%s» "
+"no coincide con el tipo de sistema GNU definido «%s»"
+
+#: scripts/dpkg-architecture.pl
+#, fuzzy, perl-format
+#| msgid "%s is not a supported compression method"
+msgid "%s is not a supported print format"
+msgstr "%s no es un método de compresión aceptado"
+
+#: scripts/dpkg-architecture.pl
+#, perl-format
+msgid "%s is not a supported variable name"
+msgstr "%s no es un nombre de variable aceptado"
+
+#: scripts/dpkg-architecture.pl scripts/dpkg-buildflags.pl
+#: scripts/dpkg-distaddfile.pl scripts/dpkg-genbuildinfo.pl
+#: scripts/dpkg-genchanges.pl scripts/dpkg-gencontrol.pl
+#: scripts/dpkg-gensymbols.pl scripts/dpkg-name.pl
+#: scripts/dpkg-parsechangelog.pl scripts/dpkg-shlibdeps.pl
+#: scripts/dpkg-vendor.pl
+#, perl-format
+msgid "unknown option '%s'"
+msgstr "la opción «%s» es desconocida"
+
+#: scripts/dpkg-architecture.pl
+#, fuzzy, perl-format
+#| msgid ""
+#| "specified GNU system type %s does not match gcc system type %s, try "
+#| "setting a correct CC environment variable"
+msgid ""
+"specified GNU system type %s does not match CC system type %s, try setting a "
+"correct CC environment variable"
+msgstr ""
+"El tipo de sistema GNU especificado «%s» no coincide con el tipo de sistema "
+"gcc «%s», intente definir una variable de entorno CC adecuada."
+
+#: scripts/dpkg-architecture.pl scripts/dpkg-shlibdeps.pl scripts/Dpkg/IPC.pm
+#: scripts/Dpkg/Shlibs/Cppfilt.pm
+#, perl-format
+msgid "unable to execute %s"
+msgstr "no se pudo ejecutar %s"
+
+#: scripts/dpkg-buildflags.pl
+#, perl-format
+msgid "Usage: %s [<command>]"
+msgstr "Uso: %s [<orden>]"
+
+#: scripts/dpkg-buildflags.pl
+#, fuzzy
+#| msgid ""
+#| "Commands:\n"
+#| " --get <flag> output the requested flag to stdout.\n"
+#| " --origin <flag> output the origin of the flag to stdout:\n"
+#| " value is one of vendor, system, user, env.\n"
+#| " --query-features <area>\n"
+#| " output the status of features for the given area.\n"
+#| " --list output a list of the flags supported by the current "
+#| "vendor.\n"
+#| " --export=(sh|make|cmdline|configure)\n"
+#| " output something convenient to import the "
+#| "compilation\n"
+#| " flags in a shell script, in make, or in a command "
+#| "line.\n"
+#| " --dump output all compilation flags with their values\n"
+#| " --status print a synopsis with all parameters affecting the\n"
+#| " behaviour of dpkg-buildflags and the resulting "
+#| "flags\n"
+#| " and their origin.\n"
+#| " --help show this help message.\n"
+#| " --version show the version.\n"
+msgid ""
+"Commands:\n"
+" --get <flag> output the requested flag to stdout.\n"
+" --origin <flag> output the origin of the flag to stdout:\n"
+" value is one of vendor, system, user, env.\n"
+" --status output a synopsis with all parameters affecting the\n"
+" program behaviour, the resulting flags and their "
+"origin.\n"
+" --query like --status, but in deb822 format.\n"
+" --query-features <area>\n"
+" output the status of features for the given area.\n"
+" --list output a list of the flags supported by the current "
+"vendor.\n"
+" --export=(sh|make|cmdline|configure)\n"
+" output something convenient to import the compilation\n"
+" flags in a shell script, in make, or in a command "
+"line.\n"
+" --dump output all compilation flags with their values.\n"
+" --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+"Órdenes:\n"
+" --get <opción> Muestra la opción solicitada por la salida estándar.\n"
+" --origin <opción> Muestra el origen de la opción por la salida\n"
+" estándar:\n"
+" El valor puede ser vendor, system, user, env.\n"
+" --query-features <area>\n"
+" Muestra el estado de las funcionalidades del área "
+"dada.\n"
+" --list Muestra una lista de las opciones permitidas por el\n"
+" proveedor actual.\n"
+" --export=(sh|make|cmdline|configure)\n"
+" Muestra algo adecuado para importar las opciones de\n"
+" compilación a un programa de shell, a un programa de "
+"«make»,\n"
+" o a una línea de órdenes.\n"
+" --dump Muestra todas las opciones de compilación y sus "
+"valores\n"
+" --status Muestra un resumen de todos los parámetros que "
+"modifican\n"
+" el comportamiento de dpkg-buildflags, las opciones\n"
+" resultantes y su origen.\n"
+" --help Muestra este mensaje de ayuda.\n"
+" --version Muestra la versión.\n"
+
+#: scripts/dpkg-buildflags.pl scripts/dpkg-source.pl scripts/dpkg-vendor.pl
+#, perl-format
+msgid "two commands specified: --%s and --%s"
+msgstr "se han definido dos órdenes: «--%s» y «--%s»"
+
+#: scripts/dpkg-buildflags.pl scripts/dpkg-vendor.pl
+#, perl-format
+msgid "%s needs a parameter"
+msgstr "%s requiere un parámetro"
+
+#: scripts/dpkg-buildpackage.pl scripts/dpkg-genbuildinfo.pl
+#: scripts/dpkg-genchanges.pl scripts/dpkg-gencontrol.pl
+#: scripts/dpkg-gensymbols.pl scripts/dpkg-parsechangelog.pl
+#, perl-format
+msgid "Usage: %s [<option>...]"
+msgstr "Uso: %s [<opción>...]"
+
+#: scripts/dpkg-buildpackage.pl
+#, fuzzy
+#| msgid ""
+#| "Options:\n"
+#| " -F (default) normal full build (binaries and sources).\n"
+#| " -g source and arch-indep build.\n"
+#| " -G source and arch-specific build.\n"
+#| " -b binary-only, no source files.\n"
+#| " -B binary-only, only arch-specific files.\n"
+#| " -A binary-only, only arch-indep files.\n"
+#| " -S source-only, no binary files.\n"
+#| " -nc do not clean source tree (implies -b).\n"
+#| " -tc clean source tree when finished.\n"
+#| " -D (default) check build dependencies and conflicts.\n"
+#| " -d do not check build dependencies and conflicts.\n"
+#| " -P<profiles> assume given build profiles as active (comma-separated "
+#| "list).\n"
+#| " -R<rules> rules file to execute (default is debian/rules).\n"
+#| " -T<target> call debian/rules <target> with the proper environment.\n"
+#| " --as-root ensure -T calls the target with root rights.\n"
+#| " -j[<number>] specify jobs to run simultaneously (passed to <rules>).\n"
+#| " -r<gain-root-command>\n"
+#| " command to gain root privileges (default is fakeroot).\n"
+#| " --check-command=<check-command>\n"
+#| " command to check the .changes file (no default).\n"
+#| " --check-option=<opt>\n"
+#| " pass <opt> to <check-command>.\n"
+#| " --hook-<hook-name>=<hook-command>\n"
+#| " set <hook-command> as the hook <hook-name>, known "
+#| "hooks:\n"
+#| " init preclean source build binary changes postclean\n"
+#| " check sign done\n"
+#| " -p<sign-command>\n"
+#| " command to sign .dsc and/or .changes files\n"
+#| " (default is gpg2 or gpg).\n"
+#| " -k<keyid> the key to use for signing.\n"
+#| " -ap add pause before starting signature process.\n"
+#| " -us unsigned source package.\n"
+#| " -uc unsigned .changes file.\n"
+#| " --force-sign\n"
+#| " force signing the resulting files.\n"
+#| " --admindir=<directory>\n"
+#| " change the administrative directory.\n"
+#| " -?, --help show this help message.\n"
+#| " --version show the version."
+msgid ""
+"Options:\n"
+" --build=<type>[,...] specify the build <type>: full, source, "
+"binary,\n"
+" any, all (default is 'full').\n"
+" -F, --build=full normal full build (source and binary; "
+"default).\n"
+" -g, --build=source,all source and arch-indep build.\n"
+" -G, --build=source,any source and arch-specific build.\n"
+" -b, --build=binary binary-only, no source files.\n"
+" -B, --build=any binary-only, only arch-specific files.\n"
+" -A, --build=all binary-only, only arch-indep files.\n"
+" -S, --build=source source-only, no binary files.\n"
+" -nc, --no-pre-clean do not pre clean source tree (implies -b).\n"
+" --pre-clean pre clean source tree (default).\n"
+" --no-post-clean do not post clean source tree (default).\n"
+" -tc, --post-clean post clean source tree.\n"
+" --sanitize-env sanitize the build environment.\n"
+" -D, --check-builddeps check build dependencies and conflicts "
+"(default).\n"
+" -d, --no-check-builddeps do not check build dependencies and "
+"conflicts.\n"
+" --ignore-builtin-builddeps\n"
+" do not check builtin build dependencies.\n"
+" -P, --build-profiles=<profiles>\n"
+" assume comma-separated build <profiles> as "
+"active.\n"
+" --rules-requires-root assume legacy Rules-Requires-Root field "
+"value.\n"
+" -R, --rules-file=<rules> rules file to execute (default is debian/"
+"rules).\n"
+" -T, --rules-target=<target> call debian/rules <target>.\n"
+" --as-root ensure -T calls the target with root rights.\n"
+" -j, --jobs[=<jobs>|auto] jobs to run simultaneously (passed to "
+"<rules>),\n"
+" (default; default is auto, opt-in mode).\n"
+" -J, --jobs-try[=<jobs>|auto]\n"
+" alias for -j, --jobs.\n"
+" --jobs-force[=<jobs>|auto]\n"
+" jobs to run simultaneously (passed to "
+"<rules>),\n"
+" (default is auto, forced mode).\n"
+" -r, --root-command=<command>\n"
+" command to gain root rights (default is "
+"fakeroot).\n"
+" --check-command=<command>\n"
+" command to check the .changes file (no "
+"default).\n"
+" --check-option=<opt> pass <opt> to check <command>.\n"
+" --hook-<name>=<command> set <command> as the hook <name>, known "
+"hooks:\n"
+" init preclean source build binary buildinfo\n"
+" changes postclean check sign done\n"
+" --buildinfo-file=<file> set the .buildinfo filename to generate.\n"
+" --buildinfo-option=<opt>\n"
+" pass option <opt> to dpkg-genbuildinfo.\n"
+" --changes-file=<file> set the .changes filename to generate.\n"
+" --sign-backend=<backend>\n"
+" OpenPGP backend to use to sign\n"
+" (default is auto).\n"
+" -p, --sign-command=<command>\n"
+" command to sign .dsc and/or .changes files\n"
+" (default is gpg).\n"
+" --sign-keyfile=<file> the key file to use for signing.\n"
+" -k, --sign-keyid=<keyid> the key id to use for signing.\n"
+" --sign-key=<keyid> alias for -k, --sign-keyid.\n"
+" -ap, --sign-pause add pause before starting signature process.\n"
+" -us, --unsigned-source unsigned source package.\n"
+" -ui, --unsigned-buildinfo unsigned .buildinfo file.\n"
+" -uc, --unsigned-changes unsigned .buildinfo and .changes file.\n"
+" --no-sign do not sign any file.\n"
+" --force-sign force signing the resulting files.\n"
+" --admindir=<directory> change the administrative directory.\n"
+" -?, --help show this help message.\n"
+" --version show the version."
+msgstr ""
+"Opciones:\n"
+" -F (Predeterminado) construcción completa habitual (binario y fuentes).\n"
+" -g Construir fuentes y paquetes independientes de "
+"arquitectura.\n"
+" -G Construir fuentes y paquetes dependientes de arquitectura.\n"
+" -b Sólo binario, no construye las fuentes.\n"
+" -B Sólo binario, sin ficheros independientes de arquitectura.\n"
+" -A Sólo binario, sin ficheros independientes de arquitectura.\n"
+" -S Sólo fuentes, sin ficheros binarios.\n"
+" -nc No limpia el árbol de fuentes (implica -b).\n"
+" -tc Limpia el árbol de fuentes al finalizar.\n"
+" -D (Predeterminado) comprueba dependencias de construcción y conflictos.\n"
+" -d No comprueba dependencias de construcción ni conflictos.\n"
+" -P<perfiles> Asume que los perfiles de construcción indicados están "
+"activos\n"
+" (lista separada por comas).\n"
+" -R<rules> Fichero rules que ejecutar (por omisión, «debian/rules»).\n"
+" -T<tarea> Invoca debian/rules <tarea> con el entorno adecuado.\n"
+" --as-root Comprueba que «-T» invoque la tarea con permisos de "
+"«root».\n"
+" -j[<número>] Define las tareas que ejecutar de forma simultánea\n"
+" (se introduce a <rules>).\n"
+" -r<orden-para-obtener-root>\n"
+" Orden para obtener permisos de «root» (por omisión, "
+"fakeroot).\n"
+" --check-command=<orden-comprobación>\n"
+" Orden para comprobar el archivo .changes (no hay valor por "
+"omisión).\n"
+" --check-option=<opción>\n"
+" Pasar la opción <opción> a <orden-comprobación>.\n"
+" --hook-<nombre-gancho>=<orden-gancho>\n"
+" Fija <orden-gancho> como el gancho para <nombre-gancho>. "
+"Los\n"
+" ganchos conocidos son:\n"
+" init preclean source build binary changes postclean\n"
+" check sign done\n"
+" -p<orden-firmado>\n"
+" Orden para firmar ficheros «.dsc» y/o «.changes»\n"
+" (por omisión es gpg2 o gpg).\n"
+" -k<id-clave> Clave que utilizar para el firmado.\n"
+" -ap Añade una pausa antes del proceso de firmado.\n"
+" -us No firma el paquete fuente.\n"
+" -uc No firma el fichero «.changes».\n"
+" --force-sign\n"
+" Fuerza el firmado de los archivos generados.\n"
+" --admindir=<directorio>\n"
+" Cambia el directorio administrativo.\n"
+" -?, --help Muestra este mensaje de ayuda.\n"
+" --version Muestra la versión."
+
+#: scripts/dpkg-buildpackage.pl
+#, fuzzy
+#| msgid ""
+#| "Options passed to dpkg-architecture:\n"
+#| " -a, --host-arch <arch> set the host Debian architecture.\n"
+#| " -t, --host-type <type> set the host GNU system type.\n"
+#| " --target-arch <arch> set the target Debian architecture.\n"
+#| " --target-type <type> set the target GNU system type."
+msgid ""
+"Options passed to dpkg-architecture:\n"
+" -a, --host-arch <arch> set the host Debian architecture.\n"
+" -t, --host-type <type> set the host GNU system type.\n"
+" --target-arch <arch> set the target Debian architecture.\n"
+" --target-type <type> set the target GNU system type."
+msgstr ""
+"Ociones que se pasan a dpkg-architecture:\n"
+" -a, --host-arch <arq> fija la arquitectura Debian del equipo.\n"
+" -t, --host-type <tipo> fija el tipo de sistema GNU del equipo.\n"
+" --target-arch <arq> fija la arquitectura de Debian objetivo.\n"
+" --target-type <tipo> fija el tipo de sistema GNU objetivo."
+
+#: scripts/dpkg-buildpackage.pl
+#, fuzzy
+#| msgid ""
+#| "Options passed to dpkg-genchanges:\n"
+#| " -si (default) source includes orig, if new upstream.\n"
+#| " -sa source includes orig, always.\n"
+#| " -sd source is diff and .dsc only.\n"
+#| " -v<version> changes since version <version>.\n"
+#| " -m<maint> maintainer for package is <maint>.\n"
+#| " -e<maint> maintainer for release is <maint>.\n"
+#| " -C<descfile> changes are described in <descfile>.\n"
+#| " --changes-option=<opt>\n"
+#| " pass option <opt> to dpkg-genchanges."
+msgid ""
+"Options passed to dpkg-genchanges:\n"
+" -si source includes orig, if new upstream "
+"(default).\n"
+" -sa source includes orig, always.\n"
+" -sd source is diff and .dsc only.\n"
+" -v<version> changes since version <version>.\n"
+" -m, --source-by=<maint> maintainer for this source or build is "
+"<maint>.\n"
+" --build-by=<maint> ditto.\n"
+" -e, --release-by=<maint> maintainer for this change or release is "
+"<maint>.\n"
+" --changed-by=<maint> ditto.\n"
+" -C<descfile> changes are described in <descfile>.\n"
+" --changes-option=<opt> pass option <opt> to dpkg-genchanges."
+msgstr ""
+"Opciones que se introducen a dpkg-genchanges:\n"
+" -si (por omisión) La fuente incluye «orig» si hay una nueva versión "
+"original.\n"
+" -sa La fuente que se envía incluye «orig», siempre.\n"
+" -sd La fuente que se envía solo son ficheros diff y «."
+"dsc».\n"
+" -v<versión> Cambios desde la versión <versión>.\n"
+" -m<responsable> El responsable del paquete es <responsable>.\n"
+" -e<responsable> El responsable del envío es <responsable>.\n"
+" -C<fichero-desc> Los cambios se describen en el fichero <fichero-desc>.\n"
+" --changes-option=<opción>\n"
+" Pasa la <opción> a dpkg-genchanges."
+
+#: scripts/dpkg-buildpackage.pl
+#, fuzzy
+#| msgid ""
+#| "Options passed to dpkg-source:\n"
+#| " -sn force Debian native source format.\n"
+#| " -s[sAkurKUR] see dpkg-source for explanation.\n"
+#| " -z<level> compression level to use for source.\n"
+#| " -Z<compressor> compression to use for source (gz|xz|bzip2|lzma).\n"
+#| " -i[<regex>] ignore diffs of files matching regex.\n"
+#| " -I[<pattern>] filter out files when building tarballs.\n"
+#| " --source-option=<opt>\n"
+#| " pass option <opt> to dpkg-source.\n"
+msgid ""
+"Options passed to dpkg-source:\n"
+" -sn force Debian native source format.\n"
+" -s[sAkurKUR] see dpkg-source for explanation.\n"
+" -z, --compression-level=<level>\n"
+" compression level to use for source.\n"
+" -Z, --compression=<compressor>\n"
+" compression to use for source (gz|xz|bzip2|"
+"lzma).\n"
+" -i, --diff-ignore[=<regex>] ignore diffs of files matching <regex>.\n"
+" -I, --tar-ignore[=<pattern>]\n"
+" filter out files when building tarballs.\n"
+" --source-option=<opt> pass option <opt> to dpkg-source.\n"
+msgstr ""
+"Opciones que se introducen a dpkg-source:\n"
+" -sn Fuerza el formato nativo de Debian.\n"
+" -s[sAkurKUR] Para más información consulte dpkg-source.\n"
+" -z<nivel> Nivel de compresión de las fuentes.\n"
+" -Z<compresor> Compresor que utilizar para las fuentes (gz|xz|bzip2|"
+"lzma).\n"
+" -i[<regex>] Ignorar diff de ficheros que coinciden con la\n"
+" expresión regular.\n"
+" -I[<patrón>] Omite ficheros al generar los archivos tar.\n"
+" --source-option=<opción>\n"
+" Introduce <opción> a dpkg-source.\n"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "missing .buildinfo filename"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "passing %s via %s is not supported; please use %s instead"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+#, fuzzy
+#| msgid "parse changes file"
+msgid "missing .changes filename"
+msgstr "tratar el fichero de cambios «changes»"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "unknown hook name %s"
+msgstr "nombre de gancho «%s» desconocido"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "missing hook %s command"
+msgstr "falta la orden «hook» %s"
+
+#: scripts/dpkg-buildpackage.pl scripts/dpkg-genbuildinfo.pl
+#: scripts/dpkg-gencontrol.pl
+#, fuzzy, perl-format
+#| msgid "-E and -W are deprecated, they are without effect"
+msgid "%s is deprecated; it is without effect"
+msgstr "«-E» y «-W» están obsoletas y no tienen efecto"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "-s%s is deprecated; always using gpg style interface"
+msgstr "-s%s está obsoleto; utilice siempre el estilo de interfaz gpg"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "unknown option or argument %s"
+msgstr "el argumento u opción «%s» es desconocido"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "option %s is only meaningful with option %s"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "check-command '%s' not found"
+msgstr "no se ha encontrado la orden «%s» para hacer la comprobación"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "sign-command '%s' not found"
+msgstr "no se ha encontrado la orden «%s» para firmar"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source package"
+msgstr "paquete fuente"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source version"
+msgstr "versión de las fuentes"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source distribution"
+msgstr "distribución de las fuentes"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source changed by"
+msgstr "fuentes modificadas por"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "host architecture"
+msgstr "arquitectura del sistema"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "debian/rules is not executable; fixing that"
+msgstr "«debian/rules» no es un fichero ejecutable, reparando"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "build dependencies/conflicts unsatisfied; aborting"
+msgstr ""
+"Las dependencias y conflictos de construcción no están satisfechas, "
+"interrumpiendo"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "(Use -d flag to override.)"
+msgstr "(Use la opción «-d» para anularlo.)"
+
+#: scripts/dpkg-buildpackage.pl
+msgid ""
+"building a source package without cleaning up as you asked; it might contain "
+"undesired files"
+msgstr ""
+"construyendo un paquete fuente sin limpiar, como ha definido; puede contener "
+"ficheros no deseados"
+
+#: scripts/dpkg-buildpackage.pl
+#, fuzzy
+#| msgid "Press the return key to start signing process\n"
+msgid "Press <enter> to start the signing process.\n"
+msgstr "Pulse la tecla Intro para iniciar el proceso de firmado\n"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "not signing UNRELEASED build; use --force-sign to override"
+msgstr ""
+"no se firmará una construcción de tipo «UNRELEASED», utilice --force-sign "
+"para hacerlo"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "unable to determine %s"
+msgstr "no se pudo determinar «%s»"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "using a gain-root-command while being root"
+msgstr ""
+"está usando una orden para convertirse en administrador («gain-root-"
+"command»), a pesar de que ya es el administrador"
+
+#: scripts/dpkg-buildpackage.pl
+msgid ""
+"fakeroot not found, either install the fakeroot\n"
+"package, specify a command with the -r option, or run this as root"
+msgstr ""
+"no se ha encontrado fakeroot; puede instalar el paquete fakeroot,\n"
+"definir una orden con la opción «-r», o ejecutar esto como administrador"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "gain-root-command '%s' not found"
+msgstr "no se ha encontrado la orden «%s» para convertirse en administrador"
+
+#: scripts/dpkg-buildpackage.pl
+#, fuzzy, perl-format
+#| msgid "unknown file type"
+msgid "disallowed target in %s field keyword \"%s\""
+msgstr "el tipo de fichero es desconocido"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "%s field keyword \"%s\" is unknown in dpkg namespace"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "%s field keyword \"%s\" is uppercase; use \"%s\" instead"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "%s field keyword \"%s\" is invalid; use \"%s\" instead"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+#, fuzzy, perl-format
+#| msgid "unknown file type"
+msgid "%s field keyword \"%s\" is unknown"
+msgstr "el tipo de fichero es desconocido"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "field %s contains duplicate keyword \"%s\""
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "%s field contains both global and implementation specific keywords"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "unknown %% substitution in hook: %%%s"
+msgstr "variable de sustitución %% desconocida en gancho: %%%s"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid ""
+"short OpenPGP key IDs are broken; please use key fingerprints in %s or %s "
+"instead"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid ""
+"long OpenPGP key IDs are strongly discouraged; please use key fingerprints "
+"in %s or %s instead"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl scripts/dpkg-checkbuilddeps.pl
+#: scripts/dpkg-genbuildinfo.pl scripts/dpkg-name.pl scripts/Dpkg/Arch.pm
+#: scripts/Dpkg/IPC.pm scripts/Dpkg/Shlibs.pm
+#, perl-format
+msgid "cannot open %s"
+msgstr "no se puede abrir «%s»"
+
+#: scripts/dpkg-buildpackage.pl scripts/dpkg-distaddfile.pl
+#: scripts/dpkg-genbuildinfo.pl scripts/dpkg-gencontrol.pl
+#: scripts/Dpkg/Interface/Storable.pm scripts/Dpkg/Source/Package/V2.pm
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot close %s"
+msgstr "no se puede cerrar «%s»"
+
+#: scripts/dpkg-buildpackage.pl scripts/Dpkg/Source/Archive.pm
+#, fuzzy, perl-format
+#| msgid "cannot remove %s"
+msgid "cannot move %s to %s"
+msgstr "no se ha podido eliminar «%s»"
+
+#: scripts/dpkg-buildpackage.pl
+#, fuzzy, perl-format
+#| msgid "failed to sign .changes file"
+msgid "failed to sign %s file: %s"
+msgstr "fallo al firmar el fichero «.changes»"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source-only upload: Debian-native package"
+msgstr "subida sólo de fuentes: paquete nativos de Debian"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source-only, diff-only upload (original source NOT included)"
+msgstr ""
+"sólo fuentes, subida sólo de las diferencias, (NO se incluyen las fuentes "
+"originales)"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source-only upload (original source is included)"
+msgstr "subida sólo de fuentes (se incluyen las fuentes originales)"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "binary-only upload (no source included)"
+msgstr "subida sólo de binarios (no se incluye ninguna fuente)"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "full upload; Debian-native package (full source is included)"
+msgstr ""
+"subida completa; paquete nativo de Debian (se incluye la fuente completa)"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "binary and diff upload (original source NOT included)"
+msgstr "subida de binarios y diferencias (NO se incluye la fuente original)"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "full upload (original source is included)"
+msgstr "subida completa (se incluye la fuente original)"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid ""
+"%s must be updated to support the 'build-arch' and 'build-indep' targets (at "
+"least '%s' seems to be missing)"
+msgstr ""
+"se debe actualizar %s para la compatibilidad con las tareas «build-arch» y "
+"«build-indep» (en apariencia, falta «%s»)"
+
+#: scripts/dpkg-checkbuilddeps.pl
+#, perl-format
+msgid "Usage: %s [<option>...] [<control-file>]"
+msgstr "Uso: %s [<opción>...] [<fichero-control>]"
+
+#: scripts/dpkg-checkbuilddeps.pl
+#, fuzzy
+#| msgid ""
+#| "Options:\n"
+#| " -A ignore Build-Depends-Arch and Build-Conflicts-Arch.\n"
+#| " -B ignore Build-Depends-Indep and Build-Conflicts-Indep.\n"
+#| " -d build-deps use given string as build dependencies instead of\n"
+#| " retrieving them from control file\n"
+#| " -c build-conf use given string for build conflicts instead of\n"
+#| " retrieving them from control file\n"
+#| " -a arch assume given host architecture\n"
+#| " -P profiles assume given build profiles (comma-separated list)\n"
+#| " --admindir=<directory>\n"
+#| " change the administrative directory.\n"
+#| " -?, --help show this help message.\n"
+#| " --version show the version."
+msgid ""
+"Options:\n"
+" -A ignore Build-Depends-Arch and Build-Conflicts-Arch.\n"
+" -B ignore Build-Depends-Indep and Build-Conflicts-Indep.\n"
+" -I ignore built-in build dependencies and conflicts.\n"
+" -d build-deps use given string as build dependencies instead of\n"
+" retrieving them from control file\n"
+" -c build-conf use given string for build conflicts instead of\n"
+" retrieving them from control file\n"
+" -a arch assume given host architecture\n"
+" -P profiles assume given build profiles (comma-separated list)\n"
+" --admindir=<directory>\n"
+" change the administrative directory.\n"
+" -?, --help show this help message.\n"
+" --version show the version."
+msgstr ""
+"Opciones:\n"
+" -A Ignora Build-Depends-Arch y Build-Conflicts-Arch\n"
+" -B Ignora Build-Depends-Indep y Build-Conflicts-Indep\n"
+" -d dependencias-de-construcción\n"
+" Utiliza la cadena dada como dependencias de construcción "
+"en\n"
+" lugar de obtenerlos del fichero de control\n"
+" -c conflictos-de-construcción\n"
+" Utiliza la cadena dada como conflictos de construcción en\n"
+" lugar de obtenerlos del fichero de control\n"
+" -a arq Supone la arquitectura dada para el sistema actual\n"
+" -P perfiles Supone los perfiles de construcción indicados (lista\n"
+" separada por comas)\n"
+" --admindir=<directorio>\n"
+" Cambia el directorio administrativo\n"
+" -?, --help Muestra este mensaje de ayuda\n"
+" --version Muestra la versión"
+
+#: scripts/dpkg-checkbuilddeps.pl
+msgid ""
+"<control-file> is the control file to process (default: debian/control)."
+msgstr ""
+"<fichero-control> es el fichero de control a procesar («debian/control» por "
+"omisión)."
+
+#: scripts/dpkg-checkbuilddeps.pl scripts/dpkg-shlibdeps.pl
+#: scripts/dpkg-source.pl
+#, fuzzy, perl-format
+#| msgid "cannot open %s"
+msgid "cannot parse %s field"
+msgstr "no se puede abrir «%s»"
+
+#: scripts/dpkg-checkbuilddeps.pl
+#, fuzzy, perl-format
+#| msgid "%s: Unmet build dependencies: "
+msgid "Unmet build dependencies: %s"
+msgstr "%s: Dependencias de construcción no satisfechas: "
+
+#: scripts/dpkg-checkbuilddeps.pl
+#, fuzzy, perl-format
+#| msgid "%s: Build conflicts: "
+msgid "Build conflicts: %s"
+msgstr "%s: Conflictos de construcción: "
+
+#: scripts/dpkg-distaddfile.pl
+#, perl-format
+msgid ""
+"Usage: %s [<option>...] <filename> <section> <priority>\n"
+"\n"
+"Options:\n"
+" -f<files-list-file> write files here instead of debian/files.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+"Uso: %s [<opción>...] <nombre-fichero> <sección> <prioridad>\n"
+"\n"
+"Opciones:\n"
+" -f<lista-ficheros> Escribe los ficheros aquí en vez de\n"
+" «debian/files».\n"
+" -?, --help Muestra este mensaje de ayuda.\n"
+" --version Muestra la versión.\n"
+
+#: scripts/dpkg-distaddfile.pl
+msgid "need exactly a filename, section and priority"
+msgstr "Se necesita exactamente un nombre de fichero, sección y prioridad"
+
+#: scripts/dpkg-distaddfile.pl
+msgid "filename, section and priority may contain no whitespace"
+msgstr ""
+"El nombre de fichero, sección y prioridad no pueden contener espacios en "
+"blanco"
+
+#: scripts/dpkg-distaddfile.pl scripts/dpkg-genbuildinfo.pl
+#: scripts/dpkg-gencontrol.pl scripts/dpkg-mergechangelogs.pl
+#: scripts/Dpkg/Compression/FileHandle.pm scripts/Dpkg/File.pm
+#: scripts/Dpkg/IPC.pm scripts/Dpkg/Interface/Storable.pm
+#: scripts/Dpkg/Source/BinaryFiles.pm scripts/Dpkg/Source/Package.pm
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "cannot write %s"
+msgstr "no se pudo escribir «%s»"
+
+#: scripts/dpkg-distaddfile.pl scripts/dpkg-genbuildinfo.pl
+#: scripts/dpkg-gencontrol.pl
+msgid "install new files list file"
+msgstr "instalar el nuevo fichero «files» de la lista de ficheros"
+
+#: scripts/dpkg-genbuildinfo.pl
+msgid ""
+"Options:\n"
+" --build=<type>[,...] specify the build <type>: full, source, binary,\n"
+" any, all (default is 'full').\n"
+" -c<control-file> get control info from this file.\n"
+" -l<changelog-file> get per-version info from this file.\n"
+" -f<files-list-file> get .deb files list from this file.\n"
+" -F<changelog-format> force changelog format.\n"
+" -O[<buildinfo-file>] write to stdout (or <buildinfo-file>).\n"
+" -u<upload-files-dir> directory with files (default is '..').\n"
+" --always-include-kernel always include Build-Kernel-Version.\n"
+" --always-include-path always include Build-Path.\n"
+" --admindir=<directory> change the administrative directory.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+
+#: scripts/dpkg-genbuildinfo.pl
+#, fuzzy
+#| msgid "binary build with no binary artifacts found; cannot distribute"
+msgid "binary build with no binary artifacts found; .buildinfo is meaningless"
+msgstr ""
+"construcción binaria sin que se hayan encontrado artefactos binarios; no se "
+"puede distribuir"
+
+#: scripts/dpkg-genbuildinfo.pl
+#, fuzzy, perl-format
+#| msgid "cannot install output control file '%s'"
+msgid "cannot install output buildinfo file '%s'"
+msgstr "no se ha podido instalar el fichero de control de salida «%s»"
+
+#: scripts/dpkg-genchanges.pl
+#, fuzzy
+#| msgid ""
+#| "Options:\n"
+#| " -b binary-only build - no source files.\n"
+#| " -B arch-specific - no source or arch-indep "
+#| "files.\n"
+#| " -A only arch-indep - no source or arch-specific "
+#| "files.\n"
+#| " -S source-only upload.\n"
+#| " -c<control-file> get control info from this file.\n"
+#| " -l<changelog-file> get per-version info from this file.\n"
+#| " -f<files-list-file> get .deb files list from this file.\n"
+#| " -v<since-version> include all changes later than version.\n"
+#| " -C<changes-description> use change description from this file.\n"
+#| " -m<maintainer> override control's maintainer value.\n"
+#| " -e<maintainer> override changelog's maintainer value.\n"
+#| " -u<upload-files-dir> directory with files (default is '..').\n"
+#| " -si (default) src includes orig if new upstream.\n"
+#| " -sa source includes orig src.\n"
+#| " -sd source is diff and .dsc only.\n"
+#| " -q quiet - no informational messages on stderr.\n"
+#| " -F<changelog-format> force changelog format.\n"
+#| " -V<name>=<value> set a substitution variable.\n"
+#| " -T<substvars-file> read variables here, not debian/substvars.\n"
+#| " -D<field>=<value> override or add a field and value.\n"
+#| " -U<field> remove a field.\n"
+#| " -?, --help show this help message.\n"
+#| " --version show the version.\n"
+msgid ""
+"Options:\n"
+" --build=<type>[,...] specify the build <type>: full, source, binary,\n"
+" any, all (default is 'full').\n"
+" -g source and arch-indep build.\n"
+" -G source and arch-specific build.\n"
+" -b binary-only, no source files.\n"
+" -B binary-only, only arch-specific files.\n"
+" -A binary-only, only arch-indep files.\n"
+" -S source-only, no binary files.\n"
+" -c<control-file> get control info from this file.\n"
+" -l<changelog-file> get per-version info from this file.\n"
+" -f<files-list-file> get .deb files list from this file.\n"
+" -v<since-version> include all changes later than version.\n"
+" -C<changes-description> use change description from this file.\n"
+" -m<maintainer> override control's maintainer value.\n"
+" -e<maintainer> override changelog's maintainer value.\n"
+" -u<upload-files-dir> directory with files (default is '..').\n"
+" -si source includes orig, if new upstream (default).\n"
+" -sa source includes orig, always.\n"
+" -sd source is diff and .dsc only.\n"
+" -q quiet - no informational messages on stderr.\n"
+" -F<changelog-format> force changelog format.\n"
+" -V<name>=<value> set a substitution variable.\n"
+" -T<substvars-file> read variables here, not debian/substvars.\n"
+" -D<field>=<value> override or add a field and value.\n"
+" -U<field> remove a field.\n"
+" -O[<filename>] write to stdout (default) or <filename>.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+"Opciones:\n"
+" -b Construcción solo binaria, sin ficheros fuente.\n"
+" -B Construcción de arquitectura específica, sin\n"
+" ficheros fuente ni independientes de "
+"arquitectura.\n"
+" -A Solo independiente de arquitectura, sin ficheros\n"
+" fuente o de arquitectura específica.\n"
+" -S Envío solo de fuentes.\n"
+" -c<fichero-control> Obtiene información de control de este fichero.\n"
+" -l<fichero-changelog> Obtiene información de la versión de este "
+"fichero.\n"
+" -f<fichero-lista-ficheros> Obtiene la lista de ficheros del paquete «."
+"deb»\n"
+" de este fichero.\n"
+" -v<desde-versión> Incluye todos los cambios posteriores a la\n"
+" versión.\n"
+" -C<descripción-cambios> Utiliza la descripción del cambio de este "
+"fichero.\n"
+" -m<desarrollador> Sustituye el valor del desarrollador de control.\n"
+" -e<desarrollador> Sustituye el valor del desarrollador del fichero\n"
+" «changelog».\n"
+" -u<directorio-ficheros-que-enviar> El directorio con los ficheros,\n"
+" (por omisión, «..»).\n"
+" -si (predefinido) La fuente incluye el fichero «orig» si hay una\n"
+" nueva versión de la fuente original.\n"
+" -sa La fuente incluye el fichero «orig» de fuentes.\n"
+" -sd La fuente es solo los fichero «diff» y «.dsc».\n"
+" -q Silencioso, sin mensajes informativos por la\n"
+" salida estándar de error.\n"
+" -F<formato-changelog> Fuerza el formato de «changelog»..\n"
+" -V<nombre>=<valor> Define una variable de sustitución.\n"
+" -T<fichero-substvars> Lee las variables de aquí, y no de\n"
+" «debian/substvars».\n"
+" -D<campo>=<valor> Sustituye o añade un campo y un valor.\n"
+" -U<campo> Elimina un campo.\n"
+" -?, --help Muestra este mensaje de ayuda.\n"
+" --version Muestra la versión.\n"
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "the current version (%s) is earlier than the previous one (%s)"
+msgstr "la versión actual (%s) es más antigua que la anterior (%s)"
+
+#: scripts/dpkg-genchanges.pl
+msgid "missing Section for source files"
+msgstr "falta el campo «Section» para los ficheros de fuentes"
+
+#: scripts/dpkg-genchanges.pl
+msgid "missing Priority for source files"
+msgstr "falta el campo «Priority» para los ficheros de fuentes"
+
+#: scripts/dpkg-genchanges.pl scripts/Dpkg/Vendor.pm
+#, perl-format
+msgid "%s is empty"
+msgstr "%s está vacío"
+
+#: scripts/dpkg-genchanges.pl
+msgid "not including original source code in upload"
+msgstr "no se está incluyendo el código fuente original en la subida"
+
+#: scripts/dpkg-genchanges.pl
+msgid "ignoring -sd option for native Debian package"
+msgstr "ignorando la opción «-sd» para paquetes nativos de Debian"
+
+#: scripts/dpkg-genchanges.pl
+msgid "including full source code in upload"
+msgstr "incluyendo el código fuente completo en la subida"
+
+#: scripts/dpkg-genchanges.pl
+#, fuzzy
+#| msgid "%s: arch-specific upload - not including arch-independent packages"
+msgid ""
+"binary-only arch-specific upload (source code and arch-indep packages not "
+"included)"
+msgstr ""
+"%s: subida de datos específicos a la arquitectura - no se incluyen paquetes "
+"independientes de la arquitectura"
+
+#: scripts/dpkg-genchanges.pl
+#, fuzzy
+#| msgid "%s: arch-indep upload - not including arch-specific packages"
+msgid ""
+"binary-only arch-indep upload (source code and arch-specific packages not "
+"included)"
+msgstr ""
+"%s: subida de datos independientes de la arquitectura - no se incluyen "
+"paquetes específicos a la arquitectura"
+
+#: scripts/dpkg-genchanges.pl
+#, fuzzy
+#| msgid "binary only upload (no source included)"
+msgid "binary-only upload (no source code included)"
+msgstr "subida sólo de binarios (no se incluye ninguna fuente)"
+
+#: scripts/dpkg-genchanges.pl
+msgid "binary build with no binary artifacts found; cannot distribute"
+msgstr ""
+"construcción binaria sin que se hayan encontrado artefactos binarios; no se "
+"puede distribuir"
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "package %s in control file but not in files list"
+msgstr ""
+"el paquete %s está presente en el fichero «control» pero no en la lista de "
+"ficheros"
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "package %s listed in files list but not in control info"
+msgstr ""
+"el paquete %s está presente en la lista de ficheros pero no en la "
+"información de control"
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "missing Section for binary package %s; using '-'"
+msgstr "falta el campo «Section» para el paquete binario %s, usando '-'"
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "package %s has section %s in control file but %s in files list"
+msgstr ""
+"el paquete %s tiene una sección %s en el fichero de control pero %s en la "
+"lista de ficheros"
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "missing Priority for binary package %s; using '-'"
+msgstr "falta el campo «Priority» para el paquete binario %s; usando «-»"
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "package %s has priority %s in control file but %s in files list"
+msgstr ""
+"el paquete %s tiene un prioridad %s en el fichero de control pero %s en la "
+"lista de ficheros"
+
+#: scripts/dpkg-genchanges.pl scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "missing information for critical output field %s"
+msgstr "falta información en el campo de salida crítico «%s»"
+
+#: scripts/dpkg-genchanges.pl scripts/dpkg-gencontrol.pl
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "missing information for output field %s"
+msgstr "falta información en el campo de salida «%s»"
+
+#: scripts/dpkg-gencontrol.pl
+#, fuzzy
+#| msgid ""
+#| "Options:\n"
+#| " -p<package> print control file for package.\n"
+#| " -c<control-file> get control info from this file.\n"
+#| " -l<changelog-file> get per-version info from this file.\n"
+#| " -F<changelog-format> force changelog format.\n"
+#| " -v<force-version> set version of binary package.\n"
+#| " -f<files-list-file> write files here instead of debian/files.\n"
+#| " -P<package-build-dir> temporary build dir instead of debian/tmp.\n"
+#| " -n<filename> assume the package filename will be "
+#| "<filename>.\n"
+#| " -O write to stdout, not .../DEBIAN/control.\n"
+#| " -is, -ip, -isp, -ips deprecated, ignored for compatibility.\n"
+#| " -D<field>=<value> override or add a field and value.\n"
+#| " -U<field> remove a field.\n"
+#| " -V<name>=<value> set a substitution variable.\n"
+#| " -T<substvars-file> read variables here, not debian/substvars.\n"
+#| " -?, --help show this help message.\n"
+#| " --version show the version.\n"
+msgid ""
+"Options:\n"
+" -p<package> print control file for package.\n"
+" -c<control-file> get control info from this file.\n"
+" -l<changelog-file> get per-version info from this file.\n"
+" -F<changelog-format> force changelog format.\n"
+" -v<force-version> set version of binary package.\n"
+" -f<files-list-file> write files here instead of debian/files.\n"
+" -P<package-build-dir> temporary build directory instead of debian/tmp.\n"
+" -n<filename> assume the package filename will be <filename>.\n"
+" -O[<file>] write to stdout (or <file>), not .../DEBIAN/"
+"control.\n"
+" -is, -ip, -isp, -ips deprecated, ignored for compatibility.\n"
+" -D<field>=<value> override or add a field and value.\n"
+" -U<field> remove a field.\n"
+" -V<name>=<value> set a substitution variable.\n"
+" -T<substvars-file> read variables here, not debian/substvars.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+"Opciones\n"
+" -p<paquete> Muestra el fichero de control del paquete.\n"
+" -c<fichero-control> Obtiene información de control desde este "
+"fichero.\n"
+" -l<fichero-changelog> Obtiene información de un versión desde este\n"
+" fichero.\n"
+" -F<formato-changelog> Fuerza el formato de fichero «changelog».\n"
+" -v<force-versión> Define la versión del paquete binario.\n"
+" -f<lista-ficheros> Escribe aquí los fichero en lugar de\n"
+" «debian/files».\n"
+" -P<directorio-construcción-paquete> Directorio temporal de construcción\n"
+" en lugar de «debian/tmp».\n"
+" -n<nombre-fichero> Supone que el nombre de fichero de paquete es\n"
+" <nombre-fichero>.\n"
+" -O Escribe por la salida estándar, no\n"
+" «.../DEBIAN/control».\n"
+" -is, -ip, -isp, -ips Obsoleto, se ignora por compatibilidad.\n"
+" -D<campo>=<valor> Sustituye o añade un campo y un valor.\n"
+" -U<campo> Elimina un campo.\n"
+" -V<nombre>=<valor> Define una variable de sustitución.\n"
+" -T<fichero-substvars> Lee las variables aquí y no desde\n"
+" «debian/substvars».\n"
+" -?, --help Muestra este mensaje de ayuda.\n"
+" --version Muestra la versión.\n"
+
+#: scripts/dpkg-gencontrol.pl scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "illegal package name '%s': %s"
+msgstr "nombre de paquete ilegal «%s»: %s"
+
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid "package %s not in control info"
+msgstr "el paquete %s no está en la información de control"
+
+#: scripts/dpkg-gencontrol.pl scripts/dpkg-gensymbols.pl
+msgid "no package stanza found in control info"
+msgstr ""
+"no se ha encontrado la declaración del paquete en la información de control"
+
+#: scripts/dpkg-gencontrol.pl scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "must specify package since control info has many (%s)"
+msgstr ""
+"debe definir un paquete ya que la información de control tiene varios (%s)"
+
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid "package %s: "
+msgstr "paquete %s:"
+
+#: scripts/dpkg-gencontrol.pl
+#, fuzzy, perl-format
+#| msgid ""
+#| "current host architecture '%s' does not appear in package's architecture "
+#| "list (%s)"
+msgid ""
+"current host architecture '%s' does not appear in package '%s' architecture "
+"list (%s)"
+msgstr ""
+"la arquitectura del sistema actual «%s» no está presente en la lista de "
+"arquitecturas de paquete (%s)"
+
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid "%s field of package %s: "
+msgstr "campo «%s» del paquete %s:"
+
+#: scripts/dpkg-gencontrol.pl
+#, fuzzy, perl-format
+#| msgid "source package name '%s' is illegal: %s"
+msgid "parsing package '%s' %s field: %s"
+msgstr "el nombre de paquete fuente «%s» no es válido: %s"
+
+#: scripts/dpkg-gencontrol.pl
+#, fuzzy, perl-format
+#| msgid ""
+#| "the %s field contains an arch-specific dependency but the package is "
+#| "architecture all"
+msgid ""
+"the %s field contains an arch-specific dependency but the package '%s' is "
+"architecture all"
+msgstr ""
+"el campo «%s» contiene una dependencia específica a la arquitectura, pero el "
+"paquete tiene la arquitectura «all»"
+
+#: scripts/dpkg-gencontrol.pl
+#, fuzzy, perl-format
+#| msgid "%s package with udeb specific field %s"
+msgid "%s package '%s' with udeb specific field %s"
+msgstr "paquete %s con campo específico de udeb «%s»"
+
+#: scripts/dpkg-gencontrol.pl scripts/Dpkg/Source/Package.pm
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot stat %s"
+msgstr "no se puede obtener el estado (stat) de «%s»"
+
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid "cannot install output control file '%s'"
+msgstr "no se ha podido instalar el fichero de control de salida «%s»"
+
+#: scripts/dpkg-gensymbols.pl
+#, fuzzy
+#| msgid ""
+#| "Options:\n"
+#| " -p<package> generate symbols file for package.\n"
+#| " -P<package-build-dir> temporary build dir instead of debian/tmp.\n"
+#| " -e<library> explicitly list libraries to scan.\n"
+#| " -v<version> version of the packages (defaults to\n"
+#| " version extracted from debian/changelog).\n"
+#| " -c<level> compare generated symbols file with the "
+#| "reference\n"
+#| " template in the debian directory and fail if\n"
+#| " difference is too important; level goes from 0 "
+#| "for\n"
+#| " no check, to 4 for all checks (default level "
+#| "is 1).\n"
+#| " -q keep quiet and never emit any warnings or\n"
+#| " generate a diff between generated symbols\n"
+#| " file and the reference template.\n"
+#| " -I<file> force usage of <file> as reference symbols\n"
+#| " file instead of the default file.\n"
+#| " -O<file> write to <file>, not .../DEBIAN/symbols.\n"
+#| " -O write to stdout, not .../DEBIAN/symbols.\n"
+#| " -t write in template mode (tags are not\n"
+#| " processed and included in output).\n"
+#| " -V verbose output; write deprecated symbols and "
+#| "pattern\n"
+#| " matching symbols as comments (in template mode "
+#| "only).\n"
+#| " -a<arch> assume <arch> as host architecture when "
+#| "processing\n"
+#| " symbol files.\n"
+#| " -d display debug information during work.\n"
+#| " -?, --help show this help message.\n"
+#| " --version show the version.\n"
+msgid ""
+"Options:\n"
+" -l<library-path> add directory to private shared library search "
+"list.\n"
+" -p<package> generate symbols file for package.\n"
+" -P<package-build-dir> temporary build directory instead of debian/tmp.\n"
+" -e<library> explicitly list libraries to scan.\n"
+" -v<version> version of the packages (defaults to\n"
+" version extracted from debian/changelog).\n"
+" -c<level> compare generated symbols file with the "
+"reference\n"
+" template in the debian directory and fail if\n"
+" difference is too important; level goes from 0 "
+"for\n"
+" no check, to 4 for all checks (default level is "
+"1).\n"
+" -q keep quiet and never emit any warnings or\n"
+" generate a diff between generated symbols\n"
+" file and the reference template.\n"
+" -I<file> force usage of <file> as reference symbols\n"
+" file instead of the default file.\n"
+" -O[<file>] write to stdout (or <file>), not .../DEBIAN/"
+"symbols.\n"
+" -t write in template mode (tags are not\n"
+" processed and included in output).\n"
+" -V verbose output; write deprecated symbols and "
+"pattern\n"
+" matching symbols as comments (in template mode "
+"only).\n"
+" -a<arch> assume <arch> as host architecture when "
+"processing\n"
+" symbol files.\n"
+" -d display debug information during work.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+"Opciones:\n"
+" -p<paquete> Genera el fichero de símbolos.\n"
+" -P<directorio-construcción-paquete> Directorio temporal de construcción\n"
+" que utilizar en lugar de «debian/tmp».\n"
+" -e<biblioteca> Enumera de forma explícita las bibliotecas que\n"
+" analizar.\n"
+" -v<versión> Versión de los paquetes (por omisión, la\n"
+" que se extrae de «debian/changelog»).\n"
+" -c<nivel> Compara el fichero de símbolos generado con la\n"
+" plantilla de referencia en el directorio "
+"«debian»\n"
+" y falla si la diferencia es demasiado\n"
+" grande; el nivel va desde cero para no "
+"comprobar,\n"
+" y 4 para realizar todas las comprobaciones\n"
+" (por omisión, el nivel es 1).\n"
+" -q Modo silencioso, no muestra avisos ni genera un\n"
+" «diff» entre el fichero de símbolos generado\n"
+" y la plantilla de referencia.\n"
+" -I<fichero> Fuerza el uso de <fichero> como el fichero\n"
+" de símbolos de referencia en lugar del fichero\n"
+" predefinido.\n"
+" -O<fichero> Escribe en el <fichero>, no «.../DEBIAN/"
+"symbols».\n"
+" -O Escribe por la salida estándar, no\n"
+" «.../DEBIAN/symbols».\n"
+" -t Escribe en modo plantilla (no se procesan\n"
+" ni se incluye en la salida).\n"
+" -V Modo informativo; escribe símbolos obsoletos\n"
+" y símbolos de que encajan con el patrón\n"
+" como comentarios (solo en el modo plantilla).\n"
+" -a<arquitectura> Supone la <arquitectura> como la arquitectura\n"
+" al procesar ficheros de símbolos.\n"
+" -d Muestra información de depuración de fallos\n"
+" durante el funcionamiento.\n"
+" -?, --help Muestra este mensaje de ayuda.\n"
+" --version Muestra la versión.\n"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "pattern '%s' did not match any file"
+msgstr "El patrón «%s» con coincide con ningún fichero"
+
+#: scripts/dpkg-gensymbols.pl
+#, fuzzy, perl-format
+#| msgid "Can't read directory %s: %s"
+msgid "can't read directory %s: %s"
+msgstr "No se puede leer el directorio «%s»: %s"
+
+#: scripts/dpkg-gensymbols.pl
+#, fuzzy, perl-format
+#| msgid "Objdump couldn't parse %s\n"
+msgid "Dpkg::Shlibs::Objdump couldn't parse %s\n"
+msgstr "Objdump no pudo analizar «%s»\n"
+
+#: scripts/dpkg-gensymbols.pl
+msgid "<standard output>"
+msgstr "<salida estándar>"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "new libraries appeared in the symbols file: %s"
+msgstr "se han detectado nuevas bibliotecas en el fichero «symbols»: «%s»"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "some libraries disappeared in the symbols file: %s"
+msgstr "han desaparecido algunas bibliotecas en el fichero «symbols»: «%s»"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "some new symbols appeared in the symbols file: %s"
+msgstr "han aparecido algunos símbolos nuevos en el fichero «symbols»: «%s»"
+
+#: scripts/dpkg-gensymbols.pl
+msgid "see diff output below"
+msgstr "vea la salida del «diff» a continuación"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "some symbols or patterns disappeared in the symbols file: %s"
+msgstr ""
+"han desaparecido algunos símbolos o patrones en el fichero «symbols»: «%s»"
+
+#: scripts/dpkg-gensymbols.pl
+msgid "the generated symbols file is empty"
+msgstr "El fichero de símbolos generado está vacío"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "%s doesn't match completely %s"
+msgstr "«%s» no encaja totalmente con «%s»"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "no debian/symbols file used as basis for generating %s"
+msgstr ""
+"no se ha usado ningún fichero «debian/symbols» como base para generar «%s»"
+
+#: scripts/dpkg-mergechangelogs.pl
+msgid ""
+"This is free software; see the GNU General Public License version 2 or\n"
+"later for copying conditions. There is NO warranty.\n"
+msgstr ""
+"Esto es software libre; vea la versión 2 o posterior de la Licencia Pública\n"
+"General GNU para condiciones de copia. NO hay ninguna garantía.\n"
+
+#: scripts/dpkg-mergechangelogs.pl
+#, fuzzy, perl-format
+#| msgid ""
+#| "Usage: %s [<option>...] <old> <new-a> <new-b> [<out>]\n"
+#| "\n"
+#| "Options:\n"
+#| " -m, --merge-prereleases merge pre-releases together, ignores "
+#| "everything\n"
+#| " after the last '~' in the version.\n"
+#| " -?, --help show this help message.\n"
+#| " --version show the version.\n"
+msgid ""
+"Usage: %s [<option>...] <old> <new-a> <new-b> [<out>]\n"
+"\n"
+"Options:\n"
+" -m, --merge-prereleases merge pre-releases together, ignores everything\n"
+" after the last '~' in the version.\n"
+" --merge-unreleased merge UNRELEASED entries together, ignoring "
+"their\n"
+" version numbers.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+"Uso: %s [<opción>...] <antiguo> <nuevo-a> <nuevo-b> [<salida>]\n"
+"\n"
+"Opciones:\n"
+" -m, --merge-prereleases Fusiona pre-publicaciones e ignora todo\n"
+" después del último «~» en la versión.\n"
+" -?, --help Muestra este mensaje de ayuda.\n"
+" --version Muestra la versión.\n"
+
+#: scripts/dpkg-mergechangelogs.pl
+#, fuzzy
+#| msgid "-x needs at least one argument, the .dsc"
+msgid "needs at least three arguments"
+msgstr "«-x» requiere al menos un argumento, el fichero «.dsc»"
+
+#: scripts/dpkg-mergechangelogs.pl
+msgid "file arguments need to exist"
+msgstr "debe indicar los argumentos de fichero"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "Usage: %s [<option>...] <file>...\n"
+msgstr "Uso: %s [<opción>...] <fichero>...\n"
+
+#: scripts/dpkg-name.pl
+#, fuzzy
+#| msgid ""
+#| "\n"
+#| "Options:\n"
+#| " -a, --no-architecture no architecture part in filename.\n"
+#| " -o, --overwrite overwrite if file exists.\n"
+#| " -k, --symlink don't create a new file, but a symlink.\n"
+#| " -s, --subdir [dir] move file into subdir (use with care).\n"
+#| " -c, --create-dir create target dir if not there (use with "
+#| "care).\n"
+#| " -?, --help show this help message.\n"
+#| " -v, --version show the version.\n"
+#| "\n"
+#| "file.deb changes to <package>_<version>_<architecture>.<package_type>\n"
+#| "according to the 'underscores convention'.\n"
+msgid ""
+"\n"
+"Options:\n"
+" -a, --no-architecture no architecture part in filename.\n"
+" -o, --overwrite overwrite if file exists.\n"
+" -k, --symlink don't create a new file, but a symlink.\n"
+" -s, --subdir [dir] move file into subdirectory (use with care).\n"
+" -c, --create-dir create target directory if not there (use with "
+"care).\n"
+" -?, --help show this help message.\n"
+" -v, --version show the version.\n"
+"\n"
+"file.deb changes to <package>_<version>_<architecture>.<package_type>\n"
+"according to the 'underscores convention'.\n"
+msgstr ""
+"\n"
+"Opciones:\n"
+" -a, --no-architecture Sin información de arquitectura en el nombre\n"
+" del fichero.\n"
+" -o, --overwrite Sobreescribe el fichero, de existir.\n"
+" -k, --symlink Crea un enlace simbólico en lugar de un fichero.\n"
+" -s, --subdir [dir] Mueve el fichero al subdirectorio (usar con\n"
+" precaución).\n"
+" -c, --create-dir Crea el directorio destino si no existe\n"
+" (usar con precaución).\n"
+" -?, --help Muestra este mensaje de ayuda.\n"
+" -v, --version Muestra la versión.\n"
+"\n"
+"El fichero «file.deb» pasa a ser\n"
+"<paquete>_<versión>_<arquitectura>.<tipo-paquete>\n"
+"de acuerdo a la convención para el uso de guiones bajos.\n"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "cannot find '%s'"
+msgstr "no se puede encontrar «%s»"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "binary control file %s"
+msgstr "fichero binario de control «%s»"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "assuming architecture '%s' for '%s'"
+msgstr "suponiendo la arquitectura «%s» para «%s»"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "bad package control information for '%s'"
+msgstr "la información de control del paquete «%s» es inválida"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "assuming section '%s' for '%s'"
+msgstr "suponiendo la sección «%s» para «%s»"
+
+#: scripts/dpkg-name.pl
+#, fuzzy, perl-format
+#| msgid "no Package field found in '%s', skipping it"
+msgid "no Package field found in '%s', skipping package"
+msgstr "no se ha encontrado ningún campo «Package» en «%s», omitiendo"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "created directory '%s'"
+msgstr "se ha creado el directorio «%s»"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "cannot create directory '%s'"
+msgstr "no se puede crear el directorio «%s»"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "no such directory '%s', try --create-dir (-c) option"
+msgstr "el directorio «%s» no existe, pruebe la opción «--create-dir» (-c)"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "skipping '%s'"
+msgstr "omitiendo «%s»"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "cannot move '%s' to existing file"
+msgstr "no se puede mover «%s» a un fichero existente"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "moved '%s' to '%s'"
+msgstr "se ha movido «%s» a «%s»"
+
+#: scripts/dpkg-name.pl
+msgid "mkdir can be used to create directory"
+msgstr "se puede usar mkdir para crear un directorio"
+
+#: scripts/dpkg-name.pl
+msgid "need at least a filename"
+msgstr "se requiere al menos un nombre de fichero"
+
+#: scripts/dpkg-parsechangelog.pl
+#, fuzzy
+#| msgid ""
+#| "Options:\n"
+#| " -l<changelog-file> get per-version info from this file.\n"
+#| " -F<changelog-format> force changelog format.\n"
+#| " -L<libdir> look for changelog parsers in <libdir>.\n"
+#| " -?, --help show this help message.\n"
+#| " --version show the version."
+msgid ""
+"Options:\n"
+" -l, --file <changelog-file>\n"
+" get per-version info from this file.\n"
+" -F <changelog-format> force changelog format.\n"
+" -S, --show-field <field> show the values for <field>.\n"
+" -?, --help show this help message.\n"
+" --version show the version."
+msgstr ""
+"Opciones:\n"
+" -l<fichero-changelog> Obtiene información de la versión de este "
+"fichero.\n"
+" -F<formato-changelog> Fuerza el formato de fichero «changelog».\n"
+" -L<directorio-biblioteca> Busca analizadores de «changelog» en <libdir>.\n"
+" -?, --help Muestra este mensaje de ayuda.\n"
+" --version Muestra la versión."
+
+#: scripts/dpkg-parsechangelog.pl
+#, fuzzy
+#| msgid ""
+#| "Parser options:\n"
+#| " --format <output-format> see man page for list of available\n"
+#| " output formats, defaults to 'dpkg'\n"
+#| " for compatibility with dpkg-dev\n"
+#| " --since <version>, include all changes later than version\n"
+#| " -s<version>, -v<version>\n"
+#| " --until <version>, include all changes earlier than version\n"
+#| " -u<version>\n"
+#| " --from <version>, include all changes equal or later\n"
+#| " -f<version> than version\n"
+#| " --to <version>, -t<version> include all changes up to or equal\n"
+#| " than version\n"
+#| " --count <number>, include <number> entries from the top\n"
+#| " -c<number>, -n<number> (or the tail if <number> is lower than "
+#| "0)\n"
+#| " --offset <number>, change the starting point for --count,\n"
+#| " -o<number> counted from the top (or the tail if\n"
+#| " <number> is lower than 0)\n"
+#| " --all include all changes\n"
+msgid ""
+"Parser options:\n"
+" --format <output-format>\n"
+" set output format (defaults to 'dpkg').\n"
+" --reverse include all changes in reverse order.\n"
+" --all include all changes.\n"
+" -s, --since <version> include all changes later than <version>.\n"
+" -v <version> ditto.\n"
+" -u, --until <version> include all changes earlier than <version>.\n"
+" -f, --from <version> include all changes equal or later than "
+"<version>.\n"
+" -t, --to <version> include all changes up to or equal than "
+"<version>.\n"
+" -c, --count <number> include <number> entries from the top (or tail\n"
+" if <number> is lower than 0).\n"
+" -n <number> ditto.\n"
+" -o, --offset <number> change starting point for --count, counted from\n"
+" the top (or tail if <number> is lower than 0).\n"
+msgstr ""
+"Opciones de análisis:\n"
+" --format <formato-de-salida> Para una lista de los formatos de salida\n"
+" disponibles, consulte la página de manual.\n"
+" El formato predeterminado es «dpkg», para\n"
+" la compatibilidad con dpkg-dev\n"
+" --since <versión>, Incluye los cambios a partir de la versión\n"
+" -s<versión>, -v<versión>\n"
+" --until <versión>, Incluye los cambios anteriores a la versión\n"
+" -u<versión>\n"
+" --from <versión>, Incluye los cambios de la misma versión o\n"
+" -f<versión> posterior\n"
+" --to <versión>, -t<versión> Incluye los cambios de la misma versión o\n"
+" anterior\n"
+" --count <número>, Incluye el <número> de entradas desde el\n"
+" principio -c<número>, -n<número> (o "
+"el final si <número> es menor que cero)\n"
+" --offset <número>, Modifica el punto de partida de «--count»,\n"
+" -o<número> a partir del principio (o el final si el\n"
+" <número> es menor que cero)\n"
+" --all Incluye todos los cambios\n"
+
+#: scripts/dpkg-parsechangelog.pl
+#, fuzzy
+#| msgid "-E and -W are deprecated, they are without effect"
+msgid "-L is obsolete; it is without effect"
+msgstr "«-E» y «-W» están obsoletas y no tienen efecto"
+
+#: scripts/dpkg-parsechangelog.pl
+#, fuzzy
+#| msgid "changelog format %s is unknown"
+msgid "bad changelog format name"
+msgstr "el formato %s del registro de cambios es desconocido"
+
+#: scripts/dpkg-parsechangelog.pl
+msgid "missing changelog filename"
+msgstr ""
+
+#: scripts/dpkg-parsechangelog.pl
+msgid "takes no non-option arguments"
+msgstr "no acepta argumentos que no sean una opción"
+
+#: scripts/dpkg-scanpackages.pl
+#, fuzzy, perl-format
+#| msgid ""
+#| "Usage: %s [<option>...] <binary-path> [<override-file> [<path-prefix>]] > "
+#| "Packages\n"
+#| "\n"
+#| "Options:\n"
+#| " -t, --type <type> scan for <type> packages (default is 'deb').\n"
+#| " -a, --arch <arch> architecture to scan for.\n"
+#| " -m, --multiversion allow multiple versions of a single package.\n"
+#| " -e, --extra-override <file>\n"
+#| " use extra override file.\n"
+#| " -M, --medium <medium> add X-Medium field for dselect multicd access "
+#| "method\n"
+#| " -?, --help show this help message.\n"
+#| " --version show the version.\n"
+msgid ""
+"Usage: %s [<option>...] <binary-path> [<override-file> [<path-prefix>]] > "
+"Packages\n"
+"\n"
+"Options:\n"
+" -t, --type <type> scan for <type> packages (default is 'deb').\n"
+" -a, --arch <arch> architecture to scan for.\n"
+" -h, --hash <hash-list> only generate hashes for the specified list.\n"
+" -m, --multiversion allow multiple versions of a single package.\n"
+" -e, --extra-override <file>\n"
+" use extra override file.\n"
+" -M, --medium <medium> add X-Medium field for dselect media access "
+"method\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+"Uso: %s [<opción> ...] <ruta-binario> [<fichero-override> [<prefijo-ruta>]] "
+"> Paquetes\n"
+"\n"
+"Opciones:\n"
+" -t, --type <tipo> Busca el <tipo> de paquete («deb» por omisión).\n"
+" -a, --arch <arquitec> Arquitectura para la que analizar.\n"
+" -m, --multiversion Permite varias versiones del mismo paquete.\n"
+" -e, --extra-override <fichero>\n"
+" Usa un fichero «override» adicional.\n"
+" -M, --medium <medio> Añade el campo «X-Medium» para el método\n"
+" multicd de dselect.\n"
+" -?, --help Muestra este mensaje de ayuda.\n"
+" --version Muestra la versión.\n"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid " %s (package says %s, not %s)"
+msgstr " %s (el paquete devuelve %s, no %s)"
+
+#: scripts/dpkg-scanpackages.pl
+#, fuzzy, perl-format
+#| msgid "Unconditional maintainer override for %s"
+msgid "unconditional maintainer override for %s"
+msgstr "Sustitución («override») incondicional del encargado para %s"
+
+#: scripts/dpkg-scanpackages.pl scripts/dpkg-shlibdeps.pl scripts/Dpkg/IPC.pm
+#: scripts/Dpkg/Shlibs/Objdump.pm
+#, perl-format
+msgid "cannot fork for %s"
+msgstr "no se puede crear un proceso hijo para %s"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "couldn't parse control information from %s"
+msgstr "No se ha podido analizar la información de control de «%s»"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "'dpkg-deb -I %s control' exited with %d, skipping package"
+msgstr "«dpkg-deb -I %s control» finalizó con %d, omitiendo paquete"
+
+#: scripts/dpkg-scanpackages.pl
+#, fuzzy, perl-format
+#| msgid "No Package field in control file of %s"
+msgid "no Package field in control file of %s"
+msgstr "No existe el campo «Package» en el fichero de control de %s"
+
+#: scripts/dpkg-scanpackages.pl
+#, fuzzy, perl-format
+#| msgid "Package %s (filename %s) is repeat but newer version;"
+msgid ""
+"package %s (filename %s) is repeat but newer version; used that one and "
+"ignored data from %s!"
+msgstr ""
+"El paquete %s (nombre de fichero %s) está repetido con una versión más "
+"reciente;"
+
+#: scripts/dpkg-scanpackages.pl
+#, fuzzy, perl-format
+#| msgid "ignored that one and using data from %s!"
+msgid ""
+"package %s (filename %s) is repeat; ignored that one and using data from %s!"
+msgstr "¡se ha ignorado ese y se usarán los datos de %s!"
+
+#: scripts/dpkg-scanpackages.pl
+#, fuzzy, perl-format
+#| msgid "Package %s (filename %s) has Filename field!"
+msgid "package %s (filename %s) has Filename field!"
+msgstr "¡El paquete %s (fichero «%s») tiene el campo «Filename»!"
+
+#: scripts/dpkg-scanpackages.pl scripts/dpkg-scansources.pl
+msgid "one to three arguments expected"
+msgstr "Se esperan de uno a tres argumentos"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "unsupported checksum '%s'"
+msgstr "suma de control no soportada `%s'"
+
+#: scripts/dpkg-scanpackages.pl
+#, fuzzy, perl-format
+#| msgid "Binary dir %s not found"
+msgid "binary path %s not found"
+msgstr "No se ha encontrado el directorio binario «%s» "
+
+#: scripts/dpkg-scanpackages.pl
+#, fuzzy, perl-format
+#| msgid "Override file %s not found"
+msgid "override file %s not found"
+msgstr "No se ha encontrado el fichero de sustituciones («override») «%s»"
+
+#: scripts/dpkg-scanpackages.pl
+#, fuzzy
+#| msgid "Failed when writing stdout"
+msgid "failed when writing stdout"
+msgstr "Se ha detectado un fallo al escribir por la salida estándar"
+
+#: scripts/dpkg-scanpackages.pl
+#, fuzzy
+#| msgid "Couldn't close stdout"
+msgid "couldn't close stdout"
+msgstr "No se ha podido cerrar la salida estándar"
+
+#: scripts/dpkg-scanpackages.pl
+msgid "Packages with multiple instances but no --multiversion specified:"
+msgstr ""
+
+#: scripts/dpkg-scanpackages.pl
+msgid "Packages in override file with incorrect old maintainer value:"
+msgstr ""
+"Paquetes en el fichero de sustituciones «override» con un valor incorrecto "
+"de encargado antiguo:"
+
+#: scripts/dpkg-scanpackages.pl
+msgid "Packages specifying same maintainer as override file:"
+msgstr "Paquetes que definen el mismo encargado que el fichero «override»:"
+
+#: scripts/dpkg-scanpackages.pl
+msgid "Packages in archive but missing from override file:"
+msgstr "Paquetes en el archivo pero no presentes en el fichero «override»:"
+
+#: scripts/dpkg-scanpackages.pl
+msgid "Packages in override file but not in archive:"
+msgstr "Paquetes en el fichero «override» pero no en el archivo:"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "Wrote %s entries to output Packages file."
+msgstr "Se han escrito «%s» entradas en el fichero «Packages» de salida."
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid ""
+"Usage: %s [<option>...] <binary-path> [<override-file> [<path-prefix>]] > "
+"Sources\n"
+"\n"
+"Options:\n"
+" -n, --no-sort don't sort by package before outputting.\n"
+" -e, --extra-override <file>\n"
+" use extra override file.\n"
+" -s, --source-override <file>\n"
+" use file for additional source overrides, "
+"default\n"
+" is regular override file with .src appended.\n"
+" --debug turn debugging on.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+"\n"
+"See the man page for the full documentation.\n"
+msgstr ""
+"Uso: %s [<opción>...] <ruta-binario> [<fichero-override> [<prefijo-ruta>]] > "
+"Sources\n"
+"\n"
+"Opciones:\n"
+" -n, --no-sort No ordena por paquete antes de enviar la\n"
+" información de salida.\n"
+" -e, --extra-override <fichero>\n"
+" Usa un fichero «override» adicional.\n"
+" -s, --source-override <fichero>\n"
+" Usa el fichero para sustituciones («override»)\n"
+" adicionales, el comportamiento predefinido\n"
+" es un fichero «override» normal con la\n"
+" extensión «.src».\n"
+" --debug Activa el modo de depuración.\n"
+" -? --help Muestra este mensaje de ayuda.\n"
+" --version Muestra la versión.\n"
+"\n"
+"Consulte la página de manual para una documentación completa.\n"
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid "invalid override entry at line %d (%d fields)"
+msgstr ""
+"entrada de sustitución («override») inválida en la línea %d (%d campos)"
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid "ignoring duplicate override entry for %s at line %d"
+msgstr ""
+"ignorando una entrada duplicada de sustitución («override») para %s en la "
+"línea %d"
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid "ignoring override entry for %s, invalid priority %s"
+msgstr ""
+"ignorando la entrada de sustitución («override») para %s, prioridad inválida "
+"%s"
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid "invalid source override entry at line %d (%d fields)"
+msgstr ""
+"entrada de sustitución («override») de fuente inválida en la línea %d (%d "
+"campos)"
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid "ignoring duplicate source override entry for %s at line %d"
+msgstr ""
+"ignorando una entrada duplicada de sustitución («override») de fuentes para "
+"%s en la línea %d"
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid "no binary packages specified in %s"
+msgstr "no se han definido paquetes binarios en %s"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "administrative directory '%s' does not exist"
+msgstr "el directorio administrativo «%s» no existe"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "unrecognized dependency field '%s'"
+msgstr "El campo de dependencias «%s» es desconocido"
+
+#: scripts/dpkg-shlibdeps.pl
+msgid "need at least one executable"
+msgstr "se requiere al menos un ejecutable"
+
+#: scripts/dpkg-shlibdeps.pl
+#, fuzzy, perl-format
+#| msgid ""
+#| "couldn't find library %s needed by %s (ELF format: '%s'; RPATH: '%s')"
+msgid ""
+"cannot find library %s needed by %s (ELF format: '%s' abi: '%s'; RPATH: '%s')"
+msgstr ""
+"no se ha encontrado la biblioteca %s requerida por %s (formato ELF: '%s'; "
+"RPATH: '%s')"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "%s has an unexpected SONAME (%s)"
+msgstr "%s tiene un SONAME inesperado (%s)"
+
+#: scripts/dpkg-shlibdeps.pl
+#, fuzzy, perl-format
+#| msgid "no dependency information found for %s (used by %s)"
+msgid ""
+"no dependency information found for %s (used by %s)\n"
+"Hint: check if the library actually comes from a package."
+msgstr ""
+"No se ha encontrado información de dependencia para %s (utilizado por %s)"
+
+#: scripts/dpkg-shlibdeps.pl
+msgid ""
+"binaries to analyze should already be installed in their package's directory"
+msgstr ""
+"Los binarios que analizar ya deberían estar instalados en el directorio de "
+"su paquete"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "symbol %s used by %s found in none of the libraries"
+msgstr ""
+"No se ha encontrado en ninguna biblioteca el símbolo «%s», usado por %s"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid ""
+"%s contains an unresolvable reference to symbol %s: it's probably a plugin"
+msgstr ""
+"%s contiene una referencia irresoluble al símbolo %s: posiblemente sea una "
+"extensión"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "%d similar warning has been skipped (use -v to see it)"
+msgid_plural ""
+"%d other similar warnings have been skipped (use -v to see them all)"
+msgstr[0] "Se ha omitido %d aviso similar (use «-v» para verlo)"
+msgstr[1] ""
+"Se han omitido otros %d avisos similares (use «-v» para verlos todos)"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid ""
+"%s should not be linked against %s (it uses none of the library's symbols)"
+msgstr ""
+"%s no debería estar enlazado con %s (no usa ninguno de los símbolos de "
+"biblioteca)"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid ""
+"package could avoid a useless dependency if %s was not linked against %s (it "
+"uses none of the library's symbols)"
+msgid_plural ""
+"package could avoid a useless dependency if %s were not linked against %s "
+"(they use none of the library's symbols)"
+msgstr[0] ""
+"el paquete puede evitar una dependencia superflua si %s no se enlaza con %s "
+"(no utiliza ningún símbolo de la biblioteca)"
+msgstr[1] ""
+"el paquete puede evitar una dependencia superflua si %s no se enlaza con %s "
+"(no utilizan ningún símbolo de la biblioteca)"
+
+#: scripts/dpkg-shlibdeps.pl
+#, fuzzy
+#| msgid ""
+#| "Note: libraries are not searched in other binary packages that do not "
+#| "have any shlibs or symbols file.\n"
+#| "To help dpkg-shlibdeps find private libraries, you might need to set "
+#| "LD_LIBRARY_PATH."
+msgid ""
+"Note: libraries are not searched in other binary packages that do not have "
+"any shlibs or symbols file.\n"
+"To help dpkg-shlibdeps find private libraries, you might need to use -l."
+msgstr ""
+"Nota: no se buscan bibliotecas en otros paquetes binarios que no tienen\n"
+"ningún fichero de símbolos («symbols») o de bibliotecas compartidas\n"
+"(«shlibs»).\n"
+"Puede que tenga que definir «LD_LIBRARY_PATH» para ayudar a que dpkg-"
+"shlibdeps encuentre bibliotecas privadas."
+
+#: scripts/dpkg-shlibdeps.pl
+msgid "cannot continue due to the error above"
+msgid_plural "cannot continue due to the errors listed above"
+msgstr[0] "No se puede continuar debido al fallo mostrado"
+msgstr[1] "No se puede continuar debido a los fallos anteriores"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "invalid dependency got generated: %s"
+msgstr "se ha generado una dependencia inválida: %s"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "install new varlist file '%s'"
+msgstr "instalar el nuevo fichero de lista de variables «%s»"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "Usage: %s [<option>...] <executable>|-e<executable> [<option>...]"
+msgstr "Uso: %s [<opción>...] <ejecutable>|-e<ejecutable> [<opción>...]"
+
+#: scripts/dpkg-shlibdeps.pl
+msgid ""
+"Positional options (order is significant):\n"
+" <executable> include dependencies for <executable>,\n"
+" -e<executable> (use -e if <executable> starts with '-')\n"
+" -d<dependency-field> next executable(s) set shlibs:<dependency-field>."
+msgstr ""
+"Opciones posicionales (el orden importa):\n"
+" <ejecutable> Incluye las dependencias para <ejecutable>,\n"
+" -e<ejecutable> (Utilice -e si el <ejecutable> empieza con «-»)\n"
+" -d<campo-de-dependencia> La o las siguientes órdenes definen\n"
+" shlibs:<campo-de-dependencia>."
+
+#: scripts/dpkg-shlibdeps.pl
+#, fuzzy
+#| msgid ""
+#| "Options:\n"
+#| " -p<varname-prefix> set <varname-prefix>:* instead of shlibs:*.\n"
+#| " -O print variable settings to stdout.\n"
+#| " -L<local-shlibs-file> shlibs override file, not debian/shlibs."
+#| "local.\n"
+#| " -T<substvars-file> update variables here, not debian/substvars.\n"
+#| " -t<type> set package type (default is deb).\n"
+#| " -x<package> exclude package from the generated "
+#| "dependencies.\n"
+#| " -S<package-build-dir> search needed libraries in the given\n"
+#| " package build directory first.\n"
+#| " -v enable verbose mode (can be used multiple "
+#| "times).\n"
+#| " --ignore-missing-info don't fail if dependency information can't be "
+#| "found.\n"
+#| " --warnings=<value> define set of active warnings (see manual "
+#| "page).\n"
+#| " --admindir=<directory> change the administrative directory.\n"
+#| " -?, --help show this help message.\n"
+#| " --version show the version."
+msgid ""
+"Options:\n"
+" -l<library-dir> add directory to private shared library search "
+"list.\n"
+" -p<varname-prefix> set <varname-prefix>:* instead of shlibs:*.\n"
+" -O[<file>] write variable settings to stdout (or <file>).\n"
+" -L<local-shlibs-file> shlibs override file, not debian/shlibs.local.\n"
+" -T<substvars-file> update variables here, not debian/substvars.\n"
+" -t<type> set package type (default is deb).\n"
+" -x<package> exclude package from the generated dependencies.\n"
+" -S<package-build-dir> search needed libraries in the given\n"
+" package build directory first.\n"
+" -I<package-build-dir> ignore needed libraries, shlibs and symbols "
+"files\n"
+" in the given build directory.\n"
+" -v enable verbose mode (can be used multiple "
+"times).\n"
+" --ignore-missing-info don't fail if dependency information can't be "
+"found.\n"
+" --warnings=<value> define set of active warnings (see manual page).\n"
+" --admindir=<directory> change the administrative directory.\n"
+" -?, --help show this help message.\n"
+" --version show the version."
+msgstr ""
+"Opciones:\n"
+" -p<prefijo-nombre-variable> Define el <prefijo-nombre-variable> en lugar\n"
+" de shlibs:*.\n"
+" -O Muestra la configuración de variables por la\n"
+" salida estándar.\n"
+" -L<fichero-local-shlibs> Fichero de sustitución de bibliotecas\n"
+" compartidas, en lugar de «debian/shlibs.local».\n"
+" -T<fichero-substvars> Actualiza aquí las variables, y no en\n"
+" «debian/substvars».\n"
+" -t<tipo> Define el tipo de paquete (por omisión, deb).\n"
+" -x<paquete> Excluye al paquete de las dependencias "
+"generadas.\n"
+" -S<directorio-construcción-paquete> Busca las bibliotecas requeridas\n"
+" primero en el directorio de construcción de\n"
+" paquete.\n"
+" -v Activa el modo informativo (se puede utilizar\n"
+" varias veces).\n"
+" --ignore-missing-info No falla si no encuentra la información de\n"
+" las dependencias.\n"
+" --warnings=<valor> Define el conjunto de avisos activos (consulte\n"
+" la página de manual).\n"
+" --admindir=<directorio> Cambia el directorio administrativo.\n"
+" -?, --help Muestra este mensaje de ayuda.\n"
+" --version Muestra la versión."
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid ""
+"Dependency fields recognized are:\n"
+" %s\n"
+msgstr ""
+"Los campos de dependencia reconocidos son:\n"
+" %s\n"
+
+#: scripts/dpkg-shlibdeps.pl
+#, fuzzy, perl-format
+#| msgid "Can't extract name and version from library name `%s'"
+msgid "can't extract name and version from library name '%s'"
+msgstr ""
+"No se puede extraer el nombre y la versión del nombre de la biblioteca «%s»"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "unable to open shared libs info file '%s'"
+msgstr ""
+"No se ha podido abrir el fichero de información de bibliotecas compartidas "
+"«%s»"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "shared libs info file '%s' line %d: bad line '%s'"
+msgstr ""
+"fichero de información de bibliotecas compartidas «%s», línea %d: línea "
+"incorrecta «%s»"
+
+#: scripts/dpkg-shlibdeps.pl scripts/Dpkg/Changelog/Parse.pm
+#: scripts/Dpkg/Checksums.pm
+#, perl-format
+msgid "cannot open file %s"
+msgstr "no se ha podido abrir el fichero «%s»"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid ""
+"$ORIGIN is used in RPATH of %s and the corresponding directory could not be "
+"identified due to lack of DEBIAN sub-directory in the root of package's "
+"build tree"
+msgstr ""
+"«$ORIGIN» se usa en la «RPATH» de %s, y no se pudo identificar el directorio "
+"correspondiente debido a la falta de un subdirectorio «DEBIAN» en la raíz de "
+"del árbol de construcción del paquete"
+
+#: scripts/dpkg-shlibdeps.pl
+msgid "diversions involved - output may be incorrect"
+msgstr "redirecciones implicadas - puede que la salida sea incorrecta"
+
+#: scripts/dpkg-shlibdeps.pl
+msgid "write diversion info to stderr"
+msgstr "escribir la información de redirección por la salida de error estándar"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "unknown output from dpkg --search: '%s'"
+msgstr "la salida de «dpkg --search» es desconocida: «%s»"
+
+#: scripts/dpkg-source.pl
+#, fuzzy, perl-format
+#| msgid "%s needs a directory"
+msgid "--%s needs a directory"
+msgstr "%s requiere un directorio"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "cannot stat directory %s"
+msgstr "no se pudo obtener el estado («stat») del directorio «%s»"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "directory argument %s is not a directory"
+msgstr "el argumento de directorio «%s» no es un directorio"
+
+#: scripts/dpkg-source.pl scripts/Dpkg/Source/BinaryFiles.pm
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "unable to chdir to '%s'"
+msgstr "no se puede ejecutar chdir a «%s»"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "using options from %s: %s"
+msgstr "usando opciones de %s: %s"
+
+#: scripts/dpkg-source.pl scripts/Dpkg/Compression.pm
+#, perl-format
+msgid "%s is not a supported compression"
+msgstr "%s no es una compresión compatible"
+
+#: scripts/dpkg-source.pl scripts/Dpkg/Compression.pm
+#, perl-format
+msgid "%s is not a compression level"
+msgstr "%s no es un nivel de compresión"
+
+#: scripts/dpkg-source.pl
+msgid "-E and -W are deprecated, they are without effect"
+msgstr "«-E» y «-W» están obsoletas y no tienen efecto"
+
+#: scripts/dpkg-source.pl scripts/dpkg-vendor.pl
+msgid "need an action option"
+msgstr "es necesaria una opción de acción"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "no source format specified in %s, see dpkg-source(1)"
+msgstr ""
+"no se ha definido un formato de fuentes en «%s», consulte dpkg-source(1)"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "%s doesn't contain any information about the source package"
+msgstr "%s no contiene información sobre el paquete fuente"
+
+#: scripts/dpkg-source.pl
+#, fuzzy, perl-format
+#| msgid "'%s' is not a legal architecture string"
+msgid "'%s' is not a legal architecture string in package '%s'"
+msgstr "«%s» no es una cadena de arquitectura legal"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "architecture %s only allowed on its own (list for package %s is '%s')"
+msgstr ""
+"sólo se permite la arquitectura %s cuando ninguna otra aparece (la lista del "
+"paquete %s es «%s»)"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "%s doesn't list any binary package"
+msgstr "%s no menciona ningún paquete binario"
+
+#: scripts/dpkg-source.pl
+msgid "building source for a binary-only release"
+msgstr "generando fuentes para una publicación solo binaria"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "can't build with source format '%s': %s"
+msgstr "no se puede construir con el formato de fuente «%s»: %s"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "using source format '%s'"
+msgstr "usando el formato de fuente «%s»"
+
+#: scripts/dpkg-source.pl scripts/Dpkg/Source/Package/V1.pm
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Package/V3/Bzr.pm
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+#, perl-format
+msgid "building %s in %s"
+msgstr "construyendo %s en %s"
+
+#: scripts/dpkg-source.pl
+#, fuzzy, perl-format
+#| msgid "-x needs at least one argument, the .dsc"
+msgid "--%s needs at least one argument, the .dsc"
+msgstr "«-x» requiere al menos un argumento, el fichero «.dsc»"
+
+#: scripts/dpkg-source.pl
+#, fuzzy, perl-format
+#| msgid "-x takes no more than two arguments"
+msgid "--%s takes no more than two arguments"
+msgstr "«-x» no acepta más de dos argumentos"
+
+#: scripts/dpkg-source.pl
+#, fuzzy, perl-format
+#| msgid "-x needs the .dsc file as first argument, not a directory"
+msgid "--%s needs the .dsc file as first argument, not a directory"
+msgstr ""
+"«-x» requiere el fichero «.dsc» como el primer argumento, no un directorio"
+
+#: scripts/dpkg-source.pl scripts/Dpkg/Source/Package/V1.pm
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Package/V3/Bzr.pm
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+#, perl-format
+msgid "unpack target exists: %s"
+msgstr "el destino de los datos desempaquetados ya existe: %s"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "%s doesn't contain a valid OpenPGP signature"
+msgstr "%s no contiene una firma OpenPGP válida"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "extracting unsigned source package (%s)"
+msgstr "extrayendo el paquete fuente sin firmar (%s)"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "extracting %s in %s"
+msgstr "extrayendo %s en %s"
+
+#: scripts/dpkg-source.pl
+#, fuzzy, perl-format
+#| msgid "%s is not a plain file"
+msgid "test control %s is not a regular file"
+msgstr "«%s» no es un fichero simple"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "%s field contains value %s, but no tests control file %s"
+msgstr ""
+"el campo %s contiene el valor %s, pero no existe un archivo de control de "
+"pruebas %s"
+
+#: scripts/dpkg-source.pl
+#, fuzzy, perl-format
+#| msgid "%s is not a plain file"
+msgid "test control %s is missing %s or %s field"
+msgstr "«%s» no es un fichero simple"
+
+#: scripts/dpkg-source.pl
+msgctxt "source options"
+msgid "<none>"
+msgstr ""
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "Usage: %s [<option>...] <command>"
+msgstr "Uso: %s [<opción>...] <orden>"
+
+#: scripts/dpkg-source.pl
+#, fuzzy
+#| msgid ""
+#| "Commands:\n"
+#| " -x <filename>.dsc [<output-dir>]\n"
+#| " extract source package.\n"
+#| " -b <dir> build source package.\n"
+#| " --print-format <dir> print the source format that would be\n"
+#| " used to build the source package.\n"
+#| " --commit [<dir> [<patch-name>]]\n"
+#| " store upstream changes in a new patch."
+msgid ""
+"Commands:\n"
+" -x, --extract <filename>.dsc [<output-dir>]\n"
+" extract source package.\n"
+" -b, --build <dir> build source package.\n"
+" --print-format <dir> print the format to be used for the source "
+"package.\n"
+" --before-build <dir> run the corresponding source package format "
+"hook.\n"
+" --after-build <dir> run the corresponding source package format "
+"hook.\n"
+" --commit [<dir> [<patch-name>]]\n"
+" store upstream changes in a new patch."
+msgstr ""
+"Commands:\n"
+" -x <fichero>.dsc [<directorio-de-salida>]\n"
+" Extrae el paquete fuente.\n"
+" -b <directorio> Genere el paquete fuente.\n"
+" --print-format <directorio>\n"
+" Muestra el formato de fuentes que se va a\n"
+" utilizar para construir el paquete fuente.\n"
+" --commit [<directorio> [<nombre-de-parche>]]\n"
+" Guarda los cambios en las fuentes originales en "
+"un parche nuevo."
+
+#: scripts/dpkg-source.pl
+#, fuzzy, perl-format
+#| msgid ""
+#| "Build options:\n"
+#| " -c<control-file> get control info from this file.\n"
+#| " -l<changelog-file> get per-version info from this file.\n"
+#| " -F<changelog-format> force changelog format.\n"
+#| " -V<name>=<value> set a substitution variable.\n"
+#| " -T<substvars-file> read variables here.\n"
+#| " -D<field>=<value> override or add a .dsc field and value.\n"
+#| " -U<field> remove a field.\n"
+#| " -q quiet mode.\n"
+#| " -i[<regexp>] filter out files to ignore diffs of\n"
+#| " (defaults to: '%s').\n"
+#| " -I[<pattern>] filter out files when building tarballs\n"
+#| " (defaults to: %s).\n"
+#| " -Z<compression> select compression to use (defaults to '%s',\n"
+#| " supported are: %s).\n"
+#| " -z<level> compression level to use (defaults to '%d',\n"
+#| " supported are: '1'-'9', 'best', 'fast')"
+msgid ""
+"Build options:\n"
+" -c<control-file> get control info from this file.\n"
+" -l<changelog-file> get per-version info from this file.\n"
+" -F<changelog-format> force changelog format.\n"
+" --format=<source-format> set the format to be used for the source "
+"package.\n"
+" -V<name>=<value> set a substitution variable.\n"
+" -T<substvars-file> read variables here.\n"
+" -D<field>=<value> override or add a .dsc field and value.\n"
+" -U<field> remove a field.\n"
+" -i, --diff-ignore[=<regex>]\n"
+" filter out files to ignore diffs of\n"
+" (defaults to: '%s').\n"
+" -I, --tar-ignore[=<pattern>]\n"
+" filter out files when building tarballs\n"
+" (defaults to: %s).\n"
+" -Z, --compression=<compression>\n"
+" select compression to use (defaults to '%s',\n"
+" supported are: %s).\n"
+" -z, --compression-level=<level>\n"
+" compression level to use (defaults to '%d',\n"
+" supported are: '1'-'9', 'best', 'fast')"
+msgstr ""
+"Opciones de construcción:\n"
+" -c<fichero-control> Obtiene la información de control de este\n"
+" fichero.\n"
+" -l<fichero-changelog> Obtiene la información de la versión de este\n"
+" fichero.\n"
+" -F<formato-registro> Fuerza el formato del registro de cambios.\n"
+" -V<nombre>=<valor> Define una variable de sustitución.\n"
+" -T<fichero-de-sustitución-de-variables>\n"
+" Lee las variables de este fichero.\n"
+" -D<campo>=<valor> Sustituye o añade un campo «.dsc» y el valor.\n"
+" -U<campo> Elimina un campo.\n"
+" -q Modo silencioso.\n"
+" -i[<expresión-regular>] Filtra ficheros a ignorar en los «diff»\n"
+" (por omisión: «%s»).\n"
+" -I[<patrón>] Omite ficheros al construir archivos tar\n"
+" (por omisión: %s).\n"
+" -Z<compresión> Selecciona la compresión a usar (por omisión "
+"'%s',\n"
+" aceptados: %s).\n"
+" -z<nivel> Nivel de compresión a usar (por omisión, '%d',\n"
+" aceptados: '1'-'9', 'best', 'fast')"
+
+#: scripts/dpkg-source.pl
+#, fuzzy
+#| msgid ""
+#| "Extract options:\n"
+#| " --no-copy don't copy .orig tarballs\n"
+#| " --no-check don't check signature and checksums before "
+#| "unpacking\n"
+#| " --require-valid-signature abort if the package doesn't have a valid "
+#| "signature"
+msgid ""
+"Extract options:\n"
+" --no-copy don't copy .orig tarballs\n"
+" --no-check don't check signature and checksums before "
+"unpacking\n"
+" --no-overwrite-dir do not overwrite directory on extraction\n"
+" --require-valid-signature abort if the package doesn't have a valid "
+"signature\n"
+" --require-strong-checksums\n"
+" abort if the package contains no strong "
+"checksums\n"
+" --ignore-bad-version allow bad source package versions."
+msgstr ""
+"Opciones de extracción:\n"
+" --no-copy No copia archivos tar «.orig».\n"
+" --no-check No comprueba la firma y las sumas de control\n"
+" antes de desempaquetar.\n"
+" --require-valid-signature Cancela si el paquete no tiene una firma válida."
+
+#: scripts/dpkg-source.pl
+#, fuzzy
+#| msgid ""
+#| "General options:\n"
+#| " -?, --help show this help message.\n"
+#| " --version show the version."
+msgid ""
+"General options:\n"
+" --threads-max=<threads>\n"
+" use at most <threads> with compressor.\n"
+" -q quiet mode.\n"
+" -?, --help show this help message.\n"
+" --version show the version."
+msgstr ""
+"Opciones generales:\n"
+" -?, --help Muestra este mensaje de ayuda.\n"
+" --version Muestra la versión."
+
+#: scripts/dpkg-source.pl
+msgid ""
+"Source format specific build and extract options are available;\n"
+"use --format with --help to see them."
+msgstr ""
+
+#: scripts/dpkg-vendor.pl
+msgid ""
+"Commands:\n"
+" --is <vendor> returns true if current vendor is <vendor>.\n"
+" --derives-from <vendor> returns true if current vendor derives from "
+"<vendor>.\n"
+" --query <field> print the content of the vendor-specific field.\n"
+" --help show this help message.\n"
+" --version show the version."
+msgstr ""
+"Órdenes:\n"
+" --is <fabricante> Devuelve cierto si el fabricante actual es "
+"<fabricante>.\n"
+" --derives-from <fabricante> Devuelve cierto si el fabricante actual es una "
+"derivación\n"
+" de <fabricante>.\n"
+" --query <campo> Imprime el contenido de un campo específico de "
+"fabricante.\n"
+" --help Muestra este mensaje de ayuda.\n"
+" --version Muestra la versión."
+
+#: scripts/dpkg-vendor.pl
+msgid ""
+"Options:\n"
+" --vendor <vendor> assume <vendor> is the current vendor."
+msgstr ""
+"Opciones:\n"
+" --vendor <fabricante> asume que <fabricante> es el fabricante actual."
+
+#: scripts/dpkg-vendor.pl
+#, fuzzy, perl-format
+#| msgid "%s does not exist"
+msgid "vendor %s doesn't exist in %s"
+msgstr "%s no existe"
+
+#: scripts/Dpkg/Arch.pm
+#, fuzzy
+#| msgid ""
+#| "Couldn't determine gcc system type, falling back to default (native "
+#| "compilation)"
+msgid ""
+"cannot determine CC system type, falling back to default (native compilation)"
+msgstr ""
+"No se ha podido determinar el tipo de sistema de gcc, usando el predefinido, "
+"(compilación nativa)."
+
+#: scripts/Dpkg/Arch.pm
+#, fuzzy, perl-format
+#| msgid ""
+#| "Unknown gcc system type %s, falling back to default (native compilation)"
+msgid "unknown CC system type %s, falling back to default (native compilation)"
+msgstr ""
+"El tipo de sistema gcc %s es desconocido, usando el predefinido (compilación "
+"nativa)"
+
+#: scripts/Dpkg/Arch.pm
+#, fuzzy, perl-format
+#| msgid "'%s' is not a legal architecture string"
+msgid "'%s' is not a legal architecture in list '%s'"
+msgstr "«%s» no es una cadena de arquitectura legal"
+
+#: scripts/Dpkg/BuildFlags.pm scripts/Dpkg/Compression/FileHandle.pm
+#: scripts/Dpkg/File.pm scripts/Dpkg/Interface/Storable.pm
+#: scripts/Dpkg/Shlibs/Objdump.pm scripts/Dpkg/Source/BinaryFiles.pm
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "cannot read %s"
+msgstr "no se puede leer %s"
+
+#: scripts/Dpkg/BuildFlags.pm
+#, perl-format
+msgid "line %d of %s mentions unknown flag %s"
+msgstr "la línea %d en %s menciona una opción desconocida %s"
+
+#: scripts/Dpkg/BuildFlags.pm
+#, perl-format
+msgid "line %d of %s is invalid, it has been ignored"
+msgstr "la línea %d de %s es inválida, se ha ignorado"
+
+#: scripts/Dpkg/BuildOptions.pm
+#, perl-format
+msgid "invalid flag in %s: %s"
+msgstr "se ha detectado una opción inválida en %s: %s"
+
+#: scripts/Dpkg/BuildOptions.pm
+#, perl-format
+msgid "unknown %s feature in %s variable: %s"
+msgstr "funcionalidad %s desconocida en variable %s: %s"
+
+#: scripts/Dpkg/BuildOptions.pm
+#, perl-format
+msgid "incorrect value in %s option of %s variable: %s"
+msgstr "valor incorrecto en la opción %s de la variable %s: %s"
+
+#: scripts/Dpkg/BuildTypes.pm
+#, perl-format
+msgid "cannot combine %s and %s"
+msgstr "no se puede combinar «%s» con «%s»"
+
+#: scripts/Dpkg/BuildTypes.pm
+#, fuzzy, perl-format
+#| msgid "unknown file type"
+msgid "unknown build type %s"
+msgstr "el tipo de fichero es desconocido"
+
+#: scripts/Dpkg/Changelog.pm
+#, perl-format
+msgid ""
+"%s(l%s): %s\n"
+"LINE: %s"
+msgstr ""
+"%s(l%s): %s\n"
+"LÍNEA: %s"
+
+#: scripts/Dpkg/Changelog.pm
+#, perl-format
+msgid "%s(l%s): %s"
+msgstr "%s(l%s): %s"
+
+#: scripts/Dpkg/Changelog.pm
+msgid "'offset' without 'count' has no effect"
+msgstr "«offset» sin «count» no tiene efecto"
+
+#: scripts/Dpkg/Changelog.pm
+msgid "you can't combine 'count' or 'offset' with any other range option"
+msgstr ""
+"no se puede combinar «count» u «offset» con cualquier otra opción de rango"
+
+#: scripts/Dpkg/Changelog.pm
+msgid "you can only specify one of 'from' and 'since', using 'since'"
+msgstr "sólo puede definir o bien «from» o «since», usando «since»"
+
+#: scripts/Dpkg/Changelog.pm
+msgid "you can only specify one of 'to' and 'until', using 'until'"
+msgstr "sólo puede definir o bien «to» o «until», usando «until»"
+
+#: scripts/Dpkg/Changelog.pm
+#, fuzzy, perl-format
+#| msgid "'%s' option specifies non-existing version"
+msgid "'%s' option specifies non-existing version '%s'"
+msgstr "la opción «%s» define un versión que no existe"
+
+#: scripts/Dpkg/Changelog.pm
+msgid "use newest entry that is earlier than the one specified"
+msgstr "use la entrada más reciente que sea antigua que la que se ha definido"
+
+#: scripts/Dpkg/Changelog.pm
+msgid "none found, starting from the oldest entry"
+msgstr "no se ha encontrado nada, iniciando desde la entrada más antigua"
+
+#: scripts/Dpkg/Changelog.pm
+msgid "use oldest entry that is later than the one specified"
+msgstr "usar la entrada más antigua que es posterior a la que se ha definido"
+
+#: scripts/Dpkg/Changelog.pm
+#, fuzzy, perl-format
+#| msgid "no such entry found, ignoring '%s' parameter"
+msgid "no such entry found, ignoring '%s' parameter '%s'"
+msgstr "no se ha encontrado esa entrada, ignorando el parámetro «%s»"
+
+#: scripts/Dpkg/Changelog.pm
+#, fuzzy, perl-format
+#| msgid "'since' option specifies most recent version, ignoring"
+msgid "'since' option specifies most recent version '%s', ignoring"
+msgstr "la opción «since» define la versión más reciente, omitiendo"
+
+#: scripts/Dpkg/Changelog.pm
+#, fuzzy, perl-format
+#| msgid "'until' option specifies oldest version, ignoring"
+msgid "'until' option specifies oldest version '%s', ignoring"
+msgstr "la opción «until» define la versión más antigua, omitiendo"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+msgid "first heading"
+msgstr "primera cabecera"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+#, fuzzy
+#| msgid "next heading or eof"
+msgid "next heading or end of file"
+msgstr "siguiente cabecera o fin de línea"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+msgid "start of change data"
+msgstr "principio de los datos de cambios"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+msgid "more change data or trailer"
+msgstr "más cambios de datos o línea de separación («trailer»)"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+#, perl-format
+msgid "found start of entry where expected %s"
+msgstr "se ha encontrado el principio de una entrada donde se esperaba %s"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+msgid "badly formatted heading line"
+msgstr "la línea de cabecera tiene un formato inválido"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+#, perl-format
+msgid "found trailer where expected %s"
+msgstr "se encontró una línea de separación («trailer») donde se esperaba %s"
+
+#: scripts/Dpkg/Changelog/Debian.pm scripts/Dpkg/Changelog/Entry/Debian.pm
+msgid "badly formatted trailer line"
+msgstr ""
+"se ha detectado una línea de separación («trailer») con formato inválido"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+#, perl-format
+msgid "found change data where expected %s"
+msgstr "se han encontrado datos de cambios donde se esperaba %s"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+#, perl-format
+msgid "found blank line where expected %s"
+msgstr "se ha encontrado una línea en blanco donde se esperaba %s"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+msgid "unrecognized line"
+msgstr "línea no reconocida"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+#, fuzzy, perl-format
+#| msgid "found eof where expected %s"
+msgid "found end of file where expected %s"
+msgstr "se ha encontrado un fin de línea donde se esperaba %s"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "version '%s' is invalid: %s"
+msgstr "la versión «%s» es inválida: %s"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "bad key-value after ';': '%s'"
+msgstr "el valor de la clave después de «;» es inválida: «%s»"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "repeated key-value %s"
+msgstr "el valor de clave %s está repetida"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "badly formatted urgency value: %s"
+msgstr ""
+"se ha detectado un valor de urgencia («urgency value») con un formato no "
+"válido: %s"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "bad binary-only value: %s"
+msgstr "valor solo binario incorrecto: %s"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "unknown key-value %s"
+msgstr "el valor de clave %s es desconocida"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+msgid "the header doesn't match the expected regex"
+msgstr "la cabecera no coincide con la expresión regular esperada"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "ignoring invalid week day '%s'"
+msgstr ""
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, fuzzy, perl-format
+#| msgid "invalid flag in %s: %s"
+msgid "uses full '%s' instead of abbreviated month name '%s'"
+msgstr "se ha detectado una opción inválida en %s: %s"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, fuzzy, perl-format
+#| msgid "invalid flag in %s: %s"
+msgid "invalid abbreviated month name '%s'"
+msgstr "se ha detectado una opción inválida en %s: %s"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, fuzzy, perl-format
+#| msgid "cannot exec format parser: %s"
+msgid "cannot parse non-conformant date '%s'"
+msgstr "no se puede ejecutar el analizador de formato: %s"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+msgid "the trailer doesn't match the expected regex"
+msgstr ""
+"la línea de separación («trailer») no encaja con la expresión regular "
+"esperada"
+
+#: scripts/Dpkg/Changelog/Parse.pm
+#, fuzzy, perl-format
+#| msgid "cannot stat file %s"
+msgid "cannot seek into file %s"
+msgstr "no se puede obtener el estado (stat) del fichero «%s»"
+
+#: scripts/Dpkg/Changelog/Parse.pm
+#, fuzzy, perl-format
+#| msgid "changelog format %s is unknown"
+msgid "changelog format %s is unknown: %s"
+msgstr "el formato %s del registro de cambios es desconocido"
+
+#: scripts/Dpkg/Changelog/Parse.pm
+#, fuzzy, perl-format
+#| msgid "changelog format %s is unknown"
+msgid "changelog format %s is not a Dpkg::Changelog class"
+msgstr "el formato %s del registro de cambios es desconocido"
+
+#: scripts/Dpkg/Changelog/Parse.pm
+#, perl-format
+msgid "fatal error occurred while parsing %s"
+msgstr "se ha detectado un error fatal al analizar %s"
+
+#: scripts/Dpkg/Changelog/Parse.pm
+#, fuzzy, perl-format
+#| msgid "unknown option or argument %s"
+msgid "unknown output format %s"
+msgstr "el argumento u opción «%s» es desconocido"
+
+#: scripts/Dpkg/Checksums.pm
+#, perl-format
+msgid "cannot fstat file %s"
+msgstr "no se puede obtener el estado (fstat) del fichero «%s»"
+
+#: scripts/Dpkg/Checksums.pm
+#, fuzzy, perl-format
+#| msgid "File %s has size %u instead of expected %u"
+msgid "file %s has size %u instead of expected %u"
+msgstr "El fichero «%s» tiene un tamaño de %u en lugar del esperado, %u"
+
+#: scripts/Dpkg/Checksums.pm
+#, fuzzy, perl-format
+#| msgid "File %s has checksum %s instead of expected %s (algorithm %s)"
+msgid "file %s has checksum %s instead of expected %s (algorithm %s)"
+msgstr ""
+"El fichero «%s» tiene una suma de control %s en lugar del esperado, "
+"%s(algoritmo %s)"
+
+#: scripts/Dpkg/Checksums.pm
+#, perl-format
+msgid "invalid line in %s checksums string: %s"
+msgstr "línea inválida en la cadena de suma de control %s: %s"
+
+#: scripts/Dpkg/Checksums.pm
+#, fuzzy, perl-format
+#| msgid "Conflicting checksums `%s' and `%s' for file `%s'"
+msgid "conflicting checksums '%s' and '%s' for file '%s'"
+msgstr ""
+"Se han detectado sumas de control conflictivas, «%s» y «%s», del fichero «%s»"
+
+#: scripts/Dpkg/Checksums.pm
+#, fuzzy, perl-format
+#| msgid "Conflicting file sizes `%u' and `%u' for file `%s'"
+msgid "conflicting file sizes '%u' and '%u' for file '%s'"
+msgstr ""
+"Se han detectado tamaños de fichero conflictivos, %u y %u, del fichero «%s»"
+
+#: scripts/Dpkg/Compression.pm
+#, perl-format
+msgid "compression threads %s is not a number"
+msgstr ""
+
+#: scripts/Dpkg/Compression/Process.pm
+#, perl-format
+msgid "%s is not a supported compression method"
+msgstr "%s no es un método de compresión aceptado"
+
+#: scripts/Dpkg/Compression/Process.pm
+msgid "Dpkg::Compression::Process can only start one subprocess at a time"
+msgstr ""
+"«Dpkg::Compression::Process» sólo puede iniciar un proceso secundario a la "
+"vez"
+
+#: scripts/Dpkg/Conf.pm
+#, perl-format
+msgid "short option not allowed in %s, line %d"
+msgstr "no se permite una opción corta en %s, línea %d"
+
+#: scripts/Dpkg/Conf.pm
+#, perl-format
+msgid "invalid syntax for option in %s, line %d"
+msgstr "sintaxis inválida para la opción en %s, línea %d"
+
+#: scripts/Dpkg/Control.pm
+msgid "general section of control info file"
+msgstr "sección general del fichero de información de control"
+
+#: scripts/Dpkg/Control.pm
+msgid "package's section of control info file"
+msgstr "sección del paquete del fichero de información de control"
+
+#: scripts/Dpkg/Control.pm
+msgid "parsed version of changelog"
+msgstr "versión analizada del registro de cambios"
+
+#: scripts/Dpkg/Control.pm
+msgid "header stanza of copyright file"
+msgstr ""
+
+#: scripts/Dpkg/Control.pm
+msgid "files stanza of copyright file"
+msgstr ""
+
+#: scripts/Dpkg/Control.pm
+msgid "license stanza of copyright file"
+msgstr ""
+
+#: scripts/Dpkg/Control.pm
+#, fuzzy
+#| msgid "package's section of control info file"
+msgid "package's tests control file"
+msgstr "sección del paquete del fichero de información de control"
+
+#: scripts/Dpkg/Control.pm
+#, fuzzy, perl-format
+#| msgid "entry in repository's %s file"
+msgid "repository's %s file"
+msgstr "entrada en el fichero %s de repositorio"
+
+#: scripts/Dpkg/Control.pm
+#, fuzzy, perl-format
+#| msgid "entry in repository's %s file"
+msgid "stanza in repository's %s file"
+msgstr "entrada en el fichero %s de repositorio"
+
+#: scripts/Dpkg/Control.pm
+#, perl-format
+msgid "%s file"
+msgstr "fichero «%s»"
+
+#: scripts/Dpkg/Control.pm
+msgid "control info of a .deb package"
+msgstr "información de control de un paquete «.deb»"
+
+#: scripts/Dpkg/Control.pm
+#, fuzzy
+#| msgid "control information"
+msgid "build information file"
+msgstr "información de control"
+
+#: scripts/Dpkg/Control.pm
+msgid "vendor file"
+msgstr "fichero del proveedor"
+
+#: scripts/Dpkg/Control.pm
+#, fuzzy
+#| msgid "entry in dpkg's status file"
+msgid "stanza in dpkg's status file"
+msgstr "entrada en el fichero de estado «status» de dpkg "
+
+#: scripts/Dpkg/Control/FieldsCore.pm
+#, perl-format
+msgid "unknown information field '%s' in input data in %s"
+msgstr ""
+"el campo de información «%s» en los datos de entrada en %s es desconocido"
+
+#: scripts/Dpkg/Control/FieldsCore.pm
+msgid "control information"
+msgstr "información de control"
+
+#: scripts/Dpkg/Control/HashCore.pm
+#, perl-format
+msgid "syntax error in %s at line %d: %s"
+msgstr "se ha encontrado un error de sintaxis en %s en la línea %d: %s"
+
+#: scripts/Dpkg/Control/HashCore.pm
+msgid "field cannot start with a hyphen"
+msgstr "el campo no puede compenzar con un guión"
+
+#: scripts/Dpkg/Control/HashCore.pm
+#, perl-format
+msgid "duplicate field %s found"
+msgstr "se ha encontrado un campo duplicado «%s»"
+
+#: scripts/Dpkg/Control/HashCore.pm
+msgid "continued value line not in field"
+msgstr "la continuación de la línea del valor no está el campo"
+
+#: scripts/Dpkg/Control/HashCore.pm
+#, fuzzy
+#| msgid "expected PGP signature, found EOF after blank line"
+msgid "expected OpenPGP signature, found end of file after blank line"
+msgstr ""
+"se esperaba la firma PGP, pero se ha encontrado un fin de línea después de "
+"una línea vacía"
+
+#: scripts/Dpkg/Control/HashCore.pm
+#, fuzzy, perl-format
+#| msgid "expected PGP signature, found something else `%s'"
+msgid "expected OpenPGP signature, found something else '%s'"
+msgstr "se esperaba una firma PGP, pero se ha encontrado algo distinto «%s»"
+
+#: scripts/Dpkg/Control/HashCore.pm
+#, fuzzy
+#| msgid "unfinished PGP signature"
+msgid "unfinished OpenPGP signature"
+msgstr "firma PGP inacabada"
+
+#: scripts/Dpkg/Control/HashCore.pm
+#, fuzzy
+#| msgid "PGP signature not allowed here"
+msgid "OpenPGP signature not allowed here"
+msgstr "no se permite la firma PGP aquí"
+
+#: scripts/Dpkg/Control/HashCore.pm
+msgid "line with unknown format (not field-colon-value)"
+msgstr ""
+"se ha detectado una línea con formato desconocido (no es un valor de campo "
+"separado por dos puntos)"
+
+#: scripts/Dpkg/Control/HashCore.pm
+msgid "write error on control data"
+msgstr "se ha detectado un error de escritura en los datos de control"
+
+#: scripts/Dpkg/Control/Info.pm
+#, fuzzy, perl-format
+#| msgid "first block lacks a source field"
+msgid "first stanza lacks a '%s' field"
+msgstr "falta un campo de fuente en el primer bloque"
+
+#: scripts/Dpkg/Control/Info.pm
+#, fuzzy, perl-format
+#| msgid "block lacks the '%s' field"
+msgid "stanza lacks the '%s' field"
+msgstr "el bloqueo no incluye el campo «%s»"
+
+#: scripts/Dpkg/Control/Tests/Entry.pm
+#, fuzzy, perl-format
+#| msgid "block lacks the '%s' field"
+msgid "stanza lacks either %s or %s fields"
+msgstr "el bloqueo no incluye el campo «%s»"
+
+#: scripts/Dpkg/Deps.pm
+#, perl-format
+msgid "can't parse dependency %s"
+msgstr "no se puede analizar la dependencia %s"
+
+#: scripts/Dpkg/Deps.pm
+#, fuzzy, perl-format
+#| msgid "invalid dependency got generated: %s"
+msgid "virtual dependency contains invalid relation: %s"
+msgstr "se ha generado una dependencia inválida: %s"
+
+#: scripts/Dpkg/Deps.pm
+msgid "an union dependency can only contain simple dependencies"
+msgstr ""
+"una dependencia de unión (OR - «|») sólo puede contener dependencias simples"
+
+#: scripts/Dpkg/Dist/Files.pm
+#, fuzzy, perl-format
+#| msgid "badly formed line in files list file, line %d"
+msgid "badly formed file name in files list file, line %d"
+msgstr "línea inválida en el fichero de lista de ficheros, línea %d"
+
+#: scripts/Dpkg/Dist/Files.pm
+#, perl-format
+msgid "badly formed line in files list file, line %d"
+msgstr "línea inválida en el fichero de lista de ficheros, línea %d"
+
+#: scripts/Dpkg/Dist/Files.pm
+#, perl-format
+msgid "duplicate files list entry for file %s (line %d)"
+msgstr ""
+"entrada duplicada en la lista de ficheros para el fichero %s (línea %d)"
+
+#: scripts/Dpkg/Dist/Files.pm
+#, fuzzy, perl-format
+#| msgid "cannot create directory %s"
+msgid "cannot open directory %s"
+msgstr "no se puede crear el directorio «%s»"
+
+#: scripts/Dpkg/Dist/Files.pm
+#, fuzzy, perl-format
+#| msgid "invalid flag in %s: %s"
+msgid "invalid filename %s"
+msgstr "se ha detectado una opción inválida en %s: %s"
+
+#: scripts/Dpkg/ErrorHandling.pm
+msgid "info"
+msgstr "información"
+
+#: scripts/Dpkg/ErrorHandling.pm
+msgid "notice"
+msgstr ""
+
+#: scripts/Dpkg/ErrorHandling.pm
+msgid "warning"
+msgstr "aviso"
+
+#: scripts/Dpkg/ErrorHandling.pm
+msgid "error"
+msgstr "fallo"
+
+#: scripts/Dpkg/ErrorHandling.pm
+#, fuzzy, perl-format
+#| msgid "%s gave error exit status %s"
+msgid "%s subprocess returned exit status %d"
+msgstr "%s devolvió un estado de salida de error %s"
+
+#: scripts/Dpkg/ErrorHandling.pm
+#, perl-format
+msgid "%s subprocess was killed by signal %d"
+msgstr ""
+
+#: scripts/Dpkg/ErrorHandling.pm
+#, fuzzy, perl-format
+#| msgid "%s failed with unknown exit code %d"
+msgid "%s subprocess failed with unknown status code %d"
+msgstr "%s falló con el código de salida desconocido %d"
+
+#: scripts/Dpkg/ErrorHandling.pm
+msgid "Use --help for program usage information."
+msgstr "Use --help para obtener información del uso de este programa."
+
+#: scripts/Dpkg/File.pm
+#, fuzzy, perl-format
+#| msgid "cannot stat file %s"
+msgid "cannot create file %s"
+msgstr "no se puede obtener el estado (stat) del fichero «%s»"
+
+#: scripts/Dpkg/IPC.pm
+#, perl-format
+msgid "pipe for %s"
+msgstr "tubería para %s"
+
+#: scripts/Dpkg/IPC.pm
+#, perl-format
+msgid "chdir to %s"
+msgstr "chdir a «%s»"
+
+#: scripts/Dpkg/IPC.pm
+msgid "reopen stdin"
+msgstr "reabrir la entrada estándar"
+
+#: scripts/Dpkg/IPC.pm
+msgid "reopen stdout"
+msgstr "reabrir la salida estándar"
+
+#: scripts/Dpkg/IPC.pm
+msgid "child process"
+msgstr "proceso secundario o hijo"
+
+#: scripts/Dpkg/IPC.pm
+#, perl-format
+msgid "wait for %s"
+msgstr "esperar a %s"
+
+#: scripts/Dpkg/IPC.pm
+#, perl-format
+msgid "%s didn't complete in %d second"
+msgid_plural "%s didn't complete in %d seconds"
+msgstr[0] "%s no se completó en %d segundo"
+msgstr[1] "%s no se completó en %d segundos"
+
+#: scripts/Dpkg/Interface/Storable.pm
+msgid "<standard input>"
+msgstr "<entrada estándar>"
+
+#: scripts/Dpkg/Lock.pm
+msgid "File::FcntlLock not available; using flock which is not NFS-safe"
+msgstr ""
+"No está disponible File::FcntlLock, se utilizará flock que no es seguro en "
+"entornos NFS"
+
+#: scripts/Dpkg/Lock.pm
+#, fuzzy, perl-format
+#| msgid "failed to verify signature on %s"
+msgid "failed to get a write lock on %s"
+msgstr "se ha detectado un fallo al verificar la firma de %s"
+
+#: scripts/Dpkg/OpenPGP.pm
+#, fuzzy, perl-format
+#| msgid "unknown option or argument %s"
+msgid "unknown OpenPGP api requested %s"
+msgstr "el argumento u opción «%s» es desconocido"
+
+#: scripts/Dpkg/OpenPGP.pm
+#, fuzzy, perl-format
+#| msgid "cannot open file %s"
+msgid "cannot load OpenPGP backend %s"
+msgstr "no se ha podido abrir el fichero «%s»"
+
+#: scripts/Dpkg/OpenPGP.pm
+#, fuzzy, perl-format
+#| msgid "unknown option or argument %s"
+msgid "unknown OpenPGP backend %s"
+msgstr "el argumento u opción «%s» es desconocido"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "success"
+msgstr ""
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+#, fuzzy
+#| msgid "cannot create directory %s"
+msgid "no acceptable signature found"
+msgstr "no se puede crear el directorio «%s»"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "missing required argument"
+msgstr ""
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+#, fuzzy
+#| msgid "%s is not a supported compression"
+msgid "unsupported option"
+msgstr "%s no es una compresión compatible"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "invalid data type"
+msgstr ""
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+#, fuzzy
+#| msgid "one to three arguments expected"
+msgid "non-text input where text expected"
+msgstr "Se esperan de uno a tres argumentos"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "output file already exists"
+msgstr ""
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+#, fuzzy
+#| msgid "patch file '%s' doesn't exist"
+msgid "input file does not exist"
+msgstr "el fichero de parche «%s» no existe"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "cannot unlock password-protected key"
+msgstr ""
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+#, fuzzy
+#| msgid "unsupported checksum '%s'"
+msgid "unsupported subcommand"
+msgstr "suma de control no soportada `%s'"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "key is not signature-capable"
+msgstr ""
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "missing OpenPGP implementation"
+msgstr ""
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "specified key needs a keystore"
+msgstr ""
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+#, perl-format
+msgid "error code %d"
+msgstr ""
+
+#: scripts/Dpkg/Package.pm
+msgid "may not be empty string"
+msgstr "puede que no sea una cadena vacía"
+
+#: scripts/Dpkg/Package.pm
+#, perl-format
+msgid "character '%s' not allowed"
+msgstr "no se permite el carácter «%s»"
+
+#: scripts/Dpkg/Package.pm
+msgid "must start with an alphanumeric character"
+msgstr "debe empezar con un carácter alfanumérico"
+
+#: scripts/Dpkg/Path.pm scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "pathname '%s' cannot be canonicalized"
+msgstr ""
+
+#: scripts/Dpkg/Path.pm scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "pathname '%s' points outside source root (to '%s')"
+msgstr ""
+
+#: scripts/Dpkg/Shlibs.pm
+msgid ""
+"deprecated use of LD_LIBRARY_PATH with private library directory which "
+"interferes with cross-building, please use -l option instead"
+msgstr ""
+
+#: scripts/Dpkg/Shlibs.pm scripts/Dpkg/Shlibs/Objdump.pm
+#, fuzzy, perl-format
+#| msgid "cannot exec format parser: %s"
+msgid "unknown executable format in file '%s'"
+msgstr "no se puede ejecutar el analizador de formato: %s"
+
+#: scripts/Dpkg/Shlibs/Objdump.pm
+#, fuzzy, perl-format
+#| msgid "Couldn't parse dynamic relocation record: %s"
+msgid "couldn't parse dynamic relocation record: %s"
+msgstr "No se pudo analizar el registro de reubicación dinámico: %s"
+
+#: scripts/Dpkg/Shlibs/Objdump.pm
+#, fuzzy, perl-format
+#| msgid "Couldn't parse dynamic symbol definition: %s"
+msgid "couldn't parse dynamic symbol definition: %s"
+msgstr "No se pudo analizar la definición de símbolo dinámico: %s"
+
+#: scripts/Dpkg/Shlibs/Symbol.pm
+#, perl-format
+msgid "symbol name unspecified: %s"
+msgstr "el nombre del símbolo no está definido: %s"
+
+#: scripts/Dpkg/Shlibs/Symbol.pm
+#, fuzzy, perl-format
+#| msgid "you can't use symver tag to catch unversioned symbols: %s"
+msgid "symver tag with versioned symbol will not match: %s"
+msgstr ""
+"no puede usar una etiqueta «symver» para encontrar símbolos sin sin "
+"versionar: %s"
+
+#: scripts/Dpkg/Shlibs/Symbol.pm
+#, perl-format
+msgid "you can't use symver tag to catch unversioned symbols: %s"
+msgstr ""
+"no puede usar una etiqueta «symver» para encontrar símbolos sin sin "
+"versionar: %s"
+
+#: scripts/Dpkg/Shlibs/SymbolFile.pm
+#, perl-format
+msgid "symbol information must be preceded by a header (file %s, line %s)"
+msgstr ""
+"la información del símbolo se debe preceder con una cabecera (fichero «%s», "
+"línea «%s»)"
+
+#: scripts/Dpkg/Shlibs/SymbolFile.pm
+#, fuzzy, perl-format
+#| msgid "Failed to parse line in %s: %s"
+msgid "failed to parse line in %s: %s"
+msgstr "Se ha detectado un fallo al analizar la línea en «%s»: %s"
+
+#: scripts/Dpkg/Shlibs/SymbolFile.pm
+#, fuzzy, perl-format
+#| msgid "Failed to parse a line in %s: %s"
+msgid "failed to parse a line in %s: %s"
+msgstr "Se ha detectado un fallo al analizar una línea en «%s»: %s"
+
+#: scripts/Dpkg/Shlibs/SymbolFile.pm
+#, perl-format
+msgid "tried to merge the same object (%s) twice in a symfile"
+msgstr ""
+"se ha intentado fusionar el mismo objeto (%s) dos veces en un fichero "
+"simbólico"
+
+#: scripts/Dpkg/Shlibs/SymbolFile.pm
+msgid "cannot merge symbols from objects without SONAME"
+msgstr "no se puede fusionar símbolos de objetos sin «SONAME»"
+
+#: scripts/Dpkg/Source/Archive.pm
+msgid "write on tar input"
+msgstr "escribe en la entrada tar"
+
+#: scripts/Dpkg/Source/Archive.pm
+msgid "close on tar input"
+msgstr "cierra con la entrada tar"
+
+#: scripts/Dpkg/Source/Archive.pm scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot create directory %s"
+msgstr "no se puede crear el directorio «%s»"
+
+#: scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "cannot get source pathname %s metadata"
+msgstr ""
+
+#: scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "cannot get target pathname %s metadata"
+msgstr ""
+
+#: scripts/Dpkg/Source/Archive.pm
+#, fuzzy, perl-format
+#| msgid "cannot create directory %s"
+msgid "cannot change directory %s mode"
+msgstr "no se puede crear el directorio «%s»"
+
+#: scripts/Dpkg/Source/Archive.pm
+#, fuzzy, perl-format
+#| msgid "cannot create directory %s"
+msgid "cannot change directory %s times"
+msgstr "no se puede crear el directorio «%s»"
+
+#: scripts/Dpkg/Source/Archive.pm
+#, fuzzy, perl-format
+#| msgid "cannot stat directory %s"
+msgid "cannot remove destination directory %s"
+msgstr "no se pudo obtener el estado («stat») del directorio «%s»"
+
+#: scripts/Dpkg/Source/Archive.pm
+#, fuzzy, perl-format
+#| msgid "cannot stat file %s"
+msgid "cannot remove destination file %s"
+msgstr "no se puede obtener el estado (stat) del fichero «%s»"
+
+#: scripts/Dpkg/Source/Archive.pm scripts/Dpkg/Source/Package.pm
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "cannot opendir %s"
+msgstr "no se puede abrir el directorio «%s»"
+
+#: scripts/Dpkg/Source/Archive.pm
+#, fuzzy, perl-format
+#| msgid "Unable to rename %s to %s"
+msgid "unable to rename %s to %s"
+msgstr "No se pudo renombrar «%s» a «%s»"
+
+#: scripts/Dpkg/Source/Functions.pm
+#, perl-format
+msgid "cannot stat directory %s (before removal)"
+msgstr ""
+"no se puede mostrar el estado (stat) del directorio «%s» (antes de la "
+"eliminación)"
+
+#: scripts/Dpkg/Source/Functions.pm
+#, fuzzy, perl-format
+#| msgid "unable to check for removal of dir `%s'"
+msgid "unable to check for removal of directory '%s'"
+msgstr "no se pudo comprobar la eliminación del directorio «%s»"
+
+#: scripts/Dpkg/Source/Functions.pm
+#, perl-format
+msgid "rm -rf failed to remove '%s'"
+msgstr "«rm -rf» no pudo eliminar «%s»"
+
+#: scripts/Dpkg/Source/Functions.pm scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot change timestamp for %s"
+msgstr "no se puede cambiar la marca de tiempo de «%s»"
+
+#: scripts/Dpkg/Source/Functions.pm
+#, perl-format
+msgid "cannot read timestamp from %s"
+msgstr "no se puede leer la marca de tiempo desde «%s»"
+
+#: scripts/Dpkg/Source/Functions.pm
+#, fuzzy, perl-format
+#| msgid "cannot open file %s"
+msgid "cannot open file %s for binary detection"
+msgstr "no se ha podido abrir el fichero «%s»"
+
+#: scripts/Dpkg/Source/BinaryFiles.pm
+#, perl-format
+msgid "adding %s to %s"
+msgstr "añadiendo «%s» a «%s»"
+
+#: scripts/Dpkg/Source/BinaryFiles.pm
+#, perl-format
+msgid "unwanted binary file: %s"
+msgstr "fichero binario no deseado: %s"
+
+#: scripts/Dpkg/Source/BinaryFiles.pm
+#, perl-format
+msgid ""
+"detected %d unwanted binary file (add it in debian/source/include-binaries "
+"to allow its inclusion)."
+msgid_plural ""
+"detected %d unwanted binary files (add them in debian/source/include-"
+"binaries to allow their inclusion)."
+msgstr[0] ""
+"se ha detectado %d fichero binario (añada este en «debian/source/include-"
+"binaries» para permitir su inclusión)."
+msgstr[1] ""
+"se han detectado %d ficheros binarios (añada estos en «debian/source/include-"
+"binaries» para permitir su inclusión)."
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "%s is not the name of a file"
+msgstr "«%s» no es el nombre de un fichero"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "missing critical source control field %s"
+msgstr "falta el campo crítico de control de las fuentes «%s»"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "source package format '%s' is not supported: %s"
+msgstr "no se permite el formato de paquete fuente «%s»: %s"
+
+#: scripts/Dpkg/Source/Package.pm
+msgid "source package uses only weak checksums"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package.pm
+#, fuzzy, perl-format
+#| msgid "source and version are required to compute the source basename"
+msgid "%s and %s fields are required to compute the source basename"
+msgstr ""
+"se requieren la fuente y la versión para completar el nombre base de la "
+"fuente"
+
+#: scripts/Dpkg/Source/Package.pm
+msgid "upstream tarball signatures but no upstream signing key"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package.pm
+#, fuzzy, perl-format
+#| msgid "applying %s"
+msgid "verifying %s"
+msgstr "aplicando «%s»"
+
+#: scripts/Dpkg/Source/Package.pm
+#, fuzzy, perl-format
+#| msgid "cannot stat file %s"
+msgid "cannot verify upstream tarball signature for %s: %s"
+msgstr "no se puede obtener el estado (stat) del fichero «%s»"
+
+#: scripts/Dpkg/Source/Package.pm
+#, fuzzy, perl-format
+#| msgid "cannot stat file %s"
+msgid "cannot verify inline signature for %s: %s"
+msgstr "no se puede obtener el estado (stat) del fichero «%s»"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "%s is not a valid option for %s"
+msgstr "«%s» no es una opción válida para %s"
+
+#: scripts/Dpkg/Source/Package.pm
+#, fuzzy, perl-format
+#| msgid "failed to copy %s to %s"
+msgid "cannot copy %s to %s"
+msgstr "se ha detectado un fallo al copiar %s a %s"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "%s does not exist"
+msgstr "%s no existe"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "cannot make %s executable"
+msgstr "no se puede dar permisos de ejecución a «%s»"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "%s is not a plain file"
+msgstr "«%s» no es un fichero simple"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "'%s' is not supported by the source format '%s'"
+msgstr "no se permite «%s» con el formato de fuente «%s»"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, fuzzy
+#| msgid "write original source message"
+msgid "auto select original source"
+msgstr "escribir el mensaje de la fuente original"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, fuzzy
+#| msgid "full upload (original source is included)"
+msgid "use packed original source (unpack and keep)"
+msgstr "subida completa (se incluye la fuente original)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, fuzzy
+#| msgid "full upload (original source is included)"
+msgid "use packed original source (unpack and remove)"
+msgstr "subida completa (se incluye la fuente original)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, fuzzy
+#| msgid "full upload (original source is included)"
+msgid "use unpacked original source (pack and keep)"
+msgstr "subida completa (se incluye la fuente original)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, fuzzy
+#| msgid "full upload (original source is included)"
+msgid "use unpacked original source (pack and remove)"
+msgstr "subida completa (se incluye la fuente original)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, fuzzy
+#| msgid "write original source message"
+msgid "trust packed and unpacked original sources are same"
+msgstr "escribir el mensaje de la fuente original"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "there is no diff, do main tarfile only"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "like -sa, -sk, -sp, -su, -sr but may overwrite"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+msgid "abort if generated diff has upstream files changes"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "leave original source packed in current directory"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "do not copy original source to current directory"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, fuzzy
+#| msgid "write original source message"
+msgid "unpack original source tree too"
+msgstr "escribir el mensaje de la fuente original"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "do not apply debian diff to upstream sources"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "-s%s option overrides earlier -s%s option"
+msgstr "la opción «-s%s» invalida la opción «-s%s» anterior"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "source handling style -s%s not allowed with -x"
+msgstr "el tipo de manipulación de fuentes «-s%s» no se permite con «-x»"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "multiple tarfiles in v1.0 source package"
+msgstr "varios archivos tar en un paquete fuente versión 1.0"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "unrecognized file for a %s source package: %s"
+msgstr "fichero no reconocido de un paquete fuente %s: %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V3/Native.pm
+msgid "no tarfile in Files field"
+msgstr "no existe ningún fichero tar en el campo «Files»"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "native package with .orig.tar"
+msgstr "paquete nativo con «.orig.tar»"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "unable to rename '%s' to '%s'"
+msgstr "no se pudo renombrar «%s» a «%s»"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+#, perl-format
+msgid "unpacking %s"
+msgstr "desempaquetando %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "unable to keep orig directory (already exists)"
+msgstr "no se pudo conservar el directorio «orig» (ya existe)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "failed to rename newly-extracted %s to %s"
+msgstr ""
+"se ha detectado un fallo al renombrar el recién extraído «%s» como «%s»"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "failed to rename saved %s to %s"
+msgstr "se ha detectado un fallo al renombrar «%s», guardado, a «%s»"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "applying %s"
+msgstr "aplicando «%s»"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "upstream files that have been modified: %s"
+msgstr "ficheros de la fuente original que se han modificado: %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "only supports gzip compression"
+msgstr "sólo acepta la compresión gzip"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid ""
+"-b takes at most a directory and an orig source argument (with v1.0 source "
+"package)"
+msgstr ""
+"«-b» acepta como máximo un directorio y un argumento de fuentes «orig» (con "
+"la versión 1.0 de formato de paquete fuente)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "source handling style -s%s not allowed with -b"
+msgstr "el tipo de manipulación de fuentes «-s%s» no se permite con «-b»"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "packed orig '%s' exists but is not a plain file"
+msgstr "ya existe un «orig» «%s» desempaquetado, pero no es un fichero simple"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "cannot stat orig argument %s"
+msgstr ""
+"no se puede definir el estado («stat») del fichero argumento «orig» de %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid ""
+"orig argument is unpacked but source handling style -s%s calls for packed (."
+"orig.tar.<ext>)"
+msgstr ""
+"el argumento «orig» está desempaquetado, pero el tipo de manipulación de "
+"fuentes «-s%s» invoca uno empaquetado («.orig.tar.<ext>»)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid ""
+"orig argument is packed but source handling style -s%s calls for unpacked (."
+"orig/)"
+msgstr ""
+"el argumento «orig» esta empaquetado, pero el tipo de manipulación de "
+"fuentes «-s%s» invoca uno desempaquetado («.orig/»)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "orig argument %s is not a plain file or directory"
+msgstr "el argumento «orig» %s no es un fichero simple o directorio"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid ""
+"orig argument is empty (means no orig, no diff) but source handling style -"
+"s%s wants something"
+msgstr ""
+"el argumento «orig» está vacío (esto es, sin «orig» ni diff) pero el tipo de "
+"manipulación de fuentes «-s%s» requiere algo"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "unpacked orig '%s' exists but is not a directory"
+msgstr "el «orig» desempaquetado «%s» existe, pero no es un directorio"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "unable to stat putative unpacked orig '%s'"
+msgstr "no se pudo obtener el estado («stat») del fichero «orig» putativo «%s»"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V3/Quilt.pm
+#, fuzzy
+#| msgid "doesn't contain a bzr repository"
+msgid "non-native package version does not contain a revision"
+msgstr "no contiene un repositorio bzr"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V3/Native.pm
+msgid "native package version may not have a revision"
+msgstr "la versión de un paquete nativo puede no tener una revisión"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "source directory '%s' is not <sourcepackage>-<upstreamversion> '%s'"
+msgstr ""
+"el directorio de fuentes «%s» no es <paquete-fuente>-<versión-desarrollador-"
+"original> «%s»"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid ".orig directory name %s is not <package>-<upstreamversion> (wanted %s)"
+msgstr ""
+"el nombre del directorio «.orig» %s no es <paquete>-<versión-desarrollador-"
+"original> (se ha requerido %s)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid ""
+".orig.tar name %s is not <package>_<upstreamversion>.orig.tar (wanted %s)"
+msgstr ""
+"el nombre de «.orig.tar» %s no es <paquete>_<versión-desarollador-original>."
+"orig.tar (se ha requerido %s)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid ""
+"tarfile '%s' already exists, not overwriting, giving up; use -sU or -sR to "
+"override"
+msgstr ""
+"el archivo tar «%s» ya existe, no se va a sobreescribir, cancelando; use «-"
+"sU» «-sR» para invalidar este comportamiento"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "unable to check for existence of '%s'"
+msgstr "no se pudo comprobar la existencia de «%s»"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V3/Native.pm
+#, perl-format
+msgid "unable to rename '%s' (newly created) to '%s'"
+msgstr "no se pudo renombrar «%s» (recién creado) como «%s»"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+#: scripts/Dpkg/Source/Package/V3/Quilt.pm scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "unable to change permission of '%s'"
+msgstr "no se han podido cambiar los permisos de «%s»"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "building %s using existing %s"
+msgstr "construyendo «%s» usando «%s», que está presente en el sistema"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+msgid "upstream signing key but no upstream tarball signature"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, fuzzy, perl-format
+#| msgid ""
+#| "orig dir `%s' already exists, not overwriting, giving up; use -sA, -sK or "
+#| "-sP to override"
+msgid ""
+"orig directory '%s' already exists, not overwriting, giving up; use -sA, -sK "
+"or -sP to override"
+msgstr ""
+"el directorio «orig» «%s» ya existe, no se va a sobreescribir, cancelando; "
+"use «-sA», «-sK» o «-sP» para invalidar este comportamiento"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, fuzzy, perl-format
+#| msgid "unable to check for existence of orig dir `%s'"
+msgid "unable to check for existence of orig directory '%s'"
+msgstr "no se pudo comprobar la existencia del directorio «orig» «%s»"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "the diff modifies the following upstream files: %s"
+msgstr ""
+"el diff modifica los siguientes ficheros del desarrollador original: %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid ""
+"use the '3.0 (quilt)' format to have separate and documented changes to "
+"upstream files, see dpkg-source(1)"
+msgstr ""
+"use el formato «3.0 (quilt)» para que los cambios a los ficheros originales "
+"ocurran por separado y de forma documentada, consulte dpkg-source(1)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "aborting due to --abort-on-upstream-changes"
+msgstr ""
+"cancelando debido a «--abort-on-upstream-changes» (cambios en la fuente "
+"original)"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+msgid "unrepresentable changes to source"
+msgstr "no se pueden representar los cambios hechos a las fuentes"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "include removed files in the patch"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "include timestamp in the patch"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "include binary files in the tarball"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, fuzzy
+#| msgid "fuzz is not allowed when applying patches"
+msgid "do not prepare build tree by applying patches"
+msgstr "no se permite el ajuste («fuzz») al aplicar parches"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "do not unapply patches if previously applied"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "unapply patches if previously applied (default)"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "create an empty original tarball if missing"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "record generated patches, instead of aborting"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "do not extract debian tarball into upstream sources"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "do not apply patches at the end of the extraction"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "duplicate files in %s source package: %s"
+msgstr "se han detectado ficheros duplicados en el paquete fuente %s: %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "missing orig.tar or debian.tar file in v2.0 source package"
+msgstr ""
+"falta un fichero «orig.tar» o «debian.tar» en el paquete fuente versión 2.0"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, fuzzy, perl-format
+#| msgid "missing orig.tar or debian.tar file in v2.0 source package"
+msgid "mismatched orig.tar %s for signature %s in source package"
+msgstr ""
+"falta un fichero «orig.tar» o «debian.tar» en el paquete fuente versión 2.0"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, fuzzy, perl-format
+#| msgid "missing orig.tar or debian.tar file in v2.0 source package"
+msgid "missing addon orig.tar for signature %s in source package"
+msgstr ""
+"falta un fichero «orig.tar» o «debian.tar» en el paquete fuente versión 2.0"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, fuzzy, perl-format
+#| msgid "missing orig.tar or debian.tar file in v2.0 source package"
+msgid "mismatched addon orig.tar %s for signature %s in source package"
+msgstr ""
+"falta un fichero «orig.tar» o «debian.tar» en el paquete fuente versión 2.0"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "required removal of '%s' installed by original tarball"
+msgstr ""
+"se requiere la eliminación de «%s», instalado por el archivo tar original"
+
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "unapplying %s"
+msgstr "revirtiendo «%s»"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "no upstream tarball found at %s"
+msgstr "no se ha encontrado ningún archivo tar de la fuente original en %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "patches are not applied, applying them now"
+msgstr "no se han aplicado los parches, aplicándolos en este momento"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "several orig.tar files found (%s and %s) but only one is allowed"
+msgstr ""
+"se han encontrado varios fichero «orig.tar» (%s y %s), pero sólo se acepta "
+"uno"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "copy of the debian directory"
+msgstr "copia del directorio «debian»"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "local changes detected, the modified files are:"
+msgstr "se han detecta cambios locales, los ficheros modificados son:"
+
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Package/V3/Bzr.pm
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+#, perl-format
+msgid "-b takes only one parameter with format '%s'"
+msgstr "-b sólo toma un parámetro con formato «%s»"
+
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot represent change to %s: %s"
+msgstr "no se puede representar el cambio de %s: %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Patch.pm
+msgid "binary file contents changed"
+msgstr "el contenido del fichero binario ha cambiado"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid ""
+"add %s in debian/source/include-binaries if you want to store the modified "
+"binary in the debian tarball"
+msgstr ""
+"añada «%s» en «debian/source/include-binaries» si desea guardar el binario "
+"modificado en el archivo tar de Debian"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid ""
+"Hint: make sure the version in debian/changelog matches the unpacked source "
+"tree"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "you can integrate the local changes with %s"
+msgstr "puede integrar los cambios locales con %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "aborting due to unexpected upstream changes, see %s"
+msgstr "cancelando debido a cambios en la fuente original, consulte %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "local changes have been recorded in a new patch: %s"
+msgstr "los cambios locales se han guardado en un parche nuevo: %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Package/V3/Quilt.pm
+#, perl-format
+msgid "cannot remove %s"
+msgstr "no se ha podido eliminar «%s»"
+
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Package/V3/Quilt.pm
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "failed to copy %s to %s"
+msgstr "se ha detectado un fallo al copiar %s a %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "cannot register changes in %s, this patch already exists"
+msgstr "no se pueden registrar los cambios en %s, el parche ya existe"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "patch file '%s' doesn't exist"
+msgstr "el fichero de parche «%s» no existe"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "there are no local changes to record"
+msgstr "no hay cambios locales que guardar"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "Enter the desired patch name: "
+msgstr "Introduzca el nombre del parche:"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "no patch name given; cannot proceed"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, fuzzy
+#| msgid "cannot find '%s'"
+msgid "cannot find an editor"
+msgstr "no se puede encontrar «%s»"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+msgid "cannot unpack bzr-format source package because bzr is not in the PATH"
+msgstr ""
+"no se puede desempaquetar el formato de paquete fuente bzr porque bzr no se "
+"encuentra en la variable «PATH»"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+#, perl-format
+msgid ""
+"source directory is not the top directory of a bzr repository (%s/.bzr not "
+"present), but Format bzr was specified"
+msgstr ""
+"El directorio de fuentes no es el directorio superior de un repositorio bzr "
+"(%s/.bzr no está presente), pero se ha definido «Format bzr»"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+#, perl-format
+msgid "%s is a symlink"
+msgstr "«%s» es un enlace simbólico"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+#, perl-format
+msgid "%s is a symlink to outside %s"
+msgstr "«%s» es un enlace simbólico al exterior de «%s»"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+msgid "doesn't contain a bzr repository"
+msgstr "no contiene un repositorio bzr"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+msgid "bzr status exited nonzero"
+msgstr "bzr cerró con un estado distinto de cero"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "uncommitted, not-ignored changes in working directory: %s"
+msgstr ""
+"se han detectado cambios no ignorados sin enviar («uncommited») en el "
+"directorio actual: %s"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+#, fuzzy
+#| msgid "format v3.0 uses only one source file"
+msgid "format v3.0 (bzr) uses only one source file"
+msgstr "el formato v3.0 sólo usa un fichero de fuente"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+#, perl-format
+msgid "expected %s, got %s"
+msgstr "se esperaba «%s», se obtuvo «%s»"
+
+#: scripts/Dpkg/Source/Package/V3/Custom.pm
+#, fuzzy
+#| msgid "unrecognized file for a native source package: %s"
+msgid "define the format of the generated source package"
+msgstr "fichero no reconocido para un paquete fuente nativo: %s"
+
+#: scripts/Dpkg/Source/Package/V3/Custom.pm
+msgid "Format '3.0 (custom)' is only used to create source packages"
+msgstr "El formato «3.0 (custom)» se usa sólo para crear paquetes fuente"
+
+#: scripts/Dpkg/Source/Package/V3/Custom.pm
+msgid "no files indicated on command line"
+msgstr "no se han indicado ficheros en la línea de órdenes"
+
+#: scripts/Dpkg/Source/Package/V3/Custom.pm
+msgid "--target-format option is missing"
+msgstr "Se ha detectado la falta de la opción «--target-format»"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "cannot unpack git-format source package because git is not in the PATH"
+msgstr ""
+"no se puede desempaquetar el formato de paquete git porque git no está "
+"presente en «PATH»"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid ""
+"source directory is not the top directory of a git repository (%s/.git not "
+"present), but Format git was specified"
+msgstr ""
+"El directorio de fuentes no es el directorio superior de un repositorio git "
+"(%s/.git no está presente), pero se ha definido git para «Format»"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "git repository %s uses submodules; this is not yet supported"
+msgstr "el repositorio de git %s usa submódulos; no es compatible actualmente"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "specify a git <ref> to include in the git bundle"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, fuzzy
+#| msgid "creating shallow clone with depth %s"
+msgid "create a shallow clone with <number> depth"
+msgstr "creando un clon superficial («shallow») con profundidad %s"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "doesn't contain a git repository"
+msgstr "no contiene un repositorio git"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "git ls-files exited nonzero"
+msgstr "«git ls-files» cerró con un valor distinto de cero"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "creating shallow clone with depth %s"
+msgstr "creando un clon superficial («shallow») con profundidad %s"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "bundling: %s"
+msgstr "archivando: %s"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "format v3.0 (git) uses only one .git file"
+msgstr "el formato v3.0 (git) sólo usa un fichero «.git»"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "format v3.0 (git) uses only one .gitshallow file"
+msgstr "el formato v3.0 (git) sólo usa un fichero «.gitshallow»"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "format v3.0 (git) unknown file: %s"
+msgstr "fichero desconocido con formato v3.0 (git): %s"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "format v3.0 (git) expected %s"
+msgstr "se esperaba el formato v3.0 (git) %s"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "cloning %s"
+msgstr "clonando «%s»"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "setting up shallow clone"
+msgstr "configurando un clon superficial («shallow»)"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, fuzzy, perl-format
+#| msgid "Unable to rename %s to %s"
+msgid "setting remote %s to %s"
+msgstr "No se pudo renombrar «%s» a «%s»"
+
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+#, fuzzy
+#| msgid "multiple tarfiles in v1.0 source package"
+msgid "multiple tarfiles in native source package"
+msgstr "varios archivos tar en un paquete fuente versión 1.0"
+
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+#, perl-format
+msgid "unrecognized file for a native source package: %s"
+msgstr "fichero no reconocido para un paquete fuente nativo: %s"
+
+#: scripts/Dpkg/Source/Package/V3/Quilt.pm
+msgid "use a single debianization patch"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V3/Quilt.pm
+msgid "accept quilt metadata <version> even if unknown"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V3/Quilt.pm
+#, perl-format
+msgid "can't create symlink %s"
+msgstr "no se puede crear el enlace simbólico «%s»"
+
+#: scripts/Dpkg/Source/Package/V3/Quilt.pm
+#, fuzzy, perl-format
+#| msgid "using options from %s: %s"
+msgid "using patch list from %s"
+msgstr "usando opciones de %s: %s"
+
+#: scripts/Dpkg/Source/Package/V3/Quilt.pm
+#, perl-format
+msgid "unsupported version of the quilt metadata: %s"
+msgstr "la versión de los metadatos de quilt es incompatible: %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "file %s has no final newline (either original or modified version)"
+msgstr ""
+"el fichero «%s» no tiene una nueva línea al final (tanto en la versión "
+"original como en la modificada)"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "unknown line from diff -u on %s: '%s'"
+msgstr "línea desconocida de «diff -u» en %s: «%s»"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "failed to write"
+msgstr "se ha detectado un fallo al escribir"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff on %s"
+msgstr "diff de «%s»"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot stat file %s"
+msgstr "no se puede obtener el estado (stat) del fichero «%s»"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot read link %s"
+msgstr "no se puede leer el enlace «%s»"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "device or socket is not allowed"
+msgstr "el dispositivo o socket de Unix no está permitido"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "unknown file type"
+msgstr "el tipo de fichero es desconocido"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, fuzzy, perl-format
+#| msgid "ignoring deletion of directory %s"
+msgid "ignoring deletion of file %s"
+msgstr "ignorando la eliminación del directorio «%s»"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, fuzzy, perl-format
+#| msgid "ignoring deletion of file %s"
+msgid "ignoring deletion of file %s, use --include-removal to override"
+msgstr "ignorando la eliminación del fichero «%s»"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "ignoring deletion of directory %s"
+msgstr "ignorando la eliminación del directorio «%s»"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "ignoring deletion of symlink %s"
+msgstr "ignorando la eliminación del enlace simbólico «%s»"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "newly created empty file '%s' will not be represented in diff"
+msgstr "el fichero vacío recién creado «%s» no se representará en el diff"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "executable mode %04o of '%s' will not be represented in diff"
+msgstr "el modo de ejecución «%04o» de «%s» no se representará en el diff"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "special mode %04o of '%s' will not be represented in diff"
+msgstr "el modo especial «%04o» de «%s» no se representará en el diff"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot represent change to %s:"
+msgstr "no se puede representar el cambio hecho a %s:"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid " new version is %s"
+msgstr " la versión nueva es %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid " old version is %s"
+msgstr " la versión antigua es %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, fuzzy, perl-format
+#| msgid "diff `%s' patches file with name ending .dpkg-orig"
+msgid "diff %s patches file with C-style encoded filename"
+msgstr "el diff «%s» parchea el fichero cuyo nombre termina con «.dpkg-orig»"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "expected ^--- in line %d of diff '%s'"
+msgstr "se esperaba «^---» en la línea %d del fichero de diferencias «%s»"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, fuzzy, perl-format
+#| msgid "diff `%s' patches file with name ending .dpkg-orig"
+msgid "diff '%s' patches file with name ending in .dpkg-orig"
+msgstr "el diff «%s» parchea el fichero cuyo nombre termina con «.dpkg-orig»"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff '%s' finishes in middle of ---/+++ (line %d)"
+msgstr "el diff «%s» termina en la mitad de «---/+++» (línea %d)"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "line after --- isn't as expected in diff '%s' (line %d)"
+msgstr ""
+"la línea después de «---» no es como se esperaba en el diff «%s» (línea %d)"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "none of the filenames in ---/+++ are valid in diff '%s' (line %d)"
+msgstr ""
+"ninguno de los ficheros en «---/+++» son válidos en el diff «%s» (línea %d)"
+
+#: scripts/Dpkg/Source/Patch.pm scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "%s contains an insecure path: %s"
+msgstr "%s contiene una ruta no segura: «%s»"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff %s modifies file %s through a symlink: %s"
+msgstr ""
+"el diff «%s» modifica el fichero «%s» a través de un enlace simbólico: %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "original and modified files are /dev/null in diff '%s' (line %d)"
+msgstr ""
+"los ficheros originales y modificados son están en «/dev/null» en el diff "
+"«%s» (línea %d)"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "file removal without proper filename in diff '%s' (line %d)"
+msgstr ""
+"se ha detectado la eliminación de un fichero sin un nombre adecuado en el "
+"diff «%s» (línea %d)"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff %s removes a non-existing file %s (line %d)"
+msgstr "el diff «%s» elimina el fichero no existente «%s» (línea %d)"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff '%s' patches something which is not a plain file"
+msgstr "el diff «%s» parchea algo que no es un fichero simple"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid ""
+"diff '%s' patches files multiple times; split the diff in multiple files or "
+"merge the hunks into a single one"
+msgstr ""
+
+#: scripts/Dpkg/Source/Patch.pm
+#, fuzzy, perl-format
+#| msgid "diff '%s' patches file %s twice"
+msgid "diff '%s' patches file %s more than once"
+msgstr "el diff «%s» parchea el fichero «%s» dos veces"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "unexpected end of diff '%s'"
+msgstr "se ha detectado un fin del fichero de diferencias «%s» inesperado"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "expected [ +-] at start of line %d of diff '%s'"
+msgstr "se esperaba [ +-] al principio de la línea %d del diff «%s»"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "expected ^@@ at line %d of diff '%s'"
+msgstr "se esperaba ^@@ en la línea %d del diff «%s»"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff '%s' doesn't contain any patch"
+msgstr "el diff «%s» no contiene ningún parche"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "remove patch backup file %s"
+msgstr "eliminar el fichero de respaldo «%s» del parche"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "nonexistent"
+msgstr "inexistente"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "plain file"
+msgstr "fichero simple"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "directory"
+msgstr "directorio"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "symlink to %s"
+msgstr "enlace simbólico a «%s»"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "block device"
+msgstr "dispositivo de bloque"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "character device"
+msgstr "fichero de dispositivo («character device»)"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "named pipe"
+msgstr "tubería nombrada"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "named socket"
+msgstr "socket de Unix nombrado"
+
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "cannot mkdir %s"
+msgstr "no se puede crear el directorio «%s»"
+
+#: scripts/Dpkg/Source/Quilt.pm
+msgid "the patch has fuzz which is not allowed, or is malformed"
+msgstr ""
+"el paquete tiene marcas borrosas lo cual no está permitido, o está corrompido"
+
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "if patch '%s' is correctly applied by quilt, use '%s' to update it"
+msgstr ""
+"si quilt aplica el parche «%s» adecuadamente, utilice «%s» para actualizarlo"
+
+#: scripts/Dpkg/Source/Quilt.pm
+msgid ""
+"if the file is present in the unpacked source, make sure it is also present "
+"in the orig tarball"
+msgstr ""
+
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "%s should be a directory or non-existing"
+msgstr "%s debería ser un directorio, o no existir"
+
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "%s should be a file or non-existing"
+msgstr "%s debería ser un fichero, o no existir"
+
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid ""
+"the series file (%s) contains unsupported options ('%s', line %s); dpkg-"
+"source might fail when applying patches"
+msgstr ""
+"El fichero «series» (%s) contiene opciones incompatibles («%s», línea %s); "
+"puede que dpkg-source falle al aplicar parches"
+
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "restoring quilt backup files for %s"
+msgstr "restaurando los ficheros de respaldo de quilt para %s"
+
+#: scripts/Dpkg/Substvars.pm
+#, perl-format
+msgid "bad line in substvars file %s at line %d"
+msgstr ""
+"línea incorrecta en el fichero de sustitución de variables «%s» en la línea "
+"%d"
+
+#: scripts/Dpkg/Substvars.pm
+#, fuzzy, perl-format
+#| msgid "source version"
+msgid "invalid source version %s"
+msgstr "versión de las fuentes"
+
+#: scripts/Dpkg/Substvars.pm
+#, perl-format
+msgid "too many substitutions - recursive ? - in '%s'"
+msgstr "demasiadas sustituciones (¿recursivo?) en «%s»"
+
+#: scripts/Dpkg/Substvars.pm
+#, fuzzy, perl-format
+#| msgid "unused substitution variable ${%s}"
+msgid "obsolete substitution variable ${%s}"
+msgstr "la variable de sustitución ${%s} no está en uso"
+
+#: scripts/Dpkg/Substvars.pm
+#, fuzzy, perl-format
+#| msgid "unused substitution variable ${%s}"
+msgid "substitution variable ${%s} used, but is not defined"
+msgstr "la variable de sustitución ${%s} no está en uso"
+
+#: scripts/Dpkg/Substvars.pm
+#, fuzzy, perl-format
+#| msgid "unused substitution variable ${%s}"
+msgid "substitution variable ${%s} unused, but is defined"
+msgstr "la variable de sustitución ${%s} no está en uso"
+
+#: scripts/Dpkg/Vars.pm
+#, perl-format
+msgid "source package name '%s' is illegal: %s"
+msgstr "el nombre de paquete fuente «%s» no es válido: %s"
+
+#: scripts/Dpkg/Vars.pm
+#, perl-format
+msgid "source package has two conflicting values - %s and %s"
+msgstr "el paquete fuente tiene dos valores en conflicto: «%s» y «%s»"
+
+#: scripts/Dpkg/Vendor.pm
+#, perl-format
+msgid ""
+"%s origin filename is deprecated; it should have only alphanumeric or dash "
+"characters"
+msgstr ""
+
+#: scripts/Dpkg/Vendor.pm
+#, perl-format
+msgid ""
+"%s module name is deprecated; it should be capitalized with only "
+"alphanumeric characters"
+msgstr ""
+
+#: scripts/Dpkg/Vendor/Debian.pm
+#, perl-format
+msgid "unknown host architecture '%s'"
+msgstr "arquitectura del sistema desconocida «%s»"
+
+#: scripts/Dpkg/Vendor/Ubuntu.pm
+msgid ""
+"Version number suggests Ubuntu changes, but Maintainer: does not have Ubuntu "
+"address"
+msgstr ""
+"El número de versión sugiere cambios para Ubuntu, pero «Maintainer:» no "
+"tiene una dirección de correo de Ubuntu"
+
+#: scripts/Dpkg/Vendor/Ubuntu.pm
+msgid ""
+"Version number suggests Ubuntu changes, but there is no XSBC-Original-"
+"Maintainer field"
+msgstr ""
+"El número de versión sugiere cambios para Ubuntu, pero no hay ningún campo "
+"«XSBC-Original-Maintainer»"
+
+#: scripts/Dpkg/Version.pm
+#, perl-format
+msgid "%s is not a valid version"
+msgstr "%s no es una versión válida"
+
+#: scripts/Dpkg/Version.pm
+msgid "version number cannot be empty"
+msgstr "el número de versión no puede estar vacío"
+
+#: scripts/Dpkg/Version.pm
+#, fuzzy
+#| msgid "epoch part of the version number is not a number: '%s'"
+msgid "epoch part of the version number cannot be empty"
+msgstr "la sección «epoch» del número de versión no es un número: «%s»"
+
+#: scripts/Dpkg/Version.pm
+#, fuzzy
+#| msgid "version number cannot be empty"
+msgid "upstream version cannot be empty"
+msgstr "el número de versión no puede estar vacío"
+
+#: scripts/Dpkg/Version.pm
+#, fuzzy
+#| msgid "version number cannot be empty"
+msgid "revision cannot be empty"
+msgstr "el número de versión no puede estar vacío"
+
+#: scripts/Dpkg/Version.pm
+msgid "version number does not start with digit"
+msgstr "el número de versión no comienza con un dígito"
+
+#: scripts/Dpkg/Version.pm
+#, perl-format
+msgid "version number contains illegal character '%s'"
+msgstr "el número de versión contiene el carácter ilegal «%s»"
+
+#: scripts/Dpkg/Version.pm
+#, perl-format
+msgid "epoch part of the version number is not a number: '%s'"
+msgstr "la sección «epoch» del número de versión no es un número: «%s»"
+
+#, fuzzy, perl-format
+#~| msgid "cannot write %s"
+#~ msgid "cannot execute %s program"
+#~ msgstr "no se pudo escribir «%s»"
+
+#, fuzzy, perl-format
+#~| msgid "cannot stat file %s"
+#~ msgid "cannot write signature file %s"
+#~ msgstr "no se puede obtener el estado (stat) del fichero «%s»"
+
+#, fuzzy, perl-format
+#~| msgid "could not verify signature on %s since gpg isn't installed"
+#~ msgid "cannot import key in %s since GnuPG is not installed"
+#~ msgstr "no se pudo verificar la firma de %s ya que gpg no está instalado"
+
+#, fuzzy, perl-format
+#~| msgid "cannot remove %s"
+#~ msgid "cannot import key %s into %s"
+#~ msgstr "no se ha podido eliminar «%s»"
+
+#, fuzzy, perl-format
+#~| msgid "could not verify signature on %s since gpg isn't installed"
+#~ msgid "cannot verify signature on %s since GnuPG is not installed"
+#~ msgstr "no se pudo verificar la firma de %s ya que gpg no está instalado"
+
+#, fuzzy, perl-format
+#~| msgid "building %s using existing %s"
+#~ msgid "verifying %s using existing %s"
+#~ msgstr "construyendo «%s» usando «%s», que está presente en el sistema"
+
+#~ msgid "dpkg-genchanges"
+#~ msgstr "dpkg-genchanges"
+
+#, fuzzy, perl-format
+#~| msgid "Failed to parse line in %s: %s"
+#~ msgid "failed to import key in %s"
+#~ msgstr "Se ha detectado un fallo al analizar la línea en «%s»: %s"
+
+#, perl-format
+#~ msgid "failed to verify signature on %s"
+#~ msgstr "se ha detectado un fallo al verificar la firma de %s"
+
+#~ msgid "error occurred while parsing %s"
+#~ msgstr "se ha detectado un fallo al analizar «%s»"
+
+#~ msgid "error occurred while parsing %s field: %s"
+#~ msgstr "se ha detectado un error al analizar el campo «%s»: %s"
+
+#~ msgid "'%s' is not a legal architecture string"
+#~ msgstr "«%s» no es una cadena de arquitectura legal"
+
+#, fuzzy
+#~| msgid "badly formed line in files list file, line %d"
+#~ msgid "badly formed package name in files list file, line %d"
+#~ msgstr "línea inválida en el fichero de lista de ficheros, línea %d"
+
+#~ msgid ""
+#~ "binary package stanza %s is using an obsolete Build-Profiles field syntax"
+#~ msgstr ""
+#~ "la definición de paquete binario %s está utilizando una síntaxis del "
+#~ "campo «Build-Profiles» obsoleta"
+
+#~ msgid "format variant must be in lowercase"
+#~ msgstr "la variante de formato debe estar en minúsculas"
+
+#~ msgid "invalid Format field '%s'"
+#~ msgstr "se ha detectado un campo «Format» inválido «%s»"
+
+#, fuzzy
+#~| msgid "cannot create directory %s"
+#~ msgid "cannot create pipe for %s"
+#~ msgstr "no se puede crear el directorio «%s»"
+
+#~ msgid "tail of %s"
+#~ msgstr "final de «%s»"
+
+#~ msgid "unknown substitution variable ${%s}"
+#~ msgstr "la variable de sustitución ${%s} es desconocida"
+
+#~ msgid "%s died from signal %s"
+#~ msgstr "%s murió con la señal %s"
+
+#~ msgid "'hardening' flag found but 'hardening-wrapper' not installed"
+#~ msgstr ""
+#~ "se ha encontrado la opción «hardening», pero hardening-wrapper no está "
+#~ "instalado"
+
+#~ msgid "overriding %s in environment: %s"
+#~ msgstr "sustituyendo «%s» en el entorno: «%s»"
+
+#~ msgid "failed to sign .dsc and .changes file"
+#~ msgstr "fallo al firmar los ficheros «.dsc» y «.changes»"
+
+#, fuzzy
+#~| msgid "illegal package name '%s': %s"
+#~ msgid "illegal .buildinfo ID '%s': %s"
+#~ msgstr "nombre de paquete ilegal «%s»: %s"
+
+#~ msgid "cannot open new output control file '%s'"
+#~ msgstr "no se ha podido abrir el fichero de control de salida nuevo «%s»"
+
+#~ msgid "deprecated substitution variable ${%s}"
+#~ msgstr "la variable de sustitución ${%s} es obsoleta"
+
+#, fuzzy
+#~| msgid "Usage: %s [<option>...] [<control-file>]"
+#~ msgid "Usage: %s [<option>...] [<changelog-file>]"
+#~ msgstr "Uso: %s [<opción>...] [<fichero-control>]"
+
+#, fuzzy
+#~| msgid ""
+#~| "Parser options:\n"
+#~| " --format <output-format> see man page for list of available\n"
+#~| " output formats, defaults to 'dpkg'\n"
+#~| " for compatibility with dpkg-dev\n"
+#~| " --since <version>, include all changes later than version\n"
+#~| " -s<version>, -v<version>\n"
+#~| " --until <version>, include all changes earlier than "
+#~| "version\n"
+#~| " -u<version>\n"
+#~| " --from <version>, include all changes equal or later\n"
+#~| " -f<version> than version\n"
+#~| " --to <version>, -t<version> include all changes up to or equal\n"
+#~| " than version\n"
+#~| " --count <number>, include <number> entries from the top\n"
+#~| " -c<number>, -n<number> (or the tail if <number> is lower than "
+#~| "0)\n"
+#~| " --offset <number>, change the starting point for --count,\n"
+#~| " -o<number> counted from the top (or the tail if\n"
+#~| " <number> is lower than 0)\n"
+#~| " --all include all changes\n"
+#~ msgid ""
+#~ "Options:\n"
+#~ " --file <file> changelog <file> to parse (defaults to '-').\n"
+#~ " -l, --label <file> changelog <file> name to use in error "
+#~ "messages.\n"
+#~ " --format <output-format>\n"
+#~ " set the output format (defaults to 'dpkg').\n"
+#~ " --all include all changes.\n"
+#~ " -s, --since <version> include all changes later than <version>.\n"
+#~ " -v <version> ditto.\n"
+#~ " -u, --until <version> include all changes earlier than <version>.\n"
+#~ " -f, --from <version> include all changes equal or later than "
+#~ "<version>.\n"
+#~ " -t, --to <version> include all changes up to or equal than "
+#~ "<version>.\n"
+#~ " -c, --count <number> include <number> entries from the top (or tail "
+#~ "if\n"
+#~ " <number> is lower than 0).\n"
+#~ " -n <number> ditto.\n"
+#~ " -o, --offset <number> change starting point for --count, counted "
+#~ "from\n"
+#~ " the top (or tail if <number> is lower than "
+#~ "0).\n"
+#~ " -?, --help print usage information.\n"
+#~ " -V, --version print version information.\n"
+#~ msgstr ""
+#~ "Opciones de análisis:\n"
+#~ " --format <formato-de-salida> Para una lista de los formatos de "
+#~ "salida\n"
+#~ " disponibles, consulte la página de "
+#~ "manual.\n"
+#~ " El formato predeterminado es «dpkg», "
+#~ "para\n"
+#~ " la compatibilidad con dpkg-dev\n"
+#~ " --since <versión>, Incluye los cambios a partir de la "
+#~ "versión\n"
+#~ " -s<versión>, -v<versión>\n"
+#~ " --until <versión>, Incluye los cambios anteriores a la "
+#~ "versión\n"
+#~ " -u<versión>\n"
+#~ " --from <versión>, Incluye los cambios de la misma versión "
+#~ "o\n"
+#~ " -f<versión> posterior\n"
+#~ " --to <versión>, -t<versión> Incluye los cambios de la misma versión "
+#~ "o\n"
+#~ " anterior\n"
+#~ " --count <número>, Incluye el <número> de entradas desde el\n"
+#~ " principio -c<número>, -n<número> "
+#~ "(o el final si <número> es menor que cero)\n"
+#~ " --offset <número>, Modifica el punto de partida de «--"
+#~ "count»,\n"
+#~ " -o<número> a partir del principio (o el final si el\n"
+#~ " <número> es menor que cero)\n"
+#~ " --all Incluye todos los cambios\n"
+
+#~ msgid "output format %s not supported"
+#~ msgstr "el formato de salida «%s» no es compatible"
+
+#~ msgid "more than one file specified (%s and %s)"
+#~ msgstr "se ha definido más de un fichero (%s y %s)"
+
+#~ msgid "format parser %s not executable"
+#~ msgstr "el formato de analizador %s no es ejecutable"
+
+#~ msgid "output of changelog parser"
+#~ msgstr "salida del analizador de registro de cambios"
+
+#~ msgid "changelog parser %s"
+#~ msgstr "analizador del registro de cambios %s"
+
+#~ msgid "'%s' is not a legal architecture string."
+#~ msgid_plural "'%s' are not legal architecture strings."
+#~ msgstr[0] "«%s» no es una cadena de arquitectura legal."
+#~ msgstr[1] "«%s» no son cadenas de arquitectura legales."
+
+#~ msgid ""
+#~ "More options are available but they depend on the source package format.\n"
+#~ "See dpkg-source(1) for more info."
+#~ msgstr ""
+#~ "Dispone de más opciones, pero dependen del formato de paquete fuente.\n"
+#~ "Para más información consulte dpkg-source(1)."
+
+#, fuzzy
+#~| msgid "Couldn't open %s for reading"
+#~ msgid "couldn't open %s for reading"
+#~ msgstr "No se ha podido abrir «%s» para su lectura"
+
+#, fuzzy
+#~| msgid "error closing %s ($? %d, $! '%s')"
+#~ msgid "error closing %s (%s)"
+#~ msgstr "se ha detectado un fallo al cerrar «%s» ($? %d, $! `%s')"
+
+#~ msgid "couldn't parse date %s"
+#~ msgstr "no se ha podido analizar la fecha %s"
+
+#~ msgid "%s: unrepresentable changes to source"
+#~ msgstr "%s: cambios irrepresentables en las fuentes"
+
+#~ msgid "open new substvars file '%s'"
+#~ msgstr "abrir el nuevo fichero de sustitución de variables «%s»"
+
+#~ msgid "open old varlist file '%s' for reading"
+#~ msgstr "abrir el antiguo fichero de lista de variables %s para su lectura"
+
+#~ msgid "copy old entry to new varlist file '%s'"
+#~ msgstr ""
+#~ "copiar la entrada antigua al nuevo fichero de lista de variables «%s»"
+
+#~ msgid ""
+#~ "this is currently a non-fatal warning with -S, but will probably become "
+#~ "fatal in the future"
+#~ msgstr ""
+#~ "actualmente, es un aviso no crítico con «-S», pero puede que lo sea en el "
+#~ "futuro"
+
+#~ msgid "read changesdescription"
+#~ msgstr "leer la descripción de cambios («changesdescription»)"
+
+#~ msgid "chdir for du to `%s'"
+#~ msgstr "chdir para du a «%s»"
+
+#~ msgid "du in `%s'"
+#~ msgstr "du en «%s»"
+
+#~ msgid "du gave unexpected output `%s'"
+#~ msgstr "du devolvió una salida no esperada «%s»"
+
+#~ msgid "used that one and ignored data from %s!"
+#~ msgstr "¡se usará ese y se ignorarán los datos de %s!"
+
+#, fuzzy
+#~| msgid "Package %s (filename %s) is repeat;"
+#~ msgid "package %s (filename %s) is repeat;"
+#~ msgstr "El paquete %s (nombre de fichero %s) está repetido "
+
+#~ msgid ""
+#~ "Usage: %s [<option>...] [<changelogfile>]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -?, --help print usage information\n"
+#~ " --version, -V print version information\n"
+#~ " --label, -l <file> name of the changelog file to\n"
+#~ " use in error messages\n"
+#~ " --file <file> changelog file to parse, defaults\n"
+#~ " to '-' (standard input)\n"
+#~ " --format <outputformat> see man page for list of available\n"
+#~ " output formats, defaults to 'dpkg'\n"
+#~ " for compatibility with dpkg-dev\n"
+#~ " --since, -s, -v <version> include all changes later than version\n"
+#~ " --until, -u <version> include all changes earlier than version\n"
+#~ " --from, -f <version> include all changes equal or later\n"
+#~ " than version\n"
+#~ " --to, -t <version> include all changes up to or equal\n"
+#~ " than version\n"
+#~ " --count, -c, -n <number> include <number> entries from the top\n"
+#~ " (or the tail if <number> is lower than "
+#~ "0)\n"
+#~ " --offset, -o <number> change the starting point for --count,\n"
+#~ " counted from the top (or the tail if\n"
+#~ " <number> is lower than 0)\n"
+#~ " --all include all changes\n"
+#~ msgstr ""
+#~ "Uso: %s [<opción>...] [<fichero-changelog>]\n"
+#~ "\n"
+#~ "Opciones:\n"
+#~ " -?, --help Muestra información de uso\n"
+#~ " --version, -V Muestra información de la versión\n"
+#~ " --label, -l <fichero> Nombre del fichero «changelog» que "
+#~ "utilizar\n"
+#~ " para los mensajes de error\n"
+#~ " --file <fichero> Fichero «changelog» que analizar, por\n"
+#~ " omisión, «-» (entrada estándar)\n"
+#~ " --format <formato-salida> Consulte la página de manual para los\n"
+#~ " formatos de salida disponibles. Por "
+#~ "omisión,\n"
+#~ " «dpkg», para la compatibilidad con dpkg-"
+#~ "dev\n"
+#~ " --since, -s, -v <versión> Incluye todos los cambios posteriores a "
+#~ "la\n"
+#~ " versión\n"
+#~ " --until, -u <versión> Incluye todos los cambios anteriores a "
+#~ "la\n"
+#~ " versión\n"
+#~ " --from, -f <versión> Incluye todos los cambios de la misma\n"
+#~ " versión o posterior\n"
+#~ " --to, -t <versión> Incluye todos los cambios de la misma\n"
+#~ " versión o anterior\n"
+#~ " --count, -c, -n <número> Incluye el <número> de entradas desde el\n"
+#~ " principio (o el final si el <número> es\n"
+#~ " inferior a cero)\n"
+#~ " --offset, -o <número> Modifica el punto inicial para «--"
+#~ "count»,\n"
+#~ " calculado desde el principio (o el final "
+#~ "si\n"
+#~ " el <número> es inferior a cero)\n"
+#~ " --all Incluye todos los cambios\n"
+
+#~ msgid "checksum program gave bogus output `%s'"
+#~ msgstr "el programa de suma de control devolvió una salida inválida «%s»"
+
+#~ msgid ""
+#~ "Options passed to dpkg-architecture:\n"
+#~ " -a<arch> Debian architecture we build for.\n"
+#~ " -t<system> set GNU system type."
+#~ msgstr ""
+#~ "Opciones que se introducen a dpkg-architecture:\n"
+#~ " -a<arquitectura> Arquitectura de Debian para la que se construye.\n"
+#~ " -t<sistema> Define el tipo de sistema GNU."
+
+#, fuzzy
+#~| msgid ""
+#~| "Options:\n"
+#~| " -a<debian-arch> set current Debian architecture.\n"
+#~| " -t<gnu-system> set current GNU system type.\n"
+#~| " -L list valid architectures.\n"
+#~| " -f force flag (override variables set in environment)."
+#~ msgid ""
+#~ "Options:\n"
+#~ " -a<debian-arch> set current Debian architecture.\n"
+#~ " -t<gnu-system> set current GNU system type.\n"
+#~ " -f force flag (override variables set in environment)."
+#~ msgstr ""
+#~ "Opciones:\n"
+#~ " -a<debian-arch> Define la arquitectura de Debian actual.\n"
+#~ " -t<gnu-system> Define el tipo de sistema GNU actual.\n"
+#~ " -L Muestra las arquitecturas válidas.\n"
+#~ " -f Fuerza una opción (variables de sustitución "
+#~ "definidos en el entorno)."
+
+#~ msgid ""
+#~ "need a command (-x, -b, --before-build, --after-build, --print-format, --"
+#~ "commit)"
+#~ msgstr ""
+#~ "se requiere una orden (-x, -b, --before-build, --after-build, --print-"
+#~ "format, --commit)"
+
+#~ msgid "only one of -x, -b or --print-format allowed, and only once"
+#~ msgstr ""
+#~ "sólo se permite uno de entre «-x», «-b» o «--print-format» a la vez, y "
+#~ "sólo puede aparecer una vez"
+
+#~ msgid "binary-only upload - not including any source code"
+#~ msgstr "subida sólo de binarios - no se incluye ningún código fuente"
+
+#, fuzzy
+#~| msgid "diff `%s' patches file with name ending .dpkg-orig"
+#~ msgid "diff %s patches file with unknown escape sequence \\%s"
+#~ msgstr ""
+#~ "el diff «%s» parchea el fichero cuyo nombre termina con «.dpkg-orig»"
+
+#~ msgid "open new files list file"
+#~ msgstr "abrir el nuevo fichero «files» de lista de ficheros"
+
+#~ msgid "copy old entry to new files list file"
+#~ msgstr ""
+#~ "copiar la entrada antigua al nuevo fichero «files» de la lista de ficheros"
+
+#~ msgid "read old files list file"
+#~ msgstr "leer el antiguo fichero «files» de la lista de ficheros"
+
+#~ msgid "write new entry to new files list file"
+#~ msgstr ""
+#~ "escribir la entrada nueva al nuevo fichero «files» de la lista de ficheros"
+
+#~ msgid "close new files list file"
+#~ msgstr "cerrar el nuevo fichero «files» de la lista de ficheros"
+
+#~ msgid "cannot read files list file"
+#~ msgstr "no se puede leer el fichero con la lista de ficheros"
+
+#~ msgid "duplicate files list entry for package %s (line %d)"
+#~ msgstr ""
+#~ "entrada duplicada en la lista de ficheros para el paquete %s (línea %d)"
+
+#~ msgid "close old files list file"
+#~ msgstr "cerrar el antiguo fichero de la lista de ficheros"
+
+#~ msgid "internal error"
+#~ msgstr "fallo interno"
+
+#~ msgid "fatal error occurred while parsing input"
+#~ msgstr "se ha detectado un error fatal al analizar la entrada"
diff --git a/scripts/po/fr.gmo b/scripts/po/fr.gmo
new file mode 100644
index 0000000..7f3aad6
--- /dev/null
+++ b/scripts/po/fr.gmo
Binary files differ
diff --git a/scripts/po/fr.po b/scripts/po/fr.po
new file mode 100644
index 0000000..9eee16b
--- /dev/null
+++ b/scripts/po/fr.po
@@ -0,0 +1,5263 @@
+# Translation of dpkg scripts messages templates to French
+# Copyright (C) 2007-2009 Debian French l10n team <debian-l10n-french@lists.debian.org>
+# This file is distributed under the same license as the dpkg package.
+#
+# Translators:
+# Frédéric Bothamy <frederic.bothamy@free.fr>, 2005-2007.
+# Christian Perrier <bubulle@debian.org>, 2008-2012.
+# Steve Petruzzello <dlist@bluewin.ch>, 2014.
+# Sébastien Poher <sebastien@volted.net>, 2014-2015, 2023.
+msgid ""
+msgstr ""
+"Project-Id-Version: dpkg-dev 1.21.20\n"
+"Report-Msgid-Bugs-To: debian-dpkg@lists.debian.org\n"
+"POT-Creation-Date: 2023-05-11 02:03+0000\n"
+"PO-Revision-Date: 2023-02-10 02:16+0100\n"
+"Last-Translator: Sébastien Poher <sebastien@volted.net>\n"
+"Language-Team: French <debian-l10n-french@lists.debian.org>\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n>1;\n"
+"X-Generator: Poedit 3.2.2\n"
+
+#: scripts/dpkg-architecture.pl scripts/dpkg-buildflags.pl
+#: scripts/dpkg-buildpackage.pl scripts/dpkg-checkbuilddeps.pl
+#: scripts/dpkg-distaddfile.pl scripts/dpkg-genbuildinfo.pl
+#: scripts/dpkg-genchanges.pl scripts/dpkg-gencontrol.pl
+#: scripts/dpkg-gensymbols.pl scripts/dpkg-mergechangelogs.pl
+#: scripts/dpkg-name.pl scripts/dpkg-parsechangelog.pl
+#: scripts/dpkg-scanpackages.pl scripts/dpkg-scansources.pl
+#: scripts/dpkg-shlibdeps.pl scripts/dpkg-source.pl scripts/dpkg-vendor.pl
+#, perl-format
+msgid "Debian %s version %s.\n"
+msgstr "Debian %s version %s.\n"
+
+#: scripts/dpkg-architecture.pl scripts/dpkg-buildflags.pl
+#: scripts/dpkg-buildpackage.pl scripts/dpkg-distaddfile.pl
+#: scripts/dpkg-genbuildinfo.pl scripts/dpkg-genchanges.pl
+#: scripts/dpkg-gencontrol.pl scripts/dpkg-gensymbols.pl
+#: scripts/dpkg-parsechangelog.pl scripts/dpkg-shlibdeps.pl
+#: scripts/dpkg-source.pl scripts/dpkg-vendor.pl
+msgid ""
+"\n"
+"This is free software; see the GNU General Public License version 2 or\n"
+"later for copying conditions. There is NO warranty.\n"
+msgstr ""
+"\n"
+"Ce logiciel est un logiciel libre. Voyez la licence « GNU General Public "
+"License »\n"
+"dans la version 2 ou une version supérieure pour les conditions de copie. Il "
+"n'y a PAS de garantie.\n"
+
+#: scripts/dpkg-architecture.pl scripts/dpkg-vendor.pl
+#, perl-format
+msgid "Usage: %s [<option>...] [<command>]"
+msgstr "Usage: %s [<option>...] [<commande>]"
+
+#: scripts/dpkg-architecture.pl
+msgid ""
+"Commands:\n"
+" -l, --list list variables (default).\n"
+" -L, --list-known list valid architectures (matching some "
+"criteria).\n"
+" -e, --equal <arch> compare with host Debian architecture.\n"
+" -i, --is <arch-wildcard> match against host Debian architecture.\n"
+" -q, --query <variable> prints only the value of <variable>.\n"
+" -s, --print-set print command to set environment variables.\n"
+" -u, --print-unset print command to unset environment variables.\n"
+" -c, --command <command> set environment and run the command in it.\n"
+" -?, --help show this help message.\n"
+" --version show the version."
+msgstr ""
+"Commandes :\n"
+" -l, --list lister les variables (défaut).\n"
+" -L, --list-known lister les architectures valides (en "
+"fonction de critères).\n"
+" -e, --equal <arch> comparer avec l'architecture Debian en "
+"cours.\n"
+" -i, --is <arch-joker> vérifier que l'architecture Debian en cours "
+"est <arch-joker>.\n"
+" -q, --query <variable> n'afficher que la valeur de <variable>.\n"
+" -s, --print-set afficher la commande pour définir les "
+"variables d'environnement.\n"
+" -u, --print-unset afficher la commande pour annuler les "
+"variables d'environnement.\n"
+" -c, --command <commande> mettre en place l'environnement et y "
+"exécuter la commande.\n"
+" -?, --help afficher ce message d'aide.\n"
+" --version afficher la version."
+
+#: scripts/dpkg-architecture.pl
+msgid ""
+"Options:\n"
+" -a, --host-arch <arch> set host Debian architecture.\n"
+" -t, --host-type <type> set host GNU system type.\n"
+" -A, --target-arch <arch> set target Debian architecture.\n"
+" -T, --target-type <type> set target GNU system type.\n"
+" -W, --match-wildcard <arch-wildcard>\n"
+" restrict architecture list matching <arch-"
+"wildcard>.\n"
+" -B, --match-bits <arch-bits>\n"
+" restrict architecture list matching <arch-"
+"bits>.\n"
+" -E, --match-endian <arch-endian>\n"
+" restrict architecture list matching <arch-"
+"endian>.\n"
+" --print-format <format>\n"
+" use <format> for --print-set and --print-unset,\n"
+" allowed values: shell (default), make.\n"
+" -f, --force force flag (override variables set in "
+"environment)."
+msgstr ""
+"Options :\n"
+" -a, --host-arch <arch> définir l'architecture Debian en "
+"cours.\n"
+" -t, --host-type <type> définir le type de système GNU en "
+"cours.\n"
+" -A, --target-arch <arch> définir l'architecture Debian de "
+"la cible.\n"
+" -T, --target-type <type> définir le type de système GNU de "
+"la cible.\n"
+" -W, --match-wildcard <arch-joker> restreindre aux architectures "
+"listées correspondant à <arch-joker>.\n"
+" -B, --match-bits <bits-d'arch> restreindre aux architectures "
+"listées correspondant à <bits-d'arch>.\n"
+" -E, --match-endian <boutisme-d'arch> restreindre aux architectures "
+"listées correspondant à <boutisme-d'arch>.\n"
+" --print-format <format>\n"
+" utilise <format> pour les options --print-set "
+"et --print-unset,\n"
+" les valeurs acceptées sont : shell (par "
+"défaut) et make.\n"
+" -f, --force drapeau de forçage (outrepasse les "
+"variables définies dans l'environnement)."
+
+#: scripts/dpkg-architecture.pl
+#, perl-format
+msgid "unknown Debian architecture %s, you must specify GNU system type, too"
+msgstr ""
+"architecture Debian inconnue %s, vous devez aussi indiquer le type du "
+"système GNU"
+
+#: scripts/dpkg-architecture.pl
+#, perl-format
+msgid "unknown GNU system type %s, you must specify Debian architecture, too"
+msgstr ""
+"type du système GNU inconnu %s, vous devez aussi indiquer l'architecture "
+"Debian"
+
+#: scripts/dpkg-architecture.pl
+#, perl-format
+msgid "unknown default GNU system type for Debian architecture %s"
+msgstr "type du système GNU par défaut inconnu pour l'architecture Debian %s"
+
+#: scripts/dpkg-architecture.pl
+#, perl-format
+msgid ""
+"default GNU system type %s for Debian arch %s does not match specified GNU "
+"system type %s"
+msgstr ""
+"le type par défaut du système GNU %s pour l'architecture Debian %s ne "
+"correspond pas au type du système GNU indiqué %s"
+
+#: scripts/dpkg-architecture.pl
+#, perl-format
+msgid "%s is not a supported print format"
+msgstr "%s n'est pas un format d’affichage pris en charge"
+
+#: scripts/dpkg-architecture.pl
+#, perl-format
+msgid "%s is not a supported variable name"
+msgstr "%s n'est pas le nom d'une variable pris en charge"
+
+#: scripts/dpkg-architecture.pl scripts/dpkg-buildflags.pl
+#: scripts/dpkg-distaddfile.pl scripts/dpkg-genbuildinfo.pl
+#: scripts/dpkg-genchanges.pl scripts/dpkg-gencontrol.pl
+#: scripts/dpkg-gensymbols.pl scripts/dpkg-name.pl
+#: scripts/dpkg-parsechangelog.pl scripts/dpkg-shlibdeps.pl
+#: scripts/dpkg-vendor.pl
+#, perl-format
+msgid "unknown option '%s'"
+msgstr "option inconnue « %s »"
+
+#: scripts/dpkg-architecture.pl
+#, perl-format
+msgid ""
+"specified GNU system type %s does not match CC system type %s, try setting a "
+"correct CC environment variable"
+msgstr ""
+"le type de système GNU spécifié %s ne correspond pas au type de système CC "
+"%s, essayez de définir une variable d'environnement CC correcte"
+
+#: scripts/dpkg-architecture.pl scripts/dpkg-shlibdeps.pl scripts/Dpkg/IPC.pm
+#: scripts/Dpkg/Shlibs/Cppfilt.pm
+#, perl-format
+msgid "unable to execute %s"
+msgstr "impossible d'exécuter %s"
+
+#: scripts/dpkg-buildflags.pl
+#, perl-format
+msgid "Usage: %s [<command>]"
+msgstr "Utilisation : %s [<commande>]"
+
+#: scripts/dpkg-buildflags.pl
+msgid ""
+"Commands:\n"
+" --get <flag> output the requested flag to stdout.\n"
+" --origin <flag> output the origin of the flag to stdout:\n"
+" value is one of vendor, system, user, env.\n"
+" --status output a synopsis with all parameters affecting the\n"
+" program behaviour, the resulting flags and their "
+"origin.\n"
+" --query like --status, but in deb822 format.\n"
+" --query-features <area>\n"
+" output the status of features for the given area.\n"
+" --list output a list of the flags supported by the current "
+"vendor.\n"
+" --export=(sh|make|cmdline|configure)\n"
+" output something convenient to import the compilation\n"
+" flags in a shell script, in make, or in a command "
+"line.\n"
+" --dump output all compilation flags with their values.\n"
+" --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+"Actions:\n"
+" --get <drapeau> afficher le drapeau choisi sur la sortie standard.\n"
+" --origin <drapeau> afficher l'origine du drapeau sur la sortie "
+"standard :\n"
+" les valeurs possibles sont vendor, system, user, env.\n"
+" --status afficher un résumé de tous les paramètres qui influent\n"
+" sur le comportement de dpkg-buildflags, ainsi que les "
+"drapeaux\n"
+" qui en résultent et leur origine.\n"
+" --query comme --status mais au format deb822.\n"
+" --query-features <zone>\n"
+" afficher l'état des fonctionnalités de la\n"
+" zone (« area ») indiquée.\n"
+" --list afficher une liste des drapeaux gérés par le\n"
+" distributeur actuel.\n"
+" --export=(sh|make|cmdline|configure)\n"
+" afficher quelque chose de commode afin d'importer les "
+"drapeaux de compilation dans un script shell, dans\n"
+" make ou dans une ligne de commande \n"
+" --dump afficher tous les drapeaux de compilation et leurs "
+"valeurs\n"
+" --help afficher ce message d'aide.\n"
+" --version afficher la version.\n"
+
+#: scripts/dpkg-buildflags.pl scripts/dpkg-source.pl scripts/dpkg-vendor.pl
+#, perl-format
+msgid "two commands specified: --%s and --%s"
+msgstr "deux commandes indiquées : --%s et --%s"
+
+#: scripts/dpkg-buildflags.pl scripts/dpkg-vendor.pl
+#, perl-format
+msgid "%s needs a parameter"
+msgstr "paramètre nécessaire pour %s"
+
+#: scripts/dpkg-buildpackage.pl scripts/dpkg-genbuildinfo.pl
+#: scripts/dpkg-genchanges.pl scripts/dpkg-gencontrol.pl
+#: scripts/dpkg-gensymbols.pl scripts/dpkg-parsechangelog.pl
+#, perl-format
+msgid "Usage: %s [<option>...]"
+msgstr "Utilisation : %s [<option>...]"
+
+#: scripts/dpkg-buildpackage.pl
+msgid ""
+"Options:\n"
+" --build=<type>[,...] specify the build <type>: full, source, "
+"binary,\n"
+" any, all (default is 'full').\n"
+" -F, --build=full normal full build (source and binary; "
+"default).\n"
+" -g, --build=source,all source and arch-indep build.\n"
+" -G, --build=source,any source and arch-specific build.\n"
+" -b, --build=binary binary-only, no source files.\n"
+" -B, --build=any binary-only, only arch-specific files.\n"
+" -A, --build=all binary-only, only arch-indep files.\n"
+" -S, --build=source source-only, no binary files.\n"
+" -nc, --no-pre-clean do not pre clean source tree (implies -b).\n"
+" --pre-clean pre clean source tree (default).\n"
+" --no-post-clean do not post clean source tree (default).\n"
+" -tc, --post-clean post clean source tree.\n"
+" --sanitize-env sanitize the build environment.\n"
+" -D, --check-builddeps check build dependencies and conflicts "
+"(default).\n"
+" -d, --no-check-builddeps do not check build dependencies and "
+"conflicts.\n"
+" --ignore-builtin-builddeps\n"
+" do not check builtin build dependencies.\n"
+" -P, --build-profiles=<profiles>\n"
+" assume comma-separated build <profiles> as "
+"active.\n"
+" --rules-requires-root assume legacy Rules-Requires-Root field "
+"value.\n"
+" -R, --rules-file=<rules> rules file to execute (default is debian/"
+"rules).\n"
+" -T, --rules-target=<target> call debian/rules <target>.\n"
+" --as-root ensure -T calls the target with root rights.\n"
+" -j, --jobs[=<jobs>|auto] jobs to run simultaneously (passed to "
+"<rules>),\n"
+" (default; default is auto, opt-in mode).\n"
+" -J, --jobs-try[=<jobs>|auto]\n"
+" alias for -j, --jobs.\n"
+" --jobs-force[=<jobs>|auto]\n"
+" jobs to run simultaneously (passed to "
+"<rules>),\n"
+" (default is auto, forced mode).\n"
+" -r, --root-command=<command>\n"
+" command to gain root rights (default is "
+"fakeroot).\n"
+" --check-command=<command>\n"
+" command to check the .changes file (no "
+"default).\n"
+" --check-option=<opt> pass <opt> to check <command>.\n"
+" --hook-<name>=<command> set <command> as the hook <name>, known "
+"hooks:\n"
+" init preclean source build binary buildinfo\n"
+" changes postclean check sign done\n"
+" --buildinfo-file=<file> set the .buildinfo filename to generate.\n"
+" --buildinfo-option=<opt>\n"
+" pass option <opt> to dpkg-genbuildinfo.\n"
+" --changes-file=<file> set the .changes filename to generate.\n"
+" --sign-backend=<backend>\n"
+" OpenPGP backend to use to sign\n"
+" (default is auto).\n"
+" -p, --sign-command=<command>\n"
+" command to sign .dsc and/or .changes files\n"
+" (default is gpg).\n"
+" --sign-keyfile=<file> the key file to use for signing.\n"
+" -k, --sign-keyid=<keyid> the key id to use for signing.\n"
+" --sign-key=<keyid> alias for -k, --sign-keyid.\n"
+" -ap, --sign-pause add pause before starting signature process.\n"
+" -us, --unsigned-source unsigned source package.\n"
+" -ui, --unsigned-buildinfo unsigned .buildinfo file.\n"
+" -uc, --unsigned-changes unsigned .buildinfo and .changes file.\n"
+" --no-sign do not sign any file.\n"
+" --force-sign force signing the resulting files.\n"
+" --admindir=<directory> change the administrative directory.\n"
+" -?, --help show this help message.\n"
+" --version show the version."
+msgstr ""
+"Options:\n"
+" --build=<type>[,...] spécifie le <type> de construction : full (par "
+"défaut), source,\n"
+" binary, any, all.\n"
+" -F, --build=full construction complète normale (sources et "
+"binaires) (défaut).\n"
+" -g, --build=source,all source et binaires indépendants de "
+"l'architecture.\n"
+" -G, --build=source,any source et binaires dépendants de "
+"l'architecture.\n"
+" -b, --build=binary binaire uniquement sans construire les "
+"sources.\n"
+" -B, --build=any binaire uniquement seulement les fichiers "
+"spécifiques\n"
+" à l'architecture.\n"
+" -A, --build=all binaire uniquement, seulement les fichiers "
+"indépendants\n"
+" de l'architecture.\n"
+" -S, --build=source source uniquement, pas de fichiers binaires.\n"
+" -nc, --no-pre-clean ne pas nettoyer l'arborescence source "
+"(implique -b).\n"
+" --pre-clean pré-nettoyer l’arborescence source (par "
+"défaut).\n"
+" --no-post-clean ne pas nettoyer l’arborescence source ensuite "
+"(par défaut).\n"
+" -tc nettoyer l'arborescence source une fois "
+"terminé.\n"
+" --sanitize-env nettoyer l’environnement de construction.\n"
+" -D, --check-builddeps contrôler les dépendances et les conflits de\n"
+" construction (défaut).\n"
+" -d, --no-check-builddeps ne pas contrôler les dépendances et les "
+"conflits de\n"
+" construction.\n"
+" --ignore-builtin-builddeps\n"
+" ne pas contrôler les dépendances de "
+"constructions internes.\n"
+" -P, --build-profiles=<profils> considérer les profils de construction "
+"donnés\n"
+" comme actifs (liste séparée par des "
+"virgules).\n"
+" --rules-requires-root considère que la valeur de l’ancien champ "
+"Rules-Requires-Root\n"
+" est définie.\n"
+" -R, --rules-file=<rules> fichier rules à exécuter (par défaut : debian/"
+"rules).\n"
+" -T, --rules-target=<cible> appeler debian/rules <cible>.\n"
+" --as-root garantir que -T appelle la cible avec les droits du\n"
+" superutilisateur.\n"
+" -j, --jobs[=<jobs>|auto] indiquer le nombre de travaux à exécuter "
+"simultanément\n"
+" (passé à <rules>)(défaut ; auto par défaut, spécifiez "
+"tout autre choix).\n"
+" -J, --jobs-try[=<jobs>|auto]\n"
+" alias pour -j, --jobs.\n"
+" --jobs-force[=<jobs>|auto]\n"
+" indiquer le nombre de travaux à exécuter "
+"simultanément\n"
+" (passé à <rules>).\n"
+" -r, --root-command=<command>\n"
+" commande permettant d'obtenir les privilèges "
+"du\n"
+" superutilisateur (fakeroot par défaut).\n"
+" --check-command=<check-command>\n"
+" commande pour vérifier le fichier .changes "
+"(pas de valeur par défaut).\n"
+" --check-option=<opt>\n"
+" passe <opt> à <check-command>\n"
+" --hook-<name>=<commande> définir <commande> en tant que point "
+"d'ancrage pour <nom>,\n"
+" les point d'ancrages valables sont :\n"
+" init preclean source build binary buildinfo\n"
+" changes postclean check sign done\n"
+" --buildinfo-file=<fichier> définir le nom de fichier .buildinfo à "
+"générer.\n"
+" --buildinfo-option=<opt>\n"
+" passer l’option <opt> à dpkg-genbuildinfo.\n"
+" --changes-file=<fichier> définir le nom de fichier .changes à "
+"générer.\n"
+" --sign-backend=<backend>\n"
+" backend OpenPGP à utiliser pour signer\n"
+" (auto par défaut).\n"
+" -p, --sign-command=<commande>\n"
+" commande permettant de signer les fichiers ."
+"dsc\n"
+" et/ou les fichiers .changes (par défaut : "
+"gpg).\n"
+" --sign-keyfile=<fichier> la clé à utiliser pour signer.\n"
+" -k, --sign-keyid=<keyid> identifiant de clé à utiliser pour signer.\n"
+" --sign-key=<keyid> alias pour -k, --sign-keyid.\n"
+" -ap, --sign-pause ajouter une pause avant le processus de "
+"signature.\n"
+" -us, --unsigned-source paquet source non signé.\n"
+" -ui, --unsigned-buildinfo fichier .buildinfo non signé.\n"
+" -uc, --unsigned-changes fichier .changes non signé.\n"
+" --no-sign ne signer aucun fichier.\n"
+" --force-sign forcer la signature des fichiers "
+"résultants.\n"
+" --admindir=<répertoire>\n"
+" modifier le répertoire administratif.\n"
+" -?, --help afficher ce message d'aide.\n"
+" --version afficher la version."
+
+#: scripts/dpkg-buildpackage.pl
+msgid ""
+"Options passed to dpkg-architecture:\n"
+" -a, --host-arch <arch> set the host Debian architecture.\n"
+" -t, --host-type <type> set the host GNU system type.\n"
+" --target-arch <arch> set the target Debian architecture.\n"
+" --target-type <type> set the target GNU system type."
+msgstr ""
+"Options passées à dpkg-architecture :\n"
+" -a, --host-arch <arch> définir l'architecture Debian en cours.\n"
+" -t, --host-type <type> définir le type de système GNU en cours.\n"
+" --target-arch <arch> définir l'architecture Debian de la cible.\n"
+" --target-type <type> définir le type de système GNU de la cible."
+
+#: scripts/dpkg-buildpackage.pl
+msgid ""
+"Options passed to dpkg-genchanges:\n"
+" -si source includes orig, if new upstream "
+"(default).\n"
+" -sa source includes orig, always.\n"
+" -sd source is diff and .dsc only.\n"
+" -v<version> changes since version <version>.\n"
+" -m, --source-by=<maint> maintainer for this source or build is "
+"<maint>.\n"
+" --build-by=<maint> ditto.\n"
+" -e, --release-by=<maint> maintainer for this change or release is "
+"<maint>.\n"
+" --changed-by=<maint> ditto.\n"
+" -C<descfile> changes are described in <descfile>.\n"
+" --changes-option=<opt> pass option <opt> to dpkg-genchanges."
+msgstr ""
+"Options passées à dpkg-genchanges:\n"
+" -si la source n'inclut le fichier d'origine que si nouvelle "
+"version amont (défaut).\n"
+" -sa toujours inclure le fichier d'origine.\n"
+" -sd la source envoyée ne comporte que les fichiers diff et ."
+"dsc.\n"
+" -v<version> modifications depuis la version <version>.\n"
+" -m, --source-by=<maint> le responsable du paquet est <maint>.\n"
+" --build-by=<maint> idem.\n"
+" -e, --release-by=<maint> le responsable de la version courante est "
+"<maint>.\n"
+" --changed-by=<maint> idem.\n"
+" -C<fichdesc> modifications décrites dans <fichdesc>.\n"
+" --changes-option=<opt> passer l'option <opt> à dpkg-genchanges."
+
+#: scripts/dpkg-buildpackage.pl
+msgid ""
+"Options passed to dpkg-source:\n"
+" -sn force Debian native source format.\n"
+" -s[sAkurKUR] see dpkg-source for explanation.\n"
+" -z, --compression-level=<level>\n"
+" compression level to use for source.\n"
+" -Z, --compression=<compressor>\n"
+" compression to use for source (gz|xz|bzip2|"
+"lzma).\n"
+" -i, --diff-ignore[=<regex>] ignore diffs of files matching <regex>.\n"
+" -I, --tar-ignore[=<pattern>]\n"
+" filter out files when building tarballs.\n"
+" --source-option=<opt> pass option <opt> to dpkg-source.\n"
+msgstr ""
+"Options passées à dpkg-source:\n"
+" -sn forcer le format source natif Debian.\n"
+" -s[sAkurKUR] voir dpkg-source pour les détails.\n"
+" -z, --compression-level=<niveau> niveau de compression à utiliser pour "
+"les sources.\n"
+" -Z, --compression=<compresseur>\n"
+" logiciel de compression à utiliser pour les\n"
+" sources (gz|xz|bzip2|lzma).\n"
+" -i, --diff-ignore[=<regex>] ignorer les différences dans les fichiers "
+"correspondants.\n"
+" à l'expression régulière.\n"
+" -I, --tar-ignore[=<motif>] ignorer ces fichiers en construisant les "
+"archives tar.\n"
+" --source-option=<opt>\n"
+" passer l'option <opt> à dpkg-source.\n"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "missing .buildinfo filename"
+msgstr "nom de fichier .buildinfo manquant"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "passing %s via %s is not supported; please use %s instead"
+msgstr ""
+"passer %s à l’aide de %s n'est pas pris en charge ; veuillez utiliser %s à "
+"la place"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "missing .changes filename"
+msgstr "nom de fichier .changes manquant"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "unknown hook name %s"
+msgstr "nom de point d'ancrage inconnu %s"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "missing hook %s command"
+msgstr "la commande du point d'ancrage %s est manquante"
+
+#: scripts/dpkg-buildpackage.pl scripts/dpkg-genbuildinfo.pl
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid "%s is deprecated; it is without effect"
+msgstr "%s est obsolète ; il est sans effet"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "-s%s is deprecated; always using gpg style interface"
+msgstr "-s%s est obsolète ; l'interface utilisée est toujours de type gpg"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "unknown option or argument %s"
+msgstr "option ou paramètre inconnu %s"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "option %s is only meaningful with option %s"
+msgstr "l'option %s n'a de sens qu'avec l'option %s"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "check-command '%s' not found"
+msgstr "check-command « %s » non trouvé"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "sign-command '%s' not found"
+msgstr "sign-command « %s » non trouvée"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source package"
+msgstr "paquet source"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source version"
+msgstr "version source"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source distribution"
+msgstr "distribution source"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source changed by"
+msgstr "source changé par"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "host architecture"
+msgstr "architecture hôte"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "debian/rules is not executable; fixing that"
+msgstr "debian/rules n'est pas exécutable ; corrigé"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "build dependencies/conflicts unsatisfied; aborting"
+msgstr "dépendances de construction et conflits non satisfaits ; abandon"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "(Use -d flag to override.)"
+msgstr "(Utilisez l'option -d pour forcer.)"
+
+#: scripts/dpkg-buildpackage.pl
+msgid ""
+"building a source package without cleaning up as you asked; it might contain "
+"undesired files"
+msgstr ""
+"création d'un paquet source sans le nettoyer préalablement comme demandé ; "
+"il peut contenir des fichiers non souhaités"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "Press <enter> to start the signing process.\n"
+msgstr "Appuyez sur <Entrée> pour commencer le processus de signature\n"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "not signing UNRELEASED build; use --force-sign to override"
+msgstr ""
+"construction non publiée (UNRELEASED) non signée ; veuillez utiliser --force-"
+"sign pour passer outre"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "unable to determine %s"
+msgstr "impossible de déterminer %s"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "using a gain-root-command while being root"
+msgstr ""
+"utilisation d'une commande pour obtenir les privilèges administrateur en "
+"tant qu'administrateur"
+
+#: scripts/dpkg-buildpackage.pl
+msgid ""
+"fakeroot not found, either install the fakeroot\n"
+"package, specify a command with the -r option, or run this as root"
+msgstr ""
+"fakeroot non trouvé, veuillez soit installer le paquet fakeroot,\n"
+"soit indiquer une commande avec l'option -r ou exécuter cette\n"
+"commande en tant qu'administrateur"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "gain-root-command '%s' not found"
+msgstr "commande pour obtenir les privilèges administrateur « %s » non trouvée"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "disallowed target in %s field keyword \"%s\""
+msgstr "cible non autorisée dans le champ %s mot-clé « %s »"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "%s field keyword \"%s\" is unknown in dpkg namespace"
+msgstr ""
+"le mot-clé « %s » du champ %s est inconnu dans l'espace de noms de dpkg"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "%s field keyword \"%s\" is uppercase; use \"%s\" instead"
+msgstr ""
+"le mot clé « %s » du champ %s est en majuscule ; utilisez « %s » à la place"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "%s field keyword \"%s\" is invalid; use \"%s\" instead"
+msgstr ""
+"le mot clé « %s » du champ %s n’est pas valable ; utilisez « %s » à la place"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "%s field keyword \"%s\" is unknown"
+msgstr "le mot clé « %s » du champ %s est inconnu"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "field %s contains duplicate keyword \"%s\""
+msgstr "le champ %s contient le mot clé dupliqué « %s »"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "%s field contains both global and implementation specific keywords"
+msgstr ""
+"le champ %s contient à la fois des mots-clés globaux et des mots-clés "
+"spécifiques à la mise en œuvre"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "unknown %% substitution in hook: %%%s"
+msgstr "substitution %% inconnue dans le point d'ancrage: %%%s"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid ""
+"short OpenPGP key IDs are broken; please use key fingerprints in %s or %s "
+"instead"
+msgstr ""
+"les identifiants courts des clés OpenPGP ne fonctionnent plus ; veuillez "
+"utiliser les empreintes de clé dans %s ou %s à la place"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid ""
+"long OpenPGP key IDs are strongly discouraged; please use key fingerprints "
+"in %s or %s instead"
+msgstr ""
+"il est fortement déconseillé d'utiliser des identifiants de clé OpenPGP "
+"longs ; veuillez plutôt utiliser les empreintes de clé dans %s ou %s"
+
+#: scripts/dpkg-buildpackage.pl scripts/dpkg-checkbuilddeps.pl
+#: scripts/dpkg-genbuildinfo.pl scripts/dpkg-name.pl scripts/Dpkg/Arch.pm
+#: scripts/Dpkg/IPC.pm scripts/Dpkg/Shlibs.pm
+#, perl-format
+msgid "cannot open %s"
+msgstr "impossible d'ouvrir %s"
+
+#: scripts/dpkg-buildpackage.pl scripts/dpkg-distaddfile.pl
+#: scripts/dpkg-genbuildinfo.pl scripts/dpkg-gencontrol.pl
+#: scripts/Dpkg/Interface/Storable.pm scripts/Dpkg/Source/Package/V2.pm
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot close %s"
+msgstr "impossible de fermer %s"
+
+#: scripts/dpkg-buildpackage.pl scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "cannot move %s to %s"
+msgstr "impossible de déplacer %s vers %s"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "failed to sign %s file: %s"
+msgstr "échec de la signature du fichier %s : %s"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source-only upload: Debian-native package"
+msgstr "envoi de source uniquement : paquet Debian natif"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source-only, diff-only upload (original source NOT included)"
+msgstr ""
+"source uniquement, envoi du fichier de différences uniquement (aucune "
+"inclusion du code source d'origine)"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source-only upload (original source is included)"
+msgstr "envoi du source seulement (inclusion du code source d'origine)"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "binary-only upload (no source included)"
+msgstr "envoi d'un binaire seulement (aucune inclusion de code source)"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "full upload; Debian-native package (full source is included)"
+msgstr "envoi complet ; paquet Debian natif (inclusion du code source complet)"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "binary and diff upload (original source NOT included)"
+msgstr ""
+"envoi d'un binaire et du fichier de différences (aucune inclusion du code "
+"source d'origine)"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "full upload (original source is included)"
+msgstr "envoi complet (inclusion du code source d'origine)"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid ""
+"%s must be updated to support the 'build-arch' and 'build-indep' targets (at "
+"least '%s' seems to be missing)"
+msgstr ""
+"%s doit être mis à jour pour gérer les cibles « build-arch » et « build-"
+"indep » (au moins « %s » semble manquer)"
+
+#: scripts/dpkg-checkbuilddeps.pl
+#, perl-format
+msgid "Usage: %s [<option>...] [<control-file>]"
+msgstr "Utilisation : %s [<option>...] <fichier-contrôle>"
+
+#: scripts/dpkg-checkbuilddeps.pl
+msgid ""
+"Options:\n"
+" -A ignore Build-Depends-Arch and Build-Conflicts-Arch.\n"
+" -B ignore Build-Depends-Indep and Build-Conflicts-Indep.\n"
+" -I ignore built-in build dependencies and conflicts.\n"
+" -d build-deps use given string as build dependencies instead of\n"
+" retrieving them from control file\n"
+" -c build-conf use given string for build conflicts instead of\n"
+" retrieving them from control file\n"
+" -a arch assume given host architecture\n"
+" -P profiles assume given build profiles (comma-separated list)\n"
+" --admindir=<directory>\n"
+" change the administrative directory.\n"
+" -?, --help show this help message.\n"
+" --version show the version."
+msgstr ""
+"Options :\n"
+" -A ignorer Build-Depends-Arch et Build-Conflicts-Arch.\n"
+" -B ignorer Build-Depends-Indep et Build-Conflicts-Indep.\n"
+" -I ignorer les dépendances internes de construction et les "
+"conflits.\n"
+" -d build-deps utiliser la chaîne indiquée comme dépendances de "
+"construction (« build deps ») plutôt que de les récupérer du fichier de "
+"contrôle\n"
+" -c build-conf utiliser la chaîne indiquée comme conflit de construction\n"
+" (« build conflicts ») plutôt que de les récupérer du "
+"fichier control\n"
+" -a arch supposer que l'architecture est celle mentionnée\n"
+" -P profiles supposer que les profils de construction sont ceux "
+"mentionnés\n"
+" --admindir=<répertoire>\n"
+" changer le répertoire d'administration.\n"
+" -?, --help afficher ce message d'aide.\n"
+" --version afficher la version."
+
+#: scripts/dpkg-checkbuilddeps.pl
+msgid ""
+"<control-file> is the control file to process (default: debian/control)."
+msgstr ""
+"<fichier-contrôle> est le fichier de contrôle à traiter (par défaut, debian/"
+"control)."
+
+#: scripts/dpkg-checkbuilddeps.pl scripts/dpkg-shlibdeps.pl
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "cannot parse %s field"
+msgstr "impossible d'analyser le champ %s"
+
+#: scripts/dpkg-checkbuilddeps.pl
+#, perl-format
+msgid "Unmet build dependencies: %s"
+msgstr "Dépendances de construction non satisfaites : %s"
+
+#: scripts/dpkg-checkbuilddeps.pl
+#, perl-format
+msgid "Build conflicts: %s"
+msgstr "Conflits de construction : %s"
+
+#: scripts/dpkg-distaddfile.pl
+#, perl-format
+msgid ""
+"Usage: %s [<option>...] <filename> <section> <priority>\n"
+"\n"
+"Options:\n"
+" -f<files-list-file> write files here instead of debian/files.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+"Syntaxe : %s [<option>...] <fichier> <section> <priorité>\n"
+"\n"
+"Options :\n"
+" -f <fichier_des_fichiers> lister les fichiers dans ce fichier plutôt\n"
+" que debian/files.\n"
+" -?, --help afficher ce message d'aide.\n"
+" --version afficher la version.\n"
+
+#: scripts/dpkg-distaddfile.pl
+msgid "need exactly a filename, section and priority"
+msgstr "il est demandé exactement un fichier, une section et une priorité"
+
+#: scripts/dpkg-distaddfile.pl
+msgid "filename, section and priority may contain no whitespace"
+msgstr "fichier, section et priorité ne peuvent contenir d'espace"
+
+#: scripts/dpkg-distaddfile.pl scripts/dpkg-genbuildinfo.pl
+#: scripts/dpkg-gencontrol.pl scripts/dpkg-mergechangelogs.pl
+#: scripts/Dpkg/Compression/FileHandle.pm scripts/Dpkg/File.pm
+#: scripts/Dpkg/IPC.pm scripts/Dpkg/Interface/Storable.pm
+#: scripts/Dpkg/Source/BinaryFiles.pm scripts/Dpkg/Source/Package.pm
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "cannot write %s"
+msgstr "impossible d'écrire %s"
+
+#: scripts/dpkg-distaddfile.pl scripts/dpkg-genbuildinfo.pl
+#: scripts/dpkg-gencontrol.pl
+msgid "install new files list file"
+msgstr "installation du nouveau fichier de liste des fichiers"
+
+#: scripts/dpkg-genbuildinfo.pl
+msgid ""
+"Options:\n"
+" --build=<type>[,...] specify the build <type>: full, source, binary,\n"
+" any, all (default is 'full').\n"
+" -c<control-file> get control info from this file.\n"
+" -l<changelog-file> get per-version info from this file.\n"
+" -f<files-list-file> get .deb files list from this file.\n"
+" -F<changelog-format> force changelog format.\n"
+" -O[<buildinfo-file>] write to stdout (or <buildinfo-file>).\n"
+" -u<upload-files-dir> directory with files (default is '..').\n"
+" --always-include-kernel always include Build-Kernel-Version.\n"
+" --always-include-path always include Build-Path.\n"
+" --admindir=<directory> change the administrative directory.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+"Options :\n"
+" --build=<type>[,...] spécifier le <type> de construction : "
+"full, source, binary,\n"
+" any, all (la valeur par défaut est "
+"« full »).\n"
+" -c<fichier-contrôle> obtenir des informations de contrôle à partir "
+"de ce fichier.\n"
+" -l<fichier-changelog> obtenir des informations par version "
+"à partir de ce journal de modifications.\n"
+" -f<fichier-des-fichiers> obtenir la liste des fichiers .deb à "
+"partir de ce fichier.\n"
+" -F<format-du-changelog> forcer le format du journal de "
+"modifications.\n"
+" -O[<fichier-info-de-construction>] écrire sur la sortie standard (ou "
+"<fichier-info-de-construction>).\n"
+" -u<repertoire-televersement> répertoire avec les fichiers "
+"(par défaut, '..').\n"
+" --always-include-kernel inclut toujours Build-Kernel-Version.\n"
+" --always-include-path inclut toujours Build-Path.\n"
+" --admindir=<répertoire> changer le répertoire d'administration.\n"
+" -?, --help afficher ce message d'aide.\n"
+" --version afficher la version.\n"
+
+#: scripts/dpkg-genbuildinfo.pl
+msgid "binary build with no binary artifacts found; .buildinfo is meaningless"
+msgstr ""
+"construction binaire sans artefacts binaires trouvés ; .buildinfo n’a pas "
+"d’effet"
+
+#: scripts/dpkg-genbuildinfo.pl
+#, perl-format
+msgid "cannot install output buildinfo file '%s'"
+msgstr "impossible d'installer le fichier buildinfo produit « %s »"
+
+#: scripts/dpkg-genchanges.pl
+msgid ""
+"Options:\n"
+" --build=<type>[,...] specify the build <type>: full, source, binary,\n"
+" any, all (default is 'full').\n"
+" -g source and arch-indep build.\n"
+" -G source and arch-specific build.\n"
+" -b binary-only, no source files.\n"
+" -B binary-only, only arch-specific files.\n"
+" -A binary-only, only arch-indep files.\n"
+" -S source-only, no binary files.\n"
+" -c<control-file> get control info from this file.\n"
+" -l<changelog-file> get per-version info from this file.\n"
+" -f<files-list-file> get .deb files list from this file.\n"
+" -v<since-version> include all changes later than version.\n"
+" -C<changes-description> use change description from this file.\n"
+" -m<maintainer> override control's maintainer value.\n"
+" -e<maintainer> override changelog's maintainer value.\n"
+" -u<upload-files-dir> directory with files (default is '..').\n"
+" -si source includes orig, if new upstream (default).\n"
+" -sa source includes orig, always.\n"
+" -sd source is diff and .dsc only.\n"
+" -q quiet - no informational messages on stderr.\n"
+" -F<changelog-format> force changelog format.\n"
+" -V<name>=<value> set a substitution variable.\n"
+" -T<substvars-file> read variables here, not debian/substvars.\n"
+" -D<field>=<value> override or add a field and value.\n"
+" -U<field> remove a field.\n"
+" -O[<filename>] write to stdout (default) or <filename>.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+"Options :\n"
+" --build=<type>[,...] spécifier le <type> de construction : full, "
+"source, binary,\n"
+" any, all (« full » par défaut).\n"
+" -g source et binaires indépendants de "
+"l'architecture.\n"
+" -G source et binaires dépendants de l'architecture.\n"
+" -b binaires uniquement, pas de fichiers source.\n"
+" -B binaires dépendants de l'architecture "
+"uniquement.\n"
+" -A binaires indépendants de l'architecture "
+"uniquement.\n"
+" -S source uniquement.\n"
+" -c<fichier-contrôle> obtenir les informations de contrôle dans ce "
+"fichier.\n"
+" -l<fichier-changelog> obtenir les informations de version dans ce "
+"fichier.\n"
+" -f<fichier-liste-deb> obtenir la liste des fichiers .deb dans ce "
+"fichier.\n"
+" -v<depuis-version> inclure toutes les modifications depuis cette "
+"version.\n"
+" -C<changesdescription> utiliser la description des changements dans ce\n"
+" fichier.\n"
+" -m<responsable> remplacer la valeur du champ « Maintainer » "
+"défini\n"
+" dans le fichier control.\n"
+" -e<responsable> remplacer le mainteneur défini dans le\n"
+" fichier changelog.\n"
+" -u<uploadfilesdir> répertoire avec fichiers (par défaut : « .. »).\n"
+" -si inclure un fichier .orig avec les sources en cas "
+"de nouvelle version amont (défaut).\n"
+" -sa inclure un fichier .orig avec les sources.\n"
+" -sd inclure seulement un diff et un .dsc dans les "
+"sources.\n"
+" -q silence - pas d'information sur stderr.\n"
+" -F<format-changelog> modifier le format du changelog.\n"
+" -V<nom>=<valeur> définir une variable de substitution.\n"
+" -T<varlistfile> lire les variables de substitution dans ce "
+"fichier,\n"
+" pas dans debian/substvars.\n"
+" -D<champ>=<valeur> remplacer ou ajouter une paire champ / valeur.\n"
+" -U<champ> supprimer un champ.\n"
+" -O[<nom-fichier>] écrire sur la sortie standard (par défaut) ou\n"
+" dans <nom-fichier>.\n"
+" -?, --help afficher ce message d'aide.\n"
+" --version afficher la version.\n"
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "the current version (%s) is earlier than the previous one (%s)"
+msgstr "la version actuelle (%s) est inférieure à la version précédente (%s)"
+
+#: scripts/dpkg-genchanges.pl
+msgid "missing Section for source files"
+msgstr "il manque la section des fichiers source"
+
+#: scripts/dpkg-genchanges.pl
+msgid "missing Priority for source files"
+msgstr "il manque la priorité des fichiers source"
+
+#: scripts/dpkg-genchanges.pl scripts/Dpkg/Vendor.pm
+#, perl-format
+msgid "%s is empty"
+msgstr "%s est vide"
+
+#: scripts/dpkg-genchanges.pl
+msgid "not including original source code in upload"
+msgstr "pas d'inclusion du code source original dans l'envoi (« upload »)"
+
+#: scripts/dpkg-genchanges.pl
+msgid "ignoring -sd option for native Debian package"
+msgstr "option -sd ignorée pour les paquets Debian pure souche"
+
+#: scripts/dpkg-genchanges.pl
+msgid "including full source code in upload"
+msgstr "inclusion du code source original dans l'envoi (« upload »)"
+
+#: scripts/dpkg-genchanges.pl
+msgid ""
+"binary-only arch-specific upload (source code and arch-indep packages not "
+"included)"
+msgstr ""
+"envoi de binaires dépendants de l'architecture (le code source et les "
+"paquets indépendants de l'architecture ne sont pas inclus)."
+
+#: scripts/dpkg-genchanges.pl
+msgid ""
+"binary-only arch-indep upload (source code and arch-specific packages not "
+"included)"
+msgstr ""
+"envoi de binaires indépendants de l'architecture (le code source et les "
+"paquets dépendants d'une architecture ne sont pas inclus)."
+
+#: scripts/dpkg-genchanges.pl
+msgid "binary-only upload (no source code included)"
+msgstr "envoi des binaires seulement (le code source n'est pas inclus)"
+
+#: scripts/dpkg-genchanges.pl
+msgid "binary build with no binary artifacts found; cannot distribute"
+msgstr "construction de binaires sans binaires trouvés ; impossible d'envoyer"
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "package %s in control file but not in files list"
+msgstr ""
+"paquet %s dans le fichier de contrôle mais pas dans le fichier de liste des "
+"fichiers"
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "package %s listed in files list but not in control info"
+msgstr ""
+"paquet %s listé dans le fichier de liste des fichiers mais pas dans le "
+"fichier info"
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "missing Section for binary package %s; using '-'"
+msgstr "la section du paquet binaire %s manque ; utilisation de « - »"
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "package %s has section %s in control file but %s in files list"
+msgstr ""
+"le paquet %s a une section %s dans le fichier de contrôle mais une section "
+"%s dans le fichier de liste des fichiers"
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "missing Priority for binary package %s; using '-'"
+msgstr ""
+"le champ « Priority » du paquet binaire %s manque ; utilisation de « - »"
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "package %s has priority %s in control file but %s in files list"
+msgstr ""
+"le paquet %s a une priorité %s dans le fichier de contrôle mais une priorité "
+"%s dans le fichier de liste des fichiers"
+
+#: scripts/dpkg-genchanges.pl scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "missing information for critical output field %s"
+msgstr "il manque l'information pour l'important champ de sortie %s"
+
+#: scripts/dpkg-genchanges.pl scripts/dpkg-gencontrol.pl
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "missing information for output field %s"
+msgstr "information manquante pour le champ de sortie %s"
+
+#: scripts/dpkg-gencontrol.pl
+msgid ""
+"Options:\n"
+" -p<package> print control file for package.\n"
+" -c<control-file> get control info from this file.\n"
+" -l<changelog-file> get per-version info from this file.\n"
+" -F<changelog-format> force changelog format.\n"
+" -v<force-version> set version of binary package.\n"
+" -f<files-list-file> write files here instead of debian/files.\n"
+" -P<package-build-dir> temporary build directory instead of debian/tmp.\n"
+" -n<filename> assume the package filename will be <filename>.\n"
+" -O[<file>] write to stdout (or <file>), not .../DEBIAN/"
+"control.\n"
+" -is, -ip, -isp, -ips deprecated, ignored for compatibility.\n"
+" -D<field>=<value> override or add a field and value.\n"
+" -U<field> remove a field.\n"
+" -V<name>=<value> set a substitution variable.\n"
+" -T<substvars-file> read variables here, not debian/substvars.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+"Options :\n"
+" -p<paquet> afficher le fichier de contrôle du paquet.\n"
+" -c<fichier-contrôle> obtenir les informations de contrôle dans ce "
+"fichier.\n"
+" -l<fichier-changelog> obtenir les informations par version de ce "
+"fichier.\n"
+" -F<format-changelog> forcer le format de changelog.\n"
+" -v<forceversion> définir la version du paquet binaire.\n"
+" -f<fichier-des-fichiers> écrire la liste des fichiers dans ce fichier, "
+"plutôt que dans debian/files.\n"
+" -P<packagebuilddir> répertoire temporaire de construction, au lieu "
+"de debian/tmp.\n"
+" -n<fichier> supposer que le nom du paquet sera <fichier>.\n"
+" -O[<fichier>] écrire sur la sortie standard (ou <fichier>), "
+"pas .../DEBIAN/control.\n"
+" -is, -ip, -isp, -ips options déconseillées, ignorées pour "
+"compatibilité.\n"
+" -D<champ>=<valeur> remplacer ou ajouter une paire champ et "
+"valeur.\n"
+" -U<champ> supprimer un champ.\n"
+" -V<nom>=<valeur> définir une substitution de variable.\n"
+" -T<fichier-substvars> lire les variables dans ce fichier, pas dans "
+"debian/substvars.\n"
+" -?, --help afficher ce message d'aide.\n"
+" --version afficher la version.\n"
+
+#: scripts/dpkg-gencontrol.pl scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "illegal package name '%s': %s"
+msgstr "nom de paquet « %s » non autorisé : %s"
+
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid "package %s not in control info"
+msgstr "le paquet %s n'est pas dans le fichier de contrôle"
+
+#: scripts/dpkg-gencontrol.pl scripts/dpkg-gensymbols.pl
+msgid "no package stanza found in control info"
+msgstr ""
+"aucune instance de paquet n'a été trouvée dans les informations de contrôle"
+
+#: scripts/dpkg-gencontrol.pl scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "must specify package since control info has many (%s)"
+msgstr ""
+"il faut indiquer un paquet car le fichier de contrôle contient plusieurs (%s)"
+
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid "package %s: "
+msgstr "paquet %s : "
+
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid ""
+"current host architecture '%s' does not appear in package '%s' architecture "
+"list (%s)"
+msgstr ""
+"l'architecture de l'hôte actuel « %s » n'apparaît pas dans la liste des "
+"architectures du paquet « %s » (%s)"
+
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid "%s field of package %s: "
+msgstr "champ %s du paquet %s : "
+
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid "parsing package '%s' %s field: %s"
+msgstr "analyse du champ %s du paquet « %s » : %s"
+
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid ""
+"the %s field contains an arch-specific dependency but the package '%s' is "
+"architecture all"
+msgstr ""
+"le champ %s contient une dépendance spécifique à l'architecture mais le "
+"paquet « %s » est pour toute architecture"
+
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid "%s package '%s' with udeb specific field %s"
+msgstr "%s paquet « %s » avec champ spécifique udeb %s"
+
+#: scripts/dpkg-gencontrol.pl scripts/Dpkg/Source/Package.pm
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot stat %s"
+msgstr "stat de %s impossible"
+
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid "cannot install output control file '%s'"
+msgstr "impossible d'installer le nouveau fichier de contrôle de sortie %s"
+
+#: scripts/dpkg-gensymbols.pl
+msgid ""
+"Options:\n"
+" -l<library-path> add directory to private shared library search "
+"list.\n"
+" -p<package> generate symbols file for package.\n"
+" -P<package-build-dir> temporary build directory instead of debian/tmp.\n"
+" -e<library> explicitly list libraries to scan.\n"
+" -v<version> version of the packages (defaults to\n"
+" version extracted from debian/changelog).\n"
+" -c<level> compare generated symbols file with the "
+"reference\n"
+" template in the debian directory and fail if\n"
+" difference is too important; level goes from 0 "
+"for\n"
+" no check, to 4 for all checks (default level is "
+"1).\n"
+" -q keep quiet and never emit any warnings or\n"
+" generate a diff between generated symbols\n"
+" file and the reference template.\n"
+" -I<file> force usage of <file> as reference symbols\n"
+" file instead of the default file.\n"
+" -O[<file>] write to stdout (or <file>), not .../DEBIAN/"
+"symbols.\n"
+" -t write in template mode (tags are not\n"
+" processed and included in output).\n"
+" -V verbose output; write deprecated symbols and "
+"pattern\n"
+" matching symbols as comments (in template mode "
+"only).\n"
+" -a<arch> assume <arch> as host architecture when "
+"processing\n"
+" symbol files.\n"
+" -d display debug information during work.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+"Options :\n"
+" -l<chemin-bibliotheque> ajouter un répertoire à la liste de "
+"recherche\n"
+" des bibliothèques partagées privées.\n"
+" -p<paquet> générer le fichier des symboles pour ce paquet.\n"
+" -P<rep-constr-paquet> répertoire de construction temporaire au lieu "
+"de\n"
+" debian/tmp.\n"
+" -e<bibliotheque> afficher explicitement les bibliothèques à\n"
+" rechercher.\n"
+" -v<version> version des paquets (par défaut, la version "
+"extraite de\n"
+" debian/changelog).\n"
+" -c<niveau> comparer les symboles générés avec le fichier de "
+"référence\n"
+" dans le répertoire debian.\n"
+" échouer si les différences sont trop importantes\n"
+" (le niveau va de 0 pour aucun contrôle à 4 pour "
+"tous\n"
+" les contrôles). Par défaut, le niveau de contrôle "
+"est 1.\n"
+" -q rester silencieux et n'afficher aucun "
+"avertissement ni\n"
+" créer de fichier de différences entre les "
+"symboles\n"
+" créés et le canevas de référence.\n"
+" -I<fichier> forcer l'utilisation de <fichier> comme fichier "
+"de symboles\n"
+" de référence au lieu du fichier par défaut.\n"
+" -O[<fichier>] écrire sur la sortie standard (ou <fichier>) au "
+"lieu de .../DEBIAN/symbols.\n"
+" -t écrire en mode modèle (template). Les étiquettes\n"
+" ne sont pas traitées et sont incluses dans la "
+"sortie.\n"
+" -V mode bavard. N'afficher les symboles obsolètes\n"
+" et les symboles correspondant au motif que sous "
+"forme\n"
+" de commentaires (uniquement en mode "
+"« canevas »). \n"
+" -a<arch> utilise <arch> comme architecture pendant le\n"
+" traitement\n"
+" -d afficher les informations de déboguage pendant le "
+"traitement.\n"
+" -?, --help afficher ce message d'aide.\n"
+" --version afficher la version.\n"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "pattern '%s' did not match any file"
+msgstr "le motif « %s » ne correspond à aucun fichier"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "can't read directory %s: %s"
+msgstr "lecture du répertoire %s impossible : %s"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "Dpkg::Shlibs::Objdump couldn't parse %s\n"
+msgstr "Dpkg::Shlibs::Objdump ne peut analyser %s\n"
+
+#: scripts/dpkg-gensymbols.pl
+msgid "<standard output>"
+msgstr "<sortie standard>"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "new libraries appeared in the symbols file: %s"
+msgstr "nouvelles bibliothèques apparues dans le fichier des symboles : %s"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "some libraries disappeared in the symbols file: %s"
+msgstr "certaines bibliothèques ont disparu du fichier des symboles : %s"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "some new symbols appeared in the symbols file: %s"
+msgstr ""
+"certains nouveaux symboles sont apparus dans le fichier des symboles : %s"
+
+#: scripts/dpkg-gensymbols.pl
+msgid "see diff output below"
+msgstr "veuillez consulter le fichier de différences ci-dessous"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "some symbols or patterns disappeared in the symbols file: %s"
+msgstr "certains symboles ou motifs ont disparu du fichier des symboles : %s"
+
+#: scripts/dpkg-gensymbols.pl
+msgid "the generated symbols file is empty"
+msgstr "le fichier des symboles généré est vide"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "%s doesn't match completely %s"
+msgstr "%s ne correspond pas complètement à %s"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "no debian/symbols file used as basis for generating %s"
+msgstr "pas de fichier debian/symbols utilisé comme base pour générer %s"
+
+#: scripts/dpkg-mergechangelogs.pl
+msgid ""
+"This is free software; see the GNU General Public License version 2 or\n"
+"later for copying conditions. There is NO warranty.\n"
+msgstr ""
+"Ce logiciel est un logiciel libre. Voyez la licence « GNU General Public "
+"License »\n"
+"dans la version 2 ou une version supérieure pour les conditions de copie. Il "
+"n'y a PAS de garantie.\n"
+
+#: scripts/dpkg-mergechangelogs.pl
+#, perl-format
+msgid ""
+"Usage: %s [<option>...] <old> <new-a> <new-b> [<out>]\n"
+"\n"
+"Options:\n"
+" -m, --merge-prereleases merge pre-releases together, ignores everything\n"
+" after the last '~' in the version.\n"
+" --merge-unreleased merge UNRELEASED entries together, ignoring "
+"their\n"
+" version numbers.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+"Syntaxe : %s [<option>...] <ancien> <nouveau-a> <nouveau-b> [<sortie>]\n"
+"\n"
+"Options :\n"
+" -m, --merge-prereleases fusionner les versions préliminaires en\n"
+" ignorant ce qui suit le dernier caractère\n"
+" « ~ » dans la version.\n"
+" --merge-unreleased fusionner les entrées UNRELEASED\n"
+" en ignorant leur numéro de version.\n"
+" -?, --help, -? afficher ce message d'aide.\n"
+" --version afficher la version.\n"
+
+#: scripts/dpkg-mergechangelogs.pl
+msgid "needs at least three arguments"
+msgstr "demande au moins trois paramètres"
+
+#: scripts/dpkg-mergechangelogs.pl
+msgid "file arguments need to exist"
+msgstr "les paramètres du fichier ont besoin d'exister"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "Usage: %s [<option>...] <file>...\n"
+msgstr "Utilisation : %s [<option>...] <fichier>...\n"
+
+#: scripts/dpkg-name.pl
+msgid ""
+"\n"
+"Options:\n"
+" -a, --no-architecture no architecture part in filename.\n"
+" -o, --overwrite overwrite if file exists.\n"
+" -k, --symlink don't create a new file, but a symlink.\n"
+" -s, --subdir [dir] move file into subdirectory (use with care).\n"
+" -c, --create-dir create target directory if not there (use with "
+"care).\n"
+" -?, --help show this help message.\n"
+" -v, --version show the version.\n"
+"\n"
+"file.deb changes to <package>_<version>_<architecture>.<package_type>\n"
+"according to the 'underscores convention'.\n"
+msgstr ""
+"\n"
+"Options:\n"
+" -a, --no-architecture pas de partie architecture dans le nom de "
+"fichier.\n"
+" -o, --overwrite écraser si le fichier existe.\n"
+" -k, --symlink ne pas créer de nouveau fichier mais un lien "
+"symbolique.\n"
+" -s, --subdir [dir] déplacer le fichier dans u sous-répertoire "
+"(utiliser avec précaution).\n"
+" -c, --create-dir créer le répertoire cible si absent (utiliser "
+"avec précaution).\n"
+" -?, --help afficher ce message d'aide.\n"
+" -v, --version afficher la version.\n"
+"\n"
+"modification de fichier.deb en <paquet>_<version>_<architecture>."
+"<type_paquet>\n"
+"selon la « convention des 'underscores' ».\n"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "cannot find '%s'"
+msgstr "impossible de trouver %s"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "binary control file %s"
+msgstr "fichier de contrôle binaire %s"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "assuming architecture '%s' for '%s'"
+msgstr "architecture supposée '%s' pour '%s'"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "bad package control information for '%s'"
+msgstr "informations de contrôle incorrectes pour « %s »"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "assuming section '%s' for '%s'"
+msgstr "section « %s » supposée pour « %s »"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "no Package field found in '%s', skipping package"
+msgstr "pas de champ Package trouvé dans « %s », paquet ignoré"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "created directory '%s'"
+msgstr "répertoire « %s » créé"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "cannot create directory '%s'"
+msgstr "impossible de créer le répertoire « %s »"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "no such directory '%s', try --create-dir (-c) option"
+msgstr "répertoire « %s » inexistant, essayez l'option --create-dir (-c)"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "skipping '%s'"
+msgstr "« %s » ignoré"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "cannot move '%s' to existing file"
+msgstr "impossible de déplacer « %s » vers un fichier existant"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "moved '%s' to '%s'"
+msgstr "déplacement de « %s » en « %s »"
+
+#: scripts/dpkg-name.pl
+msgid "mkdir can be used to create directory"
+msgstr "impossible d'utiliser mkdir pour créer le répertoire"
+
+#: scripts/dpkg-name.pl
+msgid "need at least a filename"
+msgstr "au moins un nom de fichier est nécessaire"
+
+#: scripts/dpkg-parsechangelog.pl
+msgid ""
+"Options:\n"
+" -l, --file <changelog-file>\n"
+" get per-version info from this file.\n"
+" -F <changelog-format> force changelog format.\n"
+" -S, --show-field <field> show the values for <field>.\n"
+" -?, --help show this help message.\n"
+" --version show the version."
+msgstr ""
+"Options :\n"
+" -l, --file <fichier-changelog>\n"
+" obtenir des informations par version à partir de "
+"ce fichier.\n"
+" -F <format-changelog> forcer le format du journal des modifications.\n"
+" -S, --show-field <champ> afficher les valeurs de <champ>.\n"
+" -?, --help afficher ce message d'aide.\n"
+" --version afficher la version."
+
+#: scripts/dpkg-parsechangelog.pl
+msgid ""
+"Parser options:\n"
+" --format <output-format>\n"
+" set output format (defaults to 'dpkg').\n"
+" --reverse include all changes in reverse order.\n"
+" --all include all changes.\n"
+" -s, --since <version> include all changes later than <version>.\n"
+" -v <version> ditto.\n"
+" -u, --until <version> include all changes earlier than <version>.\n"
+" -f, --from <version> include all changes equal or later than "
+"<version>.\n"
+" -t, --to <version> include all changes up to or equal than "
+"<version>.\n"
+" -c, --count <number> include <number> entries from the top (or tail\n"
+" if <number> is lower than 0).\n"
+" -n <number> ditto.\n"
+" -o, --offset <number> change starting point for --count, counted from\n"
+" the top (or tail if <number> is lower than 0).\n"
+msgstr ""
+"Options de l'analyseur :\n"
+" --format <format-sortie>\n"
+" définir le format de sortie (« dpkg » par "
+"défaut).\n"
+" --reverse inclure tous les changements dans l’ordre "
+"inverse.\n"
+" --all inclure tous les "
+"changements. \n"
+" -s, --since<version> inclure toutes les modifications depuis "
+"<version>.\n"
+" -v <version> idem.\n"
+" -u, --until <version> inclure toutes les modifications antérieures "
+"à <version>.\n"
+" -f, --from <version> inclure toutes les modifications depuis "
+"<version> incluse.\n"
+" -t, --to <version> inclure toutes les modifications antérieures "
+"à <version> incluse.\n"
+" -c, --count <nombre> inclure <nombre> entrées depuis le début\n"
+" (ou bien les dernières si <nombre> est "
+"inférieur à 0).\n"
+" -n <nombre> idem. \n"
+" -o, --offset <number> modifier le point de démarrage de --count,\n"
+" à partir du début (ou de la fin si <nombre> "
+"est inférieur à 0).\n"
+
+#: scripts/dpkg-parsechangelog.pl
+msgid "-L is obsolete; it is without effect"
+msgstr "-L est obsolète ; ce paramètre est sans effet"
+
+#: scripts/dpkg-parsechangelog.pl
+msgid "bad changelog format name"
+msgstr "mauvais format de nom de fichier de changements"
+
+#: scripts/dpkg-parsechangelog.pl
+msgid "missing changelog filename"
+msgstr "nom de fichier de changements manquant"
+
+#: scripts/dpkg-parsechangelog.pl
+msgid "takes no non-option arguments"
+msgstr "ne prend pas de paramètre sans option"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid ""
+"Usage: %s [<option>...] <binary-path> [<override-file> [<path-prefix>]] > "
+"Packages\n"
+"\n"
+"Options:\n"
+" -t, --type <type> scan for <type> packages (default is 'deb').\n"
+" -a, --arch <arch> architecture to scan for.\n"
+" -h, --hash <hash-list> only generate hashes for the specified list.\n"
+" -m, --multiversion allow multiple versions of a single package.\n"
+" -e, --extra-override <file>\n"
+" use extra override file.\n"
+" -M, --medium <medium> add X-Medium field for dselect media access "
+"method\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+"Syntaxe : %s [<option> ...] <rep-de-binaires> [<fichier-override> [<préfixe-"
+"de-chemin>]] >\n"
+"Packages\n"
+"\n"
+"Options :\n"
+" -t, --type <type> rechercher les paquets de <type> (« deb » par "
+"défaut).\n"
+" -a, --arch <arch> architecture à rechercher.\n"
+" -h, --hash <liste-hachage>\n"
+" générer les hachages uniquement pour la liste "
+"spécifiée. \n"
+" -m, --multiversion permettre plusieurs versions d'un même paquet.\n"
+" -e, --extra-override <fichier>\n"
+" utiliser un fichier d'« override » supplémentaire.\n"
+" -M, --medium <medium> ajouter le champ X-Medium pour la méthode d'accès\n"
+" multicd de dselect.\n"
+" -?, --help afficher ce message d'aide.\n"
+" --version afficher la version.\n"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid " %s (package says %s, not %s)"
+msgstr " %s (le paquet dit %s, pas %s)"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "unconditional maintainer override for %s"
+msgstr "annulation inconditionnelle du responsable pour %s"
+
+#: scripts/dpkg-scanpackages.pl scripts/dpkg-shlibdeps.pl scripts/Dpkg/IPC.pm
+#: scripts/Dpkg/Shlibs/Objdump.pm
+#, perl-format
+msgid "cannot fork for %s"
+msgstr "fork impossible pour %s"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "couldn't parse control information from %s"
+msgstr "impossible d'analyser les informations de contrôle de %s"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "'dpkg-deb -I %s control' exited with %d, skipping package"
+msgstr "« dpkg-deb -I %s control », sortie avec %d, paquet sauté"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "no Package field in control file of %s"
+msgstr "pas de champ Package dans le fichier de contrôle de %s"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid ""
+"package %s (filename %s) is repeat but newer version; used that one and "
+"ignored data from %s!"
+msgstr ""
+"le paquet %s (nom %s) est répété, mais la version est plus récente ; cette "
+"dernière sera utilisée et les données de %s seront ignorées !"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid ""
+"package %s (filename %s) is repeat; ignored that one and using data from %s!"
+msgstr ""
+"le paquet %s (nom %s) est répété ; celui-ci a été ignoré et les données de "
+"%s ont été utilisées !"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "package %s (filename %s) has Filename field!"
+msgstr "le paquet %s (nom %s) a un champ Filename !"
+
+#: scripts/dpkg-scanpackages.pl scripts/dpkg-scansources.pl
+msgid "one to three arguments expected"
+msgstr "de un à trois paramètres sont attendus"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "unsupported checksum '%s'"
+msgstr "somme de contrôle non prise en charge « %s »"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "binary path %s not found"
+msgstr "chemin du binaire %s non trouvé"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "override file %s not found"
+msgstr "fichier override %s non trouvé"
+
+#: scripts/dpkg-scanpackages.pl
+msgid "failed when writing stdout"
+msgstr "échec de l'écriture sur la sortie standard"
+
+#: scripts/dpkg-scanpackages.pl
+msgid "couldn't close stdout"
+msgstr "impossible de fermer la sortie standard"
+
+#: scripts/dpkg-scanpackages.pl
+msgid "Packages with multiple instances but no --multiversion specified:"
+msgstr ""
+"Paquets avec plusieurs instances mais --multiversion n’est pas spécifié :"
+
+#: scripts/dpkg-scanpackages.pl
+msgid "Packages in override file with incorrect old maintainer value:"
+msgstr ""
+"Paquets dans le fichier d'override avec valeur incorrecte pour l'ancien "
+"responsable :"
+
+#: scripts/dpkg-scanpackages.pl
+msgid "Packages specifying same maintainer as override file:"
+msgstr "Paquets indiquant le même responsable que le fichier d'override :"
+
+#: scripts/dpkg-scanpackages.pl
+msgid "Packages in archive but missing from override file:"
+msgstr "Paquets dans l'archive mais pas dans le fichier d'override :"
+
+#: scripts/dpkg-scanpackages.pl
+msgid "Packages in override file but not in archive:"
+msgstr "Paquets dans le fichier d'override mais pas dans l'archive :"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "Wrote %s entries to output Packages file."
+msgstr "%s entrées écrites dans le fichier Packages."
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid ""
+"Usage: %s [<option>...] <binary-path> [<override-file> [<path-prefix>]] > "
+"Sources\n"
+"\n"
+"Options:\n"
+" -n, --no-sort don't sort by package before outputting.\n"
+" -e, --extra-override <file>\n"
+" use extra override file.\n"
+" -s, --source-override <file>\n"
+" use file for additional source overrides, "
+"default\n"
+" is regular override file with .src appended.\n"
+" --debug turn debugging on.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+"\n"
+"See the man page for the full documentation.\n"
+msgstr ""
+"Syntaxe : %s [<option>...] <rep-de-binaires> <fichier-d'override> [<chemin-à-"
+"préfixer>] >\n"
+"Sources\n"
+"\n"
+"Options :\n"
+" -n, --no-sort ne pas trier par paquet avant affichage\n"
+" -e, --extra-override <fichier>\n"
+" utiliser un fichier supplémentaire d'override.\n"
+" -s, --source-override <fichier>\n"
+" utiliser fichier pour d'autres annulations,\n"
+" par défaut c'est le fichier d'override normal\n"
+" qui est utilisé.\n"
+" --debug activer le débogage.\n"
+" -?, --help afficher ce message d'aide.\n"
+" --version afficher la version.\n"
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid "invalid override entry at line %d (%d fields)"
+msgstr "entrée invalide, ligne %d (champs %d)"
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid "ignoring duplicate override entry for %s at line %d"
+msgstr "entrée en double %s ignorée, ligne %d"
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid "ignoring override entry for %s, invalid priority %s"
+msgstr "entrée en double %s ignorée, priorité %s non valable"
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid "invalid source override entry at line %d (%d fields)"
+msgstr ""
+"entrée non valable dans le fichier d'override pour les sources, ligne %d "
+"(champs %d)"
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid "ignoring duplicate source override entry for %s at line %d"
+msgstr ""
+"entrée en double %s ignorée dans le fichier d'override pour les sources, "
+"ligne %d"
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid "no binary packages specified in %s"
+msgstr "pas de paquet binaire indiqué dans %s"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "administrative directory '%s' does not exist"
+msgstr "répertoire d'administration %s n'existe pas"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "unrecognized dependency field '%s'"
+msgstr "champ de dépendance non reconnu « %s »"
+
+#: scripts/dpkg-shlibdeps.pl
+msgid "need at least one executable"
+msgstr "au moins un exécutable est nécessaire"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid ""
+"cannot find library %s needed by %s (ELF format: '%s' abi: '%s'; RPATH: '%s')"
+msgstr ""
+"impossible de trouver la bibliothèque %s requise par %s (format ELF : « %s » "
+"abi_: « %s » ; RPATH : « %s »)"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "%s has an unexpected SONAME (%s)"
+msgstr "%s utilise un SONAME inattendu (%s)"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid ""
+"no dependency information found for %s (used by %s)\n"
+"Hint: check if the library actually comes from a package."
+msgstr ""
+"pas d'information de dépendance trouvée pour %s (utilisé par %s)\n"
+"Indication: vérifiez que la bibliothèque provienne bien d'un paquet."
+
+#: scripts/dpkg-shlibdeps.pl
+msgid ""
+"binaries to analyze should already be installed in their package's directory"
+msgstr ""
+"les binaires à analyser devraient déjà être présents dans le répertoire de "
+"leur paquet"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "symbol %s used by %s found in none of the libraries"
+msgstr "symbole %s utilisé par %s non trouvé dans les bibliothèques"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid ""
+"%s contains an unresolvable reference to symbol %s: it's probably a plugin"
+msgstr ""
+"%s contient une référence au symbole %s qui ne peut être résolue : il peut "
+"s'agir d'un greffon (« plugin »)"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "%d similar warning has been skipped (use -v to see it)"
+msgid_plural ""
+"%d other similar warnings have been skipped (use -v to see them all)"
+msgstr[0] ""
+"%d autre avertissement semblable a été sauté (utiliser -v pour les voir tous)"
+msgstr[1] ""
+"%d autres avertissements semblables ont été sautés (utiliser -v pour les "
+"voir tous)."
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid ""
+"%s should not be linked against %s (it uses none of the library's symbols)"
+msgstr ""
+"%s ne devrait pas être lié avec %s (il n'utilise aucun des symboles de la "
+"bibliothèque)"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid ""
+"package could avoid a useless dependency if %s was not linked against %s (it "
+"uses none of the library's symbols)"
+msgid_plural ""
+"package could avoid a useless dependency if %s were not linked against %s "
+"(they use none of the library's symbols)"
+msgstr[0] ""
+"la dépendance pourrait être évitée si « %s » n'y était pas lié avec %s sans "
+"nécessité (il n'utilise aucun des symboles de la bibliothèque)"
+msgstr[1] ""
+"la dépendance pourrait être évitée si « %s » n'y étaient pas lié avec %s "
+"sans nécessité (ils n'utilisent aucun des symboles de la bibliothèque)."
+
+#: scripts/dpkg-shlibdeps.pl
+msgid ""
+"Note: libraries are not searched in other binary packages that do not have "
+"any shlibs or symbols file.\n"
+"To help dpkg-shlibdeps find private libraries, you might need to use -l."
+msgstr ""
+"Note : les bibliothèques ne sont pas recherchées dans d'autres paquets "
+"binaires qui n'ont pas de fichier shlibs ou de fichier de symboles.\n"
+"Pour aider dpkg-shlibdeps à trouver des bibliothèques privées, vous pourriez "
+"avoir besoin d'utiliser -l."
+
+#: scripts/dpkg-shlibdeps.pl
+msgid "cannot continue due to the error above"
+msgid_plural "cannot continue due to the errors listed above"
+msgstr[0] "impossible de continuer à causer de l'erreur ci-dessus"
+msgstr[1] "impossible de continuer à cause des erreurs ci-dessus"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "invalid dependency got generated: %s"
+msgstr "une dépendance non valable a été créée : %s"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "install new varlist file '%s'"
+msgstr "installation du nouveau fichier varlist %s"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "Usage: %s [<option>...] <executable>|-e<executable> [<option>...]"
+msgstr "Usage: %s [<option>...] <exécutable>|-e<exécutable> [<option>...]"
+
+#: scripts/dpkg-shlibdeps.pl
+msgid ""
+"Positional options (order is significant):\n"
+" <executable> include dependencies for <executable>,\n"
+" -e<executable> (use -e if <executable> starts with '-')\n"
+" -d<dependency-field> next executable(s) set shlibs:<dependency-field>."
+msgstr ""
+"Options de positionnement (l'ordre est significatif) :\n"
+" <exécutable> inclure les dépendances pour <executable>,\n"
+" -e<exécutable> (utiliser -e if <exécutable> commence par « - »)\n"
+" -d<champ-dépendance> le prochain exécutable positionne shlibs:<champ-"
+"dépendance>."
+
+#: scripts/dpkg-shlibdeps.pl
+msgid ""
+"Options:\n"
+" -l<library-dir> add directory to private shared library search "
+"list.\n"
+" -p<varname-prefix> set <varname-prefix>:* instead of shlibs:*.\n"
+" -O[<file>] write variable settings to stdout (or <file>).\n"
+" -L<local-shlibs-file> shlibs override file, not debian/shlibs.local.\n"
+" -T<substvars-file> update variables here, not debian/substvars.\n"
+" -t<type> set package type (default is deb).\n"
+" -x<package> exclude package from the generated dependencies.\n"
+" -S<package-build-dir> search needed libraries in the given\n"
+" package build directory first.\n"
+" -I<package-build-dir> ignore needed libraries, shlibs and symbols "
+"files\n"
+" in the given build directory.\n"
+" -v enable verbose mode (can be used multiple "
+"times).\n"
+" --ignore-missing-info don't fail if dependency information can't be "
+"found.\n"
+" --warnings=<value> define set of active warnings (see manual page).\n"
+" --admindir=<directory> change the administrative directory.\n"
+" -?, --help show this help message.\n"
+" --version show the version."
+msgstr ""
+"Options :\n"
+" -l<rep-biblio> ajouter le répertoire à la recherche de la "
+"bibliothèque partagée privée.\n"
+" -p<varnameprefix> définir <varnameprefix>:* au lieu de shlibs:"
+"*.\n"
+" -O[<fichier>] écrire les paramètre de la variable sur la "
+"sortie standard (ou <fichier>).\n"
+" -L<fichier-shlibs-local> fichier d'override pour shlibs, pas debian/"
+"shlibs.local.\n"
+" -T<fichier-substvars> mettre à jour les variables ici, pas debian/"
+"substvars.\n"
+" -t<type> définir le type de paquet (.deb par défaut).\n"
+" -x<paquet> exclure le paquet des dépendances générées.\n"
+" -S<paquet-build-dir> rechercher les bibliothèques nécessaires\n"
+" dans le répertoire de construction indiqué\n"
+" en premier lieu.\n"
+" -v activer le mode bavard (peut être utilisé\n"
+" plusieurs fois).\n"
+" --ignore-missing-info ne pas échouer si les informations de\n"
+" dépendance ne sont pas trouvées.\n"
+" --warnings=<valeur> définir le jeu d'avertissements actifs\n"
+" (voir la page de manuel).\n"
+" --admindir=<répertoire> changer de répertoire d'administration.\n"
+" -?, --help afficher ce message d'aide.\n"
+" --version afficher la version."
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid ""
+"Dependency fields recognized are:\n"
+" %s\n"
+msgstr ""
+"Champs de dépendance reconnus :\n"
+" %s\n"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "can't extract name and version from library name '%s'"
+msgstr ""
+"impossible d'extraire le nom et la version du nom de la bibliothèque « %s »"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "unable to open shared libs info file '%s'"
+msgstr ""
+"impossible d'ouvrir le fichier d'info sur les bibliothèques partagées %s"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "shared libs info file '%s' line %d: bad line '%s'"
+msgstr ""
+"fichier info sur les bibliothèques partagées « %s », ligne %d : ligne mal "
+"formée « %s »"
+
+#: scripts/dpkg-shlibdeps.pl scripts/Dpkg/Changelog/Parse.pm
+#: scripts/Dpkg/Checksums.pm
+#, perl-format
+msgid "cannot open file %s"
+msgstr "impossible d'ouvrir le fichier %s"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid ""
+"$ORIGIN is used in RPATH of %s and the corresponding directory could not be "
+"identified due to lack of DEBIAN sub-directory in the root of package's "
+"build tree"
+msgstr ""
+"$ORIGIN est utilisé dans le RPATH de %s et le répertoire correspondant n'a "
+"pas pu être identifié en raison de l'absence de sous-répertoire DEBIAN dans "
+"la racine de l'arborescence de construction du paquet"
+
+#: scripts/dpkg-shlibdeps.pl
+msgid "diversions involved - output may be incorrect"
+msgstr "détournements en jeu, la sortie peut être incorrecte"
+
+#: scripts/dpkg-shlibdeps.pl
+msgid "write diversion info to stderr"
+msgstr "info sur le détournement envoyée sur stderr"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "unknown output from dpkg --search: '%s'"
+msgstr "résultat de dpkg --search inconnu : %s"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "--%s needs a directory"
+msgstr "--%s requiert un répertoire"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "cannot stat directory %s"
+msgstr "« stat » du répertoire %s impossible"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "directory argument %s is not a directory"
+msgstr "paramètre répertoire %s n'est pas un répertoire"
+
+#: scripts/dpkg-source.pl scripts/Dpkg/Source/BinaryFiles.pm
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "unable to chdir to '%s'"
+msgstr "impossible de changer de répertoire vers « %s »"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "using options from %s: %s"
+msgstr "utilisation des options depuis %s : %s"
+
+#: scripts/dpkg-source.pl scripts/Dpkg/Compression.pm
+#, perl-format
+msgid "%s is not a supported compression"
+msgstr "%s n'est pas une compression gérée"
+
+#: scripts/dpkg-source.pl scripts/Dpkg/Compression.pm
+#, perl-format
+msgid "%s is not a compression level"
+msgstr "%s n'est pas un niveau de compression"
+
+#: scripts/dpkg-source.pl
+msgid "-E and -W are deprecated, they are without effect"
+msgstr "La gestion de -E et -W est obsolète (ces paramètres sont sans effet)"
+
+#: scripts/dpkg-source.pl scripts/dpkg-vendor.pl
+msgid "need an action option"
+msgstr "option d'action indispensable"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "no source format specified in %s, see dpkg-source(1)"
+msgstr "aucun format source indiqué dans %s, voir dpkg-source(1)"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "%s doesn't contain any information about the source package"
+msgstr "%s ne contient pas d'information sur le paquet source"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "'%s' is not a legal architecture string in package '%s'"
+msgstr ""
+"« %s » n'est pas une chaîne d'architecture autorisée dans le paquet « %s »"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "architecture %s only allowed on its own (list for package %s is '%s')"
+msgstr ""
+"architecture %s seulement autorisée toute seule (la liste pour le paquet %s "
+"est « %s »)"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "%s doesn't list any binary package"
+msgstr "%s ne comporte aucun paquet binaire"
+
+#: scripts/dpkg-source.pl
+msgid "building source for a binary-only release"
+msgstr "construction des sources pour une publication binaire seule"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "can't build with source format '%s': %s"
+msgstr "impossible de construire avec le format source « %s » : %s"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "using source format '%s'"
+msgstr "utilisation du format source « %s »"
+
+#: scripts/dpkg-source.pl scripts/Dpkg/Source/Package/V1.pm
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Package/V3/Bzr.pm
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+#, perl-format
+msgid "building %s in %s"
+msgstr "construction de %s dans %s"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "--%s needs at least one argument, the .dsc"
+msgstr "--%s requiert au moins un paramètre, le fichier .dsc"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "--%s takes no more than two arguments"
+msgstr "--%s ne prend pas plus de deux paramètres"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "--%s needs the .dsc file as first argument, not a directory"
+msgstr ""
+"--%s requiert le fichier .dsc comme premier paramètre et non un répertoire"
+
+#: scripts/dpkg-source.pl scripts/Dpkg/Source/Package/V1.pm
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Package/V3/Bzr.pm
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+#, perl-format
+msgid "unpack target exists: %s"
+msgstr "cible non compressée existe : %s"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "%s doesn't contain a valid OpenPGP signature"
+msgstr "%s ne contient pas de signature OpenPGP valable"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "extracting unsigned source package (%s)"
+msgstr "extraction d'un paquet source non signé (%s)"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "extracting %s in %s"
+msgstr "extraction de %s dans %s"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "test control %s is not a regular file"
+msgstr "le contrôle de test %s n'est pas un fichier classique"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "%s field contains value %s, but no tests control file %s"
+msgstr ""
+"le champ %s contient la valeur %s, mais il n'y a pas de fichier de contrôle "
+"des tests %s"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "test control %s is missing %s or %s field"
+msgstr "le contrôle de test %s est absent du champ %s ou %s"
+
+#: scripts/dpkg-source.pl
+msgctxt "source options"
+msgid "<none>"
+msgstr "<aucun>"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "Usage: %s [<option>...] <command>"
+msgstr "Usage: %s [<option>...] <commande>"
+
+#: scripts/dpkg-source.pl
+msgid ""
+"Commands:\n"
+" -x, --extract <filename>.dsc [<output-dir>]\n"
+" extract source package.\n"
+" -b, --build <dir> build source package.\n"
+" --print-format <dir> print the format to be used for the source "
+"package.\n"
+" --before-build <dir> run the corresponding source package format "
+"hook.\n"
+" --after-build <dir> run the corresponding source package format "
+"hook.\n"
+" --commit [<dir> [<patch-name>]]\n"
+" store upstream changes in a new patch."
+msgstr ""
+"Commandes :\n"
+" -x, --extract <nom-fichier>.dsc [<rep-sortie>]\n"
+" extraction du paquet source.\n"
+" -b, --build <rep> construction du paquet source.\n"
+" --print-format <rep> afficher le format à utiliser pour le paquet "
+"source.\n"
+" --before-build <rep> exécuter le point d'ancrage correspondant au "
+"format du paquet source.\n"
+" --after-build <rep> exécuter le point d'ancrage de format de paquet "
+"source correspondant.\n"
+" --commit [<rep> [<nom-patch>]]\n"
+" enregistrer les changements en amont dans un "
+"nouveau patch."
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid ""
+"Build options:\n"
+" -c<control-file> get control info from this file.\n"
+" -l<changelog-file> get per-version info from this file.\n"
+" -F<changelog-format> force changelog format.\n"
+" --format=<source-format> set the format to be used for the source "
+"package.\n"
+" -V<name>=<value> set a substitution variable.\n"
+" -T<substvars-file> read variables here.\n"
+" -D<field>=<value> override or add a .dsc field and value.\n"
+" -U<field> remove a field.\n"
+" -i, --diff-ignore[=<regex>]\n"
+" filter out files to ignore diffs of\n"
+" (defaults to: '%s').\n"
+" -I, --tar-ignore[=<pattern>]\n"
+" filter out files when building tarballs\n"
+" (defaults to: %s).\n"
+" -Z, --compression=<compression>\n"
+" select compression to use (defaults to '%s',\n"
+" supported are: %s).\n"
+" -z, --compression-level=<level>\n"
+" compression level to use (defaults to '%d',\n"
+" supported are: '1'-'9', 'best', 'fast')"
+msgstr ""
+"Options de construction :\n"
+" -c<fichier-contrôle> obtenir les informations de contrôle de ce "
+"fichier.\n"
+" -l<fichier-changelog> obtenir les informations de version de ce "
+"fichier.\n"
+" -F<format-changelog> forcer le format du changelog.\n"
+" --format=<source-format> définir le format à utiliser pour le paquet "
+"source.\n"
+" -V<nom>=<valeur> définir une variable de substitution.\n"
+" -T<fichier-substvars> lire ici les variables.\n"
+" -D<champ>=<valeur> remplacer ou ajouter une paire champ et valeur ."
+"dsc.\n"
+" -U<champ> supprimer un champ.\n"
+" -i, --diff-ignore[=<regex>]\n"
+" ignorer les différences sur les fichiers\n"
+" (par défaut : %s).\n"
+" -I, --tar-ignore[=<motif>]\n"
+" exclure des fichiers en construisant les\n"
+" archives (par défaut : %s).\n"
+" -Z, --compression=<compression>\n"
+" compression à utiliser (par défaut : « %s »,\n"
+" les valeurs gérées sont : %s)\n"
+" -z, --compression-level=<niveau>\n"
+" niveau de compression à utiliser (par défaut, "
+"« %d » ,\n"
+" les valeurs gérées sont : « 1 » - « 9 », "
+"« best », « fast »)"
+
+#: scripts/dpkg-source.pl
+msgid ""
+"Extract options:\n"
+" --no-copy don't copy .orig tarballs\n"
+" --no-check don't check signature and checksums before "
+"unpacking\n"
+" --no-overwrite-dir do not overwrite directory on extraction\n"
+" --require-valid-signature abort if the package doesn't have a valid "
+"signature\n"
+" --require-strong-checksums\n"
+" abort if the package contains no strong "
+"checksums\n"
+" --ignore-bad-version allow bad source package versions."
+msgstr ""
+"Options d'extraction :\n"
+" --no-copy ne pas copier les archives .orig\n"
+" --no-check ne pas vérifier la signature et les sommes de contrôle "
+"avant la décompression\n"
+" --no-overwrite-dir ne pas écraser le répertoire lors de "
+"l'extraction\n"
+" --require-valid-signature abandonner si le paquet n'a pas de signature "
+"valable\n"
+" --require-strong-checksums\n"
+" abandonner si le paquet ne contient pas de somme "
+"de contrôle forte\n"
+" --ignore-bad-version autoriser les mauvaises versions du paquet "
+"source."
+
+#: scripts/dpkg-source.pl
+msgid ""
+"General options:\n"
+" --threads-max=<threads>\n"
+" use at most <threads> with compressor.\n"
+" -q quiet mode.\n"
+" -?, --help show this help message.\n"
+" --version show the version."
+msgstr ""
+"Options générales :\n"
+" --threads-max=<threads>\n"
+" utiliser au maximum <threads> avec le "
+"compresseur.\n"
+" -q mode silencieux.\n"
+" -?, --help afficher ce message d'aide.\n"
+" --version afficher la version."
+
+#: scripts/dpkg-source.pl
+msgid ""
+"Source format specific build and extract options are available;\n"
+"use --format with --help to see them."
+msgstr ""
+"Des options de construction et d'extraction spécifiques au format source "
+"sont disponibles ;\n"
+"utilisez --format avec --help pour les voir."
+
+#: scripts/dpkg-vendor.pl
+msgid ""
+"Commands:\n"
+" --is <vendor> returns true if current vendor is <vendor>.\n"
+" --derives-from <vendor> returns true if current vendor derives from "
+"<vendor>.\n"
+" --query <field> print the content of the vendor-specific field.\n"
+" --help show this help message.\n"
+" --version show the version."
+msgstr ""
+"Commandes:\n"
+" --is <fabriquant> renvoyer « vrai » si le fabriquant actuel "
+"est <vendor>.\n"
+" --derives-from <fabriquant> renvoyer « vrai » si le fabriquant actuel "
+"provient de <fabriquant>.\n"
+" --query <champ> afficher le contenu du champ propre au "
+"fabriquant.\n"
+" --help afficher ce message d'aide.\n"
+" --version afficher la version."
+
+#: scripts/dpkg-vendor.pl
+msgid ""
+"Options:\n"
+" --vendor <vendor> assume <vendor> is the current vendor."
+msgstr ""
+"Options :\n"
+" --vendor <fabriquant> supposer que <fabriquant> est le fabriquant "
+"actuel."
+
+#: scripts/dpkg-vendor.pl
+#, perl-format
+msgid "vendor %s doesn't exist in %s"
+msgstr "le fabriquant %s n'existe pas dans %s"
+
+#: scripts/Dpkg/Arch.pm
+msgid ""
+"cannot determine CC system type, falling back to default (native compilation)"
+msgstr ""
+"impossible de déterminer le type de système CC, retour à la valeur par "
+"défaut (compilation native)"
+
+#: scripts/Dpkg/Arch.pm
+#, perl-format
+msgid "unknown CC system type %s, falling back to default (native compilation)"
+msgstr ""
+"type de système CC inconnu %s, retour à la valeur par défaut (compilation "
+"native)"
+
+#: scripts/Dpkg/Arch.pm
+#, perl-format
+msgid "'%s' is not a legal architecture in list '%s'"
+msgstr "« %s » n'est pas une architecture autorisée dans la liste « %s »"
+
+#: scripts/Dpkg/BuildFlags.pm scripts/Dpkg/Compression/FileHandle.pm
+#: scripts/Dpkg/File.pm scripts/Dpkg/Interface/Storable.pm
+#: scripts/Dpkg/Shlibs/Objdump.pm scripts/Dpkg/Source/BinaryFiles.pm
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "cannot read %s"
+msgstr "impossible de lire %s"
+
+#: scripts/Dpkg/BuildFlags.pm
+#, perl-format
+msgid "line %d of %s mentions unknown flag %s"
+msgstr "la ligne %d de %s comprend un drapeau %s inconnu"
+
+#: scripts/Dpkg/BuildFlags.pm
+#, perl-format
+msgid "line %d of %s is invalid, it has been ignored"
+msgstr "la ligne %d de %s n'est pas valable et a été ignorée"
+
+#: scripts/Dpkg/BuildOptions.pm
+#, perl-format
+msgid "invalid flag in %s: %s"
+msgstr "drapeau non valable dans %s : %s"
+
+#: scripts/Dpkg/BuildOptions.pm
+#, perl-format
+msgid "unknown %s feature in %s variable: %s"
+msgstr "fonctionnalité %s inconnue dans la variable %s : %s"
+
+#: scripts/Dpkg/BuildOptions.pm
+#, perl-format
+msgid "incorrect value in %s option of %s variable: %s"
+msgstr "valeur incorrecte dans l'option %s de la variable %s : %s"
+
+#: scripts/Dpkg/BuildTypes.pm
+#, perl-format
+msgid "cannot combine %s and %s"
+msgstr "impossible de combiner %s et %s"
+
+#: scripts/Dpkg/BuildTypes.pm
+#, perl-format
+msgid "unknown build type %s"
+msgstr "type de construction inconnu %s"
+
+#: scripts/Dpkg/Changelog.pm
+#, perl-format
+msgid ""
+"%s(l%s): %s\n"
+"LINE: %s"
+msgstr ""
+"%s(l%s): %s\n"
+"LIGNE : %s"
+
+#: scripts/Dpkg/Changelog.pm
+#, perl-format
+msgid "%s(l%s): %s"
+msgstr "%s(l%s) : %s"
+
+#: scripts/Dpkg/Changelog.pm
+msgid "'offset' without 'count' has no effect"
+msgstr "« offset » sans « count » n'a aucun effet"
+
+#: scripts/Dpkg/Changelog.pm
+msgid "you can't combine 'count' or 'offset' with any other range option"
+msgstr ""
+"impossible de combiner « count » et « offset » avec une autre option de "
+"limitation"
+
+#: scripts/Dpkg/Changelog.pm
+msgid "you can only specify one of 'from' and 'since', using 'since'"
+msgstr ""
+"impossible d'indiquer « from » et « since » simultanément. « since » sera "
+"utilisé"
+
+#: scripts/Dpkg/Changelog.pm
+msgid "you can only specify one of 'to' and 'until', using 'until'"
+msgstr ""
+"impossible d'indiquer « to » et « until » simultanément. « until » sera "
+"utilisé"
+
+#: scripts/Dpkg/Changelog.pm
+#, perl-format
+msgid "'%s' option specifies non-existing version '%s'"
+msgstr "l'option « %s » spécifie une version inexistante « %s »"
+
+#: scripts/Dpkg/Changelog.pm
+msgid "use newest entry that is earlier than the one specified"
+msgstr "utiliser l'entrée la plus récente qui est inférieure à celle indiquée"
+
+#: scripts/Dpkg/Changelog.pm
+msgid "none found, starting from the oldest entry"
+msgstr "aucune trouvée, démarrage depuis la dernière entrée"
+
+#: scripts/Dpkg/Changelog.pm
+msgid "use oldest entry that is later than the one specified"
+msgstr "utiliser l'entrée la plus ancienne qui est supérieure à celle indiquée"
+
+#: scripts/Dpkg/Changelog.pm
+#, perl-format
+msgid "no such entry found, ignoring '%s' parameter '%s'"
+msgstr ""
+"aucune entrée de ce type n'a été trouvée, le paramètre « %s » de « %s » a "
+"été ignoré"
+
+#: scripts/Dpkg/Changelog.pm
+#, perl-format
+msgid "'since' option specifies most recent version '%s', ignoring"
+msgstr "l'option « since » spécifie la version la plus récente « %s », ignorée"
+
+#: scripts/Dpkg/Changelog.pm
+#, perl-format
+msgid "'until' option specifies oldest version '%s', ignoring"
+msgstr ""
+"l'option « until » spécifie la version la plus ancienne « %s », ignorée"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+msgid "first heading"
+msgstr "premier en-tête"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+msgid "next heading or end of file"
+msgstr "en-tête suivant ou fin de fichier"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+msgid "start of change data"
+msgstr "début des données de modifications"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+msgid "more change data or trailer"
+msgstr "données de modifications supplémentaires ou de fin"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+#, perl-format
+msgid "found start of entry where expected %s"
+msgstr "début d'une entrée trouvé, %s attendu"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+msgid "badly formatted heading line"
+msgstr "ligne d'en-tête mal formée"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+#, perl-format
+msgid "found trailer where expected %s"
+msgstr "ligne de fin trouvée, %s attendu"
+
+#: scripts/Dpkg/Changelog/Debian.pm scripts/Dpkg/Changelog/Entry/Debian.pm
+msgid "badly formatted trailer line"
+msgstr "ligne de fin mal formée"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+#, perl-format
+msgid "found change data where expected %s"
+msgstr "changements trouvés, %s attendu"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+#, perl-format
+msgid "found blank line where expected %s"
+msgstr "ligne blanche trouvée, %s attendu"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+msgid "unrecognized line"
+msgstr "ligne non reconnue"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+#, perl-format
+msgid "found end of file where expected %s"
+msgstr "fin de fichier trouvée, %s attendu"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "version '%s' is invalid: %s"
+msgstr "la version « %s » n'est pas valable : %s"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "bad key-value after ';': '%s'"
+msgstr "mauvaise clé-valeur après « ; » : %s"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "repeated key-value %s"
+msgstr "clé-valeur répété %s"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "badly formatted urgency value: %s"
+msgstr "valeur urgency mal formée : %s"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "bad binary-only value: %s"
+msgstr "valeur binary-only incorrecte : %s"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "unknown key-value %s"
+msgstr "clé clé-valeur inconnue %s"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+msgid "the header doesn't match the expected regex"
+msgstr "l'en-tête ne correspond pas à l'expression régulière attendue"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "ignoring invalid week day '%s'"
+msgstr "jour de la semaine non valable « %s » ignoré"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "uses full '%s' instead of abbreviated month name '%s'"
+msgstr "utilise le nom complet « %s » au lieu du nom abrégé du mois « %s »"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "invalid abbreviated month name '%s'"
+msgstr "nom de mois abrégé non valable « %s »"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "cannot parse non-conformant date '%s'"
+msgstr "impossible d’analyser la date au format non conforme « %s »"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+msgid "the trailer doesn't match the expected regex"
+msgstr ""
+"la partie finale (« trailer ») ne correspond pas à l'expression régulière "
+"attendue"
+
+#: scripts/Dpkg/Changelog/Parse.pm
+#, perl-format
+msgid "cannot seek into file %s"
+msgstr "impossible de chercher dans le fichier %s"
+
+#: scripts/Dpkg/Changelog/Parse.pm
+#, perl-format
+msgid "changelog format %s is unknown: %s"
+msgstr "le format du journal des modifications %s est inconnu : %s"
+
+#: scripts/Dpkg/Changelog/Parse.pm
+#, perl-format
+msgid "changelog format %s is not a Dpkg::Changelog class"
+msgstr ""
+"format du journal des modifications %s n'est pas une classe Dpkg::Changelog"
+
+#: scripts/Dpkg/Changelog/Parse.pm
+#, perl-format
+msgid "fatal error occurred while parsing %s"
+msgstr "erreur fatale rencontrée lors de l'analyse de %s"
+
+#: scripts/Dpkg/Changelog/Parse.pm
+#, perl-format
+msgid "unknown output format %s"
+msgstr "format de sortie %s inconnu"
+
+#: scripts/Dpkg/Checksums.pm
+#, perl-format
+msgid "cannot fstat file %s"
+msgstr "fstat impossible pour le fichier %s"
+
+#: scripts/Dpkg/Checksums.pm
+#, perl-format
+msgid "file %s has size %u instead of expected %u"
+msgstr "la taille du fichier %s est %u au lieu de %u attendu"
+
+#: scripts/Dpkg/Checksums.pm
+#, perl-format
+msgid "file %s has checksum %s instead of expected %s (algorithm %s)"
+msgstr ""
+"la somme de contrôle du fichier %s est %s au lieu de %s (algorithme %s)"
+
+#: scripts/Dpkg/Checksums.pm
+#, perl-format
+msgid "invalid line in %s checksums string: %s"
+msgstr "ligne non valable dans la chaîne de somme de contrôle %s : %s"
+
+#: scripts/Dpkg/Checksums.pm
+#, perl-format
+msgid "conflicting checksums '%s' and '%s' for file '%s'"
+msgstr ""
+"sommes de contrôle en conflit : « %s » et « %s » pour le fichier « %s »"
+
+#: scripts/Dpkg/Checksums.pm
+#, perl-format
+msgid "conflicting file sizes '%u' and '%u' for file '%s'"
+msgstr "conflit de taille de fichiers %u et %u pour le fichier %s"
+
+#: scripts/Dpkg/Compression.pm
+#, perl-format
+msgid "compression threads %s is not a number"
+msgstr "le nombre de processus de compression %s n'est pas un nombre"
+
+#: scripts/Dpkg/Compression/Process.pm
+#, perl-format
+msgid "%s is not a supported compression method"
+msgstr "%s n'est pas une méthode compression gérée"
+
+#: scripts/Dpkg/Compression/Process.pm
+msgid "Dpkg::Compression::Process can only start one subprocess at a time"
+msgstr ""
+"Dpkg::compression::Process ne peut démarrer qu'un sous-processus à la fois"
+
+#: scripts/Dpkg/Conf.pm
+#, perl-format
+msgid "short option not allowed in %s, line %d"
+msgstr "option courte non autorisée dans %s à la ligne %d"
+
+#: scripts/Dpkg/Conf.pm
+#, perl-format
+msgid "invalid syntax for option in %s, line %d"
+msgstr "erreur de syntaxe pour l'option %s à la ligne %d"
+
+#: scripts/Dpkg/Control.pm
+msgid "general section of control info file"
+msgstr "section générale dans le fichier info"
+
+#: scripts/Dpkg/Control.pm
+msgid "package's section of control info file"
+msgstr "section du paquet dans le fichier info"
+
+#: scripts/Dpkg/Control.pm
+msgid "parsed version of changelog"
+msgstr "version analysée de changelog"
+
+#: scripts/Dpkg/Control.pm
+msgid "header stanza of copyright file"
+msgstr "paragraphe d'en-tête du fichier de copyright"
+
+#: scripts/Dpkg/Control.pm
+msgid "files stanza of copyright file"
+msgstr "paragraphe des fichiers du fichier de copyright"
+
+#: scripts/Dpkg/Control.pm
+msgid "license stanza of copyright file"
+msgstr "paragraphe de licence du fichier de copyright"
+
+#: scripts/Dpkg/Control.pm
+msgid "package's tests control file"
+msgstr "le fichier de contrôle des tests du paquet"
+
+#: scripts/Dpkg/Control.pm
+#, perl-format
+msgid "repository's %s file"
+msgstr "le fichier %s du dépôt"
+
+#: scripts/Dpkg/Control.pm
+#, perl-format
+msgid "stanza in repository's %s file"
+msgstr "paragraphe dans le fichier %s de dépôt"
+
+#: scripts/Dpkg/Control.pm
+#, perl-format
+msgid "%s file"
+msgstr "fichier %s"
+
+#: scripts/Dpkg/Control.pm
+msgid "control info of a .deb package"
+msgstr "information de contrôle d'un paquet .deb"
+
+#: scripts/Dpkg/Control.pm
+msgid "build information file"
+msgstr "fichier d'information sur la construction"
+
+#: scripts/Dpkg/Control.pm
+msgid "vendor file"
+msgstr "fichier du fournisseur (« vendor »)"
+
+#: scripts/Dpkg/Control.pm
+msgid "stanza in dpkg's status file"
+msgstr "paragraphe dans le fichier d'état de dpkg"
+
+#: scripts/Dpkg/Control/FieldsCore.pm
+#, perl-format
+msgid "unknown information field '%s' in input data in %s"
+msgstr "champ d'information inconnu « %s » dans les données d'entrée de %s"
+
+#: scripts/Dpkg/Control/FieldsCore.pm
+msgid "control information"
+msgstr "information de contrôle"
+
+#: scripts/Dpkg/Control/HashCore.pm
+#, perl-format
+msgid "syntax error in %s at line %d: %s"
+msgstr "erreur de syntaxe dans %s à la ligne %d : %s"
+
+#: scripts/Dpkg/Control/HashCore.pm
+msgid "field cannot start with a hyphen"
+msgstr "le champ ne peut débuter par un trait d'union"
+
+#: scripts/Dpkg/Control/HashCore.pm
+#, perl-format
+msgid "duplicate field %s found"
+msgstr "champ %s en double"
+
+#: scripts/Dpkg/Control/HashCore.pm
+msgid "continued value line not in field"
+msgstr "la ligne prolongée de valeur n'est pas dans le champ"
+
+#: scripts/Dpkg/Control/HashCore.pm
+msgid "expected OpenPGP signature, found end of file after blank line"
+msgstr ""
+"signature OpenPGP attendue, mais fin de fichier atteinte (après ligne "
+"blanche)"
+
+#: scripts/Dpkg/Control/HashCore.pm
+#, perl-format
+msgid "expected OpenPGP signature, found something else '%s'"
+msgstr "signature OpenPGP attendue, mais « %s » trouvé"
+
+#: scripts/Dpkg/Control/HashCore.pm
+msgid "unfinished OpenPGP signature"
+msgstr "signature OpenPGP non terminée"
+
+#: scripts/Dpkg/Control/HashCore.pm
+msgid "OpenPGP signature not allowed here"
+msgstr "signature OpenPGP non autorisée ici"
+
+#: scripts/Dpkg/Control/HashCore.pm
+msgid "line with unknown format (not field-colon-value)"
+msgstr ""
+"ligne de format inconnu, format différent de « champ-deux_points-valeur »"
+
+#: scripts/Dpkg/Control/HashCore.pm
+msgid "write error on control data"
+msgstr "erreur d'écriture sur des données de contrôle"
+
+#: scripts/Dpkg/Control/Info.pm
+#, perl-format
+msgid "first stanza lacks a '%s' field"
+msgstr "la première entrée n'a pas de champ « %s »"
+
+#: scripts/Dpkg/Control/Info.pm
+#, perl-format
+msgid "stanza lacks the '%s' field"
+msgstr "l’entrée ne contient pas le champ « %s »"
+
+#: scripts/Dpkg/Control/Tests/Entry.pm
+#, perl-format
+msgid "stanza lacks either %s or %s fields"
+msgstr "l’entrée ne comporte pas de champs %s ou %s"
+
+#: scripts/Dpkg/Deps.pm
+#, perl-format
+msgid "can't parse dependency %s"
+msgstr "impossible d'analyser la dépendance %s"
+
+#: scripts/Dpkg/Deps.pm
+#, perl-format
+msgid "virtual dependency contains invalid relation: %s"
+msgstr "la dépendance virtuelle contient une relation non valable : %s"
+
+#: scripts/Dpkg/Deps.pm
+msgid "an union dependency can only contain simple dependencies"
+msgstr "une dépendance d’union ne peut contenir que des dépendances simples"
+
+#: scripts/Dpkg/Dist/Files.pm
+#, perl-format
+msgid "badly formed file name in files list file, line %d"
+msgstr ""
+"nom de fichier mal formé dans le fichier listant les fichiers, ligne %d"
+
+#: scripts/Dpkg/Dist/Files.pm
+#, perl-format
+msgid "badly formed line in files list file, line %d"
+msgstr "ligne %d mal formée dans le fichier de liste des fichiers"
+
+#: scripts/Dpkg/Dist/Files.pm
+#, perl-format
+msgid "duplicate files list entry for file %s (line %d)"
+msgstr ""
+"entrée en double dans le fichier de liste des fichiers pour le fichier %s "
+"(ligne %d)"
+
+#: scripts/Dpkg/Dist/Files.pm
+#, perl-format
+msgid "cannot open directory %s"
+msgstr "impossible d’ouvrir le répertoire %s"
+
+#: scripts/Dpkg/Dist/Files.pm
+#, perl-format
+msgid "invalid filename %s"
+msgstr "nom de fichier %s non valable"
+
+#: scripts/Dpkg/ErrorHandling.pm
+msgid "info"
+msgstr "info"
+
+#: scripts/Dpkg/ErrorHandling.pm
+msgid "notice"
+msgstr "notification"
+
+#: scripts/Dpkg/ErrorHandling.pm
+msgid "warning"
+msgstr "avertissement"
+
+#: scripts/Dpkg/ErrorHandling.pm
+msgid "error"
+msgstr "erreur"
+
+#: scripts/Dpkg/ErrorHandling.pm
+#, perl-format
+msgid "%s subprocess returned exit status %d"
+msgstr "le sous-processus %s a retourné l’état de sortie %d"
+
+#: scripts/Dpkg/ErrorHandling.pm
+#, perl-format
+msgid "%s subprocess was killed by signal %d"
+msgstr "le sous-processus %s a été tué par le signal %d"
+
+#: scripts/Dpkg/ErrorHandling.pm
+#, perl-format
+msgid "%s subprocess failed with unknown status code %d"
+msgstr "le sous-processus %s a échoué avec le code d'état inconnu %d"
+
+#: scripts/Dpkg/ErrorHandling.pm
+msgid "Use --help for program usage information."
+msgstr "Utilisez --help pour de l'information sur l'utilisation du programme."
+
+#: scripts/Dpkg/File.pm
+#, perl-format
+msgid "cannot create file %s"
+msgstr "impossible de créer le fichier %s"
+
+#: scripts/Dpkg/IPC.pm
+#, perl-format
+msgid "pipe for %s"
+msgstr "pipe pour %s"
+
+#: scripts/Dpkg/IPC.pm
+#, perl-format
+msgid "chdir to %s"
+msgstr "chdir vers %s"
+
+#: scripts/Dpkg/IPC.pm
+msgid "reopen stdin"
+msgstr "réouverture stdin"
+
+#: scripts/Dpkg/IPC.pm
+msgid "reopen stdout"
+msgstr "réouverture de la sortie standard"
+
+#: scripts/Dpkg/IPC.pm
+msgid "child process"
+msgstr "processus fils"
+
+#: scripts/Dpkg/IPC.pm
+#, perl-format
+msgid "wait for %s"
+msgstr "attente de %s"
+
+#: scripts/Dpkg/IPC.pm
+#, perl-format
+msgid "%s didn't complete in %d second"
+msgid_plural "%s didn't complete in %d seconds"
+msgstr[0] "%s ne s'est pas terminé en %d seconde"
+msgstr[1] "%s ne s'est pas terminé en %d secondes"
+
+#: scripts/Dpkg/Interface/Storable.pm
+msgid "<standard input>"
+msgstr "<entrée standard>"
+
+#: scripts/Dpkg/Lock.pm
+msgid "File::FcntlLock not available; using flock which is not NFS-safe"
+msgstr ""
+"Fichier::FcntlLock non disponible; utilisation de « flock » qui n'est pas "
+"sécurisé pour NFS"
+
+#: scripts/Dpkg/Lock.pm
+#, perl-format
+msgid "failed to get a write lock on %s"
+msgstr "impossible d'obtenir un verrouillage en écriture sur %s"
+
+#: scripts/Dpkg/OpenPGP.pm
+#, perl-format
+msgid "unknown OpenPGP api requested %s"
+msgstr "API OpenPGP inconnue demandée %s"
+
+#: scripts/Dpkg/OpenPGP.pm
+#, perl-format
+msgid "cannot load OpenPGP backend %s"
+msgstr "impossible de charger le dorsal OpenPGP %s"
+
+#: scripts/Dpkg/OpenPGP.pm
+#, perl-format
+msgid "unknown OpenPGP backend %s"
+msgstr "dorsal OpenPGP inconnu %s"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "success"
+msgstr "succès"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "no acceptable signature found"
+msgstr "aucune signature acceptable trouvée"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "missing required argument"
+msgstr "argument requis manquant"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "unsupported option"
+msgstr "option non prise en charge"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "invalid data type"
+msgstr "type de données non valable"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "non-text input where text expected"
+msgstr "saisie non textuelle alors que du texte est attendu"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "output file already exists"
+msgstr "le fichier de sortie existe déjà"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "input file does not exist"
+msgstr "le fichier d'entrée n'existe pas"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "cannot unlock password-protected key"
+msgstr "impossible de déverrouiller la clé protégée par un mot de passe"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "unsupported subcommand"
+msgstr "sous-commande non prise en charge"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "key is not signature-capable"
+msgstr "la clé ne permet pas la signature"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "missing OpenPGP implementation"
+msgstr "implémentation OpenPGP manquante"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "specified key needs a keystore"
+msgstr "la clé spécifiée a besoin d'un trousseau de clés"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+#, perl-format
+msgid "error code %d"
+msgstr "code d'erreur %d"
+
+#: scripts/Dpkg/Package.pm
+msgid "may not be empty string"
+msgstr "ne peut pas être une chaîne vide"
+
+#: scripts/Dpkg/Package.pm
+#, perl-format
+msgid "character '%s' not allowed"
+msgstr "caractère « %s » non autorisé"
+
+#: scripts/Dpkg/Package.pm
+msgid "must start with an alphanumeric character"
+msgstr "doit commencer par un caractère alphanumérique"
+
+#: scripts/Dpkg/Path.pm scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "pathname '%s' cannot be canonicalized"
+msgstr "le nom de chemin « %s » ne peut pas être normalisé"
+
+#: scripts/Dpkg/Path.pm scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "pathname '%s' points outside source root (to '%s')"
+msgstr ""
+"le nom de chemin « %s » pointe en dehors de la racine de la source (vers "
+"« %s »)"
+
+#: scripts/Dpkg/Shlibs.pm
+msgid ""
+"deprecated use of LD_LIBRARY_PATH with private library directory which "
+"interferes with cross-building, please use -l option instead"
+msgstr ""
+"utilisation obsolète de LD_LIBRARY_PATH avec un répertoire de bibliothèque "
+"privé qui interfère avec la construction croisée, veuillez utiliser l'option "
+"-l à la place"
+
+#: scripts/Dpkg/Shlibs.pm scripts/Dpkg/Shlibs/Objdump.pm
+#, perl-format
+msgid "unknown executable format in file '%s'"
+msgstr "format d'exécutable inconnu dans le fichier « %s »"
+
+#: scripts/Dpkg/Shlibs/Objdump.pm
+#, perl-format
+msgid "couldn't parse dynamic relocation record: %s"
+msgstr "impossible d'analyser l'enregistrement d'allocation dynamique : %s"
+
+#: scripts/Dpkg/Shlibs/Objdump.pm
+#, perl-format
+msgid "couldn't parse dynamic symbol definition: %s"
+msgstr "impossible d'analyser la définition de symboles dynamique : %s"
+
+#: scripts/Dpkg/Shlibs/Symbol.pm
+#, perl-format
+msgid "symbol name unspecified: %s"
+msgstr "nom de symbole non précisé : %s"
+
+#: scripts/Dpkg/Shlibs/Symbol.pm
+#, perl-format
+msgid "symver tag with versioned symbol will not match: %s"
+msgstr "la balise symver avec le symbole versionné ne correspondra pas : %s"
+
+#: scripts/Dpkg/Shlibs/Symbol.pm
+#, perl-format
+msgid "you can't use symver tag to catch unversioned symbols: %s"
+msgstr ""
+"impossible d'utiliser l'étiquette symver pour identifier les symboles non "
+"versionnés : %s"
+
+#: scripts/Dpkg/Shlibs/SymbolFile.pm
+#, perl-format
+msgid "symbol information must be preceded by a header (file %s, line %s)"
+msgstr ""
+"les informations de symboles doivent être précédées par un en-tête (fichier "
+"%s, ligne %s)"
+
+#: scripts/Dpkg/Shlibs/SymbolFile.pm
+#, perl-format
+msgid "failed to parse line in %s: %s"
+msgstr "impossible d'analyser une ligne dans %s : %s"
+
+#: scripts/Dpkg/Shlibs/SymbolFile.pm
+#, perl-format
+msgid "failed to parse a line in %s: %s"
+msgstr "impossible d'analyser une ligne dans %s : %s"
+
+#: scripts/Dpkg/Shlibs/SymbolFile.pm
+#, perl-format
+msgid "tried to merge the same object (%s) twice in a symfile"
+msgstr ""
+"tentative de fusion du même objet (%s) deux fois dans un fichier de symboles"
+
+#: scripts/Dpkg/Shlibs/SymbolFile.pm
+msgid "cannot merge symbols from objects without SONAME"
+msgstr "impossible de fusionner les symboles depuis des objets sans SONAME"
+
+#: scripts/Dpkg/Source/Archive.pm
+msgid "write on tar input"
+msgstr "écriture sur l'entrée de tar"
+
+#: scripts/Dpkg/Source/Archive.pm
+msgid "close on tar input"
+msgstr "écriture sur la sortie de tar"
+
+#: scripts/Dpkg/Source/Archive.pm scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot create directory %s"
+msgstr "impossible de créer le répertoire %s"
+
+#: scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "cannot get source pathname %s metadata"
+msgstr "impossible d'obtenir les métadonnées du chemin d'accès source %s"
+
+#: scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "cannot get target pathname %s metadata"
+msgstr "impossible d'obtenir les métadonnées du chemin d'accès cible %s"
+
+#: scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "cannot change directory %s mode"
+msgstr "impossible de changer le mode du répertoire %s"
+
+#: scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "cannot change directory %s times"
+msgstr "impossible de changer les dates du répertoire %s"
+
+#: scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "cannot remove destination directory %s"
+msgstr "impossible de supprimer le répertoire de destination %s"
+
+#: scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "cannot remove destination file %s"
+msgstr "impossible de supprimer le fichier de destination %s"
+
+#: scripts/Dpkg/Source/Archive.pm scripts/Dpkg/Source/Package.pm
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "cannot opendir %s"
+msgstr "impossible d'ouvrir le répertoire %s"
+
+#: scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "unable to rename %s to %s"
+msgstr "impossible de renommer %s en %s"
+
+#: scripts/Dpkg/Source/Functions.pm
+#, perl-format
+msgid "cannot stat directory %s (before removal)"
+msgstr "stat du répertoire %s impossible (avant suppression)"
+
+#: scripts/Dpkg/Source/Functions.pm
+#, perl-format
+msgid "unable to check for removal of directory '%s'"
+msgstr "impossible de vérifier la suppression du répertoire « %s »"
+
+#: scripts/Dpkg/Source/Functions.pm
+#, perl-format
+msgid "rm -rf failed to remove '%s'"
+msgstr "rm -rf n'a pas supprimé « %s »"
+
+#: scripts/Dpkg/Source/Functions.pm scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot change timestamp for %s"
+msgstr "impossible de modifier la date de %s"
+
+#: scripts/Dpkg/Source/Functions.pm
+#, perl-format
+msgid "cannot read timestamp from %s"
+msgstr "impossible de lire la date de %s"
+
+#: scripts/Dpkg/Source/Functions.pm
+#, perl-format
+msgid "cannot open file %s for binary detection"
+msgstr "impossible d’ouvrir le fichier %s pour la détection du binaire"
+
+#: scripts/Dpkg/Source/BinaryFiles.pm
+#, perl-format
+msgid "adding %s to %s"
+msgstr "ajout de %s à %s"
+
+#: scripts/Dpkg/Source/BinaryFiles.pm
+#, perl-format
+msgid "unwanted binary file: %s"
+msgstr "fichier binaire non souhaité : %s"
+
+#: scripts/Dpkg/Source/BinaryFiles.pm
+#, perl-format
+msgid ""
+"detected %d unwanted binary file (add it in debian/source/include-binaries "
+"to allow its inclusion)."
+msgid_plural ""
+"detected %d unwanted binary files (add them in debian/source/include-"
+"binaries to allow their inclusion)."
+msgstr[0] ""
+"%d fichier binaire non souhaité a été détecté (il est nécessaire de "
+"l'ajouter dans debian/source/include-binaries pour autoriser son inclusion)."
+msgstr[1] ""
+"%d fichiers binaires non souhaités ont été détectés (il est nécessaire de "
+"les ajouter dans debian/source/include-binaries pour autoriser leur "
+"inclusion)."
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "%s is not the name of a file"
+msgstr "%s n'est pas le nom d'un fichier"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "missing critical source control field %s"
+msgstr "champ de contrôle vital manquant, %s"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "source package format '%s' is not supported: %s"
+msgstr "le format de paquet source « %s » n'est pas géré : %s"
+
+#: scripts/Dpkg/Source/Package.pm
+msgid "source package uses only weak checksums"
+msgstr "le paquet source n'utilise que des sommes de contrôle faibles"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "%s and %s fields are required to compute the source basename"
+msgstr ""
+"les champs %s et %s sont indispensables pour calculer le nom de base de la "
+"source"
+
+#: scripts/Dpkg/Source/Package.pm
+msgid "upstream tarball signatures but no upstream signing key"
+msgstr ""
+"l'archive amont dispose de signatures mais pas il n’y a pas de clé de "
+"signature de l’amont"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "verifying %s"
+msgstr "vérification de %s"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "cannot verify upstream tarball signature for %s: %s"
+msgstr "impossible de vérifier la signature de l'archive amont pour %s : %s"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "cannot verify inline signature for %s: %s"
+msgstr "impossible de vérifier la signature en ligne de %s : %s"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "%s is not a valid option for %s"
+msgstr "%s n'est pas une option valable pour %s"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "cannot copy %s to %s"
+msgstr "impossible de copier %s vers %s"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "%s does not exist"
+msgstr "%s n'existe pas"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "cannot make %s executable"
+msgstr "impossible de rendre %s exécutable"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "%s is not a plain file"
+msgstr "%s n'est pas un fichier texte"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "'%s' is not supported by the source format '%s'"
+msgstr "« %s » n'est pas géré par le format source « %s »"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "auto select original source"
+msgstr "sélection automatique de la source d'origine"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "use packed original source (unpack and keep)"
+msgstr "utiliser la source originale empaquetée (extraire et conserver)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "use packed original source (unpack and remove)"
+msgstr "utiliser la source originale empaquetée (extraire et supprimer)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "use unpacked original source (pack and keep)"
+msgstr "utiliser la source originale dépaquetée (empaqueter et conserver)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "use unpacked original source (pack and remove)"
+msgstr "utiliser la source originale dépaquetée (empaqueter et supprimer)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "trust packed and unpacked original sources are same"
+msgstr ""
+"considérer que les sources originales empaquetées et extraites sont les mêmes"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "there is no diff, do main tarfile only"
+msgstr ""
+"il n'y a pas de fichier de différences, ne faire que le fichier tar principal"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "like -sa, -sk, -sp, -su, -sr but may overwrite"
+msgstr "comme -sa, -sk, -sp, -su, -sr mais peuvent surpasser"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+msgid "abort if generated diff has upstream files changes"
+msgstr ""
+"abandonner si le fichier de différences généré a des changements dans les "
+"fichiers amont"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "leave original source packed in current directory"
+msgstr "laisser la source originale empaquetée dans le répertoire courant"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "do not copy original source to current directory"
+msgstr "ne pas copier la source originale dans le répertoire courant"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "unpack original source tree too"
+msgstr "extraire aussi l’arborescence source d’origine"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "do not apply debian diff to upstream sources"
+msgstr "ne pas appliquer le diff debian aux sources amont"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "-s%s option overrides earlier -s%s option"
+msgstr "l'option -s%s annule une précédente option -s%s"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "source handling style -s%s not allowed with -x"
+msgstr "gestion des sources avec -s%s non autorisée avec -x"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "multiple tarfiles in v1.0 source package"
+msgstr "plusieurs fichiers tar dans un paquet source v1.0"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "unrecognized file for a %s source package: %s"
+msgstr "type de fichier non reconnu pour un fichier source %s : %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V3/Native.pm
+msgid "no tarfile in Files field"
+msgstr "pas de fichier tar dans le champ Files"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "native package with .orig.tar"
+msgstr "paquet natif avec .orig.tar"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "unable to rename '%s' to '%s'"
+msgstr "impossible de renommer « %s » en « %s »"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+#, perl-format
+msgid "unpacking %s"
+msgstr "extraction de %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "unable to keep orig directory (already exists)"
+msgstr "impossible de garder le répertoire orig, il existe déjà"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "failed to rename newly-extracted %s to %s"
+msgstr "impossible de renommer le fichier extrait %s en %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "failed to rename saved %s to %s"
+msgstr "impossible de renommer le fichier sauvegardé %s en %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "applying %s"
+msgstr "mise en place de %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "upstream files that have been modified: %s"
+msgstr "fichiers amont modifiés : %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "only supports gzip compression"
+msgstr "ne gère que la compression gzip"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid ""
+"-b takes at most a directory and an orig source argument (with v1.0 source "
+"package)"
+msgstr ""
+"il faut au plus un paramètre répertoire et un paramètre source d'origine "
+"avec -b (pour les paquets source v1.0)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "source handling style -s%s not allowed with -b"
+msgstr "gestion des sources avec -s%s non autorisée avec -b"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "packed orig '%s' exists but is not a plain file"
+msgstr ""
+"le fichier original compressé %s existe mais ce n'est pas un fichier texte"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "cannot stat orig argument %s"
+msgstr "« stat » du paramètre origine %s impossible"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid ""
+"orig argument is unpacked but source handling style -s%s calls for packed (."
+"orig.tar.<ext>)"
+msgstr ""
+"le paramètre source n'est pas compressé mais l'option -s%s demande des "
+"sources compressées (.orig.tar.<ext>)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid ""
+"orig argument is packed but source handling style -s%s calls for unpacked (."
+"orig/)"
+msgstr ""
+"le paramètre source est compressé mais l'option -s%s demande des sources non "
+"compressées (.orig/)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "orig argument %s is not a plain file or directory"
+msgstr "le paramètre source %s n'est pas un fichier ou un répertoire"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid ""
+"orig argument is empty (means no orig, no diff) but source handling style -"
+"s%s wants something"
+msgstr ""
+"le paramètre source est vide (pas d'orig, pas de diff) mais l'option -s%s "
+"attend quelque chose"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "unpacked orig '%s' exists but is not a directory"
+msgstr ""
+"le fichier original non compressé « %s » existe mais ce n'est pas un "
+"répertoire"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "unable to stat putative unpacked orig '%s'"
+msgstr "stat impossible du supposé orig non compressé « %s »"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V3/Quilt.pm
+msgid "non-native package version does not contain a revision"
+msgstr "la version du paquet non natif ne contient pas de numéro de révision"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V3/Native.pm
+msgid "native package version may not have a revision"
+msgstr "la version du paquet natif ne peut avoir de numéro de révision"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "source directory '%s' is not <sourcepackage>-<upstreamversion> '%s'"
+msgstr ""
+"répertoire source « %s » n'est pas <paquet_source>-<version_amont> « %s »"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid ".orig directory name %s is not <package>-<upstreamversion> (wanted %s)"
+msgstr "répertoire .orig %s n'est pas <paquet>-<version_amont> (%s demandé)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid ""
+".orig.tar name %s is not <package>_<upstreamversion>.orig.tar (wanted %s)"
+msgstr ".orig.tar %s n'est pas <paquet>_<version_amont>.orig.tar (%s demandé)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid ""
+"tarfile '%s' already exists, not overwriting, giving up; use -sU or -sR to "
+"override"
+msgstr ""
+"le fichier tar « %s » existe déjà, pas de modification, abandon ; utiliser -"
+"sU ou -sR pour forcer"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "unable to check for existence of '%s'"
+msgstr "impossible de vérifier l'existence de « %s »"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V3/Native.pm
+#, perl-format
+msgid "unable to rename '%s' (newly created) to '%s'"
+msgstr "impossible de renommer « %s » (nouvellement créé) en « %s »"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+#: scripts/Dpkg/Source/Package/V3/Quilt.pm scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "unable to change permission of '%s'"
+msgstr "impossible de modifier les permissions de « %s »"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "building %s using existing %s"
+msgstr "construction de %s en utilisant le %s existant"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+msgid "upstream signing key but no upstream tarball signature"
+msgstr ""
+"clé de signature de l’amont mais pas de signature de l'archive en amont"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid ""
+"orig directory '%s' already exists, not overwriting, giving up; use -sA, -sK "
+"or -sP to override"
+msgstr ""
+"le répertoire orig « %s » existe déjà, pas de modification, abandon ; "
+"utiliser -sA, -sK ou -sP pour forcer"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "unable to check for existence of orig directory '%s'"
+msgstr "impossible de vérifier l'existence du répertoire orig « %s »"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "the diff modifies the following upstream files: %s"
+msgstr "le fichier de différences modifie les fichiers amont suivants : %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid ""
+"use the '3.0 (quilt)' format to have separate and documented changes to "
+"upstream files, see dpkg-source(1)"
+msgstr ""
+"choisissez le format « 3.0 (quilt) » pour utiliser des modifications "
+"séparées et documentées dans les sources amont, voir dpkg-source(1)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "aborting due to --abort-on-upstream-changes"
+msgstr "abandon suite à --abort-on-upstream-changes"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+msgid "unrepresentable changes to source"
+msgstr "modifications non représentables des sources"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "include removed files in the patch"
+msgstr "inclure les fichiers supprimés dans le patch"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "include timestamp in the patch"
+msgstr "inclure l'horodatage dans le patch"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "include binary files in the tarball"
+msgstr "inclure les fichiers binaires dans l'archive"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "do not prepare build tree by applying patches"
+msgstr ""
+"ne pas préparer l’arborescence de construction en appliquant des correctifs"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "do not unapply patches if previously applied"
+msgstr "ne pas enlever les correctifs s'ils ont été appliqués précédemment"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "unapply patches if previously applied (default)"
+msgstr ""
+"enlever les correctifs s'ils ont été appliqués précédemment (comportement "
+"par défaut)"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "create an empty original tarball if missing"
+msgstr "créer une archive originale vide si elle est absente"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "record generated patches, instead of aborting"
+msgstr "enregistrer les correctifs générés au lieu d'abandonner"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "do not extract debian tarball into upstream sources"
+msgstr "ne pas extraire pas l'archive debian dans les sources amont"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "do not apply patches at the end of the extraction"
+msgstr "ne pas appliquer les patchs à la fin de l'extraction"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "duplicate files in %s source package: %s"
+msgstr "fichiers mentionnés deux fois dans le paquet source %s : %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "missing orig.tar or debian.tar file in v2.0 source package"
+msgstr "fichier orig.tar ou debian.tar manquant dans un paquet source v2.0"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "mismatched orig.tar %s for signature %s in source package"
+msgstr ""
+"fichier orig.tar %s incompatible avec la signature %s dans le paquet source"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "missing addon orig.tar for signature %s in source package"
+msgstr ""
+"complément orig.tar manquant pour la signature %s dans le paquet source"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "mismatched addon orig.tar %s for signature %s in source package"
+msgstr ""
+"complément orig.tar %s incompatible avec la signature %s dans le paquet "
+"source"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "required removal of '%s' installed by original tarball"
+msgstr ""
+"suppression indispensable de « %s » installé par l'archive tar originale"
+
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "unapplying %s"
+msgstr "retrait de %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "no upstream tarball found at %s"
+msgstr "pas de tarball de sources amont à %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "patches are not applied, applying them now"
+msgstr "les correctifs n'ont pas été appliqués, ils vont l'être maintenant"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "several orig.tar files found (%s and %s) but only one is allowed"
+msgstr ""
+"plusieurs fichiers orig.tar ont été trouvés (%s et %s) mais un seul est "
+"autorisé"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "copy of the debian directory"
+msgstr "copie du répertoire debian"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "local changes detected, the modified files are:"
+msgstr "modifications locales détectées, les fichiers modifiés sont :"
+
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Package/V3/Bzr.pm
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+#, perl-format
+msgid "-b takes only one parameter with format '%s'"
+msgstr "-b n'utilise qu'un paramètre avec le format « %s »"
+
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot represent change to %s: %s"
+msgstr "impossible d'identifier les changements de %s : %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Patch.pm
+msgid "binary file contents changed"
+msgstr "contenu d'un fichier binaire modifié"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid ""
+"add %s in debian/source/include-binaries if you want to store the modified "
+"binary in the debian tarball"
+msgstr ""
+"ajoutez %s dans debian/source/include-binaries si vous souhaitez conserver "
+"le binaire modifié dans le ficher tar debian"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid ""
+"Hint: make sure the version in debian/changelog matches the unpacked source "
+"tree"
+msgstr ""
+"Conseil : assurez-vous que la version dans « debian/changelog » correspond à "
+"l'arbre source extrait"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "you can integrate the local changes with %s"
+msgstr "vous pouvez intégrer les modifications locales avec %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "aborting due to unexpected upstream changes, see %s"
+msgstr "abandon suite à des modifications amont inattendues, voir %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "local changes have been recorded in a new patch: %s"
+msgstr ""
+"les modifications locales ont été enregistrées dans un nouveau patch: %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Package/V3/Quilt.pm
+#, perl-format
+msgid "cannot remove %s"
+msgstr "impossible de supprimer %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Package/V3/Quilt.pm
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "failed to copy %s to %s"
+msgstr "impossible de copier %s en %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "cannot register changes in %s, this patch already exists"
+msgstr ""
+"impossible d'enregistrer les changements dans %s, le fichier de différence "
+"existe déjà"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "patch file '%s' doesn't exist"
+msgstr "le fichier de correctifs « %s » n'existe pas"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "there are no local changes to record"
+msgstr "aucune modification locale à enregistrer"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "Enter the desired patch name: "
+msgstr "Saisissez le nom du fichier de différences : "
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "no patch name given; cannot proceed"
+msgstr "aucun nom de patch n'est indiqué ; impossible de poursuivre"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "cannot find an editor"
+msgstr "impossible de trouver un éditeur"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+msgid "cannot unpack bzr-format source package because bzr is not in the PATH"
+msgstr ""
+"impossible de décompresser le paquet source au format bzr car la commande "
+"bzr n'est pas dans PATH"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+#, perl-format
+msgid ""
+"source directory is not the top directory of a bzr repository (%s/.bzr not "
+"present), but Format bzr was specified"
+msgstr ""
+"le répertoire source n'est pas le sommet d'un dépôt bzr (%s/.bzr absent) "
+"bien que le format bzr ait été indiqué"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+#, perl-format
+msgid "%s is a symlink"
+msgstr "%s est un lien symbolique"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+#, perl-format
+msgid "%s is a symlink to outside %s"
+msgstr "%s est un lien symbolique vers l'extérieur %s"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+msgid "doesn't contain a bzr repository"
+msgstr "ne contient pas de dépôt bzr"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+msgid "bzr status exited nonzero"
+msgstr "état de sortie non nul pour bzr"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "uncommitted, not-ignored changes in working directory: %s"
+msgstr ""
+"non « commité », modifications non ignorées dans le répertoire de "
+"travail : %s"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+msgid "format v3.0 (bzr) uses only one source file"
+msgstr "le format v3.0 (bzr) n'utilise qu'un seul fichier source"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+#, perl-format
+msgid "expected %s, got %s"
+msgstr "%s attendu, %s reçu"
+
+#: scripts/Dpkg/Source/Package/V3/Custom.pm
+msgid "define the format of the generated source package"
+msgstr "définir le format du paquet source généré"
+
+#: scripts/Dpkg/Source/Package/V3/Custom.pm
+msgid "Format '3.0 (custom)' is only used to create source packages"
+msgstr ""
+"Le format « 3.0 (personnalisé) » (« 3.0 (custom) ») n'est utilisé que pour "
+"créer des paquets source"
+
+#: scripts/Dpkg/Source/Package/V3/Custom.pm
+msgid "no files indicated on command line"
+msgstr "pas de fichiers indiqués à la ligne de commande"
+
+#: scripts/Dpkg/Source/Package/V3/Custom.pm
+msgid "--target-format option is missing"
+msgstr "l'option --target-format est absente"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "cannot unpack git-format source package because git is not in the PATH"
+msgstr ""
+"impossible de décompresser le paquet source au format git car la commande "
+"git n'est pas dans PATH"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid ""
+"source directory is not the top directory of a git repository (%s/.git not "
+"present), but Format git was specified"
+msgstr ""
+"le répertoire source n'est pas le sommet d'un dépôt git (%s/.git absent) "
+"bien que le format git ait été indiqué"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "git repository %s uses submodules; this is not yet supported"
+msgstr ""
+"le dépôt git %s utilise des sous-modules ; cela n'est actuellement pas géré"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "specify a git <ref> to include in the git bundle"
+msgstr "spécifier une <ref> git à inclure dans le paquet git"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "create a shallow clone with <number> depth"
+msgstr "créer un clone vide avec <nombre> niveaux de profondeur"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "doesn't contain a git repository"
+msgstr "ne contient pas de dépôt git"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "git ls-files exited nonzero"
+msgstr "état de sortie non nul de git ls-files"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "creating shallow clone with depth %s"
+msgstr ""
+"création d'un clone de surface (« shallow clone ») avec la profondeur %s"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "bundling: %s"
+msgstr "jonction (bundling) : %s"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "format v3.0 (git) uses only one .git file"
+msgstr "le format v3.0 (git) n'utilise qu'un fichier .git"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "format v3.0 (git) uses only one .gitshallow file"
+msgstr "le format v3.0 (git) n'utilise qu'un fichier .gitshallow"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "format v3.0 (git) unknown file: %s"
+msgstr "fichier inconnu pour le format v3.0 (git) : %s"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "format v3.0 (git) expected %s"
+msgstr "le format v3.0 (git) attend %s"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "cloning %s"
+msgstr "clonage de %s"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "setting up shallow clone"
+msgstr "configuration du clone de surface"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "setting remote %s to %s"
+msgstr "définir la source distante %s à %s"
+
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+msgid "multiple tarfiles in native source package"
+msgstr "plusieurs archives tar dans le paquet source natif"
+
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+#, perl-format
+msgid "unrecognized file for a native source package: %s"
+msgstr "fichier non reconnu pour un paquet source natif : %s"
+
+#: scripts/Dpkg/Source/Package/V3/Quilt.pm
+msgid "use a single debianization patch"
+msgstr "utiliser un seul patch de débianisation"
+
+#: scripts/Dpkg/Source/Package/V3/Quilt.pm
+msgid "accept quilt metadata <version> even if unknown"
+msgstr ""
+"accepter les métadonnées de Quilt en <version> même si elle est inconnue"
+
+#: scripts/Dpkg/Source/Package/V3/Quilt.pm
+#, perl-format
+msgid "can't create symlink %s"
+msgstr "impossible de lire le lien symbolique %s"
+
+#: scripts/Dpkg/Source/Package/V3/Quilt.pm
+#, perl-format
+msgid "using patch list from %s"
+msgstr "utilisation de la liste de patchs de %s"
+
+#: scripts/Dpkg/Source/Package/V3/Quilt.pm
+#, perl-format
+msgid "unsupported version of the quilt metadata: %s"
+msgstr "version inconnue des métadonnées de quilt : %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "file %s has no final newline (either original or modified version)"
+msgstr ""
+"fichier %s sans caractère nouvelle ligne terminal (soit l'original soit la "
+"version modifiée)"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "unknown line from diff -u on %s: '%s'"
+msgstr "ligne inconnue dans diff -u sur %s : « %s »"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "failed to write"
+msgstr "échec d'écriture"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff on %s"
+msgstr "diff sur %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot stat file %s"
+msgstr "stat impossible pour le fichier %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot read link %s"
+msgstr "impossible de lire le lien %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "device or socket is not allowed"
+msgstr "périphérique ou socket non autorisé"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "unknown file type"
+msgstr "type de fichier inconnu"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "ignoring deletion of file %s"
+msgstr "suppression du fichier %s ignorée"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "ignoring deletion of file %s, use --include-removal to override"
+msgstr ""
+"suppression du fichier %s ignorée, utilisez --include-removal pour la "
+"prendre en compte"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "ignoring deletion of directory %s"
+msgstr "suppression du répertoire %s ignorée"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "ignoring deletion of symlink %s"
+msgstr "suppression du lien symbolique %s ignorée"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "newly created empty file '%s' will not be represented in diff"
+msgstr ""
+"le fichier vide « %s », nouvellement créé, ne sera pas représenté dans le "
+"fichier de différences"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "executable mode %04o of '%s' will not be represented in diff"
+msgstr ""
+"le mode exécutable %04o de « %s » ne sera pas représenté dans le fichier de "
+"différences"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "special mode %04o of '%s' will not be represented in diff"
+msgstr ""
+"le mode spécial %04o de « %s » ne sera pas représenté dans le fichier de "
+"différences"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot represent change to %s:"
+msgstr "impossible d'identifier les changements de %s :"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid " new version is %s"
+msgstr " la nouvelle version est %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid " old version is %s"
+msgstr " l'ancienne version est %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff %s patches file with C-style encoded filename"
+msgstr ""
+"diff %s modifie un fichier dont le nom est encodé avec une chaîne de type C"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "expected ^--- in line %d of diff '%s'"
+msgstr "dans la ligne %d du fichier de différences « %s », « ^--- » attendu"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff '%s' patches file with name ending in .dpkg-orig"
+msgstr "diff « %s » modifie un fichier dont le nom de termine par .dpkg-orig"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff '%s' finishes in middle of ---/+++ (line %d)"
+msgstr "diff « %s » se termine au milieu de ---/+++ (ligne %d)"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "line after --- isn't as expected in diff '%s' (line %d)"
+msgstr "ligne après --- n'est pas comme attendu dans diff « %s » (ligne %d)"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "none of the filenames in ---/+++ are valid in diff '%s' (line %d)"
+msgstr ""
+"aucun des fichiers indiqués par « ---/+++ » n'est valable dans le fichier de "
+"différences « %s » (ligne %d)"
+
+#: scripts/Dpkg/Source/Patch.pm scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "%s contains an insecure path: %s"
+msgstr "%s contient un chemin d'accès non sûr : %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff %s modifies file %s through a symlink: %s"
+msgstr ""
+"le fichier de différences %s modifie le fichier %s via un lien "
+"symbolique : %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "original and modified files are /dev/null in diff '%s' (line %d)"
+msgstr ""
+"les fichiers originaux et modifiés sont /dev/null dans le fichier de "
+"différences %s (ligne %d)"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "file removal without proper filename in diff '%s' (line %d)"
+msgstr "suppression de fichier sans nom approprié dans diff « %s » (ligne %d)"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff %s removes a non-existing file %s (line %d)"
+msgstr ""
+"le fichier de différences %s supprime un fichier %s qui n'existe pas (ligne "
+"%d)"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff '%s' patches something which is not a plain file"
+msgstr "diff « %s » modifie un objet qui n'est pas un fichier texte"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid ""
+"diff '%s' patches files multiple times; split the diff in multiple files or "
+"merge the hunks into a single one"
+msgstr ""
+"le diff « %s » corrige les fichiers plusieurs fois ; divisez le fichier de "
+"différences en plusieurs fichiers ou fusionnez les fichiers en un seul"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff '%s' patches file %s more than once"
+msgstr "le fichier de différences « %s » modifie le fichier %s plus d’une fois"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "unexpected end of diff '%s'"
+msgstr "fin inattendue de diff « %s »"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "expected [ +-] at start of line %d of diff '%s'"
+msgstr "[ +-] attendu au début de la ligne %d du fichier de différences « %s »"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "expected ^@@ at line %d of diff '%s'"
+msgstr "^@@ attendu ligne %d du fichier de différences « %s »"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff '%s' doesn't contain any patch"
+msgstr "le fichier de différences « %s » ne contient pas de changement"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "remove patch backup file %s"
+msgstr "suppression du fichier de différences de sauvegarde %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "nonexistent"
+msgstr "inexistant"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "plain file"
+msgstr "fichier texte"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "directory"
+msgstr "répertoire"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "symlink to %s"
+msgstr "lien symbolique vers %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "block device"
+msgstr "périphérique bloc"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "character device"
+msgstr "périphérique caractère"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "named pipe"
+msgstr "tube nommé"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "named socket"
+msgstr "« socket » nommé"
+
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "cannot mkdir %s"
+msgstr "impossible de créer le répertoire %s"
+
+#: scripts/Dpkg/Source/Quilt.pm
+msgid "the patch has fuzz which is not allowed, or is malformed"
+msgstr "le patch ne s'applique pas proprement (« fuzz »), ou est mal-formé"
+
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "if patch '%s' is correctly applied by quilt, use '%s' to update it"
+msgstr ""
+"si le correctif « %s » est correctement appliqué par quilt, utiliser « %s » "
+"pour le mettre à jour"
+
+#: scripts/Dpkg/Source/Quilt.pm
+msgid ""
+"if the file is present in the unpacked source, make sure it is also present "
+"in the orig tarball"
+msgstr ""
+"si le fichier est présent dans la source décompressée, vérifiez qu'il est "
+"également présent dans l’archive tar d'origine"
+
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "%s should be a directory or non-existing"
+msgstr "%s devrait être un répertoire ou ne pas exister"
+
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "%s should be a file or non-existing"
+msgstr "%s devrait être un fichier ou ne pas exister"
+
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid ""
+"the series file (%s) contains unsupported options ('%s', line %s); dpkg-"
+"source might fail when applying patches"
+msgstr ""
+"le fichier « series » (%s) contient des options non gérées (« %s », ligne "
+"%s) ; dpkg-source pourrait échouer dans l'application des correctifs"
+
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "restoring quilt backup files for %s"
+msgstr "restauration des fichiers de sauvegarde de quilt pour %s"
+
+#: scripts/Dpkg/Substvars.pm
+#, perl-format
+msgid "bad line in substvars file %s at line %d"
+msgstr "fichier substvars %s : ligne %d mal formée"
+
+#: scripts/Dpkg/Substvars.pm
+#, perl-format
+msgid "invalid source version %s"
+msgstr "version source non autorisée dans %s"
+
+#: scripts/Dpkg/Substvars.pm
+#, perl-format
+msgid "too many substitutions - recursive ? - in '%s'"
+msgstr "trop de substitutions - mode récursif ? - dans « %s »"
+
+#: scripts/Dpkg/Substvars.pm
+#, perl-format
+msgid "obsolete substitution variable ${%s}"
+msgstr "variable de substitution obsolète ${%s}"
+
+#: scripts/Dpkg/Substvars.pm
+#, perl-format
+msgid "substitution variable ${%s} used, but is not defined"
+msgstr "la variable de substitution ${%s} est utilisée mais n'est pas définie"
+
+#: scripts/Dpkg/Substvars.pm
+#, perl-format
+msgid "substitution variable ${%s} unused, but is defined"
+msgstr "la variable de substitution ${%s} est définie mais n’est pas utilisée"
+
+#: scripts/Dpkg/Vars.pm
+#, perl-format
+msgid "source package name '%s' is illegal: %s"
+msgstr "le nom du paquet source « %s » n'est pas autorisé : %s"
+
+#: scripts/Dpkg/Vars.pm
+#, perl-format
+msgid "source package has two conflicting values - %s and %s"
+msgstr "le paquet source a deux valeurs en conflit : %s et %s"
+
+#: scripts/Dpkg/Vendor.pm
+#, perl-format
+msgid ""
+"%s origin filename is deprecated; it should have only alphanumeric or dash "
+"characters"
+msgstr ""
+"le nom de fichier d'origine %s est obsolète ; il ne doit comporter que des "
+"caractères alphanumériques ou des tirets"
+
+#: scripts/Dpkg/Vendor.pm
+#, perl-format
+msgid ""
+"%s module name is deprecated; it should be capitalized with only "
+"alphanumeric characters"
+msgstr ""
+"le nom du module %s est obsolète ; il doit être écrit en capitales et ne "
+"comporter que des caractères alphanumériques"
+
+#: scripts/Dpkg/Vendor/Debian.pm
+#, perl-format
+msgid "unknown host architecture '%s'"
+msgstr "architecture hôte « %s » inconnue"
+
+#: scripts/Dpkg/Vendor/Ubuntu.pm
+msgid ""
+"Version number suggests Ubuntu changes, but Maintainer: does not have Ubuntu "
+"address"
+msgstr ""
+"Le numéro de version indique des modifications provenant d'Ubuntu mais le "
+"champ « Maintainer: » ne comporte pas d'adresse Ubuntu"
+
+#: scripts/Dpkg/Vendor/Ubuntu.pm
+msgid ""
+"Version number suggests Ubuntu changes, but there is no XSBC-Original-"
+"Maintainer field"
+msgstr ""
+"Le numéro de version indique des modifications provenant d'Ubuntu mais il "
+"n'existe pas de champ « XSBC-Original-Maintainer: »"
+
+#: scripts/Dpkg/Version.pm
+#, perl-format
+msgid "%s is not a valid version"
+msgstr "%s n'est pas une version valable"
+
+#: scripts/Dpkg/Version.pm
+msgid "version number cannot be empty"
+msgstr "le numéro de version ne peut pas être vide"
+
+#: scripts/Dpkg/Version.pm
+msgid "epoch part of the version number cannot be empty"
+msgstr "la partie d'ère (« epoch ») du numéro de version ne doit pas être vide"
+
+#: scripts/Dpkg/Version.pm
+msgid "upstream version cannot be empty"
+msgstr "le numéro de version amont ne peut pas être vide"
+
+#: scripts/Dpkg/Version.pm
+msgid "revision cannot be empty"
+msgstr "le numéro de révision ne peut pas être vide"
+
+#: scripts/Dpkg/Version.pm
+msgid "version number does not start with digit"
+msgstr "le numéro de version ne commence par par un chiffre"
+
+#: scripts/Dpkg/Version.pm
+#, perl-format
+msgid "version number contains illegal character '%s'"
+msgstr "le numéro de version contient un caractère « %s » non autorisé"
+
+#: scripts/Dpkg/Version.pm
+#, perl-format
+msgid "epoch part of the version number is not a number: '%s'"
+msgstr ""
+"la partie d'ère (« epoch ») du numéro de version n'est pas un nombre : « %s »"
+
+#, fuzzy, perl-format
+#~| msgid "cannot exec dpkg"
+#~ msgid "cannot execute %s program"
+#~ msgstr "impossible d'exécuter dpkg"
+
+#, fuzzy, perl-format
+#~| msgid "cannot stat file %s"
+#~ msgid "cannot write signature file %s"
+#~ msgstr "stat impossible pour le fichier %s"
+
+#, fuzzy, perl-format
+#~| msgid "could not verify signature on %s since gpg isn't installed"
+#~ msgid "cannot import key in %s since GnuPG is not installed"
+#~ msgstr ""
+#~ "impossible de vérifier la signature sur %s puisque gpg n'est pas installé"
+
+#, fuzzy, perl-format
+#~| msgid "cannot rename %s to %s"
+#~ msgid "cannot import key %s into %s"
+#~ msgstr "impossible de renommer %s en %s"
+
+#, fuzzy, perl-format
+#~| msgid "could not verify signature on %s since gpg isn't installed"
+#~ msgid "cannot verify signature on %s since GnuPG is not installed"
+#~ msgstr ""
+#~ "impossible de vérifier la signature sur %s puisque gpg n'est pas installé"
+
+#, fuzzy, perl-format
+#~| msgid "building %s using existing %s"
+#~ msgid "verifying %s using existing %s"
+#~ msgstr "construction de %s en utilisant le %s existant"
+
+#~ msgid "parse changes file"
+#~ msgstr "analyse du fichier changes"
+
+#~ msgid "dpkg-genchanges"
+#~ msgstr "dpkg-genchanges"
+
+#, fuzzy, perl-format
+#~| msgid "failed to parse line in %s: %s"
+#~ msgid "failed to import key in %s"
+#~ msgstr "impossible d'analyser une ligne dans %s : %s"
+
+#, perl-format
+#~ msgid "failed to verify signature on %s"
+#~ msgstr "impossible de vérifier la signature sur %s"
+
+#~ msgid "error occurred while parsing %s"
+#~ msgstr "erreur rencontrée lors de l'analyse de %s"
+
+#~ msgid "error occurred while parsing %s field: %s"
+#~ msgstr "erreur rencontrée lors de l'analyse du cmap %s : %s"
+
+#~ msgid "'%s' is not a legal architecture string"
+#~ msgstr "« %s » n'est pas une architecture autorisée"
+
+#~ msgid "badly formed package name in files list file, line %d"
+#~ msgstr ""
+#~ "nom de paquet mal formé à la ligne %d du fichier de liste des fichiers"
+
+#~ msgid ""
+#~ "binary package stanza %s is using an obsolete Build-Profiles field syntax"
+#~ msgstr ""
+#~ "l'instance du paquet binaire %s utilise une syntaxe obsolète du champ "
+#~ "Build-Profiles"
+
+#~ msgid "format variant must be in lowercase"
+#~ msgstr "la variante de ce format doit être écrite en minuscules"
+
+#~ msgid "invalid Format field '%s'"
+#~ msgstr "champ Format « %s » erroné"
+
+#~ msgid "cannot create pipe for %s"
+#~ msgstr "impossible de créer le tube pour %s"
+
+#~ msgid "tail of %s"
+#~ msgstr "fin de %s"
+
+#~ msgid "unknown substitution variable ${%s}"
+#~ msgstr "variable de substitution inconnue ${%s}"
+
+#~ msgid "%s died from signal %s"
+#~ msgstr "%s tué par le signal %s"
+
+#~ msgid "'hardening' flag found but 'hardening-wrapper' not installed"
+#~ msgstr "drapeau « hardening » mais « hardening-wrapper » n'est pas installé"
+
+#~ msgid "overriding %s in environment: %s"
+#~ msgstr "remplacement de %s dans l'environnement : %s"
+
+#~ msgid "failed to sign .dsc and .changes file"
+#~ msgstr "échec de signature des fichiers .dsc et .changes"
+
+#, fuzzy
+#~| msgid "illegal package name '%s': %s"
+#~ msgid "illegal .buildinfo ID '%s': %s"
+#~ msgstr "nom de paquet « %s » non autorisé : %s"
+
+#~ msgid "cannot open new output control file '%s'"
+#~ msgstr "impossible d'ouvrir le nouveau fichier de contrôle en sortie %s"
+
+#~ msgid "deprecated substitution variable ${%s}"
+#~ msgstr "variable de substitution obsolète ${%s}"
+
+#~ msgid "missing library directory"
+#~ msgstr "répertoire des bibliothèques manquant"
+
+#~ msgid "Usage: %s [<option>...] [<changelog-file>]"
+#~ msgstr "Syntaxe : %s [<option>...] [<fichier de changements>]"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " --file <file> changelog <file> to parse (defaults to '-').\n"
+#~ " -l, --label <file> changelog <file> name to use in error "
+#~ "messages.\n"
+#~ " --format <output-format>\n"
+#~ " set the output format (defaults to 'dpkg').\n"
+#~ " --all include all changes.\n"
+#~ " -s, --since <version> include all changes later than <version>.\n"
+#~ " -v <version> ditto.\n"
+#~ " -u, --until <version> include all changes earlier than <version>.\n"
+#~ " -f, --from <version> include all changes equal or later than "
+#~ "<version>.\n"
+#~ " -t, --to <version> include all changes up to or equal than "
+#~ "<version>.\n"
+#~ " -c, --count <number> include <number> entries from the top (or tail "
+#~ "if\n"
+#~ " <number> is lower than 0).\n"
+#~ " -n <number> ditto.\n"
+#~ " -o, --offset <number> change starting point for --count, counted "
+#~ "from\n"
+#~ " the top (or tail if <number> is lower than "
+#~ "0).\n"
+#~ " -?, --help print usage information.\n"
+#~ " -V, --version print version information.\n"
+#~ msgstr ""
+#~ "Options :\n"
+#~ " --file <fichier> fichier de changements à analyser (« - » "
+#~ "par défaut).\n"
+#~ " -l, --label <fichier> nom de fichier de changements à utiliser "
+#~ "dans les messages d'erreur.\n"
+#~ " --format <format_sortie>\n"
+#~ " définir le format de sortie (« dpkg » par "
+#~ "défaut).\n"
+#~ " --all inclure toutes les modifications.\n"
+#~ " -s, --since<version> inclure toutes les modifications depuis "
+#~ "<version>.\n"
+#~ " -v <version> idem.\n"
+#~ " -u, --until <version> inclure toutes les modifications "
+#~ "antérieures à <version>.\n"
+#~ " -f, --from <version> inclure toutes les modifications depuis "
+#~ "<version> incluse.\n"
+#~ " -t, --to <version> inclure toutes les modifications "
+#~ "antérieures à <version> incluse.\n"
+#~ " -c, --count <nombre> inclure <nombre> entrées depuis le début\n"
+#~ " (ou bien les dernières si <nombre> est "
+#~ "inférieur à 0).\n"
+#~ " -n <nombre> idem.\n"
+#~ " -o, --offset <number> modifier le point de démarrage de --"
+#~ "count,\n"
+#~ " à partir du début (ou de la fin si "
+#~ "<nombre> est inférieur à 0).\n"
+#~ " -?, --help afficher l'aide.\n"
+#~ " -V, --version afficher la version.\n"
+
+#~ msgid "output format %s not supported"
+#~ msgstr "format de sortie %s non géré"
+
+#~ msgid "more than one file specified (%s and %s)"
+#~ msgstr "plus d'un fichier indiqué (%s et %s)"
+
+#~ msgid "format parser %s not executable"
+#~ msgstr "l'analyseur de format %s n'est pas exécutable"
+
+#~ msgid "output of changelog parser"
+#~ msgstr "affichage de l'analyseur de fichier de changements"
+
+#~ msgid "changelog parser %s"
+#~ msgstr "analyseur de fichier de changements : %s"
+
+#~ msgid "'%s' is not a legal architecture string."
+#~ msgid_plural "'%s' are not legal architecture strings."
+#~ msgstr[0] "« %s » n'est pas une architecture autorisée."
+#~ msgstr[1] "« %s » ne sont pas des architectures autorisées."
+
+#~ msgid ""
+#~ "More options are available but they depend on the source package format.\n"
+#~ "See dpkg-source(1) for more info."
+#~ msgstr ""
+#~ "Des options supplémentaires sont disponibles mais dépendent du format de "
+#~ "paquet source utilisé.\n"
+#~ "Veuillez consulter la page de manuel dpkg-source(1) pour plus "
+#~ "d'informations."
+
+#~ msgid "couldn't open %s for reading"
+#~ msgstr "lecture de %s impossible"
+
+#~ msgid "error closing %s (%s)"
+#~ msgstr "erreur en fermant %s (%s)"
+
+#~ msgid "couldn't parse date %s"
+#~ msgstr "impossible d'analyser la date %s"
+
+#~ msgid "%s: unrepresentable changes to source"
+#~ msgstr "%s : modifications non représentables des sources"
+
+#~ msgid "error closing %s ($? %d, $! '%s')"
+#~ msgstr "erreur en fermant %s ($? %d, $! `%s')"
+
+#~ msgid "open new substvars file '%s'"
+#~ msgstr "ouverture du nouveau fichier substvars %s"
+
+#~ msgid "open old varlist file '%s' for reading"
+#~ msgstr "lecture de l'ancien fichier varlist %s"
+
+#~ msgid "copy old entry to new varlist file '%s'"
+#~ msgstr "copie d'une ancienne entrée dans le nouveau fichier varlist %s"
+
+#~ msgid ""
+#~ "this is currently a non-fatal warning with -S, but will probably become "
+#~ "fatal in the future"
+#~ msgstr ""
+#~ "ceci est actuellement un avertissement sans conséquence avec -S, mais "
+#~ "sera un échec fatal dans le futur."
+
+#~ msgid "read changesdescription"
+#~ msgstr "lecture de changesdescription"
+
+#~ msgid "chdir for du to `%s'"
+#~ msgstr "chdir pour du vers %s"
+
+#~ msgid "du in `%s'"
+#~ msgstr "du dans %s"
+
+#~ msgid "du gave unexpected output `%s'"
+#~ msgstr "résultat inattendu de du %s"
+
+#~ msgid "used that one and ignored data from %s!"
+#~ msgstr "celui-ci a été ignoré et les données de %s ont été ignorées !"
+
+#~ msgid "package %s (filename %s) is repeat;"
+#~ msgstr "le paquet %s (nom %s) est répété ;"
+
+#~ msgid ""
+#~ "Usage: %s [<option>...] [<changelogfile>]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -?, --help print usage information\n"
+#~ " --version, -V print version information\n"
+#~ " --label, -l <file> name of the changelog file to\n"
+#~ " use in error messages\n"
+#~ " --file <file> changelog file to parse, defaults\n"
+#~ " to '-' (standard input)\n"
+#~ " --format <outputformat> see man page for list of available\n"
+#~ " output formats, defaults to 'dpkg'\n"
+#~ " for compatibility with dpkg-dev\n"
+#~ " --since, -s, -v <version> include all changes later than version\n"
+#~ " --until, -u <version> include all changes earlier than version\n"
+#~ " --from, -f <version> include all changes equal or later\n"
+#~ " than version\n"
+#~ " --to, -t <version> include all changes up to or equal\n"
+#~ " than version\n"
+#~ " --count, -c, -n <number> include <number> entries from the top\n"
+#~ " (or the tail if <number> is lower than "
+#~ "0)\n"
+#~ " --offset, -o <number> change the starting point for --count,\n"
+#~ " counted from the top (or the tail if\n"
+#~ " <number> is lower than 0)\n"
+#~ " --all include all changes\n"
+#~ msgstr ""
+#~ "Syntaxe : %s [<option>...] [<fichier_changelog>]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -?, --help afficher les informations d'utilisation\n"
+#~ " --version, -V afficher la version\n"
+#~ " --label, -l <fichier> nom du fichier de changements\n"
+#~ " à utiliser dans les messages d'erreur\n"
+#~ " --file <fichier> fichier de changements à analyser. La\n"
+#~ " valeur par défaut est « - » (entrée "
+#~ "standard)\n"
+#~ " --format <format_sortie> voir la page de manuel pour la liste\n"
+#~ " des formats de sortie. La valeur par\n"
+#~ " défaut est « dpkg » pour compatibilité\n"
+#~ " avec dpkg-dev\n"
+#~ " --since, -s, -v <version> inclure toutes les modifications depuis\n"
+#~ " cette version\n"
+#~ " --until, -u <version> inclure toutes les modifications "
+#~ "antérieures\n"
+#~ " à cette version\n"
+#~ " --from, -f <version> inclure toutes les modifications depuis\n"
+#~ " cette version incluse\n"
+#~ " --to, -t <version> inclure toutes les modifications "
+#~ "antérieures\n"
+#~ " à cette version, incluse\n"
+#~ " --count, -c, -n <nombre> inclure <nombre> entrées depuis le début\n"
+#~ " (ou bien les dernières si <nombre> est "
+#~ "inférieur à 0)\n"
+#~ " --offset, -o <number> modifier le point de démarrage de --"
+#~ "count,\n"
+#~ " à partir du début (ou de la fin si\n"
+#~ " <nombre> est inférieur à 0)\n"
+#~ " --all inclure toutes les modifications\n"
+
+#~ msgid "checksum program gave bogus output `%s'"
+#~ msgstr ""
+#~ "le programme de calcul de somme de contrôle a fourni un résultat "
+#~ "anormal : « %s »"
+
+#~ msgid ""
+#~ "Options passed to dpkg-architecture:\n"
+#~ " -a<arch> Debian architecture we build for.\n"
+#~ " -t<system> set GNU system type."
+#~ msgstr ""
+#~ "Options passées à dpkg-architecture:\n"
+#~ " -a<arch> architecture Debian pour qui se fait la construction.\n"
+#~ " -t<système> définir le type de système GNU."
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -a<debian-arch> set current Debian architecture.\n"
+#~ " -t<gnu-system> set current GNU system type.\n"
+#~ " -f force flag (override variables set in environment)."
+#~ msgstr ""
+#~ "Options:\n"
+#~ " -a<debian-arch> définir l'architecture actuelle.\n"
+#~ " -t<gnu-system> définir le type de système GNU.\n"
+#~ " -f drapeau de forçage (outrepasse les variables\n"
+#~ " définies dans l'environnement)."
+
+#~ msgid ""
+#~ "need a command (-x, -b, --before-build, --after-build, --print-format, --"
+#~ "commit)"
+#~ msgstr ""
+#~ "a besoin d'une commande (-x, -b, --before-build, --after-build, --print-"
+#~ "format, --commit)"
+
+#~ msgid "only one of -x, -b or --print-format allowed, and only once"
+#~ msgstr ""
+#~ "une seule option -x, -b ou --print-format est autorisée, et une seule fois"
+
+#~ msgid "binary-only upload - not including any source code"
+#~ msgstr "envoi d'un binaire - aucune inclusion de code source"
+
+#, fuzzy
+#~| msgid "diff `%s' patches file with name ending .dpkg-orig"
+#~ msgid "diff %s patches file with unknown escape sequence \\%s"
+#~ msgstr ""
+#~ "diff « %s » modifie un fichier dont le nom de termine par .dpkg-orig"
+
+#~ msgid "open new files list file"
+#~ msgstr "ouverture du nouveau fichier de liste des fichiers"
+
+#~ msgid "copy old entry to new files list file"
+#~ msgstr ""
+#~ "copie de l'ancienne entrée dans le nouveau fichier de liste des fichiers"
+
+#~ msgid "read old files list file"
+#~ msgstr "lecture du nouveau fichier de liste des fichiers"
+
+#~ msgid "write new entry to new files list file"
+#~ msgstr ""
+#~ "écriture de la nouvelle entrée dans le nouveau fichier de liste des "
+#~ "fichiers"
+
+#~ msgid "close new files list file"
+#~ msgstr "fermeture du nouveau fichier de liste des fichiers"
+
+#~ msgid "cannot read files list file"
+#~ msgstr "impossible de lire le fichier de liste des fichiers."
+
+#~ msgid "duplicate files list entry for package %s (line %d)"
+#~ msgstr ""
+#~ "entrée en double dans le fichier de liste des fichiers pour le paquet %s "
+#~ "(ligne %d) "
+
+#~ msgid "close old files list file"
+#~ msgstr "fermeture de l'ancien fichier de liste des fichiers"
+
+#~ msgid "internal error"
+#~ msgstr "erreur interne"
+
+#~ msgid "fatal error occurred while parsing input"
+#~ msgstr "erreur fatale rencontrée lors de l'analyse des données"
+
+#~ msgid ""
+#~ "\n"
+#~ "Usage: %s [<options> ...]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -r<gain-root-command>\n"
+#~ " command to gain root privileges (default is fakeroot).\n"
+#~ " -R<rules> rules file to execute (default is debian/rules).\n"
+#~ " -p<sign-command>\n"
+#~ " -d do not check build dependencies and conflicts.\n"
+#~ " -D check build dependencies and conflicts.\n"
+#~ " -T<target> call debian/rules <target> with the proper environment\n"
+#~ " --as-root ensure -T calls the target with root rights\n"
+#~ " -j[<number>] specify jobs to run simultaneously } passed to debian/"
+#~ "rules\n"
+#~ " -k<keyid> the key to use for signing.\n"
+#~ " -sgpg the sign-command is called like GPG.\n"
+#~ " -spgp the sign-command is called like PGP.\n"
+#~ " -us unsigned source.\n"
+#~ " -uc unsigned changes.\n"
+#~ " -a<arch> Debian architecture we build for (implies -d).\n"
+#~ " -b binary-only, do not build source. } also passed to\n"
+#~ " -B binary-only, no arch-indep files. } dpkg-genchanges\n"
+#~ " -A binary-only, only arch-indep files. }\n"
+#~ " -S source only, no binary files. }\n"
+#~ " -F normal full build (binaries and sources).\n"
+#~ " -t<system> set GNU system type. } passed to dpkg-"
+#~ "architecture\n"
+#~ " -v<version> changes since version <version>. }\n"
+#~ " -m<maint> maintainer for package is <maint>. }\n"
+#~ " -e<maint> maintainer for release is <maint>. } only passed\n"
+#~ " -C<descfile> changes are described in <descfile>. } to dpkg-"
+#~ "genchanges\n"
+#~ " -si (default) src includes orig if new upstream. }\n"
+#~ " -sa uploaded src always includes orig. }\n"
+#~ " -sd uploaded src is diff and .dsc only. }\n"
+#~ " -sn force Debian native source format. }\n"
+#~ " -s[sAkurKUR] see dpkg-source for explanation. } only passed\n"
+#~ " -z<level> compression level of source } to dpkg-"
+#~ "source\n"
+#~ " -Z<compressor> compression to use for source }\n"
+#~ " -nc do not clean source tree (implies -b).\n"
+#~ " -tc clean source tree when finished.\n"
+#~ " -ap add pause before starting signature process.\n"
+#~ " -i[<regex>] ignore diffs of files matching regex. } only passed\n"
+#~ " -I[<pattern>] filter out files when building tarballs. } to dpkg-"
+#~ "source\n"
+#~ " --source-option=<opt>\n"
+#~ "\t\t pass option <opt> to dpkg-source\n"
+#~ " --changes-option=<opt>\n"
+#~ "\t\t pass option <opt> to dpkg-genchanges\n"
+#~ " --admindir=<directory>\n"
+#~ " change the administrative directory.\n"
+#~ " -h, --help show this help message.\n"
+#~ " --version show the version.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Syntaxe : %s [<options> ...]\n"
+#~ "\n"
+#~ "Options :\n"
+#~ " -r<commande-gain-root>\n"
+#~ " commande pour obtenir les privilèges administrateur\n"
+#~ " (par défaut, fakeroot).\n"
+#~ " -R<rules> fichier rules à exécuter (par défaut, debian/rules).\n"
+#~ " -p<commande-sign>\n"
+#~ " -d ne pas vérifier les dépendances de construction et les "
+#~ "conflits.\n"
+#~ " -D vérifier les dépendances de construction et les "
+#~ "conflits.\n"
+#~ " -T<cible> lancer « debian/rules <cible> » avec l'environnement\n"
+#~ " adéquat.\n"
+#~ " --as-root avec -T, appeler la cible avec les droits du\n"
+#~ " superutilisateur.\n"
+#~ " -j[<nombre>] spécifier le nombre de tâches à exécuter "
+#~ "simultanément } \n"
+#~ " passé à debian/rules\n"
+#~ " -k<id-clé> clé à utiliser pour la signature.\n"
+#~ " -sgpg la commande de signature est appelée comme GPG.\n"
+#~ " -spgp la commande de signature est appelée comme PGP.\n"
+#~ " -us fichier source non signé.\n"
+#~ " -uc fichier changes non signé.\n"
+#~ " -a<arch> architecture Debian de construction (implique -d).\n"
+#~ " -b binaire uniquement, ne pas construire } également\n"
+#~ " les sources.} } passé\n"
+#~ " -B binaire uniquement, pas de fichier } à\n"
+#~ " « arch-indep ». } dpkg-\n"
+#~ " -A binaire uniquement, seulement les } genchanges\n"
+#~ " fichiers « arch-indep » }\n"
+#~ " -S source uniquement, pas de fichier }\n"
+#~ " binaire. }\n"
+#~ " -F construction complète normale (binaires et sources).\n"
+#~ " -t<système> définir le type système GNU. } passé à dpkg-"
+#~ "architecture\n"
+#~ " -v<version> changements depuis la version <version>. }\n"
+#~ " -m<resp> le responsable pour le paquet est <resp>. }\n"
+#~ " -e<resp> le responsable pour la publication est <resp>. } "
+#~ "uniquement passé\n"
+#~ " -C<fichier-desc> les changements sont décrits dans <fichier-desc>. } à "
+#~ "dpkg-genchanges\n"
+#~ " -si (défaut) src inclut l'orig si nouvelle version amont. }\n"
+#~ " -sa le source envoyé inclut toujours l'orig. }\n"
+#~ " -sd le source envoyé ne comprend que le diff et le .dsc. }\n"
+#~ " -sn force le format source natif Debian. }\n"
+#~ " -s[sAkurKUR] voir dpkg-source pour l'explication. } seulement "
+#~ "passé\n"
+#~ " -z<niveau> niveau de compression des sources } à dpkg-"
+#~ "source\n"
+#~ " -Z<compression>\n"
+#~ " type de compression à utiliser pour les sources }\n"
+#~ " -nc ne pas nettoyer l'arborescence des sources (implique -"
+#~ "b).\n"
+#~ " -tc nettoyer l'arborescence des sources à la fin.\n"
+#~ " -ap ajouter une pause avant de lancer le processus de "
+#~ "signature.\n"
+#~ " -i[<regex>] ignorer les différences de fichiers correspondant à "
+#~ "regex. } uniquement passé\n"
+#~ " -I[<format>] filtrer les fichiers lors de la construction des "
+#~ "tarballs. } à dpkg-source\n"
+#~ " --source-option=<opt>\n"
+#~ "\t\t passer l'option <opt> à dpkg-source\n"
+#~ " --changes-option=<opt>\n"
+#~ "\t\t passer l'option <opt> à dpkg-genchanges\n"
+#~ " --admindir=<répertoire>\n"
+#~ " changer le répertoire d'administration.\n"
+#~ " -h, --help afficher ce message d'aide.\n"
+#~ " --version afficher la version.\n"
+
+#~ msgid "PGP support is deprecated (see README.feature-removal-schedule)"
+#~ msgstr ""
+#~ "La gestion de PGP est obsolète (voir le fichier README.feature-removal-"
+#~ "schedule)."
+
+#~ msgid "will probably become fatal in the future."
+#~ msgstr "deviendra fatal dans le futur."
+
+#~ msgid ""
+#~ "-u, --udeb option is deprecated (see README.feature-removal-schedule)"
+#~ msgstr "-u, --udeb option obsolète (voir README.feature-removal-schedule)"
+
+#~ msgid ""
+#~ "This source package can only be manipulated using bzr, which is not in "
+#~ "the PATH."
+#~ msgstr ""
+#~ "Ce paquet source ne peut être manipulé qu'avez bzr, qui n'est pas "
+#~ "accessible dans le chemin de recherche par défaut (PATH)."
+
+#~ msgid "source package name `%s' starts with non-alphanum"
+#~ msgstr ""
+#~ "le nom du paquet source « %s » ne commence ni par une lettre ni par un "
+#~ "chiffre"
+
+#~ msgid ""
+#~ "\n"
+#~ "Copyright (C) 1999-2001 Marcus Brinkmann <brinkmd@debian.org>.\n"
+#~ "Copyright (C) 2004-2005 Scott James Remnant <scott@netsplit.com>."
+#~ msgstr ""
+#~ "\n"
+#~ "Copyright (C) 1999-2001 Marcus Brinkmann <brinkmd@debian.org>.\n"
+#~ "Copyright (C) 2004-2005 Scott James Remnant <scott@netsplit.com>."
+
+#, fuzzy
+#~| msgid ""
+#~| "\n"
+#~| "Copyright (C) 2010 Raphael Hertzog <hertzog@debian.org>."
+#~ msgid ""
+#~ "\n"
+#~ "Copyright (C) 2010-2011 Raphael Hertzog <hertzog@debian.org>."
+#~ msgstr ""
+#~ "\n"
+#~ "Copyright (C) 2010 Raphael Hertzog <hertzog@debian.org>."
+
+#~ msgid ""
+#~ "\n"
+#~ "Copyright (C) 1996 Ian Jackson.\n"
+#~ "Copyright (C) 2000 Wichert Akkerman\n"
+#~ "Copyright (C) 2007 Frank Lichtenheld"
+#~ msgstr ""
+#~ "\n"
+#~ "Copyright (C) 1996 Ian Jackson.\n"
+#~ "Copyright (C) 2000 Wichert Akkerman.\n"
+#~ "Copyright (C) 2007 Frank Lichtenheld."
+
+#, fuzzy
+#~| msgid "%s: export %s from dpkg-buildflags (origin: %s): %s\n"
+#~ msgid "%s: dpkg-buildflags (origin: %s): %s = %s\n"
+#~ msgstr "%s: export de %s depuis dpkg-buildflags (origine : %s): %s\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "Copyright (C) 1996 Ian Jackson."
+#~ msgstr ""
+#~ "\n"
+#~ "Copyright (C) 1996 Ian Jackson."
+
+#~ msgid ""
+#~ "\n"
+#~ "Copyright (C) 1996 Ian Jackson.\n"
+#~ "Copyright (C) 2000,2001 Wichert Akkerman."
+#~ msgstr ""
+#~ "\n"
+#~ "Copyright (C) 1996 Ian Jackson.\n"
+#~ "Copyright (C) 2000,2001 Wichert Akkerman."
+
+#~ msgid ""
+#~ "\n"
+#~ "Copyright (C) 1996 Ian Jackson.\n"
+#~ "Copyright (C) 2000,2002 Wichert Akkerman."
+#~ msgstr ""
+#~ "\n"
+#~ "Copyright (C) 1996 Ian Jackson.\n"
+#~ "Copyright (C) 2000,2002 Wichert Akkerman."
+
+#~ msgid ""
+#~ "\n"
+#~ "Copyright (C) 2007 Raphael Hertzog.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Copyright (C) 2007 Raphael Hertzog.\n"
+
+#~ msgid "Copyright (C) 2009-2010 Raphael Hertzog."
+#~ msgstr "Copyright (C) 2009-2010 Raphael Hertzog."
+
+#~ msgid ""
+#~ "\n"
+#~ "Copyright (C) 1996 Ian Jackson.\n"
+#~ "Copyright (C) 2001 Wichert Akkerman"
+#~ msgstr ""
+#~ "\n"
+#~ "Copyright (C) 1996 Ian Jackson.\n"
+#~ "Copyright (C) 2001 Wichert Akkerman"
+
+#~ msgid ""
+#~ "\n"
+#~ "Copyright (C) 1996 Ian Jackson.\n"
+#~ "Copyright (C) 2000 Wichert Akkerman.\n"
+#~ "Copyright (C) 2006 Frank Lichtenheld.\n"
+#~ "Copyright (C) 2007 Raphael Hertzog.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Copyright (C) 1996 Ian Jackson.\n"
+#~ "Copyright (C) 2000 Wichert Akkerman.\n"
+#~ "Copyright (C) 2006 Frank Lichtenheld.\n"
+#~ "Copyright (C) 2007 Raphael Hertzog.\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "Copyright (C) 1996 Ian Jackson\n"
+#~ "Copyright (C) 1997 Klee Dienes\n"
+#~ "Copyright (C) 2008 Raphael Hertzog"
+#~ msgstr ""
+#~ "\n"
+#~ "Copyright (C) 1996 Ian Jackson\n"
+#~ "Copyright (C) 1997 Klee Dienes\n"
+#~ "Copyright (C) 2008 Raphael Hertzog"
+
+#~ msgid ""
+#~ "\n"
+#~ "Copyright (C) 1996 Ian Jackson.\n"
+#~ "Copyright (C) 2005,2007 Frank Lichtenheld."
+#~ msgstr ""
+#~ "\n"
+#~ "Copyright (C) 1996 Ian Jackson.\n"
+#~ "Copyright (C) 2005,2007 Frank Lichtenheld."
+
+#~ msgid "1 to 3 args expected\n"
+#~ msgstr "de 1 à 3 paramètres attendus\n"
+
+#~ msgid "entry of APT's %s file"
+#~ msgstr "entrée du fichier %s d'APT"
+
+#~ msgid "no orig.tar file found"
+#~ msgstr "pas de fichier orig.tar trouvé"
+
+#~ msgid "exec %s"
+#~ msgstr "exec %s"
+
+#~ msgid "git config exited nonzero"
+#~ msgstr "état non nul de sortie pour la configuration de git"
+
+#~ msgid "executable bit set on %s; clearing"
+#~ msgstr "bit exécutable placé sur %s, suppression"
+
+#~ msgid "unable to remove `%s'"
+#~ msgstr "impossible de supprimer %s"
+
+#~ msgid "modifying .git/config to comment out some settings"
+#~ msgstr "modification de .git/config pour activer certains réglages"
+
+#~ msgid "unable to append to %s"
+#~ msgstr "impossible d'ajouter à %s"
+
+#~ msgid "The following setting(s) were disabled by dpkg-source"
+#~ msgstr "Le(s) réglage(s) suivant(s) est(sont) désactivé(s) par dpkg-source"
+
+#~ msgid "need -x or -b"
+#~ msgstr "-x ou -b nécessaire"
+
+#~ msgid "objdump on `%s'"
+#~ msgstr "objdump sur %s"
+
+#~ msgid "%s: set %s to default value: %s\n"
+#~ msgstr "%s : définir %s à la valeur par défaut : %s\n"
+
+#~ msgid "cannot open .dsc file %s"
+#~ msgstr "impossible d'ouvrir le fichier .dsc %s"
+
+#~ msgid "source control file %s"
+#~ msgstr "fichier de contrôle des sources %s"
+
+#~ msgid "Conflicting sizes `%u' and `%u' for file `%s'"
+#~ msgstr "Tailles en conflit : « %u » et « %u » pour le fichier « %s »"
+
+#~ msgid "fork for du"
+#~ msgstr "fork pour du"
+
+#~ msgid "source format `%s' discarded: %s"
+#~ msgstr "format source « %s » abandonné : %s"
+
+#~ msgid "fork for %s"
+#~ msgstr "fork for %s"
+
+#~ msgid "Unknown checksum algorithm `%s', ignoring"
+#~ msgstr "Algorithme de calcul de somme de contrôle %s inconnu et ignoré"
+
+#~ msgid "Checksums-%s field contains bad line `%s'"
+#~ msgstr "Le champ Checksums-%s contient une ligne mal formée « %s »"
+
+#~ msgid "file `%s' listed twice in Files field"
+#~ msgstr "le fichier « %s » est mentionné deux fois dans le champ Files"
+
+#~ msgid "applying all patches with %s"
+#~ msgstr "application de toutes les corrections avec %s"
+
+#~ msgid "unable to open substvars file %s: %s"
+#~ msgstr "impossible d'ouvrir le fichier substvars %s : %s"
+
+#~ msgid "Couldn't call dpkg-deb on %s: %s, skipping package"
+#~ msgstr "Impossible d'appeler dpkg-deb sur %s : %s, paquet sauté"
+
+#~ msgid "Couldn't open override file %s"
+#~ msgstr "Impossible d'ouvrir le fichier d'override %s"
+
+#~ msgid ""
+#~ "Unprocessed text from %s control file; info:\n"
+#~ "%s / %s"
+#~ msgstr ""
+#~ "Texte non traité du fichier de contrôle %s ; info :\n"
+#~ "%s / %s"
+
+#~ msgid "can't read override file %s"
+#~ msgstr "impossible de lire le fichier d'override %s"
+
+#~ msgid "error closing override file"
+#~ msgstr "erreur en fermant le fichier d'override"
+
+#~ msgid "can't read source override file %s"
+#~ msgstr "impossible de lire le fichier d'override pour les sources %s"
+
+#~ msgid "error closing source override file"
+#~ msgstr "erreur en fermant le fichier d'override pour les sources"
+
+#, fuzzy
+#~ msgid "parsing an empty file %s"
+#~ msgstr "impossible d'ouvrir le fichier %s"
+
+#~ msgid "fatal error"
+#~ msgstr "erreur fatale"
+
+#~ msgid "can't open file %s: %s"
+#~ msgstr "impossible d'ouvrir le fichier %s : %s"
+
+#~ msgid "can't load IO::String: %s"
+#~ msgstr "impossible de charger IO::String: %s"
+
+#~ msgid "can't close file %s: %s"
+#~ msgstr "impossible de fermer le fichier %s : %s"
+
+#~ msgid "exec du"
+#~ msgstr "exec du"
+
+#~ msgid "%s has PGP start token but not end token"
+#~ msgstr "%s possède un indicateur de début de PGP mais pas de fin"
+
+#~ msgid "can't read %s: %s"
+#~ msgstr "impossible de lire %s : %s"
+
+#~ msgid "%s invalid (contains blank line)"
+#~ msgstr "%s invalide (contient une ligne blanche)"
+
+#~ msgid "duplicate source field in %s"
+#~ msgstr "champ source en double dans %s"
+
+#~ msgid "duplicate binary field in %s"
+#~ msgstr "champ binary en double dans %s"
+
+#~ msgid "can't fork"
+#~ msgstr "fork impossible"
+
+#~ msgid "cannot fork for dpkg --search"
+#~ msgstr "fork impossible pour dpkg --search"
+
+#~ msgid "unable to open ostable"
+#~ msgstr "impossible d'ouvrir « ostable »"
+
+#~ msgid "unable to open triplettable"
+#~ msgstr "impossible d'ouvrir « triplettable »"
+
+#~ msgid "cannot fork for objdump"
+#~ msgstr "fork impossible pour objdump"
+
+#~ msgid "can't write %s"
+#~ msgstr "impossible d'écrire sur %s"
+
+#~ msgid "can't read %s"
+#~ msgstr "impossible de lire %s"
+
+#~ msgid "Strange text from 'md5sum < %s': '%s'"
+#~ msgstr "Texte étrange produit par « md5sum < %s » : « %s »"
+
+#~ msgid "Couldn't stat %s"
+#~ msgstr "stat de %s impossible"
+
+#~ msgid "error doing fstat on %s:"
+#~ msgstr "erreur lors de fstat %s :"
+
+#~ msgid "can't dup %s:"
+#~ msgstr "dup %s impossible :"
+
+#~ msgid "can't rewind %s:"
+#~ msgstr "impossible de rembobiner %s :"
+
+#~ msgid "can't exec md5sum:"
+#~ msgstr "exec md5sum impossible :"
+
+#~ msgid "invalid md5 output for %s (%s)"
+#~ msgstr "résultat md5 non valable pour %s (%s)"
+
+#~ msgid "Usage: 822-date"
+#~ msgstr "Syntaxe : 822-date"
+
+#~ msgid "This program is deprecated. Please use 'date -R' instead."
+#~ msgstr ""
+#~ "Ce programme est obsolète. Veuillez utiliser à la place « date -R »."
+
+#~ msgid "cannot combine %s and -S"
+#~ msgstr "impossible de combiner %s et -S"
+
+#~ msgid ""
+#~ "substvars support is deprecated (see README.feature-removal-schedule)"
+#~ msgstr ""
+#~ "La gestion de substvars est obsolète (voir le fichier README.feature-"
+#~ "removal-schedule)."
+
+#~ msgid "Dpkg::Deps::Simple can't evaluate implication with a %s!"
+#~ msgstr "Dpkg::Deps::Simple ne peut pas évaluer l'implication avec un %s!"
+
+#~ msgid "failure"
+#~ msgstr "échec"
+
+#~ msgid "field %s has newline then non whitespace >%s<"
+#~ msgstr ""
+#~ "le champ %s contient un caractère nouvelle ligne puis un caractère >%s<"
+
+#~ msgid "field %s has blank lines >%s<"
+#~ msgstr "le champ %s contient des lignes blanches >%s<"
+
+#~ msgid "field %s has trailing newline >%s<"
+#~ msgstr "le champ %s se termine par un caractère nouvelle ligne >%s<"
+
+#~ msgid "invalid exec parameter in fork_and_exec()"
+#~ msgstr "paramètre exec non valable dans fork_and_exec()"
+
+#~ msgid "no PID set, cannot wait end of process"
+#~ msgstr "pas de PID défini, impossible d'attendre la fin du processus"
+
+#~ msgid "tried to add file `%s' twice"
+#~ msgstr "fichier %s ajouté deux fois"
diff --git a/scripts/po/insert-header.sin b/scripts/po/insert-header.sin
new file mode 100644
index 0000000..ceeebb9
--- /dev/null
+++ b/scripts/po/insert-header.sin
@@ -0,0 +1,28 @@
+# Sed script that inserts the file called HEADER before the header entry.
+#
+# Copyright (C) 2001 Free Software Foundation, Inc.
+# Written by Bruno Haible <bruno@clisp.org>, 2001.
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to use, copy, distribute, and modify it.
+#
+# At each occurrence of a line starting with "msgid ", we execute the following
+# commands. At the first occurrence, insert the file. At the following
+# occurrences, do nothing. The distinction between the first and the following
+# occurrences is achieved by looking at the hold space.
+/^msgid /{
+x
+# Test if the hold space is empty.
+s/m/m/
+ta
+# Yes it was empty. First occurrence. Read the file.
+r HEADER
+# Output the file's contents by reading the next line. But don't lose the
+# current line while doing this.
+g
+N
+bb
+:a
+# The hold space was nonempty. Following occurrences. Do nothing.
+x
+:b
+}
diff --git a/scripts/po/nl.gmo b/scripts/po/nl.gmo
new file mode 100644
index 0000000..363c3cd
--- /dev/null
+++ b/scripts/po/nl.gmo
Binary files differ
diff --git a/scripts/po/nl.po b/scripts/po/nl.po
new file mode 100644
index 0000000..46f65f6
--- /dev/null
+++ b/scripts/po/nl.po
@@ -0,0 +1,4242 @@
+# Translation of dpkg-dev into Dutch.
+# Copyright © 1994-2023 Dpkg Developers
+# This file is distributed under the same license as the dpkg package.
+# Frans Spiesschaert <Frans.Spiesschaert@yucom.be>, 2023.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: dpkg 1.21.19\n"
+"Report-Msgid-Bugs-To: debian-dpkg@lists.debian.org\n"
+"POT-Creation-Date: 2023-05-11 02:03+0000\n"
+"PO-Revision-Date: 2023-02-02 17:51+0100\n"
+"Last-Translator: Frans Spiesschaert <Frans.Spiesschaert@yucom.be>\n"
+"Language-Team: \n"
+"Language: nl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Poedit 2.2.1\n"
+
+#: scripts/dpkg-architecture.pl scripts/dpkg-buildflags.pl
+#: scripts/dpkg-buildpackage.pl scripts/dpkg-checkbuilddeps.pl
+#: scripts/dpkg-distaddfile.pl scripts/dpkg-genbuildinfo.pl
+#: scripts/dpkg-genchanges.pl scripts/dpkg-gencontrol.pl
+#: scripts/dpkg-gensymbols.pl scripts/dpkg-mergechangelogs.pl
+#: scripts/dpkg-name.pl scripts/dpkg-parsechangelog.pl
+#: scripts/dpkg-scanpackages.pl scripts/dpkg-scansources.pl
+#: scripts/dpkg-shlibdeps.pl scripts/dpkg-source.pl scripts/dpkg-vendor.pl
+#, perl-format
+msgid "Debian %s version %s.\n"
+msgstr "Debian %s versie %s.\n"
+
+#: scripts/dpkg-architecture.pl scripts/dpkg-buildflags.pl
+#: scripts/dpkg-buildpackage.pl scripts/dpkg-distaddfile.pl
+#: scripts/dpkg-genbuildinfo.pl scripts/dpkg-genchanges.pl
+#: scripts/dpkg-gencontrol.pl scripts/dpkg-gensymbols.pl
+#: scripts/dpkg-parsechangelog.pl scripts/dpkg-shlibdeps.pl
+#: scripts/dpkg-source.pl scripts/dpkg-vendor.pl
+msgid ""
+"\n"
+"This is free software; see the GNU General Public License version 2 or\n"
+"later for copying conditions. There is NO warranty.\n"
+msgstr ""
+"\n"
+"Dit is vrije software; zie de GNU General Public-licentie versie 2 of\n"
+"later voor kopieervoorwaarden. Er is GEEN garantie.\n"
+
+#: scripts/dpkg-architecture.pl scripts/dpkg-vendor.pl
+#, perl-format
+msgid "Usage: %s [<option>...] [<command>]"
+msgstr "Gebruik: %s [<optie>...] [<commando>]"
+
+#: scripts/dpkg-architecture.pl
+msgid ""
+"Commands:\n"
+" -l, --list list variables (default).\n"
+" -L, --list-known list valid architectures (matching some "
+"criteria).\n"
+" -e, --equal <arch> compare with host Debian architecture.\n"
+" -i, --is <arch-wildcard> match against host Debian architecture.\n"
+" -q, --query <variable> prints only the value of <variable>.\n"
+" -s, --print-set print command to set environment variables.\n"
+" -u, --print-unset print command to unset environment variables.\n"
+" -c, --command <command> set environment and run the command in it.\n"
+" -?, --help show this help message.\n"
+" --version show the version."
+msgstr ""
+"Commando's:\n"
+" -l, --list variabelen tonen (standaard).\n"
+" -L, --list-known geldige architecturen tonen\n"
+" (die aan bepaalde criteria voldoen).\n"
+" -e, --equal <arch> vergelijken met Debian-architectuur v/d host.\n"
+" -i, --is <arch-jokerteken> overeenkomst met Debian-arch. v/d host nagaan.\n"
+" -q, --query <variabele> toont enkel de waarde van <variabele>.\n"
+" -s, --print-set commando om omgevingsvariabelen\n"
+" in te stellen tonen.\n"
+" -u, --print-unset commando om omgevingsvariabelen\n"
+" uit te schakelen tonen.\n"
+" -c, --command <commando> omgeving instellen en commando erin uitvoeren.\n"
+" -?, --help dit hulpbericht tonen.\n"
+" --version de versie tonen."
+
+#: scripts/dpkg-architecture.pl
+msgid ""
+"Options:\n"
+" -a, --host-arch <arch> set host Debian architecture.\n"
+" -t, --host-type <type> set host GNU system type.\n"
+" -A, --target-arch <arch> set target Debian architecture.\n"
+" -T, --target-type <type> set target GNU system type.\n"
+" -W, --match-wildcard <arch-wildcard>\n"
+" restrict architecture list matching <arch-"
+"wildcard>.\n"
+" -B, --match-bits <arch-bits>\n"
+" restrict architecture list matching <arch-"
+"bits>.\n"
+" -E, --match-endian <arch-endian>\n"
+" restrict architecture list matching <arch-"
+"endian>.\n"
+" --print-format <format>\n"
+" use <format> for --print-set and --print-unset,\n"
+" allowed values: shell (default), make.\n"
+" -f, --force force flag (override variables set in "
+"environment)."
+msgstr ""
+"Opties:\n"
+" -a, --host-arch <arch> Debian-architectuur v/d host instellen.\n"
+" -t, --host-type <type> GNU-systeemtype v/d host instellen.\n"
+" -A, --target-arch <arch> Debian-architectuur v/h doel instellen.\n"
+" -T, --target-type <type> GNU-systeemtype v/h doel instellen..\n"
+" -W, --match-wildcard <arch-jokerteken>\n"
+" architectuurlijst beperken tot\n"
+" wat overeenkomt met <arch-jokerteken>.\n"
+" -B, --match-bits <arch-bits>\n"
+" architectuurlijst beperken tot\n"
+" wat overeenkomt met <arch-bits>.\n"
+" -E, --match-endian <arch-endian>\n"
+" architectuurlijst beperken tot\n"
+" wat overeenkomt met <arch-endian>.\n"
+" --print-format <indeling>\n"
+" <indeling> gebruiken voor\n"
+" --print-set en --print-unset,\n"
+" geldige waarden: shell (standaard), make.\n"
+" -f, --force vlag forceren (in omgeving\n"
+" ingestelde variabelen overschrijven)."
+
+#: scripts/dpkg-architecture.pl
+#, perl-format
+msgid "unknown Debian architecture %s, you must specify GNU system type, too"
+msgstr ""
+"onbekende Debian-architectuur %s, u moet ook het GNU-systeemtype opgeven"
+
+#: scripts/dpkg-architecture.pl
+#, perl-format
+msgid "unknown GNU system type %s, you must specify Debian architecture, too"
+msgstr "onbekend GNU-systeemtype %s, u moet ook de Debian-architectuur opgeven"
+
+#: scripts/dpkg-architecture.pl
+#, perl-format
+msgid "unknown default GNU system type for Debian architecture %s"
+msgstr "onbekend standaard GNU-systeemtype voor Debian-architectuur %s"
+
+#: scripts/dpkg-architecture.pl
+#, perl-format
+msgid ""
+"default GNU system type %s for Debian arch %s does not match specified GNU "
+"system type %s"
+msgstr ""
+"standaard GNU-systeemtype %s voor Debian-architectuur %s komt niet overeen "
+"met het opgegeven GNU-systeemtype %s"
+
+#: scripts/dpkg-architecture.pl
+#, perl-format
+msgid "%s is not a supported print format"
+msgstr "%s is geen ondersteunde weergave-indeling"
+
+#: scripts/dpkg-architecture.pl
+#, perl-format
+msgid "%s is not a supported variable name"
+msgstr "%s is geen ondersteunde variabelenaam"
+
+#: scripts/dpkg-architecture.pl scripts/dpkg-buildflags.pl
+#: scripts/dpkg-distaddfile.pl scripts/dpkg-genbuildinfo.pl
+#: scripts/dpkg-genchanges.pl scripts/dpkg-gencontrol.pl
+#: scripts/dpkg-gensymbols.pl scripts/dpkg-name.pl
+#: scripts/dpkg-parsechangelog.pl scripts/dpkg-shlibdeps.pl
+#: scripts/dpkg-vendor.pl
+#, perl-format
+msgid "unknown option '%s'"
+msgstr "onbekende optie '%s'"
+
+#: scripts/dpkg-architecture.pl
+#, perl-format
+msgid ""
+"specified GNU system type %s does not match CC system type %s, try setting a "
+"correct CC environment variable"
+msgstr ""
+"opgegeven GNU-systeemtype %s komt niet overeen met CC-systeemtype %s, "
+"probeer een correcte CC-omgevingsvariabele in te stellen"
+
+#: scripts/dpkg-architecture.pl scripts/dpkg-shlibdeps.pl scripts/Dpkg/IPC.pm
+#: scripts/Dpkg/Shlibs/Cppfilt.pm
+#, perl-format
+msgid "unable to execute %s"
+msgstr "kan %s niet uitvoeren"
+
+#: scripts/dpkg-buildflags.pl
+#, perl-format
+msgid "Usage: %s [<command>]"
+msgstr "Gebruik: %s [<commando>]"
+
+#: scripts/dpkg-buildflags.pl
+msgid ""
+"Commands:\n"
+" --get <flag> output the requested flag to stdout.\n"
+" --origin <flag> output the origin of the flag to stdout:\n"
+" value is one of vendor, system, user, env.\n"
+" --status output a synopsis with all parameters affecting the\n"
+" program behaviour, the resulting flags and their "
+"origin.\n"
+" --query like --status, but in deb822 format.\n"
+" --query-features <area>\n"
+" output the status of features for the given area.\n"
+" --list output a list of the flags supported by the current "
+"vendor.\n"
+" --export=(sh|make|cmdline|configure)\n"
+" output something convenient to import the compilation\n"
+" flags in a shell script, in make, or in a command "
+"line.\n"
+" --dump output all compilation flags with their values.\n"
+" --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+"Commando's:\n"
+" --get <vlag> gevraagde vlag uitvoeren naar stdout.\n"
+" --origin <vlag> herkomst van de vlag uitvoeren naar stdout:\n"
+" waarde kan vendor, system, user of env zijn.\n"
+" --status een synopsis met alle parameters die het gedrag van "
+"het\n"
+" programma beïnvloeden,\n"
+" de resulterende vlaggen en hun herkomst.\n"
+" --query zoals --status, maar in deb822-indeling.\n"
+" --query-features <gebied>\n"
+" status van functies voor het opgegeven gebied "
+"uitvoeren.\n"
+" --list een door de huidige aanbieder\n"
+" ondersteunde lijst met vlaggen uitvoeren.\n"
+" --export=(sh|make|cmdline|configure)\n"
+" een handige uitvoer om de compilatievlaggen te "
+"importeren\n"
+" in een shell script, in make, of in een commandoregel.\n"
+" --dump alle compilatievlaggen en hun waarden uitvoeren.\n"
+" --help dit hulpbericht tonen.\n"
+" --version de versie tonen.\n"
+
+#: scripts/dpkg-buildflags.pl scripts/dpkg-source.pl scripts/dpkg-vendor.pl
+#, perl-format
+msgid "two commands specified: --%s and --%s"
+msgstr "twee commando's opgegeven: --%s en --%s"
+
+#: scripts/dpkg-buildflags.pl scripts/dpkg-vendor.pl
+#, perl-format
+msgid "%s needs a parameter"
+msgstr "%s heeft een parameter nodig"
+
+#: scripts/dpkg-buildpackage.pl scripts/dpkg-genbuildinfo.pl
+#: scripts/dpkg-genchanges.pl scripts/dpkg-gencontrol.pl
+#: scripts/dpkg-gensymbols.pl scripts/dpkg-parsechangelog.pl
+#, perl-format
+msgid "Usage: %s [<option>...]"
+msgstr "Gebruik: %s [<optie>...]"
+
+#: scripts/dpkg-buildpackage.pl
+msgid ""
+"Options:\n"
+" --build=<type>[,...] specify the build <type>: full, source, "
+"binary,\n"
+" any, all (default is 'full').\n"
+" -F, --build=full normal full build (source and binary; "
+"default).\n"
+" -g, --build=source,all source and arch-indep build.\n"
+" -G, --build=source,any source and arch-specific build.\n"
+" -b, --build=binary binary-only, no source files.\n"
+" -B, --build=any binary-only, only arch-specific files.\n"
+" -A, --build=all binary-only, only arch-indep files.\n"
+" -S, --build=source source-only, no binary files.\n"
+" -nc, --no-pre-clean do not pre clean source tree (implies -b).\n"
+" --pre-clean pre clean source tree (default).\n"
+" --no-post-clean do not post clean source tree (default).\n"
+" -tc, --post-clean post clean source tree.\n"
+" --sanitize-env sanitize the build environment.\n"
+" -D, --check-builddeps check build dependencies and conflicts "
+"(default).\n"
+" -d, --no-check-builddeps do not check build dependencies and "
+"conflicts.\n"
+" --ignore-builtin-builddeps\n"
+" do not check builtin build dependencies.\n"
+" -P, --build-profiles=<profiles>\n"
+" assume comma-separated build <profiles> as "
+"active.\n"
+" --rules-requires-root assume legacy Rules-Requires-Root field "
+"value.\n"
+" -R, --rules-file=<rules> rules file to execute (default is debian/"
+"rules).\n"
+" -T, --rules-target=<target> call debian/rules <target>.\n"
+" --as-root ensure -T calls the target with root rights.\n"
+" -j, --jobs[=<jobs>|auto] jobs to run simultaneously (passed to "
+"<rules>),\n"
+" (default; default is auto, opt-in mode).\n"
+" -J, --jobs-try[=<jobs>|auto]\n"
+" alias for -j, --jobs.\n"
+" --jobs-force[=<jobs>|auto]\n"
+" jobs to run simultaneously (passed to "
+"<rules>),\n"
+" (default is auto, forced mode).\n"
+" -r, --root-command=<command>\n"
+" command to gain root rights (default is "
+"fakeroot).\n"
+" --check-command=<command>\n"
+" command to check the .changes file (no "
+"default).\n"
+" --check-option=<opt> pass <opt> to check <command>.\n"
+" --hook-<name>=<command> set <command> as the hook <name>, known "
+"hooks:\n"
+" init preclean source build binary buildinfo\n"
+" changes postclean check sign done\n"
+" --buildinfo-file=<file> set the .buildinfo filename to generate.\n"
+" --buildinfo-option=<opt>\n"
+" pass option <opt> to dpkg-genbuildinfo.\n"
+" --changes-file=<file> set the .changes filename to generate.\n"
+" --sign-backend=<backend>\n"
+" OpenPGP backend to use to sign\n"
+" (default is auto).\n"
+" -p, --sign-command=<command>\n"
+" command to sign .dsc and/or .changes files\n"
+" (default is gpg).\n"
+" --sign-keyfile=<file> the key file to use for signing.\n"
+" -k, --sign-keyid=<keyid> the key id to use for signing.\n"
+" --sign-key=<keyid> alias for -k, --sign-keyid.\n"
+" -ap, --sign-pause add pause before starting signature process.\n"
+" -us, --unsigned-source unsigned source package.\n"
+" -ui, --unsigned-buildinfo unsigned .buildinfo file.\n"
+" -uc, --unsigned-changes unsigned .buildinfo and .changes file.\n"
+" --no-sign do not sign any file.\n"
+" --force-sign force signing the resulting files.\n"
+" --admindir=<directory> change the administrative directory.\n"
+" -?, --help show this help message.\n"
+" --version show the version."
+msgstr ""
+"Opties:\n"
+" --build=<type>[,...] het bouw-<type> opgeven: full, source, "
+"binary,\n"
+" any, all (standaard is 'full').\n"
+" -F, --build=full normale volledige bouw (bron en binair; "
+"standaard).\n"
+" -g, --build=source,all bron en arch-onafhankelijke bouw.\n"
+" -G, --build=source,any bron en arch-specifieke bouw.\n"
+" -b, --build=binary enkel binair, geen bronbestanden.\n"
+" -B, --build=any enkel binair, enkel arch-specifieke "
+"bestanden.\n"
+" -A, --build=all enkel binair, enkel arch-onafh. bestanden.\n"
+" -S, --build=source enkel bron, geen binaire bestanden.\n"
+" -nc, --no-pre-clean bronboom niet vooraf opschonen (impliceert -"
+"b).\n"
+" --pre-clean bronboom vooraf opschonen (standaard).\n"
+" --no-post-clean bronboom niet achteraf opschonen (standaard).\n"
+" -tc, --post-clean bronboom achteraf opschonen.\n"
+" --sanitize-env de bouwomgeving opschonen.\n"
+" -D, --check-builddeps bouwvereisten en -conflicten controleren "
+"(standaard).\n"
+" -d, --no-check-builddeps bouwvereisten en -conflicten niet "
+"controleren.\n"
+" --ignore-builtin-builddeps\n"
+" ingebouwde bouwvereisten niet controleren.\n"
+" -P, --build-profiles=<profielen>\n"
+" ervan uitgaan dat de door komma's gescheiden\n"
+" bouw<profielen> actief zijn.\n"
+" --rules-requires-root uitgaan van oude veldwaarde Rules-Requires-"
+"Root.\n"
+" -R, --rules-file=<regels> uit te voeren regelsbestand\n"
+" (standaard is debian/rules).\n"
+" -T, --rules-target=<doel> debian/rules <doel> aanroepen.\n"
+" --as-root ervoor zorgen dat -T het doel\n"
+" met beheerdersrechten aanroept.\n"
+" -j, --jobs[=<taken>|auto] simultaan uit te voeren taken\n"
+" (meegegeven aan <regels>),\n"
+" (standaard; standaard is auto, opt-in "
+"modus).\n"
+" -J, --jobs-try[=<taken>|auto]\n"
+" alias voor -j, --jobs.\n"
+" --jobs-force[=<taken>|auto]\n"
+" simultaan uit te voeren taken\n"
+" (meegegeven aan <regels>),\n"
+" (standaard is auto, geforceerde modus).\n"
+" -r, --root-command=<commando>\n"
+" commando om beheerdersrechten te verwerven\n"
+" (standaard is fakeroot).\n"
+" --check-command=<commando>\n"
+" commando om .changes-bestand te controleren\n"
+" (geen standaard).\n"
+" --check-option=<optie> <optie> meegeven aan controle<commando>.\n"
+" --hook-<naam>=<commando>\n"
+" <commando> instellen als de hook-<naam>,\n"
+" gekende hooks:\n"
+" init preclean source build binary "
+"buildinfo\n"
+" changes postclean check sign done\n"
+" --buildinfo-file=<bestand>\n"
+" te genereren .buildinfo bestandsnaam "
+"instellen.\n"
+" --buildinfo-option=<optie>\n"
+" optie <optie> meegeven aan dpkg-genbuildinfo.\n"
+" --changes-file=<bestand>\n"
+" te genereren .changes bestandsnaam instellen.\n"
+" --sign-backend=<backend>\n"
+" te gebruiken OpenPGP-backend bij "
+"ondertekening\n"
+" (standaard is auto).\n"
+" -p, --sign-command=<commando>\n"
+" commando om\n"
+" .dsc en/of .changes-bestanden te ondertekenen\n"
+" (standaard is gpg).\n"
+" --sign-keyfile=<bestand>\n"
+" bij ondertekenen te gebruiken sleutelbestand.\n"
+" -k, --sign-keyid=<sleutel-id>\n"
+" bij ondertekenen te gebruiken sleutel-id.\n"
+" --sign-key=<sleutel-id> alias for -k, --sign-keyid.\n"
+" -ap, --sign-pause pauze inlassen vooraleer het\n"
+" ondertekeningsproces te starten.\n"
+" -us, --unsigned-source niet-ondertekend bronpakket.\n"
+" -ui, --unsigned-buildinfo niet-ondertekend .buildinfo-bestand.\n"
+" -uc, --unsigned-changes niet-ondertekend .buildinfo- en .changes-"
+"bestand.\n"
+" --no-sign geen enkel bestand ondertekenen.\n"
+" --force-sign ondertekening van de\n"
+" resulterende bestanden afdwingen.\n"
+" --admindir=<map> de administratieve map wijzigen.\n"
+" -?, --help dit hulpbericht tonen.\n"
+" --version de versie tonen."
+
+#: scripts/dpkg-buildpackage.pl
+msgid ""
+"Options passed to dpkg-architecture:\n"
+" -a, --host-arch <arch> set the host Debian architecture.\n"
+" -t, --host-type <type> set the host GNU system type.\n"
+" --target-arch <arch> set the target Debian architecture.\n"
+" --target-type <type> set the target GNU system type."
+msgstr ""
+"Aan dpkg-architecture meegegeven opties:\n"
+" -a, --host-arch <arch> de Debian-architectuur van de host instellen.\n"
+" -t, --host-type <type> het GNU-systeemtype van de host instellen.\n"
+" --target-arch <arch> de Debian-architectuur van het doel "
+"instellen.\n"
+" --target-type <type> het GNU-systeemtype van het doel instellen."
+
+#: scripts/dpkg-buildpackage.pl
+msgid ""
+"Options passed to dpkg-genchanges:\n"
+" -si source includes orig, if new upstream "
+"(default).\n"
+" -sa source includes orig, always.\n"
+" -sd source is diff and .dsc only.\n"
+" -v<version> changes since version <version>.\n"
+" -m, --source-by=<maint> maintainer for this source or build is "
+"<maint>.\n"
+" --build-by=<maint> ditto.\n"
+" -e, --release-by=<maint> maintainer for this change or release is "
+"<maint>.\n"
+" --changed-by=<maint> ditto.\n"
+" -C<descfile> changes are described in <descfile>.\n"
+" --changes-option=<opt> pass option <opt> to dpkg-genchanges."
+msgstr ""
+"Aan dpkg-genchanges meegegeven opties:\n"
+" -si bron bevat orig als\n"
+" bovenstroom vernieuwd is (standaard).\n"
+" -sa bron bevat altijd orig.\n"
+" -sd bron is enkel diff en .dsc.\n"
+" -v<versie> wijzigingen sinds versie <versie>.\n"
+" -m, --source-by=<onderh> onderhouder van deze bron of bouw is "
+"<onderh>.\n"
+" --build-by=<onderh> idem.\n"
+" -e, --release-by=<onderh> onderhouder voor deze\n"
+" wijziging of release is <onderh>.\n"
+" --changed-by=<onderh> idem.\n"
+" -C<descbestand> wijzigingen worden beschreven in "
+"<descbestand>.\n"
+" --changes-option=<opt> optie <opt> meegeven met dpkg-genchanges."
+
+#: scripts/dpkg-buildpackage.pl
+msgid ""
+"Options passed to dpkg-source:\n"
+" -sn force Debian native source format.\n"
+" -s[sAkurKUR] see dpkg-source for explanation.\n"
+" -z, --compression-level=<level>\n"
+" compression level to use for source.\n"
+" -Z, --compression=<compressor>\n"
+" compression to use for source (gz|xz|bzip2|"
+"lzma).\n"
+" -i, --diff-ignore[=<regex>] ignore diffs of files matching <regex>.\n"
+" -I, --tar-ignore[=<pattern>]\n"
+" filter out files when building tarballs.\n"
+" --source-option=<opt> pass option <opt> to dpkg-source.\n"
+msgstr ""
+"Aan dpkg-source meegegeven opties:\n"
+" -sn Debian-native broncode-indeling afdwingen.\n"
+" -s[sAkurKUR] zie dpkg-source voor uitleg.\n"
+" -z, --compression-level=<niveau>\n"
+" voor broncode te gebruiken compressieniveau.\n"
+" -Z, --compression=<compressor>\n"
+" voor broncode te gebruiken compressie\n"
+" (gz|xz|bzip2|lzma).\n"
+" -i, --diff-ignore[=<regex>] diffs van bestanden die met <regex>\n"
+" overeenkomen, negeren.\n"
+" -I, --tar-ignore[=<patroon>]\n"
+" bestanden uitfilteren bij bouwen van "
+"tarballs.\n"
+" --source-option=<opt> optie <opt> meegeven aan dpkg-source.\n"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "missing .buildinfo filename"
+msgstr "ontbrekende .buildinfo-bestandsnaam"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "passing %s via %s is not supported; please use %s instead"
+msgstr ""
+"doorgeven van %s via %s wordt niet ondersteund; gebruik in plaats daarvan %s"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "missing .changes filename"
+msgstr "ontbrekende .changes-bestandsnaam"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "unknown hook name %s"
+msgstr "onbekende hook-naam %s"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "missing hook %s command"
+msgstr "ontbrekend commando voor hook %s"
+
+#: scripts/dpkg-buildpackage.pl scripts/dpkg-genbuildinfo.pl
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid "%s is deprecated; it is without effect"
+msgstr "%s is verouderd; het heeft geen effect"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "-s%s is deprecated; always using gpg style interface"
+msgstr "-s%s is verouderd; er wordt altijd een interface in gpg-stijl gebruikt"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "unknown option or argument %s"
+msgstr "onbekende optie of argument %s"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "option %s is only meaningful with option %s"
+msgstr "optie %s is enkel zinvol met optie %s"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "check-command '%s' not found"
+msgstr "controlecommando '%s' niet gevonden"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "sign-command '%s' not found"
+msgstr "ondertekeningscommando '%s' niet gevonden"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source package"
+msgstr "broncodepakket"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source version"
+msgstr "broncodeversie"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source distribution"
+msgstr "broncodedistributie"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source changed by"
+msgstr "broncode gewijzigd door"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "host architecture"
+msgstr "host-architectuur"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "debian/rules is not executable; fixing that"
+msgstr "debian/rules is niet uitvoerbaar; dat wordt opgelost"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "build dependencies/conflicts unsatisfied; aborting"
+msgstr "onvoldane bouwvereisten/conflicten; er wordt gestopt"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "(Use -d flag to override.)"
+msgstr "(Gebruik vlag -d om te overschrijven.)"
+
+#: scripts/dpkg-buildpackage.pl
+msgid ""
+"building a source package without cleaning up as you asked; it might contain "
+"undesired files"
+msgstr ""
+"een broncodepakket bouwen zonder opschonen zoals u vroeg; het kan ongewenste "
+"bestanden bevatten"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "Press <enter> to start the signing process.\n"
+msgstr "Druk <enter> om het ondertekeningsproces te starten.\n"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "not signing UNRELEASED build; use --force-sign to override"
+msgstr ""
+"een bouw van UNRELEASED wordt niet ondertekend; gebruik --force-sign om te "
+"overschrijven"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "unable to determine %s"
+msgstr "niet in staat om %s te bepalen"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "using a gain-root-command while being root"
+msgstr ""
+"gebruik van een commando om root te worden, terwijl dat al het geval is"
+
+#: scripts/dpkg-buildpackage.pl
+msgid ""
+"fakeroot not found, either install the fakeroot\n"
+"package, specify a command with the -r option, or run this as root"
+msgstr ""
+"fakeroot niet gevonden, installeer het pakket fakeroot,\n"
+"of geef een commando op met de optie -r, of voer dit uit als root"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "gain-root-command '%s' not found"
+msgstr "commando '%s' om root te worden niet gevonden"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "disallowed target in %s field keyword \"%s\""
+msgstr "niet-toegestaan doel in veld %s trefwoord \"%s\""
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "%s field keyword \"%s\" is unknown in dpkg namespace"
+msgstr "veld %s trefwoord \"%s\" is onbekend in dpkg-naamruimte"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "%s field keyword \"%s\" is uppercase; use \"%s\" instead"
+msgstr ""
+"veld %s trefwoord \"%s\" is in hoofdletters; gebruik in plaats daarvan \"%s\""
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "%s field keyword \"%s\" is invalid; use \"%s\" instead"
+msgstr "veld %s trefwoord \"%s\" is ongeldig; gebruik in plaats daarvan \"%s\""
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "%s field keyword \"%s\" is unknown"
+msgstr "veld %s trefwoord \"%s\" is onbekend"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "field %s contains duplicate keyword \"%s\""
+msgstr "veld %s bevat dubbel trefwoord \"%s\""
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "%s field contains both global and implementation specific keywords"
+msgstr "veld %s bevat zowel algemene als implementatiespecifieke trefwoorden"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "unknown %% substitution in hook: %%%s"
+msgstr "onbekende substitutie %% in hook: %%%s"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid ""
+"short OpenPGP key IDs are broken; please use key fingerprints in %s or %s "
+"instead"
+msgstr ""
+"korte OpenPGP-sleutel-ID's zijn defect; gebruik in plaats daarvan "
+"sleutelvingerafdrukken in %s of %s"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid ""
+"long OpenPGP key IDs are strongly discouraged; please use key fingerprints "
+"in %s or %s instead"
+msgstr ""
+"lange OpenPGP-sleutel-ID's worden sterk ontraden; gebruik in plaats daarvan "
+"sleutelvingerafdrukken in %s of %s"
+
+#: scripts/dpkg-buildpackage.pl scripts/dpkg-checkbuilddeps.pl
+#: scripts/dpkg-genbuildinfo.pl scripts/dpkg-name.pl scripts/Dpkg/Arch.pm
+#: scripts/Dpkg/IPC.pm scripts/Dpkg/Shlibs.pm
+#, perl-format
+msgid "cannot open %s"
+msgstr "kan %s niet openen"
+
+#: scripts/dpkg-buildpackage.pl scripts/dpkg-distaddfile.pl
+#: scripts/dpkg-genbuildinfo.pl scripts/dpkg-gencontrol.pl
+#: scripts/Dpkg/Interface/Storable.pm scripts/Dpkg/Source/Package/V2.pm
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot close %s"
+msgstr "kan %s niet sluiten"
+
+#: scripts/dpkg-buildpackage.pl scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "cannot move %s to %s"
+msgstr "kan %s niet naar %s verplaatsen"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "failed to sign %s file: %s"
+msgstr "%s-bestand ondertekenen mislukt: %s"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source-only upload: Debian-native package"
+msgstr "upload van alleen broncode: Debian-native pakket"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source-only, diff-only upload (original source NOT included)"
+msgstr ""
+"upload van alleen broncode en alleen diff (originele broncode NIET "
+"inbegrepen)"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source-only upload (original source is included)"
+msgstr "upload van alleen broncode (originele broncode is inbegrepen)"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "binary-only upload (no source included)"
+msgstr "alleen binaire upload (geen broncode inbegrepen)"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "full upload; Debian-native package (full source is included)"
+msgstr "volledige upload; Debian-native pakket (volledige broncode inbegrepen)"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "binary and diff upload (original source NOT included)"
+msgstr "binaire upload met diff (originele broncode NIET inbegrepen)"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "full upload (original source is included)"
+msgstr "volledig upload (originele broncode inbegrepen)"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid ""
+"%s must be updated to support the 'build-arch' and 'build-indep' targets (at "
+"least '%s' seems to be missing)"
+msgstr ""
+"%s moet worden bijgewerkt om de doelen 'build-arch' en 'build-indep' te "
+"ondersteunen (tenminste '%s' lijkt te ontbreken)"
+
+#: scripts/dpkg-checkbuilddeps.pl
+#, perl-format
+msgid "Usage: %s [<option>...] [<control-file>]"
+msgstr "Gebruik: %s [<optie>...] [<control-bestand>]"
+
+#: scripts/dpkg-checkbuilddeps.pl
+msgid ""
+"Options:\n"
+" -A ignore Build-Depends-Arch and Build-Conflicts-Arch.\n"
+" -B ignore Build-Depends-Indep and Build-Conflicts-Indep.\n"
+" -I ignore built-in build dependencies and conflicts.\n"
+" -d build-deps use given string as build dependencies instead of\n"
+" retrieving them from control file\n"
+" -c build-conf use given string for build conflicts instead of\n"
+" retrieving them from control file\n"
+" -a arch assume given host architecture\n"
+" -P profiles assume given build profiles (comma-separated list)\n"
+" --admindir=<directory>\n"
+" change the administrative directory.\n"
+" -?, --help show this help message.\n"
+" --version show the version."
+msgstr ""
+"Opties:\n"
+" -A Build-Depends-Arch en Build-Conflicts-Arch negeren.\n"
+" -B Build-Depends-Indep en Build-Conflicts-Indep negeren.\n"
+" -I ingebouwde bouwvereisten en -conflicten negeren.\n"
+" -d build-deps opgegeven tekenreeks gebruiken als bouwvereisten in plaats\n"
+" van deze op te halen uit het control-bestand\n"
+" -c build-conf opgegeven tekenreeks gebruiken voor bouwconflicten in "
+"plaats\n"
+" van deze op te halen uit het control-bestand\n"
+" -a arch uitgaan van de opgegeven host-architectuur\n"
+" -P profiles uitgaan van de opgegeven bouwprofielen\n"
+" (door komma's gescheiden lijst)\n"
+" --admindir=<map>\n"
+" de administratieve map wijzigen.\n"
+" -?, --help dit hulpbericht tonen.\n"
+" --version de versie tonen."
+
+#: scripts/dpkg-checkbuilddeps.pl
+msgid ""
+"<control-file> is the control file to process (default: debian/control)."
+msgstr ""
+"<control-bestand> is het te verwerken control-bestand (standaard: debian/"
+"control)."
+
+#: scripts/dpkg-checkbuilddeps.pl scripts/dpkg-shlibdeps.pl
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "cannot parse %s field"
+msgstr "kan veld %s niet ontleden"
+
+#: scripts/dpkg-checkbuilddeps.pl
+#, perl-format
+msgid "Unmet build dependencies: %s"
+msgstr "Niet-voldane bouwvereisten: %s"
+
+#: scripts/dpkg-checkbuilddeps.pl
+#, perl-format
+msgid "Build conflicts: %s"
+msgstr "Bouwconflicten: %s"
+
+#: scripts/dpkg-distaddfile.pl
+#, perl-format
+msgid ""
+"Usage: %s [<option>...] <filename> <section> <priority>\n"
+"\n"
+"Options:\n"
+" -f<files-list-file> write files here instead of debian/files.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+"Gebruik: %s [<optie>...] <bestandsnaam> <sectie> <prioriteit>\n"
+"\n"
+"Opties:\n"
+" -f<bestandenlijstbestand> bestanden hier schrijven en niet in debian/"
+"files.\n"
+" -?, --help dit hulpbericht tonen.\n"
+" --version de versie tonen.\n"
+
+#: scripts/dpkg-distaddfile.pl
+msgid "need exactly a filename, section and priority"
+msgstr "heb exact een bestandsnaam, sectie en prioriteit nodig"
+
+#: scripts/dpkg-distaddfile.pl
+msgid "filename, section and priority may contain no whitespace"
+msgstr "bestandsnaam, sectie en prioriteit mogen geen witruimte bevatten"
+
+#: scripts/dpkg-distaddfile.pl scripts/dpkg-genbuildinfo.pl
+#: scripts/dpkg-gencontrol.pl scripts/dpkg-mergechangelogs.pl
+#: scripts/Dpkg/Compression/FileHandle.pm scripts/Dpkg/File.pm
+#: scripts/Dpkg/IPC.pm scripts/Dpkg/Interface/Storable.pm
+#: scripts/Dpkg/Source/BinaryFiles.pm scripts/Dpkg/Source/Package.pm
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "cannot write %s"
+msgstr "kan %s niet schrijven"
+
+#: scripts/dpkg-distaddfile.pl scripts/dpkg-genbuildinfo.pl
+#: scripts/dpkg-gencontrol.pl
+msgid "install new files list file"
+msgstr "nieuw bestandenlijstbestand installeren"
+
+#: scripts/dpkg-genbuildinfo.pl
+msgid ""
+"Options:\n"
+" --build=<type>[,...] specify the build <type>: full, source, binary,\n"
+" any, all (default is 'full').\n"
+" -c<control-file> get control info from this file.\n"
+" -l<changelog-file> get per-version info from this file.\n"
+" -f<files-list-file> get .deb files list from this file.\n"
+" -F<changelog-format> force changelog format.\n"
+" -O[<buildinfo-file>] write to stdout (or <buildinfo-file>).\n"
+" -u<upload-files-dir> directory with files (default is '..').\n"
+" --always-include-kernel always include Build-Kernel-Version.\n"
+" --always-include-path always include Build-Path.\n"
+" --admindir=<directory> change the administrative directory.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+"Opties:\n"
+" --build=<type>[,...] het bouw<type> opgeven: full, source, binary,\n"
+" any, all (standaard is 'full').\n"
+" -c<control-bestand> control-info uit dit bestand halen.\n"
+" -l<changelog-bestand> informatie per versie uit dit bestand halen.\n"
+" -f<bestandenlijstbestand> .deb-bestandenlijst uit dit bestand halen.\n"
+" -F<changelog-indeling> changelog-indeling opleggen.\n"
+" -O[<buildinfo-bestand>] naar stdout schrijven (of <buildinfo-bestand>).\n"
+" -u<upload-bestandenmap> map met bestanden (standaard is '..').\n"
+" --always-include-kernel altijd Build-Kernel-Version opnemen.\n"
+" --always-include-path altijd Build-Path opnemen.\n"
+" --admindir=<map> de administratieve map wijzigen.\n"
+" -?, --help dit hulpbericht tonen.\n"
+" --version de versie tonen.\n"
+
+#: scripts/dpkg-genbuildinfo.pl
+msgid "binary build with no binary artifacts found; .buildinfo is meaningless"
+msgstr "binaire bouw zonder gevonden binaire voorwerpen; .buildinfo is zinloos"
+
+#: scripts/dpkg-genbuildinfo.pl
+#, perl-format
+msgid "cannot install output buildinfo file '%s'"
+msgstr "kan buildinfo-uitvoerbestand '%s' niet installeren"
+
+#: scripts/dpkg-genchanges.pl
+msgid ""
+"Options:\n"
+" --build=<type>[,...] specify the build <type>: full, source, binary,\n"
+" any, all (default is 'full').\n"
+" -g source and arch-indep build.\n"
+" -G source and arch-specific build.\n"
+" -b binary-only, no source files.\n"
+" -B binary-only, only arch-specific files.\n"
+" -A binary-only, only arch-indep files.\n"
+" -S source-only, no binary files.\n"
+" -c<control-file> get control info from this file.\n"
+" -l<changelog-file> get per-version info from this file.\n"
+" -f<files-list-file> get .deb files list from this file.\n"
+" -v<since-version> include all changes later than version.\n"
+" -C<changes-description> use change description from this file.\n"
+" -m<maintainer> override control's maintainer value.\n"
+" -e<maintainer> override changelog's maintainer value.\n"
+" -u<upload-files-dir> directory with files (default is '..').\n"
+" -si source includes orig, if new upstream (default).\n"
+" -sa source includes orig, always.\n"
+" -sd source is diff and .dsc only.\n"
+" -q quiet - no informational messages on stderr.\n"
+" -F<changelog-format> force changelog format.\n"
+" -V<name>=<value> set a substitution variable.\n"
+" -T<substvars-file> read variables here, not debian/substvars.\n"
+" -D<field>=<value> override or add a field and value.\n"
+" -U<field> remove a field.\n"
+" -O[<filename>] write to stdout (default) or <filename>.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+"Opties:\n"
+" --build=<type>[,...] het bouw<type> opgeven: full, source, binary,\n"
+" any, all (standaard is 'full').\n"
+" -g broncode- en arch-onafhankelijke bouw.\n"
+" -G broncode- en arch-specifieke bouw.\n"
+" -b alleen binair, geen broncodebestanden.\n"
+" -B alleen binair, alleen arch-specifieke "
+"bestanden.\n"
+" -A alleen binair, enkel arch-onafhankelijke "
+"bestanden.\n"
+" -S alleen broncode, geen binaire bestanden.\n"
+" -c<control-bestand> control-info uit dit bestand halen.\n"
+" -l<changelog-bestand> informatie per versie uit dit bestand halen.\n"
+" -f<bestandenlijstbestand> .deb-bestandenlijst uit dit bestand halen.\n"
+" -v<sinds-versie> alle wijzigingen later dan versie opnemen.\n"
+" -C<changes-beschrijving> wijzigingenbeschrijving uit dit bestand halen.\n"
+" -m<onderhouder> waarde van onderhouder in control "
+"overschrijven.\n"
+" -e<onderhouder> waarde van onderhouder in changelog "
+"overschrijven.\n"
+" -u<upload-bestandenmap> map met bestanden (standaard is '..').\n"
+" -si bron bevat orig bij nieuwe bovenstroom "
+"(standaard).\n"
+" -sa broncode bevat altijd orig.\n"
+" -sd broncode is alleen diff en .dsc.\n"
+" -q stil - geen informatieve berichten op stderr.\n"
+" -F<changelog-indeling> changelog-indeling opleggen.\n"
+" -V<naam>=<waarde> een substitutievariabele instellen.\n"
+" -T<substvars-bestand> hier variabelen lezen, niet debian/substvars.\n"
+" -D<veld>=<waarde> een veld en waarde overschrijven of toevoegen.\n"
+" -U<veld> een veld verwijderen.\n"
+" -O[<bestandsnaam>] naar stdout (standaard) of <bestandsnaam> "
+"schrijven.\n"
+" -?, --help dit hulpbericht tonen.\n"
+" --version de versie tonen.\n"
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "the current version (%s) is earlier than the previous one (%s)"
+msgstr "de huidige versie (%s) is ouder dan de vorige (%s)"
+
+#: scripts/dpkg-genchanges.pl
+msgid "missing Section for source files"
+msgstr "voor broncodebestanden ontbreekt Section"
+
+#: scripts/dpkg-genchanges.pl
+msgid "missing Priority for source files"
+msgstr "voor broncodebestanden ontbreekt Priority"
+
+#: scripts/dpkg-genchanges.pl scripts/Dpkg/Vendor.pm
+#, perl-format
+msgid "%s is empty"
+msgstr "%s is leeg"
+
+#: scripts/dpkg-genchanges.pl
+msgid "not including original source code in upload"
+msgstr "originele broncode wordt niet inbegrepen in de upload"
+
+#: scripts/dpkg-genchanges.pl
+msgid "ignoring -sd option for native Debian package"
+msgstr "voor Debian-native pakket wordt de optie -sd genegeerd"
+
+#: scripts/dpkg-genchanges.pl
+msgid "including full source code in upload"
+msgstr "volledige broncode wordt inbegrepen in de upload"
+
+#: scripts/dpkg-genchanges.pl
+msgid ""
+"binary-only arch-specific upload (source code and arch-indep packages not "
+"included)"
+msgstr ""
+"alleen binaire architectuur-specifieke upload (broncode en architectuur-"
+"onafhankelijke pakketten worden niet inbegrepen)"
+
+#: scripts/dpkg-genchanges.pl
+msgid ""
+"binary-only arch-indep upload (source code and arch-specific packages not "
+"included)"
+msgstr ""
+"alleen binaire architectuur-onafhankelijke upload (broncode en architectuur-"
+"specifieke pakketten worden niet inbegrepen)"
+
+#: scripts/dpkg-genchanges.pl
+msgid "binary-only upload (no source code included)"
+msgstr "alleen binaire upload (er wordt geen broncode inbegrepen)"
+
+#: scripts/dpkg-genchanges.pl
+msgid "binary build with no binary artifacts found; cannot distribute"
+msgstr ""
+"binaire bouw zonder binaire voorwerpen aangetroffen; kan niet verdeeld worden"
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "package %s in control file but not in files list"
+msgstr "pakket %s in control-bestand maar niet in bestandenlijst"
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "package %s listed in files list but not in control info"
+msgstr "pakket %s vermeld in bestandenlijst maar niet in control-info"
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "missing Section for binary package %s; using '-'"
+msgstr "ontbrekende Section voor binair pakket %s; '-' wordt gebruikt"
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "package %s has section %s in control file but %s in files list"
+msgstr "pakket %s heeft sectie %s in control-bestand maar %s in bestandenlijst"
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "missing Priority for binary package %s; using '-'"
+msgstr "ontbrekende Priority voor binair pakket %s; '-' wordt gebruikt"
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "package %s has priority %s in control file but %s in files list"
+msgstr ""
+"pakket %s heeft prioriteit %s in control-bestand maar %s in bestandenlijst"
+
+#: scripts/dpkg-genchanges.pl scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "missing information for critical output field %s"
+msgstr "ontbrekende informatie voor kritiek uitvoerveld %s"
+
+#: scripts/dpkg-genchanges.pl scripts/dpkg-gencontrol.pl
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "missing information for output field %s"
+msgstr "ontbrekende informatie voor uitvoerveld %s"
+
+#: scripts/dpkg-gencontrol.pl
+msgid ""
+"Options:\n"
+" -p<package> print control file for package.\n"
+" -c<control-file> get control info from this file.\n"
+" -l<changelog-file> get per-version info from this file.\n"
+" -F<changelog-format> force changelog format.\n"
+" -v<force-version> set version of binary package.\n"
+" -f<files-list-file> write files here instead of debian/files.\n"
+" -P<package-build-dir> temporary build directory instead of debian/tmp.\n"
+" -n<filename> assume the package filename will be <filename>.\n"
+" -O[<file>] write to stdout (or <file>), not .../DEBIAN/"
+"control.\n"
+" -is, -ip, -isp, -ips deprecated, ignored for compatibility.\n"
+" -D<field>=<value> override or add a field and value.\n"
+" -U<field> remove a field.\n"
+" -V<name>=<value> set a substitution variable.\n"
+" -T<substvars-file> read variables here, not debian/substvars.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+"Opties:\n"
+" -p<pakket> control-bestand voor pakket weergeven.\n"
+" -c<control-bestand> control-info halen uit dit bestand.\n"
+" -l<changelog-bestand> informatie per versie uit dit bestand halen..\n"
+" -F<changelog-indeling> changelog-indeling opleggen.\n"
+" -v<forceer-versie> versie van binair pakket instellen.\n"
+" -f<bestandenlijstbestand> bestanden hier schrijven en niet in debian/"
+"files.\n"
+" -P<pakket-bouwmap> tijdelijke bouwmap in plaats van debian/tmp.\n"
+" -n<bestandsnaam> ervan uitgaan dat pakketbestandsnaam\n"
+" <bestandsnaam> zal zijn.\n"
+" -O[<bestand>] naar stdout (of <bestand>) schrijven,\n"
+" niet .../DEBIAN/control.\n"
+" -is, -ip, -isp, -ips verouderd, genegeerd voor compatibiliteit.\n"
+" -D<veld>=<waarde> een veld en waarde overschrijven of toevoegen.\n"
+" -U<veld> een veld verwijderen.\n"
+" -V<naam>=<waarde> een substitutievariabele instellen.\n"
+" -T<substvars-bestand> variabelen hier lezen, niet debian/substvars.\n"
+" -?, --help dit hulpbericht tonen.\n"
+" --version de versie tonen.\n"
+
+#: scripts/dpkg-gencontrol.pl scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "illegal package name '%s': %s"
+msgstr "ongeldige pakketnaam '%s': %s"
+
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid "package %s not in control info"
+msgstr "pakket %s niet in control-info"
+
+#: scripts/dpkg-gencontrol.pl scripts/dpkg-gensymbols.pl
+msgid "no package stanza found in control info"
+msgstr "geen pakketonderdeel gevonden in control-info"
+
+#: scripts/dpkg-gencontrol.pl scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "must specify package since control info has many (%s)"
+msgstr "moet pakket specificeren omdat control-info er veel heeft (%s)"
+
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid "package %s: "
+msgstr "pakket %s: "
+
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid ""
+"current host architecture '%s' does not appear in package '%s' architecture "
+"list (%s)"
+msgstr ""
+"huidige host-architectuur '%s' komt niet voor in de architectuurlijst van "
+"pakket '%s' (%s)"
+
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid "%s field of package %s: "
+msgstr "veld %s van pakket %s: "
+
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid "parsing package '%s' %s field: %s"
+msgstr "van pakket '%s' wordt veld %s ontleed: %s"
+
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid ""
+"the %s field contains an arch-specific dependency but the package '%s' is "
+"architecture all"
+msgstr ""
+"het veld %s bevat een architectuur-specifieke vereiste maar pakket '%s' is "
+"architecture all"
+
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid "%s package '%s' with udeb specific field %s"
+msgstr "%s pakket '%s' met udeb-specifiek veld %s"
+
+#: scripts/dpkg-gencontrol.pl scripts/Dpkg/Source/Package.pm
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot stat %s"
+msgstr "kan status van %s niet opvragen"
+
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid "cannot install output control file '%s'"
+msgstr "kan uitvoer-control-bestand '%s' niet installeren"
+
+#: scripts/dpkg-gensymbols.pl
+msgid ""
+"Options:\n"
+" -l<library-path> add directory to private shared library search "
+"list.\n"
+" -p<package> generate symbols file for package.\n"
+" -P<package-build-dir> temporary build directory instead of debian/tmp.\n"
+" -e<library> explicitly list libraries to scan.\n"
+" -v<version> version of the packages (defaults to\n"
+" version extracted from debian/changelog).\n"
+" -c<level> compare generated symbols file with the "
+"reference\n"
+" template in the debian directory and fail if\n"
+" difference is too important; level goes from 0 "
+"for\n"
+" no check, to 4 for all checks (default level is "
+"1).\n"
+" -q keep quiet and never emit any warnings or\n"
+" generate a diff between generated symbols\n"
+" file and the reference template.\n"
+" -I<file> force usage of <file> as reference symbols\n"
+" file instead of the default file.\n"
+" -O[<file>] write to stdout (or <file>), not .../DEBIAN/"
+"symbols.\n"
+" -t write in template mode (tags are not\n"
+" processed and included in output).\n"
+" -V verbose output; write deprecated symbols and "
+"pattern\n"
+" matching symbols as comments (in template mode "
+"only).\n"
+" -a<arch> assume <arch> as host architecture when "
+"processing\n"
+" symbol files.\n"
+" -d display debug information during work.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+"Opties:\n"
+" -l<bibliotheek-pad> map toevoegen aan de zoeklijst\n"
+" van de private gedeelde bibliotheken.\n"
+" -p<pakket> symbolenbestand genereren voor pakket.\n"
+" -P<pakket-bouwmap> tijdelijke bouwmap in plaats van debian/tmp.\n"
+" -e<bibliotheek> te scannen bibliotheken expliciet vermelden.\n"
+" -v<versie> versie van de pakketten (standaard ingesteld\n"
+" op uit debian/changelog geëxtraheerde versie).\n"
+" -c<level> gegenereerd symbolenbestand vergelijken met het\n"
+" referentiesjabloon in de map debian en falen "
+"als\n"
+" het verschil te belangrijk is; het niveau gaat\n"
+" van 0 voor geen controle naar 4 voor alle "
+"controles\n"
+" (het standaardniveau is 1).\n"
+" -q stil blijven en nooit waarschuwingen geven\n"
+" of een diff genereren tussen het gegenereerde\n"
+" symbolenbestand en het referentiesjabloon.\n"
+" -I<bestand> gebruik van <bestand> als "
+"referentiesymbolenbestand\n"
+" afdwingen in plaats van het standaardbestand.\n"
+" -O[<bestand>] naar stdout (of <bestand>) schrijven,\n"
+" niet .../DEBIAN/symbols.\n"
+" -t in sjabloonmodus schrijven (tags worden niet\n"
+" verwerkt en niet opgenomen in de uitvoer).\n"
+" -V uitgebreide uitvoer; verouderde symbolen en\n"
+" patroonvergelijkingssymbolen als commentaar\n"
+" opschrijven (enkel in sjabloonmodus).\n"
+" -a<arch> uitgaan van <arch> als host-architectuur\n"
+" bij de verwerking van symboolbestanden.\n"
+" -d debug-informatie weergeven tijdens het werk.\n"
+" -?, --help dit hulpbericht tonen.\n"
+" --version de versie tonen.\n"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "pattern '%s' did not match any file"
+msgstr "patroon '%s' kwam met geen enkel bestand overeen"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "can't read directory %s: %s"
+msgstr "kan map %s niet lezen: %s"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "Dpkg::Shlibs::Objdump couldn't parse %s\n"
+msgstr "Dpkg::Shlibs::Objdump kon %s niet ontleden\n"
+
+#: scripts/dpkg-gensymbols.pl
+msgid "<standard output>"
+msgstr "<standaarduitvoer>"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "new libraries appeared in the symbols file: %s"
+msgstr "nieuwe bibliotheken verschenen in het symbolenbestand: %s"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "some libraries disappeared in the symbols file: %s"
+msgstr "sommige bibliotheken verdwenen uit het symbolenbestand: %s"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "some new symbols appeared in the symbols file: %s"
+msgstr "er zijn enkele nieuwe symbolen verschenen in het symbolenbestand: %s"
+
+#: scripts/dpkg-gensymbols.pl
+msgid "see diff output below"
+msgstr "zie de uitvoer van diff hieronder"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "some symbols or patterns disappeared in the symbols file: %s"
+msgstr "sommige symbolen of patronen verdwenen uit het symbolenbestand: %s"
+
+#: scripts/dpkg-gensymbols.pl
+msgid "the generated symbols file is empty"
+msgstr "het gegenereerde symbolenbestand is leeg"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "%s doesn't match completely %s"
+msgstr "%s komt niet volledig overeen met %s"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "no debian/symbols file used as basis for generating %s"
+msgstr ""
+"geen bestand debian/symbols gebruikt als basis voor het genereren van %s"
+
+#: scripts/dpkg-mergechangelogs.pl
+msgid ""
+"This is free software; see the GNU General Public License version 2 or\n"
+"later for copying conditions. There is NO warranty.\n"
+msgstr ""
+"Dit is vrije software; zie de GNU General Public Licentie versie 2\n"
+"of later voor de kopieervoorwaarden. Er is GEEN garantie.\n"
+
+#: scripts/dpkg-mergechangelogs.pl
+#, perl-format
+msgid ""
+"Usage: %s [<option>...] <old> <new-a> <new-b> [<out>]\n"
+"\n"
+"Options:\n"
+" -m, --merge-prereleases merge pre-releases together, ignores everything\n"
+" after the last '~' in the version.\n"
+" --merge-unreleased merge UNRELEASED entries together, ignoring "
+"their\n"
+" version numbers.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+"Gebruik: %s [<optie>...] <oud> <nieuw-a> <nieuw-b> [<uit>]\n"
+"\n"
+"Opties:\n"
+" -m, --merge-prereleases pre-releases samenvoegen, negeert alles\n"
+" na het laatste '~' in de versie.\n"
+" --merge-unreleased items van UNRELEASED samenvoegen, zonder\n"
+" rekening te houden met hun versienummer.\n"
+" -?, --help dit hulpbericht tonen.\n"
+" --version de versie tonen.\n"
+
+#: scripts/dpkg-mergechangelogs.pl
+msgid "needs at least three arguments"
+msgstr "heeft ten minste drie argumenten nodig"
+
+#: scripts/dpkg-mergechangelogs.pl
+msgid "file arguments need to exist"
+msgstr "bestandsargumenten moeten bestaan"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "Usage: %s [<option>...] <file>...\n"
+msgstr "Gebruik: %s [<optie>...] <bestand>...\n"
+
+#: scripts/dpkg-name.pl
+msgid ""
+"\n"
+"Options:\n"
+" -a, --no-architecture no architecture part in filename.\n"
+" -o, --overwrite overwrite if file exists.\n"
+" -k, --symlink don't create a new file, but a symlink.\n"
+" -s, --subdir [dir] move file into subdirectory (use with care).\n"
+" -c, --create-dir create target directory if not there (use with "
+"care).\n"
+" -?, --help show this help message.\n"
+" -v, --version show the version.\n"
+"\n"
+"file.deb changes to <package>_<version>_<architecture>.<package_type>\n"
+"according to the 'underscores convention'.\n"
+msgstr ""
+"\n"
+"Opties:\n"
+" -a, --no-architecture geen architectuurgedeelte in bestandsnaam.\n"
+" -o, --overwrite overschrijven als het bestand bestaat.\n"
+" -k, --symlink geen nieuw bestand maar een\n"
+" symbolische koppeling creëren.\n"
+" -s, --subdir [map] bestand naar onderliggende map verplaatsen\n"
+" (voorzichtig gebruiken).\n"
+" -c, --create-dir doelmap creëren als ze niet bestaat\n"
+" (voorzichtig gebruiken).\n"
+" -?, --help dit hulpbericht tonen.\n"
+" -v, --version de versie tonen.\n"
+"\n"
+"file.deb verandert naar <pakket>_<versie>_<architectuur>.<pakket_type>\n"
+"volgens de 'liggende-streepjesconventie'.\n"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "cannot find '%s'"
+msgstr "kan '%s' niet vinden"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "binary control file %s"
+msgstr "binair control-bestand %s"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "assuming architecture '%s' for '%s'"
+msgstr "er wordt uitgegaan van architectuur '%s' voor '%s'"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "bad package control information for '%s'"
+msgstr "slechte pakketcontrol-informatie voor '%s'"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "assuming section '%s' for '%s'"
+msgstr "er wordt uitgegaan van sectie '%s' voor '%s'"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "no Package field found in '%s', skipping package"
+msgstr "geen veld Package gevonden in '%s', pakket wordt overgeslagen"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "created directory '%s'"
+msgstr "map '%s' werd aangemaakt"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "cannot create directory '%s'"
+msgstr "kan map '%s' niet aanmaken"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "no such directory '%s', try --create-dir (-c) option"
+msgstr "geen dergelijke map '%s', probeer het met de optie --create-dir (-c)"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "skipping '%s'"
+msgstr "'%s' wordt overgeslagen"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "cannot move '%s' to existing file"
+msgstr "kan '%s' niet naar een bestaand bestand verplaatsen"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "moved '%s' to '%s'"
+msgstr "'%s' verplaatst naar '%s'"
+
+#: scripts/dpkg-name.pl
+msgid "mkdir can be used to create directory"
+msgstr "mkdir kan gebruikt worden om de map aan te maken"
+
+#: scripts/dpkg-name.pl
+msgid "need at least a filename"
+msgstr "heb ten minste een bestandsnaam nodig"
+
+#: scripts/dpkg-parsechangelog.pl
+msgid ""
+"Options:\n"
+" -l, --file <changelog-file>\n"
+" get per-version info from this file.\n"
+" -F <changelog-format> force changelog format.\n"
+" -S, --show-field <field> show the values for <field>.\n"
+" -?, --help show this help message.\n"
+" --version show the version."
+msgstr ""
+"Opties:\n"
+" -l, --file <changelog-bestand>\n"
+" informatie per versie uit dit bestand halen.\n"
+" -F <changelog-indeling> indeling voor changelog opleggen.\n"
+" -S, --show-field <veld> de waarden voor <veld> tonen.\n"
+" -?, --help dit hulpbericht tonen.\n"
+" --version de versie tonen."
+
+#: scripts/dpkg-parsechangelog.pl
+msgid ""
+"Parser options:\n"
+" --format <output-format>\n"
+" set output format (defaults to 'dpkg').\n"
+" --reverse include all changes in reverse order.\n"
+" --all include all changes.\n"
+" -s, --since <version> include all changes later than <version>.\n"
+" -v <version> ditto.\n"
+" -u, --until <version> include all changes earlier than <version>.\n"
+" -f, --from <version> include all changes equal or later than "
+"<version>.\n"
+" -t, --to <version> include all changes up to or equal than "
+"<version>.\n"
+" -c, --count <number> include <number> entries from the top (or tail\n"
+" if <number> is lower than 0).\n"
+" -n <number> ditto.\n"
+" -o, --offset <number> change starting point for --count, counted from\n"
+" the top (or tail if <number> is lower than 0).\n"
+msgstr ""
+"Opties voor de ontleder:\n"
+" --format <uitvoer-indeling>\n"
+" uitvoer-indeling instellen (standaard is "
+"'dpkg').\n"
+" --reverse alle wijzigingen in omgekeerde volgorde opnemen.\n"
+" --all alle wijzigingen opnemen.\n"
+" -s, --since <versie> alle wijzigingen sinds <versie> opnemen.\n"
+" -v <versie> idem.\n"
+" -u, --until <versie> alle wijzigingen voorafgaand aan <versie> "
+"opnemen.\n"
+" -f, --from <versie> alle wijzigingen van <versie> en later opnemen.\n"
+" -t, --to <versie> alle wijzigingen tot en met <versie> opnemen.\n"
+" -c, --count <aantal> <aantal> items vanaf het begin (of het einde\n"
+" als <aantal> lager is dan 0) opnemen.\n"
+" -n <aantal> idem.\n"
+" -o, --offset <aantal> startpunt voor --count wijzigen, te tellen vanaf\n"
+" het begin (of einde als <aantal> lager is dan "
+"0).\n"
+
+#: scripts/dpkg-parsechangelog.pl
+msgid "-L is obsolete; it is without effect"
+msgstr "-L is verouderd; het heeft geen effect"
+
+#: scripts/dpkg-parsechangelog.pl
+msgid "bad changelog format name"
+msgstr "foute naam voor changelog-indeling"
+
+#: scripts/dpkg-parsechangelog.pl
+msgid "missing changelog filename"
+msgstr "bestandsnaam voor changelog ontbreekt"
+
+#: scripts/dpkg-parsechangelog.pl
+msgid "takes no non-option arguments"
+msgstr "aanvaardt geen argumenten die geen opties zijn"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid ""
+"Usage: %s [<option>...] <binary-path> [<override-file> [<path-prefix>]] > "
+"Packages\n"
+"\n"
+"Options:\n"
+" -t, --type <type> scan for <type> packages (default is 'deb').\n"
+" -a, --arch <arch> architecture to scan for.\n"
+" -h, --hash <hash-list> only generate hashes for the specified list.\n"
+" -m, --multiversion allow multiple versions of a single package.\n"
+" -e, --extra-override <file>\n"
+" use extra override file.\n"
+" -M, --medium <medium> add X-Medium field for dselect media access "
+"method\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+"Gebruik: %s [<optie>...] <binair-pad> [<override-bestand> [<pad-prefix>]] > "
+"Packages\n"
+"\n"
+"Opties:\n"
+" -t, --type <type> zoeken naar pakketten van <type> (standaard is "
+"'deb').\n"
+" -a, --arch <arch> te zoeken architectuur.\n"
+" -h, --hash <hash-lijst> alleen hashes maken voor de opgegeven lijst.\n"
+" -m, --multiversion meerdere versies van eenzelfde pakket toestaan.\n"
+" -e, --extra-override <bestand>\n"
+" een extra override-bestand gebruiken.\n"
+" -M, --medium <medium> X-Medium veld toevoegen voor de\n"
+" mediabenaderingsmethode van dselect\n"
+" -?, --help dit hulpbericht tonen.\n"
+" --version de versie tonen.\n"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid " %s (package says %s, not %s)"
+msgstr " %s (pakket zegt %s, niet %s)"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "unconditional maintainer override for %s"
+msgstr "onvoorwaardelijke overschrijving van onderhouder voor %s"
+
+#: scripts/dpkg-scanpackages.pl scripts/dpkg-shlibdeps.pl scripts/Dpkg/IPC.pm
+#: scripts/Dpkg/Shlibs/Objdump.pm
+#, perl-format
+msgid "cannot fork for %s"
+msgstr "kan niet afsplitsen voor %s"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "couldn't parse control information from %s"
+msgstr "kon control-informatie van %s niet ontleden"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "'dpkg-deb -I %s control' exited with %d, skipping package"
+msgstr ""
+"'dpkg-deb -I %s control' is afgesloten met %d, pakket wordt overgeslagen"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "no Package field in control file of %s"
+msgstr "geen veld Package in control-bestand van %s"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid ""
+"package %s (filename %s) is repeat but newer version; used that one and "
+"ignored data from %s!"
+msgstr ""
+"pakket %s (bestandsnaam %s) is herhaling maar nieuwere versie; gebruikte die "
+"en negeerde gegevens van %s!"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid ""
+"package %s (filename %s) is repeat; ignored that one and using data from %s!"
+msgstr ""
+"pakket %s (bestandsnaam %s) is herhaling; negeerde die en gebruikte gegevens "
+"van %s!"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "package %s (filename %s) has Filename field!"
+msgstr "pakket %s (bestandsnaam %s) heeft veld Filename!"
+
+#: scripts/dpkg-scanpackages.pl scripts/dpkg-scansources.pl
+msgid "one to three arguments expected"
+msgstr "één tot drie argumenten verwacht"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "unsupported checksum '%s'"
+msgstr "niet-ondersteund controlegetal '%s'"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "binary path %s not found"
+msgstr "binair pad %s niet gevonden"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "override file %s not found"
+msgstr "override-bestand %s niet gevonden"
+
+#: scripts/dpkg-scanpackages.pl
+msgid "failed when writing stdout"
+msgstr "mislukking bij het schrijven naar stdout"
+
+#: scripts/dpkg-scanpackages.pl
+msgid "couldn't close stdout"
+msgstr "kon stdout niet sluiten"
+
+#: scripts/dpkg-scanpackages.pl
+msgid "Packages with multiple instances but no --multiversion specified:"
+msgstr "Packages met meerdere instanties maar geen opgave van --multiversion:"
+
+#: scripts/dpkg-scanpackages.pl
+msgid "Packages in override file with incorrect old maintainer value:"
+msgstr ""
+"Packages in override-bestand met onjuiste oude waarde voor onderhouder:"
+
+#: scripts/dpkg-scanpackages.pl
+msgid "Packages specifying same maintainer as override file:"
+msgstr "Packages dat dezelfde onderhouder vermeldt als het override-bestand:"
+
+#: scripts/dpkg-scanpackages.pl
+msgid "Packages in archive but missing from override file:"
+msgstr "Packages in het archief maar ontbreekt in het override-bestand:"
+
+#: scripts/dpkg-scanpackages.pl
+msgid "Packages in override file but not in archive:"
+msgstr "Packages in het override-bestand maar niet in het archief:"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "Wrote %s entries to output Packages file."
+msgstr "Schreef %s items naar uitvoerbestand Packages."
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid ""
+"Usage: %s [<option>...] <binary-path> [<override-file> [<path-prefix>]] > "
+"Sources\n"
+"\n"
+"Options:\n"
+" -n, --no-sort don't sort by package before outputting.\n"
+" -e, --extra-override <file>\n"
+" use extra override file.\n"
+" -s, --source-override <file>\n"
+" use file for additional source overrides, "
+"default\n"
+" is regular override file with .src appended.\n"
+" --debug turn debugging on.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+"\n"
+"See the man page for the full documentation.\n"
+msgstr ""
+"Gebruik: %s [<optie>...] <binair-pad> [<override-bestand> [<pad-prefix>]] > "
+"Sources\n"
+"\n"
+"Opties:\n"
+" -n, --no-sort niet op pakket sorteren voor de uitvoer.\n"
+" -e, --extra-override <bestand>\n"
+" extra override-bestand gebruiken.\n"
+" -s, --source-override <bestand>\n"
+" bestand gebruiken voor extra bron-overrides, "
+"standaard\n"
+" is regulier override-bestand met achtervoegsel ."
+"src.\n"
+" --debug debuggen activeren.\n"
+" -?, --help dit hulpbericht tonen.\n"
+" --version de versie tonen.\n"
+"\n"
+"Zie de man-pagina voor de volledige documentatie.\n"
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid "invalid override entry at line %d (%d fields)"
+msgstr "ongeldig override-item op regel %d (%d velden)"
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid "ignoring duplicate override entry for %s at line %d"
+msgstr "negeren van dubbel override-item voor %s op regel %d"
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid "ignoring override entry for %s, invalid priority %s"
+msgstr "negeren van override-item voor %s, ongeldige prioriteit %s"
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid "invalid source override entry at line %d (%d fields)"
+msgstr "ongeldig broncode-override-item op regel %d (%d velden)"
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid "ignoring duplicate source override entry for %s at line %d"
+msgstr "negeren van dubbel broncode-override-item voor %s op regel %d"
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid "no binary packages specified in %s"
+msgstr "geen binaire pakketten opgegeven in %s"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "administrative directory '%s' does not exist"
+msgstr "administratieve map '%s' bestaat niet"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "unrecognized dependency field '%s'"
+msgstr "niet-herkend vereisten-veld '%s'"
+
+#: scripts/dpkg-shlibdeps.pl
+msgid "need at least one executable"
+msgstr "ten minste één uitvoerbaar bestand nodig"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid ""
+"cannot find library %s needed by %s (ELF format: '%s' abi: '%s'; RPATH: '%s')"
+msgstr ""
+"kan bibliotheek %s die nodig is voor %s niet vinden (ELF format: '%s' abi: "
+"'%s'; RPATH: '%s')"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "%s has an unexpected SONAME (%s)"
+msgstr "%s heeft een onverwachte SONAME (%s)"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid ""
+"no dependency information found for %s (used by %s)\n"
+"Hint: check if the library actually comes from a package."
+msgstr ""
+"geen vereisteninformatie gevonden voor %s (gebruikt door %s)\n"
+"Tip: controleer of de bibliotheek daadwerkelijk uit een pakket komt."
+
+#: scripts/dpkg-shlibdeps.pl
+msgid ""
+"binaries to analyze should already be installed in their package's directory"
+msgstr ""
+"te analyseren binaire bestanden zouden al in de map van hun pakket moeten "
+"zijn geïnstalleerd"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "symbol %s used by %s found in none of the libraries"
+msgstr "symbool %s gebruikt door %s in geen van de bibliotheken gevonden"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid ""
+"%s contains an unresolvable reference to symbol %s: it's probably a plugin"
+msgstr ""
+"%s bevat een onoplosbare verwijzing naar symbool %s: het is waarschijnlijk "
+"een plug-in"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "%d similar warning has been skipped (use -v to see it)"
+msgid_plural ""
+"%d other similar warnings have been skipped (use -v to see them all)"
+msgstr[0] "%d analoge waarschuwing is overgeslagen (gebruik -v om ze te zien)"
+msgstr[1] ""
+"%d andere analoge waarschuwingen zijn overgeslagen (gebruik -v om ze "
+"allemaal te zien)"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid ""
+"%s should not be linked against %s (it uses none of the library's symbols)"
+msgstr ""
+"%s mag niet gekoppeld worden met %s (het gebruikt geen symbolen van de "
+"bibliotheek)"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid ""
+"package could avoid a useless dependency if %s was not linked against %s (it "
+"uses none of the library's symbols)"
+msgid_plural ""
+"package could avoid a useless dependency if %s were not linked against %s "
+"(they use none of the library's symbols)"
+msgstr[0] ""
+"pakket zou een nutteloze vereiste kunnen vermijden als %s niet gekoppeld was "
+"met %s (het gebruikt geen symbolen van de bibliotheek)"
+msgstr[1] ""
+"pakket zou een nutteloze vereiste kunnen vermijden als %s niet gekoppeld "
+"waren met %s (ze gebruiken geen symbolen van de bibliotheek)"
+
+#: scripts/dpkg-shlibdeps.pl
+msgid ""
+"Note: libraries are not searched in other binary packages that do not have "
+"any shlibs or symbols file.\n"
+"To help dpkg-shlibdeps find private libraries, you might need to use -l."
+msgstr ""
+"Opmerking: bibliotheken worden niet gezocht in andere binaire pakketten die "
+"geen shlibs of symbolenbestand hebben.\n"
+"Om dpkg-shlibdeps te helpen private bibliotheken te vinden, moet u misschien "
+"-l gebruiken."
+
+#: scripts/dpkg-shlibdeps.pl
+msgid "cannot continue due to the error above"
+msgid_plural "cannot continue due to the errors listed above"
+msgstr[0] "kan niet doorgaan vanwege bovenstaande fout"
+msgstr[1] "kan niet doorgaan vanwege de hierboven vermelde fouten"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "invalid dependency got generated: %s"
+msgstr "er werd een ongeldige vereiste gegenereerd: %s"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "install new varlist file '%s'"
+msgstr "nieuw varlist-bestand '%s' installeren"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "Usage: %s [<option>...] <executable>|-e<executable> [<option>...]"
+msgstr ""
+"Gebruik: %s [<optie>...] <uitvoerbaar-bestand>|-e<uitvoerbaar-bestand> "
+"[<optie>...]"
+
+#: scripts/dpkg-shlibdeps.pl
+msgid ""
+"Positional options (order is significant):\n"
+" <executable> include dependencies for <executable>,\n"
+" -e<executable> (use -e if <executable> starts with '-')\n"
+" -d<dependency-field> next executable(s) set shlibs:<dependency-field>."
+msgstr ""
+"Positionele opties (volgorde is van belang):\n"
+" <uitvoerbaar-bestand> vereisten opnemen voor <uitvoerbaar-bestand>,\n"
+" -e<uitvoerbaar-bestand> (gebruik -e als <uitvoerbaar-bestand> begint met "
+"'-')\n"
+" -d<vereisten-veld> volgende uitvoerba(a)r(e) bestand(en)\n"
+" stellen shlibs:<vereisten-veld> in."
+
+#: scripts/dpkg-shlibdeps.pl
+msgid ""
+"Options:\n"
+" -l<library-dir> add directory to private shared library search "
+"list.\n"
+" -p<varname-prefix> set <varname-prefix>:* instead of shlibs:*.\n"
+" -O[<file>] write variable settings to stdout (or <file>).\n"
+" -L<local-shlibs-file> shlibs override file, not debian/shlibs.local.\n"
+" -T<substvars-file> update variables here, not debian/substvars.\n"
+" -t<type> set package type (default is deb).\n"
+" -x<package> exclude package from the generated dependencies.\n"
+" -S<package-build-dir> search needed libraries in the given\n"
+" package build directory first.\n"
+" -I<package-build-dir> ignore needed libraries, shlibs and symbols "
+"files\n"
+" in the given build directory.\n"
+" -v enable verbose mode (can be used multiple "
+"times).\n"
+" --ignore-missing-info don't fail if dependency information can't be "
+"found.\n"
+" --warnings=<value> define set of active warnings (see manual page).\n"
+" --admindir=<directory> change the administrative directory.\n"
+" -?, --help show this help message.\n"
+" --version show the version."
+msgstr ""
+"Opties:\n"
+" -l<bib-map> map toevoegen aan zoeklijst private gedeelde "
+"bib.\n"
+" -p<varnaam-prefix> <varnaam-prefix> instellen op:*\n"
+" in plaats van op shlibs:*.\n"
+" -O[<bestand>] variabele-instellingen naar\n"
+" stdout (of <bestand> schrijven).\n"
+" -L<lokaal-shlibs-bestand> shlibs override-bestand, niet debian/shlibs."
+"local.\n"
+" -T<substvars-bestand> variabelen hier updaten, niet debian/substvars.\n"
+" -t<type> pakkettype instellen (standaard is deb).\n"
+" -x<pakket> pakket uitsluiten van de gegenereerde "
+"vereisten.\n"
+" -S<pakket-bouw-map> benodigde bibliotheken eerst zoeken in de\n"
+" opgegeven bouwmap van het pakket.\n"
+" -I<pakket-bouw-map> benodigde bibliotheken, shlibs- en "
+"symbolenbestanden\n"
+" negeren in de opgegeven bouwmap.\n"
+" -v uitgebreide modus activeren\n"
+" (kan meermaals gebruikt worden).\n"
+" --ignore-missing-info niet falen als vereisteninformatie\n"
+" niet kan worden gevonden.\n"
+" --warnings=<waarde> reeks actieve waarschuwingen definiëren\n"
+" (zie man-pagina).\n"
+" --admindir=<map> administratieve map wijzigen.\n"
+" -?, --help dit hulpbericht tonen.\n"
+" --version de versie tonen."
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid ""
+"Dependency fields recognized are:\n"
+" %s\n"
+msgstr ""
+"Herkende vereistenvelden zijn:\n"
+" %s\n"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "can't extract name and version from library name '%s'"
+msgstr "kan naam en versie niet extraheren uit bibliotheeknaam '%s'"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "unable to open shared libs info file '%s'"
+msgstr "kan info-bestand '%s' over gedeelde bibliotheken niet openen"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "shared libs info file '%s' line %d: bad line '%s'"
+msgstr ""
+"info-bestand '%s' over gedeelde bibliotheken regel %d: slechte regel '%s'"
+
+#: scripts/dpkg-shlibdeps.pl scripts/Dpkg/Changelog/Parse.pm
+#: scripts/Dpkg/Checksums.pm
+#, perl-format
+msgid "cannot open file %s"
+msgstr "kan bestand %s niet openen"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid ""
+"$ORIGIN is used in RPATH of %s and the corresponding directory could not be "
+"identified due to lack of DEBIAN sub-directory in the root of package's "
+"build tree"
+msgstr ""
+"$ORIGIN wordt gebruikt in RPATH van %s en de overeenkomstige map kon niet "
+"worden geïdentificeerd vanwege het ontbreken van een DEBIAN-submap in de "
+"hoofdmap van de bouwstructuur van het pakket"
+
+#: scripts/dpkg-shlibdeps.pl
+msgid "diversions involved - output may be incorrect"
+msgstr "er zijn omleidingen bij betrokken - uitvoer kan onjuist zijn"
+
+#: scripts/dpkg-shlibdeps.pl
+msgid "write diversion info to stderr"
+msgstr "omleidingsinformatie naar stderr schrijven"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "unknown output from dpkg --search: '%s'"
+msgstr "onbekende uitvoer van dpkg --search: '%s'"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "--%s needs a directory"
+msgstr "--%s heeft een map nodig"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "cannot stat directory %s"
+msgstr "kan status van map %s niet opvragen"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "directory argument %s is not a directory"
+msgstr "map-argument %s is geen map"
+
+#: scripts/dpkg-source.pl scripts/Dpkg/Source/BinaryFiles.pm
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "unable to chdir to '%s'"
+msgstr "kan chdir '%s' niet uitvoeren"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "using options from %s: %s"
+msgstr "opties van %s worden gebruikt: %s"
+
+#: scripts/dpkg-source.pl scripts/Dpkg/Compression.pm
+#, perl-format
+msgid "%s is not a supported compression"
+msgstr "%s is geen ondersteunde compressie"
+
+#: scripts/dpkg-source.pl scripts/Dpkg/Compression.pm
+#, perl-format
+msgid "%s is not a compression level"
+msgstr "%s is geen compressieniveau"
+
+#: scripts/dpkg-source.pl
+msgid "-E and -W are deprecated, they are without effect"
+msgstr "-E en -W zijn verouderd, ze hebben geen effect"
+
+#: scripts/dpkg-source.pl scripts/dpkg-vendor.pl
+msgid "need an action option"
+msgstr "heb een actie-optie nodig"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "no source format specified in %s, see dpkg-source(1)"
+msgstr "geen broncode-indeling opgegeven in %s, zie dpkg-source(1)"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "%s doesn't contain any information about the source package"
+msgstr "%s bevat geen informatie over het broncodepakket"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "'%s' is not a legal architecture string in package '%s'"
+msgstr "'%s' is geen geldige architectuurtekenreeks in pakket '%s'"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "architecture %s only allowed on its own (list for package %s is '%s')"
+msgstr ""
+"architectuur %s alleen op zich toegestaan (lijst voor pakket %s is '%s')"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "%s doesn't list any binary package"
+msgstr "%s vermeldt geen enkel binair pakket"
+
+#: scripts/dpkg-source.pl
+msgid "building source for a binary-only release"
+msgstr "broncode bouwen voor een release die enkel-binair is"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "can't build with source format '%s': %s"
+msgstr "kan niet bouwen met broncode-indeling '%s': %s"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "using source format '%s'"
+msgstr "broncode-indeling '%s' wordt gebruikt"
+
+#: scripts/dpkg-source.pl scripts/Dpkg/Source/Package/V1.pm
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Package/V3/Bzr.pm
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+#, perl-format
+msgid "building %s in %s"
+msgstr "%s wordt in %s gebouwd"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "--%s needs at least one argument, the .dsc"
+msgstr "--%s heeft ten minste één argument nodig, de .dsc"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "--%s takes no more than two arguments"
+msgstr "--%s mag niet meer dan twee argumenten hebben"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "--%s needs the .dsc file as first argument, not a directory"
+msgstr "--%s heeft het .dsc-bestand nodig als eerste argument, geen map"
+
+#: scripts/dpkg-source.pl scripts/Dpkg/Source/Package/V1.pm
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Package/V3/Bzr.pm
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+#, perl-format
+msgid "unpack target exists: %s"
+msgstr "uitpakdoel bestaat: %s"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "%s doesn't contain a valid OpenPGP signature"
+msgstr "%s bevat geen geldige OpenPGP-handtekening"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "extracting unsigned source package (%s)"
+msgstr "uitpakken van niet-ondertekend broncodepakket (%s)"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "extracting %s in %s"
+msgstr "uitpakken van %s in %s"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "test control %s is not a regular file"
+msgstr "test control %s is geen regulier bestand"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "%s field contains value %s, but no tests control file %s"
+msgstr "veld %s bevat waarde %s, maar geen tests control-bestand %s"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "test control %s is missing %s or %s field"
+msgstr "test control %s mist veld %s of %s"
+
+#: scripts/dpkg-source.pl
+msgctxt "source options"
+msgid "<none>"
+msgstr "<geen>"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "Usage: %s [<option>...] <command>"
+msgstr "Gebruik: %s [<optie>...] <commando>"
+
+#: scripts/dpkg-source.pl
+msgid ""
+"Commands:\n"
+" -x, --extract <filename>.dsc [<output-dir>]\n"
+" extract source package.\n"
+" -b, --build <dir> build source package.\n"
+" --print-format <dir> print the format to be used for the source "
+"package.\n"
+" --before-build <dir> run the corresponding source package format "
+"hook.\n"
+" --after-build <dir> run the corresponding source package format "
+"hook.\n"
+" --commit [<dir> [<patch-name>]]\n"
+" store upstream changes in a new patch."
+msgstr ""
+"Commando's:\n"
+" -x, --extract <bestandsnaam>.dsc [<uitvoer-map>]\n"
+" broncodepakket uitpakken.\n"
+" -b, --build <map> broncodepakket bouwen.\n"
+" --print-format <map> voor broncodepakket te gebruiken indeling "
+"weergeven.\n"
+" --before-build <map> de overeenkomstige\n"
+" hook voor broncodepakketindeling uitvoeren.\n"
+" --after-build <map> de overeenkomstige\n"
+" hook voor broncodepakketindeling uitvoeren.\n"
+" --commit [<map> [<patch-naam>]]\n"
+" bovenstroomse wijzigingen in nieuwe patch opslaan."
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid ""
+"Build options:\n"
+" -c<control-file> get control info from this file.\n"
+" -l<changelog-file> get per-version info from this file.\n"
+" -F<changelog-format> force changelog format.\n"
+" --format=<source-format> set the format to be used for the source "
+"package.\n"
+" -V<name>=<value> set a substitution variable.\n"
+" -T<substvars-file> read variables here.\n"
+" -D<field>=<value> override or add a .dsc field and value.\n"
+" -U<field> remove a field.\n"
+" -i, --diff-ignore[=<regex>]\n"
+" filter out files to ignore diffs of\n"
+" (defaults to: '%s').\n"
+" -I, --tar-ignore[=<pattern>]\n"
+" filter out files when building tarballs\n"
+" (defaults to: %s).\n"
+" -Z, --compression=<compression>\n"
+" select compression to use (defaults to '%s',\n"
+" supported are: %s).\n"
+" -z, --compression-level=<level>\n"
+" compression level to use (defaults to '%d',\n"
+" supported are: '1'-'9', 'best', 'fast')"
+msgstr ""
+"Bouwopties:\n"
+" -c<control-bestand> control-info uit dit bestand halen.\n"
+" -l<changelog-bestand> informatie per versie uit dit bestand halen.\n"
+" -F<changelog-indeling> changelog-indeling afdwingen.\n"
+" --format=<broncode-indeling>\n"
+" voor broncodepakket te gebruiken indeling "
+"instellen.\n"
+" -V<naam>=<waarde> een substitutievariabele instellen.\n"
+" -T<substvars-bestand> variabelen hier lezen.\n"
+" -D<veld>=<waarde> een .dsc-veld en -waarde overschrijven of "
+"toevoegen.\n"
+" -U<veld> een veld verwijderen.\n"
+" -i, --diff-ignore[=<regex>]\n"
+" bestanden uitfilteren om diffs ervan te negeren\n"
+" (standaard is: '%s').\n"
+" -I, --tar-ignore[=<patroon>]\n"
+" bestanden uitfilteren bij de bouw van tar-"
+"archieven\n"
+" (standaard is: %s).\n"
+" -Z, --compression=<compressie>\n"
+" te gebruiken compressie kiezen (standaard is "
+"'%s',\n"
+" ondersteund worden: %s).\n"
+" -z, --compression-level=<niveau>\n"
+" te gebruiken compressieniveau (standaard is "
+"'%d',\n"
+" ondersteund worden: '1'-'9', 'best', 'fast')"
+
+#: scripts/dpkg-source.pl
+msgid ""
+"Extract options:\n"
+" --no-copy don't copy .orig tarballs\n"
+" --no-check don't check signature and checksums before "
+"unpacking\n"
+" --no-overwrite-dir do not overwrite directory on extraction\n"
+" --require-valid-signature abort if the package doesn't have a valid "
+"signature\n"
+" --require-strong-checksums\n"
+" abort if the package contains no strong "
+"checksums\n"
+" --ignore-bad-version allow bad source package versions."
+msgstr ""
+"Extractieopties:\n"
+" --no-copy .orig-tar-archieven niet kopiëren\n"
+" --no-check handtekening en controlegetallen\n"
+" voor het uitpakken niet controleren\n"
+" --no-overwrite-dir map bij het extraheren niet overschrijven\n"
+" --require-valid-signature afbreken als het pakket geen\n"
+" geldige handtekening heeft\n"
+" --require-strong-checksums\n"
+" afbreken als het pakket geen\n"
+" sterke controlegetallen bevat\n"
+" --ignore-bad-version slechte broncodepakketversies toestaan."
+
+#: scripts/dpkg-source.pl
+msgid ""
+"General options:\n"
+" --threads-max=<threads>\n"
+" use at most <threads> with compressor.\n"
+" -q quiet mode.\n"
+" -?, --help show this help message.\n"
+" --version show the version."
+msgstr ""
+"Algemene opties:\n"
+" --threads-max=<threads>\n"
+" ten hoogste <threads> voor compressor gebruiken.\n"
+" -q stille modus.\n"
+" -?, --help dit hulpbericht tonen.\n"
+" --version de versie tonen."
+
+#: scripts/dpkg-source.pl
+msgid ""
+"Source format specific build and extract options are available;\n"
+"use --format with --help to see them."
+msgstr ""
+"Er zijn broncode-indelingsspecifieke bouw- en extractieopties beschikbaar;\n"
+"gebruik --format met --help om ze te zien."
+
+#: scripts/dpkg-vendor.pl
+msgid ""
+"Commands:\n"
+" --is <vendor> returns true if current vendor is <vendor>.\n"
+" --derives-from <vendor> returns true if current vendor derives from "
+"<vendor>.\n"
+" --query <field> print the content of the vendor-specific field.\n"
+" --help show this help message.\n"
+" --version show the version."
+msgstr ""
+"Commando's:\n"
+" --is <verdeler> geeft waar als de huidige verdeler <verdeler> "
+"is.\n"
+" --derives-from <verdeler> geeft waar als de huidige verdeler\n"
+" een derivaat is van <verdeler>.\n"
+" --query <veld> inhoud v.h. verdeler-specifieke veld "
+"weergeven.\n"
+" --help dit hulpbericht tonen.\n"
+" --version de versie tonen."
+
+#: scripts/dpkg-vendor.pl
+msgid ""
+"Options:\n"
+" --vendor <vendor> assume <vendor> is the current vendor."
+msgstr ""
+"Opties:\n"
+" --vendor <verdeler> aannemen dat <verdeler> de huidige verdeler is."
+
+#: scripts/dpkg-vendor.pl
+#, perl-format
+msgid "vendor %s doesn't exist in %s"
+msgstr "verdeler %s bestaat niet in %s"
+
+#: scripts/Dpkg/Arch.pm
+msgid ""
+"cannot determine CC system type, falling back to default (native compilation)"
+msgstr ""
+"kan CC-systeemtype niet bepalen, er wordt teruggevallen op de standaard "
+"(native compilatie)"
+
+#: scripts/Dpkg/Arch.pm
+#, perl-format
+msgid "unknown CC system type %s, falling back to default (native compilation)"
+msgstr ""
+"onbekend CC-systeemtype %s, er wordt teruggevallen op de standaard (native "
+"compilatie)"
+
+#: scripts/Dpkg/Arch.pm
+#, perl-format
+msgid "'%s' is not a legal architecture in list '%s'"
+msgstr "'%s' is geen geldige architectuur in lijst '%s'"
+
+#: scripts/Dpkg/BuildFlags.pm scripts/Dpkg/Compression/FileHandle.pm
+#: scripts/Dpkg/File.pm scripts/Dpkg/Interface/Storable.pm
+#: scripts/Dpkg/Shlibs/Objdump.pm scripts/Dpkg/Source/BinaryFiles.pm
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "cannot read %s"
+msgstr "kan %s niet lezen"
+
+#: scripts/Dpkg/BuildFlags.pm
+#, perl-format
+msgid "line %d of %s mentions unknown flag %s"
+msgstr "regel %d van %s vermeldt onbekende vlag %s"
+
+#: scripts/Dpkg/BuildFlags.pm
+#, perl-format
+msgid "line %d of %s is invalid, it has been ignored"
+msgstr "regel %d van %s is ongeldig; werd genegeerd"
+
+#: scripts/Dpkg/BuildOptions.pm
+#, perl-format
+msgid "invalid flag in %s: %s"
+msgstr "ongeldige vlag in %s: %s"
+
+#: scripts/Dpkg/BuildOptions.pm
+#, perl-format
+msgid "unknown %s feature in %s variable: %s"
+msgstr "onbekende functie %s in variabele %s: %s"
+
+#: scripts/Dpkg/BuildOptions.pm
+#, perl-format
+msgid "incorrect value in %s option of %s variable: %s"
+msgstr "incorrecte waarde in optie %s van variabele %s: %s"
+
+#: scripts/Dpkg/BuildTypes.pm
+#, perl-format
+msgid "cannot combine %s and %s"
+msgstr "kan %s en %s niet combineren"
+
+#: scripts/Dpkg/BuildTypes.pm
+#, perl-format
+msgid "unknown build type %s"
+msgstr "onbekend bouwtype %s"
+
+#: scripts/Dpkg/Changelog.pm
+#, perl-format
+msgid ""
+"%s(l%s): %s\n"
+"LINE: %s"
+msgstr ""
+"%s(l%s): %s\n"
+"REGEL: %s"
+
+#: scripts/Dpkg/Changelog.pm
+#, perl-format
+msgid "%s(l%s): %s"
+msgstr "%s(l%s): %s"
+
+#: scripts/Dpkg/Changelog.pm
+msgid "'offset' without 'count' has no effect"
+msgstr "'offset' zonder 'count' heeft geen effect"
+
+#: scripts/Dpkg/Changelog.pm
+msgid "you can't combine 'count' or 'offset' with any other range option"
+msgstr "u kunt 'count' of 'offset' niet combineren met een andere bereikoptie"
+
+#: scripts/Dpkg/Changelog.pm
+msgid "you can only specify one of 'from' and 'since', using 'since'"
+msgstr ""
+"u kunt slechts ofwel 'from' ofwel 'since' opgeven, 'since' wordt gebruikt"
+
+#: scripts/Dpkg/Changelog.pm
+msgid "you can only specify one of 'to' and 'until', using 'until'"
+msgstr ""
+"u kunt slechts ofwel 'to' ofwel 'until' opgeven, 'until' wordt gebruikt"
+
+#: scripts/Dpkg/Changelog.pm
+#, perl-format
+msgid "'%s' option specifies non-existing version '%s'"
+msgstr "optie '%s' geeft niet-bestaande versie '%s' op"
+
+#: scripts/Dpkg/Changelog.pm
+msgid "use newest entry that is earlier than the one specified"
+msgstr "het nieuwste item gebruiken dat eerder is dan het opgegeven item"
+
+#: scripts/Dpkg/Changelog.pm
+msgid "none found, starting from the oldest entry"
+msgstr "geen gevonden, er wordt begonnen vanaf het oudste item"
+
+#: scripts/Dpkg/Changelog.pm
+msgid "use oldest entry that is later than the one specified"
+msgstr "het oudste item gebruiken dat later is dan het opgegeven item"
+
+#: scripts/Dpkg/Changelog.pm
+#, perl-format
+msgid "no such entry found, ignoring '%s' parameter '%s'"
+msgstr "geen dergelijk item gevonden, negeren van '%s' parameter '%s'"
+
+#: scripts/Dpkg/Changelog.pm
+#, perl-format
+msgid "'since' option specifies most recent version '%s', ignoring"
+msgstr "optie 'since' vermeldt de meest recente versie '%s'; wordt genegeerd"
+
+#: scripts/Dpkg/Changelog.pm
+#, perl-format
+msgid "'until' option specifies oldest version '%s', ignoring"
+msgstr "optie 'until' vermeldt de oudste versie '%s'; wordt genegeerd"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+msgid "first heading"
+msgstr "eerste hoofding"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+msgid "next heading or end of file"
+msgstr "volgende hoofding of einde van bestand"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+msgid "start of change data"
+msgstr "begin van wijzigingsgegevens"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+msgid "more change data or trailer"
+msgstr "meer wijzigingsgegevens of afsluiter"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+#, perl-format
+msgid "found start of entry where expected %s"
+msgstr "begin van item gevonden waar %s verwacht werd"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+msgid "badly formatted heading line"
+msgstr "slecht opgemaakte hoofding-regel"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+#, perl-format
+msgid "found trailer where expected %s"
+msgstr "afsluiter gevonden waar %s verwacht werd"
+
+#: scripts/Dpkg/Changelog/Debian.pm scripts/Dpkg/Changelog/Entry/Debian.pm
+msgid "badly formatted trailer line"
+msgstr "slecht opgemaakte afsluiter-regel"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+#, perl-format
+msgid "found change data where expected %s"
+msgstr "wijzigingsgegevens gevonden waar %s verwacht werd"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+#, perl-format
+msgid "found blank line where expected %s"
+msgstr "lege regel gevonden waar %s verwacht werd"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+msgid "unrecognized line"
+msgstr "niet-herkende regel"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+#, perl-format
+msgid "found end of file where expected %s"
+msgstr "bestandseinde gevonden waar %s verwacht werd"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "version '%s' is invalid: %s"
+msgstr "versie '%s' is ongeldig: %s"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "bad key-value after ';': '%s'"
+msgstr "slechte sleutel-waarde na ';': '%s'"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "repeated key-value %s"
+msgstr "herhaalde sleutel-waarde %s"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "badly formatted urgency value: %s"
+msgstr "slecht opgemaakte urgentiewaarde: %s"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "bad binary-only value: %s"
+msgstr "slechte enkel-binaire waarde: %s"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "unknown key-value %s"
+msgstr "onbekende sleutel-waarde %s"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+msgid "the header doesn't match the expected regex"
+msgstr "de hoofding komt niet overeen met de verwachte regex"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "ignoring invalid week day '%s'"
+msgstr "ongeldige weekdag '%s' wordt genegeerd"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "uses full '%s' instead of abbreviated month name '%s'"
+msgstr "gebruikt volledige '%s' in plaats van afgekorte maandnaam '%s'"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "invalid abbreviated month name '%s'"
+msgstr "ongeldige afgekorte maandnaam '%s'"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "cannot parse non-conformant date '%s'"
+msgstr "kan niet-conforme datum '%s' niet ontleden"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+msgid "the trailer doesn't match the expected regex"
+msgstr "de afsluiter komt niet overeen met de verwachte regex"
+
+#: scripts/Dpkg/Changelog/Parse.pm
+#, perl-format
+msgid "cannot seek into file %s"
+msgstr "kan niet zoeken in bestand %s"
+
+#: scripts/Dpkg/Changelog/Parse.pm
+#, perl-format
+msgid "changelog format %s is unknown: %s"
+msgstr "changelog-indeling %s is onbekend: %s"
+
+#: scripts/Dpkg/Changelog/Parse.pm
+#, perl-format
+msgid "changelog format %s is not a Dpkg::Changelog class"
+msgstr "changelog-indeling %s is geen Dpkg::Changelog-klasse"
+
+#: scripts/Dpkg/Changelog/Parse.pm
+#, perl-format
+msgid "fatal error occurred while parsing %s"
+msgstr "er trad een fatale fout op bij het ontleden van %s"
+
+#: scripts/Dpkg/Changelog/Parse.pm
+#, perl-format
+msgid "unknown output format %s"
+msgstr "onbekende uitvoer-indeling %s"
+
+#: scripts/Dpkg/Checksums.pm
+#, perl-format
+msgid "cannot fstat file %s"
+msgstr "kan status van bestand %s niet vaststellen met fstat"
+
+#: scripts/Dpkg/Checksums.pm
+#, perl-format
+msgid "file %s has size %u instead of expected %u"
+msgstr "bestand %s heeft grootte %u in plaats van het verwachte %u"
+
+#: scripts/Dpkg/Checksums.pm
+#, perl-format
+msgid "file %s has checksum %s instead of expected %s (algorithm %s)"
+msgstr ""
+"bestand %s heeft controlegetal %s in plaats van het verwachte %s (algoritme "
+"%s)"
+
+#: scripts/Dpkg/Checksums.pm
+#, perl-format
+msgid "invalid line in %s checksums string: %s"
+msgstr "ongeldige regel in controlegetallentekenreeks %s: %s"
+
+#: scripts/Dpkg/Checksums.pm
+#, perl-format
+msgid "conflicting checksums '%s' and '%s' for file '%s'"
+msgstr "conflicterende controlegetallen '%s' en '%s' voor bestand '%s'"
+
+#: scripts/Dpkg/Checksums.pm
+#, perl-format
+msgid "conflicting file sizes '%u' and '%u' for file '%s'"
+msgstr "conflicterende bestandsgroottes '%u' en '%u' voor bestand '%s'"
+
+#: scripts/Dpkg/Compression.pm
+#, perl-format
+msgid "compression threads %s is not a number"
+msgstr "compressiethreads %s is geen getal"
+
+#: scripts/Dpkg/Compression/Process.pm
+#, perl-format
+msgid "%s is not a supported compression method"
+msgstr "%s is geen ondersteunde compressiemethode"
+
+#: scripts/Dpkg/Compression/Process.pm
+msgid "Dpkg::Compression::Process can only start one subprocess at a time"
+msgstr "Dpkg::Compression::Process kan slechts één subproces tegelijk starten"
+
+#: scripts/Dpkg/Conf.pm
+#, perl-format
+msgid "short option not allowed in %s, line %d"
+msgstr "korte optie niet toegestaan in %s, regel %d"
+
+#: scripts/Dpkg/Conf.pm
+#, perl-format
+msgid "invalid syntax for option in %s, line %d"
+msgstr "ongeldige syntaxis voor optie in %s, regel %d"
+
+#: scripts/Dpkg/Control.pm
+msgid "general section of control info file"
+msgstr "algemene sectie van control-infobestand"
+
+#: scripts/Dpkg/Control.pm
+msgid "package's section of control info file"
+msgstr "pakketsectie van control-infobestand"
+
+#: scripts/Dpkg/Control.pm
+msgid "parsed version of changelog"
+msgstr "ontlede versie van changelog"
+
+#: scripts/Dpkg/Control.pm
+msgid "header stanza of copyright file"
+msgstr "hoofdingsgedeelte van copyrightbestand"
+
+#: scripts/Dpkg/Control.pm
+msgid "files stanza of copyright file"
+msgstr "bestandengedeelte van copyrightbestand"
+
+#: scripts/Dpkg/Control.pm
+msgid "license stanza of copyright file"
+msgstr "licentiegedeelte van copyrightbestand"
+
+#: scripts/Dpkg/Control.pm
+msgid "package's tests control file"
+msgstr "tests-control-bestand van het pakket"
+
+#: scripts/Dpkg/Control.pm
+#, perl-format
+msgid "repository's %s file"
+msgstr "bestand %s van de pakketbron"
+
+#: scripts/Dpkg/Control.pm
+#, perl-format
+msgid "stanza in repository's %s file"
+msgstr "gedeelte in bestand %s van de pakketbron"
+
+#: scripts/Dpkg/Control.pm
+#, perl-format
+msgid "%s file"
+msgstr "bestand %s"
+
+#: scripts/Dpkg/Control.pm
+msgid "control info of a .deb package"
+msgstr "control-info van een .deb-pakket"
+
+#: scripts/Dpkg/Control.pm
+msgid "build information file"
+msgstr "bouwinformatiebestand"
+
+#: scripts/Dpkg/Control.pm
+msgid "vendor file"
+msgstr "verdelersbestand"
+
+#: scripts/Dpkg/Control.pm
+msgid "stanza in dpkg's status file"
+msgstr "gedeelte in statusbestand van dpkg"
+
+#: scripts/Dpkg/Control/FieldsCore.pm
+#, perl-format
+msgid "unknown information field '%s' in input data in %s"
+msgstr "onbekend informatieveld '%s' in invoerdata in %s"
+
+#: scripts/Dpkg/Control/FieldsCore.pm
+msgid "control information"
+msgstr "control-informatie"
+
+#: scripts/Dpkg/Control/HashCore.pm
+#, perl-format
+msgid "syntax error in %s at line %d: %s"
+msgstr "syntaxisfout in %s op regel %d: %s"
+
+#: scripts/Dpkg/Control/HashCore.pm
+msgid "field cannot start with a hyphen"
+msgstr "veld mag niet beginnen met een koppelteken"
+
+#: scripts/Dpkg/Control/HashCore.pm
+#, perl-format
+msgid "duplicate field %s found"
+msgstr "dubbel veld %s gevonden"
+
+#: scripts/Dpkg/Control/HashCore.pm
+msgid "continued value line not in field"
+msgstr "voortgezette waarderegel niet in veld"
+
+#: scripts/Dpkg/Control/HashCore.pm
+msgid "expected OpenPGP signature, found end of file after blank line"
+msgstr "verwachtte OpenPGP-handtekening; bestandseinde gevonden na lege regel"
+
+#: scripts/Dpkg/Control/HashCore.pm
+#, perl-format
+msgid "expected OpenPGP signature, found something else '%s'"
+msgstr "verwachtte OpenPGP-handtekening; iets anders gevonden '%s'"
+
+#: scripts/Dpkg/Control/HashCore.pm
+msgid "unfinished OpenPGP signature"
+msgstr "onvoltooide OpenPGP-handtekening"
+
+#: scripts/Dpkg/Control/HashCore.pm
+msgid "OpenPGP signature not allowed here"
+msgstr "OpenPGP-handtekening hier niet toegestaan"
+
+#: scripts/Dpkg/Control/HashCore.pm
+msgid "line with unknown format (not field-colon-value)"
+msgstr "regel met onbekende indeling (niet veld-dubbelpunt-waarde)"
+
+#: scripts/Dpkg/Control/HashCore.pm
+msgid "write error on control data"
+msgstr "schrijffout op control-gegevens"
+
+#: scripts/Dpkg/Control/Info.pm
+#, perl-format
+msgid "first stanza lacks a '%s' field"
+msgstr "het eerste onderdeel mist een veld '%s'"
+
+#: scripts/Dpkg/Control/Info.pm
+#, perl-format
+msgid "stanza lacks the '%s' field"
+msgstr "onderdeel mist het veld '%s'"
+
+#: scripts/Dpkg/Control/Tests/Entry.pm
+#, perl-format
+msgid "stanza lacks either %s or %s fields"
+msgstr "onderdeel mist ofwel het veld %s of %s"
+
+#: scripts/Dpkg/Deps.pm
+#, perl-format
+msgid "can't parse dependency %s"
+msgstr "kan vereiste %s niet ontleden"
+
+#: scripts/Dpkg/Deps.pm
+#, perl-format
+msgid "virtual dependency contains invalid relation: %s"
+msgstr "virtuele vereiste bevat ongeldige relatie: %s"
+
+#: scripts/Dpkg/Deps.pm
+msgid "an union dependency can only contain simple dependencies"
+msgstr "een unie-vereiste kan alleen eenvoudige vereisten bevatten"
+
+#: scripts/Dpkg/Dist/Files.pm
+#, perl-format
+msgid "badly formed file name in files list file, line %d"
+msgstr "slecht gevormde bestandsnaam in bestandenlijstbestand, regel %d"
+
+#: scripts/Dpkg/Dist/Files.pm
+#, perl-format
+msgid "badly formed line in files list file, line %d"
+msgstr "slecht gevormde regel in bestandenlijstbestand, regel %d"
+
+#: scripts/Dpkg/Dist/Files.pm
+#, perl-format
+msgid "duplicate files list entry for file %s (line %d)"
+msgstr "dubbele vermelding van bestand %s in bestandenlijst (regel %d)"
+
+#: scripts/Dpkg/Dist/Files.pm
+#, perl-format
+msgid "cannot open directory %s"
+msgstr "kan map %s niet openen"
+
+#: scripts/Dpkg/Dist/Files.pm
+#, perl-format
+msgid "invalid filename %s"
+msgstr "ongeldige bestandsnaam %s"
+
+#: scripts/Dpkg/ErrorHandling.pm
+msgid "info"
+msgstr "info"
+
+#: scripts/Dpkg/ErrorHandling.pm
+msgid "notice"
+msgstr "mededeling"
+
+#: scripts/Dpkg/ErrorHandling.pm
+msgid "warning"
+msgstr "waarschuwing"
+
+#: scripts/Dpkg/ErrorHandling.pm
+msgid "error"
+msgstr "fout"
+
+#: scripts/Dpkg/ErrorHandling.pm
+#, perl-format
+msgid "%s subprocess returned exit status %d"
+msgstr "%s-subproces gaf afsluitstatus %d"
+
+#: scripts/Dpkg/ErrorHandling.pm
+#, perl-format
+msgid "%s subprocess was killed by signal %d"
+msgstr "%s-subproces werd gedood door signaal %d"
+
+#: scripts/Dpkg/ErrorHandling.pm
+#, perl-format
+msgid "%s subprocess failed with unknown status code %d"
+msgstr "%s-subproces is mislukt met onbekende statuscode %d"
+
+#: scripts/Dpkg/ErrorHandling.pm
+msgid "Use --help for program usage information."
+msgstr "Gebruik --help voor informatie over het gebruik van het programma."
+
+#: scripts/Dpkg/File.pm
+#, perl-format
+msgid "cannot create file %s"
+msgstr "kan bestand %s niet aanmaken"
+
+#: scripts/Dpkg/IPC.pm
+#, perl-format
+msgid "pipe for %s"
+msgstr "pijp voor %s"
+
+#: scripts/Dpkg/IPC.pm
+#, perl-format
+msgid "chdir to %s"
+msgstr "chdir naar %s"
+
+#: scripts/Dpkg/IPC.pm
+msgid "reopen stdin"
+msgstr "stdin opnieuw openen"
+
+#: scripts/Dpkg/IPC.pm
+msgid "reopen stdout"
+msgstr "stdout opnieuw openen"
+
+#: scripts/Dpkg/IPC.pm
+msgid "child process"
+msgstr "dochterproces"
+
+#: scripts/Dpkg/IPC.pm
+#, perl-format
+msgid "wait for %s"
+msgstr "wachten op %s"
+
+#: scripts/Dpkg/IPC.pm
+#, perl-format
+msgid "%s didn't complete in %d second"
+msgid_plural "%s didn't complete in %d seconds"
+msgstr[0] "%s is niet voltooid in %d seconde"
+msgstr[1] "%s is niet voltooid in %d seconden"
+
+#: scripts/Dpkg/Interface/Storable.pm
+msgid "<standard input>"
+msgstr "<standaardinvoer>"
+
+#: scripts/Dpkg/Lock.pm
+msgid "File::FcntlLock not available; using flock which is not NFS-safe"
+msgstr ""
+"File::FcntlLock is niet beschikbaar; flock wordt gebruikt, wat niet NFS-"
+"veilig is"
+
+#: scripts/Dpkg/Lock.pm
+#, perl-format
+msgid "failed to get a write lock on %s"
+msgstr "kreeg geen schrijfvergrendeling op %s"
+
+#: scripts/Dpkg/OpenPGP.pm
+#, perl-format
+msgid "unknown OpenPGP api requested %s"
+msgstr "onbekende OpenPGP-api heeft %s aangevraagd"
+
+#: scripts/Dpkg/OpenPGP.pm
+#, perl-format
+msgid "cannot load OpenPGP backend %s"
+msgstr "kan OpenPGP-backend %s niet laden"
+
+#: scripts/Dpkg/OpenPGP.pm
+#, perl-format
+msgid "unknown OpenPGP backend %s"
+msgstr "onbekende OpenPGP-backend %s"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "success"
+msgstr "succes"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "no acceptable signature found"
+msgstr "geen aanvaardbare handtekening gevonden"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "missing required argument"
+msgstr "vereist argument ontbreekt"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "unsupported option"
+msgstr "niet-ondersteunde optie"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "invalid data type"
+msgstr "ongeldig datatype"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "non-text input where text expected"
+msgstr "niet-tekstuele invoer waar tekst wordt verwacht"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "output file already exists"
+msgstr "uitvoerbestand bestaat al"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "input file does not exist"
+msgstr "invoerbestand bestaat niet"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "cannot unlock password-protected key"
+msgstr "kan met een wachtwoord beveiligde sleutel niet ontgrendelen"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "unsupported subcommand"
+msgstr "niet-ondersteund subcommando"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "key is not signature-capable"
+msgstr "sleutel is niet geschikt voor handtekeningen"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "missing OpenPGP implementation"
+msgstr "ontbrekende OpenPGP-implementatie"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "specified key needs a keystore"
+msgstr "opgegeven sleutel heeft een sleutelbewaarplaats nodig"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+#, perl-format
+msgid "error code %d"
+msgstr "foutcode %d"
+
+#: scripts/Dpkg/Package.pm
+msgid "may not be empty string"
+msgstr "mag geen lege tekenreeks zijn"
+
+#: scripts/Dpkg/Package.pm
+#, perl-format
+msgid "character '%s' not allowed"
+msgstr "teken '%s' niet toegestaan"
+
+#: scripts/Dpkg/Package.pm
+msgid "must start with an alphanumeric character"
+msgstr "moet beginnen met een alfanumeriek teken"
+
+#: scripts/Dpkg/Path.pm scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "pathname '%s' cannot be canonicalized"
+msgstr "padnaam '%s' kan niet conform gemaakt worden"
+
+#: scripts/Dpkg/Path.pm scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "pathname '%s' points outside source root (to '%s')"
+msgstr "padnaam '%s' wijst buiten broncodehoofdmap (naar '%s')"
+
+#: scripts/Dpkg/Shlibs.pm
+msgid ""
+"deprecated use of LD_LIBRARY_PATH with private library directory which "
+"interferes with cross-building, please use -l option instead"
+msgstr ""
+"verouderd gebruik van LD_LIBRARY_PATH met private bibliotheekmap die "
+"interfereert met kruiscompilatie, gebruik in plaats daarvan optie -l"
+
+#: scripts/Dpkg/Shlibs.pm scripts/Dpkg/Shlibs/Objdump.pm
+#, perl-format
+msgid "unknown executable format in file '%s'"
+msgstr "onbekende indeling uitvoerbaar bestand in bestand '%s'"
+
+#: scripts/Dpkg/Shlibs/Objdump.pm
+#, perl-format
+msgid "couldn't parse dynamic relocation record: %s"
+msgstr "kon dynamisch toewijzingsregister niet ontleden: %s"
+
+#: scripts/Dpkg/Shlibs/Objdump.pm
+#, perl-format
+msgid "couldn't parse dynamic symbol definition: %s"
+msgstr "kon dynamische symbooldefinitie niet ontleden: %s"
+
+#: scripts/Dpkg/Shlibs/Symbol.pm
+#, perl-format
+msgid "symbol name unspecified: %s"
+msgstr "niet-gespecificeerde symboolnaam: %s"
+
+#: scripts/Dpkg/Shlibs/Symbol.pm
+#, perl-format
+msgid "symver tag with versioned symbol will not match: %s"
+msgstr "symver-tag met een symbool met versiebeheer zal niet overeenkomen: %s"
+
+#: scripts/Dpkg/Shlibs/Symbol.pm
+#, perl-format
+msgid "you can't use symver tag to catch unversioned symbols: %s"
+msgstr ""
+"u kunt symver-tag niet gebruiken om symbolen zonder versiebeheer te vatten: "
+"%s"
+
+#: scripts/Dpkg/Shlibs/SymbolFile.pm
+#, perl-format
+msgid "symbol information must be preceded by a header (file %s, line %s)"
+msgstr ""
+"symboolinformatie moet worden voorafgegaan door een hoofding (bestand %s, "
+"regel %s)"
+
+#: scripts/Dpkg/Shlibs/SymbolFile.pm
+#, perl-format
+msgid "failed to parse line in %s: %s"
+msgstr "kan regel in %s niet ontleden: %s"
+
+#: scripts/Dpkg/Shlibs/SymbolFile.pm
+#, perl-format
+msgid "failed to parse a line in %s: %s"
+msgstr "kon een regel in %s niet ontleden: %s"
+
+#: scripts/Dpkg/Shlibs/SymbolFile.pm
+#, perl-format
+msgid "tried to merge the same object (%s) twice in a symfile"
+msgstr ""
+"probeerde twee keer hetzelfde object (%s) samen te voegen in een sym-bestand"
+
+#: scripts/Dpkg/Shlibs/SymbolFile.pm
+msgid "cannot merge symbols from objects without SONAME"
+msgstr "kan geen symbolen samenvoegen van objecten zonder SONAME"
+
+#: scripts/Dpkg/Source/Archive.pm
+msgid "write on tar input"
+msgstr "schrijven bij tar-invoer"
+
+#: scripts/Dpkg/Source/Archive.pm
+msgid "close on tar input"
+msgstr "sluiten bij tar-invoer"
+
+#: scripts/Dpkg/Source/Archive.pm scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot create directory %s"
+msgstr "kan map %s niet maken"
+
+#: scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "cannot get source pathname %s metadata"
+msgstr "kan metagegevens van bronpadnaam %s niet verkrijgen"
+
+#: scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "cannot get target pathname %s metadata"
+msgstr "kan metagegevens van doelpadnaam %s niet verkrijgen"
+
+#: scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "cannot change directory %s mode"
+msgstr "kan modus van map %s niet wijzigen"
+
+#: scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "cannot change directory %s times"
+msgstr "kan tijden van map %s niet wijzigen"
+
+#: scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "cannot remove destination directory %s"
+msgstr "kan doelmap %s niet verwijderen"
+
+#: scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "cannot remove destination file %s"
+msgstr "kan doelbestand %s niet verwijderen"
+
+#: scripts/Dpkg/Source/Archive.pm scripts/Dpkg/Source/Package.pm
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "cannot opendir %s"
+msgstr "kan map %s niet openen"
+
+#: scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "unable to rename %s to %s"
+msgstr "kan %s niet naar %s hernoemen"
+
+#: scripts/Dpkg/Source/Functions.pm
+#, perl-format
+msgid "cannot stat directory %s (before removal)"
+msgstr "kan status van map %s niet opvragen (voor verwijdering)"
+
+#: scripts/Dpkg/Source/Functions.pm
+#, perl-format
+msgid "unable to check for removal of directory '%s'"
+msgstr "kan verwijdering van map '%s' niet controleren"
+
+#: scripts/Dpkg/Source/Functions.pm
+#, perl-format
+msgid "rm -rf failed to remove '%s'"
+msgstr "rm -rf kon '%s' niet verwijderen"
+
+#: scripts/Dpkg/Source/Functions.pm scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot change timestamp for %s"
+msgstr "kan tijdstempel van %s niet wijzigen"
+
+#: scripts/Dpkg/Source/Functions.pm
+#, perl-format
+msgid "cannot read timestamp from %s"
+msgstr "kan tijdstempel van %s niet lezen"
+
+#: scripts/Dpkg/Source/Functions.pm
+#, perl-format
+msgid "cannot open file %s for binary detection"
+msgstr "kan bestand %s niet openen voor binaire detectie"
+
+#: scripts/Dpkg/Source/BinaryFiles.pm
+#, perl-format
+msgid "adding %s to %s"
+msgstr "%s toevoegen aan %s"
+
+#: scripts/Dpkg/Source/BinaryFiles.pm
+#, perl-format
+msgid "unwanted binary file: %s"
+msgstr "ongewenst binair bestand: %s"
+
+#: scripts/Dpkg/Source/BinaryFiles.pm
+#, perl-format
+msgid ""
+"detected %d unwanted binary file (add it in debian/source/include-binaries "
+"to allow its inclusion)."
+msgid_plural ""
+"detected %d unwanted binary files (add them in debian/source/include-"
+"binaries to allow their inclusion)."
+msgstr[0] ""
+"%d ongewenst binair bestand gedetecteerd (voeg het toe in debian/source/"
+"include-binaries om opname ervan mogelijk te maken)."
+msgstr[1] ""
+"%d ongewenste binaire bestanden gedetecteerd (voeg ze toe in debian/source/"
+"include-binaries om opname ervan mogelijk te maken)."
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "%s is not the name of a file"
+msgstr "%s is geen bestandsnaam"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "missing critical source control field %s"
+msgstr "ontbrekend kritiek broncode-control-veld %s"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "source package format '%s' is not supported: %s"
+msgstr "broncodepakketindeling '%s' wordt niet ondersteund: %s"
+
+#: scripts/Dpkg/Source/Package.pm
+msgid "source package uses only weak checksums"
+msgstr "broncodepakket gebruikt enkel zwakke controlegetallen"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "%s and %s fields are required to compute the source basename"
+msgstr ""
+"velden %s en %s zijn vereist om de basisnaam van de broncode te berekenen"
+
+#: scripts/Dpkg/Source/Package.pm
+msgid "upstream tarball signatures but no upstream signing key"
+msgstr ""
+"handtekeningen op bovenstrooms tar-archief maar geen bovenstroomse "
+"ondertekeningssleutel"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "verifying %s"
+msgstr "verifiëren van %s"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "cannot verify upstream tarball signature for %s: %s"
+msgstr ""
+"kan handtekening op bovenstrooms tar-archief voor %s niet verifiëren: %s"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "cannot verify inline signature for %s: %s"
+msgstr "kan inline handtekening voor %s niet verifiëren: %s"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "%s is not a valid option for %s"
+msgstr "%s is geen geldige optie voor %s"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "cannot copy %s to %s"
+msgstr "kan %s niet kopiëren naar %s"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "%s does not exist"
+msgstr "%s bestaat niet"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "cannot make %s executable"
+msgstr "kan %s niet uitvoerbaar maken"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "%s is not a plain file"
+msgstr "%s is geen gewoon bestand"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "'%s' is not supported by the source format '%s'"
+msgstr "'%s' wordt niet ondersteund door broncode-indeling '%s'"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "auto select original source"
+msgstr "automatisch originele broncode selecteren"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "use packed original source (unpack and keep)"
+msgstr "verpakte originele broncode gebruiken (uitpakken en behouden)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "use packed original source (unpack and remove)"
+msgstr "verpakte originele broncode gebruiken (uitpakken en verwijderen)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "use unpacked original source (pack and keep)"
+msgstr "uitgepakte originele broncode gebruiken (verpakken en behouden)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "use unpacked original source (pack and remove)"
+msgstr "uitgepakte originele broncode gebruiken (verpakken en verwijderen)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "trust packed and unpacked original sources are same"
+msgstr ""
+"erop vertrouwen dat verpakte en uitgepakte originele broncodes hetzelfde zijn"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "there is no diff, do main tarfile only"
+msgstr "er is geen diff; alleen hoofdtar-archief doen"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "like -sa, -sk, -sp, -su, -sr but may overwrite"
+msgstr "zoals -sa, -sk, -sp, -su, -sr maar kan overschrijven"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+msgid "abort if generated diff has upstream files changes"
+msgstr ""
+"afbreken als gegenereerde diff wijzigingen in bovenstroomse bestanden bevat"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "leave original source packed in current directory"
+msgstr "de originele broncode verpakt in de huidige map laten"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "do not copy original source to current directory"
+msgstr "de originele broncode niet naar de huidige map kopiëren"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "unpack original source tree too"
+msgstr "ook de originele broncodeboom uitpakken"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "do not apply debian diff to upstream sources"
+msgstr "debian diff niet toepassen op bovenstroomse bronnen"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "-s%s option overrides earlier -s%s option"
+msgstr "optie -s%s overschrijft eerdere optie -s%s"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "source handling style -s%s not allowed with -x"
+msgstr "broncodeverwerkingsstijl -s%s niet toegestaan met -x"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "multiple tarfiles in v1.0 source package"
+msgstr "meerdere tar-bestanden in v1.0-broncodepakket"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "unrecognized file for a %s source package: %s"
+msgstr "niet-herkend bestand voor een %s-broncodepakket: %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V3/Native.pm
+msgid "no tarfile in Files field"
+msgstr "geen tar-bestand in het veld Files"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "native package with .orig.tar"
+msgstr "native pakket met .orig.tar"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "unable to rename '%s' to '%s'"
+msgstr "kan '%s' niet hernoemen naar '%s'"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+#, perl-format
+msgid "unpacking %s"
+msgstr "uitpakken van %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "unable to keep orig directory (already exists)"
+msgstr "kan orig-map niet behouden (bestaat al)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "failed to rename newly-extracted %s to %s"
+msgstr "mislukt om nieuw-geëxtraheerde %s te hernoemen naar %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "failed to rename saved %s to %s"
+msgstr "mislukt om opgeslagen %s te hernoemen naar %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "applying %s"
+msgstr "toepassen van %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "upstream files that have been modified: %s"
+msgstr "bovenstroomse bestanden die zijn gewijzigd: %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "only supports gzip compression"
+msgstr "ondersteunt alleen gzip-compressie"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid ""
+"-b takes at most a directory and an orig source argument (with v1.0 source "
+"package)"
+msgstr ""
+"-b aanvaardt hoogstens een argument voor map en orig-broncode (met een v1.0-"
+"broncodepakket)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "source handling style -s%s not allowed with -b"
+msgstr "broncodeverwerkingsstijl -s%s niet toegestaan met -b"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "packed orig '%s' exists but is not a plain file"
+msgstr "verpakte orig '%s' bestaat maar is geen gewoon bestand"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "cannot stat orig argument %s"
+msgstr "kan status niet opvragen van orig-argument %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid ""
+"orig argument is unpacked but source handling style -s%s calls for packed (."
+"orig.tar.<ext>)"
+msgstr ""
+"orig-argument is uitgepakt, maar broncodeverwerkingsstijl -s%s vraagt om "
+"verpakt (.orig.tar.<ext>)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid ""
+"orig argument is packed but source handling style -s%s calls for unpacked (."
+"orig/)"
+msgstr ""
+"orig-argument is verpakt, maar broncodeverwerkingsstijl -s%s vraagt om "
+"uitgepakt (.orig/)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "orig argument %s is not a plain file or directory"
+msgstr "orig-argument %s is geen gewoon bestand of map"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid ""
+"orig argument is empty (means no orig, no diff) but source handling style -"
+"s%s wants something"
+msgstr ""
+"orig-argument is leeg (betekent geen orig, geen diff), maar "
+"broncodeverwerkingsstijl -s%s vraagt om iets"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "unpacked orig '%s' exists but is not a directory"
+msgstr "uitgepakt orig '%s' bestaat maar is geen map"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "unable to stat putative unpacked orig '%s'"
+msgstr "kan status van vermoedelijk uitgepakte orig '%s' niet bepalen"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V3/Quilt.pm
+msgid "non-native package version does not contain a revision"
+msgstr "versie van niet-native pakket bevat geen revisie"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V3/Native.pm
+msgid "native package version may not have a revision"
+msgstr "versie van een native pakket mag geen revisie hebben"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "source directory '%s' is not <sourcepackage>-<upstreamversion> '%s'"
+msgstr "broncodemap '%s' is niet <broncodepakket>-<bovenstroomseversie> '%s'"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid ".orig directory name %s is not <package>-<upstreamversion> (wanted %s)"
+msgstr ""
+"naam van .orig-map %s is niet <pakket>-<bovenstroomseversie> (%s gewild)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid ""
+".orig.tar name %s is not <package>_<upstreamversion>.orig.tar (wanted %s)"
+msgstr ""
+"naam van .orig.tar %s is niet <pakket>_<bovenstroomseversie>.orig.tar (%s "
+"gewild)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid ""
+"tarfile '%s' already exists, not overwriting, giving up; use -sU or -sR to "
+"override"
+msgstr ""
+"tar-bestand '%s' bestaat al, wordt niet overschreven, er wordt gestopt; "
+"gebruik -sU of -sR om te overschrijven"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "unable to check for existence of '%s'"
+msgstr "kan het bestaan van '%s' niet controleren"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V3/Native.pm
+#, perl-format
+msgid "unable to rename '%s' (newly created) to '%s'"
+msgstr "kan '%s' (nieuw aangemaakt) niet hernoemen naar '%s'"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+#: scripts/Dpkg/Source/Package/V3/Quilt.pm scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "unable to change permission of '%s'"
+msgstr "kan toegangsrechten van '%s' niet wijzigen"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "building %s using existing %s"
+msgstr "%s bouwen met bestaande %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+msgid "upstream signing key but no upstream tarball signature"
+msgstr ""
+"bovenstroomse ondertekeningssleutel maar geen handtekening op bovenstrooms "
+"tar-archief"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid ""
+"orig directory '%s' already exists, not overwriting, giving up; use -sA, -sK "
+"or -sP to override"
+msgstr ""
+"orig-map '%s' bestaat al, wordt niet overschreven, er wordt gestopt; gebruik "
+"-sA, -sK of -sP om te overschrijven"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "unable to check for existence of orig directory '%s'"
+msgstr "kan niet controleren of orig-map '%s' bestaat"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "the diff modifies the following upstream files: %s"
+msgstr "de diff wijzigt de volgende bovenstroomse bestanden: %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid ""
+"use the '3.0 (quilt)' format to have separate and documented changes to "
+"upstream files, see dpkg-source(1)"
+msgstr ""
+"gebruik de indeling '3.0 (quilt)' om aparte en gedocumenteerde wijzigingen "
+"aan bovenstroomse bestanden te hebben, zie dpkg-source(1)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "aborting due to --abort-on-upstream-changes"
+msgstr "afbreken vanwege --abort-on-upstream-changes"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+msgid "unrepresentable changes to source"
+msgstr "niet-weergeefbare wijzigingen aan broncode"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "include removed files in the patch"
+msgstr "verwijderde bestanden opnemen in de patch"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "include timestamp in the patch"
+msgstr "tijdstempel opnemen in de patch"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "include binary files in the tarball"
+msgstr "binaire bestanden opnemen in het tar-archief"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "do not prepare build tree by applying patches"
+msgstr "bouwboom niet voorbereiden door patches toe te passen"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "do not unapply patches if previously applied"
+msgstr "patches niet ongedaan maken als ze eerder zijn toegepast"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "unapply patches if previously applied (default)"
+msgstr "patches ongedaan maken indien eerder toegepast (standaard)"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "create an empty original tarball if missing"
+msgstr "een leeg origineel tar-archief maken als dat ontbreekt"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "record generated patches, instead of aborting"
+msgstr "gegenereerde patches opnemen, in plaats van af te breken"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "do not extract debian tarball into upstream sources"
+msgstr "debian tar-archief niet extraheren in bovenstroomse bronnen"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "do not apply patches at the end of the extraction"
+msgstr "patches niet toepassen op het einde van de extractie"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "duplicate files in %s source package: %s"
+msgstr "dubbele bestanden in broncodepakket %s: %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "missing orig.tar or debian.tar file in v2.0 source package"
+msgstr "ontbrekend orig.tar- of debian.tar-bestand in v2.0-broncodepakket"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "mismatched orig.tar %s for signature %s in source package"
+msgstr "niet-overeenkomende orig.tar %s voor handtekening %s in broncodepakket"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "missing addon orig.tar for signature %s in source package"
+msgstr ""
+"ontbrekende aanvullende orig.tar voor handtekening %s in broncodepakket"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "mismatched addon orig.tar %s for signature %s in source package"
+msgstr ""
+"niet-overeenkomende aanvullende orig.tar %s voor handtekening %s in "
+"broncodepakket"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "required removal of '%s' installed by original tarball"
+msgstr ""
+"vereiste verwijdering van '%s' geïnstalleerd door origineel tar-archief"
+
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "unapplying %s"
+msgstr "%s ongedaan maken"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "no upstream tarball found at %s"
+msgstr "geen bovenstrooms tar-archief gevonden op %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "patches are not applied, applying them now"
+msgstr "patches niet zijn toegepast; ze nu toepassen"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "several orig.tar files found (%s and %s) but only one is allowed"
+msgstr ""
+"verschillende orig.tar-bestanden gevonden (%s en %s) maar er is slechts één "
+"toegestaan"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "copy of the debian directory"
+msgstr "kopie van de map debian"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "local changes detected, the modified files are:"
+msgstr "lokale wijzigingen gedetecteerd, de gewijzigde bestanden zijn:"
+
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Package/V3/Bzr.pm
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+#, perl-format
+msgid "-b takes only one parameter with format '%s'"
+msgstr "-b neemt slechts één parameter bij indeling '%s'"
+
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot represent change to %s: %s"
+msgstr "kan verandering in %s niet weergeven: %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Patch.pm
+msgid "binary file contents changed"
+msgstr "inhoud binair bestand gewijzigd"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid ""
+"add %s in debian/source/include-binaries if you want to store the modified "
+"binary in the debian tarball"
+msgstr ""
+"voeg %s toe aan debian/source/include-binaries als u het gewijzigde binaire "
+"bestand in het debian tar-archief wilt opslaan"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid ""
+"Hint: make sure the version in debian/changelog matches the unpacked source "
+"tree"
+msgstr ""
+"Tip: zorg ervoor dat de versie in debian/changelog overeenkomt met de "
+"uitgepakte broncodeboom"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "you can integrate the local changes with %s"
+msgstr "u kunt de lokale wijzigingen integreren met %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "aborting due to unexpected upstream changes, see %s"
+msgstr "afgebroken vanwege onverwachte bovenstroomse wijzigingen, zie %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "local changes have been recorded in a new patch: %s"
+msgstr "lokale veranderingen zijn vastgelegd in een nieuwe patch: %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Package/V3/Quilt.pm
+#, perl-format
+msgid "cannot remove %s"
+msgstr "kan %s niet verwijderen"
+
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Package/V3/Quilt.pm
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "failed to copy %s to %s"
+msgstr "kopiëren van %s naar %s is mislukt"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "cannot register changes in %s, this patch already exists"
+msgstr "kan wijzigingen in %s niet registreren, deze patch bestaat al"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "patch file '%s' doesn't exist"
+msgstr "patchbestand '%s' bestaat niet"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "there are no local changes to record"
+msgstr "er zijn geen lokale wijzigingen om vast te leggen"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "Enter the desired patch name: "
+msgstr "Voer de gewenste patchnaam in: "
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "no patch name given; cannot proceed"
+msgstr "geen patchnaam gegeven; kan niet doorgaan"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "cannot find an editor"
+msgstr "kan geen editor vinden"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+msgid "cannot unpack bzr-format source package because bzr is not in the PATH"
+msgstr ""
+"kan broncodepakket in bzr-indeling niet uitpakken omdat bzr niet in het PATH "
+"staat"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+#, perl-format
+msgid ""
+"source directory is not the top directory of a bzr repository (%s/.bzr not "
+"present), but Format bzr was specified"
+msgstr ""
+"broncodemap is niet de hoofdmap van een bzr-archiefbewaarplaats (%s/.bzr "
+"niet aanwezig), maar Format bzr was opgegeven"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+#, perl-format
+msgid "%s is a symlink"
+msgstr "%s is een symbolische koppeling"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+#, perl-format
+msgid "%s is a symlink to outside %s"
+msgstr "%s is een symbolische koppeling naar buiten %s"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+msgid "doesn't contain a bzr repository"
+msgstr "bevat geen bzr-archiefbewaarplaats"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+msgid "bzr status exited nonzero"
+msgstr "bzr sloot af met een niet-nul status"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "uncommitted, not-ignored changes in working directory: %s"
+msgstr "niet-vastgelegde, niet-genegeerde wijzigingen in werkmap: %s"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+msgid "format v3.0 (bzr) uses only one source file"
+msgstr "indeling v3.0 (bzr) gebruikt slechts één broncodebestand"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+#, perl-format
+msgid "expected %s, got %s"
+msgstr "verwachtte %s, kreeg %s"
+
+#: scripts/Dpkg/Source/Package/V3/Custom.pm
+msgid "define the format of the generated source package"
+msgstr "de indeling van het gegenereerde broncodepakket bepalen"
+
+#: scripts/Dpkg/Source/Package/V3/Custom.pm
+msgid "Format '3.0 (custom)' is only used to create source packages"
+msgstr ""
+"Format '3.0 (custom)' wordt alleen gebruikt om broncodepakketten te maken"
+
+#: scripts/Dpkg/Source/Package/V3/Custom.pm
+msgid "no files indicated on command line"
+msgstr "geen bestanden aangegeven op de comandoregel"
+
+#: scripts/Dpkg/Source/Package/V3/Custom.pm
+msgid "--target-format option is missing"
+msgstr "optie voor --target-format ontbreekt"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "cannot unpack git-format source package because git is not in the PATH"
+msgstr ""
+"kan geen broncodepakket in git-indeling uitpakken omdat git niet in het PATH "
+"staat"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid ""
+"source directory is not the top directory of a git repository (%s/.git not "
+"present), but Format git was specified"
+msgstr ""
+"broncodemap is niet de hoofdmap van een git-archiefbewaarplaats (%s/.git "
+"niet aanwezig), maar Format git was opgegeven"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "git repository %s uses submodules; this is not yet supported"
+msgstr ""
+"git-archiefbewaarplaats %s gebruikt submodules; dit wordt nog niet "
+"ondersteund"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "specify a git <ref> to include in the git bundle"
+msgstr "een in de git-bundel op te nemen git <ref> opgeven"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "create a shallow clone with <number> depth"
+msgstr "een ondiepe (shallow) kloon met diepte <getal> aanmaken"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "doesn't contain a git repository"
+msgstr "bevat geen git-archiefbewaarplaats"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "git ls-files exited nonzero"
+msgstr "git ls-files sloot af met niet nul"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "creating shallow clone with depth %s"
+msgstr "aanmaken van ondiepe (shallow) kloon met diepte %s"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "bundling: %s"
+msgstr "bundelen: %s"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "format v3.0 (git) uses only one .git file"
+msgstr "indeling v3.0 (git) gebruikt slechts één .git-bestand"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "format v3.0 (git) uses only one .gitshallow file"
+msgstr "indeling v3.0 (git) gebruikt slechts één .gitshallow-bestand"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "format v3.0 (git) unknown file: %s"
+msgstr "indeling v3.0 (git) onbekend bestand: %s"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "format v3.0 (git) expected %s"
+msgstr "indeling v3.0 (git) verwachtte %s"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "cloning %s"
+msgstr "klonen van %s"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "setting up shallow clone"
+msgstr "opzetten van ondiepe (shallow) kloon"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "setting remote %s to %s"
+msgstr "instellen van externe %s op %s"
+
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+msgid "multiple tarfiles in native source package"
+msgstr "meerdere tar-bestanden in native broncodepakket"
+
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+#, perl-format
+msgid "unrecognized file for a native source package: %s"
+msgstr "niet-herkend bestand voor een native broncodepakket: %s"
+
+#: scripts/Dpkg/Source/Package/V3/Quilt.pm
+msgid "use a single debianization patch"
+msgstr "één enkele debianisatie-patch gebruiken"
+
+#: scripts/Dpkg/Source/Package/V3/Quilt.pm
+msgid "accept quilt metadata <version> even if unknown"
+msgstr "quilt-metagegevens <versie> accepteren, zelfs als deze onbekend zijn"
+
+#: scripts/Dpkg/Source/Package/V3/Quilt.pm
+#, perl-format
+msgid "can't create symlink %s"
+msgstr "kan symbolische koppeling %s niet aanmaken"
+
+#: scripts/Dpkg/Source/Package/V3/Quilt.pm
+#, perl-format
+msgid "using patch list from %s"
+msgstr "patchlijst van %s gebruiken"
+
+#: scripts/Dpkg/Source/Package/V3/Quilt.pm
+#, perl-format
+msgid "unsupported version of the quilt metadata: %s"
+msgstr "niet-ondersteunde versie van de quilt-metagegevens: %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "file %s has no final newline (either original or modified version)"
+msgstr ""
+"bestand %s heeft geen afsluitende nieuwe regel (originele of gewijzigde "
+"versie)"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "unknown line from diff -u on %s: '%s'"
+msgstr "onbekende regel van diff -u op %s: '%s'"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "failed to write"
+msgstr "schrijven is mislukt"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff on %s"
+msgstr "diff op %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot stat file %s"
+msgstr "kan de status van bestand %s niet opvragen"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot read link %s"
+msgstr "kan koppeling %s niet lezen"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "device or socket is not allowed"
+msgstr "apparaat of socket is niet toegestaan"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "unknown file type"
+msgstr "onbekend bestandstype"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "ignoring deletion of file %s"
+msgstr "verwijdering van bestand %s negeren"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "ignoring deletion of file %s, use --include-removal to override"
+msgstr ""
+"verwijdering van bestand %s wordt genegeerd; gebruik --include-removal om op "
+"te heffen"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "ignoring deletion of directory %s"
+msgstr "verwijdering van map %s negeren"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "ignoring deletion of symlink %s"
+msgstr "verwijdering van symbolische koppeling %s negeren"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "newly created empty file '%s' will not be represented in diff"
+msgstr "nieuw aangemaakt leeg bestand '%s' zal niet weergegeven worden in diff"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "executable mode %04o of '%s' will not be represented in diff"
+msgstr "uitvoerbare modus %04o van '%s' zal niet weergegeven worden in diff"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "special mode %04o of '%s' will not be represented in diff"
+msgstr "bijzondere modus %04o van '%s' zal niet weergegeven worden in diff"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot represent change to %s:"
+msgstr "kan wijziging aan %s niet weergeven:"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid " new version is %s"
+msgstr " nieuwe versie is %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid " old version is %s"
+msgstr " oude versie is %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff %s patches file with C-style encoded filename"
+msgstr "diff %s patcht bestand met in C-stijl gecodeerde bestandsnaam"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "expected ^--- in line %d of diff '%s'"
+msgstr "verwachtte ^--- in regel %d van diff '%s'"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff '%s' patches file with name ending in .dpkg-orig"
+msgstr "diff '%s' patcht bestand met naam eindigend op .dpkg-orig"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff '%s' finishes in middle of ---/+++ (line %d)"
+msgstr "diff '%s' eindigt in het midden van ---/+++ (regel %d)"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "line after --- isn't as expected in diff '%s' (line %d)"
+msgstr "regel na --- is niet zoals verwacht in diff '%s' (regel %d)"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "none of the filenames in ---/+++ are valid in diff '%s' (line %d)"
+msgstr ""
+"geen van de bestandsnamen in ---/+++ zijn geldig in diff '%s' (regel %d)"
+
+#: scripts/Dpkg/Source/Patch.pm scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "%s contains an insecure path: %s"
+msgstr "%s bevat een onveilig pad: %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff %s modifies file %s through a symlink: %s"
+msgstr "diff %s wijzigt bestand %s via een symbolische koppeling: %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "original and modified files are /dev/null in diff '%s' (line %d)"
+msgstr ""
+"originele en gewijzigde bestanden zijn /dev/null in diff '%s' (regel %d)"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "file removal without proper filename in diff '%s' (line %d)"
+msgstr ""
+"bestandsverwijdering zonder juiste bestandsnaam in diff '%s' (regel %d)"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff %s removes a non-existing file %s (line %d)"
+msgstr "diff %s verwijdert een niet-bestaand bestand %s (regel %d)"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff '%s' patches something which is not a plain file"
+msgstr "diff '%s' patcht iets dat geen gewoon bestand is"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid ""
+"diff '%s' patches files multiple times; split the diff in multiple files or "
+"merge the hunks into a single one"
+msgstr ""
+"diff '%s' patcht bestanden meerdere keren; splits de diff in meerdere "
+"bestanden of voeg de stukjes samen tot één bestand"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff '%s' patches file %s more than once"
+msgstr "diff '%s' patcht bestand %s meer dan eens"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "unexpected end of diff '%s'"
+msgstr "onverwacht einde van diff '%s'"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "expected [ +-] at start of line %d of diff '%s'"
+msgstr "verwachtte [ +-] aan het begin van regel %d van diff '%s'"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "expected ^@@ at line %d of diff '%s'"
+msgstr "verwachtte ^@@ op regel %d van diff '%s'"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff '%s' doesn't contain any patch"
+msgstr "diff '%s' bevat geen patch"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "remove patch backup file %s"
+msgstr "patch-back-upbestand %s verwijderen"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "nonexistent"
+msgstr "niet-bestaand"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "plain file"
+msgstr "gewoon bestand"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "directory"
+msgstr "map"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "symlink to %s"
+msgstr "symbolische koppeling naar %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "block device"
+msgstr "blokapparaat"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "character device"
+msgstr "tekengeoriënteerd apparaat"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "named pipe"
+msgstr "benoemde pijp"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "named socket"
+msgstr "benoemde socket"
+
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "cannot mkdir %s"
+msgstr "kan mkdir %s niet uitvoeren"
+
+#: scripts/Dpkg/Source/Quilt.pm
+msgid "the patch has fuzz which is not allowed, or is malformed"
+msgstr "de patch heeft ruis die niet is toegestaan, of is misvormd"
+
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "if patch '%s' is correctly applied by quilt, use '%s' to update it"
+msgstr ""
+"als patch '%s' correct is toegepast door quilt, gebruik dan '%s' om hem bij "
+"te werken"
+
+#: scripts/Dpkg/Source/Quilt.pm
+msgid ""
+"if the file is present in the unpacked source, make sure it is also present "
+"in the orig tarball"
+msgstr ""
+"als het bestand aanwezig is in de uitgepakte broncode, zorg er dan voor dat "
+"het ook aanwezig is in het orig tar-archief"
+
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "%s should be a directory or non-existing"
+msgstr "%s moet een map zijn of niet bestaan"
+
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "%s should be a file or non-existing"
+msgstr "%s moet een bestand zijn of niet bestaan"
+
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid ""
+"the series file (%s) contains unsupported options ('%s', line %s); dpkg-"
+"source might fail when applying patches"
+msgstr ""
+"het seriebestand (%s) bevat niet-ondersteunde opties ('%s', regel %s); dpkg-"
+"source zou kunnen falen bij het toepassen van patches"
+
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "restoring quilt backup files for %s"
+msgstr "quilt back-upbestanden voor %s terugplaatsen"
+
+#: scripts/Dpkg/Substvars.pm
+#, perl-format
+msgid "bad line in substvars file %s at line %d"
+msgstr "slechte regel in substvars-bestand %s op regel %d"
+
+#: scripts/Dpkg/Substvars.pm
+#, perl-format
+msgid "invalid source version %s"
+msgstr "ongeldige broncodeversie %s"
+
+#: scripts/Dpkg/Substvars.pm
+#, perl-format
+msgid "too many substitutions - recursive ? - in '%s'"
+msgstr "te veel substituties - recursief? - in '%s'"
+
+#: scripts/Dpkg/Substvars.pm
+#, perl-format
+msgid "obsolete substitution variable ${%s}"
+msgstr "verouderde substitutievariabele ${%s}"
+
+#: scripts/Dpkg/Substvars.pm
+#, perl-format
+msgid "substitution variable ${%s} used, but is not defined"
+msgstr "substitutievariabele ${%s} gebruikt, maar niet gedefinieerd"
+
+#: scripts/Dpkg/Substvars.pm
+#, perl-format
+msgid "substitution variable ${%s} unused, but is defined"
+msgstr "substitutievariabele ${%s} ongebruikt, maar is gedefinieerd"
+
+#: scripts/Dpkg/Vars.pm
+#, perl-format
+msgid "source package name '%s' is illegal: %s"
+msgstr "naam van het broncodepakket '%s' is niet toegestaan: %s"
+
+#: scripts/Dpkg/Vars.pm
+#, perl-format
+msgid "source package has two conflicting values - %s and %s"
+msgstr "broncodepakket heeft twee tegenstrijdige waarden - %s en %s"
+
+#: scripts/Dpkg/Vendor.pm
+#, perl-format
+msgid ""
+"%s origin filename is deprecated; it should have only alphanumeric or dash "
+"characters"
+msgstr ""
+"bestandsnaam %s voor origin is verouderd; hij mag alleen alfanumerieke "
+"tekens of streepjes bevatten"
+
+#: scripts/Dpkg/Vendor.pm
+#, perl-format
+msgid ""
+"%s module name is deprecated; it should be capitalized with only "
+"alphanumeric characters"
+msgstr ""
+"modulenaam %s is verouderd; hij moet in hoofdletters zijn en alleen "
+"alfanumerieke tekens bevatten"
+
+#: scripts/Dpkg/Vendor/Debian.pm
+#, perl-format
+msgid "unknown host architecture '%s'"
+msgstr "onbekende host-architectuur '%s'"
+
+#: scripts/Dpkg/Vendor/Ubuntu.pm
+msgid ""
+"Version number suggests Ubuntu changes, but Maintainer: does not have Ubuntu "
+"address"
+msgstr ""
+"Versienummer suggereert Ubuntu-wijzigingen, maar Maintainer: bevat geen "
+"Ubuntu-adres"
+
+#: scripts/Dpkg/Vendor/Ubuntu.pm
+msgid ""
+"Version number suggests Ubuntu changes, but there is no XSBC-Original-"
+"Maintainer field"
+msgstr ""
+"Versienummer suggereert Ubuntu-wijzigingen, maar er is geen veld XSBC-"
+"Original-Maintainer"
+
+#: scripts/Dpkg/Version.pm
+#, perl-format
+msgid "%s is not a valid version"
+msgstr "%s is geen geldige versie"
+
+#: scripts/Dpkg/Version.pm
+msgid "version number cannot be empty"
+msgstr "versienummer mag niet leeg zijn"
+
+#: scripts/Dpkg/Version.pm
+msgid "epoch part of the version number cannot be empty"
+msgstr "het epoch-deel van het versienummer mag niet leeg zijn"
+
+#: scripts/Dpkg/Version.pm
+msgid "upstream version cannot be empty"
+msgstr "bovenstroomse versie mag niet leeg zijn"
+
+#: scripts/Dpkg/Version.pm
+msgid "revision cannot be empty"
+msgstr "revisie mag niet leeg zijn"
+
+#: scripts/Dpkg/Version.pm
+msgid "version number does not start with digit"
+msgstr "het versienummer begint niet met een cijfer"
+
+#: scripts/Dpkg/Version.pm
+#, perl-format
+msgid "version number contains illegal character '%s'"
+msgstr "versienummer bevat ongeldig teken '%s'"
+
+#: scripts/Dpkg/Version.pm
+#, perl-format
+msgid "epoch part of the version number is not a number: '%s'"
+msgstr "epoch-gedeelte van het versienummer is geen nummer: '%s'"
diff --git a/scripts/po/pl.gmo b/scripts/po/pl.gmo
new file mode 100644
index 0000000..9ca976a
--- /dev/null
+++ b/scripts/po/pl.gmo
Binary files differ
diff --git a/scripts/po/pl.po b/scripts/po/pl.po
new file mode 100644
index 0000000..866e09f
--- /dev/null
+++ b/scripts/po/pl.po
@@ -0,0 +1,5448 @@
+# Translation of dpkg scripts messages to Polish
+# Copyright (C) 1999 Software in the Public Interest, Inc.
+# This file is distributed under the same license as the dpkg package.
+#
+# Robert Luberda <robert@debian.org>, 2007-2008.
+# Wiktor Wandachowicz <siryes@gmail.com>, 2008-2009.
+# Michał Kułach <michal.kulach@gmail.com>, 2012.
+# Łukasz Dulny <BartekChom@poczta.onet.pl>, 2014.
+msgid ""
+msgstr ""
+"Project-Id-Version: dpkg-dev 1.15.4\n"
+"Report-Msgid-Bugs-To: debian-dpkg@lists.debian.org\n"
+"POT-Creation-Date: 2023-05-11 02:03+0000\n"
+"PO-Revision-Date: 2015-04-07 07:05+0200\n"
+"Last-Translator: Łukasz Dulny <BartekChom@poczta.onet.pl>\n"
+"Language-Team: Polish <debian-l10n-polish@lists.debian.org>\n"
+"Language: pl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
+"|| n%100>=20) ? 1 : 2;\n"
+"X-Generator: Lokalize 1.5\n"
+
+#: scripts/dpkg-architecture.pl scripts/dpkg-buildflags.pl
+#: scripts/dpkg-buildpackage.pl scripts/dpkg-checkbuilddeps.pl
+#: scripts/dpkg-distaddfile.pl scripts/dpkg-genbuildinfo.pl
+#: scripts/dpkg-genchanges.pl scripts/dpkg-gencontrol.pl
+#: scripts/dpkg-gensymbols.pl scripts/dpkg-mergechangelogs.pl
+#: scripts/dpkg-name.pl scripts/dpkg-parsechangelog.pl
+#: scripts/dpkg-scanpackages.pl scripts/dpkg-scansources.pl
+#: scripts/dpkg-shlibdeps.pl scripts/dpkg-source.pl scripts/dpkg-vendor.pl
+#, perl-format
+msgid "Debian %s version %s.\n"
+msgstr "Debian %s w wersji %s.\n"
+
+#: scripts/dpkg-architecture.pl scripts/dpkg-buildflags.pl
+#: scripts/dpkg-buildpackage.pl scripts/dpkg-distaddfile.pl
+#: scripts/dpkg-genbuildinfo.pl scripts/dpkg-genchanges.pl
+#: scripts/dpkg-gencontrol.pl scripts/dpkg-gensymbols.pl
+#: scripts/dpkg-parsechangelog.pl scripts/dpkg-shlibdeps.pl
+#: scripts/dpkg-source.pl scripts/dpkg-vendor.pl
+msgid ""
+"\n"
+"This is free software; see the GNU General Public License version 2 or\n"
+"later for copying conditions. There is NO warranty.\n"
+msgstr ""
+"\n"
+"Ten program jest oprogramowaniem wolnym, rozpowszechnianym na warunkach\n"
+"licencji GNU w wersji drugiej lub późniejszej. Brak JAKIEJKOLWIEK "
+"gwarancji.\n"
+
+#: scripts/dpkg-architecture.pl scripts/dpkg-vendor.pl
+#, perl-format
+msgid "Usage: %s [<option>...] [<command>]"
+msgstr "Użycie: %s [<opcja>...] [<polecenie>]"
+
+#: scripts/dpkg-architecture.pl
+msgid ""
+"Commands:\n"
+" -l, --list list variables (default).\n"
+" -L, --list-known list valid architectures (matching some "
+"criteria).\n"
+" -e, --equal <arch> compare with host Debian architecture.\n"
+" -i, --is <arch-wildcard> match against host Debian architecture.\n"
+" -q, --query <variable> prints only the value of <variable>.\n"
+" -s, --print-set print command to set environment variables.\n"
+" -u, --print-unset print command to unset environment variables.\n"
+" -c, --command <command> set environment and run the command in it.\n"
+" -?, --help show this help message.\n"
+" --version show the version."
+msgstr ""
+"Polecenia:\n"
+" -l, --list wyświetla listę zmiennych (domyślnie).\n"
+" -L, --list-known wyswietla poprawne arch. (spełniające pewne "
+"kryteria).\n"
+" -e, --equal <arch> porównuje z architekturę Debiana hosta.\n"
+" -i, --is <arch_wieloznacznik>\n"
+" dopasowuje do architektury Debiana hosta.\n"
+" -q, --query <zmienna> wyświetla tylko wartość <zmiennej>.\n"
+" -s, --print-set wyświetla polecenie ustawiające zmienne "
+"środowiska.\n"
+" -u, --print-unset wyświetla polecenie usuwające zmienne środowiska.\n"
+" -c, --command <polecenie>\n"
+" ustawia środowisko i wykonuje w nim polecenie.\n"
+" -?, --help wyświetla ten komunikat pomocy.\n"
+" --version wyświetla wersję."
+
+#: scripts/dpkg-architecture.pl
+#, fuzzy
+#| msgid ""
+#| "Options:\n"
+#| " -a, --host-arch <arch> set host Debian architecture.\n"
+#| " -t, --host-type <type> set host GNU system type.\n"
+#| " -A, --target-arch <arch> set target Debian architecture.\n"
+#| " -T, --target-type <type> set target GNU system type.\n"
+#| " -W, --match-wildcard <arch-wildcard>\n"
+#| " restrict architecture list matching <arch-"
+#| "wildcard>.\n"
+#| " -B, --match-bits <arch-bits>\n"
+#| " restrict architecture list matching <arch-"
+#| "bits>.\n"
+#| " -E, --match-endian <arch-endian>\n"
+#| " restrict architecture list matching <arch-"
+#| "endian>.\n"
+#| " -f, --force force flag (override variables set in "
+#| "environment)."
+msgid ""
+"Options:\n"
+" -a, --host-arch <arch> set host Debian architecture.\n"
+" -t, --host-type <type> set host GNU system type.\n"
+" -A, --target-arch <arch> set target Debian architecture.\n"
+" -T, --target-type <type> set target GNU system type.\n"
+" -W, --match-wildcard <arch-wildcard>\n"
+" restrict architecture list matching <arch-"
+"wildcard>.\n"
+" -B, --match-bits <arch-bits>\n"
+" restrict architecture list matching <arch-"
+"bits>.\n"
+" -E, --match-endian <arch-endian>\n"
+" restrict architecture list matching <arch-"
+"endian>.\n"
+" --print-format <format>\n"
+" use <format> for --print-set and --print-unset,\n"
+" allowed values: shell (default), make.\n"
+" -f, --force force flag (override variables set in "
+"environment)."
+msgstr ""
+"Opcje:\n"
+" -a, --host-arch <arch> ustaw architekturę Debiana hosta.\n"
+" -t, --host-type <typ> ustaw typ systemu GNU hosta.\n"
+" -A, --target-arch <arch> ustaw docelową architekturę Debiana.\n"
+" -T, --target-type <typ> ustaw docelowy typ systemu GNU.\n"
+" -W, --match-wildcard <arch_wieloznacznik>\n"
+" tylko architektury dopasowane do "
+"wieloznacznika.\n"
+" -B, --match-bits <arch_bitów>\n"
+" tylko architektury z daną ilością bitów.\n"
+" -E, --match-endian <arch_kolejność>\n"
+" tylko architektury z daną kolejnością bitów.\n"
+" -f, --force wymuś (nadpisz zmienne ustawione w środowisku)."
+
+#: scripts/dpkg-architecture.pl
+#, perl-format
+msgid "unknown Debian architecture %s, you must specify GNU system type, too"
+msgstr "nieznana architektura Debiana %s, należy podać również typ systemu GNU"
+
+#: scripts/dpkg-architecture.pl
+#, perl-format
+msgid "unknown GNU system type %s, you must specify Debian architecture, too"
+msgstr "nieznany typ systemu GNU %s, należy podać również architekturę Debiana"
+
+#: scripts/dpkg-architecture.pl
+#, perl-format
+msgid "unknown default GNU system type for Debian architecture %s"
+msgstr "nieznany domyślny typ systemu GNU dla architektury Debiana %s"
+
+#: scripts/dpkg-architecture.pl
+#, perl-format
+msgid ""
+"default GNU system type %s for Debian arch %s does not match specified GNU "
+"system type %s"
+msgstr ""
+"domyślny typ systemu GNU %s dla arch. Debiana %s nie pasuje do podanego typu "
+"systemu GNU %s"
+
+#: scripts/dpkg-architecture.pl
+#, fuzzy, perl-format
+#| msgid "%s is not a supported compression method"
+msgid "%s is not a supported print format"
+msgstr "%s nie jest obsługiwaną metodą kompresji"
+
+#: scripts/dpkg-architecture.pl
+#, perl-format
+msgid "%s is not a supported variable name"
+msgstr "%s nie jest obsługiwaną nazwą zmiennej"
+
+#: scripts/dpkg-architecture.pl scripts/dpkg-buildflags.pl
+#: scripts/dpkg-distaddfile.pl scripts/dpkg-genbuildinfo.pl
+#: scripts/dpkg-genchanges.pl scripts/dpkg-gencontrol.pl
+#: scripts/dpkg-gensymbols.pl scripts/dpkg-name.pl
+#: scripts/dpkg-parsechangelog.pl scripts/dpkg-shlibdeps.pl
+#: scripts/dpkg-vendor.pl
+#, perl-format
+msgid "unknown option '%s'"
+msgstr "nieznana opcja \"%s\""
+
+#: scripts/dpkg-architecture.pl
+#, fuzzy, perl-format
+#| msgid ""
+#| "specified GNU system type %s does not match gcc system type %s, try "
+#| "setting a correct CC environment variable"
+msgid ""
+"specified GNU system type %s does not match CC system type %s, try setting a "
+"correct CC environment variable"
+msgstr ""
+"podany typ systemu GNU %s nie odpowiada typowi systemu gcc %s, proszę "
+"spróbować ustawić poprawną zmienną środowiskową CC"
+
+#: scripts/dpkg-architecture.pl scripts/dpkg-shlibdeps.pl scripts/Dpkg/IPC.pm
+#: scripts/Dpkg/Shlibs/Cppfilt.pm
+#, perl-format
+msgid "unable to execute %s"
+msgstr "nie można wykonać %s"
+
+#: scripts/dpkg-buildflags.pl
+#, perl-format
+msgid "Usage: %s [<command>]"
+msgstr "Użycie: %s [<polecenie>]"
+
+#: scripts/dpkg-buildflags.pl
+#, fuzzy
+#| msgid ""
+#| "Commands:\n"
+#| " --get <flag> output the requested flag to stdout.\n"
+#| " --origin <flag> output the origin of the flag to stdout:\n"
+#| " value is one of vendor, system, user, env.\n"
+#| " --query-features <area>\n"
+#| " output the status of features for the given area.\n"
+#| " --list output a list of the flags supported by the current "
+#| "vendor.\n"
+#| " --export=(sh|make|cmdline|configure)\n"
+#| " output something convenient to import the "
+#| "compilation\n"
+#| " flags in a shell script, in make, or in a command "
+#| "line.\n"
+#| " --dump output all compilation flags with their values\n"
+#| " --status print a synopsis with all parameters affecting the\n"
+#| " behaviour of dpkg-buildflags and the resulting "
+#| "flags\n"
+#| " and their origin.\n"
+#| " --help show this help message.\n"
+#| " --version show the version.\n"
+msgid ""
+"Commands:\n"
+" --get <flag> output the requested flag to stdout.\n"
+" --origin <flag> output the origin of the flag to stdout:\n"
+" value is one of vendor, system, user, env.\n"
+" --status output a synopsis with all parameters affecting the\n"
+" program behaviour, the resulting flags and their "
+"origin.\n"
+" --query like --status, but in deb822 format.\n"
+" --query-features <area>\n"
+" output the status of features for the given area.\n"
+" --list output a list of the flags supported by the current "
+"vendor.\n"
+" --export=(sh|make|cmdline|configure)\n"
+" output something convenient to import the compilation\n"
+" flags in a shell script, in make, or in a command "
+"line.\n"
+" --dump output all compilation flags with their values.\n"
+" --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+"Polecenia:\n"
+" --get <flaga> wypisuje żądaną flagę na standardowe wyjście.\n"
+" --origin <flaga> wypisuje pochodzenie flagi na standardowe wyjście;\n"
+" wartość jest jedną z: vendor, system, user, env.\n"
+" --query-features <obszar>\n"
+" wypisuje status funkcji w podanym obszarze.\n"
+" --list wypisuje listę flag obsługiwanych przez bieżącego "
+"dostawcę.\n"
+" --export=(sh|make|cmdline|configure)\n"
+" wypisuje coś przydatnego do zaimportowania flag\n"
+" kompilacji w skrypcie powłoki, pliku make lub\n"
+" wierszu polecenia.\n"
+" --dump wypisuje wszystkie flagi kompilacji wraz z wartościami\n"
+" --status wypisuje składnię wszystkich parametrów wpływających na "
+"zacho-\n"
+" wanie dpkg-buildflags oraz wynikowych flag i ich "
+"pochodzenia.\n"
+" --help wyświetla ten komunikat pomocy.\n"
+" --version wyświetla wersję.\n"
+
+#: scripts/dpkg-buildflags.pl scripts/dpkg-source.pl scripts/dpkg-vendor.pl
+#, perl-format
+msgid "two commands specified: --%s and --%s"
+msgstr "podano dwa polecenia: --%s i --%s"
+
+#: scripts/dpkg-buildflags.pl scripts/dpkg-vendor.pl
+#, perl-format
+msgid "%s needs a parameter"
+msgstr "%s wymaga podania parametru"
+
+#: scripts/dpkg-buildpackage.pl scripts/dpkg-genbuildinfo.pl
+#: scripts/dpkg-genchanges.pl scripts/dpkg-gencontrol.pl
+#: scripts/dpkg-gensymbols.pl scripts/dpkg-parsechangelog.pl
+#, perl-format
+msgid "Usage: %s [<option>...]"
+msgstr "Użycie: %s [<opcja>...]"
+
+#: scripts/dpkg-buildpackage.pl
+#, fuzzy
+#| msgid ""
+#| "Options:\n"
+#| " -F (default) normal full build (binaries and sources).\n"
+#| " -g source and arch-indep build.\n"
+#| " -G source and arch-specific build.\n"
+#| " -b binary-only, no source files.\n"
+#| " -B binary-only, only arch-specific files.\n"
+#| " -A binary-only, only arch-indep files.\n"
+#| " -S source-only, no binary files.\n"
+#| " -nc do not clean source tree (implies -b).\n"
+#| " -tc clean source tree when finished.\n"
+#| " -D (default) check build dependencies and conflicts.\n"
+#| " -d do not check build dependencies and conflicts.\n"
+#| " -P<profiles> assume given build profiles as active (comma-separated "
+#| "list).\n"
+#| " -R<rules> rules file to execute (default is debian/rules).\n"
+#| " -T<target> call debian/rules <target> with the proper environment.\n"
+#| " --as-root ensure -T calls the target with root rights.\n"
+#| " -j[<number>] specify jobs to run simultaneously (passed to <rules>).\n"
+#| " -r<gain-root-command>\n"
+#| " command to gain root privileges (default is fakeroot).\n"
+#| " --check-command=<check-command>\n"
+#| " command to check the .changes file (no default).\n"
+#| " --check-option=<opt>\n"
+#| " pass <opt> to <check-command>.\n"
+#| " --hook-<hook-name>=<hook-command>\n"
+#| " set <hook-command> as the hook <hook-name>, known "
+#| "hooks:\n"
+#| " init preclean source build binary changes postclean\n"
+#| " check sign done\n"
+#| " -p<sign-command>\n"
+#| " command to sign .dsc and/or .changes files\n"
+#| " (default is gpg2 or gpg).\n"
+#| " -k<keyid> the key to use for signing.\n"
+#| " -ap add pause before starting signature process.\n"
+#| " -us unsigned source package.\n"
+#| " -uc unsigned .changes file.\n"
+#| " --force-sign\n"
+#| " force signing the resulting files.\n"
+#| " --admindir=<directory>\n"
+#| " change the administrative directory.\n"
+#| " -?, --help show this help message.\n"
+#| " --version show the version."
+msgid ""
+"Options:\n"
+" --build=<type>[,...] specify the build <type>: full, source, "
+"binary,\n"
+" any, all (default is 'full').\n"
+" -F, --build=full normal full build (source and binary; "
+"default).\n"
+" -g, --build=source,all source and arch-indep build.\n"
+" -G, --build=source,any source and arch-specific build.\n"
+" -b, --build=binary binary-only, no source files.\n"
+" -B, --build=any binary-only, only arch-specific files.\n"
+" -A, --build=all binary-only, only arch-indep files.\n"
+" -S, --build=source source-only, no binary files.\n"
+" -nc, --no-pre-clean do not pre clean source tree (implies -b).\n"
+" --pre-clean pre clean source tree (default).\n"
+" --no-post-clean do not post clean source tree (default).\n"
+" -tc, --post-clean post clean source tree.\n"
+" --sanitize-env sanitize the build environment.\n"
+" -D, --check-builddeps check build dependencies and conflicts "
+"(default).\n"
+" -d, --no-check-builddeps do not check build dependencies and "
+"conflicts.\n"
+" --ignore-builtin-builddeps\n"
+" do not check builtin build dependencies.\n"
+" -P, --build-profiles=<profiles>\n"
+" assume comma-separated build <profiles> as "
+"active.\n"
+" --rules-requires-root assume legacy Rules-Requires-Root field "
+"value.\n"
+" -R, --rules-file=<rules> rules file to execute (default is debian/"
+"rules).\n"
+" -T, --rules-target=<target> call debian/rules <target>.\n"
+" --as-root ensure -T calls the target with root rights.\n"
+" -j, --jobs[=<jobs>|auto] jobs to run simultaneously (passed to "
+"<rules>),\n"
+" (default; default is auto, opt-in mode).\n"
+" -J, --jobs-try[=<jobs>|auto]\n"
+" alias for -j, --jobs.\n"
+" --jobs-force[=<jobs>|auto]\n"
+" jobs to run simultaneously (passed to "
+"<rules>),\n"
+" (default is auto, forced mode).\n"
+" -r, --root-command=<command>\n"
+" command to gain root rights (default is "
+"fakeroot).\n"
+" --check-command=<command>\n"
+" command to check the .changes file (no "
+"default).\n"
+" --check-option=<opt> pass <opt> to check <command>.\n"
+" --hook-<name>=<command> set <command> as the hook <name>, known "
+"hooks:\n"
+" init preclean source build binary buildinfo\n"
+" changes postclean check sign done\n"
+" --buildinfo-file=<file> set the .buildinfo filename to generate.\n"
+" --buildinfo-option=<opt>\n"
+" pass option <opt> to dpkg-genbuildinfo.\n"
+" --changes-file=<file> set the .changes filename to generate.\n"
+" --sign-backend=<backend>\n"
+" OpenPGP backend to use to sign\n"
+" (default is auto).\n"
+" -p, --sign-command=<command>\n"
+" command to sign .dsc and/or .changes files\n"
+" (default is gpg).\n"
+" --sign-keyfile=<file> the key file to use for signing.\n"
+" -k, --sign-keyid=<keyid> the key id to use for signing.\n"
+" --sign-key=<keyid> alias for -k, --sign-keyid.\n"
+" -ap, --sign-pause add pause before starting signature process.\n"
+" -us, --unsigned-source unsigned source package.\n"
+" -ui, --unsigned-buildinfo unsigned .buildinfo file.\n"
+" -uc, --unsigned-changes unsigned .buildinfo and .changes file.\n"
+" --no-sign do not sign any file.\n"
+" --force-sign force signing the resulting files.\n"
+" --admindir=<directory> change the administrative directory.\n"
+" -?, --help show this help message.\n"
+" --version show the version."
+msgstr ""
+"Opcje:\n"
+" -F (domyślna) normalne, pełne wydanie (pliki binarne i źródłowe).\n"
+" -g niezależne od architektury ze źródłami.\n"
+" -G zależne od architektury ze źródłami.\n"
+" -b tylko binarne, bez źródeł.\n"
+" -B tylko binarne, tylko pliki zależne od architektury.\n"
+" -A tylko binarne, tylko pliki niezależne od architektury.\n"
+" -S tylko źródła, bez plików binarnych.\n"
+" -nc nie czyści drzewa źródeł (implikuje -b).\n"
+" -tc czyście drzewo źródeł po zakończeniu.\n"
+" -D (domyślna) sprawdza zależności czasu budowania i konflikty.\n"
+" -d nie sprawdza zależności czasu budowania i konfliktów.\n"
+" -P<profile> przyjmuje aktywny profil budowania (lista rozdz. przec.).\n"
+" -R<reguły> plik reguł do wykonania (domyślnie debian/rules).\n"
+" -T<cel> wywołuje debian/rules <cel> z prawidłowym środowiskiem.\n"
+" --as-root zapewnia, że -T wywołuje cel z uprawnieniami roota.\n"
+" -j[<liczba>] okr. liczbę równol. wykonywanych zadań (przekaz. do "
+"<reguł>).\n"
+" -r<polecenie_do_uprawnień_roota>\n"
+" polecenie do otrzymania uprawnień roota (domyślnie "
+"fakeroot).\n"
+" --check-command=<polecenie_sprawdzenia>\n"
+" polecenie sprawdzajace plik .changes (brak domyślnego).\n"
+" --check-option=<opc>\n"
+" przekazuje <opc> do <polecenia_sprawdzenia>.\n"
+" --hook-<nazwa_hooka>=<polecenie_hooka>\n"
+" ustawia <polecenie_hooka> jako hook <nazwa_hooka>, znane "
+"hooki:\n"
+" init preclean source build binary changes postclean\n"
+" check sign done\n"
+" -p<polecenie_podpisywania>\n"
+" pol. do podpisyw. plików .dsc i/lub .changes (domyślnie "
+"gpg).\n"
+" -k<id_kluczba> klucz do użycia przy podpisywaniu.\n"
+" -ap dodaje pauzę przed rozpoczęciem procesu podpisywania.\n"
+" -us niepodpisany pakiet źrodłowy.\n"
+" -uc niepodpisywany plik .changes.\n"
+" --force-sign\n"
+" wymusza podpisywanie plików wynikowych.\n"
+" --admindir=<katalog>\n"
+" zmienia katalog administracyjny.\n"
+" -?, --help wyświetla ten komunikat pomocy.\n"
+" --version wyświetla wersję."
+
+#: scripts/dpkg-buildpackage.pl
+#, fuzzy
+#| msgid ""
+#| "Options passed to dpkg-architecture:\n"
+#| " -a, --host-arch <arch> set the host Debian architecture.\n"
+#| " -t, --host-type <type> set the host GNU system type.\n"
+#| " --target-arch <arch> set the target Debian architecture.\n"
+#| " --target-type <type> set the target GNU system type."
+msgid ""
+"Options passed to dpkg-architecture:\n"
+" -a, --host-arch <arch> set the host Debian architecture.\n"
+" -t, --host-type <type> set the host GNU system type.\n"
+" --target-arch <arch> set the target Debian architecture.\n"
+" --target-type <type> set the target GNU system type."
+msgstr ""
+"Opcje przekazywane do dpkg-architecture:\n"
+" -a, --host-arch <arch> ustaw architekturę Debiana hosta.\n"
+" -t, --host-type <typ> ustaw typ systemu GNU hosta.\n"
+" --target-arch <arch> ustaw docelową architekturę Debiana.\n"
+" --target-type <typ> ustaw docelowy typ systemu GNU."
+
+#: scripts/dpkg-buildpackage.pl
+#, fuzzy
+#| msgid ""
+#| "Options passed to dpkg-genchanges:\n"
+#| " -si (default) source includes orig, if new upstream.\n"
+#| " -sa source includes orig, always.\n"
+#| " -sd source is diff and .dsc only.\n"
+#| " -v<version> changes since version <version>.\n"
+#| " -m<maint> maintainer for package is <maint>.\n"
+#| " -e<maint> maintainer for release is <maint>.\n"
+#| " -C<descfile> changes are described in <descfile>.\n"
+#| " --changes-option=<opt>\n"
+#| " pass option <opt> to dpkg-genchanges."
+msgid ""
+"Options passed to dpkg-genchanges:\n"
+" -si source includes orig, if new upstream "
+"(default).\n"
+" -sa source includes orig, always.\n"
+" -sd source is diff and .dsc only.\n"
+" -v<version> changes since version <version>.\n"
+" -m, --source-by=<maint> maintainer for this source or build is "
+"<maint>.\n"
+" --build-by=<maint> ditto.\n"
+" -e, --release-by=<maint> maintainer for this change or release is "
+"<maint>.\n"
+" --changed-by=<maint> ditto.\n"
+" -C<descfile> changes are described in <descfile>.\n"
+" --changes-option=<opt> pass option <opt> to dpkg-genchanges."
+msgstr ""
+"Opcje przekazywane do dpkg-genchanges:\n"
+" -si (domyślna) źródła zawierają orig, jeśli jest nowa wersja macierz.\n"
+" -sa źródła zawierają orig, zawsze.\n"
+" -sd źródła są różnicą i zawierają jedynie .dsc.\n"
+" -v<wersja> zmiany od wersji <wersja>.\n"
+" -m<opiekun> opiekunem pakietu jest <opiekun>.\n"
+" -e<opiekun> opiekunem wydania jest <opiekun>.\n"
+" -C<plik_opisu> zmiany są opisane w <pliku_opisu>.\n"
+" --changes-option=<opcja>\n"
+" przekazuje opcję <opcja> do dpkg-genchanges."
+
+#: scripts/dpkg-buildpackage.pl
+#, fuzzy
+#| msgid ""
+#| "Options passed to dpkg-source:\n"
+#| " -sn force Debian native source format.\n"
+#| " -s[sAkurKUR] see dpkg-source for explanation.\n"
+#| " -z<level> compression level to use for source.\n"
+#| " -Z<compressor> compression to use for source (gz|xz|bzip2|lzma).\n"
+#| " -i[<regex>] ignore diffs of files matching regex.\n"
+#| " -I[<pattern>] filter out files when building tarballs.\n"
+#| " --source-option=<opt>\n"
+#| " pass option <opt> to dpkg-source.\n"
+msgid ""
+"Options passed to dpkg-source:\n"
+" -sn force Debian native source format.\n"
+" -s[sAkurKUR] see dpkg-source for explanation.\n"
+" -z, --compression-level=<level>\n"
+" compression level to use for source.\n"
+" -Z, --compression=<compressor>\n"
+" compression to use for source (gz|xz|bzip2|"
+"lzma).\n"
+" -i, --diff-ignore[=<regex>] ignore diffs of files matching <regex>.\n"
+" -I, --tar-ignore[=<pattern>]\n"
+" filter out files when building tarballs.\n"
+" --source-option=<opt> pass option <opt> to dpkg-source.\n"
+msgstr ""
+"Opcje przekazywane do dpkg-source:\n"
+" -sn wymusza natywny format źródłowy Debiana.\n"
+" -s[sAkurKUR] dpkg-source zawiera opis tych funkcji.\n"
+" -z<poziom> poziom kompresji źródeł.\n"
+" -Z<kompresja> kompresja źródeł (gz|xz|bzip2|lzma).\n"
+" -i[<wyr_reg>] ignoruje różnice plików pasujących do wzorca.\n"
+" -I[<wzorzec>] filtruje pliki podczas budowania archiwum.\n"
+" --source-option=<opcja>\n"
+" przekazuje opcję <opcja> do dpkg-source.\n"
+
+#: scripts/dpkg-buildpackage.pl
+#, fuzzy
+#| msgid "no changelog file specified"
+msgid "missing .buildinfo filename"
+msgstr "nie podano żadnego pliku zmian"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "passing %s via %s is not supported; please use %s instead"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+#, fuzzy
+#| msgid "no changelog file specified"
+msgid "missing .changes filename"
+msgstr "nie podano żadnego pliku zmian"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "unknown hook name %s"
+msgstr "nieznana nazwa hooka %s"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "missing hook %s command"
+msgstr "brak polecenia hooka %s"
+
+#: scripts/dpkg-buildpackage.pl scripts/dpkg-genbuildinfo.pl
+#: scripts/dpkg-gencontrol.pl
+#, fuzzy, perl-format
+#| msgid "-i%s is deprecated; it is without effect"
+msgid "%s is deprecated; it is without effect"
+msgstr "-i%s jest przestarzałe - nie ma żadnego efektu"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "-s%s is deprecated; always using gpg style interface"
+msgstr "-s%s jest przestarzałe, zawsze używany jest interfejs w stylu gpg"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "unknown option or argument %s"
+msgstr "niepoprawna opcja lub argument %s"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "option %s is only meaningful with option %s"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "check-command '%s' not found"
+msgstr "nie znaleziono polecenia-sprawdzenia \"%s\""
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "sign-command '%s' not found"
+msgstr "nie znaleziono polecenia-podpisu \"%s\""
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source package"
+msgstr "pakiet źródłowy"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source version"
+msgstr "wersja pakietu źródłowego"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source distribution"
+msgstr "dystrybucja źródła"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source changed by"
+msgstr "źródła zmienione przez"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "host architecture"
+msgstr "architektura gościa"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "debian/rules is not executable; fixing that"
+msgstr "debian/rules nie jest plikiem wykonywalnym - naprawianie tego"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "build dependencies/conflicts unsatisfied; aborting"
+msgstr "niespełnione zależności/konflikty czasu budowania - przerywanie"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "(Use -d flag to override.)"
+msgstr "(Użyj opcji -d, aby nadpisać)."
+
+#: scripts/dpkg-buildpackage.pl
+msgid ""
+"building a source package without cleaning up as you asked; it might contain "
+"undesired files"
+msgstr ""
+"generowanie pakietu źródłowego bez wcześniejszego czyszczenia według żądania "
+"- może on zawierać niepotrzebne pliki"
+
+#: scripts/dpkg-buildpackage.pl
+#, fuzzy
+#| msgid "Press the return key to start signing process\n"
+msgid "Press <enter> to start the signing process.\n"
+msgstr "Naciśnij <enter>, by rozpocząć proces podpisywania\n"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "not signing UNRELEASED build; use --force-sign to override"
+msgstr "nie podpisywane wydanie UNRELEASED - użyj --force-sign, aby nadpisać"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "unable to determine %s"
+msgstr "nie można określić %s"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "using a gain-root-command while being root"
+msgstr "używanie polecenia-uzysk-praw-admin podczas bycia administratorem"
+
+#: scripts/dpkg-buildpackage.pl
+msgid ""
+"fakeroot not found, either install the fakeroot\n"
+"package, specify a command with the -r option, or run this as root"
+msgstr ""
+"nie znaleziono fakeroot, proszę zainstalować pakiet fakeroot lub\n"
+"podać polecenie w opcji -r, lub uruchomić ten program jako root"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "gain-root-command '%s' not found"
+msgstr "nie znaleziono polecenia-uzysk-praw-admin \"%s\""
+
+#: scripts/dpkg-buildpackage.pl
+#, fuzzy, perl-format
+#| msgid "unknown file type"
+msgid "disallowed target in %s field keyword \"%s\""
+msgstr "nieznany typ pliku"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "%s field keyword \"%s\" is unknown in dpkg namespace"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "%s field keyword \"%s\" is uppercase; use \"%s\" instead"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "%s field keyword \"%s\" is invalid; use \"%s\" instead"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+#, fuzzy, perl-format
+#| msgid "unknown file type"
+msgid "%s field keyword \"%s\" is unknown"
+msgstr "nieznany typ pliku"
+
+#: scripts/dpkg-buildpackage.pl
+#, fuzzy, perl-format
+#| msgid "Files field contains bad line `%s'"
+msgid "field %s contains duplicate keyword \"%s\""
+msgstr "Pole Files zawiera niepoprawną linię \"%s\""
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "%s field contains both global and implementation specific keywords"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "unknown %% substitution in hook: %%%s"
+msgstr "nieznane podstawienie %% w hooku: %%%s"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid ""
+"short OpenPGP key IDs are broken; please use key fingerprints in %s or %s "
+"instead"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid ""
+"long OpenPGP key IDs are strongly discouraged; please use key fingerprints "
+"in %s or %s instead"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl scripts/dpkg-checkbuilddeps.pl
+#: scripts/dpkg-genbuildinfo.pl scripts/dpkg-name.pl scripts/Dpkg/Arch.pm
+#: scripts/Dpkg/IPC.pm scripts/Dpkg/Shlibs.pm
+#, perl-format
+msgid "cannot open %s"
+msgstr "nie można otworzyć %s"
+
+#: scripts/dpkg-buildpackage.pl scripts/dpkg-distaddfile.pl
+#: scripts/dpkg-genbuildinfo.pl scripts/dpkg-gencontrol.pl
+#: scripts/Dpkg/Interface/Storable.pm scripts/Dpkg/Source/Package/V2.pm
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot close %s"
+msgstr "nie można zamknąć %s"
+
+#: scripts/dpkg-buildpackage.pl scripts/Dpkg/Source/Archive.pm
+#, fuzzy, perl-format
+#| msgid "cannot rename %s to %s"
+msgid "cannot move %s to %s"
+msgstr "nie można przemianować %s na %s"
+
+#: scripts/dpkg-buildpackage.pl
+#, fuzzy, perl-format
+#| msgid "failed to sign .changes file"
+msgid "failed to sign %s file: %s"
+msgstr "błąd podpisywania pliku .changes."
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source-only upload: Debian-native package"
+msgstr "wydanie tylko źródeł: natywny pakiet Debiana"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source-only, diff-only upload (original source NOT included)"
+msgstr "wydanie tylko źródeł i różnic (oryginalne źródła NIE dołączone)"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source-only upload (original source is included)"
+msgstr "wydanie tylko źródeł (oryginalne źródła dołączone)"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "binary-only upload (no source included)"
+msgstr "wydanie tylko binarne (bez żadnych źródeł)"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "full upload; Debian-native package (full source is included)"
+msgstr "pełne wydanie - natywny pakiet Debiana (pełne źródła dołączone)"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "binary and diff upload (original source NOT included)"
+msgstr "wydanie binarne i pliku różnic (oryginalne źródła NIE dołączone)"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "full upload (original source is included)"
+msgstr "pełne wydanie (oryginalne źródła dołączone)"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid ""
+"%s must be updated to support the 'build-arch' and 'build-indep' targets (at "
+"least '%s' seems to be missing)"
+msgstr ""
+"%s musi zostać zaktualizowane w celu obsługi celów \"build-arch\" i 'build-"
+"indep' (brakuje co najmniej \"%s\")"
+
+#: scripts/dpkg-checkbuilddeps.pl
+#, perl-format
+msgid "Usage: %s [<option>...] [<control-file>]"
+msgstr "Użycie: %s [<opcja>...] <plik-kontrolny>"
+
+#: scripts/dpkg-checkbuilddeps.pl
+#, fuzzy
+#| msgid ""
+#| "Options:\n"
+#| " -A ignore Build-Depends-Arch and Build-Conflicts-Arch.\n"
+#| " -B ignore Build-Depends-Indep and Build-Conflicts-Indep.\n"
+#| " -d build-deps use given string as build dependencies instead of\n"
+#| " retrieving them from control file\n"
+#| " -c build-conf use given string for build conflicts instead of\n"
+#| " retrieving them from control file\n"
+#| " -a arch assume given host architecture\n"
+#| " -P profiles assume given build profiles (comma-separated list)\n"
+#| " --admindir=<directory>\n"
+#| " change the administrative directory.\n"
+#| " -?, --help show this help message.\n"
+#| " --version show the version."
+msgid ""
+"Options:\n"
+" -A ignore Build-Depends-Arch and Build-Conflicts-Arch.\n"
+" -B ignore Build-Depends-Indep and Build-Conflicts-Indep.\n"
+" -I ignore built-in build dependencies and conflicts.\n"
+" -d build-deps use given string as build dependencies instead of\n"
+" retrieving them from control file\n"
+" -c build-conf use given string for build conflicts instead of\n"
+" retrieving them from control file\n"
+" -a arch assume given host architecture\n"
+" -P profiles assume given build profiles (comma-separated list)\n"
+" --admindir=<directory>\n"
+" change the administrative directory.\n"
+" -?, --help show this help message.\n"
+" --version show the version."
+msgstr ""
+"Opcje:\n"
+" -A ignoruje Build-Depends-Arch i Build-Conflicts-Arch.\n"
+" -B ignoruje Build-Depends-Indep i Build-Conflicts-Indep.\n"
+" -d build-zależ używa podanych zależności czasu budowania zamiast\n"
+" pobierać je z pliku kontrolnego\n"
+" -c build-konfl używa podanych konfliktów czasu budowania zamiast\n"
+" pobierać je z pliku kontrolnego\n"
+" -a architekt zakłada podaną architekturę hosta\n"
+" -P profil przyjmij profil budowania (lista rozdzielona przecinkami)\n"
+" --admindir=<katalog>\n"
+" zmienia katalog administracyjny.\n"
+" -?, --help wyświetla ten komunikat pomocy.\n"
+" --version wyświetla wersję."
+
+#: scripts/dpkg-checkbuilddeps.pl
+msgid ""
+"<control-file> is the control file to process (default: debian/control)."
+msgstr ""
+"<plik_kontrolny> jest plikiem kontrolnym do przetworzenia (domyślnie: debian/"
+"control)."
+
+#: scripts/dpkg-checkbuilddeps.pl scripts/dpkg-shlibdeps.pl
+#: scripts/dpkg-source.pl
+#, fuzzy, perl-format
+#| msgid "cannot open %s"
+msgid "cannot parse %s field"
+msgstr "nie można otworzyć %s"
+
+#: scripts/dpkg-checkbuilddeps.pl
+#, fuzzy, perl-format
+#| msgid "%s: Unmet build dependencies: "
+msgid "Unmet build dependencies: %s"
+msgstr "%s: Niespełnione zależności budowania pakietu:"
+
+#: scripts/dpkg-checkbuilddeps.pl
+#, fuzzy, perl-format
+#| msgid "%s: Build conflicts: "
+msgid "Build conflicts: %s"
+msgstr "%s: Konfliktu budowania pakietu:"
+
+#: scripts/dpkg-distaddfile.pl
+#, perl-format
+msgid ""
+"Usage: %s [<option>...] <filename> <section> <priority>\n"
+"\n"
+"Options:\n"
+" -f<files-list-file> write files here instead of debian/files.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+"Użycie: %s [<opcja> ...] <nazwa-pliku> <sekcja> <priorytet>\n"
+"\n"
+"Opcje:\n"
+" -f<plikzlistąplików> zapisuje pliki do podanego pliku zamiast debian/"
+"files.\n"
+" -?, --help wyświetla ten komunikat pomocy.\n"
+" --version wyświetla wersję.\n"
+
+#: scripts/dpkg-distaddfile.pl
+msgid "need exactly a filename, section and priority"
+msgstr "należy podać nazwę pliku, sekcję i priorytet"
+
+#: scripts/dpkg-distaddfile.pl
+msgid "filename, section and priority may contain no whitespace"
+msgstr "nazwa pliku, sekcja i priorytet nie mogą zawierać białych znaków"
+
+#: scripts/dpkg-distaddfile.pl scripts/dpkg-genbuildinfo.pl
+#: scripts/dpkg-gencontrol.pl scripts/dpkg-mergechangelogs.pl
+#: scripts/Dpkg/Compression/FileHandle.pm scripts/Dpkg/File.pm
+#: scripts/Dpkg/IPC.pm scripts/Dpkg/Interface/Storable.pm
+#: scripts/Dpkg/Source/BinaryFiles.pm scripts/Dpkg/Source/Package.pm
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "cannot write %s"
+msgstr "nie można zapisać %s"
+
+#: scripts/dpkg-distaddfile.pl scripts/dpkg-genbuildinfo.pl
+#: scripts/dpkg-gencontrol.pl
+msgid "install new files list file"
+msgstr "instalowanie nowego pliku z listą plików"
+
+#: scripts/dpkg-genbuildinfo.pl
+msgid ""
+"Options:\n"
+" --build=<type>[,...] specify the build <type>: full, source, binary,\n"
+" any, all (default is 'full').\n"
+" -c<control-file> get control info from this file.\n"
+" -l<changelog-file> get per-version info from this file.\n"
+" -f<files-list-file> get .deb files list from this file.\n"
+" -F<changelog-format> force changelog format.\n"
+" -O[<buildinfo-file>] write to stdout (or <buildinfo-file>).\n"
+" -u<upload-files-dir> directory with files (default is '..').\n"
+" --always-include-kernel always include Build-Kernel-Version.\n"
+" --always-include-path always include Build-Path.\n"
+" --admindir=<directory> change the administrative directory.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+
+#: scripts/dpkg-genbuildinfo.pl
+#, fuzzy
+#| msgid "binary build with no binary artifacts found; cannot distribute"
+msgid "binary build with no binary artifacts found; .buildinfo is meaningless"
+msgstr ""
+"znaleziono wyd. binarne bez bin. artefaktów - nie można rozpowszechniać"
+
+#: scripts/dpkg-genbuildinfo.pl
+#, fuzzy, perl-format
+#| msgid "cannot install output control file '%s'"
+msgid "cannot install output buildinfo file '%s'"
+msgstr "nie można zainstalować wyjściowego pliku kontrolnego \"%s\""
+
+#: scripts/dpkg-genchanges.pl
+#, fuzzy
+#| msgid ""
+#| "Options:\n"
+#| " -g source and arch-indep build.\n"
+#| " -G source and arch-specific build.\n"
+#| " -b binary-only, no source files.\n"
+#| " -B binary-only, only arch-specific files.\n"
+#| " -A binary-only, only arch-indep files.\n"
+#| " -S source-only, no binary files.\n"
+#| " -c<control-file> get control info from this file.\n"
+#| " -l<changelog-file> get per-version info from this file.\n"
+#| " -f<files-list-file> get .deb files list from this file.\n"
+#| " -v<since-version> include all changes later than version.\n"
+#| " -C<changes-description> use change description from this file.\n"
+#| " -m<maintainer> override control's maintainer value.\n"
+#| " -e<maintainer> override changelog's maintainer value.\n"
+#| " -u<upload-files-dir> directory with files (default is '..').\n"
+#| " -si (default) source includes orig, if new upstream.\n"
+#| " -sa source includes orig, always.\n"
+#| " -sd source is diff and .dsc only.\n"
+#| " -q quiet - no informational messages on stderr.\n"
+#| " -F<changelog-format> force changelog format.\n"
+#| " -V<name>=<value> set a substitution variable.\n"
+#| " -T<substvars-file> read variables here, not debian/substvars.\n"
+#| " -D<field>=<value> override or add a field and value.\n"
+#| " -U<field> remove a field.\n"
+#| " -?, --help show this help message.\n"
+#| " --version show the version.\n"
+msgid ""
+"Options:\n"
+" --build=<type>[,...] specify the build <type>: full, source, binary,\n"
+" any, all (default is 'full').\n"
+" -g source and arch-indep build.\n"
+" -G source and arch-specific build.\n"
+" -b binary-only, no source files.\n"
+" -B binary-only, only arch-specific files.\n"
+" -A binary-only, only arch-indep files.\n"
+" -S source-only, no binary files.\n"
+" -c<control-file> get control info from this file.\n"
+" -l<changelog-file> get per-version info from this file.\n"
+" -f<files-list-file> get .deb files list from this file.\n"
+" -v<since-version> include all changes later than version.\n"
+" -C<changes-description> use change description from this file.\n"
+" -m<maintainer> override control's maintainer value.\n"
+" -e<maintainer> override changelog's maintainer value.\n"
+" -u<upload-files-dir> directory with files (default is '..').\n"
+" -si source includes orig, if new upstream (default).\n"
+" -sa source includes orig, always.\n"
+" -sd source is diff and .dsc only.\n"
+" -q quiet - no informational messages on stderr.\n"
+" -F<changelog-format> force changelog format.\n"
+" -V<name>=<value> set a substitution variable.\n"
+" -T<substvars-file> read variables here, not debian/substvars.\n"
+" -D<field>=<value> override or add a field and value.\n"
+" -U<field> remove a field.\n"
+" -O[<filename>] write to stdout (default) or <filename>.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+"Opcje:\n"
+" -g niezależne od architektury ze źródłami.\n"
+" -G zależne od architektury ze źródłami.\n"
+" -b tylko binarne, bez źródeł.\n"
+" -B tylko binarne, tylko pliki zależne od architektury.\n"
+" -A tylko binarne, tylko pliki niezależne od architektury.\n"
+" -S tylko źródła, bez plików binarnych.\n"
+" -c<plik_kontrolny> pobiera informacje kontrolne z tego pliku.\n"
+" -l<plik_zmian> pobiera informacje o wersji z tego pliku.\n"
+" -f<plik_z_listą_plików> pobiera listę plików *.deb z tego pliku.\n"
+" -v<od_wersji> włącza wszystkie zmiany późniejsze niż wersja.\n"
+" -C<opis_zmian> używa opisu zmian z tego pliku.\n"
+" -m<opiekun> nadpisuje wartość opiekuna z pliku kontrolnego.\n"
+" -e<opiekun> nadpisuje wartość opiekuna z pliku zmian.\n"
+" -u<katalog_upload> katalog z wygenerowanymi plikami (domyślnie \".."
+"\").\n"
+" -si (domyślna) źródła włączają oryg. jeśli nowa wersja autora "
+"progr.\n"
+" -sa źródła włączają oryg. źródła.\n"
+" -sd źródła to tylko diff i .dsc.\n"
+" -q tryb cichy - bez komunikatów inform. na stderr.\n"
+" -F<format_pliku_zmian> wymusza format pliku zmian.\n"
+" -V<nazwa>=<wartość> ustawia zmienną podstawiania.\n"
+" -T<plik-zmiennych> czyta zmienne z tego pliku, a nie z debian/"
+"substvars.\n"
+" -D<pole>=<wartość> nadpisuje lub dodaje pole do .dsc wraz z "
+"wartością.\n"
+" -U<pole> usuwa pole.\n"
+" -?, --help wyświetla ten komunikat pomocy.\n"
+" --version wyświetla wersję.\n"
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "the current version (%s) is earlier than the previous one (%s)"
+msgstr "bieżąca wersja (%s) jest wcześniejsza od poprzedniej (%s)"
+
+#: scripts/dpkg-genchanges.pl
+msgid "missing Section for source files"
+msgstr "brak pola Section plików źródłowych"
+
+#: scripts/dpkg-genchanges.pl
+msgid "missing Priority for source files"
+msgstr "brak pola Priority plików źródłowych"
+
+#: scripts/dpkg-genchanges.pl scripts/Dpkg/Vendor.pm
+#, perl-format
+msgid "%s is empty"
+msgstr "%s jest puste"
+
+#: scripts/dpkg-genchanges.pl
+msgid "not including original source code in upload"
+msgstr "niedołączanie oryginalnych kodów źródłowych do wydania"
+
+#: scripts/dpkg-genchanges.pl
+msgid "ignoring -sd option for native Debian package"
+msgstr "natywny pakiet Debiana - ignorowanie opcji -sd "
+
+#: scripts/dpkg-genchanges.pl
+msgid "including full source code in upload"
+msgstr "dołączanie pełnych kodów źródłowych do wydania"
+
+#: scripts/dpkg-genchanges.pl
+msgid ""
+"binary-only arch-specific upload (source code and arch-indep packages not "
+"included)"
+msgstr ""
+"wydanie tylko binarne zależne dla arch (żródła i pakiety niezależne od arch "
+"niedołączone)"
+
+#: scripts/dpkg-genchanges.pl
+msgid ""
+"binary-only arch-indep upload (source code and arch-specific packages not "
+"included)"
+msgstr ""
+"wydanie tylko binarne niezależne dla arch (żródła i pakiety zależne od arch "
+"niedołączone)"
+
+#: scripts/dpkg-genchanges.pl
+msgid "binary-only upload (no source code included)"
+msgstr "wydanie tylko binarne (bez żadnych źródeł)"
+
+#: scripts/dpkg-genchanges.pl
+msgid "binary build with no binary artifacts found; cannot distribute"
+msgstr ""
+"znaleziono wyd. binarne bez bin. artefaktów - nie można rozpowszechniać"
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "package %s in control file but not in files list"
+msgstr "pakiet %s w pliku kontrolnym, ale nie w liście plików"
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "package %s listed in files list but not in control info"
+msgstr ""
+"pakiet %s wymieniony w liście plików, ale nie w informacjach kontrolnych"
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "missing Section for binary package %s; using '-'"
+msgstr "brak pola Section pakietu binarnego %s - używanie \"-\""
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "package %s has section %s in control file but %s in files list"
+msgstr "pakiet %s ma w pliku kontrolnym sekcję %s , a w liście plików - %s"
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "missing Priority for binary package %s; using '-'"
+msgstr "brak pola Priority pakietu binarnego %s - używanie \"-\""
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "package %s has priority %s in control file but %s in files list"
+msgstr "pakiet %s ma priorytet %s w pliku kontrolnym, ale %s - w liście plików"
+
+#: scripts/dpkg-genchanges.pl scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "missing information for critical output field %s"
+msgstr "brak informacji o krytycznym polu wyjściowym %s"
+
+#: scripts/dpkg-genchanges.pl scripts/dpkg-gencontrol.pl
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "missing information for output field %s"
+msgstr "brak informacji o polu wyjściowym %s"
+
+#: scripts/dpkg-gencontrol.pl
+#, fuzzy
+#| msgid ""
+#| "Options:\n"
+#| " -p<package> print control file for package.\n"
+#| " -c<control-file> get control info from this file.\n"
+#| " -l<changelog-file> get per-version info from this file.\n"
+#| " -F<changelog-format> force changelog format.\n"
+#| " -v<force-version> set version of binary package.\n"
+#| " -f<files-list-file> write files here instead of debian/files.\n"
+#| " -P<package-build-dir> temporary build dir instead of debian/tmp.\n"
+#| " -n<filename> assume the package filename will be "
+#| "<filename>.\n"
+#| " -O[<file>] write to stdout (or <file>), not .../DEBIAN/"
+#| "control.\n"
+#| " -is, -ip, -isp, -ips deprecated, ignored for compatibility.\n"
+#| " -D<field>=<value> override or add a field and value.\n"
+#| " -U<field> remove a field.\n"
+#| " -V<name>=<value> set a substitution variable.\n"
+#| " -T<substvars-file> read variables here, not debian/substvars.\n"
+#| " -?, --help show this help message.\n"
+#| " --version show the version.\n"
+msgid ""
+"Options:\n"
+" -p<package> print control file for package.\n"
+" -c<control-file> get control info from this file.\n"
+" -l<changelog-file> get per-version info from this file.\n"
+" -F<changelog-format> force changelog format.\n"
+" -v<force-version> set version of binary package.\n"
+" -f<files-list-file> write files here instead of debian/files.\n"
+" -P<package-build-dir> temporary build directory instead of debian/tmp.\n"
+" -n<filename> assume the package filename will be <filename>.\n"
+" -O[<file>] write to stdout (or <file>), not .../DEBIAN/"
+"control.\n"
+" -is, -ip, -isp, -ips deprecated, ignored for compatibility.\n"
+" -D<field>=<value> override or add a field and value.\n"
+" -U<field> remove a field.\n"
+" -V<name>=<value> set a substitution variable.\n"
+" -T<substvars-file> read variables here, not debian/substvars.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+"Opcje:\n"
+" -p<pakiet> wyświetla plik kontrolny pakietu.\n"
+" -c<plik_kontrolny> pobiera informacje kontrolne z tego pliku.\n"
+" -l<plik_zmian> pobiera informacje o wersji z tego pliku.\n"
+" -F<format_pliku_zmian> wymusza format pliku zmian.\n"
+" -v<wymuszona-wersja> ustawia wersję pakietu binarnego.\n"
+" -f<plik-z-listą-plików> zapisuje pliki tam zamiast do debian/files.\n"
+" -P<katal-budow-pakietu> tymczasowy katalog budowania zamiast debian/tmp.\n"
+" -n<nazwa-pliku> przyjmuje, że plikiem pakietu będzie "
+"<nazwa_pliku>.\n"
+" -O[<plik>] zapis na stdout (lub do <plik>), zamiast do\n"
+" .../DEBIAN/control.\n"
+" -is, -ip, -isp, -ips przestarzałe, ignorowane dla zachowania\n"
+" kompatybilności.\n"
+" -D<pole>=<wartość> nadpisuje lub dodaje pole do .dsc wraz z "
+"wartością.\n"
+" -U<pole> usuwa pole.\n"
+" -V<nazwa>=<wartość> ustawia zmienną podstawiania.\n"
+" -T<plik_zmiennych> czyta zmienne z tego pliku, a nie z debian/"
+"substvars.\n"
+" -?, --help wyświetla ten komunikat pomocy.\n"
+" --version wyświetla wersję.\n"
+
+#: scripts/dpkg-gencontrol.pl scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "illegal package name '%s': %s"
+msgstr "nieprawidłowa nazwa pakietu \"%s\": %s"
+
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid "package %s not in control info"
+msgstr "brak pakietu %s w pliku kontrolnym"
+
+#: scripts/dpkg-gencontrol.pl scripts/dpkg-gensymbols.pl
+msgid "no package stanza found in control info"
+msgstr "brak wpisu o pakiecie w pliku kontrolnym"
+
+#: scripts/dpkg-gencontrol.pl scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "must specify package since control info has many (%s)"
+msgstr "należy podać pakiet, ponieważ plik kontrolny zawiera ich kilka (%s)"
+
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid "package %s: "
+msgstr "pakiet %s:"
+
+#: scripts/dpkg-gencontrol.pl
+#, fuzzy, perl-format
+#| msgid ""
+#| "current host architecture '%s' does not appear in package's architecture "
+#| "list (%s)"
+msgid ""
+"current host architecture '%s' does not appear in package '%s' architecture "
+"list (%s)"
+msgstr ""
+"bieżąca architektura gościa %s nie jest wymieniona w liście architektur "
+"pakietu (%s)"
+
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid "%s field of package %s: "
+msgstr "pole %s pakietu %s: "
+
+#: scripts/dpkg-gencontrol.pl
+#, fuzzy, perl-format
+#| msgid "source package name '%s' is illegal: %s"
+msgid "parsing package '%s' %s field: %s"
+msgstr "nazwa pakietu źródłowego \"%s\" jest nieprawidłowa: \"%s\""
+
+#: scripts/dpkg-gencontrol.pl
+#, fuzzy, perl-format
+#| msgid ""
+#| "the %s field contains an arch-specific dependency but the package is "
+#| "architecture all"
+msgid ""
+"the %s field contains an arch-specific dependency but the package '%s' is "
+"architecture all"
+msgstr ""
+"pole %s zawiera zależność zależną od architektury, lecz pakiet ma ustawioną "
+"architekturę all"
+
+#: scripts/dpkg-gencontrol.pl
+#, fuzzy, perl-format
+#| msgid "%s package with udeb specific field %s"
+msgid "%s package '%s' with udeb specific field %s"
+msgstr "pakiet %s zawierający pole %s specyficzne dla udeb"
+
+#: scripts/dpkg-gencontrol.pl scripts/Dpkg/Source/Package.pm
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot stat %s"
+msgstr "nie można ustalić stanu %s"
+
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid "cannot install output control file '%s'"
+msgstr "nie można zainstalować wyjściowego pliku kontrolnego \"%s\""
+
+#: scripts/dpkg-gensymbols.pl
+#, fuzzy
+#| msgid ""
+#| "Options:\n"
+#| " -p<package> generate symbols file for package.\n"
+#| " -P<package-build-dir> temporary build dir instead of debian/tmp.\n"
+#| " -e<library> explicitly list libraries to scan.\n"
+#| " -v<version> version of the packages (defaults to\n"
+#| " version extracted from debian/changelog).\n"
+#| " -c<level> compare generated symbols file with the "
+#| "reference\n"
+#| " template in the debian directory and fail if\n"
+#| " difference is too important; level goes from 0 "
+#| "for\n"
+#| " no check, to 4 for all checks (default level "
+#| "is 1).\n"
+#| " -q keep quiet and never emit any warnings or\n"
+#| " generate a diff between generated symbols\n"
+#| " file and the reference template.\n"
+#| " -I<file> force usage of <file> as reference symbols\n"
+#| " file instead of the default file.\n"
+#| " -O[<file>] write to stdout (or <file>), not .../DEBIAN/"
+#| "symbols.\n"
+#| " -t write in template mode (tags are not\n"
+#| " processed and included in output).\n"
+#| " -V verbose output; write deprecated symbols and "
+#| "pattern\n"
+#| " matching symbols as comments (in template mode "
+#| "only).\n"
+#| " -a<arch> assume <arch> as host architecture when "
+#| "processing\n"
+#| " symbol files.\n"
+#| " -d display debug information during work.\n"
+#| " -?, --help show this help message.\n"
+#| " --version show the version.\n"
+msgid ""
+"Options:\n"
+" -l<library-path> add directory to private shared library search "
+"list.\n"
+" -p<package> generate symbols file for package.\n"
+" -P<package-build-dir> temporary build directory instead of debian/tmp.\n"
+" -e<library> explicitly list libraries to scan.\n"
+" -v<version> version of the packages (defaults to\n"
+" version extracted from debian/changelog).\n"
+" -c<level> compare generated symbols file with the "
+"reference\n"
+" template in the debian directory and fail if\n"
+" difference is too important; level goes from 0 "
+"for\n"
+" no check, to 4 for all checks (default level is "
+"1).\n"
+" -q keep quiet and never emit any warnings or\n"
+" generate a diff between generated symbols\n"
+" file and the reference template.\n"
+" -I<file> force usage of <file> as reference symbols\n"
+" file instead of the default file.\n"
+" -O[<file>] write to stdout (or <file>), not .../DEBIAN/"
+"symbols.\n"
+" -t write in template mode (tags are not\n"
+" processed and included in output).\n"
+" -V verbose output; write deprecated symbols and "
+"pattern\n"
+" matching symbols as comments (in template mode "
+"only).\n"
+" -a<arch> assume <arch> as host architecture when "
+"processing\n"
+" symbol files.\n"
+" -d display debug information during work.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+"Opcje:\n"
+" -p<pakiet> generuje plik symboli dla pakietu.\n"
+" -P<kat_budow_pakietu> tymczasowy katalog budow. pakietu zamiast debian/"
+"tmp.\n"
+" -e<biblioteka> bezpośrednio podana lista bibliotek do "
+"skanowania.\n"
+" -v<wersja> wersja pakietów (domyślnie brana\n"
+" wersja wyciągnięta z debian/changelog).\n"
+" -c<poziom> porównuje wygenerowany plik symboli z plikiem\n"
+" reference w katalogu debian. Kończy się błędem,\n"
+" jeśli różnice są zbyt ważne (poziom od 0 -\n"
+" żadnych sprawdzeń do 4 - wszystkie sprawdzenia).\n"
+" Domyślny poziom to 1.\n"
+" -I<plik> wymusza użycie <pliku> jako pliku symboli\n"
+" zamiast używać domyślnego pliku.\n"
+" -O[<plik>] zapis na stdout (lub do <plik>), zamiast do\n"
+" .../DEBIAN/symbols.\n"
+" -t zapisuje w trybie szablonu (tagi nie są\n"
+" przetwarzane i włączone na wyjściu).\n"
+" -V szczegółowe wyjście - wypisuje przestarzałe "
+"symbole\n"
+" i wzorce pasujące do synboli jako komentarze "
+"(tylko\n"
+" w trybie szablonu).\n"
+" -a<arch> zakłada <arch> jako architekturę hosta, podczas\n"
+" przerwarzania pliku symboli.\n"
+" -d podczas pracy wyświetla komunikaty debugowania.\n"
+" -?, --help wyświetla ten komunikat pomocy.\n"
+" --version wyświetla wersję.\n"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "pattern '%s' did not match any file"
+msgstr "wzorzec \"%s\" nie pasuje do żadnego pliku"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "can't read directory %s: %s"
+msgstr "nie można odczytać katalogu %s: %s"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "Dpkg::Shlibs::Objdump couldn't parse %s\n"
+msgstr "Dpkg::Shlibs::Objdump nie może przetworzyć %s\n"
+
+#: scripts/dpkg-gensymbols.pl
+msgid "<standard output>"
+msgstr "<standardowe wyjście>"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "new libraries appeared in the symbols file: %s"
+msgstr "w pliku symboli pojawiły się nowe biblioteki: %s"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "some libraries disappeared in the symbols file: %s"
+msgstr "pewne biblioteki zniknęły z pliku symboli: %s"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "some new symbols appeared in the symbols file: %s"
+msgstr "pewne nowe symbole pojawiły się w pliku symboli: %s"
+
+#: scripts/dpkg-gensymbols.pl
+msgid "see diff output below"
+msgstr "patrz poniższe wyjście różnic"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "some symbols or patterns disappeared in the symbols file: %s"
+msgstr "pewne symbole lub wzorce zniknęły z pliku symboli: %s"
+
+#: scripts/dpkg-gensymbols.pl
+msgid "the generated symbols file is empty"
+msgstr "wygenerowany plik symboli jest pusty"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "%s doesn't match completely %s"
+msgstr "%s całkowicie nie pasuje do %s"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "no debian/symbols file used as basis for generating %s"
+msgstr "do generowania %s nie użyto żadnego pliku debian/symbols"
+
+#: scripts/dpkg-mergechangelogs.pl
+msgid ""
+"This is free software; see the GNU General Public License version 2 or\n"
+"later for copying conditions. There is NO warranty.\n"
+msgstr ""
+"Ten program jest oprogramowaniem wolnym, rozpowszechnianym na warunkach\n"
+"licencji GNU w wersji drugiej lub późniejszej. Brak JAKIEJKOLWIEK "
+"gwarancji.\n"
+
+#: scripts/dpkg-mergechangelogs.pl
+#, fuzzy, perl-format
+#| msgid ""
+#| "Usage: %s [<option>...] <old> <new-a> <new-b> [<out>]\n"
+#| "\n"
+#| "Options:\n"
+#| " -m, --merge-prereleases merge pre-releases together, ignores "
+#| "everything\n"
+#| " after the last '~' in the version.\n"
+#| " -?, --help show this help message.\n"
+#| " --version show the version.\n"
+msgid ""
+"Usage: %s [<option>...] <old> <new-a> <new-b> [<out>]\n"
+"\n"
+"Options:\n"
+" -m, --merge-prereleases merge pre-releases together, ignores everything\n"
+" after the last '~' in the version.\n"
+" --merge-unreleased merge UNRELEASED entries together, ignoring "
+"their\n"
+" version numbers.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+"Użycie: %s [<opcja> ...] <stary> <nowy-a> <nowy-b> [<wyjście>]\n"
+"\n"
+"Opcje:\n"
+" -m, --merge-prereleases łączy przedwydania, ignorując wszystko po\n"
+" ostatnim \"~\" w wersji.\n"
+" -?, --help wyświetla ten komunikat pomocy.\n"
+" --version wyświetla informacje o wersji.\n"
+
+#: scripts/dpkg-mergechangelogs.pl
+msgid "needs at least three arguments"
+msgstr "wymaga co najmniej trzech argumentów"
+
+#: scripts/dpkg-mergechangelogs.pl
+msgid "file arguments need to exist"
+msgstr "argumenty plikowe muszą istnieć"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "Usage: %s [<option>...] <file>...\n"
+msgstr "Użycie: %s [<opcja>...] <plik>...\n"
+
+#: scripts/dpkg-name.pl
+#, fuzzy
+#| msgid ""
+#| "\n"
+#| "Options:\n"
+#| " -a, --no-architecture no architecture part in filename.\n"
+#| " -o, --overwrite overwrite if file exists.\n"
+#| " -k, --symlink don't create a new file, but a symlink.\n"
+#| " -s, --subdir [dir] move file into subdir (use with care).\n"
+#| " -c, --create-dir create target dir if not there (use with "
+#| "care).\n"
+#| " -?, --help show this help message.\n"
+#| " -v, --version show the version.\n"
+#| "\n"
+#| "file.deb changes to <package>_<version>_<architecture>.<package_type>\n"
+#| "according to the 'underscores convention'.\n"
+msgid ""
+"\n"
+"Options:\n"
+" -a, --no-architecture no architecture part in filename.\n"
+" -o, --overwrite overwrite if file exists.\n"
+" -k, --symlink don't create a new file, but a symlink.\n"
+" -s, --subdir [dir] move file into subdirectory (use with care).\n"
+" -c, --create-dir create target directory if not there (use with "
+"care).\n"
+" -?, --help show this help message.\n"
+" -v, --version show the version.\n"
+"\n"
+"file.deb changes to <package>_<version>_<architecture>.<package_type>\n"
+"according to the 'underscores convention'.\n"
+msgstr ""
+"\n"
+"Opcje:\n"
+" -a, --no-architecture bez określenia architektury w nazwie pliku.\n"
+" -o, --overwrite nadpisywanie jeśli plik istnieje.\n"
+" -k, --symlink tworzenie dowiązania zamiast nowego pliku.\n"
+" -s, --subdir [katalog] przeniesienie pliku do podkatalogu (ostrożnie!).\n"
+" -c, --create-dir tworzenie kat.docelowego jeśli brak "
+"(ostrożnie!).\n"
+" -?, --help wyświetla ten komunikat pomocy.\n"
+" -v, --version wyświetla wersję.\n"
+"\n"
+"plik.deb jest zmieniany na <pakiet>_<wersja>_<architektura>.<typ_pakietu>\n"
+"zgodnie z \"regułami podkreślania\".\n"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "cannot find '%s'"
+msgstr "nie można odnaleźć \"%s\""
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "binary control file %s"
+msgstr "binarny plik kontrolny %s"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "assuming architecture '%s' for '%s'"
+msgstr "przyjęcie architektury \"%s\" dla \"%s\""
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "bad package control information for '%s'"
+msgstr "zła informacja kontrolna pakietu dotycząca \"%s\""
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "assuming section '%s' for '%s'"
+msgstr "przyjęcie sekcji \"%s\" dla \"%s\""
+
+#: scripts/dpkg-name.pl
+#, fuzzy, perl-format
+#| msgid "no Package field found in '%s', skipping it"
+msgid "no Package field found in '%s', skipping package"
+msgstr "nie znaleziono pole Package w \"%s\", pomijanie go"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "created directory '%s'"
+msgstr "utworzono katalog \"%s\""
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "cannot create directory '%s'"
+msgstr "nie można utworzyć katalogu \"%s\""
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "no such directory '%s', try --create-dir (-c) option"
+msgstr ""
+"katalog \"%s\" nie istnieje, proszę spróbować użyć opcji --create-dir (-c)"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "skipping '%s'"
+msgstr "pomijanie \"%s\""
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "cannot move '%s' to existing file"
+msgstr "nie można przenieść \"%s\" do istniejącego pliku"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "moved '%s' to '%s'"
+msgstr "przenoszenie \"%s\" do \"%s\""
+
+#: scripts/dpkg-name.pl
+msgid "mkdir can be used to create directory"
+msgstr "do utworzenia katalogu można użyć mkdir"
+
+#: scripts/dpkg-name.pl
+msgid "need at least a filename"
+msgstr "wymaga co najmniej jednego argumentu będącego nazwą pliku"
+
+#: scripts/dpkg-parsechangelog.pl
+#, fuzzy
+#| msgid ""
+#| "Options:\n"
+#| " -l<changelog-file> get per-version info from this file.\n"
+#| " -F<changelog-format> force changelog format.\n"
+#| " -L<libdir> look for changelog parsers in <libdir>.\n"
+#| " -S, --show-field <field> show the values for <field>.\n"
+#| " -?, --help show this help message.\n"
+#| " --version show the version."
+msgid ""
+"Options:\n"
+" -l, --file <changelog-file>\n"
+" get per-version info from this file.\n"
+" -F <changelog-format> force changelog format.\n"
+" -S, --show-field <field> show the values for <field>.\n"
+" -?, --help show this help message.\n"
+" --version show the version."
+msgstr ""
+"Opcje:\n"
+" -l<plik_dziennika_zmian> otrzymanie informacji wg wersji z podanego "
+"pliku.\n"
+" -F<format_dzienn_zmian> wymusza format dziennika zmian.\n"
+" -L<katalog_bibl> szuka parserów dziennika zmian w "
+"<katalogu_bibl>.\n"
+" -S, --show-field <pole> pokaż wartości dla <pola>.\n"
+" -?, --help wyświetla ten komunikat pomocy.\n"
+" --version wyświetla wersję."
+
+#: scripts/dpkg-parsechangelog.pl
+#, fuzzy
+#| msgid ""
+#| "Parser options:\n"
+#| " --format <output-format> see man page for list of available\n"
+#| " output formats, defaults to 'dpkg'\n"
+#| " for compatibility with dpkg-dev\n"
+#| " --since <version>, include all changes later than version\n"
+#| " -s<version>, -v<version>\n"
+#| " --until <version>, include all changes earlier than version\n"
+#| " -u<version>\n"
+#| " --from <version>, include all changes equal or later\n"
+#| " -f<version> than version\n"
+#| " --to <version>, -t<version> include all changes up to or equal\n"
+#| " than version\n"
+#| " --count <number>, include <number> entries from the top\n"
+#| " -c<number>, -n<number> (or the tail if <number> is lower than "
+#| "0)\n"
+#| " --offset <number>, change the starting point for --count,\n"
+#| " -o<number> counted from the top (or the tail if\n"
+#| " <number> is lower than 0)\n"
+#| " --all include all changes\n"
+msgid ""
+"Parser options:\n"
+" --format <output-format>\n"
+" set output format (defaults to 'dpkg').\n"
+" --reverse include all changes in reverse order.\n"
+" --all include all changes.\n"
+" -s, --since <version> include all changes later than <version>.\n"
+" -v <version> ditto.\n"
+" -u, --until <version> include all changes earlier than <version>.\n"
+" -f, --from <version> include all changes equal or later than "
+"<version>.\n"
+" -t, --to <version> include all changes up to or equal than "
+"<version>.\n"
+" -c, --count <number> include <number> entries from the top (or tail\n"
+" if <number> is lower than 0).\n"
+" -n <number> ditto.\n"
+" -o, --offset <number> change starting point for --count, counted from\n"
+" the top (or tail if <number> is lower than 0).\n"
+msgstr ""
+"Opcje parsera:\n"
+" --format <format_wyjścia> listę formatów wyjściowych można znaleźć na\n"
+" stronie podręcznika, domyślnym jest "
+"\"dpkg\"\n"
+" dla zachowania kompatybilności z dpkg-dev\n"
+" --since <wersja>, włącza wszystkie zmiany późniejsze od "
+"wersji\n"
+" -s<wersja>, -v<wersja>\n"
+" --until <wersja>, włącza wszystkie zmiany wcześniejsze od "
+"wersji\n"
+" -u<wersja>\n"
+" --from <wersja>, włącza wszystkie zmiany późniejsze od "
+"wersji\n"
+" -f<wersja> lub jej równe\n"
+" --to <wersja>, -t<wersja> włącza wszystkie zmiany aż do danej wersji,\n"
+" łącznie z tą wersją\n"
+" --count <liczba>, włącza <liczba> początkowych wpisów (lub\n"
+" -c<liczba>, -n<liczba> końcowych, gdy <liczba> jest mniejsza od 0)\n"
+" --offset <liczba>, zmienia punkt początkowy dla --count,\n"
+" -o<liczba> licząc od początku pliku (lub końca,\n"
+" gdy <liczba> jest mniejsza od 0)\n"
+" --all włącza wszystkie zmiany\n"
+
+#: scripts/dpkg-parsechangelog.pl
+#, fuzzy
+#| msgid "-i%s is deprecated; it is without effect"
+msgid "-L is obsolete; it is without effect"
+msgstr "-i%s jest przestarzałe - nie ma żadnego efektu"
+
+#: scripts/dpkg-parsechangelog.pl
+#, fuzzy
+#| msgid "changelog format %s is unknown"
+msgid "bad changelog format name"
+msgstr "nieznany format %s pliku zmian"
+
+#: scripts/dpkg-parsechangelog.pl
+#, fuzzy
+#| msgid "no changelog file specified"
+msgid "missing changelog filename"
+msgstr "nie podano żadnego pliku zmian"
+
+#: scripts/dpkg-parsechangelog.pl
+msgid "takes no non-option arguments"
+msgstr "wymaga niepodawania argumentu niebędącego opcją"
+
+#: scripts/dpkg-scanpackages.pl
+#, fuzzy, perl-format
+#| msgid ""
+#| "Usage: %s [<option>...] <binary-path> [<override-file> [<path-prefix>]] > "
+#| "Packages\n"
+#| "\n"
+#| "Options:\n"
+#| " -t, --type <type> scan for <type> packages (default is 'deb').\n"
+#| " -a, --arch <arch> architecture to scan for.\n"
+#| " -h, --hash <hash-list> only generate hashes for the specified list.\n"
+#| " -m, --multiversion allow multiple versions of a single package.\n"
+#| " -e, --extra-override <file>\n"
+#| " use extra override file.\n"
+#| " -M, --medium <medium> add X-Medium field for dselect multicd access "
+#| "method\n"
+#| " -?, --help show this help message.\n"
+#| " --version show the version.\n"
+msgid ""
+"Usage: %s [<option>...] <binary-path> [<override-file> [<path-prefix>]] > "
+"Packages\n"
+"\n"
+"Options:\n"
+" -t, --type <type> scan for <type> packages (default is 'deb').\n"
+" -a, --arch <arch> architecture to scan for.\n"
+" -h, --hash <hash-list> only generate hashes for the specified list.\n"
+" -m, --multiversion allow multiple versions of a single package.\n"
+" -e, --extra-override <file>\n"
+" use extra override file.\n"
+" -M, --medium <medium> add X-Medium field for dselect media access "
+"method\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+"Użycie: %s [<opcja> ...] <ścieżka_binariów> [<plik_nadpisań> "
+"[<prefiks_ścieżki>]] > Packages\n"
+"\n"
+"Opcje:\n"
+" -t, --type <typ> skanuje pakiety o <typie> (domyślnie \"deb\").\n"
+" -a, --arch <arch> architektura, która będzie skanowana.\n"
+" -h, --hash <lista-skrótów> generuje tylko skróty z listy.\n"
+" -m, --multiversion dopuszcza wiele wersji pojedynczego pakietu.\n"
+" -e, --extra-override <plik>\n"
+" używa dodatkowego pliku nadpisań.\n"
+" -M, --medium <medium> dodaje pole X-Medium do metody dostępu multicd "
+"dselect.\n"
+" -?, --help wyświetla ten komunikat pomocy.\n"
+" --version wyświetla wersję.\n"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid " %s (package says %s, not %s)"
+msgstr " %s (pakiet zawiera %s, nie %s)"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "unconditional maintainer override for %s"
+msgstr "bezwarunkowe nadpisanie opiekuna dla %s"
+
+#: scripts/dpkg-scanpackages.pl scripts/dpkg-shlibdeps.pl scripts/Dpkg/IPC.pm
+#: scripts/Dpkg/Shlibs/Objdump.pm
+#, perl-format
+msgid "cannot fork for %s"
+msgstr "nie można wykonać funkcji fork dla %s"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "couldn't parse control information from %s"
+msgstr "nie można przetworzyć informacji kontrolnej z %s"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "'dpkg-deb -I %s control' exited with %d, skipping package"
+msgstr ""
+"\"dpkg-deb -I %s control\" zakończył działanie z kodem %d, pomijanie pakietu"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "no Package field in control file of %s"
+msgstr "brak pola Package w pliku kontrolnym %s"
+
+#: scripts/dpkg-scanpackages.pl
+#, fuzzy, perl-format
+#| msgid "package %s (filename %s) is repeat but newer version;"
+msgid ""
+"package %s (filename %s) is repeat but newer version; used that one and "
+"ignored data from %s!"
+msgstr "pakiet %s (plik %s) jest powtórzony, ale w nowszej wersji;"
+
+#: scripts/dpkg-scanpackages.pl
+#, fuzzy, perl-format
+#| msgid "ignored that one and using data from %s!"
+msgid ""
+"package %s (filename %s) is repeat; ignored that one and using data from %s!"
+msgstr "zignorowanie tej wersji i użycie danych z %s!"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "package %s (filename %s) has Filename field!"
+msgstr "pakiet %s (plik %s) zawiera pole Filename!"
+
+#: scripts/dpkg-scanpackages.pl scripts/dpkg-scansources.pl
+msgid "one to three arguments expected"
+msgstr "oczekiwano od 1 do 3 argumentów"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "unsupported checksum '%s'"
+msgstr "niewspierana suma kontrolna \"%s\""
+
+#: scripts/dpkg-scanpackages.pl
+#, fuzzy, perl-format
+#| msgid "binary dir %s not found"
+msgid "binary path %s not found"
+msgstr "nie znaleziono katalogu binarnego %s"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "override file %s not found"
+msgstr "nie znaleziono pliku nadpisań %s"
+
+#: scripts/dpkg-scanpackages.pl
+msgid "failed when writing stdout"
+msgstr "błąd podczas wypisywania na standardowe wyjście"
+
+#: scripts/dpkg-scanpackages.pl
+msgid "couldn't close stdout"
+msgstr "nie można zamknąć stdout"
+
+#: scripts/dpkg-scanpackages.pl
+msgid "Packages with multiple instances but no --multiversion specified:"
+msgstr ""
+
+#: scripts/dpkg-scanpackages.pl
+msgid "Packages in override file with incorrect old maintainer value:"
+msgstr ""
+"Pakiety w pliku nadpisań z niepoprawną wartością poprzedniego opiekuna:"
+
+#: scripts/dpkg-scanpackages.pl
+msgid "Packages specifying same maintainer as override file:"
+msgstr "Pakiety mające tego samego opiekuna, jak wymieniony w pliku nadpisań:"
+
+#: scripts/dpkg-scanpackages.pl
+msgid "Packages in archive but missing from override file:"
+msgstr "Pakiety w archiwum, których brakuje w pliku nadpisań:"
+
+#: scripts/dpkg-scanpackages.pl
+msgid "Packages in override file but not in archive:"
+msgstr "Pakiety w pliku nadpisań, ale nie w archiwum:"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "Wrote %s entries to output Packages file."
+msgstr "Zapisano %s wpisów do wyjściowego pliku Packages."
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid ""
+"Usage: %s [<option>...] <binary-path> [<override-file> [<path-prefix>]] > "
+"Sources\n"
+"\n"
+"Options:\n"
+" -n, --no-sort don't sort by package before outputting.\n"
+" -e, --extra-override <file>\n"
+" use extra override file.\n"
+" -s, --source-override <file>\n"
+" use file for additional source overrides, "
+"default\n"
+" is regular override file with .src appended.\n"
+" --debug turn debugging on.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+"\n"
+"See the man page for the full documentation.\n"
+msgstr ""
+"Użycie: %s [<opcja> ...] <ścieżka_binariów> [<plik_nadpisań> "
+"[<prefiks_ścieżki>]] > Sources\n"
+"\n"
+"Opcje:\n"
+" -n, --no-sort nie sortuje wyjścia po nazwach pakietów.\n"
+" -e, --extra-override <plik>\n"
+" używa dodatkowego pliku nadpisań.\n"
+" -s, --source-override <plik>\n"
+" używa pliku jako dodatkowych nadpisań źródeł, "
+"domyślnie\n"
+" jest to zwykły plik nadpisań z dołączonym "
+"sufiksem .src \n"
+" --debug włącza debugowanie.\n"
+" -?, --help wyświetla ten komunikat pomocy.\n"
+" --version wyświetla wersję.\n"
+"\n"
+"Pełną dokumentację można znaleźć na stronach podręcznika systemowego.\n"
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid "invalid override entry at line %d (%d fields)"
+msgstr "niepoprawny wpis pliku nadpisań w linii %d (%d pól)"
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid "ignoring duplicate override entry for %s at line %d"
+msgstr "ignorowanie zduplikowanego wpisu nadpisań dla %s w linii %d"
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid "ignoring override entry for %s, invalid priority %s"
+msgstr "ignorowanie wpisu nadpisania dla %s, niepoprawny priorytet %s"
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid "invalid source override entry at line %d (%d fields)"
+msgstr "niepoprawny wpis dotyczący nadpisania źródeł w linii %d (%d pól)"
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid "ignoring duplicate source override entry for %s at line %d"
+msgstr ""
+"ignorowanie zduplikowanego wpisu dotyczącego nadpisania źródeł dla %s w "
+"linii %d"
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid "no binary packages specified in %s"
+msgstr "nie podano żadnych pakietów binarnych w %s"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "administrative directory '%s' does not exist"
+msgstr "katalog administracyjny \"%s\" nie istnieje"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "unrecognized dependency field '%s'"
+msgstr "nierozpoznane pole zależności \"%s\""
+
+#: scripts/dpkg-shlibdeps.pl
+msgid "need at least one executable"
+msgstr "wymaga co najmniej jednego argumentu będącego plikiem wykonywalnym"
+
+#: scripts/dpkg-shlibdeps.pl
+#, fuzzy, perl-format
+#| msgid ""
+#| "couldn't find library %s needed by %s (ELF format: '%s'; RPATH: '%s')"
+msgid ""
+"cannot find library %s needed by %s (ELF format: '%s' abi: '%s'; RPATH: '%s')"
+msgstr ""
+"nie można znaleźć biblioteki %s wymaganej przez %s (format ELF: \"%s\"; "
+"RPATH: \"%s\")"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "%s has an unexpected SONAME (%s)"
+msgstr "%s ma nieoczekiwane SONAME (%s)"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid ""
+"no dependency information found for %s (used by %s)\n"
+"Hint: check if the library actually comes from a package."
+msgstr ""
+"nie znaleziono informacji o zależnościach dla %s (używanego przez %s)\n"
+"Wskazówka: sprawdź, czy biblioteka rzeczywiście pochodzi z pakietu."
+
+#: scripts/dpkg-shlibdeps.pl
+msgid ""
+"binaries to analyze should already be installed in their package's directory"
+msgstr ""
+"pliki binarne do analizy powinny już być zainstalowane w katalogu ich pakietu"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "symbol %s used by %s found in none of the libraries"
+msgstr "w żadnej z bibliotek nie znaleziono symbolu %s używanego przez %s"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid ""
+"%s contains an unresolvable reference to symbol %s: it's probably a plugin"
+msgstr ""
+"%s zawiera nierozwiązywalne odniesienia do symbolu %s: prawdopodobnie jest "
+"to wtyczka"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "%d similar warning has been skipped (use -v to see it)"
+msgid_plural ""
+"%d other similar warnings have been skipped (use -v to see them all)"
+msgstr[0] "pominięto %d podobne ostrzeżenie (proszę użyć -v, aby je zobaczyć)."
+msgstr[1] ""
+"pominięto %d podobne ostrzeżenia (proszę użyć -v, aby zobaczyć je wszystkie)."
+msgstr[2] ""
+"pominięto %d podobnych ostrzeżeń (proszę użyć -v, aby zobaczyć je wszystkie)."
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid ""
+"%s should not be linked against %s (it uses none of the library's symbols)"
+msgstr ""
+"%s nie powinien być linkowany z %s (nie są używane żadne z tamtejszych "
+"symboli)"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid ""
+"package could avoid a useless dependency if %s was not linked against %s (it "
+"uses none of the library's symbols)"
+msgid_plural ""
+"package could avoid a useless dependency if %s were not linked against %s "
+"(they use none of the library's symbols)"
+msgstr[0] ""
+"można by uniknąć niepotrzebnych zależności, jeśli %s nie zostałoby "
+"zlinkowane wobec %s (nie używa ono żadnego z symboli biblioteki)"
+msgstr[1] ""
+"można by uniknąć niepotrzebnych zależności, jeśli %s nie zostałyby "
+"zlinkowane wobec %s (nie używają one żadnego z symboli biblioteki)"
+msgstr[2] ""
+"można by uniknąć niepotrzebnych zależności, jeśli %s nie zostałyby "
+"zlinkowane wobec %s (nie używają one żadnego z symboli biblioteki)"
+
+#: scripts/dpkg-shlibdeps.pl
+msgid ""
+"Note: libraries are not searched in other binary packages that do not have "
+"any shlibs or symbols file.\n"
+"To help dpkg-shlibdeps find private libraries, you might need to use -l."
+msgstr ""
+"Uwaga: bibliotek nie szuka się w innych pakietach binarnych, które nie mają "
+"żadnego pliku shlibs lub symbols.\n"
+"Aby pomóc dpkg-shlibdeps w znajdowaniu prywatnych bibliotek, być może należy "
+"użyć -l."
+
+#: scripts/dpkg-shlibdeps.pl
+msgid "cannot continue due to the error above"
+msgid_plural "cannot continue due to the errors listed above"
+msgstr[0] "nie można kontynuować z powodu powyższego błędu"
+msgstr[1] "nie można kontynuować z powodu powyższych błędów"
+msgstr[2] "nie można kontynuować z powodu powyższych błędów"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "invalid dependency got generated: %s"
+msgstr "wygenerowano niepoprawną zależność: %s"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "install new varlist file '%s'"
+msgstr "instalowanie nowego pliku z listą zmiennych \"%s\""
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "Usage: %s [<option>...] <executable>|-e<executable> [<option>...]"
+msgstr "Użycie: %s [<opcja>...] <plik_wykonyw>|-e<plik_wykonyw> [<opcja>...]"
+
+#: scripts/dpkg-shlibdeps.pl
+msgid ""
+"Positional options (order is significant):\n"
+" <executable> include dependencies for <executable>,\n"
+" -e<executable> (use -e if <executable> starts with '-')\n"
+" -d<dependency-field> next executable(s) set shlibs:<dependency-field>."
+msgstr ""
+"Opcja pozycyjne (kolejność jest istotna):\n"
+" <plik_wykonywalny> uwzględnia zależności <pliku_wykonywalnego>,\n"
+" -e<plik_wykonywalny> (można użyć, jeśli <plik_wykonywalny> zaczyna się "
+"\"-\")\n"
+" -d<pole_zależności> następny plik(i) wykonywalny ustawia shlibs:"
+"<pole_zależn>."
+
+#: scripts/dpkg-shlibdeps.pl
+#, fuzzy
+#| msgid ""
+#| "Options:\n"
+#| " -l<library-dir> add directory to private shared library search "
+#| "list.\n"
+#| " -p<varname-prefix> set <varname-prefix>:* instead of shlibs:*.\n"
+#| " -O[<file>] write variable settings to stdout (or "
+#| "<file>).\n"
+#| " -L<local-shlibs-file> shlibs override file, not debian/shlibs."
+#| "local.\n"
+#| " -T<substvars-file> update variables here, not debian/substvars.\n"
+#| " -t<type> set package type (default is deb).\n"
+#| " -x<package> exclude package from the generated "
+#| "dependencies.\n"
+#| " -S<package-build-dir> search needed libraries in the given\n"
+#| " package build directory first.\n"
+#| " -v enable verbose mode (can be used multiple "
+#| "times).\n"
+#| " --ignore-missing-info don't fail if dependency information can't be "
+#| "found.\n"
+#| " --warnings=<value> define set of active warnings (see manual "
+#| "page).\n"
+#| " --admindir=<directory> change the administrative directory.\n"
+#| " -?, --help show this help message.\n"
+#| " --version show the version."
+msgid ""
+"Options:\n"
+" -l<library-dir> add directory to private shared library search "
+"list.\n"
+" -p<varname-prefix> set <varname-prefix>:* instead of shlibs:*.\n"
+" -O[<file>] write variable settings to stdout (or <file>).\n"
+" -L<local-shlibs-file> shlibs override file, not debian/shlibs.local.\n"
+" -T<substvars-file> update variables here, not debian/substvars.\n"
+" -t<type> set package type (default is deb).\n"
+" -x<package> exclude package from the generated dependencies.\n"
+" -S<package-build-dir> search needed libraries in the given\n"
+" package build directory first.\n"
+" -I<package-build-dir> ignore needed libraries, shlibs and symbols "
+"files\n"
+" in the given build directory.\n"
+" -v enable verbose mode (can be used multiple "
+"times).\n"
+" --ignore-missing-info don't fail if dependency information can't be "
+"found.\n"
+" --warnings=<value> define set of active warnings (see manual page).\n"
+" --admindir=<directory> change the administrative directory.\n"
+" -?, --help show this help message.\n"
+" --version show the version."
+msgstr ""
+"Opcje:\n"
+" -l<kat-bibliotek> dodaje kat. do listy szukania współdzielonych "
+"bibl.\n"
+" -p<nazwa-prefiksu> ustawia <nazwa-prefiksu>:* zamiast shlibs:*.\n"
+" -O[<plik>] wyświetla wartości zmiennych na stdout (lub w "
+"<pliku>).\n"
+" -L<plik_localshlibs> plik nadpisań shlibs, zamiast debian/shlibs.local.\n"
+" -T<plik_varlist> plik do zaktualizowania, zamiast debian/substvars.\n"
+" -t<typ> ustawia typ pakietu (domyślnie: deb).\n"
+" -x<pakiet> wyłącza pakiet z generowanych zależności.\n"
+" -S<kat_bud_pakietu> najpierw szuka potrzebnych bibliotek w podanym\n"
+" katalogu budowania pakietu.\n"
+" -v dodatkowe informacje (może być użyte wiele razy).\n"
+" --ignore-missing-info kontynuacja pomimo braku informacji o "
+"zależnościach.\n"
+" --warnings=<wartość> definiuje zbiór aktywnych ostrzeżeń (patrz "
+"manual).\n"
+" --admindir=<katalog> zmienia katalog administracyjny.\n"
+" -?, --help wyświetla ten komunikat pomocy.\n"
+" --version wyświetla wersję."
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid ""
+"Dependency fields recognized are:\n"
+" %s\n"
+msgstr ""
+"Rozpoznane pola zależności:\n"
+" %s\n"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "can't extract name and version from library name '%s'"
+msgstr "nie można wydobyć nazwy i wersji z nazwy pliku biblioteki \"%s\""
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "unable to open shared libs info file '%s'"
+msgstr ""
+"nie można otworzyć pliku informacji o bibliotekach współdzielonych \"%s\""
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "shared libs info file '%s' line %d: bad line '%s'"
+msgstr "plik bibliotek współdzielonych %s, linia %d: niepoprawna linia \"%s\""
+
+#: scripts/dpkg-shlibdeps.pl scripts/Dpkg/Changelog/Parse.pm
+#: scripts/Dpkg/Checksums.pm
+#, perl-format
+msgid "cannot open file %s"
+msgstr "nie można otworzyć pliku %s"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid ""
+"$ORIGIN is used in RPATH of %s and the corresponding directory could not be "
+"identified due to lack of DEBIAN sub-directory in the root of package's "
+"build tree"
+msgstr ""
+"$ORIGIN jest użyte RPATH pliku %s, ale nie można znaleźć odpowiadającego mu "
+"katalogu z powodu braku podkatalogu DEBIAN w głównym katalogu budowania "
+"pakietu"
+
+#: scripts/dpkg-shlibdeps.pl
+msgid "diversions involved - output may be incorrect"
+msgstr "nadpisania użyte - wyjście może być niepoprawne"
+
+#: scripts/dpkg-shlibdeps.pl
+msgid "write diversion info to stderr"
+msgstr "wypisywanie informacji o ominięciach na stderr"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "unknown output from dpkg --search: '%s'"
+msgstr "nierozpoznane wyjście z dpkg --search: \"%s\""
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "--%s needs a directory"
+msgstr "--%s wymaga podania katalogu"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "cannot stat directory %s"
+msgstr "nie można ustalić stanu katalogu %s"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "directory argument %s is not a directory"
+msgstr "argument %s nie jest katalogiem"
+
+#: scripts/dpkg-source.pl scripts/Dpkg/Source/BinaryFiles.pm
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "unable to chdir to '%s'"
+msgstr "nie można zmienić katalogu na \"%s\""
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "using options from %s: %s"
+msgstr "użycie opcji z %s: %s"
+
+#: scripts/dpkg-source.pl scripts/Dpkg/Compression.pm
+#, perl-format
+msgid "%s is not a supported compression"
+msgstr "%s nie jest obsługiwanym typem kompresji"
+
+#: scripts/dpkg-source.pl scripts/Dpkg/Compression.pm
+#, perl-format
+msgid "%s is not a compression level"
+msgstr " %s nie jest poziomem kompresji"
+
+#: scripts/dpkg-source.pl
+msgid "-E and -W are deprecated, they are without effect"
+msgstr "-E i -W są przestarzałe, nie mają żadnego efektu"
+
+#: scripts/dpkg-source.pl scripts/dpkg-vendor.pl
+msgid "need an action option"
+msgstr "potrzebna opcja akcji"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "no source format specified in %s, see dpkg-source(1)"
+msgstr "w %s nie podano formatu źródeł, patrz dpkg-source(1)"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "%s doesn't contain any information about the source package"
+msgstr "%s nie zawiera żadnej informacji o pakiecie źródłowym"
+
+#: scripts/dpkg-source.pl
+#, fuzzy, perl-format
+#| msgid "'%s' is not a legal architecture string"
+msgid "'%s' is not a legal architecture string in package '%s'"
+msgstr "\"%s\" nie jest poprawną specyfikacją architektury"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "architecture %s only allowed on its own (list for package %s is '%s')"
+msgstr ""
+"architektura %s dopuszczalna tylko sama (listą dla pakietu %s jest \"%s\")"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "%s doesn't list any binary package"
+msgstr "%s nie zawiera wpisu o żadnym pakiecie binarnym."
+
+#: scripts/dpkg-source.pl
+msgid "building source for a binary-only release"
+msgstr "budowanie źródeł do wydania wyłącznie binarnego"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "can't build with source format '%s': %s"
+msgstr "nie można zbudować z formatem źródeł \"%s\": %s"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "using source format '%s'"
+msgstr "używania formatu źródeł \"%s\""
+
+#: scripts/dpkg-source.pl scripts/Dpkg/Source/Package/V1.pm
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Package/V3/Bzr.pm
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+#, perl-format
+msgid "building %s in %s"
+msgstr "budowanie %s w %s"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "--%s needs at least one argument, the .dsc"
+msgstr "--%s wymaga co najmniej jednego argumentu, .dsc"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "--%s takes no more than two arguments"
+msgstr "--%s pobiera nie więcej niż dwa argumenty"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "--%s needs the .dsc file as first argument, not a directory"
+msgstr "--%s wymaga pliku .dsc, a nie katalogu, jako pierwszego argumentu"
+
+#: scripts/dpkg-source.pl scripts/Dpkg/Source/Package/V1.pm
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Package/V3/Bzr.pm
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+#, perl-format
+msgid "unpack target exists: %s"
+msgstr "cel rozpakowania istnieje: %s"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "%s doesn't contain a valid OpenPGP signature"
+msgstr "%s nie zawiera ważnego podpisu OpenPGP"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "extracting unsigned source package (%s)"
+msgstr "wydobywanie niepodpisanych pakietów źródłowych (%s)"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "extracting %s in %s"
+msgstr "rozpakowywanie %s w %s"
+
+#: scripts/dpkg-source.pl
+#, fuzzy, perl-format
+#| msgid "%s is not a plain file"
+msgid "test control %s is not a regular file"
+msgstr " %s nie jest zwykłym plikiem"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "%s field contains value %s, but no tests control file %s"
+msgstr "pole %s zawiera wartość %s, ale nie zawiera plików kontroli testów %s"
+
+#: scripts/dpkg-source.pl
+#, fuzzy, perl-format
+#| msgid "%s is not a plain file"
+msgid "test control %s is missing %s or %s field"
+msgstr " %s nie jest zwykłym plikiem"
+
+#: scripts/dpkg-source.pl
+msgctxt "source options"
+msgid "<none>"
+msgstr ""
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "Usage: %s [<option>...] <command>"
+msgstr "Użycie: %s [<opcja>...] <polecenie>"
+
+#: scripts/dpkg-source.pl
+#, fuzzy
+#| msgid ""
+#| "Commands:\n"
+#| " -x, --extract <filename>.dsc [<output-dir>]\n"
+#| " extract source package.\n"
+#| " -b, --build <dir> build source package.\n"
+#| " --print-format <dir> print the format to be used for the source "
+#| "package.\n"
+#| " --commit [<dir> [<patch-name>]]\n"
+#| " store upstream changes in a new patch."
+msgid ""
+"Commands:\n"
+" -x, --extract <filename>.dsc [<output-dir>]\n"
+" extract source package.\n"
+" -b, --build <dir> build source package.\n"
+" --print-format <dir> print the format to be used for the source "
+"package.\n"
+" --before-build <dir> run the corresponding source package format "
+"hook.\n"
+" --after-build <dir> run the corresponding source package format "
+"hook.\n"
+" --commit [<dir> [<patch-name>]]\n"
+" store upstream changes in a new patch."
+msgstr ""
+"Polecenia:\n"
+" -x, --extract <nazwa_pliku>.dsc [<kat_wyjściowy>]\n"
+" wypakowuje pakiet źródłowy.\n"
+" -b, --build <katalog> buduje pakiet źródłowy.\n"
+" --print-format <katalog>\n"
+" wypisuje format, który zostanie użyty\n"
+" dla pakietu źródłowego.\n"
+" --commit [<katalog> [<nazwa_łatki>]]\n"
+" przechowuje zmiany z projektu macierzystego\n"
+" jako nową łatkę."
+
+#: scripts/dpkg-source.pl
+#, fuzzy, perl-format
+#| msgid ""
+#| "Build options:\n"
+#| " -c<control-file> get control info from this file.\n"
+#| " -l<changelog-file> get per-version info from this file.\n"
+#| " -F<changelog-format> force changelog format.\n"
+#| " --format=<source-format> set the format to be used for the source "
+#| "package.\n"
+#| " -V<name>=<value> set a substitution variable.\n"
+#| " -T<substvars-file> read variables here.\n"
+#| " -D<field>=<value> override or add a .dsc field and value.\n"
+#| " -U<field> remove a field.\n"
+#| " -q quiet mode.\n"
+#| " -i[<regex>] filter out files to ignore diffs of\n"
+#| " (defaults to: '%s').\n"
+#| " -I[<pattern>] filter out files when building tarballs\n"
+#| " (defaults to: %s).\n"
+#| " -Z<compression> select compression to use (defaults to '%s',\n"
+#| " supported are: %s).\n"
+#| " -z<level> compression level to use (defaults to '%d',\n"
+#| " supported are: '1'-'9', 'best', 'fast')"
+msgid ""
+"Build options:\n"
+" -c<control-file> get control info from this file.\n"
+" -l<changelog-file> get per-version info from this file.\n"
+" -F<changelog-format> force changelog format.\n"
+" --format=<source-format> set the format to be used for the source "
+"package.\n"
+" -V<name>=<value> set a substitution variable.\n"
+" -T<substvars-file> read variables here.\n"
+" -D<field>=<value> override or add a .dsc field and value.\n"
+" -U<field> remove a field.\n"
+" -i, --diff-ignore[=<regex>]\n"
+" filter out files to ignore diffs of\n"
+" (defaults to: '%s').\n"
+" -I, --tar-ignore[=<pattern>]\n"
+" filter out files when building tarballs\n"
+" (defaults to: %s).\n"
+" -Z, --compression=<compression>\n"
+" select compression to use (defaults to '%s',\n"
+" supported are: %s).\n"
+" -z, --compression-level=<level>\n"
+" compression level to use (defaults to '%d',\n"
+" supported are: '1'-'9', 'best', 'fast')"
+msgstr ""
+"Opcje budowania:\n"
+" -c<plik_kontrolny> pobiera informacje kontrolne z tego pliku.\n"
+" -l<plik_zmian> pobiera informacje dot. wersji z tego pliku.\n"
+" -F<format_pliku_zmian> wymusza format pliku zmian.\n"
+" --format=<source_format> set the format to be used for the source "
+"package.\n"
+" -V<nazwa>=<wartość> ustawia zmienną podstawiania.\n"
+" -T<plik-zmiennych> czyta zmienne z tego pliku.\n"
+" -D<pole>=<wartość> nadpisuje lub dodaje pole do .dsc wraz z "
+"wartością.\n"
+" -U<pole> usuwa pole.\n"
+" -q tryb cichy, pomija wypisywanie ostrzeżeń.\n"
+" -i[<wyraż_reg>] pomijanie plików podczas tworzenia pliku różnic\n"
+" (domyślnie: \"%s\").\n"
+" -I<wzorzec> pomijanie plików podczas tworzenia archiwum tar.\n"
+" (domyślnie: %s)\n"
+" -Z<kompresja> wybór używanej kompresji (domyślnie \"%s\",\n"
+" obsługiwane: %s).\n"
+" -z<poziom> używany poziom kompresji (domyślnie \"%d\",\n"
+" obsługiwane: \"1\"-\"9\", \"best\", \"fast\")"
+
+#: scripts/dpkg-source.pl
+#, fuzzy
+#| msgid ""
+#| "Extract options:\n"
+#| " --no-copy don't copy .orig tarballs\n"
+#| " --no-check don't check signature and checksums before "
+#| "unpacking\n"
+#| " --require-valid-signature abort if the package doesn't have a valid "
+#| "signature\n"
+#| " --ignore-bad-version allow bad source package versions."
+msgid ""
+"Extract options:\n"
+" --no-copy don't copy .orig tarballs\n"
+" --no-check don't check signature and checksums before "
+"unpacking\n"
+" --no-overwrite-dir do not overwrite directory on extraction\n"
+" --require-valid-signature abort if the package doesn't have a valid "
+"signature\n"
+" --require-strong-checksums\n"
+" abort if the package contains no strong "
+"checksums\n"
+" --ignore-bad-version allow bad source package versions."
+msgstr ""
+"Opcje wypakowywania:\n"
+" --no-copy nie kopiuje archiwów .orig\n"
+" --no-check nie sprawdza podpisu i sum kontrolnych przed "
+"wypakowaniem\n"
+" --require-valid-signature przerywa, jeśli pakiet nie posiada prawidłowego "
+"podpisu --ignore-bad-version pozwól na złą wersję pakietu źródłowego."
+
+#: scripts/dpkg-source.pl
+#, fuzzy
+#| msgid ""
+#| "General options:\n"
+#| " -?, --help show this help message.\n"
+#| " --version show the version."
+msgid ""
+"General options:\n"
+" --threads-max=<threads>\n"
+" use at most <threads> with compressor.\n"
+" -q quiet mode.\n"
+" -?, --help show this help message.\n"
+" --version show the version."
+msgstr ""
+"Opcje ogólne:\n"
+" -?, --help wyświetla ten komunikat pomocy.\n"
+" --version wyświetla wersję."
+
+#: scripts/dpkg-source.pl
+msgid ""
+"Source format specific build and extract options are available;\n"
+"use --format with --help to see them."
+msgstr ""
+
+#: scripts/dpkg-vendor.pl
+msgid ""
+"Commands:\n"
+" --is <vendor> returns true if current vendor is <vendor>.\n"
+" --derives-from <vendor> returns true if current vendor derives from "
+"<vendor>.\n"
+" --query <field> print the content of the vendor-specific field.\n"
+" --help show this help message.\n"
+" --version show the version."
+msgstr ""
+"Polecenia:\n"
+" --is <dost> zwraca prawdę, jeśli aktualnym dostawcą jest "
+"<dost>.\n"
+" --derives-from <dost> zwraca prawdę, jeśli dostawca pochodzi od <dost>.\n"
+" --query <pole> zwraca wartość pola określonego dla dostawcy.\n"
+" --help wyświetla ten komunikat pomocy.\n"
+" --version wyświetla wersję."
+
+#: scripts/dpkg-vendor.pl
+msgid ""
+"Options:\n"
+" --vendor <vendor> assume <vendor> is the current vendor."
+msgstr ""
+"Opcje:\n"
+" --vendor <dostawca> przyjmij, że <dostawca> jest aktualnym dostawcą."
+
+#: scripts/dpkg-vendor.pl
+#, perl-format
+msgid "vendor %s doesn't exist in %s"
+msgstr "dostawca %s nie istnieje w %s"
+
+#: scripts/Dpkg/Arch.pm
+#, fuzzy
+#| msgid ""
+#| "couldn't determine gcc system type, falling back to default (native "
+#| "compilation)"
+msgid ""
+"cannot determine CC system type, falling back to default (native compilation)"
+msgstr ""
+"nie można określić typu systemu gcc, użycie domyślnego (kompilacja natywna)"
+
+#: scripts/Dpkg/Arch.pm
+#, fuzzy, perl-format
+#| msgid ""
+#| "unknown gcc system type %s, falling back to default (native compilation)"
+msgid "unknown CC system type %s, falling back to default (native compilation)"
+msgstr "nieznany typ systemu gcc %s, użycie domyślnego (kompilacja natywna)"
+
+#: scripts/Dpkg/Arch.pm
+#, fuzzy, perl-format
+#| msgid "'%s' is not a legal architecture string"
+msgid "'%s' is not a legal architecture in list '%s'"
+msgstr "\"%s\" nie jest poprawną specyfikacją architektury"
+
+#: scripts/Dpkg/BuildFlags.pm scripts/Dpkg/Compression/FileHandle.pm
+#: scripts/Dpkg/File.pm scripts/Dpkg/Interface/Storable.pm
+#: scripts/Dpkg/Shlibs/Objdump.pm scripts/Dpkg/Source/BinaryFiles.pm
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "cannot read %s"
+msgstr "nie można odczytać %s"
+
+#: scripts/Dpkg/BuildFlags.pm
+#, perl-format
+msgid "line %d of %s mentions unknown flag %s"
+msgstr "wiersz %d z %s zawiera nieznaną flagę %s"
+
+#: scripts/Dpkg/BuildFlags.pm
+#, perl-format
+msgid "line %d of %s is invalid, it has been ignored"
+msgstr "wiersz %d z %s jest nieprawidłowy, został zignorowany"
+
+#: scripts/Dpkg/BuildOptions.pm
+#, perl-format
+msgid "invalid flag in %s: %s"
+msgstr "niepoprawna flaga w %s: %s"
+
+#: scripts/Dpkg/BuildOptions.pm
+#, perl-format
+msgid "unknown %s feature in %s variable: %s"
+msgstr "nieznana funkcja %s w zmiennej %s: %s"
+
+#: scripts/Dpkg/BuildOptions.pm
+#, perl-format
+msgid "incorrect value in %s option of %s variable: %s"
+msgstr "nieprawidłowa wartość w opcjach %s zmiennej %s: %s"
+
+#: scripts/Dpkg/BuildTypes.pm
+#, perl-format
+msgid "cannot combine %s and %s"
+msgstr "nie można łączyć %s i %s"
+
+#: scripts/Dpkg/BuildTypes.pm
+#, fuzzy, perl-format
+#| msgid "unknown file type"
+msgid "unknown build type %s"
+msgstr "nieznany typ pliku"
+
+#: scripts/Dpkg/Changelog.pm
+#, perl-format
+msgid ""
+"%s(l%s): %s\n"
+"LINE: %s"
+msgstr ""
+"%s(l%s): %s\n"
+"LINIA: %s"
+
+#: scripts/Dpkg/Changelog.pm
+#, perl-format
+msgid "%s(l%s): %s"
+msgstr "%s(l%s): %s"
+
+#: scripts/Dpkg/Changelog.pm
+msgid "'offset' without 'count' has no effect"
+msgstr "\"offset\" bez \"count\" nic nie zmienia"
+
+#: scripts/Dpkg/Changelog.pm
+msgid "you can't combine 'count' or 'offset' with any other range option"
+msgstr ""
+"nie można łączyć \"count\" lub \"offset\" z jakąkolwiek inną opcją zakresu"
+
+#: scripts/Dpkg/Changelog.pm
+msgid "you can only specify one of 'from' and 'since', using 'since'"
+msgstr "można podać tylko jedno z \"from\" i \"since\", użycie \"since\""
+
+#: scripts/Dpkg/Changelog.pm
+msgid "you can only specify one of 'to' and 'until', using 'until'"
+msgstr "można podać tylko jedno z \"to\" i \"until\", użycie \"until\""
+
+#: scripts/Dpkg/Changelog.pm
+#, fuzzy, perl-format
+#| msgid "'%s' option specifies non-existing version"
+msgid "'%s' option specifies non-existing version '%s'"
+msgstr "opcja \"%s\" określa nieistniejącą wersję"
+
+#: scripts/Dpkg/Changelog.pm
+msgid "use newest entry that is earlier than the one specified"
+msgstr "użycie najnowszego wpisu, który jest wcześniejszy niż określony"
+
+#: scripts/Dpkg/Changelog.pm
+msgid "none found, starting from the oldest entry"
+msgstr "nie znaleziono, rozpoczynanie od najstarszego wpisu"
+
+#: scripts/Dpkg/Changelog.pm
+msgid "use oldest entry that is later than the one specified"
+msgstr "użycie najstarszego wpisu, który jest późniejszy niż określony"
+
+#: scripts/Dpkg/Changelog.pm
+#, fuzzy, perl-format
+#| msgid "no such entry found, ignoring '%s' parameter"
+msgid "no such entry found, ignoring '%s' parameter '%s'"
+msgstr "nie znaleziono takiego wpisu, ignorowanie parametru \"%s\""
+
+#: scripts/Dpkg/Changelog.pm
+#, fuzzy, perl-format
+#| msgid "'since' option specifies most recent version, ignoring"
+msgid "'since' option specifies most recent version '%s', ignoring"
+msgstr "opcja \"since\" określa już najnowszą wersję, ignorowanie"
+
+#: scripts/Dpkg/Changelog.pm
+#, fuzzy, perl-format
+#| msgid "'until' option specifies oldest version, ignoring"
+msgid "'until' option specifies oldest version '%s', ignoring"
+msgstr "opcja \"until\" określa już najstarszą wersję, ignorowanie"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+msgid "first heading"
+msgstr "pierwszy nagłówek"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+#, fuzzy
+#| msgid "next heading or eof"
+msgid "next heading or end of file"
+msgstr "kolejny nagłówek lub koniec pliku"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+msgid "start of change data"
+msgstr "początek daty zmiany"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+msgid "more change data or trailer"
+msgstr "więcej dat zmian lub trailera"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+#, perl-format
+msgid "found start of entry where expected %s"
+msgstr "oczekiwano %s, a znaleziono początek wpisu"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+msgid "badly formatted heading line"
+msgstr "niepoprawny format linii nagłówka"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+#, perl-format
+msgid "found trailer where expected %s"
+msgstr "oczekiwano %s, a znaleziono trailer"
+
+#: scripts/Dpkg/Changelog/Debian.pm scripts/Dpkg/Changelog/Entry/Debian.pm
+msgid "badly formatted trailer line"
+msgstr "niepoprawny format linii stopki"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+#, perl-format
+msgid "found change data where expected %s"
+msgstr "oczekiwano %s, a znaleziono datę zmian"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+#, perl-format
+msgid "found blank line where expected %s"
+msgstr "oczekiwano %s, a znaleziono pustą linię"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+msgid "unrecognized line"
+msgstr "nierozpoznany wiersz"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+#, fuzzy, perl-format
+#| msgid "found eof where expected %s"
+msgid "found end of file where expected %s"
+msgstr "oczekiwano %s, a znaleziono koniec pliku"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "version '%s' is invalid: %s"
+msgstr "wersja \"%s\" jest nieprawidłowa: %s"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "bad key-value after ';': '%s'"
+msgstr "błędny klucz-wartość po \";\": \"%s\""
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "repeated key-value %s"
+msgstr "powtórzone klucz-wartość %s"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "badly formatted urgency value: %s"
+msgstr "niepoprawnie sformatowana wartość pola ważności: %s"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "bad binary-only value: %s"
+msgstr "nieprawidłowa wartość tylko binarna: %s"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "unknown key-value %s"
+msgstr "nieznane klucz-wartość %s"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+msgid "the header doesn't match the expected regex"
+msgstr "nagłówek nie pasuje do oczekiwanego wyrażenia regularnego"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "ignoring invalid week day '%s'"
+msgstr ""
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, fuzzy, perl-format
+#| msgid "invalid flag in %s: %s"
+msgid "uses full '%s' instead of abbreviated month name '%s'"
+msgstr "niepoprawna flaga w %s: %s"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, fuzzy, perl-format
+#| msgid "invalid flag in %s: %s"
+msgid "invalid abbreviated month name '%s'"
+msgstr "niepoprawna flaga w %s: %s"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, fuzzy, perl-format
+#| msgid "cannot exec format parser: %s"
+msgid "cannot parse non-conformant date '%s'"
+msgstr "nie można uruchomić parsera formatu: %s"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+msgid "the trailer doesn't match the expected regex"
+msgstr "trailer nie pasuje do oczekiwanego wyrażenia regularnego"
+
+#: scripts/Dpkg/Changelog/Parse.pm
+#, fuzzy, perl-format
+#| msgid "cannot stat file %s"
+msgid "cannot seek into file %s"
+msgstr "nie można ustalić stanu pliku %s"
+
+#: scripts/Dpkg/Changelog/Parse.pm
+#, fuzzy, perl-format
+#| msgid "changelog format %s is unknown"
+msgid "changelog format %s is unknown: %s"
+msgstr "nieznany format %s pliku zmian"
+
+#: scripts/Dpkg/Changelog/Parse.pm
+#, fuzzy, perl-format
+#| msgid "changelog format %s is unknown"
+msgid "changelog format %s is not a Dpkg::Changelog class"
+msgstr "nieznany format %s pliku zmian"
+
+#: scripts/Dpkg/Changelog/Parse.pm
+#, perl-format
+msgid "fatal error occurred while parsing %s"
+msgstr "wystąpił fatalny błąd podczas przetwarzania %s"
+
+#: scripts/Dpkg/Changelog/Parse.pm
+#, fuzzy, perl-format
+#| msgid "unknown option or argument %s"
+msgid "unknown output format %s"
+msgstr "niepoprawna opcja lub argument %s"
+
+#: scripts/Dpkg/Checksums.pm
+#, perl-format
+msgid "cannot fstat file %s"
+msgstr "nie można ustalić stanu (fstat) pliku %s"
+
+#: scripts/Dpkg/Checksums.pm
+#, perl-format
+msgid "file %s has size %u instead of expected %u"
+msgstr "plik %s ma rozmiar %u zamiast oczekiwanego %u"
+
+#: scripts/Dpkg/Checksums.pm
+#, perl-format
+msgid "file %s has checksum %s instead of expected %s (algorithm %s)"
+msgstr "plik %s ma sumę kontrolną %s zamiast oczekiwanej %s (algorytm %s)"
+
+#: scripts/Dpkg/Checksums.pm
+#, perl-format
+msgid "invalid line in %s checksums string: %s"
+msgstr "niepoprawne wiersz w %s łańuchu sum kontrolnych: %s"
+
+#: scripts/Dpkg/Checksums.pm
+#, perl-format
+msgid "conflicting checksums '%s' and '%s' for file '%s'"
+msgstr "konflikt sum kontrolnych pliku \"%s\" i \"%s\" pliku \"%s\""
+
+#: scripts/Dpkg/Checksums.pm
+#, perl-format
+msgid "conflicting file sizes '%u' and '%u' for file '%s'"
+msgstr "konflikt rozmiarów \"%u\" i \"%u\" pliku \"%s\""
+
+#: scripts/Dpkg/Compression.pm
+#, perl-format
+msgid "compression threads %s is not a number"
+msgstr ""
+
+#: scripts/Dpkg/Compression/Process.pm
+#, perl-format
+msgid "%s is not a supported compression method"
+msgstr "%s nie jest obsługiwaną metodą kompresji"
+
+#: scripts/Dpkg/Compression/Process.pm
+msgid "Dpkg::Compression::Process can only start one subprocess at a time"
+msgstr ""
+"Dpkg::Compression::Process może jednocześnie uruchomić tylko jeden podproces"
+
+#: scripts/Dpkg/Conf.pm
+#, perl-format
+msgid "short option not allowed in %s, line %d"
+msgstr "krótka opcja nie jest dozwolona w %s, wiersz %d"
+
+#: scripts/Dpkg/Conf.pm
+#, perl-format
+msgid "invalid syntax for option in %s, line %d"
+msgstr "błąd składni do opcji w %s, wiersz %d"
+
+#: scripts/Dpkg/Control.pm
+msgid "general section of control info file"
+msgstr "sekcja ogólna pliku z informacjami kontrolnymi"
+
+#: scripts/Dpkg/Control.pm
+msgid "package's section of control info file"
+msgstr "sekcja pakietu pliku z informacjami kontrolnymi"
+
+#: scripts/Dpkg/Control.pm
+msgid "parsed version of changelog"
+msgstr "przetworzona wersja pliku zmian"
+
+#: scripts/Dpkg/Control.pm
+msgid "header stanza of copyright file"
+msgstr ""
+
+#: scripts/Dpkg/Control.pm
+msgid "files stanza of copyright file"
+msgstr ""
+
+#: scripts/Dpkg/Control.pm
+msgid "license stanza of copyright file"
+msgstr ""
+
+#: scripts/Dpkg/Control.pm
+#, fuzzy
+#| msgid "package's section of control info file"
+msgid "package's tests control file"
+msgstr "sekcja pakietu pliku z informacjami kontrolnymi"
+
+#: scripts/Dpkg/Control.pm
+#, fuzzy, perl-format
+#| msgid "entry in repository's %s file"
+msgid "repository's %s file"
+msgstr "wpis w pliku repozytorium %s"
+
+#: scripts/Dpkg/Control.pm
+#, fuzzy, perl-format
+#| msgid "entry in repository's %s file"
+msgid "stanza in repository's %s file"
+msgstr "wpis w pliku repozytorium %s"
+
+#: scripts/Dpkg/Control.pm
+#, perl-format
+msgid "%s file"
+msgstr "plik %s"
+
+#: scripts/Dpkg/Control.pm
+msgid "control info of a .deb package"
+msgstr "informacje kontrolne pakietu .deb"
+
+#: scripts/Dpkg/Control.pm
+#, fuzzy
+#| msgid "control information"
+msgid "build information file"
+msgstr "informacje kontrolne"
+
+#: scripts/Dpkg/Control.pm
+msgid "vendor file"
+msgstr "plik dostawcy"
+
+#: scripts/Dpkg/Control.pm
+#, fuzzy
+#| msgid "entry in dpkg's status file"
+msgid "stanza in dpkg's status file"
+msgstr "wpis w pliku statusu dpkg"
+
+#: scripts/Dpkg/Control/FieldsCore.pm
+#, perl-format
+msgid "unknown information field '%s' in input data in %s"
+msgstr "nieznane pole informacyjne \"%s\" w danych wejściowych %s"
+
+#: scripts/Dpkg/Control/FieldsCore.pm
+msgid "control information"
+msgstr "informacje kontrolne"
+
+#: scripts/Dpkg/Control/HashCore.pm
+#, perl-format
+msgid "syntax error in %s at line %d: %s"
+msgstr "błąd składni w %s w linii %d: %s"
+
+#: scripts/Dpkg/Control/HashCore.pm
+msgid "field cannot start with a hyphen"
+msgstr "pole nie może zaczynać się myślnikiem"
+
+#: scripts/Dpkg/Control/HashCore.pm
+#, perl-format
+msgid "duplicate field %s found"
+msgstr "znaleziono powtórzone pole w %s"
+
+#: scripts/Dpkg/Control/HashCore.pm
+msgid "continued value line not in field"
+msgstr "linia kontynuowanej wartości nie należy do pola"
+
+#: scripts/Dpkg/Control/HashCore.pm
+#, fuzzy
+#| msgid "expected OpenPGP signature, found EOF after blank line"
+msgid "expected OpenPGP signature, found end of file after blank line"
+msgstr "po pustej linii oczekiwano sygnatury OpenPGP, a napotkano koniec pliku"
+
+#: scripts/Dpkg/Control/HashCore.pm
+#, perl-format
+msgid "expected OpenPGP signature, found something else '%s'"
+msgstr "oczekiwano sygnatury OpenPGP, a napotkano coś innego \"%s\""
+
+#: scripts/Dpkg/Control/HashCore.pm
+msgid "unfinished OpenPGP signature"
+msgstr "niezakończona sygnatura OpenPGP"
+
+#: scripts/Dpkg/Control/HashCore.pm
+msgid "OpenPGP signature not allowed here"
+msgstr "sygnatura OpenPGP nie może występować w tym miejscu"
+
+#: scripts/Dpkg/Control/HashCore.pm
+msgid "line with unknown format (not field-colon-value)"
+msgstr "nieznany format linii (oczekiwano: pole-dwukropek-wartość)"
+
+#: scripts/Dpkg/Control/HashCore.pm
+msgid "write error on control data"
+msgstr "błąd zapisu danych kontrolnych"
+
+#: scripts/Dpkg/Control/Info.pm
+#, fuzzy, perl-format
+#| msgid "first block lacks a source field"
+msgid "first stanza lacks a '%s' field"
+msgstr "pierwszy blok nie zawiera pola Source"
+
+#: scripts/Dpkg/Control/Info.pm
+#, fuzzy, perl-format
+#| msgid "block lacks the '%s' field"
+msgid "stanza lacks the '%s' field"
+msgstr "blok nie zawiera pola \"%s\""
+
+#: scripts/Dpkg/Control/Tests/Entry.pm
+#, fuzzy, perl-format
+#| msgid "block lacks the '%s' field"
+msgid "stanza lacks either %s or %s fields"
+msgstr "blok nie zawiera pola \"%s\""
+
+#: scripts/Dpkg/Deps.pm
+#, perl-format
+msgid "can't parse dependency %s"
+msgstr "nie można przetworzyć zależności %s"
+
+#: scripts/Dpkg/Deps.pm
+#, fuzzy, perl-format
+#| msgid "invalid dependency got generated: %s"
+msgid "virtual dependency contains invalid relation: %s"
+msgstr "wygenerowano niepoprawną zależność: %s"
+
+#: scripts/Dpkg/Deps.pm
+msgid "an union dependency can only contain simple dependencies"
+msgstr "suma zależności może zawierać jedynie proste zależności"
+
+#: scripts/Dpkg/Dist/Files.pm
+#, fuzzy, perl-format
+#| msgid "badly formed line in files list file, line %d"
+msgid "badly formed file name in files list file, line %d"
+msgstr "niepoprawna linia w pliku z listą plików w linii %d"
+
+#: scripts/Dpkg/Dist/Files.pm
+#, perl-format
+msgid "badly formed line in files list file, line %d"
+msgstr "niepoprawna linia w pliku z listą plików w linii %d"
+
+#: scripts/Dpkg/Dist/Files.pm
+#, perl-format
+msgid "duplicate files list entry for file %s (line %d)"
+msgstr "zduplikowany wpis o pliku %s w liście plików (linia %d)"
+
+#: scripts/Dpkg/Dist/Files.pm
+#, fuzzy, perl-format
+#| msgid "cannot create directory %s"
+msgid "cannot open directory %s"
+msgstr "nie można utworzyć katalogu %s"
+
+#: scripts/Dpkg/Dist/Files.pm
+#, fuzzy, perl-format
+#| msgid "invalid flag in %s: %s"
+msgid "invalid filename %s"
+msgstr "niepoprawna flaga w %s: %s"
+
+#: scripts/Dpkg/ErrorHandling.pm
+msgid "info"
+msgstr "info"
+
+#: scripts/Dpkg/ErrorHandling.pm
+msgid "notice"
+msgstr ""
+
+#: scripts/Dpkg/ErrorHandling.pm
+msgid "warning"
+msgstr "ostrzeżenie"
+
+#: scripts/Dpkg/ErrorHandling.pm
+msgid "error"
+msgstr "błąd"
+
+#: scripts/Dpkg/ErrorHandling.pm
+#, fuzzy, perl-format
+#| msgid "%s gave error exit status %s"
+msgid "%s subprocess returned exit status %d"
+msgstr "%s zwrócił status błędu %s"
+
+#: scripts/Dpkg/ErrorHandling.pm
+#, perl-format
+msgid "%s subprocess was killed by signal %d"
+msgstr ""
+
+#: scripts/Dpkg/ErrorHandling.pm
+#, fuzzy, perl-format
+#| msgid "%s failed with unknown exit code %d"
+msgid "%s subprocess failed with unknown status code %d"
+msgstr "%s zwrócił nieznany kod błędu %d"
+
+#: scripts/Dpkg/ErrorHandling.pm
+msgid "Use --help for program usage information."
+msgstr "Użyj --help dla uzyskania informacji o użyciu programu"
+
+#: scripts/Dpkg/File.pm
+#, fuzzy, perl-format
+#| msgid "cannot stat file %s"
+msgid "cannot create file %s"
+msgstr "nie można ustalić stanu pliku %s"
+
+#: scripts/Dpkg/IPC.pm
+#, perl-format
+msgid "pipe for %s"
+msgstr "potok dla %s"
+
+#: scripts/Dpkg/IPC.pm
+#, perl-format
+msgid "chdir to %s"
+msgstr "zmiana katalogu na \"%s\""
+
+#: scripts/Dpkg/IPC.pm
+msgid "reopen stdin"
+msgstr "ponowne otwieranie stdin"
+
+#: scripts/Dpkg/IPC.pm
+msgid "reopen stdout"
+msgstr "ponowne otwieranie stdout"
+
+#: scripts/Dpkg/IPC.pm
+msgid "child process"
+msgstr "proces potomny"
+
+#: scripts/Dpkg/IPC.pm
+#, perl-format
+msgid "wait for %s"
+msgstr "czekanie na %s"
+
+#: scripts/Dpkg/IPC.pm
+#, perl-format
+msgid "%s didn't complete in %d second"
+msgid_plural "%s didn't complete in %d seconds"
+msgstr[0] "%s nie zakończył się w %d sekundę"
+msgstr[1] "%s nie zakończył się w %d sekundy"
+msgstr[2] "%s nie zakończył się w %d sekund"
+
+#: scripts/Dpkg/Interface/Storable.pm
+msgid "<standard input>"
+msgstr "<standardowe wejście>"
+
+#: scripts/Dpkg/Lock.pm
+msgid "File::FcntlLock not available; using flock which is not NFS-safe"
+msgstr ""
+"File::FcntlLock niedostępny - użycie flock - nie jest bezpieczny dla NFS"
+
+#: scripts/Dpkg/Lock.pm
+#, perl-format
+msgid "failed to get a write lock on %s"
+msgstr "nie uzyskano blokady zapisu w %s"
+
+#: scripts/Dpkg/OpenPGP.pm
+#, fuzzy, perl-format
+#| msgid "unknown option or argument %s"
+msgid "unknown OpenPGP api requested %s"
+msgstr "niepoprawna opcja lub argument %s"
+
+#: scripts/Dpkg/OpenPGP.pm
+#, fuzzy, perl-format
+#| msgid "cannot open file %s"
+msgid "cannot load OpenPGP backend %s"
+msgstr "nie można otworzyć pliku %s"
+
+#: scripts/Dpkg/OpenPGP.pm
+#, fuzzy, perl-format
+#| msgid "unknown option or argument %s"
+msgid "unknown OpenPGP backend %s"
+msgstr "niepoprawna opcja lub argument %s"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "success"
+msgstr ""
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+#, fuzzy
+#| msgid "cannot create pipe for %s"
+msgid "no acceptable signature found"
+msgstr "nie można utworzyć potoku dla %s"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "missing required argument"
+msgstr ""
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+#, fuzzy
+#| msgid "%s is not a supported compression"
+msgid "unsupported option"
+msgstr "%s nie jest obsługiwanym typem kompresji"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "invalid data type"
+msgstr ""
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+#, fuzzy
+#| msgid "one to three arguments expected"
+msgid "non-text input where text expected"
+msgstr "oczekiwano od 1 do 3 argumentów"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "output file already exists"
+msgstr ""
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+#, fuzzy
+#| msgid "patch file '%s' doesn't exist"
+msgid "input file does not exist"
+msgstr "łatka \"%s\" nie istnieje"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "cannot unlock password-protected key"
+msgstr ""
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+#, fuzzy
+#| msgid "unsupported checksum '%s'"
+msgid "unsupported subcommand"
+msgstr "niewspierana suma kontrolna \"%s\""
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "key is not signature-capable"
+msgstr ""
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "missing OpenPGP implementation"
+msgstr ""
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "specified key needs a keystore"
+msgstr ""
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+#, perl-format
+msgid "error code %d"
+msgstr ""
+
+#: scripts/Dpkg/Package.pm
+msgid "may not be empty string"
+msgstr "nie może być łańcuchem pustym"
+
+#: scripts/Dpkg/Package.pm
+#, perl-format
+msgid "character '%s' not allowed"
+msgstr "znak \"%s\" nie jest dozwolony"
+
+#: scripts/Dpkg/Package.pm
+msgid "must start with an alphanumeric character"
+msgstr "musi zaczynać się literą lub cyfrą"
+
+#: scripts/Dpkg/Path.pm scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "pathname '%s' cannot be canonicalized"
+msgstr ""
+
+#: scripts/Dpkg/Path.pm scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "pathname '%s' points outside source root (to '%s')"
+msgstr ""
+
+#: scripts/Dpkg/Shlibs.pm
+msgid ""
+"deprecated use of LD_LIBRARY_PATH with private library directory which "
+"interferes with cross-building, please use -l option instead"
+msgstr ""
+
+#: scripts/Dpkg/Shlibs.pm scripts/Dpkg/Shlibs/Objdump.pm
+#, fuzzy, perl-format
+#| msgid "cannot exec format parser: %s"
+msgid "unknown executable format in file '%s'"
+msgstr "nie można uruchomić parsera formatu: %s"
+
+#: scripts/Dpkg/Shlibs/Objdump.pm
+#, perl-format
+msgid "couldn't parse dynamic relocation record: %s"
+msgstr "nie można przetworzyć rekordu dynamicznej relokacji: %s"
+
+#: scripts/Dpkg/Shlibs/Objdump.pm
+#, perl-format
+msgid "couldn't parse dynamic symbol definition: %s"
+msgstr "nie można przetworzyć definicji symboli dynamicznych: %s"
+
+#: scripts/Dpkg/Shlibs/Symbol.pm
+#, perl-format
+msgid "symbol name unspecified: %s"
+msgstr "nieokreślona nazwa symbolu: %s"
+
+#: scripts/Dpkg/Shlibs/Symbol.pm
+#, fuzzy, perl-format
+#| msgid "you can't use symver tag to catch unversioned symbols: %s"
+msgid "symver tag with versioned symbol will not match: %s"
+msgstr ""
+"nie można używać tagu symver, aby przechwycić niewersjonowane symbole: %s"
+
+#: scripts/Dpkg/Shlibs/Symbol.pm
+#, perl-format
+msgid "you can't use symver tag to catch unversioned symbols: %s"
+msgstr ""
+"nie można używać tagu symver, aby przechwycić niewersjonowane symbole: %s"
+
+#: scripts/Dpkg/Shlibs/SymbolFile.pm
+#, perl-format
+msgid "symbol information must be preceded by a header (file %s, line %s)"
+msgstr ""
+"informacje o symbolach muszą być poprzedzone nagłówkiem (plik %s, wiersz %s)"
+
+#: scripts/Dpkg/Shlibs/SymbolFile.pm
+#, perl-format
+msgid "failed to parse line in %s: %s"
+msgstr "błąd przetwarzania linii w %s: %s"
+
+#: scripts/Dpkg/Shlibs/SymbolFile.pm
+#, perl-format
+msgid "failed to parse a line in %s: %s"
+msgstr "błąd przetwarzania linii w %s: %s"
+
+#: scripts/Dpkg/Shlibs/SymbolFile.pm
+#, perl-format
+msgid "tried to merge the same object (%s) twice in a symfile"
+msgstr "próba dwukrotnego połączenia tego samego obiektu (%s) w pliku symboli"
+
+#: scripts/Dpkg/Shlibs/SymbolFile.pm
+msgid "cannot merge symbols from objects without SONAME"
+msgstr "nie można połączyć symboli z obiektu bez SONAME"
+
+#: scripts/Dpkg/Source/Archive.pm
+msgid "write on tar input"
+msgstr "zapisywanie na wejściu tar"
+
+#: scripts/Dpkg/Source/Archive.pm
+msgid "close on tar input"
+msgstr "zamykanie wejścia tar"
+
+#: scripts/Dpkg/Source/Archive.pm scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot create directory %s"
+msgstr "nie można utworzyć katalogu %s"
+
+#: scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "cannot get source pathname %s metadata"
+msgstr ""
+
+#: scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "cannot get target pathname %s metadata"
+msgstr ""
+
+#: scripts/Dpkg/Source/Archive.pm
+#, fuzzy, perl-format
+#| msgid "cannot create directory %s"
+msgid "cannot change directory %s mode"
+msgstr "nie można utworzyć katalogu %s"
+
+#: scripts/Dpkg/Source/Archive.pm
+#, fuzzy, perl-format
+#| msgid "cannot create directory %s"
+msgid "cannot change directory %s times"
+msgstr "nie można utworzyć katalogu %s"
+
+#: scripts/Dpkg/Source/Archive.pm
+#, fuzzy, perl-format
+#| msgid "cannot stat directory %s"
+msgid "cannot remove destination directory %s"
+msgstr "nie można ustalić stanu katalogu %s"
+
+#: scripts/Dpkg/Source/Archive.pm
+#, fuzzy, perl-format
+#| msgid "cannot stat file %s"
+msgid "cannot remove destination file %s"
+msgstr "nie można ustalić stanu pliku %s"
+
+#: scripts/Dpkg/Source/Archive.pm scripts/Dpkg/Source/Package.pm
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "cannot opendir %s"
+msgstr "nie można otworzyć katalogu %s"
+
+#: scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "unable to rename %s to %s"
+msgstr "nie można zmienić nazwy %s na %s"
+
+#: scripts/Dpkg/Source/Functions.pm
+#, perl-format
+msgid "cannot stat directory %s (before removal)"
+msgstr "nie można ustalić stanu katalogu %s (przed usunięciem)"
+
+#: scripts/Dpkg/Source/Functions.pm
+#, fuzzy, perl-format
+#| msgid "unable to check for removal of dir `%s'"
+msgid "unable to check for removal of directory '%s'"
+msgstr "nie można sprawdzić, czy usunąć katalog \"%s\""
+
+#: scripts/Dpkg/Source/Functions.pm
+#, perl-format
+msgid "rm -rf failed to remove '%s'"
+msgstr "niepowodzenie rm -rf podczas usuwania \"%s\""
+
+#: scripts/Dpkg/Source/Functions.pm scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot change timestamp for %s"
+msgstr "nie można zmienić czasu modyfikacji dla %s"
+
+#: scripts/Dpkg/Source/Functions.pm
+#, perl-format
+msgid "cannot read timestamp from %s"
+msgstr "nie można odczytać czasu modyfikacji z %s"
+
+#: scripts/Dpkg/Source/Functions.pm
+#, fuzzy, perl-format
+#| msgid "cannot open file %s"
+msgid "cannot open file %s for binary detection"
+msgstr "nie można otworzyć pliku %s"
+
+#: scripts/Dpkg/Source/BinaryFiles.pm
+#, perl-format
+msgid "adding %s to %s"
+msgstr "dodawanie %s do %s"
+
+#: scripts/Dpkg/Source/BinaryFiles.pm
+#, perl-format
+msgid "unwanted binary file: %s"
+msgstr "niechciany plik binarny: %s"
+
+#: scripts/Dpkg/Source/BinaryFiles.pm
+#, perl-format
+msgid ""
+"detected %d unwanted binary file (add it in debian/source/include-binaries "
+"to allow its inclusion)."
+msgid_plural ""
+"detected %d unwanted binary files (add them in debian/source/include-"
+"binaries to allow their inclusion)."
+msgstr[0] ""
+"wykryto %d niechciany plik binarny (należy go wymienić w debian/source/"
+"include-binaries, aby umożliwić jego włączenie)."
+msgstr[1] ""
+"wykryto %d niechciane pliki binarne (należy je wymienić w debian/source/"
+"include-binaries, aby umożliwić ich włączenie)."
+msgstr[2] ""
+"wykryto %d niechcianych plików binarnych (należy je wymienić w debian/source/"
+"include-binaries, aby umożliwić ich włączenie)."
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "%s is not the name of a file"
+msgstr "%s nie jest nazwą pliku"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "missing critical source control field %s"
+msgstr "brak krytycznego źródłowego pola kontrolnego %s "
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "source package format '%s' is not supported: %s"
+msgstr "format \"%s\" pakietu źródłowego nie jest obsługiwany: %s"
+
+#: scripts/Dpkg/Source/Package.pm
+msgid "source package uses only weak checksums"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package.pm
+#, fuzzy, perl-format
+#| msgid "source and version are required to compute the source basename"
+msgid "%s and %s fields are required to compute the source basename"
+msgstr "źródło i wersja są wymagane do określenia nazwy bazowej źródeł"
+
+#: scripts/Dpkg/Source/Package.pm
+msgid "upstream tarball signatures but no upstream signing key"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package.pm
+#, fuzzy, perl-format
+#| msgid "applying %s"
+msgid "verifying %s"
+msgstr "aplikowanie %s"
+
+#: scripts/Dpkg/Source/Package.pm
+#, fuzzy, perl-format
+#| msgid "cannot stat file %s"
+msgid "cannot verify upstream tarball signature for %s: %s"
+msgstr "nie można ustalić stanu pliku %s"
+
+#: scripts/Dpkg/Source/Package.pm
+#, fuzzy, perl-format
+#| msgid "cannot stat file %s"
+msgid "cannot verify inline signature for %s: %s"
+msgstr "nie można ustalić stanu pliku %s"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "%s is not a valid option for %s"
+msgstr "%s nie jest prawidłową opcją dla %s"
+
+#: scripts/Dpkg/Source/Package.pm
+#, fuzzy, perl-format
+#| msgid "cannot rename %s to %s"
+msgid "cannot copy %s to %s"
+msgstr "nie można przemianować %s na %s"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "%s does not exist"
+msgstr "%s nie istnieje"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "cannot make %s executable"
+msgstr "nie można uczynić %s plikiem wykonywalnym"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "%s is not a plain file"
+msgstr " %s nie jest zwykłym plikiem"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "'%s' is not supported by the source format '%s'"
+msgstr "\"%s\" nie obsługiwane przez format źródeł \"%s\""
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, fuzzy
+#| msgid "write original source message"
+msgid "auto select original source"
+msgstr "wypisywanie oryginalnego komunikatu źródłowego"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, fuzzy
+#| msgid "full upload (original source is included)"
+msgid "use packed original source (unpack and keep)"
+msgstr "pełne wydanie (oryginalne źródła dołączone)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, fuzzy
+#| msgid "full upload (original source is included)"
+msgid "use packed original source (unpack and remove)"
+msgstr "pełne wydanie (oryginalne źródła dołączone)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, fuzzy
+#| msgid "full upload (original source is included)"
+msgid "use unpacked original source (pack and keep)"
+msgstr "pełne wydanie (oryginalne źródła dołączone)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, fuzzy
+#| msgid "full upload (original source is included)"
+msgid "use unpacked original source (pack and remove)"
+msgstr "pełne wydanie (oryginalne źródła dołączone)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, fuzzy
+#| msgid "write original source message"
+msgid "trust packed and unpacked original sources are same"
+msgstr "wypisywanie oryginalnego komunikatu źródłowego"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "there is no diff, do main tarfile only"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "like -sa, -sk, -sp, -su, -sr but may overwrite"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+msgid "abort if generated diff has upstream files changes"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "leave original source packed in current directory"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "do not copy original source to current directory"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, fuzzy
+#| msgid "write original source message"
+msgid "unpack original source tree too"
+msgstr "wypisywanie oryginalnego komunikatu źródłowego"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "do not apply debian diff to upstream sources"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "-s%s option overrides earlier -s%s option"
+msgstr "opcja -s%s nadpisuje wcześniejszą opcję -s%s"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "source handling style -s%s not allowed with -x"
+msgstr "opcja przetwarzania źródeł -s%s nie jest dopuszczalna z -x"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "multiple tarfiles in v1.0 source package"
+msgstr "wiele archiwów tar w pakiecie źródłowym wersji 1.0"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "unrecognized file for a %s source package: %s"
+msgstr "nierozpoznany plik w pakiecie źródłowym %s: %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V3/Native.pm
+msgid "no tarfile in Files field"
+msgstr "pole Files nie zawiera nazwy archiwum tar"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "native package with .orig.tar"
+msgstr "pakiet natywny z rozszerzeniem .orig.tar"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "unable to rename '%s' to '%s'"
+msgstr "nie można zmienić nazwy \"%s\" na \"%s\""
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+#, perl-format
+msgid "unpacking %s"
+msgstr "rozpakowywanie %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "unable to keep orig directory (already exists)"
+msgstr "nie można zachować oryginalnego katalogu (już istnieje)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "failed to rename newly-extracted %s to %s"
+msgstr "nie można zmienić nowo wypakowanego %s na %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "failed to rename saved %s to %s"
+msgstr "nie można zmienić nazwy zachowanego %s na %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "applying %s"
+msgstr "aplikowanie %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "upstream files that have been modified: %s"
+msgstr "pliki projektu macierzystego, które zostały zmodyfikowane: %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "only supports gzip compression"
+msgstr "obsługuje tylko kompresję gzip"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid ""
+"-b takes at most a directory and an orig source argument (with v1.0 source "
+"package)"
+msgstr ""
+"-b pobiera co najwyżej dwa argumenty: katalog i oryginalne źródła (z wersją "
+"1.0 pakietu źródłowego)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "source handling style -s%s not allowed with -b"
+msgstr "nie można łączyć -s%s, odnoszącej się do obsługi źródeł, z -b"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "packed orig '%s' exists but is not a plain file"
+msgstr "spakowany oryg. \"%s\" istnieje, ale nie jest zwykłym plikiem"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "cannot stat orig argument %s"
+msgstr "nie można ustalić stanu dla argumentu orig %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid ""
+"orig argument is unpacked but source handling style -s%s calls for packed (."
+"orig.tar.<ext>)"
+msgstr ""
+"argument orig jest niespakowany, ale opcja przetwarzania źródeł -s%s "
+"oczekuje spakowanego (.orig.tar.<rozszerzenie>)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid ""
+"orig argument is packed but source handling style -s%s calls for unpacked (."
+"orig/)"
+msgstr ""
+"argument orig jest spakowany, ale opcja przetwarzania źródeł -s%s oczekuje "
+"niespakowanego (.orig/)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "orig argument %s is not a plain file or directory"
+msgstr "argument oryg %s nie jest zwykłym plikiem ani katalogiem"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid ""
+"orig argument is empty (means no orig, no diff) but source handling style -"
+"s%s wants something"
+msgstr ""
+"argument orig jest pusty (brak orig i różnic), ale opcja przetwarzania "
+"źródeł -s%s oczekuje jakiegoś"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "unpacked orig '%s' exists but is not a directory"
+msgstr "rozpakowany oryg. \"%s\" istnieje, ale nie jest katalogiem"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "unable to stat putative unpacked orig '%s'"
+msgstr "nie można ustalić stanu domniemanego rozpakowanego oryginalnego \"%s\""
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V3/Quilt.pm
+msgid "non-native package version does not contain a revision"
+msgstr "nienatywna wersja pakietu nie zawiera rewizji"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V3/Native.pm
+msgid "native package version may not have a revision"
+msgstr "natywna wersja pakietu może nie mieć rewizji"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "source directory '%s' is not <sourcepackage>-<upstreamversion> '%s'"
+msgstr "katalog źródłowy \"%s\" nie jest w postaci <pakiet_źródłowy> \"%s\""
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid ".orig directory name %s is not <package>-<upstreamversion> (wanted %s)"
+msgstr ""
+"nazwa katalogu .orig %s nie jest w postaci <pakiet>-<wersja_główna> "
+"(oczekiwano %s)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid ""
+".orig.tar name %s is not <package>_<upstreamversion>.orig.tar (wanted %s)"
+msgstr ""
+"nazwa pliku .orig.tar %s nie jest w postaci <pakiet>-<wersja_główna>.orig."
+"tar. (oczekiwano %s)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid ""
+"tarfile '%s' already exists, not overwriting, giving up; use -sU or -sR to "
+"override"
+msgstr ""
+"archiwum tar \"%s\" już istnieje, nie będzie nadpisane, rezygnacja - użyj -"
+"sU lub -sR, aby nadpisać"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "unable to check for existence of '%s'"
+msgstr "nie można sprawdzić istnienia \"%s\""
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V3/Native.pm
+#, perl-format
+msgid "unable to rename '%s' (newly created) to '%s'"
+msgstr "nie można zmienić nazwy (nowo utworzonego) \"%s\" na \"%s\""
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+#: scripts/Dpkg/Source/Package/V3/Quilt.pm scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "unable to change permission of '%s'"
+msgstr "nie można zmienić praw dostępu \"%s\""
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "building %s using existing %s"
+msgstr "budowanie %s, używając istniejącego %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+msgid "upstream signing key but no upstream tarball signature"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, fuzzy, perl-format
+#| msgid ""
+#| "orig dir `%s' already exists, not overwriting, giving up; use -sA, -sK or "
+#| "-sP to override"
+msgid ""
+"orig directory '%s' already exists, not overwriting, giving up; use -sA, -sK "
+"or -sP to override"
+msgstr ""
+"oryg. katalog \"%s\" już istnieje, nie będzie nadpisany, rezygnacja - użyj -"
+"sA, -sK lub -sP, aby nadpisać"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, fuzzy, perl-format
+#| msgid "unable to check for existence of orig dir `%s'"
+msgid "unable to check for existence of orig directory '%s'"
+msgstr "nie można sprawdzić istnienia katalogu orig \"%s\""
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "the diff modifies the following upstream files: %s"
+msgstr "łatka modyfikuje następujące pliki macierzyste: %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid ""
+"use the '3.0 (quilt)' format to have separate and documented changes to "
+"upstream files, see dpkg-source(1)"
+msgstr ""
+"proszę użyć formatu \"3.0 (quilt)\", aby otrzymać oddzielne i udokumentowane "
+"zmiany w stosunku do plików macierzystych, patrz dpkg-source(1)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "aborting due to --abort-on-upstream-changes"
+msgstr "przerywanie ze względu na --abort-on-upstream-changes"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+msgid "unrepresentable changes to source"
+msgstr "niereprezentowalne zmiany w źródle"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "include removed files in the patch"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "include timestamp in the patch"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "include binary files in the tarball"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, fuzzy
+#| msgid "fuzz is not allowed when applying patches"
+msgid "do not prepare build tree by applying patches"
+msgstr "przesunięcie nie jest dozwolone w trakcie nakładania łatek"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "do not unapply patches if previously applied"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "unapply patches if previously applied (default)"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "create an empty original tarball if missing"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "record generated patches, instead of aborting"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "do not extract debian tarball into upstream sources"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "do not apply patches at the end of the extraction"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "duplicate files in %s source package: %s"
+msgstr "zduplikowane pliki w pakiecie źródłowym %s: %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "missing orig.tar or debian.tar file in v2.0 source package"
+msgstr ""
+"brakujący plik orig.tar lub debian.tar dla wersji 2.0 pakietu źródłowego"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "mismatched orig.tar %s for signature %s in source package"
+msgstr "niedopasowany plik orig.tar %s dla sygnatury %s w pliku źródłowym"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "missing addon orig.tar for signature %s in source package"
+msgstr "brakujący dodatek orig.tar dla sygnatury %s w pliku źródłowym"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "mismatched addon orig.tar %s for signature %s in source package"
+msgstr "niedopasowany dodatek orig.tar %s dla sygnatury %s w pliku źródłowym"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "required removal of '%s' installed by original tarball"
+msgstr ""
+"wymagane usunięcie \"%s\" zainstalowanego przez oryginalne archiwum tar"
+
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "unapplying %s"
+msgstr "cofanie %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "no upstream tarball found at %s"
+msgstr "nie znaleziono archiwum macierzystego w %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "patches are not applied, applying them now"
+msgstr "łatki nie zostały nałożone, nakładanie ich teraz"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "several orig.tar files found (%s and %s) but only one is allowed"
+msgstr ""
+"znaleziono kilka plików orig.tar (%s i %s), a dozwolony jest tylko jeden"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "copy of the debian directory"
+msgstr "kopia katalogu debian"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "local changes detected, the modified files are:"
+msgstr "wykryto lokalne zmiany, zmodyfikowane pliki to:"
+
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Package/V3/Bzr.pm
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+#, perl-format
+msgid "-b takes only one parameter with format '%s'"
+msgstr "-b przyjmuje tylko jeden parametr w formacie \"%s\""
+
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot represent change to %s: %s"
+msgstr "niereprezentowalne zmiany w %s: %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Patch.pm
+msgid "binary file contents changed"
+msgstr "zawartość pliku binarnego zmieniła się"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid ""
+"add %s in debian/source/include-binaries if you want to store the modified "
+"binary in the debian tarball"
+msgstr ""
+"proszę dodać %s w debian/source/include-binaries jeśli zmodyfikowane binaria "
+"mają się znaleźć w wynikowym archiwum Debiana"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid ""
+"Hint: make sure the version in debian/changelog matches the unpacked source "
+"tree"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "you can integrate the local changes with %s"
+msgstr "lokalne zmiany można zintegrować za pomocą %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "aborting due to unexpected upstream changes, see %s"
+msgstr "przerywanie, ze względu na nieoczekiwane zmiany macierzyste, patrz %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "local changes have been recorded in a new patch: %s"
+msgstr "lokalne zmiany zostały zapisane w nowej łatce: %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Package/V3/Quilt.pm
+#, perl-format
+msgid "cannot remove %s"
+msgstr "nie można usunąć %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Package/V3/Quilt.pm
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "failed to copy %s to %s"
+msgstr "nie udało się skopiować %s do %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "cannot register changes in %s, this patch already exists"
+msgstr "nie można zarejestrować zmian w %s, ta łatka już istnieje"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "patch file '%s' doesn't exist"
+msgstr "łatka \"%s\" nie istnieje"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "there are no local changes to record"
+msgstr "nie ma zmian lokalnych do zapisania"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "Enter the desired patch name: "
+msgstr "Proszę wpisać żądaną nazwę łatki:"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "no patch name given; cannot proceed"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "cannot find an editor"
+msgstr "nie można odnaleźć edytora"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+msgid "cannot unpack bzr-format source package because bzr is not in the PATH"
+msgstr ""
+"nie można rozpakować pakietu źródłowego w formacie bzr, ponieważ bzr nie "
+"znajduje się w PATH"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+#, perl-format
+msgid ""
+"source directory is not the top directory of a bzr repository (%s/.bzr not "
+"present), but Format bzr was specified"
+msgstr ""
+"katalog źródłowy nie jest głównym katalogiem repozytorium bzr (nie ma %s/."
+"bzr), ale został wskazany Format bzr"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+#, perl-format
+msgid "%s is a symlink"
+msgstr "%s jest dowiązaniem symbolicznym"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+#, perl-format
+msgid "%s is a symlink to outside %s"
+msgstr "%s jest dowiązaniem symbolicznym do zewnętrznego %s"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+msgid "doesn't contain a bzr repository"
+msgstr "nie zawiera repozytorium git"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+msgid "bzr status exited nonzero"
+msgstr "bzr status zwrócił niezerowy kod błędu"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "uncommitted, not-ignored changes in working directory: %s"
+msgstr "niezatwierdzone, nie ignorowane zmiany w katalogu roboczym: %s"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+#, fuzzy
+#| msgid "format v3.0 uses only one source file"
+msgid "format v3.0 (bzr) uses only one source file"
+msgstr "format 3.0 używa tylko jednego pliku źródłowego"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+#, perl-format
+msgid "expected %s, got %s"
+msgstr "oczekiwano %s, otrzymano %s"
+
+#: scripts/Dpkg/Source/Package/V3/Custom.pm
+#, fuzzy
+#| msgid "unrecognized file for a native source package: %s"
+msgid "define the format of the generated source package"
+msgstr "nierozpoznany plik dla natywnego pakietu źródłowego: %s"
+
+#: scripts/Dpkg/Source/Package/V3/Custom.pm
+msgid "Format '3.0 (custom)' is only used to create source packages"
+msgstr ""
+"Format \"3.0 (custom)\" jest używany jedynie do tworzenia pakietów źródłowych"
+
+#: scripts/Dpkg/Source/Package/V3/Custom.pm
+msgid "no files indicated on command line"
+msgstr "nie podano plików w wywołaniu programu"
+
+#: scripts/Dpkg/Source/Package/V3/Custom.pm
+msgid "--target-format option is missing"
+msgstr "nie podano opcji --target-format"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "cannot unpack git-format source package because git is not in the PATH"
+msgstr ""
+"nie można rozpakować pakietu źródłowego w formacie git, ponieważ git nie "
+"jest w PATH"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid ""
+"source directory is not the top directory of a git repository (%s/.git not "
+"present), but Format git was specified"
+msgstr ""
+"katalog źródłowy nie jest głównym katalogiem repozytorium git (nie ma %s/."
+"git), ale został wskazany format git"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "git repository %s uses submodules; this is not yet supported"
+msgstr "repozytorium git %s używa podmodułów - to nie jest jeszcze obsługiwane"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "specify a git <ref> to include in the git bundle"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, fuzzy
+#| msgid "creating shallow clone with depth %s"
+msgid "create a shallow clone with <number> depth"
+msgstr "tworzenie płytkiego klonu o głębokości %s"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "doesn't contain a git repository"
+msgstr "nie zawiera repozytorium git"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "git ls-files exited nonzero"
+msgstr "git ls-files zwrócił niezerowy kod wyjścia"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "creating shallow clone with depth %s"
+msgstr "tworzenie płytkiego klonu o głębokości %s"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "bundling: %s"
+msgstr "pakowanie: %s"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "format v3.0 (git) uses only one .git file"
+msgstr "format v3.0 (git) używa tylko jednego pliku .git"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "format v3.0 (git) uses only one .gitshallow file"
+msgstr "format v3.0 (git) używa tylko jednego pliku .gitshallow"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "format v3.0 (git) unknown file: %s"
+msgstr "nieznany plik formatu v3.0 (git): %s"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "format v3.0 (git) expected %s"
+msgstr "format v3.0 (git) oczekiwano %s"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "cloning %s"
+msgstr "klonowanie %s"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "setting up shallow clone"
+msgstr "konfigurowanie płytkiego klonu"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, fuzzy, perl-format
+#| msgid "unable to rename %s to %s"
+msgid "setting remote %s to %s"
+msgstr "nie można zmienić nazwy %s na %s"
+
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+#, fuzzy
+#| msgid "multiple tarfiles in v1.0 source package"
+msgid "multiple tarfiles in native source package"
+msgstr "wiele archiwów tar w pakiecie źródłowym wersji 1.0"
+
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+#, perl-format
+msgid "unrecognized file for a native source package: %s"
+msgstr "nierozpoznany plik dla natywnego pakietu źródłowego: %s"
+
+#: scripts/Dpkg/Source/Package/V3/Quilt.pm
+msgid "use a single debianization patch"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V3/Quilt.pm
+msgid "accept quilt metadata <version> even if unknown"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V3/Quilt.pm
+#, perl-format
+msgid "can't create symlink %s"
+msgstr "nie można utworzyć linku symbolicznego \"%s\""
+
+#: scripts/Dpkg/Source/Package/V3/Quilt.pm
+#, fuzzy, perl-format
+#| msgid "using options from %s: %s"
+msgid "using patch list from %s"
+msgstr "użycie opcji z %s: %s"
+
+#: scripts/Dpkg/Source/Package/V3/Quilt.pm
+#, perl-format
+msgid "unsupported version of the quilt metadata: %s"
+msgstr "nieobsługiwana wersja metadanych quilt: %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "file %s has no final newline (either original or modified version)"
+msgstr ""
+"plik %s nie kończy się znakiem nowej linii (albo oryginalny, albo "
+"zmodyfikowany)"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "unknown line from diff -u on %s: '%s'"
+msgstr "nieznana linia z diff -u w %s: \"%s\""
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "failed to write"
+msgstr "nie można zapisać"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff on %s"
+msgstr "diff na %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot stat file %s"
+msgstr "nie można ustalić stanu pliku %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot read link %s"
+msgstr "nie można odczytać dowiązania %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "device or socket is not allowed"
+msgstr "urządzenie lub gniazdo nie są dozwolone"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "unknown file type"
+msgstr "nieznany typ pliku"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, fuzzy, perl-format
+#| msgid "ignoring deletion of directory %s"
+msgid "ignoring deletion of file %s"
+msgstr "zignorowano usunięcie katalogu %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "ignoring deletion of file %s, use --include-removal to override"
+msgstr "zignorowano usunięcie pliku %s, użyj --include-removal, aby nadpisać"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "ignoring deletion of directory %s"
+msgstr "zignorowano usunięcie katalogu %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "ignoring deletion of symlink %s"
+msgstr "zignorowano usunięcie dowiązania symbolicznego %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "newly created empty file '%s' will not be represented in diff"
+msgstr "nowo utworzony pusty plik \"%s\" nie będzie dołączony do pliku różnic"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "executable mode %04o of '%s' will not be represented in diff"
+msgstr "prawa dostępu %04o pliku \"%s\" nie będą dołączone do pliku łatki"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "special mode %04o of '%s' will not be represented in diff"
+msgstr ""
+"specjalne prawa dostępu %04o pliku \"%s\" nie będą dołączone do pliku łatki"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot represent change to %s:"
+msgstr "niereprezentowalna zmiana w %s:"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid " new version is %s"
+msgstr " nową wersją jest %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid " old version is %s"
+msgstr " starą wersją jest %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff %s patches file with C-style encoded filename"
+msgstr "plik łatki \"%s\" łata plik o nazwie w stylu języka C"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "expected ^--- in line %d of diff '%s'"
+msgstr "oczekiwano ^--- w linii %d pliku łatki \"%s\""
+
+#: scripts/Dpkg/Source/Patch.pm
+#, fuzzy, perl-format
+#| msgid "diff `%s' patches file with name ending .dpkg-orig"
+msgid "diff '%s' patches file with name ending in .dpkg-orig"
+msgstr "plik łatki \"%s\" łata plik o nazwie kończącej się na .dpkg-orig"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff '%s' finishes in middle of ---/+++ (line %d)"
+msgstr "plik łatki \"%s\" kończy się w środku ---/+++ (linia %d)"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "line after --- isn't as expected in diff '%s' (line %d)"
+msgstr "linia po --- nie jest oczekiwana w pliku łatki \"%s\" (linia %d)"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "none of the filenames in ---/+++ are valid in diff '%s' (line %d)"
+msgstr ""
+"żadna z nazw plików w ---/+++ nie jest prawidłowa w łatce \"%s\" (wiersz %d)"
+
+#: scripts/Dpkg/Source/Patch.pm scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "%s contains an insecure path: %s"
+msgstr "%s zawiera niezaufaną ścieżkę: %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff %s modifies file %s through a symlink: %s"
+msgstr "łatka %s modyfikuje plik %s za pomocą dowiązania symbolicznego: %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "original and modified files are /dev/null in diff '%s' (line %d)"
+msgstr ""
+"oryginalnym i zmodyfikowanym plikiem jest /dev/null w pliku łatki "
+"\"%s\" (linia %d)"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "file removal without proper filename in diff '%s' (line %d)"
+msgstr "usuwanie pliku bez właściwej nazwy w pliku łatki \"%s\" (linia %d)"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff %s removes a non-existing file %s (line %d)"
+msgstr "plik łatki \"%s\" usuwa nieistniejący plik %s (linia %d)"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff '%s' patches something which is not a plain file"
+msgstr "łatka \"%s\" łata coś, co nie jest zwykłym plikiem"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid ""
+"diff '%s' patches files multiple times; split the diff in multiple files or "
+"merge the hunks into a single one"
+msgstr ""
+
+#: scripts/Dpkg/Source/Patch.pm
+#, fuzzy, perl-format
+#| msgid "diff '%s' patches file %s twice"
+msgid "diff '%s' patches file %s more than once"
+msgstr "łatka \"%s\" dwukrotnie łata plik %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "unexpected end of diff '%s'"
+msgstr "niespodziewany koniec łatki \"%s\""
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "expected [ +-] at start of line %d of diff '%s'"
+msgstr "oczekiwano [+-] na początku linii %d pliku łatki \"%s\""
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "expected ^@@ at line %d of diff '%s'"
+msgstr "oczekiwano ^@@ w linii %d pliku łatki \"%s\""
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff '%s' doesn't contain any patch"
+msgstr "łatka \"%s\" nie zawiera żadnej łatki"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "remove patch backup file %s"
+msgstr "usuwanie kopii zapasowej pliku łatki %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "nonexistent"
+msgstr "nieistniejące"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "plain file"
+msgstr "zwykły plik"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "directory"
+msgstr "katalog"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "symlink to %s"
+msgstr "dowiązanie symboliczne do %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "block device"
+msgstr "urządzenie blokowe"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "character device"
+msgstr "urządzenie znakowe"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "named pipe"
+msgstr "nazwany potok"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "named socket"
+msgstr "nazwane gniazdo"
+
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "cannot mkdir %s"
+msgstr "nie można wykonać mkdir %s"
+
+#: scripts/Dpkg/Source/Quilt.pm
+msgid "the patch has fuzz which is not allowed, or is malformed"
+msgstr ""
+"łatka ma rozmycie, które nie jest dozwolone, lub jest niepoprawnie "
+"sformatowana"
+
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "if patch '%s' is correctly applied by quilt, use '%s' to update it"
+msgstr ""
+"jeśli łatka \"%s\" została poprawnie nałożona przez quilt, użyj \"%s\", aby "
+"ją zaktualizować"
+
+#: scripts/Dpkg/Source/Quilt.pm
+msgid ""
+"if the file is present in the unpacked source, make sure it is also present "
+"in the orig tarball"
+msgstr ""
+
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "%s should be a directory or non-existing"
+msgstr "%s powinno być katalogiem lub nie powinno istnieć"
+
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "%s should be a file or non-existing"
+msgstr "%s powinno być plikiem lub nie powinno istnieć"
+
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid ""
+"the series file (%s) contains unsupported options ('%s', line %s); dpkg-"
+"source might fail when applying patches"
+msgstr ""
+"plik serii (%s) zawiera nieobsługiwane opcje (\"%s\", wiersz %s) - dpkg-"
+"source może zawieść przy nakładaniu łatek"
+
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "restoring quilt backup files for %s"
+msgstr "przywracanie plików kopii quilt do %s"
+
+#: scripts/Dpkg/Substvars.pm
+#, perl-format
+msgid "bad line in substvars file %s at line %d"
+msgstr "błędna linia w pliku podstawień %s, w linii %d"
+
+#: scripts/Dpkg/Substvars.pm
+#, fuzzy, perl-format
+#| msgid "invalid source field in %s"
+msgid "invalid source version %s"
+msgstr "niepoprawne pole źródłowe w %s"
+
+#: scripts/Dpkg/Substvars.pm
+#, perl-format
+msgid "too many substitutions - recursive ? - in '%s'"
+msgstr "za dużo podstawień - rekursja? - w \"%s\""
+
+#: scripts/Dpkg/Substvars.pm
+#, fuzzy, perl-format
+#| msgid "unused substitution variable ${%s}"
+msgid "obsolete substitution variable ${%s}"
+msgstr "nieużywana zmienna podstawiania ${%s}"
+
+#: scripts/Dpkg/Substvars.pm
+#, fuzzy, perl-format
+#| msgid "unused substitution variable ${%s}"
+msgid "substitution variable ${%s} used, but is not defined"
+msgstr "nieużywana zmienna podstawiania ${%s}"
+
+#: scripts/Dpkg/Substvars.pm
+#, fuzzy, perl-format
+#| msgid "unused substitution variable ${%s}"
+msgid "substitution variable ${%s} unused, but is defined"
+msgstr "nieużywana zmienna podstawiania ${%s}"
+
+#: scripts/Dpkg/Vars.pm
+#, perl-format
+msgid "source package name '%s' is illegal: %s"
+msgstr "nazwa pakietu źródłowego \"%s\" jest nieprawidłowa: \"%s\""
+
+#: scripts/Dpkg/Vars.pm
+#, perl-format
+msgid "source package has two conflicting values - %s and %s"
+msgstr "pakiet źródłowy ma dwie wartości będące w konflikcie ze sobą - %s i %s"
+
+#: scripts/Dpkg/Vendor.pm
+#, perl-format
+msgid ""
+"%s origin filename is deprecated; it should have only alphanumeric or dash "
+"characters"
+msgstr ""
+
+#: scripts/Dpkg/Vendor.pm
+#, perl-format
+msgid ""
+"%s module name is deprecated; it should be capitalized with only "
+"alphanumeric characters"
+msgstr ""
+
+#: scripts/Dpkg/Vendor/Debian.pm
+#, perl-format
+msgid "unknown host architecture '%s'"
+msgstr "nieznana architektura hosta \"%s\""
+
+#: scripts/Dpkg/Vendor/Ubuntu.pm
+msgid ""
+"Version number suggests Ubuntu changes, but Maintainer: does not have Ubuntu "
+"address"
+msgstr ""
+"Numer wersji sugeruje zmiany z Ubuntu, ale Maintainer: nie określa adresu z "
+"Ubuntu"
+
+#: scripts/Dpkg/Vendor/Ubuntu.pm
+msgid ""
+"Version number suggests Ubuntu changes, but there is no XSBC-Original-"
+"Maintainer field"
+msgstr ""
+"Numer wersji sugeruje zmiany z Ubuntu, ale brak pola XSBC-Original-Maintainer"
+
+#: scripts/Dpkg/Version.pm
+#, perl-format
+msgid "%s is not a valid version"
+msgstr "%s nie jest prawidłową wersją"
+
+#: scripts/Dpkg/Version.pm
+msgid "version number cannot be empty"
+msgstr "numer wersji nie może być pusty"
+
+#: scripts/Dpkg/Version.pm
+#, fuzzy
+#| msgid "epoch part of the version number is not a number: '%s'"
+msgid "epoch part of the version number cannot be empty"
+msgstr "częśc epoki w numerze wersji nie jest liczbą: \"%s\""
+
+#: scripts/Dpkg/Version.pm
+#, fuzzy
+#| msgid "version number cannot be empty"
+msgid "upstream version cannot be empty"
+msgstr "numer wersji nie może być pusty"
+
+#: scripts/Dpkg/Version.pm
+#, fuzzy
+#| msgid "version number cannot be empty"
+msgid "revision cannot be empty"
+msgstr "numer wersji nie może być pusty"
+
+#: scripts/Dpkg/Version.pm
+msgid "version number does not start with digit"
+msgstr "numer wersji nie zaczyna się cyfrą"
+
+#: scripts/Dpkg/Version.pm
+#, perl-format
+msgid "version number contains illegal character '%s'"
+msgstr "numer wersji zawiera niepoprawny znak \"%s\""
+
+#: scripts/Dpkg/Version.pm
+#, perl-format
+msgid "epoch part of the version number is not a number: '%s'"
+msgstr "częśc epoki w numerze wersji nie jest liczbą: \"%s\""
+
+#, fuzzy, perl-format
+#~| msgid "cannot exec dpkg"
+#~ msgid "cannot execute %s program"
+#~ msgstr "uruchamianie dpkg nie powiodło się"
+
+#, fuzzy, perl-format
+#~| msgid "cannot stat file %s"
+#~ msgid "cannot write signature file %s"
+#~ msgstr "nie można ustalić stanu pliku %s"
+
+#, fuzzy, perl-format
+#~| msgid "could not verify signature on %s since gpg isn't installed"
+#~ msgid "cannot import key in %s since GnuPG is not installed"
+#~ msgstr ""
+#~ "nie można zweryfikować sygnatury w %s, ponieważ nie zainstalowano gpg"
+
+#, fuzzy, perl-format
+#~| msgid "cannot rename %s to %s"
+#~ msgid "cannot import key %s into %s"
+#~ msgstr "nie można przemianować %s na %s"
+
+#, fuzzy, perl-format
+#~| msgid "could not verify signature on %s since gpg isn't installed"
+#~ msgid "cannot verify signature on %s since GnuPG is not installed"
+#~ msgstr ""
+#~ "nie można zweryfikować sygnatury w %s, ponieważ nie zainstalowano gpg"
+
+#, fuzzy, perl-format
+#~| msgid "building %s using existing %s"
+#~ msgid "verifying %s using existing %s"
+#~ msgstr "budowanie %s, używając istniejącego %s"
+
+#~ msgid "parse changes file"
+#~ msgstr "przetwarzanie pliku zmian"
+
+#~ msgid "dpkg-genchanges"
+#~ msgstr "dpkg-genchanges"
+
+#, fuzzy, perl-format
+#~| msgid "failed to parse line in %s: %s"
+#~ msgid "failed to import key in %s"
+#~ msgstr "błąd przetwarzania linii w %s: %s"
+
+#, perl-format
+#~ msgid "failed to verify signature on %s"
+#~ msgstr "błąd weryfikowania sygnatury w %s"
+
+#~ msgid "error occurred while parsing %s"
+#~ msgstr "wystąpił błąd podczas przetwarzania %s"
+
+#~ msgid "error occurred while parsing %s field: %s"
+#~ msgstr "wystąpił błąd podczas przetwarzania pola %s: %s"
+
+#~ msgid "'%s' is not a legal architecture string"
+#~ msgstr "\"%s\" nie jest poprawną specyfikacją architektury"
+
+#, fuzzy
+#~| msgid "badly formed line in files list file, line %d"
+#~ msgid "badly formed package name in files list file, line %d"
+#~ msgstr "niepoprawna linia w pliku z listą plików w linii %d"
+
+#~ msgid ""
+#~ "binary package stanza %s is using an obsolete Build-Profiles field syntax"
+#~ msgstr ""
+#~ "binarny wpis o pakiecie %s używa przestarzałej składni pola Build-Profiles"
+
+#~ msgid "format variant must be in lowercase"
+#~ msgstr "wariant formatu musi być zapisany małymi literami"
+
+#~ msgid "invalid Format field '%s'"
+#~ msgstr "niepoprawne pole Format \"%s\""
+
+#~ msgid "cannot create pipe for %s"
+#~ msgstr "nie można utworzyć potoku dla %s"
+
+#~ msgid "tail of %s"
+#~ msgstr "tail na %s"
+
+#~ msgid "unknown substitution variable ${%s}"
+#~ msgstr "nieznana zmienna podstawiania ${%s}"
+
+#~ msgid "%s died from signal %s"
+#~ msgstr "%s zakończony z powodu sygnału %s"
+
+#~ msgid "'hardening' flag found but 'hardening-wrapper' not installed"
+#~ msgstr ""
+#~ "znaleziono flagę \"hardening\", lecz \"hardening-wrapper\" nie jest "
+#~ "zainstalowany"
+
+#~ msgid "overriding %s in environment: %s"
+#~ msgstr "przesłanianie %s w środowisku: %s"
+
+#~ msgid "failed to sign .dsc and .changes file"
+#~ msgstr "błąd podpisywania plików .dsc i .changes"
+
+#, fuzzy
+#~| msgid "illegal package name '%s': %s"
+#~ msgid "illegal .buildinfo ID '%s': %s"
+#~ msgstr "nieprawidłowa nazwa pakietu \"%s\": %s"
+
+#~ msgid "cannot open new output control file '%s'"
+#~ msgstr "nie można otworzyć nowego pliku kontrolnego \"%s\""
+
+#~ msgid "deprecated substitution variable ${%s}"
+#~ msgstr "przestarzała zmienna podstawiania ${%s}"
+
+#, fuzzy
+#~| msgid "Usage: %s [<option>...] [<control-file>]"
+#~ msgid "Usage: %s [<option>...] [<changelog-file>]"
+#~ msgstr "Użycie: %s [<opcja>...] <plik-kontrolny>"
+
+#, fuzzy
+#~| msgid ""
+#~| "Parser options:\n"
+#~| " --format <output-format> see man page for list of available\n"
+#~| " output formats, defaults to 'dpkg'\n"
+#~| " for compatibility with dpkg-dev\n"
+#~| " --since <version>, include all changes later than version\n"
+#~| " -s<version>, -v<version>\n"
+#~| " --until <version>, include all changes earlier than "
+#~| "version\n"
+#~| " -u<version>\n"
+#~| " --from <version>, include all changes equal or later\n"
+#~| " -f<version> than version\n"
+#~| " --to <version>, -t<version> include all changes up to or equal\n"
+#~| " than version\n"
+#~| " --count <number>, include <number> entries from the top\n"
+#~| " -c<number>, -n<number> (or the tail if <number> is lower than "
+#~| "0)\n"
+#~| " --offset <number>, change the starting point for --count,\n"
+#~| " -o<number> counted from the top (or the tail if\n"
+#~| " <number> is lower than 0)\n"
+#~| " --all include all changes\n"
+#~ msgid ""
+#~ "Options:\n"
+#~ " --file <file> changelog <file> to parse (defaults to '-').\n"
+#~ " -l, --label <file> changelog <file> name to use in error "
+#~ "messages.\n"
+#~ " --format <output-format>\n"
+#~ " set the output format (defaults to 'dpkg').\n"
+#~ " --all include all changes.\n"
+#~ " -s, --since <version> include all changes later than <version>.\n"
+#~ " -v <version> ditto.\n"
+#~ " -u, --until <version> include all changes earlier than <version>.\n"
+#~ " -f, --from <version> include all changes equal or later than "
+#~ "<version>.\n"
+#~ " -t, --to <version> include all changes up to or equal than "
+#~ "<version>.\n"
+#~ " -c, --count <number> include <number> entries from the top (or tail "
+#~ "if\n"
+#~ " <number> is lower than 0).\n"
+#~ " -n <number> ditto.\n"
+#~ " -o, --offset <number> change starting point for --count, counted "
+#~ "from\n"
+#~ " the top (or tail if <number> is lower than "
+#~ "0).\n"
+#~ " -?, --help print usage information.\n"
+#~ " -V, --version print version information.\n"
+#~ msgstr ""
+#~ "Opcje parsera:\n"
+#~ " --format <format_wyjścia> listę formatów wyjściowych można znaleźć "
+#~ "na\n"
+#~ " stronie podręcznika, domyślnym jest "
+#~ "\"dpkg\"\n"
+#~ " dla zachowania kompatybilności z dpkg-"
+#~ "dev\n"
+#~ " --since <wersja>, włącza wszystkie zmiany późniejsze od "
+#~ "wersji\n"
+#~ " -s<wersja>, -v<wersja>\n"
+#~ " --until <wersja>, włącza wszystkie zmiany wcześniejsze od "
+#~ "wersji\n"
+#~ " -u<wersja>\n"
+#~ " --from <wersja>, włącza wszystkie zmiany późniejsze od "
+#~ "wersji\n"
+#~ " -f<wersja> lub jej równe\n"
+#~ " --to <wersja>, -t<wersja> włącza wszystkie zmiany aż do danej "
+#~ "wersji,\n"
+#~ " łącznie z tą wersją\n"
+#~ " --count <liczba>, włącza <liczba> początkowych wpisów (lub\n"
+#~ " -c<liczba>, -n<liczba> końcowych, gdy <liczba> jest mniejsza od "
+#~ "0)\n"
+#~ " --offset <liczba>, zmienia punkt początkowy dla --count,\n"
+#~ " -o<liczba> licząc od początku pliku (lub końca,\n"
+#~ " gdy <liczba> jest mniejsza od 0)\n"
+#~ " --all włącza wszystkie zmiany\n"
+
+#~ msgid "output format %s not supported"
+#~ msgstr "wyjściowy format %s nie jest wspierany"
+
+#~ msgid "more than one file specified (%s and %s)"
+#~ msgstr "podano więcej niż jeden plik (%s i %s)"
+
+#~ msgid "format parser %s not executable"
+#~ msgstr "parsera formatu %s nie jest plikiem wykonywalnym"
+
+#~ msgid "output of changelog parser"
+#~ msgstr "wyjście parsera pliku zmian"
+
+#~ msgid "changelog parser %s"
+#~ msgstr "parser pliku zmian %s"
+
+#~ msgid "'%s' is not a legal architecture string."
+#~ msgid_plural "'%s' are not legal architecture strings."
+#~ msgstr[0] "\"%s\" nie jest poprawnym łańcuchem określającym architekturę."
+#~ msgstr[1] "\"%s\" nie są poprawnymi łańcuchami określającymi architekturę."
+#~ msgstr[2] "\"%s\" nie są poprawnymi łańcuchami określającymi architekturę."
+
+#~ msgid ""
+#~ "More options are available but they depend on the source package format.\n"
+#~ "See dpkg-source(1) for more info."
+#~ msgstr ""
+#~ "Dostępnych jest więcej opcji, ale są zależne od formatu pakeitu "
+#~ "źrółowego.\n"
+#~ "Podręcznik dpkg-source(1) zawiera więcej informacji."
+
+#~ msgid "couldn't open %s for reading"
+#~ msgstr "nie można otworzyć %s do odczytu"
+
+#, fuzzy
+#~| msgid "error closing %s: %s"
+#~ msgid "error closing %s (%s)"
+#~ msgstr "błąd zamykania %s: %s"
+
+#~ msgid "couldn't parse date %s"
+#~ msgstr "nie można przetworzyć daty %s"
+
+#~ msgid "%s: unrepresentable changes to source"
+#~ msgstr "%s: niereprezentowalne zmiany w źródle"
+
+#~ msgid "error closing %s ($? %d, $! '%s')"
+#~ msgstr "nie można zamknąć %s ($? %d, $! \"%s\")"
+
+#~ msgid "open new substvars file '%s'"
+#~ msgstr "otwieranie nowego pliku podstawień \"%s\""
+
+#~ msgid "open old varlist file '%s' for reading"
+#~ msgstr "otwieranie do odczytu pliku listy zmiennych \"%s\""
+
+#~ msgid "copy old entry to new varlist file '%s'"
+#~ msgstr "kopiowanie starego wpisu do nowego pliku z listą zmiennych \"%s\""
+
+#~ msgid ""
+#~ "this is currently a non-fatal warning with -S, but will probably become "
+#~ "fatal in the future"
+#~ msgstr ""
+#~ "obecnie jest to tylko niekrytyczne ostrzeżenie generowane, gdy użyje się -"
+#~ "S, lecz prawdopodobnie stanie się krytyczne w przyszłości"
+
+#~ msgid "read changesdescription"
+#~ msgstr "odczytywanie opisu zmian"
+
+#~ msgid "chdir for du to `%s'"
+#~ msgstr "zmiana katalogu dla du na \"%s\""
+
+#~ msgid "du in `%s'"
+#~ msgstr "du na \"%s\""
+
+#~ msgid "du gave unexpected output `%s'"
+#~ msgstr "du wypisało dziwny komunikat \"%s\""
+
+#~ msgid "used that one and ignored data from %s!"
+#~ msgstr "użycie tej wersji i zignorowanie danych z %s!"
+
+#~ msgid "package %s (filename %s) is repeat;"
+#~ msgstr "pakiet %s (plik %s) jest powtórzony;"
+
+#~ msgid ""
+#~ "Usage: %s [<option>...] [<changelogfile>]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -?, --help print usage information\n"
+#~ " --version, -V print version information\n"
+#~ " --label, -l <file> name of the changelog file to\n"
+#~ " use in error messages\n"
+#~ " --file <file> changelog file to parse, defaults\n"
+#~ " to '-' (standard input)\n"
+#~ " --format <outputformat> see man page for list of available\n"
+#~ " output formats, defaults to 'dpkg'\n"
+#~ " for compatibility with dpkg-dev\n"
+#~ " --since, -s, -v <version> include all changes later than version\n"
+#~ " --until, -u <version> include all changes earlier than version\n"
+#~ " --from, -f <version> include all changes equal or later\n"
+#~ " than version\n"
+#~ " --to, -t <version> include all changes up to or equal\n"
+#~ " than version\n"
+#~ " --count, -c, -n <number> include <number> entries from the top\n"
+#~ " (or the tail if <number> is lower than "
+#~ "0)\n"
+#~ " --offset, -o <number> change the starting point for --count,\n"
+#~ " counted from the top (or the tail if\n"
+#~ " <number> is lower than 0)\n"
+#~ " --all include all changes\n"
+#~ msgstr ""
+#~ "Użycie: %s [<opcja>...] [<plik_zmian>]\n"
+#~ "\n"
+#~ "Opcje:\n"
+#~ " -?, --help wyświetla ten komunikat pomocy.\n"
+#~ " --version, -V wyświetla informacje o wersji programu.\n"
+#~ " --label, -l <plik> nazwa pliku zmian używana w komunikatach\n"
+#~ " o błędach\n"
+#~ " --file <plik> plik zmian do przetworzenia, domyślnie "
+#~ "jest\n"
+#~ " nim \"-\" (standardowe wejście)\n"
+#~ " --format <format_wyjścia> listę formatów wyjściowych można znaleźć "
+#~ "na\n"
+#~ " stronie podręcznika, domyślnym jest "
+#~ "\"dpkg\"\n"
+#~ " dla zachowania kompatybilności z dpkg-"
+#~ "dev\n"
+#~ " --since, -s, -v <wersja> włącza wszystkie zmianty późniejsze od "
+#~ "wersji\n"
+#~ " --until, -u <wersja> włącza wszystkie zmiany wcześniejsze od "
+#~ "wersji\n"
+#~ " --from, -f <wersja> włącza wszystkie zmiany późniejsze od "
+#~ "wersji\n"
+#~ " lub jej równe\n"
+#~ " --to, -t <wersja> włącza wszystkie zmiany aż do danej "
+#~ "wersji,\n"
+#~ " łącznie z tą wersją\n"
+#~ " --count, -c, -n <liczba> włącza <liczba> początkowych wpisów (lub\n"
+#~ " końcowych, gdy <liczba> jest mniejsza od "
+#~ "0)\n"
+#~ " --offset, -o <liczba> zmienia punkt początkowy dla --count,\n"
+#~ " licząc od początku pliku (lub końca,\n"
+#~ " gdy <liczba> jest mniejsza od 0)\n"
+#~ " --all włącza wszystkie zmiany\n"
+
+#~ msgid "checksum program gave bogus output `%s'"
+#~ msgstr "dziwne wyjście programu sprawdzania sum kontrolnych: \"%s\""
+
+#~ msgid ""
+#~ "Options passed to dpkg-architecture:\n"
+#~ " -a<arch> Debian architecture we build for.\n"
+#~ " -t<system> set GNU system type."
+#~ msgstr ""
+#~ "Opcje przekazywane do dpkg-architecture:\n"
+#~ " -a<arch> architektura Debiana, na którą odbywa się budowanie.\n"
+#~ " -t<system> ustawia typ systemu GNU."
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -a<debian-arch> set current Debian architecture.\n"
+#~ " -t<gnu-system> set current GNU system type.\n"
+#~ " -f force flag (override variables set in environment)."
+#~ msgstr ""
+#~ "Opcja:\n"
+#~ " -a<arch_debiana> ustawia bieżącą architekturę Debiana.\n"
+#~ " -t<system_gnu> ustawia bieżący typ systemu GNU.\n"
+#~ " -f wymusza flagę (przesłania zmienne w środowisku)."
+
+#~ msgid ""
+#~ "need a command (-x, -b, --before-build, --after-build, --print-format, --"
+#~ "commit)"
+#~ msgstr ""
+#~ "wymaga polecenia (-x, -b, --before-build, --after-build, --print-format, "
+#~ "--commit)"
+
+#~ msgid "only one of -x, -b or --print-format allowed, and only once"
+#~ msgstr "dozwolona tylko jedna z opcji -x, -b lub --print-format i tylko raz"
+
+#~ msgid "binary-only upload - not including any source code"
+#~ msgstr "wydanie tylko binarne - niedołączanie żadnych kodów źródłowych"
+
+#~ msgid "diff %s patches file with unknown escape sequence \\%s"
+#~ msgstr "plik łatki \"%s\" łata plik z nieznaną sekwencją cytowania \\%s"
+
+#~ msgid "open new files list file"
+#~ msgstr "otwieranie nowego pliku z listą plików"
+
+#~ msgid "copy old entry to new files list file"
+#~ msgstr "kopiowanie starego pliku do nowego pliku z listą plików"
+
+#~ msgid "read old files list file"
+#~ msgstr "czytanie starego pliku z listą plików"
+
+#~ msgid "write new entry to new files list file"
+#~ msgstr "zapisywanie nowego wpisu do nowego pliku z listą plików"
+
+#~ msgid "close new files list file"
+#~ msgstr "zamykanie nowego pliku z listą plików"
+
+#~ msgid "cannot read files list file"
+#~ msgstr "nie można odczytać pliku z listą plików"
+
+#~ msgid "duplicate files list entry for package %s (line %d)"
+#~ msgstr "zduplikowany wpis o pakiecie %s w liście plików (linia %d)"
+
+#~ msgid "close old files list file"
+#~ msgstr "zamykanie starego pliku z listą plików"
+
+#~ msgid "internal error"
+#~ msgstr "błąd wewnętrzny"
+
+#~ msgid "fatal error occurred while parsing input"
+#~ msgstr "wystąpił fatalny błąd podczas przetwarzania wejścia"
+
+#~ msgid ""
+#~ "\n"
+#~ "Usage: %s [<options> ...]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -r<gain-root-command>\n"
+#~ " command to gain root privileges (default is fakeroot).\n"
+#~ " -R<rules> rules file to execute (default is debian/rules).\n"
+#~ " -p<sign-command>\n"
+#~ " -d do not check build dependencies and conflicts.\n"
+#~ " -D check build dependencies and conflicts.\n"
+#~ " -T<target> call debian/rules <target> with the proper environment\n"
+#~ " --as-root ensure -T calls the target with root rights\n"
+#~ " -j[<number>] specify jobs to run simultaneously } passed to debian/"
+#~ "rules\n"
+#~ " -k<keyid> the key to use for signing.\n"
+#~ " -sgpg the sign-command is called like GPG.\n"
+#~ " -spgp the sign-command is called like PGP.\n"
+#~ " -us unsigned source.\n"
+#~ " -uc unsigned changes.\n"
+#~ " -a<arch> Debian architecture we build for (implies -d).\n"
+#~ " -b binary-only, do not build source. } also passed to\n"
+#~ " -B binary-only, no arch-indep files. } dpkg-genchanges\n"
+#~ " -A binary-only, only arch-indep files. }\n"
+#~ " -S source only, no binary files. }\n"
+#~ " -F normal full build (binaries and sources).\n"
+#~ " -t<system> set GNU system type. } passed to dpkg-"
+#~ "architecture\n"
+#~ " -v<version> changes since version <version>. }\n"
+#~ " -m<maint> maintainer for package is <maint>. }\n"
+#~ " -e<maint> maintainer for release is <maint>. } only passed\n"
+#~ " -C<descfile> changes are described in <descfile>. } to dpkg-"
+#~ "genchanges\n"
+#~ " -si (default) src includes orig if new upstream. }\n"
+#~ " -sa uploaded src always includes orig. }\n"
+#~ " -sd uploaded src is diff and .dsc only. }\n"
+#~ " -sn force Debian native source format. }\n"
+#~ " -s[sAkurKUR] see dpkg-source for explanation. } only passed\n"
+#~ " -z<level> compression level of source } to dpkg-"
+#~ "source\n"
+#~ " -Z<compressor> compression to use for source }\n"
+#~ " -nc do not clean source tree (implies -b).\n"
+#~ " -tc clean source tree when finished.\n"
+#~ " -ap add pause before starting signature process.\n"
+#~ " -i[<regex>] ignore diffs of files matching regex. } only passed\n"
+#~ " -I[<pattern>] filter out files when building tarballs. } to dpkg-"
+#~ "source\n"
+#~ " --source-option=<opt>\n"
+#~ "\t\t pass option <opt> to dpkg-source\n"
+#~ " --changes-option=<opt>\n"
+#~ "\t\t pass option <opt> to dpkg-genchanges\n"
+#~ " --admindir=<directory>\n"
+#~ " change the administrative directory.\n"
+#~ " -h, --help show this help message.\n"
+#~ " --version show the version.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Użycie: %s [<opcje> ...]\n"
+#~ "\n"
+#~ "Opcje:\n"
+#~ " -r<polecenie_uzysk_praw_administratora>\n"
+#~ " polecenie uzyskiwania praw admin. (domyślnie fakeroot).\n"
+#~ " -R<rules> plik rules do uruchomienia (domyślnie debian/rules).\n"
+#~ " -p<polecenie_podpisywania>\n"
+#~ " -d nie sprawdza zależności i konfliktów czasu budowania.\n"
+#~ " -D sprawdza zależności i konflikty czasu budowania.\n"
+#~ " -T<cel> wywołanie debian/rules <cel> z odpowiednim środowiskiem\n"
+#~ " --as-root zapewnienie, że -T wywoła cel z prawami administratora\n"
+#~ " -j[<liczba>] liczba zadań wykonywanych jednocześnie } przekazywane "
+#~ "do\n"
+#~ " } debian/rules\n"
+#~ " -k<id-klucza> klucz używany do podpisywania.\n"
+#~ " -sgpg polecenie-podpisywania jest wywoływane jak GPG.\n"
+#~ " -spgp polecenie-podpisywania jest wywoływane jak PGP.\n"
+#~ " -us niepodpisywanie źródeł.\n"
+#~ " -uc niepodpisywanie zmian.\n"
+#~ " -a<arch> architektura Debiana, dla której budujemy (implikuje -"
+#~ "d).\n"
+#~ " -b tylko binarne, bez źródeł. } przekazywane\n"
+#~ " -B tylko binarne, bez niezal. od arch. } również do\n"
+#~ " -A tylko binarne, tylko niezal. od arch.} dpkg-genchanges\n"
+#~ " -S tylko źródła, bez binarów. }\n"
+#~ " -F zwykłe pełne wydanie (binaria i źródła).\n"
+#~ " -t<system> ustawia typ systemu GNU. } przekazywane do dpkg-"
+#~ "architecture\n"
+#~ " -v<wersja> zmiany od wersji <wersja>. }\n"
+#~ " -m<opiek> opiekunem pakietu jest <opiek>. }\n"
+#~ " -e<opiek> opiekunem wydania jest <opiek>. } tylko\n"
+#~ " -C<plik-desc> zmiany są opisane w <pliku-desc>. } przekazywane "
+#~ "do\n"
+#~ " -si (domyślne) źródła włączają oryg, jeśli nowsze } dpkg-"
+#~ "genchanges\n"
+#~ " -sa źródła zawsze włączają oryg. }\n"
+#~ " -sd wydanie składa się z tylko diff i .dsc.}\n"
+#~ " -sn wymusza format natywnych źródeł Debiana. } tylko\n"
+#~ " -s[sAkurKUR] patrz opis w dpkg-source } przekazywane "
+#~ "do\n"
+#~ " -z<poziom> poziom kompresji źródeł } dpkg-source\n"
+#~ " -Z<kompresor> typ używanej kompresji źródeł }\n"
+#~ " -nc nie czyści drzewa źródeł (wymusza -b).\n"
+#~ " -tc czyści drzewo źródeł po zakończeniu.\n"
+#~ " -ap dodaje pauzę przez rozpoczęciem podpisywania.\n"
+#~ " -i[<wyr_reg>] ignorowanie różnic pasujących plików. } tylko "
+#~ "przek.\n"
+#~ " -I[<wzorzec>] odfiltrowanie plików podczas budowania tar} do dpkg-"
+#~ "source\n"
+#~ " --source-option=<opc>\n"
+#~ "\t\t przekaż opcję <opc> do dpkg-source\n"
+#~ " --changes-option=<opc>\n"
+#~ "\t\t przekaż opcję <opc> do dpkg-genchanges\n"
+#~ " --admindir=<katalog>\n"
+#~ " zmienia katalog administracyjny.\n"
+#~ " -h, --help wyświetla ten komunikat pomocy.\n"
+#~ " --version wyświetla wersję.\n"
+
+#~ msgid "PGP support is deprecated (see README.feature-removal-schedule)"
+#~ msgstr ""
+#~ "Wsparcie dla PGP jest przestarzałe (patrz README.feature-removal-schedule)"
+
+#~ msgid "will probably become fatal in the future."
+#~ msgstr "jednak w przyszłości zostanie przekształcone w błąd krytyczny."
+
+#~ msgid ""
+#~ "-u, --udeb option is deprecated (see README.feature-removal-schedule)"
+#~ msgstr ""
+#~ "-u, --udeb są opcjami przestarzałymi (patrz README.feature-removal-"
+#~ "schedule)"
+
+#~ msgid ""
+#~ "This source package can only be manipulated using bzr, which is not in "
+#~ "the PATH."
+#~ msgstr ""
+#~ "Tym pakietem źródłowym można zarządzać z użyciem bzr, ale nie ma go w "
+#~ "ścieżce zmiennej PATH."
+
+#~ msgid "source package name `%s' starts with non-alphanum"
+#~ msgstr ""
+#~ "nazwa pakietu źródłowego \"%s\"nie zaczyna się od znaku alfanumerycznego"
+
+#~ msgid ""
+#~ "\n"
+#~ "Copyright (C) 1999-2001 Marcus Brinkmann <brinkmd@debian.org>.\n"
+#~ "Copyright (C) 2004-2005 Scott James Remnant <scott@netsplit.com>."
+#~ msgstr ""
+#~ "\n"
+#~ "Copyright (C) 1999-2001 Marcus Brinkmann <brinkmd@debian.org>.\n"
+#~ "Copyright (C) 2004-2005 Scott James Remnant <scott@netsplit.com>."
+
+#~ msgid ""
+#~ "\n"
+#~ "Copyright (C) 2010-2011 Raphael Hertzog <hertzog@debian.org>."
+#~ msgstr ""
+#~ "\n"
+#~ "Copyright (C) 2010-2011 Raphael Hertzog <hertzog@debian.org>."
+
+#~ msgid ""
+#~ "\n"
+#~ "Copyright (C) 1996 Ian Jackson.\n"
+#~ "Copyright (C) 2000 Wichert Akkerman\n"
+#~ "Copyright (C) 2007 Frank Lichtenheld"
+#~ msgstr ""
+#~ "\n"
+#~ "Copyright (C) 1996 Ian Jackson.\n"
+#~ "Copyright (C) 2000 Wichert Akkerman\n"
+#~ "Copyright (C) 2007 Frank Lichtenheld"
+
+#~ msgid ""
+#~ "\n"
+#~ "Copyright (C) 1996 Ian Jackson."
+#~ msgstr ""
+#~ "\n"
+#~ "Copyright (C) 1996 Ian Jackson."
+
+#~ msgid ""
+#~ "\n"
+#~ "Copyright (C) 1996 Ian Jackson.\n"
+#~ "Copyright (C) 2000,2001 Wichert Akkerman."
+#~ msgstr ""
+#~ "\n"
+#~ "Copyright (C) 1996 Ian Jackson.\n"
+#~ "Copyright (C) 2000,2001 Wichert Akkerman."
+
+#~ msgid ""
+#~ "\n"
+#~ "Copyright (C) 1996 Ian Jackson.\n"
+#~ "Copyright (C) 2000,2002 Wichert Akkerman."
+#~ msgstr ""
+#~ "\n"
+#~ "Copyright (C) 1996 Ian Jackson.\n"
+#~ "Copyright (C) 2000,2002 Wichert Akkerman."
+
+#~ msgid ""
+#~ "\n"
+#~ "Copyright (C) 2007 Raphael Hertzog.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Copyright (C) 2007 Raphael Hertzog.\n"
+
+#~ msgid "Copyright (C) 2009-2010 Raphael Hertzog."
+#~ msgstr "Copyright (C) 2009-2010 Raphael Hertzog."
+
+#~ msgid ""
+#~ "\n"
+#~ "Copyright (C) 1996 Ian Jackson.\n"
+#~ "Copyright (C) 2001 Wichert Akkerman"
+#~ msgstr ""
+#~ "\n"
+#~ "Copyright (C) 1996 Ian Jackson.\n"
+#~ "Copyright (C) 2001 Wichert Akkerman"
+
+#~ msgid ""
+#~ "\n"
+#~ "Copyright (C) 1996 Ian Jackson.\n"
+#~ "Copyright (C) 2000 Wichert Akkerman.\n"
+#~ "Copyright (C) 2006 Frank Lichtenheld.\n"
+#~ "Copyright (C) 2007 Raphael Hertzog.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Copyright (C) 1996 Ian Jackson.\n"
+#~ "Copyright (C) 2000 Wichert Akkerman.\n"
+#~ "Copyright (C) 2006 Frank Lichtenheld.\n"
+#~ "Copyright (C) 2007 Raphael Hertzog.\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "Copyright (C) 1996 Ian Jackson\n"
+#~ "Copyright (C) 1997 Klee Dienes\n"
+#~ "Copyright (C) 2008 Raphael Hertzog"
+#~ msgstr ""
+#~ "\n"
+#~ "Copyright (C) 1996 Ian Jackson\n"
+#~ "Copyright (C) 1997 Klee Dienes\n"
+#~ "Copyright (C) 2008 Raphael Hertzog"
+
+#~ msgid ""
+#~ "\n"
+#~ "Copyright (C) 1996 Ian Jackson.\n"
+#~ "Copyright (C) 2005,2007 Frank Lichtenheld."
+#~ msgstr ""
+#~ "\n"
+#~ "Copyright (C) 1996 Ian Jackson.\n"
+#~ "Copyright (C) 2005,2007 Frank Lichtenheld."
+
+#~ msgid "1 to 3 args expected\n"
+#~ msgstr "Oczekiwano od 1 do 3 argumentów\n"
+
+#~ msgid "no orig.tar file found"
+#~ msgstr "nie znaleziono pliku orig.tar"
+
+#~ msgid "exec %s"
+#~ msgstr "uruchamianie %s"
+
+#~ msgid "git config exited nonzero"
+#~ msgstr "git config zwrócił niezerowy kod wyjścia"
+
+#~ msgid "executable bit set on %s; clearing"
+#~ msgstr "bit wykonywania ustawiony dla %s, usuwanie"
+
+#~ msgid "unable to remove `%s'"
+#~ msgstr "nie można usunąć \"%s\""
+
+#~ msgid "modifying .git/config to comment out some settings"
+#~ msgstr ""
+#~ "modyfikowanie .git/config w celu zamiany na komentarz niektórych ustawień"
+
+#~ msgid "unable to append to %s"
+#~ msgstr "nie można dopisać do %s"
+
+#~ msgid "The following setting(s) were disabled by dpkg-source"
+#~ msgstr "dpkg-source wyłączy następujące ustawienia"
+
+#~ msgid "need -x or -b"
+#~ msgstr "potrzeba -x lub -b"
+
+#~ msgid "objdump on `%s'"
+#~ msgstr "objdump na \"%s\""
+
+#~ msgid "%s: set %s to default value: %s\n"
+#~ msgstr "%s: ustawianie %s na domyślną wartość: %s\n"
+
+#~ msgid "cannot open .dsc file %s"
+#~ msgstr "nie można otworzyć pliku .dsc %s"
+
+#~ msgid "source control file %s"
+#~ msgstr "źródłowy plik kontrolny %s"
+
+#~ msgid "Conflicting sizes `%u' and `%u' for file `%s'"
+#~ msgstr "Konflikt rozmiarów \"%u\" i \"%u\" pliku \"%s\""
+
+#~ msgid "fork for du"
+#~ msgstr "fork dla du"
+
+#~ msgid "source format `%s' discarded: %s"
+#~ msgstr "odrzucony format źródeł \"%s\": %s"
+
+#~ msgid "fork for %s"
+#~ msgstr "fork dla %s"
+
+#~ msgid "Unknown checksum algorithm `%s', ignoring"
+#~ msgstr "Nieznany algorytm sprawdzania sum kontrolnych \"%s\", ignorowanie"
+
+#~ msgid "Checksums-%s field contains bad line `%s'"
+#~ msgstr "Pole Checksums-%s zawiera niepoprawną linię \"%s\""
+
+#~ msgid "file `%s' listed twice in Files field"
+#~ msgstr "plik \"%s\" dwukrotnie wymieniony w polu Fields"
+
+#~ msgid "applying all patches with %s"
+#~ msgstr "nakładanie wszystkich łatek z użyciem %s"
+
+#~ msgid "unable to open substvars file %s: %s"
+#~ msgstr "nie można otworzyć pliku podstawień %s: %s"
+
+#~ msgid "Couldn't call dpkg-deb on %s: %s, skipping package"
+#~ msgstr "Nie można uruchomić dpkg-deb na %s: %s, pomijanie pakietu"
+
+#~ msgid "Couldn't open override file %s"
+#~ msgstr "Nie można otworzyć pliku nadpisań %s"
+
+#~ msgid ""
+#~ "Unprocessed text from %s control file; info:\n"
+#~ "%s / %s"
+#~ msgstr ""
+#~ "Nieprzetworzony tekst z pliku kontrolnego %s - informacje:\n"
+#~ "%s / %s"
+
+#~ msgid "can't read override file %s"
+#~ msgstr "nie można odczytać pliku nadpisań %s"
+
+#~ msgid "error closing override file"
+#~ msgstr "błąd zamknięcia pliku nadpisań"
+
+#~ msgid "can't read source override file %s"
+#~ msgstr "nie można czytać pliku nadpisań źródeł %s"
+
+#~ msgid "error closing source override file"
+#~ msgstr "błąd zapisywania pliku nadpisań źródeł"
+
+#~ msgid "parsing an empty file %s"
+#~ msgstr "przetwarzanie pustego pliku %s"
+
+#~ msgid "fatal error"
+#~ msgstr "fatalny błąd"
+
+#~ msgid "can't open file %s: %s"
+#~ msgstr "nie można otworzyć pliku %s: %s"
+
+#~ msgid "can't load IO::String: %s"
+#~ msgstr "nie można załadować IO::String: %s"
+
+#~ msgid "can't close file %s: %s"
+#~ msgstr "nie można zamknąć pliku %s: %s"
+
+#~ msgid "exec du"
+#~ msgstr "uruchamianie du"
+
+#~ msgid "%s has PGP start token but not end token"
+#~ msgstr ""
+#~ "%s zawiera początkowy znacznik PGP, ale nie zawiera znacznika końcowego"
+
+#~ msgid "can't read %s: %s"
+#~ msgstr "nie można odczytać %s: %s"
+
+#~ msgid "%s invalid (contains blank line)"
+#~ msgstr "niepoprawny %s (zawiera pustą linię)"
+
+#~ msgid "duplicate source field in %s"
+#~ msgstr "zduplikowane pole źródłowe w %s"
+
+#~ msgid "duplicate binary field in %s"
+#~ msgstr "zduplikowane pole binarne w %s"
+
+#~ msgid "can't fork"
+#~ msgstr "błąd fork"
+
+#~ msgid "cannot fork for dpkg --search"
+#~ msgstr "błąd fork dla dpkg --search"
+
+#~ msgid "unable to open ostable"
+#~ msgstr "nie można otworzyć ostable"
+
+#~ msgid "unable to open triplettable"
+#~ msgstr "nie można otworzyć triplettable"
+
+#~ msgid "cannot fork for objdump"
+#~ msgstr "niepowodzenie fork dla objdump"
+
+#~ msgid "can't write %s"
+#~ msgstr "nie można zapisać %s"
+
+#~ msgid "can't read %s"
+#~ msgstr "nie można odczytać %s"
+
+#~ msgid "Strange text from 'md5sum < %s': '%s'"
+#~ msgstr "Dziwny tekst od \"md5sum < %s\": \"%s\""
+
+#~ msgid "Couldn't stat %s"
+#~ msgstr "Nie można ustalić stanu %s"
+
+#~ msgid "error doing fstat on %s:"
+#~ msgstr "błąd przy ustalaniu stanu (fstat) dla %s:"
+
+#~ msgid "can't dup %s:"
+#~ msgstr "nie można dup %s:"
+
+#~ msgid "can't rewind %s:"
+#~ msgstr "nie można przewinąć %s:"
+
+#~ msgid "can't exec md5sum:"
+#~ msgstr "nie można uruchomić md5sum:"
+
+#~ msgid "invalid md5 output for %s (%s)"
+#~ msgstr "niepoprawny skrót md5 dla (%s) %s"
+
+#~ msgid "Usage: 822-date"
+#~ msgstr "Użycie: 822-date"
+
+#~ msgid "This program is deprecated. Please use 'date -R' instead."
+#~ msgstr "Ten program jest przestarzały. Proszę używać \"date -R\"."
+
+#~ msgid "cannot combine %s and -S"
+#~ msgstr "nie można łączyć %s i -S"
+
+#~ msgid ""
+#~ "substvars support is deprecated (see README.feature-removal-schedule)"
+#~ msgstr ""
+#~ "wsparcie dla substvars jest przestarzałe (patrz README.feature-removal-"
+#~ "schedule)"
+
+#~ msgid "Dpkg::Deps::Simple can't evaluate implication with a %s!"
+#~ msgstr "Dpkg::Deps::Simple nie może przetworzyć wynikania zależności z %s!"
+
+#~ msgid "failure"
+#~ msgstr "niepowodzenie"
+
+#~ msgid "field %s has newline then non whitespace >%s<"
+#~ msgstr ""
+#~ "pole %s ma znak nowej linii, po której nie następuje biały znak >%s<"
+
+#~ msgid "field %s has blank lines >%s<"
+#~ msgstr "pole %s ma puste linie >%s<"
+
+#~ msgid "field %s has trailing newline >%s<"
+#~ msgstr "pole %s kończy się znakiem nowej linii >%s<"
+
+#~ msgid "invalid exec parameter in fork_and_exec()"
+#~ msgstr "niepoprawny parametr \"exec\" w fork_and_exec()"
+
+#~ msgid "no PID set, cannot wait end of process"
+#~ msgstr "nie ustawiono PID, nie można oczekiwać na zakończenie procesu"
+
+#~ msgid "tried to add file `%s' twice"
+#~ msgstr "próbowano dwukrotnie dodać plik \"%s\""
diff --git a/scripts/po/pt.gmo b/scripts/po/pt.gmo
new file mode 100644
index 0000000..29c884c
--- /dev/null
+++ b/scripts/po/pt.gmo
Binary files differ
diff --git a/scripts/po/pt.po b/scripts/po/pt.po
new file mode 100644
index 0000000..a98cabd
--- /dev/null
+++ b/scripts/po/pt.po
@@ -0,0 +1,4234 @@
+# Translation of dpkg-dev to european Portuguese
+# Copyright © 1994-2023 Dpkg Developers
+# This file is distributed under the same license as the dpkg package.
+#
+# Américo Monteiro <a_monteiro@gmx.com>, 2023.
+msgid ""
+msgstr ""
+"Project-Id-Version: dpkg-dev 1.22.0\n"
+"Report-Msgid-Bugs-To: debian-dpkg@lists.debian.org\n"
+"POT-Creation-Date: 2023-05-11 02:03+0000\n"
+"PO-Revision-Date: 2023-03-08 22:31+0000\n"
+"Last-Translator: Américo Monteiro <a_monteiro@gmx.com>\n"
+"Language-Team: Portuguese <>\n"
+"Language: pt\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Lokalize 20.12.0\n"
+
+#: scripts/dpkg-architecture.pl scripts/dpkg-buildflags.pl
+#: scripts/dpkg-buildpackage.pl scripts/dpkg-checkbuilddeps.pl
+#: scripts/dpkg-distaddfile.pl scripts/dpkg-genbuildinfo.pl
+#: scripts/dpkg-genchanges.pl scripts/dpkg-gencontrol.pl
+#: scripts/dpkg-gensymbols.pl scripts/dpkg-mergechangelogs.pl
+#: scripts/dpkg-name.pl scripts/dpkg-parsechangelog.pl
+#: scripts/dpkg-scanpackages.pl scripts/dpkg-scansources.pl
+#: scripts/dpkg-shlibdeps.pl scripts/dpkg-source.pl scripts/dpkg-vendor.pl
+#, perl-format
+msgid "Debian %s version %s.\n"
+msgstr "Debian %s versão %s.\n"
+
+#: scripts/dpkg-architecture.pl scripts/dpkg-buildflags.pl
+#: scripts/dpkg-buildpackage.pl scripts/dpkg-distaddfile.pl
+#: scripts/dpkg-genbuildinfo.pl scripts/dpkg-genchanges.pl
+#: scripts/dpkg-gencontrol.pl scripts/dpkg-gensymbols.pl
+#: scripts/dpkg-parsechangelog.pl scripts/dpkg-shlibdeps.pl
+#: scripts/dpkg-source.pl scripts/dpkg-vendor.pl
+msgid ""
+"\n"
+"This is free software; see the GNU General Public License version 2 or\n"
+"later for copying conditions. There is NO warranty.\n"
+msgstr ""
+"\n"
+"Isto é software livre; veja a GNU General Public License versão 2 ou\n"
+"posterior para condições de cópia. NÃO há garantia.\n"
+
+#: scripts/dpkg-architecture.pl scripts/dpkg-vendor.pl
+#, perl-format
+msgid "Usage: %s [<option>...] [<command>]"
+msgstr "Utilização: %s [<opção>...] [<comando>]"
+
+#: scripts/dpkg-architecture.pl
+msgid ""
+"Commands:\n"
+" -l, --list list variables (default).\n"
+" -L, --list-known list valid architectures (matching some "
+"criteria).\n"
+" -e, --equal <arch> compare with host Debian architecture.\n"
+" -i, --is <arch-wildcard> match against host Debian architecture.\n"
+" -q, --query <variable> prints only the value of <variable>.\n"
+" -s, --print-set print command to set environment variables.\n"
+" -u, --print-unset print command to unset environment variables.\n"
+" -c, --command <command> set environment and run the command in it.\n"
+" -?, --help show this help message.\n"
+" --version show the version."
+msgstr ""
+"Comandos:\n"
+" -l, --list lista variáveis (predefinição).\n"
+" -L, --list-known lista arquitecturas válidas (que correspondem a "
+"algum critério).\n"
+" -e, --equal <arch> compara com a arquitectura Debian do anfitrião.\n"
+" -i, --is <arch-wildcard> corresponde contra arquitectura Debian do "
+"anfitrião.\n"
+" -q, --query <variable> escreve apenas o valor de <variable>.\n"
+" -s, --print-set escreve o comando para definir variáveis de "
+"ambiente.\n"
+" -u, --print-unset escreve o comando para desconfigurar variáveis "
+"de ambiente.\n"
+" -c, --command <command> defini o ambiente e correr o comando nele.\n"
+" -?, --help mostra esta mensagem de ajuda.\n"
+" --version mostra a versão."
+
+#: scripts/dpkg-architecture.pl
+msgid ""
+"Options:\n"
+" -a, --host-arch <arch> set host Debian architecture.\n"
+" -t, --host-type <type> set host GNU system type.\n"
+" -A, --target-arch <arch> set target Debian architecture.\n"
+" -T, --target-type <type> set target GNU system type.\n"
+" -W, --match-wildcard <arch-wildcard>\n"
+" restrict architecture list matching <arch-"
+"wildcard>.\n"
+" -B, --match-bits <arch-bits>\n"
+" restrict architecture list matching <arch-"
+"bits>.\n"
+" -E, --match-endian <arch-endian>\n"
+" restrict architecture list matching <arch-"
+"endian>.\n"
+" --print-format <format>\n"
+" use <format> for --print-set and --print-unset,\n"
+" allowed values: shell (default), make.\n"
+" -f, --force force flag (override variables set in "
+"environment)."
+msgstr ""
+"Opções:\n"
+" -a, --host-arch <arch> define a arquitectura Debian do anfitrião.\n"
+" -t, --host-type <type> define o tipo de sistema GNU do anfitrião.\n"
+" -A, --target-arch <arch> define a arquitectura Debian do alvo.\n"
+" -T, --target-type <type> define o tipo de sistema GNU do alvo.\n"
+" -W, --match-wildcard <arch-wildcard>\n"
+" restringe a lista de arquitecturas a "
+"corresponder a <arch-wildcard>.\n"
+" -B, --match-bits <arch-bits>\n"
+" restringe a lista de arquitecturas a "
+"corresponder a <arch-bits>.\n"
+" -E, --match-endian <arch-endian>\n"
+" restringe a lista de arquitecturas a "
+"corresponder a <arch-endian>.\n"
+" --print-format <format>\n"
+" usa <format> para --print-set e --print-unset,\n"
+" valores permitidos: shell (predefinido), "
+"make.\n"
+" -f, --force força bandeira (sobrepõe as variáveis definidas "
+"em ambiente)."
+
+#: scripts/dpkg-architecture.pl
+#, perl-format
+msgid "unknown Debian architecture %s, you must specify GNU system type, too"
+msgstr ""
+"arquitectura Debian desconhecida %s, você também tem de especificar o tipo "
+"de sistema GNU"
+
+#: scripts/dpkg-architecture.pl
+#, perl-format
+msgid "unknown GNU system type %s, you must specify Debian architecture, too"
+msgstr ""
+"tipo de sistema GNU desconhecido %s, você também tem de especificar a "
+"arquitectura Debian"
+
+#: scripts/dpkg-architecture.pl
+#, perl-format
+msgid "unknown default GNU system type for Debian architecture %s"
+msgstr ""
+"desconhecido o tipo de sistema GNU predefinido para a arquitectura Debian %s"
+
+#: scripts/dpkg-architecture.pl
+#, perl-format
+msgid ""
+"default GNU system type %s for Debian arch %s does not match specified GNU "
+"system type %s"
+msgstr ""
+"o tipo de sistema GNU predefinido %s para arquitectura Debian %s não "
+"corresponde ao tipo e sistema GNU especificado %s"
+
+#: scripts/dpkg-architecture.pl
+#, perl-format
+msgid "%s is not a supported print format"
+msgstr "%s não é um formato de escrita suportado"
+
+#: scripts/dpkg-architecture.pl
+#, perl-format
+msgid "%s is not a supported variable name"
+msgstr "%s não é um nome de variável suportado"
+
+#: scripts/dpkg-architecture.pl scripts/dpkg-buildflags.pl
+#: scripts/dpkg-distaddfile.pl scripts/dpkg-genbuildinfo.pl
+#: scripts/dpkg-genchanges.pl scripts/dpkg-gencontrol.pl
+#: scripts/dpkg-gensymbols.pl scripts/dpkg-name.pl
+#: scripts/dpkg-parsechangelog.pl scripts/dpkg-shlibdeps.pl
+#: scripts/dpkg-vendor.pl
+#, perl-format
+msgid "unknown option '%s'"
+msgstr "opção desconhecida '%s'"
+
+#: scripts/dpkg-architecture.pl
+#, perl-format
+msgid ""
+"specified GNU system type %s does not match CC system type %s, try setting a "
+"correct CC environment variable"
+msgstr ""
+"o tipo de sistema GNU especificado %s não corresponde ao tipo de sistema CC "
+"%s, tente definir uma variável de ambiente CC correta"
+
+#: scripts/dpkg-architecture.pl scripts/dpkg-shlibdeps.pl scripts/Dpkg/IPC.pm
+#: scripts/Dpkg/Shlibs/Cppfilt.pm
+#, perl-format
+msgid "unable to execute %s"
+msgstr "incapaz de executar %s"
+
+#: scripts/dpkg-buildflags.pl
+#, perl-format
+msgid "Usage: %s [<command>]"
+msgstr "Utilização: %s [<comando>]"
+
+#: scripts/dpkg-buildflags.pl
+msgid ""
+"Commands:\n"
+" --get <flag> output the requested flag to stdout.\n"
+" --origin <flag> output the origin of the flag to stdout:\n"
+" value is one of vendor, system, user, env.\n"
+" --status output a synopsis with all parameters affecting the\n"
+" program behaviour, the resulting flags and their "
+"origin.\n"
+" --query like --status, but in deb822 format.\n"
+" --query-features <area>\n"
+" output the status of features for the given area.\n"
+" --list output a list of the flags supported by the current "
+"vendor.\n"
+" --export=(sh|make|cmdline|configure)\n"
+" output something convenient to import the compilation\n"
+" flags in a shell script, in make, or in a command "
+"line.\n"
+" --dump output all compilation flags with their values.\n"
+" --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+"Comandos:\n"
+" --get <flag> envia a bandeira requerida para o stdout.\n"
+" --origin <flag> envia a origem da bandeira para o stdout:\n"
+" valor e um de vendor, system, user, env.\n"
+" --status escreve um resumo de todos os parâmetros que afectam o\n"
+" comportamento do programa, as bandeiras resultantes e "
+"sua origem.\n"
+" --query como --status, mas em formato deb822.\n"
+" --query-features <area>\n"
+" escreve o estado das funcionalidades da área dada.\n"
+" --list escreve uma lista das bandeiras suportadas pelo "
+"fornecedor actual.\n"
+" --export=(sh|make|cmdline|configure)\n"
+" escreve algo conveniente para importar as bandeiras de\n"
+" compilação num script de shell, no make, ou numa linha "
+"de comandos.\n"
+" --dump escreve todas as bandeiras de compilação com os seus "
+"valores.\n"
+" --help mostra esta mensagem de ajuda.\n"
+" --version mostra a versão.\n"
+
+#: scripts/dpkg-buildflags.pl scripts/dpkg-source.pl scripts/dpkg-vendor.pl
+#, perl-format
+msgid "two commands specified: --%s and --%s"
+msgstr "dois comandos especificados: --%s e --%s"
+
+#: scripts/dpkg-buildflags.pl scripts/dpkg-vendor.pl
+#, perl-format
+msgid "%s needs a parameter"
+msgstr "%s precisa dum parâmetro"
+
+#: scripts/dpkg-buildpackage.pl scripts/dpkg-genbuildinfo.pl
+#: scripts/dpkg-genchanges.pl scripts/dpkg-gencontrol.pl
+#: scripts/dpkg-gensymbols.pl scripts/dpkg-parsechangelog.pl
+#, perl-format
+msgid "Usage: %s [<option>...]"
+msgstr "Utilização: %s [<opção>...]"
+
+#: scripts/dpkg-buildpackage.pl
+msgid ""
+"Options:\n"
+" --build=<type>[,...] specify the build <type>: full, source, "
+"binary,\n"
+" any, all (default is 'full').\n"
+" -F, --build=full normal full build (source and binary; "
+"default).\n"
+" -g, --build=source,all source and arch-indep build.\n"
+" -G, --build=source,any source and arch-specific build.\n"
+" -b, --build=binary binary-only, no source files.\n"
+" -B, --build=any binary-only, only arch-specific files.\n"
+" -A, --build=all binary-only, only arch-indep files.\n"
+" -S, --build=source source-only, no binary files.\n"
+" -nc, --no-pre-clean do not pre clean source tree (implies -b).\n"
+" --pre-clean pre clean source tree (default).\n"
+" --no-post-clean do not post clean source tree (default).\n"
+" -tc, --post-clean post clean source tree.\n"
+" --sanitize-env sanitize the build environment.\n"
+" -D, --check-builddeps check build dependencies and conflicts "
+"(default).\n"
+" -d, --no-check-builddeps do not check build dependencies and "
+"conflicts.\n"
+" --ignore-builtin-builddeps\n"
+" do not check builtin build dependencies.\n"
+" -P, --build-profiles=<profiles>\n"
+" assume comma-separated build <profiles> as "
+"active.\n"
+" --rules-requires-root assume legacy Rules-Requires-Root field "
+"value.\n"
+" -R, --rules-file=<rules> rules file to execute (default is debian/"
+"rules).\n"
+" -T, --rules-target=<target> call debian/rules <target>.\n"
+" --as-root ensure -T calls the target with root rights.\n"
+" -j, --jobs[=<jobs>|auto] jobs to run simultaneously (passed to "
+"<rules>),\n"
+" (default; default is auto, opt-in mode).\n"
+" -J, --jobs-try[=<jobs>|auto]\n"
+" alias for -j, --jobs.\n"
+" --jobs-force[=<jobs>|auto]\n"
+" jobs to run simultaneously (passed to "
+"<rules>),\n"
+" (default is auto, forced mode).\n"
+" -r, --root-command=<command>\n"
+" command to gain root rights (default is "
+"fakeroot).\n"
+" --check-command=<command>\n"
+" command to check the .changes file (no "
+"default).\n"
+" --check-option=<opt> pass <opt> to check <command>.\n"
+" --hook-<name>=<command> set <command> as the hook <name>, known "
+"hooks:\n"
+" init preclean source build binary buildinfo\n"
+" changes postclean check sign done\n"
+" --buildinfo-file=<file> set the .buildinfo filename to generate.\n"
+" --buildinfo-option=<opt>\n"
+" pass option <opt> to dpkg-genbuildinfo.\n"
+" --changes-file=<file> set the .changes filename to generate.\n"
+" --sign-backend=<backend>\n"
+" OpenPGP backend to use to sign\n"
+" (default is auto).\n"
+" -p, --sign-command=<command>\n"
+" command to sign .dsc and/or .changes files\n"
+" (default is gpg).\n"
+" --sign-keyfile=<file> the key file to use for signing.\n"
+" -k, --sign-keyid=<keyid> the key id to use for signing.\n"
+" --sign-key=<keyid> alias for -k, --sign-keyid.\n"
+" -ap, --sign-pause add pause before starting signature process.\n"
+" -us, --unsigned-source unsigned source package.\n"
+" -ui, --unsigned-buildinfo unsigned .buildinfo file.\n"
+" -uc, --unsigned-changes unsigned .buildinfo and .changes file.\n"
+" --no-sign do not sign any file.\n"
+" --force-sign force signing the resulting files.\n"
+" --admindir=<directory> change the administrative directory.\n"
+" -?, --help show this help message.\n"
+" --version show the version."
+msgstr ""
+"Opções:\n"
+" --build=<tipo>[,...] especifica o <tipo> de compilação: full, "
+"source, binary,\n"
+" qualquer, tudo (a predefinição é 'full').\n"
+" -F, --build=full compilação completa normal (fonte e binário; "
+"predefinição).\n"
+" -g, --build=source,all compilação de fonte e independente de "
+"arquitectura.\n"
+" -G, --build=source,any compilação de fonte e especifica de "
+"arquitectura.\n"
+" -b, --build=binary apenas-binário, nenhuns ficheiros de fonte.\n"
+" -B, --build=any apenas-binário, apenas ficheiros específicos "
+"de arquitectura.\n"
+" -A, --build=all apenas-binário, apenas ficheiros independentes "
+"de arquitectura.\n"
+" -S, --build=source apenas fonte, nenhuns ficheiros binários.\n"
+" -nc, --no-pre-clean não faz pré limpeza da árvore fonte (implica -"
+"b).\n"
+" --pre-clean faz pré limpeza da árvore fonte "
+"(predefinido).\n"
+" --no-post-clean não faz limpeza posterior da árvore fonte "
+"(predefinido).\n"
+" -tc, --post-clean faz limpeza posterior da árvore fonte.\n"
+" --sanitize-env higieniza o ambiente de compilação.\n"
+" -D, --check-builddeps verifica por dependências e conflitos de "
+"compilação (predefinido).\n"
+" -d, --no-check-builddeps não verifica por dependências e conflitos de "
+"compilação.\n"
+" --ignore-builtin-builddeps\n"
+" não verifica por dependências de compilação "
+"embutidas.\n"
+" -P, --build-profiles=<profiles>\n"
+" assume <profiles> de compilação separados por "
+"vírgulas como activos.\n"
+" --rules-requires-root assume valor de campo Rules-Requires-Root "
+"antigo.\n"
+" -R, --rules-file=<rules> ficheiro de regras a executar (a predefinição "
+"é debian/rules).\n"
+" -T, --rules-target=<alvo> chama debian/rules <alvo>.\n"
+" --as-root assegura que -T chama o alvo com privilégios "
+"de root.\n"
+" -j, --jobs[=<jobs>|auto] trabalhos a correr em simultâneo (passado a "
+"<rules>),\n"
+" (predefinição; a predefinição é auto, modo "
+"opt-in).\n"
+" -J, --jobs-try[=<jobs>|auto]\n"
+" nome alternativo para -j, --jobs.\n"
+" --jobs-force[=<jobs>|auto]\n"
+" trabalhos a correr em simultâneo (passado ao "
+"<rules>),\n"
+" (predefinição é auto, modo forçado).\n"
+" -r, --root-command=<comando>\n"
+" comando para ganhar privilégios de root (a "
+"predefinição é fakeroot).\n"
+" --check-command=<comando>\n"
+" comando para verificar o ficheiro .changes "
+"(nenhuma predefinição).\n"
+" --check-option=<opt> passa <opt> ao <comando> de verificação.\n"
+" --hook-<nome>=<comando> define <comando> como o <nome>de hook, hooks "
+"conhecidos:\n"
+" init preclean source build binary buildinfo\n"
+" changes postclean check sign done\n"
+" --buildinfo-file=<file> define o nome de ficheiro .buildinfo a gerar.\n"
+" --buildinfo-option=<opt>\n"
+" passa opção <opt> ao dpkg-genbuildinfo.\n"
+" --changes-file=<file> define o nome de ficheiro .changes a gerar.\n"
+" --sign-backend=<backend>\n"
+" backend OpenPGP a usar apara assinar\n"
+" (predefinição é auto .\n"
+" -p, --sign-command=<command>\n"
+" comando para assinar ficheiros .dsc e/ou ."
+"changes\n"
+" (predefinição é gpg).\n"
+" --sign-keyfile=<file> o ficheiro chave a usar para assinatura.\n"
+" -k, --sign-keyid=<keyid> o id de chave a usar para assinatura.\n"
+" --sign-key=<keyid> nome alternativo para -k, --sign-keyid.\n"
+" -ap, --sign-pause adiciona pausa antes de arrancar o processo de "
+"assinatura.\n"
+" -us, --unsigned-source pacote fonte não assinado.\n"
+" -ui, --unsigned-buildinfo ficheiro .buildinfo não assinado.\n"
+" -uc, --unsigned-changes ficheiros .buildinfo e .changes não "
+"assinados.\n"
+" --no-sign não assina nenhum ficheiro.\n"
+" --force-sign força a assinatura dos ficheiros resultantes.\n"
+" --admindir=<directory> muda o directório administrativo.\n"
+" -?, --help mostra esta mensagem de ajuda.\n"
+" --version mostra a versão."
+
+#: scripts/dpkg-buildpackage.pl
+msgid ""
+"Options passed to dpkg-architecture:\n"
+" -a, --host-arch <arch> set the host Debian architecture.\n"
+" -t, --host-type <type> set the host GNU system type.\n"
+" --target-arch <arch> set the target Debian architecture.\n"
+" --target-type <type> set the target GNU system type."
+msgstr ""
+"Opções passadas ao dpkg-architecture:\n"
+" -a, --host-arch <arch> define a arquitectura anfitriã Debian.\n"
+" -t, --host-type <type> define o tipo de sistema GNU anfitrião.\n"
+" --target-arch <arch> define a arquitectura alvo Debian.\n"
+" --target-type <type> define o tipo de sistema GNU alvo."
+
+#: scripts/dpkg-buildpackage.pl
+msgid ""
+"Options passed to dpkg-genchanges:\n"
+" -si source includes orig, if new upstream "
+"(default).\n"
+" -sa source includes orig, always.\n"
+" -sd source is diff and .dsc only.\n"
+" -v<version> changes since version <version>.\n"
+" -m, --source-by=<maint> maintainer for this source or build is "
+"<maint>.\n"
+" --build-by=<maint> ditto.\n"
+" -e, --release-by=<maint> maintainer for this change or release is "
+"<maint>.\n"
+" --changed-by=<maint> ditto.\n"
+" -C<descfile> changes are described in <descfile>.\n"
+" --changes-option=<opt> pass option <opt> to dpkg-genchanges."
+msgstr ""
+"Opções passadas ao dpkg-genchanges:\n"
+" -si fonte inclui orig, se novo original de autor "
+"(predefinição).\n"
+" -sa fonte inclui orig, sempre.\n"
+" -sd fonte é diff e .dsc apenas.\n"
+" -v<version> alterações desde versão <version>.\n"
+" -m, --source-by=<maint> maintainer para esta fonte ou compilação é "
+"<maint>.\n"
+" --build-by=<maint> idem.\n"
+" -e, --release-by=<maint> maintainer para esta alteração ou lançamento é "
+"<maint>.\n"
+" --changed-by=<maint> idem.\n"
+" -C<descfile> alterações estão descritas em <descfile>.\n"
+" --changes-option=<opt> passa opção <opt> ao dpkg-genchanges."
+
+#: scripts/dpkg-buildpackage.pl
+msgid ""
+"Options passed to dpkg-source:\n"
+" -sn force Debian native source format.\n"
+" -s[sAkurKUR] see dpkg-source for explanation.\n"
+" -z, --compression-level=<level>\n"
+" compression level to use for source.\n"
+" -Z, --compression=<compressor>\n"
+" compression to use for source (gz|xz|bzip2|"
+"lzma).\n"
+" -i, --diff-ignore[=<regex>] ignore diffs of files matching <regex>.\n"
+" -I, --tar-ignore[=<pattern>]\n"
+" filter out files when building tarballs.\n"
+" --source-option=<opt> pass option <opt> to dpkg-source.\n"
+msgstr ""
+"Opções passadas ao dpkg-source:\n"
+" -sn força formato fonte nativo de Debian.\n"
+" -s[sAkurKUR] veja dpkg-source para explicação.\n"
+" -z, --compression-level=<level>\n"
+" nível de compressão a usar para fonte.\n"
+" -Z, --compression=<compressor>\n"
+" compressão a usar para fonte (gz|xz|bzip2|"
+"lzma).\n"
+" -i, --diff-ignore[=<regex>] ignora diffs de ficheiros que correspondem "
+"<regex>.\n"
+" -I, --tar-ignore[=<pattern>]\n"
+" filtra de fora ficheiros quando ao compilar "
+"tarballs.\n"
+" --source-option=<opt> passa opção <opt> ao dpkg-source.\n"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "missing .buildinfo filename"
+msgstr "nome de ficheiro .buildinfo em falta"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "passing %s via %s is not supported; please use %s instead"
+msgstr "passar %s via %s não é suportado; por favor use %s em vez disto"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "missing .changes filename"
+msgstr "nome de ficheiro .changes em falta"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "unknown hook name %s"
+msgstr "nome de hook desconhecido %s"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "missing hook %s command"
+msgstr "comando %s hook em falta"
+
+#: scripts/dpkg-buildpackage.pl scripts/dpkg-genbuildinfo.pl
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid "%s is deprecated; it is without effect"
+msgstr "%s está descontinuado; não tem nenhum efeito"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "-s%s is deprecated; always using gpg style interface"
+msgstr "-s%s está descontinuado; a usar sempre a interface estilo gpg"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "unknown option or argument %s"
+msgstr "opção ou argumento desconhecido %s"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "option %s is only meaningful with option %s"
+msgstr "a opção %s tem apenas significado com a opção %s"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "check-command '%s' not found"
+msgstr "comando-verificador '%s' não encontrado"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "sign-command '%s' not found"
+msgstr "comando-assinar '%s' não encontrado"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source package"
+msgstr "pacote fonte"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source version"
+msgstr "versão fonte"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source distribution"
+msgstr "distribuição fonte"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source changed by"
+msgstr "fonte alterada por"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "host architecture"
+msgstr "arquitectura anfitriã"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "debian/rules is not executable; fixing that"
+msgstr "debian/rules não é executável, a corrigir isso"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "build dependencies/conflicts unsatisfied; aborting"
+msgstr "dependências/conflitos de compilação não satisfeitos; a abortar"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "(Use -d flag to override.)"
+msgstr "(Use a bandeira -d para sobrepor.)"
+
+#: scripts/dpkg-buildpackage.pl
+msgid ""
+"building a source package without cleaning up as you asked; it might contain "
+"undesired files"
+msgstr ""
+"compilar um pacote fonte sem a limpeza como você pediu; pode conter "
+"ficheiros indesejados"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "Press <enter> to start the signing process.\n"
+msgstr "Pressione <enter> para iniciar o processo de assinatura.\n"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "not signing UNRELEASED build; use --force-sign to override"
+msgstr "a não assinar compilação UNRELEASED; use --force-sign para sobrepor"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "unable to determine %s"
+msgstr "incapaz de determinar %s"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "using a gain-root-command while being root"
+msgstr "a usar um comando de ganhar-root quando já é root"
+
+#: scripts/dpkg-buildpackage.pl
+msgid ""
+"fakeroot not found, either install the fakeroot\n"
+"package, specify a command with the -r option, or run this as root"
+msgstr ""
+"fakeroot não encontrado, ou instala ou pacote fakeroot,\n"
+"especifica um comando com a opção -r, ou corre isto como root"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "gain-root-command '%s' not found"
+msgstr "comando-de-obter-root '%s' não encontrado"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "disallowed target in %s field keyword \"%s\""
+msgstr "alvo não autorizado em palavra-chave do campo %s \"%s\""
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "%s field keyword \"%s\" is unknown in dpkg namespace"
+msgstr "campo %s palavra chave \"%s\" é desconhecida no nome de espaço do dpkg"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "%s field keyword \"%s\" is uppercase; use \"%s\" instead"
+msgstr ""
+"campo %s palavra chave \"%s\" está em maiúsculas; use \"%s\" em vez disto"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "%s field keyword \"%s\" is invalid; use \"%s\" instead"
+msgstr "campo %s palavra chave \"%s\" é inválido; use \"%s\" em vez disto"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "%s field keyword \"%s\" is unknown"
+msgstr "campo %s palavra chave \"%s\" é desconhecido"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "field %s contains duplicate keyword \"%s\""
+msgstr "campo %s contém palavra-chave duplicada \"%s\""
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "%s field contains both global and implementation specific keywords"
+msgstr ""
+"campo %s contém ambas palavras chave globais e específicas de implementação"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "unknown %% substitution in hook: %%%s"
+msgstr "substituição %% desconhecida no hook: %%%s"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid ""
+"short OpenPGP key IDs are broken; please use key fingerprints in %s or %s "
+"instead"
+msgstr ""
+"IDs de chave OpenPGP curtos são estragados; por favor use fingerprints de "
+"chave em %s ou %s em vez disto"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid ""
+"long OpenPGP key IDs are strongly discouraged; please use key fingerprints "
+"in %s or %s instead"
+msgstr ""
+"IDs de chave OpenPGP longos são fortemente desencorajados; por favor use "
+"fingerprints de chave em %s ou %s em vez disto"
+
+#: scripts/dpkg-buildpackage.pl scripts/dpkg-checkbuilddeps.pl
+#: scripts/dpkg-genbuildinfo.pl scripts/dpkg-name.pl scripts/Dpkg/Arch.pm
+#: scripts/Dpkg/IPC.pm scripts/Dpkg/Shlibs.pm
+#, perl-format
+msgid "cannot open %s"
+msgstr "incapaz de abrir %s"
+
+#: scripts/dpkg-buildpackage.pl scripts/dpkg-distaddfile.pl
+#: scripts/dpkg-genbuildinfo.pl scripts/dpkg-gencontrol.pl
+#: scripts/Dpkg/Interface/Storable.pm scripts/Dpkg/Source/Package/V2.pm
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot close %s"
+msgstr "não pode fechar %s"
+
+#: scripts/dpkg-buildpackage.pl scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "cannot move %s to %s"
+msgstr "não pode mover %s para %s"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "failed to sign %s file: %s"
+msgstr "falha ao assinar ficheiro %s: %s"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source-only upload: Debian-native package"
+msgstr "upload apenas-fonte: pacote Debian-nativo"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source-only, diff-only upload (original source NOT included)"
+msgstr "upload apenas-fonte, apenas diff (fonte original NÃO incluída)"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source-only upload (original source is included)"
+msgstr "upload apenas-fonte (fonte original é incluída)"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "binary-only upload (no source included)"
+msgstr "upload apenas-binário (nenhuma fonte incluída)"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "full upload; Debian-native package (full source is included)"
+msgstr "upload total: pacote Debian-nativo (fonte completa é incluída)"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "binary and diff upload (original source NOT included)"
+msgstr "upload binário e diff (fonte original NÃO incluída)"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "full upload (original source is included)"
+msgstr "upload total (a fonte original é incluída)"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid ""
+"%s must be updated to support the 'build-arch' and 'build-indep' targets (at "
+"least '%s' seems to be missing)"
+msgstr ""
+"%s tem de ser actualizado para suportar os alvos 'build-arch' e 'build-"
+"indep' (pelo menos '%s' parece estar em falta)"
+
+#: scripts/dpkg-checkbuilddeps.pl
+#, perl-format
+msgid "Usage: %s [<option>...] [<control-file>]"
+msgstr "Utilização: %s [<opção>...] [<ficheiro-controle>]"
+
+#: scripts/dpkg-checkbuilddeps.pl
+msgid ""
+"Options:\n"
+" -A ignore Build-Depends-Arch and Build-Conflicts-Arch.\n"
+" -B ignore Build-Depends-Indep and Build-Conflicts-Indep.\n"
+" -I ignore built-in build dependencies and conflicts.\n"
+" -d build-deps use given string as build dependencies instead of\n"
+" retrieving them from control file\n"
+" -c build-conf use given string for build conflicts instead of\n"
+" retrieving them from control file\n"
+" -a arch assume given host architecture\n"
+" -P profiles assume given build profiles (comma-separated list)\n"
+" --admindir=<directory>\n"
+" change the administrative directory.\n"
+" -?, --help show this help message.\n"
+" --version show the version."
+msgstr ""
+"Opções:\n"
+" -A ignora Build-Depends-Arch e Build-Conflicts-Arch.\n"
+" -B ignora Build-Depends-Indep e Build-Conflicts-Indep.\n"
+" -I ignora dependências e conflitos embutidos.\n"
+" -d build-deps usa a string dada como dependências de compilação em vez\n"
+" de as obter do ficheiro de controle\n"
+" -c build-conf usa a string dada para conflitos de compilação em vez\n"
+" de os obter do ficheiro de controle\n"
+" -a arch assume a arquitectura anfitriã dada\n"
+" -P profiles assume os perfis de compilação dados (lista separada por "
+"vírgulas)\n"
+" --admindir=<directório>\n"
+" muda o directório administrativo.\n"
+" -?, --help mostra esta mensagem de ajuda.\n"
+" --version mostra a versão."
+
+#: scripts/dpkg-checkbuilddeps.pl
+msgid ""
+"<control-file> is the control file to process (default: debian/control)."
+msgstr ""
+"<ficheiro-controle> é o ficheiro de controle a processar (predefinição: "
+"debian/control)."
+
+#: scripts/dpkg-checkbuilddeps.pl scripts/dpkg-shlibdeps.pl
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "cannot parse %s field"
+msgstr "não pode analisar o campo %s"
+
+#: scripts/dpkg-checkbuilddeps.pl
+#, perl-format
+msgid "Unmet build dependencies: %s"
+msgstr "Dependências de compilação não satisfeitas: %s"
+
+#: scripts/dpkg-checkbuilddeps.pl
+#, perl-format
+msgid "Build conflicts: %s"
+msgstr "Conflitos de compilação: %s"
+
+#: scripts/dpkg-distaddfile.pl
+#, perl-format
+msgid ""
+"Usage: %s [<option>...] <filename> <section> <priority>\n"
+"\n"
+"Options:\n"
+" -f<files-list-file> write files here instead of debian/files.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+"Utilização: %s [<opção>...] <nome-ficheiro> <secção> <prioridade>\n"
+"\n"
+"Opções:\n"
+" -f<ficheiro-lista-ficheiros> escreve os ficheiros aqui em vez de "
+"debian/files.\n"
+" -?, --help mostra esta mensagem de ajuda.\n"
+" --version mostra a versão.\n"
+
+#: scripts/dpkg-distaddfile.pl
+msgid "need exactly a filename, section and priority"
+msgstr "precisa exactamente um nome de ficheiro, secção e prioridade"
+
+#: scripts/dpkg-distaddfile.pl
+msgid "filename, section and priority may contain no whitespace"
+msgstr ""
+"nome de ficheiro, secção e prioridade não podem conter nenhum espaço em "
+"branco"
+
+#: scripts/dpkg-distaddfile.pl scripts/dpkg-genbuildinfo.pl
+#: scripts/dpkg-gencontrol.pl scripts/dpkg-mergechangelogs.pl
+#: scripts/Dpkg/Compression/FileHandle.pm scripts/Dpkg/File.pm
+#: scripts/Dpkg/IPC.pm scripts/Dpkg/Interface/Storable.pm
+#: scripts/Dpkg/Source/BinaryFiles.pm scripts/Dpkg/Source/Package.pm
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "cannot write %s"
+msgstr "incapaz de escrever %s"
+
+#: scripts/dpkg-distaddfile.pl scripts/dpkg-genbuildinfo.pl
+#: scripts/dpkg-gencontrol.pl
+msgid "install new files list file"
+msgstr "instalar novo ficheiro de lista de ficheiros"
+
+#: scripts/dpkg-genbuildinfo.pl
+msgid ""
+"Options:\n"
+" --build=<type>[,...] specify the build <type>: full, source, binary,\n"
+" any, all (default is 'full').\n"
+" -c<control-file> get control info from this file.\n"
+" -l<changelog-file> get per-version info from this file.\n"
+" -f<files-list-file> get .deb files list from this file.\n"
+" -F<changelog-format> force changelog format.\n"
+" -O[<buildinfo-file>] write to stdout (or <buildinfo-file>).\n"
+" -u<upload-files-dir> directory with files (default is '..').\n"
+" --always-include-kernel always include Build-Kernel-Version.\n"
+" --always-include-path always include Build-Path.\n"
+" --admindir=<directory> change the administrative directory.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+"Opções:\n"
+" --build=<tipo>[,...] especifica o <tipo> de compilação: full, source, "
+"binary,\n"
+" any, all (a predefinição é 'full').\n"
+" -c<control-file> obtém informação de controle de este ficheiro.\n"
+" -l<changelog-file> obtém informação por-versão de este ficheiro.\n"
+" -f<files-list-file> obtém lista de ficheiros .deb de este ficheiro.\n"
+" -F<changelog-format> força o formato do registo de alterações.\n"
+" -O[<buildinfo-file>] escreve para o stdout (ou <buildinfo-file>).\n"
+" -u<upload-files-dir> directório com ficheiros (predefinição é '..').\n"
+" --always-include-kernel inclui sempre Build-Kernel-Version.\n"
+" --always-include-path inclui sempre Build-Path.\n"
+" --admindir=<directory> muda o directório administrativo.\n"
+" -?, --help mostra esta mensagem de ajuda.\n"
+" --version mostra a versão.\n"
+
+#: scripts/dpkg-genbuildinfo.pl
+msgid "binary build with no binary artifacts found; .buildinfo is meaningless"
+msgstr ""
+"compilação binária sem nenhuns artefactos binários encontrados; .buildinfo "
+"sem significado"
+
+#: scripts/dpkg-genbuildinfo.pl
+#, perl-format
+msgid "cannot install output buildinfo file '%s'"
+msgstr "incapaz de instalar ficheiro buildinfo de saída '%s'"
+
+#: scripts/dpkg-genchanges.pl
+msgid ""
+"Options:\n"
+" --build=<type>[,...] specify the build <type>: full, source, binary,\n"
+" any, all (default is 'full').\n"
+" -g source and arch-indep build.\n"
+" -G source and arch-specific build.\n"
+" -b binary-only, no source files.\n"
+" -B binary-only, only arch-specific files.\n"
+" -A binary-only, only arch-indep files.\n"
+" -S source-only, no binary files.\n"
+" -c<control-file> get control info from this file.\n"
+" -l<changelog-file> get per-version info from this file.\n"
+" -f<files-list-file> get .deb files list from this file.\n"
+" -v<since-version> include all changes later than version.\n"
+" -C<changes-description> use change description from this file.\n"
+" -m<maintainer> override control's maintainer value.\n"
+" -e<maintainer> override changelog's maintainer value.\n"
+" -u<upload-files-dir> directory with files (default is '..').\n"
+" -si source includes orig, if new upstream (default).\n"
+" -sa source includes orig, always.\n"
+" -sd source is diff and .dsc only.\n"
+" -q quiet - no informational messages on stderr.\n"
+" -F<changelog-format> force changelog format.\n"
+" -V<name>=<value> set a substitution variable.\n"
+" -T<substvars-file> read variables here, not debian/substvars.\n"
+" -D<field>=<value> override or add a field and value.\n"
+" -U<field> remove a field.\n"
+" -O[<filename>] write to stdout (default) or <filename>.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+"Opções:\n"
+" --build=<tipo>[,...] especifica o <tipo> de compilação: full, source, "
+"binary,\n"
+" any, all (predefinição é 'full').\n"
+" -g compilação fonte e arquitectura-independente.\n"
+" -G compilação fonte e arquitectura-especifica.\n"
+" -b apenas-binário, nenhum ficheiro fonte.\n"
+" -B apenas-binário, apenas ficheiros arquitectura-"
+"específicos.\n"
+" -A apenas-binário, apenas ficheiros arquitectura-"
+"independentes.\n"
+" -S apenas-fonte, nenhum ficheiro binário.\n"
+" -c<control-file> obtém informação de controle de este ficheiro.\n"
+" -l<changelog-file> obtém informação por-versão de este ficheiro.\n"
+" -f<files-list-file> obtém lista de ficheiros .deb de este ficheiro.\n"
+" -v<since-version> inclui todas as alterações desde essa versão.\n"
+" -C<changes-description> usa descrição de alteração de este ficheiro.\n"
+" -m<maintainer> sobrepõe o valor maintainer do controle.\n"
+" -e<maintainer> sobrepõe o valor maintainer do registo de "
+"alterações.\n"
+" -u<upload-files-dir> directório com ficheiros (predefinição é '..').\n"
+" -si fonte inclui original, se novo do autor "
+"(predefinição).\n"
+" -sa fonte inclui original, sempre.\n"
+" -sd fonte é apenas diff e .dsc.\n"
+" -q calado - nenhuma mensagem informativa no stderr.\n"
+" -F<changelog-format> força formato do registo de alterações.\n"
+" -V<name>=<valor> define uma variável de substituição.\n"
+" -T<substvars-ficheiro> lê variáveis aqui, não debian/substvars.\n"
+" -D<campo>=<valor> sobrepõe ou adiciona um campo e valor.\n"
+" -U<campo> remove um campo.\n"
+" -O[<filename>] escreve no stdout (predefinição) ou no "
+"<filename>.\n"
+" -?, --help mostra esta mensagem de ajuda.\n"
+" --version mostra a versão.\n"
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "the current version (%s) is earlier than the previous one (%s)"
+msgstr "a versão actual (%s) é mais nova que a anterior (%s)"
+
+#: scripts/dpkg-genchanges.pl
+msgid "missing Section for source files"
+msgstr "Section em falta para ficheiros fonte"
+
+#: scripts/dpkg-genchanges.pl
+msgid "missing Priority for source files"
+msgstr "Priority em falta para ficheiros fonte"
+
+#: scripts/dpkg-genchanges.pl scripts/Dpkg/Vendor.pm
+#, perl-format
+msgid "%s is empty"
+msgstr "%s está vazio"
+
+#: scripts/dpkg-genchanges.pl
+msgid "not including original source code in upload"
+msgstr "a não incluir o código fonte original no upload"
+
+#: scripts/dpkg-genchanges.pl
+msgid "ignoring -sd option for native Debian package"
+msgstr "a ignorar opção -sd para pacote Debian nativo"
+
+#: scripts/dpkg-genchanges.pl
+msgid "including full source code in upload"
+msgstr "a incluir o código fonte total no upload"
+
+#: scripts/dpkg-genchanges.pl
+msgid ""
+"binary-only arch-specific upload (source code and arch-indep packages not "
+"included)"
+msgstr ""
+"upload apenas-binário e específico-arquitectura (código fonte e pacotes "
+"independentes de arquitectura não incluídos)"
+
+#: scripts/dpkg-genchanges.pl
+msgid ""
+"binary-only arch-indep upload (source code and arch-specific packages not "
+"included)"
+msgstr ""
+"upload apenas-binário e independente-arquitectura (código fonte e pacotes "
+"específicos de arquitectura não incluídos)"
+
+#: scripts/dpkg-genchanges.pl
+msgid "binary-only upload (no source code included)"
+msgstr "upload apenas-binário (nenhum código fonte incluído)"
+
+#: scripts/dpkg-genchanges.pl
+msgid "binary build with no binary artifacts found; cannot distribute"
+msgstr ""
+"compilação binária sem nenhuns artefactos binários encontrados; não se pode "
+"distribuir"
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "package %s in control file but not in files list"
+msgstr "pacote %s no ficheiro de controle mas não na lista de ficheiros"
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "package %s listed in files list but not in control info"
+msgstr ""
+"pacote %s listado na lista de ficheiros mas não na informação de controle"
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "missing Section for binary package %s; using '-'"
+msgstr "Section em falta para pacote binário %s; a usar '-'"
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "package %s has section %s in control file but %s in files list"
+msgstr ""
+"pacote %s tem secção %s no ficheiro de controle mas %s na lista de ficheiros"
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "missing Priority for binary package %s; using '-'"
+msgstr "Prioridade em falta para pacote binário %s; a usar '-'"
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "package %s has priority %s in control file but %s in files list"
+msgstr ""
+"pacote %s tem prioridade %s no ficheiro de controle mas %s na lista de "
+"ficheiros"
+
+#: scripts/dpkg-genchanges.pl scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "missing information for critical output field %s"
+msgstr "informação em falta para campo output crítico %s"
+
+#: scripts/dpkg-genchanges.pl scripts/dpkg-gencontrol.pl
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "missing information for output field %s"
+msgstr "informação em falta para o campo output %s"
+
+#: scripts/dpkg-gencontrol.pl
+msgid ""
+"Options:\n"
+" -p<package> print control file for package.\n"
+" -c<control-file> get control info from this file.\n"
+" -l<changelog-file> get per-version info from this file.\n"
+" -F<changelog-format> force changelog format.\n"
+" -v<force-version> set version of binary package.\n"
+" -f<files-list-file> write files here instead of debian/files.\n"
+" -P<package-build-dir> temporary build directory instead of debian/tmp.\n"
+" -n<filename> assume the package filename will be <filename>.\n"
+" -O[<file>] write to stdout (or <file>), not .../DEBIAN/"
+"control.\n"
+" -is, -ip, -isp, -ips deprecated, ignored for compatibility.\n"
+" -D<field>=<value> override or add a field and value.\n"
+" -U<field> remove a field.\n"
+" -V<name>=<value> set a substitution variable.\n"
+" -T<substvars-file> read variables here, not debian/substvars.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+"Opções:\n"
+" -p<package> escreve ficheiro de controle para o pacote.\n"
+" -c<control-file> obtém informação de controle de este ficheiro.\n"
+" -l<changelog-file> obtém informação por-versão de este ficheiro.\n"
+" -F<changelog-format> força formato do registo de alterações.\n"
+" -v<force-version> define versão do pacote binário.\n"
+" -f<files-list-file> escreve ficheiros aqui em vez de debian/files.\n"
+" -P<package-build-dir> directório de compilação temporário em vez de "
+"debian/tmp.\n"
+" -n<filename> assume que o nome de ficheiro do pacote irá ser "
+"<filename>.\n"
+" -O[<file>] escreve no stdout (ou <file>), não .../DEBIAN/"
+"control.\n"
+" -is, -ip, -isp, -ips descontinuado, ignorado para compatibilidade.\n"
+" -D<field>=<value> sobrepõe ou adiciona um campo e valor.\n"
+" -U<field> remove um campo.\n"
+" -V<name>=<value> define uma variável de substituição.\n"
+" -T<substvars-file> lê variáveis aqui, não debian/substvars.\n"
+" -?, --help mostra esta mensagem de ajuda.\n"
+" --version mostra a versão.\n"
+
+#: scripts/dpkg-gencontrol.pl scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "illegal package name '%s': %s"
+msgstr "nome de pacote ilegal '%s': %s"
+
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid "package %s not in control info"
+msgstr "pacote %s não está na informação de controle"
+
+#: scripts/dpkg-gencontrol.pl scripts/dpkg-gensymbols.pl
+msgid "no package stanza found in control info"
+msgstr "nenhuma estrofe de pacote encontrada na informação de controle"
+
+#: scripts/dpkg-gencontrol.pl scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "must specify package since control info has many (%s)"
+msgstr ""
+"tem de especificar o pacote pois a informação de controle tem muitos (%s)"
+
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid "package %s: "
+msgstr "pacote %s: "
+
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid ""
+"current host architecture '%s' does not appear in package '%s' architecture "
+"list (%s)"
+msgstr ""
+"arquitectura anfitriã actual '%s' não aparece na lista de arquitecturas '%s' "
+"do pacote (%s)"
+
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid "%s field of package %s: "
+msgstr "campo %s do pacote %s: "
+
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid "parsing package '%s' %s field: %s"
+msgstr "a analisar pacote '%s' %s campo: %s"
+
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid ""
+"the %s field contains an arch-specific dependency but the package '%s' is "
+"architecture all"
+msgstr ""
+"o campo %s contém uma dependência especifica de arquitectura mas o pacote "
+"'%s' é para todas as arquitecturas"
+
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid "%s package '%s' with udeb specific field %s"
+msgstr "%s pacote '%s' com campo específico udeb %s"
+
+#: scripts/dpkg-gencontrol.pl scripts/Dpkg/Source/Package.pm
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot stat %s"
+msgstr "incapaz de criar estatística de %s"
+
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid "cannot install output control file '%s'"
+msgstr "incapaz de instalar ficheiro de controle de saída '%s'"
+
+#: scripts/dpkg-gensymbols.pl
+msgid ""
+"Options:\n"
+" -l<library-path> add directory to private shared library search "
+"list.\n"
+" -p<package> generate symbols file for package.\n"
+" -P<package-build-dir> temporary build directory instead of debian/tmp.\n"
+" -e<library> explicitly list libraries to scan.\n"
+" -v<version> version of the packages (defaults to\n"
+" version extracted from debian/changelog).\n"
+" -c<level> compare generated symbols file with the "
+"reference\n"
+" template in the debian directory and fail if\n"
+" difference is too important; level goes from 0 "
+"for\n"
+" no check, to 4 for all checks (default level is "
+"1).\n"
+" -q keep quiet and never emit any warnings or\n"
+" generate a diff between generated symbols\n"
+" file and the reference template.\n"
+" -I<file> force usage of <file> as reference symbols\n"
+" file instead of the default file.\n"
+" -O[<file>] write to stdout (or <file>), not .../DEBIAN/"
+"symbols.\n"
+" -t write in template mode (tags are not\n"
+" processed and included in output).\n"
+" -V verbose output; write deprecated symbols and "
+"pattern\n"
+" matching symbols as comments (in template mode "
+"only).\n"
+" -a<arch> assume <arch> as host architecture when "
+"processing\n"
+" symbol files.\n"
+" -d display debug information during work.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+"Opções:\n"
+" -l<caminho-biblioteca> adiciona directório à lista de busca de "
+"bibliotecas partilhadas privadas.\n"
+" -p<pacote> gera ficheiro de símbolos para pacote.\n"
+" -P<pacote-compil-dir> directório de compilação temporário em vez de "
+"debian/tmp.\n"
+" -e<biblioteca> especifica lista de bibliotecas a sondar.\n"
+" -v<versão> versão dos pacotes (predefinição para\n"
+" a versão extraída de debian/changelog).\n"
+" -c<nível> compara ficheiro de símbolos gerado com o modelo "
+"de\n"
+" referência no directório debian e falha se a\n"
+" diferença for muito importante; nível vai de 0 "
+"para\n"
+" nenhuma verificação, até 4 para todas as "
+"verificações (nível predefinido é 1).\n"
+" -q fica silencioso e nunca emite nenhuns avisos nem\n"
+" gera um diff entre o ficheiro de símbolos "
+"gerados\n"
+" -I<ficheiro> força uso de <ficheiro> como ficheiro de "
+"símbolos de\n"
+" referência em vez do ficheiro predefinido.\n"
+" -O[<ficheiro>] escreve no stdout (ou <ficheiro>), não .../"
+"DEBIAN/symbols.\n"
+" -t escreve em mod de modelo (as etiquetas não são\n"
+" processadas e incluídas no resultado).\n"
+" -V resultados detalhados; escreve símbolos e padrões "
+"descontinuados\n"
+" correspondendo símbolos a comentários (em modo de "
+"modelo apenas).\n"
+" -a<arch> assume <arch> como arquitectura anfitriã ao "
+"processar\n"
+" ficheiros de símbolos.\n"
+" -d mostra informação de depuração durante o "
+"trabalho.\n"
+" -?, --help mostra esta mensagem de ajuda.\n"
+" --version mostra a versão.\n"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "pattern '%s' did not match any file"
+msgstr "padrão '%s' não correspondeu a nenhum ficheiro"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "can't read directory %s: %s"
+msgstr "incapaz de ler directório %s: %s"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "Dpkg::Shlibs::Objdump couldn't parse %s\n"
+msgstr "Dpkg::Shlibs::Objdump não pôde analisar %s\n"
+
+#: scripts/dpkg-gensymbols.pl
+msgid "<standard output>"
+msgstr "<saída standard>"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "new libraries appeared in the symbols file: %s"
+msgstr "novas bibliotecas apareceram no ficheiro de símbolos: %s"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "some libraries disappeared in the symbols file: %s"
+msgstr "algumas bibliotecas desapareceram no ficheiro de símbolos: %s"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "some new symbols appeared in the symbols file: %s"
+msgstr "alguns novos símbolos apareceram no ficheiros de símbolos: %s"
+
+#: scripts/dpkg-gensymbols.pl
+msgid "see diff output below"
+msgstr "veja o resultado do diff em baixo"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "some symbols or patterns disappeared in the symbols file: %s"
+msgstr "alguns símbolos ou padrões desapareceram no ficheiro de símbolos: %s"
+
+#: scripts/dpkg-gensymbols.pl
+msgid "the generated symbols file is empty"
+msgstr "o ficheiro de símbolos gerado está vazio"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "%s doesn't match completely %s"
+msgstr "%s não corresponde completamente a %s"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "no debian/symbols file used as basis for generating %s"
+msgstr "nenhum ficheiro debian/symbols usado como base para gerar %s"
+
+#: scripts/dpkg-mergechangelogs.pl
+msgid ""
+"This is free software; see the GNU General Public License version 2 or\n"
+"later for copying conditions. There is NO warranty.\n"
+msgstr ""
+"Isto é software livre; veja a GNU General Public License versão 2 ou\n"
+"posterior para condições de cópia. NÃO há garantia.\n"
+
+#: scripts/dpkg-mergechangelogs.pl
+#, perl-format
+msgid ""
+"Usage: %s [<option>...] <old> <new-a> <new-b> [<out>]\n"
+"\n"
+"Options:\n"
+" -m, --merge-prereleases merge pre-releases together, ignores everything\n"
+" after the last '~' in the version.\n"
+" --merge-unreleased merge UNRELEASED entries together, ignoring "
+"their\n"
+" version numbers.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+"Utilização: %s [<opção>...] <old> <new-a> <new-b> [<out>]\n"
+"\n"
+"Opções:\n"
+" -m, --merge-prereleases funde pré-lançamentos todos juntos, ignora tudo\n"
+" após o último '~' na versão.\n"
+" --merge-unreleased funde entradas UNRELEASED todas juntas, "
+"ignorando\n"
+" seus números de versão.\n"
+" -?, --help mostra esta mensagem de ajuda.\n"
+" --version mostra a versão.\n"
+
+#: scripts/dpkg-mergechangelogs.pl
+msgid "needs at least three arguments"
+msgstr "precisa de pelo menos três argumentos"
+
+#: scripts/dpkg-mergechangelogs.pl
+msgid "file arguments need to exist"
+msgstr "argumentos de ficheiro precisam de existir"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "Usage: %s [<option>...] <file>...\n"
+msgstr "Utilização: %s [<opção>...] <ficheiro>...\n"
+
+#: scripts/dpkg-name.pl
+msgid ""
+"\n"
+"Options:\n"
+" -a, --no-architecture no architecture part in filename.\n"
+" -o, --overwrite overwrite if file exists.\n"
+" -k, --symlink don't create a new file, but a symlink.\n"
+" -s, --subdir [dir] move file into subdirectory (use with care).\n"
+" -c, --create-dir create target directory if not there (use with "
+"care).\n"
+" -?, --help show this help message.\n"
+" -v, --version show the version.\n"
+"\n"
+"file.deb changes to <package>_<version>_<architecture>.<package_type>\n"
+"according to the 'underscores convention'.\n"
+msgstr ""
+"\n"
+"Opções:\n"
+" -a, --no-architecture nenhuma parte de arquitectura no nome de "
+"ficheiro.\n"
+" -o, --overwrite sobrescreve se ficheiro existir.\n"
+" -k, --symlink não cria um novo ficheiro, mas um link "
+"simbólico.\n"
+" -s, --subdir [dir] move ficheiro para sub-directório (use com "
+"cuidado).\n"
+" -c, --create-dir cria directório alvo se não existir (use com "
+"cuidado).\n"
+" -?, --help mostra esta mensagem de ajuda.\n"
+" -v, --version mostra a versão.\n"
+"\n"
+"ficheiro.deb muda para <pacote>_<versão>_<arquitectura>.<tipo_pacote>\n"
+"de acordo com a 'convenção de underscores'.\n"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "cannot find '%s'"
+msgstr "incapaz de encontrar '%s'"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "binary control file %s"
+msgstr "ficheiro de controle binário %s"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "assuming architecture '%s' for '%s'"
+msgstr "assumindo arquitectura '%s' para '%s'"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "bad package control information for '%s'"
+msgstr "má informação de controle de pacote para '%s'"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "assuming section '%s' for '%s'"
+msgstr "a assumir secção '%s' para '%s'"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "no Package field found in '%s', skipping package"
+msgstr "nenhum campo Package encontrado em '%s', a saltar este pacote"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "created directory '%s'"
+msgstr "directório criado '%s'"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "cannot create directory '%s'"
+msgstr "incapaz de criar directório '%s'"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "no such directory '%s', try --create-dir (-c) option"
+msgstr "não existe tal directório '%s', tente a opção --create-dir (-c)"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "skipping '%s'"
+msgstr "a saltar '%s'"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "cannot move '%s' to existing file"
+msgstr "não pode mover '%s' para ficheiro existente"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "moved '%s' to '%s'"
+msgstr "'%s' para '%s' movido"
+
+#: scripts/dpkg-name.pl
+msgid "mkdir can be used to create directory"
+msgstr "mkdir pode ser usado para criar directório"
+
+#: scripts/dpkg-name.pl
+msgid "need at least a filename"
+msgstr "precisa de pelo menos um nome de ficheiro"
+
+#: scripts/dpkg-parsechangelog.pl
+msgid ""
+"Options:\n"
+" -l, --file <changelog-file>\n"
+" get per-version info from this file.\n"
+" -F <changelog-format> force changelog format.\n"
+" -S, --show-field <field> show the values for <field>.\n"
+" -?, --help show this help message.\n"
+" --version show the version."
+msgstr ""
+"Opções:\n"
+" -l, --file <changelog-file>\n"
+" obtém informação por-versão de este ficheiro.\n"
+" -F <changelog-format> força formato de registo de alterações.\n"
+" -S, --show-field <campo> mostra os valores de <campo>.\n"
+" -?, --help mostra esta mensagem de ajuda.\n"
+" --version mostra a versão."
+
+#: scripts/dpkg-parsechangelog.pl
+msgid ""
+"Parser options:\n"
+" --format <output-format>\n"
+" set output format (defaults to 'dpkg').\n"
+" --reverse include all changes in reverse order.\n"
+" --all include all changes.\n"
+" -s, --since <version> include all changes later than <version>.\n"
+" -v <version> ditto.\n"
+" -u, --until <version> include all changes earlier than <version>.\n"
+" -f, --from <version> include all changes equal or later than "
+"<version>.\n"
+" -t, --to <version> include all changes up to or equal than "
+"<version>.\n"
+" -c, --count <number> include <number> entries from the top (or tail\n"
+" if <number> is lower than 0).\n"
+" -n <number> ditto.\n"
+" -o, --offset <number> change starting point for --count, counted from\n"
+" the top (or tail if <number> is lower than 0).\n"
+msgstr ""
+"Opções de análise:\n"
+" --format <output-format>\n"
+" define o formato da saída (predefinido para "
+"'dpkg').\n"
+" --reverse inclui todas as alterações em ordem reversa.\n"
+" --all inclui todas as alterações.\n"
+" -s, --since <versão> inclui todas as alterações posteriores a "
+"<versão>.\n"
+" -v <versão> idem.\n"
+" -u, --until <versão> inclui todas as alterações anteriores a <versão>.\n"
+" -f, --from <versão> inclui todas as alterações posteriores ou iguais a "
+"<versão>.\n"
+" -t, --to <versão> inclui todas as alterações anteriores ou iguais a "
+"<versão>.\n"
+" -c, --count <número> inclui <número> de alterações a partir do topo \n"
+" (ou fundo se <número> for inferior 0).\n"
+" -n <número> idem.\n"
+" -o, --offset <número> muda o ponto de partida para --count, a contar a\n"
+" partir do topo (ou fundo se <número> for "
+"inferior a 0).\n"
+
+#: scripts/dpkg-parsechangelog.pl
+msgid "-L is obsolete; it is without effect"
+msgstr "-L está obsoleto, não tem efeito"
+
+#: scripts/dpkg-parsechangelog.pl
+msgid "bad changelog format name"
+msgstr "mau nome de formato do registo de alterações"
+
+#: scripts/dpkg-parsechangelog.pl
+msgid "missing changelog filename"
+msgstr "nome de ficheiro changelog em falta"
+
+#: scripts/dpkg-parsechangelog.pl
+msgid "takes no non-option arguments"
+msgstr "recebe nenhum argumento não-opção"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid ""
+"Usage: %s [<option>...] <binary-path> [<override-file> [<path-prefix>]] > "
+"Packages\n"
+"\n"
+"Options:\n"
+" -t, --type <type> scan for <type> packages (default is 'deb').\n"
+" -a, --arch <arch> architecture to scan for.\n"
+" -h, --hash <hash-list> only generate hashes for the specified list.\n"
+" -m, --multiversion allow multiple versions of a single package.\n"
+" -e, --extra-override <file>\n"
+" use extra override file.\n"
+" -M, --medium <medium> add X-Medium field for dselect media access "
+"method\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+"Utilização: %s [<opção>...] <binary-path> [<override-file> [<path-prefix>]] "
+"> Pacotes\n"
+"\n"
+"Opções:\n"
+" -t, --type <tipo> sonda por pacotes do <tipo> ackages (predefinição "
+"é 'deb').\n"
+" -a, --arch <arch> arquitectura a sondar.\n"
+" -h, --hash <lista-hash> apenas gera cinzas para a lista especificada.\n"
+" -m, --multiversion permite múltiplas versões de um único pacote.\n"
+" -e, --extra-override <ficheiro>\n"
+" usa ficheiro extra de sobreposição.\n"
+" -M, --medium <medium> adiciona campo X-Medium para método de média de "
+"acesso do dselect\n"
+" -?, --help mostra esta mensagem de ajuda.\n"
+" --version mostra a versão.\n"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid " %s (package says %s, not %s)"
+msgstr " %s (pacote diz %s, não %s)"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "unconditional maintainer override for %s"
+msgstr "sobreposição de maintainer incondicional para %s"
+
+#: scripts/dpkg-scanpackages.pl scripts/dpkg-shlibdeps.pl scripts/Dpkg/IPC.pm
+#: scripts/Dpkg/Shlibs/Objdump.pm
+#, perl-format
+msgid "cannot fork for %s"
+msgstr "incapaz de forcar para %s"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "couldn't parse control information from %s"
+msgstr "incapaz de analisar informação de controle de %s"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "'dpkg-deb -I %s control' exited with %d, skipping package"
+msgstr "'dpkg-deb -I %s control' terminou com %d, a saltar este pacote"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "no Package field in control file of %s"
+msgstr "nenhum campo Package no ficheiro de controle de %s"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid ""
+"package %s (filename %s) is repeat but newer version; used that one and "
+"ignored data from %s!"
+msgstr ""
+"pacote %s (nome de ficheiro %s) é repetição mas versão mais recente; foi "
+"usado esse e a ignorados dados de %s!"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid ""
+"package %s (filename %s) is repeat; ignored that one and using data from %s!"
+msgstr ""
+"pacote %s (nome de ficheiro %s) é repetição; foi ignorado esse e a usar "
+"dados de %s!"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "package %s (filename %s) has Filename field!"
+msgstr "pacote %s (nome de ficheiro %s) tem campo Filename!"
+
+#: scripts/dpkg-scanpackages.pl scripts/dpkg-scansources.pl
+msgid "one to three arguments expected"
+msgstr "um de três argumentos esperado"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "unsupported checksum '%s'"
+msgstr "sumário de verificação não suportado '%s'"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "binary path %s not found"
+msgstr "caminho binário %s não encontrado"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "override file %s not found"
+msgstr "ficheiro de sobreposição %s não encontrado"
+
+#: scripts/dpkg-scanpackages.pl
+msgid "failed when writing stdout"
+msgstr "falhou ao escrever no stdout"
+
+#: scripts/dpkg-scanpackages.pl
+msgid "couldn't close stdout"
+msgstr "incapaz de fechar o stdout"
+
+#: scripts/dpkg-scanpackages.pl
+msgid "Packages with multiple instances but no --multiversion specified:"
+msgstr ""
+"Packages com múltiplas instâncias mas nenhum --multiversion especificado:"
+
+#: scripts/dpkg-scanpackages.pl
+msgid "Packages in override file with incorrect old maintainer value:"
+msgstr ""
+"Pacotes no ficheiro de sobreposição com valor incorreto de maintainer antigo:"
+
+#: scripts/dpkg-scanpackages.pl
+msgid "Packages specifying same maintainer as override file:"
+msgstr ""
+"Packages a especificar o mesmo maintainer que o ficheiro de sobreposição:"
+
+#: scripts/dpkg-scanpackages.pl
+msgid "Packages in archive but missing from override file:"
+msgstr "Pacotes no arquivo mas em falta no ficheiro de sobreposição:"
+
+#: scripts/dpkg-scanpackages.pl
+msgid "Packages in override file but not in archive:"
+msgstr "Pacotes no ficheiro de sobreposição mas não no arquivo:"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "Wrote %s entries to output Packages file."
+msgstr "Escreveu %s entradas no ficheiro Packages de resultado."
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid ""
+"Usage: %s [<option>...] <binary-path> [<override-file> [<path-prefix>]] > "
+"Sources\n"
+"\n"
+"Options:\n"
+" -n, --no-sort don't sort by package before outputting.\n"
+" -e, --extra-override <file>\n"
+" use extra override file.\n"
+" -s, --source-override <file>\n"
+" use file for additional source overrides, "
+"default\n"
+" is regular override file with .src appended.\n"
+" --debug turn debugging on.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+"\n"
+"See the man page for the full documentation.\n"
+msgstr ""
+"Utilização: %s [<opção>...] <binary-path> [<override-file> [<path-prefix>]] "
+"> Fontes\n"
+"\n"
+"Opções:\n"
+" -n, --no-sort não ordena nenhum pacote antes dos resultados.\n"
+" -e, --extra-override <file>\n"
+" usa ficheiro extra de sobreposição.\n"
+" -s, --source-override <file>\n"
+" usa ficheiro para sobreposições de fonte "
+"adicionais, a predefinição\n"
+" é ficheiro de sobreposição regular com .src "
+"acrescentado.\n"
+" --debug liga a depuração.\n"
+" -?, --help mostra esta mensagem de ajuda.\n"
+" --version mostra a versão.\n"
+"\n"
+"Veja o manual para documentação completa.\n"
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid "invalid override entry at line %d (%d fields)"
+msgstr "entrada de sobreposição inválida na linha %d (campos %d)"
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid "ignoring duplicate override entry for %s at line %d"
+msgstr "a ignorar entrada de sobreposição duplicada para %s na linha %d"
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid "ignoring override entry for %s, invalid priority %s"
+msgstr "a ignorar entrada de sobreposição para %s, prioridade inválida %s"
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid "invalid source override entry at line %d (%d fields)"
+msgstr "entrada de sobreposição de fonte inválida na linha %d (campos %d)"
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid "ignoring duplicate source override entry for %s at line %d"
+msgstr ""
+"a ignorar entrada de sobreposição de fonte duplicada para %s na linha %d"
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid "no binary packages specified in %s"
+msgstr "nenhuns pacotes binários especificados em %s"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "administrative directory '%s' does not exist"
+msgstr "directório administrativo '%s' não existe"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "unrecognized dependency field '%s'"
+msgstr "campo de dependência não reconhecido '%s'"
+
+#: scripts/dpkg-shlibdeps.pl
+msgid "need at least one executable"
+msgstr "precisa pelo menos um executável"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid ""
+"cannot find library %s needed by %s (ELF format: '%s' abi: '%s'; RPATH: '%s')"
+msgstr ""
+"incapaz de encontrar biblioteca %s necessária pelo %s (formato ELF: '%s' "
+"abi: '%s'; RPATH: '%s')"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "%s has an unexpected SONAME (%s)"
+msgstr "%s tem um SONAME inesperado (%s)"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid ""
+"no dependency information found for %s (used by %s)\n"
+"Hint: check if the library actually comes from a package."
+msgstr ""
+"nenhuma informação de dependência encontrada para %s (usada por %s)\n"
+"Dica: verifique se a biblioteca vem realmente de um pacote."
+
+#: scripts/dpkg-shlibdeps.pl
+msgid ""
+"binaries to analyze should already be installed in their package's directory"
+msgstr ""
+"os binários para analisar devem já estar instalados no seu directório do "
+"pacote"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "symbol %s used by %s found in none of the libraries"
+msgstr "símbolo %s usado pelo %s encontrado em nenhuma das bibliotecas"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid ""
+"%s contains an unresolvable reference to symbol %s: it's probably a plugin"
+msgstr ""
+"%s contém uma referência não resolvível a símbolo %s: provavelmente é um "
+"plugin"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "%d similar warning has been skipped (use -v to see it)"
+msgid_plural ""
+"%d other similar warnings have been skipped (use -v to see them all)"
+msgstr[0] "%d aviso semelhante foi saltado (use -v para o ver)"
+msgstr[1] ""
+"%d outros avisos semelhantes foram saltados (use -v para os ver todos)"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid ""
+"%s should not be linked against %s (it uses none of the library's symbols)"
+msgstr ""
+"%s não deve ser vinculado contra %s (não usa nenhum dos símbolos da "
+"biblioteca)"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid ""
+"package could avoid a useless dependency if %s was not linked against %s (it "
+"uses none of the library's symbols)"
+msgid_plural ""
+"package could avoid a useless dependency if %s were not linked against %s "
+"(they use none of the library's symbols)"
+msgstr[0] ""
+"pacote podia evitar uma dependência desnecessária se %s não fosse vinculado "
+"contra %s (não usa nenhum dos símbolos da biblioteca)"
+msgstr[1] ""
+"pacote podia evitar uma dependência desnecessária se %s não fossem "
+"vinculados contra %s (não usam nenhum dos símbolos da biblioteca)"
+
+#: scripts/dpkg-shlibdeps.pl
+msgid ""
+"Note: libraries are not searched in other binary packages that do not have "
+"any shlibs or symbols file.\n"
+"To help dpkg-shlibdeps find private libraries, you might need to use -l."
+msgstr ""
+"Nota: as bibliotecas não são procuradas em outros pacotes binário que não "
+"tenham nenhum ficheiro shlibs ou symbols.\n"
+"Para ajudar o dpkg-shlibdeps a encontrar bibliotecas privadas, você pode "
+"precisar de usar -l."
+
+#: scripts/dpkg-shlibdeps.pl
+msgid "cannot continue due to the error above"
+msgid_plural "cannot continue due to the errors listed above"
+msgstr[0] "incapaz de continuar devido ao erro em cima"
+msgstr[1] "incapaz de continuar devido aos erros listados em cima"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "invalid dependency got generated: %s"
+msgstr "dependência inválida foi gerada: %s"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "install new varlist file '%s'"
+msgstr "instala novo ficheiro varlist '%s'"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "Usage: %s [<option>...] <executable>|-e<executable> [<option>...]"
+msgstr "Utilização: %s [<opção>...] <executável>|-e<executável> [<opção>...]"
+
+#: scripts/dpkg-shlibdeps.pl
+msgid ""
+"Positional options (order is significant):\n"
+" <executable> include dependencies for <executable>,\n"
+" -e<executable> (use -e if <executable> starts with '-')\n"
+" -d<dependency-field> next executable(s) set shlibs:<dependency-field>."
+msgstr ""
+"Opções de posicionamento (ordem é significante):\n"
+" <executable> inclui dependências para <executable>,\n"
+" -e<executable> (use -e se <executable> começar com '-')\n"
+" -d<dependency-field> próximos executáveis definir shlibs:<dependency-"
+"field>."
+
+#: scripts/dpkg-shlibdeps.pl
+msgid ""
+"Options:\n"
+" -l<library-dir> add directory to private shared library search "
+"list.\n"
+" -p<varname-prefix> set <varname-prefix>:* instead of shlibs:*.\n"
+" -O[<file>] write variable settings to stdout (or <file>).\n"
+" -L<local-shlibs-file> shlibs override file, not debian/shlibs.local.\n"
+" -T<substvars-file> update variables here, not debian/substvars.\n"
+" -t<type> set package type (default is deb).\n"
+" -x<package> exclude package from the generated dependencies.\n"
+" -S<package-build-dir> search needed libraries in the given\n"
+" package build directory first.\n"
+" -I<package-build-dir> ignore needed libraries, shlibs and symbols "
+"files\n"
+" in the given build directory.\n"
+" -v enable verbose mode (can be used multiple "
+"times).\n"
+" --ignore-missing-info don't fail if dependency information can't be "
+"found.\n"
+" --warnings=<value> define set of active warnings (see manual page).\n"
+" --admindir=<directory> change the administrative directory.\n"
+" -?, --help show this help message.\n"
+" --version show the version."
+msgstr ""
+"Opções:\n"
+" -l<library-dir> adiciona directório A`lista de busca de "
+"bibliotecas partilhadas privadas.\n"
+" -p<varname-prefix> define <varname-prefix>:* em vez de shlibs:*.\n"
+" -O[<ficheiro>] escreve definições de variáveis no stdout (ou "
+"<ficheiro>).\n"
+" -L<local-shlibs-file> ficheiro de sobreposição de shlibs, não debian/"
+"shlibs.local.\n"
+" -T<substvars-file> actualiza variáveis aqui, não debian/substvars.\n"
+" -t<tipo> define o tipo de pacote (predefinição é deb).\n"
+" -x<pacote> exclui pacote das dependências geradas.\n"
+" -S<package-build-dir> procura bibliotecas necessárias primeiro no\n"
+" directório de compilação de pacote dado.\n"
+" -I<package-build-dir> ignora bibliotecas, ficheiros shlibs e símbolos "
+"necessários\n"
+" no directório de compilação dado.\n"
+" -v activa modo detalhado (pode ser usado várias "
+"vezes).\n"
+" --ignore-missing-info não falha se a informação de dependências não for "
+"encontrada.\n"
+" --warnings=<valor> define o conjunto de avisos activos (veja o "
+"manual).\n"
+" --admindir=<directório> muda o directório administrativo.\n"
+" -?, --help mostra esta mensagem de ajuda.\n"
+" --version mostra a versão."
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid ""
+"Dependency fields recognized are:\n"
+" %s\n"
+msgstr ""
+"Os campos de dependência reconhecidos são:\n"
+" %s\n"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "can't extract name and version from library name '%s'"
+msgstr "incapaz de extrair nome e versão do nome da biblioteca '%s'"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "unable to open shared libs info file '%s'"
+msgstr ""
+"incapaz de abrir ficheiro de informação de bibliotecas partilhadas '%s'"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "shared libs info file '%s' line %d: bad line '%s'"
+msgstr ""
+"ficheiro de informação de bibliotecas partilhadas '%s' linha %d: má linha "
+"'%s'"
+
+#: scripts/dpkg-shlibdeps.pl scripts/Dpkg/Changelog/Parse.pm
+#: scripts/Dpkg/Checksums.pm
+#, perl-format
+msgid "cannot open file %s"
+msgstr "incapaz de abrir ficheiro %s"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid ""
+"$ORIGIN is used in RPATH of %s and the corresponding directory could not be "
+"identified due to lack of DEBIAN sub-directory in the root of package's "
+"build tree"
+msgstr ""
+"$ORIGIN é usado em RPATH de %s e o directório correspondente não pode ser "
+"identificado devido a falta do sub-directório DEBIAN na raiz da árvore de "
+"compilação do pacote"
+
+#: scripts/dpkg-shlibdeps.pl
+msgid "diversions involved - output may be incorrect"
+msgstr "diversões envolvidas - o resultado pode estar incorreto"
+
+#: scripts/dpkg-shlibdeps.pl
+msgid "write diversion info to stderr"
+msgstr "escrita informação de diversão no stderr"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "unknown output from dpkg --search: '%s'"
+msgstr "resultados desconhecidos de dpkg --search: '%s'"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "--%s needs a directory"
+msgstr "--%s precisa dum directório"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "cannot stat directory %s"
+msgstr "incapaz de declarar directório %s"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "directory argument %s is not a directory"
+msgstr "argumento directory %s não é um directório"
+
+#: scripts/dpkg-source.pl scripts/Dpkg/Source/BinaryFiles.pm
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "unable to chdir to '%s'"
+msgstr "incapaz de chdir para '%s'"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "using options from %s: %s"
+msgstr "a usar opções de %s: %s"
+
+#: scripts/dpkg-source.pl scripts/Dpkg/Compression.pm
+#, perl-format
+msgid "%s is not a supported compression"
+msgstr "%s não é uma compressão suportada"
+
+#: scripts/dpkg-source.pl scripts/Dpkg/Compression.pm
+#, perl-format
+msgid "%s is not a compression level"
+msgstr "%s não é um nível de compressão"
+
+#: scripts/dpkg-source.pl
+msgid "-E and -W are deprecated, they are without effect"
+msgstr "-E e -W estão descontinuados, eles não têm efeito"
+
+#: scripts/dpkg-source.pl scripts/dpkg-vendor.pl
+msgid "need an action option"
+msgstr "precisa duma opção de acção"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "no source format specified in %s, see dpkg-source(1)"
+msgstr "nenhum formato fonte especificado em %s, veja dpkg-source(1)"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "%s doesn't contain any information about the source package"
+msgstr "%s não contém nenhuma informação sobre o pacote fonte"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "'%s' is not a legal architecture string in package '%s'"
+msgstr "'%s' não é uma string de arquitectura legal no pacote '%s'"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "architecture %s only allowed on its own (list for package %s is '%s')"
+msgstr ""
+"arquitectura %s apenas permitida por si própria (lista para pacote %s é '%s')"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "%s doesn't list any binary package"
+msgstr "%s não lista nenhum pacote binário"
+
+#: scripts/dpkg-source.pl
+msgid "building source for a binary-only release"
+msgstr "a compilar fonte para um lançamento apenas-binário"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "can't build with source format '%s': %s"
+msgstr "incapaz de compilar com formato fonte '%s': %s"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "using source format '%s'"
+msgstr "a usar formato fonte '%s'"
+
+#: scripts/dpkg-source.pl scripts/Dpkg/Source/Package/V1.pm
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Package/V3/Bzr.pm
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+#, perl-format
+msgid "building %s in %s"
+msgstr "a compilar %s em %s"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "--%s needs at least one argument, the .dsc"
+msgstr "--%s precisa de pelo menos um argumento, o .dsc"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "--%s takes no more than two arguments"
+msgstr "--%s não recebe mais que dois argumentos"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "--%s needs the .dsc file as first argument, not a directory"
+msgstr ""
+"--%s precisa do ficheiro .dsc como primeiro argumento, não um directório"
+
+#: scripts/dpkg-source.pl scripts/Dpkg/Source/Package/V1.pm
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Package/V3/Bzr.pm
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+#, perl-format
+msgid "unpack target exists: %s"
+msgstr "alvo para desempacotar existe: %s"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "%s doesn't contain a valid OpenPGP signature"
+msgstr "%s não contém uma assinatura OpenPGP válida"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "extracting unsigned source package (%s)"
+msgstr "a extrair pacote fonte não assinado (%s)"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "extracting %s in %s"
+msgstr "a extrair %s em %s"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "test control %s is not a regular file"
+msgstr "controle de teste %s não é um ficheiro regular"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "%s field contains value %s, but no tests control file %s"
+msgstr "campo %s contém valor %s, mas nenhum ficheiro de controle de testes %s"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "test control %s is missing %s or %s field"
+msgstr "controle de teste %s está a faltar campo %s ou %s"
+
+#: scripts/dpkg-source.pl
+msgctxt "source options"
+msgid "<none>"
+msgstr "<none>"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "Usage: %s [<option>...] <command>"
+msgstr "Utilização: %s [<opção>...] <comando>"
+
+#: scripts/dpkg-source.pl
+msgid ""
+"Commands:\n"
+" -x, --extract <filename>.dsc [<output-dir>]\n"
+" extract source package.\n"
+" -b, --build <dir> build source package.\n"
+" --print-format <dir> print the format to be used for the source "
+"package.\n"
+" --before-build <dir> run the corresponding source package format "
+"hook.\n"
+" --after-build <dir> run the corresponding source package format "
+"hook.\n"
+" --commit [<dir> [<patch-name>]]\n"
+" store upstream changes in a new patch."
+msgstr ""
+"Comandos:\n"
+" -x, --extract <nome-ficheiro>.dsc [<directório-destino>]\n"
+" extrai pacote fonte.\n"
+" -b, --build <dir> compila pacote fonte.\n"
+" --print-format <dir> escreve o formato a ser usado para o pacote "
+"fonte.\n"
+" --before-build <dir> corre o hook correspondente ao formato do pacote "
+"fonte.\n"
+" --after-build <dir> corre o hook correspondente ao formato do pacote "
+"fonte.\n"
+" --commit [<dir> [<nome-patch>]]\n"
+" armazena alterações do autor numa nova patch."
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid ""
+"Build options:\n"
+" -c<control-file> get control info from this file.\n"
+" -l<changelog-file> get per-version info from this file.\n"
+" -F<changelog-format> force changelog format.\n"
+" --format=<source-format> set the format to be used for the source "
+"package.\n"
+" -V<name>=<value> set a substitution variable.\n"
+" -T<substvars-file> read variables here.\n"
+" -D<field>=<value> override or add a .dsc field and value.\n"
+" -U<field> remove a field.\n"
+" -i, --diff-ignore[=<regex>]\n"
+" filter out files to ignore diffs of\n"
+" (defaults to: '%s').\n"
+" -I, --tar-ignore[=<pattern>]\n"
+" filter out files when building tarballs\n"
+" (defaults to: %s).\n"
+" -Z, --compression=<compression>\n"
+" select compression to use (defaults to '%s',\n"
+" supported are: %s).\n"
+" -z, --compression-level=<level>\n"
+" compression level to use (defaults to '%d',\n"
+" supported are: '1'-'9', 'best', 'fast')"
+msgstr ""
+"Opções de compilação:\n"
+" -c<ficheiro-control> obtém informação de controle de este "
+"ficheiro.\n"
+" -l<ficheiro-changelog> obtém informação por-versão de este "
+"ficheiro.\n"
+" -F<formato-changelog> força formato do registo de alterações.\n"
+" --format=<formato-fonte> define o formato a usar para o pacote fonte.\n"
+" -V<nome>=<valor> define a variável de substituição.\n"
+" -T<substvars-ficheiro> lê variáveis aqui.\n"
+" -D<campo>=<valor> sobrepõe ou adiciona um campo .dsc e valor.\n"
+" -U<campo> remove um campo.\n"
+" -i, --diff-ignore[=<regex>]\n"
+" filtra de fora ficheiros para ignorar diffs de\n"
+" (predefinição para: '%s').\n"
+" -I, --tar-ignore[=<padrão>]\n"
+" filtra de fora ficheiros ao compilar tarballs\n"
+" (predefinição para: %s).\n"
+" -Z, --compression=<compressão>\n"
+" seleciona a compressão a usar (predefinição para "
+"'%s',\n"
+" suportados são: %s).\n"
+" -z, --compression-level=<nível>\n"
+" nível de compressão a usar (predefinição para "
+"'%d',\n"
+" suportados são: '1'-'9', 'best', 'fast')"
+
+#: scripts/dpkg-source.pl
+msgid ""
+"Extract options:\n"
+" --no-copy don't copy .orig tarballs\n"
+" --no-check don't check signature and checksums before "
+"unpacking\n"
+" --no-overwrite-dir do not overwrite directory on extraction\n"
+" --require-valid-signature abort if the package doesn't have a valid "
+"signature\n"
+" --require-strong-checksums\n"
+" abort if the package contains no strong "
+"checksums\n"
+" --ignore-bad-version allow bad source package versions."
+msgstr ""
+"Opções de extração:\n"
+" --no-copy não copia tarballs .orig\n"
+" --no-check não verifica assinatura e sumários de verificação "
+"antes de desempacotar\n"
+" --no-overwrite-dir não sobrescreve directório na extração\n"
+" --require-valid-signature aborta se o pacote não possuir uma assinatura "
+"válida\n"
+" --require-strong-checksums\n"
+" aborta se o pacote não conter sumários de "
+"verificação fortes.\n"
+" --ignore-bad-version permite más versões de pacote fonte."
+
+#: scripts/dpkg-source.pl
+msgid ""
+"General options:\n"
+" --threads-max=<threads>\n"
+" use at most <threads> with compressor.\n"
+" -q quiet mode.\n"
+" -?, --help show this help message.\n"
+" --version show the version."
+msgstr ""
+"Opções gerais:\n"
+" --threads-max=<threads>\n"
+" usa o máximo de <threads> com o compressor.\n"
+" -q modo silencioso.\n"
+" -?, --help mostra esta mensagem de ajuda.\n"
+" --version mostra a versão."
+
+#: scripts/dpkg-source.pl
+msgid ""
+"Source format specific build and extract options are available;\n"
+"use --format with --help to see them."
+msgstr ""
+"Compilação específica do formato fonte e as opções de extração estão "
+"disponíveis;\n"
+"use --format com --help para as ver."
+
+#: scripts/dpkg-vendor.pl
+msgid ""
+"Commands:\n"
+" --is <vendor> returns true if current vendor is <vendor>.\n"
+" --derives-from <vendor> returns true if current vendor derives from "
+"<vendor>.\n"
+" --query <field> print the content of the vendor-specific field.\n"
+" --help show this help message.\n"
+" --version show the version."
+msgstr ""
+"Comandos:\n"
+" --is <vendor> retorna verdadeiro se o fabricante actual for "
+"<vendor>.\n"
+" --derives-from <vendor> retorna verdadeiro se o fabricante actual derivar "
+"de <vendor>.\n"
+" --query <field> escreve o conteúdo do campo vendor-specific.\n"
+" --help mostra esta mensagem de ajuda.\n"
+" --version mostra a versão."
+
+#: scripts/dpkg-vendor.pl
+msgid ""
+"Options:\n"
+" --vendor <vendor> assume <vendor> is the current vendor."
+msgstr ""
+"Opções:\n"
+" --vendor <vendor> assume que <vendor> é o fabricante actual."
+
+#: scripts/dpkg-vendor.pl
+#, perl-format
+msgid "vendor %s doesn't exist in %s"
+msgstr "fabricante %s não existem em %s"
+
+#: scripts/Dpkg/Arch.pm
+msgid ""
+"cannot determine CC system type, falling back to default (native compilation)"
+msgstr ""
+"não pode determinar tipo de sistema CC, caindo para a predefinição "
+"(compilação nativa)"
+
+#: scripts/Dpkg/Arch.pm
+#, perl-format
+msgid "unknown CC system type %s, falling back to default (native compilation)"
+msgstr ""
+"tipo de sistema CC desconhecido %s,caindo para a predefinição (compilação "
+"nativa)"
+
+#: scripts/Dpkg/Arch.pm
+#, perl-format
+msgid "'%s' is not a legal architecture in list '%s'"
+msgstr "'%s' não é uma arquitectura legal na lista '%s'"
+
+#: scripts/Dpkg/BuildFlags.pm scripts/Dpkg/Compression/FileHandle.pm
+#: scripts/Dpkg/File.pm scripts/Dpkg/Interface/Storable.pm
+#: scripts/Dpkg/Shlibs/Objdump.pm scripts/Dpkg/Source/BinaryFiles.pm
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "cannot read %s"
+msgstr "não pode ler %s"
+
+#: scripts/Dpkg/BuildFlags.pm
+#, perl-format
+msgid "line %d of %s mentions unknown flag %s"
+msgstr "linha %d de %s menciona bandeira desconhecida %s"
+
+#: scripts/Dpkg/BuildFlags.pm
+#, perl-format
+msgid "line %d of %s is invalid, it has been ignored"
+msgstr "a linha %d de %s é inválida, e foi ignorada"
+
+#: scripts/Dpkg/BuildOptions.pm
+#, perl-format
+msgid "invalid flag in %s: %s"
+msgstr "bandeira inválida em %s: %s"
+
+#: scripts/Dpkg/BuildOptions.pm
+#, perl-format
+msgid "unknown %s feature in %s variable: %s"
+msgstr "funcionalidade %s desconhecida na variável %s: %s"
+
+#: scripts/Dpkg/BuildOptions.pm
+#, perl-format
+msgid "incorrect value in %s option of %s variable: %s"
+msgstr "valor incorreto na opção %s da variável %s: %s"
+
+#: scripts/Dpkg/BuildTypes.pm
+#, perl-format
+msgid "cannot combine %s and %s"
+msgstr "não pode combinar %s e %s"
+
+#: scripts/Dpkg/BuildTypes.pm
+#, perl-format
+msgid "unknown build type %s"
+msgstr "tipo de compilação desconhecido %s"
+
+#: scripts/Dpkg/Changelog.pm
+#, perl-format
+msgid ""
+"%s(l%s): %s\n"
+"LINE: %s"
+msgstr ""
+"%s(l%s): %s\n"
+"LINHA: %s"
+
+#: scripts/Dpkg/Changelog.pm
+#, perl-format
+msgid "%s(l%s): %s"
+msgstr "%s(l%s): %s"
+
+#: scripts/Dpkg/Changelog.pm
+msgid "'offset' without 'count' has no effect"
+msgstr "'offset' sem 'count' não tem nenhum efeito"
+
+#: scripts/Dpkg/Changelog.pm
+msgid "you can't combine 'count' or 'offset' with any other range option"
+msgstr ""
+"você não pode combinar 'count' ou 'offset' com qualquer outra opção de "
+"alcance"
+
+#: scripts/Dpkg/Changelog.pm
+msgid "you can only specify one of 'from' and 'since', using 'since'"
+msgstr "você pode apenas especificar um de 'from' e 'since', usando 'since'"
+
+#: scripts/Dpkg/Changelog.pm
+msgid "you can only specify one of 'to' and 'until', using 'until'"
+msgstr "você pode apenas especificar um de 'to' e 'until', usando 'until'"
+
+#: scripts/Dpkg/Changelog.pm
+#, perl-format
+msgid "'%s' option specifies non-existing version '%s'"
+msgstr "opção '%s' especifica versão não-existente '%s'"
+
+#: scripts/Dpkg/Changelog.pm
+msgid "use newest entry that is earlier than the one specified"
+msgstr "use a entrada mais recente que é anterior àquela especificada"
+
+#: scripts/Dpkg/Changelog.pm
+msgid "none found, starting from the oldest entry"
+msgstr "nenhuma encontrada, a começar a partir da entrada mais antiga"
+
+#: scripts/Dpkg/Changelog.pm
+msgid "use oldest entry that is later than the one specified"
+msgstr "use a entrada mais antiga que é posterior àquela especificada"
+
+#: scripts/Dpkg/Changelog.pm
+#, perl-format
+msgid "no such entry found, ignoring '%s' parameter '%s'"
+msgstr "nenhuma tal entrada encontrada, a ignorar '%s' parâmetro '%s'"
+
+#: scripts/Dpkg/Changelog.pm
+#, perl-format
+msgid "'since' option specifies most recent version '%s', ignoring"
+msgstr "opção 'since' especifica a versão mais recente '%s', a ignorar"
+
+#: scripts/Dpkg/Changelog.pm
+#, perl-format
+msgid "'until' option specifies oldest version '%s', ignoring"
+msgstr "opção 'until' especifica versão antiga '%s', a ignorar"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+msgid "first heading"
+msgstr "primeiro cabeçalho"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+msgid "next heading or end of file"
+msgstr "próximo cabeçalho ou fim do ficheiro"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+msgid "start of change data"
+msgstr "inicio dos dados de alteração"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+msgid "more change data or trailer"
+msgstr "mais dados de alteração ou o trailer"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+#, perl-format
+msgid "found start of entry where expected %s"
+msgstr "encontrado o inicio da entrada onde esperado %s"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+msgid "badly formatted heading line"
+msgstr "linha de cabeçalho má formatada"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+#, perl-format
+msgid "found trailer where expected %s"
+msgstr "encontrado o trailer onde esperado %s"
+
+#: scripts/Dpkg/Changelog/Debian.pm scripts/Dpkg/Changelog/Entry/Debian.pm
+msgid "badly formatted trailer line"
+msgstr "linha de trailer má formatada"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+#, perl-format
+msgid "found change data where expected %s"
+msgstr "encontrado os dados de alteração onde esperados %s"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+#, perl-format
+msgid "found blank line where expected %s"
+msgstr "encontrada linha vazia onde esperada %s"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+msgid "unrecognized line"
+msgstr "linha não reconhecida"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+#, perl-format
+msgid "found end of file where expected %s"
+msgstr "encontrado fim do ficheiro onde esperado %s"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "version '%s' is invalid: %s"
+msgstr "versão '%s' é inválida: %s"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "bad key-value after ';': '%s'"
+msgstr "mau valor-chave após ';': '%s'"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "repeated key-value %s"
+msgstr "valor-chave repetido %s"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "badly formatted urgency value: %s"
+msgstr "valor de urgência mal formatado: %s"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "bad binary-only value: %s"
+msgstr "mau valor apenas-binário: %s"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "unknown key-value %s"
+msgstr "valor-chave desconhecido %s"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+msgid "the header doesn't match the expected regex"
+msgstr "o cabeçalho não corresponde ao regex esperado"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "ignoring invalid week day '%s'"
+msgstr "a ignorar dia de semana inválido '%s'"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "uses full '%s' instead of abbreviated month name '%s'"
+msgstr "usa '%s' completo em vez do nome de mês abreviado '%s'"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "invalid abbreviated month name '%s'"
+msgstr "inválido nome de mês abreviado '%s'"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "cannot parse non-conformant date '%s'"
+msgstr "incapaz de analisar data em não-conformidade '%s'"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+msgid "the trailer doesn't match the expected regex"
+msgstr "o trailer não corresponde ao regex esperado"
+
+#: scripts/Dpkg/Changelog/Parse.pm
+#, perl-format
+msgid "cannot seek into file %s"
+msgstr "incapaz de procurar no ficheiro %s"
+
+#: scripts/Dpkg/Changelog/Parse.pm
+#, perl-format
+msgid "changelog format %s is unknown: %s"
+msgstr "formato de changelog %s é desconhecido: %s"
+
+#: scripts/Dpkg/Changelog/Parse.pm
+#, perl-format
+msgid "changelog format %s is not a Dpkg::Changelog class"
+msgstr "formato de changelog %s não é classe Dpkg::Changelog"
+
+#: scripts/Dpkg/Changelog/Parse.pm
+#, perl-format
+msgid "fatal error occurred while parsing %s"
+msgstr "ocorreu erro fatal ao analisar %s"
+
+#: scripts/Dpkg/Changelog/Parse.pm
+#, perl-format
+msgid "unknown output format %s"
+msgstr "formato de resultados desconhecido %s"
+
+#: scripts/Dpkg/Checksums.pm
+#, perl-format
+msgid "cannot fstat file %s"
+msgstr "incapaz de fstat ao ficheiro %s"
+
+#: scripts/Dpkg/Checksums.pm
+#, perl-format
+msgid "file %s has size %u instead of expected %u"
+msgstr "ficheiro %s tem tamanho %u em vez do esperado %u"
+
+#: scripts/Dpkg/Checksums.pm
+#, perl-format
+msgid "file %s has checksum %s instead of expected %s (algorithm %s)"
+msgstr ""
+"ficheiro %s tem sumário de verificação %s em vez do esperado %s (algoritmo "
+"%s)"
+
+#: scripts/Dpkg/Checksums.pm
+#, perl-format
+msgid "invalid line in %s checksums string: %s"
+msgstr "linha inválida nas strings de sumário de verificação %s: %s"
+
+#: scripts/Dpkg/Checksums.pm
+#, perl-format
+msgid "conflicting checksums '%s' and '%s' for file '%s'"
+msgstr "sumários de verificação em conflito '%s' e '%s' para ficheiro '%s'"
+
+#: scripts/Dpkg/Checksums.pm
+#, perl-format
+msgid "conflicting file sizes '%u' and '%u' for file '%s'"
+msgstr "tamanhos de ficheiro em conflito '%u' e '%u' para ficheiro '%s'"
+
+#: scripts/Dpkg/Compression.pm
+#, perl-format
+msgid "compression threads %s is not a number"
+msgstr "threads de compressão %s não é um número"
+
+#: scripts/Dpkg/Compression/Process.pm
+#, perl-format
+msgid "%s is not a supported compression method"
+msgstr "%s não é um método de compressão suportado"
+
+#: scripts/Dpkg/Compression/Process.pm
+msgid "Dpkg::Compression::Process can only start one subprocess at a time"
+msgstr ""
+"Dpkg::Compression::Process só pode arrancar um sub-processo de cada vez"
+
+#: scripts/Dpkg/Conf.pm
+#, perl-format
+msgid "short option not allowed in %s, line %d"
+msgstr "opção curta não permitida em %s, linha %d"
+
+#: scripts/Dpkg/Conf.pm
+#, perl-format
+msgid "invalid syntax for option in %s, line %d"
+msgstr "sintaxe inválida para opção em %s, linha %d"
+
+#: scripts/Dpkg/Control.pm
+msgid "general section of control info file"
+msgstr "secção geral do ficheiro de informação de controle"
+
+#: scripts/Dpkg/Control.pm
+msgid "package's section of control info file"
+msgstr "secção de pacote do ficheiro de informação de controle"
+
+#: scripts/Dpkg/Control.pm
+msgid "parsed version of changelog"
+msgstr "versão analisada do registo de alterações"
+
+#: scripts/Dpkg/Control.pm
+msgid "header stanza of copyright file"
+msgstr "estrofe cabeçalho do ficheiro de copyright"
+
+#: scripts/Dpkg/Control.pm
+msgid "files stanza of copyright file"
+msgstr "estrofe de ficheiros do ficheiro de copyright"
+
+#: scripts/Dpkg/Control.pm
+msgid "license stanza of copyright file"
+msgstr "estrofe de licença do ficheiro de copyright"
+
+#: scripts/Dpkg/Control.pm
+msgid "package's tests control file"
+msgstr "ficheiro de controle de testes de pacote"
+
+#: scripts/Dpkg/Control.pm
+#, perl-format
+msgid "repository's %s file"
+msgstr "ficheiro %s do repositório"
+
+#: scripts/Dpkg/Control.pm
+#, perl-format
+msgid "stanza in repository's %s file"
+msgstr "estrofe em ficheiro %s do repositório"
+
+#: scripts/Dpkg/Control.pm
+#, perl-format
+msgid "%s file"
+msgstr "ficheiro %s"
+
+#: scripts/Dpkg/Control.pm
+msgid "control info of a .deb package"
+msgstr "informação de control de um pacote .deb"
+
+#: scripts/Dpkg/Control.pm
+msgid "build information file"
+msgstr "ficheiro de informação de compilação"
+
+#: scripts/Dpkg/Control.pm
+msgid "vendor file"
+msgstr "ficheiro do fabricante"
+
+#: scripts/Dpkg/Control.pm
+msgid "stanza in dpkg's status file"
+msgstr "estrofe no ficheiro de estado do dpkg"
+
+#: scripts/Dpkg/Control/FieldsCore.pm
+#, perl-format
+msgid "unknown information field '%s' in input data in %s"
+msgstr "campo de informação desconhecido '%s' nos dados de entrada em %s"
+
+#: scripts/Dpkg/Control/FieldsCore.pm
+msgid "control information"
+msgstr "informação de controle"
+
+#: scripts/Dpkg/Control/HashCore.pm
+#, perl-format
+msgid "syntax error in %s at line %d: %s"
+msgstr "erro de sintaxe em %s na linha %d: %s"
+
+#: scripts/Dpkg/Control/HashCore.pm
+msgid "field cannot start with a hyphen"
+msgstr "campo não pode começar com um hífen"
+
+#: scripts/Dpkg/Control/HashCore.pm
+#, perl-format
+msgid "duplicate field %s found"
+msgstr "campo duplicado %s encontrado"
+
+#: scripts/Dpkg/Control/HashCore.pm
+msgid "continued value line not in field"
+msgstr "linha de valor continuada não em campo"
+
+#: scripts/Dpkg/Control/HashCore.pm
+msgid "expected OpenPGP signature, found end of file after blank line"
+msgstr ""
+"esperada assinatura OpenPGP, encontrado fim do ficheiro após linha vazia"
+
+#: scripts/Dpkg/Control/HashCore.pm
+#, perl-format
+msgid "expected OpenPGP signature, found something else '%s'"
+msgstr "esperada assinatura OpenPGP, encontrado outra coisa '%s'"
+
+#: scripts/Dpkg/Control/HashCore.pm
+msgid "unfinished OpenPGP signature"
+msgstr "assinatura OpenPGP não acabada"
+
+#: scripts/Dpkg/Control/HashCore.pm
+msgid "OpenPGP signature not allowed here"
+msgstr "assinatura OpenPGP não autorizada aqui"
+
+#: scripts/Dpkg/Control/HashCore.pm
+msgid "line with unknown format (not field-colon-value)"
+msgstr "linha com formato desconhecido (não campo-:-valor)"
+
+#: scripts/Dpkg/Control/HashCore.pm
+msgid "write error on control data"
+msgstr "erro de escrita em dados de controle"
+
+#: scripts/Dpkg/Control/Info.pm
+#, perl-format
+msgid "first stanza lacks a '%s' field"
+msgstr "primeira estrofe falta um campo '%s'"
+
+#: scripts/Dpkg/Control/Info.pm
+#, perl-format
+msgid "stanza lacks the '%s' field"
+msgstr "estrofe falta o campo '%s'"
+
+#: scripts/Dpkg/Control/Tests/Entry.pm
+#, perl-format
+msgid "stanza lacks either %s or %s fields"
+msgstr "estrofe falta os campos %s ou %s"
+
+#: scripts/Dpkg/Deps.pm
+#, perl-format
+msgid "can't parse dependency %s"
+msgstr "incapaz de analisar a dependência %s"
+
+#: scripts/Dpkg/Deps.pm
+#, perl-format
+msgid "virtual dependency contains invalid relation: %s"
+msgstr "dependência virtual contém relação inválida: %s"
+
+#: scripts/Dpkg/Deps.pm
+msgid "an union dependency can only contain simple dependencies"
+msgstr "uma dependência de união só pode conter dependências simples"
+
+#: scripts/Dpkg/Dist/Files.pm
+#, perl-format
+msgid "badly formed file name in files list file, line %d"
+msgstr ""
+"nome de ficheiro mal formatado no ficheiro de lista de ficheiros, linha %d"
+
+#: scripts/Dpkg/Dist/Files.pm
+#, perl-format
+msgid "badly formed line in files list file, line %d"
+msgstr "linha mal formatada no ficheiro de lista de ficheiros, linha %d"
+
+#: scripts/Dpkg/Dist/Files.pm
+#, perl-format
+msgid "duplicate files list entry for file %s (line %d)"
+msgstr "entrada na lista de ficheiro duplicada para ficheiro %s (linha %d)"
+
+#: scripts/Dpkg/Dist/Files.pm
+#, perl-format
+msgid "cannot open directory %s"
+msgstr "não pode abrir o directório %s"
+
+#: scripts/Dpkg/Dist/Files.pm
+#, perl-format
+msgid "invalid filename %s"
+msgstr "nome de ficheiro inválido %s"
+
+#: scripts/Dpkg/ErrorHandling.pm
+msgid "info"
+msgstr "informação"
+
+#: scripts/Dpkg/ErrorHandling.pm
+msgid "notice"
+msgstr "anúncio"
+
+#: scripts/Dpkg/ErrorHandling.pm
+msgid "warning"
+msgstr "aviso"
+
+#: scripts/Dpkg/ErrorHandling.pm
+msgid "error"
+msgstr "erro"
+
+#: scripts/Dpkg/ErrorHandling.pm
+#, perl-format
+msgid "%s subprocess returned exit status %d"
+msgstr "sub-processo %s retornou estado de saída %d"
+
+#: scripts/Dpkg/ErrorHandling.pm
+#, perl-format
+msgid "%s subprocess was killed by signal %d"
+msgstr "sub-processo %s foi morto pelo sinal %d"
+
+#: scripts/Dpkg/ErrorHandling.pm
+#, perl-format
+msgid "%s subprocess failed with unknown status code %d"
+msgstr "sub-processo %s falhou com código de estado desconhecido %d"
+
+#: scripts/Dpkg/ErrorHandling.pm
+msgid "Use --help for program usage information."
+msgstr "Use --help para informação de utilização do programa."
+
+#: scripts/Dpkg/File.pm
+#, perl-format
+msgid "cannot create file %s"
+msgstr "não pode criar ficheiro %s"
+
+#: scripts/Dpkg/IPC.pm
+#, perl-format
+msgid "pipe for %s"
+msgstr "pipe para %s"
+
+#: scripts/Dpkg/IPC.pm
+#, perl-format
+msgid "chdir to %s"
+msgstr "chdir para %s"
+
+#: scripts/Dpkg/IPC.pm
+msgid "reopen stdin"
+msgstr "re-abrir stdin"
+
+#: scripts/Dpkg/IPC.pm
+msgid "reopen stdout"
+msgstr "re-abrir stdout"
+
+#: scripts/Dpkg/IPC.pm
+msgid "child process"
+msgstr "processo filho"
+
+#: scripts/Dpkg/IPC.pm
+#, perl-format
+msgid "wait for %s"
+msgstr "esperar por %s"
+
+#: scripts/Dpkg/IPC.pm
+#, perl-format
+msgid "%s didn't complete in %d second"
+msgid_plural "%s didn't complete in %d seconds"
+msgstr[0] "%s não se completou em %d segundo"
+msgstr[1] "%s não se completou em %d segundos"
+
+#: scripts/Dpkg/Interface/Storable.pm
+msgid "<standard input>"
+msgstr "<entrada standard>"
+
+#: scripts/Dpkg/Lock.pm
+msgid "File::FcntlLock not available; using flock which is not NFS-safe"
+msgstr "File::FcntlLock não disponível, a usar flock o qual não é NFS-seguro"
+
+#: scripts/Dpkg/Lock.pm
+#, perl-format
+msgid "failed to get a write lock on %s"
+msgstr "falhou ao obter tranca de escrita em %s"
+
+#: scripts/Dpkg/OpenPGP.pm
+#, perl-format
+msgid "unknown OpenPGP api requested %s"
+msgstr "api OpenPGP desconhecida requisitada %s"
+
+#: scripts/Dpkg/OpenPGP.pm
+#, perl-format
+msgid "cannot load OpenPGP backend %s"
+msgstr "não pode carregar backend OpenPGP %s"
+
+#: scripts/Dpkg/OpenPGP.pm
+#, perl-format
+msgid "unknown OpenPGP backend %s"
+msgstr "backend OpenPGP desconhecido %s"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "success"
+msgstr "sucesso"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "no acceptable signature found"
+msgstr "encontrada assinatura não aceite"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "missing required argument"
+msgstr "argumento requerido em falta"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "unsupported option"
+msgstr "opção não suportada"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "invalid data type"
+msgstr "tipo de dados inválido"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "non-text input where text expected"
+msgstr "entrada não-texto onde se espera texto"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "output file already exists"
+msgstr "ficheiro de resultados já existe"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "input file does not exist"
+msgstr "ficheiro de entrada não existe"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "cannot unlock password-protected key"
+msgstr "incapaz de desbloquear chave protegida por palavra passe"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "unsupported subcommand"
+msgstr "sub-comando não suportado"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "key is not signature-capable"
+msgstr "chave não tem capacidade de assinatura"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "missing OpenPGP implementation"
+msgstr "implementação OpenPGP em falta"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "specified key needs a keystore"
+msgstr "a chave especificada precisa dum chaveiro"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+#, perl-format
+msgid "error code %d"
+msgstr "código de erro %d"
+
+#: scripts/Dpkg/Package.pm
+msgid "may not be empty string"
+msgstr "não pode ser uma string vazia"
+
+#: scripts/Dpkg/Package.pm
+#, perl-format
+msgid "character '%s' not allowed"
+msgstr "caractere '%s' não permitido"
+
+#: scripts/Dpkg/Package.pm
+msgid "must start with an alphanumeric character"
+msgstr "tem de começar com um caractere alfanumérico"
+
+#: scripts/Dpkg/Path.pm scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "pathname '%s' cannot be canonicalized"
+msgstr "nome-caminho '%s' não pode ser canonizado"
+
+#: scripts/Dpkg/Path.pm scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "pathname '%s' points outside source root (to '%s')"
+msgstr "nome-caminho '%s' aponta para fora da raiz fonte (para '%s')"
+
+#: scripts/Dpkg/Shlibs.pm
+msgid ""
+"deprecated use of LD_LIBRARY_PATH with private library directory which "
+"interferes with cross-building, please use -l option instead"
+msgstr ""
+"uso descontinuado de LD_LIBRARY_PATH com directório de biblioteca privada o "
+"qual interfere com compilação-cruzada, por favor use antes a opção -l"
+
+#: scripts/Dpkg/Shlibs.pm scripts/Dpkg/Shlibs/Objdump.pm
+#, perl-format
+msgid "unknown executable format in file '%s'"
+msgstr "formato de executável desconhecido no ficheiro '%s'"
+
+#: scripts/Dpkg/Shlibs/Objdump.pm
+#, perl-format
+msgid "couldn't parse dynamic relocation record: %s"
+msgstr "incapaz de analisar registo de realocação dinâmico: %s"
+
+#: scripts/Dpkg/Shlibs/Objdump.pm
+#, perl-format
+msgid "couldn't parse dynamic symbol definition: %s"
+msgstr "incapaz de analisar definição de símbolo dinâmico: %s"
+
+#: scripts/Dpkg/Shlibs/Symbol.pm
+#, perl-format
+msgid "symbol name unspecified: %s"
+msgstr "nome de símbolo não especificado: %s"
+
+#: scripts/Dpkg/Shlibs/Symbol.pm
+#, perl-format
+msgid "symver tag with versioned symbol will not match: %s"
+msgstr "etiqueta symver com símbolo versionado sem nenhuma correspondência: %s"
+
+#: scripts/Dpkg/Shlibs/Symbol.pm
+#, perl-format
+msgid "you can't use symver tag to catch unversioned symbols: %s"
+msgstr ""
+"você não pode usar a etiqueta symver para obter símbolos sem versão: %s"
+
+#: scripts/Dpkg/Shlibs/SymbolFile.pm
+#, perl-format
+msgid "symbol information must be preceded by a header (file %s, line %s)"
+msgstr ""
+"a informação de símbolo tem de ser precedida de um cabeçalho (ficheiro %s, "
+"linha %s)"
+
+#: scripts/Dpkg/Shlibs/SymbolFile.pm
+#, perl-format
+msgid "failed to parse line in %s: %s"
+msgstr "falhou ao analisar linha em %s: %s"
+
+#: scripts/Dpkg/Shlibs/SymbolFile.pm
+#, perl-format
+msgid "failed to parse a line in %s: %s"
+msgstr "falhou ao analisar uma linha em %s: %s"
+
+#: scripts/Dpkg/Shlibs/SymbolFile.pm
+#, perl-format
+msgid "tried to merge the same object (%s) twice in a symfile"
+msgstr "tentou fundir o mesmo objecto (%s) duas vezes num ficheiro simbólico"
+
+#: scripts/Dpkg/Shlibs/SymbolFile.pm
+msgid "cannot merge symbols from objects without SONAME"
+msgstr "incapaz de fundir símbolos a partir de objectos sem SONAME"
+
+#: scripts/Dpkg/Source/Archive.pm
+msgid "write on tar input"
+msgstr "escrever na entrada tar"
+
+#: scripts/Dpkg/Source/Archive.pm
+msgid "close on tar input"
+msgstr "fechar na entrada tar"
+
+#: scripts/Dpkg/Source/Archive.pm scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot create directory %s"
+msgstr "incapaz de criar directório %s"
+
+#: scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "cannot get source pathname %s metadata"
+msgstr "incapaz de obter metadados %s do nome de caminho da fonte"
+
+#: scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "cannot get target pathname %s metadata"
+msgstr "incapaz de obter metadados %s do nome de caminho do alvo"
+
+#: scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "cannot change directory %s mode"
+msgstr "incapaz de mudar o modo do directório %s"
+
+#: scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "cannot change directory %s times"
+msgstr "incapaz de mudar directório %s vezes"
+
+#: scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "cannot remove destination directory %s"
+msgstr "incapaz de remover directório de destino %s"
+
+#: scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "cannot remove destination file %s"
+msgstr "incapaz de remover ficheiro de destino %s"
+
+#: scripts/Dpkg/Source/Archive.pm scripts/Dpkg/Source/Package.pm
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "cannot opendir %s"
+msgstr "incapaz de opendir %s"
+
+#: scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "unable to rename %s to %s"
+msgstr "incapaz de renomear %s para %s"
+
+#: scripts/Dpkg/Source/Functions.pm
+#, perl-format
+msgid "cannot stat directory %s (before removal)"
+msgstr "incapaz de estatística ao directório %s (antes da remoção)"
+
+#: scripts/Dpkg/Source/Functions.pm
+#, perl-format
+msgid "unable to check for removal of directory '%s'"
+msgstr "incapaz de verificar para a remoção do directório '%s'"
+
+#: scripts/Dpkg/Source/Functions.pm
+#, perl-format
+msgid "rm -rf failed to remove '%s'"
+msgstr "rm -rf falhou ao remover '%s'"
+
+#: scripts/Dpkg/Source/Functions.pm scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot change timestamp for %s"
+msgstr "não pode alterar marca temporal para %s"
+
+#: scripts/Dpkg/Source/Functions.pm
+#, perl-format
+msgid "cannot read timestamp from %s"
+msgstr "não pode ler marca temporal de %s"
+
+#: scripts/Dpkg/Source/Functions.pm
+#, perl-format
+msgid "cannot open file %s for binary detection"
+msgstr "não pode abrir ficheiro %s para deteção binária"
+
+#: scripts/Dpkg/Source/BinaryFiles.pm
+#, perl-format
+msgid "adding %s to %s"
+msgstr "a adicionar %s a %s"
+
+#: scripts/Dpkg/Source/BinaryFiles.pm
+#, perl-format
+msgid "unwanted binary file: %s"
+msgstr "ficheiro binário indesejado: %s"
+
+#: scripts/Dpkg/Source/BinaryFiles.pm
+#, perl-format
+msgid ""
+"detected %d unwanted binary file (add it in debian/source/include-binaries "
+"to allow its inclusion)."
+msgid_plural ""
+"detected %d unwanted binary files (add them in debian/source/include-"
+"binaries to allow their inclusion)."
+msgstr[0] ""
+"detectado %d ficheiro binário indesejado (adicione-o a debian/source/include-"
+"binaries para permitir a sua inclusão)."
+msgstr[1] ""
+"detectado %d ficheiros binário indesejados (adicione-os a debian/source/"
+"include-binaries para permitir a sua inclusão)."
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "%s is not the name of a file"
+msgstr "%s não é o nome de um ficheiro"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "missing critical source control field %s"
+msgstr "campo de controle de fonte crítico em falta %s"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "source package format '%s' is not supported: %s"
+msgstr "formato de pacote fonte '%s' não é suportado: %s"
+
+#: scripts/Dpkg/Source/Package.pm
+msgid "source package uses only weak checksums"
+msgstr "pacote fonte apenas usa sumários de verificação fracos"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "%s and %s fields are required to compute the source basename"
+msgstr "os campos %s e %s são requeridos para computar o nome base da fonte"
+
+#: scripts/Dpkg/Source/Package.pm
+msgid "upstream tarball signatures but no upstream signing key"
+msgstr ""
+"assinaturas de tarball de autor mas nenhuma chave de assinatura de autor"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "verifying %s"
+msgstr "a verificar %s"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "cannot verify upstream tarball signature for %s: %s"
+msgstr "incapaz de verificar assinatura de tarball de autor para %s: %s"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "cannot verify inline signature for %s: %s"
+msgstr "incapaz de verificar assinatura em linha para %s: %s"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "%s is not a valid option for %s"
+msgstr "%s não é uma opção válida para %s"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "cannot copy %s to %s"
+msgstr "incapaz de copiar %s para %s"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "%s does not exist"
+msgstr "%s não existe"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "cannot make %s executable"
+msgstr "não pode tornar %s executável"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "%s is not a plain file"
+msgstr "%s não é um ficheiro simples"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "'%s' is not supported by the source format '%s'"
+msgstr "'%s' não é suportado pelo formato fonte '%s'"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "auto select original source"
+msgstr "auto selecionar fonte original"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "use packed original source (unpack and keep)"
+msgstr "usa fonte original empacotada (desempacota e mantém)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "use packed original source (unpack and remove)"
+msgstr "usa fonte original empacotada (desempacota e remove)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "use unpacked original source (pack and keep)"
+msgstr "usa fonte original desempacotada (empacota e mantém)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "use unpacked original source (pack and remove)"
+msgstr "usa fonte original desempacotada (empacota e remove)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "trust packed and unpacked original sources are same"
+msgstr "confiança das fontes originais empacotada e desempacotada são iguais"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "there is no diff, do main tarfile only"
+msgstr "não existe diff, fazer apenas o ficheiro tar principal"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "like -sa, -sk, -sp, -su, -sr but may overwrite"
+msgstr "como -sa, -sk, -sp, -su, -sr mas pode sobrepor"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+msgid "abort if generated diff has upstream files changes"
+msgstr "aborta se o diff gerado tiver alterações nos ficheiros do autor"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "leave original source packed in current directory"
+msgstr "deixar a fonte original empacotada no directório actual"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "do not copy original source to current directory"
+msgstr "não copia a fonte original para o directório actual"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "unpack original source tree too"
+msgstr "desempacota também a árvore fonte original"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "do not apply debian diff to upstream sources"
+msgstr "não aplica o diff debian às fontes do autor"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "-s%s option overrides earlier -s%s option"
+msgstr "a opção -s%s sobrepõe a opção -s%s anterior"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "source handling style -s%s not allowed with -x"
+msgstr "estilo de manuseamento de fonte -s%s não permitido com -x"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "multiple tarfiles in v1.0 source package"
+msgstr "múltiplos tarfiles em pacote fonte v1.0"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "unrecognized file for a %s source package: %s"
+msgstr "ficheiro irreconhecível para um pacote fonte %s: %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V3/Native.pm
+msgid "no tarfile in Files field"
+msgstr "nenhum tarfile no campo Files"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "native package with .orig.tar"
+msgstr "pacote nativo com .orig.tar"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "unable to rename '%s' to '%s'"
+msgstr "incapaz de renomear '%s' para '%s'"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+#, perl-format
+msgid "unpacking %s"
+msgstr "a desempacotar %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "unable to keep orig directory (already exists)"
+msgstr "incapaz de manter o directório orig (já existe)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "failed to rename newly-extracted %s to %s"
+msgstr "falhou ao renomear %s recentemente extraído para %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "failed to rename saved %s to %s"
+msgstr "falhou ao renomear %s salvado para %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "applying %s"
+msgstr "a aplicar %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "upstream files that have been modified: %s"
+msgstr "ficheiros de autor que foram modificados: %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "only supports gzip compression"
+msgstr "apenas suporta compressão gzip"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid ""
+"-b takes at most a directory and an orig source argument (with v1.0 source "
+"package)"
+msgstr ""
+"-b recebe pelo menos um directório e um argumento fonte original (com pacote "
+"fonte v1.0)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "source handling style -s%s not allowed with -b"
+msgstr "estilo de manuseamento de fonte -s%s não permitido com -b"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "packed orig '%s' exists but is not a plain file"
+msgstr "orig empacotado '%s' existe mas não é um ficheiro simples"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "cannot stat orig argument %s"
+msgstr "incapaz de criar estatística argumento orig %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid ""
+"orig argument is unpacked but source handling style -s%s calls for packed (."
+"orig.tar.<ext>)"
+msgstr ""
+"argumento orig está desempacotado mas o estilo de manuseamento da fonte -s%s "
+"pede por (.orig.tar.<ext>) empacotado"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid ""
+"orig argument is packed but source handling style -s%s calls for unpacked (."
+"orig/)"
+msgstr ""
+"argumento orig está empacotado mas o estilo de manuseamento da fonte -s%s "
+"pede por (.orig/) desempacotado"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "orig argument %s is not a plain file or directory"
+msgstr "argumento orig %s não é um ficheiro simples nem directório"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid ""
+"orig argument is empty (means no orig, no diff) but source handling style -"
+"s%s wants something"
+msgstr ""
+"argumento orig está vazio (significa nenhum orig, nenhum diff) mas o estilo "
+"de manuseamento de fonte -s%s requer alguma coisa"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "unpacked orig '%s' exists but is not a directory"
+msgstr "orig desempacotado '%s' existe, mas não é um directório"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "unable to stat putative unpacked orig '%s'"
+msgstr "incapaz de fazer estatística putativa ao original desempacotado '%s'"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V3/Quilt.pm
+msgid "non-native package version does not contain a revision"
+msgstr "versão de pacote não-nativa não contém uma revisão"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V3/Native.pm
+msgid "native package version may not have a revision"
+msgstr "versão de pacote nativa pode não ter uma revisão"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "source directory '%s' is not <sourcepackage>-<upstreamversion> '%s'"
+msgstr "directório fonte '%s' não é <sourcepackage>-<upstreamversion> '%s'"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid ".orig directory name %s is not <package>-<upstreamversion> (wanted %s)"
+msgstr ""
+"nome de directório .orig %s não é <pacote>-<versão-autor> (espera-se %s)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid ""
+".orig.tar name %s is not <package>_<upstreamversion>.orig.tar (wanted %s)"
+msgstr ""
+"nome .orig.tar %s não é <package>_<upstreamversion>.orig.tar (queremos %s)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid ""
+"tarfile '%s' already exists, not overwriting, giving up; use -sU or -sR to "
+"override"
+msgstr ""
+"ficheiro tar '%s' já existe, a não sobrescrever, a desistir; use -sU ou -sR "
+"para sobrepor"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "unable to check for existence of '%s'"
+msgstr "incapaz de verificar a existência de '%s'"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V3/Native.pm
+#, perl-format
+msgid "unable to rename '%s' (newly created) to '%s'"
+msgstr "incapaz de renomear '%s' (recentemente criado) para '%s'"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+#: scripts/Dpkg/Source/Package/V3/Quilt.pm scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "unable to change permission of '%s'"
+msgstr "incapaz de mudar a permissão de '%s'"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "building %s using existing %s"
+msgstr "a compilar %s usando %s existente"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+msgid "upstream signing key but no upstream tarball signature"
+msgstr ""
+"chave de assinatura do autor mas nenhuma assinatura de tarball de autor"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid ""
+"orig directory '%s' already exists, not overwriting, giving up; use -sA, -sK "
+"or -sP to override"
+msgstr ""
+"directório original '%s' já existe, a não sobrescrever, a desistir; use -sA, "
+"-sK ou -sP para sobrepor"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "unable to check for existence of orig directory '%s'"
+msgstr "incapaz de verificar a existência do directório original '%s'"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "the diff modifies the following upstream files: %s"
+msgstr "o diff modifica os seguintes ficheiros do autor: %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid ""
+"use the '3.0 (quilt)' format to have separate and documented changes to "
+"upstream files, see dpkg-source(1)"
+msgstr ""
+"use o formato '3.0 (quilt)' para ter alterações separadas e documentadas nos "
+"ficheiros do autor, veja dpkg-source(1)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "aborting due to --abort-on-upstream-changes"
+msgstr "a abortar devido a --abort-on-upstream-changes"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+msgid "unrepresentable changes to source"
+msgstr "alterações não representáveis à fonte"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "include removed files in the patch"
+msgstr "incluir ficheiros removidos na patch"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "include timestamp in the patch"
+msgstr "incluir marca temporal na patch"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "include binary files in the tarball"
+msgstr "incluir ficheiros binários no tarball"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "do not prepare build tree by applying patches"
+msgstr "não prepara a árvore de compilação ao aplicar as patches"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "do not unapply patches if previously applied"
+msgstr "não retira a aplicação das patches se foram aplicadas anteriormente"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "unapply patches if previously applied (default)"
+msgstr ""
+"retira a aplicação das patches se foram aplicadas anteriormente "
+"(predefinição)"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "create an empty original tarball if missing"
+msgstr "cria um tarball original vazio se estiver em falta"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "record generated patches, instead of aborting"
+msgstr "grava as patches geradas, em vez de abortar"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "do not extract debian tarball into upstream sources"
+msgstr "não extrai o tarball debian nas fontes do autor"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "do not apply patches at the end of the extraction"
+msgstr "não aplica as patches no final da extração"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "duplicate files in %s source package: %s"
+msgstr "ficheiros duplicados em pacote fonte %s: %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "missing orig.tar or debian.tar file in v2.0 source package"
+msgstr "ficheiro orig.tar ou debian.tar em falta em pacote fonte v2.0"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "mismatched orig.tar %s for signature %s in source package"
+msgstr "orig.tar %s não correspondente para assinatura %s no pacote fonte"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "missing addon orig.tar for signature %s in source package"
+msgstr "addon orig.tar em falta para assinatura %s em pacote fonte"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "mismatched addon orig.tar %s for signature %s in source package"
+msgstr ""
+"addon orig.tar %s não correspondente para assinatura %s no pacote fonte"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "required removal of '%s' installed by original tarball"
+msgstr "necessária a remoção de '%s' instalado pelo tarball original"
+
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "unapplying %s"
+msgstr "a retirar a aplicação de %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "no upstream tarball found at %s"
+msgstr "nenhum tarball de autor encontrado em %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "patches are not applied, applying them now"
+msgstr "as patches não estão aplicadas, a aplica-las agora"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "several orig.tar files found (%s and %s) but only one is allowed"
+msgstr ""
+"vários ficheiros orig.tar encontrados (%s e %s) mas apenas é permitido um"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "copy of the debian directory"
+msgstr "cópia do directório debian"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "local changes detected, the modified files are:"
+msgstr "alterações locais detetadas, os ficheiros modificados são:"
+
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Package/V3/Bzr.pm
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+#, perl-format
+msgid "-b takes only one parameter with format '%s'"
+msgstr "-b recebe apenas um parâmetro com formato '%s'"
+
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot represent change to %s: %s"
+msgstr "não pode representar alteração para %s: %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Patch.pm
+msgid "binary file contents changed"
+msgstr "conteúdo do ficheiro binário alterado"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid ""
+"add %s in debian/source/include-binaries if you want to store the modified "
+"binary in the debian tarball"
+msgstr ""
+"adicione %s em debian/source/include-binaries se desejar armazenar o binário "
+"modificado no tarball debian"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid ""
+"Hint: make sure the version in debian/changelog matches the unpacked source "
+"tree"
+msgstr ""
+"Dica: certifique-se que a versão em debian/changelog corresponde à árvore "
+"fonte desempacotada"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "you can integrate the local changes with %s"
+msgstr "você pode integrar as alterações locais com %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "aborting due to unexpected upstream changes, see %s"
+msgstr "a abortar devido a alterações do autor inesperadas, veja %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "local changes have been recorded in a new patch: %s"
+msgstr "as alterações locais foram gravadas numa nova patch: %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Package/V3/Quilt.pm
+#, perl-format
+msgid "cannot remove %s"
+msgstr "não pode remover %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Package/V3/Quilt.pm
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "failed to copy %s to %s"
+msgstr "falhou ao copiar %s para %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "cannot register changes in %s, this patch already exists"
+msgstr "não pode registar alterações em %s, esta patch já existe"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "patch file '%s' doesn't exist"
+msgstr "ficheiro patch '%s' não existe"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "there are no local changes to record"
+msgstr "não existem alterações locais a gravar"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "Enter the desired patch name: "
+msgstr "Insira o nome de patch desejado: "
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "no patch name given; cannot proceed"
+msgstr "nenhum nome de patch dado; não se pode prosseguir"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "cannot find an editor"
+msgstr "incapaz de encontrar um editor"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+msgid "cannot unpack bzr-format source package because bzr is not in the PATH"
+msgstr ""
+"incapaz de desempacotar pacote fonte em formato bzr porque o bzr não está no "
+"caminho PATH"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+#, perl-format
+msgid ""
+"source directory is not the top directory of a bzr repository (%s/.bzr not "
+"present), but Format bzr was specified"
+msgstr ""
+"directório fonte não é o directório de topo de um repositório bzr (%s/.bzr "
+"não presente), mas foi especificado o formato bzr"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+#, perl-format
+msgid "%s is a symlink"
+msgstr "%s é um link simbólico"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+#, perl-format
+msgid "%s is a symlink to outside %s"
+msgstr "%s é um link simbólico para o exterior %s"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+msgid "doesn't contain a bzr repository"
+msgstr "não contém um repositório bzr"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+msgid "bzr status exited nonzero"
+msgstr "estado de bzr terminou com não-zero"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "uncommitted, not-ignored changes in working directory: %s"
+msgstr "não cometido, alterações não-ignoradas no directório de trabalho: %s"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+msgid "format v3.0 (bzr) uses only one source file"
+msgstr "formato v3.0 (bzr) usa apenas um ficheiro fonte"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+#, perl-format
+msgid "expected %s, got %s"
+msgstr "esperado %s, obtido %s"
+
+#: scripts/Dpkg/Source/Package/V3/Custom.pm
+msgid "define the format of the generated source package"
+msgstr "define o formato do pacote fonte gerado"
+
+#: scripts/Dpkg/Source/Package/V3/Custom.pm
+msgid "Format '3.0 (custom)' is only used to create source packages"
+msgstr "Formato '3.0 (custom)' é apenas usado para criar pacotes fonte"
+
+#: scripts/Dpkg/Source/Package/V3/Custom.pm
+msgid "no files indicated on command line"
+msgstr "nenhuns ficheiros indicados na linha de comandos"
+
+#: scripts/Dpkg/Source/Package/V3/Custom.pm
+msgid "--target-format option is missing"
+msgstr "opção --target-format está em falta"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "cannot unpack git-format source package because git is not in the PATH"
+msgstr ""
+"incapaz de desempacotar pacote fonte em formato git porque o git não está no "
+"caminho PATH"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid ""
+"source directory is not the top directory of a git repository (%s/.git not "
+"present), but Format git was specified"
+msgstr ""
+"directório fonte não é o directório de topo de um repositório git (%s/.git "
+"não presente), mas foi especificado o formato git"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "git repository %s uses submodules; this is not yet supported"
+msgstr "repositório git %s usa sub-módulos; isto ainda não é suportado"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "specify a git <ref> to include in the git bundle"
+msgstr "especifica uma <ref> git para incluir no bolo de git"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "create a shallow clone with <number> depth"
+msgstr "cria um clone raso com <número> de profundidade"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "doesn't contain a git repository"
+msgstr "não contém um repositório git"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "git ls-files exited nonzero"
+msgstr "git ls-files terminou com não-zero"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "creating shallow clone with depth %s"
+msgstr "a criar clone raso com profundidade %s"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "bundling: %s"
+msgstr "a compilar: %s"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "format v3.0 (git) uses only one .git file"
+msgstr "formato v3.0 (git) usa apenas um ficheiro .git"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "format v3.0 (git) uses only one .gitshallow file"
+msgstr "formato v3.0 (git) usa apenas um ficheiro .gitshallow"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "format v3.0 (git) unknown file: %s"
+msgstr "formato v3.0 (git) ficheiro desconhecido: %s"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "format v3.0 (git) expected %s"
+msgstr "formato v3.0 (git) esperado %s"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "cloning %s"
+msgstr "a clonar %s"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "setting up shallow clone"
+msgstr "a definir clone sombra"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "setting remote %s to %s"
+msgstr "a definir remoto %s para %s"
+
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+msgid "multiple tarfiles in native source package"
+msgstr "múltiplos ficheiros tar em pacote fonte nativo"
+
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+#, perl-format
+msgid "unrecognized file for a native source package: %s"
+msgstr "ficheiro não reconhecido para um pacote fonte nativo: %s"
+
+#: scripts/Dpkg/Source/Package/V3/Quilt.pm
+msgid "use a single debianization patch"
+msgstr "usar uma única patch de debianização"
+
+#: scripts/Dpkg/Source/Package/V3/Quilt.pm
+msgid "accept quilt metadata <version> even if unknown"
+msgstr "aceitar <versão> de metadados quilt mesmo se desconhecida"
+
+#: scripts/Dpkg/Source/Package/V3/Quilt.pm
+#, perl-format
+msgid "can't create symlink %s"
+msgstr "incapaz de criar link simbólico %s"
+
+#: scripts/Dpkg/Source/Package/V3/Quilt.pm
+#, perl-format
+msgid "using patch list from %s"
+msgstr "a usar lista de patch de %s"
+
+#: scripts/Dpkg/Source/Package/V3/Quilt.pm
+#, perl-format
+msgid "unsupported version of the quilt metadata: %s"
+msgstr "versão não suportada dos metadados quilt: %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "file %s has no final newline (either original or modified version)"
+msgstr ""
+"ficheiro %s não tem nova linha final (seja original ou versão modificada)"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "unknown line from diff -u on %s: '%s'"
+msgstr "linha desconhecida de diff -u em %s: '%s'"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "failed to write"
+msgstr "falhou ao escrever"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff on %s"
+msgstr "diff em %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot stat file %s"
+msgstr "incapaz de criar estatística de ficheiro %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot read link %s"
+msgstr "incapaz de ler link %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "device or socket is not allowed"
+msgstr "dispositivo ou socket não é permitido"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "unknown file type"
+msgstr "tipo de ficheiro desconhecido"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "ignoring deletion of file %s"
+msgstr "a ignorar o apagar do ficheiro %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "ignoring deletion of file %s, use --include-removal to override"
+msgstr "a ignorar apagar de ficheiro %s, use --include-removal para sobrepor"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "ignoring deletion of directory %s"
+msgstr "a ignorar o apagar do directório %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "ignoring deletion of symlink %s"
+msgstr "a ignorar o apagar do link simbólico %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "newly created empty file '%s' will not be represented in diff"
+msgstr "ficheiro vazio recentemente criado '%s' não será representado no diff"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "executable mode %04o of '%s' will not be represented in diff"
+msgstr "modo executável %04o de '%s' não será representado no diff"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "special mode %04o of '%s' will not be represented in diff"
+msgstr "modo especial %04o de '%s' não será representado no diff"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot represent change to %s:"
+msgstr "não pode representar alteração para %s:"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid " new version is %s"
+msgstr " nova versão é %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid " old version is %s"
+msgstr " versão antiga é %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff %s patches file with C-style encoded filename"
+msgstr ""
+"diff %s aplica patch a ficheiro com nome de ficheiro codificado em estilo C"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "expected ^--- in line %d of diff '%s'"
+msgstr "esperado ^--- na linha %d do diff '%s'"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff '%s' patches file with name ending in .dpkg-orig"
+msgstr "diff '%s' aplica patch a ficheiro com nome a terminar em .dpkg-orig"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff '%s' finishes in middle of ---/+++ (line %d)"
+msgstr "diff '%s' termina a meio de ---/+++ (linha %d)"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "line after --- isn't as expected in diff '%s' (line %d)"
+msgstr "linha após --- não é o que esperado no diff '%s' (linha %d)"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "none of the filenames in ---/+++ are valid in diff '%s' (line %d)"
+msgstr ""
+"nenhum dos nomes de ficheiros em ---/+++ são válidos no diff '%s' (linha %d)"
+
+#: scripts/Dpkg/Source/Patch.pm scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "%s contains an insecure path: %s"
+msgstr "%s contém um caminho não seguro: %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff %s modifies file %s through a symlink: %s"
+msgstr "diff %s modifica ficheiro %s através dum link simbólico: %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "original and modified files are /dev/null in diff '%s' (line %d)"
+msgstr ""
+"ficheiros originais e modificados são /dev/null no diff '%s' (linha %d)"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "file removal without proper filename in diff '%s' (line %d)"
+msgstr ""
+"remoção de ficheiro sem nome de ficheiro apropriado em diff '%s' (linha %d)"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff %s removes a non-existing file %s (line %d)"
+msgstr "diff %s remove um ficheiro não existente %s (linha %d)"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff '%s' patches something which is not a plain file"
+msgstr "diff '%s' aplica patch a algo que não é um ficheiro simples"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid ""
+"diff '%s' patches files multiple times; split the diff in multiple files or "
+"merge the hunks into a single one"
+msgstr ""
+"diff '%s' aplica patch a ficheiros várias vezes; divida o diff em vários "
+"ficheiros ou funda os vários pedaços num único"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff '%s' patches file %s more than once"
+msgstr "diff '%s' aplica patch a ficheiro %s mais de uma vez"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "unexpected end of diff '%s'"
+msgstr "final inesperado do diff '%s'"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "expected [ +-] at start of line %d of diff '%s'"
+msgstr "esperado [ +-] no inicio da linha %d do diff '%s'"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "expected ^@@ at line %d of diff '%s'"
+msgstr "esperado ^@@ na linha %d do diff '%s'"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff '%s' doesn't contain any patch"
+msgstr "diff '%s' não contém nenhuma patch"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "remove patch backup file %s"
+msgstr "remover ficheiro de salvaguarda de patch %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "nonexistent"
+msgstr "não-existente"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "plain file"
+msgstr "ficheiro simples"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "directory"
+msgstr "directório"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "symlink to %s"
+msgstr "link simbólico para %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "block device"
+msgstr "dispositivo de bloco"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "character device"
+msgstr "dispositivo de caractere"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "named pipe"
+msgstr "pipe nomeado"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "named socket"
+msgstr "socket nomeado"
+
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "cannot mkdir %s"
+msgstr "não pode mkdir %s"
+
+#: scripts/Dpkg/Source/Quilt.pm
+msgid "the patch has fuzz which is not allowed, or is malformed"
+msgstr "a patch tem fuzz o que não é permitido, ou está mal formada"
+
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "if patch '%s' is correctly applied by quilt, use '%s' to update it"
+msgstr ""
+"se a patch '%s' for corretamente aplicada por quilt, use '%s' para a "
+"actualizar"
+
+#: scripts/Dpkg/Source/Quilt.pm
+msgid ""
+"if the file is present in the unpacked source, make sure it is also present "
+"in the orig tarball"
+msgstr ""
+"se o ficheiro está presente na fonte desempacotada, certifique-se que está "
+"também presente no tarball original"
+
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "%s should be a directory or non-existing"
+msgstr "%s deve ser um directório ou não-existente"
+
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "%s should be a file or non-existing"
+msgstr "%s deve ser um ficheiro ou não-existente"
+
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid ""
+"the series file (%s) contains unsupported options ('%s', line %s); dpkg-"
+"source might fail when applying patches"
+msgstr ""
+"o ficheiro de séries (%s) contém opções não suportadas ('%s', linha %s); "
+"dpkg-source pode falhar ao aplicar as patches"
+
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "restoring quilt backup files for %s"
+msgstr "a restaurar ficheiros de salvaguarda quilt para %s"
+
+#: scripts/Dpkg/Substvars.pm
+#, perl-format
+msgid "bad line in substvars file %s at line %d"
+msgstr "má linha no ficheiro substvars %s na linha %d"
+
+#: scripts/Dpkg/Substvars.pm
+#, perl-format
+msgid "invalid source version %s"
+msgstr "versão fonte inválida %s"
+
+#: scripts/Dpkg/Substvars.pm
+#, perl-format
+msgid "too many substitutions - recursive ? - in '%s'"
+msgstr "demasiadas substituições - recursivo ? - em '%s'"
+
+#: scripts/Dpkg/Substvars.pm
+#, perl-format
+msgid "obsolete substitution variable ${%s}"
+msgstr "variável de substituição obsoleta ${%s}"
+
+#: scripts/Dpkg/Substvars.pm
+#, perl-format
+msgid "substitution variable ${%s} used, but is not defined"
+msgstr "variável de substituição ${%s} usada, mas não está definida"
+
+#: scripts/Dpkg/Substvars.pm
+#, perl-format
+msgid "substitution variable ${%s} unused, but is defined"
+msgstr "variável de substituição ${%s} não usada, mas está definida"
+
+#: scripts/Dpkg/Vars.pm
+#, perl-format
+msgid "source package name '%s' is illegal: %s"
+msgstr "nome de pacote fonte '%s' é ilegal: %s"
+
+#: scripts/Dpkg/Vars.pm
+#, perl-format
+msgid "source package has two conflicting values - %s and %s"
+msgstr "pacote fonte tem dois valores em conflito - %s e %s"
+
+#: scripts/Dpkg/Vendor.pm
+#, perl-format
+msgid ""
+"%s origin filename is deprecated; it should have only alphanumeric or dash "
+"characters"
+msgstr ""
+"nome de ficheiro original %s está descontinuado; deve apenas ter caracteres "
+"alfanuméricos ou traços"
+
+#: scripts/Dpkg/Vendor.pm
+#, perl-format
+msgid ""
+"%s module name is deprecated; it should be capitalized with only "
+"alphanumeric characters"
+msgstr ""
+"nome de módulo %s está descontinuado; deve ser capitalizado com apenas "
+"caracteres alfanuméricos"
+
+#: scripts/Dpkg/Vendor/Debian.pm
+#, perl-format
+msgid "unknown host architecture '%s'"
+msgstr "arquitectura anfitriã desconhecida '%s'"
+
+#: scripts/Dpkg/Vendor/Ubuntu.pm
+msgid ""
+"Version number suggests Ubuntu changes, but Maintainer: does not have Ubuntu "
+"address"
+msgstr ""
+"Número de versão sugere alterações de Ubuntu, mas Maintainer: não tem um "
+"endereço de Ubuntu"
+
+#: scripts/Dpkg/Vendor/Ubuntu.pm
+msgid ""
+"Version number suggests Ubuntu changes, but there is no XSBC-Original-"
+"Maintainer field"
+msgstr ""
+"Número de versão sugere alterações de Ubuntu, mas não existe campo XSBC-"
+"Original-Maintainer"
+
+#: scripts/Dpkg/Version.pm
+#, perl-format
+msgid "%s is not a valid version"
+msgstr "%s não é uma versão válida"
+
+#: scripts/Dpkg/Version.pm
+msgid "version number cannot be empty"
+msgstr "número de versão não pode estar vazio"
+
+#: scripts/Dpkg/Version.pm
+msgid "epoch part of the version number cannot be empty"
+msgstr "parte epoch do número de versão não pode estar vazia"
+
+#: scripts/Dpkg/Version.pm
+msgid "upstream version cannot be empty"
+msgstr "versão de autor não pode estar vazia"
+
+#: scripts/Dpkg/Version.pm
+msgid "revision cannot be empty"
+msgstr "revisão não pode estar vazio"
+
+#: scripts/Dpkg/Version.pm
+msgid "version number does not start with digit"
+msgstr "número de versão não começa com um dígito"
+
+#: scripts/Dpkg/Version.pm
+#, perl-format
+msgid "version number contains illegal character '%s'"
+msgstr "número de versão contém caractere ilegal '%s'"
+
+#: scripts/Dpkg/Version.pm
+#, perl-format
+msgid "epoch part of the version number is not a number: '%s'"
+msgstr "parte epoch do número de versão não é um número: '%s'"
diff --git a/scripts/po/quot.sed b/scripts/po/quot.sed
new file mode 100644
index 0000000..0122c46
--- /dev/null
+++ b/scripts/po/quot.sed
@@ -0,0 +1,6 @@
+s/"\([^"]*\)"/“\1”/g
+s/`\([^`']*\)'/‘\1’/g
+s/ '\([^`']*\)' / ‘\1’ /g
+s/ '\([^`']*\)'$/ ‘\1’/g
+s/^'\([^`']*\)' /‘\1’ /g
+s/“”/""/g
diff --git a/scripts/po/remove-potcdate.sin b/scripts/po/remove-potcdate.sin
new file mode 100644
index 0000000..8c70dfb
--- /dev/null
+++ b/scripts/po/remove-potcdate.sin
@@ -0,0 +1,25 @@
+# Sed script that removes the POT-Creation-Date line in the header entry
+# from a POT file.
+#
+# Copyright (C) 2002 Free Software Foundation, Inc.
+# Copying and distribution of this file, with or without modification,
+# are permitted in any medium without royalty provided the copyright
+# notice and this notice are preserved. This file is offered as-is,
+# without any warranty.
+#
+# The distinction between the first and the following occurrences of the
+# pattern is achieved by looking at the hold space.
+/^"POT-Creation-Date: .*"$/{
+x
+# Test if the hold space is empty.
+s/P/P/
+ta
+# Yes it was empty. First occurrence. Remove the line.
+g
+d
+bb
+:a
+# The hold space was nonempty. Following occurrences. Do nothing.
+x
+:b
+}
diff --git a/scripts/po/ru.gmo b/scripts/po/ru.gmo
new file mode 100644
index 0000000..32a431f
--- /dev/null
+++ b/scripts/po/ru.gmo
Binary files differ
diff --git a/scripts/po/ru.po b/scripts/po/ru.po
new file mode 100644
index 0000000..ee0ad3e
--- /dev/null
+++ b/scripts/po/ru.po
@@ -0,0 +1,5311 @@
+# translation of scripts_po_ru.po to Russian
+# Localization file for dpkg and other programs from dpkg package.
+#
+# Yuri Kozlov <yuray@komyakino.ru>, 2007, 2008.
+# Yuri Kozlov <yuray@komyakino.ru>, 2009, 2010, 2012, 2013, 2014.
+msgid ""
+msgstr ""
+"Project-Id-Version: dpkg-dev 1.17.23\n"
+"Report-Msgid-Bugs-To: debian-dpkg@lists.debian.org\n"
+"POT-Creation-Date: 2023-05-11 02:03+0000\n"
+"PO-Revision-Date: 2015-04-07 07:02+0200\n"
+"Last-Translator: Yuri Kozlov <yuray@komyakino.ru>\n"
+"Language-Team: Russian <debian-l10n-russian@lists.debian.org>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.5\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+#: scripts/dpkg-architecture.pl scripts/dpkg-buildflags.pl
+#: scripts/dpkg-buildpackage.pl scripts/dpkg-checkbuilddeps.pl
+#: scripts/dpkg-distaddfile.pl scripts/dpkg-genbuildinfo.pl
+#: scripts/dpkg-genchanges.pl scripts/dpkg-gencontrol.pl
+#: scripts/dpkg-gensymbols.pl scripts/dpkg-mergechangelogs.pl
+#: scripts/dpkg-name.pl scripts/dpkg-parsechangelog.pl
+#: scripts/dpkg-scanpackages.pl scripts/dpkg-scansources.pl
+#: scripts/dpkg-shlibdeps.pl scripts/dpkg-source.pl scripts/dpkg-vendor.pl
+#, perl-format
+msgid "Debian %s version %s.\n"
+msgstr "Debian %s, версия %s.\n"
+
+#: scripts/dpkg-architecture.pl scripts/dpkg-buildflags.pl
+#: scripts/dpkg-buildpackage.pl scripts/dpkg-distaddfile.pl
+#: scripts/dpkg-genbuildinfo.pl scripts/dpkg-genchanges.pl
+#: scripts/dpkg-gencontrol.pl scripts/dpkg-gensymbols.pl
+#: scripts/dpkg-parsechangelog.pl scripts/dpkg-shlibdeps.pl
+#: scripts/dpkg-source.pl scripts/dpkg-vendor.pl
+msgid ""
+"\n"
+"This is free software; see the GNU General Public License version 2 or\n"
+"later for copying conditions. There is NO warranty.\n"
+msgstr ""
+"\n"
+"Это свободное программное обеспечение. См. условия распространения в\n"
+"Универсальной общественной лицензии GNU версии 2 или более поздней.\n"
+"НИКАКИЕ гарантии не предоставляются.\n"
+
+#: scripts/dpkg-architecture.pl scripts/dpkg-vendor.pl
+#, perl-format
+msgid "Usage: %s [<option>...] [<command>]"
+msgstr "Использование: %s [<параметр>...] <команда>"
+
+#: scripts/dpkg-architecture.pl
+msgid ""
+"Commands:\n"
+" -l, --list list variables (default).\n"
+" -L, --list-known list valid architectures (matching some "
+"criteria).\n"
+" -e, --equal <arch> compare with host Debian architecture.\n"
+" -i, --is <arch-wildcard> match against host Debian architecture.\n"
+" -q, --query <variable> prints only the value of <variable>.\n"
+" -s, --print-set print command to set environment variables.\n"
+" -u, --print-unset print command to unset environment variables.\n"
+" -c, --command <command> set environment and run the command in it.\n"
+" -?, --help show this help message.\n"
+" --version show the version."
+msgstr ""
+"Команды:\n"
+" -l, --list вывести список переменных (действие по "
+"умолчанию)\n"
+" -L, --list-known вывести список корректных архитектур\n"
+" (подходящих под некоторый критерий).\n"
+" -e, --equal <арх> сравнить с архитектурой текущего узла Debian\n"
+" -i, --is <шаблон-арх> проверить, совпадает ли архитектура текущего\n"
+" узла Debian с шаблоном\n"
+" -q, --query <переменная> показать значение только <переменной>\n"
+" -s, --print-set показать команду для установки переменных "
+"окружения\n"
+" -u, --print-unset показать команду для сброса переменных "
+"окружения\n"
+" -c, --command <команда> настроить окружение и запустить в нём команду\n"
+" -?, --help показать это сообщение\n"
+" --version показать версию"
+
+#: scripts/dpkg-architecture.pl
+#, fuzzy
+#| msgid ""
+#| "Options:\n"
+#| " -a, --host-arch <arch> set host Debian architecture.\n"
+#| " -t, --host-type <type> set host GNU system type.\n"
+#| " -A, --target-arch <arch> set target Debian architecture.\n"
+#| " -T, --target-type <type> set target GNU system type.\n"
+#| " -W, --match-wildcard <arch-wildcard>\n"
+#| " restrict architecture list matching <arch-"
+#| "wildcard>.\n"
+#| " -B, --match-bits <arch-bits>\n"
+#| " restrict architecture list matching <arch-"
+#| "bits>.\n"
+#| " -E, --match-endian <arch-endian>\n"
+#| " restrict architecture list matching <arch-"
+#| "endian>.\n"
+#| " -f, --force force flag (override variables set in "
+#| "environment)."
+msgid ""
+"Options:\n"
+" -a, --host-arch <arch> set host Debian architecture.\n"
+" -t, --host-type <type> set host GNU system type.\n"
+" -A, --target-arch <arch> set target Debian architecture.\n"
+" -T, --target-type <type> set target GNU system type.\n"
+" -W, --match-wildcard <arch-wildcard>\n"
+" restrict architecture list matching <arch-"
+"wildcard>.\n"
+" -B, --match-bits <arch-bits>\n"
+" restrict architecture list matching <arch-"
+"bits>.\n"
+" -E, --match-endian <arch-endian>\n"
+" restrict architecture list matching <arch-"
+"endian>.\n"
+" --print-format <format>\n"
+" use <format> for --print-set and --print-unset,\n"
+" allowed values: shell (default), make.\n"
+" -f, --force force flag (override variables set in "
+"environment)."
+msgstr ""
+"Параметры:\n"
+" -a, --host-arch <арх> задать архитектуру узла Debian\n"
+" -t, --host-type <тип> задать системный тип узла GNU\n"
+" -A, --target-arch <арх> задать архитектуру цели Debian\n"
+" -T, --target-type <тип> задать системный тип цели GNU\n"
+" -W, --match-wildcard <шаблон-арх>\n"
+" ограничить список архитектур согласно <шаблон-"
+"арх>\n"
+" -B, --match-bits <бит-арх>\n"
+" ограничить список архитектур согласно\n"
+" <битности архитектуры>\n"
+" -E, --match-endian <пор-арх>\n"
+" ограничить список архитектур согласно\n"
+" <байтовому порядку архитектуры>.\n"
+" -f, --force флаг замены (заменять значения переменных,\n"
+" уже имеющихся в окружении)."
+
+#: scripts/dpkg-architecture.pl
+#, perl-format
+msgid "unknown Debian architecture %s, you must specify GNU system type, too"
+msgstr ""
+"неизвестная архитектура Debian %s, также вы должны указать системный тип GNU"
+
+#: scripts/dpkg-architecture.pl
+#, perl-format
+msgid "unknown GNU system type %s, you must specify Debian architecture, too"
+msgstr ""
+"неизвестный системный тип GNU %s, также вы должны указать архитектуру Debian"
+
+#: scripts/dpkg-architecture.pl
+#, perl-format
+msgid "unknown default GNU system type for Debian architecture %s"
+msgstr "неизвестный системный тип GNU по умолчанию для архитектуры Debian %s"
+
+#: scripts/dpkg-architecture.pl
+#, perl-format
+msgid ""
+"default GNU system type %s for Debian arch %s does not match specified GNU "
+"system type %s"
+msgstr ""
+"системный тип GNU по умолчанию %s для архитектуры Debian %s не совпадает с "
+"указанным системный типом GNU %s"
+
+#: scripts/dpkg-architecture.pl
+#, fuzzy, perl-format
+#| msgid "%s is not a supported compression method"
+msgid "%s is not a supported print format"
+msgstr "неподдерживаемый метод сжатия %s"
+
+#: scripts/dpkg-architecture.pl
+#, perl-format
+msgid "%s is not a supported variable name"
+msgstr "%s не является поддерживаемым именем переменной"
+
+#: scripts/dpkg-architecture.pl scripts/dpkg-buildflags.pl
+#: scripts/dpkg-distaddfile.pl scripts/dpkg-genbuildinfo.pl
+#: scripts/dpkg-genchanges.pl scripts/dpkg-gencontrol.pl
+#: scripts/dpkg-gensymbols.pl scripts/dpkg-name.pl
+#: scripts/dpkg-parsechangelog.pl scripts/dpkg-shlibdeps.pl
+#: scripts/dpkg-vendor.pl
+#, perl-format
+msgid "unknown option '%s'"
+msgstr "неизвестный параметр «%s»"
+
+#: scripts/dpkg-architecture.pl
+#, fuzzy, perl-format
+#| msgid ""
+#| "specified GNU system type %s does not match gcc system type %s, try "
+#| "setting a correct CC environment variable"
+msgid ""
+"specified GNU system type %s does not match CC system type %s, try setting a "
+"correct CC environment variable"
+msgstr ""
+"указанный системный тип GNU %s не совпадает с системным типом gcc %s, "
+"попробуйте задать правильное значение в переменной окружения CC"
+
+#: scripts/dpkg-architecture.pl scripts/dpkg-shlibdeps.pl scripts/Dpkg/IPC.pm
+#: scripts/Dpkg/Shlibs/Cppfilt.pm
+#, perl-format
+msgid "unable to execute %s"
+msgstr "невозможно выполнить %s"
+
+#: scripts/dpkg-buildflags.pl
+#, perl-format
+msgid "Usage: %s [<command>]"
+msgstr "Использование: %s [<команда>]"
+
+#: scripts/dpkg-buildflags.pl
+#, fuzzy
+#| msgid ""
+#| "Commands:\n"
+#| " --get <flag> output the requested flag to stdout.\n"
+#| " --origin <flag> output the origin of the flag to stdout:\n"
+#| " value is one of vendor, system, user, env.\n"
+#| " --query-features <area>\n"
+#| " output the status of features for the given area.\n"
+#| " --list output a list of the flags supported by the current "
+#| "vendor.\n"
+#| " --export=(sh|make|cmdline|configure)\n"
+#| " output something convenient to import the "
+#| "compilation\n"
+#| " flags in a shell script, in make, or in a command "
+#| "line.\n"
+#| " --dump output all compilation flags with their values\n"
+#| " --status print a synopsis with all parameters affecting the\n"
+#| " behaviour of dpkg-buildflags and the resulting "
+#| "flags\n"
+#| " and their origin.\n"
+#| " --help show this help message.\n"
+#| " --version show the version.\n"
+msgid ""
+"Commands:\n"
+" --get <flag> output the requested flag to stdout.\n"
+" --origin <flag> output the origin of the flag to stdout:\n"
+" value is one of vendor, system, user, env.\n"
+" --status output a synopsis with all parameters affecting the\n"
+" program behaviour, the resulting flags and their "
+"origin.\n"
+" --query like --status, but in deb822 format.\n"
+" --query-features <area>\n"
+" output the status of features for the given area.\n"
+" --list output a list of the flags supported by the current "
+"vendor.\n"
+" --export=(sh|make|cmdline|configure)\n"
+" output something convenient to import the compilation\n"
+" flags in a shell script, in make, or in a command "
+"line.\n"
+" --dump output all compilation flags with their values.\n"
+" --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+"Команды:\n"
+" --get <флаг> вывести значение флага на стандартный вывод\n"
+" --origin <флаг> вывести происхождение флага на стандартный вывод:\n"
+" значения: vendor, system, user, env\n"
+" --query-features <область>\n"
+" вывести состояние возможностей заданной области\n"
+" --list вывести список флагов, поддерживаемых текущим "
+"поставщиком\n"
+" --export=(sh|make|cmdline|configure)\n"
+" вывести удобные для импорта флаги компиляции в командной\n"
+" строки для оболочки, make или ./configure\n"
+" --dump вывести все флаги компиляции с их значениями\n"
+" --status вывести синтаксис со всеми параметрами, влияющими на\n"
+" поведение dpkg-buildflags, конечные флаги\n"
+" и их происхождение\n"
+" --help показать это сообщение\n"
+" --version показать версию\n"
+
+#: scripts/dpkg-buildflags.pl scripts/dpkg-source.pl scripts/dpkg-vendor.pl
+#, perl-format
+msgid "two commands specified: --%s and --%s"
+msgstr "указаны две команды: --%s и --%s"
+
+#: scripts/dpkg-buildflags.pl scripts/dpkg-vendor.pl
+#, perl-format
+msgid "%s needs a parameter"
+msgstr "для %s требуется параметр"
+
+#: scripts/dpkg-buildpackage.pl scripts/dpkg-genbuildinfo.pl
+#: scripts/dpkg-genchanges.pl scripts/dpkg-gencontrol.pl
+#: scripts/dpkg-gensymbols.pl scripts/dpkg-parsechangelog.pl
+#, perl-format
+msgid "Usage: %s [<option>...]"
+msgstr "Использование: %s [<параметр>...]"
+
+#: scripts/dpkg-buildpackage.pl
+#, fuzzy
+#| msgid ""
+#| "Options:\n"
+#| " -F (default) normal full build (binaries and sources).\n"
+#| " -g source and arch-indep build.\n"
+#| " -G source and arch-specific build.\n"
+#| " -b binary-only, no source files.\n"
+#| " -B binary-only, only arch-specific files.\n"
+#| " -A binary-only, only arch-indep files.\n"
+#| " -S source-only, no binary files.\n"
+#| " -nc do not clean source tree (implies -b).\n"
+#| " -tc clean source tree when finished.\n"
+#| " -D (default) check build dependencies and conflicts.\n"
+#| " -d do not check build dependencies and conflicts.\n"
+#| " -P<profiles> assume given build profiles as active (comma-separated "
+#| "list).\n"
+#| " -R<rules> rules file to execute (default is debian/rules).\n"
+#| " -T<target> call debian/rules <target> with the proper environment.\n"
+#| " --as-root ensure -T calls the target with root rights.\n"
+#| " -j[<number>] specify jobs to run simultaneously (passed to <rules>).\n"
+#| " -r<gain-root-command>\n"
+#| " command to gain root privileges (default is fakeroot).\n"
+#| " --check-command=<check-command>\n"
+#| " command to check the .changes file (no default).\n"
+#| " --check-option=<opt>\n"
+#| " pass <opt> to <check-command>.\n"
+#| " --hook-<hook-name>=<hook-command>\n"
+#| " set <hook-command> as the hook <hook-name>, known "
+#| "hooks:\n"
+#| " init preclean source build binary changes postclean\n"
+#| " check sign done\n"
+#| " -p<sign-command>\n"
+#| " command to sign .dsc and/or .changes files\n"
+#| " (default is gpg2 or gpg).\n"
+#| " -k<keyid> the key to use for signing.\n"
+#| " -ap add pause before starting signature process.\n"
+#| " -us unsigned source package.\n"
+#| " -uc unsigned .changes file.\n"
+#| " --force-sign\n"
+#| " force signing the resulting files.\n"
+#| " --admindir=<directory>\n"
+#| " change the administrative directory.\n"
+#| " -?, --help show this help message.\n"
+#| " --version show the version."
+msgid ""
+"Options:\n"
+" --build=<type>[,...] specify the build <type>: full, source, "
+"binary,\n"
+" any, all (default is 'full').\n"
+" -F, --build=full normal full build (source and binary; "
+"default).\n"
+" -g, --build=source,all source and arch-indep build.\n"
+" -G, --build=source,any source and arch-specific build.\n"
+" -b, --build=binary binary-only, no source files.\n"
+" -B, --build=any binary-only, only arch-specific files.\n"
+" -A, --build=all binary-only, only arch-indep files.\n"
+" -S, --build=source source-only, no binary files.\n"
+" -nc, --no-pre-clean do not pre clean source tree (implies -b).\n"
+" --pre-clean pre clean source tree (default).\n"
+" --no-post-clean do not post clean source tree (default).\n"
+" -tc, --post-clean post clean source tree.\n"
+" --sanitize-env sanitize the build environment.\n"
+" -D, --check-builddeps check build dependencies and conflicts "
+"(default).\n"
+" -d, --no-check-builddeps do not check build dependencies and "
+"conflicts.\n"
+" --ignore-builtin-builddeps\n"
+" do not check builtin build dependencies.\n"
+" -P, --build-profiles=<profiles>\n"
+" assume comma-separated build <profiles> as "
+"active.\n"
+" --rules-requires-root assume legacy Rules-Requires-Root field "
+"value.\n"
+" -R, --rules-file=<rules> rules file to execute (default is debian/"
+"rules).\n"
+" -T, --rules-target=<target> call debian/rules <target>.\n"
+" --as-root ensure -T calls the target with root rights.\n"
+" -j, --jobs[=<jobs>|auto] jobs to run simultaneously (passed to "
+"<rules>),\n"
+" (default; default is auto, opt-in mode).\n"
+" -J, --jobs-try[=<jobs>|auto]\n"
+" alias for -j, --jobs.\n"
+" --jobs-force[=<jobs>|auto]\n"
+" jobs to run simultaneously (passed to "
+"<rules>),\n"
+" (default is auto, forced mode).\n"
+" -r, --root-command=<command>\n"
+" command to gain root rights (default is "
+"fakeroot).\n"
+" --check-command=<command>\n"
+" command to check the .changes file (no "
+"default).\n"
+" --check-option=<opt> pass <opt> to check <command>.\n"
+" --hook-<name>=<command> set <command> as the hook <name>, known "
+"hooks:\n"
+" init preclean source build binary buildinfo\n"
+" changes postclean check sign done\n"
+" --buildinfo-file=<file> set the .buildinfo filename to generate.\n"
+" --buildinfo-option=<opt>\n"
+" pass option <opt> to dpkg-genbuildinfo.\n"
+" --changes-file=<file> set the .changes filename to generate.\n"
+" --sign-backend=<backend>\n"
+" OpenPGP backend to use to sign\n"
+" (default is auto).\n"
+" -p, --sign-command=<command>\n"
+" command to sign .dsc and/or .changes files\n"
+" (default is gpg).\n"
+" --sign-keyfile=<file> the key file to use for signing.\n"
+" -k, --sign-keyid=<keyid> the key id to use for signing.\n"
+" --sign-key=<keyid> alias for -k, --sign-keyid.\n"
+" -ap, --sign-pause add pause before starting signature process.\n"
+" -us, --unsigned-source unsigned source package.\n"
+" -ui, --unsigned-buildinfo unsigned .buildinfo file.\n"
+" -uc, --unsigned-changes unsigned .buildinfo and .changes file.\n"
+" --no-sign do not sign any file.\n"
+" --force-sign force signing the resulting files.\n"
+" --admindir=<directory> change the administrative directory.\n"
+" -?, --help show this help message.\n"
+" --version show the version."
+msgstr ""
+"Параметры:\n"
+" -F (по умолчанию) обычная полная сборка (двоичные и с исх.кодом)\n"
+" -g сборка для пакета исходного кода и arch-indep\n"
+" -G сборка для пакета исходного кода и arch-specific\n"
+" -b только двоичный пакет, не собирать пакет с исходным "
+"кодом\n"
+" -B только двоичный пакет, не собирать независимые от\n"
+" архитектуры пакеты\n"
+" -A только двоичный пакет, собирать независимые от\n"
+" архитектуры пакеты\n"
+" -S только пакет с исходным кодом без двоичного пакета\n"
+" -nc не очищать дерево исходного кода (вместе с -b)\n"
+" -tc в конце очистить дерево исходного кода\n"
+" -D (по умолчанию) проверять сборочные зависимости и конфликты\n"
+" -d не проверять сборочные зависимости и конфликты\n"
+" -P<профили> считать заданные профили сборки активными\n"
+" (список через запятую)\n"
+" -R<правила> файл правил для выполнения (по умолчанию debian/rules)\n"
+" -T<цель> вызвать debian/rules <цель> в настроенном окружении\n"
+" --as-root обеспечить вызовы -T правами root\n"
+" -j[<кол-во>] задать количество одновременно выполняемых работ\n"
+" (передаётся в debian/<rules>)\n"
+" -r<команда-получения-root>\n"
+" команда для получения прав root (по умолчанию fakeroot)\n"
+" --check-command=<команда-проверки>\n"
+" команда для проверки файла .changes (по умолчанию "
+"отсутствует)\n"
+" --check-option=<opt>\n"
+" передавать <opt> в <команде-проверки>\n"
+" --hook-<имя-ловушки>=<команда-ловушки>\n"
+" задать <команду-ловушки> в качестве ловушки для\n"
+" <имя-ловушки>, возможные ловушки:\n"
+" init preclean source build binary changes postclean\n"
+" check sign done\n"
+" -p<команда-подписывания>\n"
+" команда для подписывания файлов .dsc и/или .changes\n"
+" (по умолчанию gpg)\n"
+" -k<id-ключа> ключ для подписывания\n"
+" -ap сделать паузу перед началом подписывания\n"
+" -us не подписывать пакет с исходным кодом\n"
+" -uc не подписывать файл .changes\n"
+" --force-sign\n"
+" подписывать все получаемые файлы\n"
+" --admindir=<каталог>\n"
+" изменить административный каталог\n"
+" -?, --help показать это сообщение\n"
+" --version показать версию"
+
+#: scripts/dpkg-buildpackage.pl
+#, fuzzy
+#| msgid ""
+#| "Options passed to dpkg-architecture:\n"
+#| " -a, --host-arch <arch> set the host Debian architecture.\n"
+#| " -t, --host-type <type> set the host GNU system type.\n"
+#| " --target-arch <arch> set the target Debian architecture.\n"
+#| " --target-type <type> set the target GNU system type."
+msgid ""
+"Options passed to dpkg-architecture:\n"
+" -a, --host-arch <arch> set the host Debian architecture.\n"
+" -t, --host-type <type> set the host GNU system type.\n"
+" --target-arch <arch> set the target Debian architecture.\n"
+" --target-type <type> set the target GNU system type."
+msgstr ""
+"Параметры, передаваемые dpkg-architecture:\n"
+" -a, --host-arch <арх> задать архитектуру узла Debian\n"
+" -t, --host-type <тип> задать системный тип GNU узла\n"
+" --target-arch <арх> задать архитектуру цели Debian\n"
+" --target-type <тип> задать системный тип GNU цели"
+
+#: scripts/dpkg-buildpackage.pl
+#, fuzzy
+#| msgid ""
+#| "Options passed to dpkg-genchanges:\n"
+#| " -si (default) source includes orig, if new upstream.\n"
+#| " -sa source includes orig, always.\n"
+#| " -sd source is diff and .dsc only.\n"
+#| " -v<version> changes since version <version>.\n"
+#| " -m<maint> maintainer for package is <maint>.\n"
+#| " -e<maint> maintainer for release is <maint>.\n"
+#| " -C<descfile> changes are described in <descfile>.\n"
+#| " --changes-option=<opt>\n"
+#| " pass option <opt> to dpkg-genchanges."
+msgid ""
+"Options passed to dpkg-genchanges:\n"
+" -si source includes orig, if new upstream "
+"(default).\n"
+" -sa source includes orig, always.\n"
+" -sd source is diff and .dsc only.\n"
+" -v<version> changes since version <version>.\n"
+" -m, --source-by=<maint> maintainer for this source or build is "
+"<maint>.\n"
+" --build-by=<maint> ditto.\n"
+" -e, --release-by=<maint> maintainer for this change or release is "
+"<maint>.\n"
+" --changed-by=<maint> ditto.\n"
+" -C<descfile> changes are described in <descfile>.\n"
+" --changes-option=<opt> pass option <opt> to dpkg-genchanges."
+msgstr ""
+"Параметры, передаваемые dpkg-genchanges:\n"
+" -si (по умолч.) src включают orig, если новый автор\n"
+" -sa в src всегда содержат orig\n"
+" -sd в src только diff и .dsc\n"
+" -v<версия> изменения, начиная с <версии>\n"
+" -m<сопров> задать <сопровождающего> пакета\n"
+" -e<сопров> задать <сопровождающего> выпуска\n"
+" -C<descfile> изменения даны в файле <descfile>\n"
+" --changes-option=<opt>\n"
+" передать параметр <opt> в dpkg-genchanges"
+
+#: scripts/dpkg-buildpackage.pl
+#, fuzzy
+#| msgid ""
+#| "Options passed to dpkg-source:\n"
+#| " -sn force Debian native source format.\n"
+#| " -s[sAkurKUR] see dpkg-source for explanation.\n"
+#| " -z<level> compression level to use for source.\n"
+#| " -Z<compressor> compression to use for source (gz|xz|bzip2|lzma).\n"
+#| " -i[<regex>] ignore diffs of files matching regex.\n"
+#| " -I[<pattern>] filter out files when building tarballs.\n"
+#| " --source-option=<opt>\n"
+#| " pass option <opt> to dpkg-source.\n"
+msgid ""
+"Options passed to dpkg-source:\n"
+" -sn force Debian native source format.\n"
+" -s[sAkurKUR] see dpkg-source for explanation.\n"
+" -z, --compression-level=<level>\n"
+" compression level to use for source.\n"
+" -Z, --compression=<compressor>\n"
+" compression to use for source (gz|xz|bzip2|"
+"lzma).\n"
+" -i, --diff-ignore[=<regex>] ignore diffs of files matching <regex>.\n"
+" -I, --tar-ignore[=<pattern>]\n"
+" filter out files when building tarballs.\n"
+" --source-option=<opt> pass option <opt> to dpkg-source.\n"
+msgstr ""
+"Параметры, передаваемые dpkg-source:\n"
+" -sn исходный код в родном формате Debian\n"
+" -s[sAkurKUR] смотрите описание dpkg-source\n"
+" -z<степень> степень сжатия исходного кода\n"
+" -Z<алгоритм> алгоритм сжатия исходного кода (gz|xz|bzip2|lzma)\n"
+" -i[<рег.выр>] игнорировать diff-ы файлов, совпадающих с рег.выр.\n"
+" -I[<шаблон>] при сборке tar, не включать файлы, попавшие в шаблон\n"
+" --source-option=<пар>\n"
+" передать параметр <пар> в dpkg-source\n"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "missing .buildinfo filename"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "passing %s via %s is not supported; please use %s instead"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+#, fuzzy
+#| msgid "parse changes file"
+msgid "missing .changes filename"
+msgstr "разбор файла изменений"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "unknown hook name %s"
+msgstr "неизвестное имя ловушки %s"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "missing hook %s command"
+msgstr "отсутствует команда для ловушки %s"
+
+#: scripts/dpkg-buildpackage.pl scripts/dpkg-genbuildinfo.pl
+#: scripts/dpkg-gencontrol.pl
+#, fuzzy, perl-format
+#| msgid "-i%s is deprecated; it is without effect"
+msgid "%s is deprecated; it is without effect"
+msgstr "-i%s устарел, ничего не изменится"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "-s%s is deprecated; always using gpg style interface"
+msgstr "-s%s устарел; всегда используется интерфейс как у gpg"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "unknown option or argument %s"
+msgstr "неизвестный параметр или аргумент %s"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "option %s is only meaningful with option %s"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "check-command '%s' not found"
+msgstr "команда-проверки «%s» не найдена"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "sign-command '%s' not found"
+msgstr "команда-подписания «%s» не найдена"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source package"
+msgstr "пакет исходного кода"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source version"
+msgstr "версия исходного кода"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source distribution"
+msgstr "дистрибутив исходного кода"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source changed by"
+msgstr "исходный код изменён"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "host architecture"
+msgstr "архитектура узла"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "debian/rules is not executable; fixing that"
+msgstr "debian/rules не является исполняемым; исправляем это"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "build dependencies/conflicts unsatisfied; aborting"
+msgstr "неудовлетворительные зависимости/конфликты при сборке; прерываемся"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "(Use -d flag to override.)"
+msgstr "(Используйте параметр -d, чтобы продолжить сборку.)"
+
+#: scripts/dpkg-buildpackage.pl
+msgid ""
+"building a source package without cleaning up as you asked; it might contain "
+"undesired files"
+msgstr ""
+"сборка пакета исходного кода без предварительной очистки по вашему запросу; "
+"могут добавиться нежелательные файлы"
+
+#: scripts/dpkg-buildpackage.pl
+#, fuzzy
+#| msgid "Press the return key to start signing process\n"
+msgid "Press <enter> to start the signing process.\n"
+msgstr "Нажмите любую клавишу для запуска процесс подписывания\n"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "not signing UNRELEASED build; use --force-sign to override"
+msgstr ""
+"сборка UNRELEASED не подписывается; чтобы изменить используйте --force-sign"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "unable to determine %s"
+msgstr "невозможно определить %s"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "using a gain-root-command while being root"
+msgstr "используется команда получения прав root, но уже есть права root"
+
+#: scripts/dpkg-buildpackage.pl
+msgid ""
+"fakeroot not found, either install the fakeroot\n"
+"package, specify a command with the -r option, or run this as root"
+msgstr ""
+"fakeroot не найдена, установите пакет fakeroot и\n"
+"запускайте команду с параметром -r, или запускайте её от root"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "gain-root-command '%s' not found"
+msgstr "команда-получения-root «%s» не найдена"
+
+#: scripts/dpkg-buildpackage.pl
+#, fuzzy, perl-format
+#| msgid "unknown file type"
+msgid "disallowed target in %s field keyword \"%s\""
+msgstr "неизвестный тип файла"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "%s field keyword \"%s\" is unknown in dpkg namespace"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "%s field keyword \"%s\" is uppercase; use \"%s\" instead"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "%s field keyword \"%s\" is invalid; use \"%s\" instead"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+#, fuzzy, perl-format
+#| msgid "unknown file type"
+msgid "%s field keyword \"%s\" is unknown"
+msgstr "неизвестный тип файла"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "field %s contains duplicate keyword \"%s\""
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "%s field contains both global and implementation specific keywords"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "unknown %% substitution in hook: %%%s"
+msgstr "неизвестная подстановка %% в ловушке: %%%s"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid ""
+"short OpenPGP key IDs are broken; please use key fingerprints in %s or %s "
+"instead"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid ""
+"long OpenPGP key IDs are strongly discouraged; please use key fingerprints "
+"in %s or %s instead"
+msgstr ""
+
+#: scripts/dpkg-buildpackage.pl scripts/dpkg-checkbuilddeps.pl
+#: scripts/dpkg-genbuildinfo.pl scripts/dpkg-name.pl scripts/Dpkg/Arch.pm
+#: scripts/Dpkg/IPC.pm scripts/Dpkg/Shlibs.pm
+#, perl-format
+msgid "cannot open %s"
+msgstr "не удалось открыть %s"
+
+#: scripts/dpkg-buildpackage.pl scripts/dpkg-distaddfile.pl
+#: scripts/dpkg-genbuildinfo.pl scripts/dpkg-gencontrol.pl
+#: scripts/Dpkg/Interface/Storable.pm scripts/Dpkg/Source/Package/V2.pm
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot close %s"
+msgstr "не удалось закрыть %s"
+
+#: scripts/dpkg-buildpackage.pl scripts/Dpkg/Source/Archive.pm
+#, fuzzy, perl-format
+#| msgid "cannot rename %s to %s"
+msgid "cannot move %s to %s"
+msgstr "не удалось переименовать %s в %s"
+
+#: scripts/dpkg-buildpackage.pl
+#, fuzzy, perl-format
+#| msgid "failed to sign .changes file"
+msgid "failed to sign %s file: %s"
+msgstr "отказ при подписывании файла .changes"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source-only upload: Debian-native package"
+msgstr "закачка только пакетов исходного кода: родной пакет Debian"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source-only, diff-only upload (original source NOT included)"
+msgstr ""
+"закачка только пакета исходного кода и diff (пакет оригинального исходного "
+"кода НЕ включён)"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source-only upload (original source is included)"
+msgstr ""
+"закачка только пакета исходного кода и diff (с пакетом оригинального "
+"исходного кода)"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "binary-only upload (no source included)"
+msgstr "закачка только двоичных пакетов (без пакетов исходного кода)"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "full upload; Debian-native package (full source is included)"
+msgstr ""
+"закачка всего; родной пакет Debian (включены все пакеты исходного кода)"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "binary and diff upload (original source NOT included)"
+msgstr ""
+"закачка только двоичных пакетов и diff (без пакетов оригинального исходного "
+"кода)"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "full upload (original source is included)"
+msgstr "закачка всего (с пакетом оригинального исходного кода)"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid ""
+"%s must be updated to support the 'build-arch' and 'build-indep' targets (at "
+"least '%s' seems to be missing)"
+msgstr ""
+"для поддержки целей «build-arch» и «build-indep» требуется обновить %s (во "
+"всяком случае, будет отсутствовать «%s»)"
+
+#: scripts/dpkg-checkbuilddeps.pl
+#, perl-format
+msgid "Usage: %s [<option>...] [<control-file>]"
+msgstr "Использование: %s [<параметр>...] <управ.файл>"
+
+#: scripts/dpkg-checkbuilddeps.pl
+#, fuzzy
+#| msgid ""
+#| "Options:\n"
+#| " -A ignore Build-Depends-Arch and Build-Conflicts-Arch.\n"
+#| " -B ignore Build-Depends-Indep and Build-Conflicts-Indep.\n"
+#| " -d build-deps use given string as build dependencies instead of\n"
+#| " retrieving them from control file\n"
+#| " -c build-conf use given string for build conflicts instead of\n"
+#| " retrieving them from control file\n"
+#| " -a arch assume given host architecture\n"
+#| " -P profiles assume given build profiles (comma-separated list)\n"
+#| " --admindir=<directory>\n"
+#| " change the administrative directory.\n"
+#| " -?, --help show this help message.\n"
+#| " --version show the version."
+msgid ""
+"Options:\n"
+" -A ignore Build-Depends-Arch and Build-Conflicts-Arch.\n"
+" -B ignore Build-Depends-Indep and Build-Conflicts-Indep.\n"
+" -I ignore built-in build dependencies and conflicts.\n"
+" -d build-deps use given string as build dependencies instead of\n"
+" retrieving them from control file\n"
+" -c build-conf use given string for build conflicts instead of\n"
+" retrieving them from control file\n"
+" -a arch assume given host architecture\n"
+" -P profiles assume given build profiles (comma-separated list)\n"
+" --admindir=<directory>\n"
+" change the administrative directory.\n"
+" -?, --help show this help message.\n"
+" --version show the version."
+msgstr ""
+"Параметры:\n"
+" -A игнорировать Build-Depends-Arch и Build-Conflicts-Arch\n"
+" -B игнорировать Build-Depends-Indep и Build-Conflicts-Indep\n"
+" -d build-deps использовать указанную строку как сборочные зависимости,\n"
+" а не извлекать их из управляющего файла\n"
+" -c build-conf использовать указанную строку как сборочные конфликты,\n"
+" а не извлекать их из управляющего файла\n"
+" -a арх предполагать указанную архитектуру узла\n"
+" -P профили учитывать профили сборки (список через запятую)\n"
+" --admindir=<каталог>\n"
+" изменить административный каталог\n"
+" -?, --help показать это сообщение\n"
+" --version показать версию"
+
+#: scripts/dpkg-checkbuilddeps.pl
+msgid ""
+"<control-file> is the control file to process (default: debian/control)."
+msgstr ""
+"<управ.файл> это файл управления ходом работы (по умолчанию: debian/control)."
+
+#: scripts/dpkg-checkbuilddeps.pl scripts/dpkg-shlibdeps.pl
+#: scripts/dpkg-source.pl
+#, fuzzy, perl-format
+#| msgid "cannot open %s"
+msgid "cannot parse %s field"
+msgstr "не удалось открыть %s"
+
+#: scripts/dpkg-checkbuilddeps.pl
+#, fuzzy, perl-format
+#| msgid "%s: Unmet build dependencies: "
+msgid "Unmet build dependencies: %s"
+msgstr "%s: Неудовлетворённые сборочные зависимости: "
+
+#: scripts/dpkg-checkbuilddeps.pl
+#, fuzzy, perl-format
+#| msgid "%s: Build conflicts: "
+msgid "Build conflicts: %s"
+msgstr "%s: Сборочные конфликты: "
+
+#: scripts/dpkg-distaddfile.pl
+#, perl-format
+msgid ""
+"Usage: %s [<option>...] <filename> <section> <priority>\n"
+"\n"
+"Options:\n"
+" -f<files-list-file> write files here instead of debian/files.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+"Использование: %s [<параметр>...] <имя_файла> <секция> <приоритет>\n"
+"\n"
+"Параметры:\n"
+" -f<файл-списка> записать файлы в ук. файл, а не в debian/files\n"
+" -?, --help показать это сообщение\n"
+" --version показать версию\n"
+
+#: scripts/dpkg-distaddfile.pl
+msgid "need exactly a filename, section and priority"
+msgstr "нужно указать имя файла, секцию и приоритет"
+
+#: scripts/dpkg-distaddfile.pl
+msgid "filename, section and priority may contain no whitespace"
+msgstr "имя файла, секция и приоритет не могут содержать пробельных символов"
+
+#: scripts/dpkg-distaddfile.pl scripts/dpkg-genbuildinfo.pl
+#: scripts/dpkg-gencontrol.pl scripts/dpkg-mergechangelogs.pl
+#: scripts/Dpkg/Compression/FileHandle.pm scripts/Dpkg/File.pm
+#: scripts/Dpkg/IPC.pm scripts/Dpkg/Interface/Storable.pm
+#: scripts/Dpkg/Source/BinaryFiles.pm scripts/Dpkg/Source/Package.pm
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "cannot write %s"
+msgstr "не удалось записать %s"
+
+#: scripts/dpkg-distaddfile.pl scripts/dpkg-genbuildinfo.pl
+#: scripts/dpkg-gencontrol.pl
+msgid "install new files list file"
+msgstr "установка нового файла с списком файлов"
+
+#: scripts/dpkg-genbuildinfo.pl
+msgid ""
+"Options:\n"
+" --build=<type>[,...] specify the build <type>: full, source, binary,\n"
+" any, all (default is 'full').\n"
+" -c<control-file> get control info from this file.\n"
+" -l<changelog-file> get per-version info from this file.\n"
+" -f<files-list-file> get .deb files list from this file.\n"
+" -F<changelog-format> force changelog format.\n"
+" -O[<buildinfo-file>] write to stdout (or <buildinfo-file>).\n"
+" -u<upload-files-dir> directory with files (default is '..').\n"
+" --always-include-kernel always include Build-Kernel-Version.\n"
+" --always-include-path always include Build-Path.\n"
+" --admindir=<directory> change the administrative directory.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+
+#: scripts/dpkg-genbuildinfo.pl
+#, fuzzy
+#| msgid "binary build with no binary artifacts found; cannot distribute"
+msgid "binary build with no binary artifacts found; .buildinfo is meaningless"
+msgstr ""
+"обнаружена двоичная сборка без двоичных пакетов; распространение невозможно"
+
+#: scripts/dpkg-genbuildinfo.pl
+#, fuzzy, perl-format
+#| msgid "cannot install output control file '%s'"
+msgid "cannot install output buildinfo file '%s'"
+msgstr "не удалось установить новый выходной управляющий файл «%s»"
+
+#: scripts/dpkg-genchanges.pl
+#, fuzzy
+#| msgid ""
+#| "Options:\n"
+#| " -g source and arch-indep build.\n"
+#| " -G source and arch-specific build.\n"
+#| " -b binary-only, no source files.\n"
+#| " -B binary-only, only arch-specific files.\n"
+#| " -A binary-only, only arch-indep files.\n"
+#| " -S source-only, no binary files.\n"
+#| " -c<control-file> get control info from this file.\n"
+#| " -l<changelog-file> get per-version info from this file.\n"
+#| " -f<files-list-file> get .deb files list from this file.\n"
+#| " -v<since-version> include all changes later than version.\n"
+#| " -C<changes-description> use change description from this file.\n"
+#| " -m<maintainer> override control's maintainer value.\n"
+#| " -e<maintainer> override changelog's maintainer value.\n"
+#| " -u<upload-files-dir> directory with files (default is '..').\n"
+#| " -si (default) source includes orig, if new upstream.\n"
+#| " -sa source includes orig, always.\n"
+#| " -sd source is diff and .dsc only.\n"
+#| " -q quiet - no informational messages on stderr.\n"
+#| " -F<changelog-format> force changelog format.\n"
+#| " -V<name>=<value> set a substitution variable.\n"
+#| " -T<substvars-file> read variables here, not debian/substvars.\n"
+#| " -D<field>=<value> override or add a field and value.\n"
+#| " -U<field> remove a field.\n"
+#| " -?, --help show this help message.\n"
+#| " --version show the version.\n"
+msgid ""
+"Options:\n"
+" --build=<type>[,...] specify the build <type>: full, source, binary,\n"
+" any, all (default is 'full').\n"
+" -g source and arch-indep build.\n"
+" -G source and arch-specific build.\n"
+" -b binary-only, no source files.\n"
+" -B binary-only, only arch-specific files.\n"
+" -A binary-only, only arch-indep files.\n"
+" -S source-only, no binary files.\n"
+" -c<control-file> get control info from this file.\n"
+" -l<changelog-file> get per-version info from this file.\n"
+" -f<files-list-file> get .deb files list from this file.\n"
+" -v<since-version> include all changes later than version.\n"
+" -C<changes-description> use change description from this file.\n"
+" -m<maintainer> override control's maintainer value.\n"
+" -e<maintainer> override changelog's maintainer value.\n"
+" -u<upload-files-dir> directory with files (default is '..').\n"
+" -si source includes orig, if new upstream (default).\n"
+" -sa source includes orig, always.\n"
+" -sd source is diff and .dsc only.\n"
+" -q quiet - no informational messages on stderr.\n"
+" -F<changelog-format> force changelog format.\n"
+" -V<name>=<value> set a substitution variable.\n"
+" -T<substvars-file> read variables here, not debian/substvars.\n"
+" -D<field>=<value> override or add a field and value.\n"
+" -U<field> remove a field.\n"
+" -O[<filename>] write to stdout (default) or <filename>.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+"Параметры:\n"
+" -g сборка пакета исходного кода и arch-indep\n"
+" -G сборка пакета исходного кода и зависимого\n"
+" от архитектуры\n"
+" -b сборка только двоичного пакета — без файлов\n"
+" с исходным кодом\n"
+" -B сборка только арх-ного пакета — без файлов с\n"
+" исходным кодом или независимых от арх-ры пакетов\n"
+" -A сборка только арх-но независимого пакета — без\n"
+" файлов с исходным кодом или зависимых\n"
+" от арх-ры пакетов\n"
+" -S закачка только пакетов с исходным кодом\n"
+" -c<упр.файл> брать управляющую инф-ю из указанного файла\n"
+" -l<файл-изменений> брать список изменений из указанного файла\n"
+" -f<файл-списка> брать список файлов .deb из указанного файла\n"
+" -v<с-версии> включить все изменения, начиная с указанной "
+"версии\n"
+" -C<описание-изменений> использовать описание изменений из указанного "
+"файла\n"
+" -m<сопровож.> заменить сопровождающего из файла управления\n"
+" -e<сопровож.> заменить сопровождающего из файла изменений\n"
+" -u<кат.с.закач.файлами> каталог с файлами (по умолчанию «..»)\n"
+" -si (по умолч.) src включают orig, если новый upstream\n"
+" -sa исходники включают оригинальный исходный код\n"
+" -sd исходники это только diff и .dsc\n"
+" -q не выводить информационные сообщения в поток "
+"ошибок\n"
+" -F<формат-изм.> изменить формат файла изменений\n"
+" -V<имя>=<знач.> установить переменную подстановки\n"
+" -T<файл-перем.> читать переменные из указанного файла,\n"
+" а не из debian/substvars\n"
+" -D<поле>=<знач.> заменить или добавить поле и значение\n"
+" -U<поле> удалить поле\n"
+" -?, --help показать это сообщение\n"
+" --version показать версию\n"
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "the current version (%s) is earlier than the previous one (%s)"
+msgstr "текущая версия (%s) меньше чем предыдущая (%s)"
+
+#: scripts/dpkg-genchanges.pl
+msgid "missing Section for source files"
+msgstr "отсутствует Section для файлов с исходным кодом"
+
+#: scripts/dpkg-genchanges.pl
+msgid "missing Priority for source files"
+msgstr "отсутствует Priority для файлов с исходным кодом"
+
+#: scripts/dpkg-genchanges.pl scripts/Dpkg/Vendor.pm
+#, perl-format
+msgid "%s is empty"
+msgstr "%s пуст"
+
+#: scripts/dpkg-genchanges.pl
+msgid "not including original source code in upload"
+msgstr "в закачку не включён оригинальный исходный код"
+
+#: scripts/dpkg-genchanges.pl
+msgid "ignoring -sd option for native Debian package"
+msgstr "игнорируется параметр -sd для родного пакета Debian"
+
+#: scripts/dpkg-genchanges.pl
+msgid "including full source code in upload"
+msgstr "в закачку включён весь исходный код"
+
+#: scripts/dpkg-genchanges.pl
+msgid ""
+"binary-only arch-specific upload (source code and arch-indep packages not "
+"included)"
+msgstr ""
+"закачка только двоичных, зависящих от архитектуры, пакетов (без пакетов "
+"исходного кода и независимых от архитектуры)"
+
+#: scripts/dpkg-genchanges.pl
+msgid ""
+"binary-only arch-indep upload (source code and arch-specific packages not "
+"included)"
+msgstr ""
+"закачка только двоичных, независящих от архитектуры, пакетов (без пакетов "
+"исходного кода и зависимых от архитектуры)"
+
+#: scripts/dpkg-genchanges.pl
+msgid "binary-only upload (no source code included)"
+msgstr "закачка только двоичных пакетов (без пакетов исходного кода)"
+
+#: scripts/dpkg-genchanges.pl
+msgid "binary build with no binary artifacts found; cannot distribute"
+msgstr ""
+"обнаружена двоичная сборка без двоичных пакетов; распространение невозможно"
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "package %s in control file but not in files list"
+msgstr "пакет %s в управляющем файле, но его нет в файле со списком файлов"
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "package %s listed in files list but not in control info"
+msgstr ""
+"пакет %s есть в файле со списком файлов, но его нет в управляющей информации"
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "missing Section for binary package %s; using '-'"
+msgstr "отсутствует Section для двоичного пакета %s; используется «-»"
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "package %s has section %s in control file but %s in files list"
+msgstr "пакет %s в секции %s в управляющем файле, но в %s в списке файлов"
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "missing Priority for binary package %s; using '-'"
+msgstr "отсутствует Priority для двоичного пакета %s; используется «-»"
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "package %s has priority %s in control file but %s in files list"
+msgstr "пакет %s имеет приоритет %s в управляющем файле, но %s в списке файлов"
+
+#: scripts/dpkg-genchanges.pl scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "missing information for critical output field %s"
+msgstr "отсутствует информация о критическом поле вывода %s"
+
+#: scripts/dpkg-genchanges.pl scripts/dpkg-gencontrol.pl
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "missing information for output field %s"
+msgstr "отсутствует информация о поле вывода %s"
+
+#: scripts/dpkg-gencontrol.pl
+#, fuzzy
+#| msgid ""
+#| "Options:\n"
+#| " -p<package> print control file for package.\n"
+#| " -c<control-file> get control info from this file.\n"
+#| " -l<changelog-file> get per-version info from this file.\n"
+#| " -F<changelog-format> force changelog format.\n"
+#| " -v<force-version> set version of binary package.\n"
+#| " -f<files-list-file> write files here instead of debian/files.\n"
+#| " -P<package-build-dir> temporary build dir instead of debian/tmp.\n"
+#| " -n<filename> assume the package filename will be "
+#| "<filename>.\n"
+#| " -O[<file>] write to stdout (or <file>), not .../DEBIAN/"
+#| "control.\n"
+#| " -is, -ip, -isp, -ips deprecated, ignored for compatibility.\n"
+#| " -D<field>=<value> override or add a field and value.\n"
+#| " -U<field> remove a field.\n"
+#| " -V<name>=<value> set a substitution variable.\n"
+#| " -T<substvars-file> read variables here, not debian/substvars.\n"
+#| " -?, --help show this help message.\n"
+#| " --version show the version.\n"
+msgid ""
+"Options:\n"
+" -p<package> print control file for package.\n"
+" -c<control-file> get control info from this file.\n"
+" -l<changelog-file> get per-version info from this file.\n"
+" -F<changelog-format> force changelog format.\n"
+" -v<force-version> set version of binary package.\n"
+" -f<files-list-file> write files here instead of debian/files.\n"
+" -P<package-build-dir> temporary build directory instead of debian/tmp.\n"
+" -n<filename> assume the package filename will be <filename>.\n"
+" -O[<file>] write to stdout (or <file>), not .../DEBIAN/"
+"control.\n"
+" -is, -ip, -isp, -ips deprecated, ignored for compatibility.\n"
+" -D<field>=<value> override or add a field and value.\n"
+" -U<field> remove a field.\n"
+" -V<name>=<value> set a substitution variable.\n"
+" -T<substvars-file> read variables here, not debian/substvars.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+"Параметры:\n"
+" -p<пакет> показать управляющий файл пакета\n"
+" -c<упр.файл> брать управляющую информацию из указанного файла\n"
+" -l<файл-изм.> брать список изменений из указанного файла\n"
+" -F<формат-изм.> изменить формат файла изменений\n"
+" -v<версия> задать версию двоичного пакета\n"
+" -f<файл-списка> записывать файлы в указанный файл,\n"
+" а не в debian/files\n"
+" -P<кат.сборки-пакета> временный каталог сборки вместо debian/tmp\n"
+" -n<имя-файла> считать именем файла пакета <имя-файла>\n"
+" -O[<файл>] записывать в стандартный вывод (или в <файл>),\n"
+" а не в .../DEBIAN/control\n"
+" -is, -ip, -isp, -ips устарели, игнорируется для совместимости\n"
+" -D<поле>=<знач.> заменить или добавить поле и значение\n"
+" -U<поле> удалить поле\n"
+" -V<имя>=<знач.> установить переменную подстановки\n"
+" -T<файл-перемен.> читать переменные из указанного файла\n"
+" а не из debian/substvars\n"
+" -?, --help показать это сообщение\n"
+" --version показать версию\n"
+
+#: scripts/dpkg-gencontrol.pl scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "illegal package name '%s': %s"
+msgstr "недопустимое имя пакета «%s»: %s"
+
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid "package %s not in control info"
+msgstr "пакета %s отсутствует в управляющей информации"
+
+#: scripts/dpkg-gencontrol.pl scripts/dpkg-gensymbols.pl
+msgid "no package stanza found in control info"
+msgstr "строки о пакете нет в управляющей информации"
+
+#: scripts/dpkg-gencontrol.pl scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "must specify package since control info has many (%s)"
+msgstr ""
+"должен быть указан пакет, так как в управляющей информации их несколько (%s)"
+
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid "package %s: "
+msgstr "пакет %s: "
+
+#: scripts/dpkg-gencontrol.pl
+#, fuzzy, perl-format
+#| msgid ""
+#| "current host architecture '%s' does not appear in package's architecture "
+#| "list (%s)"
+msgid ""
+"current host architecture '%s' does not appear in package '%s' architecture "
+"list (%s)"
+msgstr "текущей архитектуры узла «%s» нет в списке архитектур пакета (%s)"
+
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid "%s field of package %s: "
+msgstr "%s поле из пакета %s: "
+
+#: scripts/dpkg-gencontrol.pl
+#, fuzzy, perl-format
+#| msgid "source package name '%s' is illegal: %s"
+msgid "parsing package '%s' %s field: %s"
+msgstr "имя пакета с исходным кодом «%s» некорректно: %s"
+
+#: scripts/dpkg-gencontrol.pl
+#, fuzzy, perl-format
+#| msgid ""
+#| "the %s field contains an arch-specific dependency but the package is "
+#| "architecture all"
+msgid ""
+"the %s field contains an arch-specific dependency but the package '%s' is "
+"architecture all"
+msgstr ""
+"поле %s содержит зависимость, которая есть только в определённой "
+"архитектуре, но пакет относится ко всем архитектурам"
+
+#: scripts/dpkg-gencontrol.pl
+#, fuzzy, perl-format
+#| msgid "%s package with udeb specific field %s"
+msgid "%s package '%s' with udeb specific field %s"
+msgstr "пакет %s со специальным udeb-полем %s"
+
+#: scripts/dpkg-gencontrol.pl scripts/Dpkg/Source/Package.pm
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot stat %s"
+msgstr "не удалось выполнить функцию stat %s"
+
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid "cannot install output control file '%s'"
+msgstr "не удалось установить новый выходной управляющий файл «%s»"
+
+#: scripts/dpkg-gensymbols.pl
+#, fuzzy
+#| msgid ""
+#| "Options:\n"
+#| " -p<package> generate symbols file for package.\n"
+#| " -P<package-build-dir> temporary build dir instead of debian/tmp.\n"
+#| " -e<library> explicitly list libraries to scan.\n"
+#| " -v<version> version of the packages (defaults to\n"
+#| " version extracted from debian/changelog).\n"
+#| " -c<level> compare generated symbols file with the "
+#| "reference\n"
+#| " template in the debian directory and fail if\n"
+#| " difference is too important; level goes from 0 "
+#| "for\n"
+#| " no check, to 4 for all checks (default level "
+#| "is 1).\n"
+#| " -q keep quiet and never emit any warnings or\n"
+#| " generate a diff between generated symbols\n"
+#| " file and the reference template.\n"
+#| " -I<file> force usage of <file> as reference symbols\n"
+#| " file instead of the default file.\n"
+#| " -O[<file>] write to stdout (or <file>), not .../DEBIAN/"
+#| "symbols.\n"
+#| " -t write in template mode (tags are not\n"
+#| " processed and included in output).\n"
+#| " -V verbose output; write deprecated symbols and "
+#| "pattern\n"
+#| " matching symbols as comments (in template mode "
+#| "only).\n"
+#| " -a<arch> assume <arch> as host architecture when "
+#| "processing\n"
+#| " symbol files.\n"
+#| " -d display debug information during work.\n"
+#| " -?, --help show this help message.\n"
+#| " --version show the version.\n"
+msgid ""
+"Options:\n"
+" -l<library-path> add directory to private shared library search "
+"list.\n"
+" -p<package> generate symbols file for package.\n"
+" -P<package-build-dir> temporary build directory instead of debian/tmp.\n"
+" -e<library> explicitly list libraries to scan.\n"
+" -v<version> version of the packages (defaults to\n"
+" version extracted from debian/changelog).\n"
+" -c<level> compare generated symbols file with the "
+"reference\n"
+" template in the debian directory and fail if\n"
+" difference is too important; level goes from 0 "
+"for\n"
+" no check, to 4 for all checks (default level is "
+"1).\n"
+" -q keep quiet and never emit any warnings or\n"
+" generate a diff between generated symbols\n"
+" file and the reference template.\n"
+" -I<file> force usage of <file> as reference symbols\n"
+" file instead of the default file.\n"
+" -O[<file>] write to stdout (or <file>), not .../DEBIAN/"
+"symbols.\n"
+" -t write in template mode (tags are not\n"
+" processed and included in output).\n"
+" -V verbose output; write deprecated symbols and "
+"pattern\n"
+" matching symbols as comments (in template mode "
+"only).\n"
+" -a<arch> assume <arch> as host architecture when "
+"processing\n"
+" symbol files.\n"
+" -d display debug information during work.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+"Параметры:\n"
+" -p<пакет> генерировать файл symbols для заданного пакета\n"
+" -P<кат.сборки-пакета> временный каталог сборки вместо debian/tmp\n"
+" -e<библиотека> явно задать сканируемые библиотеки\n"
+" -v<версия> версия пакетов (по умолчанию\n"
+" версия извлекается из debian/changelog)\n"
+" -c<уровень> сравнить сгенерированный файл symbols с\n"
+" эталонным файлом в каталоге debian и\n"
+" завершить работу с ошибкой, если разница очень\n"
+" велика (уровнем задаётся степень проверки:\n"
+" от 0 — не выполнять проверку, до 4 — все "
+"проверки);\n"
+" по умолчанию уровень равен 1\n"
+" -q не показывать сообщения, предупреждения или\n"
+" отличия между генерируемыми файлами символов\n"
+" и эталонным шаблоном\n"
+" -I<файл> использовать <файл> в качестве эталонного файла\n"
+" символов вместо файла по умолчанию\n"
+" -O<файл> записывать в в стандартный вывод (или <файл>),\n"
+" а не в .../DEBIAN/symbols\n"
+" -t записывать в режиме шаблона (метки не\n"
+" обрабатываются и не включаются в вывод)\n"
+" -V подробный вывод; записывать нежелательные "
+"символы\n"
+" и символы совпадающие с шаблоном как комментарии\n"
+" (только в режиме шаблона)\n"
+" -a<арх.> предполагать <арх.> в качестве архитектуры узла\n"
+" при обработке файлов symbol\n"
+" -d выводить отладочную информацию во время работы\n"
+" -?, --help показать это сообщение\n"
+" --version показать версию\n"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "pattern '%s' did not match any file"
+msgstr "под шаблон «%s» не подходит ни один файл"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "can't read directory %s: %s"
+msgstr "не удалось прочитать каталог %s: %s"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "Dpkg::Shlibs::Objdump couldn't parse %s\n"
+msgstr "Dpkg::Shlibs::Objdump не удалось проанализировать %s\n"
+
+#: scripts/dpkg-gensymbols.pl
+msgid "<standard output>"
+msgstr "<стандартный вывод>"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "new libraries appeared in the symbols file: %s"
+msgstr "появились новые библиотеки в файле symbols: %s"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "some libraries disappeared in the symbols file: %s"
+msgstr "некоторые библиотеки исчезли из файла symbols: %s"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "some new symbols appeared in the symbols file: %s"
+msgstr "появилось несколько новых символов в файле symbols: %s"
+
+#: scripts/dpkg-gensymbols.pl
+msgid "see diff output below"
+msgstr "смотрите вывод diff ниже"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "some symbols or patterns disappeared in the symbols file: %s"
+msgstr "некоторые символы или шаблоны исчезли из файла symbols: %s"
+
+#: scripts/dpkg-gensymbols.pl
+msgid "the generated symbols file is empty"
+msgstr "сгенерированный файл symbols пуст"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "%s doesn't match completely %s"
+msgstr "%s совпадает с %s не полностью"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "no debian/symbols file used as basis for generating %s"
+msgstr "файл debian/symbols не используется в качестве основы для генерации %s"
+
+#: scripts/dpkg-mergechangelogs.pl
+msgid ""
+"This is free software; see the GNU General Public License version 2 or\n"
+"later for copying conditions. There is NO warranty.\n"
+msgstr ""
+"Это свободное программное обеспечение. См. условия распространения в\n"
+"Универсальной общественной лицензии GNU версии 2 или более поздней.\n"
+"НИКАКИЕ гарантии не предоставляются.\n"
+
+#: scripts/dpkg-mergechangelogs.pl
+#, fuzzy, perl-format
+#| msgid ""
+#| "Usage: %s [<option>...] <old> <new-a> <new-b> [<out>]\n"
+#| "\n"
+#| "Options:\n"
+#| " -m, --merge-prereleases merge pre-releases together, ignores "
+#| "everything\n"
+#| " after the last '~' in the version.\n"
+#| " -?, --help show this help message.\n"
+#| " --version show the version.\n"
+msgid ""
+"Usage: %s [<option>...] <old> <new-a> <new-b> [<out>]\n"
+"\n"
+"Options:\n"
+" -m, --merge-prereleases merge pre-releases together, ignores everything\n"
+" after the last '~' in the version.\n"
+" --merge-unreleased merge UNRELEASED entries together, ignoring "
+"their\n"
+" version numbers.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+"Использование: %s [<параметр>...] <старый> <новый-а> <новый-б> [<вывод>]\n"
+"\n"
+"Параметры:\n"
+" -m, --merge-prereleases объединить пред-выпуски вместе, игнорировать всё\n"
+" после последнего «~» в версии\n"
+" -?, --help показать это сообщение\n"
+" --version показать версию\n"
+
+#: scripts/dpkg-mergechangelogs.pl
+msgid "needs at least three arguments"
+msgstr "требуется не менее трёх аргументов"
+
+#: scripts/dpkg-mergechangelogs.pl
+msgid "file arguments need to exist"
+msgstr "файлы, указанные в параметрах, должны существовать"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "Usage: %s [<option>...] <file>...\n"
+msgstr "Использование: %s [<параметр>...] <файл>...\n"
+
+#: scripts/dpkg-name.pl
+#, fuzzy
+#| msgid ""
+#| "\n"
+#| "Options:\n"
+#| " -a, --no-architecture no architecture part in filename.\n"
+#| " -o, --overwrite overwrite if file exists.\n"
+#| " -k, --symlink don't create a new file, but a symlink.\n"
+#| " -s, --subdir [dir] move file into subdir (use with care).\n"
+#| " -c, --create-dir create target dir if not there (use with "
+#| "care).\n"
+#| " -?, --help show this help message.\n"
+#| " -v, --version show the version.\n"
+#| "\n"
+#| "file.deb changes to <package>_<version>_<architecture>.<package_type>\n"
+#| "according to the 'underscores convention'.\n"
+msgid ""
+"\n"
+"Options:\n"
+" -a, --no-architecture no architecture part in filename.\n"
+" -o, --overwrite overwrite if file exists.\n"
+" -k, --symlink don't create a new file, but a symlink.\n"
+" -s, --subdir [dir] move file into subdirectory (use with care).\n"
+" -c, --create-dir create target directory if not there (use with "
+"care).\n"
+" -?, --help show this help message.\n"
+" -v, --version show the version.\n"
+"\n"
+"file.deb changes to <package>_<version>_<architecture>.<package_type>\n"
+"according to the 'underscores convention'.\n"
+msgstr ""
+"\n"
+"Параметры:\n"
+" -a, --no-architecture имя файла без архитектурной части\n"
+" -o, --overwrite перезаписывать существующий файл\n"
+" -k, --symlink не создавать новый файл, а создавать\n"
+" символьную ссылку\n"
+" -s, --subdir [кат] переместить файл в подкаталог (исп. осторожно)\n"
+" -c, --create-dir создать каталог цели, если его нет (исп. "
+"осторожно)\n"
+" -?, --help показать это сообщение\n"
+" -v, --version показать версию\n"
+"\n"
+"Название файл.deb изменяется на <пакет>_<версия>_<архитектура>.<типа­"
+"_пакета>\n"
+"согласно «соглашению о подчёркиваниях».\n"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "cannot find '%s'"
+msgstr "не удалось найти «%s»"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "binary control file %s"
+msgstr "двоичный файл управления %s"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "assuming architecture '%s' for '%s'"
+msgstr "предполагается архитектура «%s» для «%s»"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "bad package control information for '%s'"
+msgstr "неправильная управляющая информация пакета «%s»"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "assuming section '%s' for '%s'"
+msgstr "предполагается раздел «%s» для «%s»"
+
+#: scripts/dpkg-name.pl
+#, fuzzy, perl-format
+#| msgid "no Package field found in '%s', skipping it"
+msgid "no Package field found in '%s', skipping package"
+msgstr "нет поля Package в «%s», пропускается"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "created directory '%s'"
+msgstr "создан каталог «%s»"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "cannot create directory '%s'"
+msgstr "не удалось создать каталог «%s»"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "no such directory '%s', try --create-dir (-c) option"
+msgstr "каталог «%s» не существует, попробуйте параметр --create-dir (-c)"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "skipping '%s'"
+msgstr "пропускается «%s»"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "cannot move '%s' to existing file"
+msgstr "не удалось переместить «%s» в существующий файл"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "moved '%s' to '%s'"
+msgstr "«%s» перемещён в «%s»"
+
+#: scripts/dpkg-name.pl
+msgid "mkdir can be used to create directory"
+msgstr "для создания каталога можно использовать mkdir"
+
+#: scripts/dpkg-name.pl
+msgid "need at least a filename"
+msgstr "требуется хотя бы одно имя файла"
+
+#: scripts/dpkg-parsechangelog.pl
+#, fuzzy
+#| msgid ""
+#| "Options:\n"
+#| " -l<changelog-file> get per-version info from this file.\n"
+#| " -F<changelog-format> force changelog format.\n"
+#| " -L<libdir> look for changelog parsers in <libdir>.\n"
+#| " -S, --show-field <field> show the values for <field>.\n"
+#| " -?, --help show this help message.\n"
+#| " --version show the version."
+msgid ""
+"Options:\n"
+" -l, --file <changelog-file>\n"
+" get per-version info from this file.\n"
+" -F <changelog-format> force changelog format.\n"
+" -S, --show-field <field> show the values for <field>.\n"
+" -?, --help show this help message.\n"
+" --version show the version."
+msgstr ""
+"Параметры:\n"
+" -l<файл-изменений> брать список изменений из указанного файла\n"
+" -F<формат-изм.> изменить формат файла изменений\n"
+" -L<кат-lib> искать анализаторы файла изменений в <кат-lib>\n"
+" -S, --show-field <поле> показать значения <поля>\n"
+" -?, --help показать это сообщение\n"
+" --version показать версию"
+
+#: scripts/dpkg-parsechangelog.pl
+#, fuzzy
+#| msgid ""
+#| "Parser options:\n"
+#| " --format <output-format> see man page for list of available\n"
+#| " output formats, defaults to 'dpkg'\n"
+#| " for compatibility with dpkg-dev\n"
+#| " --since <version>, include all changes later than version\n"
+#| " -s<version>, -v<version>\n"
+#| " --until <version>, include all changes earlier than version\n"
+#| " -u<version>\n"
+#| " --from <version>, include all changes equal or later\n"
+#| " -f<version> than version\n"
+#| " --to <version>, -t<version> include all changes up to or equal\n"
+#| " than version\n"
+#| " --count <number>, include <number> entries from the top\n"
+#| " -c<number>, -n<number> (or the tail if <number> is lower than "
+#| "0)\n"
+#| " --offset <number>, change the starting point for --count,\n"
+#| " -o<number> counted from the top (or the tail if\n"
+#| " <number> is lower than 0)\n"
+#| " --all include all changes\n"
+msgid ""
+"Parser options:\n"
+" --format <output-format>\n"
+" set output format (defaults to 'dpkg').\n"
+" --reverse include all changes in reverse order.\n"
+" --all include all changes.\n"
+" -s, --since <version> include all changes later than <version>.\n"
+" -v <version> ditto.\n"
+" -u, --until <version> include all changes earlier than <version>.\n"
+" -f, --from <version> include all changes equal or later than "
+"<version>.\n"
+" -t, --to <version> include all changes up to or equal than "
+"<version>.\n"
+" -c, --count <number> include <number> entries from the top (or tail\n"
+" if <number> is lower than 0).\n"
+" -n <number> ditto.\n"
+" -o, --offset <number> change starting point for --count, counted from\n"
+" the top (or tail if <number> is lower than 0).\n"
+msgstr ""
+"Параметры анализатора:\n"
+" --format <формат-вывода> в справочной странице есть список возможных\n"
+" выходных форматов, по умолчанию исп. «dpkg»\n"
+" для совместимости с dpkg-dev\n"
+" --since <версия> включить все изменения после этой версии\n"
+" s<версия>, -v <версия>\n"
+" --until <версия> включить все изменения до этой версии\n"
+" -u<версия>\n"
+" --from <версия> включить изменения этой и всех поздних версий\n"
+" -f<версия>\n"
+" --to<версия> включить все изменения до этой версии "
+"включительно\n"
+" -t<версия>\n"
+" --count <число> включить <число> записей от начала\n"
+" -c<число>, -n <число> (или конца, если <число> отрицательное)\n"
+" --offset <число> изменить начальную точку для --count,\n"
+" -o<число> отсчитывать от начала (или конца, если\n"
+" <число> отрицательное)\n"
+" --all включить все изменения\n"
+
+#: scripts/dpkg-parsechangelog.pl
+#, fuzzy
+#| msgid "-i%s is deprecated; it is without effect"
+msgid "-L is obsolete; it is without effect"
+msgstr "-i%s устарел, ничего не изменится"
+
+#: scripts/dpkg-parsechangelog.pl
+#, fuzzy
+#| msgid "changelog format %s is unknown"
+msgid "bad changelog format name"
+msgstr "неизвестный формат файла изменений %s"
+
+#: scripts/dpkg-parsechangelog.pl
+msgid "missing changelog filename"
+msgstr ""
+
+#: scripts/dpkg-parsechangelog.pl
+msgid "takes no non-option arguments"
+msgstr "не принимает необязательные параметры"
+
+#: scripts/dpkg-scanpackages.pl
+#, fuzzy, perl-format
+#| msgid ""
+#| "Usage: %s [<option>...] <binary-path> [<override-file> [<path-prefix>]] > "
+#| "Packages\n"
+#| "\n"
+#| "Options:\n"
+#| " -t, --type <type> scan for <type> packages (default is 'deb').\n"
+#| " -a, --arch <arch> architecture to scan for.\n"
+#| " -h, --hash <hash-list> only generate hashes for the specified list.\n"
+#| " -m, --multiversion allow multiple versions of a single package.\n"
+#| " -e, --extra-override <file>\n"
+#| " use extra override file.\n"
+#| " -M, --medium <medium> add X-Medium field for dselect multicd access "
+#| "method\n"
+#| " -?, --help show this help message.\n"
+#| " --version show the version.\n"
+msgid ""
+"Usage: %s [<option>...] <binary-path> [<override-file> [<path-prefix>]] > "
+"Packages\n"
+"\n"
+"Options:\n"
+" -t, --type <type> scan for <type> packages (default is 'deb').\n"
+" -a, --arch <arch> architecture to scan for.\n"
+" -h, --hash <hash-list> only generate hashes for the specified list.\n"
+" -m, --multiversion allow multiple versions of a single package.\n"
+" -e, --extra-override <file>\n"
+" use extra override file.\n"
+" -M, --medium <medium> add X-Medium field for dselect media access "
+"method\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+"Использование: %s [<параметр> ...] <каталог_двоичн_пакетов>\n"
+" [<файл_переназначений> [<префикс_пути>]] > Packages\n"
+"\n"
+"Параметры:\n"
+" -t, --type <тип> искать пакеты указанного <типа>(по умолчанию "
+"«deb»)\n"
+" -a, --arch <арх.> сканируемая архитектура\n"
+" -h, --hash <hash-list> генерировать хэши то по заданному списку\n"
+" -m, --multiversion разрешить несколько версий одного пакета\n"
+" -e, --extra-override <файл>\n"
+" использовать файл дополнительный файл "
+"переназначений\n"
+" -M, --medium <medium> добавить поле X-Medium для метода\n"
+" доступа dselect multicd\n"
+" -?, --help показать это сообщение\n"
+" --version показать версию\n"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid " %s (package says %s, not %s)"
+msgstr " %s (в пакете указано %s, а не %s)"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "unconditional maintainer override for %s"
+msgstr "безусловное переназначение сопровождающего для %s"
+
+#: scripts/dpkg-scanpackages.pl scripts/dpkg-shlibdeps.pl scripts/Dpkg/IPC.pm
+#: scripts/Dpkg/Shlibs/Objdump.pm
+#, perl-format
+msgid "cannot fork for %s"
+msgstr "не удалось выполнить fork для %s"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "couldn't parse control information from %s"
+msgstr "не удалось проанализировать управляющую информацию из %s"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "'dpkg-deb -I %s control' exited with %d, skipping package"
+msgstr "«dpkg-deb -I %s control» завершилась с кодом %d, пакет пропускается"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "no Package field in control file of %s"
+msgstr "нет поля Package в управляющем файле %s"
+
+#: scripts/dpkg-scanpackages.pl
+#, fuzzy, perl-format
+#| msgid "package %s (filename %s) is repeat but newer version;"
+msgid ""
+"package %s (filename %s) is repeat but newer version; used that one and "
+"ignored data from %s!"
+msgstr "повторение пакета %s (файл %s), но с более новой версией;"
+
+#: scripts/dpkg-scanpackages.pl
+#, fuzzy, perl-format
+#| msgid "ignored that one and using data from %s!"
+msgid ""
+"package %s (filename %s) is repeat; ignored that one and using data from %s!"
+msgstr "данный файл игнорируется и используются данные из %s!"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "package %s (filename %s) has Filename field!"
+msgstr "пакет %s (файл %s) содержит поле Filename!"
+
+#: scripts/dpkg-scanpackages.pl scripts/dpkg-scansources.pl
+msgid "one to three arguments expected"
+msgstr "ожидается от 1 до 3 аргументов"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "unsupported checksum '%s'"
+msgstr "неподдерживаемая контрольная сумма «%s»"
+
+#: scripts/dpkg-scanpackages.pl
+#, fuzzy, perl-format
+#| msgid "binary dir %s not found"
+msgid "binary path %s not found"
+msgstr "каталог двоичных пакетов %s не найден"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "override file %s not found"
+msgstr "файл переназначений %s не найден"
+
+#: scripts/dpkg-scanpackages.pl
+msgid "failed when writing stdout"
+msgstr "сбой при записи в стандартный вывод"
+
+#: scripts/dpkg-scanpackages.pl
+msgid "couldn't close stdout"
+msgstr "не удалось закрыть стандартный вывод"
+
+#: scripts/dpkg-scanpackages.pl
+msgid "Packages with multiple instances but no --multiversion specified:"
+msgstr ""
+
+#: scripts/dpkg-scanpackages.pl
+msgid "Packages in override file with incorrect old maintainer value:"
+msgstr ""
+"Пакеты в файле переназначений с неправильным старым значением "
+"сопровождающего:"
+
+#: scripts/dpkg-scanpackages.pl
+msgid "Packages specifying same maintainer as override file:"
+msgstr "Пакеты с тем же сопровождающим что и в файле переназначений:"
+
+#: scripts/dpkg-scanpackages.pl
+msgid "Packages in archive but missing from override file:"
+msgstr "Пакеты есть в архиве, но отсутствуют в файле переназначений:"
+
+#: scripts/dpkg-scanpackages.pl
+msgid "Packages in override file but not in archive:"
+msgstr "Пакеты есть в файле переназначений, но нет в архиве:"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "Wrote %s entries to output Packages file."
+msgstr "Записано %s записей в выходной файл Packages."
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid ""
+"Usage: %s [<option>...] <binary-path> [<override-file> [<path-prefix>]] > "
+"Sources\n"
+"\n"
+"Options:\n"
+" -n, --no-sort don't sort by package before outputting.\n"
+" -e, --extra-override <file>\n"
+" use extra override file.\n"
+" -s, --source-override <file>\n"
+" use file for additional source overrides, "
+"default\n"
+" is regular override file with .src appended.\n"
+" --debug turn debugging on.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+"\n"
+"See the man page for the full documentation.\n"
+msgstr ""
+"Использование: %s [<параметр> ...] <кат.двоичн.пакетов>\n"
+" [<файл_переназначений> [<префикс_пути>]] > Sources\n"
+"\n"
+"Параметры:\n"
+" -n, --no-sort не сортировать по имени пакета перед выводом\n"
+" -e, --extra-override <файл>\n"
+" использовать дополнительный файл переназначений\n"
+" -s, --source-override <файл>\n"
+" использовать файл для дополнительных\n"
+" переназначений исходников, по умолчанию\n"
+" это обычный файл переназначений с добавленным src\n"
+" --debug включить отладку\n"
+" -?, --help показать это сообщение\n"
+" --version показать версию\n"
+"\n"
+"В справочной странице доступна полная документация.\n"
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid "invalid override entry at line %d (%d fields)"
+msgstr "неправильная запись переназначения в строке %d (%d полей)"
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid "ignoring duplicate override entry for %s at line %d"
+msgstr "игнорируется дублирующая запись переназначения для %s в строке %d"
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid "ignoring override entry for %s, invalid priority %s"
+msgstr "игнорируется запись переназначения для %s; неправильный приоритет %s"
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid "invalid source override entry at line %d (%d fields)"
+msgstr "неправильная запись переназначения исходника в строке %d (%d полей)"
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid "ignoring duplicate source override entry for %s at line %d"
+msgstr ""
+"игнорирование дублирующей записи переназначения исходника для %s в строке %d"
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid "no binary packages specified in %s"
+msgstr "не задано двоичное поле в %s"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "administrative directory '%s' does not exist"
+msgstr "административный каталог «%s» не существует"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "unrecognized dependency field '%s'"
+msgstr "нераспознанное поле зависимости «%s»"
+
+#: scripts/dpkg-shlibdeps.pl
+msgid "need at least one executable"
+msgstr "требуется хотя бы один исполняемый файл"
+
+#: scripts/dpkg-shlibdeps.pl
+#, fuzzy, perl-format
+#| msgid ""
+#| "couldn't find library %s needed by %s (ELF format: '%s'; RPATH: '%s')"
+msgid ""
+"cannot find library %s needed by %s (ELF format: '%s' abi: '%s'; RPATH: '%s')"
+msgstr ""
+"не удалось найти библиотеку %s, необходимую для %s (формат ELF: «%s»; RPATH: "
+"«%s»)"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "%s has an unexpected SONAME (%s)"
+msgstr "%s имеет неожидаемый SONAME (%s)"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid ""
+"no dependency information found for %s (used by %s)\n"
+"Hint: check if the library actually comes from a package."
+msgstr ""
+"информация о зависимостях не найдена для %s (используется %s)\n"
+"Подсказка: проверьте, действительно ли библиотеки из этого пакета."
+
+#: scripts/dpkg-shlibdeps.pl
+msgid ""
+"binaries to analyze should already be installed in their package's directory"
+msgstr ""
+"анализируемые двоичные файлы должны быть уже установлены в свои каталоги "
+"пакетов"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "symbol %s used by %s found in none of the libraries"
+msgstr "символ %s, используемый %s, в библиотеках не найден"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid ""
+"%s contains an unresolvable reference to symbol %s: it's probably a plugin"
+msgstr "%s содержит неразрешимую ссылку на символ %s: вероятно, это модуль"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "%d similar warning has been skipped (use -v to see it)"
+msgid_plural ""
+"%d other similar warnings have been skipped (use -v to see them all)"
+msgstr[0] ""
+"%d похожее предупреждение было пропущено (используйте -v, чтобы увидеть его)"
+msgstr[1] ""
+"%d других похожих предупреждения было пропущено (используйте -v, чтобы "
+"увидеть их)"
+msgstr[2] ""
+"%d других похожих предупреждений было пропущено (используйте -v, чтобы "
+"увидеть их)"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid ""
+"%s should not be linked against %s (it uses none of the library's symbols)"
+msgstr ""
+"%s не должен компоноваться с %s (не используется ни один из её символов)"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid ""
+"package could avoid a useless dependency if %s was not linked against %s (it "
+"uses none of the library's symbols)"
+msgid_plural ""
+"package could avoid a useless dependency if %s were not linked against %s "
+"(they use none of the library's symbols)"
+msgstr[0] ""
+"у пакета %s можно удалить бесполезную зависимость от %s, если исключить её "
+"из компоновки (так как не используется ни одного из её библиотечных символов)"
+msgstr[1] ""
+"у пакета %s можно удалить бесполезные зависимости от %s, если исключить их "
+"из компоновки (так как не используется ни одного из их библиотечных символов)"
+msgstr[2] ""
+"у пакета %s можно удалить бесполезные зависимости от %s, если исключить их "
+"из компоновки (так как не используется ни одного из их библиотечных символов)"
+
+#: scripts/dpkg-shlibdeps.pl
+msgid ""
+"Note: libraries are not searched in other binary packages that do not have "
+"any shlibs or symbols file.\n"
+"To help dpkg-shlibdeps find private libraries, you might need to use -l."
+msgstr ""
+"Замечание: библиотеки не ищутся в других двоичных пакетах, в которых нет "
+"файла shlibs или symbols. Чтобы помочь dpkg-shlibdeps\n"
+"найти персональные библиотеки, используйте -l."
+
+#: scripts/dpkg-shlibdeps.pl
+msgid "cannot continue due to the error above"
+msgid_plural "cannot continue due to the errors listed above"
+msgstr[0] "невозможно продолжать из-за ошибки, указанной выше"
+msgstr[1] "невозможно продолжать из-за ошибок, указанных выше"
+msgstr[2] "невозможно продолжать из-за ошибок, указанных выше"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "invalid dependency got generated: %s"
+msgstr "при генерации получена неверная зависимость: %s"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "install new varlist file '%s'"
+msgstr "установка нового файла со списком переменных «%s»"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "Usage: %s [<option>...] <executable>|-e<executable> [<option>...]"
+msgstr ""
+"Использование: %s [<параметр> ...] <исп.файл>|-e<исп.файл> [<параметр> ...]"
+
+#: scripts/dpkg-shlibdeps.pl
+msgid ""
+"Positional options (order is significant):\n"
+" <executable> include dependencies for <executable>,\n"
+" -e<executable> (use -e if <executable> starts with '-')\n"
+" -d<dependency-field> next executable(s) set shlibs:<dependency-field>."
+msgstr ""
+"Позиционные параметры (порядок важен):\n"
+" <исп.файл> включить все зависимости для <исп.файла>,\n"
+" -e<исп.файл> (используйте -e, если <исп.файл> начинается с "
+"«-»)\n"
+" -d<поле-завис.> для последующих исп.файлов\n"
+" задать в shlibs:<поле-завис.>"
+
+#: scripts/dpkg-shlibdeps.pl
+#, fuzzy
+#| msgid ""
+#| "Options:\n"
+#| " -l<library-dir> add directory to private shared library search "
+#| "list.\n"
+#| " -p<varname-prefix> set <varname-prefix>:* instead of shlibs:*.\n"
+#| " -O[<file>] write variable settings to stdout (or "
+#| "<file>).\n"
+#| " -L<local-shlibs-file> shlibs override file, not debian/shlibs."
+#| "local.\n"
+#| " -T<substvars-file> update variables here, not debian/substvars.\n"
+#| " -t<type> set package type (default is deb).\n"
+#| " -x<package> exclude package from the generated "
+#| "dependencies.\n"
+#| " -S<package-build-dir> search needed libraries in the given\n"
+#| " package build directory first.\n"
+#| " -v enable verbose mode (can be used multiple "
+#| "times).\n"
+#| " --ignore-missing-info don't fail if dependency information can't be "
+#| "found.\n"
+#| " --warnings=<value> define set of active warnings (see manual "
+#| "page).\n"
+#| " --admindir=<directory> change the administrative directory.\n"
+#| " -?, --help show this help message.\n"
+#| " --version show the version."
+msgid ""
+"Options:\n"
+" -l<library-dir> add directory to private shared library search "
+"list.\n"
+" -p<varname-prefix> set <varname-prefix>:* instead of shlibs:*.\n"
+" -O[<file>] write variable settings to stdout (or <file>).\n"
+" -L<local-shlibs-file> shlibs override file, not debian/shlibs.local.\n"
+" -T<substvars-file> update variables here, not debian/substvars.\n"
+" -t<type> set package type (default is deb).\n"
+" -x<package> exclude package from the generated dependencies.\n"
+" -S<package-build-dir> search needed libraries in the given\n"
+" package build directory first.\n"
+" -I<package-build-dir> ignore needed libraries, shlibs and symbols "
+"files\n"
+" in the given build directory.\n"
+" -v enable verbose mode (can be used multiple "
+"times).\n"
+" --ignore-missing-info don't fail if dependency information can't be "
+"found.\n"
+" --warnings=<value> define set of active warnings (see manual page).\n"
+" --admindir=<directory> change the administrative directory.\n"
+" -?, --help show this help message.\n"
+" --version show the version."
+msgstr ""
+"Параметры:\n"
+" -l<кат.библ.> добавить каталог личных общих библиотек\n"
+" в список поиска\n"
+" -p<преф.имени-пер.> задать <преф.имени-пер.>:* вместо shlibs:*\n"
+" -O[<файл>] вывести значения переменных в стандартный вывод\n"
+" (или <файл>)\n"
+" -L<лок.shlibs-файл> файл замены shlibs вместо debian/shlibs.local\n"
+" -T<файл-перем.> обновлять переменные в этом файле,\n"
+" а не в debian/substvars\n"
+" -t<тип> указать тип пакета (по умолчанию deb)\n"
+" -x<пакет> исключить пакет из списка генерируемых "
+"зависимостей\n"
+" -S<кат.сб.пак.> сначала искать необходимые библиотеки\n"
+" в указанном каталоге сборки пакета\n"
+" -v включить показ подробностей работы (может быть\n"
+" указан несколько раз)\n"
+" --ignore-missing-info не останавливаться, если не найдена информация\n"
+" о зависимостях\n"
+" --warnings=<значение> задать набор активных предупреждений\n"
+" (смотрите справочную страницу)\n"
+" --admindir=<каталог> изменить административный каталог\n"
+" -?, --help показать это сообщение\n"
+" --version показать версию"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid ""
+"Dependency fields recognized are:\n"
+" %s\n"
+msgstr ""
+"Распознаваемые поля зависимостей:\n"
+" %s\n"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "can't extract name and version from library name '%s'"
+msgstr "не удалось выделить имя и версию из библиотеки «%s»"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "unable to open shared libs info file '%s'"
+msgstr "невозможно открыть информационный файл разделяемой библиотеки «%s»"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "shared libs info file '%s' line %d: bad line '%s'"
+msgstr ""
+"информационный файл разделяемой библиотеки «%s» строка %d: неправильная "
+"строка «%s»"
+
+#: scripts/dpkg-shlibdeps.pl scripts/Dpkg/Changelog/Parse.pm
+#: scripts/Dpkg/Checksums.pm
+#, perl-format
+msgid "cannot open file %s"
+msgstr "не удалось открыть файл %s"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid ""
+"$ORIGIN is used in RPATH of %s and the corresponding directory could not be "
+"identified due to lack of DEBIAN sub-directory in the root of package's "
+"build tree"
+msgstr ""
+"$ORIGIN используется в RPATH (%s) и соответствующий каталог невозможно "
+"определить из-за отсутствия подкаталога DEBIAN в корне дерева сборки пакета"
+
+#: scripts/dpkg-shlibdeps.pl
+msgid "diversions involved - output may be incorrect"
+msgstr "задействованы отклонения - результат может быть неправильным"
+
+#: scripts/dpkg-shlibdeps.pl
+msgid "write diversion info to stderr"
+msgstr "запись информации об отклонениях в поток ошибок"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "unknown output from dpkg --search: '%s'"
+msgstr "неизвестный вывод от dpkg --search: «%s»"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "--%s needs a directory"
+msgstr "для --%s требуется каталог"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "cannot stat directory %s"
+msgstr "не удалось выполнить функцию stat для каталога %s"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "directory argument %s is not a directory"
+msgstr "значение параметра каталога %s не является каталогом"
+
+#: scripts/dpkg-source.pl scripts/Dpkg/Source/BinaryFiles.pm
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "unable to chdir to '%s'"
+msgstr "невозможно выполнить chdir в «%s»"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "using options from %s: %s"
+msgstr "используются параметры из %s: %s"
+
+#: scripts/dpkg-source.pl scripts/Dpkg/Compression.pm
+#, perl-format
+msgid "%s is not a supported compression"
+msgstr "неподдерживаемый метод сжатия %s"
+
+#: scripts/dpkg-source.pl scripts/Dpkg/Compression.pm
+#, perl-format
+msgid "%s is not a compression level"
+msgstr "%s не является степенью сжатия"
+
+#: scripts/dpkg-source.pl
+msgid "-E and -W are deprecated, they are without effect"
+msgstr "-E и -W устарели, они ничего не изменят"
+
+#: scripts/dpkg-source.pl scripts/dpkg-vendor.pl
+msgid "need an action option"
+msgstr "необходим параметр действия"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "no source format specified in %s, see dpkg-source(1)"
+msgstr "не задан формат исходников в %s, см. dpkg-source(1)"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "%s doesn't contain any information about the source package"
+msgstr "%s не содержит информации о пакете с исходным кодом"
+
+#: scripts/dpkg-source.pl
+#, fuzzy, perl-format
+#| msgid "'%s' is not a legal architecture string"
+msgid "'%s' is not a legal architecture string in package '%s'"
+msgstr "«%s» не является разрешённой строкой архитектуры"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "architecture %s only allowed on its own (list for package %s is '%s')"
+msgstr ""
+"архитектура %s должна быть только из указанных в пакете (список для пакета "
+"%s: «%s»)"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "%s doesn't list any binary package"
+msgstr "в «%s» отсутствует какой-либо двоичный пакет"
+
+#: scripts/dpkg-source.pl
+msgid "building source for a binary-only release"
+msgstr "сборка пакета с исходным кодом только для двоичного выпуска"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "can't build with source format '%s': %s"
+msgstr "невозможно собрать с форматом исходника «%s»: %s"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "using source format '%s'"
+msgstr "используется формат исходника «%s»"
+
+#: scripts/dpkg-source.pl scripts/Dpkg/Source/Package/V1.pm
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Package/V3/Bzr.pm
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+#, perl-format
+msgid "building %s in %s"
+msgstr "сборка %s в %s"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "--%s needs at least one argument, the .dsc"
+msgstr "--%s требует указания хотя бы одного значения .dsc"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "--%s takes no more than two arguments"
+msgstr "--%s может иметь не более двух значений"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "--%s needs the .dsc file as first argument, not a directory"
+msgstr "--%s принимает .dsc файл первым значением, а не каталог"
+
+#: scripts/dpkg-source.pl scripts/Dpkg/Source/Package/V1.pm
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Package/V3/Bzr.pm
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+#, perl-format
+msgid "unpack target exists: %s"
+msgstr "цель распаковки существует: %s"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "%s doesn't contain a valid OpenPGP signature"
+msgstr "%s не содержит корректной подписи OpenPGP"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "extracting unsigned source package (%s)"
+msgstr "распаковка неподписанного пакета с исходным кодом (%s)"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "extracting %s in %s"
+msgstr "извлечение %s в %s"
+
+#: scripts/dpkg-source.pl
+#, fuzzy, perl-format
+#| msgid "%s is not a plain file"
+msgid "test control %s is not a regular file"
+msgstr "%s не является простым файлом"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "%s field contains value %s, but no tests control file %s"
+msgstr "поле %s содержит значение %s, но не проверяется управляющим файлом %s"
+
+#: scripts/dpkg-source.pl
+#, fuzzy, perl-format
+#| msgid "%s is not a plain file"
+msgid "test control %s is missing %s or %s field"
+msgstr "%s не является простым файлом"
+
+#: scripts/dpkg-source.pl
+msgctxt "source options"
+msgid "<none>"
+msgstr ""
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "Usage: %s [<option>...] <command>"
+msgstr "Использование: %s [<параметр>...] <команда>"
+
+#: scripts/dpkg-source.pl
+#, fuzzy
+#| msgid ""
+#| "Commands:\n"
+#| " -x, --extract <filename>.dsc [<output-dir>]\n"
+#| " extract source package.\n"
+#| " -b, --build <dir> build source package.\n"
+#| " --print-format <dir> print the format to be used for the source "
+#| "package.\n"
+#| " --commit [<dir> [<patch-name>]]\n"
+#| " store upstream changes in a new patch."
+msgid ""
+"Commands:\n"
+" -x, --extract <filename>.dsc [<output-dir>]\n"
+" extract source package.\n"
+" -b, --build <dir> build source package.\n"
+" --print-format <dir> print the format to be used for the source "
+"package.\n"
+" --before-build <dir> run the corresponding source package format "
+"hook.\n"
+" --after-build <dir> run the corresponding source package format "
+"hook.\n"
+" --commit [<dir> [<patch-name>]]\n"
+" store upstream changes in a new patch."
+msgstr ""
+"Команды:\n"
+" -x, --extract <имя_файла>.dsc [<выходн.каталог>]\n"
+" распаковать пакет исходного кода\n"
+" -b, --build <кат> собрать пакет исходного кода\n"
+" --print-format <кат> вывести формат исходника, который\n"
+" использовался бы для сборки пакета исходного "
+"кода\n"
+" --commit [<кат> [<заплата>]]\n"
+" сохранить изменения оригинала в новой заплате"
+
+#: scripts/dpkg-source.pl
+#, fuzzy, perl-format
+#| msgid ""
+#| "Build options:\n"
+#| " -c<control-file> get control info from this file.\n"
+#| " -l<changelog-file> get per-version info from this file.\n"
+#| " -F<changelog-format> force changelog format.\n"
+#| " --format=<source-format> set the format to be used for the source "
+#| "package.\n"
+#| " -V<name>=<value> set a substitution variable.\n"
+#| " -T<substvars-file> read variables here.\n"
+#| " -D<field>=<value> override or add a .dsc field and value.\n"
+#| " -U<field> remove a field.\n"
+#| " -q quiet mode.\n"
+#| " -i[<regex>] filter out files to ignore diffs of\n"
+#| " (defaults to: '%s').\n"
+#| " -I[<pattern>] filter out files when building tarballs\n"
+#| " (defaults to: %s).\n"
+#| " -Z<compression> select compression to use (defaults to '%s',\n"
+#| " supported are: %s).\n"
+#| " -z<level> compression level to use (defaults to '%d',\n"
+#| " supported are: '1'-'9', 'best', 'fast')"
+msgid ""
+"Build options:\n"
+" -c<control-file> get control info from this file.\n"
+" -l<changelog-file> get per-version info from this file.\n"
+" -F<changelog-format> force changelog format.\n"
+" --format=<source-format> set the format to be used for the source "
+"package.\n"
+" -V<name>=<value> set a substitution variable.\n"
+" -T<substvars-file> read variables here.\n"
+" -D<field>=<value> override or add a .dsc field and value.\n"
+" -U<field> remove a field.\n"
+" -i, --diff-ignore[=<regex>]\n"
+" filter out files to ignore diffs of\n"
+" (defaults to: '%s').\n"
+" -I, --tar-ignore[=<pattern>]\n"
+" filter out files when building tarballs\n"
+" (defaults to: %s).\n"
+" -Z, --compression=<compression>\n"
+" select compression to use (defaults to '%s',\n"
+" supported are: %s).\n"
+" -z, --compression-level=<level>\n"
+" compression level to use (defaults to '%d',\n"
+" supported are: '1'-'9', 'best', 'fast')"
+msgstr ""
+"Параметры сборки:\n"
+" -c<упр.файл> брать управляющую информацию\n"
+" из указанного файла\n"
+" -l<файл-изменений> брать список изменений из указанного файла\n"
+" -F<формат-изм.> задать формат журнала изменений\n"
+" --format=<формат-исх.> задать формат пакета исходного кода\n"
+" -V<имя>=<знач.> установить переменную подстановки\n"
+" -T<файл-substvars> читать переменные из указанного файла\n"
+" -D<поле>=<знач.> заменить или добавить .dsc поле и значение\n"
+" -U<поле> удалить поле\n"
+" -q не выводить предупреждения\n"
+" -i[<рег.выр.>] не включать совпадающие с регулярным выражением\n"
+" файлы в diff (по умолчанию: «%s»)\n"
+" -I[<шаблон>] не включать подпадающие под шаблон\n"
+" файлы в tarball (по умолчанию: %s)\n"
+" -Z<алгоритм> задать используемый метод сжатия\n"
+" (по умолчанию «%s», поддерживаются: %s).\n"
+" -z<степень> степень сжатия (по умолчанию: «%d»,\n"
+" поддерживаются: 1-9, best, fast)"
+
+#: scripts/dpkg-source.pl
+#, fuzzy
+#| msgid ""
+#| "Extract options:\n"
+#| " --no-copy don't copy .orig tarballs\n"
+#| " --no-check don't check signature and checksums before "
+#| "unpacking\n"
+#| " --require-valid-signature abort if the package doesn't have a valid "
+#| "signature\n"
+#| " --ignore-bad-version allow bad source package versions."
+msgid ""
+"Extract options:\n"
+" --no-copy don't copy .orig tarballs\n"
+" --no-check don't check signature and checksums before "
+"unpacking\n"
+" --no-overwrite-dir do not overwrite directory on extraction\n"
+" --require-valid-signature abort if the package doesn't have a valid "
+"signature\n"
+" --require-strong-checksums\n"
+" abort if the package contains no strong "
+"checksums\n"
+" --ignore-bad-version allow bad source package versions."
+msgstr ""
+"Параметры распаковки:\n"
+" --no-copy не копировать .orig tarball-ы\n"
+" --no-check не проверять подпись и контрольные суммы\n"
+" перед распаковкой\n"
+" --require-valid-signature прерваться, если нет корректной подписи\n"
+" --ignore-bad-version допускать некорректные версии пакета\n"
+" исходного кода"
+
+#: scripts/dpkg-source.pl
+#, fuzzy
+#| msgid ""
+#| "General options:\n"
+#| " -?, --help show this help message.\n"
+#| " --version show the version."
+msgid ""
+"General options:\n"
+" --threads-max=<threads>\n"
+" use at most <threads> with compressor.\n"
+" -q quiet mode.\n"
+" -?, --help show this help message.\n"
+" --version show the version."
+msgstr ""
+"Общие параметры:\n"
+" -?, --help показать это сообщение\n"
+" --version показать версию"
+
+#: scripts/dpkg-source.pl
+msgid ""
+"Source format specific build and extract options are available;\n"
+"use --format with --help to see them."
+msgstr ""
+
+#: scripts/dpkg-vendor.pl
+msgid ""
+"Commands:\n"
+" --is <vendor> returns true if current vendor is <vendor>.\n"
+" --derives-from <vendor> returns true if current vendor derives from "
+"<vendor>.\n"
+" --query <field> print the content of the vendor-specific field.\n"
+" --help show this help message.\n"
+" --version show the version."
+msgstr ""
+"Команды:\n"
+" --is <поставщик> вернуть true, если текущий\n"
+" поставщик — <поставщик>\n"
+" --derives-from <поставщик> вернуть true, если текущий поставщик "
+"происходит\n"
+" от <поставщика>\n"
+" --query <поле> показать содержимое поле, определённое\n"
+" поставщиком\n"
+" --help показать это сообщение\n"
+" --version показать версию"
+
+#: scripts/dpkg-vendor.pl
+msgid ""
+"Options:\n"
+" --vendor <vendor> assume <vendor> is the current vendor."
+msgstr ""
+"Параметры:\n"
+" --vendor <поставщик> предполагать, что <поставщик> является "
+"текущим\n"
+" поставщиком"
+
+#: scripts/dpkg-vendor.pl
+#, perl-format
+msgid "vendor %s doesn't exist in %s"
+msgstr "поставщик %s не существует в %s"
+
+#: scripts/Dpkg/Arch.pm
+#, fuzzy
+#| msgid ""
+#| "couldn't determine gcc system type, falling back to default (native "
+#| "compilation)"
+msgid ""
+"cannot determine CC system type, falling back to default (native compilation)"
+msgstr ""
+"Не удалось определить системный тип gcc, переход к использованию значения по "
+"умолчанию (родная компиляция)"
+
+#: scripts/Dpkg/Arch.pm
+#, fuzzy, perl-format
+#| msgid ""
+#| "unknown gcc system type %s, falling back to default (native compilation)"
+msgid "unknown CC system type %s, falling back to default (native compilation)"
+msgstr ""
+"неизвестный системный тип gcc %s, переход к использованию значения по "
+"умолчанию (родная компиляция)"
+
+#: scripts/Dpkg/Arch.pm
+#, fuzzy, perl-format
+#| msgid "'%s' is not a legal architecture string"
+msgid "'%s' is not a legal architecture in list '%s'"
+msgstr "«%s» не является разрешённой строкой архитектуры"
+
+#: scripts/Dpkg/BuildFlags.pm scripts/Dpkg/Compression/FileHandle.pm
+#: scripts/Dpkg/File.pm scripts/Dpkg/Interface/Storable.pm
+#: scripts/Dpkg/Shlibs/Objdump.pm scripts/Dpkg/Source/BinaryFiles.pm
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "cannot read %s"
+msgstr "не удалось прочитать %s"
+
+#: scripts/Dpkg/BuildFlags.pm
+#, perl-format
+msgid "line %d of %s mentions unknown flag %s"
+msgstr "в строке %d из %s упомянут неизвестный флаг %s"
+
+#: scripts/Dpkg/BuildFlags.pm
+#, perl-format
+msgid "line %d of %s is invalid, it has been ignored"
+msgstr "неправильная строка %d из %s, она была проигнорирована"
+
+#: scripts/Dpkg/BuildOptions.pm
+#, perl-format
+msgid "invalid flag in %s: %s"
+msgstr "неправильный флаг в %s: %s"
+
+#: scripts/Dpkg/BuildOptions.pm
+#, perl-format
+msgid "unknown %s feature in %s variable: %s"
+msgstr "неизвестное свойство %s в переменной %s: %s"
+
+#: scripts/Dpkg/BuildOptions.pm
+#, perl-format
+msgid "incorrect value in %s option of %s variable: %s"
+msgstr "некорректное значение в параметре %s переменной %s: %s"
+
+#: scripts/Dpkg/BuildTypes.pm
+#, perl-format
+msgid "cannot combine %s and %s"
+msgstr "не удалось объединить %s и %s"
+
+#: scripts/Dpkg/BuildTypes.pm
+#, fuzzy, perl-format
+#| msgid "unknown file type"
+msgid "unknown build type %s"
+msgstr "неизвестный тип файла"
+
+#: scripts/Dpkg/Changelog.pm
+#, perl-format
+msgid ""
+"%s(l%s): %s\n"
+"LINE: %s"
+msgstr ""
+"%s(l%s): %s\n"
+"СТРОКА: %s"
+
+#: scripts/Dpkg/Changelog.pm
+#, perl-format
+msgid "%s(l%s): %s"
+msgstr "%s(l%s): %s"
+
+#: scripts/Dpkg/Changelog.pm
+msgid "'offset' without 'count' has no effect"
+msgstr "«offset» без «count» бесполезен"
+
+#: scripts/Dpkg/Changelog.pm
+msgid "you can't combine 'count' or 'offset' with any other range option"
+msgstr ""
+"нельзя использовать «count» или «offset» одновременно с любыми другими "
+"параметрами диапазона"
+
+#: scripts/Dpkg/Changelog.pm
+msgid "you can only specify one of 'from' and 'since', using 'since'"
+msgstr "можно указать только одно «from» и «since», используется «since»"
+
+#: scripts/Dpkg/Changelog.pm
+msgid "you can only specify one of 'to' and 'until', using 'until'"
+msgstr "можно указать только одно «to» и «until», используется «until»"
+
+#: scripts/Dpkg/Changelog.pm
+#, fuzzy, perl-format
+#| msgid "'%s' option specifies non-existing version"
+msgid "'%s' option specifies non-existing version '%s'"
+msgstr "в параметре «%s» указана несуществующая версия"
+
+#: scripts/Dpkg/Changelog.pm
+msgid "use newest entry that is earlier than the one specified"
+msgstr "используемый самый новый элемент меньше чем указанный"
+
+#: scripts/Dpkg/Changelog.pm
+msgid "none found, starting from the oldest entry"
+msgstr "ничего не найдено, начинаем с самого старого элемента"
+
+#: scripts/Dpkg/Changelog.pm
+msgid "use oldest entry that is later than the one specified"
+msgstr "используемый самый старый элемент больше чем указанный"
+
+#: scripts/Dpkg/Changelog.pm
+#, fuzzy, perl-format
+#| msgid "no such entry found, ignoring '%s' parameter"
+msgid "no such entry found, ignoring '%s' parameter '%s'"
+msgstr "элемент не найден, параметр «%s» игнорируется"
+
+#: scripts/Dpkg/Changelog.pm
+#, fuzzy, perl-format
+#| msgid "'since' option specifies most recent version, ignoring"
+msgid "'since' option specifies most recent version '%s', ignoring"
+msgstr "в параметре «since» задана более новая версия, игнорируется"
+
+#: scripts/Dpkg/Changelog.pm
+#, fuzzy, perl-format
+#| msgid "'until' option specifies oldest version, ignoring"
+msgid "'until' option specifies oldest version '%s', ignoring"
+msgstr "в параметре «until» задана более новая версия, игнорируется"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+msgid "first heading"
+msgstr "первый заголовок"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+#, fuzzy
+#| msgid "next heading or eof"
+msgid "next heading or end of file"
+msgstr "следующий заголовок или eof"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+msgid "start of change data"
+msgstr "начало данных об изменениях"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+msgid "more change data or trailer"
+msgstr "продолжение данных об изменениях или концевик"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+#, perl-format
+msgid "found start of entry where expected %s"
+msgstr "найдено начало записи где ожидалось %s"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+msgid "badly formatted heading line"
+msgstr "неправильный формат строки заголовка"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+#, perl-format
+msgid "found trailer where expected %s"
+msgstr "найдено завершение где ожидалось %s"
+
+#: scripts/Dpkg/Changelog/Debian.pm scripts/Dpkg/Changelog/Entry/Debian.pm
+msgid "badly formatted trailer line"
+msgstr "неправильный формат строки завершения"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+#, perl-format
+msgid "found change data where expected %s"
+msgstr "найдены данные изменений где ожидалось %s"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+#, perl-format
+msgid "found blank line where expected %s"
+msgstr "найдена пустая строка где ожидалось %s"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+msgid "unrecognized line"
+msgstr "нераспознанная строка"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+#, fuzzy, perl-format
+#| msgid "found eof where expected %s"
+msgid "found end of file where expected %s"
+msgstr "найден символ eof где ожидалось %s"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "version '%s' is invalid: %s"
+msgstr "некорректная версия «%s»: %s"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "bad key-value after ';': '%s'"
+msgstr "неверная пара ключ-значение после «;»: «%s»"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "repeated key-value %s"
+msgstr "повторение пары ключ-значение %s"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "badly formatted urgency value: %s"
+msgstr "неправильный формат значения критичности: %s"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "bad binary-only value: %s"
+msgstr "нежелательный только двоичное значение: %s"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "unknown key-value %s"
+msgstr "неизвестный ключ-значение %s"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+msgid "the header doesn't match the expected regex"
+msgstr "заголовок не подходит под ожидаемое регулярное выражение"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "ignoring invalid week day '%s'"
+msgstr ""
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, fuzzy, perl-format
+#| msgid "invalid flag in %s: %s"
+msgid "uses full '%s' instead of abbreviated month name '%s'"
+msgstr "неправильный флаг в %s: %s"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, fuzzy, perl-format
+#| msgid "invalid flag in %s: %s"
+msgid "invalid abbreviated month name '%s'"
+msgstr "неправильный флаг в %s: %s"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, fuzzy, perl-format
+#| msgid "cannot exec format parser: %s"
+msgid "cannot parse non-conformant date '%s'"
+msgstr "не удалось запустить анализатор формата: %s"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+msgid "the trailer doesn't match the expected regex"
+msgstr "концевик не подходит под ожидаемое регулярное выражение"
+
+#: scripts/Dpkg/Changelog/Parse.pm
+#, fuzzy, perl-format
+#| msgid "cannot stat file %s"
+msgid "cannot seek into file %s"
+msgstr "не удалось выполнить функцию stat для файла %s"
+
+#: scripts/Dpkg/Changelog/Parse.pm
+#, fuzzy, perl-format
+#| msgid "changelog format %s is unknown"
+msgid "changelog format %s is unknown: %s"
+msgstr "неизвестный формат файла изменений %s"
+
+#: scripts/Dpkg/Changelog/Parse.pm
+#, fuzzy, perl-format
+#| msgid "changelog format %s is unknown"
+msgid "changelog format %s is not a Dpkg::Changelog class"
+msgstr "неизвестный формат файла изменений %s"
+
+#: scripts/Dpkg/Changelog/Parse.pm
+#, perl-format
+msgid "fatal error occurred while parsing %s"
+msgstr "неустранимая ошибка при анализе %s"
+
+#: scripts/Dpkg/Changelog/Parse.pm
+#, fuzzy, perl-format
+#| msgid "unknown option or argument %s"
+msgid "unknown output format %s"
+msgstr "неизвестный параметр или аргумент %s"
+
+#: scripts/Dpkg/Checksums.pm
+#, perl-format
+msgid "cannot fstat file %s"
+msgstr "не удалось выполнить функцию fstat для файла %s"
+
+#: scripts/Dpkg/Checksums.pm
+#, perl-format
+msgid "file %s has size %u instead of expected %u"
+msgstr "файл %s имеет размер %u вместо ожидаемого %u"
+
+#: scripts/Dpkg/Checksums.pm
+#, perl-format
+msgid "file %s has checksum %s instead of expected %s (algorithm %s)"
+msgstr "файл %s имеет контрольную сумму %s вместо ожидаемой %s (алгоритм %s)"
+
+#: scripts/Dpkg/Checksums.pm
+#, perl-format
+msgid "invalid line in %s checksums string: %s"
+msgstr "неправильная строка в строковом значении контрольной суммы %s: %s"
+
+#: scripts/Dpkg/Checksums.pm
+#, perl-format
+msgid "conflicting checksums '%s' and '%s' for file '%s'"
+msgstr "несовпадение контрольных сумм «%s» и «%s» для файла «%s»"
+
+#: scripts/Dpkg/Checksums.pm
+#, perl-format
+msgid "conflicting file sizes '%u' and '%u' for file '%s'"
+msgstr "несовпадение размеров «%u» и «%u» для файла «%s»"
+
+#: scripts/Dpkg/Compression.pm
+#, perl-format
+msgid "compression threads %s is not a number"
+msgstr ""
+
+#: scripts/Dpkg/Compression/Process.pm
+#, perl-format
+msgid "%s is not a supported compression method"
+msgstr "неподдерживаемый метод сжатия %s"
+
+#: scripts/Dpkg/Compression/Process.pm
+msgid "Dpkg::Compression::Process can only start one subprocess at a time"
+msgstr ""
+"Dpkg::Compression::Process может запускать только один подпроцесс "
+"одновременно"
+
+#: scripts/Dpkg/Conf.pm
+#, perl-format
+msgid "short option not allowed in %s, line %d"
+msgstr "короткий параметр не разрешён в %s, строка %d"
+
+#: scripts/Dpkg/Conf.pm
+#, perl-format
+msgid "invalid syntax for option in %s, line %d"
+msgstr "синтаксическая ошибка в параметре у %s, строка %d"
+
+#: scripts/Dpkg/Control.pm
+msgid "general section of control info file"
+msgstr "общая секция управляющего информационного файла"
+
+#: scripts/Dpkg/Control.pm
+msgid "package's section of control info file"
+msgstr "секция пакета управляющего информационного файла"
+
+#: scripts/Dpkg/Control.pm
+msgid "parsed version of changelog"
+msgstr "получена версия changelog"
+
+#: scripts/Dpkg/Control.pm
+msgid "header stanza of copyright file"
+msgstr ""
+
+#: scripts/Dpkg/Control.pm
+msgid "files stanza of copyright file"
+msgstr ""
+
+#: scripts/Dpkg/Control.pm
+msgid "license stanza of copyright file"
+msgstr ""
+
+#: scripts/Dpkg/Control.pm
+#, fuzzy
+#| msgid "package's section of control info file"
+msgid "package's tests control file"
+msgstr "секция пакета управляющего информационного файла"
+
+#: scripts/Dpkg/Control.pm
+#, fuzzy, perl-format
+#| msgid "entry in repository's %s file"
+msgid "repository's %s file"
+msgstr "элемент в файле репозитория %s"
+
+#: scripts/Dpkg/Control.pm
+#, fuzzy, perl-format
+#| msgid "entry in repository's %s file"
+msgid "stanza in repository's %s file"
+msgstr "элемент в файле репозитория %s"
+
+#: scripts/Dpkg/Control.pm
+#, perl-format
+msgid "%s file"
+msgstr "файл %s"
+
+#: scripts/Dpkg/Control.pm
+msgid "control info of a .deb package"
+msgstr "управляющая информация пакета .deb"
+
+#: scripts/Dpkg/Control.pm
+#, fuzzy
+#| msgid "control information"
+msgid "build information file"
+msgstr "управляющая информация"
+
+#: scripts/Dpkg/Control.pm
+msgid "vendor file"
+msgstr "файл производителя"
+
+#: scripts/Dpkg/Control.pm
+#, fuzzy
+#| msgid "entry in dpkg's status file"
+msgid "stanza in dpkg's status file"
+msgstr "элемент в файле состояния dpkg"
+
+#: scripts/Dpkg/Control/FieldsCore.pm
+#, perl-format
+msgid "unknown information field '%s' in input data in %s"
+msgstr "неизвестное информационное поле «%s» во входных данных в %s"
+
+#: scripts/Dpkg/Control/FieldsCore.pm
+msgid "control information"
+msgstr "управляющая информация"
+
+#: scripts/Dpkg/Control/HashCore.pm
+#, perl-format
+msgid "syntax error in %s at line %d: %s"
+msgstr "синтаксическая ошибка в %s в строке %d: %s"
+
+#: scripts/Dpkg/Control/HashCore.pm
+msgid "field cannot start with a hyphen"
+msgstr "поле не может начинаться с дефиса"
+
+#: scripts/Dpkg/Control/HashCore.pm
+#, perl-format
+msgid "duplicate field %s found"
+msgstr "обнаружено повторение поля %s"
+
+#: scripts/Dpkg/Control/HashCore.pm
+msgid "continued value line not in field"
+msgstr "продолжение строки значения не в поле"
+
+#: scripts/Dpkg/Control/HashCore.pm
+#, fuzzy
+#| msgid "expected OpenPGP signature, found EOF after blank line"
+msgid "expected OpenPGP signature, found end of file after blank line"
+msgstr "ожидалась подпись OpenPGP, найден EOF после пустой строки"
+
+#: scripts/Dpkg/Control/HashCore.pm
+#, perl-format
+msgid "expected OpenPGP signature, found something else '%s'"
+msgstr "ожидалась подпись OpenPGP, найдено что-то другое «%s»"
+
+#: scripts/Dpkg/Control/HashCore.pm
+msgid "unfinished OpenPGP signature"
+msgstr "незаконченная подпись OpenPGP"
+
+#: scripts/Dpkg/Control/HashCore.pm
+msgid "OpenPGP signature not allowed here"
+msgstr "подпись OpenPGP здесь не допускается"
+
+#: scripts/Dpkg/Control/HashCore.pm
+msgid "line with unknown format (not field-colon-value)"
+msgstr "строка неизвестного формата (не поле-двоеточие-значение)"
+
+#: scripts/Dpkg/Control/HashCore.pm
+msgid "write error on control data"
+msgstr "ошибка записи управляющих данных"
+
+#: scripts/Dpkg/Control/Info.pm
+#, fuzzy, perl-format
+#| msgid "first block lacks a source field"
+msgid "first stanza lacks a '%s' field"
+msgstr "в первом блоке отсутствует поле исходника"
+
+#: scripts/Dpkg/Control/Info.pm
+#, fuzzy, perl-format
+#| msgid "block lacks the '%s' field"
+msgid "stanza lacks the '%s' field"
+msgstr "в блоке отсутствует поле «%s»"
+
+#: scripts/Dpkg/Control/Tests/Entry.pm
+#, fuzzy, perl-format
+#| msgid "block lacks the '%s' field"
+msgid "stanza lacks either %s or %s fields"
+msgstr "в блоке отсутствует поле «%s»"
+
+#: scripts/Dpkg/Deps.pm
+#, perl-format
+msgid "can't parse dependency %s"
+msgstr "не удалось проанализировать зависимость %s"
+
+#: scripts/Dpkg/Deps.pm
+#, fuzzy, perl-format
+#| msgid "invalid dependency got generated: %s"
+msgid "virtual dependency contains invalid relation: %s"
+msgstr "при генерации получена неверная зависимость: %s"
+
+#: scripts/Dpkg/Deps.pm
+msgid "an union dependency can only contain simple dependencies"
+msgstr "в объединяющей зависимости могут быть только простые зависимости"
+
+#: scripts/Dpkg/Dist/Files.pm
+#, fuzzy, perl-format
+#| msgid "badly formed line in files list file, line %d"
+msgid "badly formed file name in files list file, line %d"
+msgstr "неверный формат строки в файле со списком файлов, строка %d"
+
+#: scripts/Dpkg/Dist/Files.pm
+#, perl-format
+msgid "badly formed line in files list file, line %d"
+msgstr "неверный формат строки в файле со списком файлов, строка %d"
+
+#: scripts/Dpkg/Dist/Files.pm
+#, perl-format
+msgid "duplicate files list entry for file %s (line %d)"
+msgstr "повторная запись в списке файлов для файла %s (строка %d)"
+
+#: scripts/Dpkg/Dist/Files.pm
+#, fuzzy, perl-format
+#| msgid "cannot create directory %s"
+msgid "cannot open directory %s"
+msgstr "не удалось создать каталог %s"
+
+#: scripts/Dpkg/Dist/Files.pm
+#, fuzzy, perl-format
+#| msgid "invalid flag in %s: %s"
+msgid "invalid filename %s"
+msgstr "неправильный флаг в %s: %s"
+
+#: scripts/Dpkg/ErrorHandling.pm
+msgid "info"
+msgstr "инфо"
+
+#: scripts/Dpkg/ErrorHandling.pm
+msgid "notice"
+msgstr ""
+
+#: scripts/Dpkg/ErrorHandling.pm
+msgid "warning"
+msgstr "предупреждение"
+
+#: scripts/Dpkg/ErrorHandling.pm
+msgid "error"
+msgstr "ошибка"
+
+#: scripts/Dpkg/ErrorHandling.pm
+#, fuzzy, perl-format
+#| msgid "%s gave error exit status %s"
+msgid "%s subprocess returned exit status %d"
+msgstr "%s возвратил код ошибки %s"
+
+#: scripts/Dpkg/ErrorHandling.pm
+#, perl-format
+msgid "%s subprocess was killed by signal %d"
+msgstr ""
+
+#: scripts/Dpkg/ErrorHandling.pm
+#, fuzzy, perl-format
+#| msgid "%s failed with unknown exit code %d"
+msgid "%s subprocess failed with unknown status code %d"
+msgstr "%s завершился неудачно с неизвестным кодом выхода %d"
+
+#: scripts/Dpkg/ErrorHandling.pm
+msgid "Use --help for program usage information."
+msgstr ""
+"Для получения информации по использованию программы используйте параметр --"
+"help."
+
+#: scripts/Dpkg/File.pm
+#, fuzzy, perl-format
+#| msgid "cannot stat file %s"
+msgid "cannot create file %s"
+msgstr "не удалось выполнить функцию stat для файла %s"
+
+#: scripts/Dpkg/IPC.pm
+#, perl-format
+msgid "pipe for %s"
+msgstr "вызов pipe для %s"
+
+#: scripts/Dpkg/IPC.pm
+#, perl-format
+msgid "chdir to %s"
+msgstr "вызов chdir в %s"
+
+#: scripts/Dpkg/IPC.pm
+msgid "reopen stdin"
+msgstr "повторное открытие stdin"
+
+#: scripts/Dpkg/IPC.pm
+msgid "reopen stdout"
+msgstr "повторное открытие stdout"
+
+#: scripts/Dpkg/IPC.pm
+msgid "child process"
+msgstr "дочерний процесс"
+
+#: scripts/Dpkg/IPC.pm
+#, perl-format
+msgid "wait for %s"
+msgstr "вызов wait для %s"
+
+#: scripts/Dpkg/IPC.pm
+#, perl-format
+msgid "%s didn't complete in %d second"
+msgid_plural "%s didn't complete in %d seconds"
+msgstr[0] "%s не завершится за %d секунду"
+msgstr[1] "%s не завершится за %d секунды"
+msgstr[2] "%s не завершится за %d секунд"
+
+#: scripts/Dpkg/Interface/Storable.pm
+msgid "<standard input>"
+msgstr "<стандартный ввод>"
+
+#: scripts/Dpkg/Lock.pm
+msgid "File::FcntlLock not available; using flock which is not NFS-safe"
+msgstr ""
+"File::FcntlLock недоступна; используется flock, которую небезопасно "
+"использовать при работе с NFS"
+
+#: scripts/Dpkg/Lock.pm
+#, perl-format
+msgid "failed to get a write lock on %s"
+msgstr "ошибка при получении блокировки %s на запись"
+
+#: scripts/Dpkg/OpenPGP.pm
+#, fuzzy, perl-format
+#| msgid "unknown option or argument %s"
+msgid "unknown OpenPGP api requested %s"
+msgstr "неизвестный параметр или аргумент %s"
+
+#: scripts/Dpkg/OpenPGP.pm
+#, fuzzy, perl-format
+#| msgid "cannot open file %s"
+msgid "cannot load OpenPGP backend %s"
+msgstr "не удалось открыть файл %s"
+
+#: scripts/Dpkg/OpenPGP.pm
+#, fuzzy, perl-format
+#| msgid "unknown option or argument %s"
+msgid "unknown OpenPGP backend %s"
+msgstr "неизвестный параметр или аргумент %s"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "success"
+msgstr ""
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+#, fuzzy
+#| msgid "cannot create pipe for %s"
+msgid "no acceptable signature found"
+msgstr "невозможно создать канал для %s"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "missing required argument"
+msgstr ""
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+#, fuzzy
+#| msgid "%s is not a supported compression"
+msgid "unsupported option"
+msgstr "неподдерживаемый метод сжатия %s"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "invalid data type"
+msgstr ""
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+#, fuzzy
+#| msgid "one to three arguments expected"
+msgid "non-text input where text expected"
+msgstr "ожидается от 1 до 3 аргументов"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "output file already exists"
+msgstr ""
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+#, fuzzy
+#| msgid "patch file '%s' doesn't exist"
+msgid "input file does not exist"
+msgstr "файл заплаты «%s» не существует"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "cannot unlock password-protected key"
+msgstr ""
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+#, fuzzy
+#| msgid "unsupported checksum '%s'"
+msgid "unsupported subcommand"
+msgstr "неподдерживаемая контрольная сумма «%s»"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "key is not signature-capable"
+msgstr ""
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "missing OpenPGP implementation"
+msgstr ""
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "specified key needs a keystore"
+msgstr ""
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+#, perl-format
+msgid "error code %d"
+msgstr ""
+
+#: scripts/Dpkg/Package.pm
+msgid "may not be empty string"
+msgstr "не может быть пустой строкой"
+
+#: scripts/Dpkg/Package.pm
+#, perl-format
+msgid "character '%s' not allowed"
+msgstr "символ «%s» запрещён"
+
+#: scripts/Dpkg/Package.pm
+msgid "must start with an alphanumeric character"
+msgstr "должно начинаться с латинской буквы или цифры"
+
+#: scripts/Dpkg/Path.pm scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "pathname '%s' cannot be canonicalized"
+msgstr ""
+
+#: scripts/Dpkg/Path.pm scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "pathname '%s' points outside source root (to '%s')"
+msgstr ""
+
+#: scripts/Dpkg/Shlibs.pm
+msgid ""
+"deprecated use of LD_LIBRARY_PATH with private library directory which "
+"interferes with cross-building, please use -l option instead"
+msgstr ""
+
+#: scripts/Dpkg/Shlibs.pm scripts/Dpkg/Shlibs/Objdump.pm
+#, fuzzy, perl-format
+#| msgid "cannot exec format parser: %s"
+msgid "unknown executable format in file '%s'"
+msgstr "не удалось запустить анализатор формата: %s"
+
+#: scripts/Dpkg/Shlibs/Objdump.pm
+#, perl-format
+msgid "couldn't parse dynamic relocation record: %s"
+msgstr "не удалось проанализировать запись динамического перераспределения: %s"
+
+#: scripts/Dpkg/Shlibs/Objdump.pm
+#, perl-format
+msgid "couldn't parse dynamic symbol definition: %s"
+msgstr "не удалось проанализировать определение динамического символа: %s"
+
+#: scripts/Dpkg/Shlibs/Symbol.pm
+#, perl-format
+msgid "symbol name unspecified: %s"
+msgstr "не задано имя символа: %s"
+
+#: scripts/Dpkg/Shlibs/Symbol.pm
+#, fuzzy, perl-format
+#| msgid "you can't use symver tag to catch unversioned symbols: %s"
+msgid "symver tag with versioned symbol will not match: %s"
+msgstr ""
+"вы не можете использовать метку symver для обнаружения неверсионных "
+"символов: %s"
+
+#: scripts/Dpkg/Shlibs/Symbol.pm
+#, perl-format
+msgid "you can't use symver tag to catch unversioned symbols: %s"
+msgstr ""
+"вы не можете использовать метку symver для обнаружения неверсионных "
+"символов: %s"
+
+#: scripts/Dpkg/Shlibs/SymbolFile.pm
+#, perl-format
+msgid "symbol information must be preceded by a header (file %s, line %s)"
+msgstr ""
+"символьная информация должна начинаться с заголовка (файл %s, строка %s)"
+
+#: scripts/Dpkg/Shlibs/SymbolFile.pm
+#, perl-format
+msgid "failed to parse line in %s: %s"
+msgstr "не удалось проанализировать строку в %s: %s"
+
+#: scripts/Dpkg/Shlibs/SymbolFile.pm
+#, perl-format
+msgid "failed to parse a line in %s: %s"
+msgstr "не удалось проанализировать строку в %s: %s"
+
+#: scripts/Dpkg/Shlibs/SymbolFile.pm
+#, perl-format
+msgid "tried to merge the same object (%s) twice in a symfile"
+msgstr "попытка объединить один объект (%s) дважды в файле символов"
+
+#: scripts/Dpkg/Shlibs/SymbolFile.pm
+msgid "cannot merge symbols from objects without SONAME"
+msgstr "не удалось объединить символы из объектов без SONAME"
+
+#: scripts/Dpkg/Source/Archive.pm
+msgid "write on tar input"
+msgstr "вызов write для ввода tar"
+
+#: scripts/Dpkg/Source/Archive.pm
+msgid "close on tar input"
+msgstr "закрытие ввода tar"
+
+#: scripts/Dpkg/Source/Archive.pm scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot create directory %s"
+msgstr "не удалось создать каталог %s"
+
+#: scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "cannot get source pathname %s metadata"
+msgstr ""
+
+#: scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "cannot get target pathname %s metadata"
+msgstr ""
+
+#: scripts/Dpkg/Source/Archive.pm
+#, fuzzy, perl-format
+#| msgid "cannot create directory %s"
+msgid "cannot change directory %s mode"
+msgstr "не удалось создать каталог %s"
+
+#: scripts/Dpkg/Source/Archive.pm
+#, fuzzy, perl-format
+#| msgid "cannot create directory %s"
+msgid "cannot change directory %s times"
+msgstr "не удалось создать каталог %s"
+
+#: scripts/Dpkg/Source/Archive.pm
+#, fuzzy, perl-format
+#| msgid "cannot stat directory %s"
+msgid "cannot remove destination directory %s"
+msgstr "не удалось выполнить функцию stat для каталога %s"
+
+#: scripts/Dpkg/Source/Archive.pm
+#, fuzzy, perl-format
+#| msgid "cannot stat file %s"
+msgid "cannot remove destination file %s"
+msgstr "не удалось выполнить функцию stat для файла %s"
+
+#: scripts/Dpkg/Source/Archive.pm scripts/Dpkg/Source/Package.pm
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "cannot opendir %s"
+msgstr "не удалось выполнить opendir %s"
+
+#: scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "unable to rename %s to %s"
+msgstr "невозможно переименовать %s в %s"
+
+#: scripts/Dpkg/Source/Functions.pm
+#, perl-format
+msgid "cannot stat directory %s (before removal)"
+msgstr "не удалось выполнить функцию stat для каталога %s (перед удалением)"
+
+#: scripts/Dpkg/Source/Functions.pm
+#, fuzzy, perl-format
+#| msgid "unable to check for removal of dir `%s'"
+msgid "unable to check for removal of directory '%s'"
+msgstr "невозможно проверить удаление каталога «%s»"
+
+#: scripts/Dpkg/Source/Functions.pm
+#, perl-format
+msgid "rm -rf failed to remove '%s'"
+msgstr "при удалении «%s» команда rm -rf завершилась неудачно"
+
+#: scripts/Dpkg/Source/Functions.pm scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot change timestamp for %s"
+msgstr "не удалось изменить метку времени для %s"
+
+#: scripts/Dpkg/Source/Functions.pm
+#, perl-format
+msgid "cannot read timestamp from %s"
+msgstr "не удалось изменить метку времени из %s"
+
+#: scripts/Dpkg/Source/Functions.pm
+#, fuzzy, perl-format
+#| msgid "cannot open file %s"
+msgid "cannot open file %s for binary detection"
+msgstr "не удалось открыть файл %s"
+
+#: scripts/Dpkg/Source/BinaryFiles.pm
+#, perl-format
+msgid "adding %s to %s"
+msgstr "добавляется %s в %s"
+
+#: scripts/Dpkg/Source/BinaryFiles.pm
+#, perl-format
+msgid "unwanted binary file: %s"
+msgstr "нежелательный двоичный файл: %s"
+
+#: scripts/Dpkg/Source/BinaryFiles.pm
+#, perl-format
+msgid ""
+"detected %d unwanted binary file (add it in debian/source/include-binaries "
+"to allow its inclusion)."
+msgid_plural ""
+"detected %d unwanted binary files (add them in debian/source/include-"
+"binaries to allow their inclusion)."
+msgstr[0] ""
+"обнаружен %d нежелательный двоичный файл (чтобы разрешить включение, "
+"добавьте его в debian/source/include-binaries)."
+msgstr[1] ""
+"обнаружено %d нежелательных двоичных файла (чтобы разрешить включение, "
+"добавьте их в debian/source/include-binaries)."
+msgstr[2] ""
+"обнаружено %d нежелательных двоичных файлов (чтобы разрешить включение, "
+"добавьте их в debian/source/include-binaries)."
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "%s is not the name of a file"
+msgstr "%s не является именем файла"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "missing critical source control field %s"
+msgstr "отсутствует критическое управляющее поле исходников %s"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "source package format '%s' is not supported: %s"
+msgstr "формат пакета с исходным кодом «%s» не поддерживается: %s"
+
+#: scripts/Dpkg/Source/Package.pm
+msgid "source package uses only weak checksums"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package.pm
+#, fuzzy, perl-format
+#| msgid "source and version are required to compute the source basename"
+msgid "%s and %s fields are required to compute the source basename"
+msgstr "для определения базового имени исходника требуется исходник и версия"
+
+#: scripts/Dpkg/Source/Package.pm
+msgid "upstream tarball signatures but no upstream signing key"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package.pm
+#, fuzzy, perl-format
+#| msgid "applying %s"
+msgid "verifying %s"
+msgstr "накладывается %s"
+
+#: scripts/Dpkg/Source/Package.pm
+#, fuzzy, perl-format
+#| msgid "cannot stat file %s"
+msgid "cannot verify upstream tarball signature for %s: %s"
+msgstr "не удалось выполнить функцию stat для файла %s"
+
+#: scripts/Dpkg/Source/Package.pm
+#, fuzzy, perl-format
+#| msgid "cannot stat file %s"
+msgid "cannot verify inline signature for %s: %s"
+msgstr "не удалось выполнить функцию stat для файла %s"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "%s is not a valid option for %s"
+msgstr "%s не является допустимым параметром для %s"
+
+#: scripts/Dpkg/Source/Package.pm
+#, fuzzy, perl-format
+#| msgid "cannot rename %s to %s"
+msgid "cannot copy %s to %s"
+msgstr "не удалось переименовать %s в %s"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "%s does not exist"
+msgstr "%s не существует"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "cannot make %s executable"
+msgstr "не удалось сделать %s исполняемым"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "%s is not a plain file"
+msgstr "%s не является простым файлом"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "'%s' is not supported by the source format '%s'"
+msgstr "«%s» не поддерживается форматом исходника %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, fuzzy
+#| msgid "write original source message"
+msgid "auto select original source"
+msgstr "запись оригинального исходного сообщения"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, fuzzy
+#| msgid "full upload (original source is included)"
+msgid "use packed original source (unpack and keep)"
+msgstr "закачка всего (с пакетом оригинального исходного кода)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, fuzzy
+#| msgid "full upload (original source is included)"
+msgid "use packed original source (unpack and remove)"
+msgstr "закачка всего (с пакетом оригинального исходного кода)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, fuzzy
+#| msgid "full upload (original source is included)"
+msgid "use unpacked original source (pack and keep)"
+msgstr "закачка всего (с пакетом оригинального исходного кода)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, fuzzy
+#| msgid "full upload (original source is included)"
+msgid "use unpacked original source (pack and remove)"
+msgstr "закачка всего (с пакетом оригинального исходного кода)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, fuzzy
+#| msgid "write original source message"
+msgid "trust packed and unpacked original sources are same"
+msgstr "запись оригинального исходного сообщения"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "there is no diff, do main tarfile only"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "like -sa, -sk, -sp, -su, -sr but may overwrite"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+msgid "abort if generated diff has upstream files changes"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "leave original source packed in current directory"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "do not copy original source to current directory"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, fuzzy
+#| msgid "write original source message"
+msgid "unpack original source tree too"
+msgstr "запись оригинального исходного сообщения"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "do not apply debian diff to upstream sources"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "-s%s option overrides earlier -s%s option"
+msgstr "параметр -s%s заменит ранее указанный параметр -s%s"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "source handling style -s%s not allowed with -x"
+msgstr "указывать обработчик исходников -s%s не разрешено вместе с -x"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "multiple tarfiles in v1.0 source package"
+msgstr "несколько tar-файлов в пакете с исходным кодом версии v1.0"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "unrecognized file for a %s source package: %s"
+msgstr "нераспознанный файл в пакете с исходным кодом %s: %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V3/Native.pm
+msgid "no tarfile in Files field"
+msgstr "нет tar-файла в поле Files"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "native package with .orig.tar"
+msgstr "родной пакет с .orig.tar"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "unable to rename '%s' to '%s'"
+msgstr "невозможно переименовать «%s» в «%s»"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+#, perl-format
+msgid "unpacking %s"
+msgstr "распаковывается %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "unable to keep orig directory (already exists)"
+msgstr "невозможно сохранить orig каталог (уже существует)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "failed to rename newly-extracted %s to %s"
+msgstr "отказ при переименовании только что извлечённого %s в %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "failed to rename saved %s to %s"
+msgstr "отказ при переименовании сохранённого %s в %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "applying %s"
+msgstr "накладывается %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "upstream files that have been modified: %s"
+msgstr "авторские файлы были изменены: %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "only supports gzip compression"
+msgstr "поддерживается только метод сжатия gzip"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid ""
+"-b takes at most a directory and an orig source argument (with v1.0 source "
+"package)"
+msgstr ""
+"значением параметра -b является только каталог и orig исходник (для "
+"исходника пакета v1.0)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "source handling style -s%s not allowed with -b"
+msgstr "тип работы с исходниками -s%s нельзя указывать вместе с -b"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "packed orig '%s' exists but is not a plain file"
+msgstr "упакованный orig «%s» существует, но не является простым файлом"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "cannot stat orig argument %s"
+msgstr "не удалось выполнить функцию stat для orig параметра %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid ""
+"orig argument is unpacked but source handling style -s%s calls for packed (."
+"orig.tar.<ext>)"
+msgstr ""
+"orig параметр распакован, но вызываются методы -s%s как для упакованных "
+"исходников (.orig.tar.<расш>)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid ""
+"orig argument is packed but source handling style -s%s calls for unpacked (."
+"orig/)"
+msgstr ""
+"orig параметр упакован, но вызываются методы -s%s как для распакованных "
+"исходников (.orig/)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "orig argument %s is not a plain file or directory"
+msgstr "orig параметр %s не является обычным файлом или каталогом"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid ""
+"orig argument is empty (means no orig, no diff) but source handling style -"
+"s%s wants something"
+msgstr ""
+"orig параметр пуст (то есть не orig и не diff), но указана команда что-то "
+"сделать -s%s"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "unpacked orig '%s' exists but is not a directory"
+msgstr "существует распакованный orig «%s», но не является каталогом"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "unable to stat putative unpacked orig '%s'"
+msgstr ""
+"невозможно выполнить функцию stat для предполагаемого распакованного orig "
+"«%s»"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V3/Quilt.pm
+msgid "non-native package version does not contain a revision"
+msgstr "в версии неродного пакета отсутствует ревизия"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V3/Native.pm
+msgid "native package version may not have a revision"
+msgstr "в версии родного пакета может отсутствовать ревизия"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "source directory '%s' is not <sourcepackage>-<upstreamversion> '%s'"
+msgstr ""
+"каталог исходников «%s» не в виде <пакет исходников>-<оригинальная версия> "
+"«%s»"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid ".orig directory name %s is not <package>-<upstreamversion> (wanted %s)"
+msgstr ""
+"имя каталога .orig %s не в виде <пакет>-<оригинальная версия> (требуется %s)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid ""
+".orig.tar name %s is not <package>_<upstreamversion>.orig.tar (wanted %s)"
+msgstr ""
+"имя .orig.tar %s не в виде <пакет>_<оригинальная версия>.orig.tar (требуется "
+"%s)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid ""
+"tarfile '%s' already exists, not overwriting, giving up; use -sU or -sR to "
+"override"
+msgstr ""
+"tar-файл «%s» уже существует, не перезаписывается, останов; используйте -sU "
+"или -sR для перезаписи"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "unable to check for existence of '%s'"
+msgstr "невозможно проверить существование «%s»"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V3/Native.pm
+#, perl-format
+msgid "unable to rename '%s' (newly created) to '%s'"
+msgstr "невозможно переименовать «%s» (недавно созданный) в «%s»"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+#: scripts/Dpkg/Source/Package/V3/Quilt.pm scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "unable to change permission of '%s'"
+msgstr "невозможно изменить права «%s»"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "building %s using existing %s"
+msgstr "сборка %s с использованием существующего %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+msgid "upstream signing key but no upstream tarball signature"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, fuzzy, perl-format
+#| msgid ""
+#| "orig dir `%s' already exists, not overwriting, giving up; use -sA, -sK or "
+#| "-sP to override"
+msgid ""
+"orig directory '%s' already exists, not overwriting, giving up; use -sA, -sK "
+"or -sP to override"
+msgstr ""
+"каталог orig «%s» уже существует, не перезаписан, останов; используйте -sA, -"
+"sK или -sP для перезаписи"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, fuzzy, perl-format
+#| msgid "unable to check for existence of orig dir `%s'"
+msgid "unable to check for existence of orig directory '%s'"
+msgstr "невозможно проверить существование orig каталога «%s»"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "the diff modifies the following upstream files: %s"
+msgstr "diff изменяет следующие авторские файлы: %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid ""
+"use the '3.0 (quilt)' format to have separate and documented changes to "
+"upstream files, see dpkg-source(1)"
+msgstr ""
+"используется формат «3.0 (quilt)» для разделения и описания изменений "
+"авторских файлов, см dpkg-source(1)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "aborting due to --abort-on-upstream-changes"
+msgstr "прерывание работы из-за --abort-on-upstream-changes"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+msgid "unrepresentable changes to source"
+msgstr "нехарактерные изменения в исходнике"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "include removed files in the patch"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "include timestamp in the patch"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "include binary files in the tarball"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, fuzzy
+#| msgid "fuzz is not allowed when applying patches"
+msgid "do not prepare build tree by applying patches"
+msgstr "при наложении заплат расхождения (fuzz) запрещены"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "do not unapply patches if previously applied"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "unapply patches if previously applied (default)"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "create an empty original tarball if missing"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "record generated patches, instead of aborting"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "do not extract debian tarball into upstream sources"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "do not apply patches at the end of the extraction"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "duplicate files in %s source package: %s"
+msgstr "повторение файла в пакете с исходным кодом %s: %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "missing orig.tar or debian.tar file in v2.0 source package"
+msgstr ""
+"отсутствует файл orig.tar или debian.tar в пакете с исходным кодом версии "
+"v2.0"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "mismatched orig.tar %s for signature %s in source package"
+msgstr "в пакете с исходным кодом не совпадает orig.tar %s с подписью %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "missing addon orig.tar for signature %s in source package"
+msgstr ""
+"в пакете с исходным кодом отсутствует дополнительный orig.tar для подписи %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "mismatched addon orig.tar %s for signature %s in source package"
+msgstr ""
+"в пакете с исходным кодом не совпадает дополнительный orig.tar %s с подписью "
+"%s"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "required removal of '%s' installed by original tarball"
+msgstr "требуется удаление «%s», установленного из оригинального tarball"
+
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "unapplying %s"
+msgstr "отмена наложений на %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "no upstream tarball found at %s"
+msgstr "авторский tarball не найден в %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "patches are not applied, applying them now"
+msgstr "заплаты не были наложены, делаем это сейчас"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "several orig.tar files found (%s and %s) but only one is allowed"
+msgstr "найдено несколько файлов orig.tar (%s и %s), но может быть только один"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "copy of the debian directory"
+msgstr "копирование каталога debian"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "local changes detected, the modified files are:"
+msgstr "обнаружены локальные изменения, изменённые файлы:"
+
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Package/V3/Bzr.pm
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+#, perl-format
+msgid "-b takes only one parameter with format '%s'"
+msgstr "значением параметра -b является только один аргумент в формате «%s»"
+
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot represent change to %s: %s"
+msgstr "не удалось представить изменение %s: %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Patch.pm
+msgid "binary file contents changed"
+msgstr "содержимое двоичного файла изменено"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid ""
+"add %s in debian/source/include-binaries if you want to store the modified "
+"binary in the debian tarball"
+msgstr ""
+"добавьте %s в debian/source/include-binaries, если хотите хранить изменённый "
+"двоичный файл в debian tarball"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid ""
+"Hint: make sure the version in debian/changelog matches the unpacked source "
+"tree"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "you can integrate the local changes with %s"
+msgstr "вы можете встроить локальные изменения в %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "aborting due to unexpected upstream changes, see %s"
+msgstr ""
+"прерывание работы из-за неожиданных изменений авторского кода, смотрите %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "local changes have been recorded in a new patch: %s"
+msgstr "локальные изменения были записаны в новую заплату: %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Package/V3/Quilt.pm
+#, perl-format
+msgid "cannot remove %s"
+msgstr "не удалось удалить %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Package/V3/Quilt.pm
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "failed to copy %s to %s"
+msgstr "копирование %s в %s завершилось с ошибкой"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "cannot register changes in %s, this patch already exists"
+msgstr ""
+"невозможно зарегистрировать изменения в %s, такая заплата уже существует"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "patch file '%s' doesn't exist"
+msgstr "файл заплаты «%s» не существует"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "there are no local changes to record"
+msgstr "нет локальных изменений для записи"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "Enter the desired patch name: "
+msgstr "Введите желаемое имя заплаты:"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "no patch name given; cannot proceed"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "cannot find an editor"
+msgstr "не удалось найти редактор"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+msgid "cannot unpack bzr-format source package because bzr is not in the PATH"
+msgstr ""
+"невозможно распаковать пакет с исходным кодом в формате bzr, так как bzr "
+"отсутствует в PATH"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+#, perl-format
+msgid ""
+"source directory is not the top directory of a bzr repository (%s/.bzr not "
+"present), but Format bzr was specified"
+msgstr ""
+"исходный каталог не является начальным каталогом репозитория bzr (нет %s/."
+"bzr), но указан Format bzr"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+#, perl-format
+msgid "%s is a symlink"
+msgstr "%s является символьной ссылкой"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+#, perl-format
+msgid "%s is a symlink to outside %s"
+msgstr "%s является символьной ссылкой вовне %s"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+msgid "doesn't contain a bzr repository"
+msgstr "не содержит репозитория bzr"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+msgid "bzr status exited nonzero"
+msgstr "команда bzr status завершилась с ненулевым кодом выхода"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "uncommitted, not-ignored changes in working directory: %s"
+msgstr ""
+"не сохранено в главный репозиторий, неигнорируемые изменения в рабочем "
+"каталоге: %s"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+#, fuzzy
+#| msgid "format v3.0 uses only one source file"
+msgid "format v3.0 (bzr) uses only one source file"
+msgstr "формат v3.0 используется только в файле исходнике"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+#, perl-format
+msgid "expected %s, got %s"
+msgstr "ожидалось %s, получено %s"
+
+#: scripts/Dpkg/Source/Package/V3/Custom.pm
+#, fuzzy
+#| msgid "unrecognized file for a native source package: %s"
+msgid "define the format of the generated source package"
+msgstr "нераспознанный файл для родного пакета с исходным кодом: %s"
+
+#: scripts/Dpkg/Source/Package/V3/Custom.pm
+msgid "Format '3.0 (custom)' is only used to create source packages"
+msgstr ""
+"Формат «3.0 (custom)» используется только для создания пакетов с исходным "
+"кодом"
+
+#: scripts/Dpkg/Source/Package/V3/Custom.pm
+msgid "no files indicated on command line"
+msgstr "нет файлов, указанных в командной строке"
+
+#: scripts/Dpkg/Source/Package/V3/Custom.pm
+msgid "--target-format option is missing"
+msgstr "отсутствует параметр --target-format"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "cannot unpack git-format source package because git is not in the PATH"
+msgstr ""
+"невозможно распаковать пакет с исходным кодом в формате git, так как git "
+"отсутствует в PATH"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid ""
+"source directory is not the top directory of a git repository (%s/.git not "
+"present), but Format git was specified"
+msgstr ""
+"исходный каталог не является начальным каталогом репозитория git (нет %s/."
+"git), но указан Format git"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "git repository %s uses submodules; this is not yet supported"
+msgstr ""
+"в репозитории git %s используются субмодули; это пока не поддерживается"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "specify a git <ref> to include in the git bundle"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, fuzzy
+#| msgid "creating shallow clone with depth %s"
+msgid "create a shallow clone with <number> depth"
+msgstr "создаётся поверхностный клон с глубиной %s"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "doesn't contain a git repository"
+msgstr "не содержит репозитория git"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "git ls-files exited nonzero"
+msgstr "команда git ls-files завершилась с ненулевым кодом выхода"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "creating shallow clone with depth %s"
+msgstr "создаётся поверхностный клон с глубиной %s"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "bundling: %s"
+msgstr "увязывание: %s"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "format v3.0 (git) uses only one .git file"
+msgstr "в формате v3.0 (git) используется только файл .git"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "format v3.0 (git) uses only one .gitshallow file"
+msgstr "в формате v3.0 (git) используется только файл .gitshallow"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "format v3.0 (git) unknown file: %s"
+msgstr "неизвестный файл для формата v3.0 (git): %s"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "format v3.0 (git) expected %s"
+msgstr "согласно формату v3.0 (git) ожидается %s"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "cloning %s"
+msgstr "клонируется %s"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "setting up shallow clone"
+msgstr "настройка поверхностного клона"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, fuzzy, perl-format
+#| msgid "unable to rename %s to %s"
+msgid "setting remote %s to %s"
+msgstr "невозможно переименовать %s в %s"
+
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+#, fuzzy
+#| msgid "multiple tarfiles in v1.0 source package"
+msgid "multiple tarfiles in native source package"
+msgstr "несколько tar-файлов в пакете с исходным кодом версии v1.0"
+
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+#, perl-format
+msgid "unrecognized file for a native source package: %s"
+msgstr "нераспознанный файл для родного пакета с исходным кодом: %s"
+
+#: scripts/Dpkg/Source/Package/V3/Quilt.pm
+msgid "use a single debianization patch"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V3/Quilt.pm
+msgid "accept quilt metadata <version> even if unknown"
+msgstr ""
+
+#: scripts/Dpkg/Source/Package/V3/Quilt.pm
+#, perl-format
+msgid "can't create symlink %s"
+msgstr "не удалось создать символьную ссылку %s"
+
+#: scripts/Dpkg/Source/Package/V3/Quilt.pm
+#, fuzzy, perl-format
+#| msgid "using options from %s: %s"
+msgid "using patch list from %s"
+msgstr "используются параметры из %s: %s"
+
+#: scripts/Dpkg/Source/Package/V3/Quilt.pm
+#, perl-format
+msgid "unsupported version of the quilt metadata: %s"
+msgstr "неподдерживаемая версия метаданных quilt: %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "file %s has no final newline (either original or modified version)"
+msgstr ""
+"файл %s не завершается символом новой строки (оригинальная или изменённая "
+"версия)"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "unknown line from diff -u on %s: '%s'"
+msgstr "неизвестная строка в выводе diff -u для %s: «%s»"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "failed to write"
+msgstr "не удалось записать"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff on %s"
+msgstr "вызов diff для %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot stat file %s"
+msgstr "не удалось выполнить функцию stat для файла %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot read link %s"
+msgstr "не удалось прочитать ссылку %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "device or socket is not allowed"
+msgstr "устройства или сокеты не разрешены"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "unknown file type"
+msgstr "неизвестный тип файла"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, fuzzy, perl-format
+#| msgid "ignoring deletion of directory %s"
+msgid "ignoring deletion of file %s"
+msgstr "игнорируется удаление каталога %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "ignoring deletion of file %s, use --include-removal to override"
+msgstr ""
+"игнорируется удаление файла %s, для преодоления используйте --include-removal"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "ignoring deletion of directory %s"
+msgstr "игнорируется удаление каталога %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "ignoring deletion of symlink %s"
+msgstr "игнорируется удаление символьной ссылки %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "newly created empty file '%s' will not be represented in diff"
+msgstr "недавно созданный пустой файл «%s» не будет включён в diff"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "executable mode %04o of '%s' will not be represented in diff"
+msgstr "права исполнения %04o для «%s» не будут включёны в diff"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "special mode %04o of '%s' will not be represented in diff"
+msgstr "специальные права %04o для «%s» не будут включёны в diff"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot represent change to %s:"
+msgstr "не удалось представить изменение %s:"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid " new version is %s"
+msgstr " новая версия %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid " old version is %s"
+msgstr " старая версия %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff %s patches file with C-style encoded filename"
+msgstr "файл заплат diff «%s» с именем в стиле C"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "expected ^--- in line %d of diff '%s'"
+msgstr "ожидается ^--- в строке %d в diff «%s»"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, fuzzy, perl-format
+#| msgid "diff `%s' patches file with name ending .dpkg-orig"
+msgid "diff '%s' patches file with name ending in .dpkg-orig"
+msgstr "файл заплаток diff «%s» с именем, оканчивающимся на .dpkg-orig"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff '%s' finishes in middle of ---/+++ (line %d)"
+msgstr "diff «%s» завершился в середине ---/+++ (строка %d)"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "line after --- isn't as expected in diff '%s' (line %d)"
+msgstr "строка после --- не та, что ожидалась в diff «%s» (строка %d)"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "none of the filenames in ---/+++ are valid in diff '%s' (line %d)"
+msgstr "все имена файлов в ---/+++ некорректны в diff «%s» (строка %d)"
+
+#: scripts/Dpkg/Source/Patch.pm scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "%s contains an insecure path: %s"
+msgstr "%s содержит небезопасный путь: %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff %s modifies file %s through a symlink: %s"
+msgstr "diff %s изменяет файл %s через символьную ссылку: %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "original and modified files are /dev/null in diff '%s' (line %d)"
+msgstr ""
+"оригинальный и изменённый файлы равны /dev/null для diff «%s» (строка %d)"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "file removal without proper filename in diff '%s' (line %d)"
+msgstr "удаление файла без правильного имени файла в diff «%s» (строка %d)"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff %s removes a non-existing file %s (line %d)"
+msgstr "diff %s удаляет несуществующий файл %s (строка %d)"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff '%s' patches something which is not a plain file"
+msgstr "diff «%s» латает что-то не являющееся простым файлом"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid ""
+"diff '%s' patches files multiple times; split the diff in multiple files or "
+"merge the hunks into a single one"
+msgstr ""
+
+#: scripts/Dpkg/Source/Patch.pm
+#, fuzzy, perl-format
+#| msgid "diff '%s' patches file %s twice"
+msgid "diff '%s' patches file %s more than once"
+msgstr "diff «%s» латает файл %s дважды"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "unexpected end of diff '%s'"
+msgstr "неожиданный конец diff «%s»"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "expected [ +-] at start of line %d of diff '%s'"
+msgstr "ожидается [ +-] в начале строки %d в diff «%s»"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "expected ^@@ at line %d of diff '%s'"
+msgstr "ожидается ^@@ в строке %d в diff «%s»"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff '%s' doesn't contain any patch"
+msgstr "diff «%s» не содержит заплатки"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "remove patch backup file %s"
+msgstr "удаление резервной копии заплатки %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "nonexistent"
+msgstr "несуществующий"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "plain file"
+msgstr "простой файл"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "directory"
+msgstr "каталог"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "symlink to %s"
+msgstr "символьная ссылка на %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "block device"
+msgstr "блочное устройство"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "character device"
+msgstr "символьное устройство"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "named pipe"
+msgstr "именованный канал"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "named socket"
+msgstr "именованный сокет"
+
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "cannot mkdir %s"
+msgstr "не удалось выполнить mkdir %s"
+
+#: scripts/Dpkg/Source/Quilt.pm
+msgid "the patch has fuzz which is not allowed, or is malformed"
+msgstr ""
+"заплата содержит неточность (fuzz), что запрещено, или имеет некорректный "
+"формат"
+
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "if patch '%s' is correctly applied by quilt, use '%s' to update it"
+msgstr ""
+"если заплата «%s» корректно накладывается quilt, используйте «%s» для её "
+"обновления"
+
+#: scripts/Dpkg/Source/Quilt.pm
+msgid ""
+"if the file is present in the unpacked source, make sure it is also present "
+"in the orig tarball"
+msgstr ""
+
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "%s should be a directory or non-existing"
+msgstr "%s должен быть каталогом или не существовать"
+
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "%s should be a file or non-existing"
+msgstr "%s должен быть файлом или не существовать"
+
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid ""
+"the series file (%s) contains unsupported options ('%s', line %s); dpkg-"
+"source might fail when applying patches"
+msgstr ""
+"файл series (%s) содержит неподдерживаемые параметры («%s», строка %s), у "
+"dpkg-source может не получиться наложить заплаты"
+
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "restoring quilt backup files for %s"
+msgstr "восстановление резервных копий файлов quilt для %s"
+
+#: scripts/Dpkg/Substvars.pm
+#, perl-format
+msgid "bad line in substvars file %s at line %d"
+msgstr "неправильная строка в файле подстановок %s у строки %d"
+
+#: scripts/Dpkg/Substvars.pm
+#, fuzzy, perl-format
+#| msgid "source version"
+msgid "invalid source version %s"
+msgstr "версия исходного кода"
+
+#: scripts/Dpkg/Substvars.pm
+#, perl-format
+msgid "too many substitutions - recursive ? - in '%s'"
+msgstr "слишком много подстановок (рекурсия?) в «%s»"
+
+#: scripts/Dpkg/Substvars.pm
+#, fuzzy, perl-format
+#| msgid "unused substitution variable ${%s}"
+msgid "obsolete substitution variable ${%s}"
+msgstr "неиспользуемая подстановочная переменная ${%s}"
+
+#: scripts/Dpkg/Substvars.pm
+#, fuzzy, perl-format
+#| msgid "unused substitution variable ${%s}"
+msgid "substitution variable ${%s} used, but is not defined"
+msgstr "неиспользуемая подстановочная переменная ${%s}"
+
+#: scripts/Dpkg/Substvars.pm
+#, fuzzy, perl-format
+#| msgid "unused substitution variable ${%s}"
+msgid "substitution variable ${%s} unused, but is defined"
+msgstr "неиспользуемая подстановочная переменная ${%s}"
+
+#: scripts/Dpkg/Vars.pm
+#, perl-format
+msgid "source package name '%s' is illegal: %s"
+msgstr "имя пакета с исходным кодом «%s» некорректно: %s"
+
+#: scripts/Dpkg/Vars.pm
+#, perl-format
+msgid "source package has two conflicting values - %s and %s"
+msgstr "пакет с исходным кодом содержит два конфликтующих значения: %s и %s"
+
+#: scripts/Dpkg/Vendor.pm
+#, perl-format
+msgid ""
+"%s origin filename is deprecated; it should have only alphanumeric or dash "
+"characters"
+msgstr ""
+
+#: scripts/Dpkg/Vendor.pm
+#, perl-format
+msgid ""
+"%s module name is deprecated; it should be capitalized with only "
+"alphanumeric characters"
+msgstr ""
+
+#: scripts/Dpkg/Vendor/Debian.pm
+#, perl-format
+msgid "unknown host architecture '%s'"
+msgstr "неизвестная архитектура узла «%s»"
+
+#: scripts/Dpkg/Vendor/Ubuntu.pm
+msgid ""
+"Version number suggests Ubuntu changes, but Maintainer: does not have Ubuntu "
+"address"
+msgstr ""
+"Номер Version предполагает изменения Ubuntu, но в Maintainer: нет адреса "
+"Ubuntu"
+
+#: scripts/Dpkg/Vendor/Ubuntu.pm
+msgid ""
+"Version number suggests Ubuntu changes, but there is no XSBC-Original-"
+"Maintainer field"
+msgstr ""
+"Номер Version предполагает изменения Ubuntu, но нет поля XSBC-Original-"
+"Maintainer"
+
+#: scripts/Dpkg/Version.pm
+#, perl-format
+msgid "%s is not a valid version"
+msgstr "%s не является допустимой версией"
+
+#: scripts/Dpkg/Version.pm
+msgid "version number cannot be empty"
+msgstr "номер версии не может быть пустым"
+
+#: scripts/Dpkg/Version.pm
+#, fuzzy
+#| msgid "epoch part of the version number is not a number: '%s'"
+msgid "epoch part of the version number cannot be empty"
+msgstr "часть эпохи в номере версии не является числом: «%s»"
+
+#: scripts/Dpkg/Version.pm
+#, fuzzy
+#| msgid "version number cannot be empty"
+msgid "upstream version cannot be empty"
+msgstr "номер версии не может быть пустым"
+
+#: scripts/Dpkg/Version.pm
+#, fuzzy
+#| msgid "version number cannot be empty"
+msgid "revision cannot be empty"
+msgstr "номер версии не может быть пустым"
+
+#: scripts/Dpkg/Version.pm
+msgid "version number does not start with digit"
+msgstr "номер версии не может начинаться с цифры"
+
+#: scripts/Dpkg/Version.pm
+#, perl-format
+msgid "version number contains illegal character '%s'"
+msgstr "номер версии содержит недопустимый символ «%s»"
+
+#: scripts/Dpkg/Version.pm
+#, perl-format
+msgid "epoch part of the version number is not a number: '%s'"
+msgstr "часть эпохи в номере версии не является числом: «%s»"
+
+#, fuzzy, perl-format
+#~| msgid "cannot exec dpkg"
+#~ msgid "cannot execute %s program"
+#~ msgstr "не удалось запустить dpkg"
+
+#, fuzzy, perl-format
+#~| msgid "cannot stat file %s"
+#~ msgid "cannot write signature file %s"
+#~ msgstr "не удалось выполнить функцию stat для файла %s"
+
+#, fuzzy, perl-format
+#~| msgid "could not verify signature on %s since gpg isn't installed"
+#~ msgid "cannot import key in %s since GnuPG is not installed"
+#~ msgstr "невозможно проверить подпись для %s, так как gpg не установлена"
+
+#, fuzzy, perl-format
+#~| msgid "cannot rename %s to %s"
+#~ msgid "cannot import key %s into %s"
+#~ msgstr "не удалось переименовать %s в %s"
+
+#, fuzzy, perl-format
+#~| msgid "could not verify signature on %s since gpg isn't installed"
+#~ msgid "cannot verify signature on %s since GnuPG is not installed"
+#~ msgstr "невозможно проверить подпись для %s, так как gpg не установлена"
+
+#, fuzzy, perl-format
+#~| msgid "building %s using existing %s"
+#~ msgid "verifying %s using existing %s"
+#~ msgstr "сборка %s с использованием существующего %s"
+
+#~ msgid "dpkg-genchanges"
+#~ msgstr "dpkg-genchanges"
+
+#, fuzzy, perl-format
+#~| msgid "failed to parse line in %s: %s"
+#~ msgid "failed to import key in %s"
+#~ msgstr "не удалось проанализировать строку в %s: %s"
+
+#, perl-format
+#~ msgid "failed to verify signature on %s"
+#~ msgstr "проверка подписи для %s завершилась неудачно"
+
+#~ msgid "error occurred while parsing %s"
+#~ msgstr "ошибка при анализе %s"
+
+#~ msgid "error occurred while parsing %s field: %s"
+#~ msgstr "ошибка при анализе поля %s: %s"
+
+#~ msgid "'%s' is not a legal architecture string"
+#~ msgstr "«%s» не является разрешённой строкой архитектуры"
+
+#, fuzzy
+#~| msgid "badly formed line in files list file, line %d"
+#~ msgid "badly formed package name in files list file, line %d"
+#~ msgstr "неверный формат строки в файле со списком файлов, строка %d"
+
+#~ msgid ""
+#~ "binary package stanza %s is using an obsolete Build-Profiles field syntax"
+#~ msgstr ""
+#~ "в строке о двоичном пакете %s используется устаревший синтаксис поля "
+#~ "Build-Profiles"
+
+#~ msgid "format variant must be in lowercase"
+#~ msgstr "символы варианта формата должны быть строчными"
+
+#~ msgid "invalid Format field '%s'"
+#~ msgstr "неправильное поле Format «%s»"
+
+#~ msgid "cannot create pipe for %s"
+#~ msgstr "невозможно создать канал для %s"
+
+#~ msgid "tail of %s"
+#~ msgstr "конец %s"
+
+#~ msgid "unknown substitution variable ${%s}"
+#~ msgstr "неизвестная подстановочная переменная ${%s}"
+
+#~ msgid "%s died from signal %s"
+#~ msgstr "%s завершился по сигналу %s"
+
+#~ msgid "'hardening' flag found but 'hardening-wrapper' not installed"
+#~ msgstr "найден флаг «hardening», но «hardening-wrapper» не установлен"
+
+#~ msgid "overriding %s in environment: %s"
+#~ msgstr "в окружении заменяется %s: %s"
+
+#~ msgid "failed to sign .dsc and .changes file"
+#~ msgstr "отказ при подписывании файлов .dsc и .changes"
+
+#, fuzzy
+#~| msgid "illegal package name '%s': %s"
+#~ msgid "illegal .buildinfo ID '%s': %s"
+#~ msgstr "недопустимое имя пакета «%s»: %s"
+
+#~ msgid "cannot open new output control file '%s'"
+#~ msgstr "не удалось открыть новый выходной управляющий файл %s"
+
+#~ msgid "deprecated substitution variable ${%s}"
+#~ msgstr "устаревшая подстановочная переменная ${%s}"
+
+#, fuzzy
+#~| msgid "Usage: %s [<option>...] [<control-file>]"
+#~ msgid "Usage: %s [<option>...] [<changelog-file>]"
+#~ msgstr "Использование: %s [<параметр>...] <управ.файл>"
+
+#, fuzzy
+#~| msgid ""
+#~| "Parser options:\n"
+#~| " --format <output-format> see man page for list of available\n"
+#~| " output formats, defaults to 'dpkg'\n"
+#~| " for compatibility with dpkg-dev\n"
+#~| " --since <version>, include all changes later than version\n"
+#~| " -s<version>, -v<version>\n"
+#~| " --until <version>, include all changes earlier than "
+#~| "version\n"
+#~| " -u<version>\n"
+#~| " --from <version>, include all changes equal or later\n"
+#~| " -f<version> than version\n"
+#~| " --to <version>, -t<version> include all changes up to or equal\n"
+#~| " than version\n"
+#~| " --count <number>, include <number> entries from the top\n"
+#~| " -c<number>, -n<number> (or the tail if <number> is lower than "
+#~| "0)\n"
+#~| " --offset <number>, change the starting point for --count,\n"
+#~| " -o<number> counted from the top (or the tail if\n"
+#~| " <number> is lower than 0)\n"
+#~| " --all include all changes\n"
+#~ msgid ""
+#~ "Options:\n"
+#~ " --file <file> changelog <file> to parse (defaults to '-').\n"
+#~ " -l, --label <file> changelog <file> name to use in error "
+#~ "messages.\n"
+#~ " --format <output-format>\n"
+#~ " set the output format (defaults to 'dpkg').\n"
+#~ " --all include all changes.\n"
+#~ " -s, --since <version> include all changes later than <version>.\n"
+#~ " -v <version> ditto.\n"
+#~ " -u, --until <version> include all changes earlier than <version>.\n"
+#~ " -f, --from <version> include all changes equal or later than "
+#~ "<version>.\n"
+#~ " -t, --to <version> include all changes up to or equal than "
+#~ "<version>.\n"
+#~ " -c, --count <number> include <number> entries from the top (or tail "
+#~ "if\n"
+#~ " <number> is lower than 0).\n"
+#~ " -n <number> ditto.\n"
+#~ " -o, --offset <number> change starting point for --count, counted "
+#~ "from\n"
+#~ " the top (or tail if <number> is lower than "
+#~ "0).\n"
+#~ " -?, --help print usage information.\n"
+#~ " -V, --version print version information.\n"
+#~ msgstr ""
+#~ "Параметры анализатора:\n"
+#~ " --format <формат-вывода> в справочной странице есть список "
+#~ "возможных\n"
+#~ " выходных форматов, по умолчанию исп. "
+#~ "«dpkg»\n"
+#~ " для совместимости с dpkg-dev\n"
+#~ " --since <версия> включить все изменения после этой версии\n"
+#~ " s<версия>, -v <версия>\n"
+#~ " --until <версия> включить все изменения до этой версии\n"
+#~ " -u<версия>\n"
+#~ " --from <версия> включить изменения этой и всех поздних версий\n"
+#~ " -f<версия>\n"
+#~ " --to<версия> включить все изменения до этой версии "
+#~ "включительно\n"
+#~ " -t<версия>\n"
+#~ " --count <число> включить <число> записей от начала\n"
+#~ " -c<число>, -n <число> (или конца, если <число> отрицательное)\n"
+#~ " --offset <число> изменить начальную точку для --count,\n"
+#~ " -o<число> отсчитывать от начала (или конца, если\n"
+#~ " <число> отрицательное)\n"
+#~ " --all включить все изменения\n"
+
+#~ msgid "output format %s not supported"
+#~ msgstr "выходной формат %s не поддерживается"
+
+#~ msgid "more than one file specified (%s and %s)"
+#~ msgstr "указано более одного файла (%s и %s)"
+
+#~ msgid "format parser %s not executable"
+#~ msgstr "анализатор формата %s не является исполняемым файлом"
+
+#~ msgid "output of changelog parser"
+#~ msgstr "вывод анализатора файла изменений"
+
+#~ msgid "changelog parser %s"
+#~ msgstr "анализатор файла изменений %s"
+
+#~ msgid "'%s' is not a legal architecture string."
+#~ msgid_plural "'%s' are not legal architecture strings."
+#~ msgstr[0] "Неправильная строка архитектуры «%s»."
+#~ msgstr[1] "Неправильные строки архитектуры «%s»."
+#~ msgstr[2] "Неправильные строки архитектуры «%s»."
+
+#~ msgid ""
+#~ "More options are available but they depend on the source package format.\n"
+#~ "See dpkg-source(1) for more info."
+#~ msgstr ""
+#~ "Также, есть ещё параметры, но они привязаны к формату пакета\n"
+#~ "исходного кода. Подробней см. в dpkg-source(1)."
+
+#~ msgid "couldn't open %s for reading"
+#~ msgstr "не удалось открыть %s на чтение"
+
+#, fuzzy
+#~| msgid "error closing %s ($? %d, $! '%s')"
+#~ msgid "error closing %s (%s)"
+#~ msgstr "ошибка при закрытии %s ($? %d, $! «%s»)"
+
+#~ msgid "couldn't parse date %s"
+#~ msgstr "не удалось выполнить анализ даты %s"
+
+#~ msgid "%s: unrepresentable changes to source"
+#~ msgstr "%s: нехарактерные изменения в исходнике"
+
+#~ msgid "open new substvars file '%s'"
+#~ msgstr "открытие нового файла подстановок «%s»"
+
+#~ msgid "open old varlist file '%s' for reading"
+#~ msgstr "открытие старого файла со списком переменных «%s» на чтение"
+
+#~ msgid "copy old entry to new varlist file '%s'"
+#~ msgstr "копирование старой записи в новый файл со списком переменных «%s»"
+
+#~ msgid ""
+#~ "this is currently a non-fatal warning with -S, but will probably become "
+#~ "fatal in the future"
+#~ msgstr ""
+#~ "в данный момент с -S это только предупреждение но, вероятно, в будущем "
+#~ "это станет ошибкой"
+
+#~ msgid "read changesdescription"
+#~ msgstr "чтение описания изменений"
+
+#~ msgid "chdir for du to `%s'"
+#~ msgstr "вызов chdir для du в «%s»"
+
+#~ msgid "du in `%s'"
+#~ msgstr "вызов du в «%s»"
+
+#~ msgid "du gave unexpected output `%s'"
+#~ msgstr "du выдала неожиданные данные «%s»"
+
+#~ msgid "used that one and ignored data from %s!"
+#~ msgstr "используется данный файл и игнорируются данные из %s!"
+
+#~ msgid "package %s (filename %s) is repeat;"
+#~ msgstr "повторение пакета %s (файл %s);"
+
+#~ msgid ""
+#~ "Usage: %s [<option>...] [<changelogfile>]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -?, --help print usage information\n"
+#~ " --version, -V print version information\n"
+#~ " --label, -l <file> name of the changelog file to\n"
+#~ " use in error messages\n"
+#~ " --file <file> changelog file to parse, defaults\n"
+#~ " to '-' (standard input)\n"
+#~ " --format <outputformat> see man page for list of available\n"
+#~ " output formats, defaults to 'dpkg'\n"
+#~ " for compatibility with dpkg-dev\n"
+#~ " --since, -s, -v <version> include all changes later than version\n"
+#~ " --until, -u <version> include all changes earlier than version\n"
+#~ " --from, -f <version> include all changes equal or later\n"
+#~ " than version\n"
+#~ " --to, -t <version> include all changes up to or equal\n"
+#~ " than version\n"
+#~ " --count, -c, -n <number> include <number> entries from the top\n"
+#~ " (or the tail if <number> is lower than "
+#~ "0)\n"
+#~ " --offset, -o <number> change the starting point for --count,\n"
+#~ " counted from the top (or the tail if\n"
+#~ " <number> is lower than 0)\n"
+#~ " --all include all changes\n"
+#~ msgstr ""
+#~ "Использование: %s [<параметр>...] [<файл-изм>]\n"
+#~ "\n"
+#~ "Параметры:\n"
+#~ " -?, --help показать это сообщение\n"
+#~ " --version, -V показать версию\n"
+#~ " --label, -l <файл> название файла изменений\n"
+#~ " для показа в сообщениях об ошибке\n"
+#~ " --file <файл> анализируемый файл изменений, по "
+#~ "умолчанию\n"
+#~ " используется «-» (стандартный входной "
+#~ "поток)\n"
+#~ " --format <формат-вывода> в справочной странице есть список "
+#~ "возможных\n"
+#~ " выходных форматов, по умолчанию исп. "
+#~ "«dpkg»\n"
+#~ " для совместимости с dpkg-dev\n"
+#~ " --since, -s, -v <версия> включить все изменения после этой версии\n"
+#~ " --until, -u <версия> включить все изменения до этой версии\n"
+#~ " --from, -f <версия> включить изменения этой и всех поздних\n"
+#~ " версий\n"
+#~ " --to, -t <версия> включить все изменения до этой версии\n"
+#~ " включительно\n"
+#~ " --count, -c, -n <число> включить <число> записей от начала\n"
+#~ " (или конца, если <число> отрицательное)\n"
+#~ " --offset, -o <число> изменить начальную точку для --count,\n"
+#~ " отсчитывать от начала (или конца, если\n"
+#~ " <число> отрицательное)\n"
+#~ " --all включить все изменения\n"
+
+#~ msgid "checksum program gave bogus output `%s'"
+#~ msgstr ""
+#~ "программа проверки контрольной суммы выдала фиктивный результат «%s»"
+
+#~ msgid ""
+#~ "Options passed to dpkg-architecture:\n"
+#~ " -a<arch> Debian architecture we build for.\n"
+#~ " -t<system> set GNU system type."
+#~ msgstr ""
+#~ "Параметры, передаваемые dpkg-architecture:\n"
+#~ " -a<архит> архитектура Debian, под которую выполняется сборка\n"
+#~ " -t<система> задать тип системы GNU"
+
+#, fuzzy
+#~| msgid ""
+#~| "Options:\n"
+#~| " -a<debian-arch> set current Debian architecture.\n"
+#~| " -t<gnu-system> set current GNU system type.\n"
+#~| " -L list valid architectures.\n"
+#~| " -f force flag (override variables set in environment)."
+#~ msgid ""
+#~ "Options:\n"
+#~ " -a<debian-arch> set current Debian architecture.\n"
+#~ " -t<gnu-system> set current GNU system type.\n"
+#~ " -f force flag (override variables set in environment)."
+#~ msgstr ""
+#~ "Параметры:\n"
+#~ " -a<debian-arch> задать текущую архитектуру Debian\n"
+#~ " -t<gnu-system> задать GNU тип системы\n"
+#~ " -L показать список допустимых архитектур\n"
+#~ " -f флаг принуждения (заменить значения переменных,\n"
+#~ " установленных в окружении)"
+
+#~ msgid ""
+#~ "need a command (-x, -b, --before-build, --after-build, --print-format, --"
+#~ "commit)"
+#~ msgstr ""
+#~ "необходима команда (-x, -b, --before-build, --after-build, --print-"
+#~ "format, --commit)"
+
+#~ msgid "only one of -x, -b or --print-format allowed, and only once"
+#~ msgstr "разрешено что-то одно: -x, -b или --print-format и только один раз"
+
+#~ msgid "binary-only upload - not including any source code"
+#~ msgstr "закачка только двоичных пакетов, без пакетов исходных кодов"
+
+#, fuzzy
+#~| msgid "diff `%s' patches file with name ending .dpkg-orig"
+#~ msgid "diff %s patches file with unknown escape sequence \\%s"
+#~ msgstr "файл заплаток diff «%s» с именем, оканчивающимся на .dpkg-orig"
+
+#~ msgid "open new files list file"
+#~ msgstr "открытие нового файла со списком файлов"
+
+#~ msgid "copy old entry to new files list file"
+#~ msgstr "копирование старой записи в новый файл со списком файлов"
+
+#~ msgid "read old files list file"
+#~ msgstr "чтение старого файла со списком файлов"
+
+#~ msgid "write new entry to new files list file"
+#~ msgstr "запись новой записи в новый файл со списком файлов"
+
+#~ msgid "close new files list file"
+#~ msgstr "закрытие нового файла со списком файлов"
+
+#~ msgid "cannot read files list file"
+#~ msgstr "не удалось прочитать файл со списком файлов"
+
+#~ msgid "duplicate files list entry for package %s (line %d)"
+#~ msgstr "повторная запись в списке файлов для пакета %s (строка %d)"
+
+#~ msgid "close old files list file"
+#~ msgstr "закрытие старого файла с списком файлов"
+
+#~ msgid "internal error"
+#~ msgstr "внутренняя ошибка"
+
+#~ msgid "fatal error occurred while parsing input"
+#~ msgstr "неустранимая ошибка при анализе входных данных"
+
+#~ msgid ""
+#~ "\n"
+#~ "Usage: %s [<options> ...]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -r<gain-root-command>\n"
+#~ " command to gain root privileges (default is fakeroot).\n"
+#~ " -R<rules> rules file to execute (default is debian/rules).\n"
+#~ " -p<sign-command>\n"
+#~ " -d do not check build dependencies and conflicts.\n"
+#~ " -D check build dependencies and conflicts.\n"
+#~ " -T<target> call debian/rules <target> with the proper environment\n"
+#~ " --as-root ensure -T calls the target with root rights\n"
+#~ " -j[<number>] specify jobs to run simultaneously } passed to debian/"
+#~ "rules\n"
+#~ " -k<keyid> the key to use for signing.\n"
+#~ " -sgpg the sign-command is called like GPG.\n"
+#~ " -spgp the sign-command is called like PGP.\n"
+#~ " -us unsigned source.\n"
+#~ " -uc unsigned changes.\n"
+#~ " -a<arch> Debian architecture we build for (implies -d).\n"
+#~ " -b binary-only, do not build source. } also passed to\n"
+#~ " -B binary-only, no arch-indep files. } dpkg-genchanges\n"
+#~ " -A binary-only, only arch-indep files. }\n"
+#~ " -S source only, no binary files. }\n"
+#~ " -F normal full build (binaries and sources).\n"
+#~ " -t<system> set GNU system type. } passed to dpkg-"
+#~ "architecture\n"
+#~ " -v<version> changes since version <version>. }\n"
+#~ " -m<maint> maintainer for package is <maint>. }\n"
+#~ " -e<maint> maintainer for release is <maint>. } only passed\n"
+#~ " -C<descfile> changes are described in <descfile>. } to dpkg-"
+#~ "genchanges\n"
+#~ " -si (default) src includes orig if new upstream. }\n"
+#~ " -sa uploaded src always includes orig. }\n"
+#~ " -sd uploaded src is diff and .dsc only. }\n"
+#~ " -sn force Debian native source format. }\n"
+#~ " -s[sAkurKUR] see dpkg-source for explanation. } only passed\n"
+#~ " -z<level> compression level of source } to dpkg-"
+#~ "source\n"
+#~ " -Z<compressor> compression to use for source }\n"
+#~ " -nc do not clean source tree (implies -b).\n"
+#~ " -tc clean source tree when finished.\n"
+#~ " -ap add pause before starting signature process.\n"
+#~ " -i[<regex>] ignore diffs of files matching regex. } only passed\n"
+#~ " -I[<pattern>] filter out files when building tarballs. } to dpkg-"
+#~ "source\n"
+#~ " --source-option=<opt>\n"
+#~ "\t\t pass option <opt> to dpkg-source\n"
+#~ " --changes-option=<opt>\n"
+#~ "\t\t pass option <opt> to dpkg-genchanges\n"
+#~ " --admindir=<directory>\n"
+#~ " change the administrative directory.\n"
+#~ " -h, --help show this help message.\n"
+#~ " --version show the version.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Использование: %s [<параметры> ...]\n"
+#~ "\n"
+#~ "Параметры:\n"
+#~ " -r<команда-получения-root>\n"
+#~ " команда для получения прав root (по умолчанию "
+#~ "fakeroot).\n"
+#~ " -R<rules> файл правил для выполнения (по умолчанию debian/rules).\n"
+#~ " -p<команда-подписывания>\n"
+#~ " -d не проверять сборочные зависимости и конфликты.\n"
+#~ " -D проверять сборочные зависимости и конфликты.\n"
+#~ " -T<цель> вызвать debian/rules <цель> в настроенном окружении\n"
+#~ " --as-root обеспечить вызовы -T правами root\n"
+#~ " -j[<кол-во>] задать количество одновременно }\n"
+#~ " выполняемых работ } передаётся в debian/"
+#~ "rules\n"
+#~ " -k<id-ключа> ключ для подписывания.\n"
+#~ " -sgpg команда подписывания вызывается как GPG.\n"
+#~ " -spgp команда подписывания вызывается как PGP.\n"
+#~ " -us не подписывать исходный код.\n"
+#~ " -uc не подписывать изменения.\n"
+#~ " -a<арх> архитектура Debian, для которой собирать (вместе с -d).\n"
+#~ " -b только двоичный пакет, }\n"
+#~ " не собирать пакет с исходным кодом. } также передаётся "
+#~ "в\n"
+#~ " -B только двоичный пакет, }\n"
+#~ " не собирать независимые от }\n"
+#~ " архитектуры пакеты } dpkg-genchanges\n"
+#~ " -A только двоичный пакет, }\n"
+#~ " собирать независимые от }\n"
+#~ " архитектуры пакеты }\n"
+#~ " -S только пакет с исходным кодом }\n"
+#~ " без двоичного пакета. }\n"
+#~ " -F обычная полная сборка (двоичные и с исх.кодом).\n"
+#~ " -t<система> задать GNU тип системы. } передаётся в dpkg-"
+#~ "architecture\n"
+#~ " -v<версия> изменения, начиная с <версии>. }\n"
+#~ " -m<сопров> задать сопровождающего пакета. }\n"
+#~ " -e<сопров> задать сопровождающего для выпуска. } только в\n"
+#~ " -C<descfile> изменения даны в файле <descfile>. } dpkg-genchanges\n"
+#~ " -si (умолч.) src включают orig, если новый автор. }\n"
+#~ " -sa закачиваемые src всегда содержат orig.}\n"
+#~ " -sd в закачиваемых src только diff и .dsc.}\n"
+#~ " -sn исходный код в родном формате Debian. }\n"
+#~ " -s[sAkurKUR] смотрите описание по dpkg-source. } только в\n"
+#~ " -z<степень> степень сжатия исходного кода } dpkg-source\n"
+#~ " -Z<алгоритм> алгоритм сжатия исходного кода }\n"
+#~ " -nc не очищать дерево исходного кода (вместе с -b).\n"
+#~ " -tc в конце очистить дерево исходного кода.\n"
+#~ " -ap сделать паузу перед началом подписывания.\n"
+#~ " -i[<рег.выр>] игнорировать diff-ы файлов, совпадающих }\n"
+#~ " с рег.выр. } только в\n"
+#~ " -I[<шаблон>] не включать файлы, попавшие }\n"
+#~ " в шаблон при сборке tarball-а. } dpkg-source\n"
+#~ " --source-option=<пар>\n"
+#~ " передать параметр <пар> в dpkg-source\n"
+#~ " --changes-option=<пар>\n"
+#~ " передать параметр <пар> в dpkg-genchanges\n"
+#~ " --admindir=<каталог>\n"
+#~ " изменить административный каталог.\n"
+#~ " -h, --help показать это сообщение.\n"
+#~ " --version показать версию.\n"
+
+#~ msgid "PGP support is deprecated (see README.feature-removal-schedule)"
+#~ msgstr ""
+#~ "Поддержка PGP будет исключена (смотрите README.feature-removal-schedule)"
+
+#~ msgid "will probably become fatal in the future."
+#~ msgstr "вероятно, станет останавливающей ошибкой в будущем."
+
+#~ msgid ""
+#~ "-u, --udeb option is deprecated (see README.feature-removal-schedule)"
+#~ msgstr ""
+#~ "Параметр -u, --udeb будет исключен (см. README.feature-removal-schedule)"
+
+#~ msgid ""
+#~ "This source package can only be manipulated using bzr, which is not in "
+#~ "the PATH."
+#~ msgstr ""
+#~ "Исходным пакетом можно управлять только с помощью bzr, которого нет в "
+#~ "PATH."
+
+#~ msgid "source package name `%s' starts with non-alphanum"
+#~ msgstr "имя пакета с исходным кодом «%s» начинается не с буквы или цифры"
+
+#~ msgid ""
+#~ "\n"
+#~ "Copyright (C) 1999-2001 Marcus Brinkmann <brinkmd@debian.org>.\n"
+#~ "Copyright (C) 2004-2005 Scott James Remnant <scott@netsplit.com>."
+#~ msgstr ""
+#~ "\n"
+#~ "Copyright (C) 1999-2001 Marcus Brinkmann <brinkmd@debian.org>.\n"
+#~ "Copyright (C) 2004-2005 Scott James Remnant <scott@netsplit.com>."
+
+#, fuzzy
+#~| msgid ""
+#~| "\n"
+#~| "Copyright (C) 2010 Raphael Hertzog <hertzog@debian.org>."
+#~ msgid ""
+#~ "\n"
+#~ "Copyright (C) 2010-2011 Raphael Hertzog <hertzog@debian.org>."
+#~ msgstr ""
+#~ "\n"
+#~ "Copyright (C) 2010 Raphael Hertzog <hertzog@debian.org>."
+
+#~ msgid ""
+#~ "\n"
+#~ "Copyright (C) 1996 Ian Jackson.\n"
+#~ "Copyright (C) 2000 Wichert Akkerman\n"
+#~ "Copyright (C) 2007 Frank Lichtenheld"
+#~ msgstr ""
+#~ "\n"
+#~ "Copyright (C) 1996 Ian Jackson.\n"
+#~ "Copyright (C) 2000 Wichert Akkerman\n"
+#~ "Copyright (C) 2007 Frank Lichtenheld"
+
+#, fuzzy
+#~| msgid "%s: export %s from dpkg-buildflags (origin: %s): %s\n"
+#~ msgid "%s: dpkg-buildflags (origin: %s): %s = %s\n"
+#~ msgstr "%s: экспорт %s из dpkg-buildflags (происхождение: %s): %s\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "Copyright (C) 1996 Ian Jackson."
+#~ msgstr ""
+#~ "\n"
+#~ "Copyright (C) 1996 Ian Jackson."
+
+#~ msgid ""
+#~ "\n"
+#~ "Copyright (C) 1996 Ian Jackson.\n"
+#~ "Copyright (C) 2000,2001 Wichert Akkerman."
+#~ msgstr ""
+#~ "\n"
+#~ "Copyright (C) 1996 Ian Jackson.\n"
+#~ "Copyright (C) 2000,2001 Wichert Akkerman."
+
+#~ msgid ""
+#~ "\n"
+#~ "Copyright (C) 1996 Ian Jackson.\n"
+#~ "Copyright (C) 2000,2002 Wichert Akkerman."
+#~ msgstr ""
+#~ "\n"
+#~ "Copyright (C) 1996 Ian Jackson.\n"
+#~ "Copyright (C) 2000,2002 Wichert Akkerman."
+
+#~ msgid ""
+#~ "\n"
+#~ "Copyright (C) 2007 Raphael Hertzog.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Copyright (C) 2007 Raphael Hertzog.\n"
+
+#~ msgid "Copyright (C) 2009-2010 Raphael Hertzog."
+#~ msgstr "Copyright (C) 2009-2010 Raphael Hertzog."
+
+#~ msgid ""
+#~ "\n"
+#~ "Copyright (C) 1996 Ian Jackson.\n"
+#~ "Copyright (C) 2001 Wichert Akkerman"
+#~ msgstr ""
+#~ "\n"
+#~ "Copyright (C) 1996 Ian Jackson.\n"
+#~ "Copyright (C) 2001 Wichert Akkerman"
+
+#~ msgid ""
+#~ "\n"
+#~ "Copyright (C) 1996 Ian Jackson.\n"
+#~ "Copyright (C) 2000 Wichert Akkerman.\n"
+#~ "Copyright (C) 2006 Frank Lichtenheld.\n"
+#~ "Copyright (C) 2007 Raphael Hertzog.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Copyright (C) 1996 Ian Jackson.\n"
+#~ "Copyright (C) 2000 Wichert Akkerman.\n"
+#~ "Copyright (C) 2006 Frank Lichtenheld.\n"
+#~ "Copyright (C) 2007 Raphael Hertzog.\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "Copyright (C) 1996 Ian Jackson\n"
+#~ "Copyright (C) 1997 Klee Dienes\n"
+#~ "Copyright (C) 2008 Raphael Hertzog"
+#~ msgstr ""
+#~ "\n"
+#~ "Copyright (C) 1996 Ian Jackson\n"
+#~ "Copyright (C) 1997 Klee Dienes\n"
+#~ "Copyright (C) 2008 Raphael Hertzog"
+
+#~ msgid ""
+#~ "\n"
+#~ "Copyright (C) 1996 Ian Jackson.\n"
+#~ "Copyright (C) 2005,2007 Frank Lichtenheld."
+#~ msgstr ""
+#~ "\n"
+#~ "Copyright (C) 1996 Ian Jackson.\n"
+#~ "Copyright (C) 2005,2007 Frank Lichtenheld."
+
+#~ msgid "1 to 3 args expected\n"
+#~ msgstr "ожидается от 1 до 3 аргументов\n"
+
+#~ msgid "entry of APT's %s file"
+#~ msgstr "элемент APT файла %s"
+
+#~ msgid "no orig.tar file found"
+#~ msgstr "файл orig.tar не найден"
+
+#~ msgid "exec %s"
+#~ msgstr "вызов exec для %s"
+
+#~ msgid "git config exited nonzero"
+#~ msgstr "команда git config завершилась с ненулевым кодом выхода"
+
+#~ msgid "executable bit set on %s; clearing"
+#~ msgstr "на %s установлен бит исполнения; очищается"
+
+#~ msgid "unable to remove `%s'"
+#~ msgstr "невозможно удалить %s"
+
+#~ msgid "modifying .git/config to comment out some settings"
+#~ msgstr "изменяется .git/config для комментирования некоторых настроек"
+
+#~ msgid "unable to append to %s"
+#~ msgstr "невозможно добавить к %s"
+
+#~ msgid "The following setting(s) were disabled by dpkg-source"
+#~ msgstr "Следующие настройки были выключены dpkg-source"
+
+#~ msgid "need -x or -b"
+#~ msgstr "требуется параметр -x или -b"
+
+#~ msgid "objdump on `%s'"
+#~ msgstr "вызов objdump для `%s'"
diff --git a/scripts/po/stamp-po b/scripts/po/stamp-po
new file mode 100644
index 0000000..9788f70
--- /dev/null
+++ b/scripts/po/stamp-po
@@ -0,0 +1 @@
+timestamp
diff --git a/scripts/po/sv.gmo b/scripts/po/sv.gmo
new file mode 100644
index 0000000..880eefe
--- /dev/null
+++ b/scripts/po/sv.gmo
Binary files differ
diff --git a/scripts/po/sv.po b/scripts/po/sv.po
new file mode 100644
index 0000000..7fc16ce
--- /dev/null
+++ b/scripts/po/sv.po
@@ -0,0 +1,4140 @@
+# Swedish translation of dpkg
+# Copyright © 2007-2023 Software in the Public Interest
+# This file is distributed under the same license as the dpkg package.
+# Peter Krefting <peter@softwolves.pp.se>, 2007-2023.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: dpkg-dev 1.21.19\n"
+"Report-Msgid-Bugs-To: debian-dpkg@lists.debian.org\n"
+"POT-Creation-Date: 2023-05-11 02:03+0000\n"
+"PO-Revision-Date: 2023-01-28 15:58+0100\n"
+"Last-Translator: Peter Krefting <peter@softwolves.pp.se>\n"
+"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
+"Language: sv\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Gtranslator 3.38.0\n"
+
+#: scripts/dpkg-architecture.pl scripts/dpkg-buildflags.pl
+#: scripts/dpkg-buildpackage.pl scripts/dpkg-checkbuilddeps.pl
+#: scripts/dpkg-distaddfile.pl scripts/dpkg-genbuildinfo.pl
+#: scripts/dpkg-genchanges.pl scripts/dpkg-gencontrol.pl
+#: scripts/dpkg-gensymbols.pl scripts/dpkg-mergechangelogs.pl
+#: scripts/dpkg-name.pl scripts/dpkg-parsechangelog.pl
+#: scripts/dpkg-scanpackages.pl scripts/dpkg-scansources.pl
+#: scripts/dpkg-shlibdeps.pl scripts/dpkg-source.pl scripts/dpkg-vendor.pl
+#, perl-format
+msgid "Debian %s version %s.\n"
+msgstr "Debian %s version %s.\n"
+
+#: scripts/dpkg-architecture.pl scripts/dpkg-buildflags.pl
+#: scripts/dpkg-buildpackage.pl scripts/dpkg-distaddfile.pl
+#: scripts/dpkg-genbuildinfo.pl scripts/dpkg-genchanges.pl
+#: scripts/dpkg-gencontrol.pl scripts/dpkg-gensymbols.pl
+#: scripts/dpkg-parsechangelog.pl scripts/dpkg-shlibdeps.pl
+#: scripts/dpkg-source.pl scripts/dpkg-vendor.pl
+msgid ""
+"\n"
+"This is free software; see the GNU General Public License version 2 or\n"
+"later for copying conditions. There is NO warranty.\n"
+msgstr ""
+"\n"
+"Detta program är fri programvara. Se GNU General Public License version 2\n"
+"eller senare för kopieringsvillkor. Det finns INGEN garanti.\n"
+
+#: scripts/dpkg-architecture.pl scripts/dpkg-vendor.pl
+#, perl-format
+msgid "Usage: %s [<option>...] [<command>]"
+msgstr "Användning: %s [<flagga>...] [<åtgärd>]"
+
+#: scripts/dpkg-architecture.pl
+msgid ""
+"Commands:\n"
+" -l, --list list variables (default).\n"
+" -L, --list-known list valid architectures (matching some "
+"criteria).\n"
+" -e, --equal <arch> compare with host Debian architecture.\n"
+" -i, --is <arch-wildcard> match against host Debian architecture.\n"
+" -q, --query <variable> prints only the value of <variable>.\n"
+" -s, --print-set print command to set environment variables.\n"
+" -u, --print-unset print command to unset environment variables.\n"
+" -c, --command <command> set environment and run the command in it.\n"
+" -?, --help show this help message.\n"
+" --version show the version."
+msgstr ""
+"Åtgärder:\n"
+" -l, --list lista variabler (förval).\n"
+" -L, --list-known visa giltiga arkitekturer (motsvarande "
+"kriterier).\n"
+" -e, --equal <ark> jämför med värd-Debianarkitektur.\n"
+" -i, --is <ark-joker> matcha mot värd-Debianarkitektur.\n"
+" -q, --query <variabel> skriver bara ut värdet på <variabel>.\n"
+" -s, --print-set skriv kommandon för att sätta miljövariabler.\n"
+" -u, --print-unset skriv kommandon för att ta bort miljövariabler.\n"
+" -c, --command <kommando> ställ in miljö och kör kommandot i den.\n"
+" -?, --help visa detta hjälpmeddelande.\n"
+" --version visa versionsnummer."
+
+#: scripts/dpkg-architecture.pl
+msgid ""
+"Options:\n"
+" -a, --host-arch <arch> set host Debian architecture.\n"
+" -t, --host-type <type> set host GNU system type.\n"
+" -A, --target-arch <arch> set target Debian architecture.\n"
+" -T, --target-type <type> set target GNU system type.\n"
+" -W, --match-wildcard <arch-wildcard>\n"
+" restrict architecture list matching <arch-"
+"wildcard>.\n"
+" -B, --match-bits <arch-bits>\n"
+" restrict architecture list matching <arch-"
+"bits>.\n"
+" -E, --match-endian <arch-endian>\n"
+" restrict architecture list matching <arch-"
+"endian>.\n"
+" --print-format <format>\n"
+" use <format> for --print-set and --print-unset,\n"
+" allowed values: shell (default), make.\n"
+" -f, --force force flag (override variables set in "
+"environment)."
+msgstr ""
+"Flaggor:\n"
+" -a, --host-arch <ark> sätt värd-Debianarkitektur.\n"
+" -t, --host-type <typ> sätt värd-GNU-systemtyp.\n"
+" -A, --target-arch <ark> sätt mål-Debianarkitektur.\n"
+" -T, --target-type <typ> sätt mål-GNU-systemtyp.\n"
+" -W, --match-wildcard <ark-joker>\n"
+" begränsa arkitekturlista till <ark-joker>.\n"
+" -B, --match-bits <ark-bitar>\n"
+" begränsa arkitekturlista till <ark-bitar>.\n"
+" -E, --match-endian <ark-endian>\n"
+" begränsa arkitekturlista till <ark-endian>.\n"
+" --print-format <format>\n"
+" använd <format> för --print-set och --print-"
+"unset,\n"
+" tillåtna värden: shell (förval), make.\n"
+" -f, --force tvinga flagga (överstyr variabler satta i "
+"miljön)."
+
+#: scripts/dpkg-architecture.pl
+#, perl-format
+msgid "unknown Debian architecture %s, you must specify GNU system type, too"
+msgstr "okänd Debianarkitektur %s, du måste också ange en GNU-systemtyp"
+
+#: scripts/dpkg-architecture.pl
+#, perl-format
+msgid "unknown GNU system type %s, you must specify Debian architecture, too"
+msgstr "okänd GNU-systemtyp %s, du måste också ange en Debianarkitektur"
+
+#: scripts/dpkg-architecture.pl
+#, perl-format
+msgid "unknown default GNU system type for Debian architecture %s"
+msgstr "okänd förvald GNU-systemtyp för Debianarkitektur %s"
+
+#: scripts/dpkg-architecture.pl
+#, perl-format
+msgid ""
+"default GNU system type %s for Debian arch %s does not match specified GNU "
+"system type %s"
+msgstr ""
+"förvald GNU-systemtyp %s för Debianarkitekturen %s stämmer inte med den "
+"angivna GNU-systemtypen %s"
+
+#: scripts/dpkg-architecture.pl
+#, perl-format
+msgid "%s is not a supported print format"
+msgstr "%s är inte ett utskriftsformat som stöds"
+
+#: scripts/dpkg-architecture.pl
+#, perl-format
+msgid "%s is not a supported variable name"
+msgstr "%s är inte ett variabelnamn som stöds"
+
+#: scripts/dpkg-architecture.pl scripts/dpkg-buildflags.pl
+#: scripts/dpkg-distaddfile.pl scripts/dpkg-genbuildinfo.pl
+#: scripts/dpkg-genchanges.pl scripts/dpkg-gencontrol.pl
+#: scripts/dpkg-gensymbols.pl scripts/dpkg-name.pl
+#: scripts/dpkg-parsechangelog.pl scripts/dpkg-shlibdeps.pl
+#: scripts/dpkg-vendor.pl
+#, perl-format
+msgid "unknown option '%s'"
+msgstr "okänd flagga \"%s\""
+
+#: scripts/dpkg-architecture.pl
+#, perl-format
+msgid ""
+"specified GNU system type %s does not match CC system type %s, try setting a "
+"correct CC environment variable"
+msgstr ""
+"angiven GNU-systemtyp %s stämmer inte med CC-systemtypen %s, försök sätta en "
+"korrekt CC-miljövariabel"
+
+#: scripts/dpkg-architecture.pl scripts/dpkg-shlibdeps.pl scripts/Dpkg/IPC.pm
+#: scripts/Dpkg/Shlibs/Cppfilt.pm
+#, perl-format
+msgid "unable to execute %s"
+msgstr "kan inte exekvera %s"
+
+#: scripts/dpkg-buildflags.pl
+#, perl-format
+msgid "Usage: %s [<command>]"
+msgstr "Användning: %s [<åtgärd>]"
+
+#: scripts/dpkg-buildflags.pl
+msgid ""
+"Commands:\n"
+" --get <flag> output the requested flag to stdout.\n"
+" --origin <flag> output the origin of the flag to stdout:\n"
+" value is one of vendor, system, user, env.\n"
+" --status output a synopsis with all parameters affecting the\n"
+" program behaviour, the resulting flags and their "
+"origin.\n"
+" --query like --status, but in deb822 format.\n"
+" --query-features <area>\n"
+" output the status of features for the given area.\n"
+" --list output a list of the flags supported by the current "
+"vendor.\n"
+" --export=(sh|make|cmdline|configure)\n"
+" output something convenient to import the compilation\n"
+" flags in a shell script, in make, or in a command "
+"line.\n"
+" --dump output all compilation flags with their values.\n"
+" --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+"Åtgärder:\n"
+" --get <flagga> skriv ut begärd flagga på standard ut.\n"
+" --origin <flagga> skriv ut ursprung till flaggan på standard ut:\n"
+" värdet är ett av vendor, system, user, env.\n"
+" --status skriv ut en sammanfattning med alla parametrar som "
+"påverkar\n"
+" programmets beteende, de resulterande flaggorna\n"
+" och deras ursprung.\n"
+" --query like --status, but in deb822 format.\n"
+" --query-features <area>\n"
+" skriv ut status för funktioner för given area.\n"
+" --list skriv ut lista med flaggor som stöds av aktuell "
+"leverantör.\n"
+" --export=(sh|make|cmdline|configure)\n"
+" skriv ut något som kan användas för att importera\n"
+" kompileringsflaggor i ett skalskript, i make,\n"
+" eller på en kommandorad\n"
+" --dump skriv ut alla kompileringsflaggor och deras värden.\n"
+" --help visa detta hjälpmeddelande.\n"
+" --version visa versionsnummer.\n"
+
+#: scripts/dpkg-buildflags.pl scripts/dpkg-source.pl scripts/dpkg-vendor.pl
+#, perl-format
+msgid "two commands specified: --%s and --%s"
+msgstr "två kommandon angavs: --%s och --%s"
+
+#: scripts/dpkg-buildflags.pl scripts/dpkg-vendor.pl
+#, perl-format
+msgid "%s needs a parameter"
+msgstr "%s behöver en parameter"
+
+#: scripts/dpkg-buildpackage.pl scripts/dpkg-genbuildinfo.pl
+#: scripts/dpkg-genchanges.pl scripts/dpkg-gencontrol.pl
+#: scripts/dpkg-gensymbols.pl scripts/dpkg-parsechangelog.pl
+#, perl-format
+msgid "Usage: %s [<option>...]"
+msgstr "Användning: %s [<flagga>...]"
+
+#: scripts/dpkg-buildpackage.pl
+msgid ""
+"Options:\n"
+" --build=<type>[,...] specify the build <type>: full, source, "
+"binary,\n"
+" any, all (default is 'full').\n"
+" -F, --build=full normal full build (source and binary; "
+"default).\n"
+" -g, --build=source,all source and arch-indep build.\n"
+" -G, --build=source,any source and arch-specific build.\n"
+" -b, --build=binary binary-only, no source files.\n"
+" -B, --build=any binary-only, only arch-specific files.\n"
+" -A, --build=all binary-only, only arch-indep files.\n"
+" -S, --build=source source-only, no binary files.\n"
+" -nc, --no-pre-clean do not pre clean source tree (implies -b).\n"
+" --pre-clean pre clean source tree (default).\n"
+" --no-post-clean do not post clean source tree (default).\n"
+" -tc, --post-clean post clean source tree.\n"
+" --sanitize-env sanitize the build environment.\n"
+" -D, --check-builddeps check build dependencies and conflicts "
+"(default).\n"
+" -d, --no-check-builddeps do not check build dependencies and "
+"conflicts.\n"
+" --ignore-builtin-builddeps\n"
+" do not check builtin build dependencies.\n"
+" -P, --build-profiles=<profiles>\n"
+" assume comma-separated build <profiles> as "
+"active.\n"
+" --rules-requires-root assume legacy Rules-Requires-Root field "
+"value.\n"
+" -R, --rules-file=<rules> rules file to execute (default is debian/"
+"rules).\n"
+" -T, --rules-target=<target> call debian/rules <target>.\n"
+" --as-root ensure -T calls the target with root rights.\n"
+" -j, --jobs[=<jobs>|auto] jobs to run simultaneously (passed to "
+"<rules>),\n"
+" (default; default is auto, opt-in mode).\n"
+" -J, --jobs-try[=<jobs>|auto]\n"
+" alias for -j, --jobs.\n"
+" --jobs-force[=<jobs>|auto]\n"
+" jobs to run simultaneously (passed to "
+"<rules>),\n"
+" (default is auto, forced mode).\n"
+" -r, --root-command=<command>\n"
+" command to gain root rights (default is "
+"fakeroot).\n"
+" --check-command=<command>\n"
+" command to check the .changes file (no "
+"default).\n"
+" --check-option=<opt> pass <opt> to check <command>.\n"
+" --hook-<name>=<command> set <command> as the hook <name>, known "
+"hooks:\n"
+" init preclean source build binary buildinfo\n"
+" changes postclean check sign done\n"
+" --buildinfo-file=<file> set the .buildinfo filename to generate.\n"
+" --buildinfo-option=<opt>\n"
+" pass option <opt> to dpkg-genbuildinfo.\n"
+" --changes-file=<file> set the .changes filename to generate.\n"
+" --sign-backend=<backend>\n"
+" OpenPGP backend to use to sign\n"
+" (default is auto).\n"
+" -p, --sign-command=<command>\n"
+" command to sign .dsc and/or .changes files\n"
+" (default is gpg).\n"
+" --sign-keyfile=<file> the key file to use for signing.\n"
+" -k, --sign-keyid=<keyid> the key id to use for signing.\n"
+" --sign-key=<keyid> alias for -k, --sign-keyid.\n"
+" -ap, --sign-pause add pause before starting signature process.\n"
+" -us, --unsigned-source unsigned source package.\n"
+" -ui, --unsigned-buildinfo unsigned .buildinfo file.\n"
+" -uc, --unsigned-changes unsigned .buildinfo and .changes file.\n"
+" --no-sign do not sign any file.\n"
+" --force-sign force signing the resulting files.\n"
+" --admindir=<directory> change the administrative directory.\n"
+" -?, --help show this help message.\n"
+" --version show the version."
+msgstr ""
+"Flaggor:\n"
+" --build=<typ>[,...] ange bygg-<typ>: full, source, binary,\n"
+" any, all (förval är 'full').\n"
+" -F, --build=full normalt komplett bygge (binärer+källkod; "
+"förval).\n"
+" -g, --build=source,all källkod och arkitektur-oberoende bygg.\n"
+" -G, --build=source,any källkod och arkitektur-specifikt bygg.\n"
+" -b, --build=binary endast binär, inga källkodsfiler.\n"
+" -B, --build=any endast binär, endast arkitektur-specifika "
+"filer.\n"
+" -A, --build=all endast binär, endast arkitektur-oberoende "
+"filer.\n"
+" -S, --build=source endast källkod, inga binärfiler.\n"
+" -nc, --no-pre-clean städa inte källkodsträd först (implicerar -"
+"b).\n"
+" --pre-clean städa källkodströdet först (förval).\n"
+" --no-post-clean städa inte källkodsträdet efteråt (förval).\n"
+" -tc, --post-clean städa källkodsträd efteråt.\n"
+" -D, --check-builddeps kontroll. byggberoenden och -konflikter "
+"(förval).\n"
+" -d, --no-check-builddeps kontrollera inte byggberoenden och -"
+"konflkter.\n"
+" --ignore-builtin-builddeps\n"
+" kontrollera inte inbyggda byggberoenden.\n"
+" -P, --build-profiles=<profiler>\n"
+" anta kommaavdelade bygg-<profiler> är aktiva.\n"
+" --build-requires-root anta gamla fältvärden för Rules-Requires-"
+"Root.\n"
+" -R, --rules-file=<regler> regelfil att exekvera (förval är debian/"
+"rules).\n"
+" -T, --rules-target=<mål> anropa debian/rules <mål>.\n"
+" --as-root ser till att -T anropar målet med "
+"rootbehörighet.\n"
+" -j, --jobs[=<jobb>|auto] jobb att köra samtidigt (sänds till <rules>),\n"
+" (förval; förval är auto, frivilligt läge).\n"
+" -J, --jobs-try[=<jobb>|auto]\n"
+" alias för -j, --jobs.\n"
+" --jobs-force[=<jobb>|auto]\n"
+" jobb att köra samtidigt (sänds till <rules>),\n"
+" (förval är auto, tvingat läge).\n"
+" -r, --root-command=<kommando>\n"
+" kommando för root-behörighet (förval är "
+"fakeroot).\n"
+" --check-command=<kommando>\n"
+" kommando för att kontrollera .changes-filen\n"
+" (inget förval).\n"
+" --check-option=<arg> sänd <arg> till --check-command-<kommando>.\n"
+" --hook-<namn>=<kommando>\n"
+" välj <kommando> som haken <namn>, kända "
+"hakar:\n"
+" init preclean source build binary buildinfo\n"
+" changes postclean check sign done\n"
+" --buildinfo-file=<fil> välj .buildinfo-filnamn att skapa.\n"
+" --buildinfo-option=<flagga>\n"
+" sänd flaggan <flagga> till dpkg-genbuildinfo.\n"
+" --changes-file=<fil> välj .changes-filnamn att skapa.\n"
+" --sign-backend=<bakända>\n"
+" OpenPGP-program att använda för signering\n"
+" (förval är auto).\n"
+" -p, --sign-command=<kommando>\n"
+" kommando för att signera .dsc- och/eller\n"
+" .changes-filer (förval är gpg).\n"
+" --sign-keyfile=<fil> nyckelfil att använda vid signering.\n"
+" -k, --sign-keyid=<nyckelid> nyckel-ID som skall användas vid signering.\n"
+" --sign-key=<nyckelid> alias för -k, --sign-keyid.\n"
+" -ap, --sign-pause lägg in paus innan signaturprocessen startas.\n"
+" -us, --unsigned-source osignerad källkod.\n"
+" -ui, --unsigned-buildinfo osignerad .buildinfo-fil.\n"
+" -uc, --unsigned-changes osignerad .buildinfo- och changes-fil.\n"
+" --no-sign signera inte någon fil.\n"
+" --force-sign tvinga signering av de resulterande filerna.\n"
+" --admindir=<katalog> ändra den administrativa katalogen.\n"
+" -?, --help visa detta hjälpmeddelande.\n"
+" --version visa versionsnummer."
+
+#: scripts/dpkg-buildpackage.pl
+msgid ""
+"Options passed to dpkg-architecture:\n"
+" -a, --host-arch <arch> set the host Debian architecture.\n"
+" -t, --host-type <type> set the host GNU system type.\n"
+" --target-arch <arch> set the target Debian architecture.\n"
+" --target-type <type> set the target GNU system type."
+msgstr ""
+"Flaggor som sänds till dpkg-architecture:\n"
+" -a, --host-arch <ark> sätt värd-Debianarkitektur.\n"
+" -t, --host-type <typ> sätt värd-GNU-systemtyp.\n"
+" --target-arch <ark> sätt mål-Debianarkitektur.\n"
+" --target-type <typ> sätt mål-GNU-systemtyp."
+
+#: scripts/dpkg-buildpackage.pl
+msgid ""
+"Options passed to dpkg-genchanges:\n"
+" -si source includes orig, if new upstream "
+"(default).\n"
+" -sa source includes orig, always.\n"
+" -sd source is diff and .dsc only.\n"
+" -v<version> changes since version <version>.\n"
+" -m, --source-by=<maint> maintainer for this source or build is "
+"<maint>.\n"
+" --build-by=<maint> ditto.\n"
+" -e, --release-by=<maint> maintainer for this change or release is "
+"<maint>.\n"
+" --changed-by=<maint> ditto.\n"
+" -C<descfile> changes are described in <descfile>.\n"
+" --changes-option=<opt> pass option <opt> to dpkg-genchanges."
+msgstr ""
+"Flaggor som sänds till dpkg-genchanges:\n"
+" -si källkod innehåller orig, om ny uppström "
+"(förval).\n"
+" -sa källkod innehåller orig, alltid.\n"
+" -sd källkod är endast diff och .dsc\n"
+" -v<version> ändringar sedan version <version>.\n"
+" -m, --source-by=<ansvarig> ansvarig för denna källkod/bygge är "
+"<ansvarig>.\n"
+" --build-by=<ansvarig> dito.\n"
+" -e, --release-by=<ansvarig> ansvarig för denna ändring/utgåva är "
+"<ansvarig>.\n"
+" --changed-by=<ansvarig> dito.\n"
+" -m, --release-by=<ansvarig> ansvarig för denna utgåva är <ansvarig>.\n"
+" -e, --build-by=<ansvarig> ansvarig för detta bygge är <ansvarig>.\n"
+" -C<desc-fil> ändringar beskrivs i <desc-fil>.\n"
+" --changes-option=<flagga>\n"
+" sänd flaggan <flagga> till dpkg-genchanges."
+
+#: scripts/dpkg-buildpackage.pl
+msgid ""
+"Options passed to dpkg-source:\n"
+" -sn force Debian native source format.\n"
+" -s[sAkurKUR] see dpkg-source for explanation.\n"
+" -z, --compression-level=<level>\n"
+" compression level to use for source.\n"
+" -Z, --compression=<compressor>\n"
+" compression to use for source (gz|xz|bzip2|"
+"lzma).\n"
+" -i, --diff-ignore[=<regex>] ignore diffs of files matching <regex>.\n"
+" -I, --tar-ignore[=<pattern>]\n"
+" filter out files when building tarballs.\n"
+" --source-option=<opt> pass option <opt> to dpkg-source.\n"
+msgstr ""
+"Flaggor som sänds till dpkg-source:\n"
+" -sn tvinga Debianeget källkodsformat.\n"
+" -s[sAkurKUR] se dpkg-source för förklaring.\n"
+" -z, --compression-level=<nivå>\n"
+" komprimeringsnivå för källkod.\n"
+" -Z, --compression=<komprim> komprimering att använda för källkod\n"
+" (gz|xz|bzip2|lzma).\n"
+" -i, --diff-ingore=[<reg.uttr>]\n"
+" ignorerar diff på filer som motsvarar reg."
+"uttr.\n"
+" -I, --tar-ignore=[<mönster>]\n"
+" filtrera ut filer när tarboll byggs.\n"
+" --source-option=<flagga>\n"
+" sänd flaggan <flagga> till dpkg-source.\n"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "missing .buildinfo filename"
+msgstr "saknat .buildinfo-filnamn"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "passing %s via %s is not supported; please use %s instead"
+msgstr "sända %s via %s stöds inte; använd \"%s\" istället"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "missing .changes filename"
+msgstr "saknat .changes-filnamn"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "unknown hook name %s"
+msgstr "okänt namn på hake: %s"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "missing hook %s command"
+msgstr "saknat kommando för haken %s"
+
+#: scripts/dpkg-buildpackage.pl scripts/dpkg-genbuildinfo.pl
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid "%s is deprecated; it is without effect"
+msgstr "%s rekommenderas ej; det har ingen effekt"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "-s%s is deprecated; always using gpg style interface"
+msgstr "-s%s är föråldrat; använder alltid gränssnitt av gpg-typ"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "unknown option or argument %s"
+msgstr "okänd flagga eller argument %s"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "option %s is only meaningful with option %s"
+msgstr "flaggan %s ger endast mening med flaggan %s"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "check-command '%s' not found"
+msgstr "testkommandot \"%s\" hittades inte"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "sign-command '%s' not found"
+msgstr "signeringskommandot \"%s\" hittades inte"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source package"
+msgstr "källkodspaket"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source version"
+msgstr "källkodsversion"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source distribution"
+msgstr "källkodsdistribution"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source changed by"
+msgstr "källkod ändrad av"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "host architecture"
+msgstr "värdarkitektur"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "debian/rules is not executable; fixing that"
+msgstr "debian/rules är inte exekverbar: rättar"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "build dependencies/conflicts unsatisfied; aborting"
+msgstr "byggberoenden/-konflikter ej uppfyllda; avbryter"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "(Use -d flag to override.)"
+msgstr "(Använd flaggan -d för att överstyra.)"
+
+#: scripts/dpkg-buildpackage.pl
+msgid ""
+"building a source package without cleaning up as you asked; it might contain "
+"undesired files"
+msgstr ""
+"bygger ett källkodspaket utan att städa upp som efterfrågat; det kan "
+"innehålla oönskade filer."
+
+#: scripts/dpkg-buildpackage.pl
+msgid "Press <enter> to start the signing process.\n"
+msgstr "Tryck <enter> för att inleda signeringsproceduren.\n"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "not signing UNRELEASED build; use --force-sign to override"
+msgstr ""
+"signerar inte \"UNRELEASED\"-bygge; använd --force-sign för att överstyra"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "unable to determine %s"
+msgstr "kan inte bestämma %s"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "using a gain-root-command while being root"
+msgstr "använder ett gain-root-command fast jag redan är root"
+
+#: scripts/dpkg-buildpackage.pl
+msgid ""
+"fakeroot not found, either install the fakeroot\n"
+"package, specify a command with the -r option, or run this as root"
+msgstr ""
+"fakeroot hittades inte, du kan installera paketet fakeroot,\n"
+"ange ett kommando med flaggan -r, eller köra som root"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "gain-root-command '%s' not found"
+msgstr "få-root-kommandot \"%s\" hittades inte"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "disallowed target in %s field keyword \"%s\""
+msgstr "otillåtet mål i %s-fältet nyckelord \"%s\""
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "%s field keyword \"%s\" is unknown in dpkg namespace"
+msgstr "%s-fältet nyckelord \"%s\" är okänt i dpkg-namnrymden"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "%s field keyword \"%s\" is uppercase; use \"%s\" instead"
+msgstr "%s-fältet nyckelord \"%s\" har stora bokstäver; använd \"%s\" istället"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "%s field keyword \"%s\" is invalid; use \"%s\" instead"
+msgstr "%s-fältet nyckelord \"%s\" är ogiltigt; använd \"%s\" istället"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "%s field keyword \"%s\" is unknown"
+msgstr "%s-fältet nyckelord \"%s\" är okänt"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "field %s contains duplicate keyword \"%s\""
+msgstr "fältet %s innehåller duplicerat nyckelord \"%s\""
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "%s field contains both global and implementation specific keywords"
+msgstr ""
+"%s-fältet innehåller både globala och implementationsspecifika nyckelord"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "unknown %% substitution in hook: %%%s"
+msgstr "okänd %%-substituering i krok: %%%s"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid ""
+"short OpenPGP key IDs are broken; please use key fingerprints in %s or %s "
+"instead"
+msgstr ""
+"korta OpenPGP-nyckel-id:n är trasiga; använd nyckelfingeravtryck i %s eller "
+"%s istället"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid ""
+"long OpenPGP key IDs are strongly discouraged; please use key fingerprints "
+"in %s or %s instead"
+msgstr ""
+"långa OpenPGP-nyckel-id:n rekommenderas inte; använd nyckelfingeravtryck i "
+"%s eller %s istället"
+
+#: scripts/dpkg-buildpackage.pl scripts/dpkg-checkbuilddeps.pl
+#: scripts/dpkg-genbuildinfo.pl scripts/dpkg-name.pl scripts/Dpkg/Arch.pm
+#: scripts/Dpkg/IPC.pm scripts/Dpkg/Shlibs.pm
+#, perl-format
+msgid "cannot open %s"
+msgstr "kan inte öppna %s"
+
+#: scripts/dpkg-buildpackage.pl scripts/dpkg-distaddfile.pl
+#: scripts/dpkg-genbuildinfo.pl scripts/dpkg-gencontrol.pl
+#: scripts/Dpkg/Interface/Storable.pm scripts/Dpkg/Source/Package/V2.pm
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot close %s"
+msgstr "kan inte stänga %s"
+
+#: scripts/dpkg-buildpackage.pl scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "cannot move %s to %s"
+msgstr "kan inte flytta %s till %s"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid "failed to sign %s file: %s"
+msgstr "misslyckades att signera %s-fil: %s"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source-only upload: Debian-native package"
+msgstr "insändning med endast källkod: Debianeget paket"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source-only, diff-only upload (original source NOT included)"
+msgstr ""
+"insändning enbart med källkod, enbart med diff (originalkällkod tas EJ med)"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "source-only upload (original source is included)"
+msgstr "insändning enbart med källkod (originalkällkod tas med)"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "binary-only upload (no source included)"
+msgstr "endast binär insändning (ingen källkod tas med)"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "full upload; Debian-native package (full source is included)"
+msgstr "komplett insändnig; Debianeget paket (komplett källkod tas med)"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "binary and diff upload (original source NOT included)"
+msgstr "binär- och diffinsändning (originalkällkod tas EJ med)"
+
+#: scripts/dpkg-buildpackage.pl
+msgid "full upload (original source is included)"
+msgstr "komplett insändning (originalkällkod tas med)"
+
+#: scripts/dpkg-buildpackage.pl
+#, perl-format
+msgid ""
+"%s must be updated to support the 'build-arch' and 'build-indep' targets (at "
+"least '%s' seems to be missing)"
+msgstr ""
+"%s måste uppdateras för att stöda målen \"build-arch\" och \"build-"
+"indep\" (åtminstone \"%s\" verkar saknas)"
+
+#: scripts/dpkg-checkbuilddeps.pl
+#, perl-format
+msgid "Usage: %s [<option>...] [<control-file>]"
+msgstr "Användning: %s [<flagga>...] [<control-fil>]"
+
+#: scripts/dpkg-checkbuilddeps.pl
+msgid ""
+"Options:\n"
+" -A ignore Build-Depends-Arch and Build-Conflicts-Arch.\n"
+" -B ignore Build-Depends-Indep and Build-Conflicts-Indep.\n"
+" -I ignore built-in build dependencies and conflicts.\n"
+" -d build-deps use given string as build dependencies instead of\n"
+" retrieving them from control file\n"
+" -c build-conf use given string for build conflicts instead of\n"
+" retrieving them from control file\n"
+" -a arch assume given host architecture\n"
+" -P profiles assume given build profiles (comma-separated list)\n"
+" --admindir=<directory>\n"
+" change the administrative directory.\n"
+" -?, --help show this help message.\n"
+" --version show the version."
+msgstr ""
+"Flaggor:\n"
+" -A ignorera Build-Depends-Arch och Build-Conflicts-Arch.\n"
+" -B ignorera BUild-Depends-Indep och Build-Conflicts-Indep.\n"
+" -I ignorera inbyggda byggberoenden och -konflikter.\n"
+" -d byggber. använd den givna strängen som byggberoenden istället\n"
+" för att hämta dem från styrfilen\n"
+" -c byggkonfl. använd den givna strängen som byggkonflikter istället\n"
+" för att hämta dem från styrfilen\n"
+" -a ark anta den angivna värdarkitekturen\n"
+" -P profiler anta angivna byggprofiler (kommaavdelad lista)\n"
+" --admindir=<katalog>\n"
+" välj administrativ katalog.\n"
+" -?, --help visa detta hjälpmeddelande.\n"
+" --verison visa verisonen."
+
+#: scripts/dpkg-checkbuilddeps.pl
+msgid ""
+"<control-file> is the control file to process (default: debian/control)."
+msgstr ""
+"<control-fil> är styrfilen som skall hanteras (förval: debian/control)."
+
+#: scripts/dpkg-checkbuilddeps.pl scripts/dpkg-shlibdeps.pl
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "cannot parse %s field"
+msgstr "kan inte tolka fältet %s"
+
+#: scripts/dpkg-checkbuilddeps.pl
+#, perl-format
+msgid "Unmet build dependencies: %s"
+msgstr "Ej uppfyllda byggberoenden: %s"
+
+#: scripts/dpkg-checkbuilddeps.pl
+#, perl-format
+msgid "Build conflicts: %s"
+msgstr "Byggkonflikter: %s"
+
+#: scripts/dpkg-distaddfile.pl
+#, perl-format
+msgid ""
+"Usage: %s [<option>...] <filename> <section> <priority>\n"
+"\n"
+"Options:\n"
+" -f<files-list-file> write files here instead of debian/files.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+"Användning: %s [<flagga>...] <filnamn> <sektion> <prioritet>\n"
+"\n"
+"Flaggor:\n"
+" -f<fillistfil> skriver filer här istället för debian/files.\n"
+" -?, --help visa detta hjälpmeddelande.\n"
+" --version visa versionsnummer.\n"
+
+#: scripts/dpkg-distaddfile.pl
+msgid "need exactly a filename, section and priority"
+msgstr "behöver exakt ett filnamn, en sektion och en prioritet"
+
+#: scripts/dpkg-distaddfile.pl
+msgid "filename, section and priority may contain no whitespace"
+msgstr "filnamn, sektion och prioritet kan inte innehålla blanktecken"
+
+#: scripts/dpkg-distaddfile.pl scripts/dpkg-genbuildinfo.pl
+#: scripts/dpkg-gencontrol.pl scripts/dpkg-mergechangelogs.pl
+#: scripts/Dpkg/Compression/FileHandle.pm scripts/Dpkg/File.pm
+#: scripts/Dpkg/IPC.pm scripts/Dpkg/Interface/Storable.pm
+#: scripts/Dpkg/Source/BinaryFiles.pm scripts/Dpkg/Source/Package.pm
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "cannot write %s"
+msgstr "kan inte skriva %s"
+
+#: scripts/dpkg-distaddfile.pl scripts/dpkg-genbuildinfo.pl
+#: scripts/dpkg-gencontrol.pl
+msgid "install new files list file"
+msgstr "installerar ny fillistfil"
+
+#: scripts/dpkg-genbuildinfo.pl
+msgid ""
+"Options:\n"
+" --build=<type>[,...] specify the build <type>: full, source, binary,\n"
+" any, all (default is 'full').\n"
+" -c<control-file> get control info from this file.\n"
+" -l<changelog-file> get per-version info from this file.\n"
+" -f<files-list-file> get .deb files list from this file.\n"
+" -F<changelog-format> force changelog format.\n"
+" -O[<buildinfo-file>] write to stdout (or <buildinfo-file>).\n"
+" -u<upload-files-dir> directory with files (default is '..').\n"
+" --always-include-kernel always include Build-Kernel-Version.\n"
+" --always-include-path always include Build-Path.\n"
+" --admindir=<directory> change the administrative directory.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+"Flaggor:\n"
+" --build=<typ>[,...] ange bygg-<typ>: full, source, binary,\n"
+" any, all (förval är 'full').\n"
+" -c<control-fil> hämta styrinfo från denna fil.\n"
+" -l<changelog-fil> hämta per-version-info från denna fil.\n"
+" -f<fillistefil> hämta .deb-fillista från denna fil.\n"
+" -F<ändringslogg-format> tvinga ändringsloggoformat.\n"
+" -O[<buildinfo-fil>] skriv till standard ut (eller <buildinfo-fil>).\n"
+" -u<insändnings-kat> katalog med filer (förval är '..').\n"
+" --always-include-kernel inkludera alltid Build-Kernel-Version.\n"
+" --always-include-path inkludera alltid Build-Path.\n"
+" --admindir=<katalog> ändra administrativ katalog.\n"
+" -?, --help visa detta hjälpmeddelande.\n"
+" --version visa versionsnummer.\n"
+
+#: scripts/dpkg-genbuildinfo.pl
+msgid "binary build with no binary artifacts found; .buildinfo is meaningless"
+msgstr "binärbygge utan binära artifakter upptäckt; .buildinfo är meningslös"
+
+#: scripts/dpkg-genbuildinfo.pl
+#, perl-format
+msgid "cannot install output buildinfo file '%s'"
+msgstr "kan inte installera skapad buildinfo-fil \"%s\""
+
+#: scripts/dpkg-genchanges.pl
+msgid ""
+"Options:\n"
+" --build=<type>[,...] specify the build <type>: full, source, binary,\n"
+" any, all (default is 'full').\n"
+" -g source and arch-indep build.\n"
+" -G source and arch-specific build.\n"
+" -b binary-only, no source files.\n"
+" -B binary-only, only arch-specific files.\n"
+" -A binary-only, only arch-indep files.\n"
+" -S source-only, no binary files.\n"
+" -c<control-file> get control info from this file.\n"
+" -l<changelog-file> get per-version info from this file.\n"
+" -f<files-list-file> get .deb files list from this file.\n"
+" -v<since-version> include all changes later than version.\n"
+" -C<changes-description> use change description from this file.\n"
+" -m<maintainer> override control's maintainer value.\n"
+" -e<maintainer> override changelog's maintainer value.\n"
+" -u<upload-files-dir> directory with files (default is '..').\n"
+" -si source includes orig, if new upstream (default).\n"
+" -sa source includes orig, always.\n"
+" -sd source is diff and .dsc only.\n"
+" -q quiet - no informational messages on stderr.\n"
+" -F<changelog-format> force changelog format.\n"
+" -V<name>=<value> set a substitution variable.\n"
+" -T<substvars-file> read variables here, not debian/substvars.\n"
+" -D<field>=<value> override or add a field and value.\n"
+" -U<field> remove a field.\n"
+" -O[<filename>] write to stdout (default) or <filename>.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+"Flaggor:\n"
+" --build=<typ>[,...] ange bygg-<typ>: full, source, binary, any, all\n"
+" (förval är 'full').\n"
+" -g bygg källkod och arkitekturoberoende.\n"
+" -G bygg källkod och arkitekturspecifikt.\n"
+" -b endast binär, inga källkodsfiler.\n"
+" -B endast binär, endast arkitekturspecifika filer.\n"
+" -A endast binär, endast arkitekturoberoende filer.\n"
+" -S endast källkod, inga binärfiler.\n"
+" -c<control-fil> hämta styrinformation från denna fil.\n"
+" -l<ändringsloggfil> hämta per-version-information från denna fil.\n"
+" -f<fillistfil> hämta .deb-fillistan från denna fil.\n"
+" -v<sedanversion> ta med alla ändringar senare än denna version.\n"
+" -C<ändringsbeskrivning> använd ändringsbeskrivning från denna fil.\n"
+" -m<ansvarig> överstyr ansvarigvärde från styrfilen.\n"
+" -e<ansvarig> överstyr ansvarigvärde från ändringsloggen.\n"
+" -u<insändningskatalog> katalog med filer (förval är \"..\").\n"
+" -si källkod har orig, om ny uppströms (förval).\n"
+" -sa källkod har orig, alltid.\n"
+" -sd källkod är diff och endast .dsc.\n"
+" -q tyst - inga informationsmeddelanden på std fel.\n"
+" -F<ändringsloggformat> tvinga ändringsloggformat.\n"
+" -V<namn>=<värde> ställ in en substitueringsvariabel.\n"
+" -T<substvars-fil> läs variabler härifrån, inte debian/substvars.\n"
+" -D<fält>=<värde> överstyr eller lägg till ett fält eller värde.\n"
+" -U<fält> ta bort ett fält.\n"
+" -O[<filnamn>] skriv till standard ut (förval) eller <filnamn>.\n"
+" -?, --help visa detta hjälpmeddelande.\n"
+" --version visa versionsnummer.\n"
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "the current version (%s) is earlier than the previous one (%s)"
+msgstr "aktuell version (%s) är tidigare än den föregående (%s)"
+
+#: scripts/dpkg-genchanges.pl
+msgid "missing Section for source files"
+msgstr "\"Section\" saknas för källfiler"
+
+#: scripts/dpkg-genchanges.pl
+msgid "missing Priority for source files"
+msgstr "\"Priority\" saknas för källfiler"
+
+#: scripts/dpkg-genchanges.pl scripts/Dpkg/Vendor.pm
+#, perl-format
+msgid "%s is empty"
+msgstr "%s är tom"
+
+#: scripts/dpkg-genchanges.pl
+msgid "not including original source code in upload"
+msgstr "tar inte med ursprunglig källkod i denna insändning"
+
+#: scripts/dpkg-genchanges.pl
+msgid "ignoring -sd option for native Debian package"
+msgstr "ignorerar flaggan -sd för Debianspecifikt paket"
+
+#: scripts/dpkg-genchanges.pl
+msgid "including full source code in upload"
+msgstr "sänder med komplett källkod med denna insändning"
+
+#: scripts/dpkg-genchanges.pl
+msgid ""
+"binary-only arch-specific upload (source code and arch-indep packages not "
+"included)"
+msgstr ""
+"endast binär arkitekturspecifik insändning (inkluderar ej källkod och ark-"
+"ober. paket)"
+
+#: scripts/dpkg-genchanges.pl
+msgid ""
+"binary-only arch-indep upload (source code and arch-specific packages not "
+"included)"
+msgstr ""
+"endast binär arkitekturoberoende insändning (inkluderar ej källkod och ark-"
+"spec. paket)"
+
+#: scripts/dpkg-genchanges.pl
+msgid "binary-only upload (no source code included)"
+msgstr "endast binär insändning (inkluderar ej källkod)"
+
+#: scripts/dpkg-genchanges.pl
+msgid "binary build with no binary artifacts found; cannot distribute"
+msgstr "binärbygge utan binära artifakter upptäckt; kan inte distribuera"
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "package %s in control file but not in files list"
+msgstr "paketet %s i styrinfofilen men inte i fillistfilen"
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "package %s listed in files list but not in control info"
+msgstr "paketet %s listat i fillista men inte i styrinfo"
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "missing Section for binary package %s; using '-'"
+msgstr "\"Section\" saknas för binärpaket %s; använder \"-\""
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "package %s has section %s in control file but %s in files list"
+msgstr "paketet %s har sektionen %s i styrinfofilen men %s i fillistan"
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "missing Priority for binary package %s; using '-'"
+msgstr "\"Priority\" saknas för binärpaketet %s; använder \"-\""
+
+#: scripts/dpkg-genchanges.pl
+#, perl-format
+msgid "package %s has priority %s in control file but %s in files list"
+msgstr "paketet %s har prioritet %s i styrfilen men %s i fillistan"
+
+#: scripts/dpkg-genchanges.pl scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "missing information for critical output field %s"
+msgstr "saknar information för kritiskt utdatafält %s"
+
+#: scripts/dpkg-genchanges.pl scripts/dpkg-gencontrol.pl
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "missing information for output field %s"
+msgstr "saknar information för utdatafält %s"
+
+#: scripts/dpkg-gencontrol.pl
+msgid ""
+"Options:\n"
+" -p<package> print control file for package.\n"
+" -c<control-file> get control info from this file.\n"
+" -l<changelog-file> get per-version info from this file.\n"
+" -F<changelog-format> force changelog format.\n"
+" -v<force-version> set version of binary package.\n"
+" -f<files-list-file> write files here instead of debian/files.\n"
+" -P<package-build-dir> temporary build directory instead of debian/tmp.\n"
+" -n<filename> assume the package filename will be <filename>.\n"
+" -O[<file>] write to stdout (or <file>), not .../DEBIAN/"
+"control.\n"
+" -is, -ip, -isp, -ips deprecated, ignored for compatibility.\n"
+" -D<field>=<value> override or add a field and value.\n"
+" -U<field> remove a field.\n"
+" -V<name>=<value> set a substitution variable.\n"
+" -T<substvars-file> read variables here, not debian/substvars.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+"Flaggor:\n"
+" -p<paket> skriv styrfil för paket.\n"
+" -c<styrfil> hämta styrinfo från filen.\n"
+" -l<ändringsloggfil> hämta info per version från filen.\n"
+" -F<ändringsloggformat> tvinga ändringsloggformat.\n"
+" -v<tvingaversion> sätt version på binärpaket.\n"
+" -f<fillistefil> skriv filer här istället för debian/files.\n"
+" -P<paketbyggkatalog> temporär byggkatalog istället för debian/tmp.\n"
+" -n<filnamn> anta att paketfilnamnet kommer vara <filnamn>.\n"
+" -O[<fil>] skriv till standard ut/<fil>, ej .../DEBIAN/"
+"control.\n"
+" -is, -ip, -isp, -ips avråds, ignoreras för kompatibilitet.\n"
+" -D<fält>=<värde> överstyr eller lägg till ett fält och värde.\n"
+" -U<fält> ta bort ett fält.\n"
+" -V<namn>=<värde> sätt en substitueringsvariabel.\n"
+" -T<substvars-fil> läs variabler här, inte debian/substvars.\n"
+" -?, --help visa detta hjälpmeddelande.\n"
+" --version visa versionsnummer.\n"
+
+#: scripts/dpkg-gencontrol.pl scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "illegal package name '%s': %s"
+msgstr "ogiltigt paketnamn \"%s\": %s"
+
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid "package %s not in control info"
+msgstr "paketet %s inte i styrinfo"
+
+#: scripts/dpkg-gencontrol.pl scripts/dpkg-gensymbols.pl
+msgid "no package stanza found in control info"
+msgstr "paketstrof saknas i styrinfo"
+
+#: scripts/dpkg-gencontrol.pl scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "must specify package since control info has many (%s)"
+msgstr "måste ange paket eftersom styrinfo har flera (%s)"
+
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid "package %s: "
+msgstr "paketet %s: "
+
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid ""
+"current host architecture '%s' does not appear in package '%s' architecture "
+"list (%s)"
+msgstr ""
+"den aktuella värdarkitekturen \"%s\" finns inte i paketet \"%s\":s "
+"arkitekturlista (%s)"
+
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid "%s field of package %s: "
+msgstr "%s-fältet i paketet %s: "
+
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid "parsing package '%s' %s field: %s"
+msgstr "tolkar paketet \"%s\":s fält %s: %s"
+
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid ""
+"the %s field contains an arch-specific dependency but the package '%s' is "
+"architecture all"
+msgstr ""
+"fältet %s innehåller ett arkitekturspecifikt beroende, men paketet\"%s\" är "
+"för alla arkitekturer"
+
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid "%s package '%s' with udeb specific field %s"
+msgstr "%s-paket \"%s\" med udeb-specifikt fält %s"
+
+#: scripts/dpkg-gencontrol.pl scripts/Dpkg/Source/Package.pm
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot stat %s"
+msgstr "kan inte ta status på %s"
+
+#: scripts/dpkg-gencontrol.pl
+#, perl-format
+msgid "cannot install output control file '%s'"
+msgstr "kan inte installera utdatastyrfil \"%s\""
+
+#: scripts/dpkg-gensymbols.pl
+msgid ""
+"Options:\n"
+" -l<library-path> add directory to private shared library search "
+"list.\n"
+" -p<package> generate symbols file for package.\n"
+" -P<package-build-dir> temporary build directory instead of debian/tmp.\n"
+" -e<library> explicitly list libraries to scan.\n"
+" -v<version> version of the packages (defaults to\n"
+" version extracted from debian/changelog).\n"
+" -c<level> compare generated symbols file with the "
+"reference\n"
+" template in the debian directory and fail if\n"
+" difference is too important; level goes from 0 "
+"for\n"
+" no check, to 4 for all checks (default level is "
+"1).\n"
+" -q keep quiet and never emit any warnings or\n"
+" generate a diff between generated symbols\n"
+" file and the reference template.\n"
+" -I<file> force usage of <file> as reference symbols\n"
+" file instead of the default file.\n"
+" -O[<file>] write to stdout (or <file>), not .../DEBIAN/"
+"symbols.\n"
+" -t write in template mode (tags are not\n"
+" processed and included in output).\n"
+" -V verbose output; write deprecated symbols and "
+"pattern\n"
+" matching symbols as comments (in template mode "
+"only).\n"
+" -a<arch> assume <arch> as host architecture when "
+"processing\n"
+" symbol files.\n"
+" -d display debug information during work.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+"Flaggor:\n"
+" -l<bibliotekssökväg> lägg till katalog till privat söklista för delade "
+"bibliotek.\n"
+" -p<paket> skapar symbolfil för paket.\n"
+" -P<paketbyggkatalog> temporär byggkatalog istället för debian/tmp.\n"
+" -e<bibliotek> explicit lista över bibliotek att söka i.\n"
+" -v<version> version på paketet (förval är versionen\n"
+" som utläses ur debian/changelog).\n"
+" -c<nivå> jämför genererade symbolfiler med referensfilen\n"
+" i katalogen \"debian\" och misslyckas om "
+"skillnaderna\n"
+" är för stora; nivå går från 0 för ingen test, "
+"till\n"
+" 4 för alla tester (förvald nivå är 1).\n"
+" -q var tyst och skriv aldrig ut några varningar "
+"eller\n"
+" generera en diff mellan genererad symbolfil och\n"
+" referensfilen.\n"
+" -I<fil> tvinga användning av <fil> som symbolreferensfil\n"
+" istället för standardfilen.\n"
+" -O[<fil>] skriv till standard ut/<fil>, inte .../DEBIAN/"
+"symbols.\n"
+" -t skriv i malläge (taggar behandlas inte och\n"
+" tas med i utdata).\n"
+" -V pratsam utdata; skriv föråldrade symboler och\n"
+" mönster som motsvarar symboler som kommentarer\n"
+" (endast i mall-läget).\n"
+" -a<ark> förutsätt <ark> som värdarkitektur vid "
+"behandling\n"
+" av symbofilen.\n"
+" -d visa felsökningsinformation under körnng.\n"
+" -?, --help visa detta hjälpmeddelande.\n"
+" --version visa versionsnummer.\n"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "pattern '%s' did not match any file"
+msgstr "mönstret \"%s\" motsvarade inte någon fil"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "can't read directory %s: %s"
+msgstr "kan inte läsa katalogen %s: %s"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "Dpkg::Shlibs::Objdump couldn't parse %s\n"
+msgstr "Dpkg::Shlips::Objdump kunde inte tolka %s\n"
+
+#: scripts/dpkg-gensymbols.pl
+msgid "<standard output>"
+msgstr "<standard ut>"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "new libraries appeared in the symbols file: %s"
+msgstr "nya bibliotek dök upp i symbolfilen: %s"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "some libraries disappeared in the symbols file: %s"
+msgstr "några bibliotek försvann ur symbolfilen: %s"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "some new symbols appeared in the symbols file: %s"
+msgstr "några nya symboler dök upp i symbolfilen: %s"
+
+#: scripts/dpkg-gensymbols.pl
+msgid "see diff output below"
+msgstr "se diff-utdata nedan"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "some symbols or patterns disappeared in the symbols file: %s"
+msgstr "några symboler eller mönster försvann ur symbolfilen: %s"
+
+#: scripts/dpkg-gensymbols.pl
+msgid "the generated symbols file is empty"
+msgstr "den genererade \"symbols\"-filen är tom"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "%s doesn't match completely %s"
+msgstr "%s stämmer inte helt överens med %s"
+
+#: scripts/dpkg-gensymbols.pl
+#, perl-format
+msgid "no debian/symbols file used as basis for generating %s"
+msgstr "använde ingen debian/symbols-fil som grund för att generera %s"
+
+#: scripts/dpkg-mergechangelogs.pl
+msgid ""
+"This is free software; see the GNU General Public License version 2 or\n"
+"later for copying conditions. There is NO warranty.\n"
+msgstr ""
+"Detta program är fri programvara. Se GNU General Public License version 2\n"
+"eller senare för kopieringsvillkor. Det finns INGEN garanti.\n"
+
+#: scripts/dpkg-mergechangelogs.pl
+#, perl-format
+msgid ""
+"Usage: %s [<option>...] <old> <new-a> <new-b> [<out>]\n"
+"\n"
+"Options:\n"
+" -m, --merge-prereleases merge pre-releases together, ignores everything\n"
+" after the last '~' in the version.\n"
+" --merge-unreleased merge UNRELEASED entries together, ignoring "
+"their\n"
+" version numbers.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+"Användning: %s [<flagga>...] <gammal> <ny-a> <ny-b> [<ut>]\n"
+"\n"
+"Flaggor:\n"
+" -m, --merge-prereleases slå ihop förhandsutgåvor, ignorerar allt\n"
+" efter sista \"~\" i versionsnumret.\n"
+" --merge-unreleased slå ihop UNRELEASED-poster, ignorerar deras\n"
+" versionsnummer.\n"
+" -?, --help visa detta hjälpmeddelande.\n"
+" --version visa versionsnummer.\n"
+
+#: scripts/dpkg-mergechangelogs.pl
+msgid "needs at least three arguments"
+msgstr "behöver åtminstone tre argument"
+
+#: scripts/dpkg-mergechangelogs.pl
+msgid "file arguments need to exist"
+msgstr "filargument måste finnas"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "Usage: %s [<option>...] <file>...\n"
+msgstr "Användning: %s [<flagga>...] <fil>...\n"
+
+#: scripts/dpkg-name.pl
+msgid ""
+"\n"
+"Options:\n"
+" -a, --no-architecture no architecture part in filename.\n"
+" -o, --overwrite overwrite if file exists.\n"
+" -k, --symlink don't create a new file, but a symlink.\n"
+" -s, --subdir [dir] move file into subdirectory (use with care).\n"
+" -c, --create-dir create target directory if not there (use with "
+"care).\n"
+" -?, --help show this help message.\n"
+" -v, --version show the version.\n"
+"\n"
+"file.deb changes to <package>_<version>_<architecture>.<package_type>\n"
+"according to the 'underscores convention'.\n"
+msgstr ""
+"\n"
+"Flaggor:\n"
+" -a, --no-architecture ingen arkitekturdel i filnamn.\n"
+" -o, --overwrite skriv över om fil finns.\n"
+" -k, --symlink skapa symbolisk länk, inte ny fil.\n"
+" -s, --subdir [kat] flytta fil till underkatalog (visa varsamhet).\n"
+" -c, --create-dir skapa målkatalog om den inte finns (visa "
+"varsamhet).\n"
+" -?, --help visa detta hjälpmeddelande.\n"
+" -v, --version visa versionsnummer.\n"
+"\n"
+"fil.deb ändras till <paket>_<version>_<arkitektur>.<pakettyp>\n"
+"enligt \"understreckskonventionen\".\n"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "cannot find '%s'"
+msgstr "kan inte hitta %s"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "binary control file %s"
+msgstr "binär styrfil %s"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "assuming architecture '%s' for '%s'"
+msgstr "antar arkitekturen \"%s\" för \"%s\""
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "bad package control information for '%s'"
+msgstr "felaktig paketstyrinformation för %s."
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "assuming section '%s' for '%s'"
+msgstr "antar sektionen \"%s\" för \"%s\""
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "no Package field found in '%s', skipping package"
+msgstr "inget Package-fält hittades i \"%s\", hoppar över paketet"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "created directory '%s'"
+msgstr "skapade katalogen \"%s\""
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "cannot create directory '%s'"
+msgstr "kan inte skapa katalogen \"%s\""
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "no such directory '%s', try --create-dir (-c) option"
+msgstr "katalogen \"%s\" finns inte, försök med flaggan --create-dir (-c)"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "skipping '%s'"
+msgstr "hoppar över \"%s\""
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "cannot move '%s' to existing file"
+msgstr "kan inte flytta \"%s\" till befintlig fil"
+
+#: scripts/dpkg-name.pl
+#, perl-format
+msgid "moved '%s' to '%s'"
+msgstr "flyttade \"%s\" till \"%s\""
+
+#: scripts/dpkg-name.pl
+msgid "mkdir can be used to create directory"
+msgstr "mkdir kan användas för att skapa katalogen"
+
+#: scripts/dpkg-name.pl
+msgid "need at least a filename"
+msgstr "behöver minst ett filnamn"
+
+#: scripts/dpkg-parsechangelog.pl
+msgid ""
+"Options:\n"
+" -l, --file <changelog-file>\n"
+" get per-version info from this file.\n"
+" -F <changelog-format> force changelog format.\n"
+" -S, --show-field <field> show the values for <field>.\n"
+" -?, --help show this help message.\n"
+" --version show the version."
+msgstr ""
+"Flaggor:\n"
+" -l, --file <ändringsloggfil>\n"
+" hämta information per version från filen.\n"
+" -F <ändringsloggformat> tvinga ändringsloggformat.\n"
+" -S, --show-field <fält> visa värden för <fält>.\n"
+" -?, --help visa detta hjälpmeddelande.\n"
+" --version visa versionsnumret."
+
+#: scripts/dpkg-parsechangelog.pl
+msgid ""
+"Parser options:\n"
+" --format <output-format>\n"
+" set output format (defaults to 'dpkg').\n"
+" --reverse include all changes in reverse order.\n"
+" --all include all changes.\n"
+" -s, --since <version> include all changes later than <version>.\n"
+" -v <version> ditto.\n"
+" -u, --until <version> include all changes earlier than <version>.\n"
+" -f, --from <version> include all changes equal or later than "
+"<version>.\n"
+" -t, --to <version> include all changes up to or equal than "
+"<version>.\n"
+" -c, --count <number> include <number> entries from the top (or tail\n"
+" if <number> is lower than 0).\n"
+" -n <number> ditto.\n"
+" -o, --offset <number> change starting point for --count, counted from\n"
+" the top (or tail if <number> is lower than 0).\n"
+msgstr ""
+"Parserflaggor:\n"
+" --format <utdataformat>\n"
+" ange utdataformat (förval är \"dpkg\").\n"
+" --reverse ta med alla ändringar i omvänd ordning.\n"
+" --all ta med alla ändringar.\n"
+" -s, --since <version> ta med alla ändringar senare än <version>.\n"
+" -v <version> dito.\n"
+" -u, --until <version> ta med alla ändringar tidigare än <version>.\n"
+" -f, --from <version> ta med alla ändringar från och med <version>.\n"
+" -t, --to <version> ta med alla ändringar till och med <version>.\n"
+" -c, --count <antal> ta med <antal> poster från början (eller slutet\n"
+" om <antal> är lägre än 0)\n"
+" -o, --offset <antal> byt startpunkt för --count, räknat från början\n"
+" (eller slutet om <antal> är lägre än 0)\n"
+
+#: scripts/dpkg-parsechangelog.pl
+msgid "-L is obsolete; it is without effect"
+msgstr "-L är föråldrat; det har ingen effekt"
+
+#: scripts/dpkg-parsechangelog.pl
+msgid "bad changelog format name"
+msgstr "felaktigt namn på ändringsloggformat"
+
+#: scripts/dpkg-parsechangelog.pl
+msgid "missing changelog filename"
+msgstr "saknat ändringsloggfilnamn"
+
+#: scripts/dpkg-parsechangelog.pl
+msgid "takes no non-option arguments"
+msgstr "tar inga argument som inte är flaggor"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid ""
+"Usage: %s [<option>...] <binary-path> [<override-file> [<path-prefix>]] > "
+"Packages\n"
+"\n"
+"Options:\n"
+" -t, --type <type> scan for <type> packages (default is 'deb').\n"
+" -a, --arch <arch> architecture to scan for.\n"
+" -h, --hash <hash-list> only generate hashes for the specified list.\n"
+" -m, --multiversion allow multiple versions of a single package.\n"
+" -e, --extra-override <file>\n"
+" use extra override file.\n"
+" -M, --medium <medium> add X-Medium field for dselect media access "
+"method\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+msgstr ""
+"Användning: %s [<flagga> ...] <binärkatalog> [<överstyrfil> "
+"[<sökvägprefix>]] > Packages\n"
+"\n"
+"Flaggor:\n"
+" -t, --type <typ> sök efter <typ>-paket (förval är \"deb\").\n"
+" -a, --arch <ark> arkitektur att söka efter.\n"
+" -h, --hash <hashlista> generera bara hashar för den angivna listan.\n"
+" -m, --multiversion tillåt flera versioner av samma paket.\n"
+" -e, --extra-override <fil>\n"
+" använd extra överstyrningsfil.\n"
+" -M, --medium <medium> lägg till X-Medium-fält för dselects:s\n"
+" media-åtkomstmetod\n"
+" -?, --help visa detta hjälpmeddelande.\n"
+" --version visa versionsnummer.\n"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid " %s (package says %s, not %s)"
+msgstr " %s (paketet säger %s, inte %s)"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "unconditional maintainer override for %s"
+msgstr "ovillkorlig överstyrning från paketansvariga för %s"
+
+#: scripts/dpkg-scanpackages.pl scripts/dpkg-shlibdeps.pl scripts/Dpkg/IPC.pm
+#: scripts/Dpkg/Shlibs/Objdump.pm
+#, perl-format
+msgid "cannot fork for %s"
+msgstr "kan inte grena för %s"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "couldn't parse control information from %s"
+msgstr "kunde inte tolka styrinformation från %s"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "'dpkg-deb -I %s control' exited with %d, skipping package"
+msgstr "\"dpkg-deb -l %s control\" avslutades med %d, hoppar över paket"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "no Package field in control file of %s"
+msgstr "inget Package-fält i styrfilen för %s"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid ""
+"package %s (filename %s) is repeat but newer version; used that one and "
+"ignored data from %s!"
+msgstr ""
+"paketet %s (filnamn %s) repeterades men nyare version; använde den och "
+"ignorerade data från %s!"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid ""
+"package %s (filename %s) is repeat; ignored that one and using data from %s!"
+msgstr ""
+"paketet %s (filnamn %s) repeterades; ignorerade den och använde data från %s!"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "package %s (filename %s) has Filename field!"
+msgstr "paketet %s (filnamn %s) har Filename-fält!"
+
+#: scripts/dpkg-scanpackages.pl scripts/dpkg-scansources.pl
+msgid "one to three arguments expected"
+msgstr "ett till tre argument förväntades"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "unsupported checksum '%s'"
+msgstr "kontrollsumman \"%s\" stöds ej"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "binary path %s not found"
+msgstr "binärsökvägen %s hittades inte"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "override file %s not found"
+msgstr "överstyrningsfilen %s hittades inte"
+
+#: scripts/dpkg-scanpackages.pl
+msgid "failed when writing stdout"
+msgstr "misslyckades vid skrivning på standard ut"
+
+#: scripts/dpkg-scanpackages.pl
+msgid "couldn't close stdout"
+msgstr "kunde inte stänga standard ut"
+
+#: scripts/dpkg-scanpackages.pl
+msgid "Packages with multiple instances but no --multiversion specified:"
+msgstr "Paket med flera instanser men ingen --multiversion angavs:"
+
+#: scripts/dpkg-scanpackages.pl
+msgid "Packages in override file with incorrect old maintainer value:"
+msgstr "Paket i överstyrningsfilen med felaktigt värde på gammal ansvarig:"
+
+#: scripts/dpkg-scanpackages.pl
+msgid "Packages specifying same maintainer as override file:"
+msgstr "Paket som anger samma ansvarig i överstyrningsfilen:"
+
+#: scripts/dpkg-scanpackages.pl
+msgid "Packages in archive but missing from override file:"
+msgstr "Paket i arkivet men som saknas i överstyrningsfilen:"
+
+#: scripts/dpkg-scanpackages.pl
+msgid "Packages in override file but not in archive:"
+msgstr "Paket i överstyrningsfilen men inte i arkivet:"
+
+#: scripts/dpkg-scanpackages.pl
+#, perl-format
+msgid "Wrote %s entries to output Packages file."
+msgstr "Skrev %s poster till den skapade Packages-filen."
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid ""
+"Usage: %s [<option>...] <binary-path> [<override-file> [<path-prefix>]] > "
+"Sources\n"
+"\n"
+"Options:\n"
+" -n, --no-sort don't sort by package before outputting.\n"
+" -e, --extra-override <file>\n"
+" use extra override file.\n"
+" -s, --source-override <file>\n"
+" use file for additional source overrides, "
+"default\n"
+" is regular override file with .src appended.\n"
+" --debug turn debugging on.\n"
+" -?, --help show this help message.\n"
+" --version show the version.\n"
+"\n"
+"See the man page for the full documentation.\n"
+msgstr ""
+"Användning: %s [<flagga> ...] <binarkatalog> [<överstyrfil> "
+"[<sökvägprefix>]] > Sources\n"
+"\n"
+"Flaggor:\n"
+" -n, --no-sort sortera inte paket innan de skrivs ut.\n"
+" -e, --extra-override <fil>\n"
+" använd extra överstyrningsfil.\n"
+" -s, --source-override <fil>\n"
+" använd fil för ytterligare "
+"källkodsöverstyrningar,\n"
+" förval är vanliga överstyrningsfilen med tillägg\n"
+" .src.\n"
+" --debug slå på felsökning.\n"
+" -?, --help visa detta hjälpmeddelande.\n"
+" --version visa versionsnummer.\n"
+"\n"
+"Se manualsidan för fullständig dokumentation.\n"
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid "invalid override entry at line %d (%d fields)"
+msgstr "felaktig överstyrningspost på rad %d (%d fält)"
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid "ignoring duplicate override entry for %s at line %d"
+msgstr "ignorerar duplicerad överstyrningspost för %s på rad %d"
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid "ignoring override entry for %s, invalid priority %s"
+msgstr "ignorerar överstyrningspost för %s, ogiltig prioritet %s"
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid "invalid source override entry at line %d (%d fields)"
+msgstr "felaktig källkodsöverstyrningspost på rad %d (%d fält)"
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid "ignoring duplicate source override entry for %s at line %d"
+msgstr "ignorerar duplicerad källkodsöverstyrningspost för %s på rad %d"
+
+#: scripts/dpkg-scansources.pl
+#, perl-format
+msgid "no binary packages specified in %s"
+msgstr "inget binärpaket angivet i %s"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "administrative directory '%s' does not exist"
+msgstr "administrativ katalog \"%s\" finns inte"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "unrecognized dependency field '%s'"
+msgstr "okänt beroendefält \"%s\""
+
+#: scripts/dpkg-shlibdeps.pl
+msgid "need at least one executable"
+msgstr "behöver minst en binär"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid ""
+"cannot find library %s needed by %s (ELF format: '%s' abi: '%s'; RPATH: '%s')"
+msgstr ""
+"hittade inte biblioteket %s som behövs av %s (ELF-format: \"%s\" abi: "
+"\"%s\"; RPATH: \"%s\")"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "%s has an unexpected SONAME (%s)"
+msgstr "%s har ett oväntat SONAMN (%s)"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid ""
+"no dependency information found for %s (used by %s)\n"
+"Hint: check if the library actually comes from a package."
+msgstr ""
+"hittade ingen beroendeinformation för %s (använd av %s)\n"
+"Tips: se om biblioteket faktiskt kommer från ett paket."
+
+#: scripts/dpkg-shlibdeps.pl
+msgid ""
+"binaries to analyze should already be installed in their package's directory"
+msgstr ""
+"binärer som skall analyseras måste redan vara installerade i sitt pakets "
+"katalog"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "symbol %s used by %s found in none of the libraries"
+msgstr "symbolen %s, som används av %s, hittades inte i något av biblioteken"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid ""
+"%s contains an unresolvable reference to symbol %s: it's probably a plugin"
+msgstr ""
+"%s innehåller en referens till symbolen %s som inte kan kopplas; det är "
+"troligen ett insticksprogram"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "%d similar warning has been skipped (use -v to see it)"
+msgid_plural ""
+"%d other similar warnings have been skipped (use -v to see them all)"
+msgstr[0] ""
+"%d annan liknande varning har hoppats över (använd -v för att visa den)"
+msgstr[1] ""
+"%d andra liknande varningar har hoppats över (använd -v för att visa alla)"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid ""
+"%s should not be linked against %s (it uses none of the library's symbols)"
+msgstr ""
+"%s borde inte vara länkat mot %s (inga av symbolerna i biblioteket används)"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid ""
+"package could avoid a useless dependency if %s was not linked against %s (it "
+"uses none of the library's symbols)"
+msgid_plural ""
+"package could avoid a useless dependency if %s were not linked against %s "
+"(they use none of the library's symbols)"
+msgstr[0] ""
+"paketet kunde undvika ett onödigt beroende om %s inte länkades mot %s (det "
+"använder inget av bibliotekets symboler)"
+msgstr[1] ""
+"paketet kunde undvika ett onödigt beroende om %s inte länkades mot %s (de "
+"använder inget av bibliotekets symboler)"
+
+#: scripts/dpkg-shlibdeps.pl
+msgid ""
+"Note: libraries are not searched in other binary packages that do not have "
+"any shlibs or symbols file.\n"
+"To help dpkg-shlibdeps find private libraries, you might need to use -l."
+msgstr ""
+"Observera: andra binärpaket som inte har shlibs- eller symbols-filer söks "
+"inte genom efter bibliotek.\n"
+"För att hjälpa dpkg-shlibdeps att hitta privata bibliotek måste du kanske "
+"använda -l."
+
+#: scripts/dpkg-shlibdeps.pl
+msgid "cannot continue due to the error above"
+msgid_plural "cannot continue due to the errors listed above"
+msgstr[0] "kan inte fortsätta på grund av ovanstående fel"
+msgstr[1] "kan inte fortsätta på grund av ovanstående fel"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "invalid dependency got generated: %s"
+msgstr "ogiltigt beroende skapades: %s"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "install new varlist file '%s'"
+msgstr "installerar ny varlistefil \"%s\""
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "Usage: %s [<option>...] <executable>|-e<executable> [<option>...]"
+msgstr "Användning: %s [<flagga> ...] <binär>|-e<binär> [<flagga> ...]"
+
+#: scripts/dpkg-shlibdeps.pl
+msgid ""
+"Positional options (order is significant):\n"
+" <executable> include dependencies for <executable>,\n"
+" -e<executable> (use -e if <executable> starts with '-')\n"
+" -d<dependency-field> next executable(s) set shlibs:<dependency-field>."
+msgstr ""
+"Positionsberoende flaggor (ordningen har betydelse):\n"
+" <binär> ta med beroenden för <binär>,\n"
+" -e<binär> (använd -e om <binär> börjar med \"-\")\n"
+" -d<beroendefält> nästa binär(er) sätter shlibs:<beroendefält>."
+
+#: scripts/dpkg-shlibdeps.pl
+msgid ""
+"Options:\n"
+" -l<library-dir> add directory to private shared library search "
+"list.\n"
+" -p<varname-prefix> set <varname-prefix>:* instead of shlibs:*.\n"
+" -O[<file>] write variable settings to stdout (or <file>).\n"
+" -L<local-shlibs-file> shlibs override file, not debian/shlibs.local.\n"
+" -T<substvars-file> update variables here, not debian/substvars.\n"
+" -t<type> set package type (default is deb).\n"
+" -x<package> exclude package from the generated dependencies.\n"
+" -S<package-build-dir> search needed libraries in the given\n"
+" package build directory first.\n"
+" -I<package-build-dir> ignore needed libraries, shlibs and symbols "
+"files\n"
+" in the given build directory.\n"
+" -v enable verbose mode (can be used multiple "
+"times).\n"
+" --ignore-missing-info don't fail if dependency information can't be "
+"found.\n"
+" --warnings=<value> define set of active warnings (see manual page).\n"
+" --admindir=<directory> change the administrative directory.\n"
+" -?, --help show this help message.\n"
+" --version show the version."
+msgstr ""
+"Flaggor:\n"
+" -l<bibliotekskatalog> lägg till katalog i privat sökvägslista för "
+"delade\n"
+" bibliotek.\n"
+" -p<varnamnprefix> sätt <varnamnprefix>:* istället för shlibs:*.\n"
+" -O[<fil>] skriv variabelinställningar till standard ut/"
+"fil.\n"
+" -L<lokalshlibsfil> shlibs-överstyrningsfil, inte debian/shlibs."
+"local.\n"
+" -T<varlistfil> uppdatera variabler här, inte debian/substvars.\n"
+" -t<typ> sätt pakettyp (förval är deb).\n"
+" -x<paket> uteslut ett paket från skapade beroenden.\n"
+" -S<paketbyggkatalog> sök efter nödvändiga bibliotek i den givna\n"
+" paketbyggkatalogen först.\n"
+" -I<paketbyggkatalog> ignorera nödvändiga bibliotek, shlibs och symbols-"
+"filer\n"
+" i den givna byggkatalogen.\n"
+" -v aktivera pratsamt läge (kan anges flera gånger).\n"
+" --ignore-missing-info misslyckas inte om beroendeinformationen inte "
+"hittas.\n"
+" --warnings=<värde> ange uppsätning aktiva varningar (se "
+"manualsida).\n"
+" --admindir=<katalog> ändra den administrativa katalogen.\n"
+" -?, --help visa detta hjälpmeddelande.\n"
+" --version visa versionsnummer."
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid ""
+"Dependency fields recognized are:\n"
+" %s\n"
+msgstr ""
+"Beroendefält som stöds är:\n"
+" %s\n"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "can't extract name and version from library name '%s'"
+msgstr "kan inte extrahera namn och version från biblioteksnamnet \"%s\""
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "unable to open shared libs info file '%s'"
+msgstr "kunde inte öppna informationsfil för delade bibliotek \"%s\""
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "shared libs info file '%s' line %d: bad line '%s'"
+msgstr ""
+"informationsfilen för delade bibliotek \"%s\" rad %d: felaktig rad \"%s\""
+
+#: scripts/dpkg-shlibdeps.pl scripts/Dpkg/Changelog/Parse.pm
+#: scripts/Dpkg/Checksums.pm
+#, perl-format
+msgid "cannot open file %s"
+msgstr "kan inte öppna filen %s"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid ""
+"$ORIGIN is used in RPATH of %s and the corresponding directory could not be "
+"identified due to lack of DEBIAN sub-directory in the root of package's "
+"build tree"
+msgstr ""
+"$ORIGIN används i RPATH för %s och motsvarande katalog kunde inte "
+"identifieras på grund av DEBIAN-underkatalogen saknas i roten av paketets "
+"byggträd"
+
+#: scripts/dpkg-shlibdeps.pl
+msgid "diversions involved - output may be incorrect"
+msgstr "omdirigeringar finns - utdata kan vara felaktiga"
+
+#: scripts/dpkg-shlibdeps.pl
+msgid "write diversion info to stderr"
+msgstr "skriv omdirigeringsinformation på standard fel"
+
+#: scripts/dpkg-shlibdeps.pl
+#, perl-format
+msgid "unknown output from dpkg --search: '%s'"
+msgstr "okända utdata från dpkg --search: \"%s\""
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "--%s needs a directory"
+msgstr "--%s behöver en katalog"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "cannot stat directory %s"
+msgstr "kan inte ta status på katalogen %s"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "directory argument %s is not a directory"
+msgstr "katalogargumentet %s är inte en katalog"
+
+#: scripts/dpkg-source.pl scripts/Dpkg/Source/BinaryFiles.pm
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "unable to chdir to '%s'"
+msgstr "kan inte byta katalog till \"%s\""
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "using options from %s: %s"
+msgstr "använder flaggor från %s: %s"
+
+#: scripts/dpkg-source.pl scripts/Dpkg/Compression.pm
+#, perl-format
+msgid "%s is not a supported compression"
+msgstr "%s är inte en komprimering som stöds"
+
+#: scripts/dpkg-source.pl scripts/Dpkg/Compression.pm
+#, perl-format
+msgid "%s is not a compression level"
+msgstr "%s är inte en komprimeringsnivå"
+
+#: scripts/dpkg-source.pl
+msgid "-E and -W are deprecated, they are without effect"
+msgstr "-E och -W rekommenderas ej, de har ingen effekt"
+
+#: scripts/dpkg-source.pl scripts/dpkg-vendor.pl
+msgid "need an action option"
+msgstr "åtgärd krävs"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "no source format specified in %s, see dpkg-source(1)"
+msgstr "källkodsformat ej angivet i %s, se dpkg-source(1)"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "%s doesn't contain any information about the source package"
+msgstr "%s innehåller inte någon information om källkodspaketet"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "'%s' is not a legal architecture string in package '%s'"
+msgstr "\"%s\" är inte en giltig arkitektursträng i paketet \"%s\""
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "architecture %s only allowed on its own (list for package %s is '%s')"
+msgstr "arkitektur %s tillåts inte ensamt (listan för paketet %s är \"%s\")"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "%s doesn't list any binary package"
+msgstr "%s räknar inte upp några binärpaket"
+
+#: scripts/dpkg-source.pl
+msgid "building source for a binary-only release"
+msgstr "bygger källkod för utgåva med endast binär"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "can't build with source format '%s': %s"
+msgstr "kan inte bygga med källkodsformatet \"%s\": %s"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "using source format '%s'"
+msgstr "använder källkodsformatet \"%s\""
+
+#: scripts/dpkg-source.pl scripts/Dpkg/Source/Package/V1.pm
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Package/V3/Bzr.pm
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+#, perl-format
+msgid "building %s in %s"
+msgstr "bygger %s i %s"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "--%s needs at least one argument, the .dsc"
+msgstr "--%s behöver åtminstone ett argument, .dsc-filen"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "--%s takes no more than two arguments"
+msgstr "--%s tar maximalt två argument"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "--%s needs the .dsc file as first argument, not a directory"
+msgstr "--%s måste ha .dsc-filen som första argument, inte en katalog"
+
+#: scripts/dpkg-source.pl scripts/Dpkg/Source/Package/V1.pm
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Package/V3/Bzr.pm
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+#, perl-format
+msgid "unpack target exists: %s"
+msgstr "mål för uppackning finns redan: %s"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "%s doesn't contain a valid OpenPGP signature"
+msgstr "%s innehåller inte en giltig OpenPGP-signatur"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "extracting unsigned source package (%s)"
+msgstr "extraherar osignerat källkodspaket (%s)"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "extracting %s in %s"
+msgstr "extraherar %s i %s"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "test control %s is not a regular file"
+msgstr "testkontroll %s är inte en vanlig fil"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "%s field contains value %s, but no tests control file %s"
+msgstr "Fältet %s innehåller värdet %s, men ingen teststyrfil %s"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "test control %s is missing %s or %s field"
+msgstr "testkontroll %s saknar fältet %s eller %s"
+
+#: scripts/dpkg-source.pl
+msgctxt "source options"
+msgid "<none>"
+msgstr "<inget>"
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid "Usage: %s [<option>...] <command>"
+msgstr "Användning: %s [<flagga> ...] <åtgärd>"
+
+#: scripts/dpkg-source.pl
+msgid ""
+"Commands:\n"
+" -x, --extract <filename>.dsc [<output-dir>]\n"
+" extract source package.\n"
+" -b, --build <dir> build source package.\n"
+" --print-format <dir> print the format to be used for the source "
+"package.\n"
+" --before-build <dir> run the corresponding source package format "
+"hook.\n"
+" --after-build <dir> run the corresponding source package format "
+"hook.\n"
+" --commit [<dir> [<patch-name>]]\n"
+" store upstream changes in a new patch."
+msgstr ""
+"Åtgärder:\n"
+" -x, --extract <filnamn>.dsc [<utdatakatalog>]\n"
+" extrahera källkodspaket.\n"
+" -b, --build <kat> bygg källkodspaket.\n"
+" --print-format <kat> visa formatet som skulle användas för att bygga\n"
+" källkodspaketet.\n"
+" --before-build <kat> kör motsvarande källkodspaketformatkrok.\n"
+" --after-build <kat> kör motsvarande källkodspaketformatkrok.\n"
+" --commit [<kat> [<patch-namn>]]\n"
+" spara uppströmsändringar som en ny patch."
+
+#: scripts/dpkg-source.pl
+#, perl-format
+msgid ""
+"Build options:\n"
+" -c<control-file> get control info from this file.\n"
+" -l<changelog-file> get per-version info from this file.\n"
+" -F<changelog-format> force changelog format.\n"
+" --format=<source-format> set the format to be used for the source "
+"package.\n"
+" -V<name>=<value> set a substitution variable.\n"
+" -T<substvars-file> read variables here.\n"
+" -D<field>=<value> override or add a .dsc field and value.\n"
+" -U<field> remove a field.\n"
+" -i, --diff-ignore[=<regex>]\n"
+" filter out files to ignore diffs of\n"
+" (defaults to: '%s').\n"
+" -I, --tar-ignore[=<pattern>]\n"
+" filter out files when building tarballs\n"
+" (defaults to: %s).\n"
+" -Z, --compression=<compression>\n"
+" select compression to use (defaults to '%s',\n"
+" supported are: %s).\n"
+" -z, --compression-level=<level>\n"
+" compression level to use (defaults to '%d',\n"
+" supported are: '1'-'9', 'best', 'fast')"
+msgstr ""
+"Byggflaggor:\n"
+" -c<styrfil> hämta styrinfo från filen.\n"
+" -l<ändringsloggfil> hämta per version-information från denna fil.\n"
+" -F<ändringsloggformat> tvinga ändringsloggformat.\n"
+" --format=<källformat> sätt format att använda för källkodspaketet.\n"
+" -V<namn>=<värde> sätt en substitueringsvariabel.\n"
+" -T<substvars-fil> läs variabler här.\n"
+" -D<fält>=<värde> överstyr eller lägg till ett .dsc-fält och "
+"värde.\n"
+" -U<fält> ta bort ett fält.\n"
+" -i, --diff-ignore[=<reguttr>]\n"
+" filtrera ut filer att ignorera diffar från\n"
+" (förval: \"%s\").\n"
+" -I, --tar-ignore[=<mönster>]\n"
+" filtrera ut filer när tarboll byggs\n"
+" (förval: \"%s\").\n"
+" -Z, --compression=<komprimering>\n"
+" välj komprimering som skall användas (förval\n"
+" är \"%s\", värden som stöds: %s).\n"
+" -z, --compression-level=<nivå>\n"
+" komprimeringsnivå att använda (förval är\n"
+" \"%d\", värden som stöds: \"1\"-\"9\", "
+"\"best\", \"fast\")"
+
+#: scripts/dpkg-source.pl
+msgid ""
+"Extract options:\n"
+" --no-copy don't copy .orig tarballs\n"
+" --no-check don't check signature and checksums before "
+"unpacking\n"
+" --no-overwrite-dir do not overwrite directory on extraction\n"
+" --require-valid-signature abort if the package doesn't have a valid "
+"signature\n"
+" --require-strong-checksums\n"
+" abort if the package contains no strong "
+"checksums\n"
+" --ignore-bad-version allow bad source package versions."
+msgstr ""
+"Flaggor för uppackning:\n"
+" --no-copy kopiera inte .orig-tarbollar\n"
+" --no-check kolla inte signatur och kontrollsumma före "
+"uppackning\n"
+" --no-overwrite-dir skriv inte över katalog vid uppackning\n"
+" --require-valid-signature avbryt om paketet saknar giltig signatur\n"
+" --require-strong-checksums\n"
+" avbryt om paketet inte innehåller starka "
+"kontrollsummor\n"
+" --ignore-bad-version tillåt felaktiga versionsnummer i källkodspaket."
+
+#: scripts/dpkg-source.pl
+msgid ""
+"General options:\n"
+" --threads-max=<threads>\n"
+" use at most <threads> with compressor.\n"
+" -q quiet mode.\n"
+" -?, --help show this help message.\n"
+" --version show the version."
+msgstr ""
+"Allmänna flaggor:\n"
+" --threads-max=<trådar>\n"
+" använd som mest <trådar> för packare.\n"
+" -q tyst läge.\n"
+" -?, --help visa detta hjälpmeddelande.\n"
+" --version visa versionsnummer."
+
+#: scripts/dpkg-source.pl
+msgid ""
+"Source format specific build and extract options are available;\n"
+"use --format with --help to see them."
+msgstr ""
+"Källkodsformatspecifika bygg- och uppackningsflaggor är tillgängliga;\n"
+"använd --format tillsammans med --help för att se dem."
+
+#: scripts/dpkg-vendor.pl
+msgid ""
+"Commands:\n"
+" --is <vendor> returns true if current vendor is <vendor>.\n"
+" --derives-from <vendor> returns true if current vendor derives from "
+"<vendor>.\n"
+" --query <field> print the content of the vendor-specific field.\n"
+" --help show this help message.\n"
+" --version show the version."
+msgstr ""
+"Kommandon:\n"
+" --is <leverantör> sant om aktuell leverantör är <leverantör>.\n"
+" --derives-from <lev.> sant om aktuell leverantör härleds från <lev.>\n"
+" --query <fält> visa innehållet i leverantörsspecifikt fält.\n"
+" --help visa detta hjälpmeddelande.\n"
+" --version visa versionsnummer."
+
+#: scripts/dpkg-vendor.pl
+msgid ""
+"Options:\n"
+" --vendor <vendor> assume <vendor> is the current vendor."
+msgstr ""
+"Flaggor:\n"
+" --vendor <leverantör> anta att <leverantör> är aktuell leverantör."
+
+#: scripts/dpkg-vendor.pl
+#, perl-format
+msgid "vendor %s doesn't exist in %s"
+msgstr "leverantören %s finns inte i %s"
+
+#: scripts/Dpkg/Arch.pm
+msgid ""
+"cannot determine CC system type, falling back to default (native compilation)"
+msgstr ""
+"kunde inte bestämma CC-systemtyp, faller tillbaka på förval (lokal "
+"kompilering)"
+
+#: scripts/Dpkg/Arch.pm
+#, perl-format
+msgid "unknown CC system type %s, falling back to default (native compilation)"
+msgstr "okänd CC-systemtyp %s, faller tillbaka på förval (lokal kompilering)"
+
+#: scripts/Dpkg/Arch.pm
+#, perl-format
+msgid "'%s' is not a legal architecture in list '%s'"
+msgstr "\"%s\" är inte en giltig arkitektur i listan \"%s\""
+
+#: scripts/Dpkg/BuildFlags.pm scripts/Dpkg/Compression/FileHandle.pm
+#: scripts/Dpkg/File.pm scripts/Dpkg/Interface/Storable.pm
+#: scripts/Dpkg/Shlibs/Objdump.pm scripts/Dpkg/Source/BinaryFiles.pm
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "cannot read %s"
+msgstr "kan inte läsa %s"
+
+#: scripts/Dpkg/BuildFlags.pm
+#, perl-format
+msgid "line %d of %s mentions unknown flag %s"
+msgstr "rad %d i %s anger okänd flagga %s"
+
+#: scripts/Dpkg/BuildFlags.pm
+#, perl-format
+msgid "line %d of %s is invalid, it has been ignored"
+msgstr "rad %d i %s är ogiltig och har ignorerats"
+
+#: scripts/Dpkg/BuildOptions.pm
+#, perl-format
+msgid "invalid flag in %s: %s"
+msgstr "felaktig flagga i %s: %s"
+
+#: scripts/Dpkg/BuildOptions.pm
+#, perl-format
+msgid "unknown %s feature in %s variable: %s"
+msgstr "okänd funktion %s i variabeln %s: %s"
+
+#: scripts/Dpkg/BuildOptions.pm
+#, perl-format
+msgid "incorrect value in %s option of %s variable: %s"
+msgstr "felaktigt värde i flaggan %s i variabeln %s: %s"
+
+#: scripts/Dpkg/BuildTypes.pm
+#, perl-format
+msgid "cannot combine %s and %s"
+msgstr "kan inte kombinera %s och %s"
+
+#: scripts/Dpkg/BuildTypes.pm
+#, perl-format
+msgid "unknown build type %s"
+msgstr "okänd byggtyp %s"
+
+#: scripts/Dpkg/Changelog.pm
+#, perl-format
+msgid ""
+"%s(l%s): %s\n"
+"LINE: %s"
+msgstr ""
+"%s(l%s): %s\n"
+"RAD: %s"
+
+#: scripts/Dpkg/Changelog.pm
+#, perl-format
+msgid "%s(l%s): %s"
+msgstr "%s(l%s): %s"
+
+#: scripts/Dpkg/Changelog.pm
+msgid "'offset' without 'count' has no effect"
+msgstr "\"offset\" utan \"count\" har ingen effekt"
+
+#: scripts/Dpkg/Changelog.pm
+msgid "you can't combine 'count' or 'offset' with any other range option"
+msgstr ""
+"du kan inte kombinera \"count\" eller \"offset\" med andra intervallflaggor"
+
+#: scripts/Dpkg/Changelog.pm
+msgid "you can only specify one of 'from' and 'since', using 'since'"
+msgstr "du kan bara ange en av \"from\" och \"since\", använder \"since\""
+
+#: scripts/Dpkg/Changelog.pm
+msgid "you can only specify one of 'to' and 'until', using 'until'"
+msgstr "du kan bara ange en av \"to\" och \"until\", använder \"until\""
+
+#: scripts/Dpkg/Changelog.pm
+#, perl-format
+msgid "'%s' option specifies non-existing version '%s'"
+msgstr "\"%s\"-flaggan anger en icke-existerande version \"%s\""
+
+#: scripts/Dpkg/Changelog.pm
+msgid "use newest entry that is earlier than the one specified"
+msgstr "använd den nyaste post som är tidigare än den angivna"
+
+#: scripts/Dpkg/Changelog.pm
+msgid "none found, starting from the oldest entry"
+msgstr "hittade ingen, börjar från den äldsta posten"
+
+#: scripts/Dpkg/Changelog.pm
+msgid "use oldest entry that is later than the one specified"
+msgstr "använd den äldsta posten som är senare än den angivna"
+
+#: scripts/Dpkg/Changelog.pm
+#, perl-format
+msgid "no such entry found, ignoring '%s' parameter '%s'"
+msgstr "hittade ingen sådan post, ignorerar \"%s\"-parametern \"%s\""
+
+#: scripts/Dpkg/Changelog.pm
+#, perl-format
+msgid "'since' option specifies most recent version '%s', ignoring"
+msgstr "\"since\"-flaggan anger den senaste versionen \"%s\", ignorerar"
+
+#: scripts/Dpkg/Changelog.pm
+#, perl-format
+msgid "'until' option specifies oldest version '%s', ignoring"
+msgstr "\"until\"-flaggan anger den äldsta versionen \"%s\", ignorerar"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+msgid "first heading"
+msgstr "första rubrik"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+msgid "next heading or end of file"
+msgstr "nästa rubrik eller filslut"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+msgid "start of change data"
+msgstr "början på ändringsdata"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+msgid "more change data or trailer"
+msgstr "mer ändringsdata eller fot"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+#, perl-format
+msgid "found start of entry where expected %s"
+msgstr "hittade början på posten där %s förväntades"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+msgid "badly formatted heading line"
+msgstr "felaktigt formaterad rubrikrad"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+#, perl-format
+msgid "found trailer where expected %s"
+msgstr "hittade fot där %s förväntades"
+
+#: scripts/Dpkg/Changelog/Debian.pm scripts/Dpkg/Changelog/Entry/Debian.pm
+msgid "badly formatted trailer line"
+msgstr "felaktigt formaterad fotrad"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+#, perl-format
+msgid "found change data where expected %s"
+msgstr "hittade ändringsdata där %s förväntades"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+#, perl-format
+msgid "found blank line where expected %s"
+msgstr "hittade blank rad där %s förväntades"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+msgid "unrecognized line"
+msgstr "okänd rad"
+
+#: scripts/Dpkg/Changelog/Debian.pm
+#, perl-format
+msgid "found end of file where expected %s"
+msgstr "hittade filslut där %s förväntades"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "version '%s' is invalid: %s"
+msgstr "versionen \"%s\" är ogiltig: %s"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "bad key-value after ';': '%s'"
+msgstr "felaktigt nyckelvärde efter \";\": \"%s\""
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "repeated key-value %s"
+msgstr "repeterat nyckelvärde %s"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "badly formatted urgency value: %s"
+msgstr "felaktigt formaterat värde för \"urgency\": %s"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "bad binary-only value: %s"
+msgstr "felaktigt värde för endast binär: %s"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "unknown key-value %s"
+msgstr "okänt nyckelvärde %s"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+msgid "the header doesn't match the expected regex"
+msgstr "huvudet motsvarar inte det förväntat reguljärt uttryck"
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "ignoring invalid week day '%s'"
+msgstr "ignorerar ogiltig veckodag \"%s\""
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "uses full '%s' instead of abbreviated month name '%s'"
+msgstr "använder fullständing \"%s\" istället för förkortat månadsnamn \"%s\""
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "invalid abbreviated month name '%s'"
+msgstr "ogiltigt förkortat månadsnamn \"%s\""
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+#, perl-format
+msgid "cannot parse non-conformant date '%s'"
+msgstr "kan inte tolka felformaterat datum \"%s\""
+
+#: scripts/Dpkg/Changelog/Entry/Debian.pm
+msgid "the trailer doesn't match the expected regex"
+msgstr "filslutet motsvarar inte det förväntat reguljärt uttryck"
+
+#: scripts/Dpkg/Changelog/Parse.pm
+#, perl-format
+msgid "cannot seek into file %s"
+msgstr "kan inte söka inuti filen %s"
+
+#: scripts/Dpkg/Changelog/Parse.pm
+#, perl-format
+msgid "changelog format %s is unknown: %s"
+msgstr "ändringsloggformatet %s är okänt: %s"
+
+#: scripts/Dpkg/Changelog/Parse.pm
+#, perl-format
+msgid "changelog format %s is not a Dpkg::Changelog class"
+msgstr "ändringsloggformatet %s är inte en Dpkg::Changelog-klasss"
+
+#: scripts/Dpkg/Changelog/Parse.pm
+#, perl-format
+msgid "fatal error occurred while parsing %s"
+msgstr "ödesdigert fel vid tolkning av %s"
+
+#: scripts/Dpkg/Changelog/Parse.pm
+#, perl-format
+msgid "unknown output format %s"
+msgstr "okänd utdataformat %s"
+
+#: scripts/Dpkg/Checksums.pm
+#, perl-format
+msgid "cannot fstat file %s"
+msgstr "kan inte ta status (fstat) på filen %s"
+
+#: scripts/Dpkg/Checksums.pm
+#, perl-format
+msgid "file %s has size %u instead of expected %u"
+msgstr "filen %s har storleken %u istället för den förväntade %u"
+
+#: scripts/Dpkg/Checksums.pm
+#, perl-format
+msgid "file %s has checksum %s instead of expected %s (algorithm %s)"
+msgstr ""
+"filen %s har kontrollsumman %s istället för den förväntade %s (algoritm %s)"
+
+#: scripts/Dpkg/Checksums.pm
+#, perl-format
+msgid "invalid line in %s checksums string: %s"
+msgstr "ogiltigtrad i %s-kontrollsummesträng: %s"
+
+#: scripts/Dpkg/Checksums.pm
+#, perl-format
+msgid "conflicting checksums '%s' and '%s' for file '%s'"
+msgstr "motsägande kontrollsummor \"%s\" och \"%s\" för filen \"%s\""
+
+#: scripts/Dpkg/Checksums.pm
+#, perl-format
+msgid "conflicting file sizes '%u' and '%u' for file '%s'"
+msgstr "motsägande filstorlekar \"%u\" och \"%u\" för filen \"%s\""
+
+#: scripts/Dpkg/Compression.pm
+#, perl-format
+msgid "compression threads %s is not a number"
+msgstr "packartrådar %s är inte ett talvärde"
+
+#: scripts/Dpkg/Compression/Process.pm
+#, perl-format
+msgid "%s is not a supported compression method"
+msgstr "%s är inte en komprimeringsmetod som stöds"
+
+#: scripts/Dpkg/Compression/Process.pm
+msgid "Dpkg::Compression::Process can only start one subprocess at a time"
+msgstr "Dpkg::Compression::Process kan bara starta en underprocess åt gången"
+
+#: scripts/Dpkg/Conf.pm
+#, perl-format
+msgid "short option not allowed in %s, line %d"
+msgstr "kort flagga tillåts inte i %s, rad %d"
+
+#: scripts/Dpkg/Conf.pm
+#, perl-format
+msgid "invalid syntax for option in %s, line %d"
+msgstr "syntaxfel för flagga i %s, rad %d"
+
+#: scripts/Dpkg/Control.pm
+msgid "general section of control info file"
+msgstr "allmän sektion i styrinfofilen"
+
+#: scripts/Dpkg/Control.pm
+msgid "package's section of control info file"
+msgstr "paketets sektion av styrinfofilen"
+
+#: scripts/Dpkg/Control.pm
+msgid "parsed version of changelog"
+msgstr "tolkad version av ändringslogg"
+
+#: scripts/Dpkg/Control.pm
+msgid "header stanza of copyright file"
+msgstr "huvud-strof i copyright-filen"
+
+#: scripts/Dpkg/Control.pm
+msgid "files stanza of copyright file"
+msgstr "files-strof i copyright-filen"
+
+#: scripts/Dpkg/Control.pm
+msgid "license stanza of copyright file"
+msgstr "licens-strof i copyright-filen"
+
+#: scripts/Dpkg/Control.pm
+msgid "package's tests control file"
+msgstr "paketets test-styrinfofil"
+
+#: scripts/Dpkg/Control.pm
+#, perl-format
+msgid "repository's %s file"
+msgstr "förrådets %s-fil"
+
+#: scripts/Dpkg/Control.pm
+#, perl-format
+msgid "stanza in repository's %s file"
+msgstr "stycke i arkivets fil %s"
+
+#: scripts/Dpkg/Control.pm
+#, perl-format
+msgid "%s file"
+msgstr "filen %s"
+
+#: scripts/Dpkg/Control.pm
+msgid "control info of a .deb package"
+msgstr "styrinformationen i ett .deb-paket"
+
+#: scripts/Dpkg/Control.pm
+msgid "build information file"
+msgstr "bygginformationsfil"
+
+#: scripts/Dpkg/Control.pm
+msgid "vendor file"
+msgstr "distributörsfil"
+
+#: scripts/Dpkg/Control.pm
+msgid "stanza in dpkg's status file"
+msgstr "stycke i dpkg:s statusfil"
+
+#: scripts/Dpkg/Control/FieldsCore.pm
+#, perl-format
+msgid "unknown information field '%s' in input data in %s"
+msgstr "okänt informationsfält \"%s\" i indata i %s"
+
+#: scripts/Dpkg/Control/FieldsCore.pm
+msgid "control information"
+msgstr "styrinformation"
+
+#: scripts/Dpkg/Control/HashCore.pm
+#, perl-format
+msgid "syntax error in %s at line %d: %s"
+msgstr "syntaxfel i %s på rad %d: %s"
+
+#: scripts/Dpkg/Control/HashCore.pm
+msgid "field cannot start with a hyphen"
+msgstr "fält kan inte inledas med bindestreck"
+
+#: scripts/Dpkg/Control/HashCore.pm
+#, perl-format
+msgid "duplicate field %s found"
+msgstr "duplicerat fält %s hittades"
+
+#: scripts/Dpkg/Control/HashCore.pm
+msgid "continued value line not in field"
+msgstr "fortsatt värderad inte i fält"
+
+#: scripts/Dpkg/Control/HashCore.pm
+msgid "expected OpenPGP signature, found end of file after blank line"
+msgstr "förväntade OpenPGP-signatur, hittade filslut efter tomrad"
+
+#: scripts/Dpkg/Control/HashCore.pm
+#, perl-format
+msgid "expected OpenPGP signature, found something else '%s'"
+msgstr "förväntade OpenPGP-signatur, hittade något annat \"%s\""
+
+#: scripts/Dpkg/Control/HashCore.pm
+msgid "unfinished OpenPGP signature"
+msgstr "oavslutad OpenPGP-signatur"
+
+#: scripts/Dpkg/Control/HashCore.pm
+msgid "OpenPGP signature not allowed here"
+msgstr "OpenPGP-signatur tillåts inte här"
+
+#: scripts/Dpkg/Control/HashCore.pm
+msgid "line with unknown format (not field-colon-value)"
+msgstr "rad med okänt format (inte fält-kolon-värde)"
+
+#: scripts/Dpkg/Control/HashCore.pm
+msgid "write error on control data"
+msgstr "skrivfel i styrdata"
+
+#: scripts/Dpkg/Control/Info.pm
+#, perl-format
+msgid "first stanza lacks a '%s' field"
+msgstr "första stycket saknar \"%s\"-fält"
+
+#: scripts/Dpkg/Control/Info.pm
+#, perl-format
+msgid "stanza lacks the '%s' field"
+msgstr "stycket saknar fältet \"%s\""
+
+#: scripts/Dpkg/Control/Tests/Entry.pm
+#, perl-format
+msgid "stanza lacks either %s or %s fields"
+msgstr "stycket saknar antingen fältet %s eller %s"
+
+#: scripts/Dpkg/Deps.pm
+#, perl-format
+msgid "can't parse dependency %s"
+msgstr "kan inte tolka beroendet %s:"
+
+#: scripts/Dpkg/Deps.pm
+#, perl-format
+msgid "virtual dependency contains invalid relation: %s"
+msgstr "virtuellt beroende innehåller ogiltigt relation: %s"
+
+#: scripts/Dpkg/Deps.pm
+msgid "an union dependency can only contain simple dependencies"
+msgstr "ett unionsberoende kan endast innehålla enkla beroenden"
+
+#: scripts/Dpkg/Dist/Files.pm
+#, perl-format
+msgid "badly formed file name in files list file, line %d"
+msgstr "felformaterat filnamn i fillistfilen, rad %d"
+
+#: scripts/Dpkg/Dist/Files.pm
+#, perl-format
+msgid "badly formed line in files list file, line %d"
+msgstr "felformaterad rad i fillistfilen, rad %d"
+
+#: scripts/Dpkg/Dist/Files.pm
+#, perl-format
+msgid "duplicate files list entry for file %s (line %d)"
+msgstr "duplicerad fillistpost för filen %s (rad %d)"
+
+#: scripts/Dpkg/Dist/Files.pm
+#, perl-format
+msgid "cannot open directory %s"
+msgstr "kan inte öppna katalogen %s"
+
+#: scripts/Dpkg/Dist/Files.pm
+#, perl-format
+msgid "invalid filename %s"
+msgstr "ogiltigt filnamn %s"
+
+#: scripts/Dpkg/ErrorHandling.pm
+msgid "info"
+msgstr "info"
+
+#: scripts/Dpkg/ErrorHandling.pm
+msgid "notice"
+msgstr "meddelande"
+
+#: scripts/Dpkg/ErrorHandling.pm
+msgid "warning"
+msgstr "varning"
+
+#: scripts/Dpkg/ErrorHandling.pm
+msgid "error"
+msgstr "fel"
+
+#: scripts/Dpkg/ErrorHandling.pm
+#, perl-format
+msgid "%s subprocess returned exit status %d"
+msgstr "underprocessen %s returnerade felkod %d vid avslut"
+
+#: scripts/Dpkg/ErrorHandling.pm
+#, perl-format
+msgid "%s subprocess was killed by signal %d"
+msgstr "underprocessen %s dödades av signal %d"
+
+#: scripts/Dpkg/ErrorHandling.pm
+#, perl-format
+msgid "%s subprocess failed with unknown status code %d"
+msgstr "underprocessen %s misslyckades med okänd felkod %d"
+
+#: scripts/Dpkg/ErrorHandling.pm
+msgid "Use --help for program usage information."
+msgstr "Använd --help för hjälp om hur du använder programmet."
+
+#: scripts/Dpkg/File.pm
+#, perl-format
+msgid "cannot create file %s"
+msgstr "kan inte ta skapa filen %s"
+
+#: scripts/Dpkg/IPC.pm
+#, perl-format
+msgid "pipe for %s"
+msgstr "rör för %s"
+
+#: scripts/Dpkg/IPC.pm
+#, perl-format
+msgid "chdir to %s"
+msgstr "chdir till \"%s\""
+
+#: scripts/Dpkg/IPC.pm
+msgid "reopen stdin"
+msgstr "öppna standard in på nytt"
+
+#: scripts/Dpkg/IPC.pm
+msgid "reopen stdout"
+msgstr "öppna standard ut på nytt"
+
+#: scripts/Dpkg/IPC.pm
+msgid "child process"
+msgstr "barnprocess"
+
+#: scripts/Dpkg/IPC.pm
+#, perl-format
+msgid "wait for %s"
+msgstr "väntar på %s"
+
+#: scripts/Dpkg/IPC.pm
+#, perl-format
+msgid "%s didn't complete in %d second"
+msgid_plural "%s didn't complete in %d seconds"
+msgstr[0] "%s blev inte färdigt på %d sekund"
+msgstr[1] "%s blev inte färdigt på %d sekunder"
+
+#: scripts/Dpkg/Interface/Storable.pm
+msgid "<standard input>"
+msgstr "<standard in>"
+
+#: scripts/Dpkg/Lock.pm
+msgid "File::FcntlLock not available; using flock which is not NFS-safe"
+msgstr "File::FcntlLock ej tillgänglig; använder flock som inte är NFS-säkert"
+
+#: scripts/Dpkg/Lock.pm
+#, perl-format
+msgid "failed to get a write lock on %s"
+msgstr "misslyckades få ett skrivlås på %s"
+
+#: scripts/Dpkg/OpenPGP.pm
+#, perl-format
+msgid "unknown OpenPGP api requested %s"
+msgstr "okänt OpenPGP-API efterfrågades %s"
+
+#: scripts/Dpkg/OpenPGP.pm
+#, perl-format
+msgid "cannot load OpenPGP backend %s"
+msgstr "kan inte läsa in OpenPGP-program %s"
+
+#: scripts/Dpkg/OpenPGP.pm
+#, perl-format
+msgid "unknown OpenPGP backend %s"
+msgstr "okänt OpenPGP-program %s"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "success"
+msgstr "lyckades"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "no acceptable signature found"
+msgstr "ingen godtagbar signatur hittades"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "missing required argument"
+msgstr "saknat nödvändigt argument"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "unsupported option"
+msgstr "flaggan stöds inte"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "invalid data type"
+msgstr "ogiltig datatyp"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "non-text input where text expected"
+msgstr "icke-text där text förväntades"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "output file already exists"
+msgstr "utdatafilen finns redan"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "input file does not exist"
+msgstr "indatafilen finns inte"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "cannot unlock password-protected key"
+msgstr "kan inte låsa upp lösenordsskyddad nyckel"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "unsupported subcommand"
+msgstr "underkommandot stöds ej"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "key is not signature-capable"
+msgstr "nyckeln kan inte används för signering"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "missing OpenPGP implementation"
+msgstr "saknad OpenPGP-implementation"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+msgid "specified key needs a keystore"
+msgstr "angiven nyckel behöver ett nyckellager"
+
+#: scripts/Dpkg/OpenPGP/ErrorCodes.pm
+#, perl-format
+msgid "error code %d"
+msgstr "felkod %d"
+
+#: scripts/Dpkg/Package.pm
+msgid "may not be empty string"
+msgstr "får inte vara en tom sträng"
+
+#: scripts/Dpkg/Package.pm
+#, perl-format
+msgid "character '%s' not allowed"
+msgstr "tecknet \"%s\" är inte tillåtet"
+
+#: scripts/Dpkg/Package.pm
+msgid "must start with an alphanumeric character"
+msgstr "måste börja med ett alfanumeriskt tecken"
+
+#: scripts/Dpkg/Path.pm scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "pathname '%s' cannot be canonicalized"
+msgstr "sökvägsnamnet \"%s\" kan inte kanoniseras"
+
+#: scripts/Dpkg/Path.pm scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "pathname '%s' points outside source root (to '%s')"
+msgstr "sökvägsnamnet \"%s\" pekar till utanför källkodsroten (på \"%s\")"
+
+#: scripts/Dpkg/Shlibs.pm
+msgid ""
+"deprecated use of LD_LIBRARY_PATH with private library directory which "
+"interferes with cross-building, please use -l option instead"
+msgstr ""
+"ej rekommenderad användning av LD_LIBRARY_PATH med privat biblioteksktalog "
+"som stör kryssbyggning, använd flaggan -l istället"
+
+#: scripts/Dpkg/Shlibs.pm scripts/Dpkg/Shlibs/Objdump.pm
+#, perl-format
+msgid "unknown executable format in file '%s'"
+msgstr "okänt format på exekverbar fil \"%s\""
+
+#: scripts/Dpkg/Shlibs/Objdump.pm
+#, perl-format
+msgid "couldn't parse dynamic relocation record: %s"
+msgstr "kunde inte tolka dynamisk relokeringspost: %s"
+
+#: scripts/Dpkg/Shlibs/Objdump.pm
+#, perl-format
+msgid "couldn't parse dynamic symbol definition: %s"
+msgstr "kunde inte tolka definition av dynamisk symbol: %s"
+
+#: scripts/Dpkg/Shlibs/Symbol.pm
+#, perl-format
+msgid "symbol name unspecified: %s"
+msgstr "symbolnamn ej angivet: %s"
+
+#: scripts/Dpkg/Shlibs/Symbol.pm
+#, perl-format
+msgid "symver tag with versioned symbol will not match: %s"
+msgstr "symver-tagg med versionerad symbol kommer inte matcha: %s"
+
+#: scripts/Dpkg/Shlibs/Symbol.pm
+#, perl-format
+msgid "you can't use symver tag to catch unversioned symbols: %s"
+msgstr ""
+"du kan inte använda symver-taggen för att fånga symboler som inte är "
+"versionerade: %s"
+
+#: scripts/Dpkg/Shlibs/SymbolFile.pm
+#, perl-format
+msgid "symbol information must be preceded by a header (file %s, line %s)"
+msgstr "symbolinformation måste föregås av ett huvud (fil %s, rad %s)"
+
+#: scripts/Dpkg/Shlibs/SymbolFile.pm
+#, perl-format
+msgid "failed to parse line in %s: %s"
+msgstr "misslyckades att tolka en rad i %s: %s"
+
+#: scripts/Dpkg/Shlibs/SymbolFile.pm
+#, perl-format
+msgid "failed to parse a line in %s: %s"
+msgstr "misslyckades att tolka en rad i %s: %s"
+
+#: scripts/Dpkg/Shlibs/SymbolFile.pm
+#, perl-format
+msgid "tried to merge the same object (%s) twice in a symfile"
+msgstr "försökte slå ihop samma objekt (%s) två gånger i en symfil"
+
+#: scripts/Dpkg/Shlibs/SymbolFile.pm
+msgid "cannot merge symbols from objects without SONAME"
+msgstr "kan inte slå ihop symboler från objekt utan SONAMN"
+
+#: scripts/Dpkg/Source/Archive.pm
+msgid "write on tar input"
+msgstr "skriv på tar-indata"
+
+#: scripts/Dpkg/Source/Archive.pm
+msgid "close on tar input"
+msgstr "stängning av tar-indata"
+
+#: scripts/Dpkg/Source/Archive.pm scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot create directory %s"
+msgstr "kan inte skapa katalogen %s"
+
+#: scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "cannot get source pathname %s metadata"
+msgstr "kan inte hämta metadata för källsökvägsnamnet %s"
+
+#: scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "cannot get target pathname %s metadata"
+msgstr "kan inte hämta metadata för målsökvägsnamnet %s"
+
+#: scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "cannot change directory %s mode"
+msgstr "kan inte ändra läge för katalogen %s"
+
+#: scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "cannot change directory %s times"
+msgstr "kan inte ändra tider för katalogen %s"
+
+#: scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "cannot remove destination directory %s"
+msgstr "kan inte ta bort målkatalogen %s"
+
+#: scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "cannot remove destination file %s"
+msgstr "kan inte ta bort målfilen %s"
+
+#: scripts/Dpkg/Source/Archive.pm scripts/Dpkg/Source/Package.pm
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "cannot opendir %s"
+msgstr "kan inte öppna katalog %s"
+
+#: scripts/Dpkg/Source/Archive.pm
+#, perl-format
+msgid "unable to rename %s to %s"
+msgstr "kan inte byta namn på %s till %s"
+
+#: scripts/Dpkg/Source/Functions.pm
+#, perl-format
+msgid "cannot stat directory %s (before removal)"
+msgstr "kan inte ta status på katalogen %s (före borttagning)"
+
+#: scripts/Dpkg/Source/Functions.pm
+#, perl-format
+msgid "unable to check for removal of directory '%s'"
+msgstr "kan inte kontrollera för borttagning av katalogen \"%s\""
+
+#: scripts/Dpkg/Source/Functions.pm
+#, perl-format
+msgid "rm -rf failed to remove '%s'"
+msgstr "rm -rf misslyckades att ta bort \"%s\""
+
+#: scripts/Dpkg/Source/Functions.pm scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot change timestamp for %s"
+msgstr "kan inte ändra tidsstämpel på %s"
+
+#: scripts/Dpkg/Source/Functions.pm
+#, perl-format
+msgid "cannot read timestamp from %s"
+msgstr "kan inte läsa tidsstämpel från %s"
+
+#: scripts/Dpkg/Source/Functions.pm
+#, perl-format
+msgid "cannot open file %s for binary detection"
+msgstr "kan inte öppna filen %s för att detektera binärtyp"
+
+#: scripts/Dpkg/Source/BinaryFiles.pm
+#, perl-format
+msgid "adding %s to %s"
+msgstr "lägger %s till %s"
+
+#: scripts/Dpkg/Source/BinaryFiles.pm
+#, perl-format
+msgid "unwanted binary file: %s"
+msgstr "oönskad binärfil: %s"
+
+#: scripts/Dpkg/Source/BinaryFiles.pm
+#, perl-format
+msgid ""
+"detected %d unwanted binary file (add it in debian/source/include-binaries "
+"to allow its inclusion)."
+msgid_plural ""
+"detected %d unwanted binary files (add them in debian/source/include-"
+"binaries to allow their inclusion)."
+msgstr[0] ""
+"upptäckte %d oönskad binärfil (lägg till den i debian/source/include-"
+"binaries för att tillåta att den tas med)"
+msgstr[1] ""
+"upptäckte %d oönskade binärfiler (lägg till dem i debian/source/include-"
+"binaries för att tillåta att de tas med)"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "%s is not the name of a file"
+msgstr "%s är inte namnet på en fil"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "missing critical source control field %s"
+msgstr "saknar kritiska källkodsstyrfältet %s"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "source package format '%s' is not supported: %s"
+msgstr "källkodsformatet \"%s\" stöds inte: %s"
+
+#: scripts/Dpkg/Source/Package.pm
+msgid "source package uses only weak checksums"
+msgstr "källkodspaketet innehåller bara svaga kontrollsummor"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "%s and %s fields are required to compute the source basename"
+msgstr "fälten %s och %s behövs för att beräkna basnamn för källkod"
+
+#: scripts/Dpkg/Source/Package.pm
+msgid "upstream tarball signatures but no upstream signing key"
+msgstr ""
+"signaturer för uppströms-tarbollen, men ingen uppströmssigneringsnyckel"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "verifying %s"
+msgstr "bekräftar %s"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "cannot verify upstream tarball signature for %s: %s"
+msgstr "kan inte bekräfta uppströms tarboll-signatur för %s: %s"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "cannot verify inline signature for %s: %s"
+msgstr "kan inte bekräfta inbyggd signatur för %s: %s"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "%s is not a valid option for %s"
+msgstr "%s är inte en giltig flagga för %s"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "cannot copy %s to %s"
+msgstr "kan inte kopiera %s till %s"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "%s does not exist"
+msgstr "%s finns inte"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "cannot make %s executable"
+msgstr "kan inte göra %s exekverbar"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "%s is not a plain file"
+msgstr "%s är inte en vanlig fil"
+
+#: scripts/Dpkg/Source/Package.pm
+#, perl-format
+msgid "'%s' is not supported by the source format '%s'"
+msgstr "\"%s\" stöds inte av källkodsformatet \"%s\""
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "auto select original source"
+msgstr "välj originalkällkod automatiskt"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "use packed original source (unpack and keep)"
+msgstr "använd packad originalkällkod (packa upp och behåll)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "use packed original source (unpack and remove)"
+msgstr "använd packad originalkällkod (packa upp och ta bort)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "use unpacked original source (pack and keep)"
+msgstr "använd uppackad originalkällkod (packa och behåll)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "use unpacked original source (pack and remove)"
+msgstr "använd uppackad originalkällkod (packa och ta bort)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "trust packed and unpacked original sources are same"
+msgstr "lita på att packad och uppackad originalkällkod är identisk"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "there is no diff, do main tarfile only"
+msgstr "det finns ingen diff, skapa bara huvud-tarfil"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "like -sa, -sk, -sp, -su, -sr but may overwrite"
+msgstr "som -sa, -sk, -sp, -su, -sr men kan skriva över"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+msgid "abort if generated diff has upstream files changes"
+msgstr "avbryt om genererad diff har ändringar i uppströmsfiler"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "leave original source packed in current directory"
+msgstr "lämna originalkällkod packad i aktuell katalog"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "do not copy original source to current directory"
+msgstr "kopiera inte originalkällkod till aktuell katalog"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "unpack original source tree too"
+msgstr "packa också upp originalkällkodsträdet"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "do not apply debian diff to upstream sources"
+msgstr "applicera inte debian-diff på uppströmskällkod"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "-s%s option overrides earlier -s%s option"
+msgstr "flaggan -s%s ersätter tidigare flagga -s%s"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "source handling style -s%s not allowed with -x"
+msgstr "källkodshanteringstyp -s%s tillåts inte med -x"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "multiple tarfiles in v1.0 source package"
+msgstr "flera tarfiler i v1.0-källkodspaket"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "unrecognized file for a %s source package: %s"
+msgstr "okänd fil för ett %s-källkodspaket: %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V3/Native.pm
+msgid "no tarfile in Files field"
+msgstr "ej tarfil i Files-fältet"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "native package with .orig.tar"
+msgstr "Debianspecifikt paket med .orig.tar"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "unable to rename '%s' to '%s'"
+msgstr "kan inte byta namn på \"%s\" till \"%s\""
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+#, perl-format
+msgid "unpacking %s"
+msgstr "packar upp %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "unable to keep orig directory (already exists)"
+msgstr "kan inte behålla originalkatalog (finns redan)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "failed to rename newly-extracted %s to %s"
+msgstr "misslyckades att ta bort %s, som just extraherats, till %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "failed to rename saved %s to %s"
+msgstr "misslyckades att byta namn på sparad %s till %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "applying %s"
+msgstr "tillämpar %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "upstream files that have been modified: %s"
+msgstr "uppströmsfiler som har ändrats: %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "only supports gzip compression"
+msgstr "stöder endast gzip-komprimering"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid ""
+"-b takes at most a directory and an orig source argument (with v1.0 source "
+"package)"
+msgstr ""
+"-b tar som mest en katalog och en originalkällkod som argument (med v1.0-"
+"källkodspaket)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "source handling style -s%s not allowed with -b"
+msgstr "källkodshanteringstyp -s%s tillåts inte med -b"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "packed orig '%s' exists but is not a plain file"
+msgstr "packad orig \"%s\" finns men är inte en vanlig fil"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "cannot stat orig argument %s"
+msgstr "kunde inte ta status på originalargumentet %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid ""
+"orig argument is unpacked but source handling style -s%s calls for packed (."
+"orig.tar.<ext>)"
+msgstr ""
+"originalargument har packats upp men källkodshanteringstypen -s%s ber om en "
+"packad (.orig.tar.<ändelse>)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid ""
+"orig argument is packed but source handling style -s%s calls for unpacked (."
+"orig/)"
+msgstr ""
+"originalargument har packats men källkodshanteringstypen -s%s ber om en "
+"uppackad (orig/)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "orig argument %s is not a plain file or directory"
+msgstr "orig-parametern %s är inte en vanlig fil eller katalog"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid ""
+"orig argument is empty (means no orig, no diff) but source handling style -"
+"s%s wants something"
+msgstr ""
+"originalargument är tomt (betyder ingen orig, ingen diff) men "
+"källkodshanteringstypen -s%s ber om något"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "unpacked orig '%s' exists but is not a directory"
+msgstr "uppackad orig \"%s\" finns men är inte en katalog"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "unable to stat putative unpacked orig '%s'"
+msgstr "kan inte ta status på förmodad uppackad orig \"%s\""
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V3/Quilt.pm
+msgid "non-native package version does not contain a revision"
+msgstr "icke-Debianegen paketversion saknar debianuppdateringsversion"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V3/Native.pm
+msgid "native package version may not have a revision"
+msgstr "Debianegen paketversion kan inte ha en debianuppdateringsversion"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "source directory '%s' is not <sourcepackage>-<upstreamversion> '%s'"
+msgstr ""
+"källkodskatalog \"%s\" är inte <källkodspaket>-<uppströmsversion> \"%s\""
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid ".orig directory name %s is not <package>-<upstreamversion> (wanted %s)"
+msgstr ".orig-katalognamnet %s är inte <paket>-<uppströmsversion> (önskade %s)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid ""
+".orig.tar name %s is not <package>_<upstreamversion>.orig.tar (wanted %s)"
+msgstr ""
+".orig.tar-namnet %s är inte <paket>_<uppströmsversion>.orig.tar (önskade %s)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid ""
+"tarfile '%s' already exists, not overwriting, giving up; use -sU or -sR to "
+"override"
+msgstr ""
+"tarfilen \"%s\" finns redan, skriver inte över, ger upp, använd -sU eller -"
+"sR för att överstyra"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "unable to check for existence of '%s'"
+msgstr "kunde inte se om \"%s\" existerar"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V3/Native.pm
+#, perl-format
+msgid "unable to rename '%s' (newly created) to '%s'"
+msgstr "kunde inte byta namn på \"%s\" (precis skapad) till \"%s\""
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+#: scripts/Dpkg/Source/Package/V3/Quilt.pm scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "unable to change permission of '%s'"
+msgstr "kunde inte ändra beroenden på \"%s\""
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "building %s using existing %s"
+msgstr "bygger %s med befintlig %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+msgid "upstream signing key but no upstream tarball signature"
+msgstr "uppströmssigneringsnycklen, men ingen uppströms tarboll-signatur"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid ""
+"orig directory '%s' already exists, not overwriting, giving up; use -sA, -sK "
+"or -sP to override"
+msgstr ""
+"originalkatalog \"%s\" finns redan, skriver inte över, ger upp; använd -sA, -"
+"sK eller -sP för att överstyra"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "unable to check for existence of orig directory '%s'"
+msgstr "kan inte se om existerande originalkatalog \"%s\" finns"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+#, perl-format
+msgid "the diff modifies the following upstream files: %s"
+msgstr "diffen modifierar följande uppströmsfiler: %s"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid ""
+"use the '3.0 (quilt)' format to have separate and documented changes to "
+"upstream files, see dpkg-source(1)"
+msgstr ""
+"använd formatet \"3.0 (quilt)\" för att ha separata och dokumenterade "
+"ändringar på uppströmsfiler, se dpkg-source(1)"
+
+#: scripts/Dpkg/Source/Package/V1.pm
+msgid "aborting due to --abort-on-upstream-changes"
+msgstr "avbryter på grund av --abort-on-upstream-changes"
+
+#: scripts/Dpkg/Source/Package/V1.pm scripts/Dpkg/Source/Package/V2.pm
+msgid "unrepresentable changes to source"
+msgstr "ändring i källkod kan inte representeras"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "include removed files in the patch"
+msgstr "ta med borttagna filer i patchen"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "include timestamp in the patch"
+msgstr "ta med tidsstämpeln i patchen"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "include binary files in the tarball"
+msgstr "ta med binärfiler i patchen"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "do not prepare build tree by applying patches"
+msgstr "förbered inte byggträdet genom att applicera patchar"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "do not unapply patches if previously applied"
+msgstr "avapplicera inte patchar om de redan har applicerats"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "unapply patches if previously applied (default)"
+msgstr "avapplicera patchar om de redan har applicerats (förval)"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "create an empty original tarball if missing"
+msgstr "skapa en tom original-tarboll om saknas"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "record generated patches, instead of aborting"
+msgstr "spara skapade patchar istället för att avbryta"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "do not extract debian tarball into upstream sources"
+msgstr "extrahera inte debian-tarboll i uppströmskällkod"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "do not apply patches at the end of the extraction"
+msgstr "applicera inte patcher efter uppackningen"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "duplicate files in %s source package: %s"
+msgstr "dubblerade filer i %s-källkodspaket: %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "missing orig.tar or debian.tar file in v2.0 source package"
+msgstr "saknad orig.tar- eller debian.tar-fil för v2.0-källkodspaket"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "mismatched orig.tar %s for signature %s in source package"
+msgstr "saknad orig.tar %s för signaturen %s i källkodspaketet"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "missing addon orig.tar for signature %s in source package"
+msgstr "saknad orig.tar för signaturen %s i källkodspaketet"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "mismatched addon orig.tar %s for signature %s in source package"
+msgstr "saknad tilläggs-orig.tar %s för signaturen %s i källkodspaketet"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "required removal of '%s' installed by original tarball"
+msgstr "nödvändig borttagning av \"%s\" installerad av originaltarboll"
+
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "unapplying %s"
+msgstr "tar bort tillämpning av %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "no upstream tarball found at %s"
+msgstr "hittade ingen uppströms-tarboll på %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "patches are not applied, applying them now"
+msgstr "patcharna har inte tillämpats, tillämpar dem nu"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "several orig.tar files found (%s and %s) but only one is allowed"
+msgstr "flera orig.tar-filer hittades (%s och %s) men endast en tillåts"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "copy of the debian directory"
+msgstr "kopia av debian-katalogen"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "local changes detected, the modified files are:"
+msgstr "lokala ändringar upptäcktes, de ändrade filerna är:"
+
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Package/V3/Bzr.pm
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+#, perl-format
+msgid "-b takes only one parameter with format '%s'"
+msgstr "-b tar bara en parameter för formatet \"%s\""
+
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot represent change to %s: %s"
+msgstr "kan inte representera ändringen för %s: %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Patch.pm
+msgid "binary file contents changed"
+msgstr "innehåll i binär fil ändrat"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid ""
+"add %s in debian/source/include-binaries if you want to store the modified "
+"binary in the debian tarball"
+msgstr ""
+"lägg till %s i debian/source/include-binaries om du vill spara den "
+"modifierade binären i debian-tarbollen"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid ""
+"Hint: make sure the version in debian/changelog matches the unpacked source "
+"tree"
+msgstr ""
+"Tips: se till att versionen i debian/changelog motsvarar det uppackade "
+"källkodsträdet"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "you can integrate the local changes with %s"
+msgstr "du kan integrera de lokala ändringarna med %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "aborting due to unexpected upstream changes, see %s"
+msgstr "avbryter på grund av oväntade uppströmsändringar, se %s-changes"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "local changes have been recorded in a new patch: %s"
+msgstr "lokala ändringar har skrivits till en ny patch: %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Package/V3/Quilt.pm
+#, perl-format
+msgid "cannot remove %s"
+msgstr "kan inte ta bort %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm scripts/Dpkg/Source/Package/V3/Quilt.pm
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "failed to copy %s to %s"
+msgstr "misslyckades att kopiera %s till %s"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "cannot register changes in %s, this patch already exists"
+msgstr "kan inte registrera ändringar i %s, patchen finns redan"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+#, perl-format
+msgid "patch file '%s' doesn't exist"
+msgstr "patchfilen \"%s\" finns inte"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "there are no local changes to record"
+msgstr "det finns inte några lokala ändringar att spara"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "Enter the desired patch name: "
+msgstr "Ange önskat patchnamn: "
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "no patch name given; cannot proceed"
+msgstr "inget patchnamn angavs; kan inte fortsätta"
+
+#: scripts/Dpkg/Source/Package/V2.pm
+msgid "cannot find an editor"
+msgstr "kan inte hitta något textredigeringsprogram"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+msgid "cannot unpack bzr-format source package because bzr is not in the PATH"
+msgstr "kan inte packa upp källkodspaket i bzr-format då bzr inte finns i PATH"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+#, perl-format
+msgid ""
+"source directory is not the top directory of a bzr repository (%s/.bzr not "
+"present), but Format bzr was specified"
+msgstr ""
+"källkodskatalogen är inte toppkatalogen i bzr-arkivet (%s/.bzr finns inte), "
+"men formatet bzr angavs"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+#, perl-format
+msgid "%s is a symlink"
+msgstr "%s är en symbolisk länk"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+#, perl-format
+msgid "%s is a symlink to outside %s"
+msgstr "%s är en symbolisk till länk utanför %s"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+msgid "doesn't contain a bzr repository"
+msgstr "innehåller inte ett bzr-arkiv"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+msgid "bzr status exited nonzero"
+msgstr "bzr status avslutade med en annan status än noll"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "uncommitted, not-ignored changes in working directory: %s"
+msgstr "ej incheckade, ej ignorerade ändringar i arbetskatalogen: %s"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+msgid "format v3.0 (bzr) uses only one source file"
+msgstr "formatet v3.0 (bzr) innehåller endast en källkodsfil"
+
+#: scripts/Dpkg/Source/Package/V3/Bzr.pm
+#, perl-format
+msgid "expected %s, got %s"
+msgstr "förväntade %s, fick %s"
+
+#: scripts/Dpkg/Source/Package/V3/Custom.pm
+msgid "define the format of the generated source package"
+msgstr "ange formatet för genererat källkodspaket"
+
+#: scripts/Dpkg/Source/Package/V3/Custom.pm
+msgid "Format '3.0 (custom)' is only used to create source packages"
+msgstr "Format \"3.0 (skräddarsytt)\" används bara för att skapa källkodspaket"
+
+#: scripts/Dpkg/Source/Package/V3/Custom.pm
+msgid "no files indicated on command line"
+msgstr "inga filer angavs på kommandoraden"
+
+#: scripts/Dpkg/Source/Package/V3/Custom.pm
+msgid "--target-format option is missing"
+msgstr "flaggan --target-format saknas"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "cannot unpack git-format source package because git is not in the PATH"
+msgstr "kan inte packa upp källkodspaket i git-format då git inte finns i PATH"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid ""
+"source directory is not the top directory of a git repository (%s/.git not "
+"present), but Format git was specified"
+msgstr ""
+"källkodskatalogen är inte toppkatalogen i git-arkivet (%s/.git finns inte), "
+"men formatet git angavs"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "git repository %s uses submodules; this is not yet supported"
+msgstr "git-arkivet %s använder undermoduler; detta stöds inte ännu"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "specify a git <ref> to include in the git bundle"
+msgstr "ange en git-<referens> att inkludera i git-bunten"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "create a shallow clone with <number> depth"
+msgstr "skapa en grund klon med djupet <antal>"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "doesn't contain a git repository"
+msgstr "innehåller inte något git-arkiv"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "git ls-files exited nonzero"
+msgstr "git ls-files avslutade med en annan status än noll"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "creating shallow clone with depth %s"
+msgstr "skapar grund klon med djupet %s"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "bundling: %s"
+msgstr "skapar packe: %s"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "format v3.0 (git) uses only one .git file"
+msgstr "formatet v3.0 (git) använder endast en \".git\"-fil"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "format v3.0 (git) uses only one .gitshallow file"
+msgstr "formatet v3.0 (git) använder endast en \".gitshallow\"-fil"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "format v3.0 (git) unknown file: %s"
+msgstr "formatet v3.0 (git) okänd fil: %s"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "format v3.0 (git) expected %s"
+msgstr "formatet v3.0 (git) förväntade %s"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "cloning %s"
+msgstr "klonar %s"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+msgid "setting up shallow clone"
+msgstr "ställer in grund klon"
+
+#: scripts/Dpkg/Source/Package/V3/Git.pm
+#, perl-format
+msgid "setting remote %s to %s"
+msgstr "sätter fjärren %s till %s"
+
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+msgid "multiple tarfiles in native source package"
+msgstr "flera tarfiler i eget källkodspaket"
+
+#: scripts/Dpkg/Source/Package/V3/Native.pm
+#, perl-format
+msgid "unrecognized file for a native source package: %s"
+msgstr "okänd fil i ett Debianeget källkodspaket: %s"
+
+#: scripts/Dpkg/Source/Package/V3/Quilt.pm
+msgid "use a single debianization patch"
+msgstr "använd en ensam debianiseringspatch"
+
+#: scripts/Dpkg/Source/Package/V3/Quilt.pm
+msgid "accept quilt metadata <version> even if unknown"
+msgstr "godta quilt-metadata <version> även om okänd"
+
+#: scripts/Dpkg/Source/Package/V3/Quilt.pm
+#, perl-format
+msgid "can't create symlink %s"
+msgstr "kan inte skapa den symboliska länken %s"
+
+#: scripts/Dpkg/Source/Package/V3/Quilt.pm
+#, perl-format
+msgid "using patch list from %s"
+msgstr "använder patchlista från %s"
+
+#: scripts/Dpkg/Source/Package/V3/Quilt.pm
+#, perl-format
+msgid "unsupported version of the quilt metadata: %s"
+msgstr "versionen av quilt-metadata stöds inte: %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "file %s has no final newline (either original or modified version)"
+msgstr ""
+"filen %s har inget avslutande nyradstecken (antingen i ursprunglig eller "
+"modifierad version)"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "unknown line from diff -u on %s: '%s'"
+msgstr "okänd rad från diff -u på %s: \"%s\""
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "failed to write"
+msgstr "misslyckades att skriva"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff on %s"
+msgstr "diff på %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot stat file %s"
+msgstr "kan inte ta status på filen %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot read link %s"
+msgstr "kan inte läsa länken %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "device or socket is not allowed"
+msgstr "enhet eller uttag inte tillåtet"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "unknown file type"
+msgstr "okänd filtyp"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "ignoring deletion of file %s"
+msgstr "ignorerar borttagning av filen %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "ignoring deletion of file %s, use --include-removal to override"
+msgstr ""
+"ignorerar borttagning av filen %s, använd --include-removal för att överstyra"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "ignoring deletion of directory %s"
+msgstr "ignorerar borttagning av katalogen %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "ignoring deletion of symlink %s"
+msgstr "ignorerar borttagning av symboliska länken %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "newly created empty file '%s' will not be represented in diff"
+msgstr ""
+"den tomma filen \"%s\" som just skapats kommer inte representeras i diffen"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "executable mode %04o of '%s' will not be represented in diff"
+msgstr "exekveringsläge %04o på \"%s\" kommer inte representeras i diffen"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "special mode %04o of '%s' will not be represented in diff"
+msgstr "specialläget %04o på \"%s\" kommer inte representeras i diffen"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "cannot represent change to %s:"
+msgstr "kan inte representera ändringen för %s:"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid " new version is %s"
+msgstr " ny version är %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid " old version is %s"
+msgstr " gammal version är %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff %s patches file with C-style encoded filename"
+msgstr "diffen \"%s\" patchar fil med filnamn kodat i C-stil"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "expected ^--- in line %d of diff '%s'"
+msgstr "förväntade ^--- på rad %d i diffen \"%s\""
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff '%s' patches file with name ending in .dpkg-orig"
+msgstr "diffen \"%s\" patchar fil vars namn slutar på .dpkg-orig"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff '%s' finishes in middle of ---/+++ (line %d)"
+msgstr "diffen \"%s\" slutar mitt i en ---/+++ (rad %d)"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "line after --- isn't as expected in diff '%s' (line %d)"
+msgstr "raden efter --- är inte som förväntad i diffen \"%s\" (rad %d)"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "none of the filenames in ---/+++ are valid in diff '%s' (line %d)"
+msgstr "inget av filnamnen i ---/+++ är giltiga i diffen \"%s\" (rad %d)"
+
+#: scripts/Dpkg/Source/Patch.pm scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "%s contains an insecure path: %s"
+msgstr "%s innehåller en osäker sökväg: %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff %s modifies file %s through a symlink: %s"
+msgstr "diffen %s ändrar filen %s genom en symbolisk länk: %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "original and modified files are /dev/null in diff '%s' (line %d)"
+msgstr "original och ändrad fil är /dev/null i diffen \"%s\" (rad %d)"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "file removal without proper filename in diff '%s' (line %d)"
+msgstr "borttagen fil saknar korrekt filnamn i diffen \"%s\" (rad %d)"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff %s removes a non-existing file %s (line %d)"
+msgstr "diffen %s tar bort filen %s som inte finns (rad %d)"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff '%s' patches something which is not a plain file"
+msgstr "diffen \"%s\" patchar något som inte är en vanlig fil"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid ""
+"diff '%s' patches files multiple times; split the diff in multiple files or "
+"merge the hunks into a single one"
+msgstr ""
+"diffen \"%s\" patchar filer flera gånger; dela diffen i flera filer eller "
+"slå ihop styckena till ett enda"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff '%s' patches file %s more than once"
+msgstr "diffen \"%s\" patchar filen %s mer än en gång"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "unexpected end of diff '%s'"
+msgstr "oväntad slut på diffen \"%s\""
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "expected [ +-] at start of line %d of diff '%s'"
+msgstr "förväntade [ + ] vid början av rad %d i diffen \"%s\""
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "expected ^@@ at line %d of diff '%s'"
+msgstr "förväntade ^@@ på rad %d i diffen \"%s\""
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "diff '%s' doesn't contain any patch"
+msgstr "diffen \"%s\" innehåller inte någon patch"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "remove patch backup file %s"
+msgstr "tar bort patchsäkerhetskopian %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "nonexistent"
+msgstr "saknas"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "plain file"
+msgstr "vanlig fil"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "directory"
+msgstr "katalog"
+
+#: scripts/Dpkg/Source/Patch.pm
+#, perl-format
+msgid "symlink to %s"
+msgstr "symbolisk länk till %s"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "block device"
+msgstr "blockenhet"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "character device"
+msgstr "teckenenhet"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "named pipe"
+msgstr "namngivet rör"
+
+#: scripts/Dpkg/Source/Patch.pm
+msgid "named socket"
+msgstr "namngivet uttag"
+
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "cannot mkdir %s"
+msgstr "kan inte skapa katalog %s"
+
+#: scripts/Dpkg/Source/Quilt.pm
+msgid "the patch has fuzz which is not allowed, or is malformed"
+msgstr "patchen har otillåtet fuzz, eller är på fel format"
+
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "if patch '%s' is correctly applied by quilt, use '%s' to update it"
+msgstr ""
+"om patchen \"%s\" kan tillämpas korrekt av quilt använder du \"%s\" för att "
+"uppdatera den"
+
+#: scripts/Dpkg/Source/Quilt.pm
+msgid ""
+"if the file is present in the unpacked source, make sure it is also present "
+"in the orig tarball"
+msgstr ""
+"om filen finns i det uppackage källkodsträdet, se till att den också finns i "
+"orig-tarbollen"
+
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "%s should be a directory or non-existing"
+msgstr "%s borde vara en katalog eller inte finnas"
+
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "%s should be a file or non-existing"
+msgstr "%s borde vara en fil eller inte finnas"
+
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid ""
+"the series file (%s) contains unsupported options ('%s', line %s); dpkg-"
+"source might fail when applying patches"
+msgstr ""
+"series-filen (%s) innehåller flaggor som inte stöds (\"%s\", rad %s); dpkg-"
+"source kanske kommer att misslyckas med att tillämpa patchar"
+
+#: scripts/Dpkg/Source/Quilt.pm
+#, perl-format
+msgid "restoring quilt backup files for %s"
+msgstr "återställer quilt-säkerhetskopior för %s"
+
+#: scripts/Dpkg/Substvars.pm
+#, perl-format
+msgid "bad line in substvars file %s at line %d"
+msgstr "felaktig rad i substvars-filen %s på rad %d"
+
+#: scripts/Dpkg/Substvars.pm
+#, perl-format
+msgid "invalid source version %s"
+msgstr "ogiltigt källkodsversion %s"
+
+#: scripts/Dpkg/Substvars.pm
+#, perl-format
+msgid "too many substitutions - recursive ? - in '%s'"
+msgstr "för många substitueringar - rekursivt? - i \"%s\""
+
+#: scripts/Dpkg/Substvars.pm
+#, perl-format
+msgid "obsolete substitution variable ${%s}"
+msgstr "föråldrad substitueringsvariabel ${%s}"
+
+#: scripts/Dpkg/Substvars.pm
+#, perl-format
+msgid "substitution variable ${%s} used, but is not defined"
+msgstr "substitueringsvariabeln ${%s} används, men är inte definierad"
+
+#: scripts/Dpkg/Substvars.pm
+#, perl-format
+msgid "substitution variable ${%s} unused, but is defined"
+msgstr "substitueringsvariabeln ${%s} används inte, men är definierad"
+
+#: scripts/Dpkg/Vars.pm
+#, perl-format
+msgid "source package name '%s' is illegal: %s"
+msgstr "namnet på källkodspaketet \"%s\" är ogiltigt: %s"
+
+#: scripts/Dpkg/Vars.pm
+#, perl-format
+msgid "source package has two conflicting values - %s and %s"
+msgstr "källkodspaketet har två emotsägande värden - %s och %s"
+
+#: scripts/Dpkg/Vendor.pm
+#, perl-format
+msgid ""
+"%s origin filename is deprecated; it should have only alphanumeric or dash "
+"characters"
+msgstr ""
+"%s origin-filnamn avråds från; det ska endast innehålla alfanumeriska tecken "
+"och bindestreck"
+
+#: scripts/Dpkg/Vendor.pm
+#, perl-format
+msgid ""
+"%s module name is deprecated; it should be capitalized with only "
+"alphanumeric characters"
+msgstr ""
+"%s modul-filnamn avråds från; den ska bestå av endast stora alfanumeriska "
+"tecken"
+
+#: scripts/Dpkg/Vendor/Debian.pm
+#, perl-format
+msgid "unknown host architecture '%s'"
+msgstr "okänd värdarkitektur \"%s\""
+
+#: scripts/Dpkg/Vendor/Ubuntu.pm
+msgid ""
+"Version number suggests Ubuntu changes, but Maintainer: does not have Ubuntu "
+"address"
+msgstr ""
+"Versionsnumret indikerar Ubuntuändringar, men Maintainer: innehåller inte en "
+"Ubuntuadress"
+
+#: scripts/Dpkg/Vendor/Ubuntu.pm
+msgid ""
+"Version number suggests Ubuntu changes, but there is no XSBC-Original-"
+"Maintainer field"
+msgstr ""
+"Versionsnumret indikerar Ubuntuändringar, men fältet XSBC-Original-"
+"Maintainer saknas"
+
+#: scripts/Dpkg/Version.pm
+#, perl-format
+msgid "%s is not a valid version"
+msgstr "%s är inte en giltig version"
+
+#: scripts/Dpkg/Version.pm
+msgid "version number cannot be empty"
+msgstr "versionsnumret kan inte vara tomt"
+
+#: scripts/Dpkg/Version.pm
+msgid "epoch part of the version number cannot be empty"
+msgstr "epokdelen av versionsnumret kan inte vara tom"
+
+#: scripts/Dpkg/Version.pm
+msgid "upstream version cannot be empty"
+msgstr "uppströmsversionsnumret kan inte vara tomt"
+
+#: scripts/Dpkg/Version.pm
+msgid "revision cannot be empty"
+msgstr "revisionen kan inte vara tom"
+
+#: scripts/Dpkg/Version.pm
+msgid "version number does not start with digit"
+msgstr "versionsnumret börjar inte med en siffra"
+
+#: scripts/Dpkg/Version.pm
+#, perl-format
+msgid "version number contains illegal character '%s'"
+msgstr "versionsnummer innehåller ogiltigt tecken \"%s\""
+
+#: scripts/Dpkg/Version.pm
+#, perl-format
+msgid "epoch part of the version number is not a number: '%s'"
+msgstr "epokdelen av versionsnumret är inte ett tal: \"%s\""
diff --git a/scripts/t/Dpkg_Arch.t b/scripts/t/Dpkg_Arch.t
new file mode 100644
index 0000000..59855df
--- /dev/null
+++ b/scripts/t/Dpkg_Arch.t
@@ -0,0 +1,203 @@
+#!/usr/bin/perl
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use Test::More tests => 18900;
+
+use_ok('Dpkg::Arch', qw(debarch_to_debtuple debarch_to_multiarch
+ debarch_eq debarch_is debarch_is_wildcard
+ debarch_is_illegal
+ debarch_to_abiattrs debarch_to_cpubits
+ debarch_list_parse
+ debtuple_to_debarch gnutriplet_to_debarch
+ debtuple_to_gnutriplet gnutriplet_to_debtuple
+ get_host_gnu_type
+ get_valid_arches));
+
+my $KNOWN_ARCHES_TOTAL = 569;
+my @valid_arches = get_valid_arches();
+
+sub get_valid_wildcards
+{
+ my %wildcards;
+ my @wildcards_base = qw(
+ any
+ any-any
+ any-any-any
+ any-any-any-any
+ );
+
+ foreach my $archname (@valid_arches) {
+ my @tuple = debarch_to_debtuple($archname);
+
+ my @wildcards_arch = (
+ # Two element tuples.
+ "$tuple[2]-any",
+ "any-$tuple[3]",
+
+ # Three element tuples.
+ "$tuple[1]-$tuple[2]-any",
+ "$tuple[1]-any-$tuple[3]",
+ "$tuple[1]-any-any",
+ "any-$tuple[2]-$tuple[3]",
+ "any-$tuple[2]-any",
+ "any-any-$tuple[3]",
+
+ # Four element tuples.
+ "$tuple[0]-$tuple[1]-$tuple[2]-any",
+ "$tuple[0]-$tuple[1]-any-$tuple[3]",
+ "$tuple[0]-$tuple[1]-any-any",
+ "$tuple[0]-any-$tuple[2]-$tuple[3]",
+ "$tuple[0]-any-$tuple[2]-any",
+ "$tuple[0]-any-any-$tuple[3]",
+ "$tuple[0]-any-any-any",
+ "any-$tuple[1]-$tuple[2]-$tuple[3]",
+ "any-$tuple[1]-$tuple[2]-any",
+ "any-$tuple[1]-any-$tuple[3]",
+ "any-$tuple[1]-any-any",
+ "any-any-$tuple[2]-$tuple[3]",
+ "any-any-$tuple[2]-any",
+ "any-any-any-$tuple[3]",
+ );
+
+ foreach my $wildcard ((@wildcards_base, @wildcards_arch)) {
+ push @{$wildcards{$wildcard}}, $archname;
+ }
+ }
+
+ return \%wildcards;
+}
+
+my @tuple_new;
+my @tuple_ref;
+
+@tuple_new = debarch_to_debtuple('unknown');
+is_deeply(\@tuple_new, [], 'unknown tuple');
+
+@tuple_ref = qw(base gnu linux amd64);
+@tuple_new = debarch_to_debtuple('amd64');
+is_deeply(\@tuple_new, \@tuple_ref, 'valid tuple');
+
+@tuple_ref = qw(base gnu linux amd64);
+@tuple_new = debarch_to_debtuple('amd64');
+is_deeply(\@tuple_new, \@tuple_ref, 'valid tuple');
+@tuple_new = debarch_to_debtuple('linux-amd64');
+is_deeply(\@tuple_new, \@tuple_ref, 'valid tuple');
+
+is(debarch_to_multiarch('i386'), 'i386-linux-gnu',
+ 'normalized i386 multiarch triplet');
+is(debarch_to_multiarch('amd64'), 'x86_64-linux-gnu',
+ 'normalized amd64 multiarch triplet');
+
+ok(!debarch_eq('amd64', 'i386'), 'no match, simple arch');
+ok(!debarch_eq('', 'amd64'), 'no match, empty first arch');
+ok(!debarch_eq('amd64', ''), 'no match, empty second arch');
+ok(!debarch_eq('amd64', 'unknown'), 'no match, with first unknown arch');
+ok(!debarch_eq('unknown', 'i386'), 'no match, second unknown arch');
+ok(debarch_eq('unknown', 'unknown'), 'match equal unknown arch');
+ok(debarch_eq('amd64', 'amd64'), 'match equal known arch');
+ok(debarch_eq('amd64', 'linux-amd64'), 'match implicit linux arch');
+
+ok(!debarch_is('unknown', 'linux-any'), 'no match unknown on wildcard cpu');
+ok(!debarch_is('unknown', 'any-amd64'), 'no match unknown on wildcard os');
+ok(!debarch_is('amd64', 'unknown'), 'no match amd64 on unknown wildcard');
+ok(!debarch_is('amd64', 'unknown-any'), 'no match amd64 on unknown wildcard');
+ok(!debarch_is('amd64', 'any-unknown'), 'no match amd64 on unknown wildcard');
+ok(debarch_is('unknown', 'any'), 'match unknown on global wildcard');
+ok(debarch_is('linux-amd64', 'linux-any'), 'match implicit linux-amd64 on wildcard cpu');
+ok(debarch_is('linux-amd64', 'any-amd64'), 'match implicit linux-amd64 on wildcard os');
+
+my $wildcards = get_valid_wildcards();
+
+foreach my $wildcard (sort keys %{$wildcards}) {
+ ok(debarch_is_wildcard($wildcard), "$wildcard is a wildcard");
+
+ foreach my $arch (sort @{$wildcards->{$wildcard}}) {
+ ok(debarch_is($arch, $wildcard), "wildcard $wildcard matches $arch");
+ }
+}
+
+ok(!debarch_is_wildcard('unknown'), 'unknown is not a wildcard');
+ok(!debarch_is_wildcard('all'), 'all is not a wildcard');
+ok(!debarch_is_wildcard('amd64'), '<arch> is not a wildcard');
+
+ok(!debarch_is_illegal('0'), '');
+ok(!debarch_is_illegal('a'), '');
+ok(!debarch_is_illegal('amd64'), '');
+ok(!debarch_is_illegal('!arm64'), '');
+ok(!debarch_is_illegal('kfreebsd-any'), '');
+ok(debarch_is_illegal('!amd64!arm'), '');
+ok(debarch_is_illegal('arch%name'), '');
+ok(debarch_is_illegal('-any'), '');
+ok(debarch_is_illegal('!'), '');
+
+my @arch_new;
+my @arch_ref;
+
+@arch_ref = qw(amd64 !arm64 linux-i386 !kfreebsd-any);
+@arch_new = debarch_list_parse('amd64 !arm64 linux-i386 !kfreebsd-any');
+is_deeply(\@arch_new, \@arch_ref, 'parse valid arch list');
+
+@arch_ref = qw(amd64 arm64 linux-i386 kfreebsd-any);
+@arch_new = debarch_list_parse('amd64 arm64 linux-i386 kfreebsd-any', positive => 1);
+is_deeply(\@arch_new, \@arch_ref, 'parse valid positive arch list');
+
+eval { @arch_new = debarch_list_parse('!amd64!arm64') };
+ok($@, 'parse concatenated arches failed');
+
+eval { @arch_new = debarch_list_parse('amd64 !arm64 !mips', positive => 1) };
+ok($@, 'parse disallowed negated arches failed');
+
+is(debarch_to_abiattrs(undef), undef, 'undef ABI attrs');
+is_deeply([ debarch_to_abiattrs('amd64') ], [ qw(64 little) ], 'amd64 ABI attrs');
+is_deeply([ debarch_to_abiattrs('x32') ], [ qw(32 little) ], 'x32 ABI attrs');
+
+is(debarch_to_cpubits(undef), undef, 'undef CPU bits');
+is(debarch_to_cpubits('i386'), 32, 'i386 CPU bits');
+is(debarch_to_cpubits('amd64'), 64, 'amd64 CPU bits');
+
+is(debtuple_to_debarch(undef, undef, undef, undef), undef, 'undef debtuple');
+is(debtuple_to_debarch('base', 'gnu', 'linux', 'amd64'), 'amd64', 'known debtuple');
+is(debtuple_to_debarch('unknown', 'unknown', 'unknown', 'unknown'), undef, 'unknown debtuple');
+
+is(gnutriplet_to_debarch(undef), undef, 'undef gnutriplet');
+is(gnutriplet_to_debarch('unknown-unknown-unknown'), undef, 'unknown gnutriplet');
+is(gnutriplet_to_debarch('x86_64-linux-gnu'), 'amd64', 'known gnutriplet');
+
+foreach my $arch (@valid_arches) {
+ my @tuple = debarch_to_debtuple($arch);
+ is(debtuple_to_debarch(@tuple), $arch,
+ "bijective arch $arch to tuple @tuple");
+
+ my $triplet = debtuple_to_gnutriplet(@tuple);
+ is_deeply([ gnutriplet_to_debtuple($triplet) ], \@tuple,
+ "bijective triplet $triplet to tuple @tuple");
+}
+
+is(scalar @valid_arches, $KNOWN_ARCHES_TOTAL,
+ 'expected amount of known architectures');
+
+{
+ local $ENV{CC} = 'false';
+ is(get_host_gnu_type(), '', 'CC does not support -dumpmachine');
+
+ $ENV{CC} = 'echo CC';
+ is(get_host_gnu_type(), 'CC -dumpmachine',
+ 'CC does not report expected synthetic result for -dumpmachine');
+}
+
+1;
diff --git a/scripts/t/Dpkg_BuildEnv.t b/scripts/t/Dpkg_BuildEnv.t
new file mode 100644
index 0000000..a53c770
--- /dev/null
+++ b/scripts/t/Dpkg_BuildEnv.t
@@ -0,0 +1,50 @@
+#!/usr/bin/perl
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use Test::More tests => 14;
+
+BEGIN {
+ use_ok('Dpkg::BuildEnv');
+}
+
+$ENV{DPKG_TEST_VAR_A} = 100;
+$ENV{DPKG_TEST_VAR_B} = 200;
+delete $ENV{DPKG_TEST_VAR_Z};
+
+is(scalar Dpkg::BuildEnv::list_accessed(), 0, 'no accessed variables');
+is(scalar Dpkg::BuildEnv::list_modified(), 0, 'no modified variables');
+
+is(Dpkg::BuildEnv::get('DPKG_TEST_VAR_A'), 100, 'get value');
+
+is(scalar Dpkg::BuildEnv::list_accessed(), 1, '1 accessed variables');
+is(scalar Dpkg::BuildEnv::list_modified(), 0, 'no modified variables');
+
+is(Dpkg::BuildEnv::get('DPKG_TEST_VAR_B'), 200, 'get value');
+Dpkg::BuildEnv::set('DPKG_TEST_VAR_B', 300);
+is(Dpkg::BuildEnv::get('DPKG_TEST_VAR_B'), 300, 'set value');
+
+is(scalar Dpkg::BuildEnv::list_accessed(), 2, '2 accessed variables');
+is(scalar Dpkg::BuildEnv::list_modified(), 1, '1 modified variable');
+
+ok(Dpkg::BuildEnv::has('DPKG_TEST_VAR_A'), 'variables is present');
+ok(!Dpkg::BuildEnv::has('DPKG_TEST_VAR_Z'), 'variables is not present');
+
+is(scalar Dpkg::BuildEnv::list_accessed(), 3, '2 accessed variables');
+is(scalar Dpkg::BuildEnv::list_modified(), 1, '1 modified variable');
+
+1;
diff --git a/scripts/t/Dpkg_BuildFlags.t b/scripts/t/Dpkg_BuildFlags.t
new file mode 100644
index 0000000..c6e0ef8
--- /dev/null
+++ b/scripts/t/Dpkg_BuildFlags.t
@@ -0,0 +1,133 @@
+#!/usr/bin/perl
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use Test::More tests => 34;
+
+BEGIN {
+ $ENV{DEB_BUILD_ARCH} = 'amd64';
+ $ENV{DEB_HOST_ARCH} = 'amd64';
+ use_ok('Dpkg::BuildFlags');
+}
+
+my $bf = Dpkg::BuildFlags->new();
+
+ok($bf->has('CPPFLAGS'), 'CPPFLAGS is present');
+is($bf->get_origin('CPPFLAGS'), 'vendor', 'CPPFLAGS has a vendor origin');
+
+$bf->set('DPKGFLAGS', '-Wflag -On -fsome', 'system');
+is($bf->get('DPKGFLAGS'), '-Wflag -On -fsome', 'get flag');
+is($bf->get_origin('DPKGFLAGS'), 'system', 'flag has a system origin');
+ok(!$bf->is_maintainer_modified('DPKGFLAGS'), 'set marked flag as non-maint modified');
+
+$bf->strip('DPKGFLAGS', '-On', 'user', undef);
+is($bf->get('DPKGFLAGS'), '-Wflag -fsome', 'get stripped flag');
+is($bf->get_origin('DPKGFLAGS'), 'user', 'flag has a user origin');
+ok(!$bf->is_maintainer_modified('DPKGFLAGS'), 'strip marked flag as non-maint modified');
+
+my @strip_tests = (
+ {
+ value => '-fsingle',
+ strip => '-fsingle',
+ exp => '',
+ }, {
+ value => '-fdupe -fdupe',
+ strip => '-fdupe',
+ exp => '',
+ }, {
+ value => '-Wa -fdupe -fdupe -Wb',
+ strip => '-fdupe',
+ exp => '-Wa -Wb',
+ }, {
+ value => '-fdupe -Wa -Wb -fdupe',
+ strip => '-fdupe',
+ exp => '-Wa -Wb',
+ }, {
+ value => '-fdupe -Wa -fdupe -Wb',
+ strip => '-fdupe',
+ exp => '-Wa -Wb',
+ }, {
+ value => '-Wa -fdupe -Wb -fdupe',
+ strip => '-fdupe',
+ exp => '-Wa -Wb',
+ }
+);
+
+foreach my $test (@strip_tests) {
+ $bf->set('DPKGSTRIPFLAGS', $test->{value}, 'system');
+ $bf->strip('DPKGSTRIPFLAGS', $test->{strip}, 'user', undef);
+ is($bf->get('DPKGSTRIPFLAGS'), $test->{exp},
+ "strip flag '$test->{strip}' from '$test->{value}' to '$test->{exp}'");
+}
+
+$bf->append('DPKGFLAGS', '-Wl,other', 'vendor', 0);
+is($bf->get('DPKGFLAGS'), '-Wflag -fsome -Wl,other', 'get appended flag');
+is($bf->get_origin('DPKGFLAGS'), 'vendor', 'flag has a vendor origin');
+ok(!$bf->is_maintainer_modified('DPKGFLAGS'), 'append marked flag as non-maint modified');
+
+$bf->prepend('DPKGFLAGS', '-Idir', 'env', 1);
+is($bf->get('DPKGFLAGS'), '-Idir -Wflag -fsome -Wl,other', 'get prepended flag');
+is($bf->get_origin('DPKGFLAGS'), 'env', 'flag has an env origin');
+ok($bf->is_maintainer_modified('DPKGFLAGS'), 'prepend marked flag as maint modified');
+
+my %known_features = (
+ future => [ qw(
+ lfs
+ ) ],
+ hardening => [ qw(
+ bindnow
+ format
+ fortify
+ pie
+ relro
+ stackprotector
+ stackprotectorstrong
+ ) ],
+ qa => [ qw(
+ bug
+ canary
+ ) ],
+ reproducible => [ qw(
+ fixdebugpath
+ fixfilepath
+ timeless
+ ) ],
+ optimize => [ qw(
+ lto
+ ) ],
+ sanitize => [ qw(
+ address
+ leak
+ thread
+ undefined
+ ) ],
+);
+
+is_deeply([ sort $bf->get_feature_areas() ], [ sort keys %known_features ],
+ 'supported feature areas');
+
+foreach my $area (sort keys %known_features) {
+ ok($bf->has_features($area), "has feature area $area");
+ my %features = $bf->get_features($area);
+ is_deeply([ sort keys %features ],
+ $known_features{$area},
+ "supported features for area $area");
+}
+
+# TODO: Add more test cases.
+
+1;
diff --git a/scripts/t/Dpkg_BuildFlags_Ubuntu.t b/scripts/t/Dpkg_BuildFlags_Ubuntu.t
new file mode 100644
index 0000000..e14d167
--- /dev/null
+++ b/scripts/t/Dpkg_BuildFlags_Ubuntu.t
@@ -0,0 +1,94 @@
+#!/usr/bin/perl
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use Test::More tests => 21;
+
+BEGIN {
+ use_ok('Dpkg::BuildFlags');
+}
+
+sub test_optflag
+{
+ my ($bf, $optflag) = @_;
+
+ foreach my $flag (qw(CFLAGS CXXFLAGS OBJCFLAGS OBJCXXFLAGS GCJFLAGS
+ FFLAGS FCFLAGS)) {
+ my $value = $bf->get($flag);
+ ok($value =~ m/$optflag/, "$flag contains $optflag: $value");
+ }
+}
+
+sub test_ltoflag
+{
+ my $bf = shift;
+
+ # Test the LTO flags enabled by default on some arches.
+ ok($bf->get('LDFLAGS') =~ m/-flto=auto -ffat-lto-objects/,
+ "LDFLAGS contains LTO flags on $ENV{DEB_HOST_ARCH}");
+}
+
+sub test_no_ltoflag
+{
+ my $bf = shift;
+
+ # Test the LTO flags not being enabled.
+ ok($bf->get('LDFLAGS') !~ m/-flto=auto -ffat-lto-objects/,
+ "LDFLAGS does not contain LTO flags on $ENV{DEB_HOST_ARCH}");
+}
+
+my $bf;
+
+# Force loading the Dpkg::Vendor::Ubuntu module.
+$ENV{DEB_VENDOR} = 'Ubuntu';
+
+# Test the optimization flag inherited from the Dpkg::Vendor::Debian module.
+$ENV{DEB_HOST_ARCH} = 'amd64';
+$bf = Dpkg::BuildFlags->new();
+
+test_optflag($bf, '-O2');
+test_ltoflag($bf);
+
+# Test the overlaid Ubuntu-specific linker flag.
+ok($bf->get('LDFLAGS') =~ m/-Wl,-Bsymbolic-functions/,
+ 'LDFLAGS contains -Bsymbolic-functions');
+
+# Test the optimization flag override only for ppc64el.
+$ENV{DEB_HOST_ARCH} = 'ppc64el';
+$bf = Dpkg::BuildFlags->new();
+
+test_optflag($bf, '-O3');
+test_ltoflag($bf);
+
+# Test the optimization flag not enabled for riscv64.
+$ENV{DEB_HOST_ARCH} = 'riscv64';
+$bf = Dpkg::BuildFlags->new();
+
+test_no_ltoflag($bf);
+
+# Test the optimization flag override by DEB_BUILD_MAINT_OPTIONS.
+$ENV{DEB_BUILD_MAINT_OPTIONS} = 'optimize=+lto';
+$bf = Dpkg::BuildFlags->new();
+
+test_ltoflag($bf);
+
+$ENV{DEB_HOST_ARCH} = 'amd64';
+$ENV{DEB_BUILD_MAINT_OPTIONS} = 'optimize=-lto';
+$bf = Dpkg::BuildFlags->new();
+test_no_ltoflag($bf);
+
+1;
diff --git a/scripts/t/Dpkg_BuildInfo.t b/scripts/t/Dpkg_BuildInfo.t
new file mode 100644
index 0000000..fc2cd71
--- /dev/null
+++ b/scripts/t/Dpkg_BuildInfo.t
@@ -0,0 +1,28 @@
+#!/usr/bin/perl
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use Test::More tests => 2;
+
+BEGIN {
+ use_ok('Dpkg::BuildInfo');
+}
+
+is(scalar Dpkg::BuildInfo::get_build_env_allowed(), 52,
+ 'allowed environment variables array');
+
+1;
diff --git a/scripts/t/Dpkg_BuildOptions.t b/scripts/t/Dpkg_BuildOptions.t
new file mode 100644
index 0000000..f3080a2
--- /dev/null
+++ b/scripts/t/Dpkg_BuildOptions.t
@@ -0,0 +1,109 @@
+#!/usr/bin/perl
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use Test::More tests => 28;
+
+use Dpkg::ErrorHandling;
+
+use_ok('Dpkg::BuildOptions');
+
+{
+ no warnings; ## no critic (TestingAndDebugging::ProhibitNoWarnings)
+ # Disable warnings related to invalid values fed during
+ # the tests
+ report_options(quiet_warnings => 1);
+}
+
+$ENV{DEB_BUILD_OPTIONS} = 'noopt foonostripbar parallel=3 bazNOCHECK';
+
+my $dbo = Dpkg::BuildOptions->new();
+ok($dbo->has('noopt'), 'has noopt');
+is($dbo->get('noopt'), undef, 'noopt value');
+ok($dbo->has('foonostripbar'), 'has foonostripbar');
+is($dbo->get('foonostripbar'), undef, 'foonostripbar value');
+ok($dbo->has('parallel'), 'has parallel');
+is($dbo->get('parallel'), 3, 'parallel value');
+ok(!$dbo->has('bazNOCHECK'), 'not has bazNOCHECK');
+
+$dbo->reset();
+$dbo->merge('no opt no-strip parallel = 5 nocheck', 'test');
+ok($dbo->has('no'), 'has no');
+is($dbo->get('no'), undef, 'no value');
+ok($dbo->has('opt'), 'has opt');
+is($dbo->get('opt'), undef, 'opt value');
+ok($dbo->has('no-strip'), 'has no-strip');
+is($dbo->get('no-strip'), undef, 'no-strip value');
+ok($dbo->has('parallel'), 'has parallel');
+is($dbo->get('parallel'), '', 'parallel value');
+ok($dbo->has('nocheck'), 'has nocheck');
+is($dbo->get('nocheck'), undef, 'nocheck value');
+
+$dbo->reset();
+$dbo->set('parallel', 5);
+$dbo->set('noopt', undef);
+
+my $env = $dbo->export();
+is($env, 'noopt parallel=5', 'value of export');
+is($ENV{DEB_BUILD_OPTIONS}, $env, 'env match return value of export');
+$env = $dbo->export('OTHER_VARIABLE');
+is($ENV{OTHER_VARIABLE}, $env, 'export to other variable');
+
+$ENV{DEB_BUILD_OPTIONS} = 'foobar';
+$dbo = Dpkg::BuildOptions->new();
+$dbo->set('noopt', 1);
+is($dbo->output(), 'foobar noopt', 'output');
+
+$dbo = Dpkg::BuildOptions->new(envvar => 'OTHER_VARIABLE');
+is($dbo->get('parallel'), 5, 'import from other variable, check parallel');
+ok($dbo->has('noopt'), 'import from other variable, check noopt');
+
+my %theme = (
+ metal => undef,
+ pink => undef,
+ rusty => undef,
+ sky => undef,
+);
+my %theme_ref;
+
+$dbo = Dpkg::BuildOptions->new();
+
+$theme_ref{$_} = 1 foreach keys %theme;
+$dbo->set('theme', '+all');
+$dbo->parse_features('theme', \%theme);
+is_deeply(\%theme, \%theme_ref, 'features set with +all');
+
+$theme{$_} = undef foreach keys %theme;
+$theme_ref{$_} = 1 foreach keys %theme;
+$theme_ref{rusty} = 0;
+$dbo->set('theme', '+all,-rusty');
+$dbo->parse_features('theme', \%theme);
+is_deeply(\%theme, \%theme_ref, 'features set with +all,-rusty');
+
+$theme{$_} = undef foreach keys %theme;
+$theme_ref{$_} = 0 foreach keys %theme;
+$theme_ref{metal} = 1;
+$dbo->set('theme', '-all,+metal');
+$dbo->parse_features('theme', \%theme);
+is_deeply(\%theme, \%theme_ref, 'features set with +all,-rusty');
+
+$theme{$_} = $theme_ref{$_} = undef foreach keys %theme;
+$theme_ref{pink} = 1;
+$theme_ref{sky} = 0;
+$dbo->set('theme', '+pink,-sky');
+$dbo->parse_features('theme', \%theme);
+is_deeply(\%theme, \%theme_ref, 'features set with +pink,-sky');
diff --git a/scripts/t/Dpkg_BuildProfiles.t b/scripts/t/Dpkg_BuildProfiles.t
new file mode 100644
index 0000000..ccee14b
--- /dev/null
+++ b/scripts/t/Dpkg_BuildProfiles.t
@@ -0,0 +1,61 @@
+#!/usr/bin/perl
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use Test::More tests => 8;
+
+BEGIN {
+ use_ok('Dpkg::BuildProfiles', qw(parse_build_profiles
+ set_build_profiles
+ get_build_profiles));
+}
+
+# TODO: Add actual test cases.
+
+my $formula;
+
+$formula = [ ];
+is_deeply([ parse_build_profiles('') ], $formula,
+ 'parse build profiles formula empty');
+
+$formula = [ [ qw(nocheck) ] ];
+is_deeply([ parse_build_profiles('<nocheck>') ], $formula,
+ 'parse build profiles formula single');
+
+$formula = [ [ qw(nocheck nodoc stage1) ] ];
+is_deeply([ parse_build_profiles('<nocheck nodoc stage1>') ], $formula,
+ 'parse build profiles formula AND');
+
+$formula = [ [ qw(nocheck) ], [ qw(nodoc) ] ];
+is_deeply([ parse_build_profiles('<nocheck> <nodoc>') ], $formula,
+ 'parse build profiles formula OR');
+
+$formula = [ [ qw(nocheck nodoc) ], [ qw(stage1) ] ];
+is_deeply([ parse_build_profiles('<nocheck nodoc> <stage1>') ], $formula,
+ 'parse build profiles formula AND, OR');
+
+{
+ local $ENV{DEB_BUILD_PROFILES} = 'cross nodoc profile.name';
+ is_deeply([ get_build_profiles() ], [ qw(cross nodoc profile.name) ],
+ 'get active build profiles from environment');
+}
+
+set_build_profiles(qw(nocheck stage1));
+is_deeply([ get_build_profiles() ], [ qw(nocheck stage1) ],
+ 'get active build profiles explicitly set');
+
+1;
diff --git a/scripts/t/Dpkg_BuildTypes.t b/scripts/t/Dpkg_BuildTypes.t
new file mode 100644
index 0000000..4aa2bd4
--- /dev/null
+++ b/scripts/t/Dpkg_BuildTypes.t
@@ -0,0 +1,89 @@
+#!/usr/bin/perl
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use Test::More tests => 39;
+
+BEGIN {
+ use_ok('Dpkg::BuildTypes');
+}
+
+ok(build_is(BUILD_DEFAULT | BUILD_FULL), 'build is default full');
+is(get_build_options_from_type(), 'full', 'build is full');
+
+set_build_type(BUILD_DEFAULT | BUILD_BINARY, '--default-binary');
+is(get_build_options_from_type(), 'binary', 'build is binary');
+ok(build_is(BUILD_DEFAULT | BUILD_BINARY), 'build is default binary');
+
+set_build_type(BUILD_SOURCE | BUILD_ARCH_INDEP, '--build=source,all');
+is(get_build_options_from_type(), 'source,all', 'build is source,all');
+
+set_build_type_from_options('any,all', '--build=any,all', nocheck => 1);
+is(get_build_options_from_type(), 'binary', 'build is binary from any,all');
+ok(build_is(BUILD_BINARY), 'build is any,all');
+
+set_build_type_from_options('binary', '--build=binary', nocheck => 1);
+is(get_build_options_from_type(), 'binary', 'build is binary');
+ok(build_is(BUILD_BINARY), 'build is binary');
+
+set_build_type_from_options('source,all', '--build=source,all', nocheck => 1);
+ok(build_is(BUILD_SOURCE | BUILD_ARCH_INDEP), 'build source,all is source,all');
+ok(!build_is(BUILD_SOURCE | BUILD_ARCH_DEP), 'build source,all is not source,any');
+ok(build_has_any(BUILD_SOURCE), 'build source,all has_any source');
+ok(build_has_any(BUILD_ARCH_INDEP), 'build source,all has_any any');
+ok(build_has_none(BUILD_DEFAULT), 'build source,all has_none default');
+ok(build_has_none(BUILD_ARCH_DEP), 'build source,all has_none any');
+ok(!build_has_all(BUILD_BINARY), 'build source,all not has_all binary');
+ok(!build_has_all(BUILD_SOURCE | BUILD_ARCH_DEP),
+ 'build source,all not has_all source,any');
+ok(!build_has_all(BUILD_FULL), 'build source,all has_all full');
+
+set_build_type_from_targets('build-arch,build-indep',
+ '--targets=build-arch,build-indep', nocheck => 1);
+is(get_build_options_from_type(), 'binary',
+ 'build is binary from build-arch,build-indep');
+ok(build_is(BUILD_BINARY), 'build is binary from build-arch,build-indep');
+
+set_build_type_from_targets('binary', '--targets=binary', nocheck => 1);
+is(get_build_options_from_type(), 'binary', 'build is binary from binary');
+ok(build_is(BUILD_BINARY), 'build is binary from binary');
+
+set_build_type_from_targets('clean,binary-indep',
+ '--targets=clean,binary-indep', nocheck => 1);
+ok(build_is(BUILD_SOURCE | BUILD_ARCH_INDEP), 'build source,all is source,all');
+ok(!build_is(BUILD_SOURCE | BUILD_ARCH_DEP), 'build source,all is not source,any');
+ok(build_has_any(BUILD_SOURCE), 'build source,all has_any source');
+ok(build_has_any(BUILD_ARCH_INDEP), 'build source,all has_any any');
+ok(build_has_none(BUILD_DEFAULT), 'build source,all has_none default');
+ok(build_has_none(BUILD_ARCH_DEP), 'build source,all has_none any');
+ok(!build_has_all(BUILD_BINARY), 'build source,all not has_all binary');
+ok(!build_has_all(BUILD_SOURCE | BUILD_ARCH_DEP),
+ 'build source,all not has_all source,any');
+ok(!build_has_all(BUILD_FULL), 'build source,all has_all full');
+
+set_build_type(BUILD_BINARY, '--build=binary', nocheck => 1);
+ok(build_is(BUILD_BINARY), 'build binary is binary');
+ok(build_has_any(BUILD_ARCH_DEP), 'build binary has_any any');
+ok(build_has_any(BUILD_ARCH_INDEP), 'build binary has_any all');
+ok(build_has_all(BUILD_BINARY), 'build binary has_all binary');
+ok(build_has_none(BUILD_SOURCE), 'build binary has_none source');
+
+set_build_type(BUILD_FULL, '--build=full', nocheck => 1);
+ok(build_has_any(BUILD_SOURCE), 'build full has_any source');
+ok(build_has_all(BUILD_BINARY), 'build full has_all binary');
+
+1;
diff --git a/scripts/t/Dpkg_Changelog.t b/scripts/t/Dpkg_Changelog.t
new file mode 100644
index 0000000..4d046fe
--- /dev/null
+++ b/scripts/t/Dpkg_Changelog.t
@@ -0,0 +1,383 @@
+#!/usr/bin/perl
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use Test::More tests => 102;
+use Test::Dpkg qw(:paths);
+
+use File::Basename;
+
+use Dpkg::File;
+
+BEGIN {
+ use_ok('Dpkg::Changelog');
+ use_ok('Dpkg::Changelog::Debian');
+ use_ok('Dpkg::Vendor', qw(get_current_vendor));
+};
+
+my $datadir = test_get_data_path();
+
+my $vendor = get_current_vendor();
+
+#########################
+
+foreach my $file ("$datadir/countme", "$datadir/shadow", "$datadir/fields",
+ "$datadir/regressions", "$datadir/date-format", "$datadir/stop-modeline") {
+
+ my $changes = Dpkg::Changelog::Debian->new(verbose => 0);
+ $changes->load($file);
+
+ my $content = file_slurp($file);
+ cmp_ok($content, 'eq', "$changes", "string output of Dpkg::Changelog on $file");
+
+ my $errors = $changes->get_parse_errors();
+ my $basename = basename( $file );
+ is($errors, '', "Parse example changelog $file without errors" );
+
+ my @data = @$changes;
+ ok(@data, 'data is not empty');
+
+ my $str;
+ if ($file eq "$datadir/countme") {
+ # test range options
+ cmp_ok(@data, '==', 7, 'no options -> count');
+ my $all_versions = join( '/', map { $_->get_version() } @data);
+
+ sub check_options {
+ my (%opts) = @_;
+
+ my @cnt = $changes->get_range($opts{range});
+ cmp_ok(@cnt, '==', $opts{count}, "$opts{name} -> count");
+ if ($opts{count} == @{$opts{data}}) {
+ is_deeply(\@cnt, $opts{data}, "$opts{name} -> returns all");
+ } else {
+ is_deeply([ map { $_->get_version() } @cnt ],
+ $opts{versions}, "$opts{name} -> versions" );
+ }
+ }
+
+ my %ref = (
+ changes => $changes,
+ data => \@data,
+ );
+
+ check_options(%ref, range => { count => 3 },
+ count => 3,
+ versions => [ '2:2.0-1', '1:2.0~rc2-3', '1:2.0~rc2-2' ],
+ name => 'positive count');
+ check_options(%ref, range => { count => 3, reverse => 1 },
+ count => 3,
+ versions => [ '1:2.0~rc2-2', '1:2.0~rc2-3', '2:2.0-1' ],
+ name => 'positive reverse count');
+ check_options(%ref, range => { count => -3 },
+ count => 3,
+ versions => [
+ '1:2.0~rc2-1sarge2',
+ '1:2.0~rc2-1sarge1',
+ '1.5-1',
+ ],
+ name => 'negative count');
+ check_options(%ref, range => { count => 1 },
+ count => 1,
+ versions => [ '2:2.0-1' ],
+ name => 'count 1');
+ check_options(%ref, range => { count => 1, default_all => 1 },
+ count => 1,
+ versions => [ '2:2.0-1' ],
+ name => 'count 1 (d_a 1)');
+ check_options(%ref, range => { count => -1 },
+ count => 1,
+ versions => [ '1.5-1' ],
+ name => 'count -1');
+
+ check_options(%ref, range => { count => 3, offset => 2 },
+ count => 3,
+ versions => [
+ '1:2.0~rc2-2',
+ '1:2.0~rc2-1sarge3',
+ '1:2.0~rc2-1sarge2',
+ ],
+ name => 'positive count + positive offset');
+ check_options(%ref, range => { count => -3, offset => 4 },
+ count => 3,
+ versions => [
+ '1:2.0~rc2-3',
+ '1:2.0~rc2-2',
+ '1:2.0~rc2-1sarge3',
+ ],
+ name => 'negative count + positive offset');
+
+ check_options(%ref, range => { count => 4, offset => 5 },
+ count => 2,
+ versions => [ '1:2.0~rc2-1sarge1', '1.5-1' ],
+ name => 'positive count + positive offset (>max)');
+ check_options(%ref, range => { count => -4, offset => 2 },
+ count => 2,
+ versions => [ '2:2.0-1', '1:2.0~rc2-3' ],
+ name => 'negative count + positive offset (<0)');
+
+ check_options(%ref, range => { count => 3, offset => -4 },
+ count => 3,
+ versions => [
+ '1:2.0~rc2-1sarge3',
+ '1:2.0~rc2-1sarge2',
+ '1:2.0~rc2-1sarge1',
+ ],
+ name => 'positive count + negative offset');
+ check_options(%ref, range => { count => -3, offset => -3 },
+ count => 3,
+ versions => [
+ '1:2.0~rc2-3',
+ '1:2.0~rc2-2',
+ '1:2.0~rc2-1sarge3',
+ ],
+ name => 'negative count + negative offset');
+
+ check_options(%ref, range => { count => 5, offset => -2 },
+ count => 2,
+ versions => [ '1:2.0~rc2-1sarge1', '1.5-1' ],
+ name => 'positive count + negative offset (>max)');
+ check_options(%ref, range => { count => -5, offset => -4 },
+ count => 3,
+ versions => [ '2:2.0-1', '1:2.0~rc2-3', '1:2.0~rc2-2' ],
+ name => 'negative count + negative offset (<0)');
+
+ check_options(%ref, range => { count => 7 },
+ count => 7,
+ name => 'count 7 (max)');
+ check_options(%ref, range => { count => -7 },
+ count => 7,
+ name => 'count -7 (-max)');
+ check_options(%ref, range => { count => 10 },
+ count => 7,
+ name => 'count 10 (>max)');
+ check_options(%ref, range => { count => -10 },
+ count => 7,
+ name => 'count -10 (<-max)');
+
+ check_options(%ref, range => { from => '1:2.0~rc2-1sarge3' },
+ count => 4,
+ versions => [
+ '2:2.0-1',
+ '1:2.0~rc2-3',
+ '1:2.0~rc2-2',
+ '1:2.0~rc2-1sarge3',
+ ],
+ name => 'from => "1:2.0~rc2-1sarge3"');
+ check_options(%ref, range => { since => '1:2.0~rc2-1sarge3' },
+ count => 3,
+ versions => [
+ '2:2.0-1',
+ '1:2.0~rc2-3',
+ '1:2.0~rc2-2',
+ ],
+ name => 'since => "1:2.0~rc2-1sarge3"');
+ $SIG{__WARN__} = sub {};
+ check_options(%ref, range => { since => 0 },
+ count => 7,
+ name => 'since => 0 returns all');
+ delete $SIG{__WARN__};
+ check_options(%ref, range => { to => '1:2.0~rc2-1sarge2' },
+ count => 3,
+ versions => [
+ '1:2.0~rc2-1sarge2',
+ '1:2.0~rc2-1sarge1',
+ '1.5-1',
+ ],
+ name => 'to => "1:2.0~rc2-1sarge2"');
+ ## no critic (ControlStructures::ProhibitUntilBlocks)
+ check_options(%ref, range => { until => '1:2.0~rc2-1sarge2' },
+ count => 2,
+ versions => [ '1:2.0~rc2-1sarge1', '1.5-1' ],
+ name => 'until => "1:2.0~rc2-1sarge2"');
+ ## use critic
+ #TODO: test combinations
+ }
+ if ($file eq "$datadir/fields") {
+ my $str = $changes->format_range('dpkg', { all => 1 });
+ my $expected = 'Source: fields
+Version: 2.0-0etch1
+Distribution: stable
+Urgency: high
+Maintainer: Frank Lichtenheld <frank@lichtenheld.de>
+Timestamp: 1200235759
+Date: Sun, 13 Jan 2008 15:49:19 +0100
+Closes: 1000000 1111111 2222222
+Changes:
+ fields (2.0-0etch1) stable; urgency=low
+ .
+ * Upload to stable (Closes: #1111111, #2222222)
+ * Fix more stuff. (LP: #54321, #2424242)
+ .
+ fields (2.0-1) unstable frozen; urgency=medium
+ .
+ [ Frank Lichtenheld ]
+ * Upload to unstable (Closes: #1111111, #2222222)
+ * Fix stuff. (LP: #12345, #424242)
+ .
+ [ Raphaël Hertzog ]
+ * New upstream release.
+ - implements a
+ - implements b
+ * Update S-V.
+ .
+ fields (2.0~b1-1) unstable; urgency=low,xc-userfield=foobar
+ .
+ * Beta
+ .
+ fields (1.0) experimental; urgency=high,xb-userfield2=foobar
+ .
+ * First upload (Closes: #1000000)
+Xb-Userfield2: foobar
+Xc-Userfield: foobar
+
+';
+ if ($vendor eq 'Ubuntu') {
+ $expected =~ s/^(Closes:.*)/$1\nLaunchpad-Bugs-Fixed: 12345 54321 424242 2424242/m;
+ }
+ cmp_ok($str, 'eq', $expected, 'fields handling');
+
+ $str = $changes->format_range('dpkg', { offset => 1, count => 2 });
+ $expected = 'Source: fields
+Version: 2.0-1
+Distribution: unstable frozen
+Urgency: medium
+Maintainer: Frank Lichtenheld <djpig@debian.org>
+Timestamp: 1200149359
+Date: Sun, 12 Jan 2008 15:49:19 +0100
+Closes: 1111111 2222222
+Changes:
+ fields (2.0-1) unstable frozen; urgency=medium
+ .
+ [ Frank Lichtenheld ]
+ * Upload to unstable (Closes: #1111111, #2222222)
+ * Fix stuff. (LP: #12345, #424242)
+ .
+ [ Raphaël Hertzog ]
+ * New upstream release.
+ - implements a
+ - implements b
+ * Update S-V.
+ .
+ fields (2.0~b1-1) unstable; urgency=low,xc-userfield=foobar
+ .
+ * Beta
+Xc-Userfield: foobar
+
+';
+ if ($vendor eq 'Ubuntu') {
+ $expected =~ s/^(Closes:.*)/$1\nLaunchpad-Bugs-Fixed: 12345 424242/m;
+ }
+ cmp_ok($str, 'eq', $expected, 'fields handling 2');
+
+ $str = $changes->format_range('rfc822', { offset => 2, count => 2 });
+ $expected = 'Source: fields
+Version: 2.0~b1-1
+Distribution: unstable
+Urgency: low
+Maintainer: Frank Lichtenheld <frank@lichtenheld.de>
+Timestamp: 1200062959
+Date: Sun, 11 Jan 2008 15:49:19 +0100
+Changes:
+ fields (2.0~b1-1) unstable; urgency=low,xc-userfield=foobar
+ .
+ * Beta
+Xc-Userfield: foobar
+
+Source: fields
+Version: 1.0
+Distribution: experimental
+Urgency: high
+Maintainer: Frank Lichtenheld <djpig@debian.org>
+Timestamp: 1199976559
+Date: Sun, 10 Jan 2008 15:49:19 +0100
+Closes: 1000000
+Changes:
+ fields (1.0) experimental; urgency=high,xb-userfield2=foobar
+ .
+ * First upload (Closes: #1000000)
+Xb-Userfield2: foobar
+
+';
+ cmp_ok($str, 'eq', $expected, 'fields handling 3');
+
+ # Test Dpkg::Changelog::Entry methods
+ is($data[1]->get_version(), '2.0-1', 'get_version');
+ is($data[1]->get_source(), 'fields', 'get_source');
+ is(scalar $data[1]->get_distributions(), 'unstable', 'get_distribution');
+ is(join('|', $data[1]->get_distributions()), 'unstable|frozen',
+ 'get_distributions');
+ is($data[3]->get_optional_fields(),
+ "Urgency: high\nCloses: 1000000\nXb-Userfield2: foobar\n",
+ 'get_optional_fields');
+ is($data[1]->get_maintainer(), 'Frank Lichtenheld <djpig@debian.org>',
+ 'get_maintainer');
+ is($data[1]->get_timestamp(), 'Sun, 12 Jan 2008 15:49:19 +0100',
+ 'get_timestamp');
+ my @items = $data[1]->get_change_items();
+ is($items[0], " [ Frank Lichtenheld ]\n", 'change items 1');
+ is($items[4], ' * New upstream release.
+ - implements a
+ - implements b
+', 'change items 2');
+ is($items[5], " * Update S-V.\n", 'change items 3');
+ }
+ if ($file eq "$datadir/date-format") {
+ is($data[0]->get_timestamp(), '01 Jul 2100 23:59:59 -1200',
+ 'get date w/o DoW, and negative timezone offset');
+ is($data[1]->get_timestamp(), 'Tue, 27 Feb 2050 12:00:00 +1245',
+ 'get date w/ DoW, and positive timezone offset');
+ is($data[2]->get_timestamp(), 'Mon, 01 Jan 2000 00:00:00 +0000',
+ 'get date w/ DoW, and zero timezone offset');
+ }
+ if ($file eq "$datadir/stop-modeline") {
+ is($changes->get_unparsed_tail(), "vim: et\n",
+ 'get unparsed modeline at EOF');
+ }
+ if ($file eq "$datadir/regressions") {
+ my $f = ($changes->format_range('dpkg'))[0];
+ is("$f->{Version}", '0', 'version 0 correctly parsed');
+ }
+
+ SKIP: {
+ skip('avoid spurious warning with only one entry', 2)
+ if @data == 1;
+
+ my $oldest_version = $data[-1]->{Version};
+ $str = $changes->format_range('dpkg', { since => $oldest_version });
+
+ $str = $changes->format_range('rfc822');
+
+ ok(1, 'TODO check rfc822 output');
+
+ $str = $changes->format_range('rfc822', { since => $oldest_version });
+
+ ok(1, 'TODO check rfc822 output with ranges');
+ }
+}
+
+foreach my $test (([ "$datadir/misplaced-tz", 6 ],
+ [ "$datadir/unreleased", 5, 7 ])) {
+
+ my $file = shift @$test;
+ my $changes = Dpkg::Changelog::Debian->new(verbose => 0);
+ $changes->load($file);
+ my @errors = $changes->get_parse_errors();
+
+ ok(@errors, 'errors occured');
+ is_deeply( [ map { $_->[1] } @errors ], $test, 'check line numbers' );
+}
diff --git a/scripts/t/Dpkg_Changelog/countme b/scripts/t/Dpkg_Changelog/countme
new file mode 100644
index 0000000..166b72f
--- /dev/null
+++ b/scripts/t/Dpkg_Changelog/countme
@@ -0,0 +1,41 @@
+countme (2:2.0-1) unstable; urgency=low
+
+ * Final
+
+ -- Frank Lichtenheld <frank@lichtenheld.de> Tue, 4 Oct 2005 01:49:05 +0200
+
+countme (1:2.0~rc2-3) unstable; urgency=low
+
+ * kadabra
+
+ -- Frank Lichtenheld <frank@lichtenheld.de> Tue, 4 Oct 2005 01:48:05 +0200
+
+countme (1:2.0~rc2-2) unstable; urgency=low
+
+ * Abra
+
+ -- Frank Lichtenheld <frank@lichtenheld.de> Tue, 4 Oct 2005 01:47:48 +0200
+
+countme (1:2.0~rc2-1sarge3) unstable; urgency=low
+
+ * Baz
+
+ -- Frank Lichtenheld <frank@lichtenheld.de> Tue, 4 Oct 2005 01:47:19 +0200
+
+countme (1:2.0~rc2-1sarge2) unstable; urgency=low
+
+ * Bar
+
+ -- Frank Lichtenheld <frank@lichtenheld.de> Tue, 4 Oct 2005 01:47:08 +0200
+
+countme (1:2.0~rc2-1sarge1) unstable; urgency=low
+
+ * Foo
+
+ -- Frank Lichtenheld <frank@lichtenheld.de> Tue, 4 Oct 2005 01:46:49 +0200
+
+countme (1.5-1) unstable; urgency=low
+
+ * Initial
+
+ -- Frank Lichtenheld <frank@lichtenheld.de> Thu, 01 Jan 1970 00:00:00 +0000
diff --git a/scripts/t/Dpkg_Changelog/date-format b/scripts/t/Dpkg_Changelog/date-format
new file mode 100644
index 0000000..0916fb2
--- /dev/null
+++ b/scripts/t/Dpkg_Changelog/date-format
@@ -0,0 +1,17 @@
+date-format (0.2) unstable; urgency=low
+
+ * Date without day of week name and negative timezone offset.
+
+ -- Dpkg Developers <debian-dpkg@lists.debian.org> 01 Jul 2100 23:59:59 -1200
+
+date-format (0.1) unstable; urgency=low
+
+ * Date with day of week name and positive timezone offset.
+
+ -- Dpkg Developers <debian-dpkg@lists.debian.org> Tue, 27 Feb 2050 12:00:00 +1245
+
+date-format (0.0) unstable; urgency=low
+
+ * Date with day of week name and zero timezone offset.
+
+ -- Dpkg Developers <debian-dpkg@lists.debian.org> Mon, 01 Jan 2000 00:00:00 +0000
diff --git a/scripts/t/Dpkg_Changelog/fields b/scripts/t/Dpkg_Changelog/fields
new file mode 100644
index 0000000..df4638f
--- /dev/null
+++ b/scripts/t/Dpkg_Changelog/fields
@@ -0,0 +1,40 @@
+fields (2.0-0etch1) stable; urgency=low
+
+ * Upload to stable (Closes: #1111111, #2222222)
+ * Fix more stuff. (LP: #54321, #2424242)
+
+ -- Frank Lichtenheld <frank@lichtenheld.de> Sun, 13 Jan 2008 15:49:19 +0100
+
+fields (2.0-1) unstable frozen; urgency=medium
+
+ [ Frank Lichtenheld ]
+ * Upload to unstable (Closes: #1111111, #2222222)
+ * Fix stuff. (LP: #12345, #424242)
+
+ [ Raphaël Hertzog ]
+ * New upstream release.
+ - implements a
+ - implements b
+ * Update S-V.
+
+ -- Frank Lichtenheld <djpig@debian.org> Sun, 12 Jan 2008 15:49:19 +0100
+
+fields (2.0~b1-1) unstable; urgency=low,xc-userfield=foobar
+
+ * Beta
+
+ -- Frank Lichtenheld <frank@lichtenheld.de> Sun, 11 Jan 2008 15:49:19 +0100
+
+fields (1.0) experimental; urgency=high,xb-userfield2=foobar
+
+ * First upload (Closes: #1000000)
+
+ -- Frank Lichtenheld <djpig@debian.org> Sun, 10 Jan 2008 15:49:19 +0100
+
+fields (0.5) experimental
+
+ * This entry is in an older changelog format and it should not be
+ parsed. So let's put some non-conforming content.
+
+This line starts on the first column.
+-- Raphaël Hertzog
diff --git a/scripts/t/Dpkg_Changelog/misplaced-tz b/scripts/t/Dpkg_Changelog/misplaced-tz
new file mode 100644
index 0000000..39dc8e3
--- /dev/null
+++ b/scripts/t/Dpkg_Changelog/misplaced-tz
@@ -0,0 +1,12 @@
+error-tz (1.1-1) unstable; urgency=low
+
+ *
+
+ -- Frank Lichtenheld <djpig@debian.org> Mon, 16 Jul 2007 02:54:18 +0200
++0200
+
+error-tz (1.0-1) unstable; urgency=low
+
+ *
+
+ -- Frank Lichtenheld <djpig@debian.org> Mon, 16 Jul 2007 02:54:18 +0200
diff --git a/scripts/t/Dpkg_Changelog/regressions b/scripts/t/Dpkg_Changelog/regressions
new file mode 100644
index 0000000..4c8ad30
--- /dev/null
+++ b/scripts/t/Dpkg_Changelog/regressions
@@ -0,0 +1,7 @@
+re-gressions++1.2.3 (0) ALLOWED.chars-567+890; urgency=low
+
+ * Test allowed chars in package name and distribution name.
+ (Closes: #361171)
+ * Test how version 0 is exported through methods.
+
+ -- Frank Lichtenheld <frank@lichtenheld.de> Thu, 01 Jan 1970 00:00:00 +0000
diff --git a/scripts/t/Dpkg_Changelog/shadow b/scripts/t/Dpkg_Changelog/shadow
new file mode 100644
index 0000000..a23da58
--- /dev/null
+++ b/scripts/t/Dpkg_Changelog/shadow
@@ -0,0 +1,1755 @@
+shadow (1:4.0.3-36) unstable; urgency=low
+
+ * Debian specific programs fixes:
+ - Re-enable logging and displaying failures on login when login is
+ compiled with PAM and when FAILLOG_ENAB is set to yes. And create the
+ faillog file if it does not exist on postinst (as on Woody).
+ Closes: #192849
+ - do not localize login's syslog messages.
+ * Debian packaging fixes:
+ - Fix FTBFS with new dpkg 1.13 and use a correct dpkg-architecture
+ invocation. Closes: #314407
+ - Add a comment about potential sensitive information exposure
+ when LOG_UNKFAIL_ENAB is set in login.defs
+ Closes: #298773
+ - Remove limits.5 and limits.conf.5 man pages which do not
+ reflect the way we deal with limits in Debian
+ Closes: #288106, #244754
+ - debian/login.defs:
+ - Make SU_PATH and PATH consistent with the values used in /etc/profile
+ Closes: #286616
+ - Comment the UMASK setting which is more confusing than useful
+ as it only affects console logins. Better use pam_umask instead
+ Closes: #314539, #248150
+ - Add a comment about "appropriate" values for umask
+ Closes: #269583
+ - Correct the assertion about the variable defined by QMAIL_DIR
+ which is MAILDIR, not MAIL
+ Closes: #109279
+ - Move the PASS_MAX_LEN variable at the end of login.defs as this
+ is obsoleted when using PAM
+ Closes: #87301
+ - debian/passwd.config:
+ - Re-enable the password confirmation question at critical priority
+ Closes: #304350
+ - Do no prompt again for the login name when the two passwords don't
+ match while creating a new user
+ Closes: #245332
+ - debian/add-shell.sh, debian/remove-shell.sh, debian/shadowconfig.sh,
+ debian/passwd.config, debian/passwd.postinst:
+ - checked for bashisms, replaced "#!/bin/bash" with "#!/bin/sh",
+ Closes: #315767
+ - replaced "test XXX -a YYY" XSI:isms with "test XXX && test YYY",
+ for rationale see:
+ http://www.opengroup.org/onlinepubs/009695399/utilities/test.html
+ - replaced all unneeded "egrep"s with basic "grep"s
+ Closes: #256732
+ - debian/rules:
+ Remove the setuid bit on login
+ Closes: #298060
+ - debian/passwd.templates:
+ Templates rewrite to shorten them down a little and make them DTSG
+ compliant. Give more details about what the user's full name is used
+ for.
+ Closes: #287410
+ - Updated to Standards: 3.6.2 (checked)
+ * Debconf translation updates:
+ - Estonian added. Closes: #312471
+ - Basque updated. Closes: #314303
+ - Malagasy updated. Closes: #290842
+ - Punjabi updated. Closes: #315372
+ - Danish updated. Closes: #315378
+ - Polish updated. Closes: #315391
+ - Japanese updated. Closes: #315407
+ - Brazilian Portuguese updated. Closes: #315426
+ - Czech updated. Closes: #315429
+ - Spanish updated. Closes: #315434
+ - Lithuanian updated. Closes: #315483
+ - Galician updated. Closes: #315362
+ - Portuguese updated. Closes: #315375
+ - Simplified Chinese updated. Closes: #315567
+ - French updated
+ - Ukrainian updated. Closes: #315727
+ - Welsh updated. Closes: #315809
+ - Slovak updated. Closes: #315812
+ - Romanian updated. Closes: #315783
+ - Finnish updated. Closes: #315972
+ - Catalan updated. Closes: #316026
+ * Man pages translation updates:
+ - Remove the too outdated Korean translation of newgrp.1
+ which doesn't even mention sg
+ Closes: #261490
+ * Man pages correction for Debian specific issues:
+ - 402_usermod.8-system-users-range-286258:
+ Document the system user range from 0 to 999 in Debian
+ Closes: #286258
+ * Upstream bugs not fixed in upstream releases or CVS:
+ - 423_su_pass_args_without_concatenation
+ Thanks to Helmut Waitzmann.
+ Closes: #276419
+ * pass the argument to the shell or command without concatenation
+ before the call to exec.
+ * If no command is provided, the arguments after the username are for
+ the shell, no -c has to be appended.
+ - 008_su_ignore_SIGINT
+ * Also ignore SIGQUIT in su to avoid defeating the delay.
+ The gain in security is very minor.
+ Closes: #288827
+ - 424_pwck.8_quiet_option
+ pwck(8): document the -q option. Closes: #309408
+ - 425_lastlog_8_sparse
+ lastlog(8): Document that lastlog is a sparse file, and don't need to be
+ rotated. Closes: #219321
+ - 426_grpck_group-gshadow_members_consistency
+ * (grpck) warn for inconsistencies between members in /etc/group and gshadow
+ Closes: #75181
+ * (pwck and grpck) warn and propose a fix for entries present in the
+ regular /etc/group or /etc/passwd files and not in shadow/gshadow.
+ - 427_chage_expiry_0
+ Fix chage display in the case of null expiry fields (do not display
+ Never, but 01 Jan 1970)
+ Closes: #78961
+ * Upstream bugs already fixed in upstream releases or CVS:
+ - Corrected typos in chfn.1. Closes: #312428
+ - Corrected typos in gshadow.5. Closes: #312429
+ - Corrected typos in shadow.5. Closes: #312430
+ - Corrected typos in grpck.8. Closes: #312431
+ - Added patch (356th) for su to propagate SIGSTOP up and SIGCONT down.
+ Added similar patch (357th) for newgrp. Both changes only affect
+ operation with CLOSE_SESSION set to yes (in /etc/login.defs).
+ Closes: #314727
+ * Translation updates:
+ - debian/patches/010_more-i18ned-messages
+ - More messages are translatable. We will deal with the translation
+ updates after syncing with upstream.
+ Closes: #266281
+ - debian/patches/114_eu:
+ - Basque translation update. Closes: #314423
+ - debian/patches/132_vi.dpatch:
+ - Vietnamese translation update. Closes: #315840
+ -- Christian Perrier <bubulle@debian.org> Mon, 20 Jun 2005 23:37:56 +0300
+
+shadow (1:4.0.3-35) unstable; urgency=low
+
+ * Re-apply the debian/patches/036_CAN-2004-1001_passwd_check patch
+ which fixed the "Adjusted password check to fix authentication bypass"
+ security issue (CAN-2004-1001)
+ * Debian packaging fixes:
+ - Add --host to config_options on cross build. Patch from NIIBE Yutaka.
+ Closes: #283729
+ - Enable login for GNU/Hurd in rules. First patch from Robert Millan.
+ Closes: #249372
+ - Cleanup passwd debconf stuff as md5 passwords are assumed since
+ 1:4.0.3-19 and the resolution of #223664.
+ - Document the TTYPERM variable set to 0600 in the default login.defs file
+ Closes: #59439
+ - Make login and su use limits.so PAM module by default
+ (change made in sarge branch also)
+ Closes: #300720
+ - debian/rules: Add removal of config.log in the clean target
+ - debian/control:
+ - Add Martin to Uploaders
+ - Remove Sam Hartman from Uploaders. The team is now setup and this
+ does not really have a real meaning now. You're still welcome for
+ NMU's, Sam, and thanks for the good work.
+ - Switching from dpatch to quilt.
+ * Debconf translation updates:
+ - Portuguese spellchecked by Miguel Figueiredo
+ - Punjabi (Gumurkhi) added, by Amanpreet Singh Alam. Closes: #309800
+ * Man pages translation updates:
+ - German completed by reference to original man page
+ Closes: #311554
+ * Debian specific programs fixes:
+ - NONE
+ * Upstream bugs not fixed in upstream releases or CVS:
+ - 421_login.1_pishing:
+ Document how to initiate a trusted path under Linux
+ Closes: #305600
+ - set CLOSE_SESSIONS to yes in login.defs, and document why.
+ Closes: #163635
+ * Upstream bugs already fixed in upstream releases or CVS:
+ - 324_configure.in-no-debian-dir:
+ Separated from 004_configure.in : this change will not be needed when
+ syncing with upstream
+ - 325_gshadow_5_manpage:
+ Add a gshadow.5 man page, and clarifications in the newgrp and gpasswd
+ man pages.
+ Closes: #113191, #166173, #169046, #251926
+ - 326_su.1_pwconv.8-typos:
+ Correct typos in su.1 and pwconv.8 man pages.
+ Closes: #309666
+ * Translation updates:
+ - 004_configure.in, 100_LINGUAS
+ Add Vietnamese to LINGUAS. Patch for LINGUAS in configure.in moved
+ from 004_configure.in to the new 100_LINGUAS patch
+ - 101_cs: Czech updated by Miroslav Kure
+ Closes: #308658
+ - 102_de: German updated by Dennis Stampfer
+ - 104_fr: French updated by Jean-Luc Coulon
+ Closes: #308909
+ - 111_ca: Catalan completed by Guillem Jover
+ Closes: #309212
+ - 108_sv: Swedish completed with the help of Magnus Holmgren
+ Encoding issues fixed
+ Closes: #309380
+ - 109_uk: Ukrainian completed by Eugeniy Meshcheryakov
+ Closes: #308647
+ - 120_nl: Dutch updated by Bart Cornelis
+ Closes: #308662
+ - 124_ru: Russian updated by Yuri Kozlov
+ Closes: #308839
+ - 129_ru: Romanian updated by Sorin Batariuc
+ Closes: #308921
+ - 130_zh_TW: Tradition Chinese updated by Tetralet
+ Closes: #311588
+ - 131_tl: Tagalog updated by Eric Pareja
+ Closes: #310386
+ - 132_vi: Correct file used for Vietnamese translation
+ Closes: #306614, #307251, #307262, #308479
+
+ -- Christian Perrier <bubulle@debian.org> Fri, 3 Jun 2005 07:32:07 +0200
+
+shadow (1:4.0.3-34) unstable; urgency=low
+
+ * Debian packaging fixes:
+ - NONE
+ * Debian specific programs fixes:
+ - NONE
+ * Upstream bugs not fixed in upstream releases or CVS:
+ - 406_good_name:
+ - relaxed user/group names checking is now fixed and accepts
+ _only_ names matching '^[^-:\n][^:\n]*$'
+ Closes: #264879, #308478
+ * Upstream bugs already fixed in upstream releases or CVS:
+ - 311_high-uids.dpatch:
+ - Add large file support to lastlog and faillog. Closes: #280212
+ * Translation updates:
+ - 132_vi:
+ Vietnamese programs translation added (from upstream CVS)
+ Closes: #308479
+ - 118_it:
+ Italian programs translation updated
+ Closes: #308327
+
+ -- Christian Perrier <bubulle@debian.org> Tue, 10 May 2005 18:24:12 +0200
+
+shadow (1:4.0.3-33) unstable; urgency=low
+
+ * The "Don't believe lintian blindly" release
+ * Urgency left to low because RC bug fixed but we leave priority
+ to sarge-targeted work
+ * Debian packaging fixes:
+ - Remove CVS id tag from the supplied login.defs file
+ Closes: #308019
+ - revert dependency on debconf which would make it required
+ Closes: #308145
+ - Add the missing add-shell, remove-shell, cppw and cpgr
+ (Debian specific) man pages
+ Closes: #162241
+ - make lintian ignore warnings about missing debconf dependency
+ in passwd.lintian-overrides
+ * Debian specific programs fixes:
+ - NONE
+ * Upstream bugs not already fixed in upstream releases or CVS:
+ - NONE
+ * Upstream bugs already fixed in upstream releases or CVS:
+ - 313_pam_access_with_preauth:
+ - allow PAM account authorization when preauthenticated
+ Closes: #193869
+ - 314_passwd.1_formatting:
+ - minor formatting fixes of passwd(1) man page
+ Closes: #304447
+ - 315_chage.1_document_expiration_removal:
+ - document expiration removal in chage(1)
+ Closes: #304542
+ - 316_vipw-race-242407:
+ - make vipw to remove /etc/{passwd|shadow|group|gshadow}.edit
+ and only then unlock
+ Closes: #242407
+ - 317_lastlog_usage_249611:
+ - Fix the lastlog usage and all the translations accordingly
+ (--user instead of --login).
+ Closes: #249611
+ - 323_passwd.1-typo:
+ - correct a typo in passwd(1) man page. Closes: #302740
+
+ -- Christian Perrier <bubulle@debian.org> Sun, 8 May 2005 14:32:20 +0200
+
+shadow (1:4.0.3-32) unstable; urgency=low
+
+ * Switch to dpatch for upstream patches
+ This should bring more clarity to modifications
+ we make to upstream sources and help integrating
+ new upstream releases
+ Old patches have been moved quite roughly to
+ debian/patches
+ * Modified debian/rules for "Calling GNU configure properly", see
+ /usr/share/doc/autotools-dev/README.Debian.gz
+ * Debian packaging fixes:
+ - Lintian fixes:
+ - Description synopsis initial capital letters removed
+ - passwd now depends on debconf (>=0.5.00) as it uses the seen flag
+ - add login.lintian-overrides and passwd.lintian-overrides
+ files to mention setuid and setgid files and avoid lintian warning
+ about them
+ - debian/pam.d/login:
+ - Remove the confusing comment about "nullok". Closes: #207816
+ - debian/rules:
+ - Add call for dh_installdirs
+ - debian/passwd.dirs:
+ - Added
+ - debian/login.dirs:
+ - Added
+ * Debian specific programs fixes:
+ - fixed /usr/sbin/remove-shell bug with handling of non-existing/empty
+ /etc/shells file. Closes: #271565
+ * GNU config automated update: config.sub (20010907 to 20050422),
+ config.guess (20010904 to 20050422)
+
+ -- Christian Perrier <bubulle@debian.org> Tue, 3 May 2005 11:53:12 +0200
+
+shadow (1:4.0.3-31sarge3) unstable; urgency=low
+
+ * The "please buy me a brain" release
+ * *Really* shorten down the Dutch debconf translation for the root password
+ input so that it fits in one screen. Closes: #277750
+ * man/usermod.8: *Really* document -o option in usermod
+ Closes: #302388
+ * man/fr/po4a/fr: Removed. This directory only clutters up the diff
+ and is not used during the build process
+ * man/de/passwd.1: Updated. Closes: #304757
+ * man/de/chsh.1: Updated.
+ * man/it/*: All files updated. Closes: #305095
+ * Translation updates:
+ - Portuguese (from the translation file sent for 4.0.8 upstream)
+ Closes: #305257
+
+ -- Christian Perrier <bubulle@debian.org> Tue, 19 Apr 2005 19:31:43 +0200
+
+shadow (1:4.0.3-31sarge2) unstable; urgency=low
+
+ * Shorten down the Dutch debconf translation for the root password
+ input so that it fits in one screen. Closes: #277750
+ * man/usermod.8: Document -o option in usermod
+ Closes: #302388
+
+ -- Christian Perrier <bubulle@debian.org> Mon, 4 Apr 2005 20:28:47 +0200
+
+shadow (1:4.0.3-31sarge1) unstable; urgency=high
+
+ * Urgency set to high because of RC bug fixed. Reuploaded
+ because I messed up with the changelog first. Use this occasion
+ to start a sarge series just in case. Changes below were made
+ in the former version already.
+ * Avoid package file conflicts for woody->sarge upgrade:
+ - Add manpages-it and manpages-ko to Replaces: for login
+ - Remove manpages-de from Replaces: for login (useless)
+ - Improve readability of the Replaces line for passwd
+ Closes: #299549
+
+ -- Christian Perrier <bubulle@debian.org> Tue, 15 Mar 2005 13:55:34 +0100
+
+shadow (1:4.0.3-31) unstable; urgency=low
+
+ * New maintainer
+
+ -- Christian Perrier <bubulle@debian.org> Fri, 11 Mar 2005 19:28:38 +0100
+
+shadow (1:4.0.3-30.10) unstable; urgency=low
+
+ * Non-maintainer upload targeted at sarge.
+ * Programs translations:
+ - Greek updated. Closes: #293911
+ - French updated. Closes: #294330
+ * Debconf translations:
+ - Galician updated. Closes: #295543
+
+ -- Christian Perrier <bubulle@debian.org> Mon, 7 Feb 2005 08:18:56 +0100
+
+shadow (1:4.0.3-30.9) unstable; urgency=low
+
+ * Non-maintainer upload targeted at sarge.
+ * Programs translations:
+ - German updated. Closes: #291703
+ - Tagalog added. Closes: #292353
+ - Korean updated.
+
+ -- Christian Perrier <bubulle@debian.org> Sun, 23 Jan 2005 09:30:49 +0100
+
+shadow (1:4.0.3-30.8) unstable; urgency=low
+
+ * Non-maintainer upload targeted at sarge.
+ * Debconf translations:
+ - Tagalog added. Closes: #289837
+ * Programs translations:
+ - Traditional Chinese added. Closes: #288879
+
+ -- Christian Perrier <bubulle@debian.org> Tue, 11 Jan 2005 11:39:18 +0100
+
+shadow (1:4.0.3-30.7) unstable; urgency=low
+
+ * Non-maintainer upload targeted at sarge.
+ * Resolv conflict with manpage-spl in login
+ as well as passwd. Thanks to Robert Luberda for
+ the notice
+
+ -- Christian Perrier <bubulle@debian.org> Thu, 23 Dec 2004 22:23:11 +0100
+
+shadow (1:4.0.3-30.6) unstable; urgency=low
+
+ * Revert back to Ian Gulliver genuine patch
+ to chpasswd. Update man page accordingly.
+ Closes: #283961
+ (again)
+ * Programs translations
+ - German updated. Closes: #286522
+ * Debconf translations
+ - German updated. Closes: #286522
+
+ -- Christian Perrier <bubulle@debian.org> Mon, 20 Dec 2004 23:51:39 +0100
+
+shadow (1:4.0.3-30.5) unstable; urgency=high
+
+ * Non-maintainer upload targeted at sarge.
+ Fix release critical bug
+ * Resolve conflict with woody's manpages-pl package
+ which prevent woody->sarge upgrade if
+ manpages-pl was installed
+ Closes: #284239
+ * Programs translations
+ - Romanian added. Closes: #284338
+ * Add MD5 support to chpasswd
+ Thanks to Ian Gulliver for the patch
+ Closes: #283961
+ * Correct typos in man pages
+ Thanks to Nicolas François for the patch
+ Closes: #141322
+ * Replace "C/" with "../../" in man/fr/shadow.conf
+ for best integration in the package build process
+
+ -- Christian Perrier <bubulle@debian.org> Thu, 16 Dec 2004 21:48:56 +0100
+
+shadow (1:4.0.3-30.4) unstable; urgency=low
+
+ * Non-maintainer upload targeted at sarge.
+ Localisation and d-i related updates only
+ * Programs translations
+ - Albanian (very partial) added.
+ * Debconf translations
+ - Hindi added. Closes: #282443
+ - Malagasy added. Closes: #282580
+ - Albanian added. Closes: #282160
+
+ -- Christian Perrier <bubulle@debian.org> Thu, 25 Nov 2004 07:21:53 +0100
+
+shadow (1:4.0.3-30.3) unstable; urgency=high
+
+ * Non-maintainer upload: security fix using the woody patch
+ by the Security Team
+ * Adjusted password check to fix authentication bypass
+ [debian/patches/036_CAN-2004-1001_passwd_check]
+ * Debconf translations
+ - Brazilian Portuguese updated. Closes: #278051
+ - Norwegian Bokmal fixed. Closes: #277563
+ * Programs translations
+ - Indonesian updated. Closes: #277751, #277741
+
+ -- Christian Perrier <bubulle@debian.org> Tue, 2 Nov 2004 22:28:26 +0100
+
+shadow (1:4.0.3-30.2) unstable; urgency=low
+
+ * Non-maintainer upload targeted at sarge.
+ Localisation and d-i related updates only
+ * Debconf translations
+ - Macedonian added. Closes: #275781
+ - Slovakian updated. Closes: #273585
+ - Slovenian added.
+ * Man pages translations
+ - German for vipw.8/vigr.8. Closes: #260645
+ * Fix preseeding for d-i : do not mark debconf templates as seen
+ Also remove the hack for Joey Hess login name..:)
+ Closes: #271407
+ * Ask for the user full name at critical priority so that
+ it is never empty. Closes: #257700
+
+ -- Christian Perrier <bubulle@debian.org> Sun, 10 Oct 2004 19:02:50 +0200
+
+shadow (1:4.0.3-30.1) unstable; urgency=low
+
+ * Non-maintainer upload targeted at sarge. Localisation updates only
+ * Debconf translations
+ - Arabic added. Closes: #261022
+ - Swedish updated. Closes: #261553
+ - Bulgarian added. Closes: #262928
+ - Brazilian Portuguese updated. Closes: #263957
+ - Simplified Chinese updated. Closes: #268646
+ - Traditional Chinese updated. Closes: #268151
+ - German updated. Closes: #268051
+ - Basque synced with templates.pot
+ * Programs translations
+ - Swedish updated. Closes: #261553
+ - Russian updated. Closes: #268412
+ - Norwegian Bokmal updated. Closes: #269907
+ - Norwegian Nynorsk updated. Closes: #269907
+ - Hebrew updated. Closes: #269967
+ - Danish updated. Closes: #270083
+ - Catalan updated. Closes: #254956
+ * Man pages translations
+ - French translation completely rewritten and reviewed
+ Closes: #270168
+ - Add expiry.1 and limits.conf.5 to the list of installed man
+ pages (add two lines to passwd.files and one to rules)
+ From #270168 also.
+
+ -- Christian Perrier <bubulle@debian.org> Tue, 7 Sep 2004 20:20:21 +0200
+
+shadow (1:4.0.3-30) unstable; urgency=high
+ * Attempt to fix FTBFS and dependency problems on hurd. Closes: #235641
+ * don't run dh_undocumented anymore as it has become angstful.
+
+ * Thanks to Christian Perrier:
+ * Debconf translations
+ - Brazilian updated. Closes: #261387
+ - Croatian added. Closes: #261418
+ - Minor corrections fo ja.po and pl.po headers
+ * Programs translations
+ - Dutch updated. Closes: #260361
+ - Hebrew added. Closes: #260722
+ * Urgency set to high because of RC bug fixed:
+ * Correct check for root password being already set in passwd.config
+ Closes: #260799
+
+ * Acknowledge 29.1 NMU:
+ Closes: #256664, #257949, #258241, #258563, #258566, #258957,
+ #190567, #259389, #260223, #257949, #259663, #259827
+
+ -- Karl Ramm <kcr@debian.org> Tue, 27 Jul 2004 09:38:32 -0400
+
+shadow (1:4.0.3-29.1) unstable; urgency=low
+
+ * NMU with maintainer consent
+ * Programs translations
+ - Greek updated. Closes: #256664
+ - Finnish updated. Closes: #257949
+ - Spanish updated. Closes: #258241
+ - Polish updated. Closes: #258563
+ - Indonesian added (configure.in changed accordingly). Closes: #258566
+ - French updated. Closes: #258957, #190567
+ - Slovak updated. Closes: #259389
+ - Portuguese updated. Closes: #260223
+ * Debconf translations
+ - Finnish updated. Closes: #257949
+ * Typo correction in su.1 man page. Closes: #259663
+ * Removed malloc definition in libmisc/xmalloc.c
+ Closes: #259827
+ * Lintian-driven corrections
+ - Corrected section number in several man pages:
+ - grpck.8
+ - pwck.8
+ - ja/grpck.8
+ - pl/grpck.8
+ - pl/pwck.8
+ - Replace the full GPL text in copyright by a pointer
+ - Bumped Standards to 3.6.1.1 (changes checked)
+
+ -- Christian Perrier <bubulle@debian.org> Mon, 19 Jul 2004 17:52:24 +0200
+
+shadow (1:4.0.3-29) unstable; urgency=low
+ * Be up front on the origin of our su. Closes: #244297
+ * The following thanks to Christian Perrier:
+ * Debconf translations
+ - Hungarian added. Closes: #256493
+ - Greek updated. Closes: #251990
+ - Brazilian portuguese updated. Closes: #256771
+ * po/POTFILES.in
+ - corrected file. No more mentions unexisting files
+ Closes: #253792
+ this change was already in 28.5 but was forgotten in the
+ changelog
+ * Acknowledge NMUs:
+ closes: #244604, #244734, #246302, #246376, #246848, #246859,
+ #247084, #247698, #247770, #248386, #248391, #248392,
+ #248392, #248516, #248516, #248648, #248938, #248957,
+ #249141, #249257, #249682, #250169, #250339, #250496,
+ #251140, #251141, #251317, #251495, #251716, #251990,
+ #252087, #252499, #253165, #253186, #253570, #254503,
+ #254760
+
+ -- Karl Ramm <kcr@debian.org> Sat, 3 Jul 2004 00:24:55 -0400
+
+shadow (1:4.0.3-28.5) unstable; urgency=low
+
+ * debian/*.files
+ - care about adding ALL existing translations. Removed hard-coded
+ file names. Closes: #248516
+ Thanks to Ruben Porras for noticing
+ This involves changes to debian/*.files with the use of
+ regexp in these files
+ * libmisc/failure.c
+ - Make use of plural forms. Closes: #251317
+ * Programs translations
+ - Norwegian Bokmal and Norwegian Nynorsk translations. Closes: #252499
+ - Dutch updated. Closes: #253165
+ - Brazilian Portuguese updated
+ - Turkish updated
+ - Korean updated
+ - Czech updated
+ - Japanese updated
+ - German updated
+ - Catalan added. Closes: #254760
+ - Italian updated
+ * Debconf translations
+ - Finnish added. Closes: #253570
+ - Danish updated
+ - Hebrew added. Closes: #253186
+ - Traditional Chinese added. Closes: #254503
+ - French updated for clarification and shorten the root password screen
+
+ -- Christian Perrier <bubulle@debian.org> Tue, 22 Jun 2004 09:44:45 +0200
+
+shadow (1:4.0.3-28.4) unstable; urgency=low
+
+ * NMU for l10n stuff again
+ * Programs translations
+ - All languages "activated" in configure.in. Closes: #248516
+ - Russian. Closes: #250496
+ - Bosnian added. Closes: #251141
+ - Finnish update. Closes: #251495
+ - Italian update. Closes: #252087
+ * Debconf translations
+ - Norwegian Bokmal update. Closes: #250339
+ - Bosnian added. Closes: #251140
+ - Catalan updated. Closes: #251716
+ - Greek update. Closes: #251990
+ - Welsh added (directly sent by Dafydd Harries
+ * Christian Perrier
+ - debian/passwd.config : a few rewards to a few people. Just check
+ the code
+
+ -- Christian Perrier <bubulle@debian.org> Tue, 1 Jun 2004 09:11:01 -0300
+
+shadow (1:4.0.3-28.3) unstable; urgency=high
+
+ * NMU for correcting my mistake
+ * Remove an extra "fi" in passwd.config. Closes: #250169
+ * Debconf translation updates:
+ - Norwegian Nynorsk. Closes: #249682
+
+ -- Christian Perrier <bubulle@debian.org> Fri, 21 May 2004 06:50:13 +0200
+
+shadow (1:4.0.3-28.2) unstable; urgency=high
+
+ * NMU for Debian Installer rc1 release schedule
+ * Removed duplicate sentence in templates. Closes: #244734, #244604
+ * Move the "root password empty" check before the root password
+ confirmation. Closes: #247770
+ * Debconf translation updates:
+ - Danish. Closes: #246859
+ - Spanish. Closes: #246302
+ - Russian. Closes: #248392
+ - Simplified Chinese. Closes: #248938
+ - Lithuanian. Closes: #249141
+ - Italian. Closes: #249257
+ - Dutch sent directly by Bart Cornelis
+ - Korean sent directly by Changwoo Ryu
+ - Galician sent directly by Héctor Fernández
+ - Romanian sent directly by Eddy Petrisor
+ * Programs translation updates:
+ - Korean. Closes: #242055
+ - Japanese. Closes: #242586
+ - Polish. Closes: #246376
+ - Slovak. Closes: #247084
+ - Basque. Closes: #248386
+ - German. Closes: #248391
+ - Russian. Closes: #248392
+ - Spanish. Closes: #248516
+ - Czech. Closes: #248648
+ - Simplified Chinese. Closes: #248957
+ - Indonesian. Closes: #242813
+ - Italian sent directly by Giuseppe Sacco
+ * Translated man pages
+ - Typo correction in Brazilian Portuguese for gpasswd. Closes: #247698
+
+ -- Christian Perrier <bubulle@debian.org> Tue, 18 May 2004 12:09:34 +0200
+
+shadow (1:4.0.3-28.1) unstable; urgency=high
+
+ * NMU for special purposes below
+ * Urgency set to high for helping out Brazilian DD's building CD's
+ for FISL conference
+ * Translation updates:
+ - Debconf:
+ - Brazilian Portuguese. Closes: #246848
+ - Spanish. Was unfortunately based on older templates hence
+ this does not close 246302
+ - Basque: Closes: #243545
+ - German: Closes: #242116
+
+ -- Christian Perrier <bubulle@debian.org> Mon, 10 May 2004 23:23:25 +0200
+
+shadow (1:4.0.3-28) unstable; urgency=low
+
+ * Fix login and passwd in preinst to avoid prompts on woody upgrade,
+ Closes: #243099
+ * Fix login and passwd configuration file to support common-passwd
+ * Apply NMU patch from Christian Perrier, Closes: #241438
+
+ -- Sam Hartman <hartmans@debian.org> Thu, 29 Apr 2004 16:31:25 -0400
+
+shadow (1:4.0.3-27) unstable; urgency=low
+
+ * update "da" debconf translation, closes: #241262
+ * new "pt_BR" program translation, closes: #241366
+
+ -- Karl Ramm <kcr@debian.org> Thu, 1 Apr 2004 00:19:44 -0500
+
+shadow (1:4.0.3-26.1) unstable; urgency=low
+
+ * NMU for Debian Installer needs
+ * Translation updates:
+ - Debconf:
+ - French. Closes: #241438
+ - Ukrainian. Closes: #241514
+ - Swedish: #241558
+ - Japanese. Closes: #241802
+ - Danish. Closes: #241262
+ - Portuguese. Closes: #241675
+ - Polish. Closes: #243185, #242996
+ - Czech. Closes: #241877
+ - Korean. Closes: #241928
+ - Greek. Closes: #242396
+ - Turkish. Closes: #243103
+ - Slovak. Closes: #245671
+
+ -- Christian Perrier <bubulle@debian.org> Wed, 28 Apr 2004 11:47:34 +0200
+
+shadow (1:4.0.3-26) unstable; urgency=low
+
+ * Have passwd.config fall back gracefully to useradd if adduser is
+ unavailable. closes: #240894
+
+ -- Karl Ramm <kcr@debian.org> Wed, 31 Mar 2004 00:26:17 -0500
+
+shadow (1:4.0.3-25) unstable; urgency=low
+
+ * Update "da" program translation, thanks to Claus Hindsgaul.
+ * Update "sv" translation, closes: #239198
+ * lower debconf priority of shadow password question to 'low'
+
+ -- Karl Ramm <kcr@debian.org> Tue, 30 Mar 2004 19:39:59 -0500
+
+shadow (1:4.0.3-24) unstable; urgency=low
+
+ * add new program translations to the file manifest. *sigh*
+ closes: #241016
+ * add "tr" debconf translation. closes: #239148
+ * Rearrange username creation dialog text to make sense in
+ new order. closes: #240607
+ * Edit the debconf templates for content.
+ * Remove the program .gmo files in the clean step. closes: #200054
+
+ -- Karl Ramm <kcr@debian.org> Tue, 30 Mar 2004 11:37:22 -0500
+
+shadow (1:4.0.3-23) unstable; urgency=low
+
+ * increase maximum group name size to 32 for no particularly good reason
+ closes: #240456
+ * fix su man page to reflect code. closes: #239805
+ * fix username defaulting in passwd.config. closes: #238781
+ * update "it" debconf translation. closes: #237504
+ * update "ru" debconf translation. closes: #238211
+ * update "de" debconf translation. closes: #238779
+ * update "el" debconf translation. closes: #240473
+ * add "nn" debconf translation. closes: #238590
+ * add "da" program translation. closes: #238005
+ * add "nl" program translation. closes: #238488
+ * add "pt" program translation. closes: #238796
+ * add "pt" debconf translation. closes: #239641
+ * remove spurious const, closes: #240677
+
+ -- Karl Ramm <kcr@debian.org> Sun, 28 Mar 2004 19:46:34 -0500
+
+shadow (1:4.0.3-22) unstable; urgency=low
+
+ * Don't assume that lastlog.ll_time or utmp.ut_time or utmpx.ut_tv are made
+ up of time_ts and timevals, because they aren't on x86-64. Dismaying
+ but true.
+
+ -- Karl Ramm <kcr@debian.org> Sun, 14 Mar 2004 16:53:21 -0500
+
+shadow (1:4.0.3-21) unstable; urgency=low
+
+ * Try and get the right French translation update in the right place,
+ Karl, you can do it even if you do only speak English. Closes: #236993
+
+ -- Karl Ramm <kcr@debian.org> Wed, 10 Mar 2004 15:31:35 -0500
+
+shadow (1:4.0.3-20) unstable; urgency=low
+
+ * Added Norwegian Bokmal debconf translation, closes: #206349
+ * tell shadow build system about new message translations
+
+ -- Karl Ramm <kcr@debian.org> Thu, 4 Mar 2004 11:04:44 -0500
+
+shadow (1:4.0.3-19) unstable; urgency=low
+
+ * When creating a user account in passwd.config, ask for full name
+ first, and make up a default username. Closes: #235386
+ * "No really, assume md5 passwords". Closes: #223664
+
+ -- Karl Ramm <kcr@debian.org> Thu, 4 Mar 2004 00:42:08 -0500
+
+shadow (1:4.0.3-18) unstable; urgency=low
+
+ * Removed po/cs.po and added new debian/po/cs.po
+ Updated Czech translation, closes: #229125
+ * Updated Japanese debconf translation, closes: #227237
+ * Updated Danish debconf translation, closes: #227619
+ * Updated Dutch debconf translation, closes: #227883
+ * Updated Brazilian Portuguese debconf translation, closes: #228080
+ * Added Simplified Chinese debconf translation
+ Added Simplified Chinese programs translation
+ Closes: #229334
+ * Added Greek debconf translation
+ Added Greek programs translation
+ Closes: #229504, #229528
+ * Added Finnish programs translation, closes: #230369
+ charset changed from UTF-8 to ISO-8859-1 as the bug patch was wrong
+ * Updated German debconf translation, closes: #232710
+ * Updated Russian debconf translation, closes: #235541
+ * Added Ukrainian debconf translation, closes: #233560
+ * Added Lithuanian debconf translation, closes: #235698
+ * thanks to Christian Perrier <bubulle@debian.org>
+
+ -- Karl Ramm <kcr@debian.org> Wed, 3 Mar 2004 22:56:31 -0500
+
+shadow (1:4.0.3-17) unstable; urgency=low
+
+ * Fix braino in version number of example dependency in README.shells.
+ Apologies to anyone foolhardy enough to believe my documentation.
+ * Add Swedish debconf translation, closes: #225059
+ * New French debconf translation, closes: #225914
+ * Add Catalan debconf translation, closes: #227029
+ * add securetty files for the hurd, freebsd, and netbsd, closes: #200739
+
+ -- Karl Ramm <kcr@debian.org> Sun, 11 Jan 2004 17:37:54 -0500
+
+shadow (1:4.0.3-16) unstable; urgency=low
+
+ * run dh_installdeb *after* dh_installdebconf,
+ remove . from short description of passwd,
+ add versioned conflict with debconf older than 0.5
+ closes: #224133
+ * replace manpages-it due to man page conflict
+ closes: #224474
+ * fix the *other* su syslogs.
+ closes: #224508
+ * fix filename in control file, closes: #224579
+ * fix permissions on chage and expiry, closes: #224717
+ * run debconf-updatepo
+ * remove debian/compat as redundant
+
+ -- Karl Ramm <kcr@debian.org> Mon, 22 Dec 2003 19:53:30 -0500
+
+shadow (1:4.0.3-15) unstable; urgency=low
+
+ * remove bogus dependency on base-config 2.00,
+ closes: #222772, #223726
+ * New Czech translation thanks to Miroslav Kure.
+
+ -- Karl Ramm <kcr@debian.org> Fri, 12 Dec 2003 18:40:25 -0500
+
+shadow (1:4.0.3-14) unstable; urgency=low
+
+ * exit 30 when backing all the way out in passwd.conf, and
+ depend on base-config 2.00, closes: #222772
+ * adjust debconf templates for debian-installer work,
+ closes: #222832
+
+ -- Karl Ramm <kcr@debian.org> Thu, 11 Dec 2003 01:53:37 -0500
+
+shadow (1:4.0.3-13) unstable; urgency=low
+
+ * Fix typo passwd.config. Closes: #223079, #222714
+ * Let's try out this oldfangled anonymous ftp upload queue.
+
+ -- Karl Ramm <kcr@debian.org> Mon, 8 Dec 2003 17:59:31 -0500
+
+shadow (1:4.0.3-12) unstable; urgency=low
+
+ * Explicitly use automake-1.7 and aclocal-1.7. closes: #216594
+ * Update Danish debconf translation. closes: #216542
+ * Update French debconf translation. closes: #206352
+ * Update Dutch debconf translation. closes: #212995
+ * Remove redundant dependency on grep. closes: #216535
+ * Fix chfn documentation bug. closes: #213931
+ * Fix su syslogs to be less ambiguous. (old:new instead of old-new
+ because '-' can appear in usernames.) Not clearer, mind you, but less
+ ambiguous. closes: #213592
+ * Rename limits(5) to limits.conf(5) and edit to reflect reality.
+ closes: #212935
+ * Move the change_uid call in login back to where it was before -11, and
+ relocate the fork for pam_close_session above it. closes: #211884
+
+ -- Karl Ramm <kcr@debian.org> Sat, 25 Oct 2003 15:26:20 -0400
+
+shadow (1:4.0.3-11) unstable; urgency=low
+
+ * update Japanese debconf translation. closes: #210382
+ * update Brazilian Portuguese debconf translation. closes: #208122
+ * run pam cleanup code as root. closes: #195048
+
+ -- Karl Ramm <kcr@debian.org> Sat, 13 Sep 2003 17:49:29 -0400
+
+shadow (1:4.0.3-10) unstable; urgency=low
+
+ * postinst sources confmodule. closes: #88843
+ * Implement the pam configuration New World Order. Wow, that was quick. :-)
+ * Implement a scheme for allowing other packages to modify /etc/shells.
+
+ -- Karl Ramm <kcr@debian.org> Fri, 22 Aug 2003 20:58:42 -0400
+
+shadow (1:4.0.3-9) unstable; urgency=low
+
+ * fix mysterious creeping bug in po/Makefile.in.in, closes: #200052
+ * dutch debconf translation, closes: #204578
+ * switch to po-debconf, closes: #183998, #200130
+ * use automake1.7, closes: #205991
+ * update german debconf translation, closes: #94138
+ * I can't come up with a good justification as to why characters other
+ than ':'s and '\0's should be disallowed in group and usernames (other
+ than '-' as the leading character). Thus, the maintenance tools don't
+ anymore. closes: #79682, #166798, #171179
+ * Fix typo in /etc/pam.d/su. closes: #196804
+ * danish debconf translation, closes: #118245
+ * russian debconf translation, closes: #198729
+ * And last, but not least, what's undoubtedly going to be the most
+ popular change: md5 passwords are turned on by default, and there is
+ no prompt to change them. Yes, this is reduced functionality. No, it
+ can't go back in the way it was; the old code not only modified
+ conffiles, it modified *other*packages* conffiles and was a massive
+ policy violation. I expect this change will motivate the people who
+ have said that they will come up with a proper solution to do so.
+ closes: #186016, #110228, #171808
+
+ -- Karl Ramm <kcr@debian.org> Wed, 20 Aug 2003 02:06:50 -0400
+
+shadow (1:4.0.3-8) unstable; urgency=low
+
+ * Fix missing ':' in getopt call. closes: #184301
+ * Don't install mkpasswd, we don't use it. closes: #185919, #187906
+ * replaces: manpages-ko. closes: #184810
+ * Fix the message in #190567 (not closing until it's been accepted upstream)
+ * Fix brainos in login.1. closes: #184731
+ * Fixup permissions for chage. closes: #184138
+ * Force the umask to 022 in passwd.config. closes: #182506
+ * Add Sam Hartman <hartmans@debian.org> as an uploader.
+ * Update standards-version.
+ * Add versioned build-depend on debhelper.
+
+ -- Karl Ramm <kcr@debian.org> Sat, 26 Apr 2003 15:34:16 -0400
+
+shadow (1:4.0.3-7) unstable; urgency=low
+
+ * When relocating a user's home directory, don't fail and remove the new
+ home directory if we can't remove the old home directory for some
+ reason; the results can be spectacularly poor if, for instance, only
+ the rmdir() fails. closes: #166369
+ * run dh_installdebconf so base-config will work. *sigh*. closes: #166788
+
+ -- Karl Ramm <kcr@debian.org> Sun, 24 Nov 2002 21:40:30 -0500
+
+shadow (1:4.0.3-6) unstable; urgency=low
+
+ * remove automake dependency and leave only automake1.5, since it seems
+ to confuse the alpha and mipsel autobuilders for some reason.
+
+ -- Karl Ramm <kcr@debian.org> Sun, 13 Oct 2002 21:45:15 -0400
+
+shadow (1:4.0.3-5) unstable; urgency=low
+
+ * build-depend on libtool and automake. oops. closes: #164545
+
+ -- Karl Ramm <kcr@debian.org> Sun, 13 Oct 2002 01:44:47 -0400
+
+shadow (1:4.0.3-4) unstable; urgency=low
+
+ * I am unable to begin to express the bitterness that I'm now experiencing.
+ * replaces manpages-de <= 0.4-4, closes: #162097, #162173
+ * replaces manpages-fr, closes: #162150
+ * replaces manpages-hu, closes: #162126
+ * replaces manpages-ja, closes: #163511, #162095
+ * fix sg symlink, closes: #162339, #163652
+ * newgrp should be aware that getlogin() and ttyname() are not
+ guaranteed to return anything and NOT blindly assume that they
+ successfully returned a pointer to a string. I mean, really, people,
+ that sort of thing hasn't been reliable since 4.2BSD on a VAX. I'll
+ bet most of the working on the upstream weren't even born yet when
+ this sort of thing was commonplace (it was NEVER acceptable).
+ closes: #162303
+ * pull the manpage for the spiffy su forward. closes: #162275
+ * depend on automake1.5, and rerun the autogrunge. This should
+ *hopefully* make it build more consistently.
+ * this concludes the biweekly treading of water.
+
+ -- Karl Ramm <kcr@debian.org> Sat, 12 Oct 2002 14:56:16 -0400
+
+shadow (1:4.0.3-3) unstable; urgency=low
+
+ * the "fix the brain damage" release
+ * fix pam brain-damage in ch{age,passwd}, {group,user}{add,del,mod}, newusers
+ closes: #162181, #162199, #162228
+ * fix vipw symlink brain-damage: closes: #162218
+ * fix package description brain damage, closes: #139563
+ * install cp{pw,gr} brain damage
+
+ -- Karl Ramm <kcr@debian.org> Wed, 25 Sep 2002 01:21:35 -0400
+
+shadow (1:4.0.3-2) unstable; urgency=low
+
+ * fix "su -". closes: #162089
+ * document exit codes of groupdel and userdel (again, for userdel)
+ closes: #161861
+ * clean up logoutd cleanup
+
+ -- Karl Ramm <kcr@debian.org> Mon, 23 Sep 2002 19:44:40 -0400
+
+shadow (1:4.0.3-1) unstable; urgency=low
+
+ * new upstream version! closes: #149444, #150237, #145415
+ * completely new packaging!
+ * all new bugs!
+ * old bugs as well!
+ * remove /etc/init.d/logoutd, like the old postrm should've, closes: #160682
+ * fix passwd manpage, closes: #160477, #122797
+ * fix lastlog manpage, closes: #159886
+ * add as many virtual console devices as I seem to have to securetty,
+ closes: #156472
+ * add ttyS0 and tts/0 to securetty. closes: #130138
+ * su should not segfault if nobody has uid 0. closes: #139967
+ * install and use translations. closes: #118238
+ * upstream uses new automake. closes: #114935
+ * add russian template file for password. closes: #130358
+ * handle template installation correctly. closes: #156674
+ * don't place a maximum restriction on the length of passwords.
+ closes: #159487
+ * fix description. closes: #145459
+ * update config.{guess,sub}
+
+ -- Karl Ramm <kcr@debian.org> Wed, 18 Sep 2002 10:14:08 -0400
+
+shadow (20000902-12) unstable; urgency=high
+
+ * "oops"
+ * /etc/login.defs: /var/spool/mail -> /var/mail, closes: #125311
+
+ -- Karl Ramm <kcr@debian.org> Sun, 7 Apr 2002 11:54:48 -0400
+
+shadow (20000902-11) unstable; urgency=low
+
+ * Fix some nits:
+ * remove changelog~ file. oops. closes: #139711
+ * fix typo in control. closes: #139564
+ * Hmmm. People open more bugs when I upload new versions of things.
+ Maybe they just notice them more then, or maybe it's just Murphy.
+
+ -- K. Ramm <kcr@debian.org> Tue, 26 Mar 2002 12:14:33 -0500
+
+shadow (20000902-10) unstable; urgency=low
+
+ * We hates the automake. We hates it forever. closes: #139293
+ * stupid omission: logoutd still in postinst. closes: #139422
+ * make login.defs a bit clearer. closes: #138809
+
+ -- Karl Ramm <kcr@debian.org> Fri, 22 Mar 2002 12:09:07 -0500
+
+shadow (20000902-9) unstable; urgency=medium
+
+ * Get rid of logoutd, it doesn't work, didn't work in potato, and now
+ it's causing people to open RC bugs. closes: #138259, #66153, #121940
+ I'm told the timeoutd package does a better job anyway.
+ * add /bin/tcsh to /etc/shells, closes: #118103, #122112
+ * add /bin/ksh to /etc/shells, closes: #123556
+ * remove text about password aging from passwd(5), closes: #137493
+ * spanish debconf template for passwd, closes: #136463
+ * document the fact that you can not have a valid password in
+ /etc/shadow. closes: #131690
+ * /etc/login.defs: /var/spool/mail -> /var/mail, closes: #125311
+ * fix locations of utmp and wtmp in login(1), closes: #119656
+ * The package description for passwd refers to README.Debian.gz
+ but only README.debian.gz actually exists. Most packages use
+ README.Debian.gz, but the control file is the only place that gets it
+ wrong for this package. When in doubt, fix the documentation. :-)
+ closes: #116955
+
+ -- Karl Ramm <kcr@debian.org> Thu, 14 Mar 2002 17:05:56 -0500
+
+shadow (20000902-8) unstable; urgency=low
+
+ * check in passwd.expire.cron for already-expired passwords; closes: #102319
+ * note in chage.1 and shadowconfig.8 that password aging information
+ only works when shadow passwords are enabled. closes: #103702
+ * enable changing the name in chfn by default. closes: #107819
+ * fail to mangle files in lib/commonio.c, thanks to matt@linuxbox.nu
+ * add /dev/console to the secure ttys list. because. closes: #113949
+ * find the FHS mail spool first in configure. closes: #114951
+ (thanks to mjb@debian.org)
+ * above sadly causes automake to go bonkers, and I don't want to
+ reassemble the build system before woody is released. Keep automake
+ from going off on its own.
+ * terminate argument validation in login when it hits a '--'.
+ closes: #66368
+
+ -- Karl Ramm <kcr@debian.org> Mon, 22 Oct 2001 11:17:35 -0400
+
+shadow (20000902-7) unstable; urgency=low
+
+ * the "I'm sorry, I should've done this earlier" release
+ * Cancel login timeout after authentication so that patient people
+ timing out on network directory services can log in with local
+ accounts. Closes: #107148
+ * Add Brazilian Portuguese debconf template translation for passwd.
+ Closes: #105292, #93223
+ * Pull /usr/share/doc/$package/README.shadow-paper.gz. Closes: #98058
+ * Use getent instead of group to verify existence of shadow group
+ [works better for distributed group files]. Closes: #99902
+ [Note that this sort of problem is rampant in these postinst and
+ config scripts, but that's not getting fixed in woody.]
+ * Amend reference to /usr/doc in shadowconfig.8. Closes: #102804
+ * su should set $USER. Closes: #102995
+ * userdel now deletes user groups from /etc/gshadow as well as
+ /etc/group. Closes: #99442
+ * grpck now has an (otherwise undocumented) -p option, so that
+ shadowconfig can clean up the results of the above, so the config
+ script will fail randomly less often. Closes: #103385
+
+ -- Karl Ramm <kcr@debian.org> Wed, 22 Aug 2001 12:09:27 -0400
+
+shadow (20000902-6.1) unstable; urgency=low
+
+ * Non-maintainer upload.
+ * Upgrade to latest config.sub and config.guess. Closes: #88547
+
+ -- Gerhard Tonn <gt@debian.org> Fri, 1 Jun 2001 20:38:43 +0200
+
+shadow (20000902-6) unstable; urgency=medium
+
+ * actually set root's password when appropriate
+ patch thanks to joeyh, closes #98402
+ * fix error in expiry man page. Such damage. closes: #99291
+ * fix group of setgid program chage and expiry, closes: #98122
+
+ -- Karl Ramm <kcr@debian.org> Thu, 31 May 2001 07:38:59 -0400
+
+shadow (20000902-5) unstable; urgency=low
+
+ * add build dependency on file, to keep libtool happy. closes: #97498
+
+ -- Karl Ramm <kcr@debian.org> Wed, 16 May 2001 06:57:23 -0400
+
+shadow (20000902-4) unstable; urgency=low
+
+ * Change maintainers, closes: #92355
+
+ -- Karl Ramm <kcr@debian.org> Sun, 13 May 2001 03:28:07 -0400
+
+shadow (20000902-3.1) unstable; urgency=low
+
+ * Non-maintainer upload
+ * Recompile to fix ARM lossage
+
+ -- Philip Blundell <philb@armlinux.org> Sun, 11 Mar 2001 07:47:27 -0500
+
+shadow (20000902-3) unstable; urgency=low
+
+ * Update config.sub and config.guess so ia64 compiled, closes: #81897
+ * libmisc/sub.c: skip '*' in shell name when doing subsystem, closes:
+ #82893
+ * src/su.c: don't assume uid 0 == "root", use getpwuid to fetch it,
+ closes: #81924
+ * This was fixed in a previous version, closes: #77057
+ * Update passwd long desc, closes: #88299
+ * Conflict with suidmanager << 0.5, and remove suid{,un}register calls,
+ closes: #87157
+ * Update policy to 3.5.0.0
+ * Added debconf support for passwd from base-config
+
+ -- Ben Collins <bcollins@debian.org> Sat, 3 Mar 2001 07:26:57 -0500
+
+shadow (20000902-2) unstable frozen; urgency=low
+
+ * control.hurd->control.gnu: closes: #77940
+ * Cannot reproduce, closes: #79447
+ * User never sent a patch, plus I think removing the passwd/account when
+ doing passwd -l is a bad idea. Makes it so you cannot unlock the
+ account. closes: #77824
+ * Don't allow shadowconfig to change perms of other binaries, close: #77057
+ * IMO, this is not a bug. It's part of a feature, and can be disabled by
+ turning off USER_GROUPS. closes: #76806
+ * /bin/login is suid root for several good reasons. For one, it allows
+ daemons that use it to run as non-root. This is a good thing since it
+ means only one program is running as root, and not several. closes: #17911
+ * sulog is fairly easy to grep or parse so I don't see how the
+ similarity of the log entries for failed and successful is a problem.
+ '-' for failed, '+' for success. closes: #63801
+ * logoutd.8: s,/etc/utmp,/var/run/utmp, closes: #80494
+ * Fix case where pam_auth returns a NULL username, closes: #76817, #75510
+ * Hmm, Linux is a sysv derivative, so the comment is perfectly
+ legitimate, closes: #76898
+ * MAX_PASSWORD is used by useradd, and CHFN_AUTH is actually used by
+ * chfn to decide if the current user needs to auth in order to change
+ their info, closes: #71114
+ * login.1: Fix \' closes: #75435
+ * login -f works for me assuming you call it as root. I tested this with
+ plain pam_unix.so, and also with pam_unix.so stacked with pam_ldap.so.
+ So if it doesn't work with telnet-heimdal, then that program is not
+ doing something right. closes: #78186
+ * login.pam.d: made pam_nologin.so requisite. closes: #80111
+ * su to root seems pretty quick to me, closes: #64756
+ * xmalloc.c: remove declaration of malloc, which was causing system
+ * header conflicts. closes: #80398
+
+ -- Ben Collins <bcollins@debian.org> Sun, 31 Dec 2000 14:33:47 -0500
+
+shadow (20000902-1) unstable frozen; urgency=low
+
+ * New upstream release, lots of Debian patches merged, closes: #72735
+ * man/passwd.1: removed reference to passwd(3), closes: #72704
+ * man/chsh.1,man/chfn.1: document login.defs affects on these programs,
+ closes: #68029
+ * not a bug, expected behavior, closes: #74137
+ * IMO, this is a bug in the user's setup, closes: #65600
+ * securetty: add devfs console devices, closes: #71946
+ * libmisc/sulog.c: removed arbitrary limit on number of chars printed of
+ the tty name (truncated to 6 chars, which is silly), closes: #65404
+ * tested this, and it works fine for me so long as pam_unix.so is called
+ with the nullok option (which it isn't by default because of security
+ concerns), closes: #75063
+ * appears to be fixed by PAM, closes: #70627
+ * src/useradd.c: user mkstemp instead of mktemp, per libc6 linktime
+ warning
+ * src/su.c: fixup arg handling passed to shell, closes: #75326
+
+ -- Ben Collins <bcollins@debian.org> Mon, 23 Oct 2000 13:22:29 -0400
+
+shadow (19990827-21) unstable frozen; urgency=low
+
+ * Added build deps
+ * Use pre-generated files for hurd/linux control file. The old method of
+ using cpp would have broken with the new gcc.
+
+ -- Ben Collins <bcollins@debian.org> Wed, 26 Jul 2000 21:04:03 -0400
+
+shadow (19990827-20) unstable frozen; urgency=low
+
+ * Release Manager
+ None of these are marked as RC in the BTS, however, they do make the
+ package unsuitable for release. Since this is an essential package (IOW,
+ installed on every Debian system), I hope you can see how important it
+ is to make sure this package is perfect. None of the changes are
+ functional (except the fix in logoutd's init script, which was a 20 char
+ change), so please consider this for the next test cycle.
+ * Fix logoutd init script from spurious output when /etc/porttime is not
+ there, closes: #63962, #64067
+ * su: Fix typo in usage output, closes: #60226
+ * passwd: Fixed typo and missing newline in output for successful password
+ change, closes: #64106, #63703
+ * passwd.1: Add documentation on the -f, -e, -s and -d command line
+ options, closes: #64339, #64410
+ * login: Verified that utmp/wtmp works when called by telnet with -h
+ option, closes: #56854
+
+ -- Ben Collins <bcollins@debian.org> Tue, 23 May 2000 14:40:01 -0400
+
+shadow (19990827-19) unstable frozen; urgency=low
+
+ * debian/local/shells: added esh, closes: #59934
+ * logoutd: modify to work with pam_time.so's time.conf file, modify
+ manpage to reflect this, closes: #61300
+ * userdel.8: added note about group removal, closes: #56723
+ * base-config handles md5 setup, closes: #60125
+ * cppw: make sure it gets installed, closes: #62960
+ * passwd: correct error message for "not you", closes: #61313
+ * sulog.c: fixed extern for char (char foo[] -> char *foo), closes: #61643
+ * userdel.8: documented userdel's exit values, closes: #54775
+ * passwd: error messages are two fold, the second is actually from
+ pam_strerror(), closes: #61937
+ * passwd: print "success" on successful password change, closes: #58676
+
+ -- Ben Collins <bcollins@debian.org> Sat, 29 Apr 2000 10:26:56 -0400
+
+shadow (19990827-18) unstable frozen; urgency=low
+
+ * Crap, all the bug fixes from -17 need to go to frozen too
+
+ -- Ben Collins <bcollins@debian.org> Tue, 29 Feb 2000 14:57:14 -0500
+
+shadow (19990827-17) unstable; urgency=low
+
+ * Fixed typo in login.defs, closes: #54877
+ * logoutd.init.d: Check for /etc/security/time.conf, closes: #54900
+ * login.defs: Added note about the MAIL env option, closes: #54768
+ * login.pam.d,passwd.pam.d: Use new options in pam_unix.so to enable
+ obscure password checks. This mimics the old behavior in pre-PAM
+ shadow, closes: #58203
+ * Use patch from Topi Miettinen <tom@pluto.nic.fi> to add pam session
+ ability to su, closes: #57526, #55873, #57532
+ * Made login's -f option also able to use the username after -- if none
+ was passed as it's optarg, closes: #53702
+
+ -- Ben Collins <bcollins@debian.org> Mon, 28 Feb 2000 12:37:22 -0500
+
+shadow (19990827-16) unstable; urgency=low
+
+ * got rid of g+s directories in the source tarball, closes: #54585
+ * make su mode 4755 in the package. This way there is no chance of a
+ failed dpkg install causing it to be left without suid root perms
+ before suidmanager or chmod is called in the postinst.
+ * src/login.c: added faillog support to the pam_authenticate loop. This
+ loop is now completely rewritten, and should produce better results on
+ failures, closes: #53164
+
+ -- Ben Collins <bcollins@debian.org> Sun, 9 Jan 2000 23:35:08 -0500
+
+shadow (19990827-15) unstable; urgency=low
+
+ * src/su.c: moved signal() call to re-establish SIGINT to right place,
+ closes: #54496
+ * src/login.c: if hostname is blank (not a remote login via rlogin or
+ telnet), then use the tty to log failures in syslog, closes: #53966
+ * passwd: Locking a password by appending '!' appears to be pretty
+ standard, so ssh needs to check for it.
+ * passwd and login come with a README.pam that discusses the differences
+ between the PAM and old non-PAM versions. It also talks about where to
+ look for details. Also now that I have added the extra examples to the
+ pam.d files, I hope this satisfies...closes: #52917
+ * A new package, base-config, which will be used by boot floppies is
+ going to have an option to configure MD5 usage for passwords. Since
+ this is the best place for it, and I don't really have any control
+ over it, I am .... closes: #47620
+ * libmisc/chowntty.c: applied patch for read-only root, closes: #52069
+
+ -- Ben Collins <bcollins@debian.org> Sat, 8 Jan 2000 22:11:29 -0500
+
+shadow (19990827-14) unstable; urgency=low
+
+ * debian/local/shells: added /bin/zsh, closes: #53883
+
+ -- Ben Collins <bcollins@debian.org> Sun, 2 Jan 2000 13:51:42 -0500
+
+shadow (19990827-13) unstable; urgency=low
+
+ * su.c: ignore SIGINT while authenticating, closes: #52372
+ * su.pam.d: added 2 new examples of how to allow su for wheel users
+ without prompting for a password, and also how to deny users of a
+ specific group.
+
+ -- Ben Collins <bcollins@debian.org> Sat, 1 Jan 2000 22:29:46 -0500
+
+shadow (19990827-12) unstable; urgency=low
+
+ * Recompiled against latest libpam and up'd the module deps,
+ closes: #52171
+ * login.pam.d: added "noenv" option so we don't clobber login's setting,
+ closes: #51441
+
+ -- Ben Collins <bcollins@debian.org> Tue, 14 Dec 1999 22:41:40 -0500
+
+shadow (19990827-11) unstable; urgency=low
+
+ * debian/passwd.in: add a preinst (matches login's) to fix the latest
+ build change (only affected hurd since it doesn't use login).
+ * debian/scripts/passwd.mk: use passwd.preinst instead of login.preinst
+ to complete the fix above.
+
+ -- Ben Collins <bcollins@debian.org> Mon, 6 Dec 1999 18:25:07 -0500
+
+shadow (19990827-10) unstable; urgency=low
+
+ * src/login.c: only set pam_fail_delay if > 0. Also make the default 0
+ so not defining it has the same affect as disabling it, closes: #51178
+ * src/userdel.c: make sure we remove the shadow group entries when
+ removing the users own group, closes: #50005, #50138
+
+ -- Ben Collins <bcollins@debian.org> Fri, 26 Nov 1999 22:37:44 -0500
+
+shadow (19990827-9) unstable; urgency=low
+
+ * src/su.c: Fixed getopt parsing, and added a usage output
+ * man/su.1: minor typos
+
+ -- Ben Collins <bcollins@debian.org> Mon, 8 Nov 1999 22:13:05 -0500
+
+shadow (19990827-8) unstable; urgency=low
+
+ * src/login.c: fixed login of username on successful login (was using
+ the normal username, when it should have used pam_user),
+ closes: #47819
+ * src/login.c: check for hushed login and pass PAM_SILENT if true,
+ closes: #48002
+ * src/useradd.c: set def_shell to /bin/bash, closes: #48304
+ * doc/README.debian: add note about how to avoid issues with nscd's
+ lag in aging the cache, closes: #48629
+ * src/cppw.c: new program to assist copying a passwd/group file without
+ corruption, closes: #42141
+
+ -- Ben Collins <bcollins@debian.org> Tue, 2 Nov 1999 21:46:28 -0500
+
+shadow (19990827-7) unstable; urgency=low
+
+ * {passwd,login}.pam.d: added blurb about how to use the pam_cracklib
+ module, and also changed it to use pam_unix and not pam_pwdb (gah!
+ how did that happen?), closes: #46983
+ * README.debian: changes to reflect new PAM usage as well as removing
+ references to obsolete config files, closes: #46595
+ * passwd.expire.cron: example script that informs users by email when
+ their accounts are about to expire, closes: #41393
+ * lastlogin.c: added -h option and usage as well as long option support,
+ closes: #45804
+ * shadow now only has 3 wishlist bugs and nothing else
+
+ -- Ben Collins <bcollins@debian.org> Sat, 9 Oct 1999 11:54:16 -0400
+
+shadow (19990827-6) unstable; urgency=low
+
+ * debian/shells: new file, needed to include /bin/sash, closes: #45826
+ * useradd.8,groupadd.8: added note about the preferred use of adduser
+ and addgroup when conforming to Debian policy (taken from notes in
+ adduser's man pages), closes: #22821
+ * dialups.5: new man page that documents /etc/{dialups,d_passwd},
+ closes: #42212
+ * src/su.c: added -m, -p and -s command line options to match GNU options,
+ also documented in su(1), closes: #45394, #46424
+ * login.defs.5: clarified usage of TTYTYPE_FILE, closes: #23194
+ * login.pam.d: added pam_issue.so which replaces the old ISSUE_FILE from
+ login.defs, this also allows it to grok escapes in the issue file,
+ also increases the MODDEPS to (>= 0.69-10). By default this module is
+ not enabled, closes: #21044
+ * login.defs.pam.linux: added ISSUE_FILE to list of deprecated options
+
+ -- Ben Collins <bcollins@debian.org> Mon, 4 Oct 1999 19:56:22 -0400
+
+shadow (19990827-5) unstable; urgency=low
+
+ * {login,su}.1: added description of a subsystem login, closes: #31987
+ * src/chowndir.c: fixed recursive chown's on usermod, also changed it
+ to use lchown and lstat since we actually want that, closes: #46405
+ * su.1: removed reference to suauth as well as added "-c" to the SYNOPSIS,
+ closes: #45685
+ * login.1: added options to the SYNOPSIS and documented OPTIONS,
+ closes: #28763
+ * login.defs.5: documented the ENVIRON_FILE options (even though it's
+ not really used in the PAM version), close: #28786
+ * 010_src_gpasswd.c: new patch, fixes changing group passwords when not
+ using shadow groups, closes: #25919
+ * {chfn,chsh,login}.pam.d: added nullok to pam_unix.so auth line to
+ allow for passwordless accounts, closes: #46510
+ * login.pam.d: add "standard" to the pam_mail option so we get old
+ style "You have..." login messages.
+
+ -- Ben Collins <bcollins@debian.org> Sun, 3 Oct 1999 13:41:53 -0400
+
+shadow (19990827-4) unstable; urgency=low
+
+ * Alright, we are really getting some usage from this now, and seeing
+ some odd ball setups, so it means more work for me, but more stable
+ and feature filled software for you :)
+ * debian/{login,su}.pam.d: Fixed spelling errors, closes: #45234, #45235
+ * debian/login.pam.d: Added commented pam_access.so reference and
+ description, closes: #45241
+ * src/login.c: moved usage of setup_uid_gid() when PAM is enabled or
+ pam_groups.so's groups get clobbered
+ * src/newgrp.c: don't call sanitize_env() and also make sure we don't
+ check passwords when the user is trying to get back to their default
+ group, closes: #22244
+ * Closed some other bugs that were either not really bugs, or they weren't
+ reproducible.
+ * debian/login.pam.d: moved around the pam_motd and pam_mail modules to
+ order them the same as old login would have done
+
+ -- Ben Collins <bcollins@debian.org> Sun, 19 Sep 1999 19:42:13 -0400
+
+shadow (19990827-3) unstable; urgency=low
+
+ * This is a "Sit down and really fix some bugs" update. I'm going through
+ the ones that really need some work.
+ * src/vipw.c: use the system() call to invoke the editor so that it accepts
+ command line args in the EDITOR and VISUAL environment vars, closes: #31029
+ * src/userdel.c: added code to remove user groups (of the same name) if there
+ were no members left and USERGROUPS_ENAB is set to yes, closes: #35046
+ * login.defs: documented above change
+ * {login,passwd}.postinst: fixed some bashisms, closes: #45159
+ * login.defs.pam.linux: documented the FAKE_SHELL option, closes: 31987
+ * su.1,login.1: documented the subsystem root ability in login and su, closes:
+ * doc directory for both packages now includes the README.shadow-paper file
+ closes: #15391
+
+ -- Ben Collins <bcollins@debian.org> Sun, 19 Sep 1999 15:49:11 -0400
+
+shadow (19990827-2) unstable; urgency=low
+
+ * debian/rules: use "$(CC) -E" instead of "cpp" to make it easier to
+ cross compile for Hurd (requested by Marcus Brinkman).
+ * debian/login.pam.d: forgot to remove that comment about login not
+ being PAMified, it is and works fine.
+ * src/login.c: Added login.defs option to turn on and off the persistent
+ login, also give note on when it isn't and is needed in login.defs.
+ * lib/getdef.c: Added CLOSE_SESSIONS for above code.
+ * man/login.defs.5: document the new CLOSE_SESSION option for login
+ * logoutd: disabled until I can fix it to grok /etc/security/time.conf
+
+ -- Ben Collins <bcollins@debian.org> Mon, 13 Sep 1999 18:57:47 -0400
+
+shadow (19990827-1) unstable; urgency=low
+
+ * New Maintainer, with Guy's consent.
+ closes: #22296, #22331 (closed some NMU bug reports)
+ * New upstream release, closes: #15879, #24712, #25739, #28785, #32991
+ closes: #38672, #39933, #41060, #42480, #22534, #12690, #36150, #26412
+ closes: #40398, #43750
+ * Ok, now for some dusting and house cleaning (aka The Bug Killfile
+ Begins Here):
+ %%- login package
+ - Not a bug in login anymore, closes: #28098
+ - No longer pertinent, and is not controlled by the login program,
+ closes: #23155
+ - This does not appear to be a bug anymore, closes: #32424
+ - This is not a login problem. Xterm itself prints the LOGIN message
+ and it does _not_ read login.access, closes: #16958
+ - Seems to be fixed, closes: #28098
+ - Huge list of "Fixed" bugs, that I want to close. I really need to
+ start with a clean slate in order to get some of this cleaned up,
+ closes: #3439, #11443, #13485, #13815, #15176, #15998, #16187, #17529
+ closes: #17532, #17532, #18133, #18225, #20052, #20876, #21280, #21357
+ closes: #21687, #21695, #21746, #21767, #22716, #24710
+ - lastlog(8): Clarified differences in the usage of "login-name" and
+ UID, closes: #26727
+ %%- passwd package
+ - newuser: appears to be working correctly and placing x, not !,
+ closes: #19620
+ - userdel(8): added note about user's mail spool also being deleted,
+ closes: #20790
+ - Can't reproduce this one, closes: #21639
+ - -e expire_date
+ The date on which the user account will be dis-
+ abled. The date is specified in the format
+ MM/DD/YY.
+ Bug filer was trying to use an integer instead of the documented
+ format, closes: #22533
+ - chfn's command line options seem to work for root and non-root,
+ closes: #25396
+ - seems to have been fixed by the latest upstream, #25670
+ - Removed references to shadow(3), closes: #32859
+ - passwd only saves first 8 chars...duh :) closes: #33368
+ - userdel can only do so much, the admin should know to check some
+ things on their own, closes: #35418
+ - Lot's of Y2K issues fixed in this release, closes: #37232
+ - useradd requires the -m option to make it create a home directory
+ if one does not exist, closes: #39581
+ - useradd's -p option requires the password to already be encrypted
+ as documented in useradd(8), closes: #39870, #39874
+ - More "Fixed" bugs in passwd, closes: #13753, #16893, #17894, #18132
+ closes: #18628, #12691
+ %%- su (no longer a package, but has bugs just the same, will be
+ forwarded to the login package soon)
+ - Sorry, but su (all su's) invoke the shell with -c "cmd". This is
+ documented, not a bug, it's a standard interface that su expects,
+ go fix sash's bug for not supporting it, closes: #14551
+ - Acknowledged NMU: closes: #20058
+ - More "Fixed" bugs getting closed...CLOSED AT LAST, closes: #17593
+ closes: #20057, #12689
+ * Switched to a new build setup (dbs)
+ * Split makes into separate files to make it a little cleaner
+ * FHS compliance changes (usr/{doc,man} to usr/share/{doc,man})
+ * debian/tar.c: removed
+ * su: su is now going to be provided by shadow's login package and
+ removed from shellutils (the shellutils maintainer agreed to this)
+ in preparation for future PAM support. Added conflicts with older
+ version of shellutils that does provide the su binary.
+ * debian/control.in: removed the secure-su package since login now
+ contains su and all of it's components
+ * debian/control.in: modified the package descriptions to be a little
+ more explicative of what they do.
+ * Upgraded standards version to 3.0.1.1
+ * Setup suidmanager support for all +s apps, closes: #15705, #15704, #15699
+ * Enabled PAM. Support now for su, passwd, chfn, chsh. I am working on the
+ support in login.
+ * expiry: Changed to be installed as sgid shadow instead of suid root
+ since it doesn't need root privileges. Also added man page expiry(1) based
+ on the comments found in expiry.c.
+ * Removed bashism's in control scripts. Now lintian clean (smells fresh too)
+ * chage.c: Keep chage from locking when not running as root, since it just
+ needs to read the shadow and password files. This let's it run sgid shadow
+ instead of suid root. When run as root, it can lock files for editing.
+ * login.c: Pam support Works For Me(tm)!
+ * login.c: Fixed PAM's auth when PAM_USER was not set from the command line,
+ also call pam_fail_delay() with FAIL_DELAY as the arg before authentication.
+ * etc/login.defs.pam.linux: new file, reflects options that PAM takesover
+ * etc/login.defs.pam.hurd: new file, same for Hurd
+ * debian/passwd.mk: make sure that login.defs.5 gets installed for Hurd
+ * pam.d/: Modified defaults for each service to reflect the old style and also
+ added commented options on how to enable obsoleted options from login.defs
+ in the PAM Way(tm).
+ * debian/rules: removed --disable-desrpc from configure options since it was
+ supposedly just a workaround for glibc 2.0
+ * src/login.c: reset pam_fail_delay after every failure
+ * debian/rules: remove debian/files on clean target
+ * src/login.c: removed setup_limits() and check_nologin() usage when PAM is
+ enabled
+ * debian/login.pam.d,debian/login.defs.pam.linux: made notes about the pam_limits.so
+ module, as well as pam_nologin.so
+ * debian/su.pam.d: made notes about pam_limits.so module
+ * debian/control.in: removed depends on libpam-motd since it is now in libpam-modules,
+ also make login conflict with secure-su
+ * debian/*: setup so that Hurd does not get PAM, since they don't have it ported
+ completely yet.
+ * debian/*: Final approach to a final upload, modified login.postinst to check old
+ obsolete conffiles to see if the user needs a notice that they are no longer used.
+
+ -- Ben Collins <bcollins@debian.org> Sat, 11 Sep 1999 19:58:14 -0400
+
+shadow (980403-0.3.3) unstable; urgency=low
+
+ * Non maintainer upload.
+ * Add dpkg-architecture and cross compilation support to the package.
+ * Changes for the Hurd:
+ + Only build passwd, add etc/login.defs.hurd to this package.
+ + libmisc/rlogin.c: Conditionalize CBAUD, which is not portable.
+
+ -- Marcus Brinkmann <brinkmd@debian.org> Thu, 5 Aug 1999 00:28:12 +0200
+
+shadow (980403-0.3.2) unstable; urgency=low
+
+ * configure.in patched for utmpx.h (for arm)
+
+ -- Jim Pick <jim@jimpick.com> Sun, 4 Oct 1998 19:06:15 -0700
+
+shadow (980403-0.3.1) frozen unstable; urgency=low
+
+ * Non maintainer upload.
+ changes.{guess,sub} changed to recognize a Arm architecture.
+
+ -- Turbo Fredriksson <turbo@debian.org> Fri, 14 Aug 1998 22:37:58 -0400
+
+shadow (980403-0.3) frozen unstable; urgency=high
+
+ * Non maintainer upload.
+ * src/login.c: Applied patch from <marekm@i17linuxb.ists.pwr.wroc.pl> to
+ fix security hole of login not checking the return code from setgid(),
+ initgroups() or setuid(). [#24710]
+
+ -- James Troup <james@nocrew.org> Fri, 17 Jul 1998 18:56:31 +0100
+
+shadow (980403-0.2) frozen unstable; urgency=low
+
+ * (login.defs): fixed UMASK
+ (thanks to James Troup for noticing my screwup :)
+ * Pruned non-Debian changelog entries.
+
+ -- Joel Klecker <jk@espy.org> Mon, 11 May 1998 11:25:22 -0700
+
+shadow (980403-0.1) frozen unstable; urgency=low
+
+ * Non-maintainer release.
+ * New upstream release (18225).
+ * (debian/login.postinst)
+ * Use 'touch' instead of 'cat >' when creating /var/log/faillog
+ (15998,16187,21687).
+ * No longer fails if no previous configured version exists (11433).
+ * (gpasswd): now checks which user invoked it before calling setuid() (18132).
+ * (debian/passwd.postinst): removed bashism (13753).
+ * (groupmod): NULL dereference fixed upstream, as a result, it no longer
+ dumps core when changing group name (16893,17894).
+ * (useradd): no longer segfaults if /etc/default/useradd is missing (18628).
+ * (login.defs.1): now documents more options (13485).
+ * (source): includes 'missing' (13815,18133,21280).
+ * (login.1):
+ * Removed mention of "d_passwd(5)", which doesn't exist,
+ and login.defs.5 now documents /etc/dialups (15176).
+ * Added /etc/nologin to FILES section and reference nologin(5) (21695).
+ * The URL mentioned in Bug#15391 is no longer valid.
+ * (login.defs): no longer sets ULIMIT (17529).
+ * (login):
+ * No longer uses static buffers for group lines (17532).
+ * Doesn't seem to make assumptions about gid_t any longer (21767).
+ * (faillog.8): s-/usr/adm-/var/log-g (19974).
+ * (lastlog.8): notes that "some systems" use /var/log instead of
+ /usr/adm (21746).
+ * Install upstream changelog as 'changelog.gz' as per policy (20052).
+ * (secure-su): Changed /etc/suauth to reference the group 'root'
+ instead of 'wheel' (17593).
+
+ -- Joel Klecker <jk@espy.org> Thu, 30 Apr 1998 18:32:12 -0700
+
+shadow (970616-1) unstable; urgency=low
+
+ * Upstream upgrade.
+ * chage works (10561).
+ * Fix NIS behavior (5634,8734,10032,10545,10984,11160,12064).
+ * Wrote pwconv,pwunconv,grpconv,grpunconv manpage (10940).
+ * vipw fixes (10521,10696,11618,11924,12184,13001)
+ * Fixes for new automake.
+ * Compile with glibc2. (8627,8777,9824,11713,11719,12082,12108,11442).
+ * debian/rules fixes (8876,12468).
+ * /etc/login.defs: UMASK=002 (9102).
+ * chown /dev/vcs* on login (9421,13255).
+ * Added tty9-tty12 to /etc/securetty (11644).
+ * Provide template and manpage for /etc/limits (12289).
+ * Fix security hole in postinst (11769).
+ * login fills out ut_addr field in utmp (10701).
+ * shadowconfig.sh fixes (9189,9328,9386,10968,12452,12469).
+ * Overcome postinst bug in old shadow-passwd package (9939,12120).
+ * useradd default GROUP=100 (9244).
+ * Allow 8 bit chars in chfn (12367).
+ * secure-su - set HOME, use SHELL if set (11003,11189).
+
+ -- Guy Maor <maor@ece.utexas.edu> Fri, 26 Sep 1997 19:23:42 -0500
+
+shadow (970616) unstable; urgency=low
+
+ * vipw preserves permissions on edited files (10521).
+ * various other bug fixes.
+
+ -- Marek Michalkiewicz <marekm@piast.t19.ds.pwr.wroc.pl> Mon, 16 Jun 1997 02:02:00 +0200
+
+shadow (970601) unstable; urgency=low
+
+ * Fix typo in libmisc/mail.c causing login to segfault.
+
+ -- Marek Michalkiewicz <marekm@piast.t19.ds.pwr.wroc.pl> Mon, 2 Jun 1997 07:33:00 +0200
+
+shadow (970502-2) unstable; urgency=low
+
+ * Fixes to shadow group support (grpconv didn't work).
+
+ -- Marek Michalkiewicz <marekm@piast.t19.ds.pwr.wroc.pl> Fri, 2 May 1997 15:48:00 +0200
+
+shadow (970502-1) unstable; urgency=low
+
+ * Upstream upgrade.
+
+ -- Marek Michalkiewicz <marekm@piast.t19.ds.pwr.wroc.pl> Fri, 2 May 1997 03:18:00 +0200
+
+shadow (961025-2) frozen unstable; urgency=medium
+
+ * Fix useradd -D segfault (8098, 8152, 8733).
+ * Fix shadowconfig - permfix only on xlock; /etc/init.d/xdm rewrite, chmod
+ (8102, 8320, 8333, 8708).
+ * Remove HOWTO from usr/doc/passwd as it's in linux-doc (8150).
+ * Fixes to su.1 (8153).
+ * login, passwd, su each conflict and replace with the old shadow-*
+ version. (8269, 8290, 8393, 8394).
+ * Put /etc/shells back in passwd (8328).
+ * Fixed login.postinst for upgrade from shadow-login (8392).
+ * Added -e to pwck for use in shadowconfig: reports only errors, no
+ warnings (8542).
+ * Wrote shadowconfig.8 (8588).
+
+ -- Guy Maor <maor@ece.utexas.edu> Sat, 19 Apr 1997 02:34:59 -0500
+
+shadow (961025-1) unstable; urgency=low
+
+ * Upstream upgrade, new source format.
+
+ -- Guy Maor <maor@ece.utexas.edu> Mon, 10 Feb 1997 02:56:56 -0600
+
diff --git a/scripts/t/Dpkg_Changelog/stop-modeline b/scripts/t/Dpkg_Changelog/stop-modeline
new file mode 100644
index 0000000..5b8a7b4
--- /dev/null
+++ b/scripts/t/Dpkg_Changelog/stop-modeline
@@ -0,0 +1,13 @@
+modeline (2.0-1) unstable; urgency=low
+
+ * Upload.
+
+ -- Dpkg Developers <debian-dpkg@lists.debian.org> Tue, 4 Oct 2005 01:49:05 +0200
+
+modeline (1.0-1) unstable; urgency=low
+
+ * Upload.
+
+ -- Dpkg Developers <debian-dpkg@lists.debian.org> Tue, 4 Oct 2005 01:48:05 +0200
+
+vim: et
diff --git a/scripts/t/Dpkg_Changelog/unreleased b/scripts/t/Dpkg_Changelog/unreleased
new file mode 100644
index 0000000..14cacae
--- /dev/null
+++ b/scripts/t/Dpkg_Changelog/unreleased
@@ -0,0 +1,11 @@
+source (2.0) UNRELEASED; urgency=medium
+
+ * This version has not been finished yet.
+
+ --
+
+source (1.0) unstable; urgency=medium
+
+ * New release.
+
+ -- Dpkg Developers <debian-dpkg@lists.debian.org> Sat, 05 Nov 2016 18:42:23 +0100
diff --git a/scripts/t/Dpkg_Changelog_Ubuntu.t b/scripts/t/Dpkg_Changelog_Ubuntu.t
new file mode 100644
index 0000000..1cd622d
--- /dev/null
+++ b/scripts/t/Dpkg_Changelog_Ubuntu.t
@@ -0,0 +1,25 @@
+#!/usr/bin/perl
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use Test::Dpkg qw(:paths);
+
+$ENV{DEB_VENDOR} = 'Ubuntu';
+
+my $datafile = test_get_data_path('t/Dpkg_Changelog.t');
+
+do "$datafile";
diff --git a/scripts/t/Dpkg_Checksums.t b/scripts/t/Dpkg_Checksums.t
new file mode 100644
index 0000000..33e2587
--- /dev/null
+++ b/scripts/t/Dpkg_Checksums.t
@@ -0,0 +1,151 @@
+#!/usr/bin/perl
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use Test::More tests => 59;
+use Test::Dpkg qw(:paths);
+
+BEGIN {
+ use_ok('Dpkg::Checksums');
+}
+
+my $datadir = test_get_data_path();
+
+my @data = (
+ {
+ file => 'empty',
+ size => 0,
+ sums => {
+ md5 => 'd41d8cd98f00b204e9800998ecf8427e',
+ sha1 => 'da39a3ee5e6b4b0d3255bfef95601890afd80709',
+ sha256 => 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855',
+ }
+ }, {
+ file => 'data-1',
+ size => 7,
+ sums => {
+ md5 => '1b662eff496fde1a63cc5ff97beec10a',
+ sha1 => 'ff66a3dc152f273a19392d3099b2915c311c707e',
+ sha256 => 'f53cb4ee5128363210053c89627757c3dd864ab87e3ac9bff20dd6fe4175a140',
+ }
+ }, {
+ file => 'data-2',
+ size => 14,
+ sums => {
+ md5 => '785400cfc51d16a06e2c34aa511b99ef',
+ sha1 => '329ba56c0c9c63b6e138f3970ac3628e476a6854',
+ sha256 => '217147cd3126a076ba3fd816566a80aaaffff5facc572394dbd6af61a49760d1',
+ }
+ }
+);
+
+my %str_checksum;
+foreach my $f (@data) {
+ foreach my $alg (keys %{$f->{sums}}) {
+ $str_checksum{$alg} .= "\n$f->{sums}->{$alg} $f->{size} $f->{file}";
+ }
+}
+
+sub test_checksums {
+ my $ck = shift;
+
+ my @known_files = $ck->get_files();
+ my @data_files = map { $_->{file} } @data;
+
+ is_deeply(\@known_files, \@data_files, 'List of files');
+ foreach my $f (@data) {
+ ok($ck->has_file($f->{file}), "Known file $f->{file}");
+ is($ck->get_size($f->{file}), $f->{size}, "Known file $f->{file} size");
+ is_deeply($ck->get_checksum($f->{file}), $f->{sums},
+ "Known file $f->{file} checksums");
+ }
+}
+
+
+my @expected_checksums = qw(md5 sha1 sha256);
+my @known_checksums = checksums_get_list();
+
+is_deeply(\@known_checksums, \@expected_checksums, 'List of known checksums');
+
+foreach my $c (@expected_checksums) {
+ ok(checksums_is_supported($c), "Checksum $c is supported");
+
+ my $uc = uc $c;
+ ok(checksums_is_supported($uc), "Checksum $uc (uppercase) is supported");
+
+ ok(defined checksums_get_property($c, 'name'), "Checksum $c has name");
+ ok(defined checksums_get_property($c, 'regex'), "Checksum $c has regex");
+ ok(defined checksums_get_property($c, 'strong'), "Checksum $c has strong");
+}
+
+my $ck = Dpkg::Checksums->new();
+
+is(scalar $ck->get_files(), 0, 'No checksums recorded');
+
+# Check add_from_file()
+
+foreach my $f (@data) {
+ $ck->add_from_file("$datadir/$f->{file}", key => $f->{file});
+}
+
+foreach my $alg (keys %str_checksum) {
+ my $str = $ck->export_to_string($alg);
+ is($str, $str_checksum{$alg}, "Export checksum $alg to string from file");
+}
+
+test_checksums($ck);
+
+# Check add_from_string()
+
+foreach my $alg (keys %str_checksum) {
+ $ck->add_from_string($alg, $str_checksum{$alg});
+
+ my $str = $ck->export_to_string($alg);
+ is($str, $str_checksum{$alg}, "Export checksum $alg to string from string");
+}
+
+test_checksums($ck);
+
+# Check remove_file()
+
+ok($ck->has_file('data-2'), 'To be removed file is present');
+$ck->remove_file('data-2');
+ok(!$ck->has_file('data-2'), 'Remove file is not present');
+
+# Check add_from_control()
+my $ctrl;
+foreach my $f (@data) {
+ next if $f->{file} ne 'data-2';
+ foreach my $alg (keys %{$f->{sums}}) {
+ $ctrl->{"Checksums-$alg"} = "\n$f->{sums}->{$alg} $f->{size} $f->{file}";
+ }
+}
+$ck->add_from_control($ctrl);
+
+test_checksums($ck);
+
+# Check export_to_control()
+
+my $ctrl_export = {};
+$ck->export_to_control($ctrl_export);
+
+foreach my $alg (keys %str_checksum) {
+ is($ctrl_export->{"Checksums-$alg"}, $str_checksum{$alg},
+ "Export checksum $alg to a control object");
+}
+
+1;
diff --git a/scripts/t/Dpkg_Checksums/data-1 b/scripts/t/Dpkg_Checksums/data-1
new file mode 100644
index 0000000..2e51274
--- /dev/null
+++ b/scripts/t/Dpkg_Checksums/data-1
@@ -0,0 +1 @@
+data-1
diff --git a/scripts/t/Dpkg_Checksums/data-2 b/scripts/t/Dpkg_Checksums/data-2
new file mode 100644
index 0000000..e1a5ff3
--- /dev/null
+++ b/scripts/t/Dpkg_Checksums/data-2
@@ -0,0 +1 @@
+data-2 data-2
diff --git a/scripts/t/Dpkg_Checksums/empty b/scripts/t/Dpkg_Checksums/empty
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/scripts/t/Dpkg_Checksums/empty
diff --git a/scripts/t/Dpkg_Compression.t b/scripts/t/Dpkg_Compression.t
new file mode 100644
index 0000000..3fd5983
--- /dev/null
+++ b/scripts/t/Dpkg_Compression.t
@@ -0,0 +1,176 @@
+#!/usr/bin/perl
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use Test::More tests => 48;
+use Test::Dpkg qw(:paths);
+
+use IPC::Cmd qw(can_run);
+
+use_ok('Dpkg::Compression');
+use_ok('Dpkg::Compression::FileHandle');
+
+my $tmpdir = test_get_temp_path();
+my @lines = ("One\n", "Two\n", "Three\n");
+my $fh;
+my $have_gunzip = can_run('gunzip');
+
+sub test_write {
+ my ($filename, $check_result) = @_;
+
+ $fh = Dpkg::Compression::FileHandle->new();
+ open $fh, '>', $filename or die 'open failed';
+ print { $fh } $lines[0];
+ syswrite($fh, $lines[1]);
+ printf { $fh } '%s', $lines[2];
+ close $fh or die 'close failed';
+
+ $check_result->($filename, 'std functions');
+
+ unlink $filename or die "cannot unlink $filename";
+
+ $fh = Dpkg::Compression::FileHandle->new();
+ $fh->open($filename, 'w');
+ $fh->print($lines[0]);
+ $fh->write($lines[1], length($lines[1]));
+ $fh->printf('%s', $lines[2]);
+ $fh->close() or die 'close failed';
+
+ $check_result->($filename, 'IO::Handle methods');
+}
+
+sub check_uncompressed {
+ my ($filename, $method) = @_;
+ open(my $read_fh, '<', $filename) or die "cannot read $filename";
+ my @read = <$read_fh>;
+ close $read_fh or die 'cannot close';
+ is_deeply(\@lines, \@read, "$filename correctly written ($method)");
+}
+
+sub check_compressed {
+ my ($filename, $method) = @_;
+ open my $read_fh, '-|', 'gunzip', '-c', "$tmpdir/myfile.gz"
+ or die 'cannot fork zcat';
+ my @read = <$read_fh>;
+ close $read_fh or die 'cannot close';
+ is_deeply(\@lines, \@read, "$filename correctly written ($method)");
+}
+
+sub test_read {
+ my $filename = shift;
+
+ $fh = Dpkg::Compression::FileHandle->new();
+ open($fh, '<', $filename) or die 'open failed';
+ my @read = <$fh>;
+ close $fh or die 'close failed';
+
+ is_deeply(\@lines, \@read, "$filename correctly read (std functions)");
+
+ @read = ();
+ $fh = Dpkg::Compression::FileHandle->new();
+ $fh->open($filename, 'r') or die 'open failed';
+ @read = $fh->getlines();
+ $fh->close() or die 'close failed';
+
+ is_deeply(\@lines, \@read, "$filename correctly read (IO::Handle methods)");
+}
+
+# Check compression properties.
+
+my @compressors = compression_get_list();
+is_deeply([ sort @compressors ] , [ qw(bzip2 gzip lzma xz) ],
+ 'supported compressors');
+
+is(compression_get_default(), 'xz', 'default compressor is xz');
+eval {
+ compression_set_default('invented-compressor');
+};
+ok($@, 'cannot set compressor to an unsupported name');
+is(compression_get_default(), 'xz', 'default compressor is still xz');
+compression_set_default('gzip');
+is(compression_get_default(), 'gzip', 'default compressor changed to gzip');
+compression_set_default('xz');
+is(compression_get_default(), 'xz', 'default compressor reset to xz');
+
+ok(compression_is_supported('gzip'), 'gzip is supported');
+ok(compression_is_supported('xz'), 'xz is supported');
+ok(compression_is_supported('bzip2'), 'bzip2 is supported');
+ok(compression_is_supported('lzma'), 'lzma is supported');
+
+is(compression_guess_from_filename('filename'), undef,
+ 'compressor <none> guessed from "filename"');
+is(compression_guess_from_filename('filename.gz'), 'gzip',
+ 'compressor <none> guessed from "filename"');
+is(compression_guess_from_filename('filename.xz'), 'xz',
+ 'compressor <none> guessed from "filename"');
+is(compression_guess_from_filename('filename.bz2'), 'bzip2',
+ 'compressor <none> guessed from "filename"');
+is(compression_guess_from_filename('filename.lzma'), 'lzma',
+ 'compressor <none> guessed from "filename"');
+
+is(compression_get_file_extension('gzip'), 'gz', 'gzip file ext');
+is(compression_get_file_extension('xz'), 'xz', 'xz file ext');
+is(compression_get_file_extension('bzip2'), 'bz2', 'bzip2 file ext');
+is(compression_get_file_extension('lzma'), 'lzma', 'lzma file ext');
+
+is(compression_get_level('gzip'), 9, 'gzip level is 9');
+compression_set_level('gzip', 1);
+is(compression_get_level('gzip'), 1, 'gzip level is now 1');
+compression_set_level('gzip');
+is(compression_get_level('gzip'), 9, 'gzip level is back to 9');
+is(compression_get_level('xz'), 6, 'xz level is 6');
+is(compression_get_level('bzip2'), 9, 'bzip2 level is 9');
+is(compression_get_level('lzma'), 6, 'lzma level is 6');
+
+my $ext_regex = compression_get_file_extension_regex();
+
+ok('filename.gz' =~ m/\.$ext_regex$/, '.gz matches regex');
+ok('filename.xz' =~ m/\.$ext_regex$/, '.xz matches regex');
+ok('filename.bz2' =~ m/\.$ext_regex$/, '.bz2 matches regex');
+ok('filename.lzma' =~ m/\.$ext_regex$/, '.lzma matches regex');
+
+# Test changing the default compression levels
+my $old_level = compression_get_default_level();
+compression_set_default_level(1);
+is(compression_get_default_level(), 1, 'change default compression level');
+compression_set_default_level(5);
+is(compression_get_default_level(), 5, 'change default compression level');
+compression_set_default_level(undef);
+is(compression_get_default_level(), $old_level, 'reset default compression level');
+
+ok(! compression_is_valid_level(0), 'compression 0 is invalid');
+ok(compression_is_valid_level(1), 'compression 1 is valid');
+ok(compression_is_valid_level(5), 'compression 5 is valid');
+ok(compression_is_valid_level(9), 'compression 9 is valid');
+ok(compression_is_valid_level('fast'), 'compression fast is valid');
+ok(compression_is_valid_level('best'), 'compression best is valid');
+
+# Test write on uncompressed file
+test_write("$tmpdir/myfile", \&check_uncompressed);
+
+SKIP: {
+ skip 'gunzip not available', 1 if not $have_gunzip;
+
+ # Test write on compressed file
+ test_write("$tmpdir/myfile.gz", \&check_compressed);
+}
+
+# Test read on uncompressed file
+test_read("$tmpdir/myfile");
+
+# Test read on compressed file
+test_read("$tmpdir/myfile.gz");
diff --git a/scripts/t/Dpkg_Conf.t b/scripts/t/Dpkg_Conf.t
new file mode 100644
index 0000000..940d18d
--- /dev/null
+++ b/scripts/t/Dpkg_Conf.t
@@ -0,0 +1,121 @@
+#!/usr/bin/perl
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use Test::More tests => 9;
+use Test::Dpkg qw(:paths);
+
+BEGIN {
+ use_ok('Dpkg::Conf');
+}
+
+my $datadir = test_get_data_path();
+
+my ($conf, $count, @opts);
+
+my @expected_long_opts = (
+'--option-double-quotes=value double quotes',
+'--option-single-quotes=value single quotes',
+'--option-space=value words space',
+qw(
+--option-dupe=value1
+--option-name=value-name
+--option-indent=value-indent
+--option-equal=value-equal=subvalue-equal
+--option-noequal=value-noequal
+--option-dupe=value2
+--option-simple
+--option-dash=value-dash
+--option-dupe=value3
+--l=v
+));
+my @expected_short_opts = qw(
+-o=vd
+-s
+);
+
+$conf = Dpkg::Conf->new();
+local $SIG{__WARN__} = sub { };
+$count = $conf->load("$datadir/config-mixed");
+delete $SIG{__WARN__};
+is($count, 13, 'Load a config file, only long options');
+
+@opts = $conf->get_options();
+is_deeply(\@opts, \@expected_long_opts, 'Parse long options');
+
+$conf = Dpkg::Conf->new(allow_short => 1);
+$count = $conf->load("$datadir/config-mixed");
+is($count, 15, 'Load a config file, mixed options');
+
+@opts = $conf->get_options();
+my @expected_mixed_opts = ( @expected_long_opts, @expected_short_opts );
+is_deeply(\@opts, \@expected_mixed_opts, 'Parse mixed options');
+
+my $expected_mixed_output = <<'MIXED';
+option-double-quotes = "value double quotes"
+option-single-quotes = "value single quotes"
+option-space = "value words space"
+option-dupe = "value1"
+option-name = "value-name"
+option-indent = "value-indent"
+option-equal = "value-equal=subvalue-equal"
+option-noequal = "value-noequal"
+option-dupe = "value2"
+option-simple
+option-dash = "value-dash"
+option-dupe = "value3"
+l = "v"
+-o = "vd"
+-s
+MIXED
+
+is($conf->output, $expected_mixed_output, 'Output mixed options');
+
+my $expected_filter;
+
+$expected_filter = <<'FILTER';
+l = "v"
+-o = "vd"
+-s
+FILTER
+
+$conf = Dpkg::Conf->new(allow_short => 1);
+$conf->load("$datadir/config-mixed");
+$conf->filter(remove => sub { $_[0] =~ m/^--option/ });
+is($conf->output, $expected_filter, 'Filter remove');
+
+$expected_filter = <<'FILTER';
+option-double-quotes = "value double quotes"
+option-single-quotes = "value single quotes"
+FILTER
+
+$conf = Dpkg::Conf->new(allow_short => 1);
+$conf->load("$datadir/config-mixed");
+$conf->filter(keep => sub { $_[0] =~ m/^--option-[a-z]+-quotes/ });
+is($conf->output, $expected_filter, 'Filter keep');
+
+$expected_filter = <<'FILTER';
+l = "v"
+FILTER
+
+$conf = Dpkg::Conf->new(allow_short => 1);
+$conf->load("$datadir/config-mixed");
+$conf->filter(remove => sub { $_[0] =~ m/^--option/ },
+ keep => sub { $_[0] =~ m/^--/ });
+is($conf->output, $expected_filter, 'Filter keep and remove');
+
+1;
diff --git a/scripts/t/Dpkg_Conf/config-mixed b/scripts/t/Dpkg_Conf/config-mixed
new file mode 100644
index 0000000..87c0405
--- /dev/null
+++ b/scripts/t/Dpkg_Conf/config-mixed
@@ -0,0 +1,26 @@
+# Comment followed by an empty line.
+
+option-double-quotes = "value double quotes"
+option-single-quotes = 'value single quotes'
+option-space = value words space
+
+option-dupe=value1
+option-name=value-name
+
+ # Indented comment.
+ option-indent = value-indent
+
+option-equal=value-equal=subvalue-equal
+option-noequal value-noequal
+option-dupe=value2
+option-simple
+
+# Fully spelled out options.
+--option-dash=value-dash
+--option-dupe=value3
+
+# Long option with one character name.
+l=v
+# Short option.
+-o=vd
+-s
diff --git a/scripts/t/Dpkg_Control.t b/scripts/t/Dpkg_Control.t
new file mode 100644
index 0000000..d1ffa89
--- /dev/null
+++ b/scripts/t/Dpkg_Control.t
@@ -0,0 +1,148 @@
+#!/usr/bin/perl
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use Test::More;
+use Test::Dpkg qw(:needs :paths);
+
+BEGIN {
+ plan tests => 24;
+
+ use_ok('Dpkg::Control');
+ use_ok('Dpkg::Control::Info');
+}
+
+my $datadir = test_get_data_path();
+
+sub parse_ctrl {
+ my ($type, $path) = @_;
+
+ my $ctrl = Dpkg::Control->new(type => $type);
+ eval {
+ $ctrl->load($path);
+ 1;
+ } or return;
+
+ return $ctrl;
+}
+
+sub parse_dsc {
+ my $path = shift;
+
+ return parse_ctrl(CTRL_PKG_SRC, $path);
+}
+
+my $c = Dpkg::Control::Info->new("$datadir/control-1");
+
+my $io_data;
+my $io;
+
+open $io, '>', \$io_data or die "canno open io string\n";;
+
+$c->output($io);
+my $expected = 'Source: mysource
+Empty-Field:
+Long-Field: line1
+ line 2 line 2 line 2
+ .
+ line 3 line 3 line 3
+ .
+ ..
+ line 4
+My-Field-One: myvalue1
+My-Field-Two: myvalue2
+Numeric-Field: 0
+
+Package: mypackage1
+Architecture: any
+Depends: libc6
+
+Package: mypackage2
+Architecture: all
+Depends: hello
+
+Package: mypackage3
+Architecture: all
+Depends: hello
+Description: short one
+ long one
+ very long one
+';
+is($io_data, $expected, "Dump of $datadir/control-1");
+
+my $src = $c->get_source();
+is($src, $c->[0], 'array representation of Dpkg::Control::Info 1/2');
+is($src->{'numeric-field'}, '0', 'Numeric 0 value parsed correctly');
+is($src->{'my-field-one'}, 'myvalue1', 'Access field through badly capitalized field name');
+is($src->{'long-field'},
+'line1
+line 2 line 2 line 2
+
+ line 3 line 3 line 3
+
+.
+line 4', 'Get multi-line field');
+is($src->{'Empty-field'}, '', 'Get empty field');
+
+my $pkg = $c->get_pkg_by_idx(1);
+is($pkg, $c->[1], 'array representation of Dpkg::Control::Info 2/2');
+is($pkg->{package}, 'mypackage1', 'Name of first package');
+
+$pkg = $c->get_pkg_by_name('mypackage3');
+is($pkg->{package}, 'mypackage3', 'Name of third package');
+is($pkg->{Depends}, 'hello', 'Name of third package');
+
+$pkg = $c->get_pkg_by_idx(2);
+open $io, '>', \$io_data or die "canno open io string\n";;
+$pkg->output($io);
+
+is($io_data,
+'Package: mypackage2
+Architecture: all
+Depends: hello
+', "Dump of second binary package of $datadir/control-1");
+
+# Check OpenPGP armored signatures in source control files
+
+my $dsc;
+
+$dsc = parse_dsc("$datadir/bogus-unsigned.dsc");
+is($dsc, undef, 'Unsigned .dsc w/ OpenPGP armor');
+
+$dsc = parse_dsc("$datadir/bogus-armor-no-sig.dsc");
+is($dsc, undef, 'Signed .dsc w/ OpenPGP armor missing signature');
+
+$dsc = parse_dsc("$datadir/bogus-armor-trail.dsc");
+is($dsc, undef, 'Signed .dsc w/ bogus OpenPGP armor trailer');
+
+$dsc = parse_dsc("$datadir/bogus-armor-inline.dsc");
+is($dsc, undef, 'Signed .dsc w/ bogus OpenPGP inline armor');
+
+$dsc = parse_dsc("$datadir/bogus-armor-formfeed.dsc");
+is($dsc, undef, 'Signed .dsc w/ bogus OpenPGP armor line');
+
+$dsc = parse_dsc("$datadir/bogus-armor-double.dsc");
+ok(defined $dsc, 'Signed .dsc w/ two OpenPGP armor signatures');
+is($dsc->{Source}, 'pass', 'Signed spaced .dsc package name');
+
+$dsc = parse_dsc("$datadir/bogus-armor-spaces.dsc");
+ok(defined $dsc, 'Signed .dsc w/ spaced OpenPGP armor');
+is($dsc->{Source}, 'pass', 'Signed spaced .dsc package name');
+
+$dsc = parse_dsc("$datadir/bogus-armor-nested.dsc");
+ok(defined $dsc, 'Signed .dsc w/ nested OpenPGP armor');
+is($dsc->{Source}, 'pass', 'Signed nested .dsc package name');
diff --git a/scripts/t/Dpkg_Control/bogus-armor-double.dsc b/scripts/t/Dpkg_Control/bogus-armor-double.dsc
new file mode 100644
index 0000000..1888a00
--- /dev/null
+++ b/scripts/t/Dpkg_Control/bogus-armor-double.dsc
@@ -0,0 +1,13 @@
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA1
+
+Source: pass
+
+-----BEGIN PGP SIGNATURE-----
+
+Valid signature here.
+-----END PGP SIGNATURE-----
+-----BEGIN PGP SIGNATURE-----
+
+Fake signature here.
+-----END PGP SIGNATURE-----
diff --git a/scripts/t/Dpkg_Control/bogus-armor-formfeed.dsc b/scripts/t/Dpkg_Control/bogus-armor-formfeed.dsc
new file mode 100644
index 0000000..70aab18
--- /dev/null
+++ b/scripts/t/Dpkg_Control/bogus-armor-formfeed.dsc
@@ -0,0 +1,19 @@
+-----BEGIN PGP SIGNED MESSAGE-----
+
+Source: fail
+
+-----BEGIN PGP SIGNATURE-----
+Version: vim v7.3.547 (GNU/Linux)
+
+Fake signature here.
+-----END PGP SIGNATURE-----
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA1
+
+Source: pass
+
+-----BEGIN PGP SIGNATURE
+Version: GnuPG v1.4.12 (GNU/Linux)
+
+Valid signature here.
+-----END PGP SIGNATURE-----
diff --git a/scripts/t/Dpkg_Control/bogus-armor-inline.dsc b/scripts/t/Dpkg_Control/bogus-armor-inline.dsc
new file mode 100644
index 0000000..44942c1
--- /dev/null
+++ b/scripts/t/Dpkg_Control/bogus-armor-inline.dsc
@@ -0,0 +1,9 @@
+Source: fail
+-----BEGIN PGP SIGNED MESSAGE-----
+
+Binary: pass
+
+-----BEGIN PGP SIGNATURE-----
+
+Valid signature here.
+-----END PGP SIGNATURE-----
diff --git a/scripts/t/Dpkg_Control/bogus-armor-nested.dsc b/scripts/t/Dpkg_Control/bogus-armor-nested.dsc
new file mode 100644
index 0000000..ca99c35
--- /dev/null
+++ b/scripts/t/Dpkg_Control/bogus-armor-nested.dsc
@@ -0,0 +1,15 @@
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA1
+
+Source: pass
+
+-----BEGIN PGP SIGNATURE-----
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA1
+
+Source: fail
+
+-----BEGIN PGP SIGNATURE-----
+
+Valid signature here.
+-----END PGP SIGNATURE-----
diff --git a/scripts/t/Dpkg_Control/bogus-armor-no-sig.dsc b/scripts/t/Dpkg_Control/bogus-armor-no-sig.dsc
new file mode 100644
index 0000000..4502a18
--- /dev/null
+++ b/scripts/t/Dpkg_Control/bogus-armor-no-sig.dsc
@@ -0,0 +1,4 @@
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA1
+
+Source: pass
diff --git a/scripts/t/Dpkg_Control/bogus-armor-spaces.dsc b/scripts/t/Dpkg_Control/bogus-armor-spaces.dsc
new file mode 100644
index 0000000..ab71ab5
--- /dev/null
+++ b/scripts/t/Dpkg_Control/bogus-armor-spaces.dsc
@@ -0,0 +1,18 @@
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA1
+
+Source: pass
+
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.4.12 (GNU/Linux)
+
+Valid signature here.
+-----END PGP SIGNATURE-----
+
+Source: fail
+
+-----BEGIN PGP SIGNATURE
+Version: vim v7.3.547 (GNU/Linux)
+
+Fake signature here.
+-----END PGP SIGNATURE
diff --git a/scripts/t/Dpkg_Control/bogus-armor-trail.dsc b/scripts/t/Dpkg_Control/bogus-armor-trail.dsc
new file mode 100644
index 0000000..90b00f1
--- /dev/null
+++ b/scripts/t/Dpkg_Control/bogus-armor-trail.dsc
@@ -0,0 +1,14 @@
+-----BEGIN PGP SIGNED MESSAGE
+
+Source: fail
+
+-----BEGIN PGP SIGNATURE
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA256
+
+Source: pass
+
+-----BEGIN PGP SIGNATURE-----
+
+Valid signature here.
+-----END PGP SIGNATURE-----
diff --git a/scripts/t/Dpkg_Control/bogus-unsigned.dsc b/scripts/t/Dpkg_Control/bogus-unsigned.dsc
new file mode 100644
index 0000000..7573eb3
--- /dev/null
+++ b/scripts/t/Dpkg_Control/bogus-unsigned.dsc
@@ -0,0 +1,5 @@
+-----BEGIN PGP MESSAGE-----
+
+Source: fail
+
+-----END PGP MESSAGE-----
diff --git a/scripts/t/Dpkg_Control/control-1 b/scripts/t/Dpkg_Control/control-1
new file mode 100644
index 0000000..0c70533
--- /dev/null
+++ b/scripts/t/Dpkg_Control/control-1
@@ -0,0 +1,30 @@
+Source: mysource
+# This is a comment
+numeric-field: 0
+my-field-one: myvalue1
+my-field-two: myvalue2
+long-field: line1
+ line 2 line 2 line 2
+ .
+ line 3 line 3 line 3
+ .
+ ..
+ line 4
+empty-field:
+
+# First package
+Package: mypackage1
+Architecture: any
+Depends: libc6
+
+# Second package
+Package: mypackage2
+Architecture: all
+Depends: hello
+
+Package: mypackage3
+Architecture: all
+Depends:hello
+Description: short one
+ long one
+ very long one
diff --git a/scripts/t/Dpkg_Control_Fields.t b/scripts/t/Dpkg_Control_Fields.t
new file mode 100644
index 0000000..1c699e3
--- /dev/null
+++ b/scripts/t/Dpkg_Control_Fields.t
@@ -0,0 +1,540 @@
+#!/usr/bin/perl
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use Test::More;
+use Test::Dpkg qw(:paths);
+
+BEGIN {
+ plan tests => 2603;
+
+ use_ok('Dpkg::Control::Types');
+ use_ok('Dpkg::Control::FieldsCore');
+ use_ok('Dpkg::Control');
+}
+
+#my $datadir = test_get_data_path();
+
+my @src_dep_fields = qw(
+ Build-Depends
+ Build-Depends-Arch
+ Build-Depends-Indep
+ Build-Conflicts
+ Build-Conflicts-Arch
+ Build-Conflicts-Indep
+);
+my @bin_dep_normal_fields = qw(
+ Pre-Depends
+ Depends
+ Recommends
+ Suggests
+ Enhances
+);
+my @bin_dep_union_fields = qw(
+ Conflicts
+ Breaks
+ Replaces
+ Provides
+ Built-Using
+ Static-Built-Using
+);
+my @bin_dep_fields = (
+ @bin_dep_normal_fields,
+ @bin_dep_union_fields,
+);
+my @src_checksums = qw(
+ Checksums-Md5
+ Checksums-Sha1
+ Checksums-Sha256
+);
+my @bin_checksums = qw(
+ MD5sum
+ SHA1
+ SHA256
+);
+my @src_files = (
+ @src_checksums,
+ qw(
+ Files
+ ),
+);
+my @bin_files = (
+ qw(
+ Filename
+ Size
+ ),
+ @bin_checksums,
+);
+my @vcs_fields = qw(
+ Vcs-Browser
+ Vcs-Arch
+ Vcs-Bzr
+ Vcs-Cvs
+ Vcs-Darcs
+ Vcs-Git
+ Vcs-Hg
+ Vcs-Mtn
+ Vcs-Svn
+);
+my @test_fields = qw(
+ Testsuite
+ Testsuite-Triggers
+);
+
+my %fields = (
+ CTRL_INFO_SRC() => {
+ name => 'debian/control source stanza',
+ fields => [
+ qw(
+ Source
+ Section
+ Priority
+ Maintainer
+ Uploaders
+ Origin
+ Bugs
+ ),
+ @vcs_fields,
+ qw(
+ Homepage
+ Standards-Version
+ Rules-Requires-Root
+ ),
+ @src_dep_fields,
+ @test_fields,
+ qw(
+ Description
+ ),
+ ],
+ },
+ CTRL_INFO_PKG() => {
+ name => 'debian/control binary stanza',
+ fields => [
+ qw(
+ Package
+ Package-Type
+ Section
+ Priority
+ Architecture
+ Subarchitecture
+ Multi-Arch
+ Essential
+ Protected
+ Build-Essential
+ Build-Profiles
+ Built-For-Profiles
+ Kernel-Version
+ ),
+ @bin_dep_fields,
+ qw(
+ Homepage
+ Installer-Menu-Item
+ Task
+ Tag
+ Description
+ ),
+ ],
+ },
+ CTRL_PKG_SRC() => {
+ name => '.dsc',
+ fields => [
+ qw(
+ Format
+ Source
+ Binary
+ Architecture
+ Version
+ Origin
+ Maintainer
+ Uploaders
+ Homepage
+ Description
+ Standards-Version
+ ),
+ @vcs_fields,
+ @test_fields,
+ @src_dep_fields,
+ qw(
+ Package-List
+ ),
+ @src_files,
+ ],
+ },
+ CTRL_PKG_DEB() => {
+ name => 'DEBIAN/control',
+ fields => [
+ qw(
+ Package
+ Package-Type
+ Source
+ Version
+ Kernel-Version
+ Built-For-Profiles
+ Auto-Built-Package
+ Architecture
+ Subarchitecture
+ Installer-Menu-Item
+ Build-Essential
+ Essential
+ Protected
+ Origin
+ Bugs
+ Maintainer
+ Installed-Size
+ ),
+ @bin_dep_fields,
+ qw(
+ Section
+ Priority
+ Multi-Arch
+ Homepage
+ Description
+ Tag
+ Task
+ ),
+ ],
+ },
+ CTRL_INDEX_SRC() => {
+ name => 'Sources',
+ fields => [
+ qw(
+ Format
+ Package
+ Binary
+ Architecture
+ Version
+ Priority
+ Section
+ Origin
+ Maintainer
+ Uploaders
+ Homepage
+ Description
+ Standards-Version
+ ),
+ @vcs_fields,
+ @test_fields,
+ @src_dep_fields,
+ qw(
+ Package-List
+ Directory
+ ),
+ @src_files,
+ ],
+ },
+ CTRL_INDEX_PKG() => {
+ name => 'Packages',
+ fields => [
+ qw(
+ Package
+ Package-Type
+ Source
+ Version
+ Kernel-Version
+ Built-For-Profiles
+ Auto-Built-Package
+ Architecture
+ Subarchitecture
+ Installer-Menu-Item
+ Build-Essential
+ Essential
+ Protected
+ Origin
+ Bugs
+ Maintainer
+ Installed-Size
+ ),
+ @bin_dep_fields,
+ @bin_files,
+ qw(
+ Section
+ Priority
+ Multi-Arch
+ Homepage
+ Description
+ Tag
+ Task
+ ),
+ ],
+ },
+ CTRL_REPO_RELEASE() => {
+ name => 'Release',
+ fields => [
+ qw(
+ Origin
+ Label
+ Suite
+ Version
+ Codename
+ Changelogs
+ Date
+ Valid-Until
+ NotAutomatic
+ ButAutomaticUpgrades
+ Acquire-By-Hash
+ No-Support-for-Architecture-all
+ Architectures
+ Components
+ Description
+ ),
+ @bin_checksums,
+ ],
+ },
+ CTRL_CHANGELOG() => {
+ name => 'debian/changelog',
+ fields => [
+ qw(
+ Source
+ Binary-Only
+ Version
+ Distribution
+ Urgency
+ Maintainer
+ Timestamp
+ Date
+ Closes
+ Changes
+ ),
+ ],
+ },
+ CTRL_COPYRIGHT_HEADER() => {
+ name => 'debian/copyright Format stanza',
+ fields => [
+ qw(
+ Format
+ Upstream-Name
+ Upstream-Contact
+ Source
+ Disclaimer
+ Comment
+ License
+ Copyright
+ ),
+ ],
+ },
+ CTRL_COPYRIGHT_FILES() => {
+ name => 'debian/copyright Files stanza',
+ fields => [
+ qw(
+ Files
+ Copyright
+ License
+ Comment
+ ),
+ ],
+ },
+ CTRL_COPYRIGHT_LICENSE() => {
+ name => 'debian/copyright License stanza',
+ fields => [
+ qw(
+ License
+ Comment
+ ),
+ ],
+ },
+ CTRL_TESTS() => {
+ name => 'debian/tests/control',
+ fields => [
+ qw(
+ Test-Command
+ Tests
+ Tests-Directory
+ Architecture
+ Restrictions
+ Features
+ Classes
+ Depends
+ ),
+ ],
+ },
+ CTRL_FILE_BUILDINFO() => {
+ name => '.buildinfo',
+ fields => [
+ qw(
+ Format
+ Source
+ Binary
+ Architecture
+ Version
+ Binary-Only-Changes
+ ),
+ @src_checksums,
+ qw(
+ Build-Origin
+ Build-Architecture
+ Build-Kernel-Version
+ Build-Date
+ Build-Path
+ Build-Tainted-By
+ Installed-Build-Depends
+ Environment
+ ),
+ ],
+ },
+ CTRL_FILE_CHANGES() => {
+ name => '.changes',
+ fields => [
+ qw(
+ Format
+ Date
+ Source
+ Binary
+ Binary-Only
+ Built-For-Profiles
+ Architecture
+ Version
+ Distribution
+ Urgency
+ Maintainer
+ Changed-By
+ Description
+ Closes
+ Changes
+ ),
+ @src_files,
+ ],
+ },
+ CTRL_FILE_VENDOR() => {
+ name => 'dpkg origin',
+ fields => [
+ qw(
+ Vendor
+ Vendor-Url
+ Bugs
+ Parent
+ ),
+ ],
+ },
+ CTRL_FILE_STATUS() => {
+ name => 'dpkg status',
+ fields => [
+ qw(
+ Package
+ Essential
+ Protected
+ Status
+ Priority
+ Section
+ Installed-Size
+ Origin
+ Maintainer
+ Bugs
+ Architecture
+ Multi-Arch
+ Source
+ Version
+ Config-Version
+ Replaces
+ Provides
+ Depends
+ Pre-Depends
+ Recommends
+ Suggests
+ Breaks
+ Conflicts
+ Enhances
+ Conffiles
+ Description
+ Triggers-Pending
+ Triggers-Awaited
+ Auto-Built-Package
+ Build-Essential
+ Built-For-Profiles
+ Built-Using
+ Static-Built-Using
+ Homepage
+ Installer-Menu-Item
+ Kernel-Version
+ Package-Type
+ Subarchitecture
+ Tag
+ Task
+ ),
+ ],
+ },
+);
+
+is_deeply([ field_list_src_dep() ],
+ [ @src_dep_fields ],
+ 'List of build dependencies');
+is_deeply([ field_list_pkg_dep() ],
+ [ @bin_dep_fields ],
+ 'List of build dependencies');
+
+is(field_capitalize('invented-field'), 'Invented-Field',
+ 'Field Invented-Field capitalization');
+ok(!field_is_official('invented-field'),
+ 'Field Invented-Field is not official');
+
+my %known_fields;
+foreach my $type (sort keys %fields) {
+ if (not $fields{$type}->{unordered}) {
+ is_deeply([ field_ordered_list($type) ], $fields{$type}->{fields},
+ "List of $fields{$type}->{name} fields");
+ }
+
+ foreach my $field (@{$fields{$type}->{fields}}) {
+ $known_fields{$field} = 1;
+ }
+}
+
+foreach my $field (sort keys %known_fields) {
+ is(field_capitalize($field), $field, "Field $field capitalization");
+ is(field_capitalize(lc $field), $field, "Field lc($field) capitalization");
+ is(field_capitalize(uc $field), $field, "Field uc($field) capitalization");
+
+ ok(field_is_official($field), "Field $field is official");
+ ok(field_is_official(lc $field), "Field lc($field) is official");
+ ok(field_is_official(uc $field), "Field uc($field) is official");
+}
+
+foreach my $type (sort keys %fields) {
+ my %allowed_fields = map { $_ => 1 } @{$fields{$type}->{fields}};
+
+ foreach my $field (sort keys %known_fields) {
+ if ($allowed_fields{$field}) {
+ ok(field_is_allowed_in($field, $type),
+ "Field $field allowed for type $fields{$type}->{name}");
+ } else {
+ ok(!field_is_allowed_in($field, $type),
+ "Field $field not allowed for type $fields{$type}->{name}");
+ }
+ }
+}
+
+# Check deb822 field parsers
+
+my $ctrl = Dpkg::Control->new(type => CTRL_PKG_DEB);
+
+my ($source, $version);
+
+$ctrl->{Package} = 'test-binary';
+$ctrl->{Version} = '2.0-1';
+$ctrl->{Source} = 'test-source (1.0)';
+($source, $version) = field_parse_binary_source($ctrl);
+is($source, 'test-source', 'Source package from binary w/ Source field');
+is($version, '1.0', 'Source version from binary w/ Source field');
+
+$ctrl->{Source} = 'test-source';
+($source, $version) = field_parse_binary_source($ctrl);
+is($source, 'test-source', 'Source package from binary w/ Source field w/o version');
+is($version, '2.0-1', 'Source version from binary w/ Source field w/o version');
+
+delete $ctrl->{Source};
+($source, $version) = field_parse_binary_source($ctrl);
+is($source, 'test-binary', 'Source package from binary w/o Source field');
+is($version, '2.0-1', 'Source version from binary w/o Source field');
diff --git a/scripts/t/Dpkg_Control_Tests.t b/scripts/t/Dpkg_Control_Tests.t
new file mode 100644
index 0000000..27042dc
--- /dev/null
+++ b/scripts/t/Dpkg_Control_Tests.t
@@ -0,0 +1,71 @@
+#!/usr/bin/perl
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use Test::More tests => 5;
+use Test::Dpkg qw(:paths);
+
+BEGIN {
+ use_ok('Dpkg::Control::Tests');
+}
+
+my $datadir = test_get_data_path();
+
+sub parse_tests {
+ my $path = shift;
+
+ my $tests = Dpkg::Control::Tests->new();
+ eval {
+ $tests->load($path);
+ 1;
+ } or return;
+
+ return $tests;
+}
+
+my $tests;
+
+$tests = parse_tests("$datadir/tests-missing-fields");
+is($tests, undef, 'autopkgtest missing required fields');
+
+$tests = parse_tests("$datadir/tests-plain-text");
+is($tests, undef, 'autopkgtest is not in deb822 format');
+
+my $expected = <<'TESTS';
+Tests: aaa, bbb, ccc
+
+Tests: danger, warning
+Restrictions: rw-build-tree, needs-root, breaks-testbed
+
+Tests: depends
+Depends: @, @builddeps@, extra-package
+
+Tests: dir
+Tests-Directory: .
+
+Tests: feature
+
+Tests: class
+Classes: self-test
+
+Test-Command: command arg1 arg2
+
+TESTS
+
+$tests = parse_tests("$datadir/tests-valid");
+ok(defined $tests, 'Valid autopkgtest control file');
+is($tests->output(), $expected, 'autopkgtest control file dumped');
diff --git a/scripts/t/Dpkg_Control_Tests/tests-missing-fields b/scripts/t/Dpkg_Control_Tests/tests-missing-fields
new file mode 100644
index 0000000..7f7794d
--- /dev/null
+++ b/scripts/t/Dpkg_Control_Tests/tests-missing-fields
@@ -0,0 +1,7 @@
+Tests: aaa
+
+Test-Command: command
+
+Other:
+
+Tests: bbb
diff --git a/scripts/t/Dpkg_Control_Tests/tests-plain-text b/scripts/t/Dpkg_Control_Tests/tests-plain-text
new file mode 100644
index 0000000..a29d388
--- /dev/null
+++ b/scripts/t/Dpkg_Control_Tests/tests-plain-text
@@ -0,0 +1,6 @@
+This is a plain text file
+that does not contain
+
+ any of the expected fields nor values
+
+and should fail to load.
diff --git a/scripts/t/Dpkg_Control_Tests/tests-valid b/scripts/t/Dpkg_Control_Tests/tests-valid
new file mode 100644
index 0000000..c0ad60b
--- /dev/null
+++ b/scripts/t/Dpkg_Control_Tests/tests-valid
@@ -0,0 +1,18 @@
+Tests: aaa, bbb, ccc
+
+Tests: danger, warning
+Restrictions: rw-build-tree, needs-root, breaks-testbed
+
+Tests: depends
+Depends: @, @builddeps@, extra-package
+
+Tests: dir
+Tests-Directory: .
+
+Tests: feature
+Features:
+
+Tests: class
+Classes: self-test
+
+Test-Command: command arg1 arg2
diff --git a/scripts/t/Dpkg_Deps.t b/scripts/t/Dpkg_Deps.t
new file mode 100644
index 0000000..8694adf
--- /dev/null
+++ b/scripts/t/Dpkg_Deps.t
@@ -0,0 +1,363 @@
+#!/usr/bin/perl
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use Test::More tests => 82;
+
+use Dpkg::Arch qw(get_host_arch);
+use Dpkg::Version;
+
+$ENV{DEB_BUILD_ARCH} = 'amd64';
+$ENV{DEB_HOST_ARCH} = 'amd64';
+
+use_ok('Dpkg::Deps');
+
+is(deps_concat(), '', 'Concatenate an empty list');
+is(deps_concat(undef), '', 'Concatenate list with undef');
+is(deps_concat(''), '', 'Concatenate an empty string');
+is(deps_concat('', undef), '', 'Concatenate empty string with undef');
+is(deps_concat('dep-a', undef, 'dep-b'), 'dep-a, dep-b',
+ 'Concatenate two strings with intermixed undef');
+
+sub test_dep_parse_option {
+ my %options = @_;
+
+ eval {
+ my $dep_croak = deps_parse('pkg', %options);
+ };
+ my $options = join ' ', map { "$_=$options{$_}" } keys %options;
+ ok(defined $@, "Parse with bogus arch options $options");
+}
+
+test_dep_parse_option(host_arch => 'all');
+test_dep_parse_option(host_arch => 'any');
+test_dep_parse_option(host_arch => 'linux-any');
+test_dep_parse_option(host_arch => 'unknown-arch');
+test_dep_parse_option(build_arch => 'all');
+test_dep_parse_option(build_arch => 'any');
+test_dep_parse_option(build_arch => 'linux-any');
+test_dep_parse_option(build_arch => 'unknown-arch');
+
+my $field_multiline = ' , , libgtk2.0-common (= 2.10.13-1) , libatk1.0-0 (>=
+1.13.2), libc6 (>= 2.5-5), libcairo2 (>= 1.4.0), libcupsys2 (>= 1.2.7) <profile.a>
+<profile.b
+profile.c>
+<profile.d>,
+libfontconfig1 (>= 2.4.0), libglib2.0-0 ( >= 2.12.9), libgnutls13 (>=
+1.6.3-0), libjpeg62, python (<< 2.5) , , ';
+my $field_multiline_sorted = 'libatk1.0-0 (>= 1.13.2), libc6 (>= 2.5-5), libcairo2 (>= 1.4.0), libcupsys2 (>= 1.2.7) <profile.a> <profile.b profile.c> <profile.d>, libfontconfig1 (>= 2.4.0), libglib2.0-0 (>= 2.12.9), libgnutls13 (>= 1.6.3-0), libgtk2.0-common (= 2.10.13-1), libjpeg62, python (<< 2.5)';
+
+my $dep_multiline = deps_parse($field_multiline);
+$dep_multiline->sort();
+is($dep_multiline->output(), $field_multiline_sorted, 'Parse, sort and output');
+
+my $dep_sorted = deps_parse('pkgz, pkgz | pkgb, pkgz | pkga, pkga (>= 1.0), pkgz (<= 2.0)');
+$dep_sorted->sort();
+is($dep_sorted->output(), 'pkga (>= 1.0), pkgz, pkgz | pkga, pkgz | pkgb, pkgz (<= 2.0)', 'Check sort() algorithm');
+
+my $dep_subset = deps_parse('libatk1.0-0 (>> 1.10), libc6, libcairo2');
+is($dep_multiline->implies($dep_subset), 1, 'Dep implies subset of itself');
+is($dep_subset->implies($dep_multiline), undef, "Subset doesn't imply superset");
+my $dep_opposite = deps_parse('python (>= 2.5)');
+is($dep_opposite->implies($dep_multiline), 0, 'Opposite condition implies NOT the depends');
+
+my $dep_or1 = deps_parse('a|b (>=1.0)|c (>= 2.0)');
+my $dep_or2 = deps_parse('x|y|a|b|c (<= 0.5)|c (>=1.5)|d|e');
+is($dep_or1->implies($dep_or2), 1, 'Implication between OR 1/2');
+is($dep_or2->implies($dep_or1), undef, 'Implication between OR 2/2');
+
+my $dep_ma_host = deps_parse('libcairo2');
+my $dep_ma_any = deps_parse('libcairo2:any');
+my $dep_ma_build = deps_parse('libcairo2:native', build_dep => 1);
+my $dep_ma_explicit = deps_parse('libcairo2:amd64');
+is($dep_ma_host->implies($dep_ma_any), undef, 'foo !-> foo:any');
+is($dep_ma_build->implies($dep_ma_any), undef, 'foo:native !-> foo:any');
+is($dep_ma_explicit->implies($dep_ma_any), undef, 'foo:<arch> !-> foo:any');
+is($dep_ma_any->implies($dep_ma_host), undef, 'foo:any !-> foo');
+is($dep_ma_any->implies($dep_ma_build), undef, 'foo:any !-> foo:native');
+is($dep_ma_any->implies($dep_ma_explicit), undef, 'foo:any !-> foo:<arch>');
+is($dep_ma_host->implies($dep_ma_host), 1, 'foo -> foo');
+is($dep_ma_any->implies($dep_ma_any), 1, 'foo:any -> foo:any');
+is($dep_ma_build->implies($dep_ma_build), 1, 'foo:native -> foo:native');
+is($dep_ma_explicit->implies($dep_ma_explicit), 1, 'foo:<arch>-> foo:<arch>');
+
+my $field_tests = 'self, @, @builddeps@';
+$SIG{__WARN__} = sub {};
+my $dep_tests_fail = deps_parse($field_tests);
+is($dep_tests_fail, undef, 'normal deps with @ in pkgname');
+delete $SIG{__WARN__};
+my $dep_tests_pass = deps_parse($field_tests, tests_dep => 1);
+is($dep_tests_pass->output(), $field_tests, 'tests deps with @ in pkgname');
+
+my $field_arch = 'libc6 (>= 2.5) [!alpha !hurd-i386], libc6.1 [alpha], libc0.1 [hurd-i386]';
+my $dep_i386 = deps_parse($field_arch, reduce_arch => 1, host_arch => 'i386');
+my $dep_alpha = deps_parse($field_arch, reduce_arch => 1, host_arch => 'alpha');
+my $dep_hurd = deps_parse($field_arch, reduce_arch => 1, host_arch => 'hurd-i386');
+is($dep_i386->output(), 'libc6 (>= 2.5)', 'Arch reduce 1/3');
+is($dep_alpha->output(), 'libc6.1', 'Arch reduce 2/3');
+is($dep_hurd->output(), 'libc0.1', 'Arch reduce 3/3');
+
+my $field_profile = 'dep1 <!stage1 !nocheck>, ' .
+'dep2 <stage1 !nocheck>, ' .
+'dep3 <nocheck !stage1>, ' .
+'dep4 <stage1 nocheck>, ' .
+'dep5 <stage1>, dep6 <!stage1>, ' .
+'dep7 <stage1> | dep8 <nocheck>, ' .
+'dep9 <!stage1> <!nocheck>, ' .
+'dep10 <stage1> <!nocheck>, ' .
+'dep11 <stage1> <nocheck>, '.
+'dep12 <!nocheck> <!stage1>, ' .
+'dep13 <nocheck> <!stage1>, ' .
+'dep14 <nocheck> <stage1>';
+my $dep_noprof = deps_parse($field_profile, reduce_profiles => 1, build_profiles => []);
+my $dep_stage1 = deps_parse($field_profile, reduce_profiles => 1, build_profiles => ['stage1']);
+my $dep_nocheck = deps_parse($field_profile, reduce_profiles => 1, build_profiles => ['nocheck']);
+my $dep_stage1nocheck = deps_parse($field_profile, reduce_profiles => 1, build_profiles => ['stage1', 'nocheck']);
+is($dep_noprof->output(), 'dep1, dep6, dep9, dep10, dep12, dep13', 'Profile reduce 1/4');
+is($dep_stage1->output(), 'dep2, dep5, dep7, dep9, dep10, dep11, dep12, dep14', 'Profile reduce 2/4');
+is($dep_nocheck->output(), 'dep3, dep6, dep8, dep9, dep11, dep12, dep13, dep14', 'Profile reduce 3/4');
+is($dep_stage1nocheck->output(), 'dep4, dep5, dep7 | dep8, dep10, dep11, dep13, dep14', 'Profile reduce 4/4');
+
+$dep_noprof = deps_parse($field_profile);
+$dep_noprof->reduce_profiles([]);
+$dep_stage1 = deps_parse($field_profile);
+$dep_stage1->reduce_profiles(['stage1']);
+$dep_nocheck = deps_parse($field_profile);
+$dep_nocheck->reduce_profiles(['nocheck']);
+$dep_stage1nocheck = deps_parse($field_profile);
+$dep_stage1nocheck->reduce_profiles(['stage1', 'nocheck']);
+is($dep_noprof->output(), 'dep1, dep6, dep9, dep10, dep12, dep13', 'Profile post-reduce 1/4');
+is($dep_stage1->output(), 'dep2, dep5, dep7, dep9, dep10, dep11, dep12, dep14', 'Profile post-reduce 2/4');
+is($dep_nocheck->output(), 'dep3, dep6, dep8, dep9, dep11, dep12, dep13, dep14', 'Profile post-reduce 3/4');
+is($dep_stage1nocheck->output(), 'dep4, dep5, dep7 | dep8, dep10, dep11, dep13, dep14', 'Profile post-reduce 4/4');
+
+my $field_restrict = 'dep1 <!bootstrap !restrict>, ' .
+'dep2 <bootstrap restrict>, ' .
+'dep3 <!restrict>, ' .
+'dep4 <restrict>, ' .
+'dep5 <!bootstrap> <!restrict>, ' .
+'dep6 <bootstrap> <restrict>';
+my $dep_restrict = deps_parse($field_restrict, reduce_restrictions => 1, build_profiles => []);
+is($dep_restrict->output(), 'dep1, dep3, dep5', 'Unknown restrictions reduce');
+
+$dep_restrict = deps_parse($field_restrict);
+$dep_restrict->reduce_profiles([]);
+is($dep_restrict->output(), 'dep1, dep3, dep5', 'Unknown restrictions post-reduce');
+
+my $facts = Dpkg::Deps::KnownFacts->new();
+$facts->add_installed_package('mypackage', '1.3.4-1', get_host_arch(), 'no');
+$facts->add_installed_package('mypackage2', '1.3.4-1', 'somearch', 'no');
+$facts->add_installed_package('pkg-ma-foreign', '1.3.4-1', 'somearch', 'foreign');
+$facts->add_installed_package('pkg-ma-foreign2', '1.3.4-1', get_host_arch(), 'foreign');
+$facts->add_installed_package('pkg-ma-allowed', '1.3.4-1', 'somearch', 'allowed');
+$facts->add_installed_package('pkg-ma-allowed2', '1.3.4-1', 'somearch', 'allowed');
+$facts->add_installed_package('pkg-ma-allowed3', '1.3.4-1', get_host_arch(), 'allowed');
+$facts->add_installed_package('pkg-indep-normal', '1.3.4-1', 'all', 'no');
+$facts->add_installed_package('pkg-indep-foreign', '1.3.4-1', 'all', 'foreign');
+$facts->add_provided_package('myvirtual', undef, undef, 'mypackage');
+$facts->add_provided_package('myvirtual2', REL_EQ, '1.0-1', 'mypackage');
+$facts->add_provided_package('myvirtual3', REL_GE, '2.0-1', 'mypackage');
+
+my $field_duplicate = 'libc6 (>= 2.3), libc6 (>= 2.6-1), mypackage (>=
+1.3), myvirtual | something, python (>= 2.5), mypackage2, pkg-ma-foreign,
+pkg-ma-foreign2, pkg-ma-allowed:any, pkg-ma-allowed2, pkg-ma-allowed3';
+my $dep_dup = deps_parse($field_duplicate);
+$dep_dup->simplify_deps($facts, $dep_opposite);
+is($dep_dup->output(), 'libc6 (>= 2.6-1), mypackage2, pkg-ma-allowed2',
+ 'Simplify deps');
+
+my $dep_ma_all_normal_implicit_native = deps_parse('pkg-indep-normal', build_dep => 1);
+my $dep_ma_all_normal_explicit_native = deps_parse('pkg-indep-normal:native', build_dep => 1);
+my $dep_ma_all_foreign_implicit_native = deps_parse('pkg-indep-foreign', build_dep => 1);
+my $dep_ma_all_foreign_explicit_native = deps_parse('pkg-indep-foreign:native', build_dep => 1);
+$dep_ma_all_normal_implicit_native->simplify_deps($facts);
+is($dep_ma_all_normal_implicit_native->output(), '',
+ 'Simplify arch:all m-a:no w/ implicit :native (satisfied)');
+$dep_ma_all_normal_explicit_native->simplify_deps($facts);
+is($dep_ma_all_normal_explicit_native->output(), '',
+ 'Simplify arch:all m-a:no w/ explicit :native (satisfied)');
+$dep_ma_all_foreign_implicit_native->simplify_deps($facts);
+is($dep_ma_all_foreign_implicit_native->output(), '',
+ 'Simplify arch:all m-a:foreign w/ implicit :native (satisfied)');
+$dep_ma_all_foreign_explicit_native->simplify_deps($facts);
+is($dep_ma_all_foreign_explicit_native->output(), 'pkg-indep-foreign:native',
+ 'Simplify arch:all m-a:foreign w/ explicit :native (unsatisfied)');
+
+TODO: {
+
+local $TODO = 'not yet implemented';
+
+my $dep_or_eq = deps_parse('pkg-a | pkg-b | pkg-a');
+$dep_or_eq->simplify_deps($facts);
+is($dep_or_eq->output(), 'pkg-a | pkg-b',
+ 'Simplify duped ORed, equal names');
+
+$dep_or_eq = deps_parse('pkg-a (= 10) | pkg-b | pkg-a (= 10)');
+$dep_or_eq->simplify_deps($facts);
+is($dep_or_eq->output(), 'pkg-a (= 10) | pkg-b',
+ 'Simplify duped ORed, matching version');
+
+my $dep_or_subset = deps_parse('pkg-a (>= 10) | pkg-b | pkg-a (= 10)');
+$dep_or_eq->simplify_deps($facts);
+is($dep_or_eq->output(), 'pkg-a (= 10) | pkg-b',
+ 'Simplify duped ORed, subset version');
+
+$dep_or_subset = deps_parse('pkg-a (>= 10) <profile> | pkg-b | pkg-a (= 10) <profile>');
+$dep_or_eq->simplify_deps($facts);
+is($dep_or_eq->output(), 'pkg-a (= 10) <profile> | pkg-b',
+ 'Simplify duped ORed, subset version');
+
+} # TODO
+
+my $field_virtual = 'myvirtual | other';
+my $dep_virtual = deps_parse($field_virtual);
+$dep_virtual->simplify_deps($facts);
+is($dep_virtual->output(), '',
+ 'Simplify unversioned depends with unversioned virtual (satisfied)');
+
+$field_virtual = 'myvirtual (>= 1.0) | other';
+$dep_virtual = deps_parse($field_virtual);
+$dep_virtual->simplify_deps($facts);
+is($dep_virtual->output(), 'myvirtual (>= 1.0) | other',
+ 'Simplify versioned depends on unversioned virtual (unsatisfied)');
+
+$field_virtual = 'myvirtual2 (>= 0.0) | other';
+$dep_virtual = deps_parse($field_virtual);
+$dep_virtual->simplify_deps($facts);
+is($dep_virtual->output(), '',
+ 'Simplify versioned depends on versioned virtual (satisfied)');
+
+$field_virtual = 'myvirtual2 (>= 2.0) | other';
+$dep_virtual = deps_parse($field_virtual);
+$dep_virtual->simplify_deps($facts);
+is($dep_virtual->output(), 'myvirtual2 (>= 2.0) | other',
+ 'Simplify versioned depends on versioned virtual (unsatisfied)');
+
+$field_virtual = 'myvirtual3 (= 2.0-1)';
+$dep_virtual = deps_parse($field_virtual);
+$dep_virtual->simplify_deps($facts);
+is($dep_virtual->output(), 'myvirtual3 (= 2.0-1)',
+ 'Simplify versioned depends on GT versioned virtual (unsatisfied/ignored)');
+
+my $field_dup_union = 'libc6 (>> 2.3), libc6 (>= 2.6-1), fake (<< 2.0),
+fake(>> 3.0), fake (= 2.5), python (<< 2.5), python (= 2.4)';
+my $dep_dup_union = deps_parse($field_dup_union, union => 1);
+$dep_dup_union->simplify_deps($facts);
+is($dep_dup_union->output(), 'libc6 (>> 2.3), fake (<< 2.0), fake (>> 3.0), fake (= 2.5), python (<< 2.5)', 'Simplify union deps');
+
+$dep_dup_union = deps_parse('sipsak (<= 0.9.6-2.1), sipsak (<= 0.9.6-2.2)', union => 1);
+$dep_dup_union->simplify_deps($facts);
+is($dep_dup_union->output(), 'sipsak (<= 0.9.6-2.2)', 'Simplify union deps 2');
+
+my $dep_red = deps_parse('abc | xyz, two, abc');
+$dep_red->simplify_deps($facts, $dep_opposite);
+is($dep_red->output(), 'abc, two', 'Simplification respect order');
+is("$dep_red", $dep_red->output(), 'Stringification == output()');
+
+my $dep_profiles = deps_parse('dupe <stage1 cross>, dupe <stage1 cross>');
+$dep_profiles->simplify_deps($facts);
+is($dep_profiles->output(), 'dupe <stage1 cross>',
+ 'Simplification respects duplicated profiles');
+
+TODO: {
+
+local $TODO = 'not yet implemented';
+
+$dep_profiles = deps_parse('tool <!cross>, tool <stage1 cross>');
+$dep_profiles->simplify_deps($facts);
+is($dep_profiles->output(), 'tool <!cross> <stage1 cross>',
+ 'Simplify restriction formulas');
+
+} # TODO
+
+$dep_profiles = deps_parse('libfoo-dev:native <!stage1>, libfoo-dev <!stage1 cross>', build_dep => 1);
+$dep_profiles->simplify_deps($facts);
+is($dep_profiles->output(),
+ 'libfoo-dev:native <!stage1>, libfoo-dev <!stage1 cross>',
+ 'Simplification respects archqualifiers and profiles');
+
+my $dep_archqual = deps_parse('pkg, pkg:any');
+$dep_archqual->simplify_deps($facts);
+is($dep_archqual->output(), 'pkg, pkg:any',
+ 'Simplify respect arch-qualified ANDed dependencies 1/2');
+
+$dep_archqual = deps_parse('pkg:amd64, pkg:any, pkg:i386');
+$dep_archqual->simplify_deps($facts);
+is($dep_archqual->output(), 'pkg:amd64, pkg:any, pkg:i386',
+ 'Simplify respects arch-qualified ANDed dependencies 2/2');
+
+$dep_archqual = deps_parse('pkg | pkg:any');
+$dep_archqual->simplify_deps($facts);
+is($dep_archqual->output(), 'pkg | pkg:any',
+ 'Simplify respect arch-qualified ORed dependencies 1/2');
+
+$dep_archqual = deps_parse('pkg:amd64 | pkg:i386 | pkg:any');
+$dep_archqual->simplify_deps($facts);
+is($dep_archqual->output(), 'pkg:amd64 | pkg:i386 | pkg:any',
+ 'Simplify respect arch-qualified ORed dependencies 2/2');
+
+my $dep_version = deps_parse('pkg, pkg (= 1.0)');
+$dep_version->simplify_deps($facts);
+is($dep_version->output(), 'pkg (= 1.0)', 'Simplification merges versions');
+
+my $dep_empty1 = deps_parse('');
+is($dep_empty1->output(), '', 'Empty dependency');
+
+my $dep_empty2 = deps_parse(' , , ', union => 1);
+is($dep_empty2->output(), '', "' , , ' is also an empty dependency");
+
+# Check sloppy but acceptable dependencies
+
+my $dep_sloppy_version = deps_parse('package (= 1.0 )');
+is($dep_sloppy_version->output(), 'package (= 1.0)', 'sloppy version restriction');
+
+my $dep_sloppy_arch = deps_parse('package [ alpha ]');
+is($dep_sloppy_arch->output(), 'package [alpha]', 'sloppy arch restriction');
+
+my $dep_sloppy_profile = deps_parse('package < !profile > < other >');
+is($dep_sloppy_profile->output(), 'package <!profile> <other>',
+ 'sloppy profile restriction');
+
+$SIG{__WARN__} = sub {};
+
+my $dep_bad_version = deps_parse('package (= 1.0) (>= 2.0)');
+is($dep_bad_version, undef, 'Bogus repeated version restriction');
+
+my $dep_bad_arch = deps_parse('package [alpha] [amd64]');
+is($dep_bad_arch, undef, 'Bogus repeated arch restriction');
+
+my $dep_bad_multiline = deps_parse("a, foo\nbar, c");
+is($dep_bad_multiline, undef, 'invalid dependency split over multiple line');
+
+delete $SIG{__WARN__};
+
+my $dep_iter = deps_parse('a, b:armel, c | d:armhf, d:mips (>> 1.2)');
+my %dep_arches;
+my %dep_pkgs;
+deps_iterate($dep_iter, sub {
+ my $dep = shift;
+
+ $dep_pkgs{$dep->{package}} = 1;
+ if ($dep->{archqual}) {
+ $dep_arches{$dep->{archqual}} = 1;
+ }
+ return 1;
+});
+my @dep_arches = sort keys %dep_arches;
+my @dep_pkgs = sort keys %dep_pkgs;
+is("@dep_arches", 'armel armhf mips', 'Dependency iterator, get arches');
+is("@dep_pkgs", 'a b c d', 'Dependency iterator, get packages');
diff --git a/scripts/t/Dpkg_Dist_Files.t b/scripts/t/Dpkg_Dist_Files.t
new file mode 100644
index 0000000..e7d6a5d
--- /dev/null
+++ b/scripts/t/Dpkg_Dist_Files.t
@@ -0,0 +1,216 @@
+#!/usr/bin/perl
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use Test::More tests => 26;
+use Test::Dpkg qw(:paths);
+
+use_ok('Dpkg::Dist::Files');
+
+my $datadir = test_get_data_path();
+
+my $expected;
+my %expected = (
+ 'pkg-src_4:2.0+1A~rc1-1.dsc' => {
+ filename => 'pkg-src_4:2.0+1A~rc1-1.dsc',
+ section => 'source',
+ priority => 'extra',
+ attrs => {},
+ },
+ 'pkg-src_4:2.0+1A~rc1-1.tar.xz' => {
+ filename => 'pkg-src_4:2.0+1A~rc1-1.tar.xz',
+ section => 'source',
+ priority => 'extra',
+ attrs => {},
+ },
+ 'pkg-templ_1.2.3_arch.type' => {
+ filename => 'pkg-templ_1.2.3_arch.type',
+ package => 'pkg-templ',
+ package_type => 'type',
+ version => '1.2.3',
+ arch => 'arch',
+ section => 'section',
+ priority => 'priority',
+ attrs => {},
+ },
+ 'pkg-arch_2.0.0_amd64.deb' => {
+ filename => 'pkg-arch_2.0.0_amd64.deb',
+ package => 'pkg-arch',
+ package_type => 'deb',
+ version => '2.0.0',
+ arch => 'amd64',
+ section => 'admin',
+ priority => 'required',
+ attrs => {},
+ },
+ 'pkg-indep_0.0.1-2_all.deb' => {
+ filename => 'pkg-indep_0.0.1-2_all.deb',
+ package => 'pkg-indep',
+ package_type => 'deb',
+ version => '0.0.1-2',
+ arch => 'all',
+ section => 'net',
+ priority => 'standard',
+ attrs => {},
+ },
+ 'other_0.txt' => {
+ filename => 'other_0.txt',
+ section => 'text',
+ priority => 'optional',
+ attrs => {
+ 'mime-type' => 'text/plain',
+ },
+ },
+ 'BY-HAND-file' => {
+ filename => 'BY-HAND-file',
+ section => 'webdocs',
+ priority => 'optional',
+ attrs => {
+ 'by-hand' => 'true'
+ },
+ },
+ 'another:filename' => {
+ filename => 'another:filename',
+ section => 'by-hand',
+ priority => 'extra',
+ attrs => {},
+ },
+ 'added-on-the-fly' => {
+ filename => 'added-on-the-fly',
+ section => 'void',
+ priority => 'wish',
+ attrs => {},
+ },
+);
+
+my $dist = Dpkg::Dist::Files->new();
+$dist->load("$datadir/files-byhand") or error('cannot parse file');
+
+$expected = <<'FILES';
+BY-HAND-file webdocs optional by-hand=true
+other_0.txt text optional mime-type=text/plain
+pkg-arch_2.0.0_amd64.deb admin required
+pkg-indep_0.0.1-2_all.deb net standard
+pkg-templ_1.2.3_arch.type section priority
+FILES
+
+is($dist->output(), $expected, 'Parsed dist file');
+foreach my $f ($dist->get_files()) {
+ my $filename = $f->{filename};
+
+ is_deeply($f, $expected{$filename},
+ "Detail for individual dist file $filename, via get_files()");
+
+ my $fs = $dist->get_file($filename);
+ is_deeply($fs, $expected{$filename},
+ "Detail for individual dist file $filename, via get_file()");
+}
+
+is($dist->parse_filename('file%invalid'), undef, 'invalid filename');
+
+$expected = <<'FILES';
+BY-HAND-file webdocs optional by-hand=true
+added-on-the-fly void wish
+other_0.txt text optional mime-type=text/plain
+pkg-arch_2.0.0_amd64.deb void imperative
+pkg-templ_1.2.3_arch.type section priority
+FILES
+
+$dist->add_file('added-on-the-fly', 'void', 'wish');
+is_deeply($dist->get_file('added-on-the-fly'), $expected{'added-on-the-fly'},
+ 'Get added file added-on-the-fly');
+
+$dist->add_file('pkg-arch_2.0.0_amd64.deb', 'void', 'imperative');
+my %expected_pkg_arch = %{$expected{'pkg-arch_2.0.0_amd64.deb'}};
+$expected_pkg_arch{section} = 'void';
+$expected_pkg_arch{priority} = 'imperative';
+is_deeply($dist->get_file('pkg-arch_2.0.0_amd64.deb'), \%expected_pkg_arch,
+ 'Get modified file pkg-arch_2.0.0_amd64.deb');
+
+$dist->del_file('pkg-indep_0.0.1-2_all.deb');
+is($dist->get_file('unknown'), undef, 'Get unknown file');
+is($dist->get_file('pkg-indep_0.0.1-2_all.deb'), undef, 'Get deleted file');
+is($dist->output(), $expected, 'Modified dist object');
+
+$expected = <<'FILES';
+another:filename by-hand extra
+pkg-src_4:2.0+1A~rc1-1.dsc source extra
+pkg-src_4:2.0+1A~rc1-1.tar.xz source extra
+FILES
+
+$dist->reset();
+$dist->add_file('pkg-src_4:2.0+1A~rc1-1.dsc', 'source', 'extra');
+$dist->add_file('pkg-src_4:2.0+1A~rc1-1.tar.xz', 'source', 'extra');
+$dist->add_file('another:filename', 'by-hand', 'extra');
+
+is_deeply($dist->get_file('pkg-src_4:2.0+1A~rc1-1.dsc'),
+ $expected{'pkg-src_4:2.0+1A~rc1-1.dsc'},
+ 'Get added file pkg-src_4:2.0+1A~rc1-1.dsc');
+is_deeply($dist->get_file('pkg-src_4:2.0+1A~rc1-1.tar.xz'),
+ $expected{'pkg-src_4:2.0+1A~rc1-1.tar.xz'},
+ 'Get added file pkg-src_4:2.0+1A~rc1-1.tar.xz');
+is_deeply($dist->get_file('another:filename'),
+ $expected{'another:filename'},
+ 'Get added file another:filename');
+is($dist->output, $expected, 'Added source files');
+
+$expected = <<'FILES';
+BY-HAND-file webdocs optional by-hand=true
+other_0.txt text optional mime-type=text/plain
+pkg-arch_2.0.0_amd64.deb admin required
+pkg-frag-a_0.0_arch.type section priority
+pkg-frag-b_0.0_arch.type section priority
+pkg-indep_0.0.1-2_all.deb net standard
+pkg-templ_1.2.3_arch.type section priority
+FILES
+
+$dist->reset();
+$dist->load_dir($datadir) or error('cannot parse fragment files');
+is($dist->output(), $expected, 'Parse fragment directory');
+
+$expected = <<'FILES';
+pkg-arch_2.0.0_amd64.deb admin required
+pkg-indep_0.0.1-2_all.deb net standard
+pkg-templ_1.2.3_arch.type section priority
+FILES
+
+$dist->reset();
+$dist->load("$datadir/files-byhand") or error('cannot parse file');
+$dist->filter(remove => sub { $_[0]->{priority} eq 'optional' });
+is($dist->output(), $expected, 'Filter remove priority optional');
+
+$expected = <<'FILES';
+BY-HAND-file webdocs optional by-hand=true
+other_0.txt text optional mime-type=text/plain
+FILES
+
+$dist->reset();
+$dist->load("$datadir/files-byhand") or error('cannot parse file');
+$dist->filter(keep => sub { $_[0]->{priority} eq 'optional' });
+is($dist->output(), $expected, 'Filter keep priority optional');
+
+$expected = <<'FILES';
+BY-HAND-file webdocs optional by-hand=true
+FILES
+
+$dist->reset();
+$dist->load("$datadir/files-byhand") or error('cannot parse file');
+$dist->filter(remove => sub { $_[0]->{section} eq 'text' },
+ keep => sub { $_[0]->{priority} eq 'optional' });
+is($dist->output(), $expected, 'Filter remove section text, keep priority optional');
+
+1;
diff --git a/scripts/t/Dpkg_Dist_Files/files-byhand b/scripts/t/Dpkg_Dist_Files/files-byhand
new file mode 100644
index 0000000..416b14f
--- /dev/null
+++ b/scripts/t/Dpkg_Dist_Files/files-byhand
@@ -0,0 +1,5 @@
+pkg-templ_1.2.3_arch.type section priority
+pkg-arch_2.0.0_amd64.deb admin required
+pkg-indep_0.0.1-2_all.deb net standard
+other_0.txt text optional mime-type=text/plain
+BY-HAND-file webdocs optional by-hand=true
diff --git a/scripts/t/Dpkg_Dist_Files/files-fragment-a b/scripts/t/Dpkg_Dist_Files/files-fragment-a
new file mode 100644
index 0000000..fd6461d
--- /dev/null
+++ b/scripts/t/Dpkg_Dist_Files/files-fragment-a
@@ -0,0 +1 @@
+pkg-frag-a_0.0_arch.type section priority
diff --git a/scripts/t/Dpkg_Dist_Files/files-fragment-b b/scripts/t/Dpkg_Dist_Files/files-fragment-b
new file mode 100644
index 0000000..2acf22f
--- /dev/null
+++ b/scripts/t/Dpkg_Dist_Files/files-fragment-b
@@ -0,0 +1 @@
+pkg-frag-b_0.0_arch.type section priority
diff --git a/scripts/t/Dpkg_ErrorHandling.t b/scripts/t/Dpkg_ErrorHandling.t
new file mode 100644
index 0000000..7c2d128
--- /dev/null
+++ b/scripts/t/Dpkg_ErrorHandling.t
@@ -0,0 +1,27 @@
+#!/usr/bin/perl
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use Test::More tests => 1;
+
+BEGIN {
+ use_ok('Dpkg::ErrorHandling');
+}
+
+# TODO: Add actual test cases.
+
+1;
diff --git a/scripts/t/Dpkg_Exit.t b/scripts/t/Dpkg_Exit.t
new file mode 100644
index 0000000..663dfc9
--- /dev/null
+++ b/scripts/t/Dpkg_Exit.t
@@ -0,0 +1,68 @@
+#!/usr/bin/perl
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use Test::More tests => 7;
+
+BEGIN {
+ use_ok('Dpkg::Exit');
+}
+
+my $track = 0;
+
+sub test_handler {
+ $track++;
+}
+
+Dpkg::Exit::run_exit_handlers();
+
+is($track, 0, 'no handlers run');
+
+Dpkg::Exit::push_exit_handler(\&test_handler);
+Dpkg::Exit::pop_exit_handler();
+
+Dpkg::Exit::run_exit_handlers();
+
+is($track, 0, 'push/pop; no handlers run');
+
+Dpkg::Exit::push_exit_handler(\&test_handler);
+
+Dpkg::Exit::run_exit_handlers();
+
+is($track, 1, 'push; handler run');
+
+# Check the exit handlers, must be the last thing done.
+sub exit_handler {
+ pass('exit handler invoked');
+ exit 0;
+}
+
+sub ini_handler {
+ pass('ini handler invoked');
+}
+
+sub end_handler {
+ pass('end handler invoked');
+}
+
+Dpkg::Exit::push_exit_handler(\&end_handler);
+Dpkg::Exit::push_exit_handler(\&exit_handler);
+Dpkg::Exit::push_exit_handler(\&ini_handler);
+
+kill 'INT', $$;
+
+1;
diff --git a/scripts/t/Dpkg_File.t b/scripts/t/Dpkg_File.t
new file mode 100644
index 0000000..bbc6a3b
--- /dev/null
+++ b/scripts/t/Dpkg_File.t
@@ -0,0 +1,80 @@
+#!/usr/bin/perl
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use Test::More tests => 10;
+use Test::Dpkg qw(:paths);
+
+use File::Compare;
+use File::Path qw(rmtree);
+
+BEGIN {
+ use_ok('Dpkg::File');
+}
+
+my $datadir = test_get_data_path();
+my $tempdir = test_get_temp_path();
+
+my ($data, $data_ref, $data_fh);
+
+$data = file_slurp("$datadir/slurp-me");
+$data_ref = <<'DATA';
+first line
+next line
+final line
+DATA
+is($data, $data_ref, 'slurped data');
+
+file_dump("$tempdir/slurp-me", $data);
+ok(compare("$tempdir/slurp-me", "$datadir/slurp-me") == 0,
+ 'dumped slurped data');
+
+open $data_fh, '<', "$datadir/slurp-me"
+ or die "cannot open $datadir/slurp-me for reading: $!";
+my $discard = <$data_fh>;
+$data = file_slurp($data_fh);
+close $data_fh;
+$data_ref = <<'DATA';
+next line
+final line
+DATA
+is($data, $data_ref, 'slurped partial data');
+
+file_dump("$tempdir/dump-partial", $data);
+ok(compare("$tempdir/dump-partial", "$datadir/dump-partial") == 0,
+ 'dumped slurped partial data');
+
+open $data_fh, '>', "$tempdir/append-me"
+ or die "cannot create $tempdir/append-me: $!";
+print { $data_fh } "append line\n";
+file_dump($data_fh, "new line\nend line\n");
+close $data_fh;
+ok(compare("$tempdir/append-me", "$datadir/append-me") == 0,
+ 'dumped appended data');
+
+$data = undef;
+eval {
+ $data = file_slurp("$datadir/non-existent");
+};
+ok($@, 'cannot slurp missing file');
+
+ok(! -e "$tempdir/touched", 'file to be touched does not exist');
+file_touch("$tempdir/touched");
+ok(-e "$tempdir/touched", 'touched file exists');
+ok(-z "$tempdir/touched", 'touched file is empty');
+
+1;
diff --git a/scripts/t/Dpkg_File/append-me b/scripts/t/Dpkg_File/append-me
new file mode 100644
index 0000000..d332d64
--- /dev/null
+++ b/scripts/t/Dpkg_File/append-me
@@ -0,0 +1,3 @@
+append line
+new line
+end line
diff --git a/scripts/t/Dpkg_File/dump-partial b/scripts/t/Dpkg_File/dump-partial
new file mode 100644
index 0000000..4a00dc0
--- /dev/null
+++ b/scripts/t/Dpkg_File/dump-partial
@@ -0,0 +1,2 @@
+next line
+final line
diff --git a/scripts/t/Dpkg_File/slurp-me b/scripts/t/Dpkg_File/slurp-me
new file mode 100644
index 0000000..8840ed4
--- /dev/null
+++ b/scripts/t/Dpkg_File/slurp-me
@@ -0,0 +1,3 @@
+first line
+next line
+final line
diff --git a/scripts/t/Dpkg_Getopt.t b/scripts/t/Dpkg_Getopt.t
new file mode 100644
index 0000000..32edeec
--- /dev/null
+++ b/scripts/t/Dpkg_Getopt.t
@@ -0,0 +1,40 @@
+#!/usr/bin/perl
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use Test::More tests => 4;
+
+BEGIN {
+ use_ok('Dpkg::Getopt');
+}
+
+my @expect_argv;
+
+@ARGV = normalize_options(args => [ qw(-a -bfoo -c var) ]);
+@expect_argv = qw(-a -b foo -c var);
+is_deeply(\@ARGV, \@expect_argv, 'unbundle short options');
+
+@ARGV = normalize_options(args => [ qw(--option-a --option-b value --option-c=value) ]);
+@expect_argv = qw(--option-a --option-b value --option-c value);
+is_deeply(\@ARGV, \@expect_argv, 'unbundle long options');
+
+@ARGV = normalize_options(args => [ qw(-aaa -bbb --option-a=oa -- --opt=arg -dval) ],
+ delim => '--');
+@expect_argv = qw(-a aa -b bb --option-a oa -- --opt=arg -dval);
+is_deeply(\@ARGV, \@expect_argv, 'unbundle options with delimiter');
+
+1;
diff --git a/scripts/t/Dpkg_Gettext.t b/scripts/t/Dpkg_Gettext.t
new file mode 100644
index 0000000..c67e529
--- /dev/null
+++ b/scripts/t/Dpkg_Gettext.t
@@ -0,0 +1,27 @@
+#!/usr/bin/perl
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use Test::More tests => 1;
+
+BEGIN {
+ use_ok('Dpkg::Gettext');
+}
+
+# TODO: Add actual test cases.
+
+1;
diff --git a/scripts/t/Dpkg_IPC.t b/scripts/t/Dpkg_IPC.t
new file mode 100644
index 0000000..450d98d
--- /dev/null
+++ b/scripts/t/Dpkg_IPC.t
@@ -0,0 +1,71 @@
+#!/usr/bin/perl
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use Test::More tests => 8;
+
+use File::Temp qw(tempfile);
+
+use Dpkg::File;
+
+use_ok('Dpkg::IPC');
+
+my ($tmp1_fh, $tmp1_name) = tempfile(UNLINK => 1);
+my ($tmp2_fh, $tmp2_name) = tempfile(UNLINK => 1);
+
+my $string1 = "foo\nbar\n";
+my $string2;
+
+file_dump($tmp1_name, $string1);
+
+my $pid = spawn(exec => 'cat',
+ from_string => \$string1,
+ to_string => \$string2);
+
+ok($pid, 'execute cat program, I/O to variables');
+
+is($string2, $string1, '{from,to}_string');
+
+$pid = spawn(exec => 'cat',
+ from_handle => $tmp1_fh,
+ to_handle => $tmp2_fh);
+
+ok($pid, 'execute cat program, I/O to filehandles');
+
+wait_child($pid);
+
+$string2 = file_slurp($tmp2_name);
+
+is($string2, $string1, '{from,to}_handle');
+
+$pid = spawn(exec => 'cat',
+ from_file => $tmp1_name,
+ to_file => $tmp2_name,
+ wait_child => 1);
+
+ok($pid, 'execute cat program, I/O to filenames and wait');
+
+$string2 = file_slurp($tmp2_name);
+
+is($string2, $string1, '{from,to}_file');
+
+eval {
+ $pid = spawn(exec => ['sleep', '10'],
+ wait_child => 1,
+ timeout => 1);
+};
+ok($@, 'fails on timeout');
diff --git a/scripts/t/Dpkg_Index.t b/scripts/t/Dpkg_Index.t
new file mode 100644
index 0000000..ffc24b4
--- /dev/null
+++ b/scripts/t/Dpkg_Index.t
@@ -0,0 +1,27 @@
+#!/usr/bin/perl
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use Test::More tests => 1;
+
+BEGIN {
+ use_ok('Dpkg::Index');
+}
+
+# TODO: Add actual test cases.
+
+1;
diff --git a/scripts/t/Dpkg_Interface_Storable.t b/scripts/t/Dpkg_Interface_Storable.t
new file mode 100644
index 0000000..117350d
--- /dev/null
+++ b/scripts/t/Dpkg_Interface_Storable.t
@@ -0,0 +1,27 @@
+#!/usr/bin/perl
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use Test::More tests => 1;
+
+BEGIN {
+ use_ok('Dpkg::Interface::Storable');
+}
+
+# TODO: Add actual test cases.
+
+1;
diff --git a/scripts/t/Dpkg_Lock.t b/scripts/t/Dpkg_Lock.t
new file mode 100644
index 0000000..0b85180
--- /dev/null
+++ b/scripts/t/Dpkg_Lock.t
@@ -0,0 +1,27 @@
+#!/usr/bin/perl
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use Test::More tests => 1;
+
+BEGIN {
+ use_ok('Dpkg::Lock');
+}
+
+# TODO: Add actual test cases.
+
+1;
diff --git a/scripts/t/Dpkg_OpenPGP.t b/scripts/t/Dpkg_OpenPGP.t
new file mode 100644
index 0000000..4be7cd7
--- /dev/null
+++ b/scripts/t/Dpkg_OpenPGP.t
@@ -0,0 +1,116 @@
+#!/usr/bin/perl
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use Test::More;
+use Test::Dpkg qw(:paths :needs);
+
+use File::Compare;
+
+use Dpkg::ErrorHandling;
+use Dpkg::Path qw(find_command);
+use Dpkg::OpenPGP::KeyHandle;
+
+my %backend_cmd = (
+ auto => 'auto',
+ gpg => 'gpg',
+ sq => 'sq',
+ sqop => 'sop',
+ 'pgpainless-cli' => 'sop',
+);
+my @cmds = test_needs_openpgp_backend();
+unshift @cmds, 'auto';
+
+plan tests => 2 + 15 * scalar @cmds;
+
+use_ok('Dpkg::OpenPGP');
+use_ok('Dpkg::OpenPGP::ErrorCodes');
+
+report_options(quiet_warnings => 1);
+
+sub test_diff
+{
+ my ($exp_file, $gen_file, $desc) = @_;
+
+ my $res = compare($exp_file, $gen_file);
+ if ($res) {
+ system "diff -u '$exp_file' '$gen_file' >&2";
+ }
+ ok($res == 0, "$desc ($exp_file vs $gen_file)");
+}
+
+foreach my $cmd (@cmds) {
+ my $datadir = test_get_data_path();
+ my $tempdir = test_get_temp_path();
+
+ my $backend = $backend_cmd{$cmd};
+ my $openpgp = Dpkg::OpenPGP->new(
+ backend => $backend,
+ cmd => $cmd,
+ );
+
+ ok($openpgp->dearmor('PUBLIC KEY BLOCK', "$datadir/dpkg-test-pub.asc", "$tempdir/dpkg-test-pub.pgp") == OPENPGP_OK(),
+ "($backend:$cmd) dearmoring OpenPGP ASCII Armored certificate");
+ ok($openpgp->armor('PUBLIC KEY BLOCK', "$tempdir/dpkg-test-pub.pgp", "$tempdir/dpkg-test-pub.asc") == OPENPGP_OK(),
+ "($backend:$cmd) armoring OpenPGP binary certificate");
+ test_diff("$datadir/dpkg-test-pub.asc", "$tempdir/dpkg-test-pub.asc",
+ "($backend:$cmd) OpenPGP certificate dearmor/armor round-trip correctly");
+
+ ok($openpgp->armor('SIGNATURE', "$datadir/sign-file.sig", "$tempdir/sign-file.asc") == OPENPGP_OK(),
+ "($backend:$cmd) armoring OpenPGP binary signature succeeded");
+ ok(compare("$datadir/sign-file.sig", "$tempdir/sign-file.asc") != 0,
+ "($backend:$cmd) armoring OpenPGP ASCII Armor changed the file");
+ ok($openpgp->armor('SIGNATURE', "$datadir/sign-file.asc", "$tempdir/sign-file-rearmor.asc") == OPENPGP_OK(),
+ "($backend:$cmd) armoring OpenPGP armored signature succeeded");
+ test_diff("$datadir/sign-file.asc", "$tempdir/sign-file-rearmor.asc",
+ "($backend:$cmd) rearmoring OpenPGP ASCII Armor changed the file");
+
+ ok($openpgp->dearmor('SIGNATURE', "$tempdir/sign-file.asc", "$tempdir/sign-file.sig") == OPENPGP_OK(),
+ "($backend:$cmd) dearmoring OpenPGP armored signature succeeded");
+ test_diff("$datadir/sign-file.sig", "$tempdir/sign-file.sig",
+ "($backend:$cmd) dearmored OpenPGP ASCII Armor signature matches");
+
+ my $cert = "$datadir/dpkg-test-pub.asc";
+
+ ok($openpgp->inline_verify("$datadir/sign-file-inline.asc", undef, $cert) == OPENPGP_OK(),
+ "($backend:$cmd) verify OpenPGP ASCII Armor inline signature");
+ ok($openpgp->inline_verify("$datadir/sign-file-inline.sig", undef, $cert) == OPENPGP_OK(),
+ "($backend:$cmd) verify OpenPGP binary inline signature");
+
+ ok($openpgp->verify("$datadir/sign-file", "$datadir/sign-file.asc", $cert) == OPENPGP_OK(),
+ "($backend:$cmd) verify OpenPGP ASCII Armor detached signature");
+ ok($openpgp->verify("$datadir/sign-file", "$datadir/sign-file.sig", $cert) == OPENPGP_OK(),
+ "($backend:$cmd) verify OpenPGP binary detached signature");
+
+ my $key = Dpkg::OpenPGP::KeyHandle->new(
+ type => 'keyfile',
+ handle => "$datadir/dpkg-test-sec.asc",
+ );
+
+ SKIP: {
+ skip 'cannot use secrets', 2 unless $openpgp->can_use_secrets($key);
+
+ ok($openpgp->inline_sign("$datadir/sign-file", "$tempdir/sign-file-inline.asc", $key) == OPENPGP_OK(),
+ "($backend:$cmd) inline OpenPGP sign");
+ ok($openpgp->inline_verify("$tempdir/sign-file-inline.asc", undef, $cert) == OPENPGP_OK(),
+ "($backend:$cmd) verify generated inline OpenPGP signature");
+ };
+
+ # TODO: Add more test cases.
+}
+
+1;
diff --git a/scripts/t/Dpkg_OpenPGP/dpkg-test-pub.asc b/scripts/t/Dpkg_OpenPGP/dpkg-test-pub.asc
new file mode 100644
index 0000000..f9b9f2b
--- /dev/null
+++ b/scripts/t/Dpkg_OpenPGP/dpkg-test-pub.asc
@@ -0,0 +1,24 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+xjMEYtiJpRYJKwYBBAHaRw8BAQdAPc9bt2qxxLSlbrcdtR70gPFeqCusNUh/LjQV
+9es9JPbCwAsEHxYKAH0FgmLYiaUDCwkHCRDQUbmhp4t5cEcUAAAAAAAeACBzYWx0
+QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfarUJqlr3ies5QhbUfk4/CGJ8yjA5A
+xU2FniSvr1MEWAMVCggCmwECHgEWIQQ0iPyXWWjO+6ezdVTQUbmhp4t5cAAAeKwB
+ALhQhFu11tuBqJkeqbsB+zDw3TqINXDdOnZsz4zQTP8cAQCXB24twCDSwgL5ApXD
+LDKxacm+yTJG1xAr5fey/WM6Dc0lRHBrZyBUZXN0IEtleSA8ZHBrZy10ZXN0QGV4
+YW1wbGUub3JnPsLADgQTFgoAgAWCYtiJpQMLCQcJENBRuaGni3lwRxQAAAAAAB4A
+IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ5lEbcjt2RQSjys6N6+y4VDN
+OVw0W5VOTjJKEWDQHZDmAxUKCAKZAQKbAQIeARYhBDSI/JdZaM77p7N1VNBRuaGn
+i3lwAAA/3wD6A46mcuHcy26BOyz8co2cl53+tQeZ1F2qhg2kcofLA3UBAL7BWWPc
+Zojs6SbiB8Dc7BrYkJ4jk13jYpYXwa7CnEwPzjMEYtiJpRYJKwYBBAHaRw8BAQdA
+EC8I7eVdWPckXSEJdxYtGSUTOfSUFtP31dZZSiHawivCwL8EGBYKATEFgmLYiaUJ
+ENBRuaGni3lwRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y
+Z3wtg1MDVcKCPrpDO5sjWVCjoFjYX3/+1+KopBiO8UPtApsCvqAEGRYKAG8FgmLY
+iaUJEF8IeVKOdEodRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdw
+Lm9yZ5tsuhbNSkLk/OacoV9yfg+ediDvQ51kf9N6Ue1y0k+nFiEEld5RAbTaqSHO
+dkqUXwh5Uo50Sh0AAGMlAP4jFUATpYnAjF8rnh/3Oh7ZNXzRXmju8voJnkPh9C+P
+GAD/aGKxGy1wpAQT+qJnNMIXIVq//E6Nw+Bg+iC9+Sy+KwoWIQQ0iPyXWWjO+6ez
+dVTQUbmhp4t5cAAAyQwA/RFPJCO1yGV0ifxxfruj9qxr9ND3zo1YbIDJUdJS+QyX
+AQC/SgSs3xBCVcXjIq2ot1YUhSaZ9VdonekgYr5VdmDMBw==
+=dG1m
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/scripts/t/Dpkg_OpenPGP/dpkg-test-sec.asc b/scripts/t/Dpkg_OpenPGP/dpkg-test-sec.asc
new file mode 100644
index 0000000..75fc7b3
--- /dev/null
+++ b/scripts/t/Dpkg_OpenPGP/dpkg-test-sec.asc
@@ -0,0 +1,28 @@
+-----BEGIN PGP PRIVATE KEY BLOCK-----
+Comment: 3488 FC97 5968 CEFB A7B3 7554 D051 B9A1 A78B 7970
+Comment: Dpkg Test Key <dpkg-test@example.org>
+
+xVgEYtiJpRYJKwYBBAHaRw8BAQdAPc9bt2qxxLSlbrcdtR70gPFeqCusNUh/LjQV
+9es9JPYAAQCuHs3w2a7cIhaFk82fIsXfpIGMJUHh2tJj/6TzUTIYehIhwsALBB8W
+CgB9BYJi2ImlAwsJBwkQ0FG5oaeLeXBHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu
+c2VxdW9pYS1wZ3Aub3Jn2q1Capa94nrOUIW1H5OPwhifMowOQMVNhZ4kr69TBFgD
+FQoIApsBAh4BFiEENIj8l1lozvuns3VU0FG5oaeLeXAAAHisAQC4UIRbtdbbgaiZ
+Hqm7Afsw8N06iDVw3Tp2bM+M0Ez/HAEAlwduLcAg0sIC+QKVwywysWnJvskyRtcQ
+K+X3sv1jOg3NJURwa2cgVGVzdCBLZXkgPGRwa2ctdGVzdEBleGFtcGxlLm9yZz7C
+wA4EExYKAIAFgmLYiaUDCwkHCRDQUbmhp4t5cEcUAAAAAAAeACBzYWx0QG5vdGF0
+aW9ucy5zZXF1b2lhLXBncC5vcmeZRG3I7dkUEo8rOjevsuFQzTlcNFuVTk4yShFg
+0B2Q5gMVCggCmQECmwECHgEWIQQ0iPyXWWjO+6ezdVTQUbmhp4t5cAAAP98A+gOO
+pnLh3MtugTss/HKNnJed/rUHmdRdqoYNpHKHywN1AQC+wVlj3GaI7Okm4gfA3Owa
+2JCeI5Nd42KWF8GuwpxMD8dYBGLYiaUWCSsGAQQB2kcPAQEHQBAvCO3lXVj3JF0h
+CXcWLRklEzn0lBbT99XWWUoh2sIrAAD+KhjwmbT+2rv06tPgJnBEP4x7CEMJdTlk
+t7Z/M0dlVhQQXMLAvwQYFgoBMQWCYtiJpQkQ0FG5oaeLeXBHFAAAAAAAHgAgc2Fs
+dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnfC2DUwNVwoI+ukM7myNZUKOgWNhf
+f/7X4qikGI7xQ+0CmwK+oAQZFgoAbwWCYtiJpQkQXwh5Uo50Sh1HFAAAAAAAHgAg
+c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnm2y6Fs1KQuT85pyhX3J+D552
+IO9DnWR/03pR7XLST6cWIQSV3lEBtNqpIc52SpRfCHlSjnRKHQAAYyUA/iMVQBOl
+icCMXyueH/c6Htk1fNFeaO7y+gmeQ+H0L48YAP9oYrEbLXCkBBP6omc0whchWr/8
+To3D4GD6IL35LL4rChYhBDSI/JdZaM77p7N1VNBRuaGni3lwAADJDAD9EU8kI7XI
+ZXSJ/HF+u6P2rGv00PfOjVhsgMlR0lL5DJcBAL9KBKzfEEJVxeMirai3VhSFJpn1
+V2id6SBivlV2YMwH
+=D6tH
+-----END PGP PRIVATE KEY BLOCK-----
diff --git a/scripts/t/Dpkg_OpenPGP/sign-file b/scripts/t/Dpkg_OpenPGP/sign-file
new file mode 100644
index 0000000..7fb0a1c
--- /dev/null
+++ b/scripts/t/Dpkg_OpenPGP/sign-file
@@ -0,0 +1,5 @@
+This is a data file that will be signed
+as part of the dpkg OpenPGP test suite.
+
+It contains «UTF-8» characters so that
+we can check binary and ASCII signatures ☺.
diff --git a/scripts/t/Dpkg_OpenPGP/sign-file-inline.asc b/scripts/t/Dpkg_OpenPGP/sign-file-inline.asc
new file mode 100644
index 0000000..38059f8
--- /dev/null
+++ b/scripts/t/Dpkg_OpenPGP/sign-file-inline.asc
@@ -0,0 +1,16 @@
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA512
+
+This is a data file that will be signed
+as part of the dpkg OpenPGP test suite.
+
+It contains «UTF-8» characters so that
+we can check binary and ASCII signatures ☺.
+-----BEGIN PGP SIGNATURE-----
+
+wr0EARYKAG8FgmNn/JoJEF8IeVKOdEodRxQAAAAAAB4AIHNhbHRAbm90YXRpb25z
+LnNlcXVvaWEtcGdwLm9yZ6ner4BBATzhFswk2JmdwxDwRwEY7Ez64dxHFNuT0rIn
+FiEEld5RAbTaqSHOdkqUXwh5Uo50Sh0AAH26AQCojIenPOWX7+GUk+lKeo+7hnpx
+nozY9z/+4Pe1KamB4AEAsL9fpRgmecLcVhHBteK8t8/laLkzdY4nji+1BmeRrgQ=
+=4UM2
+-----END PGP SIGNATURE-----
diff --git a/scripts/t/Dpkg_OpenPGP/sign-file-inline.sig b/scripts/t/Dpkg_OpenPGP/sign-file-inline.sig
new file mode 100644
index 0000000..cb07a8e
--- /dev/null
+++ b/scripts/t/Dpkg_OpenPGP/sign-file-inline.sig
Binary files differ
diff --git a/scripts/t/Dpkg_OpenPGP/sign-file.asc b/scripts/t/Dpkg_OpenPGP/sign-file.asc
new file mode 100644
index 0000000..5b96d6f
--- /dev/null
+++ b/scripts/t/Dpkg_OpenPGP/sign-file.asc
@@ -0,0 +1,8 @@
+-----BEGIN PGP SIGNATURE-----
+
+wr0EABYKAG8FgmNn+7oJEF8IeVKOdEodRxQAAAAAAB4AIHNhbHRAbm90YXRpb25z
+LnNlcXVvaWEtcGdwLm9yZ6I+NlLnxa3+q9VIr0tkR75ehn2pOJ0a5T7TbEKamHeH
+FiEEld5RAbTaqSHOdkqUXwh5Uo50Sh0AADADAP0edQHN/mcxubIU8Z8RTbdBe0uu
+AyzTI/4rIjImBPRoxgEAoWB+JczVmgeVRdkm8BW77PqFailPUf0mnokZZszz+Qc=
+=qfwq
+-----END PGP SIGNATURE-----
diff --git a/scripts/t/Dpkg_OpenPGP/sign-file.sig b/scripts/t/Dpkg_OpenPGP/sign-file.sig
new file mode 100644
index 0000000..125424c
--- /dev/null
+++ b/scripts/t/Dpkg_OpenPGP/sign-file.sig
Binary files differ
diff --git a/scripts/t/Dpkg_OpenPGP_KeyHandle.t b/scripts/t/Dpkg_OpenPGP_KeyHandle.t
new file mode 100644
index 0000000..35c8b43
--- /dev/null
+++ b/scripts/t/Dpkg_OpenPGP_KeyHandle.t
@@ -0,0 +1,92 @@
+#!/usr/bin/perl
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use Test::More tests => 21;
+
+BEGIN {
+ use_ok('Dpkg::OpenPGP::KeyHandle');
+}
+
+my @ref_keys = (
+ {
+ type => 'auto',
+ handle => '0x12345678',
+ exp_type => 'keyid',
+ exp_handle => '12345678',
+ }, {
+ type => 'auto',
+ handle => '0x1234567890abcdef',
+ exp_type => 'keyid',
+ exp_handle => '1234567890abcdef',
+ }, {
+ type => 'auto',
+ handle => '0x1234567890abcdef1234567890abcdef',
+ exp_type => 'keyid',
+ exp_handle => '1234567890abcdef1234567890abcdef',
+ }, {
+ type => 'auto',
+ handle => 'Alice Auster',
+ exp_type => 'userid',
+ exp_handle => 'Alice Auster',
+ }, {
+ type => 'auto',
+ handle => 'Alice Auster <alice@example.org>',
+ exp_type => 'userid',
+ exp_handle => 'Alice Auster <alice@example.org>',
+ }, {
+ type => 'keyid',
+ handle => '0x12345678',
+ exp_type => 'keyid',
+ exp_handle => '12345678',
+ }, {
+ type => 'keyid',
+ handle => '0x1234567890abcdef',
+ exp_type => 'keyid',
+ exp_handle => '1234567890abcdef',
+ }, {
+ type => 'keyid',
+ handle => '0x1234567890abcdef1234567890abcdef',
+ exp_type => 'keyid',
+ exp_handle => '1234567890abcdef1234567890abcdef',
+ }, {
+ type => 'userid',
+ handle => 'Alice Auster',
+ exp_type => 'userid',
+ exp_handle => 'Alice Auster',
+ }, {
+ type => 'userid',
+ handle => 'Alice Auster <alice@example.org>',
+ exp_type => 'userid',
+ exp_handle => 'Alice Auster <alice@example.org>',
+ }
+);
+
+foreach my $ref_key (@ref_keys) {
+ my $key = Dpkg::OpenPGP::KeyHandle->new(
+ type => $ref_key->{type},
+ handle => $ref_key->{handle},
+ );
+ is($key->type, $ref_key->{exp_type},
+ 'key type ' . $key->type . " sanitized as $ref_key->{exp_type}");
+ is($key->handle, $ref_key->{exp_handle},
+ 'key handle ' . $key->handle . " sanitized as $ref_key->{exp_handle}");
+}
+
+# TODO: Add actual test cases.
+
+1;
diff --git a/scripts/t/Dpkg_Package.t b/scripts/t/Dpkg_Package.t
new file mode 100644
index 0000000..b0e8253
--- /dev/null
+++ b/scripts/t/Dpkg_Package.t
@@ -0,0 +1,31 @@
+#!/usr/bin/perl
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use Test::More tests => 7;
+
+use_ok('Dpkg::Package');
+
+ok(pkg_name_is_illegal(undef), 'package name is undef');
+ok(pkg_name_is_illegal(''), 'package name is empty');
+ok(pkg_name_is_illegal('%_&'), 'package name has invalid chars');
+ok(pkg_name_is_illegal('ABC'), 'package name has uppercase chars');
+ok(pkg_name_is_illegal('-abc'), 'package name has a dash');
+
+is(pkg_name_is_illegal('pkg+name-1.0'), undef, 'package name is valid');
+
+1;
diff --git a/scripts/t/Dpkg_Path.t b/scripts/t/Dpkg_Path.t
new file mode 100644
index 0000000..0b0d6bd
--- /dev/null
+++ b/scripts/t/Dpkg_Path.t
@@ -0,0 +1,237 @@
+#!/usr/bin/perl
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use Test::More tests => 34;
+use Test::Dpkg qw(:paths);
+
+use Cwd qw(realpath);
+use File::Path qw(make_path rmtree);
+use File::Spec::Functions qw(abs2rel);
+
+use Dpkg::File;
+
+use_ok('Dpkg::Path', 'canonpath', 'resolve_symlink',
+ 'check_files_are_the_same',
+ 'check_directory_traversal',
+ 'get_pkg_root_dir',
+ 'guess_pkg_root_dir', 'relative_to_pkg_root');
+
+my $tmpdir = test_get_temp_path();
+
+make_path("$tmpdir/a/b/c");
+make_path("$tmpdir/a/DEBIAN");
+make_path("$tmpdir/debian/a/b/c");
+symlink 'a/b/c', "$tmpdir/cbis";
+symlink '/this/does/not/exist', "$tmpdir/tmp";
+symlink '.', "$tmpdir/here";
+
+is(canonpath("$tmpdir/./a///b/c"), "$tmpdir/a/b/c", 'canonpath basic test');
+is(canonpath("$tmpdir/a/b/../../a/b/c"), "$tmpdir/a/b/c", 'canonpath and ..');
+is(canonpath("$tmpdir/a/b/c/../../"), "$tmpdir/a", 'canonpath .. at end');
+is(canonpath("$tmpdir/cbis/../"), "$tmpdir/cbis/..", 'canonpath .. after symlink');
+
+is(resolve_symlink("$tmpdir/here/cbis"), "$tmpdir/here/a/b/c", 'resolve_symlink');
+is(resolve_symlink("$tmpdir/tmp"), '/this/does/not/exist', 'resolve_symlink absolute');
+is(resolve_symlink("$tmpdir/here"), $tmpdir, 'resolve_symlink .');
+
+ok(!check_files_are_the_same("$tmpdir/here", $tmpdir), 'Symlink is not the same!');
+ok(check_files_are_the_same("$tmpdir/here/a", "$tmpdir/a"), 'Same directory');
+
+sub gen_hier_travbase {
+ my $basedir = shift;
+
+ make_path("$basedir/subdir");
+ file_touch("$basedir/file");
+ file_touch("$basedir/subdir/subfile");
+ symlink 'file', "$basedir/symlink-file";
+ symlink 'subdir/subfile', "$basedir/symlink-subfile";
+}
+
+my $travbase = "$tmpdir/travbase";
+my $travbase_out = "$tmpdir/travbase-out";
+my %travtype = (
+ none => {
+ fail => 0,
+ gen => sub { },
+ },
+ same => {
+ fail => 0,
+ chroot => "$tmpdir/travbase-same",
+ gen => sub {
+ my $basedir = shift;
+ symlink '../..', "$basedir/subdir/root";
+ },
+ },
+ dev_null => {
+ fail => 0,
+ gen => sub {
+ my $basedir = shift;
+ symlink '/dev/null', "$basedir/dev-null";
+ },
+ },
+ dots => {
+ fail => 0,
+ gen => sub {
+ my $basedir = shift;
+ symlink 'aa..bb..cc', "$basedir/dots";
+ },
+ },
+ rel => {
+ fail => 1,
+ gen => sub {
+ my $basedir = shift;
+ symlink '../../..', "$basedir/rel";
+ },
+ },
+ abs => {
+ fail => 1,
+ gen => sub {
+ my $basedir = shift;
+ symlink '/etc', "$basedir/abs";
+ },
+ },
+ loop => {
+ fail => 1,
+ gen => sub {
+ my $basedir = shift;
+ symlink 'self', "$basedir/self";
+ },
+ },
+ enoent_rel => {
+ fail => 0,
+ gen => sub {
+ my $basedir = shift;
+ symlink 'not-existent', "$basedir/enoent-rel";
+ },
+ },
+ enoent_abs => {
+ fail => 1,
+ gen => sub {
+ my $basedir = shift;
+ symlink '/not-existent', "$basedir/enoent-abs";
+ },
+ },
+ enoent_indirect_rel => {
+ fail => 0,
+ gen => sub {
+ my $basedir = shift;
+ symlink 'not-existent', "$basedir/enoent-rel";
+ symlink 'enoent-rel', "$basedir/enoent-indirect-rel";
+ },
+ },
+ enoent_indirect_abs => {
+ fail => 1,
+ gen => sub {
+ my $basedir = shift;
+ symlink '/not-existent', "$basedir/enoent-abs";
+ symlink realpath("$basedir/enoent-abs"), "$basedir/enoent-indirect-abs";
+ },
+ },
+ base_in_none => {
+ fail => 0,
+ gen => sub {
+ my $basedir = shift;
+ rename $basedir, "$basedir-real";
+ symlink 'base_in_none-real', $basedir;
+ },
+ },
+ base_in_rel => {
+ fail => 1,
+ gen => sub {
+ my $basedir = shift;
+ rename $basedir, "$basedir-real";
+ symlink 'base_in_rel-real', $basedir;
+ symlink '../../..', "$basedir/rel";
+ },
+ },
+ base_in_abs => {
+ fail => 1,
+ gen => sub {
+ my $basedir = shift;
+ rename $basedir, "$basedir-real";
+ symlink 'base_in_abs-real', $basedir;
+ symlink '/etc', "$basedir/abs";
+ },
+ },
+ base_out_empty => {
+ fail => 1,
+ root => $travbase_out,
+ gen => sub {
+ my $basedir = shift;
+ rmtree($basedir);
+ make_path($basedir);
+ },
+ },
+ base_out_none => {
+ fail => 1,
+ root => $travbase_out,
+ gen => sub { },
+ },
+ base_out_rel => {
+ fail => 1,
+ root => $travbase_out,
+ gen => sub {
+ my $basedir = shift;
+ symlink '../../..', "$basedir/rel";
+ },
+ },
+ base_out_abs => {
+ fail => 1,
+ root => $travbase_out,
+ gen => sub {
+ my $basedir = shift;
+ symlink '/etc', "$basedir/abs";
+ },
+ },
+);
+
+foreach my $travtype (sort keys %travtype) {
+ my $trav = $travtype{$travtype};
+ my $rootdir = $trav->{chroot} // $trav->{root} // $travbase;
+ my $hierdir = "$rootdir/$travtype";
+ my $travdir = "$travbase/$travtype";
+
+ gen_hier_travbase($hierdir);
+ symlink abs2rel($hierdir, $travbase), $travdir if exists $trav->{root};
+ $trav->{gen}->($hierdir);
+
+ my $catch;
+ eval {
+ check_directory_traversal($travbase, $travdir);
+ 1;
+ } or do {
+ $catch = $@;
+ };
+ if ($trav->{fail}) {
+ ok($catch, "directory traversal type $travtype detected");
+ note("traversal reason: $catch") if $catch;
+ } else {
+ ok(! $catch, "no directory traversal type $travtype");
+ diag("error from check_directory_traversal => $catch") if $catch;
+ }
+}
+
+is(get_pkg_root_dir("$tmpdir/a/b/c"), "$tmpdir/a", 'get_pkg_root_dir');
+is(guess_pkg_root_dir("$tmpdir/a/b/c"), "$tmpdir/a", 'guess_pkg_root_dir');
+is(relative_to_pkg_root("$tmpdir/a/b/c"), 'b/c', 'relative_to_pkg_root');
+
+chdir($tmpdir);
+
+is(get_pkg_root_dir('debian/a/b/c'), undef, 'get_pkg_root_dir undef');
+is(relative_to_pkg_root('debian/a/b/c'), undef, 'relative_to_pkg_root undef');
+is(guess_pkg_root_dir('debian/a/b/c'), 'debian/a', 'guess_pkg_root_dir fallback');
diff --git a/scripts/t/Dpkg_Shlibs.t b/scripts/t/Dpkg_Shlibs.t
new file mode 100644
index 0000000..3243674
--- /dev/null
+++ b/scripts/t/Dpkg_Shlibs.t
@@ -0,0 +1,786 @@
+#!/usr/bin/perl
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use Test::More;
+use Test::Dpkg qw(:needs :paths);
+
+use Cwd;
+use IPC::Cmd qw(can_run);
+
+plan tests => 150;
+
+$ENV{DEB_BUILD_ARCH} = 'amd64';
+$ENV{DEB_HOST_ARCH} = 'amd64';
+
+use_ok('Dpkg::Shlibs');
+
+my $tmp;
+my @tmp;
+my %tmp;
+
+my $datadir = test_get_data_path();
+
+my @librarypaths;
+
+{
+ # XXX: Keep as long as we support the deprecated LD_LIBRARY_PATH.
+ local $ENV{LD_LIBRARY_PATH} = '/test-env';
+
+ Dpkg::Shlibs::add_library_dir('/test-a');
+ @librarypaths = Dpkg::Shlibs::get_library_paths();
+ is($librarypaths[0], '/test-a', 'add_library_dir() does not get lost');
+
+ Dpkg::Shlibs::add_library_dir('/test-b');
+ @librarypaths = Dpkg::Shlibs::get_library_paths();
+ is_deeply([ @librarypaths[0, 1] ] , [ '/test-a', '/test-b' ],
+ 'add_library_dir() prepends');
+}
+
+Dpkg::Shlibs::blank_library_paths();
+
+# We want relative paths inside the ld.so.conf fragments to work, and $srcdir
+# is usually a relative path, so let's temporarily switch directory.
+# XXX: An alternative would be to make parse_ldso_conf relative path aware.
+my $cwd = getcwd();
+test_needs_srcdir_switch();
+Dpkg::Shlibs::parse_ldso_conf('t/Dpkg_Shlibs/ld.so.conf');
+chdir($cwd);
+
+@librarypaths = Dpkg::Shlibs::get_library_paths();
+is_deeply(\@librarypaths,
+ [ qw(/nonexistent32 /nonexistent/lib64
+ /usr/local/lib /nonexistent/lib128) ], 'parsed library paths');
+
+use_ok('Dpkg::Shlibs::Objdump');
+
+my $obj = Dpkg::Shlibs::Objdump::Object->new;
+
+open my $objdump, '<', "$datadir/objdump.dbd-pg"
+ or die "$datadir/objdump.dbd-pg: $!";
+$obj->parse_objdump_output($objdump);
+close $objdump;
+ok(!$obj->is_public_library(), 'Pg.so is not a public library');
+ok(!$obj->is_executable(), 'Pg.so is not an executable');
+
+open $objdump, '<', "$datadir/objdump.ls"
+ or die "$datadir/objdump.ls: $!";
+$obj->reset();
+$obj->parse_objdump_output($objdump);
+close $objdump;
+ok(!$obj->is_public_library(), 'ls is not a public library');
+ok($obj->is_executable(), 'ls is an executable');
+
+my $sym = $obj->get_symbol('optarg@GLIBC_2.0');
+ok($sym, 'optarg@GLIBC_2.0 exists');
+ok(!$sym->{defined}, 'R_*_COPY relocations are taken into account');
+
+open $objdump, '<', "$datadir/objdump.space"
+ or die "$datadir/objdump.space: $!";
+$obj->reset();
+$obj->parse_objdump_output($objdump);
+close $objdump;
+
+# Non-regression test for #506139
+$sym = $obj->get_symbol('singlespace');
+ok($sym, 'version less symbol separated by a single space are correctly parsed');
+
+open $objdump, '<', "$datadir/objdump.libc6-2.6"
+ or die "$datadir/objdump.libc6-2.6: $!";
+$obj->reset();
+$obj->parse_objdump_output($objdump);
+close $objdump;
+
+ok($obj->is_public_library(), 'libc6 is a public library');
+ok($obj->is_executable(), 'libc6 is an executable');
+
+is($obj->{SONAME}, 'libc.so.6', 'SONAME');
+is($obj->{HASH}, '0x13d99c', 'HASH');
+is($obj->{GNU_HASH}, '0x194', 'GNU_HASH');
+is($obj->{format}, 'elf32-i386', 'format');
+is_deeply($obj->{flags}, { DYNAMIC => 1, HAS_SYMS => 1, D_PAGED => 1 }, 'flags');
+is_deeply($obj->{NEEDED}, [ 'ld-linux.so.2' ], 'NEEDED');
+is_deeply([ $obj->get_needed_libraries ], [ 'ld-linux.so.2' ], 'NEEDED');
+
+$sym = $obj->get_symbol('_sys_nerr@GLIBC_2.3');
+is_deeply( $sym, { name => '_sys_nerr', version => 'GLIBC_2.3',
+ soname => 'libc.so.6', objid => 'libc.so.6',
+ section => '.rodata', dynamic => 1,
+ debug => '', type => 'O', weak => '',
+ local => '', global => 1, visibility => '',
+ hidden => 1, defined => 1 }, 'Symbol' );
+$sym = $obj->get_symbol('_IO_stdin_used');
+is_deeply( $sym, { name => '_IO_stdin_used', version => '',
+ soname => 'libc.so.6', objid => 'libc.so.6',
+ section => '*UND*', dynamic => 1,
+ debug => '', type => ' ', weak => 1,
+ local => '', global => '', visibility => '',
+ hidden => '', defined => '' }, 'Symbol 2' );
+
+my @syms = $obj->get_exported_dynamic_symbols;
+is( scalar @syms, 2231, 'defined && dynamic' );
+@syms = $obj->get_undefined_dynamic_symbols;
+is( scalar @syms, 9, 'undefined && dynamic' );
+
+
+my $obj_old = Dpkg::Shlibs::Objdump::Object->new;
+
+open $objdump, '<', "$datadir/objdump.libc6-2.3"
+ or die "$datadir/objdump.libc6-2.3: $!";
+$obj_old->parse_objdump_output($objdump);
+close $objdump;
+
+
+use_ok('Dpkg::Shlibs::SymbolFile');
+use_ok('Dpkg::Shlibs::Symbol');
+
+my $sym_file = Dpkg::Shlibs::SymbolFile->new(file => "$datadir/symbol_file.tmp");
+my $sym_file_dup = Dpkg::Shlibs::SymbolFile->new(file => "$datadir/symbol_file.tmp");
+my $sym_file_old = Dpkg::Shlibs::SymbolFile->new(file => "$datadir/symbol_file.tmp");
+
+$sym_file->merge_symbols($obj_old, '2.3.6.ds1-13');
+$sym_file_old->merge_symbols($obj_old, '2.3.6.ds1-13');
+
+ok( $sym_file->has_object('libc.so.6'), 'SONAME in sym file' );
+
+$sym_file->merge_symbols($obj, '2.6-1');
+
+ok( $sym_file->get_new_symbols($sym_file_old), 'has new symbols' );
+ok( $sym_file_old->get_lost_symbols($sym_file), 'has lost symbols' );
+
+is( $sym_file_old->lookup_symbol('__bss_start@Base', ['libc.so.6']),
+ undef, 'internal symbols are ignored' );
+
+%tmp = $sym_file->lookup_symbol('_errno@GLIBC_2.0', ['libc.so.6'], 1);
+isa_ok($tmp{symbol}, 'Dpkg::Shlibs::Symbol');
+is_deeply(\%tmp, { symbol => Dpkg::Shlibs::Symbol->new(symbol => '_errno@GLIBC_2.0',
+ minver => '2.3.6.ds1-13', dep_id => 0,
+ deprecated => '2.6-1'), soname => 'libc.so.6' },
+ 'deprecated symbol');
+
+# Wildcard test
+my $pat = $sym_file_old->create_symbol('*@GLIBC_PRIVATE 2.3.6.wildcard');
+$sym_file_old->add_symbol($pat, 'libc.so.6');
+$sym_file_old->merge_symbols($obj, '2.6-1');
+$sym = $sym_file_old->lookup_symbol('__nss_services_lookup@GLIBC_PRIVATE', 'libc.so.6');
+is_deeply($sym, Dpkg::Shlibs::Symbol->new(symbol => '__nss_services_lookup@GLIBC_PRIVATE',
+ minver => '2.3.6.wildcard', dep_id => 0, deprecated => 0,
+ tags => { symver => undef, optional => undef },
+ tagorder => [ 'symver', 'optional' ],
+ matching_pattern => $pat ), 'wildcarded symbol');
+
+# Save -> Load test
+use File::Temp;
+use File::Basename qw(basename);
+
+sub save_load_test {
+ my ($symfile, $comment, @opts) = @_;
+
+ my $save_file = File::Temp->new();
+ $symfile->save($save_file->filename, @opts);
+ my $dup = Dpkg::Shlibs::SymbolFile->new(file => $save_file->filename);
+ # Force sync of non-stored attributes
+ $dup->{file} = $symfile->{file};
+ $dup->{arch} = $symfile->{arch};
+
+ is_deeply($dup, $symfile, $comment);
+ if (-f $symfile->{file}) {
+ is(system('diff', '-u', $symfile->{file}, $save_file->filename), 0,
+ basename($symfile->{file}) . ' dumped identical');
+ }
+}
+
+save_load_test( $sym_file, 'save -> load' );
+
+
+# Test ignoring internal symbols
+open $objdump, '<', "$datadir/objdump.internal"
+ or die "objdump.internal: $!";
+$obj->reset();
+$obj->parse_objdump_output($objdump);
+close $objdump;
+
+# Do not ignore any internal symbols
+$sym_file = Dpkg::Shlibs::SymbolFile->new(file => "$datadir/symbols.internal-filter");
+$sym_file->merge_symbols($obj, '100.MISSING');
+
+$sym = $sym_file->lookup_symbol('symbol@Base', ['libinternal.so.0']);
+is_deeply($sym, Dpkg::Shlibs::Symbol->new(symbol => 'symbol@Base',
+ minver => '1.0', dep_id => 0, deprecated => 0),
+ 'symbol unaffected w/o including internal symbols');
+
+$sym = $sym_file->lookup_symbol('.gomp_critical_user_foo@Base', ['libinternal.so.0']);
+is($sym, undef, 'gomp symbol omitted while filtering internal symbols');
+
+$sym = $sym_file->lookup_symbol('__aeabi_lcmp@GCC_3.0', ['libinternal.so.0']);
+is($sym, undef, 'known aeabi symbol omitted while filtering internal symbols');
+
+$sym = $sym_file->lookup_symbol('__aeabi_unknown@GCC_4.0', ['libinternal.so.0']);
+is($sym, undef, 'unknown aeabi symbol omitted while filtering internal symbols');
+
+# Include internal symbols using the allow-internal tag.
+$sym_file = Dpkg::Shlibs::SymbolFile->new(file => "$datadir/symbols.internal-allow");
+$sym_file->merge_symbols($obj, '100.MISSING');
+
+$sym = $sym_file->lookup_symbol('symbol@Base', ['libinternal.so.0']);
+is_deeply($sym, Dpkg::Shlibs::Symbol->new(symbol => 'symbol@Base',
+ minver => '1.0', dep_id => 0, deprecated => 0),
+ 'symbol unaffected while including internal symbols via symbol tag');
+
+$sym = $sym_file->lookup_symbol('.gomp_critical_user_foo@Base', ['libinternal.so.0']);
+is_deeply($sym, Dpkg::Shlibs::Symbol->new(symbol => '.gomp_critical_user_foo@Base',
+ minver => '2.0', dep_id => 0, deprecated => 0,
+ tags => { 'allow-internal' => undef },
+ tagorder => [ 'allow-internal' ]),
+ 'internal gomp symbol included via symbol tag');
+
+$sym = $sym_file->lookup_symbol('__aeabi_lcmp@GCC_3.0', ['libinternal.so.0']);
+is_deeply($sym, Dpkg::Shlibs::Symbol->new(symbol => '__aeabi_lcmp@GCC_3.0',
+ minver => '3.0', dep_id => 0, deprecated => 0,
+ tags => { 'allow-internal' => undef },
+ tagorder => [ 'allow-internal' ]),
+ 'internal known aeabi symbol included via symbol tag');
+
+$sym = $sym_file->lookup_symbol('__aeabi_unknown@GCC_4.0', ['libinternal.so.0']);
+is_deeply($sym, Dpkg::Shlibs::Symbol->new(symbol => '__aeabi_unknown@GCC_4.0',
+ minver => '4.0', dep_id => 0, deprecated => 0,
+ tags => { 'allow-internal' => undef },
+ tagorder => [ 'allow-internal' ]),
+ 'internal unknown aeabi symbol omitted via symbol tag');
+
+# Include internal symbols using the Allow-Internal-Symbol-Groups field
+$sym_file = Dpkg::Shlibs::SymbolFile->new(file => "$datadir/symbols.internal-allow-groups");
+$sym_file->merge_symbols($obj, '100.MISSING');
+
+$sym = $sym_file->lookup_symbol('symbol@Base', ['libinternal.so.0']);
+is_deeply($sym, Dpkg::Shlibs::Symbol->new(symbol => 'symbol@Base',
+ minver => '1.0', dep_id => 0, deprecated => 0),
+ 'symbol unaffected w/o including internal symbols');
+
+$sym = $sym_file->lookup_symbol('.gomp_critical_user_foo@Base', ['libinternal.so.0']);
+is_deeply($sym, Dpkg::Shlibs::Symbol->new(symbol => '.gomp_critical_user_foo@Base',
+ minver => '2.0', dep_id => 0, deprecated => 0),
+ 'internal gomp symbol included via library field');
+
+$sym = $sym_file->lookup_symbol('__aeabi_lcmp@GCC_3.0', ['libinternal.so.0']);
+is_deeply($sym, Dpkg::Shlibs::Symbol->new(symbol => '__aeabi_lcmp@GCC_3.0',
+ minver => '3.0', dep_id => 0, deprecated => 0),
+ 'internal known aeabi symbol included via library field');
+
+$sym = $sym_file->lookup_symbol('__aeabi_unknown@GCC_4.0', ['libinternal.so.0']);
+is_deeply($sym, Dpkg::Shlibs::Symbol->new(symbol => '__aeabi_unknown@GCC_4.0',
+ minver => '4.0', dep_id => 0, deprecated => 0),
+ 'internal unknown aeabi symbol included via library field');
+
+
+# Test include mechanism of SymbolFile
+$sym_file = Dpkg::Shlibs::SymbolFile->new(file => "$datadir/symbols.include-1");
+
+$sym = $sym_file->lookup_symbol('symbol_before@Base', ['libfake.so.1']);
+is_deeply($sym, Dpkg::Shlibs::Symbol->new(symbol => 'symbol_before@Base',
+ minver => '0.9', dep_id => 0, deprecated => 0),
+ 'symbol before include not lost');
+
+$sym = $sym_file->lookup_symbol('symbol_after@Base', ['libfake.so.1']);
+is_deeply($sym, Dpkg::Shlibs::Symbol->new(symbol => 'symbol_after@Base',
+ minver => '1.1', dep_id => 0, deprecated => 0),
+ 'symbol after include not lost');
+
+$sym = $sym_file->lookup_symbol('symbol1_fake1@Base', ['libfake.so.1']);
+is_deeply($sym, Dpkg::Shlibs::Symbol->new(symbol => 'symbol1_fake1@Base',
+ minver => '1.0', dep_id => 0, deprecated => 0),
+ 'overrides order with #include');
+
+$sym = $sym_file->lookup_symbol('symbol3_fake1@Base', ['libfake.so.1']);
+is_deeply($sym, Dpkg::Shlibs::Symbol->new(symbol => 'symbol3_fake1@Base',
+ minver => '0', dep_id => 0, deprecated => 0),
+ 'overrides order with #include');
+
+is($sym_file->get_smallest_version('libfake.so.1'), '0',
+ 'get_smallest_version with null version');
+
+$sym = $sym_file->lookup_symbol('symbol_in_libdivert@Base', ['libdivert.so.1']);
+is_deeply($sym, Dpkg::Shlibs::Symbol->new(symbol => 'symbol_in_libdivert@Base',
+ minver => '1.0~beta1', dep_id => 0, deprecated => 0),
+ '#include can change current object');
+
+$sym_file = Dpkg::Shlibs::SymbolFile->new(file => "$datadir/symbols.include-2");
+
+$sym = $sym_file->lookup_symbol('symbol1_fake2@Base', ['libfake.so.1']);
+is_deeply($sym, Dpkg::Shlibs::Symbol->new(symbol => 'symbol1_fake2@Base',
+ minver => '1.0', dep_id => 1, deprecated => 0),
+ 'overrides order with circular #include');
+
+is($sym_file->get_smallest_version('libfake.so.1'), '1.0',
+ 'get_smallest_version');
+
+my $io_data;
+my $io;
+
+# Check dump output
+open $io, '>', \$io_data or die "cannot open io string\n";
+$sym_file->output($io, package => 'libfake1');
+is($io_data,
+'libfake.so.1 libfake1 #MINVER#
+| libvirtualfake
+* Build-Depends-Package: libfake-dev
+ symbol1_fake2@Base 1.0 1
+ symbol2_fake2@Base 1.0
+ symbol3_fake2@Base 1.1
+', "Dump of $datadir/symbols.include-2");
+
+
+# Check parsing of objdump output on ia64 (local symbols
+# without versions and with visibility attribute)
+$obj = Dpkg::Shlibs::Objdump::Object->new;
+
+open $objdump, '<', "$datadir/objdump.glib-ia64"
+ or die "$datadir/objdump.glib-ia64: $!";
+$obj->parse_objdump_output($objdump);
+close $objdump;
+ok($obj->is_public_library(), 'glib-ia64 is a public library');
+ok(!$obj->is_executable(), 'glib-ia64 is not an executable');
+
+$sym = $obj->get_symbol('IA__g_free');
+is_deeply( $sym, { name => 'IA__g_free', version => '',
+ soname => 'libglib-2.0.so.0', objid => 'libglib-2.0.so.0',
+ section => '.text', dynamic => 1,
+ debug => '', type => 'F', weak => '',
+ local => 1, global => '', visibility => 'hidden',
+ hidden => '', defined => 1 },
+ 'symbol with visibility without version' );
+
+# Check parsing of objdump output when symbol names contain spaces
+$obj = Dpkg::Shlibs::Objdump::Object->new;
+
+open $objdump, '<', "$datadir/objdump.spacesyms"
+ or die "$datadir/objdump.spacesyms: $!";
+$obj->parse_objdump_output($objdump);
+close $objdump;
+
+sub check_spacesym {
+ my ($name, $version, $visibility) = @_;
+
+ $visibility //= '';
+ $sym = $obj->get_symbol($name . "@" . $version);
+ is_deeply($sym, { name => $name, version => $version,
+ soname => 'libspacesyms.so.1',
+ objid => 'libspacesyms.so.1',
+ section => '.text', dynamic => 1,
+ debug => '', type => 'F', weak => '',
+ local => '', global => 1, visibility => $visibility,
+ hidden => '', defined => 1 }, $name);
+ ok(defined $obj->{dynrelocs}{$name . "@@" . $version},
+ "dynreloc found for $name");
+}
+
+check_spacesym('symdefaultvernospacedefault', 'Base');
+check_spacesym('symdefaultvernospaceprotected', 'Base', 'protected');
+check_spacesym('symlongvernospacedefault', 'VERY_LONG_VERSION_1');
+check_spacesym('symlongvernospaceprotected', 'VERY_LONG_VERSION_1', 'protected');
+check_spacesym('symshortvernospacedefault', 'V1');
+check_spacesym('symshortvernospaceprotected', 'V1', 'protected');
+check_spacesym('symdefaultverSPA CEdefault', 'Base');
+check_spacesym('symdefaultverSPA CEprotected', 'Base', 'protected');
+check_spacesym('symlongverSPA CEdefault', 'VERY_LONG_VERSION_1');
+check_spacesym('symlongverSPA CEprotected', 'VERY_LONG_VERSION_1', 'protected');
+check_spacesym('symshortverSPA CEdefault', 'V1');
+check_spacesym('symshortverSPA CEprotected', 'V1', 'protected');
+
+####### Test symbol tagging support ######
+
+# Parsing/dumping
+# Template mode
+$sym_file = Dpkg::Shlibs::SymbolFile->new(file => "$datadir/basictags.symbols", arch => 'amd64');
+save_load_test($sym_file, 'template save -> load', template_mode => 1);
+
+# Dumping in non-template mode (amd64) (test for arch tags)
+open $io, '>', \$io_data or die "cannot open io string\n";
+$sym_file->output($io);
+is($io_data,
+'libbasictags.so.1 libbasictags1 #MINVER#
+| libbasictags1 (>= 1.1)
+ symbol11_optional@Base 1.1 1
+ symbol21_amd64@Base 2.1
+ symbol25_64@Base 2.5
+ symbol26_little@Base 2.6
+ symbol31_randomtag@Base 3.1
+ symbol51_untagged@Base 5.1
+', 'template vs. non-template on amd64');
+
+# Dumping in non-template mode (mips) (test for arch tags)
+open $io, '>', \$io_data or die "cannot open io string\n";
+$sym_file = Dpkg::Shlibs::SymbolFile->new(file => "$datadir/basictags.symbols", arch => 'mips');
+$sym_file->output($io);
+is($io_data,
+'libbasictags.so.1 libbasictags1 #MINVER#
+| libbasictags1 (>= 1.1)
+ symbol11_optional@Base 1.1 1
+ symbol23_mips@Base 2.3
+ symbol24_32@Base 2.4
+ symbol27_big@Base 2.7
+ symbol31_randomtag@Base 3.1
+ symbol42_mips_and_optional@Base 4.2
+ symbol51_untagged@Base 5.1
+', 'template vs. non-template on mips');
+
+# Dumping in non-template mode (i386) (test for arch tags)
+open $io, '>', \$io_data or die "cannot open io string\n";
+$sym_file = Dpkg::Shlibs::SymbolFile->new(file => "$datadir/basictags.symbols", arch => 'i386');
+$sym_file_dup = Dpkg::Shlibs::SymbolFile->new(file => "$datadir/basictags.symbols", arch => 'i386');
+$sym_file->output($io);
+is($io_data,
+'libbasictags.so.1 libbasictags1 #MINVER#
+| libbasictags1 (>= 1.1)
+ symbol11_optional@Base 1.1 1
+ symbol22_i386@Base 2.2
+ symbol24_32@Base 2.4
+ symbol26_little@Base 2.6
+ symbol28_little_32@Base 2.8
+ symbol31_randomtag@Base 3.1
+ symbol41_i386_and_optional@Base 4.1
+ symbol51_untagged@Base 5.1
+', 'template vs. non-template on i386');
+
+ok (defined $sym_file->{objects}{'libbasictags.so.1'}{syms}{'symbol21_amd64@Base'},
+ 'syms keys are symbol names without quotes');
+
+# Preload objdumps
+my $tags_obj_i386 = Dpkg::Shlibs::Objdump::Object->new();
+open $objdump, '<', "$datadir/objdump.basictags-i386"
+ or die "$datadir/objdump.basictags-i386: $!";
+$tags_obj_i386->parse_objdump_output($objdump);
+close $objdump;
+$sym_file->merge_symbols($tags_obj_i386, '100.MISSING');
+is_deeply($sym_file, $sym_file_dup, 'is objdump.basictags-i386 and basictags.symbols in sync');
+
+my $tags_obj_amd64 = Dpkg::Shlibs::Objdump::Object->new();
+open $objdump, '<', "$datadir/objdump.basictags-amd64"
+ or die "$datadir/objdump.basictags-amd64: $!";
+$tags_obj_amd64->parse_objdump_output($objdump);
+close $objdump;
+
+# Merge/get_{new,lost} tests for optional tag:
+# - disappeared
+my $symbol11 = $tags_obj_i386->get_symbol('symbol11_optional@Base');
+delete $tags_obj_i386->{dynsyms}{'symbol11_optional@Base'};
+$sym_file->merge_symbols($tags_obj_i386, '100.MISSING');
+
+$sym = $sym_file->lookup_symbol('symbol11_optional@Base', ['libbasictags.so.1'], 1);
+is_deeply($sym, Dpkg::Shlibs::Symbol->new(symbol => 'symbol11_optional@Base',
+ symbol_templ => 'symbol11_optional@Base',
+ minver => '1.1', dep_id => 1, deprecated => '100.MISSING',
+ tags => { optional => undef }, tagorder => [ 'optional' ]),
+ 'disappered optional symbol gets deprecated');
+
+$sym_file->merge_symbols($tags_obj_i386, '101.MISSING');
+$sym = $sym_file->lookup_symbol('symbol11_optional@Base', ['libbasictags.so.1'], 1);
+is_deeply($sym, Dpkg::Shlibs::Symbol->new(symbol => 'symbol11_optional@Base',
+ symbol_templ => 'symbol11_optional@Base',
+ minver => '1.1', dep_id => 1, deprecated => '101.MISSING',
+ tags => { optional => undef }, tagorder => [ 'optional' ]),
+ 'deprecated text of MISSING optional symbol gets rebumped each merge');
+
+is( scalar($sym_file->get_lost_symbols($sym_file_dup)), 0, 'missing optional symbol is not LOST');
+
+# - reappeared (undeprecate, minver should be 1.1, not 100.MISSED)
+$tags_obj_i386->add_dynamic_symbol($symbol11);
+$sym_file->merge_symbols($tags_obj_i386, '100.MISSING');
+$sym = $sym_file->lookup_symbol('symbol11_optional@Base', ['libbasictags.so.1']);
+is_deeply($sym, Dpkg::Shlibs::Symbol->new(symbol => 'symbol11_optional@Base',
+ symbol_templ => 'symbol11_optional@Base',
+ minver => '1.1', dep_id => 1, deprecated => 0,
+ tags => { optional => undef }, tagorder => [ 'optional' ]),
+ 'reappeared optional symbol gets undeprecated + minver');
+is( scalar($sym_file->get_lost_symbols($sym_file_dup) +
+ $sym_file->get_new_symbols($sym_file_dup)), 0, 'reappeared optional symbol: neither NEW nor LOST');
+
+# Merge/get_{new,lost} tests for arch tag:
+# - arch specific appears on wrong arch: 'arch' tag should be removed
+my $symbol21 = $tags_obj_amd64->get_symbol('symbol21_amd64@Base');
+$tags_obj_i386->add_dynamic_symbol($symbol21);
+$sym_file->merge_symbols($tags_obj_i386, '100.MISSING');
+$sym = $sym_file->lookup_symbol('symbol21_amd64@Base', ['libbasictags.so.1']);
+is_deeply($sym, Dpkg::Shlibs::Symbol->new(symbol => 'symbol21_amd64@Base',
+ symbol_templ => 'symbol21_amd64@Base', symbol_quoted => "'",
+ minver => '2.1', dep_id => 0, deprecated => 0),
+ 'symbol appears on foreign arch, arch tag should be removed');
+@tmp = map { $_->{symbol}->get_symbolname() } $sym_file->get_new_symbols($sym_file_dup);
+is_deeply( \@tmp, [ 'symbol21_amd64@Base' ], 'symbol from foreign arch is NEW');
+is( $sym->get_symbolspec(1), ' symbol21_amd64@Base 2.1', 'no tags => no quotes in the symbol name' );
+
+# - arch specific symbol disappears
+delete $tags_obj_i386->{dynsyms}{'symbol22_i386@Base'};
+delete $tags_obj_i386->{dynsyms}{'symbol24_32@Base'};
+delete $tags_obj_i386->{dynsyms}{'symbol26_little@Base'};
+delete $tags_obj_i386->{dynsyms}{'symbol28_little_32@Base'};
+delete $tags_obj_i386->{dynsyms}{'symbol41_i386_and_optional@Base'};
+$sym_file->merge_symbols($tags_obj_i386, '100.MISSING');
+
+$sym = $sym_file->lookup_symbol('symbol22_i386@Base', ['libbasictags.so.1'], 1);
+is_deeply($sym, Dpkg::Shlibs::Symbol->new(symbol => 'symbol22_i386@Base',
+ symbol_templ => 'symbol22_i386@Base',
+ minver => '2.2', dep_id => 0, deprecated => '100.MISSING',
+ tags => { arch => '!amd64 !ia64 !mips' },
+ tagorder => [ 'arch' ]),
+ 'disappeared arch specific symbol gets deprecated');
+$sym = $sym_file->lookup_symbol('symbol24_32@Base', ['libbasictags.so.1'], 1);
+is_deeply($sym, Dpkg::Shlibs::Symbol->new(symbol => 'symbol24_32@Base',
+ symbol_templ => 'symbol24_32@Base',
+ minver => '2.4', dep_id => 0, deprecated => '100.MISSING',
+ tags => { 'arch-bits' => '32' },
+ tagorder => [ 'arch-bits' ]),
+ 'disappeared arch bits specific symbol gets deprecated');
+$sym = $sym_file->lookup_symbol('symbol26_little@Base', ['libbasictags.so.1'], 1);
+is_deeply($sym, Dpkg::Shlibs::Symbol->new(symbol => 'symbol26_little@Base',
+ symbol_templ => 'symbol26_little@Base',
+ minver => '2.6', dep_id => 0, deprecated => '100.MISSING',
+ tags => { 'arch-endian' => 'little' },
+ tagorder => [ 'arch-endian' ]),
+ 'disappeared arch endian specific symbol gets deprecated');
+$sym = $sym_file->lookup_symbol('symbol28_little_32@Base', ['libbasictags.so.1'], 1);
+is_deeply($sym, Dpkg::Shlibs::Symbol->new(symbol => 'symbol28_little_32@Base',
+ symbol_templ => 'symbol28_little_32@Base',
+ minver => '2.8', dep_id => 0, deprecated => '100.MISSING',
+ tags => { 'arch-bits' => '32', 'arch-endian' => 'little' },
+ tagorder => [ 'arch-bits', 'arch-endian' ]),
+ 'disappeared arch bits and endian specific symbol gets deprecated');
+$sym = $sym_file->lookup_symbol('symbol41_i386_and_optional@Base', ['libbasictags.so.1'], 1);
+is_deeply($sym, Dpkg::Shlibs::Symbol->new(symbol => 'symbol41_i386_and_optional@Base',
+ symbol_templ => 'symbol41_i386_and_optional@Base',
+ symbol_quoted => '"',
+ minver => '4.1', dep_id => 0, deprecated => '100.MISSING',
+ tags => { arch => 'i386', optional => 'reason' },
+ tagorder => [ 'arch', 'optional' ]),
+ 'disappeared optional arch specific symbol gets deprecated');
+@tmp = sort map { $_->{symbol}->get_symbolname() } $sym_file->get_lost_symbols($sym_file_dup);
+is_deeply(\@tmp, [ 'symbol22_i386@Base', 'symbol24_32@Base',
+ 'symbol26_little@Base', 'symbol28_little_32@Base' ],
+ "missing arch specific is LOST, but optional arch specific isn't");
+
+# Tests for tagged #includes
+$sym_file = Dpkg::Shlibs::SymbolFile->new(file => "$datadir/symbols.include-3", arch => 'i386');
+$sym = $sym_file->lookup_symbol('symbol2_fake1@Base', ['libbasictags.so.2']);
+is_deeply($sym, Dpkg::Shlibs::Symbol->new(symbol => 'symbol2_fake1@Base',
+ minver => '1.0',
+ tags => { optional => undef, 'random tag' => 'random value' },
+ tagorder => [ 'optional', 'random tag' ] ),
+ 'symbols from #included file inherits tags');
+$sym = $sym_file->lookup_symbol('symbol41_i386_and_optional@Base', ['libbasictags.so.1']);
+is_deeply($sym, Dpkg::Shlibs::Symbol->new(symbol => 'symbol41_i386_and_optional@Base',
+ symbol_templ => 'symbol41_i386_and_optional@Base',
+ symbol_quoted => '"',
+ minver => '4.1',
+ tags => { optional => 'reason', t => 'v', arch => 'i386' },
+ tagorder => [ 'optional', 't', 'arch' ]),
+ 'symbols in #included file can override tag values');
+$sym = $sym_file->lookup_symbol('symbol51_untagged@Base', ['libbasictags.so.1']);
+is_deeply($sym, Dpkg::Shlibs::Symbol->new(symbol => 'symbol51_untagged@Base',
+ minver => '5.1',
+ tags => { optional => 'from parent', t => 'v' },
+ tagorder => [ 'optional', 't' ]),
+ 'symbols are properly cloned when #including');
+
+# Test Symbol::clone()
+$sym = Dpkg::Shlibs::Symbol->new(symbol => 'foobar', testfield => 1, teststruct => { foo => 1 });
+$tmp = $sym->clone();
+$tmp->{teststruct}{foo} = 3;
+$tmp->{testfield} = 3;
+is ( $sym->{teststruct}{foo}, 1, 'original field "foo" not changed' );
+is ( $sym->{testfield}, 1, 'original field "testfield" not changed' );
+
+############ Test symbol patterns ###########
+
+SKIP: {
+
+skip 'c++filt not available', 41 if not can_run('c++filt');
+
+sub load_patterns_obj {
+ $obj = Dpkg::Shlibs::Objdump::Object->new();
+ open $objdump, '<', "$datadir/objdump.patterns"
+ or die "$datadir/objdump.patterns: $!";
+ $obj->parse_objdump_output($objdump);
+ close $objdump;
+ return $obj;
+}
+
+sub load_patterns_symbols {
+ $sym_file = Dpkg::Shlibs::SymbolFile->new(file => "$datadir/patterns.symbols");
+ return $sym_file;
+}
+
+load_patterns_obj();
+$sym_file_dup = load_patterns_symbols();
+load_patterns_symbols();
+
+save_load_test($sym_file, 'save -> load test of patterns template', template_mode => 1);
+
+isnt( $sym_file->get_patterns('libpatterns.so.1') , 0,
+ 'patterns.symbols has patterns');
+
+$sym_file->merge_symbols($obj, '100.MISSING');
+
+@tmp = map { $_->get_symbolname() } $sym_file->get_lost_symbols($sym_file_dup);
+is_deeply(\@tmp, [], 'no LOST symbols if all patterns matched.');
+@tmp = map { $_->get_symbolname() } $sym_file->get_new_symbols($sym_file_dup);
+is_deeply(\@tmp, [], 'no NEW symbols if all patterns matched.');
+
+# Pattern resolution order: aliases (c++, symver), generic
+$sym = $sym_file->lookup_symbol('SYMVER_1@SYMVER_1', 'libpatterns.so.1');
+is($sym->{minver}, '1', 'specific SYMVER_1 symbol');
+
+$sym = $sym_file->lookup_symbol('_ZN3NSB6Symver14symver_method1Ev@SYMVER_1', 'libpatterns.so.1');
+is($sym->{minver}, '1.method1', 'specific symbol preferred over pattern');
+
+$sym = $sym_file->lookup_symbol('_ZN3NSB6Symver14symver_method2Ev@SYMVER_1', 'libpatterns.so.1');
+is($sym->{minver}, '1.method2', 'c++ alias pattern preferred over generic pattern');
+is($sym->get_pattern()->get_symbolname(), 'NSB::Symver::symver_method2()@SYMVER_1',
+ 'c++ alias pattern preferred over generic pattern, on demangled name');
+
+$sym = $sym_file->lookup_symbol('_ZN3NSB6SymverD1Ev@SYMVER_1', 'libpatterns.so.1');
+is ( $sym->{minver}, '1.generic', 'generic (c++ & symver) pattern covers the rest (destructor)' );
+ok($sym->get_pattern()->equals($sym_file->create_symbol('(c++|symver)SYMVER_1 1.generic')),
+ 'generic (c++ & symver) pattern covers the rest (destructor), compared');
+
+# Test old style wildcard support
+load_patterns_symbols();
+$sym = $sym_file->create_symbol('*@SYMVEROPT_2 2');
+ok($sym->is_optional(), 'Old style wildcard is optional');
+is($sym->get_alias_type(), 'symver', 'old style wildcard is a symver pattern');
+is($sym->get_symbolname(), 'SYMVEROPT_2', 'wildcard pattern got renamed');
+
+$pat = $sym_file->lookup_pattern('(symver|optional)SYMVEROPT_2', 'libpatterns.so.1');
+$sym->{symbol_templ} = $pat->{symbol_templ};
+is_deeply($pat, $sym, 'old style wildcard is the same as (symver|optional)');
+
+# Get rid of all SymverOptional symbols
+foreach my $tmp (keys %{$obj->{dynsyms}}) {
+ delete $obj->{dynsyms}{$tmp} if ($tmp =~ /SymverOptional/);
+}
+$sym_file->merge_symbols($obj, '100.MISSING');
+is_deeply ( [ map { $_->get_symbolname() } $pat->get_pattern_matches() ],
+ [], 'old style wildcard matches nothing.');
+is($pat->{deprecated}, '100.MISSING', 'old style wildcard gets deprecated.');
+@tmp = map { $_->{symbol}->get_symbolname() } $sym_file->get_lost_symbols($sym_file_dup);
+is_deeply(\@tmp, [], 'but old style wildcard is not LOST.');
+
+# 'Internal' pattern covers all internal symbols
+load_patterns_obj();
+@tmp = grep { $_->get_symbolname() =~ /Internal/ } $sym_file->get_symbols('libpatterns.so.1');
+$sym = $sym_file->create_symbol('(regex|c++)^_Z(T[ISV])?N3NSA6ClassA8Internal.*@Base$ 1.internal');
+$pat = $sym_file->lookup_pattern($sym, 'libpatterns.so.1');
+is_deeply ([ sort $pat->get_pattern_matches() ], [ sort @tmp ],
+ 'Pattern covers all internal symbols');
+is($tmp[0]->{minver}, '1.internal', 'internal pattern covers first symbol');
+
+# Lookup private pattern
+my @private_symnames = sort qw(
+ _ZN3NSA6ClassA7Private11privmethod1Ei@Base
+ _ZN3NSA6ClassA7Private11privmethod2Ei@Base
+ _ZN3NSA6ClassA7PrivateC1Ev@Base
+ _ZN3NSA6ClassA7PrivateC2Ev@Base
+ _ZN3NSA6ClassA7PrivateD0Ev@Base
+ _ZN3NSA6ClassA7PrivateD1Ev@Base
+ _ZN3NSA6ClassA7PrivateD2Ev@Base
+ _ZTIN3NSA6ClassA7PrivateE@Base
+ _ZTSN3NSA6ClassA7PrivateE@Base
+ _ZTVN3NSA6ClassA7PrivateE@Base
+);
+$sym = $sym_file->create_symbol('(c++|regex|optional)NSA::ClassA::Private(::.*)?@Base 1');
+$pat = $sym_file->lookup_pattern($sym, 'libpatterns.so.1');
+isnt( $pat, undef, 'pattern for private class has been found' );
+is_deeply( [ sort map { $_->get_symbolname() } $pat->get_pattern_matches() ],
+ \@private_symnames, 'private pattern matched expected symbols');
+ok( ($pat->get_pattern_matches())[0]->is_optional(),
+ 'private symbol is optional like its pattern');
+ok( $sym_file->lookup_symbol(($pat->get_pattern_matches())[0], 'libpatterns.so.1'),
+ 'lookup_symbol() finds symbols matched by pattern (after merge)');
+
+# Get rid of a private symbol, it should not be lost
+delete $obj->{dynsyms}{$private_symnames[0]};
+load_patterns_symbols();
+$sym_file->merge_symbols($obj, '100.MISSING');
+
+$pat = $sym_file->lookup_pattern($sym, 'libpatterns.so.1');
+@tmp = map { $_->{symbol}->get_symbolname() } $sym_file->get_lost_symbols($sym_file_dup);
+is_deeply(\@tmp, [], 'no LOST symbols when got rid of patterned optional symbol.');
+ok(!$pat->{deprecated}, 'there are still matches, pattern is not deprecated.');
+
+# Get rid of all private symbols, the pattern should be deprecated.
+foreach my $tmp (@private_symnames) {
+ delete $obj->{dynsyms}{$tmp};
+}
+load_patterns_symbols();
+$sym_file->merge_symbols($obj, '100.MISSING');
+
+$pat = $sym_file->lookup_pattern($sym, 'libpatterns.so.1', 1);
+@tmp = $sym_file->get_lost_symbols($sym_file_dup);
+is_deeply( \@tmp, [ ],
+ 'All private symbols gone, but pattern is not LOST because it is optional.');
+is( $pat->{deprecated}, '100.MISSING',
+ 'All private symbols gone - pattern deprecated.');
+
+# Internal symbols. All covered by the pattern?
+@tmp = grep { $_->get_symbolname() =~ /Internal/ } values %{$sym_file->{objects}{'libpatterns.so.1'}{syms}};
+$sym = $sym_file->create_symbol('(regex|c++)^_Z(T[ISV])?N3NSA6ClassA8Internal.*@Base$ 1.internal');
+$pat = $sym_file->lookup_pattern($sym, 'libpatterns.so.1');
+is_deeply ([ sort $pat->get_pattern_matches() ], [ sort @tmp ],
+ 'Pattern covers all internal symbols');
+is($tmp[0]->{minver}, '1.internal', 'internal pattern covers first symbol');
+
+# Delete matches of the non-optional pattern
+$sym = $sym_file->create_symbol('(c++)"non-virtual thunk to NSB::ClassD::generate_vt(char const*) const@Base" 1');
+$pat = $sym_file->lookup_pattern($sym, 'libpatterns.so.1');
+isnt( $pat, undef, 'lookup_pattern() finds alias-based pattern' );
+
+is(scalar($pat->get_pattern_matches()), 2, 'two matches for the generate_vt pattern');
+foreach my $tmp ($pat->get_pattern_matches()) {
+ delete $obj->{dynsyms}{$tmp->get_symbolname()};
+}
+load_patterns_symbols();
+$sym_file->merge_symbols($obj, '100.MISSING');
+
+$pat = $sym_file->lookup_pattern($sym, 'libpatterns.so.1', 1);
+@tmp = map { scalar $sym_file->lookup_pattern($_->{symbol}, 'libpatterns.so.1', 1) }
+ $sym_file->get_lost_symbols($sym_file_dup);
+is_deeply(\@tmp, [ $pat ], 'No matches - generate_vt() pattern is LOST.');
+is( $pat->{deprecated}, '100.MISSING',
+ 'No matches - generate_vt() pattern is deprecated.');
+
+# Pattern undeprecation when matches are discovered
+load_patterns_obj();
+load_patterns_symbols();
+
+$pat = $sym_file_dup->lookup_pattern($sym, 'libpatterns.so.1');
+$pat->{deprecated} = '0.1-1';
+$pat = $sym_file->lookup_pattern($sym, 'libpatterns.so.1');
+$pat->{deprecated} = '0.1-1';
+
+$sym_file->merge_symbols($obj, '100.FOUND');
+ok( ! $pat->{deprecated},
+ 'Previously deprecated pattern with matches got undeprecated');
+is( $pat->{minver}, '100.FOUND',
+ 'Previously deprecated pattern with matches got minver bumped');
+@tmp = map { $_->{symbol}->get_symbolspec(1) } $sym_file->get_new_symbols($sym_file_dup);
+is_deeply( \@tmp, [ $pat->get_symbolspec(1) ],
+ 'Previously deprecated pattern with matches is NEW. Matches themselves are not NEW.');
+foreach my $sym ($pat->get_pattern_matches()) {
+ ok(!$sym->{deprecated}, $sym->get_symbolname() . ': not deprecated');
+ is($sym->{minver}, '100.FOUND', $sym->get_symbolname() . ': version bumped');
+}
+
+}
diff --git a/scripts/t/Dpkg_Shlibs/basictags.c b/scripts/t/Dpkg_Shlibs/basictags.c
new file mode 100644
index 0000000..4f1d337
--- /dev/null
+++ b/scripts/t/Dpkg_Shlibs/basictags.c
@@ -0,0 +1,63 @@
+/*
+ * $ gcc -shared -fPIC -Wl,-soname -Wl,libbasictags.so.1 \
+ * -o libbasictags.so.1 -DAMD64 basictags.c
+ * $ objdump -wfpTR libbasictags.so.1 > objdump.basictags-amd64
+ * $ gcc -shared -fPIC -Wl,-soname -Wl,libbasictags.so.1 \
+ * -o libbasictags.so.1 -DI386 basictags.c
+ * $ objdump -wfpTR libbasictags.so.1 > objdump.basictags-i386
+ * $ gcc -shared -fPIC -Wl,-soname -Wl,libbasictags.so.1 \
+ * -o libbasictags.so.1 -DMIPS basictags.c
+ * $ objdump -wfpTR libbasictags.so.1 > objdump.basictags-mips
+ */
+
+void symbol11_optional(void);
+void symbol11_optional(void) {}
+
+#if defined(AMD64)
+void symbol21_amd64(void);
+void symbol21_amd64(void) {}
+#elif defined(I386)
+void symbol22_i386(void);
+void symbol22_i386(void) {}
+#elif defined(MIPS)
+void symbol23_mips(void);
+void symbol23_mips(void) {}
+#endif
+
+#if defined(AMD64)
+void symbol25_64(void);
+void symbol25_64(void) {}
+#else
+void symbol24_32(void);
+void symbol24_32(void) {}
+#endif
+
+#if defined(MIPS)
+void symbol27_big(void);
+void symbol27_big(void) {}
+#else
+void symbol26_little(void);
+void symbol26_little(void) {}
+#endif
+
+#if defined(I386)
+void symbol28_little_32(void);
+void symbol28_little_32(void) {}
+#endif
+
+void symbol31_randomtag(void);
+void symbol31_randomtag(void) {}
+
+/* (arch=i386|optional)symbol41_i386_and_optional@Base */
+#if defined(I386)
+void symbol41_i386_and_optional(void);
+void symbol41_i386_and_optional(void) {}
+#endif
+/* (arch=mips|optional)symbol42_i386_and_optional@Base */
+#if defined(MIPS)
+void symbol42_mips_and_optional(void);
+void symbol42_mips_and_optional(void) {}
+#endif
+
+void symbol51_untagged(void);
+void symbol51_untagged(void) {}
diff --git a/scripts/t/Dpkg_Shlibs/basictags.symbols b/scripts/t/Dpkg_Shlibs/basictags.symbols
new file mode 100644
index 0000000..af1dfc6
--- /dev/null
+++ b/scripts/t/Dpkg_Shlibs/basictags.symbols
@@ -0,0 +1,15 @@
+libbasictags.so.1 libbasictags1 #MINVER#
+| libbasictags1 (>= 1.1)
+ (optional)symbol11_optional@Base 1.1 1
+ (arch=amd64 ia64 alpha)'symbol21_amd64@Base' 2.1
+ (arch=!amd64 !ia64 !mips)symbol22_i386@Base 2.2
+ (arch=!amd64 !ia64 !i386)symbol23_mips@Base 2.3
+ (arch-bits=32)symbol24_32@Base 2.4
+ (arch-bits=64)symbol25_64@Base 2.5
+ (arch-endian=little)symbol26_little@Base 2.6
+ (arch-endian=big)symbol27_big@Base 2.7
+ (arch-bits=32|arch-endian=little)symbol28_little_32@Base 2.8
+ (randomtagname=randomtagvalue)symbol31_randomtag@Base 3.1
+ (arch=i386|optional=reason)"symbol41_i386_and_optional@Base" 4.1
+ (arch=mips|optional=reason)"symbol42_mips_and_optional@Base" 4.2
+ symbol51_untagged@Base 5.1
diff --git a/scripts/t/Dpkg_Shlibs/ld.so.conf b/scripts/t/Dpkg_Shlibs/ld.so.conf
new file mode 100644
index 0000000..cb7a19c
--- /dev/null
+++ b/scripts/t/Dpkg_Shlibs/ld.so.conf
@@ -0,0 +1,9 @@
+# Comment and empty line
+
+# Paths
+/nonexistent32
+/nonexistent/lib64
+
+include /nonexistent/*.conf
+include t/Dpkg_Shlibs/ld.so.conf.d/*.conf
+
diff --git a/scripts/t/Dpkg_Shlibs/ld.so.conf.d/inf_recurse.conf b/scripts/t/Dpkg_Shlibs/ld.so.conf.d/inf_recurse.conf
new file mode 100644
index 0000000..fbb83d8
--- /dev/null
+++ b/scripts/t/Dpkg_Shlibs/ld.so.conf.d/inf_recurse.conf
@@ -0,0 +1 @@
+include t/Dpkg_Shlibs/ld.so.conf
diff --git a/scripts/t/Dpkg_Shlibs/ld.so.conf.d/normal.conf b/scripts/t/Dpkg_Shlibs/ld.so.conf.d/normal.conf
new file mode 100644
index 0000000..26e8b98
--- /dev/null
+++ b/scripts/t/Dpkg_Shlibs/ld.so.conf.d/normal.conf
@@ -0,0 +1 @@
+/usr/local/lib/
diff --git a/scripts/t/Dpkg_Shlibs/ld.so.conf.d/recursive.conf b/scripts/t/Dpkg_Shlibs/ld.so.conf.d/recursive.conf
new file mode 100644
index 0000000..702e41e
--- /dev/null
+++ b/scripts/t/Dpkg_Shlibs/ld.so.conf.d/recursive.conf
@@ -0,0 +1 @@
+include t/Dpkg_Shlibs/ld.so.conf_2
diff --git a/scripts/t/Dpkg_Shlibs/ld.so.conf_2 b/scripts/t/Dpkg_Shlibs/ld.so.conf_2
new file mode 100644
index 0000000..8afcaa5
--- /dev/null
+++ b/scripts/t/Dpkg_Shlibs/ld.so.conf_2
@@ -0,0 +1 @@
+/nonexistent/lib128
diff --git a/scripts/t/Dpkg_Shlibs/objdump.basictags-amd64 b/scripts/t/Dpkg_Shlibs/objdump.basictags-amd64
new file mode 100644
index 0000000..aa53376
--- /dev/null
+++ b/scripts/t/Dpkg_Shlibs/objdump.basictags-amd64
@@ -0,0 +1,78 @@
+
+./t/Dpkg_Shlibs/libobjdump.basictags-amd64.so: file format elf32-i386
+architecture: i386, flags 0x00000150:
+HAS_SYMS, DYNAMIC, D_PAGED
+start address 0x00000450
+
+Program Header:
+ LOAD off 0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**12
+ filesz 0x000006d0 memsz 0x000006d0 flags r-x
+ LOAD off 0x00000f18 vaddr 0x00001f18 paddr 0x00001f18 align 2**12
+ filesz 0x000000f8 memsz 0x000000fc flags rw-
+ DYNAMIC off 0x00000f20 vaddr 0x00001f20 paddr 0x00001f20 align 2**2
+ filesz 0x000000d0 memsz 0x000000d0 flags rw-
+ NOTE off 0x00000114 vaddr 0x00000114 paddr 0x00000114 align 2**2
+ filesz 0x00000024 memsz 0x00000024 flags r--
+EH_FRAME off 0x000005b8 vaddr 0x000005b8 paddr 0x000005b8 align 2**2
+ filesz 0x0000004c memsz 0x0000004c flags r--
+ STACK off 0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**4
+ filesz 0x00000000 memsz 0x00000000 flags rw-
+ RELRO off 0x00000f18 vaddr 0x00001f18 paddr 0x00001f18 align 2**0
+ filesz 0x000000e8 memsz 0x000000e8 flags r--
+
+Dynamic Section:
+ NEEDED libc.so.6
+ SONAME libbasictags.so.1
+ INIT 0x00000404
+ FINI 0x000005a4
+ INIT_ARRAY 0x00001f18
+ INIT_ARRAYSZ 0x00000004
+ FINI_ARRAY 0x00001f1c
+ FINI_ARRAYSZ 0x00000004
+ GNU_HASH 0x00000138
+ STRTAB 0x00000288
+ SYMTAB 0x00000188
+ STRSZ 0x00000103
+ SYMENT 0x00000010
+ PLTGOT 0x00002000
+ REL 0x000003cc
+ RELSZ 0x00000038
+ RELENT 0x00000008
+ VERNEED 0x000003ac
+ VERNEEDNUM 0x00000001
+ VERSYM 0x0000038c
+ RELCOUNT 0x00000003
+
+Version References:
+ required from libc.so.6:
+ 0x09691f73 0x00 02 GLIBC_2.1.3
+
+DYNAMIC SYMBOL TABLE:
+00000000 w D *UND* 00000000 _ITM_deregisterTMCloneTable
+00000000 w DF *UND* 00000000 GLIBC_2.1.3 __cxa_finalize
+00000000 w D *UND* 00000000 __gmon_start__
+00000000 w D *UND* 00000000 _ITM_registerTMCloneTable
+00002010 g D .data 00000000 Base _edata
+00000580 g DF .text 00000002 Base symbol26_little
+00002014 g D .bss 00000000 Base _end
+00000560 g DF .text 00000002 Base symbol21_amd64
+00002010 g D .bss 00000000 Base __bss_start
+00000570 g DF .text 00000002 Base symbol25_64
+00000404 g DF .init 00000000 Base _init
+00000590 g DF .text 00000002 Base symbol31_randomtag
+000005a4 g DF .fini 00000000 Base _fini
+000005a0 g DF .text 00000002 Base symbol51_untagged
+00000550 g DF .text 00000002 Base symbol11_optional
+
+
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+00001f18 R_386_RELATIVE *ABS*
+00001f1c R_386_RELATIVE *ABS*
+0000200c R_386_RELATIVE *ABS*
+00001ff0 R_386_GLOB_DAT _ITM_deregisterTMCloneTable
+00001ff4 R_386_GLOB_DAT __cxa_finalize@GLIBC_2.1.3
+00001ff8 R_386_GLOB_DAT __gmon_start__
+00001ffc R_386_GLOB_DAT _ITM_registerTMCloneTable
+
+
diff --git a/scripts/t/Dpkg_Shlibs/objdump.basictags-i386 b/scripts/t/Dpkg_Shlibs/objdump.basictags-i386
new file mode 100644
index 0000000..af0f707
--- /dev/null
+++ b/scripts/t/Dpkg_Shlibs/objdump.basictags-i386
@@ -0,0 +1,80 @@
+
+./t/Dpkg_Shlibs/libobjdump.basictags-i386.so: file format elf32-i386
+architecture: i386, flags 0x00000150:
+HAS_SYMS, DYNAMIC, D_PAGED
+start address 0x000004b0
+
+Program Header:
+ LOAD off 0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**12
+ filesz 0x00000788 memsz 0x00000788 flags r-x
+ LOAD off 0x00000f18 vaddr 0x00001f18 paddr 0x00001f18 align 2**12
+ filesz 0x000000f8 memsz 0x000000fc flags rw-
+ DYNAMIC off 0x00000f20 vaddr 0x00001f20 paddr 0x00001f20 align 2**2
+ filesz 0x000000d0 memsz 0x000000d0 flags rw-
+ NOTE off 0x00000114 vaddr 0x00000114 paddr 0x00000114 align 2**2
+ filesz 0x00000024 memsz 0x00000024 flags r--
+EH_FRAME off 0x00000638 vaddr 0x00000638 paddr 0x00000638 align 2**2
+ filesz 0x0000005c memsz 0x0000005c flags r--
+ STACK off 0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**4
+ filesz 0x00000000 memsz 0x00000000 flags rw-
+ RELRO off 0x00000f18 vaddr 0x00001f18 paddr 0x00001f18 align 2**0
+ filesz 0x000000e8 memsz 0x000000e8 flags r--
+
+Dynamic Section:
+ NEEDED libc.so.6
+ SONAME libbasictags.so.1
+ INIT 0x00000464
+ FINI 0x00000624
+ INIT_ARRAY 0x00001f18
+ INIT_ARRAYSZ 0x00000004
+ FINI_ARRAY 0x00001f1c
+ FINI_ARRAYSZ 0x00000004
+ GNU_HASH 0x00000138
+ STRTAB 0x000002b8
+ SYMTAB 0x00000198
+ STRSZ 0x00000130
+ SYMENT 0x00000010
+ PLTGOT 0x00002000
+ REL 0x0000042c
+ RELSZ 0x00000038
+ RELENT 0x00000008
+ VERNEED 0x0000040c
+ VERNEEDNUM 0x00000001
+ VERSYM 0x000003e8
+ RELCOUNT 0x00000003
+
+Version References:
+ required from libc.so.6:
+ 0x09691f73 0x00 02 GLIBC_2.1.3
+
+DYNAMIC SYMBOL TABLE:
+00000000 w D *UND* 00000000 _ITM_deregisterTMCloneTable
+00000000 w DF *UND* 00000000 GLIBC_2.1.3 __cxa_finalize
+00000000 w D *UND* 00000000 __gmon_start__
+00000000 w D *UND* 00000000 _ITM_registerTMCloneTable
+00002010 g D .data 00000000 Base _edata
+000005e0 g DF .text 00000002 Base symbol26_little
+00002014 g D .bss 00000000 Base _end
+00000610 g DF .text 00000002 Base symbol41_i386_and_optional
+000005c0 g DF .text 00000002 Base symbol22_i386
+000005f0 g DF .text 00000002 Base symbol28_little_32
+00002010 g D .bss 00000000 Base __bss_start
+00000464 g DF .init 00000000 Base _init
+00000600 g DF .text 00000002 Base symbol31_randomtag
+000005d0 g DF .text 00000002 Base symbol24_32
+00000624 g DF .fini 00000000 Base _fini
+00000620 g DF .text 00000002 Base symbol51_untagged
+000005b0 g DF .text 00000002 Base symbol11_optional
+
+
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+00001f18 R_386_RELATIVE *ABS*
+00001f1c R_386_RELATIVE *ABS*
+0000200c R_386_RELATIVE *ABS*
+00001ff0 R_386_GLOB_DAT _ITM_deregisterTMCloneTable
+00001ff4 R_386_GLOB_DAT __cxa_finalize@GLIBC_2.1.3
+00001ff8 R_386_GLOB_DAT __gmon_start__
+00001ffc R_386_GLOB_DAT _ITM_registerTMCloneTable
+
+
diff --git a/scripts/t/Dpkg_Shlibs/objdump.basictags-mips b/scripts/t/Dpkg_Shlibs/objdump.basictags-mips
new file mode 100644
index 0000000..27795c4
--- /dev/null
+++ b/scripts/t/Dpkg_Shlibs/objdump.basictags-mips
@@ -0,0 +1,79 @@
+
+./t/Dpkg_Shlibs/libobjdump.basictags-mips.so: file format elf32-i386
+architecture: i386, flags 0x00000150:
+HAS_SYMS, DYNAMIC, D_PAGED
+start address 0x00000480
+
+Program Header:
+ LOAD off 0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**12
+ filesz 0x0000072c memsz 0x0000072c flags r-x
+ LOAD off 0x00000f18 vaddr 0x00001f18 paddr 0x00001f18 align 2**12
+ filesz 0x000000f8 memsz 0x000000fc flags rw-
+ DYNAMIC off 0x00000f20 vaddr 0x00001f20 paddr 0x00001f20 align 2**2
+ filesz 0x000000d0 memsz 0x000000d0 flags rw-
+ NOTE off 0x00000114 vaddr 0x00000114 paddr 0x00000114 align 2**2
+ filesz 0x00000024 memsz 0x00000024 flags r--
+EH_FRAME off 0x000005f8 vaddr 0x000005f8 paddr 0x000005f8 align 2**2
+ filesz 0x00000054 memsz 0x00000054 flags r--
+ STACK off 0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**4
+ filesz 0x00000000 memsz 0x00000000 flags rw-
+ RELRO off 0x00000f18 vaddr 0x00001f18 paddr 0x00001f18 align 2**0
+ filesz 0x000000e8 memsz 0x000000e8 flags r--
+
+Dynamic Section:
+ NEEDED libc.so.6
+ SONAME libbasictags.so.1
+ INIT 0x00000438
+ FINI 0x000005e4
+ INIT_ARRAY 0x00001f18
+ INIT_ARRAYSZ 0x00000004
+ FINI_ARRAY 0x00001f1c
+ FINI_ARRAYSZ 0x00000004
+ GNU_HASH 0x00000138
+ STRTAB 0x000002a4
+ SYMTAB 0x00000194
+ STRSZ 0x0000011a
+ SYMENT 0x00000010
+ PLTGOT 0x00002000
+ REL 0x00000400
+ RELSZ 0x00000038
+ RELENT 0x00000008
+ VERNEED 0x000003e0
+ VERNEEDNUM 0x00000001
+ VERSYM 0x000003be
+ RELCOUNT 0x00000003
+
+Version References:
+ required from libc.so.6:
+ 0x09691f73 0x00 02 GLIBC_2.1.3
+
+DYNAMIC SYMBOL TABLE:
+00000000 w D *UND* 00000000 _ITM_deregisterTMCloneTable
+00000000 w DF *UND* 00000000 GLIBC_2.1.3 __cxa_finalize
+00000000 w D *UND* 00000000 __gmon_start__
+00000000 w D *UND* 00000000 _ITM_registerTMCloneTable
+00002010 g D .data 00000000 Base _edata
+00002014 g D .bss 00000000 Base _end
+000005d0 g DF .text 00000002 Base symbol42_mips_and_optional
+00002010 g D .bss 00000000 Base __bss_start
+00000438 g DF .init 00000000 Base _init
+000005c0 g DF .text 00000002 Base symbol31_randomtag
+000005a0 g DF .text 00000002 Base symbol24_32
+000005e4 g DF .fini 00000000 Base _fini
+000005e0 g DF .text 00000002 Base symbol51_untagged
+00000580 g DF .text 00000002 Base symbol11_optional
+00000590 g DF .text 00000002 Base symbol23_mips
+000005b0 g DF .text 00000002 Base symbol27_big
+
+
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+00001f18 R_386_RELATIVE *ABS*
+00001f1c R_386_RELATIVE *ABS*
+0000200c R_386_RELATIVE *ABS*
+00001ff0 R_386_GLOB_DAT _ITM_deregisterTMCloneTable
+00001ff4 R_386_GLOB_DAT __cxa_finalize@GLIBC_2.1.3
+00001ff8 R_386_GLOB_DAT __gmon_start__
+00001ffc R_386_GLOB_DAT _ITM_registerTMCloneTable
+
+
diff --git a/scripts/t/Dpkg_Shlibs/objdump.dbd-pg b/scripts/t/Dpkg_Shlibs/objdump.dbd-pg
new file mode 100644
index 0000000..c515dff
--- /dev/null
+++ b/scripts/t/Dpkg_Shlibs/objdump.dbd-pg
@@ -0,0 +1,309 @@
+
+/usr/lib/perl5/auto/DBD/Pg/Pg.so: file format elf32-i386
+architecture: i386, flags 0x00000150:
+HAS_SYMS, DYNAMIC, D_PAGED
+start address 0x000048f0
+
+Program Header:
+ LOAD off 0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**12
+ filesz 0x00020c10 memsz 0x00020c10 flags r-x
+ LOAD off 0x00021000 vaddr 0x00021000 paddr 0x00021000 align 2**12
+ filesz 0x00000c70 memsz 0x00000c74 flags rw-
+ DYNAMIC off 0x00021014 vaddr 0x00021014 paddr 0x00021014 align 2**2
+ filesz 0x000000d0 memsz 0x000000d0 flags rw-
+ STACK off 0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**2
+ filesz 0x00000000 memsz 0x00000000 flags rw-
+
+Dynamic Section:
+ NEEDED libpq.so.5
+ NEEDED libc.so.6
+ INIT 0x3d00
+ FINI 0x1d854
+ HASH 0xb4
+ GNU_HASH 0x7e8
+ STRTAB 0x1c30
+ SYMTAB 0xbd0
+ STRSZ 0xfa4
+ SYMENT 0x10
+ PLTGOT 0x211c8
+ PLTRELSZ 0x5d8
+ PLTREL 0x11
+ JMPREL 0x3728
+ REL 0x2e20
+ RELSZ 0x908
+ RELENT 0x8
+ VERNEED 0x2de0
+ VERNEEDNUM 0x1
+ VERSYM 0x2bd4
+ RELCOUNT 0x52
+
+Version References:
+ required from libc.so.6:
+ 0x09691f73 0x00 04 GLIBC_2.1.3
+ 0x0d696911 0x00 03 GLIBC_2.1
+ 0x0d696910 0x00 02 GLIBC_2.0
+
+DYNAMIC SYMBOL TABLE:
+00000000 D *UND* 00000000 Perl_Top_ptr
+00000000 DF *UND* 00000034 GLIBC_2.0 sprintf
+00000000 DF *UND* 00000014 PQcmdStatus
+00000000 D *UND* 00000000 Perl_mg_get
+00000000 D *UND* 00000000 Perl_sv_setiv
+00000000 D *UND* 00000000 Perl_is_utf8_string
+00000000 D *UND* 00000000 Perl_sv_free
+00000000 DF *UND* 00000011 PQpass
+00000000 DF *UND* 00000191 PQputCopyEnd
+00000000 D *UND* 00000000 Perl_av_len
+00000000 D *UND* 00000000 Perl_get_sv
+00000000 D *UND* 00000000 PerlIO_printf
+00000000 D *UND* 00000000 Perl_Tstack_base_ptr
+00000000 D *UND* 00000000 Perl_newRV_noinc
+00000000 DF *UND* 000000ba lo_tell
+00000000 DF *UND* 00000058 PQconsumeInput
+00000000 w D *UND* 00000000 __gmon_start__
+00000000 w D *UND* 00000000 _Jv_RegisterClasses
+00000000 DF *UND* 00000175 PQgetResult
+00000000 D *UND* 00000000 Perl_Tstack_max_ptr
+00000000 D *UND* 00000000 Perl_av_make
+00000000 DF *UND* 0000004d PQfmod
+00000000 DF *UND* 00000024 PQprotocolVersion
+00000000 D *UND* 00000000 Perl_sv_2uv
+00000000 DF *UND* 00000021 PQsetNoticeProcessor
+00000000 DF *UND* 000000c6 GLIBC_2.0 strncpy
+00000000 DF *UND* 00000014 PQstatus
+00000000 D *UND* 00000000 Perl_Isv_yes_ptr
+00000000 DF *UND* 00000058 GLIBC_2.0 memset
+00000000 D *UND* 00000000 Perl_warn_nocontext
+00000000 D *UND* 00000000 Perl_sv_2mortal
+00000000 D *UND* 00000000 Perl_Tstack_sp_ptr
+00000000 DF *UND* 00000014 PQresultStatus
+00000000 DF *UND* 00000045 GLIBC_2.0 __strtol_internal
+00000000 DF *UND* 00000019 PQhost
+00000000 D *UND* 00000000 Perl_sv_setpv
+00000000 D *UND* 00000000 Perl_av_undef
+00000000 DF *UND* 000000e2 lo_lseek
+00000000 DF *UND* 0000004d PQftable
+00000000 D *UND* 00000000 Perl_form
+00000000 DF *UND* 00000024 PQbackendPID
+00000000 DF *UND* 00000010 PQntuples
+00000000 DF *UND* 00000099 PQoidValue
+00000000 DF *UND* 00000040 PQnotifies
+00000000 DF *UND* 0000004d PQftype
+00000000 DF *UND* 00000048 PQgetisnull
+00000000 DF *UND* 00000033 PQresultErrorField
+00000000 D *UND* 00000000 Perl_Tmarkstack_max_ptr
+00000000 DF *UND* 000000bb lo_creat
+00000000 DF *UND* 00000245 lo_export
+00000000 D *UND* 00000000 pthread_getspecific
+00000000 DF *UND* 0000005d PQexec
+00000000 DF *UND* 00000020 PQsetErrorVerbosity
+00000000 DF *UND* 00000041 PQconnectdb
+00000000 DF *UND* 0000001c PQserverVersion
+00000000 D *UND* 00000000 Perl_sv_2iv
+00000000 DF *UND* 0000003e PQuntrace
+00000000 DF *UND* 00000036 PQtrace
+00000000 D *UND* 00000000 PerlIO_findFILE
+00000000 D *UND* 00000000 Perl_av_extend
+00000000 DF *UND* 00000046 GLIBC_2.0 memcpy
+00000000 DF *UND* 000000af GLIBC_2.0 strlen
+00000000 D *UND* 00000000 Perl_sv_upgrade
+00000000 DF *UND* 00000041 PQendcopy
+00000000 D *UND* 00000000 Perl_hv_store_ent
+00000000 D *UND* 00000000 Perl_av_store
+00000000 DF *UND* 0000009e PQexecPrepared
+00000000 D *UND* 00000000 Perl_sv_setpvn
+00000000 DF *UND* 000000ce lo_read
+00000000 DF *UND* 00000024 GLIBC_2.0 strcpy
+00000000 D *UND* 00000000 Perl_hv_fetch
+00000000 DF *UND* 00000011 PQoptions
+00000000 D *UND* 00000000 Perl_stack_grow
+00000000 DF *UND* 00000011 PQdb
+00000000 DF *UND* 000001fa lo_import
+00000000 D *UND* 00000000 Perl_Tcurpad_ptr
+00000000 DF *UND* 00000014 PQsocket
+00000000 D *UND* 00000000 Perl_sv_newmortal
+00000000 D *UND* 00000000 Perl_av_fetch
+00000000 DF *UND* 00000011 PQuser
+00000000 DF *UND* 00000084 PQprepare
+00000000 DF *UND* 00000023 PQfreemem
+00000000 D *UND* 00000000 Perl_Tdirty_ptr
+00000000 DF *UND* 00000062 GLIBC_2.0 strcasecmp
+00000000 DF *UND* 0000004d PQftablecol
+00000000 DF *UND* 000000ba lo_unlink
+00000000 D *UND* 00000000 Perl_call_method
+00000000 D *UND* 00000000 Perl_Tmarkstack_ptr_ptr
+00000000 DF *UND* 00000029 PQtransactionStatus
+00000000 DF *UND* 0000002c PQfname
+00000000 D *UND* 00000000 Perl_newSV
+00000000 D *UND* 00000000 Perl_mg_set
+00000000 D *UND* 00000000 Perl_sv_2io
+00000000 DF *UND* 0000012c PQputCopyData
+00000000 D *UND* 00000000 Perl_safesysrealloc
+00000000 DF *UND* 000000ab PQexecParams
+00000000 D *UND* 00000000 Perl_newSViv
+00000000 DF *UND* 000000a4 PQgetCopyData
+00000000 D *UND* 00000000 Perl_sv_unref
+00000000 DF *UND* 00000027 PQfinish
+00000000 D *UND* 00000000 Perl_Isv_no_ptr
+00000000 D *UND* 00000000 Perl_mg_find
+00000000 DF *UND* 00000035 PQerrorMessage
+00000000 D *UND* 00000000 Perl_newAV
+00000000 DF *UND* 000001aa GLIBC_2.0 strcat
+00000000 D *UND* 00000000 Perl_croak_nocontext
+00000000 D *UND* 00000000 Perl_sv_grow
+00000000 DF *UND* 000000c6 GLIBC_2.1 __rawmemchr
+00000000 DF *UND* 00000011 PQnfields
+00000000 D *UND* 00000000 Perl_av_pop
+00000000 DF *UND* 000000cd lo_open
+00000000 D *UND* 00000000 Perl_safesysmalloc
+00000000 D *UND* 00000000 Perl_newSVpv
+00000000 D *UND* 00000000 pow
+00000000 DF *UND* 00000034 GLIBC_2.0 sscanf
+00000000 D *UND* 00000000 Perl_mg_size
+00000000 D *UND* 00000000 Perl_av_push
+00000000 D *UND* 00000000 Perl_Tna_ptr
+00000000 DF *UND* 000000f3 GLIBC_2.0 strncmp
+00000000 D *UND* 00000000 PL_memory_wrap
+00000000 D *UND* 00000000 Perl_croak
+00000000 D *UND* 00000000 Perl_Isv_undef_ptr
+00000000 D *UND* 00000000 Perl_safesysfree
+00000000 DF *UND* 00000011 PQport
+00000000 DF *UND* 0000003f PQgetvalue
+00000000 DF *UND* 0000003b GLIBC_2.0 snprintf
+00000000 D *UND* 00000000 Perl_newXS
+00000000 DF *UND* 000000ba lo_close
+00000000 D *UND* 00000000 Perl_newSVuv
+00000000 D *UND* 00000000 Perl_sv_2bool
+00000000 D *UND* 00000000 Perl_newHV
+00000000 D *UND* 00000000 Perl_Gthr_key_ptr
+00000000 DF *UND* 00000054 GLIBC_2.0 strcmp
+00000000 w DF *UND* 00000176 GLIBC_2.1.3 __cxa_finalize
+00000000 D *UND* 00000000 Perl_newSVpvn
+00000000 D *UND* 00000000 Perl_markstack_grow
+00000000 DF *UND* 000000eb lo_write
+00000000 DF *UND* 00000175 PQcmdTuples
+00000000 D *UND* 00000000 Perl_newRV
+00000000 DF *UND* 0000004d PQfsize
+00000000 D *UND* 00000000 Perl_sv_backoff
+00000000 D *UND* 00000000 Perl_dowantarray
+00000000 DF *UND* 0000006e PQclear
+00000000 D *UND* 00000000 Perl_sv_2pv_flags
+0000b0b0 g DF .text 000001a6 Base XS_DBD__Pg__db__ping
+00006bc0 g DF .text 0000025f Base XS_DBD__Pg__db__pg_type_info
+0001cac0 g DF .text 00000059 Base dequote_bool
+00007f00 g DF .text 0000026b Base XS_DBD__Pg__db_putline
+00007100 g DF .text 000001a0 Base XS_DBD__Pg__db_endcopy
+00006e20 g DF .text 00000133 Base XS_DBD__Pg__db_pg_server_untrace
+0000a750 g DF .text 000002d3 Base XS_DBD__Pg__db_pg_rollback_to
+00012e00 g DF .text 00000211 Base pg_db_release
+00018120 g DF .text 00001707 Base dbd_st_prepare
+000138a0 g DF .text 00000234 Base pg_db_getline
+00010800 g DF .text 0000062a Base XS_DBD__Pg__db_selectall_arrayref
+0000ad10 g DF .text 000001a6 Base XS_DBD__Pg__db_pg_notifies
+00007990 g DF .text 0000056c Base XS_DBD__Pg__db_pg_getline
+00013270 g DF .text 0000020a Base pg_db_savepoint
+00009640 g DF .text 00000619 Base XS_DBD__Pg__db_lo_read
+00010e30 g DF .text 00000413 Base XS_DBD__Pg__db__login
+0001a890 g DF .text 00000022 Base dbd_db_rollback
+0001b150 g DF .text 000006d7 Base dbd_db_login
+00019a60 g DF .text 000000ae Base dbd_db_getfd
+00019e60 g DF .text 00000657 Base dbd_db_FETCH_attrib
+0001d020 g DF .text 000000b2 Base quote_bool
+00010020 g DF .text 0000020e Base XS_DBD__Pg__db_commit
+0001ca90 g DF .text 00000028 Base dequote_char
+00012cf0 g DF .text 00000104 Base pg_db_lo_creat
+00007440 g DF .text 00000542 Base XS_DBD__Pg__db_getline
+00006f60 g DF .text 00000194 Base XS_DBD__Pg__db_pg_server_trace
+00012be0 g DF .text 00000103 Base pg_db_lo_write
+0000db20 g DF .text 00000608 Base XS_DBD__Pg__st_blob_read
+0000aa30 g DF .text 000002d3 Base XS_DBD__Pg__db_pg_savepoint
+0000bcb0 g DF .text 000002d8 Base XS_DBD__Pg__st_execute
+0001d0e0 g DF .text 00000156 Base quote_bytea
+00008e70 g DF .text 000003db Base XS_DBD__Pg__db_lo_lseek
+0001cb20 g DF .text 000000c2 Base quote_circle
+0000e950 g DF .text 00000266 Base XS_DBD__Pg__st_fetchall_arrayref
+0001d780 g DF .text 0000009b Base sql_type_data
+00021c70 g D *ABS* 00000000 Base _edata
+00015df0 g DF .text 00000155 Base dbd_st_finish
+0000d220 g DF .text 000003f4 Base XS_DBD__Pg__st_DESTROY
+0000aec0 g DF .text 000001e5 Base XS_DBD__Pg__db_getfd
+0001ccc0 g DF .text 000000b2 Base quote_geom
+0001d2e0 g DF .text 00000497 Base pg_type_data
+00015c30 g DF .text 000001b5 Base dbd_db_ping
+0001d854 g DF .fini 00000000 Base _fini
+00013560 g DF .text 000000e7 Base pg_db_pg_server_trace
+000127b0 g DF .text 00000118 Base pg_db_lo_open
+00003d00 g DF .init 00000000 Base _init
+0000e130 g DF .text 0000022f Base XS_DBD__Pg__st_fetchrow_array
+0001cbf0 g DF .text 000000c2 Base quote_path
+00015930 g DF .text 000002f9 Base dbd_st_destroy
+00011450 g DF .text 00000336 Base XS_DBD__Pg_constant
+00014fb0 g DF .text 0000029e Base dbd_st_STORE_attrib
+0000cac0 g DF .text 000004bc Base XS_DBD__Pg__st_bind_param
+0000f190 g DF .text 0000020e Base XS_DBD__Pg__db_rollback
+00004990 g DF .text 00001e07 Base boot_DBD__Pg
+00021c70 g D *ABS* 00000000 Base __bss_start
+0001ca60 g DF .text 00000028 Base dequote_string
+0000d840 g DF .text 000002d2 Base XS_DBD__Pg__st_STORE
+00008170 g DF .text 0000026b Base XS_DBD__Pg__db_pg_putline
+0001c790 g DF .text 00000295 Base pg_quickexec
+000072a0 g DF .text 0000019f Base XS_DBD__Pg__db_pg_endcopy
+00008700 g DF .text 0000028b Base XS_DBD__Pg__db_lo_import
+00019830 g DF .text 0000022b Base dbd_db_pg_notifies
+00011ab0 g DF .text 000000ee Base pg_db_lo_close
+0001ae70 g DF .text 000001c6 Base dbd_db_disconnect
+00021c74 g D *ABS* 00000000 Base _end
+0000cf80 g DF .text 000002a0 Base XS_DBD__Pg__st_finish
+00019b10 g DF .text 00000343 Base dbd_discon_all
+00011790 g DF .text 00000050 Base dbd_init
+000117e0 g DF .text 000000a9 Base dbd_st_rows
+0001a8c0 g DF .text 00000022 Base dbd_db_commit
+00009ec0 g DF .text 0000032b Base XS_DBD__Pg__db_lo_open
+0001ce70 g DF .text 000000fe Base dequote_bytea
+0000ebc0 g DF .text 000001f0 Base XS_DBD__Pg__st_rows
+0000bf90 g DF .text 0000056d Base XS_DBD__Pg__db_quote
+0001cfb0 g DF .text 0000006c Base quote_integer
+0000d620 g DF .text 0000021b Base XS_DBD__Pg__st_FETCH_attrib
+00013480 g DF .text 000000e0 Base pg_db_pg_server_untrace
+0000a1f0 g DF .text 0000027c Base XS_DBD__Pg__db_lo_creat
+00009250 g DF .text 000003eb Base XS_DBD__Pg__db_lo_write
+000067a0 g DF .text 00000208 Base XS_DBD__Pg__st_state
+0001ca30 g DF .text 00000028 Base null_dequote
+00013020 g DF .text 00000250 Base pg_db_rollback_to
+00010230 g DF .text 000005cb Base XS_DBD__Pg__db_selectrow_arrayref
+00008990 g DF .text 0000025b Base XS_DBD__Pg__db_lo_unlink
+000128d0 g DF .text 00000104 Base pg_db_lo_import
+0000fb30 g DF .text 0000020a Base XS_DBD__Pg__db_FETCH
+00012af0 g DF .text 000000ee Base pg_db_lo_tell
+0000a470 g DF .text 000002d3 Base XS_DBD__Pg__db_pg_release
+00011250 g DF .text 000001fa Base XS_DBD__Pg__dr_discon_all_
+00013ce0 g DF .text 000012cd Base dbd_st_FETCH_attrib
+0000b860 g DF .text 00000450 Base XS_DBD__Pg__db_do
+0000edb0 g DF .text 000003d6 Base XS_DBD__Pg__st__prepare
+0001d240 g DF .text 0000003f Base quote_sql_binary
+0000fd40 g DF .text 000002d2 Base XS_DBD__Pg__db_STORE
+000083e0 g DF .text 0000031b Base XS_DBD__Pg__db_lo_export
+0001cd80 g DF .text 000000e4 Base quote_string
+0000f3a0 g DF .text 00000378 Base XS_DBD__Pg__db_disconnect
+0000c500 g DF .text 000005be Base XS_DBD__Pg__st_bind_param_inout
+0000f720 g DF .text 0000040e Base XS_DBD__Pg__db_DESTROY
+00013ae0 g DF .text 000001f4 Base pg_db_putline
+00013650 g DF .text 00000244 Base pg_db_endcopy
+00016b40 g DF .text 000015d1 Base dbd_st_execute
+000129e0 g DF .text 00000110 Base pg_db_lo_unlink
+0001cf70 g DF .text 00000038 Base dequote_sql_binary
+00011890 g DF .text 0000010a Base pg_db_lo_lseek
+0001d280 g DF .text 00000055 Base null_quote
+00008bf0 g DF .text 0000027c Base XS_DBD__Pg__db_lo_tell
+0001a8f0 g DF .text 00000579 Base dbd_db_STORE_attrib
+0001b9a0 g DF .text 00000def Base dbd_bind_ph
+000119a0 g DF .text 00000103 Base pg_db_lo_read
+00015f50 g DF .text 000006ed Base dbd_st_fetch
+0000e360 g DF .text 00000224 Base XS_DBD__Pg__st_fetchrow_arrayref
+000069b0 g DF .text 00000208 Base XS_DBD__Pg__db_state
+00012690 g DF .text 00000118 Base pg_db_lo_export
+0001b040 g DF .text 0000010f Base dbd_db_destroy
+00009c60 g DF .text 0000025b Base XS_DBD__Pg__db_lo_close
+00011ea0 g DF .text 00000379 Base dbd_st_blob_read
+
+
diff --git a/scripts/t/Dpkg_Shlibs/objdump.glib-ia64 b/scripts/t/Dpkg_Shlibs/objdump.glib-ia64
new file mode 100644
index 0000000..a3ff4d8
--- /dev/null
+++ b/scripts/t/Dpkg_Shlibs/objdump.glib-ia64
@@ -0,0 +1,350 @@
+
+/usr/lib/libglib-2.0.so.0: file format elf64-little
+architecture: ia64-elf64, flags 0x00000150:
+HAS_SYMS, DYNAMIC, D_PAGED
+start address 0x000000000002dc40
+
+Program Header:
+ LOAD off 0x0000000000000000 vaddr 0x0000000000000000 paddr 0x0000000000000000 align 2**16
+ filesz 0x0000000000158820 memsz 0x0000000000158820 flags r-x
+ LOAD off 0x0000000000158820 vaddr 0x0000000000168820 paddr 0x0000000000168820 align 2**16
+ filesz 0x0000000000001498 memsz 0x0000000000001a90 flags rw-
+ DYNAMIC off 0x0000000000158948 vaddr 0x0000000000168948 paddr 0x0000000000168948 align 2**3
+ filesz 0x00000000000001f0 memsz 0x00000000000001f0 flags rw-
+ STACK off 0x0000000000000000 vaddr 0x0000000000000000 paddr 0x0000000000000000 align 2**3
+ filesz 0x0000000000000000 memsz 0x0000000000000000 flags rw-
+0x70000001 off 0x0000000000150e28 vaddr 0x0000000000150e28 paddr 0x0000000000150e28 align 2**3
+ filesz 0x00000000000079f8 memsz 0x00000000000079f8 flags r--
+
+Dynamic Section:
+ NEEDED libc.so.6.1
+ SONAME libglib-2.0.so.0
+ INIT 0x15070
+ FINI 0x106360
+ INIT_ARRAY 0x168820
+ INIT_ARRAYSZ 0x18
+ FINI_ARRAY 0x168838
+ FINI_ARRAYSZ 0x8
+ HASH 0x158
+ GNU_HASH 0x25c8
+ STRTAB 0xc4c0
+ SYMTAB 0x4a38
+ STRSZ 0x5deb
+ SYMENT 0x18
+ 0x70000000 0x168dd8
+ PLTGOT 0x168dd8
+ PLTRELSZ 0xcd8
+ PLTREL 0x7
+ JMPREL 0x14398
+ RELA 0x12d18
+ RELASZ 0x1680
+ RELAENT 0x18
+ VERNEED 0x12ce8
+ VERNEEDNUM 0x1
+ VERSYM 0x122ac
+ RELACOUNT 0x60
+
+Version References:
+ required from libc.so.6.1:
+ 0x0d696913 0x00 03 GLIBC_2.3
+ 0x0d696912 0x00 02 GLIBC_2.2
+
+DYNAMIC SYMBOL TABLE:
+00000000000bbaa0 l DF .text 00000000000006b0 .hidden IA__g_thread_pool_new
+000000000007b730 l DF .text 0000000000000200 .hidden IA__g_option_group_free
+00000000000b2f30 l DF .text 0000000000000060 .hidden IA__g_str_equal
+00000000000cd0c0 l DF .text 0000000000000010 .hidden IA__g_direct_hash
+0000000000095660 l DF .text 00000000000001d0 .hidden IA__g_scanner_warn
+00000000001062e0 l DF .text 0000000000000080 .hidden __do_global_ctors_aux
+0000000000071fe0 l DF .text 00000000000000f0 .hidden IA__g_free
+0000000000074a30 l DF .text 0000000000000370 .hidden _g_log_fallback_handler
+0000000000077080 l DF .text 0000000000000a20 .hidden IA__g_log_default_handler
+00000000000afc90 l DF .text 0000000000000090 .hidden IA__g_str_hash
+0000000000095830 l DF .text 00000000000001f0 .hidden IA__g_scanner_error
+00000000000d4d60 l DF .text 0000000000000290 g_io_unix_get_flags
+00000000000d4a60 l DF .text 0000000000000120 g_io_unix_set_flags
+00000000000d4b80 l DF .text 0000000000000020 g_io_unix_free
+00000000000d4ba0 l DF .text 00000000000000c0 g_io_unix_create_watch
+00000000000d4c60 l DF .text 0000000000000100 g_io_unix_close
+00000000000d4ff0 l DF .text 00000000000001f0 g_io_unix_seek
+00000000000d51e0 l DF .text 0000000000000150 g_io_unix_write
+00000000000d5330 l DF .text 0000000000000180 g_io_unix_read
+00000000000d4820 l DF .text 0000000000000030 g_io_unix_finalize
+00000000000d4950 l DF .text 0000000000000110 g_io_unix_dispatch
+00000000000d4850 l DF .text 0000000000000080 g_io_unix_check
+00000000000d48d0 l DF .text 0000000000000080 g_io_unix_prepare
+00000000000cd720 l DF .text 0000000000000090 language_names_cache_free
+00000000000c89f0 l DF .text 0000000000000090 charset_cache_free
+00000000000c20f0 l DF .text 0000000000000050 interval_compare
+00000000000bb270 l DF .text 0000000000000830 g_thread_pool_thread_proxy
+00000000000b3360 l DF .text 0000000000000050 g_thread_fail
+00000000000b33b0 l DF .text 00000000000000c0 gettime
+00000000000b8c70 l DF .text 00000000000004a0 g_thread_cleanup
+00000000000b6790 l DF .text 00000000000003b0 g_thread_create_proxy
+00000000000a37a0 l DF .text 0000000000000320 private_thread_memory_cleanup
+000000000009a7d0 l DF .text 00000000000000e0 iter_compare
+0000000000094c10 l DF .text 0000000000000060 g_scanner_destroy_symbol_table_entry
+0000000000095f50 l DF .text 00000000000001b0 g_scanner_msg_handler
+0000000000096100 l DF .text 00000000000000a0 g_scanner_key_equal
+0000000000093210 l DF .text 0000000000000080 g_scanner_key_hash
+0000000000093290 l DF .text 00000000000000c0 g_scanner_foreach_internal
+0000000000092510 l DF .text 00000000000004a0 interpolate_replacement
+000000000008cd60 l DF .text 0000000000000050 literal_replacement
+000000000008cd00 l DF .text 0000000000000060 free_interpolation_data
+0000000000089190 l DF .text 0000000000000040 relation_delete_value_tuple
+0000000000089c20 l DF .text 0000000000000030 g_relation_free_array
+0000000000089690 l DF .text 0000000000000210 g_relation_delete_tuple
+00000000000895a0 l DF .text 00000000000000f0 g_relation_select_tuple
+0000000000088c30 l DF .text 00000000000000a0 g_relation_print_index
+0000000000088cd0 l DF .text 0000000000000170 g_relation_print_one
+00000000000889a0 l DF .text 0000000000000020 tuple_hash_2
+0000000000088940 l DF .text 0000000000000060 tuple_equal_2
+000000000007bc50 l DF .text 0000000000000050 dgettext_swapped
+00000000000787b0 l DF .text 0000000000000040 g_node_find_func
+0000000000071570 l DF .text 0000000000000200 profiler_try_realloc
+0000000000071770 l DF .text 0000000000000150 profiler_try_malloc
+0000000000073410 l DF .text 0000000000000190 profiler_calloc
+00000000000718c0 l DF .text 00000000000001c0 profiler_free
+0000000000073380 l DF .text 0000000000000090 profiler_realloc
+00000000000735a0 l DF .text 0000000000000090 profiler_malloc
+0000000000071a80 l DF .text 00000000000000d0 fallback_calloc
+000000000005a2b0 l DF .text 0000000000000040 g_source_callback_get
+000000000005d650 l DF .text 00000000000000e0 g_source_callback_unref
+000000000005a290 l DF .text 0000000000000020 g_source_callback_ref
+000000000005a340 l DF .text 00000000000000c0 g_idle_dispatch
+000000000005a330 l DF .text 0000000000000010 g_idle_check
+000000000005a310 l DF .text 0000000000000020 g_idle_prepare
+000000000005a400 l DF .text 00000000000000c0 g_child_watch_dispatch
+000000000005a5c0 l DF .text 0000000000000020 g_child_watch_check
+000000000005a5e0 l DF .text 0000000000000030 g_child_watch_prepare
+0000000000060390 l DF .text 0000000000000160 g_timeout_dispatch
+00000000000604f0 l DF .text 00000000000000f0 g_timeout_check
+00000000000605e0 l DF .text 0000000000000310 g_timeout_prepare
+000000000005cc20 l DF .text 0000000000000030 g_main_dispatch_free
+000000000005b130 l DF .text 00000000000000b0 g_child_watch_signal_handler
+00000000000619f0 l DF .text 00000000000002e0 child_watch_helper_thread
+000000000004d830 l DF .text 00000000000000b0 g_key_file_key_value_pair_free
+0000000000041860 l DF .text 0000000000000090 default_finalize_hook
+000000000002b370 l DF .text 0000000000000090 filename_charset_cache_free
+000000000001fe80 l DF .text 0000000000000440 text_raw_cb
+0000000000020660 l DF .text 0000000000000480 end_element_raw_cb
+0000000000026110 l DF .text 0000000000001cf0 start_element_raw_cb
+000000000001e790 l DF .text 0000000000000060 parse_data_free
+000000000001e6e0 l DF .text 00000000000000b0 bookmark_app_info_free
+000000000001e960 l DF .text 0000000000000260 bookmark_item_free
+000000000001c300 l DF .text 0000000000000020 stack_trace_sigchld
+0000000000019a00 l DF .text 0000000000000070 g_async_queue_invert_compare
+0000000000016be0 l DF .text 0000000000000080 __do_jv_register_classes
+0000000000016b20 l DF .text 00000000000000b0 __do_global_dtors_aux
+0000000000016aa0 l DF .text 0000000000000070 gmon_initializer
+0000000000000000 DF *UND* 0000000000000370 GLIBC_2.2 getpwuid
+0000000000000000 DF *UND* 0000000000000550 GLIBC_2.2 freopen
+0000000000000000 DF *UND* 0000000000000050 GLIBC_2.2 __strtod_internal
+0000000000000000 DF *UND* 0000000000000240 GLIBC_2.2 feof
+0000000000000000 DF *UND* 0000000000000450 GLIBC_2.2 localeconv
+0000000000000000 DF *UND* 00000000000001e0 GLIBC_2.2 strcpy
+0000000000000000 DF *UND* 0000000000000200 GLIBC_2.2 raise
+0000000000000000 DO *UND* 0000000000000008 GLIBC_2.2 environ
+0000000000000000 DF *UND* 0000000000000030 GLIBC_2.2 getuid
+0000000000000000 DF *UND* 0000000000000180 GLIBC_2.2 waitpid
+0000000000000000 DF *UND* 0000000000000100 GLIBC_2.2 strcasecmp
+0000000000000000 DF *UND* 0000000000000060 GLIBC_2.2 select
+0000000000000000 DF *UND* 0000000000000110 GLIBC_2.2 closedir
+0000000000000000 DF *UND* 0000000000000440 GLIBC_2.2 fwrite
+0000000000000000 DF *UND* 00000000000001d0 GLIBC_2.2 rewinddir
+0000000000000000 DF *UND* 0000000000000060 GLIBC_2.2 close
+0000000000000000 DF *UND* 0000000000000280 GLIBC_2.2 strstr
+0000000000000000 DF *UND* 0000000000000080 GLIBC_2.2 time
+0000000000000000 DF *UND* 0000000000000520 GLIBC_2.2 fdopen
+0000000000000000 w D *UND* 0000000000000000 __gmon_start__
+0000000000000000 w D *UND* 0000000000000000 _Jv_RegisterClasses
+0000000000000000 DF *UND* 0000000000000050 GLIBC_2.2 wcsxfrm
+0000000000000000 DF *UND* 00000000000000c0 GLIBC_2.2 strncasecmp
+0000000000000000 DF *UND* 00000000000000d0 GLIBC_2.2 remove
+0000000000000000 DF *UND* 00000000000004f0 GLIBC_2.2 malloc
+0000000000000000 DF *UND* 0000000000000080 GLIBC_2.2 execve
+0000000000000000 DF *UND* 00000000000000b0 GLIBC_2.2 fprintf
+0000000000000000 DF *UND* 0000000000000200 GLIBC_2.2 setpwent
+0000000000000000 DF *UND* 0000000000000100 GLIBC_2.2 nl_langinfo
+0000000000000000 DF *UND* 0000000000000040 GLIBC_2.2 chdir
+0000000000000000 DF *UND* 0000000000000100 GLIBC_2.2 gethostname
+0000000000000000 w DO *UND* 0000000000000008 GLIBC_2.2 _environ
+0000000000000000 DF *UND* 0000000000000040 GLIBC_2.2 rmdir
+0000000000000000 DF *UND* 0000000000000390 GLIBC_2.2 fputc
+0000000000000000 DF *UND* 0000000000000170 GLIBC_2.2 poll
+0000000000000000 DF *UND* 00000000000003e0 GLIBC_2.2 getcwd
+0000000000000000 DO *UND* 0000000000000008 GLIBC_2.2 stdin
+0000000000000000 DF *UND* 00000000000004f0 GLIBC_2.2 getpwnam_r
+0000000000000000 DF *UND* 0000000000000520 GLIBC_2.2 memmove
+0000000000000000 DF *UND* 0000000000000050 GLIBC_2.2 __strtoul_internal
+0000000000000000 DO *UND* 0000000000000008 GLIBC_2.2 stdout
+0000000000000000 DF *UND* 0000000000000050 GLIBC_2.2 strncmp
+0000000000000000 DF *UND* 0000000000000320 GLIBC_2.2 vasprintf
+0000000000000000 DF *UND* 0000000000000210 GLIBC_2.2 endpwent
+0000000000000000 DF *UND* 00000000000001f0 GLIBC_2.2 fcntl
+0000000000000000 DF *UND* 0000000000000040 GLIBC_2.2 dup2
+0000000000000000 DF *UND* 00000000000007e0 GLIBC_2.2 fork
+0000000000000000 DF *UND* 0000000000000050 GLIBC_2.2 gmtime
+0000000000000000 DF *UND* 0000000000000040 GLIBC_2.2 readlink
+0000000000000000 DF *UND* 0000000000000080 GLIBC_2.3 __ctype_toupper_loc
+0000000000000000 DF *UND* 0000000000000060 GLIBC_2.2 lseek
+0000000000000000 DF *UND* 00000000000000c0 GLIBC_2.2 __fxstat
+0000000000000000 DF *UND* 00000000000000b0 GLIBC_2.2 fscanf
+0000000000000000 DO *UND* 0000000000000008 GLIBC_2.2 __environ
+0000000000000000 DF *UND* 0000000000000040 GLIBC_2.2 munmap
+0000000000000000 DF *UND* 0000000000000050 GLIBC_2.2 strftime
+0000000000000000 DF *UND* 00000000000003a0 GLIBC_2.2 fread
+0000000000000000 DF *UND* 0000000000007090 GLIBC_2.2 vfprintf
+0000000000000000 DF *UND* 00000000000000b0 GLIBC_2.2 snprintf
+0000000000000000 DF *UND* 0000000000000330 GLIBC_2.2 iconv_open
+0000000000000000 DF *UND* 0000000000000080 GLIBC_2.3 __ctype_b_loc
+0000000000000000 DF *UND* 0000000000000060 GLIBC_2.2 nanosleep
+0000000000000000 DF *UND* 0000000000000050 GLIBC_2.2 pipe
+0000000000000000 DF *UND* 0000000000000090 GLIBC_2.2 strpbrk
+0000000000000000 DF *UND* 0000000000000640 GLIBC_2.2 realloc
+0000000000000000 DF *UND* 0000000000000240 GLIBC_2.2 ferror
+0000000000000000 DF *UND* 00000000000004f0 GLIBC_2.2 getpwuid_r
+0000000000000000 DF *UND* 0000000000000030 GLIBC_2.2 strcmp
+0000000000000000 DF *UND* 00000000000000e0 GLIBC_2.2 setenv
+0000000000000000 DF *UND* 0000000000000650 GLIBC_2.2 fclose
+0000000000000000 w DF *UND* 0000000000000220 GLIBC_2.2 __cxa_finalize
+0000000000000000 DF *UND* 0000000000000020 GLIBC_2.2 __errno_location
+0000000000000000 DF *UND* 00000000000002c0 GLIBC_2.2 exit
+0000000000000000 DF *UND* 0000000000000060 GLIBC_2.2 open
+0000000000000000 DF *UND* 0000000000000590 GLIBC_2.2 abort
+0000000000000000 DF *UND* 0000000000000400 GLIBC_2.2 fputs
+0000000000000000 DF *UND* 00000000000000a0 GLIBC_2.2 sigemptyset
+0000000000000000 DF *UND* 0000000000000050 GLIBC_2.2 localtime_r
+0000000000000000 DF *UND* 00000000000000b0 GLIBC_2.2 sprintf
+0000000000000000 DF *UND* 00000000000002c0 GLIBC_2.2 unsetenv
+0000000000000000 DF *UND* 0000000000000040 GLIBC_2.2 mmap
+0000000000000000 DF *UND* 0000000000000040 GLIBC_2.2 mkdir
+0000000000000000 DF *UND* 0000000000000060 GLIBC_2.2 creat
+0000000000000000 DF *UND* 00000000000000d0 GLIBC_2.2 getpid
+0000000000000000 DF *UND* 0000000000000170 GLIBC_2.2 strerror
+0000000000000000 DF *UND* 0000000000000220 GLIBC_2.2 memcmp
+0000000000000000 DF *UND* 0000000000000320 GLIBC_2.2 qsort
+0000000000000000 DF *UND* 0000000000000c70 GLIBC_2.2 sysconf
+0000000000000000 DF *UND* 0000000000000190 GLIBC_2.2 bsearch
+0000000000000000 DF *UND* 00000000000001b0 GLIBC_2.2 signal
+0000000000000000 DF *UND* 00000000000000c0 GLIBC_2.2 __xstat
+0000000000000000 DF *UND* 00000000000000c0 GLIBC_2.2 __lxstat
+0000000000000000 DF *UND* 0000000000000050 GLIBC_2.2 wcscoll
+0000000000000000 DF *UND* 0000000000000160 GLIBC_2.2 vsprintf
+0000000000000000 DF *UND* 0000000000000130 GLIBC_2.2 vsnprintf
+0000000000000000 DF *UND* 00000000000003e0 GLIBC_2.2 strncpy
+0000000000000000 DF *UND* 00000000000002e0 GLIBC_2.2 getenv
+0000000000000000 DF *UND* 0000000000000120 GLIBC_2.2 strchr
+0000000000000000 DF *UND* 00000000000008c0 GLIBC_2.2 calloc
+0000000000000000 DF *UND* 00000000000000a0 GLIBC_2.2 __cxa_atexit
+0000000000000000 DF *UND* 0000000000000060 GLIBC_2.2 write
+0000000000000000 DF *UND* 0000000000000040 GLIBC_2.2 stpcpy
+0000000000000000 DF *UND* 0000000000000450 GLIBC_2.2 fgets
+0000000000000000 DF *UND* 0000000000000040 GLIBC_2.2 rename
+0000000000000000 DF *UND* 0000000000000310 GLIBC_2.2 __uflow
+0000000000000000 DF *UND* 0000000000000410 GLIBC_2.2 memset
+0000000000000000 DF *UND* 0000000000000050 GLIBC_2.2 fopen
+0000000000000000 DF *UND* 0000000000000050 GLIBC_2.2 __strtol_internal
+0000000000000000 DF *UND* 0000000000000040 GLIBC_2.2 unlink
+0000000000000000 DF *UND* 0000000000000430 GLIBC_2.2 iconv
+0000000000000000 DF *UND* 00000000000001b0 GLIBC_2.2 perror
+0000000000000000 DF *UND* 0000000000000880 GLIBC_2.2 execvp
+0000000000000000 DF *UND* 0000000000000330 GLIBC_2.2 ungetc
+0000000000000000 DF *UND* 0000000000000140 GLIBC_2.2 _exit
+0000000000000000 DF *UND* 0000000000000080 GLIBC_2.3 __ctype_tolower_loc
+0000000000000000 DF *UND* 0000000000000070 GLIBC_2.2 bindtextdomain
+0000000000000000 DF *UND* 0000000000000040 GLIBC_2.2 chmod
+0000000000000000 DF *UND* 0000000000000060 GLIBC_2.2 timegm
+0000000000000000 DF *UND* 0000000000000060 GLIBC_2.2 read
+0000000000000000 DF *UND* 0000000000000300 GLIBC_2.2 readdir
+0000000000000000 DF *UND* 0000000000000300 GLIBC_2.2 free
+0000000000000000 DF *UND* 0000000000000060 GLIBC_2.2 dcgettext
+0000000000000000 DF *UND* 00000000000000e0 GLIBC_2.2 strrchr
+0000000000000000 DF *UND* 0000000000000040 GLIBC_2.2 access
+0000000000000000 DF *UND* 0000000000000390 GLIBC_2.2 fflush
+0000000000000000 DF *UND* 0000000000000070 GLIBC_2.2 bind_textdomain_codeset
+0000000000000000 DF *UND* 00000000000001c0 GLIBC_2.2 opendir
+0000000000000000 DF *UND* 0000000000000530 GLIBC_2.2 strsignal
+0000000000000000 DF *UND* 0000000000000070 GLIBC_2.2 isatty
+0000000000000000 DF *UND* 0000000000000130 GLIBC_2.2 posix_memalign
+0000000000000000 DF *UND* 0000000000000040 GLIBC_2.2 gettimeofday
+0000000000000000 DF *UND* 00000000000000a0 GLIBC_2.2 iconv_close
+0000000000000000 DF *UND* 0000000000000040 GLIBC_2.2 dup
+0000000000000000 DF *UND* 0000000000000540 GLIBC_2.2 memcpy
+0000000000000000 DO *UND* 0000000000000008 GLIBC_2.2 stderr
+0000000000000000 DF *UND* 0000000000000030 GLIBC_2.2 getppid
+0000000000000000 DF *UND* 0000000000000100 GLIBC_2.2 strlen
+0000000000000000 DF *UND* 0000000000000060 GLIBC_2.2 execv
+0000000000000000 DF *UND* 0000000000000f50 GLIBC_2.2 setlocale
+0000000000000000 DF *UND* 0000000000000060 GLIBC_2.2 sigaction
+00000000000909e0 g DF .text 0000000000000310 Base g_regex_match_full
+0000000000038400 g DF .text 0000000000000660 Base g_date_strftime
+0000000000017530 g DF .text 00000000000000f0 Base g_ptr_array_add
+00000000000c6930 g DF .text 00000000000001e0 Base g_utf8_strreverse
+0000000000039650 g DF .text 0000000000000030 Base g_date_set_time
+00000000000cab10 g DF .text 0000000000000710 Base g_utf8_collate_key_for_filename
+00000000000c26f0 g DF .text 0000000000000160 Base g_unichar_type
+000000000002a930 g DF .text 0000000000000430 Base g_uri_list_extract_uris
+00000000000cf850 g DF .text 0000000000000350 Base g_get_system_data_dirs
+000000000008b450 g DF .text 0000000000000070 Base g_rand_new_with_seed_array
+00000000000a7410 g DF .text 0000000000000080 Base g_slist_concat
+0000000000033c50 g DF .text 0000000000000020 Base g_date_valid_weekday
+000000000003f090 g DF .text 0000000000000190 Base g_hash_table_get_values
+0000000000058710 g DF .text 0000000000000010 Base g_list_pop_allocator
+000000000008c9a0 g DF .text 00000000000000b0 Base g_match_info_is_partial_match
+00000000000d3620 g DF .text 0000000000000290 Base g_get_user_name
+00000000000a84d0 g DF .text 0000000000000030 Base g_slist_free_1
+00000000000cccc0 g DF .text 00000000000002b0 Base g_unicode_canonical_decomposition
+00000000000656e0 g DF .text 0000000000000550 Base g_main_context_unref
+00000000000d42b0 g DF .text 0000000000000100 Base g_vsprintf
+0000000000079f90 g DF .text 00000000000000e0 Base g_node_get_root
+0000000000016df0 g DF .text 0000000000000130 Base g_ptr_array_remove_index_fast
+000000000007b3b0 g DF .text 0000000000000080 Base g_option_group_set_parse_hooks
+00000000000b2c80 g DF .text 0000000000000170 Base g_string_chunk_clear
+0000000000021620 g DF .text 0000000000000040 Base g_bookmark_file_error_quark
+0000000000088490 g DF .text 0000000000000110 Base g_queue_sort
+00000000000c7c00 g DF .text 0000000000000530 Base g_utf16_to_utf8
+00000000000197e0 g DF .text 0000000000000050 Base g_byte_array_prepend
+0000000000053510 g DF .text 0000000000000580 Base g_key_file_get_string_list
+0000000000169a40 g DO .sdata 0000000000000008 Base glib_mem_profiler_table
+00000000000a8760 g DF .text 00000000000000d0 Base g_slist_remove_link
+00000000000a8130 g DF .text 0000000000000060 Base g_slist_prepend
+0000000000063bf0 g DF .text 0000000000000390 Base g_main_context_find_source_by_user_data
+000000000005c540 g DF .text 00000000000000d0 Base g_main_loop_is_running
+000000000003c5e0 g DF .text 0000000000000030 Base g_mkstemp
+00000000000b0440 g DF .text 0000000000000140 Base g_string_set_size
+0000000000088160 g DF .text 0000000000000110 Base g_queue_insert_after
+00000000000738a0 g DF .text 0000000000000150 Base g_log_set_default_handler
+0000000000059c30 g DF .text 00000000000000b0 Base g_list_delete_link
+0000000000058a10 g DF .text 0000000000000090 Base g_list_position
+0000000000059110 g DF .text 0000000000000100 Base g_list_find_custom
+00000000000b0990 g DF .text 00000000000000f0 Base g_string_ascii_down
+00000000000629a0 g DF .text 0000000000000130 Base g_main_loop_new
+000000000005acb0 g DF .text 00000000000000b0 Base g_source_get_context
+0000000000033c00 g DF .text 0000000000000020 Base g_date_valid_year
+00000000000a7d90 g DF .text 0000000000000030 Base g_slist_insert_sorted
+000000000009f6a0 g DF .text 0000000000000f20 Base g_shell_parse_argv
+00000000000bca30 g DF .text 00000000000000f0 Base g_timer_stop
+0000000000099ec0 g DF .text 0000000000000120 Base g_scanner_peek_next_token
+000000000002d5a0 g DF .text 00000000000000f0 Base g_filename_display_basename
+00000000000305c0 g DF .text 0000000000000580 Base g_dataset_id_get_data
+0000000000064a50 g DF .text 0000000000000480 Base g_source_attach
+000000000003e5d0 g DF .text 0000000000000360 Base g_mkdir_with_parents
+000000000001de50 g DF .text 0000000000000110 Base g_bookmark_file_has_item
+0000000000065050 g DF .text 00000000000001c0 Base g_child_watch_add_full
+00000000000a8830 g DF .text 0000000000000050 Base g_freopen
+00000000000a8730 g DF .text 0000000000000030 Base g_slist_alloc
+0000000000054a60 g DF .text 0000000000000480 Base g_key_file_get_locale_string
+0000000000094fd0 g DF .text 00000000000001b0 Base g_scanner_input_file
+0000000000093660 g DF .text 00000000000000a0 Base g_scanner_set_scope
+0000000000022780 g DF .text 0000000000000180 Base g_bookmark_file_get_visited
+000000000002f280 g DF .text 00000000000003a0 Base g_datalist_id_get_data
+0000000000040000 g DF .text 00000000000000e0 Base g_hash_table_new_full
+00000000000d2f40 g DF .text 0000000000000260 Base g_get_user_config_dir
+0000000000059700 g DF .text 0000000000000280 Base g_list_insert_before
+0000000000079270 g DF .text 00000000000000f0 Base g_node_n_children
+00000000000d0680 g DF .text 0000000000000460 Base g_get_user_cache_dir
+000000000006a5a0 g DF .text 00000000000000d0 Base g_markup_parse_context_get_element
+00000000000aefe0 g DF .text 00000000000000a0 Base g_strndup
+
+
diff --git a/scripts/t/Dpkg_Shlibs/objdump.internal b/scripts/t/Dpkg_Shlibs/objdump.internal
new file mode 100644
index 0000000..c492a54
--- /dev/null
+++ b/scripts/t/Dpkg_Shlibs/objdump.internal
@@ -0,0 +1,15 @@
+
+libinternal.so.0: file format elf32-littlearm
+architecture: arm, flags 0x00000150:
+HAS_SYMS, DYNAMIC, D_PAGED
+start address 0x0000f668
+
+Dynamic Section:
+ SONAME libinternal.so.0
+
+DYNAMIC SYMBOL TABLE:
+00018ef4 g DF .text 00000008 Base .gomp_critical_user_foo
+0001c7f0 g DF .text 00000018 Base .gomp_critical_user_bar
+00011614 g DF .text 00000014 GCC_3.0 __aeabi_lcmp
+000115d8 w DF .text 00000000 GCC_4.0 __aeabi_unknown
+00015378 g DF .text 0000000c Base symbol
diff --git a/scripts/t/Dpkg_Shlibs/objdump.libc6-2.3 b/scripts/t/Dpkg_Shlibs/objdump.libc6-2.3
new file mode 100644
index 0000000..e761051
--- /dev/null
+++ b/scripts/t/Dpkg_Shlibs/objdump.libc6-2.3
@@ -0,0 +1,2276 @@
+
+/lib/libc.so.6: file format elf32-i386
+architecture: i386, flags 0x00000150:
+HAS_SYMS, DYNAMIC, D_PAGED
+start address 0x000161b0
+
+Program Header:
+ PHDR off 0x00000034 vaddr 0x00000034 paddr 0x00000034 align 2**2
+ filesz 0x00000120 memsz 0x00000120 flags r-x
+ INTERP off 0x0010f4a0 vaddr 0x0010f4a0 paddr 0x0010f4a0 align 2**0
+ filesz 0x00000013 memsz 0x00000013 flags r--
+ LOAD off 0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**12
+ filesz 0x00110208 memsz 0x00110208 flags r-x
+ LOAD off 0x00110c0c vaddr 0x00111c0c paddr 0x00111c0c align 2**12
+ filesz 0x00006300 memsz 0x00008d28 flags rw-
+ DYNAMIC off 0x00115d3c vaddr 0x00116d3c paddr 0x00116d3c align 2**2
+ filesz 0x000000e0 memsz 0x000000e0 flags rw-
+ NOTE off 0x00000154 vaddr 0x00000154 paddr 0x00000154 align 2**2
+ filesz 0x00000020 memsz 0x00000020 flags r--
+EH_FRAME off 0x0010f4b4 vaddr 0x0010f4b4 paddr 0x0010f4b4 align 2**2
+ filesz 0x00000d54 memsz 0x00000d54 flags r--
+ STACK off 0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**2
+ filesz 0x00000000 memsz 0x00000000 flags rw-
+ RELRO off 0x00110c0c vaddr 0x00111c0c paddr 0x00111c0c align 2**5
+ filesz 0x00005200 memsz 0x00005200 flags r--
+
+Dynamic Section:
+ NEEDED ld-linux.so.2
+ SONAME libc.so.6
+ INIT 0x15280
+ FINI_ARRAY 0x1152d4
+ FINI_ARRAYSZ 0x4
+ HASH 0x174
+ STRTAB 0xbbc8
+ SYMTAB 0x3388
+ STRSZ 0x530f
+ SYMENT 0x10
+ PLTGOT 0x116ff4
+ PLTRELSZ 0xa8
+ PLTREL 0x11
+ JMPREL 0x14fe8
+ REL 0x122a0
+ RELSZ 0x2d48
+ RELENT 0x8
+ VERDEF 0x11fe0
+ VERDEFNUM 0x12
+ VERNEED 0x12250
+ VERNEEDNUM 0x1
+ VERSYM 0x10ed8
+ RELCOUNT 0x548
+
+Version definitions:
+1 0x01 0x0865f4e6 libc.so.6
+2 0x00 0x0d696910 GLIBC_2.0
+3 0x00 0x0d696911 GLIBC_2.1
+ GLIBC_2.0
+4 0x00 0x09691f71 GLIBC_2.1.1
+ GLIBC_2.1
+5 0x00 0x09691f72 GLIBC_2.1.2
+ GLIBC_2.1.1
+6 0x00 0x09691f73 GLIBC_2.1.3
+ GLIBC_2.1.2
+7 0x00 0x0d696912 GLIBC_2.2
+ GLIBC_2.1.3
+8 0x00 0x09691a71 GLIBC_2.2.1
+ GLIBC_2.2
+9 0x00 0x09691a72 GLIBC_2.2.2
+ GLIBC_2.2.1
+10 0x00 0x09691a73 GLIBC_2.2.3
+ GLIBC_2.2.2
+11 0x00 0x09691a74 GLIBC_2.2.4
+ GLIBC_2.2.3
+12 0x00 0x09691a76 GLIBC_2.2.6
+ GLIBC_2.2.4
+13 0x00 0x0d696913 GLIBC_2.3
+ GLIBC_2.2.6
+14 0x00 0x09691972 GLIBC_2.3.2
+ GLIBC_2.3
+15 0x00 0x09691973 GLIBC_2.3.3
+ GLIBC_2.3.2
+16 0x00 0x09691974 GLIBC_2.3.4
+ GLIBC_2.3.3
+17 0x00 0x0963cf85 GLIBC_PRIVATE
+ GLIBC_2.3.4
+18 0x00 0x0b792650 GCC_3.0
+
+Version References:
+ required from ld-linux.so.2:
+ 0x0d696911 0x00 22 GLIBC_2.1
+ 0x0d696913 0x00 21 GLIBC_2.3
+ 0x0963cf85 0x00 20 GLIBC_PRIVATE
+ 0x0d696910 0x00 19 GLIBC_2.0
+
+DYNAMIC SYMBOL TABLE:
+000151f0 l d .text 00000000 .text
+000f47a0 l d __libc_freeres_fn 00000000 __libc_freeres_fn
+000f5480 l d __libc_thread_freeres_fn 00000000 __libc_thread_freeres_fn
+000f5620 l d .rodata 00000000 .rodata
+0010f4a0 l d .interp 00000000 .interp
+0010f4b4 l d .eh_frame_hdr 00000000 .eh_frame_hdr
+00111c0c l d .eh_frame 00000000 .eh_frame
+001152d8 l d .ctors 00000000 .ctors
+001152e8 l d .dtors 00000000 .dtors
+001152f0 l d __libc_subfreeres 00000000 __libc_subfreeres
+00115344 l d __libc_atexit 00000000 __libc_atexit
+00115348 l d __libc_thread_subfreeres 00000000 __libc_thread_subfreeres
+00115360 l d .data.rel.ro 00000000 .data.rel.ro
+00117060 l d .data 00000000 .data
+00117f20 l d .bss 00000000 .bss
+000036fc g D *ABS* 00000000 Base __bss_start
+00056ef0 g DF .text 000000db GLIBC_2.2 getwchar
+0002c1e0 w DF .text 00000049 GLIBC_2.0 seed48_r
+000e3fc0 g DF .text 00000068 GLIBC_2.0 xdr_cryptkeyres
+000286a0 w DF .text 00000063 GLIBC_2.0 longjmp
+000579f0 g DF .text 000000fa GLIBC_2.0 putchar
+00069c20 w DF .text 00000041 GLIBC_2.0 stpcpy
+000b89f0 w DF .text 00000129 GLIBC_2.0 tsearch
+00117a10 g DO .data 00000004 GLIBC_2.0 __morecore
+001078f8 g DO .rodata 00000010 GLIBC_2.1 in6addr_any
+00085440 g DF .text 00000054 GLIBC_2.1 ntp_gettime
+000874d0 g DF .text 000000a8 GLIBC_2.0 setgrent
+0005fee0 g DF .text 00000028 GLIBC_2.0 _IO_remove_marker
+000be0a0 w DF .text 0000007d GLIBC_2.3 iswalpha_l
+00028900 g DF .text 0000013c GLIBC_PRIVATE __libc_sigaction
+000281d0 g DF .text 00000048 GLIBC_2.0 __isnanl
+000c60d0 g DF .text 00000033 GLIBC_2.3.2 pthread_cond_wait
+00015700 g DF .text 00000038 (GLIBC_2.0) __cmpdi2
+000ba670 g DF .text 00000036 (GLIBC_2.0) vm86
+000379e0 g DF .text 00000027 GLIBC_2.1 wcstoimax
+00053110 g DF .text 00000041 GLIBC_2.0 putw
+0006f110 w DF .text 00000048 GLIBC_2.0 mbrlen
+00068500 g DF .text 00000020 GLIBC_2.0 strcpy
+000b3be0 g DF .text 00000036 GLIBC_2.0 chroot
+000b7910 g DF .text 0000005e GLIBC_2.0 qgcvt
+00058900 g DF .text 000000db GLIBC_2.2 _IO_wdefault_xsgetn
+0007ad70 g DF .text 0000002d GLIBC_2.0 asctime
+000ee2b0 g DF .text 000000f0 GLIBC_PRIVATE _dl_vsym
+00060a60 g DF .text 00000115 GLIBC_2.0 _IO_link_in
+000ba2c0 g DF .text 00000066 GLIBC_2.2 __sysctl
+000c6110 g DF .text 0000003a GLIBC_2.3.2 pthread_cond_timedwait
+00118d40 g DO .bss 00000004 GLIBC_2.0 __daylight
+000b2c00 g DF .text 0000006a GLIBC_2.1 setrlimit64
+000d30b0 g DF .text 00000040 GLIBC_2.0 rcmd
+000efb40 g DF .text 00000096 GCC_3.0 _Unwind_Find_FDE
+0002a9a0 w DF .text 00000115 GLIBC_2.0 unsetenv
+00117d78 w DO .data 00000004 GLIBC_2.0 __malloc_hook
+0011732c g DO .data 00000004 GLIBC_2.0 h_nerr
+000d8a10 g DF .text 00000226 GLIBC_2.0 authunix_create
+00028850 w DF .text 00000046 GLIBC_2.0 gsignal
+000c5cf0 g DF .text 0000002a GLIBC_2.1 pthread_attr_init
+0005fd90 g DF .text 00000049 GLIBC_2.0 _IO_sputbackc
+00060cc0 g DF .text 000000a5 GLIBC_2.0 _IO_default_finish
+000b4170 g DF .text 0000002c GLIBC_2.2 mkstemp64
+00025bc0 w DF .text 000000f3 GLIBC_2.0 textdomain
+000dfe70 g DF .text 0000002a GLIBC_2.1.1 xdr_longlong_t
+000b9020 g DF .text 0000001d GLIBC_2.0 warnx
+000a28c0 g DF .text 000000f2 GLIBC_2.3.4 regexec
+00069960 w DF .text 0000001e GLIBC_2.0 bcmp
+000f2a60 g DF .text 0000005f (GLIBC_2.0) getgrgid_r
+00028630 g DF .text 00000038 GLIBC_2.0 setjmp
+00020870 g DF .text 0000050d (GLIBC_2.0) localeconv
+00022800 g DF .text 00000017 GLIBC_2.1 __isxdigit_l
+00118640 w DO .bss 00000004 GLIBC_2.0 __malloc_initialize_hook
+00066c00 g DF .text 00000021 GLIBC_2.0 __default_morecore
+000c6000 g DF .text 0000002a (GLIBC_2.0) pthread_cond_broadcast
+000891a0 w DF .text 0000007c GLIBC_2.0 waitpid
+00000000 g DO *ABS* 00000000 GCC_3.0 GCC_3.0
+001157a0 g DO .data.rel.ro 00000100 (GLIBC_2.1) sys_sigabbrev
+000d76d0 g DF .text 000000e1 GLIBC_2.3.3 inet6_option_alloc
+000e1210 g DF .text 00000195 GLIBC_2.0 xdrrec_create
+00000000 g DO *ABS* 00000000 GLIBC_2.2.6 GLIBC_2.2.6
+000e9700 g DF .text 00000015 GLIBC_2.1 fdetach
+000dda40 g DF .text 000000f7 GLIBC_2.0 xprt_register
+000ac030 g DF .text 00000032 (GLIBC_2.1) __lxstat64
+00089890 w DF .text 00000061 GLIBC_2.0 pause
+000b3130 w DF .text 0000003c GLIBC_2.0 ioctl
+000dbe00 g DF .text 00000675 GLIBC_2.0 clnt_broadcast
+000b35c0 w DF .text 00000072 GLIBC_2.0 writev
+00056450 g DF .text 0000012f GLIBC_2.0 _IO_setbuffer
+000ba9e0 g DF .text 00000036 GLIBC_2.0 get_kernel_syms
+000290b0 g DF .text 000000b9 GLIBC_2.0 siginterrupt
+00000000 DO *UND* 00000014 GLIBC_2.0 _r_debug
+000ebd40 g DF .text 00000021 GLIBC_2.1 pututxline
+0005ba90 w DF .text 0000003a GLIBC_2.0 vscanf
+000becc0 g DF .text 000003b8 GLIBC_2.0 putspent
+000cffb0 g DF .text 000000a2 GLIBC_2.0 getservent
+000d5810 g DF .text 0000009c GLIBC_2.1 if_indextoname
+000abfb0 g DF .text 00000032 (GLIBC_2.1) __xstat64
+000865f0 g DF .text 00000071 GLIBC_2.2 getdirentries64
+000280d0 w DF .text 00000082 GLIBC_2.0 ldexpf
+00069660 w DF .text 000000fe GLIBC_2.0 strtok_r
+00058040 g DF .text 0000007c GLIBC_2.2 _IO_wdoallocbuf
+000b7260 g DF .text 0000002e GLIBC_2.0 munlockall
+000cb740 g DF .text 0000008a GLIBC_2.0 __nss_hosts_lookup
+000e9ab0 w DF .text 00000068 GLIBC_2.0 getutid
+000ad4a0 g DF .text 00000035 GLIBC_2.1 chown
+0006e900 g DF .text 00000084 GLIBC_2.0 wcstok
+0008a470 w DF .text 0000000c GLIBC_2.0 getgid
+0008a430 g DF .text 00000008 GLIBC_2.0 __getpid
+000b9cc0 g DF .text 00000132 GLIBC_2.2 getloadavg
+000cc6f0 g DF .text 00000072 GLIBC_2.3.4 __strcpy_chk
+00054ca0 g DF .text 00000113 GLIBC_2.0 _IO_fread
+00060150 g DF .text 0000002d GLIBC_2.2 _IO_list_lock
+00087760 g DF .text 000001de GLIBC_2.1.2 getgrnam_r
+00043ce0 g DF .text 00000039 GLIBC_2.0 printf
+0008b0f0 w DF .text 00000673 GLIBC_2.0 sysconf
+0002dcb0 g DF .text 00000052 GLIBC_2.0 __strtod_internal
+001178e0 g DO .data 00000004 GLIBC_2.0 stdout
+000567f0 w DF .text 000000c4 GLIBC_2.0 vsprintf
+0002b740 w DF .text 00000062 GLIBC_2.0 random
+000b3970 g DF .text 00000094 GLIBC_2.0 __select
+000b4460 g DF .text 00000017 GLIBC_2.0 setfsent
+000abcf0 g DF .text 0000003a GLIBC_2.0 utime
+000f29f0 g DF .text 00000024 (GLIBC_2.1) versionsort64
+000dee30 g DF .text 0000027e GLIBC_2.0 svcudp_enablecache
+00070650 w DF .text 00000052 GLIBC_2.0 wcstof
+00118d40 w DO .bss 00000004 GLIBC_2.0 daylight
+00060de0 g DF .text 00000081 GLIBC_2.0 _IO_default_doallocate
+000f1830 g DF .text 000001bc (GLIBC_2.0) _IO_file_xsputn
+0006d3f0 g DF .text 00000038 GLIBC_2.1.1 __memset_gcn_by2
+0002c080 g DF .text 0000002e GLIBC_2.0 lrand48_r
+0005c8d0 g DF .text 0000003b GLIBC_2.2 __fsetlocking
+000b3790 w DF .text 00000039 GLIBC_2.0 getdtablesize
+00067fd0 g DF .text 00000021 GLIBC_2.0 _obstack_memory_used
+0002dbc0 w DF .text 0000002e GLIBC_2.1 __strtoull_l
+000b2390 g DF .text 00000010 GLIBC_2.0 cfgetospeed
+000e4100 g DF .text 0000003b GLIBC_2.1 xdr_netnamestr
+00057d10 w DF .text 000000f5 GLIBC_2.2 vswprintf
+000ce800 g DF .text 000000b2 GLIBC_2.0 sethostent
+000be020 w DF .text 0000007d GLIBC_2.3 iswalnum_l
+000d0200 g DF .text 000000ad GLIBC_2.0 setservent
+000f2640 g DF .text 0000018f (GLIBC_2.1) readdir64_r
+000d1ab0 g DF .text 00000060 GLIBC_2.0 __ivaliduser
+00021520 w DF .text 00000159 GLIBC_2.3 duplocale
+000e9580 g DF .text 0000001f GLIBC_2.1 isastream
+0005d0b0 g DF .text 0000003b GLIBC_2.0 putc_unlocked
+0008a810 g DF .text 000000dd GLIBC_2.0 getlogin
+00057f60 g DF .text 00000033 GLIBC_2.2 _IO_least_wmarker
+000c5c90 g DF .text 0000002a GLIBC_2.0 pthread_attr_destroy
+000540c0 g DF .text 00000251 GLIBC_2.1 _IO_fdopen
+000bb060 w DF .text 00000078 GLIBC_2.0 recv
+000ba030 g DF .text 0000003c GLIBC_2.3 llistxattr
+000baee0 w DF .text 00000078 GLIBC_2.0 connect
+000eede0 g DF .text 0000004e GLIBC_2.0 __register_frame
+00055ec0 g DF .text 0000008b GLIBC_2.1 _IO_popen
+000acf00 g DF .text 00000125 GLIBC_2.1 lockf64
+000567f0 g DF .text 000000c4 GLIBC_2.0 _IO_vsprintf
+00086070 g DF .text 000000cb GLIBC_2.2 readdir64
+000be3a0 w DF .text 0000007d GLIBC_2.3 iswprint_l
+00056710 w DF .text 000000d4 GLIBC_2.0 ungetc
+0002c5b0 g DF .text 00000059 GLIBC_2.0 __strtoull_internal
+000ebd10 g DF .text 00000021 GLIBC_2.1 getutxline
+000dd320 g DF .text 00000036 GLIBC_2.0 svcerr_auth
+000b2a30 g DF .text 000000a9 GLIBC_2.1 tcgetsid
+000d4570 g DF .text 00000052 GLIBC_2.0 endnetgrent
+00087340 g DF .text 000000db GLIBC_2.1.2 getgrent_r
+00000000 w D *UND* 00000000 __pthread_once
+00022700 g DF .text 00000015 GLIBC_2.1 __iscntrl_l
+00055a50 g DF .text 0000017d GLIBC_2.1 _IO_proc_close
+0002dbc0 w DF .text 0000002e GLIBC_2.3 strtoull_l
+00086560 g DF .text 00000024 GLIBC_2.2 versionsort64
+000d79a0 g DF .text 0000014d GLIBC_2.3.4 setipv4sourcefilter
+000e9b20 w DF .text 00000068 GLIBC_2.0 getutline
+00054320 g DF .text 000000eb GLIBC_2.0 _IO_fflush
+000582d0 g DF .text 00000082 GLIBC_2.2 _IO_seekwmark
+000cc6a0 g DF .text 00000047 GLIBC_2.3.4 __strcat_chk
+000d4b30 g DF .text 00000165 GLIBC_2.1.2 getaliasbyname_r
+000d0980 g DF .text 00000165 GLIBC_2.1.2 getrpcbynumber_r
+00116840 g DO .data.rel.ro 00000054 GLIBC_2.2 _IO_wfile_jumps
+00029200 g DF .text 00000034 GLIBC_2.0 sigemptyset
+000be2a0 w DF .text 0000007d GLIBC_2.3 iswlower_l
+00015430 w DF .text 00000016 GLIBC_2.1 gnu_get_libc_version
+0005c770 g DF .text 0000002c GLIBC_2.2 __fbufsize
+000b5190 w DF .text 000000ce GLIBC_2.0 utimes
+000ba990 g DF .text 00000042 GLIBC_2.3.2 epoll_wait
+000291d0 g DF .text 00000022 GLIBC_2.0 __sigdelset
+000579a0 g DF .text 0000004f GLIBC_2.2 putwchar_unlocked
+0005ad00 g DF .text 00000068 GLIBC_2.0 _IO_ferror
+000687f0 g DF .text 000000b2 GLIBC_2.0 strerror
+0008b770 w DF .text 00000201 GLIBC_2.0 fpathconf
+000e9690 g DF .text 00000048 GLIBC_2.1 putpmsg
+000540c0 g DF .text 00000251 GLIBC_2.1 fdopen
+000ddfd0 g DF .text 00000043 GLIBC_2.0 svc_exit
+0006e270 w DF .text 000000db GLIBC_2.2 memrchr
+00068780 w DF .text 00000064 GLIBC_2.0 strndup
+0008a460 w DF .text 0000000c GLIBC_2.0 geteuid
+000ba0b0 g DF .text 00000048 GLIBC_2.3 lsetxattr
+000c6ed0 g DF .text 000002b4 GLIBC_2.0 inet_pton
+000bb960 g DF .text 00000055 GLIBC_2.2 msgctl
+000f1520 g DF .text 00000101 (GLIBC_2.0) fsetpos
+0006f110 g DF .text 00000048 GLIBC_2.0 __mbrlen
+00065ed0 w DF .text 00000199 GLIBC_2.0 malloc_get_state
+0006af40 w DF .text 000000a4 GLIBC_2.0 argz_add_sep
+0006e120 g DF .text 00000071 GLIBC_2.1.1 __strncpy_by2
+000a4490 g DF .text 00000036 GLIBC_2.0 __sched_get_priority_max
+00115480 g DO .data.rel.ro 000001f8 GLIBC_2.3 sys_errlist
+00055bd0 g DF .text 000002e9 GLIBC_2.1 _IO_proc_open
+000e3d50 g DF .text 0000008f GLIBC_2.1 key_secretkey_is_set
+000d4710 g DF .text 000000db GLIBC_2.1.2 getaliasent_r
+00029590 g DF .text 00000067 GLIBC_PRIVATE __libc_allocate_rtsig_private
+00036f80 g DF .text 000000a4 GLIBC_2.0 __xpg_basename
+00028ec0 w DF .text 00000019 GLIBC_2.0 sigpause
+00069980 g DF .text 0000008d GLIBC_2.0 memmove
+000b9e30 g DF .text 00000042 GLIBC_2.3 fgetxattr
+000b8000 g DF .text 00000045 GLIBC_2.0 hsearch
+0006ddf0 g DF .text 0000003b GLIBC_2.1.1 __strpbrk_c2
+0011a820 g DO .bss 00000004 GLIBC_2.0 __rcmd_errstr
+000c6400 g DF .text 00000034 GLIBC_2.0 pthread_exit
+000a4310 g DF .text 00000045 GLIBC_2.0 getopt_long
+000e4a10 g DF .text 000001c6 GLIBC_2.1 authdes_getucred
+0005c8a0 g DF .text 0000002c GLIBC_2.2 __fpending
+00029880 g DF .text 00000074 GLIBC_2.1 sighold
+000ceed0 g DF .text 000000a9 GLIBC_2.0 endnetent
+00043d20 w DF .text 0000003b GLIBC_2.0 snprintf
+000b6d40 g DF .text 0000004d GLIBC_2.0 syscall
+000610f0 g DF .text 000000be GLIBC_2.0 _IO_default_xsgetn
+0008acd0 w DF .text 000001ea GLIBC_2.0 pathconf
+00069660 g DF .text 000000fe GLIBC_2.0 __strtok_r
+000b4d70 g DF .text 0000002a GLIBC_2.2 __endmntent
+000d1f40 g DF .text 0000009f GLIBC_2.2 ruserok_af
+000db810 g DF .text 0000013c GLIBC_2.0 pmap_set
+000b6fd0 w DF .text 0000003a GLIBC_2.0 munmap
+00022700 w DF .text 00000015 GLIBC_2.3 iscntrl_l
+000a43a0 g DF .text 0000003a GLIBC_2.0 __sched_getparam
+0005ad70 w DF .text 00000027 GLIBC_2.0 fileno_unlocked
+000bfab0 w DF .text 0000007a GLIBC_2.0 ulckpwdf
+000a43a0 w DF .text 0000003a GLIBC_2.0 sched_getparam
+000afea0 g DF .text 00000032 GLIBC_2.0 fts_set
+0007db40 w DF .text 0000056c GLIBC_2.1 getdate_r
+000286a0 w DF .text 00000063 GLIBC_2.0 _longjmp
+000b57a0 g DF .text 000004b7 GLIBC_2.0 getttyent
+000703b0 g DF .text 00000058 GLIBC_2.1 wcstoull
+0011a824 g DO .bss 00000004 GLIBC_2.0 rexecoptions
+0005c5f0 g DF .text 0000017a GLIBC_2.1 ftello64
+000caf70 g DF .text 000006a4 GLIBC_2.2.2 __nss_hostname_digits_dots
+000e7010 g DF .text 00000068 GLIBC_2.1 xdr_uint8_t
+000e08f0 g DF .text 00000032 GLIBC_2.0 xdrmem_create
+00069ba0 g DF .text 00000010 GLIBC_2.0 __ffs
+00029bb0 g DF .text 00000028 GLIBC_2.0 atol
+000bdfb0 g DF .text 0000006d GLIBC_2.1 __towupper_l
+00027bb0 g DF .text 00000027 GLIBC_2.0 __isnan
+000dcab0 g DF .text 00000033 GLIBC_2.0 xdr_des_block
+000f23c0 g DF .text 0000006f (GLIBC_2.0) _IO_file_init
+000d44a0 g DF .text 00000034 GLIBC_PRIVATE __internal_setnetgrent
+000e2660 g DF .text 0000002a GLIBC_2.1 ecb_crypt
+000acaa0 w DF .text 0000007c GLIBC_2.0 __write
+000dcaf0 g DF .text 00000062 GLIBC_2.0 xdr_opaque_auth
+000f1100 g DF .text 00000088 (GLIBC_2.0) popen
+000661b0 w DF .text 00000225 GLIBC_2.0 malloc_stats
+0005fa90 g DF .text 0000002a GLIBC_2.0 _IO_sgetn
+00070530 g DF .text 00000052 GLIBC_2.0 __wcstold_internal
+000b4390 g DF .text 00000030 GLIBC_2.0 endfsent
+000d38f0 g DF .text 00000445 GLIBC_2.0 ruserpass
+0005d000 w DF .text 00000028 GLIBC_2.0 getc_unlocked
+0011a5a0 g DO .bss 00000004 GLIBC_2.0 _nl_domain_bindings
+00086f30 g DF .text 00000125 GLIBC_2.0 getgrgid
+000890b0 w DF .text 00000036 GLIBC_2.0 times
+000d9240 g DF .text 000000dd GLIBC_2.0 clnt_spcreateerror
+000ac0f0 w DF .text 0000012f GLIBC_2.1 statfs64
+00027fb0 w DF .text 0000009a GLIBC_2.0 modff
+0011a6b8 g DO .bss 00000004 GLIBC_2.0 re_syntax_options
+000afe70 g DF .text 00000024 GLIBC_2.1 ftw64
+0002be50 g DF .text 00000037 GLIBC_2.0 nrand48
+000f3b50 g DF .text 00000031 (GLIBC_2.0) chown
+00037980 g DF .text 00000027 GLIBC_2.1 strtoimax
+0011a6e0 g DO .bss 00000004 GLIBC_2.1 argp_program_bug_address
+000cf210 g DF .text 00000125 GLIBC_2.0 getprotobynumber
+000d85d0 g DF .text 0000016c GLIBC_2.0 authunix_create_default
+000d3ed0 g DF .text 000001d2 GLIBC_PRIVATE __internal_getnetgrent_r
+000d93b0 g DF .text 00000090 GLIBC_2.0 clnt_perrno
+0002a780 g DF .text 000000ef GLIBC_2.0 getenv
+0005d470 g DF .text 0000003b GLIBC_2.0 _IO_file_seek
+0006e580 w DF .text 00000064 GLIBC_2.0 wcslen
+000bd4c0 w DF .text 000000d5 GLIBC_2.0 iswcntrl
+000be5a0 w DF .text 0000006d GLIBC_2.3 towlower_l
+000cc440 g DF .text 00000005 GLIBC_2.2 __cyg_profile_func_exit
+000ab0a0 w DF .text 00000094 GLIBC_2.1 pwrite64
+000ac7a0 w DF .text 0000003a GLIBC_2.0 fchmod
+000f21e0 g DF .text 00000063 (GLIBC_2.0) _IO_file_setbuf
+00087190 g DF .text 000001ac GLIBC_2.1 putgrent
+00104d78 g DO .rodata 00000004 (GLIBC_2.1) _sys_nerr
+000bd920 w DF .text 000000d5 GLIBC_2.0 iswpunct
+000674f0 g DF .text 000001e5 GLIBC_2.0 mtrace
+000b4e30 g DF .text 0000035f GLIBC_2.2 __getmntent_r
+000ba530 g DF .text 00000013 GLIBC_2.0 setfsuid
+0002ddd0 w DF .text 00000052 GLIBC_2.0 strtold
+0008a480 w DF .text 0000000c GLIBC_2.0 getegid
+00022640 g DF .text 0000007b GLIBC_2.0 isblank
+00115680 g DO .data.rel.ro 00000104 GLIBC_2.3.3 sys_siglist
+000ebc80 g DF .text 00000017 GLIBC_2.1 setutxent
+0005b7e0 g DF .text 00000038 GLIBC_2.0 setlinebuf
+0006a7d0 g DF .text 000000c6 GLIBC_2.1 __rawmemchr
+000b2f80 g DF .text 0000003c GLIBC_2.0 setpriority
+0002b2b0 g DF .text 0000000d GLIBC_2.0 labs
+000702f0 g DF .text 00000058 GLIBC_2.1 wcstoll
+00054a80 g DF .text 000000cc GLIBC_2.2 fopencookie
+000ab140 g DF .text 00000034 GLIBC_2.2 posix_spawn_file_actions_init
+000b2f30 g DF .text 00000042 GLIBC_2.0 getpriority
+000bd300 w DF .text 000000d5 GLIBC_2.0 iswalpha
+000557d0 w DF .text 0000016f GLIBC_2.0 gets
+000f2570 g DF .text 000000cb (GLIBC_2.1) readdir64
+000c85f0 g DF .text 00000029 GLIBC_2.2 __res_ninit
+000babe0 w DF .text 00000036 GLIBC_2.0 personality
+00000000 w D *UND* 00000000 __pthread_key_create
+000bd3e0 w DF .text 000000d5 GLIBC_2.1 iswblank
+0005fe70 g DF .text 0000006a GLIBC_2.0 _IO_init_marker
+0006a740 g DF .text 00000082 GLIBC_2.0 memmem
+0002c370 g DF .text 00000059 GLIBC_2.0 __strtol_internal
+0005f670 g DF .text 0000008f GLIBC_2.1 _IO_file_finish
+00000000 g DO *ABS* 00000000 GLIBC_2.3.4 GLIBC_2.3.4
+0008a710 w DF .text 00000035 GLIBC_2.0 getresuid
+00029e20 g DF .text 0000006c GLIBC_2.0 bsearch
+00029900 g DF .text 00000074 GLIBC_2.1 sigrelse
+000bc350 g DF .text 000001c1 GLIBC_2.0 __monstartup
+000b4250 g DF .text 0000003c GLIBC_2.0 usleep
+000f3b90 g DF .text 0000002b (GLIBC_2.1) nftw
+000f2490 g DF .text 000000d5 (GLIBC_2.0) _IO_file_close_it
+000ce670 g DF .text 000000da GLIBC_2.1.2 gethostent_r
+0006edd0 w DF .text 00000034 GLIBC_2.2 wmempcpy
+000cbf50 w DF .text 000002bd GLIBC_2.1 backtrace_symbols
+00117d88 g DO .data 00000008 GLIBC_2.0 __tzname
+00058490 g DF .text 00000054 GLIBC_2.2 __woverflow
+00117960 g DO .data 00000050 GLIBC_2.0 _IO_stdout_
+000e4610 g DF .text 0000005d GLIBC_2.1 getnetname
+00089a40 w DF .text 00000068 GLIBC_2.0 execve
+00117560 g DO .data 00000098 GLIBC_2.1 _IO_2_1_stdout_
+000cf7b0 g DF .text 00000125 GLIBC_2.0 getprotobyname
+00029560 g DF .text 00000027 GLIBC_2.1 __libc_current_sigrtmax
+00070410 g DF .text 00000059 GLIBC_2.0 __wcstoull_internal
+000568c0 w DF .text 00000093 GLIBC_2.0 vsscanf
+000bba10 g DF .text 0000004f GLIBC_2.0 semget
+000c5fd0 g DF .text 0000002a GLIBC_2.0 pthread_condattr_init
+000e6ec0 g DF .text 00000069 GLIBC_2.1 xdr_int16_t
+0006adb0 w DF .text 00000122 GLIBC_2.0 argz_insert
+0008a430 w DF .text 00000008 GLIBC_2.0 getpid
+000b3760 w DF .text 00000026 GLIBC_2.0 getpagesize
+00000000 w D *UND* 00000000 __pthread_rwlock_wrlock
+000d74b0 g DF .text 00000033 GLIBC_2.3.3 inet6_option_init
+0002bfe0 w DF .text 00000099 GLIBC_2.0 erand48_r
+000ba070 g DF .text 0000003a GLIBC_2.3 lremovexattr
+000ebda0 g DF .text 0000002a GLIBC_2.1 updwtmpx
+00035000 w DF .text 00000027 GLIBC_2.1 __strtold_l
+000dfdb0 g DF .text 000000bd GLIBC_2.1.1 xdr_u_hyper
+00054410 g DF .text 000001b8 GLIBC_2.2 _IO_fgetpos
+0006b410 g DF .text 00000042 GLIBC_2.0 envz_get
+000b8050 g DF .text 000001e0 GLIBC_2.0 hsearch_r
+000ad070 g DF .text 0000003a GLIBC_2.0 __dup2
+0002a630 g DF .text 00000147 GLIBC_2.0 qsort
+000d44e0 w DF .text 00000086 GLIBC_2.0 getnetgrent_r
+000d47f0 g DF .text 000000a6 GLIBC_2.0 endaliasent
+0006e870 g DF .text 00000035 GLIBC_2.0 wcsrchr
+000ad4e0 w DF .text 00000035 GLIBC_2.0 fchown
+000b5430 w DF .text 0000003a GLIBC_2.0 truncate
+0002bae0 w DF .text 00000103 GLIBC_2.0 setstate_r
+00052290 g DF .text 00000024 GLIBC_2.0 fscanf
+000e3ae0 g DF .text 00000073 GLIBC_2.1 key_decryptsession
+000545d0 w DF .text 00000151 GLIBC_2.0 fgets
+00060640 g DF .text 00000177 GLIBC_2.0 _IO_flush_all_linebuffered
+000b9af0 g DF .text 000000cb GLIBC_2.0 dirname
+000f2c20 g DF .text 00000e58 (GLIBC_2.1) glob64
+00073ea0 w DF .text 00000037 GLIBC_2.1 __wcstod_l
+00057bd0 g DF .text 00000036 GLIBC_2.2 vwprintf
+000bf2c0 g DF .text 00000165 GLIBC_2.1.2 getspnam_r
+000ced40 g DF .text 000000a4 GLIBC_2.0 getnetent
+0002c4f0 g DF .text 00000059 GLIBC_2.0 __strtoll_internal
+000f2a20 g DF .text 00000037 (GLIBC_2.0) getgrent_r
+000ba280 g DF .text 0000003a GLIBC_2.3.4 vm86
+000bd140 w DF .text 000000d5 GLIBC_2.0 iswxdigit
+0005a4f0 g DF .text 0000014c GLIBC_2.2 _IO_wdo_write
+000b3af0 g DF .text 000000a2 GLIBC_PRIVATE __libc_pselect
+0006e350 g DF .text 000000ac GLIBC_2.3.4 __xpg_strerror_r
+000d7590 g DF .text 000000c1 GLIBC_2.3.3 inet6_option_find
+00055380 w DF .text 0000024e GLIBC_2.0 __getdelim
+0006d650 g DF .text 0000003f GLIBC_2.1.1 __strcmp_gg
+000aca20 w DF .text 0000007c GLIBC_2.0 __read
+000b9380 w DF .text 00000185 GLIBC_2.0 error_at_line
+0006b620 g DF .text 000000fb GLIBC_2.0 envz_add
+000beb20 g DF .text 00000195 GLIBC_2.0 fgetspent
+000cea20 g DF .text 000001d0 GLIBC_2.1.2 getnetbyaddr_r
+000b7fd0 g DF .text 0000002d GLIBC_2.0 hcreate
+00087fe0 w DF .text 000000d2 GLIBC_2.0 getpw
+000e3be0 g DF .text 0000005a GLIBC_2.1 key_setsecret
+000abff0 g DF .text 00000032 (GLIBC_2.1) __fxstat64
+000b1610 g DF .text 0000005f GLIBC_2.3.3 posix_fadvise64
+000ccca0 g DF .text 000000ff GLIBC_2.3.4 __fprintf_chk
+00053270 g DF .text 0000002d GLIBC_2.0 _IO_funlockfile
+000f3e40 g DF .text 0000005f (GLIBC_2.0) getspnam_r
+000e3900 g DF .text 0000005f GLIBC_2.1 key_get_conv
+000c7280 g DF .text 00000287 GLIBC_2.0 inet_nsap_addr
+000ba100 g DF .text 0000003a GLIBC_2.3 removexattr
+0005b220 w DF .text 000000cc GLIBC_2.0 getc
+000227e0 w DF .text 00000017 GLIBC_2.3 isupper_l
+00057170 g DF .text 000000a2 GLIBC_2.2 fgetws_unlocked
+000bac60 w DF .text 00000048 GLIBC_2.0 prctl
+000f3bc0 g DF .text 0000002b (GLIBC_2.1) nftw64
+000be4a0 g DF .text 0000007d GLIBC_2.1 __iswspace_l
+000ad1e0 w DF .text 00000036 GLIBC_2.0 fchdir
+000580c0 g DF .text 00000075 GLIBC_2.2 _IO_switch_to_wget_mode
+000bb840 w DF .text 000000c4 GLIBC_2.0 msgrcv
+000bbb20 g DF .text 00000066 GLIBC_2.0 shmat
+00117d7c w DO .data 00000004 GLIBC_2.0 __realloc_hook
+000ba570 g DF .text 00000028 GLIBC_2.3.3 gnu_dev_major
+000a27a0 w DF .text 00000048 GLIBC_2.0 re_search_2
+00069ef0 g DF .text 00000046 GLIBC_2.0 memcpy
+00052700 g DF .text 0000009d GLIBC_2.1 tmpfile
+0007d9a0 w DF .text 0000003c GLIBC_2.0 setitimer
+0006e990 w DF .text 0000012c GLIBC_2.1 wcswcs
+000601e0 g DF .text 000000ee GLIBC_2.0 _IO_default_xsputn
+00104d78 g DO .rodata 00000004 (GLIBC_2.1) sys_nerr
+001179c0 g DO .data 00000050 GLIBC_2.0 _IO_stderr_
+000f2bc0 g DF .text 0000005f (GLIBC_2.0) getpwuid_r
+00029560 g DF .text 00000027 GLIBC_PRIVATE __libc_current_sigrtmax_private
+000dbb10 g DF .text 000001ae GLIBC_2.0 pmap_getport
+00056580 w DF .text 0000018f GLIBC_2.0 setvbuf
+0006aad0 w DF .text 0000003e GLIBC_2.0 argz_count
+00089da0 g DF .text 00000195 GLIBC_2.0 execl
+0006d500 g DF .text 00000031 GLIBC_2.1.1 __mempcpy_byn
+00085950 g DF .text 0000007a GLIBC_2.0 seekdir
+00055210 g DF .text 00000167 GLIBC_2.0 _IO_fwrite
+000a4510 w DF .text 0000003a GLIBC_2.0 sched_rr_get_interval
+0005b5a0 g DF .text 00000021 GLIBC_2.1 pclose
+0005fde0 g DF .text 0000004c GLIBC_2.0 _IO_sungetc
+000bb460 g DF .text 00000050 GLIBC_2.0 isfdtype
+00022820 g DF .text 00000011 GLIBC_2.1 __tolower_l
+0008c350 g DF .text 00000e58 GLIBC_2.0 glob
+000dd1e0 g DF .text 0000004e GLIBC_2.0 svc_sendreply
+000ebce0 g DF .text 00000021 GLIBC_2.1 getutxid
+00052410 g DF .text 000000c8 GLIBC_2.0 perror
+0001dc90 g DF .text 00000016 GLIBC_PRIVATE __gconv_get_cache
+000db460 g DF .text 0000002d GLIBC_2.0 _rpc_dtablesize
+000e3b60 g DF .text 00000073 GLIBC_2.1 key_encryptsession
+00000000 g DO *ABS* 00000000 GLIBC_2.1.1 GLIBC_2.1.1
+000c60a0 g DF .text 0000002a (GLIBC_2.0) pthread_cond_signal
+0006a600 g DF .text 0000003e GLIBC_2.0 swab
+00022580 g DF .text 00000015 GLIBC_2.1 __isblank_l
+0002d5c0 w DF .text 0000002e GLIBC_2.3 strtoll_l
+000ad0f0 w DF .text 00000078 GLIBC_2.0 creat
+00088970 g DF .text 000001de GLIBC_2.1.2 getpwuid_r
+000adf50 w DF .text 0000003c GLIBC_2.0 readlink
+00067440 g DF .text 00000005 GLIBC_2.0 tr_break
+000b2b20 g DF .text 00000032 GLIBC_2.2 setrlimit
+0006dbb0 g DF .text 000000b2 GLIBC_2.1.1 __stpcpy_small
+00027f20 w DF .text 00000024 GLIBC_2.0 isinff
+000b3970 w DF .text 00000094 GLIBC_PRIVATE __libc_select
+00059e40 g DF .text 00000233 GLIBC_2.2 _IO_wfile_overflow
+00065960 g DF .text 00000225 GLIBC_2.0 __libc_memalign
+000c6150 g DF .text 00000036 GLIBC_2.0 pthread_equal
+0005c7f0 g DF .text 00000013 GLIBC_2.2 __fwritable
+00055f50 w DF .text 0000017f GLIBC_2.0 puts
+000d4670 g DF .text 00000098 GLIBC_2.0 getnetgrent
+0002b1e0 g DF .text 000000b6 GLIBC_2.1.3 __cxa_finalize
+000611b0 g DF .text 00000067 GLIBC_2.0 __overflow
+0006d480 g DF .text 00000033 GLIBC_2.1.1 __mempcpy_by4
+000b8ff0 g DF .text 00000022 GLIBC_2.0 errx
+000ad070 w DF .text 0000003a GLIBC_2.0 dup2
+000f09a0 g DF .text 00000095 (GLIBC_2.0) _IO_fopen
+00029530 g DF .text 00000027 GLIBC_2.1 __libc_current_sigrtmin
+00022250 g DF .text 0000007d GLIBC_2.0 islower
+00070350 g DF .text 00000059 GLIBC_2.0 __wcstoll_internal
+000b95d0 g DF .text 00000068 GLIBC_2.0 ustat
+0006f160 w DF .text 0000024b GLIBC_2.0 mbrtowc
+000bb660 g DF .text 0000002c GLIBC_2.2.4 sockatmark
+00023d90 w DF .text 00000041 GLIBC_2.2 dngettext
+000b2940 g DF .text 00000033 GLIBC_2.0 tcflush
+00089bf0 g DF .text 000001ad GLIBC_2.0 execle
+00056960 g DF .text 000001a3 GLIBC_2.2 fgetpos64
+00053200 g DF .text 0000002d GLIBC_2.0 _IO_flockfile
+0005c820 g DF .text 00000076 GLIBC_2.2 __fpurge
+00021f60 g DF .text 00000068 GLIBC_2.0 tolower
+0008a450 w DF .text 0000000c GLIBC_2.0 getuid
+000b6010 g DF .text 000002f6 GLIBC_2.0 getpass
+0006aa80 w DF .text 00000047 GLIBC_2.0 argz_add
+00022ec0 w DF .text 00000023 GLIBC_2.0 dgettext
+00027b80 g DF .text 0000002d GLIBC_2.0 __isinf
+000858d0 g DF .text 00000077 GLIBC_2.0 rewinddir
+000b2980 g DF .text 00000077 GLIBC_2.0 tcsendbreak
+000bd680 w DF .text 000000d5 GLIBC_2.0 iswlower
+0006dee0 g DF .text 00000063 GLIBC_2.1.1 __strsep_2c
+0002bfb0 g DF .text 0000002e GLIBC_2.0 drand48_r
+00035550 w DF .text 0000007d GLIBC_2.0 system
+0005ac90 w DF .text 00000068 GLIBC_2.0 feof
+00057010 g DF .text 00000151 GLIBC_2.2 fgetws
+000b4870 w DF .text 00000083 GLIBC_2.0 hasmntopt
+000dd0f0 g DF .text 00000039 GLIBC_2.2.3 __rpc_thread_svc_max_pollfd
+0005e190 g DF .text 00000032 GLIBC_2.0 _IO_file_close
+0006e820 g DF .text 00000041 GLIBC_2.0 wcspbrk
+0006aee0 w DF .text 00000054 GLIBC_2.0 argz_stringify
+000701d0 g DF .text 00000058 GLIBC_2.0 wcstol
+00022820 w DF .text 00000011 GLIBC_2.3 tolower_l
+00067d40 g DF .text 000000ba GLIBC_2.0 _obstack_begin_1
+000dde40 g DF .text 0000009d GLIBC_2.0 svcraw_create
+00065780 g DF .text 000001d4 GLIBC_2.0 malloc
+0011a5a4 g DO .bss 00000004 GLIBC_2.0 _nl_msg_cat_cntr
+00053160 g DF .text 00000057 GLIBC_2.0 remove
+000ac840 w DF .text 0000007c GLIBC_2.0 __open
+0005fff0 g DF .text 00000036 GLIBC_2.0 _IO_unsave_markers
+000155f0 g DF .text 0000002a (GLIBC_2.0) __floatdidf
+000ade90 w DF .text 00000032 GLIBC_2.0 isatty
+000ab520 g DF .text 0000004e GLIBC_2.2 posix_spawn
+000b23a0 g DF .text 00000018 GLIBC_2.0 cfgetispeed
+000bdf30 w DF .text 0000007d GLIBC_2.3 iswxdigit_l
+00022ec0 g DF .text 00000023 GLIBC_2.0 __dgettext
+000a2a10 g DF .text 000003af GLIBC_2.0 confstr
+0006e010 g DF .text 00000045 GLIBC_2.1.1 __strcat_c
+000bda00 w DF .text 000000d5 GLIBC_2.0 iswspace
+00000000 g DO *ABS* 00000000 GLIBC_2.1 GLIBC_2.1
+00088630 g DF .text 000000a6 GLIBC_2.0 endpwent
+000286a0 w DF .text 00000063 GLIBC_2.0 siglongjmp
+00054dc0 g DF .text 00000131 GLIBC_2.2 fsetpos
+000c5f20 g DF .text 00000033 GLIBC_2.0 pthread_attr_getscope
+000dea50 g DF .text 000002a5 GLIBC_2.0 svctcp_create
+001174c0 g DO .data 00000098 GLIBC_2.1 _IO_2_1_stdin_
+00089640 w DF .text 0000024e GLIBC_2.0 sleep
+000f0a40 g DF .text 000001c7 (GLIBC_2.0) fdopen
+0011a6bc g DO .bss 00000004 GLIBC_2.0 optarg
+00022780 g DF .text 00000017 GLIBC_2.1 __isprint_l
+000a43e0 w DF .text 0000003c GLIBC_2.0 sched_setscheduler
+00043da0 g DF .text 00000034 GLIBC_2.1 __asprintf
+000688b0 g DF .text 00000154 GLIBC_2.0 __strerror_r
+00069b60 g DF .text 00000032 GLIBC_2.0 __bzero
+0006ee10 w DF .text 0000017c GLIBC_2.0 btowc
+000bada0 g DF .text 00000036 GLIBC_2.0 sysinfo
+00027e80 w DF .text 00000083 GLIBC_2.0 ldexp
+0011a6d0 g DO .bss 00000004 GLIBC_2.0 loc2
+0002c550 g DF .text 00000058 GLIBC_2.0 strtoll
+0005bb50 w DF .text 000000f5 GLIBC_2.0 vsnprintf
+00080aa0 g DF .text 00001e8b GLIBC_2.3 __strftime_l
+000e3f30 g DF .text 0000008f GLIBC_2.1 xdr_unixcred
+00015be0 g DF .text 00000113 GLIBC_2.1 iconv_open
+00115480 g DO .data.rel.ro 000001ec (GLIBC_2.0) sys_errlist
+0002c5b0 g DF .text 00000059 (GLIBC_2.0) __strtouq_internal
+000e2410 g DF .text 0000006b GLIBC_2.1 authdes_create
+0007a030 w DF .text 00000063 GLIBC_2.3 wcscasecmp_l
+000ce0c0 g DF .text 0000027e GLIBC_2.1.2 gethostbyname2_r
+0006d580 g DF .text 0000003c GLIBC_2.1.1 __strncpy_gg
+0005b3d0 g DF .text 000000c2 GLIBC_2.0 open_memstream
+000e4180 g DF .text 00000032 GLIBC_2.0 xdr_keystatus
+0011a4cc g DO .bss 00000004 GLIBC_PRIVATE _dl_open_hook
+000bb0e0 w DF .text 00000078 GLIBC_2.0 recvfrom
+00117dd4 g DO .data 00000014 GLIBC_2.0 h_errlist
+000b2850 w DF .text 000000a8 GLIBC_2.0 tcdrain
+000dd280 g DF .text 00000042 GLIBC_2.0 svcerr_decode
+000e0480 g DF .text 00000166 GLIBC_2.0 xdr_bytes
+000ede60 g DF .text 00000033 GLIBC_2.1 _dl_mcount_wrapper
+000379b0 g DF .text 00000027 GLIBC_2.1 strtoumax
+000f0a40 g DF .text 000001c7 (GLIBC_2.0) _IO_fdopen
+000ac070 w DF .text 0000003a GLIBC_2.0 statfs
+000e6ca0 g DF .text 000000d3 GLIBC_2.1.1 xdr_int64_t
+0006e6b0 g DF .text 000000bf GLIBC_2.0 wcsncmp
+00089ab0 g DF .text 000000f1 GLIBC_2.0 fexecve
+000c9960 g DF .text 00000360 GLIBC_PRIVATE __nss_lookup_function
+000bac20 g DF .text 0000003a GLIBC_2.2.1 pivot_root
+000ebdd0 g DF .text 00000033 GLIBC_2.1.1 getutmpx
+0006d9a0 g DF .text 00000036 GLIBC_2.1.1 __strstr_cg
+00000000 w D *UND* 00000000 __pthread_rwlock_rdlock
+000225a0 g DF .text 00000042 GLIBC_2.0 _toupper
+000e0cf0 g DF .text 0000005d GLIBC_2.0 xdrrec_endofrecord
+000286a0 g DF .text 00000063 GLIBC_PRIVATE __libc_longjmp
+0002b910 w DF .text 000000b9 GLIBC_2.0 random_r
+0002c490 g DF .text 00000058 GLIBC_2.0 strtoul
+0006c810 w DF .text 00000a85 GLIBC_2.3 strxfrm_l
+000bcb80 w DF .text 000004b8 GLIBC_2.2.3 sprofil
+000e9720 w DF .text 00000068 GLIBC_2.0 getutent
+00061f40 g DF .text 000000a5 GLIBC_PRIVATE __libc_malloc_pthread_startup
+00070e50 w DF .text 0000003e GLIBC_2.1 __wcstoul_l
+000a4420 w DF .text 00000036 GLIBC_2.0 sched_getscheduler
+0006e990 g DF .text 0000012c GLIBC_2.0 wcsstr
+00057c50 g DF .text 0000003f GLIBC_2.2 wscanf
+00085740 w DF .text 0000018f GLIBC_2.0 readdir_r
+000ebcc0 g DF .text 00000017 GLIBC_2.1 endutxent
+000b4100 g DF .text 0000003e GLIBC_2.0 mktemp
+00035000 w DF .text 00000027 GLIBC_2.3 strtold_l
+00057fa0 g DF .text 0000002b GLIBC_2.2 _IO_switch_to_main_wget_area
+000ba630 w DF .text 0000003c GLIBC_2.1 modify_ldt
+000223d0 g DF .text 0000007b GLIBC_2.0 ispunct
+000c6500 g DF .text 00000048 GLIBC_PRIVATE __libc_pthread_init
+0007b830 w DF .text 0000003a GLIBC_2.0 settimeofday
+000cd920 g DF .text 00000162 GLIBC_2.0 gethostbyaddr
+00022780 w DF .text 00000017 GLIBC_2.3 isprint_l
+00022e70 g DF .text 00000043 GLIBC_2.0 __dcgettext
+0002b690 g DF .text 000000a3 GLIBC_2.0 wctomb
+00027f70 w DF .text 00000011 GLIBC_2.0 finitef
+0006a720 g DF .text 0000001b GLIBC_2.0 memfrob
+00067e00 g DF .text 00000199 GLIBC_2.0 _obstack_newchunk
+000702f0 w DF .text 00000058 GLIBC_2.0 wcstoq
+00054f00 g DF .text 000001d8 GLIBC_2.0 _IO_ftell
+00080aa0 w DF .text 00001e8b GLIBC_2.3 strftime_l
+0011728c g DO .data 00000004 GLIBC_2.0 opterr
+000d8e80 g DF .text 000002dc GLIBC_2.0 clnt_create
+00029070 w DF .text 0000003a GLIBC_2.0 sigaltstack
+000616c0 g DF .text 0000004e GLIBC_2.0 _IO_str_init_readonly
+000adfd0 w DF .text 00000036 GLIBC_2.0 rmdir
+0007b870 w DF .text 00000119 GLIBC_2.0 adjtime
+000ba780 g DF .text 00000036 GLIBC_2.0 __adjtimex
+0002b640 g DF .text 00000046 GLIBC_2.0 wcstombs
+00027df0 w DF .text 0000000d GLIBC_2.1 scalbln
+0006d9e0 g DF .text 00000046 GLIBC_2.1.1 __strstr_g
+000bf830 w DF .text 00000082 GLIBC_2.0 sgetspent_r
+000226c0 w DF .text 00000015 GLIBC_2.3 isalnum_l
+000bb3e0 w DF .text 00000039 GLIBC_2.0 socket
+000b3970 w DF .text 00000094 GLIBC_2.0 select
+000baa20 g DF .text 00000048 GLIBC_2.0 init_module
+000efc80 g DF .text 0000007c GLIBC_2.0 __frame_state_for
+00000000 w D *UND* 00000000 _pthread_cleanup_pop_restore
+00027f70 g DF .text 00000011 GLIBC_2.0 __finitef
+00085670 w DF .text 000000cb GLIBC_2.0 readdir
+0005c810 g DF .text 0000000f GLIBC_2.2 __flbf
+000ac0b0 w DF .text 0000003a GLIBC_2.0 fstatfs
+000581e0 g DF .text 0000003f GLIBC_2.2 _IO_adjust_wcolumn
+000ad520 w DF .text 00000035 GLIBC_2.0 lchown
+0006ed00 w DF .text 000000c8 GLIBC_2.0 wcpncpy
+000e21e0 g DF .text 00000228 GLIBC_2.1 authdes_pk_create
+000a2880 w DF .text 00000039 GLIBC_2.0 re_match
+00086e40 g DF .text 00000032 GLIBC_2.0 setgroups
+000dc610 g DF .text 00000100 GLIBC_2.0 pmap_rmtcall
+0002b070 g DF .text 00000036 GLIBC_PRIVATE __on_exit
+0002c430 g DF .text 00000059 GLIBC_2.0 __strtoul_internal
+00061290 g DF .text 0000015c GLIBC_2.0 _IO_str_seekoff
+00065520 w DF .text 00000147 GLIBC_2.0 pvalloc
+000ba8c0 g DF .text 0000003c GLIBC_2.0 delete_module
+0005e560 g DF .text 0000055b GLIBC_2.1 _IO_file_seekoff
+000d96f0 g DF .text 00000094 GLIBC_2.0 clnt_perror
+0005cf90 g DF .text 0000000b GLIBC_2.0 clearerr_unlocked
+000d05c0 g DF .text 000000e2 GLIBC_2.1.2 getrpcent_r
+000d1fe0 g DF .text 00000031 GLIBC_2.0 ruserok
+0011a6c4 g DO .bss 00000004 GLIBC_2.0 error_message_count
+00022450 g DF .text 0000007d GLIBC_2.0 isspace
+00057cd0 g DF .text 0000003a GLIBC_2.2 vwscanf
+000c5da0 g DF .text 00000033 GLIBC_2.0 pthread_attr_getinheritsched
+00119118 w DO .bss 00000004 GLIBC_2.0 ___brk_addr
+000f4490 g DF .text 00000037 (GLIBC_2.0) getaliasent_r
+00000000 w D *UND* 00000000 __pthread_rwlock_unlock
+000b8280 g DF .text 000000ce GLIBC_2.0 hcreate_r
+00022840 w DF .text 00000011 GLIBC_2.3 toupper_l
+000bf8c0 w DF .text 000001d7 GLIBC_2.0 fgetspent_r
+00069a70 g DF .text 00000044 GLIBC_2.1 mempcpy
+000b0d70 g DF .text 00000273 GLIBC_2.0 fts_open
+00043ce0 g DF .text 00000039 GLIBC_2.0 _IO_printf
+00062aa0 g DF .text 00000087 GLIBC_2.0 __libc_mallinfo
+000156c0 g DF .text 00000038 (GLIBC_2.0) __ucmpdi2
+00054320 w DF .text 000000eb GLIBC_2.0 fflush
+001190fc w DO .bss 00000004 GLIBC_2.0 _environ
+0011a6b4 g DO .bss 00000004 GLIBC_2.1 getdate_err
+0008a660 g DF .text 00000013 GLIBC_2.0 __bsd_getpgrp
+000ad170 g DF .text 00000023 GLIBC_2.1 creat64
+000dfba0 g DF .text 0000000a GLIBC_2.0 xdr_void
+000e4140 g DF .text 0000003b GLIBC_2.0 xdr_keybuf
+000e6ca0 g DF .text 000000d3 GLIBC_2.3.4 xdr_quad_t
+00022e30 w DF .text 00000015 GLIBC_2.2 bind_textdomain_codeset
+000abc90 g DF .text 00000018 GLIBC_2.2 posix_madvise
+000c4600 w DF .text 000001b5 GLIBC_2.1 argp_error
+000aae90 g DF .text 00000082 GLIBC_PRIVATE __libc_pwrite
+000f4430 g DF .text 0000005f (GLIBC_2.0) getrpcbynumber_r
+000d0810 g DF .text 00000165 GLIBC_2.1.2 getrpcbyname_r
+000f42e0 g DF .text 00000066 (GLIBC_2.0) getservbyport_r
+000b5470 w DF .text 0000003a GLIBC_2.0 ftruncate
+000d12a0 g DF .text 00000158 GLIBC_2.0 ether_ntohost
+00027f50 w DF .text 00000018 GLIBC_2.0 isnanf
+000b42d0 g DF .text 00000032 GLIBC_2.0 stty
+000dbcc0 g DF .text 00000077 GLIBC_2.0 xdr_pmap
+0005eac0 g DF .text 000000da GLIBC_2.1 _IO_file_sync
+000f43d0 g DF .text 0000005f (GLIBC_2.0) getrpcbyname_r
+000baba0 g DF .text 0000003c GLIBC_2.0 nfsservctl
+000dd3d0 g DF .text 0000004e GLIBC_2.0 svcerr_progvers
+0006d320 g DF .text 00000031 GLIBC_2.1.1 __memcpy_g
+00028770 w DF .text 000000da GLIBC_2.0 ssignal
+000be720 g DF .text 00000071 GLIBC_2.2 __wctrans_l
+00086670 g DF .text 0000018a GLIBC_2.0 fgetgrent
+0008b9f0 w DF .text 00000082 GLIBC_2.0 glob_pattern_p
+000ba330 g DF .text 0000008e GLIBC_2.0 __clone
+000dd230 g DF .text 00000042 GLIBC_2.0 svcerr_noproc
+00056ec0 w DF .text 0000002a GLIBC_2.2 getwc_unlocked
+0006dc70 g DF .text 00000039 GLIBC_2.1.1 __strcspn_c1
+00057870 g DF .text 00000038 GLIBC_2.2 putwc_unlocked
+00000000 w D *UND* 00000000 __pthread_kill_other_threads_np
+000f1260 g DF .text 00000124 (GLIBC_2.0) _IO_fgetpos
+00015aa0 g DF .text 00000035 (GLIBC_2.0) __udivdi3
+000f29c0 g DF .text 00000024 (GLIBC_2.1) alphasort64
+000d0360 g DF .text 00000125 GLIBC_2.0 getrpcbyname
+0002b520 g DF .text 00000046 GLIBC_2.0 mbstowcs
+0002a870 g DF .text 00000091 GLIBC_2.0 putenv
+0006ab10 w DF .text 000000a3 GLIBC_2.0 argz_create
+000acb20 w DF .text 0000003c GLIBC_2.0 lseek
+00065c60 g DF .text 0000021c GLIBC_2.0 __libc_realloc
+00020e00 g DF .text 00000049 GLIBC_2.2 __nl_langinfo_l
+0006ebd0 w DF .text 00000058 GLIBC_2.0 wmemcpy
+00029270 g DF .text 00000040 GLIBC_2.0 sigaddset
+000ba5a0 g DF .text 0000001d GLIBC_2.3.3 gnu_dev_minor
+000159e0 g DF .text 000000ba (GLIBC_2.0) __moddi3
+00028c20 g DF .text 00000066 GLIBC_PRIVATE __libc_sigwait
+0002a910 w DF .text 00000082 GLIBC_2.0 clearenv
+001190fc g DO .bss 00000004 GLIBC_2.0 __environ
+0005f700 g DF .text 0000019b GLIBC_2.1 _IO_file_close_it
+00020870 g DF .text 0000050d GLIBC_2.2 localeconv
+000890f0 w DF .text 000000a9 GLIBC_2.0 __wait
+000ab4f0 g DF .text 00000012 GLIBC_2.2 posix_spawnattr_getpgroup
+000b6f00 w DF .text 0000005e GLIBC_2.0 mmap
+00057e90 g DF .text 000000a0 GLIBC_2.2 vswscanf
+000e1970 g DF .text 000000ef GLIBC_2.0 getsecretkey
+00069d80 w DF .text 00000085 GLIBC_2.0 strncasecmp
+00089a28 w DF .text 00000013 GLIBC_2.1.1 _Exit
+00117280 g DO .data 00000004 GLIBC_2.0 obstack_exit_failure
+000e05f0 g DF .text 00000050 GLIBC_2.0 xdr_vector
+000dd4d0 g DF .text 000001f7 GLIBC_2.2 svc_getreq_common
+0002caf0 w DF .text 0000002e GLIBC_2.3 strtol_l
+0006fd70 w DF .text 0000034d GLIBC_2.0 wcsnrtombs
+000dc480 g DF .text 000000fe GLIBC_2.0 xdr_rmtcall_args
+000cf560 g DF .text 000000e2 GLIBC_2.1.2 getprotoent_r
+000d30f0 g DF .text 000005d3 GLIBC_2.2 rexec_af
+00069b60 w DF .text 00000032 GLIBC_2.0 bzero
+0006da30 g DF .text 000000df GLIBC_2.1.1 __mempcpy_small
+0005c7d0 g DF .text 00000013 GLIBC_2.2 __freadable
+0008a610 w DF .text 0000003a GLIBC_2.0 setpgid
+000eb230 w DF .text 000000f3 GLIBC_2.2.1 posix_openpt
+000bb1e0 w DF .text 00000078 GLIBC_2.0 send
+000b38b0 g DF .text 00000074 GLIBC_2.0 getdomainname
+00104d74 g DO .rodata 00000004 (GLIBC_2.0) _sys_nerr
+000dd420 g DF .text 00000036 GLIBC_2.0 svc_getreq
+00056450 w DF .text 0000012f GLIBC_2.0 setbuffer
+000a4710 g DF .text 00000042 GLIBC_2.0 freeaddrinfo
+000e6400 g DF .text 00000012 GLIBC_2.1 svcunixfd_create
+00029c10 g DF .text 00000210 GLIBC_2.0 abort
+00071940 w DF .text 0000003e GLIBC_2.1 __wcstoull_l
+000cf650 g DF .text 000000a6 GLIBC_2.0 endprotoent
+000eb330 w DF .text 00000031 GLIBC_2.1 getpt
+00022800 w DF .text 00000017 GLIBC_2.3 isxdigit_l
+000e9c70 w DF .text 00000072 GLIBC_2.0 getutline_r
+0002c0b0 w DF .text 00000054 GLIBC_2.0 nrand48_r
+000dd8e0 g DF .text 000000b5 GLIBC_2.0 xprt_unregister
+0006b380 g DF .text 00000081 GLIBC_2.0 envz_entry
+000ba940 g DF .text 00000042 GLIBC_2.3.2 epoll_ctl
+000c5ea0 g DF .text 00000033 GLIBC_2.0 pthread_attr_getschedpolicy
+00115680 g DO .data.rel.ro 00000100 (GLIBC_2.1) sys_siglist
+00000000 DO *UND* 00000438 GLIBC_PRIVATE _rtld_global
+00069ba0 w DF .text 00000010 GLIBC_2.1 ffsl
+00078520 w DF .text 0000004b GLIBC_2.0 wcscoll
+000be610 w DF .text 0000008c GLIBC_2.3 wctype_l
+000ecf50 g DF .text 00000a90 GLIBC_PRIVATE _dl_close
+00020e90 g DF .text 0000068a GLIBC_2.1 __newlocale
+000ebd70 g DF .text 00000021 GLIBC_2.1 utmpxname
+00056ec0 w DF .text 0000002a GLIBC_2.2 fgetwc_unlocked
+0003f2d0 g DF .text 000024e5 GLIBC_2.0 __printf_fp
+00117d88 w DO .data 00000008 GLIBC_2.0 tzname
+0007aee0 w DF .text 00000030 GLIBC_2.0 gmtime_r
+0002bf40 g DF .text 00000039 GLIBC_2.0 seed48
+000ac760 w DF .text 0000003a GLIBC_2.0 chmod
+000d4fb0 g DF .text 0000085d GLIBC_2.1 getnameinfo
+00079660 w DF .text 000008f6 GLIBC_2.3 wcsxfrm_l
+00053230 w DF .text 00000032 GLIBC_2.0 ftrylockfile
+0002b9d0 w DF .text 0000010e GLIBC_2.0 srandom_r
+00021fd0 g DF .text 0000007d GLIBC_2.0 isxdigit
+000b8600 w DF .text 000003eb GLIBC_2.0 tdelete
+000d77c0 g DF .text 00000075 GLIBC_2.3.3 inet6_option_append
+00054b50 g DF .text 00000146 GLIBC_2.0 _IO_fputs
+0008a5d0 g DF .text 00000036 GLIBC_2.0 __getpgid
+000abbd0 g DF .text 0000003a GLIBC_2.2 posix_spawnattr_getschedparam
+0011a6c8 g DO .bss 00000004 GLIBC_2.0 error_print_progname
+000dffb0 g DF .text 0000004e GLIBC_2.0 xdr_char
+0006d7f0 g DF .text 00000035 GLIBC_2.1.1 __strcspn_cg
+0005f620 g DF .text 00000047 GLIBC_2.1 _IO_file_init
+00089600 g DF .text 00000036 GLIBC_2.0 alarm
+0005c7a0 g DF .text 0000001a GLIBC_2.2 __freading
+00061440 g DF .text 00000042 GLIBC_2.0 _IO_str_pbackfail
+000d9320 g DF .text 00000090 GLIBC_2.0 clnt_pcreateerror
+00055ec0 g DF .text 0000008b GLIBC_2.1 popen
+000f5480 g DF __libc_thread_freeres_fn 00000041 GLIBC_PRIVATE __libc_thread_freeres
+00059430 g DF .text 000001c6 GLIBC_2.2 _IO_wfile_xsputn
+000b71a0 g DF .text 0000003a GLIBC_2.0 mlock
+000b3ba0 g DF .text 00000036 GLIBC_2.0 acct
+000f3f80 g DF .text 00000066 (GLIBC_2.0) gethostbyname_r
+0005eba0 g DF .text 000001eb GLIBC_2.1 _IO_file_overflow
+000ca560 g DF .text 000000b0 GLIBC_2.0 __nss_next
+000e5590 g DF .text 000000bb GLIBC_2.1 xdecrypt
+000808f0 w DF .text 00000045 GLIBC_2.3.2 strptime_l
+00089570 g DF .text 00000082 GLIBC_PRIVATE __libc_waitid
+000b3110 g DF .text 00000015 GLIBC_2.0 sstk
+0007a030 g DF .text 00000063 GLIBC_2.1 __wcscasecmp_l
+00021680 g DF .text 00000084 GLIBC_2.1 __freelocale
+0002c550 w DF .text 00000058 GLIBC_2.0 strtoq
+0002c3d0 g DF .text 00000058 GLIBC_2.0 strtol
+000285a0 g DF .text 0000002f GLIBC_2.0 __sigsetjmp
+000afe20 g DF .text 00000041 GLIBC_2.3.3 nftw64
+000ad0b0 w DF .text 00000036 GLIBC_2.0 pipe
+000cc670 g DF .text 0000002d GLIBC_2.3.4 __stpcpy_chk
+000dc580 g DF .text 00000087 GLIBC_2.0 xdr_rmtcallres
+000d0d60 g DF .text 00000157 GLIBC_2.0 ether_hostton
+000cc210 g DF .text 0000022e GLIBC_2.1 __backtrace_symbols_fd
+000b2d90 g DF .text 00000072 GLIBC_2.0 vlimit
+0008a650 g DF .text 00000008 GLIBC_2.0 getpgrp
+00068ac0 g DF .text 000000b7 GLIBC_2.0 strnlen
+000ba6b0 g DF .text 0000003a (GLIBC_2.0) getrlimit
+0006a7d0 w DF .text 000000c6 GLIBC_2.1 rawmemchr
+000704d0 w DF .text 00000052 GLIBC_2.0 wcstod
+000ce8c0 g DF .text 00000157 GLIBC_2.0 getnetbyaddr
+000e0850 g DF .text 000000a0 GLIBC_2.0 xdr_double
+00027f10 g DF .text 0000000f GLIBC_2.1 __signbit
+0002b440 g DF .text 000000d2 GLIBC_2.0 mblen
+00022740 w DF .text 00000017 GLIBC_2.3 islower_l
+000ba800 g DF .text 0000003a GLIBC_2.1 capget
+000ab3e0 g DF .text 00000034 GLIBC_2.2 posix_spawnattr_init
+000abe90 g DF .text 0000008d GLIBC_2.0 __lxstat
+00089070 w DF .text 00000036 GLIBC_2.0 uname
+000bd840 w DF .text 000000d5 GLIBC_2.0 iswprint
+00020e90 w DF .text 0000068a GLIBC_2.3 newlocale
+00079660 g DF .text 000008f6 GLIBC_2.1 __wcsxfrm_l
+000bae20 w DF .text 00000078 GLIBC_2.0 accept
+00029590 g DF .text 00000067 GLIBC_2.1 __libc_allocate_rtsig
+000b8fc0 g DF .text 00000023 GLIBC_2.0 verrx
+00035ae0 g DF .text 00000066 GLIBC_2.0 a64l
+000c6190 g DF .text 0000003a GLIBC_2.0 pthread_getschedparam
+000eeda0 g DF .text 0000003f GLIBC_2.0 __register_frame_table
+000b23c0 g DF .text 0000005c GLIBC_2.0 cfsetispeed
+000f1390 g DF .text 00000181 (GLIBC_2.1) _IO_fgetpos64
+000e6e40 g DF .text 0000003f GLIBC_2.1 xdr_int32_t
+000eaf60 w DF .text 00000103 GLIBC_2.0 utmpname
+00056b40 g DF .text 00000137 GLIBC_2.2 _IO_fsetpos64
+0006a480 g DF .text 00000179 GLIBC_2.1 __strcasestr
+000b8230 g DF .text 00000049 GLIBC_2.0 hdestroy_r
+000531c0 g DF .text 0000003a GLIBC_2.0 rename
+00022860 g DF .text 00000048 GLIBC_2.3 __isctype
+000f4350 g DF .text 00000037 (GLIBC_2.0) getservent_r
+000be6a0 g DF .text 00000072 GLIBC_2.1 __iswctype_l
+000291a0 g DF .text 00000022 GLIBC_2.0 __sigaddset
+000f3ad0 g DF .text 00000033 (GLIBC_2.3.3) sched_getaffinity
+000dcb60 g DF .text 00000406 GLIBC_2.0 xdr_callmsg
+00060090 g DF .text 00000016 GLIBC_2.2 _IO_iter_begin
+000cc770 g DF .text 000000eb GLIBC_2.3.4 __strncat_chk
+000c6300 g DF .text 00000033 GLIBC_2.0 pthread_setcancelstate
+000e0210 g DF .text 000000a3 GLIBC_2.0 xdr_union
+00070230 g DF .text 00000059 GLIBC_2.0 __wcstoul_internal
+000b5720 g DF .text 00000072 GLIBC_2.0 setttyent
+00029390 g DF .text 000000a7 GLIBC_2.0 __sysv_signal
+00068df0 g DF .text 000001b9 GLIBC_2.0 strrchr
+0006fa40 w DF .text 00000330 GLIBC_2.0 mbsnrtowcs
+0006b720 g DF .text 0000002c GLIBC_2.0 basename
+000228b0 g DF .text 00000071 GLIBC_2.3 __ctype_tolower_loc
+00066dd0 g DF .text 0000002b GLIBC_2.0 mprobe
+00089570 w DF .text 00000082 GLIBC_2.1 waitid
+00118648 w DO .bss 00000004 GLIBC_2.0 __after_morecore_hook
+00089900 w DF .text 00000078 GLIBC_2.0 nanosleep
+0006e4a0 g DF .text 00000032 GLIBC_2.0 wcscpy
+000e00d0 g DF .text 0000002a GLIBC_2.0 xdr_enum
+00067c80 g DF .text 000000ba GLIBC_2.0 _obstack_begin
+000be5a0 g DF .text 0000006d GLIBC_2.1 __towlower_l
+00066840 w DF .text 000003b7 GLIBC_2.0 calloc
+00039c80 g DF .text 0000009b GLIBC_2.0 cuserid
+00028250 w DF .text 00000187 GLIBC_2.0 modfl
+00069e10 w DF .text 00000041 GLIBC_2.3 strcasecmp_l
+00015ae0 g DF .text 0000003b (GLIBC_2.0) __umoddi3
+000e0050 g DF .text 00000079 GLIBC_2.0 xdr_bool
+0005e4d0 g DF .text 00000025 GLIBC_2.0 _IO_file_stat
+00093ca0 w DF .text 0000004b GLIBC_2.0 re_set_registers
+000bc270 w DF .text 0000008b GLIBC_2.2 moncontrol
+000e4360 g DF .text 000001a2 GLIBC_2.1 host2netname
+0002b2c0 w DF .text 00000031 GLIBC_2.1.1 imaxabs
+000619b0 w DF .text 00000034 GLIBC_2.0 malloc_usable_size
+0002dd70 g DF .text 00000052 GLIBC_2.0 __strtold_internal
+000ba630 g DF .text 0000003c GLIBC_PRIVATE __modify_ldt
+000b85e0 w DF .text 00000012 GLIBC_2.1 tdestroy
+00089250 w DF .text 00000042 GLIBC_2.0 wait4
+0007a0a0 w DF .text 0000007c GLIBC_2.3 wcsncasecmp_l
+000eed00 g DF .text 00000095 GCC_3.0 __register_frame_info_bases
+00059cd0 g DF .text 0000016a GLIBC_2.2 _IO_wfile_sync
+00065520 g DF .text 00000147 GLIBC_2.0 __libc_pvalloc
+0002d5c0 w DF .text 0000002e GLIBC_2.1 __strtoll_l
+000f2250 g DF .text 0000016b (GLIBC_2.0) _IO_file_fopen
+000cd3b0 g DF .text 0000002d GLIBC_2.0 inet_lnaof
+000f1260 g DF .text 00000124 (GLIBC_2.0) fgetpos
+0002dd10 w DF .text 00000052 GLIBC_2.0 strtod
+00000000 g DO *ABS* 00000000 GLIBC_2.1.2 GLIBC_2.1.2
+000e02c0 g DF .text 0000003b GLIBC_2.0 xdr_wrapstring
+00027b80 w DF .text 0000002d GLIBC_2.0 isinf
+000a4420 g DF .text 00000036 GLIBC_2.0 __sched_getscheduler
+000dc8f0 g DF .text 00000085 GLIBC_2.0 xdr_rejected_reply
+00068df0 w DF .text 000001b9 GLIBC_2.0 rindex
+0006de80 g DF .text 0000005f GLIBC_2.1.1 __strtok_r_1c
+000a6d20 g DF .text 0000007e GLIBC_2.1 gai_strerror
+000cd3e0 g DF .text 0000005c GLIBC_2.0 inet_makeaddr
+0011a6d4 g DO .bss 00000004 GLIBC_2.0 locs
+000cf700 g DF .text 000000ad GLIBC_2.0 setprotoent
+000ac490 w DF .text 00000153 GLIBC_2.1 statvfs64
+000b1b00 g DF .text 00000042 GLIBC_2.1 sendfile
+0005e160 g DF .text 0000002a GLIBC_2.1 _IO_do_write
+000bfb30 w DF .text 000002b5 GLIBC_2.0 lckpwdf
+00000000 w D *UND* 00000000 __pthread_getspecific
+000f4210 g DF .text 0000005f (GLIBC_2.0) getprotobyname_r
+000c5fa0 g DF .text 0000002a GLIBC_2.0 pthread_condattr_destroy
+000acaa0 w DF .text 0000007c GLIBC_2.0 write
+000c5f60 g DF .text 00000033 GLIBC_2.0 pthread_attr_setscope
+000b2b60 g DF .text 00000099 GLIBC_2.2 getrlimit64
+0011748c g DO .data 00000004 (GLIBC_2.2) __ctype32_toupper
+000d2210 g DF .text 00000e93 GLIBC_2.2 rcmd_af
+00065670 g DF .text 00000107 GLIBC_2.0 __libc_valloc
+0006eac0 g DF .text 00000069 GLIBC_2.0 wmemchr
+000cd440 g DF .text 0000002f GLIBC_2.0 inet_netof
+000ba200 g DF .text 0000003c GLIBC_2.0 ioperm
+000b2cb0 w DF .text 000000d2 GLIBC_2.0 ulimit
+000328c0 w DF .text 00000027 GLIBC_2.1 __strtod_l
+00115480 g DO .data.rel.ro 000001f4 (GLIBC_2.1) _sys_errlist
+000cbe30 w DF .text 0000011e GLIBC_2.1 backtrace
+00020e50 w DF .text 00000038 GLIBC_2.0 __ctype_get_mb_cur_max
+00029b60 g DF .text 0000001f GLIBC_2.0 atof
+000cbe30 g DF .text 0000011e GLIBC_2.1 __backtrace
+001190fc w DO .bss 00000004 GLIBC_2.0 environ
+000cbf50 g DF .text 000002bd GLIBC_2.1 __backtrace_symbols
+000ba2c0 w DF .text 00000066 GLIBC_2.0 sysctl
+000dfb80 g DF .text 0000001f GLIBC_2.0 xdr_free
+00000000 DO *UND* 000001cc GLIBC_PRIVATE _rtld_global_ro
+000e01d0 g DF .text 0000003a GLIBC_2.0 xdr_netobj
+000b3cd0 g DF .text 00000036 GLIBC_2.0 fdatasync
+00043cb0 g DF .text 00000024 GLIBC_2.0 fprintf
+000f19f0 g DF .text 0000002a (GLIBC_2.0) _IO_do_write
+000b7410 g DF .text 000002d5 GLIBC_2.0 fcvt_r
+00117900 g DO .data 00000050 GLIBC_2.0 _IO_stdin_
+0002c140 w DF .text 00000052 GLIBC_2.0 jrand48_r
+00029000 g DF .text 0000006e GLIBC_2.0 sigstack
+0011a8e8 g DO .bss 00000004 GLIBC_2.1 __key_encryptsession_pk_LOCAL
+00028af0 w DF .text 0000003a GLIBC_2.0 kill
+0005d380 g DF .text 00000098 GLIBC_2.1 fputs_unlocked
+000bd760 w DF .text 000000d5 GLIBC_2.0 iswgraph
+000886e0 g DF .text 000000a8 GLIBC_2.0 setpwent
+000c4550 w DF .text 000000af GLIBC_2.1 argp_state_help
+000e3a50 g DF .text 00000081 GLIBC_2.1 key_encryptsession_pk
+0007ae30 g DF .text 0000001b GLIBC_2.0 ctime
+00069ba0 g DF .text 00000010 GLIBC_2.0 ffs
+00021710 g DF .text 0000010e GLIBC_2.3 __uselocale
+000eda10 w DF .text 00000189 GLIBC_2.2.4 dl_iterate_phdr
+000cb860 g DF .text 0000008a GLIBC_2.0 __nss_group_lookup
+000dd830 g DF .text 000000af GLIBC_2.0 svc_register
+000e6fa0 g DF .text 00000068 GLIBC_2.1 xdr_int8_t
+000dfbb0 g DF .text 00000041 GLIBC_2.0 xdr_long
+00068140 g DF .text 000001aa GLIBC_2.0 strcat
+0009f5d0 w DF .text 00000081 GLIBC_2.0 re_compile_pattern
+0011a6e4 g DO .bss 00000004 GLIBC_2.1 argp_program_version
+000d7b90 g DF .text 000001c1 GLIBC_2.3.4 getsourcefilter
+00057780 g DF .text 000000e3 GLIBC_2.2 putwc
+000ab470 g DF .text 00000038 GLIBC_2.2 posix_spawnattr_setsigdefault
+00022e70 w DF .text 00000043 GLIBC_2.0 dcgettext
+000baea0 g DF .text 00000039 GLIBC_2.0 bind
+00030150 w DF .text 00000027 GLIBC_2.3 strtof_l
+000be1a0 g DF .text 0000007d GLIBC_2.1 __iswcntrl_l
+0002bd30 g DF .text 00000052 GLIBC_2.0 rand_r
+0008a610 g DF .text 0000003a GLIBC_2.0 __setpgid
+00117484 g DO .data 00000004 (GLIBC_2.0) __ctype_toupper
+000b4e30 w DF .text 0000035f GLIBC_2.0 getmntent_r
+000cf4b0 g DF .text 000000a2 GLIBC_2.0 getprotoent
+000d7d60 g DF .text 0000017a GLIBC_2.3.4 setsourcefilter
+000dd2d0 g DF .text 00000042 GLIBC_2.0 svcerr_systemerr
+00028ee0 w DF .text 00000114 GLIBC_2.0 sigvec
+000d5be0 g DF .text 00000326 GLIBC_2.1 if_nameindex
+000c6b00 g DF .text 00000028 GLIBC_2.0 inet_addr
+000b3350 w DF .text 00000072 GLIBC_2.0 readv
+000b79e0 g DF .text 000000c3 GLIBC_2.0 qfcvt
+000cd390 w DF .text 00000007 GLIBC_2.0 ntohl
+000b54b0 g DF .text 00000050 GLIBC_2.1 truncate64
+000bd040 g DF .text 00000019 GLIBC_2.0 __profile_frequency
+0003ee90 g DF .text 00000036 GLIBC_2.0 vprintf
+0006d710 g DF .text 00000023 GLIBC_2.1.1 __strchr_g
+000ba4d0 w DF .text 00000057 GLIBC_2.3 readahead
+000c5cc0 g DF .text 0000002a (GLIBC_2.0) pthread_attr_init
+000ba490 w DF .text 0000003a GLIBC_2.1 umount2
+00069c20 g DF .text 00000041 GLIBC_2.0 __stpcpy
+000e4030 g DF .text 00000057 GLIBC_2.0 xdr_cryptkeyarg
+000b5550 g DF .text 00000032 GLIBC_2.0 chflags
+000b7970 g DF .text 00000064 GLIBC_2.0 qecvt
+000abd30 g DF .text 0000003c GLIBC_2.0 mkfifo
+000227c0 w DF .text 00000017 GLIBC_2.3 isspace_l
+0007b7f0 g DF .text 0000003a GLIBC_2.0 __gettimeofday
+000283e0 w DF .text 0000000d GLIBC_2.0 scalbnl
+000d58b0 g DF .text 000000ae GLIBC_2.1 if_nametoindex
+00061490 g DF .text 00000172 GLIBC_2.0 _IO_str_overflow
+000ee430 g DF .text 00000021 GLIBC_2.0 __deregister_frame_info
+0006d790 g DF .text 00000024 GLIBC_2.1.1 __strrchr_c
+000b70d0 g DF .text 0000003c GLIBC_2.0 madvise
+00115480 g DO .data.rel.ro 000001f4 (GLIBC_2.1) sys_errlist
+0005bd00 w DF .text 000001c8 GLIBC_2.0 obstack_vprintf
+000713d0 w DF .text 0000003e GLIBC_2.3 wcstoll_l
+000b3d10 g DF .text 00000039 GLIBC_2.0 reboot
+000bb1e0 w DF .text 00000078 GLIBC_2.0 __send
+000ad1a0 w DF .text 00000036 GLIBC_2.0 chdir
+00029770 w DF .text 00000069 GLIBC_2.1 sigwaitinfo
+00057b90 g DF .text 0000003b GLIBC_2.2 swprintf
+000c5de0 g DF .text 00000033 GLIBC_2.0 pthread_attr_setinheritsched
+00027be0 g DF .text 00000011 GLIBC_2.0 __finite
+00086c90 g DF .text 000000bf GLIBC_2.0 initgroups
+0006e090 g DF .text 00000022 GLIBC_2.1.1 __memset_cg
+00070e50 w DF .text 0000003e GLIBC_2.3 wcstoul_l
+000ac070 g DF .text 0000003a GLIBC_2.2 __statfs
+00117fe0 g DO .bss 00000004 (GLIBC_2.0) _errno
+000db700 g DF .text 00000105 GLIBC_2.0 pmap_unset
+0005bff0 g DF .text 000000e1 GLIBC_2.1 fseeko
+000b3680 w DF .text 00000032 GLIBC_2.0 setregid
+000b15c0 g DF .text 00000043 GLIBC_2.2 posix_fadvise
+000b9fa0 g DF .text 0000003c GLIBC_2.3 listxattr
+00029980 g DF .text 0000006e GLIBC_2.1 sigignore
+000bbb90 g DF .text 0000004d GLIBC_2.0 shmdt
+00027c20 w DF .text 000001cf GLIBC_2.0 modf
+000ac3f0 g DF .text 00000094 GLIBC_2.1 fstatvfs
+00087420 g DF .text 000000a6 GLIBC_2.0 endgrent
+000bb360 g DF .text 00000039 GLIBC_2.0 setsockopt
+001170f8 g DO .data 00000002 GLIBC_2.0 __fpu_control
+000be420 g DF .text 0000007d GLIBC_2.1 __iswpunct_l
+00028770 w DF .text 000000da GLIBC_2.0 bsd_signal
+000dfed0 g DF .text 00000068 GLIBC_2.0 xdr_short
+000be220 w DF .text 0000007d GLIBC_2.3 iswdigit_l
+000ccb80 g DF .text 00000113 GLIBC_2.3.4 __printf_chk
+0005b130 g DF .text 000000e1 GLIBC_2.0 fseek
+0006ad60 w DF .text 00000049 GLIBC_2.0 argz_extract
+00056580 g DF .text 0000018f GLIBC_2.0 _IO_setvbuf
+000bab50 w DF .text 00000042 GLIBC_2.0 mremap
+000c61d0 g DF .text 0000003a GLIBC_2.0 pthread_setschedparam
+00039c50 g DF .text 00000030 GLIBC_2.0 ctermid
+000f0870 g DF .text 0000003b (GLIBC_2.0) atexit
+00089220 w DF .text 00000029 GLIBC_2.0 wait3
+000bb6d0 g DF .text 00000051 GLIBC_2.1 __libc_sa_len
+00023de0 w DF .text 00000042 GLIBC_2.2 ngettext
+00052900 g DF .text 0000007c GLIBC_2.0 tmpnam_r
+000dd6d0 g DF .text 00000082 GLIBC_2.0 svc_getreqset
+00020d80 g DF .text 0000007a GLIBC_2.0 nl_langinfo
+000bbbe0 g DF .text 0000004f GLIBC_2.0 shmget
+000225f0 g DF .text 00000042 GLIBC_2.0 _tolower
+00055380 w DF .text 0000024e GLIBC_2.0 getdelim
+000d4a00 g DF .text 00000125 GLIBC_2.0 getaliasbyname
+000433d0 g DF .text 0000002d GLIBC_2.1 printf_size_info
+000b7ab0 g DF .text 0000031e GLIBC_2.0 qfcvt_r
+0002b7b0 w DF .text 0000007b GLIBC_2.0 setstate
+000b2420 g DF .text 00000042 GLIBC_2.0 cfsetospeed
+00069eb0 w DF .text 0000003e GLIBC_2.0 memccpy
+000b5590 g DF .text 00000032 GLIBC_2.0 fchflags
+000bade0 g DF .text 00000036 GLIBC_2.0 uselib
+0006d360 g DF .text 0000001d GLIBC_2.1.1 __memset_ccn_by4
+00070590 w DF .text 00000052 GLIBC_2.0 wcstold
+00117288 g DO .data 00000004 GLIBC_2.0 optind
+00015410 w DF .text 00000016 GLIBC_2.1 gnu_get_libc_release
+000abc70 g DF .text 00000015 GLIBC_2.2 posix_spawnattr_setschedparam
+00055940 g DF .text 000000d3 GLIBC_2.0 _IO_padn
+00089900 w DF .text 00000078 GLIBC_2.2.6 __nanosleep
+000be320 g DF .text 0000007d GLIBC_2.1 __iswgraph_l
+000697c0 w DF .text 0000019b GLIBC_2.0 memchr
+00055620 g DF .text 000001a4 GLIBC_2.1 _IO_getline_info
+000e96e0 g DF .text 00000015 GLIBC_2.1 fattach
+000dd9a0 g DF .text 00000098 GLIBC_2.2 svc_getreq_poll
+00088b50 g DF .text 00000332 GLIBC_PRIVATE _nss_files_parse_pwent
+000b40c0 w DF .text 00000036 GLIBC_2.0 swapoff
+000cd150 g DF .text 00000046 GLIBC_2.3.4 __chk_fail
+00000000 g DO *ABS* 00000000 GLIBC_2.3.2 GLIBC_2.3.2
+0011a7c0 g DO .bss 00000030 GLIBC_2.2 _res_hconf
+00027310 g DF .text 00000866 GLIBC_PRIVATE __open_catalog
+001178dc g DO .data 00000004 GLIBC_2.0 stdin
+000b8450 w DF .text 0000005b GLIBC_2.0 tfind
+000890f0 w DF .text 000000a9 GLIBC_2.0 wait
+000cc210 w DF .text 0000022e GLIBC_2.1 backtrace_symbols_fd
+00028ea0 g DF .text 0000001c GLIBC_PRIVATE __libc___xpg_sigpause
+00092ee0 g DF .text 000002ec GLIBC_2.2.3 fnmatch
+000b7110 g DF .text 0000003c GLIBC_2.2 mincore
+000a27f0 w DF .text 0000004a GLIBC_2.0 re_match_2
+000dc980 g DF .text 0000009e GLIBC_2.0 xdr_accepted_reply
+00104d70 g DO .rodata 00000004 GLIBC_2.3 sys_nerr
+00061710 g DF .text 00000047 GLIBC_2.0 _IO_str_init_static
+000859e0 g DF .text 000001ed GLIBC_2.0 scandir
+000ac750 w DF .text 00000010 GLIBC_2.0 umask
+001198e0 g DO .bss 00000200 (GLIBC_2.0) _res
+0006b750 g DF .text 0000103c GLIBC_2.1 __strcoll_l
+000b8b20 g DF .text 00000048 GLIBC_2.0 lfind
+000be6a0 w DF .text 00000072 GLIBC_2.3 iswctype_l
+00055f50 g DF .text 0000017f GLIBC_2.0 _IO_puts
+00069bb0 g DF .text 00000062 GLIBC_2.1 ffsll
+00036df0 w DF .text 00000042 GLIBC_2.3 strfmon_l
+00043de0 g DF .text 00000034 GLIBC_2.0 dprintf
+000b9ec0 g DF .text 0000003a GLIBC_2.3 fremovexattr
+000dd360 g DF .text 0000001c GLIBC_2.0 svcerr_weakauth
+000d8c40 g DF .text 000000c1 GLIBC_2.0 xdr_authunix_parms
+000f0c10 g DF .text 0000016c (GLIBC_2.0) fclose
+0005ed90 g DF .text 0000020b GLIBC_2.1 _IO_file_underflow
+000d4110 g DF .text 000002e8 GLIBC_2.0 innetgr
+000de7a0 g DF .text 00000012 GLIBC_2.0 svcfd_create
+00000000 g DO *ABS* 00000000 GLIBC_2.2.1 GLIBC_2.2.1
+0007b7a0 g DF .text 0000003c GLIBC_2.0 mktime
+00088e90 w DF .text 000001d7 GLIBC_2.0 fgetpwent_r
+00117db8 g DO .data 00000004 GLIBC_2.0 __progname
+00118d44 w DO .bss 00000004 GLIBC_2.0 timezone
+00028ec0 g DF .text 00000019 GLIBC_PRIVATE __libc_sigpause
+0006a480 w DF .text 00000179 GLIBC_2.1 strcasestr
+00000000 g DO *ABS* 00000000 GLIBC_2.0 GLIBC_2.0
+000f3ff0 g DF .text 00000041 (GLIBC_2.0) gethostent_r
+000eee60 g DF .text 000000f4 GCC_3.0 __deregister_frame_info_bases
+00027080 g DF .text 00000086 GLIBC_2.0 catgets
+00066ce0 g DF .text 0000004d GLIBC_2.2 mcheck_check_all
+00060a30 g DF .text 00000022 GLIBC_2.0 _IO_flush_all
+0005ad00 w DF .text 00000068 GLIBC_2.0 ferror
+000693c0 g DF .text 00000186 GLIBC_2.0 strstr
+0007a0a0 g DF .text 0000007c GLIBC_2.1 __wcsncasecmp_l
+000eb810 g DF .text 0000006a GLIBC_2.1 unlockpt
+00056fd0 g DF .text 0000003b GLIBC_2.2 getwchar_unlocked
+000dfea0 g DF .text 0000002a GLIBC_2.1.1 xdr_u_longlong_t
+000600d0 g DF .text 00000008 GLIBC_2.2 _IO_iter_file
+000e4830 g DF .text 000001d9 GLIBC_2.1 rtime
+0005fe30 g DF .text 0000003b GLIBC_2.0 _IO_adjust_column
+0002bd10 g DF .text 00000017 GLIBC_2.0 rand
+000ebca0 g DF .text 00000017 GLIBC_2.1 getutxent
+0011a6d8 g DO .bss 00000004 GLIBC_2.0 loc1
+00028230 w DF .text 0000001e GLIBC_2.0 copysignl
+000e6d80 g DF .text 000000bb GLIBC_2.1.1 xdr_uint64_t
+0005c0e0 g DF .text 000001c8 GLIBC_2.1 ftello
+000acdc0 w DF .text 0000003a GLIBC_2.0 flock
+00028220 w DF .text 0000000e GLIBC_2.0 finitel
+00062bd0 w DF .text 000003db GLIBC_2.0 malloc_set_state
+0008a500 w DF .text 0000002f GLIBC_2.0 setgid
+00015260 g DF .text 00000005 GLIBC_2.0 __libc_init_first
+0006d740 g DF .text 00000020 GLIBC_2.1.1 __strchrnul_c
+00028770 w DF .text 000000da GLIBC_2.0 signal
+000524e0 g DF .text 0000021b GLIBC_2.0 psignal
+000c2b90 w DF .text 00000327 GLIBC_2.1 argp_failure
+000aca20 w DF .text 0000007c GLIBC_2.0 read
+00117fe0 g DO .bss 00000004 (GLIBC_2.0) errno
+00086060 g DF .text 0000000a GLIBC_2.0 dirfd
+000e9920 w DF .text 00000059 GLIBC_2.0 endutent
+0006e060 g DF .text 00000022 GLIBC_2.1.1 __memset_gg
+000bf210 g DF .text 000000a8 GLIBC_2.0 setspent
+0006e090 g DF .text 00000022 GLIBC_2.1.1 __memset_cc
+000ad3e0 g DF .text 000000bd GLIBC_2.0 get_current_dir_name
+000be8b0 g DF .text 00000125 GLIBC_2.0 getspnam
+0006d540 g DF .text 00000031 GLIBC_2.1.1 __stpcpy_g
+000b66c0 g DF .text 00000080 GLIBC_2.0 openlog
+000aaf90 w DF .text 00000094 GLIBC_2.1 pread64
+00029530 g DF .text 00000027 GLIBC_PRIVATE __libc_current_sigrtmin_private
+000e0000 g DF .text 0000004e GLIBC_2.0 xdr_u_char
+000bb260 w DF .text 00000078 GLIBC_2.0 sendmsg
+000be520 g DF .text 0000007d GLIBC_2.1 __iswupper_l
+00107908 g DO .rodata 00000010 GLIBC_2.1 in6addr_loopback
+000bdd70 w DF .text 00000072 GLIBC_2.0 iswctype
+000684b0 g DF .text 0000004b GLIBC_2.0 strcoll
+000b6490 g DF .text 0000008a GLIBC_2.0 closelog
+000da7c0 g DF .text 00000048 GLIBC_2.0 clntudp_create
+000224d0 g DF .text 0000007d GLIBC_2.0 isupper
+000e39c0 g DF .text 00000081 GLIBC_2.1 key_decryptsession_pk
+0006aad0 g DF .text 0000003e GLIBC_2.0 __argz_count
+00022840 g DF .text 00000011 GLIBC_2.1 __toupper_l
+00068c40 g DF .text 000000f3 GLIBC_2.0 strncmp
+000ab570 g DF .text 00000051 GLIBC_2.2 posix_spawnp
+00043cb0 w DF .text 00000024 GLIBC_2.0 _IO_fprintf
+0011a668 g DO .bss 00000004 (GLIBC_2.0) _obstack
+000bacb0 g DF .text 00000048 GLIBC_2.0 query_module
+0002af50 g DF .text 00000033 GLIBC_2.0 __secure_getenv
+00035b50 g DF .text 0000004b GLIBC_2.0 l64a
+00104d70 g DO .rodata 00000004 GLIBC_2.3 _sys_nerr
+000685d0 g DF .text 00000146 GLIBC_2.1.1 __strverscmp
+00058400 g DF .text 00000081 GLIBC_2.2 _IO_wdefault_doallocate
+000226e0 g DF .text 00000017 GLIBC_2.1 __isalpha_l
+000294b0 g DF .text 00000035 GLIBC_2.0 sigorset
+0006f6e0 w DF .text 00000360 GLIBC_2.0 wcsrtombs
+000e1a60 g DF .text 000000e8 GLIBC_2.0 getpublickey
+000557d0 g DF .text 0000016f GLIBC_2.0 _IO_gets
+00065780 g DF .text 000001d4 GLIBC_2.0 __libc_malloc
+00085c40 g DF .text 00000024 GLIBC_2.0 alphasort
+000aaf90 w DF .text 00000094 GLIBC_2.1 __pread64
+000b5fa0 g DF .text 00000040 GLIBC_2.0 getusershell
+000b3870 g DF .text 0000003a GLIBC_2.0 sethostname
+000bb690 g DF .text 00000040 GLIBC_2.0 __cmsg_nxthdr
+00053230 g DF .text 00000032 GLIBC_2.0 _IO_ftrylockfile
+000bd060 w DF .text 00000013 GLIBC_2.0 mcount
+00022720 g DF .text 00000017 GLIBC_2.1 __isdigit_l
+00085c70 g DF .text 00000024 GLIBC_2.1 versionsort
+0006ec60 g DF .text 00000051 GLIBC_2.0 wmemset
+000b98a0 w DF .text 0000001a GLIBC_2.0 get_avphys_pages
+00000000 g DO *ABS* 00000000 GLIBC_PRIVATE GLIBC_PRIVATE
+0008a680 g DF .text 0000001a GLIBC_2.0 setpgrp
+000a9f60 g DF .text 00000df2 GLIBC_2.1 wordexp
+0005ff30 g DF .text 0000003a GLIBC_2.0 _IO_marker_delta
+000d4400 g DF .text 00000097 GLIBC_PRIVATE __internal_endnetgrent
+000635b0 g DF .text 000000b8 GLIBC_2.0 __libc_free
+00068d40 g DF .text 000000a3 GLIBC_2.0 strncpy
+000adf90 w DF .text 00000036 GLIBC_2.0 unlink
+0002aed0 w DF .text 00000073 GLIBC_2.0 setenv
+000b2c70 w DF .text 0000003a GLIBC_2.0 getrusage
+000b3ca0 g DF .text 0000002e GLIBC_2.0 sync
+0005c2b0 g DF .text 0000024c GLIBC_2.1 freopen64
+0006de30 g DF .text 00000047 GLIBC_2.1.1 __strpbrk_c3
+00058190 g DF .text 0000004c GLIBC_2.2 _IO_sungetwc
+00117db8 w DO .data 00000004 GLIBC_2.0 program_invocation_short_name
+00069d10 w DF .text 00000068 GLIBC_2.0 strcasecmp
+000cd390 g DF .text 00000007 GLIBC_2.0 htonl
+000bb2e0 w DF .text 00000078 GLIBC_2.0 sendto
+000ac7e0 g DF .text 00000015 GLIBC_2.3.2 lchmod
+000dfc30 g DF .text 00000065 GLIBC_2.0 xdr_u_long
+000226e0 w DF .text 00000017 GLIBC_2.3 isalpha_l
+000a4490 w DF .text 00000036 GLIBC_2.0 sched_get_priority_max
+000b4020 g DF .text 00000015 GLIBC_2.0 revoke
+0005efa0 g DF .text 00000063 GLIBC_2.1 _IO_file_setbuf
+000abb70 g DF .text 0000003a GLIBC_2.2 posix_spawnattr_getsigmask
+000d45d0 g DF .text 00000068 GLIBC_2.0 setnetgrent
+00053270 w DF .text 0000002d GLIBC_2.0 funlockfile
+000ebe10 g DF .text 00000248 GLIBC_PRIVATE _dl_open
+000785d0 g DF .text 00000096 GLIBC_2.0 wcwidth
+00022560 g DF .text 00000011 GLIBC_2.0 isascii
+000f4100 g DF .text 00000066 (GLIBC_2.0) getnetbyname_r
+000dca20 g DF .text 00000081 GLIBC_2.0 xdr_replymsg
+00065c60 g DF .text 0000021c GLIBC_2.0 realloc
+000b4900 w DF .text 0000046f GLIBC_2.0 addmntent
+0002b070 w DF .text 00000036 GLIBC_2.0 on_exit
+000c6550 g DF .text 00000158 GLIBC_2.3.2 __register_atfork
+000286a0 g DF .text 00000063 GLIBC_PRIVATE __libc_siglongjmp
+0005bfd0 w DF .text 00000017 GLIBC_2.0 fcloseall
+000bd080 g DF .text 000000bd GLIBC_2.0 towupper
+000be220 g DF .text 0000007d GLIBC_2.1 __iswdigit_l
+000e3c40 g DF .text 00000103 GLIBC_2.1 key_gendes
+000be2a0 g DF .text 0000007d GLIBC_2.1 __iswlower_l
+000d02b0 g DF .text 000000a2 GLIBC_2.0 getrpcent
+00068720 g DF .text 00000057 GLIBC_2.0 __strdup
+0002b1a0 g DF .text 0000003c GLIBC_2.1.3 __cxa_atexit
+000be120 w DF .text 0000007d GLIBC_2.3 iswblank_l
+00117328 g DO .data 00000004 GLIBC_2.1 argp_err_exit_status
+000ebdd0 g DF .text 00000033 GLIBC_2.1.1 getutmp
+000527a0 g DF .text 000000a2 GLIBC_2.1 tmpfile64
+00037b30 w DF .text 00000065 GLIBC_2.1 makecontext
+00027f50 g DF .text 00000018 GLIBC_2.0 __isnanf
+00000000 g DO *ABS* 00000000 GLIBC_2.3.3 GLIBC_2.3.3
+0006d5c0 g DF .text 00000033 GLIBC_2.1.1 __strcat_g
+00104d74 g DO .rodata 00000004 (GLIBC_2.0) sys_nerr
+00115680 g DO .data.rel.ro 00000100 (GLIBC_2.1) _sys_siglist
+00058290 g DF .text 0000003d GLIBC_2.2 _IO_wmarker_delta
+000ba900 g DF .text 00000036 GLIBC_2.3.2 epoll_create
+000f3f10 g DF .text 00000063 (GLIBC_2.0) gethostbyname2_r
+000f09a0 g DF .text 00000095 (GLIBC_2.0) fopen
+00069ac0 g DF .text 0000009d GLIBC_2.0 bcopy
+000700c0 w DF .text 00000075 GLIBC_2.1 wcsnlen
+000c9730 w DF .text 0000010e (GLIBC_2.0) res_init
+0005b220 g DF .text 000000cc GLIBC_2.0 _IO_getc
+00062a90 g DF .text 0000000f GLIBC_2.0 __libc_mallopt
+000b55f0 g DF .text 0000001a GLIBC_2.0 remque
+00069550 g DF .text 0000010c GLIBC_2.0 strtok
+000bded0 w DF .text 0000005d GLIBC_2.0 towctrans
+00056710 g DF .text 000000d4 GLIBC_2.0 _IO_ungetc
+00029240 g DF .text 00000027 GLIBC_2.0 sigfillset
+000e6f30 g DF .text 00000069 GLIBC_2.1 xdr_uint16_t
+00069960 g DF .text 0000001e GLIBC_2.0 memcmp
+000a43e0 g DF .text 0000003c GLIBC_2.0 __sched_setscheduler
+000bb020 g DF .text 00000039 GLIBC_2.0 listen
+000dd380 g DF .text 00000042 GLIBC_2.0 svcerr_noprog
+000f4f20 g DF __libc_freeres_fn 00000087 GLIBC_2.1 __libc_freeres
+0007aee0 g DF .text 00000030 GLIBC_2.0 __gmtime_r
+000a44d0 w DF .text 00000036 GLIBC_2.0 sched_get_priority_min
+000b1670 g DF .text 000001d5 GLIBC_2.2 posix_fallocate
+000df0b0 g DF .text 00000344 GLIBC_2.0 svcudp_bufcreate
+000e0100 g DF .text 000000cd GLIBC_2.0 xdr_opaque
+000a6da0 g DF .text 00000059 GLIBC_2.1 wordfree
+00062b30 w DF .text 00000092 GLIBC_2.0 malloc_trim
+000d7840 g DF .text 00000152 GLIBC_2.3.4 getipv4sourcefilter
+00117480 g DO .data 00000004 (GLIBC_2.0) __ctype_tolower
+000ab430 g DF .text 00000038 GLIBC_2.2 posix_spawnattr_getsigdefault
+00037ba0 w DF .text 000000a6 GLIBC_2.1 swapcontext
+00089980 w DF .text 00000059 GLIBC_2.0 fork
+000299f0 g DF .text 0000016d GLIBC_2.1 sigset
+00052300 g DF .text 00000034 GLIBC_2.0 sscanf
+000713d0 w DF .text 0000003e GLIBC_2.1 __wcstoll_l
+00022740 g DF .text 00000017 GLIBC_2.1 __islower_l
+0006d8c0 g DF .text 00000047 GLIBC_2.1.1 __strspn_g
+000c60a0 g DF .text 0000002a GLIBC_2.3.2 pthread_cond_signal
+00089bb0 g DF .text 00000034 GLIBC_2.0 execv
+000b4da0 w DF .text 00000084 GLIBC_2.0 setmntent
+000a4460 g DF .text 0000002e GLIBC_2.0 __sched_yield
+000220d0 g DF .text 0000007d GLIBC_2.0 isalpha
+000ac350 g DF .text 00000094 GLIBC_2.1 statvfs
+00086e80 g DF .text 000000a2 GLIBC_2.0 getgrent
+00069e10 g DF .text 00000041 GLIBC_2.1 __strcasecmp_l
+0006e4e0 g DF .text 0000003c GLIBC_2.0 wcscspn
+00000000 g DO *ABS* 00000000 GLIBC_2.2.3 GLIBC_2.2.3
+00070290 g DF .text 00000058 GLIBC_2.0 wcstoul
+000f1a20 g DF .text 0000006d (GLIBC_2.0) _IO_file_write
+0005ff10 g DF .text 00000013 GLIBC_2.0 _IO_marker_difference
+00068b80 g DF .text 000000b8 GLIBC_2.0 strncat
+0008a790 w DF .text 00000035 GLIBC_2.0 setresuid
+000b2ef0 g DF .text 00000031 GLIBC_2.0 vtimes
+0008a2b0 g DF .text 0000017a GLIBC_2.0 execlp
+000ab340 g DF .text 00000097 GLIBC_2.2 posix_spawn_file_actions_adddup2
+00057330 g DF .text 0000007b GLIBC_2.2 fputws_unlocked
+000bb780 w DF .text 000000b5 GLIBC_2.0 msgsnd
+00028a40 w DF .text 00000053 GLIBC_2.0 sigaction
+0002bf80 g DF .text 0000002d GLIBC_2.0 lcong48
+000e57f0 g DF .text 000002da GLIBC_2.1 clntunix_create
+0006e440 g DF .text 00000021 GLIBC_2.0 wcschr
+000583a0 g DF .text 00000058 GLIBC_2.2 _IO_free_wbackup_area
+000dc850 g DF .text 0000009d GLIBC_2.0 xdr_callhdr
+000b3930 g DF .text 0000003a GLIBC_2.0 setdomainname
+0009f490 w DF .text 0000013f GLIBC_2.0 re_comp
+000b4d70 w DF .text 0000002a GLIBC_2.0 endmntent
+0002bf10 g DF .text 0000002d GLIBC_2.0 srand48
+000c9730 g DF .text 0000010e GLIBC_2.2 __res_init
+000db540 g DF .text 000000e7 GLIBC_2.0 getrpcport
+000288a0 g DF .text 00000042 GLIBC_2.0 killpg
+000b1510 g DF .text 000000a2 GLIBC_2.1 __poll
+000b3760 g DF .text 00000026 GLIBC_2.0 __getpagesize
+000cf340 g DF .text 00000165 GLIBC_2.1.2 getprotobynumber_r
+00054ca0 w DF .text 00000113 GLIBC_2.0 fread
+0011962c g DO .bss 00000004 GLIBC_PRIVATE __librt_multiple_threads
+000ccfb0 g DF .text 00000195 GLIBC_2.3.4 __gets_chk
+0006f160 g DF .text 0000024b GLIBC_2.0 __mbrtowc
+0008a530 w DF .text 00000097 GLIBC_2.0 group_member
+000cda90 g DF .text 000002d2 GLIBC_2.1.2 gethostbyaddr_r
+000abc10 g DF .text 0000003b GLIBC_2.2 posix_spawnattr_setsigmask
+000b41f0 g DF .text 00000053 GLIBC_2.0 ualarm
+000ccda0 g DF .text 00000110 GLIBC_2.3.4 __vprintf_chk
+00060180 g DF .text 00000052 GLIBC_2.0 _IO_free_backup_area
+000adbd0 w DF .text 000002b3 GLIBC_2.0 ttyname_r
+00029340 w DF .text 00000015 GLIBC_2.0 sigreturn
+000cd620 g DF .text 000002c6 GLIBC_2.0 inet_network
+000e95f0 g DF .text 00000048 GLIBC_2.1 getpmsg
+000bc350 w DF .text 000001c1 GLIBC_2.0 monstartup
+00000000 g DO *ABS* 00000000 GLIBC_2.2 GLIBC_2.2
+00057c90 g DF .text 00000034 GLIBC_2.2 fwscanf
+000b3090 w DF .text 00000073 GLIBC_2.0 sbrk
+0008a8f0 g DF .text 00000149 GLIBC_2.0 getlogin_r
+00103c60 g DO .rodata 00000024 GLIBC_PRIVATE _itoa_lower_digits
+00068720 w DF .text 00000057 GLIBC_2.0 strdup
+00028050 w DF .text 0000000d GLIBC_2.0 scalbnf
+00060fb0 g DF .text 00000138 GLIBC_2.0 __underflow
+000c6950 w DF .text 000001a9 GLIBC_2.0 inet_aton
+00022760 g DF .text 00000017 GLIBC_2.1 __isgraph_l
+000a4550 g DF .text 0000007a GLIBC_2.3.4 sched_getaffinity
+000b46a0 g DF .text 0000002b GLIBC_2.0 getfsent
+0007e0b0 g DF .text 00000052 GLIBC_2.1 getdate
+0006e1a0 g DF .text 00000069 GLIBC_2.1.1 __strncpy_by4
+000ba240 g DF .text 00000036 GLIBC_2.0 iopl
+000d1230 g DF .text 0000006a GLIBC_2.0 ether_ntoa_r
+00067fa0 g DF .text 0000002c GLIBC_2.0 _obstack_allocated_p
+000abfb0 g DF .text 00000032 GLIBC_2.2 __xstat64
+0002c610 g DF .text 00000058 GLIBC_2.0 strtoull
+000ce750 g DF .text 000000a9 GLIBC_2.0 endhostent
+00000000 w D *UND* 00000000 _pthread_cleanup_push_defer
+000682f0 w DF .text 00000167 GLIBC_2.0 index
+0009ff50 w DF .text 00000125 GLIBC_2.0 regcomp
+0002c110 g DF .text 0000002e GLIBC_2.0 mrand48_r
+00029170 g DF .text 00000028 GLIBC_2.0 __sigismember
+000adf10 w DF .text 0000003a GLIBC_2.0 symlink
+0007b7f0 w DF .text 0000003a GLIBC_2.0 gettimeofday
+000b6310 g DF .text 000000c2 GLIBC_2.0 ttyslot
+00028b70 g DF .text 000000a2 GLIBC_2.1.3 __sigsuspend
+00037ac0 w DF .text 00000068 GLIBC_2.0 setcontext
+000f4040 g DF .text 00000063 (GLIBC_2.0) getnetbyaddr_r
+000d4950 g DF .text 000000a2 GLIBC_2.0 getaliasent
+000f4390 g DF .text 00000037 (GLIBC_2.0) getrpcent_r
+00021710 w DF .text 0000010e GLIBC_2.3 uselocale
+0007ac70 w DF .text 000000fa GLIBC_2.0 asctime_r
+0006e5f0 g DF .text 000000b8 GLIBC_2.0 wcsncat
+000ad0b0 g DF .text 00000036 GLIBC_2.0 __pipe
+000a41d0 g DF .text 00000043 GLIBC_2.0 getopt
+000b3640 w DF .text 00000032 GLIBC_2.0 setreuid
+0006d380 g DF .text 0000002f GLIBC_2.1.1 __memset_ccn_by2
+000584f0 g DF .text 000000fd GLIBC_2.2 _IO_wdefault_xsputn
+0007af10 g DF .text 00000036 GLIBC_2.0 localtime
+0005fa50 g DF .text 00000033 GLIBC_2.0 _IO_default_uflow
+000578b0 g DF .text 000000ec GLIBC_2.2 putwchar
+00069a10 g DF .text 00000056 GLIBC_2.0 memset
+000cc440 g DF .text 00000005 GLIBC_2.2 __cyg_profile_func_enter
+00037a10 g DF .text 00000027 GLIBC_2.1 wcstoumax
+000e41c0 g DF .text 00000091 GLIBC_2.1 netname2host
+000b8e80 g DF .text 00000022 GLIBC_2.0 err
+000f3d50 g DF .text 0000005c (GLIBC_2.0) semctl
+00015e80 g DF .text 00000038 GLIBC_2.1 iconv_close
+0002caf0 w DF .text 0000002e GLIBC_2.1 __strtol_l
+000f1e80 g DF .text 0000009a (GLIBC_2.0) _IO_file_sync
+000b7340 g DF .text 000000c3 GLIBC_2.0 fcvt
+000b2a00 g DF .text 00000030 GLIBC_2.0 cfmakeraw
+000aef00 g DF .text 00000024 GLIBC_2.0 ftw
+00029360 g DF .text 00000022 GLIBC_2.0 siggetmask
+000ace00 g DF .text 000000f6 GLIBC_2.0 lockf
+000c6060 g DF .text 00000033 GLIBC_2.3.2 pthread_cond_init
+000c6480 g DF .text 0000000b GLIBC_PRIVATE __librt_disable_asynccancel
+000763d0 w DF .text 00000037 GLIBC_2.3 wcstold_l
+0006e8b0 g DF .text 0000004d GLIBC_2.0 wcsspn
+000d1e30 g DF .text 000000cf GLIBC_2.2 iruserok_af
+0008a6a0 g DF .text 00000036 GLIBC_2.0 getsid
+00054f00 w DF .text 000001d8 GLIBC_2.0 ftell
+000227a0 g DF .text 00000015 GLIBC_2.1 __ispunct_l
+000cc4a0 g DF .text 0000009e GLIBC_2.3.4 __memmove_chk
+0002b8b0 w DF .text 0000005b GLIBC_2.0 srand
+000cc970 g DF .text 000000be GLIBC_2.3.4 __vsprintf_chk
+000b3f50 g DF .text 000000ca GLIBC_2.0 sethostid
+000dd130 g DF .text 00000039 GLIBC_2.2.3 __rpc_thread_svc_pollfd
+000f3c60 g DF .text 00000099 (GLIBC_2.1) getrlimit64
+000be610 g DF .text 0000008c GLIBC_2.1 __wctype_l
+00069760 g DF .text 00000052 GLIBC_2.0 strxfrm
+000be0a0 g DF .text 0000007d GLIBC_2.1 __iswalpha_l
+00035ce0 g DF .text 00000067 GLIBC_2.0 strfmon
+000f3b10 g DF .text 00000033 (GLIBC_2.3.3) sched_setaffinity
+000b98c0 w DF .text 0000001a GLIBC_2.0 get_phys_pages
+000445f0 w DF .text 00003c1e GLIBC_2.2 vfwprintf
+0006f670 w DF .text 00000067 GLIBC_2.0 mbsrtowcs
+000cca30 g DF .text 00000039 GLIBC_2.3.4 __snprintf_chk
+00115680 g DO .data.rel.ro 00000080 (GLIBC_2.0) sys_siglist
+000be1a0 w DF .text 0000007d GLIBC_2.3 iswcntrl_l
+000f2b60 g DF .text 0000005f (GLIBC_2.0) getpwnam_r
+000bdc70 w DF .text 000000fd GLIBC_2.0 wctype
+0005ac30 g DF .text 0000005c GLIBC_2.0 clearerr
+000b9fe0 g DF .text 00000042 GLIBC_2.3 lgetxattr
+000c6000 g DF .text 0000002a GLIBC_2.3.2 pthread_cond_broadcast
+000ab2a0 g DF .text 00000094 GLIBC_2.2 posix_spawn_file_actions_addopen
+0002b830 w DF .text 0000007b GLIBC_2.0 initstate
+00062a90 w DF .text 0000000f GLIBC_2.0 mallopt
+000cceb0 g DF .text 000000fc GLIBC_2.3.4 __vfprintf_chk
+000eb730 g DF .text 000000d7 GLIBC_2.1 grantpt
+000ac8c0 w DF .text 000000d4 GLIBC_2.1 open64
+0005b2f0 g DF .text 000000d9 GLIBC_2.0 getchar
+000ab4b0 g DF .text 00000012 GLIBC_2.2 posix_spawnattr_getflags
+000e0300 g DF .text 0000017a GLIBC_2.0 xdr_string
+000cd3a0 w DF .text 0000000e GLIBC_2.0 ntohs
+00087e40 g DF .text 00000195 GLIBC_2.0 fgetpwent
+000cd4c0 g DF .text 00000105 GLIBC_2.0 inet_ntoa
+0008a440 w DF .text 00000008 GLIBC_2.0 getppid
+000b2700 w DF .text 000000be GLIBC_2.0 tcgetattr
+000e4510 g DF .text 000000fc GLIBC_2.1 user2netname
+000cfd00 g DF .text 00000135 GLIBC_2.0 getservbyport
+000b4310 g DF .text 0000007a GLIBC_2.0 ptrace
+000ca4b0 g DF .text 000000ae GLIBC_2.0 __nss_configure_lookup
+0007b7e0 g DF .text 00000010 GLIBC_2.0 time
+000f3c20 g DF .text 0000003e (GLIBC_2.2) posix_fallocate64
+000b5cb0 g DF .text 00000052 GLIBC_2.0 endusershell
+0006d690 g DF .text 00000042 GLIBC_2.1.1 __strncmp_g
+000854a0 w DF .text 00000134 GLIBC_2.0 opendir
+00058810 g DF .text 000000e7 GLIBC_2.2 __wunderflow
+0006d2a0 g DF .text 00000033 GLIBC_2.1.1 __memcpy_by4
+000cc450 g DF .text 00000050 GLIBC_2.3.4 __memcpy_chk
+000cedf0 g DF .text 000000da GLIBC_2.1.2 getnetent_r
+00060e70 g DF .text 00000138 GLIBC_2.0 __uflow
+0008a490 w DF .text 00000032 GLIBC_2.0 getgroups
+000e1690 g DF .text 00000035 GLIBC_2.0 xdrstdio_create
+0006d880 g DF .text 00000035 GLIBC_2.1.1 __strspn_cg
+000f3ea0 g DF .text 0000006c (GLIBC_2.0) gethostbyaddr_r
+000eec70 g DF .text 00000087 GCC_3.0 __register_frame_info_table_bases
+00035550 g DF .text 0000007d GLIBC_PRIVATE __libc_system
+000d2020 g DF .text 000001c9 GLIBC_2.2 rresvport_af
+000222d0 g DF .text 0000007d GLIBC_2.0 isgraph
+0006e770 g DF .text 000000ab GLIBC_2.0 wcsncpy
+00021bb0 g DF .text 00000162 GLIBC_2.0 __assert_fail
+00052300 g DF .text 00000034 GLIBC_2.0 _IO_sscanf
+0006d760 g DF .text 00000022 GLIBC_2.1.1 __strchrnul_g
+000b1510 w DF .text 000000a2 GLIBC_2.0 poll
+00029680 w DF .text 00000072 GLIBC_2.1 sigtimedwait
+000ba7c0 g DF .text 0000003a GLIBC_2.0 bdflush
+000c60d0 g DF .text 00000033 (GLIBC_2.0) pthread_cond_wait
+000d0490 g DF .text 00000125 GLIBC_2.0 getrpcbynumber
+000bb730 g DF .text 00000047 GLIBC_2.0 ftok
+000f2ac0 g DF .text 0000005f (GLIBC_2.0) getgrnam_r
+000f0c10 g DF .text 0000016c (GLIBC_2.0) _IO_fclose
+000bdf30 g DF .text 0000007d GLIBC_2.1 __iswxdigit_l
+000c6110 g DF .text 0000003a (GLIBC_2.0) pthread_cond_timedwait
+00086d50 g DF .text 000000ee GLIBC_2.2.4 getgrouplist
+00057fd0 g DF .text 0000002d GLIBC_2.2 _IO_switch_to_wbackup_area
+000b6740 g DF .text 00000024 GLIBC_2.0 syslog
+00022050 g DF .text 0000007b GLIBC_2.0 isalnum
+000784e0 w DF .text 00000037 GLIBC_2.1 __wcstof_l
+000ebc20 g DF .text 00000055 GLIBC_2.1 ptsname
+00028500 g DF .text 00000023 GLIBC_2.1 __signbitl
+000600e0 g DF .text 0000003b GLIBC_2.2 _IO_list_resetlock
+00070140 w DF .text 00000024 GLIBC_2.2 wcschrnul
+000829f0 w DF .text 000021b8 GLIBC_2.3 wcsftime_l
+0007d960 w DF .text 0000003a GLIBC_2.0 getitimer
+000b7fa0 w DF .text 00000024 GLIBC_2.0 hdestroy
+00052850 g DF .text 000000af GLIBC_2.0 tmpnam
+00057b50 w DF .text 00000034 GLIBC_2.2 fwprintf
+000abf20 g DF .text 00000082 GLIBC_2.0 __xmknod
+00022350 g DF .text 0000007d GLIBC_2.0 isprint
+000b36c0 g DF .text 0000004d GLIBC_2.0 seteuid
+0002be90 g DF .text 00000034 GLIBC_2.0 mrand48
+000dfca0 g DF .text 0000002a GLIBC_2.0 xdr_u_int
+000e0f40 g DF .text 00000056 GLIBC_2.0 xdrrec_skiprecord
+000568c0 w DF .text 00000093 GLIBC_2.0 __vsscanf
+0005b5d0 w DF .text 000000e7 GLIBC_2.0 putc
+0006c810 g DF .text 00000a85 GLIBC_2.1 __strxfrm_l
+000a42c0 g DF .text 00000048 GLIBC_2.0 getopt_long_only
+0006b750 w DF .text 0000103c GLIBC_2.3 strcoll_l
+000b56e0 g DF .text 0000003c GLIBC_2.0 endttyent
+000e6ca0 g DF .text 000000d3 GLIBC_2.3.4 xdr_u_quad_t
+000be7a0 g DF .text 0000005d GLIBC_2.1 __towctrans_l
+000dbd40 g DF .text 000000b1 GLIBC_2.0 xdr_pmaplist
+000a45d0 g DF .text 0000013f GLIBC_2.3.4 sched_setaffinity
+0006b460 g DF .text 00000088 GLIBC_2.0 envz_strip
+000c5d20 g DF .text 00000033 GLIBC_2.0 pthread_attr_getdetachstate
+000c6030 g DF .text 0000002a (GLIBC_2.0) pthread_cond_destroy
+000ba3c0 w DF .text 00000087 GLIBC_2.0 llseek
+0006dcb0 g DF .text 00000048 GLIBC_2.1.1 __strcspn_c2
+000acb20 w DF .text 0000003c GLIBC_2.0 __lseek
+00102375 g DO .rodata 00000012 GLIBC_2.0 _nl_default_dirname
+000bab00 w DF .text 00000048 GLIBC_2.0 mount
+00028ea0 w DF .text 0000001c GLIBC_2.2 __xpg_sigpause
+000d06b0 g DF .text 000000a6 GLIBC_2.0 endrpcent
+000c71b0 g DF .text 000000c9 GLIBC_2.0 inet_nsap_ntoa
+00027be0 w DF .text 00000011 GLIBC_2.0 finite
+000b2fc0 g DF .text 0000007c GLIBC_2.0 nice
+000555d0 g DF .text 00000045 GLIBC_2.0 _IO_getline
+000b4da0 g DF .text 00000084 GLIBC_2.2 __setmntent
+00087c30 w DF .text 00000208 GLIBC_2.0 fgetgrent_r
+000b4290 g DF .text 00000032 GLIBC_2.0 gtty
+000d21f0 g DF .text 0000001c GLIBC_2.0 rresvport
+000c6880 g DF .text 000000d0 GLIBC_2.0 herror
+0005d1c0 g DF .text 0000005b GLIBC_2.1 fread_unlocked
+00068460 g DF .text 00000043 GLIBC_2.0 strcmp
+00058000 g DF .text 00000035 GLIBC_2.2 _IO_wdefault_uflow
+000b76f0 g DF .text 00000220 GLIBC_2.0 ecvt_r
+00117334 g DO .data 00000004 GLIBC_2.0 __check_rhosts_file
+00115680 g DO .data.rel.ro 00000080 (GLIBC_2.0) _sys_siglist
+000bb3a0 w DF .text 00000039 GLIBC_2.0 shutdown
+000c5a10 w DF .text 00000038 GLIBC_2.1 argp_usage
+000c47c0 w DF .text 0000001d GLIBC_2.1 argp_help
+000e4260 g DF .text 000000f8 GLIBC_2.1 netname2user
+00016910 g DF .text 00000016 GLIBC_PRIVATE __gconv_get_alias_db
+000c62b0 g DF .text 0000002a GLIBC_2.0 pthread_mutex_unlock
+000d9b90 g DF .text 000002ba GLIBC_2.0 callrpc
+000dc710 g DF .text 00000135 GLIBC_2.0 _seterr_reply
+000dd1b0 g DF .text 00000030 GLIBC_2.2.3 __rpc_thread_svc_fdset
+000db950 g DF .text 00000119 GLIBC_2.0 pmap_getmaps
+0002be10 g DF .text 00000034 GLIBC_2.0 lrand48
+00117d84 g DO .data 00000004 GLIBC_2.0 obstack_alloc_failed_handler
+000be420 w DF .text 0000007d GLIBC_2.3 iswpunct_l
+00115480 g DO .data.rel.ro 000001f8 GLIBC_2.3 _sys_errlist
+000ad770 g DF .text 00000274 GLIBC_2.0 ttyname
+000417c0 w DF .text 0000009d GLIBC_2.0 register_printf_function
+00088420 g DF .text 00000125 GLIBC_2.0 getpwuid
+000f1630 g DF .text 00000101 (GLIBC_2.1) _IO_fsetpos64
+000f0ec0 g DF .text 00000235 (GLIBC_2.0) _IO_proc_open
+000ad030 w DF .text 00000036 GLIBC_2.0 dup
+000cd8f0 g DF .text 00000028 GLIBC_2.0 __h_errno_location
+000c9920 g DF .text 00000031 GLIBC_PRIVATE __nss_disable_nscd
+000ab210 g DF .text 00000084 GLIBC_2.2 posix_spawn_file_actions_addclose
+0002cfa0 w DF .text 0000002e GLIBC_2.3 strtoul_l
+000b1850 g DF .text 000002ad GLIBC_2.3.3 posix_fallocate64
+000b4080 w DF .text 0000003a GLIBC_2.0 swapon
+00028c90 w DF .text 0000007a GLIBC_2.0 sigblock
+0006d830 g DF .text 00000048 GLIBC_2.1.1 __strcspn_g
+00027c00 w DF .text 0000001e GLIBC_2.0 copysign
+000297e0 w DF .text 0000009e GLIBC_2.1 sigqueue
+00092ee0 g DF .text 000002ec (GLIBC_2.0) fnmatch
+000ad220 w DF .text 00000137 GLIBC_2.0 getcwd
+000acba0 w DF .text 00000116 GLIBC_2.0 euidaccess
+0006d2e0 g DF .text 0000003c GLIBC_2.1.1 __memcpy_by2
+000c9840 g DF .text 00000028 GLIBC_2.2 __res_state
+000cdd70 g DF .text 0000019a GLIBC_2.0 gethostbyname
+000690c0 g DF .text 000001f2 GLIBC_2.0 strsignal
+00000000 w D *UND* 00000000 _dl_starting_up
+000882f0 g DF .text 00000125 GLIBC_2.0 getpwnam
+00060d70 g DF .text 00000070 GLIBC_2.0 _IO_setb
+000eee30 g DF .text 0000002f GLIBC_2.0 __deregister_frame
+000bf160 g DF .text 000000a6 GLIBC_2.0 endspent
+000d84c0 g DF .text 0000005c GLIBC_2.0 authnone_create
+00022860 w DF .text 00000048 GLIBC_2.3 isctype
+000899e0 g DF .text 00000048 GLIBC_2.1.2 __vfork
+00000000 g DO *ABS* 00000000 GLIBC_2.2.4 GLIBC_2.2.4
+00027f90 w DF .text 0000001e GLIBC_2.0 copysignf
+0006dd60 g DF .text 0000002e GLIBC_2.1.1 __strspn_c1
+00088790 g DF .text 000001de GLIBC_2.1.2 getpwnam_r
+000cfa50 g DF .text 00000135 GLIBC_2.0 getservbyname
+0005b220 w DF .text 000000cc GLIBC_2.0 fgetc
+000b37d0 w DF .text 00000096 GLIBC_2.0 gethostname
+00065960 w DF .text 00000225 GLIBC_2.0 memalign
+00043d60 g DF .text 00000034 GLIBC_2.0 sprintf
+000f20f0 g DF .text 000000e6 (GLIBC_2.0) _IO_file_underflow
+000b8d00 g DF .text 0000014d GLIBC_2.0 vwarn
+00069a70 g DF .text 00000044 GLIBC_2.0 __mempcpy
+000d0b20 g DF .text 00000234 GLIBC_2.0 ether_aton_r
+000da030 g DF .text 0000033d GLIBC_2.0 clnttcp_create
+00043da0 w DF .text 00000034 GLIBC_2.0 asprintf
+000b7050 w DF .text 0000007c GLIBC_2.0 msync
+00053ef0 g DF .text 000001ca GLIBC_2.1 fclose
+000688b0 w DF .text 00000154 GLIBC_2.0 strerror_r
+00059600 g DF .text 000006c2 GLIBC_2.2 _IO_wfile_seekoff
+0007ae90 g DF .text 0000000d GLIBC_2.0 difftime
+000be020 g DF .text 0000007d GLIBC_2.1 __iswalnum_l
+00037a40 w DF .text 0000007b GLIBC_2.1 getcontext
+0002dc50 w DF .text 00000052 GLIBC_2.0 strtof
+0005a080 g DF .text 00000469 GLIBC_2.2 _IO_wfile_underflow
+000b55d0 g DF .text 0000001b GLIBC_2.0 insque
+000328c0 w DF .text 00000027 GLIBC_2.3 strtod_l
+00022550 w DF .text 0000000b GLIBC_2.1 __toascii_l
+000b3af0 w DF .text 000000a2 GLIBC_2.0 pselect
+00022550 g DF .text 0000000b GLIBC_2.0 toascii
+00053db0 g DF .text 0000013e GLIBC_2.0 _IO_file_doallocate
+000545d0 g DF .text 00000151 GLIBC_2.0 _IO_fgets
+00068520 g DF .text 000000ae GLIBC_2.0 strcspn
+001022fc g DO .rodata 00000005 GLIBC_2.0 _libc_intl_domainname
+00069e60 w DF .text 0000004e GLIBC_2.3 strncasecmp_l
+000cf040 g DF .text 000001c7 GLIBC_2.1.2 getnetbyname_r
+000be4a0 w DF .text 0000007d GLIBC_2.3 iswspace_l
+000bdfb0 w DF .text 0000006d GLIBC_2.3 towupper_l
+000be3a0 g DF .text 0000007d GLIBC_2.1 __iswprint_l
+000b7dd0 g DF .text 000001cc GLIBC_2.0 qecvt_r
+000e3ec0 g DF .text 00000068 GLIBC_2.0 xdr_key_netstres
+00058220 g DF .text 00000070 GLIBC_2.2 _IO_init_wmarker
+0006d950 g DF .text 00000045 GLIBC_2.1.1 __strpbrk_g
+00053200 w DF .text 0000002d GLIBC_2.0 flockfile
+0001e9e0 g DF .text 0000065e GLIBC_2.0 setlocale
+000baf60 w DF .text 00000039 GLIBC_2.0 getpeername
+00036e40 g DF .text 00000139 GLIBC_2.0 getsubopt
+000bd5a0 w DF .text 000000d5 GLIBC_2.0 iswdigit
+000b2470 g DF .text 00000074 GLIBC_2.0 cfsetspeed
+000522c0 g DF .text 0000003f GLIBC_2.0 scanf
+0009c410 w DF .text 000000a8 GLIBC_2.0 regerror
+000e3960 g DF .text 0000005a GLIBC_2.1 key_setnet
+0005e500 g DF .text 00000057 GLIBC_2.0 _IO_file_read
+000ce340 g DF .text 00000271 GLIBC_2.1.2 gethostbyname_r
+001178e4 g DO .data 00000004 GLIBC_2.0 stderr
+0007ae50 g DF .text 00000039 GLIBC_2.0 ctime_r
+000b5280 w DF .text 000001a6 GLIBC_2.3 futimes
+000ba450 w DF .text 00000036 GLIBC_2.0 umount
+000e9980 w DF .text 00000062 GLIBC_2.0 pututline
+000d48a0 g DF .text 000000a8 GLIBC_2.0 setaliasent
+000b6f60 w DF .text 00000070 GLIBC_2.1 mmap64
+000bbc30 g DF .text 00000055 GLIBC_2.2 shmctl
+000829f0 g DF .text 000021b8 GLIBC_2.3 __wcsftime_l
+000b4140 g DF .text 00000029 GLIBC_2.0 mkstemp
+0006dd90 g DF .text 00000023 GLIBC_2.1.1 __strspn_c2
+000b5c60 g DF .text 0000004c GLIBC_2.0 getttynam
+000b9510 w DF .text 000000b5 GLIBC_2.0 error
+000be120 g DF .text 0000007d GLIBC_2.1 __iswblank_l
+0002bdd0 g DF .text 00000037 GLIBC_2.0 erand48
+00027df0 w DF .text 0000000d GLIBC_2.0 scalbn
+000ac5f0 w DF .text 00000153 GLIBC_2.1 fstatvfs64
+000899e0 w DF .text 00000048 GLIBC_2.0 vfork
+000d0760 g DF .text 000000ad GLIBC_2.0 setrpcent
+00015d00 g DF .text 0000017e GLIBC_2.1 iconv
+000b63e0 g DF .text 00000023 GLIBC_2.0 setlogmask
+00116a80 g DO .data.rel.ro 00000054 GLIBC_2.0 _IO_file_jumps
+0002b8b0 w DF .text 0000005b GLIBC_2.0 srandom
+000680c0 g DF .text 00000078 GLIBC_2.0 obstack_free
+0006b090 w DF .text 000002e9 GLIBC_2.0 argz_replace
+000bc6c0 w DF .text 000001ba GLIBC_2.0 profil
+0006a3f0 w DF .text 00000090 GLIBC_2.0 strsep
+000e9640 g DF .text 00000050 GLIBC_2.1 putmsg
+000635b0 w DF .text 000000b8 GLIBC_2.0 cfree
+00030150 w DF .text 00000027 GLIBC_2.1 __strtof_l
+000ba140 g DF .text 00000048 GLIBC_2.3 setxattr
+000e1be0 g DF .text 000000b3 GLIBC_2.1 xdr_sizeof
+00022560 w DF .text 00000011 GLIBC_2.1 __isascii_l
+00067450 g DF .text 00000094 GLIBC_2.0 muntrace
+00027f20 g DF .text 00000024 GLIBC_2.0 __isinff
+000ac220 w DF .text 0000012f GLIBC_2.1 fstatfs64
+000891a0 g DF .text 0000007c GLIBC_2.0 __waitpid
+000f41d0 g DF .text 00000037 (GLIBC_2.0) getprotoent_r
+00027bb0 w DF .text 00000027 GLIBC_2.0 isnan
+000f1520 g DF .text 00000101 (GLIBC_2.0) _IO_fsetpos
+000d6890 g DF .text 00000bae GLIBC_2.3 getifaddrs
+00089980 g DF .text 00000059 GLIBC_PRIVATE __libc_fork
+0009feb0 w DF .text 00000092 GLIBC_2.0 re_compile_fastmap
+000e1540 g DF .text 00000142 GLIBC_2.0 xdr_reference
+000f4270 g DF .text 00000066 (GLIBC_2.0) getservbyname_r
+000b8e50 g DF .text 00000023 GLIBC_2.0 verr
+000be520 w DF .text 0000007d GLIBC_2.3 iswupper_l
+00057af0 g DF .text 00000059 GLIBC_2.0 putchar_unlocked
+000a4360 w DF .text 0000003a GLIBC_2.0 sched_setparam
+0002b350 g DF .text 00000044 GLIBC_2.0 ldiv
+000de130 g DF .text 00000222 GLIBC_2.0 registerrpc
+000292f0 g DF .text 00000046 GLIBC_2.0 sigismember
+000705f0 g DF .text 00000052 GLIBC_2.0 __wcstof_internal
+0007b7a0 w DF .text 0000003c GLIBC_2.0 timelocal
+00015620 g DF .text 00000031 (GLIBC_2.0) __fixunsxfdi
+000ab510 g DF .text 00000010 GLIBC_2.2 posix_spawnattr_setpgroup
+000e2690 g DF .text 000000a0 GLIBC_2.1 cbc_crypt
+000c9620 g DF .text 00000106 GLIBC_PRIVATE __res_maybe_init
+00056df0 w DF .text 000000cd GLIBC_2.2 getwc
+0011a8ec g DO .bss 00000004 GLIBC_2.1 __key_gendes_LOCAL
+00043400 g DF .text 000008a1 GLIBC_2.1 printf_size
+00070a60 w DF .text 0000003e GLIBC_2.3 wcstol_l
+000f1100 g DF .text 00000088 (GLIBC_2.0) _IO_popen
+000b3c20 w DF .text 00000071 GLIBC_2.0 fsync
+0006d7c0 g DF .text 00000028 GLIBC_2.1.1 __strrchr_g
+000ac030 g DF .text 00000032 GLIBC_2.2 __lxstat64
+00065670 w DF .text 00000107 GLIBC_2.0 valloc
+0006a3f0 g DF .text 00000090 GLIBC_2.1.1 __strsep_g
+000f3e00 g DF .text 00000037 (GLIBC_2.0) getspent_r
+00028170 w DF .text 00000055 GLIBC_2.0 isinfl
+0005ada0 g DF .text 000000e7 GLIBC_2.0 fputc
+00000000 DF *UND* 000003de GLIBC_2.3 ___tls_get_addr
+000ca610 g DF .text 000003c4 GLIBC_2.0 __nss_database_lookup
+000d1f00 g DF .text 00000031 GLIBC_2.0 iruserok
+0006b4f0 g DF .text 000000df GLIBC_2.0 envz_merge
+000b72e0 g DF .text 00000056 GLIBC_2.0 ecvt
+000be800 g DF .text 000000a2 GLIBC_2.0 getspent
+00078770 g DF .text 00000ee8 GLIBC_2.1 __wcscoll_l
+000cc860 g DF .text 000000b8 GLIBC_2.3.4 __strncpy_chk
+000281d0 w DF .text 00000048 GLIBC_2.0 isnanl
+0005cfa0 g DF .text 00000010 GLIBC_2.0 feof_unlocked
+000c6490 g DF .text 00000065 GLIBC_PRIVATE __librt_enable_asynccancel
+000e0ee0 g DF .text 00000059 GLIBC_2.0 xdrrec_eof
+00058ce0 g DF .text 000000ab GLIBC_2.2 _IO_wdefault_finish
+000ede10 g DF .text 00000043 GLIBC_2.1 _dl_mcount_wrapper_check
+0007da80 g DF .text 0000003e GLIBC_2.0 timegm
+000b9c40 w DF .text 00000073 GLIBC_2.0 step
+0006df50 g DF .text 00000073 GLIBC_2.1.1 __strsep_3c
+000b0ff0 g DF .text 00000517 GLIBC_2.0 fts_read
+0005d0f0 g DF .text 000000d0 GLIBC_2.0 _IO_peekc_locked
+00020e00 w DF .text 00000049 GLIBC_2.3 nl_langinfo_l
+00062aa0 w DF .text 00000087 GLIBC_2.0 mallinfo
+000d9440 g DF .text 000002ac GLIBC_2.0 clnt_sperror
+000bc300 g DF .text 00000042 GLIBC_2.0 _mcleanup
+0005ac90 g DF .text 00000068 GLIBC_2.0 _IO_feof
+000229b0 g DF .text 00000071 GLIBC_2.3 __ctype_b_loc
+0006a640 g DF .text 000000dc GLIBC_2.0 strfry
+00117290 g DO .data 00000004 GLIBC_2.0 optopt
+0005d030 g DF .text 00000039 GLIBC_2.0 getchar_unlocked
+000baee0 w DF .text 00000078 GLIBC_2.0 __connect
+000f3db0 g DF .text 0000004f (GLIBC_2.0) shmctl
+0006db10 g DF .text 00000094 GLIBC_2.1.1 __strcpy_small
+00068780 g DF .text 00000064 GLIBC_2.2 __strndup
+00119b50 g DO .bss 00000004 (GLIBC_2.0) h_errno
+00088550 g DF .text 000000db GLIBC_2.1.2 getpwent_r
+000aadb0 w DF .text 00000082 GLIBC_2.1 pread
+000cfe40 g DF .text 0000016c GLIBC_2.1.2 getservbyport_r
+000c62e0 g DF .text 00000020 GLIBC_2.0 pthread_self
+000f0d80 g DF .text 0000013d (GLIBC_2.0) _IO_proc_close
+000c6340 g DF .text 00000033 GLIBC_2.0 pthread_setcanceltype
+0005ab20 g DF .text 0000010f GLIBC_2.2 fwide
+000bdae0 w DF .text 000000d0 GLIBC_2.0 iswupper
+00115480 g DO .data.rel.ro 000001ec (GLIBC_2.0) _sys_errlist
+000bafe0 w DF .text 00000039 GLIBC_2.0 getsockopt
+00087580 g DF .text 000001de GLIBC_2.1.2 getgrgid_r
+000bf080 g DF .text 000000db GLIBC_2.1.2 getspent_r
+0008ba80 g DF .text 0000006a GLIBC_2.0 globfree
+0007af50 w DF .text 00000033 GLIBC_2.0 localtime_r
+000c67e0 g DF .text 0000009e GLIBC_2.0 hstrerror
+000d60c0 g DF .text 00000021 GLIBC_2.3 freeifaddrs
+000a4a90 g DF .text 00000625 GLIBC_2.0 getaddrinfo
+000168f0 g DF .text 00000016 GLIBC_PRIVATE __gconv_get_modules_db
+00093980 w DF .text 0000001f GLIBC_2.0 re_set_syntax
+000bb420 w DF .text 00000039 GLIBC_2.0 socketpair
+00058140 g DF .text 00000049 GLIBC_2.2 _IO_sputbackwc
+0008a7d0 w DF .text 00000035 GLIBC_2.0 setresgid
+0005d070 g DF .text 0000003e GLIBC_2.0 fflush_unlocked
+000b7150 w DF .text 00000048 GLIBC_2.3.3 remap_file_pages
+000edf70 g DF .text 00000037 GLIBC_PRIVATE __libc_dlclose
+000b8550 w DF .text 00000022 GLIBC_2.0 twalk
+000b5260 w DF .text 00000015 GLIBC_2.3 lutimes
+000f1190 g DF .text 00000021 (GLIBC_2.0) pclose
+000e24f0 g DF .text 000000bf GLIBC_2.1 xdr_authdes_cred
+00080940 g DF .text 00000059 GLIBC_2.0 strftime
+0006abc0 w DF .text 000000c7 GLIBC_2.0 argz_create_sep
+00028050 w DF .text 0000000d GLIBC_2.1 scalblnf
+00057220 g DF .text 0000010f GLIBC_2.2 fputws
+00070a60 w DF .text 0000003e GLIBC_2.1 __wcstol_l
+000e9b90 w DF .text 000000d2 GLIBC_2.0 getutid_r
+0005d220 g DF .text 000000a6 GLIBC_2.1 fwrite_unlocked
+0005bed0 w DF .text 00000034 GLIBC_2.0 obstack_printf
+00118d44 g DO .bss 00000004 GLIBC_2.0 __timezone
+0006eb30 g DF .text 0000009c GLIBC_2.0 wmemcmp
+0007dac0 g DF .text 0000007a GLIBC_2.0 ftime
+0002b3a0 g DF .text 00000095 GLIBC_2.0 lldiv
+0006d3b0 g DF .text 00000035 GLIBC_2.1.1 __memset_gcn_by4
+00058360 g DF .text 00000036 GLIBC_2.2 _IO_unsave_wmarkers
+0006ec30 w DF .text 00000024 GLIBC_2.0 wmemmove
+000b1b50 g DF .text 00000042 GLIBC_2.3 sendfile64
+0005f0a0 g DF .text 00000147 GLIBC_2.0 _IO_file_open
+000ab4d0 g DF .text 0000001e GLIBC_2.2 posix_spawnattr_setflags
+000c7580 g DF .text 00000034 GLIBC_2.0 __res_randomid
+00086590 g DF .text 0000005e GLIBC_2.0 getdirentries
+000221d0 g DF .text 0000007d GLIBC_2.0 isdigit
+000f1f20 g DF .text 00000143 (GLIBC_2.0) _IO_file_overflow
+00054dc0 g DF .text 00000131 GLIBC_2.2 _IO_fsetpos
+000f44d0 g DF .text 0000005f (GLIBC_2.0) getaliasbyname_r
+00069c70 w DF .text 00000091 GLIBC_2.0 stpncpy
+000b41a0 g DF .text 00000043 GLIBC_2.2 mkdtemp
+000b4700 g DF .text 00000084 GLIBC_2.0 getmntent
+000226c0 g DF .text 00000015 GLIBC_2.1 __isalnum_l
+00055210 w DF .text 00000167 GLIBC_2.0 fwrite
+00060120 g DF .text 0000002d GLIBC_2.2 _IO_list_unlock
+000ac9a0 w DF .text 00000071 GLIBC_2.0 __close
+000bad00 g DF .text 00000042 GLIBC_2.0 quotactl
+0007da20 g DF .text 00000058 GLIBC_2.0 dysize
+000f11c0 g DF .text 0000009d (GLIBC_2.0) tmpfile
+0011a8f4 g DO .bss 0000000c GLIBC_2.0 svcauthdes_stats
+00037340 g DF .text 00000631 GLIBC_2.1 fmtmsg
+000acb60 w DF .text 0000003a GLIBC_2.0 access
+0011a664 g DO .bss 00000004 GLIBC_2.0 mallwatch
+000ba550 g DF .text 00000013 GLIBC_2.0 setfsgid
+000abd70 g DF .text 0000008d GLIBC_2.0 __xstat
+000a44d0 g DF .text 00000036 GLIBC_2.0 __sched_get_priority_min
+000aeeb0 g DF .text 00000041 GLIBC_2.3.3 nftw
+0002c4f0 g DF .text 00000059 (GLIBC_2.0) __strtoq_internal
+0005f940 g DF .text 00000077 GLIBC_2.0 _IO_switch_to_get_mode
+0006d600 g DF .text 00000042 GLIBC_2.1.1 __strncat_g
+000e5530 g DF .text 0000005a GLIBC_2.1 passwd2des
+000ab1e0 g DF .text 00000026 GLIBC_2.2 posix_spawn_file_actions_destroy
+000e95a0 g DF .text 0000004d GLIBC_2.1 getmsg
+00048410 g DF .text 00005615 GLIBC_2.0 _IO_vfscanf
+000d8d10 g DF .text 0000016c GLIBC_2.0 bindresvport
+00056960 g DF .text 000001a3 GLIBC_2.2 _IO_fgetpos64
+000d0af0 g DF .text 0000002d GLIBC_2.0 ether_aton
+000cd3a0 g DF .text 0000000e GLIBC_2.0 htons
+00035ab0 w DF .text 00000029 GLIBC_2.0 canonicalize_file_name
+0002dbf0 g DF .text 00000052 GLIBC_2.0 __strtof_internal
+000c6210 g DF .text 0000002a GLIBC_2.0 pthread_mutex_destroy
+0011a840 g DO .bss 00000080 GLIBC_2.0 svc_fdset
+00021680 w DF .text 00000084 GLIBC_2.3 freelocale
+00027110 g DF .text 0000006d GLIBC_2.0 catclose
+001157a0 g DO .data.rel.ro 00000080 (GLIBC_2.0) sys_sigabbrev
+000b8b70 g DF .text 00000075 GLIBC_2.0 lsearch
+00079f60 w DF .text 00000053 GLIBC_2.1 wcscasecmp
+000483d0 w DF .text 00000037 GLIBC_2.0 vfscanf
+000f1630 g DF .text 00000101 (GLIBC_2.1) fsetpos64
+0007e110 g DF .text 00000062 GLIBC_2.0 strptime
+000dd170 g DF .text 00000039 GLIBC_2.2.3 __rpc_thread_createerr
+0005b6c0 g DF .text 000000d2 GLIBC_2.0 rewind
+0002c610 w DF .text 00000058 GLIBC_2.0 strtouq
+00117284 g DO .data 00000004 GLIBC_2.0 re_max_failures
+0005ae90 g DF .text 00000296 GLIBC_2.0 freopen
+00066e00 g DF .text 000000f8 GLIBC_2.0 mcheck
+000589e0 g DF .text 000000e7 GLIBC_2.2 __wuflow
+000a2840 w DF .text 00000037 GLIBC_2.0 re_search
+0005d000 w DF .text 00000028 GLIBC_2.1 fgetc_unlocked
+0008b0f0 g DF .text 00000673 GLIBC_2.2 __sysconf
+000bb840 g DF .text 000000c4 GLIBC_PRIVATE __libc_msgrcv
+0002bbf0 w DF .text 00000117 GLIBC_2.0 initstate_r
+000c6280 g DF .text 0000002a GLIBC_2.0 pthread_mutex_lock
+000f4170 g DF .text 0000005f (GLIBC_2.0) getprotobynumber_r
+0002bd90 g DF .text 00000034 GLIBC_2.0 drand48
+000b27c0 g DF .text 00000041 GLIBC_2.0 tcgetpgrp
+000d5b90 g DF .text 00000046 GLIBC_2.1 if_freenameindex
+00028a40 w DF .text 00000053 GLIBC_2.0 __sigaction
+000cc920 g DF .text 00000032 GLIBC_2.3.4 __sprintf_chk
+00029470 g DF .text 00000035 GLIBC_2.0 sigandset
+00022ef0 w DF .text 00000024 GLIBC_2.0 gettext
+00066840 g DF .text 000003b7 GLIBC_2.0 __libc_calloc
+0006aee0 g DF .text 00000054 GLIBC_2.0 __argz_stringify
+00028170 g DF .text 00000055 GLIBC_2.0 __isinfl
+0002c230 w DF .text 0000006a GLIBC_2.0 lcong48_r
+00119118 g DO .bss 00000004 GLIBC_2.0 __curbrk
+00057690 g DF .text 000000e1 GLIBC_2.2 ungetwc
+00070170 g DF .text 00000059 GLIBC_2.0 __wcstol_internal
+00015690 g DF .text 00000023 (GLIBC_2.0) __fixunsdfdi
+00000000 DO *UND* 00000004 GLIBC_PRIVATE __libc_enable_secure
+0006d450 g DF .text 00000030 GLIBC_2.1.1 __strcpy_g
+000b1510 g DF .text 000000a2 GLIBC_PRIVATE __libc_poll
+000e0810 g DF .text 0000003e GLIBC_2.0 xdr_float
+0005f9c0 g DF .text 00000076 GLIBC_2.0 _IO_doallocbuf
+00069e60 g DF .text 0000004e GLIBC_2.1 __strncasecmp_l
+00000000 g DO *ABS* 00000000 GLIBC_2.2.2 GLIBC_2.2.2
+00060640 w DF .text 00000177 GLIBC_2.2 _flushlbf
+000ce5c0 g DF .text 000000a4 GLIBC_2.0 gethostent
+000809a0 g DF .text 00000059 GLIBC_2.2 wcsftime
+000cebf0 g DF .text 0000014c GLIBC_2.0 getnetbyname
+000dd760 g DF .text 00000074 GLIBC_2.0 svc_unregister
+000155c0 g DF .text 00000028 GLIBC_2.0 __errno_location
+00015960 g DF .text 0000007c (GLIBC_2.0) __divdi3
+00036df0 g DF .text 00000042 GLIBC_2.1 __strfmon_l
+000aded0 w DF .text 0000003a GLIBC_2.0 link
+000bba60 g DF .text 00000062 GLIBC_2.2 semctl
+000b98e0 w DF .text 00000210 GLIBC_2.0 get_nprocs
+0006ac90 g DF .text 00000044 GLIBC_2.0 __argz_next
+00087940 g DF .text 000002e5 GLIBC_PRIVATE _nss_files_parse_grent
+00117488 g DO .data 00000004 (GLIBC_2.2) __ctype32_tolower
+0005bb50 w DF .text 000000f5 GLIBC_2.0 __vsnprintf
+0006e520 g DF .text 0000005b GLIBC_2.0 wcsdup
+000be7a0 w DF .text 0000005d GLIBC_2.3 towctrans_l
+000680c0 g DF .text 00000078 GLIBC_2.0 _obstack_free
+000bb9c0 g DF .text 0000004f GLIBC_2.0 semop
+0002af90 g DF .text 000000db GLIBC_2.0 exit
+000c6060 g DF .text 00000033 (GLIBC_2.0) pthread_cond_init
+00118644 w DO .bss 00000004 GLIBC_2.0 __free_hook
+000c6030 g DF .text 0000002a GLIBC_2.3.2 pthread_cond_destroy
+0006d430 g DF .text 00000016 GLIBC_2.1.1 __strlen_g
+000bdbb0 g DF .text 000000be GLIBC_2.0 towlower
+00000000 w D *UND* 00000000 __pthread_setspecific
+00069d10 g DF .text 00000068 GLIBC_2.0 __strcasecmp
+000bb780 g DF .text 000000b5 GLIBC_PRIVATE __libc_msgsnd
+000abe00 g DF .text 0000008d GLIBC_2.0 __fxstat
+000d1200 g DF .text 0000002d GLIBC_2.0 ether_ntoa
+0002cfa0 w DF .text 0000002e GLIBC_2.1 __strtoul_l
+0002b2c0 g DF .text 00000031 GLIBC_2.0 llabs
+00043d60 g DF .text 00000034 GLIBC_2.0 _IO_sprintf
+000d74f0 g DF .text 0000009d GLIBC_2.3.3 inet6_option_next
+000be320 w DF .text 0000007d GLIBC_2.3 iswgraph_l
+00022e50 w DF .text 00000015 GLIBC_2.0 bindtextdomain
+0007d9e0 g DF .text 00000036 GLIBC_2.0 stime
+000b9e80 g DF .text 0000003c GLIBC_2.3 flistxattr
+000baac0 g DF .text 0000003c GLIBC_2.0 klogctl
+00058c50 g DF .text 00000083 GLIBC_2.2 _IO_wsetb
+000292b0 g DF .text 00000040 GLIBC_2.0 sigdelset
+00035c60 g DF .text 0000007c GLIBC_2.0 rpmatch
+0005b7a0 g DF .text 00000033 GLIBC_2.0 setbuf
+00028060 w DF .text 0000006b GLIBC_2.0 frexpf
+000e5650 g DF .text 000000bb GLIBC_2.0 xencrypt
+00029390 w DF .text 000000a7 GLIBC_2.1 sysv_signal
+000c6bc0 g DF .text 00000255 GLIBC_2.0 inet_ntop
+000283f0 w DF .text 00000072 GLIBC_2.0 frexpl
+00022720 w DF .text 00000017 GLIBC_2.3 isdigit_l
+000b3040 w DF .text 00000042 GLIBC_2.0 brk
+000bd220 w DF .text 000000d5 GLIBC_2.0 iswalnum
+000db490 g DF .text 000000ac GLIBC_2.0 get_myaddress
+00057f30 g DF .text 00000024 GLIBC_2.2 swscanf
+0008a750 w DF .text 00000035 GLIBC_2.0 getresgid
+00021d20 g DF .text 00000195 GLIBC_2.0 __assert_perror_fail
+0003ad40 g DF .text 0000414a GLIBC_2.0 _IO_vfprintf
+00087060 g DF .text 00000125 GLIBC_2.0 getgrnam
+0011a8c0 g DO .bss 0000000c GLIBC_2.0 _null_auth
+0006e470 g DF .text 0000002e GLIBC_2.0 wcscmp
+000e14c0 g DF .text 0000007f GLIBC_2.0 xdr_pointer
+000cdf10 g DF .text 000001a2 GLIBC_2.0 gethostbyname2
+000ab0a0 w DF .text 00000094 GLIBC_2.1 __pwrite64
+000561e0 g DF .text 000000ea GLIBC_2.0 _IO_seekoff
+000ba5c0 g DF .text 0000006b GLIBC_2.3.3 gnu_dev_makedev
+00056b40 g DF .text 00000137 GLIBC_2.2 fsetpos64
+0011a6cc g DO .bss 00000004 GLIBC_2.0 error_one_per_line
+000ddb40 g DF .text 00000062 GLIBC_2.1 _authenticate
+00000000 DO *UND* 00000004 GLIBC_PRIVATE _dl_argv
+000227a0 w DF .text 00000015 GLIBC_2.3 ispunct_l
+000b7290 g DF .text 00000050 GLIBC_2.0 gcvt
+000ba780 w DF .text 00000036 GLIBC_2.1 ntp_adjtime
+00054840 g DF .text 00000033 GLIBC_2.1 fopen
+00029b80 g DF .text 00000028 GLIBC_2.0 atoi
+0008d450 g DF .text 0000006a GLIBC_2.1 globfree64
+0006d910 g DF .text 00000032 GLIBC_2.1.1 __strpbrk_cg
+00022150 g DF .text 0000007b GLIBC_2.0 iscntrl
+000aff20 g DF .text 000000ef GLIBC_2.0 fts_close
+0005cfb0 g DF .text 00000010 GLIBC_2.0 ferror_unlocked
+00027180 g DF .text 00000182 GLIBC_2.0 catopen
+0005b5d0 g DF .text 000000e7 GLIBC_2.0 _IO_putc
+000f3d00 g DF .text 0000004f (GLIBC_2.0) msgctl
+000ba6f0 g DF .text 0000003a (GLIBC_2.0) setrlimit
+000cca70 g DF .text 00000102 GLIBC_2.3.4 __vsnprintf_chk
+000e99f0 w DF .text 00000069 GLIBC_2.0 getutent_r
+000f27d0 g DF .text 000001ed (GLIBC_2.1) scandir64
+0005ad70 g DF .text 00000027 GLIBC_2.0 fileno
+000c4de0 w DF .text 00000b50 GLIBC_2.1 argp_parse
+000b6770 g DF .text 000005c7 GLIBC_2.0 vsyslog
+000370e0 g DF .text 00000072 GLIBC_2.1 addseverity
+000c5ee0 g DF .text 00000033 GLIBC_2.0 pthread_attr_setschedpolicy
+00061220 g DF .text 00000042 GLIBC_2.0 _IO_str_underflow
+000d36d0 g DF .text 0000003f GLIBC_2.0 rexec
+00028670 g DF .text 00000022 GLIBC_2.0 _setjmp
+0005d2d0 g DF .text 000000a2 GLIBC_2.1 fgets_unlocked
+00022930 g DF .text 00000071 GLIBC_2.3 __ctype_toupper_loc
+00071940 w DF .text 0000003e GLIBC_2.3 wcstoull_l
+00028160 g DF .text 0000000d GLIBC_2.1 __signbitf
+00053080 w DF .text 0000003a GLIBC_2.0 getline
+00073ea0 w DF .text 00000037 GLIBC_2.3 wcstod_l
+0006ecc0 w DF .text 00000038 GLIBC_2.0 wcpcpy
+000d0150 g DF .text 000000a6 GLIBC_2.0 endservent
+00000000 w D *UND* 00000000 _IO_stdin_used
+00089a28 g DF .text 00000013 GLIBC_2.0 _exit
+000e6840 g DF .text 000002c8 GLIBC_2.1 svcunix_create
+0006e400 w DF .text 00000034 GLIBC_2.0 wcscat
+00056360 g DF .text 000000e3 GLIBC_2.0 _IO_seekpos
+000f1a90 g DF .text 000003f0 (GLIBC_2.0) _IO_file_seekoff
+00054410 g DF .text 000001b8 GLIBC_2.2 fgetpos
+00078770 w DF .text 00000ee8 GLIBC_2.3 wcscoll_l
+000685d0 w DF .text 00000146 GLIBC_2.1 strverscmp
+00088240 g DF .text 000000a2 GLIBC_2.0 getpwent
+0007aea0 g DF .text 00000033 GLIBC_2.0 gmtime
+00069310 g DF .text 000000ae GLIBC_2.0 strspn
+0006ef90 g DF .text 00000155 GLIBC_2.0 wctob
+0005df90 g DF .text 000001cc GLIBC_2.1 _IO_file_xsputn
+00053ef0 g DF .text 000001ca GLIBC_2.1 _IO_fclose
+000b71e0 g DF .text 0000003a GLIBC_2.0 munlock
+00052980 g DF .text 00000077 GLIBC_2.0 tempnam
+000b6d90 g DF .text 00000168 GLIBC_2.0 daemon
+000b8ed0 g DF .text 000000ef GLIBC_2.0 vwarnx
+000c6240 g DF .text 00000033 GLIBC_2.0 pthread_mutex_init
+00015320 g DF .text 000000e7 GLIBC_2.0 __libc_start_main
+000283e0 w DF .text 0000000d GLIBC_2.1 scalblnl
+000ad0f0 g DF .text 00000078 GLIBC_PRIVATE __libc_creat
+000d0060 g DF .text 000000e2 GLIBC_2.1.2 getservent_r
+00068a10 g DF .text 000000af GLIBC_2.0 strlen
+000ba3c0 w DF .text 00000087 GLIBC_2.1 lseek64
+0006aa00 w DF .text 00000078 GLIBC_2.0 argz_append
+00028b30 g DF .text 00000034 GLIBC_2.0 sigpending
+000ac840 w DF .text 0000007c GLIBC_2.0 open
+000b4040 g DF .text 00000036 GLIBC_2.0 vhangup
+00086140 g DF .text 0000018f GLIBC_2.2 readdir64_r
+000f2b20 g DF .text 00000037 (GLIBC_2.0) getpwent_r
+00117db4 w DO .data 00000004 GLIBC_2.0 program_invocation_name
+000e6e80 g DF .text 0000003f GLIBC_2.1 xdr_uint32_t
+000abbb0 g DF .text 00000015 GLIBC_2.2 posix_spawnattr_getschedpolicy
+000ba330 w DF .text 0000008e GLIBC_2.0 clone
+000edfb0 g DF .text 00000063 GLIBC_PRIVATE __libc_dlsym
+00021ef0 g DF .text 00000068 GLIBC_2.0 toupper
+000e0640 g DF .text 000001c7 GLIBC_2.0 xdr_array
+00057c10 g DF .text 00000039 GLIBC_2.2 wprintf
+000483d0 g DF .text 00000037 GLIBC_2.0 __vfscanf
+000e4090 g DF .text 0000006c GLIBC_2.0 xdr_cryptkeyarg2
+000acd00 w DF .text 000000b3 GLIBC_2.0 __fcntl
+000b2ae0 g DF .text 00000032 GLIBC_2.2 getrlimit
+000b9f00 g DF .text 00000048 GLIBC_2.3 fsetxattr
+00029be0 g DF .text 00000028 GLIBC_2.0 atoll
+000e3410 g DF .text 00000037 GLIBC_2.1 des_setparity
+000f1390 g DF .text 00000181 (GLIBC_2.1) fgetpos64
+0007ada0 g DF .text 00000088 GLIBC_2.0 clock
+000530c0 g DF .text 00000049 GLIBC_2.0 getw
+000e3de0 g DF .text 00000068 GLIBC_2.1 xdr_getcredres
+0006d6e0 g DF .text 00000021 GLIBC_2.1.1 __strchr_c
+00078570 g DF .text 00000052 GLIBC_2.0 wcsxfrm
+0005b9b0 w DF .text 000000da GLIBC_2.0 vdprintf
+00021ec0 g DF .text 00000025 GLIBC_2.2 __assert
+0005fd30 g DF .text 0000003f GLIBC_2.0 _IO_init
+00022760 w DF .text 00000017 GLIBC_2.3 isgraph_l
+000763d0 w DF .text 00000037 GLIBC_2.1 __wcstold_l
+00117478 g DO .data 00000004 (GLIBC_2.0) __ctype_b
+000eb880 w DF .text 00000398 GLIBC_2.1 ptsname_r
+00021520 g DF .text 00000159 GLIBC_2.1 __duplocale
+00094c00 w DF .text 00000060 GLIBC_2.0 regfree
+0006ac90 w DF .text 00000044 GLIBC_2.0 argz_next
+0006e210 g DF .text 00000051 GLIBC_2.1.1 __strsep_1c
+00089980 g DF .text 00000059 GLIBC_2.0 __fork
+0002b300 g DF .text 00000044 GLIBC_2.0 div
+000eb070 w DF .text 0000010d GLIBC_2.0 updwtmp
+00022580 w DF .text 00000015 GLIBC_2.3 isblank_l
+000f3a80 g DF .text 00000042 (GLIBC_2.0) regexec
+0002b2a0 g DF .text 0000000d GLIBC_2.0 abs
+00070470 g DF .text 00000052 GLIBC_2.0 __wcstod_internal
+000682f0 g DF .text 00000167 GLIBC_2.0 strchr
+000e9a60 w DF .text 0000004c GLIBC_2.0 setutent
+000f2070 g DF .text 00000072 (GLIBC_2.0) _IO_file_attach
+000600b0 g DF .text 00000007 GLIBC_2.2 _IO_iter_end
+00078670 g DF .text 000000f5 GLIBC_2.0 wcswidth
+000cc540 g DF .text 0000004e GLIBC_2.3.4 __mempcpy_chk
+000e2480 g DF .text 00000069 GLIBC_2.1 xdr_authdes_verf
+00054b50 w DF .text 00000146 GLIBC_2.0 fputs
+0006ace0 g DF .text 00000080 GLIBC_2.0 argz_delete
+0011a8cc g DO .bss 00000004 GLIBC_2.2 svc_max_pollfd
+000ba780 w DF .text 00000036 GLIBC_2.0 adjtimex
+00089fd0 g DF .text 000002de GLIBC_2.0 execvp
+000d0ec0 g DF .text 00000334 GLIBC_2.0 ether_line
+000c5e60 g DF .text 00000033 GLIBC_2.0 pthread_attr_setschedparam
+00079fc0 w DF .text 0000006c GLIBC_2.1 wcsncasecmp
+001157a0 g DO .data.rel.ro 00000104 GLIBC_2.3.3 sys_sigabbrev
+0008a6e0 w DF .text 0000002e GLIBC_2.0 setsid
+000ee290 g DF .text 0000001f GLIBC_PRIVATE _dl_sym
+0005cb10 g DF .text 00000036 GLIBC_PRIVATE __libc_fatal
+000355d0 g DF .text 000004d7 GLIBC_2.3 realpath
+000880c0 g DF .text 00000175 GLIBC_2.0 putpwent
+000b3090 g DF .text 00000073 GLIBC_2.0 __sbrk
+000b3710 g DF .text 0000004d GLIBC_2.0 setegid
+000b7010 w DF .text 0000003c GLIBC_2.0 mprotect
+0005e390 g DF .text 00000082 GLIBC_2.1 _IO_file_attach
+000ba840 g DF .text 0000003a GLIBC_2.1 capset
+000b0c40 g DF .text 00000124 GLIBC_2.0 fts_children
+0011a8d0 g DO .bss 00000010 GLIBC_2.0 rpc_createerr
+000abc50 g DF .text 0000001d GLIBC_2.2 posix_spawnattr_setschedpolicy
+000f0940 g DF .text 0000005a (GLIBC_2.0) fopencookie
+0011a6e8 g DO .bss 00000004 GLIBC_2.1 argp_program_version_hook
+00028e30 g DF .text 00000069 GLIBC_2.0 __sigpause
+000855e0 w DF .text 00000085 GLIBC_2.0 closedir
+00058ad0 g DF .text 00000175 GLIBC_2.2 _IO_wdefault_pbackfail
+00029770 g DF .text 00000069 GLIBC_PRIVATE __libc_sigwaitinfo
+000b8eb0 g DF .text 0000001d GLIBC_2.0 warn
+000bf430 g DF .text 000003f5 GLIBC_PRIVATE _nss_files_parse_spent
+00056df0 w DF .text 000000cd GLIBC_2.2 fgetwc
+000cef80 g DF .text 000000b2 GLIBC_2.0 setnetent
+00052250 w DF .text 00000037 GLIBC_2.2 vfwscanf
+000be720 w DF .text 00000071 GLIBC_2.3 wctrans_l
+0006e0c0 g DF .text 0000005f GLIBC_2.1.1 __strncpy_byn
+0002b3a0 w DF .text 00000095 GLIBC_2.1.1 imaxdiv
+00117698 g DO .data 00000004 GLIBC_2.0 _IO_list_all
+000b9bc0 w DF .text 0000007c GLIBC_2.0 advance
+000ba880 g DF .text 0000003c GLIBC_2.0 create_module
+000703b0 w DF .text 00000058 GLIBC_2.0 wcstouq
+000ee020 g DF .text 00000054 GLIBC_PRIVATE __libc_dlopen_mode
+0006dfd0 g DF .text 00000031 GLIBC_2.1.1 __memcpy_c
+000b5f80 g DF .text 0000001d GLIBC_2.0 setusershell
+0006b5d0 g DF .text 00000047 GLIBC_2.0 envz_remove
+0005b820 w DF .text 00000181 GLIBC_2.0 vasprintf
+000b9f50 g DF .text 00000042 GLIBC_2.3 getxattr
+000deda0 g DF .text 00000025 GLIBC_2.0 svcudp_create
+000c5d60 g DF .text 00000033 GLIBC_2.0 pthread_attr_setdetachstate
+000bb160 w DF .text 00000078 GLIBC_2.0 recvmsg
+0005cfc0 g DF .text 0000003b GLIBC_2.0 fputc_unlocked
+0006a8a0 w DF .text 0000015f GLIBC_2.1.1 strchrnul
+0011a8e0 g DO .bss 00000004 GLIBC_2.2 svc_pollfd
+000de020 g DF .text 00000105 GLIBC_2.0 svc_run
+00000000 DO *UND* 0000000e GLIBC_PRIVATE _dl_out_of_memory
+00086530 g DF .text 00000024 GLIBC_2.2 alphasort64
+0005c7c0 g DF .text 0000000f GLIBC_2.2 __fwriting
+000227e0 g DF .text 00000017 GLIBC_2.1 __isupper_l
+00028b70 g DF .text 000000a2 GLIBC_PRIVATE __libc_sigsuspend
+000f3bf0 g DF .text 00000024 (GLIBC_2.2) posix_fadvise64
+0011a8f0 g DO .bss 00000004 GLIBC_2.1 __key_decryptsession_pk_LOCAL
+000acd00 w DF .text 000000b3 GLIBC_2.0 fcntl
+00000000 g DO *ABS* 00000000 GLIBC_2.1.3 GLIBC_2.1.3
+0007c870 w DF .text 00000074 GLIBC_2.0 tzset
+000cf8e0 g DF .text 00000165 GLIBC_2.1.2 getprotobyname_r
+000a4460 w DF .text 0000002e GLIBC_2.0 sched_yield
+000cfb90 g DF .text 0000016c GLIBC_2.1.2 getservbyname_r
+000bdd70 g DF .text 00000072 GLIBC_2.0 __iswctype
+0006ddc0 g DF .text 00000028 GLIBC_2.1.1 __strspn_c3
+000edba0 g DF .text 00000269 GLIBC_PRIVATE _dl_addr
+00066f00 g DF .text 00000030 GLIBC_2.2 mcheck_pedantic
+000bd060 g DF .text 00000013 GLIBC_2.0 _mcount
+00028470 w DF .text 00000084 GLIBC_2.0 ldexpl
+00056d80 g DF .text 0000006e GLIBC_2.2 fputwc_unlocked
+0008a4d0 w DF .text 0000002f GLIBC_2.0 setuid
+0008a5d0 w DF .text 00000036 GLIBC_2.0 getpgid
+000ac8c0 w DF .text 000000d4 GLIBC_2.2 __open64
+0005f1f0 g DF .text 0000042b GLIBC_2.1 _IO_file_fopen
+0002bed0 g DF .text 00000037 GLIBC_2.0 jrand48
+00060b80 g DF .text 00000135 GLIBC_2.0 _IO_un_link
+000ee3f0 g DF .text 00000036 GLIBC_2.0 __register_frame_info_table
+00086340 g DF .text 000001ed GLIBC_2.2 scandir64
+0005e420 g DF .text 000000a4 GLIBC_2.1 _IO_file_write
+000b3d50 g DF .text 000001fa GLIBC_2.0 gethostid
+000f40b0 g DF .text 00000041 (GLIBC_2.0) getnetent_r
+0005c500 g DF .text 000000e3 GLIBC_2.1 fseeko64
+000b98e0 w DF .text 00000210 GLIBC_2.0 get_nprocs_conf
+000ad360 g DF .text 00000074 GLIBC_2.0 getwd
+000a29c0 w DF .text 00000047 GLIBC_2.0 re_exec
+000d7490 g DF .text 00000011 GLIBC_2.3.3 inet6_option_space
+000da9c0 g DF .text 00000340 GLIBC_2.0 clntudp_bufcreate
+00060490 g DF .text 00000142 GLIBC_2.0 _IO_default_pbackfail
+000b24f0 g DF .text 0000020c GLIBC_2.0 tcsetattr
+00119b50 w DO .bss 00000004 (GLIBC_2.0) _h_errno
+0006d4c0 g DF .text 00000040 GLIBC_2.1.1 __mempcpy_by2
+00029440 g DF .text 0000002c GLIBC_2.0 sigisemptyset
+000ac800 w DF .text 0000003a GLIBC_2.0 mkdir
+00028d10 w DF .text 0000007a GLIBC_2.0 sigsetmask
+00065b90 w DF .text 0000008c GLIBC_2.2 posix_memalign
+000ee3b0 g DF .text 00000036 GLIBC_2.0 __register_frame_info
+000bb910 g DF .text 0000004e GLIBC_2.0 msgget
+000d9820 g DF .text 00000129 GLIBC_2.0 clntraw_create
+000be9e0 g DF .text 0000013a GLIBC_2.0 sgetspent
+00028c20 w DF .text 00000066 GLIBC_2.0 sigwait
+0006f3b0 w DF .text 000002bc GLIBC_2.0 wcrtomb
+0006dd00 g DF .text 00000058 GLIBC_2.1.1 __strcspn_c3
+000aae90 w DF .text 00000082 GLIBC_2.1 pwrite
+00027e00 w DF .text 00000073 GLIBC_2.0 frexp
+000ac9a0 w DF .text 00000071 GLIBC_2.0 close
+00041860 g DF .text 00000108 GLIBC_2.0 parse_printf_format
+000b7220 g DF .text 00000036 GLIBC_2.0 mlockall
+000784e0 w DF .text 00000037 GLIBC_2.3 wcstof_l
+0008aa40 g DF .text 00000015 GLIBC_2.0 setlogin
+0011747c g DO .data 00000004 (GLIBC_2.0) __ctype32_b
+000c5e20 g DF .text 00000033 GLIBC_2.0 pthread_attr_getschedparam
+000600c0 g DF .text 0000000b GLIBC_2.2 _IO_iter_next
+000abff0 g DF .text 00000032 GLIBC_2.2 __fxstat64
+000bbad0 g DF .text 0000004b GLIBC_2.3.3 semtimedop
+0002b570 g DF .text 000000c4 GLIBC_2.0 mbtowc
+0002c1a0 w DF .text 00000039 GLIBC_2.0 srand48_r
+00117d80 w DO .data 00000004 GLIBC_2.0 __memalign_hook
+000859d0 g DF .text 0000000b GLIBC_2.0 telldir
+00023d40 w DF .text 00000048 GLIBC_2.2 dcngettext
+000b4630 g DF .text 00000070 GLIBC_2.0 getfsspec
+0005cbf0 g DF .text 0000013b GLIBC_2.2 fmemopen
+000ab420 g DF .text 00000007 GLIBC_2.2 posix_spawnattr_destroy
+0003ad40 g DF .text 0000414a GLIBC_2.0 vfprintf
+00069c70 g DF .text 00000091 GLIBC_2.0 __stpncpy
+00117600 g DO .data 00000098 GLIBC_2.1 _IO_2_1_stderr_
+00117db4 g DO .data 00000004 GLIBC_2.0 __progname_full
+000cc590 g DF .text 000000db GLIBC_2.3.4 __memset_chk
+00028220 g DF .text 0000000e GLIBC_2.0 __finitel
+00115680 g DO .data.rel.ro 00000104 GLIBC_2.3.3 _sys_siglist
+00068fb0 g DF .text 000000b3 GLIBC_2.0 strpbrk
+000b2810 g DF .text 00000033 GLIBC_2.0 tcsetpgrp
+00000000 g DO *ABS* 00000000 GLIBC_2.3 GLIBC_2.3
+00000000 DO *UND* 00000004 GLIBC_2.1 __libc_stack_end
+0008e100 g DF .text 00000e58 GLIBC_2.2 glob64
+000cb8f0 g DF .text 0000008a GLIBC_2.0 __nss_passwd_lookup
+000dfc00 g DF .text 0000002a GLIBC_2.0 xdr_int
+000dfcd0 g DF .text 000000d6 GLIBC_2.1.1 xdr_hyper
+00028b70 w DF .text 000000a2 GLIBC_2.0 sigsuspend
+00056c80 g DF .text 000000fc GLIBC_2.2 fputwc
+00028850 g DF .text 00000046 GLIBC_2.0 raise
+000b45b0 g DF .text 00000071 GLIBC_2.0 getfsfile
+000b2900 g DF .text 00000033 GLIBC_2.0 tcflow
+000d91b0 g DF .text 00000084 GLIBC_2.0 clnt_sperrno
+000227c0 g DF .text 00000017 GLIBC_2.1 __isspace_l
+0005ff70 g DF .text 0000007c GLIBC_2.0 _IO_seekmark
+000635b0 g DF .text 000000b8 GLIBC_2.0 free
+000bded0 g DF .text 0000005d GLIBC_2.1 __towctrans
+000c9870 g DF .text 000000b0 GLIBC_PRIVATE __gai_sigqueue
+000dff40 g DF .text 00000068 GLIBC_2.0 xdr_u_short
+000f08b0 g DF .text 0000003d (GLIBC_2.0) realpath
+00028aa0 w DF .text 0000004b GLIBC_2.0 sigprocmask
+00054840 g DF .text 00000033 GLIBC_2.1 _IO_fopen
+000c7510 g DF .text 00000070 GLIBC_2.2 __res_nclose
+000e3e50 g DF .text 0000006c GLIBC_2.0 xdr_key_netstarg
+0006f0f0 w DF .text 00000019 GLIBC_2.0 mbsinit
+000bafa0 g DF .text 00000039 GLIBC_2.0 getsockname
+00056b10 w DF .text 00000030 GLIBC_2.1 fopen64
+000bddf0 w DF .text 000000d2 GLIBC_2.0 wctrans
+000b5500 w DF .text 00000050 GLIBC_2.1 ftruncate64
+
+
diff --git a/scripts/t/Dpkg_Shlibs/objdump.libc6-2.6 b/scripts/t/Dpkg_Shlibs/objdump.libc6-2.6
new file mode 100644
index 0000000..ba68d1c
--- /dev/null
+++ b/scripts/t/Dpkg_Shlibs/objdump.libc6-2.6
@@ -0,0 +1,2345 @@
+
+/lib/libc.so.6: file format elf32-i386
+architecture: i386, flags 0x00000150:
+HAS_SYMS, DYNAMIC, D_PAGED
+start address 0x000161b0
+
+Program Header:
+ PHDR off 0x00000034 vaddr 0x00000034 paddr 0x00000034 align 2**2
+ filesz 0x00000140 memsz 0x00000140 flags r-x
+ INTERP off 0x0012d550 vaddr 0x0012d550 paddr 0x0012d550 align 2**0
+ filesz 0x00000013 memsz 0x00000013 flags r--
+ LOAD off 0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**12
+ filesz 0x00140ca4 memsz 0x00140ca4 flags r-x
+ LOAD off 0x001411f0 vaddr 0x001411f0 paddr 0x001411f0 align 2**12
+ filesz 0x0000278c memsz 0x00005400 flags rw-
+ DYNAMIC off 0x00142d9c vaddr 0x00142d9c paddr 0x00142d9c align 2**2
+ filesz 0x000000f0 memsz 0x000000f0 flags rw-
+ NOTE off 0x00000174 vaddr 0x00000174 paddr 0x00000174 align 2**2
+ filesz 0x00000020 memsz 0x00000020 flags r--
+ TLS off 0x001411f0 vaddr 0x001411f0 paddr 0x001411f0 align 2**2
+ filesz 0x00000008 memsz 0x0000002c flags r--
+EH_FRAME off 0x0012d564 vaddr 0x0012d564 paddr 0x0012d564 align 2**2
+ filesz 0x00002a2c memsz 0x00002a2c flags r--
+ STACK off 0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**2
+ filesz 0x00000000 memsz 0x00000000 flags rw-
+ RELRO off 0x001411f8 vaddr 0x001411f0 paddr 0x001411f0 align 2**0
+ filesz 0x00001c94 memsz 0x00001c80 flags r--
+
+Dynamic Section:
+ NEEDED ld-linux.so.2
+ SONAME libc.so.6
+ INIT 0x15ea0
+ FINI_ARRAY 0x1411f8
+ FINI_ARRAYSZ 0x4
+ HASH 0x13d99c
+ GNU_HASH 0x194
+ STRTAB 0xc85c
+ SYMTAB 0x3c4c
+ STRSZ 0x567a
+ SYMENT 0x10
+ PLTGOT 0x142ff4
+ PLTRELSZ 0x40
+ PLTREL 0x11
+ JMPREL 0x15d3c
+ REL 0x13374
+ RELSZ 0x29c8
+ RELENT 0x8
+ VERDEF 0x13058
+ VERDEFNUM 0x15
+ FLAGS 0x10
+ VERNEED 0x13334
+ VERNEEDNUM 0x1
+ VERSYM 0x11ed6
+ RELCOUNT 0x4db
+
+Version definitions:
+1 0x01 0x0865f4e6 libc.so.6
+2 0x00 0x0d696910 GLIBC_2.0
+3 0x00 0x0d696911 GLIBC_2.1
+ GLIBC_2.0
+4 0x00 0x09691f71 GLIBC_2.1.1
+ GLIBC_2.1
+5 0x00 0x09691f72 GLIBC_2.1.2
+ GLIBC_2.1.1
+6 0x00 0x09691f73 GLIBC_2.1.3
+ GLIBC_2.1.2
+7 0x00 0x0d696912 GLIBC_2.2
+ GLIBC_2.1.3
+8 0x00 0x09691a71 GLIBC_2.2.1
+ GLIBC_2.2
+9 0x00 0x09691a72 GLIBC_2.2.2
+ GLIBC_2.2.1
+10 0x00 0x09691a73 GLIBC_2.2.3
+ GLIBC_2.2.2
+11 0x00 0x09691a74 GLIBC_2.2.4
+ GLIBC_2.2.3
+12 0x00 0x09691a76 GLIBC_2.2.6
+ GLIBC_2.2.4
+13 0x00 0x0d696913 GLIBC_2.3
+ GLIBC_2.2.6
+14 0x00 0x09691972 GLIBC_2.3.2
+ GLIBC_2.3
+15 0x00 0x09691973 GLIBC_2.3.3
+ GLIBC_2.3.2
+16 0x00 0x09691974 GLIBC_2.3.4
+ GLIBC_2.3.3
+17 0x00 0x0d696914 GLIBC_2.4
+ GLIBC_2.3.4
+18 0x00 0x0d696915 GLIBC_2.5
+ GLIBC_2.4
+19 0x00 0x0d696916 GLIBC_2.6
+ GLIBC_2.5
+20 0x00 0x0963cf85 GLIBC_PRIVATE
+ GLIBC_2.6
+21 0x00 0x0b792650 GCC_3.0
+
+Version References:
+ required from ld-linux.so.2:
+ 0x0963cf85 0x00 24 GLIBC_PRIVATE
+ 0x0d696913 0x00 23 GLIBC_2.3
+ 0x0d696911 0x00 22 GLIBC_2.1
+
+DYNAMIC SYMBOL TABLE:
+00000000 w D *UND* 00000000 _IO_stdin_used
+00000000 w D *UND* 00000000 _dl_starting_up
+00000000 DO *UND* 00000004 GLIBC_2.1 __libc_stack_end
+00000000 DF *UND* 00000135 GLIBC_2.3 ___tls_get_addr
+00000000 DF *UND* 00000085 GLIBC_PRIVATE _dl_tls_get_addr_soft
+00000000 DO *UND* 000001c0 GLIBC_PRIVATE _rtld_global_ro
+00000000 DO *UND* 00000004 GLIBC_PRIVATE __libc_enable_secure
+00000000 DO *UND* 00000004 GLIBC_PRIVATE _dl_argv
+00000000 DO *UND* 00000588 GLIBC_PRIVATE _rtld_global
+000756d0 g DF .text 00000023 GLIBC_2.1.1 __strspn_c1
+0005bc90 g DF .text 00000101 GLIBC_2.2 putwchar
+000e8950 g DF .text 00000034 GLIBC_2.4 __gethostname_chk
+00075700 g DF .text 00000025 GLIBC_2.1.1 __strspn_c2
+000ec880 g DF .text 000000a8 GLIBC_2.0 setrpcent
+0007b760 w DF .text 00000039 GLIBC_2.1 __wcstod_l
+00075730 g DF .text 0000002a GLIBC_2.1.1 __strspn_c3
+000b7640 w DF .text 00000034 GLIBC_2.0 sched_get_priority_min
+000d32b0 g DF .text 00000034 GLIBC_2.3.2 epoll_create
+000e8990 g DF .text 00000024 GLIBC_2.4 __getdomainname_chk
+000d3590 g DF .text 0000003a GLIBC_2.0 klogctl
+00023eb0 g DF .text 00000011 GLIBC_2.1 __tolower_l
+00046630 g DF .text 00000034 GLIBC_2.0 dprintf
+000800b0 g DF .text 00000ef3 GLIBC_2.1 __wcscoll_l
+00093590 w DF .text 00000070 GLIBC_2.0 setuid
+000d5fe0 w DF .text 000000cb GLIBC_2.0 iswalpha
+000835a0 g DF .text 00000038 GLIBC_2.0 __gettimeofday
+000f0cb0 g DF .text 0000007c GLIBC_PRIVATE __internal_endnetgrent
+000cbca0 g DF .text 00000034 GLIBC_2.0 chroot
+001447c0 w DO .bss 00000004 GLIBC_2.0 daylight
+0010e2b0 g DF .text 00000063 (GLIBC_2.0) _IO_file_setbuf
+00063b10 g DF .text 00000063 GLIBC_2.1 _IO_file_setbuf
+000861f0 g DF .text 00000052 GLIBC_2.1 getdate
+000e8090 g DF .text 00000107 GLIBC_2.4 __vswprintf_chk
+0010e320 g DF .text 0000015d (GLIBC_2.0) _IO_file_fopen
+000df640 g DF .text 0000003c GLIBC_2.3.2 pthread_cond_signal
+00111240 g DF .text 0000003c (GLIBC_2.0) pthread_cond_signal
+00063d30 g DF .text 000005e0 GLIBC_2.1 _IO_file_fopen
+0002fb70 w DF .text 00000030 GLIBC_2.3 strtoull_l
+000fc6b0 g DF .text 00000068 GLIBC_2.0 xdr_short
+00059a30 g DF .text 000000e9 GLIBC_2.0 _IO_padn
+000d1740 g DF .text 00000048 GLIBC_2.0 lfind
+00071a00 w DF .text 00000151 GLIBC_2.1 strcasestr
+00092740 g DF .text 000002e3 GLIBC_PRIVATE __libc_fork
+00103570 g DF .text 000000bc GLIBC_2.1.1 xdr_int64_t
+0007b760 w DF .text 00000039 GLIBC_2.3 wcstod_l
+000d3ee0 w DF .text 00000037 GLIBC_2.0 socket
+00100360 g DF .text 00000081 GLIBC_2.1 key_encryptsession_pk
+00072090 w DF .text 00000095 GLIBC_2.0 argz_create
+000752d0 g DF .text 00000045 GLIBC_2.1.1 __strpbrk_g
+0005bf20 g DF .text 00000049 GLIBC_2.0 putchar_unlocked
+000f8960 g DF .text 000000f3 GLIBC_2.0 xdr_pmaplist
+000e3790 g DF .text 000000f7 GLIBC_2.2 __res_init
+00039340 g DF .text 00000095 GLIBC_2.0 __xpg_basename
+000e6980 g DF .text 00000033 GLIBC_2.3.4 __stpcpy_chk
+0005fc60 w DF .text 000000e7 GLIBC_2.0 getc
+0005d0a0 g DF .text 00000133 GLIBC_2.2 _IO_wdefault_xsputn
+00076770 w DF .text 000000bc GLIBC_2.0 wcpncpy
+000cc210 g DF .text 0000003d GLIBC_2.2 mkdtemp
+0002e190 w DF .text 00000039 GLIBC_2.0 srand48_r
+0002b520 g DF .text 00000078 GLIBC_2.1 sighold
+0006dc50 g DF .text 00000022 GLIBC_2.0 __default_morecore
+000b7510 g DF .text 00000038 GLIBC_2.0 __sched_getparam
+000ef5e0 g DF .text 00000076 GLIBC_2.0 iruserok
+0003bf30 g DF .text 0000009b GLIBC_2.0 cuserid
+00029440 w DF .text 00000027 GLIBC_2.0 isnan
+0002d8e0 w DF .text 00000106 GLIBC_2.0 setstate_r
+000766e0 g DF .text 00000045 GLIBC_2.0 wmemset
+00109f60 g DF .text 00000086 GCC_3.0 __register_frame_info_bases
+00000000 g DO *ABS* 00000000 GCC_3.0 GCC_3.0
+00063270 g DF .text 00000025 GLIBC_2.0 _IO_file_stat
+00072580 w DF .text 0000038f GLIBC_2.0 argz_replace
+00097320 g DF .text 0000006a GLIBC_2.1 globfree64
+000df030 w DF .text 00000037 GLIBC_2.1 argp_usage
+0012d508 g DO .rodata 00000004 (GLIBC_2.1) _sys_nerr
+0012d50c g DO .rodata 00000004 (GLIBC_2.3) _sys_nerr
+0012d500 g DO .rodata 00000004 GLIBC_2.4 _sys_nerr
+0012d504 g DO .rodata 00000004 (GLIBC_2.0) _sys_nerr
+00072210 w DF .text 00000046 GLIBC_2.0 argz_next
+00146334 g DO .bss 00000004 GLIBC_2.1 getdate_err
+00111110 g DF .text 0000005f (GLIBC_2.0) getspnam_r
+000d7eb0 g DF .text 0000017d GLIBC_2.1.2 getspnam_r
+00092740 g DF .text 000002e3 GLIBC_2.0 __fork
+000b75d0 g DF .text 0000002c GLIBC_2.0 __sched_yield
+000e3790 w DF .text 000000f7 (GLIBC_2.0) res_init
+00082a70 g DF .text 00000032 GLIBC_2.0 __gmtime_r
+00037e30 g DF .text 0000004f GLIBC_2.0 l64a
+00062130 g DF .text 00000094 GLIBC_2.1 _IO_file_attach
+0010da30 g DF .text 00000085 (GLIBC_2.0) _IO_file_attach
+00075360 g DF .text 00000046 GLIBC_2.1.1 __strstr_g
+0008b0d0 w DF .text 00002517 GLIBC_2.3 wcsftime_l
+00059890 w DF .text 00000180 GLIBC_2.0 gets
+00061d80 g DF .text 00000036 GLIBC_2.0 putc_unlocked
+000ec440 g DF .text 0000012d GLIBC_2.0 getrpcbyname
+00058280 w DF .text 000000f8 GLIBC_2.0 fflush
+000fa6e0 g DF .text 00000062 GLIBC_2.1 _authenticate
+00037d40 g DF .text 000000e4 GLIBC_2.0 a64l
+000d0a20 g DF .text 0000002d GLIBC_2.0 hcreate
+0006fa50 g DF .text 00000022 GLIBC_2.0 strcpy
+00015e80 g DF .text 00000005 GLIBC_2.0 __libc_init_first
+000fc3b0 g DF .text 00000041 GLIBC_2.0 xdr_long
+000d4800 g DF .text 00000062 GLIBC_2.0 shmget
+0002a640 w DF .text 000000a7 GLIBC_2.0 sigsuspend
+0005e700 g DF .text 00000170 GLIBC_2.2 _IO_wdo_write
+00056990 g DF .text 00000049 GLIBC_2.0 getw
+000cbe50 g DF .text 00000173 GLIBC_2.0 gethostid
+00056e70 w DF .text 0000004b GLIBC_2.0 flockfile
+00071d40 g DF .text 000000c6 GLIBC_2.1 __rawmemchr
+00081a30 w DF .text 00000073 GLIBC_2.3 wcsncasecmp_l
+00071ff0 w DF .text 00000049 GLIBC_2.0 argz_add
+000e6260 g DF .text 000002bc GLIBC_2.1 __backtrace_symbols
+00075a60 g DF .text 0000005d GLIBC_2.1.1 __strncpy_byn
+00060330 w DF .text 0000017f GLIBC_2.0 vasprintf
+00064870 g DF .text 000001d0 GLIBC_2.0 _IO_un_link
+000e8ba0 g DF .text 00000050 GLIBC_2.4 __wcstombs_chk
+000d5c60 g DF .text 00000013 GLIBC_2.0 _mcount
+00077dd0 g DF .text 0000003e GLIBC_2.0 __wcstod_internal
+000f55d0 g DF .text 000001d0 GLIBC_2.0 authunix_create
+000765d0 g DF .text 000000a0 GLIBC_2.0 wmemcmp
+00082a70 w DF .text 00000032 GLIBC_2.0 gmtime_r
+000c2cf0 w DF .text 00000038 GLIBC_2.0 fchmod
+000e6f90 g DF .text 000000d4 GLIBC_2.3.4 __printf_chk
+00060800 w DF .text 000001c5 GLIBC_2.0 obstack_vprintf
+00075200 g DF .text 00000033 GLIBC_2.1.1 __strspn_cg
+000e8640 g DF .text 00000158 GLIBC_2.4 __fgetws_chk
+00016650 g DF .text 00000038 (GLIBC_2.0) __cmpdi2
+000dfb20 g DF .text 000000eb GLIBC_2.3.2 __register_atfork
+00090090 g DF .text 000000a7 GLIBC_2.0 setgrent
+0002a790 w DF .text 00000055 GLIBC_2.0 sigwait
+000d71b0 w DF .text 0000006e GLIBC_2.3 iswctype_l
+000d6840 w DF .text 0000007b GLIBC_2.0 wctrans
+0003d040 g DF .text 000043ec GLIBC_2.0 _IO_vfprintf
+000cbc60 g DF .text 00000034 GLIBC_2.0 acct
+0002cd30 g DF .text 000000f9 GLIBC_2.0 exit
+000e8f40 g DF .text 00000007 GLIBC_2.0 htonl
+00092dc0 g DF .text 0000015d GLIBC_2.0 execl
+0009f030 w DF .text 0000001f GLIBC_2.0 re_set_syntax
+000eb4c0 g DF .text 000000b0 GLIBC_2.0 endprotoent
+000bf940 g DF .text 0000150f GLIBC_2.1 wordexp
+000eb190 g DF .text 0000017d GLIBC_2.1.2 getprotobynumber_r
+001117c0 g DF .text 0000005f (GLIBC_2.0) getprotobynumber_r
+00023830 g DF .text 00000027 GLIBC_2.2 __assert
+00029410 w DF .text 0000002d GLIBC_2.0 isinf
+00061c50 g DF .text 0000000b GLIBC_2.0 clearerr_unlocked
+00100a60 g DF .text 0000002a GLIBC_2.0 xdr_keybuf
+0009e4f0 g DF .text 000002e9 GLIBC_2.2.3 fnmatch
+0009e4f0 g DF .text 000002e9 (GLIBC_2.0) fnmatch
+00023dd0 g DF .text 00000017 GLIBC_2.1 __islower_l
+000d2f70 g DF .text 00000028 GLIBC_2.3.3 gnu_dev_major
+000e8f50 g DF .text 0000000e GLIBC_2.0 htons
+00103730 g DF .text 0000003f GLIBC_2.1 xdr_uint32_t
+0008e1a0 w DF .text 000000af GLIBC_2.0 readdir
+0002e1d0 w DF .text 0000004a GLIBC_2.0 seed48_r
+0002b5a0 g DF .text 00000078 GLIBC_2.1 sigrelse
+00093ef0 w DF .text 000001e0 GLIBC_2.0 pathconf
+000e5280 g DF .text 00000652 GLIBC_2.2.2 __nss_hostname_digits_dots
+00092c00 g DF .text 00000034 GLIBC_2.0 execv
+000465b0 g DF .text 00000034 GLIBC_2.0 sprintf
+00060070 g DF .text 000000f6 GLIBC_2.0 _IO_putc
+000d3670 g DF .text 0000003a GLIBC_2.0 nfsservctl
+00072a10 g DF .text 0000013e GLIBC_2.0 envz_merge
+00020670 g DF .text 0000065e GLIBC_2.0 setlocale
+00088f70 w DF .text 0000215c GLIBC_2.3 strftime_l
+00071c90 g DF .text 0000001d GLIBC_2.0 memfrob
+00076bd0 w DF .text 00000218 GLIBC_2.0 mbrtowc
+00106e70 w DF .text 000000c9 GLIBC_2.0 getutid_r
+0002d800 w DF .text 00000060 GLIBC_2.0 srand
+000d6be0 w DF .text 00000090 GLIBC_2.3 iswcntrl_l
+000dfd70 g DF .text 00000071 GLIBC_PRIVATE __libc_pthread_init
+000d60b0 w DF .text 000000c9 GLIBC_2.1 iswblank
+0006e920 g DF .text 00000005 GLIBC_2.0 tr_break
+000c36f0 w DF .text 00000070 GLIBC_2.0 __write
+000cba10 g DF .text 00000088 GLIBC_2.0 __select
+000d5e80 g DF .text 00000081 GLIBC_2.0 towlower
+000e8520 g DF .text 000000f8 GLIBC_2.4 __vfwprintf_chk
+0005b4f0 g DF .text 000000ad GLIBC_2.2 fgetws_unlocked
+000c48c0 w DF .text 000002c8 GLIBC_2.0 ttyname_r
+00058860 g DF .text 00000032 GLIBC_2.1 fopen
+0010cab0 g DF .text 00000097 (GLIBC_2.0) fopen
+000bb6b0 g DF .text 0000014f GLIBC_2.1 gai_strerror
+00076210 w DF .text 000000a4 GLIBC_2.0 wcsncpy
+000d7670 g DF .text 0000018e GLIBC_2.0 fgetspent
+00070630 g DF .text 00000226 GLIBC_2.0 strsignal
+00070150 g DF .text 000000f7 GLIBC_2.0 strncmp
+000eae60 g DF .text 000001d2 GLIBC_2.1.2 getnetbyname_r
+00111750 g DF .text 00000066 (GLIBC_2.0) getnetbyname_r
+000fb280 g DF .text 00000012 GLIBC_2.0 svcfd_create
+000eb3d0 g DF .text 000000e4 GLIBC_2.1.2 getprotoent_r
+000cdb40 w DF .text 00000038 GLIBC_2.0 ftruncate
+00111820 g DF .text 000000e7 (GLIBC_2.0) getprotoent_r
+00074f30 g DF .text 0000003c GLIBC_2.1.1 __strncpy_gg
+00100850 g DF .text 0000008d GLIBC_2.1 xdr_unixcred
+00025880 w DF .text 00000047 GLIBC_2.2 dcngettext
+000f91e0 g DF .text 00000087 GLIBC_2.0 xdr_rmtcallres
+0005a0a0 g DF .text 00000195 GLIBC_2.0 _IO_puts
+000e10f0 g DF .text 000001d4 GLIBC_2.0 inet_nsap_addr
+000dfff0 w DF .text 00000169 GLIBC_2.0 inet_aton
+000bb800 g DF .text 0000005b GLIBC_2.1 wordfree
+001464e0 g DO .bss 00000004 GLIBC_2.0 __rcmd_errstr
+000cebd0 g DF .text 000000e5 GLIBC_2.0 ttyslot
+000c1280 g DF .text 00000084 GLIBC_2.2 posix_spawn_file_actions_addclose
+000657c0 g DF .text 00000038 GLIBC_2.0 _IO_unsave_markers
+0008efb0 g DF .text 0000005f GLIBC_2.0 getdirentries
+00064da0 g DF .text 00000039 GLIBC_2.0 _IO_default_uflow
+000e7e00 g DF .text 00000041 GLIBC_2.4 __wcpcpy_chk
+0002fca0 g DF .text 0000003e GLIBC_2.0 __strtold_internal
+001430d0 g DO .data 00000004 GLIBC_2.0 optind
+00075490 g DF .text 00000089 GLIBC_2.1.1 __strcpy_small
+0002dda0 g DF .text 00000037 GLIBC_2.0 erand48
+00146370 g DO .bss 00000004 GLIBC_2.1 argp_program_version
+000786e0 w DF .text 00000040 GLIBC_2.3 wcstoul_l
+000d3030 w DF .text 0000003a GLIBC_2.1 modify_ldt
+0006ba10 g DF .text 000001c5 GLIBC_2.0 __libc_memalign
+000d3f60 g DF .text 00000062 GLIBC_2.0 isfdtype
+000755e0 g DF .text 0000003b GLIBC_2.1.1 __strcspn_c1
+000cc5f0 g DF .text 000000d6 GLIBC_2.0 getfsfile
+00075620 g DF .text 00000048 GLIBC_2.1.1 __strcspn_c2
+0002df50 g DF .text 0000002d GLIBC_2.0 lcong48
+00090ee0 g DF .text 000000a2 GLIBC_2.0 getpwent
+00075670 g DF .text 00000058 GLIBC_2.1.1 __strcspn_c3
+000b5920 w DF .text 0000004b GLIBC_2.0 re_match_2
+00144104 w DO .bss 00000004 GLIBC_2.0 __free_hook
+0008fc60 g DF .text 00000257 GLIBC_2.1 putgrent
+00072470 w DF .text 00000054 GLIBC_2.0 argz_stringify
+000ec0d0 g DF .text 000000e4 GLIBC_2.1.2 getservent_r
+00111a70 g DF .text 000000e7 (GLIBC_2.0) getservent_r
+0005f360 g DF .text 000000ec GLIBC_2.4 open_wmemstream
+000f4580 g DF .text 00000106 GLIBC_2.5 inet6_opt_append
+00070300 g DF .text 000001b9 GLIBC_2.0 strrchr
+000ec270 g DF .text 000000a8 GLIBC_2.0 setservent
+001084a0 w DF .text 000000f3 GLIBC_2.2.1 posix_openpt
+000f9e30 g DF .text 00000042 GLIBC_2.0 svcerr_systemerr
+00061d30 g DF .text 00000042 GLIBC_2.0 fflush_unlocked
+000e8050 g DF .text 00000039 GLIBC_2.4 __swprintf_chk
+00023df0 g DF .text 00000017 GLIBC_2.1 __isgraph_l
+000c1d20 g DF .text 0000001d GLIBC_2.2 posix_spawnattr_setschedpolicy
+0005a680 w DF .text 00000127 GLIBC_2.0 setbuffer
+00091ec0 w DF .text 000000ac GLIBC_2.0 wait
+0005bff0 g DF .text 00000036 GLIBC_2.2 vwprintf
+0006bbe0 w DF .text 0000008c GLIBC_2.2 posix_memalign
+000f3bd0 g DF .text 00000118 GLIBC_2.3.4 getipv4sourcefilter
+00074e00 g DF .text 00000030 GLIBC_2.1.1 __strcpy_g
+000e83f0 g DF .text 00000108 GLIBC_2.4 __vwprintf_chk
+000562c0 g DF .text 00000074 GLIBC_2.0 tempnam
+00023980 g DF .text 00000048 GLIBC_2.0 isalpha
+000320d0 w DF .text 00000029 GLIBC_2.3 strtof_l
+00110890 g DF .text 00000042 (GLIBC_2.0) regexec
+000d2d90 w DF .text 000000a5 GLIBC_2.0 llseek
+000b59f0 g DF .text 000000e7 GLIBC_2.3.4 regexec
+000cc080 g DF .text 00000022 GLIBC_2.0 revoke
+000b59b0 w DF .text 0000003a GLIBC_2.0 re_match
+000d0ed0 w DF .text 000003f4 GLIBC_2.0 tdelete
+000c4f70 g DF .text 00000128 GLIBC_2.4 readlinkat
+000c3fc0 w DF .text 00000034 GLIBC_2.0 pipe
+000e7cb0 g DF .text 0000004c GLIBC_2.4 __wctomb_chk
+000d2300 w DF .text 0000001a GLIBC_2.0 get_avphys_pages
+000f5180 g DF .text 00000170 GLIBC_2.0 authunix_create_default
+0005f6a0 g DF .text 0000009a GLIBC_2.0 _IO_ferror
+000ec590 g DF .text 0000012d GLIBC_2.0 getrpcbynumber
+00072040 w DF .text 00000041 GLIBC_2.0 argz_count
+0006fc90 g DF .text 00000057 GLIBC_2.0 __strdup
+00094670 g DF .text 0000041d GLIBC_2.2 __sysconf
+000e7b00 g DF .text 0000005d GLIBC_2.4 __readlink_chk
+000cb620 w DF .text 00000076 GLIBC_2.0 setregid
+000e2440 g DF .text 0000002b GLIBC_2.2 __res_ninit
+000ca740 w DF .text 000000ac GLIBC_2.0 tcdrain
+000f3cf0 g DF .text 0000014a GLIBC_2.3.4 setipv4sourcefilter
+000ca8f0 g DF .text 00000030 GLIBC_2.0 cfmakeraw
+00077e90 w DF .text 0000003f GLIBC_2.0 wcstold
+000cafc0 g DF .text 00000073 GLIBC_2.0 __sbrk
+00059d20 g DF .text 00000299 GLIBC_2.1 _IO_proc_open
+000d4720 g DF .text 0000007b GLIBC_2.0 shmat
+00055d50 g DF .text 00000197 GLIBC_2.0 perror
+0010d070 g DF .text 00000299 (GLIBC_2.0) _IO_proc_open
+000666c0 g DF .text 00000042 GLIBC_2.0 _IO_str_pbackfail
+00143338 g DO .data 00000008 GLIBC_2.0 __tzname
+00037e80 g DF .text 00000152 GLIBC_2.0 rpmatch
+000c2b50 w DF .text 00000095 GLIBC_2.1 statvfs64
+000e8920 g DF .text 00000024 GLIBC_2.4 __getlogin_r_chk
+00143344 g DO .data 00000004 GLIBC_2.0 __progname
+00046500 w DF .text 00000024 GLIBC_2.0 _IO_fprintf
+0006ad30 w DF .text 00000105 GLIBC_2.0 pvalloc
+00024420 w DF .text 00000049 GLIBC_2.0 dcgettext
+000facd0 g DF .text 000001f2 GLIBC_2.0 registerrpc
+0005e4b0 g DF .text 0000024d GLIBC_2.2 _IO_wfile_overflow
+00077c90 g DF .text 00000046 GLIBC_2.1 wcstoll
+000c1580 g DF .text 00000010 GLIBC_2.2 posix_spawnattr_setpgroup
+00144a94 w DO .bss 00000004 GLIBC_2.0 _environ
+000d0810 g DF .text 000001d1 GLIBC_2.0 qecvt_r
+0010e4f0 g DF .text 000000fe (GLIBC_2.0) _IO_do_write
+000d0140 g DF .text 000001ff GLIBC_2.0 ecvt_r
+00063120 g DF .text 0000002a GLIBC_2.1 _IO_do_write
+00064c90 g DF .text 00000078 GLIBC_2.0 _IO_switch_to_get_mode
+00075eb0 w DF .text 00000034 GLIBC_2.0 wcscat
+00108f50 g DF .text 00000023 GLIBC_2.1 getutxid
+001465ac g DO .bss 00000004 GLIBC_2.1 __key_gendes_LOCAL
+00076df0 w DF .text 00000241 GLIBC_2.0 wcrtomb
+000299f0 g DF .text 0000000d GLIBC_2.1 __signbitf
+000ca1c0 g DF .text 0000004c GLIBC_2.6 sync_file_range
+001462f0 g DO .bss 00000004 (GLIBC_2.0) _obstack
+000ea5f0 g DF .text 00000162 GLIBC_2.0 getnetbyaddr
+000d3a50 w DF .text 0000006c GLIBC_2.0 connect
+000762c0 g DF .text 00000041 GLIBC_2.0 wcspbrk
+00000008 g D .tbss 00000004 GLIBC_PRIVATE errno
+00029440 g DF .text 00000027 GLIBC_2.0 __isnan
+00075170 g DF .text 00000033 GLIBC_2.1.1 __strcspn_cg
+00072b50 g DF .text 00000096 GLIBC_2.0 envz_remove
+00029f60 w DF .text 00000064 GLIBC_2.0 _longjmp
+00025910 w DF .text 00000041 GLIBC_2.2 ngettext
+00029960 w DF .text 00000090 GLIBC_2.0 ldexpf
+0005f750 w DF .text 00000034 GLIBC_2.0 fileno_unlocked
+00146350 g DO .bss 00000004 GLIBC_2.0 error_print_progname
+00029d90 g DF .text 00000023 GLIBC_2.1 __signbitl
+00125578 g DO .rodata 00000010 GLIBC_2.1 in6addr_any
+000cd800 g DF .text 00000022 GLIBC_2.3 lutimes
+001090b0 w DF .text 00000175 GLIBC_2.2.4 dl_iterate_phdr
+00100210 g DF .text 0000005f GLIBC_2.1 key_get_conv
+000cfc20 g DF .text 00000038 GLIBC_2.0 munlock
+000910f0 g DF .text 0000012d GLIBC_2.0 getpwuid
+000711c0 w DF .text 00000091 GLIBC_2.0 stpncpy
+000cdbf0 w DF .text 00000063 GLIBC_2.1 ftruncate64
+000c95f0 g DF .text 00000040 GLIBC_2.1 sendfile
+000cf9b0 w DF .text 0000006e GLIBC_2.1 mmap64
+000e3aa0 g DF .text 00000038 GLIBC_PRIVATE __nss_disable_nscd
+0010ef60 g DF .text 000000e5 (GLIBC_2.0) getpwent_r
+00091240 g DF .text 000000e2 GLIBC_2.1.2 getpwent_r
+000f4870 g DF .text 0000006c GLIBC_2.5 inet6_rth_init
+0002b1d0 g DF .text 0000004f GLIBC_PRIVATE __libc_allocate_rtsig_private
+00029d00 w DF .text 00000086 GLIBC_2.0 ldexpl
+000f4310 g DF .text 00000075 GLIBC_2.5 inet6_opt_next
+000fedc0 g DF .text 000000bc GLIBC_2.1 ecb_crypt
+0005ba60 g DF .text 000000bb GLIBC_2.2 ungetwc
+0008e730 g DF .text 00000024 GLIBC_2.1 versionsort
+000fc670 g DF .text 0000001a GLIBC_2.1.1 xdr_longlong_t
+0007fe70 w DF .text 00000039 GLIBC_2.1 __wcstof_l
+000d0da0 w DF .text 0000005b GLIBC_2.0 tfind
+00046530 g DF .text 00000039 GLIBC_2.0 _IO_printf
+00072210 g DF .text 00000046 GLIBC_2.0 __argz_next
+00076670 w DF .text 00000034 GLIBC_2.0 wmemcpy
+000c1450 g DF .text 00000035 GLIBC_2.2 posix_spawnattr_init
+000c25d0 g DF .text 0000015d GLIBC_2.4 __fxstatat64
+0002acd0 g DF .text 0000002a GLIBC_2.0 __sigismember
+00074c90 g DF .text 0000003d GLIBC_2.1.1 __memcpy_by2
+000c42e0 g DF .text 000000c2 GLIBC_2.0 get_current_dir_name
+000d4650 g DF .text 00000075 GLIBC_2.2 semctl
+00110f20 g DF .text 0000006f (GLIBC_2.0) semctl
+00061c80 g DF .text 00000036 GLIBC_2.0 fputc_unlocked
+00077040 w DF .text 00000058 GLIBC_2.0 mbsrtowcs
+00074c50 g DF .text 00000033 GLIBC_2.1.1 __memcpy_by4
+000d1aa0 g DF .text 00000023 GLIBC_2.0 verr
+000eb040 g DF .text 0000012d GLIBC_2.0 getprotobynumber
+000c50e0 g DF .text 0000014b GLIBC_2.4 unlinkat
+00023d50 w DF .text 00000015 GLIBC_2.3 isalnum_l
+000fe140 g DF .text 00000103 GLIBC_2.0 getsecretkey
+00113170 g DF __libc_thread_freeres_fn 00000031 GLIBC_PRIVATE __libc_thread_freeres
+000fecb0 g DF .text 00000056 GLIBC_2.1 xdr_authdes_verf
+00143420 g DO .data 00000098 GLIBC_2.1 _IO_2_1_stdin_
+0002fba0 g DF .text 0000003e GLIBC_2.0 __strtof_internal
+0008e150 w DF .text 0000004e GLIBC_2.0 closedir
+0008f750 g DF .text 000000b4 GLIBC_2.0 initgroups
+000e90d0 g DF .text 00000152 GLIBC_2.0 inet_ntoa
+0007fe70 w DF .text 00000039 GLIBC_2.3 wcstof_l
+00023250 g DF .text 00000088 GLIBC_2.1 __freelocale
+0010f130 g DF .text 00001755 (GLIBC_2.1) glob64
+000981f0 g DF .text 00001755 GLIBC_2.2 glob64
+000e82d0 g DF .text 000000fb GLIBC_2.4 __fwprintf_chk
+000f9270 g DF .text 000000fd GLIBC_2.0 pmap_rmtcall
+00060070 w DF .text 000000f6 GLIBC_2.0 putc
+000926d0 w DF .text 0000006c GLIBC_2.0 nanosleep
+000c40e0 w DF .text 00000034 GLIBC_2.0 fchdir
+000fc790 g DF .text 00000037 GLIBC_2.0 xdr_char
+000d7da0 g DF .text 000000a7 GLIBC_2.0 setspent
+00058ac0 g DF .text 000000cc GLIBC_2.2 fopencookie
+0010ca50 g DF .text 0000005a (GLIBC_2.0) fopencookie
+00029410 g DF .text 0000002d GLIBC_2.0 __isinf
+000e6850 g DF .text 0000004e GLIBC_2.3.4 __mempcpy_chk
+0005ce10 g DF .text 00000165 GLIBC_2.2 _IO_wdefault_pbackfail
+000f10c0 g DF .text 000000b0 GLIBC_2.0 endaliasent
+00056ed0 w DF .text 00000069 GLIBC_2.0 ftrylockfile
+00078c50 w DF .text 00000040 GLIBC_2.3 wcstoll_l
+00023d70 w DF .text 00000017 GLIBC_2.3 isalpha_l
+00061c60 g DF .text 00000010 GLIBC_2.0 feof_unlocked
+00023d00 g DF .text 00000046 GLIBC_2.0 isblank
+000b58d0 w DF .text 0000004a GLIBC_2.0 re_search_2
+000f9d40 g DF .text 0000004e GLIBC_2.0 svc_sendreply
+00023300 w DF .text 00000084 GLIBC_2.3 uselocale
+000ce920 g DF .text 00000040 GLIBC_2.0 getusershell
+0002ac10 g DF .text 000000b9 GLIBC_2.0 siginterrupt
+0008f9c0 g DF .text 0000012d GLIBC_2.0 getgrgid
+000d3330 g DF .text 0000007c GLIBC_2.3.2 epoll_wait
+000d20a0 w DF .text 000000d7 GLIBC_2.0 error
+0005af20 g DF .text 00000111 GLIBC_2.2 fputwc
+000c1f40 g DF .text 00000041 GLIBC_2.4 mkfifoat
+00111b80 g DF .text 000000e7 (GLIBC_2.0) getrpcent_r
+000d3450 g DF .text 00000034 GLIBC_2.0 get_kernel_syms
+000ec6e0 g DF .text 000000e4 GLIBC_2.1.2 getrpcent_r
+00058fa0 w DF .text 000001d1 GLIBC_2.0 ftell
+000e7980 g DF .text 0000005d GLIBC_2.4 __read_chk
+00145800 g DO .bss 00000200 (GLIBC_2.0) _res
+000e02e0 g DF .text 00000947 GLIBC_2.0 inet_ntop
+00070250 g DF .text 000000a7 GLIBC_2.0 strncpy
+0002a060 w DF .text 000000cf GLIBC_2.0 signal
+000cb950 g DF .text 00000074 GLIBC_2.0 getdomainname
+000e87c0 g DF .text 000000a8 GLIBC_2.4 __fgetws_unlocked_chk
+000e2470 g DF .text 00000112 GLIBC_2.2 __res_nclose
+000d36b0 w DF .text 00000034 GLIBC_2.0 personality
+0005a0a0 w DF .text 00000195 GLIBC_2.0 puts
+000d7020 g DF .text 00000092 GLIBC_2.1 __iswupper_l
+000e6d70 g DF .text 000000c2 GLIBC_2.3.4 __vsprintf_chk
+0002d480 g DF .text 00000046 GLIBC_2.0 mbstowcs
+000228b0 g DF .text 000007fa GLIBC_2.1 __newlocale
+000cae30 g DF .text 0000004d GLIBC_2.0 getpriority
+00039210 g DF .text 00000130 GLIBC_2.0 getsubopt
+000ca920 g DF .text 000000a7 GLIBC_2.1 tcgetsid
+00092740 w DF .text 000002e3 GLIBC_2.0 fork
+000569e0 g DF .text 0000003f GLIBC_2.0 putw
+000d1c10 g DF .text 0000001d GLIBC_2.0 warnx
+000d2b60 g DF .text 0000003a GLIBC_2.0 ioperm
+0005a7d0 g DF .text 00000189 GLIBC_2.0 _IO_setvbuf
+000f8340 g DF .text 00000100 GLIBC_2.0 pmap_unset
+00109590 g DF .text 00000043 GLIBC_2.1 _dl_mcount_wrapper_check
+000d6590 w DF .text 000000cb GLIBC_2.0 iswspace
+00106780 g DF .text 0000001e GLIBC_2.1 isastream
+0005c100 g DF .text 0000003c GLIBC_2.2 vwscanf
+0002a4c0 w DF .text 0000009e GLIBC_2.0 sigprocmask
+000650e0 g DF .text 0000004b GLIBC_2.0 _IO_sputbackc
+0005b5a0 g DF .text 00000122 GLIBC_2.2 fputws
+0002eea0 w DF .text 00000030 GLIBC_2.3 strtoul_l
+00125588 g DO .rodata 00000010 GLIBC_2.1 in6addr_loopback
+000d2910 g DF .text 0000003a GLIBC_2.3 listxattr
+00075090 g DF .text 0000001c GLIBC_2.1.1 __strchr_c
+0002e220 w DF .text 0000006a GLIBC_2.0 lcong48_r
+0009f550 w DF .text 00000060 GLIBC_2.0 regfree
+000e8ff0 g DF .text 0000002f GLIBC_2.0 inet_netof
+000b7510 w DF .text 00000038 GLIBC_2.0 sched_getparam
+000244a0 w DF .text 00000023 GLIBC_2.0 gettext
+000921f0 w DF .text 000001cd GLIBC_2.1 waitid
+0002adb0 g DF .text 00000060 GLIBC_2.0 sigfillset
+0005c660 g DF .text 0000006c GLIBC_2.2 _IO_init_wmarker
+000cd830 w DF .text 00000157 GLIBC_2.3 futimes
+000f6860 g DF .text 000002d3 GLIBC_2.0 callrpc
+000750b0 g DF .text 0000001e GLIBC_2.1.1 __strchr_g
+000cc2f0 g DF .text 00000044 GLIBC_2.0 gtty
+00083580 g DF .text 0000001b GLIBC_2.0 time
+0006b890 g DF .text 00000180 GLIBC_2.0 __libc_malloc
+0008f900 g DF .text 000000a2 GLIBC_2.0 getgrent
+000d3130 w DF .text 00000034 GLIBC_2.1 ntp_adjtime
+000e7e50 g DF .text 0000003b GLIBC_2.4 __wcsncpy_chk
+000cb5a0 w DF .text 00000076 GLIBC_2.0 setreuid
+0002b130 g DF .text 0000005f GLIBC_2.0 sigorset
+00065420 g DF .text 00000024 GLIBC_2.0 _IO_flush_all
+0008e270 w DF .text 00000110 GLIBC_2.0 readdir_r
+0002df80 g DF .text 0000002e GLIBC_2.0 drand48_r
+0006ba10 w DF .text 000001c5 GLIBC_2.0 memalign
+00050a50 w DF .text 00000039 GLIBC_2.0 vfscanf
+0005adc0 g DF .text 0000013c GLIBC_2.2 fsetpos64
+0010d900 g DF .text 0000010e (GLIBC_2.1) fsetpos64
+000eaca0 g DF .text 000000b0 GLIBC_2.0 endnetent
+000d0aa0 g DF .text 000001cd GLIBC_2.0 hsearch_r
+000e8bf0 g DF .text 00000046 GLIBC_2.4 __stack_chk_fail
+00081910 w DF .text 00000047 GLIBC_2.1 wcscasecmp
+000cf7e0 g DF .text 0000016f GLIBC_2.0 daemon
+0005f5f0 g DF .text 0000009a GLIBC_2.0 _IO_feof
+001004f0 g DF .text 0000005a GLIBC_2.1 key_setsecret
+000c20b0 g DF .text 0000008e GLIBC_2.0 __lxstat
+000fab50 g DF .text 0000012a GLIBC_2.0 svc_run
+0005d000 g DF .text 00000093 GLIBC_2.2 _IO_wdefault_finish
+00110f90 g DF .text 00000062 (GLIBC_2.0) shmctl
+000786e0 w DF .text 00000040 GLIBC_2.1 __wcstoul_l
+000d4870 g DF .text 00000065 GLIBC_2.2 shmctl
+000d3550 g DF .text 00000038 GLIBC_2.4 inotify_rm_watch
+00103570 g DF .text 000000bc GLIBC_2.3.4 xdr_quad_t
+00058280 g DF .text 000000f8 GLIBC_2.0 _IO_fflush
+00076bd0 g DF .text 00000218 GLIBC_2.0 __mbrtowc
+000c50a0 w DF .text 00000034 GLIBC_2.0 unlink
+0005be00 g DF .text 00000101 GLIBC_2.0 putchar
+000fcf40 g DF .text 00000032 GLIBC_2.0 xdrmem_create
+000df850 g DF .text 0000003c GLIBC_2.0 pthread_mutex_lock
+00061fe0 g DF .text 000000a7 GLIBC_2.1 fgets_unlocked
+000d7820 g DF .text 000003c3 GLIBC_2.0 putspent
+000d3b80 g DF .text 00000037 GLIBC_2.0 listen
+001036f0 g DF .text 0000003f GLIBC_2.1 xdr_int32_t
+000d43c0 w DF .text 000000c5 GLIBC_2.0 msgrcv
+000ee340 g DF .text 00000060 GLIBC_2.0 __ivaliduser
+000ec380 g DF .text 000000a2 GLIBC_2.0 getrpcent
+000cba10 w DF .text 00000088 GLIBC_2.0 select
+000d3d10 w DF .text 0000006c GLIBC_2.0 __send
+000d63f0 w DF .text 000000cb GLIBC_2.0 iswprint
+000c2ec0 w DF .text 00000038 GLIBC_2.0 mkdir
+000d6a20 g DF .text 00000090 GLIBC_2.1 __iswalnum_l
+00023e30 w DF .text 00000015 GLIBC_2.3 ispunct_l
+000617c0 g DF .text 00000036 GLIBC_PRIVATE __libc_fatal
+00146374 g DO .bss 00000004 GLIBC_2.1 argp_program_version_hook
+000d47a0 g DF .text 00000060 GLIBC_2.0 shmdt
+0006cff0 g DF .text 00000487 GLIBC_2.0 realloc
+000c10c0 w DF .text 000000ef GLIBC_2.1 __pwrite64
+0002d6f0 w DF .text 0000007f GLIBC_2.0 setstate
+000c2770 w DF .text 00000038 GLIBC_2.0 fstatfs
+0012754e g DO .rodata 00000005 GLIBC_2.0 _libc_intl_domainname
+0012d518 g DO .rodata 00000004 GLIBC_2.0 h_nerr
+000f23d0 g DF .text 0000031c GLIBC_2.1 if_nameindex
+00076870 w DF .text 0000018e GLIBC_2.0 btowc
+00072470 g DF .text 00000054 GLIBC_2.0 __argz_stringify
+0005a980 g DF .text 000000ac GLIBC_2.0 _IO_ungetc
+00075a30 g DF .text 00000022 GLIBC_2.1.1 __memset_cc
+0008e3a0 g DF .text 00000068 GLIBC_2.0 rewinddir
+0005c620 g DF .text 0000003f GLIBC_2.2 _IO_adjust_wcolumn
+0002fce0 w DF .text 0000003f GLIBC_2.0 strtold
+000d6ab0 g DF .text 00000092 GLIBC_2.1 __iswalpha_l
+001007e0 g DF .text 00000068 GLIBC_2.0 xdr_key_netstres
+00111d50 g DF .text 000000e5 (GLIBC_2.0) getaliasent_r
+000f0fd0 g DF .text 000000e2 GLIBC_2.1.2 getaliasent_r
+000cbce0 w DF .text 00000065 GLIBC_2.0 fsync
+00082930 g DF .text 0000008d GLIBC_2.0 clock
+00075a30 g DF .text 00000022 GLIBC_2.1.1 __memset_cg
+00106850 g DF .text 00000063 GLIBC_2.1 putmsg
+000f9640 g DF .text 00000083 GLIBC_2.0 xdr_replymsg
+000d41c0 g DF .text 00000041 GLIBC_2.2.4 sockatmark
+000d5c80 g DF .text 00000075 GLIBC_2.0 towupper
+0002b950 g DF .text 00000267 GLIBC_2.0 abort
+0014383c g DO .data 00000004 GLIBC_2.0 stdin
+000fc720 g DF .text 00000068 GLIBC_2.0 xdr_u_short
+00065450 g DF .text 000001fd GLIBC_2.0 _IO_flush_all_linebuffered
+0002e4e0 g DF .text 00000046 GLIBC_2.0 strtoll
+00092a84 g DF .text 00000013 GLIBC_2.0 _exit
+00039d20 g DF .text 00000029 GLIBC_2.1 wcstoumax
+000fa3e0 g DF .text 00000295 GLIBC_2.2 svc_getreq_common
+0005aa40 w DF .text 000000c9 GLIBC_2.0 vsprintf
+0002b420 w DF .text 00000055 GLIBC_2.1 sigwaitinfo
+000d4e00 w DF .text 00000092 GLIBC_2.2 moncontrol
+000d3f20 w DF .text 00000037 GLIBC_2.0 socketpair
+000e12d0 g DF .text 00000136 GLIBC_PRIVATE __res_iclose
+0002d270 g DF .text 00000044 GLIBC_2.0 div
+00070d20 w DF .text 0000019b GLIBC_2.0 memchr
+00034930 w DF .text 00000029 GLIBC_2.1 __strtod_l
+000704c0 g DF .text 000000b3 GLIBC_2.0 strpbrk
+000ecc90 g DF .text 0000002d GLIBC_2.0 ether_aton
+00075c10 w DF .text 000000bb GLIBC_2.2 memrchr
+00023860 g DF .text 00000037 GLIBC_2.0 tolower
+000c3680 w DF .text 00000070 GLIBC_2.0 __read
+000d09f0 w DF .text 00000026 GLIBC_2.0 hdestroy
+0010a0c0 g DF .text 0000003a GLIBC_2.0 __register_frame_info_table
+00059fc0 g DF .text 0000008d GLIBC_2.1 popen
+0010d310 g DF .text 0000008a (GLIBC_2.0) popen
+0006ce00 w DF .text 000001e5 GLIBC_2.0 cfree
+00023c50 g DF .text 00000028 GLIBC_2.0 _tolower
+000ee780 g DF .text 000000a1 GLIBC_2.2 ruserok_af
+000d2630 w DF .text 0000006f GLIBC_2.0 step
+00024420 g DF .text 00000049 GLIBC_2.0 __dcgettext
+000d68c0 w DF .text 0000005d GLIBC_2.0 towctrans
+000d2a10 g DF .text 00000046 GLIBC_2.3 lsetxattr
+000cdda0 g DF .text 00000071 GLIBC_2.0 setttyent
+000c3060 w DF .text 000000e5 GLIBC_2.2 __open64
+00093790 g DF .text 00000013 GLIBC_2.0 __bsd_getpgrp
+000934c0 g DF .text 00000031 GLIBC_2.0 getpid
+00039d50 w DF .text 00000079 GLIBC_2.1 getcontext
+0002a560 w DF .text 00000038 GLIBC_2.0 kill
+00070860 g DF .text 000000ae GLIBC_2.0 strspn
+000df530 g DF .text 0000003c GLIBC_2.0 pthread_condattr_init
+00143340 w DO .data 00000004 GLIBC_2.0 program_invocation_name
+0002d310 w DF .text 00000095 GLIBC_2.1.1 imaxdiv
+00110de0 g DF .text 00000040 (GLIBC_2.2) posix_fallocate64
+000c9350 g DF .text 00000295 GLIBC_2.3.3 posix_fallocate64
+000fa9c0 g DF .text 0000009c GLIBC_2.0 svcraw_create
+000b7600 g DF .text 00000034 GLIBC_2.0 __sched_get_priority_max
+000722f0 w DF .text 00000042 GLIBC_2.0 argz_extract
+000243e0 w DF .text 00000015 GLIBC_2.2 bind_textdomain_codeset
+000583a0 g DF .text 000001df GLIBC_2.2 fgetpos
+0005abb0 g DF .text 000001af GLIBC_2.2 _IO_fgetpos64
+0010d4c0 g DF .text 0000013b (GLIBC_2.0) fgetpos
+0010d620 g DF .text 00000184 (GLIBC_2.1) _IO_fgetpos64
+0006fc90 w DF .text 00000057 GLIBC_2.0 strdup
+000c4070 g DF .text 00000022 GLIBC_2.1 creat64
+00061cc0 w DF .text 0000002a GLIBC_2.0 getc_unlocked
+000fac80 g DF .text 00000043 GLIBC_2.0 svc_exit
+00088ed0 g DF .text 00000045 GLIBC_2.0 strftime
+000e0c30 g DF .text 000003e5 GLIBC_2.0 inet_pton
+00074fb0 g DF .text 00000045 GLIBC_2.1.1 __strncat_g
+000613a0 g DF .text 0000000f GLIBC_2.2 __flbf
+000c3e10 g DF .text 00000130 GLIBC_2.1 lockf64
+0005c3e0 g DF .text 0000002b GLIBC_2.2 _IO_switch_to_main_wget_area
+00101ea0 g DF .text 0000023b GLIBC_2.0 xencrypt
+001068c0 g DF .text 00000046 GLIBC_2.1 putpmsg
+00143338 w DO .data 00000008 GLIBC_2.0 tzname
+00037700 g DF .text 0000007d GLIBC_PRIVATE __libc_system
+001037e0 g DF .text 00000069 GLIBC_2.1 xdr_uint16_t
+00068ec0 g DF .text 0000014b GLIBC_2.0 __libc_mallopt
+0002afc0 w DF .text 000000a2 GLIBC_2.1 sysv_signal
+0002f510 w DF .text 00000030 GLIBC_2.3 strtoll_l
+000df310 g DF .text 00000043 GLIBC_2.0 pthread_attr_getschedparam
+000c3f80 g DF .text 00000038 GLIBC_2.0 __dup2
+000df7c0 g DF .text 0000003c GLIBC_2.0 pthread_mutex_destroy
+0005b0c0 w DF .text 000000e7 GLIBC_2.2 fgetwc
+000cac60 g DF .text 00000074 GLIBC_2.0 vlimit
+000c2cb0 w DF .text 00000038 GLIBC_2.0 chmod
+000cafc0 w DF .text 00000073 GLIBC_2.0 sbrk
+00023550 g DF .text 00000150 GLIBC_2.0 __assert_fail
+001021c0 g DF .text 0000027a GLIBC_2.1 clntunix_create
+00075110 g DF .text 00000020 GLIBC_2.1.1 __strrchr_c
+00023cb0 w DF .text 0000000b GLIBC_2.1 __toascii_l
+000d5f10 w DF .text 000000c9 GLIBC_2.0 iswalnum
+00029470 w DF .text 00000011 GLIBC_2.0 finite
+000edbc0 g DF .text 0000006a GLIBC_2.0 ether_ntoa_r
+000ccec0 g DF .text 000008d5 GLIBC_2.2 __getmntent_r
+00046530 g DF .text 00000039 GLIBC_2.0 printf
+00023d50 g DF .text 00000015 GLIBC_2.1 __isalnum_l
+000d3a50 w DF .text 0000006c GLIBC_2.0 __connect
+000ea960 g DF .text 00000156 GLIBC_2.0 getnetbyname
+000cc1b0 g DF .text 0000002b GLIBC_2.0 mkstemp
+00075130 g DF .text 00000033 GLIBC_2.1.1 __strrchr_g
+000c2a10 g DF .text 00000094 GLIBC_2.1 statvfs
+000c3cc0 w DF .text 00000038 GLIBC_2.0 flock
+000d1f40 w DF .text 0000015c GLIBC_2.0 error_at_line
+00060190 g DF .text 000000f6 GLIBC_2.0 rewind
+0002d230 g DF .text 00000031 GLIBC_2.0 llabs
+00072e50 w DF .text 0000109f GLIBC_2.3 strcoll_l
+001465a0 g DO .bss 0000000c GLIBC_2.0 _null_auth
+00082af0 w DF .text 00000032 GLIBC_2.0 localtime_r
+00075f80 g DF .text 0000003e GLIBC_2.0 wcscspn
+000cace0 g DF .text 00000150 GLIBC_2.0 vtimes
+00029490 w DF .text 0000001e GLIBC_2.0 copysign
+000711c0 g DF .text 00000091 GLIBC_2.0 __stpncpy
+000f44f0 g DF .text 00000090 GLIBC_2.5 inet6_opt_finish
+000926d0 w DF .text 0000006c GLIBC_2.2.6 __nanosleep
+00029840 w DF .text 0000009a GLIBC_2.0 modff
+000d6250 w DF .text 000000cb GLIBC_2.0 iswlower
+0002fc60 w DF .text 0000003f GLIBC_2.0 strtod
+00029ee0 g DF .text 0000003e GLIBC_2.0 setjmp
+000c8e50 g DF .text 000000a4 GLIBC_2.1 __poll
+00023bb0 g DF .text 00000048 GLIBC_2.0 isspace
+000e8870 g DF .text 0000002b GLIBC_2.4 __confstr_chk
+00056240 g DF .text 00000080 GLIBC_2.0 tmpnam_r
+000d7120 g DF .text 0000008b GLIBC_2.1 __wctype_l
+0005b350 g DF .text 00000179 GLIBC_2.2 fgetws
+00108ef0 g DF .text 00000017 GLIBC_2.1 setutxent
+00023d70 g DF .text 00000017 GLIBC_2.1 __isalpha_l
+0002fbe0 w DF .text 0000003f GLIBC_2.0 strtof
+00078c50 w DF .text 00000040 GLIBC_2.1 __wcstoll_l
+000d6c70 w DF .text 00000093 GLIBC_2.3 iswdigit_l
+000d4300 g DF .text 000000b6 GLIBC_PRIVATE __libc_msgsnd
+00082a30 g DF .text 00000035 GLIBC_2.0 gmtime
+00023300 g DF .text 00000084 GLIBC_2.3 __uselocale
+000e7ef0 g DF .text 000000e5 GLIBC_2.4 __wcsncat_chk
+000710f0 g DF .text 00000010 GLIBC_2.0 ffs
+000f9700 g DF .text 00000050 GLIBC_2.0 xdr_opaque_auth
+00022890 w DF .text 0000001e GLIBC_2.0 __ctype_get_mb_cur_max
+000d6d10 g DF .text 00000092 GLIBC_2.1 __iswlower_l
+00029ae0 w DF .text 00000187 GLIBC_2.0 modfl
+00072ca0 g DF .text 0000017d GLIBC_2.0 envz_add
+00070ab0 g DF .text 00000112 GLIBC_2.0 strtok
+001085a0 w DF .text 0000003b GLIBC_2.1 getpt
+0002b480 w DF .text 000000a0 GLIBC_2.1 sigqueue
+0002e3a0 g DF .text 00000046 GLIBC_2.0 strtol
+00091330 g DF .text 000000b0 GLIBC_2.0 endpwent
+00058860 g DF .text 00000032 GLIBC_2.1 _IO_fopen
+0010cab0 g DF .text 00000097 (GLIBC_2.0) _IO_fopen
+00075320 g DF .text 00000036 GLIBC_2.1.1 __strstr_cg
+000c4b90 w DF .text 00000032 GLIBC_2.0 isatty
+000c7440 g DF .text 000000f9 GLIBC_2.0 fts_close
+000c4470 w DF .text 00000053 GLIBC_2.0 lchown
+000cce30 w DF .text 00000083 GLIBC_2.0 setmntent
+000cf950 w DF .text 0000005c GLIBC_2.0 mmap
+000f0db0 g DF .text 000000ca GLIBC_2.0 endnetgrent
+000632a0 g DF .text 0000003f GLIBC_2.0 _IO_file_read
+000f4190 g DF .text 00000143 GLIBC_2.3.4 setsourcefilter
+0010a570 g DF .text 00000052 GLIBC_2.0 __register_frame
+00090c80 w DF .text 000000d4 GLIBC_2.0 getpw
+000d8490 w DF .text 00000226 GLIBC_2.0 fgetspent_r
+000b75d0 w DF .text 0000002c GLIBC_2.0 sched_yield
+00000000 g DO *ABS* 00000000 GLIBC_PRIVATE GLIBC_PRIVATE
+0002e4e0 w DF .text 00000046 GLIBC_2.0 strtoq
+00095810 w DF .text 000000b6 GLIBC_2.0 glob_pattern_p
+00075bb0 g DF .text 00000053 GLIBC_2.1.1 __strsep_1c
+00081960 w DF .text 0000006c GLIBC_2.1 wcsncasecmp
+00090390 g DF .text 000001ec GLIBC_2.1.2 getgrnam_r
+000829e0 g DF .text 00000039 GLIBC_2.0 ctime_r
+0010ef00 g DF .text 0000005f (GLIBC_2.0) getgrnam_r
+00103570 g DF .text 000000bc GLIBC_2.3.4 xdr_u_quad_t
+0002c6b0 w DF .text 00000088 GLIBC_2.0 clearenv
+000d7120 w DF .text 0000008b GLIBC_2.3 wctype_l
+000c2ab0 g DF .text 00000098 GLIBC_2.1 fstatvfs
+0002a7f0 w DF .text 00000063 GLIBC_2.0 sigblock
+000d4250 g DF .text 00000058 GLIBC_2.1 __libc_sa_len
+0005f5f0 w DF .text 0000009a GLIBC_2.0 feof
+001465b0 g DO .bss 00000004 GLIBC_2.1 __key_encryptsession_pk_LOCAL
+000fb820 g DF .text 00000023 GLIBC_2.0 svcudp_create
+000d6920 w DF .text 00000092 GLIBC_2.3 iswxdigit_l
+000df4a0 g DF .text 00000043 GLIBC_2.0 pthread_attr_setscope
+00071e10 w DF .text 0000015f GLIBC_2.1.1 strchrnul
+000cc130 w DF .text 00000034 GLIBC_2.0 swapoff
+001433fc g DO .data 00000004 (GLIBC_2.0) __ctype_tolower
+000cf660 g DF .text 0000002c GLIBC_2.0 syslog
+0002eea0 w DF .text 00000030 GLIBC_2.1 __strtoul_l
+000c1490 g DF .text 00000007 GLIBC_2.2 posix_spawnattr_destroy
+0010d7d0 g DF .text 00000110 (GLIBC_2.0) fsetpos
+00058e40 g DF .text 0000013e GLIBC_2.2 fsetpos
+000c0fd0 w DF .text 000000ef GLIBC_2.1 pread64
+000c37e0 w DF .text 000000f7 GLIBC_2.4 eaccess
+000f3b40 g DF .text 0000001a GLIBC_2.3.3 inet6_option_alloc
+00085b80 g DF .text 00000048 GLIBC_2.0 dysize
+000c4de0 w DF .text 00000038 GLIBC_2.0 symlink
+001438c0 g DO .data 00000050 GLIBC_2.0 _IO_stdout_
+0005c440 g DF .text 00000039 GLIBC_2.2 _IO_wdefault_uflow
+000d7300 g DF .text 000000a2 GLIBC_2.0 getspent
+000df220 g DF .text 00000043 GLIBC_2.0 pthread_attr_setdetachstate
+000d27c0 g DF .text 00000040 GLIBC_2.3 fgetxattr
+0002dab0 w DF .text 00000104 GLIBC_2.0 srandom_r
+000cdb00 w DF .text 00000038 GLIBC_2.0 truncate
+0006b590 g DF .text 000002fd GLIBC_2.0 __libc_calloc
+00023b10 g DF .text 00000048 GLIBC_2.0 isprint
+000c9120 g DF .text 00000046 GLIBC_2.2 posix_fadvise
+00071410 w DF .text 00000046 GLIBC_2.0 memccpy
+00092c40 g DF .text 0000017c GLIBC_2.0 execle
+000d26a0 g DF .text 000000e8 GLIBC_2.2 getloadavg
+00088f20 g DF .text 00000045 GLIBC_2.2 wcsftime
+000ca2a0 g DF .text 0000006c GLIBC_2.0 cfsetispeed
+000e4400 g DF .text 00000228 GLIBC_2.0 __nss_configure_lookup
+0002d2c0 g DF .text 00000044 GLIBC_2.0 ldiv
+000fc3a0 g DF .text 0000000a GLIBC_2.0 xdr_void
+000edb90 g DF .text 0000002d GLIBC_2.0 ether_ntoa
+000441b0 g DF .text 000000fe GLIBC_2.0 parse_printf_format
+0005fc60 w DF .text 000000e7 GLIBC_2.0 fgetc
+000d38a0 g DF .text 00000040 GLIBC_2.5 tee
+00100770 g DF .text 0000006c GLIBC_2.0 xdr_key_netstarg
+00071ba0 g DF .text 000000e3 GLIBC_2.0 strfry
+0005aa40 g DF .text 000000c9 GLIBC_2.0 _IO_vsprintf
+000cbdf0 g DF .text 00000057 GLIBC_2.0 reboot
+00111e60 g DF .text 0000005f (GLIBC_2.0) getaliasbyname_r
+000f1490 g DF .text 0000017d GLIBC_2.1.2 getaliasbyname_r
+0002dea0 g DF .text 00000037 GLIBC_2.0 jrand48
+00111450 g DF .text 00000066 (GLIBC_2.0) gethostbyname_r
+000e9fd0 g DF .text 0000029e GLIBC_2.1.2 gethostbyname_r
+00093370 g DF .text 00000145 GLIBC_2.0 execlp
+00071b60 g DF .text 0000003f GLIBC_2.0 swab
+00056f40 g DF .text 0000002f GLIBC_2.0 _IO_funlockfile
+00056e70 g DF .text 0000004b GLIBC_2.0 _IO_flockfile
+00075860 g DF .text 00000072 GLIBC_2.1.1 __strsep_2c
+0008e420 g DF .text 0000006c GLIBC_2.0 seekdir
+00023ce0 w DF .text 00000015 GLIBC_2.3 isblank_l
+00023cc0 w DF .text 00000011 GLIBC_2.1 __isascii_l
+0008eea0 g DF .text 00000024 GLIBC_2.2 alphasort64
+000f8740 g DF .text 000001a6 GLIBC_2.0 pmap_getport
+0010ed30 g DF .text 00000024 (GLIBC_2.1) alphasort64
+00039e40 w DF .text 00000065 GLIBC_2.1 makecontext
+000cbd80 g DF .text 00000065 GLIBC_2.0 fdatasync
+00101320 g DF .text 000001bd GLIBC_2.1 authdes_getucred
+000cdb80 g DF .text 00000063 GLIBC_2.1 truncate64
+000d6db0 g DF .text 00000092 GLIBC_2.1 __iswgraph_l
+00023e30 g DF .text 00000015 GLIBC_2.1 __ispunct_l
+00039cc0 g DF .text 00000029 GLIBC_2.1 strtoumax
+000d9740 w DF .text 0000018d GLIBC_2.1 argp_failure
+00071260 g DF .text 00000062 GLIBC_2.0 __strcasecmp
+00050a50 g DF .text 00000039 GLIBC_2.0 __vfscanf
+000585a0 w DF .text 00000171 GLIBC_2.0 fgets
+000d67d0 g DF .text 0000006e GLIBC_2.0 __iswctype
+00111640 g DF .text 000000e5 (GLIBC_2.0) getnetent_r
+000eabb0 g DF .text 000000ed GLIBC_2.1.2 getnetent_r
+000c1540 g DF .text 0000001c GLIBC_2.2 posix_spawnattr_setflags
+00110920 g DF .text 00000032 (GLIBC_2.3.3) sched_setaffinity
+000b7750 g DF .text 00000144 GLIBC_2.3.4 sched_setaffinity
+00060590 w DF .text 0000003c GLIBC_2.0 vscanf
+00090fa0 g DF .text 0000012d GLIBC_2.0 getpwnam
+000f3b60 g DF .text 0000006b GLIBC_2.3.3 inet6_option_append
+0006b590 w DF .text 000002fd GLIBC_2.0 calloc
+0002e530 g DF .text 00000045 (GLIBC_2.0) __strtouq_internal
+00093500 w DF .text 00000008 GLIBC_2.0 getppid
+001275a5 g DO .rodata 00000012 GLIBC_2.0 _nl_default_dirname
+001067a0 g DF .text 00000060 GLIBC_2.1 getmsg
+0005c7a0 g DF .text 00000038 GLIBC_2.2 _IO_unsave_wmarkers
+00109230 g DF .text 00000353 GLIBC_PRIVATE _dl_addr
+000cfaa0 w DF .text 00000070 GLIBC_2.0 msync
+00065070 g DF .text 00000042 GLIBC_2.0 _IO_init
+000297a0 g DF .text 0000000f GLIBC_2.1 __signbit
+000c96c0 g DF .text 00000022 GLIBC_2.6 futimens
+00056ce0 g DF .text 0000018f GLIBC_2.4 renameat
+00082800 w DF .text 0000012d GLIBC_2.0 asctime_r
+00023250 w DF .text 00000088 GLIBC_2.3 freelocale
+0006ff50 g DF .text 000000af GLIBC_2.0 strlen
+0002d770 w DF .text 00000086 GLIBC_2.0 initstate
+000e7fe0 g DF .text 0000002b GLIBC_2.4 __wmemset_chk
+0005a980 w DF .text 000000ac GLIBC_2.0 ungetc
+00075ef0 g DF .text 00000021 GLIBC_2.0 wcschr
+000238e0 g DF .text 00000048 GLIBC_2.0 isxdigit
+000ed480 g DF .text 00000705 GLIBC_2.0 ether_line
+00064310 g DF .text 00000047 GLIBC_2.1 _IO_file_init
+0005cd20 g DF .text 000000e7 GLIBC_2.2 __wuflow
+000c3d00 g DF .text 00000108 GLIBC_2.0 lockf
+001433f4 g DO .data 00000004 (GLIBC_2.0) __ctype_b
+0010e480 g DF .text 0000006f (GLIBC_2.0) _IO_file_init
+000fed10 g DF .text 000000ae GLIBC_2.1 xdr_authdes_cred
+000d67d0 w DF .text 0000006e GLIBC_2.0 iswctype
+000d03a0 g DF .text 00000063 GLIBC_2.0 qecvt
+00075a00 g DF .text 00000022 GLIBC_2.1.1 __memset_gg
+0010d410 g DF .text 000000a2 (GLIBC_2.0) tmpfile
+000f0d30 g DF .text 00000071 GLIBC_PRIVATE __internal_setnetgrent
+00076b80 g DF .text 00000048 GLIBC_2.0 __mbrlen
+00056020 g DF .text 000000a2 GLIBC_2.1 tmpfile
+00103850 g DF .text 00000068 GLIBC_2.1 xdr_int8_t
+000d69c0 g DF .text 0000005d GLIBC_2.1 __towupper_l
+000d5660 w DF .text 000004ec GLIBC_2.2.3 sprofil
+000d36f0 g DF .text 00000038 GLIBC_2.2.1 pivot_root
+00072910 g DF .text 0000007a GLIBC_2.0 envz_entry
+000f57a0 g DF .text 000000be GLIBC_2.0 xdr_authunix_parms
+000fa0b0 g DF .text 0000009e GLIBC_2.0 xprt_unregister
+001434c0 g DO .data 00000098 GLIBC_2.1 _IO_2_1_stdout_
+000228b0 w DF .text 000007fa GLIBC_2.3 newlocale
+000ef700 g DF .text 000005f9 GLIBC_2.2 rexec_af
+000d12d0 w DF .text 000002bf GLIBC_2.0 tsearch
+000f1340 g DF .text 0000012d GLIBC_2.0 getaliasbyname
+000f9f10 g DF .text 0000004e GLIBC_2.0 svcerr_progvers
+00023e50 w DF .text 00000017 GLIBC_2.3 isspace_l
+00072340 w DF .text 00000124 GLIBC_2.0 argz_insert
+00075970 g DF .text 00000031 GLIBC_2.1.1 __memcpy_c
+0002a130 w DF .text 0000008a GLIBC_2.0 gsignal
+000f4450 g DF .text 00000048 GLIBC_2.5 inet6_opt_get_val
+001113e0 g DF .text 00000063 (GLIBC_2.0) gethostbyname2_r
+0002cff0 g DF .text 00000057 GLIBC_2.1.3 __cxa_atexit
+000e9d20 g DF .text 000002ac GLIBC_2.1.2 gethostbyname2_r
+000c11b0 g DF .text 00000035 GLIBC_2.2 posix_spawn_file_actions_init
+000685d0 w DF .text 00000277 GLIBC_2.0 malloc_stats
+000d3730 w DF .text 00000046 GLIBC_2.0 prctl
+00061350 g DF .text 0000000f GLIBC_2.2 __fwriting
+000cecf0 g DF .text 00000023 GLIBC_2.0 setlogmask
+000758e0 g DF .text 00000086 GLIBC_2.1.1 __strsep_3c
+000d72a0 g DF .text 0000005d GLIBC_2.1 __towctrans_l
+000fc890 g DF .text 0000001a GLIBC_2.0 xdr_enum
+001419b0 g DO .data.rel.ro 00000014 GLIBC_2.0 h_errlist
+00061ed0 g DF .text 0000005b GLIBC_2.1 fread_unlocked
+00074cd0 g DF .text 00000033 GLIBC_2.1.1 __memcpy_g
+000d38e0 g DF .text 00000034 GLIBC_2.4 unshare
+000caf70 w DF .text 00000044 GLIBC_2.0 brk
+000d3d10 w DF .text 0000006c GLIBC_2.0 send
+00023e10 w DF .text 00000017 GLIBC_2.3 isprint_l
+00085b00 w DF .text 0000003a GLIBC_2.0 setitimer
+000d68c0 g DF .text 0000005d GLIBC_2.1 __towctrans
+001416a0 g DO .data.rel.ro 00000080 (GLIBC_2.0) sys_sigabbrev
+00039dd0 w DF .text 00000066 GLIBC_2.0 setcontext
+001416a0 g DO .data.rel.ro 00000100 (GLIBC_2.1) sys_sigabbrev
+001416a0 g DO .data.rel.ro 00000104 GLIBC_2.3.3 sys_sigabbrev
+000f3830 g DF .text 000000ad GLIBC_2.3.3 inet6_option_next
+0002ad60 g DF .text 0000004d GLIBC_2.0 sigemptyset
+000d7020 w DF .text 00000092 GLIBC_2.3 iswupper_l
+00109e30 g DF .text 0000001f GLIBC_PRIVATE _dl_sym
+000cefd0 g DF .text 00000085 GLIBC_2.0 openlog
+000b9d90 g DF .text 0000077f GLIBC_2.0 getaddrinfo
+00065650 g DF .text 0000006a GLIBC_2.0 _IO_init_marker
+00061cf0 g DF .text 0000003d GLIBC_2.0 getchar_unlocked
+000e3890 g DF .text 0000011b GLIBC_PRIVATE __res_maybe_init
+000d24e0 g DF .text 000000cc GLIBC_2.0 dirname
+00017b50 g DF .text 00000016 GLIBC_PRIVATE __gconv_get_alias_db
+00070f70 g DF .text 00000056 GLIBC_2.0 memset
+00022600 g DF .text 000001a2 GLIBC_2.2 localeconv
+00022600 g DF .text 000001a2 (GLIBC_2.0) localeconv
+000ca210 g DF .text 00000010 GLIBC_2.0 cfgetospeed
+00074d30 g DF .text 0000002f GLIBC_2.1.1 __memset_ccn_by2
+000cb490 w DF .text 00000103 GLIBC_2.0 writev
+00066370 g DF .text 000000e2 GLIBC_2.0 _IO_default_xsgetn
+00023930 g DF .text 00000046 GLIBC_2.0 isalnum
+00074d10 g DF .text 0000001d GLIBC_2.1.1 __memset_ccn_by4
+00106a10 w DF .text 00000051 GLIBC_2.0 setutent
+000f9370 g DF .text 00000125 GLIBC_2.0 _seterr_reply
+0005c500 g DF .text 00000079 GLIBC_2.2 _IO_switch_to_wget_mode
+000f4820 g DF .text 00000047 GLIBC_2.5 inet6_rth_add
+00061cc0 w DF .text 0000002a GLIBC_2.1 fgetc_unlocked
+0005bfb0 g DF .text 0000003b GLIBC_2.2 swprintf
+000d1ad0 g DF .text 0000001d GLIBC_2.0 warn
+0005fd70 g DF .text 000000f2 GLIBC_2.0 getchar
+00106d90 w DF .text 00000068 GLIBC_2.0 getutid
+0001f6a0 g DF .text 00000016 GLIBC_PRIVATE __gconv_get_cache
+000958d0 g DF .text 00001859 GLIBC_2.0 glob
+00070910 g DF .text 00000192 GLIBC_2.0 strstr
+000d46d0 g DF .text 00000049 GLIBC_2.3.3 semtimedop
+0002ccf0 g DF .text 00000035 GLIBC_2.0 __secure_getenv
+00077aa0 w DF .text 00000075 GLIBC_2.1 wcsnlen
+00077ed0 g DF .text 0000003e GLIBC_2.0 __wcstof_internal
+0006fa80 g DF .text 000000ae GLIBC_2.0 strcspn
+000ca870 g DF .text 00000075 GLIBC_2.0 tcsendbreak
+0008e4a0 g DF .text 0000000b GLIBC_2.0 telldir
+00023a70 g DF .text 00000048 GLIBC_2.0 islower
+000c9670 g DF .text 00000044 GLIBC_2.6 utimensat
+000cfd80 g DF .text 000000c4 GLIBC_2.0 fcvt
+000320d0 w DF .text 00000029 GLIBC_2.1 __strtof_l
+00016520 g DF .text 0000001d GLIBC_2.0 __errno_location
+000c5230 w DF .text 00000034 GLIBC_2.0 rmdir
+0005a680 g DF .text 00000127 GLIBC_2.0 _IO_setbuffer
+000658a0 g DF .text 00000008 GLIBC_2.2 _IO_iter_file
+000d3a10 g DF .text 00000037 GLIBC_2.0 bind
+0002f510 w DF .text 00000030 GLIBC_2.1 __strtoll_l
+000ca390 g DF .text 00000243 GLIBC_2.0 tcsetattr
+0005fb40 g DF .text 000000fa GLIBC_2.0 fseek
+000fce60 g DF .text 0000003e GLIBC_2.0 xdr_float
+000b5b70 g DF .text 000003bc GLIBC_2.0 confstr
+000c40a0 w DF .text 00000034 GLIBC_2.0 chdir
+000c3060 w DF .text 000000e5 GLIBC_2.1 open64
+000f46c0 g DF .text 00000019 GLIBC_2.5 inet6_rth_segments
+000c3680 w DF .text 00000070 GLIBC_2.0 read
+0006e930 g DF .text 00000094 GLIBC_2.0 muntrace
+0005b200 g DF .text 000000f2 GLIBC_2.2 getwchar
+00070ec0 g DF .text 0000001e GLIBC_2.0 memcmp
+000f18f0 g DF .text 00000913 GLIBC_2.1 getnameinfo
+000cb800 w DF .text 00000026 GLIBC_2.0 getpagesize
+000fe3e0 g DF .text 000000b9 GLIBC_2.1 xdr_sizeof
+00016690 g DF .text 000001fe (GLIBC_2.0) __moddi3
+00024470 w DF .text 00000022 GLIBC_2.0 dgettext
+00074de0 g DF .text 00000018 GLIBC_2.1.1 __strlen_g
+00058fa0 g DF .text 000001d1 GLIBC_2.0 _IO_ftell
+0005bb30 g DF .text 000000f6 GLIBC_2.2 putwc
+000f8180 g DF .text 000000e9 GLIBC_2.0 getrpcport
+000658b0 g DF .text 0000004d GLIBC_2.2 _IO_list_lock
+000465b0 g DF .text 00000034 GLIBC_2.0 _IO_sprintf
+000e79e0 g DF .text 00000042 GLIBC_2.4 __pread_chk
+000cfbe0 g DF .text 00000038 GLIBC_2.0 mlock
+0008ffe0 g DF .text 000000b0 GLIBC_2.0 endgrent
+0006fcf0 w DF .text 00000064 GLIBC_2.0 strndup
+000d3490 g DF .text 00000046 GLIBC_2.0 init_module
+000cf630 g DF .text 0000002b GLIBC_2.4 __syslog_chk
+000826e0 g DF .text 0000011b GLIBC_2.0 asctime
+000f5d10 g DF .text 00000084 GLIBC_2.0 clnt_sperrno
+000fd990 g DF .text 0000016a GLIBC_2.0 xdrrec_skiprecord
+00077400 w DF .text 00000362 GLIBC_2.0 mbsnrtowcs
+00072e50 g DF .text 0000109f GLIBC_2.1 __strcoll_l
+000e39f0 g DF .text 000000ae GLIBC_PRIVATE __gai_sigqueue
+000238a0 g DF .text 00000037 GLIBC_2.0 toupper
+000eb570 g DF .text 000000a8 GLIBC_2.0 setprotoent
+000934c0 g DF .text 00000031 GLIBC_2.0 __getpid
+0002d4d0 g DF .text 000000b9 GLIBC_2.0 mbtowc
+0010a030 g DF .text 00000084 GCC_3.0 __register_frame_info_table_bases
+00100b60 g DF .text 000000f9 GLIBC_2.1 netname2user
+00023c80 g DF .text 00000028 GLIBC_2.0 _toupper
+000d3b40 w DF .text 00000037 GLIBC_2.0 getsockopt
+000fb520 g DF .text 00000245 GLIBC_2.0 svctcp_create
+0005cf80 g DF .text 00000080 GLIBC_2.2 _IO_wsetb
+000593f0 w DF .text 00000278 GLIBC_2.0 getdelim
+0008f8c0 g DF .text 0000003f GLIBC_2.0 setgroups
+000f5fe0 g DF .text 0000009a GLIBC_2.0 clnt_perrno
+000d2aa0 g DF .text 00000046 GLIBC_2.3 setxattr
+0010b930 g DF .text 00000096 GCC_3.0 _Unwind_Find_FDE
+0002dfb0 w DF .text 000000a0 GLIBC_2.0 erand48_r
+0002dde0 g DF .text 00000034 GLIBC_2.0 lrand48
+00064d10 g DF .text 0000007a GLIBC_2.0 _IO_doallocbuf
+000c4650 g DF .text 0000026a GLIBC_2.0 ttyname
+00144aa4 w DO .bss 00000004 GLIBC_2.0 ___brk_addr
+001089b0 g DF .text 000000d5 GLIBC_2.1 grantpt
+000df190 g DF .text 0000003c GLIBC_2.1 pthread_attr_init
+00070fd0 g DF .text 00000044 GLIBC_2.1 mempcpy
+000df150 g DF .text 0000003c (GLIBC_2.0) pthread_attr_init
+000dfe90 g DF .text 00000155 GLIBC_2.0 herror
+000b7340 g DF .text 00000049 GLIBC_2.0 getopt
+00077c40 g DF .text 00000046 GLIBC_2.0 wcstoul
+000e78d0 g DF .text 000000a8 GLIBC_2.4 __fgets_unlocked_chk
+001081b0 w DF .text 000000f9 GLIBC_2.0 utmpname
+00093b00 g DF .text 00000149 GLIBC_2.0 getlogin_r
+00023db0 w DF .text 00000017 GLIBC_2.3 isdigit_l
+00046dd0 w DF .text 00003e13 GLIBC_2.2 vfwprintf
+000cce30 g DF .text 00000083 GLIBC_2.2 __setmntent
+0005a370 g DF .text 00000100 GLIBC_2.0 _IO_seekoff
+000ca7f0 g DF .text 00000032 GLIBC_2.0 tcflow
+000d0cc0 g DF .text 000000d4 GLIBC_2.0 hcreate_r
+00077d30 w DF .text 00000046 GLIBC_2.0 wcstouq
+0005c480 g DF .text 0000007e GLIBC_2.2 _IO_wdoallocbuf
+000efd00 g DF .text 0000003e GLIBC_2.0 rexec
+000d4490 g DF .text 00000061 GLIBC_2.0 msgget
+0005c0c0 g DF .text 00000034 GLIBC_2.2 fwscanf
+00103770 g DF .text 00000069 GLIBC_2.1 xdr_int16_t
+000e7bf0 g DF .text 00000034 GLIBC_2.4 __getcwd_chk
+000c2d60 g DF .text 0000015a GLIBC_2.4 fchmodat
+00072990 g DF .text 0000007a GLIBC_2.0 envz_strip
+001461a8 g DO .bss 00000004 GLIBC_PRIVATE _dl_open_hook
+000c3f80 w DF .text 00000038 GLIBC_2.0 dup2
+0005f550 g DF .text 00000085 GLIBC_2.0 clearerr
+00144a94 w DO .bss 00000004 GLIBC_2.0 environ
+000eea20 g DF .text 00000b7b GLIBC_2.2 rcmd_af
+000f9c50 g DF .text 00000039 GLIBC_2.2.3 __rpc_thread_svc_max_pollfd
+00092670 w DF .text 00000055 GLIBC_2.0 pause
+0002c740 w DF .text 000000fe GLIBC_2.0 unsetenv
+0002dd00 g DF .text 00000052 GLIBC_2.0 rand_r
+0010c980 g DF .text 0000003d (GLIBC_2.0) atexit
+00066d30 g DF .text 0000003f GLIBC_2.0 _IO_str_init_static
+00029470 g DF .text 00000011 GLIBC_2.0 __finite
+00083540 w DF .text 0000003c GLIBC_2.0 timelocal
+000724d0 w DF .text 000000a5 GLIBC_2.0 argz_add_sep
+000fdd10 g DF .text 0000006b GLIBC_2.0 xdr_pointer
+00076a00 g DF .text 0000015e GLIBC_2.0 wctob
+00029f60 w DF .text 00000064 GLIBC_2.0 longjmp
+000c2180 g DF .text 0000003f (GLIBC_2.1) __fxstat64
+00086250 g DF .text 0000004a GLIBC_2.0 strptime
+00062f30 g DF .text 000001e4 GLIBC_2.1 _IO_file_xsputn
+000c2180 g DF .text 0000003f GLIBC_2.2 __fxstat64
+0010dac0 g DF .text 000002a5 (GLIBC_2.0) _IO_file_xsputn
+000f6080 g DF .text 00000395 GLIBC_2.0 clnt_sperror
+000e7140 g DF .text 000000f2 GLIBC_2.3.4 __vprintf_chk
+000d3130 g DF .text 00000034 GLIBC_2.0 __adjtimex
+000d3ea0 w DF .text 00000037 GLIBC_2.0 shutdown
+00106910 g DF .text 00000022 GLIBC_2.1 fattach
+00029f20 g DF .text 00000036 GLIBC_2.0 _setjmp
+00060650 w DF .text 000000f7 GLIBC_2.0 vsnprintf
+000c8e50 w DF .text 000000a4 GLIBC_2.0 poll
+0006bcb0 w DF .text 0000018c GLIBC_2.0 malloc_get_state
+00106800 g DF .text 00000046 GLIBC_2.1 getpmsg
+00059690 g DF .text 00000047 GLIBC_2.0 _IO_getline
+00108ea0 g DF .text 00000045 GLIBC_2.1 ptsname
+00092b00 g DF .text 000000f5 GLIBC_2.0 fexecve
+000afff0 w DF .text 0000013a GLIBC_2.0 re_comp
+000f6420 g DF .text 00000044 GLIBC_2.0 clnt_perror
+000d0340 g DF .text 0000005e GLIBC_2.0 qgcvt
+000f9d90 g DF .text 00000042 GLIBC_2.0 svcerr_noproc
+00077b50 g DF .text 00000045 GLIBC_2.0 __wcstol_internal
+000656f0 g DF .text 00000011 GLIBC_2.0 _IO_marker_difference
+000e7080 g DF .text 000000a8 GLIBC_2.3.4 __fprintf_chk
+000713a0 g DF .text 00000069 GLIBC_2.1 __strncasecmp_l
+0002ae10 g DF .text 0000006a GLIBC_2.0 sigaddset
+00055d10 g DF .text 00000034 GLIBC_2.0 _IO_sscanf
+000829c0 g DF .text 0000001b GLIBC_2.0 ctime
+0010bc30 g DF .text 0000007b GLIBC_2.0 __frame_state_for
+000d6660 w DF .text 000000cb GLIBC_2.0 iswupper
+000f9ec0 g DF .text 00000042 GLIBC_2.0 svcerr_noprog
+00065880 g DF .text 00000007 GLIBC_2.2 _IO_iter_end
+000e7d50 g DF .text 0000003e GLIBC_2.4 __wmemcpy_chk
+0008fb10 g DF .text 0000012d GLIBC_2.0 getgrnam
+000d3130 w DF .text 00000034 GLIBC_2.0 adjtimex
+000df890 g DF .text 0000003c GLIBC_2.0 pthread_mutex_unlock
+000cb910 g DF .text 00000038 GLIBC_2.0 sethostname
+00065980 g DF .text 00000070 GLIBC_2.0 _IO_setb
+000c0fd0 w DF .text 000000ef GLIBC_2.1 __pread64
+0006dc80 g DF .text 000000f8 GLIBC_2.0 mcheck
+00023ce0 g DF .text 00000015 GLIBC_2.1 __isblank_l
+000fdd80 g DF .text 000000df GLIBC_2.0 xdr_reference
+0010f0d0 g DF .text 0000005f (GLIBC_2.0) getpwuid_r
+000916e0 g DF .text 000001ec GLIBC_2.1.2 getpwuid_r
+000ec7d0 g DF .text 000000b0 GLIBC_2.0 endrpcent
+00100ac0 g DF .text 00000091 GLIBC_2.1 netname2host
+000e9230 g DF .text 00000282 GLIBC_2.0 inet_network
+0002c610 g DF .text 00000091 GLIBC_2.0 putenv
+0007ffb0 g DF .text 00000100 GLIBC_2.0 wcswidth
+00023ef0 w DF .text 0000002c GLIBC_2.3 isctype
+000f8440 g DF .text 0000013a GLIBC_2.0 pmap_set
+00111170 g DF .text 0000003c (GLIBC_2.0) pthread_cond_broadcast
+000c4410 w DF .text 00000053 GLIBC_2.0 fchown
+000df570 g DF .text 0000003c GLIBC_2.3.2 pthread_cond_broadcast
+00028ab0 g DF .text 00000172 GLIBC_2.0 catopen
+000791a0 w DF .text 00000040 GLIBC_2.1 __wcstoull_l
+00000000 g DO *ABS* 00000000 GLIBC_2.0 GLIBC_2.0
+000fc980 g DF .text 00000029 GLIBC_2.0 xdr_netobj
+000d42b0 g DF .text 00000047 GLIBC_2.0 ftok
+00064a40 g DF .text 000001b2 GLIBC_2.0 _IO_link_in
+00000000 g DO *ABS* 00000000 GLIBC_2.1 GLIBC_2.1
+00044110 w DF .text 00000097 GLIBC_2.0 register_printf_function
+00029e40 g DF .text 00000035 GLIBC_2.0 __sigsetjmp
+00000000 g DO *ABS* 00000000 GLIBC_2.2 GLIBC_2.2
+000710f0 g DF .text 00000010 GLIBC_2.0 __ffs
+00143840 g DO .data 00000004 GLIBC_2.0 stdout
+000cde20 g DF .text 0000078d GLIBC_2.0 getttyent
+000e8f90 g DF .text 0000005c GLIBC_2.0 inet_makeaddr
+00000000 g DO *ABS* 00000000 GLIBC_2.3 GLIBC_2.3
+00144aa4 g DO .bss 00000004 GLIBC_2.0 __curbrk
+00000000 g DO *ABS* 00000000 GLIBC_2.4 GLIBC_2.4
+00000000 g DO *ABS* 00000000 GLIBC_2.5 GLIBC_2.5
+000e94e0 g DF .text 00000169 GLIBC_2.0 gethostbyaddr
+0010d310 g DF .text 0000008a (GLIBC_2.0) _IO_popen
+00000000 g DO *ABS* 00000000 GLIBC_2.6 GLIBC_2.6
+000d2320 w DF .text 0000001a GLIBC_2.0 get_phys_pages
+00059fc0 g DF .text 0000008d GLIBC_2.1 _IO_popen
+000dd1e0 w DF .text 0000001d GLIBC_2.1 argp_help
+0005f790 g DF .text 000000f6 GLIBC_2.0 fputc
+00143400 g DO .data 00000004 (GLIBC_2.0) __ctype_toupper
+001114c0 g DF .text 000000e5 (GLIBC_2.0) gethostent_r
+00065740 g DF .text 00000079 GLIBC_2.0 _IO_seekmark
+000ea340 g DF .text 000000ed GLIBC_2.1.2 gethostent_r
+000d70c0 g DF .text 0000005d GLIBC_2.1 __towlower_l
+00029690 w DF .text 00000072 GLIBC_2.0 frexp
+00055ef0 g DF .text 0000012e GLIBC_2.0 psignal
+000d1be0 g DF .text 00000023 GLIBC_2.0 verrx
+00093c70 g DF .text 00000022 GLIBC_2.0 setlogin
+000f05f0 g DF .text 000001b3 GLIBC_PRIVATE __internal_getnetgrent_r
+00061040 g DF .text 000000f8 GLIBC_2.1 fseeko64
+00142a00 g DO .data.rel.ro 00000054 GLIBC_2.0 _IO_file_jumps
+0010ed60 g DF .text 00000024 (GLIBC_2.1) versionsort64
+0008eed0 g DF .text 00000024 GLIBC_2.2 versionsort64
+000d2840 g DF .text 00000038 GLIBC_2.3 fremovexattr
+000e7d00 g DF .text 00000042 GLIBC_2.4 __wcscpy_chk
+0006ae90 g DF .text 000000fc GLIBC_2.0 __libc_valloc
+00065130 g DF .text 0000004b GLIBC_2.0 _IO_sungetc
+000d3bc0 w DF .text 0000006c GLIBC_2.0 recv
+000f8050 g DF .text 0000002d GLIBC_2.0 _rpc_dtablesize
+000d3230 g DF .text 0000003a GLIBC_2.0 create_module
+000937d0 g DF .text 00000034 GLIBC_2.0 getsid
+000cc170 g DF .text 0000003d GLIBC_2.0 mktemp
+000e0160 g DF .text 00000172 GLIBC_2.0 inet_addr
+000cab50 w DF .text 00000038 GLIBC_2.0 getrusage
+00061dc0 g DF .text 000000ec GLIBC_2.0 _IO_peekc_locked
+000656c0 g DF .text 00000028 GLIBC_2.0 _IO_remove_marker
+000e8b50 g DF .text 00000050 GLIBC_2.4 __mbstowcs_chk
+00143328 w DO .data 00000004 GLIBC_2.0 __malloc_hook
+00023e50 g DF .text 00000017 GLIBC_2.1 __isspace_l
+000c8740 g DF .text 0000070d GLIBC_2.0 fts_read
+000d6d10 w DF .text 00000092 GLIBC_2.3 iswlower_l
+000d6320 w DF .text 000000cb GLIBC_2.0 iswgraph
+000cc6d0 g DF .text 000000d5 GLIBC_2.0 getfsspec
+0002e490 g DF .text 00000045 GLIBC_2.0 __strtoll_internal
+000cc250 g DF .text 00000051 GLIBC_2.0 ualarm
+00058b90 w DF .text 00000149 GLIBC_2.0 fputs
+000d3780 g DF .text 00000046 GLIBC_2.0 query_module
+000c1250 g DF .text 00000028 GLIBC_2.2 posix_spawn_file_actions_destroy
+00070bd0 w DF .text 00000104 GLIBC_2.0 strtok_r
+000ea430 g DF .text 000000b0 GLIBC_2.0 endhostent
+00023e10 g DF .text 00000017 GLIBC_2.1 __isprint_l
+000df680 g DF .text 00000043 GLIBC_2.3.2 pthread_cond_wait
+00111280 g DF .text 00000043 (GLIBC_2.0) pthread_cond_wait
+00072260 g DF .text 00000088 GLIBC_2.0 argz_delete
+0005c8c0 g DF .text 00000053 GLIBC_2.2 __woverflow
+000fc420 g DF .text 00000065 GLIBC_2.0 xdr_u_long
+000e7dc0 g DF .text 0000003e GLIBC_2.4 __wmempcpy_chk
+00094a90 w DF .text 000001f5 GLIBC_2.0 fpathconf
+00023d90 w DF .text 00000015 GLIBC_2.3 iscntrl_l
+000a2230 w DF .text 000000a7 GLIBC_2.0 regerror
+00070000 g DF .text 0000009d GLIBC_2.0 strnlen
+0002de20 g DF .text 00000037 GLIBC_2.0 nrand48
+00111000 g DF .text 000000e5 (GLIBC_2.0) getspent_r
+00076830 w DF .text 00000034 GLIBC_2.2 wmempcpy
+000d7c00 g DF .text 000000e2 GLIBC_2.1.2 getspent_r
+0014636c g DO .bss 00000004 GLIBC_2.1 argp_program_bug_address
+000c3760 w DF .text 0000003a GLIBC_2.0 lseek
+00093990 w DF .text 00000085 GLIBC_2.0 setresgid
+0002abd0 w DF .text 00000038 GLIBC_2.0 sigaltstack
+00075040 g DF .text 00000042 GLIBC_2.1.1 __strncmp_g
+000fca80 g DF .text 00000123 GLIBC_2.0 xdr_string
+00085c10 g DF .text 00000072 GLIBC_2.0 ftime
+00071460 g DF .text 00000046 GLIBC_2.0 memcpy
+0005b0c0 w DF .text 000000e7 GLIBC_2.2 getwc
+00076b80 w DF .text 00000048 GLIBC_2.0 mbrlen
+000ce660 g DF .text 00000052 GLIBC_2.0 endusershell
+000c4250 g DF .text 00000089 GLIBC_2.0 getwd
+000b7640 g DF .text 00000034 GLIBC_2.0 __sched_get_priority_min
+00060df0 g DF .text 00000228 GLIBC_2.1 freopen64
+0010cd10 g DF .text 00000183 (GLIBC_2.0) fclose
+00057d70 g DF .text 000001e8 GLIBC_2.1 fclose
+00085c90 w DF .text 00000558 GLIBC_2.1 getdate_r
+000c1d40 g DF .text 00000015 GLIBC_2.2 posix_spawnattr_setschedparam
+0005c710 g DF .text 00000082 GLIBC_2.2 _IO_seekwmark
+00065180 g DF .text 0000003c GLIBC_2.0 _IO_adjust_column
+000c37e0 w DF .text 000000f7 GLIBC_2.0 euidaccess
+0002a8d0 g DF .text 0000012e GLIBC_2.0 __sigpause
+000c4e20 g DF .text 0000010c GLIBC_2.4 symlinkat
+0002dce0 g DF .text 00000017 GLIBC_2.0 rand
+000cbaa0 w DF .text 000001c0 GLIBC_2.0 pselect
+000df950 g DF .text 00000043 GLIBC_2.0 pthread_setcanceltype
+000ca700 g DF .text 00000032 GLIBC_2.0 tcsetpgrp
+00075f20 g DF .text 0000002e GLIBC_2.0 wcscmp
+000e67a0 g DF .text 000000a3 GLIBC_2.3.4 __memmove_chk
+000c71c0 g DF .text 00000052 GLIBC_2.3.3 nftw64
+000cfa60 w DF .text 0000003a GLIBC_2.0 mprotect
+00110d80 g DF .text 0000002b (GLIBC_2.1) nftw64
+000e7ba0 g DF .text 00000043 GLIBC_2.4 __getwd_chk
+000759b0 g DF .text 00000045 GLIBC_2.1.1 __strcat_c
+000e3ae0 g DF .text 00000355 GLIBC_PRIVATE __nss_lookup_function
+000710f0 w DF .text 00000010 GLIBC_2.1 ffsl
+000cc890 g DF .text 000000aa GLIBC_2.0 getmntent
+00109f30 g DF .text 0000001d GLIBC_PRIVATE __libc_dl_error_tsd
+000819d0 g DF .text 00000055 GLIBC_2.1 __wcscasecmp_l
+0002e350 g DF .text 00000045 GLIBC_2.0 __strtol_internal
+000e6e80 g DF .text 0000010c GLIBC_2.3.4 __vsnprintf_chk
+00074f70 g DF .text 00000036 GLIBC_2.1.1 __strcat_g
+0008b0d0 g DF .text 00002517 GLIBC_2.3 __wcsftime_l
+00057c30 g DF .text 0000013c GLIBC_2.0 _IO_file_doallocate
+0002e440 g DF .text 00000046 GLIBC_2.0 strtoul
+000618a0 g DF .text 00000144 GLIBC_2.2 fmemopen
+000df770 g DF .text 0000004a GLIBC_2.0 pthread_setschedparam
+000d0c70 g DF .text 0000004f GLIBC_2.0 hdestroy_r
+000d7cf0 g DF .text 000000b0 GLIBC_2.0 endspent
+000cfca0 g DF .text 0000002c GLIBC_2.0 munlockall
+0002aa20 w DF .text 0000001b GLIBC_2.0 sigpause
+000fc490 g DF .text 0000001a GLIBC_2.0 xdr_u_int
+000416a0 g DF .text 00000036 GLIBC_2.0 vprintf
+00109040 g DF .text 00000032 GLIBC_2.1.1 getutmpx
+00109040 g DF .text 00000032 GLIBC_2.1.1 getutmp
+000d3e60 g DF .text 00000037 GLIBC_2.0 setsockopt
+0006b890 g DF .text 00000180 GLIBC_2.0 malloc
+00065ae0 g DF .text 0000010e GLIBC_2.0 _IO_default_xsputn
+000cfb90 w DF .text 00000046 GLIBC_2.3.3 remap_file_pages
+00029f60 w DF .text 00000064 GLIBC_2.0 siglongjmp
+001465b8 g DO .bss 0000000c GLIBC_2.0 svcauthdes_stats
+000ce990 g DF .text 00000240 GLIBC_2.0 getpass
+0002e580 w DF .text 00000046 GLIBC_2.0 strtouq
+00143404 g DO .data 00000004 (GLIBC_2.2) __ctype32_tolower
+00100a90 g DF .text 00000022 GLIBC_2.0 xdr_keystatus
+000d3920 g DF .text 00000034 GLIBC_2.0 uselib
+0002b070 g DF .text 00000052 GLIBC_2.0 sigisemptyset
+00075240 g DF .text 00000044 GLIBC_2.1.1 __strspn_g
+0002a1c0 g DF .text 00000044 GLIBC_2.0 killpg
+00037fe0 g DF .text 00000048 GLIBC_2.0 strfmon
+000230e0 w DF .text 0000014b GLIBC_2.3 duplocale
+0006f690 g DF .text 000001aa GLIBC_2.0 strcat
+000fc400 g DF .text 0000001a GLIBC_2.0 xdr_int
+000c2ca0 w DF .text 00000010 GLIBC_2.0 umask
+00071260 w DF .text 00000062 GLIBC_2.0 strcasecmp
+0008ef00 w DF .text 000000a2 GLIBC_2.4 fdopendir
+00061160 g DF .text 00000179 GLIBC_2.1 ftello64
+000df3b0 g DF .text 00000043 GLIBC_2.0 pthread_attr_getschedpolicy
+0010c9c0 g DF .text 0000003f (GLIBC_2.0) realpath
+00037800 g DF .text 0000050e GLIBC_2.3 realpath
+00085bd0 g DF .text 0000003e GLIBC_2.0 timegm
+00060c10 g DF .text 000001bb GLIBC_2.1 ftello
+000294b0 w DF .text 000001cf GLIBC_2.0 modf
+00109870 g DF .text 0000008b GLIBC_PRIVATE __libc_dlclose
+00068850 g DF .text 0000018a GLIBC_2.0 __libc_mallinfo
+0002a130 g DF .text 0000008a GLIBC_2.0 raise
+000cb750 g DF .text 000000a7 GLIBC_2.0 setegid
+000670f0 w DF .text 00000034 GLIBC_2.0 malloc_usable_size
+00023db0 g DF .text 00000017 GLIBC_2.1 __isdigit_l
+000d2f50 g DF .text 00000013 GLIBC_2.0 setfsgid
+0005c840 g DF .text 0000007e GLIBC_2.2 _IO_wdefault_doallocate
+0004ae40 g DF .text 00005c04 GLIBC_2.0 _IO_vfscanf
+00056a20 g DF .text 0000005c GLIBC_2.0 remove
+000b7550 w DF .text 0000003a GLIBC_2.0 sched_setscheduler
+0007dce0 w DF .text 00000039 GLIBC_2.3 wcstold_l
+00093740 w DF .text 00000038 GLIBC_2.0 setpgid
+000d3ac0 w DF .text 00000037 GLIBC_2.0 getpeername
+000819d0 w DF .text 00000055 GLIBC_2.3 wcscasecmp_l
+00074da0 g DF .text 00000038 GLIBC_2.1.1 __memset_gcn_by2
+000e7750 g DF .text 00000158 GLIBC_2.4 __fgets_chk
+0006fb30 g DF .text 00000154 GLIBC_2.1.1 __strverscmp
+000e39d0 g DF .text 00000019 GLIBC_2.2 __res_state
+000f8580 g DF .text 00000115 GLIBC_2.0 pmap_getmaps
+000298f0 w DF .text 0000006a GLIBC_2.0 frexpf
+00141360 g DO .data.rel.ro 000001f8 (GLIBC_2.3) sys_errlist
+0006fcf0 g DF .text 00000064 GLIBC_2.2 __strndup
+00141360 g DO .data.rel.ro 000001ec (GLIBC_2.0) sys_errlist
+00141360 g DO .data.rel.ro 00000210 GLIBC_2.4 sys_errlist
+00074d60 g DF .text 00000035 GLIBC_2.1.1 __memset_gcn_by4
+00141360 g DO .data.rel.ro 000001f4 (GLIBC_2.1) sys_errlist
+001462ec g DO .bss 00000004 GLIBC_2.0 mallwatch
+00065450 w DF .text 000001fd GLIBC_2.2 _flushlbf
+00076b60 w DF .text 00000019 GLIBC_2.0 mbsinit
+000d69c0 w DF .text 0000005d GLIBC_2.3 towupper_l
+000e6b90 g DF .text 000000bc GLIBC_2.3.4 __strncpy_chk
+00093530 w DF .text 0000000c GLIBC_2.0 getgid
+0010a520 g DF .text 00000043 GLIBC_2.0 __register_frame_table
+000b0260 w DF .text 0000007c GLIBC_2.0 re_compile_pattern
+000465f0 w DF .text 00000034 GLIBC_2.0 asprintf
+00084630 w DF .text 00000079 GLIBC_2.0 tzset
+000c0f10 g DF .text 000000bc GLIBC_PRIVATE __libc_pwrite
+001430cc g DO .data 00000004 GLIBC_2.0 re_max_failures
+000c21c0 g DF .text 0000003f (GLIBC_2.1) __lxstat64
+00143920 g DO .data 00000050 GLIBC_2.0 _IO_stderr_
+000c21c0 g DF .text 0000003f GLIBC_2.2 __lxstat64
+00029c80 w DF .text 00000071 GLIBC_2.0 frexpl
+000fd820 g DF .text 00000170 GLIBC_2.0 xdrrec_eof
+00023c00 g DF .text 00000048 GLIBC_2.0 isupper
+000cf600 g DF .text 00000029 GLIBC_2.0 vsyslog
+00016a10 g DF .text 0000019e (GLIBC_2.0) __umoddi3
+000fb9e0 g DF .text 000002ee GLIBC_2.0 svcudp_bufcreate
+0006fe20 g DF .text 00000121 GLIBC_2.0 __strerror_r
+00029800 w DF .text 00000011 GLIBC_2.0 finitef
+000c28e0 w DF .text 0000012b GLIBC_2.1 fstatfs64
+00106e00 w DF .text 00000068 GLIBC_2.0 getutline
+000e5970 g DF .text 0000008a GLIBC_PRIVATE __nss_services_lookup
+00066100 g DF .text 00000138 GLIBC_2.0 __uflow
+00070fd0 g DF .text 00000044 GLIBC_2.0 __mempcpy
+0002ea30 w DF .text 00000030 GLIBC_2.3 strtol_l
+000297e0 g DF .text 00000018 GLIBC_2.0 __isnanf
+00022820 g DF .text 00000067 GLIBC_2.2 __nl_langinfo_l
+000fa150 g DF .text 00000087 GLIBC_2.2 svc_getreq_poll
+00029ab0 w DF .text 0000000e GLIBC_2.0 finitel
+000c1d90 g DF .text 00000081 GLIBC_2.6 __sched_cpucount
+000df2c0 g DF .text 00000043 GLIBC_2.0 pthread_attr_setinheritsched
+00000000 g DO *ABS* 00000000 GLIBC_2.1.1 GLIBC_2.1.1
+00146510 g DO .bss 00000004 GLIBC_2.2 svc_pollfd
+00000000 g DO *ABS* 00000000 GLIBC_2.1.2 GLIBC_2.1.2
+00060650 w DF .text 000000f7 GLIBC_2.0 __vsnprintf
+000227b0 g DF .text 00000070 GLIBC_2.0 nl_langinfo
+00000000 g DO *ABS* 00000000 GLIBC_2.1.3 GLIBC_2.1.3
+000cc460 g DF .text 00000089 GLIBC_2.0 setfsent
+000cc940 w DF .text 00000092 GLIBC_2.0 hasmntopt
+00029a60 g DF .text 00000046 GLIBC_2.0 __isnanl
+0002b1b0 g DF .text 00000016 GLIBC_2.1 __libc_current_sigrtmax
+0008e0b0 w DF .text 00000092 GLIBC_2.0 opendir
+000ea770 g DF .text 000001e1 GLIBC_2.1.2 getnetbyaddr_r
+001115d0 g DF .text 00000063 (GLIBC_2.0) getnetbyaddr_r
+00076080 g DF .text 000000a1 GLIBC_2.0 wcsncat
+00029680 w DF .text 0000000d GLIBC_2.1 scalbln
+000ea270 g DF .text 000000ab GLIBC_2.0 gethostent
+000e8ab0 g DF .text 00000042 GLIBC_2.4 __mbsrtowcs_chk
+000585a0 g DF .text 00000171 GLIBC_2.0 _IO_fgets
+00146500 g DO .bss 00000010 GLIBC_2.0 rpc_createerr
+000710c0 w DF .text 0000002e GLIBC_2.0 bzero
+000f8a60 g DF .text 00000685 GLIBC_2.0 clnt_broadcast
+0002ad00 g DF .text 00000024 GLIBC_2.0 __sigaddset
+000297b0 g DF .text 00000024 GLIBC_2.0 __isinff
+0006e220 g DF .text 000000bd GLIBC_2.2 mcheck_check_all
+00143164 g DO .data 00000004 GLIBC_2.1 argp_err_exit_status
+000d73c0 g DF .text 0000012d GLIBC_2.0 getspnam
+000df4f0 g DF .text 0000003c GLIBC_2.0 pthread_condattr_destroy
+000c2730 g DF .text 00000038 GLIBC_2.2 __statfs
+00144a94 g DO .bss 00000004 GLIBC_2.0 __environ
+000e7e90 g DF .text 00000056 GLIBC_2.4 __wcscat_chk
+000c2140 g DF .text 0000003f GLIBC_2.2 __xstat64
+00090850 w DF .text 0000024e GLIBC_2.0 fgetgrent_r
+000c2140 g DF .text 0000003f (GLIBC_2.1) __xstat64
+000f37d0 g DF .text 00000011 GLIBC_2.3.3 inet6_option_space
+000d2cd0 w DF .text 00000090 GLIBC_2.0 clone
+000d6ef0 g DF .text 00000090 GLIBC_2.1 __iswpunct_l
+0002c520 g DF .text 000000ef GLIBC_2.0 getenv
+00023fa0 g DF .text 0000003c GLIBC_2.3 __ctype_b_loc
+00029a00 g DF .text 00000055 GLIBC_2.0 __isinfl
+001108e0 g DF .text 00000032 (GLIBC_2.3.3) sched_getaffinity
+000b76c0 g DF .text 00000089 GLIBC_2.3.4 sched_getaffinity
+0002aa00 w DF .text 0000001b GLIBC_2.2 __xpg_sigpause
+000d5230 w DF .text 000001cd GLIBC_2.0 profil
+00055d10 g DF .text 00000034 GLIBC_2.0 sscanf
+0010a100 g DF .text 00000023 GLIBC_2.0 __deregister_frame_info
+00093900 w DF .text 00000085 GLIBC_2.0 setresuid
+0002e130 w DF .text 00000052 GLIBC_2.0 jrand48_r
+000d3c30 w DF .text 0000006c GLIBC_2.0 recvfrom
+00074e70 g DF .text 00000040 GLIBC_2.1.1 __mempcpy_by2
+000d5c40 g DF .text 00000019 GLIBC_2.0 __profile_frequency
+00077770 w DF .text 0000032f GLIBC_2.0 wcsnrtombs
+00074e30 g DF .text 00000033 GLIBC_2.1.1 __mempcpy_by4
+00146520 g DO .bss 00000080 GLIBC_2.0 svc_fdset
+000ef660 g DF .text 0000009c GLIBC_2.0 ruserok
+0006f550 g DF .text 0000002c GLIBC_2.0 _obstack_allocated_p
+000c7250 g DF .text 0000003b GLIBC_2.0 fts_set
+000fc690 g DF .text 0000001a GLIBC_2.1.1 xdr_u_longlong_t
+000caec0 g DF .text 000000ab GLIBC_2.0 nice
+000b0130 w DF .text 00000126 GLIBC_2.0 regcomp
+00101c60 g DF .text 0000023b GLIBC_2.1 xdecrypt
+000c2ff0 w DF .text 00000070 GLIBC_2.0 __open
+00085ac0 w DF .text 00000038 GLIBC_2.0 getitimer
+00023ac0 g DF .text 00000048 GLIBC_2.0 isgraph
+00146344 g DO .bss 00000004 GLIBC_2.0 optarg
+00028a30 g DF .text 00000080 GLIBC_2.0 catclose
+000f7630 g DF .text 000002db GLIBC_2.0 clntudp_bufcreate
+000eb950 g DF .text 0000013d GLIBC_2.0 getservbyname
+00061330 g DF .text 0000001a GLIBC_2.2 __freading
+0007ff30 g DF .text 0000007b GLIBC_2.0 wcwidth
+00143844 g DO .data 00000004 GLIBC_2.0 stderr
+000d4500 g DF .text 00000065 GLIBC_2.2 msgctl
+00110eb0 g DF .text 00000062 (GLIBC_2.0) msgctl
+000e8f60 g DF .text 0000002d GLIBC_2.0 inet_lnaof
+0002ae80 g DF .text 0000006a GLIBC_2.0 sigdelset
+00016110 w DF .text 00000016 GLIBC_2.1 gnu_get_libc_release
+000cb070 w DF .text 0000003a GLIBC_2.0 ioctl
+000c44d0 g DF .text 00000178 GLIBC_2.4 fchownat
+000923c0 g DF .text 00000034 GLIBC_2.0 alarm
+00143560 g DO .data 00000098 GLIBC_2.1 _IO_2_1_stderr_
+0005c580 g DF .text 00000049 GLIBC_2.2 _IO_sputbackwc
+0006ad30 g DF .text 00000105 GLIBC_2.0 __libc_pvalloc
+00037700 w DF .text 0000007d GLIBC_2.0 system
+00100700 g DF .text 00000068 GLIBC_2.1 xdr_getcredres
+000782f0 w DF .text 00000040 GLIBC_2.1 __wcstol_l
+00055c30 w DF .text 00000039 GLIBC_2.2 vfwscanf
+000d3520 g DF .text 0000002c GLIBC_2.4 inotify_init
+000cdc60 g DF .text 00000044 GLIBC_2.0 chflags
+000d1c60 g DF .text 00000026 GLIBC_2.0 err
+000ebab0 g DF .text 000001fb GLIBC_2.1.2 getservbyname_r
+00111990 g DF .text 00000066 (GLIBC_2.0) getservbyname_r
+000fc810 g DF .text 00000079 GLIBC_2.0 xdr_bool
+00071100 g DF .text 00000064 GLIBC_2.1 ffsll
+00023ef0 g DF .text 0000002c GLIBC_2.3 __isctype
+000caae0 g DF .text 0000006a GLIBC_2.1 setrlimit64
+00093670 w DF .text 00000088 GLIBC_2.0 group_member
+000c1e60 g DF .text 00000056 GLIBC_2.6 sched_getcpu
+000583a0 g DF .text 000001df GLIBC_2.2 _IO_fgetpos
+00065a80 g DF .text 00000052 GLIBC_2.0 _IO_free_backup_area
+000cfa20 w DF .text 00000038 GLIBC_2.0 munmap
+0010d4c0 g DF .text 0000013b (GLIBC_2.0) _IO_fgetpos
+000c14e0 g DF .text 00000037 GLIBC_2.2 posix_spawnattr_setsigdefault
+0006f2e0 g DF .text 000000cc GLIBC_2.0 _obstack_begin_1
+000918d0 g DF .text 00000319 GLIBC_PRIVATE _nss_files_parse_pwent
+000e88a0 g DF .text 0000003b GLIBC_2.4 __getgroups_chk
+00091fe0 w DF .text 00000029 GLIBC_2.0 wait3
+00092010 w DF .text 00000040 GLIBC_2.0 wait4
+0006f3b0 g DF .text 00000195 GLIBC_2.0 _obstack_newchunk
+00074ef0 g DF .text 00000034 GLIBC_2.1.1 __stpcpy_g
+000d25b0 w DF .text 0000007c GLIBC_2.0 advance
+000f42e0 g DF .text 0000002a GLIBC_2.5 inet6_opt_init
+00143024 g DO .data 00000002 GLIBC_2.0 __fpu_control
+00109ff0 g DF .text 0000003a GLIBC_2.0 __register_frame_info
+000e9980 g DF .text 000001a5 GLIBC_2.0 gethostbyname
+000c3760 w DF .text 0000003a GLIBC_2.0 __lseek
+000e6e40 g DF .text 00000039 GLIBC_2.3.4 __snprintf_chk
+001430d8 g DO .data 00000004 GLIBC_2.0 optopt
+000c13b0 g DF .text 00000097 GLIBC_2.2 posix_spawn_file_actions_adddup2
+000782f0 w DF .text 00000040 GLIBC_2.3 wcstol_l
+00146354 g DO .bss 00000004 GLIBC_2.0 error_message_count
+00023d90 g DF .text 00000015 GLIBC_2.1 __iscntrl_l
+000c2f00 g DF .text 000000ed GLIBC_2.4 mkdirat
+000cb6a0 g DF .text 000000a7 GLIBC_2.0 seteuid
+00075f50 g DF .text 0000002c GLIBC_2.0 wcscpy
+0002e0f0 g DF .text 00000037 GLIBC_2.0 mrand48_r
+000d2f30 g DF .text 00000013 GLIBC_2.0 setfsuid
+000c3f40 w DF .text 00000034 GLIBC_2.0 dup
+000e68a0 g DF .text 000000d9 GLIBC_2.3.4 __memset_chk
+00143860 g DO .data 00000050 GLIBC_2.0 _IO_stdin_
+000df9a0 g DF .text 00000046 GLIBC_2.0 pthread_exit
+000fc7d0 g DF .text 00000037 GLIBC_2.0 xdr_u_char
+0005b310 g DF .text 0000003d GLIBC_2.2 getwchar_unlocked
+00146340 g DO .bss 00000004 GLIBC_2.0 re_syntax_options
+00108fb0 g DF .text 00000023 GLIBC_2.1 pututxline
+000d4300 w DF .text 000000b6 GLIBC_2.0 msgsnd
+00093a20 g DF .text 000000dd GLIBC_2.0 getlogin
+000cdcb0 g DF .text 00000044 GLIBC_2.0 fchflags
+0002b0d0 g DF .text 0000005f GLIBC_2.0 sigandset
+000298e0 w DF .text 0000000d GLIBC_2.0 scalbnf
+000b7680 w DF .text 00000038 GLIBC_2.0 sched_rr_get_interval
+00064360 g DF .text 00000091 GLIBC_2.1 _IO_file_finish
+000d2c50 g DF .text 00000075 GLIBC_2.2 __sysctl
+000fcea0 g DF .text 000000a0 GLIBC_2.0 xdr_double
+00093550 w DF .text 0000003f GLIBC_2.0 getgroups
+00029c70 w DF .text 0000000d GLIBC_2.0 scalbnl
+000cb210 w DF .text 00000103 GLIBC_2.0 readv
+00093510 w DF .text 0000000c GLIBC_2.0 getuid
+000ef5a0 g DF .text 0000003f GLIBC_2.0 rcmd
+000c4f30 w DF .text 0000003a GLIBC_2.0 readlink
+000d1790 g DF .text 0000008b GLIBC_2.0 lsearch
+000ee6b0 g DF .text 000000ca GLIBC_2.2 iruserok_af
+00055c90 g DF .text 00000024 GLIBC_2.0 fscanf
+000eccc0 g DF .text 00000656 GLIBC_2.0 ether_aton_r
+00041ac0 g DF .text 0000264a GLIBC_2.0 __printf_fp
+000d3620 w DF .text 00000046 GLIBC_2.0 mremap
+000d2ec0 w DF .text 0000006a GLIBC_2.3 readahead
+00100c60 g DF .text 000001a0 GLIBC_2.1 host2netname
+000d2a60 g DF .text 00000038 GLIBC_2.3 removexattr
+0005c410 g DF .text 0000002d GLIBC_2.2 _IO_switch_to_wbackup_area
+000f88f0 g DF .text 0000006f GLIBC_2.0 xdr_pmap
+00000000 g DO *ABS* 00000000 GLIBC_2.2.1 GLIBC_2.2.1
+00074eb0 g DF .text 00000033 GLIBC_2.1.1 __mempcpy_byn
+000eb310 g DF .text 000000a2 GLIBC_2.0 getprotoent
+00092aa0 w DF .text 00000053 GLIBC_2.0 execve
+0005e350 g DF .text 0000015f GLIBC_2.2 _IO_wfile_sync
+00000000 g DO *ABS* 00000000 GLIBC_2.2.2 GLIBC_2.2.2
+000fc8b0 g DF .text 000000cd GLIBC_2.0 xdr_opaque
+00093540 w DF .text 0000000c GLIBC_2.0 getegid
+00000000 g DO *ABS* 00000000 GLIBC_2.2.3 GLIBC_2.2.3
+00000000 g DO *ABS* 00000000 GLIBC_2.2.4 GLIBC_2.2.4
+000caa10 g DF .text 0000003f GLIBC_2.2 setrlimit
+000d30f0 g DF .text 00000038 (GLIBC_2.0) setrlimit
+000b7480 g DF .text 00000047 GLIBC_2.0 getopt_long
+00063c10 g DF .text 0000011b GLIBC_2.0 _IO_file_open
+00000000 g DO *ABS* 00000000 GLIBC_2.2.6 GLIBC_2.2.6
+000835e0 w DF .text 00000038 GLIBC_2.0 settimeofday
+0005fe80 g DF .text 000000cb GLIBC_2.0 open_memstream
+000cb040 g DF .text 00000022 GLIBC_2.0 sstk
+00109e50 g DF .text 000000d7 GLIBC_PRIVATE _dl_vsym
+000613b0 g DF .text 00000076 GLIBC_2.2 __fpurge
+00108fe0 g DF .text 00000023 GLIBC_2.1 utmpxname
+00093700 w DF .text 00000034 GLIBC_2.0 getpgid
+0002b1b0 g DF .text 00000016 GLIBC_PRIVATE __libc_current_sigrtmax_private
+00037150 w DF .text 00000029 GLIBC_2.3 strtold_l
+000e6aa0 g DF .text 000000e7 GLIBC_2.3.4 __strncat_chk
+000c1d60 g DF .text 00000024 GLIBC_2.2 posix_madvise
+000c1560 g DF .text 00000012 GLIBC_2.2 posix_spawnattr_getpgroup
+000d1af0 g DF .text 000000e3 GLIBC_2.0 vwarnx
+000753b0 g DF .text 000000d3 GLIBC_2.1.1 __mempcpy_small
+0010d620 g DF .text 00000184 (GLIBC_2.1) fgetpos64
+0005abb0 g DF .text 000001af GLIBC_2.2 fgetpos64
+0006f840 w DF .text 00000167 GLIBC_2.0 index
+001464e4 g DO .bss 00000004 GLIBC_2.0 rexecoptions
+000df1d0 g DF .text 00000043 GLIBC_2.0 pthread_attr_getdetachstate
+0005daf0 g DF .text 0000019f GLIBC_2.2 _IO_wfile_xsputn
+00092f20 g DF .text 00000441 GLIBC_2.0 execvp
+000cfb50 g DF .text 0000003a GLIBC_2.2 mincore
+00068850 w DF .text 0000018a GLIBC_2.0 mallinfo
+000689e0 w DF .text 00000077 GLIBC_2.0 malloc_trim
+000665f0 g DF .text 00000042 GLIBC_2.0 _IO_str_underflow
+000f2710 g DF .text 00000023 GLIBC_2.3 freeifaddrs
+000fb8b0 g DF .text 00000126 GLIBC_2.0 svcudp_enablecache
+000230e0 g DF .text 0000014b GLIBC_2.1 __duplocale
+00081a30 g DF .text 00000073 GLIBC_2.1 __wcsncasecmp_l
+000c4c10 g DF .text 000001c1 GLIBC_2.4 linkat
+00065d90 g DF .text 00000129 GLIBC_2.0 _IO_default_pbackfail
+000f4690 g DF .text 00000024 GLIBC_2.5 inet6_rth_space
+0005c7e0 g DF .text 00000058 GLIBC_2.2 _IO_free_wbackup_area
+000df6d0 g DF .text 0000004a GLIBC_2.3.2 pthread_cond_timedwait
+001112d0 g DF .text 0000004a (GLIBC_2.0) pthread_cond_timedwait
+000914f0 g DF .text 000001ec GLIBC_2.1.2 getpwnam_r
+0010d7d0 g DF .text 00000110 (GLIBC_2.0) _IO_fsetpos
+0010f070 g DF .text 0000005f (GLIBC_2.0) getpwnam_r
+00058e40 g DF .text 0000013e GLIBC_2.2 _IO_fsetpos
+0014332c w DO .data 00000004 GLIBC_2.0 __realloc_hook
+0005f8b0 g DF .text 0000026b GLIBC_2.0 freopen
+000e6520 w DF .text 00000217 GLIBC_2.1 backtrace_symbols_fd
+000712d0 w DF .text 0000007a GLIBC_2.0 strncasecmp
+000c2200 g DF .text 00000096 GLIBC_2.0 __xmknod
+0005dc90 g DF .text 000006b2 GLIBC_2.2 _IO_wfile_seekoff
+000e7a80 g DF .text 00000032 GLIBC_2.4 __recv_chk
+000cc390 g DF .text 0000008b GLIBC_2.0 ptrace
+000f4710 g DF .text 00000106 GLIBC_2.5 inet6_rth_reverse
+000cdd30 g DF .text 0000001a GLIBC_2.0 remque
+000f2b40 g DF .text 00000c87 GLIBC_2.3 getifaddrs
+000d70c0 w DF .text 0000005d GLIBC_2.3 towlower_l
+0005bc50 g DF .text 00000038 GLIBC_2.2 putwc_unlocked
+00045bc0 g DF .text 0000002b GLIBC_2.1 printf_size_info
+00000020 g D .tbss 00000004 GLIBC_PRIVATE h_errno
+00029680 w DF .text 0000000d GLIBC_2.0 scalbn
+0007dce0 w DF .text 00000039 GLIBC_2.1 __wcstold_l
+000f22d0 g DF .text 000000a4 GLIBC_2.1 if_nametoindex
+000298e0 w DF .text 0000000d GLIBC_2.1 scalblnf
+00077ce0 g DF .text 00000045 GLIBC_2.0 __wcstoll_internal
+00146480 g DO .bss 00000030 GLIBC_2.2 _res_hconf
+000c4000 w DF .text 0000006c GLIBC_2.0 creat
+000c2020 g DF .text 0000008e GLIBC_2.0 __fxstat
+0010e860 g DF .text 000000d8 (GLIBC_2.0) _IO_file_close_it
+00064400 g DF .text 0000019d GLIBC_2.1 _IO_file_close_it
+00029c70 w DF .text 0000000d GLIBC_2.1 scalblnl
+000631f0 g DF .text 00000016 GLIBC_2.0 _IO_file_close
+000700a0 g DF .text 000000aa GLIBC_2.0 strncat
+001002d0 g DF .text 00000081 GLIBC_2.1 key_decryptsession_pk
+0014316c g DO .data 00000004 GLIBC_2.0 __check_rhosts_file
+000c9630 g DF .text 00000040 GLIBC_2.3 sendfile64
+000d3d80 w DF .text 0000006c GLIBC_2.0 sendmsg
+000e6520 g DF .text 00000217 GLIBC_2.1 __backtrace_symbols_fd
+00039cf0 g DF .text 00000029 GLIBC_2.1 wcstoimax
+0002e580 g DF .text 00000046 GLIBC_2.0 strtoull
+00071970 g DF .text 00000090 GLIBC_2.1.1 __strsep_g
+0005cb30 g DF .text 000000e7 GLIBC_2.2 __wunderflow
+00016bb0 g DF .text 00000133 (GLIBC_2.0) __udivdi3
+00057d70 g DF .text 000001e8 GLIBC_2.1 _IO_fclose
+0010cd10 g DF .text 00000183 (GLIBC_2.0) _IO_fclose
+00061380 g DF .text 00000013 GLIBC_2.2 __fwritable
+000e7c30 g DF .text 00000038 GLIBC_2.4 __realpath_chk
+0002afc0 g DF .text 000000a2 GLIBC_2.0 __sysv_signal
+000cab90 w DF .text 000000cb GLIBC_2.0 ulimit
+000609d0 w DF .text 00000034 GLIBC_2.0 obstack_printf
+0005e870 g DF .text 00000475 GLIBC_2.2 _IO_wfile_underflow
+0005b050 g DF .text 0000006d GLIBC_2.2 fputwc_unlocked
+000c1c40 g DF .text 00000039 GLIBC_2.2 posix_spawnattr_getsigmask
+000e5bb0 g DF .text 0000008c GLIBC_2.0 __nss_passwd_lookup
+0002dd60 g DF .text 00000034 GLIBC_2.0 drand48
+000fc380 g DF .text 0000001f GLIBC_2.0 xdr_free
+0005f750 g DF .text 00000034 GLIBC_2.0 fileno
+0010d3e0 g DF .text 00000023 (GLIBC_2.0) pclose
+000710c0 g DF .text 0000002e GLIBC_2.0 __bzero
+000ea4e0 g DF .text 000000a8 GLIBC_2.0 sethostent
+00023e90 g DF .text 00000017 GLIBC_2.1 __isxdigit_l
+00060040 g DF .text 00000023 GLIBC_2.1 pclose
+000f46e0 g DF .text 00000026 GLIBC_2.5 inet6_rth_getaddr
+000b5970 w DF .text 00000039 GLIBC_2.0 re_search
+00093740 g DF .text 00000038 GLIBC_2.0 __setpgid
+000cb870 w DF .text 00000098 GLIBC_2.0 gethostname
+00024470 g DF .text 00000022 GLIBC_2.0 __dgettext
+000df0c0 g DF .text 00000046 GLIBC_2.0 pthread_equal
+000d8400 w DF .text 0000008f GLIBC_2.0 sgetspent_r
+000c2bf0 w DF .text 000000a3 GLIBC_2.1 fstatvfs64
+000cc2b0 g DF .text 0000003e GLIBC_2.0 usleep
+000df800 g DF .text 00000043 GLIBC_2.0 pthread_mutex_init
+000d2cd0 g DF .text 00000090 GLIBC_2.0 __clone
+000cd7c0 w DF .text 0000003f GLIBC_2.0 utimes
+00143408 g DO .data 00000004 (GLIBC_2.2) __ctype32_toupper
+0002b690 g DF .text 000001fd GLIBC_2.1 sigset
+000d4210 g DF .text 0000003e GLIBC_2.0 __cmsg_nxthdr
+0006f580 g DF .text 00000021 GLIBC_2.0 _obstack_memory_used
+000d2180 g DF .text 00000086 GLIBC_2.0 ustat
+000c43b0 g DF .text 00000053 GLIBC_2.1 chown
+00110960 g DF .text 00000031 (GLIBC_2.0) chown
+0006cff0 g DF .text 00000487 GLIBC_2.0 __libc_realloc
+000d3810 g DF .text 0000004c GLIBC_2.5 splice
+000c1590 g DF .text 00000050 GLIBC_2.2 posix_spawn
+000d6b50 g DF .text 00000090 GLIBC_2.1 __iswblank_l
+0005c5d0 g DF .text 0000004b GLIBC_2.2 _IO_sungetwc
+00121960 g DO .rodata 00000024 GLIBC_PRIVATE _itoa_lower_digits
+000c4120 w DF .text 00000130 GLIBC_2.0 getcwd
+000fccb0 g DF .text 0000004f GLIBC_2.0 xdr_vector
+000593f0 w DF .text 00000278 GLIBC_2.0 __getdelim
+00039eb0 w DF .text 000000a4 GLIBC_2.1 swapcontext
+000f9d10 g DF .text 00000030 GLIBC_2.2.3 __rpc_thread_svc_fdset
+00143340 g DO .data 00000004 GLIBC_2.0 __progname_full
+000d2950 g DF .text 00000040 GLIBC_2.3 lgetxattr
+001038c0 g DF .text 00000068 GLIBC_2.1 xdr_uint8_t
+00029800 g DF .text 00000011 GLIBC_2.0 __finitef
+00146358 g DO .bss 00000004 GLIBC_2.0 error_one_per_line
+00080fb0 w DF .text 00000955 GLIBC_2.3 wcsxfrm_l
+000fe9e0 g DF .text 0000022e GLIBC_2.1 authdes_pk_create
+000f2230 g DF .text 0000009b GLIBC_2.1 if_indextoname
+000d3960 g DF .text 00000040 GLIBC_2.5 vmsplice
+0005c370 g DF .text 00000024 GLIBC_2.2 swscanf
+000f9de0 g DF .text 00000042 GLIBC_2.0 svcerr_decode
+00059270 w DF .text 0000015f GLIBC_2.0 fwrite
+00109010 g DF .text 0000002a GLIBC_2.1 updwtmpx
+00016130 w DF .text 00000016 GLIBC_2.1 gnu_get_libc_version
+00029ab0 g DF .text 0000000e GLIBC_2.0 __finitel
+000ffcc0 g DF .text 00000089 GLIBC_2.1 des_setparity
+00029820 w DF .text 0000001e GLIBC_2.0 copysignf
+000e6740 g DF .text 00000005 GLIBC_2.2 __cyg_profile_func_enter
+00058d00 w DF .text 00000118 GLIBC_2.0 fread
+000f4000 g DF .text 00000184 GLIBC_2.3.4 getsourcefilter
+000297e0 w DF .text 00000018 GLIBC_2.0 isnanf
+000d04e0 g DF .text 0000032a GLIBC_2.0 qfcvt_r
+0002e050 g DF .text 00000037 GLIBC_2.0 lrand48_r
+000cfe50 g DF .text 000002e1 GLIBC_2.0 fcvt_r
+000835a0 w DF .text 00000038 GLIBC_2.0 gettimeofday
+000d6a20 w DF .text 00000090 GLIBC_2.3 iswalnum_l
+00017100 g DF .text 0000003a GLIBC_2.1 iconv_close
+00083620 w DF .text 0000011c GLIBC_2.0 adjtime
+000f07b0 w DF .text 00000095 GLIBC_2.0 getnetgrent_r
+0002a360 w DF .text 00000157 GLIBC_2.0 sigaction
+0005c6d0 g DF .text 0000003d GLIBC_2.2 _IO_wmarker_delta
+00056a80 g DF .text 00000038 GLIBC_2.0 rename
+00029ac0 w DF .text 0000001e GLIBC_2.0 copysignl
+0002df10 g DF .text 00000039 GLIBC_2.0 seed48
+000cdd50 g DF .text 00000042 GLIBC_2.0 endttyent
+00029a60 w DF .text 00000046 GLIBC_2.0 isnanl
+000659f0 g DF .text 0000008d GLIBC_2.0 _IO_default_finish
+001010f0 g DF .text 00000227 GLIBC_2.1 rtime
+000cc7b0 g DF .text 000000a9 GLIBC_2.0 getfsent
+000d32f0 g DF .text 00000040 GLIBC_2.3.2 epoll_ctl
+000d6920 g DF .text 00000092 GLIBC_2.1 __iswxdigit_l
+00058b90 g DF .text 00000149 GLIBC_2.0 _IO_fputs
+00000000 g DO *ABS* 00000000 GLIBC_2.3.2 GLIBC_2.3.2
+000cfb10 g DF .text 0000003a GLIBC_2.0 madvise
+00090580 g DF .text 000002c2 GLIBC_PRIVATE _nss_files_parse_grent
+00100f00 g DF .text 00000063 GLIBC_2.1 getnetname
+00101bf0 g DF .text 00000061 GLIBC_2.1 passwd2des
+00000000 g DO *ABS* 00000000 GLIBC_2.3.3 GLIBC_2.3.3
+001095e0 g DF .text 00000033 GLIBC_2.1 _dl_mcount_wrapper
+0002ad30 g DF .text 00000024 GLIBC_2.0 __sigdelset
+00000000 g DO *ABS* 00000000 GLIBC_2.3.4 GLIBC_2.3.4
+0008e510 g DF .text 000001e4 GLIBC_2.0 scandir
+00075520 g DF .text 000000b2 GLIBC_2.1.1 __stpcpy_small
+000ead50 g DF .text 000000a8 GLIBC_2.0 setnetent
+000cc1e0 g DF .text 0000002b GLIBC_2.2 mkstemp64
+0002b190 g DF .text 00000016 GLIBC_PRIVATE __libc_current_sigrtmin_private
+000d2fa0 g DF .text 00000019 GLIBC_2.3.3 gnu_dev_minor
+000297b0 w DF .text 00000024 GLIBC_2.0 isinff
+000938a0 w DF .text 00000053 GLIBC_2.0 getresgid
+00029f60 g DF .text 00000064 GLIBC_PRIVATE __libc_siglongjmp
+000c2730 w DF .text 00000038 GLIBC_2.0 statfs
+00093520 w DF .text 0000000c GLIBC_2.0 geteuid
+000b74d0 w DF .text 00000038 GLIBC_2.0 sched_setparam
+000e6750 g DF .text 00000050 GLIBC_2.3.4 __memcpy_chk
+000ed320 g DF .text 00000153 GLIBC_2.0 ether_hostton
+000d6ab0 w DF .text 00000092 GLIBC_2.3 iswalpha_l
+000d37d0 g DF .text 00000040 GLIBC_2.0 quotactl
+0002d800 w DF .text 00000060 GLIBC_2.0 srandom
+000d6f80 g DF .text 00000092 GLIBC_2.1 __iswspace_l
+000ecb10 g DF .text 0000017d GLIBC_2.1.2 getrpcbynumber_r
+00111cf0 g DF .text 0000005f (GLIBC_2.0) getrpcbynumber_r
+00029a00 w DF .text 00000055 GLIBC_2.0 isinfl
+0002b890 g DF .text 00000023 GLIBC_2.0 atof
+000ce5b0 g DF .text 000000a7 GLIBC_2.0 getttynam
+0009f160 w DF .text 0000004b GLIBC_2.0 re_set_registers
+00028c30 g DF .text 000007d2 GLIBC_PRIVATE __open_catalog
+0002aef0 g DF .text 0000006e GLIBC_2.0 sigismember
+000df360 g DF .text 00000043 GLIBC_2.0 pthread_attr_setschedparam
+00071020 g DF .text 0000009f GLIBC_2.0 bcopy
+000602f0 g DF .text 0000003b GLIBC_2.0 setlinebuf
+000e6c50 g DF .text 000000cd GLIBC_2.4 __stpncpy_chk
+00076430 w DF .text 0000011e GLIBC_2.1 wcswcs
+0002b8c0 g DF .text 0000002b GLIBC_2.0 atoi
+000d6e50 g DF .text 00000092 GLIBC_2.1 __iswprint_l
+00075800 g DF .text 0000005e GLIBC_2.1.1 __strtok_r_1c
+000fc4b0 g DF .text 000000cb GLIBC_2.1.1 xdr_hyper
+0008f010 g DF .text 00000074 GLIBC_2.2 getdirentries64
+00085b40 g DF .text 00000034 GLIBC_2.0 stime
+00027430 w DF .text 0000011d GLIBC_2.0 textdomain
+000b7600 w DF .text 00000034 GLIBC_2.0 sched_get_priority_max
+0002b8f0 g DF .text 0000002b GLIBC_2.0 atol
+000ca830 g DF .text 00000032 GLIBC_2.0 tcflush
+000c1ca0 g DF .text 00000039 GLIBC_2.2 posix_spawnattr_getschedparam
+000f4390 g DF .text 000000b4 GLIBC_2.5 inet6_opt_find
+00077d30 g DF .text 00000046 GLIBC_2.1 wcstoull
+000edc30 g DF .text 00000155 GLIBC_2.0 ether_ntohost
+00141580 g DO .data.rel.ro 00000100 (GLIBC_2.1) sys_siglist
+00141580 g DO .data.rel.ro 00000080 (GLIBC_2.0) sys_siglist
+000cfc60 g DF .text 00000034 GLIBC_2.0 mlockall
+00141580 g DO .data.rel.ro 00000104 GLIBC_2.3.3 sys_siglist
+000cc340 g DF .text 00000044 GLIBC_2.0 stty
+000d5d00 w DF .text 000000cb GLIBC_2.0 iswxdigit
+000c7220 g DF .text 00000026 GLIBC_2.1 ftw64
+00091f70 w DF .text 00000070 GLIBC_2.0 waitpid
+000e8a10 g DF .text 00000049 GLIBC_2.4 __mbsnrtowcs_chk
+00061430 g DF .text 0000002a GLIBC_2.2 __fpending
+000c3610 w DF .text 00000065 GLIBC_2.0 close
+00108a90 g DF .text 0000006b GLIBC_2.1 unlockpt
+000fc9b0 g DF .text 00000090 GLIBC_2.0 xdr_union
+000e6100 w DF .text 00000160 GLIBC_2.1 backtrace
+0006fb30 w DF .text 00000154 GLIBC_2.1 strverscmp
+000c1c80 g DF .text 00000015 GLIBC_2.2 posix_spawnattr_getschedpolicy
+00028980 g DF .text 000000ab GLIBC_2.0 catgets
+0002d310 g DF .text 00000095 GLIBC_2.0 lldiv
+00106b50 w DF .text 0000005e GLIBC_2.0 endutent
+000df900 w DF .text 00000043 GLIBC_2.0 pthread_setcancelstate
+00056180 g DF .text 000000b8 GLIBC_2.0 tmpnam
+000e1020 g DF .text 000000cf GLIBC_2.0 inet_nsap_ntoa
+00075d80 g DF .text 00000126 GLIBC_2.6 strerror_l
+000c2ff0 w DF .text 00000070 GLIBC_2.0 open
+000d0ea0 w DF .text 00000022 GLIBC_2.0 twalk
+0002dee0 g DF .text 0000002d GLIBC_2.0 srand48
+00023ed0 w DF .text 00000011 GLIBC_2.3 toupper_l
+00102d10 g DF .text 00000012 GLIBC_2.1 svcunixfd_create
+000d2ba0 g DF .text 00000034 GLIBC_2.0 iopl
+000c6200 g DF .text 00000026 GLIBC_2.0 ftw
+00077d80 g DF .text 00000045 GLIBC_2.0 __wcstoull_internal
+000d7510 g DF .text 00000141 GLIBC_2.0 sgetspent
+0006fe20 w DF .text 00000121 GLIBC_2.0 strerror_r
+00065860 g DF .text 00000016 GLIBC_2.2 _IO_iter_begin
+000df720 g DF .text 0000004a GLIBC_2.0 pthread_getschedparam
+000258d0 w DF .text 00000040 GLIBC_2.2 dngettext
+000f9cd0 g DF .text 00000039 GLIBC_2.2.3 __rpc_thread_createerr
+000cc0b0 g DF .text 00000034 GLIBC_2.0 vhangup
+00082ab0 g DF .text 00000035 GLIBC_2.0 localtime
+00100650 g DF .text 0000008f GLIBC_2.1 key_secretkey_is_set
+00082a20 g DF .text 0000000d GLIBC_2.0 difftime
+000cc0f0 w DF .text 00000038 GLIBC_2.0 swapon
+00108f30 g DF .text 00000017 GLIBC_2.1 endutxent
+000d2d90 w DF .text 000000a5 GLIBC_2.1 lseek64
+000e8a60 g DF .text 00000049 GLIBC_2.4 __wcsnrtombs_chk
+00061c70 g DF .text 00000010 GLIBC_2.0 ferror_unlocked
+000d2e40 w DF .text 00000034 GLIBC_2.0 umount
+00092a84 w DF .text 00000013 GLIBC_2.1.1 _Exit
+000d31f0 g DF .text 00000038 GLIBC_2.1 capset
+0006f840 g DF .text 00000167 GLIBC_2.0 strchr
+000d7220 w DF .text 00000073 GLIBC_2.3 wctrans_l
+000d2800 g DF .text 0000003a GLIBC_2.3 flistxattr
+000f5da0 g DF .text 000001fd GLIBC_2.0 clnt_spcreateerror
+0006f610 g DF .text 00000078 GLIBC_2.0 obstack_free
+000df450 g DF .text 00000043 GLIBC_2.0 pthread_attr_getscope
+000f1280 g DF .text 000000a2 GLIBC_2.0 getaliasent
+00141360 g DO .data.rel.ro 000001f8 (GLIBC_2.3) _sys_errlist
+00141360 g DO .data.rel.ro 00000210 GLIBC_2.4 _sys_errlist
+00141360 g DO .data.rel.ro 000001f4 (GLIBC_2.1) _sys_errlist
+00141360 g DO .data.rel.ro 000001ec (GLIBC_2.0) _sys_errlist
+0002b620 g DF .text 00000070 GLIBC_2.1 sigignore
+0002af60 w DF .text 00000022 GLIBC_2.0 sigreturn
+000ee830 g DF .text 000001c7 GLIBC_2.2 rresvport_af
+000d4ef0 g DF .text 000001a0 GLIBC_2.0 __monstartup
+000d5dd0 w DF .text 000000a4 GLIBC_2.0 iswdigit
+000fa3a0 g DF .text 00000037 GLIBC_2.0 svcerr_weakauth
+00060ad0 w DF .text 00000017 GLIBC_2.0 fcloseall
+000e81a0 g DF .text 0000010b GLIBC_2.4 __wprintf_chk
+000d6180 w DF .text 000000c9 GLIBC_2.0 iswcntrl
+000cce00 w DF .text 0000002c GLIBC_2.0 endmntent
+00056f40 w DF .text 0000002f GLIBC_2.0 funlockfile
+001447c4 g DO .bss 00000004 GLIBC_2.0 __timezone
+00046500 g DF .text 00000024 GLIBC_2.0 fprintf
+000d3b00 g DF .text 00000037 GLIBC_2.0 getsockname
+000c1ec0 g DF .text 00000038 GLIBC_2.0 utime
+0010eb40 g DF .text 000001e4 (GLIBC_2.1) scandir64
+0008ecb0 g DF .text 000001e4 GLIBC_2.2 scandir64
+000d0a50 g DF .text 00000045 GLIBC_2.0 hsearch
+000dd100 w DF .text 000000dd GLIBC_2.1 argp_error
+00146234 g DO .bss 00000004 GLIBC_2.0 _nl_domain_bindings
+00075760 g DF .text 00000041 GLIBC_2.1.1 __strpbrk_c2
+0002d1f0 g DF .text 00000011 GLIBC_2.0 abs
+000d3df0 w DF .text 0000006c GLIBC_2.0 sendto
+000757b0 g DF .text 0000004c GLIBC_2.1.1 __strpbrk_c3
+000cc9e0 w DF .text 0000041f GLIBC_2.0 addmntent
+000d6ef0 w DF .text 00000090 GLIBC_2.3 iswpunct_l
+00037150 w DF .text 00000029 GLIBC_2.1 __strtold_l
+001082d0 w DF .text 0000010f GLIBC_2.0 updwtmp
+000e46e0 g DF .text 00000372 GLIBC_2.0 __nss_database_lookup
+0005c3a0 g DF .text 00000033 GLIBC_2.2 _IO_least_wmarker
+00070300 w DF .text 000001b9 GLIBC_2.0 rindex
+00092a30 w DF .text 00000051 GLIBC_2.0 vfork
+0010ed90 g DF .text 000000e5 (GLIBC_2.0) getgrent_r
+000fa1e0 g DF .text 000000fe GLIBC_2.0 xprt_register
+000393e0 g DF .text 000000f0 GLIBC_2.1 addseverity
+0008fef0 g DF .text 000000e2 GLIBC_2.1.2 getgrent_r
+000e7250 g DF .text 000000bc GLIBC_2.3.4 __vfprintf_chk
+00083540 g DF .text 0000003c GLIBC_2.0 mktime
+00100550 g DF .text 00000100 GLIBC_2.1 key_gendes
+0002d3b0 g DF .text 000000c5 GLIBC_2.0 mblen
+000d16e0 w DF .text 0000005c GLIBC_2.1 tdestroy
+000d2c50 w DF .text 00000075 GLIBC_2.0 sysctl
+000f5a20 g DF .text 000002e2 GLIBC_2.0 clnt_create
+0008e700 g DF .text 00000024 GLIBC_2.0 alphasort
+001447c4 w DO .bss 00000004 GLIBC_2.0 timezone
+000f90f0 g DF .text 000000ec GLIBC_2.0 xdr_rmtcall_args
+00070bd0 g DF .text 00000104 GLIBC_2.0 __strtok_r
+00068ec0 w DF .text 0000014b GLIBC_2.0 mallopt
+000fde60 g DF .text 00000035 GLIBC_2.0 xdrstdio_create
+00039c90 g DF .text 00000029 GLIBC_2.1 strtoimax
+00056950 w DF .text 00000039 GLIBC_2.0 getline
+00144100 w DO .bss 00000004 GLIBC_2.0 __malloc_initialize_hook
+000d6c70 g DF .text 00000093 GLIBC_2.1 __iswdigit_l
+00071170 g DF .text 00000041 GLIBC_2.0 __stpcpy
+00016f70 g DF .text 00000187 GLIBC_2.1 iconv
+000f8080 g DF .text 000000f5 GLIBC_2.0 get_myaddress
+000ec990 g DF .text 0000017d GLIBC_2.1.2 getrpcbyname_r
+00111c90 g DF .text 0000005f (GLIBC_2.0) getrpcbyname_r
+00143344 w DO .data 00000004 GLIBC_2.0 program_invocation_short_name
+000d3170 g DF .text 00000038 GLIBC_2.0 bdflush
+0002d230 w DF .text 00000031 GLIBC_2.1.1 imaxabs
+00016540 g DF .text 0000002a (GLIBC_2.0) __floatdidf
+000a2f60 w DF .text 00000093 GLIBC_2.0 re_compile_fastmap
+000d29d0 g DF .text 00000038 GLIBC_2.3 lremovexattr
+0010cb50 g DF .text 000001b6 (GLIBC_2.0) fdopen
+00057fa0 g DF .text 000002da GLIBC_2.1 fdopen
+000668e0 g DF .text 000001b9 GLIBC_2.0 _IO_str_seekoff
+000ce900 g DF .text 0000001d GLIBC_2.0 setusershell
+00142740 g DO .data.rel.ro 00000054 GLIBC_2.2 _IO_wfile_jumps
+0008ea50 g DF .text 000000b0 GLIBC_2.2 readdir64
+0010e940 g DF .text 000000af (GLIBC_2.1) readdir64
+000f9750 g DF .text 00000406 GLIBC_2.0 xdr_callmsg
+000f9e80 g DF .text 00000036 GLIBC_2.0 svcerr_auth
+0002c3e0 g DF .text 0000013e GLIBC_2.0 qsort
+00037d10 w DF .text 0000002b GLIBC_2.0 canonicalize_file_name
+00093700 g DF .text 00000034 GLIBC_2.0 __getpgid
+00016cf0 g DF .text 0000027d GLIBC_2.1 iconv_open
+00064de0 g DF .text 0000002a GLIBC_2.0 _IO_sgetn
+0002fc20 g DF .text 0000003e GLIBC_2.0 __strtod_internal
+0005adc0 g DF .text 0000013c GLIBC_2.2 _IO_fsetpos64
+0010d900 g DF .text 0000010e (GLIBC_2.1) _IO_fsetpos64
+000391c0 w DF .text 00000042 GLIBC_2.3 strfmon_l
+0002de60 g DF .text 00000034 GLIBC_2.0 mrand48
+000c1520 g DF .text 00000013 GLIBC_2.2 posix_spawnattr_getflags
+000d39a0 w DF .text 0000006c GLIBC_2.0 accept
+0002d590 g DF .text 00000046 GLIBC_2.0 wcstombs
+0006ce00 g DF .text 000001e5 GLIBC_2.0 __libc_free
+000e9b50 g DF .text 000001ab GLIBC_2.0 gethostbyname2
+000fee80 g DF .text 00000197 GLIBC_2.1 cbc_crypt
+000e5a00 g DF .text 0000008c GLIBC_2.0 __nss_hosts_lookup
+0002fb70 w DF .text 00000030 GLIBC_2.1 __strtoull_l
+00100a20 g DF .text 0000003a GLIBC_2.1 xdr_netnamestr
+00066aa0 g DF .text 00000189 GLIBC_2.0 _IO_str_overflow
+00144108 w DO .bss 00000004 GLIBC_2.0 __after_morecore_hook
+000de250 w DF .text 00000d40 GLIBC_2.1 argp_parse
+0005a520 g DF .text 00000141 GLIBC_2.0 _IO_seekpos
+00072bf0 g DF .text 000000a2 GLIBC_2.0 envz_get
+00071a00 g DF .text 00000151 GLIBC_2.1 __strcasestr
+00093840 w DF .text 00000053 GLIBC_2.0 getresuid
+000c1ce0 g DF .text 0000003a GLIBC_2.2 posix_spawnattr_setsigmask
+000dfdf0 g DF .text 00000096 GLIBC_2.0 hstrerror
+000cf060 g DF .text 0000059d GLIBC_2.4 __vsyslog_chk
+000d34e0 g DF .text 0000003a GLIBC_2.4 inotify_add_watch
+0010cec0 g DF .text 000001a5 (GLIBC_2.0) _IO_proc_close
+000ca5e0 w DF .text 000000d6 GLIBC_2.0 tcgetattr
+00023cb0 g DF .text 0000000b GLIBC_2.0 toascii
+00059b70 g DF .text 000001a5 GLIBC_2.1 _IO_proc_close
+000c27b0 w DF .text 0000012b GLIBC_2.1 statfs64
+000f5040 g DF .text 00000081 GLIBC_2.0 authnone_create
+00075000 g DF .text 0000003f GLIBC_2.1.1 __strcmp_gg
+00023e70 w DF .text 00000017 GLIBC_2.3 isupper_l
+000cbfd0 g DF .text 000000a5 GLIBC_2.0 sethostid
+00108f80 g DF .text 00000023 GLIBC_2.1 getutxline
+000560d0 g DF .text 000000a2 GLIBC_2.1 tmpfile64
+00092400 w DF .text 0000026a GLIBC_2.0 sleep
+00091e80 w DF .text 00000034 GLIBC_2.0 times
+00063840 g DF .text 000000dd GLIBC_2.1 _IO_file_sync
+0010e5f0 g DF .text 00000097 (GLIBC_2.0) _IO_file_sync
+0007fef0 g DF .text 0000003e GLIBC_2.0 wcsxfrm
+000751b0 g DF .text 00000046 GLIBC_2.1.1 __strcspn_g
+00073ef0 w DF .text 00000d51 GLIBC_2.3 strxfrm_l
+0002b1d0 g DF .text 0000004f GLIBC_2.1 __libc_allocate_rtsig
+000e89c0 g DF .text 00000049 GLIBC_2.4 __wcrtomb_chk
+00023f60 g DF .text 0000003c GLIBC_2.3 __ctype_toupper_loc
+000d2be0 g DF .text 00000038 GLIBC_2.3.4 vm86
+000d3070 g DF .text 00000034 (GLIBC_2.0) vm86
+000cdd00 g DF .text 0000002f GLIBC_2.0 insque
+000f6500 g DF .text 00000126 GLIBC_2.0 clntraw_create
+000d33b0 g DF .text 00000094 GLIBC_2.6 epoll_pwait
+000cb800 g DF .text 00000026 GLIBC_2.0 __getpagesize
+000e6a20 g DF .text 00000078 GLIBC_2.3.4 __strcpy_chk
+0006ae90 w DF .text 000000fc GLIBC_2.0 valloc
+00023f20 g DF .text 0000003c GLIBC_2.3 __ctype_tolower_loc
+00108f10 g DF .text 00000017 GLIBC_2.1 getutxent
+00065900 g DF .text 00000045 GLIBC_2.2 _IO_list_unlock
+00143334 g DO .data 00000004 GLIBC_2.0 obstack_alloc_failed_handler
+0005b6f0 g DF .text 0000007c GLIBC_2.2 fputws_unlocked
+000fcd00 g DF .text 0000015c GLIBC_2.0 xdr_array
+000d2990 g DF .text 0000003a GLIBC_2.3 llistxattr
+0002d070 g DF .text 00000175 GLIBC_2.1.3 __cxa_finalize
+0002b190 g DF .text 00000016 GLIBC_2.1 __libc_current_sigrtmin
+000d2e80 w DF .text 00000038 GLIBC_2.1 umount2
+000cf790 g DF .text 0000004b GLIBC_2.0 syscall
+0002a5a0 g DF .text 00000041 GLIBC_2.0 sigpending
+0002bbf0 g DF .text 0000006c GLIBC_2.0 bsearch
+00075290 g DF .text 00000032 GLIBC_2.1.1 __strpbrk_cg
+000b78d0 g DF .text 00000044 GLIBC_2.0 freeaddrinfo
+000713a0 w DF .text 00000069 GLIBC_2.3 strncasecmp_l
+000236a0 g DF .text 00000181 GLIBC_2.0 __assert_perror_fail
+000d2340 w DF .text 000001a0 GLIBC_2.0 get_nprocs
+00111930 g DF .text 0000005f (GLIBC_2.0) getprotobyname_r
+00075cd0 g DF .text 000000b0 GLIBC_2.3.4 __xpg_strerror_r
+0005a7d0 w DF .text 00000189 GLIBC_2.0 setvbuf
+000eb7d0 g DF .text 0000017d GLIBC_2.1.2 getprotobyname_r
+00080fb0 g DF .text 00000955 GLIBC_2.1 __wcsxfrm_l
+0005ab10 w DF .text 0000009b GLIBC_2.0 vsscanf
+00111370 g DF .text 0000006c (GLIBC_2.0) gethostbyaddr_r
+000e9670 g DF .text 0000030c GLIBC_2.1.2 gethostbyaddr_r
+00016890 g DF .text 00000179 (GLIBC_2.0) __divdi3
+00090ad0 g DF .text 0000018e GLIBC_2.0 fgetpwent
+000f1170 g DF .text 000000a7 GLIBC_2.0 setaliasent
+0002a640 g DF .text 000000a7 GLIBC_2.1.3 __sigsuspend
+000f9530 g DF .text 0000007f GLIBC_2.0 xdr_rejected_reply
+000d31b0 g DF .text 00000038 GLIBC_2.1 capget
+0010ea10 g DF .text 00000110 (GLIBC_2.1) readdir64_r
+0008eb20 g DF .text 00000110 GLIBC_2.2 readdir64_r
+000b7550 g DF .text 0000003a GLIBC_2.0 __sched_setscheduler
+000fe250 g DF .text 000000fc GLIBC_2.0 getpublickey
+000f9c90 g DF .text 00000039 GLIBC_2.2.3 __rpc_thread_svc_pollfd
+000c7540 g DF .text 00000551 GLIBC_2.0 fts_open
+000fa030 g DF .text 0000007e GLIBC_2.0 svc_unregister
+00106ae0 w DF .text 00000062 GLIBC_2.0 pututline
+00093810 w DF .text 0000002c GLIBC_2.0 setsid
+00000004 g D .tdata 00000004 GLIBC_PRIVATE __resp
+00106970 w DF .text 0000005e GLIBC_2.0 getutent
+000c14a0 g DF .text 00000037 GLIBC_2.2 posix_spawnattr_getsigdefault
+000d6db0 w DF .text 00000092 GLIBC_2.3 iswgraph_l
+00045bf0 g DF .text 00000902 GLIBC_2.1 printf_size
+000df110 g DF .text 0000003c GLIBC_2.0 pthread_attr_destroy
+0007feb0 w DF .text 00000037 GLIBC_2.0 wcscoll
+00077bf0 g DF .text 00000045 GLIBC_2.0 __wcstoul_internal
+0010a5d0 g DF .text 00000031 GLIBC_2.0 __deregister_frame
+0002a360 w DF .text 00000157 GLIBC_2.0 __sigaction
+00103630 g DF .text 000000bb GLIBC_2.1.1 xdr_uint64_t
+00103130 g DF .text 00000274 GLIBC_2.1 svcunix_create
+0002e090 w DF .text 00000058 GLIBC_2.0 nrand48_r
+000ca310 g DF .text 00000076 GLIBC_2.0 cfsetspeed
+000d8030 g DF .text 000003cc GLIBC_PRIVATE _nss_files_parse_spent
+00112c00 g DF __libc_freeres_fn 0000007b GLIBC_2.1 __libc_freeres
+000c3c00 w DF .text 000000b7 GLIBC_2.0 fcntl
+000e8010 g DF .text 0000003b GLIBC_2.4 __wcpncpy_chk
+000d6730 w DF .text 0000009e GLIBC_2.0 wctype
+00076340 g DF .text 0000004f GLIBC_2.0 wcsspn
+00110e20 g DF .text 0000008e (GLIBC_2.1) getrlimit64
+000caa50 g DF .text 0000008e GLIBC_2.2 getrlimit64
+000f37f0 g DF .text 00000039 GLIBC_2.3.3 inet6_option_init
+000d71b0 g DF .text 0000006e GLIBC_2.1 __iswctype_l
+000cfd20 g DF .text 00000055 GLIBC_2.0 ecvt
+000e7d90 g DF .text 0000002e GLIBC_2.4 __wmemmove_chk
+000e6d20 g DF .text 00000032 GLIBC_2.3.4 __sprintf_chk
+000eea00 g DF .text 0000001b GLIBC_2.0 rresvport
+000f5860 g DF .text 000001b4 GLIBC_2.0 bindresvport
+000ca240 g DF .text 00000051 GLIBC_2.0 cfsetospeed
+000465f0 g DF .text 00000034 GLIBC_2.1 __asprintf
+00071350 g DF .text 0000004f GLIBC_2.1 __strcasecmp_l
+0005f250 g DF .text 000000f7 GLIBC_2.2 fwide
+0010eea0 g DF .text 0000005f (GLIBC_2.0) getgrgid_r
+000901a0 g DF .text 000001ec GLIBC_2.1.2 getgrgid_r
+000df5f0 g DF .text 00000043 GLIBC_2.3.2 pthread_cond_init
+001111f0 g DF .text 00000043 (GLIBC_2.0) pthread_cond_init
+000937b0 g DF .text 0000001c GLIBC_2.0 setpgrp
+00075fc0 g DF .text 0000005b GLIBC_2.0 wcsdup
+000ca220 g DF .text 00000018 GLIBC_2.0 cfgetispeed
+0002b920 g DF .text 0000002b GLIBC_2.0 atoll
+0002a060 w DF .text 000000cf GLIBC_2.0 bsd_signal
+00108b00 w DF .text 0000039c GLIBC_2.1 ptsname_r
+0002ea30 w DF .text 00000030 GLIBC_2.1 __strtol_l
+000d2880 g DF .text 00000046 GLIBC_2.3 fsetxattr
+000e94c0 g DF .text 0000001d GLIBC_2.0 __h_errno_location
+000fd360 g DF .text 00000162 GLIBC_2.0 xdrrec_create
+0010dde0 g DF .text 000003de (GLIBC_2.0) _IO_file_seekoff
+00056ed0 g DF .text 00000069 GLIBC_2.0 _IO_ftrylockfile
+000632e0 g DF .text 0000055b GLIBC_2.1 _IO_file_seekoff
+000c3610 w DF .text 00000065 GLIBC_2.0 __close
+00065890 g DF .text 0000000b GLIBC_2.2 _IO_iter_next
+000ccec0 w DF .text 000008d5 GLIBC_2.0 getmntent_r
+000750d0 g DF .text 0000001b GLIBC_2.1.1 __strchrnul_c
+0002d210 g DF .text 00000011 GLIBC_2.0 labs
+001430c8 g DO .data 00000004 GLIBC_2.0 obstack_exit_failure
+000c4bd0 w DF .text 00000038 GLIBC_2.0 link
+00088f70 g DF .text 0000215c GLIBC_2.3 __strftime_l
+001008e0 g DF .text 00000068 GLIBC_2.0 xdr_cryptkeyres
+000cd990 g DF .text 00000167 GLIBC_2.4 futimesat
+0005cc20 g DF .text 000000f1 GLIBC_2.2 _IO_wdefault_xsgetn
+000f0910 g DF .text 00000399 GLIBC_2.0 innetgr
+001435f8 g DO .data 00000004 GLIBC_2.0 _IO_list_all
+000c33c0 w DF .text 00000089 GLIBC_2.4 openat
+0005c1c0 w DF .text 000000f7 GLIBC_2.2 vswprintf
+000d6be0 g DF .text 00000090 GLIBC_2.1 __iswcntrl_l
+000604b0 w DF .text 000000dd GLIBC_2.0 vdprintf
+000e7a30 g DF .text 00000049 GLIBC_2.4 __pread64_chk
+000750f0 g DF .text 0000001d GLIBC_2.1.1 __strchrnul_g
+000f7430 g DF .text 00000046 GLIBC_2.0 clntudp_create
+000eb680 g DF .text 0000012d GLIBC_2.0 getprotobyname
+0010a610 g DF .text 000000ea GCC_3.0 __deregister_frame_info_bases
+000596e0 g DF .text 000001a4 GLIBC_2.1 _IO_getline_info
+00023eb0 w DF .text 00000011 GLIBC_2.3 tolower_l
+00061460 g DF .text 00000038 GLIBC_2.2 __fsetlocking
+00088e80 w DF .text 00000044 GLIBC_2.3.2 strptime_l
+00072130 w DF .text 000000d8 GLIBC_2.0 argz_create_sep
+001433f8 g DO .data 00000004 (GLIBC_2.0) __ctype32_b
+000c1f90 g DF .text 0000008e GLIBC_2.0 __xstat
+000800b0 w DF .text 00000ef3 GLIBC_2.3 wcscoll_l
+000e6100 g DF .text 00000160 GLIBC_2.1 __backtrace
+000d30b0 g DF .text 00000038 (GLIBC_2.0) getrlimit
+000ca9d0 g DF .text 0000003f GLIBC_2.2 getrlimit
+0002a860 w DF .text 00000063 GLIBC_2.0 sigsetmask
+00100470 g DF .text 00000073 GLIBC_2.1 key_encryptsession
+00023a20 g DF .text 00000048 GLIBC_2.0 isdigit
+00055cc0 g DF .text 00000041 GLIBC_2.0 scanf
+000d28d0 g DF .text 00000040 GLIBC_2.3 getxattr
+000c2d30 g DF .text 00000022 GLIBC_2.3.2 lchmod
+000239d0 g DF .text 00000046 GLIBC_2.0 iscntrl
+000d43c0 g DF .text 000000c5 GLIBC_PRIVATE __libc_msgrcv
+000cb830 w DF .text 00000039 GLIBC_2.0 getdtablesize
+000d35d0 w DF .text 00000046 GLIBC_2.0 mount
+0012d500 g DO .rodata 00000004 GLIBC_2.4 sys_nerr
+0012d50c g DO .rodata 00000004 (GLIBC_2.3) sys_nerr
+0012d508 g DO .rodata 00000004 (GLIBC_2.1) sys_nerr
+0012d504 g DO .rodata 00000004 (GLIBC_2.0) sys_nerr
+00023ed0 g DF .text 00000011 GLIBC_2.1 __toupper_l
+0002d9f0 w DF .text 000000b7 GLIBC_2.0 random_r
+000d64c0 w DF .text 000000c9 GLIBC_2.0 iswpunct
+000d1c30 g DF .text 00000026 GLIBC_2.0 errx
+00071350 w DF .text 0000004f GLIBC_2.3 strcasecmp_l
+00076550 g DF .text 00000073 GLIBC_2.0 wmemchr
+00091e40 w DF .text 00000034 GLIBC_2.0 uname
+00070ee0 g DF .text 0000008f GLIBC_2.0 memmove
+00100270 g DF .text 0000005a GLIBC_2.1 key_setnet
+00063150 g DF .text 00000097 GLIBC_2.1 _IO_file_write
+0010dd70 g DF .text 0000006d (GLIBC_2.0) _IO_file_write
+00146514 g DO .bss 00000004 GLIBC_2.2 svc_max_pollfd
+00077e10 w DF .text 0000003f GLIBC_2.0 wcstod
+00146238 g DO .bss 00000004 GLIBC_2.0 _nl_msg_cat_cntr
+000e7500 g DF .text 00000046 GLIBC_2.3.4 __chk_fail
+000f9fa0 g DF .text 00000082 GLIBC_2.0 svc_getreqset
+000d5c60 w DF .text 00000013 GLIBC_2.0 mcount
+0006df50 g DF .text 00000099 GLIBC_2.0 mprobe
+000c15e0 g DF .text 00000050 GLIBC_2.2 posix_spawnp
+00077f10 w DF .text 0000003f GLIBC_2.0 wcstof
+0010e690 g DF .text 00000153 (GLIBC_2.0) _IO_file_overflow
+000e8b00 g DF .text 00000042 GLIBC_2.4 __wcsrtombs_chk
+000e6260 w DF .text 000002bc GLIBC_2.1 backtrace_symbols
+00063920 g DF .text 000001ef GLIBC_2.1 _IO_file_overflow
+00065950 g DF .text 0000002e GLIBC_2.2 _IO_list_resetlock
+000d3030 g DF .text 0000003a GLIBC_PRIVATE __modify_ldt
+000d4ea0 g DF .text 00000044 GLIBC_2.0 _mcleanup
+000d7220 g DF .text 00000073 GLIBC_2.2 __wctrans_l
+00023e90 w DF .text 00000017 GLIBC_2.3 isxdigit_l
+0002b2f0 w DF .text 00000061 GLIBC_2.1 sigtimedwait
+00059270 g DF .text 0000015f GLIBC_2.0 _IO_fwrite
+000effc0 g DF .text 00000426 GLIBC_2.0 ruserpass
+00076390 g DF .text 0000009b GLIBC_2.0 wcstok
+000df8d0 g DF .text 00000030 GLIBC_2.0 pthread_self
+000fa2e0 g DF .text 000000b9 GLIBC_2.0 svc_register
+00091f70 g DF .text 00000070 GLIBC_2.0 __waitpid
+00077ba0 g DF .text 00000046 GLIBC_2.0 wcstol
+0005ad80 w DF .text 00000032 GLIBC_2.1 fopen64
+000df400 g DF .text 00000043 GLIBC_2.0 pthread_attr_setschedpolicy
+0005c2c0 g DF .text 000000a6 GLIBC_2.2 vswscanf
+00016570 g DF .text 00000031 (GLIBC_2.0) __fixunsxfdi
+000ec1c0 g DF .text 000000b0 GLIBC_2.0 endservent
+000e5b20 g DF .text 0000008c GLIBC_2.0 __nss_group_lookup
+000c0e50 w DF .text 000000bc GLIBC_2.1 pread
+00016610 g DF .text 00000038 (GLIBC_2.0) __ucmpdi2
+0003bf00 g DF .text 00000030 GLIBC_2.0 ctermid
+00077b20 w DF .text 00000024 GLIBC_2.2 wcschrnul
+00109740 g DF .text 00000099 GLIBC_PRIVATE __libc_dlsym
+000c0f10 w DF .text 000000bc GLIBC_2.1 pwrite
+000cce00 g DF .text 0000002c GLIBC_2.2 __endmntent
+00077c90 w DF .text 00000046 GLIBC_2.0 wcstoq
+0002ab50 g DF .text 0000007c GLIBC_2.0 sigstack
+00092a30 g DF .text 00000051 GLIBC_2.1.2 __vfork
+00071970 w DF .text 00000090 GLIBC_2.0 strsep
+00061360 g DF .text 00000013 GLIBC_2.2 __freadable
+000d6b50 w DF .text 00000090 GLIBC_2.3 iswblank_l
+0006f210 g DF .text 000000c9 GLIBC_2.0 _obstack_begin
+000f0f10 g DF .text 000000be GLIBC_2.0 getnetgrent
+000645a0 g DF .text 00000210 GLIBC_2.1 _IO_file_underflow
+0010e1c0 g DF .text 000000e8 (GLIBC_2.0) _IO_file_underflow
+00100e00 g DF .text 000000fb GLIBC_2.1 user2netname
+000e4630 g DF .text 000000b0 GLIBC_2.0 __nss_next
+000770a0 w DF .text 0000035f GLIBC_2.0 wcsrtombs
+00143970 g DO .data 00000004 GLIBC_2.0 __morecore
+00024400 w DF .text 00000015 GLIBC_2.0 bindtextdomain
+000c37a0 w DF .text 00000038 GLIBC_2.0 access
+000b7590 g DF .text 00000034 GLIBC_2.0 __sched_getscheduler
+000397c0 g DF .text 00000495 GLIBC_2.1 fmtmsg
+000d0410 g DF .text 000000c4 GLIBC_2.0 qfcvt
+0002e490 g DF .text 00000045 (GLIBC_2.0) __strtoq_internal
+0008df80 g DF .text 00000056 GLIBC_2.1 ntp_gettime
+0006de70 g DF .text 000000e0 GLIBC_2.2 mcheck_pedantic
+0006e9d0 g DF .text 000001e5 GLIBC_2.0 mtrace
+0005fc60 g DF .text 000000e7 GLIBC_2.0 _IO_getc
+000c23f0 g DF .text 000001dc GLIBC_2.4 __fxstatat
+00071cb0 g DF .text 00000084 GLIBC_2.0 memmem
+0014635c g DO .bss 00000004 GLIBC_2.0 loc1
+00061300 g DF .text 0000002a GLIBC_2.2 __fbufsize
+00065710 g DF .text 0000002f GLIBC_2.0 _IO_marker_delta
+00146360 g DO .bss 00000004 GLIBC_2.0 loc2
+00071d40 w DF .text 000000c6 GLIBC_2.1 rawmemchr
+000cbd50 g DF .text 0000002c GLIBC_2.0 sync
+000d3860 g DF .text 00000034 GLIBC_2.0 sysinfo
+0008f810 g DF .text 000000ae GLIBC_2.2.4 getgrouplist
+00070ec0 w DF .text 0000001e GLIBC_2.0 bcmp
+0005b1d0 w DF .text 0000002a GLIBC_2.2 getwc_unlocked
+0002aa40 w DF .text 00000104 GLIBC_2.0 sigvec
+001430d4 g DO .data 00000004 GLIBC_2.0 opterr
+00071f70 w DF .text 00000074 GLIBC_2.0 argz_append
+000f9f60 g DF .text 00000036 GLIBC_2.0 svc_getreq
+00093600 w DF .text 00000070 GLIBC_2.0 setgid
+00068a60 w DF .text 0000045a GLIBC_2.0 malloc_set_state
+000e69c0 g DF .text 00000057 GLIBC_2.3.4 __strcat_chk
+00072040 g DF .text 00000041 GLIBC_2.0 __argz_count
+0005c030 g DF .text 00000039 GLIBC_2.2 wprintf
+000d86f0 w DF .text 00000079 GLIBC_2.0 ulckpwdf
+000c85f0 g DF .text 00000146 GLIBC_2.0 fts_children
+00111a00 g DF .text 00000066 (GLIBC_2.0) getservbyport_r
+000ebe10 g DF .text 000001fb GLIBC_2.1.2 getservbyport_r
+000c1f00 g DF .text 0000003a GLIBC_2.0 mkfifo
+00070ce0 g DF .text 0000003e GLIBC_2.0 strxfrm
+000c3580 w DF .text 00000089 GLIBC_2.4 openat64
+000b7590 w DF .text 00000034 GLIBC_2.0 sched_getscheduler
+0002ce30 w DF .text 00000051 GLIBC_2.0 on_exit
+000c38e0 g DF .text 000002bb GLIBC_2.4 faccessat
+001465b4 g DO .bss 00000004 GLIBC_2.1 __key_decryptsession_pk_LOCAL
+000e1410 g DF .text 0000000f GLIBC_2.0 __res_randomid
+000602b0 g DF .text 00000032 GLIBC_2.0 setbuf
+00059890 g DF .text 00000180 GLIBC_2.0 _IO_gets
+00061f30 g DF .text 000000a7 GLIBC_2.1 fwrite_unlocked
+0006f9b0 g DF .text 00000054 GLIBC_2.0 strcmp
+00029f60 g DF .text 00000064 GLIBC_PRIVATE __libc_longjmp
+0002e530 g DF .text 00000045 GLIBC_2.0 __strtoull_internal
+000d6f80 w DF .text 00000092 GLIBC_2.3 iswspace_l
+000d3ca0 w DF .text 0000006c GLIBC_2.0 recvmsg
+00023dd0 w DF .text 00000017 GLIBC_2.3 islower_l
+00066240 g DF .text 00000128 GLIBC_2.0 __underflow
+000c10c0 w DF .text 000000ef GLIBC_2.1 pwrite64
+0006fd60 g DF .text 000000b6 GLIBC_2.0 strerror
+000391c0 g DF .text 00000042 GLIBC_2.1 __strfmon_l
+000fca40 g DF .text 0000003a GLIBC_2.0 xdr_wrapstring
+000ca6c0 g DF .text 00000038 GLIBC_2.0 tcgetpgrp
+00015f50 g DF .text 000001b6 GLIBC_2.0 __libc_start_main
+0008ea40 g DF .text 0000000a GLIBC_2.0 dirfd
+0005b1d0 w DF .text 0000002a GLIBC_2.2 fgetwc_unlocked
+00110d50 g DF .text 0000002b (GLIBC_2.1) nftw
+000f96d0 g DF .text 00000022 GLIBC_2.0 xdr_des_block
+000c61a0 g DF .text 00000052 GLIBC_2.3.3 nftw
+000f94a0 g DF .text 0000008c GLIBC_2.0 xdr_callhdr
+000d6e50 w DF .text 00000092 GLIBC_2.3 iswprint_l
+001009b0 g DF .text 0000006c GLIBC_2.0 xdr_cryptkeyarg2
+000913e0 g DF .text 000000a7 GLIBC_2.0 setpwent
+000d4570 g DF .text 00000062 GLIBC_2.0 semop
+000cc420 g DF .text 00000034 GLIBC_2.0 endfsent
+00023e70 g DF .text 00000017 GLIBC_2.1 __isupper_l
+0005c070 g DF .text 00000041 GLIBC_2.2 wscanf
+0005f6a0 w DF .text 0000009a GLIBC_2.0 ferror
+00106a70 w DF .text 00000069 GLIBC_2.0 getutent_r
+000fec10 g DF .text 0000009b GLIBC_2.1 authdes_create
+000c8f00 g DF .text 00000220 GLIBC_2.4 ppoll
+00071170 w DF .text 00000041 GLIBC_2.0 stpcpy
+000df5b0 g DF .text 0000003c GLIBC_2.3.2 pthread_cond_destroy
+00091bf0 w DF .text 00000221 GLIBC_2.0 fgetpwent_r
+00073ef0 g DF .text 00000d51 GLIBC_2.1 __strxfrm_l
+00106940 g DF .text 00000022 GLIBC_2.1 fdetach
+00029710 w DF .text 00000085 GLIBC_2.0 ldexp
+001111b0 g DF .text 0000003c (GLIBC_2.0) pthread_cond_destroy
+000cfcd0 g DF .text 00000050 GLIBC_2.0 gcvt
+00091ec0 w DF .text 000000ac GLIBC_2.0 __wait
+0005bf70 w DF .text 00000034 GLIBC_2.2 fwprintf
+000fcbb0 g DF .text 000000fe GLIBC_2.0 xdr_bytes
+0002cbe0 w DF .text 00000074 GLIBC_2.0 setenv
+00022820 w DF .text 00000067 GLIBC_2.3 nl_langinfo_l
+000cae80 g DF .text 0000003a GLIBC_2.0 setpriority
+000c1310 g DF .text 00000094 GLIBC_2.2 posix_spawn_file_actions_addopen
+00017b30 g DF .text 00000016 GLIBC_PRIVATE __gconv_get_modules_db
+00066080 g DF .text 0000007e GLIBC_2.0 _IO_default_doallocate
+001097e0 g DF .text 00000088 GLIBC_PRIVATE __libc_dlopen_mode
+00058d00 g DF .text 00000118 GLIBC_2.0 _IO_fread
+0008f090 g DF .text 00000192 GLIBC_2.0 fgetgrent
+000e7ac0 g DF .text 00000040 GLIBC_2.4 __recvfrom_chk
+000cb9d0 g DF .text 00000038 GLIBC_2.0 setdomainname
+000c36f0 w DF .text 00000070 GLIBC_2.0 write
+000ebcb0 g DF .text 0000013d GLIBC_2.0 getservbyport
+000f2380 g DF .text 00000048 GLIBC_2.1 if_freenameindex
+00034930 w DF .text 00000029 GLIBC_2.3 strtod_l
+000eaae0 g DF .text 000000ab GLIBC_2.0 getnetent
+00106f60 w DF .text 00000068 GLIBC_2.0 getutline_r
+00076020 w DF .text 00000054 GLIBC_2.0 wcslen
+000c91a0 g DF .text 000001ae GLIBC_2.2 posix_fallocate
+000c3fc0 g DF .text 00000034 GLIBC_2.0 __pipe
+000d8770 w DF .text 0000038b GLIBC_2.0 lckpwdf
+000fdb00 g DF .text 000000aa GLIBC_2.0 xdrrec_endofrecord
+00060af0 g DF .text 000000fa GLIBC_2.1 fseeko
+000d72a0 w DF .text 0000005d GLIBC_2.3 towctrans_l
+0006fa10 g DF .text 00000037 GLIBC_2.0 strcoll
+000f44a0 g DF .text 00000048 GLIBC_2.5 inet6_opt_set_val
+0002a060 w DF .text 000000cf GLIBC_2.0 ssignal
+0003d040 g DF .text 000043ec GLIBC_2.0 vfprintf
+0002d680 w DF .text 00000067 GLIBC_2.0 random
+00094d50 g DF .text 0000006a GLIBC_2.0 globfree
+000d3270 g DF .text 0000003a GLIBC_2.0 delete_module
+00077e50 g DF .text 0000003e GLIBC_2.0 __wcstold_internal
+000dd050 w DF .text 000000af GLIBC_2.1 argp_state_help
+00141580 g DO .data.rel.ro 00000100 (GLIBC_2.1) _sys_siglist
+00141580 g DO .data.rel.ro 00000104 GLIBC_2.3.3 _sys_siglist
+00072e20 g DF .text 0000002b GLIBC_2.0 basename
+00141580 g DO .data.rel.ro 00000080 (GLIBC_2.0) _sys_siglist
+000e8f40 w DF .text 00000007 GLIBC_2.0 ntohl
+00093780 g DF .text 00000008 GLIBC_2.0 getpgrp
+000b7430 g DF .text 00000047 GLIBC_2.0 getopt_long_only
+000cf690 g DF .text 000000a2 GLIBC_2.0 closelog
+00076130 g DF .text 000000d2 GLIBC_2.0 wcsncmp
+000b5ae0 w DF .text 0000004d GLIBC_2.0 re_exec
+00023cc0 g DF .text 00000011 GLIBC_2.0 isascii
+000d2340 w DF .text 000001a0 GLIBC_2.0 get_nprocs_conf
+000f5fa0 g DF .text 0000003d GLIBC_2.0 clnt_pcreateerror
+000e7c70 g DF .text 0000003b GLIBC_2.4 __ptsname_r_chk
+000d4ef0 w DF .text 000001a0 GLIBC_2.0 monstartup
+000c3c00 w DF .text 000000b7 GLIBC_2.0 __fcntl
+000e8f50 w DF .text 0000000e GLIBC_2.0 ntohs
+00046570 w DF .text 0000003b GLIBC_2.0 snprintf
+00066460 g DF .text 00000066 GLIBC_2.0 __overflow
+0002e3f0 g DF .text 00000045 GLIBC_2.0 __strtoul_internal
+000766b0 w DF .text 00000024 GLIBC_2.0 wmemmove
+000c9170 g DF .text 00000030 GLIBC_2.3.3 posix_fadvise64
+00110db0 g DF .text 00000024 (GLIBC_2.2) posix_fadvise64
+00100950 g DF .text 00000057 GLIBC_2.0 xdr_cryptkeyarg
+00094670 w DF .text 0000041d GLIBC_2.0 sysconf
+000e7330 g DF .text 000001ab GLIBC_2.3.4 __gets_chk
+0006f610 g DF .text 00000078 GLIBC_2.0 _obstack_free
+000d2fc0 g DF .text 00000068 GLIBC_2.3.3 gnu_dev_makedev
+000fc580 g DF .text 000000ea GLIBC_2.1.1 xdr_u_hyper
+000f0850 g DF .text 000000bb GLIBC_2.0 setnetgrent
+000c22a0 g DF .text 0000014d GLIBC_2.4 __xmknodat
+000165e0 g DF .text 00000023 (GLIBC_2.0) __fixunsdfdi
+0010cb50 g DF .text 000001b6 (GLIBC_2.0) _IO_fdopen
+00057fa0 g DF .text 000002da GLIBC_2.1 _IO_fdopen
+000f38e0 g DF .text 000000d6 GLIBC_2.3.3 inet6_option_find
+000791a0 w DF .text 00000040 GLIBC_2.3 wcstoull_l
+000f6d20 g DF .text 000002a9 GLIBC_2.0 clnttcp_create
+00023df0 w DF .text 00000017 GLIBC_2.3 isgraph_l
+000ec010 g DF .text 000000a2 GLIBC_2.0 getservent
+000e88e0 g DF .text 0000003b GLIBC_2.4 __ttyname_r_chk
+0002d5e0 g DF .text 00000093 GLIBC_2.0 wctomb
+00146364 g DO .bss 00000004 GLIBC_2.0 locs
+00062090 g DF .text 00000099 GLIBC_2.1 fputs_unlocked
+0002af90 g DF .text 00000024 GLIBC_2.0 siggetmask
+00143330 w DO .data 00000004 GLIBC_2.0 __memalign_hook
+00090d60 g DF .text 00000177 GLIBC_2.0 putpwent
+0005bdb0 g DF .text 0000004f GLIBC_2.2 putwchar_unlocked
+00075ac0 g DF .text 00000073 GLIBC_2.1.1 __strncpy_by2
+000d45e0 g DF .text 00000062 GLIBC_2.0 semget
+00066ce0 g DF .text 0000004c GLIBC_2.0 _IO_str_init_readonly
+00075b40 g DF .text 0000006b GLIBC_2.1.1 __strncpy_by4
+0002dbc0 w DF .text 00000116 GLIBC_2.0 initstate_r
+000f95b0 g DF .text 0000008f GLIBC_2.0 xdr_accepted_reply
+0005ab10 w DF .text 0000009b GLIBC_2.0 __vsscanf
+0006ce00 g DF .text 000001e5 GLIBC_2.0 free
+00076430 g DF .text 0000011e GLIBC_2.0 wcsstr
+00076310 g DF .text 00000028 GLIBC_2.0 wcsrchr
+00023b60 g DF .text 00000046 GLIBC_2.0 ispunct
+00062390 g DF .text 0000003b GLIBC_2.0 _IO_file_seek
+001447c0 g DO .bss 00000004 GLIBC_2.0 __daylight
+000e6740 g DF .text 00000005 GLIBC_2.2 __cyg_profile_func_exit
+000df270 g DF .text 00000043 GLIBC_2.0 pthread_attr_getinheritsched
+000e7b60 g DF .text 00000032 GLIBC_2.5 __readlinkat_chk
+001003f0 g DF .text 00000073 GLIBC_2.1 key_decryptsession
+000d1960 g DF .text 00000137 GLIBC_2.0 vwarn
+00076730 w DF .text 00000038 GLIBC_2.0 wcpcpy
+
+
diff --git a/scripts/t/Dpkg_Shlibs/objdump.ls b/scripts/t/Dpkg_Shlibs/objdump.ls
new file mode 100644
index 0000000..30ae8be
--- /dev/null
+++ b/scripts/t/Dpkg_Shlibs/objdump.ls
@@ -0,0 +1,536 @@
+
+/bin/ls: file format elf32-i386
+architecture: i386, flags 0x00000150:
+HAS_SYMS, DYNAMIC, D_PAGED
+start address 0x00003e16
+
+Program Header:
+ PHDR off 0x00000034 vaddr 0x00000034 paddr 0x00000034 align 2**2
+ filesz 0x00000120 memsz 0x00000120 flags r-x
+ INTERP off 0x00000154 vaddr 0x00000154 paddr 0x00000154 align 2**0
+ filesz 0x00000013 memsz 0x00000013 flags r--
+ LOAD off 0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**12
+ filesz 0x00021f10 memsz 0x00021f10 flags r-x
+ LOAD off 0x000229b8 vaddr 0x000239b8 paddr 0x000239b8 align 2**12
+ filesz 0x0000098c memsz 0x00001b1c flags rw-
+ DYNAMIC off 0x00022eac vaddr 0x00023eac paddr 0x00023eac align 2**2
+ filesz 0x000000f8 memsz 0x000000f8 flags rw-
+ NOTE off 0x00000168 vaddr 0x00000168 paddr 0x00000168 align 2**2
+ filesz 0x00000044 memsz 0x00000044 flags r--
+EH_FRAME off 0x0001b5b8 vaddr 0x0001b5b8 paddr 0x0001b5b8 align 2**2
+ filesz 0x000008cc memsz 0x000008cc flags r--
+ STACK off 0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**4
+ filesz 0x00000000 memsz 0x00000000 flags rw-
+ RELRO off 0x000229b8 vaddr 0x000239b8 paddr 0x000239b8 align 2**0
+ filesz 0x00000648 memsz 0x00000648 flags r--
+
+Dynamic Section:
+ NEEDED libselinux.so.1
+ NEEDED libc.so.6
+ INIT 0x00001ce8
+ FINI 0x00016524
+ INIT_ARRAY 0x000239b8
+ INIT_ARRAYSZ 0x00000004
+ FINI_ARRAY 0x000239bc
+ FINI_ARRAYSZ 0x00000004
+ GNU_HASH 0x000001ac
+ STRTAB 0x00000adc
+ SYMTAB 0x0000020c
+ STRSZ 0x00000638
+ SYMENT 0x00000010
+ DEBUG 0x00000000
+ PLTGOT 0x00024000
+ PLTRELSZ 0x00000388
+ PLTREL 0x00000011
+ JMPREL 0x00001960
+ REL 0x000012d0
+ RELSZ 0x00000690
+ RELENT 0x00000008
+ FLAGS_1 0x08000000
+ VERNEED 0x00001230
+ VERNEEDNUM 0x00000001
+ VERSYM 0x00001114
+ RELCOUNT 0x000000c6
+
+Version References:
+ required from libc.so.6:
+ 0x0d696912 0x00 10 GLIBC_2.2
+ 0x09691f73 0x00 09 GLIBC_2.1.3
+ 0x09691a73 0x00 08 GLIBC_2.2.3
+ 0x0d696914 0x00 07 GLIBC_2.4
+ 0x06969197 0x00 06 GLIBC_2.17
+ 0x0d696911 0x00 05 GLIBC_2.1
+ 0x09691974 0x00 04 GLIBC_2.3.4
+ 0x0d696910 0x00 03 GLIBC_2.0
+ 0x0d696913 0x00 02 GLIBC_2.3
+
+DYNAMIC SYMBOL TABLE:
+00000000 DF *UND* 00000000 GLIBC_2.3 __ctype_toupper_loc
+00000000 DF *UND* 00000000 GLIBC_2.0 unsetenv
+00000000 DF *UND* 00000000 GLIBC_2.0 getpwnam
+00000000 DF *UND* 00000000 GLIBC_2.0 raise
+00000000 DF *UND* 00000000 GLIBC_2.3.4 __snprintf_chk
+00000000 DO *UND* 00000000 GLIBC_2.0 __progname
+00000000 DF *UND* 00000000 GLIBC_2.0 strcmp
+00000000 DF *UND* 00000000 GLIBC_2.1 open64
+00000000 w D *UND* 00000000 _ITM_deregisterTMCloneTable
+00000000 DF *UND* 00000000 GLIBC_2.0 getpwuid
+00000000 DF *UND* 00000000 GLIBC_2.0 fflush
+00000000 DO *UND* 00000000 GLIBC_2.0 stderr
+00000000 DF *UND* 00000000 GLIBC_2.0 _exit
+00000000 DF *UND* 00000000 GLIBC_2.0 sigprocmask
+00000000 DF *UND* 00000000 GLIBC_2.0 dirfd
+00000000 DF *UND* 00000000 GLIBC_2.0 wcwidth
+00000000 DF *UND* 00000000 GLIBC_2.0 memmove
+00000000 DF *UND* 00000000 GLIBC_2.0 _setjmp
+00000000 DF *UND* 00000000 GLIBC_2.0 free
+00000000 DF *UND* 00000000 GLIBC_2.0 memcpy
+00000000 DF *UND* 00000000 GLIBC_2.0 mbsinit
+00000000 DF *UND* 00000000 GLIBC_2.17 clock_gettime
+00000000 DF *UND* 00000000 GLIBC_2.0 __strtoull_internal
+00000000 DF *UND* 00000000 GLIBC_2.1 fclose
+00000000 DF *UND* 00000000 GLIBC_2.1 fseeko64
+00000000 DF *UND* 00000000 GLIBC_2.0 signal
+00000000 DF *UND* 00000000 GLIBC_2.0 memcmp
+00000000 DF *UND* 00000000 GLIBC_2.0 gettimeofday
+00000000 DO *UND* 00000000 GLIBC_2.0 __progname_full
+00000000 DO *UND* 00000000 GLIBC_2.0 optind
+00000000 DF *UND* 00000000 GLIBC_2.0 dcgettext
+00000000 DF *UND* 00000000 GLIBC_2.0 mktime
+00000000 DF *UND* 00000000 GLIBC_2.4 __stack_chk_fail
+00000000 DF *UND* 00000000 GLIBC_2.0 localtime_r
+00000000 DF *UND* 00000000 GLIBC_2.0 sigismember
+00000000 DF *UND* 00000000 fgetfilecon
+00000000 DF *UND* 00000000 GLIBC_2.0 fflush_unlocked
+00000000 DF *UND* 00000000 GLIBC_2.0 iswcntrl
+00000000 DF *UND* 00000000 GLIBC_2.0 textdomain
+00000000 DF *UND* 00000000 GLIBC_2.0 readlink
+00000000 DF *UND* 00000000 GLIBC_2.2.3 fnmatch
+00000000 DF *UND* 00000000 GLIBC_2.0 iswprint
+00000000 DF *UND* 00000000 GLIBC_2.0 ioctl
+00000000 w DF *UND* 00000000 GLIBC_2.1.3 __cxa_finalize
+00000000 DF *UND* 00000000 GLIBC_2.0 fwrite
+00000000 DF *UND* 00000000 GLIBC_2.2 __fxstat64
+00000000 DF *UND* 00000000 GLIBC_2.0 tzset
+00000000 DF *UND* 00000000 GLIBC_2.0 __ctype_get_mb_cur_max
+00000000 DF *UND* 00000000 GLIBC_2.0 strcpy
+00000000 DF *UND* 00000000 GLIBC_2.2 __fpending
+00000000 DF *UND* 00000000 GLIBC_2.0 wcstombs
+00000000 DF *UND* 00000000 GLIBC_2.0 mbrtowc
+00000000 DF *UND* 00000000 GLIBC_2.0 gethostname
+00000000 DF *UND* 00000000 GLIBC_2.1.3 __cxa_atexit
+00000000 DF *UND* 00000000 GLIBC_2.0 error
+00000000 DF *UND* 00000000 GLIBC_2.0 strcoll
+00000000 DF *UND* 00000000 GLIBC_2.0 getenv
+00000000 DF *UND* 00000000 GLIBC_2.0 realloc
+00000000 DF *UND* 00000000 lgetfilecon
+00000000 DF *UND* 00000000 GLIBC_2.0 malloc
+00000000 DF *UND* 00000000 GLIBC_2.0 timegm
+00000000 DF *UND* 00000000 GLIBC_2.2 __freading
+00000000 DF *UND* 00000000 GLIBC_2.3.4 __memcpy_chk
+00000000 w D *UND* 00000000 __gmon_start__
+00000000 DF *UND* 00000000 GLIBC_2.0 exit
+00000000 DF *UND* 00000000 GLIBC_2.1 fdopen
+00000000 DF *UND* 00000000 GLIBC_2.1 fputs_unlocked
+00000000 DF *UND* 00000000 GLIBC_2.0 strftime
+00000000 DF *UND* 00000000 GLIBC_2.0 getopt_long
+00000000 DF *UND* 00000000 getfilecon
+00000000 DF *UND* 00000000 GLIBC_2.0 strtoul
+00000000 DF *UND* 00000000 GLIBC_2.0 strchr
+00000000 DF *UND* 00000000 GLIBC_2.0 getcwd
+00000000 DF *UND* 00000000 GLIBC_2.0 fscanf
+00000000 DF *UND* 00000000 GLIBC_2.0 strlen
+00000000 DF *UND* 00000000 GLIBC_2.0 setenv
+00000000 DF *UND* 00000000 GLIBC_2.0 __libc_start_main
+00000000 DF *UND* 00000000 GLIBC_2.0 sigaddset
+00000000 DF *UND* 00000000 GLIBC_2.0 memset
+00000000 DF *UND* 00000000 GLIBC_2.0 ungetc
+00000000 DF *UND* 00000000 GLIBC_2.0 snprintf
+00000000 DF *UND* 00000000 GLIBC_2.0 __errno_location
+00000000 DF *UND* 00000000 GLIBC_2.0 tcgetpgrp
+00000000 DF *UND* 00000000 GLIBC_2.0 fileno
+00000000 DF *UND* 00000000 GLIBC_2.0 stpncpy
+00000000 DO *UND* 00000000 GLIBC_2.0 stdout
+00000000 DF *UND* 00000000 GLIBC_2.1 fwrite_unlocked
+00000000 DF *UND* 00000000 GLIBC_2.3.4 __printf_chk
+00000000 DF *UND* 00000000 GLIBC_2.1 mempcpy
+00000000 DF *UND* 00000000 GLIBC_2.0 wcswidth
+00000000 DF *UND* 00000000 GLIBC_2.0 sigemptyset
+00000000 DF *UND* 00000000 GLIBC_2.0 __uflow
+00000000 DO *UND* 00000000 GLIBC_2.0 program_invocation_name
+00000000 DF *UND* 00000000 GLIBC_2.1 __rawmemchr
+00000000 DF *UND* 00000000 GLIBC_2.0 nl_langinfo
+00000000 DF *UND* 00000000 GLIBC_2.0 setlocale
+00000000 DF *UND* 00000000 GLIBC_2.0 strrchr
+00000000 DF *UND* 00000000 GLIBC_2.0 __overflow
+00000000 DF *UND* 00000000 GLIBC_2.0 mbstowcs
+00000000 DF *UND* 00000000 GLIBC_2.0 gmtime_r
+00000000 DF *UND* 00000000 GLIBC_2.2 localeconv
+00000000 DF *UND* 00000000 GLIBC_2.3 getxattr
+00000000 DF *UND* 00000000 freecon
+00000000 DF *UND* 00000000 GLIBC_2.1 lseek64
+00000000 DF *UND* 00000000 GLIBC_2.2 readdir64
+00000000 DO *UND* 00000000 GLIBC_2.0 program_invocation_short_name
+00000000 DF *UND* 00000000 GLIBC_2.3.4 __fprintf_chk
+00000000 DF *UND* 00000000 GLIBC_2.0 sigaction
+00000000 DF *UND* 00000000 GLIBC_2.0 bindtextdomain
+00000000 w D *UND* 00000000 _ITM_registerTMCloneTable
+00000000 DF *UND* 00000000 GLIBC_2.0 strncmp
+00000000 DF *UND* 00000000 GLIBC_2.0 isatty
+00000000 DF *UND* 00000000 GLIBC_2.0 abort
+00000000 DF *UND* 00000000 GLIBC_2.2 __xstat64
+00000000 DO *UND* 00000000 GLIBC_2.0 optarg
+00000000 DF *UND* 00000000 GLIBC_2.2 __lxstat64
+00000000 DF *UND* 00000000 GLIBC_2.0 getgrnam
+00000000 DF *UND* 00000000 GLIBC_2.0 close
+00000000 DF *UND* 00000000 GLIBC_2.0 closedir
+00000000 DF *UND* 00000000 GLIBC_2.0 strspn
+00000000 DF *UND* 00000000 GLIBC_2.0 opendir
+00000000 DF *UND* 00000000 GLIBC_2.0 getgrgid
+00000000 DF *UND* 00000000 GLIBC_2.3 __ctype_tolower_loc
+00000000 DF *UND* 00000000 GLIBC_2.0 __assert_fail
+00000000 DF *UND* 00000000 GLIBC_2.3 __ctype_b_loc
+00000000 DF *UND* 00000000 GLIBC_2.0 calloc
+00000000 DF *UND* 00000000 GLIBC_2.3.4 __sprintf_chk
+00024340 g DO .data 00000004 Base obstack_alloc_failed_handler
+00014ed0 g DF .text 000000fb Base _obstack_newchunk
+00024344 g D .data 00000000 Base _edata
+00014ea0 g DF .text 0000002a Base _obstack_begin_1
+00014fd0 g DF .text 00000030 Base _obstack_allocated_p
+000254d4 g D .bss 00000000 Base _end
+00014e70 g DF .text 00000023 Base _obstack_begin
+00016544 g DO .rodata 00000004 Base _IO_stdin_used
+00015080 g DF .text 00000022 Base _obstack_memory_used
+00024344 g D .bss 00000000 Base __bss_start
+00001ce8 g DF .init 00000000 Base _init
+00016524 g DF .fini 00000000 Base _fini
+00015000 g DF .text 00000071 Base _obstack_free
+
+
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+000239b8 R_386_RELATIVE *ABS*
+000239bc R_386_RELATIVE *ABS*
+000239c0 R_386_RELATIVE *ABS*
+000239c4 R_386_RELATIVE *ABS*
+000239c8 R_386_RELATIVE *ABS*
+000239cc R_386_RELATIVE *ABS*
+000239d0 R_386_RELATIVE *ABS*
+000239d4 R_386_RELATIVE *ABS*
+000239d8 R_386_RELATIVE *ABS*
+000239dc R_386_RELATIVE *ABS*
+000239e0 R_386_RELATIVE *ABS*
+000239e4 R_386_RELATIVE *ABS*
+000239e8 R_386_RELATIVE *ABS*
+000239ec R_386_RELATIVE *ABS*
+000239f0 R_386_RELATIVE *ABS*
+000239f4 R_386_RELATIVE *ABS*
+000239f8 R_386_RELATIVE *ABS*
+000239fc R_386_RELATIVE *ABS*
+00023a00 R_386_RELATIVE *ABS*
+00023a04 R_386_RELATIVE *ABS*
+00023a08 R_386_RELATIVE *ABS*
+00023a0c R_386_RELATIVE *ABS*
+00023a10 R_386_RELATIVE *ABS*
+00023a14 R_386_RELATIVE *ABS*
+00023a18 R_386_RELATIVE *ABS*
+00023a1c R_386_RELATIVE *ABS*
+00023a20 R_386_RELATIVE *ABS*
+00023a24 R_386_RELATIVE *ABS*
+00023a28 R_386_RELATIVE *ABS*
+00023a2c R_386_RELATIVE *ABS*
+00023a40 R_386_RELATIVE *ABS*
+00023a44 R_386_RELATIVE *ABS*
+00023a48 R_386_RELATIVE *ABS*
+00023a4c R_386_RELATIVE *ABS*
+00023a50 R_386_RELATIVE *ABS*
+00023a54 R_386_RELATIVE *ABS*
+00023a58 R_386_RELATIVE *ABS*
+00023a5c R_386_RELATIVE *ABS*
+00023a60 R_386_RELATIVE *ABS*
+00023a64 R_386_RELATIVE *ABS*
+00023a68 R_386_RELATIVE *ABS*
+00023a6c R_386_RELATIVE *ABS*
+00023a70 R_386_RELATIVE *ABS*
+00023a74 R_386_RELATIVE *ABS*
+00023a78 R_386_RELATIVE *ABS*
+00023a7c R_386_RELATIVE *ABS*
+00023a80 R_386_RELATIVE *ABS*
+00023a84 R_386_RELATIVE *ABS*
+00023a88 R_386_RELATIVE *ABS*
+00023a8c R_386_RELATIVE *ABS*
+00023a90 R_386_RELATIVE *ABS*
+00023a94 R_386_RELATIVE *ABS*
+00023a98 R_386_RELATIVE *ABS*
+00023a9c R_386_RELATIVE *ABS*
+00023aa0 R_386_RELATIVE *ABS*
+00023aa4 R_386_RELATIVE *ABS*
+00023aa8 R_386_RELATIVE *ABS*
+00023aac R_386_RELATIVE *ABS*
+00023ab0 R_386_RELATIVE *ABS*
+00023ab4 R_386_RELATIVE *ABS*
+00023ab8 R_386_RELATIVE *ABS*
+00023abc R_386_RELATIVE *ABS*
+00023ac0 R_386_RELATIVE *ABS*
+00023ac8 R_386_RELATIVE *ABS*
+00023acc R_386_RELATIVE *ABS*
+00023ad0 R_386_RELATIVE *ABS*
+00023ad4 R_386_RELATIVE *ABS*
+00023ad8 R_386_RELATIVE *ABS*
+00023ae0 R_386_RELATIVE *ABS*
+00023ae4 R_386_RELATIVE *ABS*
+00023ae8 R_386_RELATIVE *ABS*
+00023aec R_386_RELATIVE *ABS*
+00023af0 R_386_RELATIVE *ABS*
+00023b00 R_386_RELATIVE *ABS*
+00023b04 R_386_RELATIVE *ABS*
+00023b08 R_386_RELATIVE *ABS*
+00023b0c R_386_RELATIVE *ABS*
+00023b10 R_386_RELATIVE *ABS*
+00023b14 R_386_RELATIVE *ABS*
+00023b18 R_386_RELATIVE *ABS*
+00023b20 R_386_RELATIVE *ABS*
+00023b30 R_386_RELATIVE *ABS*
+00023b40 R_386_RELATIVE *ABS*
+00023b50 R_386_RELATIVE *ABS*
+00023b60 R_386_RELATIVE *ABS*
+00023b70 R_386_RELATIVE *ABS*
+00023b80 R_386_RELATIVE *ABS*
+00023b90 R_386_RELATIVE *ABS*
+00023ba0 R_386_RELATIVE *ABS*
+00023bb0 R_386_RELATIVE *ABS*
+00023bc0 R_386_RELATIVE *ABS*
+00023bd0 R_386_RELATIVE *ABS*
+00023be0 R_386_RELATIVE *ABS*
+00023bf0 R_386_RELATIVE *ABS*
+00023c00 R_386_RELATIVE *ABS*
+00023c10 R_386_RELATIVE *ABS*
+00023c20 R_386_RELATIVE *ABS*
+00023c30 R_386_RELATIVE *ABS*
+00023c40 R_386_RELATIVE *ABS*
+00023c50 R_386_RELATIVE *ABS*
+00023c60 R_386_RELATIVE *ABS*
+00023c70 R_386_RELATIVE *ABS*
+00023c80 R_386_RELATIVE *ABS*
+00023c90 R_386_RELATIVE *ABS*
+00023ca0 R_386_RELATIVE *ABS*
+00023cb0 R_386_RELATIVE *ABS*
+00023cc0 R_386_RELATIVE *ABS*
+00023cd0 R_386_RELATIVE *ABS*
+00023ce0 R_386_RELATIVE *ABS*
+00023cf0 R_386_RELATIVE *ABS*
+00023d00 R_386_RELATIVE *ABS*
+00023d10 R_386_RELATIVE *ABS*
+00023d20 R_386_RELATIVE *ABS*
+00023d30 R_386_RELATIVE *ABS*
+00023d40 R_386_RELATIVE *ABS*
+00023d50 R_386_RELATIVE *ABS*
+00023d60 R_386_RELATIVE *ABS*
+00023d70 R_386_RELATIVE *ABS*
+00023d80 R_386_RELATIVE *ABS*
+00023d90 R_386_RELATIVE *ABS*
+00023da0 R_386_RELATIVE *ABS*
+00023db0 R_386_RELATIVE *ABS*
+00023dc0 R_386_RELATIVE *ABS*
+00023de0 R_386_RELATIVE *ABS*
+00023de4 R_386_RELATIVE *ABS*
+00023de8 R_386_RELATIVE *ABS*
+00023dec R_386_RELATIVE *ABS*
+00023df0 R_386_RELATIVE *ABS*
+00023df4 R_386_RELATIVE *ABS*
+00023df8 R_386_RELATIVE *ABS*
+00023dfc R_386_RELATIVE *ABS*
+00023e00 R_386_RELATIVE *ABS*
+00023e04 R_386_RELATIVE *ABS*
+00023e08 R_386_RELATIVE *ABS*
+00023e0c R_386_RELATIVE *ABS*
+00023e10 R_386_RELATIVE *ABS*
+00023e14 R_386_RELATIVE *ABS*
+00023e18 R_386_RELATIVE *ABS*
+00023e1c R_386_RELATIVE *ABS*
+00023e20 R_386_RELATIVE *ABS*
+00023e24 R_386_RELATIVE *ABS*
+00023e28 R_386_RELATIVE *ABS*
+00023e2c R_386_RELATIVE *ABS*
+00023e30 R_386_RELATIVE *ABS*
+00023e34 R_386_RELATIVE *ABS*
+00023e38 R_386_RELATIVE *ABS*
+00023e3c R_386_RELATIVE *ABS*
+00023e44 R_386_RELATIVE *ABS*
+00023e48 R_386_RELATIVE *ABS*
+00023e4c R_386_RELATIVE *ABS*
+00023e50 R_386_RELATIVE *ABS*
+00023e58 R_386_RELATIVE *ABS*
+00023e5c R_386_RELATIVE *ABS*
+00023e60 R_386_RELATIVE *ABS*
+00023e64 R_386_RELATIVE *ABS*
+00023e6c R_386_RELATIVE *ABS*
+00023e70 R_386_RELATIVE *ABS*
+00023e80 R_386_RELATIVE *ABS*
+00023e84 R_386_RELATIVE *ABS*
+00023e88 R_386_RELATIVE *ABS*
+00023e8c R_386_RELATIVE *ABS*
+00023e90 R_386_RELATIVE *ABS*
+00023e94 R_386_RELATIVE *ABS*
+00023e98 R_386_RELATIVE *ABS*
+00023e9c R_386_RELATIVE *ABS*
+00023ea0 R_386_RELATIVE *ABS*
+00023ea4 R_386_RELATIVE *ABS*
+00023fb8 R_386_RELATIVE *ABS*
+00023fc0 R_386_RELATIVE *ABS*
+00023fc8 R_386_RELATIVE *ABS*
+00023fd0 R_386_RELATIVE *ABS*
+00023fd8 R_386_RELATIVE *ABS*
+000241e4 R_386_RELATIVE *ABS*
+00024200 R_386_RELATIVE *ABS*
+00024204 R_386_RELATIVE *ABS*
+00024224 R_386_RELATIVE *ABS*
+0002422c R_386_RELATIVE *ABS*
+0002423c R_386_RELATIVE *ABS*
+00024254 R_386_RELATIVE *ABS*
+0002425c R_386_RELATIVE *ABS*
+00024264 R_386_RELATIVE *ABS*
+0002426c R_386_RELATIVE *ABS*
+00024274 R_386_RELATIVE *ABS*
+0002427c R_386_RELATIVE *ABS*
+00024294 R_386_RELATIVE *ABS*
+0002429c R_386_RELATIVE *ABS*
+000242a4 R_386_RELATIVE *ABS*
+000242ac R_386_RELATIVE *ABS*
+000242b4 R_386_RELATIVE *ABS*
+000242bc R_386_RELATIVE *ABS*
+000242c4 R_386_RELATIVE *ABS*
+000242cc R_386_RELATIVE *ABS*
+000242dc R_386_RELATIVE *ABS*
+000242e4 R_386_RELATIVE *ABS*
+000242e8 R_386_RELATIVE *ABS*
+00024334 R_386_RELATIVE *ABS*
+0002433c R_386_RELATIVE *ABS*
+00024340 R_386_RELATIVE *ABS*
+00023fa4 R_386_GLOB_DAT _ITM_deregisterTMCloneTable
+00023fa8 R_386_GLOB_DAT stderr@GLIBC_2.0
+00023fac R_386_GLOB_DAT free@GLIBC_2.0
+00023fb0 R_386_GLOB_DAT optind@GLIBC_2.0
+00023fb4 R_386_GLOB_DAT __cxa_finalize@GLIBC_2.1.3
+00023fbc R_386_GLOB_DAT malloc@GLIBC_2.0
+00023fc4 R_386_GLOB_DAT __gmon_start__
+00023fcc R_386_GLOB_DAT stdout@GLIBC_2.0
+00023fd4 R_386_GLOB_DAT program_invocation_name@GLIBC_2.0
+00023fdc R_386_GLOB_DAT program_invocation_short_name@GLIBC_2.0
+00023fe0 R_386_GLOB_DAT _ITM_registerTMCloneTable
+00023fe4 R_386_GLOB_DAT optarg@GLIBC_2.0
+0002400c R_386_JUMP_SLOT __ctype_toupper_loc@GLIBC_2.3
+00024010 R_386_JUMP_SLOT unsetenv@GLIBC_2.0
+00024014 R_386_JUMP_SLOT getpwnam@GLIBC_2.0
+00024018 R_386_JUMP_SLOT raise@GLIBC_2.0
+0002401c R_386_JUMP_SLOT __snprintf_chk@GLIBC_2.3.4
+00024020 R_386_JUMP_SLOT strcmp@GLIBC_2.0
+00024024 R_386_JUMP_SLOT open64@GLIBC_2.1
+00024028 R_386_JUMP_SLOT getpwuid@GLIBC_2.0
+0002402c R_386_JUMP_SLOT fflush@GLIBC_2.0
+00024030 R_386_JUMP_SLOT _exit@GLIBC_2.0
+00024034 R_386_JUMP_SLOT sigprocmask@GLIBC_2.0
+00024038 R_386_JUMP_SLOT dirfd@GLIBC_2.0
+0002403c R_386_JUMP_SLOT wcwidth@GLIBC_2.0
+00024040 R_386_JUMP_SLOT memmove@GLIBC_2.0
+00024044 R_386_JUMP_SLOT _setjmp@GLIBC_2.0
+00024048 R_386_JUMP_SLOT memcpy@GLIBC_2.0
+0002404c R_386_JUMP_SLOT mbsinit@GLIBC_2.0
+00024050 R_386_JUMP_SLOT clock_gettime@GLIBC_2.17
+00024054 R_386_JUMP_SLOT __strtoull_internal@GLIBC_2.0
+00024058 R_386_JUMP_SLOT fclose@GLIBC_2.1
+0002405c R_386_JUMP_SLOT fseeko64@GLIBC_2.1
+00024060 R_386_JUMP_SLOT signal@GLIBC_2.0
+00024064 R_386_JUMP_SLOT memcmp@GLIBC_2.0
+00024068 R_386_JUMP_SLOT gettimeofday@GLIBC_2.0
+0002406c R_386_JUMP_SLOT dcgettext@GLIBC_2.0
+00024070 R_386_JUMP_SLOT mktime@GLIBC_2.0
+00024074 R_386_JUMP_SLOT __stack_chk_fail@GLIBC_2.4
+00024078 R_386_JUMP_SLOT localtime_r@GLIBC_2.0
+0002407c R_386_JUMP_SLOT sigismember@GLIBC_2.0
+00024080 R_386_JUMP_SLOT fgetfilecon
+00024084 R_386_JUMP_SLOT fflush_unlocked@GLIBC_2.0
+00024088 R_386_JUMP_SLOT iswcntrl@GLIBC_2.0
+0002408c R_386_JUMP_SLOT textdomain@GLIBC_2.0
+00024090 R_386_JUMP_SLOT readlink@GLIBC_2.0
+00024094 R_386_JUMP_SLOT fnmatch@GLIBC_2.2.3
+00024098 R_386_JUMP_SLOT iswprint@GLIBC_2.0
+0002409c R_386_JUMP_SLOT ioctl@GLIBC_2.0
+000240a0 R_386_JUMP_SLOT fwrite@GLIBC_2.0
+000240a4 R_386_JUMP_SLOT __fxstat64@GLIBC_2.2
+000240a8 R_386_JUMP_SLOT tzset@GLIBC_2.0
+000240ac R_386_JUMP_SLOT __ctype_get_mb_cur_max@GLIBC_2.0
+000240b0 R_386_JUMP_SLOT strcpy@GLIBC_2.0
+000240b4 R_386_JUMP_SLOT __fpending@GLIBC_2.2
+000240b8 R_386_JUMP_SLOT wcstombs@GLIBC_2.0
+000240bc R_386_JUMP_SLOT mbrtowc@GLIBC_2.0
+000240c0 R_386_JUMP_SLOT gethostname@GLIBC_2.0
+000240c4 R_386_JUMP_SLOT __cxa_atexit@GLIBC_2.1.3
+000240c8 R_386_JUMP_SLOT error@GLIBC_2.0
+000240cc R_386_JUMP_SLOT strcoll@GLIBC_2.0
+000240d0 R_386_JUMP_SLOT getenv@GLIBC_2.0
+000240d4 R_386_JUMP_SLOT realloc@GLIBC_2.0
+000240d8 R_386_JUMP_SLOT lgetfilecon
+000240dc R_386_JUMP_SLOT timegm@GLIBC_2.0
+000240e0 R_386_JUMP_SLOT __freading@GLIBC_2.2
+000240e4 R_386_JUMP_SLOT __memcpy_chk@GLIBC_2.3.4
+000240e8 R_386_JUMP_SLOT exit@GLIBC_2.0
+000240ec R_386_JUMP_SLOT fdopen@GLIBC_2.1
+000240f0 R_386_JUMP_SLOT fputs_unlocked@GLIBC_2.1
+000240f4 R_386_JUMP_SLOT strftime@GLIBC_2.0
+000240f8 R_386_JUMP_SLOT getopt_long@GLIBC_2.0
+000240fc R_386_JUMP_SLOT getfilecon
+00024100 R_386_JUMP_SLOT strtoul@GLIBC_2.0
+00024104 R_386_JUMP_SLOT strchr@GLIBC_2.0
+00024108 R_386_JUMP_SLOT getcwd@GLIBC_2.0
+0002410c R_386_JUMP_SLOT fscanf@GLIBC_2.0
+00024110 R_386_JUMP_SLOT strlen@GLIBC_2.0
+00024114 R_386_JUMP_SLOT setenv@GLIBC_2.0
+00024118 R_386_JUMP_SLOT __libc_start_main@GLIBC_2.0
+0002411c R_386_JUMP_SLOT sigaddset@GLIBC_2.0
+00024120 R_386_JUMP_SLOT memset@GLIBC_2.0
+00024124 R_386_JUMP_SLOT ungetc@GLIBC_2.0
+00024128 R_386_JUMP_SLOT snprintf@GLIBC_2.0
+0002412c R_386_JUMP_SLOT __errno_location@GLIBC_2.0
+00024130 R_386_JUMP_SLOT tcgetpgrp@GLIBC_2.0
+00024134 R_386_JUMP_SLOT fileno@GLIBC_2.0
+00024138 R_386_JUMP_SLOT stpncpy@GLIBC_2.0
+0002413c R_386_JUMP_SLOT fwrite_unlocked@GLIBC_2.1
+00024140 R_386_JUMP_SLOT __printf_chk@GLIBC_2.3.4
+00024144 R_386_JUMP_SLOT mempcpy@GLIBC_2.1
+00024148 R_386_JUMP_SLOT wcswidth@GLIBC_2.0
+0002414c R_386_JUMP_SLOT sigemptyset@GLIBC_2.0
+00024150 R_386_JUMP_SLOT __uflow@GLIBC_2.0
+00024154 R_386_JUMP_SLOT __rawmemchr@GLIBC_2.1
+00024158 R_386_JUMP_SLOT nl_langinfo@GLIBC_2.0
+0002415c R_386_JUMP_SLOT setlocale@GLIBC_2.0
+00024160 R_386_JUMP_SLOT strrchr@GLIBC_2.0
+00024164 R_386_JUMP_SLOT __overflow@GLIBC_2.0
+00024168 R_386_JUMP_SLOT mbstowcs@GLIBC_2.0
+0002416c R_386_JUMP_SLOT gmtime_r@GLIBC_2.0
+00024170 R_386_JUMP_SLOT localeconv@GLIBC_2.2
+00024174 R_386_JUMP_SLOT getxattr@GLIBC_2.3
+00024178 R_386_JUMP_SLOT freecon
+0002417c R_386_JUMP_SLOT lseek64@GLIBC_2.1
+00024180 R_386_JUMP_SLOT readdir64@GLIBC_2.2
+00024184 R_386_JUMP_SLOT __fprintf_chk@GLIBC_2.3.4
+00024188 R_386_JUMP_SLOT sigaction@GLIBC_2.0
+0002418c R_386_JUMP_SLOT bindtextdomain@GLIBC_2.0
+00024190 R_386_JUMP_SLOT strncmp@GLIBC_2.0
+00024194 R_386_JUMP_SLOT isatty@GLIBC_2.0
+00024198 R_386_JUMP_SLOT abort@GLIBC_2.0
+0002419c R_386_JUMP_SLOT __xstat64@GLIBC_2.2
+000241a0 R_386_JUMP_SLOT __lxstat64@GLIBC_2.2
+000241a4 R_386_JUMP_SLOT getgrnam@GLIBC_2.0
+000241a8 R_386_JUMP_SLOT close@GLIBC_2.0
+000241ac R_386_JUMP_SLOT closedir@GLIBC_2.0
+000241b0 R_386_JUMP_SLOT strspn@GLIBC_2.0
+000241b4 R_386_JUMP_SLOT opendir@GLIBC_2.0
+000241b8 R_386_JUMP_SLOT getgrgid@GLIBC_2.0
+000241bc R_386_JUMP_SLOT __ctype_tolower_loc@GLIBC_2.3
+000241c0 R_386_JUMP_SLOT __assert_fail@GLIBC_2.0
+000241c4 R_386_JUMP_SLOT __ctype_b_loc@GLIBC_2.3
+000241c8 R_386_JUMP_SLOT calloc@GLIBC_2.0
+000241cc R_386_JUMP_SLOT __sprintf_chk@GLIBC_2.3.4
+
+
diff --git a/scripts/t/Dpkg_Shlibs/objdump.patterns b/scripts/t/Dpkg_Shlibs/objdump.patterns
new file mode 100644
index 0000000..571ad47
--- /dev/null
+++ b/scripts/t/Dpkg_Shlibs/objdump.patterns
@@ -0,0 +1,235 @@
+
+./t/Dpkg_Shlibs/libobjdump.patterns.so: file format elf32-i386
+architecture: i386, flags 0x00000150:
+HAS_SYMS, DYNAMIC, D_PAGED
+start address 0x00001650
+
+Program Header:
+ LOAD off 0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**12
+ filesz 0x0000212c memsz 0x0000212c flags r-x
+ LOAD off 0x00002dd8 vaddr 0x00003dd8 paddr 0x00003dd8 align 2**12
+ filesz 0x00000274 memsz 0x00000278 flags rw-
+ DYNAMIC off 0x00002ec8 vaddr 0x00003ec8 paddr 0x00003ec8 align 2**2
+ filesz 0x00000110 memsz 0x00000110 flags rw-
+ NOTE off 0x00000114 vaddr 0x00000114 paddr 0x00000114 align 2**2
+ filesz 0x00000024 memsz 0x00000024 flags r--
+EH_FRAME off 0x00001ba0 vaddr 0x00001ba0 paddr 0x00001ba0 align 2**2
+ filesz 0x00000134 memsz 0x00000134 flags r--
+ STACK off 0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**4
+ filesz 0x00000000 memsz 0x00000000 flags rw-
+ RELRO off 0x00002dd8 vaddr 0x00003dd8 paddr 0x00003dd8 align 2**0
+ filesz 0x00000228 memsz 0x00000228 flags r--
+
+Dynamic Section:
+ NEEDED libstdc++.so.6
+ NEEDED libm.so.6
+ NEEDED libgcc_s.so.1
+ NEEDED libc.so.6
+ SONAME libpatterns.so.1
+ INIT 0x00001520
+ FINI 0x00001b2c
+ INIT_ARRAY 0x00003dd8
+ INIT_ARRAYSZ 0x00000004
+ FINI_ARRAY 0x00003ddc
+ FINI_ARRAYSZ 0x00000004
+ GNU_HASH 0x00000138
+ STRTAB 0x00000960
+ SYMTAB 0x000003d0
+ STRSZ 0x00000802
+ SYMENT 0x00000010
+ PLTGOT 0x00004000
+ PLTRELSZ 0x00000070
+ PLTREL 0x00000011
+ JMPREL 0x000014b0
+ REL 0x000012d8
+ RELSZ 0x000001d8
+ RELENT 0x00000008
+ VERDEF 0x00001214
+ VERDEFNUM 0x00000003
+ VERNEED 0x00001268
+ VERNEEDNUM 0x00000003
+ VERSYM 0x00001162
+ RELCOUNT 0x00000003
+
+Version definitions:
+1 0x01 0x03e92331 libpatterns.so.1
+2 0x00 0x0e2aa3a1 SYMVER_1
+3 0x00 0x0a4cbc82 SYMVEROPT_2
+
+Version References:
+ required from libgcc_s.so.1:
+ 0x0b792650 0x00 07 GCC_3.0
+ required from libstdc++.so.6:
+ 0x056bafd3 0x00 06 CXXABI_1.3
+ 0x0bafd179 0x00 05 CXXABI_1.3.9
+ required from libc.so.6:
+ 0x09691f73 0x00 04 GLIBC_2.1.3
+
+DYNAMIC SYMBOL TABLE:
+00000000 w DF *UND* 00000000 GLIBC_2.1.3 __cxa_finalize
+00000000 DF *UND* 00000000 CXXABI_1.3.9 _ZdlPvj
+00000000 DO *UND* 00000000 CXXABI_1.3 _ZTVN10__cxxabiv117__class_type_infoE
+00000000 DF *UND* 00000000 CXXABI_1.3 __gxx_personality_v0
+00000000 DO *UND* 00000000 CXXABI_1.3 _ZTVN10__cxxabiv121__vmi_class_type_infoE
+00000000 w D *UND* 00000000 _ITM_deregisterTMCloneTable
+00000000 DF *UND* 00000000 GCC_3.0 _Unwind_Resume
+00000000 w D *UND* 00000000 __gmon_start__
+00000000 w D *UND* 00000000 _ITM_registerTMCloneTable
+00001b88 w DO .rodata 00000008 Base _ZTS6ClassC
+00001790 g DF .text 00000002 Base _ZN6ClassBD1Ev
+00001940 g DF .text 00000007 Base _ZThn16_N3NSB6ClassDD0Ev
+000018e0 g DF .text 0000002a Base _ZN6ClassCD0Ev
+00001a00 g DF .text 0000001a Base _ZN3NSA6ClassAC2Ev
+00001af0 g DF .text 00000002 SYMVER_1 _ZN3NSB6SymverC2Ev
+000019c0 g DF .text 0000001a Base _ZN3NSA6ClassA8InternalC2Ev
+00001820 g DF .text 0000002a Base _ZN3NSA6ClassA7PrivateD0Ev
+00001a60 g DF .text 0000008c Base _ZN3NSB6ClassDC2Ev
+000019e0 g DF .text 00000002 Base _ZN3NSA6ClassA8Internal16internal_method1Ec
+00001970 g DF .text 00000002 Base _ZThn12_NK3NSB6ClassD11generate_vtEPKc
+00000000 g DO *ABS* 00000000 SYMVER_1 SYMVER_1
+00003e30 w DO .data.rel.ro 00000010 Base _ZTVN3NSA6ClassA7PrivateE
+00001770 g DF .text 00000002 Base _ZN3NSA6ClassAD1Ev
+00001760 g DF .text 00000002 Base _ZN3NSA6ClassA8InternalD1Ev
+00001b00 g DF .text 00000002 SYMVER_1 _ZN3NSB6SymverD1Ev
+00001a40 g DF .text 0000001a Base _ZN6ClassCC2Ev
+00001b00 g DF .text 00000002 SYMVEROPT_2 _ZN3NSB14SymverOptionalD2Ev
+00003e40 w DO .data.rel.ro 00000010 Base _ZTVN3NSA6ClassA8InternalE
+00001980 g DF .text 0000001a Base _ZN3NSA6ClassA7PrivateC2Ev
+000017b0 g DF .text 0000004d Base _ZN3NSB6ClassDD1Ev
+000019a0 g DF .text 00000002 Base _ZN3NSA6ClassA7Private11privmethod1Ei
+00001790 g DF .text 00000002 Base _ZN6ClassBD2Ev
+00001810 g DF .text 00000007 Base _ZThn16_N3NSB6ClassDD1Ev
+00001b2c g DF .fini 00000000 Base _fini
+00001950 g DF .text 00000007 Base _ZThn12_N3NSB6ClassDD0Ev
+000017a0 g DF .text 00000002 Base _ZN6ClassCD1Ev
+00001750 g DF .text 00000002 Base _ZN3NSA6ClassA7PrivateD1Ev
+00001520 g DF .init 00000000 Base _init
+00003df8 w DO .data.rel.ro 00000008 Base _ZTI6ClassB
+000019f0 g DF .text 00000002 Base _ZN3NSA6ClassA8Internal16internal_method2Ec
+00003e00 w DO .data.rel.ro 00000008 Base _ZTI6ClassC
+00001b00 g DF .text 00000002 SYMVER_1 _ZN3NSB6SymverD2Ev
+00001760 g DF .text 00000002 Base _ZN3NSA6ClassA8InternalD2Ev
+00000000 g DO *ABS* 00000000 SYMVEROPT_2 SYMVEROPT_2
+00001770 g DF .text 00000002 Base _ZN3NSA6ClassAD2Ev
+00003e8c w DO .data.rel.ro 0000003c Base _ZTVN3NSB6ClassDE
+00003e50 w DO .data.rel.ro 00000014 Base _ZTVN3NSA6ClassAE
+000019b0 g DF .text 00000002 Base _ZN3NSA6ClassA7Private11privmethod2Ei
+00001780 g DF .text 00000002 Base _ZNK3NSA6ClassA11generate_vtEPKc
+000017b0 g DF .text 0000004d Base _ZN3NSB6ClassDD2Ev
+00001960 g DF .text 00000002 Base _ZThn16_NK3NSB6ClassD11generate_vtEPKc
+00001780 g DF .text 00000002 Base _ZNK6ClassC11generate_vtEPKc
+00001800 g DF .text 00000007 Base _ZThn12_N3NSB6ClassDD1Ev
+00001af0 g DF .text 00000002 SYMVEROPT_2 _ZN3NSB14SymverOptionalC1Ev
+000017a0 g DF .text 00000002 Base _ZN6ClassCD2Ev
+00001b10 g DF .text 00000002 SYMVER_1 _ZN3NSB6Symver14symver_method1Ev
+00001750 g DF .text 00000002 Base _ZN3NSA6ClassA7PrivateD2Ev
+00001780 g DF .text 00000002 Base _ZNK6ClassB11generate_vtEPKc
+00001a20 g DF .text 0000001a Base _ZN6ClassBC1Ev
+00003e64 w DO .data.rel.ro 00000014 Base _ZTV6ClassB
+00003e78 w DO .data.rel.ro 00000014 Base _ZTV6ClassC
+00001b70 w DO .rodata 0000000e Base _ZTSN3NSA6ClassAE
+0000404c g D .data 00000000 Base _edata
+00001b40 w DO .rodata 00000016 Base _ZTSN3NSA6ClassA7PrivateE
+00001b90 w DO .rodata 0000000e Base _ZTSN3NSB6ClassDE
+000018b0 g DF .text 0000002a Base _ZN6ClassBD0Ev
+00003de0 w DO .data.rel.ro 00000008 Base _ZTIN3NSA6ClassA7PrivateE
+00001af0 g DF .text 00000002 SYMVEROPT_2 _ZN3NSB14SymverOptionalC2Ev
+000019c0 g DF .text 0000001a Base _ZN3NSA6ClassA8InternalC1Ev
+00001af0 g DF .text 00000002 SYMVER_1 _ZN3NSB6SymverC1Ev
+00004050 g D .bss 00000000 Base _end
+00001a00 g DF .text 0000001a Base _ZN3NSA6ClassAC1Ev
+00001b20 g DF .text 00000002 SYMVER_1 _ZN3NSB6Symver14symver_method2Ev
+00001a60 g DF .text 0000008c Base _ZN3NSB6ClassDC1Ev
+00001b58 w DO .rodata 00000017 Base _ZTSN3NSA6ClassA8InternalE
+00001a20 g DF .text 0000001a Base _ZN6ClassBC2Ev
+00001780 g DF .text 00000002 Base _ZNK3NSB6ClassD11generate_vtEPKc
+00001b00 g DF .text 00000002 SYMVEROPT_2 _ZN3NSB14SymverOptionalD1Ev
+00001880 g DF .text 0000002a Base _ZN3NSA6ClassAD0Ev
+00001a40 g DF .text 0000001a Base _ZN6ClassCC1Ev
+00001850 g DF .text 0000002a Base _ZN3NSA6ClassA8InternalD0Ev
+00003de8 w DO .data.rel.ro 00000008 Base _ZTIN3NSA6ClassA8InternalE
+0000404c g D .bss 00000000 Base __bss_start
+00003e08 w DO .data.rel.ro 00000028 Base _ZTIN3NSB6ClassDE
+00003df0 w DO .data.rel.ro 00000008 Base _ZTIN3NSA6ClassAE
+00001910 g DF .text 0000002a Base _ZN3NSB6ClassDD0Ev
+00001980 g DF .text 0000001a Base _ZN3NSA6ClassA7PrivateC1Ev
+00001b80 w DO .rodata 00000008 Base _ZTS6ClassB
+
+
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+00003dd8 R_386_RELATIVE *ABS*
+00003ddc R_386_RELATIVE *ABS*
+00004044 R_386_RELATIVE *ABS*
+00003de0 R_386_32 _ZTVN10__cxxabiv117__class_type_infoE@CXXABI_1.3
+00003de8 R_386_32 _ZTVN10__cxxabiv117__class_type_infoE@CXXABI_1.3
+00003df0 R_386_32 _ZTVN10__cxxabiv117__class_type_infoE@CXXABI_1.3
+00003df8 R_386_32 _ZTVN10__cxxabiv117__class_type_infoE@CXXABI_1.3
+00003e00 R_386_32 _ZTVN10__cxxabiv117__class_type_infoE@CXXABI_1.3
+00003de4 R_386_32 _ZTSN3NSA6ClassA7PrivateE@@Base
+00003dec R_386_32 _ZTSN3NSA6ClassA8InternalE@@Base
+00003df4 R_386_32 _ZTSN3NSA6ClassAE@@Base
+00003dfc R_386_32 _ZTS6ClassB@@Base
+00003e04 R_386_32 _ZTS6ClassC@@Base
+00003e08 R_386_32 _ZTVN10__cxxabiv121__vmi_class_type_infoE@CXXABI_1.3
+00003e0c R_386_32 _ZTSN3NSB6ClassDE@@Base
+00003e18 R_386_32 _ZTIN3NSA6ClassAE@@Base
+00003e54 R_386_32 _ZTIN3NSA6ClassAE@@Base
+00003e20 R_386_32 _ZTI6ClassB@@Base
+00003e68 R_386_32 _ZTI6ClassB@@Base
+00003e28 R_386_32 _ZTI6ClassC@@Base
+00003e7c R_386_32 _ZTI6ClassC@@Base
+00003e34 R_386_32 _ZTIN3NSA6ClassA7PrivateE@@Base
+00003e38 R_386_32 _ZN3NSA6ClassA7PrivateD1Ev@@Base
+00003e3c R_386_32 _ZN3NSA6ClassA7PrivateD0Ev@@Base
+00003e44 R_386_32 _ZTIN3NSA6ClassA8InternalE@@Base
+00003e48 R_386_32 _ZN3NSA6ClassA8InternalD1Ev@@Base
+00003e4c R_386_32 _ZN3NSA6ClassA8InternalD0Ev@@Base
+00003e58 R_386_32 _ZN3NSA6ClassAD1Ev@@Base
+00003e5c R_386_32 _ZN3NSA6ClassAD0Ev@@Base
+00003e60 R_386_32 _ZNK3NSA6ClassA11generate_vtEPKc@@Base
+00003e6c R_386_32 _ZN6ClassBD1Ev@@Base
+00003e70 R_386_32 _ZN6ClassBD0Ev@@Base
+00003e74 R_386_32 _ZNK6ClassB11generate_vtEPKc@@Base
+00003e80 R_386_32 _ZN6ClassCD1Ev@@Base
+00003e84 R_386_32 _ZN6ClassCD0Ev@@Base
+00003e88 R_386_32 _ZNK6ClassC11generate_vtEPKc@@Base
+00003e90 R_386_32 _ZTIN3NSB6ClassDE@@Base
+00003ea4 R_386_32 _ZTIN3NSB6ClassDE@@Base
+00003eb8 R_386_32 _ZTIN3NSB6ClassDE@@Base
+00003e94 R_386_32 _ZN3NSB6ClassDD1Ev@@Base
+00003e98 R_386_32 _ZN3NSB6ClassDD0Ev@@Base
+00003e9c R_386_32 _ZNK3NSB6ClassD11generate_vtEPKc@@Base
+00003ea8 R_386_32 _ZThn12_N3NSB6ClassDD1Ev@@Base
+00003eac R_386_32 _ZThn12_N3NSB6ClassDD0Ev@@Base
+00003eb0 R_386_32 _ZThn12_NK3NSB6ClassD11generate_vtEPKc@@Base
+00003ebc R_386_32 _ZThn16_N3NSB6ClassDD1Ev@@Base
+00003ec0 R_386_32 _ZThn16_N3NSB6ClassDD0Ev@@Base
+00003ec4 R_386_32 _ZThn16_NK3NSB6ClassD11generate_vtEPKc@@Base
+00003fd8 R_386_GLOB_DAT __cxa_finalize@GLIBC_2.1.3
+00003fdc R_386_GLOB_DAT _ZTVN3NSA6ClassA8InternalE@@Base
+00003fe0 R_386_GLOB_DAT _ZTVN3NSB6ClassDE@@Base
+00003fe4 R_386_GLOB_DAT _ZTVN3NSA6ClassAE@@Base
+00003fe8 R_386_GLOB_DAT _ZTV6ClassC@@Base
+00003fec R_386_GLOB_DAT _ZTV6ClassB@@Base
+00003ff0 R_386_GLOB_DAT _ITM_deregisterTMCloneTable
+00003ff4 R_386_GLOB_DAT _ZTVN3NSA6ClassA7PrivateE@@Base
+00003ff8 R_386_GLOB_DAT __gmon_start__
+00003ffc R_386_GLOB_DAT _ITM_registerTMCloneTable
+00004048 R_386_32 __gxx_personality_v0@CXXABI_1.3
+0000400c R_386_JUMP_SLOT _ZN6ClassBD1Ev@@Base
+00004010 R_386_JUMP_SLOT _ZN6ClassBD2Ev@@Base
+00004014 R_386_JUMP_SLOT _ZN3NSA6ClassA7PrivateD1Ev@@Base
+00004018 R_386_JUMP_SLOT _ZN3NSA6ClassAD1Ev@@Base
+0000401c R_386_JUMP_SLOT _ZN3NSA6ClassA8InternalD1Ev@@Base
+00004020 R_386_JUMP_SLOT _ZdlPvj@CXXABI_1.3.9
+00004024 R_386_JUMP_SLOT _ZN3NSB6ClassDD1Ev@@Base
+00004028 R_386_JUMP_SLOT _ZN6ClassCD2Ev@@Base
+0000402c R_386_JUMP_SLOT _ZN3NSA6ClassAC2Ev@@Base
+00004030 R_386_JUMP_SLOT _ZN6ClassBC2Ev@@Base
+00004034 R_386_JUMP_SLOT _ZN6ClassCC2Ev@@Base
+00004038 R_386_JUMP_SLOT _Unwind_Resume@GCC_3.0
+0000403c R_386_JUMP_SLOT _ZN3NSA6ClassAD2Ev@@Base
+00004040 R_386_JUMP_SLOT _ZN6ClassCD1Ev@@Base
+
+
diff --git a/scripts/t/Dpkg_Shlibs/objdump.space b/scripts/t/Dpkg_Shlibs/objdump.space
new file mode 100644
index 0000000..7ef3f90
--- /dev/null
+++ b/scripts/t/Dpkg_Shlibs/objdump.space
@@ -0,0 +1,8 @@
+
+phony-output: file format elf32-i386
+architecture: i386, flags 0x00000112:
+EXEC_P, HAS_SYMS, D_PAGED
+start address 0x08049b50
+
+DYNAMIC SYMBOL TABLE:
+00000000 DF *UND* 00000075 singlespace
diff --git a/scripts/t/Dpkg_Shlibs/objdump.spacesyms b/scripts/t/Dpkg_Shlibs/objdump.spacesyms
new file mode 100644
index 0000000..1b26af9
--- /dev/null
+++ b/scripts/t/Dpkg_Shlibs/objdump.spacesyms
@@ -0,0 +1,119 @@
+
+./t/Dpkg_Shlibs/libobjdump.spacesyms.so: file format elf32-i386
+architecture: i386, flags 0x00000150:
+HAS_SYMS, DYNAMIC, D_PAGED
+start address 0x00000770
+
+Program Header:
+ LOAD off 0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**12
+ filesz 0x00000d08 memsz 0x00000d08 flags r-x
+ LOAD off 0x00000f08 vaddr 0x00001f08 paddr 0x00001f08 align 2**12
+ filesz 0x00000198 memsz 0x0000019c flags rw-
+ DYNAMIC off 0x00000f10 vaddr 0x00001f10 paddr 0x00001f10 align 2**2
+ filesz 0x000000e0 memsz 0x000000e0 flags rw-
+ NOTE off 0x00000114 vaddr 0x00000114 paddr 0x00000114 align 2**2
+ filesz 0x00000024 memsz 0x00000024 flags r--
+EH_FRAME off 0x000009f8 vaddr 0x000009f8 paddr 0x000009f8 align 2**2
+ filesz 0x000000dc memsz 0x000000dc flags r--
+ STACK off 0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**4
+ filesz 0x00000000 memsz 0x00000000 flags rw-
+ RELRO off 0x00000f08 vaddr 0x00001f08 paddr 0x00001f08 align 2**0
+ filesz 0x000000f8 memsz 0x000000f8 flags r--
+
+Dynamic Section:
+ NEEDED libc.so.6
+ SONAME libspacesyms.so.1
+ INIT 0x00000724
+ FINI 0x000009e4
+ INIT_ARRAY 0x00001f08
+ INIT_ARRAYSZ 0x00000004
+ FINI_ARRAY 0x00001f0c
+ FINI_ARRAYSZ 0x00000004
+ GNU_HASH 0x00000138
+ STRTAB 0x0000037c
+ SYMTAB 0x000001ec
+ STRSZ 0x00000200
+ SYMENT 0x00000010
+ PLTGOT 0x00002000
+ REL 0x0000062c
+ RELSZ 0x000000f8
+ RELENT 0x00000008
+ VERDEF 0x000005b0
+ VERDEFNUM 0x00000003
+ VERNEED 0x0000060c
+ VERNEEDNUM 0x00000001
+ VERSYM 0x0000057c
+ RELCOUNT 0x0000000f
+
+Version definitions:
+1 0x01 0x026eb371 libspacesyms.so.1
+2 0x00 0x00000591 V1
+3 0x00 0x0df29ee1 VERY_LONG_VERSION_1
+ V1
+
+Version References:
+ required from libc.so.6:
+ 0x09691f73 0x00 04 GLIBC_2.1.3
+
+DYNAMIC SYMBOL TABLE:
+00000000 w D *UND* 00000000 _ITM_deregisterTMCloneTable
+00000000 w DF *UND* 00000000 GLIBC_2.1.3 __cxa_finalize
+00000000 w D *UND* 00000000 __gmon_start__
+00000000 w D *UND* 00000000 _ITM_registerTMCloneTable
+000008c0 g DF .text 00000002 Base symdefaultverSPA CEdefault
+000009e4 g DF .fini 00000000 Base _fini
+00002040 g DO .data 00000060 Base funcs
+00000724 g DF .init 00000000 Base _init
+00000980 g DF .text 00000002 V1 symshortvernospacedefault
+000020a0 g D .bss 00000000 Base __bss_start
+00000890 g DF .text 00000002 Base .protected symdefaultvernospaceprotected
+000020a4 g D .bss 00000000 Base _end
+000009c0 g DF .text 00000002 V1 symshortverSPA CEdefault
+00000000 g DO *ABS* 00000000 V1 V1
+000009a0 g DF .text 00000002 V1 .protected symshortvernospaceprotected
+00000900 g DF .text 00000002 VERY_LONG_VERSION_1 symlongvernospacedefault
+00000000 g DO *ABS* 00000000 VERY_LONG_VERSION_1 VERY_LONG_VERSION_1
+000020a0 g D .data 00000000 Base _edata
+00000870 g DF .text 00000002 Base symdefaultvernospacedefault
+00000960 g DF .text 00000002 VERY_LONG_VERSION_1 .protected symlongverSPA CEprotected
+000008e0 g DF .text 00000002 Base .protected symdefaultverSPA CEprotected
+00000940 g DF .text 00000002 VERY_LONG_VERSION_1 symlongverSPA CEdefault
+000009e0 g DF .text 00000002 V1 .protected symshortverSPA CEprotected
+00000920 g DF .text 00000002 VERY_LONG_VERSION_1 .protected symlongvernospaceprotected
+
+
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+00001f08 R_386_RELATIVE *ABS*
+00001f0c R_386_RELATIVE *ABS*
+00002020 R_386_RELATIVE *ABS*
+00002044 R_386_RELATIVE *ABS*
+0000204c R_386_RELATIVE *ABS*
+00002054 R_386_RELATIVE *ABS*
+0000205c R_386_RELATIVE *ABS*
+00002064 R_386_RELATIVE *ABS*
+0000206c R_386_RELATIVE *ABS*
+00002074 R_386_RELATIVE *ABS*
+0000207c R_386_RELATIVE *ABS*
+00002084 R_386_RELATIVE *ABS*
+0000208c R_386_RELATIVE *ABS*
+00002094 R_386_RELATIVE *ABS*
+0000209c R_386_RELATIVE *ABS*
+00001ff0 R_386_GLOB_DAT _ITM_deregisterTMCloneTable
+00001ff4 R_386_GLOB_DAT __cxa_finalize@GLIBC_2.1.3
+00001ff8 R_386_GLOB_DAT __gmon_start__
+00001ffc R_386_GLOB_DAT _ITM_registerTMCloneTable
+00002040 R_386_32 symdefaultvernospacedefault@@Base
+00002048 R_386_32 symdefaultvernospaceprotected@@Base
+00002050 R_386_32 symdefaultverSPA CEdefault@@Base
+00002058 R_386_32 symdefaultverSPA CEprotected@@Base
+00002060 R_386_32 symlongvernospacedefault@@VERY_LONG_VERSION_1
+00002068 R_386_32 symlongvernospaceprotected@@VERY_LONG_VERSION_1
+00002070 R_386_32 symlongverSPA CEdefault@@VERY_LONG_VERSION_1
+00002078 R_386_32 symlongverSPA CEprotected@@VERY_LONG_VERSION_1
+00002080 R_386_32 symshortvernospacedefault@@V1
+00002088 R_386_32 symshortvernospaceprotected@@V1
+00002090 R_386_32 symshortverSPA CEdefault@@V1
+00002098 R_386_32 symshortverSPA CEprotected@@V1
+
+
diff --git a/scripts/t/Dpkg_Shlibs/patterns.cpp b/scripts/t/Dpkg_Shlibs/patterns.cpp
new file mode 100644
index 0000000..eb41664
--- /dev/null
+++ b/scripts/t/Dpkg_Shlibs/patterns.cpp
@@ -0,0 +1,99 @@
+#define EXPORT(x) x {}
+
+namespace NSA {
+ class ClassA {
+ private:
+ class Private {
+ public:
+ Private();
+ virtual ~Private();
+ void privmethod1(int);
+ void privmethod2(int);
+ };
+ Private *p;
+ class Internal {
+ public:
+ Internal();
+ virtual ~Internal();
+ void internal_method1(char);
+ void internal_method2(char);
+ };
+ Internal *i;
+ public:
+ ClassA();
+ virtual ~ClassA();
+ virtual void generate_vt(const char *) const;
+ };
+
+ EXPORT(ClassA::Private::Private());
+ EXPORT(ClassA::Private::~Private());
+ EXPORT(void ClassA::Private::privmethod1(int));
+ EXPORT(void ClassA::Private::privmethod2(int));
+
+ EXPORT(ClassA::Internal::Internal());
+ EXPORT(ClassA::Internal::~Internal());
+ EXPORT(void ClassA::Internal::internal_method1(char));
+ EXPORT(void ClassA::Internal::internal_method2(char));
+
+ EXPORT(ClassA::ClassA());
+ EXPORT(ClassA::~ClassA());
+ EXPORT(void ClassA::generate_vt(const char *) const);
+};
+
+class ClassB {
+public:
+ ClassB();
+ virtual ~ClassB();
+ virtual void generate_vt(const char *) const;
+};
+
+EXPORT(ClassB::ClassB());
+EXPORT(ClassB::~ClassB());
+EXPORT(void ClassB::generate_vt(const char *) const);
+
+class ClassC {
+public:
+ ClassC();
+ virtual ~ClassC();
+ virtual void generate_vt(const char *) const;
+};
+
+EXPORT(ClassC::ClassC());
+EXPORT(ClassC::~ClassC());
+EXPORT(void ClassC::generate_vt(const char *) const);
+
+namespace NSB {
+ class ClassD : public NSA::ClassA, public ClassB, public ClassC {
+ public:
+ ClassD();
+ virtual ~ClassD();
+ virtual void generate_vt(const char *) const override;
+ };
+
+ EXPORT(ClassD::ClassD());
+ EXPORT(ClassD::~ClassD());
+ EXPORT(void ClassD::generate_vt(const char *) const);
+
+ class Symver {
+ public:
+ Symver();
+ ~Symver();
+
+ void symver_method1();
+ void symver_method2();
+ };
+
+ EXPORT(Symver::Symver());
+ EXPORT(Symver::~Symver());
+ EXPORT(void Symver::symver_method1());
+ EXPORT(void Symver::symver_method2());
+
+ class SymverOptional {
+ public:
+ SymverOptional();
+ ~SymverOptional();
+ };
+
+ EXPORT(SymverOptional::SymverOptional());
+ EXPORT(SymverOptional::~SymverOptional());
+};
diff --git a/scripts/t/Dpkg_Shlibs/patterns.map b/scripts/t/Dpkg_Shlibs/patterns.map
new file mode 100644
index 0000000..ace30b7
--- /dev/null
+++ b/scripts/t/Dpkg_Shlibs/patterns.map
@@ -0,0 +1,9 @@
+SYMVER_1 {
+ global:
+ _ZN3NSB6Symver*;
+};
+
+SYMVEROPT_2 {
+ global:
+ _ZN3NSB14SymverOptional*;
+};
diff --git a/scripts/t/Dpkg_Shlibs/patterns.symbols b/scripts/t/Dpkg_Shlibs/patterns.symbols
new file mode 100644
index 0000000..bacf799
--- /dev/null
+++ b/scripts/t/Dpkg_Shlibs/patterns.symbols
@@ -0,0 +1,47 @@
+libpatterns.so.1 libpatterns1 #MINVER#
+ (c++|regex|optional)NSA::ClassA::Private(::.*)?@Base 1.private
+ (c++)NSB::Symver::symver_method2()@SYMVER_1 1.method2
+ (symver|optional)SYMVEROPT_2 2
+ SYMVEROPT_2@SYMVEROPT_2 2
+ (c++|symver)SYMVER_1 1.generic
+ SYMVER_1@SYMVER_1 1
+ (regex|c++)^_Z(T[ISV])?N3NSA6ClassA8Internal.*@Base$ 1.internal
+ _ZN3NSA6ClassAC1Ev@Base 1
+ _ZN3NSA6ClassAC2Ev@Base 1
+ _ZN3NSA6ClassAD0Ev@Base 1
+ _ZN3NSA6ClassAD1Ev@Base 1
+ _ZN3NSA6ClassAD2Ev@Base 1
+ _ZN3NSB6ClassDC1Ev@Base 1
+ _ZN3NSB6ClassDC2Ev@Base 1
+ _ZN3NSB6ClassDD0Ev@Base 1
+ _ZN3NSB6ClassDD1Ev@Base 1
+ _ZN3NSB6ClassDD2Ev@Base 1
+ _ZN3NSB6Symver14symver_method1Ev@SYMVER_1 1.method1
+ _ZN6ClassBC1Ev@Base 1
+ _ZN6ClassBC2Ev@Base 1
+ _ZN6ClassBD0Ev@Base 1
+ _ZN6ClassBD1Ev@Base 1
+ _ZN6ClassBD2Ev@Base 1
+ _ZN6ClassCC1Ev@Base 1
+ _ZN6ClassCC2Ev@Base 1
+ _ZN6ClassCD0Ev@Base 1
+ _ZN6ClassCD1Ev@Base 1
+ _ZN6ClassCD2Ev@Base 1
+ _ZNK3NSA6ClassA11generate_vtEPKc@Base 1
+ _ZNK3NSB6ClassD11generate_vtEPKc@Base 1
+ _ZNK6ClassB11generate_vtEPKc@Base 1
+ _ZNK6ClassC11generate_vtEPKc@Base 1
+ _ZTI6ClassB@Base 1
+ _ZTI6ClassC@Base 1
+ _ZTIN3NSA6ClassAE@Base 1
+ _ZTIN3NSB6ClassDE@Base 1
+ _ZTS6ClassB@Base 1
+ _ZTS6ClassC@Base 1
+ _ZTSN3NSA6ClassAE@Base 1
+ _ZTSN3NSB6ClassDE@Base 1
+ _ZTV6ClassB@Base 1
+ _ZTV6ClassC@Base 1
+ _ZTVN3NSA6ClassAE@Base 1
+ _ZTVN3NSB6ClassDE@Base 1
+ (c++)"non-virtual thunk to NSB::ClassD::generate_vt(char const*) const@Base" 1
+ (c++)"non-virtual thunk to NSB::ClassD::~ClassD()@Base" 1
diff --git a/scripts/t/Dpkg_Shlibs/spacesyms-c-gen.pl b/scripts/t/Dpkg_Shlibs/spacesyms-c-gen.pl
new file mode 100755
index 0000000..48434f4
--- /dev/null
+++ b/scripts/t/Dpkg_Shlibs/spacesyms-c-gen.pl
@@ -0,0 +1,37 @@
+#!/usr/bin/perl
+#
+# spacesyms-c-gen.pl
+#
+# Output a C file that contains symbols matching the shell glob
+# sym{defaultver,longver,shortver}{nospace,SPACE}{default,hidden,protected,internal}
+# with symbol visibility matching the final element and at least one relocation
+# against each symbol.
+#
+# When used together with spacesyms-o-map.pl and spacesyms.map, makes a shared
+# object that contains symbols that covers all cases of:
+#
+# 1) has a short, long or Base version,
+# 2) has or does not have a space in the symbol name,
+# 3) default, hidden, protected or internal visibility.
+
+use strict;
+use warnings;
+
+my @symbols;
+
+foreach my $version (qw(defaultver longver shortver)) {
+ foreach my $space (qw(nospace SPACE)) {
+ foreach my $visibility (qw(default hidden protected internal)) {
+ my $symbol = "sym$version$space$visibility";
+ push @symbols, $symbol;
+ print "void $symbol(void) __attribute__((visibility(\"$visibility\")));\n";
+ print "void $symbol(void) {}\n";
+ }
+ }
+}
+
+print "void (*funcs[])(void) = {\n";
+foreach my $symbol (@symbols) {
+ print "$symbol,\n";
+}
+print "};\n";
diff --git a/scripts/t/Dpkg_Shlibs/spacesyms-o-map.pl b/scripts/t/Dpkg_Shlibs/spacesyms-o-map.pl
new file mode 100755
index 0000000..89a1caf
--- /dev/null
+++ b/scripts/t/Dpkg_Shlibs/spacesyms-o-map.pl
@@ -0,0 +1,25 @@
+#!/usr/bin/perl
+#
+# spacesyms-o-map.pl INPUT OUTPUT
+#
+# Copy the object file INPUT to OUTPUT, redefining any symbol in INPUT that
+# contains "SPACE" in its name to contain "SPA CE" instead.
+
+use strict;
+use warnings;
+
+my ($input, $output) = @ARGV;
+my @cmds = ('objcopy');
+
+open my $nm, '-|', 'nm', $input or die "cannot run nm: $!";
+while (<$nm>) {
+ next if not m/SPACE/;
+ chomp;
+ my $x = (split / /, $_, 3)[2];
+ my $y = $x =~ s/SPACE/SPA CE/r;
+ push @cmds, "--redefine-sym=$x=$y";
+}
+close $nm;
+
+push @cmds, $input, $output;
+exec @cmds;
diff --git a/scripts/t/Dpkg_Shlibs/spacesyms.map b/scripts/t/Dpkg_Shlibs/spacesyms.map
new file mode 100644
index 0000000..0053446
--- /dev/null
+++ b/scripts/t/Dpkg_Shlibs/spacesyms.map
@@ -0,0 +1,7 @@
+V1 {
+ global: symshortver*;
+};
+
+VERY_LONG_VERSION_1 {
+ global: symlongver*;
+} V1;
diff --git a/scripts/t/Dpkg_Shlibs/symbols.fake-1 b/scripts/t/Dpkg_Shlibs/symbols.fake-1
new file mode 100644
index 0000000..f0a230e
--- /dev/null
+++ b/scripts/t/Dpkg_Shlibs/symbols.fake-1
@@ -0,0 +1,3 @@
+ symbol1_fake1@Base 1.0
+ symbol2_fake1@Base 1.0
+ symbol3_fake1@Base 1.0
diff --git a/scripts/t/Dpkg_Shlibs/symbols.fake-2 b/scripts/t/Dpkg_Shlibs/symbols.fake-2
new file mode 100644
index 0000000..3eed289
--- /dev/null
+++ b/scripts/t/Dpkg_Shlibs/symbols.fake-2
@@ -0,0 +1,9 @@
+#include "symbols.include-2"
+# This is just a comment
+libfake.so.1 #PACKAGE# #MINVER#
+* Build-Depends-Package: libfake-dev
+# The alternate dependency is below
+| libvirtualfake
+ symbol1_fake2@Base 1.0 1
+ symbol2_fake2@Base 1.0
+ symbol3_fake2@Base 1.1
diff --git a/scripts/t/Dpkg_Shlibs/symbols.fake-3 b/scripts/t/Dpkg_Shlibs/symbols.fake-3
new file mode 100644
index 0000000..576bf22
--- /dev/null
+++ b/scripts/t/Dpkg_Shlibs/symbols.fake-3
@@ -0,0 +1,5 @@
+# if included, this file will change the current "object" parsed
+# after the include it will be libdivert.so.1 instead of the object
+# of the including symbols file
+libdivert.so.1 libdivert1 #MINVER#
+ divert_something@Base 1.0
diff --git a/scripts/t/Dpkg_Shlibs/symbols.include-1 b/scripts/t/Dpkg_Shlibs/symbols.include-1
new file mode 100644
index 0000000..b524e78
--- /dev/null
+++ b/scripts/t/Dpkg_Shlibs/symbols.include-1
@@ -0,0 +1,9 @@
+libfake.so.1 libfake1 #MINVER#
+ symbol1_fake1@Base 0.9
+ symbol2_fake1@Base 0.9
+ symbol_before@Base 0.9
+#include "symbols.fake-1"
+ symbol3_fake1@Base 0
+ symbol_after@Base 1.1
+#include "symbols.fake-3"
+ symbol_in_libdivert@Base 1.0~beta1
diff --git a/scripts/t/Dpkg_Shlibs/symbols.include-2 b/scripts/t/Dpkg_Shlibs/symbols.include-2
new file mode 100644
index 0000000..0cc18fa
--- /dev/null
+++ b/scripts/t/Dpkg_Shlibs/symbols.include-2
@@ -0,0 +1,3 @@
+libfake.so.1 libfake1
+ symbol1_fake2@Base 0.5
+#include "symbols.fake-2"
diff --git a/scripts/t/Dpkg_Shlibs/symbols.include-3 b/scripts/t/Dpkg_Shlibs/symbols.include-3
new file mode 100644
index 0000000..8c8f429
--- /dev/null
+++ b/scripts/t/Dpkg_Shlibs/symbols.include-3
@@ -0,0 +1,5 @@
+libbasictags.so.2 libbasictags2
+ symbol0_before@Base 1.0
+(optional|random tag=random value)#include "symbols.fake-1"
+ symbol9_after@Base 1.0
+(optional=from parent|t=v)#include "basictags.symbols"
diff --git a/scripts/t/Dpkg_Shlibs/symbols.internal b/scripts/t/Dpkg_Shlibs/symbols.internal
new file mode 100644
index 0000000..a6d3dd6
--- /dev/null
+++ b/scripts/t/Dpkg_Shlibs/symbols.internal
@@ -0,0 +1,4 @@
+ .gomp_critical_user_foo@Base 2.0
+ .gomp_critical_user_bar@Base 2.0
+ __aeabi_lcmp@GCC_3.0 3.0
+ __aeabi_unknown@GCC_4.0 4.0
diff --git a/scripts/t/Dpkg_Shlibs/symbols.internal-allow b/scripts/t/Dpkg_Shlibs/symbols.internal-allow
new file mode 100644
index 0000000..ea40815
--- /dev/null
+++ b/scripts/t/Dpkg_Shlibs/symbols.internal-allow
@@ -0,0 +1,3 @@
+libinternal.so.0 libinternal0 #MINVER#
+(allow-internal)#include "symbols.internal"
+ symbol@Base 1.0
diff --git a/scripts/t/Dpkg_Shlibs/symbols.internal-allow-groups b/scripts/t/Dpkg_Shlibs/symbols.internal-allow-groups
new file mode 100644
index 0000000..e4492ec
--- /dev/null
+++ b/scripts/t/Dpkg_Shlibs/symbols.internal-allow-groups
@@ -0,0 +1,4 @@
+libinternal.so.0 libinternal0 #MINVER#
+* Allow-Internal-Symbol-Groups: aeabi gomp
+#include "symbols.internal"
+ symbol@Base 1.0
diff --git a/scripts/t/Dpkg_Shlibs/symbols.internal-filter b/scripts/t/Dpkg_Shlibs/symbols.internal-filter
new file mode 100644
index 0000000..26e902f
--- /dev/null
+++ b/scripts/t/Dpkg_Shlibs/symbols.internal-filter
@@ -0,0 +1,3 @@
+libinternal.so.0 libinternal0 #MINVER#
+#include "symbols.internal"
+ symbol@Base 1.0
diff --git a/scripts/t/Dpkg_Shlibs_Cppfilt.t b/scripts/t/Dpkg_Shlibs_Cppfilt.t
new file mode 100644
index 0000000..6a76977
--- /dev/null
+++ b/scripts/t/Dpkg_Shlibs_Cppfilt.t
@@ -0,0 +1,90 @@
+#!/usr/bin/perl
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use Test::More;
+use Test::Dpkg qw(:needs);
+
+test_needs_command('c++filt');
+
+plan tests => 124;
+
+use_ok('Dpkg::Shlibs::Cppfilt');
+
+# Simple C++ demangling tests
+is ( cppfilt_demangle_cpp('_ZNSt10istrstreamC1EPKcl'),
+ 'std::istrstream::istrstream(char const*, long)',
+ 'demangle symbol' );
+is ( cppfilt_demangle_cpp('_ZNSt10istrstreamC1EPKcl@Base'),
+ 'std::istrstream::istrstream(char const*, long)@Base',
+ 'demangle symbol with extra postfix' );
+is ( cppfilt_demangle_cpp('foobar _ZNSt10istrstreamC1EPKcl@Base'),
+ 'foobar std::istrstream::istrstream(char const*, long)@Base',
+ 'demangle symbol with garbage around it' );
+is ( cppfilt_demangle_cpp('FoobarInvalidSymbol'), undef,
+ 'non-demanglable string' );
+
+# Mass C++ demangling. Checking if c++filt does not hang and cppfilt_demangle()
+# immediately provides a correct answer to the caller (i.e. no buffering).
+my @mangledtext = split(/\n+/s, <<'END');
+0000000000000000 DF *UND* 0000000000000000 GCC_3.0 _Unwind_SetIP
+0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 __towlower_l
+0000000000000000 DO *UND* 0000000000000000 GLIBC_2.2.5 stdout
+0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 wmemset
+0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 fflush
+0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 getc
+0000000000000000 w D *UND* 0000000000000000 pthread_join
+00000000000cfc22 g DO .rodata 0000000000000001 GLIBCXX_3.4 _ZNSt14numeric_limitsIyE17has_signaling_NaNE
+0000000000088d80 w DF .text 0000000000000064 GLIBCXX_3.4 _ZNSt11__timepunctIcEC2Em
+00000000002f40a0 w DO .data.rel.ro 0000000000000020 GLIBCXX_3.4 _ZTTSt14basic_ifstreamIwSt11char_traitsIwEE
+000000000005a5f0 g DF .text 0000000000000063 GLIBCXX_3.4.11 _ZNVSt9__atomic011atomic_flag5clearESt12memory_order
+00000000000bdc20 w DF .text 0000000000000024 GLIBCXX_3.4 _ZNSbIwSt11char_traitsIwESaIwEEC1EPKwmRKS1_
+0000000000063850 g DF .text 0000000000000062 GLIBCXX_3.4 _ZNSt5ctypeIwED2Ev
+00000000000898b0 w DF .text 0000000000000255 GLIBCXX_3.4 _ZNKSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES3_RSt8ios_basecPK2tmPKcSB_
+
+00000000000bff30 g DF .text 0000000000000019 _ZNSt18condition_variable10notify_oneEv@GLIBCXX_3.4.11
+00000000000666a0 g DF .text 000000000000003f _ZNKSt3tr14hashIRKSbIwSt11char_traitsIwESaIwEEEclES6_@GLIBCXX_3.4.10
+00000000002f6160 w DO .data.rel.ro 0000000000000050 _ZTTSt18basic_stringstreamIcSt11char_traitsIcESaIcEE@GLIBCXX_3.4
+END
+
+my @demangledtext = split(/\n+/s, <<'END');
+0000000000000000 DF *UND* 0000000000000000 GCC_3.0 _Unwind_SetIP
+0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 __towlower_l
+0000000000000000 DO *UND* 0000000000000000 GLIBC_2.2.5 stdout
+0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 wmemset
+0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 fflush
+0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 getc
+0000000000000000 w D *UND* 0000000000000000 pthread_join
+00000000000cfc22 g DO .rodata 0000000000000001 GLIBCXX_3.4 std::numeric_limits<unsigned long long>::has_signaling_NaN
+0000000000088d80 w DF .text 0000000000000064 GLIBCXX_3.4 std::__timepunct<char>::__timepunct(unsigned long)
+00000000002f40a0 w DO .data.rel.ro 0000000000000020 GLIBCXX_3.4 VTT for std::basic_ifstream<wchar_t, std::char_traits<wchar_t> >
+000000000005a5f0 g DF .text 0000000000000063 GLIBCXX_3.4.11 std::__atomic0::atomic_flag::clear(std::memory_order) volatile
+00000000000bdc20 w DF .text 0000000000000024 GLIBCXX_3.4 std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::basic_string(wchar_t const*, unsigned long, std::allocator<wchar_t> const&)
+0000000000063850 g DF .text 0000000000000062 GLIBCXX_3.4 std::ctype<wchar_t>::~ctype()
+00000000000898b0 w DF .text 0000000000000255 GLIBCXX_3.4 std::time_put<char, std::ostreambuf_iterator<char, std::char_traits<char> > >::put(std::ostreambuf_iterator<char, std::char_traits<char> >, std::ios_base&, char, tm const*, char const*, char const*) const
+
+00000000000bff30 g DF .text 0000000000000019 std::condition_variable::notify_one()@GLIBCXX_3.4.11
+00000000000666a0 g DF .text 000000000000003f std::tr1::hash<std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&>::operator()(std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&) const@GLIBCXX_3.4.10
+00000000002f6160 w DO .data.rel.ro 0000000000000050 VTT for std::basic_stringstream<char, std::char_traits<char>, std::allocator<char> >@GLIBCXX_3.4
+END
+
+for my $try (1 .. 7) {
+ for my $i (0 .. $#mangledtext) {
+ my $demangled = cppfilt_demangle_cpp($mangledtext[$i]) || $mangledtext[$i];
+ is($demangled, $demangledtext[$i], "mass c++ demangling (${try}x" . (${i} + 1) . ')');
+ }
+}
diff --git a/scripts/t/Dpkg_Source_Archive.t b/scripts/t/Dpkg_Source_Archive.t
new file mode 100644
index 0000000..4e77aef
--- /dev/null
+++ b/scripts/t/Dpkg_Source_Archive.t
@@ -0,0 +1,124 @@
+#!/usr/bin/perl
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use Test::More tests => 4;
+use Test::Dpkg qw(:paths);
+
+use File::Spec;
+use File::Path qw(make_path);
+
+BEGIN {
+ use_ok('Dpkg::Source::Archive');
+}
+
+use Dpkg;
+use Dpkg::File;
+
+my $tmpdir = test_get_temp_path();
+
+sub test_path_escape
+{
+ my $name = shift;
+
+ my $treedir = File::Spec->rel2abs("$tmpdir/$name-tree");
+ my $overdir = File::Spec->rel2abs("$tmpdir/$name-overlay");
+ my $outdir = "$tmpdir/$name-out";
+ my $expdir = "$tmpdir/$name-exp";
+
+ # This is the base directory, where we are going to be extracting stuff
+ # into, which include traps.
+ make_path("$treedir/subdir-a");
+ file_touch("$treedir/subdir-a/file-a");
+ file_touch("$treedir/subdir-a/file-pre-a");
+ make_path("$treedir/subdir-b");
+ file_touch("$treedir/subdir-b/file-b");
+ file_touch("$treedir/subdir-b/file-pre-b");
+ symlink File::Spec->abs2rel($outdir, $treedir), "$treedir/symlink-escape";
+ symlink File::Spec->abs2rel("$outdir/nonexistent", $treedir), "$treedir/symlink-nonexistent";
+ symlink "$treedir/file", "$treedir/symlink-within";
+ file_touch("$treedir/supposed-dir");
+
+ # This is the overlay directory, which we'll pack and extract over the
+ # base directory.
+ make_path($overdir);
+ make_path("$overdir/subdir-a/aa");
+ file_dump("$overdir/subdir-a/aa/file-aa", 'aa');
+ file_dump("$overdir/subdir-a/file-a", 'a');
+ make_path("$overdir/subdir-b/bb");
+ file_dump("$overdir/subdir-b/bb/file-bb", 'bb');
+ file_dump("$overdir/subdir-b/file-b", 'b');
+ make_path("$overdir/symlink-escape");
+ file_dump("$overdir/symlink-escape/escaped-file", 'escaped');
+ file_dump("$overdir/symlink-nonexistent", 'nonexistent');
+ make_path("$overdir/symlink-within");
+ make_path("$overdir/supposed-dir");
+ file_dump("$overdir/supposed-dir/supposed-file", 'something');
+
+ # Generate overlay tar.
+ system($Dpkg::PROGTAR, '-cf', "$overdir.tar", '-C', $overdir, qw(
+ subdir-a subdir-b
+ symlink-escape/escaped-file symlink-nonexistent symlink-within
+ supposed-dir
+ )) == 0
+ or die "cannot create overlay tar archive\n";
+
+ # This is the expected directory, which we'll be comparing against.
+ make_path($expdir);
+ system('cp', '-a', $overdir, $expdir) == 0
+ or die "cannot copy overlay hierarchy into expected directory\n";
+
+ # Store the expected and out reference directories into a tar to compare
+ # its structure against the result reference.
+ system($Dpkg::PROGTAR, '-cf', "$expdir.tar", '-C', $overdir, qw(
+ subdir-a subdir-b
+ symlink-escape/escaped-file symlink-nonexistent symlink-within
+ supposed-dir
+ ), '-C', $treedir, qw(
+ subdir-a/file-pre-a
+ subdir-b/file-pre-b
+ )) == 0
+ or die "cannot create expected tar archive\n";
+
+ # This directory is supposed to remain empty, anything inside implies a
+ # directory traversal.
+ make_path($outdir);
+
+ my $warnseen;
+ local $SIG{__WARN__} = sub { $warnseen = $_[0] };
+
+ # Perform the extraction.
+ my $tar = Dpkg::Source::Archive->new(filename => "$overdir.tar");
+ $tar->extract($treedir, in_place => 1);
+
+ # Store the result into a tar to compare its structure against a reference.
+ system($Dpkg::PROGTAR, '-cf', "$treedir.tar", '-C', $treedir, '.');
+
+ # Check results
+ ok(length $warnseen && $warnseen =~ m/points outside source root/,
+ 'expected warning seen');
+ ok(system($Dpkg::PROGTAR, '--compare', '-f', "$expdir.tar", '-C', $treedir) == 0,
+ 'expected directory matches');
+ ok(! -e "$outdir/escaped-file",
+ 'expected output directory is empty, directory traversal');
+}
+
+test_path_escape('in-place');
+
+# TODO: Add actual test cases.
+
+1;
diff --git a/scripts/t/Dpkg_Source_Format.t b/scripts/t/Dpkg_Source_Format.t
new file mode 100644
index 0000000..780ed17
--- /dev/null
+++ b/scripts/t/Dpkg_Source_Format.t
@@ -0,0 +1,65 @@
+#!/usr/bin/perl
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use Test::More tests => 14;
+
+BEGIN {
+ use_ok('Dpkg::Source::Format');
+}
+
+my $format = Dpkg::Source::Format->new();
+my @format_parts;
+my $format_string;
+
+$format->set('4.3 (variant)');
+@format_parts = $format->get();
+is_deeply(\@format_parts, [ qw(4 3 variant) ], 'decomposition of format');
+$format_string = $format->get();
+ok($format_string eq '4.3 (variant)', 'function stringification of format');
+$format_string = "$format";
+ok($format_string eq '4.3 (variant)', 'operator stringification of format');
+
+$format->set('5.5');
+$format_string = $format->get();
+ok($format_string eq '5.5', 'missing variant');
+
+$format->set('6');
+$format_string = $format->get();
+ok($format_string eq '6.0', 'implied minor');
+
+my %format_bogus = (
+ 'a' => 'require numerical major',
+ '7.a' => 'require numerical minor',
+ '.5' => 'require non-empty major',
+ '7.' => 'require non-empty minor',
+ '7.0 ()' => 'require non-empty variant',
+ '7.0 ( )' => 'require non-space variant',
+ '7.0 (VARIANT)' => 'require lower-case variant',
+ '7.6.5' => 'excess version part',
+);
+
+foreach my $format_bogus (sort keys %format_bogus) {
+ eval {
+ $format->set($format_bogus);
+ };
+ ok($@, $format_bogus{$format_bogus});
+};
+
+# TODO: Add actual test cases.
+
+1;
diff --git a/scripts/t/Dpkg_Source_Functions.t b/scripts/t/Dpkg_Source_Functions.t
new file mode 100644
index 0000000..003d2df
--- /dev/null
+++ b/scripts/t/Dpkg_Source_Functions.t
@@ -0,0 +1,27 @@
+#!/usr/bin/perl
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use Test::More tests => 1;
+
+BEGIN {
+ use_ok('Dpkg::Source::Functions');
+}
+
+# TODO: Add actual test cases.
+
+1;
diff --git a/scripts/t/Dpkg_Source_Package.t b/scripts/t/Dpkg_Source_Package.t
new file mode 100644
index 0000000..a61a5cf
--- /dev/null
+++ b/scripts/t/Dpkg_Source_Package.t
@@ -0,0 +1,64 @@
+#!/usr/bin/perl
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use Test::More;
+use Test::Dpkg qw(:paths :needs);
+
+use File::Compare;
+
+use Dpkg::ErrorHandling;
+use Dpkg::OpenPGP::ErrorCodes;
+
+test_needs_openpgp_backend();
+
+plan tests => 6;
+
+use_ok('Dpkg::Source::Package');
+
+report_options(quiet_warnings => 1);
+
+my $datadir = test_get_data_path();
+my $tmpdir = test_get_temp_path();
+my $ascfile;
+
+my $p = Dpkg::Source::Package->new();
+
+$ascfile = "$tmpdir/package_1.0.orig.tar.enoent";
+is($p->armor_original_tarball_signature("$datadir/nonexistent", $ascfile),
+ undef, 'no conversion of inexistent file');
+
+$ascfile = "$tmpdir/package_1.0.orig.tar.sig2asc";
+is($p->armor_original_tarball_signature("$datadir/package_1.0.orig.tar.sig", $ascfile),
+ OPENPGP_OK, 'conversion from binary sig to armored asc');
+
+ok(compare($ascfile, "$datadir/package_1.0.orig.tar.asc") == 0,
+ 'binary signature converted to OpenPGP ASCII Armor');
+
+# Grab the output messages.
+eval {
+ $ascfile = "$tmpdir/package_1.0.orig.tar.asc2asc";
+ is($p->armor_original_tarball_signature("$datadir/package_1.0.orig.tar.asc", $ascfile),
+ OPENPGP_OK, 'copy instead of converting already armored input');
+};
+
+ok(compare($ascfile, "$datadir/package_1.0.orig.tar.asc") == 0,
+ 'OpenPGP ASCII Armor copied to destination');
+
+# TODO: Add actual test cases.
+
+1;
diff --git a/scripts/t/Dpkg_Source_Package/package_1.0.orig.tar b/scripts/t/Dpkg_Source_Package/package_1.0.orig.tar
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/scripts/t/Dpkg_Source_Package/package_1.0.orig.tar
diff --git a/scripts/t/Dpkg_Source_Package/package_1.0.orig.tar.asc b/scripts/t/Dpkg_Source_Package/package_1.0.orig.tar.asc
new file mode 100644
index 0000000..06f2ab0
--- /dev/null
+++ b/scripts/t/Dpkg_Source_Package/package_1.0.orig.tar.asc
@@ -0,0 +1,16 @@
+-----BEGIN PGP SIGNATURE-----
+
+iQIzBAABCgAdFiEETz509DYFDBD1aWV0uXK/PqSuV6MFAlnijuMACgkQuXK/PqSu
+V6Oiuw/+P0+5BMH/WfsyhDrykF90tp2q6+eQvbgny8Mo1SJT647cS0bXFrZqd1Zr
+22hFouKLbbqmJVm7GqIyWzg6mWvRJ85tvKMhwaUHiNKBrwOguw6crk8TdRidvS1p
+m7E70wYdoPGvLt0Sr7nDWyaj82r3QkqTWTMxiD9jD4Z3w5Ztz08rpho6CJcGcAlv
+09WGRVo+AiQLDRT70T7598lilHviFNGJdC9sVOrkEyFVDJZirnTvqXgqTJAy5Lve
+DjTnfYAzmivtsQUXkYIj31XWLsiFa5mfpl6FSmFUSBPXALO++sZrL+mQZoUqnBv/
+bxCg3RYbPA6dpZ9IB/gyAvvEOEECeA4v5gDqGn67FeZsALPOEhvAYclkMtLOQBxr
+sJD9GPCQtT2QfObmaUlqabXASNjzguayprh+a8CJChyBKWSvn6LoSdsBzesPT/bh
+DJenc5M9jvIVShiwqQYCdYotebdKYDIvelblz0TbaTs5RZNGrizgj4Mrl0CaKVHs
+51M8Vpb+w1TM+jm3b+5Na+v9TuS0TxGKI1FTyfjZMjF92AF3A13KanSWMg+37eE1
+R1R4pPuJ2s4xYULQNh+BTHlrGso43nxzc2gkJbsPRa6n3fZFRVdYfkIJgv4kzaQD
+Lgsnhzrz1onBWvfnFWlJaRZ/ti4/3EEHAFvt25ZLMyJC2WOCG4I=
+=N2cG
+-----END PGP SIGNATURE-----
diff --git a/scripts/t/Dpkg_Source_Package/package_1.0.orig.tar.sig b/scripts/t/Dpkg_Source_Package/package_1.0.orig.tar.sig
new file mode 100644
index 0000000..a15acec
--- /dev/null
+++ b/scripts/t/Dpkg_Source_Package/package_1.0.orig.tar.sig
Binary files differ
diff --git a/scripts/t/Dpkg_Source_Patch.t b/scripts/t/Dpkg_Source_Patch.t
new file mode 100644
index 0000000..aa5d437
--- /dev/null
+++ b/scripts/t/Dpkg_Source_Patch.t
@@ -0,0 +1,74 @@
+#!/usr/bin/perl
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use Test::More tests => 10;
+use Test::Dpkg qw(:paths);
+
+use File::Path qw(make_path);
+
+BEGIN {
+ use_ok('Dpkg::Source::Patch');
+}
+
+my $datadir = test_get_data_path();
+my $tmpdir = test_get_temp_path();
+
+sub test_patch_escape {
+ my ($name, $symlink, $patchname, $desc) = @_;
+
+ make_path("$tmpdir/$name-tree");
+ make_path("$tmpdir/$name-out");
+ symlink "../$name-out", "$tmpdir/$name-tree/$symlink";
+
+ my $patch = Dpkg::Source::Patch->new(filename => "$datadir/$patchname");
+ eval {
+ $patch->apply("$tmpdir/$name-tree", verbose => 0);
+ };
+ ok(rmdir "$tmpdir/$name-out", $desc);
+}
+
+# This is CVE-2014-0471 with GNU patch >= 2.7
+test_patch_escape('c-style-parsed', "\tmp", 'c-style.patch',
+ 'patch(1) prevents escape using known c-style encoded filename');
+
+# This is CVE-2014-0471 with GNU patch < 2.7
+test_patch_escape('c-style-unknown', '\\tmp', 'c-style.patch',
+ 'patch(1) prevents escape using unknown c-style encoded filename');
+
+# This is CVE-2014-3865
+test_patch_escape('index-alone', 'symlink', 'index-alone.patch',
+ 'patch(1) prevents escape using Index: w/o ---/+++ header');
+test_patch_escape('index-+++', 'symlink', 'index-+++.patch',
+ 'patch(1) prevents escape using Index: w/ only +++ header');
+test_patch_escape('index-inert', 'symlink', 'index-inert.patch',
+ 'patch(1) should not fail to apply using an inert Index:');
+ok(-e "$tmpdir/index-inert-tree/inert-file",
+ 'patch(1) applies correctly with inert Index:');
+
+# This is CVE-2014-3864
+test_patch_escape('partial', 'symlink', 'partial.patch',
+ 'patch(1) prevents escape using partial +++ header');
+
+test_patch_escape('ghost-hunk', 'symlink', 'ghost-hunk.patch',
+ 'patch(1) prevents escape using a disabling hunk');
+
+# This is CVE-2017-8283
+test_patch_escape('indent-header', 'symlink', 'indent-header.patch',
+ 'patch(1) prevents escape using indented hunks');
+
+1;
diff --git a/scripts/t/Dpkg_Source_Patch/c-style.patch b/scripts/t/Dpkg_Source_Patch/c-style.patch
new file mode 100644
index 0000000..290a640
--- /dev/null
+++ b/scripts/t/Dpkg_Source_Patch/c-style.patch
@@ -0,0 +1,4 @@
+--- /dev/null
++++ "b/\tmp/c-style"
+@@ -0,0 +1 @@
++Escaped
diff --git a/scripts/t/Dpkg_Source_Patch/ghost-hunk.patch b/scripts/t/Dpkg_Source_Patch/ghost-hunk.patch
new file mode 100644
index 0000000..32c3efe
--- /dev/null
+++ b/scripts/t/Dpkg_Source_Patch/ghost-hunk.patch
@@ -0,0 +1,7 @@
+--- a/disable/partial-file
++++ b/disable/partial-file
+@@ -0,0 +1,1 @@disable
++++ b/symlink/hunk-file
+--- a/symlink/hunk-file
+@@ -0,0 +1,1 @@
++Escaped
diff --git a/scripts/t/Dpkg_Source_Patch/indent-header.patch b/scripts/t/Dpkg_Source_Patch/indent-header.patch
new file mode 100644
index 0000000..4bef008
--- /dev/null
+++ b/scripts/t/Dpkg_Source_Patch/indent-header.patch
@@ -0,0 +1,9 @@
+ --- /dev/null
+ +++ b/symlink/index-file
+ @@ -0,0 +1,1 @@
+ +Escaped
+
+--- /dev/null
++++ b/dummy-file
+@@ -0,0 +1,1 @@
++Dummy to make the code see a valid hunk
diff --git a/scripts/t/Dpkg_Source_Patch/index-+++.patch b/scripts/t/Dpkg_Source_Patch/index-+++.patch
new file mode 100644
index 0000000..4ebc23e
--- /dev/null
+++ b/scripts/t/Dpkg_Source_Patch/index-+++.patch
@@ -0,0 +1,4 @@
+Index: index/symlink/index-file
++++
+@@ -0,0 +1,1 @@
++Escaped
diff --git a/scripts/t/Dpkg_Source_Patch/index-alone.patch b/scripts/t/Dpkg_Source_Patch/index-alone.patch
new file mode 100644
index 0000000..904d3d1
--- /dev/null
+++ b/scripts/t/Dpkg_Source_Patch/index-alone.patch
@@ -0,0 +1,3 @@
+Index: index/symlink/index-file
+@@ -0,0 +1,1 @@
++Escaped
diff --git a/scripts/t/Dpkg_Source_Patch/index-inert.patch b/scripts/t/Dpkg_Source_Patch/index-inert.patch
new file mode 100644
index 0000000..5d16c7d
--- /dev/null
+++ b/scripts/t/Dpkg_Source_Patch/index-inert.patch
@@ -0,0 +1,8 @@
+This could be a comment about the patch itself, where we could use an
+Index: a/ header with /../ inside that could be interpreted as a
+malicious pseudo-header, so we should not validate it,
+
+--- /dev/null
++++ b/inert-file
+@@ -0,0 +1,1 @@
++Inert
diff --git a/scripts/t/Dpkg_Source_Patch/partial.patch b/scripts/t/Dpkg_Source_Patch/partial.patch
new file mode 100644
index 0000000..0878858
--- /dev/null
+++ b/scripts/t/Dpkg_Source_Patch/partial.patch
@@ -0,0 +1,3 @@
++++ b/symlink/partial-file
+@@ -0,0 +1,1 @@
++Escaped
diff --git a/scripts/t/Dpkg_Source_Quilt.t b/scripts/t/Dpkg_Source_Quilt.t
new file mode 100644
index 0000000..96c3be0
--- /dev/null
+++ b/scripts/t/Dpkg_Source_Quilt.t
@@ -0,0 +1,38 @@
+#!/usr/bin/perl
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use Test::More tests => 2;
+use Test::Dpkg qw(:paths);
+
+BEGIN {
+ use_ok('Dpkg::Source::Quilt');
+}
+
+my $datadir = test_get_data_path();
+
+my $quilt;
+my (@series_got, @series_exp);
+
+$quilt = Dpkg::Source::Quilt->new("$datadir/parse");
+@series_got = $quilt->series();
+@series_exp = qw(change-a.patch change-b.patch change-c.patch change-d.patch);
+is_deeply(\@series_got, \@series_exp, 'Parsed series file matches ref');
+
+# TODO: Add actual test cases.
+
+1;
diff --git a/scripts/t/Dpkg_Source_Quilt/parse/debian/patches/series b/scripts/t/Dpkg_Source_Quilt/parse/debian/patches/series
new file mode 100644
index 0000000..6d9fbf5
--- /dev/null
+++ b/scripts/t/Dpkg_Source_Quilt/parse/debian/patches/series
@@ -0,0 +1,9 @@
+ # Comment-only line
+ change-a.patch -p1
+
+ # Blank line with comments
+ change-b.patch
+ change-c.patch -p1
+ change-d.patch
+
+# End comment
diff --git a/scripts/t/Dpkg_Substvars.t b/scripts/t/Dpkg_Substvars.t
new file mode 100644
index 0000000..e3f9354
--- /dev/null
+++ b/scripts/t/Dpkg_Substvars.t
@@ -0,0 +1,192 @@
+#!/usr/bin/perl
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use Test::More tests => 52;
+use Test::Dpkg qw(:paths);
+
+use Dpkg ();
+use Dpkg::Arch qw(get_host_arch);
+
+$ENV{DEB_BUILD_ARCH} = 'amd64';
+$ENV{DEB_HOST_ARCH} = 'amd64';
+
+use_ok('Dpkg::Substvars');
+
+my $datadir = test_get_data_path();
+
+my $expected;
+
+my $s = Dpkg::Substvars->new();
+
+$s->load("$datadir/substvars1");
+
+# simple value tests
+is($s->get('var1'), 'Some value', 'var1');
+is($s->get('var2'), 'Some other value', 'var2');
+is($s->get('var3'), 'Yet another value', 'var3');
+is($s->get('var4'), undef, 'no var4');
+is($s->get('optional-var5'), 'Optionally used value', 'optional-var5');
+
+# Set automatic variable
+$s->set_as_auto('var_auto', 'auto');
+is($s->get('var_auto'), 'auto', 'get var_auto');
+
+$expected = <<'VARS';
+optional-var5?=Optionally used value
+var1=Some value
+var2=Some other value
+var3=Yet another value
+VARS
+is($s->output(), $expected, 'No automatic variables output');
+
+# overriding
+$s->set('var1', 'New value');
+is($s->get('var1'), 'New value', 'var1 updated');
+
+# deleting
+$s->delete('var3');
+is($s->get('var3'), undef, 'var3 deleted');
+
+# default variables
+is($s->get('Newline'), "\n", 'newline');
+is($s->get('Space'), ' ', 'space');
+is($s->get('Tab'), "\t", 'tab');
+is($s->get('dpkg:Version'), $Dpkg::PROGVERSION, 'dpkg version 1');
+
+# special variables
+is($s->get('Arch'), undef, 'no arch');
+$s->set_arch_substvars();
+is($s->get('Arch'), get_host_arch(), 'arch');
+
+is($s->get('vendor:Id'), undef, 'no vendor id');
+is($s->get('vendor:Name'), undef, 'no vendor name');
+$s->set_vendor_substvars();
+is($s->get('vendor:Id'), 'debian', 'vendor id');
+is($s->get('vendor:Name'), 'Debian', 'vendor name');
+
+is($s->get($_), undef, 'no ' . $_) for qw/binary:Version source:Version source:Upstream-Version/;
+$s->set_version_substvars('1:2.3.4~5-6.7.8~nmu9', '1:2.3.4~5-6.7.8~nmu9+bin0');
+is($s->get('binary:Version'), '1:2.3.4~5-6.7.8~nmu9+bin0', 'binary:Version');
+is($s->get('source:Version'), '1:2.3.4~5-6.7.8~nmu9', 'source:Version');
+is($s->get('source:Upstream-Version'), '1:2.3.4~5', 'source:Upstream-Version');
+$s->set_version_substvars('2.3.4~5-6.7.8~nmu9+b1', '1:2.3.4~5-6.7.8~nmu9+b1');
+is($s->get('binary:Version'), '1:2.3.4~5-6.7.8~nmu9+b1', 'binary:Version');
+is($s->get('source:Version'), '2.3.4~5-6.7.8~nmu9', 'source:Version');
+is($s->get('source:Upstream-Version'), '2.3.4~5', 'source:Upstream-Version');
+$s->set_version_substvars('1:2.3.4~5-6.7.8~nmu9+b0');
+is($s->get('binary:Version'), '1:2.3.4~5-6.7.8~nmu9+b0', 'binary:Version');
+is($s->get('source:Version'), '1:2.3.4~5-6.7.8~nmu9', 'source:Version');
+is($s->get('source:Upstream-Version'), '1:2.3.4~5', 'source:Upstream-Version');
+
+is($s->get($_), undef, 'no ' . $_) foreach qw(source:Synopsis source:Extended-Description);
+$s->set_desc_substvars("short synopsis\nthis is the long\nextended text\n");
+is($s->get('source:Synopsis'), 'short synopsis', 'contents of source:Synopsis');
+is($s->get('source:Extended-Description'), "this is the long\nextended text\n",
+ 'contents of source:Extended-Description');
+
+my %ctrl_fields = (
+ 'Some-Field' => 'some-value',
+ 'Other-Field' => 'other-value',
+ 'Alter-Field' => 'alter-value',
+);
+is($s->get($_), undef, 'no ' . $_) foreach sort keys %ctrl_fields;
+$s->set_field_substvars(\%ctrl_fields, 'ctrl');
+is($s->get('ctrl:Some-Field'), 'some-value', 'contents of ctrl:Some-Field');
+is($s->get('ctrl:Other-Field'), 'other-value', 'contents of ctrl:Other-Field');
+is($s->get('ctrl:Alter-Field'), 'alter-value', 'contents of ctrl:Alter-Field');
+
+# Replace stuff
+is($s->substvars('This is a string ${var1} with variables ${binary:Version}'),
+ 'This is a string New value with variables 1:2.3.4~5-6.7.8~nmu9+b0',
+ 'substvars simple');
+
+# Add a test prefix to error and warning messages.
+$s->set_msg_prefix('test ');
+
+my $output;
+$SIG{__WARN__} = sub { $output .= $_[0] };
+is($s->substvars('This is a string with unknown variable ${blubb}'),
+ 'This is a string with unknown variable ',
+ 'substvars missing');
+delete $SIG{__WARN__};
+is($output,
+ 'Dpkg_Substvars.t: warning: test substitution variable ${blubb} used, but is not defined' . "\n",
+ 'missing variables warning');
+
+# Recursive replace
+$s->set('rvar', 'recursive ${var1}');
+is($s->substvars('This is a string with ${rvar}'),
+ 'This is a string with recursive New value',
+ 'substvars recursive');
+
+# Strange input
+is($s->substvars('Nothing to $ ${substitute here}, is it ${}?, it ${is'),
+ 'Nothing to $ ${substitute here}, is it ${}?, it ${is',
+ 'substvars strange');
+
+# Warnings about unused variables
+$output = '';
+$SIG{__WARN__} = sub { $output .= $_[0] };
+$s->warn_about_unused();
+delete $SIG{__WARN__};
+is($output,
+ 'Dpkg_Substvars.t: warning: test substitution variable ${var2} unused, but is defined' . "\n",
+ 'unused variables warnings');
+
+# Disable warnings for a certain variable
+$s->set_as_used('var_used', 'used');
+$s->mark_as_used('var2');
+$output = '';
+$SIG{__WARN__} = sub { $output .= $_[0] };
+$s->warn_about_unused();
+delete $SIG{__WARN__};
+is($output, '', 'disabled unused variables warnings');
+
+$s->delete('var_used');
+
+# Variable filters
+my $sf;
+
+$expected = <<'VARS';
+name3=Yet another value
+name4=Name value
+otherprefix:var7=Quux
+var1=Some value
+var2=Some other value
+VARS
+$sf = Dpkg::Substvars->new("$datadir/substvars2");
+$sf->filter(remove => sub { $_[0] =~ m/^prefix:/ });
+is($sf->output(), $expected, 'Filter remove variables');
+
+$expected = <<'VARS';
+otherprefix:var7=Quux
+prefix:var5=Foo
+var1=Some value
+var2=Some other value
+VARS
+$sf = Dpkg::Substvars->new("$datadir/substvars2");
+$sf->filter(keep => sub { $_[0] =~ m/var/ });
+is($sf->output(), $expected, 'Filter keep variables');
+
+$expected = <<'VARS';
+prefix:name6=Bar
+VARS
+$sf = Dpkg::Substvars->new("$datadir/substvars2");
+$sf->filter(remove => sub { $_[0] =~ m/var/ },
+ keep => sub { $_[0] =~ m/^prefix:/ });
+is($sf->output(), $expected, 'Filter keep and remove variables');
diff --git a/scripts/t/Dpkg_Substvars/substvars1 b/scripts/t/Dpkg_Substvars/substvars1
new file mode 100644
index 0000000..a2196c8
--- /dev/null
+++ b/scripts/t/Dpkg_Substvars/substvars1
@@ -0,0 +1,10 @@
+var1=Some value
+var2=Some other value
+# the next line is empty
+
+# the next line has some spaces
+
+ # this line has a late comment
+var3=Yet another value
+#var4=This is not set
+optional-var5?=Optionally used value
diff --git a/scripts/t/Dpkg_Substvars/substvars2 b/scripts/t/Dpkg_Substvars/substvars2
new file mode 100644
index 0000000..27d5944
--- /dev/null
+++ b/scripts/t/Dpkg_Substvars/substvars2
@@ -0,0 +1,7 @@
+var1=Some value
+var2=Some other value
+name3=Yet another value
+name4=Name value
+prefix:var5=Foo
+prefix:name6=Bar
+otherprefix:var7=Quux
diff --git a/scripts/t/Dpkg_Vars.t b/scripts/t/Dpkg_Vars.t
new file mode 100644
index 0000000..f7e53d5
--- /dev/null
+++ b/scripts/t/Dpkg_Vars.t
@@ -0,0 +1,38 @@
+#!/usr/bin/perl
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use Test::More tests => 6;
+
+BEGIN {
+ use_ok('Dpkg::Vars');
+}
+
+eval { set_source_package('foo%bar') };
+ok($@, 'cannot set invalid source package name');
+is(get_source_package(), undef, 'invalid source package name unset');
+
+set_source_package('source');
+is(get_source_package(), 'source', 'set/get source package name');
+
+set_source_package('source');
+is(get_source_package(), 'source', 'reset/get same source package name');
+
+eval { set_source_package('other') };
+ok($@, 'cannot set different source package name');
+
+1;
diff --git a/scripts/t/Dpkg_Vendor.t b/scripts/t/Dpkg_Vendor.t
new file mode 100644
index 0000000..121f620
--- /dev/null
+++ b/scripts/t/Dpkg_Vendor.t
@@ -0,0 +1,40 @@
+#!/usr/bin/perl
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use Test::More tests => 7;
+
+# Delete variables that can affect the tests.
+delete $ENV{DEB_VENDOR};
+
+use_ok('Dpkg::Vendor', qw(get_vendor_dir get_current_vendor get_vendor_object));
+
+is(get_vendor_dir(), $ENV{DPKG_ORIGINS_DIR}, 'Check vendor dir');
+
+my ($vendor, $obj);
+
+$vendor = get_current_vendor();
+is($vendor, 'Debian', 'Check current vendor name');
+
+$obj = get_vendor_object();
+is(ref($obj), 'Dpkg::Vendor::Debian', 'Check current vendor object');
+$obj = get_vendor_object('Devuan');
+is(ref($obj), 'Dpkg::Vendor::Devuan', 'Check Devuan vendor object');
+$obj = get_vendor_object('gNewSense');
+is(ref($obj), 'Dpkg::Vendor::Debian', 'Check parent fallback vendor object');
+$obj = get_vendor_object('Ubuntu');
+is(ref($obj), 'Dpkg::Vendor::Ubuntu', 'Check specific vendor object');
diff --git a/scripts/t/Dpkg_Version.t b/scripts/t/Dpkg_Version.t
new file mode 100644
index 0000000..1de7968
--- /dev/null
+++ b/scripts/t/Dpkg_Version.t
@@ -0,0 +1,214 @@
+#!/usr/bin/perl
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use Test::More;
+
+use IPC::Cmd qw(can_run);
+
+use Dpkg::ErrorHandling;
+use Dpkg::IPC;
+use Dpkg::Version;
+
+report_options(quiet_warnings => 1);
+
+my @tests = <DATA>;
+my @ops = qw(
+ < << lt
+ <= le
+ = eq
+ >= ge
+ > >> gt
+);
+
+plan tests => scalar(@tests) * (3 * scalar(@ops) + 4) + 27;
+
+my $have_dpkg = can_run('dpkg');
+
+sub dpkg_vercmp {
+ my ($a, $cmp, $b) = @_;
+ my $stderr;
+
+ spawn(exec => [ 'dpkg', '--compare-versions', '--', $a, $cmp, $b ],
+ error_to_string => \$stderr, wait_child => 1, nocheck => 1);
+ diag("dpkg --compare-versions error=$?: $stderr") if $? and $? != 256;
+
+ return $? == 0;
+}
+
+sub obj_vercmp {
+ my ($a, $cmp, $b) = @_;
+ return $a < $b if $cmp eq '<<';
+ return $a lt $b if $cmp eq 'lt';
+ return $a <= $b if $cmp eq '<=' or $cmp eq '<';
+ return $a le $b if $cmp eq 'le';
+ return $a == $b if $cmp eq '=';
+ return $a eq $b if $cmp eq 'eq';
+ return $a >= $b if $cmp eq '>=' or $cmp eq '>';
+ return $a ge $b if $cmp eq 'ge';
+ return $a > $b if $cmp eq '>>';
+ return $a gt $b if $cmp eq 'gt';
+}
+
+my $truth = {
+ '-1' => {
+ '<<' => 1, 'lt' => 1,
+ '<=' => 1, 'le' => 1, '<' => 1,
+ '=' => 0, 'eq' => 0,
+ '>=' => 0, 'ge' => 0, '>' => 0,
+ '>>' => 0, 'gt' => 0,
+ },
+ '0' => {
+ '<<' => 0, 'lt' => 0,
+ '<=' => 1, 'le' => 1, '<' => 1,
+ '=' => 1, 'eq' => 1,
+ '>=' => 1, 'ge' => 1, '>' => 1,
+ '>>' => 0, 'gt' => 0,
+ },
+ '1' => {
+ '<<' => 0, 'lt' => 0,
+ '<=' => 0, 'le' => 0, '<' => 0,
+ '=' => 0, 'eq' => 0,
+ '>=' => 1, 'ge' => 1, '>' => 1,
+ '>>' => 1, 'gt' => 1,
+ },
+};
+
+# Handling of empty/invalid versions
+my $empty = Dpkg::Version->new('');
+ok($empty eq '', "Dpkg::Version->new('') eq ''");
+ok($empty->as_string() eq '', "Dpkg::Version->new('')->as_string() eq ''");
+ok(!$empty->is_valid(), 'empty version is invalid');
+$empty = Dpkg::Version->new('-0');
+ok($empty eq '', "Dpkg::Version->new('-0') eq '-0'");
+ok($empty->as_string() eq '-0', "Dpkg::Version->new('-0')->as_string() eq '-0'");
+ok(!$empty->is_valid(), 'empty upstream version is invalid');
+$empty = Dpkg::Version->new('0:-0');
+ok($empty eq '0:-0', "Dpkg::Version->new('0:-0') eq '0:-0'");
+ok($empty->as_string() eq '0:-0', "Dpkg::Version->new('0:-0')->as_string() eq '0:-0'");
+ok(!$empty->is_valid(), 'empty upstream version with epoch is invalid');
+$empty = Dpkg::Version->new(':1.0');
+ok($empty eq ':1.0', "Dpkg::Version->new(':1.0') eq ':1.0'");
+ok($empty->as_string() eq ':1.0', "Dpkg::Version->new(':1.0')->as_string() eq ':1.0'");
+ok(!$empty->is_valid(), 'empty epoch is invalid');
+$empty = Dpkg::Version->new('1.0-');
+ok($empty eq '1.0-', "Dpkg::Version->new('1.0-') eq '1.0-'");
+ok($empty->as_string() eq '1.0-', "Dpkg::Version->new('1.0-')->as_string() eq '1.0-'");
+ok(!$empty->is_valid(), 'empty revision is invalid');
+my $ver = Dpkg::Version->new('10a:5.2');
+ok(!$ver->is_valid(), 'bad epoch is invalid');
+ok(!$ver, 'bool eval of invalid leads to false');
+ok($ver eq '10a:5.2', 'invalid still same string 1/2');
+$ver = Dpkg::Version->new('5.2@3-2');
+ok($ver eq '5.2@3-2', 'invalid still same string 2/2');
+ok(!$ver->is_valid(), 'illegal character is invalid');
+$ver = Dpkg::Version->new('foo5.2');
+ok(!$ver->is_valid(), 'version does not start with digit 1/2');
+$ver = Dpkg::Version->new('0:foo5.2');
+ok(!$ver->is_valid(), 'version does not start with digit 2/2');
+
+# Native and non-native versions
+$ver = Dpkg::Version->new('1.0');
+ok($ver->is_native(), 'upstream version is native');
+$ver = Dpkg::Version->new('1:1.0');
+ok($ver->is_native(), 'upstream version w/ epoch is native');
+$ver = Dpkg::Version->new('1:1.0:1.0');
+ok($ver->is_native(), 'upstream version w/ epoch and colon is native');
+$ver = Dpkg::Version->new('1.0-1');
+ok(!$ver->is_native(), 'upstream version w/ revision is not native');
+$ver = Dpkg::Version->new('1.0-1.0-1');
+ok(!$ver->is_native(), 'upstream version w/ dash and revision is not native');
+
+# Comparisons
+foreach my $case (@tests) {
+ my ($a, $b, $res) = split ' ', $case;
+ my $va = Dpkg::Version->new($a, check => 1);
+ my $vb = Dpkg::Version->new($b, check => 1);
+
+ is("$va", $a, "String representation of Dpkg::Version($a) is $a");
+ is("$vb", $b, "String representation of Dpkg::Version($b) is $b");
+
+ is(version_compare($a, $b), $res, "$a cmp $b => $res");
+ is($va <=> $vb, $res, "Dpkg::Version($a) <=> Dpkg::Version($b) => $res");
+ foreach my $op (@ops) {
+ my $norm_op = version_normalize_relation($op);
+ if ($truth->{$res}{$op}) {
+ ok(version_compare_relation($a, $norm_op, $b), "$a $op $b => true");
+ ok(obj_vercmp($va, $op, $vb), "Dpkg::Version($a) $op Dpkg::Version($b) => true");
+
+ SKIP: {
+ skip 'dpkg not available', 1 if not $have_dpkg;
+
+ ok(dpkg_vercmp($a, $op, $b), "dpkg --compare-versions -- $a $op $b => true");
+ }
+ } else {
+ ok(!version_compare_relation($a, $norm_op, $b), "$a $op $b => false");
+ ok(!obj_vercmp($va, $op, $vb), "Dpkg::Version($a) $op Dpkg::Version($b) => false");
+
+ SKIP: {
+ skip 'dpkg not available', 1 if not $have_dpkg;
+
+ ok(!dpkg_vercmp($a, $op, $b), "dpkg --compare-versions -- $a $op $b => false");
+ }
+ }
+ }
+}
+
+__DATA__
+1.0-1 2.0-2 -1
+2.2~rc-4 2.2-1 -1
+2.2-1 2.2~rc-4 1
+1.0000-1 1.0-1 0
+1 0:1 0
+0 0:0-0 0
+2:2.5 1:7.5 1
+1:0foo 0foo 1
+0:0foo 0foo 0
+0foo 0foo 0
+0foo-0 0foo 0
+0foo 0foo-0 0
+0foo 0fo 1
+0foo-0 0foo+ -1
+0foo~1 0foo -1
+0foo~foo+Bar 0foo~foo+bar -1
+0foo~~ 0foo~ -1
+1~ 1 -1
+12345+that-really-is-some-ver-0 12345+that-really-is-some-ver-10 -1
+0foo-0 0foo-01 -1
+0foo.bar 0foobar 1
+0foo.bar 0foo1bar 1
+0foo.bar 0foo0bar 1
+0foo1bar-1 0foobar-1 -1
+0foo2.0 0foo2 1
+0foo2.0.0 0foo2.10.0 -1
+0foo2.0 0foo2.0.0 -1
+0foo2.0 0foo2.10 -1
+0foo2.1 0foo2.10 -1
+1.09 1.9 0
+1.0.8+nmu1 1.0.8 1
+3.11 3.10+nmu1 1
+0.9j-20080306-4 0.9i-20070324-2 1
+1.2.0~b7-1 1.2.0~b6-1 1
+1.011-1 1.06-2 1
+0.0.9+dfsg1-1 0.0.8+dfsg1-3 1
+4.6.99+svn6582-1 4.6.99+svn6496-1 1
+53 52 1
+0.9.9~pre122-1 0.9.9~pre111-1 1
+2:2.3.2-2+lenny2 2:2.3.2-2 1
+1:3.8.1-1 3.8.GA-1 1
+1.0.1+gpl-1 1.0.1-2 1
+1a 1000a -1
diff --git a/scripts/t/dpkg_buildpackage.t b/scripts/t/dpkg_buildpackage.t
new file mode 100644
index 0000000..f15f2b4
--- /dev/null
+++ b/scripts/t/dpkg_buildpackage.t
@@ -0,0 +1,221 @@
+#!/usr/bin/perl
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use Test::More;
+use Test::Dpkg qw(:needs :paths test_neutralize_checksums);
+
+use File::Spec::Functions qw(rel2abs);
+use File::Compare;
+use File::Path qw(make_path);
+use File::Copy;
+
+use Dpkg::File;
+use Dpkg::IPC;
+use Dpkg::BuildTypes;
+use Dpkg::Substvars;
+
+test_needs_command('fakeroot');
+
+plan tests => 12;
+
+my $srcdir = rel2abs($ENV{srcdir} || '.');
+my $datadir = "$srcdir/t/dpkg_buildpackage";
+my $tmpdir = test_get_temp_path();
+
+$ENV{$_} = rel2abs($ENV{$_}) foreach qw(DPKG_DATADIR DPKG_ORIGINS_DIR);
+
+# Any parallelization from the parent should be ignored, we are testing
+# the makefiles serially anyway.
+delete $ENV{MAKEFLAGS};
+
+# Delete variables that can affect the tests.
+delete $ENV{SOURCE_DATE_EPOCH};
+
+# Delete other variables that can affect the tests.
+delete $ENV{$_} foreach grep { m/^DEB_/ } keys %ENV;
+
+# Set architecture variables to not require dpkg nor gcc.
+$ENV{PATH} = "$srcdir/t/mock-bin:$ENV{PATH}";
+
+chdir $tmpdir;
+
+my $tmpl_format = <<'TMPL_FORMAT';
+3.0 (native)
+TMPL_FORMAT
+
+my $tmpl_changelog = <<'TMPL_CHANGELOG';
+${source-name} (${source-version}) ${suite}; urgency=${urgency}
+
+ * Entry. Closes: #12345
+
+ -- ${maintainer} Thu, 30 Jun 2016 20:15:12 +0200
+TMPL_CHANGELOG
+
+my $tmpl_control = <<'TMPL_CONTROL';
+Source: ${source-name}
+Section: ${source-section}
+Priority: ${source-priority}
+Maintainer: ${maintainer}
+
+Package: test-binary-all
+Architecture: all
+Description: architecture independent binary package
+
+Package: test-binary-any
+Architecture: any
+Description: architecture dependent binary package
+TMPL_CONTROL
+
+my $tmpl_rules = <<'TMPL_RULES';
+#!/usr/bin/make -f
+
+DI := debian/${binary-name-all}
+DA := debian/${binary-name-any}
+
+clean:
+ rm -f debian/files
+ rm -rf $(DI) $(DA)
+
+build-indep:
+build-arch:
+build: build-indep build-arch
+
+binary-indep: build-indep
+ rm -rf $(DI)
+ mkdir -p $(DI)/DEBIAN
+ dpkg-gencontrol -P$(DI) -p${binary-name-all}
+ dpkg-deb --build $(DI) ..
+
+binary-arch: build-arch
+ rm -rf $(DA)
+ mkdir -p $(DA)/DEBIAN
+ dpkg-gencontrol -P$(DA) -p${binary-name-any}
+ dpkg-deb --build $(DA) ..
+
+binary: binary-indep binary-arch
+
+.PHONY: clean build-indep build-arch build binary-indexp binary-arch binary
+TMPL_RULES
+
+my %default_substvars = (
+ 'source-name' => 'test-source',
+ 'source-version' => 0,
+ 'source-section' => 'test',
+ 'source-priority' => 'optional',
+ 'binary-name-all' => 'test-binary-all',
+ 'binary-name-any' => 'test-binary-any',
+ 'suite' => 'unstable',
+ 'urgency' => 'low',
+ 'maintainer' => 'Dpkg Developers <debian-dpkg@lists.debian.org>',
+);
+
+sub gen_from_tmpl
+{
+ my ($pathname, $tmpl, $substvars) = @_;
+
+ file_dump($pathname, $substvars->substvars($tmpl));
+}
+
+sub gen_source
+{
+ my (%options) = @_;
+
+ my $substvars = Dpkg::Substvars->new();
+ foreach my $var (%default_substvars) {
+ my $value = $options{$var} // $default_substvars{$var};
+
+ $substvars->set_as_auto($var, $value);
+ }
+
+ my $source = $substvars->get('source-name');
+ my $version = $substvars->get('source-version');
+ my $basename = "$source\_$version";
+ my $dirname = $basename =~ tr/_/-/r;
+
+ make_path("$dirname/debian/source");
+
+ gen_from_tmpl("$dirname/debian/source/format", $tmpl_format, $substvars);
+ gen_from_tmpl("$dirname/debian/changelog", $tmpl_changelog, $substvars);
+ gen_from_tmpl("$dirname/debian/control", $tmpl_control, $substvars);
+ gen_from_tmpl("$dirname/debian/rules", $tmpl_rules, $substvars);
+
+ return $basename;
+}
+
+sub test_diff
+{
+ my $filename = shift;
+
+ my $expected_file = "$datadir/$filename";
+ my $generated_file = $filename;
+
+ test_neutralize_checksums($generated_file);
+
+ my $res = compare($expected_file, $generated_file);
+ if ($res) {
+ system "diff -u $expected_file $generated_file >&2";
+ }
+ ok($res == 0, "generated file matches expected one ($expected_file)");
+}
+
+sub test_build
+{
+ my ($basename, $type) = @_;
+ my $dirname = $basename =~ tr/_/-/r;
+
+ set_build_type($type, 'buildtype', nocheck => 1);
+ my $typename = get_build_options_from_type();
+
+ my $stderr;
+
+ chdir $dirname;
+ spawn(exec => [ $ENV{PERL}, "$srcdir/dpkg-buildpackage.pl",
+ "--admindir=$datadir/dpkgdb",
+ '--host-arch=amd64',
+ '--ignore-builtin-builddeps',
+ '--unsigned-source', '--unsigned-changes',
+ '--unsigned-buildinfo',
+ "--build=$typename", '--check-command=' ],
+ error_to_string => \$stderr,
+ wait_child => 1, nocheck => 1);
+ chdir '..';
+
+ ok($? == 0, "dpkg-buildpackage --build=$typename succeeded");
+ diag($stderr) unless $? == 0;
+
+ if (build_has_all(BUILD_ARCH_DEP)) {
+ # Rename the file to preserve on consecutive invocations.
+ move("$basename\_amd64.changes", "$basename\_$typename.changes");
+ }
+
+ if (build_has_all(BUILD_SOURCE)) {
+ test_diff("$basename.dsc");
+ }
+
+ test_diff("$basename\_$typename.changes");
+}
+
+my $basename = gen_source();
+
+test_build($basename, BUILD_SOURCE);
+test_build($basename, BUILD_ARCH_INDEP);
+test_build($basename, BUILD_ARCH_DEP);
+test_build($basename, BUILD_BINARY);
+test_build($basename, BUILD_FULL);
+
+1;
diff --git a/scripts/t/dpkg_buildpackage/dpkgdb/status b/scripts/t/dpkg_buildpackage/dpkgdb/status
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/scripts/t/dpkg_buildpackage/dpkgdb/status
diff --git a/scripts/t/dpkg_buildpackage/test-source_0.dsc b/scripts/t/dpkg_buildpackage/test-source_0.dsc
new file mode 100644
index 0000000..fe5b4f8
--- /dev/null
+++ b/scripts/t/dpkg_buildpackage/test-source_0.dsc
@@ -0,0 +1,15 @@
+Format: 3.0 (native)
+Source: test-source
+Binary: test-binary-all, test-binary-any
+Architecture: any all
+Version: 0
+Maintainer: Dpkg Developers <debian-dpkg@lists.debian.org>
+Package-List:
+ test-binary-all deb test optional arch=all
+ test-binary-any deb test optional arch=any
+Checksums-Sha1:
+ 0000000000000000000000000000000000000000 0 test-source_0.tar.xz
+Checksums-Sha256:
+ 0000000000000000000000000000000000000000000000000000000000000000 0 test-source_0.tar.xz
+Files:
+ 00000000000000000000000000000000 0 test-source_0.tar.xz
diff --git a/scripts/t/dpkg_buildpackage/test-source_0_all.changes b/scripts/t/dpkg_buildpackage/test-source_0_all.changes
new file mode 100644
index 0000000..c6c444f
--- /dev/null
+++ b/scripts/t/dpkg_buildpackage/test-source_0_all.changes
@@ -0,0 +1,26 @@
+Format: 1.8
+Date: Thu, 30 Jun 2016 20:15:12 +0200
+Source: test-source
+Binary: test-binary-all
+Architecture: all
+Version: 0
+Distribution: unstable
+Urgency: low
+Maintainer: Dpkg Developers <debian-dpkg@lists.debian.org>
+Changed-By: Dpkg Developers <debian-dpkg@lists.debian.org>
+Description:
+ test-binary-all - architecture independent binary package
+Closes: 12345
+Changes:
+ test-source (0) unstable; urgency=low
+ .
+ * Entry. Closes: #12345
+Checksums-Sha1:
+ 0000000000000000000000000000000000000000 0 test-binary-all_0_all.deb
+ 0000000000000000000000000000000000000000 0 test-source_0_all.buildinfo
+Checksums-Sha256:
+ 0000000000000000000000000000000000000000000000000000000000000000 0 test-binary-all_0_all.deb
+ 0000000000000000000000000000000000000000000000000000000000000000 0 test-source_0_all.buildinfo
+Files:
+ 00000000000000000000000000000000 0 test optional test-binary-all_0_all.deb
+ 00000000000000000000000000000000 0 test optional test-source_0_all.buildinfo
diff --git a/scripts/t/dpkg_buildpackage/test-source_0_any.changes b/scripts/t/dpkg_buildpackage/test-source_0_any.changes
new file mode 100644
index 0000000..d67460c
--- /dev/null
+++ b/scripts/t/dpkg_buildpackage/test-source_0_any.changes
@@ -0,0 +1,26 @@
+Format: 1.8
+Date: Thu, 30 Jun 2016 20:15:12 +0200
+Source: test-source
+Binary: test-binary-any
+Architecture: amd64
+Version: 0
+Distribution: unstable
+Urgency: low
+Maintainer: Dpkg Developers <debian-dpkg@lists.debian.org>
+Changed-By: Dpkg Developers <debian-dpkg@lists.debian.org>
+Description:
+ test-binary-any - architecture dependent binary package
+Closes: 12345
+Changes:
+ test-source (0) unstable; urgency=low
+ .
+ * Entry. Closes: #12345
+Checksums-Sha1:
+ 0000000000000000000000000000000000000000 0 test-binary-any_0_amd64.deb
+ 0000000000000000000000000000000000000000 0 test-source_0_amd64.buildinfo
+Checksums-Sha256:
+ 0000000000000000000000000000000000000000000000000000000000000000 0 test-binary-any_0_amd64.deb
+ 0000000000000000000000000000000000000000000000000000000000000000 0 test-source_0_amd64.buildinfo
+Files:
+ 00000000000000000000000000000000 0 test optional test-binary-any_0_amd64.deb
+ 00000000000000000000000000000000 0 test optional test-source_0_amd64.buildinfo
diff --git a/scripts/t/dpkg_buildpackage/test-source_0_binary.changes b/scripts/t/dpkg_buildpackage/test-source_0_binary.changes
new file mode 100644
index 0000000..7470ce5
--- /dev/null
+++ b/scripts/t/dpkg_buildpackage/test-source_0_binary.changes
@@ -0,0 +1,30 @@
+Format: 1.8
+Date: Thu, 30 Jun 2016 20:15:12 +0200
+Source: test-source
+Binary: test-binary-all test-binary-any
+Architecture: all amd64
+Version: 0
+Distribution: unstable
+Urgency: low
+Maintainer: Dpkg Developers <debian-dpkg@lists.debian.org>
+Changed-By: Dpkg Developers <debian-dpkg@lists.debian.org>
+Description:
+ test-binary-all - architecture independent binary package
+ test-binary-any - architecture dependent binary package
+Closes: 12345
+Changes:
+ test-source (0) unstable; urgency=low
+ .
+ * Entry. Closes: #12345
+Checksums-Sha1:
+ 0000000000000000000000000000000000000000 0 test-binary-all_0_all.deb
+ 0000000000000000000000000000000000000000 0 test-binary-any_0_amd64.deb
+ 0000000000000000000000000000000000000000 0 test-source_0_amd64.buildinfo
+Checksums-Sha256:
+ 0000000000000000000000000000000000000000000000000000000000000000 0 test-binary-all_0_all.deb
+ 0000000000000000000000000000000000000000000000000000000000000000 0 test-binary-any_0_amd64.deb
+ 0000000000000000000000000000000000000000000000000000000000000000 0 test-source_0_amd64.buildinfo
+Files:
+ 00000000000000000000000000000000 0 test optional test-binary-all_0_all.deb
+ 00000000000000000000000000000000 0 test optional test-binary-any_0_amd64.deb
+ 00000000000000000000000000000000 0 test optional test-source_0_amd64.buildinfo
diff --git a/scripts/t/dpkg_buildpackage/test-source_0_full.changes b/scripts/t/dpkg_buildpackage/test-source_0_full.changes
new file mode 100644
index 0000000..fef013c
--- /dev/null
+++ b/scripts/t/dpkg_buildpackage/test-source_0_full.changes
@@ -0,0 +1,36 @@
+Format: 1.8
+Date: Thu, 30 Jun 2016 20:15:12 +0200
+Source: test-source
+Binary: test-binary-all test-binary-any
+Architecture: source all amd64
+Version: 0
+Distribution: unstable
+Urgency: low
+Maintainer: Dpkg Developers <debian-dpkg@lists.debian.org>
+Changed-By: Dpkg Developers <debian-dpkg@lists.debian.org>
+Description:
+ test-binary-all - architecture independent binary package
+ test-binary-any - architecture dependent binary package
+Closes: 12345
+Changes:
+ test-source (0) unstable; urgency=low
+ .
+ * Entry. Closes: #12345
+Checksums-Sha1:
+ 0000000000000000000000000000000000000000 0 test-source_0.dsc
+ 0000000000000000000000000000000000000000 0 test-source_0.tar.xz
+ 0000000000000000000000000000000000000000 0 test-binary-all_0_all.deb
+ 0000000000000000000000000000000000000000 0 test-binary-any_0_amd64.deb
+ 0000000000000000000000000000000000000000 0 test-source_0_amd64.buildinfo
+Checksums-Sha256:
+ 0000000000000000000000000000000000000000000000000000000000000000 0 test-source_0.dsc
+ 0000000000000000000000000000000000000000000000000000000000000000 0 test-source_0.tar.xz
+ 0000000000000000000000000000000000000000000000000000000000000000 0 test-binary-all_0_all.deb
+ 0000000000000000000000000000000000000000000000000000000000000000 0 test-binary-any_0_amd64.deb
+ 0000000000000000000000000000000000000000000000000000000000000000 0 test-source_0_amd64.buildinfo
+Files:
+ 00000000000000000000000000000000 0 test optional test-source_0.dsc
+ 00000000000000000000000000000000 0 test optional test-source_0.tar.xz
+ 00000000000000000000000000000000 0 test optional test-binary-all_0_all.deb
+ 00000000000000000000000000000000 0 test optional test-binary-any_0_amd64.deb
+ 00000000000000000000000000000000 0 test optional test-source_0_amd64.buildinfo
diff --git a/scripts/t/dpkg_buildpackage/test-source_0_source.changes b/scripts/t/dpkg_buildpackage/test-source_0_source.changes
new file mode 100644
index 0000000..8c2f3d1
--- /dev/null
+++ b/scripts/t/dpkg_buildpackage/test-source_0_source.changes
@@ -0,0 +1,26 @@
+Format: 1.8
+Date: Thu, 30 Jun 2016 20:15:12 +0200
+Source: test-source
+Architecture: source
+Version: 0
+Distribution: unstable
+Urgency: low
+Maintainer: Dpkg Developers <debian-dpkg@lists.debian.org>
+Changed-By: Dpkg Developers <debian-dpkg@lists.debian.org>
+Closes: 12345
+Changes:
+ test-source (0) unstable; urgency=low
+ .
+ * Entry. Closes: #12345
+Checksums-Sha1:
+ 0000000000000000000000000000000000000000 0 test-source_0.dsc
+ 0000000000000000000000000000000000000000 0 test-source_0.tar.xz
+ 0000000000000000000000000000000000000000 0 test-source_0_source.buildinfo
+Checksums-Sha256:
+ 0000000000000000000000000000000000000000000000000000000000000000 0 test-source_0.dsc
+ 0000000000000000000000000000000000000000000000000000000000000000 0 test-source_0.tar.xz
+ 0000000000000000000000000000000000000000000000000000000000000000 0 test-source_0_source.buildinfo
+Files:
+ 00000000000000000000000000000000 0 test optional test-source_0.dsc
+ 00000000000000000000000000000000 0 test optional test-source_0.tar.xz
+ 00000000000000000000000000000000 0 test optional test-source_0_source.buildinfo
diff --git a/scripts/t/dpkg_source.t b/scripts/t/dpkg_source.t
new file mode 100644
index 0000000..68b9729
--- /dev/null
+++ b/scripts/t/dpkg_source.t
@@ -0,0 +1,186 @@
+#!/usr/bin/perl
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use Test::More;
+use Test::Dpkg qw(:needs :paths test_neutralize_checksums);
+
+use File::Spec::Functions qw(rel2abs);
+use File::Compare;
+use File::Path qw(make_path);
+
+use Dpkg::File;
+use Dpkg::IPC;
+use Dpkg::Substvars;
+
+test_needs_command('xz');
+
+plan tests => 8;
+
+my $srcdir = rel2abs($ENV{srcdir} || '.');
+my $datadir = "$srcdir/t/dpkg_source";
+my $tmpdir = test_get_temp_path();
+
+$ENV{$_} = rel2abs($ENV{$_}) foreach qw(DPKG_DATADIR DPKG_ORIGINS_DIR);
+
+# Delete variables that can affect the tests.
+delete $ENV{SOURCE_DATE_EPOCH};
+
+chdir $tmpdir;
+
+my $tmpl_format = <<'TMPL_FORMAT';
+3.0 (native)
+TMPL_FORMAT
+
+my $tmpl_changelog = <<'TMPL_CHANGELOG';
+${source-name} (${source-version}) ${suite}; urgency=${urgency}
+
+ * Test package.
+
+ -- ${maintainer} Sat, 05 Jul 2014 21:11:22 +0200
+TMPL_CHANGELOG
+
+my $tmpl_control = <<'TMPL_CONTROL';
+Source: ${source-name}
+Section: ${source-section}
+Priority: ${source-priority}
+Maintainer: ${maintainer}
+Standards-Version: 1.0
+Testsuite: ${source-testsuite}
+
+Package: test-binary
+Architecture: all
+Description: test package
+TMPL_CONTROL
+
+my $tmpl_control_tests = <<'TMPL_CONTROL_TESTS';
+Test-Command: test-unique
+Depends: @, aa
+
+Tests: test-dupe
+Depends: @builddeps@
+
+Test-Command: test-dupe
+Depends: bb, test-binary
+
+Test-Command: test-dupe
+Depends: cc
+TMPL_CONTROL_TESTS
+
+my %default_substvars = (
+ 'source-name' => 'test-source',
+ 'source-version' => 0,
+ 'source-section' => 'test',
+ 'source-priority' => 'optional',
+ 'source-testsuite' => 'autopkgtest',
+ 'suite' => 'unstable',
+ 'urgency' => 'low',
+ 'maintainer' => 'Dpkg Developers <debian-dpkg@lists.debian.org>',
+);
+
+sub gen_from_tmpl
+{
+ my ($pathname, $tmpl, $substvars) = @_;
+
+ file_dump($pathname, $substvars->substvars($tmpl));
+}
+
+sub gen_source
+{
+ my (%options) = @_;
+
+ my $substvars = Dpkg::Substvars->new();
+ foreach my $var ((keys %default_substvars, keys %options)) {
+ my $value = $options{$var} // $default_substvars{$var};
+
+ $substvars->set_as_auto($var, $value);
+ }
+
+ my $source = $substvars->get('source-name');
+ my $version = $substvars->get('source-version');
+ my $dirname = "$source-$version";
+
+ make_path("$dirname/debian/source");
+
+ gen_from_tmpl("$dirname/debian/source/format", $tmpl_format, $substvars);
+ gen_from_tmpl("$dirname/debian/changelog", $tmpl_changelog, $substvars);
+ gen_from_tmpl("$dirname/debian/control", $tmpl_control, $substvars);
+
+ if (defined $options{'control-test'}) {
+ make_path("$dirname/debian/tests");
+ gen_from_tmpl("$dirname/debian/tests/control", $options{'control-test'}, $substvars);
+ }
+
+ return $dirname;
+}
+
+sub test_diff
+{
+ my $filename = shift;
+
+ my $expected_file = "$datadir/$filename";
+ my $generated_file = $filename;
+
+ test_neutralize_checksums($generated_file);
+
+ my $res = compare($expected_file, $generated_file);
+ if ($res) {
+ system "diff -u $expected_file $generated_file >&2";
+ }
+ ok($res == 0, "generated file matches expected one ($expected_file)");
+}
+
+sub test_build_source
+{
+ my ($name) = shift;
+ my $stderr;
+
+ spawn(exec => [ $ENV{PERL}, "$srcdir/dpkg-source.pl", '--build', $name ],
+ error_to_string => \$stderr,
+ wait_child => 1, nocheck => 1);
+
+ ok($? == 0, 'dpkg-source --build succeeded');
+ diag($stderr) unless $? == 0;
+
+ my $basename = $name =~ tr/-/_/r;
+
+ test_diff("$basename.dsc");
+}
+
+my $dirname;
+
+$dirname = gen_source('source-name' => 'testsuite',
+ 'source-version' => 0,
+ 'control-test' => '');
+test_build_source($dirname);
+
+$dirname = gen_source('source-name' => 'testsuite',
+ 'source-version' => 1,
+ 'control-test' => '');
+test_build_source($dirname);
+
+$dirname = gen_source('source-name' => 'testsuite',
+ 'source-version' => 2,
+ 'source-testsuite' => 'smokepkgtest, unitpkgtest, funcpkgtest',
+ 'control-test' => $tmpl_control_tests);
+test_build_source($dirname);
+
+$dirname = gen_source('source-name' => 'testsuite',
+ 'source-version' => 3);
+test_build_source($dirname);
+
+1;
diff --git a/scripts/t/dpkg_source/testsuite_0.dsc b/scripts/t/dpkg_source/testsuite_0.dsc
new file mode 100644
index 0000000..4ec33a4
--- /dev/null
+++ b/scripts/t/dpkg_source/testsuite_0.dsc
@@ -0,0 +1,16 @@
+Format: 3.0 (native)
+Source: testsuite
+Binary: test-binary
+Architecture: all
+Version: 0
+Maintainer: Dpkg Developers <debian-dpkg@lists.debian.org>
+Standards-Version: 1.0
+Testsuite: autopkgtest
+Package-List:
+ test-binary deb test optional arch=all
+Checksums-Sha1:
+ 0000000000000000000000000000000000000000 0 testsuite_0.tar.xz
+Checksums-Sha256:
+ 0000000000000000000000000000000000000000000000000000000000000000 0 testsuite_0.tar.xz
+Files:
+ 00000000000000000000000000000000 0 testsuite_0.tar.xz
diff --git a/scripts/t/dpkg_source/testsuite_1.dsc b/scripts/t/dpkg_source/testsuite_1.dsc
new file mode 100644
index 0000000..c408625
--- /dev/null
+++ b/scripts/t/dpkg_source/testsuite_1.dsc
@@ -0,0 +1,16 @@
+Format: 3.0 (native)
+Source: testsuite
+Binary: test-binary
+Architecture: all
+Version: 1
+Maintainer: Dpkg Developers <debian-dpkg@lists.debian.org>
+Standards-Version: 1.0
+Testsuite: autopkgtest
+Package-List:
+ test-binary deb test optional arch=all
+Checksums-Sha1:
+ 0000000000000000000000000000000000000000 0 testsuite_1.tar.xz
+Checksums-Sha256:
+ 0000000000000000000000000000000000000000000000000000000000000000 0 testsuite_1.tar.xz
+Files:
+ 00000000000000000000000000000000 0 testsuite_1.tar.xz
diff --git a/scripts/t/dpkg_source/testsuite_2.dsc b/scripts/t/dpkg_source/testsuite_2.dsc
new file mode 100644
index 0000000..184c47e
--- /dev/null
+++ b/scripts/t/dpkg_source/testsuite_2.dsc
@@ -0,0 +1,17 @@
+Format: 3.0 (native)
+Source: testsuite
+Binary: test-binary
+Architecture: all
+Version: 2
+Maintainer: Dpkg Developers <debian-dpkg@lists.debian.org>
+Standards-Version: 1.0
+Testsuite: autopkgtest, funcpkgtest, smokepkgtest, unitpkgtest
+Testsuite-Triggers: @builddeps@, aa, bb, cc
+Package-List:
+ test-binary deb test optional arch=all
+Checksums-Sha1:
+ 0000000000000000000000000000000000000000 0 testsuite_2.tar.xz
+Checksums-Sha256:
+ 0000000000000000000000000000000000000000000000000000000000000000 0 testsuite_2.tar.xz
+Files:
+ 00000000000000000000000000000000 0 testsuite_2.tar.xz
diff --git a/scripts/t/dpkg_source/testsuite_3.dsc b/scripts/t/dpkg_source/testsuite_3.dsc
new file mode 100644
index 0000000..88be231
--- /dev/null
+++ b/scripts/t/dpkg_source/testsuite_3.dsc
@@ -0,0 +1,15 @@
+Format: 3.0 (native)
+Source: testsuite
+Binary: test-binary
+Architecture: all
+Version: 3
+Maintainer: Dpkg Developers <debian-dpkg@lists.debian.org>
+Standards-Version: 1.0
+Package-List:
+ test-binary deb test optional arch=all
+Checksums-Sha1:
+ 0000000000000000000000000000000000000000 0 testsuite_3.tar.xz
+Checksums-Sha256:
+ 0000000000000000000000000000000000000000000000000000000000000000 0 testsuite_3.tar.xz
+Files:
+ 00000000000000000000000000000000 0 testsuite_3.tar.xz
diff --git a/scripts/t/merge_changelogs.t b/scripts/t/merge_changelogs.t
new file mode 100644
index 0000000..3f76d5d
--- /dev/null
+++ b/scripts/t/merge_changelogs.t
@@ -0,0 +1,67 @@
+#!/usr/bin/perl
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use Test::More tests => 4;
+
+use File::Spec;
+use File::Compare;
+use File::Temp;
+
+use Dpkg::IPC;
+
+my $srcdir = $ENV{srcdir} || '.';
+my $datadir = "$srcdir/t/merge_changelogs";
+
+my $res;
+sub test_merge {
+ my ($expected_file, @options) = @_;
+ my $fh = File::Temp->new();
+ spawn(exec => [ $ENV{PERL}, "$srcdir/dpkg-mergechangelogs.pl", @options ],
+ to_handle => $fh, error_to_file => '/dev/null',
+ wait_child => 1, nocheck => 1);
+ my $res = compare($expected_file, $fh->filename);
+ if ($res) {
+ system('diff', '-u', $expected_file, $fh->filename);
+ }
+ ok($res == 0, "merged changelog matches expected one ($expected_file)");
+}
+
+my $has_alg_merge = 1;
+eval 'use Algorithm::Merge;';
+if ($@) {
+ $has_alg_merge = 0;
+}
+
+my @input = ("$datadir/ch-old", "$datadir/ch-a", "$datadir/ch-b");
+if ($has_alg_merge) {
+ test_merge("$datadir/ch-merged", @input);
+ test_merge("$datadir/ch-merged-pr", '-m', @input);
+ test_merge("$datadir/ch-unreleased-merged", '--merge-unreleased',
+ ("$datadir/ch-unreleased-old",
+ "$datadir/ch-unreleased-a",
+ "$datadir/ch-unreleased-b"));
+} else {
+ test_merge("$datadir/ch-merged-basic", @input);
+ test_merge("$datadir/ch-merged-pr-basic", '-m', @input);
+ test_merge("$datadir/ch-unreleased-merged-basic", '--merge-unreleased',
+ ("$datadir/ch-unreleased-old",
+ "$datadir/ch-unreleased-a",
+ "$datadir/ch-unreleased-b"));
+}
+test_merge("$datadir/ch-badver-merged", ("$datadir/ch-badver-old",
+ "$datadir/ch-badver-a", "$datadir/ch-badver-b"));
diff --git a/scripts/t/merge_changelogs/ch-a b/scripts/t/merge_changelogs/ch-a
new file mode 100644
index 0000000..ff5419d
--- /dev/null
+++ b/scripts/t/merge_changelogs/ch-a
@@ -0,0 +1,94 @@
+test (2.0-1) unstable; urgency=low
+
+ * Version B with 2.0-1~exp3 contains only up to line 3 while version A
+ with 2.0-1 contains the 5 lines. The resulting version should have the
+ 5 lines without conflict with Algorithm::Merge and a conflict without.
+ * Line 1.
+ * Line 2.
+ * Line 3.
+ * Line 4.
+ * Line 5.
+
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:23:09 +0200
+
+test (1.2-2) unstable; urgency=low
+
+ * This is the last entry in changelog O.
+
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:18:50 +0200
+
+test (1.2-1) unstable; urgency=low
+
+ * This entry should not have conflicts with Algorithm::Merge installed.
+ * Changelog B should a have supplementary line above this one.
+ * Pi is 3.14 is true for all changelogs.
+ * Changelog A should have a supplementary line
+ somewhere in this sub-list
+ - The weather is nice
+ - Really no clouds in the sky
+ - Yet I'm hacking on dpkg
+ - What does that mean about me?
+ * This line should be shared but the next one is dropped in B only.
+ * If I'm here it's because the changelog is not B (I should not appear
+ in the resulting changelog).
+
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:09:07 +0200
+
+test (1.1-1+conflict2) unstable; urgency=low
+
+ * This entry has a conflict on the next line.
+ * I'm in changelog A.
+ * This line is the same in all 3 versions.
+
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:07:40 +0200
+
+test (1.1-1+conflict1) experimental; urgency=low
+
+ * This entry has conflicts on the header line: A wants distribution
+ experimental (instead of unstable) and B wants urgency=high (instead
+ of low).
+ * But it also has a conflict on the trailer line. A changed the
+ timestamp to 18:05:00 and B to 18:06:00.
+
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:05:00 +0200
+
+test (1.1-1+change2) unstable; urgency=low
+
+ * This entry is everywhere but the last line is different in A. The
+ merged version should have what's in A. Furthermore the timestamp in
+ B is set to 17:55:00, it should also be picked up.
+ * I'm definitely in changelog A.
+
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:54:52 +0200
+
+test (1.1-1+change1) unstable; urgency=high
+
+ * This entry is everywhere but the last line is different in B. The
+ merged version should have what's in B. Furthermore the urgency in
+ A is set to high, it should also be picked up.
+ * I'm not in changelog B.
+
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:50:58 +0200
+
+test (1.0-3+a) experimental; urgency=low
+
+ * This entry is present in A only. It's considered new and should thus
+ be in the merged changelog.
+
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:44:39 +0200
+
+test (1.0-2) unstable; urgency=low
+
+ * This entry is dropped in B only.
+ * Since it's in O and A, it should not appear in the result.
+ * Pi is 3.14.
+
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:39:15 +0200
+
+test (1.0-1) unstable; urgency=low
+
+ * Initial release. (Closes: #XXXXXX)
+
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:37:46 +0200
+
+vim: et
diff --git a/scripts/t/merge_changelogs/ch-b b/scripts/t/merge_changelogs/ch-b
new file mode 100644
index 0000000..a74145f
--- /dev/null
+++ b/scripts/t/merge_changelogs/ch-b
@@ -0,0 +1,89 @@
+test (2.0-1~exp3) unstable; urgency=low
+
+ * Version B with 2.0-1~exp3 contains only up to line 3 while version A
+ with 2.0-1 contains the 5 lines. The resulting version should have the
+ 5 lines without conflict with Algorithm::Merge and a conflict without.
+ * Line 1.
+ * Line 2.
+ * Line 3.
+
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:23:09 +0200
+
+test (1.2-2) unstable; urgency=low
+
+ * This is the last entry in changelog O.
+
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:18:50 +0200
+
+test (1.2-1) unstable; urgency=low
+
+ * This entry should not have conflicts with Algorithm::Merge installed.
+ * I'm the added line mentioned below (B-only).
+ * Changelog B should a have supplementary line above this one.
+ * Pi is 3.14 is true for all changelogs.
+ * Changelog A should have a supplementary line
+ somewhere in this sub-list
+ - The weather is nice
+ - Yet I'm hacking on dpkg
+ - What does that mean about me?
+ * This line should be shared but the next one is dropped in B only.
+
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:09:07 +0200
+
+test (1.1-1+conflict2) unstable; urgency=low
+
+ * This entry has a conflict on the next line.
+ * I'm in changelog B.
+ * This line is the same in all 3 versions.
+
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:07:40 +0200
+
+test (1.1-1+conflict1) unstable; urgency=high
+
+ * This entry has conflicts on the header line: A wants distribution
+ experimental (instead of unstable) and B wants urgency=high (instead
+ of low).
+ * But it also has a conflict on the trailer line. A changed the
+ timestamp to 18:05:00 and B to 18:06:00.
+
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:06:00 +0200
+
+test (1.1-1+change2) unstable; urgency=low
+
+ * This entry is everywhere but the last line is different in A. The
+ merged version should have what's in A. Furthermore the timestamp in
+ B is set to 17:55:00, it should also be picked up.
+ * I'm not in changelog A.
+
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:54:52 +0200
+
+test (1.1-1+change1) unstable; urgency=low
+
+ * This entry is everywhere but the last line is different in B. The
+ merged version should have what's in B. Furthermore the urgency in
+ A is set to high, it should also be picked up.
+ * I'm definitely in changelog B.
+
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:50:58 +0200
+
+test (1.0-3+b) experimental; urgency=low
+
+ * This entry is present in B only. It's considered new and should thus
+ be in the merged changelog.
+
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:47:38 +0200
+
+test (1.0-3) unstable; urgency=low
+
+ * This entry is dropped in A only.
+ * Since it's in O and B, it should not appear in the result.
+
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:41:31 +0200
+
+test (1.0-1) unstable; urgency=low
+
+ * Initial release. (Closes: #XXXXXX)
+
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:37:46 +0200
+
+vim: et
diff --git a/scripts/t/merge_changelogs/ch-badver-a b/scripts/t/merge_changelogs/ch-badver-a
new file mode 100644
index 0000000..d544e64
--- /dev/null
+++ b/scripts/t/merge_changelogs/ch-badver-a
@@ -0,0 +1,5 @@
+egcs (ss-970814-1) experimental; urgency=low
+
+ * Initial packaging (of initial snapshot!)
+
+ -- Galen Hazelwood <galenh@micron.net> Wed, 20 Aug 1997 00:36:28 +0000
diff --git a/scripts/t/merge_changelogs/ch-badver-b b/scripts/t/merge_changelogs/ch-badver-b
new file mode 100644
index 0000000..609254e
--- /dev/null
+++ b/scripts/t/merge_changelogs/ch-badver-b
@@ -0,0 +1,11 @@
+egcs (970904-1) experimental; urgency=low
+
+ * New upstream snapshot
+
+ -- Galen Hazelwood <galenh@micron.net> Sun, 7 Sep 1997 18:25:06 -0600
+
+egcs (ss-970814-1) experimental; urgency=low
+
+ * Initial packaging (of initial snapshot!)
+
+ -- Galen Hazelwood <galenh@micron.net> Wed, 20 Aug 1997 00:36:28 +0000
diff --git a/scripts/t/merge_changelogs/ch-badver-merged b/scripts/t/merge_changelogs/ch-badver-merged
new file mode 100644
index 0000000..609254e
--- /dev/null
+++ b/scripts/t/merge_changelogs/ch-badver-merged
@@ -0,0 +1,11 @@
+egcs (970904-1) experimental; urgency=low
+
+ * New upstream snapshot
+
+ -- Galen Hazelwood <galenh@micron.net> Sun, 7 Sep 1997 18:25:06 -0600
+
+egcs (ss-970814-1) experimental; urgency=low
+
+ * Initial packaging (of initial snapshot!)
+
+ -- Galen Hazelwood <galenh@micron.net> Wed, 20 Aug 1997 00:36:28 +0000
diff --git a/scripts/t/merge_changelogs/ch-badver-old b/scripts/t/merge_changelogs/ch-badver-old
new file mode 100644
index 0000000..d544e64
--- /dev/null
+++ b/scripts/t/merge_changelogs/ch-badver-old
@@ -0,0 +1,5 @@
+egcs (ss-970814-1) experimental; urgency=low
+
+ * Initial packaging (of initial snapshot!)
+
+ -- Galen Hazelwood <galenh@micron.net> Wed, 20 Aug 1997 00:36:28 +0000
diff --git a/scripts/t/merge_changelogs/ch-merged b/scripts/t/merge_changelogs/ch-merged
new file mode 100644
index 0000000..29a985d
--- /dev/null
+++ b/scripts/t/merge_changelogs/ch-merged
@@ -0,0 +1,115 @@
+test (2.0-1) unstable; urgency=low
+
+ * Version B with 2.0-1~exp3 contains only up to line 3 while version A
+ with 2.0-1 contains the 5 lines. The resulting version should have the
+ 5 lines without conflict with Algorithm::Merge and a conflict without.
+ * Line 1.
+ * Line 2.
+ * Line 3.
+ * Line 4.
+ * Line 5.
+
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:23:09 +0200
+
+test (2.0-1~exp3) unstable; urgency=low
+
+ * Version B with 2.0-1~exp3 contains only up to line 3 while version A
+ with 2.0-1 contains the 5 lines. The resulting version should have the
+ 5 lines without conflict with Algorithm::Merge and a conflict without.
+ * Line 1.
+ * Line 2.
+ * Line 3.
+
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:23:09 +0200
+
+test (1.2-2) unstable; urgency=low
+
+ * This is the last entry in changelog O.
+
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:18:50 +0200
+
+test (1.2-1) unstable; urgency=low
+
+ * This entry should not have conflicts with Algorithm::Merge installed.
+ * I'm the added line mentioned below (B-only).
+ * Changelog B should a have supplementary line above this one.
+ * Pi is 3.14 is true for all changelogs.
+ * Changelog A should have a supplementary line
+ somewhere in this sub-list
+ - The weather is nice
+ - Really no clouds in the sky
+ - Yet I'm hacking on dpkg
+ - What does that mean about me?
+ * This line should be shared but the next one is dropped in B only.
+
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:09:07 +0200
+
+test (1.1-1+conflict2) unstable; urgency=low
+
+ * This entry has a conflict on the next line.
+<<<<<<<
+ * I'm in changelog A.
+=======
+ * I'm in changelog B.
+>>>>>>>
+ * This line is the same in all 3 versions.
+
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:07:40 +0200
+
+<<<<<<<
+test (1.1-1+conflict1) experimental; urgency=low
+=======
+test (1.1-1+conflict1) unstable; urgency=high
+>>>>>>>
+
+ * This entry has conflicts on the header line: A wants distribution
+ experimental (instead of unstable) and B wants urgency=high (instead
+ of low).
+ * But it also has a conflict on the trailer line. A changed the
+ timestamp to 18:05:00 and B to 18:06:00.
+
+<<<<<<<
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:05:00 +0200
+=======
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:06:00 +0200
+>>>>>>>
+
+test (1.1-1+change2) unstable; urgency=low
+
+ * This entry is everywhere but the last line is different in A. The
+ merged version should have what's in A. Furthermore the timestamp in
+ B is set to 17:55:00, it should also be picked up.
+ * I'm definitely in changelog A.
+
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:54:52 +0200
+
+test (1.1-1+change1) unstable; urgency=high
+
+ * This entry is everywhere but the last line is different in B. The
+ merged version should have what's in B. Furthermore the urgency in
+ A is set to high, it should also be picked up.
+ * I'm definitely in changelog B.
+
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:50:58 +0200
+
+test (1.0-3+b) experimental; urgency=low
+
+ * This entry is present in B only. It's considered new and should thus
+ be in the merged changelog.
+
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:47:38 +0200
+
+test (1.0-3+a) experimental; urgency=low
+
+ * This entry is present in A only. It's considered new and should thus
+ be in the merged changelog.
+
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:44:39 +0200
+
+test (1.0-1) unstable; urgency=low
+
+ * Initial release. (Closes: #XXXXXX)
+
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:37:46 +0200
+
+vim: et
diff --git a/scripts/t/merge_changelogs/ch-merged-basic b/scripts/t/merge_changelogs/ch-merged-basic
new file mode 100644
index 0000000..f89fe11
--- /dev/null
+++ b/scripts/t/merge_changelogs/ch-merged-basic
@@ -0,0 +1,138 @@
+test (2.0-1) unstable; urgency=low
+
+ * Version B with 2.0-1~exp3 contains only up to line 3 while version A
+ with 2.0-1 contains the 5 lines. The resulting version should have the
+ 5 lines without conflict with Algorithm::Merge and a conflict without.
+ * Line 1.
+ * Line 2.
+ * Line 3.
+ * Line 4.
+ * Line 5.
+
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:23:09 +0200
+
+test (2.0-1~exp3) unstable; urgency=low
+
+ * Version B with 2.0-1~exp3 contains only up to line 3 while version A
+ with 2.0-1 contains the 5 lines. The resulting version should have the
+ 5 lines without conflict with Algorithm::Merge and a conflict without.
+ * Line 1.
+ * Line 2.
+ * Line 3.
+
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:23:09 +0200
+
+test (1.2-2) unstable; urgency=low
+
+ * This is the last entry in changelog O.
+
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:18:50 +0200
+
+test (1.2-1) unstable; urgency=low
+
+<<<<<<<
+ * This entry should not have conflicts with Algorithm::Merge installed.
+ * Changelog B should a have supplementary line above this one.
+ * Pi is 3.14 is true for all changelogs.
+ * Changelog A should have a supplementary line
+ somewhere in this sub-list
+ - The weather is nice
+ - Really no clouds in the sky
+ - Yet I'm hacking on dpkg
+ - What does that mean about me?
+ * This line should be shared but the next one is dropped in B only.
+ * If I'm here it's because the changelog is not B (I should not appear
+ in the resulting changelog).
+=======
+ * This entry should not have conflicts with Algorithm::Merge installed.
+ * I'm the added line mentioned below (B-only).
+ * Changelog B should a have supplementary line above this one.
+ * Pi is 3.14 is true for all changelogs.
+ * Changelog A should have a supplementary line
+ somewhere in this sub-list
+ - The weather is nice
+ - Yet I'm hacking on dpkg
+ - What does that mean about me?
+ * This line should be shared but the next one is dropped in B only.
+>>>>>>>
+
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:09:07 +0200
+
+test (1.1-1+conflict2) unstable; urgency=low
+
+<<<<<<<
+ * This entry has a conflict on the next line.
+ * I'm in changelog A.
+ * This line is the same in all 3 versions.
+=======
+ * This entry has a conflict on the next line.
+ * I'm in changelog B.
+ * This line is the same in all 3 versions.
+>>>>>>>
+
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:07:40 +0200
+
+<<<<<<<
+test (1.1-1+conflict1) experimental; urgency=low
+=======
+test (1.1-1+conflict1) unstable; urgency=high
+>>>>>>>
+
+ * This entry has conflicts on the header line: A wants distribution
+ experimental (instead of unstable) and B wants urgency=high (instead
+ of low).
+ * But it also has a conflict on the trailer line. A changed the
+ timestamp to 18:05:00 and B to 18:06:00.
+
+<<<<<<<
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:05:00 +0200
+=======
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:06:00 +0200
+>>>>>>>
+
+test (1.1-1+change2) unstable; urgency=low
+
+ * This entry is everywhere but the last line is different in A. The
+ merged version should have what's in A. Furthermore the timestamp in
+ B is set to 17:55:00, it should also be picked up.
+ * I'm definitely in changelog A.
+
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:54:52 +0200
+
+test (1.1-1+change1) unstable; urgency=high
+
+<<<<<<<
+ * This entry is everywhere but the last line is different in B. The
+ merged version should have what's in B. Furthermore the urgency in
+ A is set to high, it should also be picked up.
+ * I'm not in changelog B.
+=======
+ * This entry is everywhere but the last line is different in B. The
+ merged version should have what's in B. Furthermore the urgency in
+ A is set to high, it should also be picked up.
+ * I'm definitely in changelog B.
+>>>>>>>
+
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:50:58 +0200
+
+test (1.0-3+b) experimental; urgency=low
+
+ * This entry is present in B only. It's considered new and should thus
+ be in the merged changelog.
+
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:47:38 +0200
+
+test (1.0-3+a) experimental; urgency=low
+
+ * This entry is present in A only. It's considered new and should thus
+ be in the merged changelog.
+
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:44:39 +0200
+
+test (1.0-1) unstable; urgency=low
+
+ * Initial release. (Closes: #XXXXXX)
+
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:37:46 +0200
+
+vim: et
diff --git a/scripts/t/merge_changelogs/ch-merged-pr b/scripts/t/merge_changelogs/ch-merged-pr
new file mode 100644
index 0000000..a58f097
--- /dev/null
+++ b/scripts/t/merge_changelogs/ch-merged-pr
@@ -0,0 +1,108 @@
+<<<<<<<
+test (2.0-1) unstable; urgency=low
+=======
+test (2.0-1~exp3) unstable; urgency=low
+>>>>>>>
+
+ * Version B with 2.0-1~exp3 contains only up to line 3 while version A
+ with 2.0-1 contains the 5 lines. The resulting version should have the
+ 5 lines without conflict with Algorithm::Merge and a conflict without.
+ * Line 1.
+ * Line 2.
+ * Line 3.
+ * Line 4.
+ * Line 5.
+
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:23:09 +0200
+
+test (1.2-2) unstable; urgency=low
+
+ * This is the last entry in changelog O.
+
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:18:50 +0200
+
+test (1.2-1) unstable; urgency=low
+
+ * This entry should not have conflicts with Algorithm::Merge installed.
+ * I'm the added line mentioned below (B-only).
+ * Changelog B should a have supplementary line above this one.
+ * Pi is 3.14 is true for all changelogs.
+ * Changelog A should have a supplementary line
+ somewhere in this sub-list
+ - The weather is nice
+ - Really no clouds in the sky
+ - Yet I'm hacking on dpkg
+ - What does that mean about me?
+ * This line should be shared but the next one is dropped in B only.
+
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:09:07 +0200
+
+test (1.1-1+conflict2) unstable; urgency=low
+
+ * This entry has a conflict on the next line.
+<<<<<<<
+ * I'm in changelog A.
+=======
+ * I'm in changelog B.
+>>>>>>>
+ * This line is the same in all 3 versions.
+
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:07:40 +0200
+
+<<<<<<<
+test (1.1-1+conflict1) experimental; urgency=low
+=======
+test (1.1-1+conflict1) unstable; urgency=high
+>>>>>>>
+
+ * This entry has conflicts on the header line: A wants distribution
+ experimental (instead of unstable) and B wants urgency=high (instead
+ of low).
+ * But it also has a conflict on the trailer line. A changed the
+ timestamp to 18:05:00 and B to 18:06:00.
+
+<<<<<<<
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:05:00 +0200
+=======
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:06:00 +0200
+>>>>>>>
+
+test (1.1-1+change2) unstable; urgency=low
+
+ * This entry is everywhere but the last line is different in A. The
+ merged version should have what's in A. Furthermore the timestamp in
+ B is set to 17:55:00, it should also be picked up.
+ * I'm definitely in changelog A.
+
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:54:52 +0200
+
+test (1.1-1+change1) unstable; urgency=high
+
+ * This entry is everywhere but the last line is different in B. The
+ merged version should have what's in B. Furthermore the urgency in
+ A is set to high, it should also be picked up.
+ * I'm definitely in changelog B.
+
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:50:58 +0200
+
+test (1.0-3+b) experimental; urgency=low
+
+ * This entry is present in B only. It's considered new and should thus
+ be in the merged changelog.
+
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:47:38 +0200
+
+test (1.0-3+a) experimental; urgency=low
+
+ * This entry is present in A only. It's considered new and should thus
+ be in the merged changelog.
+
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:44:39 +0200
+
+test (1.0-1) unstable; urgency=low
+
+ * Initial release. (Closes: #XXXXXX)
+
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:37:46 +0200
+
+vim: et
diff --git a/scripts/t/merge_changelogs/ch-merged-pr-basic b/scripts/t/merge_changelogs/ch-merged-pr-basic
new file mode 100644
index 0000000..7733612
--- /dev/null
+++ b/scripts/t/merge_changelogs/ch-merged-pr-basic
@@ -0,0 +1,140 @@
+<<<<<<<
+test (2.0-1) unstable; urgency=low
+=======
+test (2.0-1~exp3) unstable; urgency=low
+>>>>>>>
+
+<<<<<<<
+ * Version B with 2.0-1~exp3 contains only up to line 3 while version A
+ with 2.0-1 contains the 5 lines. The resulting version should have the
+ 5 lines without conflict with Algorithm::Merge and a conflict without.
+ * Line 1.
+ * Line 2.
+ * Line 3.
+ * Line 4.
+ * Line 5.
+=======
+ * Version B with 2.0-1~exp3 contains only up to line 3 while version A
+ with 2.0-1 contains the 5 lines. The resulting version should have the
+ 5 lines without conflict with Algorithm::Merge and a conflict without.
+ * Line 1.
+ * Line 2.
+ * Line 3.
+>>>>>>>
+
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:23:09 +0200
+
+test (1.2-2) unstable; urgency=low
+
+ * This is the last entry in changelog O.
+
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:18:50 +0200
+
+test (1.2-1) unstable; urgency=low
+
+<<<<<<<
+ * This entry should not have conflicts with Algorithm::Merge installed.
+ * Changelog B should a have supplementary line above this one.
+ * Pi is 3.14 is true for all changelogs.
+ * Changelog A should have a supplementary line
+ somewhere in this sub-list
+ - The weather is nice
+ - Really no clouds in the sky
+ - Yet I'm hacking on dpkg
+ - What does that mean about me?
+ * This line should be shared but the next one is dropped in B only.
+ * If I'm here it's because the changelog is not B (I should not appear
+ in the resulting changelog).
+=======
+ * This entry should not have conflicts with Algorithm::Merge installed.
+ * I'm the added line mentioned below (B-only).
+ * Changelog B should a have supplementary line above this one.
+ * Pi is 3.14 is true for all changelogs.
+ * Changelog A should have a supplementary line
+ somewhere in this sub-list
+ - The weather is nice
+ - Yet I'm hacking on dpkg
+ - What does that mean about me?
+ * This line should be shared but the next one is dropped in B only.
+>>>>>>>
+
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:09:07 +0200
+
+test (1.1-1+conflict2) unstable; urgency=low
+
+<<<<<<<
+ * This entry has a conflict on the next line.
+ * I'm in changelog A.
+ * This line is the same in all 3 versions.
+=======
+ * This entry has a conflict on the next line.
+ * I'm in changelog B.
+ * This line is the same in all 3 versions.
+>>>>>>>
+
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:07:40 +0200
+
+<<<<<<<
+test (1.1-1+conflict1) experimental; urgency=low
+=======
+test (1.1-1+conflict1) unstable; urgency=high
+>>>>>>>
+
+ * This entry has conflicts on the header line: A wants distribution
+ experimental (instead of unstable) and B wants urgency=high (instead
+ of low).
+ * But it also has a conflict on the trailer line. A changed the
+ timestamp to 18:05:00 and B to 18:06:00.
+
+<<<<<<<
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:05:00 +0200
+=======
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:06:00 +0200
+>>>>>>>
+
+test (1.1-1+change2) unstable; urgency=low
+
+ * This entry is everywhere but the last line is different in A. The
+ merged version should have what's in A. Furthermore the timestamp in
+ B is set to 17:55:00, it should also be picked up.
+ * I'm definitely in changelog A.
+
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:54:52 +0200
+
+test (1.1-1+change1) unstable; urgency=high
+
+<<<<<<<
+ * This entry is everywhere but the last line is different in B. The
+ merged version should have what's in B. Furthermore the urgency in
+ A is set to high, it should also be picked up.
+ * I'm not in changelog B.
+=======
+ * This entry is everywhere but the last line is different in B. The
+ merged version should have what's in B. Furthermore the urgency in
+ A is set to high, it should also be picked up.
+ * I'm definitely in changelog B.
+>>>>>>>
+
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:50:58 +0200
+
+test (1.0-3+b) experimental; urgency=low
+
+ * This entry is present in B only. It's considered new and should thus
+ be in the merged changelog.
+
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:47:38 +0200
+
+test (1.0-3+a) experimental; urgency=low
+
+ * This entry is present in A only. It's considered new and should thus
+ be in the merged changelog.
+
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:44:39 +0200
+
+test (1.0-1) unstable; urgency=low
+
+ * Initial release. (Closes: #XXXXXX)
+
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:37:46 +0200
+
+vim: et
diff --git a/scripts/t/merge_changelogs/ch-old b/scripts/t/merge_changelogs/ch-old
new file mode 100644
index 0000000..5ff7dd3
--- /dev/null
+++ b/scripts/t/merge_changelogs/ch-old
@@ -0,0 +1,87 @@
+test (1.2-2) unstable; urgency=low
+
+ * This is the last entry in changelog O.
+
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:18:50 +0200
+
+test (1.2-1) unstable; urgency=low
+
+ * This entry should not have conflicts with Algorithm::Merge installed.
+ * Changelog B should a have supplementary line above this one.
+ * Pi is 3.14 is true for all changelogs.
+ * Changelog A should have a supplementary line
+ somewhere in this sub-list
+ - The weather is nice
+ - Yet I'm hacking on dpkg
+ - What does that mean about me?
+ * This line should be shared but the next one is dropped in B only.
+ * If I'm here it's because the changelog is not B (I should not appear
+ in the resulting changelog).
+
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:09:07 +0200
+
+test (1.1-1+conflict2) unstable; urgency=low
+
+ * This entry has a conflict on the next line.
+ * I'm in changelog O (old).
+ * This line is the same in all 3 versions.
+
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:07:40 +0200
+
+test (1.1-1+conflict1) unstable; urgency=low
+
+ * This entry has conflicts on the header line: A wants distribution
+ experimental (instead of unstable) and B wants urgency=high (instead
+ of low).
+ * But it also has a conflict on the trailer line. A changed the
+ timestamp to 18:05:00 and B to 18:06:00.
+
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:04:18 +0200
+
+test (1.1-1+change2) unstable; urgency=low
+
+ * This entry is everywhere but the last line is different in A. The
+ merged version should have what's in A. Furthermore the timestamp in
+ B is set to 17:55:00, it should also be picked up.
+ * I'm not in changelog A.
+
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:54:52 +0200
+
+test (1.1-1+change1) unstable; urgency=low
+
+ * This entry is everywhere but the last line is different in B. The
+ merged version should have what's in B. Furthermore the urgency in
+ A is set to high, it should also be picked up.
+ * I'm not in changelog B.
+
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:50:58 +0200
+
+test (1.1-0.1) stable; urgency=low
+
+ * This entry is present in O only, it should not appear in the merged
+ changelog.
+
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:49:15 +0200
+
+test (1.0-3) unstable; urgency=low
+
+ * This entry is dropped in A only.
+ * Since it's in O and B, it should not appear in the result.
+
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:41:31 +0200
+
+test (1.0-2) unstable; urgency=low
+
+ * This entry is dropped in B only.
+ * Since it's in O and A, it should not appear in the result.
+ * Pi is 3.14.
+
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:39:15 +0200
+
+test (1.0-1) unstable; urgency=low
+
+ * Initial release. (Closes: #XXXXXX)
+
+ -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:37:46 +0200
+
+vim: et
diff --git a/scripts/t/merge_changelogs/ch-unreleased-a b/scripts/t/merge_changelogs/ch-unreleased-a
new file mode 100644
index 0000000..d86d3ff
--- /dev/null
+++ b/scripts/t/merge_changelogs/ch-unreleased-a
@@ -0,0 +1,12 @@
+test (1.2-0) UNRELEASED; urgency=low
+
+ * New upstream release.
+ - Adds a new feature.
+
+ -- Dpkg Developers <debian-dpkg@lists.debian.org> Thu, 02 Sep 2021 05:26:30 +0200
+
+test (1.0-1) unstable; urgency=low
+
+ * Initial release.
+
+ -- Dpkg Developers <debian-dpkg@lists.debian.org> Wed, 20 Aug 1997 00:36:28 +0000
diff --git a/scripts/t/merge_changelogs/ch-unreleased-b b/scripts/t/merge_changelogs/ch-unreleased-b
new file mode 100644
index 0000000..96263e3
--- /dev/null
+++ b/scripts/t/merge_changelogs/ch-unreleased-b
@@ -0,0 +1,12 @@
+test (1.1-1) UNRELEASED; urgency=low
+
+ * New upstream release.
+ - Fixes a random bug.
+
+ -- Dpkg Developers <debian-dpkg@lists.debian.org> Wed, 01 Sep 2021 05:27:48 +0200
+
+test (1.0) unstable; urgency=low
+
+ * Initial release.
+
+ -- Dpkg Developers <debian-dpkg@lists.debian.org> Wed, 20 Aug 1997 00:36:28 +0000
diff --git a/scripts/t/merge_changelogs/ch-unreleased-merged b/scripts/t/merge_changelogs/ch-unreleased-merged
new file mode 100644
index 0000000..5fbf866
--- /dev/null
+++ b/scripts/t/merge_changelogs/ch-unreleased-merged
@@ -0,0 +1,24 @@
+<<<<<<<
+test (1.2-0) UNRELEASED; urgency=low
+=======
+test (1.1-1) UNRELEASED; urgency=low
+>>>>>>>
+
+ * New upstream release.
+<<<<<<<
+ - Adds a new feature.
+=======
+ - Fixes a random bug.
+>>>>>>>
+
+<<<<<<<
+ -- Dpkg Developers <debian-dpkg@lists.debian.org> Thu, 02 Sep 2021 05:26:30 +0200
+=======
+ -- Dpkg Developers <debian-dpkg@lists.debian.org> Wed, 01 Sep 2021 05:27:48 +0200
+>>>>>>>
+
+test (1.0-1) unstable; urgency=low
+
+ * Initial release.
+
+ -- Dpkg Developers <debian-dpkg@lists.debian.org> Wed, 20 Aug 1997 00:36:28 +0000
diff --git a/scripts/t/merge_changelogs/ch-unreleased-merged-basic b/scripts/t/merge_changelogs/ch-unreleased-merged-basic
new file mode 100644
index 0000000..dd6938c
--- /dev/null
+++ b/scripts/t/merge_changelogs/ch-unreleased-merged-basic
@@ -0,0 +1,25 @@
+<<<<<<<
+test (1.2-0) UNRELEASED; urgency=low
+=======
+test (1.1-1) UNRELEASED; urgency=low
+>>>>>>>
+
+<<<<<<<
+ * New upstream release.
+ - Adds a new feature.
+=======
+ * New upstream release.
+ - Fixes a random bug.
+>>>>>>>
+
+<<<<<<<
+ -- Dpkg Developers <debian-dpkg@lists.debian.org> Thu, 02 Sep 2021 05:26:30 +0200
+=======
+ -- Dpkg Developers <debian-dpkg@lists.debian.org> Wed, 01 Sep 2021 05:27:48 +0200
+>>>>>>>
+
+test (1.0-1) unstable; urgency=low
+
+ * Initial release.
+
+ -- Dpkg Developers <debian-dpkg@lists.debian.org> Wed, 20 Aug 1997 00:36:28 +0000
diff --git a/scripts/t/merge_changelogs/ch-unreleased-old b/scripts/t/merge_changelogs/ch-unreleased-old
new file mode 100644
index 0000000..e9377c3
--- /dev/null
+++ b/scripts/t/merge_changelogs/ch-unreleased-old
@@ -0,0 +1,5 @@
+test (1.0) unstable; urgency=low
+
+ * Initial release.
+
+ -- Dpkg Developers <debian-dpkg@lists.debian.org> Wed, 20 Aug 1997 00:36:28 +0000
diff --git a/scripts/t/mk.t b/scripts/t/mk.t
new file mode 100644
index 0000000..95780b3
--- /dev/null
+++ b/scripts/t/mk.t
@@ -0,0 +1,154 @@
+#!/usr/bin/perl
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use Test::More tests => 11;
+use Test::Dpkg qw(:paths);
+
+use File::Spec::Functions qw(rel2abs);
+
+use Dpkg ();
+use Dpkg::ErrorHandling;
+use Dpkg::IPC;
+use Dpkg::Vendor;
+
+my $srcdir = rel2abs($ENV{srcdir} || '.');
+my $datadir = test_get_data_path();
+
+# Turn these into absolute names so that we can safely switch to the test
+# directory with «make -C».
+$ENV{$_} = rel2abs($ENV{$_}) foreach qw(srcdir DPKG_DATADIR DPKG_ORIGINS_DIR);
+
+# Any parallelization from the parent should be ignored, we are testing
+# the makefiles serially anyway.
+delete $ENV{MAKEFLAGS};
+
+# Delete other variables that can affect the tests.
+delete $ENV{$_} foreach grep { m/^DEB_/ } keys %ENV;
+
+# Set architecture variables to not require dpkg nor gcc.
+$ENV{PATH} = "$srcdir/t/mock-bin:$ENV{PATH}";
+
+$ENV{DEB_BUILD_PATH} = rel2abs($datadir);
+
+sub test_makefile {
+ my ($makefile, $desc) = @_;
+
+ $desc //= 'default';
+
+ spawn(exec => [ $Dpkg::PROGMAKE, '-C', $datadir, '-f', $makefile ],
+ wait_child => 1, nocheck => 1);
+ ok($? == 0, "makefile $makefile computes all values correctly ($desc)");
+}
+
+sub cmd_get_vars {
+ my (@cmd) = @_;
+ my %var;
+
+ open my $cmd_fh, '-|', @cmd or subprocerr($cmd[0]);
+ while (<$cmd_fh>) {
+ chomp;
+ my ($key, $value) = split /=/, $_, 2;
+ $var{$key} = $value;
+ }
+ close $cmd_fh or subprocerr($cmd[0]);
+
+ return %var;
+}
+
+# Test makefiles.
+
+my %arch = cmd_get_vars($ENV{PERL}, "$srcdir/dpkg-architecture.pl", '-f');
+
+while (my ($k, $v) = each %arch) {
+ delete $ENV{$k};
+ $ENV{"TEST_$k"} = $v;
+}
+test_makefile('architecture.mk', 'without envvars');
+while (my ($k, $v) = each %arch) {
+ $ENV{$k} = $v;
+}
+test_makefile('architecture.mk', 'with envvars');
+
+$ENV{DEB_BUILD_OPTIONS} = 'parallel=16';
+$ENV{TEST_DEB_BUILD_OPTION_PARALLEL} = '16';
+test_makefile('buildopts.mk');
+delete $ENV{DEB_BUILD_OPTIONS};
+delete $ENV{TEST_DEB_BUILD_OPTION_PARALLEL};
+
+my %buildflag = cmd_get_vars($ENV{PERL}, "$srcdir/dpkg-buildflags.pl");
+
+while (my ($var, $flags) = each %buildflag) {
+ delete $ENV{$var};
+ $ENV{"TEST_$var"} = $flags;
+}
+test_makefile('buildflags.mk');
+
+my %buildtools = (
+ AS => 'as',
+ CPP => 'gcc -E',
+ CC => 'gcc',
+ CXX => 'g++',
+ OBJC => 'gcc',
+ OBJCXX => 'g++',
+ GCJ => 'gcj',
+ F77 => 'gfortran',
+ FC => 'gfortran',
+ LD => 'ld',
+ STRIP => 'strip',
+ OBJCOPY => 'objcopy',
+ OBJDUMP => 'objdump',
+ NM => 'nm',
+ AR => 'ar',
+ RANLIB => 'ranlib',
+ PKG_CONFIG => 'pkg-config',
+);
+
+while (my ($var, $tool) = each %buildtools) {
+ delete $ENV{$var};
+ $ENV{"TEST_$var"} = "$ENV{DEB_HOST_GNU_TYPE}-$tool";
+ delete $ENV{"${var}_FOR_BUILD"};
+ $ENV{"TEST_${var}_FOR_BUILD"} = "$ENV{DEB_BUILD_GNU_TYPE}-$tool";
+}
+test_makefile('buildtools.mk', 'without envvars');
+
+$ENV{DEB_BUILD_OPTIONS} = 'nostrip';
+$ENV{TEST_STRIP} = ':';
+$ENV{TEST_STRIP_FOR_BUILD} = ':';
+test_makefile('buildtools.mk', 'with envvars');
+delete $ENV{DEB_BUILD_OPTIONS};
+
+foreach my $tool (keys %buildtools) {
+ delete $ENV{${tool}};
+ delete $ENV{"${tool}_FOR_BUILD"};
+}
+
+delete $ENV{SOURCE_DATE_EPOCH};
+# Timestamp in seconds since the epoch from date in test debian/changelog
+# entry: «Tue, 04 Aug 2015 16:13:50 +0200».
+$ENV{TEST_SOURCE_DATE_EPOCH} = 1438697630;
+test_makefile('pkg-info.mk');
+
+$ENV{SOURCE_DATE_EPOCH} = 100;
+$ENV{TEST_SOURCE_DATE_EPOCH} = 100;
+test_makefile('pkg-info.mk');
+
+test_makefile('vendor.mk');
+test_makefile('vendor-v0.mk');
+test_makefile('vendor-v1.mk');
+
+1;
diff --git a/scripts/t/mk/architecture.mk b/scripts/t/mk/architecture.mk
new file mode 100644
index 0000000..2ac0222
--- /dev/null
+++ b/scripts/t/mk/architecture.mk
@@ -0,0 +1,36 @@
+include $(srcdir)/mk/architecture.mk
+
+test:
+ test "$(DEB_BUILD_ARCH)" = "$(TEST_DEB_BUILD_ARCH)"
+ test "$(DEB_BUILD_ARCH_ABI)" = "$(TEST_DEB_BUILD_ARCH_ABI)"
+ test "$(DEB_BUILD_ARCH_BITS)" = "$(TEST_DEB_BUILD_ARCH_BITS)"
+ test "$(DEB_BUILD_ARCH_CPU)" = "$(TEST_DEB_BUILD_ARCH_CPU)"
+ test "$(DEB_BUILD_ARCH_ENDIAN)" = "$(TEST_DEB_BUILD_ARCH_ENDIAN)"
+ test "$(DEB_BUILD_ARCH_LIBC)" = "$(TEST_DEB_BUILD_ARCH_LIBC)"
+ test "$(DEB_BUILD_ARCH_OS)" = "$(TEST_DEB_BUILD_ARCH_OS)"
+ test "$(DEB_BUILD_GNU_CPU)" = "$(TEST_DEB_BUILD_GNU_CPU)"
+ test "$(DEB_BUILD_GNU_SYSTEM)" = "$(TEST_DEB_BUILD_GNU_SYSTEM)"
+ test "$(DEB_BUILD_GNU_TYPE)" = "$(TEST_DEB_BUILD_GNU_TYPE)"
+ test "$(DEB_BUILD_MULTIARCH)" = "$(TEST_DEB_BUILD_MULTIARCH)"
+ test "$(DEB_HOST_ARCH)" = "$(TEST_DEB_HOST_ARCH)"
+ test "$(DEB_HOST_ARCH_ABI)" = "$(TEST_DEB_HOST_ARCH_ABI)"
+ test "$(DEB_HOST_ARCH_BITS)" = "$(TEST_DEB_HOST_ARCH_BITS)"
+ test "$(DEB_HOST_ARCH_CPU)" = "$(TEST_DEB_HOST_ARCH_CPU)"
+ test "$(DEB_HOST_ARCH_ENDIAN)" = "$(TEST_DEB_HOST_ARCH_ENDIAN)"
+ test "$(DEB_HOST_ARCH_LIBC)" = "$(TEST_DEB_HOST_ARCH_LIBC)"
+ test "$(DEB_HOST_ARCH_OS)" = "$(TEST_DEB_HOST_ARCH_OS)"
+ test "$(DEB_HOST_GNU_CPU)" = "$(TEST_DEB_HOST_GNU_CPU)"
+ test "$(DEB_HOST_GNU_SYSTEM)" = "$(TEST_DEB_HOST_GNU_SYSTEM)"
+ test "$(DEB_HOST_GNU_TYPE)" = "$(TEST_DEB_HOST_GNU_TYPE)"
+ test "$(DEB_HOST_MULTIARCH)" = "$(TEST_DEB_HOST_MULTIARCH)"
+ test "$(DEB_TARGET_ARCH)" = "$(TEST_DEB_TARGET_ARCH)"
+ test "$(DEB_TARGET_ARCH_ABI)" = "$(TEST_DEB_TARGET_ARCH_ABI)"
+ test "$(DEB_TARGET_ARCH_BITS)" = "$(TEST_DEB_TARGET_ARCH_BITS)"
+ test "$(DEB_TARGET_ARCH_CPU)" = "$(TEST_DEB_TARGET_ARCH_CPU)"
+ test "$(DEB_TARGET_ARCH_ENDIAN)" = "$(TEST_DEB_TARGET_ARCH_ENDIAN)"
+ test "$(DEB_TARGET_ARCH_LIBC)" = "$(TEST_DEB_TARGET_ARCH_LIBC)"
+ test "$(DEB_TARGET_ARCH_OS)" = "$(TEST_DEB_TARGET_ARCH_OS)"
+ test "$(DEB_TARGET_GNU_CPU)" = "$(TEST_DEB_TARGET_GNU_CPU)"
+ test "$(DEB_TARGET_GNU_SYSTEM)" = "$(TEST_DEB_TARGET_GNU_SYSTEM)"
+ test "$(DEB_TARGET_GNU_TYPE)" = "$(TEST_DEB_TARGET_GNU_TYPE)"
+ test "$(DEB_TARGET_MULTIARCH)" = "$(TEST_DEB_TARGET_MULTIARCH)"
diff --git a/scripts/t/mk/buildflags.mk b/scripts/t/mk/buildflags.mk
new file mode 100644
index 0000000..542bced
--- /dev/null
+++ b/scripts/t/mk/buildflags.mk
@@ -0,0 +1,16 @@
+DEB_CPPFLAGS_MAINT_APPEND = -DTEST_MK=test
+
+include $(srcdir)/mk/buildflags.mk
+
+test:
+ test "$(ASFLAGS)" = "$(TEST_ASFLAGS)"
+ test "$(CFLAGS)" = "$(TEST_CFLAGS)"
+ test "$(CPPFLAGS)" = "$(TEST_CPPFLAGS) -DTEST_MK=test"
+ test "$(CXXFLAGS)" = "$(TEST_CXXFLAGS)"
+ test "$(DFLAGS)" = "$(TEST_DFLAGS)"
+ test "$(FCFLAGS)" = "$(TEST_FCFLAGS)"
+ test "$(FFLAGS)" = "$(TEST_FFLAGS)"
+ test "$(GCJFLAGS)" = "$(TEST_GCJFLAGS)"
+ test "$(LDFLAGS)" = "$(TEST_LDFLAGS)"
+ test "$(OBJCFLAGS)" = "$(TEST_OBJCFLAGS)"
+ test "$(OBJCXXFLAGS)" = "$(TEST_OBJCXXFLAGS)"
diff --git a/scripts/t/mk/buildopts.mk b/scripts/t/mk/buildopts.mk
new file mode 100644
index 0000000..46d0efa
--- /dev/null
+++ b/scripts/t/mk/buildopts.mk
@@ -0,0 +1,4 @@
+include $(srcdir)/mk/buildopts.mk
+
+test:
+ test "$(DEB_BUILD_OPTION_PARALLEL)" = "$(TEST_DEB_BUILD_OPTION_PARALLEL)"
diff --git a/scripts/t/mk/buildtools.mk b/scripts/t/mk/buildtools.mk
new file mode 100644
index 0000000..0077791
--- /dev/null
+++ b/scripts/t/mk/buildtools.mk
@@ -0,0 +1,35 @@
+include $(srcdir)/mk/buildtools.mk
+
+test:
+ test "$(AS)" = "$(TEST_AS)"
+ test "$(AS_FOR_BUILD)" = "$(TEST_AS_FOR_BUILD)"
+ test "$(CC)" = "$(TEST_CC)"
+ test "$(CC_FOR_BUILD)" = "$(TEST_CC_FOR_BUILD)"
+ test "$(CXX)" = "$(TEST_CXX)"
+ test "$(CXX_FOR_BUILD)" = "$(TEST_CXX_FOR_BUILD)"
+ test "$(OBJC)" = "$(TEST_OBJC)"
+ test "$(OBJC_FOR_BUILD)" = "$(TEST_OBJC_FOR_BUILD)"
+ test "$(OBJCXX)" = "$(TEST_OBJCXX)"
+ test "$(OBJCXX_FOR_BUILD)" = "$(TEST_OBJCXX_FOR_BUILD)"
+ test "$(GCJ)" = "$(TEST_GCJ)"
+ test "$(GCJ_FOR_BUILD)" = "$(TEST_GCJ_FOR_BUILD)"
+ test "$(F77)" = "$(TEST_F77)"
+ test "$(F77_FOR_BUILD)" = "$(TEST_F77_FOR_BUILD)"
+ test "$(FC)" = "$(TEST_FC)"
+ test "$(FC_FOR_BUILD)" = "$(TEST_FC_FOR_BUILD)"
+ test "$(LD)" = "$(TEST_LD)"
+ test "$(LD_FOR_BUILD)" = "$(TEST_LD_FOR_BUILD)"
+ test "$(STRIP)" = "$(TEST_STRIP)"
+ test "$(STRIP_FOR_BUILD)" = "$(TEST_STRIP_FOR_BUILD)"
+ test "$(OBJCOPY)" = "$(TEST_OBJCOPY)"
+ test "$(OBJCOPY_FOR_BUILD)" = "$(TEST_OBJCOPY_FOR_BUILD)"
+ test "$(OBJDUMP)" = "$(TEST_OBJDUMP)"
+ test "$(OBJDUMP_FOR_BUILD)" = "$(TEST_OBJDUMP_FOR_BUILD)"
+ test "$(NM)" = "$(TEST_NM)"
+ test "$(NM_FOR_BUILD)" = "$(TEST_NM_FOR_BUILD)"
+ test "$(AR)" = "$(TEST_AR)"
+ test "$(AR_FOR_BUILD)" = "$(TEST_AR_FOR_BUILD)"
+ test "$(RANLIB)" = "$(TEST_RANLIB)"
+ test "$(RANLIB_FOR_BUILD)" = "$(TEST_RANLIB_FOR_BUILD)"
+ test "$(PKG_CONFIG)" = "$(TEST_PKG_CONFIG)"
+ test "$(PKG_CONFIG_FOR_BUILD)" = "$(TEST_PKG_CONFIG_FOR_BUILD)"
diff --git a/scripts/t/mk/debian/changelog b/scripts/t/mk/debian/changelog
new file mode 100644
index 0000000..728c8ec
--- /dev/null
+++ b/scripts/t/mk/debian/changelog
@@ -0,0 +1,5 @@
+source (1:2:3.4-5-6) suite; urgency=low
+
+ * Initial release.
+
+ -- Dpkg Developers <debian-dpkg@lists.debian.org> Tue, 04 Aug 2015 16:13:50 +0200
diff --git a/scripts/t/mk/pkg-info.mk b/scripts/t/mk/pkg-info.mk
new file mode 100644
index 0000000..c0e3287
--- /dev/null
+++ b/scripts/t/mk/pkg-info.mk
@@ -0,0 +1,11 @@
+include $(srcdir)/mk/pkg-info.mk
+
+test:
+ test "$(DEB_SOURCE)" = "source"
+ test "$(DEB_VERSION)" = "1:2:3.4-5-6"
+ test "$(DEB_VERSION_EPOCH_UPSTREAM)" = "1:2:3.4-5"
+ test "$(DEB_VERSION_UPSTREAM_REVISION)" = "2:3.4-5-6"
+ test "$(DEB_VERSION_UPSTREAM)" = "2:3.4-5"
+ test "$(DEB_DISTRIBUTION)" = "suite"
+ test '$(SOURCE_DATE_EPOCH)' = '$(TEST_SOURCE_DATE_EPOCH)'
+ test "$${SOURCE_DATE_EPOCH}" = '$(TEST_SOURCE_DATE_EPOCH)'
diff --git a/scripts/t/mk/vendor-v0.mk b/scripts/t/mk/vendor-v0.mk
new file mode 100644
index 0000000..602a8c6
--- /dev/null
+++ b/scripts/t/mk/vendor-v0.mk
@@ -0,0 +1,6 @@
+dpkg_vendor_derives_from = $(dpkg_vendor_derives_from_v0)
+
+include $(srcdir)/mk/vendor.mk
+
+test:
+ test "$(shell $(call dpkg_vendor_derives_from,debian))" = "yes"
diff --git a/scripts/t/mk/vendor-v1.mk b/scripts/t/mk/vendor-v1.mk
new file mode 100644
index 0000000..11c1314
--- /dev/null
+++ b/scripts/t/mk/vendor-v1.mk
@@ -0,0 +1,6 @@
+include $(srcdir)/mk/vendor.mk
+
+dpkg_vendor_derives_from = $(dpkg_vendor_derives_from_v1)
+
+test:
+ test "$(call dpkg_vendor_derives_from,debian)" = "yes"
diff --git a/scripts/t/mk/vendor.mk b/scripts/t/mk/vendor.mk
new file mode 100644
index 0000000..4e0d9ff
--- /dev/null
+++ b/scripts/t/mk/vendor.mk
@@ -0,0 +1,6 @@
+include $(srcdir)/mk/vendor.mk
+
+test:
+ test "$(DEB_VENDOR)" = "Debian"
+ test "$(DEB_PARENT_VENDOR)" = ""
+ test "$(shell $(call dpkg_vendor_derives_from,debian))" = "yes"
diff --git a/scripts/t/mock-bin/dpkg b/scripts/t/mock-bin/dpkg
new file mode 100755
index 0000000..fbfba35
--- /dev/null
+++ b/scripts/t/mock-bin/dpkg
@@ -0,0 +1,20 @@
+#!/bin/sh
+
+set -e
+
+args="$@"
+
+while [ $# -gt 0 ]; do
+ opt="$1"
+ shift
+
+ case "$opt" in
+ --print-architecture)
+ echo amd64
+ exit 0
+ esac
+done
+
+# Otherwise fail hard.
+echo "$0: unsupported command ($args) in mock wrapper"
+exit 1
diff --git a/scripts/t/mock-bin/gcc b/scripts/t/mock-bin/gcc
new file mode 100755
index 0000000..0174f17
--- /dev/null
+++ b/scripts/t/mock-bin/gcc
@@ -0,0 +1,20 @@
+#!/bin/sh
+
+set -e
+
+args="$@"
+
+while [ $# -gt 0 ]; do
+ opt="$1"
+ shift
+
+ case "$opt" in
+ -dumpmachine)
+ echo x86_64-linux-gnu
+ exit 0
+ esac
+done
+
+# Otherwise fail hard.
+echo "$0: unsupported command ($args) in mock wrapper"
+exit 1
diff --git a/scripts/t/origins/debian b/scripts/t/origins/debian
new file mode 100644
index 0000000..3b623d2
--- /dev/null
+++ b/scripts/t/origins/debian
@@ -0,0 +1,3 @@
+Vendor: Debian
+Vendor-URL: https://www.debian.org/
+Bugs: debbugs://bugs.debian.org
diff --git a/scripts/t/origins/default b/scripts/t/origins/default
new file mode 100644
index 0000000..3b623d2
--- /dev/null
+++ b/scripts/t/origins/default
@@ -0,0 +1,3 @@
+Vendor: Debian
+Vendor-URL: https://www.debian.org/
+Bugs: debbugs://bugs.debian.org
diff --git a/scripts/t/origins/devuan b/scripts/t/origins/devuan
new file mode 100644
index 0000000..5333148
--- /dev/null
+++ b/scripts/t/origins/devuan
@@ -0,0 +1,4 @@
+Vendor: Devuan
+Vendor-URL: https://www.devuan.org/
+Bugs: debbugs://bugs.devuan.org
+Parent: Debian
diff --git a/scripts/t/origins/gnewsense b/scripts/t/origins/gnewsense
new file mode 100644
index 0000000..e67f862
--- /dev/null
+++ b/scripts/t/origins/gnewsense
@@ -0,0 +1,4 @@
+Vendor: gNewSense
+Vendor-URL: http://www.gnewsense.org/
+Bugs: https://savannah.nongnu.org/bugs/?group=gnewsense
+Parent: Debian
diff --git a/scripts/t/origins/ubuntu b/scripts/t/origins/ubuntu
new file mode 100644
index 0000000..9ebae11
--- /dev/null
+++ b/scripts/t/origins/ubuntu
@@ -0,0 +1,4 @@
+Vendor: Ubuntu
+Vendor-URL: https://www.ubuntu.com/
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Parent: Debian