From ac47c22e3c0c8b055cdd47ccd18621c56f807b37 Mon Sep 17 00:00:00 2001 From: Jim Meyering Date: Thu, 20 Mar 2014 12:31:32 -0700 Subject: [PATCH] "make dist" did not depend on $(BUILT_SOURCES) * lib/am/distdir.am (distdir-am): New intermediate target. Interpose this target between $(distdir) and its dependency on $(DISTFILES), so that we can ensure $(BUILT_SOURCES) are all created before we begin creating $(DISTFILES). * t/dist-vs-built-sources.sh: Test for this. * t/list-of-tests.mk (handwritten_TESTS): Add it. * NEWS (Bugs fixed): Mention it. Assaf Gordon reported that "make dist" (after ./configure from a pristine clone of GNU hello) would fail due to the absence of configmake.h while compiling lib/localcharset.c. https://lists.gnu.org/r/bug-hello/2014-03/msg00016.html --- NEWS | 3 +++ lib/am/distdir.am | 7 ++++-- t/dist-vs-built-sources.sh | 56 ++++++++++++++++++++++++++++++++++++++++++++++ t/list-of-tests.mk | 1 + 4 files changed, 65 insertions(+), 2 deletions(-) create mode 100644 t/dist-vs-built-sources.sh diff --git a/NEWS b/NEWS index 04a285565..6d8b9d248 100644 --- a/NEWS +++ b/NEWS @@ -113,6 +113,9 @@ New in ?.?.?: - Installed 'aclocal' m4 macros can now accept installation directories containing '@' characters (automake bug#20903) + - "./configure && make dist" no longer fails when a distributed file depends + on one from BUILT_SOURCES. + - When combining AC_LIBOBJ or AC_FUNC_ALLOCA with the "--disable-dependency-tracking" configure option in an out of source build, the build sub-directory defined by AC_CONFIG_LIBOBJ_DIR is now diff --git a/lib/am/distdir.am b/lib/am/distdir.am index 653966f0e..4b6543591 100644 --- a/lib/am/distdir.am +++ b/lib/am/distdir.am @@ -72,10 +72,13 @@ endif %?SUBDIRS% .PHONY: distdir if %?SUBDIRS% -AM_RECURSIVE_TARGETS += distdir +AM_RECURSIVE_TARGETS += distdir distdir-am endif %?SUBDIRS% -distdir: $(DISTFILES) +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) ## ## For Gnits users, this is pretty handy. Look at 15 lines ## in case some explanatory text is desirable. diff --git a/t/dist-vs-built-sources.sh b/t/dist-vs-built-sources.sh new file mode 100644 index 000000000..94f8b600f --- /dev/null +++ b/t/dist-vs-built-sources.sh @@ -0,0 +1,56 @@ +#! /bin/sh +# Copyright (C) 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 . + +# Ensure that "make dist" no longer fails when a distributed file +# depends on a file from the list of BUILT_SOURCES. + +. test-init.sh + +cat >> configure.ac << 'END' +AC_PROG_CC +AC_OUTPUT +END + +cat > Makefile.am << 'END' +BUILT_SOURCES = h.h +h.h: + rm -f $@ $@-t + printf '%s\n' '#define F "F"' > $@-t + mv -f $@-t $@ +CLEANFILES = h.h + +EXTRA_DIST = gen +gen: foo + ./foo > $@-t && mv $@-t $@ + +bin_PROGRAMS = foo +foo_SOURCES = foo.c +END + +cat > foo.c << 'END' +#include "h.h" +int main (void) { printf ("%s\n", F); return 0; } +END +chmod a-w foo.c + +$ACLOCAL +$AUTOCONF +$AUTOMAKE + +./configure +$MAKE dist + +: diff --git a/t/list-of-tests.mk b/t/list-of-tests.mk index b49a3ad0f..61ad5b4e8 100644 --- a/t/list-of-tests.mk +++ b/t/list-of-tests.mk @@ -409,6 +409,7 @@ t/dist-missing-m4.sh \ t/dist-readonly.sh \ t/dist-repeated.sh \ t/dist-pr109765.sh \ +t/dist-vs-built-sources.sh \ t/distcleancheck.sh \ t/distcom2.sh \ t/distcom3.sh \ -- 2.11.4.GIT