[commit: Cabal] : Cope with intra-package deps when constructing install plans (6169c65)
Ian Lynagh
igloo at earth.li
Fri Jun 24 02:05:55 CEST 2011
Repository : ssh://darcs.haskell.org//srv/darcs/packages/Cabal
On branch :
http://hackage.haskell.org/trac/ghc/changeset/6169c65b23265688f57cd2389cf77639ef4ec49e
>---------------------------------------------------------------
commit 6169c65b23265688f57cd2389cf77639ef4ec49e
Author: Duncan Coutts <duncan at haskell.org>
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 : cabal-devel at gmail.com
+-- 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
More information about the Cvs-libraries
mailing list