Quoting fix for boost thread check
[m4-moved-to-github.git] / boost.m4
index f3dd675..3ef2e7e 100644 (file)
--- a/boost.m4
+++ b/boost.m4
@@ -23,13 +23,28 @@ AC_DEFUN([ID_BOOST],
        BOOST_REQ_VERSION=`echo "$2" | awk 'BEGIN { FS = "."; } { printf "%d", ([$]1 * 1000 + [$]2) * 100 + [$]3;}'`
        CPPFLAGS="$CPPFLAGS -DBOOST_REQ_VERSION=${BOOST_REQ_VERSION}"
 
-       AC_ARG_WITH([boost],[[  --with-boost=DIR  use Boost in prefix DIR]])
+       AC_ARG_WITH([boost],[  --with-boost=DIR        use Boost in prefix DIR])
        if test "$with_boost" = "yes" -o -z "$with_boost"; then
            BOOST_CPPFLAGS=""
            BOOST_LIB=""
        else
+           for b in ${with_boost}/lib ${with_boost}/lib64; do
+               if test -d "$b"; then
+                   BOOST_LIB="-L$b"
+               fi
+            done
            BOOST_CPPFLAGS="-I${with_boost}/include"
-           BOOST_LIB="-L${with_boost}/lib"
+           if test ! -f "${with_boost}/include/boost/version.hpp"; then
+               for b in ${with_boost}/include/boost-*; do
+                   BOOST_CPPFLAGS="-I$b"
+               done
+           fi
+       fi
+       AC_ARG_WITH([boost-toolset],[  --with-boost-toolset=x  use Boost toolset (eg gcc43)])
+       if test "$with_boost_toolset" = "yes" -o -z "$with_boost_toolset"; then
+           BOOST_TOOLSET=""
+       else
+           BOOST_TOOLSET="-${with_boost_toolset}"
        fi
        if test "${with_boost}" = "no"; then
            AC_MSG_RESULT([disabled])
@@ -42,67 +57,97 @@ AC_DEFUN([ID_BOOST],
 version_is:BOOST_VERSION
 ]])])
            BOOST_GOT_VERSION=`(eval "$ac_cpp conftest.$ac_ext") 2>&AS_MESSAGE_LOG_FD | $EGREP version_is 2>/dev/null | cut -d ":" -f2`
-           if test $BOOST_GOT_VERSION = "BOOST_VERSION"; then
+           if test -z "$BOOST_GOT_VERSION" -o \
+               "$BOOST_GOT_VERSION" = "BOOST_VERSION"; then
                AC_MSG_RESULT([no])
                AC_MSG_ERROR([Boost development libraries required])
            fi
            AC_MSG_RESULT([yes ($BOOST_GOT_VERSION)])
-           if test $BOOST_GOT_VERSION -lt $BOOST_REQ_VERSION; then
+           if test "$BOOST_GOT_VERSION" -lt $BOOST_REQ_VERSION; then
                AC_MSG_ERROR([Boost version $BOOST_REQ_VERSION required])
            fi
            for c in $1; do
                case $c in 
                    thread)
+                       if test "$BOOST_GOT_VERSION" -ge 104100; then
+                           AC_MSG_CHECKING([Boost threads + system])
+                       else
+                           AC_MSG_CHECKING([Boost threads])
+                       fi
                        AC_SUBST([BOOST_THREAD_LIB])
+                       saveLIBS="${LIBS}"
                        BOOST_THREAD_LIB=""
-                       for l in boost_thread-mt boost_thread; do
-                           AC_CHECK_LIB([${l}],[main],[
-                                   BOOST_THREAD_LIB="-l${l}"
-                                   break
-                                   ],[])
-                       done
-                       if test -z "${BOOST_THREAD_LIB}"; then
-                           AC_MSG_ERROR([Boost thread libs not found])
-                       fi
-                       LIBS="${LIBS} ${BOOST_THREAD_LIB}"
-                       AC_MSG_CHECKING([Boost threads])
+                       for l in "${BOOST_TOOLSET}-mt" "${BOOST_TOOLSET}"; do
+                           trylib="-lboost_thread${l}"
+                           if test "$BOOST_GOT_VERSION" -ge 104100; then
+                               trylib="-lboost_system${l} ${trylib}"
+                           fi
+                           LIBS="${saveLIBS} ${trylib}"
                        AC_LINK_IFELSE([AC_LANG_PROGRAM([[
 #include <boost/version.hpp>
 #include <boost/thread/thread.hpp>
 ]],[[ 
 int x = BOOST_VERSION;
-]])],[AC_MSG_RESULT([yes])],[
-AC_MSG_RESULT([no])
-AC_MSG_ERROR([Boost thread libraries required])
-                           ])
+]])],[
+                           BOOST_THREAD_LIB="${trylib}"
+                           break],[])
+                       done
+                       if test "${BOOST_THREAD_LIB}"; then
+                           AC_MSG_RESULT([yes])
+                       else
+                           AC_MSG_RESULT([no])
+                       fi
                        ;;
                    test)
+                       AC_MSG_CHECKING([Boost unit test framework])
+                       saveLIBS="${LIBS}"
                        AC_SUBST([BOOST_TEST_LIB])
                        BOOST_TEST_LIB=""
-                       for l in boost_unit_test_framework-mt boost_unit_test_framework; do
-                           AC_CHECK_LIB([${l}],[main],[
-                                   BOOST_TEST_LIB="-l${l}"
-                                   break
-                                   ],[])
-                       done
-                       if test -z "${BOOST_TEST_LIB}"; then
-                           AC_MSG_ERROR([Boost unit test libs not found])
-                       fi
-                       saveLIBS="${LIBS}"
-                       LIBS="${LIBS} ${BOOST_TEST_LIB}"
-                       AC_MSG_CHECKING([Boost unit test framework])
-                       AC_LINK_IFELSE([AC_LANG_PROGRAM([[
+                       for l in boost_unit_test_framework${BOOST_TOOLSET}-mt boost_unit_test_framework${BOOST_TOOLSET}; do
+                           LIBS="${saveLIBS} -l${l}"
+                           AC_LINK_IFELSE([AC_LANG_SOURCE([[
 #define BOOST_TEST_DYN_LINK
+#define BOOST_AUTO_TEST_MAIN
+#define BOOST_TEST_MODULE configure
 #include <boost/test/auto_unit_test.hpp>
 BOOST_AUTO_TEST_CASE( t ) 
 {
     BOOST_CHECK(1);
 }
-]],[[ 
-]])],[AC_MSG_RESULT([yes])],[AC_MSG_RESULT([no])
-AC_MSG_ERROR([Boost unit test framework libraries required])])
+]])],[
+                             BOOST_TEST_LIB="-l${l}"
+                             break
+],[])
+                       done
+                       if test "${BOOST_TEST_LIB}"; then
+                           AC_MSG_RESULT([yes])
+                       else
+                           AC_MSG_RESULT([no])
+                       fi
                        LIBS="${saveLIBS}"
                        ;;
+                   regex)
+                       AC_MSG_CHECKING([Boost regex])
+                       AC_SUBST([BOOST_REGEX_LIB])
+                       saveLIBS="${LIBS}"
+                       BOOST_REGEX_LIB=""
+                       for l in boost_regex${BOOST_TOOLSET}-mt boost_regex${BOOST_TOOLSET}; do
+                           LIBS="${saveLIBS} -l${l}"
+                       AC_LINK_IFELSE([AC_LANG_PROGRAM([[
+#include <boost/version.hpp>
+#include <boost/regex.hpp>
+]],[[ 
+int x = BOOST_VERSION;
+]])],[
+                           BOOST_REGEX_LIB="-l${l}"
+                           break],[])
+                       done
+                       if test "${BOOST_REGEX_LIB}"; then
+                           AC_MSG_RESULT([yes])
+                       else
+                           AC_MSG_RESULT([no])
+                       fi
+                       ;;
                esac
            done
        fi
@@ -110,5 +155,9 @@ AC_MSG_ERROR([Boost unit test framework libraries required])])
        LIBS="$oldLIBS"
        AC_LANG_POP([C++])
     ])
 
+dnl Local Variables:
+dnl mode:shell-script
+dnl sh-indentation: 2
+dnl sh-basic-offset: 4
+dnl End: