@@ -1,46 +1,24 @@
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
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
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
24catchIO :: IO a -> (IOError -> IO a) -> IO a
16catchIO :: IO a -> (IOError -> IO a) -> IO a
25catchIO = CE.catch
17catchIO = CE.catch
27throwIO :: IOError -> IO a
19throwIO :: IOError -> IO a
28throwIO = CE.throw
20throwIO = CE.throw
32−getCC = fromMaybe "gcc" <$> environment "IDRIS_CC"
35−#ifdef mingw32_HOST_OS
36−mvnCommand = "mvn.bat"
42−getMvn = fromMaybe mvnCommand <$> environment "IDRIS_MVN"
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
60−environment :: String -> IO (Maybe String)
61−environment x = catchIO (do e <- getEnv x
63− (\_ -> return Nothing)
65−getTargetDir :: IO String
66−getTargetDir = environment "TARGET" >>= maybe getDataDir return
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)
75−extraLib = " -L/usr/local/lib"
86−getLibFlags = do dir <- getDataDir
87− return $ "-L" ++ (dir </> "rts") ++
88− " -lidris_rts" ++ extraLib ++ gmpLib ++ " -lpthread"
90−getIdrisLibDir = do dir <- getDataDir
91− return $ addTrailingPathSeparator dir
94−extraInclude = " -I/usr/local/include"
98−getIncFlags = do dir <- getDataDir
99− return $ "-I" ++ dir </> "rts" ++ extraInclude
101−getExecutablePom = do dir <- getDataDir
102− return $ dir </> "java" </> "executable_pom.xml"