File: hardcode.test

package info (click to toggle)
libtool 1.5.6-6
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 10,444 kB
  • ctags: 896
  • sloc: sh: 10,215; ansic: 4,323; makefile: 804; cpp: 91; fortran: 19
file content (144 lines) | stat: -rwxr-xr-x 3,775 bytes parent folder | download
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