1235609Sgber#! /bin/sh 2235609Sgber# mkh - pull headers out of C source 3235609Sgber# $FreeBSD: releng/11.0/lib/libc/regex/grot/mkh 92971 2002-03-22 19:45:43Z obrien $ 4235609SgberPATH=/bin:/usr/bin ; export PATH 5235609Sgber 6235609Sgber# egrep pattern to pick out marked lines 7235609Sgberegrep='^ =([ ]|$)' 8235609Sgber 9235609Sgber# Sed program to process marked lines into lines for the header file. 10235609Sgber# The markers have already been removed. Two things are done here: removal 11235609Sgber# of backslashed newlines, and some fudging of comments. The first is done 12235609Sgber# because -o needs to have prototypes on one line to strip them down. 13235609Sgber# Getting comments into the output is tricky; we turn C++-style // comments 14235609Sgber# into /* */ comments, after altering any existing */'s to avoid trouble. 15235609Sgberpeel=' /\\$/N 16235609Sgber /\\\n[ ]*/s///g 17235609Sgber /\/\//s;\*/;* /;g 18235609Sgber /\/\//s;//\(.*\);/*\1 */;' 19235609Sgber 20235609Sgberfor a 21235609Sgberdo 22235609Sgber case "$a" in 23235609Sgber -o) # old (pre-function-prototype) compiler 24235609Sgber # add code to comment out argument lists 25235609Sgber peel="$peel 26235609Sgber "'/^\([^#\/][^\/]*[a-zA-Z0-9_)]\)(\(.*\))/s;;\1(/*\2*/);' 27235609Sgber shift 28235609Sgber ;; 29235609Sgber -b) # funny Berkeley __P macro 30235609Sgber peel="$peel 31235609Sgber "'/^\([^#\/][^\/]*[a-zA-Z0-9_)]\)(\(.*\))/s;;\1 __P((\2));' 32235609Sgber shift 33235609Sgber ;; 34235609Sgber -s) # compiler doesn't like `static foo();' 35235609Sgber # add code to get rid of the `static' 36235609Sgber peel="$peel 37235609Sgber "'/^static[ ][^\/]*[a-zA-Z0-9_)](.*)/s;static.;;' 38235609Sgber shift 39235609Sgber ;; 40235609Sgber -p) # private declarations 41235609Sgber egrep='^ ==([ ]|$)' 42235609Sgber shift 43235609Sgber ;; 44235609Sgber -i) # wrap in #ifndef, argument is name 45235609Sgber ifndef="$2" 46235609Sgber shift ; shift 47235609Sgber ;; 48235609Sgber *) break 49235609Sgber ;; 50235609Sgber esac 51235609Sgberdone 52235609Sgber 53235609Sgberif test " $ifndef" != " " 54235609Sgberthen 55235609Sgber echo "#ifndef $ifndef" 56235609Sgber echo "#define $ifndef /* never again */" 57235609Sgberfi 58235609Sgberecho "/* ========= begin header generated by $0 ========= */" 59235609Sgberecho '#ifdef __cplusplus' 60235609Sgberecho 'extern "C" {' 61235609Sgberecho '#endif' 62235609Sgberfor f 63235609Sgberdo 64235609Sgber echo 65235609Sgber echo "/* === $f === */" 66235609Sgber egrep "$egrep" $f | sed 's/^ ==*[ ]//;s/^ ==*$//' | sed "$peel" 67235609Sgber echo 68235609Sgberdone 69235609Sgberecho '#ifdef __cplusplus' 70235609Sgberecho '}' 71235609Sgberecho '#endif' 72235609Sgberecho "/* ========= end header generated by $0 ========= */" 73235609Sgberif test " $ifndef" != " " 74235609Sgberthen 75235609Sgber echo "#endif" 76235609Sgberfi 77235609Sgberexit 0 78235609Sgber