{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE TypeApplications #-}
module Distribution.ArchHs.Core
( getDependencies,
cabalToPkgBuild,
evalConditionTree,
subsumeGHCVersion,
collectLibDeps,
collectExeDeps,
collectTestDeps,
collectSubLibDeps,
collectSetupDeps,
)
where
import qualified Algebra.Graph.Labelled.AdjacencyMap as G
import Data.Bifunctor (second)
import Data.Containers.ListUtils (nubOrd)
import qualified Data.Map as Map
import Data.Maybe (fromMaybe)
import Data.Set (Set)
import qualified Data.Set as Set
import Distribution.ArchHs.CommunityDB (versionInCommunity)
import Distribution.ArchHs.Exception
import Distribution.ArchHs.Hackage
( getLatestCabal,
getLatestSHA256,
)
import Distribution.ArchHs.Internal.Prelude
import Distribution.ArchHs.Local (ignoreList)
import Distribution.ArchHs.Name
import Distribution.ArchHs.PkgBuild
( PkgBuild (..),
mapLicense,
showArchLicense,
)
import Distribution.ArchHs.Types
import Distribution.ArchHs.Utils
import Distribution.Compiler (CompilerFlavor (..))
import Distribution.PackageDescription hiding (pkgName)
import Distribution.SPDX
import Distribution.System (Arch (X86_64), OS (Linux))
import qualified Distribution.Types.BuildInfo.Lens as L
import Distribution.Types.CondTree (simplifyCondTree)
import Distribution.Types.Dependency (Dependency)
import Distribution.Utils.ShortText (fromShortText)
archEnv :: Version -> FlagAssignment -> ConfVar -> Either ConfVar Bool
archEnv :: Version -> FlagAssignment -> ConfVar -> Either ConfVar Bool
archEnv Version
_ FlagAssignment
_ (OS OS
Linux) = Bool -> Either ConfVar Bool
forall a b. b -> Either a b
Right Bool
True
archEnv Version
_ FlagAssignment
_ (OS OS
_) = Bool -> Either ConfVar Bool
forall a b. b -> Either a b
Right Bool
False
archEnv Version
_ FlagAssignment
_ (Arch Arch
X86_64) = Bool -> Either ConfVar Bool
forall a b. b -> Either a b
Right Bool
True
archEnv Version
_ FlagAssignment
_ (Arch Arch
_) = Bool -> Either ConfVar Bool
forall a b. b -> Either a b
Right Bool
False
archEnv Version
ghcVersion FlagAssignment
_ (Impl CompilerFlavor
GHC VersionRange
range) = Bool -> Either ConfVar Bool
forall a b. b -> Either a b
Right (Bool -> Either ConfVar Bool) -> Bool -> Either ConfVar Bool
forall a b. (a -> b) -> a -> b
$ Version -> VersionRange -> Bool
withinRange Version
ghcVersion VersionRange
range
archEnv Version
_ FlagAssignment
_ (Impl CompilerFlavor
_ VersionRange
_) = Bool -> Either ConfVar Bool
forall a b. b -> Either a b
Right Bool
False
archEnv Version
_ FlagAssignment
assignment f :: ConfVar
f@(PkgFlag FlagName
f') = ConfVar -> Maybe Bool -> Either ConfVar Bool
forall a b. a -> Maybe b -> Either a b
go ConfVar
f (Maybe Bool -> Either ConfVar Bool)
-> Maybe Bool -> Either ConfVar Bool
forall a b. (a -> b) -> a -> b
$ FlagName -> FlagAssignment -> Maybe Bool
lookupFlagAssignment FlagName
f' FlagAssignment
assignment
where
go :: a -> Maybe b -> Either a b
go a
_ (Just b
r) = b -> Either a b
forall a b. b -> Either a b
Right b
r
go a
x Maybe b
Nothing = a -> Either a b
forall a b. a -> Either a b
Left a
x
evalConditionTree ::
(HasCallStack, Semigroup k, L.HasBuildInfo k, Members [KnownGHCVersion, FlagAssignmentsEnv, Trace] r) =>
GenericPackageDescription ->
CondTree ConfVar [Dependency] k ->
Sem r BuildInfo
evalConditionTree :: GenericPackageDescription
-> CondTree ConfVar [Dependency] k -> Sem r BuildInfo
evalConditionTree GenericPackageDescription
cabal CondTree ConfVar [Dependency] k
cond = do
Map PackageName FlagAssignment
flagAssignments <- Sem r (Map PackageName FlagAssignment)
forall i (r :: [Effect]). MemberWithError (Reader i) r => Sem r i
ask
let name :: PackageName
name = GenericPackageDescription -> PackageName
getPkgName' GenericPackageDescription
cabal
packageFlags :: [Flag]
packageFlags = GenericPackageDescription -> [Flag]
genPackageFlags GenericPackageDescription
cabal
defaultFlagAssignments :: FlagAssignment
defaultFlagAssignments =
(Flag -> FlagAssignment -> FlagAssignment)
-> FlagAssignment -> [Flag] -> FlagAssignment
forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr (\Flag
f FlagAssignment
acc -> FlagName -> Bool -> FlagAssignment -> FlagAssignment
insertFlagAssignment (Flag -> FlagName
flagName Flag
f) (Flag -> Bool
flagDefault Flag
f) FlagAssignment
acc) ([(FlagName, Bool)] -> FlagAssignment
mkFlagAssignment []) [Flag]
packageFlags
flagAssignment :: [(FlagName, Bool)]
flagAssignment = case PackageName
-> Map PackageName FlagAssignment -> Maybe FlagAssignment
forall k a. Ord k => k -> Map k a -> Maybe a
Map.lookup PackageName
name Map PackageName FlagAssignment
flagAssignments of
Just FlagAssignment
f -> FlagAssignment -> [(FlagName, Bool)]
unFlagAssignment FlagAssignment
f
Maybe FlagAssignment
_ -> []
flagNames :: [FlagName]
flagNames = ((FlagName, Bool) -> FlagName) -> [(FlagName, Bool)] -> [FlagName]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (FlagName, Bool) -> FlagName
forall a b. (a, b) -> a
fst [(FlagName, Bool)]
flagAssignment
thisFlag :: FlagAssignment
thisFlag =
[(FlagName, Bool)] -> FlagAssignment
mkFlagAssignment
([(FlagName, Bool)] -> FlagAssignment)
-> ([(FlagName, Bool)] -> [(FlagName, Bool)])
-> [(FlagName, Bool)]
-> FlagAssignment
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ([(FlagName, Bool)] -> [(FlagName, Bool)] -> [(FlagName, Bool)]
forall a. Semigroup a => a -> a -> a
<> [(FlagName, Bool)]
flagAssignment)
([(FlagName, Bool)] -> [(FlagName, Bool)])
-> ([(FlagName, Bool)] -> [(FlagName, Bool)])
-> [(FlagName, Bool)]
-> [(FlagName, Bool)]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((FlagName, Bool) -> Bool)
-> [(FlagName, Bool)] -> [(FlagName, Bool)]
forall a. (a -> Bool) -> [a] -> [a]
filter (\(FlagName
fName, Bool
_) -> FlagName
fName FlagName -> [FlagName] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`notElem` [FlagName]
flagNames)
([(FlagName, Bool)] -> FlagAssignment)
-> [(FlagName, Bool)] -> FlagAssignment
forall a b. (a -> b) -> a -> b
$ FlagAssignment -> [(FlagName, Bool)]
unFlagAssignment FlagAssignment
defaultFlagAssignments
String -> Sem r ()
forall (r :: [Effect]). Member Trace r => String -> Sem r ()
trace' (String -> Sem r ()) -> String -> Sem r ()
forall a b. (a -> b) -> a -> b
$ String
"Evaluating condition tree of " String -> String -> String
forall a. Semigroup a => a -> a -> a
<> PackageName -> String
forall a. Show a => a -> String
show PackageName
name
String -> Sem r ()
forall (r :: [Effect]). Member Trace r => String -> Sem r ()
trace' (String -> Sem r ()) -> String -> Sem r ()
forall a b. (a -> b) -> a -> b
$ String
"Flags: " String -> String -> String
forall a. Semigroup a => a -> a -> a
<> FlagAssignment -> String
forall a. Show a => a -> String
show FlagAssignment
thisFlag
Sem r ()
forall (r :: [Effect]). (HasCallStack, Member Trace r) => Sem r ()
traceCallStack
Version
ghcVersion <- Sem r Version
forall i (r :: [Effect]). MemberWithError (Reader i) r => Sem r i
ask
BuildInfo -> Sem r BuildInfo
forall (m :: * -> *) a. Monad m => a -> m a
return (BuildInfo -> Sem r BuildInfo) -> BuildInfo -> Sem r BuildInfo
forall a b. (a -> b) -> a -> b
$ (k -> Getting BuildInfo k BuildInfo -> BuildInfo
forall s a. s -> Getting a s a -> a
^. Getting BuildInfo k BuildInfo
forall a. HasBuildInfo a => Lens' a BuildInfo
L.buildInfo) (k -> BuildInfo)
-> (([Dependency], k) -> k) -> ([Dependency], k) -> BuildInfo
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ([Dependency], k) -> k
forall a b. (a, b) -> b
snd (([Dependency], k) -> BuildInfo) -> ([Dependency], k) -> BuildInfo
forall a b. (a -> b) -> a -> b
$ (ConfVar -> Either ConfVar Bool)
-> CondTree ConfVar [Dependency] k -> ([Dependency], k)
forall a d v.
(Semigroup a, Semigroup d) =>
(v -> Either v Bool) -> CondTree v d a -> (d, a)
simplifyCondTree (Version -> FlagAssignment -> ConfVar -> Either ConfVar Bool
archEnv Version
ghcVersion FlagAssignment
thisFlag) CondTree ConfVar [Dependency] k
cond
getDependencies ::
(HasCallStack, Members [KnownGHCVersion, HackageEnv, FlagAssignmentsEnv, WithMyErr, DependencyRecord, State (Set PackageName), Trace] r) =>
[UnqualComponentName] ->
Maybe PackageName ->
PackageName ->
Sem r (G.AdjacencyMap (Set DependencyType) PackageName, Set PackageName, Map.Map PackageName [SystemDependency])
getDependencies :: [UnqualComponentName]
-> Maybe PackageName
-> PackageName
-> Sem
r
(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])
getDependencies [UnqualComponentName]
skip Maybe PackageName
parent PackageName
name = do
Set PackageName
resolved <- forall (r :: [Effect]).
MemberWithError (State (Set PackageName)) r =>
Sem r (Set PackageName)
forall s (r :: [Effect]). MemberWithError (State s) r => Sem r s
get @(Set PackageName)
(Set PackageName -> Set PackageName) -> Sem r ()
forall s (r :: [Effect]).
Member (State s) r =>
(s -> s) -> Sem r ()
modify' ((Set PackageName -> Set PackageName) -> Sem r ())
-> (Set PackageName -> Set PackageName) -> Sem r ()
forall a b. (a -> b) -> a -> b
$ PackageName -> Set PackageName -> Set PackageName
forall a. Ord a => a -> Set a -> Set a
Set.insert PackageName
name
String -> Sem r ()
forall (r :: [Effect]). Member Trace r => String -> Sem r ()
trace' (String -> Sem r ()) -> String -> Sem r ()
forall a b. (a -> b) -> a -> b
$ String
"Getting all dependencies of (" String -> String -> String
forall a. Semigroup a => a -> a -> a
<> PackageName -> String
forall a. Show a => a -> String
show PackageName
name String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
"), parent: (" String -> String -> String
forall a. Semigroup a => a -> a -> a
<> Maybe PackageName -> String
forall a. Show a => a -> String
show Maybe PackageName
parent String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
")"
String -> Sem r ()
forall (r :: [Effect]). Member Trace r => String -> Sem r ()
trace' (String -> Sem r ()) -> String -> Sem r ()
forall a b. (a -> b) -> a -> b
$ String
"Already resolved: " String -> String -> String
forall a. Semigroup a => a -> a -> a
<> Set PackageName -> String
forall a. Show a => a -> String
show Set PackageName
resolved
Sem r ()
forall (r :: [Effect]). (HasCallStack, Member Trace r) => Sem r ()
traceCallStack
GenericPackageDescription
cabal <- PackageName -> Sem r GenericPackageDescription
forall (r :: [Effect]).
Members '[HackageEnv, WithMyErr] r =>
PackageName -> Sem r GenericPackageDescription
getLatestCabal PackageName
name
let kIgnoreVersionLib :: [(b, b)] -> [b]
kIgnoreVersionLib = ((b, b) -> b) -> [(b, b)] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (b, b) -> b
forall a b. (a, b) -> a
fst
kIgnoreVersionComp :: [(a, [(b, b)])] -> [(a, [b])]
kIgnoreVersionComp = ((a, [(b, b)]) -> (a, [b])) -> [(a, [(b, b)])] -> [(a, [b])]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (([(b, b)] -> [b]) -> (a, [(b, b)]) -> (a, [b])
forall (p :: * -> * -> *) b c a.
Bifunctor p =>
(b -> c) -> p a b -> p a c
second (([(b, b)] -> [b]) -> (a, [(b, b)]) -> (a, [b]))
-> ([(b, b)] -> [b]) -> (a, [(b, b)]) -> (a, [b])
forall a b. (a -> b) -> a -> b
$ ((b, b) -> b) -> [(b, b)] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (b, b) -> b
forall a b. (a, b) -> a
fst)
kIgnoreVersionSetup :: [(PackageName, VersionRange)] -> [PackageName]
kIgnoreVersionSetup = [(PackageName, VersionRange)] -> [PackageName]
forall b b. [(b, b)] -> [b]
kIgnoreVersionLib
([PackageName]
libDeps, [PackageName]
libToolsDeps, [SystemDependency]
libSysDeps) <- ([(PackageName, VersionRange)] -> [PackageName])
-> GenericPackageDescription
-> Sem r ([PackageName], [PackageName], [SystemDependency])
forall (r :: [Effect]) a.
(Members
'[KnownGHCVersion, FlagAssignmentsEnv, DependencyRecord, Trace] r,
Show a, Monoid a) =>
([(PackageName, VersionRange)] -> a)
-> GenericPackageDescription -> Sem r (a, a, [SystemDependency])
collectLibDeps [(PackageName, VersionRange)] -> [PackageName]
forall b b. [(b, b)] -> [b]
kIgnoreVersionLib GenericPackageDescription
cabal
([(UnqualComponentName, [PackageName])]
subLibDeps, [(UnqualComponentName, [PackageName])]
subLibToolsDeps, [SystemDependency]
subLibSysDeps) <- ([(UnqualComponentName, [(PackageName, VersionRange)])]
-> [(UnqualComponentName, [PackageName])])
-> GenericPackageDescription
-> [UnqualComponentName]
-> Sem
r
([(UnqualComponentName, [PackageName])],
[(UnqualComponentName, [PackageName])], [SystemDependency])
forall (r :: [Effect]) a.
(HasCallStack,
Members
'[KnownGHCVersion, FlagAssignmentsEnv, DependencyRecord, Trace] r,
Show a) =>
([(UnqualComponentName, [(PackageName, VersionRange)])] -> a)
-> GenericPackageDescription
-> [UnqualComponentName]
-> Sem r (a, a, [SystemDependency])
collectSubLibDeps [(UnqualComponentName, [(PackageName, VersionRange)])]
-> [(UnqualComponentName, [PackageName])]
forall a b b. [(a, [(b, b)])] -> [(a, [b])]
kIgnoreVersionComp GenericPackageDescription
cabal [UnqualComponentName]
skip
([(UnqualComponentName, [PackageName])]
exeDeps, [(UnqualComponentName, [PackageName])]
exeToolsDeps, [SystemDependency]
exeSysDeps) <- ([(UnqualComponentName, [(PackageName, VersionRange)])]
-> [(UnqualComponentName, [PackageName])])
-> GenericPackageDescription
-> [UnqualComponentName]
-> Sem
r
([(UnqualComponentName, [PackageName])],
[(UnqualComponentName, [PackageName])], [SystemDependency])
forall (r :: [Effect]) a.
(HasCallStack,
Members
'[KnownGHCVersion, FlagAssignmentsEnv, DependencyRecord, Trace] r,
Show a) =>
([(UnqualComponentName, [(PackageName, VersionRange)])] -> a)
-> GenericPackageDescription
-> [UnqualComponentName]
-> Sem r (a, a, [SystemDependency])
collectExeDeps [(UnqualComponentName, [(PackageName, VersionRange)])]
-> [(UnqualComponentName, [PackageName])]
forall a b b. [(a, [(b, b)])] -> [(a, [b])]
kIgnoreVersionComp GenericPackageDescription
cabal [UnqualComponentName]
skip
([(UnqualComponentName, [PackageName])]
testDeps, [(UnqualComponentName, [PackageName])]
testToolsDeps, [SystemDependency]
testSysDeps) <- ([(UnqualComponentName, [(PackageName, VersionRange)])]
-> [(UnqualComponentName, [PackageName])])
-> GenericPackageDescription
-> [UnqualComponentName]
-> Sem
r
([(UnqualComponentName, [PackageName])],
[(UnqualComponentName, [PackageName])], [SystemDependency])
forall (r :: [Effect]) a.
(HasCallStack,
Members
'[KnownGHCVersion, FlagAssignmentsEnv, DependencyRecord, Trace] r,
Show a) =>
([(UnqualComponentName, [(PackageName, VersionRange)])] -> a)
-> GenericPackageDescription
-> [UnqualComponentName]
-> Sem r (a, a, [SystemDependency])
collectTestDeps [(UnqualComponentName, [(PackageName, VersionRange)])]
-> [(UnqualComponentName, [PackageName])]
forall a b b. [(a, [(b, b)])] -> [(a, [b])]
kIgnoreVersionComp GenericPackageDescription
cabal [UnqualComponentName]
skip
[PackageName]
setupDeps <- ([(PackageName, VersionRange)] -> [PackageName])
-> GenericPackageDescription -> Sem r [PackageName]
forall (r :: [Effect]) a.
(Member Trace r, Show a, Monoid a) =>
([(PackageName, VersionRange)] -> a)
-> GenericPackageDescription -> Sem r a
collectSetupDeps [(PackageName, VersionRange)] -> [PackageName]
kIgnoreVersionSetup GenericPackageDescription
cabal
let uname :: (UnqualComponentName -> DependencyType) -> ComponentPkgList -> [(DependencyType, PkgList)]
uname :: (UnqualComponentName -> DependencyType)
-> [(UnqualComponentName, [PackageName])]
-> [(DependencyType, [PackageName])]
uname UnqualComponentName -> DependencyType
cons [(UnqualComponentName, [PackageName])]
list = [DependencyType]
-> [[PackageName]] -> [(DependencyType, [PackageName])]
forall a b. [a] -> [b] -> [(a, b)]
zip (((UnqualComponentName, [PackageName]) -> DependencyType)
-> [(UnqualComponentName, [PackageName])] -> [DependencyType]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (UnqualComponentName -> DependencyType
cons (UnqualComponentName -> DependencyType)
-> ((UnqualComponentName, [PackageName]) -> UnqualComponentName)
-> (UnqualComponentName, [PackageName])
-> DependencyType
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (UnqualComponentName, [PackageName]) -> UnqualComponentName
forall a b. (a, b) -> a
fst) [(UnqualComponentName, [PackageName])]
list) (((UnqualComponentName, [PackageName]) -> [PackageName])
-> [(UnqualComponentName, [PackageName])] -> [[PackageName]]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (UnqualComponentName, [PackageName]) -> [PackageName]
forall a b. (a, b) -> b
snd [(UnqualComponentName, [PackageName])]
list)
flatten :: [(DependencyType, PkgList)] -> [(DependencyType, PackageName)]
flatten :: [(DependencyType, [PackageName])]
-> [(DependencyType, PackageName)]
flatten = [[(DependencyType, PackageName)]]
-> [(DependencyType, PackageName)]
forall a. Monoid a => [a] -> a
mconcat ([[(DependencyType, PackageName)]]
-> [(DependencyType, PackageName)])
-> ([(DependencyType, [PackageName])]
-> [[(DependencyType, PackageName)]])
-> [(DependencyType, [PackageName])]
-> [(DependencyType, PackageName)]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((DependencyType, [PackageName])
-> [(DependencyType, PackageName)])
-> [(DependencyType, [PackageName])]
-> [[(DependencyType, PackageName)]]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\(DependencyType
t, [PackageName]
pkgs) -> [DependencyType]
-> [PackageName] -> [(DependencyType, PackageName)]
forall a b. [a] -> [b] -> [(a, b)]
zip (DependencyType -> [DependencyType]
forall a. a -> [a]
repeat DependencyType
t) [PackageName]
pkgs)
withThisName :: [(DependencyType, PackageName)] -> [(DependencyType, PackageName, PackageName)]
withThisName :: [(DependencyType, PackageName)]
-> [(DependencyType, PackageName, PackageName)]
withThisName = ((DependencyType, PackageName)
-> (DependencyType, PackageName, PackageName))
-> [(DependencyType, PackageName)]
-> [(DependencyType, PackageName, PackageName)]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\(DependencyType
t, PackageName
pkg) -> (DependencyType
t, PackageName
name, PackageName
pkg))
ignoreSingle :: PackageName -> Bool
ignoreSingle PackageName
x = PackageName
x PackageName -> [PackageName] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`notElem` [PackageName]
ignoreList
ignore :: [PackageName] -> [PackageName]
ignore = (PackageName -> Bool) -> [PackageName] -> [PackageName]
forall a. (a -> Bool) -> [a] -> [a]
filter PackageName -> Bool
ignoreSingle
ignoreFlatten :: (UnqualComponentName -> DependencyType)
-> [(UnqualComponentName, [PackageName])]
-> [(DependencyType, PackageName)]
ignoreFlatten UnqualComponentName -> DependencyType
k = ((DependencyType, PackageName) -> Bool)
-> [(DependencyType, PackageName)]
-> [(DependencyType, PackageName)]
forall a. (a -> Bool) -> [a] -> [a]
filter (\(DependencyType
_, PackageName
x) -> PackageName -> Bool
ignoreSingle PackageName
x) ([(DependencyType, PackageName)]
-> [(DependencyType, PackageName)])
-> ([(UnqualComponentName, [PackageName])]
-> [(DependencyType, PackageName)])
-> [(UnqualComponentName, [PackageName])]
-> [(DependencyType, PackageName)]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [(DependencyType, [PackageName])]
-> [(DependencyType, PackageName)]
flatten ([(DependencyType, [PackageName])]
-> [(DependencyType, PackageName)])
-> ([(UnqualComponentName, [PackageName])]
-> [(DependencyType, [PackageName])])
-> [(UnqualComponentName, [PackageName])]
-> [(DependencyType, PackageName)]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (UnqualComponentName -> DependencyType)
-> [(UnqualComponentName, [PackageName])]
-> [(DependencyType, [PackageName])]
uname UnqualComponentName -> DependencyType
k
filteredLibDeps :: [PackageName]
filteredLibDeps = [PackageName] -> [PackageName]
ignore [PackageName]
libDeps
filteredLibToolsDeps :: [PackageName]
filteredLibToolsDeps = [PackageName] -> [PackageName]
ignore [PackageName]
libToolsDeps
filteredExeDeps :: [(DependencyType, PackageName)]
filteredExeDeps = (UnqualComponentName -> DependencyType)
-> [(UnqualComponentName, [PackageName])]
-> [(DependencyType, PackageName)]
ignoreFlatten UnqualComponentName -> DependencyType
CExe [(UnqualComponentName, [PackageName])]
exeDeps
filteredExeToolsDeps :: [(DependencyType, PackageName)]
filteredExeToolsDeps = (UnqualComponentName -> DependencyType)
-> [(UnqualComponentName, [PackageName])]
-> [(DependencyType, PackageName)]
ignoreFlatten UnqualComponentName -> DependencyType
CExeBuildTools [(UnqualComponentName, [PackageName])]
exeToolsDeps
filteredTestDeps :: [(DependencyType, PackageName)]
filteredTestDeps = (UnqualComponentName -> DependencyType)
-> [(UnqualComponentName, [PackageName])]
-> [(DependencyType, PackageName)]
ignoreFlatten UnqualComponentName -> DependencyType
CTest [(UnqualComponentName, [PackageName])]
testDeps
filteredTestToolsDeps :: [(DependencyType, PackageName)]
filteredTestToolsDeps = (UnqualComponentName -> DependencyType)
-> [(UnqualComponentName, [PackageName])]
-> [(DependencyType, PackageName)]
ignoreFlatten UnqualComponentName -> DependencyType
CTest [(UnqualComponentName, [PackageName])]
testToolsDeps
filteredSubLibDeps :: [(DependencyType, PackageName)]
filteredSubLibDeps = (UnqualComponentName -> DependencyType)
-> [(UnqualComponentName, [PackageName])]
-> [(DependencyType, PackageName)]
ignoreFlatten UnqualComponentName -> DependencyType
CSubLibs [(UnqualComponentName, [PackageName])]
subLibDeps
filteredSubLibToolsDeps :: [(DependencyType, PackageName)]
filteredSubLibToolsDeps = (UnqualComponentName -> DependencyType)
-> [(UnqualComponentName, [PackageName])]
-> [(DependencyType, PackageName)]
ignoreFlatten UnqualComponentName -> DependencyType
CSubLibsBuildTools [(UnqualComponentName, [PackageName])]
subLibToolsDeps
filteredSetupDeps :: [PackageName]
filteredSetupDeps = [PackageName] -> [PackageName]
ignore [PackageName]
setupDeps
filteredSubLibDepsNames :: [PackageName]
filteredSubLibDepsNames = ((UnqualComponentName, [PackageName]) -> PackageName)
-> [(UnqualComponentName, [PackageName])] -> [PackageName]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (UnqualComponentName -> PackageName
unqualComponentNameToPackageName (UnqualComponentName -> PackageName)
-> ((UnqualComponentName, [PackageName]) -> UnqualComponentName)
-> (UnqualComponentName, [PackageName])
-> PackageName
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (UnqualComponentName, [PackageName]) -> UnqualComponentName
forall a b. (a, b) -> a
fst) [(UnqualComponentName, [PackageName])]
subLibDeps
ignoreSubLibs :: [PackageName] -> [PackageName]
ignoreSubLibs = (PackageName -> Bool) -> [PackageName] -> [PackageName]
forall a. (a -> Bool) -> [a] -> [a]
filter (PackageName -> [PackageName] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`notElem` [PackageName]
filteredSubLibDepsNames)
ignoreResolved :: [PackageName] -> [PackageName]
ignoreResolved = (PackageName -> Bool) -> [PackageName] -> [PackageName]
forall a. (a -> Bool) -> [a] -> [a]
filter (PackageName -> Set PackageName -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`notElem` Set PackageName
resolved)
currentLib :: AdjacencyMap (Set DependencyType) PackageName
currentLib = [(Set DependencyType, PackageName, PackageName)]
-> AdjacencyMap (Set DependencyType) PackageName
forall e a.
(Eq e, Monoid e, Ord a) =>
[(e, a, a)] -> AdjacencyMap e a
G.edges ([(Set DependencyType, PackageName, PackageName)]
-> AdjacencyMap (Set DependencyType) PackageName)
-> [(Set DependencyType, PackageName, PackageName)]
-> AdjacencyMap (Set DependencyType) PackageName
forall a b. (a -> b) -> a -> b
$ [Set DependencyType]
-> [PackageName]
-> [PackageName]
-> [(Set DependencyType, PackageName, PackageName)]
forall a b c. [a] -> [b] -> [c] -> [(a, b, c)]
zip3 (Set DependencyType -> [Set DependencyType]
forall a. a -> [a]
repeat (Set DependencyType -> [Set DependencyType])
-> Set DependencyType -> [Set DependencyType]
forall a b. (a -> b) -> a -> b
$ DependencyType -> Set DependencyType
forall a. a -> Set a
Set.singleton DependencyType
CLib) (PackageName -> [PackageName]
forall a. a -> [a]
repeat PackageName
name) [PackageName]
filteredLibDeps
currentLibToolDeps :: AdjacencyMap (Set DependencyType) PackageName
currentLibToolDeps = [(Set DependencyType, PackageName, PackageName)]
-> AdjacencyMap (Set DependencyType) PackageName
forall e a.
(Eq e, Monoid e, Ord a) =>
[(e, a, a)] -> AdjacencyMap e a
G.edges ([(Set DependencyType, PackageName, PackageName)]
-> AdjacencyMap (Set DependencyType) PackageName)
-> [(Set DependencyType, PackageName, PackageName)]
-> AdjacencyMap (Set DependencyType) PackageName
forall a b. (a -> b) -> a -> b
$ [Set DependencyType]
-> [PackageName]
-> [PackageName]
-> [(Set DependencyType, PackageName, PackageName)]
forall a b c. [a] -> [b] -> [c] -> [(a, b, c)]
zip3 (Set DependencyType -> [Set DependencyType]
forall a. a -> [a]
repeat (Set DependencyType -> [Set DependencyType])
-> Set DependencyType -> [Set DependencyType]
forall a b. (a -> b) -> a -> b
$ DependencyType -> Set DependencyType
forall a. a -> Set a
Set.singleton DependencyType
CLibBuildTools) (PackageName -> [PackageName]
forall a. a -> [a]
repeat PackageName
name) [PackageName]
filteredLibToolsDeps
currentSetupDeps :: AdjacencyMap (Set DependencyType) PackageName
currentSetupDeps = [(Set DependencyType, PackageName, PackageName)]
-> AdjacencyMap (Set DependencyType) PackageName
forall e a.
(Eq e, Monoid e, Ord a) =>
[(e, a, a)] -> AdjacencyMap e a
G.edges ([(Set DependencyType, PackageName, PackageName)]
-> AdjacencyMap (Set DependencyType) PackageName)
-> [(Set DependencyType, PackageName, PackageName)]
-> AdjacencyMap (Set DependencyType) PackageName
forall a b. (a -> b) -> a -> b
$ [Set DependencyType]
-> [PackageName]
-> [PackageName]
-> [(Set DependencyType, PackageName, PackageName)]
forall a b c. [a] -> [b] -> [c] -> [(a, b, c)]
zip3 (Set DependencyType -> [Set DependencyType]
forall a. a -> [a]
repeat (Set DependencyType -> [Set DependencyType])
-> Set DependencyType -> [Set DependencyType]
forall a b. (a -> b) -> a -> b
$ DependencyType -> Set DependencyType
forall a. a -> Set a
Set.singleton DependencyType
CSetup) (PackageName -> [PackageName]
forall a. a -> [a]
repeat PackageName
name) [PackageName]
filteredSetupDeps
componentialEdges :: [(DependencyType, PackageName)]
-> AdjacencyMap (Set DependencyType) PackageName
componentialEdges =
[(Set DependencyType, PackageName, PackageName)]
-> AdjacencyMap (Set DependencyType) PackageName
forall e a.
(Eq e, Monoid e, Ord a) =>
[(e, a, a)] -> AdjacencyMap e a
G.edges
([(Set DependencyType, PackageName, PackageName)]
-> AdjacencyMap (Set DependencyType) PackageName)
-> ([(DependencyType, PackageName)]
-> [(Set DependencyType, PackageName, PackageName)])
-> [(DependencyType, PackageName)]
-> AdjacencyMap (Set DependencyType) PackageName
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((DependencyType, PackageName, PackageName)
-> (Set DependencyType, PackageName, PackageName))
-> [(DependencyType, PackageName, PackageName)]
-> [(Set DependencyType, PackageName, PackageName)]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\(DependencyType
x, PackageName
y, PackageName
z) -> (DependencyType -> Set DependencyType
forall a. a -> Set a
Set.singleton DependencyType
x, PackageName
y, PackageName
z))
([(DependencyType, PackageName, PackageName)]
-> [(Set DependencyType, PackageName, PackageName)])
-> ([(DependencyType, PackageName)]
-> [(DependencyType, PackageName, PackageName)])
-> [(DependencyType, PackageName)]
-> [(Set DependencyType, PackageName, PackageName)]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [(DependencyType, PackageName)]
-> [(DependencyType, PackageName, PackageName)]
withThisName
currentSubLibs :: AdjacencyMap (Set DependencyType) PackageName
currentSubLibs = [(DependencyType, PackageName)]
-> AdjacencyMap (Set DependencyType) PackageName
componentialEdges [(DependencyType, PackageName)]
filteredSubLibDeps
currentSubLibsTools :: AdjacencyMap (Set DependencyType) PackageName
currentSubLibsTools = [(DependencyType, PackageName)]
-> AdjacencyMap (Set DependencyType) PackageName
componentialEdges [(DependencyType, PackageName)]
filteredSubLibToolsDeps
currentExe :: AdjacencyMap (Set DependencyType) PackageName
currentExe = [(DependencyType, PackageName)]
-> AdjacencyMap (Set DependencyType) PackageName
componentialEdges [(DependencyType, PackageName)]
filteredExeDeps
currentExeTools :: AdjacencyMap (Set DependencyType) PackageName
currentExeTools = [(DependencyType, PackageName)]
-> AdjacencyMap (Set DependencyType) PackageName
componentialEdges [(DependencyType, PackageName)]
filteredExeToolsDeps
currentTest :: AdjacencyMap (Set DependencyType) PackageName
currentTest = [(DependencyType, PackageName)]
-> AdjacencyMap (Set DependencyType) PackageName
componentialEdges [(DependencyType, PackageName)]
filteredTestDeps
currentTestTools :: AdjacencyMap (Set DependencyType) PackageName
currentTestTools = [(DependencyType, PackageName)]
-> AdjacencyMap (Set DependencyType) PackageName
componentialEdges [(DependencyType, PackageName)]
filteredTestToolsDeps
currentSysDeps :: [SystemDependency]
currentSysDeps = [SystemDependency] -> [SystemDependency]
forall a. Ord a => [a] -> [a]
nubOrd ([SystemDependency] -> [SystemDependency])
-> [SystemDependency] -> [SystemDependency]
forall a b. (a -> b) -> a -> b
$ [SystemDependency]
libSysDeps [SystemDependency] -> [SystemDependency] -> [SystemDependency]
forall a. Semigroup a => a -> a -> a
<> [SystemDependency]
subLibSysDeps [SystemDependency] -> [SystemDependency] -> [SystemDependency]
forall a. Semigroup a => a -> a -> a
<> [SystemDependency]
exeSysDeps [SystemDependency] -> [SystemDependency] -> [SystemDependency]
forall a. Semigroup a => a -> a -> a
<> [SystemDependency]
testSysDeps
processNext :: [PackageName]
-> Sem
r
[(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])]
processNext = (PackageName
-> Sem
r
(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency]))
-> [PackageName]
-> Sem
r
[(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM ([UnqualComponentName]
-> Maybe PackageName
-> PackageName
-> Sem
r
(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])
forall (r :: [Effect]).
(HasCallStack,
Members
'[KnownGHCVersion, HackageEnv, FlagAssignmentsEnv, WithMyErr,
DependencyRecord, State (Set PackageName), Trace]
r) =>
[UnqualComponentName]
-> Maybe PackageName
-> PackageName
-> Sem
r
(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])
getDependencies [UnqualComponentName]
skip (PackageName -> Maybe PackageName
forall a. a -> Maybe a
Just PackageName
name)) ([PackageName]
-> Sem
r
[(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])])
-> ([PackageName] -> [PackageName])
-> [PackageName]
-> Sem
r
[(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [PackageName] -> [PackageName]
ignoreResolved ([PackageName] -> [PackageName])
-> ([PackageName] -> [PackageName])
-> [PackageName]
-> [PackageName]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [PackageName] -> [PackageName]
ignoreSubLibs
<+> :: AdjacencyMap (Set DependencyType) PackageName
-> AdjacencyMap (Set DependencyType) PackageName
-> AdjacencyMap (Set DependencyType) PackageName
(<+>) = AdjacencyMap (Set DependencyType) PackageName
-> AdjacencyMap (Set DependencyType) PackageName
-> AdjacencyMap (Set DependencyType) PackageName
forall e a.
(Eq e, Monoid e, Ord a) =>
AdjacencyMap e a -> AdjacencyMap e a -> AdjacencyMap e a
G.overlay
[(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])]
nextLib <- [PackageName]
-> Sem
r
[(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])]
processNext [PackageName]
filteredLibDeps
[(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])]
nextSetup <- [PackageName]
-> Sem
r
[(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])]
processNext [PackageName]
filteredSetupDeps
[(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])]
nextExe <- [PackageName]
-> Sem
r
[(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])]
processNext ([PackageName]
-> Sem
r
[(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])])
-> [PackageName]
-> Sem
r
[(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])]
forall a b. (a -> b) -> a -> b
$ ((DependencyType, PackageName) -> PackageName)
-> [(DependencyType, PackageName)] -> [PackageName]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (DependencyType, PackageName) -> PackageName
forall a b. (a, b) -> b
snd [(DependencyType, PackageName)]
filteredExeDeps
[(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])]
nextTest <- [PackageName]
-> Sem
r
[(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])]
processNext ([PackageName]
-> Sem
r
[(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])])
-> [PackageName]
-> Sem
r
[(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])]
forall a b. (a -> b) -> a -> b
$ ((DependencyType, PackageName) -> PackageName)
-> [(DependencyType, PackageName)] -> [PackageName]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (DependencyType, PackageName) -> PackageName
forall a b. (a, b) -> b
snd [(DependencyType, PackageName)]
filteredTestDeps
[(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])]
nextSubLibs <- (PackageName
-> Sem
r
(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency]))
-> [PackageName]
-> Sem
r
[(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM ([UnqualComponentName]
-> Maybe PackageName
-> PackageName
-> Sem
r
(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])
forall (r :: [Effect]).
(HasCallStack,
Members
'[KnownGHCVersion, HackageEnv, FlagAssignmentsEnv, WithMyErr,
DependencyRecord, State (Set PackageName), Trace]
r) =>
[UnqualComponentName]
-> Maybe PackageName
-> PackageName
-> Sem
r
(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])
getDependencies [UnqualComponentName]
skip (PackageName -> Maybe PackageName
forall a. a -> Maybe a
Just PackageName
name)) ([PackageName]
-> Sem
r
[(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])])
-> [PackageName]
-> Sem
r
[(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])]
forall a b. (a -> b) -> a -> b
$ ((DependencyType, PackageName) -> PackageName)
-> [(DependencyType, PackageName)] -> [PackageName]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (DependencyType, PackageName) -> PackageName
forall a b. (a, b) -> b
snd [(DependencyType, PackageName)]
filteredSubLibDeps
let temp :: [[(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])]]
temp = [[(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])]
nextLib, [(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])]
nextSetup, [(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])]
nextExe, [(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])]
nextTest, [(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])]
nextSubLibs]
nexts :: AdjacencyMap (Set DependencyType) PackageName
nexts = [AdjacencyMap (Set DependencyType) PackageName]
-> AdjacencyMap (Set DependencyType) PackageName
forall e a.
(Eq e, Monoid e, Ord a) =>
[AdjacencyMap e a] -> AdjacencyMap e a
G.overlays ([AdjacencyMap (Set DependencyType) PackageName]
-> AdjacencyMap (Set DependencyType) PackageName)
-> [AdjacencyMap (Set DependencyType) PackageName]
-> AdjacencyMap (Set DependencyType) PackageName
forall a b. (a -> b) -> a -> b
$ [[(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])]]
temp [[(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])]]
-> Getting
[(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])]
[[(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])]]
[(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])]
-> [(AdjacencyMap (Set DependencyType) PackageName,
Set PackageName, Map PackageName [SystemDependency])]
forall s a. s -> Getting a s a -> a
^. Getting
[(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])]
[[(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])]]
[(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])]
forall s t a b. Each s t a b => Traversal s t a b
each [(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])]
-> Getting
(Endo [AdjacencyMap (Set DependencyType) PackageName])
[(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])]
(AdjacencyMap (Set DependencyType) PackageName)
-> [AdjacencyMap (Set DependencyType) PackageName]
forall s a. s -> Getting (Endo [a]) s a -> [a]
^.. ((AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])
-> Const
(Endo [AdjacencyMap (Set DependencyType) PackageName])
(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency]))
-> [(AdjacencyMap (Set DependencyType) PackageName,
Set PackageName, Map PackageName [SystemDependency])]
-> Const
(Endo [AdjacencyMap (Set DependencyType) PackageName])
[(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])]
forall s t a b. Each s t a b => Traversal s t a b
each (((AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])
-> Const
(Endo [AdjacencyMap (Set DependencyType) PackageName])
(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency]))
-> [(AdjacencyMap (Set DependencyType) PackageName,
Set PackageName, Map PackageName [SystemDependency])]
-> Const
(Endo [AdjacencyMap (Set DependencyType) PackageName])
[(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])])
-> ((AdjacencyMap (Set DependencyType) PackageName
-> Const
(Endo [AdjacencyMap (Set DependencyType) PackageName])
(AdjacencyMap (Set DependencyType) PackageName))
-> (AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])
-> Const
(Endo [AdjacencyMap (Set DependencyType) PackageName])
(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency]))
-> Getting
(Endo [AdjacencyMap (Set DependencyType) PackageName])
[(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])]
(AdjacencyMap (Set DependencyType) PackageName)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (AdjacencyMap (Set DependencyType) PackageName
-> Const
(Endo [AdjacencyMap (Set DependencyType) PackageName])
(AdjacencyMap (Set DependencyType) PackageName))
-> (AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])
-> Const
(Endo [AdjacencyMap (Set DependencyType) PackageName])
(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])
forall s t a b. Field1 s t a b => Lens s t a b
_1
subsubs :: Set PackageName
subsubs = [[(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])]]
temp [[(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])]]
-> Getting
[(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])]
[[(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])]]
[(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])]
-> [(AdjacencyMap (Set DependencyType) PackageName,
Set PackageName, Map PackageName [SystemDependency])]
forall s a. s -> Getting a s a -> a
^. Getting
[(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])]
[[(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])]]
[(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])]
forall s t a b. Each s t a b => Traversal s t a b
each [(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])]
-> Getting
(Endo [Set PackageName])
[(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])]
(Set PackageName)
-> [Set PackageName]
forall s a. s -> Getting (Endo [a]) s a -> [a]
^.. ((AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])
-> Const
(Endo [Set PackageName])
(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency]))
-> [(AdjacencyMap (Set DependencyType) PackageName,
Set PackageName, Map PackageName [SystemDependency])]
-> Const
(Endo [Set PackageName])
[(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])]
forall s t a b. Each s t a b => Traversal s t a b
each (((AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])
-> Const
(Endo [Set PackageName])
(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency]))
-> [(AdjacencyMap (Set DependencyType) PackageName,
Set PackageName, Map PackageName [SystemDependency])]
-> Const
(Endo [Set PackageName])
[(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])])
-> ((Set PackageName
-> Const (Endo [Set PackageName]) (Set PackageName))
-> (AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])
-> Const
(Endo [Set PackageName])
(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency]))
-> Getting
(Endo [Set PackageName])
[(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])]
(Set PackageName)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Set PackageName
-> Const (Endo [Set PackageName]) (Set PackageName))
-> (AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])
-> Const
(Endo [Set PackageName])
(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])
forall s t a b. Field2 s t a b => Lens s t a b
_2 [Set PackageName]
-> Getting (Set PackageName) [Set PackageName] (Set PackageName)
-> Set PackageName
forall s a. s -> Getting a s a -> a
^. Getting (Set PackageName) [Set PackageName] (Set PackageName)
forall s t a b. Each s t a b => Traversal s t a b
each
nextSys :: Map PackageName [SystemDependency]
nextSys = [[(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])]]
temp [[(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])]]
-> Getting
[(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])]
[[(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])]]
[(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])]
-> [(AdjacencyMap (Set DependencyType) PackageName,
Set PackageName, Map PackageName [SystemDependency])]
forall s a. s -> Getting a s a -> a
^. Getting
[(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])]
[[(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])]]
[(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])]
forall s t a b. Each s t a b => Traversal s t a b
each [(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])]
-> Getting
(Endo [Map PackageName [SystemDependency]])
[(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])]
(Map PackageName [SystemDependency])
-> [Map PackageName [SystemDependency]]
forall s a. s -> Getting (Endo [a]) s a -> [a]
^.. ((AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])
-> Const
(Endo [Map PackageName [SystemDependency]])
(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency]))
-> [(AdjacencyMap (Set DependencyType) PackageName,
Set PackageName, Map PackageName [SystemDependency])]
-> Const
(Endo [Map PackageName [SystemDependency]])
[(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])]
forall s t a b. Each s t a b => Traversal s t a b
each (((AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])
-> Const
(Endo [Map PackageName [SystemDependency]])
(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency]))
-> [(AdjacencyMap (Set DependencyType) PackageName,
Set PackageName, Map PackageName [SystemDependency])]
-> Const
(Endo [Map PackageName [SystemDependency]])
[(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])])
-> ((Map PackageName [SystemDependency]
-> Const
(Endo [Map PackageName [SystemDependency]])
(Map PackageName [SystemDependency]))
-> (AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])
-> Const
(Endo [Map PackageName [SystemDependency]])
(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency]))
-> Getting
(Endo [Map PackageName [SystemDependency]])
[(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])]
(Map PackageName [SystemDependency])
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Map PackageName [SystemDependency]
-> Const
(Endo [Map PackageName [SystemDependency]])
(Map PackageName [SystemDependency]))
-> (AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])
-> Const
(Endo [Map PackageName [SystemDependency]])
(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])
forall s t a b. Field3 s t a b => Lens s t a b
_3 [Map PackageName [SystemDependency]]
-> Getting
(Map PackageName [SystemDependency])
[Map PackageName [SystemDependency]]
(Map PackageName [SystemDependency])
-> Map PackageName [SystemDependency]
forall s a. s -> Getting a s a -> a
^. Getting
(Map PackageName [SystemDependency])
[Map PackageName [SystemDependency]]
(Map PackageName [SystemDependency])
forall s t a b. Each s t a b => Traversal s t a b
each
(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])
-> Sem
r
(AdjacencyMap (Set DependencyType) PackageName, Set PackageName,
Map PackageName [SystemDependency])
forall (m :: * -> *) a. Monad m => a -> m a
return
( AdjacencyMap (Set DependencyType) PackageName
currentLib
AdjacencyMap (Set DependencyType) PackageName
-> AdjacencyMap (Set DependencyType) PackageName
-> AdjacencyMap (Set DependencyType) PackageName
<+> AdjacencyMap (Set DependencyType) PackageName
currentLibToolDeps
AdjacencyMap (Set DependencyType) PackageName
-> AdjacencyMap (Set DependencyType) PackageName
-> AdjacencyMap (Set DependencyType) PackageName
<+> AdjacencyMap (Set DependencyType) PackageName
currentSetupDeps
AdjacencyMap (Set DependencyType) PackageName
-> AdjacencyMap (Set DependencyType) PackageName
-> AdjacencyMap (Set DependencyType) PackageName
<+> AdjacencyMap (Set DependencyType) PackageName
currentExe
AdjacencyMap (Set DependencyType) PackageName
-> AdjacencyMap (Set DependencyType) PackageName
-> AdjacencyMap (Set DependencyType) PackageName
<+> AdjacencyMap (Set DependencyType) PackageName
currentExeTools
AdjacencyMap (Set DependencyType) PackageName
-> AdjacencyMap (Set DependencyType) PackageName
-> AdjacencyMap (Set DependencyType) PackageName
<+> AdjacencyMap (Set DependencyType) PackageName
currentTest
AdjacencyMap (Set DependencyType) PackageName
-> AdjacencyMap (Set DependencyType) PackageName
-> AdjacencyMap (Set DependencyType) PackageName
<+> AdjacencyMap (Set DependencyType) PackageName
currentTestTools
AdjacencyMap (Set DependencyType) PackageName
-> AdjacencyMap (Set DependencyType) PackageName
-> AdjacencyMap (Set DependencyType) PackageName
<+> AdjacencyMap (Set DependencyType) PackageName
currentSubLibs
AdjacencyMap (Set DependencyType) PackageName
-> AdjacencyMap (Set DependencyType) PackageName
-> AdjacencyMap (Set DependencyType) PackageName
<+> AdjacencyMap (Set DependencyType) PackageName
currentSubLibsTools
AdjacencyMap (Set DependencyType) PackageName
-> AdjacencyMap (Set DependencyType) PackageName
-> AdjacencyMap (Set DependencyType) PackageName
<+> AdjacencyMap (Set DependencyType) PackageName
nexts,
[PackageName] -> Set PackageName
forall a. Ord a => [a] -> Set a
Set.fromList [PackageName]
filteredSubLibDepsNames Set PackageName -> Set PackageName -> Set PackageName
forall a. Semigroup a => a -> a -> a
<> Set PackageName
subsubs,
(if [SystemDependency] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null [SystemDependency]
currentSysDeps then Map PackageName [SystemDependency]
forall k a. Map k a
Map.empty else PackageName
-> [SystemDependency] -> Map PackageName [SystemDependency]
forall k a. k -> a -> Map k a
Map.singleton PackageName
name [SystemDependency]
currentSysDeps) Map PackageName [SystemDependency]
-> Map PackageName [SystemDependency]
-> Map PackageName [SystemDependency]
forall a. Semigroup a => a -> a -> a
<> Map PackageName [SystemDependency]
nextSys
)
collectLibDeps ::
(Members [KnownGHCVersion, FlagAssignmentsEnv, DependencyRecord, Trace] r, Show a, Monoid a) =>
([(PackageName, VersionRange)] -> a) ->
GenericPackageDescription ->
Sem r (a, a, [SystemDependency])
collectLibDeps :: ([(PackageName, VersionRange)] -> a)
-> GenericPackageDescription -> Sem r (a, a, [SystemDependency])
collectLibDeps [(PackageName, VersionRange)] -> a
k GenericPackageDescription
cabal = do
case GenericPackageDescription
cabal GenericPackageDescription
-> (GenericPackageDescription
-> Maybe (CondTree ConfVar [Dependency] Library))
-> Maybe (CondTree ConfVar [Dependency] Library)
forall a b. a -> (a -> b) -> b
& GenericPackageDescription
-> Maybe (CondTree ConfVar [Dependency] Library)
condLibrary of
Just CondTree ConfVar [Dependency] Library
lib -> do
let name :: PackageName
name = GenericPackageDescription -> PackageName
getPkgName' GenericPackageDescription
cabal
String -> Sem r ()
forall (r :: [Effect]). Member Trace r => String -> Sem r ()
trace' (String -> Sem r ()) -> String -> Sem r ()
forall a b. (a -> b) -> a -> b
$ String
"Getting libs dependencies of " String -> String -> String
forall a. Semigroup a => a -> a -> a
<> PackageName -> String
forall a. Show a => a -> String
show PackageName
name
BuildInfo
info <- GenericPackageDescription
-> CondTree ConfVar [Dependency] Library -> Sem r BuildInfo
forall k (r :: [Effect]).
(HasCallStack, Semigroup k, HasBuildInfo k,
Members '[KnownGHCVersion, FlagAssignmentsEnv, Trace] r) =>
GenericPackageDescription
-> CondTree ConfVar [Dependency] k -> Sem r BuildInfo
evalConditionTree GenericPackageDescription
cabal CondTree ConfVar [Dependency] Library
lib
let libDeps :: [(PackageName, VersionRange)]
libDeps = Dependency -> (PackageName, VersionRange)
unDepV (Dependency -> (PackageName, VersionRange))
-> [Dependency] -> [(PackageName, VersionRange)]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> BuildInfo -> [Dependency]
buildDependsIfBuild BuildInfo
info
toolDeps :: [(PackageName, VersionRange)]
toolDeps = ([LegacyExeDependency], [ExeDependency])
-> [(PackageName, VersionRange)]
unBuildTools (([LegacyExeDependency], [ExeDependency])
-> [(PackageName, VersionRange)])
-> ([LegacyExeDependency], [ExeDependency])
-> [(PackageName, VersionRange)]
forall a b. (a -> b) -> a -> b
$ BuildInfo -> ([LegacyExeDependency], [ExeDependency])
buildToolsAndbuildToolDependsIfBuild BuildInfo
info
systemDeps :: [SystemDependency]
systemDeps = ([PkgconfigDependency], [String]) -> [SystemDependency]
unSystemDependency (([PkgconfigDependency], [String]) -> [SystemDependency])
-> ([PkgconfigDependency], [String]) -> [SystemDependency]
forall a b. (a -> b) -> a -> b
$ BuildInfo -> ([PkgconfigDependency], [String])
pkgconfigDependsAndExtraLibsIfBuild BuildInfo
info
((PackageName, VersionRange) -> Sem r ())
-> [(PackageName, VersionRange)] -> Sem r ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ ((PackageName -> VersionRange -> Sem r ())
-> (PackageName, VersionRange) -> Sem r ()
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry PackageName -> VersionRange -> Sem r ()
forall (r :: [Effect]).
Member DependencyRecord r =>
PackageName -> VersionRange -> Sem r ()
updateDependencyRecord) [(PackageName, VersionRange)]
libDeps
((PackageName, VersionRange) -> Sem r ())
-> [(PackageName, VersionRange)] -> Sem r ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ ((PackageName -> VersionRange -> Sem r ())
-> (PackageName, VersionRange) -> Sem r ()
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry PackageName -> VersionRange -> Sem r ()
forall (r :: [Effect]).
Member DependencyRecord r =>
PackageName -> VersionRange -> Sem r ()
updateDependencyRecord) [(PackageName, VersionRange)]
toolDeps
let result :: (a, a, [SystemDependency])
result = ([(PackageName, VersionRange)] -> a
k [(PackageName, VersionRange)]
libDeps, [(PackageName, VersionRange)] -> a
k [(PackageName, VersionRange)]
toolDeps, [SystemDependency]
systemDeps)
String -> Sem r ()
forall (r :: [Effect]). Member Trace r => String -> Sem r ()
trace' (String -> Sem r ()) -> String -> Sem r ()
forall a b. (a -> b) -> a -> b
$ String
"Found: " String -> String -> String
forall a. Semigroup a => a -> a -> a
<> (a, a, [SystemDependency]) -> String
forall a. Show a => a -> String
show (a, a, [SystemDependency])
result
Sem r ()
forall (r :: [Effect]). (HasCallStack, Member Trace r) => Sem r ()
traceCallStack
(a, a, [SystemDependency]) -> Sem r (a, a, [SystemDependency])
forall (m :: * -> *) a. Monad m => a -> m a
return (a, a, [SystemDependency])
result
Maybe (CondTree ConfVar [Dependency] Library)
Nothing -> (a, a, [SystemDependency]) -> Sem r (a, a, [SystemDependency])
forall (m :: * -> *) a. Monad m => a -> m a
return (a, a, [SystemDependency])
forall a. Monoid a => a
mempty
collectComponentialDeps ::
(HasCallStack, Semigroup k, L.HasBuildInfo k, Members [KnownGHCVersion, FlagAssignmentsEnv, DependencyRecord, Trace] r, Show a) =>
String ->
(GenericPackageDescription -> [(UnqualComponentName, CondTree ConfVar [Dependency] k)]) ->
([(UnqualComponentName, [(PackageName, VersionRange)])] -> a) ->
GenericPackageDescription ->
[UnqualComponentName] ->
Sem r (a, a, [SystemDependency])
collectComponentialDeps :: String
-> (GenericPackageDescription
-> [(UnqualComponentName, CondTree ConfVar [Dependency] k)])
-> ([(UnqualComponentName, [(PackageName, VersionRange)])] -> a)
-> GenericPackageDescription
-> [UnqualComponentName]
-> Sem r (a, a, [SystemDependency])
collectComponentialDeps String
tag GenericPackageDescription
-> [(UnqualComponentName, CondTree ConfVar [Dependency] k)]
f [(UnqualComponentName, [(PackageName, VersionRange)])] -> a
k GenericPackageDescription
cabal [UnqualComponentName]
skip = do
let conds :: [(UnqualComponentName, CondTree ConfVar [Dependency] k)]
conds = GenericPackageDescription
cabal GenericPackageDescription
-> (GenericPackageDescription
-> [(UnqualComponentName, CondTree ConfVar [Dependency] k)])
-> [(UnqualComponentName, CondTree ConfVar [Dependency] k)]
forall a b. a -> (a -> b) -> b
& GenericPackageDescription
-> [(UnqualComponentName, CondTree ConfVar [Dependency] k)]
f
name :: PackageName
name = GenericPackageDescription -> PackageName
getPkgName' GenericPackageDescription
cabal
String -> Sem r ()
forall (r :: [Effect]). Member Trace r => String -> Sem r ()
trace' (String -> Sem r ()) -> String -> Sem r ()
forall a b. (a -> b) -> a -> b
$ String
"Getting " String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
tag String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
" dependencies of " String -> String -> String
forall a. Semigroup a => a -> a -> a
<> PackageName -> String
forall a. Show a => a -> String
show PackageName
name
[(UnqualComponentName, BuildInfo)]
info <- ((UnqualComponentName, BuildInfo) -> Bool)
-> [(UnqualComponentName, BuildInfo)]
-> [(UnqualComponentName, BuildInfo)]
forall a. (a -> Bool) -> [a] -> [a]
filter (Bool -> Bool
not (Bool -> Bool)
-> ((UnqualComponentName, BuildInfo) -> Bool)
-> (UnqualComponentName, BuildInfo)
-> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (UnqualComponentName -> [UnqualComponentName] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`elem` [UnqualComponentName]
skip) (UnqualComponentName -> Bool)
-> ((UnqualComponentName, BuildInfo) -> UnqualComponentName)
-> (UnqualComponentName, BuildInfo)
-> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (UnqualComponentName, BuildInfo) -> UnqualComponentName
forall a b. (a, b) -> a
fst) ([(UnqualComponentName, BuildInfo)]
-> [(UnqualComponentName, BuildInfo)])
-> ([BuildInfo] -> [(UnqualComponentName, BuildInfo)])
-> [BuildInfo]
-> [(UnqualComponentName, BuildInfo)]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [UnqualComponentName]
-> [BuildInfo] -> [(UnqualComponentName, BuildInfo)]
forall a b. [a] -> [b] -> [(a, b)]
zip ([(UnqualComponentName, CondTree ConfVar [Dependency] k)]
conds [(UnqualComponentName, CondTree ConfVar [Dependency] k)]
-> ((UnqualComponentName, CondTree ConfVar [Dependency] k)
-> UnqualComponentName)
-> [UnqualComponentName]
forall (f :: * -> *) a b. Functor f => f a -> (a -> b) -> f b
<&> (UnqualComponentName, CondTree ConfVar [Dependency] k)
-> UnqualComponentName
forall a b. (a, b) -> a
fst) ([BuildInfo] -> [(UnqualComponentName, BuildInfo)])
-> Sem r [BuildInfo] -> Sem r [(UnqualComponentName, BuildInfo)]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ((UnqualComponentName, CondTree ConfVar [Dependency] k)
-> Sem r BuildInfo)
-> [(UnqualComponentName, CondTree ConfVar [Dependency] k)]
-> Sem r [BuildInfo]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM (GenericPackageDescription
-> CondTree ConfVar [Dependency] k -> Sem r BuildInfo
forall k (r :: [Effect]).
(HasCallStack, Semigroup k, HasBuildInfo k,
Members '[KnownGHCVersion, FlagAssignmentsEnv, Trace] r) =>
GenericPackageDescription
-> CondTree ConfVar [Dependency] k -> Sem r BuildInfo
evalConditionTree GenericPackageDescription
cabal (CondTree ConfVar [Dependency] k -> Sem r BuildInfo)
-> ((UnqualComponentName, CondTree ConfVar [Dependency] k)
-> CondTree ConfVar [Dependency] k)
-> (UnqualComponentName, CondTree ConfVar [Dependency] k)
-> Sem r BuildInfo
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (UnqualComponentName, CondTree ConfVar [Dependency] k)
-> CondTree ConfVar [Dependency] k
forall a b. (a, b) -> b
snd) [(UnqualComponentName, CondTree ConfVar [Dependency] k)]
conds
let deps :: [(UnqualComponentName, [(PackageName, VersionRange)])]
deps = [(UnqualComponentName, BuildInfo)]
info [(UnqualComponentName, BuildInfo)]
-> ((UnqualComponentName, BuildInfo)
-> (UnqualComponentName, [(PackageName, VersionRange)]))
-> [(UnqualComponentName, [(PackageName, VersionRange)])]
forall (f :: * -> *) a b. Functor f => f a -> (a -> b) -> f b
<&> (BuildInfo -> Identity [(PackageName, VersionRange)])
-> (UnqualComponentName, BuildInfo)
-> Identity (UnqualComponentName, [(PackageName, VersionRange)])
forall s t a b. Field2 s t a b => Lens s t a b
_2 ((BuildInfo -> Identity [(PackageName, VersionRange)])
-> (UnqualComponentName, BuildInfo)
-> Identity (UnqualComponentName, [(PackageName, VersionRange)]))
-> (BuildInfo -> [(PackageName, VersionRange)])
-> (UnqualComponentName, BuildInfo)
-> (UnqualComponentName, [(PackageName, VersionRange)])
forall s t a b. ASetter s t a b -> (a -> b) -> s -> t
%~ ((Dependency -> (PackageName, VersionRange))
-> [Dependency] -> [(PackageName, VersionRange)]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Dependency -> (PackageName, VersionRange)
unDepV ([Dependency] -> [(PackageName, VersionRange)])
-> (BuildInfo -> [Dependency])
-> BuildInfo
-> [(PackageName, VersionRange)]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. BuildInfo -> [Dependency]
buildDependsIfBuild)
toolDeps :: [(UnqualComponentName, [(PackageName, VersionRange)])]
toolDeps = [(UnqualComponentName, BuildInfo)]
info [(UnqualComponentName, BuildInfo)]
-> ((UnqualComponentName, BuildInfo)
-> (UnqualComponentName, [(PackageName, VersionRange)]))
-> [(UnqualComponentName, [(PackageName, VersionRange)])]
forall (f :: * -> *) a b. Functor f => f a -> (a -> b) -> f b
<&> (BuildInfo -> Identity [(PackageName, VersionRange)])
-> (UnqualComponentName, BuildInfo)
-> Identity (UnqualComponentName, [(PackageName, VersionRange)])
forall s t a b. Field2 s t a b => Lens s t a b
_2 ((BuildInfo -> Identity [(PackageName, VersionRange)])
-> (UnqualComponentName, BuildInfo)
-> Identity (UnqualComponentName, [(PackageName, VersionRange)]))
-> (BuildInfo -> [(PackageName, VersionRange)])
-> (UnqualComponentName, BuildInfo)
-> (UnqualComponentName, [(PackageName, VersionRange)])
forall s t a b. ASetter s t a b -> (a -> b) -> s -> t
%~ (([LegacyExeDependency], [ExeDependency])
-> [(PackageName, VersionRange)]
unBuildTools (([LegacyExeDependency], [ExeDependency])
-> [(PackageName, VersionRange)])
-> (BuildInfo -> ([LegacyExeDependency], [ExeDependency]))
-> BuildInfo
-> [(PackageName, VersionRange)]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. BuildInfo -> ([LegacyExeDependency], [ExeDependency])
buildToolsAndbuildToolDependsIfBuild)
sysDeps :: [(UnqualComponentName, [SystemDependency])]
sysDeps = [(UnqualComponentName, BuildInfo)]
info [(UnqualComponentName, BuildInfo)]
-> ((UnqualComponentName, BuildInfo)
-> (UnqualComponentName, [SystemDependency]))
-> [(UnqualComponentName, [SystemDependency])]
forall (f :: * -> *) a b. Functor f => f a -> (a -> b) -> f b
<&> (BuildInfo -> Identity [SystemDependency])
-> (UnqualComponentName, BuildInfo)
-> Identity (UnqualComponentName, [SystemDependency])
forall s t a b. Field2 s t a b => Lens s t a b
_2 ((BuildInfo -> Identity [SystemDependency])
-> (UnqualComponentName, BuildInfo)
-> Identity (UnqualComponentName, [SystemDependency]))
-> (BuildInfo -> [SystemDependency])
-> (UnqualComponentName, BuildInfo)
-> (UnqualComponentName, [SystemDependency])
forall s t a b. ASetter s t a b -> (a -> b) -> s -> t
%~ (([PkgconfigDependency], [String]) -> [SystemDependency]
unSystemDependency (([PkgconfigDependency], [String]) -> [SystemDependency])
-> (BuildInfo -> ([PkgconfigDependency], [String]))
-> BuildInfo
-> [SystemDependency]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. BuildInfo -> ([PkgconfigDependency], [String])
pkgconfigDependsAndExtraLibsIfBuild)
((PackageName, VersionRange) -> Sem r ())
-> [(PackageName, VersionRange)] -> Sem r ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ ((PackageName -> VersionRange -> Sem r ())
-> (PackageName, VersionRange) -> Sem r ()
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry PackageName -> VersionRange -> Sem r ()
forall (r :: [Effect]).
Member DependencyRecord r =>
PackageName -> VersionRange -> Sem r ()
updateDependencyRecord) ([(PackageName, VersionRange)] -> Sem r ())
-> [(PackageName, VersionRange)] -> Sem r ()
forall a b. (a -> b) -> a -> b
$ [(UnqualComponentName, [(PackageName, VersionRange)])]
deps [(UnqualComponentName, [(PackageName, VersionRange)])]
-> Getting
(Endo [[(PackageName, VersionRange)]])
[(UnqualComponentName, [(PackageName, VersionRange)])]
[(PackageName, VersionRange)]
-> [[(PackageName, VersionRange)]]
forall s a. s -> Getting (Endo [a]) s a -> [a]
^.. ((UnqualComponentName, [(PackageName, VersionRange)])
-> Const
(Endo [[(PackageName, VersionRange)]])
(UnqualComponentName, [(PackageName, VersionRange)]))
-> [(UnqualComponentName, [(PackageName, VersionRange)])]
-> Const
(Endo [[(PackageName, VersionRange)]])
[(UnqualComponentName, [(PackageName, VersionRange)])]
forall s t a b. Each s t a b => Traversal s t a b
each (((UnqualComponentName, [(PackageName, VersionRange)])
-> Const
(Endo [[(PackageName, VersionRange)]])
(UnqualComponentName, [(PackageName, VersionRange)]))
-> [(UnqualComponentName, [(PackageName, VersionRange)])]
-> Const
(Endo [[(PackageName, VersionRange)]])
[(UnqualComponentName, [(PackageName, VersionRange)])])
-> (([(PackageName, VersionRange)]
-> Const
(Endo [[(PackageName, VersionRange)]])
[(PackageName, VersionRange)])
-> (UnqualComponentName, [(PackageName, VersionRange)])
-> Const
(Endo [[(PackageName, VersionRange)]])
(UnqualComponentName, [(PackageName, VersionRange)]))
-> Getting
(Endo [[(PackageName, VersionRange)]])
[(UnqualComponentName, [(PackageName, VersionRange)])]
[(PackageName, VersionRange)]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ([(PackageName, VersionRange)]
-> Const
(Endo [[(PackageName, VersionRange)]])
[(PackageName, VersionRange)])
-> (UnqualComponentName, [(PackageName, VersionRange)])
-> Const
(Endo [[(PackageName, VersionRange)]])
(UnqualComponentName, [(PackageName, VersionRange)])
forall s t a b. Field2 s t a b => Lens s t a b
_2 [[(PackageName, VersionRange)]]
-> Getting
[(PackageName, VersionRange)]
[[(PackageName, VersionRange)]]
[(PackageName, VersionRange)]
-> [(PackageName, VersionRange)]
forall s a. s -> Getting a s a -> a
^. Getting
[(PackageName, VersionRange)]
[[(PackageName, VersionRange)]]
[(PackageName, VersionRange)]
forall s t a b. Each s t a b => Traversal s t a b
each
((PackageName, VersionRange) -> Sem r ())
-> [(PackageName, VersionRange)] -> Sem r ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ ((PackageName -> VersionRange -> Sem r ())
-> (PackageName, VersionRange) -> Sem r ()
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry PackageName -> VersionRange -> Sem r ()
forall (r :: [Effect]).
Member DependencyRecord r =>
PackageName -> VersionRange -> Sem r ()
updateDependencyRecord) ([(PackageName, VersionRange)] -> Sem r ())
-> [(PackageName, VersionRange)] -> Sem r ()
forall a b. (a -> b) -> a -> b
$ [(UnqualComponentName, [(PackageName, VersionRange)])]
toolDeps [(UnqualComponentName, [(PackageName, VersionRange)])]
-> Getting
(Endo [[(PackageName, VersionRange)]])
[(UnqualComponentName, [(PackageName, VersionRange)])]
[(PackageName, VersionRange)]
-> [[(PackageName, VersionRange)]]
forall s a. s -> Getting (Endo [a]) s a -> [a]
^.. ((UnqualComponentName, [(PackageName, VersionRange)])
-> Const
(Endo [[(PackageName, VersionRange)]])
(UnqualComponentName, [(PackageName, VersionRange)]))
-> [(UnqualComponentName, [(PackageName, VersionRange)])]
-> Const
(Endo [[(PackageName, VersionRange)]])
[(UnqualComponentName, [(PackageName, VersionRange)])]
forall s t a b. Each s t a b => Traversal s t a b
each (((UnqualComponentName, [(PackageName, VersionRange)])
-> Const
(Endo [[(PackageName, VersionRange)]])
(UnqualComponentName, [(PackageName, VersionRange)]))
-> [(UnqualComponentName, [(PackageName, VersionRange)])]
-> Const
(Endo [[(PackageName, VersionRange)]])
[(UnqualComponentName, [(PackageName, VersionRange)])])
-> (([(PackageName, VersionRange)]
-> Const
(Endo [[(PackageName, VersionRange)]])
[(PackageName, VersionRange)])
-> (UnqualComponentName, [(PackageName, VersionRange)])
-> Const
(Endo [[(PackageName, VersionRange)]])
(UnqualComponentName, [(PackageName, VersionRange)]))
-> Getting
(Endo [[(PackageName, VersionRange)]])
[(UnqualComponentName, [(PackageName, VersionRange)])]
[(PackageName, VersionRange)]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ([(PackageName, VersionRange)]
-> Const
(Endo [[(PackageName, VersionRange)]])
[(PackageName, VersionRange)])
-> (UnqualComponentName, [(PackageName, VersionRange)])
-> Const
(Endo [[(PackageName, VersionRange)]])
(UnqualComponentName, [(PackageName, VersionRange)])
forall s t a b. Field2 s t a b => Lens s t a b
_2 [[(PackageName, VersionRange)]]
-> Getting
[(PackageName, VersionRange)]
[[(PackageName, VersionRange)]]
[(PackageName, VersionRange)]
-> [(PackageName, VersionRange)]
forall s a. s -> Getting a s a -> a
^. Getting
[(PackageName, VersionRange)]
[[(PackageName, VersionRange)]]
[(PackageName, VersionRange)]
forall s t a b. Each s t a b => Traversal s t a b
each
let result :: (a, a, [SystemDependency])
result = ([(UnqualComponentName, [(PackageName, VersionRange)])] -> a
k [(UnqualComponentName, [(PackageName, VersionRange)])]
deps, [(UnqualComponentName, [(PackageName, VersionRange)])] -> a
k [(UnqualComponentName, [(PackageName, VersionRange)])]
toolDeps, [[SystemDependency]] -> [SystemDependency]
forall a. Monoid a => [a] -> a
mconcat ([[SystemDependency]] -> [SystemDependency])
-> [[SystemDependency]] -> [SystemDependency]
forall a b. (a -> b) -> a -> b
$ ((UnqualComponentName, [SystemDependency]) -> [SystemDependency])
-> [(UnqualComponentName, [SystemDependency])]
-> [[SystemDependency]]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (UnqualComponentName, [SystemDependency]) -> [SystemDependency]
forall a b. (a, b) -> b
snd [(UnqualComponentName, [SystemDependency])]
sysDeps)
String -> Sem r ()
forall (r :: [Effect]). Member Trace r => String -> Sem r ()
trace' (String -> Sem r ()) -> String -> Sem r ()
forall a b. (a -> b) -> a -> b
$ String
"Found: " String -> String -> String
forall a. Semigroup a => a -> a -> a
<> (a, a, [SystemDependency]) -> String
forall a. Show a => a -> String
show (a, a, [SystemDependency])
result
Sem r ()
forall (r :: [Effect]). (HasCallStack, Member Trace r) => Sem r ()
traceCallStack
(a, a, [SystemDependency]) -> Sem r (a, a, [SystemDependency])
forall (m :: * -> *) a. Monad m => a -> m a
return (a, a, [SystemDependency])
result
collectExeDeps ::
(HasCallStack, Members [KnownGHCVersion, FlagAssignmentsEnv, DependencyRecord, Trace] r, Show a) =>
([(UnqualComponentName, [(PackageName, VersionRange)])] -> a) ->
GenericPackageDescription ->
[UnqualComponentName] ->
Sem r (a, a, [SystemDependency])
collectExeDeps :: ([(UnqualComponentName, [(PackageName, VersionRange)])] -> a)
-> GenericPackageDescription
-> [UnqualComponentName]
-> Sem r (a, a, [SystemDependency])
collectExeDeps = String
-> (GenericPackageDescription
-> [(UnqualComponentName,
CondTree ConfVar [Dependency] Executable)])
-> ([(UnqualComponentName, [(PackageName, VersionRange)])] -> a)
-> GenericPackageDescription
-> [UnqualComponentName]
-> Sem r (a, a, [SystemDependency])
forall k (r :: [Effect]) a.
(HasCallStack, Semigroup k, HasBuildInfo k,
Members
'[KnownGHCVersion, FlagAssignmentsEnv, DependencyRecord, Trace] r,
Show a) =>
String
-> (GenericPackageDescription
-> [(UnqualComponentName, CondTree ConfVar [Dependency] k)])
-> ([(UnqualComponentName, [(PackageName, VersionRange)])] -> a)
-> GenericPackageDescription
-> [UnqualComponentName]
-> Sem r (a, a, [SystemDependency])
collectComponentialDeps String
"exe" GenericPackageDescription
-> [(UnqualComponentName,
CondTree ConfVar [Dependency] Executable)]
condExecutables
collectTestDeps ::
(HasCallStack, Members [KnownGHCVersion, FlagAssignmentsEnv, DependencyRecord, Trace] r, Show a) =>
([(UnqualComponentName, [(PackageName, VersionRange)])] -> a) ->
GenericPackageDescription ->
[UnqualComponentName] ->
Sem r (a, a, [SystemDependency])
collectTestDeps :: ([(UnqualComponentName, [(PackageName, VersionRange)])] -> a)
-> GenericPackageDescription
-> [UnqualComponentName]
-> Sem r (a, a, [SystemDependency])
collectTestDeps = String
-> (GenericPackageDescription
-> [(UnqualComponentName,
CondTree ConfVar [Dependency] TestSuite)])
-> ([(UnqualComponentName, [(PackageName, VersionRange)])] -> a)
-> GenericPackageDescription
-> [UnqualComponentName]
-> Sem r (a, a, [SystemDependency])
forall k (r :: [Effect]) a.
(HasCallStack, Semigroup k, HasBuildInfo k,
Members
'[KnownGHCVersion, FlagAssignmentsEnv, DependencyRecord, Trace] r,
Show a) =>
String
-> (GenericPackageDescription
-> [(UnqualComponentName, CondTree ConfVar [Dependency] k)])
-> ([(UnqualComponentName, [(PackageName, VersionRange)])] -> a)
-> GenericPackageDescription
-> [UnqualComponentName]
-> Sem r (a, a, [SystemDependency])
collectComponentialDeps String
"test" GenericPackageDescription
-> [(UnqualComponentName, CondTree ConfVar [Dependency] TestSuite)]
condTestSuites
collectSubLibDeps ::
(HasCallStack, Members [KnownGHCVersion, FlagAssignmentsEnv, DependencyRecord, Trace] r, Show a) =>
([(UnqualComponentName, [(PackageName, VersionRange)])] -> a) ->
GenericPackageDescription ->
[UnqualComponentName] ->
Sem r (a, a, [SystemDependency])
collectSubLibDeps :: ([(UnqualComponentName, [(PackageName, VersionRange)])] -> a)
-> GenericPackageDescription
-> [UnqualComponentName]
-> Sem r (a, a, [SystemDependency])
collectSubLibDeps = String
-> (GenericPackageDescription
-> [(UnqualComponentName, CondTree ConfVar [Dependency] Library)])
-> ([(UnqualComponentName, [(PackageName, VersionRange)])] -> a)
-> GenericPackageDescription
-> [UnqualComponentName]
-> Sem r (a, a, [SystemDependency])
forall k (r :: [Effect]) a.
(HasCallStack, Semigroup k, HasBuildInfo k,
Members
'[KnownGHCVersion, FlagAssignmentsEnv, DependencyRecord, Trace] r,
Show a) =>
String
-> (GenericPackageDescription
-> [(UnqualComponentName, CondTree ConfVar [Dependency] k)])
-> ([(UnqualComponentName, [(PackageName, VersionRange)])] -> a)
-> GenericPackageDescription
-> [UnqualComponentName]
-> Sem r (a, a, [SystemDependency])
collectComponentialDeps String
"sublib" GenericPackageDescription
-> [(UnqualComponentName, CondTree ConfVar [Dependency] Library)]
condSubLibraries
collectSetupDeps ::
(Member Trace r, Show a, Monoid a) =>
([(PackageName, VersionRange)] -> a) ->
GenericPackageDescription ->
Sem r a
collectSetupDeps :: ([(PackageName, VersionRange)] -> a)
-> GenericPackageDescription -> Sem r a
collectSetupDeps [(PackageName, VersionRange)] -> a
k GenericPackageDescription
cabal = do
let name :: PackageName
name = GenericPackageDescription -> PackageName
getPkgName' GenericPackageDescription
cabal
String -> Sem r ()
forall (r :: [Effect]). Member Trace r => String -> Sem r ()
trace' (String -> Sem r ()) -> String -> Sem r ()
forall a b. (a -> b) -> a -> b
$ String
"Getting setup dependencies of " String -> String -> String
forall a. Semigroup a => a -> a -> a
<> PackageName -> String
forall a. Show a => a -> String
show PackageName
name
case PackageDescription -> Maybe SetupBuildInfo
setupBuildInfo (PackageDescription -> Maybe SetupBuildInfo)
-> PackageDescription -> Maybe SetupBuildInfo
forall a b. (a -> b) -> a -> b
$ GenericPackageDescription -> PackageDescription
packageDescription GenericPackageDescription
cabal of
Just (SetupBuildInfo [Dependency]
deps Bool
_) -> do
let result :: a
result = [(PackageName, VersionRange)] -> a
k ([(PackageName, VersionRange)] -> a)
-> [(PackageName, VersionRange)] -> a
forall a b. (a -> b) -> a -> b
$ Dependency -> (PackageName, VersionRange)
unDepV (Dependency -> (PackageName, VersionRange))
-> [Dependency] -> [(PackageName, VersionRange)]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Dependency]
deps
String -> Sem r ()
forall (r :: [Effect]). Member Trace r => String -> Sem r ()
trace' (String -> Sem r ()) -> String -> Sem r ()
forall a b. (a -> b) -> a -> b
$ String
"Found: " String -> String -> String
forall a. Semigroup a => a -> a -> a
<> a -> String
forall a. Show a => a -> String
show a
result
a -> Sem r a
forall (m :: * -> *) a. Monad m => a -> m a
return a
result
Maybe SetupBuildInfo
_ -> a -> Sem r a
forall (m :: * -> *) a. Monad m => a -> m a
return a
forall a. Monoid a => a
mempty
updateDependencyRecord :: Member DependencyRecord r => PackageName -> VersionRange -> Sem r ()
updateDependencyRecord :: PackageName -> VersionRange -> Sem r ()
updateDependencyRecord PackageName
name VersionRange
range = (Map PackageName [VersionRange] -> Map PackageName [VersionRange])
-> Sem r ()
forall s (r :: [Effect]).
Member (State s) r =>
(s -> s) -> Sem r ()
modify' ((Map PackageName [VersionRange] -> Map PackageName [VersionRange])
-> Sem r ())
-> (Map PackageName [VersionRange]
-> Map PackageName [VersionRange])
-> Sem r ()
forall a b. (a -> b) -> a -> b
$ ([VersionRange] -> [VersionRange] -> [VersionRange])
-> PackageName
-> [VersionRange]
-> Map PackageName [VersionRange]
-> Map PackageName [VersionRange]
forall k a. Ord k => (a -> a -> a) -> k -> a -> Map k a -> Map k a
Map.insertWith [VersionRange] -> [VersionRange] -> [VersionRange]
forall a. Semigroup a => a -> a -> a
(<>) PackageName
name [VersionRange
range]
cabalToPkgBuild :: Members [HackageEnv, FlagAssignmentsEnv, WithMyErr] r => SolvedPackage -> Bool -> [ArchLinuxName] -> Sem r PkgBuild
cabalToPkgBuild :: SolvedPackage -> Bool -> [ArchLinuxName] -> Sem r PkgBuild
cabalToPkgBuild SolvedPackage
pkg Bool
uusi [ArchLinuxName]
sysDeps = do
let name :: PackageName
name = SolvedPackage
pkg SolvedPackage
-> Getting PackageName SolvedPackage PackageName -> PackageName
forall s a. s -> Getting a s a -> a
^. Getting PackageName SolvedPackage PackageName
Lens' SolvedPackage PackageName
pkgName
PackageDescription
cabal <- GenericPackageDescription -> PackageDescription
packageDescription (GenericPackageDescription -> PackageDescription)
-> Sem r GenericPackageDescription -> Sem r PackageDescription
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> PackageName -> Sem r GenericPackageDescription
forall (r :: [Effect]).
Members '[HackageEnv, WithMyErr] r =>
PackageName -> Sem r GenericPackageDescription
getLatestCabal PackageName
name
String
_sha256sums <- (\case Just String
s -> String
"'" String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
s String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
"'"; Maybe String
Nothing -> String
"'SKIP'") (Maybe String -> String) -> Sem r (Maybe String) -> Sem r String
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> PackageName -> Sem r (Maybe String)
forall (r :: [Effect]).
Members '[HackageEnv, WithMyErr] r =>
PackageName -> Sem r (Maybe String)
getLatestSHA256 PackageName
name
let _hkgName :: String
_hkgName = SolvedPackage
pkg SolvedPackage
-> Getting PackageName SolvedPackage PackageName -> PackageName
forall s a. s -> Getting a s a -> a
^. Getting PackageName SolvedPackage PackageName
Lens' SolvedPackage PackageName
pkgName PackageName -> (PackageName -> String) -> String
forall a b. a -> (a -> b) -> b
& PackageName -> String
unPackageName
_pkgName :: String
_pkgName = ArchLinuxName -> String
unArchLinuxName (ArchLinuxName -> String)
-> (PackageName -> ArchLinuxName) -> PackageName -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PackageName -> ArchLinuxName
forall n. HasMyName n => n -> ArchLinuxName
toArchLinuxName (PackageName -> String) -> PackageName -> String
forall a b. (a -> b) -> a -> b
$ SolvedPackage
pkg SolvedPackage
-> Getting PackageName SolvedPackage PackageName -> PackageName
forall s a. s -> Getting a s a -> a
^. Getting PackageName SolvedPackage PackageName
Lens' SolvedPackage PackageName
pkgName
_pkgVer :: String
_pkgVer = Version -> String
forall a. Pretty a => a -> String
prettyShow (Version -> String) -> Version -> String
forall a b. (a -> b) -> a -> b
$ PackageDescription -> Version
getPkgVersion PackageDescription
cabal
_pkgDesc :: String
_pkgDesc = ShortText -> String
fromShortText (ShortText -> String) -> ShortText -> String
forall a b. (a -> b) -> a -> b
$ PackageDescription -> ShortText
synopsis PackageDescription
cabal
getL :: License -> String
getL License
NONE = String
""
getL (License LicenseExpression
e) = LicenseExpression -> String
getE LicenseExpression
e
getE :: LicenseExpression -> String
getE (ELicense (ELicenseId LicenseId
x) Maybe LicenseExceptionId
_) = License -> String
showArchLicense (License -> String)
-> (LicenseId -> License) -> LicenseId -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. LicenseId -> License
mapLicense (LicenseId -> String) -> LicenseId -> String
forall a b. (a -> b) -> a -> b
$ LicenseId
x
getE (ELicense (ELicenseIdPlus LicenseId
x) Maybe LicenseExceptionId
_) = License -> String
showArchLicense (License -> String)
-> (LicenseId -> License) -> LicenseId -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. LicenseId -> License
mapLicense (LicenseId -> String) -> LicenseId -> String
forall a b. (a -> b) -> a -> b
$ LicenseId
x
getE (ELicense (ELicenseRef LicenseRef
x) Maybe LicenseExceptionId
_) = String
"custom:" String -> String -> String
forall a. Semigroup a => a -> a -> a
<> LicenseRef -> String
licenseRef LicenseRef
x
getE (EAnd LicenseExpression
x LicenseExpression
y) = LicenseExpression -> String
getE LicenseExpression
x String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
" " String -> String -> String
forall a. Semigroup a => a -> a -> a
<> LicenseExpression -> String
getE LicenseExpression
y
getE (EOr LicenseExpression
x LicenseExpression
y) = LicenseExpression -> String
getE LicenseExpression
x String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
" " String -> String -> String
forall a. Semigroup a => a -> a -> a
<> LicenseExpression -> String
getE LicenseExpression
y
_license :: String
_license = License -> String
getL (License -> String)
-> (PackageDescription -> License) -> PackageDescription -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PackageDescription -> License
license (PackageDescription -> String) -> PackageDescription -> String
forall a b. (a -> b) -> a -> b
$ PackageDescription
cabal
_enableCheck :: Bool
_enableCheck = [Bool] -> Bool
forall (t :: * -> *). Foldable t => t Bool -> Bool
or ([Bool] -> Bool) -> [Bool] -> Bool
forall a b. (a -> b) -> a -> b
$ (SolvedPackage
pkg SolvedPackage
-> Getting [SolvedDependency] SolvedPackage [SolvedDependency]
-> [SolvedDependency]
forall s a. s -> Getting a s a -> a
^. Getting [SolvedDependency] SolvedPackage [SolvedDependency]
Traversal' SolvedPackage [SolvedDependency]
pkgDeps) [SolvedDependency] -> (SolvedDependency -> Bool) -> [Bool]
forall (f :: * -> *) a b. Functor f => f a -> (a -> b) -> f b
<&> DependencyKind -> SolvedDependency -> Bool
depIsKind DependencyKind
Test
depends :: [SolvedDependency]
depends =
SolvedPackage
pkg SolvedPackage
-> Getting [SolvedDependency] SolvedPackage [SolvedDependency]
-> [SolvedDependency]
forall s a. s -> Getting a s a -> a
^. Getting [SolvedDependency] SolvedPackage [SolvedDependency]
Traversal' SolvedPackage [SolvedDependency]
pkgDeps
[SolvedDependency]
-> Getting
(Endo [SolvedDependency]) [SolvedDependency] SolvedDependency
-> [SolvedDependency]
forall s a. s -> Getting (Endo [a]) s a -> [a]
^.. Getting
(Endo [SolvedDependency]) [SolvedDependency] SolvedDependency
forall s t a b. Each s t a b => Traversal s t a b
each
Getting
(Endo [SolvedDependency]) [SolvedDependency] SolvedDependency
-> ((SolvedDependency
-> Const (Endo [SolvedDependency]) SolvedDependency)
-> SolvedDependency
-> Const (Endo [SolvedDependency]) SolvedDependency)
-> Getting
(Endo [SolvedDependency]) [SolvedDependency] SolvedDependency
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (SolvedDependency -> Bool)
-> Traversal' SolvedDependency SolvedDependency
forall a. (a -> Bool) -> Traversal' a a
filtered
( \SolvedDependency
x ->
PackageName -> SolvedDependency -> Bool
depNotMyself PackageName
name SolvedDependency
x
Bool -> Bool -> Bool
&& SolvedDependency -> Bool
depNotInGHCLib SolvedDependency
x
Bool -> Bool -> Bool
&& ( DependencyKind -> SolvedDependency -> Bool
depIsKind DependencyKind
Lib SolvedDependency
x
Bool -> Bool -> Bool
|| DependencyKind -> SolvedDependency -> Bool
depIsKind DependencyKind
Exe SolvedDependency
x
Bool -> Bool -> Bool
|| DependencyKind -> SolvedDependency -> Bool
depIsKind DependencyKind
SubLibs SolvedDependency
x
)
)
makeDepends :: [SolvedDependency]
makeDepends =
SolvedPackage
pkg SolvedPackage
-> Getting [SolvedDependency] SolvedPackage [SolvedDependency]
-> [SolvedDependency]
forall s a. s -> Getting a s a -> a
^. Getting [SolvedDependency] SolvedPackage [SolvedDependency]
Traversal' SolvedPackage [SolvedDependency]
pkgDeps
[SolvedDependency]
-> Getting
(Endo [SolvedDependency]) [SolvedDependency] SolvedDependency
-> [SolvedDependency]
forall s a. s -> Getting (Endo [a]) s a -> [a]
^.. Getting
(Endo [SolvedDependency]) [SolvedDependency] SolvedDependency
forall s t a b. Each s t a b => Traversal s t a b
each
Getting
(Endo [SolvedDependency]) [SolvedDependency] SolvedDependency
-> ((SolvedDependency
-> Const (Endo [SolvedDependency]) SolvedDependency)
-> SolvedDependency
-> Const (Endo [SolvedDependency]) SolvedDependency)
-> Getting
(Endo [SolvedDependency]) [SolvedDependency] SolvedDependency
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (SolvedDependency -> Bool)
-> Traversal' SolvedDependency SolvedDependency
forall a. (a -> Bool) -> Traversal' a a
filtered
( \SolvedDependency
x ->
SolvedDependency
x SolvedDependency -> [SolvedDependency] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`notElem` [SolvedDependency]
depends
Bool -> Bool -> Bool
&& PackageName -> SolvedDependency -> Bool
depNotMyself PackageName
name SolvedDependency
x
Bool -> Bool -> Bool
&& SolvedDependency -> Bool
depNotInGHCLib SolvedDependency
x
Bool -> Bool -> Bool
&& ( DependencyKind -> SolvedDependency -> Bool
depIsKind DependencyKind
LibBuildTools SolvedDependency
x
Bool -> Bool -> Bool
|| DependencyKind -> SolvedDependency -> Bool
depIsKind DependencyKind
ExeBuildTools SolvedDependency
x
Bool -> Bool -> Bool
|| DependencyKind -> SolvedDependency -> Bool
depIsKind DependencyKind
Test SolvedDependency
x
Bool -> Bool -> Bool
|| DependencyKind -> SolvedDependency -> Bool
depIsKind DependencyKind
TestBuildTools SolvedDependency
x
Bool -> Bool -> Bool
|| DependencyKind -> SolvedDependency -> Bool
depIsKind DependencyKind
SubLibsBuildTools SolvedDependency
x
Bool -> Bool -> Bool
|| DependencyKind -> SolvedDependency -> Bool
depIsKind DependencyKind
Setup SolvedDependency
x
)
)
depsToString :: (a -> n) -> [a] -> String
depsToString a -> n
k [a]
deps = [a]
deps [a] -> (a -> String) -> [String]
forall (f :: * -> *) a b. Functor f => f a -> (a -> b) -> f b
<&> (String -> String
wrap (String -> String) -> (a -> String) -> a -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ArchLinuxName -> String
unArchLinuxName (ArchLinuxName -> String) -> (a -> ArchLinuxName) -> a -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. n -> ArchLinuxName
forall n. HasMyName n => n -> ArchLinuxName
toArchLinuxName (n -> ArchLinuxName) -> (a -> n) -> a -> ArchLinuxName
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> n
k) [String] -> ([String] -> String) -> String
forall a b. a -> (a -> b) -> b
& [String] -> String
forall a. Monoid a => [a] -> a
mconcat
_depends :: String
_depends = (SolvedDependency -> PackageName) -> [SolvedDependency] -> String
forall n a. HasMyName n => (a -> n) -> [a] -> String
depsToString SolvedDependency -> PackageName
_depName [SolvedDependency]
depends String -> String -> String
forall a. Semigroup a => a -> a -> a
<> (ArchLinuxName -> ArchLinuxName) -> [ArchLinuxName] -> String
forall n a. HasMyName n => (a -> n) -> [a] -> String
depsToString ArchLinuxName -> ArchLinuxName
forall a. a -> a
id [ArchLinuxName]
sysDeps
_makeDepends :: String
_makeDepends = (if Bool
uusi then String
" 'uusi'" else String
"") String -> String -> String
forall a. Semigroup a => a -> a -> a
<> (SolvedDependency -> PackageName) -> [SolvedDependency] -> String
forall n a. HasMyName n => (a -> n) -> [a] -> String
depsToString SolvedDependency -> PackageName
_depName [SolvedDependency]
makeDepends
_url :: String
_url = PackageDescription -> String
getUrl PackageDescription
cabal
wrap :: String -> String
wrap String
s = String
" '" String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
s String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
"'"
_licenseFile :: Maybe String
_licenseFile = PackageDescription -> [String]
licenseFiles PackageDescription
cabal [String] -> Getting (First String) [String] String -> Maybe String
forall s a. s -> Getting (First a) s a -> Maybe a
^? Index [String] -> Traversal' [String] (IxValue [String])
forall m. Ixed m => Index m -> Traversal' m (IxValue m)
ix Index [String]
0
_enableUusi :: Bool
_enableUusi = Bool
uusi
PkgBuild -> Sem r PkgBuild
forall (m :: * -> *) a. Monad m => a -> m a
return PkgBuild :: String
-> String
-> String
-> String
-> String
-> String
-> String
-> String
-> String
-> Maybe String
-> Bool
-> Bool
-> PkgBuild
PkgBuild {Bool
String
Maybe String
_enableCheck :: Bool
_enableUusi :: Bool
_licenseFile :: Maybe String
_sha256sums :: String
_makeDepends :: String
_depends :: String
_license :: String
_url :: String
_pkgDesc :: String
_pkgVer :: String
_pkgName :: String
_hkgName :: String
_enableUusi :: Bool
_licenseFile :: Maybe String
_url :: String
_makeDepends :: String
_depends :: String
_enableCheck :: Bool
_license :: String
_pkgDesc :: String
_pkgVer :: String
_pkgName :: String
_hkgName :: String
_sha256sums :: String
..}
subsumeGHCVersion :: Members [CommunityEnv, WithMyErr] r => InterpreterFor KnownGHCVersion r
subsumeGHCVersion :: InterpreterFor KnownGHCVersion r
subsumeGHCVersion Sem (KnownGHCVersion : r) a
m = do
String
rawVersion <- ArchLinuxName -> Sem r String
forall n (r :: [Effect]).
(HasMyName n, Members '[CommunityEnv, WithMyErr] r) =>
n -> Sem r String
versionInCommunity (ArchLinuxName -> Sem r String) -> ArchLinuxName -> Sem r String
forall a b. (a -> b) -> a -> b
$ String -> ArchLinuxName
ArchLinuxName String
"haskell-ghc"
let ghcVersion :: Version
ghcVersion = Version -> Maybe Version -> Version
forall a. a -> Maybe a -> a
fromMaybe (String -> Version
forall a. HasCallStack => String -> a
error (String -> Version) -> String -> Version
forall a b. (a -> b) -> a -> b
$ String
"Impossible: unable to parse ghc version from [community]: " String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
rawVersion) (Maybe Version -> Version) -> Maybe Version -> Version
forall a b. (a -> b) -> a -> b
$ String -> Maybe Version
forall a. Parsec a => String -> Maybe a
simpleParsec String
rawVersion
Version -> Sem (KnownGHCVersion : r) a -> Sem r a
forall i (r :: [Effect]) a. i -> Sem (Reader i : r) a -> Sem r a
runReader Version
ghcVersion Sem (KnownGHCVersion : r) a
m