A testsuite-enhancement patch stemmed from my brief foray into Automake's python support. This patch is in small part cosmetic, but IMHO offers real improvements and valuable additions, and also fixes a couple of glitches in python.m4.
Ok for maint? I will push in 72 hours if there's no objection. Regards, Stefano
From e7542fee64b08e6f6c467e0f4adecbea5b6fe705 Mon Sep 17 00:00:00 2001 From: Stefano Lattarini <stefano.lattar...@gmail.com> Date: Tue, 1 Feb 2011 23:22:08 +0100 Subject: [PATCH] python: extend and improve tests, fix minor glitches * m4/python.m4 (AM_PATH_PYTHON): Ensure the "checking ..." messages from configure are always complete, even in case of failure. Tiny cosmetic improvement in info/error messages. * tests/python.test: Also check that automake complains if the PYTHON primary is used but the `py-compile' script is not present. Make grepping of generated Makefile.in laxer w.r.t. whitespace. Prefer `cat' over `echo' to append to the generated configure.in. Add trailing `:' command. * tests/python2.test: Remove repeated calls aclocal: they are useless because configure.in is never modified. Make grepping of automake stderr more comprehensive. Remove the pre-existing `py-compile' file before trying to install it with `--add-missing'. Add trailing `:' command. * tests/python3.test: Add trailing `:' command. * tests/python11.test: Likewise. * tests/python4.test: Likewise. Also, try to pass PYTHON config variable to configure from the environment, rather than only from the command line. * tests/python5.test: Ensure that the "checking ..." messages from configure are always complete. Use proper m4 quoting. Add a trailing `:' command. * tests/python6.test: Simplify test logic, by checking for files created by configure rather then grepping its output. * tests/python7.test: Likewise. * tests/python8.test: Also check that `$PYTHON' is meaningfully set in the ACTION-IF-TRUE argument of AM_PATH_PYTHON. * tests/python9.test: Likewise. * tests/python10.test: Add trailing `:' command. (Makefile.am): Declare `disttest' target as `.PHONY', and add an `ls -l' to its recipe, for debugging. * tests/nobase-python.test: In testing "make uninstall" and "make install" results, prefer idioms that make verbose logs more helpful. Remove a couple of lines of dead code. Add a trailing `:' command. * tests/python5b.test: New test, checking that configure performs the check on the python version even when the choice of the python interpreter is forced by the user. * tests/python-dist.test: New test, checking the distribution of *_PYTHON files. * tests/python-vars.test: New test, checking that AM_PATH_PYTHON correctly set all the output variables advertised in the manual. * tests/python-virtualenv.test: New test, checking that python support offered by automake works well with virtualenvs. * tests/instdir-pyexec.test: New, sister of `instdir-python.test', but checking `$(pyexecdir)' instead of `$(pythondir)'. * tests/Makefile.am (TESTS): Update. --- ChangeLog | 50 +++++++++++ m4/python.m4 | 5 +- tests/Makefile.am | 5 + tests/Makefile.in | 4 + tests/instdir-pyexec.test | 67 +++++++++++++++ tests/nobase-python.test | 12 ++-- tests/python-dist.test | 80 ++++++++++++++++++ tests/python-vars.test | 93 +++++++++++++++++++++ tests/python-virtualenv.test | 184 ++++++++++++++++++++++++++++++++++++++++++ tests/python.test | 15 +++- tests/python10.test | 6 +- tests/python11.test | 4 +- tests/python2.test | 19 +++-- tests/python3.test | 4 +- tests/python4.test | 9 ++- tests/python5.test | 22 +++++- tests/python5b.test | 55 +++++++++++++ tests/python6.test | 11 +-- tests/python7.test | 9 +- tests/python8.test | 12 ++-- tests/python9.test | 14 ++-- 21 files changed, 629 insertions(+), 51 deletions(-) create mode 100755 tests/instdir-pyexec.test create mode 100755 tests/python-dist.test create mode 100755 tests/python-vars.test create mode 100755 tests/python-virtualenv.test create mode 100755 tests/python5b.test diff --git a/ChangeLog b/ChangeLog index 31bdd66..05884ae 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,55 @@ 2011-02-01 Stefano Lattarini <stefano.lattar...@gmail.com> + python: extend and improve tests, fix minor glitches + * m4/python.m4 (AM_PATH_PYTHON): Ensure the "checking ..." messages + from configure are always complete, even in case of failure. Tiny + cosmetic improvement in info/error messages. + * tests/python.test: Also check that automake complains if the + PYTHON primary is used but the `py-compile' script is not present. + Make grepping of generated Makefile.in laxer w.r.t. whitespace. + Prefer `cat' over `echo' to append to the generated configure.in. + Add trailing `:' command. + * tests/python2.test: Remove repeated calls aclocal: they are + useless because configure.in is never modified. Make grepping + of automake stderr more comprehensive. Remove the pre-existing + `py-compile' file before trying to install it with `--add-missing'. + Add trailing `:' command. + * tests/python3.test: Add trailing `:' command. + * tests/python11.test: Likewise. + * tests/python4.test: Likewise. Also, try to pass PYTHON config + variable to configure from the environment, rather than only from + the command line. + * tests/python5.test: Ensure that the "checking ..." messages from + configure are always complete. Use proper m4 quoting. Add a + trailing `:' command. + * tests/python6.test: Simplify test logic, by checking for files + created by configure rather then grepping its output. + * tests/python7.test: Likewise. + * tests/python8.test: Also check that `$PYTHON' is meaningfully + set in the ACTION-IF-TRUE argument of AM_PATH_PYTHON. + * tests/python9.test: Likewise. + * tests/python10.test: Add trailing `:' command. + (Makefile.am): Declare `disttest' target as `.PHONY', and add + an `ls -l' to its recipe, for debugging. + * tests/nobase-python.test: In testing "make uninstall" and + "make install" results, prefer idioms that make verbose logs + more helpful. Remove a couple of lines of dead code. Add a + trailing `:' command. + * tests/python5b.test: New test, checking that configure performs + the check on the python version even when the choice of the python + interpreter is forced by the user. + * tests/python-dist.test: New test, checking the distribution of + *_PYTHON files. + * tests/python-vars.test: New test, checking that AM_PATH_PYTHON + correctly set all the output variables advertised in the manual. + * tests/python-virtualenv.test: New test, checking that python + support offered by automake works well with virtualenvs. + * tests/instdir-pyexec.test: New, sister of `instdir-python.test', + but checking `$(pyexecdir)' instead of `$(pythondir)'. + * tests/Makefile.am (TESTS): Update. + +2011-02-01 Stefano Lattarini <stefano.lattar...@gmail.com> + coverage: more tests on simple and parallel test drivers * tests/parallel-tests-subdir.test: New test. * tests/check-exported-srcdir.test: Likewise. diff --git a/m4/python.m4 b/m4/python.m4 index 50e1538..c341d5c 100644 --- a/m4/python.m4 +++ b/m4/python.m4 @@ -51,10 +51,11 @@ AC_DEFUN([AM_PATH_PYTHON], dnl A version check is needed. if test -n "$PYTHON"; then # If the user set $PYTHON, use it and don't search something else. - AC_MSG_CHECKING([whether $PYTHON version >= $1]) + AC_MSG_CHECKING([whether $PYTHON version is >= $1]) AM_PYTHON_CHECK_VERSION([$PYTHON], [$1], [AC_MSG_RESULT(yes)], - [AC_MSG_ERROR(too old)]) + [AC_MSG_RESULT(no) + AC_MSG_ERROR(Python interpreter is too old)]) am_display_PYTHON=$PYTHON else # Otherwise, try each interpreter until we find one that satisfies diff --git a/tests/Makefile.am b/tests/Makefile.am index c9f8467..db9889c 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -400,6 +400,7 @@ instdir-lisp.test \ instdir-ltlib.test \ instdir-prog.test \ instdir-python.test \ +instdir-pyexec.test \ instdir-texi.test \ instexec.test \ instfail.test \ @@ -620,6 +621,7 @@ python2.test \ python3.test \ python4.test \ python5.test \ +python5b.test \ python6.test \ python7.test \ python8.test \ @@ -627,6 +629,9 @@ python9.test \ python10.test \ python11.test \ python12.test \ +python-dist.test \ +python-vars.test \ +python-virtualenv.test \ recurs.test \ recurs2.test \ remake.test \ diff --git a/tests/Makefile.in b/tests/Makefile.in index 1370461..f9f170b 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -670,6 +670,7 @@ instdir-lisp.test \ instdir-ltlib.test \ instdir-prog.test \ instdir-python.test \ +instdir-pyexec.test \ instdir-texi.test \ instexec.test \ instfail.test \ @@ -890,6 +891,7 @@ python2.test \ python3.test \ python4.test \ python5.test \ +python5b.test \ python6.test \ python7.test \ python8.test \ @@ -897,6 +899,8 @@ python9.test \ python10.test \ python11.test \ python12.test \ +python-vars.test \ +python-virtualenv.test \ recurs.test \ recurs2.test \ remake.test \ diff --git a/tests/instdir-pyexec.test b/tests/instdir-pyexec.test new file mode 100755 index 0000000..3d3ac96 --- /dev/null +++ b/tests/instdir-pyexec.test @@ -0,0 +1,67 @@ +#! /bin/sh +# Copyright (C) 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 <http://www.gnu.org/licenses/>. + +# If $(pyexecdir) is the empty string, then nothing should be installed +# there. + +. ./defs || Exit 1 + +set -e + +cat >>configure.in <<'END' +AM_PATH_PYTHON +AC_PROG_CC +AC_OUTPUT +END + +cat >Makefile.am <<'END' +pyexec_PROGRAMS = foo +END + +cat >foo.c <<'END' +int main (void) +{ + return 0; +} +END + +$ACLOCAL +$AUTOCONF +$AUTOMAKE + +cwd=`pwd` +instdir=$cwd/inst +destdir=$cwd/dest +mkdir build +cd build +../configure --prefix="$instdir" +$MAKE + +pyexecdir=''; export pyexecdir + +$MAKE -e install +test ! -d "$instdir" +$MAKE -e install DESTDIR="$destdir" +test ! -d "$instdir" +test ! -d "$destdir" +$MAKE -e uninstall > stdout || { cat stdout; Exit 1; } +cat stdout +grep 'rm ' stdout && Exit 1 +$MAKE -e uninstall DESTDIR="$destdir" > stdout || { cat stdout; Exit 1; } +cat stdout +grep 'rm ' stdout && Exit 1 + +: diff --git a/tests/nobase-python.test b/tests/nobase-python.test index db5b830..c353019 100755 --- a/tests/nobase-python.test +++ b/tests/nobase-python.test @@ -1,5 +1,5 @@ #! /bin/sh -# Copyright (C) 2008 Free Software Foundation, Inc. +# 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 @@ -32,6 +32,7 @@ my_PYTHON = one.py sub/base.py nobase_my_PYTHON = two.py sub/nobase.py test-install-data: install-data + find inst -print; : for debugging test -f inst/my/one.py test -f inst/my/one.pyc test -f inst/my/two.py @@ -55,16 +56,13 @@ $ACLOCAL $AUTOCONF $AUTOMAKE --add-missing -mkdir inst -inst=`pwd`/inst - ./configure --prefix "`pwd`/inst" --program-prefix=p $MAKE $MAKE test-install-data $MAKE uninstall -test `find inst/my -type f -print | wc -l` = 0 +find inst/my -type f -print | grep . && Exit 1 $MAKE install-strip @@ -78,4 +76,6 @@ cd build $MAKE $MAKE test-install-data $MAKE uninstall -test `find inst/my -type f -print | wc -l` = 0 +find inst/my -type f -print | grep . && Exit 1 + +: diff --git a/tests/python-dist.test b/tests/python-dist.test new file mode 100755 index 0000000..1ddb476 --- /dev/null +++ b/tests/python-dist.test @@ -0,0 +1,80 @@ +#! /bin/sh +# Copyright (C) 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 <http://www.gnu.org/licenses/>. + +# Test distribution of *_PYTHON files. + +# This test does not require python. +. ./defs || Exit 1 + +set -e + +cat >> configure.in << 'END' +AM_PATH_PYTHON +AC_OUTPUT +END + +cat > Makefile.am << 'END' +python_PYTHON = python.py +dist_python_PYTHON = python-dist.py +nodist_python_PYTHON = python-nodist.py + +pkgpython_PYTHON = pkgpython.py +dist_pkgpython_PYTHON = pkgpython-dist.py +nodist_pkgpython_PYTHON = pkgpython-nodist.py + +mydir = $(prefix)/my +my_PYTHON = my.py +dist_my_PYTHON = my-dist.py +nodist_my_PYTHON = my-nodist.py + +my.py my-dist.py my-nodist.py: + : > $@ + +.PHONY: disttest +disttest: distdir + ls -l $(distdir) + test -f $(distdir)/python.py + test -f $(distdir)/python-dist.py + test ! -f $(distdir)/python-nodist.py + test -f $(distdir)/pkgpython.py + test -f $(distdir)/pkgpython-dist.py + test ! -f $(distdir)/pkgpython-nodist.py + test -f $(distdir)/my.py + test -f $(distdir)/my-dist.py + test ! -f $(distdir)/my-nodist.py +END + +: > python.py +: > python-dist.py +: > python-nodist.py + +: > pkgpython.py +: > pkgpython-dist.py +: > pkgpython-nodist.py + +: > py-compile + +$ACLOCAL +$AUTOCONF +$AUTOMAKE + +./configure + +$MAKE disttest +# It's not distributed, hence it shouldn't be needlessly generated. +test ! -f my-nodist.py + +: diff --git a/tests/python-vars.test b/tests/python-vars.test new file mode 100755 index 0000000..b6c5d2c --- /dev/null +++ b/tests/python-vars.test @@ -0,0 +1,93 @@ +#! /bin/sh +# Copyright (C) 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 <http://www.gnu.org/licenses/>. + +# Check that AM_PATH_PYTHON correctly set all the output variables +# advertised in the manual. + +required=python +. ./defs || Exit 1 + +set -e + +PYTHON=python + +# Update these if the documentation changes. +PYTHON_VERSION=`$PYTHON -c 'import sys; print(sys.version[:3])'` || Exit 1 +PYTHON_PLATFORM=`$PYTHON -c 'import sys; print(sys.platform)'` || Exit 1 +PYTHON_EXEC_PREFIX='${exec_prefix}' +PYTHON_PREFIX='${prefix}' +pythondir="\${prefix}/lib/python$PYTHON_VERSION/site-packages" +pyexecdir="\${exec_prefix}/lib/python$PYTHON_VERSION/site-packages" +pkgpythondir="\${pythondir}/$me" +pkgpyexecdir="\${pyexecdir}/$me" + +pyvars='PYTHON_VERSION PYTHON_PLATFORM PYTHON_PREFIX PYTHON_EXEC_PREFIX + pythondir pyexecdir pkgpythondir pkgpyexecdir' + +cat >> configure.in << 'END' +AC_CONFIG_FILES([vars-got]) +AM_PATH_PYTHON +AC_OUTPUT +END + +cat > my.py << 'END' +def my(): + return 1 +END + +cat > Makefile.am << 'END' + +python_PYTHON = my.py + +EXTRA_DIST = vars-exp + +check-local: test-in test-am +.PHONY: test-in test-am + +test-in: + cat $(srcdir)/vars-exp + cat $(builddir)/vars-got + diff $(srcdir)/vars-exp $(builddir)/vars-got +END + +echo > vars-exp +echo > vars-got.in +echo test-am: >> Makefile.am + +for var in $pyvars; do + eval val=\$$var + (echo "### $var ###" && echo "$val" && echo) >> vars-exp + (echo "### $var ###" && echo "@$var@" && echo) >> vars-got.in + echo "${tab}test x'\$($var)' = x'$val'" >> Makefile.am +done + +cat Makefile.am +cat vars-got.in + +$ACLOCAL +$AUTOMAKE --add-missing + +for var in $pyvars; do + grep "^$var *=" Makefile.in +done + +$AUTOCONF +./configure PYTHON="$PYTHON" + +$MAKE test-in test-am +$MAKE distcheck + +: diff --git a/tests/python-virtualenv.test b/tests/python-virtualenv.test new file mode 100755 index 0000000..fcef00d --- /dev/null +++ b/tests/python-virtualenv.test @@ -0,0 +1,184 @@ +#! /bin/sh +# Copyright (C) 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 <http://www.gnu.org/licenses/>. + +# Check that python support can work well with virtualenvs. +# This test also works as a mild stress-test on the python support. + +. ./defs || Exit 1 + +set -e + +# Skip the test if a proper virtualenv cannot be created. +virtualenv --version || Exit 77 +virtualenv --verbose virtenv || Exit 77 +test -f virtenv/bin/activate || Exit 77 + +# Activate the virtualenv. +. ./virtenv/bin/activate +# Sanity check. +test -n "$VIRTUAL_ENV" || Exit 99 + +cwd=`pwd` +py_version=`python -c 'import sys; print("%u.%u" % tuple(sys.version_info[:2]))'` +py_site=$VIRTUAL_ENV/lib/python$py_version/site-packages + +# We need control over the package name. +cat > configure.in << END +AC_INIT([am_virtenv], [1.0]) +AM_INIT_AUTOMAKE +AC_CONFIG_FILES([Makefile]) +AC_SUBST([MY_VIRTENV], ['$cwd/virtenv']) +AC_PROG_CC +AC_PROG_RANLIB +AM_PATH_PYTHON +AC_OUTPUT +END + +cat > Makefile.am << 'END' +python_PYTHON = am_foo.py +pkgpython_PYTHON = __init__.py +pyexec_LIBRARIES = libquux.a +libquux_a_SOURCES = foo.c +pkgpyexec_LIBRARIES = libzardoz.a +libzardoz_a_SOURCES = foo.c + +py_site = $(MY_VIRTENV)/lib/python$(PYTHON_VERSION)/site-packages + +.PYTHON: debug test-run test-install test-uninstall +debug: + @echo PYTHON: $(PYTHON) + @echo PYTHON_VERSION: $(PYTHON_VERSION) + @echo prefix: $(prefix) + @echo pythondir: $(pythondir) + @echo pkgpythondir: $(pkgpythondir) + @echo pyexecdir: $(pyexecdir) + @echo pkgpyexecdir: $(pkgpyexecdir) +test-run: + ## In a virtualenv, the default python must be the custom + ## virtualenv python. + @: \ + && py1=`python -c 'import sys; print(sys.executable)'` \ + && py2=`$(PYTHON) -c 'import sys; print(sys.executable)'` \ + && echo "py1: $$py1" \ + && echo "py2: $$py2" \ + && test -n "$$py1" \ + && test -n "$$py2" \ + && test x"$$py1" = x"$$py2" + ## Check that modules installed in the virtualenv are readily + ## available. + python -c 'from am_foo import foo_func; assert (foo_func () == 12345)' + python -c 'from am_virtenv import old_am; assert (old_am () == "AutoMake")' +test-install: + test -f $(py_site)/am_foo.py + test -f $(py_site)/am_foo.pyc + test -f $(py_site)/am_foo.pyo + test -f $(py_site)/am_virtenv/__init__.py + test -f $(py_site)/am_virtenv/__init__.pyc + test -f $(py_site)/am_virtenv/__init__.pyo + test -f $(py_site)/libquux.a + test -f $(py_site)/am_virtenv/libzardoz.a +test-uninstall: + test ! -f $(py_site)/am_foo.py + test ! -f $(py_site)/am_foo.pyc + test ! -f $(py_site)/am_foo.pyo + test ! -f $(py_site)/am_virtenv/__init__.py + test ! -f $(py_site)/am_virtenv/__init__.pyc + test ! -f $(py_site)/am_virtenv/__init__.pyo + test ! -f $(py_site)/libquux.a + test ! -f $(py_site)/am_virtenv/libzardoz.a +all-local: debug +END + +cat > am_foo.py << 'END' +def foo_func (): + return 12345 +END + +cat > __init__.py << 'END' +def old_am (): + return 'AutoMake' +END + +cat > foo.c << 'END' +int foo (void) +{ + return 0; +} +END + +$ACLOCAL +$AUTOCONF +$AUTOMAKE --add-missing + +# Try a VPATH build. +mkdir build +cd build +../configure --prefix="$VIRTUAL_ENV" +$MAKE install +$MAKE test-install +$MAKE test-run +$MAKE uninstall +$MAKE test-uninstall +cd .. + +# Try an in-tree build. +./configure --prefix="$VIRTUAL_ENV" +$MAKE install +$MAKE test-install +$MAKE test-run +$MAKE uninstall +$MAKE test-uninstall + +$MAKE distclean + +# Overriding pythondir and pyexecdir with cache variables should work. +./configure am_cv_python_pythondir="$py_site" \ + am_cv_python_pyexecdir="$py_site" +$MAKE install +$MAKE test-install +$MAKE test-run +$MAKE uninstall +$MAKE test-uninstall + +$MAKE distclean + +# Overriding pythondir and pyexecdir at make time should be enough. +./configure --prefix="$cwd/bad-prefix" +pythondir=$py_site pyexecdir=$py_site +export pythondir pyexecdir +$MAKE -e install +test ! -d bad-prefix +$MAKE -e test-install +$MAKE test-run +$MAKE -e uninstall +$MAKE -e test-uninstall +unset pythondir pyexecdir + +# Also check that the distribution is self-contained, for completeness. +$MAKE distcheck + + +# Finally, check that if we disable the virtualenv, we shouldn't be +# able to access to the installed modules anymore. +cd build +$MAKE install +python -c 'import am_foo; print(am_foo.__file__)' +python -c 'import am_virtenv; print(am_virtenv.__file__)' +deactivate "nondestructive" +python -c 'import am_foo' && Exit 1 +python -c 'import am_virtenv' && Exit 1 + +: diff --git a/tests/python.test b/tests/python.test index 8102ca0..7e90844 100755 --- a/tests/python.test +++ b/tests/python.test @@ -1,5 +1,5 @@ #! /bin/sh -# Copyright (C) 2001, 2002 Free Software Foundation, Inc. +# Copyright (C) 2001, 2002, 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 @@ -20,14 +20,21 @@ set -e -echo 'AM_PATH_PYTHON' >> configure.in +cat >> configure.in << 'END' +AM_PATH_PYTHON +END cat > Makefile.am << 'END' python_PYTHON = foo.py END $ACLOCAL -$AUTOMAKE -a -grep '^py_compile =' Makefile.in +AUTOMAKE_fails +grep '^Makefile\.am:1:.* required file.*py-compile' stderr + +$AUTOMAKE -a +grep '^py_compile *=' Makefile.in test -f py-compile + +: diff --git a/tests/python10.test b/tests/python10.test index ff0ee15..16566fc 100755 --- a/tests/python10.test +++ b/tests/python10.test @@ -1,5 +1,5 @@ #! /bin/sh -# Copyright (C) 2004, 2007 Free Software Foundation, Inc. +# Copyright (C) 2004, 2007, 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 @@ -41,7 +41,9 @@ one.py: two.py: echo 'def two(): return 1' >$@ +.PHONY: disttest disttest: distdir + ls -l $(distdir) test -f $(distdir)/one.py test -f $(distdir)/two.py END @@ -81,3 +83,5 @@ test ! -f "$inst/my/one.pyc" test ! -f "$inst/my/one.pyo" $MAKE disttest + +: diff --git a/tests/python11.test b/tests/python11.test index 0f15f37..f0386be 100755 --- a/tests/python11.test +++ b/tests/python11.test @@ -1,5 +1,5 @@ #! /bin/sh -# Copyright (C) 2004, 2006, 2008 Free Software Foundation, Inc. +# Copyright (C) 2004, 2006, 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 @@ -53,3 +53,5 @@ $AUTOCONF ./configure PYTHON=foo >stdout && { cat stdout; Exit 1; } cat stdout grep 'PYTHON = foo' stdout + +: diff --git a/tests/python2.test b/tests/python2.test index 3e14fa2..d2ace1f 100755 --- a/tests/python2.test +++ b/tests/python2.test @@ -1,5 +1,5 @@ #! /bin/sh -# Copyright (C) 2002, 2003, 2010 Free Software Foundation, Inc. +# Copyright (C) 2002, 2003, 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 @@ -20,6 +20,8 @@ set -e +$ACLOCAL + echo 1. pythondir not defined @@ -28,8 +30,8 @@ PYTHON = x python_PYTHON = foo.py END -$ACLOCAL AUTOMAKE_fails -a +grep 'pythondir.*undefined' stderr grep AM_PATH_PYTHON stderr @@ -40,8 +42,8 @@ PYTHON = x pkgpython_PYTHON = foo.py END -$ACLOCAL AUTOMAKE_fails -a +grep 'pkgpythondir.*undefined' stderr grep AM_PATH_PYTHON stderr @@ -52,8 +54,8 @@ PYTHON = x pyexec_PYTHON = foo.py END -$ACLOCAL AUTOMAKE_fails -a +grep 'pyexecdir.*undefined' stderr grep AM_PATH_PYTHON stderr @@ -64,8 +66,8 @@ PYTHON = x pkgpyexec_PYTHON = foo.py END -$ACLOCAL AUTOMAKE_fails -a +grep 'pkgpyexecdir.*undefined' stderr grep AM_PATH_PYTHON stderr @@ -76,8 +78,8 @@ pkgpyexecdir = /here/we/go pkgpyexec_PYTHON = foo.py END -$ACLOCAL AUTOMAKE_fails -a +grep 'PYTHON.*undefined' stderr grep AM_PATH_PYTHON stderr @@ -89,7 +91,7 @@ pkgpyexecdir = /here/we/go pkgpyexec_PYTHON = foo.py END -$ACLOCAL +rm -f py-compile $AUTOMAKE -a test -f py-compile @@ -102,5 +104,6 @@ fubardir = /here/we/go fubar_PYTHON = foo.py END -$ACLOCAL $AUTOMAKE -a + +: diff --git a/tests/python3.test b/tests/python3.test index f01ad31..91e3989 100755 --- a/tests/python3.test +++ b/tests/python3.test @@ -1,5 +1,5 @@ #! /bin/sh -# Copyright (C) 2002, 2007 Free Software Foundation, Inc. +# Copyright (C) 2002, 2007, 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 @@ -47,3 +47,5 @@ $MAKE install test -f "$inst/my/one.py" test -f "$inst/my/one.pyc" test -f "$inst/my/one.pyo" + +: diff --git a/tests/python4.test b/tests/python4.test index 11bb3ed..b201e05 100755 --- a/tests/python4.test +++ b/tests/python4.test @@ -32,7 +32,14 @@ $ACLOCAL $AUTOCONF $AUTOMAKE --add-missing -# Simulate no Python +# Simulate no Python. ./configure PYTHON=: 2>stderr && { cat stderr >&2; Exit 1; } cat stderr >&2 grep 'no suitable Python interpreter found' stderr + +# Again, but from the environment this time. +env PYTHON=: ./configure 2>stderr && { cat stderr >&2; Exit 1; } +cat stderr >&2 +grep 'no suitable Python interpreter found' stderr + +: diff --git a/tests/python5.test b/tests/python5.test index 86f5863..87c7787 100755 --- a/tests/python5.test +++ b/tests/python5.test @@ -1,5 +1,5 @@ #! /bin/sh -# Copyright (C) 2003, 2008 Free Software Foundation, Inc. +# Copyright (C) 2003, 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 @@ -24,16 +24,32 @@ set -e cat >>configure.in <<EOF # Hopefully the Python team will never release such a version. -AM_PATH_PYTHON(9999.9) +AM_PATH_PYTHON([9999.9]) AC_OUTPUT EOF +mkdir bin +cat > bin/python <<EOF +#! /bin/sh +exit 1 +EOF +chmod a+x bin/python +PATH=`pwd`/bin:$PATH_SEPARATOR$PATH + : > Makefile.am $ACLOCAL $AUTOCONF $AUTOMAKE --add-missing -./configure 2>stderr && { cat stderr >&2; Exit 1; } +./configure >stdout 2>stderr && { + cat stdout + cat stderr >&2 + Exit 1 +} +cat stdout cat stderr >&2 +$EGREP 'checking for a Python interpreter with version >= 9999\.9\.\.\. no(ne)? *$' stdout grep 'no suitable Python interpreter found' stderr + +: diff --git a/tests/python5b.test b/tests/python5b.test new file mode 100755 index 0000000..d9aeb81 --- /dev/null +++ b/tests/python5b.test @@ -0,0 +1,55 @@ +#! /bin/sh +# Copyright (C) 2003, 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 <http://www.gnu.org/licenses/>. + +# Test detection of missing Python. +# Same as python5.test, but with the user forcing the python to use. + +required=python +. ./defs || Exit 1 + +set -e + +cat >>configure.in << 'END' +# Hopefully the Python team will never release such a version. +AM_PATH_PYTHON([9999.9]) +AC_OUTPUT +END + +mkdir bin +cat > bin/my-python << 'END' +#! /bin/sh +exec python ${1+"$@"} +END +chmod a+x bin/my-python +PATH=`pwd`/bin:$PATH_SEPARATOR$PATH + +: > Makefile.am + +$ACLOCAL +$AUTOCONF +$AUTOMAKE --add-missing + +./configure PYTHON=my-python >stdout 2>stderr && { + cat stdout + cat stderr >&2 + Exit 1 +} +cat stdout +cat stderr >&2 +grep 'whether my-python version is >= 9999\.9\.\.\. no *$' stdout +grep '[Pp]ython interpreter is too old' stderr + +: diff --git a/tests/python6.test b/tests/python6.test index 86dcfbb..f42ad6b 100755 --- a/tests/python6.test +++ b/tests/python6.test @@ -1,5 +1,5 @@ #! /bin/sh -# Copyright (C) 2003, 2010 Free Software Foundation, Inc. +# Copyright (C) 2003, 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 @@ -23,7 +23,7 @@ set -e cat >>configure.in <<\EOF -AM_PATH_PYTHON(,, [echo "GREP ME$PYTHON" >&2]) +AM_PATH_PYTHON(,, [echo "$PYTHON" > py]) AC_OUTPUT EOF @@ -33,9 +33,8 @@ $ACLOCAL $AUTOCONF $AUTOMAKE --add-missing -# Simulate no Python -./configure PYTHON=: 2>stderr || { cat stderr >&2; Exit 1; } -cat stderr >&2 -grep 'GREP ME:' stderr +# Simulate no Python. +./configure PYTHON=: +test x"`cat py`" = x":" : diff --git a/tests/python7.test b/tests/python7.test index 27b2e79..1457ed1 100755 --- a/tests/python7.test +++ b/tests/python7.test @@ -1,5 +1,5 @@ #! /bin/sh -# Copyright (C) 2003, 2010 Free Software Foundation, Inc. +# Copyright (C) 2003, 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 @@ -24,7 +24,7 @@ set -e cat >>configure.in <<\EOF # Hopefully the Python team will never release such a version. -AM_PATH_PYTHON(9999.9,, [echo "GREP ME$PYTHON" >&2]) +AM_PATH_PYTHON([9999.9], [], [echo "$PYTHON" > py]) AC_OUTPUT EOF @@ -34,8 +34,7 @@ $ACLOCAL $AUTOCONF $AUTOMAKE --add-missing -./configure 2>stderr || { cat stderr >&2; Exit 1; } -cat stderr >&2 -grep 'GREP ME:' stderr +./configure +test x"`cat py`" = x":" : diff --git a/tests/python8.test b/tests/python8.test index 51d02ad..cd87a51 100755 --- a/tests/python8.test +++ b/tests/python8.test @@ -1,5 +1,5 @@ #! /bin/sh -# Copyright (C) 2003, 2010 Free Software Foundation, Inc. +# Copyright (C) 2003, 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 @@ -21,8 +21,9 @@ required=python set -e -cat >>configure.in <<EOF -AM_PATH_PYTHON(, [echo 'GREP ME' >&2]) +cat >>configure.in <<'EOF' +# $PYTHON is supposed to be properly set in ACTION-IF-TRUE. +AM_PATH_PYTHON(, [$PYTHON -V >py-version 2>&1]) AC_OUTPUT EOF @@ -32,8 +33,7 @@ $ACLOCAL $AUTOCONF $AUTOMAKE --add-missing -./configure 2>stderr || { cat stderr >&2; Exit 1; } -cat stderr >&2 -grep 'GREP ME' stderr +./configure +grep '^Python [0-9]\.[0-9][0-9]*\.[0-9]' py-version : diff --git a/tests/python9.test b/tests/python9.test index 6a91e9f..c73bea0 100755 --- a/tests/python9.test +++ b/tests/python9.test @@ -1,5 +1,5 @@ #! /bin/sh -# Copyright (C) 2003, 2010 Free Software Foundation, Inc. +# Copyright (C) 2003, 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 @@ -15,15 +15,16 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. # Test ACTION-IF-TRUE in AM_PATH_PYTHON. -# Same as python8.test, but requiring a version. +# Similar to python8.test, but requiring a version. required=python . ./defs || Exit 1 set -e -cat >>configure.in <<EOF -AM_PATH_PYTHON(0.0, [echo 'GREP ME' >&2]) +cat >>configure.in <<'EOF' +# $PYTHON is supposed to be properly set in ACTION-IF-TRUE. +AM_PATH_PYTHON([0.0], [$PYTHON -c 'print("%u:%u" % (1-1, 2**0))' > py.out]) AC_OUTPUT EOF @@ -33,8 +34,7 @@ $ACLOCAL $AUTOCONF $AUTOMAKE --add-missing -./configure 2>stderr || { cat stderr >&2; Exit 1; } -cat stderr >&2 -grep 'GREP ME' stderr +./configure +test x"`cat py.out`" = x'0:1' : -- 1.7.2.3