Use m4 macro ACX_PTHREAD for POSIX threads detection.
[m4-moved-to-github.git] / ax_boost_unit_test_framework.m4
1 ##### http://autoconf-archive.cryp.to/ax_boost_unit_test_framework.html
2 #
3 # SYNOPSIS
4 #
5 #   AX_BOOST_UNIT_TEST_FRAMEWORK
6 #
7 # DESCRIPTION
8 #
9 #   Test for Unit_Test_Framework library from the Boost C++ libraries.
10 #   The macro requires a preceding call to AX_BOOST_BASE. Further
11 #   documentation is available at
12 #   <http://randspringer.de/boost/index.html>.
13 #
14 #   This macro calls:
15 #
16 #     AC_SUBST(BOOST_UNIT_TEST_FRAMEWORK_LIB)
17 #
18 #   And sets:
19 #
20 #     HAVE_BOOST_UNIT_TEST_FRAMEWORK
21 #
22 # LAST MODIFICATION
23 #
24 #   2006-12-28
25 #
26 # COPYLEFT
27 #
28 #   Copyright (c) 2006 Thomas Porschberg <thomas@randspringer.de>
29 #
30 #   Copying and distribution of this file, with or without
31 #   modification, are permitted in any medium without royalty provided
32 #   the copyright notice and this notice are preserved.
33
34 AC_DEFUN([AX_BOOST_UNIT_TEST_FRAMEWORK],
35 [
36         AC_ARG_WITH([boost-unit-test-framework],
37         AS_HELP_STRING([--with-boost-unit-test-framework@<:@=special-lib@:>@],
38                    [use the Unit_Test_Framework library from boost - it is possible to specify a certain library for the linker
39                         e.g. --with-boost-unit-test-framework=boost_unit_test_framework-gcc ]),
40         [
41         if test "$withval" = "no"; then
42                         want_boost="no"
43         elif test "$withval" = "yes"; then
44             want_boost="yes"
45             ax_boost_user_unit_test_framework_lib=""
46         else
47                     want_boost="yes"
48                 ax_boost_user_unit_test_framework_lib="$withval"
49                 fi
50         ],
51         [want_boost="yes"]
52         )
53
54         if test "x$want_boost" = "xyes"; then
55         AC_REQUIRE([AC_PROG_CC])
56                 CPPFLAGS_SAVED="$CPPFLAGS"
57                 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
58                 export CPPFLAGS
59
60                 LDFLAGS_SAVED="$LDFLAGS"
61                 LDFLAGS="$LDFLAGS $BOOST_LDFLAGS"
62                 export LDFLAGS
63
64         AC_CACHE_CHECK(whether the Boost::Unit_Test_Framework library is available,
65                                            ax_cv_boost_unit_test_framework,
66         [AC_LANG_PUSH([C++])
67                          AC_COMPILE_IFELSE(AC_LANG_PROGRAM([[@%:@include <boost/test/unit_test.hpp>]],
68                                     [[using boost::unit_test::test_suite;
69                                                          test_suite* test= BOOST_TEST_SUITE( "Unit test example 1" ); return 0;]]),
70                    ax_cv_boost_unit_test_framework=yes, ax_cv_boost_unit_test_framework=no)
71          AC_LANG_POP([C++])
72                 ])
73                 if test "x$ax_cv_boost_unit_test_framework" = "xyes"; then
74                         AC_DEFINE(HAVE_BOOST_UNIT_TEST_FRAMEWORK,,[define if the Boost::Unit_Test_Framework library is available])
75                         BN=boost_unit_test_framework
76             if test "x$ax_boost_user_unit_test_framework_lib" = "x"; then
77                         saved_ldflags="${LDFLAGS}"
78                         for ax_lib in $BN $BN-$CC $BN-$CC-mt $BN-$CC-mt-s $BN-$CC-s \
79                              lib$BN lib$BN-$CC lib$BN-$CC-mt lib$BN-$CC-mt-s lib$BN-$CC-s \
80                              $BN-mgw $BN-mgw $BN-mgw-mt $BN-mgw-mt-s $BN-mgw-s ; do
81                    LDFLAGS="${LDFLAGS} -l$ax_lib"
82                            AC_CACHE_CHECK(Boost::UnitTestFramework library linkage,
83                                                    ax_cv_boost_unit_test_framework_link,
84                                                   [AC_LANG_PUSH([C++])
85                    AC_LINK_IFELSE([AC_LANG_PROGRAM([[@%:@include <boost/test/unit_test.hpp>
86                                                      using boost::unit_test::test_suite;
87                                                      test_suite* init_unit_test_suite( int argc, char * argv[] ) {
88                                                      test_suite* test= BOOST_TEST_SUITE( "Unit test example 1" );
89                                                      return test;
90                                                      }
91                                                    ]],
92                                  [[ return 0;]])],
93                                  link_unit_test_framework="yes",link_unit_test_framework="no")
94                               AC_LANG_POP([C++])
95                   ])
96                   LDFLAGS="${saved_ldflags}"
97
98                               if test "x$link_unit_test_framework" = "xyes"; then
99                       BOOST_UNIT_TEST_FRAMEWORK_LIB="-l$ax_lib"
100                       AC_SUBST(BOOST_UNIT_TEST_FRAMEWORK_LIB)
101                                           break
102                                   fi
103                 done
104             else
105                         saved_ldflags="${LDFLAGS}"
106                for ax_lib in $ax_boost_user_unit_test_framework_lib $BN-$ax_boost_user_unit_test_framework_lib; do
107                    LDFLAGS="${LDFLAGS} -l$ax_lib"
108                                    AC_CACHE_CHECK(Boost::UnitTestFramework library linkage,
109                                                    ax_cv_boost_unit_test_framework_link,
110                                                   [AC_LANG_PUSH([C++])
111                            AC_LINK_IFELSE([AC_LANG_PROGRAM([[@%:@include <boost/test/unit_test.hpp>
112                                                         using boost::unit_test::test_suite;
113                                                         test_suite* init_unit_test_suite( int argc, char * argv[] ) {
114                                                         test_suite* test= BOOST_TEST_SUITE( "Unit test example 1" );
115                                                         return test;
116                                                         }
117                                                    ]],
118                                  [[ return 0;]])],
119                                  link_unit_test_framework="yes",link_unit_test_framework="no")
120                               AC_LANG_POP([C++])
121                   ])
122                   LDFLAGS="${saved_ldflags}"
123                               if test "x$link_unit_test_framework" = "xyes"; then
124                       BOOST_UNIT_TEST_FRAMEWORK_LIB="-l$ax_lib"
125                       AC_SUBST(BOOST_UNIT_TEST_FRAMEWORK_LIB)
126                                           break
127                                   fi
128                done
129             fi
130                         if test "x$link_unit_test_framework" = "xno"; then
131                                 AC_MSG_ERROR(Could not link against $ax_lib !)
132                         fi
133                 fi
134
135                 CPPFLAGS="$CPPFLAGS_SAVED"
136         LDFLAGS="$LDFLAGS_SAVED"
137         fi
138 ])