{-# LANGUAGE MultiWayIf #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
module HaskellCI.Auxiliary (
Auxiliary (..),
auxiliary,
pkgNameDirVariable',
pkgNameDirVariable,
) where
import HaskellCI.Prelude
import qualified Data.Set as S
import qualified Distribution.CabalSpecVersion as C
import qualified Distribution.FieldGrammar.Pretty as C
import qualified Distribution.Fields.Pretty as C
import qualified Distribution.Pretty as C
import qualified Distribution.Types.GenericPackageDescription as C
import qualified Distribution.Types.VersionRange as C
import qualified Network.URI as URI
import qualified Text.PrettyPrint as PP
import Cabal.Optimization
import Cabal.Project
import Cabal.SourceRepo
import HaskellCI.Compiler
import HaskellCI.Config
import HaskellCI.Config.Components
import HaskellCI.Config.CopyFields
import HaskellCI.Config.Docspec
import HaskellCI.Config.Doctest
import HaskellCI.Jobs
import HaskellCI.List
import HaskellCI.Package
data Auxiliary = Auxiliary
{ Auxiliary -> [Package]
pkgs :: [Package]
, Auxiliary -> [URI]
uris :: [URI]
, Auxiliary -> [Char]
projectName :: String
, Auxiliary -> Bool
doctestEnabled :: Bool
, Auxiliary -> Bool
docspecEnabled :: Bool
, Auxiliary -> CompilerRange
hasTests :: CompilerRange
, Auxiliary -> Bool
hasLibrary :: Bool
, :: FilePath -> [C.PrettyField ()]
, Auxiliary -> [Char]
testShowDetails :: String
, Auxiliary -> Bool
anyJobUsesHeadHackage :: Bool
, Auxiliary -> Bool
anyJobUsesPreviewGHC :: Bool
, Auxiliary -> Bool
runHaddock :: Bool
, Auxiliary -> [Char]
haddockFlags :: String
}
auxiliary :: Config -> Project URI Void Package -> JobVersions -> Auxiliary
auxiliary :: Config -> Project URI Void Package -> JobVersions -> Auxiliary
auxiliary Config {Bool
Natural
[Char]
[[Char]]
[PrettyField ()]
[PackageName]
[Installed]
[ConstraintSet]
Maybe [Char]
Maybe Version
Maybe Jobs
Set [Char]
Set Fold
Map Version [Char]
Version
VersionRange
Ubuntu
PackageScope
HLintConfig
DoctestConfig
DocspecConfig
CopyFields
Components
TestedWithJobs
cfgCabalInstallVersion :: Maybe Version
cfgJobs :: Maybe Jobs
cfgUbuntu :: Ubuntu
cfgTestedWith :: TestedWithJobs
cfgEnabledJobs :: VersionRange
cfgCopyFields :: CopyFields
cfgLocalGhcOptions :: [[Char]]
cfgSubmodules :: Bool
cfgCache :: Bool
cfgInstallDeps :: Bool
cfgInstalled :: [Installed]
cfgTests :: VersionRange
cfgRunTests :: VersionRange
cfgBenchmarks :: VersionRange
cfgHaddock :: VersionRange
cfgHaddockComponents :: Components
cfgNoTestsNoBench :: VersionRange
cfgUnconstrainted :: VersionRange
cfgHeadHackage :: VersionRange
cfgHeadHackageOverride :: Bool
cfgGhcjsTests :: Bool
cfgGhcjsTools :: [PackageName]
cfgTestOutputDirect :: Bool
cfgCheck :: Bool
cfgOnlyBranches :: [[Char]]
cfgIrcChannels :: [[Char]]
cfgIrcNickname :: Maybe [Char]
cfgIrcPassword :: Maybe [Char]
cfgIrcIfInOriginRepo :: Bool
cfgEmailNotifications :: Bool
cfgProjectName :: Maybe [Char]
cfgFolds :: Set Fold
cfgGhcHead :: Bool
cfgPostgres :: Bool
cfgGoogleChrome :: Bool
cfgEnv :: Map Version [Char]
cfgAllowFailures :: VersionRange
cfgLastInSeries :: Bool
cfgLinuxJobs :: VersionRange
cfgMacosJobs :: VersionRange
cfgGhcupCabal :: Bool
cfgGhcupJobs :: VersionRange
cfgGhcupVersion :: Version
cfgApt :: Set [Char]
cfgTravisPatches :: [[Char]]
cfgGitHubPatches :: [[Char]]
cfgInsertVersion :: Bool
cfgErrorMissingMethods :: PackageScope
cfgDoctest :: DoctestConfig
cfgDocspec :: DocspecConfig
cfgHLint :: HLintConfig
cfgConstraintSets :: [ConstraintSet]
cfgRawProject :: [PrettyField ()]
cfgRawTravis :: [Char]
cfgGitHubActionName :: Maybe [Char]
cfgTimeoutMinutes :: Natural
cfgCabalInstallVersion :: Config -> Maybe Version
cfgJobs :: Config -> Maybe Jobs
cfgUbuntu :: Config -> Ubuntu
cfgTestedWith :: Config -> TestedWithJobs
cfgEnabledJobs :: Config -> VersionRange
cfgCopyFields :: Config -> CopyFields
cfgLocalGhcOptions :: Config -> [[Char]]
cfgSubmodules :: Config -> Bool
cfgCache :: Config -> Bool
cfgInstallDeps :: Config -> Bool
cfgInstalled :: Config -> [Installed]
cfgTests :: Config -> VersionRange
cfgRunTests :: Config -> VersionRange
cfgBenchmarks :: Config -> VersionRange
cfgHaddock :: Config -> VersionRange
cfgHaddockComponents :: Config -> Components
cfgNoTestsNoBench :: Config -> VersionRange
cfgUnconstrainted :: Config -> VersionRange
cfgHeadHackage :: Config -> VersionRange
cfgHeadHackageOverride :: Config -> Bool
cfgGhcjsTests :: Config -> Bool
cfgGhcjsTools :: Config -> [PackageName]
cfgTestOutputDirect :: Config -> Bool
cfgCheck :: Config -> Bool
cfgOnlyBranches :: Config -> [[Char]]
cfgIrcChannels :: Config -> [[Char]]
cfgIrcNickname :: Config -> Maybe [Char]
cfgIrcPassword :: Config -> Maybe [Char]
cfgIrcIfInOriginRepo :: Config -> Bool
cfgEmailNotifications :: Config -> Bool
cfgProjectName :: Config -> Maybe [Char]
cfgFolds :: Config -> Set Fold
cfgGhcHead :: Config -> Bool
cfgPostgres :: Config -> Bool
cfgGoogleChrome :: Config -> Bool
cfgEnv :: Config -> Map Version [Char]
cfgAllowFailures :: Config -> VersionRange
cfgLastInSeries :: Config -> Bool
cfgLinuxJobs :: Config -> VersionRange
cfgMacosJobs :: Config -> VersionRange
cfgGhcupCabal :: Config -> Bool
cfgGhcupJobs :: Config -> VersionRange
cfgGhcupVersion :: Config -> Version
cfgApt :: Config -> Set [Char]
cfgTravisPatches :: Config -> [[Char]]
cfgGitHubPatches :: Config -> [[Char]]
cfgInsertVersion :: Config -> Bool
cfgErrorMissingMethods :: Config -> PackageScope
cfgDoctest :: Config -> DoctestConfig
cfgDocspec :: Config -> DocspecConfig
cfgHLint :: Config -> HLintConfig
cfgConstraintSets :: Config -> [ConstraintSet]
cfgRawProject :: Config -> [PrettyField ()]
cfgRawTravis :: Config -> [Char]
cfgGitHubActionName :: Config -> Maybe [Char]
cfgTimeoutMinutes :: Config -> Natural
..} Project URI Void Package
prj JobVersions {Set CompilerVersion
allVersions :: Set CompilerVersion
linuxVersions :: Set CompilerVersion
macosVersions :: Set CompilerVersion
allVersions :: JobVersions -> Set CompilerVersion
linuxVersions :: JobVersions -> Set CompilerVersion
macosVersions :: JobVersions -> Set CompilerVersion
..} = Auxiliary {Bool
[Char]
[URI]
[Package]
CompilerRange
[Char] -> [PrettyField ()]
pkgs :: [Package]
uris :: [URI]
projectName :: [Char]
doctestEnabled :: Bool
docspecEnabled :: Bool
hasTests :: CompilerRange
hasLibrary :: Bool
extraCabalProjectFields :: [Char] -> [PrettyField ()]
testShowDetails :: [Char]
anyJobUsesHeadHackage :: Bool
anyJobUsesPreviewGHC :: Bool
runHaddock :: Bool
haddockFlags :: [Char]
pkgs :: [Package]
uris :: [URI]
projectName :: [Char]
doctestEnabled :: Bool
docspecEnabled :: Bool
testShowDetails :: [Char]
hasTests :: CompilerRange
hasLibrary :: Bool
runHaddock :: Bool
haddockFlags :: [Char]
extraCabalProjectFields :: [Char] -> [PrettyField ()]
anyJobUsesHeadHackage :: Bool
anyJobUsesPreviewGHC :: Bool
..}
where
pkgs :: [Package]
pkgs = Project URI Void Package -> [Package]
forall uri opt pkg. Project uri opt pkg -> [pkg]
prjPackages Project URI Void Package
prj
uris :: [URI]
uris = Project URI Void Package -> [URI]
forall uri opt pkg. Project uri opt pkg -> [uri]
prjUriPackages Project URI Void Package
prj
projectName :: [Char]
projectName = [Char] -> Maybe [Char] -> [Char]
forall a. a -> Maybe a -> a
fromMaybe [Char]
"ci" (Maybe [Char]
cfgProjectName Maybe [Char] -> Maybe [Char] -> Maybe [Char]
forall a. Maybe a -> Maybe a -> Maybe a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Package -> [Char]
pkgName (Package -> [Char]) -> Maybe Package -> Maybe [Char]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Package] -> Maybe Package
forall a. [a] -> Maybe a
listToMaybe [Package]
pkgs)
doctestEnabled :: Bool
doctestEnabled = (CompilerVersion -> Bool) -> Set CompilerVersion -> Bool
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
any (Bool -> (Version -> Bool) -> CompilerVersion -> Bool
forall a. a -> (Version -> a) -> CompilerVersion -> a
maybeGHC Bool
False (Version -> VersionRange -> Bool
`C.withinRange` DoctestConfig -> VersionRange
cfgDoctestEnabled DoctestConfig
cfgDoctest)) Set CompilerVersion
linuxVersions
docspecEnabled :: Bool
docspecEnabled = (CompilerVersion -> Bool) -> Set CompilerVersion -> Bool
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
any (Bool -> (Version -> Bool) -> CompilerVersion -> Bool
forall a. a -> (Version -> a) -> CompilerVersion -> a
maybeGHC Bool
False (Version -> VersionRange -> Bool
`C.withinRange` DocspecConfig -> VersionRange
cfgDocspecEnabled DocspecConfig
cfgDocspec)) Set CompilerVersion
linuxVersions
testShowDetails :: [Char]
testShowDetails
| Bool
cfgTestOutputDirect = [Char]
" --test-show-details=direct"
| Bool
otherwise = [Char]
""
hasTests :: CompilerRange
hasTests :: CompilerRange
hasTests = Set CompilerVersion -> CompilerRange
RangePoints (Set CompilerVersion -> CompilerRange)
-> Set CompilerVersion -> CompilerRange
forall a b. (a -> b) -> a -> b
$ [Set CompilerVersion] -> Set CompilerVersion
forall (f :: * -> *) a. (Foldable f, Ord a) => f (Set a) -> Set a
S.unions
[ Set CompilerVersion
pkgJobs
| Pkg{GenericPackageDescription
pkgGpd :: GenericPackageDescription
pkgGpd :: Package -> GenericPackageDescription
pkgGpd,Set CompilerVersion
pkgJobs :: Set CompilerVersion
pkgJobs :: Package -> Set CompilerVersion
pkgJobs} <- [Package]
pkgs
, Bool -> Bool
not (Bool -> Bool) -> Bool -> Bool
forall a b. (a -> b) -> a -> b
$ [(UnqualComponentName, CondTree ConfVar [Dependency] TestSuite)]
-> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null ([(UnqualComponentName, CondTree ConfVar [Dependency] TestSuite)]
-> Bool)
-> [(UnqualComponentName, CondTree ConfVar [Dependency] TestSuite)]
-> Bool
forall a b. (a -> b) -> a -> b
$ GenericPackageDescription
-> [(UnqualComponentName, CondTree ConfVar [Dependency] TestSuite)]
C.condTestSuites GenericPackageDescription
pkgGpd
]
hasLibrary :: Bool
hasLibrary = (Package -> Bool) -> [Package] -> Bool
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
any (\Pkg{GenericPackageDescription
pkgGpd :: Package -> GenericPackageDescription
pkgGpd :: GenericPackageDescription
pkgGpd} -> Maybe (CondTree ConfVar [Dependency] Library) -> Bool
forall a. Maybe a -> Bool
isJust (Maybe (CondTree ConfVar [Dependency] Library) -> Bool)
-> Maybe (CondTree ConfVar [Dependency] Library) -> Bool
forall a b. (a -> b) -> a -> b
$ GenericPackageDescription
-> Maybe (CondTree ConfVar [Dependency] Library)
C.condLibrary GenericPackageDescription
pkgGpd) [Package]
pkgs
runHaddock :: Bool
runHaddock = Bool -> Bool
not (VersionRange -> VersionRange -> Bool
equivVersionRanges VersionRange
C.noVersion VersionRange
cfgHaddock)
Bool -> Bool -> Bool
&& case Components
cfgHaddockComponents of
Components
ComponentsAll -> Bool
True
Components
ComponentsLibs -> Bool
hasLibrary
haddockFlags :: [Char]
haddockFlags = case Components
cfgHaddockComponents of
Components
ComponentsAll -> [Char]
" --haddock-all"
Components
ComponentsLibs -> [Char]
""
extraCabalProjectFields :: FilePath -> [C.PrettyField ()]
extraCabalProjectFields :: [Char] -> [PrettyField ()]
extraCabalProjectFields [Char]
rootdir = ListBuilder (PrettyField ()) () -> [PrettyField ()]
forall x. ListBuilder x () -> [x]
buildList (ListBuilder (PrettyField ()) () -> [PrettyField ()])
-> ListBuilder (PrettyField ()) () -> [PrettyField ()]
forall a b. (a -> b) -> a -> b
$ do
[URI]
-> (URI -> ListBuilder (PrettyField ()) ())
-> ListBuilder (PrettyField ()) ()
forall (t :: * -> *) (f :: * -> *) a b.
(Foldable t, Applicative f) =>
t a -> (a -> f b) -> f ()
for_ [URI]
uris ((URI -> ListBuilder (PrettyField ()) ())
-> ListBuilder (PrettyField ()) ())
-> (URI -> ListBuilder (PrettyField ()) ())
-> ListBuilder (PrettyField ()) ()
forall a b. (a -> b) -> a -> b
$ \URI
uri ->
PrettyField () -> ListBuilder (PrettyField ()) ()
forall x. x -> ListBuilder x ()
item (PrettyField () -> ListBuilder (PrettyField ()) ())
-> PrettyField () -> ListBuilder (PrettyField ()) ()
forall a b. (a -> b) -> a -> b
$ () -> FieldName -> Doc -> PrettyField ()
forall ann. ann -> FieldName -> Doc -> PrettyField ann
C.PrettyField () FieldName
"packages" (Doc -> PrettyField ()) -> Doc -> PrettyField ()
forall a b. (a -> b) -> a -> b
$ [Char] -> Doc
PP.text ([Char] -> Doc) -> [Char] -> Doc
forall a b. (a -> b) -> a -> b
$ case URI -> [Char]
URI.uriScheme URI
uri of
[Char]
"file:" -> [Char]
rootdir [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ URI -> [Char]
URI.uriPath URI
uri
[Char]
_ -> ([Char] -> [Char]) -> URI -> [Char] -> [Char]
uriToString [Char] -> [Char]
forall a. a -> a
id URI
uri [Char]
""
case CopyFields
cfgCopyFields of
CopyFields
CopyFieldsNone -> () -> ListBuilder (PrettyField ()) ()
forall a. a -> ListBuilder (PrettyField ()) a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ()
CopyFields
CopyFieldsSome -> ListBuilder (PrettyField ()) ()
copyFieldsSome
CopyFields
CopyFieldsAll -> ListBuilder (PrettyField ()) ()
copyFieldsSome ListBuilder (PrettyField ()) ()
-> ListBuilder (PrettyField ()) ()
-> ListBuilder (PrettyField ()) ()
forall a b.
ListBuilder (PrettyField ()) a
-> ListBuilder (PrettyField ()) b -> ListBuilder (PrettyField ()) b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> (PrettyField () -> ListBuilder (PrettyField ()) ())
-> [PrettyField ()] -> ListBuilder (PrettyField ()) ()
forall (t :: * -> *) (f :: * -> *) a b.
(Foldable t, Applicative f) =>
(a -> f b) -> t a -> f ()
traverse_ PrettyField () -> ListBuilder (PrettyField ()) ()
forall x. x -> ListBuilder x ()
item (Project URI Void Package -> [PrettyField ()]
forall uri opt pkg. Project uri opt pkg -> [PrettyField ()]
prjOtherFields Project URI Void Package
prj)
Bool
-> ListBuilder (PrettyField ()) ()
-> ListBuilder (PrettyField ()) ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless ([[Char]] -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null [[Char]]
cfgLocalGhcOptions) (ListBuilder (PrettyField ()) ()
-> ListBuilder (PrettyField ()) ())
-> ListBuilder (PrettyField ()) ()
-> ListBuilder (PrettyField ()) ()
forall a b. (a -> b) -> a -> b
$ [Package]
-> (Package -> ListBuilder (PrettyField ()) ())
-> ListBuilder (PrettyField ()) ()
forall (t :: * -> *) (f :: * -> *) a b.
(Foldable t, Applicative f) =>
t a -> (a -> f b) -> f ()
for_ [Package]
pkgs ((Package -> ListBuilder (PrettyField ()) ())
-> ListBuilder (PrettyField ()) ())
-> (Package -> ListBuilder (PrettyField ()) ())
-> ListBuilder (PrettyField ()) ()
forall a b. (a -> b) -> a -> b
$ \Pkg{[Char]
pkgName :: Package -> [Char]
pkgName :: [Char]
pkgName} -> do
let s :: [Char]
s = [[Char]] -> [Char]
unwords ([[Char]] -> [Char]) -> [[Char]] -> [Char]
forall a b. (a -> b) -> a -> b
$ ([Char] -> [Char]) -> [[Char]] -> [[Char]]
forall a b. (a -> b) -> [a] -> [b]
map (Doc -> [Char]
forall a. Show a => a -> [Char]
show (Doc -> [Char]) -> ([Char] -> Doc) -> [Char] -> [Char]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Char] -> Doc
C.showToken) [[Char]]
cfgLocalGhcOptions
PrettyField () -> ListBuilder (PrettyField ()) ()
forall x. x -> ListBuilder x ()
item (PrettyField () -> ListBuilder (PrettyField ()) ())
-> PrettyField () -> ListBuilder (PrettyField ()) ()
forall a b. (a -> b) -> a -> b
$ () -> FieldName -> [Doc] -> [PrettyField ()] -> PrettyField ()
forall ann.
ann -> FieldName -> [Doc] -> [PrettyField ann] -> PrettyField ann
C.PrettySection () FieldName
"package" [[Char] -> Doc
PP.text [Char]
pkgName] ([PrettyField ()] -> PrettyField ())
-> [PrettyField ()] -> PrettyField ()
forall a b. (a -> b) -> a -> b
$ ListBuilder (PrettyField ()) () -> [PrettyField ()]
forall x. ListBuilder x () -> [x]
buildList (ListBuilder (PrettyField ()) () -> [PrettyField ()])
-> ListBuilder (PrettyField ()) () -> [PrettyField ()]
forall a b. (a -> b) -> a -> b
$
PrettyField () -> ListBuilder (PrettyField ()) ()
forall x. x -> ListBuilder x ()
item (PrettyField () -> ListBuilder (PrettyField ()) ())
-> PrettyField () -> ListBuilder (PrettyField ()) ()
forall a b. (a -> b) -> a -> b
$ () -> FieldName -> Doc -> PrettyField ()
forall ann. ann -> FieldName -> Doc -> PrettyField ann
C.PrettyField () FieldName
"ghc-options" (Doc -> PrettyField ()) -> Doc -> PrettyField ()
forall a b. (a -> b) -> a -> b
$ [Char] -> Doc
PP.text [Char]
s
(PrettyField () -> ListBuilder (PrettyField ()) ())
-> [PrettyField ()] -> ListBuilder (PrettyField ()) ()
forall (t :: * -> *) (f :: * -> *) a b.
(Foldable t, Applicative f) =>
(a -> f b) -> t a -> f ()
traverse_ PrettyField () -> ListBuilder (PrettyField ()) ()
forall x. x -> ListBuilder x ()
item [PrettyField ()]
cfgRawProject
where
copyFieldsSome :: ListBuilder (C.PrettyField ()) ()
copyFieldsSome :: ListBuilder (PrettyField ()) ()
copyFieldsSome = do
[[Char]]
-> ([Char] -> ListBuilder (PrettyField ()) ())
-> ListBuilder (PrettyField ()) ()
forall (t :: * -> *) (f :: * -> *) a b.
(Foldable t, Applicative f) =>
t a -> (a -> f b) -> f ()
for_ (Project URI Void Package -> [[Char]]
forall uri opt pkg. Project uri opt pkg -> [[Char]]
prjConstraints Project URI Void Package
prj) (([Char] -> ListBuilder (PrettyField ()) ())
-> ListBuilder (PrettyField ()) ())
-> ([Char] -> ListBuilder (PrettyField ()) ())
-> ListBuilder (PrettyField ()) ()
forall a b. (a -> b) -> a -> b
$ \[Char]
xs -> do
let s :: [Char]
s = [[Char]] -> [Char]
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat ([Char] -> [[Char]]
lines [Char]
xs)
PrettyField () -> ListBuilder (PrettyField ()) ()
forall x. x -> ListBuilder x ()
item (PrettyField () -> ListBuilder (PrettyField ()) ())
-> PrettyField () -> ListBuilder (PrettyField ()) ()
forall a b. (a -> b) -> a -> b
$ () -> FieldName -> Doc -> PrettyField ()
forall ann. ann -> FieldName -> Doc -> PrettyField ann
C.PrettyField () FieldName
"constraints" (Doc -> PrettyField ()) -> Doc -> PrettyField ()
forall a b. (a -> b) -> a -> b
$ [Char] -> Doc
PP.text [Char]
s
[[Char]]
-> ([Char] -> ListBuilder (PrettyField ()) ())
-> ListBuilder (PrettyField ()) ()
forall (t :: * -> *) (f :: * -> *) a b.
(Foldable t, Applicative f) =>
t a -> (a -> f b) -> f ()
for_ (Project URI Void Package -> [[Char]]
forall uri opt pkg. Project uri opt pkg -> [[Char]]
prjAllowNewer Project URI Void Package
prj) (([Char] -> ListBuilder (PrettyField ()) ())
-> ListBuilder (PrettyField ()) ())
-> ([Char] -> ListBuilder (PrettyField ()) ())
-> ListBuilder (PrettyField ()) ()
forall a b. (a -> b) -> a -> b
$ \[Char]
xs -> do
let s :: [Char]
s = [[Char]] -> [Char]
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat ([Char] -> [[Char]]
lines [Char]
xs)
PrettyField () -> ListBuilder (PrettyField ()) ()
forall x. x -> ListBuilder x ()
item (PrettyField () -> ListBuilder (PrettyField ()) ())
-> PrettyField () -> ListBuilder (PrettyField ()) ()
forall a b. (a -> b) -> a -> b
$ () -> FieldName -> Doc -> PrettyField ()
forall ann. ann -> FieldName -> Doc -> PrettyField ann
C.PrettyField () FieldName
"allow-newer" (Doc -> PrettyField ()) -> Doc -> PrettyField ()
forall a b. (a -> b) -> a -> b
$ [Char] -> Doc
PP.text [Char]
s
Bool
-> ListBuilder (PrettyField ()) ()
-> ListBuilder (PrettyField ()) ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
when (Project URI Void Package -> Bool
forall uri opt pkg. Project uri opt pkg -> Bool
prjReorderGoals Project URI Void Package
prj) (ListBuilder (PrettyField ()) ()
-> ListBuilder (PrettyField ()) ())
-> ListBuilder (PrettyField ()) ()
-> ListBuilder (PrettyField ()) ()
forall a b. (a -> b) -> a -> b
$
PrettyField () -> ListBuilder (PrettyField ()) ()
forall x. x -> ListBuilder x ()
item (PrettyField () -> ListBuilder (PrettyField ()) ())
-> PrettyField () -> ListBuilder (PrettyField ()) ()
forall a b. (a -> b) -> a -> b
$ () -> FieldName -> Doc -> PrettyField ()
forall ann. ann -> FieldName -> Doc -> PrettyField ann
C.PrettyField () FieldName
"reorder-goals" (Doc -> PrettyField ()) -> Doc -> PrettyField ()
forall a b. (a -> b) -> a -> b
$ [Char] -> Doc
PP.text [Char]
"True"
Maybe Int
-> (Int -> ListBuilder (PrettyField ()) ())
-> ListBuilder (PrettyField ()) ()
forall (t :: * -> *) (f :: * -> *) a b.
(Foldable t, Applicative f) =>
t a -> (a -> f b) -> f ()
for_ (Project URI Void Package -> Maybe Int
forall uri opt pkg. Project uri opt pkg -> Maybe Int
prjMaxBackjumps Project URI Void Package
prj) ((Int -> ListBuilder (PrettyField ()) ())
-> ListBuilder (PrettyField ()) ())
-> (Int -> ListBuilder (PrettyField ()) ())
-> ListBuilder (PrettyField ()) ()
forall a b. (a -> b) -> a -> b
$ \Int
bj ->
PrettyField () -> ListBuilder (PrettyField ()) ()
forall x. x -> ListBuilder x ()
item (PrettyField () -> ListBuilder (PrettyField ()) ())
-> PrettyField () -> ListBuilder (PrettyField ()) ()
forall a b. (a -> b) -> a -> b
$ () -> FieldName -> Doc -> PrettyField ()
forall ann. ann -> FieldName -> Doc -> PrettyField ann
C.PrettyField () FieldName
"max-backjumps" (Doc -> PrettyField ()) -> Doc -> PrettyField ()
forall a b. (a -> b) -> a -> b
$ [Char] -> Doc
PP.text ([Char] -> Doc) -> [Char] -> Doc
forall a b. (a -> b) -> a -> b
$ Int -> [Char]
forall a. Show a => a -> [Char]
show Int
bj
case Project URI Void Package -> Optimization
forall uri opt pkg. Project uri opt pkg -> Optimization
prjOptimization Project URI Void Package
prj of
Optimization
OptimizationOn -> () -> ListBuilder (PrettyField ()) ()
forall a. a -> ListBuilder (PrettyField ()) a
forall (m :: * -> *) a. Monad m => a -> m a
return ()
Optimization
OptimizationOff -> PrettyField () -> ListBuilder (PrettyField ()) ()
forall x. x -> ListBuilder x ()
item (PrettyField () -> ListBuilder (PrettyField ()) ())
-> PrettyField () -> ListBuilder (PrettyField ()) ()
forall a b. (a -> b) -> a -> b
$ () -> FieldName -> Doc -> PrettyField ()
forall ann. ann -> FieldName -> Doc -> PrettyField ann
C.PrettyField () FieldName
"optimization" (Doc -> PrettyField ()) -> Doc -> PrettyField ()
forall a b. (a -> b) -> a -> b
$ [Char] -> Doc
PP.text [Char]
"False"
OptimizationLevel Int
l -> PrettyField () -> ListBuilder (PrettyField ()) ()
forall x. x -> ListBuilder x ()
item (PrettyField () -> ListBuilder (PrettyField ()) ())
-> PrettyField () -> ListBuilder (PrettyField ()) ()
forall a b. (a -> b) -> a -> b
$ () -> FieldName -> Doc -> PrettyField ()
forall ann. ann -> FieldName -> Doc -> PrettyField ann
C.PrettyField () FieldName
"optimization" (Doc -> PrettyField ()) -> Doc -> PrettyField ()
forall a b. (a -> b) -> a -> b
$ [Char] -> Doc
PP.text ([Char] -> Doc) -> [Char] -> Doc
forall a b. (a -> b) -> a -> b
$ Int -> [Char]
forall a. Show a => a -> [Char]
show Int
l
[SourceRepositoryPackage Maybe]
-> (SourceRepositoryPackage Maybe
-> ListBuilder (PrettyField ()) ())
-> ListBuilder (PrettyField ()) ()
forall (t :: * -> *) (f :: * -> *) a b.
(Foldable t, Applicative f) =>
t a -> (a -> f b) -> f ()
for_ (Project URI Void Package -> [SourceRepositoryPackage Maybe]
forall uri opt pkg.
Project uri opt pkg -> [SourceRepositoryPackage Maybe]
prjSourceRepos Project URI Void Package
prj) ((SourceRepositoryPackage Maybe -> ListBuilder (PrettyField ()) ())
-> ListBuilder (PrettyField ()) ())
-> (SourceRepositoryPackage Maybe
-> ListBuilder (PrettyField ()) ())
-> ListBuilder (PrettyField ()) ()
forall a b. (a -> b) -> a -> b
$ \SourceRepositoryPackage Maybe
repo ->
PrettyField () -> ListBuilder (PrettyField ()) ()
forall x. x -> ListBuilder x ()
item (PrettyField () -> ListBuilder (PrettyField ()) ())
-> PrettyField () -> ListBuilder (PrettyField ()) ()
forall a b. (a -> b) -> a -> b
$ () -> FieldName -> [Doc] -> [PrettyField ()] -> PrettyField ()
forall ann.
ann -> FieldName -> [Doc] -> [PrettyField ann] -> PrettyField ann
C.PrettySection () FieldName
"source-repository-package" [] ([PrettyField ()] -> PrettyField ())
-> [PrettyField ()] -> PrettyField ()
forall a b. (a -> b) -> a -> b
$
CabalSpecVersion
-> PrettyFieldGrammar SourceRepoList SourceRepoList
-> SourceRepoList
-> [PrettyField ()]
forall s a.
CabalSpecVersion -> PrettyFieldGrammar s a -> s -> [PrettyField ()]
C.prettyFieldGrammar CabalSpecVersion
C.cabalSpecLatest PrettyFieldGrammar SourceRepoList SourceRepoList
forall (c :: * -> Constraint) (g :: * -> * -> *).
(FieldGrammar c g, Applicative (g SourceRepoList),
c (List NoCommaFSep FilePathNT [Char]), c (Identity RepoType)) =>
g SourceRepoList SourceRepoList
sourceRepositoryPackageGrammar ((forall x. Maybe x -> [x])
-> SourceRepositoryPackage Maybe -> SourceRepoList
forall (f :: * -> *) (g :: * -> *).
(forall x. f x -> g x)
-> SourceRepositoryPackage f -> SourceRepositoryPackage g
srpHoist Maybe x -> [x]
forall x. Maybe x -> [x]
forall (t :: * -> *) a. Foldable t => t a -> [a]
toList SourceRepositoryPackage Maybe
repo)
headGhcVers :: Set CompilerVersion
headGhcVers :: Set CompilerVersion
headGhcVers = (CompilerVersion -> Bool)
-> Set CompilerVersion -> Set CompilerVersion
forall a. (a -> Bool) -> Set a -> Set a
S.filter (VersionRange -> CompilerVersion -> Bool
usesHeadHackage VersionRange
cfgHeadHackage) Set CompilerVersion
allVersions
anyJobUsesHeadHackage :: Bool
anyJobUsesHeadHackage :: Bool
anyJobUsesHeadHackage = Bool -> Bool
not (Bool -> Bool) -> Bool -> Bool
forall a b. (a -> b) -> a -> b
$ Set CompilerVersion -> Bool
forall a. Set a -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null Set CompilerVersion
headGhcVers
anyJobUsesPreviewGHC :: Bool
anyJobUsesPreviewGHC :: Bool
anyJobUsesPreviewGHC = Bool -> Bool
not (Bool -> Bool) -> Bool -> Bool
forall a b. (a -> b) -> a -> b
$ Set CompilerVersion -> Bool
forall a. Set a -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null (Set CompilerVersion -> Bool) -> Set CompilerVersion -> Bool
forall a b. (a -> b) -> a -> b
$ (CompilerVersion -> Bool)
-> Set CompilerVersion -> Set CompilerVersion
forall a. (a -> Bool) -> Set a -> Set a
S.filter CompilerVersion -> Bool
isPreviewGHC Set CompilerVersion
allVersions
pkgNameDirVariable' :: String -> String
pkgNameDirVariable' :: [Char] -> [Char]
pkgNameDirVariable' [Char]
n = [Char]
"PKGDIR_" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ (Char -> Char) -> [Char] -> [Char]
forall a b. (a -> b) -> [a] -> [b]
map Char -> Char
f [Char]
n where
f :: Char -> Char
f Char
'-' = Char
'_'
f Char
c = Char
c
pkgNameDirVariable :: String -> String
pkgNameDirVariable :: [Char] -> [Char]
pkgNameDirVariable [Char]
n = [Char]
"${" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char] -> [Char]
pkgNameDirVariable' [Char]
n [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
"}"