module IRTS.System(getDataFileName, getDataDir, getTargetDir,getCC,getLibFlags,getIdrisLibDir,
getIncFlags, getEnvFlags, getMvn,getExecutablePom, version) where
import Util.System
import Data.List.Split
import Control.Applicative ((<$>))
import Data.Maybe (fromMaybe)
import System.FilePath ((</>), addTrailingPathSeparator)
import System.Environment
#ifdef FREESTANDING
import Target_idris
import Paths_idris (version)
#else
import Paths_idris
#endif
getCC :: IO String
getCC = fromMaybe "gcc" <$> environment "IDRIS_CC"
getEnvFlags :: IO [String]
getEnvFlags = do flags <- environment "IDRIS_CFLAGS"
case flags of
Nothing -> return $ []
Just s -> return $ splitOn " " s
mvnCommand :: String
#ifdef mingw32_HOST_OS
mvnCommand = "mvn.bat"
#else
mvnCommand = "mvn"
#endif
getMvn :: IO String
getMvn = fromMaybe mvnCommand <$> environment "IDRIS_MVN"
environment :: String -> IO (Maybe String)
environment x = catchIO (do e <- getEnv x
return (Just e))
(\_ -> return Nothing)
getTargetDir :: IO String
getTargetDir = environment "TARGET" >>= maybe getDataDir return
#if defined(FREEBSD) || defined(DRAGONFLY)
extraLib = ["-L/usr/local/lib"]
#else
extraLib = []
#endif
#ifdef IDRIS_GMP
gmpLib = ["-lgmp"]
#else
gmpLib = []
#endif
getLibFlags = do dir <- getDataDir
return $ ["-L" ++ (dir </> "rts"),
"-lidris_rts"] ++ extraLib ++ gmpLib ++ ["-lpthread"]
getIdrisLibDir = do libPath <- environment "IDRIS_LIBRARY_PATH"
dir <- maybe getDataDir return libPath
return $ addTrailingPathSeparator dir
#if defined(FREEBSD) || defined(DRAGONFLY)
extraInclude = ["-I/usr/local/include"]
#else
extraInclude = []
#endif
getIncFlags = do dir <- getDataDir
return $ ("-I" ++ dir </> "rts") : extraInclude
getExecutablePom = do dir <- getDataDir
return $ dir </> "java" </> "executable_pom.xml"