{-# LANGUAGE DeriveDataTypeable, TemplateHaskell #-}
module Debian.Debianize.BasicInfo
(
Flags(..)
, EnvSet(..)
, DebType(..)
, verbosity
, dryRun
, upgrade
, roundtrip
, validate
, compilerFlavor
, cabalFlagAssignments
, buildEnv
, flagOptions
) where
import Control.Lens
import Control.Monad.State (StateT)
import Control.Monad.Trans (MonadIO)
import Data.Char (toLower, toUpper)
import Data.Generics (Data, Typeable)
import Data.Set as Set (fromList, Set, union)
import Debian.Debianize.Prelude (read')
import Debian.Orphans ()
import Distribution.Compiler (CompilerFlavor(..))
import Distribution.PackageDescription as Cabal (FlagName, mkFlagName)
import Prelude hiding (break, lines, log, null, readFile, sum)
import System.Console.GetOpt (ArgDescr(ReqArg, NoArg), OptDescr(Option))
import System.FilePath ((</>))
import Text.Read (readMaybe)
data Flags = Flags
{
Flags -> Int
_verbosity :: Int
, Flags -> Bool
_dryRun :: Bool
, Flags -> Bool
_upgrade :: Bool
, Flags -> Bool
_roundtrip :: Bool
, Flags -> Bool
_validate :: Bool
, Flags -> CompilerFlavor
_compilerFlavor :: CompilerFlavor
, Flags -> Set (FlagName, Bool)
_cabalFlagAssignments :: Set (FlagName, Bool)
, Flags -> EnvSet
_buildEnv :: EnvSet
} deriving (Flags -> Flags -> Bool
(Flags -> Flags -> Bool) -> (Flags -> Flags -> Bool) -> Eq Flags
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Flags -> Flags -> Bool
== :: Flags -> Flags -> Bool
$c/= :: Flags -> Flags -> Bool
/= :: Flags -> Flags -> Bool
Eq, Eq Flags
Eq Flags =>
(Flags -> Flags -> Ordering)
-> (Flags -> Flags -> Bool)
-> (Flags -> Flags -> Bool)
-> (Flags -> Flags -> Bool)
-> (Flags -> Flags -> Bool)
-> (Flags -> Flags -> Flags)
-> (Flags -> Flags -> Flags)
-> Ord Flags
Flags -> Flags -> Bool
Flags -> Flags -> Ordering
Flags -> Flags -> Flags
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 :: Flags -> Flags -> Ordering
compare :: Flags -> Flags -> Ordering
$c< :: Flags -> Flags -> Bool
< :: Flags -> Flags -> Bool
$c<= :: Flags -> Flags -> Bool
<= :: Flags -> Flags -> Bool
$c> :: Flags -> Flags -> Bool
> :: Flags -> Flags -> Bool
$c>= :: Flags -> Flags -> Bool
>= :: Flags -> Flags -> Bool
$cmax :: Flags -> Flags -> Flags
max :: Flags -> Flags -> Flags
$cmin :: Flags -> Flags -> Flags
min :: Flags -> Flags -> Flags
Ord, Int -> Flags -> ShowS
[Flags] -> ShowS
Flags -> String
(Int -> Flags -> ShowS)
-> (Flags -> String) -> ([Flags] -> ShowS) -> Show Flags
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Flags -> ShowS
showsPrec :: Int -> Flags -> ShowS
$cshow :: Flags -> String
show :: Flags -> String
$cshowList :: [Flags] -> ShowS
showList :: [Flags] -> ShowS
Show, Typeable Flags
Typeable Flags =>
(forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Flags -> c Flags)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Flags)
-> (Flags -> Constr)
-> (Flags -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Flags))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Flags))
-> ((forall b. Data b => b -> b) -> Flags -> Flags)
-> (forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Flags -> r)
-> (forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Flags -> r)
-> (forall u. (forall d. Data d => d -> u) -> Flags -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> Flags -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Flags -> m Flags)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Flags -> m Flags)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Flags -> m Flags)
-> Data Flags
Flags -> Constr
Flags -> DataType
(forall b. Data b => b -> b) -> Flags -> Flags
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) -> Flags -> u
forall u. (forall d. Data d => d -> u) -> Flags -> [u]
forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Flags -> r
forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Flags -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Flags -> m Flags
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Flags -> m Flags
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Flags
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Flags -> c Flags
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Flags)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Flags)
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Flags -> c Flags
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Flags -> c Flags
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Flags
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Flags
$ctoConstr :: Flags -> Constr
toConstr :: Flags -> Constr
$cdataTypeOf :: Flags -> DataType
dataTypeOf :: Flags -> DataType
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Flags)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Flags)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Flags)
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Flags)
$cgmapT :: (forall b. Data b => b -> b) -> Flags -> Flags
gmapT :: (forall b. Data b => b -> b) -> Flags -> Flags
$cgmapQl :: forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Flags -> r
gmapQl :: forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Flags -> r
$cgmapQr :: forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Flags -> r
gmapQr :: forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Flags -> r
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> Flags -> [u]
gmapQ :: forall u. (forall d. Data d => d -> u) -> Flags -> [u]
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> Flags -> u
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> Flags -> u
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Flags -> m Flags
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Flags -> m Flags
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Flags -> m Flags
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Flags -> m Flags
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Flags -> m Flags
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Flags -> m Flags
Data, Typeable)
data EnvSet = EnvSet
{ EnvSet -> String
cleanOS :: FilePath
, EnvSet -> String
dependOS :: FilePath
, EnvSet -> String
buildOS :: FilePath
} deriving (EnvSet -> EnvSet -> Bool
(EnvSet -> EnvSet -> Bool)
-> (EnvSet -> EnvSet -> Bool) -> Eq EnvSet
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: EnvSet -> EnvSet -> Bool
== :: EnvSet -> EnvSet -> Bool
$c/= :: EnvSet -> EnvSet -> Bool
/= :: EnvSet -> EnvSet -> Bool
Eq, Eq EnvSet
Eq EnvSet =>
(EnvSet -> EnvSet -> Ordering)
-> (EnvSet -> EnvSet -> Bool)
-> (EnvSet -> EnvSet -> Bool)
-> (EnvSet -> EnvSet -> Bool)
-> (EnvSet -> EnvSet -> Bool)
-> (EnvSet -> EnvSet -> EnvSet)
-> (EnvSet -> EnvSet -> EnvSet)
-> Ord EnvSet
EnvSet -> EnvSet -> Bool
EnvSet -> EnvSet -> Ordering
EnvSet -> EnvSet -> EnvSet
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 :: EnvSet -> EnvSet -> Ordering
compare :: EnvSet -> EnvSet -> Ordering
$c< :: EnvSet -> EnvSet -> Bool
< :: EnvSet -> EnvSet -> Bool
$c<= :: EnvSet -> EnvSet -> Bool
<= :: EnvSet -> EnvSet -> Bool
$c> :: EnvSet -> EnvSet -> Bool
> :: EnvSet -> EnvSet -> Bool
$c>= :: EnvSet -> EnvSet -> Bool
>= :: EnvSet -> EnvSet -> Bool
$cmax :: EnvSet -> EnvSet -> EnvSet
max :: EnvSet -> EnvSet -> EnvSet
$cmin :: EnvSet -> EnvSet -> EnvSet
min :: EnvSet -> EnvSet -> EnvSet
Ord, Int -> EnvSet -> ShowS
[EnvSet] -> ShowS
EnvSet -> String
(Int -> EnvSet -> ShowS)
-> (EnvSet -> String) -> ([EnvSet] -> ShowS) -> Show EnvSet
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> EnvSet -> ShowS
showsPrec :: Int -> EnvSet -> ShowS
$cshow :: EnvSet -> String
show :: EnvSet -> String
$cshowList :: [EnvSet] -> ShowS
showList :: [EnvSet] -> ShowS
Show, Typeable EnvSet
Typeable EnvSet =>
(forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> EnvSet -> c EnvSet)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c EnvSet)
-> (EnvSet -> Constr)
-> (EnvSet -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c EnvSet))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c EnvSet))
-> ((forall b. Data b => b -> b) -> EnvSet -> EnvSet)
-> (forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> EnvSet -> r)
-> (forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> EnvSet -> r)
-> (forall u. (forall d. Data d => d -> u) -> EnvSet -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> EnvSet -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> EnvSet -> m EnvSet)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> EnvSet -> m EnvSet)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> EnvSet -> m EnvSet)
-> Data EnvSet
EnvSet -> Constr
EnvSet -> DataType
(forall b. Data b => b -> b) -> EnvSet -> EnvSet
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) -> EnvSet -> u
forall u. (forall d. Data d => d -> u) -> EnvSet -> [u]
forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> EnvSet -> r
forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> EnvSet -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> EnvSet -> m EnvSet
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> EnvSet -> m EnvSet
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c EnvSet
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> EnvSet -> c EnvSet
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c EnvSet)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c EnvSet)
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> EnvSet -> c EnvSet
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> EnvSet -> c EnvSet
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c EnvSet
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c EnvSet
$ctoConstr :: EnvSet -> Constr
toConstr :: EnvSet -> Constr
$cdataTypeOf :: EnvSet -> DataType
dataTypeOf :: EnvSet -> DataType
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c EnvSet)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c EnvSet)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c EnvSet)
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c EnvSet)
$cgmapT :: (forall b. Data b => b -> b) -> EnvSet -> EnvSet
gmapT :: (forall b. Data b => b -> b) -> EnvSet -> EnvSet
$cgmapQl :: forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> EnvSet -> r
gmapQl :: forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> EnvSet -> r
$cgmapQr :: forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> EnvSet -> r
gmapQr :: forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> EnvSet -> r
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> EnvSet -> [u]
gmapQ :: forall u. (forall d. Data d => d -> u) -> EnvSet -> [u]
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> EnvSet -> u
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> EnvSet -> u
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> EnvSet -> m EnvSet
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> EnvSet -> m EnvSet
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> EnvSet -> m EnvSet
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> EnvSet -> m EnvSet
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> EnvSet -> m EnvSet
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> EnvSet -> m EnvSet
Data, Typeable)
data DebType = Dev | Prof | Doc deriving (DebType -> DebType -> Bool
(DebType -> DebType -> Bool)
-> (DebType -> DebType -> Bool) -> Eq DebType
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: DebType -> DebType -> Bool
== :: DebType -> DebType -> Bool
$c/= :: DebType -> DebType -> Bool
/= :: DebType -> DebType -> Bool
Eq, Eq DebType
Eq DebType =>
(DebType -> DebType -> Ordering)
-> (DebType -> DebType -> Bool)
-> (DebType -> DebType -> Bool)
-> (DebType -> DebType -> Bool)
-> (DebType -> DebType -> Bool)
-> (DebType -> DebType -> DebType)
-> (DebType -> DebType -> DebType)
-> Ord DebType
DebType -> DebType -> Bool
DebType -> DebType -> Ordering
DebType -> DebType -> DebType
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 :: DebType -> DebType -> Ordering
compare :: DebType -> DebType -> Ordering
$c< :: DebType -> DebType -> Bool
< :: DebType -> DebType -> Bool
$c<= :: DebType -> DebType -> Bool
<= :: DebType -> DebType -> Bool
$c> :: DebType -> DebType -> Bool
> :: DebType -> DebType -> Bool
$c>= :: DebType -> DebType -> Bool
>= :: DebType -> DebType -> Bool
$cmax :: DebType -> DebType -> DebType
max :: DebType -> DebType -> DebType
$cmin :: DebType -> DebType -> DebType
min :: DebType -> DebType -> DebType
Ord, ReadPrec [DebType]
ReadPrec DebType
Int -> ReadS DebType
ReadS [DebType]
(Int -> ReadS DebType)
-> ReadS [DebType]
-> ReadPrec DebType
-> ReadPrec [DebType]
-> Read DebType
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS DebType
readsPrec :: Int -> ReadS DebType
$creadList :: ReadS [DebType]
readList :: ReadS [DebType]
$creadPrec :: ReadPrec DebType
readPrec :: ReadPrec DebType
$creadListPrec :: ReadPrec [DebType]
readListPrec :: ReadPrec [DebType]
Read, Int -> DebType -> ShowS
[DebType] -> ShowS
DebType -> String
(Int -> DebType -> ShowS)
-> (DebType -> String) -> ([DebType] -> ShowS) -> Show DebType
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> DebType -> ShowS
showsPrec :: Int -> DebType -> ShowS
$cshow :: DebType -> String
show :: DebType -> String
$cshowList :: [DebType] -> ShowS
showList :: [DebType] -> ShowS
Show, Typeable DebType
Typeable DebType =>
(forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> DebType -> c DebType)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c DebType)
-> (DebType -> Constr)
-> (DebType -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c DebType))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c DebType))
-> ((forall b. Data b => b -> b) -> DebType -> DebType)
-> (forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> DebType -> r)
-> (forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> DebType -> r)
-> (forall u. (forall d. Data d => d -> u) -> DebType -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> DebType -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> DebType -> m DebType)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> DebType -> m DebType)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> DebType -> m DebType)
-> Data DebType
DebType -> Constr
DebType -> DataType
(forall b. Data b => b -> b) -> DebType -> DebType
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) -> DebType -> u
forall u. (forall d. Data d => d -> u) -> DebType -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> DebType -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> DebType -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> DebType -> m DebType
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> DebType -> m DebType
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c DebType
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> DebType -> c DebType
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c DebType)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c DebType)
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> DebType -> c DebType
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> DebType -> c DebType
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c DebType
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c DebType
$ctoConstr :: DebType -> Constr
toConstr :: DebType -> Constr
$cdataTypeOf :: DebType -> DataType
dataTypeOf :: DebType -> DataType
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c DebType)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c DebType)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c DebType)
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c DebType)
$cgmapT :: (forall b. Data b => b -> b) -> DebType -> DebType
gmapT :: (forall b. Data b => b -> b) -> DebType -> DebType
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> DebType -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> DebType -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> DebType -> r
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> DebType -> r
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> DebType -> [u]
gmapQ :: forall u. (forall d. Data d => d -> u) -> DebType -> [u]
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> DebType -> u
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> DebType -> u
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> DebType -> m DebType
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> DebType -> m DebType
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> DebType -> m DebType
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> DebType -> m DebType
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> DebType -> m DebType
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> DebType -> m DebType
Data, Typeable)
$(makeLenses ''Flags)
flagOptions :: MonadIO m => [OptDescr (StateT Flags m ())]
flagOptions :: forall (m :: * -> *). MonadIO m => [OptDescr (StateT Flags m ())]
flagOptions =
[ String
-> [String]
-> ArgDescr (StateT Flags m ())
-> String
-> OptDescr (StateT Flags m ())
forall a. String -> [String] -> ArgDescr a -> String -> OptDescr a
Option String
"v" [String
"verbose"] ((String -> StateT Flags m ())
-> String -> ArgDescr (StateT Flags m ())
forall a. (String -> a) -> String -> ArgDescr a
ReqArg (\ String
s -> (Int -> Identity Int) -> Flags -> Identity Flags
Lens' Flags Int
verbosity ((Int -> Identity Int) -> Flags -> Identity Flags)
-> Int -> StateT Flags m ()
forall s (m :: * -> *) a b.
MonadState s m =>
ASetter s s a b -> b -> m ()
.= ((String -> Int) -> String -> Int
forall a. Read a => (String -> a) -> String -> a
read' (\ String
s' -> String -> Int
forall a. HasCallStack => String -> a
error (String -> Int) -> String -> Int
forall a b. (a -> b) -> a -> b
$ String
"verbose: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ ShowS
forall a. Show a => a -> String
show String
s') String
s :: Int)) String
"number")
String
"Change the amount of progress messages generated",
String
-> [String]
-> ArgDescr (StateT Flags m ())
-> String
-> OptDescr (StateT Flags m ())
forall a. String -> [String] -> ArgDescr a -> String -> OptDescr a
Option String
"n" [String
"dry-run", String
"compare"] (StateT Flags m () -> ArgDescr (StateT Flags m ())
forall a. a -> ArgDescr a
NoArg ((Bool -> Identity Bool) -> Flags -> Identity Flags
Lens' Flags Bool
dryRun ((Bool -> Identity Bool) -> Flags -> Identity Flags)
-> Bool -> StateT Flags m ()
forall s (m :: * -> *) a b.
MonadState s m =>
ASetter s s a b -> b -> m ()
.= Bool
True))
String
"Just compare the existing debianization to the one we would generate.",
String
-> [String]
-> ArgDescr (StateT Flags m ())
-> String
-> OptDescr (StateT Flags m ())
forall a. String -> [String] -> ArgDescr a -> String -> OptDescr a
Option String
"" [String
"upgrade"] (StateT Flags m () -> ArgDescr (StateT Flags m ())
forall a. a -> ArgDescr a
NoArg ((Bool -> Identity Bool) -> Flags -> Identity Flags
Lens' Flags Bool
upgrade ((Bool -> Identity Bool) -> Flags -> Identity Flags)
-> Bool -> StateT Flags m ()
forall s (m :: * -> *) a b.
MonadState s m =>
ASetter s s a b -> b -> m ()
.= Bool
True))
String
"Carefully upgrade an existing debianization",
String
-> [String]
-> ArgDescr (StateT Flags m ())
-> String
-> OptDescr (StateT Flags m ())
forall a. String -> [String] -> ArgDescr a -> String -> OptDescr a
Option String
"" [String
"roundtrip"] (StateT Flags m () -> ArgDescr (StateT Flags m ())
forall a. a -> ArgDescr a
NoArg ((Bool -> Identity Bool) -> Flags -> Identity Flags
Lens' Flags Bool
roundtrip ((Bool -> Identity Bool) -> Flags -> Identity Flags)
-> Bool -> StateT Flags m ()
forall s (m :: * -> *) a b.
MonadState s m =>
ASetter s s a b -> b -> m ()
.= Bool
True))
String
"Rountrip a debianization to normalize it",
String
-> [String]
-> ArgDescr (StateT Flags m ())
-> String
-> OptDescr (StateT Flags m ())
forall a. String -> [String] -> ArgDescr a -> String -> OptDescr a
Option String
"" [String
"ghc"] (StateT Flags m () -> ArgDescr (StateT Flags m ())
forall a. a -> ArgDescr a
NoArg ((CompilerFlavor -> Identity CompilerFlavor)
-> Flags -> Identity Flags
Lens' Flags CompilerFlavor
compilerFlavor ((CompilerFlavor -> Identity CompilerFlavor)
-> Flags -> Identity Flags)
-> CompilerFlavor -> StateT Flags m ()
forall s (m :: * -> *) a b.
MonadState s m =>
ASetter s s a b -> b -> m ()
.= CompilerFlavor
GHC)) String
"Generate packages for GHC - same as --with-compiler GHC",
String
-> [String]
-> ArgDescr (StateT Flags m ())
-> String
-> OptDescr (StateT Flags m ())
forall a. String -> [String] -> ArgDescr a -> String -> OptDescr a
Option String
"" [String
"ghcjs"] (StateT Flags m () -> ArgDescr (StateT Flags m ())
forall a. a -> ArgDescr a
NoArg ((CompilerFlavor -> Identity CompilerFlavor)
-> Flags -> Identity Flags
Lens' Flags CompilerFlavor
compilerFlavor ((CompilerFlavor -> Identity CompilerFlavor)
-> Flags -> Identity Flags)
-> CompilerFlavor -> StateT Flags m ()
forall s (m :: * -> *) a b.
MonadState s m =>
ASetter s s a b -> b -> m ()
.= CompilerFlavor
GHCJS)) String
"Generate packages for GHCJS - same as --with-compiler GHCJS",
String
-> [String]
-> ArgDescr (StateT Flags m ())
-> String
-> OptDescr (StateT Flags m ())
forall a. String -> [String] -> ArgDescr a -> String -> OptDescr a
Option String
"" [String
"hugs"] (StateT Flags m () -> ArgDescr (StateT Flags m ())
forall a. a -> ArgDescr a
NoArg ((CompilerFlavor -> Identity CompilerFlavor)
-> Flags -> Identity Flags
Lens' Flags CompilerFlavor
compilerFlavor ((CompilerFlavor -> Identity CompilerFlavor)
-> Flags -> Identity Flags)
-> CompilerFlavor -> StateT Flags m ()
forall s (m :: * -> *) a b.
MonadState s m =>
ASetter s s a b -> b -> m ()
.= CompilerFlavor
Hugs)) String
"Generate packages for Hugs - same as --with-compiler GHC",
String
-> [String]
-> ArgDescr (StateT Flags m ())
-> String
-> OptDescr (StateT Flags m ())
forall a. String -> [String] -> ArgDescr a -> String -> OptDescr a
Option String
"" [String
"with-compiler"] ((String -> StateT Flags m ())
-> String -> ArgDescr (StateT Flags m ())
forall a. (String -> a) -> String -> ArgDescr a
ReqArg (\ String
s -> StateT Flags m ()
-> (CompilerFlavor -> StateT Flags m ())
-> Maybe CompilerFlavor
-> StateT Flags m ()
forall b a. b -> (a -> b) -> Maybe a -> b
maybe (String -> StateT Flags m ()
forall a. HasCallStack => String -> a
error (String -> StateT Flags m ()) -> String -> StateT Flags m ()
forall a b. (a -> b) -> a -> b
$ String
"Invalid compiler id: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ ShowS
forall a. Show a => a -> String
show String
s)
(\ CompilerFlavor
hc -> (CompilerFlavor -> Identity CompilerFlavor)
-> Flags -> Identity Flags
Lens' Flags CompilerFlavor
compilerFlavor ((CompilerFlavor -> Identity CompilerFlavor)
-> Flags -> Identity Flags)
-> CompilerFlavor -> StateT Flags m ()
forall s (m :: * -> *) a b.
MonadState s m =>
ASetter s s a b -> b -> m ()
.= CompilerFlavor
hc)
(String -> Maybe CompilerFlavor
forall a. Read a => String -> Maybe a
readMaybe ((Char -> Char) -> ShowS
forall a b. (a -> b) -> [a] -> [b]
map Char -> Char
toUpper String
s) :: Maybe CompilerFlavor)) String
"COMPILER")
([String] -> String
unlines [ String
"Generate packages for this CompilerFlavor" ]),
String
-> [String]
-> ArgDescr (StateT Flags m ())
-> String
-> OptDescr (StateT Flags m ())
forall a. String -> [String] -> ArgDescr a -> String -> OptDescr a
Option String
"f" [String
"flags"] ((String -> StateT Flags m ())
-> String -> ArgDescr (StateT Flags m ())
forall a. (String -> a) -> String -> ArgDescr a
ReqArg (\ String
fs -> (Set (FlagName, Bool) -> Identity (Set (FlagName, Bool)))
-> Flags -> Identity Flags
Lens' Flags (Set (FlagName, Bool))
cabalFlagAssignments ((Set (FlagName, Bool) -> Identity (Set (FlagName, Bool)))
-> Flags -> Identity Flags)
-> (Set (FlagName, Bool) -> Set (FlagName, Bool))
-> StateT Flags m ()
forall s (m :: * -> *) a b.
MonadState s m =>
ASetter s s a b -> (a -> b) -> m ()
%= (Set (FlagName, Bool)
-> Set (FlagName, Bool) -> Set (FlagName, Bool)
forall a. Ord a => Set a -> Set a -> Set a
Set.union ([(FlagName, Bool)] -> Set (FlagName, Bool)
forall a. Ord a => [a] -> Set a
Set.fromList (String -> [(FlagName, Bool)]
flagList String
fs)))) String
"FLAGS")
([String] -> String
unlines [ String
"Flags to pass to the finalizePackageDescription function in"
, String
"Distribution.PackageDescription.Configuration when loading the cabal file."]),
String
-> [String]
-> ArgDescr (StateT Flags m ())
-> String
-> OptDescr (StateT Flags m ())
forall a. String -> [String] -> ArgDescr a -> String -> OptDescr a
Option String
"" [String
"buildenvdir"] ((String -> StateT Flags m ())
-> String -> ArgDescr (StateT Flags m ())
forall a. (String -> a) -> String -> ArgDescr a
ReqArg (\ String
s -> (EnvSet -> Identity EnvSet) -> Flags -> Identity Flags
Lens' Flags EnvSet
buildEnv ((EnvSet -> Identity EnvSet) -> Flags -> Identity Flags)
-> EnvSet -> StateT Flags m ()
forall s (m :: * -> *) a b.
MonadState s m =>
ASetter s s a b -> b -> m ()
.= EnvSet {cleanOS :: String
cleanOS = String
s String -> ShowS
</> String
"clean", dependOS :: String
dependOS = String
s String -> ShowS
</> String
"depend", buildOS :: String
buildOS = String
s String -> ShowS
</> String
"build"}) String
"PATH")
String
"Directory containing the three build environments, clean, depend, and build.",
String
-> [String]
-> ArgDescr (StateT Flags m ())
-> String
-> OptDescr (StateT Flags m ())
forall a. String -> [String] -> ArgDescr a -> String -> OptDescr a
Option String
"f" [String
"cabal-flags"] ((String -> StateT Flags m ())
-> String -> ArgDescr (StateT Flags m ())
forall a. (String -> a) -> String -> ArgDescr a
ReqArg (\ String
s -> (Set (FlagName, Bool) -> Identity (Set (FlagName, Bool)))
-> Flags -> Identity Flags
Lens' Flags (Set (FlagName, Bool))
cabalFlagAssignments ((Set (FlagName, Bool) -> Identity (Set (FlagName, Bool)))
-> Flags -> Identity Flags)
-> (Set (FlagName, Bool) -> Set (FlagName, Bool))
-> StateT Flags m ()
forall s (m :: * -> *) a b.
MonadState s m =>
ASetter s s a b -> (a -> b) -> m ()
%= (Set (FlagName, Bool)
-> Set (FlagName, Bool) -> Set (FlagName, Bool)
forall a. Ord a => Set a -> Set a -> Set a
Set.union ([(FlagName, Bool)] -> Set (FlagName, Bool)
forall a. Ord a => [a] -> Set a
fromList (String -> [(FlagName, Bool)]
flagList String
s)))) String
"FLAG FLAG ...")
String
"Flags to pass to cabal configure with the --flags= option "
]
flagList :: String -> [(FlagName, Bool)]
flagList :: String -> [(FlagName, Bool)]
flagList = (String -> (FlagName, Bool)) -> [String] -> [(FlagName, Bool)]
forall a b. (a -> b) -> [a] -> [b]
map String -> (FlagName, Bool)
tagWithValue ([String] -> [(FlagName, Bool)])
-> (String -> [String]) -> String -> [(FlagName, Bool)]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> [String]
words
where tagWithValue :: String -> (FlagName, Bool)
tagWithValue (Char
'-':String
name) = (String -> FlagName
mkFlagName ((Char -> Char) -> ShowS
forall a b. (a -> b) -> [a] -> [b]
map Char -> Char
toLower String
name), Bool
False)
tagWithValue String
name = (String -> FlagName
mkFlagName ((Char -> Char) -> ShowS
forall a b. (a -> b) -> [a] -> [b]
map Char -> Char
toLower String
name), Bool
True)