mkioctls revision 74840
11590Srgrimesset -e
21590Srgrimes
31590Srgrimes# $FreeBSD: head/usr.bin/kdump/mkioctls 74840 2001-03-27 05:45:52Z ken $
41590Srgrimes
51590Srgrimesif [ "x$1" = "x-s" ]; then
61590Srgrimes	use_switch=1
71590Srgrimes	shift
81590Srgrimeselse
91590Srgrimes	use_switch=0
101590Srgrimesfi
111590Srgrimes
121590Srgrimesif [ -z "$1" ]; then
131590Srgrimes	echo "usage: sh $0 [-s] include-dir"
141590Srgrimes	exit 1
151590Srgrimesfi
161590Srgrimes
171590Srgrimes# Build a list of headers that have ioctls in them.
181590Srgrimes# XXX should we use an ANSI cpp?
191590Srgrimes# XXX netipx conflicts with netns (leave out netns).
201590Srgrimesioctl_includes=`
211590Srgrimes	cd $1
221590Srgrimes	find * -name '*.h' -follow |
231590Srgrimes		egrep -v '^(netns)/' |
241590Srgrimes		xargs egrep -l \
251590Srgrimes'^#[ 	]*define[ 	]+[A-Za-z_][A-Za-z0-9_]*[ 	]+_IO[^a-z0-9_]' |
261590Srgrimes		sed -e 's/^/#include </' -e s'/$/>/'
271590Srgrimes`
281590Srgrimes
291590Srgrimesecho "$ioctl_includes" |
301590Srgrimes	gcc -E -I$1 -dM - |
311590Srgrimes	awk -v ioctl_includes="$ioctl_includes" -v use_switch="$use_switch" '
321590SrgrimesBEGIN {
331590Srgrimes	print "/* XXX obnoxious prerequisites. */"
341590Srgrimes	print "#define COMPAT_43"
3541568Sarchie	print "#include <sys/param.h>"
361590Srgrimes	print "#include <sys/devicestat.h>"
371590Srgrimes	print "#include <sys/disklabel.h>"
3887244Smarkm	print "#include <sys/socket.h>"
391590Srgrimes	print "#include <sys/time.h>"
4087628Sdwmalone	print "#include <sys/tty.h>"
411590Srgrimes	print "#include <net/ethernet.h>"
4287628Sdwmalone	print "#include <net/if.h>"
4387244Smarkm	print "#include <net/if_var.h>"
4487628Sdwmalone	print "#include <net/route.h>"
451590Srgrimes	print "#include <netatm/atm.h>"
4687628Sdwmalone	print "#include <netatm/atm_if.h>"
4787628Sdwmalone	print "#include <netatm/atm_sap.h>"
4887628Sdwmalone	print "#include <netatm/atm_sys.h>"
491590Srgrimes	print "#include <netinet/in.h>"
5026960Scharnier	print "#include <netinet/ip_compat.h>"
511590Srgrimes	print "#include <netinet/ip_fil.h>"
5287244Smarkm	print "#include <netinet/ip_auth.h>"
531590Srgrimes	print "#include <netinet/ip_nat.h>"
541590Srgrimes	print "#include <netinet/ip_frag.h>"
551590Srgrimes	print "#include <netinet/ip_state.h>"
5623690Speter	print "#include <netinet/ip_mroute.h>"
571590Srgrimes	print "#include <netinet6/in6_var.h>"
581590Srgrimes	print "#include <netinet6/nd6.h>"
591590Srgrimes	print "#include <netinet6/ip6_mroute.h>"
601590Srgrimes	print "#include <stdio.h>"
6126960Scharnier	print "#include <cam/cam.h>"
621590Srgrimes	print ""
631590Srgrimes	print ioctl_includes
641590Srgrimes	print ""
651590Srgrimes	print "char *"
661590Srgrimes	print "ioctlname(register_t val)"
671590Srgrimes	print "{"
6887244Smarkm	print ""
6987244Smarkm	if (use_switch)
701590Srgrimes		print "\tswitch(val) {"
711590Srgrimes}
7224360Simp
731590Srgrimes/^#[ 	]*define[ 	]+[A-Za-z_][A-Za-z0-9_]*[ 	]+_IO/ {
741590Srgrimes	
751590Srgrimes	# find where the name starts
761590Srgrimes	for (i = 1; i <= NF; i++)
771590Srgrimes		if ($i ~ /define/)
781590Srgrimes			break;
791590Srgrimes	++i;
801590Srgrimes	# 
811590Srgrimes	if (use_switch)
821590Srgrimes		printf("\tcase %s:\n\t\treturn(\"%s\");\n", $i, $i);
831590Srgrimes	else
841590Srgrimes		printf("\tif (val ==  %s)\n\t\treturn(\"%s\");\n", $i, $i);
851590Srgrimes
8626960Scharnier}
871590SrgrimesEND {
881590Srgrimes	if (use_switch)
891590Srgrimes		print "\t}"
901590Srgrimes	print "\n\treturn(NULL);"
9126960Scharnier	print "}"
921590Srgrimes}
931590Srgrimes'
941590Srgrimes