1 # ===========================================================================
2 # http://www.gnu.org/software/autoconf-archive/ax_boost_base.html
3 # ===========================================================================
7 # AX_BOOST_BASE([MINIMUM-VERSION], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
11 # Test for the Boost C++ libraries of a particular version (or newer)
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>.
20 # AC_SUBST(BOOST_CPPFLAGS) / AC_SUBST(BOOST_LDFLAGS)
28 # Copyright (c) 2008 Thomas Porschberg <thomas@randspringer.de>
29 # Copyright (c) 2009 Peter Adolphs
31 # Copying and distribution of this file, with or without modification, are
32 # permitted in any medium without royalty provided the copyright notice
33 # and this notice are preserved. This file is offered as-is, without any
38 AC_DEFUN([AX_BOOST_BASE],
41 [AS_HELP_STRING([--with-boost@<:@=ARG@:>@],
42 [use Boost library from a standard location (ARG=yes),
43 from the specified location (ARG=<path>),
44 or disable it (ARG=no)
47 if test "$withval" = "no"; then
49 elif test "$withval" = "yes"; then
54 ac_boost_path="$withval"
60 AC_ARG_WITH([boost-libdir],
61 AS_HELP_STRING([--with-boost-libdir=LIB_DIR],
62 [Force given directory for boost libraries. Note that this will override library path detection, so use this parameter only if default library detection fails and you know exactly where your boost libraries are located.]),
66 ac_boost_lib_path="$withval"
68 AC_MSG_ERROR(--with-boost-libdir expected directory name)
71 [ac_boost_lib_path=""]
74 if test "x$want_boost" = "xyes"; then
75 boost_lib_version_req=ifelse([$1], ,1.20.0,$1)
76 boost_lib_version_req_shorten=`expr $boost_lib_version_req : '\([[0-9]]*\.[[0-9]]*\)'`
77 boost_lib_version_req_major=`expr $boost_lib_version_req : '\([[0-9]]*\)'`
78 boost_lib_version_req_minor=`expr $boost_lib_version_req : '[[0-9]]*\.\([[0-9]]*\)'`
79 boost_lib_version_req_sub_minor=`expr $boost_lib_version_req : '[[0-9]]*\.[[0-9]]*\.\([[0-9]]*\)'`
80 if test "x$boost_lib_version_req_sub_minor" = "x" ; then
81 boost_lib_version_req_sub_minor="0"
83 WANT_BOOST_VERSION=`expr $boost_lib_version_req_major \* 100000 \+ $boost_lib_version_req_minor \* 100 \+ $boost_lib_version_req_sub_minor`
84 AC_MSG_CHECKING(for boostlib >= $boost_lib_version_req)
87 dnl On 64-bit systems check for system libraries in both lib64 and lib.
88 dnl The former is specified by FHS, but e.g. Debian does not adhere to
89 dnl this (as it rises problems for generic multi-arch support).
90 dnl The last entry in the list is chosen by default when no libraries
91 dnl are found, e.g. when only header-only libraries are installed!
96 libsubdirs="lib64 libx32 lib lib64"
98 ppc64|s390x|sparc64|aarch64|ppc64le)
99 libsubdirs="lib64 lib lib64 ppc64le"
103 dnl allow for real multi-arch paths e.g. /usr/lib/x86_64-linux-gnu. Give
104 dnl them priority over the other paths since, if libs are found there, they
105 dnl are almost assuredly the ones desired.
106 AC_REQUIRE([AC_CANONICAL_HOST])
107 libsubdirs="lib/${host_cpu}-${host_os} $libsubdirs"
111 libsubdirs="lib/i386-${host_os} $libsubdirs"
115 dnl first we check the system location for boost libraries
116 dnl this location ist chosen if boost libraries are installed with the --layout=system option
117 dnl or if you install boost with RPM
118 if test "$ac_boost_path" != ""; then
119 BOOST_CPPFLAGS="-I$ac_boost_path/include"
120 for ac_boost_path_tmp in $libsubdirs; do
121 if test -d "$ac_boost_path"/"$ac_boost_path_tmp" ; then
122 BOOST_LDFLAGS="-L$ac_boost_path/$ac_boost_path_tmp"
126 elif test "$cross_compiling" != yes; then
127 for ac_boost_path_tmp in /usr /usr/local /opt /opt/local ; do
128 if test -d "$ac_boost_path_tmp/include/boost" && test -r "$ac_boost_path_tmp/include/boost"; then
129 for libsubdir in $libsubdirs ; do
130 if ls "$ac_boost_path_tmp/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi
132 BOOST_LDFLAGS="-L$ac_boost_path_tmp/$libsubdir"
133 BOOST_CPPFLAGS="-I$ac_boost_path_tmp/include"
139 dnl overwrite ld flags if we have required special directory with
140 dnl --with-boost-libdir parameter
141 if test "$ac_boost_lib_path" != ""; then
142 BOOST_LDFLAGS="-L$ac_boost_lib_path"
145 CPPFLAGS_SAVED="$CPPFLAGS"
146 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
149 LDFLAGS_SAVED="$LDFLAGS"
150 LDFLAGS="$LDFLAGS $BOOST_LDFLAGS"
153 AC_REQUIRE([AC_PROG_CXX])
155 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
156 @%:@include <boost/version.hpp>
158 #if BOOST_VERSION >= $WANT_BOOST_VERSION
159 // Everything is okay
161 # error Boost version is too old
173 dnl if we found no boost with system layout we search for boost libraries
174 dnl built and installed without the --layout=system option or for a staged(not installed) version
175 if test "x$succeeded" != "xyes"; then
176 CPPFLAGS="$CPPFLAGS_SAVED"
177 LDFLAGS="$LDFLAGS_SAVED"
181 if test "$ac_boost_path" != ""; then
182 if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then
183 for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do
184 _version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'`
185 V_CHECK=`expr $_version_tmp \> $_version`
186 if test "$V_CHECK" = "1" ; then
187 _version=$_version_tmp
189 VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'`
190 BOOST_CPPFLAGS="-I$ac_boost_path/include/boost-$VERSION_UNDERSCORE"
192 dnl if nothing found search for layout used in Windows distributions
193 if test -z "$BOOST_CPPFLAGS"; then
194 if test -d "$ac_boost_path/boost" && test -r "$ac_boost_path/boost"; then
195 BOOST_CPPFLAGS="-I$ac_boost_path"
200 if test "$cross_compiling" != yes; then
201 for ac_boost_path in /usr /usr/local /opt /opt/local ; do
202 if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then
203 for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do
204 _version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'`
205 V_CHECK=`expr $_version_tmp \> $_version`
206 if test "$V_CHECK" = "1" ; then
207 _version=$_version_tmp
208 best_path=$ac_boost_path
214 VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'`
215 BOOST_CPPFLAGS="-I$best_path/include/boost-$VERSION_UNDERSCORE"
216 if test "$ac_boost_lib_path" = ""; then
217 for libsubdir in $libsubdirs ; do
218 if ls "$best_path/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi
220 BOOST_LDFLAGS="-L$best_path/$libsubdir"
224 if test "x$BOOST_ROOT" != "x"; then
225 for libsubdir in $libsubdirs ; do
226 if ls "$BOOST_ROOT/stage/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi
228 if test -d "$BOOST_ROOT" && test -r "$BOOST_ROOT" && test -d "$BOOST_ROOT/stage/$libsubdir" && test -r "$BOOST_ROOT/stage/$libsubdir"; then
229 version_dir=`expr //$BOOST_ROOT : '.*/\(.*\)'`
230 stage_version=`echo $version_dir | sed 's/boost_//' | sed 's/_/./g'`
231 stage_version_shorten=`expr $stage_version : '\([[0-9]]*\.[[0-9]]*\)'`
232 V_CHECK=`expr $stage_version_shorten \>\= $_version`
233 if test "$V_CHECK" = "1" -a "$ac_boost_lib_path" = "" ; then
234 AC_MSG_NOTICE(We will use a staged boost library from $BOOST_ROOT)
235 BOOST_CPPFLAGS="-I$BOOST_ROOT"
236 BOOST_LDFLAGS="-L$BOOST_ROOT/stage/$libsubdir"
242 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
244 LDFLAGS="$LDFLAGS $BOOST_LDFLAGS"
248 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
249 @%:@include <boost/version.hpp>
251 #if BOOST_VERSION >= $WANT_BOOST_VERSION
252 // Everything is okay
254 # error Boost version is too old
265 if test "$succeeded" != "yes" ; then
266 if test "$_version" = "0" ; then
267 AC_MSG_NOTICE([[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.]])
269 AC_MSG_NOTICE([Your boost libraries seems to old (version $_version).])
271 # execute ACTION-IF-NOT-FOUND (if present):
272 ifelse([$3], , :, [$3])
274 AC_SUBST(BOOST_CPPFLAGS)
275 AC_SUBST(BOOST_LDFLAGS)
276 AC_DEFINE(HAVE_BOOST,,[define if the Boost library is available])
277 # execute ACTION-IF-FOUND (if present):
278 ifelse([$2], , :, [$2])
281 CPPFLAGS="$CPPFLAGS_SAVED"
282 LDFLAGS="$LDFLAGS_SAVED"