252b246c7bd2538dda8890409c73e7a90e487064
[debian/amanda] / regex-src / mkh
1 #! /bin/sh
2 # mkh - pull headers out of C source
3 PATH=/bin:/usr/bin ; export PATH
4
5 # egrep pattern to pick out marked lines
6 egrep='^ =([    ]|$)'
7
8 # Sed program to process marked lines into lines for the header file.
9 # The markers have already been removed.  Two things are done here:  removal
10 # of backslashed newlines, and some fudging of comments.  The first is done
11 # because -o needs to have prototypes on one line to strip them down.
12 # Getting comments into the output is tricky; we turn C++-style // comments
13 # into /* */ comments, after altering any existing */'s to avoid trouble.
14 peel='  /\\$/N
15         /\\\n[  ]*/s///g
16         /\/\//s;\*/;* /;g
17         /\/\//s;//\(.*\);/*\1 */;'
18
19 for a
20 do
21         case "$a" in
22         -o)     # old (pre-function-prototype) compiler
23                 # add code to comment out argument lists
24                 peel="$peel
25                         "'/^\([^#\/][^\/]*[a-zA-Z0-9_)]\)(\(.*\))/s;;\1(/*\2*/);'
26                 shift
27                 ;;
28         -b)     # funny Berkeley __P macro
29                 peel="$peel
30                         "'/^\([^#\/][^\/]*[a-zA-Z0-9_)]\)(\(.*\))/s;;\1 __P((\2));'
31                 shift
32                 ;;
33         -s)     # compiler doesn't like `static foo();'
34                 # add code to get rid of the `static'
35                 peel="$peel
36                         "'/^static[     ][^\/]*[a-zA-Z0-9_)](.*)/s;static.;;'
37                 shift
38                 ;;
39         -p)     # private declarations
40                 egrep='^ ==([   ]|$)'
41                 shift
42                 ;;
43         -i)     # wrap in #ifndef, argument is name
44                 ifndef="$2"
45                 shift ; shift
46                 ;;
47         *)      break
48                 ;;
49         esac
50 done
51
52 if test " $ifndef" != " "
53 then
54         echo "#ifndef $ifndef"
55         echo "#define   $ifndef /* never again */"
56 fi
57 echo "/* ========= begin header generated by $0 ========= */"
58 echo '#ifdef __cplusplus'
59 echo 'extern "C" {'
60 echo '#endif'
61 for f
62 do
63         echo
64         echo "/* === $f === */"
65         egrep "$egrep" $f | sed 's/^ ==*[       ]//;s/^ ==*$//' | sed "$peel"
66         echo
67 done
68 echo '#ifdef __cplusplus'
69 echo '}'
70 echo '#endif'
71 echo "/* ========= end header generated by $0 ========= */"
72 if test " $ifndef" != " "
73 then
74         echo "#endif"
75 fi
76 exit 0