1# =========================================================================== 2# http://www.gnu.org/software/autoconf-archive/ax_boost_base.html 3# =========================================================================== 4# 5# SYNOPSIS 6# 7# AX_BOOST_BASE([MINIMUM-VERSION], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) 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 searches 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# LICENSE 27# 28# Copyright (c) 2008 Thomas Porschberg <thomas@randspringer.de> 29# Copyright (c) 2009 Peter Adolphs 30# 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 34# warranty. 35 36#serial 20 37 38AC_DEFUN([AX_BOOST_BASE], 39[ 40AC_ARG_WITH([boost], 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) 45 @<:@ARG=yes@:>@ ])], 46 [ 47 if test "$withval" = "no"; then 48 want_boost="no" 49 elif test "$withval" = "yes"; then 50 want_boost="yes" 51 ac_boost_path="" 52 else 53 want_boost="yes" 54 ac_boost_path="$withval" 55 fi 56 ], 57 [want_boost="yes"]) 58 59 60AC_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.]), 63 [ 64 if test -d "$withval" 65 then 66 ac_boost_lib_path="$withval" 67 else 68 AC_MSG_ERROR(--with-boost-libdir expected directory name) 69 fi 70 ], 71 [ac_boost_lib_path=""] 72) 73 74if 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" 82 fi 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) 85 succeeded=no 86 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! 92 libsubdirs="lib" 93 ax_arch=`uname -m` 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" 96 fi 97 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" 106 break 107 fi 108 done 109 else 110 if test "$cross_compiling" != yes; then 111 ac_boost_paths='/usr /usr/local /opt /opt/local' 112 else 113 ac_boost_paths="/usr/$host/sys-root/mingw" 114 fi 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 119 done 120 BOOST_LDFLAGS="-L$ac_boost_path_tmp/$libsubdir" 121 BOOST_CPPFLAGS="-I$ac_boost_path_tmp/include" 122 break; 123 fi 124 done 125 fi 126 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" 131 fi 132 133 CPPFLAGS_SAVED="$CPPFLAGS" 134 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" 135 export CPPFLAGS 136 137 LDFLAGS_SAVED="$LDFLAGS" 138 LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" 139 export LDFLAGS 140 141 AC_REQUIRE([AC_PROG_CXX]) 142 AC_LANG_PUSH(C++) 143 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ 144 @%:@include <boost/version.hpp> 145 ]], [[ 146 #if BOOST_VERSION >= $WANT_BOOST_VERSION 147 // Everything is okay 148 #else 149 # error Boost version is too old 150 #endif 151 ]])],[ 152 AC_MSG_RESULT(yes) 153 succeeded=yes 154 found_system=yes 155 ],[ 156 ]) 157 AC_LANG_POP([C++]) 158 159 160 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 164 _version=0 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 172 fi 173 VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'` 174 BOOST_CPPFLAGS="-I$ac_boost_path/include/boost-$VERSION_UNDERSCORE" 175 done 176 fi 177 else 178 if test "$cross_compiling" != yes; then 179 ac_boost_paths='/usr /usr/local /opt /opt/local' 180 else 181 ac_boost_paths="/usr/$host/sys-root/mingw" 182 fi 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 191 fi 192 done 193 fi 194 done 195 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 201 done 202 BOOST_LDFLAGS="-L$best_path/$libsubdir" 203 fi 204 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 208 done 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" 218 fi 219 fi 220 fi 221 fi 222 223 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" 224 export CPPFLAGS 225 LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" 226 export LDFLAGS 227 228 AC_LANG_PUSH(C++) 229 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ 230 @%:@include <boost/version.hpp> 231 ]], [[ 232 #if BOOST_VERSION >= $WANT_BOOST_VERSION 233 // Everything is okay 234 #else 235 # error Boost version is too old 236 #endif 237 ]])],[ 238 AC_MSG_RESULT(yes) 239 succeeded=yes 240 found_system=yes 241 ],[ 242 ]) 243 AC_LANG_POP([C++]) 244 fi 245 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.]]) 249 else 250 AC_MSG_NOTICE([Your boost libraries seems to old (version $_version).]) 251 fi 252 # execute ACTION-IF-NOT-FOUND (if present): 253 ifelse([$3], , :, [$3]) 254 else 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]) 260 fi 261 262 CPPFLAGS="$CPPFLAGS_SAVED" 263 LDFLAGS="$LDFLAGS_SAVED" 264fi 265 266]) 267