@@ -17,8 +17,8 @@ import Control.Monad.Trans.Except (runExceptT)
18import Data.List
18import Data.List
19import Data.List.Split(splitOn)
19import Data.List.Split(splitOn)
20−
20+import Data.Maybe(fromMaybe)
21−import Data.Either
21+import Data.Either(partitionEithers)
23import Idris.Core.TT
23import Idris.Core.TT
24import Idris.REPL
24import Idris.REPL
@@ -79,7 +79,7 @@ buildPkg copts warnonly (install, fp) = do
79 case errSpan ist of
79 case errSpan ist of
80 Just _ -> exitWith (ExitFailure 1)
80 Just _ -> exitWith (ExitFailure 1)
81 _ -> return ()
81 _ -> return ()
82− when install $ installPkg pkgdesc
82+ when install $ installPkg (opt getIBCSubDir copts) pkgdesc
84-- --------------------------------------------------------- [ Check Packages ]
84-- --------------------------------------------------------- [ Check Packages ]
@@ -254,14 +254,21 @@ testPkg copts fp = do
254-- ----------------------------------------------------------- [ Installation ]
254-- ----------------------------------------------------------- [ Installation ]
256-- | Install package
256-- | Install package
257+installPkg :: [String] -- ^ Alternate install location
257−installPkg :: PkgDesc -> IO ()
258+ -> PkgDesc -- ^ iPKG file.
258−installPkg pkgdesc
260+installPkg altdests pkgdesc = inPkgDir pkgdesc $ do
259− = inPkgDir pkgdesc $
261+ d <- getTargetDir
262+ let destdir = case altdests of
260− do case (execout pkgdesc) of
265+ case (execout pkgdesc) of
261− Nothing -> do mapM_ (installIBC (pkgname pkgdesc)) (modules pkgdesc)
267+ mapM_ (installIBC destdir (pkgname pkgdesc)) (modules pkgdesc)
262− installIdx (pkgname pkgdesc)
268+ installIdx destdir (pkgname pkgdesc)
263− Just o -> return () -- do nothing, keep executable locally, for noe
269+ Just o -> return () -- do nothing, keep executable locally, for noe
264− mapM_ (installObj (pkgname pkgdesc)) (objs pkgdesc)
271+ mapM_ (installObj destdir (pkgname pkgdesc)) (objs pkgdesc)
266-- ---------------------------------------------------------- [ Helper Methods ]
273-- ---------------------------------------------------------- [ Helper Methods ]
267-- Methods for building, testing, installing, and removal of idris
274-- Methods for building, testing, installing, and removal of idris
@@ -305,33 +312,34 @@ rmExe p = do
305toIBCFile (UN n) = str n ++ ".ibc"
312toIBCFile (UN n) = str n ++ ".ibc"
306toIBCFile (NS n ns) = foldl1' (</>) (reverse (toIBCFile n : map str ns))
313toIBCFile (NS n ns) = foldl1' (</>) (reverse (toIBCFile n : map str ns))
308−installIBC :: String -> Name -> IO ()
315+installIBC :: String -> String -> Name -> IO ()
316+installIBC dest p m = do
309−installIBC p m = do let f = toIBCFile m
317+ let f = toIBCFile m
311− let destdir = d </> p </> getDest m
318+ let destdir = dest </> p </> getDest m
312− putStrLn $ "Installing " ++ f ++ " to " ++ destdir
319+ putStrLn $ "Installing " ++ f ++ " to " ++ destdir
313− createDirectoryIfMissing True destdir
320+ createDirectoryIfMissing True destdir
314− copyFile f (destdir </> takeFileName f)
321+ copyFile f (destdir </> takeFileName f)
315− return ()
322+ return ()
316− where getDest (UN n) = ""
324+ getDest (UN n) = ""
317− getDest (NS n ns) = foldl1' (</>) (reverse (getDest n : map str ns))
325+ getDest (NS n ns) = foldl1' (</>) (reverse (getDest n : map str ns))
319−installIdx :: String -> IO ()
327+installIdx :: String -> String -> IO ()
320−installIdx p = do d <- getTargetDir
328+installIdx dest p = do
321− let f = pkgIndex p
329+ let f = pkgIndex p
322− let destdir = d </> p
330+ let destdir = dest </> p
323− putStrLn $ "Installing " ++ f ++ " to " ++ destdir
331+ putStrLn $ "Installing " ++ f ++ " to " ++ destdir
324− createDirectoryIfMissing True destdir
332+ createDirectoryIfMissing True destdir
325− copyFile f (destdir </> takeFileName f)
333+ copyFile f (destdir </> takeFileName f)
326− return ()
334+ return ()
328−installObj :: String -> String -> IO ()
336+installObj :: String -> String -> String -> IO ()
329−installObj p o = do d <- getTargetDir
337+installObj dest p o = do
330− let destdir = addTrailingPathSeparator (d </> p)
338+ let destdir = addTrailingPathSeparator (dest </> p)
331− putStrLn $ "Installing " ++ o ++ " to " ++ destdir
339+ putStrLn $ "Installing " ++ o ++ " to " ++ destdir
332− createDirectoryIfMissing True destdir
340+ createDirectoryIfMissing True destdir
333− copyFile o (destdir </> takeFileName o)
341+ copyFile o (destdir </> takeFileName o)
334− return ()
342+ return ()
336#ifdef mingw32_HOST_OS
344#ifdef mingw32_HOST_OS
337mkDirCmd = "mkdir "
345mkDirCmd = "mkdir "