#! /bin/sh
# demo-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 ()
{
    mv -f "$objdir"/temp/libs/* "$objdir"
    mv -f "$objdir/temp/libhello.la" .
    rm -rf "$objdir/temp"
}

func_save_files ()
{
    func_mkdir_p "$objdir/temp/libs"
    cp -f libhello.la "$objdir/temp"
    cp -f "$objdir"/libhello.* "$objdir/lt-hell$EXEEXT" "$objdir/temp/libs"
    trap "func_restore_files" 0 1 2 13 15
}

func_require "demo-inst" "$prefix/lib/libhello.la"  "tests/demo/libhello.la"

func_mkprefixdir
func_cd "tests/demo"

# Check to make sure we have a dynamic library.
func_get_config "library_names" "cat libhello.la"
test -z "$library_names" \
  && func_skip "Exiting: demo/libhello.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"

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

func_msg "removing libhello.la from demo"
rm -f libhello.la "$objdir"/libhello.*

func_msg "running demo/hell"
if ./hell$EXEEXT; 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."
else
  func_fail "Exiting: demo/hell does not run, maybe libhello was not installed"
fi

func_msg "linking a broken demo/libhello.la"
func_make libhello.la libhello_la_OBJECTS=hello.lo \
  || func_fail "Exiting: cannot link broken libhello.la"
rm -f libhello.la

func_msg "running demo/hell with broken libhello.la"
if (./hell) 2>&1; then
  func_msg "Exiting: demo/hell runs even though libhello.la is incomplete"
  func_fail "shlibpath_overrides_runpath should be set to no"
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-hell$EXEEXT || exit $EXIT_FAILURE
  cp $objdir/hell$EXEEXT $objdir/lt-hell$EXEEXT || exit $EXIT_FAILURE
  func_msg "running demo/hell with installed libhello.la"
  if ./hell; then
    func_msg "Worked, as expected"
  else
    func_msg "shlibpath_overrides_runpath should be set to yes"
    status=$EXIT_FAILURE
  fi
fi

exit $status
