on 77fa7fa help sign in
stackage/Stackage/CheckCabalVersion.hs
27 lines 1.1 kB history raw
1module Stackage.CheckCabalVersion
2 ( checkCabalVersion
3 ) where
5import Control.Exception (assert)
6import Distribution.Text (simpleParse)
7import Distribution.Version (withinRange)
8import Prelude hiding (pi)
9import System.Process (readProcess)
11checkCabalVersion :: IO String
12checkCabalVersion = do
13 putStrLn "Checking Cabal version"
14 versionString <- readProcess "cabal" ["--version"] ""
15 libVersion <-
16 case map words $ lines versionString of
17 [_,["using","version",libVersion,"of","the","Cabal","library"]] -> return libVersion
18 _ -> error "Did not understand cabal --version output"
20 case (simpleParse libVersion, simpleParse ">= 1.16") of
21 (Nothing, _) -> error $ "cabal binary reported an invalid Cabal library version: " ++ libVersion
22 (_, Nothing) -> assert False $ return ()
23 (Just v, Just vr)
24 | v `withinRange` vr -> return ()
25 | otherwise -> error $ "cabal binary build against unsupported Cabal library version: " ++ libVersion
27 return libVersion