From b557a953993c9b519ea5adccbdddeeeb684c48a4 Mon Sep 17 00:00:00 2001 From: Florian Franzmann Date: Sun, 1 Dec 2019 18:07:14 +0100 Subject: [PATCH 31/35] Enable more compiler warnings --- CMakeLists.txt | 1 + cmake/compilerwarnings.cmake | 83 ++++++++++++++++++++++++++++++++++++ 2 files changed, 84 insertions(+) create mode 100644 cmake/compilerwarnings.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 2a10e1f..a3134bc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,6 +18,7 @@ include(GNUInstallDirs) include(linker) include(sqlite) include(lto) +include(compilerwarnings) find_package(Threads REQUIRED) diff --git a/cmake/compilerwarnings.cmake b/cmake/compilerwarnings.cmake new file mode 100644 index 0000000..d314294 --- /dev/null +++ b/cmake/compilerwarnings.cmake @@ -0,0 +1,83 @@ +set( WARNINGS_COMMONFLAGS "${WARNINGS_COMMONFLAGS} -Wall" ) +set( WARNINGS_COMMONFLAGS "${WARNINGS_COMMONFLAGS} -Wextra" ) +set( WARNINGS_COMMONFLAGS "${WARNINGS_COMMONFLAGS} -Werror" ) +set( WARNINGS_COMMONFLAGS "${WARNINGS_COMMONFLAGS} -pedantic" ) +set( WARNINGS_COMMONFLAGS "${WARNINGS_COMMONFLAGS} -Wno-error=cast-qual" ) +set( WARNINGS_COMMONFLAGS "${WARNINGS_COMMONFLAGS} -Wcast-align" ) +set( WARNINGS_COMMONFLAGS "${WARNINGS_COMMONFLAGS} -Wformat=2" ) +#set( WARNINGS_COMMONFLAGS "${WARNINGS_COMMONFLAGS} -Wformat-truncation=2" ) +set( WARNINGS_COMMONFLAGS "${WARNINGS_COMMONFLAGS} -Wfloat-equal" ) +set( WARNINGS_COMMONFLAGS "${WARNINGS_COMMONFLAGS} -Winit-self" ) + +set( WARNINGS_COMMONFLAGS "${WARNINGS_COMMONFLAGS} -Wno-error=missing-include-dirs" ) +set( WARNINGS_COMMONFLAGS "${WARNINGS_COMMONFLAGS} -Wwrite-strings" ) +set( WARNINGS_COMMONFLAGS "${WARNINGS_COMMONFLAGS} -Wpointer-arith" ) +set( WARNINGS_COMMONFLAGS "${WARNINGS_COMMONFLAGS} -Wuninitialized" ) +set( WARNINGS_COMMONFLAGS "${WARNINGS_COMMONFLAGS} -Wstrict-overflow=2" ) +set( WARNINGS_COMMONFLAGS "${WARNINGS_COMMONFLAGS} -Wparentheses" ) +set( WARNINGS_COMMONFLAGS "${WARNINGS_COMMONFLAGS} -Wdate-time" ) +set( WARNINGS_COMMONFLAGS "${WARNINGS_COMMONFLAGS} -Wredundant-decls" ) +set( WARNINGS_COMMONFLAGS "${WARNINGS_COMMONFLAGS} -Wswitch-enum" ) +set( WARNINGS_COMMONFLAGS "${WARNINGS_COMMONFLAGS} -Wundef" ) +set( WARNINGS_COMMONFLAGS "${WARNINGS_COMMONFLAGS} -Wno-unused-macros" ) +set( WARNINGS_COMMONFLAGS "${WARNINGS_COMMONFLAGS} -Wno-error=unused-variable" ) +set( WARNINGS_COMMONFLAGS "${WARNINGS_COMMONFLAGS} -Wno-unused-parameter" ) +set( WARNINGS_COMMONFLAGS "${WARNINGS_COMMONFLAGS} -Wno-error=return-type" ) +option(DEPRECATION_WARNING "warn about use of deprecated features" OFF) +if(NOT DEPRECATION_WARNING) + set( WARNINGS_COMMONFLAGS "${WARNINGS_COMMONFLAGS} -Wno-deprecated-declarations" ) +endif() +#set( WARNINGS_COMMONFLAGS "${WARNINGS_COMMONFLAGS} -Wconversion" ) +set( WARNINGS_COMMONFLAGS "${WARNINGS_COMMONFLAGS} -Wno-error=shadow" ) +set( WARNINGS_COMMONFLAGS "${WARNINGS_COMMONFLAGS} -Wpacked" ) +set( WARNINGS_COMMONFLAGS "${WARNINGS_COMMONFLAGS} -Wno-error=unreachable-code" ) +set( WARNINGS_COMMONFLAGS "${WARNINGS_COMMONFLAGS} -Wno-error=unused-function" ) +set( WARNINGS_COMMONFLAGS "${WARNINGS_COMMONFLAGS} -Wno-unused-command-line-argument" ) + +if(CMAKE_COMPILER_IS_GNUCC AND NOT DEFINED CMAKE_CXX_CLANG_TIDY) + set( WARNINGS_COMMONFLAGS "${WARNINGS_COMMONFLAGS} -Wlogical-op" ) + set( WARNINGS_COMMONFLAGS "${WARNINGS_COMMONFLAGS} -Wno-suggest-attribute=noreturn" ) + set( WARNINGS_COMMONFLAGS "${WARNINGS_COMMONFLAGS} -Walloc-zero" ) + set( WARNINGS_COMMONFLAGS "${WARNINGS_COMMONFLAGS} -Wduplicated-branches" ) + set( WARNINGS_COMMONFLAGS "${WARNINGS_COMMONFLAGS} -Wduplicated-cond" ) +endif() + +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${WARNINGS_COMMONFLAGS}") +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wstrict-prototypes") +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wbad-function-cast") +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wold-style-definition") +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wmissing-prototypes") +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wmissing-declarations") +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wnested-externs") + +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${WARNINGS_COMMONFLAGS}") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-error=overloaded-virtual" ) +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wextra-semi" ) +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wnon-virtual-dtor" ) +#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wuseless-cast" ) +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wzero-as-null-pointer-constant" ) +if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" AND NOT DEFINED CMAKE_CXX_CLANG_TIDY) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wsuggest-override" ) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wcatch-value=2" ) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wplacement-new" ) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-terminate") +endif() +#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Weffc++" ) +#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wold-style-cast" ) + +if(DEFINED CMAKE_CXX_CLANG_TIDY) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-error") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-error") +endif() + +INCLUDE (CheckCXXSourceCompiles) + +CHECK_CXX_SOURCE_COMPILES(" +int main(void) { + return 0; +} +" COMPILE_TRIVIAL_CXX_PROGRAM) +if(COMPILE_TRIVIAL_CXX_PROGRAM) +else() + message(FATAL_ERROR "cannot compile a trivial C++ program") +endif() -- 2.24.0 .