From ef6718288c6dacebb952eb3bb263ee9e4c3e323d Mon Sep 17 00:00:00 2001 From: Ralf Habacker Date: Thu, 26 Nov 2015 15:02:51 +0100 Subject: [PATCH 2/3] Keep cmake gcc builds in sync with autotools warnings. Bug: https://bugs.freedesktop.org/show_bug.cgi?id=93069 --- cmake/CMakeLists.txt | 4 +-- cmake/modules/MacrosAutotools.cmake | 65 +++++++++++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+), 2 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index ca49088..8361bb2 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -192,8 +192,8 @@ if(MSVC) set(WARNINGS_DISABLED "4127 4090 4101 4244") set(WARNINGS_ERRORS "4028 4013 4133 4047 4031 4002 4003 4114") else() - set(WARNINGS "sign-compare") - set(WARNINGS_DISABLED "") + autocompilerwarnings(WARNINGS WARNINGS_DISABLED) + set(WARNINGS "${WARNINGS} sign-compare") set(WARNINGS_ERRORS "") endif() generate_warning_cflags(WARNINGS_CFLAGS "${WARNINGS}" "${WARNINGS_DISABLED}" "${WARNINGS_ERRORS}") diff --git a/cmake/modules/MacrosAutotools.cmake b/cmake/modules/MacrosAutotools.cmake index 8bb83cd..c333308 100644 --- a/cmake/modules/MacrosAutotools.cmake +++ b/cmake/modules/MacrosAutotools.cmake @@ -116,6 +116,71 @@ macro(autodefine name) endforeach() endmacro() +# +# fetch compiler warnings settings from autotools +# +# @param target_warnings the variable name which will contain the warnings keys +# @param target_disabled_warnings the variable name which will contain the disabled warnings keys +# +macro(autocompilerwarnings target_warnings target_disabled_warnings) + set(in_warnings 0) + set(content) + # parse configure_ac + foreach(line ${_configure_ac}) + if(line MATCHES ".*TP_COMPILER_WARNINGS.*") + set(in_warnings 1) + string(REGEX REPLACE "^.*TP_COMPILER_WARNINGS\\((.*)$" "\\1" temp ${line}) + set(content "${content}${temp}") + elseif(in_warnings EQUAL 1) + if(line MATCHES ".*dnl.*") + # skip + elseif(line MATCHES "\\)$") + string(REGEX REPLACE "(.*)\\)$" "\\1" temp ${line}) + set(content "${content}${temp}") + set(in_warnings 2) + else() + string(STRIP ${line} _line) + if(NOT _line STREQUAL "") + set(content "${content}${line}") + endif() + endif() + endif() + endforeach() + + # extract macro parts + string(REPLACE ";" "#" temp ${content}) + string(REPLACE "[" "" temp ${temp}) + string(REPLACE "]" "" temp ${temp}) + string(REPLACE "," ";" alist ${temp}) + list(GET alist 0 flag_name) + list(GET alist 2 warnings_flag) + list(GET alist 3 no_warnings_flag) + string(REPLACE "#" ";" warnings_list ${warnings_flag}) + string(REPLACE "#" ";" no_warnings_list ${no_warnings_flag}) + list(REMOVE_AT no_warnings_list 0) + + set(warnings) + foreach(warning ${warnings_list}) + string(STRIP ${warning} _warning) + if(NOT _warning STREQUAL "") + set(warnings "${warnings} ${_warning}") + endif() + endforeach() + set(${target_warnings} "${warnings}") + + set(warnings) + foreach(warning ${no_warnings_list}) + string(STRIP ${warning} _warning) + if(NOT _warning STREQUAL "") + set(warnings "${warnings} ${_warning}") + endif() + endforeach() + set(${target_disabled_warnings} "${warnings}") + if(DEBUG_MACROS) + message("autocompilerwarnings returns: warnings: ${${target_warnings}} disabled_warnings: ${${target_disabled_warnings}}") + endif() +endmacro() + macro(autoheaderchecks config_h_in configure_checks_file config_h_cmake) file(READ ${configure_checks_file} configure_checks_file_raw) file(READ ${config_h_in} _config_h_in_raw) -- 1.8.4.5