blob: e7b78bdfd66583dad2eb3e70da2859a9075fdd9e [file] [log] [blame]
#! /bin/sh
# Copyright (C) 2009-2024 Free Software Foundation, Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 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/>.
# Test 'make -n' for various targets, to ensure that:
#
# 1. no files or directories are created or removed, and
#
# 2. if using GNU make or a make implementation supporting the .MAKE
# special target, the output from make is sufficiently complete.
#
# This test exercises the GCS-mandated targets (except for dist)
# as well as tags.
# For gen-testsuite-part: ==> try-with-serial-tests <==
. test-init.sh
# Does $MAKE support the '.MAKE' special target?
have_dotmake=false
if using_gmake; then
have_dotmake=: # GNU make must support it.
else
unindent > mk.tmp << 'END'
targ.tmp:
: > $@
.MAKE: targ.tmp
END
if $MAKE -n -f mk.tmp targ.tmp && test -f targ.tmp; then
have_dotmake=:
fi
fi
mkdir sub sub2
cat >> configure.ac << 'END'
AC_CONFIG_FILES([sub/Makefile sub2/Makefile])
AC_OUTPUT
END
cat > Makefile.am <<'END'
TESTS = foo.test
SUBDIRS = sub sub2
##BUILT_SOURCES = foo
foo:
foo.test:
all-local:
@: > stamp-all
install-data-local:
@: > stamp-install
uninstall-local:
@: > stamp-uninstall
clean-local:
@: > stamp-clean
distclean-local:
@: > stamp-distclean
info-local:
@: > stamp-info
html-local:
@: > stamp-html
dvi-local:
@: > stamp-dvi
ps-local:
@: > stamp-ps
pdf-local:
@: > stamp-pdf
check-local:
@: > stamp-check
installcheck-local:
@: > stamp-installcheck
mostlyclean-local:
@: > stamp-mostlyclean
maintainer-clean-local:
@: > stamp-maintainer-clean
END
cat >sub/Makefile.am <<'END'
all-local:
@: > stamp-all-sub
install-data-local:
@: > stamp-install-sub
uninstall-local:
@: > stamp-uninstall-sub
clean-local:
@: > stamp-clean-sub
distclean-local:
@: > stamp-distclean-sub
info-local:
@: > stamp-info-sub
html-local:
@: > stamp-html-sub
dvi-local:
@: > stamp-dvi-sub
ps-local:
@: > stamp-ps-sub
pdf-local:
@: > stamp-pdf-sub
check-local:
@: > stamp-check-sub
installcheck-local:
@: > stamp-installcheck-sub
tags:
@: > stamp-tags-sub
mostlyclean-local:
@: > stamp-mostlyclean-sub
maintainer-clean-local:
@: > stamp-maintainer-clean-sub
END
cat >sub2/Makefile.am <<'END'
all install uninstall clean check:
@: > sub2-$@-should-not-be-executed
info dvi pdf ps:
@: > sub2-$@-should-not-be-executed
html:
@: > sub2-$@-should-not-be-executed
install-info install-html install-dvi install-pdf install-ps:
@: > sub2-$@-should-not-be-executed
installcheck installdirs tags mostlyclean:
@: > sub2-$@-should-not-be-executed
## These targets cannot be overridden like this:
## install-strip distclean maintainer-clean
END
$ACLOCAL
$AUTOCONF
check_targets ()
{
for target in \
all install install-strip uninstall clean distclean check \
info html dvi pdf ps \
install-info install-html install-dvi install-pdf install-ps \
installcheck installdirs tags mostlyclean maintainer-clean
do
run_make -O -- -n $target
case $target in
install-* | installdirs | tags ) ;;
*)
if $have_dotmake; then
grep "stamp-$target$" stdout || exit 1
fi
test ! -e "stamp-$target" || exit 1
;;
esac
case $target in
install-* | installdirs ) ;;
*)
if $have_dotmake; then
grep "stamp-$target-sub" stdout || exit 1
fi
test ! -e "sub/stamp-$target-sub" || exit 1
;;
esac
case $target in
distclean | maintainer-clean ) ;;
*)
if $have_dotmake; then
grep "should-not-be-executed" stdout || exit 1
fi
test ! -e "sub2/sub2-$target-should-not-be-executed" || exit 1
;;
esac
done
}
$AUTOMAKE -a -Wno-override
./configure
check_targets || exit 1
# Now, introduce BUILT_SOURCES into the toplevel Makefile
# TODO: add BUILT_SOURCES to sub2, fix fallout.
sed 's/##//' < Makefile.am > t
mv -f t Makefile.am
$AUTOMAKE -Wno-override Makefile
./configure
check_targets || exit 1
exit 0