Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

c++11 #18

Merged
merged 2 commits into from
Jul 23, 2015
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@
# 2012-09-16 (bukovsky)
# First version

ACLOCAL_AMFLAGS = -I m4

SUBDIRS = src doc \
include/mcache/pool \
include/mcache/hash \
Expand Down
35 changes: 30 additions & 5 deletions configure.in → configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,11 @@ AM_SILENT_RULES([yes])
# install autotools scripts to build-aux dir
AC_CONFIG_AUX_DIR([build-aux])

# macros from http://www.gnu.org/software/autoconf-archive/The-Macros.html
AC_CONFIG_MACRO_DIR([m4])

# initialize automake(use AC_INIT's arguments)
AM_INIT_AUTOMAKE(-Wall foreign color-tests)
AM_INIT_AUTOMAKE(-Wall -Wno-portability foreign color-tests)

# tell autoconf where to find sources
AC_CONFIG_SRCDIR([src/mcache.cc])
Expand Down Expand Up @@ -106,22 +109,44 @@ AC_ARG_ENABLE([debug], AS_HELP_STRING([--enable-debug], [Enable the debuging log
case "${enableval}" in
no)
AC_MSG_NOTICE([disabling debug log.])
CPPFLAGS="${CPPFLAGS} -UDEBUG"
CPPFLAGS="${CPPFLAGS} -UDEBUG -DNDEBUG=1"
;;
yes)
AC_MSG_NOTICE([enabling debug log.])
CPPFLAGS="${CPPFLAGS} -DDEBUG=1"
CPPFLAGS="${CPPFLAGS} -DDEBUG=1 -UNDEBUG"
;;
*)
AC_MSG_ERROR([Say yes or no to --enable-debug.])
;;
esac
],
[AS_IF([test x$enable_optimization == xyes],
[CPPFLAGS="${CPPFLAGS} -UDEBUG"],
[CPPFLAGS="${CPPFLAGS} -DDEBUG=1"])
[CPPFLAGS="${CPPFLAGS} -UDEBUG -DNDEBUG=1"],
[CPPFLAGS="${CPPFLAGS} -DDEBUG=1 -UNDEBUG"])
])

AC_ARG_ENABLE(cxx11, AS_HELP_STRING([--enable-cxx11], [compile with c++11 standard]), [
case "${enableval}" in
no)
AC_MSG_NOTICE([disabling c++11.])
CXX11="optional"
;;
yes)
AC_MSG_NOTICE([enabling c++11.])
CXX11="mandatory"
;;
*)
AC_MSG_ERROR([Say yes or no to --enable-cxx11.])
;;
esac
], [
CXX11="mandatory"
])

AS_IF([test x$CXX11 == xmandatory], [
AX_CXX_COMPILE_STDCXX_11([noext], [mandatory])], [
AX_CXX_COMPILE_STDCXX_11([noext], [optional])])

# check pkgconfig
PKG_PROG_PKG_CONFIG

Expand Down
133 changes: 133 additions & 0 deletions m4/ax_cxx_compile_stdcxx_11.m4
Original file line number Diff line number Diff line change
@@ -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 <[email protected]>
# Copyright (c) 2012 Zack Weinberg <[email protected]>
# Copyright (c) 2013 Roy Stogner <[email protected]>
#
# 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], [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.])
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
])
2 changes: 2 additions & 0 deletions src/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ gitver = $(shell git describe --all --dirty --long --abbrev=40)
AM_CPPFLAGS = -DGIT_REVISION="\"Configure=@GIT_REVISION@,Make=$(gitver)\"" \
-DGIT_REVISION_N="\"$(gitver)\"" \
-I@top_builddir@ -I@top_srcdir@/src -I$(top_srcdir)/include \
-DBOOST_ASIO_DISABLE_MOVE -DBOOST_ASIO_DISABLE_STD_ARRAY \
-DBOOST_ASIO_DISABLE_STD_ATOMIC -DBOOST_ASIO_DISABLE_STD_CHRONO \
@LIBTBB_CFLAGS@


Expand Down