mkioctls revision 192901
1175936Sdes#!/bin/sh
2175936Sdes#
3175936Sdes# $FreeBSD: head/usr.bin/kdump/mkioctls 192901 2009-05-27 16:16:56Z thompsa $
4175936Sdes
540455Sbdeset -e
640455Sbde
754081Smarcelif [ "x$1" = "x-s" ]; then
854081Smarcel	use_switch=1
954081Smarcel	shift
1054081Smarcelelse
1154081Smarcel	use_switch=0
1254081Smarcelfi
1354081Smarcel
1454081Smarcelif [ -z "$1" ]; then
1554081Smarcel	echo "usage: sh $0 [-s] include-dir"
1654081Smarcel	exit 1
1754081Smarcelfi
1854081Smarcel
1975261SruLC_ALL=C; export LC_ALL
2075261Sru
2140455Sbde# Build a list of headers that have ioctls in them.
2216631Sbde# XXX should we use an ANSI cpp?
2340455Sbdeioctl_includes=`
2454081Smarcel	cd $1
25192901Sthompsa	find -H -s * -name '*.h' |
2640455Sbde		xargs egrep -l \
2764099Sru'^#[ 	]*define[ 	]+[A-Za-z_][A-Za-z0-9_]*[ 	]+_IO[^a-z0-9_]' |
2885796Sobrien		awk '{printf("#include <%s>\\\\n", $1)}'
2940455Sbde`
3040455Sbde
3185796Sobrienawk -v x="$ioctl_includes" 'BEGIN {print x}' |
32192768Sed	gcc -E -I$1 -dM -DCOMPAT_43TTY - |
3385796Sobrien	awk -v ioctl_includes="$ioctl_includes" -v use_switch="$use_switch" '
341590SrgrimesBEGIN {
3540455Sbde	print "/* XXX obnoxious prerequisites. */"
3640455Sbde	print "#define COMPAT_43"
37191936Sed	print "#define COMPAT_43TTY"
381590Srgrimes	print "#include <sys/param.h>"
3940455Sbde	print "#include <sys/devicestat.h>"
4040455Sbde	print "#include <sys/disklabel.h>"
411590Srgrimes	print "#include <sys/socket.h>"
4220287Swollman	print "#include <sys/time.h>"
4340455Sbde	print "#include <sys/tty.h>"
44159247Srwatson	print "#include <bsm/audit.h>"
4564121Sru	print "#include <net/ethernet.h>"
4640455Sbde	print "#include <net/if.h>"
4740455Sbde	print "#include <net/if_var.h>"
48130617Smlaier	print "#include <net/pfvar.h>"
491590Srgrimes	print "#include <net/route.h>"
5016631Sbde	print "#include <netinet/in.h>"
5152130Speter	print "#include <netinet/ip_mroute.h>"
5262585Sitojun	print "#include <netinet6/in6_var.h>"
5362585Sitojun	print "#include <netinet6/nd6.h>"
5462585Sitojun	print "#include <netinet6/ip6_mroute.h>"
5574840Sken	print "#include <stdio.h>"
5640455Sbde	print "#include <cam/cam.h>"
571590Srgrimes	print ""
5898767Smarkm	print "const char *ioctlname(u_long val);"
5993522Sdwmalone	print ""
6040455Sbde	print ioctl_includes
6140455Sbde	print ""
6293522Sdwmalone	print "const char *"
6398767Smarkm	print "ioctlname(u_long val)"
641590Srgrimes	print "{"
651590Srgrimes	print ""
6654081Smarcel	if (use_switch)
6740455Sbde		print "\tswitch(val) {"
681590Srgrimes}
691590Srgrimes
7040455Sbde/^#[ 	]*define[ 	]+[A-Za-z_][A-Za-z0-9_]*[ 	]+_IO/ {
71175936Sdes
721590Srgrimes	# find where the name starts
731590Srgrimes	for (i = 1; i <= NF; i++)
741590Srgrimes		if ($i ~ /define/)
751590Srgrimes			break;
761590Srgrimes	++i;
77175936Sdes	#
7854081Smarcel	if (use_switch)
7940455Sbde		printf("\tcase %s:\n\t\treturn(\"%s\");\n", $i, $i);
8040455Sbde	else
8198767Smarkm		printf("\tif (val ==  %s)\n\t\treturn(\"%s\");\n", $i, $i);
821590Srgrimes
831590Srgrimes}
841590SrgrimesEND {
8554081Smarcel	if (use_switch)
8640455Sbde		print "\t}"
871590Srgrimes	print "\n\treturn(NULL);"
881590Srgrimes	print "}"
891590Srgrimes}
9016631Sbde'
91