ref: 660cf9275b8374f89c8f5db51a070070f28c1afc
dir: /lib/System/Info.hs/
module System.Info(os, arch, compilerName, compilerVersion, fullCompilerVersion) where
import Control.Monad
import Data.Char
import Data.Version(Version(..))
import System.Cmd
import System.Directory
import System.Exit
import System.IO
import System.IO.Unsafe
os :: String
os = if _isWindows then "windows" else uname "-s"
arch :: String
arch = if _isWindows then "x86_64" else uname "-m"
compilerName :: String
compilerName = "mhs"
compilerVersion :: Version
compilerVersion = Version [0,9]
fullCompilerVersion :: Version
fullCompilerVersion = Version [0,9,0]
-- Assume the system has an uname command
uname :: String -> String
uname flag = unsafePerformIO $ do
(fn, h) <- openTmpFile "uname"
hClose h
rc <- system $ "uname " ++ flag ++ " >" ++ fn
res <- readFile fn
removeFile fn
when (rc /= ExitSuccess) $
error $ "System.Into: uname failed"
return $ map toLower $ filter (not . isSpace) res