on master help sign in
Move externally useful Util.System functions to IRTS.System
f27a1ffBrian McKenna
idris.cabal+2
@@ -371,6 +371,7 @@ Library
371 , IRTS.Java.Pom
371 , IRTS.Java.Pom
372 , IRTS.Lang
372 , IRTS.Lang
373 , IRTS.Simplified
373 , IRTS.Simplified
374+ , IRTS.System
374
375
375 Other-modules:
376 Other-modules:
376 Util.Pretty
377 Util.Pretty
@@ -484,6 +485,7 @@ Executable idris
484 , IRTS.Java.Pom
485 , IRTS.Java.Pom
485 , IRTS.Lang
486 , IRTS.Lang
486 , IRTS.Simplified
487 , IRTS.Simplified
488+ , IRTS.System
487
489
488 , Util.Pretty
490 , Util.Pretty
489 , Util.System
491 , Util.System
src/IRTS/CodegenC.hs+1
@@ -4,6 +4,7 @@ import Idris.AbsSyntax
4import IRTS.Bytecode
4import IRTS.Bytecode
5import IRTS.Lang
5import IRTS.Lang
6import IRTS.Simplified
6import IRTS.Simplified
7+import IRTS.System
7import IRTS.CodegenCommon
8import IRTS.CodegenCommon
8import Idris.Core.TT
9import Idris.Core.TT
9import Paths_idris
10import Paths_idris
src/IRTS/CodegenJava.hs+1
@@ -9,6 +9,7 @@ import IRTS.Java.Mangling
9import IRTS.Java.Pom (pomString)
9import IRTS.Java.Pom (pomString)
10import IRTS.Lang
10import IRTS.Lang
11import IRTS.Simplified
11import IRTS.Simplified
12+import IRTS.System
12import Util.System
13import Util.System
13
14
14import Control.Applicative hiding (Const)
15import Control.Applicative hiding (Const)
src/IRTS/System.hsnew file+63
@@ -0,0 +1,63 @@
1+{-# LANGUAGE CPP #-}
2+module IRTS.System(getTargetDir,getCC,getLibFlags,getIdrisLibDir,
3+ getIncFlags,getMvn,getExecutablePom) where
4+
5+import Util.System
6+
7+import Control.Applicative ((<$>))
8+import Data.Maybe (fromMaybe)
9+import System.FilePath ((</>), addTrailingPathSeparator)
10+import System.Environment
11+
12+import Paths_idris
13+
14+getCC :: IO String
15+getCC = fromMaybe "gcc" <$> environment "IDRIS_CC"
16+
17+mvnCommand :: String
18+#ifdef mingw32_HOST_OS
19+mvnCommand = "mvn.bat"
20+#else
21+mvnCommand = "mvn"
22+#endif
23+
24+getMvn :: IO String
25+getMvn = fromMaybe mvnCommand <$> environment "IDRIS_MVN"
26+
27+environment :: String -> IO (Maybe String)
28+environment x = catchIO (do e <- getEnv x
29+ return (Just e))
30+ (\_ -> return Nothing)
31+
32+getTargetDir :: IO String
33+getTargetDir = environment "TARGET" >>= maybe getDataDir return
34+
35+#ifdef FREEBSD
36+extraLib = " -L/usr/local/lib"
37+#else
38+extraLib = ""
39+#endif
40+
41+#ifdef IDRIS_GMP
42+gmpLib = " -lgmp"
43+#else
44+gmpLib = ""
45+#endif
46+
47+getLibFlags = do dir <- getDataDir
48+ return $ "-L" ++ (dir </> "rts") ++
49+ " -lidris_rts" ++ extraLib ++ gmpLib ++ " -lpthread"
50+
51+getIdrisLibDir = do dir <- getDataDir
52+ return $ addTrailingPathSeparator dir
53+
54+#ifdef FREEBSD
55+extraInclude = " -I/usr/local/include"
56+#else
57+extraInclude = ""
58+#endif
59+getIncFlags = do dir <- getDataDir
60+ return $ "-I" ++ dir </> "rts" ++ extraInclude
61+
62+getExecutablePom = do dir <- getDataDir
63+ return $ dir </> "java" </> "executable_pom.xml"
src/Main.hs+2−1
@@ -25,7 +25,8 @@ import Idris.Primitives
25import Idris.Imports
25import Idris.Imports
26import Idris.Error
26import Idris.Error
27
27
28−import Util.System ( getLibFlags, getIdrisLibDir, getIncFlags )
28+import IRTS.System ( getLibFlags, getIdrisLibDir, getIncFlags )
29+
29import Util.DynamicLinker
30import Util.DynamicLinker
30
31
31import Pkg.Package
32import Pkg.Package
src/Pkg/Package.hs+2
@@ -18,6 +18,8 @@ import Idris.Core.TT
18import Idris.REPL
18import Idris.REPL
19import Idris.AbsSyntax
19import Idris.AbsSyntax
20
20
21+import IRTS.System
22+
21import Pkg.PParser
23import Pkg.PParser
22
24
23import Paths_idris (getDataDir)
25import Paths_idris (getDataDir)
src/Util/System.hs+2−62
@@ -1,46 +1,24 @@
1−{-# LANGUAGE CPP #-}
2−module Util.System(tempfile,withTempdir,getTargetDir,getCC,
1+module Util.System(tempfile,withTempdir,rmFile,catchIO) where
3− getLibFlags,getIdrisLibDir,getIncFlags,rmFile,
4− getMvn,getExecutablePom,catchIO) where
5
2
6-- System helper functions.
3-- System helper functions.
7import Control.Monad (when)
4import Control.Monad (when)
8−import Control.Applicative ((<$>))
9−import Data.Maybe (fromMaybe)
10import Distribution.Text (display)
5import Distribution.Text (display)
11import System.Directory (getTemporaryDirectory
6import System.Directory (getTemporaryDirectory
12 , removeFile
7 , removeFile
13 , removeDirectoryRecursive
8 , removeDirectoryRecursive
14 , createDirectoryIfMissing
9 , createDirectoryIfMissing
15 )
10 )
16−import System.FilePath ((</>), addTrailingPathSeparator, normalise)
11+import System.FilePath ((</>), normalise)
17−import System.Environment
18import System.IO
12import System.IO
19import System.IO.Error
13import System.IO.Error
20import Control.Exception as CE
14import Control.Exception as CE
21
15
22−import Paths_idris
23−
24catchIO :: IO a -> (IOError -> IO a) -> IO a
16catchIO :: IO a -> (IOError -> IO a) -> IO a
25catchIO = CE.catch
17catchIO = CE.catch
26
18
27throwIO :: IOError -> IO a
19throwIO :: IOError -> IO a
28throwIO = CE.throw
20throwIO = CE.throw
29
21
30−
31−getCC :: IO String
32−getCC = fromMaybe "gcc" <$> environment "IDRIS_CC"
33−
34−mvnCommand :: String
35−#ifdef mingw32_HOST_OS
36−mvnCommand = "mvn.bat"
37−#else
38−mvnCommand = "mvn"
39−#endif
40−
41−getMvn :: IO String
42−getMvn = fromMaybe mvnCommand <$> environment "IDRIS_MVN"
43−
44tempfile :: IO (FilePath, Handle)
22tempfile :: IO (FilePath, Handle)
45tempfile = do dir <- getTemporaryDirectory
23tempfile = do dir <- getTemporaryDirectory
46 openTempFile (normalise dir) "idris"
24 openTempFile (normalise dir) "idris"
@@ -57,46 +35,8 @@ withTempdir subdir callback
57 when removeLater $ removeDirectoryRecursive tmpDir
35 when removeLater $ removeDirectoryRecursive tmpDir
58 return result
36 return result
59
37
60−environment :: String -> IO (Maybe String)
61−environment x = catchIO (do e <- getEnv x
62− return (Just e))
63− (\_ -> return Nothing)
64−
65−getTargetDir :: IO String
66−getTargetDir = environment "TARGET" >>= maybe getDataDir return
67−
68rmFile :: FilePath -> IO ()
38rmFile :: FilePath -> IO ()
69rmFile f = do putStrLn $ "Removing " ++ f
39rmFile f = do putStrLn $ "Removing " ++ f
70 catchIO (removeFile f)
40 catchIO (removeFile f)
71 (\ioerr -> putStrLn $ "WARNING: Cannot remove file "
41 (\ioerr -> putStrLn $ "WARNING: Cannot remove file "
72 ++ f ++ ", Error msg:" ++ show ioerr)
42 ++ f ++ ", Error msg:" ++ show ioerr)
73−
74−#ifdef FREEBSD
75−extraLib = " -L/usr/local/lib"
76−#else
77−extraLib = ""
78−#endif
79−
80−#ifdef IDRIS_GMP
81−gmpLib = " -lgmp"
82−#else
83−gmpLib = ""
84−#endif
85−
86−getLibFlags = do dir <- getDataDir
87− return $ "-L" ++ (dir </> "rts") ++
88− " -lidris_rts" ++ extraLib ++ gmpLib ++ " -lpthread"
89−
90−getIdrisLibDir = do dir <- getDataDir
91− return $ addTrailingPathSeparator dir
92−
93−#ifdef FREEBSD
94−extraInclude = " -I/usr/local/include"
95−#else
96−extraInclude = ""
97−#endif
98−getIncFlags = do dir <- getDataDir
99− return $ "-I" ++ dir </> "rts" ++ extraInclude
100−
101−getExecutablePom = do dir <- getDataDir
102− return $ dir </> "java" </> "executable_pom.xml"