Quoting fix for boost thread check
[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 version_is:BOOST_VERSION
58 ]])])
59             BOOST_GOT_VERSION=`(eval "$ac_cpp conftest.$ac_ext") 2>&AS_MESSAGE_LOG_FD | $EGREP version_is 2>/dev/null | cut -d ":" -f2`
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                     thread)
72                         if test "$BOOST_GOT_VERSION" -ge 104100; then
73                             AC_MSG_CHECKING([Boost threads + system])
74                         else
75                             AC_MSG_CHECKING([Boost threads])
76                         fi
77                         AC_SUBST([BOOST_THREAD_LIB])
78                         saveLIBS="${LIBS}"
79                         BOOST_THREAD_LIB=""
80                         for l in "${BOOST_TOOLSET}-mt" "${BOOST_TOOLSET}"; do
81                             trylib="-lboost_thread${l}"
82                             if test "$BOOST_GOT_VERSION" -ge 104100; then
83                                 trylib="-lboost_system${l} ${trylib}"
84                             fi
85                             LIBS="${saveLIBS} ${trylib}"
86                         AC_LINK_IFELSE([AC_LANG_PROGRAM([[
87 #include <boost/version.hpp>
88 #include <boost/thread/thread.hpp>
89 ]],[[ 
90 int x = BOOST_VERSION;
91 ]])],[
92                             BOOST_THREAD_LIB="${trylib}"
93                             break],[])
94                         done
95                         if test "${BOOST_THREAD_LIB}"; then
96                             AC_MSG_RESULT([yes])
97                         else
98                             AC_MSG_RESULT([no])
99                         fi
100                         ;;
101                     test)
102                         AC_MSG_CHECKING([Boost unit test framework])
103                         saveLIBS="${LIBS}"
104                         AC_SUBST([BOOST_TEST_LIB])
105                         BOOST_TEST_LIB=""
106                         for l in boost_unit_test_framework${BOOST_TOOLSET}-mt boost_unit_test_framework${BOOST_TOOLSET}; do
107                             LIBS="${saveLIBS} -l${l}"
108                             AC_LINK_IFELSE([AC_LANG_SOURCE([[
109 #define BOOST_TEST_DYN_LINK
110 #define BOOST_AUTO_TEST_MAIN
111 #define BOOST_TEST_MODULE configure
112 #include <boost/test/auto_unit_test.hpp>
113 BOOST_AUTO_TEST_CASE( t ) 
114 {
115     BOOST_CHECK(1);
116 }
117 ]])],[
118                               BOOST_TEST_LIB="-l${l}"
119                               break
120 ],[])
121                         done
122                         if test "${BOOST_TEST_LIB}"; then
123                             AC_MSG_RESULT([yes])
124                         else
125                             AC_MSG_RESULT([no])
126                         fi
127                         LIBS="${saveLIBS}"
128                         ;;
129                     regex)
130                         AC_MSG_CHECKING([Boost regex])
131                         AC_SUBST([BOOST_REGEX_LIB])
132                         saveLIBS="${LIBS}"
133                         BOOST_REGEX_LIB=""
134                         for l in boost_regex${BOOST_TOOLSET}-mt boost_regex${BOOST_TOOLSET}; do
135                             LIBS="${saveLIBS} -l${l}"
136                         AC_LINK_IFELSE([AC_LANG_PROGRAM([[
137 #include <boost/version.hpp>
138 #include <boost/regex.hpp>
139 ]],[[ 
140 int x = BOOST_VERSION;
141 ]])],[
142                             BOOST_REGEX_LIB="-l${l}"
143                             break],[])
144                         done
145                         if test "${BOOST_REGEX_LIB}"; then
146                             AC_MSG_RESULT([yes])
147                         else
148                             AC_MSG_RESULT([no])
149                         fi
150                         ;;
151                 esac
152             done
153         fi
154         CPPFLAGS="$oldCPPFLAGS"
155         LIBS="$oldLIBS"
156         AC_LANG_POP([C++])
157     ])
158
159 dnl Local Variables:
160 dnl mode:shell-script
161 dnl sh-indentation: 2
162 dnl sh-basic-offset: 4
163 dnl End: