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

On branch  : master

http://hackage.haskell.org/trac/ghc/changeset/9d650d2c1bfbcde077142b34860b4d0d224b9d60

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

commit 9d650d2c1bfbcde077142b34860b4d0d224b9d60
Author: Duncan Coutts <[email protected]>
Date:   Sat Jun 7 18:26:00 2008 +0000

    Use a smarter preference when picking a Cabal lib to build Setup.hs
    Instead of just using the latest version we use the best version
    according to the following preferences in priority order:
    - the same version as cabal-install was itself built with
    - the same major version number as cabal-install was built with
    - a stable version of Cabal (even second digit of major number)
    - the latest version

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

 cabal-install/Hackage/SetupWrapper.hs |   19 ++++++++++++++++---
 1 files changed, 16 insertions(+), 3 deletions(-)

diff --git a/cabal-install/Hackage/SetupWrapper.hs 
b/cabal-install/Hackage/SetupWrapper.hs
index 0637732..13dc07a 100644
--- a/cabal-install/Hackage/SetupWrapper.hs
+++ b/cabal-install/Hackage/SetupWrapper.hs
@@ -23,7 +23,7 @@ module Hackage.SetupWrapper (
 import qualified Distribution.Make as Make
 import qualified Distribution.Simple as Simple
 import Distribution.Version
-         ( Version(Version), VersionRange(..), withinRange )
+         ( Version(..), VersionRange(..), withinRange )
 import Distribution.Package
          ( PackageIdentifier(..), packageName, packageVersion, Dependency(..) )
 import Distribution.PackageDescription
@@ -47,7 +47,7 @@ import Distribution.Simple.GHC
 import qualified Distribution.Simple.PackageIndex as PackageIndex
 import Distribution.Simple.PackageIndex (PackageIndex)
 import Distribution.Simple.Utils
-         ( die, debug, cabalVersion, defaultPackageDesc
+         ( die, debug, cabalVersion, defaultPackageDesc, comparing
          , rawSystemExit, createDirectoryIfMissingVerbose )
 import Distribution.Text
          ( display )
@@ -59,6 +59,7 @@ import System.FilePath   ( (</>), (<.>) )
 import System.IO.Error   ( isDoesNotExistError )
 import Control.Monad     ( when, unless )
 import Control.Exception ( evaluate )
+import Data.List         ( maximumBy )
 import Data.Maybe        ( fromMaybe )
 import Data.Monoid       ( Monoid(mempty) )
 import Data.Char         ( isSpace )
@@ -191,7 +192,19 @@ externalSetupMethod options verbosity pkg bt mkargs = do
       []   -> die $ "The package requires Cabal library version "
                  ++ display (useCabalVersion options)
                  ++ " but no suitable version is installed."
-      pkgs -> return $ maximum (map packageVersion pkgs)
+      pkgs -> return $ bestVersion (map packageVersion pkgs)
+    where
+      bestVersion          = maximumBy (comparing preference)
+      preference version   = (sameVersion, sameMajorVersion
+                             ,stableVersion, latestVersion)
+        where
+          sameVersion      = version == cabalVersion
+          sameMajorVersion = majorVersion version == majorVersion cabalVersion
+          majorVersion     = take 2 . versionBranch
+          stableVersion    = case versionBranch version of
+                               (_:x:_) -> even x
+                               _       -> False
+          latestVersion    = version
 
   configureCompiler :: SetupScriptOptions
                     -> IO (Compiler, ProgramConfiguration, SetupScriptOptions)



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

Reply via email to