63
printf _g("Debian %s version %s.\n"), $progname, $version;
63
printf _g("Debian %s version %s.\n"), $Dpkg::PROGNAME, $Dpkg::PROGVERSION;
66
66
This is free software; see the GNU General Public License version 2 or
67
67
later for copying conditions. There is NO warranty.
73
"Usage: %s [<option>...]")
73
'Usage: %s [<option>...]')
76
76
-p<package> print control file for package.
77
77
-c<control-file> get control info from this file.
78
78
-l<changelog-file> get per-version info from this file.
139
139
umask 0022; # ensure sane default permissions for created files
140
140
my %options = (file => $changelogfile);
141
$options{"changelogformat"} = $changelogformat if $changelogformat;
141
$options{changelogformat} = $changelogformat if $changelogformat;
142
142
my $changelog = changelog_parse(%options);
143
if ($changelog->{"Binary-Only"}) {
144
$options{"count"} = 1;
145
$options{"offset"} = 1;
143
if ($changelog->{'Binary-Only'}) {
145
$options{offset} = 1;
146
146
my $prev_changelog = changelog_parse(%options);
147
$sourceversion = $prev_changelog->{"Version"};
147
$sourceversion = $prev_changelog->{'Version'};
149
$sourceversion = $changelog->{"Version"};
149
$sourceversion = $changelog->{'Version'};
152
152
if (defined $forceversion) {
153
153
$binaryversion = $forceversion;
155
$binaryversion = $changelog->{"Version"};
155
$binaryversion = $changelog->{'Version'};
158
158
$substvars->set_version_substvars($sourceversion, $binaryversion);
159
159
$substvars->set_arch_substvars();
160
$substvars->load("debian/substvars") if -e "debian/substvars" and not $substvars_loaded;
160
$substvars->load('debian/substvars') if -e 'debian/substvars' and not $substvars_loaded;
161
161
my $control = Dpkg::Control::Info->new($controlfile);
162
162
my $fields = Dpkg::Control->new(type => CTRL_PKG_DEB);
164
164
# Old-style bin-nmus change the source version submitted to
165
165
# set_version_substvars()
166
$sourceversion = $substvars->get("source:Version");
166
$sourceversion = $substvars->get('source:Version');
170
170
if (defined($oppackage)) {
171
171
$pkg = $control->get_pkg_by_name($oppackage);
172
defined($pkg) || error(_g("package %s not in control info"), $oppackage);
172
defined($pkg) || error(_g('package %s not in control info'), $oppackage);
174
174
my @packages = map { $_->{'Package'} } $control->get_packages();
175
175
if (@packages == 0) {
176
error(_g("no package stanza found in control info"));
176
error(_g('no package stanza found in control info'));
177
177
} elsif (@packages > 1) {
178
error(_g("must specify package since control info has many (%s)"),
178
error(_g('must specify package since control info has many (%s)'),
181
181
$pkg = $control->get_pkg_by_idx(1);
183
$substvars->set_msg_prefix(sprintf(_g("package %s: "), $pkg->{Package}));
183
$substvars->set_msg_prefix(sprintf(_g('package %s: '), $pkg->{Package}));
185
185
# Scan source package
186
186
my $src_fields = $control->get_source();
187
foreach $_ (keys %{$src_fields}) {
187
foreach (keys %{$src_fields}) {
188
188
if (m/^Source$/) {
189
189
set_source_package($src_fields->{$_});
204
204
$fields->{$_} = $v;
206
206
my @archlist = split(/\s+/, $v);
207
my @invalid_archs = grep m/[^\w-]/, @archlist;
207
my @invalid_archs = grep { m/[^\w-]/ } @archlist;
208
208
warning(ngettext("`%s' is not a legal architecture string.",
209
209
"`%s' are not legal architecture strings.",
210
210
scalar(@invalid_archs)),
211
211
join("' `", @invalid_archs))
212
212
if @invalid_archs >= 1;
213
grep(debarch_is($host_arch, $_), @archlist) ||
213
if (none { debarch_is($host_arch, $_) } @archlist) {
214
214
error(_g("current host architecture '%s' does not " .
215
215
"appear in package's architecture list (%s)"),
216
216
$host_arch, "@archlist");
217
218
$fields->{$_} = $host_arch;
245
246
my $facts = Dpkg::Deps::KnownFacts->new();
246
247
$facts->add_installed_package($fields->{'Package'}, $fields->{'Version'},
247
248
$fields->{'Architecture'}, $fields->{'Multi-Arch'});
248
if (exists $pkg->{"Provides"}) {
249
my $provides = deps_parse($substvars->substvars($pkg->{"Provides"}, no_warn => 1),
249
if (exists $pkg->{'Provides'}) {
250
my $provides = deps_parse($substvars->substvars($pkg->{'Provides'}, no_warn => 1),
250
251
reduce_arch => 1, union => 1);
251
252
if (defined $provides) {
252
253
foreach my $subdep ($provides->get_deps()) {
263
264
foreach my $field (field_list_pkg_dep()) {
264
265
# Arch: all can't be simplified as the host architecture is not known
265
my $reduce_arch = debarch_eq('all', $pkg->{Architecture} || "all") ? 0 : 1;
266
my $reduce_arch = debarch_eq('all', $pkg->{Architecture} || 'all') ? 0 : 1;
266
267
if (exists $pkg->{$field}) {
268
269
my $field_value = $substvars->substvars($pkg->{$field},
269
msg_prefix => sprintf(_g("%s field of package %s: "), $field, $pkg->{Package}));
270
msg_prefix => sprintf(_g('%s field of package %s: '), $field, $pkg->{Package}));
270
271
if (field_get_dep_type($field) eq 'normal') {
271
272
$dep = deps_parse($field_value, use_arch => 1,
272
273
reduce_arch => $reduce_arch);
273
error(_g("error occurred while parsing %s field: %s"), $field,
274
error(_g('error occurred while parsing %s field: %s'), $field,
274
275
$field_value) unless defined $dep;
275
276
$dep->simplify_deps($facts, @seen_deps);
276
277
# Remember normal deps to simplify even further weaker deps
279
280
$dep = deps_parse($field_value, use_arch => 1,
280
281
reduce_arch => $reduce_arch, union => 1);
281
error(_g("error occurred while parsing %s field: %s"), $field,
282
error(_g('error occurred while parsing %s field: %s'), $field,
282
283
$field_value) unless defined $dep;
283
284
$dep->simplify_deps($facts);
286
error(_g("the %s field contains an arch-specific dependency but the " .
287
"package is architecture all"), $field)
287
error(_g('the %s field contains an arch-specific dependency but the ' .
288
'package is architecture all'), $field)
288
289
if $dep->has_arch_restriction();
289
290
$fields->{$field} = $dep->output();
290
291
delete $fields->{$field} unless $fields->{$field}; # Delete empty field
315
316
my $verdiff = $binaryversion ne $sourceversion;
316
317
if ($oppackage ne $sourcepackage || $verdiff) {
317
318
$fields->{'Source'} = $sourcepackage;
318
$fields->{'Source'} .= " (" . $sourceversion . ")" if $verdiff;
319
$fields->{'Source'} .= ' (' . $sourceversion . ')' if $verdiff;
321
322
if (!defined($substvars->get('Installed-Size'))) {
322
defined(my $c = open(DU, "-|")) || syserr(_g("cannot fork for %s"), "du");
324
defined(my $c = open($du_fh, '-|')) || syserr(_g('cannot fork for %s'), 'du');
324
326
chdir("$packagebuilddir") ||
325
327
syserr(_g("chdir for du to \`%s'"), $packagebuilddir);
326
exec("du", "-k", "-s", "--apparent-size", ".") or
327
syserr(_g("unable to execute %s"), "du");
328
exec('du', '-k', '-s', '--apparent-size', '.') or
329
syserr(_g('unable to execute %s'), 'du');
334
336
$? && subprocerr(_g("du in \`%s'"), $packagebuilddir);
335
337
$duo =~ m/^(\d+)\s+\.$/ ||
336
338
error(_g("du gave unexpected output \`%s'"), $duo);
354
356
# Obtain a lock on debian/control to avoid simultaneous updates
355
357
# of debian/files when parallel building is in use
357
sysopen($lockfh, "debian/control", O_WRONLY) ||
358
syserr(_g("cannot write %s"), "debian/control");
359
file_lock($lockfh, "debian/control");
359
sysopen($lockfh, 'debian/control', O_WRONLY) ||
360
syserr(_g('cannot write %s'), 'debian/control');
361
file_lock($lockfh, 'debian/control');
361
363
$fileslistfile="./$fileslistfile" if $fileslistfile =~ m/^\s/;
362
open(Y, ">", "$fileslistfile.new") || syserr(_g("open new files list file"));
364
if (open(X, "<", $fileslistfile)) {
364
open(my $fileslistnew_fh, '>', "$fileslistfile.new") ||
365
syserr(_g('open new files list file'));
366
binmode($fileslistnew_fh);
367
if (open(my $fileslist_fh, '<', $fileslistfile)) {
368
binmode($fileslist_fh);
369
while (<$fileslist_fh>) {
368
371
next if m/^([-+0-9a-z.]+)_[^_]+_([\w-]+)\.(a-z+) /
369
372
&& ($1 eq $oppackage)
370
373
&& ($3 eq $pkg_type)
371
&& (debarch_eq($2, $fields->{'Architecture'} || "")
374
&& (debarch_eq($2, $fields->{'Architecture'} || '')
372
375
|| debarch_eq($2, 'all'));
373
print(Y "$_\n") || syserr(_g("copy old entry to new files list file"));
376
print($fileslistnew_fh "$_\n") ||
377
syserr(_g('copy old entry to new files list file'));
375
close(X) || syserr(_g("close old files list file"));
379
close($fileslist_fh) || syserr(_g('close old files list file'));
376
380
} elsif ($! != ENOENT) {
377
syserr(_g("read old files list file"));
381
syserr(_g('read old files list file'));
379
383
my $sversion = $fields->{'Version'};
380
384
$sversion =~ s/^\d+://;
381
$forcefilename = sprintf("%s_%s_%s.%s", $oppackage, $sversion,
382
$fields->{'Architecture'} || "", $pkg_type)
383
unless ($forcefilename);
384
print(Y $substvars->substvars(sprintf("%s %s %s\n", $forcefilename,
385
$fields->{'Section'} || '-',
386
$fields->{'Priority'} || '-')))
387
|| syserr(_g("write new entry to new files list file"));
388
close(Y) || syserr(_g("close new files list file"));
389
rename("$fileslistfile.new", $fileslistfile) || syserr(_g("install new files list file"));
385
$forcefilename //= sprintf('%s_%s_%s.%s', $oppackage, $sversion,
386
$fields->{'Architecture'} || '', $pkg_type);
388
print($fileslistnew_fh $substvars->substvars(sprintf("%s %s %s\n",
390
$fields->{'Section'} || '-',
391
$fields->{'Priority'} || '-')))
392
|| syserr(_g('write new entry to new files list file'));
393
close($fileslistnew_fh) || syserr(_g('close new files list file'));
394
rename("$fileslistfile.new", $fileslistfile) || syserr(_g('install new files list file'));
391
396
# Release the lock
392
close($lockfh) || syserr(_g("cannot close %s"), "debian/control");
397
close($lockfh) || syserr(_g('cannot close %s'), 'debian/control');
397
402
$cf= "$packagebuilddir/DEBIAN/control";
398
403
$cf= "./$cf" if $cf =~ m/^\s/;
399
open($fh_output, ">", "$cf.new") ||
404
open($fh_output, '>', "$cf.new") ||
400
405
syserr(_g("cannot open new output control file \`%s'"), "$cf.new");
402
407
$fh_output = \*STDOUT;