@@ -4,11 +4,13 @@ import System.Process
44import System.Directory
55import System.Exit
66import System.IO
7+import System.FilePath ((</>), addTrailingPathSeparator)
78
89import Util.System
910
1011import Control.Monad
1112import Data.List
13+import Data.List.Split(splitOn)
1214
1315import Core.TT
1416import Idris.REPL
@@ -32,14 +34,14 @@ buildPkg warnonly (install, fp)
3234 when (and ok) $
3335 do make (makefile pkgdesc)
3436 dir <- getCurrentDirectory
35− setCurrentDirectory $ dir ++ "/" ++ sourcedir pkgdesc
37+ setCurrentDirectory $ dir </> sourcedir pkgdesc
3638 case (execout pkgdesc) of
3739 Nothing -> buildMods (NoREPL : Verbose : idris_opts pkgdesc)
3840 (modules pkgdesc)
39− Just o -> do let exec = dir ++ "/" ++ o
40− buildMod
41+ Just o -> do let exec = dir </> o
42+ buildMods
4143 (NoREPL : Verbose : Output exec : idris_opts pkgdesc)
42− (idris_main pkgdesc)
44+ [idris_main pkgdesc]
4345 setCurrentDirectory dir
4446 when install $ installPkg pkgdesc
4547
@@ -48,11 +50,11 @@ cleanPkg fp
4850 = do pkgdesc <- parseDesc fp
4951 clean (makefile pkgdesc)
5052 dir <- getCurrentDirectory
51− setCurrentDirectory $ dir ++ "/" ++ sourcedir pkgdesc
53+ setCurrentDirectory $ dir </> sourcedir pkgdesc
5254 mapM_ rmIBC (modules pkgdesc)
5355 case execout pkgdesc of
5456 Nothing -> return ()
55− Just s -> do let exec = dir ++ "/" ++ s
57+ Just s -> do let exec = dir </> s
5658 putStrLn $ "Removing " ++ exec
5759 system $ "rm -f " ++ exec
5860 return ()
@@ -60,25 +62,17 @@ cleanPkg fp
6062installPkg :: PkgDesc -> IO ()
6163installPkg pkgdesc
6264 = do dir <- getCurrentDirectory
63− setCurrentDirectory $ dir ++ "/" ++ sourcedir pkgdesc
65+ setCurrentDirectory $ dir </> sourcedir pkgdesc
6466 case (execout pkgdesc) of
6567 Nothing -> mapM_ (installIBC (pkgname pkgdesc)) (modules pkgdesc)
6668 Just o -> return () -- do nothing, keep executable locally, for noe
6769 mapM_ (installObj (pkgname pkgdesc)) (objs pkgdesc)
6870
69−buildMod :: [Opt] -> Name -> IO ()
70−buildMod opts n = do let f = map slash $ show n
71− idris (Filename f : opts)
72− return ()
73− where slash '.' = '/'
74− slash x = x
75−
7671buildMods :: [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
7873 idris (map Filename f ++ opts)
7974 return ()
80− where slash '.' = '/'
81− slash x = x
75+ where toPath n = foldl1 (</>) $ splitOn "." n
8276
8377testLib :: Bool -> String -> String -> IO Bool
8478testLib warn p f
@@ -86,7 +80,8 @@ testLib warn p f
8680 gcc <- getCC
8781 (tmpf, tmph) <- tempfile
8882 hClose tmph
89− e <- system $ gcc ++ " " ++ d ++ "/rts/libtest.c -l" ++ f ++ " -o " ++ tmpf
83+ let libtest = d </> "rts" </> "libtest.c"
84+ e <- system $ gcc ++ " " ++ libtest ++ " -l" ++ f ++ " -o " ++ tmpf
9085 case e of
9186 ExitSuccess -> return True
9287 _ -> do if warn
@@ -102,22 +97,22 @@ rmIBC m = do let f = toIBCFile m
10297 return ()
10398
10499toIBCFile (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))
106101
107102installIBC :: String -> Name -> IO ()
108103installIBC p m = do let f = toIBCFile m
109104 d <- getDataDir
110− let destdir = d ++ "/" ++ p ++ "/" ++ getDest m
105+ let destdir = d </> p </> getDest m
111106 putStrLn $ "Installing " ++ f ++ " to " ++ destdir
112107 system $ "mkdir -p " ++ destdir
113108 system $ "install " ++ f ++ " " ++ destdir
114109 return ()
115110 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))
117112
118113installObj :: String -> String -> IO ()
119114installObj p o = do d <- getDataDir
120− let destdir = d ++ "/" ++ p ++ "/"
115+ let destdir = addTrailingPathSeparator (d </> p)
121116 putStrLn $ "Installing " ++ o ++ " to " ++ destdir
122117 system $ "mkdir -p " ++ destdir
123118 system $ "install " ++ o ++ " " ++ destdir
@@ -133,5 +128,3 @@ clean Nothing = return ()
133128clean (Just s) = do system $ "make -f " ++ s ++ " clean"
134129 return ()
135130
136−
137−