aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--configure.ac4
-rw-r--r--m4/cxx11.m438
-rw-r--r--odb/details/config-vc.h6
-rw-r--r--odb/details/config.h.in2
-rw-r--r--odb/details/config.hxx3
-rw-r--r--odb/makefile11
6 files changed, 62 insertions, 2 deletions
diff --git a/configure.ac b/configure.ac
index 5d5d213..50f2122 100644
--- a/configure.ac
+++ b/configure.ac
@@ -37,6 +37,10 @@ AS_IF([test x$threads = xposix], AC_DEFINE([ODB_THREADS_POSIX], [1], [Have POSIX
AS_IF([test x$threads_thread_keyword = xyes], AC_DEFINE([ODB_THREADS_TLS_KEYWORD], [1], [Have __thread keyword.]))
+# Check for C++11.
+#
+CXX11([ODB_CXX11], [Compiling in the C++11 mode.])
+
# Define LIBODB_STATIC_LIB if we are build static library on certain platforms.
#
STATIC_LIB([LIBODB_STATIC_LIB], [Static library interface.])
diff --git a/m4/cxx11.m4 b/m4/cxx11.m4
new file mode 100644
index 0000000..774f20d
--- /dev/null
+++ b/m4/cxx11.m4
@@ -0,0 +1,38 @@
+dnl file : m4/cxx11.m4
+dnl copyright : Copyright (c) 2009-2012 Code Synthesis Tools CC
+dnl license : GNU GPL v2; see accompanying LICENSE file
+dnl
+dnl CXX11(MACRO, DESCRIPTION)
+dnl
+dnl Check if we are compiling in the C++11 mode. If we are, define MACRO as
+dnl both a macro and conditional as well as set the cxx11 variable to 'yes'.
+dnl
+AC_DEFUN([CXX11],
+[
+cxx11=no
+
+AC_MSG_CHECKING([whether we are in C++11 mode])
+
+CXX_LIBTOOL_LINK_IFELSE(
+AC_LANG_SOURCE([[
+#include <memory>
+
+int
+main ()
+{
+ std::shared_ptr<int> p (new int (10));
+ *p = 11;
+}
+]]),
+[cxx11=yes])
+
+if test x"$cxx11" = xyes; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE([$1], [1], [$2])
+else
+ AC_MSG_RESULT([no])
+fi
+
+AM_CONDITIONAL([$1], [test x$cxx11 = xyes])
+
+])dnl
diff --git a/odb/details/config-vc.h b/odb/details/config-vc.h
index 4ab9a7e..6b1da9e 100644
--- a/odb/details/config-vc.h
+++ b/odb/details/config-vc.h
@@ -11,4 +11,10 @@
#define ODB_THREADS_WIN32
#define ODB_THREADS_TLS_DECLSPEC
+/* VC++10 has C++11 always enabled.
+ */
+#if _MSC_VER >= 1600
+# define ODB_CXX11
+#endif
+
#endif /* ODB_DETAILS_CONFIG_VC_H */
diff --git a/odb/details/config.h.in b/odb/details/config.h.in
index 2422d98..5e71765 100644
--- a/odb/details/config.h.in
+++ b/odb/details/config.h.in
@@ -14,6 +14,8 @@
#undef ODB_THREADS_TLS_KEYWORD
#undef ODB_THREADS_TLS_DECLSPEC
+#undef ODB_CXX11
+
#undef LIBODB_STATIC_LIB
#endif /* ODB_DETAILS_CONFIG_H */
diff --git a/odb/details/config.hxx b/odb/details/config.hxx
index 1d7c2d9..ad0ec27 100644
--- a/odb/details/config.hxx
+++ b/odb/details/config.hxx
@@ -12,6 +12,9 @@
#elif defined(ODB_COMPILER)
# define ODB_THREADS_NONE
# define LIBODB_STATIC_LIB
+# if defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L
+# define ODB_CXX11
+# endif
#else
# include <odb/details/config.h>
#endif
diff --git a/odb/makefile b/odb/makefile
index 7633e8f..26820d2 100644
--- a/odb/makefile
+++ b/odb/makefile
@@ -15,7 +15,6 @@ statement.cxx \
tracer.cxx \
transaction.cxx
-
# Implementation details.
#
cxx += \
@@ -69,7 +68,6 @@ default := $(out_base)/
dist := $(out_base)/.dist
clean := $(out_base)/.clean
-
# Build.
#
$(odb.l): $(cxx_obj)
@@ -81,6 +79,10 @@ endif
$(cxx_obj) $(cxx_od): $(odb.l.cpp-options) $(out_base)/details/config.h
$(odb.l.cpp-options): value := -I$(out_root) -I$(src_root)
+$(call include,$(bld_root)/cxx/standard.make) # cxx_standard
+
+ifdef libodb_threads
+ifdef cxx_standard
$(out_base)/details/config.h: | $(out_base)/details/.
@echo '/* file : odb/details/config.h' >$@
@echo ' * note : automatically generated' >>$@
@@ -98,8 +100,13 @@ endif
ifeq ($(libodb_threads),none)
@echo '#define ODB_THREADS_NONE 1' >>$@
endif
+ifeq ($(cxx_standard),c++11)
+ @echo '#define ODB_CXX11 1' >>$@
+endif
@echo '' >>$@
@echo '#endif /* ODB_DETAILS_CONFIG_H */' >>$@
+endif
+endif
$(call include-dep,$(cxx_od),$(cxx_obj),$(out_base)/details/config.h)