ghc-mod/Setup.hs

65 lines
2.8 KiB
Haskell
Raw Normal View History

2010-04-02 15:16:22 +00:00
import Distribution.Simple
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') [])