on 735fbd2 help sign in
Idris-dev/src/IRTS/System.hs
100 lines 2.7 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( 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, (</>))
36getIdrisDataDir :: IO String
37getIdrisDataDir = do
38 envValue <- lookupEnv "TARGET"
39 case envValue of
40 Nothing -> do
41 ddir <- getDataDir
42 return ddir
43 Just ddir -> return ddir
45getIdrisDataFileByName :: String -> IO FilePath
46getIdrisDataFileByName fn = do
47 dir <- getIdrisDataDir
48 return $ dir </> fn
50overrideIdrisSubDirWith :: String -- ^ Sub directory in `getDataDir` location.
51 -> String -- ^ Environment variable to get new location from.
52 -> IO FilePath
53overrideIdrisSubDirWith fp envVar = do
54 envValue <- lookupEnv envVar
55 case envValue of
56 Nothing -> do
57 ddir <- getIdrisDataDir
58 return (ddir </> fp)
59 Just ddir -> return ddir
61getCC :: IO String
62getCC = fromMaybe "gcc" <$> lookupEnv "IDRIS_CC"
64getEnvFlags :: IO [String]
65getEnvFlags = maybe [] (splitOn " ") <$> lookupEnv "IDRIS_CFLAGS"
68#if defined(freebsd_HOST_OS) || defined(dragonfly_HOST_OS)\
69 || defined(openbsd_HOST_OS) || defined(netbsd_HOST_OS)
70extraLib = ["-L/usr/local/lib"]
71extraInclude = ["-I/usr/local/include"]
72#else
73extraLib = []
74extraInclude = []
75#endif
77#ifdef IDRIS_GMP
78gmpLib = ["-lgmp"]
79#else
80gmpLib = []
81#endif
83getLibFlags = do dir <- getIdrisCRTSDir
84 return $ ["-L" ++ dir,
85 "-lidris_rts"] ++ extraLib ++ gmpLib ++ ["-lpthread"]
87getIdrisLibDir = addTrailingPathSeparator <$> overrideIdrisSubDirWith "libs" "IDRIS_LIBRARY_PATH"
89getIdrisDocDir = addTrailingPathSeparator <$> overrideIdrisSubDirWith "docs" "IDRIS_DOC_PATH"
91getIdrisJSRTSDir = do
92 ddir <- getIdrisDataDir
93 return $ addTrailingPathSeparator (ddir </> "jsrts")
95getIdrisCRTSDir = do
96 ddir <- getIdrisDataDir
97 return $ addTrailingPathSeparator (ddir </> "rts")
99getIncFlags = do dir <- getIdrisCRTSDir
100 return $ ("-I" ++ dir) : extraInclude