Fix boost not found on debian-testing MP-628
[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             for b in ${with_boost}/lib ${with_boost}/lib64; do
32                 if test -d "$b"; then
33                     BOOST_LIB="-L$b"
34                 fi
35             done
36             BOOST_CPPFLAGS="-I${with_boost}/include"
37             if test ! -f "${with_boost}/include/boost/version.hpp"; then
38                 for b in ${with_boost}/include/boost-*; do
39                     BOOST_CPPFLAGS="-I$b"
40                 done
41             fi
42         fi
43         AC_ARG_WITH([boost-toolset],[  --with-boost-toolset=x  use Boost toolset (eg gcc43)])
44         if test "$with_boost_toolset" = "yes" -o -z "$with_boost_toolset"; then
45             BOOST_TOOLSET=""
46         else
47             BOOST_TOOLSET="-${with_boost_toolset}"
48         fi
49         if test "${with_boost}" = "no"; then
50             AC_MSG_RESULT([disabled])
51         else
52             CPPFLAGS="${CPPFLAGS} ${BOOST_CPPFLAGS}"
53             LIBS="${LIBS} ${BOOST_LIB}"
54             AC_LANG_CONFTEST(
55                [AC_LANG_SOURCE([[
56 #include <boost/version.hpp>
57 BOOST_VERSION
58 ]])])
59             BOOST_GOT_VERSION=`(eval "$ac_cpp conftest.$ac_ext") 2>&AS_MESSAGE_LOG_FD | grep -v '#' | grep -v '^$' 2>/dev/null`
60             if test -z "$BOOST_GOT_VERSION" -o \
61                 "$BOOST_GOT_VERSION" = "BOOST_VERSION"; then
62                 AC_MSG_RESULT([no])
63                 AC_MSG_ERROR([Boost development libraries required])
64             fi
65             AC_MSG_RESULT([yes ($BOOST_GOT_VERSION)])
66             if test "$BOOST_GOT_VERSION" -lt $BOOST_REQ_VERSION; then
67                 AC_MSG_ERROR([Boost version $BOOST_REQ_VERSION required])
68             fi
69             for c in $1; do
70                 case $c in 
71                     system)
72                         AC_SUBST([BOOST_SYSTEM_LIB])
73                         BOOST_SYSTEM_LIB=""
74                         if test "$BOOST_GOT_VERSION" -ge 104100; then
75                             AC_MSG_CHECKING([Boost system])
76                             saveLIBS="${LIBS}"
77                             for l in "${BOOST_TOOLSET}" "${BOOST_TOOLSET}-mt"; do
78                                 trylib="-lboost_system${l}"
79                                 LIBS="${saveLIBS} ${trylib}"
80                                 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
81 #include <boost/version.hpp>
82 #include <boost/system/error_code.hpp>
83 ]],[[ 
84 int x = BOOST_VERSION;
85 ]])],[
86                                         BOOST_SYSTEM_LIB="${trylib}"
87                                         break],[])
88                             done
89                             if test "${BOOST_SYSTEM_LIB}"; then
90                                 AC_MSG_RESULT([yes])
91                             else
92                                 AC_MSG_RESULT([no])
93                                 LIBS="${saveLIBS}"
94                             fi
95                         fi
96                         ;;
97                     thread)
98                         AC_MSG_CHECKING([Boost threads])
99                         AC_SUBST([BOOST_THREAD_LIB])
100                         saveLIBS="${LIBS}"
101                         BOOST_THREAD_LIB=""
102                         for l in "${BOOST_TOOLSET}" "${BOOST_TOOLSET}-mt"; do
103                             trylib="-lboost_thread${l}"
104                             LIBS="${saveLIBS} ${trylib}"
105                         AC_LINK_IFELSE([AC_LANG_PROGRAM([[
106 #include <boost/version.hpp>
107 #include <boost/thread/thread.hpp>
108 ]],[[ 
109 int x = BOOST_VERSION;
110 ]])],[
111                             BOOST_THREAD_LIB="${trylib}"
112                             break],[])
113                         done
114                         if test "${BOOST_THREAD_LIB}"; then
115                             AC_MSG_RESULT([yes])
116                         else
117                             AC_MSG_RESULT([no])
118                             LIBS="${saveLIBS}"
119                         fi
120                         ;;
121                     test)
122                         AC_MSG_CHECKING([Boost unit test framework])
123                         saveLIBS="${LIBS}"
124                         AC_SUBST([BOOST_TEST_LIB])
125                         BOOST_TEST_LIB=""
126                         for l in boost_unit_test_framework${BOOST_TOOLSET} boost_unit_test_framework${BOOST_TOOLSET}-mt; do
127                             LIBS="${saveLIBS} -l${l}"
128                             AC_LINK_IFELSE([AC_LANG_SOURCE([[
129 #define BOOST_TEST_DYN_LINK
130 #define BOOST_AUTO_TEST_MAIN
131 #define BOOST_TEST_MODULE configure
132 #include <boost/test/auto_unit_test.hpp>
133 BOOST_AUTO_TEST_CASE( t ) 
134 {
135     BOOST_CHECK(1);
136 }
137 ]])],[
138                               BOOST_TEST_LIB="-l${l}"
139                               break
140 ],[])
141                         done
142                         if test "${BOOST_TEST_LIB}"; then
143                             AC_MSG_RESULT([yes])
144                         else
145                             AC_MSG_RESULT([no])
146                         fi
147                         LIBS="${saveLIBS}"
148                         ;;
149                     regex)
150                         AC_MSG_CHECKING([Boost regex])
151                         AC_SUBST([BOOST_REGEX_LIB])
152                         saveLIBS="${LIBS}"
153                         BOOST_REGEX_LIB=""
154                         for l in boost_regex${BOOST_TOOLSET} boost_regex${BOOST_TOOLSET}-mt; do
155                             LIBS="${saveLIBS} -l${l}"
156                         AC_LINK_IFELSE([AC_LANG_PROGRAM([[
157 #include <boost/version.hpp>
158 #include <boost/regex.hpp>
159 ]],[[ 
160 int x = BOOST_VERSION;
161 ]])],[
162                             BOOST_REGEX_LIB="-l${l}"
163                             break],[])
164                         done
165                         if test "${BOOST_REGEX_LIB}"; then
166                             AC_MSG_RESULT([yes])
167                         else
168                             AC_MSG_RESULT([no])
169                             LIBS="${saveLIBS}"
170                         fi
171                         ;;
172                 esac
173             done
174         fi
175         CPPFLAGS="$oldCPPFLAGS"
176         LIBS="$oldLIBS"
177         AC_LANG_POP([C++])
178     ])
179
180 dnl Local Variables:
181 dnl mode:shell-script
182 dnl sh-indentation: 2
183 dnl sh-basic-offset: 4
184 dnl End: