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