1{-# LANGUAGE NoImplicitPrelude #-} 2{-# LANGUAGE RecordWildCards #-} 3 4-- | Build configuration 5module Stack.Config.Build where 6 7import Stack.Prelude 8import Stack.Types.Config 9 10-- | Interprets BuildOptsMonoid options. 11buildOptsFromMonoid :: BuildOptsMonoid -> BuildOpts 12buildOptsFromMonoid BuildOptsMonoid{..} = BuildOpts 13 { boptsLibProfile = fromFirstFalse 14 (buildMonoidLibProfile <> 15 FirstFalse (if tracing || profiling then Just True else Nothing)) 16 , boptsExeProfile = fromFirstFalse 17 (buildMonoidExeProfile <> 18 FirstFalse (if tracing || profiling then Just True else Nothing)) 19 , boptsLibStrip = fromFirstTrue 20 (buildMonoidLibStrip <> 21 FirstTrue (if noStripping then Just False else Nothing)) 22 , boptsExeStrip = fromFirstTrue 23 (buildMonoidExeStrip <> 24 FirstTrue (if noStripping then Just False else Nothing)) 25 , boptsHaddock = fromFirstFalse buildMonoidHaddock 26 , boptsHaddockOpts = haddockOptsFromMonoid buildMonoidHaddockOpts 27 , boptsOpenHaddocks = fromFirstFalse buildMonoidOpenHaddocks 28 , boptsHaddockDeps = getFirst buildMonoidHaddockDeps 29 , boptsHaddockInternal = fromFirstFalse buildMonoidHaddockInternal 30 , boptsHaddockHyperlinkSource = fromFirstTrue buildMonoidHaddockHyperlinkSource 31 , boptsInstallExes = fromFirstFalse buildMonoidInstallExes 32 , boptsInstallCompilerTool = fromFirstFalse buildMonoidInstallCompilerTool 33 , boptsPreFetch = fromFirstFalse buildMonoidPreFetch 34 , boptsKeepGoing = getFirst buildMonoidKeepGoing 35 , boptsKeepTmpFiles = fromFirstFalse buildMonoidKeepTmpFiles 36 , boptsForceDirty = fromFirstFalse buildMonoidForceDirty 37 , boptsTests = fromFirstFalse buildMonoidTests 38 , boptsTestOpts = 39 testOptsFromMonoid buildMonoidTestOpts additionalArgs 40 , boptsBenchmarks = fromFirstFalse buildMonoidBenchmarks 41 , boptsBenchmarkOpts = 42 benchmarkOptsFromMonoid buildMonoidBenchmarkOpts additionalArgs 43 , boptsReconfigure = fromFirstFalse buildMonoidReconfigure 44 , boptsCabalVerbose = fromFirstFalse buildMonoidCabalVerbose 45 , boptsSplitObjs = fromFirstFalse buildMonoidSplitObjs 46 , boptsSkipComponents = buildMonoidSkipComponents 47 , boptsInterleavedOutput = fromFirstTrue buildMonoidInterleavedOutput 48 , boptsDdumpDir = getFirst buildMonoidDdumpDir 49 } 50 where 51 -- These options are not directly used in bopts, instead they 52 -- transform other options. 53 tracing = getAny buildMonoidTrace 54 profiling = getAny buildMonoidProfile 55 noStripping = getAny buildMonoidNoStrip 56 -- Additional args for tracing / profiling 57 additionalArgs = 58 if tracing || profiling 59 then Just $ "+RTS" : catMaybes [trac, prof, Just "-RTS"] 60 else Nothing 61 trac = 62 if tracing 63 then Just "-xc" 64 else Nothing 65 prof = 66 if profiling 67 then Just "-p" 68 else Nothing 69 70haddockOptsFromMonoid :: HaddockOptsMonoid -> HaddockOpts 71haddockOptsFromMonoid HaddockOptsMonoid{..} = 72 defaultHaddockOpts 73 {hoAdditionalArgs = hoMonoidAdditionalArgs} 74 75testOptsFromMonoid :: TestOptsMonoid -> Maybe [String] -> TestOpts 76testOptsFromMonoid TestOptsMonoid{..} madditional = 77 defaultTestOpts 78 { toRerunTests = fromFirstTrue toMonoidRerunTests 79 , toAdditionalArgs = fromMaybe [] madditional <> toMonoidAdditionalArgs 80 , toCoverage = fromFirstFalse toMonoidCoverage 81 , toDisableRun = fromFirstFalse toMonoidDisableRun 82 , toMaximumTimeSeconds = fromFirst (toMaximumTimeSeconds defaultTestOpts) toMonoidMaximumTimeSeconds 83 } 84 85benchmarkOptsFromMonoid :: BenchmarkOptsMonoid -> Maybe [String] -> BenchmarkOpts 86benchmarkOptsFromMonoid BenchmarkOptsMonoid{..} madditional = 87 defaultBenchmarkOpts 88 { beoAdditionalArgs = 89 fmap (\args -> unwords args <> " ") madditional <> 90 getFirst beoMonoidAdditionalArgs 91 , beoDisableRun = fromFirst 92 (beoDisableRun defaultBenchmarkOpts) 93 beoMonoidDisableRun 94 } 95