>From 1d92795ebee0afa97c39a49a7ad6adee638c4846 Mon Sep 17 00:00:00 2001
Message-Id:
From: Stefano Lattarini
Date: Sat, 7 Jan 2012 11:25:12 +0100
Subject: [PATCH 1/2] coverage: archive and compression formats used by "make
dist"
This change exposes automake bug#10444 a.k.a. bug#10448.
* tests/dist-formats.tap: New test.
* tests/lzip.test: Remove, it's obsolete now.
* tests/nogzip.test: Likewise.
* tests/nogzip2.test: Likewise.
* tests/xz.test: Likewise.
* tests/list-of-tests.mk: Update.
---
tests/dist-formats.tap | 430 ++++++++++++++++++++++++++++++++++++++++++++++++
tests/list-of-tests.mk | 5 +-
tests/lzip.test | 39 -----
tests/nogzip.test | 39 -----
tests/nogzip2.test | 35 ----
tests/xz.test | 39 -----
6 files changed, 431 insertions(+), 156 deletions(-)
create mode 100755 tests/dist-formats.tap
delete mode 100755 tests/lzip.test
delete mode 100755 tests/nogzip.test
delete mode 100755 tests/nogzip2.test
delete mode 100755 tests/xz.test
diff --git a/tests/dist-formats.tap b/tests/dist-formats.tap
new file mode 100755
index 0000000..34399bc
--- /dev/null
+++ b/tests/dist-formats.tap
@@ -0,0 +1,430 @@
+#! /bin/sh
+# Copyright (C) 2012 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 .
+
+# Check support for different compression formats used by distribution
+# archives.
+
+am_create_testdir=empty
+. ./defs || Exit 1
+
+plan_ 70
+
+# ---------------------------------------------------- #
+# Common and/or auxiliary subroutines and variables. #
+# ---------------------------------------------------- #
+
+ocwd=`pwd` || fatal_ "obtaining current working directory"
+
+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"
+
+# Some make implementations (e.g., HP-UX) don't grok `-j', some require
+# no space between `-j' and the number of jobs (e.g., older GNU make
+# versions), and some *do* require a space between `-j' and the number
+# of jobs (e.g., Solaris dmake). We need a runtime test to see what
+# works.
+for MAKE_j4 in "$MAKE -j4" "$MAKE -j 4" false; do
+ echo all: | $MAKE_j4 -f - && break
+ : For shells with buggy 'set -e'.
+done
+
+# Set variables `$compressor' and `$suffix'.
+setup_vars_for_compression_format ()
+{
+ suffix=NONE compressor=NONE
+ case $1 in
+ gzip) suffix=tar.gz compressor=gzip ;;
+ tarZ) suffix=tar.Z compressor=compress ;;
+ lzip) suffix=tar.lz compressor=lzip ;;
+ xz) suffix=tar.xz compressor=xz ;;
+ bzip2) suffix=tar.bz2 compressor=bzip2 ;;
+ zip) suffix=zip compressor=zip ;;
+ shar) suffix=shar.gz compressor=shar ;;
+ *) fatal_ "invalid compression format '$1'";;
+ esac
+}
+
+all_compression_formats='gzip tarZ lzip xz bzip2 zip shar'
+
+all_compressors=`
+ for x in $all_compression_formats; do
+ setup_vars_for_compression_format $x
+ echo $compressor
+ done | tr "$nl" ' '`
+echo All compressors: $all_compressors
+
+# Assume gzip(1) and compress(1) are available on every reasonable
+# portability target.
+missing_compressors=`
+ for c in $all_compressors; do
+ test $c = compress || test $c = gzip || $c --version &2 \
+ && continue
+ echo $c
+ done | tr "$nl" ' '`
+echo Missing compressors: $missing_compressors
+
+have_compressor ()
+{
+ case " $missing_compressors " in *\ $1\ *) false;; *) : ;; esac
+}
+
+have_all_compressors ()
+{
+ test -z "$missing_compressors"
+}
+
+start_subtest ()
+{
+ 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.in < Makefile.am
+ # It is imperative that aclocal.m4 is copied after configure.in 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 \
+ .
+}
+
+end_subtest ()
+{
+ unset name; unset ac_opts; unset am_opts;
+ cd "$ocwd" || fatal_ "couldn't chdir back to '$ocwd'"
+}
+
+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 -f *$tarname* \
+ && make dist-$format \
+ && test -f $tarname-1.0.$suffix \
+ && ls -l *$tarname* \
+ && test "`ls *$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
+
+rm -f *defaults*
+
+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
+}
+
+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
+
+start_subtest ac-nogz-only am_opts= ac_opts=no-dist-gzip
+nogzip_automake_failure 'ac' 'configure\.in: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
+}
+
+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
+ 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 < 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" >> Makefil.am
+ flip=:
+ fi
+done
+unset flip fmt
+
+echo '])' >> am-init.m4
+
+sed 's/AM_INIT_AUTOMAKE.*/m4_include([am-init.m4])/' configure.in > t
+mv -f t configure.in
+
+# For debugging.
+cat Makefil.am
+cat configure.in
+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 <&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|shar|zip) cp check-distdir $prog;;
+ *) cp grep-distdir-error $prog;;
+ esac
+done
+unset prog
+ls -l # For debugging.
+cd ..
+
+oPATH=$PATH
+PATH=`pwd`/bin$PATH_SEPARATOR$PATH; export PATH
+
+command_ok_ \
+ "$desc ['make dist-all', stubbed]" \
+ $MAKE dist-all
+
+subdesc="$desc ['make dist -j4', stubbed]"
+if test "$MAKE_j4" = false; then
+ skip_ -r "make concurrency unavailable" "$subdesc"
+else
+ command_ok_ "$subdesc" $MAKE_j4 dist
+fi
+unset subdesc
+
+PATH=$oPATH; export PATH
+
+end_subtest
+
+:
diff --git a/tests/list-of-tests.mk b/tests/list-of-tests.mk
index 1aac45e..8355b7f 100644
--- a/tests/list-of-tests.mk
+++ b/tests/list-of-tests.mk
@@ -328,6 +328,7 @@ dirlist.test \
dirlist2.test \
dirlist-abspath.test \
discover.test \
+dist-formats.tap \
dist-auxdir-many-subdirs.test \
dist-auxfile-2.test \
dist-auxfile.test \
@@ -583,7 +584,6 @@ ltinstloc.test \
ltlibobjs.test \
ltlibsrc.test \
ltorder.test \
-lzip.test \
lzma.test \
m4-inclusion.test \
maintclean.test \
@@ -639,8 +639,6 @@ nodepcomp.test \
nodist.test \
nodist2.test \
nodist3.test \
-nogzip.test \
-nogzip2.test \
noinst.test \
noinstdir.test \
nolink.test \
@@ -1168,7 +1166,6 @@ werror3.test \
werror4.test \
whoami.test \
xsource.test \
-xz.test \
yacc-basic.test \
yacc-d-basic.test \
yacc-clean.test \
diff --git a/tests/lzip.test b/tests/lzip.test
deleted file mode 100755
index d413a83..0000000
--- a/tests/lzip.test
+++ /dev/null
@@ -1,39 +0,0 @@
-#! /bin/sh
-# Copyright (C) 2010, 2011 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 .
-
-# Check support for no-dist-gzip with lzip.
-
-required=lzip
-. ./defs || Exit 1
-
-cat > configure.in << 'END'
-AC_INIT([lzip], [1.0])
-AM_INIT_AUTOMAKE([no-dist-gzip dist-lzip])
-AC_CONFIG_FILES([Makefile])
-AC_OUTPUT
-END
-
-cat > Makefile.am << 'END'
-test: distcheck
- test $(DIST_ARCHIVES) = lzip-1.0.tar.lz
- test -f $(DIST_ARCHIVES)
-END
-
-$ACLOCAL
-$AUTOCONF
-$AUTOMAKE
-./configure
-$MAKE test
diff --git a/tests/nogzip.test b/tests/nogzip.test
deleted file mode 100755
index bf49a53..0000000
--- a/tests/nogzip.test
+++ /dev/null
@@ -1,39 +0,0 @@
-#! /bin/sh
-# Copyright (C) 2003, 2011 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 .
-
-# Check support for no-dist-gzip
-
-required=bzip2
-. ./defs || Exit 1
-
-cat > configure.in << 'END'
-AC_INIT([nogzip], [1.0])
-AM_INIT_AUTOMAKE([no-dist-gzip dist-bzip2])
-AC_CONFIG_FILES([Makefile])
-AC_OUTPUT
-END
-
-cat > Makefile.am << 'END'
-test: distcheck
- test $(DIST_ARCHIVES) = nogzip-1.0.tar.bz2
- test -f $(DIST_ARCHIVES)
-END
-
-$ACLOCAL
-$AUTOCONF
-$AUTOMAKE
-./configure
-$MAKE test
diff --git a/tests/nogzip2.test b/tests/nogzip2.test
deleted file mode 100755
index 1f8ed8f..0000000
--- a/tests/nogzip2.test
+++ /dev/null
@@ -1,35 +0,0 @@
-#! /bin/sh
-# Copyright (C) 2003, 2011 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 .
-
-# Check diagnostic for no-dist-gzip without dist-*.
-
-. ./defs || Exit 1
-
-cat > configure.in << 'END'
-AC_INIT([nogzip], [1.0])
-AM_INIT_AUTOMAKE([no-dist-gzip])
-AC_CONFIG_FILES([Makefile])
-AC_OUTPUT
-END
-
-: > Makefile.am
-
-$ACLOCAL
-AUTOMAKE_fails
-grep 'configure.in:2:.*no-dist-gzip' stderr
-
-echo 'AUTOMAKE_OPTIONS = dist-bzip2' > Makefile.am
-$AUTOMAKE
diff --git a/tests/xz.test b/tests/xz.test
deleted file mode 100755
index 1320ed7..0000000
--- a/tests/xz.test
+++ /dev/null
@@ -1,39 +0,0 @@
-#! /bin/sh
-# Copyright (C) 2008, 2011 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 .
-
-# Check support for no-dist-gzip with xz.
-
-required=xz
-. ./defs || Exit 1
-
-cat > configure.in << 'END'
-AC_INIT([xz], [1.0])
-AM_INIT_AUTOMAKE([no-dist-gzip dist-xz])
-AC_CONFIG_FILES([Makefile])
-AC_OUTPUT
-END
-
-cat > Makefile.am << 'END'
-test: distcheck
- test $(DIST_ARCHIVES) = xz-1.0.tar.xz
- test -f $(DIST_ARCHIVES)
-END
-
-$ACLOCAL
-$AUTOCONF
-$AUTOMAKE
-./configure
-$MAKE test
--
1.7.7.3