module Stack.Types.Config.Build
(
BuildOpts(..)
, BuildCommand(..)
, defaultBuildOpts
, defaultBuildOptsCLI
, BuildOptsCLI(..)
, BuildOptsMonoid(..)
, TestOpts(..)
, defaultTestOpts
, TestOptsMonoid(..)
, HaddockOpts(..)
, defaultHaddockOpts
, HaddockOptsMonoid(..)
, BenchmarkOpts(..)
, defaultBenchmarkOpts
, BenchmarkOptsMonoid(..)
, FileWatchOpts(..)
, BuildSubset(..)
)
where
import Control.Applicative
import Data.Aeson.Extended
import Data.Map.Strict (Map)
import qualified Data.Map.Strict as Map
import Data.Monoid
import Data.Text (Text)
import GHC.Generics (Generic)
import Generics.Deriving.Monoid (memptydefault, mappenddefault)
import Prelude
import Stack.Types.FlagName
import Stack.Types.PackageName
data BuildOpts =
BuildOpts {boptsLibProfile :: !Bool
,boptsExeProfile :: !Bool
,boptsLibStrip :: !Bool
,boptsExeStrip :: !Bool
,boptsHaddock :: !Bool
,boptsHaddockOpts :: !HaddockOpts
,boptsOpenHaddocks :: !Bool
,boptsHaddockDeps :: !(Maybe Bool)
,boptsHaddockInternal :: !Bool
,boptsHaddockHyperlinkSource :: !Bool
,boptsInstallExes :: !Bool
,boptsPreFetch :: !Bool
,boptsKeepGoing :: !(Maybe Bool)
,boptsForceDirty :: !Bool
,boptsTests :: !Bool
,boptsTestOpts :: !TestOpts
,boptsBenchmarks :: !Bool
,boptsBenchmarkOpts :: !BenchmarkOpts
,boptsReconfigure :: !Bool
,boptsCabalVerbose :: !Bool
,boptsSplitObjs :: !Bool
}
deriving (Show)
defaultBuildOpts :: BuildOpts
defaultBuildOpts = BuildOpts
{ boptsLibProfile = False
, boptsExeProfile = False
, boptsLibStrip = True
, boptsExeStrip = True
, boptsHaddock = False
, boptsHaddockOpts = defaultHaddockOpts
, boptsOpenHaddocks = False
, boptsHaddockDeps = Nothing
, boptsHaddockInternal = False
, boptsHaddockHyperlinkSource = True
, boptsInstallExes = False
, boptsPreFetch = False
, boptsKeepGoing = Nothing
, boptsForceDirty = False
, boptsTests = False
, boptsTestOpts = defaultTestOpts
, boptsBenchmarks = False
, boptsBenchmarkOpts = defaultBenchmarkOpts
, boptsReconfigure = False
, boptsCabalVerbose = False
, boptsSplitObjs = False
}
defaultBuildOptsCLI ::BuildOptsCLI
defaultBuildOptsCLI = BuildOptsCLI
{ boptsCLITargets = []
, boptsCLIDryrun = False
, boptsCLIFlags = Map.empty
, boptsCLIGhcOptions = []
, boptsCLIBuildSubset = BSAll
, boptsCLIFileWatch = NoFileWatch
, boptsCLIExec = []
, boptsCLIOnlyConfigure = False
, boptsCLICommand = Build
, boptsCLIInitialBuildSteps = False
}
data BuildOptsCLI = BuildOptsCLI
{ boptsCLITargets :: ![Text]
, boptsCLIDryrun :: !Bool
, boptsCLIGhcOptions :: ![Text]
, boptsCLIFlags :: !(Map (Maybe PackageName) (Map FlagName Bool))
, boptsCLIBuildSubset :: !BuildSubset
, boptsCLIFileWatch :: !FileWatchOpts
, boptsCLIExec :: ![(String, [String])]
, boptsCLIOnlyConfigure :: !Bool
, boptsCLICommand :: !BuildCommand
, boptsCLIInitialBuildSteps :: !Bool
} deriving Show
data BuildCommand
= Build
| Test
| Haddock
| Bench
| Install
deriving (Eq, Show)
data BuildOptsMonoid = BuildOptsMonoid
{ buildMonoidTrace :: !Any
, buildMonoidProfile :: !Any
, buildMonoidNoStrip :: !Any
, buildMonoidLibProfile :: !(First Bool)
, buildMonoidExeProfile :: !(First Bool)
, buildMonoidLibStrip :: !(First Bool)
, buildMonoidExeStrip :: !(First Bool)
, buildMonoidHaddock :: !(First Bool)
, buildMonoidHaddockOpts :: !HaddockOptsMonoid
, buildMonoidOpenHaddocks :: !(First Bool)
, buildMonoidHaddockDeps :: !(First Bool)
, buildMonoidHaddockInternal :: !(First Bool)
, buildMonoidHaddockHyperlinkSource :: !(First Bool)
, buildMonoidInstallExes :: !(First Bool)
, buildMonoidPreFetch :: !(First Bool)
, buildMonoidKeepGoing :: !(First Bool)
, buildMonoidForceDirty :: !(First Bool)
, buildMonoidTests :: !(First Bool)
, buildMonoidTestOpts :: !TestOptsMonoid
, buildMonoidBenchmarks :: !(First Bool)
, buildMonoidBenchmarkOpts :: !BenchmarkOptsMonoid
, buildMonoidReconfigure :: !(First Bool)
, buildMonoidCabalVerbose :: !(First Bool)
, buildMonoidSplitObjs :: !(First Bool)
} deriving (Show, Generic)
instance FromJSON (WithJSONWarnings BuildOptsMonoid) where
parseJSON = withObjectWarnings "BuildOptsMonoid"
(\o -> do let buildMonoidTrace = Any False
buildMonoidProfile = Any False
buildMonoidNoStrip = Any False
buildMonoidLibProfile <- First <$> o ..:? buildMonoidLibProfileArgName
buildMonoidExeProfile <-First <$> o ..:? buildMonoidExeProfileArgName
buildMonoidLibStrip <- First <$> o ..:? buildMonoidLibStripArgName
buildMonoidExeStrip <-First <$> o ..:? buildMonoidExeStripArgName
buildMonoidHaddock <- First <$> o ..:? buildMonoidHaddockArgName
buildMonoidHaddockOpts <- jsonSubWarnings (o ..:? buildMonoidHaddockOptsArgName ..!= mempty)
buildMonoidOpenHaddocks <- First <$> o ..:? buildMonoidOpenHaddocksArgName
buildMonoidHaddockDeps <- First <$> o ..:? buildMonoidHaddockDepsArgName
buildMonoidHaddockInternal <- First <$> o ..:? buildMonoidHaddockInternalArgName
buildMonoidHaddockHyperlinkSource <- First <$> o ..:? buildMonoidHaddockHyperlinkSourceArgName
buildMonoidInstallExes <- First <$> o ..:? buildMonoidInstallExesArgName
buildMonoidPreFetch <- First <$> o ..:? buildMonoidPreFetchArgName
buildMonoidKeepGoing <- First <$> o ..:? buildMonoidKeepGoingArgName
buildMonoidForceDirty <- First <$> o ..:? buildMonoidForceDirtyArgName
buildMonoidTests <- First <$> o ..:? buildMonoidTestsArgName
buildMonoidTestOpts <- jsonSubWarnings (o ..:? buildMonoidTestOptsArgName ..!= mempty)
buildMonoidBenchmarks <- First <$> o ..:? buildMonoidBenchmarksArgName
buildMonoidBenchmarkOpts <- jsonSubWarnings (o ..:? buildMonoidBenchmarkOptsArgName ..!= mempty)
buildMonoidReconfigure <- First <$> o ..:? buildMonoidReconfigureArgName
buildMonoidCabalVerbose <- First <$> o ..:? buildMonoidCabalVerboseArgName
buildMonoidSplitObjs <- First <$> o ..:? buildMonoidSplitObjsName
return BuildOptsMonoid{..})
buildMonoidLibProfileArgName :: Text
buildMonoidLibProfileArgName = "library-profiling"
buildMonoidExeProfileArgName :: Text
buildMonoidExeProfileArgName = "executable-profiling"
buildMonoidLibStripArgName :: Text
buildMonoidLibStripArgName = "library-stripping"
buildMonoidExeStripArgName :: Text
buildMonoidExeStripArgName = "executable-stripping"
buildMonoidHaddockArgName :: Text
buildMonoidHaddockArgName = "haddock"
buildMonoidHaddockOptsArgName :: Text
buildMonoidHaddockOptsArgName = "haddock-arguments"
buildMonoidOpenHaddocksArgName :: Text
buildMonoidOpenHaddocksArgName = "open-haddocks"
buildMonoidHaddockDepsArgName :: Text
buildMonoidHaddockDepsArgName = "haddock-deps"
buildMonoidHaddockInternalArgName :: Text
buildMonoidHaddockInternalArgName = "haddock-internal"
buildMonoidHaddockHyperlinkSourceArgName :: Text
buildMonoidHaddockHyperlinkSourceArgName = "haddock-hyperlink-source"
buildMonoidInstallExesArgName :: Text
buildMonoidInstallExesArgName = "copy-bins"
buildMonoidPreFetchArgName :: Text
buildMonoidPreFetchArgName = "prefetch"
buildMonoidKeepGoingArgName :: Text
buildMonoidKeepGoingArgName = "keep-going"
buildMonoidForceDirtyArgName :: Text
buildMonoidForceDirtyArgName = "force-dirty"
buildMonoidTestsArgName :: Text
buildMonoidTestsArgName = "test"
buildMonoidTestOptsArgName :: Text
buildMonoidTestOptsArgName = "test-arguments"
buildMonoidBenchmarksArgName :: Text
buildMonoidBenchmarksArgName = "bench"
buildMonoidBenchmarkOptsArgName :: Text
buildMonoidBenchmarkOptsArgName = "benchmark-opts"
buildMonoidReconfigureArgName :: Text
buildMonoidReconfigureArgName = "reconfigure"
buildMonoidCabalVerboseArgName :: Text
buildMonoidCabalVerboseArgName = "cabal-verbose"
buildMonoidSplitObjsName :: Text
buildMonoidSplitObjsName = "split-objs"
instance Monoid BuildOptsMonoid where
mempty = memptydefault
mappend = mappenddefault
data BuildSubset
= BSAll
| BSOnlySnapshot
| BSOnlyDependencies
deriving (Show, Eq)
data TestOpts =
TestOpts {toRerunTests :: !Bool
,toAdditionalArgs :: ![String]
,toCoverage :: !Bool
,toDisableRun :: !Bool
} deriving (Eq,Show)
defaultTestOpts :: TestOpts
defaultTestOpts = TestOpts
{ toRerunTests = True
, toAdditionalArgs = []
, toCoverage = False
, toDisableRun = False
}
data TestOptsMonoid =
TestOptsMonoid
{ toMonoidRerunTests :: !(First Bool)
, toMonoidAdditionalArgs :: ![String]
, toMonoidCoverage :: !(First Bool)
, toMonoidDisableRun :: !(First Bool)
} deriving (Show, Generic)
instance FromJSON (WithJSONWarnings TestOptsMonoid) where
parseJSON = withObjectWarnings "TestOptsMonoid"
(\o -> do toMonoidRerunTests <- First <$> o ..:? toMonoidRerunTestsArgName
toMonoidAdditionalArgs <- o ..:? toMonoidAdditionalArgsName ..!= []
toMonoidCoverage <- First <$> o ..:? toMonoidCoverageArgName
toMonoidDisableRun <- First <$> o ..:? toMonoidDisableRunArgName
return TestOptsMonoid{..})
toMonoidRerunTestsArgName :: Text
toMonoidRerunTestsArgName = "rerun-tests"
toMonoidAdditionalArgsName :: Text
toMonoidAdditionalArgsName = "additional-args"
toMonoidCoverageArgName :: Text
toMonoidCoverageArgName = "coverage"
toMonoidDisableRunArgName :: Text
toMonoidDisableRunArgName = "no-run-tests"
instance Monoid TestOptsMonoid where
mempty = memptydefault
mappend = mappenddefault
newtype HaddockOpts =
HaddockOpts { hoAdditionalArgs :: [String]
} deriving (Eq,Show)
newtype HaddockOptsMonoid =
HaddockOptsMonoid {hoMonoidAdditionalArgs :: [String]
} deriving (Show, Generic)
defaultHaddockOpts :: HaddockOpts
defaultHaddockOpts = HaddockOpts {hoAdditionalArgs = []}
instance FromJSON (WithJSONWarnings HaddockOptsMonoid) where
parseJSON = withObjectWarnings "HaddockOptsMonoid"
(\o -> do hoMonoidAdditionalArgs <- o ..:? hoMonoidAdditionalArgsName ..!= []
return HaddockOptsMonoid{..})
instance Monoid HaddockOptsMonoid where
mempty = memptydefault
mappend = mappenddefault
hoMonoidAdditionalArgsName :: Text
hoMonoidAdditionalArgsName = "haddock-args"
data BenchmarkOpts =
BenchmarkOpts
{ beoAdditionalArgs :: !(Maybe String)
, beoDisableRun :: !Bool
} deriving (Eq,Show)
defaultBenchmarkOpts :: BenchmarkOpts
defaultBenchmarkOpts = BenchmarkOpts
{ beoAdditionalArgs = Nothing
, beoDisableRun = False
}
data BenchmarkOptsMonoid =
BenchmarkOptsMonoid
{ beoMonoidAdditionalArgs :: !(First String)
, beoMonoidDisableRun :: !(First Bool)
} deriving (Show, Generic)
instance FromJSON (WithJSONWarnings BenchmarkOptsMonoid) where
parseJSON = withObjectWarnings "BenchmarkOptsMonoid"
(\o -> do beoMonoidAdditionalArgs <- First <$> o ..:? beoMonoidAdditionalArgsArgName
beoMonoidDisableRun <- First <$> o ..:? beoMonoidDisableRunArgName
return BenchmarkOptsMonoid{..})
beoMonoidAdditionalArgsArgName :: Text
beoMonoidAdditionalArgsArgName = "benchmark-arguments"
beoMonoidDisableRunArgName :: Text
beoMonoidDisableRunArgName = "no-run-benchmarks"
instance Monoid BenchmarkOptsMonoid where
mempty = memptydefault
mappend = mappenddefault
data FileWatchOpts
= NoFileWatch
| FileWatch
| FileWatchPoll
deriving (Show,Eq)