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!
94 if test $ax_arch = x86_64 -o $ax_arch = ppc64 -o $ax_arch = ppc64le -o $ax_arch = s390x -o $ax_arch = sparc64 -o $ax_arch = aarch64; then
95 libsubdirs="lib64 lib lib64"
98 dnl first we check the system location for boost libraries
99 dnl this location is chosen if boost libraries are installed with the --layout=system option
100 dnl or if you install boost with RPM
101 if test "$ac_boost_path" != ""; then
102 BOOST_CPPFLAGS="-I$ac_boost_path/include"
103 for ac_boost_path_tmp in $libsubdirs; do
104 if test -d "$ac_boost_path"/"$ac_boost_path_tmp" ; then
105 BOOST_LDFLAGS="-L$ac_boost_path/$ac_boost_path_tmp"
110 if test "$cross_compiling" != yes; then
111 ac_boost_paths='/usr /usr/local /opt /opt/local'
113 ac_boost_paths="/usr/$host/sys-root/mingw"
115 for ac_boost_path_tmp in $ac_boost_paths ; do
116 if test -d "$ac_boost_path_tmp/include/boost" && test -r "$ac_boost_path_tmp/include/boost"; then
117 for libsubdir in $libsubdirs ; do
118 if ls "$ac_boost_path_tmp/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi
120 BOOST_LDFLAGS="-L$ac_boost_path_tmp/$libsubdir"
121 BOOST_CPPFLAGS="-I$ac_boost_path_tmp/include"
127 dnl overwrite ld flags if we have required special directory with
128 dnl --with-boost-libdir parameter
129 if test "$ac_boost_lib_path" != ""; then
130 BOOST_LDFLAGS="-L$ac_boost_lib_path"
133 CPPFLAGS_SAVED="$CPPFLAGS"
134 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
137 LDFLAGS_SAVED="$LDFLAGS"
138 LDFLAGS="$LDFLAGS $BOOST_LDFLAGS"
141 AC_REQUIRE([AC_PROG_CXX])
143 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
144 @%:@include <boost/version.hpp>
146 #if BOOST_VERSION >= $WANT_BOOST_VERSION
147 // Everything is okay
149 # error Boost version is too old
161 dnl if we found no boost with system layout we search for boost libraries
162 dnl built and installed without the --layout=system option or for a staged(not installed) version
163 if test "x$succeeded" != "xyes"; then
165 if test "$ac_boost_path" != ""; then
166 if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then
167 for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do
168 _version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'`
169 V_CHECK=`expr $_version_tmp \> $_version`
170 if test "$V_CHECK" = "1" ; then
171 _version=$_version_tmp
173 VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'`
174 BOOST_CPPFLAGS="-I$ac_boost_path/include/boost-$VERSION_UNDERSCORE"
178 if test "$cross_compiling" != yes; then
179 ac_boost_paths='/usr /usr/local /opt /opt/local'
181 ac_boost_paths="/usr/$host/sys-root/mingw"
183 for ac_boost_path in $ac_boost_paths ; do
184 if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then
185 for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do
186 _version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'`
187 V_CHECK=`expr $_version_tmp \> $_version`
188 if test "$V_CHECK" = "1" ; then
189 _version=$_version_tmp
190 best_path=$ac_boost_path
196 VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'`
197 BOOST_CPPFLAGS="-I$best_path/include/boost-$VERSION_UNDERSCORE"
198 if test "$ac_boost_lib_path" = ""; then
199 for libsubdir in $libsubdirs ; do
200 if ls "$best_path/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi
202 BOOST_LDFLAGS="-L$best_path/$libsubdir"
205 if test "x$BOOST_ROOT" != "x"; then
206 for libsubdir in $libsubdirs ; do
207 if ls "$BOOST_ROOT/stage/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi
209 if test -d "$BOOST_ROOT" && test -r "$BOOST_ROOT" && test -d "$BOOST_ROOT/stage/$libsubdir" && test -r "$BOOST_ROOT/stage/$libsubdir"; then
210 version_dir=`expr //$BOOST_ROOT : '.*/\(.*\)'`
211 stage_version=`echo $version_dir | sed 's/boost_//' | sed 's/_/./g'`
212 stage_version_shorten=`expr $stage_version : '\([[0-9]]*\.[[0-9]]*\)'`
213 V_CHECK=`expr $stage_version_shorten \>\= $_version`
214 if test "$V_CHECK" = "1" -a "$ac_boost_lib_path" = "" ; then
215 AC_MSG_NOTICE(We will use a staged boost library from $BOOST_ROOT)
216 BOOST_CPPFLAGS="-I$BOOST_ROOT"
217 BOOST_LDFLAGS="-L$BOOST_ROOT/stage/$libsubdir"
223 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
225 LDFLAGS="$LDFLAGS $BOOST_LDFLAGS"
229 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
230 @%:@include <boost/version.hpp>
232 #if BOOST_VERSION >= $WANT_BOOST_VERSION
233 // Everything is okay
235 # error Boost version is too old
246 if test "$succeeded" != "yes" ; then
247 if test "$_version" = "0" ; then
248 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.]])
250 AC_MSG_NOTICE([Your boost libraries seems to old (version $_version).])
252 # execute ACTION-IF-NOT-FOUND (if present):
253 ifelse([$3], , :, [$3])
255 AC_SUBST(BOOST_CPPFLAGS)
256 AC_SUBST(BOOST_LDFLAGS)
257 AC_DEFINE(HAVE_BOOST,,[define if the Boost library is available])
258 # execute ACTION-IF-FOUND (if present):
259 ifelse([$2], , :, [$2])
262 CPPFLAGS="$CPPFLAGS_SAVED"
263 LDFLAGS="$LDFLAGS_SAVED"