makeerrnos.sh revision 1.7 1 #! /bin/sh
2 #
3 # $NetBSD: makeerrnos.sh,v 1.7 2019/05/06 11:58:37 kamil Exp $
4
5 if [ $# -ne 3 ]; then
6 echo "usage: makeerrnos.sh errno.h signal.h output"
7 exit 1;
8 fi
9
10 ERRNOH=$1
11 SIGNALH=$2
12 CFILE=$3.c
13 HFILE=$3.h
14
15 : ${AWK:=awk}
16 : ${CPP:=cpp}
17 : ${CPPFLAGS:=}
18
19 cat <<__EOF__ > $CFILE
20 #include "misc.h"
21
22 struct systab errnos[] = {
23 __EOF__
24 cat ${ERRNOH} | ${CPP} ${CPPFLAGS} -dM |
25 ${AWK} '
26 /^#[ ]*define[ ]*E[A-Z0-9]*[ ]*[0-9-][0-9]*[ ]*.*/ {
27 for (i = 1; i <= NF; i++)
28 if ($i ~ /define/)
29 break;
30 i++;
31 j = i + 1;
32 #
33 printf("\t{ \"%s\", %s },\n", $i, $j);
34 }
35 END {
36 print " { \"0\", 0 },\n";
37 }
38 ' | sort -n -k 3 >> $CFILE
39 echo " { 0L, 0},
40 };" >> $CFILE
41 lines=`wc -l $CFILE | ${AWK} ' { print $1; } ' -`
42 lines=`expr $lines - 4`
43
44 cat <<__EOF__ >> $CFILE
45
46 struct systab signals[] = {
47 __EOF__
48 cat ${SIGNALH} | ${CPP} ${CPPFLAGS} -dM |
49 ${AWK} '
50 /^#[ ]*define[ ]*S[A-Z0-9]*[ ]*[0-9-][0-9]*[ ]*.*/ {
51 for (i = 1; i <= NF; i++)
52 if ($i ~ /define/)
53 break;
54 i++;
55 j = i + 1;
56
57 if ($i == "SIGRTMIN") {
58 sigrtmin=$j;
59 }
60 if ($i == "SIGRTMAX") {
61 sigrtmax=$j;
62 }
63
64 #
65 printf("\t{ \"%s\", %s },\n", $i, $j);
66 }
67 END {
68 j = 1;
69 for (i = sigrtmin + 1; i < sigrtmax; i++) {
70 printf("\t{ \"SIGRTMIN+%s\", %s },\n", j++, i);
71 }
72 print " { \"0\", 0 },\n";
73 }
74 ' | sort -n -k 3 >> $CFILE
75 echo " { 0L, 0},
76 };" >> $CFILE
77 elines=`grep '{ "SIG' $CFILE | wc -l`
78 elines=`expr $elines + 1`
79
80 cat <<__EOF__ >$HFILE
81 struct systab {
82 const char *name;
83 int value;
84 };
85
86 extern struct systab errnos[$lines + 1];
87 extern struct systab signals[$elines + 1];
88
89 #define MAXERRNOS $lines
90 #define MAXSIGNALS $elines
91 __EOF__
92