on 7dcd0cd help sign in
Idris-dev/src/IRTS/System.hs
101 lines 2.8 kB history raw
1{-|
2Module : IRTS.System
3Description : Utilities for interacting with the System.
5License : BSD3
6Maintainer : The Idris Community.
7-}
8{-# LANGUAGE CPP #-}
9module IRTS.System( getIdrisDataFileByName
10 , getCC
11 , getLibFlags
12 , getIdrisDataDir
13 , getIdrisLibDir
14 , getIdrisDocDir
15 , getIdrisCRTSDir
16 , getIdrisJSRTSDir
17 , getIncFlags
18 , getEnvFlags
19 , version
20 ) where
22#ifdef FREESTANDING
23import Paths_idris (version)
24import Target_idris
25#else
26import Paths_idris
27#endif
29import Control.Applicative ((<$>))
30import Data.List.Split
31import Data.Maybe (fromMaybe)
32import System.Environment
33import System.FilePath (addTrailingPathSeparator, dropTrailingPathSeparator,
34 (</>))
37getIdrisDataDir :: IO String
38getIdrisDataDir = do
39 envValue <- lookupEnv "TARGET"
40 case envValue of
41 Nothing -> do
42 ddir <- getDataDir
43 return ddir
44 Just ddir -> return ddir
46getIdrisDataFileByName :: String -> IO FilePath
47getIdrisDataFileByName fn = do
48 dir <- getIdrisDataDir
49 return $ dir </> fn
51overrideIdrisSubDirWith :: String -- ^ Sub directory in `getDataDir` location.
52 -> String -- ^ Environment variable to get new location from.
53 -> IO FilePath
54overrideIdrisSubDirWith fp envVar = do
55 envValue <- lookupEnv envVar
56 case envValue of
57 Nothing -> do
58 ddir <- getIdrisDataDir
59 return (ddir </> fp)
60 Just ddir -> return ddir
62getCC :: IO String
63getCC = fromMaybe "gcc" <$> lookupEnv "IDRIS_CC"
65getEnvFlags :: IO [String]
66getEnvFlags = maybe [] (splitOn " ") <$> lookupEnv "IDRIS_CFLAGS"
69#if defined(freebsd_HOST_OS) || defined(dragonfly_HOST_OS)\
70 || defined(openbsd_HOST_OS) || defined(netbsd_HOST_OS)
71extraLib = ["-L/usr/local/lib"]
72extraInclude = ["-I/usr/local/include"]
73#else
74extraLib = []
75extraInclude = []
76#endif
78#ifdef IDRIS_GMP
79gmpLib = ["-lgmp"]
80#else
81gmpLib = []
82#endif
84getLibFlags = do dir <- getIdrisCRTSDir
85 return $ ["-L" ++ dropTrailingPathSeparator dir,
86 "-lidris_rts"] ++ extraLib ++ gmpLib ++ ["-lpthread"]
88getIdrisLibDir = addTrailingPathSeparator <$> overrideIdrisSubDirWith "libs" "IDRIS_LIBRARY_PATH"
90getIdrisDocDir = addTrailingPathSeparator <$> overrideIdrisSubDirWith "docs" "IDRIS_DOC_PATH"
92getIdrisJSRTSDir = do
93 ddir <- getIdrisDataDir
94 return $ addTrailingPathSeparator (ddir </> "jsrts")
96getIdrisCRTSDir = do
97 ddir <- getIdrisDataDir
98 return $ addTrailingPathSeparator (ddir </> "rts")
100getIncFlags = do dir <- getIdrisCRTSDir
101 return $ ("-I" ++ dropTrailingPathSeparator dir) : extraInclude