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

On branch  : master

http://hackage.haskell.org/trac/ghc/changeset/fdd4f1d19503b99d168873b7b3705b5b783f11ad

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

commit fdd4f1d19503b99d168873b7b3705b5b783f11ad
Author: bjorn <[email protected]>
Date:   Mon Apr 9 17:04:09 2007 +0000

    build-dep can now build the dependencies specified in a local .cabal file.
    This is useful when you want to build a development version of something 
whose dependencies are available in Hackage.

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

 .../src/Network/Hackage/CabalInstall/BuildDep.hs   |   13 +++++++++++--
 .../src/Network/Hackage/CabalInstall/Dependency.hs |    1 +
 .../src/Network/Hackage/CabalInstall/Main.hs       |    7 +++++--
 .../src/Network/Hackage/CabalInstall/Setup.hs      |    2 +-
 4 files changed, 18 insertions(+), 5 deletions(-)

diff --git a/cabal-install/src/Network/Hackage/CabalInstall/BuildDep.hs 
b/cabal-install/src/Network/Hackage/CabalInstall/BuildDep.hs
index a76c583..437a4b8 100644
--- a/cabal-install/src/Network/Hackage/CabalInstall/BuildDep.hs
+++ b/cabal-install/src/Network/Hackage/CabalInstall/BuildDep.hs
@@ -12,10 +12,11 @@
 -----------------------------------------------------------------------------
 module Network.Hackage.CabalInstall.BuildDep where
 
-import Network.Hackage.CabalInstall.Dependency (getPackages, getBuildDeps, 
resolveDependenciesAux)
-import Network.Hackage.CabalInstall.Install (installPkg)
+import Network.Hackage.CabalInstall.Dependency (getPackages, getBuildDeps, 
depToUnresolvedDep, resolveDependenciesAux)
+import Network.Hackage.CabalInstall.Install (install, installPkg)
 import Network.Hackage.CabalInstall.Types (ConfigFlags (..), 
UnresolvedDependency)
 
+import Distribution.PackageDescription (readPackageDescription, buildDepends)
 import Distribution.Simple.Configure (getInstalledPackages)
 
 {-|
@@ -27,3 +28,11 @@ buildDep cfg globalArgs deps
     = do ipkgs <- getInstalledPackages (configCompiler cfg) (configUserIns 
cfg) (configVerbose cfg)
          apkgs <- fmap getPackages (fmap (getBuildDeps ipkgs) 
(resolveDependenciesAux cfg ipkgs deps))
          mapM_ (installPkg cfg globalArgs) apkgs
+
+-- | Takes the path to a .cabal file, and installs the build-dependencies 
listed there.
+-- FIXME: what if the package uses hooks which modify the build-dependencies?
+buildDepLocalPkg :: ConfigFlags -> FilePath -> IO ()
+buildDepLocalPkg cfg pkgDescPath = 
+    do pkgDesc <- readPackageDescription (configVerbose cfg) pkgDescPath
+       let deps = map depToUnresolvedDep $ buildDepends pkgDesc
+       install cfg [] deps
diff --git a/cabal-install/src/Network/Hackage/CabalInstall/Dependency.hs 
b/cabal-install/src/Network/Hackage/CabalInstall/Dependency.hs
index 63e1d2f..184beb2 100644
--- a/cabal-install/src/Network/Hackage/CabalInstall/Dependency.hs
+++ b/cabal-install/src/Network/Hackage/CabalInstall/Dependency.hs
@@ -16,6 +16,7 @@ module Network.Hackage.CabalInstall.Dependency
       resolveDependencies
     , resolveDependenciesAux 
     -- * Utilities
+    , depToUnresolvedDep
     , getPackages            -- :: [ResolvedPackage] -> 
[(PackageIdentifier,[String],String)]
     , getBuildDeps           -- :: [PackageIdentifier] -> [ResolvedPackage] -> 
[ResolvedPackage]
     , filterFetchables       -- :: [ResolvedPackage] -> 
[(PackageIdentifier,String)]
diff --git a/cabal-install/src/Network/Hackage/CabalInstall/Main.hs 
b/cabal-install/src/Network/Hackage/CabalInstall/Main.hs
index eb3d67b..b4e4396 100644
--- a/cabal-install/src/Network/Hackage/CabalInstall/Main.hs
+++ b/cabal-install/src/Network/Hackage/CabalInstall/Main.hs
@@ -12,6 +12,7 @@
 -----------------------------------------------------------------------------
 module Network.Hackage.CabalInstall.Main where
 
+import Data.List (isSuffixOf)
 import System.Environment (getArgs)
 import Network.Hackage.CabalInstall.Types (Action (..))
 import Network.Hackage.CabalInstall.Setup (parseGlobalArgs, parsePackageArgs)
@@ -23,7 +24,7 @@ import Network.Hackage.CabalInstall.Info (info)
 import Network.Hackage.CabalInstall.Update (update)
 import Network.Hackage.CabalInstall.Fetch (fetch)
 import Network.Hackage.CabalInstall.Clean (clean)
-import Network.Hackage.CabalInstall.BuildDep (buildDep)
+import Network.Hackage.CabalInstall.BuildDep (buildDep, buildDepLocalPkg)
 
 
 main :: IO ()
@@ -34,7 +35,9 @@ main = do args <- getArgs
                             f config globalArgs pkgs
           case action of
             InstallCmd  -> runCmd install
-            BuildDepCmd -> runCmd buildDep
+            BuildDepCmd -> case args of
+                             [file] | ".cabal" `isSuffixOf` file -> 
buildDepLocalPkg config file
+                             _ -> runCmd buildDep
             InfoCmd     -> runCmd info
             ListCmd     -> list config args
             UpdateCmd   -> update config
diff --git a/cabal-install/src/Network/Hackage/CabalInstall/Setup.hs 
b/cabal-install/src/Network/Hackage/CabalInstall/Setup.hs
index baa3423..57b5e14 100644
--- a/cabal-install/src/Network/Hackage/CabalInstall/Setup.hs
+++ b/cabal-install/src/Network/Hackage/CabalInstall/Setup.hs
@@ -159,7 +159,7 @@ listCmd :: Cmd
 listCmd = mkCmd "list" "List available packages on the server." "" ListCmd
 
 buildDepCmd :: Cmd
-buildDepCmd = mkCmd "build-dep" "Installs the dependencies for a list of 
packages." "" BuildDepCmd
+buildDepCmd = mkCmd "build-dep" "Installs the dependencies for a list of 
packages or for a .cabal file." "" BuildDepCmd
 
 updateCmd :: Cmd
 updateCmd = mkCmd "update" "Updates list of known packages" "" UpdateCmd



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

Reply via email to