6
use Dpkg::ErrorHandling;
9
use Debian::Debhelper::Dh_Lib;
11
my $namespace = "sameVersionDep";
12
my @fields = qw(Depends Recommends Suggests Enhances Pre-Depends);
13
my $re_fields = join("|", @fields);
14
my $re_pkgname = qr/[a-z0-9][a-z0-9+.-]*/;
15
my $re_oursubstvar = qr/\$\{($namespace:($re_pkgname):($re_pkgname)-($re_fields)-($re_pkgname))\}/;
17
# Global substvars file
18
my $g_substvars = new Dpkg::Substvars;
19
$g_substvars->parse("debian/substvars") if (-r "debian/substvars");
22
my ($cls, $package, $control, $substvars_file) = @_;
24
"package" => $package,
25
"control" => $control,
26
"file" => $substvars_file,
28
$self->{substvars} = new Dpkg::Substvars;
29
if (-r $self->{file}) {
30
$self->{substvars}->parse($self->{file});
35
sub Shlibsvars::get_fieldval {
36
my ($self, $field) = @_;
38
my $pkg = $self->{control}->get_pkg_by_name($self->{package});
39
return undef if (!defined $pkg || !exists $pkg->{$field});
41
# Turn of warnings for substvars runs
42
my $save_quiet = $Dpkg::ErrorHandling::quiet_warnings;
43
$Dpkg::ErrorHandling::quiet_warnings = 1;
45
my $val = $pkg->{$field};
46
$val = $self->{substvars}->substvars($val);
47
$val = $g_substvars->substvars($val);
49
$Dpkg::ErrorHandling::quiet_warnings = $save_quiet;
53
sub Shlibsvars::extract_deps {
54
my ($self, $field, $deppkg) = @_;
56
my $val = $self->get_fieldval($field);
57
return undef() unless defined $val;
59
# Extract dependency fields we need
61
for my $dep (split(/\s*,\s*/, $val)) {
62
if ($dep =~ /^\Q$deppkg\E(?:$|[\W])/) {
63
push @matched_deps, $dep;
66
return join(",", @matched_deps);
69
sub write_substvar($$$$) {
70
my ($pkgname, $varname, $value, $substvars) = @_;
74
my $file = (-r $substvars) ? $substvars : "debian/substvars";
76
open(FILE, "<$file") or die "Unable to open substvars file '$file' for reading\n";
78
if (!$varset && /^\s*\Q$varname=\E/) {
79
push @contents, "$varname=$value\n";
91
open(FILE, ">$file.tmp") or die "Unable to open substvars file '$file.tmp' for writing\n";
96
print FILE "$varname=$value", "\n";
100
File::Copy::move("$file.tmp", "$file");
105
my $control = new Dpkg::Control;
108
foreach my $package (@{$dh{DOPACKAGES}}) {
109
my $pkg_substvars = sprintf("debian/%ssubstvars", pkgext($package));
110
my $pkg = $control->get_pkg_by_name($package);
112
for my $fieldname (@fields) {
113
if (exists $pkg->{$fieldname}) {
114
my $fieldval = $pkg->{$fieldname};
115
my $pkgname = $pkg->{Package};
117
while ($fieldval =~ m/\G.*?$re_oursubstvar/g) {
124
if (!exists $shlibsvars{$basepkg}) {
125
my $base_substvars = sprintf("debian/%ssubstvars", pkgext($basepkg));
126
$shlibsvars{$basepkg} = new Shlibsvars($basepkg, $control, $base_substvars);
128
my $vars = $shlibsvars{$basepkg};
129
my $deps = $vars->extract_deps($deptype, $deppkg);
130
$deps = "" unless($deps);
131
$deps =~ s/\b\Q$deppkg\E\b/$dep2add/g;
133
# Write substvar for the package
134
write_substvar($pkgname, $varname, $deps, $pkg_substvars);