Skip to content

Instantly share code, notes, and snippets.

@mgsloan
Created July 2, 2015 08:50
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/dd9da72c5db500cb1391 to your computer and use it in GitHub Desktop.
Save mgsloan/dd9da72c5db500cb1391 to your computer and use it in GitHub Desktop.
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