Created
July 2, 2015 08:50
-
-
Save mgsloan/dd9da72c5db500cb1391 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 9b00447..50b8d61 100644 | |
--- a/src/Stack/Build.hs | |
+++ b/src/Stack/Build.hs | |
@@ -53,7 +53,7 @@ build :: M env m | |
=> (Set (Path Abs File) -> IO ()) -- ^ callback after discovering all local files | |
-> BuildOpts | |
-> m () | |
-build setLocalFiles bopts = do | |
+build setLocalFiles bopts = errorWhenUnsupported bopts $ do | |
menv <- getMinimalEnvOverride | |
(mbp, locals, extraToBuild, sourceMap) <- loadSourceMap bopts | |
@@ -136,3 +136,13 @@ clean = do | |
forM_ | |
(Map.keys (bcPackages bconfig)) | |
(distDirFromDir >=> removeTreeIfExists) | |
+ | |
+errorWhenUnsupported :: M env m => BuildOpts -> m () -> m () | |
+errorWhenUnsupported bopts inner = do | |
+ useGHCJS <- asks (configUseGHCJS . getConfig) | |
+ if useGHCJS | |
+ then case boptsFinalAction bopts of | |
+ DoTests _ -> $logError "GHCJS doesn't support running tests (yet!)" | |
+ DoBenchmarks -> $logError "GHCJS doesn't support running benchmarks (yet!)" | |
+ DoNothing -> inner | |
+ else inner | |
diff --git a/src/Stack/Build/Execute.hs b/src/Stack/Build/Execute.hs | |
index 63136fe..dab1f21 100644 | |
--- a/src/Stack/Build/Execute.hs | |
+++ b/src/Stack/Build/Execute.hs | |
@@ -450,7 +450,8 @@ ensureConfig pkgDir ExecuteEnv {..} Task {..} announce cabal cabalfp extra = do | |
when needConfig $ withMVar eeConfigureLock $ \_ -> do | |
deleteCaches pkgDir | |
announce | |
- cabal False $ "configure" : map T.unpack configOpts | |
+ config <- asks getConfig | |
+ cabal False $ "configure" : addOptGHCJS config (map T.unpack configOpts) | |
writeConfigCache pkgDir newConfigCache | |
writeCabalMod pkgDir newCabalMod | |
@@ -624,10 +625,10 @@ singleBuild ac@ActionContext {..} ee@ExecuteEnv {..} task@Task {..} = | |
announce "build" | |
config <- asks getConfig | |
- cabal (console && configHideTHLoading config) $ | |
+ cabal (console && configHideTHLoading config) $ ("build" :) $ addOptGHCJS config $ | |
case taskType of | |
- TTLocal lp -> "build" : map T.unpack (Set.toList $ lpComponents lp) | |
- TTUpstream _ _ -> ["build"] | |
+ TTLocal lp -> map T.unpack (Set.toList $ lpComponents lp) | |
+ TTUpstream _ _ -> [] | |
let doHaddock = shouldHaddockPackage eeBuildOpts eeWanted (packageName package) && | |
-- Works around haddock failing on bytestring-builder since it has no modules | |
@@ -911,3 +912,8 @@ getSetupHs dir = do | |
where | |
fp1 = dir </> $(mkRelFile "Setup.hs") | |
fp2 = dir </> $(mkRelFile "Setup.lhs") | |
+ | |
+addOptGHCJS :: Config -> [String] -> [String] | |
+addOptGHCJS config | |
+ | configUseGHCJS config = ("--ghcjs" :) | |
+ | otherwise = id | |
diff --git a/src/Stack/Config.hs b/src/Stack/Config.hs | |
index 25ac4ca..88f7b63 100644 | |
--- a/src/Stack/Config.hs | |
+++ b/src/Stack/Config.hs | |
@@ -116,6 +116,7 @@ configFromConfigMonoid configStackRoot mproject configMonoid@ConfigMonoid{..} = | |
configSystemGHC = fromMaybe True configMonoidSystemGHC | |
configInstallGHC = fromMaybe False configMonoidInstallGHC | |
configSkipGHCCheck = fromMaybe False configMonoidSkipGHCCheck | |
+ configUseGHCJS = fromMaybe False configMonoidUseGHCJS | |
configExtraIncludeDirs = configMonoidExtraIncludeDirs | |
configExtraLibDirs = configMonoidExtraLibDirs | |
@@ -159,11 +160,12 @@ configFromConfigMonoid configStackRoot mproject configMonoid@ConfigMonoid{..} = | |
-- | Command-line arguments parser for configuration. | |
configOptsParser :: Bool -> Parser ConfigMonoid | |
configOptsParser docker = | |
- (\opts systemGHC installGHC arch os jobs includes libs skipGHCCheck -> mempty | |
+ (\opts systemGHC installGHC arch os jobs includes libs skipGHCCheck useGHCJS -> mempty | |
{ configMonoidDockerOpts = opts | |
, configMonoidSystemGHC = systemGHC | |
, configMonoidInstallGHC = installGHC | |
, configMonoidSkipGHCCheck = skipGHCCheck | |
+ , configMonoidUseGHCJS = useGHCJS | |
, configMonoidArch = arch | |
, configMonoidOS = os | |
, configMonoidJobs = jobs | |
@@ -209,6 +211,10 @@ configOptsParser docker = | |
"skip-ghc-check" | |
"skipping the GHC version and architecture check" | |
idm | |
+ <*> maybeBoolFlags | |
+ "use-ghcjs" | |
+ "using GHCJS to build packages" | |
+ idm | |
-- | Get the directory on Windows where we should install extra programs. For | |
-- more information, see discussion at: | |
diff --git a/src/Stack/Types/Config.hs b/src/Stack/Types/Config.hs | |
index f2afbbd..c43ef61 100644 | |
--- a/src/Stack/Types/Config.hs | |
+++ b/src/Stack/Types/Config.hs | |
@@ -87,6 +87,8 @@ data Config = | |
-- version is available? Can be overridden by command line options. | |
,configSkipGHCCheck :: !Bool | |
-- ^ Don't bother checking the GHC version or architecture. | |
+ ,configUseGHCJS :: Bool | |
+ -- ^ Build with GHCJS | |
,configLocalBin :: !(Path Abs Dir) | |
-- ^ Directory we should install executables into | |
,configRequireStackVersion :: !VersionRange | |
@@ -416,6 +418,8 @@ data ConfigMonoid = | |
-- ^ See: 'configInstallGHC' | |
,configMonoidSkipGHCCheck :: !(Maybe Bool) | |
-- ^ See: 'configSkipGHCCheck' | |
+ ,configMonoidUseGHCJS :: !(Maybe Bool) | |
+ -- ^ See: 'configUseGHCJS | |
,configMonoidRequireStackVersion :: !VersionRange | |
-- ^ See: 'configRequireStackVersion' | |
,configMonoidOS :: !(Maybe String) | |
@@ -441,6 +445,7 @@ instance Monoid ConfigMonoid where | |
, configMonoidSystemGHC = Nothing | |
, configMonoidInstallGHC = Nothing | |
, configMonoidSkipGHCCheck = Nothing | |
+ , configMonoidUseGHCJS = Nothing | |
, configMonoidRequireStackVersion = anyVersion | |
, configMonoidOS = Nothing | |
, configMonoidArch = Nothing | |
@@ -457,6 +462,7 @@ instance Monoid ConfigMonoid where | |
, configMonoidSystemGHC = configMonoidSystemGHC l <|> configMonoidSystemGHC r | |
, configMonoidInstallGHC = configMonoidInstallGHC l <|> configMonoidInstallGHC r | |
, configMonoidSkipGHCCheck = configMonoidSkipGHCCheck l <|> configMonoidSkipGHCCheck r | |
+ , configMonoidUseGHCJS = configMonoidUseGHCJS l <|> configMonoidUseGHCJS r | |
, configMonoidRequireStackVersion = intersectVersionRanges (configMonoidRequireStackVersion l) | |
(configMonoidRequireStackVersion r) | |
, configMonoidOS = configMonoidOS l <|> configMonoidOS r | |
@@ -478,6 +484,7 @@ instance FromJSON ConfigMonoid where | |
configMonoidSystemGHC <- obj .:? "system-ghc" | |
configMonoidInstallGHC <- obj .:? "install-ghc" | |
configMonoidSkipGHCCheck <- obj .:? "skip-ghc-check" | |
+ configMonoidUseGHCJS <- obj .:? "use-ghcjs" | |
configMonoidRequireStackVersion <- unVersionRangeJSON <$> | |
obj .:? "require-stack-version" | |
.!= VersionRangeJSON anyVersion |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment