diff --git a/Distribution/PreProcess.hs b/Distribution/PreProcess.hs
index bab8ed9803e734a1d630a79514095e4f0e05358c..75464aef57bc4a5f189c5bcedd70c7145b7c2313 100644
--- a/Distribution/PreProcess.hs
+++ b/Distribution/PreProcess.hs
@@ -232,7 +232,12 @@ ppCpp' inputArgs bi lbi =
 ppHsc2hs :: BuildInfo -> LocalBuildInfo -> PreProcessor
 ppHsc2hs bi lbi
     = maybe (ppNone "hsc2hs") pp (withHsc2hs lbi)
-  where pp n = standardPP n (cppOptions bi lbi)
+  where pp n = standardPP n (hcDefines (compiler lbi)
+                         ++ ["-I" ++ dir | dir <- includeDirs bi]
+                         ++ [opt | opt@('-':c:_) <- ccOptions bi, c == 'D' || c == 'I']
+                         ++ ["--cflag=" ++ opt | opt@('-':'U':_) <- ccOptions bi]
+                         ++ ["--lflag=-L" ++ dir | dir <- extraLibDirs bi]
+                         ++ ["--lflag=-l" ++ lib | lib <- extraLibs bi])
 
 ppC2hs :: BuildInfo -> LocalBuildInfo -> PreProcessor
 ppC2hs bi lbi