* tests/convenience.at: New. Test convenience archives. * Makefile.am, tests/testsuite.at: Adjust. * tests/testsuite.at: Reorder tests. Suspend AT_TESTED. (PREPARE_TESTS): Define EGREP, host, build, LIBTOOL. (LT_AT_BOOTSTRAP): Fail if autoreconf fails. (LT_AT_EXEC_CHECK): New macro for execution of $build binaries. (LT_AT_TAG): New macro to test tag availability or skip test. * tests/am-subdir.at, tests/duplicate_members.at, tests/inherited_flags.at, tests/link-order.at, tests/stresstest.at, tests/template.at: Adjust. Use LT_AT_TAG, LT_AT_EXEC_CHECK, AT_KEYWORDS. Use compiler/linker flags consistently. * tests/link-order.at: Fix use of AT_DATA, bogus redirection inside AT_CHECK. * tests/stresstest.at: Do not use wildcards/regex in symbol files, they are not portable. Use -no-undefined on win32. Fix to ignore compile/link warnings. Index: tests/testsuite.at =================================================================== RCS file: /cvsroot/libtool/libtool/tests/testsuite.at,v retrieving revision 1.13 diff -u -r1.13 testsuite.at --- tests/testsuite.at 22 Apr 2005 10:10:30 -0000 1.13 +++ tests/testsuite.at 27 Apr 2005 17:52:58 -0000 @@ -20,7 +20,10 @@ m4_divert_push([PREPARE_TESTS])dnl : ${LIBTOOLIZE="${abs_top_builddir}/libtoolize"} -export LIBTOOLIZE +: ${LIBTOOL="${abs_top_builddir}/libtool"} +export LIBTOOLIZE LIBTOOL +eval `$LIBTOOL --config | grep ^EGREP=` +eval `$LIBTOOL --config | $EGREP '(host|build)='` m4_divert_pop([PREPARE_TESTS])dnl # LT_AT_LIBTOOLIZE([ARGS]) @@ -43,16 +46,36 @@ m4_define([LT_AT_BOOTSTRAP], [ test -f ./ltmain.sh || LT_AT_LIBTOOLIZE([--copy]) -test -f ./configure || _lt_pkgvdatadir="$abs_top_srcdir" autoreconf --force --verbose --install +test -f ./configure || _lt_pkgvdatadir="$abs_top_srcdir" autoreconf --force --verbose --install || exit 1 test -f ./configure || exit 1 ./configure ]) + +# LT_AT_EXEC_CHECK(EXECUTABLE, [STATUS = 0], [STDOUT], [STDERR]) +# -------------------------------------------------------------- +m4_define([LT_AT_EXEC_CHECK], +[AT_CHECK([if $1; then :; + elif test "X$host" != "X$build" && \ + { test -x "$1" || test -x "$1"$EXEEXT; } + then (exit 77); fi],[$2],[$3],[$4]) +]) + + +# LT_AT_TAG(TAG) +# -------------- +m4_define([LT_AT_TAG], +[AT_KEYWORDS([$1]) +eval `$LIBTOOL --tag=$1 --config | sed -n '/^CC=/ { s/CC/$1/; p;}'` +AT_CHECK([test -n "[$]$1" || (exit 77)]) +]) + + # We use `dnl' in zillions of places... m4_pattern_allow([^dnl$]) # We exercise these tools. -AT_TESTED([grep autoreconf autom4te automake]) +dnl AT_TESTED([grep autoreconf autom4te automake]) ## ----------- ## ## The suite. ## @@ -60,18 +83,19 @@ AT_INIT -# Torturing subdir-objects builds -m4_include([am-subdir.at]) +# libtoolize tests +m4_include([libtoolize.at]) # Testing func_extract_archives m4_include([duplicate_members.at]) # Test that inherited_linker_flags in the .la actually gets used. m4_include([inherited_flags.at]) -# stress test -m4_include([stresstest.at]) -# C++ templates tests -m4_include([template.at]) -# libtoolize tests -m4_include([libtoolize.at]) +# convenience archives test +m4_include([convenience.at]) # link order test m4_include([link-order.at]) - +# Torturing subdir-objects builds +m4_include([am-subdir.at]) +# C++ templates tests +m4_include([template.at]) +# stress test +m4_include([stresstest.at]) Index: Makefile.am =================================================================== RCS file: /cvsroot/libtool/libtool/Makefile.am,v retrieving revision 1.150 diff -u -r1.150 Makefile.am --- Makefile.am 22 Apr 2005 10:20:46 -0000 1.150 +++ Makefile.am 27 Apr 2005 17:52:58 -0000 @@ -309,6 +309,7 @@ tests/libtoolize.at \ tests/stresstest.at \ tests/link-order.at \ + tests/convenience.at \ tests/template.at EXTRA_DIST += $(TESTSUITE) $(TESTSUITE_AT) tests/package.m4 @@ -319,7 +320,8 @@ LIBS="$(LIBS)" LN_S="$(LN_S)" NM="$(NM)" RANLIB="$(RANLIB)" \ OBJEXT="$(OBJEXT)" EXEEXT="$(EXEEXT)" CONFIG_SHELL="$(SHELL)" \ CXX="$(CXX)" CXXFLAGS="$(CXXFLAGS)" CXXCPP="$(CXXCPP)" \ - F77="$(F77)" FFLAGS="$(FFLAGS)" + F77="$(F77)" FFLAGS="$(FFLAGS)" \ + GCJ="$(GCJ)" GCJFLAGS="$(GCJFLAGS)" check-recursive: $(srcdir)/$(TESTSUITE) Index: tests/am-subdir.at =================================================================== RCS file: /cvsroot/libtool/libtool/tests/am-subdir.at,v retrieving revision 1.4 diff -u -r1.4 am-subdir.at --- tests/am-subdir.at 22 Apr 2005 10:10:30 -0000 1.4 +++ tests/am-subdir.at 27 Apr 2005 17:52:58 -0000 @@ -25,6 +25,7 @@ ## ----------- ## AT_SETUP([C subdir-objects]) +AT_KEYWORDS([autoconf automake]) AT_DATA([[configure.ac]], [[AC_INIT([subdir-demo], ]]AT_PACKAGE_VERSION[[, ]]AT_PACKAGE_BUGREPORT[[) @@ -74,7 +75,7 @@ LT_AT_BOOTSTRAP "${MAKE-make}" -AT_CHECK([subdir/subdemo], 0, expout) +LT_AT_EXEC_CHECK([subdir/subdemo], 0, expout) AT_CLEANUP @@ -84,6 +85,8 @@ ## ------------- ## AT_SETUP([C++ subdir-objects]) +AT_KEYWORDS([autoconf automake]) +LT_AT_TAG([CXX]) AT_DATA([[configure.ac]], [[AC_INIT([subdir-demo], ]]AT_PACKAGE_VERSION[[, ]]AT_PACKAGE_BUGREPORT[[) @@ -157,6 +160,6 @@ LT_AT_BOOTSTRAP "${MAKE-make}" -AT_CHECK([subdir/subdemo], 0, expout) +LT_AT_EXEC_CHECK([subdir/subdemo], 0, expout) AT_CLEANUP Index: tests/duplicate_members.at =================================================================== RCS file: /cvsroot/libtool/libtool/tests/duplicate_members.at,v retrieving revision 1.2 diff -u -r1.2 duplicate_members.at --- tests/duplicate_members.at 22 Apr 2005 10:10:30 -0000 1.2 +++ tests/duplicate_members.at 27 Apr 2005 17:52:58 -0000 @@ -19,18 +19,12 @@ AT_BANNER([Testing libtool functions]) AT_SETUP([duplicate members in archive tests]) - -LIBTOOL=${abs_top_builddir}/libtool - # we don't want to use whole_archive_flag_spec, even if available sed -e 's|^whole_archive_flag_spec=.*|whole_archive_flag_spec=|g' < $LIBTOOL > libtool chmod +x ./libtool LIBTOOL=./libtool -eval `$LIBTOOL --config | grep ^EGREP=` -eval `$LIBTOOL --config | $EGREP '(host|build)='` - AT_DATA(bar.c, [[int bar() { int result=foo1() +foo2() +foo3() +foo4() +foo5() +foo6(); @@ -68,8 +62,6 @@ $LIBTOOL --mode=compile --tag=CC $CC -c $CFLAGS -o main.lo main.c $LIBTOOL --mode=link --tag=CC $CC $CFLAGS $LDFLAGS -o main main.lo ./libbar.la -AT_CHECK([./main],[0],[ignore],[ignore],[AT_CHECK(if - ((test "X$host" != "X$build") && - ( test -x ./main)); then exit 77; fi)]) +LT_AT_EXEC_CHECK([./main],[0],[ignore],[ignore]) AT_CLEANUP Index: tests/inherited_flags.at =================================================================== RCS file: /cvsroot/libtool/libtool/tests/inherited_flags.at,v retrieving revision 1.2 diff -u -r1.2 inherited_flags.at --- tests/inherited_flags.at 22 Apr 2005 10:10:30 -0000 1.2 +++ tests/inherited_flags.at 27 Apr 2005 17:52:58 -0000 @@ -19,8 +19,6 @@ AT_SETUP([inherited_linker_flags]) -: ${LIBTOOL=$abs_top_builddir/libtool} - AT_DATA([foo.c], [ int foo() { return 1;} @@ -41,14 +39,12 @@ int main() { return 0;} ]) -eval `$LIBTOOL --config | grep ^CC` - -${LIBTOOL} --mode=compile --tag=CC $CC -c -o foo.lo foo.c -${LIBTOOL} --mode=compile --tag=CC $CC -c -o bar.lo bar.c -${LIBTOOL} --mode=compile --tag=CC $CC -c -o baz.lo baz.c -${LIBTOOL} --mode=compile --tag=CC $CC -c -o main.lo main.c -${LIBTOOL} --mode=link --tag=CC $CC -o libfoo.la foo.lo -rpath /usr/local/lib -${LIBTOOL} --mode=link --tag=CC $CC -o libbar.la bar.lo -rpath /usr/local/lib +${LIBTOOL} --mode=compile --tag=CC $CC $CFLAGS -c -o foo.lo foo.c +${LIBTOOL} --mode=compile --tag=CC $CC $CFLAGS -c -o bar.lo bar.c +${LIBTOOL} --mode=compile --tag=CC $CC $CFLAGS -c -o baz.lo baz.c +${LIBTOOL} --mode=compile --tag=CC $CC $CFLAGS -c -o main.lo main.c +${LIBTOOL} --mode=link --tag=CC $CC $CFLAGS $LDFLAGS -o libfoo.la foo.lo -rpath /usr/local/lib +${LIBTOOL} --mode=link --tag=CC $CC $CFLAGS $LDFLAGS -o libbar.la bar.lo -rpath /usr/local/lib mv libfoo.la libfoo.la.bak @@ -59,7 +55,7 @@ sed -e 's/^inherited_linker_flags.*/inherited_linker_flags=-llt_unlikely_existing_lib/g' < libbar.la.bak > libbar.la rm libbar.la.bak -AT_CHECK([${LIBTOOL} --mode=link --tag=CC $CC -o libbaz.la baz.lo -rpath /usr/local/lib ./libfoo.la ./libbar.la | grep 'llt_[[ui]]nlikely_existing_lib.*llt_[[ui]]nlikely_existing_lib'],[0],[ignore],[ignore]) -AT_CHECK([${LIBTOOL} --mode=link --tag=CC $CC -o main main.lo -rpath /usr/local/lib ./libfoo.la ./libbar.la | grep 'llt_[[ui]]nlikely_existing_lib.*llt_[[ui]]nlikely_existing_lib'],[0],[ignore],[ignore]) +AT_CHECK([${LIBTOOL} --mode=link --tag=CC $CC $CFLAGS $LDFLAGS -o libbaz.la baz.lo -rpath /usr/local/lib ./libfoo.la ./libbar.la | grep 'llt_[[ui]]nlikely_existing_lib.*llt_[[ui]]nlikely_existing_lib'],[0],[ignore],[ignore]) +AT_CHECK([${LIBTOOL} --mode=link --tag=CC $CC $CFLAGS $LDFLAGS -o main main.lo -rpath /usr/local/lib ./libfoo.la ./libbar.la | grep 'llt_[[ui]]nlikely_existing_lib.*llt_[[ui]]nlikely_existing_lib'],[0],[ignore],[ignore]) AT_CLEANUP Index: tests/link-order.at =================================================================== RCS file: /cvsroot/libtool/libtool/tests/link-order.at,v retrieving revision 1.2 diff -u -r1.2 link-order.at --- tests/link-order.at 22 Apr 2005 10:10:30 -0000 1.2 +++ tests/link-order.at 27 Apr 2005 17:52:58 -0000 @@ -18,10 +18,7 @@ # link-order.test - make sure that library linking order matches -AT_BANNER([Libtool link order test.]) AT_SETUP([Link order test.]) -: ${LIBTOOL=${abs_top_builddir}/libtool} -: ${EGREP='grep -E'} eval `$LIBTOOL --config | grep ECHO=` prefix_old=`pwd`/old @@ -40,16 +37,16 @@ rm -rf src mkdir src - AT_DATA(src/a_$i.c, -[[extern int c; + cat >src/a_$i.c <src/b_$i.c <mylog 2>&1; - if $EGREP relinking mylog; then - $EGREP ' -L.*\/new\/lib -lb -L.*\/old\/lib -lcee' mylog - else :; - fi], [0], [ignore], [ignore], [echo "wrong link order"]) - +AT_CHECK([if $EGREP relinking stderr; then + $EGREP ' -L.*\/new\/lib -lb -L.*\/old\/lib -lcee' stdout + else :; fi], [0], [ignore], [], [echo "wrong link order"]) for i in old new; do - AT_DATA(src/main_$i.c, -[[extern int a_$i(); + cat >src/main_$i.c < a.c +echo 'int b(void) { return 2; }' > b.c +echo 'int c(void) { return 3; }' > c.c +AT_DATA(main.c, +[[extern int a(void), b(void), c(void); +int main(void) { return a() + b() + c() != 6; } +]]) + +$LIBTOOL --mode=compile $CC $CFLAGS -c a.c +$LIBTOOL --mode=compile $CC $CFLAGS -c b.c +$LIBTOOL --mode=compile $CC $CFLAGS -c c.c +$LIBTOOL --mode=compile $CC $CFLAGS -c main.c +$LIBTOOL --mode=link $CC $CFLAGS $LDFLAGS -o liba.la a.lo +$LIBTOOL --mode=link $CC $CFLAGS $LDFLAGS -o libb.la b.lo +$LIBTOOL --mode=link $CC $CFLAGS $LDFLAGS -o libcee.la c.lo liba.la libb.la -rpath /notexist +AT_CHECK([$LIBTOOL --mode=link $CC $CFLAGS $LDFLAGS -static -o main_static main.lo libcee.la], + [0],[ignore],[ignore]) +AT_CHECK([$LIBTOOL --mode=link $CC $CFLAGS $LDFLAGS -o main main.lo libcee.la], + [0],[ignore],[ignore]) +LT_AT_EXEC_CHECK([./main_static]) +LT_AT_EXEC_CHECK([./main]) +AT_CLEANUP + + +AT_SETUP([C++ convenience archives]) +LT_AT_TAG([CXX]) + +echo 'int a(void) { return 1; }' > a.cc +echo 'int b(void) { return 2; }' > b.cc +echo 'int c(void) { return 3; }' > c.cc +AT_DATA(main.cc, +[[extern int a(void), b(void), c(void); +int main(void) { return a() + b() + c() != 6; } +]]) + +$LIBTOOL --tag=CXX --mode=compile $CXX $CXXFLAGS -c a.cc +$LIBTOOL --tag=CXX --mode=compile $CXX $CXXFLAGS -c b.cc +$LIBTOOL --tag=CXX --mode=compile $CXX $CXXFLAGS -c c.cc +$LIBTOOL --tag=CXX --mode=compile $CXX $CXXFLAGS -c main.cc +$LIBTOOL --tag=CXX --mode=link $CXX $CXXFLAGS $LDFLAGS -o liba.la a.lo +$LIBTOOL --tag=CXX --mode=link $CXX $CXXFLAGS $LDFLAGS -o libb.la b.lo +$LIBTOOL --tag=CXX --mode=link $CXX $CXXFLAGS $LDFLAGS -o libcee.la c.lo liba.la libb.la -rpath /notexist +AT_CHECK([$LIBTOOL --tag=CXX --mode=link $CXX $CXXFLAGS $LDFLAGS -static -o main_static main.lo libcee.la], + [0],[ignore],[ignore]) +AT_CHECK([$LIBTOOL --tag=CXX --mode=link $CXX $CXXFLAGS $LDFLAGS -o main main.lo libcee.la], + [0],[ignore],[ignore]) +LT_AT_EXEC_CHECK([./main_static]) +LT_AT_EXEC_CHECK([./main]) +AT_CLEANUP + + +AT_SETUP([F77 convenience archives]) +LT_AT_TAG([F77]) + +AT_DATA([a.f], +[[ subroutine a + return + end +]]) +AT_DATA([b.f], +[[ subroutine b + return + end +]]) +AT_DATA([c.f], +[[ subroutine c + return + end +]]) +AT_DATA(main.f, +[[ program main + call a + call b + call c + end +]]) + +$LIBTOOL --tag=F77 --mode=compile $F77 $FFLAGS -c a.f +$LIBTOOL --tag=F77 --mode=compile $F77 $FFLAGS -c b.f +$LIBTOOL --tag=F77 --mode=compile $F77 $FFLAGS -c c.f +$LIBTOOL --tag=F77 --mode=compile $F77 $FFLAGS -c main.f +$LIBTOOL --tag=F77 --mode=link $F77 $FFLAGS $LDFLAGS -o liba.la a.lo +$LIBTOOL --tag=F77 --mode=link $F77 $FFLAGS $LDFLAGS -o libb.la b.lo +$LIBTOOL --tag=F77 --mode=link $F77 $FFLAGS $LDFLAGS -o libcee.la c.lo liba.la libb.la -rpath /notexist +AT_CHECK([$LIBTOOL --tag=F77 --mode=link $F77 $FFLAGS $LDFLAGS -static -o main_static main.lo libcee.la], + [0],[ignore],[ignore]) +AT_CHECK([$LIBTOOL --tag=F77 --mode=link $F77 $FFLAGS $LDFLAGS -o main main.lo libcee.la], + [0],[ignore],[ignore]) +LT_AT_EXEC_CHECK([./main_static]) +LT_AT_EXEC_CHECK([./main]) +AT_CLEANUP + + +AT_SETUP([Java convenience archives]) +LT_AT_TAG([GCJ]) + +AT_DATA([A.java], +[[public class A { + private int a; + public void A () { a = 0; } +}; +]]) +AT_DATA([B.java], +[[public class B { + private int b; + public void B () { b = 0; } +}; +]]) +AT_DATA([C.java], +[[public class C { + private int c; + public void C () { c = 0; } +}; +]]) +AT_DATA(foo.java, +[[public class foo { + public static void main(String[] argv) { + A a = new A(); B b = new B(); C c = new C(); + } +} +]]) + +$LIBTOOL --tag=GCJ --mode=compile $GCJ $GCJFLAGS -c A.java +$LIBTOOL --tag=GCJ --mode=compile $GCJ $GCJFLAGS -c B.java +$LIBTOOL --tag=GCJ --mode=compile $GCJ $GCJFLAGS -c C.java +$LIBTOOL --tag=GCJ --mode=compile $GCJ $GCJFLAGS -c foo.java +$LIBTOOL --tag=GCJ --mode=link $GCJ $GCJFLAGS $LDFLAGS -o liba.la A.lo +$LIBTOOL --tag=GCJ --mode=link $GCJ $GCJFLAGS $LDFLAGS -o libb.la B.lo +$LIBTOOL --tag=GCJ --mode=link $GCJ $GCJFLAGS $LDFLAGS -o libcee.la C.lo liba.la libb.la -rpath /notexist +AT_CHECK([$LIBTOOL --tag=GCJ --mode=link $GCJ $GCJFLAGS $LDFLAGS -static --main=foo -o main_static foo.lo libcee.la], + [0],[ignore],[ignore]) +AT_CHECK([$LIBTOOL --tag=GCJ --mode=link $GCJ $GCJFLAGS $LDFLAGS --main=foo -o main foo.lo libcee.la], + [0],[ignore],[ignore]) +LT_AT_EXEC_CHECK([./main_static]) +LT_AT_EXEC_CHECK([./main]) +AT_CLEANUP