Merge pull request #283 from dgrove-oss/cmake-extended-warnings
Enable additional compiler warnings for CMake build
diff --git a/CMakeLists.txt b/CMakeLists.txt
index f6b078e..1f34e51 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -26,6 +26,9 @@
include(DispatchAppleOptions)
+include(DispatchCompilerWarnings)
+dispatch_common_warnings()
+
option(ENABLE_DISPATCH_INIT_CONSTRUCTOR "enable libdispatch_init as a constructor" ON)
set(USE_LIBDISPATCH_INIT_CONSTRUCTOR ${ENABLE_DISPATCH_INIT_CONSTRUCTOR})
diff --git a/cmake/modules/DispatchCompilerWarnings.cmake b/cmake/modules/DispatchCompilerWarnings.cmake
new file mode 100644
index 0000000..2ae27cd
--- /dev/null
+++ b/cmake/modules/DispatchCompilerWarnings.cmake
@@ -0,0 +1,90 @@
+
+if("${CMAKE_C_SIMULATE_ID}" STREQUAL "MSVC")
+ # TODO: someone needs to provide the msvc equivalent warning flags
+ macro(dispatch_common_warnings)
+ endmacro()
+else()
+ macro(dispatch_common_warnings)
+ add_compile_options(-Werror)
+ add_compile_options(-Wall)
+ add_compile_options(-Wextra)
+ add_compile_options(-Wno-unknown-warning-option)
+ add_compile_options(-Wno-trigraphs)
+ add_compile_options(-Wmissing-field-initializers)
+ add_compile_options(-Wmissing-prototypes)
+ add_compile_options(-Wdocumentation)
+ add_compile_options(-Wunreachable-code)
+ add_compile_options(-Wmissing-braces)
+ add_compile_options(-Wparentheses)
+ add_compile_options(-Wswitch)
+ add_compile_options(-Wunused-function)
+ add_compile_options(-Wunused-label)
+ add_compile_options(-Wunused-parameter)
+ add_compile_options(-Wunused-variable)
+ add_compile_options(-Wunused-value)
+ add_compile_options(-Wempty-body)
+ add_compile_options(-Wuninitialized)
+ add_compile_options(-Wunknown-pragmas)
+ add_compile_options(-Wshadow)
+ add_compile_options(-Wno-four-char-constants)
+ add_compile_options(-Wconversion)
+ add_compile_options(-Wconstant-conversion)
+ add_compile_options(-Wint-conversion)
+ add_compile_options(-Wbool-conversion)
+ add_compile_options(-Wenum-conversion)
+ add_compile_options(-Wassign-enum)
+ add_compile_options(-Wsign-compare)
+ add_compile_options(-Wshorten-64-to-32)
+ add_compile_options(-Wpointer-sign)
+ add_compile_options(-Wnewline-eof)
+ add_compile_options(-Wdeprecated-declarations)
+ add_compile_options(-Wsign-conversion)
+ add_compile_options(-Winfinite-recursion)
+ add_compile_options(-Warray-bounds-pointer-arithmetic)
+ add_compile_options(-Watomic-properties)
+ add_compile_options(-Wcomma)
+ add_compile_options(-Wconditional-uninitialized)
+ add_compile_options(-Wcovered-switch-default)
+ add_compile_options(-Wdate-time)
+ add_compile_options(-Wdeprecated)
+ add_compile_options(-Wdouble-promotion)
+ add_compile_options(-Wduplicate-enum)
+ add_compile_options(-Wexpansion-to-defined)
+ add_compile_options(-Wfloat-equal)
+ add_compile_options(-Widiomatic-parentheses)
+ add_compile_options(-Wignored-qualifiers)
+ add_compile_options(-Wimplicit-fallthrough)
+ add_compile_options(-Wnullable-to-nonnull-conversion)
+ add_compile_options(-Wobjc-interface-ivars)
+ add_compile_options(-Wover-aligned)
+ add_compile_options(-Wpacked)
+ add_compile_options(-Wpointer-arith)
+ add_compile_options(-Wselector)
+ add_compile_options(-Wstatic-in-inline)
+ add_compile_options(-Wsuper-class-method-mismatch)
+ add_compile_options(-Wswitch-enum)
+ add_compile_options(-Wtautological-compare)
+ add_compile_options(-Wunguarded-availability)
+ add_compile_options(-Wunused)
+ add_compile_options(-Wno-disabled-macro-expansion)
+ add_compile_options(-Wno-pedantic)
+ add_compile_options(-Wno-bad-function-cast)
+ add_compile_options(-Wno-c++-compat)
+ add_compile_options(-Wno-c++98-compat)
+ add_compile_options(-Wno-c++98-compat-pedantic)
+ add_compile_options(-Wno-cast-align)
+ add_compile_options(-Wno-cast-qual)
+ add_compile_options(-Wno-documentation-unknown-command)
+ add_compile_options(-Wno-format-nonliteral)
+ add_compile_options(-Wno-missing-variable-declarations)
+ add_compile_options(-Wno-old-style-cast)
+ add_compile_options(-Wno-padded)
+ add_compile_options(-Wno-reserved-id-macro)
+ add_compile_options(-Wno-shift-sign-overflow)
+ add_compile_options(-Wno-undef)
+ add_compile_options(-Wno-unreachable-code-aggressive)
+ add_compile_options(-Wno-unused-macros)
+ add_compile_options(-Wno-used-but-marked-unused)
+ add_compile_options(-Wno-vla)
+ endmacro()
+endif()
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index 3ecd069..0f8628f 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -59,7 +59,7 @@
endif()
function(add_unit_test name)
- set(options DISABLED_TEST)
+ set(options DISABLED_TEST;NO_BSD_OVERLAY)
set(single_value_args)
set(multiple_value_args SOURCES)
cmake_parse_arguments(AUT "${options}" "${single_value_args}" "${multiple_value_args}" ${ARGN})
@@ -84,7 +84,7 @@
SYSTEM BEFORE PRIVATE
"${WITH_BLOCKS_RUNTIME}")
endif()
- if(BSD_OVERLAY_FOUND)
+ if(BSD_OVERLAY_FOUND AND NOT AUT_NO_BSD_OVERLAY)
target_compile_options(${name}
PRIVATE
${BSD_OVERLAY_CFLAGS})
@@ -96,7 +96,7 @@
if(WITH_BLOCKS_RUNTIME)
target_link_libraries(${name} PRIVATE BlocksRuntime)
endif()
- if(BSD_OVERLAY_FOUND)
+ if(BSD_OVERLAY_FOUND AND NOT AUT_NO_BSD_OVERLAY)
target_link_libraries(${name}
PRIVATE
${BSD_OVERLAY_LDFLAGS})
@@ -122,10 +122,10 @@
endif()
endfunction()
+# Tests that reliably pass on all platforms
set(DISPATCH_C_TESTS
apply
api
- c99
debug
queue_finalizer
group
@@ -143,11 +143,9 @@
data
io_net
select)
-set(DISPATCH_CPP_TESTS
- plusplus)
-# Tests that usually pass, but occasionally fail
-# and are therefore not suitable for general CI usage.
+# Tests that usually pass, but occasionally fail.
+# Excluded by default for purposes of Swift CI
if(EXTENDED_TEST_SUITE)
list(APPEND DISPATCH_C_TESTS
priority
@@ -165,7 +163,7 @@
target_compile_options(dispatch_priority2 PRIVATE -DUSE_SET_TARGET_QUEUE=1)
endif()
-# Tests for platform-specific functionality
+# add C tests for platform-specific functionality when applicable
if(CMAKE_SYSTEM_NAME STREQUAL Darwin)
list(APPEND DISPATCH_C_TESTS
deadname
@@ -179,11 +177,10 @@
SOURCES
dispatch_${test}.c)
endforeach()
-foreach(test ${DISPATCH_CPP_TESTS})
- add_unit_test(dispatch_${test}
- SOURCES
- dispatch_${test}.cpp)
-endforeach()
+
+# test dispatch API for various C/CXX language variants
+add_unit_test(dispatch_c99 NO_BSD_OVERLAY SOURCES dispatch_c99.c)
+add_unit_test(dispatch_plusplus SOURCES dispatch_plusplus.cpp)
# test-specific link options
target_link_libraries(dispatch_group PRIVATE m)