Small corrections. Compiles and builds.
[libt2n] / m4 / ax_boost_base.m4
1 # ===========================================================================
2 #             http://autoconf-archive.cryp.to/ax_boost_base.html
3 # ===========================================================================
4 #
5 # SYNOPSIS
6 #
7 #   AX_BOOST_BASE([MINIMUM-VERSION])
8 #
9 # DESCRIPTION
10 #
11 #   Test for the Boost C++ libraries of a particular version (or newer)
12 #
13 #   If no path to the installed boost library is given the macro searchs
14 #   under /usr, /usr/local, /opt and /opt/local and evaluates the
15 #   $BOOST_ROOT environment variable. Further documentation is available at
16 #   <http://randspringer.de/boost/index.html>.
17 #
18 #   This macro calls:
19 #
20 #     AC_SUBST(BOOST_CPPFLAGS) / AC_SUBST(BOOST_LDFLAGS)
21 #
22 #   And sets:
23 #
24 #     HAVE_BOOST
25 #
26 # LAST MODIFICATION
27 #
28 #   2008-04-12
29 #
30 # COPYLEFT
31 #
32 #   Copyright (c) 2008 Thomas Porschberg <thomas@randspringer.de>
33 #
34 #   Copying and distribution of this file, with or without modification, are
35 #   permitted in any medium without royalty provided the copyright notice
36 #   and this notice are preserved.
37
38 AC_DEFUN([AX_BOOST_BASE],
39 [
40 AC_ARG_WITH([boost],
41         AS_HELP_STRING([--with-boost@<:@=DIR@:>@], [use boost (default is yes) - it is possible to specify the root directory for boost (optional)]),
42         [
43     if test "$withval" = "no"; then
44                 want_boost="no"
45     elif test "$withval" = "yes"; then
46         want_boost="yes"
47         ac_boost_path=""
48     else
49             want_boost="yes"
50         ac_boost_path="$withval"
51         fi
52     ],
53     [want_boost="yes"])
54
55
56 AC_ARG_WITH([boost-libdir],
57         AS_HELP_STRING([--with-boost-libdir=LIB_DIR],
58         [Force given directory for boost libraries. Note that this will overwrite library path detection, so use this parameter only if default library detection fails and you know exactly where your boost libraries are located.]),
59         [
60         if test -d $withval
61         then
62                 ac_boost_lib_path="$withval"
63         else
64                 AC_MSG_ERROR(--with-boost-libdir expected directory name)
65         fi
66         ],
67         [ac_boost_lib_path=""]
68 )
69
70 if test "x$want_boost" = "xyes"; then
71         boost_lib_version_req=ifelse([$1], ,1.20.0,$1)
72         boost_lib_version_req_shorten=`expr $boost_lib_version_req : '\([[0-9]]*\.[[0-9]]*\)'`
73         boost_lib_version_req_major=`expr $boost_lib_version_req : '\([[0-9]]*\)'`
74         boost_lib_version_req_minor=`expr $boost_lib_version_req : '[[0-9]]*\.\([[0-9]]*\)'`
75         boost_lib_version_req_sub_minor=`expr $boost_lib_version_req : '[[0-9]]*\.[[0-9]]*\.\([[0-9]]*\)'`
76         if test "x$boost_lib_version_req_sub_minor" = "x" ; then
77                 boost_lib_version_req_sub_minor="0"
78         fi
79         WANT_BOOST_VERSION=`expr $boost_lib_version_req_major \* 100000 \+  $boost_lib_version_req_minor \* 100 \+ $boost_lib_version_req_sub_minor`
80         AC_MSG_CHECKING(for boostlib >= $boost_lib_version_req)
81         succeeded=no
82
83         dnl first we check the system location for boost libraries
84         dnl this location ist chosen if boost libraries are installed with the --layout=system option
85         dnl or if you install boost with RPM
86         if test "$ac_boost_path" != ""; then
87                 BOOST_LDFLAGS="-L$ac_boost_path/lib"
88                 BOOST_CPPFLAGS="-I$ac_boost_path/include"
89         else
90                 for ac_boost_path_tmp in /usr /usr/local /opt /opt/local ; do
91                         if test -d "$ac_boost_path_tmp/include/boost" && test -r "$ac_boost_path_tmp/include/boost"; then
92                                 BOOST_LDFLAGS="-L$ac_boost_path_tmp/lib"
93                                 BOOST_CPPFLAGS="-I$ac_boost_path_tmp/include"
94                                 break;
95                         fi
96                 done
97         fi
98
99     dnl overwrite ld flags if we have required special directory with
100     dnl --with-boost-libdir parameter
101     if test "$ac_boost_lib_path" != ""; then
102        BOOST_LDFLAGS="-L$ac_boost_lib_path"
103     fi
104
105         CPPFLAGS_SAVED="$CPPFLAGS"
106         CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
107         export CPPFLAGS
108
109         LDFLAGS_SAVED="$LDFLAGS"
110         LDFLAGS="$LDFLAGS $BOOST_LDFLAGS"
111         export LDFLAGS
112
113         AC_LANG_PUSH(C++)
114         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
115         @%:@include <boost/version.hpp>
116         ]], [[
117         #if BOOST_VERSION >= $WANT_BOOST_VERSION
118         // Everything is okay
119         #else
120         #  error Boost version is too old
121         #endif
122         ]])],[
123         AC_MSG_RESULT(yes)
124         succeeded=yes
125         found_system=yes
126         ],[
127         ])
128         AC_LANG_POP([C++])
129
130
131
132         dnl if we found no boost with system layout we search for boost libraries
133         dnl built and installed without the --layout=system option or for a staged(not installed) version
134         if test "x$succeeded" != "xyes"; then
135                 _version=0
136                 if test "$ac_boost_path" != ""; then
137                         if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then
138                                 for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do
139                                         _version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'`
140                                         V_CHECK=`expr $_version_tmp \> $_version`
141                                         if test "$V_CHECK" = "1" ; then
142                                                 _version=$_version_tmp
143                                         fi
144                                         VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'`
145                                         BOOST_CPPFLAGS="-I$ac_boost_path/include/boost-$VERSION_UNDERSCORE"
146                                 done
147                         fi
148                 else
149                         for ac_boost_path in /usr /usr/local /opt /opt/local ; do
150                                 if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then
151                                         for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do
152                                                 _version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'`
153                                                 V_CHECK=`expr $_version_tmp \> $_version`
154                                                 if test "$V_CHECK" = "1" ; then
155                                                         _version=$_version_tmp
156                                                         best_path=$ac_boost_path
157                                                 fi
158                                         done
159                                 fi
160                         done
161
162                         VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'`
163                         BOOST_CPPFLAGS="-I$best_path/include/boost-$VERSION_UNDERSCORE"
164             if test "$ac_boost_lib_path" = ""
165             then
166                BOOST_LDFLAGS="-L$best_path/lib"
167             fi
168
169                         if test "x$BOOST_ROOT" != "x"; then
170                                 if test -d "$BOOST_ROOT" && test -r "$BOOST_ROOT" && test -d "$BOOST_ROOT/stage/lib" && test -r "$BOOST_ROOT/stage/lib"; then
171                                         version_dir=`expr //$BOOST_ROOT : '.*/\(.*\)'`
172                                         stage_version=`echo $version_dir | sed 's/boost_//' | sed 's/_/./g'`
173                                         stage_version_shorten=`expr $stage_version : '\([[0-9]]*\.[[0-9]]*\)'`
174                                         V_CHECK=`expr $stage_version_shorten \>\= $_version`
175                     if test "$V_CHECK" = "1" -a "$ac_boost_lib_path" = "" ; then
176                                                 AC_MSG_NOTICE(We will use a staged boost library from $BOOST_ROOT)
177                                                 BOOST_CPPFLAGS="-I$BOOST_ROOT"
178                                                 BOOST_LDFLAGS="-L$BOOST_ROOT/stage/lib"
179                                         fi
180                                 fi
181                         fi
182                 fi
183
184                 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
185                 export CPPFLAGS
186                 LDFLAGS="$LDFLAGS $BOOST_LDFLAGS"
187                 export LDFLAGS
188
189                 AC_LANG_PUSH(C++)
190                 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
191                 @%:@include <boost/version.hpp>
192                 ]], [[
193                 #if BOOST_VERSION >= $WANT_BOOST_VERSION
194                 // Everything is okay
195                 #else
196                 #  error Boost version is too old
197                 #endif
198                 ]])],[
199                 AC_MSG_RESULT(yes)
200                 succeeded=yes
201                 found_system=yes
202                 ],[
203                 ])
204                 AC_LANG_POP([C++])
205         fi
206
207         if test "$succeeded" != "yes" ; then
208                 if test "$_version" = "0" ; then
209                         AC_MSG_ERROR([[We could not detect the boost libraries (version $boost_lib_version_req_shorten or higher). If you have a staged boost library (still not installed) please specify \$BOOST_ROOT in your environment and do not give a PATH to --with-boost option.  If you are sure you have boost installed, then check your version number looking in <boost/version.hpp>. See http://randspringer.de/boost for more documentation.]])
210                 else
211                         AC_MSG_NOTICE([Your boost libraries seems to old (version $_version).])
212                 fi
213         else
214                 AC_SUBST(BOOST_CPPFLAGS)
215                 AC_SUBST(BOOST_LDFLAGS)
216                 AC_DEFINE(HAVE_BOOST,,[define if the Boost library is available])
217         fi
218
219         CPPFLAGS="$CPPFLAGS_SAVED"
220         LDFLAGS="$LDFLAGS_SAVED"
221 fi
222
223 ])