RIC:1060: Change in PTL
[ric-plt/sdl.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 26
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         CPPFLAGS="$CPPFLAGS_SAVED"
177         LDFLAGS="$LDFLAGS_SAVED"
178         BOOST_CPPFLAGS=
179         BOOST_LDFLAGS=
180         _version=0
181         if test "$ac_boost_path" != ""; then
182             if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then
183                 for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do
184                     _version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'`
185                     V_CHECK=`expr $_version_tmp \> $_version`
186                     if test "$V_CHECK" = "1" ; then
187                         _version=$_version_tmp
188                     fi
189                     VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'`
190                     BOOST_CPPFLAGS="-I$ac_boost_path/include/boost-$VERSION_UNDERSCORE"
191                 done
192                 dnl if nothing found search for layout used in Windows distributions
193                 if test -z "$BOOST_CPPFLAGS"; then
194                     if test -d "$ac_boost_path/boost" && test -r "$ac_boost_path/boost"; then
195                         BOOST_CPPFLAGS="-I$ac_boost_path"
196                     fi
197                 fi
198             fi
199         else
200             if test "$cross_compiling" != yes; then
201                 for ac_boost_path in /usr /usr/local /opt /opt/local ; do
202                     if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then
203                         for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do
204                             _version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'`
205                             V_CHECK=`expr $_version_tmp \> $_version`
206                             if test "$V_CHECK" = "1" ; then
207                                 _version=$_version_tmp
208                                 best_path=$ac_boost_path
209                             fi
210                         done
211                     fi
212                 done
213
214                 VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'`
215                 BOOST_CPPFLAGS="-I$best_path/include/boost-$VERSION_UNDERSCORE"
216                 if test "$ac_boost_lib_path" = ""; then
217                     for libsubdir in $libsubdirs ; do
218                         if ls "$best_path/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi
219                     done
220                     BOOST_LDFLAGS="-L$best_path/$libsubdir"
221                 fi
222             fi
223
224             if test "x$BOOST_ROOT" != "x"; then
225                 for libsubdir in $libsubdirs ; do
226                     if ls "$BOOST_ROOT/stage/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi
227                 done
228                 if test -d "$BOOST_ROOT" && test -r "$BOOST_ROOT" && test -d "$BOOST_ROOT/stage/$libsubdir" && test -r "$BOOST_ROOT/stage/$libsubdir"; then
229                     version_dir=`expr //$BOOST_ROOT : '.*/\(.*\)'`
230                     stage_version=`echo $version_dir | sed 's/boost_//' | sed 's/_/./g'`
231                         stage_version_shorten=`expr $stage_version : '\([[0-9]]*\.[[0-9]]*\)'`
232                     V_CHECK=`expr $stage_version_shorten \>\= $_version`
233                     if test "$V_CHECK" = "1" -a "$ac_boost_lib_path" = "" ; then
234                         AC_MSG_NOTICE(We will use a staged boost library from $BOOST_ROOT)
235                         BOOST_CPPFLAGS="-I$BOOST_ROOT"
236                         BOOST_LDFLAGS="-L$BOOST_ROOT/stage/$libsubdir"
237                     fi
238                 fi
239             fi
240         fi
241
242         CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
243         export CPPFLAGS
244         LDFLAGS="$LDFLAGS $BOOST_LDFLAGS"
245         export LDFLAGS
246
247         AC_LANG_PUSH(C++)
248             AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
249         @%:@include <boost/version.hpp>
250         ]], [[
251         #if BOOST_VERSION >= $WANT_BOOST_VERSION
252         // Everything is okay
253         #else
254         #  error Boost version is too old
255         #endif
256         ]])],[
257             AC_MSG_RESULT(yes)
258         succeeded=yes
259         found_system=yes
260             ],[
261             ])
262         AC_LANG_POP([C++])
263     fi
264
265     if test "$succeeded" != "yes" ; then
266         if test "$_version" = "0" ; then
267             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.]])
268         else
269             AC_MSG_NOTICE([Your boost libraries seems to old (version $_version).])
270         fi
271         # execute ACTION-IF-NOT-FOUND (if present):
272         ifelse([$3], , :, [$3])
273     else
274         AC_SUBST(BOOST_CPPFLAGS)
275         AC_SUBST(BOOST_LDFLAGS)
276         AC_DEFINE(HAVE_BOOST,,[define if the Boost library is available])
277         # execute ACTION-IF-FOUND (if present):
278         ifelse([$2], , :, [$2])
279     fi
280
281     CPPFLAGS="$CPPFLAGS_SAVED"
282     LDFLAGS="$LDFLAGS_SAVED"
283 fi
284
285 ])