]> git.ipfire.org Git - thirdparty/automake.git/commitdiff
Merge branch 'master' into ng/master
authorStefano Lattarini <stefano.lattarini@gmail.com>
Tue, 23 Dec 2014 23:59:09 +0000 (00:59 +0100)
committerStefano Lattarini <stefano.lattarini@gmail.com>
Tue, 23 Dec 2014 23:59:09 +0000 (00:59 +0100)
* master:
  dist: fix bug#18286 "distcheck fails to detect missing files"
  tests: expose automake bug#18286 "distcheck fails to detect missing files"
  include: fix bug in handling of user-defined makefile fragments generation
  tests: expose bug in handling of user-defined makefile fragments generation

+ Extra non-trivial changes:

* lib/am/distcheck.mk: Backport the changes done to lib/am/distdir.am
in commit v1.14.1-4-g01a7a4a (fix for automake bug#18286 "distcheck
fails to detect missing files").

Signed-off-by: Stefano Lattarini <stefano.lattarini@gmail.com>
1  2 
lib/am/configure.am
lib/am/distcheck.mk
t/txinfo-builddir.sh

index 2dae4d16738a1a3eb5169254767842eb07f421f4,34ebd17ad398669f5a8c77553156be7bfd89b7b0..92f96162dcdd2896c21ad1950d204097172fdd25
@@@ -71,9 -83,13 +71,13 @@@ $(am.relpath.makefile): %MAKEFILE-DEPS
        esac;
  
  ## Avoid the "deleted header file" problem for the dependencies.
- ?HAVE-MAKEFILE-IN-DEPS?%MAKEFILE-IN-DEPS%:
+ ##  Add the trailing "$(am__empty)" to trick Automake into not spuriously
+ ## complaining about "duplicated targets" in case the %MAKEFILE-IN-DEPS%
+ ## list expands to a single target that is also declared in some
+ ## user-defined rule.
+ ?HAVE-MAKEFILE-IN-DEPS?%MAKEFILE-IN-DEPS% $(am__empty):
  
 -DIST_COMMON += %MAKEFILE-AM%
 +am.dist.common-files += $(am.relpath.makefile.am)
  
  
  ## --------------------------- ##
index 9dfb5ad02dff0bbfb422fe075f934df89957fae7,0000000000000000000000000000000000000000..9d43471f5c4e00bea66ab96b4e7434aa6243ba90
mode 100644,000000..100644
--- /dev/null
@@@ -1,249 -1,0 +1,252 @@@
-       mkdir $(distdir)/_build $(distdir)/_inst
 +## automake - create Makefile.in from Makefile.am
 +## Copyright (C) 2001-2014 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.
 +
 +
 +# ---------------------------------------- #
 +#  Building various distribution flavors.  #
 +# ---------------------------------------- #
 +
 +# ----------------------------------------------------------------------
 +# FIXME: how and where are these old comments still relevant?
 +# ----------------------------------------------------------------------
 +# Note that we don't use GNU tar's '-z' option.  One reason (but
 +# not the only reason) is that some versions of tar (e.g., OSF1)
 +# interpret '-z' differently.
 +#
 +# The -o option of GNU tar used to exclude empty directories.  This
 +# behavior was fixed in tar 1.12 (released on 1997-04-25).  But older
 +# versions of tar are still used (for instance NetBSD 1.6.1 ships
 +# with tar 1.11.2).  We do not do anything specific w.r.t. this
 +# incompatibility since packages where empty directories need to be
 +# present in the archive are really unusual.
 +# ----------------------------------------------------------------------
 +
 +# TODO: this definition-oriented interface is almost good enough to offer
 +# as a public API allowing the user to define and use new archive formats.
 +# However, we must think carefully about possible problems before setting
 +# the API in stone.  So, for the moment, we keep this internal and
 +# private; there will be time to make it public, once (and if) there's
 +# any request from the user base.
 +
 +am.dist.all-formats =
 +
 +am.dist.all-formats += gzip
 +am.dist.ext.gzip = tar.gz
 +am.dist.compress-cmd.gzip = GZIP=$(GZIP_ENV) gzip -c
 +am.dist.uncompress-cmd.gzip = GZIP=$(GZIP_ENV) gzip -dc
 +
 +am.dist.all-formats += bzip2
 +am.dist.ext.bzip2 = tar.bz2
 +am.dist.compress-cmd.bzip2 = BZIP2=$${BZIP2--9} bzip2 -c
 +am.dist.uncompress-cmd.bzip2 = bzip2 -dc
 +
 +am.dist.all-formats += lzip
 +am.dist.ext.lzip = tar.lz
 +am.dist.compress-cmd.lzip = lzip -c $${LZIP_OPT--9}
 +am.dist.uncompress-cmd.lzip = lzip -dc
 +
 +am.dist.all-formats += xz
 +am.dist.ext.xz = tar.xz
 +am.dist.compress-cmd.xz = XZ_OPT=$${XZ_OPT--e} xz -c
 +am.dist.uncompress-cmd.xz = xz -dc
 +
 +am.dist.all-formats += zip
 +am.dist.ext.zip = zip
 +am.dist.create-cmd.zip = \
 +  rm -f $(distdir).zip && zip -rq $(distdir).zip $(distdir)
 +am.dist.extract-cmd.zip = \
 +  unzip $(distdir).zip
 +
 +# This is namespace-safe, so it's OK to accept values from
 +# the environment.
 +AM_DIST_FORMATS ?= gzip
 +
 +am.dist.bad-targets := \
 +  $(filter-out $(am.dist.all-formats),$(AM_DIST_FORMATS))
 +ifdef am.dist.bad-targets
 +  $(call am.fatal,Invalid distribution formats: $(am.dist.bad-targets))
 +endif
 +
 +am.dist.all-targets = $(patsubst %,.am/dist-%,$(am.dist.all-formats))
 +am.dist.default-targets = $(patsubst %,.am/dist-%,$(AM_DIST_FORMATS))
 +
 +am.dist.default-archives = \
 +  $(foreach x,$(AM_DIST_FORMATS),$(distdir).$(am.dist.ext.$x))
 +
 +define am.dist.create-archive-for-format.aux
 +$(or $(am.dist.create-cmd.$1), \
 +  tardir=$(distdir) && $(am__tar) \
 +    | $(am.dist.compress-cmd.$1) >$(distdir).$(am.dist.ext.$1))
 +endef
 +am.dist.create-archive-for-format = $(call $0.aux,$(strip $1))
 +
 +define am.dist.extract-archive-for-format.aux
 +$(or $(am.dist.extract-cmd.$1), \
 +  $(am.dist.uncompress-cmd.$1) $(distdir).$(am.dist.ext.$1) \
 +    | $(am__untar))
 +endef
 +am.dist.extract-archive-for-format = $(call $0.aux,$(strip $1))
 +
 +# The use of this option to pass arguments to the 'gzip' invocation is
 +# not only documented in the manual and useful for better compatibility
 +# with mainline Automake, but also actively employed by some important
 +# makefile fragments (e.g., Gnulib's 'top/maint.mk', at least up to
 +# commit v0.0-7569-gec58403).  So keep it.
 +GZIP_ENV = --best
 +
 +.PHONY: $(am.dist.all-targets)
 +$(am.dist.all-targets): .am/dist-%: distdir
 +      $(call am.dist.create-archive-for-format,$*)
 +
 +ifdef SUBDIRS
 +AM_RECURSIVE_TARGETS += dist dist-all
 +endif
 +
 +.PHONY: dist dist-all
 +dist dist-all: $(am.dist.default-targets)
 +      $(am.dist.post-remove-distdir)
 +
 +
 +# ---------------------------- #
 +#  Checking the distribution.  #
 +# ---------------------------- #
 +
 +ifdef SUBDIRS
 +AM_RECURSIVE_TARGETS += distcheck
 +endif
 +
 +# This target untars the dist file and tries a VPATH configuration.  Then
 +# it guarantees that the distribution is self-contained by making another
 +# tarfile.
 +.PHONY: distcheck
 +distcheck: dist
 +      $(call am.dist.extract-archive-for-format, \
 +        $(firstword $(AM_DIST_FORMATS)))
 +## Make the new source tree read-only.  Distributions ought to work in
 +## this case.  However, make the top-level directory writable so we
 +## can make our new subdirs.
 +      chmod -R a-w $(distdir)
 +      chmod u+w $(distdir)
-         && cd $(distdir)/_build \
-         && ../configure --srcdir=.. --prefix="$$dc_install_base" \
++      mkdir $(distdir)/_build $(distdir)/_build/sub $(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".
 +      dc_install_base=`cd $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
 +## We will attempt a DESTDIR install in $dc_destdir.  We don't
 +## create this directory under $dc_install_base, because it would
 +## create very long directory names.
 +        && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
 +        $(if $(am.dist.handle-distcheck-hook),&& $(MAKE) distcheck-hook) \
-           $(AM_DISTCHECK_CONFIGURE_FLAGS) \
-           $(DISTCHECK_CONFIGURE_FLAGS) \
++## If we merely used '$(distdir)/_build' here, "make distcheck" could
++## sometimes fail to detect missing files in the distribution tarball,
++## especially in those cases where both the generated files and their
++## dependencies are explicitly in $(srcdir).  See automake bug#18286.
++        && cd $(distdir)/_build/sub \
++        && ../../configure \
 +          $(if $(am.dist.handle-gettext),--with-included-gettext) \
 +## Additional flags for configure.
-           --srcdir=.. --prefix="$$dc_install_base" \
++          $(AM_DISTCHECK_CONFIGURE_FLAGS) $(DISTCHECK_CONFIGURE_FLAGS) \
 +## At the moment, the code doesn't actually support changes in these --srcdir
 +## and --prefix values, so don't allow them to be overridden by the user or
 +## the developer.  That used to be allowed, and caused issues in practice
 +## (in corner-case usages); see automake bug#14991.
++          --srcdir=../.. --prefix="$$dc_install_base" \
 +        && $(MAKE) \
 +        && $(MAKE) dvi \
 +        && $(MAKE) check \
 +        && $(MAKE) install \
 +        && $(MAKE) installcheck \
 +        && $(MAKE) uninstall \
 +        && $(MAKE) distuninstallcheck_dir="$$dc_install_base" \
 +              distuninstallcheck \
 +## Make sure the package has proper DESTDIR support (we could not test this
 +## in the previous install/installcheck/uninstall test, because it's reasonable
 +## for installcheck to fail in a DESTDIR install).
 +## We make the '$dc_install_base' read-only because this is where files
 +## with missing DESTDIR support are likely to be installed.
 +        && chmod -R a-w "$$dc_install_base" \
 +## The logic here is quite convoluted because we must clean $dc_destdir
 +## whatever happens (it won't be erased by the next run of distcheck like
 +## $(distdir) is).
 +        && ({ \
 +## Build the directory, so we can cd into it even if "make install"
 +## didn't create it.  Use mkdir, not $(MKDIR_P) because we want to
 +## fail if the directory already exists (PR/413).
 +             (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
 +             && $(MAKE) DESTDIR="$$dc_destdir" install \
 +             && $(MAKE) DESTDIR="$$dc_destdir" uninstall \
 +             && $(MAKE) DESTDIR="$$dc_destdir" \
 +                  distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
 +            } || { rm -rf "$$dc_destdir"; exit 1; }) \
 +        && rm -rf "$$dc_destdir" \
 +        && $(MAKE) dist \
 +## Make sure to remove the dists we created in the test build directory.
 +        && rm -f $(am.dist.default-archives) \
 +        && $(MAKE) distcleancheck
 +      $(am.dist.post-remove-distdir)
 +      @(echo "$(distdir) archives ready for distribution: "; \
 +        list='$(am.dist.default-archives)'; \
 +        for i in $$list; do echo $$i; done; \
 +       ) | sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
 +
 +# Define distuninstallcheck_listfiles and distuninstallcheck separately
 +# from distcheck, so that they can be overridden by the user.
 +.PHONY: distuninstallcheck
 +distuninstallcheck_listfiles = find . -type f -print
 +# The 'dir' file (created by install-info) might still exist after
 +# uninstall, so we must be prepared to account for it.  The following
 +# check is not 100% strict, but is definitely good enough, and even
 +# accounts for overridden $(infodir).
 +am.dist.uninstallcheck-listfiles = $(distuninstallcheck_listfiles) \
 +  | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
 +distuninstallcheck:
 +      @test -n '$(distuninstallcheck_dir)' || { \
 +        echo 'ERROR: trying to run $@ with an empty' \
 +             '$$(distuninstallcheck_dir)' >&2; \
 +        exit 1; \
 +      }; \
 +      cd '$(distuninstallcheck_dir)' || { \
 +        echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \
 +        exit 1; \
 +      }; \
 +      test `$(am.dist.uninstallcheck-listfiles) | wc -l` -eq 0 \
 +         || { echo "ERROR: files left after uninstall:" ; \
 +              if test -n "$(DESTDIR)"; then \
 +                echo "  (check DESTDIR support)"; \
 +              fi ; \
 +              $(distuninstallcheck_listfiles) ; \
 +              exit 1; } >&2
 +
 +# Define '$(distcleancheck_listfiles)' and 'distcleancheck' separately
 +# from distcheck, so that they can be overridden by the user.
 +ifeq ($(call am.vars.is-undef,distcleancheck_listfiles),yes)
 +  distcleancheck_listfiles := find . -type f -print
 +endif
 +.PHONY: distcleancheck
 +distcleancheck: distclean
 +      @if test '$(srcdir)' = . ; then \
 +        echo "ERROR: distcleancheck can only run from a VPATH build" ; \
 +        exit 1 ; \
 +      fi
 +      @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
 +        || { echo "ERROR: files left in build directory after distclean:" ; \
 +             $(distcleancheck_listfiles) ; \
 +             exit 1; } >&2
Simple merge