diff options
author | Ludovic Courtès <ludo@gnu.org> | 2015-05-19 09:09:47 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2015-05-19 16:09:58 +0200 |
commit | 368d08f74744ed5d5ef5ef747e86bddbfaa47312 (patch) | |
tree | 66e45685184aa5e086d132541d9841e63d2abf2d | |
parent | 2bb04905f86f9c3f1d27557fbff8cbdc776560a3 (diff) | |
download | patches-368d08f74744ed5d5ef5ef747e86bddbfaa47312.tar patches-368d08f74744ed5d5ef5ef747e86bddbfaa47312.tar.gz |
build: Make sure $CXX supports C++11.
* m4/guix.m4 (GUIX_CHECK_CXX11, GUIX_ASSERT_CXX11): New macros.
* config-daemon.ac: Use 'AC_LANG([C++])' and 'GUIX_ASSERT_CXX11'.C
* doc/guix.texi (Requirements): Mention C++11 support.
-rw-r--r-- | config-daemon.ac | 3 | ||||
-rw-r--r-- | doc/guix.texi | 7 | ||||
-rw-r--r-- | m4/guix.m4 | 39 |
3 files changed, 46 insertions, 3 deletions
diff --git a/config-daemon.ac b/config-daemon.ac index fb80c754c9..a6cf29ca42 100644 --- a/config-daemon.ac +++ b/config-daemon.ac @@ -5,9 +5,12 @@ AC_MSG_RESULT([$guix_build_daemon]) dnl C++ environment. This macro must be used unconditionnaly. AC_PROG_CXX +AC_LANG([C++]) if test "x$guix_build_daemon" = "xyes"; then + GUIX_ASSERT_CXX11 + AC_PROG_RANLIB AC_CONFIG_HEADER([nix/config.h]) diff --git a/doc/guix.texi b/doc/guix.texi index 6964a4ec18..91c86dc30a 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -368,9 +368,10 @@ Unless @code{--disable-daemon} was passed to @command{configure}, the following packages are also needed: @itemize -@item @url{http://sqlite.org, SQLite 3} -@item @url{http://www.bzip.org, libbz2} -@item @url{http://gcc.gnu.org, GCC's g++} +@item @url{http://sqlite.org, SQLite 3}; +@item @url{http://www.bzip.org, libbz2}; +@item @url{http://gcc.gnu.org, GCC's g++}, with support for the +C++11 standard. @end itemize When a working installation of @url{http://nixos.org/nix/, the Nix package diff --git a/m4/guix.m4 b/m4/guix.m4 index 445ce857dd..fa5a4023ba 100644 --- a/m4/guix.m4 +++ b/m4/guix.m4 @@ -218,3 +218,42 @@ AC_DEFUN([GUIX_CHECK_FILE_NAME_LIMITS], [ AC_MSG_ERROR([store directory '$storedir' would lead to overly long hash-bang lines]) fi ]) + +dnl GUIX_CHECK_CXX11 +dnl +dnl Check whether the C++ compiler can compile a typical C++11 program. +AC_DEFUN([GUIX_CHECK_CXX11], [ + AC_REQUIRE([AC_PROG_CXX]) + AC_CACHE_CHECK([whether $CXX supports C++11], + [ac_cv_guix_cxx11_support], + [save_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="-std=c++11 $CXXFLAGS" + AC_COMPILE_IFELSE([ + AC_LANG_SOURCE([ + #include <functional> + + std::function<int(int)> + return_plus_lambda (int x) + { + auto result = [[&]](int y) { + return x + y; + }; + + return result; + } + ])], + [ac_cv_guix_cxx11_support=yes], + [ac_cv_guix_cxx11_support=no]) + CXXFLAGS="$save_CXXFLAGS" + ]) +]) + +dnl GUIX_ASSERT_CXX11 +dnl +dnl Error out if the C++ compiler cannot compile C++11 code. +AC_DEFUN([GUIX_ASSERT_CXX11], [ + GUIX_CHECK_CXX11 + if test "x$ac_cv_guix_cxx11_support" != "xyes"; then + AC_MSG_ERROR([C++ compiler '$CXX' does not support the C++11 standard]) + fi +]) |