@@ -7,12 +7,13 @@ Maintainer : The Idris Community.
77-}
88{-# LANGUAGE CPP #-}
99module IRTS.System( getDataFileName
10− , getDataDir
11− , getTargetDir
1210 , getCC
1311 , getLibFlags
12+ , getIdrisDataDir
1413 , getIdrisLibDir
1514 , getIdrisDocDir
15+ , getIdrisCRTSDir
16+ , getIdrisJSRTSDir
1617 , getIncFlags
1718 , getEnvFlags
1819 , version
@@ -32,22 +33,25 @@ import Paths_idris (version)
3233import Paths_idris
3334#endif
3435
35−overrideIdrisDirWith :: String -- ^ Sub directory in `getDataDir` location.
36− -> String -- ^ Environment variable to get new location from.
37− -> IO FilePath
38−overrideIdrisDirWith fp envVar = do
39− envValue <- lookupEnv envVar
36+getIdrisDataDir :: IO String
37+getIdrisDataDir = do
38+ envValue <- lookupEnv "TARGET"
4039 case envValue of
4140 Nothing -> do
4241 ddir <- getDataDir
43− return (ddir </> fp)
42+ return ddir
4443 Just ddir -> return ddir
4544
46−overrideIdrisLibDirWith :: String -> IO FilePath
47−overrideIdrisLibDirWith = overrideIdrisDirWith "libs"
48−
49−overrideIdrisDocDirWith :: String -> IO FilePath
50−overrideIdrisDocDirWith = overrideIdrisDirWith "docs"
45+overrideIdrisSubDirWith :: String -- ^ Sub directory in `getDataDir` location.
46+ -> String -- ^ Environment variable to get new location from.
47+ -> IO FilePath
48+overrideIdrisSubDirWith fp envVar = do
49+ envValue <- lookupEnv envVar
50+ case envValue of
51+ Nothing -> do
52+ ddir <- getIdrisDataDir
53+ return (ddir </> fp)
54+ Just ddir -> return ddir
5155
5256getCC :: IO String
5357getCC = fromMaybe "gcc" <$> lookupEnv "IDRIS_CC"
@@ -55,8 +59,6 @@ getCC = fromMaybe "gcc" <$> lookupEnv "IDRIS_CC"
5559getEnvFlags :: IO [String]
5660getEnvFlags = maybe [] (splitOn " ") <$> lookupEnv "IDRIS_CFLAGS"
5761
58−getTargetDir :: IO String
59−getTargetDir = overrideIdrisLibDirWith "TARGET"
6062
6163#if defined(freebsd_HOST_OS) || defined(dragonfly_HOST_OS)\
6264 || defined(openbsd_HOST_OS) || defined(netbsd_HOST_OS)
@@ -73,14 +75,21 @@ gmpLib = ["-lgmp"]
7375gmpLib = []
7476#endif
7577
76−getLibFlags = do dir <- getDataDir
77− return $ ["-L" ++ (dir </> "rts"),
78+getLibFlags = do dir <- getIdrisCRTSDir
79+ return $ ["-L" ++ dir,
7880 "-lidris_rts"] ++ extraLib ++ gmpLib ++ ["-lpthread"]
7981
80−getIdrisLibDir = addTrailingPathSeparator <$> overrideIdrisLibDirWith "IDRIS_LIBRARY_PATH"
82+getIdrisLibDir = addTrailingPathSeparator <$> overrideIdrisSubDirWith "libs" "IDRIS_LIBRARY_PATH"
83+
84+getIdrisDocDir = addTrailingPathSeparator <$> overrideIdrisSubDirWith "docs" "IDRIS_DOC_PATH"
8185
82−getIdrisDocDir = addTrailingPathSeparator <$> overrideIdrisDocDirWith "IDRIS_DOC_PATH"
86+getIdrisJSRTSDir = do
87+ ddir <- getIdrisDataDir
88+ return $ addTrailingPathSeparator (ddir </> "jsrts")
8389
90+getIdrisCRTSDir = do
91+ ddir <- getIdrisDataDir
92+ return $ addTrailingPathSeparator (ddir </> "rts")
8493
85−getIncFlags = do dir <- getDataDir
86− return $ ("-I" ++ dir </> "rts") : extraInclude
94+getIncFlags = do dir <- getIdrisCRTSDir
95+ return $ ("-I" ++ dir) : extraInclude