tizen 2.4 release
[external/nghttp2.git] / m4 / ax_boost_base.m4
1 # ===========================================================================
2 #       http://www.gnu.org/software/autoconf-archive/ax_boost_base.html
3 # ===========================================================================
4 #
5 # SYNOPSIS
6 #
7 #   AX_BOOST_BASE([MINIMUM-VERSION], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
8 #
9 # DESCRIPTION
10 #
11 #   Test for the Boost C++ libraries of a particular version (or newer)
12 #
13 #   If no path to the installed boost library is given the macro searchs
14 #   under /usr, /usr/local, /opt and /opt/local and evaluates the
15 #   $BOOST_ROOT environment variable. Further documentation is available at
16 #   <http://randspringer.de/boost/index.html>.
17 #
18 #   This macro calls:
19 #
20 #     AC_SUBST(BOOST_CPPFLAGS) / AC_SUBST(BOOST_LDFLAGS)
21 #
22 #   And sets:
23 #
24 #     HAVE_BOOST
25 #
26 # LICENSE
27 #
28 #   Copyright (c) 2008 Thomas Porschberg <thomas@randspringer.de>
29 #   Copyright (c) 2009 Peter Adolphs
30 #
31 #   Copying and distribution of this file, with or without modification, are
32 #   permitted in any medium without royalty provided the copyright notice
33 #   and this notice are preserved. This file is offered as-is, without any
34 #   warranty.
35
36 #serial 25
37
38 AC_DEFUN([AX_BOOST_BASE],
39 [
40 AC_ARG_WITH([boost],
41   [AS_HELP_STRING([--with-boost@<:@=ARG@:>@],
42     [use Boost library from a standard location (ARG=yes),
43      from the specified location (ARG=<path>),
44      or disable it (ARG=no)
45      @<:@ARG=yes@:>@ ])],
46     [
47     if test "$withval" = "no"; then
48         want_boost="no"
49     elif test "$withval" = "yes"; then
50         want_boost="yes"
51         ac_boost_path=""
52     else
53         want_boost="yes"
54         ac_boost_path="$withval"
55     fi
56     ],
57     [want_boost="yes"])
58
59
60 AC_ARG_WITH([boost-libdir],
61         AS_HELP_STRING([--with-boost-libdir=LIB_DIR],
62         [Force given directory for boost libraries. Note that this will override library path detection, so use this parameter only if default library detection fails and you know exactly where your boost libraries are located.]),
63         [
64         if test -d "$withval"
65         then
66                 ac_boost_lib_path="$withval"
67         else
68                 AC_MSG_ERROR(--with-boost-libdir expected directory name)
69         fi
70         ],
71         [ac_boost_lib_path=""]
72 )
73
74 if test "x$want_boost" = "xyes"; then
75     boost_lib_version_req=ifelse([$1], ,1.20.0,$1)
76     boost_lib_version_req_shorten=`expr $boost_lib_version_req : '\([[0-9]]*\.[[0-9]]*\)'`
77     boost_lib_version_req_major=`expr $boost_lib_version_req : '\([[0-9]]*\)'`
78     boost_lib_version_req_minor=`expr $boost_lib_version_req : '[[0-9]]*\.\([[0-9]]*\)'`
79     boost_lib_version_req_sub_minor=`expr $boost_lib_version_req : '[[0-9]]*\.[[0-9]]*\.\([[0-9]]*\)'`
80     if test "x$boost_lib_version_req_sub_minor" = "x" ; then
81         boost_lib_version_req_sub_minor="0"
82         fi
83     WANT_BOOST_VERSION=`expr $boost_lib_version_req_major \* 100000 \+  $boost_lib_version_req_minor \* 100 \+ $boost_lib_version_req_sub_minor`
84     AC_MSG_CHECKING(for boostlib >= $boost_lib_version_req)
85     succeeded=no
86
87     dnl On 64-bit systems check for system libraries in both lib64 and lib.
88     dnl The former is specified by FHS, but e.g. Debian does not adhere to
89     dnl this (as it rises problems for generic multi-arch support).
90     dnl The last entry in the list is chosen by default when no libraries
91     dnl are found, e.g. when only header-only libraries are installed!
92     libsubdirs="lib"
93     ax_arch=`uname -m`
94     case $ax_arch in
95       x86_64)
96         libsubdirs="lib64 libx32 lib lib64"
97         ;;
98       ppc64|s390x|sparc64|aarch64|ppc64le)
99         libsubdirs="lib64 lib lib64 ppc64le"
100         ;;
101     esac
102
103     dnl allow for real multi-arch paths e.g. /usr/lib/x86_64-linux-gnu. Give
104     dnl them priority over the other paths since, if libs are found there, they
105     dnl are almost assuredly the ones desired.
106     AC_REQUIRE([AC_CANONICAL_HOST])
107     libsubdirs="lib/${host_cpu}-${host_os} $libsubdirs"
108
109     case ${host_cpu} in
110       i?86)
111         libsubdirs="lib/i386-${host_os} $libsubdirs"
112         ;;
113     esac
114
115     dnl first we check the system location for boost libraries
116     dnl this location ist chosen if boost libraries are installed with the --layout=system option
117     dnl or if you install boost with RPM
118     if test "$ac_boost_path" != ""; then
119         BOOST_CPPFLAGS="-I$ac_boost_path/include"
120         for ac_boost_path_tmp in $libsubdirs; do
121                 if test -d "$ac_boost_path"/"$ac_boost_path_tmp" ; then
122                         BOOST_LDFLAGS="-L$ac_boost_path/$ac_boost_path_tmp"
123                         break
124                 fi
125         done
126     elif test "$cross_compiling" != yes; then
127         for ac_boost_path_tmp in /usr /usr/local /opt /opt/local ; do
128             if test -d "$ac_boost_path_tmp/include/boost" && test -r "$ac_boost_path_tmp/include/boost"; then
129                 for libsubdir in $libsubdirs ; do
130                     if ls "$ac_boost_path_tmp/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi
131                 done
132                 BOOST_LDFLAGS="-L$ac_boost_path_tmp/$libsubdir"
133                 BOOST_CPPFLAGS="-I$ac_boost_path_tmp/include"
134                 break;
135             fi
136         done
137     fi
138
139     dnl overwrite ld flags if we have required special directory with
140     dnl --with-boost-libdir parameter
141     if test "$ac_boost_lib_path" != ""; then
142        BOOST_LDFLAGS="-L$ac_boost_lib_path"
143     fi
144
145     CPPFLAGS_SAVED="$CPPFLAGS"
146     CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
147     export CPPFLAGS
148
149     LDFLAGS_SAVED="$LDFLAGS"
150     LDFLAGS="$LDFLAGS $BOOST_LDFLAGS"
151     export LDFLAGS
152
153     AC_REQUIRE([AC_PROG_CXX])
154     AC_LANG_PUSH(C++)
155         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
156     @%:@include <boost/version.hpp>
157     ]], [[
158     #if BOOST_VERSION >= $WANT_BOOST_VERSION
159     // Everything is okay
160     #else
161     #  error Boost version is too old
162     #endif
163     ]])],[
164         AC_MSG_RESULT(yes)
165     succeeded=yes
166     found_system=yes
167         ],[
168         ])
169     AC_LANG_POP([C++])
170
171
172
173     dnl if we found no boost with system layout we search for boost libraries
174     dnl built and installed without the --layout=system option or for a staged(not installed) version
175     if test "x$succeeded" != "xyes"; then
176         _version=0
177         if test "$ac_boost_path" != ""; then
178             if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then
179                 for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do
180                     _version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'`
181                     V_CHECK=`expr $_version_tmp \> $_version`
182                     if test "$V_CHECK" = "1" ; then
183                         _version=$_version_tmp
184                     fi
185                     VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'`
186                     BOOST_CPPFLAGS="-I$ac_boost_path/include/boost-$VERSION_UNDERSCORE"
187                 done
188             fi
189         else
190             if test "$cross_compiling" != yes; then
191                 for ac_boost_path in /usr /usr/local /opt /opt/local ; do
192                     if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then
193                         for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do
194                             _version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'`
195                             V_CHECK=`expr $_version_tmp \> $_version`
196                             if test "$V_CHECK" = "1" ; then
197                                 _version=$_version_tmp
198                                 best_path=$ac_boost_path
199                             fi
200                         done
201                     fi
202                 done
203
204                 VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'`
205                 BOOST_CPPFLAGS="-I$best_path/include/boost-$VERSION_UNDERSCORE"
206                 if test "$ac_boost_lib_path" = ""; then
207                     for libsubdir in $libsubdirs ; do
208                         if ls "$best_path/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi
209                     done
210                     BOOST_LDFLAGS="-L$best_path/$libsubdir"
211                 fi
212             fi
213
214             if test "x$BOOST_ROOT" != "x"; then
215                 for libsubdir in $libsubdirs ; do
216                     if ls "$BOOST_ROOT/stage/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi
217                 done
218                 if test -d "$BOOST_ROOT" && test -r "$BOOST_ROOT" && test -d "$BOOST_ROOT/stage/$libsubdir" && test -r "$BOOST_ROOT/stage/$libsubdir"; then
219                     version_dir=`expr //$BOOST_ROOT : '.*/\(.*\)'`
220                     stage_version=`echo $version_dir | sed 's/boost_//' | sed 's/_/./g'`
221                         stage_version_shorten=`expr $stage_version : '\([[0-9]]*\.[[0-9]]*\)'`
222                     V_CHECK=`expr $stage_version_shorten \>\= $_version`
223                     if test "$V_CHECK" = "1" -a "$ac_boost_lib_path" = "" ; then
224                         AC_MSG_NOTICE(We will use a staged boost library from $BOOST_ROOT)
225                         BOOST_CPPFLAGS="-I$BOOST_ROOT"
226                         BOOST_LDFLAGS="-L$BOOST_ROOT/stage/$libsubdir"
227                     fi
228                 fi
229             fi
230         fi
231
232         CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
233         export CPPFLAGS
234         LDFLAGS="$LDFLAGS $BOOST_LDFLAGS"
235         export LDFLAGS
236
237         AC_LANG_PUSH(C++)
238             AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
239         @%:@include <boost/version.hpp>
240         ]], [[
241         #if BOOST_VERSION >= $WANT_BOOST_VERSION
242         // Everything is okay
243         #else
244         #  error Boost version is too old
245         #endif
246         ]])],[
247             AC_MSG_RESULT(yes)
248         succeeded=yes
249         found_system=yes
250             ],[
251             ])
252         AC_LANG_POP([C++])
253     fi
254
255     if test "$succeeded" != "yes" ; then
256         if test "$_version" = "0" ; then
257             AC_MSG_NOTICE([[We could not detect the boost libraries (version $boost_lib_version_req_shorten or higher). If you have a staged boost library (still not installed) please specify \$BOOST_ROOT in your environment and do not give a PATH to --with-boost option.  If you are sure you have boost installed, then check your version number looking in <boost/version.hpp>. See http://randspringer.de/boost for more documentation.]])
258         else
259             AC_MSG_NOTICE([Your boost libraries seems to old (version $_version).])
260         fi
261         # execute ACTION-IF-NOT-FOUND (if present):
262         ifelse([$3], , :, [$3])
263     else
264         AC_SUBST(BOOST_CPPFLAGS)
265         AC_SUBST(BOOST_LDFLAGS)
266         AC_DEFINE(HAVE_BOOST,,[define if the Boost library is available])
267         # execute ACTION-IF-FOUND (if present):
268         ifelse([$2], , :, [$2])
269     fi
270
271     CPPFLAGS="$CPPFLAGS_SAVED"
272     LDFLAGS="$LDFLAGS_SAVED"
273 fi
274
275 ])