module Debian.Package.Build.Cabal
( findDescriptionFile
, setupCmd, clean, sdist
, configure, build, install, register
) where
import Control.Applicative ((<$>))
import Control.Monad (filterM)
import Control.Monad.Trans.Class (lift)
import Data.Maybe (listToMaybe)
import Data.List (isSuffixOf)
import System.FilePath ((</>))
import System.Directory (getDirectoryContents, doesFileExist)
import System.Environment (withArgs)
import Distribution.Simple (defaultMain)
import Debian.Package.Build.Monad (Trace, traceCommand)
findDescriptionFile :: FilePath -> IO (Maybe FilePath)
findDescriptionFile dir = do
fs <- getDirectoryContents dir
let find f
| length f > length suf &&
suf `isSuffixOf` f = doesFileExist $ dir </> f
| otherwise = return False
where suf = ".cabal"
fmap (dir </>) . listToMaybe <$> filterM find fs
setup :: [String] -> Trace ()
setup args = do
traceCommand (unwords $ "<cabal>" : args)
lift $ args `withArgs` defaultMain
setupCmd :: String -> [String] -> Trace ()
setupCmd cmd = setup . (cmd : )
clean :: [String] -> Trace ()
clean = setupCmd "clean"
configure :: [String] -> Trace ()
configure = setupCmd "configure"
sdist :: [String] -> Trace ()
sdist = setupCmd "sdist"
build :: [String] -> Trace ()
build = setupCmd "build"
install :: [String] -> Trace ()
install = setupCmd "install"
register :: [String] -> Trace ()
register = setupCmd "register"