11# ===========================================================================
2- # http ://www.gnu.org/software/autoconf-archive/ax_boost_base.html
2+ # https ://www.gnu.org/software/autoconf-archive/ax_boost_base.html
33# ===========================================================================
44#
55# SYNOPSIS
3333# and this notice are preserved. This file is offered as-is, without any
3434# warranty.
3535
36- # serial 26
36+ # serial 42
37+
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+ ] ] ) ] )
3745
3846AC_DEFUN ( [ AX_BOOST_BASE ] ,
3947[
@@ -44,104 +52,121 @@ AC_ARG_WITH([boost],
4452 or disable it (ARG=no)
4553 @<:@ ARG=yes@:>@ ] ) ] ,
4654 [
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
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"] )
5659 ] ,
5760 [ want_boost="yes"] )
5861
5962
6063AC_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- )
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=""] )
7375
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 )
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 )
82+ ] )
83+
84+
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 )
100+ ] )
101+
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 ] )
85105 succeeded=no
86106
107+
108+ AC_REQUIRE ( [ AC_CANONICAL_HOST ] )
87109 dnl On 64-bit systems check for system libraries in both lib64 and lib.
88110 dnl The former is specified by FHS, but e.g. Debian does not adhere to
89111 dnl this (as it rises problems for generic multi-arch support).
90112 dnl The last entry in the list is chosen by default when no libraries
91113 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
114+ AS_CASE ( [ ${host_cpu}] ,
115+ [ x86_64] ,[ libsubdirs="lib64 libx32 lib lib64"] ,
116+ [ ppc64|s390x|sparc64|aarch64|ppc64le] ,[ libsubdirs="lib64 lib lib64"] ,
117+ [ libsubdirs="lib"] ,
118+ )
102119
103120 dnl allow for real multi-arch paths e.g. /usr/lib/x86_64-linux-gnu. Give
104121 dnl them priority over the other paths since, if libs are found there, they
105122 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
123+ AS_CASE ( [ ${host_cpu}] ,
124+ [ i?86] ,[ multiarch_libsubdir="lib/i386-${host_os}"] ,
125+ [ multiarch_libsubdir="lib/${host_cpu}-${host_os}"]
126+ )
114127
115128 dnl first we check the system location for boost libraries
116129 dnl this location ist chosen if boost libraries are installed with the --layout=system option
117130 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+ AS_IF ( [ test "x$_AX_BOOST_BASE_boost_path" != "x"] ,[
132+ AC_MSG_CHECKING ( [ for boostlib >= $1 ($WANT_BOOST_VERSION) includes in "$_AX_BOOST_BASE_boost_path/include"] )
133+ AS_IF ( [ test -d "$_AX_BOOST_BASE_boost_path/include" && test -r "$_AX_BOOST_BASE_boost_path/include"] ,[
134+ AC_MSG_RESULT ( [ yes] )
135+ BOOST_CPPFLAGS="-I$_AX_BOOST_BASE_boost_path/include"
136+ for _AX_BOOST_BASE_boost_path_tmp in $multiarch_libsubdir $libsubdirs; do
137+ AC_MSG_CHECKING ( [ for boostlib >= $1 ($WANT_BOOST_VERSION) lib path in "$_AX_BOOST_BASE_boost_path/$_AX_BOOST_BASE_boost_path_tmp"] )
138+ 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" ] ,[
139+ AC_MSG_RESULT ( [ yes] )
140+ BOOST_LDFLAGS="-L$_AX_BOOST_BASE_boost_path/$_AX_BOOST_BASE_boost_path_tmp";
141+ break;
142+ ] ,
143+ [ AC_MSG_RESULT ( [ no] ) ] )
144+ done] ,[
145+ AC_MSG_RESULT ( [ no] ) ] )
146+ ] ,[
147+ if test X"$cross_compiling" = Xyes; then
148+ search_libsubdirs=$multiarch_libsubdir
149+ else
150+ search_libsubdirs="$multiarch_libsubdir $libsubdirs"
151+ fi
152+ for _AX_BOOST_BASE_boost_path_tmp in /usr /usr/local /opt /opt/local ; do
153+ if test -d "$_AX_BOOST_BASE_boost_path_tmp/include/boost" && test -r "$_AX_BOOST_BASE_boost_path_tmp/include/boost" ; then
154+ for libsubdir in $search_libsubdirs ; do
155+ if ls "$_AX_BOOST_BASE_boost_path_tmp/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi
131156 done
132- BOOST_LDFLAGS="-L$ac_boost_path_tmp /$libsubdir"
133- BOOST_CPPFLAGS="-I$ac_boost_path_tmp /include"
157+ BOOST_LDFLAGS="-L$_AX_BOOST_BASE_boost_path_tmp /$libsubdir"
158+ BOOST_CPPFLAGS="-I$_AX_BOOST_BASE_boost_path_tmp /include"
134159 break;
135160 fi
136161 done
137- fi
162+ ] )
138163
139164 dnl overwrite ld flags if we have required special directory with
140165 dnl --with-boost-libdir parameter
141- if test "$ac_boost_lib_path" != ""; then
142- BOOST_LDFLAGS="-L$ac_boost_lib_path"
143- fi
166+ AS_IF ( [ test "x$_AX_BOOST_BASE_boost_lib_path" != "x"] ,
167+ [ BOOST_LDFLAGS="-L$_AX_BOOST_BASE_boost_lib_path"] )
144168
169+ AC_MSG_CHECKING ( [ for boostlib >= $1 ($WANT_BOOST_VERSION)] )
145170 CPPFLAGS_SAVED="$CPPFLAGS"
146171 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
147172 export CPPFLAGS
@@ -152,15 +177,7 @@ if test "x$want_boost" = "xyes"; then
152177
153178 AC_REQUIRE ( [ AC_PROG_CXX ] )
154179 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- ] ] ) ] ,[
180+ AC_COMPILE_IFELSE ( [ _AX_BOOST_BASE_PROGRAM($WANT_BOOST_VERSION)] ,[
164181 AC_MSG_RESULT ( yes )
165182 succeeded=yes
166183 found_system=yes
@@ -172,56 +189,66 @@ if test "x$want_boost" = "xyes"; then
172189
173190 dnl if we found no boost with system layout we search for boost libraries
174191 dnl built and installed without the --layout=system option or for a staged(not installed) version
175- if test "x$succeeded" != "xyes"; then
192+ if test "x$succeeded" != "xyes" ; then
176193 CPPFLAGS="$CPPFLAGS_SAVED"
177194 LDFLAGS="$LDFLAGS_SAVED"
178195 BOOST_CPPFLAGS=
179- BOOST_LDFLAGS=
196+ if test -z "$_AX_BOOST_BASE_boost_lib_path" ; then
197+ BOOST_LDFLAGS=
198+ fi
180199 _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/_/./'`
200+ if test -n "$_AX_BOOST_BASE_boost_path" ; then
201+ if test -d "$_AX_BOOST_BASE_boost_path " && test -r "$_AX_BOOST_BASE_boost_path "; then
202+ for i in `ls -d $_AX_BOOST_BASE_boost_path /include/boost-* 2>/dev/null`; do
203+ _version_tmp=`echo $i | sed "s#$_AX_BOOST_BASE_boost_path ##" | sed 's/\/include\/boost-//' | sed 's/_/./'`
185204 V_CHECK=`expr $_version_tmp \> $_version`
186- if test "$V_CHECK" = "1 " ; then
205+ if test "x $V_CHECK" = "x1 " ; then
187206 _version=$_version_tmp
188207 fi
189208 VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'`
190- BOOST_CPPFLAGS="-I$ac_boost_path /include/boost-$VERSION_UNDERSCORE"
209+ BOOST_CPPFLAGS="-I$_AX_BOOST_BASE_boost_path /include/boost-$VERSION_UNDERSCORE"
191210 done
192211 dnl if nothing found search for layout used in Windows distributions
193212 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 "
213+ if test -d "$_AX_BOOST_BASE_boost_path /boost" && test -r "$_AX_BOOST_BASE_boost_path /boost"; then
214+ BOOST_CPPFLAGS="-I$_AX_BOOST_BASE_boost_path "
196215 fi
197216 fi
217+ dnl if we found something and BOOST_LDFLAGS was unset before
218+ dnl (because "$_AX_BOOST_BASE_boost_lib_path" = ""), set it here.
219+ if test -n "$BOOST_CPPFLAGS" && test -z "$BOOST_LDFLAGS"; then
220+ for libsubdir in $libsubdirs ; do
221+ if ls "$_AX_BOOST_BASE_boost_path/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi
222+ done
223+ BOOST_LDFLAGS="-L$_AX_BOOST_BASE_boost_path/$libsubdir"
224+ fi
198225 fi
199226 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/_/./'`
227+ if test "x $cross_compiling" != "xyes" ; then
228+ for _AX_BOOST_BASE_boost_path in /usr /usr/local /opt /opt/local ; do
229+ if test -d "$_AX_BOOST_BASE_boost_path " && test -r "$_AX_BOOST_BASE_boost_path" ; then
230+ for i in `ls -d $_AX_BOOST_BASE_boost_path /include/boost-* 2>/dev/null`; do
231+ _version_tmp=`echo $i | sed "s#$_AX_BOOST_BASE_boost_path ##" | sed 's/\/include\/boost-//' | sed 's/_/./'`
205232 V_CHECK=`expr $_version_tmp \> $_version`
206- if test "$V_CHECK" = "1 " ; then
233+ if test "x $V_CHECK" = "x1 " ; then
207234 _version=$_version_tmp
208- best_path=$ac_boost_path
235+ best_path=$_AX_BOOST_BASE_boost_path
209236 fi
210237 done
211238 fi
212239 done
213240
214241 VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'`
215242 BOOST_CPPFLAGS="-I$best_path/include/boost-$VERSION_UNDERSCORE"
216- if test "$ac_boost_lib_path" = "" ; then
243+ if test -z "$_AX_BOOST_BASE_boost_lib_path" ; then
217244 for libsubdir in $libsubdirs ; do
218245 if ls "$best_path/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi
219246 done
220247 BOOST_LDFLAGS="-L$best_path/$libsubdir"
221248 fi
222249 fi
223250
224- if test "x $BOOST_ROOT" != "x" ; then
251+ if test -n " $BOOST_ROOT" ; then
225252 for libsubdir in $libsubdirs ; do
226253 if ls "$BOOST_ROOT/stage/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi
227254 done
@@ -230,7 +257,7 @@ if test "x$want_boost" = "xyes"; then
230257 stage_version=`echo $version_dir | sed 's/boost_//' | sed 's/_/./g'`
231258 stage_version_shorten=`expr $stage_version : '\([ [ 0-9] ] *\.[ [ 0-9] ] *\)'`
232259 V_CHECK=`expr $stage_version_shorten \>\= $_version`
233- if test "$V_CHECK" = "1" -a "$ac_boost_lib_path" = " " ; then
260+ if test "x $V_CHECK" = "x1" && test -z "$_AX_BOOST_BASE_boost_lib_path " ; then
234261 AC_MSG_NOTICE ( We will use a staged boost library from $BOOST_ROOT )
235262 BOOST_CPPFLAGS="-I$BOOST_ROOT"
236263 BOOST_LDFLAGS="-L$BOOST_ROOT/stage/$libsubdir"
@@ -245,15 +272,7 @@ if test "x$want_boost" = "xyes"; then
245272 export LDFLAGS
246273
247274 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- ] ] ) ] ,[
275+ AC_COMPILE_IFELSE ( [ _AX_BOOST_BASE_PROGRAM($WANT_BOOST_VERSION)] ,[
257276 AC_MSG_RESULT ( yes )
258277 succeeded=yes
259278 found_system=yes
@@ -262,24 +281,21 @@ if test "x$want_boost" = "xyes"; then
262281 AC_LANG_POP ( [ C++] )
263282 fi
264283
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.] ] )
284+ if test "x $succeeded" != "xyes " ; then
285+ if test "x $_version" = "x0 " ; then
286+ 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.] ] )
268287 else
269288 AC_MSG_NOTICE ( [ Your boost libraries seems to old (version $_version).] )
270289 fi
271290 # execute ACTION-IF-NOT-FOUND (if present):
272291 ifelse ( [ $3 ] , , : , [ $3 ] )
273292 else
274- AC_SUBST ( BOOST_CPPFLAGS )
275- AC_SUBST ( BOOST_LDFLAGS )
276293 AC_DEFINE ( HAVE_BOOST ,,[ define if the Boost library is available] )
277294 # execute ACTION-IF-FOUND (if present):
278295 ifelse ( [ $2 ] , , : , [ $2 ] )
279296 fi
280297
281298 CPPFLAGS="$CPPFLAGS_SAVED"
282299 LDFLAGS="$LDFLAGS_SAVED"
283- fi
284300
285301] )
0 commit comments