{-# 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