1899
|
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
|
|
38 AC_DEFUN([AX_BOOST_BASE],
|
|
39 [
|
|
40 AC_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
|
|
60 AC_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
|
|
74 if 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"
|
|
256 fi
|
|
257
|
|
258 ])
|