@@ -15,7 +15,6 @@ import Data.ByteString.Base16 (encode)
1515import qualified Data.ByteString.Char8 as B
1616import Data.Functor ((<&>))
1717import Data.Text (Text, pack)
18−import Data.Version (Version)
1918import Development.IDE.Core.Rules (defineNoFile)
2019import Development.IDE.Core.Service (getIdeOptions)
2120import Development.IDE.Core.Shake (actionLogger, sendEvent, define, useNoFile_)
@@ -24,7 +23,7 @@ import Development.IDE.Types.Location (fromNormalizedFilePath)
2423import Development.IDE.Types.Options (IdeOptions(IdeOptions, optTesting))
2524import Development.Shake
2625import GHC
27−import GHC.Check (runTimeVersion, compileTimeVersionFromLibdir)
26+import GHC.Check (VersionCheck(..), makeGhcVersionChecker)
2827import HIE.Bios
2928import HIE.Bios.Cradle
3029import HIE.Bios.Environment (addCmdOpts)
@@ -102,15 +101,20 @@ getComponentOptions cradle = do
102101 -- That will require some more changes.
103102 CradleNone -> fail "'none' cradle is not yet supported"
104103
105−compileTimeGhcVersion :: Version
106−compileTimeGhcVersion = $$(compileTimeVersionFromLibdir getLibdir)
104+ghcVersionChecker :: IO VersionCheck
105+ghcVersionChecker = $$(makeGhcVersionChecker (pure <$> getLibdir))
107106
108−checkGhcVersion :: Ghc (Maybe HscEnvEq)
107+checkGhcVersion :: IO (Maybe HscEnvEq)
109108checkGhcVersion = do
110− v <- runTimeVersion
111− return $ if v == Just compileTimeGhcVersion
112− then Nothing
113− else Just GhcVersionMismatch {compileTime = compileTimeGhcVersion, runTime = v}
109+ res <- ghcVersionChecker
110+ case res of
111+ Failure err -> do
112+ putStrLn $ "Error while checking GHC version: " ++ show err
113+ return Nothing
114+ Mismatch {..} ->
115+ return $ Just GhcVersionMismatch {..}
116+ _ ->
117+ return Nothing
114118
115119createSession :: ComponentOptions -> IO HscEnvEq
116120createSession (ComponentOptions theOpts _) = do
@@ -122,7 +126,7 @@ createSession (ComponentOptions theOpts _) = do
122126 dflags <- getSessionDynFlags
123127 (dflags', _targets) <- addCmdOpts theOpts dflags
124128 setupDynFlags cacheDir dflags'
125− versionMismatch <- checkGhcVersion
129+ versionMismatch <- liftIO checkGhcVersion
126130 case versionMismatch of
127131 Just mismatch -> return mismatch
128132 Nothing -> do