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