{-# LANGUAGE NoImplicitPrelude     #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NoFieldSelectors      #-}
{-# LANGUAGE OverloadedRecordDot   #-}
{-# LANGUAGE OverloadedStrings     #-}

-- | Types and functions related to Stack's @path@ command.

module Stack.Path
  ( EnvConfigPathInfo
  , path
  , pathsFromRunner
  , pathsFromConfig
  , pathsFromEnvConfig
  ) where

import           Data.List ( intercalate )
import qualified Data.Text as T
import qualified Data.Text.IO as T
import           Path ( (</>), parent )
import           Path.Extra ( toFilePathNoTrailingSep )
import           RIO.Process ( HasProcessContext (..), exeSearchPathL )
import           Stack.Config ( determineStackRootAndOwnership )
import           Stack.Constants
                   ( docDirSuffix, stackGlobalConfigOptionName
                   , stackRootOptionName
                   )
import           Stack.Constants.Config ( distRelativeDir )
import           Stack.GhcPkg as GhcPkg
import           Stack.Prelude hiding ( pi )
import           Stack.Runners
                   ( ShouldReexec (..), withConfig, withDefaultEnvConfig )
import           Stack.Types.BuildConfig
                   ( BuildConfig (..), HasBuildConfig (..), projectRootL
                   , stackYamlL
                   )
import           Stack.Types.BuildOptsMonoid ( buildOptsMonoidHaddockL )
import           Stack.Types.CompilerPaths
                   ( CompilerPaths (..), HasCompiler (..), getCompilerPath )
import           Stack.Types.Config
                   ( Config (..), HasConfig (..), stackGlobalConfigL )
import           Stack.Types.EnvConfig
                   ( EnvConfig, HasEnvConfig (..), bindirCompilerTools
                   , hpcReportDir, installationRootDeps, installationRootLocal
                   , packageDatabaseDeps, packageDatabaseExtra
                   , packageDatabaseLocal
                   )
import qualified Stack.Types.EnvConfig as EnvConfig
import           Stack.Types.GHCVariant ( HasGHCVariant (..) )
import           Stack.Types.GlobalOpts
                   ( GlobalOpts (..), globalOptsBuildOptsMonoidL )
import           Stack.Types.Platform ( HasPlatform (..) )
import           Stack.Types.Runner ( HasRunner (..), Runner, globalOptsL )
import qualified System.FilePath as FP

-- | Print out useful path information in a human-readable format (and support

-- others later).

path :: [Text] -> RIO Runner ()
path :: [Text] -> RIO Runner ()
path [Text]
keys = do
  let -- filter the chosen paths in flags (keys), or show all of them if no

      -- specific paths chosen.

      filterKeys :: (a, Text, c) -> Bool
filterKeys (a
_, Text
key, c
_) = [Text] -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null [Text]
keys Bool -> Bool -> Bool
|| Text -> [Text] -> Bool
forall a. Eq a => a -> [a] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
elem Text
key [Text]
keys
      goodPathsFromRunner :: Bool
goodPathsFromRunner = [Text] -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null [Text]
keys Bool -> Bool -> Bool
|| Text -> [Text] -> Bool
forall a. Eq a => a -> [a] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
elem Text
stackRootOptionName' [Text]
keys
      goodPathsFromConfig :: [(String, Text, Config -> Text)]
goodPathsFromConfig = ((String, Text, Config -> Text) -> Bool)
-> [(String, Text, Config -> Text)]
-> [(String, Text, Config -> Text)]
forall a. (a -> Bool) -> [a] -> [a]
filter (String, Text, Config -> Text) -> Bool
forall {a} {c}. (a, Text, c) -> Bool
filterKeys [(String, Text, Config -> Text)]
pathsFromConfig
      goodPathsFromEnvConfig :: [(String, Text, UseHaddocks (EnvConfigPathInfo -> Text))]
goodPathsFromEnvConfig = ((String, Text, UseHaddocks (EnvConfigPathInfo -> Text)) -> Bool)
-> [(String, Text, UseHaddocks (EnvConfigPathInfo -> Text))]
-> [(String, Text, UseHaddocks (EnvConfigPathInfo -> Text))]
forall a. (a -> Bool) -> [a] -> [a]
filter (String, Text, UseHaddocks (EnvConfigPathInfo -> Text)) -> Bool
forall {a} {c}. (a, Text, c) -> Bool
filterKeys [(String, Text, UseHaddocks (EnvConfigPathInfo -> Text))]
pathsFromEnvConfig
      toKeyPath :: (a, a, b) -> (a, b)
toKeyPath (a
_, a
key, b
p) = (a
key, b
p)
      goodPathsFromConfig' :: [(Text, Config -> Text)]
goodPathsFromConfig' = ((String, Text, Config -> Text) -> (Text, Config -> Text))
-> [(String, Text, Config -> Text)] -> [(Text, Config -> Text)]
forall a b. (a -> b) -> [a] -> [b]
map (String, Text, Config -> Text) -> (Text, Config -> Text)
forall {a} {a} {b}. (a, a, b) -> (a, b)
toKeyPath [(String, Text, Config -> Text)]
goodPathsFromConfig
      singlePath :: Bool
singlePath = (if Bool
goodPathsFromRunner then Int
1 else Int
0) Int -> Int -> Int
forall a. Num a => a -> a -> a
+
        [(String, Text, Config -> Text)] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [(String, Text, Config -> Text)]
goodPathsFromConfig Int -> Int -> Int
forall a. Num a => a -> a -> a
+ [(String, Text, UseHaddocks (EnvConfigPathInfo -> Text))] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [(String, Text, UseHaddocks (EnvConfigPathInfo -> Text))]
goodPathsFromEnvConfig Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
1
      toEither :: (a, a, UseHaddocks b) -> Either (a, b) (a, b)
toEither (a
_, a
k, UseHaddocks b
a) = (a, b) -> Either (a, b) (a, b)
forall a b. a -> Either a b
Left (a
k, b
a)
      toEither (a
_, a
k, WithoutHaddocks b
a) = (a, b) -> Either (a, b) (a, b)
forall a b. b -> Either a b
Right (a
k, b
a)
      ([(Text, EnvConfigPathInfo -> Text)]
with, [(Text, EnvConfigPathInfo -> Text)]
without) = [Either
   (Text, EnvConfigPathInfo -> Text)
   (Text, EnvConfigPathInfo -> Text)]
-> ([(Text, EnvConfigPathInfo -> Text)],
    [(Text, EnvConfigPathInfo -> Text)])
forall a b. [Either a b] -> ([a], [b])
partitionEithers ([Either
    (Text, EnvConfigPathInfo -> Text)
    (Text, EnvConfigPathInfo -> Text)]
 -> ([(Text, EnvConfigPathInfo -> Text)],
     [(Text, EnvConfigPathInfo -> Text)]))
-> [Either
      (Text, EnvConfigPathInfo -> Text)
      (Text, EnvConfigPathInfo -> Text)]
-> ([(Text, EnvConfigPathInfo -> Text)],
    [(Text, EnvConfigPathInfo -> Text)])
forall a b. (a -> b) -> a -> b
$ ((String, Text, UseHaddocks (EnvConfigPathInfo -> Text))
 -> Either
      (Text, EnvConfigPathInfo -> Text)
      (Text, EnvConfigPathInfo -> Text))
-> [(String, Text, UseHaddocks (EnvConfigPathInfo -> Text))]
-> [Either
      (Text, EnvConfigPathInfo -> Text)
      (Text, EnvConfigPathInfo -> Text)]
forall a b. (a -> b) -> [a] -> [b]
map (String, Text, UseHaddocks (EnvConfigPathInfo -> Text))
-> Either
     (Text, EnvConfigPathInfo -> Text) (Text, EnvConfigPathInfo -> Text)
forall {a} {a} {b}. (a, a, UseHaddocks b) -> Either (a, b) (a, b)
toEither [(String, Text, UseHaddocks (EnvConfigPathInfo -> Text))]
goodPathsFromEnvConfig
  Bool -> RIO Runner () -> RIO Runner ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
when Bool
goodPathsFromRunner (RIO Runner () -> RIO Runner ()) -> RIO Runner () -> RIO Runner ()
forall a b. (a -> b) -> a -> b
$ Bool -> RIO Runner ()
printKeysWithRunner Bool
singlePath
  Bool -> RIO Runner () -> RIO Runner ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless ([(Text, Config -> Text)] -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null [(Text, Config -> Text)]
goodPathsFromConfig') (RIO Runner () -> RIO Runner ()) -> RIO Runner () -> RIO Runner ()
forall a b. (a -> b) -> a -> b
$
    RIO Config () -> RIO Runner ()
runHaddockWithConfig (RIO Config () -> RIO Runner ()) -> RIO Config () -> RIO Runner ()
forall a b. (a -> b) -> a -> b
$ [(Text, Config -> Text)] -> Bool -> RIO Config ()
forall env.
HasConfig env =>
[(Text, Config -> Text)] -> Bool -> RIO env ()
printKeysWithConfig [(Text, Config -> Text)]
goodPathsFromConfig' Bool
singlePath
  Bool -> RIO Runner () -> RIO Runner ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless ([(Text, EnvConfigPathInfo -> Text)] -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null [(Text, EnvConfigPathInfo -> Text)]
without) (RIO Runner () -> RIO Runner ()) -> RIO Runner () -> RIO Runner ()
forall a b. (a -> b) -> a -> b
$
    Bool -> RIO EnvConfig () -> RIO Runner ()
runHaddockWithEnvConfig Bool
False (RIO EnvConfig () -> RIO Runner ())
-> RIO EnvConfig () -> RIO Runner ()
forall a b. (a -> b) -> a -> b
$ [(Text, EnvConfigPathInfo -> Text)] -> Bool -> RIO EnvConfig ()
forall env.
HasEnvConfig env =>
[(Text, EnvConfigPathInfo -> Text)] -> Bool -> RIO env ()
printKeysWithEnvConfig [(Text, EnvConfigPathInfo -> Text)]
without Bool
singlePath
  Bool -> RIO Runner () -> RIO Runner ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless ([(Text, EnvConfigPathInfo -> Text)] -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null [(Text, EnvConfigPathInfo -> Text)]
with) (RIO Runner () -> RIO Runner ()) -> RIO Runner () -> RIO Runner ()
forall a b. (a -> b) -> a -> b
$
    Bool -> RIO EnvConfig () -> RIO Runner ()
runHaddockWithEnvConfig Bool
True (RIO EnvConfig () -> RIO Runner ())
-> RIO EnvConfig () -> RIO Runner ()
forall a b. (a -> b) -> a -> b
$ [(Text, EnvConfigPathInfo -> Text)] -> Bool -> RIO EnvConfig ()
forall env.
HasEnvConfig env =>
[(Text, EnvConfigPathInfo -> Text)] -> Bool -> RIO env ()
printKeysWithEnvConfig [(Text, EnvConfigPathInfo -> Text)]
with Bool
singlePath

printKeysWithRunner ::
     Bool
  -> RIO Runner ()
printKeysWithRunner :: Bool -> RIO Runner ()
printKeysWithRunner Bool
single = do
  ConfigMonoid
clArgs <- Getting ConfigMonoid Runner ConfigMonoid -> RIO Runner ConfigMonoid
forall s (m :: * -> *) a. MonadReader s m => Getting a s a -> m a
view (Getting ConfigMonoid Runner ConfigMonoid
 -> RIO Runner ConfigMonoid)
-> Getting ConfigMonoid Runner ConfigMonoid
-> RIO Runner ConfigMonoid
forall a b. (a -> b) -> a -> b
$ (GlobalOpts -> Const ConfigMonoid GlobalOpts)
-> Runner -> Const ConfigMonoid Runner
forall env. HasRunner env => Lens' env GlobalOpts
Lens' Runner GlobalOpts
globalOptsL ((GlobalOpts -> Const ConfigMonoid GlobalOpts)
 -> Runner -> Const ConfigMonoid Runner)
-> ((ConfigMonoid -> Const ConfigMonoid ConfigMonoid)
    -> GlobalOpts -> Const ConfigMonoid GlobalOpts)
-> Getting ConfigMonoid Runner ConfigMonoid
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (GlobalOpts -> ConfigMonoid)
-> SimpleGetter GlobalOpts ConfigMonoid
forall s a. (s -> a) -> SimpleGetter s a
to (.configMonoid)
  IO () -> RIO Runner ()
forall a. IO a -> RIO Runner a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> RIO Runner ()) -> IO () -> RIO Runner ()
forall a b. (a -> b) -> a -> b
$ do
    (Path Abs Dir
_, Path Abs Dir
stackRoot, Bool
_) <- ConfigMonoid -> IO (Path Abs Dir, Path Abs Dir, Bool)
forall (m :: * -> *).
MonadIO m =>
ConfigMonoid -> m (Path Abs Dir, Path Abs Dir, Bool)
determineStackRootAndOwnership ConfigMonoid
clArgs
    let prefix :: Text
prefix = if Bool
single then Text
"" else Text
stackRootOptionName' Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
": "
    Text -> IO ()
T.putStrLn (Text -> IO ()) -> Text -> IO ()
forall a b. (a -> b) -> a -> b
$ Text
prefix Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> String -> Text
T.pack (Path Abs Dir -> String
forall loc. Path loc Dir -> String
toFilePathNoTrailingSep Path Abs Dir
stackRoot)

printKeysWithConfig ::
     HasConfig env
  => [(Text, Config -> Text)]
  -> Bool
  -> RIO env ()
printKeysWithConfig :: forall env.
HasConfig env =>
[(Text, Config -> Text)] -> Bool -> RIO env ()
printKeysWithConfig [(Text, Config -> Text)]
extractors Bool
single =
  Getting Config env Config -> RIO env Config
forall s (m :: * -> *) a. MonadReader s m => Getting a s a -> m a
view Getting Config env Config
forall env. HasConfig env => Lens' env Config
Lens' env Config
configL RIO env Config -> (Config -> RIO env ()) -> RIO env ()
forall a b. RIO env a -> (a -> RIO env b) -> RIO env b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= [(Text, Config -> Text)] -> Bool -> Config -> RIO env ()
forall info env.
[(Text, info -> Text)] -> Bool -> info -> RIO env ()
printKeys [(Text, Config -> Text)]
extractors Bool
single

printKeysWithEnvConfig ::
     HasEnvConfig env
  => [(Text, EnvConfigPathInfo -> Text)]
  -> Bool
  -> RIO env ()
printKeysWithEnvConfig :: forall env.
HasEnvConfig env =>
[(Text, EnvConfigPathInfo -> Text)] -> Bool -> RIO env ()
printKeysWithEnvConfig [(Text, EnvConfigPathInfo -> Text)]
extractors Bool
single =
  RIO env EnvConfigPathInfo
forall env. HasEnvConfig env => RIO env EnvConfigPathInfo
fillEnvConfigPathInfo RIO env EnvConfigPathInfo
-> (EnvConfigPathInfo -> RIO env ()) -> RIO env ()
forall a b. RIO env a -> (a -> RIO env b) -> RIO env b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= [(Text, EnvConfigPathInfo -> Text)]
-> Bool -> EnvConfigPathInfo -> RIO env ()
forall info env.
[(Text, info -> Text)] -> Bool -> info -> RIO env ()
printKeys [(Text, EnvConfigPathInfo -> Text)]
extractors Bool
single

printKeys ::
     [(Text, info -> Text)]
  -> Bool
  -> info
  -> RIO env ()
printKeys :: forall info env.
[(Text, info -> Text)] -> Bool -> info -> RIO env ()
printKeys [(Text, info -> Text)]
extractors Bool
single info
info = do
  IO () -> RIO env ()
forall a. IO a -> RIO env a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> RIO env ()) -> IO () -> RIO env ()
forall a b. (a -> b) -> a -> b
$ [(Text, info -> Text)] -> ((Text, info -> Text) -> IO ()) -> IO ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
t a -> (a -> m b) -> m ()
forM_ [(Text, info -> Text)]
extractors (((Text, info -> Text) -> IO ()) -> IO ())
-> ((Text, info -> Text) -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \(Text
key, info -> Text
extractPath) -> do
    let prefix :: Text
prefix = if Bool
single then Text
"" else Text
key Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
": "
    Text -> IO ()
T.putStrLn (Text -> IO ()) -> Text -> IO ()
forall a b. (a -> b) -> a -> b
$ Text
prefix Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> info -> Text
extractPath info
info

runHaddockWithEnvConfig :: Bool -> RIO EnvConfig () -> RIO Runner ()
runHaddockWithEnvConfig :: Bool -> RIO EnvConfig () -> RIO Runner ()
runHaddockWithEnvConfig Bool
x RIO EnvConfig ()
action = Bool -> RIO Config () -> RIO Runner ()
runHaddock Bool
x (RIO EnvConfig () -> RIO Config ()
forall a. RIO EnvConfig a -> RIO Config a
withDefaultEnvConfig RIO EnvConfig ()
action)

runHaddockWithConfig :: RIO Config () -> RIO Runner ()
runHaddockWithConfig :: RIO Config () -> RIO Runner ()
runHaddockWithConfig = Bool -> RIO Config () -> RIO Runner ()
runHaddock Bool
False

runHaddock :: Bool -> RIO Config () -> RIO Runner ()
runHaddock :: Bool -> RIO Config () -> RIO Runner ()
runHaddock Bool
x RIO Config ()
action = (Runner -> Runner) -> RIO Runner () -> RIO Runner ()
forall a. (Runner -> Runner) -> RIO Runner a -> RIO Runner a
forall r (m :: * -> *) a. MonadReader r m => (r -> r) -> m a -> m a
local Runner -> Runner
modifyConfig (RIO Runner () -> RIO Runner ()) -> RIO Runner () -> RIO Runner ()
forall a b. (a -> b) -> a -> b
$ ShouldReexec -> RIO Config () -> RIO Runner ()
forall a. ShouldReexec -> RIO Config a -> RIO Runner a
withConfig ShouldReexec
YesReexec RIO Config ()
action
 where
  modifyConfig :: Runner -> Runner
modifyConfig = ASetter Runner Runner (Maybe Bool) (Maybe Bool)
-> Maybe Bool -> Runner -> Runner
forall s t a b. ASetter s t a b -> b -> s -> t
set
    ((GlobalOpts -> Identity GlobalOpts) -> Runner -> Identity Runner
forall env. HasRunner env => Lens' env GlobalOpts
Lens' Runner GlobalOpts
globalOptsL ((GlobalOpts -> Identity GlobalOpts) -> Runner -> Identity Runner)
-> ((Maybe Bool -> Identity (Maybe Bool))
    -> GlobalOpts -> Identity GlobalOpts)
-> ASetter Runner Runner (Maybe Bool) (Maybe Bool)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (BuildOptsMonoid -> Identity BuildOptsMonoid)
-> GlobalOpts -> Identity GlobalOpts
Lens' GlobalOpts BuildOptsMonoid
globalOptsBuildOptsMonoidL ((BuildOptsMonoid -> Identity BuildOptsMonoid)
 -> GlobalOpts -> Identity GlobalOpts)
-> ((Maybe Bool -> Identity (Maybe Bool))
    -> BuildOptsMonoid -> Identity BuildOptsMonoid)
-> (Maybe Bool -> Identity (Maybe Bool))
-> GlobalOpts
-> Identity GlobalOpts
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Maybe Bool -> Identity (Maybe Bool))
-> BuildOptsMonoid -> Identity BuildOptsMonoid
Lens' BuildOptsMonoid (Maybe Bool)
buildOptsMonoidHaddockL)
    (Bool -> Maybe Bool
forall a. a -> Maybe a
Just Bool
x)

fillEnvConfigPathInfo :: HasEnvConfig env => RIO env EnvConfigPathInfo
fillEnvConfigPathInfo :: forall env. HasEnvConfig env => RIO env EnvConfigPathInfo
fillEnvConfigPathInfo = do
  -- We must use a BuildConfig from an EnvConfig to ensure that it contains the

  -- full environment info including GHC paths etc.

  BuildConfig
buildConfig <- Getting BuildConfig env BuildConfig -> RIO env BuildConfig
forall s (m :: * -> *) a. MonadReader s m => Getting a s a -> m a
view (Getting BuildConfig env BuildConfig -> RIO env BuildConfig)
-> Getting BuildConfig env BuildConfig -> RIO env BuildConfig
forall a b. (a -> b) -> a -> b
$ (EnvConfig -> Const BuildConfig EnvConfig)
-> env -> Const BuildConfig env
forall env. HasEnvConfig env => Lens' env EnvConfig
Lens' env EnvConfig
envConfigL ((EnvConfig -> Const BuildConfig EnvConfig)
 -> env -> Const BuildConfig env)
-> ((BuildConfig -> Const BuildConfig BuildConfig)
    -> EnvConfig -> Const BuildConfig EnvConfig)
-> Getting BuildConfig env BuildConfig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (BuildConfig -> Const BuildConfig BuildConfig)
-> EnvConfig -> Const BuildConfig EnvConfig
forall env. HasBuildConfig env => Lens' env BuildConfig
Lens' EnvConfig BuildConfig
buildConfigL
  -- This is the modified 'bin-path',

  -- including the local GHC or MSYS if not configured to operate on

  -- global GHC.

  -- It was set up in 'withBuildConfigAndLock -> withBuildConfigExt -> setupEnv'.

  -- So it's not the *minimal* override path.

  Path Abs Dir
snapDb <- RIO env (Path Abs Dir)
forall env. HasEnvConfig env => RIO env (Path Abs Dir)
packageDatabaseDeps
  Path Abs Dir
localDb <- RIO env (Path Abs Dir)
forall env. HasEnvConfig env => RIO env (Path Abs Dir)
packageDatabaseLocal
  [Path Abs Dir]
extraDbs <- RIO env [Path Abs Dir]
forall env (m :: * -> *).
(HasEnvConfig env, MonadReader env m) =>
m [Path Abs Dir]
packageDatabaseExtra
  Path Abs Dir
globalDb <- Getting (Path Abs Dir) env (Path Abs Dir) -> RIO env (Path Abs Dir)
forall s (m :: * -> *) a. MonadReader s m => Getting a s a -> m a
view (Getting (Path Abs Dir) env (Path Abs Dir)
 -> RIO env (Path Abs Dir))
-> Getting (Path Abs Dir) env (Path Abs Dir)
-> RIO env (Path Abs Dir)
forall a b. (a -> b) -> a -> b
$ Getting (Path Abs Dir) env CompilerPaths
forall env. HasCompiler env => SimpleGetter env CompilerPaths
SimpleGetter env CompilerPaths
compilerPathsL Getting (Path Abs Dir) env CompilerPaths
-> ((Path Abs Dir -> Const (Path Abs Dir) (Path Abs Dir))
    -> CompilerPaths -> Const (Path Abs Dir) CompilerPaths)
-> Getting (Path Abs Dir) env (Path Abs Dir)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (CompilerPaths -> Path Abs Dir)
-> SimpleGetter CompilerPaths (Path Abs Dir)
forall s a. (s -> a) -> SimpleGetter s a
to (.globalDB)
  Path Abs Dir
snapRoot <- RIO env (Path Abs Dir)
forall env. HasEnvConfig env => RIO env (Path Abs Dir)
installationRootDeps
  Path Abs Dir
localRoot <- RIO env (Path Abs Dir)
forall env. HasEnvConfig env => RIO env (Path Abs Dir)
installationRootLocal
  Path Abs Dir
toolsDir <- RIO env (Path Abs Dir)
forall env (m :: * -> *).
(HasEnvConfig env, MonadReader env m, MonadThrow m) =>
m (Path Abs Dir)
bindirCompilerTools
  Path Abs Dir
hoogleRoot <- RIO env (Path Abs Dir)
forall env. HasEnvConfig env => RIO env (Path Abs Dir)
EnvConfig.hoogleRoot
  Path Rel Dir
distDir <- RIO env (Path Rel Dir)
forall env (m :: * -> *).
(HasEnvConfig env, MonadReader env m, MonadThrow m) =>
m (Path Rel Dir)
distRelativeDir
  Path Abs Dir
hpcDir <- RIO env (Path Abs Dir)
forall env. HasEnvConfig env => RIO env (Path Abs Dir)
hpcReportDir
  Path Abs File
compiler <- RIO env (Path Abs File)
forall env. HasCompiler env => RIO env (Path Abs File)
getCompilerPath
  EnvConfigPathInfo -> RIO env EnvConfigPathInfo
forall a. a -> RIO env a
forall (f :: * -> *) a. Applicative f => a -> f a
pure EnvConfigPathInfo
    { BuildConfig
buildConfig :: BuildConfig
$sel:buildConfig:EnvConfigPathInfo :: BuildConfig
buildConfig
    , Path Abs Dir
snapDb :: Path Abs Dir
$sel:snapDb:EnvConfigPathInfo :: Path Abs Dir
snapDb
    , Path Abs Dir
localDb :: Path Abs Dir
$sel:localDb:EnvConfigPathInfo :: Path Abs Dir
localDb
    , Path Abs Dir
globalDb :: Path Abs Dir
$sel:globalDb:EnvConfigPathInfo :: Path Abs Dir
globalDb
    , Path Abs Dir
snapRoot :: Path Abs Dir
$sel:snapRoot:EnvConfigPathInfo :: Path Abs Dir
snapRoot
    , Path Abs Dir
localRoot :: Path Abs Dir
$sel:localRoot:EnvConfigPathInfo :: Path Abs Dir
localRoot
    , Path Abs Dir
toolsDir :: Path Abs Dir
$sel:toolsDir:EnvConfigPathInfo :: Path Abs Dir
toolsDir
    , Path Abs Dir
hoogleRoot :: Path Abs Dir
$sel:hoogleRoot:EnvConfigPathInfo :: Path Abs Dir
hoogleRoot
    , Path Rel Dir
distDir :: Path Rel Dir
$sel:distDir:EnvConfigPathInfo :: Path Rel Dir
distDir
    , Path Abs Dir
hpcDir :: Path Abs Dir
$sel:hpcDir:EnvConfigPathInfo :: Path Abs Dir
hpcDir
    , [Path Abs Dir]
extraDbs :: [Path Abs Dir]
$sel:extraDbs:EnvConfigPathInfo :: [Path Abs Dir]
extraDbs
    , Path Abs File
compiler :: Path Abs File
$sel:compiler:EnvConfigPathInfo :: Path Abs File
compiler
    }

data EnvConfigPathInfo = EnvConfigPathInfo
  { EnvConfigPathInfo -> BuildConfig
buildConfig  :: !BuildConfig
  , EnvConfigPathInfo -> Path Abs Dir
snapDb       :: !(Path Abs Dir)
  , EnvConfigPathInfo -> Path Abs Dir
localDb      :: !(Path Abs Dir)
  , EnvConfigPathInfo -> Path Abs Dir
globalDb     :: !(Path Abs Dir)
  , EnvConfigPathInfo -> Path Abs Dir
snapRoot     :: !(Path Abs Dir)
  , EnvConfigPathInfo -> Path Abs Dir
localRoot    :: !(Path Abs Dir)
  , EnvConfigPathInfo -> Path Abs Dir
toolsDir     :: !(Path Abs Dir)
  , EnvConfigPathInfo -> Path Abs Dir
hoogleRoot   :: !(Path Abs Dir)
  , EnvConfigPathInfo -> Path Rel Dir
distDir      :: Path Rel Dir
  , EnvConfigPathInfo -> Path Abs Dir
hpcDir       :: !(Path Abs Dir)
  , EnvConfigPathInfo -> [Path Abs Dir]
extraDbs     :: ![Path Abs Dir]
  , EnvConfigPathInfo -> Path Abs File
compiler     :: !(Path Abs File)
  }

instance HasPlatform EnvConfigPathInfo where
  platformL :: Lens' EnvConfigPathInfo Platform
platformL = (Config -> f Config) -> EnvConfigPathInfo -> f EnvConfigPathInfo
forall env. HasConfig env => Lens' env Config
Lens' EnvConfigPathInfo Config
configL ((Config -> f Config) -> EnvConfigPathInfo -> f EnvConfigPathInfo)
-> ((Platform -> f Platform) -> Config -> f Config)
-> (Platform -> f Platform)
-> EnvConfigPathInfo
-> f EnvConfigPathInfo
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Platform -> f Platform) -> Config -> f Config
forall env. HasPlatform env => Lens' env Platform
Lens' Config Platform
platformL
  {-# INLINE platformL #-}
  platformVariantL :: Lens' EnvConfigPathInfo PlatformVariant
platformVariantL = (Config -> f Config) -> EnvConfigPathInfo -> f EnvConfigPathInfo
forall env. HasConfig env => Lens' env Config
Lens' EnvConfigPathInfo Config
configL ((Config -> f Config) -> EnvConfigPathInfo -> f EnvConfigPathInfo)
-> ((PlatformVariant -> f PlatformVariant) -> Config -> f Config)
-> (PlatformVariant -> f PlatformVariant)
-> EnvConfigPathInfo
-> f EnvConfigPathInfo
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (PlatformVariant -> f PlatformVariant) -> Config -> f Config
forall env. HasPlatform env => Lens' env PlatformVariant
Lens' Config PlatformVariant
platformVariantL
  {-# INLINE platformVariantL #-}

instance HasLogFunc EnvConfigPathInfo where
  logFuncL :: Lens' EnvConfigPathInfo LogFunc
logFuncL = (Config -> f Config) -> EnvConfigPathInfo -> f EnvConfigPathInfo
forall env. HasConfig env => Lens' env Config
Lens' EnvConfigPathInfo Config
configL ((Config -> f Config) -> EnvConfigPathInfo -> f EnvConfigPathInfo)
-> ((LogFunc -> f LogFunc) -> Config -> f Config)
-> (LogFunc -> f LogFunc)
-> EnvConfigPathInfo
-> f EnvConfigPathInfo
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (LogFunc -> f LogFunc) -> Config -> f Config
forall env. HasLogFunc env => Lens' env LogFunc
Lens' Config LogFunc
logFuncL

instance HasRunner EnvConfigPathInfo where
  runnerL :: Lens' EnvConfigPathInfo Runner
runnerL = (Config -> f Config) -> EnvConfigPathInfo -> f EnvConfigPathInfo
forall env. HasConfig env => Lens' env Config
Lens' EnvConfigPathInfo Config
configL ((Config -> f Config) -> EnvConfigPathInfo -> f EnvConfigPathInfo)
-> ((Runner -> f Runner) -> Config -> f Config)
-> (Runner -> f Runner)
-> EnvConfigPathInfo
-> f EnvConfigPathInfo
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Runner -> f Runner) -> Config -> f Config
forall env. HasRunner env => Lens' env Runner
Lens' Config Runner
runnerL

instance HasStylesUpdate EnvConfigPathInfo where
  stylesUpdateL :: Lens' EnvConfigPathInfo StylesUpdate
stylesUpdateL = (Runner -> f Runner) -> EnvConfigPathInfo -> f EnvConfigPathInfo
forall env. HasRunner env => Lens' env Runner
Lens' EnvConfigPathInfo Runner
runnerL ((Runner -> f Runner) -> EnvConfigPathInfo -> f EnvConfigPathInfo)
-> ((StylesUpdate -> f StylesUpdate) -> Runner -> f Runner)
-> (StylesUpdate -> f StylesUpdate)
-> EnvConfigPathInfo
-> f EnvConfigPathInfo
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (StylesUpdate -> f StylesUpdate) -> Runner -> f Runner
forall env. HasStylesUpdate env => Lens' env StylesUpdate
Lens' Runner StylesUpdate
stylesUpdateL

instance HasTerm EnvConfigPathInfo where
  useColorL :: Lens' EnvConfigPathInfo Bool
useColorL = (Runner -> f Runner) -> EnvConfigPathInfo -> f EnvConfigPathInfo
forall env. HasRunner env => Lens' env Runner
Lens' EnvConfigPathInfo Runner
runnerL ((Runner -> f Runner) -> EnvConfigPathInfo -> f EnvConfigPathInfo)
-> ((Bool -> f Bool) -> Runner -> f Runner)
-> (Bool -> f Bool)
-> EnvConfigPathInfo
-> f EnvConfigPathInfo
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Bool -> f Bool) -> Runner -> f Runner
forall env. HasTerm env => Lens' env Bool
Lens' Runner Bool
useColorL
  termWidthL :: Lens' EnvConfigPathInfo Int
termWidthL = (Runner -> f Runner) -> EnvConfigPathInfo -> f EnvConfigPathInfo
forall env. HasRunner env => Lens' env Runner
Lens' EnvConfigPathInfo Runner
runnerL ((Runner -> f Runner) -> EnvConfigPathInfo -> f EnvConfigPathInfo)
-> ((Int -> f Int) -> Runner -> f Runner)
-> (Int -> f Int)
-> EnvConfigPathInfo
-> f EnvConfigPathInfo
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Int -> f Int) -> Runner -> f Runner
forall env. HasTerm env => Lens' env Int
Lens' Runner Int
termWidthL

instance HasGHCVariant EnvConfigPathInfo where
  ghcVariantL :: SimpleGetter EnvConfigPathInfo GHCVariant
ghcVariantL = (Config -> Const r Config)
-> EnvConfigPathInfo -> Const r EnvConfigPathInfo
forall env. HasConfig env => Lens' env Config
Lens' EnvConfigPathInfo Config
configL ((Config -> Const r Config)
 -> EnvConfigPathInfo -> Const r EnvConfigPathInfo)
-> ((GHCVariant -> Const r GHCVariant) -> Config -> Const r Config)
-> (GHCVariant -> Const r GHCVariant)
-> EnvConfigPathInfo
-> Const r EnvConfigPathInfo
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (GHCVariant -> Const r GHCVariant) -> Config -> Const r Config
forall env. HasGHCVariant env => SimpleGetter env GHCVariant
SimpleGetter Config GHCVariant
ghcVariantL
  {-# INLINE ghcVariantL #-}

instance HasConfig EnvConfigPathInfo where
  configL :: Lens' EnvConfigPathInfo Config
configL = (BuildConfig -> f BuildConfig)
-> EnvConfigPathInfo -> f EnvConfigPathInfo
forall env. HasBuildConfig env => Lens' env BuildConfig
Lens' EnvConfigPathInfo BuildConfig
buildConfigL ((BuildConfig -> f BuildConfig)
 -> EnvConfigPathInfo -> f EnvConfigPathInfo)
-> ((Config -> f Config) -> BuildConfig -> f BuildConfig)
-> (Config -> f Config)
-> EnvConfigPathInfo
-> f EnvConfigPathInfo
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (BuildConfig -> Config)
-> (BuildConfig -> Config -> BuildConfig)
-> Lens BuildConfig BuildConfig Config Config
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens (.config) (\BuildConfig
x Config
y -> BuildConfig
x { config = y })
  {-# INLINE configL #-}

instance HasPantryConfig EnvConfigPathInfo where
  pantryConfigL :: Lens' EnvConfigPathInfo PantryConfig
pantryConfigL = (Config -> f Config) -> EnvConfigPathInfo -> f EnvConfigPathInfo
forall env. HasConfig env => Lens' env Config
Lens' EnvConfigPathInfo Config
configL ((Config -> f Config) -> EnvConfigPathInfo -> f EnvConfigPathInfo)
-> ((PantryConfig -> f PantryConfig) -> Config -> f Config)
-> (PantryConfig -> f PantryConfig)
-> EnvConfigPathInfo
-> f EnvConfigPathInfo
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (PantryConfig -> f PantryConfig) -> Config -> f Config
forall env. HasPantryConfig env => Lens' env PantryConfig
Lens' Config PantryConfig
pantryConfigL

instance HasProcessContext EnvConfigPathInfo where
  processContextL :: Lens' EnvConfigPathInfo ProcessContext
processContextL = (Config -> f Config) -> EnvConfigPathInfo -> f EnvConfigPathInfo
forall env. HasConfig env => Lens' env Config
Lens' EnvConfigPathInfo Config
configL ((Config -> f Config) -> EnvConfigPathInfo -> f EnvConfigPathInfo)
-> ((ProcessContext -> f ProcessContext) -> Config -> f Config)
-> (ProcessContext -> f ProcessContext)
-> EnvConfigPathInfo
-> f EnvConfigPathInfo
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ProcessContext -> f ProcessContext) -> Config -> f Config
forall env. HasProcessContext env => Lens' env ProcessContext
Lens' Config ProcessContext
processContextL

instance HasBuildConfig EnvConfigPathInfo where
  buildConfigL :: Lens' EnvConfigPathInfo BuildConfig
buildConfigL =
    (EnvConfigPathInfo -> BuildConfig)
-> (EnvConfigPathInfo -> BuildConfig -> EnvConfigPathInfo)
-> Lens' EnvConfigPathInfo BuildConfig
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens (.buildConfig) (\EnvConfigPathInfo
x BuildConfig
y -> EnvConfigPathInfo
x { buildConfig = y }) ((BuildConfig -> f BuildConfig)
 -> EnvConfigPathInfo -> f EnvConfigPathInfo)
-> ((BuildConfig -> f BuildConfig) -> BuildConfig -> f BuildConfig)
-> (BuildConfig -> f BuildConfig)
-> EnvConfigPathInfo
-> f EnvConfigPathInfo
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (BuildConfig -> f BuildConfig) -> BuildConfig -> f BuildConfig
forall env. HasBuildConfig env => Lens' env BuildConfig
Lens' BuildConfig BuildConfig
buildConfigL

data UseHaddocks a
  = UseHaddocks a
  | WithoutHaddocks a

-- | The paths of interest to a user which do require a 'Config' or 'EnvConfig'.

-- The first tuple string is used for a description that the optparse flag uses,

-- and the second string as a machine-readable key and also for @--foo@ flags.

-- The user can choose a specific path to list like @--stack-root@. But really

-- it's mainly for the documentation aspect.

pathsFromRunner :: (String, Text)
pathsFromRunner :: (String, Text)
pathsFromRunner = (String
"Global Stack root directory", Text
stackRootOptionName')

-- | The paths of interest to a user which do require an 'EnvConfig'. The first

-- tuple string is used for a description that the optparse flag uses, and the

-- second string as a machine-readable key and also for @--foo@ flags. The user

-- can choose a specific path to list like @--stack-root@. But really it's

-- mainly for the documentation aspect.

--

-- When printing output we generate @Config@ and pass it to the function

-- to generate an appropriate string. Trailing slashes are removed, see #506.

pathsFromConfig :: [(String, Text, Config -> Text)]
pathsFromConfig :: [(String, Text, Config -> Text)]
pathsFromConfig =
  [ ( String
"Global Stack configuration file"
    , String -> Text
T.pack String
stackGlobalConfigOptionName
    , Getting Text Config Text -> Config -> Text
forall s (m :: * -> *) a. MonadReader s m => Getting a s a -> m a
view ((Path Abs File -> Const Text (Path Abs File))
-> Config -> Const Text Config
forall s. HasConfig s => Lens' s (Path Abs File)
Lens' Config (Path Abs File)
stackGlobalConfigL ((Path Abs File -> Const Text (Path Abs File))
 -> Config -> Const Text Config)
-> ((Text -> Const Text Text)
    -> Path Abs File -> Const Text (Path Abs File))
-> Getting Text Config Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Path Abs File -> String) -> SimpleGetter (Path Abs File) String
forall s a. (s -> a) -> SimpleGetter s a
to Path Abs File -> String
forall b t. Path b t -> String
toFilePath Getting Text (Path Abs File) String
-> ((Text -> Const Text Text) -> String -> Const Text String)
-> (Text -> Const Text Text)
-> Path Abs File
-> Const Text (Path Abs File)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String -> Text) -> SimpleGetter String Text
forall s a. (s -> a) -> SimpleGetter s a
to String -> Text
T.pack)
    )
  , ( String
"Install location for GHC and other core tools (see 'stack ls tools' command)"
    , Text
"programs"
    , Getting Text Config Text -> Config -> Text
forall s (m :: * -> *) a. MonadReader s m => Getting a s a -> m a
view ((Config -> Const Text Config) -> Config -> Const Text Config
forall env. HasConfig env => Lens' env Config
Lens' Config Config
configL ((Config -> Const Text Config) -> Config -> Const Text Config)
-> Getting Text Config Text -> Getting Text Config Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Config -> Path Abs Dir) -> SimpleGetter Config (Path Abs Dir)
forall s a. (s -> a) -> SimpleGetter s a
to (.localPrograms) Getting Text Config (Path Abs Dir)
-> ((Text -> Const Text Text)
    -> Path Abs Dir -> Const Text (Path Abs Dir))
-> Getting Text Config Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Path Abs Dir -> String) -> SimpleGetter (Path Abs Dir) String
forall s a. (s -> a) -> SimpleGetter s a
to Path Abs Dir -> String
forall loc. Path loc Dir -> String
toFilePathNoTrailingSep Getting Text (Path Abs Dir) String
-> ((Text -> Const Text Text) -> String -> Const Text String)
-> (Text -> Const Text Text)
-> Path Abs Dir
-> Const Text (Path Abs Dir)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String -> Text) -> SimpleGetter String Text
forall s a. (s -> a) -> SimpleGetter s a
to String -> Text
T.pack)
    )
  , ( String
"Directory where Stack installs executables (e.g. ~/.local/bin (Unix-like OSs) or %APPDATA%\\local\\bin (Windows))"
    , Text
"local-bin"
    , Getting Text Config Text -> Config -> Text
forall s (m :: * -> *) a. MonadReader s m => Getting a s a -> m a
view (Getting Text Config Text -> Config -> Text)
-> Getting Text Config Text -> Config -> Text
forall a b. (a -> b) -> a -> b
$ (Config -> Const Text Config) -> Config -> Const Text Config
forall env. HasConfig env => Lens' env Config
Lens' Config Config
configL ((Config -> Const Text Config) -> Config -> Const Text Config)
-> Getting Text Config Text -> Getting Text Config Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Config -> Path Abs Dir) -> SimpleGetter Config (Path Abs Dir)
forall s a. (s -> a) -> SimpleGetter s a
to (.localBin) Getting Text Config (Path Abs Dir)
-> ((Text -> Const Text Text)
    -> Path Abs Dir -> Const Text (Path Abs Dir))
-> Getting Text Config Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Path Abs Dir -> String) -> SimpleGetter (Path Abs Dir) String
forall s a. (s -> a) -> SimpleGetter s a
to Path Abs Dir -> String
forall loc. Path loc Dir -> String
toFilePathNoTrailingSep Getting Text (Path Abs Dir) String
-> ((Text -> Const Text Text) -> String -> Const Text String)
-> (Text -> Const Text Text)
-> Path Abs Dir
-> Const Text (Path Abs Dir)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String -> Text) -> SimpleGetter String Text
forall s a. (s -> a) -> SimpleGetter s a
to String -> Text
T.pack
    )
  ]

-- | The paths of interest to a user which require a 'EnvConfig'. The first

-- tuple string is used for a description that the optparse flag uses, and the

-- second string as a machine-readable key and also for @--foo@ flags. The user

-- can choose a specific path to list like @--project-root@. But really it's

-- mainly for the documentation aspect.

--

-- When printing output we generate @EnvConfigPathInfo@ and pass it to the

-- function to generate an appropriate string. Trailing slashes are removed, see

-- #506.

pathsFromEnvConfig :: [(String, Text, UseHaddocks (EnvConfigPathInfo -> Text))]
pathsFromEnvConfig :: [(String, Text, UseHaddocks (EnvConfigPathInfo -> Text))]
pathsFromEnvConfig =
  [ ( String
"Project root (derived from stack.yaml file)"
    , Text
"project-root"
    , (EnvConfigPathInfo -> Text)
-> UseHaddocks (EnvConfigPathInfo -> Text)
forall a. a -> UseHaddocks a
WithoutHaddocks ((EnvConfigPathInfo -> Text)
 -> UseHaddocks (EnvConfigPathInfo -> Text))
-> (EnvConfigPathInfo -> Text)
-> UseHaddocks (EnvConfigPathInfo -> Text)
forall a b. (a -> b) -> a -> b
$
        Getting Text EnvConfigPathInfo Text -> EnvConfigPathInfo -> Text
forall s (m :: * -> *) a. MonadReader s m => Getting a s a -> m a
view (Getting Text EnvConfigPathInfo (Path Abs Dir)
forall env r. HasBuildConfig env => Getting r env (Path Abs Dir)
projectRootL Getting Text EnvConfigPathInfo (Path Abs Dir)
-> ((Text -> Const Text Text)
    -> Path Abs Dir -> Const Text (Path Abs Dir))
-> Getting Text EnvConfigPathInfo Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Path Abs Dir -> String) -> SimpleGetter (Path Abs Dir) String
forall s a. (s -> a) -> SimpleGetter s a
to Path Abs Dir -> String
forall loc. Path loc Dir -> String
toFilePathNoTrailingSep Getting Text (Path Abs Dir) String
-> ((Text -> Const Text Text) -> String -> Const Text String)
-> (Text -> Const Text Text)
-> Path Abs Dir
-> Const Text (Path Abs Dir)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String -> Text) -> SimpleGetter String Text
forall s a. (s -> a) -> SimpleGetter s a
to String -> Text
T.pack)
    )
  , ( String
"Configuration location (where the stack.yaml file is)"
    , Text
"config-location"
    , (EnvConfigPathInfo -> Text)
-> UseHaddocks (EnvConfigPathInfo -> Text)
forall a. a -> UseHaddocks a
WithoutHaddocks ((EnvConfigPathInfo -> Text)
 -> UseHaddocks (EnvConfigPathInfo -> Text))
-> (EnvConfigPathInfo -> Text)
-> UseHaddocks (EnvConfigPathInfo -> Text)
forall a b. (a -> b) -> a -> b
$ Getting Text EnvConfigPathInfo Text -> EnvConfigPathInfo -> Text
forall s (m :: * -> *) a. MonadReader s m => Getting a s a -> m a
view ((Path Abs File -> Const Text (Path Abs File))
-> EnvConfigPathInfo -> Const Text EnvConfigPathInfo
forall env. HasBuildConfig env => Lens' env (Path Abs File)
Lens' EnvConfigPathInfo (Path Abs File)
stackYamlL ((Path Abs File -> Const Text (Path Abs File))
 -> EnvConfigPathInfo -> Const Text EnvConfigPathInfo)
-> ((Text -> Const Text Text)
    -> Path Abs File -> Const Text (Path Abs File))
-> Getting Text EnvConfigPathInfo Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Path Abs File -> String) -> SimpleGetter (Path Abs File) String
forall s a. (s -> a) -> SimpleGetter s a
to Path Abs File -> String
forall b t. Path b t -> String
toFilePath Getting Text (Path Abs File) String
-> ((Text -> Const Text Text) -> String -> Const Text String)
-> (Text -> Const Text Text)
-> Path Abs File
-> Const Text (Path Abs File)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String -> Text) -> SimpleGetter String Text
forall s a. (s -> a) -> SimpleGetter s a
to String -> Text
T.pack)
    )
  , ( String
"PATH environment variable"
    , Text
"bin-path"
    , (EnvConfigPathInfo -> Text)
-> UseHaddocks (EnvConfigPathInfo -> Text)
forall a. a -> UseHaddocks a
WithoutHaddocks ((EnvConfigPathInfo -> Text)
 -> UseHaddocks (EnvConfigPathInfo -> Text))
-> (EnvConfigPathInfo -> Text)
-> UseHaddocks (EnvConfigPathInfo -> Text)
forall a b. (a -> b) -> a -> b
$
        String -> Text
T.pack (String -> Text)
-> (EnvConfigPathInfo -> String) -> EnvConfigPathInfo -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> [String] -> String
forall a. [a] -> [[a]] -> [a]
intercalate [Char
FP.searchPathSeparator] ([String] -> String)
-> (EnvConfigPathInfo -> [String]) -> EnvConfigPathInfo -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Getting [String] EnvConfigPathInfo [String]
-> EnvConfigPathInfo -> [String]
forall s (m :: * -> *) a. MonadReader s m => Getting a s a -> m a
view Getting [String] EnvConfigPathInfo [String]
forall env. HasProcessContext env => SimpleGetter env [String]
SimpleGetter EnvConfigPathInfo [String]
exeSearchPathL
    )
  , ( String
"Compiler binary (e.g. ghc)"
    , Text
"compiler-exe"
    , (EnvConfigPathInfo -> Text)
-> UseHaddocks (EnvConfigPathInfo -> Text)
forall a. a -> UseHaddocks a
WithoutHaddocks ((EnvConfigPathInfo -> Text)
 -> UseHaddocks (EnvConfigPathInfo -> Text))
-> (EnvConfigPathInfo -> Text)
-> UseHaddocks (EnvConfigPathInfo -> Text)
forall a b. (a -> b) -> a -> b
$ String -> Text
T.pack (String -> Text)
-> (EnvConfigPathInfo -> String) -> EnvConfigPathInfo -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Path Abs File -> String
forall b t. Path b t -> String
toFilePath (Path Abs File -> String)
-> (EnvConfigPathInfo -> Path Abs File)
-> EnvConfigPathInfo
-> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (.compiler)
    )
  , ( String
"Directory containing the compiler binary (e.g. ghc)"
    , Text
"compiler-bin"
    , (EnvConfigPathInfo -> Text)
-> UseHaddocks (EnvConfigPathInfo -> Text)
forall a. a -> UseHaddocks a
WithoutHaddocks ((EnvConfigPathInfo -> Text)
 -> UseHaddocks (EnvConfigPathInfo -> Text))
-> (EnvConfigPathInfo -> Text)
-> UseHaddocks (EnvConfigPathInfo -> Text)
forall a b. (a -> b) -> a -> b
$ String -> Text
T.pack (String -> Text)
-> (EnvConfigPathInfo -> String) -> EnvConfigPathInfo -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Path Abs Dir -> String
forall loc. Path loc Dir -> String
toFilePathNoTrailingSep (Path Abs Dir -> String)
-> (EnvConfigPathInfo -> Path Abs Dir)
-> EnvConfigPathInfo
-> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Path Abs File -> Path Abs Dir
forall b t. Path b t -> Path b Dir
parent (Path Abs File -> Path Abs Dir)
-> (EnvConfigPathInfo -> Path Abs File)
-> EnvConfigPathInfo
-> Path Abs Dir
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (.compiler)
    )
  , ( String
"Directory containing binaries specific to a particular compiler"
    , Text
"compiler-tools-bin"
    , (EnvConfigPathInfo -> Text)
-> UseHaddocks (EnvConfigPathInfo -> Text)
forall a. a -> UseHaddocks a
WithoutHaddocks ((EnvConfigPathInfo -> Text)
 -> UseHaddocks (EnvConfigPathInfo -> Text))
-> (EnvConfigPathInfo -> Text)
-> UseHaddocks (EnvConfigPathInfo -> Text)
forall a b. (a -> b) -> a -> b
$ String -> Text
T.pack (String -> Text)
-> (EnvConfigPathInfo -> String) -> EnvConfigPathInfo -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Path Abs Dir -> String
forall loc. Path loc Dir -> String
toFilePathNoTrailingSep (Path Abs Dir -> String)
-> (EnvConfigPathInfo -> Path Abs Dir)
-> EnvConfigPathInfo
-> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (.toolsDir)
    )
  , ( String
"Extra include directories"
    , Text
"extra-include-dirs"
    , (EnvConfigPathInfo -> Text)
-> UseHaddocks (EnvConfigPathInfo -> Text)
forall a. a -> UseHaddocks a
WithoutHaddocks ((EnvConfigPathInfo -> Text)
 -> UseHaddocks (EnvConfigPathInfo -> Text))
-> (EnvConfigPathInfo -> Text)
-> UseHaddocks (EnvConfigPathInfo -> Text)
forall a b. (a -> b) -> a -> b
$
        Text -> [Text] -> Text
T.intercalate Text
", " ([Text] -> Text)
-> (EnvConfigPathInfo -> [Text]) -> EnvConfigPathInfo -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String -> Text) -> [String] -> [Text]
forall a b. (a -> b) -> [a] -> [b]
map String -> Text
T.pack ([String] -> [Text])
-> (EnvConfigPathInfo -> [String]) -> EnvConfigPathInfo -> [Text]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (.extraIncludeDirs) (Config -> [String])
-> (EnvConfigPathInfo -> Config) -> EnvConfigPathInfo -> [String]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Getting Config EnvConfigPathInfo Config
-> EnvConfigPathInfo -> Config
forall s (m :: * -> *) a. MonadReader s m => Getting a s a -> m a
view Getting Config EnvConfigPathInfo Config
forall env. HasConfig env => Lens' env Config
Lens' EnvConfigPathInfo Config
configL
    )
  , ( String
"Extra library directories"
    , Text
"extra-library-dirs"
    , (EnvConfigPathInfo -> Text)
-> UseHaddocks (EnvConfigPathInfo -> Text)
forall a. a -> UseHaddocks a
WithoutHaddocks ((EnvConfigPathInfo -> Text)
 -> UseHaddocks (EnvConfigPathInfo -> Text))
-> (EnvConfigPathInfo -> Text)
-> UseHaddocks (EnvConfigPathInfo -> Text)
forall a b. (a -> b) -> a -> b
$
        Text -> [Text] -> Text
T.intercalate Text
", " ([Text] -> Text)
-> (EnvConfigPathInfo -> [Text]) -> EnvConfigPathInfo -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String -> Text) -> [String] -> [Text]
forall a b. (a -> b) -> [a] -> [b]
map String -> Text
T.pack ([String] -> [Text])
-> (EnvConfigPathInfo -> [String]) -> EnvConfigPathInfo -> [Text]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (.extraLibDirs) (Config -> [String])
-> (EnvConfigPathInfo -> Config) -> EnvConfigPathInfo -> [String]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Getting Config EnvConfigPathInfo Config
-> EnvConfigPathInfo -> Config
forall s (m :: * -> *) a. MonadReader s m => Getting a s a -> m a
view Getting Config EnvConfigPathInfo Config
forall env. HasConfig env => Lens' env Config
Lens' EnvConfigPathInfo Config
configL
    )
  , ( String
"Snapshot package database"
    , Text
"snapshot-pkg-db"
    , (EnvConfigPathInfo -> Text)
-> UseHaddocks (EnvConfigPathInfo -> Text)
forall a. a -> UseHaddocks a
WithoutHaddocks ((EnvConfigPathInfo -> Text)
 -> UseHaddocks (EnvConfigPathInfo -> Text))
-> (EnvConfigPathInfo -> Text)
-> UseHaddocks (EnvConfigPathInfo -> Text)
forall a b. (a -> b) -> a -> b
$ String -> Text
T.pack (String -> Text)
-> (EnvConfigPathInfo -> String) -> EnvConfigPathInfo -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Path Abs Dir -> String
forall loc. Path loc Dir -> String
toFilePathNoTrailingSep (Path Abs Dir -> String)
-> (EnvConfigPathInfo -> Path Abs Dir)
-> EnvConfigPathInfo
-> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (.snapDb)
    )
  , ( String
"Local project package database"
    , Text
"local-pkg-db"
    , (EnvConfigPathInfo -> Text)
-> UseHaddocks (EnvConfigPathInfo -> Text)
forall a. a -> UseHaddocks a
WithoutHaddocks ((EnvConfigPathInfo -> Text)
 -> UseHaddocks (EnvConfigPathInfo -> Text))
-> (EnvConfigPathInfo -> Text)
-> UseHaddocks (EnvConfigPathInfo -> Text)
forall a b. (a -> b) -> a -> b
$ String -> Text
T.pack (String -> Text)
-> (EnvConfigPathInfo -> String) -> EnvConfigPathInfo -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Path Abs Dir -> String
forall loc. Path loc Dir -> String
toFilePathNoTrailingSep (Path Abs Dir -> String)
-> (EnvConfigPathInfo -> Path Abs Dir)
-> EnvConfigPathInfo
-> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (.localDb)
    )
  , ( String
"Global package database"
    , Text
"global-pkg-db"
    , (EnvConfigPathInfo -> Text)
-> UseHaddocks (EnvConfigPathInfo -> Text)
forall a. a -> UseHaddocks a
WithoutHaddocks ((EnvConfigPathInfo -> Text)
 -> UseHaddocks (EnvConfigPathInfo -> Text))
-> (EnvConfigPathInfo -> Text)
-> UseHaddocks (EnvConfigPathInfo -> Text)
forall a b. (a -> b) -> a -> b
$ String -> Text
T.pack (String -> Text)
-> (EnvConfigPathInfo -> String) -> EnvConfigPathInfo -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Path Abs Dir -> String
forall loc. Path loc Dir -> String
toFilePathNoTrailingSep (Path Abs Dir -> String)
-> (EnvConfigPathInfo -> Path Abs Dir)
-> EnvConfigPathInfo
-> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (.globalDb)
    )
  , ( String
"GHC_PACKAGE_PATH environment variable"
    , Text
"ghc-package-path"
    , (EnvConfigPathInfo -> Text)
-> UseHaddocks (EnvConfigPathInfo -> Text)
forall a. a -> UseHaddocks a
WithoutHaddocks ((EnvConfigPathInfo -> Text)
 -> UseHaddocks (EnvConfigPathInfo -> Text))
-> (EnvConfigPathInfo -> Text)
-> UseHaddocks (EnvConfigPathInfo -> Text)
forall a b. (a -> b) -> a -> b
$
        \EnvConfigPathInfo
pi -> Bool
-> Path Abs Dir
-> Path Abs Dir
-> [Path Abs Dir]
-> Path Abs Dir
-> Text
mkGhcPackagePath
                 Bool
True
                 EnvConfigPathInfo
pi.localDb
                 EnvConfigPathInfo
pi.snapDb
                 EnvConfigPathInfo
pi.extraDbs
                 EnvConfigPathInfo
pi.globalDb
    )
  , ( String
"Snapshot installation root"
    , Text
"snapshot-install-root"
    , (EnvConfigPathInfo -> Text)
-> UseHaddocks (EnvConfigPathInfo -> Text)
forall a. a -> UseHaddocks a
WithoutHaddocks ((EnvConfigPathInfo -> Text)
 -> UseHaddocks (EnvConfigPathInfo -> Text))
-> (EnvConfigPathInfo -> Text)
-> UseHaddocks (EnvConfigPathInfo -> Text)
forall a b. (a -> b) -> a -> b
$ String -> Text
T.pack (String -> Text)
-> (EnvConfigPathInfo -> String) -> EnvConfigPathInfo -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Path Abs Dir -> String
forall loc. Path loc Dir -> String
toFilePathNoTrailingSep (Path Abs Dir -> String)
-> (EnvConfigPathInfo -> Path Abs Dir)
-> EnvConfigPathInfo
-> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (.snapRoot)
    )
  , ( String
"Local project installation root"
    , Text
"local-install-root"
    , (EnvConfigPathInfo -> Text)
-> UseHaddocks (EnvConfigPathInfo -> Text)
forall a. a -> UseHaddocks a
WithoutHaddocks ((EnvConfigPathInfo -> Text)
 -> UseHaddocks (EnvConfigPathInfo -> Text))
-> (EnvConfigPathInfo -> Text)
-> UseHaddocks (EnvConfigPathInfo -> Text)
forall a b. (a -> b) -> a -> b
$ String -> Text
T.pack (String -> Text)
-> (EnvConfigPathInfo -> String) -> EnvConfigPathInfo -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Path Abs Dir -> String
forall loc. Path loc Dir -> String
toFilePathNoTrailingSep (Path Abs Dir -> String)
-> (EnvConfigPathInfo -> Path Abs Dir)
-> EnvConfigPathInfo
-> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (.localRoot)
    )
  , ( String
"Snapshot documentation root"
    , Text
"snapshot-doc-root"
    , (EnvConfigPathInfo -> Text)
-> UseHaddocks (EnvConfigPathInfo -> Text)
forall a. a -> UseHaddocks a
UseHaddocks ((EnvConfigPathInfo -> Text)
 -> UseHaddocks (EnvConfigPathInfo -> Text))
-> (EnvConfigPathInfo -> Text)
-> UseHaddocks (EnvConfigPathInfo -> Text)
forall a b. (a -> b) -> a -> b
$
        \EnvConfigPathInfo
pi -> String -> Text
T.pack (Path Abs Dir -> String
forall loc. Path loc Dir -> String
toFilePathNoTrailingSep (EnvConfigPathInfo
pi.snapRoot Path Abs Dir -> Path Rel Dir -> Path Abs Dir
forall b t. Path b Dir -> Path Rel t -> Path b t
</> Path Rel Dir
docDirSuffix))
    )
  , ( String
"Local project documentation root"
    , Text
"local-doc-root"
    , (EnvConfigPathInfo -> Text)
-> UseHaddocks (EnvConfigPathInfo -> Text)
forall a. a -> UseHaddocks a
UseHaddocks ((EnvConfigPathInfo -> Text)
 -> UseHaddocks (EnvConfigPathInfo -> Text))
-> (EnvConfigPathInfo -> Text)
-> UseHaddocks (EnvConfigPathInfo -> Text)
forall a b. (a -> b) -> a -> b
$
        \EnvConfigPathInfo
pi -> String -> Text
T.pack (Path Abs Dir -> String
forall loc. Path loc Dir -> String
toFilePathNoTrailingSep (EnvConfigPathInfo
pi.localRoot Path Abs Dir -> Path Rel Dir -> Path Abs Dir
forall b t. Path b Dir -> Path Rel t -> Path b t
</> Path Rel Dir
docDirSuffix))
    )
  , ( String
"Local project documentation root"
    , Text
"local-hoogle-root"
    , (EnvConfigPathInfo -> Text)
-> UseHaddocks (EnvConfigPathInfo -> Text)
forall a. a -> UseHaddocks a
UseHaddocks ((EnvConfigPathInfo -> Text)
 -> UseHaddocks (EnvConfigPathInfo -> Text))
-> (EnvConfigPathInfo -> Text)
-> UseHaddocks (EnvConfigPathInfo -> Text)
forall a b. (a -> b) -> a -> b
$ String -> Text
T.pack (String -> Text)
-> (EnvConfigPathInfo -> String) -> EnvConfigPathInfo -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Path Abs Dir -> String
forall loc. Path loc Dir -> String
toFilePathNoTrailingSep (Path Abs Dir -> String)
-> (EnvConfigPathInfo -> Path Abs Dir)
-> EnvConfigPathInfo
-> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (.hoogleRoot)
    )
  , ( String
"Dist work directory, relative to package directory"
    , Text
"dist-dir"
    , (EnvConfigPathInfo -> Text)
-> UseHaddocks (EnvConfigPathInfo -> Text)
forall a. a -> UseHaddocks a
WithoutHaddocks ((EnvConfigPathInfo -> Text)
 -> UseHaddocks (EnvConfigPathInfo -> Text))
-> (EnvConfigPathInfo -> Text)
-> UseHaddocks (EnvConfigPathInfo -> Text)
forall a b. (a -> b) -> a -> b
$ String -> Text
T.pack (String -> Text)
-> (EnvConfigPathInfo -> String) -> EnvConfigPathInfo -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Path Rel Dir -> String
forall loc. Path loc Dir -> String
toFilePathNoTrailingSep (Path Rel Dir -> String)
-> (EnvConfigPathInfo -> Path Rel Dir)
-> EnvConfigPathInfo
-> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (.distDir)
    )
  , ( String
"Where HPC reports and tix files are stored"
    , Text
"local-hpc-root"
    , (EnvConfigPathInfo -> Text)
-> UseHaddocks (EnvConfigPathInfo -> Text)
forall a. a -> UseHaddocks a
WithoutHaddocks ((EnvConfigPathInfo -> Text)
 -> UseHaddocks (EnvConfigPathInfo -> Text))
-> (EnvConfigPathInfo -> Text)
-> UseHaddocks (EnvConfigPathInfo -> Text)
forall a b. (a -> b) -> a -> b
$ String -> Text
T.pack (String -> Text)
-> (EnvConfigPathInfo -> String) -> EnvConfigPathInfo -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Path Abs Dir -> String
forall loc. Path loc Dir -> String
toFilePathNoTrailingSep (Path Abs Dir -> String)
-> (EnvConfigPathInfo -> Path Abs Dir)
-> EnvConfigPathInfo
-> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (.hpcDir)
    )
  ]

-- | 'Text' equivalent of 'stackRootOptionName'.

stackRootOptionName' :: Text
stackRootOptionName' :: Text
stackRootOptionName' = String -> Text
T.pack String
stackRootOptionName