module Data.Array.Accelerate.LLVM.Native.Distribution.Simple (
defaultMain,
simpleUserHooks,
module Distribution.Simple,
) where
import Data.Array.Accelerate.LLVM.Native.Distribution.Simple.Build
import Distribution.PackageDescription ( PackageDescription )
import Distribution.Simple.Setup ( BuildFlags )
import Distribution.Simple.LocalBuildInfo ( LocalBuildInfo )
import Distribution.Simple.PreProcess ( PPSuffixHandler, knownSuffixHandlers )
import Distribution.Simple hiding ( defaultMain, simpleUserHooks )
import qualified Distribution.Simple as Cabal
import Data.List ( unionBy )
defaultMain :: IO ()
defaultMain = Cabal.defaultMainWithHooks simpleUserHooks
simpleUserHooks :: UserHooks
simpleUserHooks =
Cabal.simpleUserHooks
{ buildHook = accelerateBuildHook
}
accelerateBuildHook
:: PackageDescription
-> LocalBuildInfo
-> UserHooks
-> BuildFlags
-> IO ()
accelerateBuildHook pkg_descr localbuildinfo hooks flags =
build pkg_descr localbuildinfo flags (allSuffixHandlers hooks)
allSuffixHandlers :: UserHooks -> [PPSuffixHandler]
allSuffixHandlers hooks
= overridesPP (hookedPreProcessors hooks) knownSuffixHandlers
where
overridesPP :: [PPSuffixHandler] -> [PPSuffixHandler] -> [PPSuffixHandler]
overridesPP = unionBy (\x y -> fst x == fst y)