stackage/Stackage/CheckCabalVersion.hs
2013-01-28 11:49:06 +02:00

28 lines
1.1 KiB
Haskell

module Stackage.CheckCabalVersion
( checkCabalVersion
) where
import Control.Exception (assert)
import Distribution.Text (simpleParse)
import Distribution.Version (withinRange)
import Prelude hiding (pi)
import System.Process (readProcess)
checkCabalVersion :: IO String
checkCabalVersion = do
putStrLn "Checking Cabal version"
versionString <- readProcess "cabal" ["--version"] ""
libVersion <-
case map words $ lines versionString of
[_,["using","version",libVersion,"of","the","Cabal","library"]] -> return libVersion
_ -> error "Did not understand cabal --version output"
case (simpleParse libVersion, simpleParse ">= 1.16") of
(Nothing, _) -> error $ "cabal binary reported an invalid Cabal library version: " ++ libVersion
(_, Nothing) -> assert False $ return ()
(Just v, Just vr)
| v `withinRange` vr -> return ()
| otherwise -> error $ "cabal binary build against unsupported Cabal library version: " ++ libVersion
return libVersion