mkioctls revision 126244
140455Sbdeset -e
240455Sbde
351960Sn_hibma# $FreeBSD: head/usr.bin/kdump/mkioctls 126244 2004-02-25 21:45:41Z des $
451960Sn_hibma
554081Smarcelif [ "x$1" = "x-s" ]; then
654081Smarcel	use_switch=1
754081Smarcel	shift
854081Smarcelelse
954081Smarcel	use_switch=0
1054081Smarcelfi
1154081Smarcel
1254081Smarcelif [ -z "$1" ]; then
1354081Smarcel	echo "usage: sh $0 [-s] include-dir"
1454081Smarcel	exit 1
1554081Smarcelfi
1654081Smarcel
1775261SruLC_ALL=C; export LC_ALL
1875261Sru
1940455Sbde# Build a list of headers that have ioctls in them.
2016631Sbde# XXX should we use an ANSI cpp?
2140455Sbdeioctl_includes=`
2254081Smarcel	cd $1
23126244Sdes	find -H -s * -name '*.h' |
2440455Sbde		xargs egrep -l \
2564099Sru'^#[ 	]*define[ 	]+[A-Za-z_][A-Za-z0-9_]*[ 	]+_IO[^a-z0-9_]' |
2685796Sobrien		awk '{printf("#include <%s>\\\\n", $1)}'
2740455Sbde`
2840455Sbde
2985796Sobrienawk -v x="$ioctl_includes" 'BEGIN {print x}' |
3054081Smarcel	gcc -E -I$1 -dM - |
3185796Sobrien	awk -v ioctl_includes="$ioctl_includes" -v use_switch="$use_switch" '
321590SrgrimesBEGIN {
3340455Sbde	print "/* XXX obnoxious prerequisites. */"
3440455Sbde	print "#define COMPAT_43"
351590Srgrimes	print "#include <sys/param.h>"
3640455Sbde	print "#include <sys/devicestat.h>"
3740455Sbde	print "#include <sys/disklabel.h>"
381590Srgrimes	print "#include <sys/socket.h>"
3920287Swollman	print "#include <sys/time.h>"
4040455Sbde	print "#include <sys/tty.h>"
4164121Sru	print "#include <net/ethernet.h>"
4240455Sbde	print "#include <net/if.h>"
4340455Sbde	print "#include <net/if_var.h>"
441590Srgrimes	print "#include <net/route.h>"
4540455Sbde	print "#include <netatm/atm.h>"
4640455Sbde	print "#include <netatm/atm_if.h>"
4740455Sbde	print "#include <netatm/atm_sap.h>"
4840455Sbde	print "#include <netatm/atm_sys.h>"
4916631Sbde	print "#include <netinet/in.h>"
5052130Speter	print "#include <netinet/ip_mroute.h>"
5162585Sitojun	print "#include <netinet6/in6_var.h>"
5262585Sitojun	print "#include <netinet6/nd6.h>"
5362585Sitojun	print "#include <netinet6/ip6_mroute.h>"
5474840Sken	print "#include <stdio.h>"
5540455Sbde	print "#include <cam/cam.h>"
561590Srgrimes	print ""
5798767Smarkm	print "const char *ioctlname(u_long val);"
5893522Sdwmalone	print ""
5940455Sbde	print ioctl_includes
6040455Sbde	print ""
6193522Sdwmalone	print "const char *"
6298767Smarkm	print "ioctlname(u_long val)"
631590Srgrimes	print "{"
641590Srgrimes	print ""
6554081Smarcel	if (use_switch)
6640455Sbde		print "\tswitch(val) {"
671590Srgrimes}
681590Srgrimes
6940455Sbde/^#[ 	]*define[ 	]+[A-Za-z_][A-Za-z0-9_]*[ 	]+_IO/ {
701590Srgrimes	
711590Srgrimes	# find where the name starts
721590Srgrimes	for (i = 1; i <= NF; i++)
731590Srgrimes		if ($i ~ /define/)
741590Srgrimes			break;
751590Srgrimes	++i;
761590Srgrimes	# 
7754081Smarcel	if (use_switch)
7840455Sbde		printf("\tcase %s:\n\t\treturn(\"%s\");\n", $i, $i);
7940455Sbde	else
8098767Smarkm		printf("\tif (val ==  %s)\n\t\treturn(\"%s\");\n", $i, $i);
811590Srgrimes
821590Srgrimes}
831590SrgrimesEND {
8454081Smarcel	if (use_switch)
8540455Sbde		print "\t}"
861590Srgrimes	print "\n\treturn(NULL);"
871590Srgrimes	print "}"
881590Srgrimes}
8916631Sbde'
90