From 793cdc6ebf63b8740ffc56e2e6af22621222f9b7 Mon Sep 17 00:00:00 2001 From: Mikhail Glushenkov <mikhail.glushenkov@gmail.com> Date: Thu, 30 Aug 2018 17:30:42 +0100 Subject: [PATCH] Merge pull request #5553 from ckoparkar/master Pass command line arguments to hsc2hs using response files (cherry picked from commit f83aa4a2c9d033d82319ac3080639992da7d480d) --- Cabal/ChangeLog.md | 2 ++ Cabal/Distribution/Simple/PreProcess.hs | 27 ++++++++++++++++++++++--- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/Cabal/ChangeLog.md b/Cabal/ChangeLog.md index ad28529e25..8b9e2a30e0 100644 --- a/Cabal/ChangeLog.md +++ b/Cabal/ChangeLog.md @@ -89,6 +89,8 @@ * Foreign libraries are now linked against the threaded RTS when the 'ghc-options: -threaded' flag is used ([#5431](https://github.com/haskell/cabal/pull/5431)). + * Pass command line arguments to `hsc2hs` using response files when possible + ([#3122](https://github.com/haskell/cabal/issues/3122)). ---- diff --git a/Cabal/Distribution/Simple/PreProcess.hs b/Cabal/Distribution/Simple/PreProcess.hs index 47013ff943..4933028294 100644 --- a/Cabal/Distribution/Simple/PreProcess.hs +++ b/Cabal/Distribution/Simple/PreProcess.hs @@ -47,6 +47,7 @@ import Distribution.Simple.LocalBuildInfo import Distribution.Simple.BuildPaths import Distribution.Simple.Utils import Distribution.Simple.Program +import Distribution.Simple.Program.ResponseFile import Distribution.Simple.Test.LibV09 import Distribution.System import Distribution.Text @@ -392,7 +393,28 @@ ppHsc2hs bi lbi clbi = platformIndependent = False, runPreProcessor = mkSimplePreProcessor $ \inFile outFile verbosity -> do (gccProg, _) <- requireProgram verbosity gccProgram (withPrograms lbi) - runDbProgram verbosity hsc2hsProgram (withPrograms lbi) $ + (hsc2hsProg, hsc2hsVersion, _) <- requireProgramVersion verbosity + hsc2hsProgram anyVersion (withPrograms lbi) + -- See Trac #13896 and https://github.com/haskell/cabal/issues/3122. + let hsc2hsSupportsResponseFiles = hsc2hsVersion >= mkVersion [0,68,4] + pureArgs = genPureArgs gccProg inFile outFile + if hsc2hsSupportsResponseFiles + then withResponseFile + verbosity + defaultTempFileOptions + (takeDirectory outFile) + "hsc2hs-response.txt" + Nothing + pureArgs + (\responseFileName -> + runProgram verbosity hsc2hsProg ["@"++ responseFileName]) + else runProgram verbosity hsc2hsProg pureArgs + } + where + -- Returns a list of command line arguments that can either be passed + -- directly, or via a response file. + genPureArgs :: ConfiguredProgram -> String -> String -> [String] + genPureArgs gccProg inFile outFile = [ "--cc=" ++ programPath gccProg , "--ld=" ++ programPath gccProg ] @@ -456,8 +478,7 @@ ppHsc2hs bi lbi clbi = ++ [ "-l" ++ opt | opt <- Installed.extraLibraries pkg ] ++ [ opt | opt <- Installed.ldOptions pkg ] ] ++ ["-o", outFile, inFile] - } - where + hacked_index = packageHacks (installedPkgs lbi) -- Look only at the dependencies of the current component -- being built! This relies on 'installedPkgs' maintaining -- GitLab