Downloading all dependencies, and compiling them later?
Don Bright
phdecora at yahoo.com
Wed Apr 11 16:31:43 PDT 2007
Bas, thank you. I tried your script, and had a slight problem. I
rewrote it, pasted below.
I hope the 'ports' program will be modified in the future to do this
itself...
-----------
#! /usr/bin/perl
# mpfetch --- fetch Macports ports and al dependencies, recursively.
use warnings;
use strict;
my (%fetched);
foreach(@ARGV) {
fetch(0,$_);
}
print "\nDone\n\n";
sub getdeps {
my @deps = ();
my @port_result = qx/port deps $_/;
if (grep(/has no dependencies/, at port_result)) { return; }
#print "\nstripping extra messages from port deps command..\n";
my @stage1=grep(!/has build dependencies/, at port_result);
@stage1=grep(!/has library dependencies/, at stage1);
@stage1=grep(!/has runtime dependencies/, at stage1);
#print "stripping whitespace..\n";
foreach (@stage1) {
s#^\s|\s$##g;
push (@deps, $_);
}
#print "deps: ", join(",", at deps) ,"\n";
return @deps;
}
sub fetch {
my $level = shift;
my $indent = "\n" . (" " x $level);
foreach(@_) {
my $port = $_;
print $indent, "<- Fetching '$port' ...";
my $result = system("port fetch $port");
unless ($result) {
$fetched{$port}++; # remember what
whas fetched, for speed
print "done.";
} else {
print $result;
print $indent,"!! Couldn't fetch '$port' !";
}
my @deps = getdeps $port;
if (!@deps) {
#print "\n$port has no dependencies\n";
return;
} else {
print $indent, "-> $port has the following
dependencies:";
foreach (@deps) {
print $indent, ($fetched{$_} ? "+ " :
"- "), $_;
next if $fetched{$_};
fetch($level+1,$_);
}
}
}
}
--------
More information about the macports-users
mailing list