packages feed

arb-fft-0.2.0.0: Setup.hs

import Control.Applicative ((<$>))
import Control.Monad (when)
import Data.List (delete)
import Data.Maybe (isJust)
import Distribution.PackageDescription
import Distribution.Simple
import Distribution.Simple.Configure
import Distribution.Simple.LocalBuildInfo
import Distribution.Simple.Program
import Distribution.Simple.Setup
import Distribution.Verbosity

checkLLVM :: (GenericPackageDescription, HookedBuildInfo)
          -> ConfigFlags -> IO LocalBuildInfo
checkLLVM (pkg, hbi) inflags = do
  installed <- isJust <$> findProgramLocation verbose "llvm-config"
  let llvmf = FlagName "llvm"
      cfgflags = configConfigurationsFlags inflags
      fixcfgflags = (llvmf, False) : delete (llvmf, True) cfgflags
      fixflags = inflags { configConfigurationsFlags = fixcfgflags }
  let (flags, msg) = case installed of
        True -> (inflags, False)
        False -> case lookup llvmf cfgflags of
          Just True -> (fixflags, True)
          Just False -> (inflags, False)
          Nothing -> (fixflags, True)
  when msg $ do
    putStrLn "Warning: LLVM is not installed."
    putStrLn "Building arb-fft with native code generator (slower)."
  configure (pkg, hbi) flags

main :: IO ()
main = defaultMainWithHooks simpleUserHooks { confHook = checkLLVM }