]>
Commit | Line | Data |
---|---|---|
94ac5f34 | 1 | # boost.m4: Locate Boost headers and libraries for autoconf-based projects. |
2187934a | 2 | # Copyright (C) 2007-2011, 2014 Benoit Sigoure <tsuna@lrde.epita.fr> |
94ac5f34 PD |
3 | # |
4 | # This program is free software: you can redistribute it and/or modify | |
5 | # it under the terms of the GNU General Public License as published by | |
6 | # the Free Software Foundation, either version 3 of the License, or | |
7 | # (at your option) any later version. | |
8 | # | |
9 | # Additional permission under section 7 of the GNU General Public | |
10 | # License, version 3 ("GPLv3"): | |
11 | # | |
12 | # If you convey this file as part of a work that contains a | |
13 | # configuration script generated by Autoconf, you may do so under | |
14 | # terms of your choice. | |
15 | # | |
16 | # This program is distributed in the hope that it will be useful, | |
17 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
18 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
19 | # GNU General Public License for more details. | |
20 | # | |
21 | # You should have received a copy of the GNU General Public License | |
22 | # along with this program. If not, see <http://www.gnu.org/licenses/>. | |
23 | ||
24 | m4_define([_BOOST_SERIAL], [m4_translit([ | |
2bcb6ea0 | 25 | # serial 32 |
94ac5f34 PD |
26 | ], [# |
27 | ], [])]) | |
28 | ||
0b59e24e | 29 | # Original sources can be found at http://github.com/tsuna/boost.m4 |
94ac5f34 | 30 | # You can fetch the latest version of the script by doing: |
0b59e24e | 31 | # wget http://github.com/tsuna/boost.m4/raw/master/build-aux/boost.m4 |
94ac5f34 PD |
32 | |
33 | # ------ # | |
34 | # README # | |
35 | # ------ # | |
36 | ||
37 | # This file provides several macros to use the various Boost libraries. | |
38 | # The first macro is BOOST_REQUIRE. It will simply check if it's possible to | |
39 | # find the Boost headers of a given (optional) minimum version and it will | |
40 | # define BOOST_CPPFLAGS accordingly. It will add an option --with-boost to | |
41 | # your configure so that users can specify non standard locations. | |
42 | # If the user's environment contains BOOST_ROOT and --with-boost was not | |
43 | # specified, --with-boost=$BOOST_ROOT is implicitly used. | |
44 | # For more README and documentation, go to http://github.com/tsuna/boost.m4 | |
45 | # Note: THESE MACROS ASSUME THAT YOU USE LIBTOOL. If you don't, don't worry, | |
46 | # simply read the README, it will show you what to do step by step. | |
47 | ||
48 | m4_pattern_forbid([^_?(BOOST|Boost)_]) | |
49 | ||
50 | ||
51 | # _BOOST_SED_CPP(SED-PROGRAM, PROGRAM, | |
52 | # [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) | |
53 | # -------------------------------------------------------- | |
54 | # Same as AC_EGREP_CPP, but leave the result in conftest.i. | |
55 | # | |
56 | # SED-PROGRAM is *not* overquoted, as in AC_EGREP_CPP. It is expanded | |
57 | # in double-quotes, so escape your double quotes. | |
58 | # | |
59 | # It could be useful to turn this into a macro which extracts the | |
60 | # value of any macro. | |
61 | m4_define([_BOOST_SED_CPP], | |
2187934a RK |
62 | [AC_LANG_PUSH([C++])dnl |
63 | AC_LANG_PREPROC_REQUIRE()dnl | |
94ac5f34 PD |
64 | AC_REQUIRE([AC_PROG_SED])dnl |
65 | AC_LANG_CONFTEST([AC_LANG_SOURCE([[$2]])]) | |
66 | AS_IF([dnl eval is necessary to expand ac_cpp. | |
67 | dnl Ultrix and Pyramid sh refuse to redirect output of eval, so use subshell. | |
68 | dnl Beware of Windows end-of-lines, for instance if we are running | |
69 | dnl some Windows programs under Wine. In that case, boost/version.hpp | |
70 | dnl is certainly using "\r\n", but the regular Unix shell will only | |
71 | dnl strip `\n' with backquotes, not the `\r'. This results in | |
72 | dnl boost_cv_lib_version='1_37\r' for instance, which breaks | |
73 | dnl everything else. | |
74 | dnl Cannot use 'dnl' after [$4] because a trailing dnl may break AC_CACHE_CHECK | |
2187934a RK |
75 | dnl |
76 | dnl Beware that GCC 5, when expanding macros, may embed # line directives | |
77 | dnl a within single line: | |
78 | dnl | |
79 | dnl # 1 "conftest.cc" | |
80 | dnl # 1 "<built-in>" | |
81 | dnl # 1 "<command-line>" | |
82 | dnl # 1 "conftest.cc" | |
83 | dnl # 1 "/opt/local/include/boost/version.hpp" 1 3 | |
84 | dnl # 2 "conftest.cc" 2 | |
85 | dnl boost-lib-version = | |
86 | dnl # 2 "conftest.cc" 3 | |
87 | dnl "1_56" | |
88 | dnl | |
a0e4992b | 89 | dnl So get rid of the # and empty lines, and glue the remaining ones together. |
94ac5f34 | 90 | (eval "$ac_cpp conftest.$ac_ext") 2>&AS_MESSAGE_LOG_FD | |
2187934a | 91 | grep -v '#' | |
a0e4992b | 92 | grep -v '^[[[:space:]]]*$' | |
94ac5f34 | 93 | tr -d '\r' | |
2187934a | 94 | tr -s '\n' ' ' | |
94ac5f34 PD |
95 | $SED -n -e "$1" >conftest.i 2>&1], |
96 | [$3], | |
97 | [$4]) | |
98 | rm -rf conftest* | |
2187934a RK |
99 | AC_LANG_POP([C++])dnl |
100 | ])# _BOOST_SED_CPP | |
94ac5f34 PD |
101 | |
102 | ||
103 | ||
104 | # BOOST_REQUIRE([VERSION], [ACTION-IF-NOT-FOUND]) | |
105 | # ----------------------------------------------- | |
106 | # Look for Boost. If version is given, it must either be a literal of the form | |
107 | # "X.Y.Z" where X, Y and Z are integers (the ".Z" part being optional) or a | |
108 | # variable "$var". | |
109 | # Defines the value BOOST_CPPFLAGS. This macro only checks for headers with | |
110 | # the required version, it does not check for any of the Boost libraries. | |
111 | # On # success, defines HAVE_BOOST. On failure, calls the optional | |
112 | # ACTION-IF-NOT-FOUND action if one was supplied. | |
113 | # Otherwise aborts with an error message. | |
b0d6e9e6 | 114 | AC_DEFUN_ONCE([BOOST_REQUIRE], |
94ac5f34 PD |
115 | [AC_REQUIRE([AC_PROG_CXX])dnl |
116 | AC_REQUIRE([AC_PROG_GREP])dnl | |
117 | echo "$as_me: this is boost.m4[]_BOOST_SERIAL" >&AS_MESSAGE_LOG_FD | |
118 | boost_save_IFS=$IFS | |
119 | boost_version_req=$1 | |
120 | IFS=. | |
121 | set x $boost_version_req 0 0 0 | |
122 | IFS=$boost_save_IFS | |
123 | shift | |
124 | boost_version_req=`expr "$[1]" '*' 100000 + "$[2]" '*' 100 + "$[3]"` | |
125 | boost_version_req_string=$[1].$[2].$[3] | |
126 | AC_ARG_WITH([boost], | |
127 | [AS_HELP_STRING([--with-boost=DIR], | |
128 | [prefix of Boost $1 @<:@guess@:>@])])dnl | |
129 | AC_ARG_VAR([BOOST_ROOT],[Location of Boost installation])dnl | |
130 | # If BOOST_ROOT is set and the user has not provided a value to | |
131 | # --with-boost, then treat BOOST_ROOT as if it the user supplied it. | |
132 | if test x"$BOOST_ROOT" != x; then | |
133 | if test x"$with_boost" = x; then | |
134 | AC_MSG_NOTICE([Detected BOOST_ROOT; continuing with --with-boost=$BOOST_ROOT]) | |
135 | with_boost=$BOOST_ROOT | |
136 | else | |
137 | AC_MSG_NOTICE([Detected BOOST_ROOT=$BOOST_ROOT, but overridden by --with-boost=$with_boost]) | |
138 | fi | |
139 | fi | |
140 | AC_SUBST([DISTCHECK_CONFIGURE_FLAGS], | |
141 | ["$DISTCHECK_CONFIGURE_FLAGS '--with-boost=$with_boost'"])dnl | |
142 | boost_save_CPPFLAGS=$CPPFLAGS | |
143 | AC_CACHE_CHECK([for Boost headers version >= $boost_version_req_string], | |
144 | [boost_cv_inc_path], | |
145 | [boost_cv_inc_path=no | |
146 | AC_LANG_PUSH([C++])dnl | |
147 | m4_pattern_allow([^BOOST_VERSION$])dnl | |
148 | AC_LANG_CONFTEST([AC_LANG_PROGRAM([[#include <boost/version.hpp> | |
149 | #if !defined BOOST_VERSION | |
150 | # error BOOST_VERSION is not defined | |
151 | #elif BOOST_VERSION < $boost_version_req | |
152 | # error Boost headers version < $boost_version_req | |
153 | #endif | |
154 | ]])]) | |
155 | # If the user provided a value to --with-boost, use it and only it. | |
156 | case $with_boost in #( | |
157 | ''|yes) set x '' /opt/local/include /usr/local/include /opt/include \ | |
158 | /usr/include C:/Boost/include;; #( | |
159 | *) set x "$with_boost/include" "$with_boost";; | |
160 | esac | |
161 | shift | |
162 | for boost_dir | |
163 | do | |
164 | # Without --layout=system, Boost (or at least some versions) installs | |
165 | # itself in <prefix>/include/boost-<version>. This inner loop helps to | |
166 | # find headers in such directories. | |
167 | # | |
168 | # Any ${boost_dir}/boost-x_xx directories are searched in reverse version | |
169 | # order followed by ${boost_dir}. The final '.' is a sentinel for | |
170 | # searching $boost_dir" itself. Entries are whitespace separated. | |
171 | # | |
172 | # I didn't indent this loop on purpose (to avoid over-indented code) | |
173 | boost_layout_system_search_list=`cd "$boost_dir" 2>/dev/null \ | |
174 | && ls -1 | "${GREP}" '^boost-' | sort -rn -t- -k2 \ | |
175 | && echo .` | |
176 | for boost_inc in $boost_layout_system_search_list | |
177 | do | |
178 | if test x"$boost_inc" != x.; then | |
179 | boost_inc="$boost_dir/$boost_inc" | |
180 | else | |
181 | boost_inc="$boost_dir" # Uses sentinel in boost_layout_system_search_list | |
182 | fi | |
183 | if test x"$boost_inc" != x; then | |
184 | # We are going to check whether the version of Boost installed | |
185 | # in $boost_inc is usable by running a compilation that | |
186 | # #includes it. But if we pass a -I/some/path in which Boost | |
187 | # is not installed, the compiler will just skip this -I and | |
188 | # use other locations (either from CPPFLAGS, or from its list | |
189 | # of system include directories). As a result we would use | |
190 | # header installed on the machine instead of the /some/path | |
191 | # specified by the user. So in that precise case (trying | |
192 | # $boost_inc), make sure the version.hpp exists. | |
193 | # | |
194 | # Use test -e as there can be symlinks. | |
195 | test -e "$boost_inc/boost/version.hpp" || continue | |
196 | CPPFLAGS="$CPPFLAGS -I$boost_inc" | |
197 | fi | |
198 | AC_COMPILE_IFELSE([], [boost_cv_inc_path=yes], [boost_cv_version=no]) | |
199 | if test x"$boost_cv_inc_path" = xyes; then | |
200 | if test x"$boost_inc" != x; then | |
201 | boost_cv_inc_path=$boost_inc | |
202 | fi | |
203 | break 2 | |
204 | fi | |
205 | done | |
206 | done | |
207 | AC_LANG_POP([C++])dnl | |
208 | ]) | |
209 | case $boost_cv_inc_path in #( | |
210 | no) | |
211 | boost_errmsg="cannot find Boost headers version >= $boost_version_req_string" | |
212 | m4_if([$2], [], [AC_MSG_ERROR([$boost_errmsg])], | |
213 | [AC_MSG_NOTICE([$boost_errmsg])]) | |
214 | $2 | |
215 | ;;#( | |
216 | yes) | |
217 | BOOST_CPPFLAGS= | |
218 | ;;#( | |
219 | *) | |
220 | AC_SUBST([BOOST_CPPFLAGS], ["-I$boost_cv_inc_path"])dnl | |
221 | ;; | |
222 | esac | |
223 | if test x"$boost_cv_inc_path" != xno; then | |
224 | AC_DEFINE([HAVE_BOOST], [1], | |
225 | [Defined if the requested minimum BOOST version is satisfied]) | |
226 | AC_CACHE_CHECK([for Boost's header version], | |
227 | [boost_cv_lib_version], | |
228 | [m4_pattern_allow([^BOOST_LIB_VERSION$])dnl | |
2187934a | 229 | _BOOST_SED_CPP([[/^boost-lib-version = /{s///;s/[\" ]//g;p;q;}]], |
94ac5f34 PD |
230 | [#include <boost/version.hpp> |
231 | boost-lib-version = BOOST_LIB_VERSION], | |
232 | [boost_cv_lib_version=`cat conftest.i`])]) | |
233 | # e.g. "134" for 1_34_1 or "135" for 1_35 | |
234 | boost_major_version=`echo "$boost_cv_lib_version" | sed 's/_//;s/_.*//'` | |
235 | case $boost_major_version in #( | |
236 | '' | *[[!0-9]]*) | |
2187934a | 237 | AC_MSG_ERROR([invalid value: boost_major_version='$boost_major_version']) |
94ac5f34 PD |
238 | ;; |
239 | esac | |
240 | fi | |
241 | CPPFLAGS=$boost_save_CPPFLAGS | |
242 | ])# BOOST_REQUIRE | |
243 | ||
2187934a | 244 | |
94ac5f34 PD |
245 | # BOOST_STATIC() |
246 | # -------------- | |
247 | # Add the "--enable-static-boost" configure argument. If this argument is given | |
248 | # on the command line, static versions of the libraries will be looked up. | |
249 | AC_DEFUN([BOOST_STATIC], | |
250 | [AC_ARG_ENABLE([static-boost], | |
251 | [AS_HELP_STRING([--enable-static-boost], | |
252 | [Prefer the static boost libraries over the shared ones [no]])], | |
253 | [enable_static_boost=yes], | |
254 | [enable_static_boost=no])])# BOOST_STATIC | |
255 | ||
2187934a | 256 | |
94ac5f34 PD |
257 | # BOOST_FIND_HEADER([HEADER-NAME], [ACTION-IF-NOT-FOUND], [ACTION-IF-FOUND]) |
258 | # -------------------------------------------------------------------------- | |
259 | # Wrapper around AC_CHECK_HEADER for Boost headers. Useful to check for | |
260 | # some parts of the Boost library which are only made of headers and don't | |
261 | # require linking (such as Boost.Foreach). | |
262 | # | |
263 | # Default ACTION-IF-NOT-FOUND: Fail with a fatal error unless Boost couldn't be | |
264 | # found in the first place, in which case by default a notice is issued to the | |
265 | # user. Presumably if we haven't died already it's because it's OK to not have | |
266 | # Boost, which is why only a notice is issued instead of a hard error. | |
267 | # | |
268 | # Default ACTION-IF-FOUND: define the preprocessor symbol HAVE_<HEADER-NAME> in | |
269 | # case of success # (where HEADER-NAME is written LIKE_THIS, e.g., | |
270 | # HAVE_BOOST_FOREACH_HPP). | |
271 | AC_DEFUN([BOOST_FIND_HEADER], | |
272 | [AC_REQUIRE([BOOST_REQUIRE])dnl | |
273 | if test x"$boost_cv_inc_path" = xno; then | |
274 | m4_default([$2], [AC_MSG_NOTICE([Boost not available, not searching for $1])]) | |
275 | else | |
276 | AC_LANG_PUSH([C++])dnl | |
277 | boost_save_CPPFLAGS=$CPPFLAGS | |
278 | CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" | |
279 | AC_CHECK_HEADER([$1], | |
280 | [m4_default([$3], [AC_DEFINE(AS_TR_CPP([HAVE_$1]), [1], | |
281 | [Define to 1 if you have <$1>])])], | |
282 | [m4_default([$2], [AC_MSG_ERROR([cannot find $1])])]) | |
283 | CPPFLAGS=$boost_save_CPPFLAGS | |
284 | AC_LANG_POP([C++])dnl | |
285 | fi | |
286 | ])# BOOST_FIND_HEADER | |
287 | ||
288 | ||
2187934a RK |
289 | # BOOST_FIND_LIBS([COMPONENT-NAME], [CANDIDATE-LIB-NAMES], |
290 | # [PREFERRED-RT-OPT], [HEADER-NAME], [CXX-TEST], | |
1b88fc23 PL |
291 | # [CXX-PROLOGUE], [CXX-POST-INCLUDE-PROLOGUE], |
292 | # [ERROR_ON_UNUSABLE]) | |
2187934a RK |
293 | # -------------------------------------------------------------- |
294 | # Look for the Boost library COMPONENT-NAME (e.g., `thread', for | |
295 | # libboost_thread) under the possible CANDIDATE-LIB-NAMES (e.g., | |
296 | # "thread_win32 thread"). Check that HEADER-NAME works and check that | |
297 | # libboost_LIB-NAME can link with the code CXX-TEST. The optional | |
298 | # argument CXX-PROLOGUE can be used to include some C++ code before | |
1b88fc23 PL |
299 | # the `main' function. The CXX-POST-INCLUDE-PROLOGUE can be used to |
300 | # include some code before the `main' function, but after the | |
301 | # `#include <HEADER-NAME>'. | |
94ac5f34 PD |
302 | # |
303 | # Invokes BOOST_FIND_HEADER([HEADER-NAME]) (see above). | |
304 | # | |
305 | # Boost libraries typically come compiled with several flavors (with different | |
306 | # runtime options) so PREFERRED-RT-OPT is the preferred suffix. A suffix is one | |
307 | # or more of the following letters: sgdpn (in that order). s = static | |
308 | # runtime, d = debug build, g = debug/diagnostic runtime, p = STLPort build, | |
309 | # n = (unsure) STLPort build without iostreams from STLPort (it looks like `n' | |
310 | # must always be used along with `p'). Additionally, PREFERRED-RT-OPT can | |
311 | # start with `mt-' to indicate that there is a preference for multi-thread | |
312 | # builds. Some sample values for PREFERRED-RT-OPT: (nothing), mt, d, mt-d, gdp | |
313 | # ... If you want to make sure you have a specific version of Boost | |
314 | # (eg, >= 1.33) you *must* invoke BOOST_REQUIRE before this macro. | |
1b88fc23 PL |
315 | # |
316 | # ERROR_ON_UNUSABLE can be set to "no" if the caller does not want their | |
317 | # configure to fail | |
2187934a | 318 | AC_DEFUN([BOOST_FIND_LIBS], |
94ac5f34 PD |
319 | [AC_REQUIRE([BOOST_REQUIRE])dnl |
320 | AC_REQUIRE([_BOOST_FIND_COMPILER_TAG])dnl | |
321 | AC_REQUIRE([BOOST_STATIC])dnl | |
322 | AC_REQUIRE([_BOOST_GUESS_WHETHER_TO_USE_MT])dnl | |
323 | if test x"$boost_cv_inc_path" = xno; then | |
324 | AC_MSG_NOTICE([Boost not available, not searching for the Boost $1 library]) | |
325 | else | |
0b59e24e | 326 | dnl The else branch is huge and wasn't indented on purpose. |
94ac5f34 PD |
327 | AC_LANG_PUSH([C++])dnl |
328 | AS_VAR_PUSHDEF([Boost_lib], [boost_cv_lib_$1])dnl | |
329 | AS_VAR_PUSHDEF([Boost_lib_LDFLAGS], [boost_cv_lib_$1_LDFLAGS])dnl | |
330 | AS_VAR_PUSHDEF([Boost_lib_LDPATH], [boost_cv_lib_$1_LDPATH])dnl | |
331 | AS_VAR_PUSHDEF([Boost_lib_LIBS], [boost_cv_lib_$1_LIBS])dnl | |
1b88fc23 PL |
332 | AS_IF([test x"$8" = "xno"], [not_found_header='true']) |
333 | BOOST_FIND_HEADER([$4], [$not_found_header]) | |
94ac5f34 PD |
334 | boost_save_CPPFLAGS=$CPPFLAGS |
335 | CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" | |
94ac5f34 | 336 | AC_CACHE_CHECK([for the Boost $1 library], [Boost_lib], |
2187934a RK |
337 | [_BOOST_FIND_LIBS($@)]) |
338 | case $Boost_lib in #( | |
e512f4f9 AN |
339 | (yes) _AC_MSG_LOG_CONFTEST |
340 | AC_DEFINE(AS_TR_CPP([HAVE_BOOST_$1]), [1], [Defined if the Boost $1 library is available])dnl | |
341 | AC_SUBST(AS_TR_CPP([BOOST_$1_LDFLAGS]), [$Boost_lib_LDFLAGS])dnl | |
342 | AC_SUBST(AS_TR_CPP([BOOST_$1_LDPATH]), [$Boost_lib_LDPATH])dnl | |
343 | AC_SUBST([BOOST_LDPATH], [$Boost_lib_LDPATH])dnl | |
344 | AC_SUBST(AS_TR_CPP([BOOST_$1_LIBS]), [$Boost_lib_LIBS])dnl | |
2187934a | 345 | ;; |
0b59e24e | 346 | (no) _AC_MSG_LOG_CONFTEST |
1b88fc23 PL |
347 | AS_IF([test x"$8" != "xno"], [ |
348 | AC_MSG_ERROR([cannot find flags to link with the Boost $1 library (libboost-$1)]) | |
349 | ]) | |
0b59e24e | 350 | ;; |
2187934a | 351 | esac |
2187934a RK |
352 | CPPFLAGS=$boost_save_CPPFLAGS |
353 | AS_VAR_POPDEF([Boost_lib])dnl | |
354 | AS_VAR_POPDEF([Boost_lib_LDFLAGS])dnl | |
355 | AS_VAR_POPDEF([Boost_lib_LDPATH])dnl | |
356 | AS_VAR_POPDEF([Boost_lib_LIBS])dnl | |
357 | AC_LANG_POP([C++])dnl | |
358 | fi | |
359 | ]) | |
360 | ||
361 | ||
362 | # BOOST_FIND_LIB([LIB-NAME], | |
363 | # [PREFERRED-RT-OPT], [HEADER-NAME], [CXX-TEST], | |
1b88fc23 PL |
364 | # [CXX-PROLOGUE], [CXX-POST-INCLUDE-PROLOGUE], |
365 | # [ERROR_ON_UNUSABLE]) | |
2187934a RK |
366 | # -------------------------------------------------------------- |
367 | # Backward compatibility wrapper for BOOST_FIND_LIBS. | |
1b88fc23 PL |
368 | # ERROR_ON_UNUSABLE can be set to "no" if the caller does not want their |
369 | # configure to fail | |
2187934a RK |
370 | AC_DEFUN([BOOST_FIND_LIB], |
371 | [BOOST_FIND_LIBS([$1], $@)]) | |
372 | ||
373 | ||
374 | # _BOOST_FIND_LIBS([LIB-NAME], [CANDIDATE-LIB-NAMES], | |
375 | # [PREFERRED-RT-OPT], [HEADER-NAME], [CXX-TEST], | |
1b88fc23 PL |
376 | # [CXX-PROLOGUE], [CXX-POST-INCLUDE-PROLOGUE], |
377 | # [ERROR_ON_UNUSABLE]) | |
2187934a RK |
378 | # -------------------------------------------------------------- |
379 | # Real implementation of BOOST_FIND_LIBS: rely on these local macros: | |
380 | # Boost_lib, Boost_lib_LDFLAGS, Boost_lib_LDPATH, Boost_lib_LIBS | |
381 | # | |
382 | # The algorithm is as follows: first look for a given library name | |
383 | # according to the user's PREFERRED-RT-OPT. For each library name, we | |
384 | # prefer to use the ones that carry the tag (toolset name). Each | |
385 | # library is searched through the various standard paths were Boost is | |
386 | # usually installed. If we can't find the standard variants, we try | |
387 | # to enforce -mt (for instance on MacOSX, libboost_thread.dylib | |
388 | # doesn't exist but there's -obviously- libboost_thread-mt.dylib). | |
1b88fc23 PL |
389 | # |
390 | # ERROR_ON_UNUSABLE can be set to "no" if the caller does not want their | |
391 | # configure to fail | |
2187934a RK |
392 | AC_DEFUN([_BOOST_FIND_LIBS], |
393 | [Boost_lib=no | |
394 | case "$3" in #( | |
395 | (mt | mt-) boost_mt=-mt; boost_rtopt=;; #( | |
396 | (mt* | mt-*) boost_mt=-mt; boost_rtopt=`expr "X$3" : 'Xmt-*\(.*\)'`;; #( | |
397 | (*) boost_mt=; boost_rtopt=$3;; | |
94ac5f34 PD |
398 | esac |
399 | if test $enable_static_boost = yes; then | |
400 | boost_rtopt="s$boost_rtopt" | |
401 | fi | |
402 | # Find the proper debug variant depending on what we've been asked to find. | |
403 | case $boost_rtopt in #( | |
2187934a RK |
404 | (*d*) boost_rt_d=$boost_rtopt;; #( |
405 | (*[[sgpn]]*) # Insert the `d' at the right place (in between `sg' and `pn') | |
94ac5f34 | 406 | boost_rt_d=`echo "$boost_rtopt" | sed 's/\(s*g*\)\(p*n*\)/\1\2/'`;; #( |
2187934a | 407 | (*) boost_rt_d='-d';; |
94ac5f34 PD |
408 | esac |
409 | # If the PREFERRED-RT-OPT are not empty, prepend a `-'. | |
410 | test -n "$boost_rtopt" && boost_rtopt="-$boost_rtopt" | |
411 | $boost_guess_use_mt && boost_mt=-mt | |
412 | # Look for the abs path the static archive. | |
413 | # $libext is computed by Libtool but let's make sure it's non empty. | |
414 | test -z "$libext" && | |
415 | AC_MSG_ERROR([the libext variable is empty, did you invoke Libtool?]) | |
416 | boost_save_ac_objext=$ac_objext | |
417 | # Generate the test file. | |
0b59e24e PL |
418 | AC_LANG_CONFTEST([AC_LANG_PROGRAM([$7 |
419 | #include <$4> | |
2187934a | 420 | $6], [$5])]) |
94ac5f34 PD |
421 | dnl Optimization hacks: compiling C++ is slow, especially with Boost. What |
422 | dnl we're trying to do here is guess the right combination of link flags | |
423 | dnl (LIBS / LDFLAGS) to use a given library. This can take several | |
424 | dnl iterations before it succeeds and is thus *very* slow. So what we do | |
425 | dnl instead is that we compile the code first (and thus get an object file, | |
426 | dnl typically conftest.o). Then we try various combinations of link flags | |
427 | dnl until we succeed to link conftest.o in an executable. The problem is | |
428 | dnl that the various TRY_LINK / COMPILE_IFELSE macros of Autoconf always | |
429 | dnl remove all the temporary files including conftest.o. So the trick here | |
430 | dnl is to temporarily change the value of ac_objext so that conftest.o is | |
431 | dnl preserved accross tests. This is obviously fragile and I will burn in | |
432 | dnl hell for not respecting Autoconf's documented interfaces, but in the | |
433 | dnl mean time, it optimizes the macro by a factor of 5 to 30. | |
434 | dnl Another small optimization: the first argument of AC_COMPILE_IFELSE left | |
435 | dnl empty because the test file is generated only once above (before we | |
436 | dnl start the for loops). | |
437 | AC_COMPILE_IFELSE([], | |
438 | [ac_objext=do_not_rm_me_plz], | |
1b88fc23 PL |
439 | [AS_IF([test x"$8" != x"no"], [ |
440 | AC_MSG_ERROR([cannot compile a test that uses Boost $1]) | |
441 | ]) | |
442 | ]) | |
94ac5f34 PD |
443 | ac_objext=$boost_save_ac_objext |
444 | boost_failed_libs= | |
2187934a RK |
445 | # Don't bother to ident the following nested for loops, only the 2 |
446 | # innermost ones matter. | |
447 | for boost_lib_ in $2; do | |
94ac5f34 PD |
448 | for boost_tag_ in -$boost_cv_lib_tag ''; do |
449 | for boost_ver_ in -$boost_cv_lib_version ''; do | |
450 | for boost_mt_ in $boost_mt -mt ''; do | |
451 | for boost_rtopt_ in $boost_rtopt '' -d; do | |
0b59e24e PL |
452 | for boost_full_suffix in \ |
453 | $boost_last_suffix \ | |
454 | x$boost_tag_$boost_mt_$boost_rtopt_$boost_ver_ \ | |
455 | x$boost_tag_$boost_rtopt_$boost_ver_ \ | |
456 | x$boost_tag_$boost_mt_$boost_ver_ \ | |
457 | x$boost_tag_$boost_ver_ | |
94ac5f34 | 458 | do |
0b59e24e PL |
459 | boost_real_suffix=`echo "$boost_full_suffix" | sed 's/^x//'` |
460 | boost_lib="boost_$boost_lib_$boost_real_suffix" | |
94ac5f34 PD |
461 | # Avoid testing twice the same lib |
462 | case $boost_failed_libs in #( | |
2187934a | 463 | (*@$boost_lib@*) continue;; |
94ac5f34 PD |
464 | esac |
465 | # If with_boost is empty, we'll search in /lib first, which is not quite | |
466 | # right so instead we'll try to a location based on where the headers are. | |
467 | boost_tmp_lib=$with_boost | |
468 | test x"$with_boost" = x && boost_tmp_lib=${boost_cv_inc_path%/include} | |
469 | for boost_ldpath in "$boost_tmp_lib/lib" '' \ | |
470 | /opt/local/lib* /usr/local/lib* /opt/lib* /usr/lib* \ | |
471 | "$with_boost" C:/Boost/lib /lib* | |
472 | do | |
2187934a RK |
473 | # Don't waste time with directories that don't exist. |
474 | if test x"$boost_ldpath" != x && test ! -e "$boost_ldpath"; then | |
475 | continue | |
476 | fi | |
94ac5f34 PD |
477 | boost_save_LDFLAGS=$LDFLAGS |
478 | # Are we looking for a static library? | |
479 | case $boost_ldpath:$boost_rtopt_ in #( | |
2187934a | 480 | (*?*:*s*) # Yes (Non empty boost_ldpath + s in rt opt) |
94ac5f34 PD |
481 | Boost_lib_LIBS="$boost_ldpath/lib$boost_lib.$libext" |
482 | test -e "$Boost_lib_LIBS" || continue;; #( | |
2187934a | 483 | (*) # No: use -lboost_foo to find the shared library. |
94ac5f34 PD |
484 | Boost_lib_LIBS="-l$boost_lib";; |
485 | esac | |
486 | boost_save_LIBS=$LIBS | |
487 | LIBS="$Boost_lib_LIBS $LIBS" | |
488 | test x"$boost_ldpath" != x && LDFLAGS="$LDFLAGS -L$boost_ldpath" | |
489 | dnl First argument of AC_LINK_IFELSE left empty because the test file is | |
490 | dnl generated only once above (before we start the for loops). | |
491 | _BOOST_AC_LINK_IFELSE([], | |
492 | [Boost_lib=yes], [Boost_lib=no]) | |
493 | ac_objext=$boost_save_ac_objext | |
494 | LDFLAGS=$boost_save_LDFLAGS | |
495 | LIBS=$boost_save_LIBS | |
496 | if test x"$Boost_lib" = xyes; then | |
2187934a RK |
497 | # Check or used cached result of whether or not using -R or |
498 | # -rpath makes sense. Some implementations of ld, such as for | |
499 | # Mac OSX, require -rpath but -R is the flag known to work on | |
500 | # other systems. https://github.com/tsuna/boost.m4/issues/19 | |
94ac5f34 | 501 | AC_CACHE_VAL([boost_cv_rpath_link_ldflag], |
2187934a RK |
502 | [case $boost_ldpath in |
503 | '') # Nothing to do. | |
504 | boost_cv_rpath_link_ldflag= | |
505 | boost_rpath_link_ldflag_found=yes;; | |
506 | *) | |
507 | for boost_cv_rpath_link_ldflag in -Wl,-R, -Wl,-rpath,; do | |
508 | LDFLAGS="$boost_save_LDFLAGS -L$boost_ldpath $boost_cv_rpath_link_ldflag$boost_ldpath" | |
0b59e24e | 509 | LIBS="$Boost_lib_LIBS $boost_save_LIBS" |
2187934a RK |
510 | _BOOST_AC_LINK_IFELSE([], |
511 | [boost_rpath_link_ldflag_found=yes | |
512 | break], | |
513 | [boost_rpath_link_ldflag_found=no]) | |
514 | done | |
515 | ;; | |
516 | esac | |
94ac5f34 PD |
517 | AS_IF([test "x$boost_rpath_link_ldflag_found" != "xyes"], |
518 | [AC_MSG_ERROR([Unable to determine whether to use -R or -rpath])]) | |
519 | LDFLAGS=$boost_save_LDFLAGS | |
520 | LIBS=$boost_save_LIBS | |
521 | ]) | |
2187934a RK |
522 | test x"$boost_ldpath" != x && |
523 | Boost_lib_LDFLAGS="-L$boost_ldpath $boost_cv_rpath_link_ldflag$boost_ldpath" | |
94ac5f34 | 524 | Boost_lib_LDPATH="$boost_ldpath" |
0b59e24e | 525 | boost_last_suffix="$boost_full_suffix" |
2187934a | 526 | break 7 |
94ac5f34 PD |
527 | else |
528 | boost_failed_libs="$boost_failed_libs@$boost_lib@" | |
529 | fi | |
530 | done | |
531 | done | |
532 | done | |
533 | done | |
534 | done | |
535 | done | |
2187934a | 536 | done # boost_lib_ |
94ac5f34 PD |
537 | rm -f conftest.$ac_objext |
538 | ]) | |
2187934a | 539 | |
94ac5f34 PD |
540 | |
541 | ||
542 | # --------------------------------------- # | |
543 | # Checks for the various Boost libraries. # | |
544 | # --------------------------------------- # | |
545 | ||
546 | # List of boost libraries: http://www.boost.org/libs/libraries.htm | |
547 | # The page http://beta.boost.org/doc/libs is useful: it gives the first release | |
548 | # version of each library (among other things). | |
549 | ||
550 | # BOOST_DEFUN(LIBRARY, CODE) | |
551 | # -------------------------- | |
552 | # Define BOOST_<LIBRARY-UPPERCASE> as a macro that runs CODE. | |
553 | # | |
554 | # Use indir to avoid the warning on underquoted macro name given to AC_DEFUN. | |
555 | m4_define([BOOST_DEFUN], | |
556 | [m4_indir([AC_DEFUN], | |
557 | m4_toupper([BOOST_$1]), | |
558 | [m4_pushdef([BOOST_Library], [$1])dnl | |
559 | $2 | |
560 | m4_popdef([BOOST_Library])dnl | |
561 | ]) | |
562 | ]) | |
563 | ||
0b59e24e PL |
564 | |
565 | # BOOST_ANY() | |
566 | # ------------ | |
567 | # Look for Boost.Any | |
568 | BOOST_DEFUN([Any], | |
569 | [BOOST_FIND_HEADER([boost/any.hpp])]) | |
570 | ||
571 | ||
94ac5f34 PD |
572 | # BOOST_ARRAY() |
573 | # ------------- | |
574 | # Look for Boost.Array | |
575 | BOOST_DEFUN([Array], | |
576 | [BOOST_FIND_HEADER([boost/array.hpp])]) | |
577 | ||
578 | ||
579 | # BOOST_ASIO() | |
580 | # ------------ | |
581 | # Look for Boost.Asio (new in Boost 1.35). | |
582 | BOOST_DEFUN([Asio], | |
583 | [AC_REQUIRE([BOOST_SYSTEM])dnl | |
584 | BOOST_FIND_HEADER([boost/asio.hpp])]) | |
585 | ||
0b59e24e PL |
586 | # BOOST_BIMAP() |
587 | # ------------ | |
588 | # Look for Boost.Bimap | |
589 | BOOST_DEFUN([Bimap], | |
590 | [BOOST_FIND_HEADER([boost/bimap.hpp])]) | |
591 | ||
94ac5f34 | 592 | |
a0e4992b KM |
593 | # BOOST_ASSIGN() |
594 | # ------------- | |
595 | # Look for Boost.Assign | |
596 | BOOST_DEFUN([Assign], | |
597 | [BOOST_FIND_HEADER([boost/assign.hpp])]) | |
598 | ||
599 | ||
1b88fc23 | 600 | # BOOST_ATOMIC([PREFERRED-RT-OPT], [ERROR_ON_UNUSABLE]) |
0b59e24e PL |
601 | # ------------------------------- |
602 | # Look for Boost.Atomic. For the documentation of PREFERRED-RT-OPT, see the | |
603 | # documentation of BOOST_FIND_LIB above. | |
604 | BOOST_DEFUN([Atomic], | |
605 | [BOOST_FIND_LIB([atomic], [$1], | |
606 | [boost/atomic.hpp], | |
607 | [boost::atomic<int> a;], | |
608 | [ ], | |
609 | [#ifdef HAVE_UNISTD_H | |
610 | #include <unistd.h> | |
611 | #endif | |
612 | #ifdef HAVE_STDINT_H | |
613 | #include <stdint.h> | |
1b88fc23 | 614 | #endif], [$2]) |
0b59e24e PL |
615 | ])# BOOST_ATOMIC |
616 | ||
617 | ||
94ac5f34 PD |
618 | # BOOST_BIND() |
619 | # ------------ | |
2187934a | 620 | # Look for Boost.Bind. |
94ac5f34 PD |
621 | BOOST_DEFUN([Bind], |
622 | [BOOST_FIND_HEADER([boost/bind.hpp])]) | |
623 | ||
624 | ||
0b59e24e PL |
625 | # BOOST_CAST() |
626 | # ------------ | |
627 | # Look for Boost.Cast | |
628 | BOOST_DEFUN([Cast], | |
629 | [BOOST_FIND_HEADER([boost/cast.hpp])]) | |
630 | ||
631 | ||
1b88fc23 | 632 | # BOOST_CHRONO([PREFERRED-RT-OPT], [ERROR_ON_UNUSABLE]) |
2187934a RK |
633 | # -------------- |
634 | # Look for Boost.Chrono. | |
94ac5f34 PD |
635 | BOOST_DEFUN([Chrono], |
636 | [# Do we have to check for Boost.System? This link-time dependency was | |
637 | # added as of 1.35.0. If we have a version <1.35, we must not attempt to | |
638 | # find Boost.System as it didn't exist by then. | |
639 | if test $boost_major_version -ge 135; then | |
1b88fc23 | 640 | BOOST_SYSTEM([$1], [$2]) |
94ac5f34 PD |
641 | fi # end of the Boost.System check. |
642 | boost_filesystem_save_LIBS=$LIBS | |
643 | boost_filesystem_save_LDFLAGS=$LDFLAGS | |
644 | m4_pattern_allow([^BOOST_SYSTEM_(LIBS|LDFLAGS)$])dnl | |
645 | LIBS="$LIBS $BOOST_SYSTEM_LIBS" | |
646 | LDFLAGS="$LDFLAGS $BOOST_SYSTEM_LDFLAGS" | |
647 | BOOST_FIND_LIB([chrono], [$1], | |
648 | [boost/chrono.hpp], | |
1b88fc23 | 649 | [boost::chrono::thread_clock d;], [], [], [$2]) |
94ac5f34 | 650 | if test $enable_static_boost = yes && test $boost_major_version -ge 135; then |
b0d6e9e6 | 651 | BOOST_CHRONO_LIBS="$BOOST_CHRONO_LIBS $BOOST_SYSTEM_LIBS" |
94ac5f34 PD |
652 | fi |
653 | LIBS=$boost_filesystem_save_LIBS | |
654 | LDFLAGS=$boost_filesystem_save_LDFLAGS | |
94ac5f34 PD |
655 | ])# BOOST_CHRONO |
656 | ||
657 | ||
1b88fc23 | 658 | # BOOST_CONTEXT([PREFERRED-RT-OPT], [ERROR_ON_UNUSABLE]) |
2187934a RK |
659 | # ----------------------------------- |
660 | # Look for Boost.Context. For the documentation of PREFERRED-RT-OPT, see the | |
afdd465f PL |
661 | # documentation of BOOST_FIND_LIB above. |
662 | # | |
663 | # * This library was introduced in Boost 1.51.0 | |
664 | # * The signatures of make_fcontext() and jump_fcontext were changed in 1.56.0 | |
665 | # * A dependency on boost_thread appears in 1.57.0 | |
15875dd8 | 666 | # * The implementation details were moved to boost::context::detail in 1.61.0 |
c54133a4 PL |
667 | # * 1.61 also introduces execution_context_v2, which is the "lowest common |
668 | # denominator" for boost::context presence since then. | |
2bcb6ea0 PL |
669 | # * boost::context::fiber was introduced in 1.69 and execution_context_v2 was |
670 | # removed in 1.72 | |
2187934a | 671 | BOOST_DEFUN([Context], |
afdd465f PL |
672 | [boost_context_save_LIBS=$LIBS |
673 | boost_context_save_LDFLAGS=$LDFLAGS | |
674 | if test $boost_major_version -ge 157; then | |
1b88fc23 | 675 | BOOST_THREAD([$1], [$2]) |
afdd465f PL |
676 | m4_pattern_allow([^BOOST_THREAD_(LIBS|LDFLAGS)$])dnl |
677 | LIBS="$LIBS $BOOST_THREAD_LIBS" | |
678 | LDFLAGS="$LDFLAGS $BOOST_THREAD_LDFLAGS" | |
679 | fi | |
15875dd8 | 680 | |
2bcb6ea0 PL |
681 | if test $boost_major_version -ge 169; then |
682 | ||
683 | BOOST_FIND_LIB([context], [$1], | |
684 | [boost/context/fiber.hpp], [[ | |
685 | namespace ctx=boost::context; | |
686 | int a; | |
687 | ctx::fiber source{[&a](ctx::fiber&& sink){ | |
688 | a=0; | |
689 | int b=1; | |
690 | for(;;){ | |
691 | sink=std::move(sink).resume(); | |
692 | int next=a+b; | |
693 | a=b; | |
694 | b=next; | |
695 | } | |
696 | return std::move(sink); | |
697 | }}; | |
698 | for (int j=0;j<10;++j) { | |
699 | source=std::move(source).resume(); | |
700 | } | |
701 | return a == 34; | |
702 | ]], [], [], [$2]) | |
703 | ||
704 | elif test $boost_major_version -ge 161; then | |
705 | ||
15875dd8 | 706 | BOOST_FIND_LIB([context], [$1], |
c54133a4 | 707 | [boost/context/execution_context_v2.hpp], [[ |
15875dd8 | 708 | namespace ctx=boost::context; |
c54133a4 PL |
709 | int res=0; |
710 | int n=35; | |
711 | ctx::execution_context<int> source( | |
712 | [n, &res](ctx::execution_context<int> sink, int) mutable { | |
713 | int a=0; | |
15875dd8 | 714 | int b=1; |
c54133a4 PL |
715 | while(n-->0){ |
716 | auto result=sink(a); | |
717 | sink=std::move(std::get<0>(result)); | |
718 | auto next=a+b; | |
15875dd8 PL |
719 | a=b; |
720 | b=next; | |
721 | } | |
c54133a4 | 722 | return sink; |
15875dd8 | 723 | }); |
c54133a4 PL |
724 | for(int i=0;i<10;++i){ |
725 | auto result=source(i); | |
726 | source=std::move(std::get<0>(result)); | |
727 | res = std::get<1>(result); | |
15875dd8 | 728 | } |
c54133a4 | 729 | return res == 34; |
1b88fc23 | 730 | ]], [], [], [$2]) |
15875dd8 PL |
731 | |
732 | else | |
733 | ||
afdd465f | 734 | BOOST_FIND_LIB([context], [$1], |
0b59e24e | 735 | [boost/context/fcontext.hpp],[[ |
afdd465f | 736 | |
2187934a RK |
737 | // creates a stack |
738 | void * stack_pointer = new void*[4096]; | |
739 | std::size_t const size = sizeof(void*[4096]); | |
740 | ||
afdd465f PL |
741 | #if BOOST_VERSION <= 105100 |
742 | ctx::make_fcontext(&fc, f); | |
743 | return ctx::jump_fcontext(&fcm, &fc, 3) == 6; | |
744 | ||
745 | #else | |
746 | ||
2187934a | 747 | fc = ctx::make_fcontext(stack_pointer, size, f); |
afdd465f PL |
748 | return ctx::jump_fcontext(&fcm, fc, 3) == 6; |
749 | ||
750 | #endif | |
751 | ||
752 | ||
753 | ]],[dnl | |
754 | ||
755 | #include <boost/version.hpp> | |
756 | #if BOOST_VERSION <= 105100 | |
757 | ||
758 | namespace ctx = boost::ctx; | |
759 | ||
760 | static ctx::fcontext_t fcm, fc; | |
761 | ||
762 | static void f(intptr_t i) { | |
763 | ctx::jump_fcontext(&fc, &fcm, i * 2); | |
764 | } | |
765 | ||
766 | #elif BOOST_VERSION <= 105500 | |
767 | ||
2187934a | 768 | namespace ctx = boost::context; |
afdd465f | 769 | |
2187934a RK |
770 | // context |
771 | static ctx::fcontext_t fcm, *fc; | |
afdd465f | 772 | |
2187934a RK |
773 | // context-function |
774 | static void f(intptr_t i) { | |
775 | ctx::jump_fcontext(fc, &fcm, i * 2); | |
afdd465f PL |
776 | } |
777 | ||
778 | #else | |
779 | ||
780 | namespace ctx = boost::context; | |
781 | ||
782 | // context | |
783 | static ctx::fcontext_t fcm, fc; | |
784 | ||
785 | // context-function | |
786 | static void f(intptr_t i) { | |
787 | ctx::jump_fcontext(&fc, fcm, i * 2); | |
788 | } | |
789 | #endif | |
1b88fc23 | 790 | ], [], [], [$2]) |
15875dd8 PL |
791 | |
792 | fi | |
793 | ||
afdd465f PL |
794 | LIBS=$boost_context_save_LIBS |
795 | LDFLAGS=$boost_context_save_LDFLAGS | |
2187934a RK |
796 | ])# BOOST_CONTEXT |
797 | ||
798 | ||
94ac5f34 PD |
799 | # BOOST_CONVERSION() |
800 | # ------------------ | |
801 | # Look for Boost.Conversion (cast / lexical_cast) | |
802 | BOOST_DEFUN([Conversion], | |
803 | [BOOST_FIND_HEADER([boost/cast.hpp]) | |
804 | BOOST_FIND_HEADER([boost/lexical_cast.hpp]) | |
805 | ])# BOOST_CONVERSION | |
806 | ||
807 | ||
1b88fc23 | 808 | # BOOST_COROUTINE([PREFERRED-RT-OPT], [ERROR_ON_UNUSABLE]) |
2187934a RK |
809 | # ----------------------------------- |
810 | # Look for Boost.Coroutine. For the documentation of PREFERRED-RT-OPT, see the | |
811 | # documentation of BOOST_FIND_LIB above. This library was introduced in Boost | |
812 | # 1.53.0 | |
813 | BOOST_DEFUN([Coroutine], | |
814 | [ | |
815 | boost_coroutine_save_LIBS=$LIBS | |
816 | boost_coroutine_save_LDFLAGS=$LDFLAGS | |
817 | # Link-time dependency from coroutine to context | |
1b88fc23 | 818 | BOOST_CONTEXT([$1], [$2]) |
2187934a RK |
819 | # Starting from Boost 1.55 a dependency on Boost.System is added |
820 | if test $boost_major_version -ge 155; then | |
1b88fc23 | 821 | BOOST_SYSTEM([$1], [$2]) |
2187934a RK |
822 | fi |
823 | m4_pattern_allow([^BOOST_(CONTEXT|SYSTEM)_(LIBS|LDFLAGS)]) | |
824 | LIBS="$LIBS $BOOST_CONTEXT_LIBS $BOOST_SYSTEM_LIBS" | |
825 | LDFLAGS="$LDFLAGS $BOOST_CONTEXT_LDFLAGS" | |
826 | ||
afdd465f PL |
827 | # in 1.53 coroutine was a header only library |
828 | if test $boost_major_version -eq 153; then | |
1b88fc23 PL |
829 | AS_IF([test x"$2" = "xno"], [not_found_header='true']) |
830 | BOOST_FIND_HEADER([boost/coroutine/coroutine.hpp], [$not_found_header]) | |
afdd465f PL |
831 | else |
832 | BOOST_FIND_LIB([coroutine], [$1], | |
833 | [boost/coroutine/coroutine.hpp], | |
834 | [ | |
835 | #include <boost/version.hpp> | |
836 | #if BOOST_VERSION <= 105500 | |
837 | boost::coroutines::coroutine<int(int)> coro; coro.get(); | |
838 | #else | |
839 | boost::coroutines::asymmetric_coroutine<int>::pull_type coro; coro.get(); | |
840 | #endif | |
1b88fc23 | 841 | ], [], [], [$2]) |
afdd465f | 842 | fi |
2187934a RK |
843 | # Link-time dependency from coroutine to context, existed only in 1.53, in 1.54 |
844 | # coroutine doesn't use context from its headers but from its library. | |
845 | if test $boost_major_version -eq 153 || test $enable_static_boost = yes && test $boost_major_version -ge 154; then | |
846 | BOOST_COROUTINE_LIBS="$BOOST_COROUTINE_LIBS $BOOST_CONTEXT_LIBS" | |
847 | BOOST_COROUTINE_LDFLAGS="$BOOST_COROUTINE_LDFLAGS $BOOST_CONTEXT_LDFLAGS" | |
848 | fi | |
849 | if test $enable_static_boost = yes && test $boost_major_version -ge 155; then | |
850 | BOOST_COROUTINE_LIBS="$BOOST_COROUTINE_LIBS $BOOST_SYSTEM_LIBS" | |
851 | BOOST_COROUTINE_LDFLAGS="$BOOST_COROUTINE_LDFLAGS $BOOST_SYSTEM_LDFLAGS" | |
852 | fi | |
853 | LIBS=$boost_coroutine_save_LIBS | |
854 | LDFLAGS=$boost_coroutine_save_LDFLAGS | |
855 | ])# BOOST_COROUTINE | |
856 | ||
857 | ||
94ac5f34 PD |
858 | # BOOST_CRC() |
859 | # ----------- | |
860 | # Look for Boost.CRC | |
861 | BOOST_DEFUN([CRC], | |
862 | [BOOST_FIND_HEADER([boost/crc.hpp]) | |
863 | ])# BOOST_CRC | |
864 | ||
865 | ||
1b88fc23 | 866 | # BOOST_DATE_TIME([PREFERRED-RT-OPT], [ERROR_ON_UNUSABLE]) |
94ac5f34 PD |
867 | # ----------------------------------- |
868 | # Look for Boost.Date_Time. For the documentation of PREFERRED-RT-OPT, see the | |
869 | # documentation of BOOST_FIND_LIB above. | |
870 | BOOST_DEFUN([Date_Time], | |
871 | [BOOST_FIND_LIB([date_time], [$1], | |
872 | [boost/date_time/posix_time/posix_time.hpp], | |
1b88fc23 | 873 | [boost::posix_time::ptime t;], [], [], [$2]) |
94ac5f34 PD |
874 | ])# BOOST_DATE_TIME |
875 | ||
876 | ||
0b59e24e PL |
877 | # BOOST_EXCEPTION() |
878 | # ------------ | |
879 | # Look for Boost.Exception | |
880 | BOOST_DEFUN([Exception], | |
881 | [BOOST_FIND_HEADER([boost/exception/all.hpp])]) | |
882 | ||
883 | ||
1b88fc23 | 884 | # BOOST_FILESYSTEM([PREFERRED-RT-OPT], [ERROR_ON_UNUSABLE]) |
94ac5f34 PD |
885 | # ------------------------------------ |
886 | # Look for Boost.Filesystem. For the documentation of PREFERRED-RT-OPT, see | |
887 | # the documentation of BOOST_FIND_LIB above. | |
888 | # Do not check for boost/filesystem.hpp because this file was introduced in | |
889 | # 1.34. | |
890 | BOOST_DEFUN([Filesystem], | |
891 | [# Do we have to check for Boost.System? This link-time dependency was | |
892 | # added as of 1.35.0. If we have a version <1.35, we must not attempt to | |
893 | # find Boost.System as it didn't exist by then. | |
894 | if test $boost_major_version -ge 135; then | |
1b88fc23 | 895 | BOOST_SYSTEM([$1], [$2]) |
94ac5f34 PD |
896 | fi # end of the Boost.System check. |
897 | boost_filesystem_save_LIBS=$LIBS | |
898 | boost_filesystem_save_LDFLAGS=$LDFLAGS | |
899 | m4_pattern_allow([^BOOST_SYSTEM_(LIBS|LDFLAGS)$])dnl | |
900 | LIBS="$LIBS $BOOST_SYSTEM_LIBS" | |
901 | LDFLAGS="$LDFLAGS $BOOST_SYSTEM_LDFLAGS" | |
902 | BOOST_FIND_LIB([filesystem], [$1], | |
1b88fc23 PL |
903 | [boost/filesystem/path.hpp], [boost::filesystem::path p;], |
904 | [], [], [$2]) | |
94ac5f34 | 905 | if test $enable_static_boost = yes && test $boost_major_version -ge 135; then |
2187934a | 906 | BOOST_FILESYSTEM_LIBS="$BOOST_FILESYSTEM_LIBS $BOOST_SYSTEM_LIBS" |
94ac5f34 PD |
907 | fi |
908 | LIBS=$boost_filesystem_save_LIBS | |
909 | LDFLAGS=$boost_filesystem_save_LDFLAGS | |
910 | ])# BOOST_FILESYSTEM | |
911 | ||
912 | ||
2187934a RK |
913 | # BOOST_FLYWEIGHT() |
914 | # ----------------- | |
915 | # Look for Boost.Flyweight. | |
916 | BOOST_DEFUN([Flyweight], | |
917 | [dnl There's a hidden dependency on pthreads. | |
918 | AC_REQUIRE([_BOOST_PTHREAD_FLAG])dnl | |
919 | BOOST_FIND_HEADER([boost/flyweight.hpp]) | |
920 | AC_SUBST([BOOST_FLYWEIGHT_LIBS], [$boost_cv_pthread_flag]) | |
921 | ]) | |
922 | ||
923 | ||
94ac5f34 PD |
924 | # BOOST_FOREACH() |
925 | # --------------- | |
2187934a | 926 | # Look for Boost.Foreach. |
94ac5f34 PD |
927 | BOOST_DEFUN([Foreach], |
928 | [BOOST_FIND_HEADER([boost/foreach.hpp])]) | |
929 | ||
930 | ||
931 | # BOOST_FORMAT() | |
932 | # -------------- | |
2187934a | 933 | # Look for Boost.Format. |
94ac5f34 PD |
934 | # Note: we can't check for boost/format/format_fwd.hpp because the header isn't |
935 | # standalone. It can't be compiled because it triggers the following error: | |
936 | # boost/format/detail/config_macros.hpp:88: error: 'locale' in namespace 'std' | |
937 | # does not name a type | |
938 | BOOST_DEFUN([Format], | |
939 | [BOOST_FIND_HEADER([boost/format.hpp])]) | |
940 | ||
941 | ||
942 | # BOOST_FUNCTION() | |
943 | # ---------------- | |
944 | # Look for Boost.Function | |
945 | BOOST_DEFUN([Function], | |
946 | [BOOST_FIND_HEADER([boost/function.hpp])]) | |
947 | ||
948 | ||
0b59e24e PL |
949 | # BOOST_FUSION() |
950 | # ----------------- | |
951 | # Look for Boost.Fusion | |
952 | BOOST_DEFUN([Fusion], | |
953 | [BOOST_FIND_HEADER([boost/fusion/sequence.hpp])]) | |
954 | ||
955 | ||
94ac5f34 PD |
956 | # BOOST_GEOMETRY() |
957 | # ---------------- | |
958 | # Look for Boost.Geometry (new since 1.47.0). | |
959 | BOOST_DEFUN([Geometry], | |
960 | [BOOST_FIND_HEADER([boost/geometry.hpp]) | |
961 | ])# BOOST_GEOMETRY | |
962 | ||
963 | ||
1b88fc23 | 964 | # BOOST_GRAPH([PREFERRED-RT-OPT], [ERROR_ON_UNUSABLE]) |
94ac5f34 PD |
965 | # ------------------------------- |
966 | # Look for Boost.Graphs. For the documentation of PREFERRED-RT-OPT, see the | |
967 | # documentation of BOOST_FIND_LIB above. | |
968 | BOOST_DEFUN([Graph], | |
afdd465f PL |
969 | [boost_graph_save_LIBS=$LIBS |
970 | boost_graph_save_LDFLAGS=$LDFLAGS | |
971 | # Link-time dependency from graph to regex was added as of 1.40.0. | |
972 | if test $boost_major_version -ge 140; then | |
1b88fc23 | 973 | BOOST_REGEX([$1], [$2]) |
afdd465f PL |
974 | m4_pattern_allow([^BOOST_REGEX_(LIBS|LDFLAGS)$])dnl |
975 | LIBS="$LIBS $BOOST_REGEX_LIBS" | |
976 | LDFLAGS="$LDFLAGS $BOOST_REGEX_LDFLAGS" | |
977 | fi | |
978 | BOOST_FIND_LIB([graph], [$1], | |
1b88fc23 PL |
979 | [boost/graph/adjacency_list.hpp], [boost::adjacency_list<> g;], |
980 | [], [], [$2]) | |
afdd465f PL |
981 | LIBS=$boost_graph_save_LIBS |
982 | LDFLAGS=$boost_graph_save_LDFLAGS | |
94ac5f34 PD |
983 | ])# BOOST_GRAPH |
984 | ||
985 | ||
0b59e24e PL |
986 | # BOOST_HASH() |
987 | # ------------ | |
988 | # Look for Boost.Functional/Hash | |
989 | BOOST_DEFUN([Hash], | |
990 | [BOOST_FIND_HEADER([boost/functional/hash.hpp])]) | |
991 | ||
992 | ||
1b88fc23 | 993 | # BOOST_IOSTREAMS([PREFERRED-RT-OPT], [ERROR_ON_UNUSABLE]) |
94ac5f34 PD |
994 | # ----------------------------------- |
995 | # Look for Boost.IOStreams. For the documentation of PREFERRED-RT-OPT, see the | |
996 | # documentation of BOOST_FIND_LIB above. | |
997 | BOOST_DEFUN([IOStreams], | |
998 | [BOOST_FIND_LIB([iostreams], [$1], | |
999 | [boost/iostreams/device/file_descriptor.hpp], | |
1b88fc23 PL |
1000 | [boost::iostreams::file_descriptor fd; fd.close();], |
1001 | [], [], [$2]) | |
94ac5f34 PD |
1002 | ])# BOOST_IOSTREAMS |
1003 | ||
1004 | ||
0b59e24e | 1005 | # BOOST_ITERATOR() |
94ac5f34 | 1006 | # ------------ |
0b59e24e PL |
1007 | # Look for Boost.Iterator |
1008 | BOOST_DEFUN([Iterator], | |
1009 | [BOOST_FIND_HEADER([boost/iterator/iterator_adaptor.hpp])]) | |
94ac5f34 PD |
1010 | |
1011 | ||
1012 | # BOOST_LAMBDA() | |
1013 | # -------------- | |
1014 | # Look for Boost.Lambda | |
1015 | BOOST_DEFUN([Lambda], | |
1016 | [BOOST_FIND_HEADER([boost/lambda/lambda.hpp])]) | |
1017 | ||
1018 | ||
1b88fc23 | 1019 | # BOOST_LOCALE([PREFERRED-RT-OPT], [ERROR_ON_UNUSABLE]) |
2187934a RK |
1020 | # -------------- |
1021 | # Look for Boost.Locale | |
1022 | BOOST_DEFUN([Locale], | |
afdd465f PL |
1023 | [ |
1024 | boost_locale_save_LIBS=$LIBS | |
1025 | boost_locale_save_LDFLAGS=$LDFLAGS | |
1026 | # require SYSTEM for boost-1.50.0 and up | |
1027 | if test $boost_major_version -ge 150; then | |
1b88fc23 | 1028 | BOOST_SYSTEM([$1], [$2]) |
afdd465f PL |
1029 | m4_pattern_allow([^BOOST_SYSTEM_(LIBS|LDFLAGS)$])dnl |
1030 | LIBS="$LIBS $BOOST_SYSTEM_LIBS" | |
1031 | LDFLAGS="$LDFLAGS $BOOST_SYSTEM_LDFLAGS" | |
1032 | fi # end of the Boost.System check. | |
1033 | BOOST_FIND_LIB([locale], [$1], | |
2187934a | 1034 | [boost/locale.hpp], |
1b88fc23 | 1035 | [[boost::locale::generator gen; std::locale::global(gen(""));]], [], [], [$2]) |
afdd465f PL |
1036 | LIBS=$boost_locale_save_LIBS |
1037 | LDFLAGS=$boost_locale_save_LDFLAGS | |
2187934a RK |
1038 | ])# BOOST_LOCALE |
1039 | ||
1b88fc23 | 1040 | # BOOST_LOG([PREFERRED-RT-OPT], [ERROR_ON_UNUSABLE]) |
94ac5f34 | 1041 | # ----------------------------- |
2187934a | 1042 | # Look for Boost.Log. For the documentation of PREFERRED-RT-OPT, see the |
94ac5f34 PD |
1043 | # documentation of BOOST_FIND_LIB above. |
1044 | BOOST_DEFUN([Log], | |
afdd465f PL |
1045 | [boost_log_save_LIBS=$LIBS |
1046 | boost_log_save_LDFLAGS=$LDFLAGS | |
1b88fc23 PL |
1047 | BOOST_SYSTEM([$1], [$2]) |
1048 | BOOST_FILESYSTEM([$1], [$2]) | |
1049 | BOOST_DATE_TIME([$1], [$2]) | |
afdd465f PL |
1050 | m4_pattern_allow([^BOOST_(SYSTEM|FILESYSTEM|DATE_TIME)_(LIBS|LDFLAGS)$])dnl |
1051 | LIBS="$LIBS $BOOST_DATE_TIME_LIBS $BOOST_FILESYSTEM_LIBS $BOOST_SYSTEM_LIBS" | |
1052 | LDFLAGS="$LDFLAGS $BOOST_DATE_TIME_LDFLAGS $BOOST_FILESYSTEM_LDFLAGS $BOOST_SYSTEM_LDFLAGS" | |
1053 | BOOST_FIND_LIB([log], [$1], | |
94ac5f34 | 1054 | [boost/log/core/core.hpp], |
1b88fc23 | 1055 | [boost::log::attribute a; a.get_value();], [], [], [$2]) |
afdd465f PL |
1056 | LIBS=$boost_log_save_LIBS |
1057 | LDFLAGS=$boost_log_save_LDFLAGS | |
94ac5f34 PD |
1058 | ])# BOOST_LOG |
1059 | ||
1060 | ||
1b88fc23 | 1061 | # BOOST_LOG_SETUP([PREFERRED-RT-OPT], [ERROR_ON_UNUSABLE]) |
94ac5f34 | 1062 | # ----------------------------------- |
2187934a | 1063 | # Look for Boost.Log. For the documentation of PREFERRED-RT-OPT, see the |
94ac5f34 PD |
1064 | # documentation of BOOST_FIND_LIB above. |
1065 | BOOST_DEFUN([Log_Setup], | |
afdd465f PL |
1066 | [boost_log_setup_save_LIBS=$LIBS |
1067 | boost_log_setup_save_LDFLAGS=$LDFLAGS | |
1068 | BOOST_LOG([$1]) | |
1069 | m4_pattern_allow([^BOOST_LOG_(LIBS|LDFLAGS)$])dnl | |
1070 | LIBS="$LIBS $BOOST_LOG_LIBS" | |
1071 | LDFLAGS="$LDFLAGS $BOOST_LOG_LDFLAGS" | |
94ac5f34 | 1072 | BOOST_FIND_LIB([log_setup], [$1], |
2187934a | 1073 | [boost/log/utility/setup/from_settings.hpp], |
1b88fc23 | 1074 | [boost::log::basic_settings<char> bs; bs.empty();], [], [], [$2]) |
afdd465f PL |
1075 | LIBS=$boost_log_setup_save_LIBS |
1076 | LDFLAGS=$boost_log_setup_save_LDFLAGS | |
94ac5f34 PD |
1077 | ])# BOOST_LOG_SETUP |
1078 | ||
1079 | ||
1080 | # BOOST_MATH() | |
1081 | # ------------ | |
1082 | # Look for Boost.Math | |
1083 | # TODO: This library isn't header-only but it comes in multiple different | |
1084 | # flavors that don't play well with BOOST_FIND_LIB (e.g, libboost_math_c99, | |
1085 | # libboost_math_c99f, libboost_math_c99l, libboost_math_tr1, | |
1086 | # libboost_math_tr1f, libboost_math_tr1l). This macro must be fixed to do the | |
1087 | # right thing anyway. | |
1088 | BOOST_DEFUN([Math], | |
1089 | [BOOST_FIND_HEADER([boost/math/special_functions.hpp])]) | |
1090 | ||
1091 | ||
1b88fc23 | 1092 | # BOOST_MPI([PREFERRED-RT-OPT], [ERROR_ON_UNUSABLE]) |
2187934a RK |
1093 | # ------------------------------- |
1094 | # Look for Boost MPI. For the documentation of PREFERRED-RT-OPT, see the | |
1095 | # documentation of BOOST_FIND_LIB above. Uses MPICXX variable if it is | |
1096 | # set, otherwise tries CXX | |
1097 | # | |
1098 | BOOST_DEFUN([MPI], | |
1099 | [boost_save_CXX=${CXX} | |
1100 | boost_save_CXXCPP=${CXXCPP} | |
1101 | if test x"${MPICXX}" != x; then | |
1102 | CXX=${MPICXX} | |
1103 | CXXCPP="${MPICXX} -E" | |
1104 | fi | |
1105 | BOOST_FIND_LIB([mpi], [$1], | |
1106 | [boost/mpi.hpp], | |
1107 | [int argc = 0; | |
1108 | char **argv = 0; | |
1b88fc23 PL |
1109 | boost::mpi::environment env(argc,argv);], |
1110 | [], [], [$2]) | |
2187934a RK |
1111 | CXX=${boost_save_CXX} |
1112 | CXXCPP=${boost_save_CXXCPP} | |
1113 | ])# BOOST_MPI | |
1114 | ||
1115 | ||
0b59e24e PL |
1116 | # BOOST_MPL() |
1117 | # ------------------ | |
1118 | # Look for Boost.MPL | |
1119 | BOOST_DEFUN([MPL], | |
1120 | [BOOST_FIND_HEADER([boost/mpl/for_each.hpp])]) | |
1121 | ||
1122 | ||
94ac5f34 PD |
1123 | # BOOST_MULTIARRAY() |
1124 | # ------------------ | |
1125 | # Look for Boost.MultiArray | |
1126 | BOOST_DEFUN([MultiArray], | |
1127 | [BOOST_FIND_HEADER([boost/multi_array.hpp])]) | |
1128 | ||
1129 | ||
0b59e24e PL |
1130 | # BOOST_MULTIINDEXCCONTAINER() |
1131 | # ------------------ | |
1132 | # Look for Boost.MultiIndexContainer | |
1133 | BOOST_DEFUN([MultiIndexContainer], | |
1134 | [BOOST_FIND_HEADER([boost/multi_index_container.hpp])]) | |
1135 | ||
1136 | ||
2187934a RK |
1137 | # BOOST_NUMERIC_UBLAS() |
1138 | # -------------------------- | |
1139 | # Look for Boost.NumericUblas (Basic Linear Algebra) | |
1140 | BOOST_DEFUN([Numeric_Ublas], | |
1141 | [BOOST_FIND_HEADER([boost/numeric/ublas/vector.hpp]) | |
1142 | ])# BOOST_NUMERIC_UBLAS | |
1143 | ||
1144 | ||
94ac5f34 PD |
1145 | # BOOST_NUMERIC_CONVERSION() |
1146 | # -------------------------- | |
1147 | # Look for Boost.NumericConversion (policy-based numeric conversion) | |
1148 | BOOST_DEFUN([Numeric_Conversion], | |
1149 | [BOOST_FIND_HEADER([boost/numeric/conversion/converter.hpp]) | |
1150 | ])# BOOST_NUMERIC_CONVERSION | |
1151 | ||
1152 | ||
1153 | # BOOST_OPTIONAL() | |
1154 | # ---------------- | |
1155 | # Look for Boost.Optional | |
1156 | BOOST_DEFUN([Optional], | |
1157 | [BOOST_FIND_HEADER([boost/optional.hpp])]) | |
1158 | ||
1159 | ||
1160 | # BOOST_PREPROCESSOR() | |
1161 | # -------------------- | |
1162 | # Look for Boost.Preprocessor | |
1163 | BOOST_DEFUN([Preprocessor], | |
1164 | [BOOST_FIND_HEADER([boost/preprocessor/repeat.hpp])]) | |
1165 | ||
1166 | ||
1b88fc23 | 1167 | # BOOST_PROPERTY_TREE([PREFERRED-RT-OPT], [ERROR_ON_UNUSABLE]) |
0b59e24e PL |
1168 | # ----------------------------------------- |
1169 | # Look for Boost.Property_Tree. For the documentation of PREFERRED-RT-OPT, | |
1170 | # see the documentation of BOOST_FIND_LIB above. | |
1171 | BOOST_DEFUN([Property_Tree], | |
1172 | [BOOST_FIND_LIB([property_tree], [$1], | |
1173 | [boost/property_tree/ptree.hpp], | |
1b88fc23 PL |
1174 | [boost::property_tree::ptree pt; boost::property_tree::read_xml d("test", pt);], |
1175 | [], [], [$2]) | |
0b59e24e PL |
1176 | ])# BOOST_PROPERTY_TREE |
1177 | ||
1178 | ||
1179 | # BOOST_RANDOM() | |
1180 | # -------------------- | |
1181 | # Look for Boost.Random | |
1182 | BOOST_DEFUN([Random], | |
1183 | [BOOST_FIND_HEADER([boost/random/random_number_generator.hpp])]) | |
1184 | ||
1185 | ||
2187934a RK |
1186 | # BOOST_RANGE() |
1187 | # -------------------- | |
1188 | # Look for Boost.Range | |
1189 | BOOST_DEFUN([Range], | |
1190 | [BOOST_FIND_HEADER([boost/range/adaptors.hpp])]) | |
1191 | ||
94ac5f34 PD |
1192 | # BOOST_UNORDERED() |
1193 | # ----------------- | |
1194 | # Look for Boost.Unordered | |
1195 | BOOST_DEFUN([Unordered], | |
1196 | [BOOST_FIND_HEADER([boost/unordered_map.hpp])]) | |
1197 | ||
1198 | ||
1199 | # BOOST_UUID() | |
1200 | # ------------ | |
1201 | # Look for Boost.Uuid | |
1202 | BOOST_DEFUN([Uuid], | |
1203 | [BOOST_FIND_HEADER([boost/uuid/uuid.hpp])]) | |
1204 | ||
1205 | ||
1b88fc23 | 1206 | # BOOST_PROGRAM_OPTIONS([PREFERRED-RT-OPT], [ERROR_ON_UNUSABLE]) |
94ac5f34 PD |
1207 | # ----------------------------------------- |
1208 | # Look for Boost.Program_options. For the documentation of PREFERRED-RT-OPT, | |
1209 | # see the documentation of BOOST_FIND_LIB above. | |
1210 | BOOST_DEFUN([Program_Options], | |
1211 | [BOOST_FIND_LIB([program_options], [$1], | |
1212 | [boost/program_options.hpp], | |
1b88fc23 PL |
1213 | [boost::program_options::options_description d("test");], |
1214 | [], [], [$2]) | |
94ac5f34 PD |
1215 | ])# BOOST_PROGRAM_OPTIONS |
1216 | ||
1217 | ||
1218 | ||
1219 | # _BOOST_PYTHON_CONFIG(VARIABLE, FLAG) | |
1220 | # ------------------------------------ | |
1221 | # Save VARIABLE, and define it via `python-config --FLAG`. | |
1222 | # Substitute BOOST_PYTHON_VARIABLE. | |
1223 | m4_define([_BOOST_PYTHON_CONFIG], | |
1224 | [AC_SUBST([BOOST_PYTHON_$1], | |
1225 | [`python-config --$2 2>/dev/null`])dnl | |
1226 | boost_python_save_$1=$$1 | |
1227 | $1="$$1 $BOOST_PYTHON_$1"]) | |
1228 | ||
1229 | ||
1b88fc23 | 1230 | # BOOST_PYTHON([PREFERRED-RT-OPT], [ERROR_ON_UNUSABLE]) |
94ac5f34 PD |
1231 | # -------------------------------- |
1232 | # Look for Boost.Python. For the documentation of PREFERRED-RT-OPT, | |
1233 | # see the documentation of BOOST_FIND_LIB above. | |
1234 | BOOST_DEFUN([Python], | |
1235 | [_BOOST_PYTHON_CONFIG([CPPFLAGS], [includes]) | |
1236 | _BOOST_PYTHON_CONFIG([LDFLAGS], [ldflags]) | |
1237 | _BOOST_PYTHON_CONFIG([LIBS], [libs]) | |
1238 | m4_pattern_allow([^BOOST_PYTHON_MODULE$])dnl | |
2187934a RK |
1239 | BOOST_FIND_LIBS([python], [python python3], [$1], |
1240 | [boost/python.hpp], | |
1b88fc23 | 1241 | [], [BOOST_PYTHON_MODULE(empty) {}], [], [$2]) |
94ac5f34 PD |
1242 | CPPFLAGS=$boost_python_save_CPPFLAGS |
1243 | LDFLAGS=$boost_python_save_LDFLAGS | |
1244 | LIBS=$boost_python_save_LIBS | |
1245 | ])# BOOST_PYTHON | |
1246 | ||
1247 | ||
1248 | # BOOST_REF() | |
1249 | # ----------- | |
1250 | # Look for Boost.Ref | |
1251 | BOOST_DEFUN([Ref], | |
1252 | [BOOST_FIND_HEADER([boost/ref.hpp])]) | |
1253 | ||
1254 | ||
1b88fc23 | 1255 | # BOOST_REGEX([PREFERRED-RT-OPT], [ERROR_ON_UNUSABLE]) |
94ac5f34 PD |
1256 | # ------------------------------- |
1257 | # Look for Boost.Regex. For the documentation of PREFERRED-RT-OPT, see the | |
1258 | # documentation of BOOST_FIND_LIB above. | |
1259 | BOOST_DEFUN([Regex], | |
1260 | [BOOST_FIND_LIB([regex], [$1], | |
1261 | [boost/regex.hpp], | |
1b88fc23 PL |
1262 | [boost::regex exp("*"); boost::regex_match("foo", exp);], |
1263 | [], [], [$2]) | |
94ac5f34 PD |
1264 | ])# BOOST_REGEX |
1265 | ||
1266 | ||
d7a2a52f PL |
1267 | # BOOST_SCOPE_EXIT() |
1268 | # ------------ | |
1269 | # Look for Boost.ScopeExit. | |
1270 | BOOST_DEFUN([SCOPE_EXIT], | |
1271 | [BOOST_FIND_HEADER([boost/scope_exit.hpp])]) | |
1272 | ||
1273 | ||
1b88fc23 | 1274 | # BOOST_SERIALIZATION([PREFERRED-RT-OPT], [ERROR_ON_UNUSABLE]) |
94ac5f34 PD |
1275 | # --------------------------------------- |
1276 | # Look for Boost.Serialization. For the documentation of PREFERRED-RT-OPT, see | |
1277 | # the documentation of BOOST_FIND_LIB above. | |
1278 | BOOST_DEFUN([Serialization], | |
1279 | [BOOST_FIND_LIB([serialization], [$1], | |
1280 | [boost/archive/text_oarchive.hpp], | |
1281 | [std::ostream* o = 0; // Cheap way to get an ostream... | |
1b88fc23 PL |
1282 | boost::archive::text_oarchive t(*o);], |
1283 | [], [], [$2]) | |
94ac5f34 PD |
1284 | ])# BOOST_SERIALIZATION |
1285 | ||
1286 | ||
1b88fc23 | 1287 | # BOOST_SIGNALS([PREFERRED-RT-OPT], [ERROR_ON_UNUSABLE]) |
94ac5f34 PD |
1288 | # --------------------------------- |
1289 | # Look for Boost.Signals. For the documentation of PREFERRED-RT-OPT, see the | |
1290 | # documentation of BOOST_FIND_LIB above. | |
1291 | BOOST_DEFUN([Signals], | |
1292 | [BOOST_FIND_LIB([signals], [$1], | |
1293 | [boost/signal.hpp], | |
1b88fc23 PL |
1294 | [boost::signal<void ()> s;], |
1295 | [], [], [$2]) | |
94ac5f34 PD |
1296 | ])# BOOST_SIGNALS |
1297 | ||
1298 | ||
1299 | # BOOST_SIGNALS2() | |
1300 | # ---------------- | |
1301 | # Look for Boost.Signals2 (new since 1.39.0). | |
1302 | BOOST_DEFUN([Signals2], | |
1303 | [BOOST_FIND_HEADER([boost/signals2.hpp]) | |
1304 | ])# BOOST_SIGNALS2 | |
1305 | ||
1306 | ||
1307 | # BOOST_SMART_PTR() | |
1308 | # ----------------- | |
1309 | # Look for Boost.SmartPtr | |
1310 | BOOST_DEFUN([Smart_Ptr], | |
1311 | [BOOST_FIND_HEADER([boost/scoped_ptr.hpp]) | |
1312 | BOOST_FIND_HEADER([boost/shared_ptr.hpp]) | |
1313 | ]) | |
1314 | ||
1315 | ||
1316 | # BOOST_STATICASSERT() | |
1317 | # -------------------- | |
1318 | # Look for Boost.StaticAssert | |
1319 | BOOST_DEFUN([StaticAssert], | |
1320 | [BOOST_FIND_HEADER([boost/static_assert.hpp])]) | |
1321 | ||
1322 | ||
1323 | # BOOST_STRING_ALGO() | |
1324 | # ------------------- | |
1325 | # Look for Boost.StringAlgo | |
1326 | BOOST_DEFUN([String_Algo], | |
1327 | [BOOST_FIND_HEADER([boost/algorithm/string.hpp]) | |
1328 | ]) | |
1329 | ||
1330 | ||
1b88fc23 | 1331 | # BOOST_SYSTEM([PREFERRED-RT-OPT], [ERROR_ON_UNUSABLE]) |
94ac5f34 PD |
1332 | # -------------------------------- |
1333 | # Look for Boost.System. For the documentation of PREFERRED-RT-OPT, see the | |
1334 | # documentation of BOOST_FIND_LIB above. This library was introduced in Boost | |
1335 | # 1.35.0. | |
1336 | BOOST_DEFUN([System], | |
1337 | [BOOST_FIND_LIB([system], [$1], | |
1338 | [boost/system/error_code.hpp], | |
1b88fc23 | 1339 | [boost::system::error_code e; e.clear();], [], [], [$2]) |
94ac5f34 PD |
1340 | ])# BOOST_SYSTEM |
1341 | ||
1342 | ||
1b88fc23 | 1343 | # BOOST_TEST([PREFERRED-RT-OPT], [ERROR_ON_UNUSABLE]) |
94ac5f34 PD |
1344 | # ------------------------------ |
1345 | # Look for Boost.Test. For the documentation of PREFERRED-RT-OPT, see the | |
1346 | # documentation of BOOST_FIND_LIB above. | |
1347 | BOOST_DEFUN([Test], | |
1348 | [m4_pattern_allow([^BOOST_CHECK$])dnl | |
1349 | BOOST_FIND_LIB([unit_test_framework], [$1], | |
1350 | [boost/test/unit_test.hpp], [BOOST_CHECK(2 == 2);], | |
1351 | [using boost::unit_test::test_suite; | |
1352 | test_suite* init_unit_test_suite(int argc, char ** argv) | |
1b88fc23 | 1353 | { return NULL; }], [], [$2]) |
94ac5f34 PD |
1354 | ])# BOOST_TEST |
1355 | ||
1356 | ||
1b88fc23 | 1357 | # BOOST_THREAD([PREFERRED-RT-OPT], [ERROR_ON_UNUSABLE]) |
94ac5f34 PD |
1358 | # --------------------------------- |
1359 | # Look for Boost.Thread. For the documentation of PREFERRED-RT-OPT, see the | |
1360 | # documentation of BOOST_FIND_LIB above. | |
2187934a | 1361 | BOOST_DEFUN([Thread], |
94ac5f34 PD |
1362 | [dnl Having the pthread flag is required at least on GCC3 where |
1363 | dnl boost/thread.hpp would complain if we try to compile without | |
1364 | dnl -pthread on GNU/Linux. | |
1365 | AC_REQUIRE([_BOOST_PTHREAD_FLAG])dnl | |
2187934a RK |
1366 | boost_thread_save_LIBS=$LIBS |
1367 | boost_thread_save_LDFLAGS=$LDFLAGS | |
1368 | boost_thread_save_CPPFLAGS=$CPPFLAGS | |
94ac5f34 PD |
1369 | # Link-time dependency from thread to system was added as of 1.49.0. |
1370 | if test $boost_major_version -ge 149; then | |
1b88fc23 | 1371 | BOOST_SYSTEM([$1], [$2]) |
94ac5f34 PD |
1372 | fi # end of the Boost.System check. |
1373 | m4_pattern_allow([^BOOST_SYSTEM_(LIBS|LDFLAGS)$])dnl | |
1374 | LIBS="$LIBS $BOOST_SYSTEM_LIBS $boost_cv_pthread_flag" | |
1375 | LDFLAGS="$LDFLAGS $BOOST_SYSTEM_LDFLAGS" | |
94ac5f34 PD |
1376 | CPPFLAGS="$CPPFLAGS $boost_cv_pthread_flag" |
1377 | ||
1378 | # When compiling for the Windows platform, the threads library is named | |
b0d6e9e6 KM |
1379 | # differently. This suffix doesn't exist in new versions of Boost, or |
1380 | # possibly new versions of GCC on mingw I am assuming it's Boost's change for | |
1381 | # now and I am setting version to 1.48, for lack of knowledge as to when this | |
1382 | # change occurred. | |
1383 | if test $boost_major_version -lt 148; then | |
1384 | case $host_os in | |
1385 | (*mingw*) boost_thread_lib_ext=_win32;; | |
1386 | esac | |
1387 | fi | |
2187934a RK |
1388 | BOOST_FIND_LIBS([thread], [thread$boost_thread_lib_ext], |
1389 | [$1], | |
1b88fc23 | 1390 | [boost/thread.hpp], [boost::thread t; boost::mutex m;], [], [], [$2]) |
94ac5f34 | 1391 | |
b0d6e9e6 KM |
1392 | case $host_os in |
1393 | (*mingw*) boost_thread_w32_socket_link=-lws2_32;; | |
1394 | esac | |
1395 | ||
1396 | BOOST_THREAD_LIBS="$BOOST_THREAD_LIBS $BOOST_SYSTEM_LIBS $boost_cv_pthread_flag $boost_thread_w32_socket_link" | |
94ac5f34 PD |
1397 | BOOST_THREAD_LDFLAGS="$BOOST_SYSTEM_LDFLAGS" |
1398 | BOOST_CPPFLAGS="$BOOST_CPPFLAGS $boost_cv_pthread_flag" | |
2187934a RK |
1399 | LIBS=$boost_thread_save_LIBS |
1400 | LDFLAGS=$boost_thread_save_LDFLAGS | |
1401 | CPPFLAGS=$boost_thread_save_CPPFLAGS | |
1402 | ])# BOOST_THREAD | |
1403 | ||
1404 | AU_ALIAS([BOOST_THREADS], [BOOST_THREAD]) | |
94ac5f34 PD |
1405 | |
1406 | ||
1407 | # BOOST_TOKENIZER() | |
1408 | # ----------------- | |
1409 | # Look for Boost.Tokenizer | |
1410 | BOOST_DEFUN([Tokenizer], | |
1411 | [BOOST_FIND_HEADER([boost/tokenizer.hpp])]) | |
1412 | ||
1413 | ||
1414 | # BOOST_TRIBOOL() | |
1415 | # --------------- | |
1416 | # Look for Boost.Tribool | |
1417 | BOOST_DEFUN([Tribool], | |
1418 | [BOOST_FIND_HEADER([boost/logic/tribool_fwd.hpp]) | |
1419 | BOOST_FIND_HEADER([boost/logic/tribool.hpp]) | |
1420 | ]) | |
1421 | ||
1422 | ||
1423 | # BOOST_TUPLE() | |
1424 | # ------------- | |
1425 | # Look for Boost.Tuple | |
1426 | BOOST_DEFUN([Tuple], | |
1427 | [BOOST_FIND_HEADER([boost/tuple/tuple.hpp])]) | |
1428 | ||
1429 | ||
1430 | # BOOST_TYPETRAITS() | |
1431 | # -------------------- | |
1432 | # Look for Boost.TypeTraits | |
1433 | BOOST_DEFUN([TypeTraits], | |
1434 | [BOOST_FIND_HEADER([boost/type_traits.hpp])]) | |
1435 | ||
1436 | ||
1437 | # BOOST_UTILITY() | |
1438 | # --------------- | |
1439 | # Look for Boost.Utility (noncopyable, result_of, base-from-member idiom, | |
1440 | # etc.) | |
1441 | BOOST_DEFUN([Utility], | |
1442 | [BOOST_FIND_HEADER([boost/utility.hpp])]) | |
1443 | ||
1444 | ||
1445 | # BOOST_VARIANT() | |
1446 | # --------------- | |
1447 | # Look for Boost.Variant. | |
1448 | BOOST_DEFUN([Variant], | |
1449 | [BOOST_FIND_HEADER([boost/variant/variant_fwd.hpp]) | |
1450 | BOOST_FIND_HEADER([boost/variant.hpp])]) | |
1451 | ||
2187934a RK |
1452 | |
1453 | # BOOST_POINTER_CONTAINER() | |
94ac5f34 PD |
1454 | # ------------------------ |
1455 | # Look for Boost.PointerContainer | |
1456 | BOOST_DEFUN([Pointer_Container], | |
1457 | [BOOST_FIND_HEADER([boost/ptr_container/ptr_deque.hpp]) | |
1458 | BOOST_FIND_HEADER([boost/ptr_container/ptr_list.hpp]) | |
1459 | BOOST_FIND_HEADER([boost/ptr_container/ptr_vector.hpp]) | |
1460 | BOOST_FIND_HEADER([boost/ptr_container/ptr_array.hpp]) | |
1461 | BOOST_FIND_HEADER([boost/ptr_container/ptr_set.hpp]) | |
1462 | BOOST_FIND_HEADER([boost/ptr_container/ptr_map.hpp]) | |
2187934a RK |
1463 | ])# BOOST_POINTER_CONTAINER |
1464 | ||
94ac5f34 | 1465 | |
1b88fc23 | 1466 | # BOOST_WAVE([PREFERRED-RT-OPT], [ERROR_ON_UNUSABLE]) |
94ac5f34 PD |
1467 | # ------------------------------ |
1468 | # NOTE: If you intend to use Wave/Spirit with thread support, make sure you | |
2187934a | 1469 | # call BOOST_THREAD first. |
94ac5f34 PD |
1470 | # Look for Boost.Wave. For the documentation of PREFERRED-RT-OPT, see the |
1471 | # documentation of BOOST_FIND_LIB above. | |
1472 | BOOST_DEFUN([Wave], | |
1473 | [AC_REQUIRE([BOOST_FILESYSTEM])dnl | |
1474 | AC_REQUIRE([BOOST_DATE_TIME])dnl | |
1475 | boost_wave_save_LIBS=$LIBS | |
1476 | boost_wave_save_LDFLAGS=$LDFLAGS | |
1477 | m4_pattern_allow([^BOOST_((FILE)?SYSTEM|DATE_TIME|THREAD)_(LIBS|LDFLAGS)$])dnl | |
1478 | LIBS="$LIBS $BOOST_SYSTEM_LIBS $BOOST_FILESYSTEM_LIBS $BOOST_DATE_TIME_LIBS \ | |
1479 | $BOOST_THREAD_LIBS" | |
1480 | LDFLAGS="$LDFLAGS $BOOST_SYSTEM_LDFLAGS $BOOST_FILESYSTEM_LDFLAGS \ | |
1481 | $BOOST_DATE_TIME_LDFLAGS $BOOST_THREAD_LDFLAGS" | |
1482 | BOOST_FIND_LIB([wave], [$1], | |
1483 | [boost/wave.hpp], | |
1b88fc23 | 1484 | [boost::wave::token_id id; get_token_name(id);], [], [], [$2]) |
94ac5f34 PD |
1485 | LIBS=$boost_wave_save_LIBS |
1486 | LDFLAGS=$boost_wave_save_LDFLAGS | |
1487 | ])# BOOST_WAVE | |
1488 | ||
1489 | ||
1490 | # BOOST_XPRESSIVE() | |
1491 | # ----------------- | |
1492 | # Look for Boost.Xpressive (new since 1.36.0). | |
1493 | BOOST_DEFUN([Xpressive], | |
1494 | [BOOST_FIND_HEADER([boost/xpressive/xpressive.hpp])]) | |
1495 | ||
1496 | ||
1497 | # ----------------- # | |
1498 | # Internal helpers. # | |
1499 | # ----------------- # | |
1500 | ||
1501 | ||
1502 | # _BOOST_PTHREAD_FLAG() | |
1503 | # --------------------- | |
2187934a RK |
1504 | # Internal helper for BOOST_THREAD. Computes boost_cv_pthread_flag |
1505 | # which must be used in CPPFLAGS and LIBS. | |
1506 | # | |
1507 | # Yes, we *need* to put the -pthread thing in CPPFLAGS because with GCC3, | |
1508 | # boost/thread.hpp will trigger a #error if -pthread isn't used: | |
1509 | # boost/config/requires_threads.hpp:47:5: #error "Compiler threading support | |
1510 | # is not turned on. Please set the correct command line options for | |
1511 | # threading: -pthread (Linux), -pthreads (Solaris) or -mthreads (Mingw32)" | |
1512 | # | |
1513 | # Based on ACX_PTHREAD: http://autoconf-archive.cryp.to/acx_pthread.html | |
94ac5f34 PD |
1514 | AC_DEFUN([_BOOST_PTHREAD_FLAG], |
1515 | [AC_REQUIRE([AC_PROG_CXX])dnl | |
1516 | AC_REQUIRE([AC_CANONICAL_HOST])dnl | |
1517 | AC_LANG_PUSH([C++])dnl | |
1518 | AC_CACHE_CHECK([for the flags needed to use pthreads], [boost_cv_pthread_flag], | |
1519 | [ boost_cv_pthread_flag= | |
1520 | # The ordering *is* (sometimes) important. Some notes on the | |
1521 | # individual items follow: | |
1522 | # (none): in case threads are in libc; should be tried before -Kthread and | |
1523 | # other compiler flags to prevent continual compiler warnings | |
1524 | # -lpthreads: AIX (must check this before -lpthread) | |
1525 | # -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) | |
1526 | # -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) | |
1527 | # -llthread: LinuxThreads port on FreeBSD (also preferred to -pthread) | |
1528 | # -pthread: GNU Linux/GCC (kernel threads), BSD/GCC (userland threads) | |
1529 | # -pthreads: Solaris/GCC | |
1530 | # -mthreads: MinGW32/GCC, Lynx/GCC | |
1531 | # -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it | |
1532 | # doesn't hurt to check since this sometimes defines pthreads too; | |
1533 | # also defines -D_REENTRANT) | |
1534 | # ... -mt is also the pthreads flag for HP/aCC | |
1535 | # -lpthread: GNU Linux, etc. | |
1536 | # --thread-safe: KAI C++ | |
1537 | case $host_os in #( | |
1538 | *solaris*) | |
1539 | # On Solaris (at least, for some versions), libc contains stubbed | |
1540 | # (non-functional) versions of the pthreads routines, so link-based | |
1541 | # tests will erroneously succeed. (We need to link with -pthreads/-mt/ | |
1542 | # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather | |
1543 | # a function called by this macro, so we could check for that, but | |
1544 | # who knows whether they'll stub that too in a future libc.) So, | |
1545 | # we'll just look for -pthreads and -lpthread first: | |
1546 | boost_pthread_flags="-pthreads -lpthread -mt -pthread";; #( | |
1547 | *) | |
1548 | boost_pthread_flags="-lpthreads -Kthread -kthread -llthread -pthread \ | |
1549 | -pthreads -mthreads -lpthread --thread-safe -mt";; | |
1550 | esac | |
1551 | # Generate the test file. | |
1552 | AC_LANG_CONFTEST([AC_LANG_PROGRAM([#include <pthread.h>], | |
1553 | [pthread_t th; pthread_join(th, 0); | |
1554 | pthread_attr_init(0); pthread_cleanup_push(0, 0); | |
1555 | pthread_create(0,0,0,0); pthread_cleanup_pop(0);])]) | |
1556 | for boost_pthread_flag in '' $boost_pthread_flags; do | |
1557 | boost_pthread_ok=false | |
1558 | dnl Re-use the test file already generated. | |
1559 | boost_pthreads__save_LIBS=$LIBS | |
1560 | LIBS="$LIBS $boost_pthread_flag" | |
1561 | AC_LINK_IFELSE([], | |
1562 | [if grep ".*$boost_pthread_flag" conftest.err; then | |
1563 | echo "This flag seems to have triggered warnings" >&AS_MESSAGE_LOG_FD | |
1564 | else | |
1565 | boost_pthread_ok=:; boost_cv_pthread_flag=$boost_pthread_flag | |
1566 | fi]) | |
1567 | LIBS=$boost_pthreads__save_LIBS | |
1568 | $boost_pthread_ok && break | |
1569 | done | |
1570 | ]) | |
1571 | AC_LANG_POP([C++])dnl | |
1572 | ])# _BOOST_PTHREAD_FLAG | |
1573 | ||
1574 | ||
1575 | # _BOOST_gcc_test(MAJOR, MINOR) | |
1576 | # ----------------------------- | |
1577 | # Internal helper for _BOOST_FIND_COMPILER_TAG. | |
1578 | m4_define([_BOOST_gcc_test], | |
1579 | ["defined __GNUC__ && __GNUC__ == $1 && __GNUC_MINOR__ == $2 && !defined __ICC @ gcc$1$2"])dnl | |
1580 | ||
2187934a RK |
1581 | # _BOOST_mingw_test(MAJOR, MINOR) |
1582 | # ----------------------------- | |
1583 | # Internal helper for _BOOST_FIND_COMPILER_TAG. | |
1584 | m4_define([_BOOST_mingw_test], | |
1585 | ["defined __GNUC__ && __GNUC__ == $1 && __GNUC_MINOR__ == $2 && !defined __ICC && \ | |
1586 | (defined WIN32 || defined WINNT || defined _WIN32 || defined __WIN32 \ | |
1587 | || defined __WIN32__ || defined __WINNT || defined __WINNT__) @ mgw$1$2"])dnl | |
1588 | ||
94ac5f34 PD |
1589 | |
1590 | # _BOOST_FIND_COMPILER_TAG() | |
1591 | # -------------------------- | |
1592 | # Internal. When Boost is installed without --layout=system, each library | |
1593 | # filename will hold a suffix that encodes the compiler used during the | |
1594 | # build. The Boost build system seems to call this a `tag'. | |
1595 | AC_DEFUN([_BOOST_FIND_COMPILER_TAG], | |
1596 | [AC_REQUIRE([AC_PROG_CXX])dnl | |
1597 | AC_REQUIRE([AC_CANONICAL_HOST])dnl | |
2187934a RK |
1598 | AC_CACHE_CHECK([for the toolset name used by Boost for $CXX], |
1599 | [boost_cv_lib_tag], | |
94ac5f34 PD |
1600 | [boost_cv_lib_tag=unknown |
1601 | if test x$boost_cv_inc_path != xno; then | |
1602 | AC_LANG_PUSH([C++])dnl | |
1603 | # The following tests are mostly inspired by boost/config/auto_link.hpp | |
1604 | # The list is sorted to most recent/common to oldest compiler (in order | |
1605 | # to increase the likelihood of finding the right compiler with the | |
1606 | # least number of compilation attempt). | |
1607 | # Beware that some tests are sensible to the order (for instance, we must | |
1608 | # look for MinGW before looking for GCC3). | |
1609 | # I used one compilation test per compiler with a #error to recognize | |
1610 | # each compiler so that it works even when cross-compiling (let me know | |
1611 | # if you know a better approach). | |
1612 | # Known missing tags (known from Boost's tools/build/v2/tools/common.jam): | |
1613 | # como, edg, kcc, bck, mp, sw, tru, xlc | |
1614 | # I'm not sure about my test for `il' (be careful: Intel's ICC pre-defines | |
1615 | # the same defines as GCC's). | |
1616 | for i in \ | |
d7a2a52f PL |
1617 | "defined __clang__ && __clang_major__ == 8 && __clang_minor__ == 0 @ clang80" \ |
1618 | "defined __clang__ && __clang_major__ == 7 && __clang_minor__ == 0 @ clang70" \ | |
1619 | "defined __clang__ && __clang_major__ == 6 && __clang_minor__ == 0 @ clang60" \ | |
1620 | "defined __clang__ && __clang_major__ == 5 && __clang_minor__ == 0 @ clang50" \ | |
1621 | "defined __clang__ && __clang_major__ == 4 && __clang_minor__ == 0 @ clang40" \ | |
1622 | "defined __clang__ && __clang_major__ == 3 && __clang_minor__ == 9 @ clang39" \ | |
1623 | "defined __clang__ && __clang_major__ == 3 && __clang_minor__ == 8 @ clang38" \ | |
1624 | "defined __clang__ && __clang_major__ == 3 && __clang_minor__ == 7 @ clang37" \ | |
1625 | _BOOST_mingw_test(9, 1) \ | |
1626 | _BOOST_gcc_test(9, 1) \ | |
1627 | _BOOST_mingw_test(9, 0) \ | |
1628 | _BOOST_gcc_test(9, 0) \ | |
15875dd8 PL |
1629 | _BOOST_mingw_test(8, 3) \ |
1630 | _BOOST_gcc_test(8, 3) \ | |
0b59e24e PL |
1631 | _BOOST_mingw_test(8, 2) \ |
1632 | _BOOST_gcc_test(8, 2) \ | |
1633 | _BOOST_mingw_test(8, 1) \ | |
1634 | _BOOST_gcc_test(8, 1) \ | |
1635 | _BOOST_mingw_test(8, 0) \ | |
1636 | _BOOST_gcc_test(8, 0) \ | |
1637 | _BOOST_mingw_test(7, 3) \ | |
1638 | _BOOST_gcc_test(7, 3) \ | |
e2a91983 PL |
1639 | _BOOST_mingw_test(7, 2) \ |
1640 | _BOOST_gcc_test(7, 2) \ | |
7364056a KM |
1641 | _BOOST_mingw_test(7, 1) \ |
1642 | _BOOST_gcc_test(7, 1) \ | |
1643 | _BOOST_mingw_test(7, 0) \ | |
1644 | _BOOST_gcc_test(7, 0) \ | |
0b59e24e PL |
1645 | _BOOST_mingw_test(6, 4) \ |
1646 | _BOOST_gcc_test(6, 4) \ | |
bfafc642 PL |
1647 | _BOOST_mingw_test(6, 3) \ |
1648 | _BOOST_gcc_test(6, 3) \ | |
d593e741 KM |
1649 | _BOOST_mingw_test(6, 2) \ |
1650 | _BOOST_gcc_test(6, 2) \ | |
089bc1c5 KM |
1651 | _BOOST_mingw_test(6, 1) \ |
1652 | _BOOST_gcc_test(6, 1) \ | |
3b6c745f KM |
1653 | _BOOST_mingw_test(6, 0) \ |
1654 | _BOOST_gcc_test(6, 0) \ | |
0b59e24e PL |
1655 | _BOOST_mingw_test(5, 5) \ |
1656 | _BOOST_gcc_test(5, 5) \ | |
cabf3aa7 PD |
1657 | _BOOST_mingw_test(5, 4) \ |
1658 | _BOOST_gcc_test(5, 4) \ | |
afdd465f PL |
1659 | _BOOST_mingw_test(5, 3) \ |
1660 | _BOOST_gcc_test(5, 3) \ | |
fe6a830f PL |
1661 | _BOOST_mingw_test(5, 2) \ |
1662 | _BOOST_gcc_test(5, 2) \ | |
016ed2c1 RK |
1663 | _BOOST_mingw_test(5, 1) \ |
1664 | _BOOST_gcc_test(5, 1) \ | |
2187934a RK |
1665 | _BOOST_mingw_test(5, 0) \ |
1666 | _BOOST_gcc_test(5, 0) \ | |
1667 | _BOOST_mingw_test(4, 10) \ | |
1668 | _BOOST_gcc_test(4, 10) \ | |
1669 | _BOOST_mingw_test(4, 9) \ | |
94ac5f34 | 1670 | _BOOST_gcc_test(4, 9) \ |
2187934a | 1671 | _BOOST_mingw_test(4, 8) \ |
94ac5f34 | 1672 | _BOOST_gcc_test(4, 8) \ |
2187934a | 1673 | _BOOST_mingw_test(4, 7) \ |
94ac5f34 | 1674 | _BOOST_gcc_test(4, 7) \ |
2187934a | 1675 | _BOOST_mingw_test(4, 6) \ |
94ac5f34 | 1676 | _BOOST_gcc_test(4, 6) \ |
2187934a | 1677 | _BOOST_mingw_test(4, 5) \ |
94ac5f34 | 1678 | _BOOST_gcc_test(4, 5) \ |
2187934a | 1679 | _BOOST_mingw_test(4, 4) \ |
94ac5f34 | 1680 | _BOOST_gcc_test(4, 4) \ |
2187934a | 1681 | _BOOST_mingw_test(4, 3) \ |
94ac5f34 | 1682 | _BOOST_gcc_test(4, 3) \ |
2187934a | 1683 | _BOOST_mingw_test(4, 2) \ |
94ac5f34 | 1684 | _BOOST_gcc_test(4, 2) \ |
2187934a | 1685 | _BOOST_mingw_test(4, 1) \ |
94ac5f34 | 1686 | _BOOST_gcc_test(4, 1) \ |
2187934a | 1687 | _BOOST_mingw_test(4, 0) \ |
94ac5f34 PD |
1688 | _BOOST_gcc_test(4, 0) \ |
1689 | "defined __GNUC__ && __GNUC__ == 3 && !defined __ICC \ | |
1690 | && (defined WIN32 || defined WINNT || defined _WIN32 || defined __WIN32 \ | |
1691 | || defined __WIN32__ || defined __WINNT || defined __WINNT__) @ mgw" \ | |
1692 | _BOOST_gcc_test(3, 4) \ | |
1693 | _BOOST_gcc_test(3, 3) \ | |
1694 | "defined _MSC_VER && _MSC_VER >= 1500 @ vc90" \ | |
1695 | "defined _MSC_VER && _MSC_VER == 1400 @ vc80" \ | |
1696 | _BOOST_gcc_test(3, 2) \ | |
1697 | "defined _MSC_VER && _MSC_VER == 1310 @ vc71" \ | |
1698 | _BOOST_gcc_test(3, 1) \ | |
1699 | _BOOST_gcc_test(3, 0) \ | |
1700 | "defined __BORLANDC__ @ bcb" \ | |
1701 | "defined __ICC && (defined __unix || defined __unix__) @ il" \ | |
1702 | "defined __ICL @ iw" \ | |
1703 | "defined _MSC_VER && _MSC_VER == 1300 @ vc7" \ | |
1704 | _BOOST_gcc_test(2, 95) \ | |
1705 | "defined __MWERKS__ && __MWERKS__ <= 0x32FF @ cw9" \ | |
1706 | "defined _MSC_VER && _MSC_VER < 1300 && !defined UNDER_CE @ vc6" \ | |
1707 | "defined _MSC_VER && _MSC_VER < 1300 && defined UNDER_CE @ evc4" \ | |
1708 | "defined __MWERKS__ && __MWERKS__ <= 0x31FF @ cw8" | |
1709 | do | |
1710 | boost_tag_test=`expr "X$i" : 'X\([[^@]]*\) @ '` | |
1711 | boost_tag=`expr "X$i" : 'X[[^@]]* @ \(.*\)'` | |
1712 | AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ | |
1713 | #if $boost_tag_test | |
1714 | /* OK */ | |
1715 | #else | |
1716 | # error $boost_tag_test | |
1717 | #endif | |
1718 | ]])], [boost_cv_lib_tag=$boost_tag; break], []) | |
1719 | done | |
1720 | AC_LANG_POP([C++])dnl | |
1721 | case $boost_cv_lib_tag in #( | |
1722 | # Some newer (>= 1.35?) versions of Boost seem to only use "gcc" as opposed | |
1723 | # to "gcc41" for instance. | |
1724 | *-gcc | *'-gcc ') :;; #( Don't re-add -gcc: it's already in there. | |
1725 | gcc*) | |
1726 | boost_tag_x= | |
1727 | case $host_os in #( | |
1728 | darwin*) | |
1729 | if test $boost_major_version -ge 136; then | |
1730 | # The `x' added in r46793 of Boost. | |
1731 | boost_tag_x=x | |
1732 | fi;; | |
1733 | esac | |
1734 | # We can specify multiple tags in this variable because it's used by | |
1735 | # BOOST_FIND_LIB that does a `for tag in -$boost_cv_lib_tag' ... | |
1736 | boost_cv_lib_tag="$boost_tag_x$boost_cv_lib_tag -${boost_tag_x}gcc" | |
1737 | ;; #( | |
1738 | unknown) | |
1739 | AC_MSG_WARN([[could not figure out which toolset name to use for $CXX]]) | |
1740 | boost_cv_lib_tag= | |
1741 | ;; | |
1742 | esac | |
1743 | fi])dnl end of AC_CACHE_CHECK | |
1744 | ])# _BOOST_FIND_COMPILER_TAG | |
1745 | ||
1746 | ||
1747 | # _BOOST_GUESS_WHETHER_TO_USE_MT() | |
1748 | # -------------------------------- | |
1749 | # Compile a small test to try to guess whether we should favor MT (Multi | |
1750 | # Thread) flavors of Boost. Sets boost_guess_use_mt accordingly. | |
1751 | AC_DEFUN([_BOOST_GUESS_WHETHER_TO_USE_MT], | |
1752 | [# Check whether we do better use `mt' even though we weren't ask to. | |
2187934a | 1753 | AC_LANG_PUSH([C++])dnl |
94ac5f34 PD |
1754 | AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ |
1755 | #if defined _REENTRANT || defined _MT || defined __MT__ | |
1756 | /* use -mt */ | |
1757 | #else | |
1758 | # error MT not needed | |
1759 | #endif | |
1760 | ]])], [boost_guess_use_mt=:], [boost_guess_use_mt=false]) | |
2187934a | 1761 | AC_LANG_POP([C++])dnl |
94ac5f34 PD |
1762 | ]) |
1763 | ||
1764 | # _BOOST_AC_LINK_IFELSE(PROGRAM, [ACTION-IF-TRUE], [ACTION-IF-FALSE]) | |
1765 | # ------------------------------------------------------------------- | |
1766 | # Fork of _AC_LINK_IFELSE that preserves conftest.o across calls. Fragile, | |
1767 | # will break when Autoconf changes its internals. Requires that you manually | |
1768 | # rm -f conftest.$ac_objext in between to really different tests, otherwise | |
1769 | # you will try to link a conftest.o left behind by a previous test. | |
1770 | # Used to aggressively optimize BOOST_FIND_LIB (see the big comment in this | |
1771 | # macro). | |
1772 | # | |
1773 | # Don't use "break" in the actions, as it would short-circuit some code | |
1774 | # this macro runs after the actions. | |
1775 | m4_define([_BOOST_AC_LINK_IFELSE], | |
1776 | [m4_ifvaln([$1], [AC_LANG_CONFTEST([$1])])dnl | |
1777 | rm -f conftest$ac_exeext | |
1778 | boost_save_ac_ext=$ac_ext | |
1779 | boost_use_source=: | |
1780 | # If we already have a .o, re-use it. We change $ac_ext so that $ac_link | |
1781 | # tries to link the existing object file instead of compiling from source. | |
1782 | test -f conftest.$ac_objext && ac_ext=$ac_objext && boost_use_source=false && | |
1783 | _AS_ECHO_LOG([re-using the existing conftest.$ac_objext]) | |
1784 | AS_IF([_AC_DO_STDERR($ac_link) && { | |
2187934a RK |
1785 | test -z "$ac_[]_AC_LANG_ABBREV[]_werror_flag" || |
1786 | test ! -s conftest.err | |
94ac5f34 | 1787 | } && test -s conftest$ac_exeext && { |
2187934a RK |
1788 | test "$cross_compiling" = yes || |
1789 | $as_executable_p conftest$ac_exeext | |
94ac5f34 PD |
1790 | dnl FIXME: use AS_TEST_X instead when 2.61 is widespread enough. |
1791 | }], | |
1792 | [$2], | |
1793 | [if $boost_use_source; then | |
1794 | _AC_MSG_LOG_CONFTEST | |
1795 | fi | |
1796 | $3]) | |
1797 | ac_objext=$boost_save_ac_objext | |
1798 | ac_ext=$boost_save_ac_ext | |
1799 | dnl Delete also the IPA/IPO (Inter Procedural Analysis/Optimization) | |
1800 | dnl information created by the PGI compiler (conftest_ipa8_conftest.oo), | |
1801 | dnl as it would interfere with the next link command. | |
1802 | rm -f core conftest.err conftest_ipa8_conftest.oo \ | |
1803 | conftest$ac_exeext m4_ifval([$1], [conftest.$ac_ext])[]dnl | |
1804 | ])# _BOOST_AC_LINK_IFELSE | |
1805 | ||
1806 | # Local Variables: | |
1807 | # mode: autoconf | |
1808 | # End: |