#! /bin/sh
# Copyright (C) 2004  Free Software Foundation, Inc.
#
# This file is part of GNU Automake.
#
# GNU Automake 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.
#
# GNU Automake 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 Automake; see the file COPYING.  If not, write to
# the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
# Boston, MA 02110-1301, USA.

# Test missing python.

# Python is not required for this test.
. ./defs || exit 1

set -e

cat >>configure.in <<'EOF'
m4_define([_AM_PYTHON_INTERPRETER_LIST], [IShouldNotExist1 IShouldNotExist2])
AM_PATH_PYTHON
# The following be executed only after the first run, once a
# third argument has been added to the previous macro.
echo PYTHON = $PYTHON
test "$PYTHON" = : || exit 1
EOF

: > Makefile.am

$ACLOCAL
$AUTOCONF

./configure >stdout 2>stderr && exit 1
cat stdout
cat stderr
grep 'checking for IShouldNotExist1' stdout
grep 'checking for IShouldNotExist2' stdout
grep 'no suitable Python interpreter found' stderr

$PERL -pi -e 's/AM_PATH_PYTHON/AM_PATH_PYTHON(,,:)/' configure.in
$ACLOCAL
$AUTOCONF
# This one should define PYTHON as : and exit succesfully
./configure

# Any user setting should be used.
./configure PYTHON=foo >stdout && exit 1
cat stdout
grep 'PYTHON = foo' stdout
