#! /bin/sh
# hardcode.test - check to see what the system linker hardcodes

# Test script header.
need_prefix=yes
if test -z "$srcdir"; then
  srcdir=`echo "$0" | sed 's%/[^/]*$%%'`
  test "$srcdir" = "$0" && srcdir=.
  test "${VERBOSE+set}" != "set" && VERBOSE=yes
fi
. $srcdir/defs || exit 1

# Check that things are built.
if test -f $prefix/lib/libhello.la && cd ../demo; then :
else
  echo "You must run demo-inst.test before $0" 1>&2
  exit 77
fi

# Unfortunately, we need access to libtool internals for this test.
objdir=NONE
eval `egrep -e '^objdir=' ./libtool 2>/dev/null`
if test "$objdir" = NONE; then
  echo "objdir not set in ../demo/libtool" 1>&2
  exit 1
fi

# Check to make sure we have a dynamic library.
library_names=NONE
eval `egrep -e '^library_names=' ./libhello.la 2>/dev/null`

if test "$library_names" = NONE; then
  echo "library_names not set in ../demo/libhello.la" 1>&2
  exit 1
elif test -z "$library_names"; then
  echo "= Exiting: ../demo/libhello.la is not a shared library"
  exit 0
fi

echo "= Running $make hardcode in ../demo"
$make hardcode || exit 1

echo "= Finding ltconfig's guesses at hardcoding values"
status=0
hardcode_direct=NONE
hardcode_minus_L=NONE
hardcode_shlibpath_var=NONE
hardcode_libdir_flag_spec=NONE

# Suck in all the hardcode_* variable settings.
eval `egrep -e '^hardcode_' ./libtool 2>/dev/null`

if test "$hardcode_direct" = NONE; then
  echo "hardcode_direct not set in ../demo/libtool" 1>&2
  status=1
fi

if test "$hardcode_minus_L" = NONE; then
  echo "hardcode_minus_L not set in ../demo/libtool" 1>&2
  status=1
fi

if test "$hardcode_shlibpath_var" = NONE; then
  echo "hardcode_shlibpath_var not set in ../demo/libtool" 1>&2
  status=1
fi

if test "$hardcode_libdir_flag_spec" = NONE; then
  echo "hardcode_libdir_flag_spec not set in ../demo/libtool" 1>&2
  status=1
fi

test $status -eq 0 || exit $status

echo "= Searching for hardcoded library directories in each program"
for file in hc-*; do
  case "$file" in
  hc-direct) expected="$hardcode_direct" ;;
  hc-libpath) expected="$hardcode_shlibpath_var" ;;
  hc-minusL) expected="$hardcode_minus_L" ;;

  hc-libflag)
    if test -n "$hardcode_libdir_flag_spec"; then
      expected=yes
    else
      expected=unsupported
    fi
    ;;

  *)
    continue
    ;;
  esac

  # Discover whether the objdir really was hardcoded.
  hardcoded=no

  # At least AIX fgrep doesn't work for binary files, and AIX also
  # doesn't have strings(1), so we need this strange conversion
  # (which only works on ASCII).
  # AIX fgrep also has a limited line length, so we turn unprintable
  # characters into newlines.
  if cat $file | (tr '\000-\037\200-\377' '\n' || cat) 2>/dev/null \
	       | fgrep "$objdir" > /dev/null 2>&1; then
    hardcoded=yes
  elif fgrep "$objdir" $file > /dev/null 2>&1; then
    # We retry fgrep without tr, in case the above lead to a false negative.
    hardcoded=yes
  elif (sed -e '1!d' $file | egrep 'unsupported') >/dev/null 2>&1; then
    hardcoded=unsupported
  fi

  # Check the result.
  case "$hardcoded" in
  yes)
    if test $expected = yes; then
      echo "$objdir was hardcoded in \`$file', as libtool expected"
    else
      echo "$objdir was hardcoded in \`$file', which fooled libtool" 1>&2
      status=1
    fi
    ;;

  no)
    if test $expected = no; then
      echo "$objdir was not hardcoded in \`$file', as libtool expected"
    else
      echo "$objdir was not hardcoded in \`$file', which fooled libtool" 1>&2
      status=1
    fi
    ;;

  unsupported)
    if test $expected = unsupported; then
      echo "\`$file' was not linked properly, as libtool expected"
    else
      echo "\`$file' was not linked properly, which fooled libtool" 1>&2
      status=1
    fi
    ;;
  esac
done

exit $status
