1#! /bin/sh 2# $Id: headers.sh,v 1.10 2012/03/20 08:45:21 tom Exp $ 3# vi:ts=4 sw=4 4# 5# Adjust includes for header files that reside in a subdirectory of 6# /usr/include, etc. 7# 8# Options: 9# -c CFG specify an alternate name for config.h 10# -d DIR target directory 11# -e FILE extra editing commands, e.g., for manpage references 12# -h FILE install the given file in subdirectory DIR rather than parent 13# -i create/update the headers.sed script 14# -p PKG specify the package name 15# -s DIR source directory 16# -t TYPE renaming for manpage-sections 17# -x PRG install-program (plus options, the whole value in quotes) 18# 19# Other parameters are assumed to be provided only for the install scenario. 20 21SCRIPT=headers.sed 22MYFILE=headers.tmp 23 24OPT_C=config.h 25OPT_D= 26OPT_E= 27OPT_H= 28OPT_I=n 29OPT_P= 30OPT_S= 31OPT_T= 32OPT_X=install 33 34while test $# != 0 35do 36 case $1 in 37 -c) # CFG specify an alternate name for config.h 38 shift 39 OPT_C="$1" 40 ;; 41 -d) # DIR target directory 42 shift 43 OPT_D="$1" 44 ;; 45 -e) # FILE extra sed-commands 46 shift 47 OPT_E="$OPT_E -f $1" 48 ;; 49 -h) # FILE special-case of header in subdirectory 50 shift 51 OPT_H="$1" 52 ;; 53 -i) # create the headers.sed script 54 if test "$OPT_I" = n 55 then 56 rm -f $SCRIPT 57 fi 58 OPT_I=y 59 60 if ( test -n "$OPT_D" ) 61 then 62 if ( test -n "$OPT_S" && test -d "$OPT_S" ) 63 then 64 LEAF=`basename $OPT_D` 65 case $OPT_D in 66 /*/include/$LEAF) 67 END=`basename $OPT_D` 68 for i in $OPT_S/*.h 69 do 70 NAME=`basename $i` 71 if test -z "$OPT_H" || test "$OPT_H" != "$NAME" 72 then 73 echo "s%<$NAME>%<$END/$NAME>%g" >> $SCRIPT 74 fi 75 done 76 ;; 77 *) 78 echo "" >> $SCRIPT 79 ;; 80 esac 81 OPT_S= 82 if test -f $SCRIPT ; then 83 sort -u $SCRIPT >$MYFILE 84 rm -f $SCRIPT 85 mv $MYFILE $SCRIPT 86 fi 87 fi 88 fi 89 90 if test -n "$OPT_P" 91 then 92 for name in ` 93 egrep "#define[ ][ ]*[A-Z]" $OPT_C \ 94 | sed -e 's/^#define[ ][ ]*//' \ 95 -e 's/[ ].*//' \ 96 | fgrep -v GCC_ \ 97 | sort -u \ 98 | egrep -v "^${OPT_P}_"` 99 do 100 echo "s%\\<$name\\>%${OPT_P}_$name%g" >>$SCRIPT 101 done 102 if test -f $SCRIPT ; then 103 sort -u $SCRIPT >$MYFILE 104 rm -f $SCRIPT 105 mv $MYFILE $SCRIPT 106 fi 107 OPT_P= 108 fi 109 ;; 110 -p) # PKG specify the package name 111 shift 112 OPT_P="$1" 113 ;; 114 -s) # DIR source directory 115 shift 116 OPT_S="$1" 117 ;; 118 -t) # rename suffix of target 119 shift 120 OPT_T="$1" 121 ;; 122 -x) # PRG install-program (plus options, the whole value in quotes) 123 shift 124 OPT_X="$1" 125 ;; 126 *) 127 FILE=$1 128 129 SHOW=`basename $FILE` 130 TMPSRC=${TMPDIR-/tmp}/${SHOW}$$ 131 132 echo " ... $SHOW" 133 test -f $OPT_S/$FILE && FILE="$OPT_S/$FILE" 134 135 if test -f "$FILE" 136 then 137 rm -f $TMPSRC 138 sed -f $SCRIPT $OPT_E $FILE > $TMPSRC 139 NAME=`basename $FILE` 140 if test -n "$OPT_T" ; then 141 NAME=`echo "$NAME" | sed -e 's/\.[^.]*$//'`.$OPT_T 142 fi 143 144 # Just in case someone gzip'd manpages, 145 # remove the conflicting copy. 146 test -f $OPT_D/$NAME.gz && rm -f $OPT_D/$NAME.gz 147 148 eval $OPT_X $TMPSRC $OPT_D/$NAME 149 rm -f $TMPSRC 150 fi 151 ;; 152 esac 153 shift 154done 155