X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Fmain%2FSysTools.lhs;h=f5812f478f364d5c7d62609e834a05b7540e8440;hb=5109078b26bdbf226acdf1b0fe7c2861a7114571;hp=fe660ec37d9986f4fb52b10888c6eeeac929deeb;hpb=d225ee32742486a136a5d39606c24a6f9ec5c2b9;p=ghc-hetmet.git diff --git a/compiler/main/SysTools.lhs b/compiler/main/SysTools.lhs index fe660ec..f5812f4 100644 --- a/compiler/main/SysTools.lhs +++ b/compiler/main/SysTools.lhs @@ -7,6 +7,13 @@ ----------------------------------------------------------------------------- \begin{code} +{-# OPTIONS -w #-} +-- The above warning supression flag is a temporary kludge. +-- While working on this module you are encouraged to remove it and fix +-- any warnings in the module. See +-- http://hackage.haskell.org/trac/ghc/wiki/Commentary/CodingStyle#Warnings +-- for details + module SysTools ( -- Initialisation initSysTools, @@ -259,9 +266,6 @@ initSysTools mbMinusB dflags -- later on; although gcc_args are in NATIVE format, -- gcc can cope -- (see comments with declarations of global variables) - -- - -- The quotes round the -B argument are in case TopDir - -- has spaces in it perl_path | am_installed = installed_bin cGHC_PERL | otherwise = cGHC_PERL @@ -403,7 +407,9 @@ runUnlit dflags args = do runCpp :: DynFlags -> [Option] -> IO () runCpp dflags args = do let (p,args0) = pgm_P dflags - runSomething dflags "C pre-processor" p (args0 ++ args) + args1 = args0 ++ args + mb_env <- getGccEnv args1 + runSomethingFiltered dflags id "C pre-processor" p args1 mb_env runPp :: DynFlags -> [Option] -> IO () runPp dflags args = do @@ -528,12 +534,23 @@ runWindres :: DynFlags -> [Option] -> IO () runWindres dflags args = do let (gcc,gcc_args) = pgm_c dflags windres = pgm_windres dflags - runSomething dflags "Windres" windres - (Option ("--preprocessor=" ++ gcc ++ " " ++ - unwords (map showOpt gcc_args) ++ - " -E -xc -DRC_INVOKED") - : args) + mb_env <- getGccEnv gcc_args + runSomethingFiltered dflags id "Windres" windres -- we must tell windres where to find gcc: it might not be on PATH + (Option ("--preprocessor=" ++ + unwords (map quote (gcc : map showOpt gcc_args ++ + ["-E", "-xc", "-DRC_INVOKED"]))) + -- -- use-temp-file is required for windres to interpret the + -- quoting in the preprocessor arg above correctly. Without + -- this, windres calls the preprocessor with popen, which gets + -- the quoting wrong (discovered by experimentation and + -- reading the windres sources). See #1828. + : Option "--use-temp-file" + : args) + -- we must use the PATH workaround here too, since windres invokes gcc + mb_env + where + quote x = '\"' : x ++ "\"" touch :: DynFlags -> String -> String -> IO () touch dflags purpose arg = @@ -846,7 +863,6 @@ data BuildMessage #endif showOpt (FileOption pre f) = pre ++ platformPath f -showOpt (Option "") = "" showOpt (Option s) = s traceCmd :: DynFlags -> String -> String -> IO () -> IO ()