summaryrefslogtreecommitdiff
path: root/CMakeLists.txt
diff options
context:
space:
mode:
authorJoão Valverde <joao.valverde@tecnico.ulisboa.pt>2016-08-16 22:21:59 +0100
committerJoão Valverde <j@v6e.pt>2016-08-23 21:33:09 +0000
commit640382c74364f61da36bdc5b1272e8cda28f1d8f (patch)
tree60c64cb62d309f1f978f68714e11397f88e21d29 /CMakeLists.txt
parent505bcefd20501ae0811f6074f2113b52788d78c5 (diff)
downloadwireshark-640382c74364f61da36bdc5b1272e8cda28f1d8f.tar.gz
CMake: Allow setting per target compiler warnings
Setting our compiler warning flags in CMAKE_C_FLAGS does not allow using different flags per target. Allow for that possibility by setting the internal WS_WARNINGS_{C,CXX}_FLAGS and using the COMPILE_OPTIONS property to set them. This change is just setting mechanism and there should be no difference in generated warnings. The check_X_compiler_flag cmake test is changed to test each flag individually. We need a list, not a space separated string, and the aggregate test is not significant. Change-Id: I59fc5cd7e130c7a5e001c598e3df3e13f83a6a25 Reviewed-on: https://code.wireshark.org/review/17150 Petri-Dish: João Valverde <j@v6e.pt> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: João Valverde <j@v6e.pt>
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt88
1 files changed, 58 insertions, 30 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index a4d7e55c3e..4646b25d97 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -343,7 +343,20 @@ else()
endif()
endif()
- set(WIRESHARK_COMMON_FLAGS
+ if(CMAKE_C_COMPILER_ID MATCHES "Clang")
+ set(WIRESHARK_COMMON_FLAGS ${WIRESHARK_COMMON_FLAGS}
+ # avoid "argument unused during compilation" warnings
+ # (for example, when getting the -gsplit-dwarf option or
+ # when combining -fwrapv with -fno-strict-overflow)
+ -Qunused-arguments
+ )
+ else()
+ set(WIRESHARK_COMMON_FLAGS ${WIRESHARK_COMMON_FLAGS}
+ -fexcess-precision=fast
+ )
+ endif()
+
+ set(COMMON_WARN_FLAGS
# The following are for C and C++
# -O<X> and -g get set by the CMAKE_BUILD_TYPE
-Wall
@@ -364,7 +377,7 @@ else()
-Wheader-guard
)
- set(WIRESHARK_C_ONLY_FLAGS
+ set(C_WARN_FLAGS
# The following are C only, not C++
-Wc++-compat
-Wdeclaration-after-statement
@@ -382,10 +395,10 @@ else()
-Wc99-extensions
)
- set(WIRESHARK_CXX_ONLY_FLAGS
+ set(CXX_WARN_FLAGS
)
- set(WIRESHARK_EXTRA_COMPILER_COMMON_FLAGS
+ set(COMMON_EXTRA_WARN_FLAGS
# The following are for C and C++
-Wpedantic
#
@@ -440,7 +453,7 @@ else()
-fno-delete-null-pointer-checks
)
- set(WIRESHARK_EXTRA_COMPILER_C_ONLY_FLAGS
+ set(C_EXTRA_WARN_FLAGS
# The following are C only, not C++
#
# Due to various places where APIs we don't control
@@ -450,32 +463,13 @@ else()
-Wbad-function-cast
)
- set(WIRESHARK_EXTRA_COMPILER_CXX_ONLY_FLAGS
+ set(CXX_EXTRA_WARN_FLAGS
)
- if(CMAKE_C_COMPILER_ID MATCHES "Clang")
- set(WIRESHARK_COMMON_FLAGS ${WIRESHARK_COMMON_FLAGS}
- # avoid "argument unused during compilation" warnings
- # (for example, when getting the -gsplit-dwarf option or
- # when combining -fwrapv with -fno-strict-overflow)
- -Qunused-arguments
- )
-
- set(WIRESHARK_CXX_ONLY_FLAGS ${WIRESHARK_CXX_ONLY_FLAGS}
- )
- else()
- set(WIRESHARK_COMMON_FLAGS ${WIRESHARK_COMMON_FLAGS}
- -fexcess-precision=fast
- )
-
- set(WIRESHARK_C_ONLY_FLAGS ${WIRESHARK_C_ONLY_FLAGS}
- )
- endif()
-
if(ENABLE_EXTRA_COMPILER_WARNINGS) # This overrides -Werror
- set(WIRESHARK_COMMON_FLAGS ${WIRESHARK_COMMON_FLAGS} ${WIRESHARK_EXTRA_COMPILER_COMMON_FLAGS})
- set(WIRESHARK_C_ONLY_FLAGS ${WIRESHARK_C_ONLY_FLAGS} ${WIRESHARK_EXTRA_COMPILER_C_ONLY_FLAGS})
- set(WIRESHARK_CXX_ONLY_FLAGS ${WIRESHARK_CXX_ONLY_FLAGS} ${WIRESHARK_EXTRA_COMPILER_CXX_ONLY_FLAGS})
+ set(COMMON_WARN_FLAGS ${COMMON_WARN_FLAGS} ${COMMON_EXTRA_WARN_FLAGS})
+ set(C_WARN_FLAGS ${C_WARN_FLAGS} ${C_EXTRA_WARN_FLAGS})
+ set(CXX_WARN_FLAGS ${CXX_WARN_FLAGS} ${CXX_EXTRA_WARN_FLAGS})
endif()
add_definitions(
@@ -487,6 +481,9 @@ endif()
set( C_FLAG_TESTS ${WIRESHARK_COMMON_FLAGS} ${WIRESHARK_C_ONLY_FLAGS} )
set( CXX_FLAG_TESTS ${WIRESHARK_COMMON_FLAGS} ${WIRESHARK_CXX_ONLY_FLAGS} )
+set( C_WARN_TESTS ${COMMON_WARN_FLAGS} ${C_WARN_FLAGS} )
+set( CXX_WARN_TESTS ${COMMON_WARN_FLAGS} ${CXX_WARN_FLAGS} )
+
# Counterhack to work around some cache magic in CHECK_C_SOURCE_COMPILES
include(CheckCCompilerFlag)
include(CheckCXXCompilerFlag)
@@ -526,6 +523,30 @@ foreach(THIS_FLAG ${CXX_FLAG_TESTS})
endforeach()
set(CMAKE_CXX_FLAGS "${ADDED_CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS}")
+foreach(THIS_FLAG ${C_WARN_TESTS})
+ string( REGEX REPLACE "[^a-zA-Z0-9_]+" "_" F ${THIS_FLAG} )
+ set(${F} ${THIS_FLAG})
+ set(V C_${F}_VALID)
+ message(STATUS "Checking for c-compiler flag: ${THIS_FLAG}")
+ check_c_compiler_flag("${C_FLAG_TESTS} ${${F}}" ${V})
+ if (${${V}})
+ set(ADDED_WARN_C_FLAGS ${ADDED_WARN_C_FLAGS} ${${F}})
+ endif()
+endforeach()
+set(WS_WARNINGS_C_FLAGS ${ADDED_WARN_C_FLAGS})
+
+foreach(THIS_FLAG ${CXX_WARN_TESTS})
+ string( REGEX REPLACE "[^a-zA-Z0-9_]+" "_" F ${THIS_FLAG} )
+ set(${F} ${THIS_FLAG})
+ set(V CXX_${F}_VALID)
+ message(STATUS "Checking for c++-compiler flag: ${THIS_FLAG}")
+ check_cxx_compiler_flag("${CXX_FLAG_TESTS} ${${F}}" ${V})
+ if (${${V}})
+ set(ADDED_WARN_CXX_FLAGS ${ADDED_WARN_CXX_FLAGS} ${${F}})
+ endif()
+endforeach()
+set(WS_WARNINGS_CXX_FLAGS ${ADDED_WARN_CXX_FLAGS})
+
if(ENABLE_ASAN)
set(CMAKE_REQUIRED_LIBRARIES "-fsanitize=address")
check_c_compiler_flag(-fsanitize=address C__fsanitize_address_VALID)
@@ -1000,8 +1021,10 @@ if(ENABLE_CHECKHF_CONFLICT)
set(ENABLE_CHECK_FILTER 1)
endif()
-message(STATUS "C-Flags: ${CMAKE_C_FLAGS}")
-message(STATUS "CXX-Flags: ${CMAKE_CXX_FLAGS}")
+string(REPLACE ";" " " _warnings_c_flags "${WS_WARNINGS_C_FLAGS}")
+message(STATUS "C-Flags: ${CMAKE_C_FLAGS} ${_warnings_c_flags}")
+string(REPLACE ";" " " _warnings_cxx_flags "${WS_WARNINGS_CXX_FLAGS}")
+message(STATUS "CXX-Flags: ${CMAKE_CXX_FLAGS} ${_warnings_cxx_flags}")
message(STATUS "Warnings as errors: ${WERROR_COMMON_FLAGS}")
if(APPLE)
@@ -1816,6 +1839,7 @@ if(BUILD_wireshark AND QT_FOUND)
add_executable(wireshark WIN32 MACOSX_BUNDLE wireshark-qt.cpp ${wireshark_FILES} ${EXTRA_BUNDLE_FILES})
add_dependencies(wireshark version)
set(PROGLIST ${PROGLIST} wireshark)
+ set_target_properties(wireshark PROPERTIES COMPILE_OPTIONS "${WS_WARNINGS_CXX_FLAGS}")
set_target_properties(wireshark PROPERTIES LINK_FLAGS "${WS_LINK_FLAGS}")
set_target_properties(wireshark PROPERTIES FOLDER "Executables")
if(ENABLE_APPLICATION_BUNDLE OR WIN32)
@@ -1894,6 +1918,7 @@ endif()
# Common properties for CLI executables
macro(set_extra_executable_properties _executable _folder)
set_target_properties(${_executable} PROPERTIES
+ COMPILE_OPTIONS "${WS_WARNINGS_C_FLAGS}"
LINK_FLAGS "${WS_LINK_FLAGS}"
FOLDER ${_folder}
)
@@ -1921,6 +1946,7 @@ macro(set_extcap_executable_properties _executable)
if(WIN32)
set_target_properties(${_executable} PROPERTIES
+ COMPILE_OPTIONS "${WS_WARNINGS_C_FLAGS}"
LINK_FLAGS "${WS_LINK_FLAGS}"
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/run/extcap
RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR}/run/Debug/extcap
@@ -1930,6 +1956,7 @@ macro(set_extcap_executable_properties _executable)
)
else()
set_target_properties(${_executable} PROPERTIES
+ COMPILE_OPTIONS "${WS_WARNINGS_C_FLAGS}"
LINK_FLAGS "${WS_LINK_FLAGS}"
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/run/extcap
)
@@ -1971,6 +1998,7 @@ if(BUILD_wireshark_gtk AND GTK_FOUND)
add_executable(wireshark-gtk WIN32 ${wireshark_FILES})
add_dependencies(wireshark-gtk version)
set(PROGLIST ${PROGLIST} wireshark-gtk)
+ set_target_properties(wireshark-gtk PROPERTIES COMPILE_OPTIONS "${WS_WARNINGS_C_FLAGS}")
set_target_properties(wireshark-gtk PROPERTIES LINK_FLAGS "${WS_LINK_FLAGS}")
set_target_properties(wireshark-gtk PROPERTIES FOLDER "Executables")
target_link_libraries(wireshark-gtk ${wireshark_gtk_LIBS})