| # configure-iface.at -- test ltdl configure interface -*- Autotest -*- |
| # |
| # Copyright (C) 2007, 2008 Free Software Foundation, Inc. |
| # Written by Gary V. Vaughan, 2007 |
| # |
| # 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_BANNER([configure interface to libltdl.]) |
| |
| # _LT_AT_LTDL_SETUP |
| # ----------------- |
| m4_pushdef([_LT_AT_LTDL_SETUP], |
| [AT_DATA([main.c], |
| [[#include <ltdl.h> |
| #include <stdio.h> |
| |
| typedef int funcp (void); |
| |
| static int errors = 0; |
| |
| int |
| main (void) |
| { |
| lt_dlhandle handle; |
| |
| LTDL_SET_PRELOADED_SYMBOLS(); |
| |
| if (lt_dlinit () != 0) |
| { |
| fprintf (stderr, "error during initialization: %s\n", lt_dlerror ()); |
| return 1; |
| } |
| |
| handle = lt_dlopenext ("libmodule"); |
| if (!handle) |
| { |
| fprintf (stderr, "can't open libmodule: %s\n", lt_dlerror ()); |
| ++errors; |
| } |
| |
| { |
| funcp *f = (funcp *) lt_dlsym (handle, "f"); |
| |
| if (f) |
| { |
| printf ("%d\n", f ()); |
| } |
| else |
| { |
| fprintf (stderr, "function `f' not found: %s\n", lt_dlerror ()); |
| ++errors; |
| } |
| } |
| |
| if (lt_dlexit () != 0) |
| { |
| fprintf (stderr, "error during exit: %s\n", lt_dlerror ()); |
| ++errors; |
| } |
| |
| return (errors != 0); |
| } |
| ]]) |
| |
| AT_DATA([libmodule.c], |
| [[#ifdef __cplusplus |
| extern "C" { |
| #endif |
| int f (void) { return 5150; } |
| #ifdef __cplusplus |
| } |
| #endif |
| ]]) |
| |
| AT_DATA([expout], |
| [[5150 |
| ]]) |
| ])# _LT_AT_LTDL_SETUP |
| |
| |
| ## -------------------- ## |
| ## Installable libltdl. ## |
| ## -------------------- ## |
| |
| AT_SETUP([installable libltdl]) |
| AT_KEYWORDS([libltdl]) |
| |
| _LT_AT_LTDL_SETUP |
| |
| AT_DATA([configure.ac], |
| [[AC_INIT([installable-ltdl-demo], ]AT_PACKAGE_VERSION[, ]AT_PACKAGE_BUGREPORT[) |
| AC_CONFIG_AUX_DIR([libltdl/config]) |
| AC_CONFIG_MACRO_DIR([libltdl/m4]) |
| AC_CONFIG_HEADERS([config.h:config.hin]) |
| LT_CONFIG_LTDL_DIR([libltdl]) |
| AM_INIT_AUTOMAKE([foreign]) |
| AC_PROG_CC |
| AM_PROG_CC_C_O |
| LT_INIT([dlopen]) |
| LTDL_INIT([installable]) |
| AC_CONFIG_FILES([Makefile]) |
| AC_OUTPUT |
| ]]) |
| |
| AT_DATA([Makefile.am], |
| [[AUTOMAKE_OPTIONS = 1.7 |
| |
| SUBDIRS = libltdl |
| |
| AM_CPPFLAGS = $(LTDLINCL) |
| |
| lib_LTLIBRARIES = libmodule.la |
| libmodule_la_LDFLAGS = -module |
| |
| bin_PROGRAMS = main |
| main_LDFLAGS = -dlopen libmodule.la |
| main_LDADD = $(LIBLTDL) |
| main_DEPENDENCIES = $(LTDLDEPS) libmodule.la |
| ]]) |
| |
| # Install everything! |
| prefix=`pwd`/_inst |
| |
| LT_AT_BOOTSTRAP([--ltdl], [-I libltdl/m4], [], [--add-missing], [], |
| [--with-included-ltdl --prefix=$prefix], [all install]) |
| |
| # TODO: Check that the installed program `main' is linked against our libltdl |
| AT_CHECK([test -f $prefix/lib/libltdl.la]) |
| AT_CHECK([test -f $prefix/include/ltdl.h]) |
| |
| # Check that main is rebuilt if libltdl.la is newer |
| rm -f libltdl/libltdl.la |
| AT_CHECK([$MAKE -q main$EXEEXT || exit 1], [1], [ignore], [ignore]) |
| |
| AT_CLEANUP |
| |
| |
| ## ------------------------------- ## |
| ## Link against installed libltdl. ## |
| ## ------------------------------- ## |
| |
| AT_SETUP([--with-ltdl-include/lib]) |
| AT_KEYWORDS([libltdl]) |
| |
| # Install libltdl |
| prefix=`pwd`/_inst |
| |
| LT_AT_LIBTOOLIZE([--copy --ltdl=ltdl]) |
| |
| (cd ltdl |
| LT_AT_CONFIGURE([--enable-ltdl-install --prefix=$prefix]) |
| LT_AT_MAKE([all install]) |
| ) |
| |
| # Remove build files |
| rm -rf ltdl/ |
| |
| AT_CHECK([test -f $prefix/lib/libltdl.la]) |
| AT_CHECK([test -f $prefix/include/ltdl.h]) |
| |
| _LT_AT_LTDL_SETUP |
| |
| AT_DATA([configure.ac], |
| [[AC_INIT([configure-iface-demo], ]AT_PACKAGE_VERSION[, ]AT_PACKAGE_BUGREPORT[) |
| AC_CONFIG_MACRO_DIR([_inst/aclocal]) |
| AC_CONFIG_HEADERS([config.h:config.hin]) |
| AM_INIT_AUTOMAKE([foreign]) |
| AC_PROG_CC |
| AM_PROG_CC_C_O |
| LT_INIT([dlopen]) |
| LTDL_INIT |
| AC_CONFIG_FILES([Makefile]) |
| AC_OUTPUT |
| ]]) |
| |
| AT_DATA([Makefile.am], |
| [[AUTOMAKE_OPTIONS = 1.7 |
| |
| AM_CPPFLAGS = $(LTDLINCL) |
| |
| lib_LTLIBRARIES = libmodule.la |
| libmodule_la_LDFLAGS = -module |
| |
| bin_PROGRAMS = main |
| main_LDFLAGS = -dlopen libmodule.la |
| main_LDADD = $(LIBLTDL) |
| main_DEPENDENCIES = $(LTDLDEPS) libmodule.la |
| ]]) |
| |
| # We don't use 'libtoolize --ltdl', so that we get an error if the test |
| # tries to build and link against its own ltdl sources: |
| LT_AT_BOOTSTRAP([], [-I _inst/aclocal], [], [--add-missing], [], |
| [--with-ltdl-lib=$prefix/lib --with-ltdl-include=$prefix/include], |
| [all]) |
| |
| ## TODO: portable ldd check for correct libltdl |
| ## Currently, this test doesn't fail if `main' ends up linking against a |
| ## previously installed system libltdl. |
| LT_AT_NOINST_EXEC_CHECK([./main], [-dlopen libmodule.la], [], [expout], []) |
| |
| AT_CLEANUP |
| |
| |
| ## ------------------------------------- ## |
| ## Link against shipped libltdl sources. ## |
| ## ------------------------------------- ## |
| |
| AT_SETUP([--with-included-ltdl]) |
| AT_KEYWORDS([libltdl]) |
| |
| _LT_AT_LTDL_SETUP |
| |
| AT_DATA([configure.ac], |
| [[AC_INIT([configure-iface-demo], ]AT_PACKAGE_VERSION[, ]AT_PACKAGE_BUGREPORT[) |
| AC_CONFIG_AUX_DIR([libltdl/config]) |
| AC_CONFIG_MACRO_DIR([libltdl/m4]) |
| AC_CONFIG_HEADERS([config.h:config.hin]) |
| LT_CONFIG_LTDL_DIR([libltdl]) |
| AM_INIT_AUTOMAKE([foreign]) |
| AC_PROG_CC |
| AM_PROG_CC_C_O |
| LT_INIT([dlopen]) |
| LTDL_INIT |
| AC_CONFIG_FILES([Makefile]) |
| AC_OUTPUT |
| ]]) |
| |
| AT_DATA([Makefile.am], |
| [[AUTOMAKE_OPTIONS = 1.7 |
| |
| SUBDIRS = libltdl |
| |
| AM_CPPFLAGS = $(LTDLINCL) |
| |
| lib_LTLIBRARIES = libmodule.la |
| libmodule_la_LDFLAGS = -module |
| |
| bin_PROGRAMS = main |
| main_LDFLAGS = -dlopen libmodule.la |
| main_LDADD = $(LIBLTDL) |
| main_DEPENDENCIES = $(LTDLDEPS) libmodule.la |
| ]]) |
| |
| LT_AT_BOOTSTRAP([--ltdl], [-I libltdl/m4], [], [--add-missing], [], |
| [--with-included-ltdl], [all]) |
| |
| # --with-included-ltdl should build a convenience lib by default |
| AT_CHECK([test -f libltdl/libltdlc.la]) |
| |
| ## TODO: portable ldd check for correct libltdl |
| ## Currently, this test doesn't fail if `main' ends up linking against a |
| ## previously installed system libltdl. |
| LT_AT_NOINST_EXEC_CHECK([./main], [-dlopen libmodule.la], [], [expout], []) |
| |
| # Check that main is rebuilt if libltdlc.la is newer |
| rm -f libltdl/libltdlc.la |
| AT_CHECK([$MAKE -q main$EXEEXT || exit 1], [1], [ignore], [ignore]) |
| |
| AT_CLEANUP |
| |
| |
| ## -------------------- ## |
| ## Convenience libltdl. ## |
| ## -------------------- ## |
| |
| AT_SETUP([convenience libltdl]) |
| |
| AT_DATA([configure.ac], |
| [[AC_INIT |
| AC_CONFIG_AUX_DIR([libltdl/config]) |
| AC_LIBLTDL_CONVENIENCE |
| AC_LIBTOOL_DLOPEN |
| AC_PROG_LIBTOOL |
| AC_CONFIG_FILES(Makefile) |
| AC_OUTPUT |
| ]]) |
| AT_DATA([Makefile.in], |
| [[LIBLTDL = @LIBLTDL@ |
| print-ltdl: |
| echo $(LIBLTDL) |
| ]]) |
| |
| LT_AT_BOOTSTRAP([--ltdl], [-I libltdl/m4], [ignore], [ignore], [], [], [ignore]) |
| AT_CHECK([$MAKE print-ltdl], [], [stdout], [ignore]) |
| AT_CHECK([grep libltdl/libltdlc.la stdout], [], [ignore]) |
| |
| AT_CLEANUP |
| |
| dnl Be careful not to let the definition leak into other tests |
| m4_popdef([_LT_AT_LTDL_SETUP]) |