| # duplicate_deps.at -- preserve duplicate convenience deps -*- Autotest -*- |
| |
| # Copyright (C) 2006, 2007 Free Software Foundation, Inc. |
| # Written by Ralf Wildenhues, 2006 |
| $ |
| # This file is part of GNU Libtool. |
| # |
| # GNU Libtool 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 of |
| # the License, or (at your option) any later version. |
| # |
| # GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy |
| # can be downloaded from http://www.gnu.org/licenses/gpl.html, |
| # or obtained by writing to the Free Software Foundation, Inc., |
| # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
| #### |
| |
| AT_SETUP([preserve duplicate convenience deps]) |
| AT_KEYWORDS([libtool]) |
| |
| # --preserve-dup-deps should work for convenience archives. |
| |
| # Create a circular dependency of liba and libb: |
| # a1 pulls in b1, that pulls in a2. |
| cat >a1.c <<\EOF |
| extern int b1 (); |
| int a1 () { return b1 (); } |
| EOF |
| cat >a2.c <<\EOF |
| int a2 () { return 0; } |
| EOF |
| cat >b1.c <<\EOF |
| extern int a2 (); |
| int b1 () { return a2 (); } |
| EOF |
| cat >main.c <<\EOF |
| extern int a1 (); |
| int main () { return a1 (); } |
| EOF |
| |
| for file in a1.c a2.c b1.c; do |
| $LIBTOOL --mode=compile $CC $CPPFLAGS $CFLAGS -c $file |
| done |
| $CC $CPPFLAGS $CFLAGS -c main.c |
| $LIBTOOL --mode=link --tag=CC $CC $CFLAGS $LDFLAGS -o liba.la a1.lo a2.lo |
| |
| # This could be worked around by adding liba.la to libb.la |
| # (in that case all objects from liba would be merged into |
| # libb.a as well, possibly renamed.) |
| $LIBTOOL --mode=link --tag=CC $CC $CFLAGS $LDFLAGS -o libb.la b1.lo liba.la |
| AT_CHECK([$LIBTOOL --mode=link --tag=CC \ |
| $CC $CFLAGS $LDFLAGS -o main main.$OBJEXT liba.la libb.la], |
| [0], [ignore], [ignore]) |
| LT_AT_EXEC_CHECK([./main]) |
| |
| # Forgo the workaround and create a true circular dependency. |
| $LIBTOOL --mode=link --tag=CC $CC $CFLAGS $LDFLAGS -o libb.la b1.lo |
| # Some systems find all symbols anyway; skip this test on such systems. |
| AT_CHECK([$LIBTOOL --mode=link --tag=CC \ |
| $CC $CFLAGS $LDFLAGS -o main main.$OBJEXT liba.la libb.la liba.la \ |
| && exit 77], |
| [1], [ignore], [ignore]) |
| # Other systems need special treatment, which currently fails. |
| AT_XFAIL_IF([:]) |
| AT_CHECK([$LIBTOOL --mode=link --preserve-dup-deps --tag=CC \ |
| $CC $CFLAGS $LDFLAGS -o main main.$OBJEXT liba.la libb.la liba.la], |
| [0], [ignore], [ignore]) |
| |
| AT_CLEANUP |