Skip to content
  • Niklas Hambuechen's avatar
    Use Cabal to enforce dependency versions · 8e193466
    Niklas Hambuechen authored
    This uses `cabal configure` to determine which exact dependency versions
    we are compiling against, and ensures that these versions are used
    by passing -package-id flags to GHC.
    
    The `cabal configure` step makes the build fail before compiling / type
    checking if the user tries to compile against a dependency version we don't
    support; before, this case led to type errors which were not clearly
    user errors. This fixes issue #988.
    
    The output of `cabal configure` is also used to generate MIN_VERSION_*
    macros.
    
    MIN_VERSION_* macros are the standard way to build CPP dependency switches
    in Haskell packages, and they replace our custom macros (like PARALLEL3
    and NO_REGEX_PCRE) which had to be hand-built for each dependency.
    We can now query the version of any Haskell dependency without having
    to manually add a flag via autoconf.
    
    All ghc and hlint invocations were adjusted to take these macros into
    account.
    
    This change introduces a Haskell-build-time dependency on cabal-i...
    8e193466