/
find-conflicts.hs
28 lines (25 loc) · 1.04 KB
/
find-conflicts.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
-- Usage: find-conflicts CabalFile...
module Main ( main ) where
import System.Environment ( getArgs )
import Distribution.Package ( packageId )
import Distribution.ArchLinux.HackageTranslation ( getVersionConflicts )
import Distribution.ArchLinux.SystemProvides ( parseSystemProvides )
import Distribution.PackageDescription.Parse ( readPackageDescription )
import Distribution.Verbosity ( silent )
import Distribution.Text ( disp )
import Text.PrettyPrint
main :: IO ()
main = do
cabalFiles <- getArgs
pkgs <- mapM (readPackageDescription silent) cabalFiles
fc <- readFile "data/ghc-provides.txt"
fp <- readFile "data/platform-provides.txt"
ft <- readFile "data/library-providers.txt"
let sysProvides = parseSystemProvides fc fp ft
case getVersionConflicts pkgs sysProvides of
[] -> return ()
conflicts -> do
let name pkg = disp (packageId pkg)
showConflict (pkg,dep) = render (name pkg <+> text "needs" <+> disp dep)
mapM_ (putStrLn . showConflict) conflicts
fail "conflicts detected"