Repository : ssh://darcs.haskell.org//srv/darcs/packages/Cabal

On branch  : master

http://hackage.haskell.org/trac/ghc/changeset/7fada5a6ae8feaf208551351a23de8f29c2fa004

>---------------------------------------------------------------

commit 7fada5a6ae8feaf208551351a23de8f29c2fa004
Author: Andres Loeh <[email protected]>
Date:   Mon Feb 13 08:16:41 2012 +0000

    make test and bench available as user constraints
    
    Saying
    
      cabal install foo --enable-tests
    
    is now equivalent to saying
    
      cabal install foo --constraint="foo test"
    
    The constraint syntax in addition allows to enable tests and benchmarks
    for packages that are further down in the dependency chain.

>---------------------------------------------------------------

 .../Distribution/Client/Dependency/TopDown.hs      |    2 +-
 cabal-install/Distribution/Client/Targets.hs       |   16 +++++++++++++++-
 2 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/cabal-install/Distribution/Client/Dependency/TopDown.hs 
b/cabal-install/Distribution/Client/Dependency/TopDown.hs
index 88aca39..fea86fb 100644
--- a/cabal-install/Distribution/Client/Dependency/TopDown.hs
+++ b/cabal-install/Distribution/Client/Dependency/TopDown.hs
@@ -440,7 +440,7 @@ annotateSourcePackages constraints dfsNumber sourcePkgIndex 
=
       [ (name, flags)
       | PackageConstraintFlags name flags <- constraints ]
     stanzasFor = fromMaybe [] . flip Map.lookup stanzasMap
-    stanzasMap = Map.fromList
+    stanzasMap = Map.fromListWith (++)
         [ (name, stanzas)
         | PackageConstraintStanzas name stanzas <- constraints ]
 
diff --git a/cabal-install/Distribution/Client/Targets.hs 
b/cabal-install/Distribution/Client/Targets.hs
index 23c95e6..2863cbb 100644
--- a/cabal-install/Distribution/Client/Targets.hs
+++ b/cabal-install/Distribution/Client/Targets.hs
@@ -49,7 +49,7 @@ import Distribution.Package
          , PackageIdentifier(..), packageName, packageVersion
          , Dependency(Dependency) )
 import Distribution.Client.Types
-         ( SourcePackage(..), PackageLocation(..) )
+         ( SourcePackage(..), PackageLocation(..), OptionalStanza(..) )
 import Distribution.Client.Dependency.Types
          ( PackageConstraint(..) )
 
@@ -673,6 +673,7 @@ data UserConstraint =
    | UserConstraintInstalled PackageName
    | UserConstraintSource    PackageName
    | UserConstraintFlags     PackageName FlagAssignment
+   | UserConstraintStanzas   PackageName [OptionalStanza]
   deriving (Show,Eq)
 
 
@@ -683,6 +684,7 @@ userToPackageConstraint uc = case uc of
   UserConstraintInstalled name       -> PackageConstraintInstalled  name
   UserConstraintSource    name       -> PackageConstraintSource     name
   UserConstraintFlags     name flags -> PackageConstraintFlags      name flags
+  UserConstraintStanzas   name stanzas -> PackageConstraintStanzas  name 
stanzas
 
 renamePackageConstraint :: PackageName -> PackageConstraint -> 
PackageConstraint
 renamePackageConstraint name pc = case pc of
@@ -714,6 +716,12 @@ instance Text UserConstraint where
       dispFlagValue (f, False)  = Disp.char '-' <> dispFlagName f
       dispFlagName (FlagName f) = Disp.text f
 
+  disp (UserConstraintStanzas   pkgname stanzas)  = disp pkgname <+> 
dispStanzas stanzas
+    where
+      dispStanzas = Disp.hsep . map dispStanza
+      dispStanza TestStanzas  = Disp.text "test"
+      dispStanza BenchStanzas = Disp.text "bench"
+
   parse = parse >>= parseConstraint
     where
       spaces = Parse.satisfy isSpace >> Parse.skipSpaces
@@ -726,6 +734,12 @@ instance Text UserConstraint where
         +++ (do spaces
                 _ <- Parse.string "source"
                 return (UserConstraintSource pkgname))
+        +++ (do spaces
+                _ <- Parse.string "test"
+                return (UserConstraintStanzas pkgname [TestStanzas]))
+        +++ (do spaces
+                _ <- Parse.string "bench"
+                return (UserConstraintStanzas pkgname [BenchStanzas]))
         <++ (parseFlagAssignment >>= (return . UserConstraintFlags pkgname))
 
       parseFlagAssignment = Parse.many1 (spaces >> parseFlagValue)



_______________________________________________
Cvs-libraries mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/cvs-libraries

Reply via email to