#!/bin/sh incpath='/usr/include' if [ $# -lt 2 ]; then echo 'Usage: cppgrep regexp file ...' echo ' search C/C++ file + included headers for regexp' echo ' regexp = AWK style extended regular expression' echo ' environment: $DEFINES (-DXXX=YYY) and $INCPATH (-Ixx/yy/zz)' exit 1 fi regexp=$1 level='' shift function do_grep { /lib/cpp $INCPATH $DEFINES -dD $1 | awk -v re=$regexp \ '/^# [0-9]/ { gsub("\"", "", $3); fn=$3; } { if (match($0, re)) { if (fn!=cfn) { print "++++ " fn ":"; cfn=fn; } print "---- " $0;}}' } function test_do_grep { echo inc=$INCPATH, def=$DEFINES /lib/cpp $INCPATH $DEFINES -dD $1 | grep '^# [0-9]' } if echo $1 | grep -q src/linux || echo $PWD | grep -q src/linux || echo $PWD | grep -q hankwang/Linux then INCPATH="$INCPATH -I/usr/src/linux/include" DEFINES="$DEFINES -D__KERNEL__" fi for fn in $*; do do_grep $fn done