1#! /bin/sh 2# link-order.test - make sure that library linking order matches 3 4# Test script header. 5need_prefix=no 6if test -z "$srcdir"; then 7 srcdir=`echo "$0" | sed 's%/[^/]*$%%'` 8 test "$srcdir" = "$0" && srcdir=. 9 test "${VERBOSE+set}" != "set" && VERBOSE=yes 10fi 11. $srcdir/defs || exit 1 12 13retcode=0 14 15rm -rf linkorder.dir 16mkdir linkorder.dir 17top_dir=`pwd`/linkorder.dir 18prefix_old=$top_dir/old 19prefix_new=$top_dir/new 20srcdir=linkorder.dir/src 21mkdir $srcdir $prefix_old $prefix_new $prefix_old/lib $prefix_new/lib 22 23cat >$srcdir/c.c <<EOF 24int c = 1; 25EOF 26 27$libtool --mode=compile $CC $CFLAGS -c $srcdir/c.c -o $srcdir/c.lo 28$libtool --mode=link $CC $CFLAGS $LDFLAGS -o $srcdir/libcee.la $srcdir/c.lo \ 29 -rpath $prefix_old/lib 30$libtool --mode=install cp $srcdir/libcee.la $prefix_old/lib/libcee.la 31 32for i in old new; do 33 rm -rf $srcdir 34 mkdir $srcdir 35 36 cat >$srcdir/a_$i.c <<EOF 37extern int c; 38extern int b_$i(); 39int a_$i() { return c + b_$i(); } 40EOF 41 42 cat >$srcdir/b_$i.c <<EOF 43extern int c; 44int b_$i() { return 1 + c; } 45EOF 46 47 prefix=`eval echo \\$prefix_$i` 48 $libtool --mode=compile $CC $CFLAGS -c $srcdir/a_$i.c -o $srcdir/a.lo 49 $libtool --mode=compile $CC $CFLAGS -c $srcdir/b_$i.c -o $srcdir/b.lo 50 $libtool --mode=link $CC $CFLAGS $LDFLAGS -o $srcdir/libb.la $srcdir/b.lo \ 51 -L$prefix_old/lib -lcee -rpath $prefix/lib 52 $libtool --mode=link $CC $CFLAGS -o $srcdir/liba.la $srcdir/a.lo \ 53 $srcdir/libb.la -L$prefix_old/lib -lcee -rpath $prefix/lib 54 $libtool --mode=install cp $srcdir/libb.la $prefix/lib/libb.la 55 $libtool --mode=install cp $srcdir/liba.la $prefix/lib/liba.la \ 56 >$srcdir/stdout 2>$srcdir/stderr || retcode=1 57 cat $srcdir/stdout 58 cat $srcdir/stderr >&2 59done 60 61# Do not error if we do not relink (e.g. static-only systems) 62if $EGREP relinking $srcdir/stderr; then 63 if $EGREP ' -L.*\/new\/lib -lb -L.*\/old\/lib -lcee' $srcdir/stdout; then :; else 64 echo "$0: wrong link order" 1>&2 65 retcode=1 66 fi 67fi 68 69for i in old new; do 70 cat >$srcdir/main_$i.c <<EOF 71extern int a_$i(); 72int main(void) { return a_$i() != 3; } 73EOF 74 75 prefix=`eval echo \\$prefix_$i` 76 $libtool --mode=compile $CC $CFLAGS -c $srcdir/main_$i.c -o $srcdir/main_$i.lo 77 $libtool --mode=link $CC $CFLAGS $LDFLAGS -o $srcdir/main_$i $srcdir/main_$i.lo \ 78 -L$prefix/lib -la || retcode=1 79 if $srcdir/main_$i; then : 80 else 81 echo "$0: cannot execute $srcdir/main_$i" 1>&2 82 if test "X$host" != "X$build"; then 83 echo "This may be ok since you seem to be cross-compiling." 1>&2 84 retcode=77 85 else 86 retcode=1 87 fi 88 fi 89done 90 91rm -rf $top_dir 92exit $retcode 93