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 26 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) 96 libsubdirs="lib64 libx32 lib lib64" 97 ;; 98 ppc64|s390x|sparc64|aarch64|ppc64le) 99 libsubdirs="lib64 lib lib64 ppc64le" 100 ;; 101 esac 102 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" 108 109 case ${host_cpu} in 110 i?86) 111 libsubdirs="lib/i386-${host_os} $libsubdirs" 112 ;; 113 esac 114 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" 123 break 124 fi 125 done 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 131 done 132 BOOST_LDFLAGS="-L$ac_boost_path_tmp/$libsubdir" 133 BOOST_CPPFLAGS="-I$ac_boost_path_tmp/include" 134 break; 135 fi 136 done 137 fi 138 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" 143 fi 144 145 CPPFLAGS_SAVED="$CPPFLAGS" 146 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" 147 export CPPFLAGS 148 149 LDFLAGS_SAVED="$LDFLAGS" 150 LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" 151 export LDFLAGS 152 153 AC_REQUIRE([AC_PROG_CXX]) 154 AC_LANG_PUSH(C++) 155 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ 156 @%:@include <boost/version.hpp> 157 ]], [[ 158 #if BOOST_VERSION >= $WANT_BOOST_VERSION 159 // Everything is okay 160 #else 161 # error Boost version is too old 162 #endif 163 ]])],[ 164 AC_MSG_RESULT(yes) 165 succeeded=yes 166 found_system=yes 167 ],[ 168 ]) 169 AC_LANG_POP([C++]) 170 171 172 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" 178 BOOST_CPPFLAGS= 179 BOOST_LDFLAGS= 180 _version=0 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 188 fi 189 VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'` 190 BOOST_CPPFLAGS="-I$ac_boost_path/include/boost-$VERSION_UNDERSCORE" 191 done 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" 196 fi 197 fi 198 fi 199 else 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 209 fi 210 done 211 fi 212 done 213 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 219 done 220 BOOST_LDFLAGS="-L$best_path/$libsubdir" 221 fi 222 fi 223 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 227 done 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" 237 fi 238 fi 239 fi 240 fi 241 242 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" 243 export CPPFLAGS 244 LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" 245 export LDFLAGS 246 247 AC_LANG_PUSH(C++) 248 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ 249 @%:@include <boost/version.hpp> 250 ]], [[ 251 #if BOOST_VERSION >= $WANT_BOOST_VERSION 252 // Everything is okay 253 #else 254 # error Boost version is too old 255 #endif 256 ]])],[ 257 AC_MSG_RESULT(yes) 258 succeeded=yes 259 found_system=yes 260 ],[ 261 ]) 262 AC_LANG_POP([C++]) 263 fi 264 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.]]) 268 else 269 AC_MSG_NOTICE([Your boost libraries seems to old (version $_version).]) 270 fi 271 # execute ACTION-IF-NOT-FOUND (if present): 272 ifelse([$3], , :, [$3]) 273 else 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]) 279 fi 280 281 CPPFLAGS="$CPPFLAGS_SAVED" 282 LDFLAGS="$LDFLAGS_SAVED" 283fi 284 285]) 286