Add custom Setup.hs code to warn users about unsupported environments
This commit is contained in:
parent
45d6b7d67a
commit
27c1eb1eb3
64
Setup.hs
64
Setup.hs
@ -1,2 +1,64 @@
|
|||||||
import Distribution.Simple
|
import Distribution.Simple
|
||||||
main = defaultMain
|
import Distribution.Simple.LocalBuildInfo
|
||||||
|
|
||||||
|
import Control.Monad
|
||||||
|
import Control.Applicative
|
||||||
|
import Data.Version
|
||||||
|
import System.Process
|
||||||
|
import System.Exit
|
||||||
|
import Text.ParserCombinators.ReadP
|
||||||
|
|
||||||
|
-- import Data.Monoid
|
||||||
|
-- import Distribution.Simple.Setup
|
||||||
|
-- import Distribution.Simple.InstallDirs
|
||||||
|
-- main = defaultMainWithHooks $ simpleUserHooks {
|
||||||
|
-- confHook = \desc cf -> do
|
||||||
|
-- print desc
|
||||||
|
-- print cf
|
||||||
|
-- (confHook simpleUserHooks) desc cf {
|
||||||
|
-- configProgSuffix =
|
||||||
|
-- configProgSuffix cf `mappend` toFlag (toPathTemplate "$compiler")
|
||||||
|
-- }
|
||||||
|
-- }
|
||||||
|
|
||||||
|
main :: IO ()
|
||||||
|
main = defaultMainWithHooks $ simpleUserHooks {
|
||||||
|
postConf = \args cf desc lbi -> do
|
||||||
|
-- I hope they never change this ;)
|
||||||
|
["cabal-install", "version", _cabalInstallVer, "using", "version", cabalVer', "of", "the", "Cabal", "library"] <- words <$> readProcess "cabal" ["--version"] ""
|
||||||
|
|
||||||
|
let
|
||||||
|
ghcVer = compilerVersion (compiler lbi)
|
||||||
|
cabalVer = parseVer cabalVer'
|
||||||
|
|
||||||
|
-- ghc >= 7.10?
|
||||||
|
minGhc710 = ghcVer `withinRange` orLaterVersion (parseVer "7.10")
|
||||||
|
|
||||||
|
[libCabalVer] = [ ver | (_, PackageIdentifier pkg ver)
|
||||||
|
<- externalPackageDeps lbi
|
||||||
|
, pkg == PackageName "Cabal" ]
|
||||||
|
|
||||||
|
if minGhc710 then
|
||||||
|
-- make sure Cabal versions are consistent
|
||||||
|
when (not $ cabalVer `sameMajorVersionAs` libCabalVer) $ do
|
||||||
|
putStrLn $ "Error: Cabal seems to have decided ghc-mod should be built using Cabal version "++showVersion libCabalVer++ " while the `cabal' executable in your PATH was built with Cabal version "++showVersion cabalVer++ ". This will lead to conflicts when running ghc-mod in any project where you use this `cabal' executable. Please compile ghc-mod using the same Cabal version as your `cabal' executable or recompile cabal-install using this version of the Cabal library. (See https://github.com/kazu-yamamoto/ghc-mod/wiki/InconsistentCabalVersions )"
|
||||||
|
exitFailure
|
||||||
|
|
||||||
|
else -- ghc < 7.10
|
||||||
|
-- make sure Cabal version is < 1.22
|
||||||
|
when (not $ cabalVer `earlierVersionThan` (parseVer "1.22")) $ do
|
||||||
|
putStrLn "Error: when ghc-mod is built with GHC version < 7.10 only Cabal < 1.22 is supported. (See https://github.com/kazu-yamamoto/ghc-mod/wiki/InconsistentCabalVersions )"
|
||||||
|
exitFailure
|
||||||
|
|
||||||
|
(postConf simpleUserHooks) args cf desc lbi
|
||||||
|
}
|
||||||
|
where
|
||||||
|
parseVer str =
|
||||||
|
case filter ((=="") . snd) $ readP_to_S parseVersion str of
|
||||||
|
[(ver, _)] -> ver
|
||||||
|
_ -> error $ "No parse (Ver) :(\n" ++ str ++ "\n"
|
||||||
|
|
||||||
|
earlierVersionThan ver ver' =
|
||||||
|
ver `withinRange` earlierVersion ver'
|
||||||
|
sameMajorVersionAs ver ver' =
|
||||||
|
ver `withinRange` withinVersion (Version (take 2 $ versionBranch ver') [])
|
||||||
|
Loading…
Reference in New Issue
Block a user