1175936Sdes#!/bin/sh
2175936Sdes#
3175936Sdes# $FreeBSD: releng/11.0/lib/libsysdecode/mkioctls 292622 2015-12-22 20:33:49Z jhb $
4175936Sdes
540455Sbdeset -e
640455Sbde
7292622Sjhbif [ $# -ne 1 ]; then
8292622Sjhb	echo "usage: sh $0 include-dir"
954081Smarcel	exit 1
1054081Smarcelfi
1154081Smarcel
12292622Sjhbincludedir="$1"
13226608Sdes
1475261SruLC_ALL=C; export LC_ALL
1575261Sru
1640455Sbde# Build a list of headers that have ioctls in them.
1716631Sbde# XXX should we use an ANSI cpp?
18226344Sdesioctl_includes=$(
19226608Sdes	cd $includedir
20261797Sglebius	find -H -s * -name '*.h' | \
21261797Sglebius	egrep -v '(.*disk.*|net/pfvar|net/if_pfsync)\.h' | \
2240455Sbde		xargs egrep -l \
2364099Sru'^#[ 	]*define[ 	]+[A-Za-z_][A-Za-z0-9_]*[ 	]+_IO[^a-z0-9_]' |
24226344Sdes		awk '{printf("#include <%s>\\n", $1)}'
25226344Sdes)
2640455Sbde
27226344Sdes: ${MACHINE=$(uname -m)}
28226344Sdescase "${MACHINE}" in
29226329Sdes*pc98*)
30226329Sdes	ioctl_includes="$ioctl_includes#include <sys/diskpc98.h>\\n"
31226329Sdes	;;
32226329Sdes*)
33226329Sdes	ioctl_includes="$ioctl_includes#include <sys/diskmbr.h>\\n"
34226329Sdes	;;
35226329Sdesesac
36226329Sdes
3785796Sobrienawk -v x="$ioctl_includes" 'BEGIN {print x}' |
38284406Srodrigc	$CPP -nostdinc -I$includedir -dM -DCOMPAT_43TTY - |
39292622Sjhb	awk -v ioctl_includes="$ioctl_includes" '
401590SrgrimesBEGIN {
4140455Sbde	print "/* XXX obnoxious prerequisites. */"
4240455Sbde	print "#define COMPAT_43"
43191936Sed	print "#define COMPAT_43TTY"
441590Srgrimes	print "#include <sys/param.h>"
4540455Sbde	print "#include <sys/devicestat.h>"
4640455Sbde	print "#include <sys/disklabel.h>"
471590Srgrimes	print "#include <sys/socket.h>"
4820287Swollman	print "#include <sys/time.h>"
4940455Sbde	print "#include <sys/tty.h>"
50159247Srwatson	print "#include <bsm/audit.h>"
5164121Sru	print "#include <net/ethernet.h>"
5240455Sbde	print "#include <net/if.h>"
53261797Sglebius	print "#ifdef PF"
54130617Smlaier	print "#include <net/pfvar.h>"
55261797Sglebius	print "#include <net/if_pfsync.h>"
56261797Sglebius	print "#endif"
571590Srgrimes	print "#include <net/route.h>"
5816631Sbde	print "#include <netinet/in.h>"
5952130Speter	print "#include <netinet/ip_mroute.h>"
6062585Sitojun	print "#include <netinet6/in6_var.h>"
6162585Sitojun	print "#include <netinet6/nd6.h>"
6262585Sitojun	print "#include <netinet6/ip6_mroute.h>"
6374840Sken	print "#include <stdio.h>"
6440455Sbde	print "#include <cam/cam.h>"
65235911Smav	print "#include <stddef.h>"
66235911Smav	print "#include <stdint.h>"
67292622Sjhb	print "#include <sysdecode.h>"
681590Srgrimes	print ""
6940455Sbde	print ioctl_includes
7040455Sbde	print ""
71292622Sjhb	print "const char *"
72292622Sjhb	print "sysdecode_ioctlname(unsigned long val)"
731590Srgrimes	print "{"
74226157Sdes	print "\tconst char *str = NULL;"
751590Srgrimes	print ""
761590Srgrimes}
771590Srgrimes
7840455Sbde/^#[ 	]*define[ 	]+[A-Za-z_][A-Za-z0-9_]*[ 	]+_IO/ {
79175936Sdes
801590Srgrimes	# find where the name starts
811590Srgrimes	for (i = 1; i <= NF; i++)
821590Srgrimes		if ($i ~ /define/)
831590Srgrimes			break;
841590Srgrimes	++i;
85175936Sdes	#
86226608Sdes	printf("\t");
87226157Sdes	if (n++ > 0)
88226608Sdes		printf("else ");
89226157Sdes	printf("if (val == %s)\n", $i);
90226157Sdes	printf("\t\tstr = \"%s\";\n", $i);
911590Srgrimes}
921590SrgrimesEND {
93226608Sdes	print ""
94292622Sjhb	print "\treturn (str);"
951590Srgrimes	print "}"
961590Srgrimes}
9716631Sbde'
98