packages feed

idris-0.12.2: main/Main.hs

module Main where

import System.Exit ( exitSuccess )

import Control.Monad ( when )

import Idris.AbsSyntax
import Idris.REPL
import Idris.Imports
import Idris.Error
import Idris.CmdOptions

import Idris.Package

import IRTS.System ( getLibFlags, getIdrisLibDir, getIncFlags )

import Util.System ( setupBundledCC )



-- Main program reads command line options, parses the main program, and gets
-- on with the REPL.

main :: IO ()
main = do opts <- runArgParser
          runMain (runIdris opts)

runIdris :: [Opt] -> Idris ()
runIdris opts = do
    runIO setupBundledCC
    when (ShowLoggingCats `elem` opts)  $ runIO showLoggingCats
    when (ShowIncs `elem` opts)         $ runIO showIncs
    when (ShowLibs `elem` opts)         $ runIO showLibs
    when (ShowLibdir `elem` opts)       $ runIO showLibdir
    when (ShowPkgs `elem` opts)         $ runIO showPkgs
    case opt getClient opts of
       []    -> return ()
       (c:_) -> do setVerbose False
                   setQuiet True
                   runIO $ runClient (getPort opts) c
                   runIO exitSuccess
    case opt getPkgCheck opts of
       [] -> return ()
       fs -> do runIO $ mapM_ (checkPkg opts (WarnOnly `elem` opts) True) fs
                runIO exitSuccess
    case opt getPkgClean opts of
       [] -> return ()
       fs -> do runIO $ mapM_ (cleanPkg opts) fs
                runIO exitSuccess
    case opt getPkgMkDoc opts of                -- IdrisDoc
       [] -> return ()
       fs -> do runIO $ mapM_ (documentPkg opts) fs
                runIO exitSuccess
    case opt getPkgTest opts of
       [] -> return ()
       fs -> do runIO $ mapM_ (testPkg opts) fs
                runIO exitSuccess
    case opt getPkg opts of
       [] -> case opt getPkgREPL opts of
                  [] -> idrisMain opts
                  [f] -> replPkg opts f
                  _ -> ifail "Too many packages"
       fs -> runIO $ mapM_ (buildPkg opts (WarnOnly `elem` opts)) fs

showver :: IO b
showver = do putStrLn $ "Idris version " ++ ver
             exitSuccess

showLibs :: IO b
showLibs = do libFlags <- getLibFlags
              putStrLn $ unwords libFlags
              exitSuccess

showLibdir :: IO b
showLibdir = do putStrLn =<< getIdrisLibDir
                exitSuccess

showIncs :: IO b
showIncs = do incFlags <- getIncFlags
              putStrLn $ unwords incFlags
              exitSuccess

-- | List idris packages installed
showPkgs :: IO b
showPkgs = do mapM_ putStrLn =<< installedPackages
              exitSuccess

showLoggingCats :: IO b
showLoggingCats = do
    putStrLn loggingCatsStr
    exitSuccess