@@ -4,11 +4,13 @@ import System.Process
4import System.Directory
4import System.Directory
5import System.Exit
5import System.Exit
6import System.IO
6import System.IO
7+import System.FilePath ((</>), addTrailingPathSeparator)
8import Util.System
9import Util.System
10import Control.Monad
11import Control.Monad
11import Data.List
12import Data.List
13+import Data.List.Split(splitOn)
13import Core.TT
15import Core.TT
14import Idris.REPL
16import Idris.REPL
@@ -32,14 +34,14 @@ buildPkg warnonly (install, fp)
32 when (and ok) $
34 when (and ok) $
33 do make (makefile pkgdesc)
35 do make (makefile pkgdesc)
34 dir <- getCurrentDirectory
36 dir <- getCurrentDirectory
35− setCurrentDirectory $ dir ++ "/" ++ sourcedir pkgdesc
37+ setCurrentDirectory $ dir </> sourcedir pkgdesc
36 case (execout pkgdesc) of
38 case (execout pkgdesc) of
37 Nothing -> buildMods (NoREPL : Verbose : idris_opts pkgdesc)
39 Nothing -> buildMods (NoREPL : Verbose : idris_opts pkgdesc)
38 (modules pkgdesc)
40 (modules pkgdesc)
39− Just o -> do let exec = dir ++ "/" ++ o
41+ Just o -> do let exec = dir </> o
40− buildMod
42+ buildMods
41 (NoREPL : Verbose : Output exec : idris_opts pkgdesc)
43 (NoREPL : Verbose : Output exec : idris_opts pkgdesc)
42− (idris_main pkgdesc)
44+ [idris_main pkgdesc]
43 setCurrentDirectory dir
45 setCurrentDirectory dir
44 when install $ installPkg pkgdesc
46 when install $ installPkg pkgdesc
@@ -48,11 +50,11 @@ cleanPkg fp
48 = do pkgdesc <- parseDesc fp
50 = do pkgdesc <- parseDesc fp
49 clean (makefile pkgdesc)
51 clean (makefile pkgdesc)
50 dir <- getCurrentDirectory
52 dir <- getCurrentDirectory
51− setCurrentDirectory $ dir ++ "/" ++ sourcedir pkgdesc
53+ setCurrentDirectory $ dir </> sourcedir pkgdesc
52 mapM_ rmIBC (modules pkgdesc)
54 mapM_ rmIBC (modules pkgdesc)
53 case execout pkgdesc of
55 case execout pkgdesc of
54 Nothing -> return ()
56 Nothing -> return ()
55− Just s -> do let exec = dir ++ "/" ++ s
57+ Just s -> do let exec = dir </> s
56 putStrLn $ "Removing " ++ exec
58 putStrLn $ "Removing " ++ exec
57 system $ "rm -f " ++ exec
59 system $ "rm -f " ++ exec
@@ -60,25 +62,17 @@ cleanPkg fp
60installPkg :: PkgDesc -> IO ()
62installPkg :: PkgDesc -> IO ()
61installPkg pkgdesc
63installPkg pkgdesc
62 = do dir <- getCurrentDirectory
64 = do dir <- getCurrentDirectory
63− setCurrentDirectory $ dir ++ "/" ++ sourcedir pkgdesc
65+ setCurrentDirectory $ dir </> sourcedir pkgdesc
64 case (execout pkgdesc) of
66 case (execout pkgdesc) of
65 Nothing -> mapM_ (installIBC (pkgname pkgdesc)) (modules pkgdesc)
67 Nothing -> mapM_ (installIBC (pkgname pkgdesc)) (modules pkgdesc)
66 Just o -> return () -- do nothing, keep executable locally, for noe
68 Just o -> return () -- do nothing, keep executable locally, for noe
67 mapM_ (installObj (pkgname pkgdesc)) (objs pkgdesc)
69 mapM_ (installObj (pkgname pkgdesc)) (objs pkgdesc)
69−buildMod :: [Opt] -> Name -> IO ()
70−buildMod opts n = do let f = map slash $ show n
71− idris (Filename f : opts)
73− where slash '.' = '/'
76buildMods :: [Opt] -> [Name] -> IO ()
71buildMods :: [Opt] -> [Name] -> IO ()
77−buildMods opts ns = do let f = map ((map slash) . show) ns
72+buildMods opts ns = do let f = map (toPath . show) ns
78 idris (map Filename f ++ opts)
73 idris (map Filename f ++ opts)
80− where slash '.' = '/'
75+ where toPath n = foldl1 (</>) $ splitOn "." n
83testLib :: Bool -> String -> String -> IO Bool
77testLib :: Bool -> String -> String -> IO Bool
84testLib warn p f
78testLib warn p f
@@ -86,7 +80,8 @@ testLib warn p f
86 gcc <- getCC
80 gcc <- getCC
87 (tmpf, tmph) <- tempfile
81 (tmpf, tmph) <- tempfile
88 hClose tmph
82 hClose tmph
83+ let libtest = d </> "rts" </> "libtest.c"
89− e <- system $ gcc ++ " " ++ d ++ "/rts/libtest.c -l" ++ f ++ " -o " ++ tmpf
84+ e <- system $ gcc ++ " " ++ libtest ++ " -l" ++ f ++ " -o " ++ tmpf
91 ExitSuccess -> return True
86 ExitSuccess -> return True
92 _ -> do if warn
87 _ -> do if warn
@@ -102,22 +97,22 @@ rmIBC m = do let f = toIBCFile m
102 return ()
97 return ()
104toIBCFile (UN n) = n ++ ".ibc"
99toIBCFile (UN n) = n ++ ".ibc"
105−toIBCFile (NS n ns) = concat (intersperse "/" (reverse ns)) ++ "/" ++ toIBCFile n
100+toIBCFile (NS n ns) = foldl1 (</>) (reverse (toIBCFile n : ns))
107installIBC :: String -> Name -> IO ()
102installIBC :: String -> Name -> IO ()
108installIBC p m = do let f = toIBCFile m
103installIBC p m = do let f = toIBCFile m
109 d <- getDataDir
104 d <- getDataDir
110− let destdir = d ++ "/" ++ p ++ "/" ++ getDest m
105+ let destdir = d </> p </> getDest m
111 putStrLn $ "Installing " ++ f ++ " to " ++ destdir
106 putStrLn $ "Installing " ++ f ++ " to " ++ destdir
112 system $ "mkdir -p " ++ destdir
107 system $ "mkdir -p " ++ destdir
113 system $ "install " ++ f ++ " " ++ destdir
108 system $ "install " ++ f ++ " " ++ destdir
114 return ()
109 return ()
115 where getDest (UN n) = ""
110 where getDest (UN n) = ""
116− getDest (NS n ns) = concat (intersperse "/" (reverse ns)) ++ "/" ++ getDest n
111+ getDest (NS n ns) = foldl1 (</>) (reverse (getDest n : ns))
118installObj :: String -> String -> IO ()
113installObj :: String -> String -> IO ()
119installObj p o = do d <- getDataDir
114installObj p o = do d <- getDataDir
120− let destdir = d ++ "/" ++ p ++ "/"
115+ let destdir = addTrailingPathSeparator (d </> p)
121 putStrLn $ "Installing " ++ o ++ " to " ++ destdir
116 putStrLn $ "Installing " ++ o ++ " to " ++ destdir
122 system $ "mkdir -p " ++ destdir
117 system $ "mkdir -p " ++ destdir
123 system $ "install " ++ o ++ " " ++ destdir
118 system $ "install " ++ o ++ " " ++ destdir
@@ -133,5 +128,3 @@ clean Nothing = return ()
133clean (Just s) = do system $ "make -f " ++ s ++ " clean"
128clean (Just s) = do system $ "make -f " ++ s ++ " clean"
134 return ()
129 return ()