mkioctls revision 284406
1175936Sdes#!/bin/sh
2175936Sdes#
3175936Sdes# $FreeBSD: head/usr.bin/kdump/mkioctls 284406 2015-06-15 06:44:22Z rodrigc $
4226608Sdes#
5226608Sdes# When editing this script, keep in mind that truss also uses it.
6226608Sdes#
7175936Sdes
840455Sbdeset -e
940455Sbde
10226608Sdesif [ $# -ne 2 -o \( $1 != "print" -a $1 != "return" \) ]; then
11226608Sdes	echo "usage: sh $0 print|return include-dir"
1254081Smarcel	exit 1
1354081Smarcelfi
1454081Smarcel
15226608Sdesstyle="$1"
16226608Sdesincludedir="$2"
17226608Sdes
1875261SruLC_ALL=C; export LC_ALL
1975261Sru
2040455Sbde# Build a list of headers that have ioctls in them.
2116631Sbde# XXX should we use an ANSI cpp?
22226344Sdesioctl_includes=$(
23226608Sdes	cd $includedir
24261797Sglebius	find -H -s * -name '*.h' | \
25261797Sglebius	egrep -v '(.*disk.*|net/pfvar|net/if_pfsync)\.h' | \
2640455Sbde		xargs egrep -l \
2764099Sru'^#[ 	]*define[ 	]+[A-Za-z_][A-Za-z0-9_]*[ 	]+_IO[^a-z0-9_]' |
28226344Sdes		awk '{printf("#include <%s>\\n", $1)}'
29226344Sdes)
3040455Sbde
31226344Sdes: ${MACHINE=$(uname -m)}
32226344Sdescase "${MACHINE}" in
33226329Sdes*pc98*)
34226329Sdes	ioctl_includes="$ioctl_includes#include <sys/diskpc98.h>\\n"
35226329Sdes	;;
36226329Sdes*)
37226329Sdes	ioctl_includes="$ioctl_includes#include <sys/diskmbr.h>\\n"
38226329Sdes	;;
39226329Sdesesac
40226329Sdes
4185796Sobrienawk -v x="$ioctl_includes" 'BEGIN {print x}' |
42284406Srodrigc	$CPP -nostdinc -I$includedir -dM -DCOMPAT_43TTY - |
43226608Sdes	awk -v ioctl_includes="$ioctl_includes" -v style="$style" '
441590SrgrimesBEGIN {
4540455Sbde	print "/* XXX obnoxious prerequisites. */"
4640455Sbde	print "#define COMPAT_43"
47191936Sed	print "#define COMPAT_43TTY"
481590Srgrimes	print "#include <sys/param.h>"
4940455Sbde	print "#include <sys/devicestat.h>"
5040455Sbde	print "#include <sys/disklabel.h>"
511590Srgrimes	print "#include <sys/socket.h>"
5220287Swollman	print "#include <sys/time.h>"
5340455Sbde	print "#include <sys/tty.h>"
54159247Srwatson	print "#include <bsm/audit.h>"
5564121Sru	print "#include <net/ethernet.h>"
5640455Sbde	print "#include <net/if.h>"
57261797Sglebius	print "#ifdef PF"
58130617Smlaier	print "#include <net/pfvar.h>"
59261797Sglebius	print "#include <net/if_pfsync.h>"
60261797Sglebius	print "#endif"
611590Srgrimes	print "#include <net/route.h>"
6216631Sbde	print "#include <netinet/in.h>"
6352130Speter	print "#include <netinet/ip_mroute.h>"
6462585Sitojun	print "#include <netinet6/in6_var.h>"
6562585Sitojun	print "#include <netinet6/nd6.h>"
6662585Sitojun	print "#include <netinet6/ip6_mroute.h>"
6774840Sken	print "#include <stdio.h>"
6840455Sbde	print "#include <cam/cam.h>"
69235911Smav	print "#include <stddef.h>"
70235911Smav	print "#include <stdint.h>"
711590Srgrimes	print ""
7240455Sbde	print ioctl_includes
7340455Sbde	print ""
74226608Sdes	if (style == "print") {
75226608Sdes		print "void ioctlname(unsigned long val, int decimal);"
76226608Sdes		print ""
77226608Sdes		print "void"
78226608Sdes		print "ioctlname(unsigned long val, int decimal)"
79226608Sdes	} else {
80226608Sdes		print "const char *ioctlname(unsigned long val);"
81226608Sdes		print ""
82226608Sdes		print "const char *"
83226608Sdes		print "ioctlname(unsigned long val)"
84226608Sdes	}
851590Srgrimes	print "{"
86226157Sdes	print "\tconst char *str = NULL;"
871590Srgrimes	print ""
881590Srgrimes}
891590Srgrimes
9040455Sbde/^#[ 	]*define[ 	]+[A-Za-z_][A-Za-z0-9_]*[ 	]+_IO/ {
91175936Sdes
921590Srgrimes	# find where the name starts
931590Srgrimes	for (i = 1; i <= NF; i++)
941590Srgrimes		if ($i ~ /define/)
951590Srgrimes			break;
961590Srgrimes	++i;
97175936Sdes	#
98226608Sdes	printf("\t");
99226157Sdes	if (n++ > 0)
100226608Sdes		printf("else ");
101226157Sdes	printf("if (val == %s)\n", $i);
102226157Sdes	printf("\t\tstr = \"%s\";\n", $i);
1031590Srgrimes}
1041590SrgrimesEND {
105226608Sdes	print ""
106226608Sdes	if (style == "print") {
107226608Sdes		print "\tif (str != NULL)"
108226608Sdes		print "\t\tprintf(\"%s\", str);"
109226608Sdes		print "\telse if (decimal)"
110226608Sdes		print "\t\tprintf(\"%lu\", val);"
111226608Sdes		print "\telse"
112226608Sdes		print "\t\tprintf(\"%#lx\", val);"
113226608Sdes	} else {
114226608Sdes		print "\treturn (str);"
115226608Sdes	}
1161590Srgrimes	print "}"
1171590Srgrimes}
11816631Sbde'
119