#! /bin/sh
# fcdemo-static.test - try configuring the fcdemo subdirectory for static libs
#
#   Copyright (C) 2003, 2004, 2005 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_mkprefixdir
func_cd "tests/fcdemo"
func_make_distclean
# We do not want to fail if all we got was a Fortran 77 compiler.
func_configure_nofail "--disable-shared"
if test "$conf_status" -eq "$EXIT_FAILURE"; then
  case `echo $FC | $SED $basename` in
    g77* | f77* | xlf | xlf[_-]* | frt* | pgf77* | cf77* | fort77* | fl32* | af77*)
       func_skip "The FC fortran tests do not work with Fortran 77 compilers" ;;
    *) exit $EXIT_FAILURE
  esac
fi
func_check_static_shared "yes" "no"

exit 0
