From: JINMEI Tatuya Date: Fri, 28 Dec 2012 01:54:42 +0000 (-0800) Subject: [1991] moved boost-related config to a separate m4 X-Git-Tag: bind10-1.0.0-rc-release~95^2~21^2~8^2~4^2~4 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=96e4248d61ccbcd23c7563f0a36d5443b607ea02;p=thirdparty%2Fkea.git [1991] moved boost-related config to a separate m4 in order to keep the main configure.ac more concise, and so that we can eventually introduce more fine-grained configuration (e.g., skipping some checks for DNS/DHCP-only build) At the moment, this is just a cleanup, and doesn't change the behavior itself. --- diff --git a/configure.ac b/configure.ac index df53d4def1..94d57a540e 100644 --- a/configure.ac +++ b/configure.ac @@ -838,57 +838,14 @@ LIBS=$LIBS_SAVED # # Configure Boost header path # -# If explicitly specified, use it. -AC_ARG_WITH([boost-include], - AC_HELP_STRING([--with-boost-include=PATH], - [specify exact directory for Boost headers]), - [boost_include_path="$withval"]) -# If not specified, try some common paths. -if test -z "$with_boost_include"; then - boostdirs="/usr/local /usr/pkg /opt /opt/local" - for d in $boostdirs - do - if test -f $d/include/boost/shared_ptr.hpp; then - boost_include_path=$d/include - break - fi - done -fi -CPPFLAGS_SAVES="$CPPFLAGS" -if test "${boost_include_path}" ; then - BOOST_INCLUDES="-I${boost_include_path}" - CPPFLAGS="$CPPFLAGS $BOOST_INCLUDES" +AX_BOOST_FOR_BIND10 +# Boost offset_ptr is required in one library and not optional right now, so +# we unconditionally fail here if it doesn't work. +if test "$BOOST_OFFSET_PTR_FAILURE" == "yes"; then + AC_MSG_ERROR([Failed to compile a required header file. Try upgrading Boost to 1.44 or higher (when using clang++) or specifying --without-werror. See the ChangeLog entry for Trac no. 2147 for more details.]) fi -AC_CHECK_HEADERS([boost/shared_ptr.hpp boost/foreach.hpp boost/interprocess/sync/interprocess_upgradable_mutex.hpp boost/date_time/posix_time/posix_time_types.hpp boost/bind.hpp boost/function.hpp],, - AC_MSG_ERROR([Missing required header files.])) - -# Detect whether Boost tries to use threads by default, and, if not, -# make it sure explicitly. In some systems the automatic detection -# may depend on preceding header files, and if inconsistency happens -# it could lead to a critical disruption. -AC_MSG_CHECKING([whether Boost tries to use threads]) -AC_TRY_COMPILE([ -#include -#ifdef BOOST_HAS_THREADS -#error "boost will use threads" -#endif],, -[AC_MSG_RESULT(no) - CPPFLAGS_BOOST_THREADCONF="-DBOOST_DISABLE_THREADS=1"], -[AC_MSG_RESULT(yes)]) - -# Boost offset_ptr is required in one library (not optional right now), and -# it's known it doesn't compile on some platforms, depending on boost version, -# its local configuration, and compiler. -AC_MSG_CHECKING([Boost offset_ptr compiles]) -AC_TRY_COMPILE([ -#include -],, -[AC_MSG_RESULT(yes)], -[AC_MSG_RESULT(no) - AC_MSG_ERROR([Failed to compile a required header file. Try upgrading Boost to 1.44 or higher (when using clang++) or specifying --without-werror. See the ChangeLog entry for Trac no. 2147 for more details.])]) CPPFLAGS="$CPPFLAGS_SAVES $CPPFLAGS_BOOST_THREADCONF" -AC_SUBST(BOOST_INCLUDES) # I can't get some of the #include right without this # TODO: find the real cause of asio/boost wanting pthreads diff --git a/m4macros/ax_boost_for_bind10.m4 b/m4macros/ax_boost_for_bind10.m4 new file mode 100644 index 0000000000..9b48a4821b --- /dev/null +++ b/m4macros/ax_boost_for_bind10.m4 @@ -0,0 +1,88 @@ +dnl @synopsis AX_BOOST_FOR_BIND10 +dnl +dnl Test for the Boost C++ header files intended to be used within BIND 10 +dnl +dnl If no path to the installed boost header files is given via the +dnl --with-boost-include option, the macro searchs under +dnl /usr/local /usr/pkg /opt /opt/local directories. +dnl If it cannot detect any workable path for Boost, this macro treats it +dnl as a fatal error (so it cannot be called if the availability of Boost +dnl is optional). +dnl +dnl This macro also tries to identify some known portability issues, and +dnl sets corresponding variables so the caller can react to (or ignore, +dnl depending on other configuration) specific issues appropriately. +dnl +dnl This macro calls: +dnl +dnl AC_SUBST(BOOST_INCLUDES) +dnl +dnl And possibly sets: +dnl CPPFLAGS_BOOST_THREADCONF should be added to CPPFLAGS by caller +dnl BOOST_OFFSET_PTR_WOULDFAIL set to yes if offset_ptr would cause build +dnl error; otherwise set to no +dnl + +AC_DEFUN([AX_BOOST_FOR_BIND10], [ +AC_LANG_SAVE +AC_LANG([C++]) + +# +# Configure Boost header path +# +# If explicitly specified, use it. +AC_ARG_WITH([boost-include], + AC_HELP_STRING([--with-boost-include=PATH], + [specify exact directory for Boost headers]), + [boost_include_path="$withval"]) +# If not specified, try some common paths. +if test -z "$with_boost_include"; then + boostdirs="/usr/local /usr/pkg /opt /opt/local" + for d in $boostdirs + do + if test -f $d/include/boost/shared_ptr.hpp; then + boost_include_path=$d/include + break + fi + done +fi + +# Check the path with some specific headers. +CPPFLAGS_SAVED="$CPPFLAGS" +if test "${boost_include_path}" ; then + BOOST_INCLUDES="-I${boost_include_path}" + CPPFLAGS="$CPPFLAGS $BOOST_INCLUDES" +fi +AC_CHECK_HEADERS([boost/shared_ptr.hpp boost/foreach.hpp boost/interprocess/sync/interprocess_upgradable_mutex.hpp boost/date_time/posix_time/posix_time_types.hpp boost/bind.hpp boost/function.hpp],, + AC_MSG_ERROR([Missing required header files.])) + +# Detect whether Boost tries to use threads by default, and, if not, +# make it sure explicitly. In some systems the automatic detection +# may depend on preceding header files, and if inconsistency happens +# it could lead to a critical disruption. +AC_MSG_CHECKING([whether Boost tries to use threads]) +AC_TRY_COMPILE([ +#include +#ifdef BOOST_HAS_THREADS +#error "boost will use threads" +#endif],, +[AC_MSG_RESULT(no) + CPPFLAGS_BOOST_THREADCONF="-DBOOST_DISABLE_THREADS=1"], +[AC_MSG_RESULT(yes)]) + +# Boost offset_ptr is known to not compile on some platforms, depending on +# boost version, its local configuration, and compiler. Detect it. +AC_MSG_CHECKING([Boost offset_ptr compiles]) +AC_TRY_COMPILE([ +#include +],, +[AC_MSG_RESULT(yes) + BOOST_OFFSET_PTR_WOULDFAIL=no], +[AC_MSG_RESULT(no) + BOOST_OFFSET_PTR_WOULDFAIL=yes]) + +AC_SUBST(BOOST_INCLUDES) + +CPPFLAGS="$CPPFLAGS_SAVED" +AC_LANG_RESTORE +])dnl AX_BOOST_FOR_BIND10