mirror of
https://github.com/commercialhaskell/stackage.git
synced 2026-01-12 07:18:31 +01:00
46 lines
1.9 KiB
Haskell
46 lines
1.9 KiB
Haskell
module Stackage.CheckCabalVersion
|
|
( checkCabalVersion
|
|
) where
|
|
|
|
import Control.Exception (assert)
|
|
import Control.Monad (unless, when)
|
|
import qualified Data.Map as Map
|
|
import Data.Maybe (mapMaybe)
|
|
import Data.Set (empty)
|
|
import qualified Data.Set as Set
|
|
import Distribution.Text (simpleParse)
|
|
import Distribution.Version (withinRange)
|
|
import Prelude hiding (pi)
|
|
import Stackage.CheckPlan
|
|
import Stackage.Config
|
|
import Stackage.InstallInfo
|
|
import Stackage.Tarballs
|
|
import Stackage.Test
|
|
import Stackage.Types
|
|
import Stackage.Util
|
|
import System.Directory (canonicalizePath,
|
|
createDirectoryIfMissing,
|
|
doesDirectoryExist)
|
|
import System.Exit (ExitCode (ExitSuccess), exitWith)
|
|
import System.IO (IOMode (WriteMode), hPutStrLn,
|
|
withBinaryFile)
|
|
import System.Process (rawSystem, readProcess, runProcess,
|
|
waitForProcess)
|
|
|
|
checkCabalVersion :: IO String
|
|
checkCabalVersion = do
|
|
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 $ "Invalid Cabal library version: " ++ libVersion
|
|
(_, Nothing) -> assert False $ return ()
|
|
(Just v, Just vr)
|
|
| v `withinRange` vr -> return ()
|
|
| otherwise -> error $ "Unsupported Cabal library version: " ++ libVersion
|
|
|
|
return libVersion
|