Cabal: conditionally override a flag default value

cabal, compiler-flags, conditional-statements, haskell, overriding

Solution

You can do something like this:

flag llvm
    description: compile via LLVM
    default    : True

-- ...

Executable foo
    if flag(llvm) && !os(windows)
        ghc-options: -fllvm -optlo-O3

Problem

Is there any way to rewrite either: ``` flag llvm description: compile via LLVM default : if os(mingw32) False else True ``` or ``` flag llvm description: compile via LLVM default : True if os(mingw32) ?SET-LLVM=False? ``` and get `cabal` to work with it? Note: Further down in the same file the `llvm` flag is used like: ``` if flag(llvm) ghc-options: -fllvm -optlo-O3 ``` and there are many other single high-level flags that translate to multiple `ghc-options` entries, such as `static` to `-static -optl-static`.

Original source