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