| # Process with autom4te to create an -*- Autotest -*- test suite. | |
| # | |
| # Copyright (C) 2004, 2005, 2006, 2007, 2008 Free Software | |
| # Foundation, Inc. | |
| # Written by Gary V. Vaughan, 2004 | |
| # | |
| # 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. | |
| #### | |
| m4_divert_push([PREPARE_TESTS])dnl | |
| : ${tst_dist=dist} | |
| : ${ACLOCAL=aclocal} | |
| : ${AUTOHEADER=autoheader} | |
| : ${AUTOCONF=autoconf} | |
| : ${AUTOMAKE=automake} | |
| : ${AUTORECONF=autoreconf} | |
| for tool in ACLOCAL AUTOHEADER AUTOCONF AUTOMAKE AUTORECONF; do | |
| if eval \$$tool --version >/dev/null 2>&1; then :; else eval $tool=no; fi | |
| done | |
| export ACLOCAL AUTOHEADER AUTOCONF AUTOMAKE AUTORECONF | |
| eval `$LIBTOOL --config | grep '^EGREP='` | |
| eval `$LIBTOOL --config | $EGREP '^(host|host_os|host_alias|build|build_alias|ECHO)='` | |
| configure_options=--prefix=/nonexistent | |
| if test -n "$host_alias"; then | |
| configure_options="$configure_options --host $host_alias" | |
| fi | |
| if test -n "$build_alias"; then | |
| configure_options="$configure_options --build $build_alias" | |
| fi | |
| if (FOO=bar; unset FOO) >/dev/null 2>&1; then | |
| unset=unset | |
| else | |
| unset=false | |
| fi | |
| : ${mkdir_p="$abs_top_srcdir/libltdl/config/install-sh -d"} | |
| # On AIX, shared libraries remain loaded in memory after use if they | |
| # are world-readable, until root issues slibclean. On NFS, this causes | |
| # a testsuite rerun to fail to clean up test group directories. Avoid | |
| # this with a suitable umask. Do not do this on other systems, for | |
| # example HP-UX suffers unless shared libraries are mode 555. | |
| case $host_os in | |
| aix*) umask o-rwx ;; | |
| esac | |
| m4_divert_pop([PREPARE_TESTS])dnl | |
| # LT_AT_LIBTOOLIZE([ARGS]) | |
| # ------------------------ | |
| m4_define([LT_AT_LIBTOOLIZE], | |
| [$LIBTOOLIZE $1 | |
| AT_KEYWORDS([libtoolize]) | |
| ]) | |
| # _LIBTOOLIZE_TRANSFORM(FILE) | |
| # --------------------------- | |
| # Fix the expected output of installed libtoolize in presence of --program-*. | |
| m4_define([_LIBTOOLIZE_TRANSFORM], | |
| [lt_name=`$ECHO "$LIBTOOLIZE" | sed "s,^.*/,,"` | |
| sed "s/libtoolize/$lt_name/g | |
| s|/usr/local/share/aclocal/|${tst_aclocaldir-$abs_top_srcdir/libltdl/m4}/|" < $1 > $1.t | |
| mv -f $1.t $1 | |
| ])dnl | |
| # LT_AT_CHECK_LIBTOOLIZE(ARGS, [EXIT-STATUS = 0], [STDOUT = `'], [STDERR = `']) | |
| # ----------------------------------------------------------------------------- | |
| m4_define([LT_AT_CHECK_LIBTOOLIZE], | |
| [m4_if([$3], [expout], [_LIBTOOLIZE_TRANSFORM([$3])])dnl | |
| m4_if([$4], [experr], [_LIBTOOLIZE_TRANSFORM([$4])])dnl | |
| 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]) | |
| AT_XFAIL_IF([test "$ACLOCAL" = no]) | |
| AT_KEYWORDS([automake]) | |
| ]) | |
| # LT_AT_AUTOCONF([OPTIONS]) | |
| # -------------------------- | |
| m4_define([LT_AT_AUTOCONF], | |
| [AT_CHECK([$AUTOCONF $1], [0], [ignore], [ignore]) | |
| AT_XFAIL_IF([test "$AUTOCONF" = no]) | |
| AT_KEYWORDS([autoconf]) | |
| ]) | |
| # LT_AT_AUTOMAKE([OPTIONS]) | |
| # -------------------------- | |
| m4_define([LT_AT_AUTOMAKE], | |
| [AT_CHECK([$AUTOMAKE $1], [0], [ignore], [stderr], | |
| [AT_CHECK([grep 'require .*but have' stderr && (exit 77)], [1])]) | |
| AT_XFAIL_IF([test "$AUTOMAKE" = no]) | |
| AT_KEYWORDS([automake]) | |
| ]) | |
| # LT_AT_AUTOHEADER([OPTIONS]) | |
| # --------------------------- | |
| m4_define([LT_AT_AUTOHEADER], | |
| [AT_CHECK([$AUTOHEADER $1], [0], [ignore], [ignore]) | |
| AT_XFAIL_IF([test "$AUTOHEADER" = no]) | |
| AT_KEYWORDS([autoconf]) | |
| ]) | |
| # LT_AT_AUTORECONF([OPTIONS]) | |
| # -------------------------- | |
| m4_define([LT_AT_AUTORECONF], | |
| [AT_CHECK([$AUTORECONF $1], [0], [ignore], [stderr], | |
| [AT_CHECK([grep 'require .*but have' stderr && (exit 77)], [1])]) | |
| AT_XFAIL_IF( | |
| [case ,$AUTORECONF,$AUTOCONF,$AUTOHEADER,$ACLOCAL,$AUTOMAKE, in *,no,*) :;; *) false;; esac]) | |
| AT_KEYWORDS([autoconf automake]) | |
| ]) | |
| # LT_AT_CONFIGURE([OPTIONS]) | |
| # -------------------------- | |
| m4_define([LT_AT_CONFIGURE], | |
| [( SHELL=${CONFIG_SHELL-/bin/sh} | |
| AT_CHECK([CONFIG_SHELL=$SHELL $SHELL ./configure $configure_options $1], | |
| [0], [ignore], [ignore]) | |
| ) | |
| ]) | |
| # LT_AT_MAKE([TGTS], [VARS]) | |
| # -------------------------- | |
| m4_define([LT_AT_MAKE], | |
| [( $unset LIBTOOL LIBTOOLIZE | |
| for target in m4_default([$1], [all]) | |
| do | |
| AT_CHECK([$MAKE $target $2], [0], [ignore], [ignore]) | |
| done ) | |
| ]) | |
| # 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_ESCAPE(ARG) | |
| # -------------- | |
| # Escape command for output (expand only parameters). | |
| m4_define([LT_ESCAPE], | |
| [m4_bpatsubst([$1], | |
| m4_dquote(m4_default([$2], [\"`])), | |
| [\\\&])]) | |
| # LT_AT_CHECK | |
| # ----------- | |
| # Wrapper around AT_CHECK that outputs the command first, with | |
| # parameters expanded. | |
| m4_define([LT_AT_CHECK], | |
| [echo "LT_ESCAPE([$1])"; AT_CHECK($@)]) | |
| # _LT_AT_TRANSLATE_TEXT_OUTPUT(FILE) | |
| # ---------------------------------- | |
| # Ensure correct line ending for expected output of host executables. | |
| m4_define([_LT_AT_TRANSLATE_TEXT_OUTPUT], | |
| [case $host_os in mingw*) | |
| while read -r l; do printf "%s\r\n" "$l"; done < $1 > $1.t | |
| mv -f $1.t $1 ;; | |
| esac]) | |
| # LT_AT_EXEC_CHECK(EXECUTABLE, [STATUS = 0], [STDOUT], [STDERR]) | |
| # -------------------------------------------------------------- | |
| m4_define([LT_AT_EXEC_CHECK], | |
| [m4_if([$3], [expout], [_LT_AT_TRANSLATE_TEXT_OUTPUT([$3])]) | |
| m4_if([$4], [experr], [_LT_AT_TRANSLATE_TEXT_OUTPUT([$4])]) | |
| 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_NOINST_EXEC_CHECK(EXECUTABLE, [NOINST-MODULES], | |
| # [STATUS = 0], [STDOUT], [STDERR]) | |
| # --------------------------------------------------------- | |
| m4_define([LT_AT_NOINST_EXEC_CHECK], | |
| [m4_if([$4], [expout], [_LT_AT_TRANSLATE_TEXT_OUTPUT([$4])]) | |
| m4_if([$5], [experr], [_LT_AT_TRANSLATE_TEXT_OUTPUT([$5])]) | |
| AT_CHECK([$LIBTOOL --mode=execute $2 $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],[$3],[$4],[$5]) | |
| ]) | |
| # LT_AT_TAG(TAG) | |
| # -------------- | |
| m4_define([LT_AT_TAG], | |
| [AT_KEYWORDS([$1]) | |
| AT_CHECK([{ test -n "[$]$1" && test "X[$]$1" != Xno; } || (exit 77)]) | |
| m4_if([$1], [CXX], | |
| [AT_CHECK([test "X$CXX" != Xg++ || (g++ -v >/dev/null 2>&1) || (exit 77)])]) | |
| ]) | |
| # LT_AT_MVDIR(SRC, DEST) | |
| # ---------------------- | |
| # Move contents of a directory recursively. | |
| # Avoid `mv DIR ...' due to issues with non-deletable shared libraries | |
| # on AIX on NFS mounts. We cannot use slibclean as non-superuser. | |
| m4_define([LT_AT_MVDIR], | |
| [$mkdir_p $2 | |
| (cd $1 && find . -type d) | (cd $2 && xargs $mkdir_p) | |
| for file in `cd $1 && find . -type f -print -o -type l -print` | |
| do | |
| mv $1/$file $2/$file | |
| done | |
| rm -rf $1 | |
| ]) | |
| ## ------------------------------- ## | |
| ## 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], | |
| [[#ifdef __cplusplus | |
| extern "C" | |
| #endif | |
| const char * | |
| hello (void) | |
| { | |
| return "Hello!"; | |
| } | |
| ]]) | |
| AT_DATA([main.c], | |
| [[#include <stdio.h> | |
| #include "ltdl.h" | |
| int | |
| main () | |
| { | |
| 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 | |
| MAKE='$(MAKE)'; test -n "$$MAKE" || MAKE=make; \ | |
| cd ]_ARG_DIR[ && $$MAKE CC="$(CC)" LIBTOOLFLAGS="$(LIBTOOLFLAGS)" \ | |
| CPPFLAGS="$(CPPFLAGS)" CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" \ | |
| CONFIGURE_OPTIONS="$(CONFIGURE_OPTIONS)" | |
| ]_ARG_DIR[/Makefile: | |
| cd ]_ARG_DIR[ && CONFIG_SHELL="$(SHELL)" $(SHELL) ./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 | |
| ]]) | |
| cat >> Makefile <<EOF | |
| SHELL = $SHELL | |
| EOF | |
| ]) | |
| 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 | |
| # The other tests will be appended here by the Makefile rule. |