33{-# LANGUAGE TemplateHaskell #-}
44
55module Stack.Constants.Config
6- ( distDirFromDir
7- , rootDistDirFromDir
8- , setupConfigFromDir
9- , workDirFromDir
10- , distRelativeDir
11- , imageStagingDir
12- , projectDockerSandboxDir
6+ ( buildCachesDir
137 , configCabalMod
14- , configSetupConfigMod
158 , configPackageProjectRoot
16- , buildCachesDir
17- , testSuccessFile
18- , testBuiltFile
19- , hpcRelativeDir
9+ , configSetupConfigMod
10+ , distDirFromDir
11+ , distRelativeDir
12+ , ghciDirL
2013 , hpcDirFromDir
14+ , hpcRelativeDir
15+ , imageStagingDir
2116 , objectInterfaceDirL
22- , ghciDirL
17+ , projectDockerSandboxDir
18+ , rootDistDirFromDir
19+ , setupConfigFromDir
2320 , templatesDir
21+ , testBuiltFile
22+ , testSuccessFile
23+ , workDirFromDir
2424 ) where
2525
2626import Path ( (</>) , mkRelDir , mkRelFile , parseRelDir )
@@ -47,140 +47,153 @@ ghciDirL = to $ \env -> -- FIXME is this idiomatic lens code?
4747 root = view projectRootL env
4848 in root </> workDir </> relDirGhci
4949
50- -- | The directory containing the files used for dirtiness check of source files.
51- buildCachesDir :: (MonadThrow m , MonadReader env m , HasEnvConfig env )
52- => Path Abs Dir -- ^ Package directory.
53- -> m (Path Abs Dir )
50+ -- | The directory containing the files used for dirtiness check of source
51+ -- files.
52+ buildCachesDir ::
53+ (HasEnvConfig env , MonadReader env m , MonadThrow m )
54+ => Path Abs Dir -- ^ Package directory.
55+ -> m (Path Abs Dir )
5456buildCachesDir dir =
5557 fmap
5658 (</> $ (mkRelDir " stack-build-caches" ))
5759 (distDirFromDir dir)
5860
59- -- | The filename used to mark tests as having succeeded
60- testSuccessFile :: (MonadThrow m , MonadReader env m , HasEnvConfig env )
61- => Path Abs Dir -- ^ Package directory
62- -> m (Path Abs File )
61+ -- | The filename used to mark tests as having succeeded.
62+ testSuccessFile ::
63+ (HasEnvConfig env , MonadReader env m , MonadThrow m )
64+ => Path Abs Dir -- ^ Package directory
65+ -> m (Path Abs File )
6366testSuccessFile dir =
6467 fmap
6568 (</> $ (mkRelFile " stack-test-success" ))
6669 (distDirFromDir dir)
6770
68- -- | The filename used to mark tests as having built
69- testBuiltFile :: (MonadThrow m , MonadReader env m , HasEnvConfig env )
70- => Path Abs Dir -- ^ Package directory
71- -> m (Path Abs File )
71+ -- | The filename used to mark tests as having built.
72+ testBuiltFile ::
73+ (HasEnvConfig env , MonadReader env m , MonadThrow m )
74+ => Path Abs Dir -- ^ Package directory
75+ -> m (Path Abs File )
7276testBuiltFile dir =
7377 fmap
7478 (</> $ (mkRelFile " stack-test-built" ))
7579 (distDirFromDir dir)
7680
77- -- | The filename used for modification check of .cabal
78- configCabalMod :: (MonadThrow m , MonadReader env m , HasEnvConfig env )
79- => Path Abs Dir -- ^ Package directory.
80- -> m (Path Abs File )
81+ -- | The filename used for modification check of a Cabal file.
82+ configCabalMod ::
83+ (HasEnvConfig env , MonadReader env m , MonadThrow m )
84+ => Path Abs Dir -- ^ Package directory.
85+ -> m (Path Abs File )
8186configCabalMod dir =
8287 fmap
8388 (</> $ (mkRelFile " stack-cabal-mod" ))
8489 (distDirFromDir dir)
8590
86- -- | The filename used for modification check of setup-config
87- configSetupConfigMod :: (MonadThrow m , MonadReader env m , HasEnvConfig env )
88- => Path Abs Dir -- ^ Package directory.
89- -> m (Path Abs File )
91+ -- | The filename used for modification check of setup-config.
92+ configSetupConfigMod ::
93+ (HasEnvConfig env , MonadReader env m , MonadThrow m )
94+ => Path Abs Dir -- ^ Package directory.
95+ -> m (Path Abs File )
9096configSetupConfigMod dir =
9197 fmap
9298 (</> $ (mkRelFile " stack-setup-config-mod" ))
9399 (distDirFromDir dir)
94100
95- -- | The filename used for the project root from the last build of a package
96- configPackageProjectRoot :: (MonadThrow m , MonadReader env m , HasEnvConfig env )
97- => Path Abs Dir -- ^ Package directory.
98- -> m (Path Abs File )
101+ -- | The filename used for the project root from the last build of a package.
102+ configPackageProjectRoot ::
103+ (HasEnvConfig env , MonadReader env m , MonadThrow m )
104+ => Path Abs Dir -- ^ Package directory.
105+ -> m (Path Abs File )
99106configPackageProjectRoot dir =
100107 fmap
101108 (</> $ (mkRelFile " stack-project-root" ))
102109 (distDirFromDir dir)
103110
104111-- | Directory for HPC work.
105112hpcDirFromDir ::
106- ( MonadThrow m , MonadReader env m , HasEnvConfig env )
107- => Path Abs Dir -- ^ Package directory.
108- -> m (Path Abs Dir )
113+ ( HasEnvConfig env , MonadReader env m , MonadThrow m )
114+ => Path Abs Dir -- ^ Package directory.
115+ -> m (Path Abs Dir )
109116hpcDirFromDir fp =
110117 fmap (fp </> ) hpcRelativeDir
111118
112119-- | Relative location of directory for HPC work.
113- hpcRelativeDir :: (MonadThrow m , MonadReader env m , HasEnvConfig env )
114- => m (Path Rel Dir )
120+ hpcRelativeDir ::
121+ (HasEnvConfig env , MonadReader env m , MonadThrow m )
122+ => m (Path Rel Dir )
115123hpcRelativeDir =
116124 fmap (</> relDirHpc) distRelativeDir
117125
118- -- | Package's setup-config storing Cabal configuration
119- setupConfigFromDir :: (MonadThrow m , MonadReader env m , HasEnvConfig env )
120- => Path Abs Dir
121- -> m (Path Abs File )
126+ -- | Package's setup-config storing Cabal configuration.
127+ setupConfigFromDir ::
128+ (HasEnvConfig env , MonadReader env m , MonadThrow m )
129+ => Path Abs Dir
130+ -> m (Path Abs File )
122131setupConfigFromDir fp = do
123- dist <- distDirFromDir fp
124- pure $ dist </> $ (mkRelFile " setup-config" )
132+ dist <- distDirFromDir fp
133+ pure $ dist </> $ (mkRelFile " setup-config" )
125134
126135-- | Package's build artifacts directory.
127- distDirFromDir :: (MonadThrow m , MonadReader env m , HasEnvConfig env )
128- => Path Abs Dir
129- -> m (Path Abs Dir )
136+ distDirFromDir ::
137+ (HasEnvConfig env , MonadReader env m , MonadThrow m )
138+ => Path Abs Dir
139+ -> m (Path Abs Dir )
130140distDirFromDir fp =
131141 fmap (fp </> ) distRelativeDir
132142
133143-- | The directory containing all dist directories, including all
134- -- different GHC/Cabal combos .
144+ -- different platform/compiler combinations .
135145rootDistDirFromDir ::
136- (MonadReader env m , HasConfig env )
146+ (HasConfig env , MonadReader env m )
137147 => Path Abs Dir
138148 -> m (Path Abs Dir )
139149rootDistDirFromDir fp =
140150 fmap (fp </> ) rootDistRelativeDir
141151
142152-- | Relative directory to the top dist directory, containing
143- -- individual GHC/Cabal combo as subdirs.
153+ -- individual platform/compiler combinations as subdirs.
144154rootDistRelativeDir ::
145- (MonadReader env m , HasConfig env )
155+ (HasConfig env , MonadReader env m )
146156 => m (Path Rel Dir )
147157rootDistRelativeDir = do
148- workDir <- view workDirL
149- pure $ workDir </> relDirDist
158+ workDir <- view workDirL
159+ pure $ workDir </> relDirDist
150160
151161-- | Package's working directory.
152- workDirFromDir :: (MonadReader env m , HasConfig env )
153- => Path Abs Dir
154- -> m (Path Abs Dir )
162+ workDirFromDir ::
163+ (HasConfig env , MonadReader env m )
164+ => Path Abs Dir
165+ -> m (Path Abs Dir )
155166workDirFromDir fp = view $ workDirL. to (fp </> )
156167
157168-- | Directory for project templates.
158169templatesDir :: Config -> Path Abs Dir
159170templatesDir config = view stackRootL config </> $ (mkRelDir " templates" )
160171
161172-- | Relative location of build artifacts.
162- distRelativeDir :: (MonadThrow m , MonadReader env m , HasEnvConfig env )
163- => m (Path Rel Dir )
173+ distRelativeDir ::
174+ (HasEnvConfig env , MonadReader env m , MonadThrow m )
175+ => m (Path Rel Dir )
164176distRelativeDir = do
165- compilerVer <- view compilerVersionL
166- platform <- platformGhcRelDir
167- -- Cabal version
168- envDir <-
169- parseRelDir $ compilerVersionString compilerVer
170- platformAndCabal <- useShaPathOnWindows (platform </> envDir )
171- allDist <- rootDistRelativeDir
172- pure $ allDist </> platformAndCabal
177+ compilerVer <- view compilerVersionL
178+ platform <- platformGhcRelDir
179+ -- Compiler version: allows build artefacts to be distinguished by compiler
180+ -- version, which will also distinguish one Cabal version from another.
181+ compilerDir <- parseRelDir $ compilerVersionString compilerVer
182+ platformAndCompiler <- useShaPathOnWindows (platform </> compilerDir )
183+ allDist <- rootDistRelativeDir
184+ pure $ allDist </> platformAndCompiler
173185
174186-- | Docker sandbox from project root.
175- projectDockerSandboxDir :: (MonadReader env m , HasConfig env )
187+ projectDockerSandboxDir :: (HasConfig env , MonadReader env m )
176188 => Path Abs Dir -- ^ Project root
177189 -> m (Path Abs Dir ) -- ^ Docker sandbox
178190projectDockerSandboxDir projectRoot = do
179191 workDir <- view workDirL
180192 pure $ projectRoot </> workDir </> $ (mkRelDir " docker/" )
181193
182194-- | Image staging dir from project root.
183- imageStagingDir :: (MonadReader env m , HasConfig env , MonadThrow m )
195+ imageStagingDir ::
196+ (HasConfig env , MonadReader env m , MonadThrow m )
184197 => Path Abs Dir -- ^ Project root
185198 -> Int -- ^ Index of image
186199 -> m (Path Abs Dir ) -- ^ Docker sandbox
0 commit comments