autoconf/tests/torture.m4

120 lines
3.6 KiB
Plaintext
Raw Normal View History

# -*- 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.
## 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_DATA(dummy.in,
[m4_for(AT_Count, 1, 100,
[@AT_DUMMY_VAR(AT_Count)@
])])
AT_TEST_MACRO(config.status under extreme conditions,
[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)
])],
[# 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
])])
])
dnl Remove test files.
rm -f dummy dummy.in
dnl ## ------------------------------------------------------ ##
dnl ## Check that `configure' and `config.status' honor their ##
dnl ## interface. ##
dnl ## ------------------------------------------------------ ##
dnl We run `./configure result=val' and verify that (i) `configure'
dnl correctly receives `val' and (ii) correctly passes it to
dnl `config.status', which we check by running `config.status
dnl --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)