source: trunk/debathena/scripts/build-server/build-all/gen-build-deps @ 22955

Revision 22955, 1.7 KB checked in by ghudson, 16 years ago (diff)
In build-all's gen-build-deps, split the build-depends line into fields before performing substitutions which rely on the end of the string.
  • Property svn:executable set to *
Line 
1#!/usr/bin/perl
2
3use warnings;
4use strict;
5
6my $psuite = $ARGV[0];
7$psuite or die "Usage: gen-build-deps <previous suite name>";
8$ENV{DEBATHENA_APT} or $ENV{DEBATHENA_APT}="/mit/debathena/apt";
9
10sub list {
11        my ($l) = @_;
12        my @a = split(/, /, $l);
13        foreach (@a) {
14            s/ \(.*\)$//;
15            s/ \|.*$//;
16            s/ \[.*$//;
17        }
18        return @a;
19}
20
21open(DPKG, '-|', "zcat $ENV{DEBATHENA_APT}/dists/$psuite/*/source/Sources.gz | dpkg-awk -f - -- Package Build-Depends") or die;
22my %src_deps = ();
23while (<DPKG>) {
24        last if /^$/;
25        my ($source) = /^Package: (.*)$/ or die;
26        @{$src_deps{$source}} = ();
27        while (<DPKG>) {
28                last if ($_ eq "\n");
29                if (my ($depends) = /^Build-Depends: (.*)$/) {
30                        push @{$src_deps{$source}}, $_ for (list($depends));
31                } else {
32                        die;
33                }
34        }
35}
36close DPKG;
37open(DPKG, '-|', "zcat $ENV{DEBATHENA_APT}/dists/$psuite/debathena/binary-amd64/Packages.gz | dpkg-awk -f - -- Package Source Provides") or die;
38my %pkg_src = ();
39my %pkg_provider = ();
40while (<DPKG>) {
41        last if /^$/;
42        my ($package) = /^Package: (.*)$/ or die;
43        $pkg_src{$package} = $package;
44        $pkg_provider{$package} = $package;
45        while (<DPKG>) {
46                last if ($_ eq "\n");
47                if (my ($source) = /^Source: (.*)$/) {
48                        $pkg_src{$package} = $source;
49                } elsif (my ($provides) = /^Provides: (.*)$/) {
50                        $pkg_provider{$_} = $package for (list($provides));
51                } else {
52                        die;
53                }
54        }
55}
56for my $source (keys %src_deps) {
57        print "build-all: \$(call package,$source)\n";
58        if ($source ne "debathena-build-depends") {
59            print "\$(call package,debathena-build-depends): \$(call package,$source)\n";
60        }
61        for (@{$src_deps{$source}}) {
62                print "\$(call package,$source): \$(call package,$pkg_src{$pkg_provider{$_}})\n" if (defined $pkg_provider{$_});
63        }
64}
Note: See TracBrowser for help on using the repository browser.