>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