Simple #include dependency printer.

  • Doesn't handle circular dependencies
  • Searches for files in the current directory only

!/bin/sh

Prints a #include dependency tree

Reads arguments from either command line or stdin (but not both)

DEPTH=

extract_filename()
{
    sed 's/\W*#include\W["<]([^">]*)[">].*$/\1/g'
}

extract_includes()
{
    DEPTH="$DEPTH    ";
    while read current; do
        echo "$DEPTH$current"
        grep '#include' "$current" | extract_filename | extract_includes 2> /dev/null
    done
}

read from commandline

for FILE in $@; do
    echo "$FILE:"
    echo "$FILE" | extract_includes
done

read from stdin

if [ -z $@ ]; then
    extract_includes
fi

$[Get Code]1