packages feed

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