Configuring Cabal build flags
It’s always an emergency when I go looking for this information!
Suppose you are building HLint.
mkdir ~/tmp && cd ~/tmp
curl -o hlint-3.2.7.tar.gz https://hackage.haskell.org/package/hlint-3.2.7/hlint-3.2.7.tar.gz
gunzip hlint-3.2.7.tar.gz && tar xvf hlint-3.2.7.tar
Left to their own devices, HLint and ghc-lib-parser-ex will default to auto mode meaning, they will decide for themselves if they should depend on ghc-lib-parser or native ghc libraries.
Sometimes it’s desirable to force the situation though and explicitly make them do one or the other. How you do that? The answer is of course package Cabal flags. There are two scenarios: building with stack or building with cabal.
stack.yamlForce link with
ghc-lib-parserflags: hlint: ghc-lib: true ghc-lib-parser-ex: auto: false no-ghc-lib: falseForce link with native ghc
flags: hlint: ghc-lib: false ghc-lib-parser-ex: auto: false no-ghc-lib: true
cabal.projectForce link with
ghc-lib-parserpackages: hlint-3.2.7 package hlint flags: +ghc-lib package ghc-lib-parser-ex flags: -auto -no-ghc-libForce link with native ghc
packages: hlint-3.2.7 package hlint flags: -ghc-lib package ghc-lib-parser-ex flags: -auto +no-ghc-lib
When working with Cabal in the HLint repository one can configure with command line constraints like this:
cabal new-build --constraint "hlint -ghc-lib" --constraint "ghc-lib-parser-ex -auto +no-ghc-lib"