[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
build: rename and simplify the -std checks for C++
From: |
Akim Demaille |
Subject: |
build: rename and simplify the -std checks for C++ |
Date: |
Sun, 23 Sep 2018 10:15:23 +0200 |
commit 41d10cb1f88332a22d9e3497bbdec3e5015daf19
Author: Akim Demaille <address@hidden>
Date: Sun Sep 23 09:42:50 2018 +0200
build: rename and simplify the -std checks for C++
Too much code duplication.
* m4/bison-cxx-std.m4: s/BISON_CXX_COMPILE_STDCXX/BISON_CXXSTD/.
(BISON_CXXSTD): New.
* configure.ac: Use it.
diff --git a/configure.ac b/configure.ac
index 0540a50a..28639408 100644
--- a/configure.ac
+++ b/configure.ac
@@ -73,12 +73,12 @@ AC_CACHE_CHECK([whether pragma GCC diagnostic push works],
AC_LANG_PUSH([C++])
gl_WARN_ADD([-fno-exceptions], [NO_EXCEPTIONS_CXXFLAGS])
-BISON_CXX_COMPILE_STDCXX_98
-BISON_CXX_COMPILE_STDCXX_03
-BISON_CXX_COMPILE_STDCXX_11
-BISON_CXX_COMPILE_STDCXX_14
-BISON_CXX_COMPILE_STDCXX_17
-BISON_CXX_COMPILE_STDCXX_2A
+BISON_CXXSTD([98])
+BISON_CXXSTD([03])
+BISON_CXXSTD([11])
+BISON_CXXSTD([14])
+BISON_CXXSTD([17])
+BISON_CXXSTD([2a])
AM_CONDITIONAL([ENABLE_CXX11], [test x"$CXX11_CXXFLAGS" != x])
AC_LANG_POP([C++])
diff --git a/m4/bison-cxx-std.m4 b/m4/bison-cxx-std.m4
index a0722310..1756c7d9 100644
--- a/m4/bison-cxx-std.m4
+++ b/m4/bison-cxx-std.m4
@@ -6,16 +6,16 @@
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
-m4_define([_BISON_CXX_COMPILE_STDCXX_98_snippet],
+m4_define([_BISON_CXXSTD_98_snippet],
[#include <vector>
typedef std::vector<int> ints;
])
-m4_define([_BISON_CXX_COMPILE_STDCXX_03_snippet],
+m4_define([_BISON_CXXSTD_03_snippet],
[])
-m4_define([_BISON_CXX_COMPILE_STDCXX_11_snippet],
+m4_define([_BISON_CXXSTD_11_snippet],
[#include <algorithm>
#include <memory>
#include <set>
@@ -65,7 +65,7 @@ m4_define([_BISON_CXX_COMPILE_STDCXX_11_snippet],
}
])
-m4_define([_BISON_CXX_COMPILE_STDCXX_14_snippet],
+m4_define([_BISON_CXXSTD_14_snippet],
[ // C++14
void mismatch()
{
@@ -77,7 +77,7 @@ m4_define([_BISON_CXX_COMPILE_STDCXX_14_snippet],
}
])
-m4_define([_BISON_CXX_COMPILE_STDCXX_17_snippet],
+m4_define([_BISON_CXXSTD_17_snippet],
[ // C++17
namespace ns1::ns2::ns3 {}
@@ -86,137 +86,76 @@ m4_define([_BISON_CXX_COMPILE_STDCXX_17_snippet],
auto out = std::ostringstream{};
])
-m4_define([_BISON_CXX_COMPILE_STDCXX_2A_snippet],
+m4_define([_BISON_CXXSTD_2A_snippet],
[ // C++2A
])
-m4_define([_BISON_CXX_COMPILE_STDCXX_98_testbody],
+m4_define([_BISON_CXXSTD_testbody(98)],
[AC_LANG_PROGRAM([
-_BISON_CXX_COMPILE_STDCXX_98_snippet
+_BISON_CXXSTD_98_snippet
])])
-m4_define([_BISON_CXX_COMPILE_STDCXX_03_testbody],
+m4_define([_BISON_CXXSTD_testbody(03)],
[AC_LANG_PROGRAM([
-_BISON_CXX_COMPILE_STDCXX_98_snippet
-_BISON_CXX_COMPILE_STDCXX_03_snippet
+_BISON_CXXSTD_98_snippet
+_BISON_CXXSTD_03_snippet
])])
-m4_define([_BISON_CXX_COMPILE_STDCXX_11_testbody],
+m4_define([_BISON_CXXSTD_testbody(11)],
[AC_LANG_PROGRAM([
-_BISON_CXX_COMPILE_STDCXX_98_snippet
-_BISON_CXX_COMPILE_STDCXX_03_snippet
-_BISON_CXX_COMPILE_STDCXX_11_snippet
+_BISON_CXXSTD_98_snippet
+_BISON_CXXSTD_03_snippet
+_BISON_CXXSTD_11_snippet
])])
-m4_define([_BISON_CXX_COMPILE_STDCXX_14_testbody],
+m4_define([_BISON_CXXSTD_testbody(14)],
[AC_LANG_PROGRAM([
-_BISON_CXX_COMPILE_STDCXX_98_snippet
-_BISON_CXX_COMPILE_STDCXX_03_snippet
-_BISON_CXX_COMPILE_STDCXX_11_snippet
-_BISON_CXX_COMPILE_STDCXX_14_snippet
+_BISON_CXXSTD_98_snippet
+_BISON_CXXSTD_03_snippet
+_BISON_CXXSTD_11_snippet
+_BISON_CXXSTD_14_snippet
])])
-m4_define([_BISON_CXX_COMPILE_STDCXX_17_testbody],
+m4_define([_BISON_CXXSTD_testbody(17)],
[AC_LANG_PROGRAM([
-_BISON_CXX_COMPILE_STDCXX_98_snippet
-_BISON_CXX_COMPILE_STDCXX_03_snippet
-_BISON_CXX_COMPILE_STDCXX_11_snippet
-_BISON_CXX_COMPILE_STDCXX_14_snippet
-_BISON_CXX_COMPILE_STDCXX_17_snippet
+_BISON_CXXSTD_98_snippet
+_BISON_CXXSTD_03_snippet
+_BISON_CXXSTD_11_snippet
+_BISON_CXXSTD_14_snippet
+_BISON_CXXSTD_17_snippet
])])
-m4_define([_BISON_CXX_COMPILE_STDCXX_2A_testbody],
+m4_define([_BISON_CXXSTD_testbody(2a)],
[AC_LANG_PROGRAM([
-_BISON_CXX_COMPILE_STDCXX_98_snippet
-_BISON_CXX_COMPILE_STDCXX_03_snippet
-_BISON_CXX_COMPILE_STDCXX_11_snippet
-_BISON_CXX_COMPILE_STDCXX_14_snippet
-_BISON_CXX_COMPILE_STDCXX_17_snippet
-_BISON_CXX_COMPILE_STDCXX_2A_snippet
+_BISON_CXXSTD_98_snippet
+_BISON_CXXSTD_03_snippet
+_BISON_CXXSTD_11_snippet
+_BISON_CXXSTD_14_snippet
+_BISON_CXXSTD_17_snippet
+_BISON_CXXSTD_2A_snippet
])])
-
-AC_DEFUN([BISON_CXX_COMPILE_STDCXX_98],
-[AC_REQUIRE([AC_PROG_CXX])
-AC_LANG_PUSH([C++])
-for f in '-std=c++98' '-std=c++98 -stdlib=libc++'
-do
- BISON_CHECK_COMPILER_FLAG([$f],
- [AC_SUBST([CXX98_CXXFLAGS], [$f]) break],
- [], [],
- [_BISON_CXX_COMPILE_STDCXX_98_testbody])
-done
-AC_LANG_POP([C++])
-])
-
-
-AC_DEFUN([BISON_CXX_COMPILE_STDCXX_03],
-[AC_REQUIRE([AC_PROG_CXX])
-AC_LANG_PUSH([C++])
-for f in '-std=c++03' '-std=c++03 -stdlib=libc++'
-do
- BISON_CHECK_COMPILER_FLAG([$f],
- [AC_SUBST([CXX03_CXXFLAGS], [$f]) break],
- [], [],
- [_BISON_CXX_COMPILE_STDCXX_03_testbody])
-done
-AC_LANG_POP([C++])
-])
-
-
-AC_DEFUN([BISON_CXX_COMPILE_STDCXX_11],
-[AC_REQUIRE([AC_PROG_CXX])
-AC_LANG_PUSH([C++])
-for f in '-std=c++11' '-std=c++11 -stdlib=libc++'
-do
- BISON_CHECK_COMPILER_FLAG([$f],
- [AC_SUBST([CXX11_CXXFLAGS], [$f]) break],
- [], [],
- [_BISON_CXX_COMPILE_STDCXX_11_testbody])
-done
-AC_LANG_POP([C++])
-])
-
-
-AC_DEFUN([BISON_CXX_COMPILE_STDCXX_14],
-[AC_REQUIRE([AC_PROG_CXX])
-AC_LANG_PUSH([C++])
-for f in '-std=c++14' '-std=c++14 -stdlib=libc++'
-do
- BISON_CHECK_COMPILER_FLAG([$f],
- [AC_SUBST([CXX14_CXXFLAGS], [$f]) break],
- [], [],
- [_BISON_CXX_COMPILE_STDCXX_14_testbody])
-done
-AC_LANG_POP([C++])
-])
-
-
-AC_DEFUN([BISON_CXX_COMPILE_STDCXX_17],
-[AC_REQUIRE([AC_PROG_CXX])
-AC_LANG_PUSH([C++])
-for f in '-std=c++17' '-std=c++17 -stdlib=libc++'
-do
- BISON_CHECK_COMPILER_FLAG([$f],
- [AC_SUBST([CXX17_CXXFLAGS], [$f]) break],
- [], [],
- [_BISON_CXX_COMPILE_STDCXX_17_testbody])
-done
-AC_LANG_POP([C++])
-])
+m4_define([_BISON_CXXSTD_testbody],
+[m4_ifdef([$0($1)],
+ [m4_indir([$0($1)], m4_shift2($@))],
+ [m4_fatal([$0: unknown C++ standard: $1])])])
-AC_DEFUN([BISON_CXX_COMPILE_STDCXX_2A],
+# BISON_CXXSTD(STD)
+# -----------------
+# Check whether the C++ compiler support STD (11, 98, 2a, etc.).
+# If it does, AC_SUBST 'CXX<STD>_CXXFLAGS' to the corresponding flags.
+AC_DEFUN([BISON_CXXSTD],
[AC_REQUIRE([AC_PROG_CXX])
AC_LANG_PUSH([C++])
-for f in '-std=c++2a' '-std=c++2a -stdlib=libc++'
+for f in '-std=c++$1' '-std=c++$1 -stdlib=libc++'
do
BISON_CHECK_COMPILER_FLAG([$f],
- [AC_SUBST([CXX2A_CXXFLAGS], [$f]) break],
+ [AC_SUBST(m4_toupper([CXX$1_CXXFLAGS]), [$f]) break],
[], [],
- [_BISON_CXX_COMPILE_STDCXX_2A_testbody])
+ [_BISON_CXXSTD_testbody($1)])
done
AC_LANG_POP([C++])
])
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- build: rename and simplify the -std checks for C++,
Akim Demaille <=