#! /bin/sh
# depdemo-relink.test - check to see whether shlibpath overrides runpath
#
#   Copyright (C) 2003, 2004 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_restore_files ()
{
    func_mkdir_p "$objdir"
    test "`echo _fnord/temp/libs/*`" = "_fnord/temp/libs/*" \
      || mv -f _fnord/temp/libs/* "l3/$objdir"
    mv -f "_fnord/temp/libl3.la" "l3"
    test -f "_fnord/temp/lt-depdemo$EXEXT" \
      && mv -f "_fnord/temp/lt-depdemo$EXEXT" "$objdir"
    test -f "_fnord/temp/depdemo$EXEXT" \
      && mv -f "_fnord/temp/depdemo$EXEXT" "$objdir"
    rm -rf "_fnord"
}

func_save_files ()
{
    func_mkdir_p "_fnord/temp/libs"
    test -f "$objdir/lt-depdemo$EXEEXT" \
      && cp -f "$objdir/lt-depdemo$EXEEXT" "_fnord/temp"
    test -f "$objdir/depdemo$EXEEXT" \
      && cp -f "$objdir/depdemo$EXEEXT" "_fnord/temp"
    cp -f l3/libl3.la "_fnord/temp"
    cp -f l3/"$objdir"/* "_fnord/temp/libs"
    trap "func_restore_files" 0 1 2 13 15
}

func_require "depdemo-inst" "$prefix/lib/libl3.la"  "tests/depdemo/l3/libl3.la"

func_mkprefixdir
func_cd "tests/depdemo"

# Check to make sure we have a dynamic library.
func_get_config "library_names" "cat l3/libl3.la"
test -z "$library_names" \
  && func_skip "Exiting: depdemo/l3/libl3.la is not a shared library"

func_save_files

func_get_config 'shlibpath_overrides_runpath
hardcode_action
hardcode_direct
hardcode_into_libs' "./libtool --config" ": fatal"

./depdemo$EXEEXT # so that it links on-demand if needed

func_msg "removing libl3.la from depdemo/l3"
rm -rf l3/libl3.la l3/$objdir

func_msg "running depdemo/depdemo"
if ./depdemo$EXEEXT ||
   # On AIX 4.1, when the installed copy of libl3 is loaded, it brings
   # with it the installed copies of libl1 and libl2, with disjoint
   # counters var_l1 and var_l2.  This is arguably acceptable behavior,
   # but it's definitely not enough of a reason for the test to fail.
   ./depdemo$EXEEXT -alt; then
  :
elif test "x,$hardcode_action,$hardcode_direct" = x,relink,yes; then
  func_msg "Ok, uninstalled programs fail after uninstalled libraries are removed"
  func_msg "This works in other configurations, but not in this particular one"
elif test "$build" != "$host"; then
  func_msg "depdemo/depdemo does not run.  Since you seem to be"
  func_msg "cross-compiling, this might be ok."
else
  func_fail "Exiting: depdemo/depdemo does not run, maybe libl3 was not installed"
fi

func_msg "linking a broken depdemo/l3/libl3.la"
(cd l3 && $MAKE libl3.la libl3_la_OBJECTS=../l2/l2.lo) \
  || func_fail "Exiting: cannot link broken libl3.la"
rm -f l3/libl3.la

func_msg "running depdemo/depdemo with broken libl3.la"
if (./depdemo$EXEEXT) 2>&1; then
  func_msg "Exiting: depdemo/depdemo runs even though libl3.la is incomplete"
  func_fail "shlibpath_overrides_runpath should be set to no"
elif test "$build" != "$host"; then
  func_msg "Failed, as expected.  But since you seem to be"
  func_msg "cross-compiling, this is not reliable."
  status=$EXIT_SKIP
else
  func_msg "Failed, as expected"
fi

if test "x$hardcode_action" = xrelink; then
  func_msg "Exiting: install-time relinking is required"
  exit $EXIT_SUCCESS
fi

if test "$shlibpath_overrides_runpath" != yes; then
  rm -f $objdir/lt-depdemo || exit $EXIT_FAILURE
  cp $objdir/depdemo $objdir/lt-depdemo || exit $EXIT_FAILURE
  func_msg "running depdemo/depdemo with installed libl3.la"
  if ./depdemo; then
    func_msg "Worked, as expected"
  else
    func_msg "shlibpath_overrides_runpath should be set to yes"
    status=$EXIT_FAILURE
  fi
fi

exit $status
