debian-build-0.1.0.1: mains/odebuild.hs
import System.Environment (getProgName, getArgs)
import Control.Monad (void)
import Debian.Package.Data (Source, Hackage)
import Debian.Package.Build
(BuildMode (All), buildPackage, debi,
baseDirCurrent, defaultConfig, Build, runBuild, liftTrace,
sourceDir, removeBuildDir, genSources, removeGhcLibrary)
remove' :: Hackage -> Build ()
remove' = liftTrace . removeGhcLibrary All
install' :: Source -> Build ()
install' src = do
srcDir <- sourceDir src
liftTrace $ debi srcDir []
help :: IO ()
help = do
prog <- getProgName
let opts = "<debuild options>"
putStr . unlines $ map unwords
[[prog, "clean"],
[prog, "source"],
[prog, "build", opts],
[prog, "install", opts],
[prog, "reinstall", opts, " -- Remove and install support only for Haskell"] ]
clean :: Build ()
clean = removeBuildDir
source :: Build ((FilePath, FilePath), Source, Maybe Hackage)
source = do
clean
maybe (fail "Illegal state: genSources") return =<< genSources
build :: [String] -> Build (Source, Maybe Hackage)
build opts = do
((_, dir), src, mayH) <- source
liftTrace $ buildPackage dir All opts
return (src, mayH)
install :: [String] -> Build ()
install args = do
(src, _mayH) <- build args
install' src
reinstall :: [String] -> Build ()
reinstall args = do
(src, mayH) <- build args
maybe (return ()) remove' mayH
install' src
run :: Build a -> IO a
run b = uncurry (runBuild b baseDirCurrent) defaultConfig
main :: IO ()
main = do
as0 <- getArgs
case as0 of
"help" : _ -> help
as1 -> run $ case as1 of
"clean" : _ -> clean
"source" : _ -> void $ source
"build" : args -> void $ build args
"install" : args -> install args
"reinstall" : args -> reinstall args
args -> void $ build args