on 39cc820 help sign in
stackage/Stackage/CheckCabalVersion.hs
45 lines 2.0 kB history raw
1module Stackage.CheckCabalVersion
2 ( checkCabalVersion
3 ) where
5import Control.Exception (assert)
6import Control.Monad (unless, when)
7import qualified Data.Map as Map
8import Data.Maybe (mapMaybe)
9import Data.Set (empty)
10import qualified Data.Set as Set
11import Distribution.Text (simpleParse)
12import Distribution.Version (withinRange)
13import Prelude hiding (pi)
14import Stackage.CheckPlan
15import Stackage.Config
16import Stackage.InstallInfo
17import Stackage.Tarballs
18import Stackage.Test
19import Stackage.Types
20import Stackage.Util
21import System.Directory (canonicalizePath,
22 createDirectoryIfMissing,
23 doesDirectoryExist)
24import System.Exit (ExitCode (ExitSuccess), exitWith)
25import System.IO (IOMode (WriteMode), hPutStrLn,
26 withBinaryFile)
27import System.Process (rawSystem, readProcess, runProcess,
28 waitForProcess)
30checkCabalVersion :: IO String
31checkCabalVersion = do
32 versionString <- readProcess "cabal" ["--version"] ""
33 libVersion <-
34 case map words $ lines versionString of
35 [_,["using","version",libVersion,"of","the","Cabal","library"]] -> return libVersion
36 _ -> error "Did not understand cabal --version output"
38 case (simpleParse libVersion, simpleParse ">= 1.16") of
39 (Nothing, _) -> error $ "Invalid Cabal library version: " ++ libVersion
40 (_, Nothing) -> assert False $ return ()
41 (Just v, Just vr)
42 | v `withinRange` vr -> return ()
43 | otherwise -> error $ "Unsupported Cabal version: " ++ libVersion
45 return libVersion