module Portage.Tables
( set_build_slot
) where
import Portage.Dependency.Builder
import Portage.Dependency.Types
import Portage.PackageId
import Data.Monoid
set_build_slot :: Dependency -> Dependency
set_build_slot :: Dependency -> Dependency
set_build_slot =
(Atom -> Atom) -> Dependency -> Dependency
overAtom ((Atom -> Atom) -> Dependency -> Dependency)
-> (Atom -> Atom) -> Dependency -> Dependency
forall a b. (a -> b) -> a -> b
$ \a :: Atom
a@(Atom PackageName
pn DRange
dr (DAttr SlotDepend
_ [UseFlag]
u)) ->
case [First SlotDepend] -> First SlotDepend
forall a. Monoid a => [a] -> a
mconcat ([First SlotDepend] -> First SlotDepend)
-> [First SlotDepend] -> First SlotDepend
forall a b. (a -> b) -> a -> b
$ ((PackageName, SlotDepend) -> First SlotDepend)
-> [(PackageName, SlotDepend)] -> [First SlotDepend]
forall a b. (a -> b) -> [a] -> [b]
map (Maybe SlotDepend -> First SlotDepend
forall a. Maybe a -> First a
First (Maybe SlotDepend -> First SlotDepend)
-> ((PackageName, SlotDepend) -> Maybe SlotDepend)
-> (PackageName, SlotDepend)
-> First SlotDepend
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Atom -> (PackageName, SlotDepend) -> Maybe SlotDepend
forall a. Atom -> (PackageName, a) -> Maybe a
matches Atom
a) [(PackageName, SlotDepend)]
slottedPkgs of
First (Just SlotDepend
s) -> PackageName -> DRange -> DAttr -> Atom
Atom PackageName
pn DRange
dr (SlotDepend -> [UseFlag] -> DAttr
DAttr SlotDepend
s [UseFlag]
u)
First Maybe SlotDepend
Nothing -> PackageName -> DRange -> DAttr -> Atom
Atom PackageName
pn DRange
dr (SlotDepend -> [UseFlag] -> DAttr
DAttr SlotDepend
AnyBuildTimeSlot [UseFlag]
u)
where
matches :: Atom -> (PackageName, a) -> Maybe a
matches (Atom PackageName
pn DRange
_ DAttr
_) (PackageName
nm,a
s)
| PackageName
pn PackageName -> PackageName -> Bool
forall a. Eq a => a -> a -> Bool
== PackageName
nm = a -> Maybe a
forall a. a -> Maybe a
Just a
s
| Bool
otherwise = Maybe a
forall a. Maybe a
Nothing
slottedPkgs :: [(PackageName, SlotDepend)]
slottedPkgs :: [(PackageName, SlotDepend)]
slottedPkgs =
[ (String -> String -> PackageName
mkPackageName String
"dev-haskell" String
"quickcheck", String -> SlotDepend
GivenSlot String
"2=")
, (String -> String -> PackageName
mkPackageName String
"dev-haskell" String
"hdbc", String -> SlotDepend
GivenSlot String
"2=")
]