@@ -28,7 +28,7 @@ import Development.Shake
28
28
( Action , Change (.. ), pattern Chatty , CmdOption (.. ), Rules
29
29
, ShakeOptions (.. ), Stdout (.. ), (%>) , actionOnException
30
30
, alwaysRerun , cmd , command_ , copyFileChanged
31
- , getDirectoryFiles , liftIO , need , phony , putNormal
31
+ , getDirectoryFiles , liftIO , need , phony , putInfo
32
32
, removeFilesAfter , shakeArgsWith , shakeOptions , want
33
33
)
34
34
import Development.Shake.FilePath
@@ -72,10 +72,12 @@ main = shakeArgsWith
72
72
let gAllowDirty = False
73
73
Platform arch _ = buildPlatform
74
74
gArch = arch
75
+ gTargetOS = platformOS
75
76
gBinarySuffix = " "
76
77
gTestHaddocks = True
77
78
gProjectRoot = " " -- Set to real value below.
78
79
gBuildArgs = [" --flag" , " stack:-developer-mode" ]
80
+ gStackArgs = []
79
81
gCertificateName = Nothing
80
82
global0 = foldl
81
83
(flip id )
@@ -87,9 +89,11 @@ main = shakeArgsWith
87
89
, gProjectRoot
88
90
, gHomeDir
89
91
, gArch
92
+ , gTargetOS
90
93
, gBinarySuffix
91
94
, gTestHaddocks
92
95
, gBuildArgs
96
+ , gStackArgs
93
97
, gCertificateName
94
98
}
95
99
flags
@@ -131,13 +135,23 @@ options =
131
135
g { gBuildArgs =
132
136
gBuildArgs g
133
137
++ [ " --flag=stack:static"
134
- , " --docker"
138
+ ]
139
+ , gStackArgs =
140
+ gStackArgs g
141
+ ++ [ " --docker"
135
142
, " --system-ghc"
136
143
, " --no-install-ghc"
137
144
]
145
+ , gTargetOS = Linux
138
146
}
139
147
)
140
- " Build a statically linked binary using an Alpine Docker image."
148
+ " Build a statically-linked binary using an Alpine Linux Docker image."
149
+ , Option " " [stackArgsOptName]
150
+ ( ReqArg
151
+ (\ v -> Right $ \ g -> g{gStackArgs = gStackArgs g ++ words v})
152
+ " \" ARG1 ARG2 ...\" "
153
+ )
154
+ " Additional arguments to pass to 'stack'."
141
155
, Option " " [buildArgsOptName]
142
156
( ReqArg
143
157
(\ v -> Right $ \ g -> g{gBuildArgs = gBuildArgs g ++ words v})
@@ -180,9 +194,13 @@ rules global args = do
180
194
, show dirty
181
195
]
182
196
() <- cmd
197
+ stackProgName
198
+ global. gStackArgs
199
+ [" exec" ]
183
200
[ global. gProjectRoot </> releaseBinDir </> binaryName </>
184
201
stackExeFileName
185
202
]
203
+ [" --" ]
186
204
(stackArgs global)
187
205
[" build" ]
188
206
global. gBuildArgs
@@ -191,9 +209,8 @@ rules global args = do
191
209
[" --haddock" | global. gTestHaddocks]
192
210
[" stack" ]
193
211
() <- cmd
194
- [ global. gProjectRoot </> releaseBinDir </> binaryName </>
195
- stackExeFileName
196
- ]
212
+ stackProgName
213
+ global. gStackArgs
197
214
[" exec" ]
198
215
[ global. gProjectRoot </> releaseBinDir </> binaryName </>
199
216
" stack-integration-test"
@@ -202,7 +219,7 @@ rules global args = do
202
219
203
220
releaseDir </> binaryPkgZipFileName %> \ out -> do
204
221
stageFiles <- getBinaryPkgStageFiles
205
- putNormal $ " zip " ++ out
222
+ putInfo $ " zip " ++ out
206
223
liftIO $ do
207
224
entries <- forM stageFiles $ \ stageFile -> do
208
225
Zip. readEntry
@@ -234,7 +251,13 @@ rules global args = do
234
251
releaseDir </> binaryExeFileName %> \ out -> do
235
252
need [releaseBinDir </> binaryName </> stackExeFileName]
236
253
(Stdout versionOut) <-
237
- cmd (releaseBinDir </> binaryName </> stackExeFileName) " --version"
254
+ cmd
255
+ stackProgName
256
+ global. gStackArgs
257
+ [" exec" ]
258
+ (releaseBinDir </> binaryName </> stackExeFileName)
259
+ [" --" ]
260
+ [" --version" ]
238
261
when (not global. gAllowDirty && " dirty" `isInfixOf` lower versionOut) $
239
262
error
240
263
( " Refusing continue because 'stack --version' reports dirty. Use --"
@@ -298,6 +321,7 @@ rules global args = do
298
321
( cmd stackProgName
299
322
(stackArgs global)
300
323
[" --local-bin-path=" ++ takeDirectory out]
324
+ global. gStackArgs
301
325
" install"
302
326
global. gBuildArgs
303
327
integrationTestFlagArgs
@@ -336,7 +360,7 @@ rules global args = do
336
360
releaseBinDir = releaseDir </> " bin"
337
361
338
362
binaryPkgFileNames =
339
- case platformOS of
363
+ case global . gTargetOS of
340
364
Windows ->
341
365
[ binaryExeFileName
342
366
, binaryPkgZipFileName
@@ -357,7 +381,7 @@ rules global args = do
357
381
, " -"
358
382
, stackVersionStr global
359
383
, " -"
360
- , display platformOS
384
+ , display global . gTargetOS
361
385
, " -"
362
386
, display global. gArch
363
387
, if null global. gBinarySuffix then " " else " -" ++ global. gBinarySuffix
@@ -438,6 +462,10 @@ binaryVariantOptName = "binary-variant"
438
462
noTestHaddocksOptName :: String
439
463
noTestHaddocksOptName = " no-test-haddocks"
440
464
465
+ -- | @--stack-args@ command-line option name.
466
+ stackArgsOptName :: String
467
+ stackArgsOptName = " stack-args"
468
+
441
469
-- | @--build-args@ command-line option name.
442
470
buildArgsOptName :: String
443
471
buildArgsOptName = " build-args"
@@ -469,9 +497,11 @@ data Global = Global
469
497
, gProjectRoot :: ! FilePath
470
498
, gHomeDir :: ! FilePath
471
499
, gArch :: ! Arch
500
+ , gTargetOS :: ! OS
472
501
, gBinarySuffix :: ! String
473
502
, gTestHaddocks :: ! Bool
474
503
, gBuildArgs :: [String ]
504
+ , gStackArgs :: [String ]
475
505
, gCertificateName :: ! (Maybe String )
476
506
}
477
507
deriving Show
0 commit comments