diff --git a/CabalApi.hs b/CabalApi.hs index 6e86d7e..f28bbb1 100644 --- a/CabalApi.hs +++ b/CabalApi.hs @@ -6,16 +6,22 @@ module CabalApi ( , cabalBuildInfo , cabalAllDependPackages , cabalAllExtentions + , getGHCVersion ) where import Control.Applicative +import Control.Exception (throwIO) +import Data.List (intercalate) import Data.Maybe (fromJust, maybeToList, mapMaybe) import Data.Set (fromList, toList) import Distribution.Package (Dependency(Dependency), PackageName(PackageName)) import Distribution.PackageDescription import Distribution.PackageDescription.Parse (readPackageDescription) +import Distribution.Simple.Program (ghcProgram) +import Distribution.Simple.Program.Types (programName, programFindVersion) import Distribution.Text (display) import Distribution.Verbosity (silent) +import Distribution.Version (versionBranch) import Language.Haskell.Extension (Extension(..)) import System.FilePath import Types @@ -129,3 +135,18 @@ fromPackageDescription f1 f2 f3 f4 pd = lib ++ exe ++ tests ++ bench uniqueAndSort :: [String] -> [String] uniqueAndSort = toList . fromList + +---------------------------------------------------------------- + +getGHCVersion :: IO (String, Int) +getGHCVersion = ghcVer >>= toTupple + where + ghcVer = programFindVersion ghcProgram silent (programName ghcProgram) + toTupple Nothing = throwIO $ userError "ghc not found" + toTupple (Just v) + | length vs < 2 = return (verstr, 0) + | otherwise = return (verstr, ver) + where + vs = versionBranch v + ver = (vs !! 0) * 100 + (vs !! 1) + verstr = intercalate "." . map show $ vs diff --git a/Cradle.hs b/Cradle.hs index 8cc1765..0987f12 100644 --- a/Cradle.hs +++ b/Cradle.hs @@ -1,13 +1,10 @@ module Cradle where +import CabalApi (getGHCVersion) import Control.Applicative ((<$>)) import Control.Exception (throwIO) import Control.Monad -import Data.List (isSuffixOf, intercalate) -import Distribution.Simple.Program (ghcProgram) -import Distribution.Simple.Program.Types (programName, programFindVersion) -import Distribution.Verbosity (silent) -import Distribution.Version (versionBranch) +import Data.List (isSuffixOf) import System.Directory import System.FilePath ((),takeDirectory) import Types @@ -15,7 +12,7 @@ import Types -- An error would be thrown findCradle :: Maybe FilePath -> IO Cradle findCradle (Just sbox) = do - (strver, ver) <- ghcVersion + (strver, ver) <- getGHCVersion conf <- checkPackageConf sbox strver let confOpts = ghcPackageConfOptions ver conf wdir <- getCurrentDirectory @@ -36,7 +33,7 @@ findCradle (Just sbox) = do , cradleGHCVersion = strver } findCradle Nothing = do - (strver, ver) <- ghcVersion + (strver, ver) <- getGHCVersion wdir <- getCurrentDirectory cfiles <- cabalDir wdir case cfiles of @@ -72,19 +69,6 @@ cabalDir dir = do where isCabal name = ".cabal" `isSuffixOf` name && length name > 6 -ghcVersion :: IO (String, Int) -ghcVersion = ghcVer >>= toTupple - where - ghcVer = programFindVersion ghcProgram silent (programName ghcProgram) - toTupple Nothing = throwIO $ userError "ghc not found" - toTupple (Just v) - | length vs < 2 = return (verstr, 0) - | otherwise = return (verstr, ver) - where - vs = versionBranch v - ver = (vs !! 0) * 100 + (vs !! 1) - verstr = intercalate "." . map show $ vs - packageConfName :: FilePath -> String -> FilePath packageConfName path ver = path "packages-" ++ ver ++ ".conf"