From: Jeff Squyres Date: Sat, 31 Jan 2009 15:04:07 +0000 (+0100) Subject: New test for bogus lt_dlopen error message. X-Git-Tag: v2.2.7b~117 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=af91ea10b4af5fbf5ed5b2010295fef61cfdcf97;p=thirdparty%2Flibtool.git New test for bogus lt_dlopen error message. * tests/lt_dlopen.at (lt_dlopen error messages): New file, new test, marked as XFAIL for now. * Makefile.am: Adjust. Report and reproducible test case by Jeff Squyres. Signed-off-by: Ralf Wildenhues --- diff --git a/ChangeLog b/ChangeLog index 53917f498..7fb1de37a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2009-01-31 Jeff Squyres + Ralf Wildenhues + + New test for bogus lt_dlopen error message. + * tests/lt_dlopen.at (lt_dlopen error messages): New file, new + test, marked as XFAIL for now. + * Makefile.am: Adjust. + Report and reproducible test case by Jeff Squyres. + 2009-01-31 Ralf Wildenhues execute mode: do not transform *.lo or *.la arguments. diff --git a/Makefile.am b/Makefile.am index b6b1bfa3f..0a3e69dd1 100644 --- a/Makefile.am +++ b/Makefile.am @@ -477,6 +477,7 @@ TESTSUITE_AT = tests/testsuite.at \ tests/am-subdir.at \ tests/lt_dlexit.at \ tests/lt_dladvise.at \ + tests/lt_dlopen.at \ tests/ltdl-api.at \ tests/need_lib_prefix.at \ tests/standalone.at \ diff --git a/tests/lt_dlopen.at b/tests/lt_dlopen.at new file mode 100644 index 000000000..0aae2f866 --- /dev/null +++ b/tests/lt_dlopen.at @@ -0,0 +1,103 @@ +# lt_dlopen.at -- test libltdl functionality -*- Autotest -*- +# +# Copyright (C) 2009 Free Software Foundation, Inc. +# 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([lt_dlopen error messages]) +AT_KEYWORDS([libltdl]) + +# The bug is not fixed: +AT_XFAIL_IF([:]) + +# This test only works if the system allows undefined symbols. +eval `$LIBTOOL --config | grep '^allow_undefined_flag='` +AT_CHECK([test unsupported != "$allow_undefined_flag" || exit 77]) + +AT_DATA([main.c], +[[#include +#include + +int +main (int argc, char* argv[]) +{ + int err = 0; + lt_dlhandle plugin_handle; + + if (argc < 2) + { + fprintf (stderr, "usage: %s plugin\n", argv[0]); + return 1; + } + + lt_dlinit (); + plugin_handle = lt_dlopenext (argv[1]); + if (NULL != plugin_handle) + { + printf ("plugin opened successfully!\n"); + lt_dlclose (plugin_handle); + } + else + { + printf ("plugin failed to open: %s\n", lt_dlerror()); + err = 1; + } + lt_dlexit (); + return err; +} +]]) + +AT_DATA([good-plugin.c], +[[int foo; +int *i = &foo; +]]) + +AT_DATA([missing-symbol-plugin.c], +[[/* On systems that allow undefined symbols, this will compile, + but the symbol "foo" won't be found at runtime */ +extern int foo; +int *i = &foo; +]]) + +: ${LTDLINCL="-I$abs_top_srcdir/libltdl"} +: ${LIBLTDL="$abs_builddir/../libltdl/libltdlc.la"} + +CPPFLAGS="$LTDLINCL $CPPFLAGS" +inst=`pwd`/inst +libdir=$inst/lib + +AT_CHECK([$CC $CPPFLAGS $CFLAGS -c main.c], [], [ignore], [ignore]) +for file in good-plugin.c missing-symbol-plugin.c; do + AT_CHECK([$LIBTOOL --mode=compile $CC $CPPFLAGS $CFLAGS -c $file], + [], [ignore], [ignore]) +done +AT_CHECK([$LIBTOOL --mode=link $CC $CFLAGS $LDFLAGS -o good-plugin.la -rpath $libdir ]dnl + [-module -avoid-version good-plugin.lo], [], [ignore], [ignore]) +AT_CHECK([$LIBTOOL --mode=link $CC $CFLAGS $LDFLAGS -o missing-symbol-plugin.la -rpath $libdir]dnl + [-module -avoid-version missing-symbol-plugin.lo], [], [ignore], [ignore]) + +AT_CHECK([$LIBTOOL --mode=link $CC $CFLAGS $LDFLAGS -o main$EXEEXT main.$OBJEXT ]dnl + [-dlopen good-plugin.la -dlopen missing-symbol-plugin.la $LIBLTDL], + [], [ignore], [ignore]) + +LT_AT_EXEC_CHECK([./main], [], [ignore], [ignore], [./good-plugin.la]) +LT_AT_EXEC_CHECK([./main], [1], [ignore], [stderr], [./missing-symbol-plugin.la]) +AT_CHECK([grep 'missing symbol' stderr], [], [ignore]) + +AT_CLEANUP