~ubuntu-branches/ubuntu/karmic/kid3/karmic

« back to all changes in this revision

Viewing changes to deb-kde4/cdbs/dh_sameversiondeps

  • Committer: Bazaar Package Importer
  • Author(s): Patrick Matthäi
  • Date: 2009-05-20 16:12:30 UTC
  • mfrom: (1.2.3 upstream)
  • mto: This revision was merged to the branch mainline in revision 23.
  • Revision ID: james.westby@ubuntu.com-20090520161230-qetp532r8ydujkz2
Tags: upstream-1.2
Import upstream version 1.2

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#!/usr/bin/perl -w
2
 
 
3
 
use strict;
4
 
use Dpkg::Control;
5
 
use Dpkg::Substvars;
6
 
use Dpkg::ErrorHandling;
7
 
use File::Copy;
8
 
 
9
 
use Debian::Debhelper::Dh_Lib;
10
 
 
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))\}/;
16
 
 
17
 
# Global substvars file
18
 
my $g_substvars = new Dpkg::Substvars;
19
 
$g_substvars->parse("debian/substvars") if (-r "debian/substvars");
20
 
 
21
 
sub Shlibsvars::new {
22
 
    my ($cls, $package, $control, $substvars_file) = @_;
23
 
    my $self = bless ( {
24
 
        "package" => $package,
25
 
        "control" => $control,
26
 
        "file" => $substvars_file,
27
 
        }, $cls);
28
 
    $self->{substvars} = new Dpkg::Substvars;
29
 
    if (-r $self->{file}) {
30
 
        $self->{substvars}->parse($self->{file});
31
 
    }
32
 
    return $self;
33
 
}
34
 
 
35
 
sub Shlibsvars::get_fieldval {
36
 
    my ($self, $field) = @_;
37
 
 
38
 
    my $pkg = $self->{control}->get_pkg_by_name($self->{package});
39
 
    return undef if (!defined $pkg || !exists $pkg->{$field});
40
 
 
41
 
    # Turn of warnings for substvars runs
42
 
    my $save_quiet = $Dpkg::ErrorHandling::quiet_warnings;
43
 
    $Dpkg::ErrorHandling::quiet_warnings = 1;
44
 
 
45
 
    my $val = $pkg->{$field};
46
 
    $val = $self->{substvars}->substvars($val);
47
 
    $val = $g_substvars->substvars($val);
48
 
 
49
 
    $Dpkg::ErrorHandling::quiet_warnings = $save_quiet;
50
 
    return $val;
51
 
}
52
 
 
53
 
sub Shlibsvars::extract_deps {
54
 
    my ($self, $field, $deppkg) = @_;
55
 
 
56
 
    my $val = $self->get_fieldval($field);
57
 
    return undef() unless defined $val;
58
 
 
59
 
    # Extract dependency fields we need
60
 
    my @matched_deps;
61
 
    for my $dep (split(/\s*,\s*/, $val)) {
62
 
        if ($dep =~ /^\Q$deppkg\E(?:$|[\W])/) {
63
 
            push @matched_deps, $dep;
64
 
        }
65
 
    }
66
 
    return join(",", @matched_deps);
67
 
}
68
 
 
69
 
sub write_substvar($$$$) {
70
 
    my ($pkgname, $varname, $value, $substvars) = @_;
71
 
    my @contents;
72
 
    my $varset = 0;
73
 
 
74
 
    my $file = (-r $substvars) ? $substvars : "debian/substvars";
75
 
    if (-r $file) {
76
 
        open(FILE, "<$file") or die "Unable to open substvars file '$file' for reading\n";
77
 
        while (<FILE>) {
78
 
            if (!$varset && /^\s*\Q$varname=\E/) {
79
 
                push @contents, "$varname=$value\n";
80
 
                $varset = 1;
81
 
            } else {
82
 
                push @contents, $_;
83
 
            }
84
 
        }
85
 
        close(FILE);
86
 
    } else {
87
 
        # Fallback to default
88
 
        $file = $substvars;
89
 
    }
90
 
 
91
 
    open(FILE, ">$file.tmp") or die "Unable to open substvars file '$file.tmp' for writing\n";
92
 
    for (@contents) {
93
 
        print FILE $_;
94
 
    }
95
 
    if (!$varset) {
96
 
        print FILE "$varname=$value", "\n";
97
 
    }
98
 
    close(FILE);
99
 
 
100
 
    File::Copy::move("$file.tmp", "$file");
101
 
}
102
 
 
103
 
init();
104
 
 
105
 
my $control = new Dpkg::Control;
106
 
my %shlibsvars;
107
 
 
108
 
foreach my $package (@{$dh{DOPACKAGES}}) {
109
 
    my $pkg_substvars = sprintf("debian/%ssubstvars", pkgext($package));
110
 
    my $pkg = $control->get_pkg_by_name($package);
111
 
 
112
 
    for my $fieldname (@fields) {
113
 
        if (exists $pkg->{$fieldname}) {
114
 
            my $fieldval = $pkg->{$fieldname};
115
 
            my $pkgname = $pkg->{Package};
116
 
 
117
 
            while ($fieldval =~ m/\G.*?$re_oursubstvar/g) {
118
 
                my $varname = $1;
119
 
                my $dep2add = $2;
120
 
                my $basepkg = $3;
121
 
                my $deptype = $4;
122
 
                my $deppkg  = $5;
123
 
 
124
 
                if (!exists $shlibsvars{$basepkg}) {
125
 
                    my $base_substvars = sprintf("debian/%ssubstvars", pkgext($basepkg));
126
 
                    $shlibsvars{$basepkg} = new Shlibsvars($basepkg, $control, $base_substvars);
127
 
                }
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;
132
 
 
133
 
                # Write substvar for the package
134
 
                write_substvar($pkgname, $varname, $deps, $pkg_substvars);
135
 
            }
136
 
        }
137
 
    }
138
 
}
139
 
 
140
 
exit 0