mirror of
https://github.com/commercialhaskell/stackage.git
synced 2026-01-12 15:28:29 +01:00
This was done by cabal-install previously. But doing it ourselves, we gain a few things: * Found out about problems faster. * Get a complete list of problems, including tests. * Much more user-friendly output.
81 lines
2.9 KiB
Haskell
81 lines
2.9 KiB
Haskell
module Stackage.Types
|
|
( module X
|
|
, module Stackage.Types
|
|
) where
|
|
|
|
import Data.Map as X (Map)
|
|
import Data.Map (unionWith)
|
|
import Data.Monoid (Monoid (..))
|
|
import Data.Set as X (Set)
|
|
import Data.Version as X (Version)
|
|
import Distribution.Package as X (PackageIdentifier (..),
|
|
PackageName (..))
|
|
import Distribution.Version as X (VersionRange (..))
|
|
|
|
newtype PackageDB = PackageDB (Map PackageName PackageInfo)
|
|
deriving (Show, Eq)
|
|
|
|
instance Monoid PackageDB where
|
|
mempty = PackageDB mempty
|
|
PackageDB x `mappend` PackageDB y =
|
|
PackageDB $ unionWith newest x y
|
|
where
|
|
newest pi1 pi2
|
|
| piVersion pi1 > piVersion pi2 = pi1
|
|
| otherwise = pi2
|
|
|
|
data PackageInfo = PackageInfo
|
|
{ piVersion :: Version
|
|
, piDeps :: Map PackageName VersionRange
|
|
, piHasTests :: Bool
|
|
, piBuildTools :: Set PackageName
|
|
}
|
|
deriving (Show, Eq)
|
|
|
|
-- | Information on a package we're going to build.
|
|
data BuildInfo = BuildInfo
|
|
{ biVersion :: Version
|
|
, biUsers :: [PackageName]
|
|
, biMaintainer :: Maintainer
|
|
, biDeps :: Map PackageName VersionRange
|
|
}
|
|
|
|
data HaskellPlatform = HaskellPlatform
|
|
{ hpcore :: Set PackageIdentifier
|
|
, hplibs :: Set PackageIdentifier
|
|
}
|
|
deriving (Show, Eq, Ord)
|
|
instance Monoid HaskellPlatform where
|
|
mempty = HaskellPlatform mempty mempty
|
|
HaskellPlatform a x `mappend` HaskellPlatform b y = HaskellPlatform (mappend a b) (mappend x y)
|
|
|
|
data InstallInfo = InstallInfo
|
|
{ iiCore :: Set PackageName
|
|
, iiPackages :: Map PackageName (Version, Maintainer)
|
|
, iiOptionalCore :: Map PackageName Version
|
|
-- ^ This is intended to hold onto packages which might be automatically
|
|
-- provided in the global package database. In practice, this would be
|
|
-- Haskell Platform packages provided by distributions.
|
|
, iiPackageDB :: PackageDB
|
|
}
|
|
|
|
-- | Email address of a Stackage maintainer.
|
|
newtype Maintainer = Maintainer { unMaintainer :: String }
|
|
deriving (Show, Eq, Ord)
|
|
|
|
data BuildSettings = BuildSettings
|
|
{ sandboxRoot :: FilePath
|
|
, extraBuildArgs :: [String]
|
|
, extraCore :: Set PackageName
|
|
, expectedFailures :: Set PackageName
|
|
, stablePackages :: Map PackageName (VersionRange, Maintainer)
|
|
, extraArgs :: [String]
|
|
, haskellPlatformCabal :: FilePath
|
|
, requireHaskellPlatform :: Bool
|
|
, cleanBeforeBuild :: Bool
|
|
, excludedPackages :: Set PackageName
|
|
-- ^ Packages which should be dropped from the list of stable packages,
|
|
-- even if present via the Haskell Platform or @stablePackages@. If these
|
|
-- packages are dependencies of others, they will still be included.
|
|
}
|