mkioctls revision 195751
113546Sjulian#!/bin/sh 213546Sjulian# 313546Sjulian# $FreeBSD: head/usr.bin/kdump/mkioctls 195751 2009-07-18 10:36:18Z bz $ 413546Sjulian 513546Sjulianset -e 613546Sjulian 713546Sjulianif [ "x$1" = "x-s" ]; then 813546Sjulian use_switch=1 913546Sjulian shift 1013546Sjulianelse 1113546Sjulian use_switch=0 1213546Sjulianfi 13165967Simp 1413546Sjulianif [ -z "$1" ]; then 1513546Sjulian echo "usage: sh $0 [-s] include-dir" 1613546Sjulian exit 1 1713546Sjulianfi 1813546Sjulian 1913546SjulianLC_ALL=C; export LC_ALL 2044963Sjb 2113546Sjulian# Build a list of headers that have ioctls in them. 2213546Sjulian# XXX should we use an ANSI cpp? 2313546Sjulianioctl_includes=` 2413546Sjulian cd $1 2513546Sjulian find -H -s * -name '*.h' | 2613546Sjulian xargs egrep -l \ 2713546Sjulian'^#[ ]*define[ ]+[A-Za-z_][A-Za-z0-9_]*[ ]+_IO[^a-z0-9_]' | 2813546Sjulian awk '{printf("#include <%s>\\\\n", $1)}' 2950476Speter` 3013546Sjulian 31174112Sdeischenawk -v x="$ioctl_includes" 'BEGIN {print x}' | 32174112Sdeischen gcc -E -I$1 -dM -DCOMPAT_43TTY - | 3313546Sjulian awk -v ioctl_includes="$ioctl_includes" -v use_switch="$use_switch" ' 3413546SjulianBEGIN { 3536830Sjb print "/* XXX obnoxious prerequisites. */" 3613546Sjulian print "#define COMPAT_43" 37174112Sdeischen print "#define COMPAT_43TTY" 38103388Smini print "#include <sys/param.h>" 3913546Sjulian print "#include <sys/devicestat.h>" 40113658Sdeischen print "#include <sys/disklabel.h>" 41113658Sdeischen print "#include <sys/socket.h>" 42113658Sdeischen print "#include <sys/time.h>" 43113658Sdeischen print "#include <sys/tty.h>" 4444963Sjb print "#include <bsm/audit.h>" 4544963Sjb print "#include <net/ethernet.h>" 4644963Sjb print "#include <net/if.h>" 47113658Sdeischen print "#include <net/if_var.h>" 48113658Sdeischen print "#include <net/pfvar.h>" 49113658Sdeischen print "#include <net/route.h>" 50139023Sdeischen print "#include <netinet/in.h>" 51139023Sdeischen print "#include <netinet/ip_mroute.h>" 52139023Sdeischen print "#include <netinet6/in6_var.h>" 5344963Sjb print "#include <netinet6/nd6.h>" 54174112Sdeischen print "#include <netinet6/ip6_mroute.h>" 55174112Sdeischen print "#include <stdio.h>" 56174112Sdeischen print "#include <cam/cam.h>" 57174112Sdeischen print "" 58115173Sdeischen print "const char *ioctlname(u_long val);" 59115173Sdeischen print "" 60115173Sdeischen print ioctl_includes 61115173Sdeischen print "" 62115173Sdeischen print "const char *" 63115173Sdeischen print "ioctlname(u_long val)" 64115173Sdeischen print "{" 65115173Sdeischen print "" 6675369Sdeischen if (use_switch) 6775369Sdeischen print "\tswitch(val) {" 6875369Sdeischen} 6975369Sdeischen 7071581Sdeischen/^#[ ]*define[ ]+[A-Za-z_][A-Za-z0-9_]*[ ]+_IO/ { 7171581Sdeischen 7248046Sjb # find where the name starts 7371581Sdeischen for (i = 1; i <= NF; i++) 7413546Sjulian if ($i ~ /define/) 7513546Sjulian break; 7617706Sjulian ++i; 77113658Sdeischen # 7813546Sjulian if (use_switch) 7913546Sjulian printf("\tcase %s:\n\t\treturn(\"%s\");\n", $i, $i); 8035509Sjb else 8131402Salex printf("\tif (val == %s)\n\t\treturn(\"%s\");\n", $i, $i); 8235509Sjb 8317706Sjulian} 8424827SjbEND { 8524827Sjb if (use_switch) 8617706Sjulian print "\t}" 8717706Sjulian print "\n\treturn(NULL);" 8817706Sjulian print "}" 8917706Sjulian} 90113658Sdeischen' 9117706Sjulian