[commit: Cabal] master: Use a smarter preference when picking a Cabal lib to build Setup.hs (9d650d2)
Paolo Capriotti
p.capriotti at gmail.com
Tue May 8 00:16:14 CEST 2012
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 <duncan at haskell.org>
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)
More information about the Cvs-libraries
mailing list