Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/perl -w
- # Usage: depsgraph macport1 macport2 ...
- # (c) 2011 M.E. O'Neill. BSD Licence.
- use strict;
- my @req = @ARGV;
- my %graph;
- my %seen;
- while (@req) {
- my %need;
- foreach my $req (@req) {
- next if $seen{$req}++;
- $graph{$req} //= {};
- open my $portcmd, "-|", "port", "deps", $req;
- print STDERR "$req ";
- while (<$portcmd>) {
- chomp;
- next unless (s/^(\w+)\s+Dependencies:\s+//);
- my $type = $1;
- foreach my $newdep (split /,\s+/) {
- $graph{$req}{$newdep} = $type ;
- ++$need{$newdep};
- }
- }
- }
- @req = keys %need;
- }
- print STDERR "\n";
- my %attrFor = (
- Build => " [color=red]",
- Library => "",
- Runtime => " [color=green]",
- );
- my %id = map { my $fixed = $_; $fixed =~ s/-/_/g; $_ => $fixed } keys %graph;
- print "digraph {\n";
- foreach my $port (sort keys %graph) {
- my $deps = $graph{$port};
- print " $id{$port} [label=\"$port\"];\n";
- foreach my $dep (sort keys %$deps) {
- print "\t$id{$port} -> $id{$dep}";
- my $attribs = $attrFor{$deps->{$dep}} // "";
- print $attribs, ";\n";
- }
- }
- print "}\n";
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement