mirror of
https://github.com/IHaskell/IHaskell.git
synced 2025-04-15 19:06:06 +00:00
Hide stack support behind --stack flag
This commit is contained in:
parent
783bcb948f
commit
3ebf5b074f
34
main/Main.hs
34
main/Main.hs
@ -103,6 +103,8 @@ parseKernelArgs = foldl' addFlag defaultKernelSpecOptions
|
||||
kernelSpecOpts { kernelSpecGhcLibdir = libdir }
|
||||
addFlag kernelSpecOpts (KernelspecInstallPrefix prefix) =
|
||||
kernelSpecOpts { kernelSpecInstallPrefix = Just prefix }
|
||||
addFlag kernelSpecOpts KernelspecUseStack =
|
||||
kernelSpecOpts { kernelSpecUseStack = True }
|
||||
addFlag kernelSpecOpts flag = error $ "Unknown flag" ++ show flag
|
||||
|
||||
-- | Run the IHaskell language kernel.
|
||||
@ -112,6 +114,7 @@ runKernel :: KernelSpecOptions -- ^ Various options from when the kernel was ins
|
||||
runKernel kernelOpts profileSrc = do
|
||||
let debug = kernelSpecDebug kernelOpts
|
||||
libdir = kernelSpecGhcLibdir kernelOpts
|
||||
useStack = kernelSpecUseStack kernelOpts
|
||||
|
||||
-- Parse the profile file.
|
||||
Just profile <- liftM decode $ LBS.readFile profileSrc
|
||||
@ -121,22 +124,23 @@ runKernel kernelOpts profileSrc = do
|
||||
Stdin.recordKernelProfile dir profile
|
||||
|
||||
#if MIN_VERSION_ghc(7,8,0)
|
||||
-- Detect if we have stack
|
||||
runResult <- try $ readProcessWithExitCode "stack" [] ""
|
||||
let stack =
|
||||
case runResult :: Either SomeException (ExitCode, String, String) of
|
||||
Left _ -> False
|
||||
Right (exitCode, stackStdout, _) -> exitCode == ExitSuccess && "The Haskell Tool Stack" `isInfixOf` stackStdout
|
||||
when useStack $ do
|
||||
-- Detect if we have stack
|
||||
runResult <- try $ readProcessWithExitCode "stack" [] ""
|
||||
let stack =
|
||||
case runResult :: Either SomeException (ExitCode, String, String) of
|
||||
Left _ -> False
|
||||
Right (exitCode, stackStdout, _) -> exitCode == ExitSuccess && "The Haskell Tool Stack" `isInfixOf` stackStdout
|
||||
|
||||
-- If we're in a stack directory, use `stack` to set the environment
|
||||
-- We can't do this with base <= 4.6 because setEnv doesn't exist.
|
||||
when stack $ do
|
||||
stackEnv <- lines <$> readProcess "stack" ["exec", "env"] ""
|
||||
forM_ stackEnv $ \line ->
|
||||
let (var, val) = break (== '=') line
|
||||
in case tailMay val of
|
||||
Nothing -> return ()
|
||||
Just val' -> setEnv var val'
|
||||
-- If we're in a stack directory, use `stack` to set the environment
|
||||
-- We can't do this with base <= 4.6 because setEnv doesn't exist.
|
||||
when stack $ do
|
||||
stackEnv <- lines <$> readProcess "stack" ["exec", "env"] ""
|
||||
forM_ stackEnv $ \line ->
|
||||
let (var, val) = break (== '=') line
|
||||
in case tailMay val of
|
||||
Nothing -> return ()
|
||||
Just val' -> setEnv var val'
|
||||
#endif
|
||||
|
||||
-- Serve on all sockets and ports defined in the profile.
|
||||
|
@ -38,6 +38,7 @@ data Argument = ConfFile String -- ^ A file with commands to load at startup
|
||||
| ConvertToFormat NotebookFormat
|
||||
| ConvertLhsStyle (LhsStyle String)
|
||||
| KernelspecInstallPrefix String
|
||||
| KernelspecUseStack
|
||||
deriving (Eq, Show)
|
||||
|
||||
data LhsStyle string =
|
||||
@ -100,6 +101,11 @@ kernelDebugFlag = flagNone ["debug"] addDebug "Print debugging output from the k
|
||||
where
|
||||
addDebug (Args mode prev) = Args mode (KernelDebug : prev)
|
||||
|
||||
kernelStackFlag :: Flag Args
|
||||
kernelStackFlag = flagNone ["stack"] addStack "Inherit environment from `stack` when it is installed"
|
||||
where
|
||||
addStack (Args mode prev) = Args mode (KernelspecUseStack : prev)
|
||||
|
||||
confFlag :: Flag Args
|
||||
confFlag = flagReq ["conf", "c"] (store ConfFile) "<rc.hs>"
|
||||
"File with commands to execute at start; replaces ~/.ihaskell/rc.hs."
|
||||
@ -118,11 +124,11 @@ store constructor str (Args mode prev) = Right $ Args mode $ constructor str : p
|
||||
installKernelSpec :: Mode Args
|
||||
installKernelSpec =
|
||||
mode "install" (Args InstallKernelSpec []) "Install the Jupyter kernelspec." noArgs
|
||||
[ghcLibFlag, kernelDebugFlag, confFlag, installPrefixFlag, helpFlag]
|
||||
[ghcLibFlag, kernelDebugFlag, confFlag, installPrefixFlag, helpFlag, kernelStackFlag]
|
||||
|
||||
kernel :: Mode Args
|
||||
kernel = mode "kernel" (Args (Kernel Nothing) []) "Invoke the IHaskell kernel." kernelArg
|
||||
[ghcLibFlag, kernelDebugFlag, confFlag]
|
||||
[ghcLibFlag, kernelDebugFlag, confFlag, kernelStackFlag]
|
||||
where
|
||||
kernelArg = flagArg update "<json-kernel-file>"
|
||||
update filename (Args _ flags) = Right $ Args (Kernel $ Just filename) flags
|
||||
|
@ -47,6 +47,7 @@ data KernelSpecOptions =
|
||||
, kernelSpecDebug :: Bool -- ^ Spew debugging output?
|
||||
, kernelSpecConfFile :: IO (Maybe String) -- ^ Filename of profile JSON file.
|
||||
, kernelSpecInstallPrefix :: Maybe String
|
||||
, kernelSpecUseStack :: Bool -- ^ Whether to use @stack@ environments.
|
||||
}
|
||||
|
||||
defaultKernelSpecOptions :: KernelSpecOptions
|
||||
@ -55,6 +56,7 @@ defaultKernelSpecOptions = KernelSpecOptions
|
||||
, kernelSpecDebug = False
|
||||
, kernelSpecConfFile = defaultConfFile
|
||||
, kernelSpecInstallPrefix = Nothing
|
||||
, kernelSpecUseStack = False
|
||||
}
|
||||
|
||||
-- | The IPython kernel name.
|
||||
@ -188,6 +190,7 @@ installKernelspec replace opts = void $ do
|
||||
Nothing -> []
|
||||
Just file -> ["--conf", file])
|
||||
++ ["--ghclib", kernelSpecGhcLibdir opts]
|
||||
++ ["--stack" | kernelSpecUseStack opts]
|
||||
|
||||
let kernelSpec = KernelSpec
|
||||
{ kernelDisplayName = "Haskell"
|
||||
|
Loading…
x
Reference in New Issue
Block a user