From 3c841e86f335c4cc8371344f020c3d4cfe90d4a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konrad=20G=C4=85dek?= Date: Mon, 10 Apr 2017 22:58:46 +0200 Subject: [PATCH] Allow overriding path and setting options for Cabal PROGs Closes #2369. --- ChangeLog.md | 2 + doc/yaml_configuration.md | 6 +- src/Stack/Config.hs | 53 ++++- src/Stack/Options/ConfigParser.hs | 377 +++++++++++++++++++++++++++++- src/Stack/Types/Build.hs | 53 ++++- src/Stack/Types/Config.hs | 318 ++++++++++++++++++++++++- 6 files changed, 791 insertions(+), 18 deletions(-) diff --git a/ChangeLog.md b/ChangeLog.md index df69629203..12dee6115d 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -49,6 +49,8 @@ Other enhancements: a method to ensure PVP compliance without having to proactively fix bounds issues for Stackage maintenance. * Expose a `save-hackage-creds` configuration option +* Add the ability to explictly specify path and options to executables. + See [#2369](https://github.com/commercialhaskell/stack/issues/2369). Bug fixes: diff --git a/doc/yaml_configuration.md b/doc/yaml_configuration.md index bb49c1d56c..8a34a274aa 100644 --- a/doc/yaml_configuration.md +++ b/doc/yaml_configuration.md @@ -392,12 +392,14 @@ extra-lib-dirs: - /opt/foo/lib ``` -### with-gcc +### with-gcc/with-ld/with-strip -Specify a path to gcc explicitly, rather than relying on the normal path resolution. +Specify a path to gcc, ld, or strip explicitly, rather than relying on the normal path resolution. ```yaml with-gcc: /usr/local/bin/gcc-5 +with-ld: /usr/local/bin/ld +with-strip: /usr/local/bin/gstrip ``` ### compiler-check diff --git a/src/Stack/Config.hs b/src/Stack/Config.hs index 9d98fc41b8..e4ef65599b 100644 --- a/src/Stack/Config.hs +++ b/src/Stack/Config.hs @@ -298,7 +298,58 @@ configFromConfigMonoid configExtraIncludeDirs = configMonoidExtraIncludeDirs configExtraLibDirs = configMonoidExtraLibDirs - configOverrideGccPath = getFirst configMonoidOverrideGccPath + configProgAlexPath = getFirst configMonoidProgAlexPath + configProgArPath = getFirst configMonoidProgArPath + configProgC2hsPath = getFirst configMonoidProgC2hsPath + configProgCpphsPath = getFirst configMonoidProgCpphsPath + configProgGccPath = getFirst configMonoidProgGccPath + configProgGhcPath = getFirst configMonoidProgGhcPath + configProgGhcPkgPath = getFirst configMonoidProgGhcPkgPath + configProgGhcjsPath = getFirst configMonoidProgGhcjsPath + configProgGhcjsPkgPath = getFirst configMonoidProgGhcjsPkgPath + configProgGreencardPath = getFirst configMonoidProgGreencardPath + configProgHaddockPath = getFirst configMonoidProgHaddockPath + configProgHappyPath = getFirst configMonoidProgHappyPath + configProgHaskellSuitePath = getFirst configMonoidProgHaskellSuitePath + configProgHaskellSuitePkgPath = getFirst configMonoidProgHaskellSuitePkgPath + configProgHmakePath = getFirst configMonoidProgHmakePath + configProgHpcPath = getFirst configMonoidProgHpcPath + configProgHsc2hsPath = getFirst configMonoidProgHsc2hsPath + configProgHscolourPath = getFirst configMonoidProgHscolourPath + configProgJhcPath = getFirst configMonoidProgJhcPath + configProgLdPath = getFirst configMonoidProgLdPath + configProgLhcPath = getFirst configMonoidProgLhcPath + configProgLhcPkgPath = getFirst configMonoidProgLhcPkgPath + configProgPkgConfigPath = getFirst configMonoidProgPkgConfigPath + configProgStripPath = getFirst configMonoidProgStripPath + configProgTarPath = getFirst configMonoidProgTarPath + configProgUhcPath = getFirst configMonoidProgUhcPath + configProgAlexOptions = configMonoidProgAlexOptions + configProgArOptions = configMonoidProgArOptions + configProgC2hsOptions = configMonoidProgC2hsOptions + configProgCpphsOptions = configMonoidProgCpphsOptions + configProgGccOptions = configMonoidProgGccOptions + configProgGhcOptions = configMonoidProgGhcOptions + configProgGhcPkgOptions = configMonoidProgGhcPkgOptions + configProgGhcjsOptions = configMonoidProgGhcjsOptions + configProgGhcjsPkgOptions = configMonoidProgGhcjsPkgOptions + configProgGreencardOptions = configMonoidProgGreencardOptions + configProgHaddockOptions = configMonoidProgHaddockOptions + configProgHappyOptions = configMonoidProgHappyOptions + configProgHaskellSuiteOptions = configMonoidProgHaskellSuiteOptions + configProgHaskellSuitePkgOptions = configMonoidProgHaskellSuitePkgOptions + configProgHmakeOptions = configMonoidProgHmakeOptions + configProgHpcOptions = configMonoidProgHpcOptions + configProgHsc2hsOptions = configMonoidProgHsc2hsOptions + configProgHscolourOptions = configMonoidProgHscolourOptions + configProgJhcOptions = configMonoidProgJhcOptions + configProgLdOptions = configMonoidProgLdOptions + configProgLhcOptions = configMonoidProgLhcOptions + configProgLhcPkgOptions = configMonoidProgLhcPkgOptions + configProgPkgConfigOptions = configMonoidProgPkgConfigOptions + configProgStripOptions = configMonoidProgStripOptions + configProgTarOptions = configMonoidProgTarOptions + configProgUhcOptions = configMonoidProgUhcOptions -- Only place in the codebase where platform is hard-coded. In theory -- in the future, allow it to be configured. diff --git a/src/Stack/Options/ConfigParser.hs b/src/Stack/Options/ConfigParser.hs index 6a8c29417e..a9cd22dfb7 100644 --- a/src/Stack/Options/ConfigParser.hs +++ b/src/Stack/Options/ConfigParser.hs @@ -20,7 +20,10 @@ import qualified System.FilePath as FilePath -- | Command-line arguments parser for configuration. configOptsParser :: FilePath -> GlobalOptsContext -> Parser ConfigMonoid configOptsParser currentDir hide0 = - (\stackRoot workDir buildOpts dockerOpts nixOpts systemGHC installGHC arch ghcVariant ghcBuild jobs includes libs overrideGccPath skipGHCCheck skipMsys localBin modifyCodePage allowDifferentUser dumpLogs -> mempty + (\stackRoot workDir buildOpts dockerOpts nixOpts systemGHC installGHC arch ghcVariant ghcBuild jobs includes libs + progAlexPath progArPath progC2hsPath progCpphsPath progGccPath progGhcPath progGhcPkgPath progGhcjsPath progGhcjsPkgPath progGreencardPath progHaddockPath progHappyPath progHaskellSuitePath progHaskellSuitePkgPath progHmakePath progHpcPath progHsc2hsPath progHscolourPath progJhcPath progLdPath progLhcPath progLhcPkgPath progPkgConfigPath progStripPath progTarPath progUhcPath + progAlexOptions progArOptions progC2hsOptions progCpphsOptions progGccOptions progGhcOptions progGhcPkgOptions progGhcjsOptions progGhcjsPkgOptions progGreencardOptions progHaddockOptions progHappyOptions progHaskellSuiteOptions progHaskellSuitePkgOptions progHmakeOptions progHpcOptions progHsc2hsOptions progHscolourOptions progJhcOptions progLdOptions progLhcOptions progLhcPkgOptions progPkgConfigOptions progStripOptions progTarOptions progUhcOptions + skipGHCCheck skipMsys localBin modifyCodePage allowDifferentUser dumpLogs -> mempty { configMonoidStackRoot = stackRoot , configMonoidWorkDir = workDir , configMonoidBuildOpts = buildOpts @@ -35,7 +38,61 @@ configOptsParser currentDir hide0 = , configMonoidJobs = jobs , configMonoidExtraIncludeDirs = includes , configMonoidExtraLibDirs = libs - , configMonoidOverrideGccPath = overrideGccPath + , configMonoidProgAlexPath = progAlexPath + , configMonoidProgArPath = progArPath + , configMonoidProgC2hsPath = progC2hsPath + , configMonoidProgCpphsPath = progCpphsPath + , configMonoidProgGccPath = progGccPath + , configMonoidProgGhcPath = progGhcPath + , configMonoidProgGhcPkgPath = progGhcPkgPath + , configMonoidProgGhcjsPath = progGhcjsPath + , configMonoidProgGhcjsPkgPath = progGhcjsPkgPath + , configMonoidProgGreencardPath = progGreencardPath + , configMonoidProgHaddockPath = progHaddockPath + , configMonoidProgHappyPath = progHappyPath + , configMonoidProgHaskellSuitePath = progHaskellSuitePath + , configMonoidProgHaskellSuitePkgPath = progHaskellSuitePkgPath + , configMonoidProgHmakePath = progHmakePath + , configMonoidProgHpcPath = progHpcPath + , configMonoidProgHsc2hsPath = progHsc2hsPath + , configMonoidProgHscolourPath = progHscolourPath + , configMonoidProgJhcPath = progJhcPath + , configMonoidProgLdPath = progLdPath + , configMonoidProgLhcPath = progLhcPath + , configMonoidProgLhcPkgPath = progLhcPkgPath + , configMonoidProgPkgConfigPath = progPkgConfigPath + , configMonoidProgStripPath = progStripPath + , configMonoidProgTarPath = progTarPath + , configMonoidProgUhcPath = progUhcPath + , configMonoidProgAlexOptions = progAlexOptions + , configMonoidProgArOptions = progArOptions + , configMonoidProgC2hsOptions = progC2hsOptions + , configMonoidProgCpphsOptions = progCpphsOptions + , configMonoidProgGccOptions = progGccOptions + , configMonoidProgGhcOptions = progGhcOptions + , configMonoidProgGhcPkgOptions = progGhcPkgOptions + , configMonoidProgGhcjsOptions = progGhcjsOptions + , configMonoidProgGhcjsPkgOptions = progGhcjsPkgOptions + , configMonoidProgGreencardOptions = progGreencardOptions + , configMonoidProgHaddockOptions = progHaddockOptions + , configMonoidProgHappyOptions = progHappyOptions + , configMonoidProgHaskellSuiteOptions = progHaskellSuiteOptions + , configMonoidProgHaskellSuitePkgOptions = progHaskellSuitePkgOptions + , configMonoidProgHmakeOptions = progHmakeOptions + , configMonoidProgHpcOptions = progHpcOptions + , configMonoidProgHsc2hsOptions = progHsc2hsOptions + , configMonoidProgHscolourOptions = progHscolourOptions + , configMonoidProgJhcOptions = progJhcOptions + , configMonoidProgLdOptions = progLdOptions + , configMonoidProgLhcOptions = progLhcOptions + , configMonoidProgLhcPkgOptions = progLhcPkgOptions + , configMonoidProgPkgConfigOptions = progPkgConfigOptions + , configMonoidProgStripOptions = progStripOptions + , configMonoidProgTarOptions = progTarOptions + , configMonoidProgUhcOptions = progUhcOptions + -- , configMonoidOverrideGccPath = overrideGccPath + -- , configMonoidOverrideLdPath = overrideLdPath + -- , configMonoidOverrideStripPath = overrideStripPath , configMonoidSkipMsys = skipMsys , configMonoidLocalBinPath = localBin , configMonoidModifyCodePage = modifyCodePage @@ -98,11 +155,317 @@ configOptsParser currentDir hide0 = <> hide ))) <*> optionalFirst (absFileOption - ( long "with-gcc" - <> metavar "PATH-TO-GCC" - <> help "Use gcc found at PATH-TO-GCC" - <> hide - )) + ( long "with-alex" + <> metavar "PATH-TO-ALEX" + <> help "Use alex found at PATH-TO-ALEX" + <> hide + )) + <*> optionalFirst (absFileOption + ( long "with-ar" + <> metavar "PATH-TO-AR" + <> help "Use ar found at PATH-TO-AR" + <> hide + )) + <*> optionalFirst (absFileOption + ( long "with-c2hs" + <> metavar "PATH-TO-C2HS" + <> help "Use c2hs found at PATH-TO-C2HS" + <> hide + )) + <*> optionalFirst (absFileOption + ( long "with-cpphs" + <> metavar "PATH-TO-CPPHS" + <> help "Use cpphs found at PATH-TO-CPPHS" + <> hide + )) + <*> optionalFirst (absFileOption + ( long "with-gcc" + <> metavar "PATH-TO-GCC" + <> help "Use gcc found at PATH-TO-GCC" + <> hide + )) + <*> optionalFirst (absFileOption + ( long "with-ghc" + <> metavar "PATH-TO-GHC" + <> help "Use ghc found at PATH-TO-GHC" + <> hide + )) + <*> optionalFirst (absFileOption + ( long "with-ghc-pkg" + <> metavar "PATH-TO-GHC-PKG" + <> help "Use ghc-pkg found at PATH-TO-GHC-PKG" + <> hide + )) + <*> optionalFirst (absFileOption + ( long "with-ghcjs" + <> metavar "PATH-TO-GHCJS" + <> help "Use ghcjs found at PATH-TO-GHCJS" + <> hide + )) + <*> optionalFirst (absFileOption + ( long "with-ghcjs-pkg" + <> metavar "PATH-TO-GHCJS-PKG" + <> help "Use ghcjs-pkg found at PATH-TO-GHCJS-PKG" + <> hide + )) + <*> optionalFirst (absFileOption + ( long "with-greencard" + <> metavar "PATH-TO-GREENCARD" + <> help "Use greencard found at PATH-TO-GREENCARD" + <> hide + )) + <*> optionalFirst (absFileOption + ( long "with-haddock" + <> metavar "PATH-TO-HADDOCK" + <> help "Use haddock found at PATH-TO-HADDOCK" + <> hide + )) + <*> optionalFirst (absFileOption + ( long "with-happy" + <> metavar "PATH-TO-HAPPY" + <> help "Use happy found at PATH-TO-HAPPY" + <> hide + )) + <*> optionalFirst (absFileOption + ( long "with-haskell-suite" + <> metavar "PATH-TO-HASKELL-SUITE" + <> help "Use haskell-suite found at PATH-TO-HASKELL-SUITE" + <> hide + )) + <*> optionalFirst (absFileOption + ( long "with-haskell-suite-pkg" + <> metavar "PATH-TO-HASKELL-SUITE-PKG" + <> help "Use haskell-suite-pkg found at PATH-TO-HASKELL-SUITE-PKG" + <> hide + )) + <*> optionalFirst (absFileOption + ( long "with-hmake" + <> metavar "PATH-TO-HMAKE" + <> help "Use hmake found at PATH-TO-HMAKE" + <> hide + )) + <*> optionalFirst (absFileOption + ( long "with-hpc" + <> metavar "PATH-TO-HPC" + <> help "Use hpc found at PATH-TO-HPC" + <> hide + )) + <*> optionalFirst (absFileOption + ( long "with-hsc2hs" + <> metavar "PATH-TO-HSC2HS" + <> help "Use hsc2hs found at PATH-TO-HSC2HS" + <> hide + )) + <*> optionalFirst (absFileOption + ( long "with-hscolour" + <> metavar "PATH-TO-HSCOLOUR" + <> help "Use hscolour found at PATH-TO-HSCOLOUR" + <> hide + )) + <*> optionalFirst (absFileOption + ( long "with-jhc" + <> metavar "PATH-TO-JHC" + <> help "Use jhc found at PATH-TO-JHC" + <> hide + )) + <*> optionalFirst (absFileOption + ( long "with-ld" + <> metavar "PATH-TO-LD" + <> help "Use ld found at PATH-TO-LD" + <> hide + )) + <*> optionalFirst (absFileOption + ( long "with-lhc" + <> metavar "PATH-TO-LHC" + <> help "Use lhc found at PATH-TO-LHC" + <> hide + )) + <*> optionalFirst (absFileOption + ( long "with-lhc-pkg" + <> metavar "PATH-TO-LHC-PKG" + <> help "Use lhc-pkg found at PATH-TO-LHC-PKG" + <> hide + )) + <*> optionalFirst (absFileOption + ( long "with-pkg-config" + <> metavar "PATH-TO-PKG-CONFIG" + <> help "Use pkg-config found at PATH-TO-PKG-CONFIG" + <> hide + )) + <*> optionalFirst (absFileOption + ( long "with-strip" + <> metavar "PATH-TO-STRIP" + <> help "Use strip found at PATH-TO-STRIP" + <> hide + )) + <*> optionalFirst (absFileOption + ( long "with-tar" + <> metavar "PATH-TO-TAR" + <> help "Use tar found at PATH-TO-TAR" + <> hide + )) + <*> optionalFirst (absFileOption + ( long "with-uhc" + <> metavar "PATH-TO-UHC" + <> help "Use uhc found at PATH-TO-UHC" + <> hide + )) + <*> many (textOption + ( long "alex-option" + <> metavar "ALEX-OPTIONS" + <> help "Pass ALEX-OPTIONS to the alex" + <> hide + )) + <*> many (textOption + ( long "ar-option" + <> metavar "AR-OPTIONS" + <> help "Pass AR-OPTIONS to the ar" + <> hide + )) + <*> many (textOption + ( long "c2hs-option" + <> metavar "C2HS-OPTIONS" + <> help "Pass C2HS-OPTIONS to the c2hs" + <> hide + )) + <*> many (textOption + ( long "cpphs-option" + <> metavar "CPPHS-OPTIONS" + <> help "Pass CPPHS-OPTIONS to the cpphs" + <> hide + )) + <*> many (textOption + ( long "gcc-option" + <> metavar "GCC-OPTIONS" + <> help "Pass GCC-OPTIONS to the gcc" + <> hide + )) + <*> many (textOption + ( long "ghc-option" + <> metavar "GHC-OPTIONS" + <> help "Pass GHC-OPTIONS to the ghc" + <> hide + )) + <*> many (textOption + ( long "ghc-pkg-option" + <> metavar "GHC-PKG-OPTIONS" + <> help "Pass GHC-PKG-OPTIONS to the ghc-pkg" + <> hide + )) + <*> many (textOption + ( long "ghcjs-option" + <> metavar "GHCJS-OPTIONS" + <> help "Pass GHCJS-OPTIONS to the ghcjs" + <> hide + )) + <*> many (textOption + ( long "ghcjs-pkg-option" + <> metavar "GHCJS-PKG-OPTIONS" + <> help "Pass GHCJS-PKG-OPTIONS to the ghcjs-pkg" + <> hide + )) + <*> many (textOption + ( long "greencard-option" + <> metavar "GREENCARD-OPTIONS" + <> help "Pass GREENCARD-OPTIONS to the greencard" + <> hide + )) + <*> many (textOption + ( long "haddock-option" + <> metavar "HADDOCK-OPTIONS" + <> help "Pass HADDOCK-OPTIONS to the haddock" + <> hide + )) + <*> many (textOption + ( long "happy-option" + <> metavar "HAPPY-OPTIONS" + <> help "Pass HAPPY-OPTIONS to the happy" + <> hide + )) + <*> many (textOption + ( long "haskell-suite-option" + <> metavar "HASKELL-SUITE-OPTIONS" + <> help "Pass HASKELL-SUITE-OPTIONS to the haskell-suite" + <> hide + )) + <*> many (textOption + ( long "haskell-suite-pkg-option" + <> metavar "HASKELL-SUITE-PKG-OPTIONS" + <> help "Pass HASKELL-SUITE-PKG-OPTIONS to the haskell-suite-pkg" + <> hide + )) + <*> many (textOption + ( long "hmake-option" + <> metavar "HMAKE-OPTIONS" + <> help "Pass HMAKE-OPTIONS to the hmake" + <> hide + )) + <*> many (textOption + ( long "hpc-option" + <> metavar "HPC-OPTIONS" + <> help "Pass HPC-OPTIONS to the hpc" + <> hide + )) + <*> many (textOption + ( long "hsc2hs-option" + <> metavar "HSC2HS-OPTIONS" + <> help "Pass HSC2HS-OPTIONS to the hsc2hs" + <> hide + )) + <*> many (textOption + ( long "hscolour-option" + <> metavar "HSCOLOUR-OPTIONS" + <> help "Pass HSCOLOUR-OPTIONS to the hscolour" + <> hide + )) + <*> many (textOption + ( long "jhc-option" + <> metavar "JHC-OPTIONS" + <> help "Pass JHC-OPTIONS to the jhc" + <> hide + )) + <*> many (textOption + ( long "ld-option" + <> metavar "LD-OPTIONS" + <> help "Pass LD-OPTIONS to the ld" + <> hide + )) + <*> many (textOption + ( long "lhc-option" + <> metavar "LHC-OPTIONS" + <> help "Pass LHC-OPTIONS to the lhc" + <> hide + )) + <*> many (textOption + ( long "lhc-pkg-option" + <> metavar "LHC-PKG-OPTIONS" + <> help "Pass LHC-PKG-OPTIONS to the lhc-pkg" + <> hide + )) + <*> many (textOption + ( long "pkg-config-option" + <> metavar "PKG-CONFIG-OPTIONS" + <> help "Pass PKG-CONFIG-OPTIONS to the pkg-config" + <> hide + )) + <*> many (textOption + ( long "strip-option" + <> metavar "STRIP-OPTIONS" + <> help "Pass STRIP-OPTIONS to the strip" + <> hide + )) + <*> many (textOption + ( long "tar-option" + <> metavar "TAR-OPTIONS" + <> help "Pass TAR-OPTIONS to the tar" + <> hide + )) + <*> many (textOption + ( long "uhc-option" + <> metavar "UHC-OPTIONS" + <> help "Pass UHC-OPTIONS to the uhc" + <> hide + )) <*> firstBoolFlags "skip-ghc-check" "skipping the GHC version and architecture check" diff --git a/src/Stack/Types/Build.hs b/src/Stack/Types/Build.hs index fe7af61e12..6ff47535bf 100644 --- a/src/Stack/Types/Build.hs +++ b/src/Stack/Types/Build.hs @@ -582,7 +582,58 @@ configureOptsNoDir econfig bco deps isLocal package = concat , concatMap (\x -> [compilerOptionsCabalFlag wc, T.unpack x]) (packageGhcOptions package) , map ("--extra-include-dirs=" ++) (Set.toList (configExtraIncludeDirs config)) , map ("--extra-lib-dirs=" ++) (Set.toList (configExtraLibDirs config)) - , maybe [] (\customGcc -> ["--with-gcc=" ++ toFilePath customGcc]) (configOverrideGccPath config) + , maybe [] (\customProgAlexPath -> ["--with-alex=" ++ toFilePath customProgAlexPath ]) (configProgAlexPath config) + , maybe [] (\customProgArPath -> ["--with-ar=" ++ toFilePath customProgArPath ]) (configProgArPath config) + , maybe [] (\customProgC2hsPath -> ["--with-c2hs=" ++ toFilePath customProgC2hsPath ]) (configProgC2hsPath config) + , maybe [] (\customProgCpphsPath -> ["--with-cpphs=" ++ toFilePath customProgCpphsPath ]) (configProgCpphsPath config) + , maybe [] (\customProgGccPath -> ["--with-gcc=" ++ toFilePath customProgGccPath ]) (configProgGccPath config) + , maybe [] (\customProgGhcPath -> ["--with-ghc=" ++ toFilePath customProgGhcPath ]) (configProgGhcPath config) + , maybe [] (\customProgGhcPkgPath -> ["--with-ghc-pkg=" ++ toFilePath customProgGhcPkgPath ]) (configProgGhcPkgPath config) + , maybe [] (\customProgGhcjsPath -> ["--with-ghcjs=" ++ toFilePath customProgGhcjsPath ]) (configProgGhcjsPath config) + , maybe [] (\customProgGhcjsPkgPath -> ["--with-ghcjs-pkg=" ++ toFilePath customProgGhcjsPkgPath ]) (configProgGhcjsPkgPath config) + , maybe [] (\customProgGreencardPath -> ["--with-greencard=" ++ toFilePath customProgGreencardPath ]) (configProgGreencardPath config) + , maybe [] (\customProgHaddockPath -> ["--with-haddock=" ++ toFilePath customProgHaddockPath ]) (configProgHaddockPath config) + , maybe [] (\customProgHappyPath -> ["--with-happy=" ++ toFilePath customProgHappyPath ]) (configProgHappyPath config) + , maybe [] (\customProgHaskellSuitePath -> ["--with-haskell-suite=" ++ toFilePath customProgHaskellSuitePath ]) (configProgHaskellSuitePath config) + , maybe [] (\customProgHaskellSuitePkgPath -> ["--with-haskell-suite-pkg=" ++ toFilePath customProgHaskellSuitePkgPath ]) (configProgHaskellSuitePkgPath config) + , maybe [] (\customProgHmakePath -> ["--with-hmake=" ++ toFilePath customProgHmakePath ]) (configProgHmakePath config) + , maybe [] (\customProgHpcPath -> ["--with-hpc=" ++ toFilePath customProgHpcPath ]) (configProgHpcPath config) + , maybe [] (\customProgHsc2hsPath -> ["--with-hsc2hs=" ++ toFilePath customProgHsc2hsPath ]) (configProgHsc2hsPath config) + , maybe [] (\customProgHscolourPath -> ["--with-hscolour=" ++ toFilePath customProgHscolourPath ]) (configProgHscolourPath config) + , maybe [] (\customProgJhcPath -> ["--with-jhc=" ++ toFilePath customProgJhcPath ]) (configProgJhcPath config) + , maybe [] (\customProgLdPath -> ["--with-ld=" ++ toFilePath customProgLdPath ]) (configProgLdPath config) + , maybe [] (\customProgLhcPath -> ["--with-lhc=" ++ toFilePath customProgLhcPath ]) (configProgLhcPath config) + , maybe [] (\customProgLhcPkgPath -> ["--with-lhc-pkg=" ++ toFilePath customProgLhcPkgPath ]) (configProgLhcPkgPath config) + , maybe [] (\customProgPkgConfigPath -> ["--with-pkg-config=" ++ toFilePath customProgPkgConfigPath ]) (configProgPkgConfigPath config) + , maybe [] (\customProgStripPath -> ["--with-strip=" ++ toFilePath customProgStripPath ]) (configProgStripPath config) + , maybe [] (\customProgTarPath -> ["--with-tar=" ++ toFilePath customProgTarPath ]) (configProgTarPath config) + , maybe [] (\customProgUhcPath -> ["--with-uhc=" ++ toFilePath customProgUhcPath ]) (configProgUhcPath config) + , map (("--alex-option=" ++) . T.unpack) (configProgAlexOptions config) + , map (("--ar-option=" ++) . T.unpack) (configProgArOptions config) + , map (("--c2hs-option=" ++) . T.unpack) (configProgC2hsOptions config) + , map (("--cpphs-option=" ++) . T.unpack) (configProgCpphsOptions config) + , map (("--gcc-option=" ++) . T.unpack) (configProgGccOptions config) + , map (("--ghc-option=" ++) . T.unpack) (configProgGhcOptions config) + , map (("--ghc-pkg-option=" ++) . T.unpack) (configProgGhcPkgOptions config) + , map (("--ghcjs-option=" ++) . T.unpack) (configProgGhcjsOptions config) + , map (("--ghcjs-pkg-option=" ++) . T.unpack) (configProgGhcjsPkgOptions config) + , map (("--greencard-option=" ++) . T.unpack) (configProgGreencardOptions config) + , map (("--haddock-option=" ++) . T.unpack) (configProgHaddockOptions config) + , map (("--happy-option=" ++) . T.unpack) (configProgHappyOptions config) + , map (("--haskell-suite-option=" ++) . T.unpack) (configProgHaskellSuiteOptions config) + , map (("--haskell-suite-pkg-option=" ++) . T.unpack) (configProgHaskellSuitePkgOptions config) + , map (("--hmake-option=" ++) . T.unpack) (configProgHmakeOptions config) + , map (("--hpc-option=" ++) . T.unpack) (configProgHpcOptions config) + , map (("--hsc2hs-option=" ++) . T.unpack) (configProgHsc2hsOptions config) + , map (("--hscolour-option=" ++) . T.unpack) (configProgHscolourOptions config) + , map (("--jhc-option=" ++) . T.unpack) (configProgJhcOptions config) + , map (("--ld-option=" ++) . T.unpack) (configProgLdOptions config) + , map (("--lhc-option=" ++) . T.unpack) (configProgLhcOptions config) + , map (("--lhc-pkg-option=" ++) . T.unpack) (configProgLhcPkgOptions config) + , map (("--pkg-config-option=" ++) . T.unpack) (configProgPkgConfigOptions config) + , map (("--strip-option=" ++) . T.unpack) (configProgStripOptions config) + , map (("--tar-option=" ++) . T.unpack) (configProgTarOptions config) + , map (("--uhc-option=" ++) . T.unpack) (configProgUhcOptions config) , ["--ghcjs" | wc == Ghcjs] , ["--exact-configuration" | useExactConf] ] diff --git a/src/Stack/Types/Config.hs b/src/Stack/Types/Config.hs index b9200c5e32..d783def4dd 100644 --- a/src/Stack/Types/Config.hs +++ b/src/Stack/Types/Config.hs @@ -324,8 +324,58 @@ data Config = -- ^ Require a version of stack within this range. ,configJobs :: !Int -- ^ How many concurrent jobs to run, defaults to number of capabilities - ,configOverrideGccPath :: !(Maybe (Path Abs File)) - -- ^ Optional gcc override path + ,configProgAlexPath :: !(Maybe (Path Abs File)) + ,configProgArPath :: !(Maybe (Path Abs File)) + ,configProgC2hsPath :: !(Maybe (Path Abs File)) + ,configProgCpphsPath :: !(Maybe (Path Abs File)) + ,configProgGccPath :: !(Maybe (Path Abs File)) + ,configProgGhcPath :: !(Maybe (Path Abs File)) + ,configProgGhcPkgPath :: !(Maybe (Path Abs File)) + ,configProgGhcjsPath :: !(Maybe (Path Abs File)) + ,configProgGhcjsPkgPath :: !(Maybe (Path Abs File)) + ,configProgGreencardPath :: !(Maybe (Path Abs File)) + ,configProgHaddockPath :: !(Maybe (Path Abs File)) + ,configProgHappyPath :: !(Maybe (Path Abs File)) + ,configProgHaskellSuitePath :: !(Maybe (Path Abs File)) + ,configProgHaskellSuitePkgPath :: !(Maybe (Path Abs File)) + ,configProgHmakePath :: !(Maybe (Path Abs File)) + ,configProgHpcPath :: !(Maybe (Path Abs File)) + ,configProgHsc2hsPath :: !(Maybe (Path Abs File)) + ,configProgHscolourPath :: !(Maybe (Path Abs File)) + ,configProgJhcPath :: !(Maybe (Path Abs File)) + ,configProgLdPath :: !(Maybe (Path Abs File)) + ,configProgLhcPath :: !(Maybe (Path Abs File)) + ,configProgLhcPkgPath :: !(Maybe (Path Abs File)) + ,configProgPkgConfigPath :: !(Maybe (Path Abs File)) + ,configProgStripPath :: !(Maybe (Path Abs File)) + ,configProgTarPath :: !(Maybe (Path Abs File)) + ,configProgUhcPath :: !(Maybe (Path Abs File)) + ,configProgAlexOptions :: ![Text] + ,configProgArOptions :: ![Text] + ,configProgC2hsOptions :: ![Text] + ,configProgCpphsOptions :: ![Text] + ,configProgGccOptions :: ![Text] + ,configProgGhcOptions :: ![Text] + ,configProgGhcPkgOptions :: ![Text] + ,configProgGhcjsOptions :: ![Text] + ,configProgGhcjsPkgOptions :: ![Text] + ,configProgGreencardOptions :: ![Text] + ,configProgHaddockOptions :: ![Text] + ,configProgHappyOptions :: ![Text] + ,configProgHaskellSuiteOptions :: ![Text] + ,configProgHaskellSuitePkgOptions :: ![Text] + ,configProgHmakeOptions :: ![Text] + ,configProgHpcOptions :: ![Text] + ,configProgHsc2hsOptions :: ![Text] + ,configProgHscolourOptions :: ![Text] + ,configProgJhcOptions :: ![Text] + ,configProgLdOptions :: ![Text] + ,configProgLhcOptions :: ![Text] + ,configProgLhcPkgOptions :: ![Text] + ,configProgPkgConfigOptions :: ![Text] + ,configProgStripOptions :: ![Text] + ,configProgTarOptions :: ![Text] + ,configProgUhcOptions :: ![Text] ,configExtraIncludeDirs :: !(Set FilePath) -- ^ --extra-include-dirs arguments ,configExtraLibDirs :: !(Set FilePath) @@ -747,8 +797,58 @@ data ConfigMonoid = -- ^ See: 'configExtraIncludeDirs' ,configMonoidExtraLibDirs :: !(Set FilePath) -- ^ See: 'configExtraLibDirs' - , configMonoidOverrideGccPath :: !(First (Path Abs File)) - -- ^ Allow users to override the path to gcc + ,configMonoidProgAlexPath :: !(First (Path Abs File)) + ,configMonoidProgArPath :: !(First (Path Abs File)) + ,configMonoidProgC2hsPath :: !(First (Path Abs File)) + ,configMonoidProgCpphsPath :: !(First (Path Abs File)) + ,configMonoidProgGccPath :: !(First (Path Abs File)) + ,configMonoidProgGhcPath :: !(First (Path Abs File)) + ,configMonoidProgGhcPkgPath :: !(First (Path Abs File)) + ,configMonoidProgGhcjsPath :: !(First (Path Abs File)) + ,configMonoidProgGhcjsPkgPath :: !(First (Path Abs File)) + ,configMonoidProgGreencardPath :: !(First (Path Abs File)) + ,configMonoidProgHaddockPath :: !(First (Path Abs File)) + ,configMonoidProgHappyPath :: !(First (Path Abs File)) + ,configMonoidProgHaskellSuitePath :: !(First (Path Abs File)) + ,configMonoidProgHaskellSuitePkgPath :: !(First (Path Abs File)) + ,configMonoidProgHmakePath :: !(First (Path Abs File)) + ,configMonoidProgHpcPath :: !(First (Path Abs File)) + ,configMonoidProgHsc2hsPath :: !(First (Path Abs File)) + ,configMonoidProgHscolourPath :: !(First (Path Abs File)) + ,configMonoidProgJhcPath :: !(First (Path Abs File)) + ,configMonoidProgLdPath :: !(First (Path Abs File)) + ,configMonoidProgLhcPath :: !(First (Path Abs File)) + ,configMonoidProgLhcPkgPath :: !(First (Path Abs File)) + ,configMonoidProgPkgConfigPath :: !(First (Path Abs File)) + ,configMonoidProgStripPath :: !(First (Path Abs File)) + ,configMonoidProgTarPath :: !(First (Path Abs File)) + ,configMonoidProgUhcPath :: !(First (Path Abs File)) + ,configMonoidProgAlexOptions :: ![Text] + ,configMonoidProgArOptions :: ![Text] + ,configMonoidProgC2hsOptions :: ![Text] + ,configMonoidProgCpphsOptions :: ![Text] + ,configMonoidProgGccOptions :: ![Text] + ,configMonoidProgGhcOptions :: ![Text] + ,configMonoidProgGhcPkgOptions :: ![Text] + ,configMonoidProgGhcjsOptions :: ![Text] + ,configMonoidProgGhcjsPkgOptions :: ![Text] + ,configMonoidProgGreencardOptions :: ![Text] + ,configMonoidProgHaddockOptions :: ![Text] + ,configMonoidProgHappyOptions :: ![Text] + ,configMonoidProgHaskellSuiteOptions :: ![Text] + ,configMonoidProgHaskellSuitePkgOptions :: ![Text] + ,configMonoidProgHmakeOptions :: ![Text] + ,configMonoidProgHpcOptions :: ![Text] + ,configMonoidProgHsc2hsOptions :: ![Text] + ,configMonoidProgHscolourOptions :: ![Text] + ,configMonoidProgJhcOptions :: ![Text] + ,configMonoidProgLdOptions :: ![Text] + ,configMonoidProgLhcOptions :: ![Text] + ,configMonoidProgLhcPkgOptions :: ![Text] + ,configMonoidProgPkgConfigOptions :: ![Text] + ,configMonoidProgStripOptions :: ![Text] + ,configMonoidProgTarOptions :: ![Text] + ,configMonoidProgUhcOptions :: ![Text] ,configMonoidConcurrentTests :: !(First Bool) -- ^ See: 'configConcurrentTests' ,configMonoidLocalBinPath :: !(First FilePath) @@ -830,7 +930,58 @@ parseConfigMonoidObject rootDir obj = do obj ..:? configMonoidExtraIncludeDirsName ..!= Set.empty configMonoidExtraLibDirs <- fmap (Set.map (toFilePath rootDir FilePath.)) $ obj ..:? configMonoidExtraLibDirsName ..!= Set.empty - configMonoidOverrideGccPath <- First <$> obj ..:? configMonoidOverrideGccPathName + configMonoidProgAlexPath <- First <$> obj ..:? configMonoidProgAlexPathName + configMonoidProgArPath <- First <$> obj ..:? configMonoidProgArPathName + configMonoidProgC2hsPath <- First <$> obj ..:? configMonoidProgC2hsPathName + configMonoidProgCpphsPath <- First <$> obj ..:? configMonoidProgCpphsPathName + configMonoidProgGccPath <- First <$> obj ..:? configMonoidProgGccPathName + configMonoidProgGhcPath <- First <$> obj ..:? configMonoidProgGhcPathName + configMonoidProgGhcPkgPath <- First <$> obj ..:? configMonoidProgGhcPkgPathName + configMonoidProgGhcjsPath <- First <$> obj ..:? configMonoidProgGhcjsPathName + configMonoidProgGhcjsPkgPath <- First <$> obj ..:? configMonoidProgGhcjsPkgPathName + configMonoidProgGreencardPath <- First <$> obj ..:? configMonoidProgGreencardPathName + configMonoidProgHaddockPath <- First <$> obj ..:? configMonoidProgHaddockPathName + configMonoidProgHappyPath <- First <$> obj ..:? configMonoidProgHappyPathName + configMonoidProgHaskellSuitePath <- First <$> obj ..:? configMonoidProgHaskellSuitePathName + configMonoidProgHaskellSuitePkgPath <- First <$> obj ..:? configMonoidProgHaskellSuitePkgPathName + configMonoidProgHmakePath <- First <$> obj ..:? configMonoidProgHmakePathName + configMonoidProgHpcPath <- First <$> obj ..:? configMonoidProgHpcPathName + configMonoidProgHsc2hsPath <- First <$> obj ..:? configMonoidProgHsc2hsPathName + configMonoidProgHscolourPath <- First <$> obj ..:? configMonoidProgHscolourPathName + configMonoidProgJhcPath <- First <$> obj ..:? configMonoidProgJhcPathName + configMonoidProgLdPath <- First <$> obj ..:? configMonoidProgLdPathName + configMonoidProgLhcPath <- First <$> obj ..:? configMonoidProgLhcPathName + configMonoidProgLhcPkgPath <- First <$> obj ..:? configMonoidProgLhcPkgPathName + configMonoidProgPkgConfigPath <- First <$> obj ..:? configMonoidProgPkgConfigPathName + configMonoidProgStripPath <- First <$> obj ..:? configMonoidProgStripPathName + configMonoidProgTarPath <- First <$> obj ..:? configMonoidProgTarPathName + configMonoidProgUhcPath <- First <$> obj ..:? configMonoidProgUhcPathName + configMonoidProgAlexOptions <- fromMaybe [] <$> obj ..:? configMonoidProgAlexOptionsName + configMonoidProgArOptions <- fromMaybe [] <$> obj ..:? configMonoidProgArOptionsName + configMonoidProgC2hsOptions <- fromMaybe [] <$> obj ..:? configMonoidProgC2hsOptionsName + configMonoidProgCpphsOptions <- fromMaybe [] <$> obj ..:? configMonoidProgCpphsOptionsName + configMonoidProgGccOptions <- fromMaybe [] <$> obj ..:? configMonoidProgGccOptionsName + configMonoidProgGhcOptions <- fromMaybe [] <$> obj ..:? configMonoidProgGhcOptionsName + configMonoidProgGhcPkgOptions <- fromMaybe [] <$> obj ..:? configMonoidProgGhcPkgOptionsName + configMonoidProgGhcjsOptions <- fromMaybe [] <$> obj ..:? configMonoidProgGhcjsOptionsName + configMonoidProgGhcjsPkgOptions <- fromMaybe [] <$> obj ..:? configMonoidProgGhcjsPkgOptionsName + configMonoidProgGreencardOptions <- fromMaybe [] <$> obj ..:? configMonoidProgGreencardOptionsName + configMonoidProgHaddockOptions <- fromMaybe [] <$> obj ..:? configMonoidProgHaddockOptionsName + configMonoidProgHappyOptions <- fromMaybe [] <$> obj ..:? configMonoidProgHappyOptionsName + configMonoidProgHaskellSuiteOptions <- fromMaybe [] <$> obj ..:? configMonoidProgHaskellSuiteOptionsName + configMonoidProgHaskellSuitePkgOptions <- fromMaybe [] <$> obj ..:? configMonoidProgHaskellSuitePkgOptionsName + configMonoidProgHmakeOptions <- fromMaybe [] <$> obj ..:? configMonoidProgHmakeOptionsName + configMonoidProgHpcOptions <- fromMaybe [] <$> obj ..:? configMonoidProgHpcOptionsName + configMonoidProgHsc2hsOptions <- fromMaybe [] <$> obj ..:? configMonoidProgHsc2hsOptionsName + configMonoidProgHscolourOptions <- fromMaybe [] <$> obj ..:? configMonoidProgHscolourOptionsName + configMonoidProgJhcOptions <- fromMaybe [] <$> obj ..:? configMonoidProgJhcOptionsName + configMonoidProgLdOptions <- fromMaybe [] <$> obj ..:? configMonoidProgLdOptionsName + configMonoidProgLhcOptions <- fromMaybe [] <$> obj ..:? configMonoidProgLhcOptionsName + configMonoidProgLhcPkgOptions <- fromMaybe [] <$> obj ..:? configMonoidProgLhcPkgOptionsName + configMonoidProgPkgConfigOptions <- fromMaybe [] <$> obj ..:? configMonoidProgPkgConfigOptionsName + configMonoidProgStripOptions <- fromMaybe [] <$> obj ..:? configMonoidProgStripOptionsName + configMonoidProgTarOptions <- fromMaybe [] <$> obj ..:? configMonoidProgTarOptionsName + configMonoidProgUhcOptions <- fromMaybe [] <$> obj ..:? configMonoidProgUhcOptionsName configMonoidConcurrentTests <- First <$> obj ..:? configMonoidConcurrentTestsName configMonoidLocalBinPath <- First <$> obj ..:? configMonoidLocalBinPathName configMonoidImageOpts <- jsonSubWarnings (obj ..:? configMonoidImageOptsName ..!= mempty) @@ -934,8 +1085,161 @@ configMonoidExtraIncludeDirsName = "extra-include-dirs" configMonoidExtraLibDirsName :: Text configMonoidExtraLibDirsName = "extra-lib-dirs" -configMonoidOverrideGccPathName :: Text -configMonoidOverrideGccPathName = "with-gcc" +configMonoidProgAlexPathName :: Text +configMonoidProgAlexPathName = "with-alex" + +configMonoidProgAlexOptionsName :: Text +configMonoidProgAlexOptionsName = "alex-options" + +configMonoidProgArPathName :: Text +configMonoidProgArPathName = "with-ar" + +configMonoidProgArOptionsName :: Text +configMonoidProgArOptionsName = "ar-options" + +configMonoidProgC2hsPathName :: Text +configMonoidProgC2hsPathName = "with-c2hs" + +configMonoidProgC2hsOptionsName :: Text +configMonoidProgC2hsOptionsName = "c2hs-options" + +configMonoidProgCpphsPathName :: Text +configMonoidProgCpphsPathName = "with-cpphs" + +configMonoidProgCpphsOptionsName :: Text +configMonoidProgCpphsOptionsName = "cpphs-options" + +configMonoidProgGccPathName :: Text +configMonoidProgGccPathName = "with-gcc" + +configMonoidProgGccOptionsName :: Text +configMonoidProgGccOptionsName = "gcc-options" + +configMonoidProgGhcPathName :: Text +configMonoidProgGhcPathName = "with-ghc" + +configMonoidProgGhcOptionsName :: Text +configMonoidProgGhcOptionsName = "ghc-options" + +configMonoidProgGhcPkgPathName :: Text +configMonoidProgGhcPkgPathName = "ghc-with-pkg" + +configMonoidProgGhcPkgOptionsName :: Text +configMonoidProgGhcPkgOptionsName = "ghc-pkg-options" + +configMonoidProgGhcjsPathName :: Text +configMonoidProgGhcjsPathName = "with-ghcjs" + +configMonoidProgGhcjsOptionsName :: Text +configMonoidProgGhcjsOptionsName = "ghcjs-options" + +configMonoidProgGhcjsPkgPathName :: Text +configMonoidProgGhcjsPkgPathName = "ghcjs-with-pkg" + +configMonoidProgGhcjsPkgOptionsName :: Text +configMonoidProgGhcjsPkgOptionsName = "ghcjs-pkg-options" + +configMonoidProgGreencardPathName :: Text +configMonoidProgGreencardPathName = "with-greencard" + +configMonoidProgGreencardOptionsName :: Text +configMonoidProgGreencardOptionsName = "greencard-options" + +configMonoidProgHaddockPathName :: Text +configMonoidProgHaddockPathName = "with-haddock" + +configMonoidProgHaddockOptionsName :: Text +configMonoidProgHaddockOptionsName = "haddock-options" + +configMonoidProgHappyPathName :: Text +configMonoidProgHappyPathName = "with-happy" + +configMonoidProgHappyOptionsName :: Text +configMonoidProgHappyOptionsName = "happy-options" + +configMonoidProgHaskellSuitePathName :: Text +configMonoidProgHaskellSuitePathName = "haskell-with-suite" + +configMonoidProgHaskellSuiteOptionsName :: Text +configMonoidProgHaskellSuiteOptionsName = "haskell-suite-options" + +configMonoidProgHaskellSuitePkgPathName :: Text +configMonoidProgHaskellSuitePkgPathName = "haskell-suite-with-pkg" + +configMonoidProgHaskellSuitePkgOptionsName :: Text +configMonoidProgHaskellSuitePkgOptionsName = "haskell-suite-pkg-options" + +configMonoidProgHmakePathName :: Text +configMonoidProgHmakePathName = "with-hmake" + +configMonoidProgHmakeOptionsName :: Text +configMonoidProgHmakeOptionsName = "hmake-options" + +configMonoidProgHpcPathName :: Text +configMonoidProgHpcPathName = "with-hpc" + +configMonoidProgHpcOptionsName :: Text +configMonoidProgHpcOptionsName = "hpc-options" + +configMonoidProgHsc2hsPathName :: Text +configMonoidProgHsc2hsPathName = "with-hsc2hs" + +configMonoidProgHsc2hsOptionsName :: Text +configMonoidProgHsc2hsOptionsName = "hsc2hs-options" + +configMonoidProgHscolourPathName :: Text +configMonoidProgHscolourPathName = "with-hscolour" + +configMonoidProgHscolourOptionsName :: Text +configMonoidProgHscolourOptionsName = "hscolour-options" + +configMonoidProgJhcPathName :: Text +configMonoidProgJhcPathName = "with-jhc" + +configMonoidProgJhcOptionsName :: Text +configMonoidProgJhcOptionsName = "jhc-options" + +configMonoidProgLdPathName :: Text +configMonoidProgLdPathName = "with-ld" + +configMonoidProgLdOptionsName :: Text +configMonoidProgLdOptionsName = "ld-options" + +configMonoidProgLhcPathName :: Text +configMonoidProgLhcPathName = "with-lhc" + +configMonoidProgLhcOptionsName :: Text +configMonoidProgLhcOptionsName = "lhc-options" + +configMonoidProgLhcPkgPathName :: Text +configMonoidProgLhcPkgPathName = "lhc-with-pkg" + +configMonoidProgLhcPkgOptionsName :: Text +configMonoidProgLhcPkgOptionsName = "lhc-pkg-options" + +configMonoidProgPkgConfigPathName :: Text +configMonoidProgPkgConfigPathName = "pkg-with-config" + +configMonoidProgPkgConfigOptionsName :: Text +configMonoidProgPkgConfigOptionsName = "pkg-config-options" + +configMonoidProgStripPathName :: Text +configMonoidProgStripPathName = "with-strip" + +configMonoidProgStripOptionsName :: Text +configMonoidProgStripOptionsName = "strip-options" + +configMonoidProgTarPathName :: Text +configMonoidProgTarPathName = "with-tar" + +configMonoidProgTarOptionsName :: Text +configMonoidProgTarOptionsName = "tar-options" + +configMonoidProgUhcPathName :: Text +configMonoidProgUhcPathName = "with-uhc" + +configMonoidProgUhcOptionsName :: Text +configMonoidProgUhcOptionsName = "uhc-options" configMonoidConcurrentTestsName :: Text configMonoidConcurrentTestsName = "concurrent-tests"