1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144
|
#! /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 `grep '^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 `grep '^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 libtool.m4'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 `./libtool --config | grep '^hardcode_' 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 | grep '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
|