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 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# 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 23 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 case $ax_arch in 95 x86_64|ppc64|s390x|sparc64|aarch64) 96 libsubdirs="lib64 lib lib64" 97 ;; 98 esac 99 100 dnl allow for real multi-arch paths e.g. /usr/lib/x86_64-linux-gnu. Give 101 dnl them priority over the other paths since, if libs are found there, they 102 dnl are almost assuredly the ones desired. 103 AC_REQUIRE([AC_CANONICAL_HOST]) 104 libsubdirs="lib/${host_cpu}-${host_os} $libsubdirs" 105 106 case ${host_cpu} in 107 i?86) 108 libsubdirs="lib/i386-${host_os} $libsubdirs" 109 ;; 110 esac 111 112 dnl first we check the system location for boost libraries 113 dnl this location ist chosen if boost libraries are installed with the --layout=system option 114 dnl or if you install boost with RPM 115 if test "$ac_boost_path" != ""; then 116 BOOST_CPPFLAGS="-I$ac_boost_path/include" 117 for ac_boost_path_tmp in $libsubdirs; do 118 if test -d "$ac_boost_path"/"$ac_boost_path_tmp" ; then 119 BOOST_LDFLAGS="-L$ac_boost_path/$ac_boost_path_tmp" 120 break 121 fi 122 done 123 elif test "$cross_compiling" != yes; then 124 for ac_boost_path_tmp in /usr /usr/local /opt /opt/local ; do 125 if test -d "$ac_boost_path_tmp/include/boost" && test -r "$ac_boost_path_tmp/include/boost"; then 126 for libsubdir in $libsubdirs ; do 127 if ls "$ac_boost_path_tmp/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi 128 done 129 BOOST_LDFLAGS="-L$ac_boost_path_tmp/$libsubdir" 130 BOOST_CPPFLAGS="-I$ac_boost_path_tmp/include" 131 break; 132 fi 133 done 134 fi 135 136 dnl overwrite ld flags if we have required special directory with 137 dnl --with-boost-libdir parameter 138 if test "$ac_boost_lib_path" != ""; then 139 BOOST_LDFLAGS="-L$ac_boost_lib_path" 140 fi 141 142 CPPFLAGS_SAVED="$CPPFLAGS" 143 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" 144 export CPPFLAGS 145 146 LDFLAGS_SAVED="$LDFLAGS" 147 LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" 148 export LDFLAGS 149 150 AC_REQUIRE([AC_PROG_CXX]) 151 AC_LANG_PUSH(C++) 152 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ 153 @%:@include <boost/version.hpp> 154 ]], [[ 155 #if BOOST_VERSION >= $WANT_BOOST_VERSION 156 // Everything is okay 157 #else 158 # error Boost version is too old 159 #endif 160 ]])],[ 161 AC_MSG_RESULT(yes) 162 succeeded=yes 163 found_system=yes 164 ],[ 165 ]) 166 AC_LANG_POP([C++]) 167 168 169 170 dnl if we found no boost with system layout we search for boost libraries 171 dnl built and installed without the --layout=system option or for a staged(not installed) version 172 if test "x$succeeded" != "xyes"; then 173 _version=0 174 if test "$ac_boost_path" != ""; then 175 if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then 176 for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do 177 _version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'` 178 V_CHECK=`expr $_version_tmp \> $_version` 179 if test "$V_CHECK" = "1" ; then 180 _version=$_version_tmp 181 fi 182 VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'` 183 BOOST_CPPFLAGS="-I$ac_boost_path/include/boost-$VERSION_UNDERSCORE" 184 done 185 fi 186 else 187 if test "$cross_compiling" != yes; then 188 for ac_boost_path in /usr /usr/local /opt /opt/local ; do 189 if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then 190 for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do 191 _version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'` 192 V_CHECK=`expr $_version_tmp \> $_version` 193 if test "$V_CHECK" = "1" ; then 194 _version=$_version_tmp 195 best_path=$ac_boost_path 196 fi 197 done 198 fi 199 done 200 201 VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'` 202 BOOST_CPPFLAGS="-I$best_path/include/boost-$VERSION_UNDERSCORE" 203 if test "$ac_boost_lib_path" = ""; then 204 for libsubdir in $libsubdirs ; do 205 if ls "$best_path/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi 206 done 207 BOOST_LDFLAGS="-L$best_path/$libsubdir" 208 fi 209 fi 210 211 if test "x$BOOST_ROOT" != "x"; then 212 for libsubdir in $libsubdirs ; do 213 if ls "$BOOST_ROOT/stage/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi 214 done 215 if test -d "$BOOST_ROOT" && test -r "$BOOST_ROOT" && test -d "$BOOST_ROOT/stage/$libsubdir" && test -r "$BOOST_ROOT/stage/$libsubdir"; then 216 version_dir=`expr //$BOOST_ROOT : '.*/\(.*\)'` 217 stage_version=`echo $version_dir | sed 's/boost_//' | sed 's/_/./g'` 218 stage_version_shorten=`expr $stage_version : '\([[0-9]]*\.[[0-9]]*\)'` 219 V_CHECK=`expr $stage_version_shorten \>\= $_version` 220 if test "$V_CHECK" = "1" -a "$ac_boost_lib_path" = "" ; then 221 AC_MSG_NOTICE(We will use a staged boost library from $BOOST_ROOT) 222 BOOST_CPPFLAGS="-I$BOOST_ROOT" 223 BOOST_LDFLAGS="-L$BOOST_ROOT/stage/$libsubdir" 224 fi 225 fi 226 fi 227 fi 228 229 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" 230 export CPPFLAGS 231 LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" 232 export LDFLAGS 233 234 AC_LANG_PUSH(C++) 235 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ 236 @%:@include <boost/version.hpp> 237 ]], [[ 238 #if BOOST_VERSION >= $WANT_BOOST_VERSION 239 // Everything is okay 240 #else 241 # error Boost version is too old 242 #endif 243 ]])],[ 244 AC_MSG_RESULT(yes) 245 succeeded=yes 246 found_system=yes 247 ],[ 248 ]) 249 AC_LANG_POP([C++]) 250 fi 251 252 if test "$succeeded" != "yes" ; then 253 if test "$_version" = "0" ; then 254 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.]]) 255 else 256 AC_MSG_NOTICE([Your boost libraries seems to old (version $_version).]) 257 fi 258 # execute ACTION-IF-NOT-FOUND (if present): 259 ifelse([$3], , :, [$3]) 260 else 261 AC_SUBST(BOOST_CPPFLAGS) 262 AC_SUBST(BOOST_LDFLAGS) 263 AC_DEFINE(HAVE_BOOST,,[define if the Boost library is available]) 264 # execute ACTION-IF-FOUND (if present): 265 ifelse([$2], , :, [$2]) 266 fi 267 268 CPPFLAGS="$CPPFLAGS_SAVED" 269 LDFLAGS="$LDFLAGS_SAVED" 270fi 271 272]) 273