#! /bin/sh
# Copyright (C) 2012-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 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 <https://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

:
