module Main where
import Char
import Monad
import System
import Text.ParserCombinators.Poly
import CabalParse
-- A simple way of reading information from a .cabal file
-- for use by other external programs, e.g. in a shell script or Makefile.
-- The cmdline arg "-slash" just replaces dots by slashes (e.g. to translate
-- module names from Haskell notation to filepaths).
main = do
args <- getArgs
(fields,file,munge,halt) <-
case args of
(file:"-slash":fields)
-> return (map (map toLower) fields, file, slash, stop)
(file:"-quiet":"-slash":fields)
-> return (map (map toLower) fields, file, slash, quiet)
(file:"-quiet":fields)
-> return (map (map toLower) fields, file, id, quiet)
(file:fields) -> return (map (map toLower) fields, file, id, stop)
_ -> stop "Usage: cabal-parse file [-quiet] [-slash] field ..."
content <- readFile file
cabal <- case runParser cabalFile (lexToken content) of
(Left e, _) -> stop e
(Right cabal, _) -> return cabal
let results = flip map fields (\field-> cabalLookup cabal field munge)
let errs = [ e | Left e <- results ]
when (not (null errs)) (halt (unlines errs))
mapM_ putStrLn [ r | Right r <- results ]
|