@ -1,5 +1,5 @@
# ===========================================================================
# ===========================================================================
# http://www.gnu.org/software/autoconf-archive/ax_boost_base.html
# https ://www.gnu.org/software/autoconf-archive/ax_boost_base.html
# ===========================================================================
# ===========================================================================
#
#
# SYNOPSIS
# SYNOPSIS
@ -33,7 +33,15 @@
# and this notice are preserved. This file is offered as-is, without any
# and this notice are preserved. This file is offered as-is, without any
# warranty.
# warranty.
#serial 26
#serial 42
# example boost program (need to pass version)
m4_define([_AX_BOOST_BASE_PROGRAM],
[AC_LANG_PROGRAM([[
#include <boost/version.hpp>
]],[[
(void) ((void)sizeof(char[1 - 2*!!((BOOST_VERSION) < ($1))]));
]])])
AC_DEFUN([AX_BOOST_BASE],
AC_DEFUN([AX_BOOST_BASE],
[
[
@ -44,104 +52,121 @@ AC_ARG_WITH([boost],
or disable it (ARG=no)
or disable it (ARG=no)
@<:@ARG=yes@:>@ ])],
@<:@ARG=yes@:>@ ])],
[
[
if test "$withval" = "no"; then
AS_CASE([$withval],
want_boost="no"
[no],[want_boost="no";_AX_BOOST_BASE_boost_path=""],
elif test "$withval" = "yes"; then
[yes],[want_boost="yes";_AX_BOOST_BASE_boost_path=""],
want_boost="yes"
[want_boost="yes";_AX_BOOST_BASE_boost_path="$withval"])
ac_boost_path=""
else
want_boost="yes"
ac_boost_path="$withval"
fi
],
],
[want_boost="yes"])
[want_boost="yes"])
AC_ARG_WITH([boost-libdir],
AC_ARG_WITH([boost-libdir],
AS_HELP_STRING([--with-boost-libdir=LIB_DIR],
[AS_HELP_STRING([--with-boost-libdir=LIB_DIR],
[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.]),
[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.])],
[
[
if test -d "$withval"
AS_IF([test -d "$withval"],
then
[_AX_BOOST_BASE_boost_lib_path="$withval"],
ac_boost_lib_path="$withval"
[AC_MSG_ERROR([--with-boost-libdir expected directory name])])
else
AC_MSG_ERROR(--with-boost-libdir expected directory name)
fi
],
],
[ac_boost_lib_path=""]
[_AX_BOOST_BASE_boost_lib_path=""])
)
if test "x$want_boost" = "xyes"; then
BOOST_LDFLAGS=""
boost_lib_version_req=ifelse([$1], ,1.20.0,$1)
BOOST_CPPFLAGS=""
boost_lib_version_req_shorten=`expr $boost_lib_version_req : '\([[0-9]]*\.[[0-9]]*\)'`
AS_IF([test "x$want_boost" = "xyes"],
boost_lib_version_req_major=`expr $boost_lib_version_req : '\([[0-9]]*\)'`
[_AX_BOOST_BASE_RUNDETECT([$1],[$2],[$3])])
boost_lib_version_req_minor=`expr $boost_lib_version_req : '[[0-9]]*\.\([[0-9]]*\)'`
AC_SUBST(BOOST_CPPFLAGS)
boost_lib_version_req_sub_minor=`expr $boost_lib_version_req : '[[0-9]]*\.[[0-9]]*\.\([[0-9]]*\)'`
AC_SUBST(BOOST_LDFLAGS)
if test "x$boost_lib_version_req_sub_minor" = "x" ; then
])
boost_lib_version_req_sub_minor="0"
fi
WANT_BOOST_VERSION=`expr $boost_lib_version_req_major \* 100000 \+ $boost_lib_version_req_minor \* 100 \+ $boost_lib_version_req_sub_minor`
# convert a version string in $2 to numeric and affect to polymorphic var $1
AC_MSG_CHECKING(for boostlib >= $boost_lib_version_req)
AC_DEFUN([_AX_BOOST_BASE_TONUMERICVERSION],[
AS_IF([test "x$2" = "x"],[_AX_BOOST_BASE_TONUMERICVERSION_req="1.20.0"],[_AX_BOOST_BASE_TONUMERICVERSION_req="$2"])
_AX_BOOST_BASE_TONUMERICVERSION_req_shorten=`expr $_AX_BOOST_BASE_TONUMERICVERSION_req : '\([[0-9]]*\.[[0-9]]*\)'`
_AX_BOOST_BASE_TONUMERICVERSION_req_major=`expr $_AX_BOOST_BASE_TONUMERICVERSION_req : '\([[0-9]]*\)'`
AS_IF([test "x$_AX_BOOST_BASE_TONUMERICVERSION_req_major" = "x"],
[AC_MSG_ERROR([You should at least specify libboost major version])])
_AX_BOOST_BASE_TONUMERICVERSION_req_minor=`expr $_AX_BOOST_BASE_TONUMERICVERSION_req : '[[0-9]]*\.\([[0-9]]*\)'`
AS_IF([test "x$_AX_BOOST_BASE_TONUMERICVERSION_req_minor" = "x"],
[_AX_BOOST_BASE_TONUMERICVERSION_req_minor="0"])
_AX_BOOST_BASE_TONUMERICVERSION_req_sub_minor=`expr $_AX_BOOST_BASE_TONUMERICVERSION_req : '[[0-9]]*\.[[0-9]]*\.\([[0-9]]*\)'`
AS_IF([test "X$_AX_BOOST_BASE_TONUMERICVERSION_req_sub_minor" = "X"],
[_AX_BOOST_BASE_TONUMERICVERSION_req_sub_minor="0"])
_AX_BOOST_BASE_TONUMERICVERSION_RET=`expr $_AX_BOOST_BASE_TONUMERICVERSION_req_major \* 100000 \+ $_AX_BOOST_BASE_TONUMERICVERSION_req_minor \* 100 \+ $_AX_BOOST_BASE_TONUMERICVERSION_req_sub_minor`
AS_VAR_SET($1,$_AX_BOOST_BASE_TONUMERICVERSION_RET)
])
dnl Run the detection of boost should be run only if $want_boost
AC_DEFUN([_AX_BOOST_BASE_RUNDETECT],[
_AX_BOOST_BASE_TONUMERICVERSION(WANT_BOOST_VERSION,[$1])
succeeded=no
succeeded=no
AC_REQUIRE([AC_CANONICAL_HOST])
dnl On 64-bit systems check for system libraries in both lib64 and lib.
dnl On 64-bit systems check for system libraries in both lib64 and lib.
dnl The former is specified by FHS, but e.g. Debian does not adhere to
dnl The former is specified by FHS, but e.g. Debian does not adhere to
dnl this (as it rises problems for generic multi-arch support).
dnl this (as it rises problems for generic multi-arch support).
dnl The last entry in the list is chosen by default when no libraries
dnl The last entry in the list is chosen by default when no libraries
dnl are found, e.g. when only header-only libraries are installed!
dnl are found, e.g. when only header-only libraries are installed!
libsubdirs="lib"
AS_CASE([${host_cpu}],
ax_arch=`uname -m`
[x86_64],[libsubdirs="lib64 libx32 lib lib64"],
case $ax_arch in
[ppc64|s390x|sparc64|aarch64|ppc64le],[libsubdirs="lib64 lib lib64"],
x86_64)
[libsubdirs="lib"],
libsubdirs="lib64 libx32 lib lib64"
)
;;
ppc64|s390x|sparc64|aarch64|ppc64le)
libsubdirs="lib64 lib lib64 ppc64le"
;;
esac
dnl allow for real multi-arch paths e.g. /usr/lib/x86_64-linux-gnu. Give
dnl allow for real multi-arch paths e.g. /usr/lib/x86_64-linux-gnu. Give
dnl them priority over the other paths since, if libs are found there, they
dnl them priority over the other paths since, if libs are found there, they
dnl are almost assuredly the ones desired.
dnl are almost assuredly the ones desired.
AC_REQUIRE([AC_CANONICAL_HOST])
AS_CASE([${host_cpu}],
libsubdirs="lib/${host_cpu}-${host_os} $libsubdirs"
[i?86],[multiarch_libsubdir="lib/i386-${host_os}"],
[multiarch_libsubdir="lib/${host_cpu}-${host_os}"]
case ${host_cpu} in
)
i?86)
libsubdirs="lib/i386-${host_os} $libsubdirs"
;;
esac
dnl first we check the system location for boost libraries
dnl first we check the system location for boost libraries
dnl this location ist chosen if boost libraries are installed with the --layout=system option
dnl this location ist chosen if boost libraries are installed with the --layout=system option
dnl or if you install boost with RPM
dnl or if you install boost with RPM
if test "$ac_boost_path" != ""; then
AS_IF([test "x$_AX_BOOST_BASE_boost_path" != "x"],[
BOOST_CPPFLAGS="-I$ac_boost_path/include"
AC_MSG_CHECKING([for boostlib >= $1 ($WANT_BOOST_VERSION) includes in "$_AX_BOOST_BASE_boost_path/include"])
for ac_boost_path_tmp in $libsubdirs; do
AS_IF([test -d "$_AX_BOOST_BASE_boost_path/include" && test -r "$_AX_BOOST_BASE_boost_path/include"],[
if test -d "$ac_boost_path"/"$ac_boost_path_tmp" ; then
AC_MSG_RESULT([yes])
BOOST_LDFLAGS="-L$ac_boost_path/$ac_boost_path_tmp"
BOOST_CPPFLAGS="-I$_AX_BOOST_BASE_boost_path/include"
break
for _AX_BOOST_BASE_boost_path_tmp in $multiarch_libsubdir $libsubdirs; do
AC_MSG_CHECKING([for boostlib >= $1 ($WANT_BOOST_VERSION) lib path in "$_AX_BOOST_BASE_boost_path/$_AX_BOOST_BASE_boost_path_tmp"])
AS_IF([test -d "$_AX_BOOST_BASE_boost_path/$_AX_BOOST_BASE_boost_path_tmp" && test -r "$_AX_BOOST_BASE_boost_path/$_AX_BOOST_BASE_boost_path_tmp" ],[
AC_MSG_RESULT([yes])
BOOST_LDFLAGS="-L$_AX_BOOST_BASE_boost_path/$_AX_BOOST_BASE_boost_path_tmp";
break;
],
[AC_MSG_RESULT([no])])
done],[
AC_MSG_RESULT([no])])
],[
if test X"$cross_compiling" = Xyes; then
search_libsubdirs=$multiarch_libsubdir
else
search_libsubdirs="$multiarch_libsubdir $libsubdirs"
fi
fi
for _AX_BOOST_BASE_boost_path_tmp in /usr /usr/local /opt /opt/local ; do
if test -d "$_AX_BOOST_BASE_boost_path_tmp/include/boost" && test -r "$_AX_BOOST_BASE_boost_path_tmp/include/boost" ; then
for libsubdir in $search_libsubdirs ; do
if ls "$_AX_BOOST_BASE_boost_path_tmp/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi
done
done
elif test "$cross_compiling" != yes; then
BOOST_LDFLAGS="-L$_AX_BOOST_BASE_boost_path_tmp/$libsubdir"
for ac_boost_path_tmp in /usr /usr/local /opt /opt/local ; do
BOOST_CPPFLAGS="-I$_AX_BOOST_BASE_boost_path_tmp/include"
if test -d "$ac_boost_path_tmp/include/boost" && test -r "$ac_boost_path_tmp/include/boost"; then
for libsubdir in $libsubdirs ; do
if ls "$ac_boost_path_tmp/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi
done
BOOST_LDFLAGS="-L$ac_boost_path_tmp/$libsubdir"
BOOST_CPPFLAGS="-I$ac_boost_path_tmp/include"
break;
break;
fi
fi
done
done
fi
])
dnl overwrite ld flags if we have required special directory with
dnl overwrite ld flags if we have required special directory with
dnl --with-boost-libdir parameter
dnl --with-boost-libdir parameter
if test "$ac_boost_lib_path" != ""; then
AS_IF([test "x$_AX_BOOST_BASE_boost_lib_path" != "x"],
BOOST_LDFLAGS="-L$ac_boost_lib_path"
[BOOST_LDFLAGS="-L$_AX_BOOST_BASE_boost_lib_path"])
fi
AC_MSG_CHECKING([for boostlib >= $1 ($WANT_BOOST_VERSION)])
CPPFLAGS_SAVED="$CPPFLAGS"
CPPFLAGS_SAVED="$CPPFLAGS"
CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
export CPPFLAGS
export CPPFLAGS
@ -152,15 +177,7 @@ if test "x$want_boost" = "xyes"; then
AC_REQUIRE([AC_PROG_CXX])
AC_REQUIRE([AC_PROG_CXX])
AC_LANG_PUSH(C++)
AC_LANG_PUSH(C++)
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
AC_COMPILE_IFELSE([_AX_BOOST_BASE_PROGRAM($WANT_BOOST_VERSION)],[
@%:@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)
AC_MSG_RESULT(yes)
succeeded=yes
succeeded=yes
found_system=yes
found_system=yes
@ -172,40 +189,50 @@ if test "x$want_boost" = "xyes"; then
dnl if we found no boost with system layout we search for boost libraries
dnl if we found no boost with system layout we search for boost libraries
dnl built and installed without the --layout=system option or for a staged(not installed) version
dnl built and installed without the --layout=system option or for a staged(not installed) version
if test "x$succeeded" != "xyes"; then
if test "x$succeeded" != "xyes" ; then
CPPFLAGS="$CPPFLAGS_SAVED"
CPPFLAGS="$CPPFLAGS_SAVED"
LDFLAGS="$LDFLAGS_SAVED"
LDFLAGS="$LDFLAGS_SAVED"
BOOST_CPPFLAGS=
BOOST_CPPFLAGS=
if test -z "$_AX_BOOST_BASE_boost_lib_path" ; then
BOOST_LDFLAGS=
BOOST_LDFLAGS=
fi
_version=0
_version=0
if test "$ac_boost_path" != "" ; then
if test -n "$_AX_BOOST_BASE_boost_path" ; then
if test -d "$ac_boost_path" && test -r "$ac _boost_path"; then
if test -d "$_AX_BOOST_BASE_boost_path" && test -r "$_AX_BOOST_BASE _boost_path"; then
for i in `ls -d $ac _boost_path/include/boost-* 2>/dev/null`; do
for i in `ls -d $_AX_BOOST_BASE _boost_path/include/boost-* 2>/dev/null`; do
_version_tmp=`echo $i | sed "s#$ac _boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'`
_version_tmp=`echo $i | sed "s#$_AX_BOOST_BASE _boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'`
V_CHECK=`expr $_version_tmp \> $_version`
V_CHECK=`expr $_version_tmp \> $_version`
if test "$V_CHECK" = "1" ; then
if test "x $V_CHECK" = "x 1" ; then
_version=$_version_tmp
_version=$_version_tmp
fi
fi
VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'`
VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'`
BOOST_CPPFLAGS="-I$ac _boost_path/include/boost-$VERSION_UNDERSCORE"
BOOST_CPPFLAGS="-I$_AX_BOOST_BASE _boost_path/include/boost-$VERSION_UNDERSCORE"
done
done
dnl if nothing found search for layout used in Windows distributions
dnl if nothing found search for layout used in Windows distributions
if test -z "$BOOST_CPPFLAGS"; then
if test -z "$BOOST_CPPFLAGS"; then
if test -d "$ac_boost_path/boost" && test -r "$ac _boost_path/boost"; then
if test -d "$_AX_BOOST_BASE_boost_path/boost" && test -r "$_AX_BOOST_BASE _boost_path/boost"; then
BOOST_CPPFLAGS="-I$ac _boost_path"
BOOST_CPPFLAGS="-I$_AX_BOOST_BASE _boost_path"
fi
fi
fi
fi
dnl if we found something and BOOST_LDFLAGS was unset before
dnl (because "$_AX_BOOST_BASE_boost_lib_path" = ""), set it here.
if test -n "$BOOST_CPPFLAGS" && test -z "$BOOST_LDFLAGS"; then
for libsubdir in $libsubdirs ; do
if ls "$_AX_BOOST_BASE_boost_path/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi
done
BOOST_LDFLAGS="-L$_AX_BOOST_BASE_boost_path/$libsubdir"
fi
fi
fi
else
else
if test "$cross_compiling" != yes; then
if test "x $cross_compiling" != "x yes" ; then
for ac_boost_path in /usr /usr/local /opt /opt/local ; do
for _AX_BOOST_BASE _boost_path in /usr /usr/local /opt /opt/local ; do
if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then
if test -d "$_AX_BOOST_BASE_boost_path" && test -r "$_AX_BOOST_BASE_boost_path" ; then
for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do
for i in `ls -d $_AX_BOOST_BASE _boost_path/include/boost-* 2>/dev/null`; do
_version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'`
_version_tmp=`echo $i | sed "s#$_AX_BOOST_BASE _boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'`
V_CHECK=`expr $_version_tmp \> $_version`
V_CHECK=`expr $_version_tmp \> $_version`
if test "$V_CHECK" = "1" ; then
if test "x $V_CHECK" = "x 1" ; then
_version=$_version_tmp
_version=$_version_tmp
best_path=$ac _boost_path
best_path=$_AX_BOOST_BASE _boost_path
fi
fi
done
done
fi
fi
@ -213,7 +240,7 @@ if test "x$want_boost" = "xyes"; then
VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'`
VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'`
BOOST_CPPFLAGS="-I$best_path/include/boost-$VERSION_UNDERSCORE"
BOOST_CPPFLAGS="-I$best_path/include/boost-$VERSION_UNDERSCORE"
if test "$ac_boost_lib_path" = "" ; then
if test -z "$_AX_BOOST_BASE_boost_lib_path" ; then
for libsubdir in $libsubdirs ; do
for libsubdir in $libsubdirs ; do
if ls "$best_path/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi
if ls "$best_path/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi
done
done
@ -221,7 +248,7 @@ if test "x$want_boost" = "xyes"; then
fi
fi
fi
fi
if test "x $BOOST_ROOT" != "x" ; then
if test -n "$BOOST_ROOT" ; then
for libsubdir in $libsubdirs ; do
for libsubdir in $libsubdirs ; do
if ls "$BOOST_ROOT/stage/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi
if ls "$BOOST_ROOT/stage/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi
done
done
@ -230,7 +257,7 @@ if test "x$want_boost" = "xyes"; then
stage_version=`echo $version_dir | sed 's/boost_//' | sed 's/_/./g'`
stage_version=`echo $version_dir | sed 's/boost_//' | sed 's/_/./g'`
stage_version_shorten=`expr $stage_version : '\([[0-9]]*\.[[0-9]]*\)'`
stage_version_shorten=`expr $stage_version : '\([[0-9]]*\.[[0-9]]*\)'`
V_CHECK=`expr $stage_version_shorten \>\= $_version`
V_CHECK=`expr $stage_version_shorten \>\= $_version`
if test "$V_CHECK" = "1" -a "$ac_boost_lib_path" = " " ; then
if test "x$V_CHECK" = "x1" && test -z "$_AX_BOOST_BASE_boost_lib_path " ; then
AC_MSG_NOTICE(We will use a staged boost library from $BOOST_ROOT)
AC_MSG_NOTICE(We will use a staged boost library from $BOOST_ROOT)
BOOST_CPPFLAGS="-I$BOOST_ROOT"
BOOST_CPPFLAGS="-I$BOOST_ROOT"
BOOST_LDFLAGS="-L$BOOST_ROOT/stage/$libsubdir"
BOOST_LDFLAGS="-L$BOOST_ROOT/stage/$libsubdir"
@ -245,15 +272,7 @@ if test "x$want_boost" = "xyes"; then
export LDFLAGS
export LDFLAGS
AC_LANG_PUSH(C++)
AC_LANG_PUSH(C++)
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
AC_COMPILE_IFELSE([_AX_BOOST_BASE_PROGRAM($WANT_BOOST_VERSION)],[
@%:@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)
AC_MSG_RESULT(yes)
succeeded=yes
succeeded=yes
found_system=yes
found_system=yes
@ -262,17 +281,15 @@ if test "x$want_boost" = "xyes"; then
AC_LANG_POP([C++])
AC_LANG_POP([C++])
fi
fi
if test "$succeeded" != "yes" ; then
if test "x $succeeded" != "x yes" ; then
if test "$_version" = "0" ; then
if test "x $_version" = "x 0" ; then
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.]])
AC_MSG_NOTICE([[We could not detect the boost libraries (version $1 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.]])
else
else
AC_MSG_NOTICE([Your boost libraries seems to old (version $_version).])
AC_MSG_NOTICE([Your boost libraries seems to old (version $_version).])
fi
fi
# execute ACTION-IF-NOT-FOUND (if present):
# execute ACTION-IF-NOT-FOUND (if present):
ifelse([$3], , :, [$3])
ifelse([$3], , :, [$3])
else
else
AC_SUBST(BOOST_CPPFLAGS)
AC_SUBST(BOOST_LDFLAGS)
AC_DEFINE(HAVE_BOOST,,[define if the Boost library is available])
AC_DEFINE(HAVE_BOOST,,[define if the Boost library is available])
# execute ACTION-IF-FOUND (if present):
# execute ACTION-IF-FOUND (if present):
ifelse([$2], , :, [$2])
ifelse([$2], , :, [$2])
@ -280,6 +297,5 @@ if test "x$want_boost" = "xyes"; then
CPPFLAGS="$CPPFLAGS_SAVED"
CPPFLAGS="$CPPFLAGS_SAVED"
LDFLAGS="$LDFLAGS_SAVED"
LDFLAGS="$LDFLAGS_SAVED"
fi
])
])