2 # ----------------------------------------------------------------------------
3 # "THE BEER-WARE LICENSE" (Revision 42):
4 # <phk@FreeBSD.ORG> wrote this file. As long as you retain this notice you
5 # can do whatever you want with this stuff. If we meet some day, and you think
6 # this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp
7 # ----------------------------------------------------------------------------
9 # $FreeBSD: src/tools/tools/kerninclude/kerninclude.sh,v 1.1.2.1 2001/03/05 12:18:27 kris Exp $
10 # $DragonFly: src/tools/tools/kerninclude/kerninclude.sh,v 1.2 2003/06/17 04:29:11 dillon Exp $
12 # This script tries to find #include statements which are not needed in
13 # the FreeBSD kernel tree.
18 # Base of the kernel sources you want to work on
21 # Set to true to start from scratch, false to resume
24 # Which kernels you want to check
25 kernels="LINT GENERIC GENERIC98"
32 echo "Cleaning modules"
34 make clean > /dev/null 2>&1
35 make cleandir > /dev/null 2>&1
36 make cleandir > /dev/null 2>&1
37 make clean > /dev/null 2>&1
38 make clean > /dev/null 2>&1
42 echo "Cleaning compile"
44 ls | grep -v CVS | xargs rm -rf
49 echo "Cleaning temp files"
50 find . -name '*.h_' -print | xargs rm -f
51 find . -name '::*' -print | xargs rm -f
52 find . -name '*.o' -size 0 -print | xargs rm -f
55 echo "Configuring kernels"
69 cp -f GENERIC GENERIC98
84 if [ ! -f kernel ] ; then
85 echo "Error: No $i kernel built"
92 echo "Compiling modules"
97 # Generate the list of object files we want to check
98 # you can put a convenient grep right before the sort
99 # if you want just some specific subset of files checked
104 if [ -d $i -a $i != CVS ] ; then
105 ( cd $i ; ls *.o 2>/dev/null || true)
111 ( cd $i ; ls *.o 2>/dev/null )
130 if [ ! -f compile/$k/$o ] ; then
134 if [ "x$src" = "x" ] ; then
139 src=compile/$k/`awk '$1 == "cc" {print $NF}' _`
141 if expr "x$src" : 'x.*\.c$' > /dev/null ; then
151 if [ ! -d $m -o ! -f $m/$o ] ; then
155 if [ "x$src" = "x" ] ; then
160 src=`awk '$1 == "cc" {print $NF}' _`
162 if expr "x$src" : 'x.*\.c$' > /dev/null ; then
163 if [ "`dirname $src`" = "." ] ; then
173 if [ "x$src" = "x" ] ; then
180 grep -n '^[ ]*#[ ]*include' $src | sed '
181 s/^\([0-9]*\):[ ]*#[ ]*include[ ]*[<"]/\1 /
184 ' | sort -rn | while read lin incl
187 echo " INCL $lin $incl"
190 # Check if we can compile without this #include line.
192 sed "${lin}s/.*//" ${src}_ > ${src}
197 if make ${o} > _log 2>&1 ; then
198 if cmp -s ${o} ${o}_ ; then
199 echo " $t same object"
201 echo " $t changed object"
210 if [ "x$S" != "x" ] ; then
214 if [ "x$S" != "x" ] ; then
219 # Check if this is because it is a nested #include
228 if make INCLMAGIC=-Ifoo ${o} > _log2 2>&1 ; then
229 if cmp -s ${o} ${o}_ ; then
230 echo " $t still same object"
232 echo " $t changed object"
236 echo " $t nested include"
242 if [ "x$S" != "x" ] ; then
246 if [ "x$S" != "x" ] ; then
251 # Check if this is because it is #ifdef'ed out
253 sed "${lin}s/.*/#error \"BARF\"/" ${src}_ > ${src}
258 if make ${o} > /dev/null 2>&1 ; then
259 echo " $t line not read"
264 if [ "x$S" != "x" ] ; then
270 if [ "x$S" != "x" ] ; then
274 # Check if the warnings changed.
280 if make ${o} > _ref 2>&1 ; then
281 if cmp -s _ref _log ; then
282 echo " $t same warnings"
284 echo " $t changed warnings"
294 if [ "x$S" != "x" ] ; then
298 if [ "x$S" != "x" ] ; then
302 sed "${lin}d" ${src}_ > ${src}
305 echo "BINGO $src $lin $incl $obj $l"