#! /bin/sh
# mdemo-exec.test - check that programs in the mdemo subdirectory are viable
#
#   Copyright (C) 2003, 2004, 2005, 2007 Free Software Foundation, Inc.
#   Written by Gary V. Vaughan, 2003
#
#   This file is part of GNU Libtool.
#
# GNU Libtool 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 of
# the License, or (at your option) any later version.
#
# GNU Libtool 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 GNU Libtool; see the file COPYING.  If not, a copy
# can be downloaded from  http://www.gnu.org/licenses/gpl.html,
# or obtained by writing to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
####

. tests/defs || exit 1

func_require "mdemo-make" "tests/mdemo/mdemo$EXEEXT"

func_rmprefixdir
func_exec_init "uninstalled"
func_exec "tests/mdemo/mdemo_static$EXEEXT tests/mdemo/foo1.la tests/mdemo/libfoo2.la" \
	  "try_iterate: .*libfoo2"
func_exec "tests/mdemo/mdemo$EXEEXT tests/mdemo/foo1.la tests/mdemo/libfoo2.la" \
	  "try_iterate: .*libfoo2"
func_exec "tests/mdemo/mdemo_static$EXEEXT `pwd`/tests/mdemo/foo1.la `pwd`/tests/mdemo/libfoo2.la"
func_exec "tests/mdemo/mdemo$EXEEXT `pwd`/tests/mdemo/foo1.la `pwd`/tests/mdemo/libfoo2.la"

exit $exec_status
