-- | -- Module : Distribution.ArchLinux.HackageTranslation -- Copyright : (c) Rémy Oudompheng 2010 -- License : BSD3 -- -- Maintainer: Arch Haskell Team -- module Distribution.ArchLinux.HackageTranslation ( getVersionConflicts , getLatestVersions ) where import Distribution.ArchLinux.CabalTranslation import Distribution.ArchLinux.SystemProvides -- Cabal modules import Distribution.Package import Distribution.Version import Distribution.PackageDescription -- Standard types import qualified Data.Map as M import Data.Maybe -- -- | Check for inconsistencies in version requirements -- returns a list of pairs (package, conflicting dep). -- 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) -- -- | Returns the latest versions -- getLatestVersions :: [GenericPackageDescription] -> M.Map PackageName Version getLatestVersions packages = M.fromListWith max versions where versions = map (\p -> (pkgName $ packageId p, pkgVersion $ packageId p)) packages