---------------------------------------------------------------------------- -- Copyright 2015, Open Universiteit Nederland. This file is distributed -- under the terms of the GNU General Public License. For more information, -- see the file "LICENSE.txt", which is included in the distribution. ----------------------------------------------------------------------------- -- | -- Maintainer : bastiaan.heeren@ou.nl -- Stability : provisional -- Portability : portable (depends on ghc) -- -- Options and command-line flags for services -- ----------------------------------------------------------------------------- -- $Id: Options.hs 7524 2015-04-08 07:31:15Z bastiaan $ module Ideas.Main.Options ( Flag(..), getFlags , versionText, helpText, shortVersion, fullVersion ) where import Data.Maybe import Ideas.Main.LoggingDatabase (logEnabled) import Ideas.Main.Revision import System.Console.GetOpt import System.Environment import System.Exit data Flag = Version | Help | InputFile String | MakePages FilePath | Test FilePath | MakeScriptFor String | AnalyzeScript FilePath deriving Eq header :: String header = "IDEAS: Intelligent Domain-specific Exercise Assistants\n" ++ "Copyright 2015, Open Universiteit Nederland\n" ++ versionText ++ "\n\nUsage: ideas [OPTION] (by default, CGI protocol)\n" ++ "\nOptions:" versionText :: String versionText = "version " ++ ideasVersion ++ ", revision " ++ show ideasRevision ++ ", logging " ++ (if logEnabled then "enabled" else "disabled") helpText :: String helpText = usageInfo header options fullVersion :: String fullVersion = "version " ++ ideasVersion ++ " (revision " ++ show ideasRevision ++ ", " ++ ideasLastChanged ++ ")" shortVersion :: String shortVersion = ideasVersion ++ " (" ++ show ideasRevision ++ ")" options :: [OptDescr Flag] options = [ Option [] ["version"] (NoArg Version) "show version number" , Option "?" ["help"] (NoArg Help) "show options" , Option "f" ["file"] fileArg "use input FILE as request" , Option "" ["make-pages"] pagesArg "generate pages for exercises and services" , Option "" ["test"] testArg "run tests on directory (default: 'test')" , Option "" ["make-script"] makeScrArg "generate feedback script for exercise" , Option "" ["analyze-script"] analyzeScrArg "analyze feedback script and report errors" ] fileArg, testArg, pagesArg, makeScrArg, analyzeScrArg :: ArgDescr Flag fileArg = ReqArg InputFile "FILE" testArg = OptArg (Test . fromMaybe "test") "DIR" pagesArg = OptArg (MakePages . fromMaybe "docs") "DIR" makeScrArg = ReqArg MakeScriptFor "ID" analyzeScrArg = ReqArg AnalyzeScript "FILE" getFlags :: IO [Flag] getFlags = do args <- getArgs case getOpt Permute options args of (flags, [], []) -> return flags (_, _, errs) -> do putStrLn (concat errs ++ helpText) exitFailure