Merge pull request #1868 from ylavic/cpp17_in_ci
Handle C++17 (and C++11 with MSVC) in CI.
This commit is contained in:
commit
49aa0fc15d
43
.travis.yml
43
.travis.yml
@ -28,51 +28,63 @@ env:
|
|||||||
matrix:
|
matrix:
|
||||||
include:
|
include:
|
||||||
# gcc
|
# gcc
|
||||||
- env: CONF=release ARCH=x86 CXX11=ON
|
- env: CONF=release ARCH=x86 CXX11=ON CXX17=OFF
|
||||||
compiler: gcc
|
compiler: gcc
|
||||||
arch: amd64
|
arch: amd64
|
||||||
- env: CONF=release ARCH=x86_64 CXX11=ON
|
- env: CONF=release ARCH=x86_64 CXX11=ON CXX17=OFF
|
||||||
compiler: gcc
|
compiler: gcc
|
||||||
arch: amd64
|
arch: amd64
|
||||||
- env: CONF=debug ARCH=x86 CXX11=OFF
|
- env: CONF=debug ARCH=x86 CXX11=OFF CXX17=OFF
|
||||||
compiler: gcc
|
compiler: gcc
|
||||||
arch: amd64
|
arch: amd64
|
||||||
- env: CONF=debug ARCH=x86_64 CXX11=OFF
|
- env: CONF=debug ARCH=x86_64 CXX11=OFF CXX17=OFF
|
||||||
compiler: gcc
|
compiler: gcc
|
||||||
arch: amd64
|
arch: amd64
|
||||||
- env: CONF=release ARCH=aarch64 CXX11=ON
|
- env: CONF=debug ARCH=x86 CXX11=OFF CXX17=ON
|
||||||
|
compiler: gcc
|
||||||
|
arch: amd64
|
||||||
|
- env: CONF=debug ARCH=x86_64 CXX11=OFF CXX17=ON
|
||||||
|
compiler: gcc
|
||||||
|
arch: amd64
|
||||||
|
- env: CONF=release ARCH=aarch64 CXX11=ON CXX17=OFF
|
||||||
compiler: gcc
|
compiler: gcc
|
||||||
arch: arm64
|
arch: arm64
|
||||||
- env: CONF=debug ARCH=aarch64 CXX11=OFF
|
- env: CONF=release ARCH=aarch64 CXX11=OFF CXX17=OFF
|
||||||
|
compiler: gcc
|
||||||
|
arch: arm64
|
||||||
|
- env: CONF=release ARCH=aarch64 CXX11=OFF CXX17=ON
|
||||||
compiler: gcc
|
compiler: gcc
|
||||||
arch: arm64
|
arch: arm64
|
||||||
# clang
|
# clang
|
||||||
- env: CONF=debug ARCH=x86 CXX11=ON CCACHE_CPP2=yes
|
- env: CONF=release ARCH=x86 CXX11=ON CXX17=OFF CCACHE_CPP2=yes
|
||||||
compiler: clang
|
compiler: clang
|
||||||
arch: amd64
|
arch: amd64
|
||||||
- env: CONF=debug ARCH=x86_64 CXX11=ON CCACHE_CPP2=yes
|
- env: CONF=release ARCH=x86_64 CXX11=ON CXX17=OFF CCACHE_CPP2=yes
|
||||||
compiler: clang
|
compiler: clang
|
||||||
arch: amd64
|
arch: amd64
|
||||||
- env: CONF=debug ARCH=x86 CXX11=OFF CCACHE_CPP2=yes
|
- env: CONF=debug ARCH=x86 CXX11=OFF CXX17=OFF CCACHE_CPP2=yes
|
||||||
compiler: clang
|
compiler: clang
|
||||||
arch: amd64
|
arch: amd64
|
||||||
- env: CONF=debug ARCH=x86_64 CXX11=OFF CCACHE_CPP2=yes
|
- env: CONF=debug ARCH=x86_64 CXX11=OFF CXX17=OFF CCACHE_CPP2=yes
|
||||||
compiler: clang
|
compiler: clang
|
||||||
arch: amd64
|
arch: amd64
|
||||||
- env: CONF=release ARCH=x86 CXX11=ON CCACHE_CPP2=yes
|
- env: CONF=debug ARCH=x86 CXX11=OFF CXX17=ON CCACHE_CPP2=yes
|
||||||
compiler: clang
|
compiler: clang
|
||||||
arch: amd64
|
arch: amd64
|
||||||
- env: CONF=release ARCH=x86_64 CXX11=ON CCACHE_CPP2=yes
|
- env: CONF=debug ARCH=x86_64 CXX11=OFF CXX17=ON CCACHE_CPP2=yes
|
||||||
compiler: clang
|
compiler: clang
|
||||||
arch: amd64
|
arch: amd64
|
||||||
- env: CONF=debug ARCH=aarch64 CXX11=ON CCACHE_CPP2=yes
|
- env: CONF=debug ARCH=aarch64 CXX11=ON CXX17=OFF CCACHE_CPP2=yes
|
||||||
compiler: clang
|
compiler: clang
|
||||||
arch: arm64
|
arch: arm64
|
||||||
- env: CONF=debug ARCH=aarch64 CXX11=OFF CCACHE_CPP2=yes
|
- env: CONF=debug ARCH=aarch64 CXX11=OFF CXX17=OFF CCACHE_CPP2=yes
|
||||||
|
compiler: clang
|
||||||
|
arch: arm64
|
||||||
|
- env: CONF=debug ARCH=aarch64 CXX11=OFF CXX17=ON CCACHE_CPP2=yes
|
||||||
compiler: clang
|
compiler: clang
|
||||||
arch: arm64
|
arch: arm64
|
||||||
# coverage report
|
# coverage report
|
||||||
- env: CONF=debug ARCH=x86 CXX11=ON GCOV_FLAGS='--coverage'
|
- env: CONF=debug ARCH=x86 CXX11=ON CXX17=OFF GCOV_FLAGS='--coverage'
|
||||||
compiler: gcc
|
compiler: gcc
|
||||||
arch: amd64
|
arch: amd64
|
||||||
cache:
|
cache:
|
||||||
@ -135,6 +147,7 @@ script:
|
|||||||
(cd build && cmake
|
(cd build && cmake
|
||||||
-DRAPIDJSON_HAS_STDSTRING=ON
|
-DRAPIDJSON_HAS_STDSTRING=ON
|
||||||
-DRAPIDJSON_BUILD_CXX11=$CXX11
|
-DRAPIDJSON_BUILD_CXX11=$CXX11
|
||||||
|
-DRAPIDJSON_BUILD_CXX17=$CXX17
|
||||||
-DCMAKE_VERBOSE_MAKEFILE=ON
|
-DCMAKE_VERBOSE_MAKEFILE=ON
|
||||||
-DCMAKE_BUILD_TYPE=$CONF
|
-DCMAKE_BUILD_TYPE=$CONF
|
||||||
-DCMAKE_CXX_FLAGS="$ARCH_FLAGS $GCOV_FLAGS"
|
-DCMAKE_CXX_FLAGS="$ARCH_FLAGS $GCOV_FLAGS"
|
||||||
|
@ -35,7 +35,8 @@ option(RAPIDJSON_BUILD_TESTS "Build rapidjson perftests and unittests." ON)
|
|||||||
option(RAPIDJSON_BUILD_THIRDPARTY_GTEST
|
option(RAPIDJSON_BUILD_THIRDPARTY_GTEST
|
||||||
"Use gtest installation in `thirdparty/gtest` by default if available" OFF)
|
"Use gtest installation in `thirdparty/gtest` by default if available" OFF)
|
||||||
|
|
||||||
option(RAPIDJSON_BUILD_CXX11 "Build rapidjson with C++11 (gcc/clang)" ON)
|
option(RAPIDJSON_BUILD_CXX11 "Build rapidjson with C++11" ON)
|
||||||
|
option(RAPIDJSON_BUILD_CXX17 "Build rapidjson with C++17" OFF)
|
||||||
if(RAPIDJSON_BUILD_CXX11)
|
if(RAPIDJSON_BUILD_CXX11)
|
||||||
set(CMAKE_CXX_STANDARD 11)
|
set(CMAKE_CXX_STANDARD 11)
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED TRUE)
|
set(CMAKE_CXX_STANDARD_REQUIRED TRUE)
|
||||||
@ -77,6 +78,8 @@ if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
|||||||
else()
|
else()
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
|
||||||
endif()
|
endif()
|
||||||
|
elseif (RAPIDJSON_BUILD_CXX17 AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS "5.0")
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17")
|
||||||
endif()
|
endif()
|
||||||
if (RAPIDJSON_BUILD_ASAN)
|
if (RAPIDJSON_BUILD_ASAN)
|
||||||
if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.8.0")
|
if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.8.0")
|
||||||
@ -105,6 +108,8 @@ elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
|||||||
set(EXTRA_CXX_FLAGS -Weffc++ -Wswitch-default -Wfloat-equal -Wconversion -Wimplicit-fallthrough)
|
set(EXTRA_CXX_FLAGS -Weffc++ -Wswitch-default -Wfloat-equal -Wconversion -Wimplicit-fallthrough)
|
||||||
if (RAPIDJSON_BUILD_CXX11 AND CMAKE_VERSION VERSION_LESS 3.1)
|
if (RAPIDJSON_BUILD_CXX11 AND CMAKE_VERSION VERSION_LESS 3.1)
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
|
||||||
|
elseif (RAPIDJSON_BUILD_CXX17 AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.0")
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17")
|
||||||
endif()
|
endif()
|
||||||
if (RAPIDJSON_BUILD_ASAN)
|
if (RAPIDJSON_BUILD_ASAN)
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address")
|
||||||
@ -119,6 +124,18 @@ elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
|||||||
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
|
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
|
||||||
add_definitions(-D_CRT_SECURE_NO_WARNINGS=1)
|
add_definitions(-D_CRT_SECURE_NO_WARNINGS=1)
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc")
|
||||||
|
# CMake >= 3.10 should handle the above CMAKE_CXX_STANDARD fine, otherwise use /std:c++XX with MSVC >= 19.10
|
||||||
|
if (RAPIDJSON_BUILD_CXX11 AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS "19.10")
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /std:c++11")
|
||||||
|
elseif (RAPIDJSON_BUILD_CXX17 AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS "19.14")
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /std:c++17")
|
||||||
|
endif()
|
||||||
|
# Always compile with /WX
|
||||||
|
if(CMAKE_CXX_FLAGS MATCHES "/WX-")
|
||||||
|
string(REGEX REPLACE "/WX-" "/WX" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
||||||
|
else()
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /WX")
|
||||||
|
endif()
|
||||||
elseif (CMAKE_CXX_COMPILER_ID MATCHES "XL")
|
elseif (CMAKE_CXX_COMPILER_ID MATCHES "XL")
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -qarch=auto")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -qarch=auto")
|
||||||
endif()
|
endif()
|
||||||
|
37
appveyor.yml
37
appveyor.yml
@ -13,37 +13,72 @@ environment:
|
|||||||
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
|
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
|
||||||
VS_VERSION: 10 2010
|
VS_VERSION: 10 2010
|
||||||
VS_PLATFORM: win32
|
VS_PLATFORM: win32
|
||||||
|
CXX11: OFF
|
||||||
|
CXX17: OFF
|
||||||
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
|
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
|
||||||
VS_VERSION: 10 2010
|
VS_VERSION: 10 2010
|
||||||
VS_PLATFORM: x64
|
VS_PLATFORM: x64
|
||||||
|
CXX11: OFF
|
||||||
|
CXX17: OFF
|
||||||
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
|
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
|
||||||
VS_VERSION: 11 2012
|
VS_VERSION: 11 2012
|
||||||
VS_PLATFORM: win32
|
VS_PLATFORM: win32
|
||||||
|
CXX11: OFF
|
||||||
|
CXX17: OFF
|
||||||
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
|
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
|
||||||
VS_VERSION: 11 2012
|
VS_VERSION: 11 2012
|
||||||
VS_PLATFORM: x64
|
VS_PLATFORM: x64
|
||||||
|
CXX11: OFF
|
||||||
|
CXX17: OFF
|
||||||
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
|
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
|
||||||
VS_VERSION: 12 2013
|
VS_VERSION: 12 2013
|
||||||
VS_PLATFORM: win32
|
VS_PLATFORM: win32
|
||||||
|
CXX11: OFF
|
||||||
|
CXX17: OFF
|
||||||
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
|
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
|
||||||
VS_VERSION: 12 2013
|
VS_VERSION: 12 2013
|
||||||
VS_PLATFORM: x64
|
VS_PLATFORM: x64
|
||||||
|
CXX11: OFF
|
||||||
|
CXX17: OFF
|
||||||
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
|
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
|
||||||
VS_VERSION: 14 2015
|
VS_VERSION: 14 2015
|
||||||
VS_PLATFORM: win32
|
VS_PLATFORM: win32
|
||||||
|
CXX11: OFF
|
||||||
|
CXX17: OFF
|
||||||
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
|
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
|
||||||
VS_VERSION: 14 2015
|
VS_VERSION: 14 2015
|
||||||
VS_PLATFORM: x64
|
VS_PLATFORM: x64
|
||||||
|
CXX11: OFF
|
||||||
|
CXX17: OFF
|
||||||
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
|
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
|
||||||
VS_VERSION: 15 2017
|
VS_VERSION: 15 2017
|
||||||
VS_PLATFORM: win32
|
VS_PLATFORM: win32
|
||||||
|
CXX11: OFF
|
||||||
|
CXX17: OFF
|
||||||
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
|
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
|
||||||
VS_VERSION: 15 2017
|
VS_VERSION: 15 2017
|
||||||
VS_PLATFORM: x64
|
VS_PLATFORM: x64
|
||||||
|
CXX11: OFF
|
||||||
|
CXX17: OFF
|
||||||
|
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
|
||||||
|
VS_VERSION: 15 2017
|
||||||
|
VS_PLATFORM: x64
|
||||||
|
CXX11: ON
|
||||||
|
CXX17: OFF
|
||||||
|
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
|
||||||
|
VS_VERSION: 15 2017
|
||||||
|
VS_PLATFORM: x64
|
||||||
|
CXX11: OFF
|
||||||
|
CXX17: ON
|
||||||
|
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
|
||||||
|
VS_VERSION: 16 2019
|
||||||
|
VS_PLATFORM: x64
|
||||||
|
CXX11: OFF
|
||||||
|
CXX17: ON
|
||||||
|
|
||||||
before_build:
|
before_build:
|
||||||
- git submodule update --init --recursive
|
- git submodule update --init --recursive
|
||||||
- cmake -H. -BBuild/VS -G "Visual Studio %VS_VERSION%" -DCMAKE_GENERATOR_PLATFORM=%VS_PLATFORM% -DCMAKE_VERBOSE_MAKEFILE=ON -DBUILD_SHARED_LIBS=true -Wno-dev
|
- cmake -H. -BBuild/VS -G "Visual Studio %VS_VERSION%" -DCMAKE_GENERATOR_PLATFORM=%VS_PLATFORM% -DCMAKE_VERBOSE_MAKEFILE=ON -DBUILD_SHARED_LIBS=true -DRAPIDJSON_BUILD_CXX11=%CXX11% -DRAPIDJSON_BUILD_CXX17=%CXX17% -Wno-dev
|
||||||
|
|
||||||
build:
|
build:
|
||||||
project: Build\VS\RapidJSON.sln
|
project: Build\VS\RapidJSON.sln
|
||||||
|
@ -581,6 +581,7 @@ private:
|
|||||||
BaseAllocator baseAllocator_;
|
BaseAllocator baseAllocator_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#if !RAPIDJSON_HAS_CXX17 // std::allocator<void> deprecated in C++17
|
||||||
template <typename BaseAllocator>
|
template <typename BaseAllocator>
|
||||||
class StdAllocator<void, BaseAllocator> :
|
class StdAllocator<void, BaseAllocator> :
|
||||||
public std::allocator<void>
|
public std::allocator<void>
|
||||||
@ -628,6 +629,7 @@ private:
|
|||||||
|
|
||||||
BaseAllocator baseAllocator_;
|
BaseAllocator baseAllocator_;
|
||||||
};
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
RAPIDJSON_DIAG_POP
|
RAPIDJSON_DIAG_POP
|
||||||
|
@ -83,8 +83,12 @@ private:
|
|||||||
|
|
||||||
template <typename Allocator>
|
template <typename Allocator>
|
||||||
void TestStdAllocator(const Allocator& a) {
|
void TestStdAllocator(const Allocator& a) {
|
||||||
|
#if RAPIDJSON_HAS_CXX17
|
||||||
|
typedef StdAllocator<bool, Allocator> BoolAllocator;
|
||||||
|
#else
|
||||||
typedef StdAllocator<void, Allocator> VoidAllocator;
|
typedef StdAllocator<void, Allocator> VoidAllocator;
|
||||||
typedef typename VoidAllocator::template rebind<bool>::other BoolAllocator;
|
typedef typename VoidAllocator::template rebind<bool>::other BoolAllocator;
|
||||||
|
#endif
|
||||||
BoolAllocator ba(a), ba2(a);
|
BoolAllocator ba(a), ba2(a);
|
||||||
EXPECT_TRUE(ba == ba2);
|
EXPECT_TRUE(ba == ba2);
|
||||||
EXPECT_FALSE(ba!= ba2);
|
EXPECT_FALSE(ba!= ba2);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user