#!/bin/bash # Arnaldo Carvalho de Melo, Manfred Spraul TMPDIR=/var/tmp declare colors colors=(black blue red green magenta yellow black black black black black black) getheaders() { local file=$1 cat $file | gawk '/^#include/{print $2}' | sed -e 's///' -e 's/"//g' | grep -v -f $done } gviz() { test $reclevel -ge $maxreclevel && return reclevel=$((reclevel + 1)) local file=$1 test -f $file || file=include/$file echo echo $1 >> $done local tmp=`mktemp $TMPDIR/XXXXXX` getheaders $file > $tmp cat $tmp | sed -e "s,^,\"${1}\" -> \"," -e "s/$/\" \[color=${colors[${reclevel}]}\];/" for i in $(cat $tmp) ; do gviz $i done rm -f $tmp reclevel=$((reclevel - 1)) } if [ $# -lt 2 ] ; then echo 'usage: $0 file maxreclevel ' exit fi file=$1 maxreclevel=$2 reclevel=0 done=`mktemp $TMPDIR/done.XXXXXX` if [ $# -gt 2 ] ; then if [ -f $file ] ; then cat $3 >> $done else echo $3 >> $done fi fi # I suggest that you prune linux/config.h and autoconf.h from all graphs. # The dependency system does not depend directly on those files, instead # it depends on individual config options. Keith Owens echo 'linux/autoconf.h' >> $done echo 'linux/config.h' >> $done echo 'digraph bla {' echo 'rankdir=LR;' gviz $file echo '};' rm -f $done