{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE OverloadedStrings #-}
module Stack.Constants.Config
( distDirFromDir
, rootDistDirFromDir
, setupConfigFromDir
, workDirFromDir
, distRelativeDir
, imageStagingDir
, projectDockerSandboxDir
, configCabalMod
, configSetupConfigMod
, buildCachesDir
, testSuccessFile
, testBuiltFile
, hpcRelativeDir
, hpcDirFromDir
, objectInterfaceDirL
, ghciDirL
, templatesDir
) where
import Stack.Prelude
import Stack.Constants
import Stack.Types.Config
import Path
objectInterfaceDirL :: HasBuildConfig env => Getting r env (Path Abs Dir)
objectInterfaceDirL :: Getting r env (Path Abs Dir)
objectInterfaceDirL = (env -> Path Abs Dir) -> SimpleGetter env (Path Abs Dir)
forall s a. (s -> a) -> SimpleGetter s a
to ((env -> Path Abs Dir) -> SimpleGetter env (Path Abs Dir))
-> (env -> Path Abs Dir) -> SimpleGetter env (Path Abs Dir)
forall a b. (a -> b) -> a -> b
$ \env
env ->
let workDir :: Path Rel Dir
workDir = Getting (Path Rel Dir) env (Path Rel Dir) -> env -> Path Rel Dir
forall s (m :: * -> *) a. MonadReader s m => Getting a s a -> m a
view Getting (Path Rel Dir) env (Path Rel Dir)
forall env. HasConfig env => Lens' env (Path Rel Dir)
workDirL env
env
root :: Path Abs Dir
root = Getting (Path Abs Dir) env (Path Abs Dir) -> 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)
forall env r. HasBuildConfig env => Getting r env (Path Abs Dir)
projectRootL env
env
in Path Abs Dir
root Path Abs Dir -> Path Rel Dir -> Path Abs Dir
forall b t. Path b Dir -> Path Rel t -> Path b t
</> Path Rel Dir
workDir Path Rel Dir -> Path Rel Dir -> Path Rel Dir
forall b t. Path b Dir -> Path Rel t -> Path b t
</> $(mkRelDir "odir/")
ghciDirL :: HasBuildConfig env => Getting r env (Path Abs Dir)
ghciDirL :: Getting r env (Path Abs Dir)
ghciDirL = (env -> Path Abs Dir) -> SimpleGetter env (Path Abs Dir)
forall s a. (s -> a) -> SimpleGetter s a
to ((env -> Path Abs Dir) -> SimpleGetter env (Path Abs Dir))
-> (env -> Path Abs Dir) -> SimpleGetter env (Path Abs Dir)
forall a b. (a -> b) -> a -> b
$ \env
env ->
let workDir :: Path Rel Dir
workDir = Getting (Path Rel Dir) env (Path Rel Dir) -> env -> Path Rel Dir
forall s (m :: * -> *) a. MonadReader s m => Getting a s a -> m a
view Getting (Path Rel Dir) env (Path Rel Dir)
forall env. HasConfig env => Lens' env (Path Rel Dir)
workDirL env
env
root :: Path Abs Dir
root = Getting (Path Abs Dir) env (Path Abs Dir) -> 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)
forall env r. HasBuildConfig env => Getting r env (Path Abs Dir)
projectRootL env
env
in Path Abs Dir
root Path Abs Dir -> Path Rel Dir -> Path Abs Dir
forall b t. Path b Dir -> Path Rel t -> Path b t
</> Path Rel Dir
workDir Path Rel Dir -> Path Rel Dir -> Path Rel Dir
forall b t. Path b Dir -> Path Rel t -> Path b t
</> $(mkRelDir "ghci/")
buildCachesDir :: (MonadThrow m, MonadReader env m, HasEnvConfig env)
=> Path Abs Dir
-> m (Path Abs Dir)
buildCachesDir :: Path Abs Dir -> m (Path Abs Dir)
buildCachesDir Path Abs Dir
dir =
(Path Abs Dir -> Path Abs Dir)
-> m (Path Abs Dir) -> m (Path Abs Dir)
forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM
(Path Abs Dir -> Path Rel Dir -> Path Abs Dir
forall b t. Path b Dir -> Path Rel t -> Path b t
</> $(mkRelDir "stack-build-caches"))
(Path Abs Dir -> m (Path Abs Dir)
forall (m :: * -> *) env.
(MonadThrow m, MonadReader env m, HasEnvConfig env) =>
Path Abs Dir -> m (Path Abs Dir)
distDirFromDir Path Abs Dir
dir)
testSuccessFile :: (MonadThrow m, MonadReader env m, HasEnvConfig env)
=> Path Abs Dir
-> m (Path Abs File)
testSuccessFile :: Path Abs Dir -> m (Path Abs File)
testSuccessFile Path Abs Dir
dir =
(Path Abs Dir -> Path Abs File)
-> m (Path Abs Dir) -> m (Path Abs File)
forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM
(Path Abs Dir -> Path Rel File -> Path Abs File
forall b t. Path b Dir -> Path Rel t -> Path b t
</> $(mkRelFile "stack-test-success"))
(Path Abs Dir -> m (Path Abs Dir)
forall (m :: * -> *) env.
(MonadThrow m, MonadReader env m, HasEnvConfig env) =>
Path Abs Dir -> m (Path Abs Dir)
distDirFromDir Path Abs Dir
dir)
testBuiltFile :: (MonadThrow m, MonadReader env m, HasEnvConfig env)
=> Path Abs Dir
-> m (Path Abs File)
testBuiltFile :: Path Abs Dir -> m (Path Abs File)
testBuiltFile Path Abs Dir
dir =
(Path Abs Dir -> Path Abs File)
-> m (Path Abs Dir) -> m (Path Abs File)
forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM
(Path Abs Dir -> Path Rel File -> Path Abs File
forall b t. Path b Dir -> Path Rel t -> Path b t
</> $(mkRelFile "stack-test-built"))
(Path Abs Dir -> m (Path Abs Dir)
forall (m :: * -> *) env.
(MonadThrow m, MonadReader env m, HasEnvConfig env) =>
Path Abs Dir -> m (Path Abs Dir)
distDirFromDir Path Abs Dir
dir)
configCabalMod :: (MonadThrow m, MonadReader env m, HasEnvConfig env)
=> Path Abs Dir
-> m (Path Abs File)
configCabalMod :: Path Abs Dir -> m (Path Abs File)
configCabalMod Path Abs Dir
dir =
(Path Abs Dir -> Path Abs File)
-> m (Path Abs Dir) -> m (Path Abs File)
forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM
(Path Abs Dir -> Path Rel File -> Path Abs File
forall b t. Path b Dir -> Path Rel t -> Path b t
</> $(mkRelFile "stack-cabal-mod"))
(Path Abs Dir -> m (Path Abs Dir)
forall (m :: * -> *) env.
(MonadThrow m, MonadReader env m, HasEnvConfig env) =>
Path Abs Dir -> m (Path Abs Dir)
distDirFromDir Path Abs Dir
dir)
configSetupConfigMod :: (MonadThrow m, MonadReader env m, HasEnvConfig env)
=> Path Abs Dir
-> m (Path Abs File)
configSetupConfigMod :: Path Abs Dir -> m (Path Abs File)
configSetupConfigMod Path Abs Dir
dir =
(Path Abs Dir -> Path Abs File)
-> m (Path Abs Dir) -> m (Path Abs File)
forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM
(Path Abs Dir -> Path Rel File -> Path Abs File
forall b t. Path b Dir -> Path Rel t -> Path b t
</> $(mkRelFile "stack-setup-config-mod"))
(Path Abs Dir -> m (Path Abs Dir)
forall (m :: * -> *) env.
(MonadThrow m, MonadReader env m, HasEnvConfig env) =>
Path Abs Dir -> m (Path Abs Dir)
distDirFromDir Path Abs Dir
dir)
hpcDirFromDir
:: (MonadThrow m, MonadReader env m, HasEnvConfig env)
=> Path Abs Dir
-> m (Path Abs Dir)
hpcDirFromDir :: Path Abs Dir -> m (Path Abs Dir)
hpcDirFromDir Path Abs Dir
fp =
(Path Rel Dir -> Path Abs Dir)
-> m (Path Rel Dir) -> m (Path Abs Dir)
forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM (Path Abs Dir
fp Path Abs Dir -> Path Rel Dir -> Path Abs Dir
forall b t. Path b Dir -> Path Rel t -> Path b t
</>) m (Path Rel Dir)
forall (m :: * -> *) env.
(MonadThrow m, MonadReader env m, HasEnvConfig env) =>
m (Path Rel Dir)
hpcRelativeDir
hpcRelativeDir :: (MonadThrow m, MonadReader env m, HasEnvConfig env)
=> m (Path Rel Dir)
hpcRelativeDir :: m (Path Rel Dir)
hpcRelativeDir =
(Path Rel Dir -> Path Rel Dir)
-> m (Path Rel Dir) -> m (Path Rel Dir)
forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM (Path Rel Dir -> Path Rel Dir -> Path Rel Dir
forall b t. Path b Dir -> Path Rel t -> Path b t
</> $(mkRelDir "hpc")) m (Path Rel Dir)
forall (m :: * -> *) env.
(MonadThrow m, MonadReader env m, HasEnvConfig env) =>
m (Path Rel Dir)
distRelativeDir
setupConfigFromDir :: (MonadThrow m, MonadReader env m, HasEnvConfig env)
=> Path Abs Dir
-> m (Path Abs File)
setupConfigFromDir :: Path Abs Dir -> m (Path Abs File)
setupConfigFromDir Path Abs Dir
fp = do
Path Abs Dir
dist <- Path Abs Dir -> m (Path Abs Dir)
forall (m :: * -> *) env.
(MonadThrow m, MonadReader env m, HasEnvConfig env) =>
Path Abs Dir -> m (Path Abs Dir)
distDirFromDir Path Abs Dir
fp
Path Abs File -> m (Path Abs File)
forall (m :: * -> *) a. Monad m => a -> m a
return (Path Abs File -> m (Path Abs File))
-> Path Abs File -> m (Path Abs File)
forall a b. (a -> b) -> a -> b
$ Path Abs Dir
dist Path Abs Dir -> Path Rel File -> Path Abs File
forall b t. Path b Dir -> Path Rel t -> Path b t
</> $(mkRelFile "setup-config")
distDirFromDir :: (MonadThrow m, MonadReader env m, HasEnvConfig env)
=> Path Abs Dir
-> m (Path Abs Dir)
distDirFromDir :: Path Abs Dir -> m (Path Abs Dir)
distDirFromDir Path Abs Dir
fp =
(Path Rel Dir -> Path Abs Dir)
-> m (Path Rel Dir) -> m (Path Abs Dir)
forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM (Path Abs Dir
fp Path Abs Dir -> Path Rel Dir -> Path Abs Dir
forall b t. Path b Dir -> Path Rel t -> Path b t
</>) m (Path Rel Dir)
forall (m :: * -> *) env.
(MonadThrow m, MonadReader env m, HasEnvConfig env) =>
m (Path Rel Dir)
distRelativeDir
rootDistDirFromDir
:: (MonadReader env m, HasConfig env)
=> Path Abs Dir
-> m (Path Abs Dir)
rootDistDirFromDir :: Path Abs Dir -> m (Path Abs Dir)
rootDistDirFromDir Path Abs Dir
fp =
(Path Rel Dir -> Path Abs Dir)
-> m (Path Rel Dir) -> m (Path Abs Dir)
forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM (Path Abs Dir
fp Path Abs Dir -> Path Rel Dir -> Path Abs Dir
forall b t. Path b Dir -> Path Rel t -> Path b t
</>) m (Path Rel Dir)
forall env (m :: * -> *).
(MonadReader env m, HasConfig env) =>
m (Path Rel Dir)
rootDistRelativeDir
rootDistRelativeDir
:: (MonadReader env m, HasConfig env)
=> m (Path Rel Dir)
rootDistRelativeDir :: m (Path Rel Dir)
rootDistRelativeDir = do
Path Rel Dir
workDir <- Getting (Path Rel Dir) env (Path Rel Dir) -> m (Path Rel Dir)
forall s (m :: * -> *) a. MonadReader s m => Getting a s a -> m a
view Getting (Path Rel Dir) env (Path Rel Dir)
forall env. HasConfig env => Lens' env (Path Rel Dir)
workDirL
Path Rel Dir -> m (Path Rel Dir)
forall (m :: * -> *) a. Monad m => a -> m a
return (Path Rel Dir -> m (Path Rel Dir))
-> Path Rel Dir -> m (Path Rel Dir)
forall a b. (a -> b) -> a -> b
$ Path Rel Dir
workDir Path Rel Dir -> Path Rel Dir -> Path Rel Dir
forall b t. Path b Dir -> Path Rel t -> Path b t
</> $(mkRelDir "dist")
workDirFromDir :: (MonadReader env m, HasConfig env)
=> Path Abs Dir
-> m (Path Abs Dir)
workDirFromDir :: Path Abs Dir -> m (Path Abs Dir)
workDirFromDir Path Abs Dir
fp = Getting (Path Abs Dir) env (Path Abs Dir) -> m (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) -> m (Path Abs Dir))
-> Getting (Path Abs Dir) env (Path Abs Dir) -> m (Path Abs Dir)
forall a b. (a -> b) -> a -> b
$ (Path Rel Dir -> Const (Path Abs Dir) (Path Rel Dir))
-> env -> Const (Path Abs Dir) env
forall env. HasConfig env => Lens' env (Path Rel Dir)
workDirL((Path Rel Dir -> Const (Path Abs Dir) (Path Rel Dir))
-> env -> Const (Path Abs Dir) env)
-> ((Path Abs Dir -> Const (Path Abs Dir) (Path Abs Dir))
-> Path Rel Dir -> Const (Path Abs Dir) (Path Rel Dir))
-> Getting (Path Abs Dir) env (Path Abs Dir)
forall b c a. (b -> c) -> (a -> b) -> a -> c
.(Path Rel Dir -> Path Abs Dir)
-> SimpleGetter (Path Rel Dir) (Path Abs Dir)
forall s a. (s -> a) -> SimpleGetter s a
to (Path Abs Dir
fp Path Abs Dir -> Path Rel Dir -> Path Abs Dir
forall b t. Path b Dir -> Path Rel t -> Path b t
</>)
templatesDir :: Config -> Path Abs Dir
templatesDir :: Config -> Path Abs Dir
templatesDir Config
config = Getting (Path Abs Dir) Config (Path Abs Dir)
-> Config -> Path Abs Dir
forall s (m :: * -> *) a. MonadReader s m => Getting a s a -> m a
view Getting (Path Abs Dir) Config (Path Abs Dir)
forall s. HasConfig s => Lens' s (Path Abs Dir)
stackRootL Config
config Path Abs Dir -> Path Rel Dir -> Path Abs Dir
forall b t. Path b Dir -> Path Rel t -> Path b t
</> $(mkRelDir "templates")
distRelativeDir :: (MonadThrow m, MonadReader env m, HasEnvConfig env)
=> m (Path Rel Dir)
distRelativeDir :: m (Path Rel Dir)
distRelativeDir = do
Version
cabalPkgVer <- Getting Version env Version -> m Version
forall s (m :: * -> *) a. MonadReader s m => Getting a s a -> m a
view Getting Version env Version
forall env. HasCompiler env => SimpleGetter env Version
cabalVersionL
Path Rel Dir
platform <- m (Path Rel Dir)
forall env (m :: * -> *).
(MonadReader env m, HasEnvConfig env, MonadThrow m) =>
m (Path Rel Dir)
platformGhcRelDir
Path Rel Dir
envDir <-
FilePath -> m (Path Rel Dir)
forall (m :: * -> *). MonadThrow m => FilePath -> m (Path Rel Dir)
parseRelDir (FilePath -> m (Path Rel Dir)) -> FilePath -> m (Path Rel Dir)
forall a b. (a -> b) -> a -> b
$
PackageIdentifier -> FilePath
packageIdentifierString (PackageIdentifier -> FilePath) -> PackageIdentifier -> FilePath
forall a b. (a -> b) -> a -> b
$
PackageName -> Version -> PackageIdentifier
PackageIdentifier PackageName
cabalPackageName Version
cabalPkgVer
Path Rel Dir
platformAndCabal <- Path Rel Dir -> m (Path Rel Dir)
forall (m :: * -> *).
MonadThrow m =>
Path Rel Dir -> m (Path Rel Dir)
useShaPathOnWindows (Path Rel Dir
platform Path Rel Dir -> Path Rel Dir -> Path Rel Dir
forall b t. Path b Dir -> Path Rel t -> Path b t
</> Path Rel Dir
envDir)
Path Rel Dir
allDist <- m (Path Rel Dir)
forall env (m :: * -> *).
(MonadReader env m, HasConfig env) =>
m (Path Rel Dir)
rootDistRelativeDir
Path Rel Dir -> m (Path Rel Dir)
forall (m :: * -> *) a. Monad m => a -> m a
return (Path Rel Dir -> m (Path Rel Dir))
-> Path Rel Dir -> m (Path Rel Dir)
forall a b. (a -> b) -> a -> b
$ Path Rel Dir
allDist Path Rel Dir -> Path Rel Dir -> Path Rel Dir
forall b t. Path b Dir -> Path Rel t -> Path b t
</> Path Rel Dir
platformAndCabal
projectDockerSandboxDir :: (MonadReader env m, HasConfig env)
=> Path Abs Dir
-> m (Path Abs Dir)
projectDockerSandboxDir :: Path Abs Dir -> m (Path Abs Dir)
projectDockerSandboxDir Path Abs Dir
projectRoot = do
Path Rel Dir
workDir <- Getting (Path Rel Dir) env (Path Rel Dir) -> m (Path Rel Dir)
forall s (m :: * -> *) a. MonadReader s m => Getting a s a -> m a
view Getting (Path Rel Dir) env (Path Rel Dir)
forall env. HasConfig env => Lens' env (Path Rel Dir)
workDirL
Path Abs Dir -> m (Path Abs Dir)
forall (m :: * -> *) a. Monad m => a -> m a
return (Path Abs Dir -> m (Path Abs Dir))
-> Path Abs Dir -> m (Path Abs Dir)
forall a b. (a -> b) -> a -> b
$ Path Abs Dir
projectRoot Path Abs Dir -> Path Rel Dir -> Path Abs Dir
forall b t. Path b Dir -> Path Rel t -> Path b t
</> Path Rel Dir
workDir Path Rel Dir -> Path Rel Dir -> Path Rel Dir
forall b t. Path b Dir -> Path Rel t -> Path b t
</> $(mkRelDir "docker/")
imageStagingDir :: (MonadReader env m, HasConfig env, MonadThrow m)
=> Path Abs Dir
-> Int
-> m (Path Abs Dir)
imageStagingDir :: Path Abs Dir -> Int -> m (Path Abs Dir)
imageStagingDir Path Abs Dir
projectRoot Int
imageIdx = do
Path Rel Dir
workDir <- Getting (Path Rel Dir) env (Path Rel Dir) -> m (Path Rel Dir)
forall s (m :: * -> *) a. MonadReader s m => Getting a s a -> m a
view Getting (Path Rel Dir) env (Path Rel Dir)
forall env. HasConfig env => Lens' env (Path Rel Dir)
workDirL
Path Rel Dir
idxRelDir <- FilePath -> m (Path Rel Dir)
forall (m :: * -> *). MonadThrow m => FilePath -> m (Path Rel Dir)
parseRelDir (Int -> FilePath
forall a. Show a => a -> FilePath
show Int
imageIdx)
Path Abs Dir -> m (Path Abs Dir)
forall (m :: * -> *) a. Monad m => a -> m a
return (Path Abs Dir -> m (Path Abs Dir))
-> Path Abs Dir -> m (Path Abs Dir)
forall a b. (a -> b) -> a -> b
$ Path Abs Dir
projectRoot Path Abs Dir -> Path Rel Dir -> Path Abs Dir
forall b t. Path b Dir -> Path Rel t -> Path b t
</> Path Rel Dir
workDir Path Rel Dir -> Path Rel Dir -> Path Rel Dir
forall b t. Path b Dir -> Path Rel t -> Path b t
</> $(mkRelDir "image") Path Rel Dir -> Path Rel Dir -> Path Rel Dir
forall b t. Path b Dir -> Path Rel t -> Path b t
</> Path Rel Dir
idxRelDir