on master help sign in
Merge pull request #2668 from jfdm/ipkg-file-improvements

Improvements to ipkg files for dependancies.

commitb8a8c79ca232fa85c25f369021f2e7d771e921dc authorNiklas Larsson <metaniklas@gmail.com> dateMon 28 Sep 2015, 02:15 (11 years ago) parent2f7d8c2a497ca7
3 files changed+39−29
CHANGELOG+3 docs/reference/packages.rst+5−2 src/Pkg/PParser.hs+31−27
CHANGELOG+3
@@ -35,6 +35,9 @@ Tool updates
3535------------
3636* Records are now shown as records in :doc, rather than as the underlying
3737 datatype
38+* iPKG files have a new option `pkgs` which takes a comma-separated list
39+ of package names that the idris project depends on. This reduces bloat
40+ in the `opts` option with mutliple package declarations.
3841
3942Miscellaneous updates
4043---------------------
docs/reference/packages.rst+5−2
@@ -44,8 +44,11 @@ Other common fields which may be present in an ``ipkg`` file are:
4444+ ``main = <module>``, which takes the name of the main module, and
4545 must be present if the executable field is present.
4646
47−+ ``opts = "<idris options>"``, which allows options (such as other
48− packages) to be passed to Idris.
47++ ``opts = "<idris options>"``, which allows options to be passed to
48+ Idris.
49+
50++ ``pkgs = <pkg name> (',' <pkg name>)+``, a comma separated list of
51+ package names that the Idris package requires.
4952
5053Binding to C
5154------------
src/Pkg/PParser.hs+31−27
@@ -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−