We shouldn't be hard-coding user preferences into the cabal file that
everyone uses. Instead, GHC should support a variable like CFLAGS that
lets users and developers specify what warnings and optimizations
they would like to use. Instead, we have to fake it: I've standardized
the Gentoo HCFLAGS variable within the makefile, so that a few warnings
will be appended to the (exported) environment variable but otherwise
no flags will be forced by the cabal file.
This should work for me when I'm developing, because the warnings will
be appended to the HCFLAGS="-O2" that I have set in my environment. It
will work on Gentoo, because HCFLAGS are already passed to the cabal
build system in Gentoo. It will work(ish) everywhere else, because
nothing will get passed to the cabal build system, and that's okay.
- ghc-options:
- -Weverything
- -Wno-implicit-prelude
- -Wno-safe
- -Wno-unsafe
- -Wno-all-missed-specialisations
- -rtsopts
- -threaded
- -optc-O3
- -optc-march=native
-
test-suite doctests
type: exitcode-stdio-1.0
test-suite doctests
type: exitcode-stdio-1.0
doctest >= 0.9,
filemanip >= 0.3.6
doctest >= 0.9,
filemanip >= 0.3.6
- -- It's not entirely clear to me why I have to reproduce all of this.
- ghc-options:
- -Weverything
- -Wno-implicit-prelude
- -Wno-safe
- -Wno-unsafe
- -Wno-all-missed-specialisations
- -rtsopts
- -threaded
- -optc-O3
- -optc-march=native
-
-- These won't work without shelltestrunner installed in your
-- $PATH. Maybe there is some way to tell Cabal that.
-- These won't work without shelltestrunner installed in your
-- $PATH. Maybe there is some way to tell Cabal that.
base == 4.*,
process >= 1.1
base == 4.*,
process >= 1.1
- -- It's not entirely clear to me why I have to reproduce all of this.
- ghc-options:
- -Weverything
- -Wno-implicit-prelude
- -Wno-safe
- -Wno-unsafe
- -Wno-all-missed-specialisations
- -rtsopts
- -threaded
- -optc-O3
- -optc-march=native
-
source-repository head
type: git
source-repository head
type: git
BIN = dist/build/$(PN)/$(PN)
SRCS = $(shell find src/ -type f -name '*.hs')
BIN = dist/build/$(PN)/$(PN)
SRCS = $(shell find src/ -type f -name '*.hs')
+# Append these warnings to the HCFLAGS environment variable that gets
+# passed as options to GHC. We want to see the warnings while developing
+# but don't want them hard-coded in the cabal file for end users.
+HCFLAGS += -Weverything \
+ -Wno-implicit-prelude \
+ -Wno-safe \
+ -Wno-unsafe \
+ -Wno-all-missed-specialisations \
+ -rtsopts \
+ -threaded
+
.PHONY : dist hlint
$(BIN): $(PN).cabal $(SRCS)
runghc Setup.hs configure --user
.PHONY : dist hlint
$(BIN): $(PN).cabal $(SRCS)
runghc Setup.hs configure --user
+ runghc Setup.hs build --ghc-options="${HCFLAGS}"
doc: $(PN).cabal $(SRCS)
runghc Setup.hs haddock --all \
doc: $(PN).cabal $(SRCS)
runghc Setup.hs haddock --all \
$(TESTSUITE_BIN): $(PN).cabal $(SRCS) $(TEST_SRCS)
runghc Setup.hs configure --user --enable-tests --prefix=/
$(TESTSUITE_BIN): $(PN).cabal $(SRCS) $(TEST_SRCS)
runghc Setup.hs configure --user --enable-tests --prefix=/
+ runghc Setup.hs build --ghc-options="${HCFLAGS}"
$(DOCTESTS_BIN): $(PN).cabal $(SRCS) $(TEST_SRCS)
runghc Setup.hs configure --user --enable-tests
$(DOCTESTS_BIN): $(PN).cabal $(SRCS) $(TEST_SRCS)
runghc Setup.hs configure --user --enable-tests
+ runghc Setup.hs build --ghc-options="${HCFLAGS}"
check: $(BIN) $(TESTSUITE_BIN) $(DOCTESTS_BIN)
runghc Setup.hs test
check: $(BIN) $(TESTSUITE_BIN) $(DOCTESTS_BIN)
runghc Setup.hs test