446 lines
10 KiB
Bash
446 lines
10 KiB
Bash
#! /bin/sh
|
|
# Copyright (C) 2012-2017 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 2, 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 <http://www.gnu.org/licenses/>.
|
|
|
|
# Several tests on the use of the m4 macro AC_CONFIG_MACRO_DIRS with
|
|
# aclocal. See also related test 'aclocal-macrodir.tap'.
|
|
|
|
am_create_testdir=empty
|
|
. test-init.sh
|
|
|
|
plan_ 15
|
|
|
|
ocwd=$(pwd) || fatal_ "getting current working directory"
|
|
unset ACLOCAL_PATH
|
|
|
|
#
|
|
# General utility functions and variables.
|
|
#
|
|
# TODO: These should maybe be refactored, generalized and
|
|
# moved into 't/ax/tap-functions.sh' ...
|
|
#
|
|
|
|
tcount=0
|
|
r=invalid
|
|
description=''
|
|
directive=''
|
|
|
|
test_begin ()
|
|
{
|
|
if test -n "$description"; then
|
|
fatal_ "'test_begin' called, but another test seems active already"
|
|
else
|
|
r=ok
|
|
description=$1
|
|
directive=${2-}
|
|
echo "$description" > README.txt
|
|
shift
|
|
fi
|
|
tcount=$(($tcount + 1)) && test $tcount -gt 0 \
|
|
|| fatal_ "failed to bump the test count"
|
|
mkdir $tcount.d
|
|
cd $tcount.d
|
|
}
|
|
|
|
test_end ()
|
|
{
|
|
if test -z "$description"; then
|
|
fatal_ "'test_end' called, but no test seems active"
|
|
else
|
|
cd "$ocwd" || fatal_ "cannot chdir back to top-level directory"
|
|
result_ "$r" -D "$directive" -- "$description"
|
|
# Don't leave directories for successful subtests hanging around.
|
|
if test -z "$directive" && test "$r" = ok; then
|
|
rm -rf "$tcount.d" || fatal_ "removing subdir $tcount.d"
|
|
fi
|
|
r=invalid directive= description=
|
|
fi
|
|
}
|
|
|
|
#---------------------------------------------------------------------------
|
|
|
|
test_begin "AC_CONFIG_MACRO_DIRS is honored"
|
|
|
|
cat > configure.ac <<'END'
|
|
AC_INIT([md], [10.0])
|
|
AC_CONFIG_MACRO_DIRS([macro-dir])
|
|
MY_FOO
|
|
END
|
|
|
|
mkdir macro-dir
|
|
echo 'AC_DEFUN([MY_FOO], [::my::foo::])' > macro-dir/foo.m4
|
|
|
|
$ACLOCAL \
|
|
&& $FGREP 'm4_include([macro-dir/foo.m4])' aclocal.m4 \
|
|
&& $AUTOCONF \
|
|
&& not $FGREP 'MY_FOO' configure \
|
|
&& $FGREP '::my::foo::' configure \
|
|
|| r='not ok'
|
|
|
|
test_end
|
|
|
|
#---------------------------------------------------------------------------
|
|
|
|
three_dirs_check ()
|
|
{
|
|
mkdir dir1 dir2 dir3
|
|
echo 'AC_DEFUN([MY_FOO], [::my::foo::])' > dir1/foo.m4
|
|
echo 'AC_DEFUN([MY_BAR], [!!my!!bar!!])' > dir2/zap.m4
|
|
echo 'AC_DEFUN([MY_BAZ], [==my==baz==])' > dir3/0.m4
|
|
$ACLOCAL \
|
|
&& $FGREP 'm4_include([dir1/foo.m4])' aclocal.m4 \
|
|
&& $FGREP 'm4_include([dir2/zap.m4])' aclocal.m4 \
|
|
&& $FGREP 'm4_include([dir3/0.m4])' aclocal.m4 \
|
|
&& $AUTOCONF \
|
|
&& not $EGREP 'MY_(FOO|BAR|BAZ)' configure \
|
|
&& $FGREP '::my::foo::' configure \
|
|
&& $FGREP '!!my!!bar!!' configure \
|
|
&& $FGREP '==my==baz==' configure \
|
|
|| r='not ok'
|
|
}
|
|
|
|
#---------------------------------------------------------------------------
|
|
|
|
test_begin "AC_CONFIG_MACRO_DIRS several arguments"
|
|
|
|
cat > configure.ac <<'END'
|
|
AC_INIT([more-args], [0.2])
|
|
AC_CONFIG_MACRO_DIRS([dir1 dir2 dir3])
|
|
MY_FOO
|
|
MY_BAR
|
|
MY_BAZ
|
|
END
|
|
|
|
three_dirs_check
|
|
|
|
test_end
|
|
|
|
#---------------------------------------------------------------------------
|
|
|
|
test_begin "AC_CONFIG_MACRO_DIRS several calls"
|
|
|
|
cat > configure.ac <<'END'
|
|
AC_INIT([more-calls], [2.0])
|
|
AC_CONFIG_MACRO_DIRS([dir1])
|
|
AC_CONFIG_MACRO_DIRS([dir2 dir3])
|
|
MY_FOO
|
|
MY_BAR
|
|
MY_BAZ
|
|
END
|
|
|
|
three_dirs_check
|
|
|
|
test_end
|
|
|
|
#---------------------------------------------------------------------------
|
|
|
|
test_begin "AC_CONFIG_MACRO_DIRS extra whitespace"
|
|
|
|
bslash=\\
|
|
|
|
cat > configure.ac <<END
|
|
AC_INIT([more-args], [0.2])
|
|
AC_CONFIG_MACRO_DIRS([ dir1${bslash}
|
|
${tab} dir2 ${tab}${tab}dir3
|
|
${bslash}
|
|
|
|
])
|
|
MY_FOO
|
|
MY_BAR
|
|
MY_BAZ
|
|
END
|
|
|
|
three_dirs_check
|
|
|
|
test_end
|
|
|
|
#---------------------------------------------------------------------------
|
|
|
|
test_begin "AC_CONFIG_MACRO_DIRS precedence"
|
|
|
|
cat > configure.ac <<'END'
|
|
AC_INIT([more-calls], [2.0])
|
|
AC_CONFIG_MACRO_DIRS([dir1])
|
|
AC_CONFIG_MACRO_DIRS([dir2 dir3])
|
|
MY_FOO
|
|
MY_BAR
|
|
MY_BAZ
|
|
END
|
|
|
|
mkdir dir1 dir2 dir3
|
|
echo 'AC_DEFUN([MY_FOO], [OK-Foo])' > dir1/b.m4
|
|
echo 'AC_DEFUN([MY_FOO], [KO-Foo])' > dir2/a.m4
|
|
echo 'AC_DEFUN([MY_BAR], [OK-Bar])' > dir2/1.m4
|
|
echo 'AC_DEFUN([MY_BAR], [KO-Bar])' > dir3/0.m4
|
|
echo 'AC_DEFUN([MY_BAZ], [OK-Baz])' > dir3/x.m4
|
|
|
|
$ACLOCAL \
|
|
&& $FGREP 'm4_include([dir1/b.m4])' aclocal.m4 \
|
|
&& $FGREP 'm4_include([dir2/1.m4])' aclocal.m4 \
|
|
&& $FGREP 'm4_include([dir3/x.m4])' aclocal.m4 \
|
|
&& test $($FGREP -c 'm4_include([dir1' aclocal.m4) -eq 1 \
|
|
&& test $($FGREP -c 'm4_include([dir2' aclocal.m4) -eq 1 \
|
|
&& test $($FGREP -c 'm4_include([dir3' aclocal.m4) -eq 1 \
|
|
&& $AUTOCONF \
|
|
&& not $EGREP 'MY_(FOO|BAR|BAZ)' configure \
|
|
&& $FGREP 'OK-Foo' configure \
|
|
&& $FGREP 'OK-Bar' configure \
|
|
&& $FGREP 'OK-Baz' configure \
|
|
&& not $FGREP 'KO-' configure \
|
|
|| r='not ok'
|
|
|
|
test_end
|
|
|
|
#---------------------------------------------------------------------------
|
|
|
|
test_begin "AC_CONFIG_MACRO_DIRS interaction with --install"
|
|
|
|
cat > configure.ac << 'END'
|
|
AC_INIT([inst], [1.0])
|
|
AC_CONFIG_MACRO_DIRS([the-dir])
|
|
THE_MACRO
|
|
END
|
|
|
|
mkdir sys-dir the-dir
|
|
echo 'AC_DEFUN([THE_MACRO], [:])' > sys-dir/my.m4
|
|
|
|
test ! -r the-dir/my.m4 \
|
|
&& $ACLOCAL --install --system-acdir ./sys-dir \
|
|
&& diff sys-dir/my.m4 the-dir/my.m4 \
|
|
|| r='not ok'
|
|
|
|
test_end
|
|
|
|
#---------------------------------------------------------------------------
|
|
|
|
two_dirs_install_check ()
|
|
{
|
|
mkdir sys-dir dir1 dir2
|
|
echo 'AC_DEFUN([THE_MACRO], [:])' > sys-dir/my.m4
|
|
echo 'AC_DEFUN([AX_FOO], [:])' > dir2/zap.m4
|
|
test ! -r dir1/my.m4 \
|
|
&& $ACLOCAL --install --system-acdir ./sys-dir \
|
|
&& diff sys-dir/my.m4 dir1/my.m4 \
|
|
&& test ! -e dir2/my.m4 \
|
|
&& $FGREP 'm4_include([dir1/my.m4])' aclocal.m4 \
|
|
&& $FGREP 'm4_include([dir2/zap.m4])' aclocal.m4 \
|
|
|| r='not ok'
|
|
}
|
|
|
|
#---------------------------------------------------------------------------
|
|
|
|
test_begin "several AC_CONFIG_MACRO_DIRS arguments and --install"
|
|
|
|
cat > configure.ac << 'END'
|
|
AC_INIT([inst2a], [1.0])
|
|
AC_CONFIG_MACRO_DIRS([dir1 dir2])
|
|
THE_MACRO
|
|
AX_FOO
|
|
END
|
|
|
|
two_dirs_install_check
|
|
|
|
test_end
|
|
|
|
#---------------------------------------------------------------------------
|
|
|
|
|
|
test_begin "several AC_CONFIG_MACRO_DIRS calls and --install"
|
|
|
|
cat > configure.ac << 'END'
|
|
AC_INIT([inst2b], [1.0])
|
|
AC_CONFIG_MACRO_DIRS([dir1])
|
|
AC_CONFIG_MACRO_DIRS([dir2])
|
|
THE_MACRO
|
|
AX_FOO
|
|
END
|
|
|
|
two_dirs_install_check
|
|
|
|
test_end
|
|
|
|
#---------------------------------------------------------------------------
|
|
|
|
test_begin "'-I' option wins over AC_CONFIG_MACRO_DIRS"
|
|
|
|
cat > configure.ac <<'END'
|
|
AC_INIT([md], [4.6])
|
|
AC_CONFIG_MACRO_DIRS([dir1])
|
|
MY_FOO
|
|
END
|
|
|
|
mkdir dir1 dir2
|
|
echo 'AC_DEFUN([MY_FOO], [::ko::ko::])' > dir1/1.m4
|
|
echo 'AC_DEFUN([MY_FOO], [::ok::ok::])' > dir2/2.m4
|
|
|
|
$ACLOCAL -I dir2 \
|
|
&& $FGREP 'm4_include([dir2/2.m4])' aclocal.m4 \
|
|
&& not $FGREP 'm4_include([dir1/1.m4])' aclocal.m4 \
|
|
&& $AUTOCONF \
|
|
&& not $FGREP '::ko::ko::' configure \
|
|
&& $FGREP '::ok::ok::' configure \
|
|
|| r='not ok'
|
|
|
|
test_end
|
|
|
|
#---------------------------------------------------------------------------
|
|
|
|
test_begin "AC_CONFIG_MACRO_DIRS([foo]) can create directory 'foo'"
|
|
|
|
cat > configure.ac << 'END'
|
|
AC_INIT([x], [1.0])
|
|
AC_CONFIG_MACRO_DIRS([foo])
|
|
MY_MACRO
|
|
END
|
|
|
|
mkdir acdir
|
|
echo 'AC_DEFUN([MY_MACRO], [:])' > acdir/bar.m4
|
|
|
|
test ! -d foo \
|
|
&& $ACLOCAL --install --system-acdir ./acdir \
|
|
&& diff acdir/bar.m4 foo/bar.m4 \
|
|
|| r='not ok'
|
|
|
|
test_end
|
|
|
|
#---------------------------------------------------------------------------
|
|
|
|
test_begin "AC_CONFIG_MACRO_DIRS([non-existent]) warns (1)"
|
|
|
|
cat > configure.ac << 'END'
|
|
AC_INIT([oops], [1.0])
|
|
AC_CONFIG_MACRO_DIRS([non-existent])
|
|
AM_INIT_AUTOMAKE
|
|
END
|
|
|
|
$ACLOCAL -Wno-error 2>stderr \
|
|
&& cat stderr >&2 \
|
|
&& grep "couldn't open directory 'non-existent'" stderr \
|
|
&& test -f aclocal.m4 \
|
|
|| r='not ok'
|
|
|
|
rm -rf aclocal.m4 autom4te*.cache
|
|
|
|
$ACLOCAL -Werror -Wno-unsupported \
|
|
&& test -f aclocal.m4 \
|
|
|| r='not ok'
|
|
|
|
test_end
|
|
|
|
#---------------------------------------------------------------------------
|
|
|
|
test_begin "AC_CONFIG_MACRO_DIRS([non-existent]) warns (2)"
|
|
|
|
cat > configure.ac << 'END'
|
|
AC_INIT([oops], [1.0])
|
|
AC_CONFIG_MACRO_DIRS([dir-ok])
|
|
AC_CONFIG_MACRO_DIRS([dir-ko])
|
|
END
|
|
|
|
mkdir dir-ok
|
|
not $ACLOCAL 2>stderr \
|
|
&& cat stderr >&2 \
|
|
&& grep "couldn't open directory 'dir-ko'" stderr \
|
|
&& not grep "dir-ok" stderr \
|
|
&& test ! -e aclocal.m4 \
|
|
|| r='not ok'
|
|
|
|
test_end
|
|
|
|
#---------------------------------------------------------------------------
|
|
|
|
test_begin "AC_CONFIG_MACRO_DIRS([existent non-existent]) errors out"
|
|
|
|
cat > configure.ac << 'END'
|
|
AC_INIT([oops], [1.0])
|
|
AC_CONFIG_MACRO_DIRS([dir-ok])
|
|
AC_CONFIG_MACRO_DIRS([dir-ko])
|
|
END
|
|
|
|
mkdir dir-ok
|
|
|
|
not $ACLOCAL -Wnone --install 2>stderr \
|
|
&& cat stderr >&2 \
|
|
&& grep "couldn't open directory 'dir-ko'" stderr \
|
|
&& test ! -e dir-ko \
|
|
|| r='not ok'
|
|
|
|
test_end
|
|
|
|
#---------------------------------------------------------------------------
|
|
|
|
test_begin "AC_CONFIG_MACRO_DIRS([not-exist]) and ACLOCAL_AMFLAGS = -I not-exist"
|
|
|
|
cat > configure.ac << 'END'
|
|
AC_INIT([oops], [1.0])
|
|
AC_CONFIG_MACRO_DIRS([not-exist])
|
|
END
|
|
|
|
cat > Makefile.am << 'END'
|
|
ACLOCAL_AMFLAGS = -I not-exist
|
|
END
|
|
|
|
$ACLOCAL -Wno-error 2>stderr \
|
|
&& cat stderr >&2 \
|
|
&& test $(grep -c "couldn't open directory 'not-exist'" stderr) -eq 1 \
|
|
|| r='not ok'
|
|
|
|
test_end
|
|
|
|
#---------------------------------------------------------------------------
|
|
|
|
# Avoid spurious failures with pre-2.70 autoconf.
|
|
# FIXME: remove this in automake 2.0, once we require Autoconf 2.70.
|
|
if echo 'AC_INIT AC_CONFIG_MACRO_DIRS' | $AUTOCONF -o/dev/null -; then
|
|
|
|
test_begin "AC_CONFIG_MACRO_DIRS interaction with AC_REQUIRE"
|
|
|
|
unindent > configure.ac <<'END'
|
|
AC_INIT([req], [1.0])
|
|
AC_CONFIG_MACRO_DIRS([m1 m2])
|
|
AC_DEFUN([MY_FOO], [
|
|
AC_REQUIRE([MY_BAR])
|
|
AC_REQUIRE([MY_BAZ])
|
|
])
|
|
MY_FOO
|
|
END
|
|
|
|
mkdir m1 m2
|
|
echo 'AC_DEFUN([MY_BAR], [^^my^^bar^^])' > m1/x.m4
|
|
echo 'AC_DEFUN([MY_BAZ], [~~my~~baz~~])' > m2/x.m4
|
|
|
|
st=0; $ACLOCAL 2>stderr || st=$?
|
|
cat stderr >&2
|
|
|
|
test $st -eq 0 \
|
|
&& test ! -s stderr \
|
|
&& $FGREP 'm4_include([m1/x.m4])' aclocal.m4 \
|
|
&& $FGREP 'm4_include([m2/x.m4])' aclocal.m4 \
|
|
&& $AUTOCONF \
|
|
&& not $EGREP 'MY_(FOO|BAR|BAZ)' configure \
|
|
&& $FGREP '^^my^^bar^^' configure \
|
|
&& $FGREP '~~my~~baz~~' configure \
|
|
|| r='not ok'
|
|
|
|
test_end
|
|
|
|
else
|
|
|
|
skip_ -r "autoconf is too old (AC_CONFIG_MACRO_DIRS not defined)"
|
|
|
|
fi
|
|
|
|
:
|