@@ -2,7 +2,6 @@
22#if !(MIN_VERSION_base(4,8,0))
33{-# LANGUAGE OverlappingInstances #-}
44#endif
5−
65module Pkg.PParser where
76
87import Text.Trifecta hiding (span, charLiteral, natural, symbol, char, string, whiteSpace)
@@ -18,21 +17,20 @@ import Control.Applicative
1817
1918import Util.System
2019
21−
2220type PParser = StateT PkgDesc IdrisInnerParser
2321
24−data PkgDesc = PkgDesc { pkgname :: String,
25− libdeps :: [String],
26− objs :: [String],
27− makefile :: Maybe String,
28− idris_opts :: [Opt],
29− sourcedir :: String,
30− modules :: [Name],
31− idris_main :: Name,
32− execout :: Maybe String,
33− idris_tests :: [Name]
34− }
35− deriving Show
22+data PkgDesc = PkgDesc {
23+ pkgname :: String
24+ , libdeps :: [String]
25+ , objs :: [String]
26+ , makefile :: Maybe String
27+ , idris_opts :: [Opt]
28+ , sourcedir :: String
29+ , modules :: [Name]
30+ , idris_main :: Name
31+ , execout :: Maybe String
32+ , idris_tests :: [Name]
33+ } deriving (Show)
3634
3735instance HasLastTokenSpan PParser where
3836 getLastTokenSpan = return Nothing
@@ -44,23 +42,25 @@ instance TokenParsing PParser where
4442#endif
4543 someSpace = many (simpleWhiteSpace <|> singleLineComment <|> multiLineComment) *> pure ()
4644
47−
45+defaultPkg :: PkgDesc
4846defaultPkg = PkgDesc "" [] [] Nothing [] "" [] (sUN "") Nothing []
4947
5048parseDesc :: FilePath -> IO PkgDesc
51−parseDesc fp = do p <- readFile fp
52− case runparser pPkg defaultPkg fp p of
53− Failure err -> fail (show err)
54− Success x -> return x
49+parseDesc fp = do
50+ p <- readFile fp
51+ case runparser pPkg defaultPkg fp p of
52+ Failure err -> fail (show err)
53+ Success x -> return x
5554
5655pPkg :: PParser PkgDesc
57−pPkg = do reserved "package"; p <- fst <$> identifier
58− st <- get
59− put (st { pkgname = p })
60− some pClause
61− st <- get
62− eof
63− return st
56+pPkg = do
57+ reserved "package"; p <- fst <$> identifier
58+ st <- get
59+ put (st { pkgname = p })
60+ some pClause
61+ st <- get
62+ eof
63+ return st
6464
6565pClause :: PParser ()
6666pClause = do reserved "executable"; lchar '=';
@@ -80,6 +80,11 @@ pClause = do reserved "executable"; lchar '=';
8080 st <- get
8181 let args = pureArgParser (words opts)
8282 put (st { idris_opts = args })
83+ <|> do reserved "pkgs"; lchar '=';
84+ ps <- sepBy1 (fst <$> identifier) (lchar ',')
85+ st <- get
86+ let pkgs = pureArgParser $ map (\x -> unwords ["-p", x]) ps
87+ put (st {idris_opts = idris_opts st ++ pkgs})
8388 <|> do reserved "modules"; lchar '=';
8489 ms <- sepBy1 (fst <$> iName []) (lchar ',')
8590 st <- get
@@ -100,4 +105,3 @@ pClause = do reserved "executable"; lchar '=';
100105 ts <- sepBy1 (fst <$> iName []) (lchar ',')
101106 st <- get
102107 put st { idris_tests = idris_tests st ++ ts }
103−