1#! @SHELL@ 2# autoheader -- create `config.h.in' from `configure.in' 3# Copyright (C) 1992, 1993, 1994, 1996, 1998 Free Software Foundation, Inc. 4 5# This program is free software; you can redistribute it and/or modify 6# it under the terms of the GNU General Public License as published by 7# the Free Software Foundation; either version 2, or (at your option) 8# any later version. 9 10# This program is distributed in the hope that it will be useful, 11# but WITHOUT ANY WARRANTY; without even the implied warranty of 12# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13# GNU General Public License for more details. 14 15# You should have received a copy of the GNU General Public License 16# along with this program; if not, write to the Free Software 17# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 18# 02111-1307, USA. 19 20# Written by Roland McGrath. 21 22# If given no args, create `config.h.in' from template file `configure.in'. 23# With one arg, create a header file on standard output from 24# the given template file. 25 26usage="\ 27Usage: autoheader [-h] [--help] [-m dir] [--macrodir=dir] 28 [-l dir] [--localdir=dir] [--version] [template-file]" 29 30# NLS nuisances. 31# Only set these to C if already set. These must not be set unconditionally 32# because not all systems understand e.g. LANG=C (notably SCO). 33# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'! 34# Non-C LC_CTYPE values break the ctype check. 35if test "${LANG+set}" = set; then LANG=C; export LANG; fi 36if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi 37if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi 38if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi 39 40test -z "${AC_MACRODIR}" && AC_MACRODIR=@datadir@ 41test -z "${M4}" && M4=@M4@ 42case "${M4}" in 43/*) # Handle the case that m4 has moved since we were configured. 44 # It may have been found originally in a build directory. 45 test -f "${M4}" || M4=m4 ;; 46esac 47 48localdir=. 49show_version=no 50 51while test $# -gt 0 ; do 52 case "${1}" in 53 -h | --help | --h* ) 54 echo "${usage}"; exit 0 ;; 55 --localdir=* | --l*=* ) 56 localdir="`echo \"${1}\" | sed -e 's/^[^=]*=//'`" 57 shift ;; 58 -l | --localdir | --l*) 59 shift 60 test $# -eq 0 && { echo "${usage}" 1>&2; exit 1; } 61 localdir="${1}" 62 shift ;; 63 --macrodir=* | --m*=* ) 64 AC_MACRODIR="`echo \"${1}\" | sed -e 's/^[^=]*=//'`" 65 shift ;; 66 -m | --macrodir | --m* ) 67 shift 68 test $# -eq 0 && { echo "${usage}" 1>&2; exit 1; } 69 AC_MACRODIR="${1}" 70 shift ;; 71 --version | --v* ) 72 show_version=yes; shift ;; 73 -- ) # Stop option processing 74 shift; break ;; 75 - ) # Use stdin as input. 76 break ;; 77 -* ) 78 echo "${usage}" 1>&2; exit 1 ;; 79 * ) 80 break ;; 81 esac 82done 83 84if test $show_version = yes; then 85 version=`sed -n 's/define.AC_ACVERSION.[ ]*\([0-9.]*\).*/\1/p' \ 86 $AC_MACRODIR/acgeneral.m4` 87 echo "Autoconf version $version" 88 exit 0 89fi 90 91TEMPLATES="${AC_MACRODIR}/acconfig.h" 92test -r $localdir/acconfig.h && TEMPLATES="${TEMPLATES} $localdir/acconfig.h" 93 94case $# in 95 0) infile=configure.in ;; 96 1) infile=$1 ;; 97 *) echo "$usage" >&2; exit 1 ;; 98esac 99 100config_h=config.h 101syms= 102types= 103funcs= 104headers= 105libs= 106 107if test "$localdir" != .; then 108 use_localdir="-I$localdir -DAC_LOCALDIR=$localdir" 109else 110 use_localdir= 111fi 112 113# Use the frozen version of Autoconf if available. 114r= f= 115# Some non-GNU m4's don't reject the --help option, so give them /dev/null. 116case `$M4 --help < /dev/null 2>&1` in 117*reload-state*) test -r $AC_MACRODIR/autoheader.m4f && { r=--reload f=f; } ;; 118*traditional*) ;; 119*) echo Autoconf requires GNU m4 1.1 or later >&2; exit 1 ;; 120esac 121 122# Extract assignments of SYMS, TYPES, FUNCS, HEADERS, and LIBS from the 123# modified autoconf processing of the input file. The sed hair is 124# necessary to win for multi-line macro invocations. 125eval "`$M4 -I$AC_MACRODIR $use_localdir $r autoheader.m4$f $infile | 126 sed -n -e ' 127 : again 128 /^@@@.*@@@$/s/^@@@\(.*\)@@@$/\1/p 129 /^@@@/{ 130 s/^@@@//p 131 n 132 s/^/@@@/ 133 b again 134 }'`" 135 136# Make SYMS newline-separated rather than blank-separated, and remove dups. 137# Start each symbol with a blank (to match the blank after "#undef") 138# to reduce the possibility of mistakenly matching another symbol that 139# is a substring of it. 140syms="`for sym in $syms; do echo $sym; done | sort | uniq | sed 's@^@ @'`" 141 142if test $# -eq 0; then 143 tmpout=autoh$$ 144 trap "rm -f $tmpout; exit 1" 1 2 15 145 exec > $tmpout 146fi 147 148# Support "outfile[:infile]", defaulting infile="outfile.in". 149case "$config_h" in 150*:*) config_h_in=`echo "$config_h"|sed 's%.*:%%'` 151 config_h=`echo "$config_h"|sed 's%:.*%%'` ;; 152*) config_h_in="${config_h}.in" ;; 153esac 154 155# Don't write "do not edit" -- it will get copied into the 156# config.h, which it's ok to edit. 157cat <<EOF 158/* ${config_h_in}. Generated automatically from $infile by autoheader. */ 159EOF 160 161test -r ${config_h}.top && cat ${config_h}.top 162test -r $localdir/acconfig.h && 163 grep @TOP@ $localdir/acconfig.h >/dev/null && 164 sed '/@TOP@/,$d' $localdir/acconfig.h 165 166# This puts each template paragraph on its own line, separated by @s. 167if test -n "$syms"; then 168 # Make sure the boundary of template files is also the boundary 169 # of the paragraph. Extra newlines don't hurt since they will 170 # be removed. 171 # Undocumented useless feature: stuff outside of @TOP@ and @BOTTOM@ 172 # is ignored in the systemwide acconfig.h too. 173 for t in $TEMPLATES; do 174 sedscript="" 175 grep @TOP@ $t >/dev/null && sedscript="1,/@TOP@/d;" 176 grep @BOTTOM@ $t >/dev/null && sedscript="$sedscript /@BOTTOM@/,\$d;" 177 # This substitution makes "#undef<TAB>FOO" in acconfig.h work. 178 sed -n -e "$sedscript s/ / /g; p" $t 179 echo; echo 180 done | 181 # The sed script is suboptimal because it has to take care of 182 # some broken seds (e.g. AIX) that remove '\n' from the 183 # pattern/hold space if the line is empty. (junio@twinsun.com). 184 sed -n -e ' 185 /^[ ]*$/{ 186 x 187 s/\n/@/g 188 p 189 s/.*/@/ 190 x 191 } 192 H' | sed -e 's/@@*/@/g' | 193 # Select each paragraph that refers to a symbol we picked out above. 194 # Some fgrep's have limits on the number of lines that can be in the 195 # pattern on the command line, so use a temporary file containing the 196 # pattern. 197 (fgrep_tmp=`mktemp ${TMPDIR-/tmp}/autoh.XXXXXXXXXX` || exit 1 198 trap "rm -f $fgrep_tmp; exit 1" 1 2 15 199 cat > $fgrep_tmp <<EOF 200$syms 201EOF 202 fgrep -f $fgrep_tmp 203 rm -f $fgrep_tmp) | 204 tr @ \\012 205fi 206 207echo "$types" | tr , \\012 | sort | uniq | while read ctype; do 208 test -z "$ctype" && continue 209 sym="`echo "${ctype}" | tr 'abcdefghijklmnopqrstuvwxyz *' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_P'`" 210 echo " 211/* The number of bytes in a ${ctype}. */ 212#undef SIZEOF_${sym}" 213done 214 215# /bin/sh on the Alpha gives `for' a random value if $funcs is empty. 216if test -n "$funcs"; then 217 for func in `for x in $funcs; do echo $x; done | sort | uniq`; do 218 sym="`echo ${func} | sed 's/[^a-zA-Z0-9_]/_/g' | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`" 219 echo " 220/* Define if you have the ${func} function. */ 221#undef HAVE_${sym}" 222 done 223fi 224 225if test -n "$headers"; then 226 for header in `for x in $headers; do echo $x; done | sort | uniq`; do 227 228 sym="`echo ${header} | sed 's/[^a-zA-Z0-9_]/_/g' | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`" 229 echo " 230/* Define if you have the <${header}> header file. */ 231#undef HAVE_${sym}" 232 done 233fi 234 235if test -n "$libs"; then 236 for lib in `for x in $libs; do echo $x; done | sort | uniq`; do 237 sym="`echo ${lib} | sed 's/[^a-zA-Z0-9_]/_/g' | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`" 238 echo " 239/* Define if you have the ${lib} library (-l${lib}). */ 240#undef HAVE_LIB${sym}" 241 done 242fi 243 244if test -n "$verbatim"; then 245 echo "$verbatim" 246fi 247 248# Handle the case where @BOTTOM@ is the first line of acconfig.h. 249test -r $localdir/acconfig.h && 250 grep @BOTTOM@ $localdir/acconfig.h >/dev/null && 251 sed -n '/@BOTTOM@/,${/@BOTTOM@/!p;}' $localdir/acconfig.h 252test -f ${config_h}.bot && cat ${config_h}.bot 253 254status=0 255 256if test -n "$syms"; then 257 for sym in $syms; do 258 if fgrep $sym $TEMPLATES >/dev/null; then 259 : # All is well. 260 else 261 echo "$0: Symbol \`${sym}' is not covered by $TEMPLATES" >&2 262 status=1 263 fi 264 done 265fi 266 267if test $# -eq 0; then 268 if test $status -eq 0; then 269 if test -f ${config_h_in} && cmp -s $tmpout ${config_h_in}; then 270 rm -f $tmpout # File didn't change, so don't update its mod time. 271 else 272 mv -f $tmpout ${config_h_in} 273 fi 274 else 275 rm -f $tmpout 276 fi 277fi 278 279exit $status 280