autoconf/tests/torture.m4
Akim Demaille 98c9da45a3 Fix the `missing dummy.in' reported by the test suite.
Reported by Erez Zadok.

* tests/torture.m4 (config.status under extreme conditions):
Reorganized.  Because files required by this test were created
outside the pair AT_SETUP/AT_CLEANUP, when the test fails and
autotest extracts this test, the `debug' script does not contain
the files it needs.  Now AT_SETUP/AT_CLEANUP encloses the full
auto contained section.
2000-02-17 09:31:34 +00:00

214 lines
5.6 KiB
Plaintext

# -*- autoconf -*-
cat <<\EOF
Torturing config.status.
## ---------------------------------------------------------------- ##
## This section of tests is trying to make Autoconf produce failing ##
## `configure' scripts, which must not happen. If these tests ever ##
## fail, it is extremely important that you report the failure to ##
## bug-autoconf@gnu.org. ##
## ---------------------------------------------------------------- ##
EOF
dnl The value used as a big value for AC_DEFINE.
dnl Don't use sh active chars here, below it is also used in a sh
dnl assignment.
define(Big_Value,
[This value should be long enough to torture the various limits of sed and other tools used by Autoconf.])
define(DEFINE_Description,
[Define to a long string if your `Autoconf' works properly.])
# AT_DUMMY_VAR(NUMBER)
# --------------------
# Build a name used for AC_SUBST and AC_DEFINE. Put ac_ in it
# so that the check for user name space invasion does not complain
# of the new variables defined.
#
# Note that you should not use the name ac_dummy, because it will be
# turned into ac_uummy during the construction of config.status. Yes,
# this is admittedly a bug, but it would be too hard to fix this.
# There is really no point in AC_DEFINE a var named ac_d.*.
define(AT_DUMMY_VAR,
[ac_Dummy_[]patsubst([000$1], [.*\(...\)$], [\1])])
dnl This call was quite delicate to write because we didn't want to
dnl produce the 100 commands by hand. Be very careful if you want to
dnl touch something.
## ------------------------- ##
## Torturing config.status. ##
## ------------------------- ##
## Require 100 AC_DEFINE and AC_SUBST with a significantly big value.
## This is mostly to check that Autoconf produces portable sed scripts
## in config.status. sed is used to skip the first two lines
## `Generated by...'.
AT_SETUP(config.status under extreme conditions)
AT_DATA(dummy.in,
[m4_for(AT_Count, 1, 100,
[@AT_DUMMY_VAR(AT_Count)@
])])
AT_DATA(configure.in,
[AC_INCLUDE(actest.m4)
AC_INIT
AC_CONFIG_HEADERS(config.h:config.hin)
AC_CONFIG_FILES(dummy)
[define]([AC_DEFUBST_VALUE], Big_Value)
dnl The following 4 lines are a transfert from AT_DUMMY_VAR in Autotest
dnl to AC_DUMMY_VAR in Autoconf.
[define]([AC_DUMMY_VAR],
changequote({{, }})dnl
[defn({{AT_DUMMY_VAR}})]dnl
changequote([, ]))
m4_for(AT_Count, 1, 100,
[AC_DEFUBST(AT_Count)
])
AC_OUTPUT
])
AT_CHECK([../autoconf -m .. -l $at_srcdir], 0,, ignore)
AT_CHECK([../autoheader -m .. -l $at_srcdir], 0,, ignore)
AT_CHECK([./configure], 0, ignore)
# Checking that AC_DEFINE worked properly.
AT_DATA(expout,
[m4_for(AT_Count, 1, 100,
[
/* DEFINE_Description */
[#define] AT_DUMMY_VAR(AT_Count) "Big_Value"
])])
AT_CHECK([sed -n -e '3,$ p' config.h], 0, expout)
# Checking that AC_SUBST worked properly.
AT_DATA(expout,
[m4_for(AT_Count, 1, 100,
[Big_Value
])])
AT_CLEANUP(dummy)
## ------------------------------------------------------ ##
## Check that `configure' and `config.status' honor their ##
## interface. ##
## ------------------------------------------------------ ##
# We run `./configure result=val' and verify that (i) `configure'
# correctly receives `val' and (ii) correctly passes it to
# `config.status', which we check by running `config.status --recheck'
# (which *must* preserve the value of `result').
AT_SETUP(command line interface)
AT_DATA(configure.in,
[[AC_INIT
echo "result=$result"
AC_OUTPUT
]])
AT_CHECK([../autoconf -m .. -l $at_srcdir], 0,, ignore)
AT_CHECK([./configure result=result | sed -n -e 's/^result=//p'], 0,
[result
], ignore)
AT_CHECK([./config.status --recheck | sed -n -e 's/^result=//p'], 0,
[result
], ignore)
AT_CHECK([./configure result="\"'$" | sed -n -e 's/^result=//p'], 0,
["'$
], ignore)
AT_CHECK([./config.status --recheck | sed -n -e 's/^result=//p'], 0,
["'$
], ignore)
AT_CLEANUP(configure config.status config.log config.cache)
## -------------------------------------------- ##
## Check that `#define' templates are honored. ##
## -------------------------------------------- ##
# Use various forms of `#define' templates, and make sure there are no
# problems when a symbol is prefix of another.
AT_SETUP([#define header templates])
AT_DATA(configure.in,
[[AC_INIT
AC_CONFIG_HEADERS(config.h:config.hin)
# I18n of dummy variables: their French translations.
AC_DEFINE(foo, toto)
AC_DEFINE(bar, tata)
AC_DEFINE(baz, titi)
AC_DEFINE(fubar, tutu)
# Symbols which are prefixes of another.
AC_DEFINE(a, A)
AC_DEFINE(aaa, AAA)
AC_DEFINE(aa, AA)
AC_CONFIG_FILES(defs)
# In addition of config.h output a full DEFS
AC_OUTPUT_MAKE_DEFS
DEFS_SAVED=$DEFS
AC_SUBST(DEFS_SAVED)
AC_OUTPUT
]])
AT_DATA(defs.in,
[[@DEFS_SAVED@
]])
AT_DATA(config.hin,
[[#define foo 0
# define bar bar
# define baz "Archimedes was sinking in his baz"
# define fubar tutu
#define a B
#define aa BB
#define aaa BBB
#undef a
#undef aa
#undef aaa
]])
AT_CHECK([../autoconf -m .. -l $at_srcdir], 0)
AT_CHECK([./configure], 0, ignore)
AT_DATA(expout,
[[/* config.h. Generated automatically by configure. */
#define foo toto
# define bar tata
# define baz titi
# define fubar tutu
#define a A
#define aa AA
#define aaa AAA
#define a A
#define aa AA
#define aaa AAA
]])
AT_CHECK([cat config.h], 0, expout)
# Check the value of DEFS. Note the leading space.
AT_DATA(expout,
[[ -Dfoo=toto -Dbar=tata -Dbaz=titi -Dfubar=tutu -Da=A -Daaa=AAA -Daa=AA]
])
# Because we strip trailing spaces in `testsuite' we can't leave one in
# expout, hence nuke the one left by AC_OUTPUT_MAKE_DEFS.
AT_CHECK([sed -e 's/ $//' defs], 0, expout)
AT_CLEANUP(configure config.status config.log config.cache config.h defs)