debian-build 0.3.0.0 → 0.4.0.0
raw patch · 6 files changed
+47/−35 lines, 6 files
Files
- debian-build.cabal +1/−1
- mains/odebuild.hs +6/−3
- src/Debian/Package/Build/Command.hs +18/−7
- src/Debian/Package/Build/Sequence.hs +2/−2
- src/Debian/Package/Data/Hackage.hs +8/−6
- src/Debian/Package/Data/Source.hs +12/−16
debian-build.cabal view
@@ -1,5 +1,5 @@ name: debian-build-version: 0.3.0.0+version: 0.4.0.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
@@ -4,13 +4,16 @@ import Debian.Package.Data (Source, Hackage) import Debian.Package.Build- (BuildMode (All), buildPackage, debi,+ (BuildMode (Bin, Src), buildPackage, debi, baseDirCurrent, defaultConfig, Build, runBuild, liftTrace, sourceDir, removeBuildDir, genSources, removeGhcLibrary) +defualtModes :: [BuildMode]+defualtModes = [Bin, Src]+ remove' :: Hackage -> Build ()-remove' = liftTrace . removeGhcLibrary All+remove' hkg = liftTrace $ sequence_ [removeGhcLibrary m hkg | m <- defualtModes] install' :: Source -> Build () install' src = do@@ -43,7 +46,7 @@ build :: Maybe String -> [String] -> Build (Source, Maybe Hackage) build mayRev opts = do ((_, dir), src, mayH) <- source mayRev- liftTrace $ buildPackage dir All opts+ liftTrace $ sequence_ [buildPackage dir m opts | m <- defualtModes] return (src, mayH) install :: Maybe String -> [String] -> Build ()
src/Debian/Package/Build/Command.hs view
@@ -35,6 +35,7 @@ import Data.Maybe (fromMaybe) import Control.Arrow ((&&&)) import Control.Applicative ((<$>))+import Control.Monad (unless) import Control.Monad.Trans.Class (lift) import System.FilePath ((<.>), takeDirectory) import qualified System.Directory as D@@ -42,7 +43,9 @@ import System.Exit (ExitCode (..)) import Data.Version (Version, versionBranch, showVersion) -import Debian.Package.Data (Hackage, ghcLibraryBinPackages, ghcLibraryPackages, Source, parseChangeLog, DebianVersion, readDebianVersion, origVersion')+import Debian.Package.Data+ (Hackage, ghcLibraryBinPackages, ghcLibraryPackages, ghcLibraryDocPackage,+ Source, parseChangeLog, DebianVersion, readDebianVersion, origVersion') import Debian.Package.Build.Monad (Trace, traceCommand, traceOut, putLog, bracketTrace_) @@ -194,13 +197,16 @@ debi dir = withCurrentDir' dir . rawSystem' . (["sudo", "debi"] ++) -- | Build mode, all or binary only-data BuildMode = All | Bin+data BuildMode = All | Bin | Src | Dep | Indep -- | Build package using /debuild/ under specified directory buildPackage :: FilePath -> BuildMode -> [String] -> Trace () buildPackage dir mode opts = do- let modeOpt All = []- modeOpt Bin = ["-B"]+ let modeOpt All = []+ modeOpt Bin = ["-b"]+ modeOpt Src = ["-S"]+ modeOpt Dep = ["-B"]+ modeOpt Indep = ["-A"] debuild dir $ ["-uc", "-us"] ++ modeOpt mode ++ opts -- | Clean and build package using /debuild/ under specified directory@@ -212,6 +218,11 @@ -- | Remove ghc library packages under specified source package directory removeGhcLibrary :: BuildMode -> Hackage -> Trace () removeGhcLibrary mode hkg = do- let pkgs All = ghcLibraryBinPackages- pkgs Bin = ghcLibraryPackages- system' $ unwords ["echo '' |", "sudo apt-get remove", unwords $ pkgs mode hkg, "|| true"]+ let pkgs All = ghcLibraryPackages+ pkgs Bin = ghcLibraryPackages+ pkgs Src = const []+ pkgs Dep = ghcLibraryBinPackages+ pkgs Indep = (:[]) . ghcLibraryDocPackage+ pkgs' = pkgs mode hkg+ unless (null pkgs') . system'+ $ unwords ["echo '' |", "sudo apt-get remove", unwords pkgs', "|| true"]
src/Debian/Package/Build/Sequence.hs view
@@ -216,7 +216,7 @@ cabalAutogenSources hname mayRev = do debDir <- cabalAutogenDebianDir mayRev pkg <- liftTrace . dpkgParseChangeLog $ debDir </> "changelog"- hpkg <- either fail return $ haskellPackageFromPackage hname pkg+ let hpkg = haskellPackageFromPackage hname pkg pair@(_, srcDir) <- cabalGenOrigSources hpkg liftTrace $ renameDirectory debDir (srcDir </> takeFileName debDir) return (pair, hpkg)@@ -242,7 +242,7 @@ do clog <- findDebianChangeLog src <- lift . liftTrace $ dpkgParseChangeLog clog (do hname <- takeBaseName <$> findCabalDescription- hpkg <- either fail return $ haskellPackageFromPackage hname src+ let hpkg = haskellPackageFromPackage hname src p <- lift $ cabalGenSources hpkg return (p, src, Just $ hackage hpkg) <|>
src/Debian/Package/Data/Hackage.hs view
@@ -9,7 +9,7 @@ -- -- This module provides data types of hackage meta information. module Debian.Package.Data.Hackage- ( HackageVersion, mkHackageVersion, hackageVersionNumbers+ ( HackageVersion, mkHackageVersion, mkHackageVersion', hackageVersionNumbers , Hackage, mkHackage, hackageName, hackageVersion , debianShortName, mkHackageDefault@@ -34,14 +34,16 @@ newtype HackageVersion = HackageVersion (Version) -- | Make 'HackageVersion'+mkHackageVersion' :: [Int] -> HackageVersion+mkHackageVersion' = HackageVersion . (`Version` [])++-- | Make 'HackageVersion' mkHackageVersion :: Int -> Int -> Int -> Int -> HackageVersion-mkHackageVersion v0 v1 v2 v3 = HackageVersion $ Version [v0, v1, v2, v3] []+mkHackageVersion v0 v1 v2 v3 = mkHackageVersion' [v0, v1, v2, v3] -- | Extract hackage version numbers.-hackageVersionNumbers :: HackageVersion -> (Int, Int, Int, Int)-hackageVersionNumbers = d where- d (HackageVersion (Version [v0, v1, v2, v3] [])) = (v0, v1, v2, v3)- d hv = error $ "HackageVersion: Invalid structure: " ++ show hv+hackageVersionNumbers :: HackageVersion -> [Int]+hackageVersionNumbers (HackageVersion (Version ns _)) = ns instance Show HackageVersion where show (HackageVersion v) = showVersion v
src/Debian/Package/Data/Source.hs view
@@ -31,7 +31,7 @@ import System.FilePath ((<.>)) import Debian.Package.Data.Hackage- (HackageVersion, mkHackageVersion, hackageVersionNumbers,+ (HackageVersion, mkHackageVersion', hackageVersionNumbers, Hackage, mkHackageDefault, NameRule (Simple), debianNamesFromSourceName) @@ -73,9 +73,9 @@ -- | Make deebian version from hackage version versionFromHackageVersion :: HackageVersion -> Maybe String -> DebianVersion versionFromHackageVersion hv = d where- d (Just rev) = debianNonNativeVersion [v0, v1, v2, v3] rev- d Nothing = debianNativeVersion [v0, v1, v2, v3] Nothing- (v0, v1, v2, v3) = hackageVersionNumbers hv+ d (Just rev) = debianNonNativeVersion ns rev+ d Nothing = debianNativeVersion ns Nothing+ ns = hackageVersionNumbers hv -- | Version without debian revision origVersion' :: DebianVersion -> Version@@ -166,10 +166,8 @@ sourceDirName pkg = sourceName pkg ++ '-' : showVersion (origVersion pkg) -- | Try to make 'HackageVersion' from 'Source'-deriveHackageVersion :: Source -> Maybe HackageVersion-deriveHackageVersion = d . versionBranch . origVersion where- d [v0, v1, v2, v3] = Just $ mkHackageVersion v0 v1 v2 v3- d _ = Nothing+deriveHackageVersion :: Source -> HackageVersion+deriveHackageVersion = mkHackageVersion' . versionBranch . origVersion where -- | Try to generate 'Source' from debian changelog string parseChangeLog :: String -- ^ dpkg-parsechangelog result string@@ -213,11 +211,9 @@ (sn, _) = debianNamesFromSourceName rule hname -- | Generate 'HaskellPackage' with hackage name and debian package meta-info-haskellPackageFromPackage :: String -- ^ Hackage name string- -> Source -- ^ Debian package meta info- -> Either String HaskellPackage -- ^ Result-haskellPackageFromPackage hname pkg = do- hv <- maybe (Left "Fail to derive hackage version") Right- $ deriveHackageVersion pkg- let hkg = mkHackageDefault Simple hname hv- return $ HaskellPackage hkg pkg+haskellPackageFromPackage :: String -- ^ Hackage name string+ -> Source -- ^ Debian package meta info+ -> HaskellPackage -- ^ Result+haskellPackageFromPackage hname pkg = HaskellPackage hkg pkg where+ hv = deriveHackageVersion pkg+ hkg = mkHackageDefault Simple hname hv