Blame tests/tools.at

Packit 47b4ca
#							-*- Autotest -*-
Packit 47b4ca
Packit 47b4ca
AT_BANNER([Executables (autoheader, autoupdate...).])
Packit 47b4ca
Packit 47b4ca
# Copyright (C) 2000-2001, 2003-2004, 2006-2012 Free Software
Packit 47b4ca
# Foundation, Inc.
Packit 47b4ca
#
Packit 47b4ca
# This program is free software: you can redistribute it and/or modify
Packit 47b4ca
# it under the terms of the GNU General Public License as published by
Packit 47b4ca
# the Free Software Foundation, either version 3 of the License, or
Packit 47b4ca
# (at your option) any later version.
Packit 47b4ca
#
Packit 47b4ca
# This program is distributed in the hope that it will be useful,
Packit 47b4ca
# but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 47b4ca
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit 47b4ca
# GNU General Public License for more details.
Packit 47b4ca
#
Packit 47b4ca
# You should have received a copy of the GNU General Public License
Packit 47b4ca
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
Packit 47b4ca
Packit 47b4ca
Packit 47b4ca
## ----------------------------- ##
Packit 47b4ca
## Syntax of the shell scripts.  ##
Packit 47b4ca
## ----------------------------- ##
Packit 47b4ca
Packit 47b4ca
# We use `/bin/sh -n script' to check that there are no syntax errors
Packit 47b4ca
# in the scripts.  Although incredible, there are /bin/sh that go into
Packit 47b4ca
# endless loops with `-n', e.g., SunOS's:
Packit 47b4ca
#
Packit 47b4ca
#   $ uname -a
Packit 47b4ca
#   SunOS ondine 4.1.3 2 sun4m unknown
Packit 47b4ca
#   $ cat endless.sh
Packit 47b4ca
#   while false
Packit 47b4ca
#   do
Packit 47b4ca
#     :
Packit 47b4ca
#   done
Packit 47b4ca
#   exit 0
Packit 47b4ca
#   $ time sh endless.sh
Packit 47b4ca
#   sh endless.sh  0,02s user 0,03s system 78% cpu 0,064 total
Packit 47b4ca
#   $ time sh -nx endless.sh
Packit 47b4ca
#   ^Csh -nx endless.sh  3,67s user 0,03s system 63% cpu 5,868 total
Packit 47b4ca
#
Packit 47b4ca
# So before using `/bin/sh -n' to check our scripts, we first check
Packit 47b4ca
# that `/bin/sh -n' is not broken to death.
Packit 47b4ca
Packit 47b4ca
AT_SETUP([Syntax of the shell scripts])
Packit 47b4ca
Packit 47b4ca
AT_CHECK([test "$ac_cv_sh_n_works" = yes || exit 77])
Packit 47b4ca
Packit 47b4ca
# Specify the absolute name of the tool, as some shells don't honor PATH when
Packit 47b4ca
# running `sh PROG'.
Packit 47b4ca
Packit 47b4ca
AT_CHECK_SHELL_SYNTAX(["$abs_top_builddir/bin/autoconf"])
Packit 47b4ca
AT_CHECK_SHELL_SYNTAX(["$abs_top_builddir/tests/autoconf"])
Packit 47b4ca
AT_CHECK_SHELL_SYNTAX(["$abs_top_builddir/tests/testsuite"])
Packit 47b4ca
Packit 47b4ca
# These are not built, they are in the src tree.
Packit 47b4ca
AT_CHECK_SHELL_SYNTAX(["$abs_top_srcdir/build-aux/install-sh"])
Packit 47b4ca
AT_CHECK_SHELL_SYNTAX(["$abs_top_srcdir/build-aux/missing"])
Packit 47b4ca
Packit 47b4ca
AT_CLEANUP
Packit 47b4ca
Packit 47b4ca
Packit 47b4ca
Packit 47b4ca
Packit 47b4ca
## ---------------------------- ##
Packit 47b4ca
## Syntax of the Perl scripts.  ##
Packit 47b4ca
## ---------------------------- ##
Packit 47b4ca
Packit 47b4ca
AT_SETUP([Syntax of the Perl scripts])
Packit 47b4ca
Packit 47b4ca
AT_CHECK_PERL_SYNTAX([autoheader])
Packit 47b4ca
AT_CHECK_PERL_SYNTAX([autom4te])
Packit 47b4ca
AT_CHECK_PERL_SYNTAX([autoreconf])
Packit 47b4ca
AT_CHECK_PERL_SYNTAX([autoscan])
Packit 47b4ca
AT_CHECK_PERL_SYNTAX([autoupdate])
Packit 47b4ca
AT_CHECK_PERL_SYNTAX([ifnames])
Packit 47b4ca
Packit 47b4ca
AT_CLEANUP
Packit 47b4ca
Packit 47b4ca
Packit 47b4ca
Packit 47b4ca
Packit 47b4ca
## ------------------ ##
Packit 47b4ca
## autom4te's cache.  ##
Packit 47b4ca
## ------------------ ##
Packit 47b4ca
Packit 47b4ca
AT_SETUP([autom4te cache])
Packit 47b4ca
Packit 47b4ca
AT_DATA_M4SUGAR([[script.4s]],
Packit 47b4ca
[[m4_include([foo])
Packit 47b4ca
]])
Packit 47b4ca
Packit 47b4ca
# Everything is OK.
Packit 47b4ca
touch foo
Packit 47b4ca
AT_CHECK_M4SUGAR
Packit 47b4ca
Packit 47b4ca
# We moved a file: it should fail
Packit 47b4ca
mkdir sub
Packit 47b4ca
mv foo sub
Packit 47b4ca
AT_CHECK_M4SUGAR([], [1], [],
Packit 47b4ca
[m4:script.4s:1: cannot open `foo': No such file or directory
Packit 47b4ca
autom4te: m4 failed with exit status: 1
Packit 47b4ca
])
Packit 47b4ca
Packit 47b4ca
# But if we change the main file, then we should no longer complain of
Packit 47b4ca
# missing files.
Packit 47b4ca
AT_DATA_M4SUGAR([[script.4s]],
Packit 47b4ca
[[m4_include([sub/foo])
Packit 47b4ca
]])
Packit 47b4ca
AT_CHECK_M4SUGAR
Packit 47b4ca
Packit 47b4ca
AT_CLEANUP
Packit 47b4ca
Packit 47b4ca
Packit 47b4ca
# autom4te --force
Packit 47b4ca
# ----------------
Packit 47b4ca
Packit 47b4ca
AT_SETUP([autom4te --force])
Packit 47b4ca
Packit 47b4ca
AT_DATA([file.m4],
Packit 47b4ca
[[right
Packit 47b4ca
]])
Packit 47b4ca
AT_CHECK_AUTOM4TE([-o file file.m4])
Packit 47b4ca
Packit 47b4ca
# Create a file whose time stamp is in the future.
Packit 47b4ca
# (next year)-01-01 00:01 UTC should always be in the future,
Packit 47b4ca
# even on slow machines.
Packit 47b4ca
echo BAD >file
Packit 47b4ca
this_year=`TZ=UTC0 date +%Y`
Packit 47b4ca
AS_VAR_ARITH([next_year], [$this_year + 1])
Packit 47b4ca
TZ=UTC0 touch -t ${next_year}01010001 file
Packit 47b4ca
Packit 47b4ca
AT_CHECK_AUTOM4TE([--force -o file file.m4])
Packit 47b4ca
AT_CHECK([cat file], 0,
Packit 47b4ca
[[right
Packit 47b4ca
]])
Packit 47b4ca
Packit 47b4ca
AT_CLEANUP
Packit 47b4ca
Packit 47b4ca
Packit 47b4ca
# autom4te and file names containing whitespace
Packit 47b4ca
# ---------------------------------------------
Packit 47b4ca
Packit 47b4ca
AT_SETUP([autom4te and whitespace in file names])
Packit 47b4ca
Packit 47b4ca
x=
Packit 47b4ca
export x
Packit 47b4ca
rm -f a b
Packit 47b4ca
for funny in \
Packit 47b4ca
  'with  funny '\'' $x & #! name' \
Packit 47b4ca
  'with  funny \ '\'' \'\'' " b * ? name ' # "restore font-lock
Packit 47b4ca
do
Packit 47b4ca
  funny=`func_sanitize_file_name "$funny"`
Packit 47b4ca
  file=" file $funny"
Packit 47b4ca
  outfile="$file out "
Packit 47b4ca
  dir=`func_sanitize_dir_name " dir $funny"`
Packit 47b4ca
  cachedir=" cache$dir"
Packit 47b4ca
  TMPDIR=" tmp$dir"
Packit 47b4ca
  export TMPDIR
Packit 47b4ca
Packit 47b4ca
  # skip if we cannot create such a file or directory
Packit 47b4ca
  AT_CHECK([mkdir "$dir" "$cachedir" "$TMPDIR" && touch "$file" || exit 77])
Packit 47b4ca
Packit 47b4ca
  cat >"$file" <<'END'
Packit 47b4ca
[m4@&t@_init[]m4@&t@_include(foo.m4)
Packit 47b4ca
m4@&t@_divert([])d@&t@nl
Packit 47b4ca
FOO]
Packit 47b4ca
END
Packit 47b4ca
  cat >"$dir"/foo.m4 <<'END'
Packit 47b4ca
[m4@&t@_define([FOO], [bar])]
Packit 47b4ca
END
Packit 47b4ca
Packit 47b4ca
  AT_CHECK_AUTOM4TE([-C "$cachedir" -B "$dir" --language=m4sugar -o "$outfile" "$file"])
Packit 47b4ca
  AT_CHECK([cat "$outfile"], [],
Packit 47b4ca
  [[bar
Packit 47b4ca
]])
Packit 47b4ca
  rm -rf "$outfile" "$cachedir"
Packit 47b4ca
  AT_CHECK_AUTOM4TE([-C "$cachedir" -I "$dir" --language=m4sugar -o "$outfile" "$file"])
Packit 47b4ca
  AT_CHECK([cat "$outfile"], [],
Packit 47b4ca
  [[bar
Packit 47b4ca
]])
Packit 47b4ca
Packit 47b4ca
  # This exercises a slightly different code path and will catch an open with
Packit 47b4ca
  # trailing whitespace:
Packit 47b4ca
  cat >"$file" <<'END'
Packit 47b4ca
[m4@&t@_init[]m4@&t@_include(foo.m4)
Packit 47b4ca
m4@&t@_pattern_forbid([^bar$])
Packit 47b4ca
m4@&t@_divert([])d@&t@nl
Packit 47b4ca
FOO]
Packit 47b4ca
END
Packit 47b4ca
  rm -rf "$outfile" "$cachedir"
Packit 47b4ca
  AT_CHECK_AUTOM4TE([-C "$cachedir" -I "$dir" --language=m4sugar -o "$outfile" "$file"],
Packit 47b4ca
		    [1], [], [stderr])
Packit 47b4ca
  AT_CHECK([grep 'possibly undefined macro' stderr], [], [ignore])
Packit 47b4ca
Packit 47b4ca
  cat >"$file" <<'END'
Packit 47b4ca
[m4@&t@_init[]m4@&t@_include(foo.m4)
Packit 47b4ca
m4@&t@_divert([])d@&t@nl]
Packit 47b4ca
END
Packit 47b4ca
  rm -rf "$file.m4f"
Packit 47b4ca
  AT_CHECK_AUTOM4TE([-C "$cachedir" -I "$dir" --language=m4sugar --freeze -o "$file.m4f" "$file"])
Packit 47b4ca
  AT_CHECK([test -s "$file.m4f"])
Packit 47b4ca
Packit 47b4ca
  # Check --reload-state
Packit 47b4ca
  AT_CHECK_AUTOM4TE([-C "$cachedir" --language=m4sugar -o "$outfile" "$file.m4f" /dev/null])
Packit 47b4ca
Packit 47b4ca
  test ! -f b
Packit 47b4ca
done
Packit 47b4ca
Packit 47b4ca
AT_CLEANUP
Packit 47b4ca
Packit 47b4ca
Packit 47b4ca
# autom4te --trace and unusual macro names
Packit 47b4ca
# ----------------------------------------
Packit 47b4ca
Packit 47b4ca
AT_SETUP([autom4te --trace and unusual macro names])
Packit 47b4ca
Packit 47b4ca
AT_DATA([file.m4],
Packit 47b4ca
[[
Packit 47b4ca
]])
Packit 47b4ca
AT_CHECK_AUTOM4TE([-t 'TR A CE' -t 'TR(A)CE' file.m4])
Packit 47b4ca
Packit 47b4ca
AT_CLEANUP
Packit 47b4ca
Packit 47b4ca
Packit 47b4ca
AT_SETUP([autom4te --trace and whitespace])
Packit 47b4ca
Packit 47b4ca
dnl line numbering differs between m4 1.4.6 and 1.4.13 if we don't
Packit 47b4ca
dnl go through a single line wrapper
Packit 47b4ca
AT_DATA_M4SUGAR([file.m4],
Packit 47b4ca
[[m4_define([foo], [m4_echo([  a
Packit 47b4ca
b	c  ], [\
Packit 47b4ca
d\
Packit 47b4ca
])])
Packit 47b4ca
foo
Packit 47b4ca
]])
Packit 47b4ca
AT_CHECK_AUTOM4TE([--language=m4sugar -t 'm4@&t@_echo' file.m4], [0],
Packit 47b4ca
[[file.m4:5:m4@&t@_echo: a b c :d
Packit 47b4ca
]])
Packit 47b4ca
Packit 47b4ca
AT_CLEANUP
Packit 47b4ca
Packit 47b4ca
Packit 47b4ca
## ------------------ ##
Packit 47b4ca
## autoconf --trace.  ##
Packit 47b4ca
## ------------------ ##
Packit 47b4ca
Packit 47b4ca
Packit 47b4ca
# autoconf --trace: user macros
Packit 47b4ca
# -----------------------------
Packit 47b4ca
AT_SETUP([autoconf --trace: user macros])
Packit 47b4ca
Packit 47b4ca
AT_DATA([configure.ac],
Packit 47b4ca
[[m4_define([active], [ACTIVE])
Packit 47b4ca
m4_define([TRACE1], [TRACE2(m4_shift($@))])
Packit 47b4ca
m4_define([TRACE2], [[$2], $1])
Packit 47b4ca
Packit 47b4ca
# No arguments.
Packit 47b4ca
TRACE1
Packit 47b4ca
TRACE2
Packit 47b4ca
Packit 47b4ca
# With arguments, single line.
Packit 47b4ca
TRACE1(foo, @bar, @baz)
Packit 47b4ca
TRACE1(foo, TRACE1(bar, baz))
Packit 47b4ca
TRACE1(foo, active, baz)
Packit 47b4ca
TRACE1(foo, [active], TRACE1(active, [active]))
Packit 47b4ca
]])
Packit 47b4ca
Packit 47b4ca
# Several --traces.
Packit 47b4ca
AT_CHECK_AUTOCONF([-t TRACE1 -t TRACE2], 0,
Packit 47b4ca
[[configure.ac:6:TRACE1:
Packit 47b4ca
configure.ac:6:TRACE2:
Packit 47b4ca
configure.ac:7:TRACE2:
Packit 47b4ca
configure.ac:10:TRACE1:foo:@bar:@baz
Packit 47b4ca
configure.ac:10:TRACE2:@bar:@baz
Packit 47b4ca
configure.ac:11:TRACE1:bar:baz
Packit 47b4ca
configure.ac:11:TRACE2:baz
Packit 47b4ca
configure.ac:11:TRACE1:foo::baz
Packit 47b4ca
configure.ac:11:TRACE2::baz
Packit 47b4ca
configure.ac:12:TRACE1:foo:ACTIVE:baz
Packit 47b4ca
configure.ac:12:TRACE2:ACTIVE:baz
Packit 47b4ca
configure.ac:13:TRACE1:ACTIVE:active
Packit 47b4ca
configure.ac:13:TRACE2:active
Packit 47b4ca
configure.ac:13:TRACE1:foo:active::ACTIVE
Packit 47b4ca
configure.ac:13:TRACE2:active::ACTIVE
Packit 47b4ca
]])
Packit 47b4ca
Packit 47b4ca
# Several line requests.
Packit 47b4ca
AT_CHECK_AUTOCONF([[-t TRACE1:'
Packit 47b4ca
[$1], [$2], [$3].']], 0,
Packit 47b4ca
[[
Packit 47b4ca
[], [], [].
Packit 47b4ca
Packit 47b4ca
[foo], [@bar], [@baz].
Packit 47b4ca
Packit 47b4ca
[bar], [baz], [].
Packit 47b4ca
Packit 47b4ca
[foo], [], [baz].
Packit 47b4ca
Packit 47b4ca
[foo], [ACTIVE], [baz].
Packit 47b4ca
Packit 47b4ca
[ACTIVE], [active], [].
Packit 47b4ca
Packit 47b4ca
[foo], [active], [].
Packit 47b4ca
]])
Packit 47b4ca
Packit 47b4ca
# ${sep}@.
Packit 47b4ca
AT_CHECK_AUTOCONF([-t TRACE2:'${)===(}@'], 0,
Packit 47b4ca
[[[]
Packit 47b4ca
[]
Packit 47b4ca
[@bar])===([@baz]
Packit 47b4ca
[baz]
Packit 47b4ca
[])===([baz]
Packit 47b4ca
[ACTIVE])===([baz]
Packit 47b4ca
[active]
Packit 47b4ca
[active])===([])===([ACTIVE]
Packit 47b4ca
]])
Packit 47b4ca
Packit 47b4ca
# Arguments spanning multiple lines.
Packit 47b4ca
AT_DATA([configure.ac],
Packit 47b4ca
[[m4_define([TRACE], [])
Packit 47b4ca
TRACE(foo
Packit 47b4ca
bar,
Packit 47b4ca
bar
Packit 47b4ca
foo)
Packit 47b4ca
]])
Packit 47b4ca
Packit 47b4ca
AT_CHECK_AUTOCONF([-t TRACE:'$%'], 0,
Packit 47b4ca
[[foo bar:bar foo
Packit 47b4ca
]])
Packit 47b4ca
Packit 47b4ca
AT_CLEANUP
Packit 47b4ca
Packit 47b4ca
Packit 47b4ca
# autoconf --trace: builtins
Packit 47b4ca
# --------------------------
Packit 47b4ca
AT_SETUP([autoconf --trace: builtins])
Packit 47b4ca
Packit 47b4ca
AT_DATA([configure.ac],
Packit 47b4ca
[[define([active], [ACTIVE])
Packit 47b4ca
]])
Packit 47b4ca
Packit 47b4ca
AT_CHECK_AUTOCONF([[-t define | sed -n '$p']],
Packit 47b4ca
	 0,
Packit 47b4ca
[[configure.ac:1:define:active:ACTIVE
Packit 47b4ca
]])
Packit 47b4ca
Packit 47b4ca
# FIXME: Without `$1' the following test dies.  Groumphf, once again to
Packit 47b4ca
# dive into obscure feature interaction...
Packit 47b4ca
# Note that using `-i' means we need the *.m4 files, not the *.m4f files,
Packit 47b4ca
# hence we need srcdir, not builddir.
Packit 47b4ca
AT_CHECK_AUTOCONF([[-t define:'$1' -i| sed -n '$p']],
Packit 47b4ca
	 0,
Packit 47b4ca
[[active
Packit 47b4ca
]])
Packit 47b4ca
Packit 47b4ca
AT_CLEANUP
Packit 47b4ca
Packit 47b4ca
Packit 47b4ca
Packit 47b4ca
## ---------------------------- ##
Packit 47b4ca
## autoconf: forbidden tokens.  ##
Packit 47b4ca
## ---------------------------- ##
Packit 47b4ca
Packit 47b4ca
Packit 47b4ca
# autoconf: forbidden tokens, basic
Packit 47b4ca
# ---------------------------------
Packit 47b4ca
AT_SETUP([autoconf: forbidden tokens,[] basic])
Packit 47b4ca
Packit 47b4ca
AT_DATA_M4SH([configure.ac],
Packit 47b4ca
[[AS_INIT
Packit 47b4ca
m4_foo
Packit 47b4ca
_m4_bar
Packit 47b4ca
AS_FOO
Packit 47b4ca
_AS_BAR
Packit 47b4ca
[dnl]
Packit 47b4ca
]])
Packit 47b4ca
Packit 47b4ca
dnl This test needs autom4te's cache, in spite of any ~/.autom4te.cfg.
Packit 47b4ca
AT_DATA([.autom4te.cfg], [[
Packit 47b4ca
begin-language: "Autoconf"
Packit 47b4ca
args: --cache=autom4te.cache
Packit 47b4ca
end-language: "Autoconf"
Packit 47b4ca
begin-language: "Autoconf-without-aclocal-m4"
Packit 47b4ca
args: --cache=autom4te.cache
Packit 47b4ca
end-language: "Autoconf-without-aclocal-m4"
Packit 47b4ca
]])
Packit 47b4ca
Packit 47b4ca
AT_CHECK_AUTOCONF([], 1, [],
Packit 47b4ca
[[configure.ac:2: error: possibly undefined macro: m4@&t@_foo
Packit 47b4ca
      If this token and others are legitimate, please use m4@&t@_pattern_allow.
Packit 47b4ca
      See the Autoconf documentation.
Packit 47b4ca
configure.ac:3: error: possibly undefined macro: _m4@&t@_bar
Packit 47b4ca
configure.ac:4: error: possibly undefined macro: AS@&t@_FOO
Packit 47b4ca
configure.ac:5: error: possibly undefined macro: _AS@&t@_BAR
Packit 47b4ca
configure.ac:6: error: possibly undefined macro: d@&t@nl
Packit 47b4ca
]])
Packit 47b4ca
# Second run should succeed and yield no output.
Packit 47b4ca
AT_CHECK([autoconf])
Packit 47b4ca
Packit 47b4ca
AT_CLEANUP
Packit 47b4ca
Packit 47b4ca
Packit 47b4ca
# autoconf: forbidden tokens, exceptions
Packit 47b4ca
# --------------------------------------
Packit 47b4ca
AT_SETUP([autoconf: forbidden tokens,[] exceptions])
Packit 47b4ca
Packit 47b4ca
AT_DATA_M4SH([configure.ac],
Packit 47b4ca
[[AS_INIT
Packit 47b4ca
Packit 47b4ca
# This is allowed in spite of the name.
Packit 47b4ca
# It is on purpose that we check the case where there are several
Packit 47b4ca
# tokens on the same line.
Packit 47b4ca
m4_pattern_allow([^AS_ALLOWED$])
Packit 47b4ca
NOT_AS_ALLOWED AS_ALLOWED AS_ALLOWED_NOT
Packit 47b4ca
Packit 47b4ca
# Test forbidding.
Packit 47b4ca
m4_pattern_forbid([^FORBIDDEN$])
Packit 47b4ca
NOT_FORBIDDEN FORBIDDEN FORBIDDEN_NOT
Packit 47b4ca
Packit 47b4ca
# Test Autoconf's patterns.
Packit 47b4ca
AS_THIS_IS_INVALID and _AS_THIS_IS_INVALID_TOO
Packit 47b4ca
BUT_AZ_THIS_IS_NOT ALTHOUGH_AS_THIS_IS
Packit 47b4ca
# This is legal, although there is `AS_DEFINE' in there.
Packit 47b4ca
BAS_DEFINE
Packit 47b4ca
# AS_THIS_IS_A_COMMENT so just shut up.
Packit 47b4ca
It would be very bad if Autoconf forgot to expand [AS_]INIT!
Packit 47b4ca
]])
Packit 47b4ca
Packit 47b4ca
AT_CHECK_AUTOCONF([], 1, [],
Packit 47b4ca
[[configure.ac:1: error: possibly undefined macro: AS@&t@_INIT
Packit 47b4ca
      If this token and others are legitimate, please use m4@&t@_pattern_allow.
Packit 47b4ca
      See the Autoconf documentation.
Packit 47b4ca
configure.ac:7: error: possibly undefined macro: AS@&t@_ALLOWED_NOT
Packit 47b4ca
configure.ac:10: error: possibly undefined macro: FORBIDDEN
Packit 47b4ca
configure.ac:14: error: possibly undefined macro: AS@&t@_THIS_IS_INVALID
Packit 47b4ca
configure.ac:14: error: possibly undefined macro: _AS@&t@_THIS_IS_INVALID_TOO
Packit 47b4ca
]])
Packit 47b4ca
Packit 47b4ca
AT_CLEANUP
Packit 47b4ca
Packit 47b4ca
Packit 47b4ca
# autoconf: automatically allowed tokens
Packit 47b4ca
# --------------------------------------
Packit 47b4ca
AT_SETUP([autoconf: automatically allowed tokens])
Packit 47b4ca
Packit 47b4ca
AT_DATA_M4SH([configure.ac],
Packit 47b4ca
[[AC_INIT
Packit 47b4ca
m4_pattern_forbid([^FB_])
Packit 47b4ca
AC_DEFINE([FB_ONE])
Packit 47b4ca
AC_SUBST([FB_TWO])
Packit 47b4ca
AC_OUTPUT
Packit 47b4ca
]])
Packit 47b4ca
Packit 47b4ca
AT_CHECK_AUTOCONF
Packit 47b4ca
Packit 47b4ca
AT_CLEANUP
Packit 47b4ca
Packit 47b4ca
Packit 47b4ca
# autoconf: do not forbid the empty token
Packit 47b4ca
# ---------------------------------------
Packit 47b4ca
AT_SETUP([autoconf: the empty token])
Packit 47b4ca
Packit 47b4ca
AT_DATA_M4SH([configure.ac],
Packit 47b4ca
[[m4_init[]m4_pattern_allow([^foo$])
Packit 47b4ca
m4_divert([])dnl
Packit 47b4ca
 line that begins with a space
Packit 47b4ca
]])
Packit 47b4ca
Packit 47b4ca
AT_CHECK_AUTOCONF
Packit 47b4ca
Packit 47b4ca
AT_CLEANUP
Packit 47b4ca
Packit 47b4ca
Packit 47b4ca
# autoconf: subdirectories
Packit 47b4ca
# ------------------------
Packit 47b4ca
AT_SETUP([autoconf: subdirectories])
Packit 47b4ca
Packit 47b4ca
AT_DATA([configure.ac],
Packit 47b4ca
[[AC_INIT
Packit 47b4ca
AC_PROG_MKDIR_P
Packit 47b4ca
AC_CONFIG_FILES(sub/foo)
Packit 47b4ca
AC_OUTPUT
Packit 47b4ca
]])
Packit 47b4ca
Packit 47b4ca
mkdir sub
Packit 47b4ca
Packit 47b4ca
AT_DATA([sub/foo.in],
Packit 47b4ca
[[@MKDIR_P@
Packit 47b4ca
]])
Packit 47b4ca
Packit 47b4ca
AT_DATA([install-sh])
Packit 47b4ca
Packit 47b4ca
AT_CHECK_AUTOCONF
Packit 47b4ca
AT_CHECK_CONFIGURE
Packit 47b4ca
AT_CHECK([[grep '^[^/].*/mkdir -p' sub/foo]], 1)
Packit 47b4ca
Packit 47b4ca
AT_CLEANUP
Packit 47b4ca
Packit 47b4ca
Packit 47b4ca
# autoconf: input from stdin
Packit 47b4ca
# --------------------------
Packit 47b4ca
AT_SETUP([autoconf: input from stdin])
Packit 47b4ca
Packit 47b4ca
# Past Autoconf versions failed to read from stdin when other, non-frozen input
Packit 47b4ca
# files were present.
Packit 47b4ca
AT_DATA([aclocal.m4])
Packit 47b4ca
Packit 47b4ca
AT_CHECK([echo 'AC_INIT(X, 1.0, bug-autoconf@gnu.org)' | autoconf -t AC_INIT -],
Packit 47b4ca
	 0, [stdin:1:AC_INIT:X:1.0:bug-autoconf@gnu.org
Packit 47b4ca
])
Packit 47b4ca
AT_CHECK([echo 'AC_INIT(X, 2.0, bug-autoconf@gnu.org)' | autoconf -t AC_INIT -],
Packit 47b4ca
	 0, [stdin:1:AC_INIT:X:2.0:bug-autoconf@gnu.org
Packit 47b4ca
])
Packit 47b4ca
Packit 47b4ca
AT_CLEANUP
Packit 47b4ca
Packit 47b4ca
Packit 47b4ca
# autoconf: AC_AUTOCONF_VERSION
Packit 47b4ca
# -----------------------------
Packit 47b4ca
AT_SETUP([autoconf: AC_AUTOCONF_VERSION])
Packit 47b4ca
Packit 47b4ca
AT_DATA([configure.ac],
Packit 47b4ca
[[AC_INIT
Packit 47b4ca
version m4@&t@_defn([AC_AUTOCONF_VERSION]) version
Packit 47b4ca
AC_OUTPUT
Packit 47b4ca
]])
Packit 47b4ca
Packit 47b4ca
AT_CHECK_AUTOCONF
Packit 47b4ca
AT_CHECK([[grep 'version ]]AT_PACKAGE_VERSION[[ version' configure]],
Packit 47b4ca
0, [ignore])
Packit 47b4ca
Packit 47b4ca
AT_CLEANUP
Packit 47b4ca
Packit 47b4ca
Packit 47b4ca
Packit 47b4ca
# autoconf: AC_PRESERVE_HELP_ORDER
Packit 47b4ca
# --------------------------------
Packit 47b4ca
AT_SETUP([autoconf: AC_PRESERVE_HELP_ORDER])
Packit 47b4ca
AT_KEYWORDS([m4@&t@_divert_text])
Packit 47b4ca
Packit 47b4ca
AT_DATA_AUTOCONF([configure.ac],
Packit 47b4ca
[[AC_INIT
Packit 47b4ca
AC_PRESERVE_HELP_ORDER
Packit 47b4ca
AC_ARG_WITH([one], [  --with-one])
Packit 47b4ca
AC_ARG_ENABLE([two], [  --enable-two])
Packit 47b4ca
m4_divert_text([HELP_ENABLE], [arbitrary $text])
Packit 47b4ca
AC_ARG_WITH([three], [  --with-three])
Packit 47b4ca
AC_OUTPUT
Packit 47b4ca
]])
Packit 47b4ca
Packit 47b4ca
AT_CHECK_AUTOCONF
Packit 47b4ca
AT_CHECK_CONFIGURE([--help], [], [stdout])
Packit 47b4ca
AT_CHECK([sed -n '/^Optional/,/^$/p' stdout], [],
Packit 47b4ca
[[Optional Features and Packages:
Packit 47b4ca
  --disable-option-checking  ignore unrecognized --enable/--with options
Packit 47b4ca
  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
Packit 47b4ca
  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
Packit 47b4ca
  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
Packit 47b4ca
  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
Packit 47b4ca
  --with-one
Packit 47b4ca
  --enable-two
Packit 47b4ca
arbitrary $text
Packit 47b4ca
  --with-three
Packit 47b4ca
Packit 47b4ca
]])
Packit 47b4ca
Packit 47b4ca
AT_CLEANUP
Packit 47b4ca
Packit 47b4ca
Packit 47b4ca
Packit 47b4ca
## --------- ##
Packit 47b4ca
## ifnames.  ##
Packit 47b4ca
## --------- ##
Packit 47b4ca
Packit 47b4ca
AT_SETUP([ifnames])
Packit 47b4ca
Packit 47b4ca
AT_DATA([iftest1.c],
Packit 47b4ca
[[#ifdef DEF1
Packit 47b4ca
#ifndef DEF2
Packit 47b4ca
#if ! defined DEF3 && defined DEF4 /* but not defined DEF5 */
Packit 47b4ca
    # if SPACES
Packit 47b4ca
	#	if	TABS
Packit 47b4ca
/* #if C_COMMENTS */
Packit 47b4ca
// #if CXX_COMMENTS
Packit 47b4ca
#if LINE1 = \
Packit 47b4ca
LINE2
Packit 47b4ca
#if (VAL1*VAL2)==VAL3+VAL4 /* Not VAL5 !!! */
Packit 47b4ca
]])
Packit 47b4ca
Packit 47b4ca
AT_DATA([iftest2.c],
Packit 47b4ca
[[#ifdef IFTEST2
Packit 47b4ca
#if VAL1
Packit 47b4ca
]])
Packit 47b4ca
Packit 47b4ca
AT_CHECK([ifnames iftest1.c iftest2.c], 0,
Packit 47b4ca
[DEF1 iftest1.c
Packit 47b4ca
DEF2 iftest1.c
Packit 47b4ca
DEF3 iftest1.c
Packit 47b4ca
DEF4 iftest1.c
Packit 47b4ca
IFTEST2 iftest2.c
Packit 47b4ca
LINE1 iftest1.c
Packit 47b4ca
LINE2 iftest1.c
Packit 47b4ca
SPACES iftest1.c
Packit 47b4ca
TABS iftest1.c
Packit 47b4ca
VAL1 iftest1.c iftest2.c
Packit 47b4ca
VAL2 iftest1.c
Packit 47b4ca
VAL3 iftest1.c
Packit 47b4ca
VAL4 iftest1.c
Packit 47b4ca
], [])
Packit 47b4ca
Packit 47b4ca
AT_CLEANUP
Packit 47b4ca
Packit 47b4ca
Packit 47b4ca
Packit 47b4ca
## ------------ ##
Packit 47b4ca
## autoheader.  ##
Packit 47b4ca
## ------------ ##
Packit 47b4ca
Packit 47b4ca
# autoheader is intensively used in its modern form throughout this
Packit 47b4ca
# test suite.  But we also have to check that acconfig.h still works.
Packit 47b4ca
# autoheader uses autoconf --trace, so traces first.
Packit 47b4ca
Packit 47b4ca
AT_SETUP([autoheader])
Packit 47b4ca
Packit 47b4ca
AT_DATA([acconfig.h],
Packit 47b4ca
[[/* Define this to whatever you want. */
Packit 47b4ca
#undef this
Packit 47b4ca
]])
Packit 47b4ca
Packit 47b4ca
Packit 47b4ca
# 1. Check that `acconfig.h' is still honored.
Packit 47b4ca
AT_DATA([configure.ac],
Packit 47b4ca
[[AC_INIT
Packit 47b4ca
AC_CONFIG_HEADERS(config.h:config.hin)
Packit 47b4ca
AC_DEFINE(this, "whatever you want.")
Packit 47b4ca
]])
Packit 47b4ca
Packit 47b4ca
AT_CHECK_AUTOHEADER([], [], [], [ignore])
Packit 47b4ca
AT_CHECK([cat config.hin], 0,
Packit 47b4ca
[[/* config.hin.  Generated from configure.ac by autoheader.  */
Packit 47b4ca
/* Define this to whatever you want. */
Packit 47b4ca
#undef this
Packit 47b4ca
Packit 47b4ca
/* Define to the address where bug reports for this package should be sent. */
Packit 47b4ca
#undef PACKAGE_BUGREPORT
Packit 47b4ca
Packit 47b4ca
/* Define to the full name of this package. */
Packit 47b4ca
#undef PACKAGE_NAME
Packit 47b4ca
Packit 47b4ca
/* Define to the full name and version of this package. */
Packit 47b4ca
#undef PACKAGE_STRING
Packit 47b4ca
Packit 47b4ca
/* Define to the one symbol short name of this package. */
Packit 47b4ca
#undef PACKAGE_TARNAME
Packit 47b4ca
Packit 47b4ca
/* Define to the home page for this package. */
Packit 47b4ca
#undef PACKAGE_URL
Packit 47b4ca
Packit 47b4ca
/* Define to the version of this package. */
Packit 47b4ca
#undef PACKAGE_VERSION
Packit 47b4ca
]])
Packit 47b4ca
Packit 47b4ca
Packit 47b4ca
# 2. Check that missing templates are a fatal error.
Packit 47b4ca
AT_DATA([configure.ac],
Packit 47b4ca
[[AC_INIT
Packit 47b4ca
AC_CONFIG_HEADERS(config.h:config.hin)
Packit 47b4ca
AC_DEFINE(that, "whatever you want.")
Packit 47b4ca
]])
Packit 47b4ca
Packit 47b4ca
# The test suite goes too fast for the cache time stamps...
Packit 47b4ca
# Pass --force.
Packit 47b4ca
AT_CHECK_AUTOHEADER([--force], [1], [], [ignore])
Packit 47b4ca
Packit 47b4ca
Packit 47b4ca
# 3. Check TOP and BOTTOM.
Packit 47b4ca
AT_DATA([acconfig.h],
Packit 47b4ca
[[/* Top from acconfig.h. */
Packit 47b4ca
@TOP@
Packit 47b4ca
/* Middle from acconfig.h. */
Packit 47b4ca
@BOTTOM@
Packit 47b4ca
/* Bottom from acconfig.h. */
Packit 47b4ca
]])
Packit 47b4ca
Packit 47b4ca
AT_DATA([configure.ac],
Packit 47b4ca
[[AC_INIT
Packit 47b4ca
AC_CONFIG_HEADERS(config.h:config.hin)
Packit 47b4ca
AH_TOP([Top1 from configure.ac.])
Packit 47b4ca
AH_TOP([Top2 from configure.ac.])
Packit 47b4ca
AH_TOP([The Cat in a h@t.])
Packit 47b4ca
AH_VERBATIM([Middle], [Middle from configure.ac.])
Packit 47b4ca
AH_VERBATIM([Mouse],  [The Mouse in a h@t.])
Packit 47b4ca
AH_BOTTOM([Bottom1 from configure.ac.])
Packit 47b4ca
AH_BOTTOM([Bottom2 from configure.ac.])
Packit 47b4ca
AH_BOTTOM([The Dog in a h@t.])
Packit 47b4ca
Packit 47b4ca
AC_DEFINE([ANT], [@], [The Ant in a h@t.])
Packit 47b4ca
]])
Packit 47b4ca
Packit 47b4ca
Packit 47b4ca
# Yes, that's right: the `middle' part of `acconfig.h' is still before
Packit 47b4ca
# the AH_TOP part.  But so what, you're not supposed to use the two
Packit 47b4ca
# together.
Packit 47b4ca
# Ignore STDERR which is the longish complaint against autoheader junk
Packit 47b4ca
# files.
Packit 47b4ca
AT_CHECK_AUTOHEADER([--force], [], [], [ignore])
Packit 47b4ca
AT_CHECK([cat config.hin], 0,
Packit 47b4ca
[[/* config.hin.  Generated from configure.ac by autoheader.  */
Packit 47b4ca
/* Top from acconfig.h. */
Packit 47b4ca
/* Middle from acconfig.h. */
Packit 47b4ca
Packit 47b4ca
Top1 from configure.ac.
Packit 47b4ca
Packit 47b4ca
Top2 from configure.ac.
Packit 47b4ca
Packit 47b4ca
The Cat in a h@t.
Packit 47b4ca
Packit 47b4ca
/* The Ant in a h@t. */
Packit 47b4ca
#undef ANT
Packit 47b4ca
Packit 47b4ca
Middle from configure.ac.
Packit 47b4ca
Packit 47b4ca
The Mouse in a h@t.
Packit 47b4ca
Packit 47b4ca
/* Define to the address where bug reports for this package should be sent. */
Packit 47b4ca
#undef PACKAGE_BUGREPORT
Packit 47b4ca
Packit 47b4ca
/* Define to the full name of this package. */
Packit 47b4ca
#undef PACKAGE_NAME
Packit 47b4ca
Packit 47b4ca
/* Define to the full name and version of this package. */
Packit 47b4ca
#undef PACKAGE_STRING
Packit 47b4ca
Packit 47b4ca
/* Define to the one symbol short name of this package. */
Packit 47b4ca
#undef PACKAGE_TARNAME
Packit 47b4ca
Packit 47b4ca
/* Define to the home page for this package. */
Packit 47b4ca
#undef PACKAGE_URL
Packit 47b4ca
Packit 47b4ca
/* Define to the version of this package. */
Packit 47b4ca
#undef PACKAGE_VERSION
Packit 47b4ca
Packit 47b4ca
Bottom1 from configure.ac.
Packit 47b4ca
Packit 47b4ca
Bottom2 from configure.ac.
Packit 47b4ca
Packit 47b4ca
The Dog in a h@t.
Packit 47b4ca
/* Bottom from acconfig.h. */
Packit 47b4ca
]])
Packit 47b4ca
Packit 47b4ca
AT_CLEANUP
Packit 47b4ca
Packit 47b4ca
Packit 47b4ca
# autoheader should see through m4 macros, just like autoconf
Packit 47b4ca
# http://lists.gnu.org/archive/html/bug-autoconf/2009-06/msg00000.html
Packit 47b4ca
AT_SETUP([autoheader and macros])
Packit 47b4ca
Packit 47b4ca
AT_DATA([configure.ac],
Packit 47b4ca
[[AC_INIT
Packit 47b4ca
AC_CONFIG_HEADER([config.h])
Packit 47b4ca
m4_define([PETER], [SIMSALABIM])
Packit 47b4ca
m4_define([PAUL], [OPENSESAME])
Packit 47b4ca
AC_DEFINE([PETER], [10], [Peter's public info])
Packit 47b4ca
AC_DEFINE_UNQUOTED([PAUL], [`expr 4 + 6`], [Paul's public info])
Packit 47b4ca
AC_OUTPUT
Packit 47b4ca
]])
Packit 47b4ca
Packit 47b4ca
AT_CHECK_AUTOCONF
Packit 47b4ca
AT_CHECK_AUTOHEADER
Packit 47b4ca
AT_CHECK([grep -c SIMSALABIM configure config.h.in], [0],
Packit 47b4ca
[[configure:1
Packit 47b4ca
config.h.in:1
Packit 47b4ca
]])
Packit 47b4ca
AT_CHECK([grep -c OPENSESAME configure config.h.in], [0],
Packit 47b4ca
[[configure:1
Packit 47b4ca
config.h.in:1
Packit 47b4ca
]])
Packit 47b4ca
AT_CHECK([grep -c PETER configure config.h.in], [1],
Packit 47b4ca
[[configure:0
Packit 47b4ca
config.h.in:0
Packit 47b4ca
]])
Packit 47b4ca
AT_CHECK([grep -c PAUL configure config.h.in], [1],
Packit 47b4ca
[[configure:0
Packit 47b4ca
config.h.in:0
Packit 47b4ca
]])
Packit 47b4ca
Packit 47b4ca
AT_CLEANUP
Packit 47b4ca
Packit 47b4ca
Packit 47b4ca
Packit 47b4ca
Packit 47b4ca
## ------------ ##
Packit 47b4ca
## autoupdate.  ##
Packit 47b4ca
## ------------ ##
Packit 47b4ca
Packit 47b4ca
# Check that AC_CANONICAL_SYSTEM and AC_OUTPUT are properly updated.
Packit 47b4ca
AT_SETUP([autoupdate])
Packit 47b4ca
Packit 47b4ca
AT_DATA([configure.ac],
Packit 47b4ca
[[AC_INIT(Test, 1.0)
Packit 47b4ca
AC_CANONICAL_SYSTEM
Packit 47b4ca
# The doc says 27 is a valid fubar.
Packit 47b4ca
fubar=27
Packit 47b4ca
AC_OUTPUT(Makefile, echo $fubar, fubar=$fubar)
Packit 47b4ca
]])
Packit 47b4ca
Packit 47b4ca
AT_DATA([expout],
Packit 47b4ca
[[AC_INIT([Test],[1.0])
Packit 47b4ca
AC_CANONICAL_TARGET
Packit 47b4ca
# The doc says 27 is a valid fubar.
Packit 47b4ca
fubar=27
Packit 47b4ca
AC_CONFIG_FILES([Makefile])
Packit 47b4ca
AC_CONFIG_COMMANDS([default],[echo $fubar],[fubar=$fubar])
Packit 47b4ca
AC_OUTPUT
Packit 47b4ca
]])
Packit 47b4ca
Packit 47b4ca
# Checking `autoupdate'.
Packit 47b4ca
AT_CHECK_AUTOUPDATE
Packit 47b4ca
AT_CHECK([cat configure.ac], 0, [expout])
Packit 47b4ca
# Checking that `autoupdate' is idempotent
Packit 47b4ca
AT_CHECK_AUTOUPDATE
Packit 47b4ca
AT_CHECK([cat configure.ac], 0, [expout])
Packit 47b4ca
Packit 47b4ca
AT_CLEANUP
Packit 47b4ca
Packit 47b4ca
Packit 47b4ca
# autoupdating AC_LINK_FILES
Packit 47b4ca
# --------------------------
Packit 47b4ca
AT_SETUP([autoupdating AC_LINK_FILES])
Packit 47b4ca
Packit 47b4ca
AT_DATA([configure.ac],
Packit 47b4ca
[[AC_INIT
Packit 47b4ca
AC_LINK_FILES(dst1 dst2, src1 src2)
Packit 47b4ca
AC_OUTPUT
Packit 47b4ca
]])
Packit 47b4ca
Packit 47b4ca
AT_DATA([dst1], dst1
Packit 47b4ca
)
Packit 47b4ca
AT_DATA([dst2], dst2
Packit 47b4ca
)
Packit 47b4ca
Packit 47b4ca
# Checking `autoupdate'.
Packit 47b4ca
AT_CHECK_AUTOUPDATE([], 0, [], ignore)
Packit 47b4ca
AT_CHECK_AUTOCONF
Packit 47b4ca
AT_CHECK_CONFIGURE
Packit 47b4ca
AT_CHECK([cat src1], 0, [dst1
Packit 47b4ca
])
Packit 47b4ca
AT_CHECK([cat src2], 0, [dst2
Packit 47b4ca
])
Packit 47b4ca
Packit 47b4ca
AT_CLEANUP
Packit 47b4ca
Packit 47b4ca
Packit 47b4ca
# autoupdating AC_PREREQ
Packit 47b4ca
# ----------------------
Packit 47b4ca
AT_SETUP([autoupdating AC_PREREQ])
Packit 47b4ca
Packit 47b4ca
# Produce `AC_PREREQ(<AUTOUPDATE VERSION>)'.
Packit 47b4ca
AT_CHECK([autoupdate --version | sed 's/.*) //;q'], 0, [stdout])
Packit 47b4ca
autoupdate_version=`cat stdout`
Packit 47b4ca
[echo "AC_PREREQ([$autoupdate_version])" >expout]
Packit 47b4ca
Packit 47b4ca
AT_CHECK([echo "AC_PREREQ(1.0)" | autoupdate -],
Packit 47b4ca
	 0, [expout], [])
Packit 47b4ca
Packit 47b4ca
AT_CHECK([echo "AC_PREREQ($autoupdate_version)" | autoupdate -],
Packit 47b4ca
	 0, [expout], [])
Packit 47b4ca
Packit 47b4ca
AT_CHECK([echo "AC_PREREQ(999.99)" | autoupdate -],
Packit 47b4ca
	 63, [], [ignore])
Packit 47b4ca
Packit 47b4ca
AT_CLEANUP
Packit 47b4ca
Packit 47b4ca
Packit 47b4ca
# autoupdating AU_ALIAS
Packit 47b4ca
# ---------------------
Packit 47b4ca
AT_SETUP([autoupdating AU_ALIAS])
Packit 47b4ca
Packit 47b4ca
AT_DATA([configure.ac],
Packit 47b4ca
[[AC_INIT
Packit 47b4ca
AC_DEFUN([FOO], [$#])
Packit 47b4ca
AU_ALIAS([BAZ],[FOO])
Packit 47b4ca
test "FOO:FOO():FOO(x) BAZ:BAZ():BAZ(x)" = "0:1:1 0:1:1" || exit 1
Packit 47b4ca
AC_PROG_CC
Packit 47b4ca
AC_STDC_HEADERS
Packit 47b4ca
AC_OUTPUT
Packit 47b4ca
]])
Packit 47b4ca
Packit 47b4ca
# Checking `autoupdate'.
Packit 47b4ca
AT_CHECK_AUTOUPDATE
Packit 47b4ca
AT_CHECK_AUTOCONF
Packit 47b4ca
AT_CHECK_CONFIGURE
Packit 47b4ca
AT_CHECK([grep 'AC_HEADER_STDC[(]' configure.ac], 1, [ignore], [ignore])
Packit 47b4ca
AT_CHECK([grep 'AC_HEADER_STDC' configure.ac], 0, [ignore], [ignore])
Packit 47b4ca
Packit 47b4ca
AT_CLEANUP
Packit 47b4ca
Packit 47b4ca
Packit 47b4ca
# autoupdating OLD to NEW
Packit 47b4ca
# -----------------------
Packit 47b4ca
Packit 47b4ca
# The example taken from the code comments.
Packit 47b4ca
AT_SETUP([autoupdating OLD to NEW])
Packit 47b4ca
Packit 47b4ca
AT_DATA([aclocal.m4],
Packit 47b4ca
[[AU_DEFUN([OLD], [NEW([$1, $2], m4@&t@_eval([$1 + $2]))])
Packit 47b4ca
AC_DEFUN([NEW], [echo "sum($1) = $2"])
Packit 47b4ca
]])
Packit 47b4ca
Packit 47b4ca
AT_DATA([configure.ac],
Packit 47b4ca
[[AC_INIT
Packit 47b4ca
OLD(1, 2)
Packit 47b4ca
NEW([0, 0], [0])
Packit 47b4ca
]])
Packit 47b4ca
Packit 47b4ca
# Checking `autoupdate'.
Packit 47b4ca
AT_CHECK_AUTOUPDATE
Packit 47b4ca
AT_CHECK_AUTOCONF
Packit 47b4ca
AT_CHECK_CONFIGURE
Packit 47b4ca
AT_CHECK([[grep 'NEW(\[1, 2], *\[3])' configure.ac]], 0, [ignore], [ignore])
Packit 47b4ca
AT_CHECK([[grep 'NEW(\[0, 0], *\[0])' configure.ac]], 0, [ignore], [ignore])
Packit 47b4ca
Packit 47b4ca
AT_CLEANUP
Packit 47b4ca
Packit 47b4ca
Packit 47b4ca
# autoupdating macros recursively
Packit 47b4ca
# -------------------------------
Packit 47b4ca
Packit 47b4ca
AT_SETUP([autoupdating macros recursively])
Packit 47b4ca
Packit 47b4ca
AT_XFAIL_IF([:])
Packit 47b4ca
Packit 47b4ca
AT_DATA([configure.ac],
Packit 47b4ca
[[AC_INIT
Packit 47b4ca
AC_PROG_CC
Packit 47b4ca
AC_TRY_COMPILE([], [choke me], [echo bogus1],
Packit 47b4ca
	       [AC_TRY_COMPILE([], [return 0;], [echo good], [echo bogus2])])
Packit 47b4ca
AC_OUTPUT
Packit 47b4ca
]])
Packit 47b4ca
Packit 47b4ca
# Checking `autoupdate'.
Packit 47b4ca
AT_CHECK_AUTOUPDATE
Packit 47b4ca
AT_CHECK([grep changequote configure.ac], [1])
Packit 47b4ca
AT_CHECK([grep TRY_COMPILE configure.ac], [1])
Packit 47b4ca
AT_CHECK_AUTOCONF
Packit 47b4ca
AT_CHECK_CONFIGURE
Packit 47b4ca
Packit 47b4ca
AT_CLEANUP
Packit 47b4ca
Packit 47b4ca
Packit 47b4ca
# autoupdating AC_HELP_STRING
Packit 47b4ca
# ---------------------------
Packit 47b4ca
AT_SETUP([autoupdating AC_HELP_STRING])
Packit 47b4ca
Packit 47b4ca
AT_DATA([configure.ac],
Packit 47b4ca
[[AC_INIT
Packit 47b4ca
AC_ARG_ENABLE([foo], [AC_HELP_STRING([--enable-foo], [foo bar])], [:], [:])
Packit 47b4ca
]])
Packit 47b4ca
Packit 47b4ca
# Checking `autoupdate'.
Packit 47b4ca
AT_CHECK_AUTOUPDATE([], [], [], [ignore])
Packit 47b4ca
AT_CHECK_AUTOCONF
Packit 47b4ca
AT_CHECK_CONFIGURE([], [], [], [ignore])
Packit 47b4ca
AT_CHECK([[grep '\[--enable-foo], *\[foo bar]' configure.ac]], 0, [ignore], [ignore])
Packit 47b4ca
Packit 47b4ca
AT_CLEANUP
Packit 47b4ca
Packit 47b4ca
Packit 47b4ca
# autoupdating with m4sugar
Packit 47b4ca
# -------------------------
Packit 47b4ca
AT_SETUP([autoupdating with m4sugar])
Packit 47b4ca
Packit 47b4ca
AT_DATA([aclocal.m4],
Packit 47b4ca
[[AU_DEFUN([OLD],
Packit 47b4ca
[m4@&t@_pushdef([foo], [bar])dn@&t@l
Packit 47b4ca
echo "foo $1 foo"
Packit 47b4ca
m4@&t@_popdef([foo])dn@&t@l
Packit 47b4ca
])
Packit 47b4ca
]])
Packit 47b4ca
Packit 47b4ca
touch foo.in
Packit 47b4ca
Packit 47b4ca
AT_DATA([configure.ac],
Packit 47b4ca
[[AC_PREREQ(2.54)
Packit 47b4ca
m4_define([gnumeric_version_epoch], [1])
Packit 47b4ca
AC_INIT
Packit 47b4ca
OLD([ bla  bla ])
Packit 47b4ca
AC_FOREACH([name], [n1 n2],
Packit 47b4ca
           [echo name
Packit 47b4ca
])
Packit 47b4ca
AC_CHECKING([for feature])
Packit 47b4ca
AC_MSG_RESULT_UNQUOTED([`echo done`])
Packit 47b4ca
Packit 47b4ca
AC_OUTPUT([foo])
Packit 47b4ca
]])
Packit 47b4ca
Packit 47b4ca
# Checking `autoupdate'.
Packit 47b4ca
AT_CHECK_AUTOUPDATE([], [], [], [ignore])
Packit 47b4ca
AT_CHECK_AUTOCONF
Packit 47b4ca
AT_CHECK_CONFIGURE([], [], [], [ignore])
Packit 47b4ca
Packit 47b4ca
AT_CLEANUP
Packit 47b4ca
Packit 47b4ca
Packit 47b4ca
# autoupdating with m4_pushdef
Packit 47b4ca
# ----------------------------
Packit 47b4ca
AT_SETUP([autoupdating with m4@&t@_pushdef])
Packit 47b4ca
Packit 47b4ca
AT_XFAIL_IF([:])
Packit 47b4ca
Packit 47b4ca
touch foo.in
Packit 47b4ca
AT_DATA([configure.ac],
Packit 47b4ca
[[AC_INIT
Packit 47b4ca
AC_PROG_CC
Packit 47b4ca
# temporarily override this macro
Packit 47b4ca
m4@&t@_pushdef([AC_MSG_RESULT_UNQUOTED], [:])
Packit 47b4ca
AC_C_BIGENDIAN
Packit 47b4ca
m4@&t@_popdef([AC_MSG_RESULT_UNQUOTED])
Packit 47b4ca
AC_OUTPUT
Packit 47b4ca
]])
Packit 47b4ca
Packit 47b4ca
# Checking `autoupdate'.
Packit 47b4ca
AT_CHECK_AUTOUPDATE([], [], [], [ignore])
Packit 47b4ca
AT_CHECK([grep changequote configure.ac], [1])
Packit 47b4ca
AT_CHECK([grep [pushdef.*AC_MSG_RESULT_UNQUOTED] configure.ac], [0], [ignore])
Packit 47b4ca
AT_CHECK_AUTOCONF
Packit 47b4ca
AT_CHECK_CONFIGURE([], [], [], [ignore])
Packit 47b4ca
Packit 47b4ca
AT_CLEANUP
Packit 47b4ca
Packit 47b4ca
Packit 47b4ca
# autoupdating with AC_REQUIRE
Packit 47b4ca
# ----------------------------
Packit 47b4ca
AT_SETUP([autoupdating with AC_REQUIRE])
Packit 47b4ca
Packit 47b4ca
AT_XFAIL_IF([:])
Packit 47b4ca
Packit 47b4ca
AT_DATA([configure.ac],
Packit 47b4ca
[[AC_DEFUN([MACRO],
Packit 47b4ca
[AC_REQUIRE([AC_DECL_SYS_SIGLIST])
Packit 47b4ca
AC_CHECK_DECLS([_sys_siglist], [], [], [#include <signal.h>])
Packit 47b4ca
])
Packit 47b4ca
Packit 47b4ca
AC_INIT
Packit 47b4ca
MACRO
Packit 47b4ca
AC_OUTPUT
Packit 47b4ca
]])
Packit 47b4ca
Packit 47b4ca
# Checking `autoupdate'.
Packit 47b4ca
AT_CHECK_AUTOUPDATE([], [], [], [ignore])
Packit 47b4ca
AT_CHECK_AUTOCONF
Packit 47b4ca
AT_CHECK_CONFIGURE([], [], [], [ignore])
Packit 47b4ca
Packit 47b4ca
AT_CLEANUP
Packit 47b4ca
Packit 47b4ca
Packit 47b4ca
# autoupdating with complex quoting
Packit 47b4ca
# ---------------------------------
Packit 47b4ca
AT_SETUP([autoupdating with complex quoting])
Packit 47b4ca
Packit 47b4ca
AT_XFAIL_IF([:])
Packit 47b4ca
Packit 47b4ca
AT_DATA([configure.ac],
Packit 47b4ca
[[m4_define([MACRO],
Packit 47b4ca
[[#define STRING "hello, world\n"
Packit 47b4ca
]])
Packit 47b4ca
Packit 47b4ca
AC_INIT
Packit 47b4ca
AC_TRY_COMPILE([#include <stdio.h>
Packit 47b4ca
	       ]MACRO[], [printf (STRING);],
Packit 47b4ca
	       [], [AS_EXIT([1])])
Packit 47b4ca
AC_OUTPUT
Packit 47b4ca
]])
Packit 47b4ca
Packit 47b4ca
# Checking `autoupdate'.
Packit 47b4ca
AT_CHECK_AUTOUPDATE([], [], [], [ignore])
Packit 47b4ca
AT_CHECK_AUTOCONF
Packit 47b4ca
AT_CHECK([grep MACRO configure], [1])
Packit 47b4ca
AT_CHECK_CONFIGURE([], [], [], [ignore])
Packit 47b4ca
Packit 47b4ca
AT_CLEANUP
Packit 47b4ca
Packit 47b4ca
Packit 47b4ca
# autoupdating AC_LANG_SAVE
Packit 47b4ca
# -------------------------
Packit 47b4ca
AT_SETUP([autoupdating AC_LANG_SAVE])
Packit 47b4ca
Packit 47b4ca
AT_DATA([configure.ac],
Packit 47b4ca
[[AC_INIT
Packit 47b4ca
AC_LANG_SAVE
Packit 47b4ca
AC_LANG_RESTORE
Packit 47b4ca
AC_LANG_SAVE
Packit 47b4ca
AC_LANG_RESTORE
Packit 47b4ca
]])
Packit 47b4ca
Packit 47b4ca
# Checking `autoupdate'.
Packit 47b4ca
AT_CHECK_AUTOUPDATE([], [], [], [ignore])
Packit 47b4ca
AT_CHECK_AUTOCONF
Packit 47b4ca
AT_CHECK_CONFIGURE([], [], [], [ignore])
Packit 47b4ca
Packit 47b4ca
AT_CLEANUP
Packit 47b4ca
Packit 47b4ca
Packit 47b4ca
# autoupdating AC_FOREACH
Packit 47b4ca
# -----------------------
Packit 47b4ca
AT_SETUP([autoupdating AC_FOREACH])
Packit 47b4ca
Packit 47b4ca
AT_DATA([aclocal.m4],
Packit 47b4ca
[[AU_DEFUN([OLD], [AC_FOREACH([myvar], [4 5 6], [' myvar'])])
Packit 47b4ca
]])
Packit 47b4ca
Packit 47b4ca
AT_DATA([configure.ac],
Packit 47b4ca
[[AC_INIT
Packit 47b4ca
echo AC_FOREACH([myvar], [1 2 3], [' myvar'])OLD
Packit 47b4ca
]])
Packit 47b4ca
Packit 47b4ca
# Checking `autoupdate'.
Packit 47b4ca
AT_CHECK_AUTOUPDATE
Packit 47b4ca
AT_CHECK([[grep 'echo 1 2 3 4 5 6' configure.ac]], 1, [ignore], [ignore])
Packit 47b4ca
AT_CHECK([[grep 'm4@&t@_foreach_w' configure.ac]], 0, [ignore], [ignore])
Packit 47b4ca
AT_CHECK_AUTOCONF
Packit 47b4ca
AT_CHECK_CONFIGURE([], [0], [stdout])
Packit 47b4ca
AT_CHECK([[grep ' 1 2 3 4 5 6' stdout]], 0, [ignore], [ignore])
Packit 47b4ca
Packit 47b4ca
AT_CLEANUP
Packit 47b4ca
Packit 47b4ca
Packit 47b4ca
# autoupdating with aclocal and m4_include
Packit 47b4ca
# ----------------------------------------
Packit 47b4ca
AT_SETUP([autoupdating with aclocal and m4@&t@_include])
Packit 47b4ca
Packit 47b4ca
# We use aclocal.
Packit 47b4ca
AT_CHECK([aclocal --version || exit 77], [], [ignore], [ignore])
Packit 47b4ca
Packit 47b4ca
mkdir m4 aclocal
Packit 47b4ca
AT_DATA([configure.in],
Packit 47b4ca
[[AC_INIT(x,0)
Packit 47b4ca
AC_UNCHANGED_MACRO
Packit 47b4ca
AC_OLD_MACRO
Packit 47b4ca
AC_OUTPUT
Packit 47b4ca
]])
Packit 47b4ca
AT_DATA([m4/stuff.m4],
Packit 47b4ca
[[AU_ALIAS([AC_OLD_MACRO], [AC_NEW_MACRO])
Packit 47b4ca
AC_DEFUN([AC_NEW_MACRO], [echo hi])
Packit 47b4ca
AC_DEFUN([AC_UNCHANGED_MACRO], [echo one])
Packit 47b4ca
]])
Packit 47b4ca
cp m4/stuff.m4 aclocal/stuff.m4
Packit 47b4ca
AT_CHECK([aclocal -I aclocal], [0], [ignore], [ignore])
Packit 47b4ca
# Checking `autoupdate'.
Packit 47b4ca
AT_CHECK_AUTOUPDATE
Packit 47b4ca
AT_CHECK([aclocal -I m4], [0], [ignore], [ignore])
Packit 47b4ca
AT_CHECK_AUTOUPDATE
Packit 47b4ca
Packit 47b4ca
AT_CLEANUP
Packit 47b4ca
Packit 47b4ca
Packit 47b4ca
# Keeping autom4te.cfg complete
Packit 47b4ca
# -----------------------------
Packit 47b4ca
Packit 47b4ca
AT_SETUP([autom4te preselections])
Packit 47b4ca
: ${sleep='sleep 1'}	# Command to force different time stamps.
Packit 47b4ca
# If this test should run on FAT file systems and older w32,
Packit 47b4ca
# then setting $sleep correctly needs to be revisited.
Packit 47b4ca
Packit 47b4ca
# We use aclocal and automake.  Skip broken automake wrappers.
Packit 47b4ca
AT_CHECK([automake --version || exit 77], [], [stdout], [ignore])
Packit 47b4ca
AT_CHECK([[grep '[1-9]\.[0-9]' stdout || exit 77]], [], [ignore])
Packit 47b4ca
AT_CHECK([test ! -f $HOME/.autom4te.cfg || exit 77], [], [ignore], [ignore])
Packit 47b4ca
Packit 47b4ca
AT_DATA([configure.in],
Packit 47b4ca
[[AC_INIT(GNU foo, 1.0)
Packit 47b4ca
AM_INIT_AUTOMAKE
Packit 47b4ca
AC_CONFIG_FILES([Makefile])
Packit 47b4ca
AC_OUTPUT
Packit 47b4ca
]])
Packit 47b4ca
Packit 47b4ca
AT_DATA([Makefile.am],
Packit 47b4ca
[[AUTOMAKE_OPTIONS = foreign
Packit 47b4ca
]])
Packit 47b4ca
Packit 47b4ca
$sleep # `aclocal.m4' should be strictly younger than its inputs
Packit 47b4ca
Packit 47b4ca
# If Autoconf is too old, or the user has turned caching off, skip:
Packit 47b4ca
AT_CHECK([aclocal || { ret=$?; test $ret -eq 63 && ret=77; exit $ret; }],
Packit 47b4ca
         [], [], [ignore])
Packit 47b4ca
AT_CHECK([test -d autom4te.cache || exit 77])
Packit 47b4ca
AT_CHECK([autoconf])
Packit 47b4ca
Packit 47b4ca
# If this test fails due to missing entries in lib/autom4te.in, then
Packit 47b4ca
# comparing the old and new requests is a good place to start debugging:
Packit 47b4ca
cp autom4te.cache/requests old-requests
Packit 47b4ca
echo newer >newer
Packit 47b4ca
$sleep # if `configure' is regenerated, we want it to be strictly newer,
Packit 47b4ca
       # to catch the error consistently.
Packit 47b4ca
AT_CHECK([aclocal], [], [], [ignore])
Packit 47b4ca
AT_CHECK([automake --no-force --add-missing], [], [], [ignore])
Packit 47b4ca
AT_CHECK([autoconf])
Packit 47b4ca
AT_CHECK([test "`find configure -newer newer`" = "" ||
Packit 47b4ca
	  { diff old-requests autom4te.cache/requests; exit 1; }],
Packit 47b4ca
	 [], [], [],
Packit 47b4ca
	 [extract_version=['s/^[^0-9]*\([0-9][^ ]*\).*/\1/;q']
Packit 47b4ca
	  automake_version=`automake --version | sed "$extract_version"`
Packit 47b4ca
	  used_automake_version=`sed "$extract_version" "$abs_top_srcdir/Makefile.in"`
Packit 47b4ca
	  AT_CHECK([if test "$automake_version" = "$used_automake_version"; ]dnl
Packit 47b4ca
		    [then exit 1; else exit 77; fi])])
Packit 47b4ca
AT_CLEANUP
Packit 47b4ca
Packit 47b4ca
Packit 47b4ca
# autom4te cache creation
Packit 47b4ca
# -----------------------
Packit 47b4ca
# Ensure autom4te fails when it cannot create the cache directory
Packit 47b4ca
# or create files there.
Packit 47b4ca
AT_SETUP([autom4te cache creation])
Packit 47b4ca
Packit 47b4ca
AT_CHECK([test ! -f $HOME/.autom4te.cfg || exit 77], [], [ignore], [ignore])
Packit 47b4ca
Packit 47b4ca
# Work in a subdirectory so autotest can scribble in the toplevel.
Packit 47b4ca
mkdir sub
Packit 47b4ca
chmod a-w sub
Packit 47b4ca
Packit 47b4ca
AT_DATA([configure.ac],
Packit 47b4ca
[[AC_INIT
Packit 47b4ca
]])
Packit 47b4ca
Packit 47b4ca
AT_DATA([.autom4te.cfg],
Packit 47b4ca
[[begin-language: "Autoconf-without-aclocal-m4"
Packit 47b4ca
args: --cache=sub/autom4te.cache
Packit 47b4ca
end-language: "Autoconf-without-aclocal-m4"
Packit 47b4ca
]])
Packit 47b4ca
Packit 47b4ca
# Do not try this when we are root or on systems without permissions.
Packit 47b4ca
# A failed redirection may cause a status of 2 with FreeBSD sh.
Packit 47b4ca
AT_CHECK([(: > sub/some-file) || exit 1 && exit 77], 1, [ignore], [ignore])
Packit 47b4ca
Packit 47b4ca
# Failure to create cache directory.
Packit 47b4ca
AT_CHECK_AUTOCONF([], [1], [ignore], [stderr])
Packit 47b4ca
AT_CHECK([grep 'cannot create .*autom4te.cache' stderr], [0], [ignore])
Packit 47b4ca
AT_CHECK([test -f configure], [1])
Packit 47b4ca
Packit 47b4ca
chmod u+w sub
Packit 47b4ca
AT_CHECK_AUTOCONF
Packit 47b4ca
Packit 47b4ca
rm -f configure sub/autom4te.cache/*
Packit 47b4ca
chmod a-w sub/autom4te.cache
Packit 47b4ca
Packit 47b4ca
# Failure to create a file in the cache directory.
Packit 47b4ca
AT_CHECK_AUTOCONF([], [1], [ignore], [stderr])
Packit 47b4ca
AT_CHECK([grep 'cannot open.*autom4te.cache' stderr], [0], [ignore])
Packit 47b4ca
Packit 47b4ca
AT_CLEANUP
Packit 47b4ca
Packit 47b4ca
Packit 47b4ca
# autom4te cache locking
Packit 47b4ca
# ----------------------
Packit 47b4ca
Packit 47b4ca
AT_SETUP([autom4te cache locking])
Packit 47b4ca
Packit 47b4ca
# Cannot use AT_CHECK here, autotest internals could be messed up.
Packit 47b4ca
Packit 47b4ca
(echo AC_INIT; sleep 2; echo) \
Packit 47b4ca
  | (autom4te --language=autoconf -o configure -; echo $? >&2 ) 2>errlog &
Packit 47b4ca
AT_CHECK([echo AC_INIT | autom4te --language=autoconf -o configure -])
Packit 47b4ca
wait
Packit 47b4ca
Packit 47b4ca
# Ignore additional output from shell verbose or xtrace mode.
Packit 47b4ca
AT_CHECK([grep 'cannot rename' errlog], [1])
Packit 47b4ca
AT_CHECK([grep '^0$' errlog], [], [ignore])
Packit 47b4ca
AT_CHECK_CONFIGURE
Packit 47b4ca
Packit 47b4ca
AT_CLEANUP
Packit 47b4ca
Packit 47b4ca
Packit 47b4ca
# autotools and file names containing whitespace
Packit 47b4ca
# ----------------------------------------------
Packit 47b4ca
Packit 47b4ca
AT_SETUP([autotools and whitespace in file names])
Packit 47b4ca
Packit 47b4ca
# We use aclocal.
Packit 47b4ca
AT_CHECK([aclocal --version || exit 77], [], [ignore], [ignore])
Packit 47b4ca
Packit 47b4ca
x=
Packit 47b4ca
export x
Packit 47b4ca
rm -f a b
Packit 47b4ca
for funny in \
Packit 47b4ca
  'with  funny '\'' $x & #! name ' \
Packit 47b4ca
  'with  funny \ '\'' \'\'' " b * ? name ' #"
Packit 47b4ca
do
Packit 47b4ca
  funny=`func_sanitize_file_name "$funny"`
Packit 47b4ca
  file=" file $funny"
Packit 47b4ca
  dir=`func_sanitize_dir_name " dir $funny"`
Packit 47b4ca
  TMPDIR=" tmp$dir"
Packit 47b4ca
  export TMPDIR
Packit 47b4ca
Packit 47b4ca
  # skip if we cannot create such a file or directory
Packit 47b4ca
  AT_CHECK([mkdir "$dir" "$TMPDIR" && touch "$file.in" || exit 77])
Packit 47b4ca
Packit 47b4ca
  cat >"$file.in" <<'END'
Packit 47b4ca
[AC_INIT(x,0)
Packit 47b4ca
m4@&t@_include([foo.m4])
Packit 47b4ca
AC_CONFIG_HEADERS([config.h:config.hin])
Packit 47b4ca
AC_MACRO
Packit 47b4ca
AC_OUTPUT]
Packit 47b4ca
END
Packit 47b4ca
  cat >"$dir"/foo.m4 <<'END'
Packit 47b4ca
[AC_DEFUN([AC_MACRO], [echo hi])]
Packit 47b4ca
END
Packit 47b4ca
Packit 47b4ca
  AT_CHECK_AUTOHEADER([-B "$dir" "$file.in"])
Packit 47b4ca
  AT_CHECK_AUTOHEADER([--force -I "$dir" "$file.in"])
Packit 47b4ca
  AT_CHECK_AUTOUPDATE([-B "$dir" "$file.in"])
Packit 47b4ca
  AT_CHECK_AUTOUPDATE([--force -I "$dir" "$file.in"])
Packit 47b4ca
  AT_CHECK_AUTOUPDATE([-B "$dir" - < "$file.in"], [], [ignore])
Packit 47b4ca
  AT_CHECK_AUTOCONF([-B "$dir" -o "$file" "$file.in"])
Packit 47b4ca
  AT_CHECK_AUTOCONF([-I "$dir" -o "$file" "$file.in"])
Packit 47b4ca
  # In autoconf, these exercise a slightly different code path:
Packit 47b4ca
  AT_CHECK_AUTOCONF([--prepend-include="$dir" -o "$file" "$file.in"])
Packit 47b4ca
  AT_CHECK_AUTOCONF([--include="$dir" -o "$file" "$file.in"])
Packit 47b4ca
  AT_CHECK([autoscan -B "$dir"], [], [], [ignore])
Packit 47b4ca
  AT_CHECK([autoscan --force -I "$dir"], [], [], [ignore])
Packit 47b4ca
  # autoreconf requires a sane input file name.  Also, disable aclocal.
Packit 47b4ca
  mv -f "$file.in" configure.in
Packit 47b4ca
  AT_DATA([aclocal.m4])
Packit 47b4ca
  AT_CHECK([autoreconf -B "$dir"])
Packit 47b4ca
  AT_CHECK([autoreconf --force -I "$dir"])
Packit 47b4ca
Packit 47b4ca
  cat >"$file.c" <<'END'
Packit 47b4ca
#if FOO
Packit 47b4ca
#endif
Packit 47b4ca
END
Packit 47b4ca
  AT_CHECK([ifnames "$file.c"], [], [ignore])
Packit 47b4ca
Packit 47b4ca
  test ! -f b
Packit 47b4ca
done
Packit 47b4ca
Packit 47b4ca
AT_CLEANUP