{-# LANGUAGE CPP #-}
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TemplateHaskell #-}
{-# OPTIONS_GHC -Wall #-}
module Debian.Debianize.CabalInfo
(
CabalInfo
, PackageInfo(PackageInfo, cabalName, devDeb, docDeb, profDeb)
, packageDescription
, debInfo
, debianNameMap
, epochMap
, packageInfo
, newCabalInfo
) where
import Control.Lens
import Control.Monad.Catch (MonadMask)
import Control.Monad.State (execStateT)
import Control.Monad.Trans (MonadIO, liftIO)
import Data.Generics (Data, Typeable)
import Data.Map as Map (Map)
import Data.Text as Text (null, pack, strip)
import Debian.Debianize.BasicInfo (Flags)
import Debian.Debianize.DebInfo as D (control, copyright, DebInfo, makeDebInfo)
import Debian.Debianize.BinaryDebDescription (Canonical(canonical))
import Debian.Debianize.CopyrightDescription (defaultCopyrightDescription)
import Debian.Debianize.InputCabal (inputCabalization)
import Debian.Debianize.SourceDebDescription as S (homepage)
import Debian.Debianize.VersionSplits (VersionSplits)
import Debian.Orphans ()
import Debian.Relation (BinPkgName)
import Debian.Version (DebianVersion)
import Distribution.Package (PackageName)
import Distribution.PackageDescription as Cabal (PackageDescription(homepage))
#if MIN_VERSION_Cabal(3,2,0)
import qualified Distribution.Utils.ShortText as ST
#endif
import Prelude hiding (init, init, log, log, null)
data CabalInfo
= CabalInfo
{ CabalInfo -> PackageDescription
_packageDescription :: PackageDescription
, CabalInfo -> DebInfo
_debInfo :: DebInfo
, CabalInfo -> Map PackageName VersionSplits
_debianNameMap :: Map PackageName VersionSplits
, CabalInfo -> Map PackageName Int
_epochMap :: Map PackageName Int
, CabalInfo -> Map PackageName PackageInfo
_packageInfo :: Map PackageName PackageInfo
} deriving (Int -> CabalInfo -> ShowS
[CabalInfo] -> ShowS
CabalInfo -> String
(Int -> CabalInfo -> ShowS)
-> (CabalInfo -> String)
-> ([CabalInfo] -> ShowS)
-> Show CabalInfo
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> CabalInfo -> ShowS
showsPrec :: Int -> CabalInfo -> ShowS
$cshow :: CabalInfo -> String
show :: CabalInfo -> String
$cshowList :: [CabalInfo] -> ShowS
showList :: [CabalInfo] -> ShowS
Show, Typeable CabalInfo
Typeable CabalInfo =>
(forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> CabalInfo -> c CabalInfo)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c CabalInfo)
-> (CabalInfo -> Constr)
-> (CabalInfo -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c CabalInfo))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c CabalInfo))
-> ((forall b. Data b => b -> b) -> CabalInfo -> CabalInfo)
-> (forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> CabalInfo -> r)
-> (forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> CabalInfo -> r)
-> (forall u. (forall d. Data d => d -> u) -> CabalInfo -> [u])
-> (forall u.
Int -> (forall d. Data d => d -> u) -> CabalInfo -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> CabalInfo -> m CabalInfo)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> CabalInfo -> m CabalInfo)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> CabalInfo -> m CabalInfo)
-> Data CabalInfo
CabalInfo -> Constr
CabalInfo -> DataType
(forall b. Data b => b -> b) -> CabalInfo -> CabalInfo
forall a.
Typeable a =>
(forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> CabalInfo -> u
forall u. (forall d. Data d => d -> u) -> CabalInfo -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> CabalInfo -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> CabalInfo -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> CabalInfo -> m CabalInfo
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> CabalInfo -> m CabalInfo
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c CabalInfo
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> CabalInfo -> c CabalInfo
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c CabalInfo)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c CabalInfo)
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> CabalInfo -> c CabalInfo
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> CabalInfo -> c CabalInfo
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c CabalInfo
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c CabalInfo
$ctoConstr :: CabalInfo -> Constr
toConstr :: CabalInfo -> Constr
$cdataTypeOf :: CabalInfo -> DataType
dataTypeOf :: CabalInfo -> DataType
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c CabalInfo)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c CabalInfo)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c CabalInfo)
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c CabalInfo)
$cgmapT :: (forall b. Data b => b -> b) -> CabalInfo -> CabalInfo
gmapT :: (forall b. Data b => b -> b) -> CabalInfo -> CabalInfo
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> CabalInfo -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> CabalInfo -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> CabalInfo -> r
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> CabalInfo -> r
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> CabalInfo -> [u]
gmapQ :: forall u. (forall d. Data d => d -> u) -> CabalInfo -> [u]
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> CabalInfo -> u
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> CabalInfo -> u
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> CabalInfo -> m CabalInfo
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> CabalInfo -> m CabalInfo
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> CabalInfo -> m CabalInfo
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> CabalInfo -> m CabalInfo
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> CabalInfo -> m CabalInfo
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> CabalInfo -> m CabalInfo
Data, Typeable)
data PackageInfo = PackageInfo { PackageInfo -> PackageName
cabalName :: PackageName
, PackageInfo -> Maybe (BinPkgName, DebianVersion)
devDeb :: Maybe (BinPkgName, DebianVersion)
, PackageInfo -> Maybe (BinPkgName, DebianVersion)
profDeb :: Maybe (BinPkgName, DebianVersion)
, PackageInfo -> Maybe (BinPkgName, DebianVersion)
docDeb :: Maybe (BinPkgName, DebianVersion) } deriving (PackageInfo -> PackageInfo -> Bool
(PackageInfo -> PackageInfo -> Bool)
-> (PackageInfo -> PackageInfo -> Bool) -> Eq PackageInfo
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: PackageInfo -> PackageInfo -> Bool
== :: PackageInfo -> PackageInfo -> Bool
$c/= :: PackageInfo -> PackageInfo -> Bool
/= :: PackageInfo -> PackageInfo -> Bool
Eq, Eq PackageInfo
Eq PackageInfo =>
(PackageInfo -> PackageInfo -> Ordering)
-> (PackageInfo -> PackageInfo -> Bool)
-> (PackageInfo -> PackageInfo -> Bool)
-> (PackageInfo -> PackageInfo -> Bool)
-> (PackageInfo -> PackageInfo -> Bool)
-> (PackageInfo -> PackageInfo -> PackageInfo)
-> (PackageInfo -> PackageInfo -> PackageInfo)
-> Ord PackageInfo
PackageInfo -> PackageInfo -> Bool
PackageInfo -> PackageInfo -> Ordering
PackageInfo -> PackageInfo -> PackageInfo
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: PackageInfo -> PackageInfo -> Ordering
compare :: PackageInfo -> PackageInfo -> Ordering
$c< :: PackageInfo -> PackageInfo -> Bool
< :: PackageInfo -> PackageInfo -> Bool
$c<= :: PackageInfo -> PackageInfo -> Bool
<= :: PackageInfo -> PackageInfo -> Bool
$c> :: PackageInfo -> PackageInfo -> Bool
> :: PackageInfo -> PackageInfo -> Bool
$c>= :: PackageInfo -> PackageInfo -> Bool
>= :: PackageInfo -> PackageInfo -> Bool
$cmax :: PackageInfo -> PackageInfo -> PackageInfo
max :: PackageInfo -> PackageInfo -> PackageInfo
$cmin :: PackageInfo -> PackageInfo -> PackageInfo
min :: PackageInfo -> PackageInfo -> PackageInfo
Ord, Int -> PackageInfo -> ShowS
[PackageInfo] -> ShowS
PackageInfo -> String
(Int -> PackageInfo -> ShowS)
-> (PackageInfo -> String)
-> ([PackageInfo] -> ShowS)
-> Show PackageInfo
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> PackageInfo -> ShowS
showsPrec :: Int -> PackageInfo -> ShowS
$cshow :: PackageInfo -> String
show :: PackageInfo -> String
$cshowList :: [PackageInfo] -> ShowS
showList :: [PackageInfo] -> ShowS
Show, Typeable PackageInfo
Typeable PackageInfo =>
(forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> PackageInfo -> c PackageInfo)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c PackageInfo)
-> (PackageInfo -> Constr)
-> (PackageInfo -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c PackageInfo))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c PackageInfo))
-> ((forall b. Data b => b -> b) -> PackageInfo -> PackageInfo)
-> (forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> PackageInfo -> r)
-> (forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> PackageInfo -> r)
-> (forall u. (forall d. Data d => d -> u) -> PackageInfo -> [u])
-> (forall u.
Int -> (forall d. Data d => d -> u) -> PackageInfo -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> PackageInfo -> m PackageInfo)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> PackageInfo -> m PackageInfo)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> PackageInfo -> m PackageInfo)
-> Data PackageInfo
PackageInfo -> Constr
PackageInfo -> DataType
(forall b. Data b => b -> b) -> PackageInfo -> PackageInfo
forall a.
Typeable a =>
(forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> PackageInfo -> u
forall u. (forall d. Data d => d -> u) -> PackageInfo -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> PackageInfo -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> PackageInfo -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> PackageInfo -> m PackageInfo
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> PackageInfo -> m PackageInfo
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c PackageInfo
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> PackageInfo -> c PackageInfo
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c PackageInfo)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c PackageInfo)
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> PackageInfo -> c PackageInfo
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> PackageInfo -> c PackageInfo
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c PackageInfo
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c PackageInfo
$ctoConstr :: PackageInfo -> Constr
toConstr :: PackageInfo -> Constr
$cdataTypeOf :: PackageInfo -> DataType
dataTypeOf :: PackageInfo -> DataType
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c PackageInfo)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c PackageInfo)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c PackageInfo)
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c PackageInfo)
$cgmapT :: (forall b. Data b => b -> b) -> PackageInfo -> PackageInfo
gmapT :: (forall b. Data b => b -> b) -> PackageInfo -> PackageInfo
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> PackageInfo -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> PackageInfo -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> PackageInfo -> r
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> PackageInfo -> r
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> PackageInfo -> [u]
gmapQ :: forall u. (forall d. Data d => d -> u) -> PackageInfo -> [u]
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> PackageInfo -> u
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> PackageInfo -> u
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> PackageInfo -> m PackageInfo
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> PackageInfo -> m PackageInfo
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> PackageInfo -> m PackageInfo
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> PackageInfo -> m PackageInfo
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> PackageInfo -> m PackageInfo
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> PackageInfo -> m PackageInfo
Data, Typeable)
$(makeLenses ''CabalInfo)
instance Canonical CabalInfo where
canonical :: CabalInfo -> CabalInfo
canonical CabalInfo
x = CabalInfo
x {_debInfo = canonical (_debInfo x)}
newCabalInfo :: (MonadIO m, MonadMask m) => Flags -> m (Either String CabalInfo)
newCabalInfo :: forall (m :: * -> *).
(MonadIO m, MonadMask m) =>
Flags -> m (Either String CabalInfo)
newCabalInfo Flags
flags' =
Flags -> m (Either String PackageDescription)
forall (m :: * -> *).
MonadIO m =>
Flags -> m (Either String PackageDescription)
inputCabalization Flags
flags' m (Either String PackageDescription)
-> (Either String PackageDescription
-> m (Either String CabalInfo))
-> m (Either String CabalInfo)
forall a b. m a -> (a -> m b) -> m b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (String -> m (Either String CabalInfo))
-> (PackageDescription -> m (Either String CabalInfo))
-> Either String PackageDescription
-> m (Either String CabalInfo)
forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either (Either String CabalInfo -> m (Either String CabalInfo)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Either String CabalInfo -> m (Either String CabalInfo))
-> (String -> Either String CabalInfo)
-> String
-> m (Either String CabalInfo)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Either String CabalInfo
forall a b. a -> Either a b
Left) (\PackageDescription
p -> CabalInfo -> Either String CabalInfo
forall a b. b -> Either a b
Right (CabalInfo -> Either String CabalInfo)
-> m CabalInfo -> m (Either String CabalInfo)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> PackageDescription -> m CabalInfo
forall {m :: * -> *}.
MonadIO m =>
PackageDescription -> m CabalInfo
doPkgDesc PackageDescription
p)
where
doPkgDesc :: PackageDescription -> m CabalInfo
doPkgDesc PackageDescription
pkgDesc = do
CopyrightDescription
copyrt <- IO CopyrightDescription -> m CopyrightDescription
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO CopyrightDescription -> m CopyrightDescription)
-> IO CopyrightDescription -> m CopyrightDescription
forall a b. (a -> b) -> a -> b
$ PackageDescription -> IO CopyrightDescription
defaultCopyrightDescription PackageDescription
pkgDesc
StateT CabalInfo m () -> CabalInfo -> m CabalInfo
forall (m :: * -> *) s a. Monad m => StateT s m a -> s -> m s
execStateT
(do ((DebInfo -> Identity DebInfo) -> CabalInfo -> Identity CabalInfo
Lens' CabalInfo DebInfo
debInfo ((DebInfo -> Identity DebInfo) -> CabalInfo -> Identity CabalInfo)
-> ((Maybe CopyrightDescription
-> Identity (Maybe CopyrightDescription))
-> DebInfo -> Identity DebInfo)
-> (Maybe CopyrightDescription
-> Identity (Maybe CopyrightDescription))
-> CabalInfo
-> Identity CabalInfo
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Maybe CopyrightDescription
-> Identity (Maybe CopyrightDescription))
-> DebInfo -> Identity DebInfo
Lens' DebInfo (Maybe CopyrightDescription)
copyright) ((Maybe CopyrightDescription
-> Identity (Maybe CopyrightDescription))
-> CabalInfo -> Identity CabalInfo)
-> Maybe CopyrightDescription -> StateT CabalInfo m ()
forall s (m :: * -> *) a b.
MonadState s m =>
ASetter s s a b -> b -> m ()
.= CopyrightDescription -> Maybe CopyrightDescription
forall a. a -> Maybe a
Just CopyrightDescription
copyrt
((DebInfo -> Identity DebInfo) -> CabalInfo -> Identity CabalInfo
Lens' CabalInfo DebInfo
debInfo ((DebInfo -> Identity DebInfo) -> CabalInfo -> Identity CabalInfo)
-> ((Maybe Text -> Identity (Maybe Text))
-> DebInfo -> Identity DebInfo)
-> (Maybe Text -> Identity (Maybe Text))
-> CabalInfo
-> Identity CabalInfo
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (SourceDebDescription -> Identity SourceDebDescription)
-> DebInfo -> Identity DebInfo
Lens' DebInfo SourceDebDescription
control ((SourceDebDescription -> Identity SourceDebDescription)
-> DebInfo -> Identity DebInfo)
-> ((Maybe Text -> Identity (Maybe Text))
-> SourceDebDescription -> Identity SourceDebDescription)
-> (Maybe Text -> Identity (Maybe Text))
-> DebInfo
-> Identity DebInfo
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Maybe Text -> Identity (Maybe Text))
-> SourceDebDescription -> Identity SourceDebDescription
Lens' SourceDebDescription (Maybe Text)
S.homepage) ((Maybe Text -> Identity (Maybe Text))
-> CabalInfo -> Identity CabalInfo)
-> Maybe Text -> StateT CabalInfo m ()
forall s (m :: * -> *) a b.
MonadState s m =>
ASetter s s a b -> b -> m ()
.= case Text -> Text
strip (ShortText -> Text
toText (PackageDescription -> ShortText
Cabal.homepage PackageDescription
pkgDesc)) of
Text
x | Text -> Bool
Text.null Text
x -> Maybe Text
forall a. Maybe a
Nothing
Text
x -> Text -> Maybe Text
forall a. a -> Maybe a
Just Text
x)
(Flags -> PackageDescription -> CabalInfo
makeCabalInfo Flags
flags' PackageDescription
pkgDesc)
#if MIN_VERSION_Cabal(3,2,0)
toText :: ShortText -> Text
toText = String -> Text
pack (String -> Text) -> (ShortText -> String) -> ShortText -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShortText -> String
ST.fromShortText
#else
toText = pack
#endif
makeCabalInfo :: Flags -> PackageDescription -> CabalInfo
makeCabalInfo :: Flags -> PackageDescription -> CabalInfo
makeCabalInfo Flags
fs PackageDescription
pkgDesc =
CabalInfo
{ _packageDescription :: PackageDescription
_packageDescription = PackageDescription
pkgDesc
, _epochMap :: Map PackageName Int
_epochMap = Map PackageName Int
forall a. Monoid a => a
mempty
, _packageInfo :: Map PackageName PackageInfo
_packageInfo = Map PackageName PackageInfo
forall a. Monoid a => a
mempty
, _debianNameMap :: Map PackageName VersionSplits
_debianNameMap = Map PackageName VersionSplits
forall a. Monoid a => a
mempty
, _debInfo :: DebInfo
_debInfo = Flags -> DebInfo
makeDebInfo Flags
fs
}