diff options
Diffstat (limited to 'nss/coreconf/Werror.mk')
-rw-r--r-- | nss/coreconf/Werror.mk | 125 |
1 files changed, 80 insertions, 45 deletions
diff --git a/nss/coreconf/Werror.mk b/nss/coreconf/Werror.mk index 6e2588c..69155eb 100644 --- a/nss/coreconf/Werror.mk +++ b/nss/coreconf/Werror.mk @@ -3,68 +3,103 @@ # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. -# This sets warning flags for unix-like operating systems. +# This sets WARNING_CFLAGS for gcc-like compilers. + +ifndef CC_IS_CLANG + CC_IS_CLANG := $(and $(findstring clang, $(shell $(CC) --version 2>&1)), 1) + # Export CC_IS_CLANG to save a shell invocation when recursing. + export CC_IS_CLANG +endif + +ifdef CC_IS_CLANG + # Clang claims GCC 4.2.1 compatibility, see GCC_VERSION + CC_IS_GCC = 1 + # Export CC_IS_GCC to save a shell invocation when recursing. + export CC_IS_GCC +endif + +ifndef CC_IS_GCC + CC_IS_GCC := $(shell $(CC) -x c -E -Wall -Werror /dev/null >/dev/null 2>&1 && echo 1) + # Export CC_IS_GCC to save a shell invocation when recursing. + export CC_IS_GCC +endif ifndef CC_NAME - CC_NAME := $(shell $(CC) -? 2>&1 >/dev/null | sed -e 's/:.*//;1q') + ifeq (1,$(CC_IS_GCC)) + CC_NAME := $(shell $(CC) -? 2>&1 >/dev/null | sed -e 's/:.*//;1q') + else + CC_NAME := $(notdir $(CC)) + endif + # Export CC_NAME to save a shell invocation when recursing. export CC_NAME endif +ifndef GCC_VERSION + ifeq (1,$(CC_IS_GCC)) + GCC_VERSION := $(subst ., ,$(shell $(CC) -dumpversion || echo x.x.x)) + # Export GCC_VERSION to save a shell invocation when recursing. + export GCC_VERSION + endif +endif + ifndef WARNING_CFLAGS - # This tests to see if enabling the warning is possible before - # setting an option to disable it. - disable_warning = $(shell $(CC) -x c -E -Werror -W$(1) /dev/null >/dev/null 2>&1 && echo -Wno-$(1)) + ifneq (1,$(CC_IS_GCC)) + WARNING_CFLAGS = $(NULL) + else + # This tests to see if enabling the warning is possible before + # setting an option to disable it. + disable_warning = $(shell $(CC) -x c -E -Werror -W$(1) /dev/null >/dev/null 2>&1 && echo -Wno-$(1)) - WARNING_CFLAGS = -Wall - ifeq ($(CC_NAME),clang) - # -Qunused-arguments : clang objects to arguments that it doesn't understand - # and fixing this would require rearchitecture - WARNING_CFLAGS += -Qunused-arguments - # -Wno-parentheses-equality : because clang warns about macro expansions - OS_CFLAGS += $(call disable_warning,parentheses-equality) - ifdef BUILD_OPT - # clang is unable to handle glib's expansion of strcmp and similar for optimized - # builds, so ignore the resulting errors. - # See https://llvm.org/bugs/show_bug.cgi?id=20144 - WARNING_CFLAGS += $(call disable_warning,array-bounds) - WARNING_CFLAGS += $(call disable_warning,unevaluated-expression) - endif - endif # if clang + WARNING_CFLAGS = -Wall + ifdef CC_IS_CLANG + # -Qunused-arguments : clang objects to arguments that it doesn't understand + # and fixing this would require rearchitecture + WARNING_CFLAGS += -Qunused-arguments + # -Wno-parentheses-equality : because clang warns about macro expansions + WARNING_CFLAGS += $(call disable_warning,parentheses-equality) + ifdef BUILD_OPT + # clang is unable to handle glib's expansion of strcmp and similar for optimized + # builds, so ignore the resulting errors. + # See https://llvm.org/bugs/show_bug.cgi?id=20144 + WARNING_CFLAGS += $(call disable_warning,array-bounds) + WARNING_CFLAGS += $(call disable_warning,unevaluated-expression) + endif + endif # if clang - ifndef NSS_ENABLE_WERROR - ifeq ($(OS_TARGET),Android) - # Android lollipop generates the following warning: - # error: call to 'sprintf' declared with attribute warning: - # sprintf is often misused; please use snprintf [-Werror] - # So, just suppress -Werror entirely on Android - NSS_ENABLE_WERROR = 0 - $(warning OS_TARGET is Android, disabling -Werror) - else - ifeq ($(CC_NAME),clang) - # Clang reports its version as an older gcc, but it's OK - NSS_ENABLE_WERROR = 1 + ifndef NSS_ENABLE_WERROR + ifeq ($(OS_TARGET),Android) + # Android lollipop generates the following warning: + # error: call to 'sprintf' declared with attribute warning: + # sprintf is often misused; please use snprintf [-Werror] + # So, just suppress -Werror entirely on Android + NSS_ENABLE_WERROR = 0 + $(warning OS_TARGET is Android, disabling -Werror) else - CC_VERSION := $(subst ., ,$(shell $(CC) -dumpversion)) - ifneq (,$(filter 4.8 4.9,$(word 1,$(CC_VERSION)).$(word 2,$(CC_VERSION)))) - NSS_ENABLE_WERROR = 1 - endif - ifeq (,$(filter 0 1 2 3 4,$(word 1,$(CC_VERSION)))) + ifdef CC_IS_CLANG + # Clang reports its version as an older gcc, but it's OK NSS_ENABLE_WERROR = 1 + else + ifneq (,$(filter 4.8 4.9,$(word 1,$(GCC_VERSION)).$(word 2,$(GCC_VERSION)))) + NSS_ENABLE_WERROR = 1 + endif + ifeq (,$(filter 0 1 2 3 4,$(word 1,$(GCC_VERSION)))) + NSS_ENABLE_WERROR = 1 + endif endif ifndef NSS_ENABLE_WERROR $(warning Unable to find gcc 4.8 or greater, disabling -Werror) NSS_ENABLE_WERROR = 0 endif endif - endif - endif #ndef NSS_ENABLE_WERROR + endif #ndef NSS_ENABLE_WERROR - ifeq ($(NSS_ENABLE_WERROR),1) - WARNING_CFLAGS += -Werror - else - # Old versions of gcc (< 4.8) don't support #pragma diagnostic in functions. - # Use this to disable use of that #pragma and the warnings it suppresses. - WARNING_CFLAGS += -DNSS_NO_GCC48 + ifeq ($(NSS_ENABLE_WERROR),1) + WARNING_CFLAGS += -Werror + else + # Old versions of gcc (< 4.8) don't support #pragma diagnostic in functions. + # Use this to disable use of that #pragma and the warnings it suppresses. + WARNING_CFLAGS += -DNSS_NO_GCC48 + endif endif export WARNING_CFLAGS endif # ndef WARNING_CFLAGS |