You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by be...@apache.org on 2014/01/14 21:05:05 UTC
[14/15] git commit: Added --with-cxx11 to Mesos configuration.
Added --with-cxx11 to Mesos configuration.
When building with clang we assume --with-cxx11. For example:
CC=/path/to/clang CXX=/path/to/clang++ ../configure
But when building with gcc 4.8 you need to specify C++11:
CC=/path/to/gcc CXX=/path/to/g++ ../configure --with-cxx11
At this point in time compiling using C++11 with gcc 4.8 on OS X does
not work with Python so it is explicitely disabled.
Review: https://reviews.apache.org/r/16664
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/2dea250c
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/2dea250c
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/2dea250c
Branch: refs/heads/master
Commit: 2dea250c0bea22b547dd3a730ad495f688daef77
Parents: 3cab40a
Author: Benjamin Hindman <be...@gmail.com>
Authored: Mon Dec 30 11:29:32 2013 -0700
Committer: Benjamin Hindman <be...@gmail.com>
Committed: Tue Jan 14 12:01:11 2014 -0800
----------------------------------------------------------------------
configure.ac | 87 ++++++++++++++++-------
m4/ax_cxx_compile_stdcxx_11.m4 | 133 ++++++++++++++++++++++++++++++++++++
2 files changed, 196 insertions(+), 24 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mesos/blob/2dea250c/configure.ac
----------------------------------------------------------------------
diff --git a/configure.ac b/configure.ac
index 18d9730..9f96b7d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -140,6 +140,11 @@ AC_ARG_WITH([included-zookeeper],
appropriate may be necessary)]),
[], [with_included_zookeeper=yes])
+AC_ARG_WITH([cxx11],
+ AS_HELP_STRING([--with-cxx11],
+ [builds Mesos using C++11]),
+ [], [with_cxx11=no])
+
# TODO(benh): Support --without-included-protobuf,
# --without-included-glog, etc. Doing this for protobuf is
# considerably more tricky because we need to make sure that 'protoc'
@@ -170,31 +175,24 @@ case "${target_os}" in
echo ===========================================================
OS_NAME=darwin
;;
- solaris*)
- echo ===========================================================
- echo Setting up build environment for ${target_cpu} ${target_os}
- echo ===========================================================
- OS_NAME=solaris
- CC=gcc-4.3.2
- CXX=g++-4.3.2
- CFLAGS="$CFLAGS -pthreads -march=i586"
- CXXFLAGS="$CXXFLAGS -pthreads -march=i586"
- LIBS="$LIBS -lsocket -lnsl -lproject -lproc"
- ;;
*)
AC_MSG_ERROR("Mesos is currently unsupported on your platform.")
- esac
+esac
# Used for conditionally including source files.
AM_CONDITIONAL([OS_LINUX], [test "x$OS_NAME" = "xlinux"])
-# Checks for gcc toolchain (we rely on some atomic builtins for now).
+# Default to gcc toolchain (we rely on some atomic builtins for now,
+# that are also present with clang).
AC_PROG_CXX([g++])
AC_PROG_CC([gcc])
-# Check the version of gcc and add any flags as appropriate.
+
+# Check the version of gcc and add any flags as appropriate. Note that
+# '-dumpversion' works for clang as well but as of clang 3.3 it
+# reports version 4.2.1 (for gcc backwards compatibility).
GCC_VERSION="`${CC} -dumpversion`"
test $? = 0 || AC_MSG_ERROR([failed to determine version of gcc])
case "${GCC_VERSION}" in
@@ -220,6 +218,37 @@ case "${GCC_VERSION}" in
esac
+# Check if we should try and enable optimizations.
+if test "x$enable_optimize" = "xyes"; then
+ # For now, we only turn on optimizations for gcc.
+ if test "x$GCC" = "xyes"; then
+ CXXFLAGS="$CXXFLAGS -g2 -O2"
+ fi
+fi
+
+
+# Check if we're using clang.
+AC_MSG_CHECKING([if compiling with clang])
+
+AC_LANG_PUSH([C++])
+AC_COMPILE_IFELSE(
+[AC_LANG_PROGRAM([], [[
+#ifndef __clang__
+ not clang
+#endif
+]])],
+[CLANG=yes], [CLANG=no])
+AC_LANG_POP([C++])
+
+AC_MSG_RESULT([$CLANG])
+AC_SUBST([CLANG])
+
+# Force C++11 if we're using clang.
+if test "x$CLANG" = "xyes"; then
+ with_cxx11=yes
+fi
+
+
# Check for pthreads (uses m4/acx_pthread.m4).
ACX_PTHREAD([], [AC_MSG_ERROR([failed to find pthreads])])
@@ -555,15 +584,6 @@ fi
AM_CONDITIONAL([HAS_PYTHON], [test "x$has_python" = "xyes"])
-# Check if we should try and enable optimizations.
-if test "x$enable_optimize" = "xyes"; then
- # For now, we only turn on optimizations for gcc.
- if test "x$GCC" = "xyes"; then
- CXXFLAGS="$CXXFLAGS -g2 -O2"
- fi
-fi
-
-
# Check if we should/can build with libcurl.
if test "x$with_curl" = "xyes"; then
AC_CHECK_LIB([z], [gzread], [],
@@ -600,7 +620,6 @@ if test "x$with_curl" = "xyes"; then
and task resources cannot be downloaded over http.
-------------------------------------------------------------------
])])
-
fi
@@ -608,6 +627,24 @@ AM_CONDITIONAL([WITH_INCLUDED_ZOOKEEPER],
[test "x$with_included_zookeeper" = "xyes"])
+# Check if we should/can build with C++11.
+if test "x$with_cxx11" = "xyes"; then
+ AX_CXX_COMPILE_STDCXX_11([noext], [mandatory])
+
+ # If we're using clang, we need to pass -stdlib=libc++ too.
+ if test "x$CLANG" = "xyes"; then
+ CXXFLAGS="$CXXFLAGS -stdlib=libc++"
+ fi
+
+ # Force gtest to use it's own tuple implementation since 'tr1/tuple'
+ # might not exist (for example, if building with clang).
+ CXXFLAGS="-DGTEST_USE_OWN_TR1_TUPLE=1 $CXXFLAGS"
+
+ # Also pass the flags to 3rdparty libraries.
+ CONFIGURE_ARGS="$CONFIGURE_ARGS CXXFLAGS='$CXXFLAGS'"
+fi
+
+
# TODO(benh): Also check for md5 support so we can use the CRAM-MD5
# mechanism. We can likely do a AC_CHECK_LIB looking for a particular
# function only provided if md5 support is present.
@@ -618,6 +655,8 @@ We need libsasl2 for authentication!
-------------------------------------------------------------------
])])
+
AM_CONDITIONAL([GIT_REPO], [test -d ${srcdir}"/.git"])
+
AC_OUTPUT
http://git-wip-us.apache.org/repos/asf/mesos/blob/2dea250c/m4/ax_cxx_compile_stdcxx_11.m4
----------------------------------------------------------------------
diff --git a/m4/ax_cxx_compile_stdcxx_11.m4 b/m4/ax_cxx_compile_stdcxx_11.m4
new file mode 100644
index 0000000..07b298f
--- /dev/null
+++ b/m4/ax_cxx_compile_stdcxx_11.m4
@@ -0,0 +1,133 @@
+# ============================================================================
+# http://www.gnu.org/software/autoconf-archive/ax_cxx_compile_stdcxx_11.html
+# ============================================================================
+#
+# SYNOPSIS
+#
+# AX_CXX_COMPILE_STDCXX_11([ext|noext],[mandatory|optional])
+#
+# DESCRIPTION
+#
+# Check for baseline language coverage in the compiler for the C++11
+# standard; if necessary, add switches to CXXFLAGS to enable support.
+#
+# The first argument, if specified, indicates whether you insist on an
+# extended mode (e.g. -std=gnu++11) or a strict conformance mode (e.g.
+# -std=c++11). If neither is specified, you get whatever works, with
+# preference for an extended mode.
+#
+# The second argument, if specified 'mandatory' or if left unspecified,
+# indicates that baseline C++11 support is required and that the macro
+# should error out if no mode with that support is found. If specified
+# 'optional', then configuration proceeds regardless, after defining
+# HAVE_CXX11 if and only if a supporting mode is found.
+#
+# LICENSE
+#
+# Copyright (c) 2008 Benjamin Kosnik <bk...@redhat.com>
+# Copyright (c) 2012 Zack Weinberg <za...@panix.com>
+# Copyright (c) 2013 Roy Stogner <ro...@ices.utexas.edu>
+#
+# Copying and distribution of this file, with or without modification, are
+# permitted in any medium without royalty provided the copyright notice
+# and this notice are preserved. This file is offered as-is, without any
+# warranty.
+
+#serial 3
+
+m4_define([_AX_CXX_COMPILE_STDCXX_11_testbody], [
+ template <typename T>
+ struct check
+ {
+ static_assert(sizeof(int) <= sizeof(T), "not big enough");
+ };
+
+ typedef check<check<bool>> right_angle_brackets;
+
+ int a;
+ decltype(a) b;
+
+ typedef check<int> check_type;
+ check_type c;
+ check_type&& cr = static_cast<check_type&&>(c);
+
+ auto d = a;
+])
+
+AC_DEFUN([AX_CXX_COMPILE_STDCXX_11], [
+ m4_if([$1], [], [],
+ [$1], [ext], [],
+ [$1], [noext], [],
+ [m4_fatal([invalid argument `$1' to AX_CXX_COMPILE_STDCXX_11])])
+ 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])])
+ AC_LANG_PUSH([C++])
+ 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], [], [
+ 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], [], [
+ 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
+ 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
+])