diff options
Diffstat (limited to '')
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/“/“[1m/g +s/”/[0m”/g +s/‘/‘[1m/g +s/’/[0m’/g diff --git a/scripts/po/ca.gmo b/scripts/po/ca.gmo Binary files differnew file mode 100644 index 0000000..bcffebf --- /dev/null +++ b/scripts/po/ca.gmo 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 Binary files differnew file mode 100644 index 0000000..461189b --- /dev/null +++ b/scripts/po/de.gmo 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 Binary files differnew file mode 100644 index 0000000..476c413 --- /dev/null +++ b/scripts/po/es.gmo 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 Binary files differnew file mode 100644 index 0000000..7f3aad6 --- /dev/null +++ b/scripts/po/fr.gmo 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 Binary files differnew file mode 100644 index 0000000..363c3cd --- /dev/null +++ b/scripts/po/nl.gmo 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 Binary files differnew file mode 100644 index 0000000..9ca976a --- /dev/null +++ b/scripts/po/pl.gmo 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 Binary files differnew file mode 100644 index 0000000..29c884c --- /dev/null +++ b/scripts/po/pt.gmo 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 Binary files differnew file mode 100644 index 0000000..32a431f --- /dev/null +++ b/scripts/po/ru.gmo 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 Binary files differnew file mode 100644 index 0000000..880eefe --- /dev/null +++ b/scripts/po/sv.gmo 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 Binary files differnew file mode 100644 index 0000000..cb07a8e --- /dev/null +++ b/scripts/t/Dpkg_OpenPGP/sign-file-inline.sig 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 Binary files differnew file mode 100644 index 0000000..125424c --- /dev/null +++ b/scripts/t/Dpkg_OpenPGP/sign-file.sig 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 Binary files differnew file mode 100644 index 0000000..a15acec --- /dev/null +++ b/scripts/t/Dpkg_Source_Package/package_1.0.orig.tar.sig 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 |