on 0924f34 help sign in
Idris-dev/src/IRTS/System.hs
74 lines 1.9 kB history raw
1{-|
2Module : IRTS.System
3Description : Utilities for interacting with the System.
4Copyright :
5License : BSD3
6Maintainer : The Idris Community.
7-}
8{-# LANGUAGE CPP #-}
9module IRTS.System( getDataFileName
10 , getDataDir
11 , getTargetDir
12 , getCC
13 , getLibFlags
14 , getIdrisLibDir
15 , getIncFlags
16 , getEnvFlags
17 , version
18 ) where
20import Data.List.Split
22import Control.Applicative ((<$>))
23import Data.Maybe (fromMaybe)
24import System.FilePath ((</>), addTrailingPathSeparator)
25import System.Environment
27#ifdef FREESTANDING
28import Target_idris
29import Paths_idris (version)
30#else
31import Paths_idris
32#endif
34overrideDataDirWith :: String -> IO FilePath
35overrideDataDirWith envVar = do
36 envValue <- lookupEnv envVar
37 case envValue of
38 Nothing -> do
39 ddir <- getDataDir
40 return (ddir </> "libs")
41 Just ddir -> return ddir
43getCC :: IO String
44getCC = fromMaybe "gcc" <$> lookupEnv "IDRIS_CC"
46getEnvFlags :: IO [String]
47getEnvFlags = maybe [] (splitOn " ") <$> lookupEnv "IDRIS_CFLAGS"
49getTargetDir :: IO String
50getTargetDir = overrideDataDirWith "TARGET"
52#if defined(freebsd_HOST_OS) || defined(dragonfly_HOST_OS)\
53 || defined(openbsd_HOST_OS) || defined(netbsd_HOST_OS)
54extraLib = ["-L/usr/local/lib"]
55extraInclude = ["-I/usr/local/include"]
56#else
57extraLib = []
58extraInclude = []
59#endif
61#ifdef IDRIS_GMP
62gmpLib = ["-lgmp"]
63#else
64gmpLib = []
65#endif
67getLibFlags = do dir <- getDataDir
68 return $ ["-L" ++ (dir </> "rts"),
69 "-lidris_rts"] ++ extraLib ++ gmpLib ++ ["-lpthread"]
71getIdrisLibDir = addTrailingPathSeparator <$> overrideDataDirWith "IDRIS_LIBRARY_PATH"
73getIncFlags = do dir <- getDataDir
74 return $ ("-I" ++ dir </> "rts") : extraInclude