3
3
{-# LANGUAGE TemplateHaskell #-}
4
4
5
5
module Stack.Constants.Config
6
- ( distDirFromDir
7
- , rootDistDirFromDir
8
- , setupConfigFromDir
9
- , workDirFromDir
10
- , distRelativeDir
11
- , imageStagingDir
12
- , projectDockerSandboxDir
6
+ ( buildCachesDir
13
7
, configCabalMod
14
- , configSetupConfigMod
15
8
, configPackageProjectRoot
16
- , buildCachesDir
17
- , testSuccessFile
18
- , testBuiltFile
19
- , hpcRelativeDir
9
+ , configSetupConfigMod
10
+ , distDirFromDir
11
+ , distRelativeDir
12
+ , ghciDirL
20
13
, hpcDirFromDir
14
+ , hpcRelativeDir
15
+ , imageStagingDir
21
16
, objectInterfaceDirL
22
- , ghciDirL
17
+ , projectDockerSandboxDir
18
+ , rootDistDirFromDir
19
+ , setupConfigFromDir
23
20
, templatesDir
21
+ , testBuiltFile
22
+ , testSuccessFile
23
+ , workDirFromDir
24
24
) where
25
25
26
26
import Path ( (</>) , mkRelDir , mkRelFile , parseRelDir )
@@ -47,140 +47,153 @@ ghciDirL = to $ \env -> -- FIXME is this idiomatic lens code?
47
47
root = view projectRootL env
48
48
in root </> workDir </> relDirGhci
49
49
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 )
54
56
buildCachesDir dir =
55
57
fmap
56
58
(</> $ (mkRelDir " stack-build-caches" ))
57
59
(distDirFromDir dir)
58
60
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 )
63
66
testSuccessFile dir =
64
67
fmap
65
68
(</> $ (mkRelFile " stack-test-success" ))
66
69
(distDirFromDir dir)
67
70
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 )
72
76
testBuiltFile dir =
73
77
fmap
74
78
(</> $ (mkRelFile " stack-test-built" ))
75
79
(distDirFromDir dir)
76
80
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 )
81
86
configCabalMod dir =
82
87
fmap
83
88
(</> $ (mkRelFile " stack-cabal-mod" ))
84
89
(distDirFromDir dir)
85
90
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 )
90
96
configSetupConfigMod dir =
91
97
fmap
92
98
(</> $ (mkRelFile " stack-setup-config-mod" ))
93
99
(distDirFromDir dir)
94
100
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 )
99
106
configPackageProjectRoot dir =
100
107
fmap
101
108
(</> $ (mkRelFile " stack-project-root" ))
102
109
(distDirFromDir dir)
103
110
104
111
-- | Directory for HPC work.
105
112
hpcDirFromDir ::
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 )
109
116
hpcDirFromDir fp =
110
117
fmap (fp </> ) hpcRelativeDir
111
118
112
119
-- | 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 )
115
123
hpcRelativeDir =
116
124
fmap (</> relDirHpc) distRelativeDir
117
125
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 )
122
131
setupConfigFromDir fp = do
123
- dist <- distDirFromDir fp
124
- pure $ dist </> $ (mkRelFile " setup-config" )
132
+ dist <- distDirFromDir fp
133
+ pure $ dist </> $ (mkRelFile " setup-config" )
125
134
126
135
-- | 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 )
130
140
distDirFromDir fp =
131
141
fmap (fp </> ) distRelativeDir
132
142
133
143
-- | The directory containing all dist directories, including all
134
- -- different GHC/Cabal combos .
144
+ -- different platform/compiler combinations .
135
145
rootDistDirFromDir ::
136
- (MonadReader env m , HasConfig env )
146
+ (HasConfig env , MonadReader env m )
137
147
=> Path Abs Dir
138
148
-> m (Path Abs Dir )
139
149
rootDistDirFromDir fp =
140
150
fmap (fp </> ) rootDistRelativeDir
141
151
142
152
-- | Relative directory to the top dist directory, containing
143
- -- individual GHC/Cabal combo as subdirs.
153
+ -- individual platform/compiler combinations as subdirs.
144
154
rootDistRelativeDir ::
145
- (MonadReader env m , HasConfig env )
155
+ (HasConfig env , MonadReader env m )
146
156
=> m (Path Rel Dir )
147
157
rootDistRelativeDir = do
148
- workDir <- view workDirL
149
- pure $ workDir </> relDirDist
158
+ workDir <- view workDirL
159
+ pure $ workDir </> relDirDist
150
160
151
161
-- | 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 )
155
166
workDirFromDir fp = view $ workDirL. to (fp </> )
156
167
157
168
-- | Directory for project templates.
158
169
templatesDir :: Config -> Path Abs Dir
159
170
templatesDir config = view stackRootL config </> $ (mkRelDir " templates" )
160
171
161
172
-- | 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 )
164
176
distRelativeDir = 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
173
185
174
186
-- | Docker sandbox from project root.
175
- projectDockerSandboxDir :: (MonadReader env m , HasConfig env )
187
+ projectDockerSandboxDir :: (HasConfig env , MonadReader env m )
176
188
=> Path Abs Dir -- ^ Project root
177
189
-> m (Path Abs Dir ) -- ^ Docker sandbox
178
190
projectDockerSandboxDir projectRoot = do
179
191
workDir <- view workDirL
180
192
pure $ projectRoot </> workDir </> $ (mkRelDir " docker/" )
181
193
182
194
-- | 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 )
184
197
=> Path Abs Dir -- ^ Project root
185
198
-> Int -- ^ Index of image
186
199
-> m (Path Abs Dir ) -- ^ Docker sandbox
0 commit comments