{-# LANGUAGE CPP #-} module Info ( versionInfo , info , version #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 Interpreter (ghc) #ifdef TEST version :: String version = "0.0.0" #else import Data.Version (showVersion) import qualified Paths_doctest version :: String version :: String version = Version -> String showVersion Version Paths_doctest.version #endif ghcVersion :: String ghcVersion :: String ghcVersion = String GHC.cProjectVersion versionInfo :: String versionInfo :: String versionInfo = [String] -> String unlines [ String "doctest version " String -> String -> String forall a. [a] -> [a] -> [a] ++ String version , String "using version " String -> String -> String forall a. [a] -> [a] -> [a] ++ String ghcVersion String -> String -> String forall a. [a] -> [a] -> [a] ++ String " of the GHC API" , String "using " String -> String -> String forall a. [a] -> [a] -> [a] ++ String ghc ] info :: String info :: String info = Info -> String formatInfo (Info -> String) -> Info -> String forall a b. (a -> b) -> a -> b $ (String "version", String version) (String, String) -> Info -> Info forall a. a -> [a] -> [a] : (String "ghc_version", String ghcVersion) (String, String) -> Info -> Info forall a. a -> [a] -> [a] : (String "ghc", String ghc) (String, String) -> Info -> Info forall a. a -> [a] -> [a] : Info ghcInfo type Info = [(String, String)] ghcInfo :: Info ghcInfo :: Info ghcInfo = String -> Info forall a. Read a => String -> a read (String -> Info) -> String -> Info forall a b. (a -> b) -> a -> b $ IO String -> String 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 " [" String -> String -> String forall a. [a] -> [a] -> [a] ++ (String -> [String] -> String forall a. [a] -> [[a]] -> [a] intercalate String "\n ," ([String] -> String) -> [String] -> String forall a b. (a -> b) -> a -> b $ ((String, String) -> String) -> Info -> [String] forall a b. (a -> b) -> [a] -> [b] map (String, String) -> String forall a. Show a => a -> String show Info xs) String -> String -> String forall a. [a] -> [a] -> [a] ++ String "\n ]\n"