Files
opm-core/m4/opm_dynlink_boost_test.m4
Andreas Lauser 31d0681a66 opm-core: make it a usable in conjunction wit dunecontrol
This allows projects which use the DUNE build system and want to use
OPM-Core to specify a dependency in their dune.module file. (i.e. they
don't have to worry about compiler and linker flags anymore.)

opm-core can still be used without having DUNE installed, though. This
means that for users which do not need/want a dependency on DUNE,
nothing changes.

v2: avoid naming conflict of the AX_BOOST_BASE macro with dune-common
    by renaming it to OPM_BOOST_BASE.
v3: make the library detection work nicely
v4: Use AX_BOOST_BASE M4 macro from opm-core instead from dune-common
    as base for OPM_BOOST_BASE to get rid of a few bugs, reworded
    commit message. Thanks to Bård Skaflestad for the review.
2012-07-02 19:17:25 +02:00

81 lines
2.3 KiB
Plaintext

# _OPM_DYNLINK_BOOST_TEST_SRC(Symbol)
# Generate source text for use in AC_LINK_IFELSE when determining
# how to link the Boost.Test library.
#
# Note:
# We use AC_LANG_SOURCE rather than AC_LANG_PROGRAM to avoid
# multiple definitions of "main()" (defined by both the UTF
# *and* the AC_LANG_PROGRAM macro).
AC_DEFUN([_OPM_DYNLINK_BOOST_TEST_SRC],
[AC_LANG_SOURCE(
[[$1
#define BOOST_TEST_MODULE OPM_DYNLINK_TEST
#include <boost/test/unit_test.hpp>
int f(int x) { return 2 * x; }
BOOST_AUTO_TEST_CASE(DynlinkConfigureTest) {
BOOST_CHECK_MESSAGE(f(2) == 4,
"Apparently, multiplication doesn't "
"work: f(2) = " << f(2));
}
]]dnl
)[]dnl
])
dnl -------------------------------------------------------------------
# OPM_DYNLINK_BOOST_TEST
# Determine how to link (or compile+link) tests based on the UTF.
#
# If the system uses dynamic linking, then all tests need to
#
# #define BOOST_TEST_DYN_LINK
#
# Otherwise, this symbol must *not* be #define'd.
#
# Macro defines the symbol HAVE_DYNAMIC_BOOST_TEST (to 1) if the
# system uses dynamic linking of Boost.Test .
AC_DEFUN([OPM_DYNLINK_BOOST_TEST],
[
AC_REQUIRE([OPM_BOOST_BASE])
AC_REQUIRE([AX_BOOST_UNIT_TEST_FRAMEWORK])
_opm_LIBS_SAVE="$LIBS"
_opm_CPPFLAGS_SAVE="$CPPFLAGS"
LIBS="${BOOST_LDFLAGS} ${BOOST_UNIT_TEST_FRAMEWORK_LIB} ${LIBS}"
CPPFLAGS="${BOOST_CPPFLAGS} ${CPPFLAGS}"
AC_LANG_PUSH([C++])
AC_CACHE_CHECK([if the Boost.Test library can be linked statically],dnl
[opm_cv_boost_link_static],dnl
[AC_LINK_IFELSE([_OPM_DYNLINK_BOOST_TEST_SRC([])],
[opm_cv_boost_link_static=yes],dnl
[opm_cv_boost_link_static=no])[]dnl
])[]dnl
AC_CACHE_CHECK([if the Boost.Test library can be linked dynamically],dnl
[opm_cv_boost_link_dynamic],dnl
[AC_LINK_IFELSE([_OPM_DYNLINK_BOOST_TEST_SRC(dnl
[#define BOOST_TEST_DYN_LINK])],
[opm_cv_boost_link_dynamic=yes],dnl
[opm_cv_boost_link_dynamic=no])[]dnl
])[]dnl
AC_LANG_POP([C++])
LIBS="$_opm_LIBS_SAVE"
CPPFLAGS="$_opm_CPPFLAGS_SAVE"
AS_IF([test x"$opm_cv_boost_link_static" = x"yes" -o \
x"$opm_cv_boost_link_dynamic" = x"yes"],
[AS_IF([test x"$opm_cv_boost_link_dynamic" = x"yes"],
[AC_DEFINE([HAVE_DYNAMIC_BOOST_TEST], [1],
[Define to `1' if Boost.Test should use BOOST_TEST_DYN_LINK])]
[:])[]dnl
],dnl
[AC_MSG_NOTICE([Boost.Test is not supported on this system])])
])[]dnl