Add tools directory
This directory will contain tools which are not necessary for OpenRC to run, but which some users have found useful. The first of these is deptree2dot, which converts /run/openrc/deptree to a .dot file for use with graphviz. This can assist in finding circular dependencies.
This commit is contained in:
parent
7bda62d844
commit
630d23283a
1
README
1
README
@ -18,6 +18,7 @@ MKSELINUX=yes
|
||||
MKSTATICLIBS=no
|
||||
MKTERMCAP=ncurses
|
||||
MKTERMCAP=termcap
|
||||
MKTOOLS=yes
|
||||
PKG_PREFIX=/usr/pkg
|
||||
LOCAL_PREFIX=/usr/local
|
||||
PREFIX=/usr/local
|
||||
|
@ -3,5 +3,9 @@
|
||||
|
||||
SUBDIR= test libeinfo librc rc
|
||||
|
||||
ifeq (${MKTOOLS},yes)
|
||||
SUBDIR+= tools
|
||||
endif
|
||||
|
||||
MK= ../mk
|
||||
include ${MK}/subdir.mk
|
||||
|
5
src/tools/Makefile
Normal file
5
src/tools/Makefile
Normal file
@ -0,0 +1,5 @@
|
||||
DIR= ${UPREFIX}/bin
|
||||
BIN= deptree2dot
|
||||
|
||||
MK= ../../mk
|
||||
include ${MK}/scripts.mk
|
44
src/tools/deptree2dot
Normal file
44
src/tools/deptree2dot
Normal file
@ -0,0 +1,44 @@
|
||||
#!/usr/bin/perl -w
|
||||
# -*- cperl -*-
|
||||
# Copyright © 2012 Diego Elio Pettenò <flameeyes@flameeyes.eu>
|
||||
# Released under the 2-clause BSD license.
|
||||
#
|
||||
#Example usage:
|
||||
#deptree2dot > deptree.dot
|
||||
#deptree2dot | dot -Tpng -o deptree.png
|
||||
|
||||
my $deptree = defined($ARGV[0]) ? $ARGV[0] : "/run/openrc/deptree";
|
||||
|
||||
open DEPTREE, $deptree or exit 1;
|
||||
|
||||
print "digraph deptree {\n";
|
||||
|
||||
my @deptree;
|
||||
|
||||
while(my $line = readline(DEPTREE)) {
|
||||
$line =~ /^depinfo_([0-9]+)_([a-z]+)(?:_[0-9]+)?='(.*)'\n$/;
|
||||
my $index = $1;
|
||||
my $prop = $2;
|
||||
my $value = $3; $value =~ s/[-\.:~]/_/g;
|
||||
|
||||
if ( $prop eq "service" ) {
|
||||
$deptree[$index] = $value;
|
||||
printf "%s [shape=box];\n", $value;
|
||||
} else {
|
||||
my $service = $deptree[$index];
|
||||
|
||||
if ( $prop eq "ineed" ) {
|
||||
printf "%s -> %s;\n", $service, $value;
|
||||
} elsif ( $prop eq "iuse" ) {
|
||||
printf "%s -> %s [color=blue];\n", $service, $value;
|
||||
} elsif ( $prop eq "ibefore" ) {
|
||||
printf "%s -> %s [style=dotted];\n", $service, $value;
|
||||
} elsif ( $prop eq "iafter" ) {
|
||||
printf "%s -> %s [style=dotted color=purple];\n", $value, $service;
|
||||
} elsif ( $prop eq "iprovide" ) {
|
||||
printf "%s -> %s [color=red];\n", $value, $service;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
print "}\n";
|
Loading…
Reference in New Issue
Block a user