Advertisement
Guest User

depsgraph: Produce dependency graph for macports

a guest
Aug 16th, 2011
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 1.23 KB | None | 0 0
  1. #!/usr/bin/perl -w
  2.  
  3. # Usage: depsgraph macport1 macport2 ...
  4. # (c) 2011 M.E. O'Neill.  BSD Licence.
  5.  
  6. use strict;
  7.  
  8. my @req = @ARGV;
  9. my %graph;
  10. my %seen;
  11. while (@req) {
  12.     my %need;
  13.     foreach my $req (@req) {
  14.         next if $seen{$req}++;
  15.         $graph{$req} //= {};
  16.         open my $portcmd, "-|", "port", "deps", $req;
  17.         print STDERR "$req ";
  18.         while (<$portcmd>) {
  19.             chomp;
  20.             next unless (s/^(\w+)\s+Dependencies:\s+//);
  21.             my $type = $1;
  22.             foreach my $newdep (split /,\s+/) {
  23.                 $graph{$req}{$newdep} = $type ;
  24.                 ++$need{$newdep};
  25.             }
  26.         }
  27.     }
  28.     @req = keys %need;
  29. }
  30. print STDERR "\n";
  31.  
  32. my %attrFor = (
  33.         Build   => " [color=red]",
  34.         Library => "",
  35.         Runtime => " [color=green]",
  36. );
  37.  
  38. my %id = map { my $fixed = $_; $fixed =~ s/-/_/g; $_ => $fixed } keys %graph;
  39.  
  40. print "digraph {\n";
  41. foreach my $port (sort keys %graph) {
  42.     my $deps = $graph{$port};
  43.     print "    $id{$port} [label=\"$port\"];\n";
  44.     foreach my $dep (sort keys %$deps) {
  45.         print "\t$id{$port} -> $id{$dep}";
  46.         my $attribs = $attrFor{$deps->{$dep}} // "";
  47.         print $attribs, ";\n";
  48.     }
  49. }
  50. print "}\n";
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement