automake-ng
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Automake-NG] [PATCH 6/7] [ng] dist: new API to specify formats of distr


From: Stefano Lattarini
Subject: [Automake-NG] [PATCH 6/7] [ng] dist: new API to specify formats of distribution tarballs
Date: Sun, 12 Aug 2012 23:20:11 +0200

The API to specify the formats of distribution tarballs has been changed
completely, in a BACKWARD-INCOMPATIBLE way.

Instead of using the various 'dist-*' automake options, the developer is
now expected to specify the default formats of its distribution tarballs
with the special variable AM_DIST_FORMATS; for example, where once would
have been:

    AM_INIT_AUTOMAKE([dist-bzip2 dist-zip])

now it must be:

    AM_DIST_FORMATS = gzip bzip2 zip

and similarly, where once would have been:

    AUTOMAKE_OPTIONS = no-dist-gzip dist-bzip2 dist-xz

now is it simply:

    AM_DIST_FORMATS = bzip2 xz

Similarly, The various 'dist-*' targets (dist-gzip, dist-xz, dist-lzip,
dist-bzip2 and dist-gz) has been removed.  If the user wants to generate
tarballs for formats not specified by the default AM_DIST_FORMATS, he can
simply override that variable dynamically:

    # Will generate a '.zip' archive and a '.tar.xz' archive, and not
    # further ones.
    make dist AM_DIST_FORMATS='zip xz'

This change is of course is totally backward incompatible, but the
enhanced flexibility and simplicity is worth it.  Not to mention that
the transition from the mainline Automake API to the new Automake-NG
one is trivial.

* NG-NEWS: Update.
* ng/automake-ng.texi: Likewise.
* configure.ac (AM_INIT_AUTOMAKE): Drop the 'dist-xz' option.  While
at it, drop the 'color-tests' option (now on by default, even in
coming-soon Automake 1.13) and add the 'ng' option (mostly for some
showing-off :-).
* t/ax/am-test-lib.sh: Also unset 'AM_DIST_FORMATS'.
* Makefile.am (AM_DIST_FORMATS): New, containing 'gzip' ad 'xz' (so
that we distribute the same formats we did before).
* lib/am/distcheck.mk (AM_DIST_FORMATS): New, defaulting to 'gzip'.
(am.dist.bad-targets): New, list invalid entries of $(AM_DIST_FORMATS).
Error out with a suitable message if that variable is non-empty.
Rename all the 'dist-*' targets, once public, to '.am/dist-*' (which
are private).  Adjust their rules.
(am.dist.all-targets): Adjust to said 'dist-*' => '.am/dist-*'
renaming.
(am.dist.default-targets): New, defined from $(AM_DIST_FORMATS).
(dist, dist-all): Rewritten to rely on dependencies rather than on
recursive make invocation (the new API allows us to do so easily).
Other minor related adjustments.
(distcheck): Use $(AM_DIST_FORMATS) instead of $(am.dist.formats)
in the recipe.
* automake.in (handle_dist): Drop analysis of the various 'dist-*'
options, and of the 'no-dist-gzip' one; don't define the internal
make variable 'am.dist.formats'.
* lib/Automake/Options.pm (_is_valid_easy_option): Recognize the
various 'dist-*' options and the 'no-dist-gzip' one no more.
(_process_option_list): Explicitly reject them (to give better
diagnostic).
* t/dist-obsolete-opts.sh: New, check such diagnostic.
* t/dist-obsolete.sh: Remove as obsolete.
* t/repeated-options.sh: Minor adjustments to avoid spurious
failures.
* t/dist-formats.tap: Adjust heavily (almost a complete rewrite).

Signed-off-by: Stefano Lattarini <address@hidden>
---
 Makefile.am                                   |   3 +
 NG-NEWS                                       |  48 +++-
 automake.in                                   |  22 --
 configure.ac                                  |   3 +-
 doc/automake-ng.texi                          | 109 ++++---
 lib/Automake/Options.pm                       |  22 +-
 lib/am/distcheck.mk                           |  34 +--
 t/ax/am-test-lib.sh                           |   2 +
 t/dist-formats.tap                            | 392 ++++++--------------------
 t/{dist-obsolete.sh => dist-obsolete-opts.sh} |  15 +-
 t/repeated-options.sh                         |  25 +-
 11 files changed, 229 insertions(+), 446 deletions(-)
 rename t/{dist-obsolete.sh => dist-obsolete-opts.sh} (64%)

diff --git a/Makefile.am b/Makefile.am
index db3dea7..9455f0f 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -27,6 +27,9 @@ EXTRA_DIST =
 ##  Top level.  ##
 ## ------------ ##
 
+# Distribution formats.
+AM_DIST_FORMATS = gzip xz
+
 # We want a handful of substitutions to be fully-expanded by make;
 # then use config.status to substitute the remainder where a single
 # expansion is sufficient.  We use a funny notation here to avoid
diff --git a/NG-NEWS b/NG-NEWS
index 8f3cf72..129da68 100644
--- a/NG-NEWS
+++ b/NG-NEWS
@@ -212,24 +212,54 @@ Distribution
 
      EXTRA_DIST = $(wildcard doc/*.txt $(srcdir)/doc/*.txt)  # Better.
 
-* The make variables $(DISTFILES), $(DIST_COMMON), $(DIST_SOURCES),
-  $(DIST_TARGETS), $(DIST_ARCHIVES) had never been documented
-  in mainline Automake, and were always intended to be internal
-  variables.  But that was not clear from their names.  So we have
-  renamed rename like this:
+* The make variables $(DISTFILES), $(DIST_COMMON), $(DIST_SOURCES) and
+  $(DIST_ARCHIVES) had never been documented in mainline Automake, and
+  were always intended to be internal variables.  But that was not clear
+  from their names.  So we have renamed rename like this:
 
     DISTFILES      =>  am.dist.all-files
     DIST_COMMON    =>  am.dist.common-files
     DIST_SOURCES   =>  am.dist.sources
-    DIST_TARGETS   =>  am.dist.default-targets
     DIST_ARCHIVES  =>  am.dist.default-archives
 
   Do not use any of these variables in your Makefiles!
 
 * Support for distribution archived in the '.shar.gz' and '.tar.Z' formats
-  have been removed.  Accordingly, the targets 'dist-shar' and 'dist-tarZ'
-  are no more present in the generated Makefiles, and the use of the
-  Automake options 'dist-shar' and 'dist-tarZ' will elicit a fatal error.
+  have been removed; and with them the targets 'dist-shar' and 'dist-tarZ'.
+
+* The API to specify the formats of distribution tarballs has been changed
+  completely.
+
+  Instead of using the various 'dist-*' automake options, the developer is
+  now expected to specify the default formats of its distribution tarballs
+  with the special variable AM_DIST_FORMATS; for example, where once would
+  have been:
+
+      AM_INIT_AUTOMAKE([dist-bzip2 dist-zip])
+
+  now it must be:
+
+      AM_DIST_FORMATS = gzip bzip2 zip
+
+  and similarly, where once would have been:
+
+      AUTOMAKE_OPTIONS = no-dist-gzip dist-bzip2 dist-xz
+
+  now is it simply:
+
+      AM_DIST_FORMATS = bzip2 xz
+
+* The various 'dist-*' targets (dist-gzip, dist-xz, dist-lzip, dist-bzip2
+  and dist-gz) has been removed.  If the user wants to generate tarballs
+  for formats not specified by the default AM_DIST_FORMATS, he can simply
+  override that variable dynamically:
+
+      # Will generate a '.zip' archive and a '.tar.xz' archive, and not
+      # further ones.
+      make dist AM_DIST_FORMATS='zip xz'
+
+* The DIST_TARGETS variable has been removed (as a side-effect of the
+  previous change).
 
 
 Obsolete Features Removed
diff --git a/automake.in b/automake.in
index 3a11b53..7428757 100644
--- a/automake.in
+++ b/automake.in
@@ -3196,27 +3196,6 @@ sub handle_dist ()
   # The remaining definitions are only required when a dist target is used.
   return if option 'no-dist';
 
-  # The list of tarball formats we must support.
-  my @archive_formats;
-  if ($relative_dir eq '.')
-    {
-      # We order @archive_formats by expected duration of the
-      # compressors, slowest first, for better parallelism in
-      # "make dist".
-      unshift @archive_formats, 'gzip' unless option 'no-dist-gzip';
-      foreach my $fmt (qw/zip bzip2 lzip xz/)
-        {
-          unshift @archive_formats, $fmt if option "dist-$fmt";
-        }
-      # At least one of the archive formats must be enabled.
-      if (@archive_formats == 0)
-        {
-          error (option 'no-dist-gzip',
-                 "no-dist-gzip specified but no dist-* specified,\n"
-                 . "at least one archive format must be enabled");
-        }
-    }
-
   # Look for common files that should be included in distribution.
   # If the aux dir is set, and it does not have a Makefile.am, then
   # we check for these files there as well.
@@ -3276,7 +3255,6 @@ sub handle_dist ()
                    rule ('distcheck-hook') ? 'yes' : '');
   define_variable ('am.dist.handle-gettext', INTERNAL,
                    $seen_gettext && !$seen_gettext_external ? 'yes' : '');
-  define_variable ('am.dist.formats', INTERNAL, @archive_formats);
 
   my $flm = option 'filename-length-max';
   define_variable ('am.dist.filename-filter', INTERNAL,
diff --git a/configure.ac b/configure.ac
index 50176d8..ab64763 100644
--- a/configure.ac
+++ b/configure.ac
@@ -39,8 +39,7 @@ AC_SUBST([am_AUTOUPDATE], ["${AUTOUPDATE-autoupdate}"])
 dnl We call AC_PROG_CC in an unusual way, and only for use in our
 dnl testsuite, so also use 'no-dependencies' and 'no-define' among
 dnl the automake options to avoid bloating and potential problems.
-AM_INIT_AUTOMAKE([dist-xz filename-length-max=99 color-tests
-                  no-define no-dependencies])
+AM_INIT_AUTOMAKE([filename-length-max=99 ng no-define no-dependencies])
 
 ## Keep this on a line of its own, since it must be found and processed
 ## by the 'update-copyright' rule in our Makefile.
diff --git a/doc/automake-ng.texi b/doc/automake-ng.texi
index 1470f63..ace21c5 100644
--- a/doc/automake-ng.texi
+++ b/doc/automake-ng.texi
@@ -3930,7 +3930,7 @@ By default this macro @code{AC_DEFINE}'s @code{PACKAGE} 
and
 @code{VERSION}.  This can be avoided by passing the @option{no-define}
 option:
 @example
-AM_INIT_AUTOMAKE([gnits 1.5 no-define dist-bzip2])
+AM_INIT_AUTOMAKE([gnits 1.11.6 no-define parallel-tests])
 @end example
 
 @item AM_PATH_LISPDIR
@@ -8271,9 +8271,6 @@ distribution.  The file is named based on the 
@code{PACKAGE} and
 @code{VERSION} variables defined by @code{AM_INIT_AUTOMAKE}
 (@pxref{Macros}); more precisely the gzipped @code{tar} file is named
 @address@hidden@var{version}.tar.gz}.
address@hidden GZIP_ENV
-You can use the @command{make} variable @code{GZIP_ENV} to control how gzip
-is run.  The default setting is @option{--best}.
 
 @cindex @code{m4_include}, distribution
 @cindex @code{include}, distribution
@@ -8547,49 +8544,74 @@ distuninstallcheck:
 @node The Types of Distributions
 @section The Types of Distributions
 
-Automake generates rules to provide archives of the project for
-distributions in various formats.  Their targets are:
+Automake-generated @code{dist} rule can generated distributions in
+various formats, depending on the content of the @code{AM_DIST_FORMATS}
+variable; this is overridable at runtime, defaults to @code{gzip}, and
+can contain several formats at once, to produce several kind of archives
+in one go.  The recognized formats are:
 
 @table @asis
address@hidden GZIP_ENV
address@hidden @code{gzip}
+Usual compression with GNU @command{gzip}.  Not very size-efficient
+these days, but very portable and fast.  You can use the @command{make}
+variable @code{GZIP_ENV} to control which options @code{make dist}
+passes to @code{gzip} (the default setting being @option{--best}).
+For example:
address@hidden
+make dist GZIP_ENV=--fast
address@hidden smallexample
address@hidden gzip compression
address@hidden Compression, gzip format
+
 @vindex BZIP2
address@hidden @code{dist-bzip2}
-Generate a bzip2 tar archive of the distribution.  bzip2 archives are
-frequently smaller than gzipped archives.
-By default, this rule makes @samp{bzip2} use a compression option of 
@option{-9}.
-To make it use a different one, set the @env{BZIP2} environment variable.
-For example, @samp{make dist-bzip2 BZIP2=-7}.
address@hidden dist-bzip2
-
address@hidden @code{dist-gzip}
-Generate a gzip tar archive of the distribution.
address@hidden dist-gzip
-
address@hidden @code{dist-lzip}
address@hidden @code{bzip2}
+Archives compressed with @command{bzip2} are frequently smaller than
+gzipped archives (albeit becoming more and more obsolescent today,
+superseded by more advanced formats like @code{xz}).  You can use
+the environment variable @code{BZIP2} to control which options
address@hidden dist} passes to @code{gzip} (the default setting being
address@hidden).  For example:
address@hidden
+make dist AM_DIST_FORMATS=bzip2 BZIP2=-7
address@hidden smallexample
address@hidden bzip2 compression
address@hidden Compression, bzip2 format
+
address@hidden LZIP_OPT
address@hidden @code{lzip}
 Generate an @samp{lzip} tar archive of the distribution.  @command{lzip}
 archives are frequently smaller than @command{bzip2}-compressed archives.
address@hidden dist-lzip
+You can use the environment variable @code{LZIP_OPT} to control which
+options @code{make dist} passes to @code{gzip} (the default setting
+being @option{-9}).  For example:
address@hidden
+make dist AM_DIST_FORMATS=lzip LZIP_OPT=--fast
address@hidden smallexample
address@hidden lzip compression
address@hidden Compression, lzip format
 
 @vindex XZ_OPT
address@hidden @code{dist-xz}
address@hidden @code{xz}
 Generate an @samp{xz} tar archive of the distribution.  @command{xz}
 archives are frequently smaller than @command{bzip2}-compressed archives.
 By default, this rule makes @samp{xz} use a compression option of
 @option{-e}.  To make it use a different one, set the @env{XZ_OPT}
 environment variable.  For example, run this command to use the
 default compression ratio, but with a progress indicator:
address@hidden dist-xz XZ_OPT=-7e}.
address@hidden dist-xz
address@hidden
+make dist AM_DIST_FORMATS=xz XZ_OPT=-7e
address@hidden smallexample
address@hidden xz compression
address@hidden Compression, xz format
 
address@hidden @code{dist-zip}
address@hidden @code{zip}
 Generate a zip archive of the distribution.
address@hidden dist-zip
address@hidden zip compression
address@hidden Compression, zip format
 
 @end table
 
-The rule @code{dist} (and its historical synonym @code{dist-all}) will
-create archives in all the enabled formats, @ref{Options}.  By
-default, only the @code{dist-gzip} target is hooked to @code{dist}.
-
 
 @node Tests
 @chapter Support for test suites
@@ -9909,24 +9931,6 @@ in the first few lines of the @file{NEWS} file.
 @opindex dejagnu
 Cause @command{dejagnu}-specific rules to be generated.  @xref{DejaGnu Tests}.
 
address@hidden @option{dist-bzip2}
address@hidden Option, @option{dist-bzip2}
address@hidden dist-bzip2
-Hook @code{dist-bzip2} to @code{dist}.
address@hidden dist-bzip2
-
address@hidden @option{dist-lzip}
address@hidden Option, @option{dist-lzip}
address@hidden dist-lzip
-Hook @code{dist-lzip} to @code{dist}.
address@hidden dist-lzip
-
address@hidden @option{dist-zip}
address@hidden Option, @option{dist-zip}
address@hidden dist-zip
-Hook @code{dist-zip} to @code{dist}.
address@hidden dist-zip
-
 @item @option{filename-length-max=99}
 @cindex Option, @option{filename-length-max=99}
 @opindex filename-length-max=99
@@ -9969,12 +9973,6 @@ disable automatic dependency tracking.
 Don't emit any code related to @code{dist} target.  This is useful
 when a package has its own method for making distributions.
 
address@hidden @option{no-dist-gzip}
address@hidden Option, @option{no-dist-gzip}
address@hidden no-dist-gzip
-Do not hook @code{dist-gzip} to @code{dist}.
address@hidden no-dist-gzip
-
 @item @option{no-exeext}
 @cindex Option, @option{no-exeext}
 @opindex no-exeext
@@ -10089,10 +10087,7 @@ AM_INSTALLCHECK_STD_OPTIONS_EXEMPT = false$(EXEEXT) 
true.sh
 @opindex tar-pax
 
 These three mutually exclusive options select the tar format to use
-when generating tarballs with @samp{make dist}.  (The tar file created
-is then compressed according to the set of @option{no-dist-gzip},
address@hidden, @option{dist-lzip}, @option{dist-xz} and
address@hidden options in use.)
+when generating tarballs with @samp{make dist}.
 
 These options must be passed as arguments to @code{AM_INIT_AUTOMAKE}
 (@pxref{Macros}) because they can require additional configure checks.
diff --git a/lib/Automake/Options.pm b/lib/Automake/Options.pm
index bdb3db9..77e9cbd 100644
--- a/lib/Automake/Options.pm
+++ b/lib/Automake/Options.pm
@@ -270,15 +270,10 @@ sub _is_valid_easy_option ($)
     check-news
     color-tests
     dejagnu
-    dist-bzip2
-    dist-lzip
-    dist-xz
-    dist-zip
     ng
     no-define
     no-dependencies
     no-dist
-    no-dist-gzip
     no-exeext
     no-installinfo
     no-installman
@@ -318,20 +313,11 @@ sub _process_option_list (\%@)
         {
           error $where, "support for Cygnus-style trees has been removed";
         }
-      elsif ($_ eq 'dist-lzma')
+      elsif (/^(?:no-)?dist-.*/)
         {
-          error ($where, "support for lzma-compressed distribution " .
-                         "archives has been removed");
-        }
-      elsif ($_ eq 'dist-tarZ')
-        {
-          error ($where, "distribution archives compressed with legacy " .
-                         "'compress' program are no more supported");
-        }
-      elsif ($_ eq 'dist-shar')
-        {
-          error ($where, "support for shar distribution archives has " .
-                         "been removed");
+          error ($where,
+                 "'$_' option and the like are no more supported;\n" .
+                 "use AM_DIST_FORMATS in top-level Makefile.am instead");
         }
       elsif (/^filename-length-max=(\d+)$/)
         {
diff --git a/lib/am/distcheck.mk b/lib/am/distcheck.mk
index 5da7118..a6009a9 100644
--- a/lib/am/distcheck.mk
+++ b/lib/am/distcheck.mk
@@ -67,7 +67,21 @@ am.dist.create-cmd.zip = \
 am.dist.extract-cmd.zip = \
   unzip $(distdir).zip
 
-am.dist.all-targets = $(patsubst %,dist-%,$(am.dist.all-formats))
+# 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), \
@@ -90,28 +104,16 @@ am.dist.extract-archive-for-format = $(call $0.aux,$(strip 
$1))
 # commit v0.0-7569-gec58403).  So keep it.
 GZIP_ENV = --best
 
-am.dist.default-targets = \
-  $(foreach x,$(am.dist.formats),dist-$x)
-am.dist.default-archives = \
-  $(foreach x,$(am.dist.formats),$(distdir).$(am.dist.ext.$x))
-
 .PHONY: $(am.dist.all-targets)
-$(am.dist.all-targets): dist-%: distdir
+$(am.dist.all-targets): .am/dist-%: distdir
        $(call am.dist.create-archive-for-format,$*)
-       $(am.dist.post-remove-distdir)
-
-
-# -------------------------------------------------- #
-#  Building all the requested distribution flavors.  #
-# -------------------------------------------------- #
 
 ifdef SUBDIRS
 AM_RECURSIVE_TARGETS += dist dist-all
 endif
 
 .PHONY: dist dist-all
-dist dist-all:
-       $(MAKE) $(am.dist.default-targets) am.dist.post-remove-distdir='@:'
+dist dist-all: $(am.dist.default-targets)
        $(am.dist.post-remove-distdir)
 
 
@@ -129,7 +131,7 @@ endif
 .PHONY: distcheck
 distcheck: dist
        $(call am.dist.extract-archive-for-format, \
-         $(firstword $(am.dist.formats)))
+         $(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.
diff --git a/t/ax/am-test-lib.sh b/t/ax/am-test-lib.sh
index e41c840..e1b3c02 100644
--- a/t/ax/am-test-lib.sh
+++ b/t/ax/am-test-lib.sh
@@ -46,6 +46,8 @@ set +e
 unset MFLAGS MAKEFLAGS MAKELEVEL
 # Unset verbosity flag.
 unset V
+# Distribution formats.
+unset AM_DIST_FORMATS
 # Also unset variables that might let "make install" divert files
 # into unwanted directories.
 unset DESTDIR
diff --git a/t/dist-formats.tap b/t/dist-formats.tap
index d03fc74..5737227 100755
--- a/t/dist-formats.tap
+++ b/t/dist-formats.tap
@@ -17,43 +17,52 @@
 # Check support for different compression formats used by distribution
 # archives.
 
-am_create_testdir=empty
 . ./defs || exit 1
 
-plan_ 59
+plan_ 18
 
-# ---------------------------------------------------- #
-#  Common and/or auxiliary subroutines and variables.  #
-# ---------------------------------------------------- #
-
-ocwd=$(pwd) || fatal_ "getting current working directory"
+# -------------------------------------- #
+#  Auxiliary subroutines and variables.  #
+# -------------------------------------- #
 
 TAR='' && unset TAR
 
-# Create common aclocal.m4 file, for later tests.
-mkdir setup \
-  && cd setup \
-  && echo 'AC_INIT([x], [0]) AM_INIT_AUTOMAKE' > configure.ac \
-  && $ACLOCAL \
-  && mv aclocal.m4 .. \
-  && cd .. \
-  && rm -rf setup \
-  || fatal_ "creating common aclocal.m4 file"
-
 # Set variables '$compressor' and '$suffix'.
 setup_vars_for_compression_format ()
 {
-  suffix=NONE compressor=NONE
+  suffix=NONE
   case $1 in
-    gzip) suffix=tar.gz  compressor=gzip     ;;
-    lzip) suffix=tar.lz  compressor=lzip     ;;
-      xz) suffix=tar.xz  compressor=xz       ;;
-   bzip2) suffix=tar.bz2 compressor=bzip2    ;;
-     zip) suffix=zip     compressor=zip      ;;
+    gzip) suffix=tar.gz  ;;
+    lzip) suffix=tar.lz  ;;
+      xz) suffix=tar.xz  ;;
+   bzip2) suffix=tar.bz2 ;;
+     zip) suffix=zip     ;;
        *) fatal_ "invalid compression format '$1'";;
   esac
+  compressor=$1
 }
 
+check_tarball ()
+{
+  format=$1
+  (
+    setup_vars_for_compression_format $format \
+      && tarball=$distdir.$suffix \
+      && test -f $tarball \
+      && mkdir check-$format \
+      && cp $tarball check-$format \
+      && cd check-$format \
+      && $compressor -d $tarball \
+      && tar xvf $distdir.tar \
+      && diff ../Makefile.in $distdir/Makefile.in \
+      && diff ../aclocal.m4  $distdir/aclocal.m4 \
+      && diff ../configure   $distdir/configure \
+      && cd .. \
+      && rm -rf check-$format
+   )
+}
+
+
 have_compressor ()
 {
   test $# -eq 1 || fatal_ "have_compressor(): bad usage"
@@ -113,326 +122,91 @@ have_all_compressors ()
   test -z "$missing_compressors"
 }
 
-start_subtest ()
+clean_dist ()
 {
-  name=$1; shift
-  test -n "$name" || fatal_ "start_subtest: no subtest name given"
-  if test $# -gt 0; then
-    eval "$@" || fatal_ "start_subtest: evaluating assignments"
-  fi
-  ac_opts=$(echo $ac_opts | tr ',' ' ')
-  am_opts=$(echo $am_opts | tr ',' ' ')
-  mkdir "$name"
-  cd "$name"
-  unindent > configure.ac <<END
-    AC_INIT([$name], [1.0])
-    AM_INIT_AUTOMAKE([$ac_opts])
-    AC_CONFIG_FILES([Makefile])
-    AC_OUTPUT
-END
-  echo "AUTOMAKE_OPTIONS = $am_opts" > Makefile.am
-  # It is imperative that aclocal.m4 is copied after configure.ac has
-  # been created, to avoid a spurious trigger of the automatic remake
-  # rules for configure & co.
-  cp "$ocwd"/aclocal.m4 \
-     "$am_scriptdir"/missing \
-     "$am_scriptdir"/install-sh \
-     .
+  rm -rf *$distdir*
 }
 
-end_subtest ()
-{
-  unset name; unset ac_opts; unset am_opts;
-  cd "$ocwd" || fatal_ "couldn't chdir back to '$ocwd'"
-}
+# ------------------------- #
+#  Setup and basic checks.  #
+# ------------------------- #
 
-command_ok_if_have_compressor ()
-{
-  if have_compressor "$compressor"; then
-    command_ok_ "$@"
-  else
-    skip_ -r "'$compressor' not available" "$1"
-  fi
-}
-
-can_compress ()
-{
-  test $# -eq 2 || fatal_ "can_compress: bad number of arguments"
-  tarname=$1 format=$2
-  setup_vars_for_compression_format "$format"
-
-  command_ok_ "'dist-$format' target always created" $MAKE -n dist-$format
-
-  command_ok_if_have_compressor "'make dist-$format' work by default" \
-    eval '
-      rm -rf *$tarname* \
-        && $MAKE dist-$format \
-        && ls -l *$tarname* \
-        && test -f $tarname-1.0.$suffix \
-        && test "$(echo *$tarname*)" = $tarname-1.0.$suffix'
-
-  unset suffix compressor format tarname
-}
-
-# ---------------------------------------- #
-#  Defaults layout of the dist-* targets.  #
-# ---------------------------------------- #
-
-start_subtest defaults
-
-command_ok_ "default [automake]"        $AUTOMAKE
-command_ok_ "default [autoconf]"        $AUTOCONF
-command_ok_ "default [configure]"       ./configure
-command_ok_ "default [make distcheck]"  $MAKE distcheck
-
-command_ok_ "'make dist' only builds *.tar.gz by default" \
-            test "$(ls *defaults*)" = defaults-1.0.tar.gz
+echo AC_OUTPUT >> configure.ac
+: > Makefile.am
 
-rm -rf *defaults*
+$ACLOCAL && $AUTOCONF && $AUTOMAKE -a || fatal_ "autotools failed"
+./configure || fatal_ "./configure failed"
 
-for fmt in $all_compression_formats; do
-  can_compress defaults $fmt
-done
-unset fmt
-
-end_subtest
-
-# ----------------------------------------------------------- #
-#  Check diagnostic for no-dist-gzip without another dist-*.  #
-# ----------------------------------------------------------- #
-
-nogzip_stderr ()
-{
-  grep "$1:.*no-dist-gzip" stderr \
-    && grep "$1:.* at least one archive format must be enabled" stderr
-}
+command_ok_ "make distcheck"  $MAKE distcheck
 
-nogzip_automake_failure ()
-{
-  AUTOMAKE_fails -d "no-dist-gzip ($1) without other formats is an error"
-  command_ok_ "no-dist-gzip ($1) without other formats gives diagnostic" \
-              nogzip_stderr "$2"
-}
-
-start_subtest am-nogz-only am_opts=no-dist-gzip ac_opts=
-nogzip_automake_failure 'am' 'Makefile\.am:1'
-end_subtest
+command_ok_ "only gzip archive is built by default" \
+            test "$(ls *$distdir*)" = $distdir.tar.gz
 
-start_subtest ac-nogz-only am_opts= ac_opts=no-dist-gzip
-nogzip_automake_failure 'ac' 'configure\.ac:2'
-end_subtest
 
-# ------------------------------------------------- #
-#  Check use of no-dist-gzip with a dist-* option.  #
-# ------------------------------------------------- #
-
-append_to_opt ()
-{
-  var=$1_opts val=$2
-  eval "$var=\${$var:+\"\$$var,\"}\$val" || fatal_ "evaluating \${$var}"
-  unset var val
-}
+# ------------------------------------- # 
+#  Test all known formats, separately.  #
+# ------------------------------------- # 
 
-nogzip ()
-{
-  test $#,$1,$3,$5 = 6,in,and,in \
-    && case $2,$6 in ac,ac|ac,am|am,ac|am,am) :;; *) false;; esac \
-    || fatal_ "nogzip: invalid usage"
-  format=$4 where_dist_nogzip=$2 where_dist_format=$6
-  shift 6
-
-  am_opts= ac_opts=
-  append_to_opt $where_dist_format dist-$format
-  append_to_opt $where_dist_nogzip no-dist-gzip
+for format in $all_compression_formats; do
   setup_vars_for_compression_format "$format"
-  # Do these before the am_opts and ac_opts variable can be munged
-  # by 'start_subtest'.
-  desc=
-  test -n "$am_opts" && desc=${desc:+"$desc "}"am=$am_opts"
-  test -n "$ac_opts" && desc=${desc:+"$desc "}"ac=$ac_opts"
-
-  start_subtest nogzip-$format am_opts=$am_opts ac_opts=$ac_opts
-
-  unindent >> Makefile.am <<END
-    check-ark-name:
-       test \$(am.dist.default-archives) = \$(distdir).$suffix
-    check-ark-exists:
-       test -f \$(distdir).$suffix
-    check-no-tar-gz:
-       test ! -f \$(distdir).tar.gz
-END
-
-  command_ok_ "$desc [automake]" $AUTOMAKE
-  command_ok_ "$desc [autoconf]" $AUTOCONF
-  command_ok_ "$desc [configure]" ./configure
-  command_ok_ "$desc [ark-name]" $MAKE check-ark-name
-  command_ok_if_have_compressor "$desc [distcheck]" $MAKE distcheck
-  command_ok_if_have_compressor "$desc [ark-exists]" $MAKE check-ark-exists
-  command_ok_ "$desc [no .tar.gz]"  $MAKE check-no-tar-gz
-
-  unset desc
-
-  end_subtest
-}
-
-#      $1 $2  $3   $4     $5  $6
-nogzip in am  and  bzip2  in  am
-nogzip in ac  and  xz     in  ac
-nogzip in am  and  lzip   in  am
-
-
-# ----------------------------------------------------------- #
-#  The 'dist-gzip' target is created also with no-dist-gzip.  #
-# ----------------------------------------------------------- #
-
-start_subtest dist-gzip-persistence am_opts=no-dist-gzip,dist-xz
-command_ok_ "dist-gzip persistence [automake]"  $AUTOMAKE
-command_ok_ "dist-gzip persistence [autoconf]"  $AUTOCONF
-command_ok_ "dist-gzip persistence [configure]" ./configure
-can_compress dist-gzip-persistence gzip
-end_subtest
-
+  desc="$format distribution format"
+  command_ok_ "$desc [seems accepted]" \
+              $MAKE -n dist AM_DIST_FORMATS="$format"
+  if have_compressor "$compressor"; then
+    command_ok_ "$desc $format distribution format [works]" \
+      eval '$MAKE dist AM_DIST_FORMATS="$format" \
+              && ls -l *$distdir* \
+              && test -f $distdir.$suffix \
+              && test "$(echo *$distdir*)" = $distdir.$suffix'
+  else
+    skip_ -r "'$compressor' not available" "$1"
+  fi
+  clean_dist
+  unset desc suffix compressor format
+done
 
 # ----------------------- #
 #  Parallel compression.  #
 # ----------------------- #
 
-# We only use formats requiring 'gzip', 'bzip2' and 'compress' programs,
-# since there are the most likely to be all found on the great majority
-# of systems.
-
-start_subtest parallel-compression ac_opts=dist-bzip2 am_opts=dist-xz
+# We only use formats requiring 'gzip', 'bzip2' and 'xz' programs,
+# since there are the most likely to be all found on the great
+# majority of systems.
 
-desc=gzip+bzip2+xz
-tarname=parallel-compression-1.0
-
-check_tarball ()
-{
-  format=$1
-  setup_vars_for_compression_format $format
-  (
-    tarball=$tarname.$suffix \
-      && test -f $tarball \
-      && mkdir check-$format \
-      && cp $tarball check-$format \
-      && cd check-$format \
-      && $compressor -d $tarball \
-      && tar xvf $tarname.tar \
-      && diff ../Makefile.in $tarname/Makefile.in \
-      && cd .. \
-      && rm -rf check-$format
-   )
-}
-
-command_ok_ "$desc [automake]" $AUTOMAKE
+desc='parallel compression'
 
 skip_reason=
-have_compressor compress || skip_reason="'compress' not available"
+have_compressor xz || skip_reason="'xz' not available"
 have_compressor bzip2 || skip_reason="'bzip2' not available"
 
 if test -n "$skip_reason"; then
   skip_row_ 6 -r "$skip_reason" "$desc"
 else
-  command_ok_ "$desc [autoconf]" $AUTOCONF
-  command_ok_ "$desc [configure]" ./configure
-  command_ok_ "$desc [make -j4 dist-all]"  $MAKE -j4 dist
+  command_ok_ "$desc [make -j8 distcheck]"  \
+              $MAKE -j8 distcheck AM_DIST_FORMATS='gzip bzip2 xz'
   ls -l # For debugging.
   command_ok_ "$desc [check .tar.gz tarball]"  check_tarball gzip
   command_ok_ "$desc [check .tar.bz2 tarball]" check_tarball bzip2
   command_ok_ "$desc [check .tar.xz tarball]"  check_tarball xz
 fi
 
-unset tarname desc skip_reason
-
-end_subtest
-
-
-# --------------------------------------------------------- #
-#  The various 'dist-*' targets can happily work together.  #
-# --------------------------------------------------------- #
-
-start_subtest all-together
-
-desc='all compressors together'
-tarname=all-together-1.0
-
-echo 'AM_INIT_AUTOMAKE([' > am-init.m4
-echo 'AUTOMAKE_OPTIONS =' > Makefile.am
-
-# Add half 'dist-*' options to AM_INIT_AUTOMAKE, half to AUTOMAKE_OPTIONS.
-flip=:
-for fmt in $all_compression_formats; do
-  test $fmt = gzip && continue
-  if $flip; then
-    echo "  dist-$fmt" >> am-init.m4
-    flip=false
-  else
-    echo "AUTOMAKE_OPTIONS += dist-$fmt" >> Makefile.am
-    flip=:
-  fi
-done
-unset flip fmt
-
-echo '])' >> am-init.m4
-
-sed 's/AM_INIT_AUTOMAKE.*/m4_include([am-init.m4])/' configure.ac > t
-mv -f t configure.ac
-
-# For debugging.
-cat Makefile.am
-cat configure.ac
-cat am-init.m4
-
-command_ok_ "$desc [aclocal]" $ACLOCAL --force
-command_ok_ "$desc [automake]" $AUTOMAKE
-command_ok_ "$desc [autoconf]" $AUTOCONF
-command_ok_ "$desc [configure]" ./configure
-
-if have_all_compressors; then
-  command_ok_ "$desc [make distcheck, real]" $MAKE distcheck
-else
-  skip_ -r "not all compressors available" "$desc [make distcheck, real]"
-fi
-
-# We fake existence of all the compressors here, so that we don't have
-# to require any of them to run the further tests.  This is especially
-# important since it's very unlikely that a non-developer has all the
-# compression tools installed on his machine at the same time.
-
-mkdir bin
-cd bin
-cat > check-distdir <<END
-#!/bin/sh
-{ ls -l '$tarname' && diff Makefile.am '$tarname'/Makefile.am; } >&2 \
-  || { echo "== distdir fail =="; exit 1; }
-END
-cat > grep-distdir-error <<'END'
-#!/bin/sh
-grep 'distdir fail' && exit 1
-:
-END
-chmod a+x check-distdir grep-distdir-error
-for prog in tar $all_compressors; do
-  case $prog in
-    tar|zip) cp check-distdir $prog;;
-          *) cp grep-distdir-error $prog;;
-  esac
-done
-unset prog
-ls -l # For debugging.
-cd ..
+clean_dist
+unset desc skip_reason
 
-oPATH=$PATH
-PATH=$(pwd)/bin$PATH_SEPARATOR$PATH; export PATH
 
-command_ok_ \
-  "$desc ['make dist-all', stubbed]" \
-  $MAKE dist-all
+# ------------------------------- #
+#  Invalid distribution formats.  #
+# ------------------------------- #
 
-command_ok_ "$desc ['make dist -j4', stubbed]" $MAKE -j4 dist
+command_ok_ "invalid distribution formats [exit status]"  eval '
+  ! $MAKE dist AM_DIST_FORMATS="foobar tarZ shar" 2>stderr'
 
-PATH=$oPATH; export PATH
+cat stderr >&2 # For debugging.
 
-end_subtest
+command_ok_ "invalid distribution formats [error report]"  eval '
+  sed -e "s/^/ /" -e "s/$/ /" stderr >stderr2 \
+    && grep "[iI]nvalid distribution format.* foobar " stderr2 \
+    && grep "[iI]nvalid distribution format.* tarZ "   stderr2 \
+    && grep "[iI]nvalid distribution format.* shar "   stderr2'
 
 :
diff --git a/t/dist-obsolete.sh b/t/dist-obsolete-opts.sh
similarity index 64%
rename from t/dist-obsolete.sh
rename to t/dist-obsolete-opts.sh
index a7b68d0..06bea8d 100644
--- a/t/dist-obsolete.sh
+++ b/t/dist-obsolete-opts.sh
@@ -14,28 +14,31 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-# Obsolete archive formats.
+# Obsolete 'dist-*' and 'no-dist-gzip' options.
 
 . ./defs || exit 1
 
 $ACLOCAL
 
-for fmt in lzma shar; do
+for fmt in gzip bzip2 xz lzip zip tarZ lzma shar; do
   echo AUTOMAKE_OPTIONS = dist-$fmt > Makefile.am
   AUTOMAKE_fails -Wnone -Wno-error
-  grep "^Makefile\\.am:1:.*support for $fmt.*removed" stderr
+  grep "^Makefile\\.am:1:.* 'dist-$fmt' option.* no more supported" stderr
+  grep "^Makefile\\.am:1:.* use AM_DIST_FORMATS .*instead" stderr
 done
 
 rm -rf autom4te*.cache
 
 cat > configure.ac << 'END'
-AC_INIT([lzma], [1.0])
-AM_INIT_AUTOMAKE([dist-tarZ])
+AC_INIT([foo], [1.0])
+AM_INIT_AUTOMAKE([no-dist-gzip dist-xz])
 AC_CONFIG_FILES([Makefile])
 END
 : > Makefile.am
 $ACLOCAL
 AUTOMAKE_fails -Wnone -Wno-error
-grep "^configure\\.ac:2:.*legacy 'compress' program.* no more supported" stderr
+grep "^configure\\.ac:2:.* 'no-dist-gzip' option.* no more supported" stderr
+grep "^configure\\.ac:2:.* 'dist-xz' option.* no more supported" stderr
+grep "^configure\\.ac:2:.*use AM_DIST_FORMATS .*instead" stderr
 
 :
diff --git a/t/repeated-options.sh b/t/repeated-options.sh
index 69a9cb4..489c313 100755
--- a/t/repeated-options.sh
+++ b/t/repeated-options.sh
@@ -17,21 +17,31 @@
 # Check that automake does not complain on repeated options, nor
 # generate broken or incorrect makefiles.
 
-required=bzip2
 . ./defs || exit 1
 
 cat >configure.ac <<END
 AC_INIT([$me], [1.0])
-AM_INIT_AUTOMAKE([foreign foreign dist-bzip2 no-dist-gzip dist-bzip2])
+AM_INIT_AUTOMAKE([foreign foreign no-installman serial-tests \
+                  no-installman])
 AC_CONFIG_FILES([Makefile])
 AC_OUTPUT
 END
 
 cat > Makefile.am <<'END'
-AUTOMAKE_OPTIONS = no-dist-gzip no-dist-gzip dist-bzip2
-AUTOMAKE_OPTIONS += dist-bzip2 foreign
+AUTOMAKE_OPTIONS =  no-installman no-installman serial-tests
+AUTOMAKE_OPTIONS += serial-tests foreign
+TESTS = foo
+EXTRA_DIST = foo
+CLEANFILES = bar.out
 END
 
+cat > foo <<'END'
+#!/bin/sh
+echo RUN RUN
+: > bar.out
+END
+chmod a+x foo
+
 $ACLOCAL
 $AUTOCONF
 $AUTOMAKE --foreign --foreign -Wall 2>stderr && test ! -s stderr \
@@ -39,9 +49,10 @@ $AUTOMAKE --foreign --foreign -Wall 2>stderr && test ! -s 
stderr \
 
 ./configure
 
-$MAKE
+$MAKE check
+test -f bar.out
+test ! -e foo.log
+test ! -e test-suite.log
 $MAKE distcheck
-test -f $me-1.0.tar.bz2
-test ! -e $me-1.0.tar.gz
 
 :
-- 
1.7.12.rc0




reply via email to

[Prev in Thread] Current Thread [Next in Thread]