{-|
Module      : Idris.Info
Description : Get information about Idris.
 2016 The Idris Community
License     : BSD3
Maintainer  : The Idris Community.
-}
module Idris.Info
  ( getIdrisDataDir
  , getIdrisCRTSDir
  , getIdrisJSRTSDir
  , getIdrisLibDir
  , getIdrisDocDir
  , getIdrisFlagsLib
  , getIdrisFlagsInc
  , getIdrisFlagsEnv
  , getIdrisCC
  , getIdrisVersion
  , getIdrisVersionNoGit
  , getIdrisUserDataDir
  , getIdrisInitScript
  , getIdrisHistoryFile
  , getIdrisInstalledPackages
  , getIdrisLoggingCategories
  , getIdrisDataFileByName
  ) where

import Idris.Imports (installedPackages)
import Idris.Options (loggingCatsStr)
import qualified IRTS.System as S

import Version_idris (gitHash)

import Data.Version
import System.Directory
import System.FilePath

getIdrisDataDir :: IO String
getIdrisDataDir :: IO String
getIdrisDataDir = IO String
S.getIdrisDataDir

getIdrisCRTSDir :: IO String
getIdrisCRTSDir :: IO String
getIdrisCRTSDir = IO String
S.getIdrisCRTSDir

getIdrisJSRTSDir :: IO String
getIdrisJSRTSDir :: IO String
getIdrisJSRTSDir = IO String
S.getIdrisJSRTSDir

getIdrisDocDir :: IO String
getIdrisDocDir :: IO String
getIdrisDocDir = IO String
S.getIdrisDocDir

getIdrisLibDir :: IO String
getIdrisLibDir :: IO String
getIdrisLibDir = IO String
S.getIdrisLibDir

getIdrisFlagsLib :: IO [String]
getIdrisFlagsLib :: IO [String]
getIdrisFlagsLib = IO [String]
S.getLibFlags

getIdrisFlagsInc :: IO [String]
getIdrisFlagsInc :: IO [String]
getIdrisFlagsInc = IO [String]
S.getIncFlags

getIdrisFlagsEnv :: IO [String]
getIdrisFlagsEnv :: IO [String]
getIdrisFlagsEnv = IO [String]
S.getEnvFlags

getIdrisCC :: IO String
getIdrisCC :: IO String
getIdrisCC = IO String
S.getCC

getIdrisVersion :: String
getIdrisVersion = Version -> String
showVersion Version
S.version String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
suffix
  where
    suffix :: String
suffix = if String
gitHash String -> String -> Bool
forall a. Eq a => a -> a -> Bool
==String
"" then String
"" else String
"-" String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
gitHash

getIdrisVersionNoGit :: Version
getIdrisVersionNoGit = Version
S.version


-- | Get the platform-specific, user-specific Idris dir
getIdrisUserDataDir :: IO FilePath
getIdrisUserDataDir :: IO String
getIdrisUserDataDir = String -> IO String
getAppUserDataDirectory String
"idris"

-- | Locate the platform-specific location for the init script
getIdrisInitScript :: IO FilePath
getIdrisInitScript :: IO String
getIdrisInitScript = do
  String
idrisDir <- IO String
getIdrisUserDataDir
  String -> IO String
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (String -> IO String) -> String -> IO String
forall a b. (a -> b) -> a -> b
$ String
idrisDir String -> String -> String
</> String
"repl" String -> String -> String
</> String
"init"

getIdrisHistoryFile :: IO FilePath
getIdrisHistoryFile :: IO String
getIdrisHistoryFile = do
  String
udir <- IO String
getIdrisUserDataDir
  String -> IO String
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (String
udir String -> String -> String
</> String
"repl" String -> String -> String
</> String
"history")

getIdrisInstalledPackages :: IO [String]
getIdrisInstalledPackages :: IO [String]
getIdrisInstalledPackages = IO [String]
installedPackages

getIdrisLoggingCategories :: IO [String]
getIdrisLoggingCategories :: IO [String]
getIdrisLoggingCategories = [String] -> IO [String]
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ([String] -> IO [String]) -> [String] -> IO [String]
forall a b. (a -> b) -> a -> b
$ String -> [String]
words String
loggingCatsStr

getIdrisDataFileByName :: String -> IO FilePath
getIdrisDataFileByName :: String -> IO String
getIdrisDataFileByName = String -> IO String
S.getIdrisDataFileByName