build: Conditional check for C++11 and add ability to use system's boost instead of bundled version

1. C++11 is enabled by default and can be disabled with
--without-c++11 (or --with-c++11=no)

2. Use of system's boost libraries can be requested with
--with-system-boost.  By default, the bundled version of boost is used
when necessary.

Refs #1065 (http://redmine.named-data.net/issues/1065)

Change-Id: I823b67c62764c80476aedf41335dd69e7687f47b
diff --git a/m4/ax_cxx_compile_stdcxx_11.m4 b/m4/ax_cxx_compile_stdcxx_11.m4
index af37acd..40c94b6 100644
--- a/m4/ax_cxx_compile_stdcxx_11.m4
+++ b/m4/ax_cxx_compile_stdcxx_11.m4
@@ -55,79 +55,94 @@
 ])
 
 AC_DEFUN([AX_CXX_COMPILE_STDCXX_11], [dnl
-  m4_if([$1], [], [],
-        [$1], [ext], [],
-        [$1], [noext], [],
-        [m4_fatal([invalid argument `$1' to AX_CXX_COMPILE_STDCXX_11])])dnl
-  m4_if([$2], [], [ax_cxx_compile_cxx11_required=true],
-        [$2], [mandatory], [ax_cxx_compile_cxx11_required=true],
-        [$2], [optional], [ax_cxx_compile_cxx11_required=false],
-        [m4_fatal([invalid second argument `$2' to AX_CXX_COMPILE_STDCXX_11])])dnl
-  AC_LANG_PUSH([C++])dnl
-  ac_success=no
-  AC_CACHE_CHECK(whether $CXX supports C++11 features by default,
-  ax_cv_cxx_compile_cxx11,
-  [AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_11_testbody])],
-    [ax_cv_cxx_compile_cxx11=yes],
-    [ax_cv_cxx_compile_cxx11=no])])
-  if test x$ax_cv_cxx_compile_cxx11 = xyes; then
-    ac_success=yes
-  fi
-
-  m4_if([$1], [noext], [], [dnl
-  if test x$ac_success = xno; then
-    for switch in -std=gnu++11 -std=gnu++0x; do
-      cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx11_$switch])
-      AC_CACHE_CHECK(whether $CXX supports C++11 features with $switch,
-                     $cachevar,
-        [ac_save_CXXFLAGS="$CXXFLAGS"
-         CXXFLAGS="$CXXFLAGS $switch"
-         AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_11_testbody])],
-          [eval $cachevar=yes],
-          [eval $cachevar=no])
-         CXXFLAGS="$ac_save_CXXFLAGS"])
-      if eval test x\$$cachevar = xyes; then
-        CXXFLAGS="$CXXFLAGS $switch"
-        ac_success=yes
-        break
-      fi
-    done
-  fi])
-
-  m4_if([$1], [ext], [], [dnl
-  if test x$ac_success = xno; then
-    for switch in -std=c++11 -std=c++0x; do
-      cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx11_$switch])
-      AC_CACHE_CHECK(whether $CXX supports C++11 features with $switch,
-                     $cachevar,
-        [ac_save_CXXFLAGS="$CXXFLAGS"
-         CXXFLAGS="$CXXFLAGS $switch"
-         AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_11_testbody])],
-          [eval $cachevar=yes],
-          [eval $cachevar=no])
-         CXXFLAGS="$ac_save_CXXFLAGS"])
-      if eval test x\$$cachevar = xyes; then
-        CXXFLAGS="$CXXFLAGS $switch"
-        ac_success=yes
-        break
-      fi
-    done
-  fi])
-  AC_LANG_POP([C++])
-  if test x$ax_cxx_compile_cxx11_required = xtrue; then
-    if test x$ac_success = xno; then
-      AC_MSG_ERROR([*** A compiler with support for C++11 language features is required.])
+  AC_ARG_WITH([c++11],
+    AS_HELP_STRING(
+        [--with-c++11=@<:@ARG@:>@],
+        [use C++11 when available @<:@default=yes@:>@]
+    ),
+    [
+    if test "$withval" = "no"; then
+        WANT_CXX11="no"
     fi
-  else
+    ],
+    [WANT_CXX11="yes"]
+  )
+
+  if test "x$WANT_CXX11" = "xyes"; then
+    m4_if([$1], [], [],
+          [$1], [ext], [],
+          [$1], [noext], [],
+          [m4_fatal([invalid argument `$1' to AX_CXX_COMPILE_STDCXX_11])])dnl
+    m4_if([$2], [], [ax_cxx_compile_cxx11_required=true],
+          [$2], [mandatory], [ax_cxx_compile_cxx11_required=true],
+          [$2], [optional], [ax_cxx_compile_cxx11_required=false],
+          [m4_fatal([invalid second argument `$2' to AX_CXX_COMPILE_STDCXX_11])])dnl
+    AC_LANG_PUSH([C++])dnl
+    ac_success=no
+    AC_CACHE_CHECK(whether $CXX supports C++11 features by default,
+    ax_cv_cxx_compile_cxx11,
+    [AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_11_testbody])],
+      [ax_cv_cxx_compile_cxx11=yes],
+      [ax_cv_cxx_compile_cxx11=no])])
+    if test x$ax_cv_cxx_compile_cxx11 = xyes; then
+      ac_success=yes
+    fi
+    
+    m4_if([$1], [noext], [], [dnl
     if test x$ac_success = xno; then
-      HAVE_CXX11=0
-      AC_MSG_NOTICE([No compiler with C++11 support was found])
+      for switch in -std=gnu++11 -std=gnu++0x; do
+        cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx11_$switch])
+        AC_CACHE_CHECK(whether $CXX supports C++11 features with $switch,
+                       $cachevar,
+          [ac_save_CXXFLAGS="$CXXFLAGS"
+           CXXFLAGS="$CXXFLAGS $switch"
+           AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_11_testbody])],
+            [eval $cachevar=yes],
+            [eval $cachevar=no])
+           CXXFLAGS="$ac_save_CXXFLAGS"])
+        if eval test x\$$cachevar = xyes; then
+          CXXFLAGS="$CXXFLAGS $switch"
+          ac_success=yes
+          break
+        fi
+      done
+    fi])
+    
+    m4_if([$1], [ext], [], [dnl
+    if test x$ac_success = xno; then
+      for switch in -std=c++11 -std=c++0x; do
+        cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx11_$switch])
+        AC_CACHE_CHECK(whether $CXX supports C++11 features with $switch,
+                       $cachevar,
+          [ac_save_CXXFLAGS="$CXXFLAGS"
+           CXXFLAGS="$CXXFLAGS $switch"
+           AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_11_testbody])],
+            [eval $cachevar=yes],
+            [eval $cachevar=no])
+           CXXFLAGS="$ac_save_CXXFLAGS"])
+        if eval test x\$$cachevar = xyes; then
+          CXXFLAGS="$CXXFLAGS $switch"
+          ac_success=yes
+          break
+        fi
+      done
+    fi])
+    AC_LANG_POP([C++])
+    if test x$ax_cxx_compile_cxx11_required = xtrue; then
+      if test x$ac_success = xno; then
+        AC_MSG_ERROR([*** A compiler with support for C++11 language features is required.])
+      fi
     else
-      HAVE_CXX11=1
-      AC_DEFINE(HAVE_CXX11,1,
-                [define if the compiler supports basic C++11 syntax])
+      if test x$ac_success = xno; then
+        HAVE_CXX11=0
+        AC_MSG_NOTICE([No compiler with C++11 support was found])
+      else
+        HAVE_CXX11=1
+        AC_DEFINE(HAVE_CXX11,1,
+                  [define if the compiler supports basic C++11 syntax])
+      fi
+    
+      AC_SUBST(HAVE_CXX11)
     fi
-
-    AC_SUBST(HAVE_CXX11)
   fi
 ])