0bbcdbd39dd223fd941116eb8e50bcc44e8d2dc7
[m4-moved-to-github.git] / boost.m4
1 # configure for Boost libs
2 #
3 # ID_BOOST([components],[libs])
4 #
5 # Sets the following variables:
6 #
7 #   BOOST_CPPFLAGS
8 #   BOOST_LIB
9 # If components include "thread":
10 #   BOOST_THREAD_LIB
11 # If components include "test":
12 #   BOOST_TEST_LIB
13
14 AC_DEFUN([ID_BOOST],
15     [
16         AC_SUBST([BOOST_CPPFLAGS])
17         AC_SUBST([BOOST_LIB])
18         
19         AC_MSG_CHECKING([for Boost])
20         AC_LANG_PUSH([C++])
21         oldCPPFLAGS="$CPPFLAGS"
22         oldLIBS="$LIBS"
23         BOOST_REQ_VERSION=`echo "$2" | awk 'BEGIN { FS = "."; } { printf "%d", ([$]1 * 1000 + [$]2) * 100 + [$]3;}'`
24         CPPFLAGS="$CPPFLAGS -DBOOST_REQ_VERSION=${BOOST_REQ_VERSION}"
25
26         AC_ARG_WITH([boost],[[  --with-boost=DIR  use Boost in prefix DIR]])
27         if test "$with_boost" = "yes" -o -z "$with_boost"; then
28             BOOST_CPPFLAGS=""
29             BOOST_LIB=""
30         else
31             BOOST_LIB="-L${with_boost}/lib"
32             BOOST_CPPFLAGS="-I${with_boost}/include"
33             if test ! -f "${with_boost}/include/version.hpp"; then
34                 for b in ${with_boost}/include/boost-*; do
35                     BOOST_CPPFLAGS="-I$b"
36                 done
37             fi
38         fi
39         if test "${with_boost}" = "no"; then
40             AC_MSG_RESULT([disabled])
41         else
42             CPPFLAGS="${CPPFLAGS} ${BOOST_CPPFLAGS}"
43             LIBS="${LIBS} ${BOOST_LIB}"
44             AC_LANG_CONFTEST(
45                [AC_LANG_SOURCE([[
46 #include <boost/version.hpp>
47 version_is:BOOST_VERSION
48 ]])])
49             BOOST_GOT_VERSION=`(eval "$ac_cpp conftest.$ac_ext") 2>&AS_MESSAGE_LOG_FD | $EGREP version_is 2>/dev/null | cut -d ":" -f2`
50             if test "$BOOST_GOT_VERSION" = "BOOST_VERSION"; then
51                 AC_MSG_RESULT([no])
52                 AC_MSG_ERROR([Boost development libraries required])
53             fi
54             AC_MSG_RESULT([yes ($BOOST_GOT_VERSION)])
55             if test "$BOOST_GOT_VERSION" -lt $BOOST_REQ_VERSION; then
56                 AC_MSG_ERROR([Boost version $BOOST_REQ_VERSION required])
57             fi
58             for c in $1; do
59                 case $c in 
60                     thread)
61                         AC_MSG_CHECKING([Boost threads])
62                         AC_SUBST([BOOST_THREAD_LIB])
63                         saveLIBS="${LIBS}"
64                         BOOST_THREAD_LIB=""
65                         for l in boost_thread-mt boost_thread; do
66                             LIBS="${saveLIBS} -l${l}"
67                         AC_LINK_IFELSE([AC_LANG_PROGRAM([[
68 #include <boost/version.hpp>
69 #include <boost/thread/thread.hpp>
70 ]],[[ 
71 int x = BOOST_VERSION;
72 ]])],[
73                             BOOST_THREAD_LIB="-l${l}"
74                             break],[])
75                         done
76                         if test "${BOOST_THREAD_LIB}"; then
77                             AC_MSG_RESULT([yes])
78                         else
79                             AC_MSG_RESULT([no])
80                         fi
81                         ;;
82                     test)
83                         AC_MSG_CHECKING([Boost unit test framework])
84                         saveLIBS="${LIBS}"
85                         AC_SUBST([BOOST_TEST_LIB])
86                         BOOST_TEST_LIB=""
87                         for l in boost_unit_test_framework-mt boost_unit_test_framework; do
88                             LIBS="${saveLIBS} -l${l}"
89                             AC_LINK_IFELSE([AC_LANG_SOURCE([[
90 #define BOOST_TEST_DYN_LINK
91 #define BOOST_AUTO_TEST_MAIN
92 #include <boost/test/auto_unit_test.hpp>
93 BOOST_AUTO_TEST_CASE( t ) 
94 {
95     BOOST_CHECK(1);
96 }
97 ]])],[
98                               BOOST_TEST_LIB="-l${l}"
99                               break
100 ],[])
101                         done
102                         if test "${BOOST_TEST_LIB}"; then
103                             AC_MSG_RESULT([yes])
104                         else
105                             AC_MSG_RESULT([no])
106                         fi
107                         LIBS="${saveLIBS}"
108                         ;;
109                 esac
110             done
111         fi
112         CPPFLAGS="$oldCPPFLAGS"
113         LIBS="$oldLIBS"
114         AC_LANG_POP([C++])
115     ])
116
117 dnl Local Variables:
118 dnl mode:shell-script
119 dnl sh-indentation: 2
120 dnl sh-basic-offset: 4
121 dnl End: