source: trunk/m4/ax_boost_base.m4 @ 2326

Last change on this file since 2326 was 2326, checked in by Peter, 12 years ago

update boost m4 macro, which now uses action-if-found/action-if-not-found interface, so changed configure.ac reflecting this change.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id Date
File size: 9.8 KB
Line 
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 17
37
38AC_DEFUN([AX_BOOST_BASE],
39[
40AC_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
60AC_ARG_WITH([boost-libdir],
61        AS_HELP_STRING([--with-boost-libdir=LIB_DIR],
62        [Force given directory for boost libraries. Note that this will overwrite 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
74if 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 x86_64 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    if test `uname -m` = x86_64; then
94        libsubdirs="lib64 lib lib64"
95    fi
96
97    dnl first we check the system location for boost libraries
98    dnl this location ist chosen if boost libraries are installed with the --layout=system option
99    dnl or if you install boost with RPM
100    if test "$ac_boost_path" != ""; then
101        BOOST_LDFLAGS="-L$ac_boost_path/$libsubdir"
102        BOOST_CPPFLAGS="-I$ac_boost_path/include"
103    elif test "$cross_compiling" != yes; then
104        for ac_boost_path_tmp in /usr /usr/local /opt /opt/local ; do
105            if test -d "$ac_boost_path_tmp/include/boost" && test -r "$ac_boost_path_tmp/include/boost"; then
106                for libsubdir in $libsubdirs ; do
107                    if ls "$ac_boost_path_tmp/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi
108                done
109                BOOST_LDFLAGS="-L$ac_boost_path_tmp/$libsubdir"
110                BOOST_CPPFLAGS="-I$ac_boost_path_tmp/include"
111                break;
112            fi
113        done
114    fi
115
116    dnl overwrite ld flags if we have required special directory with
117    dnl --with-boost-libdir parameter
118    if test "$ac_boost_lib_path" != ""; then
119       BOOST_LDFLAGS="-L$ac_boost_lib_path"
120    fi
121
122    CPPFLAGS_SAVED="$CPPFLAGS"
123    CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
124    export CPPFLAGS
125
126    LDFLAGS_SAVED="$LDFLAGS"
127    LDFLAGS="$LDFLAGS $BOOST_LDFLAGS"
128    export LDFLAGS
129
130    AC_REQUIRE([AC_PROG_CXX])
131    AC_LANG_PUSH(C++)
132        AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
133    @%:@include <boost/version.hpp>
134    ]], [[
135    #if BOOST_VERSION >= $WANT_BOOST_VERSION
136    // Everything is okay
137    #else
138    #  error Boost version is too old
139    #endif
140    ]])],[
141        AC_MSG_RESULT(yes)
142    succeeded=yes
143    found_system=yes
144        ],[
145        ])
146    AC_LANG_POP([C++])
147
148
149
150    dnl if we found no boost with system layout we search for boost libraries
151    dnl built and installed without the --layout=system option or for a staged(not installed) version
152    if test "x$succeeded" != "xyes"; then
153        _version=0
154        if test "$ac_boost_path" != ""; then
155            if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then
156                for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do
157                    _version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'`
158                    V_CHECK=`expr $_version_tmp \> $_version`
159                    if test "$V_CHECK" = "1" ; then
160                        _version=$_version_tmp
161                    fi
162                    VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'`
163                    BOOST_CPPFLAGS="-I$ac_boost_path/include/boost-$VERSION_UNDERSCORE"
164                done
165            fi
166        else
167            if test "$cross_compiling" != yes; then
168                for ac_boost_path in /usr /usr/local /opt /opt/local ; do
169                    if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then
170                        for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do
171                            _version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'`
172                            V_CHECK=`expr $_version_tmp \> $_version`
173                            if test "$V_CHECK" = "1" ; then
174                                _version=$_version_tmp
175                                best_path=$ac_boost_path
176                            fi
177                        done
178                    fi
179                done
180
181                VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'`
182                BOOST_CPPFLAGS="-I$best_path/include/boost-$VERSION_UNDERSCORE"
183                if test "$ac_boost_lib_path" = ""; then
184                    for libsubdir in $libsubdirs ; do
185                        if ls "$best_path/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi
186                    done
187                    BOOST_LDFLAGS="-L$best_path/$libsubdir"
188                fi
189            fi
190
191            if test "x$BOOST_ROOT" != "x"; then
192                for libsubdir in $libsubdirs ; do
193                    if ls "$BOOST_ROOT/stage/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi
194                done
195                if test -d "$BOOST_ROOT" && test -r "$BOOST_ROOT" && test -d "$BOOST_ROOT/stage/$libsubdir" && test -r "$BOOST_ROOT/stage/$libsubdir"; then
196                    version_dir=`expr //$BOOST_ROOT : '.*/\(.*\)'`
197                    stage_version=`echo $version_dir | sed 's/boost_//' | sed 's/_/./g'`
198                        stage_version_shorten=`expr $stage_version : '\([[0-9]]*\.[[0-9]]*\)'`
199                    V_CHECK=`expr $stage_version_shorten \>\= $_version`
200                    if test "$V_CHECK" = "1" -a "$ac_boost_lib_path" = "" ; then
201                        AC_MSG_NOTICE(We will use a staged boost library from $BOOST_ROOT)
202                        BOOST_CPPFLAGS="-I$BOOST_ROOT"
203                        BOOST_LDFLAGS="-L$BOOST_ROOT/stage/$libsubdir"
204                    fi
205                fi
206            fi
207        fi
208
209        CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
210        export CPPFLAGS
211        LDFLAGS="$LDFLAGS $BOOST_LDFLAGS"
212        export LDFLAGS
213
214        AC_LANG_PUSH(C++)
215            AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
216        @%:@include <boost/version.hpp>
217        ]], [[
218        #if BOOST_VERSION >= $WANT_BOOST_VERSION
219        // Everything is okay
220        #else
221        #  error Boost version is too old
222        #endif
223        ]])],[
224            AC_MSG_RESULT(yes)
225        succeeded=yes
226        found_system=yes
227            ],[
228            ])
229        AC_LANG_POP([C++])
230    fi
231
232    if test "$succeeded" != "yes" ; then
233        if test "$_version" = "0" ; then
234            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.]])
235        else
236            AC_MSG_NOTICE([Your boost libraries seems to old (version $_version).])
237        fi
238        # execute ACTION-IF-NOT-FOUND (if present):
239        ifelse([$3], , :, [$3])
240    else
241        AC_SUBST(BOOST_CPPFLAGS)
242        AC_SUBST(BOOST_LDFLAGS)
243        AC_DEFINE(HAVE_BOOST,,[define if the Boost library is available])
244        # execute ACTION-IF-FOUND (if present):
245        ifelse([$2], , :, [$2])
246    fi
247
248    CPPFLAGS="$CPPFLAGS_SAVED"
249    LDFLAGS="$LDFLAGS_SAVED"
250fi
251
252])
Note: See TracBrowser for help on using the repository browser.