1265e5898SJohn Baldwin#!/bin/sh 2265e5898SJohn Baldwin# 3265e5898SJohn Baldwin 4265e5898SJohn Baldwinset -e 5265e5898SJohn Baldwin 6265e5898SJohn Baldwinif [ $# -ne 1 ]; then 7265e5898SJohn Baldwin echo "usage: sh $0 include-dir" 8265e5898SJohn Baldwin exit 1 9265e5898SJohn Baldwinfi 10265e5898SJohn Baldwin 11265e5898SJohn Baldwinincludedir="$1" 12265e5898SJohn Baldwin 13265e5898SJohn BaldwinLC_ALL=C; export LC_ALL 14265e5898SJohn Baldwin 15265e5898SJohn Baldwin# Build a list of headers that have ioctls in them. 16265e5898SJohn Baldwin# XXX should we use an ANSI cpp? 17265e5898SJohn Baldwinioctl_includes=$( 18265e5898SJohn Baldwin cd $includedir 19ec45ce62SAlex Richardson set -e 20ec45ce62SAlex Richardson # if /bin/sh is bash this will avoid further errors due to missing commands 21ec45ce62SAlex Richardson if set -o | grep -q pipefail; then 22ec45ce62SAlex Richardson set -o pipefail 23a342f435SKristof Provost fi 24a342f435SKristof Provost 25ec45ce62SAlex Richardson filter='tee' 26ec45ce62SAlex Richardson if [ "${MK_PF}" = "no" ]; then 27ec45ce62SAlex Richardson filter='egrep -v (net/pfvar|net/if_pfsync)\.h' 28ec45ce62SAlex Richardson fi 29ec45ce62SAlex Richardson # find -s would avoid the need to invoke sort but it is non-portable 30ec45ce62SAlex Richardson find -L ./* -type f -name '*.h' | \ 31ec45ce62SAlex Richardson LC_ALL=C sort | \ 32a342f435SKristof Provost $filter | \ 33265e5898SJohn Baldwin xargs egrep -l \ 34265e5898SJohn Baldwin'^#[ ]*define[ ]+[A-Za-z_][A-Za-z0-9_]*[ ]+_IO[^a-z0-9_]' | 35265e5898SJohn Baldwin awk '{printf("#include <%s>\\n", $1)}' 36265e5898SJohn Baldwin) 37265e5898SJohn Baldwin 38ec45ce62SAlex Richardsonif [ -z "$ioctl_includes" ]; then 39ec45ce62SAlex Richardson echo "Failed to build list of ioctl headers" 40ec45ce62SAlex Richardson exit 1 41ec45ce62SAlex Richardsonfi 42ec45ce62SAlex Richardson 43265e5898SJohn Baldwinawk -v x="$ioctl_includes" 'BEGIN {print x}' | 44265e5898SJohn Baldwin $CPP -nostdinc -I$includedir -dM -DCOMPAT_43TTY - | 45265e5898SJohn Baldwin awk -v ioctl_includes="$ioctl_includes" ' 46265e5898SJohn BaldwinBEGIN { 47265e5898SJohn Baldwin print "/* XXX obnoxious prerequisites. */" 48265e5898SJohn Baldwin print "#define COMPAT_43" 49265e5898SJohn Baldwin print "#define COMPAT_43TTY" 50265e5898SJohn Baldwin print "#include <sys/param.h>" 51265e5898SJohn Baldwin print "#include <sys/devicestat.h>" 52265e5898SJohn Baldwin print "#include <sys/disklabel.h>" 531352798dSKonstantin Belousov print "#include <sys/mman.h>" 54265e5898SJohn Baldwin print "#include <sys/socket.h>" 55265e5898SJohn Baldwin print "#include <sys/time.h>" 56265e5898SJohn Baldwin print "#include <sys/tty.h>" 57265e5898SJohn Baldwin print "#include <bsm/audit.h>" 58265e5898SJohn Baldwin print "#include <net/ethernet.h>" 59265e5898SJohn Baldwin print "#include <net/if.h>" 60265e5898SJohn Baldwin print "#ifdef PF" 61265e5898SJohn Baldwin print "#include <net/pfvar.h>" 62265e5898SJohn Baldwin print "#include <net/if_pfsync.h>" 63265e5898SJohn Baldwin print "#endif" 64265e5898SJohn Baldwin print "#include <net/route.h>" 65265e5898SJohn Baldwin print "#include <netinet/in.h>" 66265e5898SJohn Baldwin print "#include <netinet/ip_mroute.h>" 67265e5898SJohn Baldwin print "#include <netinet6/in6_var.h>" 68265e5898SJohn Baldwin print "#include <netinet6/nd6.h>" 69265e5898SJohn Baldwin print "#include <netinet6/ip6_mroute.h>" 70265e5898SJohn Baldwin print "#include <stdio.h>" 71265e5898SJohn Baldwin print "#include <cam/cam.h>" 72*ec014502SMark Johnston print "#include <cam/scsi/scsi_pass.h>" 739289f547SJohn Baldwin print "#include <stdbool.h>" 74265e5898SJohn Baldwin print "#include <stddef.h>" 75265e5898SJohn Baldwin print "#include <stdint.h>" 76265e5898SJohn Baldwin print "#include <sysdecode.h>" 77265e5898SJohn Baldwin print "" 78265e5898SJohn Baldwin print ioctl_includes 79265e5898SJohn Baldwin print "" 80265e5898SJohn Baldwin print "const char *" 81265e5898SJohn Baldwin print "sysdecode_ioctlname(unsigned long val)" 82265e5898SJohn Baldwin print "{" 83265e5898SJohn Baldwin print "\tconst char *str = NULL;" 84265e5898SJohn Baldwin print "" 85265e5898SJohn Baldwin} 86265e5898SJohn Baldwin 87265e5898SJohn Baldwin/^#[ ]*define[ ]+[A-Za-z_][A-Za-z0-9_]*[ ]+_IO/ { 88265e5898SJohn Baldwin 89265e5898SJohn Baldwin # find where the name starts 90265e5898SJohn Baldwin for (i = 1; i <= NF; i++) 91265e5898SJohn Baldwin if ($i ~ /define/) 92265e5898SJohn Baldwin break; 93265e5898SJohn Baldwin ++i; 94265e5898SJohn Baldwin # 95265e5898SJohn Baldwin printf("\t"); 96265e5898SJohn Baldwin if (n++ > 0) 97265e5898SJohn Baldwin printf("else "); 98265e5898SJohn Baldwin printf("if (val == %s)\n", $i); 99265e5898SJohn Baldwin printf("\t\tstr = \"%s\";\n", $i); 100265e5898SJohn Baldwin} 101265e5898SJohn BaldwinEND { 102265e5898SJohn Baldwin print "" 103265e5898SJohn Baldwin print "\treturn (str);" 104265e5898SJohn Baldwin print "}" 105265e5898SJohn Baldwin} 106265e5898SJohn Baldwin' 107