mirror of
https://github.com/IHaskell/IHaskell.git
synced 2025-04-16 19:36:06 +00:00
Include RTS flags in kernelspec when installing.
This commit is contained in:
parent
8dcb905043
commit
4245ef5191
@ -113,6 +113,8 @@ parseKernelArgs = foldl' addFlag defaultKernelSpecOptions
|
||||
kernelSpecOpts { kernelSpecDebug = True }
|
||||
addFlag kernelSpecOpts (GhcLibDir libdir) =
|
||||
kernelSpecOpts { kernelSpecGhcLibdir = libdir }
|
||||
addFlag kernelSpecOpts (RTSFlags rts) =
|
||||
kernelSpecOpts { kernelSpecRTSOptions = rts }
|
||||
addFlag kernelSpecOpts (KernelspecInstallPrefix prefix) =
|
||||
kernelSpecOpts { kernelSpecInstallPrefix = Just prefix }
|
||||
addFlag kernelSpecOpts KernelspecUseStack =
|
||||
|
@ -31,6 +31,8 @@ data Args = Args IHaskellMode [Argument]
|
||||
data Argument = ConfFile String -- ^ A file with commands to load at startup.
|
||||
| OverwriteFiles -- ^ Present when output should overwrite existing files.
|
||||
| GhcLibDir String -- ^ Where to find the GHC libraries.
|
||||
| RTSFlags [String] -- ^ Options for the GHC runtime (e.g. heap-size limit
|
||||
-- or number of threads).
|
||||
| KernelDebug -- ^ Spew debugging output from the kernel.
|
||||
| Help -- ^ Display help text.
|
||||
| Version -- ^ Display version text.
|
||||
@ -96,6 +98,20 @@ help mode = showText (Wrap 100) $ helpText [] HelpFormatAll $ chooseMode mode
|
||||
ghcLibFlag :: Flag Args
|
||||
ghcLibFlag = flagReq ["ghclib", "l"] (store GhcLibDir) "<path>" "Library directory for GHC."
|
||||
|
||||
ghcRTSFlag :: Flag Args
|
||||
ghcRTSFlag = flagReq ["use-rtsopts"] storeRTS "\"<flags>\""
|
||||
"Runtime options (multithreading etc.). See `ghc +RTS -?`."
|
||||
where storeRTS allRTSFlags (Args mode prev)
|
||||
= fmap (Args mode . (:prev) . RTSFlags)
|
||||
. parseRTS . words $ filter (/='"') allRTSFlags
|
||||
parseRTS ("+RTS":fs) -- Ignore if this is included (we already wrap
|
||||
= parseRTS fs -- the ihaskell-kernel call in +RTS <flags> -RTS anyway)
|
||||
parseRTS ["-RTS"] = Right []
|
||||
parseRTS ("-RTS":_) -- Evil injection of extra arguments? Unlikely, but...
|
||||
= Left "Adding non-RTS options to --use-rtsopts not permitted."
|
||||
parseRTS (f:fs) = (f:) <$> parseRTS fs
|
||||
parseRTS [] = Right []
|
||||
|
||||
kernelDebugFlag :: Flag Args
|
||||
kernelDebugFlag = flagNone ["debug"] addDebug "Print debugging output from the kernel."
|
||||
where
|
||||
@ -125,7 +141,7 @@ 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, kernelStackFlag]
|
||||
[ghcLibFlag, ghcRTSFlag, kernelDebugFlag, confFlag, installPrefixFlag, helpFlag, kernelStackFlag]
|
||||
|
||||
kernel :: Mode Args
|
||||
kernel = mode "kernel" (Args (Kernel Nothing) []) "Invoke the IHaskell kernel." kernelArg
|
||||
|
@ -45,6 +45,7 @@ import StringUtils (replace, split)
|
||||
data KernelSpecOptions =
|
||||
KernelSpecOptions
|
||||
{ kernelSpecGhcLibdir :: String -- ^ GHC libdir.
|
||||
, kernelSpecRTSOptions :: [String] -- ^ Runtime options to use.
|
||||
, kernelSpecDebug :: Bool -- ^ Spew debugging output?
|
||||
, kernelSpecConfFile :: IO (Maybe String) -- ^ Filename of profile JSON file.
|
||||
, kernelSpecInstallPrefix :: Maybe String
|
||||
@ -54,6 +55,7 @@ data KernelSpecOptions =
|
||||
defaultKernelSpecOptions :: KernelSpecOptions
|
||||
defaultKernelSpecOptions = KernelSpecOptions
|
||||
{ kernelSpecGhcLibdir = GHC.Paths.libdir
|
||||
, kernelSpecRTSOptions = []
|
||||
, kernelSpecDebug = False
|
||||
, kernelSpecConfFile = defaultConfFile
|
||||
, kernelSpecInstallPrefix = Nothing
|
||||
@ -191,6 +193,9 @@ installKernelspec replace opts = void $ do
|
||||
Nothing -> []
|
||||
Just file -> ["--conf", file])
|
||||
++ ["--ghclib", kernelSpecGhcLibdir opts]
|
||||
++ (case kernelSpecRTSOptions opts of
|
||||
[] -> []
|
||||
rtsOpts -> "+RTS" : kernelSpecRTSOptions opts ++ ["-RTS"])
|
||||
++ ["--stack" | kernelSpecUseStack opts]
|
||||
|
||||
let kernelSpec = KernelSpec
|
||||
|
Loading…
x
Reference in New Issue
Block a user