g-npm-0.0.1: src/Main.hs
module Main
where
import Npm( doGetNpm, makeEbuildS, showNpmEbuild )
import Control.Monad
import System.Environment
import System.Console.GetOpt
-- Flag type for Options
data Flag = NoDeps
| PkgName String
| PkgVersion String
| Overlay String
deriving (Show, Eq)
-- Options type.
data Options = Options { optNoDeps :: Bool
, optOverlay :: String
, optPkgName :: String
, optPkgVersion :: String }
deriving Show
-- Default options
startOptions = Options { optNoDeps = False
, optOverlay = ""
, optPkgName = ""
, optPkgVersion = "" }
-- Options.
options :: [ OptDescr (Options -> IO Options) ]
options = [ Option ['N'] ["no-deps"] (NoArg (\opt -> return opt {optNoDeps = True})) "Don't create ebuilds for dependencies.",
Option ['o'] ["overlay"] (ReqArg (\arg opt -> return opt {optOverlay = arg}) "DIR") "Path to the overlay where ebuils are to be written to.",
Option ['n'] ["pkg-name"] (ReqArg (\arg opt -> return opt {optPkgName = arg}) "NAME") "Name of the Npm package to build.",
Option ['v'] ["pkg-version"] (ReqArg (\arg opt -> return opt {optPkgVersion = arg}) "VER") "Version of the Npm package to build."]
-- parseArgs
-- Applies getOpt to the command line arguments.
parseArgs :: [String] -> IO ([Options -> IO Options], [String])
parseArgs args =
case getOpt RequireOrder options args of
(o,n,[] ) -> return (o, n)
(_,_,errs) -> ioError (userError (concat errs ++ usageInfo header options))
where header = "Usage: g-npm [OPTION...]"
-- Main
main :: IO ()
main = do
args <- getArgs
(opts, non_opts) <- parseArgs args
opts' <- foldl (>>=) (return startOptions) opts
pkg <- doGetNpm (optPkgName opts') (optPkgVersion opts')
case pkg of
Nothing -> ioError (userError ("Package " ++ (optPkgName opts') ++ " not found."))
Just pkg -> putStrLn $ (showNpmEbuild pkg)