{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE PatternSynonyms #-}

module Distribution.Client.CmdInstall.ClientInstallFlags
  ( InstallMethod (..)
  , ClientInstallFlags (..)
  , defaultClientInstallFlags
  , clientInstallOptions
  , clientInstallFlagsGrammar
  ) where

import Distribution.Client.Compat.Prelude
import Distribution.Compat.Lens (Lens')
import Distribution.FieldGrammar
import Prelude ()

import Distribution.ReadE
  ( parsecToReadE
  , succeedReadE
  )
import Distribution.Simple.Command
  ( OptionField (..)
  , ShowOrParseArgs (..)
  , option
  , reqArg
  )
import Distribution.Simple.Setup
  ( Flag
  , flagToList
  , toFlag
  , trueArg
  , pattern Flag
  )

import Distribution.Client.Types.InstallMethod
  ( InstallMethod (..)
  )
import Distribution.Client.Types.OverwritePolicy
  ( OverwritePolicy (..)
  )
import Distribution.Client.Utils.Parsec

import qualified Distribution.Compat.CharParsing as P

data ClientInstallFlags = ClientInstallFlags
  { ClientInstallFlags -> Flag Bool
cinstInstallLibs :: Flag Bool
  , ClientInstallFlags -> Flag FilePath
cinstEnvironmentPath :: Flag FilePath
  , ClientInstallFlags -> Flag OverwritePolicy
cinstOverwritePolicy :: Flag OverwritePolicy
  , ClientInstallFlags -> Flag InstallMethod
cinstInstallMethod :: Flag InstallMethod
  , ClientInstallFlags -> Flag FilePath
cinstInstalldir :: Flag FilePath
  }
  deriving (ClientInstallFlags -> ClientInstallFlags -> Bool
(ClientInstallFlags -> ClientInstallFlags -> Bool)
-> (ClientInstallFlags -> ClientInstallFlags -> Bool)
-> Eq ClientInstallFlags
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ClientInstallFlags -> ClientInstallFlags -> Bool
== :: ClientInstallFlags -> ClientInstallFlags -> Bool
$c/= :: ClientInstallFlags -> ClientInstallFlags -> Bool
/= :: ClientInstallFlags -> ClientInstallFlags -> Bool
Eq, Int -> ClientInstallFlags -> ShowS
[ClientInstallFlags] -> ShowS
ClientInstallFlags -> FilePath
(Int -> ClientInstallFlags -> ShowS)
-> (ClientInstallFlags -> FilePath)
-> ([ClientInstallFlags] -> ShowS)
-> Show ClientInstallFlags
forall a.
(Int -> a -> ShowS) -> (a -> FilePath) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ClientInstallFlags -> ShowS
showsPrec :: Int -> ClientInstallFlags -> ShowS
$cshow :: ClientInstallFlags -> FilePath
show :: ClientInstallFlags -> FilePath
$cshowList :: [ClientInstallFlags] -> ShowS
showList :: [ClientInstallFlags] -> ShowS
Show, (forall x. ClientInstallFlags -> Rep ClientInstallFlags x)
-> (forall x. Rep ClientInstallFlags x -> ClientInstallFlags)
-> Generic ClientInstallFlags
forall x. Rep ClientInstallFlags x -> ClientInstallFlags
forall x. ClientInstallFlags -> Rep ClientInstallFlags x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. ClientInstallFlags -> Rep ClientInstallFlags x
from :: forall x. ClientInstallFlags -> Rep ClientInstallFlags x
$cto :: forall x. Rep ClientInstallFlags x -> ClientInstallFlags
to :: forall x. Rep ClientInstallFlags x -> ClientInstallFlags
Generic)

instance Monoid ClientInstallFlags where
  mempty :: ClientInstallFlags
mempty = ClientInstallFlags
forall a. (Generic a, GMonoid (Rep a)) => a
gmempty
  mappend :: ClientInstallFlags -> ClientInstallFlags -> ClientInstallFlags
mappend = ClientInstallFlags -> ClientInstallFlags -> ClientInstallFlags
forall a. Semigroup a => a -> a -> a
(<>)

instance Semigroup ClientInstallFlags where
  <> :: ClientInstallFlags -> ClientInstallFlags -> ClientInstallFlags
(<>) = ClientInstallFlags -> ClientInstallFlags -> ClientInstallFlags
forall a. (Generic a, GSemigroup (Rep a)) => a -> a -> a
gmappend

instance Binary ClientInstallFlags
instance NFData ClientInstallFlags
instance Structured ClientInstallFlags

defaultClientInstallFlags :: ClientInstallFlags
defaultClientInstallFlags :: ClientInstallFlags
defaultClientInstallFlags =
  ClientInstallFlags
    { cinstInstallLibs :: Flag Bool
cinstInstallLibs = Bool -> Flag Bool
forall a. a -> Flag a
toFlag Bool
False
    , cinstEnvironmentPath :: Flag FilePath
cinstEnvironmentPath = Flag FilePath
forall a. Monoid a => a
mempty
    , cinstOverwritePolicy :: Flag OverwritePolicy
cinstOverwritePolicy = Flag OverwritePolicy
forall a. Monoid a => a
mempty
    , cinstInstallMethod :: Flag InstallMethod
cinstInstallMethod = Flag InstallMethod
forall a. Monoid a => a
mempty
    , cinstInstalldir :: Flag FilePath
cinstInstalldir = Flag FilePath
forall a. Monoid a => a
mempty
    }

clientInstallOptions :: ShowOrParseArgs -> [OptionField ClientInstallFlags]
clientInstallOptions :: ShowOrParseArgs -> [OptionField ClientInstallFlags]
clientInstallOptions ShowOrParseArgs
_ =
  [ FilePath
-> LFlags
-> FilePath
-> (ClientInstallFlags -> Flag Bool)
-> (Flag Bool -> ClientInstallFlags -> ClientInstallFlags)
-> MkOptDescr
     (ClientInstallFlags -> Flag Bool)
     (Flag Bool -> ClientInstallFlags -> ClientInstallFlags)
     ClientInstallFlags
-> OptionField ClientInstallFlags
forall get set a.
FilePath
-> LFlags
-> FilePath
-> get
-> set
-> MkOptDescr get set a
-> OptionField a
option
      []
      [FilePath
"lib"]
      ( FilePath
"Install libraries rather than executables from the target package "
          FilePath -> ShowS
forall a. Semigroup a => a -> a -> a
<> FilePath
"(provisional, see https://github.com/haskell/cabal/issues/6481 for more information)."
      )
      ClientInstallFlags -> Flag Bool
cinstInstallLibs
      (\Flag Bool
v ClientInstallFlags
flags -> ClientInstallFlags
flags{cinstInstallLibs = v})
      MkOptDescr
  (ClientInstallFlags -> Flag Bool)
  (Flag Bool -> ClientInstallFlags -> ClientInstallFlags)
  ClientInstallFlags
forall a. MkOptDescr (a -> Flag Bool) (Flag Bool -> a -> a) a
trueArg
  , FilePath
-> LFlags
-> FilePath
-> (ClientInstallFlags -> Flag FilePath)
-> (Flag FilePath -> ClientInstallFlags -> ClientInstallFlags)
-> MkOptDescr
     (ClientInstallFlags -> Flag FilePath)
     (Flag FilePath -> ClientInstallFlags -> ClientInstallFlags)
     ClientInstallFlags
-> OptionField ClientInstallFlags
forall get set a.
FilePath
-> LFlags
-> FilePath
-> get
-> set
-> MkOptDescr get set a
-> OptionField a
option
      []
      [FilePath
"package-env", FilePath
"env"]
      FilePath
"Set the environment file that may be modified."
      ClientInstallFlags -> Flag FilePath
cinstEnvironmentPath
      (\Flag FilePath
pf ClientInstallFlags
flags -> ClientInstallFlags
flags{cinstEnvironmentPath = pf})
      (FilePath
-> ReadE (Flag FilePath)
-> (Flag FilePath -> LFlags)
-> MkOptDescr
     (ClientInstallFlags -> Flag FilePath)
     (Flag FilePath -> ClientInstallFlags -> ClientInstallFlags)
     ClientInstallFlags
forall b a.
Monoid b =>
FilePath
-> ReadE b -> (b -> LFlags) -> MkOptDescr (a -> b) (b -> a -> a) a
reqArg FilePath
"ENV" ((FilePath -> Flag FilePath) -> ReadE (Flag FilePath)
forall a. (FilePath -> a) -> ReadE a
succeedReadE FilePath -> Flag FilePath
forall a. a -> Flag a
Flag) Flag FilePath -> LFlags
forall a. Flag a -> [a]
flagToList)
  , FilePath
-> LFlags
-> FilePath
-> (ClientInstallFlags -> Flag OverwritePolicy)
-> (Flag OverwritePolicy
    -> ClientInstallFlags -> ClientInstallFlags)
-> MkOptDescr
     (ClientInstallFlags -> Flag OverwritePolicy)
     (Flag OverwritePolicy -> ClientInstallFlags -> ClientInstallFlags)
     ClientInstallFlags
-> OptionField ClientInstallFlags
forall get set a.
FilePath
-> LFlags
-> FilePath
-> get
-> set
-> MkOptDescr get set a
-> OptionField a
option
      []
      [FilePath
"overwrite-policy"]
      FilePath
"How to handle already existing symlinks."
      ClientInstallFlags -> Flag OverwritePolicy
cinstOverwritePolicy
      (\Flag OverwritePolicy
v ClientInstallFlags
flags -> ClientInstallFlags
flags{cinstOverwritePolicy = v})
      (MkOptDescr
   (ClientInstallFlags -> Flag OverwritePolicy)
   (Flag OverwritePolicy -> ClientInstallFlags -> ClientInstallFlags)
   ClientInstallFlags
 -> OptionField ClientInstallFlags)
-> MkOptDescr
     (ClientInstallFlags -> Flag OverwritePolicy)
     (Flag OverwritePolicy -> ClientInstallFlags -> ClientInstallFlags)
     ClientInstallFlags
-> OptionField ClientInstallFlags
forall a b. (a -> b) -> a -> b
$ FilePath
-> ReadE (Flag OverwritePolicy)
-> (Flag OverwritePolicy -> LFlags)
-> MkOptDescr
     (ClientInstallFlags -> Flag OverwritePolicy)
     (Flag OverwritePolicy -> ClientInstallFlags -> ClientInstallFlags)
     ClientInstallFlags
forall b a.
Monoid b =>
FilePath
-> ReadE b -> (b -> LFlags) -> MkOptDescr (a -> b) (b -> a -> a) a
reqArg
        FilePath
"always|never|prompt"
        (ShowS
-> ParsecParser (Flag OverwritePolicy)
-> ReadE (Flag OverwritePolicy)
forall a. ShowS -> ParsecParser a -> ReadE a
parsecToReadE (\FilePath
err -> FilePath
"Error parsing overwrite-policy: " FilePath -> ShowS
forall a. [a] -> [a] -> [a]
++ FilePath
err) (OverwritePolicy -> Flag OverwritePolicy
forall a. a -> Flag a
toFlag (OverwritePolicy -> Flag OverwritePolicy)
-> ParsecParser OverwritePolicy
-> ParsecParser (Flag OverwritePolicy)
forall a b. (a -> b) -> ParsecParser a -> ParsecParser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
`fmap` ParsecParser OverwritePolicy
forall a (m :: * -> *). (Parsec a, CabalParsing m) => m a
forall (m :: * -> *). CabalParsing m => m OverwritePolicy
parsec))
        ((OverwritePolicy -> FilePath) -> [OverwritePolicy] -> LFlags
forall a b. (a -> b) -> [a] -> [b]
map OverwritePolicy -> FilePath
forall a. Pretty a => a -> FilePath
prettyShow ([OverwritePolicy] -> LFlags)
-> (Flag OverwritePolicy -> [OverwritePolicy])
-> Flag OverwritePolicy
-> LFlags
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Flag OverwritePolicy -> [OverwritePolicy]
forall a. Flag a -> [a]
flagToList)
  , FilePath
-> LFlags
-> FilePath
-> (ClientInstallFlags -> Flag InstallMethod)
-> (Flag InstallMethod -> ClientInstallFlags -> ClientInstallFlags)
-> MkOptDescr
     (ClientInstallFlags -> Flag InstallMethod)
     (Flag InstallMethod -> ClientInstallFlags -> ClientInstallFlags)
     ClientInstallFlags
-> OptionField ClientInstallFlags
forall get set a.
FilePath
-> LFlags
-> FilePath
-> get
-> set
-> MkOptDescr get set a
-> OptionField a
option
      []
      [FilePath
"install-method"]
      FilePath
"How to install the executables."
      ClientInstallFlags -> Flag InstallMethod
cinstInstallMethod
      (\Flag InstallMethod
v ClientInstallFlags
flags -> ClientInstallFlags
flags{cinstInstallMethod = v})
      (MkOptDescr
   (ClientInstallFlags -> Flag InstallMethod)
   (Flag InstallMethod -> ClientInstallFlags -> ClientInstallFlags)
   ClientInstallFlags
 -> OptionField ClientInstallFlags)
-> MkOptDescr
     (ClientInstallFlags -> Flag InstallMethod)
     (Flag InstallMethod -> ClientInstallFlags -> ClientInstallFlags)
     ClientInstallFlags
-> OptionField ClientInstallFlags
forall a b. (a -> b) -> a -> b
$ FilePath
-> ReadE (Flag InstallMethod)
-> (Flag InstallMethod -> LFlags)
-> MkOptDescr
     (ClientInstallFlags -> Flag InstallMethod)
     (Flag InstallMethod -> ClientInstallFlags -> ClientInstallFlags)
     ClientInstallFlags
forall b a.
Monoid b =>
FilePath
-> ReadE b -> (b -> LFlags) -> MkOptDescr (a -> b) (b -> a -> a) a
reqArg
        FilePath
"default|copy|symlink"
        (ShowS
-> ParsecParser (Flag InstallMethod) -> ReadE (Flag InstallMethod)
forall a. ShowS -> ParsecParser a -> ReadE a
parsecToReadE (\FilePath
err -> FilePath
"Error parsing install-method: " FilePath -> ShowS
forall a. [a] -> [a] -> [a]
++ FilePath
err) (InstallMethod -> Flag InstallMethod
forall a. a -> Flag a
toFlag (InstallMethod -> Flag InstallMethod)
-> ParsecParser InstallMethod -> ParsecParser (Flag InstallMethod)
forall a b. (a -> b) -> ParsecParser a -> ParsecParser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
`fmap` ParsecParser InstallMethod
forall (m :: * -> *). CabalParsing m => m InstallMethod
parsecInstallMethod))
        ((InstallMethod -> FilePath) -> [InstallMethod] -> LFlags
forall a b. (a -> b) -> [a] -> [b]
map InstallMethod -> FilePath
forall a. Pretty a => a -> FilePath
prettyShow ([InstallMethod] -> LFlags)
-> (Flag InstallMethod -> [InstallMethod])
-> Flag InstallMethod
-> LFlags
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Flag InstallMethod -> [InstallMethod]
forall a. Flag a -> [a]
flagToList)
  , FilePath
-> LFlags
-> FilePath
-> (ClientInstallFlags -> Flag FilePath)
-> (Flag FilePath -> ClientInstallFlags -> ClientInstallFlags)
-> MkOptDescr
     (ClientInstallFlags -> Flag FilePath)
     (Flag FilePath -> ClientInstallFlags -> ClientInstallFlags)
     ClientInstallFlags
-> OptionField ClientInstallFlags
forall get set a.
FilePath
-> LFlags
-> FilePath
-> get
-> set
-> MkOptDescr get set a
-> OptionField a
option
      []
      [FilePath
"installdir"]
      FilePath
"Where to install (by symlinking or copying) the executables in."
      ClientInstallFlags -> Flag FilePath
cinstInstalldir
      (\Flag FilePath
v ClientInstallFlags
flags -> ClientInstallFlags
flags{cinstInstalldir = v})
      (MkOptDescr
   (ClientInstallFlags -> Flag FilePath)
   (Flag FilePath -> ClientInstallFlags -> ClientInstallFlags)
   ClientInstallFlags
 -> OptionField ClientInstallFlags)
-> MkOptDescr
     (ClientInstallFlags -> Flag FilePath)
     (Flag FilePath -> ClientInstallFlags -> ClientInstallFlags)
     ClientInstallFlags
-> OptionField ClientInstallFlags
forall a b. (a -> b) -> a -> b
$ FilePath
-> ReadE (Flag FilePath)
-> (Flag FilePath -> LFlags)
-> MkOptDescr
     (ClientInstallFlags -> Flag FilePath)
     (Flag FilePath -> ClientInstallFlags -> ClientInstallFlags)
     ClientInstallFlags
forall b a.
Monoid b =>
FilePath
-> ReadE b -> (b -> LFlags) -> MkOptDescr (a -> b) (b -> a -> a) a
reqArg FilePath
"DIR" ((FilePath -> Flag FilePath) -> ReadE (Flag FilePath)
forall a. (FilePath -> a) -> ReadE a
succeedReadE FilePath -> Flag FilePath
forall a. a -> Flag a
Flag) Flag FilePath -> LFlags
forall a. Flag a -> [a]
flagToList
  ]

clientInstallFlagsGrammar
  :: ( FieldGrammar c g
     , c (Identity (Flag Bool))
     , c (Flag' FilePathNT FilePath)
     , c (Identity (Flag OverwritePolicy))
     , c (Identity (Flag InstallMethod))
     )
  => g ClientInstallFlags ClientInstallFlags
clientInstallFlagsGrammar :: forall (c :: * -> Constraint) (g :: * -> * -> *).
(FieldGrammar c g, c (Identity (Flag Bool)),
 c (Flag' FilePathNT FilePath), c (Identity (Flag OverwritePolicy)),
 c (Identity (Flag InstallMethod))) =>
g ClientInstallFlags ClientInstallFlags
clientInstallFlagsGrammar =
  Flag Bool
-> Flag FilePath
-> Flag OverwritePolicy
-> Flag InstallMethod
-> Flag FilePath
-> ClientInstallFlags
ClientInstallFlags
    (Flag Bool
 -> Flag FilePath
 -> Flag OverwritePolicy
 -> Flag InstallMethod
 -> Flag FilePath
 -> ClientInstallFlags)
-> g ClientInstallFlags (Flag Bool)
-> g ClientInstallFlags
     (Flag FilePath
      -> Flag OverwritePolicy
      -> Flag InstallMethod
      -> Flag FilePath
      -> ClientInstallFlags)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> FieldName
-> ALens' ClientInstallFlags (Flag Bool)
-> Flag Bool
-> g ClientInstallFlags (Flag Bool)
forall (c :: * -> Constraint) (g :: * -> * -> *) a s.
(FieldGrammar c g, c (Identity a), Eq a) =>
FieldName -> ALens' s a -> a -> g s a
optionalFieldDef FieldName
"lib" ALens' ClientInstallFlags (Flag Bool)
Lens' ClientInstallFlags (Flag Bool)
cinstInstallLibsLens Flag Bool
forall a. Monoid a => a
mempty
    g ClientInstallFlags
  (Flag FilePath
   -> Flag OverwritePolicy
   -> Flag InstallMethod
   -> Flag FilePath
   -> ClientInstallFlags)
-> g ClientInstallFlags (Flag FilePath)
-> g ClientInstallFlags
     (Flag OverwritePolicy
      -> Flag InstallMethod -> Flag FilePath -> ClientInstallFlags)
forall a b.
g ClientInstallFlags (a -> b)
-> g ClientInstallFlags a -> g ClientInstallFlags b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ( FieldName
-> (Flag FilePath -> Flag' FilePathNT FilePath)
-> ALens' ClientInstallFlags (Flag FilePath)
-> Flag FilePath
-> g ClientInstallFlags (Flag FilePath)
forall b a s.
(c b, Newtype a b, Eq a) =>
FieldName -> (a -> b) -> ALens' s a -> a -> g s a
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Newtype a b, Eq a) =>
FieldName -> (a -> b) -> ALens' s a -> a -> g s a
optionalFieldDefAla FieldName
"package-env" ((FilePath -> FilePathNT)
-> Flag FilePath -> Flag' FilePathNT FilePath
forall a b. (a -> b) -> Flag a -> Flag' b a
alaFlag FilePath -> FilePathNT
FilePathNT) ALens' ClientInstallFlags (Flag FilePath)
Lens' ClientInstallFlags (Flag FilePath)
cinstEnvironmentPathLens Flag FilePath
forall a. Monoid a => a
mempty
            g ClientInstallFlags (Flag FilePath)
-> g ClientInstallFlags (Flag FilePath)
-> g ClientInstallFlags (Flag FilePath)
forall a b.
g ClientInstallFlags a
-> g ClientInstallFlags b -> g ClientInstallFlags a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* FieldName
-> (Flag FilePath -> Flag' FilePathNT FilePath)
-> ALens' ClientInstallFlags (Flag FilePath)
-> Flag FilePath
-> g ClientInstallFlags (Flag FilePath)
forall b a s.
(c b, Newtype a b, Eq a) =>
FieldName -> (a -> b) -> ALens' s a -> a -> g s a
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Newtype a b, Eq a) =>
FieldName -> (a -> b) -> ALens' s a -> a -> g s a
optionalFieldDefAla FieldName
"env" ((FilePath -> FilePathNT)
-> Flag FilePath -> Flag' FilePathNT FilePath
forall a b. (a -> b) -> Flag a -> Flag' b a
alaFlag FilePath -> FilePathNT
FilePathNT) ALens' ClientInstallFlags (Flag FilePath)
Lens' ClientInstallFlags (Flag FilePath)
cinstEnvironmentPathLens Flag FilePath
forall a. Monoid a => a
mempty
        )
    g ClientInstallFlags
  (Flag OverwritePolicy
   -> Flag InstallMethod -> Flag FilePath -> ClientInstallFlags)
-> g ClientInstallFlags (Flag OverwritePolicy)
-> g ClientInstallFlags
     (Flag InstallMethod -> Flag FilePath -> ClientInstallFlags)
forall a b.
g ClientInstallFlags (a -> b)
-> g ClientInstallFlags a -> g ClientInstallFlags b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ALens' ClientInstallFlags (Flag OverwritePolicy)
-> Flag OverwritePolicy
-> g ClientInstallFlags (Flag OverwritePolicy)
forall (c :: * -> Constraint) (g :: * -> * -> *) a s.
(FieldGrammar c g, c (Identity a), Eq a) =>
FieldName -> ALens' s a -> a -> g s a
optionalFieldDef FieldName
"overwrite-policy" ALens' ClientInstallFlags (Flag OverwritePolicy)
Lens' ClientInstallFlags (Flag OverwritePolicy)
cinstOverwritePolicyLens Flag OverwritePolicy
forall a. Monoid a => a
mempty
    g ClientInstallFlags
  (Flag InstallMethod -> Flag FilePath -> ClientInstallFlags)
-> g ClientInstallFlags (Flag InstallMethod)
-> g ClientInstallFlags (Flag FilePath -> ClientInstallFlags)
forall a b.
g ClientInstallFlags (a -> b)
-> g ClientInstallFlags a -> g ClientInstallFlags b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ALens' ClientInstallFlags (Flag InstallMethod)
-> Flag InstallMethod
-> g ClientInstallFlags (Flag InstallMethod)
forall (c :: * -> Constraint) (g :: * -> * -> *) a s.
(FieldGrammar c g, c (Identity a), Eq a) =>
FieldName -> ALens' s a -> a -> g s a
optionalFieldDef FieldName
"install-method" ALens' ClientInstallFlags (Flag InstallMethod)
Lens' ClientInstallFlags (Flag InstallMethod)
cinstInstallMethodLens Flag InstallMethod
forall a. Monoid a => a
mempty
    g ClientInstallFlags (Flag FilePath -> ClientInstallFlags)
-> g ClientInstallFlags (Flag FilePath)
-> g ClientInstallFlags ClientInstallFlags
forall a b.
g ClientInstallFlags (a -> b)
-> g ClientInstallFlags a -> g ClientInstallFlags b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> (Flag FilePath -> Flag' FilePathNT FilePath)
-> ALens' ClientInstallFlags (Flag FilePath)
-> Flag FilePath
-> g ClientInstallFlags (Flag FilePath)
forall b a s.
(c b, Newtype a b, Eq a) =>
FieldName -> (a -> b) -> ALens' s a -> a -> g s a
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Newtype a b, Eq a) =>
FieldName -> (a -> b) -> ALens' s a -> a -> g s a
optionalFieldDefAla FieldName
"installdir" ((FilePath -> FilePathNT)
-> Flag FilePath -> Flag' FilePathNT FilePath
forall a b. (a -> b) -> Flag a -> Flag' b a
alaFlag FilePath -> FilePathNT
FilePathNT) ALens' ClientInstallFlags (Flag FilePath)
Lens' ClientInstallFlags (Flag FilePath)
cinstInstalldirLens Flag FilePath
forall a. Monoid a => a
mempty
{-# SPECIALIZE clientInstallFlagsGrammar :: ParsecFieldGrammar' ClientInstallFlags #-}

parsecInstallMethod :: CabalParsing m => m InstallMethod
parsecInstallMethod :: forall (m :: * -> *). CabalParsing m => m InstallMethod
parsecInstallMethod = do
  name <- (Char -> Bool) -> m FilePath
forall (m :: * -> *). CharParsing m => (Char -> Bool) -> m FilePath
P.munch1 Char -> Bool
isAlpha
  case name of
    FilePath
"copy" -> InstallMethod -> m InstallMethod
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure InstallMethod
InstallMethodCopy
    FilePath
"symlink" -> InstallMethod -> m InstallMethod
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure InstallMethod
InstallMethodSymlink
    FilePath
_ -> FilePath -> m InstallMethod
forall a. FilePath -> m a
forall (m :: * -> *) a. Parsing m => FilePath -> m a
P.unexpected (FilePath -> m InstallMethod) -> FilePath -> m InstallMethod
forall a b. (a -> b) -> a -> b
$ FilePath
"InstallMethod: " FilePath -> ShowS
forall a. [a] -> [a] -> [a]
++ FilePath
name

cinstInstallLibsLens :: Lens' ClientInstallFlags (Flag Bool)
cinstInstallLibsLens :: Lens' ClientInstallFlags (Flag Bool)
cinstInstallLibsLens Flag Bool -> f (Flag Bool)
f ClientInstallFlags
c = (Flag Bool -> ClientInstallFlags)
-> f (Flag Bool) -> f ClientInstallFlags
forall a b. (a -> b) -> f a -> f b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\Flag Bool
x -> ClientInstallFlags
c{cinstInstallLibs = x}) (Flag Bool -> f (Flag Bool)
f (ClientInstallFlags -> Flag Bool
cinstInstallLibs ClientInstallFlags
c))
{-# INLINEABLE cinstInstallLibsLens #-}

cinstEnvironmentPathLens :: Lens' ClientInstallFlags (Flag FilePath)
cinstEnvironmentPathLens :: Lens' ClientInstallFlags (Flag FilePath)
cinstEnvironmentPathLens Flag FilePath -> f (Flag FilePath)
f ClientInstallFlags
c = (Flag FilePath -> ClientInstallFlags)
-> f (Flag FilePath) -> f ClientInstallFlags
forall a b. (a -> b) -> f a -> f b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\Flag FilePath
x -> ClientInstallFlags
c{cinstEnvironmentPath = x}) (Flag FilePath -> f (Flag FilePath)
f (ClientInstallFlags -> Flag FilePath
cinstEnvironmentPath ClientInstallFlags
c))
{-# INLINEABLE cinstEnvironmentPathLens #-}

cinstOverwritePolicyLens :: Lens' ClientInstallFlags (Flag OverwritePolicy)
cinstOverwritePolicyLens :: Lens' ClientInstallFlags (Flag OverwritePolicy)
cinstOverwritePolicyLens Flag OverwritePolicy -> f (Flag OverwritePolicy)
f ClientInstallFlags
c = (Flag OverwritePolicy -> ClientInstallFlags)
-> f (Flag OverwritePolicy) -> f ClientInstallFlags
forall a b. (a -> b) -> f a -> f b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\Flag OverwritePolicy
x -> ClientInstallFlags
c{cinstOverwritePolicy = x}) (Flag OverwritePolicy -> f (Flag OverwritePolicy)
f (ClientInstallFlags -> Flag OverwritePolicy
cinstOverwritePolicy ClientInstallFlags
c))
{-# INLINEABLE cinstOverwritePolicyLens #-}

cinstInstallMethodLens :: Lens' ClientInstallFlags (Flag InstallMethod)
cinstInstallMethodLens :: Lens' ClientInstallFlags (Flag InstallMethod)
cinstInstallMethodLens Flag InstallMethod -> f (Flag InstallMethod)
f ClientInstallFlags
c = (Flag InstallMethod -> ClientInstallFlags)
-> f (Flag InstallMethod) -> f ClientInstallFlags
forall a b. (a -> b) -> f a -> f b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\Flag InstallMethod
x -> ClientInstallFlags
c{cinstInstallMethod = x}) (Flag InstallMethod -> f (Flag InstallMethod)
f (ClientInstallFlags -> Flag InstallMethod
cinstInstallMethod ClientInstallFlags
c))
{-# INLINEABLE cinstInstallMethodLens #-}

cinstInstalldirLens :: Lens' ClientInstallFlags (Flag FilePath)
cinstInstalldirLens :: Lens' ClientInstallFlags (Flag FilePath)
cinstInstalldirLens Flag FilePath -> f (Flag FilePath)
f ClientInstallFlags
c = (Flag FilePath -> ClientInstallFlags)
-> f (Flag FilePath) -> f ClientInstallFlags
forall a b. (a -> b) -> f a -> f b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\Flag FilePath
x -> ClientInstallFlags
c{cinstInstalldir = x}) (Flag FilePath -> f (Flag FilePath)
f (ClientInstallFlags -> Flag FilePath
cinstInstalldir ClientInstallFlags
c))
{-# INLINEABLE cinstInstalldirLens #-}