summaryrefslogtreecommitdiff
path: root/t/dist-formats.tap
diff options
context:
space:
mode:
Diffstat (limited to 't/dist-formats.tap')
-rwxr-xr-xt/dist-formats.tap392
1 files changed, 83 insertions, 309 deletions
diff --git a/t/dist-formats.tap b/t/dist-formats.tap
index d03fc7420..5737227e6 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'
: