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