debian-build 0.7.0.0 → 0.7.1.0
raw patch · 3 files changed
+93/−49 lines, 3 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
- Debian.Package.Build.Command: build :: FilePath -> [BuildMode] -> [String] -> Trace ()
+ Debian.Package.Build.Command: build :: FilePath -> [BuildMode] -> Bool -> [String] -> Trace ()
Files
- debian-build.cabal +1/−1
- mains/odebuild.hs +88/−44
- src/Debian/Package/Build/Command.hs +4/−4
debian-build.cabal view
@@ -1,5 +1,5 @@ name: debian-build-version: 0.7.0.0+version: 0.7.1.0 synopsis: Debian package build sequence tools description: This package provides build sequence functions for debian package, and includes on-the-fly
mains/odebuild.hs view
@@ -1,6 +1,9 @@-import System.Environment (getProgName, getArgs)+import Control.Arrow ((>>>)) import Control.Monad (void, when)-import Data.List (stripPrefix)+import System.Environment (getProgName, getArgs)+import System.Console.GetOpt+ (OptDescr (Option), ArgDescr (ReqArg, NoArg), ArgOrder (RequireOrder),+ usageInfo, getOpt) import Debian.Package.Data (Source, Hackage, isBinaryPackage) import qualified Debian.Package.Build.Command as Command@@ -10,11 +13,8 @@ removeBuildDir, findDebianChanges, genSources, removeGhcLibrary) -defualtModes :: [BuildMode]-defualtModes = [Dep, Indep, Src]- remove' :: Hackage -> Build ()-remove' hkg = liftTrace $ sequence_ [removeGhcLibrary m hkg | m <- defualtModes]+remove' hkg = liftTrace $ sequence_ [removeGhcLibrary m hkg | m <- [Dep, Indep, Src]] install' :: Build () install' = do@@ -25,42 +25,79 @@ mapM_ (\c -> debi' [c]) cs +data ODebuildOptions =+ ODebuildOptions+ { revision :: Maybe String+ , installDeps :: Bool+ } deriving Show++defaultOptions :: ODebuildOptions+defaultOptions =+ ODebuildOptions+ { revision = Nothing+ , installDeps = False+ }++descs :: [OptDescr (ODebuildOptions -> ODebuildOptions)]+descs =+ [ Option [] ["revision"]+ (ReqArg (\s opts -> opts { revision = Just s }) "DEBIAN_REVISION")+ "debian package revision to pass to cabal-debian"+ , Option [] ["install-deps"]+ (NoArg $ \opts -> opts { installDeps = True })+ "install build depends when to run build"+ ]++parseOption :: [String]+ -> (ODebuildOptions -> ODebuildOptions, ([String], [String]))+parseOption args = (foldr (>>>) id ufs, (ss1, ss2)) where+ (ufs, ss1, ss2) = getOpt RequireOrder descs args+ help :: IO () help = do prog <- getProgName- let rev = "[--revision=<debian revision>]"- opts = "[debuild options]"- putStr . unlines $ map unwords- [[prog, "clean"],- [prog, "source", rev],- [prog, "build", rev, opts],- [prog, "install", rev, opts],- [prog, "reinstall", rev, opts],- ["-- reinstall (Remove and install) support only for Haskell"],- ["-- Revision string may use on auto-generating debian directory."]]+ let opts = "[options]"+ debOpts = "[-- [debuild options]]"+ msg = unlines $ map unwords+ [ [prog, "clean"]+ , [prog, "prepare", opts]+ , [prog, "source", opts, debOpts]+ , [prog, "build", opts, debOpts]+ , [prog, "install", opts, debOpts]+ , [prog, "reinstall", opts, debOpts]+ , [" reinstall (Remove and install) support only for Haskell"]+ , [" Revision string may use on auto-generating debian directory."]+ ]+ putStr $ usageInfo msg descs clean :: Build () clean = removeBuildDir -source :: Maybe String -> Build ((FilePath, FilePath), Source, Maybe Hackage)-source mayRev = do+prepare :: ODebuildOptions -> Build ((FilePath, FilePath), Source, Maybe Hackage)+prepare opts = do clean- maybe (fail "Illegal state: genSources") return =<< genSources mayRev+ maybe (fail "Illegal state: genSources") return =<< genSources (revision opts) -build :: Maybe String -> [String] -> Build (Source, Maybe Hackage)-build mayRev opts = do- ((_, dir), src, mayH) <- source mayRev- liftTrace $ Command.build dir [] opts+build' :: [BuildMode] -> ODebuildOptions -> [String] -> Build (Source, Maybe Hackage)+build' modes opts args = do+ ((_, dir), src, mayH) <- prepare opts+ liftTrace $ Command.build dir modes (installDeps opts) args return (src, mayH) -install :: Maybe String -> [String] -> Build ()-install mayRev args = do- void $ build mayRev args+source :: ODebuildOptions -> [String] -> Build (Source, Maybe Hackage)+source = build' [Src]++build :: ODebuildOptions -> [String] -> Build (Source, Maybe Hackage)+build = build' []++install :: ODebuildOptions -> [String] -> Build ()+install opts args = do+ void $ build opts args install' -reinstall :: Maybe String -> [String] -> Build ()-reinstall mayRev args = do- (_src, mayH) <- build mayRev args+reinstall :: ODebuildOptions -> [String] -> Build ()+reinstall opts args = do+ (_src, mayH) <- build opts args maybe (return ()) remove' mayH install' @@ -69,13 +106,20 @@ cur <- pwd uncurry (runBuild b cur) defaultConfig -parseArgs :: [String] -> (Maybe String, [String])-parseArgs = d where- d aas@(a:as) = case stripPrefix "--revision=" a of- r@(Just _) -> (r, as)- Nothing -> (Nothing, aas)- d [] = (Nothing, [])+parseArgs :: [String] -> IO (ODebuildOptions, [String])+parseArgs args0+ | not $ null errs = fail $ concat errs+ | not $ null args1 = fail $ "Unknown arguments: " ++ unwords args1+ | otherwise = return+ (f defaultOptions, drop 1 rest ) where+ (opt, rest) = break (== "--") args0+ (f, (args1, errs)) = parseOption opt +runArgs :: (ODebuildOptions -> [String] -> Build a) -> [String] -> IO a+runArgs act as = do+ (opts, args) <- parseArgs as+ run $ act opts args+ main :: IO () main = do as0 <- getArgs@@ -84,13 +128,13 @@ "--help" : _ -> help "help" : _ -> help as2@(c : as1) -> do- let (mayRev, args) = parseArgs as1- run $ case c of- "clean" -> clean- "source" -> void $ source mayRev- "build" -> void $ build mayRev args- "install" -> install mayRev args- "reinstall" -> reinstall mayRev args- _ -> void . uncurry build $ parseArgs as2+ case c of+ "clean" -> run clean+ "prepare" -> void $ runArgs (const . prepare) as1+ "source" -> void $ runArgs source as1+ "build" -> void $ runArgs build as1+ "install" -> runArgs install as1+ "reinstall" -> runArgs reinstall as1+ _ -> void $ runArgs build as2 - [] -> run . void $ build Nothing []+ [] -> run . void $ build defaultOptions []
src/Debian/Package/Build/Command.hs view
@@ -241,20 +241,20 @@ -- | Build package with specified mode list. -- Calculated mode list from control is used when not specified build modes.-build :: FilePath -> [BuildMode] -> [String] -> Trace ()-build dir modes' opts = do+build :: FilePath -> [BuildMode] -> Bool -> [String] -> Trace ()+build dir modes' installDep opts = do modes <- if null modes' then modeListFromControl <$> dpkgParseControl (dir </> "debian" </> "control") else return modes'- when (any hasBinaryBuildMode modes) $ aptGetBuildDepends dir+ when (installDep && any hasBinaryBuildMode modes) $ aptGetBuildDepends dir sequence_ [buildPackage dir m opts | m <- modes] -- | Clean and build package using /debuild/ under specified directory rebuild :: FilePath -> [BuildMode] -> [String] -> Trace () rebuild dir modes opts = do debuild dir ["clean"]- build dir modes opts+ build dir modes False opts -- | Remove ghc library packages under specified source package directory removeGhcLibrary :: BuildMode -> Hackage -> Trace ()