Browse Source
The build procedure "make DEVELOPER=YesPlease" learned to enable a bit more warning options depending on the compiler used to help developers more. There also is "make DEVOPTS=tokens" knob available now, for those who want to help fixing warnings we usually ignore, for example. * nd/warn-more-for-devs: Makefile: add a DEVOPTS to get all of -Wextra Makefile: add a DEVOPTS to suppress -Werror under DEVELOPER Makefile: detect compiler and enable more warnings in DEVELOPER=1 connect.c: mark die_initial_contact() NORETURNmaint
Junio C Hamano
7 years ago
4 changed files with 117 additions and 11 deletions
@ -0,0 +1,42 @@
@@ -0,0 +1,42 @@
|
||||
ifeq ($(filter no-error,$(DEVOPTS)),) |
||||
CFLAGS += -Werror |
||||
endif |
||||
CFLAGS += -Wdeclaration-after-statement |
||||
CFLAGS += -Wno-format-zero-length |
||||
CFLAGS += -Wold-style-definition |
||||
CFLAGS += -Woverflow |
||||
CFLAGS += -Wpointer-arith |
||||
CFLAGS += -Wstrict-prototypes |
||||
CFLAGS += -Wunused |
||||
CFLAGS += -Wvla |
||||
|
||||
ifndef COMPILER_FEATURES |
||||
COMPILER_FEATURES := $(shell ./detect-compiler $(CC)) |
||||
endif |
||||
|
||||
ifneq ($(filter clang4,$(COMPILER_FEATURES)),) |
||||
CFLAGS += -Wtautological-constant-out-of-range-compare |
||||
endif |
||||
|
||||
ifneq ($(or $(filter gcc6,$(COMPILER_FEATURES)),$(filter clang4,$(COMPILER_FEATURES))),) |
||||
CFLAGS += -Wextra |
||||
# if a function is public, there should be a prototype and the right |
||||
# header file should be included. If not, it should be static. |
||||
CFLAGS += -Wmissing-prototypes |
||||
ifeq ($(filter extra-all,$(DEVOPTS)),) |
||||
# These are disabled because we have these all over the place. |
||||
CFLAGS += -Wno-empty-body |
||||
CFLAGS += -Wno-missing-field-initializers |
||||
CFLAGS += -Wno-sign-compare |
||||
CFLAGS += -Wno-unused-function |
||||
CFLAGS += -Wno-unused-parameter |
||||
endif |
||||
endif |
||||
|
||||
# uninitialized warnings on gcc 4.9.2 in xdiff/xdiffi.c and config.c |
||||
# not worth fixing since newer compilers correctly stop complaining |
||||
ifneq ($(filter gcc4,$(COMPILER_FEATURES)),) |
||||
ifeq ($(filter gcc5,$(COMPILER_FEATURES)),) |
||||
CFLAGS += -Wno-uninitialized |
||||
endif |
||||
endif |
@ -0,0 +1,53 @@
@@ -0,0 +1,53 @@
|
||||
#!/bin/sh |
||||
# |
||||
# Probe the compiler for vintage, version, etc. This is used for setting |
||||
# optional make knobs under the DEVELOPER knob. |
||||
|
||||
CC="$*" |
||||
|
||||
# we get something like (this is at least true for gcc and clang) |
||||
# |
||||
# FreeBSD clang version 3.4.1 (tags/RELEASE...) |
||||
get_version_line() { |
||||
$CC -v 2>&1 | grep ' version ' |
||||
} |
||||
|
||||
get_family() { |
||||
get_version_line | sed 's/^\(.*\) version [0-9][^ ]* .*/\1/' |
||||
} |
||||
|
||||
get_version() { |
||||
get_version_line | sed 's/^.* version \([0-9][^ ]*\) .*/\1/' |
||||
} |
||||
|
||||
print_flags() { |
||||
family=$1 |
||||
version=$(get_version | cut -f 1 -d .) |
||||
|
||||
# Print a feature flag not only for the current version, but also |
||||
# for any prior versions we encompass. This avoids needing to do |
||||
# numeric comparisons in make, which are awkward. |
||||
while test "$version" -gt 0 |
||||
do |
||||
echo $family$version |
||||
version=$((version - 1)) |
||||
done |
||||
} |
||||
|
||||
case "$(get_family)" in |
||||
gcc) |
||||
print_flags gcc |
||||
;; |
||||
clang) |
||||
print_flags clang |
||||
;; |
||||
"FreeBSD clang") |
||||
print_flags clang |
||||
;; |
||||
"Apple LLVM") |
||||
print_flags clang |
||||
;; |
||||
*) |
||||
: unknown compiler family |
||||
;; |
||||
esac |
Loading…
Reference in new issue