1#! /bin/sh 2# $Id: headers-sh.in,v 1.9 2011/01/06 09:38:25 tom Exp $ 3############################################################################## 4# Copyright (c) 2004-2007,2011 Thomas E. Dickey # 5# # 6# Permission is hereby granted, free of charge, to any person obtaining a # 7# copy of this software and associated documentation files (the "Software"), # 8# to deal in the Software without restriction, including without limitation # 9# the rights to use, copy, modify, merge, publish, distribute, distribute # 10# with modifications, sublicense, and/or sell copies of the Software, and to # 11# permit persons to whom the Software is furnished to do so, subject to the # 12# following conditions: # 13# # 14# The above copyright notice and this permission notice shall be included in # 15# all copies or substantial portions of the Software. # 16# # 17# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # 18# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # 19# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # 20# THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # 21# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # 22# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # 23# DEALINGS IN THE SOFTWARE. # 24# # 25# Except as contained in this notice, the name(s) of the above copyright # 26# holders shall not be used in advertising or otherwise to promote the sale, # 27# use or other dealings in this Software without prior written # 28# authorization. # 29############################################################################## 30# 31# Adjust includes for header files that reside in a subdirectory of 32# /usr/include, etc. 33# 34# Parameters (the first case creates the sed script): 35# $1 is the target directory 36# $2 is the source directory 37# or (the second case does the install, using the sed script): 38# $1 is the script to use for installing 39# $2 is the target directory 40# $3 is the source directory 41# $4 is the file to install, editing source/target/etc. 42 43PACKAGE=@PACKAGE@ 44PKGNAME=@PACKAGE_PREFIX@ 45CONFIGH=@PACKAGE_CONFIG@ 46SUB_INC=@SUB_INC@ 47 48TMPSED=headers.sed 49 50DIGIT=0123456789 51alpha=abcdefghijklmnopqrstuvwxyz 52ALPHA=ABCDEFGHIJKLMNOPQRSTUVWXYZ 53 54alnum=_${DIGIT}${alpha} 55ALNUM=_${DIGIT}${ALPHA} 56MIXED=_${DIGIT}${ALPHA}${alpha} 57 58pkgname=`echo "$PKGNAME" | tr "$ALPHA" "$alpha"` 59 60if test $# = 2 ; then 61 rm -f $TMPSED 62 DST=$1 63 REF=$2 64 LEAF=`basename $DST` 65 66 # map the include-directory, if needed, to the subdirectory 67 case $DST in 68 /*/include/$LEAF) 69 END=`basename $DST` 70 for i in $REF/*.h 71 do 72 NAME=`basename $i` 73 echo "s/<$NAME>/<$END\/$NAME>/g" >> $TMPSED 74 done 75 ;; 76 *) 77 touch $TMPSED 78 ;; 79 esac 80 81 # cannot do _this_ in -e options: 82 cat >headers.tmp <<EOF 83s/^#[^ ][^ ]*// 84s/[^'$MIXED']/ /g 85s/[ ][ ]*/ /g 86s/^ // 87s/ $// 88:split 89 h 90 s/ .*// 91 p 92 t next 93 b done 94:next 95 x 96 s/^[^ ][^ ]* // 97 t split 98:done 99EOF 100 # pick up autoconf-style symbols used in the application's headers 101 for i in $REF/*.h 102 do 103 sed -e 's/^[ ][ ]*#[ ][ ]*/#/' $i \ 104 | egrep '^#(if|ifdef|ifndef|elif)' \ 105 | sed -f headers.tmp \ 106 | sort -u \ 107 | egrep '^(HAVE_|NEED_|NO_|ENABLE_|DISABLE_)' \ 108 | sed -e 's%^\(.*\)%s/\\<\1\\>/'${PKGNAME}'_\1/g%' >>$TMPSED 109 done 110 rm -f headers.tmp 111 112 # pick up autoconf-defined symbols in the config.h file 113 for name in ` 114 egrep '^#define[ ][ ]*['$ALNUM']' $REF/$CONFIGH \ 115 | sed \ 116 -e 's/^#define[ ][ ]*//' \ 117 -e 's/[ ].*//' \ 118 | egrep -v "^${PACKAGE}_" \ 119 | sort -u \ 120 | egrep -v "^${PKGNAME}_"` 121 do 122 echo "s/\\<$name\\>/${PKGNAME}_$name/g" >>$TMPSED 123 done 124 125 if test "$SUB_INC" = yes 126 then 127 echo "s,#include <${pkgname}_,#include <${PACKAGE}/${pkgname}_," >>$TMPSED 128 fi 129 130 # reduce the count if possible, since some old sed's limit is 100 lines 131 sort -u $TMPSED >headers.tmp 132 mv headers.tmp $TMPSED 133else 134 PRG="" 135 while test $# != 3 136 do 137 PRG="$PRG $1"; shift 138 done 139 140 DST=$1 141 REF=$2 142 SRC=$3 143 144 SHOW=`basename $SRC` 145 TMPSRC=${TMPDIR-/tmp}/${SHOW}$$ 146 147 echo " ... $SHOW" 148 test -f $REF/$SRC && SRC="$REF/$SRC" 149 150 rm -f $TMPSRC 151 sed -f $TMPSED $SRC > $TMPSRC 152 NAME=`basename $SRC` 153 154 # Just in case someone gzip'd manpages, remove the conflicting copy. 155 test -f $DST/$NAME.gz && rm -f $DST/$NAME.gz 156 157 if test "$SUB_INC" = yes 158 then 159 case $NAME in #(vi 160 ${pkgname}_*) #(vi 161 case "$PRG" in #(vi 162 *install*) 163 test -d $DST/$PACKAGE || mkdir -p $DST/$PACKAGE 164 ;; 165 esac 166 NAME=$PACKAGE/$NAME 167 ;; 168 *) 169 NAME=$PACKAGE.h 170 ;; 171 esac 172 fi 173 174 eval $PRG $TMPSRC $DST/$NAME 175 rm -f $TMPSRC 176fi 177# vile:ts=4 sw=4 178