ghc-check-0.3.0.0: src/GHC/Check/Executable.hs
{- | Discover the GHC version by querying the GHC executable
-}
module GHC.Check.Executable where
import Data.Version
import GHC.Check.Util
import System.FilePath
import System.Process
import Text.ParserCombinators.ReadP
import Data.Char (isSpace)
import Data.List (dropWhileEnd)
-- | Takes a path to the GHC binary to query.
-- Throws if anything goes wrong.
getGhcVersion :: FilePath -> IO Version
getGhcVersion fp = do
out <- readProcess fp ["--numeric-version"] ""
case readP_to_S (parseVersion <* eof) (trim out) of
[(v, "")] -> return v
_ -> error $ "Failed to parse GHC version: " <> out
trim :: String -> String
trim = dropWhileEnd isSpace . dropWhile isSpace
guessExecutablePathFromLibdir :: FilePath -> FilePath
guessExecutablePathFromLibdir fp = fp </> "bin" </> "ghc"