mkioctls revision 62585
140455Sbdeset -e
240455Sbde
351960Sn_hibma# $FreeBSD: head/usr.bin/kdump/mkioctls 62585 2000-07-04 16:26:47Z itojun $
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
1740455Sbde# Build a list of headers that have ioctls in them.
1816631Sbde# XXX should we use an ANSI cpp?
1940455Sbde# XXX netipx conflicts with netns (leave out netns).
2040455Sbdeioctl_includes=`
2154081Smarcel	cd $1
2240455Sbde	find * -name '*.h' -follow |
2340455Sbde		egrep -v '^(netns)/' |
2440455Sbde		xargs egrep -l \
2540455Sbde'^#[ 	]*define[ 	]+[A-Za-z_][A-Za-z0-0_]*[ 	]+_IO[^a-z0-9_]' |
2640455Sbde		sed -e 's/^/#include </' -e s'/$/>/'
2740455Sbde`
2840455Sbde
2940455Sbdeecho "$ioctl_includes" |
3054081Smarcel	gcc -E -I$1 -dM - |
3154081Smarcel	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>"
4140455Sbde	print "#include <net/if.h>"
4240455Sbde	print "#include <net/if_var.h>"
431590Srgrimes	print "#include <net/route.h>"
4440455Sbde	print "#include <netatm/atm.h>"
4540455Sbde	print "#include <netatm/atm_if.h>"
4640455Sbde	print "#include <netatm/atm_sap.h>"
4740455Sbde	print "#include <netatm/atm_sys.h>"
4816631Sbde	print "#include <netinet/in.h>"
4953669Sguido	print "#include <netinet/ip_compat.h>"
5053669Sguido	print "#include <netinet/ip_fil.h>"
5153669Sguido	print "#include <netinet/ip_auth.h>"
5253669Sguido	print "#include <netinet/ip_nat.h>"
5353669Sguido	print "#include <netinet/ip_frag.h>"
5453669Sguido	print "#include <netinet/ip_state.h>"
5552130Speter	print "#include <netinet/ip_mroute.h>"
5662585Sitojun	print "#include <netinet6/in6_var.h>"
5762585Sitojun	print "#include <netinet6/nd6.h>"
5862585Sitojun	print "#include <netinet6/ip6_mroute.h>"
5940455Sbde	print "#include <cam/cam.h>"
6040455Sbde	print "#include <stdio.h>"
611590Srgrimes	print ""
6240455Sbde	print ioctl_includes
6340455Sbde	print ""
641590Srgrimes	print "char *"
6553079Sdfr	print "ioctlname(register_t val)"
661590Srgrimes	print "{"
671590Srgrimes	print ""
6854081Smarcel	if (use_switch)
6940455Sbde		print "\tswitch(val) {"
701590Srgrimes}
711590Srgrimes
7240455Sbde/^#[ 	]*define[ 	]+[A-Za-z_][A-Za-z0-9_]*[ 	]+_IO/ {
731590Srgrimes	
741590Srgrimes	# find where the name starts
751590Srgrimes	for (i = 1; i <= NF; i++)
761590Srgrimes		if ($i ~ /define/)
771590Srgrimes			break;
781590Srgrimes	++i;
791590Srgrimes	# 
8054081Smarcel	if (use_switch)
8140455Sbde		printf("\tcase %s:\n\t\treturn(\"%s\");\n", $i, $i);
8240455Sbde	else
8340455Sbde		printf("\tif (val ==  %s)\n\t\treturn(\"%s\");\n", $i, $i);
841590Srgrimes
851590Srgrimes}
861590SrgrimesEND {
8754081Smarcel	if (use_switch)
8840455Sbde		print "\t}"
891590Srgrimes	print "\n\treturn(NULL);"
901590Srgrimes	print "}"
911590Srgrimes}
9216631Sbde'
93