#							-*- Autotest -*-

AT_BANNER([Executables (autoheader, autoupdate...).])

# Copyright (C) 2000-2001, 2003-2004, 2006-2017, 2020-2026 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/>.


## ----------------------------- ##
## Syntax of the shell scripts.  ##
## ----------------------------- ##

# We use '/bin/sh -n script' to check that there are no syntax errors
# in the scripts.  Although incredible, there are /bin/sh that go into
# endless loops with '-n', e.g., SunOS's:
#
#   $ uname -a
#   SunOS ondine 4.1.3 2 sun4m unknown
#   $ cat endless.sh
#   while false
#   do
#     :
#   done
#   exit 0
#   $ time sh endless.sh
#   sh endless.sh  0,02s user 0,03s system 78% cpu 0,064 total
#   $ time sh -nx endless.sh
#   ^Csh -nx endless.sh  3,67s user 0,03s system 63% cpu 5,868 total
#
# So before using '/bin/sh -n' to check our scripts, we first check
# that '/bin/sh -n' is not broken to death.

AT_SETUP([Syntax of the shell scripts])

AT_CHECK([test "$SHELL_N" != none || exit 77])

# Specify the absolute name of the tool, as some shells don't honor PATH when
# running 'sh PROG'.

AT_CHECK_SHELL_SYNTAX(["$abs_top_builddir/tests/autoconf"])
AT_CHECK_SHELL_SYNTAX(["$abs_top_builddir/tests/testsuite"])

# These are not built, they are in the src tree.
AT_CHECK_SHELL_SYNTAX(["$abs_top_srcdir/build-aux/install-sh"])
AT_CHECK_SHELL_SYNTAX(["$abs_top_srcdir/build-aux/missing"])

AT_CLEANUP




## ---------------------------- ##
## Syntax of the Perl scripts.  ##
## ---------------------------- ##

AT_SETUP([Syntax of the Perl scripts])

AT_CHECK_PERL_SYNTAX([autoconf])
AT_CHECK_PERL_SYNTAX([autoheader])
AT_CHECK_PERL_SYNTAX([autom4te])
AT_CHECK_PERL_SYNTAX([autoreconf])
AT_CHECK_PERL_SYNTAX([autoscan])
AT_CHECK_PERL_SYNTAX([autoupdate])
AT_CHECK_PERL_SYNTAX([ifnames])

AT_CLEANUP




## ------------------ ##
## autom4te's cache.  ##
## ------------------ ##

AT_SETUP([autom4te cache])

AT_DATA_M4SUGAR([[script.4s]],
[[m4_include([foo])
]])

# Everything is OK.
touch foo
AT_CHECK_M4SUGAR

# We moved a file: it should fail
mkdir sub
mv foo sub
AT_CHECK_M4SUGAR([], [1], [],
[m4:script.4s:1: cannot open 'foo': No such file or directory
autom4te: error: m4 failed with exit status: 1
])

# But if we change the main file, then we should no longer complain of
# missing files.
AT_DATA_M4SUGAR([[script.4s]],
[[m4_include([sub/foo])
]])
AT_CHECK_M4SUGAR

AT_CLEANUP


# autom4te --force
# ----------------

AT_SETUP([autom4te --force])

AT_DATA([file.m4],
[[right
]])
AT_CHECK_AUTOM4TE([-o file file.m4])

# Create a file whose timestamp is in the future.
# (next year)-01-01 00:01 UTC should always be in the future,
# even on slow machines.
echo BAD >file
this_year=`TZ=UTC0 date +%Y`
AS_VAR_ARITH([next_year], [$this_year + 1])
TZ=UTC0 touch -t ${next_year}01010001 file

AT_CHECK_AUTOM4TE([--force -o file file.m4])
AT_CHECK([cat file], 0,
[[right
]])

AT_CLEANUP


# autom4te and file names containing whitespace
# ---------------------------------------------

AT_SETUP([autom4te and whitespace in file names])

x=
export x
rm -f a b
for funny in \
  'with  funny '\'' $x & #! name' \
  'with  funny \ '\'' \'\'' " <a >b * ? name ' # "restore font-lock
do
  funny=`func_sanitize_file_name "$funny"`
  file=" file $funny"
  outfile="$file out "
  dir=`func_sanitize_dir_name " dir $funny"`
  cachedir=" cache$dir"
  TMPDIR=" tmp$dir"
  export TMPDIR

  # skip if we cannot create such a file or directory
  AT_CHECK([mkdir "$dir" "$cachedir" "$TMPDIR" && touch "$file" || exit 77])

  cat >"$file" <<'END'
[m4@&t@_init[]m4@&t@_include(foo.m4)
m4@&t@_divert([])d@&t@nl
FOO]
END
  cat >"$dir"/foo.m4 <<'END'
[m4@&t@_define([FOO], [bar])]
END

  AT_CHECK_AUTOM4TE([-C "$cachedir" -B "$dir" --language=m4sugar -o "$outfile" "$file"])
  AT_CHECK([cat "$outfile"], [],
  [[bar
]])
  rm -rf "$outfile" "$cachedir"
  AT_CHECK_AUTOM4TE([-C "$cachedir" -I "$dir" --language=m4sugar -o "$outfile" "$file"])
  AT_CHECK([cat "$outfile"], [],
  [[bar
]])

  # This exercises a slightly different code path and will catch an open with
  # trailing whitespace:
  cat >"$file" <<'END'
[m4@&t@_init[]m4@&t@_include(foo.m4)
m4@&t@_pattern_forbid([^bar$])
m4@&t@_divert([])d@&t@nl
FOO]
END
  rm -rf "$outfile" "$cachedir"
  AT_CHECK_AUTOM4TE([-C "$cachedir" -I "$dir" --language=m4sugar -o "$outfile" "$file"],
		    [1], [], [stderr])
  AT_CHECK([grep 'undefined or overquoted macro' stderr], [], [ignore])

  cat >"$file" <<'END'
[m4@&t@_init[]m4@&t@_include(foo.m4)
m4@&t@_divert([])d@&t@nl]
END
  rm -rf "$file.m4f"
  AT_CHECK_AUTOM4TE([-C "$cachedir" -I "$dir" --language=m4sugar --freeze -o "$file.m4f" "$file"])
  AT_CHECK([test -s "$file.m4f"])

  # Check --reload-state
  AT_CHECK_AUTOM4TE([-C "$cachedir" --language=m4sugar -o "$outfile" "$file.m4f" /dev/null])

  test ! -f b
done

AT_CLEANUP


# autom4te --trace and unusual macro names
# ----------------------------------------

AT_SETUP([autom4te --trace and unusual macro names])

AT_DATA([file.m4],
[[
]])
AT_CHECK_AUTOM4TE([-t 'TR A CE' -t 'TR(A)CE' file.m4])

AT_CLEANUP


AT_SETUP([autom4te --trace and whitespace])

dnl line numbering differs between m4 1.4.6 and 1.4.13 if we don't
dnl go through a single line wrapper
AT_DATA_M4SUGAR([file.m4],
[[m4_define([foo], [m4_echo([  a
b	c  ], [\
d\
])])
foo
]])
AT_CHECK_AUTOM4TE([--language=m4sugar -t 'm4@&t@_echo' file.m4], [0],
[[file.m4:5:m4@&t@_echo: a b c :d
]])

AT_CLEANUP


## ------------------ ##
## autoconf --trace.  ##
## ------------------ ##


# autoconf --trace: user macros
# -----------------------------
AT_SETUP([autoconf --trace: user macros])

AT_DATA([configure.ac],
[[m4_define([active], [ACTIVE])
m4_define([TRACE1], [TRACE2(m4_shift($@))])
m4_define([TRACE2], [[$2], $1])

# No arguments.
TRACE1
TRACE2

# With arguments, single line.
TRACE1(foo, @bar, @baz)
TRACE1(foo, TRACE1(bar, baz))
TRACE1(foo, active, baz)
TRACE1(foo, [active], TRACE1(active, [active]))
]])

# Several --traces.
AT_CHECK_AUTOCONF([-t TRACE1 -t TRACE2], 0,
[[configure.ac:6:TRACE1:
configure.ac:6:TRACE2:
configure.ac:7:TRACE2:
configure.ac:10:TRACE1:foo:@bar:@baz
configure.ac:10:TRACE2:@bar:@baz
configure.ac:11:TRACE1:bar:baz
configure.ac:11:TRACE2:baz
configure.ac:11:TRACE1:foo::baz
configure.ac:11:TRACE2::baz
configure.ac:12:TRACE1:foo:ACTIVE:baz
configure.ac:12:TRACE2:ACTIVE:baz
configure.ac:13:TRACE1:ACTIVE:active
configure.ac:13:TRACE2:active
configure.ac:13:TRACE1:foo:active::ACTIVE
configure.ac:13:TRACE2:active::ACTIVE
]])

# Several line requests.
AT_CHECK_AUTOCONF([[-t TRACE1:'
[$1], [$2], [$3].']], 0,
[[
[], [], [].

[foo], [@bar], [@baz].

[bar], [baz], [].

[foo], [], [baz].

[foo], [ACTIVE], [baz].

[ACTIVE], [active], [].

[foo], [active], [].
]])

# ${sep}@.
AT_CHECK_AUTOCONF([-t TRACE2:'${)===(}@'], 0,
[[[]
[]
[@bar])===([@baz]
[baz]
[])===([baz]
[ACTIVE])===([baz]
[active]
[active])===([])===([ACTIVE]
]])

# Arguments spanning multiple lines.
AT_DATA([configure.ac],
[[m4_define([TRACE], [])
TRACE(foo
bar,
bar
foo)
]])

AT_CHECK_AUTOCONF([-t TRACE:'$%'], 0,
[[foo bar:bar foo
]])

AT_CLEANUP


# autoconf --trace: builtins
# --------------------------
AT_SETUP([autoconf --trace: builtins])

AT_DATA([configure.ac],
[[define([active], [ACTIVE])
]])

AT_CHECK_AUTOCONF([[-t define | sed -n '$p']],
	 0,
[[configure.ac:1:define:active:ACTIVE
]])

# FIXME: Without '$1' the following test dies.  Groumphf, once again to
# dive into obscure feature interaction...
# Note that using '-i' means we need the *.m4 files, not the *.m4f files,
# hence we need srcdir, not builddir.
AT_CHECK_AUTOCONF([[-t define:'$1' -i| sed -n '$p']],
	 0,
[[active
]])

AT_CLEANUP


# autoconf --trace: AC_CONFIG_MACRO_DIRS
# --------------------------------------
AT_SETUP([autoconf --trace: AC_CONFIG_MACRO_DIRS])
AT_KEYWORDS([AC_CONFIG_MACRO_DIR AC_CONFIG_MACRO_DIR_TRACE])

AT_DATA([configure.ac],
[[AC_INIT
AC_CONFIG_MACRO_DIR([dir1])
AC_CONFIG_MACRO_DIRS([dir2 dir3 \
dir4])
AC_CONFIG_MACRO_DIRS([dir5])
]])

# Legacy tracing
AT_CHECK_AUTOCONF([-t AC_CONFIG_MACRO_DIR], 0,
[[configure.ac:2:AC_CONFIG_MACRO_DIR:dir1
]])

# Preferred tracing
AT_CHECK_AUTOCONF([-t AC_CONFIG_MACRO_DIR_TRACE], 0,
[[configure.ac:2:AC_CONFIG_MACRO_DIR_TRACE:dir1
configure.ac:3:AC_CONFIG_MACRO_DIR_TRACE:dir2
configure.ac:3:AC_CONFIG_MACRO_DIR_TRACE:dir3
configure.ac:3:AC_CONFIG_MACRO_DIR_TRACE:dir4
configure.ac:5:AC_CONFIG_MACRO_DIR_TRACE:dir5
]])

# Legacy macro can only be used once
AT_DATA([configure.ac],
[[AC_INIT
AC_CONFIG_MACRO_DIR([dir1])
AC_CONFIG_MACRO_DIR([dir2])
AC_OUTPUT
]])
AT_CHECK_AUTOCONF([], [1], [], [stderr])
AT_CHECK([grep 'error: AC_CONFIG_MACRO_DIR can only be used once' stderr],
[], [ignore])

# Legacy macro must be used first, if present
AT_DATA([configure.ac],
[[AC_INIT
AC_CONFIG_MACRO_DIRS([dir1])
AC_CONFIG_MACRO_DIR([dir2])
]])
AT_CHECK_AUTOCONF([], [1], [], [stderr])
AT_CHECK([grep 'error: AC_CONFIG_MACRO_DIR can only be used once' stderr],
[], [ignore])

# Only use the public macros
AT_DATA([configure.ac],
[[AC_INIT
AC_CONFIG_MACRO_DIR_TRACE([dir1])
]])
AT_CHECK_AUTOCONF([], [1], [],
[[configure.ac:2: error: Do not invoke AC_CONFIG_MACRO_DIR_TRACE directly
configure.ac:2: the top level
autom4te: error: m4 failed with exit status: 1
]])

# Legacy macro use is not required, but still gets traced
AT_DATA([configure.ac],
[[AC_INIT
AC_CONFIG_MACRO_DIRS([dir1])
AC_CONFIG_MACRO_DIRS([dir2])
AC_OUTPUT
]])
AT_CHECK_AUTOCONF([], [0], [], [])
AT_CHECK_AUTOCONF([-t AC_CONFIG_MACRO_DIR], [0],
[[configure.ac:2:AC_CONFIG_MACRO_DIR:dir1
]])

AT_CLEANUP


## ---------------------------- ##
## autoconf: forbidden tokens.  ##
## ---------------------------- ##


# autoconf: forbidden tokens, basic
# ---------------------------------
AT_SETUP([autoconf: forbidden tokens,[] basic])

AT_DATA_M4SH([configure.ac],
[[AS_INIT
m4_foo
_m4_bar
AS_FOO
_AS_BAR
[dnl]
]])

# This test needs autom4te's cache, in spite of any ~/.autom4te.cfg.
AT_DATA([.autom4te.cfg], [[
begin-language: "Autoconf"
args: --cache=autom4te.cache
end-language: "Autoconf"
begin-language: "Autoconf-without-aclocal-m4"
args: --cache=autom4te.cache
end-language: "Autoconf-without-aclocal-m4"
]])

AT_MTIME_DELAY

AT_CHECK_AUTOCONF([], 1, [],
[[trailer.m4: warning: AC_INIT was never used
trailer.m4: warning: AC_OUTPUT was never used
configure.ac:2: error: undefined or overquoted macro: m4@&t@_foo
      If this token and others are legitimate, please use m4@&t@_pattern_allow.
      See the Autoconf documentation.
configure.ac:3: error: undefined or overquoted macro: _m4@&t@_bar
configure.ac:4: error: undefined or overquoted macro: AS@&t@_FOO
configure.ac:5: error: undefined or overquoted macro: _AS@&t@_BAR
configure.ac:6: error: undefined or overquoted macro: d@&t@nl
]])

# On a file system with coarse timestamp resolution (1 or 2s),
# configure and autom4te's cache files can easily have equal
# timestamps, in which case autom4te will consider the cache
# to be stale.  Ensure configure's timestamp is newer.
AT_MTIME_DELAY
touch configure

# Since warnings are replicated from the cache but "undefined or overquoted
# macro" errors are not, a second run, without --force, should succeed
# and should yield only the warnings about AC_INIT and AC_OUTPUT.
AT_CHECK_M4([autoconf], 0, [],
[[trailer.m4: warning: AC_INIT was never used
trailer.m4: warning: AC_OUTPUT was never used
]])

AT_CLEANUP


# autoconf: forbidden tokens, exceptions
# --------------------------------------
AT_SETUP([autoconf: forbidden tokens,[] exceptions])

AT_DATA_M4SH([configure.ac],
[[AS_INIT

# This is allowed in spite of the name.
# It is on purpose that we check the case where there are several
# tokens on the same line.
m4_pattern_allow([^AS_ALLOWED$])
NOT_AS_ALLOWED AS_ALLOWED AS_ALLOWED_NOT

# Test forbidding.
m4_pattern_forbid([^FORBIDDEN$])
NOT_FORBIDDEN FORBIDDEN FORBIDDEN_NOT

# Test Autoconf's patterns.
AS_THIS_IS_INVALID and _AS_THIS_IS_INVALID_TOO
BUT_AZ_THIS_IS_NOT ALTHOUGH_AS_THIS_IS
# This is legal, although there is 'AS_DEFINE' in there.
BAS_DEFINE
# AS_THIS_IS_A_COMMENT so just shut up.
It would be very bad if Autoconf forgot to expand [AS_]INIT!
]])

AT_CHECK_AUTOCONF([], 1, [],
[[trailer.m4: warning: AC_INIT was never used
trailer.m4: warning: AC_OUTPUT was never used
configure.ac:1: error: undefined or overquoted macro: AS@&t@_INIT
      If this token and others are legitimate, please use m4@&t@_pattern_allow.
      See the Autoconf documentation.
configure.ac:7: error: undefined or overquoted macro: AS@&t@_ALLOWED_NOT
configure.ac:10: error: undefined or overquoted macro: FORBIDDEN
configure.ac:14: error: undefined or overquoted macro: AS@&t@_THIS_IS_INVALID
configure.ac:14: error: undefined or overquoted macro: _AS@&t@_THIS_IS_INVALID_TOO
]])

AT_CLEANUP


# autoconf: automatically allowed tokens
# --------------------------------------
AT_SETUP([autoconf: automatically allowed tokens])

AT_DATA_M4SH([configure.ac],
[[AC_INIT
m4_pattern_forbid([^FB_])
AC_DEFINE([FB_ONE])
AC_SUBST([FB_TWO])
AC_OUTPUT
]])

AT_CHECK_AUTOCONF

AT_CLEANUP


# autoconf: do not forbid the empty token
# ---------------------------------------
AT_SETUP([autoconf: the empty token])

AT_DATA_M4SH([configure.ac],
[[m4_init[]m4_pattern_allow([^foo$])
m4_divert([])dnl
 line that begins with a space
]])

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

AT_CLEANUP


# autoconf: subdirectories
# ------------------------
AT_SETUP([autoconf: subdirectories])

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

mkdir sub

AT_DATA([sub/foo.in],
[[@MKDIR_P@
]])

AT_DATA([install-sh])

AT_CHECK_AUTOCONF
AT_CHECK_CONFIGURE
AT_CHECK([[grep '^[^/].*/mkdir -p' sub/foo]], 1)

AT_CLEANUP


# autoconf: input from stdin
# --------------------------
AT_SETUP([autoconf: input from stdin])

# Past Autoconf versions failed to read from stdin when other, non-frozen input
# files were present.
AT_DATA([aclocal.m4])

AT_CHECK([echo 'AC_INIT(X, 1.0, bug-autoconf@gnu.org)' | autoconf -t AC_INIT -],
	 0, [stdin:1:AC_INIT:X:1.0:bug-autoconf@gnu.org
])
AT_CHECK([echo 'AC_INIT(X, 2.0, bug-autoconf@gnu.org)' | autoconf -t AC_INIT -],
	 0, [stdin:1:AC_INIT:X:2.0:bug-autoconf@gnu.org
])

AT_CLEANUP


# autoconf: AC_AUTOCONF_VERSION
# -----------------------------
AT_SETUP([autoconf: AC_AUTOCONF_VERSION])

AT_DATA([configure.ac],
[[AC_INIT
version m4@&t@_defn([AC_AUTOCONF_VERSION]) version
AC_OUTPUT
]])

AT_CHECK_AUTOCONF
AT_CHECK([[grep 'version ]]AT_PACKAGE_VERSION[[ version' configure]],
0, [ignore])

AT_CLEANUP



# autoconf: AC_PRESERVE_HELP_ORDER
# --------------------------------
AT_SETUP([autoconf: AC_PRESERVE_HELP_ORDER])
AT_KEYWORDS([m4@&t@_divert_text])

AT_DATA_AUTOCONF([configure.ac],
[[AC_INIT
AC_PRESERVE_HELP_ORDER
AC_ARG_WITH([one], [  --with-one])
AC_ARG_ENABLE([two], [  --enable-two])
m4_divert_text([HELP_ENABLE], [arbitrary $text])
AC_ARG_WITH([three], [  --with-three])
AC_OUTPUT
]])

AT_CHECK_AUTOCONF
AT_CHECK_CONFIGURE([--help], [], [stdout])
AT_CHECK([sed -n '/^Optional/,/^$/p' stdout], [],
[[Optional Features and Packages:
  --disable-option-checking  ignore unrecognized --enable/--with options
  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
  --with-one
  --enable-two
arbitrary $text
  --with-three

]])

AT_CLEANUP


# autoconf: timestamp changes
# ---------------------------
# Automake needs autoconf to update the timestamp on the configure script
# whenever configure.ac or aclocal.m4 changes, even if the contents of the
# configure script have not changed.
AT_SETUP([autoconf: timestamp changes])

AT_DATA([aclocal.m4],
[[AC_DEFUN([local_KILROY], [# kilroy was here
])
]])

AT_DATA_AUTOCONF([configure.ac],
[[AC_INIT
AC_PROG_CC
local_KILROY
AC_OUTPUT
]])

AT_CHECK_AUTOCONF

cp configure configure.1
AT_MTIME_DELAY
printf '%s\n' 'AC_LIBSOURCES([foo.c])dn@&t@l' >> configure.ac

# This step must not use --force.
# We don't need to check shell syntax, because if all goes well,
# the script will be unchanged from what it was in the first autoconf
# pass, and that was already checked.
AT_CHECK_M4([autoconf])
AT_CHECK([cmp configure configure.1])
AT_CHECK([test configure -nt configure.1])

cp configure configure.2
AT_MTIME_DELAY
printf '%s\n' \
  'AC_DEFUN([unused_MACRO], [# bob was there too' \
  '])' >> aclocal.m4

# Same as above.
AT_CHECK_M4([autoconf])
AT_CHECK([cmp configure configure.2])
AT_CHECK([test configure -nt configure.2])

AT_CLEANUP


## --------- ##
## ifnames.  ##
## --------- ##

AT_SETUP([ifnames])

AT_DATA([iftest1.c],
[[#ifdef DEF1
#ifndef DEF2
#if ! defined DEF3 && defined DEF4 /* but not defined DEF5 */
    # if SPACES
	#	if	TABS
/* #if C_COMMENTS */
// #if CXX_COMMENTS
#if LINE1 = \
LINE2
#if (VAL1*VAL2)==VAL3+VAL4 /* Not VAL5 !!! */
]])

AT_DATA([iftest2.c],
[[#ifdef IFTEST2
#elifdef IFTEST3
#elifndef IFTEST4
#if VAL1
]])

AT_CHECK([ifnames iftest1.c iftest2.c], 0,
[DEF1 iftest1.c
DEF2 iftest1.c
DEF3 iftest1.c
DEF4 iftest1.c
IFTEST2 iftest2.c
IFTEST3 iftest2.c
IFTEST4 iftest2.c
LINE1 iftest1.c
LINE2 iftest1.c
SPACES iftest1.c
TABS iftest1.c
VAL1 iftest1.c iftest2.c
VAL2 iftest1.c
VAL3 iftest1.c
VAL4 iftest1.c
], [])

AT_CLEANUP



## ------------ ##
## autoheader.  ##
## ------------ ##

# autoheader is intensively used in its modern form throughout this
# test suite.  But we also have to check that acconfig.h still works.
# autoheader uses autoconf --trace, so traces first.

AT_SETUP([autoheader])

AT_DATA([acconfig.h],
[[/* Define this to whatever you want. */
#undef this
]])


# 1. Check that 'acconfig.h' is still honored.
AT_DATA([configure.ac],
[[AC_INIT
AC_CONFIG_HEADERS(config.h:config.hin)
AC_DEFINE(this, "whatever you want.")
]])

AT_CHECK_AUTOHEADER([], [this], [0], [], [ignore])
AT_CHECK([cat config.hin], 0,
[[/* config.hin.  Generated from configure.ac by autoheader.  */
/* Define this to whatever you want. */
#undef this

/* Define to the address where bug reports for this package should be sent. */
#undef PACKAGE_BUGREPORT

/* Define to the full name of this package. */
#undef PACKAGE_NAME

/* Define to the full name and version of this package. */
#undef PACKAGE_STRING

/* Define to the one symbol short name of this package. */
#undef PACKAGE_TARNAME

/* Define to the home page for this package. */
#undef PACKAGE_URL

/* Define to the version of this package. */
#undef PACKAGE_VERSION
]])


# 2. Check that missing templates are a fatal error.
AT_DATA([configure.ac],
[[AC_INIT
AC_CONFIG_HEADERS(config.h:config.hin)
AC_DEFINE(that, "whatever you want.")
]])

# The test suite goes too fast for the cache timestamps...
# Pass --force.
AT_CHECK_AUTOHEADER([--force], [], [1], [], [ignore])


# 3. Check TOP and BOTTOM.
AT_DATA([acconfig.h],
[[/* Top from acconfig.h. */
@TOP@
/* Middle from acconfig.h. */
@BOTTOM@
/* Bottom from acconfig.h. */
]])

AT_DATA([configure.ac],
[[AC_INIT
AC_CONFIG_HEADERS(config.h:config.hin)
AH_TOP([Top1 from configure.ac.])
AH_TOP([Top2 from configure.ac.])
AH_TOP([The Cat in a h@t.])
AH_VERBATIM([Middle], [Middle from configure.ac.])
AH_VERBATIM([Mouse],  [The Mouse in a h@t.])
AH_BOTTOM([Bottom1 from configure.ac.])
AH_BOTTOM([Bottom2 from configure.ac.])
AH_BOTTOM([The Dog in a h@t.])

AC_DEFINE([ANT], [@], [The Ant in a h@t.])
]])


# Yes, that's right: the 'middle' part of 'acconfig.h' is still before
# the AH_TOP part.  But so what, you're not supposed to use the two
# together.
# Ignore STDERR which is the longish complaint against autoheader junk
# files.
AT_CHECK_AUTOHEADER([--force], [ANT], [], [], [ignore])
AT_CHECK([cat config.hin], 0,
[[/* config.hin.  Generated from configure.ac by autoheader.  */
/* Top from acconfig.h. */
/* Middle from acconfig.h. */

Top1 from configure.ac.

Top2 from configure.ac.

The Cat in a h@t.

/* The Ant in a h@t. */
#undef ANT

Middle from configure.ac.

The Mouse in a h@t.

/* Define to the address where bug reports for this package should be sent. */
#undef PACKAGE_BUGREPORT

/* Define to the full name of this package. */
#undef PACKAGE_NAME

/* Define to the full name and version of this package. */
#undef PACKAGE_STRING

/* Define to the one symbol short name of this package. */
#undef PACKAGE_TARNAME

/* Define to the home page for this package. */
#undef PACKAGE_URL

/* Define to the version of this package. */
#undef PACKAGE_VERSION

Bottom1 from configure.ac.

Bottom2 from configure.ac.

The Dog in a h@t.
/* Bottom from acconfig.h. */
]])

AT_CLEANUP


# autoheader should see through m4 macros, just like autoconf
# https://lists.gnu.org/archive/html/bug-autoconf/2009-06/msg00000.html
AT_SETUP([autoheader and macros])

AT_DATA([configure.ac],
[[AC_INIT
AC_CONFIG_HEADERS([config.h])
m4_define([PETER], [SIMSALABIM])
m4_define([PAUL], [OPENSESAME])
AC_DEFINE([PETER], [10], [Peter's public info])
AC_DEFINE_UNQUOTED([PAUL], [`expr 4 + 6`], [Paul's public info])
AC_OUTPUT
]])

AT_CHECK_AUTOCONF
AT_CHECK_AUTOHEADER([], [OPENSESAME SIMSALABIM])
AT_CHECK([grep -c SIMSALABIM configure config.h.in], [0],
[[configure:1
config.h.in:1
]])
AT_CHECK([grep -c OPENSESAME configure config.h.in], [0],
[[configure:1
config.h.in:1
]])
AT_CHECK([grep -c PETER configure config.h.in], [1],
[[configure:0
config.h.in:0
]])
AT_CHECK([grep -c PAUL configure config.h.in], [1],
[[configure:0
config.h.in:0
]])

AT_CLEANUP


# autoheader should take all config header inputs into account when
# checking for missing templates.
AT_SETUP([autoheader with multiple headers])

AT_DATA([config-extra.h.in],
[[/* Define this to whatever you want. */
#undef HANNA
]])
AT_DATA([configure.ac],
[[AC_INIT
AC_CONFIG_HEADERS([config.h config-extra.h])
AC_DEFINE([HANNA], ["Hanna"])
AC_DEFINE([SEAN], ["Sean"], [Sean's name])
AC_OUTPUT
]])

AT_CHECK_AUTOCONF
AT_CHECK_AUTOHEADER([], [SEAN])
AT_CHECK([grep HANNA configure], [0], [ignore], [ignore])
AT_CHECK([grep HANNA config.h.in], [1], [ignore], [ignore])
AT_CHECK([grep SEAN configure], [0], [ignore], [ignore])
AT_CHECK([grep SEAN config.h.in], [0], [ignore], [ignore])

AT_CLEANUP

# autoheader should not clobber a hand-written config header template,
# even if it is the only one.
AT_SETUP([autoheader preserves a hand-written template])

AT_DATA([config.h.in],
[[/* Define this to whatever you want. */
#undef HANNA
]])

AT_DATA([configure.ac],
[[AC_INIT
AC_CONFIG_HEADERS([config.h])
AC_DEFINE([HANNA], ["Hanna"], [Define this however you want])
AC_DEFINE([SEAN], ["Sean"], [Sean's name])
AC_OUTPUT
]])

AT_CHECK_AUTOCONF
AT_CHECK([grep HANNA configure], [0], [ignore], [ignore])
AT_CHECK([grep SEAN configure],  [0], [ignore], [ignore])

AT_CHECK_AUTOHEADER([-Wall], [ignore], [0], [],
[autoheader: warning: config.h.in was not generated by autoheader
autoheader: warning: leaving it alone (force update with --replace-handwritten)
])

# autoreconf should not run autoheader either
AT_CHECK([autoreconf])

AT_CHECK([grep Generated config.h.in], [1], [ignore], [ignore])
AT_CHECK([grep however config.h.in],   [1], [ignore], [ignore])
AT_CHECK([grep whatever config.h.in],  [0], [ignore], [ignore])

AT_CHECK([grep HANNA config.h.in],     [0], [ignore], [ignore])
AT_CHECK([grep SEAN config.h.in],      [1], [ignore], [ignore])

AT_CHECK_AUTOHEADER([-Wall --replace-handwritten],
                    [HANNA SEAN], [0], [], [])

AT_CHECK([grep Generated config.h.in], [0], [ignore], [ignore])
AT_CHECK([grep however config.h.in],   [0], [ignore], [ignore])
AT_CHECK([grep whatever config.h.in],  [1], [ignore], [ignore])

AT_CLEANUP


# autoheader _should_ update an empty template file.
AT_SETUP([autoheader updates an empty template])

AT_DATA([config.h.in], [[]])

AT_DATA([configure.ac],
[[AC_INIT
AC_CONFIG_HEADERS([config.h])
AC_DEFINE([HANNA], ["Hanna"], [Define this however you want])
AC_DEFINE([SEAN], ["Sean"], [Sean's name])
AC_OUTPUT
]])

AT_CHECK_AUTOCONF
AT_CHECK([grep HANNA configure], [0], [ignore], [ignore])
AT_CHECK([grep SEAN configure],  [0], [ignore], [ignore])

AT_CHECK_AUTOHEADER([-Wall], [HANNA SEAN], [0], [], [])

AT_CHECK([grep Generated config.h.in], [0], [ignore], [ignore])
AT_CHECK([grep however config.h.in],   [0], [ignore], [ignore])

AT_CLEANUP


## ------------ ##
## autoupdate.  ##
## ------------ ##

# Check that AC_CANONICAL_SYSTEM and AC_OUTPUT are properly updated.
AT_SETUP([autoupdate])

AT_DATA([configure.ac],
[[AC_INIT(Test, 1.0)
AC_CANONICAL_SYSTEM
# The doc says 27 is a valid fubar.
fubar=27
AC_OUTPUT(Makefile, echo $fubar, fubar=$fubar)
]])

AT_DATA([expout],
[[AC_INIT([Test],[1.0])
AC_CANONICAL_TARGET
# The doc says 27 is a valid fubar.
fubar=27
AC_CONFIG_FILES([Makefile])
AC_CONFIG_COMMANDS([default],[echo $fubar],[fubar=$fubar])
AC_OUTPUT
]])

# Checking 'autoupdate'.
AT_CHECK_AUTOUPDATE
AT_CHECK([cat configure.ac], 0, [expout])
# Checking that 'autoupdate' is idempotent
AT_CHECK_AUTOUPDATE
AT_CHECK([cat configure.ac], 0, [expout])

AT_CLEANUP


# autoupdating AC_LINK_FILES
# --------------------------
AT_SETUP([autoupdating AC_LINK_FILES])

AT_DATA([configure.ac],
[[AC_INIT
AC_LINK_FILES(dst1 dst2, src1 src2)
AC_OUTPUT
]])

AT_DATA([dst1], dst1
)
AT_DATA([dst2], dst2
)

# Checking 'autoupdate'.
AT_CHECK_AUTOUPDATE([], 0, [], ignore)

# The replacement for AC_LINK_FILES includes a forced -Wobsolete
# warning, because it needs to be manually adjusted afterward.
# Look for it in the autoconf output.
AT_CHECK_AUTOCONF([], 0, [], stderr)
AT_CHECK([grep 'AC_LINK_FILES' stderr], 0, ignore, ignore)
AT_CHECK([grep 'AC_CONFIG_LINKS' stderr], 0, ignore, ignore)
AT_CHECK([grep 'warning: It is technically impossible' stderr],
         0, ignore, ignore)
AT_CHECK([grep 'tune the result yourself' stderr], 0, ignore, ignore)

AT_CHECK_CONFIGURE
AT_CHECK([cat src1], 0, [dst1
])
AT_CHECK([cat src2], 0, [dst2
])

AT_CLEANUP


# autoupdating AC_PREREQ
# ----------------------
AT_SETUP([autoupdating AC_PREREQ])

# Produce 'AC_PREREQ(<AUTOUPDATE VERSION>)'.
AT_CHECK([autoupdate --version | sed 's/.*) //;q'], 0, [stdout])
autoupdate_version=`cat stdout`
[echo "AC_PREREQ([$autoupdate_version])" >expout]

AT_CHECK([echo "AC_PREREQ(1.0)" | autoupdate -],
	 0, [expout], [])

AT_CHECK([echo "AC_PREREQ($autoupdate_version)" | autoupdate -],
	 0, [expout], [])

AT_CHECK([echo "AC_PREREQ(999.99)" | autoupdate -],
	 63, [], [ignore])

AT_CLEANUP


# autoupdating AU_ALIAS
# ---------------------
AT_SETUP([autoupdating AU_ALIAS])

AT_DATA([configure.ac],
[[AC_INIT
AC_DEFUN([FOO], [$#])
AU_ALIAS([BAZ],[FOO])
test "FOO:FOO():FOO(x) BAZ:BAZ():BAZ(x)" = "0:1:1 0:1:1" || exit 1
AC_PROG_CC
AC_WORDS_BIGENDIAN
AC_CONFIG_HEADERS([config.h])
AC_OUTPUT
]])

# Checking 'autoupdate'.
AT_CHECK_AUTOUPDATE

# autoupdate does not replace AU_DEFUNs/AU_ALIASes defined by
# configure.ac itself, nor by aclocal.m4, so BAZ will still be present
# in the updated configure.ac.  This is actually desirable for this
# test: the point of that part of the above configure.ac is to
# verify that the expansion of an AU_ALIAS definition handles $#
# correctly.  If BAZ got turned into FOO by the above call to
# autoupdate, we would need to run autoconf and configure twice in
# this test.  However, it does also mean that by default we get a
# -Wobsolete warning because of BAZ, so turn that off so it doesn't
# cause a spurious failure.
AT_CHECK_AUTOCONF([-Wno-obsolete])
AT_CHECK_AUTOHEADER([-Wno-obsolete], [
  AC_APPLE_UNIVERSAL_BUILD
  HAVE_INTTYPES_H
  HAVE_STDINT_H
  HAVE_STDIO_H
  HAVE_STDLIB_H
  HAVE_STRINGS_H
  HAVE_STRING_H
  HAVE_SYS_STAT_H
  HAVE_SYS_TYPES_H
  HAVE_UNISTD_H
  STDC_HEADERS
  WORDS_BIGENDIAN
])
AT_CHECK_CONFIGURE
AT_CHECK([grep 'AC_C_BIGENDIAN[(]' configure.ac], 1, [ignore], [ignore])
AT_CHECK([grep 'AC_C_BIGENDIAN' configure.ac], 0, [ignore], [ignore])

AT_CLEANUP


# autoupdating OLD to NEW
# -----------------------

# The example taken from the code comments.
AT_SETUP([autoupdating OLD to NEW])

AT_DATA([aclocal.m4],
[[AU_DEFUN([OLD], [NEW([$1, $2], m4@&t@_eval([$1 + $2]))])
AC_DEFUN([NEW], [echo "sum($1) = $2"])
]])

AT_DATA([configure.ac],
[[AC_INIT
OLD(1, 2)
NEW([0, 0], [0])
AC_OUTPUT
]])

# Checking 'autoupdate'.
AT_CHECK_AUTOUPDATE
AT_CHECK_AUTOCONF
AT_CHECK_CONFIGURE
AT_CHECK([[grep 'NEW(\[1, 2], *\[3])' configure.ac]], 0, [ignore], [ignore])
AT_CHECK([[grep 'NEW(\[0, 0], *\[0])' configure.ac]], 0, [ignore], [ignore])

AT_CLEANUP


# autoupdating macros recursively
# -------------------------------

AT_SETUP([autoupdating macros recursively])

AT_XFAIL_IF([:])

AT_DATA([configure.ac],
[[AC_INIT
AC_PROG_CC
AC_TRY_COMPILE([], [choke me], [echo bogus1],
	       [AC_TRY_COMPILE([], [return 0;], [echo good], [echo bogus2])])
AC_OUTPUT
]])

# Checking 'autoupdate'.
AT_CHECK_AUTOUPDATE
AT_CHECK([grep changequote configure.ac], [1])
AT_CHECK([grep TRY_COMPILE configure.ac], [1])
AT_CHECK_AUTOCONF
AT_CHECK_CONFIGURE

AT_CLEANUP


# autoupdating AC_HELP_STRING
# ---------------------------
AT_SETUP([autoupdating AC_HELP_STRING])

AT_DATA([configure.ac],
[[AC_INIT
AC_ARG_ENABLE([foo], [AC_HELP_STRING([--enable-foo], [foo bar])], [:], [:])
AC_OUTPUT
]])

# Checking 'autoupdate'.
AT_CHECK_AUTOUPDATE([], [], [], [ignore])
AT_CHECK_AUTOCONF
AT_CHECK_CONFIGURE([], [], [], [ignore])
AT_CHECK([[grep '\[--enable-foo], *\[foo bar]' configure.ac]], 0, [ignore], [ignore])

AT_CLEANUP


# autoupdating with m4sugar
# -------------------------
AT_SETUP([autoupdating with m4sugar])

AT_DATA([aclocal.m4],
[[AU_DEFUN([OLD],
[m4@&t@_pushdef([foo], [bar])dn@&t@l
echo "foo $1 foo"
m4@&t@_popdef([foo])dn@&t@l
])
]])

touch foo.in

AT_DATA([configure.ac],
[[AC_PREREQ(2.54)
m4_define([gnumeric_version_epoch], [1])
AC_INIT
OLD([ bla  bla ])
AC_FOREACH([name], [n1 n2],
           [echo name
])
AC_CHECKING([for feature])
AC_MSG_RESULT_UNQUOTED([`echo done`])

AC_OUTPUT([foo])
]])

# Checking 'autoupdate'.
AT_CHECK_AUTOUPDATE([], [], [], [ignore])
AT_CHECK_AUTOCONF
AT_CHECK_CONFIGURE([], [], [], [ignore])

AT_CLEANUP


# autoupdating with m4_pushdef
# ----------------------------
AT_SETUP([autoupdating with m4@&t@_pushdef])

AT_XFAIL_IF([:])

touch foo.in
AT_DATA([configure.ac],
[[AC_INIT
AC_PROG_CC
# temporarily override this macro
m4@&t@_pushdef([AC_MSG_RESULT_UNQUOTED], [:])
AC_C_BIGENDIAN
m4@&t@_popdef([AC_MSG_RESULT_UNQUOTED])
AC_OUTPUT
]])

# Checking 'autoupdate'.
AT_CHECK_AUTOUPDATE([], [], [], [ignore])
AT_CHECK([grep changequote configure.ac], [1])
AT_CHECK([grep [pushdef.*AC_MSG_RESULT_UNQUOTED] configure.ac], [0], [ignore])
AT_CHECK_AUTOCONF
AT_CHECK_CONFIGURE([], [], [], [ignore])

AT_CLEANUP


# autoupdating with AC_REQUIRE
# ----------------------------
AT_SETUP([autoupdating with AC_REQUIRE])

AT_XFAIL_IF([:])

AT_DATA([configure.ac],
[[AC_DEFUN([MACRO],
[AC_REQUIRE([AC_DECL_SYS_SIGLIST])
AC_CHECK_DECLS([_sys_siglist], [], [], [#include <signal.h>])
])

AC_INIT
MACRO
AC_OUTPUT
]])

# Checking 'autoupdate'.
AT_CHECK_AUTOUPDATE([], [], [], [ignore])
AT_CHECK_AUTOCONF
AT_CHECK_CONFIGURE([], [], [], [ignore])

AT_CLEANUP


# autoupdating with complex quoting
# ---------------------------------
AT_SETUP([autoupdating with complex quoting])

AT_XFAIL_IF([:])

AT_DATA([configure.ac],
[[m4_define([MACRO],
[[#define STRING "hello, world\n"
]])

AC_INIT
AC_TRY_COMPILE([#include <stdio.h>
	       ]MACRO[], [printf (STRING);],
	       [], [AS_EXIT([1])])
AC_OUTPUT
]])

# Checking 'autoupdate'.
AT_CHECK_AUTOUPDATE([], [], [], [ignore])
AT_CHECK_AUTOCONF
AT_CHECK([grep MACRO configure], [1])
AT_CHECK_CONFIGURE([], [], [], [ignore])

AT_CLEANUP


# autoupdating AC_LANG_SAVE
# -------------------------
AT_SETUP([autoupdating AC_LANG_SAVE])

AT_DATA([configure.ac],
[[AC_INIT
AC_LANG_SAVE
AC_LANG_RESTORE
AC_LANG_SAVE
AC_LANG_RESTORE
AC_OUTPUT
]])

# Checking 'autoupdate'.

# Both the autoupdate and autoconf invocations will complain about
# AC_LANG_SAVE being obsolete, because autoupdate cannot replace
# two-macro sequences (e.g. AC_LANG_SAVE \n AC_LANG([C]) ideally would
# become AC_LANG_PUSH([C]) but we can't do that) so an m4_warn
# is left in place to remind people they need to do some hand edits.
# Ignore these diagnostics.
AT_CHECK_AUTOUPDATE([], [], [], [ignore])
AT_CHECK_AUTOCONF([], [], [], [ignore])
AT_CHECK_CONFIGURE

AT_CLEANUP


# autoupdating AC_FOREACH
# -----------------------
AT_SETUP([autoupdating AC_FOREACH])

AT_DATA([aclocal.m4],
[[AU_DEFUN([OLD], [AC_FOREACH([myvar], [4 5 6], [' myvar'])])
]])

AT_DATA([configure.ac],
[[AC_INIT
echo AC_FOREACH([myvar], [1 2 3], [' myvar'])OLD
AC_OUTPUT
]])

# Checking 'autoupdate'.
# AC_FOREACH is replaced with an m4sugar macro, so we must make sure
# the m4sugar macro wasn't expanded.
AT_CHECK_AUTOUPDATE
AT_CHECK([[grep 'm4@&t@_foreach_w' configure.ac]], 0, [ignore], [ignore])
AT_CHECK([[grep 'echo 1 2 3 4 5 6' configure.ac]], 1, [ignore], [ignore])
AT_CHECK([[grep "echo ' 1'' 2'' 3'' 4'' 5'' 6'" configure.ac]], 1,
         [ignore], [ignore])
AT_CHECK_AUTOCONF
AT_CHECK_CONFIGURE([], [0], [stdout])
AT_CHECK([[grep ' 1 2 3 4 5 6' stdout]], 0, [ignore], [ignore])

AT_CLEANUP

# autoupdating AC_OBSOLETE
# ------------------------
AT_SETUP([autoupdating AC_OBSOLETE])

AT_DATA([aclocal.m4],
[[AC_DEFUN([OLD],
[AC_OBSOLETE([$0], [; convert to NEW])
NEW([$2], [$1])])
AC_DEFUN([NEW],
[AS@&t@_ECHO(["dst=$1 src=$2"])])
]])

AT_DATA([configure.ac],
[[AC_INIT
OLD([src], [dst])
AC_OUTPUT
]])

AT_CHECK_AUTOCONF([-Werror], 1, [],
[[configure.ac:2: warning: OLD is obsolete; convert to NEW
general.m4: AC_OBSOLETE is expanded from...
aclocal.m4:1: OLD is expanded from...
configure.ac:2: the top level
configure.ac:2: warning: The macro 'AC_OBSOLETE' is obsolete.
configure.ac:2: You should run autoupdate.
general.m4: AC_OBSOLETE is expanded from...
aclocal.m4:1: OLD is expanded from...
configure.ac:2: the top level
]])

# autoupdate does not know how to replace OLD with NEW
AT_CHECK_AUTOUPDATE
AT_CHECK([[grep OLD configure.ac]], 0, [ignore], [ignore])

# autoupdate _does_ know how to remove AC_OBSOLETE from aclocal.m4
AT_CHECK_AUTOUPDATE([aclocal.m4], 0, [],
[[aclocal.m4:2: warning: if possible, define this macro using AU_DEFUN.
]])

# AC_OBSOLETE is replaced with an m4sugar macro, so we must make sure
# the m4sugar macro wasn't expanded.
AT_CHECK([[grep 'm4@&t@_warn' aclocal.m4]], 0, [ignore], [ignore])
AT_CHECK([[grep 'if possible, define this' aclocal.m4]], 0, [ignore], [ignore])
AT_CHECK([[grep 'AC_OBSOLETE(' aclocal.m4]], 1, [ignore], [ignore])

AT_CHECK_AUTOCONF([-Wobsolete -Wno-error], 0, [],
[[configure.ac:2: warning: if possible, define this macro using AU_DEFUN.
aclocal.m4:1: OLD is expanded from...
configure.ac:2: the top level
configure.ac:2: warning: OLD is obsolete; convert to NEW
aclocal.m4:1: OLD is expanded from...
configure.ac:2: the top level
]])

AT_CHECK_CONFIGURE([], 0,
[[dst=dst src=src
configure: creating ./config.status
]])

AT_CLEANUP


# autoupdating AC_DIAGNOSE and AC_WARNING
-----------------------------------------
AT_SETUP([autoupdating AC_DIAGNOSE and AC_WARNING])

AT_DATA([configure.ac],
[[AC_INIT
AC_DIAGNOSE([gnu], [The gnu has escaped])
AC_WARNING([funny punctu&tion])
AC_OUTPUT
]])

# Checking 'autoupdate'.
# AC_DIAGNOSE and AC_WARNING are replaced with m4sugar macros, so we
# must make sure the m4sugar macros weren't expanded.
AT_CHECK_AUTOUPDATE
AT_CHECK([[grep 'm4@&t@_warn' configure.ac]], 0, [ignore], [ignore])
AT_CHECK([[grep 'The gnu has escaped' configure.ac]], 0, [ignore], [ignore])
AT_CHECK([[grep 'funny punctu&tion' configure.ac]], 0, [ignore], [ignore])

# The diagnostics should appear when autoconf is run.
AT_CHECK_AUTOCONF([-Wall], [0], [],
[[configure.ac:2: warning: The gnu has escaped
configure.ac:3: warning: funny punctu&tion
]])
AT_CHECK_CONFIGURE

AT_CLEANUP


# autoupdating AC_FATAL
-----------------------
AT_SETUP([autoupdating AC_FATAL])

AT_DATA([configure.ac],
[[AC_INIT
AC_FATAL([what did you do this time])
AC_OUTPUT
]])

# Checking 'autoupdate'.
# AC_FATAL is replaced with a m4sugar macro, so we
# must make sure the m4sugar macro wasn't expanded.
AT_CHECK_AUTOUPDATE
AT_CHECK([[grep 'm4@&t@_fatal' configure.ac]], 0, [ignore], [ignore])
AT_CHECK([[grep 'what did you do this time' configure.ac]],
         0, [ignore], [ignore])

# The diagnostic should appear when autoconf is run.
AT_CHECK_AUTOCONF([-Wall], [1], [],
[[configure.ac:2: error: what did you do this time
configure.ac:2: the top level
autom4te: error: m4 failed with exit status: 1
]])
AT_CHECK([[test \! -f configure]])

AT_CLEANUP


# autoupdating with aclocal and m4_include
# ----------------------------------------
AT_SETUP([autoupdating with aclocal and m4@&t@_include])

AT_REQUIRE_ACLOCAL

mkdir m4 aclocal
AT_DATA([configure.ac],
[[AC_INIT(x,0)
AC_UNCHANGED_MACRO
AC_OLD_MACRO
AC_OUTPUT
]])
AT_DATA([m4/stuff.m4],
[[AU_ALIAS([AC_OLD_MACRO], [AC_NEW_MACRO])
AC_DEFUN([AC_NEW_MACRO], [echo hi])
AC_DEFUN([AC_UNCHANGED_MACRO], [echo one])
]])
cp m4/stuff.m4 aclocal/stuff.m4
AT_CHECK([$ACLOCAL -I aclocal], [0], [ignore], [ignore])
# Checking 'autoupdate'.
AT_CHECK_AUTOUPDATE
AT_CHECK([$ACLOCAL -I m4], [0], [ignore], [ignore])
AT_CHECK_AUTOUPDATE

AT_CLEANUP


# Keeping autom4te.cfg complete
# -----------------------------

AT_SETUP([autom4te preselections])

AT_REQUIRE_AUTOMAKE
AT_REQUIRE_ACLOCAL

# This user configuration file will interfere with this test.
AT_CHECK([test ! -f $HOME/.autom4te.cfg || exit 77], [], [ignore], [ignore])

AT_DATA([configure.ac],
[[AC_INIT(GNU foo, 1.0)
AM_INIT_AUTOMAKE
AC_CONFIG_FILES([Makefile])
AC_OUTPUT
]])

AT_DATA([Makefile.am],
[[AUTOMAKE_OPTIONS = foreign
]])

AT_MTIME_DELAY

# If Autoconf is too old, or the user has turned caching off, skip:
AT_CHECK([$ACLOCAL || { ret=$?; test $ret -eq 63 && ret=77; exit $ret; }],
         [], [], [ignore])
AT_CHECK([test -d autom4te.cache || exit 77])
AT_CHECK([autoconf])

# On a file system with coarse timestamp resolution (1 or 2s),
# configure and autom4te's cache files can easily have equal
# timestamps, in which case autom4te will consider the cache
# to be stale.  Ensure configure's timestamp is newer.
AT_MTIME_DELAY
touch configure

# If this test fails due to missing entries in lib/autom4te.in, then
# comparing the old and new requests is a good place to start debugging:
sort autom4te.cache/requests >old-requests

# if 'configure' is regenerated, we want it to be strictly newer,
# to catch the error consistently.
echo newer >newer
AT_MTIME_DELAY

AT_CHECK([$ACLOCAL], [], [], [ignore])
AT_CHECK([automake --no-force --add-missing], [], [], [ignore])
AT_CHECK([autoconf])
AT_CHECK([test "`find configure -newer newer`" = "" ||
	  { sort autom4te.cache/requests | diff old-requests -; exit 1; }],
	 [], [], [],
	 [extract_version=['s/^[^0-9]*\([0-9][^ ]*\).*/\1/;q']
	  automake_version=`automake --version | sed "$extract_version"`
	  used_automake_version=`sed "$extract_version" "$abs_top_srcdir/Makefile.in"`
	  AT_CHECK([if test "$automake_version" = "$used_automake_version"; ]dnl
		    [then exit 1; else exit 77; fi])])
AT_CLEANUP


# autom4te cache creation
# -----------------------
# Ensure autom4te fails when it cannot create the cache directory
# or create files there.
AT_SETUP([autom4te cache creation])

AT_CHECK([test ! -f $HOME/.autom4te.cfg || exit 77], [], [ignore], [ignore])

# Work in a subdirectory so autotest can scribble in the toplevel.
mkdir sub
chmod a-w sub

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

AT_DATA([.autom4te.cfg],
[[begin-language: "Autoconf-without-aclocal-m4"
args: --cache=sub/autom4te.cache
end-language: "Autoconf-without-aclocal-m4"
]])

# Do not try this when we are root or on systems without permissions.
# A failed redirection may cause a status of 2 with FreeBSD sh.
AT_CHECK([(: > sub/some-file) || exit 1 && exit 77], 1, [ignore], [ignore])

# Failure to create cache directory due to access permissions.
AT_CHECK_AUTOCONF([], [1], [ignore], [stderr])
AT_CHECK([grep 'cannot create .*autom4te.cache' stderr], [0], [ignore])
AT_CHECK([grep ': Permission denied' stderr], [0], [ignore])
AT_CHECK([test -f configure], [1])

# Failure to create cache directory due to something else in the way.
chmod u+w sub
: > sub/autom4te.cache
AT_CHECK_AUTOCONF([], [1], [ignore], [stderr])
AT_CHECK([grep 'cannot create .*autom4te.cache' stderr], [0], [ignore])
AT_CHECK([grep ': File exists' stderr], [0], [ignore])
AT_CHECK([test -f configure], [1])

# This time, creation should succeed.
rm -f sub/autom4te.cache
AT_CHECK_AUTOCONF
AT_CHECK([test -d sub/autom4te.cache])

rm -f configure sub/autom4te.cache/*
chmod a-w sub/autom4te.cache

# Failure to create a file in the cache directory.
AT_CHECK_AUTOCONF([], [1], [ignore], [stderr])
AT_CHECK([grep 'cannot open .*autom4te.cache' stderr], [0], [ignore])
AT_CHECK([test -f configure], [1])

# If the directory already exists, that should be fine.
chmod u+w sub/autom4te.cache
AT_CHECK_AUTOCONF

AT_CLEANUP


# autom4te cache locking
# ----------------------

AT_SETUP([autom4te cache locking])

# Expect this test to fail if Perl file locking does not work.
AT_XFAIL_IF([$PERL -I "$top_srcdir/lib" -e '
		 use Autom4te::XFile;
		 my $fh = new Autom4te::XFile "lockfile", O_RDWR|O_CREAT;
		 flock ($fh, LOCK_EX) && exit 1;
	       '])

# Cannot use AT_CHECK here, autotest internals could be messed up.
# This sleep is not because of file timestamps, it's to make the
# locks conflict.
(echo AC_INIT; sleep 2; echo) \
  | (autom4te --language=autoconf -o configure -; echo $? >&2 ) 2>errlog &
AT_CHECK([echo AC_INIT | autom4te --language=autoconf -o configure -])
wait

# Ignore additional output from shell verbose or xtrace mode.
AT_CHECK([grep 'cannot rename' errlog], [1])
AT_CHECK([grep '^0$' errlog], [], [ignore])
AT_CHECK_CONFIGURE

AT_CLEANUP


# autotools and file names containing whitespace
# ----------------------------------------------

AT_SETUP([autotools and whitespace in file names])

AT_SUPPRESS_ACLOCAL

x=
export x
rm -f a b
for funny in \
  'with  funny '\'' $x & #! name ' \
  'with  funny \ '\'' \'\'' " <a >b * ? name ' #"
do
  funny=`func_sanitize_file_name "$funny"`
  file=" file $funny"
  dir=`func_sanitize_dir_name " dir $funny"`
  TMPDIR="./ tmp$dir"
  export TMPDIR

  # skip if we cannot create such a file or directory
  AT_CHECK([mkdir "$dir" "$TMPDIR" && touch "$file.ac" || exit 77])

  cat >"$file.ac" <<'END'
[AC_INIT(x,0)
m4@&t@_include([foo.m4])
AC_CONFIG_HEADERS([config.h:config.hin])
AC_MACRO
AC_OUTPUT]
END
  cat >"$dir"/foo.m4 <<'END'
[AC_DEFUN([AC_MACRO], [echo hi])]
END

  AT_CHECK_AUTOHEADER([-B "$dir" "$file.ac"])
  AT_CHECK_AUTOHEADER([--force -I "$dir" "$file.ac"])
  AT_CHECK_AUTOUPDATE([-B "$dir" "$file.ac"])
  AT_CHECK_AUTOUPDATE([--force -I "$dir" "$file.ac"])
  AT_CHECK_AUTOUPDATE([-B "$dir" - < "$file.ac"], [], [ignore])
  AT_CHECK_AUTOCONF([-B "$dir" -o "$file" "$file.ac"])
  AT_CHECK_AUTOCONF([-I "$dir" -o "$file" "$file.ac"])
  # In autoconf, these exercise a slightly different code path:
  AT_CHECK_AUTOCONF([--prepend-include="$dir" -o "$file" "$file.ac"])
  AT_CHECK_AUTOCONF([--include="$dir" -o "$file" "$file.ac"])
  AT_CHECK([autoscan -B "$dir"], [], [], [ignore])
  AT_CHECK([autoscan --force -I "$dir"], [], [], [ignore])
  # autoreconf requires a sane input file name.
  mv -f "$file.ac" configure.ac
  AT_CHECK([autoreconf -B "$dir"])
  AT_CHECK([autoreconf --force -I "$dir"])

  cat >"$file.c" <<'END'
#if FOO
#endif
END
  AT_CHECK([ifnames "$file.c"], [], [ignore])

  test ! -f b
done

AT_CLEANUP

# autotools and file names containing whitespace
# ----------------------------------------------

AT_SETUP([autotools and relative TMPDIR])

AT_REQUIRE_ACLOCAL

mkdir _tmp
TMPDIR=_tmp
export TMPDIR

AT_DATA([configure.ac],
[[AC_INIT(x,0)
AC_CONFIG_HEADERS([config.h:config.hin])
AC_MACRO
AC_OUTPUT
]])

mkdir m4
AT_DATA([m4/foo.m4],
[[AC_DEFUN([AC_MACRO],
[AC_DEFINE([HAVE_MACROS], 1, [Define if you have macros.])])
]])

AT_CHECK([$ACLOCAL -I m4])
AT_CHECK_AUTOHEADER([], [HAVE_MACROS])
AT_CHECK_AUTOCONF
AT_CHECK_CONFIGURE

AT_CLEANUP
