Makefile: restrict -Wpedantic and -Wno-pedantic-ms-format better

6a8cbc41ba (developer: enable pedantic by default, 2021-09-03) enables pedantic mode in as many compilers as possible to help gather feedback on future tightening, so lets do so. -Wpedantic is missing in some really old gcc 4 versions so lets restrict it to gcc5 and clang4 (it does work in clang3 AFAIK, but it will be unlikely that a developer will use such an old compiler anyway). MinGW gcc is the only one which has -Wno-pedantic-ms-format, and while that is available also in older compilers, the Windows SDK provides gcc10 so lets aim for that. Note that in order to target the flag to only Windows, additional changes were needed in config.mak.uname to propagate the OS detection which also did some minor refactoring, but which is functionaly equivalent. Helped-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Carlo Marcelo Arenas Belón <carenas@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Carlo Marcelo Arenas Belón committed Sep 28, 2021 at 20:19 UTC ebd2e4a13a05852fd30dd5ed8aa018c14000a161
2 files changed +11 -2
config.mak.dev
+6 -1
@@ -6,14 +6,19 @@ ifeq ($(filter no-error,$(DEVOPTS)),)
6 DEVELOPER_CFLAGS += -Werror
7 SPARSE_FLAGS += -Wsparse-error
8 endif
9 +
10 DEVELOPER_CFLAGS += -Wall
11 ifeq ($(filter no-pedantic,$(DEVOPTS)),)
12 DEVELOPER_CFLAGS += -pedantic
13 +ifneq (($or $(filter gcc5,$(COMPILER_FEATURES)),$(filter clang4,$(COMPILER_FEATURES))),)
14 DEVELOPER_CFLAGS += -Wpedantic
13 -ifneq ($(filter gcc5,$(COMPILER_FEATURES)),)
15 +ifneq ($(filter gcc10,$(COMPILER_FEATURES)),)
16 +ifeq ($(uname_S),MINGW)
17 DEVELOPER_CFLAGS += -Wno-pedantic-ms-format
18 endif
19 endif
20 +endif
21 +endif
22 DEVELOPER_CFLAGS += -Wdeclaration-after-statement
23 DEVELOPER_CFLAGS += -Wformat-security
24 DEVELOPER_CFLAGS += -Wold-style-definition
config.mak.uname
+5 -1
@@ -11,6 +11,10 @@ uname_R := $(shell sh -c 'uname -r 2>/dev/null || echo not')
11 uname_P := $(shell sh -c 'uname -p 2>/dev/null || echo not')
12 uname_V := $(shell sh -c 'uname -v 2>/dev/null || echo not')
13
14 +ifneq ($(findstring MINGW,$(uname_S)),)
15 + uname_S := MINGW
16 +endif
17 +
18 ifdef MSVC
19 # avoid the MingW and Cygwin configuration sections
20 uname_S := Windows
@@ -588,7 +592,7 @@ ifeq ($(uname_S),NONSTOP_KERNEL)
592 SANE_TOOL_PATH = /usr/coreutils/bin:/usr/local/bin
593 SHELL_PATH = /usr/coreutils/bin/bash
594 endif
591 -ifneq (,$(findstring MINGW,$(uname_S)))
595 +ifeq ($(uname_S),MINGW)
596 pathsep = ;
597 HAVE_ALLOCA_H = YesPlease
598 NO_PREAD = YesPlease