| #! /bin/sh |
| # mkh - pull headers out of C source |
| PATH=/bin:/usr/bin ; export PATH |
| |
| # egrep pattern to pick out marked lines |
| egrep='^ =([ ]|$)' |
| |
| # Sed program to process marked lines into lines for the header file. |
| # The markers have already been removed. Two things are done here: removal |
| # of backslashed newlines, and some fudging of comments. The first is done |
| # because -o needs to have prototypes on one line to strip them down. |
| # Getting comments into the output is tricky; we turn C++-style // comments |
| # into /* */ comments, after altering any existing */'s to avoid trouble. |
| peel=' /\\$/N |
| /\\\n[ ]*/s///g |
| /\/\//s;\*/;* /;g |
| /\/\//s;//\(.*\);/*\1 */;' |
| |
| for a |
| do |
| case "$a" in |
| -o) # old (pre-function-prototype) compiler |
| # add code to comment out argument lists |
| peel="$peel |
| "'/^\([^#\/][^\/]*[a-zA-Z0-9_)]\)(\(.*\))/s;;\1(/*\2*/);' |
| shift |
| ;; |
| -b) # funny Berkeley __P macro |
| peel="$peel |
| "'/^\([^#\/][^\/]*[a-zA-Z0-9_)]\)(\(.*\))/s;;\1 __P((\2));' |
| shift |
| ;; |
| -s) # compiler doesn't like `static foo();' |
| # add code to get rid of the `static' |
| peel="$peel |
| "'/^static[ ][^\/]*[a-zA-Z0-9_)](.*)/s;static.;;' |
| shift |
| ;; |
| -p) # private declarations |
| egrep='^ ==([ ]|$)' |
| shift |
| ;; |
| -i) # wrap in #ifndef, argument is name |
| ifndef="$2" |
| shift ; shift |
| ;; |
| *) break |
| ;; |
| esac |
| done |
| |
| if test " $ifndef" != " " |
| then |
| echo "#ifndef $ifndef" |
| echo "#define $ifndef /* never again */" |
| fi |
| echo "/* ========= begin header generated by $0 ========= */" |
| echo '#ifdef __cplusplus' |
| echo 'extern "C" {' |
| echo '#endif' |
| for f |
| do |
| echo |
| echo "/* === $f === */" |
| egrep "$egrep" $f | sed 's/^ ==*[ ]//;s/^ ==*$//' | sed "$peel" |
| echo |
| done |
| echo '#ifdef __cplusplus' |
| echo '}' |
| echo '#endif' |
| echo "/* ========= end header generated by $0 ========= */" |
| if test " $ifndef" != " " |
| then |
| echo "#endif" |
| fi |
| exit 0 |