#							-*- Autotest -*-

AT_BANNER([Autoconf base layer.])

# Copyright (C) 2000-2001, 2003, 2005-2017, 2020-2024 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 3 of the License, 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, see <https://www.gnu.org/licenses/>.


## ------------------------------- ##
## AC_REQUIRE: topological sort..  ##
## ------------------------------- ##

# Check that dependencies are always properly honored.

AT_SETUP([AC_REQUIRE: topological sort])
AT_KEYWORDS([m4@&t@_require])

AT_DATA([configure.ac],
[[define([REQUIRE_AND_CHECK],
[AC_REQUIRE([$1])
test -z "$m4@&t@_translit([$1], [A-Z], [a-z])" && AS_EXIT(1)])

AC_DEFUN([TEST1],
[REQUIRE_AND_CHECK([TEST2a])
REQUIRE_AND_CHECK([TEST2b])
test1=set])

AC_DEFUN([TEST2a],
[test2a=set])

AC_DEFUN([TEST2b],
[REQUIRE_AND_CHECK([TEST3])
test2b=set])

AC_DEFUN([TEST3],
[REQUIRE_AND_CHECK([TEST2a])
test3=set])

AS@&t@_INIT

TEST1
test -z "$test1" &&
  AC_MSG_ERROR([\$test1 is empty])
AS_EXIT(0)
]])

AT_CHECK_AUTOCONF([], [0], [],
[[trailer.m4: warning: AC_INIT was never used
trailer.m4: warning: AC_OUTPUT was never used
]])
AT_CHECK_CONFIGURE

AT_CLEANUP


## --------------------------- ##
## AC_REQUIRE: error message.  ##
## --------------------------- ##

# Check that the message mentions AC_DEFUN, not m4_defun.

AT_SETUP([AC_REQUIRE: error message])
AT_KEYWORDS([m4@&t@_require])
AT_DATA([configure.ac],
[[AC_REQUIRE([AC_PROG_CC])
]])

AT_CHECK_AUTOCONF([], [1], [],
[[configure.ac:1: error: AC_REQUIRE(AC_PROG_CC): cannot be used outside of an AC_DEFUN'd macro
configure.ac:1: the top level
autom4te: error: m4 failed with exit status: 1
]])
AT_CLEANUP


## ----------------------------------------------- ##
## AC_REQUIRE and AC_DEFUN_ONCE: Require, expand.  ##
## ----------------------------------------------- ##

AT_SETUP([AC_REQUIRE & AC_DEFUN_ONCE: [Require, expand]])
AT_KEYWORDS([m4@&t@_require m4@&t@_require_once])

AT_DATA([configure.ac],
[[AC_DEFUN([TEST],
[AC_REQUIRE([MULTI_TEST])
AC_REQUIRE([SINGLE_TEST])])

AC_DEFUN([MULTI_TEST],
[multi_test=".$multi_test"])

AC_DEFUN_ONCE([SINGLE_TEST],
[single_test=".$single_test"])

AS@&t@_INIT

TEST
TEST
MULTI_TEST
MULTI_TEST
SINGLE_TEST
SINGLE_TEST

case $multi_test:$single_test in
  ...:. ) AS_EXIT(0);;
  ...:* ) AC_MSG_ERROR([DEFUN_ONCE is broken]);;
  *:.   ) AC_MSG_ERROR([DEFUN is broken (Wow, congrats!)]);;
esac
]])

AT_CHECK_AUTOCONF([], 0, [],
[[trailer.m4: warning: AC_INIT was never used
trailer.m4: warning: AC_OUTPUT was never used
]])

AT_CHECK_CONFIGURE

AT_CLEANUP



## ----------------------------------------------- ##
## AC_REQUIRE and AC_DEFUN_ONCE: Expand, require.  ##
## ----------------------------------------------- ##

AT_SETUP([AC_REQUIRE & AC_DEFUN_ONCE: [Expand, require]])
AT_KEYWORDS([m4@&t@_require m4@&t@_require_once])

AT_DATA([configure.ac],
[[AC_DEFUN([TEST],
[AC_REQUIRE([MULTI_TEST])
AC_REQUIRE([SINGLE_TEST])])

AC_DEFUN([MULTI_TEST],
[multi_test=".$multi_test"])

AC_DEFUN_ONCE([SINGLE_TEST],
[single_test=".$single_test"])

AS@&t@_INIT

MULTI_TEST
MULTI_TEST
SINGLE_TEST
SINGLE_TEST
TEST
TEST

case $multi_test:$single_test in
  ..:. ) AS_EXIT(0);;
  ..:* ) AC_MSG_ERROR([DEFUN_ONCE is broken]);;
  *:.  ) AC_MSG_ERROR([DEFUN is broken (Wow, congrats!)]);;
     * ) AC_MSG_ERROR([received '$multi_test:$single_test']);;
esac
]])

AT_CHECK_AUTOCONF([], 0, [],
[[trailer.m4: warning: AC_INIT was never used
trailer.m4: warning: AC_OUTPUT was never used
]])
AT_CHECK_CONFIGURE

AT_CLEANUP



## ------------------------- ##
## AC_REQUIRE & AC_PROVIDE.  ##
## ------------------------- ##

AT_SETUP([AC_REQUIRE & AC_PROVIDE])
AT_KEYWORDS([m4@&t@_require])

AT_DATA([configure.ac],
[[AC_DEFUN([TEST],
[AC_REQUIRE([INNER_TEST])])

AC_DEFUN([INNER_TEST],
[inner_test=".$inner_test"])

AS@&t@_INIT

AC_PROVIDE([INNER_TEST])
TEST

case $inner_test in
  "" ) AS_EXIT(0);;
  *  ) AC_MSG_ERROR([received '$inner_test']);;
esac
]])

AT_CHECK_AUTOCONF([], 0, [],
[[trailer.m4: warning: AC_INIT was never used
trailer.m4: warning: AC_OUTPUT was never used
]])
AT_CHECK_CONFIGURE

AT_CLEANUP


## -------- ##
## AC_INIT. ##
## -------- ##

# Make sure AC_INIT sets PACKAGE_TARNAME properly.

AT_SETUP([AC_INIT])

AT_DATA([configure.ac],
[[AC_INIT([GNU fu], [1.0], [bug-fu@gnu.org])
AC_OUTPUT
]])

AT_CHECK_AUTOCONF
AT_CHECK_CONFIGURE([-q])

# Ensure we get the expected definition:
AT_CHECK([grep "^PACKAGE_TARNAME='fu'\$" configure], [], [ignore])

AT_CLEANUP

## ------------------------------- ##
## AC_INIT (obsolete invocation).  ##
## ------------------------------- ##

# When AC_INIT is called with only one argument, it is equivalent to
# passing that argument to AC_CONFIG_SRCDIR and then calling AC_INIT
# with _no_ arguments.  In particular, PACKAGE should _not_ be set
# to whatever the first argument is.

AT_SETUP([AC_INIT (obsolete invocation)])

AT_DATA([configure.ac],
[[AC_INIT([program.c])
AC_OUTPUT
]])

AT_CHECK_AUTOCONF

# Ensure we get the expected definition:
AT_CHECK([grep "^PACKAGE_NAME=''\$" configure], [], [ignore])

# Running autoconf right now should fail because program.c doesn't exist.
AT_CHECK_CONFIGURE([], [1], [],
[[configure: error: cannot find sources (program.c) in . or ..
]])

# Create program.c and then it should be fine.
AT_DATA([program.c])
AT_CHECK_CONFIGURE

AT_CLEANUP


## ------------------------------------- ##
## AC_INIT with unusual version strings. ##
## ------------------------------------- ##

AT_SETUP([AC_INIT with unusual version strings])

if echo 'ab*c' | grep -F 'ab*c' >/dev/null 2>&1; then
  FGREP="grep -F"
else
  FGREP=fgrep
fi

# In both of the arguments that might contain URLs, make sure we test
# all of the unusual ASCII characters that commonly appear in URLs.
#
# The RFC 3986 "unreserved" characters are ASCII letters and digits, plus
#    - . _ ~
# The RFC 3986 "gen-delims" and "sub-delims" are
#    / : ? # [ ] @ ! $ & ' ( ) * + , ; =
# The URL escape character is
#    %
#
# Any argument that contains characters significant to M4,
#    [ ] ( ) ,
# may need to be double-quoted depending on exactly how they are used
# (as would an argument that contains a macro name, but we don't test
# that here).
#
# Characters that are still significant for Bourne shell within a
# single-quoted string, double-quoted string, quoted here-doc, or
# unquoted here-doc are explicitly not allowed:
#    ' " ` \ $
#
# We don't test unbalanced parentheses or brackets here.

AT_DATA([configure.ac],
[[AC_INIT([GNU String++ with  spaces
           (foo)],
	  [2.48++  (2010-07-03)],
          [[https://example/~bug/cdfijknoqrvw/-._:@!()[]*+,;/?y=z#1234567890]],
          [string++],
          [[HTTPS://EXAMPLE/~PKG/BCDFIJNOQRUVW/-._:@!()[]*+,;/?y=z#1234567890]])
AC_OUTPUT
]])

AT_CHECK_AUTOCONF([-Werror])
AT_CHECK_CONFIGURE([-q])

AT_CHECK_CONFIGURE([--help], [], [stdout])
AT_CHECK([[$FGREP \
  'https://example/~bug/cdfijknoqrvw/-._:@!()[]*+,;/?y=z#1234567890' \
  stdout]], [], [ignore])
AT_CHECK([[$FGREP \
  'HTTPS://EXAMPLE/~PKG/BCDFIJNOQRUVW/-._:@!()[]*+,;/?y=z#1234567890' \
  stdout]], [], [ignore])

AT_CHECK_CONFIGURE([--version], [], [stdout])
AT_CHECK([$FGREP 'GNU String++ with spaces (foo)' stdout], [], [ignore])
AT_CHECK([$FGREP '2.48++ (2010-07-03)' stdout], [], [ignore])

AT_CHECK([./config.status --help], [], [stdout])
AT_CHECK([[$FGREP \
  'https://example/~bug/cdfijknoqrvw/-._:@!()[]*+,;/?y=z#1234567890' \
  stdout]], [], [ignore])
AT_CHECK([[$FGREP \
  'HTTPS://EXAMPLE/~PKG/BCDFIJNOQRUVW/-._:@!()[]*+,;/?y=z#1234567890' \
  stdout]], [], [ignore])

AT_CHECK([./config.status --version], [], [stdout])
AT_CHECK([$FGREP 'GNU String++ with spaces (foo)' stdout], [], [ignore])
AT_CHECK([$FGREP '2.48++ (2010-07-03)' stdout], [], [ignore])

# Repeat the above test using all the unusual characters that might appear
# in a list of email addresses in both BUG-REPORT and URL.  (URL isn't
# supposed to contain email addresses, but there's no good reason to
# restrict its syntax.)
# The RFC 5822 "atext" characters are ASCII letters and digits, plus
#    ! # $ % & ' * + - / = ? ^ _ ` { | } ~
# The RFC 5822 "special" characters, all of which might appear somewhere
# in an address list, are
#    ( ) < > [ ] : ; @ \ , . "
# As above, characters that are significant for Bourne shell within
# strings and heredocs are explicitly not allowed:
#    ' " ` \ $
# As above, any argument that contains characters significant to M4,
#    [ ] ( ) ,
# may need to be double-quoted depending on exactly how they are used
# (as would an argument that contains a macro name, but we don't test
# that here).

AT_DATA([configure.ac],
[[AC_INIT([GNU String++ with  spaces
           (foo)],
	  [2.48++  (2010-07-03)],
          [[bugs: fred <A=B?C^D_E@F>,
                  G!H!I#J@K.L (wilma),
                  M%N&O@[156.247.38.49],
                  P*Q+R-S/T@U,
                  {jon|chyp~}@kqtvxz.VWXYZ;]],
          [string++],
          [[contact: jem <A=B?C^D_E@bd>,
                     F!G!H#I@fv.J (lugh),
                     K%L&M@[156.247.38.49],
                     N*O+P-Q/R@STU,
                     {qik|~prys}@wxz.VWXYZ;]])
AC_OUTPUT
]])

AT_CHECK_AUTOCONF([-Werror])
AT_CHECK_CONFIGURE([-q])

AT_CHECK_CONFIGURE([--help], [], [stdout])
AT_CHECK([[$FGREP \
  'bugs: fred <A=B?C^D_E@F>, G!H!I#J@K.L (wilma), M%N&O@[156.247.38.49], P*Q+R-S/T@U, {jon|chyp~}@kqtvxz.VWXYZ;' \
  stdout]], [], [ignore])
AT_CHECK([[$FGREP \
  'contact: jem <A=B?C^D_E@bd>, F!G!H#I@fv.J (lugh), K%L&M@[156.247.38.49], N*O+P-Q/R@STU, {qik|~prys}@wxz.VWXYZ;' \
  stdout]], [], [ignore])

AT_CHECK_CONFIGURE([--version], [], [stdout])
AT_CHECK([$FGREP 'GNU String++ with spaces (foo)' stdout], [], [ignore])
AT_CHECK([$FGREP '2.48++ (2010-07-03)' stdout], [], [ignore])

AT_CHECK([./config.status --help], [], [stdout])
AT_CHECK([[$FGREP \
  'bugs: fred <A=B?C^D_E@F>, G!H!I#J@K.L (wilma), M%N&O@[156.247.38.49], P*Q+R-S/T@U, {jon|chyp~}@kqtvxz.VWXYZ;' \
  stdout]], [], [ignore])
AT_CHECK([[$FGREP \
  'contact: jem <A=B?C^D_E@bd>, F!G!H#I@fv.J (lugh), K%L&M@[156.247.38.49], N*O+P-Q/R@STU, {qik|~prys}@wxz.VWXYZ;' \
  stdout]], [], [ignore])

AT_CHECK([./config.status --version], [], [stdout])
AT_CHECK([$FGREP 'GNU String++ with spaces (foo)' stdout], [], [ignore])
AT_CHECK([$FGREP '2.48++ (2010-07-03)' stdout], [], [ignore])

# Check for invalid characters in each argument.
AT_DATA([configure.ac],
[[AC_INIT([GNU "String++"],
	  [2.48], [https://example.com/], [string++])
AC_OUTPUT
]])

AT_CHECK_AUTOCONF([-Werror], [1], [ignore], [stderr])
AT_CHECK([grep 'AC_INIT: not a literal: ' stderr], [], [ignore])

AT_DATA([configure.ac],
[[AC_INIT([GNU String++],
	  ['codename' 2.48], [https://example.com/], [string++])
AC_OUTPUT
]])

AT_CHECK_AUTOCONF([-Werror], [1], [ignore], [stderr])
AT_CHECK([grep 'AC_INIT: not a literal: ' stderr], [], [ignore])

AT_DATA([configure.ac],
[[AC_INIT([GNU
String++], [2.48], [https://example.com/], [string++])
AC_OUTPUT
]])

AT_CHECK_AUTOCONF([-Werror])

AT_DATA([configure.ac],
[[AC_INIT([GNU String++], ['2.48'], [https://example.com], [string++])
AC_OUTPUT
]])

AT_CHECK_AUTOCONF([-Werror], [1], [ignore], [stderr])
AT_CHECK([grep 'AC_INIT: not a literal: ' stderr], [], [ignore])

AT_DATA([configure.ac],
[[AC_INIT([GNU String++], [2.48], ['https://example.com'], [string++])
AC_OUTPUT
]])

AT_CHECK_AUTOCONF([-Werror], [1], [ignore], [stderr])
AT_CHECK([grep 'AC_INIT: not a literal: ' stderr], [], [ignore])

AT_DATA([configure.ac],
[[AC_INIT([GNU String++], [2.48], [https://example.com], [string++],
          ['https://example.com'])
AC_OUTPUT
]])

AT_CHECK_AUTOCONF([-Werror], [1], [ignore], [stderr])
AT_CHECK([grep 'AC_INIT: not a literal: ' stderr], [], [ignore])


# The TARNAME argument is used to construct filenames, so it's even
# more constrained.

AT_DATA([configure.ac],
[[AC_INIT([GNU String++], [2.48], [https://example.com], ['string++'])
AC_OUTPUT
]])

AT_CHECK_AUTOCONF([-Werror], [1], [ignore], [stderr])
AT_CHECK([grep 'AC_INIT: unsafe as a filename: ' stderr], [], [ignore])

AT_DATA([configure.ac],
[[AC_INIT([GNU String++], [2.48], [https://example.com], [string ++])
AC_OUTPUT
]])

AT_CHECK_AUTOCONF([-Werror], [1], [ignore], [stderr])
AT_CHECK([grep 'AC_INIT: unsafe as a filename: ' stderr], [], [ignore])

AT_DATA([configure.ac],
[[AC_INIT([GNU String++], [2.48], [https://example.com], [string*])
AC_OUTPUT
]])

AT_CHECK_AUTOCONF([-Werror], [1], [ignore], [stderr])
AT_CHECK([grep 'AC_INIT: unsafe as a filename: ' stderr], [], [ignore])

# Commas and unbalanced close parentheses are especially troublesome for M4.
# They are only expected to work when double-quoted, but even then they can
# cause malfunctions if not handled carefully within Autoconf.

AT_DATA([configure.ac],
[[AC_INIT([[GNU, String]], [2.48], [bugs@gstring.example],
          [string], [https://gstring.example/])
AC_OUTPUT
]])
AT_CHECK_AUTOCONF

AT_DATA([configure.ac],
[[AC_INIT([[GNU String)]], [2.48], [bugs@gstring.example],
          [string], [https://gstring.example/])
AC_OUTPUT
]])
AT_CHECK_AUTOCONF

AT_DATA([configure.ac],
[[AC_INIT([GNU String], [[2,48]], [bugs@gstring.example],
          [string], [https://gstring.example/])
AC_OUTPUT
]])
AT_CHECK_AUTOCONF

AT_DATA([configure.ac],
[[AC_INIT([GNU String], [[2.48)]], [bugs@gstring.example],
          [string], [https://gstring.example/])
AC_OUTPUT
]])
AT_CHECK_AUTOCONF

AT_DATA([configure.ac],
[[AC_INIT([GNU String], [2.48], [[bugs@gstring.example,
                                 gstring-bugs@example.com]],
          [string], [https://gstring.example/])
AC_OUTPUT
]])
AT_CHECK_AUTOCONF

AT_DATA([configure.ac],
[[AC_INIT([GNU String], [2.48], [[bugs)@gstring.example]],
          [string], [https://gstring.example/])
AC_OUTPUT
]])
AT_CHECK_AUTOCONF

AT_DATA([configure.ac],
[[AC_INIT([GNU String], [2.48], [bugs@gstring.example],
          [[string,]], [https://gstring.example/])
AC_OUTPUT
]])
AT_CHECK_AUTOCONF

AT_DATA([configure.ac],
[[AC_INIT([GNU String], [2.48], [bugs@gstring.example],
          [[string)]], [https://gstring.example/])
AC_OUTPUT
]])
AT_CHECK_AUTOCONF([], [0], [ignore], [stderr])
AT_CHECK([grep 'AC_INIT: unsafe as a filename: ' stderr], [], [ignore])

AT_DATA([configure.ac],
[[AC_INIT([GNU String], [2.48], [bugs@gstring.example],
          [string], [[https://gstring.example/docs,html]])
AC_OUTPUT
]])
AT_CHECK_AUTOCONF

AT_DATA([configure.ac],
[[AC_INIT([GNU String], [2.48], [bugs@gstring.example],
          [string], [[https://gstring.example/weird)/path]])
AC_OUTPUT
]])
AT_CHECK_AUTOCONF

AT_CLEANUP


## -------------- ##
## AC_COPYRIGHT.  ##
## -------------- ##

# Ensure the FSF notice as well as the user-provided one are present
# in the head of the testsuite as well as the --version output.

AT_SETUP([AC@&t@_COPYRIGHT])

AT_DATA([configure.ac],
[[AC_INIT([GNU fu], [1.0])
AC_COPYRIGHT([[This is just a test notice, not a real one, so let's avoid
words that may be matched by scanners for legal things,
causing extra work for distributors.
Multi-line values should be supported.
]])
AC_OUTPUT
]])

AT_CHECK_AUTOCONF
AT_CHECK_CONFIGURE([--version], [], [stdout])
AT_CHECK([grep 'Copyright.*Free Software Foundation' stdout], [], [ignore])
AT_CHECK([grep 'This is just a test notice' stdout], [], [ignore])
AT_CHECK([sed -ne 50q -e '/Copyright/{' -e N -e N -e N -e N -e 's/#//g' ]dnl
	 [    -e 's/\n//g' -e p -e '}' configure ]dnl
         [  | grep 'Copyright.*Free Software Foundation'],
	 [], [ignore])
AT_CHECK([sed 50q configure | grep 'This is just a test notice'], [], [ignore])

AT_CLEANUP


## ---------------- ##
## AC_CACHE_CHECK.  ##
## ---------------- ##

# Make sure AC_CACHE_CHECK is silent with -q.
# Also make sure we warn about cache id's not named with '_cv_'.

AT_SETUP([AC_CACHE_CHECK])
AT_KEYWORDS([CONFIG_SITE])

AT_DATA([configure.ac],
[[AC_INIT
# m4_define([ac_nothing], [ac_cv_absolutely_nothing])
AC_CACHE_CHECK([for nothing],
	       [ac_nothing],
	       [ac_nothing=found])

AC_MSG_CHECKING([for some other variable])
commands_to_set_it_was_run=false
AC_CACHE_VAL([my_cv_variable], [
# FOO
commands_to_set_it_was_run=true
my_cv_variable=true
])
AC_MSG_RESULT([$my_cv_variable])

# Ensure that the result is available at this point.
if ${my_cv_variable+false} :; then
  AC_MSG_ERROR([AC@&@&t@t@_CACHE_VAL did not ensure that the cache variable was set])
fi

AC_OUTPUT
]])

AT_CHECK_AUTOCONF([], [], [], [stderr])
AT_CHECK([grep 'must contain _cv_ to be cached' stderr], [], [ignore])

# Do not warn about defines:
sed 's/^# m4_define/m4_define/' configure.ac > t
mv -f t configure.ac
AT_CHECK_AUTOCONF
AT_CHECK_CONFIGURE([-q])

sed '/m4_define/d; s/ac_nothing/ac_cv_nothing/' configure.ac > t
mv -f t configure.ac
AT_CHECK_AUTOCONF
AT_CHECK_CONFIGURE([-q])

# Print a message saying that the result was cached, iff it was cached.
AT_CHECK_CONFIGURE([], [], [stdout])
AT_CHECK([grep 'cached' stdout], [1])
AT_CHECK_CONFIGURE([my_cv_variable='yes it is set'], [], [stdout])
AT_CHECK([grep 'cached.*yes it is set' stdout], [], [ignore])

# --cache-file is honored and has caching semantics.
AT_CHECK_CONFIGURE([--cache-file=foobar.cache], [], [stdout])
AT_CHECK([grep 'cached' stdout], [1])
AT_CHECK([test ! -f config.cache])
AT_CHECK([grep 'my_cv_variable.*true' foobar.cache], [], [ignore])
AT_CHECK_CONFIGURE([--cache-file=foobar.cache], [], [stdout])
AT_CHECK([grep 'some other variable.*cached.*true' stdout], [], [ignore])

# A setting on the command line overrides the cache.
AT_CHECK_CONFIGURE([--cache-file=foobar.cache my_cv_variable='override'], [], [stdout])
AT_CHECK([grep 'cached.*override' stdout], [], [ignore])
AT_CHECK([grep 'my_cv_variable.*override' foobar.cache], [], [ignore])

# Values containing braces need special internal treatment.
AT_CHECK_CONFIGURE([-C ac_cv_nothing='{' my_cv_variable='contains } brace'],
		   [], [stdout])
AT_CHECK([grep 'ac_cv_nothing.*{' config.cache], [], [ignore])
AT_CHECK([grep 'my_cv_variable.*contains } brace' config.cache], [], [ignore])
AT_CHECK_CONFIGURE([-C], [], [stdout])
AT_CHECK([grep 'nothing.*{' stdout], [], [ignore])
AT_CHECK([grep 'some other variable.*contains } brace' stdout], [], [ignore])
rm -f config.cache

# Diagnose common side-effects that are errors in COMMANDS-TO-SET-IT:
sed 's/^# FOO/AC_DEFINE([some-define], [1], [oooh.])/' configure.ac > t
mv -f t configure.ac
AT_CHECK_AUTOCONF([], [], [], [stderr])
AT_CHECK([grep 'suspicious.*AC_DEFINE' stderr], [], [ignore])

sed 's/^AC_DEFINE.*/AC_SUBST([some_substitution], [oooh.])/' configure.ac > t
mv -f t configure.ac
AT_CHECK_AUTOCONF([], [], [], [stderr])
AT_CHECK([grep 'suspicious.*AC_SUBST' stderr], [], [ignore])

# Ensure the examples from the manual work as intended.
# Taken from autoconf.texi:Caching Results
AT_DATA([configure.ac],
[[AC_INIT
AC_DEFUN([AC_SHELL_TRUE],
[AC_CACHE_CHECK([whether true(1) works], [my_cv_shell_true_works],
                [my_cv_shell_true_works=no
                 (true) 2>/dev/null && my_cv_shell_true_works=yes
                 if test "x$my_cv_shell_true_works" = xyes; then
                   AC_DEFINE([TRUE_WORKS], [1],
                             [Define if 'true(1)' works properly.])
                 fi])
])
AC_SHELL_TRUE
]])
AT_CHECK_AUTOCONF([-Werror], [1], [], [stderr])
AT_CHECK([grep 'suspicious.*AC_DEFINE' stderr], [], [ignore])

# Taken from autoconf.texi:Caching Results
AT_DATA([configure.ac],
[[AC_INIT
AC_DEFUN([AC_SHELL_TRUE],
[AC_CACHE_CHECK([whether true(1) works], [my_cv_shell_true_works],
                [my_cv_shell_true_works=no
                 (true) 2>/dev/null && my_cv_shell_true_works=yes])
 if test "x$my_cv_shell_true_works" = xyes; then
   AC_DEFINE([TRUE_WORKS], [1],
             [Define if 'true(1)' works properly.])
 fi
])
AC_SHELL_TRUE
AC_OUTPUT
]])
AT_CHECK_AUTOCONF([-Werror])
AT_CHECK_CONFIGURE([-C], [], [stdout])
AT_CHECK([grep my_cv_shell_true_works config.cache], [], [ignore])
AT_CHECK([grep 'true.*works.*yes' stdout], [], [ignore])

AT_CHECK_CONFIGURE([--config-cache], [], [stdout])
AT_CHECK([grep 'true.*works.*cached.*yes' stdout], [], [ignore])

# config.status only pays attention to the cache file with --recheck.
AT_CHECK([./config.status], [], [stdout])
AT_CHECK([grep cache stdout], [1])
AT_CHECK([./config.status --recheck], [], [stdout])
AT_CHECK([grep cache stdout], [0], [ignore])

# By default, configure uses no cache file, neither loading nor updating it.
: > a-stamp-file
AT_CHECK_CONFIGURE([], [], [stdout])
AT_CHECK([grep cache stdout], [1])
AT_CHECK([LC_ALL=C ls -t config.cache a-stamp-file | sed 1q | grep config.cache], [1])

# Using a symlinked cache file works.
: > cache
rm -f config.cache
AS_LN_S([cache], [config.cache])
AT_CHECK_CONFIGURE([-C])
# Either the system does not support symlinks, or the symlinked-to file
# should be updated.
AT_CHECK([test -s cache || test ! -h config.cache])

# config.site can specify a site-wide cache, accumulating information.
# Also test that we don't run afoul of sourcing a file with leading -.
AT_DATA([-config.site],
[[cache_file=sitecache
]])
AT_DATA([sitecache],
[[my_cv_some_preset_cache_var=yes
]])
CONFIG_SITE=-config.site
export CONFIG_SITE
AT_CHECK_CONFIGURE
AT_CHECK([grep my_cv_some_preset_cache_var sitecache], [], [ignore])
AT_CHECK([grep my_cv_shell_true_works sitecache], [], [ignore])
AT_CHECK_CONFIGURE([], [], [stdout])
AT_CHECK([grep 'whether true.*works.*cached' stdout], [], [ignore])

dnl Until we can find a way to avoid catastrophic failure,
dnl skip the rest of this test on such shells.
echo 'if' > syntax
AT_CHECK([${CONFIG_SHELL-$SHELL} -c 'case `. ./syntax; echo $?` in
            0|"") exit 77;; esac'], [0], [ignore], [ignore])

# Check that config cache scripts must be well-formed.
AT_DATA([bad.site],
[[fi
]])
CONFIG_SITE=$PWD/bad.site
AT_CHECK_CONFIGURE([ || exit 1], [1], [stdout], [stderr])
AT_CHECK([grep 'failed to load site script' stderr], [], [ignore], [ignore],
	 [AT_CHECK([grep 'whether true' stdout], [1])])

# However, a missing file is ignored.
CONFIG_SITE=./no-such-file
AT_CHECK_CONFIGURE

# Check that multiple files are loaded
AT_DATA([first.site],
[[my_cv_shell_true_works=no
]])
AT_DATA([second.site],
[[my_cv_shell_true_works=maybe
]])
CONFIG_SITE="$PWD/first.site $PWD/second.site"
AT_CHECK_CONFIGURE([], [], [stdout])
AT_CHECK([grep 'whether true.*works.*cached.*maybe' stdout], [], [ignore])

AT_CLEANUP


## --------------- ##
## AC_CACHE_LOAD.  ##
## --------------- ##

# Test AC_CACHE_LOAD.

AT_SETUP([AC_CACHE_LOAD])

AT_DATA([configure.ac],
[[AC_INIT
$some_test_code
AC_CACHE_LOAD
AC_MSG_NOTICE([some_cv_variable is $some_cv_variable])
AC_OUTPUT
]])
AT_CHECK_AUTOCONF
AS_UNSET([some_test_code])
AT_DATA([new-cache],
[[some_cv_variable=value-from-new-cache
]])
AT_CHECK_CONFIGURE([some_test_code='eval cache_file=new-cache'], [], [stdout])
AT_CHECK([grep 'some_cv_variable.*value-from-new-cache' stdout], [], [ignore])

AT_CLEANUP


## ---------------- ##
## AC_COMPUTE_INT.  ##
## ---------------- ##

# Make sure AC_COMPUTE_INT fails properly.

AT_SETUP([AC_COMPUTE_INT])

AT_DATA([configure.ac],
[[AC_INIT
AC_COMPUTE_INT([invalid_expression],
	       [**0**],
	       [],
	       [invalid_expression=failed])
test "$invalid_expression" = failed ||
  AC_MSG_ERROR([**0** evaluated to $invalid_expression instead of failing])
AC_OUTPUT
]])

AT_CHECK_AUTOCONF
AT_CHECK_CONFIGURE

AT_CLEANUP


## ---------------- ##
## AC_TRY_COMMAND.  ##
## ---------------- ##

AT_SETUP([AC_TRY_COMMAND])

AT_DATA([configure.ac],
[[AC_INIT

if AC_TRY_COMMAND([(echo "The Cat in the Hat";
		    echo "The Hat in the Cat" >&2) |
		   grep \^The\ Cat\ in\ the\ Hat\$ >/dev/null]); then
  :
else
  AC_MSG_ERROR([didn't see the Cat in the Hat])
fi

if AC_TRY_COMMAND([(echo "The Cat in the Hat";
		    echo "The Hat in the Cat" >&2) |
		   grep \^The\ Hat\ in\ the\ Cat\$ >/dev/null]); then
  AC_MSG_ERROR([saw the Hat in the Cat])
fi

AC_OUTPUT
]])

AT_CHECK_AUTOCONF
AT_CHECK_CONFIGURE([-q])

AT_CLEANUP


## ------------ ##
## Input/Output ##
## ------------ ##

AT_SETUP([Input/Output])

AT_DATA([configure.ac],
[[AC_INIT
cat <&AS@&t@_ORIGINAL_STDIN_FD >&AS@&t@_MESSAGE_FD
AC_OUTPUT
]])
AT_CHECK_AUTOCONF
AT_CHECK([echo Hello |
  ./configure $configure_options |
  grep -v '^configure: '],,
[Hello
])
AT_CHECK([echo Hello | ./configure $configure_options --silent])

AT_CLEANUP


## ------------------- ##
## configure arguments ##
## ------------------- ##

AT_SETUP([configure arguments])

AT_DATA([configure.ac],
[[AC_INIT
echo "$@"
AC_OUTPUT
]])

AT_CHECK_AUTOCONF
AT_CHECK_CONFIGURE([FOO=bar --enable-baz --without-zork --silent], [0], [stdout], [ignore])
AT_CHECK([grep 'FOO=bar --enable-baz --without-zork --silent' stdout], [0], [ignore], [ignore])

dnl check that syntax error is detected
AT_CHECK_CONFIGURE([=], [1], [], [ignore], [ignore])
AT_CHECK_CONFIGURE([1=2], [1], [], [ignore], [ignore])

AT_CLEANUP


## ------------------------------ ##
## AC_ARG_ENABLE and AC_ARG_WITH. ##
## ------------------------------ ##

AT_SETUP([AC_ARG_ENABLE and AC_ARG_WITH])

AT_DATA_M4SH([configure.ac],
[[AC_INIT
# Taken from autoconf.texi:Pretty Help Strings.
AC_ARG_WITH([foo],
  [AS_HELP_STRING([--with-foo],
     [use foo (default is no)])],
  [use_foo=$withval],
  [use_foo=no])
AC_ARG_WITH([c++],
  [AS_HELP_STRING([--with-c++],
     [with c++])],
  [choice_with=$withval])
AC_ARG_ENABLE([c++],
  [AS_HELP_STRING([--enable-c++],
     [enable c++])],
  [choice_enable=$enableval])
echo "use_foo: $use_foo"
echo "with_c++: $with_c__, $choice_with"
echo "enable_c++: $enable_c__, $choice_enable"
AC_OUTPUT
]])

AT_CHECK_AUTOCONF
AT_CHECK_CONFIGURE([--help | grep foo], [0],
[[  --with-foo              use foo (default is no)
]], [ignore])
AT_CHECK_CONFIGURE([--with-foo=yes --with-c++ --disable-c++],
  [], [stdout], [ignore])
AT_CHECK([grep 'use_foo: yes' stdout], [], [ignore])
AT_CHECK([grep 'with_c++: yes, yes' stdout], [], [ignore])
AT_CHECK([grep 'enable_c++: no, no' stdout], [], [ignore])
AT_CHECK([grep 'unrecognized option' stdout], [1])
AT_CHECK_CONFIGURE([--without-foo --with-c++=no --enable-c++=maybe],
  [], [stdout], [ignore])
AT_CHECK([grep 'use_foo: no' stdout], [], [ignore])
AT_CHECK([grep 'with_c++: no, no' stdout], [], [ignore])
AT_CHECK([grep 'enable_c++: maybe, maybe' stdout], [], [ignore])
AT_CHECK([grep 'unrecognized option' stdout], [1])
AT_CHECK_CONFIGURE([], [], [stdout], [ignore])
AT_CHECK([grep 'use_foo: no' stdout], [], [ignore])
AT_CHECK([grep 'with_c++: , $' stdout], [], [ignore])
AT_CHECK([grep 'enable_c++: , $' stdout], [], [ignore])
AT_CHECK([grep 'unrecognized option' stdout], [1])

AT_CLEANUP


## --------------------- ##
## configure directories ##
## --------------------- ##

AT_SETUP([configure directories])

AT_DATA([foo.in],
[[prefix=@prefix@
exec_prefix=@exec_prefix@
libdir=@libdir@
]])

AT_DATA([configure.ac],
[[AC_INIT
AC_CONFIG_FILES([foo])
AC_OUTPUT
]])

AT_CHECK_AUTOCONF
dnl check that relative paths are rejected
AT_CHECK_CONFIGURE([--libdir=.], [1], [ignore], [stderr])
AT_CHECK([grep 'expected an absolute directory name for --libdir: \.' stderr],
	 [0], [ignore])

dnl check that extra slashes are stripped, and that defaults are not expanded
AT_CHECK_CONFIGURE([--prefix=/usr//])
AT_CHECK([cat foo], [0], [[prefix=/usr
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
]])

AT_CLEANUP

## ---------- ##
## AC_SUBST.  ##
## ---------- ##

AT_SETUP([AC_SUBST])
AT_KEYWORDS([AS@&t@_IDENTIFIER_IF])

# Check that a valid variable name is used.
AT_DATA([configure.ac],
[[AC_INIT([test], [1])
AC_SUBST([1], [bar])
AC_OUTPUT
]])
AT_CHECK_AUTOCONF([], [1], [], [stderr])
AT_CHECK([grep 'not a valid shell variable' stderr], [], [ignore])

AT_DATA([configure.ac],
[[AC_INIT([test], [1])
AC_SUBST([], [bar])
AC_OUTPUT
]])
AT_CHECK_AUTOCONF([], [1], [], [stderr])
AT_CHECK([grep 'not a valid shell variable' stderr], [], [ignore])

AT_DATA([configure.ac],
[[AC_INIT([test], [1])
AC_SUBST([*], [bar])
AC_OUTPUT
]])
AT_CHECK_AUTOCONF([], [1], [], [stderr])
AT_CHECK([grep 'not a valid shell variable' stderr], [], [ignore])

# Make sure AC_SUBST handles variables as expected.
AT_DATA([file.in],
[[@FOO@
@BAR@
FOO
]])
AT_DATA([configure.ac],
[[AC_INIT([test], [0])
m4_define([FOO], [baz])
AC_SUBST([FOO], [bar])
BAR=one
AC_SUBST([B@&t@AR])
BAR=two
AC_CONFIG_FILES([file])
AC_OUTPUT
]])

AT_CHECK_AUTOCONF([], [], [], [stderr])
AT_CHECK_CONFIGURE
AT_CHECK([cat file], [],
[[bar
two
FOO
]])

AT_CLEANUP

## ----------------------------------- ##
## configure with closed standard fds  ##
## ----------------------------------- ##

AT_SETUP([configure with closed standard fds])
AT_KEYWORDS([AS@&t@_INIT])

# Create a configure script that runs a relatively complicated but
# self-contained test.  Run it.
AT_CONFIGURE_AC([[AC_PROG_CC]])
AT_CHECK_AUTOCONF
AT_CHECK_AUTOHEADER
AT_CHECK_CONFIGURE([], [], [stdout], [stderr])
AT_CHECK_ENV

mv stdout stdout-expected
mv stderr stderr-expected
mv state-env.after state-env-expected
mv config.status config-status-expected
mv config.h config-h-expected

# Run it again with stdin (fd 0) closed.
# There should be no change to the stdout or stderr output and the
# result of configuration should be the same.

AT_CHECK_CONFIGURE([ 0<&- ], [], [stdout], [stderr])
AT_CHECK_ENV
AT_CMP([stdout-expected], [stdout])
AT_CMP([stderr-expected], [stderr])
AT_CONFIG_CMP([state-env-expected], [state-env.after])

mv stdout stdout-closed-0
mv stderr stderr-closed-0
mv state-env.after state-env-closed-0
mv config.status config-status-closed-0
mv config.h config-h-closed-0

# Run it again with stdout (fd 1) closed.
# There should be no change to the stderr output and the
# result of configuration should be the same.  (Any output
# that would have gone to stdout, of course, is lost.)

AT_CHECK_CONFIGURE([ 1>&- ], [], [stdout], [stderr])
AT_CHECK_ENV
AT_CHECK([test -f stdout && test ! -s stdout])
AT_CMP([stderr-expected], [stderr])
AT_CONFIG_CMP([state-env-expected], [state-env.after])

mv stdout stdout-closed-1
mv stderr stderr-closed-1
mv state-env.after state-env-closed-1
mv config.status config-status-closed-1
mv config.h config-h-closed-1

# Run it again with stderr (fd 2) closed.
# There should be no change to the stdout output and the
# result of configuration should be the same.  (Any output
# that would have gone to stderr, of course, is lost.)

AT_CHECK_CONFIGURE([ 2>&- ], [], [stdout], [stderr])
AT_CHECK_ENV
AT_CMP([stdout-expected], [stdout])
AT_CHECK([test -f stderr && test ! -s stderr])
AT_CONFIG_CMP([state-env-expected], [state-env.after])

mv stdout stdout-closed-2
mv stderr stderr-closed-2
mv state-env.after state-env-closed-2
mv config.status config-status-closed-2
mv config.h config-h-closed-2

AT_CLEANUP
