Don't try to remove folders for a torrent without metadata
[qBittorrent.git] / m4 / ax_boost_base.m4
blob16fa69b41f5bba2b2f4bcb6f48f621ee85a0f680
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 47
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       [mips*64*],[libsubdirs="lib64 lib32 lib lib64"],
117       [ppc64|powerpc64|s390x|sparc64|aarch64|ppc64le|powerpc64le|riscv64],[libsubdirs="lib64 lib lib64"],
118       [libsubdirs="lib"]
119     )
121     dnl allow for real multi-arch paths e.g. /usr/lib/x86_64-linux-gnu. Give
122     dnl them priority over the other paths since, if libs are found there, they
123     dnl are almost assuredly the ones desired.
124     AS_CASE([${host_cpu}],
125       [i?86],[multiarch_libsubdir="lib/i386-${host_os}"],
126       [multiarch_libsubdir="lib/${host_cpu}-${host_os}"]
127     )
129     dnl first we check the system location for boost libraries
130     dnl this location ist chosen if boost libraries are installed with the --layout=system option
131     dnl or if you install boost with RPM
132     AS_IF([test "x$_AX_BOOST_BASE_boost_path" != "x"],[
133         AC_MSG_CHECKING([for boostlib >= $1 ($WANT_BOOST_VERSION) includes in "$_AX_BOOST_BASE_boost_path/include"])
134          AS_IF([test -d "$_AX_BOOST_BASE_boost_path/include" && test -r "$_AX_BOOST_BASE_boost_path/include"],[
135            AC_MSG_RESULT([yes])
136            BOOST_CPPFLAGS="-I$_AX_BOOST_BASE_boost_path/include"
137            for _AX_BOOST_BASE_boost_path_tmp in $multiarch_libsubdir $libsubdirs; do
138                 AC_MSG_CHECKING([for boostlib >= $1 ($WANT_BOOST_VERSION) lib path in "$_AX_BOOST_BASE_boost_path/$_AX_BOOST_BASE_boost_path_tmp"])
139                 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" ],[
140                         AC_MSG_RESULT([yes])
141                         BOOST_LDFLAGS="-L$_AX_BOOST_BASE_boost_path/$_AX_BOOST_BASE_boost_path_tmp";
142                         break;
143                 ],
144       [AC_MSG_RESULT([no])])
145            done],[
146       AC_MSG_RESULT([no])])
147     ],[
148         if test X"$cross_compiling" = Xyes; then
149             search_libsubdirs=$multiarch_libsubdir
150         else
151             search_libsubdirs="$multiarch_libsubdir $libsubdirs"
152         fi
153         for _AX_BOOST_BASE_boost_path_tmp in /usr /usr/local /opt /opt/local ; do
154             if test -d "$_AX_BOOST_BASE_boost_path_tmp/include/boost" && test -r "$_AX_BOOST_BASE_boost_path_tmp/include/boost" ; then
155                 for libsubdir in $search_libsubdirs ; do
156                     if ls "$_AX_BOOST_BASE_boost_path_tmp/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi
157                 done
158                 BOOST_LDFLAGS="-L$_AX_BOOST_BASE_boost_path_tmp/$libsubdir"
159                 BOOST_CPPFLAGS="-I$_AX_BOOST_BASE_boost_path_tmp/include"
160                 break;
161             fi
162         done
163     ])
165     dnl overwrite ld flags if we have required special directory with
166     dnl --with-boost-libdir parameter
167     AS_IF([test "x$_AX_BOOST_BASE_boost_lib_path" != "x"],
168           [BOOST_LDFLAGS="-L$_AX_BOOST_BASE_boost_lib_path"])
170     AC_MSG_CHECKING([for boostlib >= $1 ($WANT_BOOST_VERSION)])
171     CPPFLAGS_SAVED="$CPPFLAGS"
172     CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
173     export CPPFLAGS
175     LDFLAGS_SAVED="$LDFLAGS"
176     LDFLAGS="$LDFLAGS $BOOST_LDFLAGS"
177     export LDFLAGS
179     AC_REQUIRE([AC_PROG_CXX])
180     AC_LANG_PUSH(C++)
181         AC_COMPILE_IFELSE([_AX_BOOST_BASE_PROGRAM($WANT_BOOST_VERSION)],[
182         AC_MSG_RESULT(yes)
183     succeeded=yes
184     found_system=yes
185         ],[
186         ])
187     AC_LANG_POP([C++])
191     dnl if we found no boost with system layout we search for boost libraries
192     dnl built and installed without the --layout=system option or for a staged(not installed) version
193     if test "x$succeeded" != "xyes" ; then
194         CPPFLAGS="$CPPFLAGS_SAVED"
195         LDFLAGS="$LDFLAGS_SAVED"
196         BOOST_CPPFLAGS=
197         if test -z "$_AX_BOOST_BASE_boost_lib_path" ; then
198             BOOST_LDFLAGS=
199         fi
200         _version=0
201         if test -n "$_AX_BOOST_BASE_boost_path" ; then
202             if test -d "$_AX_BOOST_BASE_boost_path" && test -r "$_AX_BOOST_BASE_boost_path"; then
203                 for i in `ls -d $_AX_BOOST_BASE_boost_path/include/boost-* 2>/dev/null`; do
204                     _version_tmp=`echo $i | sed "s#$_AX_BOOST_BASE_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'`
205                     V_CHECK=`expr $_version_tmp \> $_version`
206                     if test "x$V_CHECK" = "x1" ; then
207                         _version=$_version_tmp
208                     fi
209                     VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'`
210                     BOOST_CPPFLAGS="-I$_AX_BOOST_BASE_boost_path/include/boost-$VERSION_UNDERSCORE"
211                 done
212                 dnl if nothing found search for layout used in Windows distributions
213                 if test -z "$BOOST_CPPFLAGS"; then
214                     if test -d "$_AX_BOOST_BASE_boost_path/boost" && test -r "$_AX_BOOST_BASE_boost_path/boost"; then
215                         BOOST_CPPFLAGS="-I$_AX_BOOST_BASE_boost_path"
216                     fi
217                 fi
218                 dnl if we found something and BOOST_LDFLAGS was unset before
219                 dnl (because "$_AX_BOOST_BASE_boost_lib_path" = ""), set it here.
220                 if test -n "$BOOST_CPPFLAGS" && test -z "$BOOST_LDFLAGS"; then
221                     for libsubdir in $libsubdirs ; do
222                         if ls "$_AX_BOOST_BASE_boost_path/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi
223                     done
224                     BOOST_LDFLAGS="-L$_AX_BOOST_BASE_boost_path/$libsubdir"
225                 fi
226             fi
227         else
228             if test "x$cross_compiling" != "xyes" ; then
229                 for _AX_BOOST_BASE_boost_path in /usr /usr/local /opt /opt/local ; do
230                     if test -d "$_AX_BOOST_BASE_boost_path" && test -r "$_AX_BOOST_BASE_boost_path" ; then
231                         for i in `ls -d $_AX_BOOST_BASE_boost_path/include/boost-* 2>/dev/null`; do
232                             _version_tmp=`echo $i | sed "s#$_AX_BOOST_BASE_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'`
233                             V_CHECK=`expr $_version_tmp \> $_version`
234                             if test "x$V_CHECK" = "x1" ; then
235                                 _version=$_version_tmp
236                                 best_path=$_AX_BOOST_BASE_boost_path
237                             fi
238                         done
239                     fi
240                 done
242                 VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'`
243                 BOOST_CPPFLAGS="-I$best_path/include/boost-$VERSION_UNDERSCORE"
244                 if test -z "$_AX_BOOST_BASE_boost_lib_path" ; then
245                     for libsubdir in $libsubdirs ; do
246                         if ls "$best_path/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi
247                     done
248                     BOOST_LDFLAGS="-L$best_path/$libsubdir"
249                 fi
250             fi
252             if test -n "$BOOST_ROOT" ; then
253                 for libsubdir in $libsubdirs ; do
254                     if ls "$BOOST_ROOT/stage/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi
255                 done
256                 if test -d "$BOOST_ROOT" && test -r "$BOOST_ROOT" && test -d "$BOOST_ROOT/stage/$libsubdir" && test -r "$BOOST_ROOT/stage/$libsubdir"; then
257                     version_dir=`expr //$BOOST_ROOT : '.*/\(.*\)'`
258                     stage_version=`echo $version_dir | sed 's/boost_//' | sed 's/_/./g'`
259                         stage_version_shorten=`expr $stage_version : '\([[0-9]]*\.[[0-9]]*\)'`
260                     V_CHECK=`expr $stage_version_shorten \>\= $_version`
261                     if test "x$V_CHECK" = "x1" && test -z "$_AX_BOOST_BASE_boost_lib_path" ; then
262                         AC_MSG_NOTICE(We will use a staged boost library from $BOOST_ROOT)
263                         BOOST_CPPFLAGS="-I$BOOST_ROOT"
264                         BOOST_LDFLAGS="-L$BOOST_ROOT/stage/$libsubdir"
265                     fi
266                 fi
267             fi
268         fi
270         CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
271         export CPPFLAGS
272         LDFLAGS="$LDFLAGS $BOOST_LDFLAGS"
273         export LDFLAGS
275         AC_LANG_PUSH(C++)
276             AC_COMPILE_IFELSE([_AX_BOOST_BASE_PROGRAM($WANT_BOOST_VERSION)],[
277             AC_MSG_RESULT(yes)
278         succeeded=yes
279         found_system=yes
280             ],[
281             ])
282         AC_LANG_POP([C++])
283     fi
285     if test "x$succeeded" != "xyes" ; then
286         if test "x$_version" = "x0" ; then
287             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.]])
288         else
289             AC_MSG_NOTICE([Your boost libraries seems to old (version $_version).])
290         fi
291         # execute ACTION-IF-NOT-FOUND (if present):
292         ifelse([$3], , :, [$3])
293     else
294         AC_DEFINE(HAVE_BOOST,,[define if the Boost library is available])
295         # execute ACTION-IF-FOUND (if present):
296         ifelse([$2], , :, [$2])
297     fi
299     CPPFLAGS="$CPPFLAGS_SAVED"
300     LDFLAGS="$LDFLAGS_SAVED"