Git fork
1ifndef COMPILER_FEATURES
2COMPILER_FEATURES := $(shell ./detect-compiler $(CC))
3endif
4
5ifeq ($(filter no-error,$(DEVOPTS)),)
6DEVELOPER_CFLAGS += -Werror
7SPARSE_FLAGS += -Wsparse-error
8endif
9
10DEVELOPER_CFLAGS += -Wall
11ifeq ($(filter no-pedantic,$(DEVOPTS)),)
12DEVELOPER_CFLAGS += -pedantic
13ifneq ($(or $(filter gcc5,$(COMPILER_FEATURES)),$(filter clang4,$(COMPILER_FEATURES))),)
14DEVELOPER_CFLAGS += -Wpedantic
15ifneq ($(filter gcc10,$(COMPILER_FEATURES)),)
16ifeq ($(uname_S),MINGW)
17DEVELOPER_CFLAGS += -Wno-pedantic-ms-format
18endif
19endif
20endif
21endif
22
23ifneq ($(uname_S),FreeBSD)
24ifneq ($(or $(filter gcc6,$(COMPILER_FEATURES)),$(filter clang7,$(COMPILER_FEATURES))),)
25DEVELOPER_CFLAGS += -std=gnu99
26endif
27else
28# FreeBSD cannot limit to C99 because its system headers unconditionally
29# rely on C11 features.
30endif
31
32DEVELOPER_CFLAGS += -Wdeclaration-after-statement
33DEVELOPER_CFLAGS += -Wformat-security
34DEVELOPER_CFLAGS += -Wold-style-definition
35DEVELOPER_CFLAGS += -Woverflow
36DEVELOPER_CFLAGS += -Wpointer-arith
37DEVELOPER_CFLAGS += -Wstrict-prototypes
38DEVELOPER_CFLAGS += -Wunused
39DEVELOPER_CFLAGS += -Wvla
40DEVELOPER_CFLAGS += -Wwrite-strings
41DEVELOPER_CFLAGS += -fno-common
42DEVELOPER_CFLAGS += -Wunreachable-code
43
44ifneq ($(filter clang9,$(COMPILER_FEATURES)),)
45DEVELOPER_CFLAGS += -Wcomma
46endif
47
48ifneq ($(filter clang4,$(COMPILER_FEATURES)),)
49DEVELOPER_CFLAGS += -Wtautological-constant-out-of-range-compare
50endif
51
52ifneq ($(or $(filter gcc6,$(COMPILER_FEATURES)),$(filter clang4,$(COMPILER_FEATURES))),)
53DEVELOPER_CFLAGS += -Wextra
54# if a function is public, there should be a prototype and the right
55# header file should be included. If not, it should be static.
56DEVELOPER_CFLAGS += -Wmissing-prototypes
57ifeq ($(filter extra-all,$(DEVOPTS)),)
58# These are disabled because we have these all over the place.
59DEVELOPER_CFLAGS += -Wno-empty-body
60DEVELOPER_CFLAGS += -Wno-missing-field-initializers
61endif
62endif
63
64# uninitialized warnings on gcc 4.9.2 in xdiff/xdiffi.c and config.c
65# not worth fixing since newer compilers correctly stop complaining
66#
67# Likewise, gcc older than 4.9 complains about initializing a
68# struct-within-a-struct using just "{ 0 }"
69ifneq ($(filter gcc4,$(COMPILER_FEATURES)),)
70ifeq ($(filter gcc5,$(COMPILER_FEATURES)),)
71DEVELOPER_CFLAGS += -Wno-uninitialized
72DEVELOPER_CFLAGS += -Wno-missing-braces
73endif
74endif
75
76# Old versions of clang complain about initializing a
77# struct-within-a-struct using just "{0}" rather than "{{0}}". This
78# error is considered a false-positive and not worth fixing, because
79# new clang versions do not, so just disable it.
80#
81# The "bug" was fixed in upstream clang 9.
82#
83# Complicating this is that versions of clang released by Apple have
84# their own version numbers (associated with the corresponding version
85# of XCode) unrelated to the official clang version numbers.
86#
87# The bug was fixed in Apple clang 12.
88#
89ifneq ($(filter clang1,$(COMPILER_FEATURES)),) # if we are using clang
90ifeq ($(uname_S),Darwin) # if we are on darwin
91ifeq ($(filter clang12,$(COMPILER_FEATURES)),) # if version < 12
92DEVELOPER_CFLAGS += -Wno-missing-braces
93endif
94else # not darwin
95ifeq ($(filter clang9,$(COMPILER_FEATURES)),) # if version < 9
96DEVELOPER_CFLAGS += -Wno-missing-braces
97endif
98endif
99endif
100
101# https://bugzilla.redhat.com/show_bug.cgi?id=2075786
102ifneq ($(filter gcc12,$(COMPILER_FEATURES)),)
103DEVELOPER_CFLAGS += -Wno-error=stringop-overread
104endif
105
106GIT_TEST_PERL_FATAL_WARNINGS = YesPlease