--=_courier-20874-1051768338-0001-2
Content-Type: multipart/mixed; boundary="XRI2XbIfl/05pQwm"
Content-Disposition: inline
--XRI2XbIfl/05pQwm
Content-Type: text/plain; charset=us-ascii
Content-Description: The mail
Content-Disposition: inline
Salut,
the appended script  can be used for almost  everything. It might even
be a  first step to the solution  of the problem mentioned  a few days
ago...
I'm working on it. However, this is a template script for everyone.
			Thunder
--XRI2XbIfl/05pQwm
Content-Type: application/x-perl
Content-Description: The universal include stepping script
Content-Disposition: attachment; filename="scaninclude.pl"
Content-Transfer-Encoding: quoted-printable
#!/usr/bin/perl -w=0A#=0A# Analyze whether a symbol is defined  in the incl=
ude tree of a source=0A# file.=0A#=0A# This script is only supposed to  wor=
k in the Linux kernel! If you're=0A# lucky, you might find it to work somew=
here else.=0A#=0A# (c) 2003, Thunder Anklin <thunder@keepsake.ch>=0A#=0A=0A=
my @includefiles =3D ();=0Amy @parsedfiles =3D ();=0Amy @file_lifo =3D ();=
=0Amy @includepath =3D ();=0Amy $arg;=0Amy $gcc_searchpath;=0Amy $debug =3D=
 0;=0A=0Asub for_each_include {=0A	# Please  enter code  here which  shall =
be  executed  for each=0A	# includefile.=0A	#=0A	# $_[0] is the filename.=
=0A}=0A=0Asub for_each_processed {=0A	# Please enter code here which  shall=
 be executed after a file=0A	# was processed.=0A	#=0A	# $_[0] is the filena=
me.=0A}=0A=0Asub printd {=0A	if ($debug) {=0A		printf @_;=0A	}=0A}=0A=0Asub=
 gcc_get_searchpath {=0A	local ($fd, $buf, $retval);=0A=0A	$retval =3D "";=
=0A	open($fd, "gcc -print-search-dirs |") or goto out;=0A=0A	while (defined=
($buf =3D <$fd>)) {=0A		if ($buf =3D~ /^install:\s+(.*)\r?\n/) {=0A			if (-=
e $1 . "/include") {=0A				$retval =3D $1 . "/include";=0A			}=0A		}=0A	}=
=0A=0A	close($fd);=0A=0A      out:=0A	return $retval;=0A}=0A=0Asub includep=
ath_add {=0A	local ($dirname) =3D @_;=0A=0A	if ($dirname eq ".") {=0A		$dir=
name =3D $ENV{"PWD"};=0A	}=0A=0A	if (!($dirname =3D~ /^\//)) {=0A		$dirname=
 =3D $ENV{"PWD"} . "/" . $dirname;=0A	}=0A	push(@includepath, $dirname) unl=
ess (! -d $dirname);=0A=0A	return;=0A}=0A=0Asub elem_in_stack {=0A	local ($=
elem, @stack) =3D @_;=0A	local ($i) =3D (0);=0A=0A	for ($i =3D 0; $i < scal=
ar(@stack); $i++) {=0A		if ($stack[$i] eq $elem) {=0A			return 1;=0A		}=0A	=
}=0A=0A	return 0;=0A}=0A=0Asub process_file {=0A	local ($filename) =3D @_;=
=0A	local ($buf, $i) =3D ("", 0);=0A	local ($fd);=0A=0A	printd("Hit " . $fi=
lename . "\n");=0A	push(@parsedfiles, $filename);=0A=0A	for ($i =3D 0; $i <=
 scalar(@includepath); $i++) {=0A		if (-e $includepath[$i] . "/" . $filenam=
e) {=0A			if (open($fd, "<" . $includepath[$i] . "/" .=0A				 $filename)) {=
=0A				goto found_file;=0A			}=0A			printd("Whoops: %s: %s\n", $includepath=
[$i] . "/" .=0A			       $filename, $!);=0A		}=0A	}=0A=0A	if ($! =3D=3D 2) =
{=0A		printd("WARNING: %s: no file found!\n", $filename);=0A		return 0;=0A	=
}=0A	return $!;=0A=0A      found_file:=0A	while (defined($buf =3D <$fd>)) {=
=0A		if ($buf =3D~ /^\s*\#\s*include\s*\<([^\>]+)\>/) {=0A			local ($includ=
efile) =3D ($1);=0A=0A			if (!elem_in_stack($includefile, @includefiles)) {=
=0A				for_each_include($includefile);=0A=0A				push(@includefiles, $includ=
efile);=0A				push(@file_lifo, $includefile);=0A			}=0A		}=0A	}=0A=0A	close=
($fd) or return($!);=0A=0A	for_each_processed($filename);=0A=0A	return 0;=
=0A}=0A=0Aif (!scalar(@ARGV)) {=0A	print(STDERR "Usage:\n" .=0A	      __FIL=
E__ . " [ -Iincludepath ... ] file [ file ... ]\n");=0A	exit(1);=0A}=0A=0Ai=
ncludepath_add(".");=0Aincludepath_add("include");=0A=0A$gcc_searchpath =3D=
 gcc_get_searchpath();=0A=0Aif (length($gcc_searchpath) && -e $gcc_searchpa=
th) {=0A	includepath_add($gcc_searchpath);=0A}=0A=0Awhile (($ARGV[0] . "\n"=
) =3D~ /^-I(.*)$/) {=0A	includepath_add($1);=0A	shift();=0A}=0A=0Aprintd("I=
nclude path:");=0Aforeach $arg (@includepath) {=0A	print(" " . $arg);=0A}=
=0Aprint("\n");=0A=0Aif (!scalar(@ARGV)) {=0A	print(STDERR "Usage:\n" .=0A	=
      __FILE__ . " [ -Iincludepath ... ] file [ file ... ]\n");=0A	exit(1);=
=0A}=0A=0Aforeach $arg (@ARGV) {=0A	local ($retval) =3D (0);=0A=0A	@include=
files =3D (); @parsedfiles =3D (); @file_lifo =3D ($arg);=0A=0A	while (scal=
ar(@file_lifo)) {=0A		$retval =3D process_file(shift(@file_lifo));=0A=0A		i=
f ($retval) {=0A			printf("%s: Error: %i\n", $parsedfiles[-1],=0A			       =
$retval);=0A		}=0A	}=0A=0A	printd("%s: Processed %i includefiles.\n", $arg,=
=0A	       scalar(@parsedfiles));=0A}=0A=0Aexit(0);=0A=0A# Local variables:=
=0A#  perl-indent-level: 8=0A# End:=0A
--XRI2XbIfl/05pQwm--
--=_courier-20874-1051768338-0001-2
Content-Type: application/pgp-signature
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.1 (FreeBSD)
iD8DBQE+sDPgLN5xWeBwwewRAus3AKDQ2gyE3JQY0IKkVUO1fnmS7TJkNACfXjxo
bOHAW1KdXLNznTXtyexbsFQ=
=dcoE
-----END PGP SIGNATURE-----
--=_courier-20874-1051768338-0001-2--