3 # Archlinux support, based on the GSoC work of Nikolay Rysev <mad.f3ka@gmail.com>
6 unshift @INC, ($::ENV{"BUILD_DIR"} || "/usr/lib/build");
16 Getopt::Long::Configure("no_ignore_case");
18 my $cachedir = "/var/cache/build";
21 my ($url, $reponame, $dir) = @_;
22 File::Path::mkpath($dir);
23 system($INC[0]."/download", $dir, "$url$reponame.db");
28 return $1 if "/$url/" =~ /.*\/([^\/]+)\/os\//;
33 my ($d, $repourl) = @_;
34 my $id = $d->{'name'} . "." . $d->{'arch'} . "-" . $d->{'buildtime'} . "/0/0";
35 my $pkgurl = $repourl . $d->{'filename'};
36 my $selfprovides = $d->{'name'};
37 $selfprovides .= "=$d->{'version'}" if defined $d->{'version'};
38 push @{$d->{'provides'}}, $selfprovides unless @{$d->{'provides'} || []} && $d->{'provides'}->[-1] eq $selfprovides;
39 print "F:$id: $pkgurl\n";
40 print "P:$id: " . join(' ', @{$d->{'provides'}}) . "\n" if $d->{'provides'};
41 print "R:$id: " . join(' ', @{$d->{'requires'}}) . "\n" if $d->{'requires'};
42 print "I:$id: $d->{name}-$d->{'version'} $d->{'buildtime'}\n";
45 GetOptions("cachedir=s" => \$cachedir) or exit(1);
49 die("Not an Archlinux repo") unless $url =~ /^(ht|f)tp:\/\/([^\/]*)\/?/;
50 my $reponame = getreponame($url);
51 my $repoid = Digest::MD5::md5_hex("arch\@$url");
52 my $dir = "$cachedir/$repoid";
53 $url .= '/' unless $url =~ /\/$/;
54 getrepodb($url, $reponame, $dir);
56 my $repodb = Archive::Tar->iter("$dir/$reponame.db", 1);
60 while ($e = $repodb->()) {
61 next unless $e->type() == Archive::Tar::Constant::FILE;
63 next unless $fn =~ s/\/(?:depends|desc|files)$//s;
65 printpkginfo($d, $url) if $d->{'name'};
69 Build::Arch::parserepodata($d, $e->get_content());
71 printpkginfo($d, $url) if $d->{'name'};