mkioctls revision 226157
140455Sbde#!/bin/sh
240455Sbde#
351960Sn_hibma# $FreeBSD: head/usr.bin/kdump/mkioctls 226157 2011-10-08 12:47:00Z des $
451960Sn_hibma
554081Smarcelset -e
654081Smarcel
754081Smarcelif [ -z "$1" ]; then
854081Smarcel	echo "usage: sh $0 include-dir"
954081Smarcel	exit 1
1054081Smarcelfi
1154081Smarcel
1254081SmarcelLC_ALL=C; export LC_ALL
1354081Smarcel
1454081Smarcel# Build a list of headers that have ioctls in them.
1554081Smarcel# XXX should we use an ANSI cpp?
1654081Smarcelioctl_includes=`
1775261Sru	cd $1
1875261Sru	find -H -s * -name '*.h' |
1940455Sbde		xargs egrep -l \
2016631Sbde'^#[ 	]*define[ 	]+[A-Za-z_][A-Za-z0-9_]*[ 	]+_IO[^a-z0-9_]' |
2140455Sbde		awk '{printf("#include <%s>\\\\n", $1)}'
2254081Smarcel`
23126244Sdes
2440455Sbdeawk -v x="$ioctl_includes" 'BEGIN {print x}' |
2564099Sru	gcc -E -I$1 -dM -DCOMPAT_43TTY - |
2685796Sobrien	awk -v ioctl_includes="$ioctl_includes" '
2740455SbdeBEGIN {
2840455Sbde	print "/* XXX obnoxious prerequisites. */"
2985796Sobrien	print "#define COMPAT_43"
3054081Smarcel	print "#define COMPAT_43TTY"
3185796Sobrien	print "#include <sys/param.h>"
321590Srgrimes	print "#include <sys/devicestat.h>"
3340455Sbde	print "#include <sys/disklabel.h>"
3440455Sbde	print "#include <sys/socket.h>"
351590Srgrimes	print "#include <sys/time.h>"
3640455Sbde	print "#include <sys/tty.h>"
3740455Sbde	print "#include <bsm/audit.h>"
381590Srgrimes	print "#include <net/ethernet.h>"
3920287Swollman	print "#include <net/if.h>"
4040455Sbde	print "#include <net/if_var.h>"
4164121Sru	print "#include <net/pfvar.h>"
4240455Sbde	print "#include <net/route.h>"
4340455Sbde	print "#include <netinet/in.h>"
44130617Smlaier	print "#include <netinet/ip_mroute.h>"
451590Srgrimes	print "#include <netinet6/in6_var.h>"
4640455Sbde	print "#include <netinet6/nd6.h>"
4740455Sbde	print "#include <netinet6/ip6_mroute.h>"
4840455Sbde	print "#include <stdio.h>"
4940455Sbde	print "#include <cam/cam.h>"
5016631Sbde	print ""
5152130Speter	print "void ioctlname(unsigned long val, int decimal);"
5262585Sitojun	print ""
5362585Sitojun	print ioctl_includes
5462585Sitojun	print ""
5574840Sken	print "void"
5640455Sbde	print "ioctlname(unsigned long val, int decimal)"
571590Srgrimes	print "{"
5898767Smarkm	print "\tconst char *str = NULL;"
5993522Sdwmalone	print ""
6040455Sbde}
6140455Sbde
6293522Sdwmalone/^#[ 	]*define[ 	]+[A-Za-z_][A-Za-z0-9_]*[ 	]+_IO/ {
6398767Smarkm
641590Srgrimes	# find where the name starts
651590Srgrimes	for (i = 1; i <= NF; i++)
6654081Smarcel		if ($i ~ /define/)
6740455Sbde			break;
681590Srgrimes	++i;
691590Srgrimes	#
7040455Sbde	print("\t");
711590Srgrimes	if (n++ > 0)
721590Srgrimes		print("else ");
731590Srgrimes	printf("if (val == %s)\n", $i);
741590Srgrimes	printf("\t\tstr = \"%s\";\n", $i);
751590Srgrimes}
761590SrgrimesEND {
771590Srgrimes	print "\n"
7854081Smarcel	print "\tif (str != NULL)\n"
7940455Sbde	print "\t\tprintf(\"%s\", str);\n"
8040455Sbde	print "\telse if (decimal)\n"
8198767Smarkm	print "\t\tprintf(\"%lu\", val);\n"
821590Srgrimes	print "\telse\n"
831590Srgrimes	print "\t\tprintf(\"%#lx\", val);\n"
841590Srgrimes	print "}"
8554081Smarcel}
8640455Sbde'
871590Srgrimes