summaryrefslogtreecommitdiff
path: root/createarchdeps
diff options
context:
space:
mode:
authorZhang Qiang <qiang.z.zhang@intel.com>2014-04-03 15:53:09 +0800
committerZhang Qiang <qiang.z.zhang@intel.com>2014-04-03 15:53:09 +0800
commitb979ae3b9b879ce19582770e2ba89eb3e66f964a (patch)
tree758e7684bbaa43d8899ccbc49b133ff0112d3a88 /createarchdeps
downloadbuild-b979ae3b9b879ce19582770e2ba89eb3e66f964a.tar.gz
build-b979ae3b9b879ce19582770e2ba89eb3e66f964a.tar.bz2
build-b979ae3b9b879ce19582770e2ba89eb3e66f964a.zip
Imported Upstream version 2013.11.12upstream/2013.11.12
Diffstat (limited to 'createarchdeps')
-rwxr-xr-xcreatearchdeps72
1 files changed, 72 insertions, 0 deletions
diff --git a/createarchdeps b/createarchdeps
new file mode 100755
index 0000000..a97f762
--- /dev/null
+++ b/createarchdeps
@@ -0,0 +1,72 @@
+#!/usr/bin/perl -w
+
+# Archlinux support, based on the GSoC work of Nikolay Rysev <mad.f3ka@gmail.com>
+
+BEGIN {
+ unshift @INC, ($::ENV{"BUILD_DIR"} || "/usr/lib/build");
+}
+
+use strict;
+use Archive::Tar;
+use Build::Arch;
+use Digest::MD5;
+use File::Path;
+use Getopt::Long;
+
+Getopt::Long::Configure("no_ignore_case");
+
+my $cachedir = "/var/cache/build";
+
+sub getrepodb {
+ my ($url, $reponame, $dir) = @_;
+ File::Path::mkpath($dir);
+ system($INC[0]."/download", $dir, "$url$reponame.db");
+}
+
+sub getreponame {
+ my ($url) = @_;
+ return $1 if "/$url/" =~ /.*\/([^\/]+)\/os\//;
+ return undef;
+}
+
+sub printpkginfo {
+ my ($d, $repourl) = @_;
+ my $id = $d->{'name'} . "." . $d->{'arch'} . "-" . $d->{'buildtime'} . "/0/0";
+ my $pkgurl = $repourl . $d->{'filename'};
+ my $selfprovides = $d->{'name'};
+ $selfprovides .= "=$d->{'version'}" if defined $d->{'version'};
+ push @{$d->{'provides'}}, $selfprovides unless @{$d->{'provides'} || []} && $d->{'provides'}->[-1] eq $selfprovides;
+ print "F:$id: $pkgurl\n";
+ print "P:$id: " . join(' ', @{$d->{'provides'}}) . "\n" if $d->{'provides'};
+ print "R:$id: " . join(' ', @{$d->{'requires'}}) . "\n" if $d->{'requires'};
+ print "I:$id: $d->{name}-$d->{'version'} $d->{'buildtime'}\n";
+}
+
+GetOptions("cachedir=s" => \$cachedir) or exit(1);
+
+
+for my $url (@ARGV) {
+ die("Not an Archlinux repo") unless $url =~ /^(ht|f)tp:\/\/([^\/]*)\/?/;
+ my $reponame = getreponame($url);
+ my $repoid = Digest::MD5::md5_hex("arch\@$url");
+ my $dir = "$cachedir/$repoid";
+ $url .= '/' unless $url =~ /\/$/;
+ getrepodb($url, $reponame, $dir);
+
+ my $repodb = Archive::Tar->iter("$dir/$reponame.db", 1);
+ my $e;
+ my $lastfn = '';
+ my $d;
+ while ($e = $repodb->()) {
+ next unless $e->type() == Archive::Tar::Constant::FILE;
+ my $fn = $e->name();
+ next unless $fn =~ s/\/(?:depends|desc|files)$//s;
+ if ($lastfn ne $fn) {
+ printpkginfo($d, $url) if $d->{'name'};
+ $d = {};
+ $lastfn = $fn;
+ }
+ Build::Arch::parserepodata($d, $e->get_content());
+ }
+ printpkginfo($d, $url) if $d->{'name'};
+}