packages feed

debian-build-0.1.0.0: 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)


source' :: Build ((FilePath, FilePath), Source, Maybe Hackage)
source' =
  maybe (fail "Illegal state: genSources") return =<< genSources

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
  putStr . unlines $ map unwords
    [[prog, "build"],
     [prog, "install"],
     [prog, "reinstall", "  -- Remove and install support only for Haskell"] ]

build :: [String] -> Build (Source, Maybe Hackage)
build opts = do
  removeBuildDir
  ((_, 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
      "build" : args      ->  void $ build args
      "install" : args    ->  install args
      "reinstall" : args  ->  reinstall args
      args                ->  void $ build args