Skip to content

Commit

Permalink
Bumped C++ standard c++17 => c++20.
Browse files Browse the repository at this point in the history
Note that the autoconf archive doesn't have a macro for detecting C++20
(yet), so we have to extend the one we have a bit.  It doesn't really tests
C++20 features yet, but at least we can detect the commandline flag.  We can
improve this later...

Change-Id: I588564773700f6a3e250d4187c439cfa148a4dc8
  • Loading branch information
spt29 committed Jun 10, 2020
1 parent a63c8ef commit c6d3818
Show file tree
Hide file tree
Showing 7 changed files with 47 additions and 17 deletions.
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -520,7 +520,7 @@ endif
# Not really perfect rules, but better than nothing
analyze: config.h
$(MAKE) -C livestatus clean
cd livestatus && $(SCAN_BUILD) -o ../clang-analyzer $(MAKE) CXXFLAGS="-std=c++17"
cd livestatus && $(SCAN_BUILD) -o ../clang-analyzer $(MAKE) CXXFLAGS="-std=c++2a"

# GCC-like output on stderr intended for human consumption.
cppcheck: config.h
Expand Down
4 changes: 2 additions & 2 deletions agents/wnx/ct.cmd
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
rem clang-tidy.exe "C:\z\m\check_mk\agents\wnx\src\engine\cap.cpp" -checks=-*,abseil*,bugprone*,clang-analyzer*,modernize*,performance*,readability*,security*,-readability-braces-around-statements;-modernize-use-trailing-return-type -header-filter="./*.h" -quiet -- -isystem"C:\z\m\check_mk\agents\wnx\src\engine" -isystem"C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.24.28314\include" -isystem"C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.24.28314\atlmfc\include" -isystem"C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Auxiliary\VS\include" -isystem"C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt" -isystem"C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um" -isystem"C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\shared" -isystem"C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\winrt" -isystem"C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\cppwinrt" -I"C:\z\m\check_mk\agents\wnx\src\engine" -I"C:\z\m\check_mk\agents\wnx\include" -I"C:\z\m\check_mk\agents\wnx\src" -I"C:\z\m\check_mk\agents\wnx\src\engine" -I"C:\z\m\check_mk\agents\wnx\extlibs\asio\include" -I"C:\z\m\check_mk\agents\wnx\extlibs\yaml-cpp\include" -I"C:\z\m\check_mk\agents\wnx\extlibs\fmt\include" -I"C:\z\m\check_mk\agents\wnx\extlibs\simpleini" -std=c++17 -Wall -fms-compatibility-version=19.10 -Wmicrosoft -Wno-invalid-token-paste -Wno-unknown-pragmas -Wno-unused-value "-DUNICODE" "-D_UNICODE" "-D_MT"
clang-tidy.exe %1 -checks="-*,abseil*,bugprone*,clang-analyzer*,modernize*,performance*,readability*,security*,-readability-braces-around-statements,-modernize-use-trailing-return-type" -header-filter="./*.h" -quiet -- -isystem"C:\z\m\check_mk\agents\wnx\src\engine" -isystem"C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.24.28314\include" -isystem"C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.24.28314\atlmfc\include" -isystem"C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Auxiliary\VS\include" -isystem"C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt" -isystem"C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um" -isystem"C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\shared" -isystem"C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\winrt" -isystem"C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\cppwinrt" -I"C:\z\m\check_mk\agents\wnx\src\engine" -I"C:\z\m\check_mk\agents\wnx\include" -I"C:\z\m\check_mk\agents\wnx\src" -I"C:\z\m\check_mk\agents\wnx\src\engine" -I"C:\z\m\check_mk\agents\wnx\extlibs\asio\include" -I"C:\z\m\check_mk\agents\wnx\extlibs\yaml-cpp\include" -I"C:\z\m\check_mk\agents\wnx\extlibs\fmt\include" -I"C:\z\m\check_mk\agents\wnx\extlibs\simpleini" -std=c++17 -Wall -fms-compatibility-version=19.10 -Wmicrosoft -Wno-invalid-token-paste -Wno-unknown-pragmas -Wno-unused-value "-DUNICODE" "-D_UNICODE" "-D_MT"
rem clang-tidy.exe "C:\z\m\check_mk\agents\wnx\src\engine\cap.cpp" -checks=-*,abseil*,bugprone*,clang-analyzer*,modernize*,performance*,readability*,security*,-readability-braces-around-statements;-modernize-use-trailing-return-type -header-filter="./*.h" -quiet -- -isystem"C:\z\m\check_mk\agents\wnx\src\engine" -isystem"C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.24.28314\include" -isystem"C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.24.28314\atlmfc\include" -isystem"C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Auxiliary\VS\include" -isystem"C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt" -isystem"C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um" -isystem"C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\shared" -isystem"C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\winrt" -isystem"C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\cppwinrt" -I"C:\z\m\check_mk\agents\wnx\src\engine" -I"C:\z\m\check_mk\agents\wnx\include" -I"C:\z\m\check_mk\agents\wnx\src" -I"C:\z\m\check_mk\agents\wnx\src\engine" -I"C:\z\m\check_mk\agents\wnx\extlibs\asio\include" -I"C:\z\m\check_mk\agents\wnx\extlibs\yaml-cpp\include" -I"C:\z\m\check_mk\agents\wnx\extlibs\fmt\include" -I"C:\z\m\check_mk\agents\wnx\extlibs\simpleini" -std=c++2a -Wall -fms-compatibility-version=19.10 -Wmicrosoft -Wno-invalid-token-paste -Wno-unknown-pragmas -Wno-unused-value "-DUNICODE" "-D_UNICODE" "-D_MT"
clang-tidy.exe %1 -checks="-*,abseil*,bugprone*,clang-analyzer*,modernize*,performance*,readability*,security*,-readability-braces-around-statements,-modernize-use-trailing-return-type" -header-filter="./*.h" -quiet -- -isystem"C:\z\m\check_mk\agents\wnx\src\engine" -isystem"C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.24.28314\include" -isystem"C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.24.28314\atlmfc\include" -isystem"C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Auxiliary\VS\include" -isystem"C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt" -isystem"C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um" -isystem"C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\shared" -isystem"C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\winrt" -isystem"C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\cppwinrt" -I"C:\z\m\check_mk\agents\wnx\src\engine" -I"C:\z\m\check_mk\agents\wnx\include" -I"C:\z\m\check_mk\agents\wnx\src" -I"C:\z\m\check_mk\agents\wnx\src\engine" -I"C:\z\m\check_mk\agents\wnx\extlibs\asio\include" -I"C:\z\m\check_mk\agents\wnx\extlibs\yaml-cpp\include" -I"C:\z\m\check_mk\agents\wnx\extlibs\fmt\include" -I"C:\z\m\check_mk\agents\wnx\extlibs\simpleini" -std=c++2a -Wall -fms-compatibility-version=19.10 -Wmicrosoft -Wno-invalid-token-paste -Wno-unknown-pragmas -Wno-unused-value "-DUNICODE" "-D_UNICODE" "-D_MT"
2 changes: 1 addition & 1 deletion configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ if test "x$ac_cv_prog_cc_c99" = xno; then
fi
AC_PROG_CXX([g++-10 clang++-10 g++-9 clang++-9 clang++-8 g++-8 clang++-7 g++-7 clang++-6.0 clang++-5.0 g++ clang++])
AC_DEFINE_UNQUOTED([BUILD_CXX], ["`$CXX --version | head -n1`"], [C++ compiler])
AX_CXX_COMPILE_STDCXX([17], [noext], [mandatory])
AX_CXX_COMPILE_STDCXX([20], [noext], [mandatory])
AC_PROG_RANLIB
# automake 1.12 seems to require this, but automake 1.11 doesn't recognize it. :-P
m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
Expand Down
2 changes: 1 addition & 1 deletion livestatus/src/.clang_complete
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@
-isystem includes/asio
-I../../omd/packages/re2/destdir/include
-DHAVE_CONFIG_H
-std=c++17
-std=c++20
-Wall
-Wextra
2 changes: 1 addition & 1 deletion livestatus/src/test/.clang_complete
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
-std=c++17
-std=c++20
-DHAVE_CONFIG_H
-I.
-I..
Expand Down
34 changes: 32 additions & 2 deletions m4/ax_cxx_compile_stdcxx.m4
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ AC_DEFUN([AX_CXX_COMPILE_STDCXX], [dnl
m4_if([$1], [11], [ax_cxx_compile_alternatives="11 0x"],
[$1], [14], [ax_cxx_compile_alternatives="14 1y"],
[$1], [17], [ax_cxx_compile_alternatives="17 1z"],
[$1], [20], [ax_cxx_compile_alternatives="20 2a"],
[m4_fatal([invalid first argument `$1' to AX_CXX_COMPILE_STDCXX])])dnl
m4_if([$2], [], [],
[$2], [ext], [],
Expand Down Expand Up @@ -163,6 +164,13 @@ m4_define([_AX_CXX_COMPILE_STDCXX_testbody_17],
_AX_CXX_COMPILE_STDCXX_testbody_new_in_17
)

m4_define([_AX_CXX_COMPILE_STDCXX_testbody_20],
_AX_CXX_COMPILE_STDCXX_testbody_new_in_11
_AX_CXX_COMPILE_STDCXX_testbody_new_in_14
_AX_CXX_COMPILE_STDCXX_testbody_new_in_17
_AX_CXX_COMPILE_STDCXX_testbody_new_in_20
)

dnl Tests for new features in C++11

m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_11], [[
Expand Down Expand Up @@ -587,7 +595,7 @@ m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_17], [[
#error "This is not a C++ compiler"
#elif __cplusplus <= 201402L
#elif __cplusplus <= 201703L
#error "This is not a C++17 compiler"
Expand Down Expand Up @@ -977,6 +985,28 @@ namespace cxx17
} // namespace cxx17
#endif // __cplusplus <= 201402L
#endif // __cplusplus <= 201703L
]])

dnl Tests for new features in C++20

m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_20], [[
// If the compiler admits that it is not ready for C++20, why torture it?
// Hopefully, this will speed up the test.
#ifndef __cplusplus
#error "This is not a C++ compiler"
// preliminary value, taken from g++-10
#elif __cplusplus < 201709L
#error "This is not a C++20 compiler"
#else
#endif // __cplusplus < 201709L
]])
18 changes: 9 additions & 9 deletions standalone.make
Original file line number Diff line number Diff line change
Expand Up @@ -4,29 +4,29 @@

# TODO(sp) We should really use autotools here...
ifneq ($(shell which g++-10 2>/dev/null),)
CXX := g++-10 -std=c++17
CXX := g++-10 -std=c++2a
else ifneq ($(shell which clang++-10 2>/dev/null),)
CXX := clang++-10 -std=c++17
CXX := clang++-10 -std=c++2a
else ifneq ($(shell which g++-9 2>/dev/null),)
CXX := g++-9 -std=c++17
CXX := g++-9 -std=c++2a
else ifneq ($(shell which clang++-9 2>/dev/null),)
CXX := clang++-9 -std=c++17
CXX := clang++-9 -std=c++2a
else ifneq ($(shell which clang++-8 2>/dev/null),)
CXX := clang++-8 -std=c++17
CXX := clang++-8 -std=c++2a
else ifneq ($(shell which g++-8 2>/dev/null),)
CXX := g++-8 -std=c++17
CXX := g++-8 -std=c++2a
else ifneq ($(shell which clang++-7 2>/dev/null),)
CXX := clang++-7 -std=c++17
CXX := clang++-7 -std=c++2a
else ifneq ($(shell which g++-7 2>/dev/null),)
CXX := g++-7 -std=c++17
else ifneq ($(shell which clang++-6.0 2>/dev/null),)
CXX := clang++-6.0 -std=c++17
else ifneq ($(shell which clang++-5.0 2>/dev/null),)
CXX := clang++-5.0 -std=c++17
else ifneq ($(shell which g++ 2>/dev/null),)
CXX := g++ -std=c++17
CXX := g++ -std=c++2a
else
CXX := clang++ -std=c++17
CXX := clang++ -std=c++2a
endif

CXXFLAGS := -g -O3 -Wall -Wextra
Expand Down

0 comments on commit c6d3818

Please sign in to comment.