Send numeric status without translation
[qBittorrent.git] / m4 / ax_boost_base.m4
blobd1a65b9f6308994e86ce65cb93ca51b2dae42c36
1 # ===========================================================================
2 #      https://www.gnu.org/software/autoconf-archive/ax_boost_base.html
3 # ===========================================================================
5 # SYNOPSIS
7 #   AX_BOOST_BASE([MINIMUM-VERSION], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
9 # DESCRIPTION
11 #   Test for the Boost C++ libraries of a particular version (or newer)
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>.
18 #   This macro calls:
20 #     AC_SUBST(BOOST_CPPFLAGS) / AC_SUBST(BOOST_LDFLAGS)
22 #   And sets:
24 #     HAVE_BOOST
26 # LICENSE
28 #   Copyright (c) 2008 Thomas Porschberg <thomas@randspringer.de>
29 #   Copyright (c) 2009 Peter Adolphs
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.
36 #serial 42
38 # example boost program (need to pass version)
39 m4_define([_AX_BOOST_BASE_PROGRAM],
40           [AC_LANG_PROGRAM([[
41 #include <boost/version.hpp>
42 ]],[[
43 (void) ((void)sizeof(char[1 - 2*!!((BOOST_VERSION) < ($1))]));
44 ]])])
46 AC_DEFUN([AX_BOOST_BASE],
48 AC_ARG_WITH([boost],
49   [AS_HELP_STRING([--with-boost@<:@=ARG@:>@],
50     [use Boost library from a standard location (ARG=yes),
51      from the specified location (ARG=<path>),
52      or disable it (ARG=no)
53      @<:@ARG=yes@:>@ ])],
54     [
55      AS_CASE([$withval],
56        [no],[want_boost="no";_AX_BOOST_BASE_boost_path=""],
57        [yes],[want_boost="yes";_AX_BOOST_BASE_boost_path=""],
58        [want_boost="yes";_AX_BOOST_BASE_boost_path="$withval"])
59     ],
60     [want_boost="yes"])
63 AC_ARG_WITH([boost-libdir],
64   [AS_HELP_STRING([--with-boost-libdir=LIB_DIR],
65     [Force given directory for boost libraries.
66      Note that this will override library path detection,
67      so use this parameter only if default library detection fails
68      and you know exactly where your boost libraries are located.])],
69   [
70    AS_IF([test -d "$withval"],
71          [_AX_BOOST_BASE_boost_lib_path="$withval"],
72     [AC_MSG_ERROR([--with-boost-libdir expected directory name])])
73   ],
74   [_AX_BOOST_BASE_boost_lib_path=""])
76 BOOST_LDFLAGS=""
77 BOOST_CPPFLAGS=""
78 AS_IF([test "x$want_boost" = "xyes"],
79       [_AX_BOOST_BASE_RUNDETECT([$1],[$2],[$3])])
80 AC_SUBST(BOOST_CPPFLAGS)
81 AC_SUBST(BOOST_LDFLAGS)
85 # convert a version string in $2 to numeric and affect to polymorphic var $1
86 AC_DEFUN([_AX_BOOST_BASE_TONUMERICVERSION],[
87   AS_IF([test "x$2" = "x"],[_AX_BOOST_BASE_TONUMERICVERSION_req="1.20.0"],[_AX_BOOST_BASE_TONUMERICVERSION_req="$2"])
88   _AX_BOOST_BASE_TONUMERICVERSION_req_shorten=`expr $_AX_BOOST_BASE_TONUMERICVERSION_req : '\([[0-9]]*\.[[0-9]]*\)'`
89   _AX_BOOST_BASE_TONUMERICVERSION_req_major=`expr $_AX_BOOST_BASE_TONUMERICVERSION_req : '\([[0-9]]*\)'`
90   AS_IF([test "x$_AX_BOOST_BASE_TONUMERICVERSION_req_major" = "x"],
91         [AC_MSG_ERROR([You should at least specify libboost major version])])
92   _AX_BOOST_BASE_TONUMERICVERSION_req_minor=`expr $_AX_BOOST_BASE_TONUMERICVERSION_req : '[[0-9]]*\.\([[0-9]]*\)'`
93   AS_IF([test "x$_AX_BOOST_BASE_TONUMERICVERSION_req_minor" = "x"],
94         [_AX_BOOST_BASE_TONUMERICVERSION_req_minor="0"])
95   _AX_BOOST_BASE_TONUMERICVERSION_req_sub_minor=`expr $_AX_BOOST_BASE_TONUMERICVERSION_req : '[[0-9]]*\.[[0-9]]*\.\([[0-9]]*\)'`
96   AS_IF([test "X$_AX_BOOST_BASE_TONUMERICVERSION_req_sub_minor" = "X"],
97         [_AX_BOOST_BASE_TONUMERICVERSION_req_sub_minor="0"])
98   _AX_BOOST_BASE_TONUMERICVERSION_RET=`expr $_AX_BOOST_BASE_TONUMERICVERSION_req_major \* 100000 \+  $_AX_BOOST_BASE_TONUMERICVERSION_req_minor \* 100 \+ $_AX_BOOST_BASE_TONUMERICVERSION_req_sub_minor`
99   AS_VAR_SET($1,$_AX_BOOST_BASE_TONUMERICVERSION_RET)
102 dnl Run the detection of boost should be run only if $want_boost
103 AC_DEFUN([_AX_BOOST_BASE_RUNDETECT],[
104     _AX_BOOST_BASE_TONUMERICVERSION(WANT_BOOST_VERSION,[$1])
105     succeeded=no
108     AC_REQUIRE([AC_CANONICAL_HOST])
109     dnl On 64-bit systems check for system libraries in both lib64 and lib.
110     dnl The former is specified by FHS, but e.g. Debian does not adhere to
111     dnl this (as it rises problems for generic multi-arch support).
112     dnl The last entry in the list is chosen by default when no libraries
113     dnl are found, e.g. when only header-only libraries are installed!
114     AS_CASE([${host_cpu}],
115       [x86_64],[libsubdirs="lib64 libx32 lib lib64"],
116       [ppc64|s390x|sparc64|aarch64|ppc64le],[libsubdirs="lib64 lib lib64"],
117       [libsubdirs="lib"]
118     )
120     dnl allow for real multi-arch paths e.g. /usr/lib/x86_64-linux-gnu. Give
121     dnl them priority over the other paths since, if libs are found there, they
122     dnl are almost assuredly the ones desired.
123     AS_CASE([${host_cpu}],
124       [i?86],[multiarch_libsubdir="lib/i386-${host_os}"],
125       [multiarch_libsubdir="lib/${host_cpu}-${host_os}"]
126     )
128     dnl first we check the system location for boost libraries
129     dnl this location ist chosen if boost libraries are installed with the --layout=system option
130     dnl or if you install boost with RPM
131     AS_IF([test "x$_AX_BOOST_BASE_boost_path" != "x"],[
132         AC_MSG_CHECKING([for boostlib >= $1 ($WANT_BOOST_VERSION) includes in "$_AX_BOOST_BASE_boost_path/include"])
133          AS_IF([test -d "$_AX_BOOST_BASE_boost_path/include" && test -r "$_AX_BOOST_BASE_boost_path/include"],[
134            AC_MSG_RESULT([yes])
135            BOOST_CPPFLAGS="-I$_AX_BOOST_BASE_boost_path/include"
136            for _AX_BOOST_BASE_boost_path_tmp in $multiarch_libsubdir $libsubdirs; do
137                 AC_MSG_CHECKING([for boostlib >= $1 ($WANT_BOOST_VERSION) lib path in "$_AX_BOOST_BASE_boost_path/$_AX_BOOST_BASE_boost_path_tmp"])
138                 AS_IF([test -d "$_AX_BOOST_BASE_boost_path/$_AX_BOOST_BASE_boost_path_tmp" && test -r "$_AX_BOOST_BASE_boost_path/$_AX_BOOST_BASE_boost_path_tmp" ],[
139                         AC_MSG_RESULT([yes])
140                         BOOST_LDFLAGS="-L$_AX_BOOST_BASE_boost_path/$_AX_BOOST_BASE_boost_path_tmp";
141                         break;
142                 ],
143       [AC_MSG_RESULT([no])])
144            done],[
145       AC_MSG_RESULT([no])])
146     ],[
147         if test X"$cross_compiling" = Xyes; then
148             search_libsubdirs=$multiarch_libsubdir
149         else
150             search_libsubdirs="$multiarch_libsubdir $libsubdirs"
151         fi
152         for _AX_BOOST_BASE_boost_path_tmp in /usr /usr/local /opt /opt/local ; do
153             if test -d "$_AX_BOOST_BASE_boost_path_tmp/include/boost" && test -r "$_AX_BOOST_BASE_boost_path_tmp/include/boost" ; then
154                 for libsubdir in $search_libsubdirs ; do
155                     if ls "$_AX_BOOST_BASE_boost_path_tmp/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi
156                 done
157                 BOOST_LDFLAGS="-L$_AX_BOOST_BASE_boost_path_tmp/$libsubdir"
158                 BOOST_CPPFLAGS="-I$_AX_BOOST_BASE_boost_path_tmp/include"
159                 break;
160             fi
161         done
162     ])
164     dnl overwrite ld flags if we have required special directory with
165     dnl --with-boost-libdir parameter
166     AS_IF([test "x$_AX_BOOST_BASE_boost_lib_path" != "x"],
167           [BOOST_LDFLAGS="-L$_AX_BOOST_BASE_boost_lib_path"])
169     AC_MSG_CHECKING([for boostlib >= $1 ($WANT_BOOST_VERSION)])
170     CPPFLAGS_SAVED="$CPPFLAGS"
171     CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
172     export CPPFLAGS
174     LDFLAGS_SAVED="$LDFLAGS"
175     LDFLAGS="$LDFLAGS $BOOST_LDFLAGS"
176     export LDFLAGS
178     AC_REQUIRE([AC_PROG_CXX])
179     AC_LANG_PUSH(C++)
180         AC_COMPILE_IFELSE([_AX_BOOST_BASE_PROGRAM($WANT_BOOST_VERSION)],[
181         AC_MSG_RESULT(yes)
182     succeeded=yes
183     found_system=yes
184         ],[
185         ])
186     AC_LANG_POP([C++])
190     dnl if we found no boost with system layout we search for boost libraries
191     dnl built and installed without the --layout=system option or for a staged(not installed) version
192     if test "x$succeeded" != "xyes" ; then
193         CPPFLAGS="$CPPFLAGS_SAVED"
194         LDFLAGS="$LDFLAGS_SAVED"
195         BOOST_CPPFLAGS=
196         if test -z "$_AX_BOOST_BASE_boost_lib_path" ; then
197             BOOST_LDFLAGS=
198         fi
199         _version=0
200         if test -n "$_AX_BOOST_BASE_boost_path" ; then
201             if test -d "$_AX_BOOST_BASE_boost_path" && test -r "$_AX_BOOST_BASE_boost_path"; then
202                 for i in `ls -d $_AX_BOOST_BASE_boost_path/include/boost-* 2>/dev/null`; do
203                     _version_tmp=`echo $i | sed "s#$_AX_BOOST_BASE_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'`
204                     V_CHECK=`expr $_version_tmp \> $_version`
205                     if test "x$V_CHECK" = "x1" ; then
206                         _version=$_version_tmp
207                     fi
208                     VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'`
209                     BOOST_CPPFLAGS="-I$_AX_BOOST_BASE_boost_path/include/boost-$VERSION_UNDERSCORE"
210                 done
211                 dnl if nothing found search for layout used in Windows distributions
212                 if test -z "$BOOST_CPPFLAGS"; then
213                     if test -d "$_AX_BOOST_BASE_boost_path/boost" && test -r "$_AX_BOOST_BASE_boost_path/boost"; then
214                         BOOST_CPPFLAGS="-I$_AX_BOOST_BASE_boost_path"
215                     fi
216                 fi
217                 dnl if we found something and BOOST_LDFLAGS was unset before
218                 dnl (because "$_AX_BOOST_BASE_boost_lib_path" = ""), set it here.
219                 if test -n "$BOOST_CPPFLAGS" && test -z "$BOOST_LDFLAGS"; then
220                     for libsubdir in $libsubdirs ; do
221                         if ls "$_AX_BOOST_BASE_boost_path/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi
222                     done
223                     BOOST_LDFLAGS="-L$_AX_BOOST_BASE_boost_path/$libsubdir"
224                 fi
225             fi
226         else
227             if test "x$cross_compiling" != "xyes" ; then
228                 for _AX_BOOST_BASE_boost_path in /usr /usr/local /opt /opt/local ; do
229                     if test -d "$_AX_BOOST_BASE_boost_path" && test -r "$_AX_BOOST_BASE_boost_path" ; then
230                         for i in `ls -d $_AX_BOOST_BASE_boost_path/include/boost-* 2>/dev/null`; do
231                             _version_tmp=`echo $i | sed "s#$_AX_BOOST_BASE_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'`
232                             V_CHECK=`expr $_version_tmp \> $_version`
233                             if test "x$V_CHECK" = "x1" ; then
234                                 _version=$_version_tmp
235                                 best_path=$_AX_BOOST_BASE_boost_path
236                             fi
237                         done
238                     fi
239                 done
241                 VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'`
242                 BOOST_CPPFLAGS="-I$best_path/include/boost-$VERSION_UNDERSCORE"
243                 if test -z "$_AX_BOOST_BASE_boost_lib_path" ; then
244                     for libsubdir in $libsubdirs ; do
245                         if ls "$best_path/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi
246                     done
247                     BOOST_LDFLAGS="-L$best_path/$libsubdir"
248                 fi
249             fi
251             if test -n "$BOOST_ROOT" ; then
252                 for libsubdir in $libsubdirs ; do
253                     if ls "$BOOST_ROOT/stage/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi
254                 done
255                 if test -d "$BOOST_ROOT" && test -r "$BOOST_ROOT" && test -d "$BOOST_ROOT/stage/$libsubdir" && test -r "$BOOST_ROOT/stage/$libsubdir"; then
256                     version_dir=`expr //$BOOST_ROOT : '.*/\(.*\)'`
257                     stage_version=`echo $version_dir | sed 's/boost_//' | sed 's/_/./g'`
258                         stage_version_shorten=`expr $stage_version : '\([[0-9]]*\.[[0-9]]*\)'`
259                     V_CHECK=`expr $stage_version_shorten \>\= $_version`
260                     if test "x$V_CHECK" = "x1" && test -z "$_AX_BOOST_BASE_boost_lib_path" ; then
261                         AC_MSG_NOTICE(We will use a staged boost library from $BOOST_ROOT)
262                         BOOST_CPPFLAGS="-I$BOOST_ROOT"
263                         BOOST_LDFLAGS="-L$BOOST_ROOT/stage/$libsubdir"
264                     fi
265                 fi
266             fi
267         fi
269         CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
270         export CPPFLAGS
271         LDFLAGS="$LDFLAGS $BOOST_LDFLAGS"
272         export LDFLAGS
274         AC_LANG_PUSH(C++)
275             AC_COMPILE_IFELSE([_AX_BOOST_BASE_PROGRAM($WANT_BOOST_VERSION)],[
276             AC_MSG_RESULT(yes)
277         succeeded=yes
278         found_system=yes
279             ],[
280             ])
281         AC_LANG_POP([C++])
282     fi
284     if test "x$succeeded" != "xyes" ; then
285         if test "x$_version" = "x0" ; then
286             AC_MSG_NOTICE([[We could not detect the boost libraries (version $1 or higher). If you have a staged boost library (still not installed) please specify \$BOOST_ROOT in your environment and do not give a PATH to --with-boost option.  If you are sure you have boost installed, then check your version number looking in <boost/version.hpp>. See http://randspringer.de/boost for more documentation.]])
287         else
288             AC_MSG_NOTICE([Your boost libraries seems to old (version $_version).])
289         fi
290         # execute ACTION-IF-NOT-FOUND (if present):
291         ifelse([$3], , :, [$3])
292     else
293         AC_DEFINE(HAVE_BOOST,,[define if the Boost library is available])
294         # execute ACTION-IF-FOUND (if present):
295         ifelse([$2], , :, [$2])
296     fi
298     CPPFLAGS="$CPPFLAGS_SAVED"
299     LDFLAGS="$LDFLAGS_SAVED"