README.busybox: document incompatibility with built-in ip applet
[proj/openrc.git] / src / tools / deptree2dot
1 #!/usr/bin/perl -w
2 # -*- cperl -*-
3 # Copyright � 2012 Diego Elio Petten� <flameeyes@flameeyes.eu>
4 # Released under the 2-clause BSD license.
5 #
6 #Example usage:
7 #deptree2dot > deptree.dot
8 #deptree2dot | dot -Tpng -o deptree.png
9
10 my $deptree = defined($ARGV[0]) ? $ARGV[0] : "/run/openrc/deptree";
11
12 open DEPTREE, $deptree or exit 1;
13
14 print "digraph deptree {\n";
15
16 my @deptree;
17
18 while(my $line = readline(DEPTREE)) {
19   $line =~ /^depinfo_([0-9]+)_([a-z]+)(?:_[0-9]+)?='(.*)'\n$/;
20   my $index = $1;
21   my $prop = $2;
22   my $value = $3; $value =~ s/[-\.:~]/_/g;
23
24   if ( $prop eq "service" ) {
25     $deptree[$index] = $value;
26     printf "%s [shape=box];\n", $value;
27   } else {
28     my $service = $deptree[$index];
29
30     if ( $prop eq "ineed" ) {
31       printf "%s -> %s;\n", $service, $value;
32     } elsif ( $prop eq "iuse" ) {
33       printf "%s -> %s [color=blue];\n", $service, $value;
34     } elsif ( $prop eq "ibefore" ) {
35       printf "%s -> %s [style=dotted];\n", $service, $value;
36     } elsif ( $prop eq "iafter" ) {
37       printf "%s -> %s [style=dotted color=purple];\n", $value, $service;
38     } elsif ( $prop eq "iprovide" ) {
39       printf "%s -> %s [color=red];\n", $value, $service;
40     }
41   }
42 }
43
44 print "}\n";