f937dcf2bd
made in r263029. Merge r257186,257215,257349,259736,261797. These changesets split pfvar.h into several smaller headers and make userland utilities to include only some of them.
120 lines
2.7 KiB
Bash
120 lines
2.7 KiB
Bash
#!/bin/sh
|
|
#
|
|
# $FreeBSD$
|
|
#
|
|
# When editing this script, keep in mind that truss also uses it.
|
|
#
|
|
|
|
set -e
|
|
|
|
if [ $# -ne 2 -o \( $1 != "print" -a $1 != "return" \) ]; then
|
|
echo "usage: sh $0 print|return include-dir"
|
|
exit 1
|
|
fi
|
|
|
|
style="$1"
|
|
includedir="$2"
|
|
|
|
LC_ALL=C; export LC_ALL
|
|
|
|
# Build a list of headers that have ioctls in them.
|
|
# XXX should we use an ANSI cpp?
|
|
ioctl_includes=$(
|
|
cd $includedir
|
|
find -H -s * -name '*.h' | \
|
|
egrep -v '(.*disk.*|net/pfvar|net/if_pfsync)\.h' | \
|
|
xargs egrep -l \
|
|
'^#[ ]*define[ ]+[A-Za-z_][A-Za-z0-9_]*[ ]+_IO[^a-z0-9_]' |
|
|
awk '{printf("#include <%s>\\n", $1)}'
|
|
)
|
|
|
|
: ${MACHINE=$(uname -m)}
|
|
case "${MACHINE}" in
|
|
*pc98*)
|
|
ioctl_includes="$ioctl_includes#include <sys/diskpc98.h>\\n"
|
|
;;
|
|
*)
|
|
ioctl_includes="$ioctl_includes#include <sys/diskmbr.h>\\n"
|
|
;;
|
|
esac
|
|
|
|
awk -v x="$ioctl_includes" 'BEGIN {print x}' |
|
|
$CPP -I$1 -dM -DCOMPAT_43TTY - |
|
|
awk -v ioctl_includes="$ioctl_includes" -v style="$style" '
|
|
BEGIN {
|
|
print "/* XXX obnoxious prerequisites. */"
|
|
print "#define COMPAT_43"
|
|
print "#define COMPAT_43TTY"
|
|
print "#include <sys/param.h>"
|
|
print "#include <sys/devicestat.h>"
|
|
print "#include <sys/disklabel.h>"
|
|
print "#include <sys/socket.h>"
|
|
print "#include <sys/time.h>"
|
|
print "#include <sys/tty.h>"
|
|
print "#include <bsm/audit.h>"
|
|
print "#include <net/ethernet.h>"
|
|
print "#include <net/if.h>"
|
|
print "#include <net/if_var.h>"
|
|
print "#ifdef PF"
|
|
print "#include <net/pfvar.h>"
|
|
print "#include <net/if_pfsync.h>"
|
|
print "#endif"
|
|
print "#include <net/route.h>"
|
|
print "#include <netinet/in.h>"
|
|
print "#include <netinet/ip_mroute.h>"
|
|
print "#include <netinet6/in6_var.h>"
|
|
print "#include <netinet6/nd6.h>"
|
|
print "#include <netinet6/ip6_mroute.h>"
|
|
print "#include <stdio.h>"
|
|
print "#include <cam/cam.h>"
|
|
print "#include <stddef.h>"
|
|
print "#include <stdint.h>"
|
|
print ""
|
|
print ioctl_includes
|
|
print ""
|
|
if (style == "print") {
|
|
print "void ioctlname(unsigned long val, int decimal);"
|
|
print ""
|
|
print "void"
|
|
print "ioctlname(unsigned long val, int decimal)"
|
|
} else {
|
|
print "const char *ioctlname(unsigned long val);"
|
|
print ""
|
|
print "const char *"
|
|
print "ioctlname(unsigned long val)"
|
|
}
|
|
print "{"
|
|
print "\tconst char *str = NULL;"
|
|
print ""
|
|
}
|
|
|
|
/^#[ ]*define[ ]+[A-Za-z_][A-Za-z0-9_]*[ ]+_IO/ {
|
|
|
|
# find where the name starts
|
|
for (i = 1; i <= NF; i++)
|
|
if ($i ~ /define/)
|
|
break;
|
|
++i;
|
|
#
|
|
printf("\t");
|
|
if (n++ > 0)
|
|
printf("else ");
|
|
printf("if (val == %s)\n", $i);
|
|
printf("\t\tstr = \"%s\";\n", $i);
|
|
}
|
|
END {
|
|
print ""
|
|
if (style == "print") {
|
|
print "\tif (str != NULL)"
|
|
print "\t\tprintf(\"%s\", str);"
|
|
print "\telse if (decimal)"
|
|
print "\t\tprintf(\"%lu\", val);"
|
|
print "\telse"
|
|
print "\t\tprintf(\"%#lx\", val);"
|
|
} else {
|
|
print "\treturn (str);"
|
|
}
|
|
print "}"
|
|
}
|
|
'
|