@@ -365,6 +365,35 @@ displayHelp = let vstr = showVersion version in
365 l ++ take (c1 - length l) (repeat ' ') ++
365 l ++ take (c1 - length l) (repeat ' ') ++
366 m ++ take (c2 - length m) (repeat ' ') ++ r ++ "\n"
366 m ++ take (c2 - length m) (repeat ' ') ++ r ++ "\n"
368+parseArgs :: [String] -> [Opt]
370+parseArgs ("--log":lvl:ns) = OLogging (read lvl) : (parseArgs ns)
371+parseArgs ("--noprelude":ns) = NoPrelude : (parseArgs ns)
372+parseArgs ("--check":ns) = NoREPL : (parseArgs ns)
373+parseArgs ("-o":n:ns) = NoREPL : Output n : (parseArgs ns)
374+parseArgs ("-no":n:ns) = NoREPL : NewOutput n : (parseArgs ns)
375+parseArgs ("--typecase":ns) = TypeCase : (parseArgs ns)
376+parseArgs ("--typeintype":ns) = TypeInType : (parseArgs ns)
377+parseArgs ("--nocoverage":ns) = NoCoverage : (parseArgs ns)
378+parseArgs ("--errorcontext":ns) = ErrContext : (parseArgs ns)
379+parseArgs ("--help":ns) = Usage : (parseArgs ns)
380+parseArgs ("--link":ns) = ShowLibs : (parseArgs ns)
381+parseArgs ("--libdir":ns) = ShowLibdir : (parseArgs ns)
382+parseArgs ("--include":ns) = ShowIncs : (parseArgs ns)
383+parseArgs ("--version":ns) = Ver : (parseArgs ns)
384+parseArgs ("--verbose":ns) = Verbose : (parseArgs ns)
385+parseArgs ("--ibcsubdir":n:ns) = IBCSubDir n : (parseArgs ns)
386+parseArgs ("-i":n:ns) = ImportDir n : (parseArgs ns)
387+parseArgs ("--warn":ns) = WarnOnly : (parseArgs ns)
388+parseArgs ("--package":n:ns) = Pkg n : (parseArgs ns)
389+parseArgs ("-p":n:ns) = Pkg n : (parseArgs ns)
390+parseArgs ("--build":n:ns) = PkgBuild n : (parseArgs ns)
391+parseArgs ("--install":n:ns) = PkgInstall n : (parseArgs ns)
392+parseArgs ("--clean":n:ns) = PkgClean n : (parseArgs ns)
393+parseArgs ("--bytecode":n:ns) = NoREPL : BCAsm n : (parseArgs ns)
394+parseArgs ("--fovm":n:ns) = NoREPL : FOVM n : (parseArgs ns)
395+parseArgs (n:ns) = Filename n : (parseArgs ns)
369 [ (["Command"], "Arguments", "Purpose"),
398 [ (["Command"], "Arguments", "Purpose"),
370 ([""], "", ""),
399 ([""], "", ""),
@@ -402,6 +431,7 @@ idrisMain opts =
402 let importdirs = opt getImportDir opts
431 let importdirs = opt getImportDir opts
403 let bcs = opt getBC opts
432 let bcs = opt getBC opts
404 let vm = opt getFOVM opts
433 let vm = opt getFOVM opts
434+ let pkgdirs = opt getPkgDir opts
405 setREPL runrepl
435 setREPL runrepl
406 setVerbose runrepl
436 setVerbose runrepl
407 when (Verbose `elem` opts) $ setVerbose True
437 when (Verbose `elem` opts) $ setVerbose True
@@ -418,6 +448,8 @@ idrisMain opts =
418 [] -> setIBCSubDir ""
448 [] -> setIBCSubDir ""
419 (d:_) -> setIBCSubDir d
449 (d:_) -> setIBCSubDir d
420 setImportDirs importdirs
450 setImportDirs importdirs
452+ mapM_ addPkgDir pkgdirs
421 elabPrims
453 elabPrims
422 when (not (NoPrelude `elem` opts)) $ do x <- loadModule "prelude"
454 when (not (NoPrelude `elem` opts)) $ do x <- loadModule "prelude"
423 return ()
455 return ()
@@ -442,6 +474,10 @@ idrisMain opts =
442 makeOption ErrContext = setErrContext True
474 makeOption ErrContext = setErrContext True
443 makeOption _ = return ()
475 makeOption _ = return ()
477+ addPkgDir :: String -> Idris ()
478+ addPkgDir p = do ddir <- liftIO $ getDataDir
479+ addImportDir (ddir ++ "/" ++ p)
445getFile :: Opt -> Maybe String
481getFile :: Opt -> Maybe String
446getFile (Filename str) = Just str
482getFile (Filename str) = Just str
447getFile _ = Nothing
483getFile _ = Nothing
@@ -470,6 +506,19 @@ getImportDir :: Opt -> Maybe String
470getImportDir (ImportDir str) = Just str
506getImportDir (ImportDir str) = Just str
471getImportDir _ = Nothing
507getImportDir _ = Nothing
509+getPkgDir :: Opt -> Maybe String
510+getPkgDir (Pkg str) = Just str
511+getPkgDir _ = Nothing
513+getPkg :: Opt -> Maybe (Bool, String)
514+getPkg (PkgBuild str) = Just (False, str)
515+getPkg (PkgInstall str) = Just (True, str)
518+getPkgClean :: Opt -> Maybe String
519+getPkgClean (PkgClean str) = Just str
520+getPkgClean _ = Nothing
473opt :: (Opt -> Maybe a) -> [Opt] -> [a]
522opt :: (Opt -> Maybe a) -> [Opt] -> [a]
474opt = mapMaybe
523opt = mapMaybe