]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUILD: makefile: split WARN_CFLAGS from SPEC_CFLAGS
authorWilly Tarreau <w@1wt.eu>
Thu, 11 Apr 2024 13:29:42 +0000 (15:29 +0200)
committerWilly Tarreau <w@1wt.eu>
Thu, 11 Apr 2024 15:33:28 +0000 (17:33 +0200)
It's currently not possible to only set some -Wno... without breaking
the -W... and conversely. Let's split both sets apart so that it's now
possible to set -W... alone in WARN_CFLAGS to enable only some warnings,
and pass the -Wno... in SPEC_CFLAGS without losing the enabled ones.

INSTALL
Makefile

diff --git a/INSTALL b/INSTALL
index 1a1da4d152e931b8e95f13d7dad93f4a8c8c8080..ee358bda49395b6253afc9a5cf9904c2794449bd 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -670,6 +670,14 @@ variable, FAILFAST enables -Wfatal-errors when set to non-empty except 0, and
 makes the compiler stop at the first error instead of scrolling pages. It's
 essentially a matter of taste.
 
+Packagers who want to achieve the cleanest warning-free builds may be
+interested in knowing that all enabled warnings are normally placed into
+the WARN_CFLAGS variable. The variable contains a list of pre-established
+warnings and a list of some that are dynamically detected on the compiler.
+If the build environment or toolchain doesn't even support some of the basic
+ones, it is then possible to just redefine them by passing the main ones in
+WARN_CFLAGS (e.g. at the very least -W -Wall).
+
 The DEBUG variable is used to extend the CFLAGS and is preset to a list of
 build-time options that are known for providing significant reliability
 improvements and a barely perceptible performance cost. Unless instructed to do
index 448499b5e081b5357dce228cc20891c0b82edff8..418807f17fdba1adfe71c0d0498712acd5f145ce 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -83,6 +83,7 @@
 #   DEBUG may be used to set some internal debugging options.
 #   ERR may be set to non-empty to pass -Werror to the compiler
 #   FAILFAST may be set to non-empty to pass -Wfatal-errors to the compiler
+#   WARN_CFLAGS overrides the default set of enabled warning options
 #   ADDINC may be used to complete the include path in the form -Ipath.
 #   ADDLIB may be used to complete the library list in the form -Lpath -llib.
 #   DEFINE may be used to specify any additional define, which will be reported
@@ -203,13 +204,15 @@ REG_TEST_SCRIPT=./scripts/run-regtests.sh
 # It is preferable not to change this option in order to avoid breakage.
 STD_CFLAGS  := $(call cc-opt-alt,-fwrapv,-fno-strict-overflow)
 
-#### Compiler-specific flags to enable/disable certain classes of warnings.
-WARN_CFLAGS := -Wtype-limits -Wshift-negative-value -Wshift-overflow=2 \
-               -Wduplicated-cond -Wnull-dereference
-SPEC_CFLAGS := -Wall -Wextra -Wundef -Wdeclaration-after-statement
-SPEC_CFLAGS += $(call cc-all-fast,$(WARN_CFLAGS))
+#### Compiler-specific flags to enable certain classes of warnings.
+# Some are hard-coded, others are enabled only if supported.
+WARN_CFLAGS := -Wall -Wextra -Wundef -Wdeclaration-after-statement            \
+               $(call cc-all-fast,                                            \
+                 -Wtype-limits -Wshift-negative-value -Wshift-overflow=2      \
+                 -Wduplicated-cond -Wnull-dereference)
 
-SPEC_CFLAGS += $(cc-wnouwo)
+#### Compiler-specific flags to enable certain classes of warnings.
+SPEC_CFLAGS := $(cc-wnouwo)
 SPEC_CFLAGS += $(call cc-nowarn,address-of-packed-member)
 SPEC_CFLAGS += $(call cc-nowarn,unused-label)
 SPEC_CFLAGS += $(call cc-nowarn,sign-compare)
@@ -486,7 +489,7 @@ $(set_target_defaults)
 # linking with it by default as it's not always available nor deployed
 # (especially on archs which do not need it).
 ifneq ($(USE_THREAD:0=),)
-  ifneq ($(shell $(CC) $(OPT_CFLAGS) $(ARCH_FLAGS) $(CPU_CFLAGS) $(DEBUG_CFLAGS) $(STD_CFLAGS) $(SPEC_CFLAGS) $(ERROR_CFLAGS) $(CFLAGS) -dM -E -xc - </dev/null 2>/dev/null | grep -c 'LOCK_FREE.*1'),0)
+  ifneq ($(shell $(CC) $(OPT_CFLAGS) $(ARCH_FLAGS) $(CPU_CFLAGS) $(DEBUG_CFLAGS) $(STD_CFLAGS) $(WARN_CFLAGS) $(SPEC_CFLAGS) $(ERROR_CFLAGS) $(CFLAGS) -dM -E -xc - </dev/null 2>/dev/null | grep -c 'LOCK_FREE.*1'),0)
     USE_LIBATOMIC   = implicit
   endif
 endif
@@ -855,10 +858,10 @@ endif
 $(collect_opts_flags)
 
 #### Global compile options
-VERBOSE_CFLAGS = $(OPT_CFLAGS) $(ARCH_FLAGS) $(CPU_CFLAGS) $(DEBUG_CFLAGS) $(STD_CFLAGS) $(SPEC_CFLAGS) $(TARGET_CFLAGS) $(CFLAGS) $(DEFINE)
+VERBOSE_CFLAGS = $(OPT_CFLAGS) $(ARCH_FLAGS) $(CPU_CFLAGS) $(DEBUG_CFLAGS) $(STD_CFLAGS) $(WARN_CFLAGS) $(SPEC_CFLAGS) $(TARGET_CFLAGS) $(CFLAGS) $(DEFINE)
 COPTS  = -Iinclude
 
-COPTS += $(OPT_CFLAGS) $(ARCH_FLAGS) $(CPU_CFLAGS) $(DEBUG_CFLAGS) $(STD_CFLAGS) $(SPEC_CFLAGS) $(ERROR_CFLAGS) $(TARGET_CFLAGS) $(DEFINE) $(SILENT_DEFINE)
+COPTS += $(OPT_CFLAGS) $(ARCH_FLAGS) $(CPU_CFLAGS) $(DEBUG_CFLAGS) $(STD_CFLAGS) $(WARN_CFLAGS) $(SPEC_CFLAGS) $(ERROR_CFLAGS) $(TARGET_CFLAGS) $(DEFINE) $(SILENT_DEFINE)
 COPTS += $(DEBUG) $(OPTIONS_CFLAGS) $(CFLAGS) $(ADDINC)
 
 ifneq ($(VERSION)$(SUBVERS)$(EXTRAVERSION),)
@@ -1168,6 +1171,7 @@ opts:
        @echo -n 'CPU_CFLAGS="$(strip $(CPU_CFLAGS))" '
        @echo -n 'DEBUG_CFLAGS="$(strip $(DEBUG_CFLAGS))" '
        @echo -n 'STD_CFLAGS="$(strip $(STD_CFLAGS))" '
+       @echo -n 'WARN_CFLAGS="$(strip $(WARN_CFLAGS))" '
        @echo -n 'ERROR_CFLAGS="$(strip $(ERROR_CFLAGS))" '
        @echo -n 'CFLAGS="$(strip $(CFLAGS))" '
        @#echo "$(strip $(BUILD_OPTIONS))"