18ca5c256SDaniel C. Sobral#! /bin/sh 28ca5c256SDaniel C. Sobral# mkh - pull headers out of C source 38ca5c256SDaniel C. Sobral# $FreeBSD$ 48ca5c256SDaniel C. SobralPATH=/bin:/usr/bin ; export PATH 58ca5c256SDaniel C. Sobral 68ca5c256SDaniel C. Sobral# egrep pattern to pick out marked lines 78ca5c256SDaniel C. Sobralegrep='^ =([ ]|$)' 88ca5c256SDaniel C. Sobral 98ca5c256SDaniel C. Sobral# Sed program to process marked lines into lines for the header file. 108ca5c256SDaniel C. Sobral# The markers have already been removed. Two things are done here: removal 118ca5c256SDaniel C. Sobral# of backslashed newlines, and some fudging of comments. The first is done 128ca5c256SDaniel C. Sobral# because -o needs to have prototypes on one line to strip them down. 138ca5c256SDaniel C. Sobral# Getting comments into the output is tricky; we turn C++-style // comments 148ca5c256SDaniel C. Sobral# into /* */ comments, after altering any existing */'s to avoid trouble. 158ca5c256SDaniel C. Sobralpeel=' /\\$/N 168ca5c256SDaniel C. Sobral /\\\n[ ]*/s///g 178ca5c256SDaniel C. Sobral /\/\//s;\*/;* /;g 188ca5c256SDaniel C. Sobral /\/\//s;//\(.*\);/*\1 */;' 198ca5c256SDaniel C. Sobral 208ca5c256SDaniel C. Sobralfor a 218ca5c256SDaniel C. Sobraldo 228ca5c256SDaniel C. Sobral case "$a" in 238ca5c256SDaniel C. Sobral -o) # old (pre-function-prototype) compiler 248ca5c256SDaniel C. Sobral # add code to comment out argument lists 258ca5c256SDaniel C. Sobral peel="$peel 268ca5c256SDaniel C. Sobral "'/^\([^#\/][^\/]*[a-zA-Z0-9_)]\)(\(.*\))/s;;\1(/*\2*/);' 278ca5c256SDaniel C. Sobral shift 288ca5c256SDaniel C. Sobral ;; 298ca5c256SDaniel C. Sobral -b) # funny Berkeley __P macro 308ca5c256SDaniel C. Sobral peel="$peel 314b74b098SDavid E. O'Brien "'/^\([^#\/][^\/]*[a-zA-Z0-9_)]\)(\(.*\))/s;;\1 __P((\2));' 328ca5c256SDaniel C. Sobral shift 338ca5c256SDaniel C. Sobral ;; 348ca5c256SDaniel C. Sobral -s) # compiler doesn't like `static foo();' 358ca5c256SDaniel C. Sobral # add code to get rid of the `static' 368ca5c256SDaniel C. Sobral peel="$peel 378ca5c256SDaniel C. Sobral "'/^static[ ][^\/]*[a-zA-Z0-9_)](.*)/s;static.;;' 388ca5c256SDaniel C. Sobral shift 398ca5c256SDaniel C. Sobral ;; 408ca5c256SDaniel C. Sobral -p) # private declarations 418ca5c256SDaniel C. Sobral egrep='^ ==([ ]|$)' 428ca5c256SDaniel C. Sobral shift 438ca5c256SDaniel C. Sobral ;; 448ca5c256SDaniel C. Sobral -i) # wrap in #ifndef, argument is name 458ca5c256SDaniel C. Sobral ifndef="$2" 468ca5c256SDaniel C. Sobral shift ; shift 478ca5c256SDaniel C. Sobral ;; 488ca5c256SDaniel C. Sobral *) break 498ca5c256SDaniel C. Sobral ;; 508ca5c256SDaniel C. Sobral esac 518ca5c256SDaniel C. Sobraldone 528ca5c256SDaniel C. Sobral 538ca5c256SDaniel C. Sobralif test " $ifndef" != " " 548ca5c256SDaniel C. Sobralthen 558ca5c256SDaniel C. Sobral echo "#ifndef $ifndef" 568ca5c256SDaniel C. Sobral echo "#define $ifndef /* never again */" 578ca5c256SDaniel C. Sobralfi 588ca5c256SDaniel C. Sobralecho "/* ========= begin header generated by $0 ========= */" 598ca5c256SDaniel C. Sobralecho '#ifdef __cplusplus' 608ca5c256SDaniel C. Sobralecho 'extern "C" {' 618ca5c256SDaniel C. Sobralecho '#endif' 628ca5c256SDaniel C. Sobralfor f 638ca5c256SDaniel C. Sobraldo 648ca5c256SDaniel C. Sobral echo 658ca5c256SDaniel C. Sobral echo "/* === $f === */" 668ca5c256SDaniel C. Sobral egrep "$egrep" $f | sed 's/^ ==*[ ]//;s/^ ==*$//' | sed "$peel" 678ca5c256SDaniel C. Sobral echo 688ca5c256SDaniel C. Sobraldone 698ca5c256SDaniel C. Sobralecho '#ifdef __cplusplus' 708ca5c256SDaniel C. Sobralecho '}' 718ca5c256SDaniel C. Sobralecho '#endif' 728ca5c256SDaniel C. Sobralecho "/* ========= end header generated by $0 ========= */" 738ca5c256SDaniel C. Sobralif test " $ifndef" != " " 748ca5c256SDaniel C. Sobralthen 758ca5c256SDaniel C. Sobral echo "#endif" 768ca5c256SDaniel C. Sobralfi 778ca5c256SDaniel C. Sobralexit 0 78