From: Ralf Wildenhues Date: Tue, 12 Sep 2006 18:02:32 +0000 (+0000) Subject: * tests/destdir.at: New file. X-Git-Tag: release-2-1b~247 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0aa26264759f22c5532bdff7d07988135193b86d;p=thirdparty%2Flibtool.git * tests/destdir.at: New file. * Makefile.am: Adjust. --- diff --git a/ChangeLog b/ChangeLog index 20e0c57e1..c17f5a8ad 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2006-09-12 Ralf Wildenhues + + * tests/destdir.at: New file. + * Makefile.am: Adjust. + 2006-09-11 Ralf Wildenhues * tests/inherited_flags.at: Drop `${parameter}' for `$parameter' diff --git a/Makefile.am b/Makefile.am index 22ecb15d8..cdc242a89 100644 --- a/Makefile.am +++ b/Makefile.am @@ -404,6 +404,7 @@ TESTSUITE_AT = tests/testsuite.at \ tests/link-order.at \ tests/fail.at \ tests/static.at \ + tests/destdir.at \ tests/old-m4-iface.at \ tests/am-subdir.at \ tests/standalone.at \ diff --git a/tests/destdir.at b/tests/destdir.at new file mode 100644 index 000000000..61a727761 --- /dev/null +++ b/tests/destdir.at @@ -0,0 +1,134 @@ +# Hand crafted tests for GNU Libtool. -*- Autotest -*- +# Copyright 2006 Free Software Foundation, Inc. + +# This program 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, or (at your option) +# any later version. + +# This program 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 this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301, USA. + +# Test various DESTDIR issues. + +AT_BANNER([DESTDIR tests]) + +# Common setup for the next few tests. +m4_pushdef([_LT_DIRSETUP], +[LDFLAGS="$LDFLAGS -no-undefined" +if test -n "$we_are_on_a_safe_system"; then # let's read shorter cmdlines. + DESTDIR=/tmp/dest + prefix=/tmp/inst + rm -rf $DESTDIR $prefix +else + DESTDIR=`pwd`/dest + prefix=`pwd`/inst +fi +libdir=$prefix/lib +bindir=$prefix/bin +: ${mkdir_p="$abs_top_srcdir/libltdl/config/install-sh -d"} +$mkdir_p src $prefix $DESTDIR $DESTDIR$prefix +eval `$LIBTOOL --config | $EGREP '^(FGREP|OBJDUMP)='` +]) + + +AT_SETUP([Simple DESTDIR install]) + +# A program that depends upon a library, both in the same package. +_LT_DIRSETUP +cd src +echo 'int a() { return 0; }' > a.c +$LIBTOOL --mode=compile $CC $CPPFLAGS $CFLAGS -c a.c +$LIBTOOL --mode=link $CC $CFLAGS $LDFLAGS -o liba.la a.lo -rpath $libdir +echo 'extern int a(); int main() { return a(); }' > m.c +$CC $CPPFLAGS $CFLAGS -c m.c +$LIBTOOL --mode=link $CC $CFLAGS $LDFLAGS -o m m.$OBJEXT liba.la +mkdir $DESTDIR$libdir $DESTDIR$bindir +AT_CHECK([$LIBTOOL --mode=install cp liba.la $DESTDIR$libdir/liba.la], + [], [ignore], [ignore]) +AT_CHECK([$LIBTOOL --mode=install cp m $DESTDIR$bindir/m], + [], [ignore], [ignore]) +$LIBTOOL --mode=clean rm -f liba.la m +mv $DESTDIR$libdir $libdir +mv $DESTDIR$bindir $bindir +# We ignore failure on purpose here: we may not be root. +AT_CHECK([$LIBTOOL --mode=finish $libdir], [ignore], [ignore], [ignore]) +LT_AT_EXEC_CHECK([$bindir/m]) + +AT_CLEANUP + + +AT_SETUP([DESTDIR with in-package deplibs]) + +# A program that depends upon a library that depends upon another +# library, all in the same package. Use two deplibs, one in $libdir +# and one in another directory. +_LT_DIRSETUP +cd src +echo 'int a1dep() { return 0; }' > a1dep.c +$LIBTOOL --mode=compile $CC $CPPFLAGS $CFLAGS -c a1dep.c +$LIBTOOL --mode=link $CC $CFLAGS $LDFLAGS -o liba1dep.la a1dep.lo -rpath $libdir +echo 'int a2dep() { return 0; }' > a2dep.c +$LIBTOOL --mode=compile $CC $CPPFLAGS $CFLAGS -c a2dep.c +$LIBTOOL --mode=link $CC $CFLAGS $LDFLAGS -o liba2dep.la a2dep.lo -rpath ${libdir}2 +echo 'extern int a1dep(), a2dep(); int a() { return a1dep() + a2dep(); }' > a.c +$LIBTOOL --mode=compile $CC $CPPFLAGS $CFLAGS -c a.c +$LIBTOOL --mode=link $CC $CFLAGS $LDFLAGS -o liba.la a.lo -rpath $libdir liba1dep.la liba2dep.la +echo 'extern int a(); int main() { return a(); }' > m.c +$CC $CPPFLAGS $CFLAGS -c m.c +$LIBTOOL --mode=link $CC $CFLAGS $LDFLAGS -o m m.$OBJEXT liba.la +mkdir $DESTDIR$libdir $DESTDIR${libdir}2 $DESTDIR$bindir +AT_CHECK([$LIBTOOL --mode=install cp liba1dep.la $DESTDIR$libdir/liba1dep.la], + [], [ignore], [ignore]) +AT_CHECK([$LIBTOOL --mode=install cp liba2dep.la $DESTDIR${libdir}2/liba2dep.la], + [], [ignore], [ignore]) +AT_CHECK([$LIBTOOL --mode=install cp liba.la $DESTDIR$libdir/liba.la], + [], [ignore], [ignore]) +AT_CHECK([$LIBTOOL --mode=install cp m $DESTDIR$bindir/m], + [], [ignore], [ignore]) +$LIBTOOL --mode=clean rm -f liba1dep.la liba2dep.la liba.la m +mv $DESTDIR$libdir $libdir +mv $DESTDIR${libdir}2 ${libdir}2 +mv $DESTDIR$bindir $bindir +# We ignore failure on purpose here: we may not be root. +AT_CHECK([$LIBTOOL --mode=finish $libdir ${libdir}2], [ignore], [ignore], [ignore]) + +# put false libraries in the DESTDIR paths: if the installed program +# refers to them, that is a bug. +mkdir $DESTDIR$libdir $DESTDIR${libdir}2 $DESTDIR$bindir +for lib in a1dep a2dep a; do + case $lib in + a2dep) ldir=${libdir}2;; + *) ldir=$libdir;; + esac + echo "int this_should_not_be_linked_against () { return 0; }" > $lib.c + $LIBTOOL --mode=compile $CC $CPPFLAGS $CFLAGS -c $lib.c + # Note the rpath argument includes $DESTDIR: the installed false libs + # should be functional (i.e., not need `libtool --mode=finish'). + $LIBTOOL --mode=link $CC $CFLAGS $LDFLAGS -o lib$lib.la $lib.lo -rpath $DESTDIR$ldir + $LIBTOOL --mode=install cp lib$lib.la $DESTDIR$ldir/lib$lib.la +done + +LT_AT_EXEC_CHECK([$bindir/m]) + +# TODO: make this more portable: +if test "$OBJDUMP" != false && ($OBJDUMP -p $bindir/m) >/dev/null 2>&1; then + AT_CHECK([$OBJDUMP -p $bindir/m | $EGREP -i "R(UN)?PATH.*$DESTDIR"], [1]) + . $libdir/liba.la + set x $library_names + lname=$2 + if test -n "$lname"; then + AT_CHECK([$OBJDUMP -p $libdir/$lname | $EGREP -i "R(UN)?PATH.*$DESTDIR"], [1]) + fi +fi + +AT_CLEANUP + +m4_popdef([_LT_DIRSETUP])