Created
August 12, 2015 07:27
-
-
Save mgsloan/44f3950b142ac44e9bd3 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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