Boost logo

Boost :

From: Thomas Porschberg (thomas.porschberg_at_[hidden])
Date: 2006-01-02 09:21:06


Hi,
I updated the macro. If a path to --with-boost is given I assume
there is a installed boost version.
E.g. --with-boost=/usr/local means I can find
include files under /usr/local/include/boost-*
and the libs in /usr/local/lib.
If multiple boost-installations are found I take the newest one.
If no path was specified I look in /usr /usr/local and /opt
and assume an installed boost library (and no staged one).
As a last resort I evaluate $BOOST_ROOT.
Any further thoughts ?

AC_DEFUN([AX_PATH_BOOST], [
        boost_lib_version_req=ifelse([$1], ,1.20.0,$1)
        boost_lib_version_req_shorten=`expr $boost_lib_version_req : '\([[0-9]]*\.
[[0-9]]*\)'`
        boost_lib_version_req_major=`expr $boost_lib_version_req : '\([[0-9]]*\)'`
        boost_lib_version_req_minor=`expr $boost_lib_version_req : '[[0-9]]*\.
\([[0-9]]*\)'`
        boost_lib_version_req_sub_minor=`expr $boost_lib_version_req : '[[0-9]]*\.
[[0-9]]*\.\([[0-9]]*\)'`
        if test "x$boost_lib_version_req_sub_minor" = "x" ; then
                boost_lib_version_req_sub_minor="0"
    fi
        
        AC_MSG_CHECKING(for boostlib >= $boost_lib_version_req)
        succeeded=no

        AC_ARG_WITH(boost, [ --with-boost=DIR root directory for boost library ],
[
                if test "$withval" = "no"; then
                        AC_MSG_ERROR('You specified --with-boost=no.
                   Sorry we need boost. Please download from http://boost.org.')
                elif test "$withval" = "yes"; then
                        ac_boost_path=""
                else
                        ac_boost_path="$withval"
                fi
        ],[ac_boost_path=""])

        _version=0
        if test "$ac_boost_path" != ""; then
                BOOST_LDFLAGS="-L$ac_boost_path/lib"
                if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then
                        for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`;
do
                                _version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed
's/\/include\/boost-//' | sed 's/_/./'`
                                V_CHECK=`expr $_version_tmp \> $_version`
                                if test "$V_CHECK" = "1" ; then
                                        _version=$_version_tmp
                                fi
                                VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'`
                                BOOST_CPPFLAGS="-I$ac_boost_path/include/boost-
$VERSION_UNDERSCORE"
                        done
                fi
        else
                for ac_boost_path in /usr /usr/local/ /opt ; do
                        if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then
                                for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/
null`; do
                                        _version_tmp=`echo $i | sed "s#$ac_boost_path##" |
sed 's/\/include\/boost-//' | sed 's/_/./'`
                                        V_CHECK=`expr $_version_tmp \> $_version`
                                        if test "$V_CHECK" = "1" ; then
                                                _version=$_version_tmp
                                                best_path=$ac_boost_path
                                        fi
                                done
                        fi
                done

                VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'`
                BOOST_CPPFLAGS="-I$best_path/include/boost-$VERSION_UNDERSCORE"
                BOOST_LDFLAGS="-L$best_path/lib"

            if test "x$BOOST_ROOT" != "x"; then
                        if test -d "$BOOST_ROOT" && test -r "$BOOST_ROOT"; then
                                version_dir=`expr //$BOOST_ROOT : '.*/\(.*\)'`
                                stage_version=`echo $version_dir | sed 's/boost_//' |
sed 's/_/./g'`
                                stage_version_shorten=`expr $stage_version : '\([[0-9]]
*\.[[0-9]]*\)'`
                                V_CHECK=`expr $stage_version_shorten \>\= $_version`
                                if test "$V_CHECK" = "1" ; then
                                        AC_MSG_NOTICE(We will use a staged boost library
from $BOOST_ROOT)
                                        BOOST_CPPFLAGS="-I$BOOST_ROOT"
                                        BOOST_LDFLAGS="-L$BOOST_ROOT/stage/lib"
                                fi
                        fi
            fi

        fi

        AC_SUBST(BOOST_CPPFLAGS)
        AC_SUBST(BOOST_LDFLAGS)

        CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
        export CPPFLAGS
        LDFLAGS="$LDFLAGS $BOOST_LDFLAGS"
        export LDFLAGS

        WANT_BOOST_VERSION=`expr $boost_lib_version_req_major \* 100000 \+
$boost_lib_version_req_minor \* 100 \+ $boost_lib_version_req_sub_minor`

     AC_TRY_COMPILE(
       [
#include <boost/version.hpp>
],
       [
#if BOOST_VERSION >= $WANT_BOOST_VERSION
// Everything is okay
#else
# error Boost version is too old
#endif

],
       [
         AC_MSG_RESULT(yes ($_version))
                 succeeded=yes
         ifelse([$2], , :, [$2])
       ],
       [
         AC_MSG_RESULT(no ($_version))
         ifelse([$3], , :, [$3])
       ])

        if test "$VERSION_CHECK" = "1" ; then
                succeeded=yes
        fi

        if test "$succeeded" != "yes" ; then
                if test "$_version" = "0" ; then
                        AC_MSG_ERROR('We did not find a directory include/boost-
<version>
                   under $ac_boost_path.
                   This means we could not detect the boost libraries.
                   Sorry we need boost. Please download from http://boost.org.
                   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')
                else
                        AC_MSG_ERROR('Your boost libraries seems to old (version
$_version).
                   We need at least $boost_lib_version_shorten')
                fi
        fi

        
])


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk