{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NoFieldSelectors #-}
{-# LANGUAGE OverloadedRecordDot #-}
{-# LANGUAGE OverloadedStrings #-}
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
path :: [Text] -> RIO Runner ()
path :: [Text] -> RIO Runner ()
path [Text]
keys = do
let
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
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
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)
, :: ![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
pathsFromRunner :: (String, Text)
pathsFromRunner :: (String, Text)
pathsFromRunner = (String
"Global Stack root directory", Text
stackRootOptionName')
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
)
]
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)
)
]
stackRootOptionName' :: Text
stackRootOptionName' :: Text
stackRootOptionName' = String -> Text
T.pack String
stackRootOptionName