Disable same warnings for normal builds as for validate (#10223)
authorThomas Miedema <thomasmiedema@gmail.com>
Thu, 2 Apr 2015 09:41:47 +0000 (11:41 +0200)
committerThomas Miedema <thomasmiedema@gmail.com>
Thu, 2 Apr 2015 09:41:51 +0000 (11:41 +0200)
The default validate settings currently disable some warnings in the
libraries. This patch moves those settings to a new file called
`mk/warnings.mk`, and applies them also to normal builds.

Through uncommenting a line in build.mk, developers can now build with
-Werror.

-Werror is not the default, because:
* We can not guarantee that the build is warning free on platforms we
  don't run regularly run validate (as part of continuous integration
  systems), and we still want the build to go through on those
  platforms.
* quoting rwbarton on irc > "I think -Werror by default has come up in
  the past and the argument was that it is too annoying when you are
  doing nontrivial development"

Reviewed By: austin

Differential Revision: https://phabricator.haskell.org/D785

ghc.mk
mk/build.mk.sample
mk/validate-settings.mk
mk/warnings.mk [new file with mode: 0644]

diff --git a/ghc.mk b/ghc.mk
index 760ace2..3638a1b 100644 (file)
--- a/ghc.mk
+++ b/ghc.mk
@@ -148,9 +148,12 @@ endif
 endif
 
 include mk/ways.mk
+include mk/warnings.mk
 
 # (Optional) build-specific configuration
 include mk/custom-settings.mk
+SRC_CC_OPTS     += $(WERROR)
+SRC_HC_OPTS     += $(WERROR)
 
 ifeq "$(findstring clean,$(MAKECMDGOALS))" ""
 ifeq "$(DYNAMIC_GHC_PROGRAMS)" "YES"
@@ -694,17 +697,15 @@ stage1_libs : $(ALL_STAGE1_LIBS)
 # ----------------------------------------------
 # Per-package compiler flags
 #
-# If you want to add per-package compiler flags, this
-# is the place to do it.  Do it like this for package <pkg>
-#
-#   libraries/<pkg>_dist-boot_HC_OPTS += -Wwarn
-#   libraries/<pkg>_dist-install_HC_OPTS += -Wwarn
+# If you want to add per-package compiler flags, see `mk/warnings.mk`.
 
-# Add $(GhcLibHcOpts) to all package builds
+# Add $(GhcLib(Extra)HcOpts) to all package builds
 $(foreach pkg,$(PACKAGES_STAGE1) $(PACKAGES_STAGE2),$(eval libraries/$(pkg)_dist-install_HC_OPTS += $$(GhcLibHcOpts)))
+$(foreach pkg,$(PACKAGES_STAGE1) $(PACKAGES_STAGE2),$(eval libraries/$(pkg)_dist-install_EXTRA_HC_OPTS += $$(GhcLibExtraHcOpts)))
 
-# Add $(GhcBootLibHcOpts) to all stage0 package builds
+# Add $(GhcBootLib(Extra)HcOpts) to all stage0 package builds
 $(foreach pkg,$(PACKAGES_STAGE0),$(eval libraries/$(pkg)_dist-boot_HC_OPTS += $$(GhcBootLibHcOpts)))
+$(foreach pkg,$(PACKAGES_STAGE0),$(eval libraries/$(pkg)_dist-boot_EXTRA_HC_OPTS += $$(GhcBootLibExtraHcOpts)))
 
 # -----------------------------------------------------------------------------
 # Bootstrapping libraries
index 7befbc4..1e95bdd 100644 (file)
@@ -57,6 +57,9 @@
 # Please use V = 1 when reporting GHC bugs.
 V = 1
 
+# Should all enabled warnings (see mk/warnings.mk) be turned into errors?
+#WERROR=-Werror
+
 # After stage 1 and the libraries have been built, you can uncomment this line:
 
 #stage=2
index 44222d0..cfc7234 100644 (file)
@@ -2,43 +2,8 @@
 # override these.  See also mk/custom-settings.mk.
 
 WERROR              = -Werror
-SRC_CC_WARNING_OPTS =
-SRC_HC_WARNING_OPTS =
-
 HADDOCK_DOCS    = YES
 
-#####################
-# Warnings
-
-ifneq "$(GccIsClang)" "YES"
-
-# Debian doesn't turn -Werror=unused-but-set-variable on by default, so
-# we turn it on explicitly for consistency with other users
-ifeq "$(GccLT46)" "NO"
-# Never set the flag on Windows as the host gcc may be too old.
-ifneq "$(HostOS_CPP)" "mingw32"
-SRC_CC_WARNING_OPTS += -Werror=unused-but-set-variable
-endif
-# gcc 4.6 gives 3 warning for giveCapabilityToTask not being inlined
-SRC_CC_WARNING_OPTS += -Wno-error=inline
-endif
-
-else
-
-# Don't warn about unknown GCC pragmas when using clang
-SRC_CC_WARNING_OPTS += -Wno-unknown-pragmas
-
-endif
-
-SRC_CC_OPTS     += $(WERROR) -Wall
-SRC_HC_OPTS     += $(WERROR) -Wall
-
-GhcStage1HcOpts += -fwarn-tabs
-GhcStage2HcOpts += -fwarn-tabs
-
-utils/hpc_dist-install_EXTRA_HC_OPTS += -fwarn-tabs
-
-#####################
 SRC_HC_OPTS     += -H64m -O0
 
 GhcStage1HcOpts += -O
@@ -84,86 +49,3 @@ endif
 ifeq "$(ValidateSpeed)" "SLOW"
 GhcStage2HcOpts += -DDEBUG
 endif
-
-######################################################################
-# Disable some warnings in packages we use
-
-# Cabal doesn't promise to be warning-free
-utils/ghc-cabal_dist_EXTRA_HC_OPTS += -w
-libraries/Cabal/Cabal_dist-boot_EXTRA_HC_OPTS += -w
-libraries/Cabal/Cabal_dist-install_EXTRA_HC_OPTS += -w
-
-# Turn off import warnings for bad unused imports
-libraries/containers_dist-install_EXTRA_HC_OPTS += -fno-warn-unused-imports
-libraries/bytestring_dist-install_EXTRA_HC_OPTS += -fno-warn-unused-imports
-utils/haddock_dist_EXTRA_HC_OPTS += -fno-warn-unused-imports
-libraries/vector_dist-install_EXTRA_HC_OPTS += -fno-warn-unused-imports
-
-# haddock's attoparsec uses deprecated `inlinePerformIO`
-utils/haddock_dist_EXTRA_HC_OPTS += -fno-warn-deprecations
-
-# containers uses bitSize at the moment
-libraries/containers_dist-install_EXTRA_HC_OPTS += -fno-warn-deprecations
-libraries/containers_dist-install_EXTRA_HC_OPTS += -fno-warn-redundant-constraints
-
-# On Windows, there are also some unused import warnings
-ifeq "$(HostOS_CPP)" "mingw32"
-libraries/time_dist-install_EXTRA_HC_OPTS += -fno-warn-unused-imports -fno-warn-identities
-endif
-
-# haskeline has warnings about deprecated use of block/unblock
-libraries/haskeline_dist-install_EXTRA_HC_OPTS += -fno-warn-deprecations
-libraries/haskeline_dist-install_EXTRA_HC_OPTS += -fno-warn-unused-imports
-libraries/haskeline_dist-install_EXTRA_HC_OPTS += -fno-warn-redundant-constraints
-
-# binary upstream has some warnings, so don't use -Werror for it
-libraries/binary_dist-boot_EXTRA_HC_OPTS += -Wwarn
-libraries/binary_dist-install_EXTRA_HC_OPTS += -Wwarn
-
-# temporarily turn off unused-imports warnings for pretty
-libraries/pretty_dist-install_EXTRA_HC_OPTS += -fno-warn-unused-imports
-
-# primitive has a warning about deprecated use of GHC.IOBase
-libraries/primitive_dist-install_EXTRA_HC_OPTS += -fno-warn-unused-imports
-
-# temporarily turn off unused-imports warnings for terminfo
-libraries/terminfo_dist-boot_EXTRA_HC_OPTS += -fno-warn-unused-imports
-libraries/terminfo_dist-install_EXTRA_HC_OPTS += -fno-warn-unused-imports
-
-# vector has some unused match warnings
-libraries/vector_dist-install_EXTRA_HC_OPTS += -Wwarn
-
-# temporarily turn off unused-imports warnings for xhtml
-libraries/xhtml_dist-install_EXTRA_HC_OPTS += -fno-warn-unused-imports
-
-libraries/dph/dph-base_dist-install_EXTRA_HC_OPTS += -Wwarn
-libraries/dph/dph-prim-interface_dist-install_EXTRA_HC_OPTS += -Wwarn
-libraries/dph/dph-prim-seq_dist-install_EXTRA_HC_OPTS += -Wwarn
-libraries/dph/dph-prim-par_dist-install_EXTRA_HC_OPTS += -Wwarn
-libraries/dph/dph-lifted-common-install_EXTRA_HC_OPTS += -Wwarn
-
-# transformers has unused function parameters warnings
-libraries/transformers_dist-boot_EXTRA_HC_OPTS += -fno-warn-unused-matches -fno-warn-unused-imports
-libraries/transformers_dist-install_EXTRA_HC_OPTS += -fno-warn-unused-matches -fno-warn-unused-imports
-libraries/transformers_dist-install_EXTRA_HC_OPTS += -fno-warn-redundant-constraints
-
-# Turn of trustworthy-safe warning
-libraries/base_dist-install_EXTRA_HC_OPTS += -fno-warn-trustworthy-safe
-libraries/ghc-prim_dist-install_EXTRA_HC_OPTS += -fno-warn-trustworthy-safe
-libraries/Win32_dist-install_EXTRA_HC_OPTS += -fno-warn-trustworthy-safe
-
-# Temporarely disable inline rule shadowing warning
-libraries/template-haskell_dist-install_EXTRA_HC_OPTS += -fno-warn-inline-rule-shadowing
-
-# We need -fno-warn-deprecated-flags to avoid failure with -Werror
-GhcLibHcOpts += -fno-warn-deprecated-flags
-GhcBootLibHcOpts += -fno-warn-deprecated-flags
-
-# The warning suppression flag below is a temporary kludge. While working with
-# modules that contain tabs, please de-tab them so this flag can be eventually
-# removed. See
-# http://ghc.haskell.org/trac/ghc/wiki/Commentary/CodingStyle#TabsvsSpaces
-# for details
-#
-GhcLibHcOpts += -fno-warn-tabs
-GhcBootLibHcOpts += -fno-warn-tabs
diff --git a/mk/warnings.mk b/mk/warnings.mk
new file mode 100644 (file)
index 0000000..30e13ba
--- /dev/null
@@ -0,0 +1,118 @@
+SRC_CC_WARNING_OPTS =
+SRC_HC_WARNING_OPTS =
+
+
+#####################
+# Warnings
+
+ifneq "$(GccIsClang)" "YES"
+
+# Debian doesn't turn -Werror=unused-but-set-variable on by default, so
+# we turn it on explicitly for consistency with other users
+ifeq "$(GccLT46)" "NO"
+# Never set the flag on Windows as the host gcc may be too old.
+ifneq "$(HostOS_CPP)" "mingw32"
+SRC_CC_WARNING_OPTS += -Werror=unused-but-set-variable
+endif
+# gcc 4.6 gives 3 warning for giveCapabilityToTask not being inlined
+SRC_CC_WARNING_OPTS += -Wno-error=inline
+endif
+
+else
+
+# Don't warn about unknown GCC pragmas when using clang
+SRC_CC_WARNING_OPTS += -Wno-unknown-pragmas
+
+endif
+
+SRC_CC_OPTS     += -Wall
+SRC_HC_OPTS     += -Wall
+
+GhcStage1HcOpts += -fwarn-tabs
+GhcStage2HcOpts += -fwarn-tabs
+
+utils/hpc_dist-install_EXTRA_HC_OPTS += -fwarn-tabs
+
+
+######################################################################
+# Disable some warnings in packages we use
+
+# Cabal doesn't promise to be warning-free
+utils/ghc-cabal_dist_EXTRA_HC_OPTS += -w
+libraries/Cabal/Cabal_dist-boot_EXTRA_HC_OPTS += -w
+libraries/Cabal/Cabal_dist-install_EXTRA_HC_OPTS += -w
+
+# Turn off import warnings for bad unused imports
+libraries/containers_dist-install_EXTRA_HC_OPTS += -fno-warn-unused-imports
+libraries/bytestring_dist-install_EXTRA_HC_OPTS += -fno-warn-unused-imports
+utils/haddock_dist_EXTRA_HC_OPTS += -fno-warn-unused-imports
+libraries/vector_dist-install_EXTRA_HC_OPTS += -fno-warn-unused-imports
+
+# haddock's attoparsec uses deprecated `inlinePerformIO`
+utils/haddock_dist_EXTRA_HC_OPTS += -fno-warn-deprecations
+
+# containers uses bitSize at the moment
+libraries/containers_dist-install_EXTRA_HC_OPTS += -fno-warn-deprecations
+libraries/containers_dist-install_EXTRA_HC_OPTS += -fno-warn-redundant-constraints
+
+# On Windows, there are also some unused import warnings
+ifeq "$(HostOS_CPP)" "mingw32"
+libraries/time_dist-install_EXTRA_HC_OPTS += -fno-warn-unused-imports -fno-warn-identities
+endif
+
+# haskeline has warnings about deprecated use of block/unblock
+libraries/haskeline_dist-install_EXTRA_HC_OPTS += -fno-warn-deprecations
+libraries/haskeline_dist-install_EXTRA_HC_OPTS += -fno-warn-unused-imports
+libraries/haskeline_dist-install_EXTRA_HC_OPTS += -fno-warn-redundant-constraints
+
+# binary upstream has some warnings, so don't use -Werror for it
+libraries/binary_dist-boot_EXTRA_HC_OPTS += -Wwarn
+libraries/binary_dist-install_EXTRA_HC_OPTS += -Wwarn
+
+# temporarily turn off unused-imports warnings for pretty
+libraries/pretty_dist-install_EXTRA_HC_OPTS += -fno-warn-unused-imports
+
+# primitive has a warning about deprecated use of GHC.IOBase
+libraries/primitive_dist-install_EXTRA_HC_OPTS += -fno-warn-unused-imports
+
+# temporarily turn off unused-imports warnings for terminfo
+libraries/terminfo_dist-boot_EXTRA_HC_OPTS += -fno-warn-unused-imports
+libraries/terminfo_dist-install_EXTRA_HC_OPTS += -fno-warn-unused-imports
+
+# vector has some unused match warnings
+libraries/vector_dist-install_EXTRA_HC_OPTS += -Wwarn
+
+# temporarily turn off unused-imports warnings for xhtml
+libraries/xhtml_dist-install_EXTRA_HC_OPTS += -fno-warn-unused-imports
+
+libraries/dph/dph-base_dist-install_EXTRA_HC_OPTS += -Wwarn
+libraries/dph/dph-prim-interface_dist-install_EXTRA_HC_OPTS += -Wwarn
+libraries/dph/dph-prim-seq_dist-install_EXTRA_HC_OPTS += -Wwarn
+libraries/dph/dph-prim-par_dist-install_EXTRA_HC_OPTS += -Wwarn
+libraries/dph/dph-lifted-common-install_EXTRA_HC_OPTS += -Wwarn
+
+# transformers has unused function parameters warnings
+libraries/transformers_dist-boot_EXTRA_HC_OPTS += -fno-warn-unused-matches -fno-warn-unused-imports
+libraries/transformers_dist-install_EXTRA_HC_OPTS += -fno-warn-unused-matches -fno-warn-unused-imports
+libraries/transformers_dist-install_EXTRA_HC_OPTS += -fno-warn-redundant-constraints
+
+# Turn of trustworthy-safe warning
+libraries/base_dist-install_EXTRA_HC_OPTS += -fno-warn-trustworthy-safe
+libraries/ghc-prim_dist-install_EXTRA_HC_OPTS += -fno-warn-trustworthy-safe
+libraries/Win32_dist-install_EXTRA_HC_OPTS += -fno-warn-trustworthy-safe
+
+# Temporarely disable inline rule shadowing warning
+libraries/template-haskell_dist-install_EXTRA_HC_OPTS += -fno-warn-inline-rule-shadowing
+
+# We need -fno-warn-deprecated-flags to avoid failure with -Werror
+GhcLibExtraHcOpts += -fno-warn-deprecated-flags
+GhcBootLibExtraHcOpts += -fno-warn-deprecated-flags
+
+# The warning suppression flag below is a temporary kludge. While working with
+# modules that contain tabs, please de-tab them so this flag can be eventually
+# removed. See
+# http://ghc.haskell.org/trac/ghc/wiki/Commentary/CodingStyle#TabsvsSpaces
+# for details
+#
+GhcLibExtraHcOpts += -fno-warn-tabs
+GhcBootLibExtraHcOpts += -fno-warn-tabs