Browse Source
Rework of autoconfiscation infrastructure
Rework of autoconfiscation infrastructure
* autoconf/config.{guess,sub}: Update to GNU version 2003-10-07. * autoconf/ltmain.sh: Update to GNU version 1.4.3. * autoconf/autoconf: Remove (from now on we assume autoconf is installed properly on the sytem). * autoconf/autoconf.m4: Likewise. * autoconf/autoconf.m4f: Likewise. * autoconf/acgeneral.m4: Likewise. * autoconf/acspecific.m4: Likewise. * autoconf/aclocal.m4: Regenerate. * autoconf/acinclude.m4: Remove (while moving the macros...) * m4/gmp.m4: New file (...to here). * Makefile.devel: Update to new scheme. * configure.ac: Likewise. * include/cln/GV_integer.h: Assume template specializations work. * include/cln/GV_modinteger.h: Likewise. * include/cln/config.h.in: Likewise, and drop HAVE_BOOL. * src/base/cl_base_config.h.in: Drop support for obsolete ftime(3). * src/base/random/cl_random_from.cc: Likewise. * src/timing/cl_base_config.h.in: Likewise. * src/timing/cl_t_current.cc: Likewise.master
Richard Kreckel
21 years ago
23 changed files with 2071 additions and 16748 deletions
-
24ChangeLog
-
3FILES
-
28Makefile.devel
-
18NEWS
-
2651autoconf/acgeneral.m4
-
2632autoconf/aclocal.m4
-
2867autoconf/acspecific.m4
-
790autoconf/autoconf
-
27autoconf/autoconf.m4
-
8823autoconf/autoconf.m4f
-
352autoconf/config.guess
-
256autoconf/config.sub
-
244autoconf/ltmain.sh
-
19configure.ac
-
2include/cln/GV_integer.h
-
2include/cln/GV_modinteger.h
-
10include/cln/config.h.in
-
2include/cln/modules.h
-
18m4/gmp.m4
-
6src/base/cl_base_config.h.in
-
16src/base/random/cl_random_from.cc
-
6src/timing/cl_t_config.h.in
-
13src/timing/cl_t_current.cc
2651
autoconf/acgeneral.m4
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
2632
autoconf/aclocal.m4
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
2867
autoconf/acspecific.m4
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -1,790 +0,0 @@ |
|||||
#! /bin/sh |
|
||||
# -*- shell-script -*- |
|
||||
# autoconf -- create `configure' using m4 macros |
|
||||
# Copyright 1992, 1993, 1994, 1996, 1999, 2000, 2001 |
|
||||
# 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] |
|
||||
|
|
||||
Generate a configuration script from a TEMPLATE-FILE if given, or |
|
||||
\`configure.ac' if present, or else \`configure.in'. Output is sent |
|
||||
to the standard output if TEMPLATE-FILE is given, else into |
|
||||
\`configure'. |
|
||||
|
|
||||
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 |
|
||||
-o, --output=FILE save output in FILE (stdout is the default) |
|
||||
-W, --warnings=CATEGORY report the warnings falling in CATEGORY [syntax] |
|
||||
|
|
||||
Warning categories include: |
|
||||
\`cross' cross compilation issues |
|
||||
\`obsolete' obsolete constructs |
|
||||
\`syntax' dubious syntactic constructs |
|
||||
\`all' all the warnings |
|
||||
\`no-CATEGORY' turn off the warnings on CATEGORY |
|
||||
\`none' turn off all the warnings |
|
||||
\`error' warnings are error |
|
||||
|
|
||||
The environment variable \`WARNINGS' is honored. |
|
||||
|
|
||||
Library directories: |
|
||||
-A, --autoconf-dir=ACDIR Autoconf's macro files location (rarely needed) |
|
||||
-l, --localdir=DIR location of the \`aclocal.m4' file |
|
||||
|
|
||||
Tracing: |
|
||||
-t, --trace=MACRO report the list of calls to MACRO |
|
||||
-i, --initialization also trace Autoconf's initialization process |
|
||||
|
|
||||
In tracing mode, no configuration script is created. |
|
||||
|
|
||||
Report bugs to <bug-autoconf@gnu.org>." |
|
||||
|
|
||||
version="\ |
|
||||
autoconf (GNU Autoconf) 2.52 |
|
||||
Written by David J. MacKenzie. |
|
||||
|
|
||||
Copyright 1992, 1993, 1994, 1996, 1999, 2000, 2001 |
|
||||
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. |
|
||||
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_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi |
|
||||
if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi |
|
||||
|
|
||||
# ac_LF_and_DOT |
|
||||
# We use echo to avoid assuming a particular line-breaking character. |
|
||||
# The extra dot is to prevent the shell from consuming trailing |
|
||||
# line-breaks from the sub-command output. A line-break within |
|
||||
# single-quotes doesn't work because, if this script is created in a |
|
||||
# platform that uses two characters for line-breaks (e.g., DOS), tr |
|
||||
# would break. |
|
||||
ac_LF_and_DOT=`echo; echo .` |
|
||||
|
|
||||
# Find GNU m4. |
|
||||
# Handle the case that m4 has moved since we were configured. |
|
||||
# It may have been found originally in a build directory. |
|
||||
: ${M4=/usr/bin/m4} |
|
||||
case "$M4" in |
|
||||
[\\/]* | ?:[\\/]*) test -f "$M4" || M4=m4 ;; |
|
||||
esac |
|
||||
# Some non-GNU m4's don't reject the --help option, so give them /dev/null. |
|
||||
case `$M4 --help </dev/null 2>&1` in |
|
||||
*reload-state*);; |
|
||||
*) echo "$me: Autoconf requires GNU m4 1.4 or later" >&2; exit 1 ;; |
|
||||
esac |
|
||||
|
|
||||
# Set some high recursion limit as the default limit, 250, has already |
|
||||
# been hit with AC_OUTPUT. |
|
||||
case " $M4 " in |
|
||||
*" --nesting-limit"* | *" -L"* ) |
|
||||
# Don't override the user's choice |
|
||||
;; |
|
||||
*) M4="$M4 --nesting-limit=1024" |
|
||||
;; |
|
||||
esac |
|
||||
|
|
||||
|
|
||||
# Find a good AWK. |
|
||||
: ${AWK=gawk} |
|
||||
if echo xfoo | $AWK '/foo|^bar$/ { print }' | grep xfoo >/dev/null; then :; else |
|
||||
echo "$me: the regex engine of $AWK is too broken to be used" >&2 |
|
||||
echo "$me: you might want to install GNU AWK" >&2 |
|
||||
exit 1 |
|
||||
fi |
|
||||
|
|
||||
|
|
||||
# Variables. |
|
||||
: ${autoconf_dir=${AC_MACRODIR=/usr/share/autoconf}} |
|
||||
test -z "$AC_ACLOCALDIR" && |
|
||||
AC_ACLOCALDIR=`(aclocal --print-ac-dir) 2>/dev/null` |
|
||||
debug=false |
|
||||
# Trace Autoconf's initialization? |
|
||||
initialization=false |
|
||||
localdir=. |
|
||||
outfile= |
|
||||
# Exit status. |
|
||||
status=0 |
|
||||
# Tasks: |
|
||||
# - trace |
|
||||
# Trace the first arguments of some macros |
|
||||
# - script |
|
||||
# Produce the configure script (default) |
|
||||
task=script |
|
||||
tmp= |
|
||||
verbose=: |
|
||||
|
|
||||
# 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 ;; |
|
||||
|
|
||||
--debug | -d ) |
|
||||
debug=:; shift ;; |
|
||||
--verbose | -v ) |
|
||||
verbose=echo |
|
||||
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 ;; |
|
||||
|
|
||||
--trace=* | -t?* ) |
|
||||
task=trace |
|
||||
traces="$traces '"`echo "$optarg" | sed "s/'/'\\\\\\\\''/g"`"'" |
|
||||
shift ;; |
|
||||
--trace | -t ) |
|
||||
test $# = 1 && eval "$exit_missing_arg" |
|
||||
task=trace |
|
||||
shift |
|
||||
traces="$traces '"`echo "$1" | sed "s/'/'\\\\\\\\''/g"`"'" |
|
||||
shift ;; |
|
||||
--initialization | -i ) |
|
||||
initialization=: |
|
||||
shift;; |
|
||||
|
|
||||
--output=* | -o?* ) |
|
||||
outfile=$optarg |
|
||||
shift ;; |
|
||||
--output | -o ) |
|
||||
test $# = 1 && eval "$exit_missing_arg" |
|
||||
shift |
|
||||
outfile=$1 |
|
||||
shift ;; |
|
||||
|
|
||||
--warnings=* | -W?* ) |
|
||||
warnings=$warnings,$optarg |
|
||||
shift ;; |
|
||||
--warnings | -W ) |
|
||||
test $# = 1 && eval "$exit_missing_arg" |
|
||||
shift |
|
||||
warnings=$warnings,$1 |
|
||||
shift ;; |
|
||||
|
|
||||
-- ) # Stop option processing |
|
||||
shift; break ;; |
|
||||
- ) # Use stdin as input. |
|
||||
break ;; |
|
||||
-* ) |
|
||||
exec >&2 |
|
||||
echo "$me: invalid option $1" |
|
||||
echo "$help" |
|
||||
exit 1 ;; |
|
||||
* ) |
|
||||
break ;; |
|
||||
esac |
|
||||
done |
|
||||
|
|
||||
# The warnings are the concatenation of 1. application's defaults, |
|
||||
# 2. $WARNINGS, $3 command line options, in that order. |
|
||||
# Set them in the order expected by the M4 macros: the converse. |
|
||||
alphabet='abcdefghijklmnopqrstuvwxyz' |
|
||||
ALPHABET='ABCDEFGHIJKLMNOPQRSTUVWXYZ' |
|
||||
NUMBERS='0123456789' |
|
||||
WORDCHAR=_$alphabet$ALPHABET$NUMBERS |
|
||||
|
|
||||
m4_warnings= |
|
||||
for warning in `IFS=,; echo syntax $WARNINGS $warnings | |
|
||||
tr $ALPHABET $alphabet` |
|
||||
do |
|
||||
test -n $warning || continue |
|
||||
m4_warnings="$warning"`test -n "$m4_warnings" && echo ",$m4_warnings"` |
|
||||
done |
|
||||
|
|
||||
|
|
||||
# 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/acXXXXXX") 2>/dev/null` && |
|
||||
test -n "$tmp" && test -d "$tmp" |
|
||||
} || |
|
||||
{ |
|
||||
tmp=$TMPDIR/ac$$ |
|
||||
(umask 077 && mkdir $tmp) |
|
||||
} || |
|
||||
{ |
|
||||
echo "$me: cannot create a temporary directory in $TMPDIR" >&2 |
|
||||
(exit 1); exit 1; |
|
||||
} |
|
||||
|
|
||||
# Running m4. |
|
||||
test -f "$autoconf_dir/acsite.m4" && acsite_m4="$autoconf_dir/acsite.m4" |
|
||||
test -f "$localdir/aclocal.m4" && aclocal_m4="$localdir/aclocal.m4" |
|
||||
m4_common="-I $autoconf_dir -I $localdir -Dm4_tmpdir=$tmp" |
|
||||
m4_prefiles=" $autoconf_dir/autoconf.m4 $acsite_m4 $aclocal_m4" |
|
||||
m4f_prefiles="--reload-state=$autoconf_dir/autoconf.m4f $acsite_m4 $aclocal_m4" |
|
||||
run_m4="$M4 $m4_common" |
|
||||
|
|
||||
# Find the input file. |
|
||||
case $# in |
|
||||
0) |
|
||||
case `ls configure.ac configure.in 2>/dev/null` in |
|
||||
*ac*in ) |
|
||||
echo "$me: warning: both \`configure.ac' and \`configure.in' are present." >&2 |
|
||||
echo "$me: warning: proceeding with \`configure.ac'." >&2 |
|
||||
infile=configure.ac;; |
|
||||
*ac ) infile=configure.ac;; |
|
||||
*in ) infile=configure.in;; |
|
||||
* ) |
|
||||
echo "$me: no input file" >&2 |
|
||||
exit 1;; |
|
||||
esac |
|
||||
test $task = script && test -z "$outfile" && outfile=configure;; |
|
||||
1) infile=$1 ;; |
|
||||
*) exec >&2 |
|
||||
echo "$me: invalid number of arguments." |
|
||||
echo "$help" |
|
||||
(exit 1); exit 1 ;; |
|
||||
esac |
|
||||
|
|
||||
# Unless specified, the output is stdout. |
|
||||
test -z "$outfile" && outfile=- |
|
||||
|
|
||||
# We need an actual file. |
|
||||
if test z$infile = z-; then |
|
||||
infile=$tmp/stdin |
|
||||
cat >$infile |
|
||||
elif test ! -r "$infile"; then |
|
||||
echo "$me: $infile: No such file or directory" >&2 |
|
||||
(exit 1); exit 1 |
|
||||
fi |
|
||||
|
|
||||
# Output is produced into FD 4. Prepare it. |
|
||||
case $outfile in |
|
||||
-) # Output to stdout |
|
||||
exec 4>&1 ;; |
|
||||
* ) |
|
||||
exec 4>$outfile;; |
|
||||
esac |
|
||||
|
|
||||
# Initializations are performed. Proceed to the main task. |
|
||||
case $task in |
|
||||
|
|
||||
## --------------------------------- ## |
|
||||
## Generate the `configure' script. ## |
|
||||
## --------------------------------- ## |
|
||||
script) |
|
||||
# M4 expansion. |
|
||||
: >$tmp/forbidden.rx |
|
||||
: >$tmp/allowed.rx |
|
||||
$verbose "$me: running $run_m4 -Dm4_warnings=$m4_warnings $m4f_prefiles $infile" >&2 |
|
||||
$run_m4 -Dm4_warnings=$m4_warnings $m4f_prefiles $infile >$tmp/configure || |
|
||||
{ (exit 1); exit 1; } |
|
||||
|
|
||||
if test "x$outfile" != x-; then |
|
||||
chmod +x $outfile |
|
||||
fi |
|
||||
|
|
||||
# Put the real line numbers into configure to make config.log more |
|
||||
# helpful. Because quoting can sometimes get really painful in m4, |
|
||||
# there are special @tokens@ to substitute. |
|
||||
sed 's/^ //' >"$tmp/finalize.awk" <<EOF |
|
||||
# Load the list of tokens which escape the forbidden patterns. |
|
||||
BEGIN { |
|
||||
# Be sure the read GAWK documentation to understand the parens |
|
||||
# around \`tmp "/forbidden.rx"'. |
|
||||
while ((getline pattern < (tmp "/forbidden.rx")) > 0) |
|
||||
forbidden = (forbidden ? forbidden "|" : "") pattern |
|
||||
close (tmp "/forbidden.rx") |
|
||||
if (verbose) |
|
||||
errprint("$me: forbidden: " forbidden) |
|
||||
|
|
||||
while ((getline pattern < (tmp "/allowed.rx")) > 0) |
|
||||
allowed = (allowed ? allowed "|" : "") pattern |
|
||||
if (!allowed) |
|
||||
allowed = "^$" |
|
||||
close (tmp "/allowed.rx") |
|
||||
if (verbose) |
|
||||
errprint("$me: allowed: " allowed) |
|
||||
} |
|
||||
|
|
||||
function errprint (message) |
|
||||
{ |
|
||||
# BAD! the pipe to 'cat >&2' doesn't work for DJGPP. |
|
||||
# print message | "cat >&2" |
|
||||
# Use normal redirection instead: |
|
||||
print message > "$tmp/finalize.err" |
|
||||
} |
|
||||
|
|
||||
function undefined (file, line, macro) |
|
||||
{ |
|
||||
errprint(file ":" line ": error: possibly undefined macro: " macro) |
|
||||
} |
|
||||
|
|
||||
# Body. |
|
||||
{ |
|
||||
sub (/[ \t]*$/, "") |
|
||||
if (\$0 == "") |
|
||||
{ |
|
||||
if (!duplicate) |
|
||||
{ |
|
||||
oline++ |
|
||||
print |
|
||||
} |
|
||||
duplicate = 1 |
|
||||
next |
|
||||
} |
|
||||
duplicate = 0 |
|
||||
oline++ |
|
||||
if (\$0 ~ /__oline__/) |
|
||||
while (sub (/__oline__/, oline)) |
|
||||
continue |
|
||||
while (sub (/@<:@/, "[")) |
|
||||
continue |
|
||||
while (sub (/@:>@/, "]")) |
|
||||
continue |
|
||||
while (sub (/@S\|@/, "$")) |
|
||||
continue |
|
||||
while (sub (/@%:@/, "#")) |
|
||||
continue |
|
||||
|
|
||||
print |
|
||||
|
|
||||
# Dubious feature: we tolerate macro names when commented. |
|
||||
sub (/#.*/, "") |
|
||||
|
|
||||
# Get the tokens. |
|
||||
split (\$0, tokens, /[^$WORDCHAR]*/) |
|
||||
|
|
||||
for (token in tokens) |
|
||||
if (match (tokens[token], forbidden) && |
|
||||
!match (tokens[token], allowed)) |
|
||||
{ |
|
||||
macros [tokens [token]] = oline |
|
||||
some_macros_were_not_expanded = 1 |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
# If there are some macros which are left unexpanded in the output, |
|
||||
# try to find the input which is responsible. Otherwise, try to help. |
|
||||
END { |
|
||||
if (some_macros_were_not_expanded) |
|
||||
{ |
|
||||
line = 0 |
|
||||
while (getline < "$infile") |
|
||||
{ |
|
||||
line++ |
|
||||
for (macro in macros) |
|
||||
if (index (\$0, macro)) |
|
||||
{ |
|
||||
delete macros [macro] |
|
||||
undefined("$infile", line, macro) |
|
||||
} |
|
||||
} |
|
||||
close ("$infile") |
|
||||
for (macro in macros) |
|
||||
undefined("$outfile", macros [macro], macro) |
|
||||
exit 1 |
|
||||
} |
|
||||
} |
|
||||
EOF |
|
||||
$AWK -v tmp="$tmp" \ |
|
||||
`$verbose "-v verbose=1"` \ |
|
||||
-f "$tmp/finalize.awk" <$tmp/configure >&4 || |
|
||||
{ test -f "$tmp/finalize.err" && cat "$tmp/finalize.err" >&2 |
|
||||
(exit 1); exit 1; } |
|
||||
test -f "$tmp/finalize.err" && cat "$tmp/finalize.err" >&2 |
|
||||
;; # End of the task script. |
|
||||
|
|
||||
|
|
||||
|
|
||||
## -------------- ## |
|
||||
## Trace macros. ## |
|
||||
## -------------- ## |
|
||||
trace) |
|
||||
|
|
||||
# trace.m4 |
|
||||
# -------- |
|
||||
# Routines to process formatted m4 traces. |
|
||||
sed 's/^ //' >$tmp/trace.m4 <<\EOF |
|
||||
divert(-1) |
|
||||
changequote([, ]) |
|
||||
# _at_MODE(SEPARATOR, ELT1, ELT2...) |
|
||||
# ---------------------------------- |
|
||||
# List the elements, separating then with SEPARATOR. |
|
||||
# MODE can be: |
|
||||
# `at' -- the elements are enclosed in brackets. |
|
||||
# `star' -- the elements are listed as are. |
|
||||
# `percent' -- the elements are `flattened': spaces are singled out, |
|
||||
# and no new line remains. |
|
||||
define([_at_at], |
|
||||
[at_ifelse([$#], [1], [], |
|
||||
[$#], [2], [[[$2]]], |
|
||||
[[[$2]][$1]$0([$1], at_shift(at_shift($@)))])]) |
|
||||
define([_at_percent], |
|
||||
[at_ifelse([$#], [1], [], |
|
||||
[$#], [2], [at_flatten([$2])], |
|
||||
[at_flatten([$2])[$1]$0([$1], at_shift(at_shift($@)))])]) |
|
||||
define([_at_star], |
|
||||
[at_ifelse([$#], [1], [], |
|
||||
[$#], [2], [[$2]], |
|
||||
[[$2][$1]$0([$1], at_shift(at_shift($@)))])]) |
|
||||
|
|
||||
# FLATTEN quotes its result. |
|
||||
define([at_flatten], |
|
||||
[at_patsubst(at_patsubst(at_patsubst([[[$1]]], |
|
||||
[\\ |
|
||||
]), |
|
||||
[[ |
|
||||
]+], |
|
||||
[ ]), |
|
||||
[^ *\(.*\) *$], [[\1]])]) |
|
||||
|
|
||||
define([at_args], [at_shift(at_shift(at_shift(at_shift(at_shift($@)))))]) |
|
||||
define([at_at], [_$0([$1], at_args($@))]) |
|
||||
define([at_percent], [_$0([$1], at_args($@))]) |
|
||||
define([at_star], [_$0([$1], at_args($@))]) |
|
||||
|
|
||||
EOF |
|
||||
|
|
||||
# If you trace `define', then on `define([m4_exit], defn([m4exit])' you |
|
||||
# will produce |
|
||||
# |
|
||||
# AT_define([m4sugar.m4], [115], [1], [define], [m4_exit], <m4exit>) |
|
||||
# |
|
||||
# Since `<m4exit>' is not quoted, the outter m4, when processing |
|
||||
# `trace.m4' will exit prematurely. Hence, move all the builtins to |
|
||||
# the `at_' name space. |
|
||||
echo '# Copy the builtins.' >>$tmp/trace.m4 |
|
||||
echo "dumpdef" | |
|
||||
$M4 2>&1 >/dev/null | |
|
||||
sed 's/^\([^:]*\):.*/define([at_\1], defn([\1]))/' >>$tmp/trace.m4 |
|
||||
echo >>$tmp/trace.m4 |
|
||||
|
|
||||
echo '# Disable the builtins.' >>$tmp/trace.m4 |
|
||||
echo "dumpdef" | |
|
||||
$M4 2>&1 >/dev/null | |
|
||||
sed 's/^\([^:]*\):.*/at_undefine([\1])/' >>$tmp/trace.m4 |
|
||||
echo >>$tmp/trace.m4 |
|
||||
|
|
||||
|
|
||||
# trace2m4.sed |
|
||||
# ------------ |
|
||||
# Transform the traces from m4 into an m4 input file. |
|
||||
# Typically, transform: |
|
||||
# |
|
||||
# | m4trace:configure.ac:3: -1- AC_SUBST([exec_prefix], [NONE]) |
|
||||
# |
|
||||
# into |
|
||||
# |
|
||||
# | AT_AC_SUBST([configure.ac], [3], [1], [AC_SUBST], [exec_prefix], [NONE]) |
|
||||
# |
|
||||
# Pay attention that the file name might include colons, if under DOS |
|
||||
# for instance, so we don't use `[^:][^:]*'. |
|
||||
# The first s/// catches multiline traces, the second, traces as above. |
|
||||
preamble='m4trace:\(..*\):\([0-9][0-9]*\): -\([0-9][0-9]*\)-' |
|
||||
cat >$tmp/trace2m4.sed <<EOF |
|
||||
s/^$preamble \([^(][^(]*\)(\(.*\)$/AT_\4([\1], [\2], [\3], [\4], \5/ |
|
||||
s/^$preamble \(.*\)$/AT_\4([\1], [\2], [\3], [\4])/ |
|
||||
EOF |
|
||||
|
|
||||
# translate.awk |
|
||||
# ------------- |
|
||||
# Translate user tracing requests into m4 macros. |
|
||||
cat >$tmp/translate.awk <<\EOF |
|
||||
function trans (arg, sep) |
|
||||
{ |
|
||||
# File name. |
|
||||
if (arg == "f") |
|
||||
return "$1" |
|
||||
# Line number. |
|
||||
if (arg == "l") |
|
||||
return "$2" |
|
||||
# Depth. |
|
||||
if (arg == "d") |
|
||||
return "$3" |
|
||||
# Name (also available as $0). |
|
||||
if (arg == "n") |
|
||||
return "$4" |
|
||||
# Escaped dollar. |
|
||||
if (arg == "$") |
|
||||
return "$" |
|
||||
|
|
||||
# $@, list of quoted effective arguments. |
|
||||
if (arg == "@") |
|
||||
return "]at_at([" (separator ? separator : ",") "], $@)[" |
|
||||
# $*, list of unquoted effective arguments. |
|
||||
if (arg == "*") |
|
||||
return "]at_star([" (separator ? separator : ",") "], $@)[" |
|
||||
# $%, list of flattened unquoted effective arguments. |
|
||||
if (arg == "%") |
|
||||
return "]at_percent([" (separator ? separator : ":") "], $@)[" |
|
||||
} |
|
||||
|
|
||||
function error (message) |
|
||||
{ |
|
||||
print message | "cat >&2" |
|
||||
exit 1 |
|
||||
} |
|
||||
|
|
||||
{ |
|
||||
# Accumulate the whole input. |
|
||||
request = request $0 "\n" |
|
||||
} |
|
||||
|
|
||||
END { |
|
||||
# Chomp. |
|
||||
request = substr (request, 1, length (request) - 1) |
|
||||
# The default request is `$f:$l:$n:$*'. |
|
||||
colon = index (request, ":") |
|
||||
macro = colon ? substr (request, 1, colon - 1) : request |
|
||||
request = colon ? substr (request, colon + 1) : "$f:$l:$n:$%" |
|
||||
|
|
||||
res = "" |
|
||||
|
|
||||
for (cp = request; cp; cp = substr (cp, 2)) |
|
||||
{ |
|
||||
char = substr (cp, 1, 1) |
|
||||
if (char == "$") |
|
||||
{ |
|
||||
if (match (cp, /^\$[0-9]+/)) |
|
||||
{ |
|
||||
# $n -> $(n + 4) |
|
||||
res = res "$" (substr (cp, 2, RLENGTH - 1) + 4) |
|
||||
cp = substr (cp, RLENGTH) |
|
||||
} |
|
||||
else if (substr (cp, 2, 1) ~ /[fldn$@%*]/) |
|
||||
{ |
|
||||
# $x, no separator given. |
|
||||
res = res trans(substr (cp, 2, 1)) |
|
||||
cp = substr (cp, 2) |
|
||||
} |
|
||||
else if (substr (cp, 2, 1) == "{") |
|
||||
{ |
|
||||
# ${sep}x, long separator. |
|
||||
end = index (cp, "}") |
|
||||
if (!end) |
|
||||
error("invalid escape: " cp) |
|
||||
separator = substr (cp, 3, end - 3) |
|
||||
if (substr (cp, end + 1, 1) ~ /[*@%]/) |
|
||||
res = res trans(substr (cp, end + 1, 1), separator) |
|
||||
else |
|
||||
error("invalid escape: " cp) |
|
||||
cp = substr (cp, end + 1) |
|
||||
} |
|
||||
else if (substr (cp, 3, 1) ~ /[*@%]/) |
|
||||
{ |
|
||||
# $sx, short separator `s'. |
|
||||
res = res trans(substr (cp, 3, 1), substr (cp, 2, 1)) |
|
||||
cp = substr(cp, 3) |
|
||||
} |
|
||||
else |
|
||||
{ |
|
||||
error("invalid escape: " substr (cp, 1, 2)) |
|
||||
} |
|
||||
} |
|
||||
else |
|
||||
res = res char |
|
||||
} |
|
||||
|
|
||||
# Produce the definition of AT_<MACRO> = the translation of the request. |
|
||||
print "at_define([AT_" macro "]," |
|
||||
print "[[" res "]])" |
|
||||
print "" |
|
||||
close("cat >&2") |
|
||||
} |
|
||||
EOF |
|
||||
|
|
||||
|
|
||||
# Extract both the m4 program and the m4 options from TRACES. |
|
||||
echo "## ------------------------- ##" >>$tmp/trace.m4 |
|
||||
echo "## Trace processing macros. ##" >>$tmp/trace.m4 |
|
||||
echo "## ------------------------- ##" >>$tmp/trace.m4 |
|
||||
echo >>$tmp/trace.m4 |
|
||||
|
|
||||
eval set dummy "$traces" |
|
||||
shift |
|
||||
for trace |
|
||||
do |
|
||||
echo "# $trace" >>$tmp/trace.m4 |
|
||||
|
|
||||
# The request may be several lines long, hence sed has to quit. |
|
||||
macro_name=`echo "$trace" | sed 's/:.*//;q'` |
|
||||
# If for instance TRACE is `define', be sure to have an empty |
|
||||
# TRACE_FORMAT. |
|
||||
case $trace in |
|
||||
$macro_name:* ) |
|
||||
trace_format=`echo "$trace" | sed "1s/^$macro_name:/:/"`;; |
|
||||
* ) |
|
||||
trace_format=;; |
|
||||
esac |
|
||||
|
|
||||
# GNU M4 1.4's tracing of builtins is buggy. When run on this input: |
|
||||
# |
|
||||
# | divert(-1) |
|
||||
# | changequote([, ]) |
|
||||
# | define([m4_eval], defn([eval])) |
|
||||
# | eval(1) |
|
||||
# | m4_eval(2) |
|
||||
# | undefine([eval]) |
|
||||
# | m4_eval(3) |
|
||||
# |
|
||||
# it behaves this way: |
|
||||
# |
|
||||
# | % m4 input.m4 -da -t eval |
|
||||
# | m4trace: -1- eval(1) |
|
||||
# | m4trace: -1- m4_eval(2) |
|
||||
# | m4trace: -1- m4_eval(3) |
|
||||
# | % |
|
||||
# |
|
||||
# Conversely: |
|
||||
# |
|
||||
# | % m4 input.m4 -da -t m4_eval |
|
||||
# | % |
|
||||
# |
|
||||
# So we will merge them, i.e. tracing `BUILTIN' or tracing |
|
||||
# `m4_BUILTIN' will be the same: tracing both, but honoring the |
|
||||
# *last* trace specification. |
|
||||
# FIXME: This is not enough: in the output `$0' will be `BUILTIN' |
|
||||
# sometimes and `m4_BUILTIN' at others. We should render a unique name, |
|
||||
# the one specified by the user. |
|
||||
base_name=`echo "$macro_name" | sed 's/^m4_//'` |
|
||||
if echo "ifdef(\`$base_name', \`', \`m4exit(-1)')" | $M4; then |
|
||||
# BASE_NAME is a builtin. |
|
||||
trace_opt="$trace_opt -t $base_name -t m4_$base_name" |
|
||||
echo "$base_name$trace_format" | |
|
||||
$AWK -f $tmp/translate.awk >>$tmp/trace.m4 || |
|
||||
{ (exit 1); exit 1; } |
|
||||
echo "m4_$base_name$trace_format" | |
|
||||
$AWK -f $tmp/translate.awk >>$tmp/trace.m4 || |
|
||||
{ (exit 1); exit 1; } |
|
||||
else |
|
||||
# MACRO_NAME is not a builtin. |
|
||||
trace_opt="$trace_opt -t $macro_name" |
|
||||
echo "$trace" | |
|
||||
$AWK -f $tmp/translate.awk >>$tmp/trace.m4 || |
|
||||
{ (exit 1); exit 1; } |
|
||||
fi |
|
||||
echo >>$tmp/trace.m4 |
|
||||
done |
|
||||
|
|
||||
echo "## ------------------- ##" >>$tmp/trace.m4 |
|
||||
echo "## Traces to process. ##" >>$tmp/trace.m4 |
|
||||
echo "## ------------------- ##" >>$tmp/trace.m4 |
|
||||
echo >>$tmp/trace.m4 |
|
||||
echo "at_divert(0)at_dnl" >>$tmp/trace.m4 |
|
||||
|
|
||||
# Do we trace the initialization? |
|
||||
# `errprint' must be silent, otherwise there can be warnings mixed |
|
||||
# with traces in m4's stderr. |
|
||||
run_m4_trace="$run_m4 $trace_opt -daflq -Derrprint" |
|
||||
if $initialization; then |
|
||||
trace_prefiles="$m4_prefiles" |
|
||||
else |
|
||||
trace_prefiles="$m4f_prefiles" |
|
||||
fi |
|
||||
|
|
||||
# Run m4 on the input file to get traces. |
|
||||
# |
|
||||
# We used to have a simple pipe, which was very convenient as it |
|
||||
# allows to use traces on never ending expansions (i.e., when |
|
||||
# debugging :) but it is requires to keep error messages *and* |
|
||||
# traces in stderr. This is too fragile, as it results in |
|
||||
# unexpected data in the output. autoheader has been fragile to |
|
||||
# this. |
|
||||
$verbose "$me: running $run_m4_trace $trace_prefiles $infile -o $tmp/traces" >&2 |
|
||||
$run_m4_trace $trace_prefiles $infile -o $tmp/traces >/dev/null || |
|
||||
{ |
|
||||
echo "$me: tracing failed" >&2 |
|
||||
(exit 1); exit 1 |
|
||||
} |
|
||||
|
|
||||
$verbose "$me: running $M4 $tmp/trace.m4" >&2 |
|
||||
sed -f $tmp/trace2m4.sed $tmp/traces | |
|
||||
# Now we are ready to run m4 to process the trace file. |
|
||||
if $debug; then |
|
||||
cat >>$tmp/trace.m4 |
|
||||
$M4 $tmp/trace.m4 |
|
||||
else |
|
||||
$M4 $tmp/trace.m4 - |
|
||||
fi | |
|
||||
# It makes no sense to try to transform __oline__. |
|
||||
sed ' |
|
||||
s/@<:@/[/g |
|
||||
s/@:>@/]/g |
|
||||
s/@S|@/$/g |
|
||||
s/@%:@/#/g |
|
||||
' >&4 || |
|
||||
{ |
|
||||
echo "$me: traces formatting failed" >&2 |
|
||||
(exit 1); exit 1 |
|
||||
} |
|
||||
;; |
|
||||
|
|
||||
|
|
||||
## ------------ ## |
|
||||
## Unknown task ## |
|
||||
## ------------ ## |
|
||||
|
|
||||
*) echo "$me: internal error: unknown task: $task" >&2 |
|
||||
(exit 1); exit 1 |
|
||||
esac |
|
||||
|
|
||||
(exit $status); exit $status |
|
@ -1,27 +0,0 @@ |
|||||
dnl Driver that loads the Autoconf macro files. |
|
||||
dnl Requires GNU m4. |
|
||||
dnl This file is part of Autoconf. |
|
||||
dnl Copyright (C) 1994 Free Software Foundation, Inc. |
|
||||
dnl |
|
||||
dnl This program is free software; you can redistribute it and/or modify |
|
||||
dnl it under the terms of the GNU General Public License as published by |
|
||||
dnl the Free Software Foundation; either version 2, or (at your option) |
|
||||
dnl any later version. |
|
||||
dnl |
|
||||
dnl This program is distributed in the hope that it will be useful, |
|
||||
dnl but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
||||
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
||||
dnl GNU General Public License for more details. |
|
||||
dnl |
|
||||
dnl You should have received a copy of the GNU General Public License |
|
||||
dnl along with this program; if not, write to the Free Software |
|
||||
dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA |
|
||||
dnl 02111-1307, USA. |
|
||||
dnl |
|
||||
dnl Written by David MacKenzie. |
|
||||
dnl |
|
||||
include(acgeneral.m4)dnl |
|
||||
builtin(include, acspecific.m4)dnl |
|
||||
dnl Do not sinclude acsite.m4 here, because it may not be installed |
|
||||
dnl yet when Autoconf is frozen. |
|
||||
dnl Do not sinclude ./aclocal.m4 here, to prevent it from being frozen. |
|
8823
autoconf/autoconf.m4f
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
Write
Preview
Loading…
Cancel
Save
Reference in new issue