# -*- 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)