diff options
author | Lorry Tar Creator <lorry-tar-importer@baserock.org> | 2015-01-19 17:00:04 +0000 |
---|---|---|
committer | <> | 2015-01-30 17:22:40 +0000 |
commit | f7bbc21981ffdbbe2d4435556e3ead0828dce160 (patch) | |
tree | deaf72f9932c2e339bc6f981eb3719b85a413b02 /tests/template.at | |
download | libtool-tarball-f7bbc21981ffdbbe2d4435556e3ead0828dce160.tar.gz |
Imported from /home/lorry/working-area/delta_libtool-tarball/libtool-2.4.5.tar.gz.libtool-2.4.5
Diffstat (limited to 'tests/template.at')
-rw-r--r-- | tests/template.at | 324 |
1 files changed, 324 insertions, 0 deletions
diff --git a/tests/template.at b/tests/template.at new file mode 100644 index 0000000..5d2cb0c --- /dev/null +++ b/tests/template.at @@ -0,0 +1,324 @@ +# template.at -- test C++ templates with libtool -*- Autotest -*- +# +# Copyright (C) 2005, 2007-2008, 2011-2015 Free Software Foundation, +# Inc. +# Written by Markus Christen, 2005 +# +# 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([C++ template tests.]) + +AT_SETUP([simple template test]) +LT_AT_TAG([CXX]) +AT_KEYWORDS([libtool]) + +AT_DATA(aclib.h, +[[int cf(int); +]]) + +AT_DATA(aclib.cpp, +[[#include "aclib.h" +template<typename T> + +T cq(T b) +{ + return b * 3; +} + +int cf(int i) +{ + return cq(i); +} +]]) + +AT_DATA(alib.h, +[[int f(int); +]]) + +AT_DATA(alib.cpp, +[[#include "alib.h" + +template<typename T> +T q(T b) +{ + return b * 2; +} + +int f(int i) +{ + return q(i); +} +]]) + +AT_DATA(prog.cpp, +[[#include "alib.h" +#include "aclib.h" + +int main() +{ + return f(3) + 3 - cf(3) != 0; +} +]]) + +AT_CHECK([$LIBTOOL --tag=CXX --mode=compile $CXX -I. $CPPFLAGS $CXXFLAGS -c -o alib.lo alib.cpp], + [0], [ignore], [ignore]) +AT_CHECK([$LIBTOOL --tag=CXX --mode=compile $CXX -I. $CPPFLAGS $CXXFLAGS -c -o aclib.lo aclib.cpp], + [0], [ignore], [ignore]) +AT_CHECK([$LIBTOOL --tag=CXX --mode=link $CXX $CPPFLAGS $CXXFLAGS $LDFLAGS -o libaclib.la aclib.lo], + [0], [ignore], [ignore]) +AT_CHECK([$LIBTOOL --tag=CXX --mode=link $CXX $CPPFLAGS $CXXFLAGS $LDFLAGS -o libalib.la -rpath /nonexistent alib.lo libaclib.la], + [0], [ignore], [ignore]) +AT_CHECK([$CXX -I. $CPPFLAGS $CXXFLAGS -c prog.cpp], + [0], [ignore], [ignore]) +AT_CHECK([$LIBTOOL --tag=CXX --mode=link $CXX $CPPFLAGS $CXXFLAGS $LDFLAGS -o prog$EXEEXT prog.$OBJEXT libalib.la], + [0], [ignore], [ignore]) + +LT_AT_EXEC_CHECK([./prog], [0], [ignore], [ignore]) + + +dnl with autoreconf, use: + +dnl AT_DATA(configure.ac, +dnl [[AC_INIT([template_1], ]]AT_PACKAGE_VERSION[[, ]]AT_PACKAGE_BUGREPORT[[) +dnl AC_CONFIG_HEADERS([config.h:config-h.in]) +dnl AC_CONFIG_MACRO_DIRS([m4]) +dnl AC_CONFIG_AUX_DIR([config]) +dnl AM_INIT_AUTOMAKE([foreign]) +dnl AC_LANG([C++]) +dnl AC_PROG_CXX +dnl AC_PROG_LIBTOOL +dnl AC_CONFIG_FILES([Makefile]) +dnl AC_OUTPUT +dnl ]]) + +dnl AT_DATA(Makefile.am, +dnl [[ACLOCAL_AMFLAGS = -I m4 +dnl noinst_LTLIBRARIES = libaclib.la +dnl libaclib_la_SOURCES = aclib.cpp aclib.h +dnl lib_LTLIBRARIES = libalib.la +dnl include_HEADERS = alib.h +dnl libalib_la_SOURCES = alib.cpp +dnl libalib_la_LIBADD = libaclib.la +dnl bin_PROGRAMS = prog +dnl prog_SOURCES = prog.cpp +dnl LDADD = libalib.la +dnl ]]) + +AT_CLEANUP + + +AT_SETUP([template test with subdirs]) +LT_AT_TAG([CXX]) +AT_KEYWORDS([libtool]) + +noskip=: +withundef=: +# Mac OS X. +# The linker has issues with this test. +case $host in +*-darwin*) noskip=false ;; +*-aix*) withundef=false ;; +esac + + +CPPFLAGS="$CPPFLAGS -I../src/lib -I../src/lib2" + +mkdir src obj +( cd src; mkdir lib lib2 sub ) +( cd obj; mkdir lib lib2 sub ) + +AT_DATA(src/lib/a.hh, +[[template <class T> +unsigned int a(const T&); + +template <class T> +unsigned int a(const T& t) +{ + return sizeof t; +} + +extern int a2(char t); + +inline int a3(const double* t) +{ + return a(t); +} +]]) + +AT_DATA(src/lib/a.cpp, +[[#include "a.hh" + +int a2(char t) +{ + return a(t); +} +]]) + +AT_DATA(src/lib2/b.hh, +[[#include "a.hh" + +template <class T> +unsigned int b(T& t) +{ + return a(t); +} +extern int b2(char* t); +struct bs { int bi; }; +extern int b3(bs t); +]]) + +AT_DATA(src/lib2/b.cpp, +[[#include "b.hh" + +int b2(char* t) +{ + return a2(t[0]); +} + +int b3(bs t) +{ + return b(t); +} +]]) + +AT_DATA(src/sub/main.cpp, +[[#include "b.hh" + +int main() +{ + double foo; + const char s = ' '; + char d; + char *t = &d; + return b(foo) + a3(&foo) + b2(t) - a(s) + - (sizeof(double) + sizeof(double*)); +} +]]) + +cd obj + +# If the compiler supports -c -o, we want to use it: +# it may make a difference for templates +eval `$LIBTOOL --tag=CXX --config | $GREP ^compiler_c_o=` +case $compiler_c_o in +yes) + main_o=sub/main.$OBJEXT + AT_CHECK([$CXX $CPPFLAGS $CXXFLAGS -c -o $main_o ../src/sub/main.cpp], + [0], [ignore], [ignore]) + ;; +*) + main_o=main.$OBJEXT + AT_CHECK([$CXX $CPPFLAGS $CXXFLAGS -c ../src/sub/main.cpp], + [0], [ignore], [ignore]) + ;; +esac + +AT_CHECK([$LIBTOOL --tag=CXX --mode=compile $CXX $CPPFLAGS $CXXFLAGS -c -o lib/a.lo ../src/lib/a.cpp], + [0], [ignore], [ignore]) +AT_CHECK([$LIBTOOL --tag=CXX --mode=compile $CXX $CPPFLAGS $CXXFLAGS -c -o lib2/b.lo ../src/lib2/b.cpp], + [0], [ignore], [ignore]) +AT_CHECK([$CXX $CPPFLAGS $CXXFLAGS -c ../src/sub/main.cpp], + [0], [ignore], [ignore]) +# both convenience +AT_CHECK([$LIBTOOL --tag=CXX --mode=link $CXX $CXXFLAGS $LDFLAGS -o lib/liba.la lib/a.lo], + [0], [ignore], [ignore]) +AT_CHECK([$LIBTOOL --tag=CXX --mode=link $CXX $CXXFLAGS $LDFLAGS -o lib2/libb.la lib2/b.lo], + [0], [ignore], [ignore]) +AT_CHECK([$LIBTOOL --tag=CXX --mode=link $CXX $CXXFLAGS $LDFLAGS -o sub/main$EXEEXT $main_o lib2/libb.la lib/liba.la], + [0], [ignore], [ignore]) +LT_AT_EXEC_CHECK([./sub/main], [ignore]) +# lib convenience +if $noskip && $withundef; then + AT_CHECK([$LIBTOOL --tag=CXX --mode=link $CXX $CXXFLAGS $LDFLAGS -o lib2/libb.la lib2/b.lo -rpath /foo], + [0], [ignore], [ignore]) + AT_CHECK([$LIBTOOL --tag=CXX --mode=link $CXX $CXXFLAGS $LDFLAGS -o sub/main$EXEEXT $main_o lib2/libb.la lib/liba.la], + [0], [ignore], [ignore]) + LT_AT_EXEC_CHECK([./sub/main]) +fi + +# both installed +AT_CHECK([$LIBTOOL --tag=CXX --mode=link $CXX $CXXFLAGS $LDFLAGS -o lib/liba.la lib/a.lo -rpath /foo], + [0], [ignore], [ignore]) +if $withundef; then + AT_CHECK([$LIBTOOL --tag=CXX --mode=link $CXX $CXXFLAGS $LDFLAGS -o lib2/libb.la lib2/b.lo -rpath /bar], + [0], [ignore], [ignore]) + AT_CHECK([$LIBTOOL --tag=CXX --mode=link $CXX $CXXFLAGS $LDFLAGS -o sub/main$EXEEXT $main_o lib2/libb.la lib/liba.la], + [0], [ignore], [ignore]) + LT_AT_EXEC_CHECK([./sub/main]) +fi + +# both convenience, libb depending on liba +AT_CHECK([$LIBTOOL --tag=CXX --mode=link $CXX $CXXFLAGS $LDFLAGS -o lib/liba.la lib/a.lo], + [0], [ignore], [ignore]) +AT_CHECK([$LIBTOOL --tag=CXX --mode=link $CXX $CXXFLAGS $LDFLAGS -o lib2/libb.la lib2/b.lo lib/liba.la], + [0], [ignore], [ignore]) +AT_CHECK([$LIBTOOL --tag=CXX --mode=link $CXX $CXXFLAGS $LDFLAGS -o sub/main$EXEEXT $main_o lib2/libb.la], + [0], [ignore], [ignore]) +LT_AT_EXEC_CHECK([./sub/main]) +# lib convenience +if $noskip; then + + AT_CHECK([$LIBTOOL --tag=CXX --mode=link $CXX $CXXFLAGS $LDFLAGS -o lib2/libb.la lib2/b.lo lib/liba.la -rpath /foo], + [0], [ignore], [ignore]) + AT_CHECK([$LIBTOOL --tag=CXX --mode=link $CXX $CXXFLAGS $LDFLAGS -o sub/main$EXEEXT $main_o lib2/libb.la], + [0], [ignore], [ignore]) + LT_AT_EXEC_CHECK([./sub/main]) +fi +# both installed +if $noskip; then + AT_CHECK([$LIBTOOL --tag=CXX --mode=link $CXX $CXXFLAGS $LDFLAGS -o lib2/libb.la lib2/b.lo lib/liba.la -rpath /bar], + [0], [ignore], [ignore]) + AT_CHECK([$LIBTOOL --tag=CXX --mode=link $CXX $CXXFLAGS $LDFLAGS -o sub/main$EXEEXT $main_o lib2/libb.la], + [0], [ignore], [ignore]) + LT_AT_EXEC_CHECK([./sub/main]) +fi + +cd .. + +AT_CHECK([$noskip || (exit 77)]) + +dnl with autoreconf use: +dnl +dnl AT_DATA(src/configure.ac, +dnl [[AC_INIT([template_2], ]]AT_PACKAGE_VERSION[[, ]]AT_PACKAGE_BUGREPORT[[) +dnl AC_CONFIG_HEADERS([config.h:config-h.in]) +dnl AC_CONFIG_MACRO_DIRS([m4]) +dnl AC_CONFIG_AUX_DIR([config]) +dnl AM_INIT_AUTOMAKE([foreign subdir-objects]) +dnl AC_LANG([C++]) +dnl AC_PROG_CXX +dnl AC_PROG_LIBTOOL +dnl AC_CONFIG_FILES([Makefile]) +dnl AC_OUTPUT +dnl ]]) +dnl +dnl AT_DATA(src/Makefile.am, +dnl [[ACLOCAL_AMFLAGS = -I m4 +dnl INCLUDES = -I$(srcdir)/lib -I$(srcdir)/lib2 +dnl bin_PROGRAMS = sub/main +dnl noinst_LTLIBRARIES = lib/liba.la lib2/libb.la +dnl lib_liba_la_SOURCES = lib/a.cpp lib/a.hh +dnl lib2_libb_la_SOURCES = lib2/b.cpp lib2/b.hh +dnl #lib2_libb_la_LIBADD = lib/liba.la +dnl sub_main_SOURCES = sub/main.cpp +dnl sub_main_LDADD = lib2/libb.la lib/liba.la +dnl ]]) + +AT_CLEANUP |