{-# LANGUAGE CPP #-} module Info ( versionInfo , info #ifdef TEST , formatInfo #endif ) where import Imports import Data.List import System.Process import System.IO.Unsafe #if __GLASGOW_HASKELL__ < 900 import Config as GHC #else import GHC.Settings.Config as GHC #endif import Data.Version (showVersion) import qualified Paths_doctest import Interpreter (ghc) version :: String version :: String version = Version -> String showVersion Version Paths_doctest.version ghcVersion :: String ghcVersion :: String ghcVersion = String GHC.cProjectVersion versionInfo :: String versionInfo :: String versionInfo = [String] -> String unlines [ String "doctest version " forall a. [a] -> [a] -> [a] ++ String version , String "using version " forall a. [a] -> [a] -> [a] ++ String ghcVersion forall a. [a] -> [a] -> [a] ++ String " of the GHC API" , String "using " forall a. [a] -> [a] -> [a] ++ String ghc ] info :: String info :: String info = Info -> String formatInfo forall a b. (a -> b) -> a -> b $ (String "version", String version) forall a. a -> [a] -> [a] : (String "ghc_version", String ghcVersion) forall a. a -> [a] -> [a] : (String "ghc", String ghc) forall a. a -> [a] -> [a] : Info ghcInfo type Info = [(String, String)] ghcInfo :: Info ghcInfo :: Info ghcInfo = forall a. Read a => String -> a read forall a b. (a -> b) -> a -> b $ forall a. IO a -> a unsafePerformIO (String -> [String] -> String -> IO String readProcess String ghc [String "--info"] String "") formatInfo :: Info -> String formatInfo :: Info -> String formatInfo Info xs = String " [" forall a. [a] -> [a] -> [a] ++ (forall a. [a] -> [[a]] -> [a] intercalate String "\n ," forall a b. (a -> b) -> a -> b $ forall a b. (a -> b) -> [a] -> [b] map forall a. Show a => a -> String show Info xs) forall a. [a] -> [a] -> [a] ++ String "\n ]\n"