diff options
Diffstat (limited to '')
-rw-r--r-- | autoreconf.in | 334 |
1 files changed, 334 insertions, 0 deletions
diff --git a/autoreconf.in b/autoreconf.in new file mode 100644 index 0000000..a5d7a44 --- /dev/null +++ b/autoreconf.in @@ -0,0 +1,334 @@ +#! @SHELL@ +# -*- shell-script -*- +# autoreconf - remake all Autoconf configure scripts in a directory tree +# Copyright 2010,2023 Thomas E. Dickey +# Copyright 1994, 1999, 2000 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +me=`echo "$0" | sed -e 's,.*[\\/],,'` + +usage="\ +Usage: $0 [OPTION] ... [TEMPLATE-FILE] + +Run \`autoconf' and \`autoheader' where appropriate) repeatedly to +remake the Autoconf \`configure' scripts and configuration header +templates in the directory tree rooted at the current directory. + +By default, it only remakes those files that are older than their +predecessors. If you install a new version of Autoconf, running +\`autoreconf' remakes all of the files by giving it the \`--force' +option. + +Operation modes: + -h, --help print this help, then exit + -V, --version print version number, then exit + -v, --verbose verbosely report processing + -d, --debug don't remove temporary files + -f, --force consider every files are obsolete + -i, --install copy missing auxiliary files + -s, --symlink instead of copying, install symbolic links + +The option \`--install' is similar to the option \`--add-missing' in +other tools. + +Library directories: + -A, --autoconf-dir=ACDIR Autoconf's macro files location (rarely needed) + -l, --localdir=DIR location of \`aclocal.m4' and \`acconfig.h' + -M, --m4dir=M4DIR this package's Autoconf extensions + +Unless specified, heuristics try to compute \`M4DIR' from the \`Makefile.am', +or defaults to \`m4' if it exists. + +The environment variables AUTOCONF and AUTOHEADER are honored. + +Report bugs to <@PACKAGE_BUGREPORT@>." + +version="\ +autoreconf (@PACKAGE_NAME@) @VERSION@ +Written by David J. MacKenzie. + +Copyright 1994, 1999, 2000 Free Software Foundation, Inc. +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help="\ +Try \`$me --help' for more information." + +exit_missing_arg="\ +echo \"$me: option \\\`\$1' requires an argument\" >&2 +echo \"\$help\" >&2 +exit 1" + +# NLS nuisances. +# Only set these to C if already set. These must not be set unconditionally +# because not all systems understand e.g. LANG=C (notably SCO). +# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'! +# Non-C LC_CTYPE values break the ctype check. +if test "${LANG+set}" = set; then LANG=C; export LANG; fi +if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi +if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi +if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi + +# Variables. +: ${autoconf_dir=${AC_MACRODIR=@datadir@}} +debug=false +dir=`echo "$0" | sed -e 's,[^\\/]*$,,'` +force=false +# --install -- as --add-missing in other tools. +install=false +localdir=. +# m4dir -- local Autoconf extensions. Typically `m4'. +m4dir= +status=0 +# symlink -- when --install, use symlinks instead. +symlink=false +verbose=: + +# Looking for autoconf. +# We test "$dir/autoconf" in case we are in the build tree, in which case +# the names are not transformed yet. +for autoconf in "$AUTOCONF" \ + "$dir/@autoconf-name@" \ + "$dir/autoconf" \ + "@bindir@/@autoconf-name@"; do + test -f "$autoconf" && break +done + +# Looking for autoheader. +for autoheader in "$AUTOHEADER" \ + "$dir/@autoheader-name@" \ + "$dir/autoheader" \ + "@bindir@/@autoheader-name@"; do + test -f "$autoheader" && break +done + +# Parse command line. +while test $# -gt 0; do + optarg=`expr "x$1" : 'x--[^=]*=\(.*\)' \| \ + "x$1" : 'x-.\(.*\)'` + case "$1" in + --version | -V ) + echo "$version" ; exit 0 ;; + --help | -h ) + echo "$usage"; exit 0 ;; + + --verbose | -v ) + verbose=echo + shift;; + --debug | -d ) + debug=:; shift ;; + + --localdir=* | -l?* ) + localdir=$optarg + shift ;; + --localdir | -l ) + test $# = 1 && eval "$exit_missing_arg" + shift + localdir=$1 + shift ;; + + --autoconf-dir=* | -A?* ) + autoconf_dir=$optarg + shift ;; + --autoconf-dir | -A ) + test $# = 1 && eval "$exit_missing_arg" + shift + autoconf_dir=$1 + shift ;; + --macrodir=* | -m?* ) + echo "$me: warning: --macrodir is obsolete, use --autoconf-dir" >&2 + autoconf_dir=$optarg + shift ;; + --macrodir | -m ) + echo "$me: warning: --macrodir is obsolete, use --autoconf-dir" >&2 + test $# = 1 && eval "$exit_missing_arg" + shift + autoconf_dir=$1 + shift ;; + + --m4dir=* | -M?* ) + m4dir=$optarg + shift ;; + --m4dir | -M ) + test $# = 1 && eval "$exit_missing_arg" + shift + m4dir=$1 + shift ;; + + --force | -f ) + force=:; shift ;; + + --install | -i ) + install=:; shift ;; + --symlink | -s ) + symlink=:; shift ;; + + -- ) # Stop option processing. + shift; break ;; + -* ) + exec >&2 + echo "$me: invalid option $1" + echo "$help" + exit 1 ;; + * ) + break ;; + esac +done + +# Find the input file. +if test $# -ne 0; then + exec >&2 + echo "$me: invalid number of arguments" + echo "$help" + exit 1 +fi + +# If verbose, say what you are going to use. +if test $verbose = echo; then + $autoconf --version | + sed "s,.*)\(.*\)$,$me: using autoconf\1: $autoconf,;1q" >&2 + $autoheader --version | + sed "s,.*)\(.*\)$,$me: using autoheader\1: $autoheader,;1q" >&2 +fi + +# Dispatch autoreconf's option to the tools. +# --localdir +autoconf="$autoconf -l $localdir" +autoheader="$autoheader -l $localdir" +# --verbose +autoconf="$autoconf `$verbose --verbose`" +autoheader="$autoheader `$verbose --verbose`" +# --debug +$debug && +{ + autoconf="$autoconf --debug" + autoheader="$autoheader --debug" +} +# --macrodir +export autoconf_dir + +# Trap on 0 to stop playing with `rm'. +$debug || +{ + trap 'status=$?; rm -rf $tmp && exit $status' 0 + trap '(exit 1); exit 1' 1 2 13 15 +} + +# Create a (secure) tmp directory for tmp files. +: ${TMPDIR=/tmp} +{ + tmp=`(umask 077 && mktemp -d -q "$TMPDIR/arXXXXXX") 2>/dev/null` && + test -n "$tmp" && test -d "$tmp" +} || +{ + tmp=$TMPDIR/ar$$ + (umask 077 && mkdir $tmp) +} || +{ + echo "$me: cannot create a temporary directory in $TMPDIR" >&2 + (exit 1); exit 1 +} + +# When debugging, it is convenient that all the related temporary +# files be at the same place. +TMPDIR=$tmp +export TMPDIR + +# update.sh -- +# Exit 0 if the first argument is not the most recent of all or is missing. +cat >$tmp/update.sh <<\EOF +test -f "$1" || { :; exit; } +test x`ls -1dt "$@" 2>/dev/null | sed 1q` != x"$1" +EOF +update="@SHELL@ $tmp/update.sh" + + +# ----------------------- # +# Real work starts here. # +# ----------------------- # + +# Make a list of directories to process. +# The xargs grep filters out Cygnus configure.in files. +find . '(' -name configure.ac -o -name configure.in ')' -print | +xargs grep -l AC_INIT | +sed 's,/configure\.ac$,,;s,/configure\.in$,,;s,^./,,' | +while read dir; do + ( + cd $dir || continue + + + # ------------------ # + # Running autoconf. # + # ------------------ # + + if $force || + $update configure configure.ac $localdir/aclocal.m4 || + $update configure configure.in $localdir/aclocal.m4; then + $verbose $me: running $autoconf in $dir >&2 + $autoconf + fi + + + # -------------------- # + # Running autoheader. # + # -------------------- # + + # templates -- arguments of AC_CONFIG_HEADERS. + $verbose $me: running $autoconf -t 'AC_CONFIG_HEADERS:$1' >&2 + templates=`$autoconf -t 'AC_CONFIG_HEADERS:$1'` + if test -n "$templates"; then + tcount=`set -- $templates; echo $#` + template=`set -- $templates; echo $1 | sed ' + s/.*:// + t colon + s/$/.in/ + : colon + s/:.*// + '` + template_dir=`echo $template | sed -e 's,[\\/]*[^\\/]*$,,;s,^$,.,'` + stamp_num=`test "$tcount" -gt 1 && echo "$tcount"` + stamp=$template_dir/stamp-h$stamp_num.in + # If config.hin exists, don't override it unless it was really + # created by autoheader (users are allowed to write them by hand!). + uses_autoheader=false + grep autoheader "$template" >/dev/null 2>&1 && + uses_autoheader=: + test -f "$template" || + uses_autoheader=: + if $uses_autoheader && + { $force || + $update $template \ + configure.ac $localdir/aclocal.m4 $localdir/acconfig.h || + $update $template \ + configure.in $localdir/aclocal.m4 $localdir/acconfig.h || + $update $stamp \ + configure.ac $localdir/aclocal.m4 $localdir/acconfig.h || + $update $stamp \ + configure.in $localdir/aclocal.m4 $localdir/acconfig.h; } then + $verbose $me: running $autoheader in $dir >&2 + $autoheader && + $verbose "touching $stamp" >&2 && + touch $stamp + fi + fi + ) +done + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# End: |