Skip to content

Instantly share code, notes, and snippets.

@mgsloan
Last active August 29, 2015 14:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mgsloan/286427dd1ef65c03ead8 to your computer and use it in GitHub Desktop.
Save mgsloan/286427dd1ef65c03ead8 to your computer and use it in GitHub Desktop.
diff --git a/src/Stack/Build.hs b/src/Stack/Build.hs
index bb535e4..9710840 100644
--- a/src/Stack/Build.hs
+++ b/src/Stack/Build.hs
@@ -150,9 +150,8 @@ withLoadPackage menv inner = do
{ packageConfigEnableTests = False
, packageConfigEnableBenchmarks = False
, packageConfigFlags = flags
- , packageConfigGhcVersion = envConfigGhcVersion econfig
+ , packageConfigCompilerVersion = envConfigCompilerVersion econfig
, packageConfigPlatform = configPlatform (getConfig econfig)
- , packageConfigUseGHCJS = configUseGHCJS (getConfig econfig)
}
-- | Reset the build (remove Shake database and .gen files).
diff --git a/src/Stack/Build/Execute.hs b/src/Stack/Build/Execute.hs
index ee6f7f5..11d51ee 100644
--- a/src/Stack/Build/Execute.hs
+++ b/src/Stack/Build/Execute.hs
@@ -477,7 +477,6 @@ ensureConfig pkgDir ExecuteEnv {..} Task {..} announce cabal cabalfp extra = do
when needConfig $ withMVar eeConfigureLock $ \_ -> do
deleteCaches pkgDir
announce
- config <- asks getConfig
cabal False $ "configure" : map T.unpack configOpts
writeConfigCache pkgDir newConfigCache
writeCabalMod pkgDir newCabalMod
diff --git a/src/Stack/Build/Source.hs b/src/Stack/Build/Source.hs
index bb95c47..b3ad4c3 100644
--- a/src/Stack/Build/Source.hs
+++ b/src/Stack/Build/Source.hs
@@ -75,8 +75,8 @@ loadSourceMap bopts = do
ResolverSnapshot snapName -> do
$logDebug $ "Checking resolver: " <> renderSnapName snapName
loadMiniBuildPlan snapName
- ResolverGhc ghc -> return MiniBuildPlan
- { mbpGhcVersion = fromMajorVersion ghc
+ ResolverCompiler ghc -> return MiniBuildPlan
+ { mbpCompilerVersion = ghc
, mbpPackages = Map.empty
}
ResolverCustom _ url -> do
@@ -215,9 +215,8 @@ loadLocalPackage bopts targets (name, (lpv, gpkg)) = do
{ packageConfigEnableTests = False
, packageConfigEnableBenchmarks = False
, packageConfigFlags = localFlags (boptsFlags bopts) bconfig name
- , packageConfigGhcVersion = envConfigGhcVersion econfig
+ , packageConfigCompilerVersion = envConfigCompilerVersion econfig
, packageConfigPlatform = configPlatform $ getConfig bconfig
- , packageConfigUseGHCJS = configUseGHCJS $ getConfig bconfig
}
btconfig = config
{ packageConfigEnableTests = not $ Set.null tests
diff --git a/src/Stack/BuildPlan.hs b/src/Stack/BuildPlan.hs
index d51f1bf..c7d7078 100644
--- a/src/Stack/BuildPlan.hs
+++ b/src/Stack/BuildPlan.hs
@@ -208,11 +208,11 @@ data ResolveState = ResolveState
}
toMiniBuildPlan :: (MonadIO m, MonadLogger m, MonadReader env m, HasHttpManager env, MonadThrow m, HasConfig env, MonadBaseControl IO m, MonadCatch m)
- => Version -- ^ GHC version
+ => CompilerVersion -- ^ Compiler version
-> Map PackageName Version -- ^ cores
-> Map PackageName (Version, Map FlagName Bool) -- ^ non-core packages
-> m MiniBuildPlan
-toMiniBuildPlan ghcVersion corePackages packages = do
+toMiniBuildPlan compilerVersion corePackages packages = do
$logInfo "Caching build plan"
-- Determine the dependencies of all of the packages in the build plan. We
@@ -220,13 +220,13 @@ toMiniBuildPlan ghcVersion corePackages packages = do
-- package index. For those, we allow missing packages to exist, and then
-- remove those from the list of dependencies, since there's no way we'll
-- ever reinstall them anyway.
- (cores, missingCores) <- addDeps True ghcVersion
+ (cores, missingCores) <- addDeps True compilerVersion
$ fmap (, Map.empty) corePackages
- (extras, missing) <- addDeps False ghcVersion packages
+ (extras, missing) <- addDeps False compilerVersion packages
assert (Set.null missing) $ return MiniBuildPlan
- { mbpGhcVersion = ghcVersion
+ { mbpCompilerVersion = compilerVersion
, mbpPackages = Map.unions
[ fmap (removeMissingDeps (Map.keysSet cores)) cores
, extras
@@ -250,10 +250,10 @@ toMiniBuildPlan ghcVersion corePackages packages = do
-- | Add in the resolved dependencies from the package index
addDeps :: (MonadIO m, MonadLogger m, MonadReader env m, HasHttpManager env, MonadThrow m, HasConfig env, MonadBaseControl IO m, MonadCatch m)
=> Bool -- ^ allow missing
- -> Version -- ^ GHC version
+ -> CompilerVersion -- ^ compiler version
-> Map PackageName (Version, Map FlagName Bool)
-> m (Map PackageName MiniPackageInfo, Set PackageIdentifier)
-addDeps allowMissing ghcVersion toCalc = do
+addDeps allowMissing compilerVersion toCalc = do
menv <- getMinimalEnvOverride
config <- asks getConfig
(resolvedMap, missingIdents) <-
@@ -280,9 +280,8 @@ addDeps allowMissing ghcVersion toCalc = do
{ packageConfigEnableTests = False
, packageConfigEnableBenchmarks = False
, packageConfigFlags = flags
- , packageConfigGhcVersion = ghcVersion
+ , packageConfigCompilerVersion = compilerVersion
, packageConfigPlatform = configPlatform config
- , packageConfigUseGHCJS = configUseGHCJS config
}
name = packageIdentifierName ident
pd = resolvePackageDescription packageConfig gpd
@@ -439,7 +438,7 @@ loadMiniBuildPlan name = do
taggedDecodeOrLoad fp $ liftM buildPlanFixes $ do
bp <- loadBuildPlan name
toMiniBuildPlan
- (siGhcVersion $ bpSystemInfo bp)
+ (siCompilerVersion $ bpSystemInfo bp)
(siCorePackages $ bpSystemInfo bp)
(fmap goPP $ bpPackages bp)
where
@@ -528,12 +527,11 @@ checkBuildPlan locals mbp gpd = do
{ packageConfigEnableTests = True
, packageConfigEnableBenchmarks = True
, packageConfigFlags = flags
- , packageConfigGhcVersion = ghcVersion
+ , packageConfigCompilerVersion = compilerVersion
, packageConfigPlatform = platform
- , packageConfigUseGHCJS = useGHCJS
}
- ghcVersion = mbpGhcVersion mbp
+ compilerVersion = mbpCompilerVersion mbp
flagName' = fromCabalFlagName . flagName
@@ -702,7 +700,7 @@ parseCustomMiniBuildPlan stackYamlFP url0 = do
addFlags (PackageIdentifier name ver) =
(name, (ver, fromMaybe Map.empty $ Map.lookup name $ csFlags cs))
toMiniBuildPlan
- (csGhcVersion cs)
+ (csCompilerVersion cs)
Map.empty
(Map.fromList $ map addFlags $ Set.toList $ csPackages cs)
where
@@ -731,14 +729,13 @@ parseCustomMiniBuildPlan stackYamlFP url0 = do
parseAbsFile fp
data CustomSnapshot = CustomSnapshot
- { csGhcVersion :: !Version
+ { csCompilerVersion :: !CompilerVersion
, csPackages :: !(Set PackageIdentifier)
, csFlags :: !(Map PackageName (Map FlagName Bool))
}
instance FromJSON CustomSnapshot where
parseJSON = withObject "CustomSnapshot" $ \o -> CustomSnapshot
- <$> ((o .: "compiler") >>= (\t -> maybe (fail $ "Invalid compiler: " ++ T.unpack t) return $ do
- t' <- T.stripPrefix "ghc-" t
- parseVersionFromString $ T.unpack t'))
+ <$> ((o .: "compiler") >>=
+ (\t -> maybe (fail $ "Invalid compiler: " ++ T.unpack t) return (parseCompilerVersion t)))
<*> o .: "packages"
<*> o .:? "flags" .!= Map.empty
diff --git a/src/Stack/Config.hs b/src/Stack/Config.hs
index aa163df..cb7e4a1 100644
--- a/src/Stack/Config.hs
+++ b/src/Stack/Config.hs
@@ -282,20 +282,20 @@ loadBuildConfig mproject config stackRoot mresolver = do
(MiniConfig manager config)
let project = project' { projectResolver = resolver }
- ghcVersion <-
+ compilerVersion <-
case projectResolver project of
ResolverSnapshot snapName -> do
mbp <- runReaderT (loadMiniBuildPlan snapName) miniConfig
- return $ mbpGhcVersion mbp
- ResolverGhc m -> return $ fromMajorVersion m
+ return $ mbpCompilerVersion mbp
+ ResolverCompiler m -> return m
ResolverCustom _name url -> do
mbp <- runReaderT (parseCustomMiniBuildPlan stackYamlFP url) miniConfig
- return $ mbpGhcVersion mbp
+ return $ mbpCompilerVersion mbp
return BuildConfig
{ bcConfig = config
, bcResolver = projectResolver project
- , bcGhcVersionExpected = ghcVersion
+ , bcCompilerVersionExpected = compilerVersion
, bcPackageEntries = projectPackages project
, bcExtraDeps = projectExtraDeps project
, bcStackYaml = stackYamlFP
diff --git a/src/Stack/Ghci.hs b/src/Stack/Ghci.hs
index 5c096ec..dc3cf49 100644
--- a/src/Stack/Ghci.hs
+++ b/src/Stack/Ghci.hs
@@ -99,11 +99,9 @@ ghciSetup targets = do
{ packageConfigEnableTests = True
, packageConfigEnableBenchmarks = True
, packageConfigFlags = localFlags mempty bconfig name
- , packageConfigGhcVersion = envConfigGhcVersion econfig
+ , packageConfigCompilerVersion = envConfigCompilerVersion econfig
, packageConfigPlatform = configPlatform
(getConfig bconfig)
- , packageConfigUseGHCJS = configUseGHCJS
- (getConfig bconfig)
}
pkg <- readPackage config cabalfp
pkgOpts <-
diff --git a/src/Stack/Init.hs b/src/Stack/Init.hs
index 720dc81..9241ddb 100644
--- a/src/Stack/Init.hs
+++ b/src/Stack/Init.hs
@@ -148,7 +148,7 @@ getDefaultResolver cabalfps gpds initOpts =
mpair <-
case resolver of
ResolverSnapshot name -> findBuildPlan gpds [name]
- ResolverGhc _ -> return Nothing
+ ResolverCompiler _ -> return Nothing
ResolverCustom _ _ -> return Nothing
case mpair of
Just (snap, flags) ->
@@ -157,7 +157,7 @@ getDefaultResolver cabalfps gpds initOpts =
MethodSolver -> do
(ghcVersion, extraDeps) <- cabalSolver (map parent cabalfps) Map.empty []
return
- ( ResolverGhc ghcVersion
+ ( ResolverCompiler (GhcVersion (fromMajorVersion ghcVersion))
, Map.filter (not . Map.null) $ fmap snd extraDeps
, fmap fst extraDeps
)
diff --git a/src/Stack/Package.hs b/src/Stack/Package.hs
index 8d8ae1b..31ad4ff 100644
--- a/src/Stack/Package.hs
+++ b/src/Stack/Package.hs
@@ -534,9 +534,8 @@ resolvePackageDescription packageConfig (GenericPackageDescription desc defaultF
(flagMap defaultFlags)
rc = mkResolveConditions
- (packageConfigGhcVersion packageConfig)
+ (packageConfigCompilerVersion packageConfig)
(packageConfigPlatform packageConfig)
- (packageConfigUseGHCJS packageConfig)
flags
updateLibDeps lib deps =
@@ -565,22 +564,19 @@ flagMap = M.fromList . map pair
data ResolveConditions = ResolveConditions
{ rcFlags :: Map FlagName Bool
- , rcGhcVersion :: Version
- , rcUseGHCJS :: UseGHCJS
+ , rcCompilerVersion :: CompilerVersion
, rcOS :: OS
, rcArch :: Arch
}
-- | Generic a @ResolveConditions@ using sensible defaults.
-mkResolveConditions :: Version -- ^ GHC version
+mkResolveConditions :: CompilerVersion -- ^ GHC version
-> Platform -- ^ installation target platform
- -> UseGHCJS -- ^ whether ghcjs is being used
-> Map FlagName Bool -- ^ enabled flags
-> ResolveConditions
-mkResolveConditions ghcVersion (Platform arch os) useGHCJS flags = ResolveConditions
+mkResolveConditions compilerVersion (Platform arch os) flags = ResolveConditions
{ rcFlags = flags
- , rcGhcVersion = ghcVersion
- , rcUseGHCJS = useGHCJS
+ , rcCompilerVersion = compilerVersion
, rcOS = if isWindows os then Windows else os
, rcArch = arch
}
@@ -613,26 +609,24 @@ resolveConditions rc addDeps (CondNode lib deps cs) = basic <> children
OS os -> os == rcOS rc
Arch arch -> arch == rcArch rc
Flag flag ->
- case M.lookup (fromCabalFlagName flag) (rcFlags rc) of
- Just x -> x
- Nothing ->
- -- NOTE: This should never happen, as all flags
- -- which are used must be declared. Defaulting
- -- to False
- False
- Impl flavor range
- | rcUseGHCJS rc == UseGHCJS ->
- -- FIXME: Do impl ranges for ghcjs refer to ghc
- -- version numbers or ghcjs version numbers?
+ case M.lookup (fromCabalFlagName flag) (rcFlags rc) of
+ Just x -> x
+ Nothing ->
+ -- NOTE: This should never happen, as all flags
+ -- which are used must be declared. Defaulting
+ -- to False
+ False
+ Impl flavor range ->
+ case (flavor, rcCompilerVersion rc) of
+ (GHC, GhcVersion vghc) -> vghc `withinRange` range
+ (GHC, GhcjsVersion _ vghc) -> vghc `withinRange` range
#if MIN_VERSION_Cabal(1, 22, 0)
- flavor == GHCJS &&
+ (GHCJS, GhcjsVersion vghcjs _) ->
#else
- flavor == OtherCompiler "ghcjs" &&
+ (OtherCompiler "ghcjs", GhcjsVersion vghcjs _) ->
#endif
- withinRange (rcGhcVersion rc) range
- | otherwise ->
- flavor == GHC &&
- withinRange (rcGhcVersion rc) range
+ vghcjs `withinRange` range
+ _ -> False
-- | Get the name of a dependency.
depName :: Dependency -> PackageName
diff --git a/src/Stack/SDist.hs b/src/Stack/SDist.hs
index c4d1c57..12ed6ce 100644
--- a/src/Stack/SDist.hs
+++ b/src/Stack/SDist.hs
@@ -83,9 +83,8 @@ readLocalPackage pkgDir = do
{ packageConfigEnableTests = False
, packageConfigEnableBenchmarks = False
, packageConfigFlags = localFlags Map.empty bconfig name
- , packageConfigGhcVersion = envConfigGhcVersion econfig
+ , packageConfigCompilerVersion = envConfigCompilerVersion econfig
, packageConfigPlatform = configPlatform $ getConfig bconfig
- , packageConfigUseGHCJS = configUseGHCJS $ getConfig bconfig
}
package <- readPackage config cabalfp
return LocalPackage
diff --git a/src/Stack/Setup.hs b/src/Stack/Setup.hs
index fc9cb34..26b2725 100644
--- a/src/Stack/Setup.hs
+++ b/src/Stack/Setup.hs
@@ -77,7 +77,7 @@ import Text.Printf (printf)
data SetupOpts = SetupOpts
{ soptsInstallIfMissing :: !Bool
, soptsUseSystem :: !Bool
- , soptsExpected :: !Version
+ , soptsExpected :: !CompilerVersion
, soptsStackYaml :: !(Maybe (Path Abs File))
-- ^ If we got the desired GHC version from that file
, soptsForceReinstall :: !Bool
@@ -135,7 +135,7 @@ setupEnv = do
sopts = SetupOpts
{ soptsInstallIfMissing = configInstallGHC $ bcConfig bconfig
, soptsUseSystem = configSystemGHC $ bcConfig bconfig
- , soptsExpected = bcGhcVersionExpected bconfig
+ , soptsExpected = bcCompilerVersionExpected bconfig
, soptsStackYaml = Just $ bcStackYaml bconfig
, soptsForceReinstall = False
, soptsSanityCheck = False
@@ -167,7 +167,7 @@ setupEnv = do
let envConfig0 = EnvConfig
{ envConfigBuildConfig = bconfig
, envConfigCabalVersion = cabalVer
- , envConfigGhcVersion = ghcVer
+ , envConfigCompilerVersion = ghcVer
, envConfigPackages = Map.fromList $ concat packages
}
@@ -233,7 +233,7 @@ setupEnv = do
{ bcConfig = (bcConfig bconfig) { configEnvOverride = getEnvOverride' }
}
, envConfigCabalVersion = cabalVer
- , envConfigGhcVersion = ghcVer
+ , envConfigCompilerVersion = ghcVer
, envConfigPackages = envConfigPackages envConfig0
}
@@ -542,7 +542,7 @@ ensureTool :: (MonadIO m, MonadMask m, MonadLogger m, MonadReader env m, HasConf
ensureTool menv sopts installed getSetupInfo' msystem (name, mversion)
| not $ null available = return $ Just $ PackageIdentifier name $ maximum available
| not $ soptsInstallIfMissing sopts =
- if name == $(mkPackageName "ghc")
+ if name == $(mkPackageName "ghc") || name == $(mkPackageName "ghcjs")
then do
Platform arch _ <- asks getPlatform
throwM $ GHCVersionMismatch msystem (soptsExpected sopts, arch) (soptsStackYaml sopts)
diff --git a/src/Stack/Solver.hs b/src/Stack/Solver.hs
index 4af7adf..30c786d 100644
--- a/src/Stack/Solver.hs
+++ b/src/Stack/Solver.hs
@@ -156,7 +156,7 @@ solveExtraDeps modStackYaml = do
snapshot <-
case bcResolver bconfig of
ResolverSnapshot snapName -> liftM mbpPackages $ loadMiniBuildPlan snapName
- ResolverGhc _ -> return Map.empty
+ ResolverCompiler _ -> return Map.empty
ResolverCustom _ url -> liftM mbpPackages $ parseCustomMiniBuildPlan
(bcStackYaml bconfig)
url
diff --git a/src/Stack/Types.hs b/src/Stack/Types.hs
index 390b4ef..89260c1 100644
--- a/src/Stack/Types.hs
+++ b/src/Stack/Types.hs
@@ -15,3 +15,4 @@ import Stack.Types.Docker as X
import Stack.Types.Image as X
import Stack.Types.Build as X
import Stack.Types.Package as X
+import Stack.Types.Compiler as X
diff --git a/src/Stack/Types/BuildPlan.hs b/src/Stack/Types/BuildPlan.hs
index c3d8d0b..7c3a7c4 100644
--- a/src/Stack/Types/BuildPlan.hs
+++ b/src/Stack/Types/BuildPlan.hs
@@ -57,6 +57,7 @@ import qualified Distribution.Version as C
import GHC.Generics (Generic)
import Prelude -- Fix AMP warning
import Safe (readMay)
+import Stack.Types.Compiler
import Stack.Types.FlagName
import Stack.Types.PackageName
import Stack.Types.Version
@@ -210,7 +211,7 @@ instance FromJSON TestState where
$ map (\x -> (testStateToText x, x)) [minBound..maxBound]
data SystemInfo = SystemInfo
- { siGhcVersion :: Version
+ { siCompilerVersion :: CompilerVersion
, siOS :: OS
, siArch :: Arch
, siCorePackages :: Map PackageName Version
@@ -219,7 +220,7 @@ data SystemInfo = SystemInfo
deriving (Show, Eq, Ord)
instance ToJSON SystemInfo where
toJSON SystemInfo {..} = object
- [ "ghc-version" .= siGhcVersion
+ [ "compiler-version" .= siCompilerVersion
, "os" .= display siOS
, "arch" .= display siArch
, "core-packages" .= siCorePackages
@@ -228,7 +229,7 @@ instance ToJSON SystemInfo where
instance FromJSON SystemInfo where
parseJSON = withObject "SystemInfo" $ \o -> do
let helper name = (o .: name) >>= either (fail . show) return . simpleParse
- siGhcVersion <- o .: "ghc-version"
+ siCompilerVersion <- o .: "compiler-version"
siOS <- helper "os"
siArch <- helper "arch"
siCorePackages <- o .: "core-packages"
@@ -360,7 +361,7 @@ instance FromJSON a => FromJSON (Map ExeName a) where
-- | A simplified version of the 'BuildPlan' + cabal file.
data MiniBuildPlan = MiniBuildPlan
- { mbpGhcVersion :: !Version
+ { mbpCompilerVersion :: !CompilerVersion
, mbpPackages :: !(Map PackageName MiniPackageInfo)
}
deriving (Generic, Show, Eq)
@@ -369,7 +370,7 @@ instance NFData MiniBuildPlan where
rnf = genericRnf
instance BinarySchema MiniBuildPlan where
-- Don't forget to update this if you change the datatype in any way!
- binarySchema _ = 1
+ binarySchema _ = 2
-- | Information on a single package for the 'MiniBuildPlan'.
data MiniPackageInfo = MiniPackageInfo
diff --git a/src/Stack/Types/Config.hs b/src/Stack/Types/Config.hs
index 72d2c45..3a0dbba 100644
--- a/src/Stack/Types/Config.hs
+++ b/src/Stack/Types/Config.hs
@@ -47,6 +47,7 @@ import Network.HTTP.Client (parseUrl)
import Path
import qualified Paths_stack as Meta
import Stack.Types.BuildPlan (SnapName, renderSnapName, parseSnapName)
+import Stack.Types.Compiler
import Stack.Types.Docker
import Stack.Types.FlagName
import Stack.Types.Image
@@ -232,8 +233,8 @@ data BuildConfig = BuildConfig
, bcResolver :: !Resolver
-- ^ How we resolve which dependencies to install given a set of
-- packages.
- , bcGhcVersionExpected :: !Version
- -- ^ Version of GHC we expected for this build
+ , bcCompilerVersionExpected :: !CompilerVersion
+ -- ^ Compiler version we expected for this build
, bcPackageEntries :: ![PackageEntry]
-- ^ Local packages identified by a path, Bool indicates whether it is
-- a non-dependency (the opposite of 'peExtraDep')
@@ -266,7 +267,7 @@ bcWorkDir = (</> workDirRel) . parent . bcStackYaml
data EnvConfig = EnvConfig
{envConfigBuildConfig :: !BuildConfig
,envConfigCabalVersion :: !Version
- ,envConfigGhcVersion :: !Version
+ ,envConfigCompilerVersion :: !CompilerVersion
,envConfigPackages :: !(Map (Path Abs Dir) Bool)}
instance HasBuildConfig EnvConfig where
getBuildConfig = envConfigBuildConfig
@@ -391,8 +392,8 @@ data Resolver
-- ^ Use an official snapshot from the Stackage project, either an LTS
-- Haskell or Stackage Nightly
- | ResolverGhc {-# UNPACK #-} !MajorVersion
- -- ^ Require a specific GHC major version, but otherwise provide no build
+ | ResolverCompiler !CompilerVersion
+ -- ^ Require a specific compiler major version, but otherwise provide no build
-- plan. Intended for use cases where end user wishes to specify all upstream
-- dependencies manually, such as using a dependency solver.
@@ -402,12 +403,11 @@ data Resolver
deriving (Show)
instance ToJSON Resolver where
- toJSON (ResolverSnapshot name) = toJSON $ renderSnapName name
- toJSON (ResolverGhc (MajorVersion x y)) = toJSON $ T.pack $ concat ["ghc-", show x, ".", show y]
toJSON (ResolverCustom name location) = object
[ "name" .= name
, "location" .= location
]
+ toJSON resolver = toJSON $ resolverName resolver
instance FromJSON Resolver where
-- Strange structuring is to give consistent error messages
parseJSON v@(Object _) = withObject "Resolver" (\o -> ResolverCustom
@@ -422,16 +422,14 @@ instance FromJSON Resolver where
-- directory names
resolverName :: Resolver -> Text
resolverName (ResolverSnapshot name) = renderSnapName name
-resolverName (ResolverGhc (MajorVersion x y)) = T.pack $ concat ["ghc-", show x, ".", show y]
+resolverName (ResolverCompiler version) = compilerMajorVersionName version
resolverName (ResolverCustom name _) = "custom-" <> name
-- | Try to parse a @Resolver@ from a @Text@. Won't work for complex resolvers (like custom).
parseResolverText :: MonadThrow m => Text -> m Resolver
parseResolverText t
| Right x <- parseSnapName t = return $ ResolverSnapshot x
- | Just t' <- T.stripPrefix "ghc-" t
- , Just v <- parseMajorVersionFromString $ T.unpack t'
- = return $ ResolverGhc v
+ | Just version <- parseCompilerMajorVersion t = return $ ResolverCompiler version
| otherwise = throwM $ ParseResolverException t
-- | Class for environment values which have access to the stack root
@@ -639,7 +637,7 @@ instance Show ConfigException where
show (ParseResolverException t) = concat
[ "Invalid resolver value: "
, T.unpack t
- , ". Possible valid values include lts-2.12, nightly-YYYY-MM-DD, and ghc-7.10. "
+ , ". Possible valid values include lts-2.12, nightly-YYYY-MM-DD, ghc-7.10, and ghcjs-0.1-ghc-7.10. "
, "See https://www.stackage.org/snapshots for a complete list."
]
show (NoProjectConfigFound dir mcmd) = concat
@@ -754,27 +752,24 @@ snapshotsDir = do
installationRootDeps :: (MonadThrow m, MonadReader env m, HasEnvConfig env) => m (Path Abs Dir)
installationRootDeps = do
snapshots <- snapshotsDir
+ ec <- asks getEnvConfig
bc <- asks getBuildConfig
name <- parseRelDir $ T.unpack $ resolverName $ bcResolver bc
- ghc <- parseRelDir =<< ghcVersionName
+ -- FIXME: this is a behavior change from older stack. Is that ok?
+ ghc <- parseRelDir $ T.unpack $ compilerVersionName $ envConfigCompilerVersion ec
return $ snapshots </> name </> ghc
-- | Installation root for locals
installationRootLocal :: (MonadThrow m, MonadReader env m, HasEnvConfig env) => m (Path Abs Dir)
installationRootLocal = do
+ ec <- asks getEnvConfig
bc <- asks getBuildConfig
name <- parseRelDir $ T.unpack $ resolverName $ bcResolver bc
- ghc <- parseRelDir =<< ghcVersionName
+ -- FIXME: this is a behavior change from older stack. Is that ok?
+ ghc <- parseRelDir $ T.unpack $ compilerVersionName $ envConfigCompilerVersion ec
platform <- platformRelDir
return $ configProjectWorkDir bc </> $(mkRelDir "install") </> platform </> name </> ghc
--- FIXME: Is there a better way to disambiguate ghcjs paths?
-ghcVersionName :: (MonadThrow m, MonadReader env m, HasEnvConfig env) => m String
-ghcVersionName = do
- useGHCJS <- asks (configUseGHCJS . getConfig)
- version <- asks (versionString . envConfigGhcVersion . getEnvConfig)
- return $ version ++ if useGHCJS == UseGHCJS then "-ghcjs" else ""
-
-- | Package database for installing dependencies into
packageDatabaseDeps :: (MonadThrow m, MonadReader env m, HasEnvConfig env) => m (Path Abs Dir)
packageDatabaseDeps = do
diff --git a/src/Stack/Types/Package.hs b/src/Stack/Types/Package.hs
index 7b5b3e4..ce9faa6 100644
--- a/src/Stack/Types/Package.hs
+++ b/src/Stack/Types/Package.hs
@@ -32,6 +32,7 @@ import Distribution.System (Platform (..))
import GHC.Generics
import Path as FL
import Prelude
+import Stack.Types.Compiler
import Stack.Types.Config
import Stack.Types.FlagName
import Stack.Types.PackageName
@@ -122,12 +123,11 @@ instance Show GetPackageModules where
-- | Package build configuration
data PackageConfig =
- PackageConfig {packageConfigEnableTests :: !Bool -- ^ Are tests enabled?
- ,packageConfigEnableBenchmarks :: !Bool -- ^ Are benchmarks enabled?
- ,packageConfigFlags :: !(Map FlagName Bool) -- ^ Package config flags.
- ,packageConfigGhcVersion :: !Version -- ^ GHC version
- ,packageConfigPlatform :: !Platform -- ^ host platform
- ,packageConfigUseGHCJS :: !UseGHCJS -- ^ Whether to use GHCJS
+ PackageConfig {packageConfigEnableTests :: !Bool -- ^ Are tests enabled?
+ ,packageConfigEnableBenchmarks :: !Bool -- ^ Are benchmarks enabled?
+ ,packageConfigFlags :: !(Map FlagName Bool) -- ^ Package config flags.
+ ,packageConfigCompilerVersion :: !CompilerVersion -- ^ Compiler version
+ ,packageConfigPlatform :: !Platform -- ^ host platform
}
deriving (Show,Typeable)
diff --git a/src/main/Main.hs b/src/main/Main.hs
index 1e69509..705085a 100644
--- a/src/main/Main.hs
+++ b/src/main/Main.hs
@@ -517,7 +517,7 @@ setupCmd SetupCmdOpts{..} go@GlobalOpts{..} = do
Just v -> return (v, Nothing)
Nothing -> do
bc <- lcLoadBuildConfig lc globalResolver
- return (bcGhcVersionExpected bc, Just $ bcStackYaml bc)
+ return (bcCompilerVersionExpected bc, Just $ bcStackYaml bc)
mpaths <- runStackTGlobal manager (lcConfig lc) go $
ensureGHC SetupOpts
{ soptsInstallIfMissing = True
diff --git a/src/test/Stack/BuildPlanSpec.hs b/src/test/Stack/BuildPlanSpec.hs
index 0a270ad..6cec791 100644
--- a/src/test/Stack/BuildPlanSpec.hs
+++ b/src/test/Stack/BuildPlanSpec.hs
@@ -97,7 +97,7 @@ spec = beforeAll setup $ afterAll teardown $ do
attoparsec = go "attoparsec" "text"
aeson = go "aeson" "text attoparsec"
mkMBP pkgs = MiniBuildPlan
- { mbpGhcVersion = version
+ { mbpCompilerVersion = version
, mbpPackages = Map.fromList pkgs
}
mbpAll = mkMBP [resourcet, conduit, conduitExtra, text, attoparsec, aeson]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment