diff --git a/Cabal/Distribution/Simple/Haddock.hs b/Cabal/Distribution/Simple/Haddock.hs index 473f26553984be211d472e61f4e2ba7487eaa5b9..bd4e31dc5a40baa82f5bcd37bc21722dd88bbb60 100644 --- a/Cabal/Distribution/Simple/Haddock.hs +++ b/Cabal/Distribution/Simple/Haddock.hs @@ -466,15 +466,28 @@ renderArgs :: Verbosity -> (([String], FilePath) -> IO a) -> IO a renderArgs verbosity tmpFileOpts version comp args k = do + let haddockSupportsUTF8 = version >= Version [2,14,4] [] + haddockSupportsResponseFiles = version > Version [2,16,1] [] createDirectoryIfMissingVerbose verbosity True outputDir withTempFileEx tmpFileOpts outputDir "haddock-prologue.txt" $ \prologueFileName h -> do do - when (version >= Version [2,14,4] []) (hSetEncoding h utf8) + when haddockSupportsUTF8 (hSetEncoding h utf8) hPutStrLn h $ fromFlag $ argPrologue args hClose h let pflag = "--prologue=" ++ prologueFileName - k (pflag : renderPureArgs version comp args, result) + renderedArgs = pflag : renderPureArgs version comp args + if haddockSupportsResponseFiles + then + withTempFileEx tmpFileOpts outputDir "haddock-response.txt" $ + \responseFileName hf -> do + when haddockSupportsUTF8 (hSetEncoding hf utf8) + mapM_ (hPutStrLn hf) renderedArgs + hClose hf + let respFile = "@" ++ responseFileName + k ([respFile], result) + else + k (renderedArgs, result) where outputDir = (unDir $ argOutputDir args) result = intercalate ", "