module Hbro.Dyre (
wrap,
recompile
) where
import Hbro.Options hiding(recompile)
import Hbro.Util
import Config.Dyre
import Config.Dyre.Compile
import Config.Dyre.Paths
import Control.Lens
import Control.Monad.Base
import Control.Monad.Reader
import System.IO
nullMain :: a -> IO ()
nullMain = const $ return ()
printPaths :: MonadBase IO m => m ()
printPaths = io $ do
(a, b, c, d, e) <- getPaths $ parameters nullMain False
putStrLn $ unlines [
"Current binary: " ++ a,
"Custom binary: " ++ b,
"Config file: " ++ c,
"Cache directory: " ++ d,
"Lib directory: " ++ e]
parameters :: (a -> IO ()) -> Bool -> Params (Either String a)
parameters main verbose' = defaultParams {
projectName = "hbro",
showError = const Left,
realMain = main',
ghcOpts = ["-threaded"],
statusOut = hPutStrLn stderr,
includeCurrentDirectory = False}
where
main' (Left e) = putStrLn e
main' (Right x) = do
when verbose' printPaths
main x
wrap :: (a -> IO ()) -> CliOptions -> a -> IO ()
wrap main opts args = do
wrapMain ((parameters main (opts^.verbose)) { configCheck = not $ opts^.vanilla }) $ Right args
recompile :: IO (Maybe String)
recompile = do
customCompile $ parameters nullMain False
getErrorString $ parameters nullMain False