diff options
| -rwxr-xr-x | mkh.sh | 66 |
1 files changed, 35 insertions, 31 deletions
@@ -1,6 +1,6 @@ #!/bin/sh -. ./mk.sh +. $(dirname $0)/mk.sh export LC_ALL=POSIX export LANG=POSIX @@ -38,12 +38,15 @@ EOF rm -f $HEADER.* for i in $@; do # TODO: refs - echo $i >> $HEADER.$(classify_source $i) + type=$(classify_source $i) + version=1 + mkdir -p $HEADER.$type + echo $i >> $HEADER.$type/$version done #if [ POSIX ]; then cat <<-EOF > /dev/null - #if (!defined _POSIX_C_SOURCE) && (defined _XOPEN_SOURCE) + #if defined _XOPEN_SOURCE && !defined _POSIX_C_SOURCE # if (_XOPEN_SOURCE >= 700) # define _POSIX_C_SOURCE 200809L # elif (_XOPEN_SOURCE >= 600) @@ -55,22 +58,23 @@ cat <<-EOF > /dev/null # endif #endif - #ifdef _POSIX_C_SOURCE + #if defined _POSIX_C_SOURCE && !defined _POSIX_SOURCE # define _POSIX_SOURCE #endif EOF #fi -if [ -f $HEADER.MACRO ]; then +if [ -d $HEADER.MACRO ]; then # FIXME: line continuation - for i in $(sort $HEADER.MACRO); do + for i in $(sort $HEADER.MACRO/*); do grep -E '^#(if|def|undef|el|end)' $i done printf '\n' + # not deleted so externs can be placed later fi -if [ -f $HEADER.TYPE ]; then - for i in $(sort $HEADER.TYPE); do +if [ -d $HEADER.TYPE ]; then + for i in $(sort $HEADER.TYPE/*); do if grep -q '^#ifdef' $i; then sed -ne '/#ifdef/,/#endif/p' $i elif grep -q '^typedef.*;$' $i; then @@ -80,11 +84,11 @@ if [ -f $HEADER.TYPE ]; then fi done printf '\n' - rm $HEADER.TYPE + #rm -rf $HEADER.TYPE fi -if [ -f $HEADER.TYPE_LONG ]; then - for i in $(sort $HEADER.TYPE_LONG); do +if [ -d $HEADER.TYPE_LONG ]; then + for i in $(sort $HEADER.TYPE_LONG/*); do if grep -q '^#ifdef' $i; then sed -ne '/#ifdef/,/#endif/p' $i elif grep -q '^typedef.*;$' $i; then @@ -94,12 +98,12 @@ if [ -f $HEADER.TYPE_LONG ]; then fi done printf '\n' - rm $HEADER.TYPE_LONG + #rm -rf $HEADER.TYPE_LONG fi -if [ -f $HEADER.STRUCT -o -f $HEADER.UNION ]; then - touch $HEADER.STRUCT $HEADER.UNION - for i in $(sort $HEADER.STRUCT $HEADER.UNION 2>/dev/null); do +if [ -d $HEADER.STRUCT -o -d $HEADER.UNION ]; then + mkdir -p $HEADER.STRUCT $HEADER.UNION + for i in $(sort $HEADER.STRUCT/* $HEADER.UNION/* 2>/dev/null); do if grep -q '^struct' $i; then sed -ne '/^struct/,/\};/p' $i else @@ -107,54 +111,54 @@ if [ -f $HEADER.STRUCT -o -f $HEADER.UNION ]; then fi done printf '\n' - rm -f $HEADER.STRUCT $HEADER.UNION + #rm -rf $HEADER.STRUCT $HEADER.UNION fi -if [ -f $HEADER.EXTERN ]; then - for i in $(sort $HEADER.EXTERN); do +if [ -d $HEADER.EXTERN ]; then + for i in $(sort $HEADER.EXTERN/*); do printf 'extern %s' "$(grep '^[a-zA-Z_].*;$' $i)" done printf '\n' - rm -f $HEADER.EXTERN + #rm -rf $HEADER.EXTERN fi -if [ -f $HEADER.TGFN ]; then - for i in $(sort $HEADER.TGFN); do +if [ -d $HEADER.TGFN ]; then + for i in $(sort $HEADER.TGFN/*); do printf '%s;\n' "$(sed -e "/{/q" $i | tail -n2 | head -n1 | m4 '-DTGFN=$1' -DTYPE=double)" done printf '\n' - rm -f $HEADER.TGFN + #rm -rf $HEADER.TGFN fi -if [ -f $HEADER.FUNCTION ]; then - if grep -q restrict $(cat $HEADER.FUNCTION); then +if [ -d $HEADER.FUNCTION ]; then + if grep -q restrict $(cat $HEADER.FUNCTION/*); then printf '#if (!defined __STDC_VERSION__) || (__STDC_VERSION__ < 199909L)\n' printf '#define restrict\n' printf '#endif\n\n' fi - if grep -q _Noreturn $(cat $HEADER.FUNCTION); then + if grep -q _Noreturn $(cat $HEADER.FUNCTION/*); then printf '#if (!defined __STDC_VERSION__) || (__STDC_VERSION__ < 200112L)\n' printf '#define _Noreturn\n' printf '#endif\n\n' fi - for i in $(sort $HEADER.FUNCTION); do + for i in $(sort $HEADER.FUNCTION/*); do printf '%s;\n' "$(sed -e "/{/q" $i | tail -n2 | head -n1 | sed -e 's/\([a-zA-Z_][a-zA-Z_0-9]*\)\([,)]\)/__\1\2/g;s/(__\([a-zA-Z_][a-zA-Z_0-9]*\))/(\1)/g')" done printf '\n' - rm -f $HEADER.FUNCTION + #rm -rf $HEADER.FUNCTION fi -if [ -f $HEADER.MACRO ]; then - for i in $(sort $HEADER.MACRO); do +if [ -d $HEADER.MACRO ]; then + for i in $(sort $HEADER.MACRO/*); do grep ' *extern.*;$' $i done printf '\n' - rm $HEADER.MACRO + #rm -rf $HEADER.MACRO fi -rm -f $HEADER.REFERENCE +#rm -rf $HEADER.REFERENCE if [ $(basename $HEADER) != assert.h ]; then printf '\n#endif\n' |
