module Distribution.ArchLinux.HackageTranslation
( getVersionConflicts
, getLatestVersions
)
where
import Distribution.ArchLinux.CabalTranslation
import Distribution.ArchLinux.SystemProvides
import Distribution.Package
import Distribution.Version
import Distribution.PackageDescription
import qualified Data.Map as M
import Data.Maybe
getVersionConflicts :: [GenericPackageDescription] -> SystemProvides -> [(PackageDescription, Dependency)]
getVersionConflicts packages sysProvides = concat $ map conflicts cabals
where cabals = mapMaybe (\p -> preprocessCabal p sysProvides) packages
versions = M.fromList $ map (\p -> (pkgName $ packageId p, pkgVersion $ packageId p)) cabals
issatisfied (Dependency pkg range) = case M.lookup pkg versions of
Nothing -> True
Just v -> v `withinRange` range
conflicts p = map (\d -> (p,d)) $ filter (not . issatisfied) (buildDepends p)
getLatestVersions :: [GenericPackageDescription] -> M.Map PackageName Version
getLatestVersions packages = M.fromListWith max versions
where versions = map (\p -> (pkgName $ packageId p, pkgVersion $ packageId p)) packages