Build system: mention ghc version in bindist's `configure --help` docdir
[ghc.git] / mk / warnings.mk
1 # See Note [Order of warning flags].
2 SRC_CC_OPTS += -Wall $(WERROR)
3 SRC_HC_OPTS += -Wall
4 # Don't add -Werror to SRC_HC_OPTS_STAGE0 (or SRC_HC_OPTS), because otherwise
5 # validate may unnecessarily fail when booting with an older compiler.
6 # It would be better to only exclude certain warnings from becoming errors
7 # (e.g. '-Werror -Wno-error=unused-imports -Wno-error=...'), but -Wno-error
8 # isn't supported yet (https://ghc.haskell.org/trac/ghc/wiki/Design/Warnings).
9 #
10 # See Note [Stage number in build variables] in mk/config.mk.in.
11 SRC_HC_OPTS_STAGE1 += $(WERROR)
12 SRC_HC_OPTS_STAGE2 += $(WERROR)
13
14
15 ifneq "$(GccIsClang)" "YES"
16
17 # Debian doesn't turn -Werror=unused-but-set-variable on by default, so
18 # we turn it on explicitly for consistency with other users
19 ifeq "$(GccLT46)" "NO"
20 # Never set the flag on Windows as the host gcc may be too old.
21 ifneq "$(HostOS_CPP)" "mingw32"
22 SRC_CC_WARNING_OPTS += -Werror=unused-but-set-variable
23 endif
24 # gcc 4.6 gives 3 warning for giveCapabilityToTask not being inlined
25 SRC_CC_WARNING_OPTS += -Wno-error=inline
26 endif
27
28 ifeq "$(GccLT44)" "NO"
29 # Suppress the warning about __sync_fetch_and_nand (#9678).
30 libraries/ghc-prim/cbits/atomic_CC_OPTS += -Wno-sync-nand
31 endif
32
33 else
34
35 # Don't warn about unknown GCC pragmas when using clang
36 SRC_CC_WARNING_OPTS += -Wno-unknown-pragmas
37
38 endif
39
40 SRC_HC_WARNING_OPTS_STAGE1 += -Wnoncanonical-monad-instances
41 SRC_HC_WARNING_OPTS_STAGE2 += -Wnoncanonical-monad-instances
42
43
44 ######################################################################
45 # Disable some warnings in packages we use
46
47 # NB: The GHC version used for bootstrapping may not support the
48 # `-W`-aliases for `-f(no-)warn` flags introduced in GHC 8.0, so in
49 # some cases (watch out for make-variables with a name containing
50 # "boot") we need to pass the legacy `-f(no-)warn`-flags instead.
51
52 # Libraries that have dubious RULES
53 libraries/bytestring_dist-install_EXTRA_HC_OPTS += -Wno-inline-rule-shadowing
54
55 # Turn off import warnings for bad unused imports
56 utils/haddock_dist_EXTRA_HC_OPTS += -Wno-unused-imports
57 libraries/vector_dist-install_EXTRA_HC_OPTS += -Wno-unused-imports
58 libraries/directory_dist-install_EXTRA_HC_OPTS += -Wno-unused-imports
59
60 # haddock's attoparsec uses deprecated `inlinePerformIO`
61 utils/haddock_dist_EXTRA_HC_OPTS += -Wno-deprecations
62 # binary too
63 libraries/binary_dist-install_EXTRA_HC_OPTS += -Wno-deprecations
64
65 # On Windows, there are/were some unused import warnings
66 ifeq "$(HostOS_CPP)" "mingw32"
67 libraries/time_dist-install_EXTRA_HC_OPTS += -Wno-unused-imports -Wno-identities
68 endif
69
70 # On Windows, the pattern for CallConv is already exaustive. Ignore the warning
71 ifeq "$(HostOS_CPP)" "mingw32"
72 libraries/ghci_dist-install_EXTRA_HC_OPTS += -Wno-overlapping-patterns
73 endif
74
75 # haskeline has warnings about deprecated use of block/unblock
76 libraries/haskeline_dist-install_EXTRA_HC_OPTS += -Wno-deprecations
77 libraries/haskeline_dist-install_EXTRA_HC_OPTS += -Wno-unused-imports
78 libraries/haskeline_dist-install_EXTRA_HC_OPTS += -Wno-redundant-constraints
79 libraries/haskeline_dist-install_EXTRA_HC_OPTS += -Wno-simplifiable-class-constraints
80
81
82 # temporarily turn off unused-imports warnings for pretty
83 libraries/pretty_dist-install_EXTRA_HC_OPTS += -Wno-unused-imports
84
85 # primitive has a warning about deprecated use of GHC.IOBase
86 libraries/primitive_dist-install_EXTRA_HC_OPTS += -Wno-unused-imports
87 # primitive uses deprecated Control.Monad.Trans.Error
88 libraries/primitive_dist-install_EXTRA_HC_OPTS += -Wno-deprecations
89
90 # See https://github.com/haskell/random/pull/20
91 libraries/random_dist-install_EXTRA_HC_OPTS += -Wno-redundant-constraints
92
93 # temporarily turn off unused-imports warnings for terminfo
94 libraries/terminfo_dist-boot_EXTRA_HC_OPTS += -fno-warn-unused-imports
95 libraries/terminfo_dist-install_EXTRA_HC_OPTS += -Wno-unused-imports
96
97 # vector has some unused match warnings
98 libraries/vector_dist-install_EXTRA_HC_OPTS += -Wwarn
99
100 # temporarily turn off unused-imports warnings for xhtml
101 libraries/xhtml_dist-install_EXTRA_HC_OPTS += -Wno-unused-imports
102 libraries/xhtml_dist-install_EXTRA_HC_OPTS += -Wno-tabs
103
104 libraries/dph/dph-base_dist-install_EXTRA_HC_OPTS += -Wwarn
105 libraries/dph/dph-prim-interface_dist-install_EXTRA_HC_OPTS += -Wwarn
106 libraries/dph/dph-prim-seq_dist-install_EXTRA_HC_OPTS += -Wwarn
107 libraries/dph/dph-prim-par_dist-install_EXTRA_HC_OPTS += -Wwarn
108 libraries/dph/dph-lifted-common-install_EXTRA_HC_OPTS += -Wwarn
109
110 # transformers has unused function parameters warnings
111 libraries/transformers_dist-boot_EXTRA_HC_OPTS += -fno-warn-unused-matches -fno-warn-unused-imports
112 libraries/transformers_dist-install_EXTRA_HC_OPTS += -Wno-unused-matches -Wno-unused-imports
113 libraries/transformers_dist-install_EXTRA_HC_OPTS += -Wno-redundant-constraints
114 libraries/transformers_dist-install_EXTRA_HC_OPTS += -Wno-orphans
115
116 # Turn of trustworthy-safe warning
117 libraries/base_dist-install_EXTRA_HC_OPTS += -Wno-trustworthy-safe
118 libraries/ghc-prim_dist-install_EXTRA_HC_OPTS += -Wno-trustworthy-safe
119 libraries/Win32_dist-install_EXTRA_HC_OPTS += -Wno-trustworthy-safe
120
121 # We need -Wno-deprecated-flags to avoid failure with -Werror
122 GhcLibExtraHcOpts += -Wno-deprecated-flags
123 GhcBootLibExtraHcOpts += -fno-warn-deprecated-flags
124
125 # Note [Order of warning flags]
126 #
127 # In distdir-way-opts, build flags are added in the following order (this
128 # list is not exhaustive):
129 #
130 # * SRC_HC_OPTS(_STAGE$4)
131 # * ghc-options from .cabal files ($1_$2_HC_OPTS)
132 # * SRC_HC_WARNING_OPTS(_STAGE$4)
133 #
134 # Considerations:
135 #
136 # * Most .cabal files specify -Wall. But not all, and not all building we
137 # do relies on .cabal files. So we have to add -Wall ourselves somewhere.
138 #
139 # * Some .cabal also specify warning suppression flags. Because -Wall
140 # overrides any warning suppression flags that come before it, we have to
141 # make sure -Wall comes before any warning suppression flags. So we add it
142 # to SRC_HC_OPTS.
143 #
144 # * Similarly, our own warning suppression should come after the -Wall from
145 # the .cabal files, so we do *not* add them to SRC_HC_OPTS.