hubris-0.0.2: Hubrify.hs
module Main where
import Language.Ruby.Hubris.LibraryBuilder
import System
import System.Exit
import Control.Monad(when)
import Language.Ruby.Hubris.ZCode (zenc,zdec)
import System.Console.GetOpt
import Data.Maybe ( fromMaybe )
data Options = Options
{ optVerbose :: Bool
, optStrict :: Bool
, optShowVersion :: Bool
, optOutput :: FilePath
, optModule :: String
, optInput :: Maybe FilePath
, optPackages :: [String]
} deriving Show
defaultOptions = Options
{ optVerbose = False
, optShowVersion = False
, optStrict = False
, optInput = Nothing
, optPackages = []
}
options :: [OptDescr (Options -> Options)]
options =
[ Option ['v'] ["verbose"]
(NoArg (\ opts -> opts { optVerbose = True }))
"chatty output on stderr"
, Option [] ["strict"]
(NoArg (\ opts -> opts { optStrict = True }))
"bondage and discipline mode"
, Option ['o'] ["output"]
(ReqArg ((\ f opts -> opts { optOutput = f })) "libFile")
"output FILE"
, Option ['m'] ["module"]
(ReqArg ((\ f opts -> opts { optModule = f })) "module")
"module to be wrapped"
, Option ['p'] ["package"]
(ReqArg (\ d opts -> opts { optPackages = optPackages opts ++ [d] }) "DIR")
"package"
]
hubrisOpts :: [String] -> IO (Options, [String])
hubrisOpts argv =
case getOpt Permute options argv of
(o,n,[] ) -> return (foldl (flip id) defaultOptions o, n)
(_,_,errs) -> ioError (userError (concat errs ++ usageInfo header options))
where header = "Usage: Hubrify --module MODULE --output LIBFILE (--packages PACKAGE1 ...) sourceFiles ..."
main = do
(o,srcs) <- getArgs >>= hubrisOpts
-- HACK this may be the worst thing ever
let ghcArgs = if optStrict o
then ["-Wall", "-Werror","-fno-warn-unused-imports"]
else []
-- putStrLn $ show $ optPackages o
res <- generateLib (optOutput o) srcs (optModule o) ghcArgs (optPackages o)
-- when (optVerbose o) (putStr $unlines msgs)
-- print res
case res of
Left a -> putStrLn ("Failed: " ++ a) >> exitFailure
Right _ -> exitSuccess