123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382 |
- #! /bin/sh
- # Copyright (C) 2011-2017 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 <http://www.gnu.org/licenses/>.
- # Test that automake complains when required auxiliary files are not
- # found, and that 'automake --add-missing' installs the files (and only
- # the files) it's supposed to, and that these files are symlinked by
- # default, but copied if the '--copy' option is used.
- am_create_testdir=empty
- . test-init.sh
- plan_ "later"
- build_aux=build-aux
- ocwd=$(pwd) || fatal_ "cannot get current working directory"
- # Try to improve readability of displayed diffs.
- if diff -u /dev/null /dev/null; then
- am_diff='diff -u'
- elif diff -c /dev/null /dev/null; then
- am_diff='diff -c'
- else
- am_diff=diff
- fi
- # MinGW/MSYS lacks real symlinks, so we'll have to skip some checks
- # on that system. More details below.
- echo dummy > foo
- if ln -s foo bar && test -h bar; then
- have_true_symlinks=yes
- else
- have_true_symlinks=no
- fi
- rm -f foo bar
- cat > configure.stub << END
- AC_INIT([$me], [1.0])
- AC_CONFIG_AUX_DIR([$build_aux])
- AM_INIT_AUTOMAKE
- AC_CONFIG_FILES([Makefile])
- END
- # Pre-compute aclocal.m4, in order to save several aclocal invocations.
- cat configure.stub - > configure.ac <<'END'
- AC_PROG_CC
- AC_CANONICAL_BUILD
- AC_CANONICAL_HOST
- AC_CANONICAL_TARGET
- AC_CANONICAL_SYSTEM
- AM_PATH_LISPDIR
- AM_PATH_PYTHON
- AC_OUTPUT
- END
- $ACLOCAL || framework_failure_ "cannot pre-compute aclocal.m4"
- rm -rf configure.ac autom4te*.cache
- mv aclocal.m4 aclocal.stub
- # For debugging.
- cat configure.stub
- cat aclocal.stub
- check_count=0
- # This is hacky and ugly and complex, but allow us to organize our tests
- # below in a more "declarative fashion". All in all, a good trade-off.
- check_ ()
- {
- set +x # Temporary disable shell traces to remove noise from log files.
- check_count=$(($check_count + 1))
- echo check count: $check_count
- override=no
- run_aclocal=no
- fetch_file=
- while test $# -gt 0; do
- case $1 in
- --override) override=yes;;
- --run-aclocal) run_aclocal=yes;;
- --fetch-file) fetch_file=$2; shift;;
- *) framework_failure_ "check_: invalid argument '$1'";;
- esac
- shift
- done
- mkdir testdir-$check_count
- cd testdir-$check_count
- # Directory for common data files (specific to the current test, but
- # shared by its "subtests").
- mkdir generic
- cd generic
- : > Makefile.am
- if test $override = yes; then
- : > configure.ac
- else
- cp "$ocwd"/configure.stub configure.ac
- fi
- test -z "$fetch_file" || cp "$ocwd/$fetch_file" .
- # Read description of "test scenario" from standard input.
- what= line= name= files=
- while read line; do
- case $line in
- '== Name ==') what=NAME;;
- '== Makefile.am ==') what=Makefile.am;;
- '== configure.ac ==') what=configure.ac;;
- '== Files ==') what=LIST;;
- '==*') framework_failure_ "invalid input line: $line";;
- ''|'#%'*) : Empty line or ad-hoc comment, ignore. ;;
- *)
- if test $what = LIST; then
- files="$files $line"
- elif test $what = NAME; then
- name=$line
- else
- printf '%s\n' "$line" >> "$what"
- fi
- ;;
- esac
- done
- test -n "$name" || fatal_ "name of a test case not specified"
- if test $run_aclocal = yes; then
- if $ACLOCAL; then
- ok_ "[$name] aclocal.m4 rebuilt"
- echo == aclocal.m4 ==
- cat aclocal.m4
- else
- not_ok_ "[$name] aclocal failure, aclocal.m4 not rebuilt"
- fi
- else
- cp "$ocwd"/aclocal.stub aclocal.m4
- fi
- echo == Makefile.am ==
- cat Makefile.am
- echo == configure.ac ==
- cat configure.ac
- echo Expected files: $files
- mkdir "$build_aux"
- cd ..
- # End of "test scenario" setup.
- set -x # Re-enable shell traces.
- pwd
- ls -l generic
- # Test once with '--copy', once without.
- for action in link copy; do
- case $action in
- link) opts='--add-missing';;
- copy) opts='-a --copy';;
- *) fatal_ "invalid value '$action' for \$action";;
- esac
- pfx="[$action $name]"
- cp -R generic $action
- cd $action
- # If the required auxiliary files are missing, and automake is
- # not told to install them, it should complain and error out,
- # and also give a useful suggestion.
- AUTOMAKE_fails -d "$pfx missing files, automake fails"
- for f in $files; do
- command_ok_ \
- "$pfx warn about missing file $f" \
- $FGREP "required file '$build_aux/$f' not found" stderr
- # Suggest the user to use '--add-missing'.
- command_ok_ \
- "$pfx suggest --add-missing for $f" \
- grep ".*--add-missing.* install .*'$f'" stderr
- done
- # No files should be automatically installed by automake if it
- # is not told to.
- if ls "$build_aux" | grep .; then r='not ok'; else r=ok; fi
- result_ "$r" "$pfx no extra files installed"
- AUTOMAKE_run -d "$pfx automake run successfully" -- $opts
- ls -l . $build_aux
- # The expected files should get installed correctly (e.g., no
- # broken symlinks).
- for f in $files; do
- command_ok_ \
- "$pfx file $f installed" \
- test -f $build_aux/$f
- done
- # Automake should inform about which files it's installing.
- for f in $files; do
- command_ok_ \
- "$pfx report installation of $f" \
- $FGREP ": installing '$build_aux/$f'" stderr
- done
- # Only the expected files should be installed. But automake always
- # require 'missing' and 'install-sh', so account for them.
- all_files="install-sh missing $files"
- for f in $all_files; do echo $f; done | sort | uniq > files.exp
- (cd $build_aux && ls) | sort > files.got
- cat files.exp
- cat files.got
- command_ok_ \
- "$pfx all and only expected files installed" \
- $am_diff files.exp files.got
- # The files should be copied by '--copy' and symlinked otherwise.
- # But these checks make no sense on systems like MSYS/MinGW where
- # there are no true symlinks ('ln -s' behaves like 'cp -p'), so be
- # ready to skip the checks in that case. See automake bug#10441.
- for f in $files; do
- if test $have_true_symlinks = no; then
- skip_ -r "system lacks true symlinks" "$pfx $f is a symlink or not"
- else
- if test -h $build_aux/$f; then
- is_symlink=yes
- else
- is_symlink=no
- fi
- case $action,$is_symlink in
- link,yes) ok_ "$pfx $f has been symlinked" ;;
- link,no) not_ok_ "$pfx $f has not been symlinked" ;;
- copy,yes) not_ok_ "$pfx $f has been symlinked" ;;
- copy,no) ok_ "$pfx $f has not been symlinked" ;;
- *) fatal_ "invalid condition in case" ;;
- esac
- fi
- done
- # Now that the required auxiliary files have been installed, automake
- # should not complain anymore even if the '--add-missing' option is
- # not used.
- AUTOMAKE_run -d "$pfx automake finds all added files"
- cd ..
- done # for action in link copy
- cd "$ocwd" || fatal_ "cannot chdir back to top-level test directory"
- }
- # Automake should always and unconditionally require the 'missing'
- # and 'install-sh' scripts.
- check_ <<'END'
- == Name ==
- minimal
- == Files ==
- install-sh missing
- END
- check_ <<'END'
- == Name ==
- depcomp/C
- == Files ==
- depcomp
- compile
- == configure.ac ==
- AC_PROG_CC
- == Makefile.am ==
- bin_PROGRAMS = foo
- END
- check_ <<'END'
- == Name ==
- depcomp/C++
- == Files ==
- depcomp
- == configure.ac ==
- AC_PROG_CXX
- == Makefile.am ==
- bin_PROGRAMS = foo
- foo_SOURCES = foo.cc
- END
- check_ --run-aclocal <<'END'
- == Name ==
- compile
- == Files ==
- compile
- == configure.ac ==
- # Using AC_PROG_CC in configure.ac should be enough.
- # No need to also define, say, xxx_PROGRAMS in Makefile.am.
- AC_PROG_CC
- END
- # For config.guess and config.sub.
- for mach in build host target system; do
- MACH=$(echo "$mach" | LC_ALL=C tr '[a-z]' '[A-Z]')
- check_ <<END
- == Name ==
- cfg-$mach
- == Files ==
- config.sub
- config.guess
- == configure.ac ==
- AC_CANONICAL_$MACH
- END
- done
- check_ <<'END'
- == Name ==
- ylwrap/Lex
- == Files ==
- ylwrap
- compile
- == configure.ac ==
- AC_PROG_CC
- AC_PROG_LEX
- == Makefile.am ==
- AUTOMAKE_OPTIONS = no-dependencies
- bin_PROGRAMS = foo
- foo_SOURCES = foo.l
- END
- check_ <<'END'
- == Name ==
- ylwrap/Yacc
- == Files ==
- ylwrap
- compile
- == configure.ac ==
- AC_PROG_CC
- AC_PROG_YACC
- == Makefile.am ==
- AUTOMAKE_OPTIONS = no-dependencies
- bin_PROGRAMS = foo
- foo_SOURCES = foo.y
- END
- echo '@setfilename foo.info' > foo.texi
- check_ --fetch-file foo.texi <<'END'
- == Name ==
- Texinfo
- == Files ==
- texinfo.tex
- == Makefile.am ==
- info_TEXINFOS = foo.texi
- END
- echo '@include version.texi' >> foo.texi
- check_ --fetch-file foo.texi <<'END'
- == Name ==
- Texinfo/mdate-sh
- == Files ==
- mdate-sh
- texinfo.tex
- == Makefile.am ==
- info_TEXINFOS = foo.texi
- END
- rm -f foo.texi
- check_ <<'END'
- == Name ==
- py-compile
- == Files ==
- py-compile
- == configure.ac ==
- AM_PATH_PYTHON
- == Makefile.am ==
- python_PYTHON = foo.py
- END
- # Try few unrelated auxiliary scripts together.
- check_ <<'END'
- == Name ==
- misc
- == Files ==
- py-compile
- depcomp
- ylwrap
- config.sub
- config.guess
- == configure.ac ==
- AC_CANONICAL_BUILD
- AC_CANONICAL_HOST
- AC_PROG_CXX
- == Makefile.am ==
- PYTHON = python
- pythondir = $(prefix)/py
- YACC = bison -y
- bin_PROGRAMS = foo
- foo_SOURCES = bar.yxx baz.c++
- python_PYTHON = zardoz.py
- END
- :
|