Skip to content

Commit 48bfe91

Browse files
committed
Add option JSONCPP_WITH_STRICT_ISO
'-pedantic' issues all warnings demanded by strict ISO C/C++; rejecting extensions that do not follow ISO C/C++. Without this option, certain GNU extensions and traditional C/C++ features are supported as well. With this option enabled building jsoncpp fails with the musl toolchain on x86 because of an incompatible posix_memalign declaration [1]. Without '-pedantic' there is no error anymore and jsoncpp builds fine. Add an option JSONCPP_WITH_STRICT_ISO to disable compilation with '-pedantic' with GCC. If jsoncpp is build with the JSONCPP_WITH_WARNING_AS_ERROR option '-pedantic-errors' is used instead. [1] https://gcc.gnu.org/ml/gcc-patches/2015-05/msg01425.html
1 parent 0cce773 commit 48bfe91

File tree

1 file changed

+10
-1
lines changed

1 file changed

+10
-1
lines changed

CMakeLists.txt

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ ENABLE_TESTING()
77
OPTION(JSONCPP_WITH_TESTS "Compile and (for jsoncpp_check) run JsonCpp test executables" ON)
88
OPTION(JSONCPP_WITH_POST_BUILD_UNITTEST "Automatically run unit-tests as a post build step" ON)
99
OPTION(JSONCPP_WITH_WARNING_AS_ERROR "Force compilation to fail if a warning occurs" OFF)
10+
OPTION(JSONCPP_WITH_STRICT_ISO "Issue all the warnings demanded by strict ISO C and ISO C++" ON)
1011
OPTION(JSONCPP_WITH_PKGCONFIG_SUPPORT "Generate and install .pc files" ON)
1112
OPTION(JSONCPP_WITH_CMAKE_PACKAGE "Generate and install cmake package files" OFF)
1213
OPTION(BUILD_SHARED_LIBS "Build jsoncpp_lib as a shared library." OFF)
@@ -83,6 +84,10 @@ macro(UseCompilationWarningAsError)
8384
# Only enabled in debug because some old versions of VS STL generate
8485
# warnings when compiled in release configuration.
8586
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /WX ")
87+
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
88+
if (JSONCPP_WITH_STRICT_ISO)
89+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic-errors")
90+
endif ()
8691
endif()
8792
endmacro()
8893

@@ -100,8 +105,12 @@ if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
100105
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -Wconversion -Wshadow -Wno-sign-conversion")
101106
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
102107
# using GCC
103-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -Wconversion -Wshadow -Wextra -pedantic")
108+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -Wconversion -Wshadow -Wextra")
104109
# not yet ready for -Wsign-conversion
110+
111+
if (JSONCPP_WITH_STRICT_ISO AND NOT JSONCPP_WITH_WARNING_AS_ERROR)
112+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic")
113+
endif ()
105114
endif()
106115

107116
find_program(CCACHE_FOUND ccache)

0 commit comments

Comments
 (0)