77 lines
1.8 KiB
Bash
77 lines
1.8 KiB
Bash
#! /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
|