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

On branch  : 

http://hackage.haskell.org/trac/ghc/changeset/6169c65b23265688f57cd2389cf77639ef4ec49e

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

commit 6169c65b23265688f57cd2389cf77639ef4ec49e
Author: Duncan Coutts <[email protected]>
Date:   Sat Mar 20 21:53:31 2010 +0000

    Cope with intra-package deps when constructing install plans

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

 .../Distribution/Client/Dependency/TopDown.hs      |    4 ++-
 cabal-install/Distribution/Client/InstallPlan.hs   |    5 ++-
 cabal-install/Distribution/Client/PackageUtils.hs  |   34 ++++++++++++++++++++
 cabal-install/cabal-install.cabal                  |    1 +
 4 files changed, 41 insertions(+), 3 deletions(-)

diff --git a/cabal-install/Distribution/Client/Dependency/TopDown.hs 
b/cabal-install/Distribution/Client/Dependency/TopDown.hs
index 95f4922..fbab018 100644
--- a/cabal-install/Distribution/Client/Dependency/TopDown.hs
+++ b/cabal-install/Distribution/Client/Dependency/TopDown.hs
@@ -36,6 +36,8 @@ import Distribution.Package
          , PackageFixedDeps(depends) )
 import Distribution.PackageDescription
          ( PackageDescription(buildDepends) )
+import Distribution.Client.PackageUtils
+         ( externalBuildDepends )
 import Distribution.PackageDescription.Configuration
          ( finalizePackageDescription, flattenPackageDescription )
 import Distribution.Version
@@ -301,7 +303,7 @@ configurePackage platform comp available spkg = case spkg of
                                     platform comp [] p of
       Left missing        -> Left missing
       Right (pkg, flags') -> Right $
-        SemiConfiguredPackage apkg flags' (buildDepends pkg)
+        SemiConfiguredPackage apkg flags' (externalBuildDepends pkg)
 
   dependencySatisfiable = not . null . PackageIndex.lookupDependency available
 
diff --git a/cabal-install/Distribution/Client/InstallPlan.hs 
b/cabal-install/Distribution/Client/InstallPlan.hs
index 953f6fd..71fa6a9 100644
--- a/cabal-install/Distribution/Client/InstallPlan.hs
+++ b/cabal-install/Distribution/Client/InstallPlan.hs
@@ -54,8 +54,9 @@ import Distribution.Version
          ( Version, withinRange )
 import Distribution.PackageDescription
          ( GenericPackageDescription(genPackageFlags)
-         , PackageDescription(buildDepends)
          , Flag(flagName), FlagName(..) )
+import Distribution.Client.PackageUtils
+         ( externalBuildDepends )
 import Distribution.PackageDescription.Configuration
          ( finalizePackageDescription )
 import Distribution.Client.PackageIndex
@@ -490,5 +491,5 @@ configuredPackageProblems platform comp
          platform comp
          []
          (packageDescription pkg) of
-        Right (resolvedPkg, _) -> buildDepends resolvedPkg
+        Right (resolvedPkg, _) -> externalBuildDepends resolvedPkg
         Left  _ -> error "configuredPackageInvalidDeps internal error"
diff --git a/cabal-install/Distribution/Client/PackageUtils.hs 
b/cabal-install/Distribution/Client/PackageUtils.hs
new file mode 100644
index 0000000..bd2b1df
--- /dev/null
+++ b/cabal-install/Distribution/Client/PackageUtils.hs
@@ -0,0 +1,34 @@
+-----------------------------------------------------------------------------
+-- |
+-- Module      :  Distribution.Client.PackageUtils
+-- Copyright   :  (c) Duncan Coutts 2010
+-- License     :  BSD-like
+--
+-- Maintainer  :  [email protected]
+-- Stability   :  provisional
+-- Portability :  portable
+--
+-- Various package description utils that should be in the Cabal lib
+-----------------------------------------------------------------------------
+module Distribution.Client.PackageUtils (
+    externalBuildDepends,
+  ) where
+
+import Distribution.Package
+         ( packageVersion, packageName, Dependency(..) )
+import Distribution.PackageDescription
+         ( PackageDescription(..) )
+import Distribution.Version
+         ( withinRange )
+
+-- | The list of dependencies that refer to external packages
+-- rather than internal package components.
+--
+externalBuildDepends :: PackageDescription -> [Dependency]
+externalBuildDepends pkg = filter (not . internal) (buildDepends pkg)
+  where
+    -- True if this dependency is an internal one (depends on a library
+    -- defined in the same package).
+    internal (Dependency depName versionRange) =
+            depName == packageName pkg &&
+            packageVersion pkg `withinRange` versionRange
diff --git a/cabal-install/cabal-install.cabal 
b/cabal-install/cabal-install.cabal
index 8a5cf0f..ba9f3e7 100644
--- a/cabal-install/cabal-install.cabal
+++ b/cabal-install/cabal-install.cabal
@@ -68,6 +68,7 @@ Executable cabal
         Distribution.Client.InstallSymlink
         Distribution.Client.List
         Distribution.Client.PackageIndex
+        Distribution.Client.PackageUtils
         Distribution.Client.Setup
         Distribution.Client.SetupWrapper
         Distribution.Client.SrcDist



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

Reply via email to