source: trunk/build_support/ax_boost_base.m4 @ 1602

Last change on this file since 1602 was 1489, checked in by Peter, 13 years ago

adding some props

  • Property svn:eol-style set to native
  • Property svn:keywords set to native
File size: 7.4 KB
Line 
1# ===========================================================================
2#             http://autoconf-archive.cryp.to/ax_boost_base.html
3# ===========================================================================
4#
5# SYNOPSIS
6#
7#   AX_BOOST_BASE([MINIMUM-VERSION])
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# LAST MODIFICATION
27#
28#   2008-04-12
29#
30# COPYLEFT
31#
32#   Copyright (c) 2008 Thomas Porschberg <thomas@randspringer.de>
33#
34#   Copying and distribution of this file, with or without modification, are
35#   permitted in any medium without royalty provided the copyright notice
36#   and this notice are preserved.
37
38AC_DEFUN([AX_BOOST_BASE],
39[
40AC_ARG_WITH([boost],
41  AS_HELP_STRING([--with-boost@<:@=DIR@:>@], [use boost (default is yes) - it is possible to specify the root directory for boost (optional)]),
42  [
43    if test "$withval" = "no"; then
44    want_boost="no"
45    elif test "$withval" = "yes"; then
46        want_boost="yes"
47        ac_boost_path=""
48    else
49      want_boost="yes"
50        ac_boost_path="$withval"
51  fi
52    ],
53    [want_boost="yes"])
54
55
56AC_ARG_WITH([boost-libdir],
57        AS_HELP_STRING([--with-boost-libdir=LIB_DIR],
58        [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.]),
59        [
60        if test -d $withval
61        then
62                ac_boost_lib_path="$withval"
63        else
64                AC_MSG_ERROR(--with-boost-libdir expected directory name)
65        fi
66        ],
67        [ac_boost_lib_path=""]
68)
69
70if test "x$want_boost" = "xyes"; then
71  boost_lib_version_req=ifelse([$1], ,1.20.0,$1)
72  boost_lib_version_req_shorten=`expr $boost_lib_version_req : '\([[0-9]]*\.[[0-9]]*\)'`
73  boost_lib_version_req_major=`expr $boost_lib_version_req : '\([[0-9]]*\)'`
74  boost_lib_version_req_minor=`expr $boost_lib_version_req : '[[0-9]]*\.\([[0-9]]*\)'`
75  boost_lib_version_req_sub_minor=`expr $boost_lib_version_req : '[[0-9]]*\.[[0-9]]*\.\([[0-9]]*\)'`
76  if test "x$boost_lib_version_req_sub_minor" = "x" ; then
77    boost_lib_version_req_sub_minor="0"
78      fi
79  WANT_BOOST_VERSION=`expr $boost_lib_version_req_major \* 100000 \+  $boost_lib_version_req_minor \* 100 \+ $boost_lib_version_req_sub_minor`
80  AC_MSG_CHECKING(for boostlib >= $boost_lib_version_req)
81  succeeded=no
82
83  dnl first we check the system location for boost libraries
84  dnl this location ist chosen if boost libraries are installed with the --layout=system option
85  dnl or if you install boost with RPM
86  if test "$ac_boost_path" != ""; then
87    BOOST_LDFLAGS="-L$ac_boost_path/lib"
88    BOOST_CPPFLAGS="-I$ac_boost_path/include"
89  else
90    for ac_boost_path_tmp in /usr /usr/local /opt /opt/local ; do
91      if test -d "$ac_boost_path_tmp/include/boost" && test -r "$ac_boost_path_tmp/include/boost"; then
92        BOOST_LDFLAGS="-L$ac_boost_path_tmp/lib"
93        BOOST_CPPFLAGS="-I$ac_boost_path_tmp/include"
94        break;
95      fi
96    done
97  fi
98
99    dnl overwrite ld flags if we have required special directory with
100    dnl --with-boost-libdir parameter
101    if test "$ac_boost_lib_path" != ""; then
102       BOOST_LDFLAGS="-L$ac_boost_lib_path"
103    fi
104
105  CPPFLAGS_SAVED="$CPPFLAGS"
106  CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
107  export CPPFLAGS
108
109  LDFLAGS_SAVED="$LDFLAGS"
110  LDFLAGS="$LDFLAGS $BOOST_LDFLAGS"
111  export LDFLAGS
112
113  AC_LANG_PUSH(C++)
114      AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
115  @%:@include <boost/version.hpp>
116  ]], [[
117  #if BOOST_VERSION >= $WANT_BOOST_VERSION
118  // Everything is okay
119  #else
120  #  error Boost version is too old
121  #endif
122  ]])],[
123        AC_MSG_RESULT(yes)
124  succeeded=yes
125  found_system=yes
126        ],[
127        ])
128  AC_LANG_POP([C++])
129
130
131
132  dnl if we found no boost with system layout we search for boost libraries
133  dnl built and installed without the --layout=system option or for a staged(not installed) version
134  if test "x$succeeded" != "xyes"; then
135    _version=0
136    if test "$ac_boost_path" != ""; then
137      if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then
138        for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do
139          _version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'`
140          V_CHECK=`expr $_version_tmp \> $_version`
141          if test "$V_CHECK" = "1" ; then
142            _version=$_version_tmp
143          fi
144          VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'`
145          BOOST_CPPFLAGS="-I$ac_boost_path/include/boost-$VERSION_UNDERSCORE"
146        done
147      fi
148    else
149      for ac_boost_path in /usr /usr/local /opt /opt/local ; do
150        if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then
151          for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do
152            _version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'`
153            V_CHECK=`expr $_version_tmp \> $_version`
154            if test "$V_CHECK" = "1" ; then
155              _version=$_version_tmp
156                          best_path=$ac_boost_path
157            fi
158          done
159        fi
160      done
161
162      VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'`
163      BOOST_CPPFLAGS="-I$best_path/include/boost-$VERSION_UNDERSCORE"
164            if test "$ac_boost_lib_path" = ""
165            then
166               BOOST_LDFLAGS="-L$best_path/lib"
167            fi
168
169          if test "x$BOOST_ROOT" != "x"; then
170        if test -d "$BOOST_ROOT" && test -r "$BOOST_ROOT" && test -d "$BOOST_ROOT/stage/lib" && test -r "$BOOST_ROOT/stage/lib"; then
171          version_dir=`expr //$BOOST_ROOT : '.*/\(.*\)'`
172          stage_version=`echo $version_dir | sed 's/boost_//' | sed 's/_/./g'`
173                stage_version_shorten=`expr $stage_version : '\([[0-9]]*\.[[0-9]]*\)'`
174          V_CHECK=`expr $stage_version_shorten \>\= $_version`
175                    if test "$V_CHECK" = "1" -a "$ac_boost_lib_path" = "" ; then
176            AC_MSG_NOTICE(We will use a staged boost library from $BOOST_ROOT)
177            BOOST_CPPFLAGS="-I$BOOST_ROOT"
178            BOOST_LDFLAGS="-L$BOOST_ROOT/stage/lib"
179          fi
180        fi
181          fi
182    fi
183
184    CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
185    export CPPFLAGS
186    LDFLAGS="$LDFLAGS $BOOST_LDFLAGS"
187    export LDFLAGS
188
189    AC_LANG_PUSH(C++)
190        AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
191    @%:@include <boost/version.hpp>
192    ]], [[
193    #if BOOST_VERSION >= $WANT_BOOST_VERSION
194    // Everything is okay
195    #else
196    #  error Boost version is too old
197    #endif
198    ]])],[
199          AC_MSG_RESULT(yes)
200    succeeded=yes
201    found_system=yes
202          ],[
203          ])
204    AC_LANG_POP([C++])
205  fi
206
207  if test "$succeeded" != "yes" ; then
208    if test "$_version" = "0" ; then
209      AC_MSG_ERROR([[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.]])
210    else
211      AC_MSG_NOTICE([Your boost libraries seems to old (version $_version).])
212    fi
213  else
214    AC_SUBST(BOOST_CPPFLAGS)
215    AC_SUBST(BOOST_LDFLAGS)
216    AC_DEFINE(HAVE_BOOST,,[define if the Boost library is available])
217  fi
218
219        CPPFLAGS="$CPPFLAGS_SAVED"
220        LDFLAGS="$LDFLAGS_SAVED"
221fi
222
223])
Note: See TracBrowser for help on using the repository browser.