{-# LANGUAGE DeriveDataTypeable, NamedFieldPuns #-}
module Args
( getArgs
, Args (..)
) where
import Paths_agda_server
import System.Directory (createDirectoryIfMissing)
import System.Console.CmdArgs.Implicit
import System.FilePath
import Data.Version
------------------
data Args
= Args
{ sourcedir :: String
, includedir :: [String]
, datadir :: String
, logdir :: String
, port :: Int
}
deriving (Show, Data, Typeable)
myargs :: Args
myargs = Args
{ sourcedir = "." &= typDir &= help "Directory of agda files to serve. Default is '.'"
, includedir = [""] &= typDir &= help "Additional include directory. You can specify more than one. Default is '.'"
, datadir = "" &= typDir &= help "Directory of template. Default points to the distribution's directory."
, logdir = "log" &= typDir &= help "Directory to put log files in. Default is 'log'."
, port = 8001 &= typ "PORT" &= help "Port to listen. Default is 8001"
} &= summary ("agda-server " ++ showVersion version ++ ", (C) 2012-2013 Péter Diviánszky")
&= program "agda-server"
completeArgs :: Args -> IO Args
completeArgs args
| datadir args == "" = do
dir <- getDataDir
completeArgs (args {datadir = dir </> "copy"})
completeArgs args = return args
createDirs :: Args -> IO ()
createDirs (Args {sourcedir, logdir})
= mapM_ f [sourcedir, logdir]
where
f "" = return ()
f path = createDirectoryIfMissing True path
getArgs :: IO Args
getArgs = do
args <- cmdArgs myargs >>= completeArgs
createDirs args
return args