# Process with autom4te to create an -*- Autotest -*- test suite. # Test suite for GNU Libtool. # Copyright 2004, 2005 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. m4_divert_push([PREPARE_TESTS])dnl : ${ACLOCAL=aclocal} : ${AUTOHEADER=autoheader} : ${AUTOCONF=autoconf} : ${AUTOMAKE=automake} : ${AUTORECONF=autoreconf} export ACLOCAL AUTOHEADER AUTOCONF AUTOMAKE AUTORECONF eval `$LIBTOOL --config | grep ^EGREP=` eval `$LIBTOOL --config | $EGREP '^(host|host_os|host_alias|build|ECHO)='` configure_options= if test -n "$host_alias"; then configure_options="--host $host_alias" fi if (unset FOO) >/dev/null 2>&1; then unset=unset else unset=false fi m4_divert_pop([PREPARE_TESTS])dnl # LT_AT_LIBTOOLIZE([ARGS]) # ------------------------ m4_define([LT_AT_LIBTOOLIZE], [$LIBTOOLIZE $1 ]) # LT_AT_CHECK_LIBTOOLIZE(ARGS, [EXIT-STATUS = 0], [STDOUT = `'], [STDERR = `']) # ----------------------------------------------------------------------------- m4_define([LT_AT_CHECK_LIBTOOLIZE], [AT_CHECK([LT_AT_LIBTOOLIZE([$1])], [$2], [$3], [$4]) ]) # LT_AT_ACLOCAL([OPTIONS]) # -------------------------- m4_define([LT_AT_ACLOCAL], [AT_CHECK([$ACLOCAL $1], [0], [ignore], [ignore]) ]) # LT_AT_AUTOCONF([OPTIONS]) # -------------------------- m4_define([LT_AT_AUTOCONF], [AT_CHECK([$AUTOCONF $1], [0], [ignore], [ignore]) ]) # LT_AT_AUTOMAKE([OPTIONS]) # -------------------------- m4_define([LT_AT_AUTOMAKE], [AT_CHECK([$AUTOMAKE $1], [0], [ignore], [ignore]) ]) # LT_AT_AUTOHEADER([OPTIONS]) # --------------------------- m4_define([LT_AT_AUTOHEADER], [AT_CHECK([$AUTOHEADER $1], [0], [ignore], [ignore]) ]) # LT_AT_AUTORECONF([OPTIONS]) # -------------------------- m4_define([LT_AT_AUTORECONF], [AT_CHECK([$AUTORECONF $1], [0], [ignore], [ignore]) ]) # LT_AT_CONFIGURE([OPTIONS]) # -------------------------- m4_define([LT_AT_CONFIGURE], [AT_CHECK([./configure $configure_options $1], [0], [ignore], [ignore]) ]) # LT_AT_MAKE([TGTS], [VARS]) # -------------------------- m4_define([LT_AT_MAKE], [( $unset LIBTOOL LIBTOOLIZE AT_CHECK([$2 $MAKE -e $1], [0], [ignore], [ignore]) ) ]) # LT_AT_BOOTSTRAP([LIBTOOLIZE-ARGS], [ACLOCAL-ARGS], [AUTOHEADER-ARGS], # [AUTOMAKE-ARGS], [AUTOCONF-ARGS], [CONFIGURE-ARGS], [MAKE-ARGS]) # ---------------------------------------------------------------------- m4_define([LT_AT_BOOTSTRAP], [m4_if([$1], [ignore], [], [LT_AT_LIBTOOLIZE([$1])]) m4_if([$2], [ignore], [], [LT_AT_ACLOCAL([$2])]) m4_if([$3], [ignore], [], [LT_AT_AUTOHEADER([$3])]) m4_if([$4], [ignore], [], [LT_AT_AUTOMAKE([$4])]) m4_if([$5], [ignore], [], [LT_AT_AUTOCONF([$5])]) m4_if([$6], [ignore], [], [LT_AT_CONFIGURE([$6])]) m4_if([$7], [ignore], [], [LT_AT_MAKE([$7])]) ]) # LT_AT_EXEC_CHECK(EXECUTABLE, [STATUS = 0], [STDOUT], [STDERR]) # -------------------------------------------------------------- m4_define([LT_AT_EXEC_CHECK], [AT_CHECK([$1; lt_status=$?; if test $lt_status -eq 0; then :; elif test "X$host" != "X$build" && \ { test -x "$1" || test -x "$1"$EXEEXT; } then (exit 77); else (exit $lt_status); 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)]) ]) ## ------------------------------- ## ## Files for a small ltdl project. ## ## ------------------------------- ## # _LTDL_PROJECT_FILES([LTDL-DIR]) # ------------------------------- # LTDL-DIR is needed to generate a correct Makefile. If the argument # is omitted, then no Makefile is created. m4_define([_LTDL_PROJECT_FILES], [AT_DATA([module.c], [[const char * hello (void) { return "Hello!"; } ]]) AT_DATA([main.c], [[#include #include "ltdl.h" int main (int argc, char **argv) { lt_dlhandle module; const char *(*func) (void) = 0; int status = 1; LTDL_SET_PRELOADED_SYMBOLS(); if (lt_dlinit() != 0) { fprintf (stderr, "error during initialisation: %s\n", lt_dlerror()); return 1; } module = lt_dlopen("module.la"); if (!module) { fprintf (stderr, "error dlopening module.la: %s\n", lt_dlerror()); goto finish; } func = (const char *(*)(void)) lt_dlsym (module, "hello"); if (!func) { fprintf (stderr, "error fetching func: %s\n", lt_dlerror()); goto finish; } printf ("%s\n", (*func) ()); status = 0; finish: if (lt_dlexit() != 0) { fprintf (stderr, "error during finalisation: %s\n", lt_dlerror()); status = 1; } return status; } ]]) m4_pushdef([_ARG_DIR], m4_bpatsubst([$1], [/*$])) m4_ifval([$1], [AT_DATA([Makefile], [[top_builddir = . LIBTOOL = ./]_ARG_DIR[/libtool INCLUDES = -I./]_ARG_DIR[ MODFLAGS = -module -avoid-version -no-undefined LTCOMPILE = $(LIBTOOL) --tag=CC $(LIBTOOLFLAGS) --mode=compile \ $(CC) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) LTLINK = $(LIBTOOL) --tag=CC $(LIBTOOLFLAGS) --mode=link \ $(CC) $(CFLAGS) $(LDFLAGS) TARGETS = ]_ARG_DIR[/libltdlc.la module.la ltdldemo$(EXEEXT) all: $(TARGETS) $(LIBTOOL) ]_ARG_DIR[/libltdlc.la: ]_ARG_DIR[/Makefile cd ]_ARG_DIR[ && $(MAKE) ]_ARG_DIR[/Makefile: cd ]_ARG_DIR[ && ./configure $(CONFIGURE_OPTIONS) ltdldemo$(EXEEXT): $(LIBTOOL) module.la ]_ARG_DIR[/libltdlc.la main.lo $(LTLINK) -o ltdldemo main.lo -dlopen module.la ./]_ARG_DIR[/libltdlc.la main.lo: $(LIBTOOL) main.c $(LTCOMPILE) -c main.c module.la: $(LIBTOOL) module.lo $(LTLINK) -o module.la module.lo $(MODFLAGS) -rpath /dev/null module.lo: $(LIBTOOL) module.c $(LTCOMPILE) -c module.c ]])]) m4_popdef([_ARG_DIR]) ])# _LTDL_PROJECT_FILES # We use `dnl' in zillions of places... m4_pattern_allow([^dnl$]) # We exercise these tools. dnl AT_TESTED([grep autoreconf autom4te automake]) ## ----------- ## ## The suite. ## ## ----------- ## AT_INIT # 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]) # convenience archives test m4_include([convenience.at]) # link order test m4_include([link-order.at]) # Ensure our continued support for old interfaces. m4_include([old-m4-iface.at]) # Torturing subdir-objects builds m4_include([am-subdir.at]) # standalone libltdl compilation m4_include([standalone.at]) # subproject libltdl compilation m4_include([subproject.at]) # nonrecursive libltdl compilation m4_include([nonrecursive.at]) # recursive libltdl compilation m4_include([recursive.at]) # C++ templates tests m4_include([template.at]) # Behaviour of LT_OUTPUT m4_include([early-libtool.at]) # identical deplibs m4_include([deplibs-ident.at]) # stress test m4_include([stresstest.at])