#! /bin/sh
# tagtrace.test - check the LT_SUPPORTED_TAGS interface
#
#   Copyright (C) 2004, 2005 Free Software Foundation, Inc.
#
#   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

: ${fnord=$srcdir/fnord$$}

$AUTOCONF --version > /dev/null 2>&1 || func_skip "This test requires GNU Autoconf"
if touch $fnord; then
  rm $fnord
else
  func_skip "This test requires write access to the source tree"
fi

( cd "$srcdir" && $AUTOCONF --trace 'LT_SUPPORTED_TAG:$1' ) >/dev/null
ret=$?
if test $ret -eq 63 || test $ret -eq 1; then
  func_error "This test requires the same Autoconf version"
  func_skip  "as the one that was used to bootstrap Libtool"
elif test $ret -ne 0; then
  func_fatal_error "\`$AUTOCONF --trace' exited $ret"
fi

# Abort as soon as something fails.
set -e

# Retrieve the list of tags supported by our main libtool script.
traced_tags=`cd "$srcdir" && $AUTOCONF --trace 'LT_SUPPORTED_TAG:$1'`

test -n "$traced_tags"

# Ensure each of them is accepted by --tag.
# (We do some useless operation like erasing an empty file, because
# we are just interested in whether --tag accepts the tag or not.)
for tag in $traced_tags; do
  $LIBTOOL -n --mode=link --tag=$tag compiler -o liba.la foo.lo >output 2>&1
  cat output
  if grep 'ignoring unknown tag' output; then
    exit $EXIT_FAILURE
  else
    :
  fi
done

# Ensure the above command would have failed for unknown tags
$LIBTOOL -n --mode=link --tag=UnKnOwN compiler -o liba.la foo.lo >output 2>&1
cat output
grep 'ignoring unknown tag' output

rm -f output
