+2009-03-07 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Improve `make -n dist' and `make -n distcheck' for GNU make.
+ Ensure that `make -n dist' and `make -n distcheck' do not change
+ files, due to GNU make executing rules containing `$(MAKE)'.
+ * lib/am/distdir.am (distdir): Separate the creation of
+ `$(distdir)/$$subdir' for `$(DIST_SUBDIRS)' and the recursion
+ into the `$(DIST_SUBDIRS)' in two separate rule commands.
+ (distcheck): Exit recursive rule early when run with `make -n',
+ as detected by a witness file.
+ * tests/maken.test, tests/maken2.test: New tests.
+ * tests/Makefile.am: Update.
+ * NEWS: Update.
+
2009-03-07 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
Solaris make testsuite fixes.
test -d "$(distdir)/$$subdir" \
|| $(MKDIR_P) "$(distdir)/$$subdir" \
|| exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
$(am__relativize); \
new_distdir=$$reldir; \
mkdir $(distdir)/_build
mkdir $(distdir)/_inst
chmod a-w $(distdir)
+ test -d $(distdir)/_build || exit 0; \
dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
&& dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
&& $(am__cd) $(distdir)/_build \
containing the error message, but exit successfully. However, `make dist'
will ensure that no such bogus man pages are packaged into a tarball.
+ - Targets provided by automake behave better with `make -n', in that they
+ take care not to create files.
+
* Bugs introduced by 1.10:
- Fix output of dummy dependency files in presence of post-processed
test -d "$(distdir)/$$subdir" \
|| $(MKDIR_P) "$(distdir)/$$subdir" \
|| exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
$(am__relativize); \
new_distdir=$$reldir; \
test -d "$(distdir)/$$subdir" \
|| $(MKDIR_P) "$(distdir)/$$subdir" \
|| exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
$(am__relativize); \
new_distdir=$$reldir; \
## directory, then we use `distdir' instead of `top_distdir'; this lets
## us work correctly with an enclosing package.
##
+## Split the loop for the directory creation and the one for recursion,
+## so that with GNU make -n, only the latter is executed.
if %?SUBDIRS%
@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
test -d "$(distdir)/$$subdir" \
|| $(MKDIR_P) "$(distdir)/$$subdir" \
|| exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
$(am__relativize); \
new_distdir=$$reldir; \
mkdir $(distdir)/_inst
## Undo the write access.
chmod a-w $(distdir)
+## With GNU make, the following command will be executed even with `make -n',
+## due to the presence of `$(MAKE)'. That is normally all well (and `$(MAKE)'
+## is necessary for things like parallel distcheck), but here we don't want
+## execution. To avoid MAKEFLAGS parsing hassles, use a witness file that a
+## non-`-n' run would have just created.
+ test -d $(distdir)/_build || exit 0; \
## Compute the absolute path of `_inst'. Strip any leading DOS drive
## to allow DESTDIR installations. Otherwise "$(DESTDIR)$(prefix)" would
## expand to "c:/temp/am-dc-5668/c:/src/package/package-1.0/_inst".
maintclean.test \
make.test \
makej.test \
+maken.test \
+maken2.test \
makevars.test \
man.test \
man2.test \
maintclean.test \
make.test \
makej.test \
+maken.test \
+maken2.test \
makevars.test \
man.test \
man2.test \
--- /dev/null
+#! /bin/sh
+# Copyright (C) 2009 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, 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/>.
+
+# Ensure that `make -n dist' and `make -n distcheck' do not change files
+# on disk, due to GNU make executing rules containing `$(MAKE)'.
+
+# Please keep this test in sync with sister test maken2.test.
+
+. ./defs || Exit 1
+
+set -e
+
+mkdir sub
+
+cat >> configure.in << 'END'
+AC_CONFIG_FILES([sub/Makefile])
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+SUBDIRS = sub
+distcheck-hook:
+ @: > stamp-distcheck-hook
+test-no-distdir:
+ test ! -d $(distdir)
+ test ! -f stamp-distcheck-hook
+ test ! -f sub/stamp-sub-dist-hook
+END
+cat >sub/Makefile.am <<'END'
+dist-hook:
+ @: > stamp-sub-dist-hook
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+./configure
+
+$sleep
+echo stamp > stampfile
+$sleep
+for target in dist distcheck; do
+ $MAKE -n $target
+ $MAKE test-no-distdir
+ test `ls -1t | sed 1q` = stampfile
+done
+
+Exit 0
--- /dev/null
+#! /bin/sh
+# Copyright (C) 2009 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, 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/>.
+
+# Ensure that `make -n dist' and `make -n distcheck' show what would happen.
+# This currently works for GNU make only.
+
+# Please keep this test in sync with sister test maken.test.
+
+required=GNUmake
+. ./defs || Exit 1
+
+set -e
+
+mkdir sub
+
+cat >> configure.in << 'END'
+AC_CONFIG_FILES([sub/Makefile])
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+SUBDIRS = sub
+distcheck-hook:
+ @: > stamp-distcheck-hook
+test-no-distdir:
+ test ! -d $(distdir)
+ test ! -f stamp-distcheck-hook
+ test ! -f sub/stamp-sub-dist-hook
+END
+cat >sub/Makefile.am <<'END'
+dist-hook:
+ @: > stamp-sub-dist-hook
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+./configure
+
+$sleep
+echo stamp > stampfile
+$sleep
+for target in dist distcheck; do
+ $MAKE -n $target
+ $MAKE test-no-distdir
+ $MAKE -n $target | grep stamp-sub-dist-hook
+ test `ls -1t | sed 1q` = stampfile
+done
+
+Exit 0