Skip to content

Commit

Permalink
Revert "Make --ghc-options and --ghcjs-boot-options take multiple args
Browse files Browse the repository at this point in the history
…#3315"

This reverts commit 9e2bd40.
  • Loading branch information
mgsloan committed Oct 23, 2017
1 parent 2c59d33 commit d977fca
Show file tree
Hide file tree
Showing 7 changed files with 28 additions and 38 deletions.
3 changes: 0 additions & 3 deletions ChangeLog.md
Expand Up @@ -75,9 +75,6 @@ Other enhancements:
* `stack setup` for ghcjs will now install `alex` and `happy` if
they are not present. See
[#3109](https://github.com/commercialhaskell/stack/issues/3232).
* `--ghc-options` and `--ghcjs-boot-options` now parse their input, so
multiple arguments can be passed in one option.
See [#3315](https://github.com/commercialhaskell/stack/issues/3315)
* Added `stack ghci --only-main` flag, to skip loading / importing
all but main modules. See the ghci documentation page
for further info.
Expand Down
13 changes: 1 addition & 12 deletions src/Options/Applicative/Args.hs
Expand Up @@ -5,8 +5,6 @@

module Options.Applicative.Args
(argsArgument
,manyArgsOptions
,textArgsOption
,argsOption
,cmdOption)
where
Expand All @@ -16,22 +14,13 @@ import qualified Data.Text as T
import qualified Options.Applicative as O
import Stack.Prelude

-- | An argument which accepts a list of arguments e.g. @"-X P.hs \"this\""@.
-- | An argument which accepts a list of arguments e.g. @--ghc-options="-X P.hs \"this\""@.
argsArgument :: O.Mod O.ArgumentFields [String] -> O.Parser [String]
argsArgument =
O.argument
(do string <- O.str
either O.readerError return (parseArgsFromString Escaping string))

-- | Like 'textArgsOption', but allows the option to be used multiple
-- times. The options get concatenated.
manyArgsOptions :: O.Mod O.OptionFields [String] -> O.Parser [Text]
manyArgsOptions = fmap concat . many . textArgsOption

-- | Like 'argsOption' but yields 'Text'.
textArgsOption :: O.Mod O.OptionFields [String] -> O.Parser [Text]
textArgsOption = fmap (map T.pack) . argsOption

-- | An option which accepts a list of arguments e.g. @--ghc-options="-X P.hs \"this\""@.
argsOption :: O.Mod O.OptionFields [String] -> O.Parser [String]
argsOption =
Expand Down
11 changes: 6 additions & 5 deletions src/Stack/Options/BuildParser.hs
Expand Up @@ -37,11 +37,12 @@ buildOptsParser cmd =
["-O0"]
(long "fast" <>
help "Turn off optimizations (-O0)") <*>
manyArgsOptions
(long "ghc-options" <>
metavar "OPTIONS" <>
completer ghcOptsCompleter <>
help "Additional options passed to GHC")) <*>
many
(textOption
(long "ghc-options" <>
metavar "OPTIONS" <>
completer ghcOptsCompleter <>
help "Additional options passed to GHC"))) <*>
flagsParser <*>
(flag'
BSOnlyDependencies
Expand Down
11 changes: 6 additions & 5 deletions src/Stack/Options/GhciParser.hs
Expand Up @@ -28,11 +28,12 @@ ghciOptsParser = GhciOpts
metavar "OPTIONS" <>
completer ghcOptsCompleter <>
help "Additional options passed to GHCi")))
<*> manyArgsOptions
(long "ghc-options" <>
metavar "OPTIONS" <>
completer ghcOptsCompleter <>
help "Additional options passed to both GHC and GHCi")
<*> many
(textOption
(long "ghc-options" <>
metavar "OPTIONS" <>
completer ghcOptsCompleter <>
help "Additional options passed to both GHC and GHCi"))
<*> flagsParser
<*> optional
(strOption (long "with-ghc" <>
Expand Down
16 changes: 9 additions & 7 deletions src/Stack/Options/NixParser.hs
@@ -1,13 +1,14 @@
{-# LANGUAGE NoImplicitPrelude #-}
module Stack.Options.NixParser where

import Options.Applicative
import Options.Applicative.Args
import Options.Applicative.Builder.Extra
import Stack.Nix
import Stack.Options.Utils
import Stack.Prelude
import Stack.Types.Nix
import qualified Data.Text as T
import Options.Applicative
import Options.Applicative.Args
import Options.Applicative.Builder.Extra
import Stack.Nix
import Stack.Options.Utils
import Stack.Prelude
import Stack.Types.Nix

nixOptsParser :: Bool -> Parser NixOptsMonoid
nixOptsParser hide0 = overrideActivation <$>
Expand Down Expand Up @@ -55,3 +56,4 @@ nixOptsParser hide0 = overrideActivation <$>
if fromFirst False (nixMonoidPureShell m)
then m { nixMonoidEnable = (First . Just . fromFirst True) (nixMonoidEnable m) }
else m
textArgsOption = fmap (map T.pack) . argsOption
9 changes: 4 additions & 5 deletions src/Stack/SetupCmd.hs
Expand Up @@ -17,7 +17,6 @@ import Control.Monad.Logger ()
import Control.Monad.Reader
import qualified Data.Text as T
import qualified Options.Applicative as OA
import qualified Options.Applicative.Args as OA
import qualified Options.Applicative.Builder.Extra as OA
import qualified Options.Applicative.Types as OA
import Path
Expand All @@ -33,7 +32,7 @@ data SetupCmdOpts = SetupCmdOpts
, scoUpgradeCabal :: !(Maybe UpgradeTo)
, scoSetupInfoYaml :: !String
, scoGHCBindistURL :: !(Maybe String)
, scoGHCJSBootOpts :: ![Text]
, scoGHCJSBootOpts :: ![String]
, scoGHCJSBootClean :: !Bool
}

Expand Down Expand Up @@ -82,10 +81,10 @@ setupParser = SetupCmdOpts
(OA.long "ghc-bindist"
<> OA.metavar "URL"
<> OA.help "Alternate GHC binary distribution (requires custom --ghc-variant)"))
<*> OA.manyArgsOptions
<*> OA.many (OA.strOption
(OA.long "ghcjs-boot-options"
<> OA.metavar "GHCJS_BOOT"
<> OA.help "Additional ghcjs-boot options")
<> OA.help "Additional ghcjs-boot options"))
<*> OA.boolFlags True
"ghcjs-boot-clean"
"Control if ghcjs-boot should have --clean option present"
Expand Down Expand Up @@ -123,7 +122,7 @@ setup SetupCmdOpts{..} wantedCompiler compilerCheck mstack = do
, soptsResolveMissingGHC = Nothing
, soptsSetupInfoYaml = scoSetupInfoYaml
, soptsGHCBindistURL = scoGHCBindistURL
, soptsGHCJSBootOpts = map T.unpack scoGHCJSBootOpts ++ ["--clean" | scoGHCJSBootClean]
, soptsGHCJSBootOpts = scoGHCJSBootOpts ++ ["--clean" | scoGHCJSBootClean]
}
let compiler = case wantedCompiler of
GhcVersion _ -> "GHC"
Expand Down
3 changes: 2 additions & 1 deletion src/main/Main.hs
Expand Up @@ -23,6 +23,7 @@ import Control.Monad.Logger (runNoLoggingT)
import Control.Monad.Reader (local)
import Control.Monad.Trans.Except (ExceptT)
import Control.Monad.Writer.Lazy (Writer)
import Data.Attoparsec.Args (parseArgs, EscapingMode (Escaping))
import Data.Attoparsec.Interpreter (getInterpreterArgs)
import qualified Data.ByteString.Lazy as L
import Data.IORef.RunOnce (runOnce)
Expand Down Expand Up @@ -591,7 +592,7 @@ cleanCmd opts go =
-- | Helper for build and install commands
buildCmd :: BuildOptsCLI -> GlobalOpts -> IO ()
buildCmd opts go = do
when ("-prof" `elem` boptsCLIGhcOptions opts) $ do
when (any (("-prof" `elem`) . either (const []) id . parseArgs Escaping) (boptsCLIGhcOptions opts)) $ do
hPutStrLn stderr "Error: When building with stack, you should not use the -prof GHC option"
hPutStrLn stderr "Instead, please use --library-profiling and --executable-profiling"
hPutStrLn stderr "See: https://github.com/commercialhaskell/stack/issues/1015"
Expand Down

0 comments on commit d977fca

Please sign in to comment.