
So did you find a bug in the current design of the clang-wrapper hack? If so it'd be better to get it fixed there rather than in the Alex/happy setup HS files. On Tuesday, November 19, 2013, Kazu Yamamoto wrote:
Hi Carter, SimonM, please read this message.
I will answer Carter's question and show a solution of my problem.
Kazu. This is exactly the problem I linked to. Could you try the proposed patches to test if they allow builds to succeed with a wrapped clang on your machine?
I installed nkpart's alex and happy with GHC/clang-wrapper. With this alex and happy, I can build GHC head with GHC/GCC42. But I cannot build GHC head with GHC/clang-wrapper.
Moreover, I can install happy and alex with GHC/clang-wrapper without nkpart's patches.
I think that your problem is how to build alex and happy with GHC/clang-wrapper. But my problem is how to compile HS files created by alex and happy with GHC/clang-wrapper.
After deep investigation, I found the source of my problem. Consider the following file created by CPP of clang or GCC:
---- # 1 "<built-inxxx>" 1 # 1 "templates/GenericTemplatexxx.hs" 2 {-# FOO #-} ----
% clang -E -undef -x assembler-with-cpp this_file generates:
---- # 1 "test" # 1 "<built-in>" 1 # 1 "test" 2 # 1 "<built-inxxx>" 1
# 1 "templates/GenericTemplatexxx.hs" 2
{-# FOO #-} ----
So, the line started with " #" cannot be treated by GHC. This is the problem.
% clang -E -undef -x c this_file generates:
---- # 1 "test" # 1 "<built-in>" 1 # 1 "<built-in>" 3
# 1 "<command line>" 1 # 1 "<built-in>" 2 # 1 "test" 2 # 1 "<built-inxxx>" 1 # 1 "templates/GenericTemplatexxx.hs" 2 {-# FOO ----
And an error occurs because of " #-}".
So, replacing "-x c" with "-x assembler-with-cpp" in a wrapper is a MUST. And HS files generated by alex and happy should not include lines started with "# ".
My solution so far is adding "-optP-P" to alex and happy to not generate line markers. An example patch to alex is attached.
I can build GHC head with GHC/clang-wrapper and with alex and happy with this hack.
--Kazu
diff --git a/Setup.lhs b/Setup.lhs index 302a3f0..6ab62d5 100644 --- a/Setup.lhs +++ b/Setup.lhs @@ -44,7 +44,7 @@ myPostBuild _ flags _ lbi = do runProgram p = rawSystemProgramConf verbosity p (withPrograms lbi) cpp_template src dst opts = do let tmp = dst ++ ".tmp" - runProgram ghcProgram (["-o", tmp, "-E", "-cpp", "templates" > src] ++ opts) + runProgram ghcProgram (["-o", tmp, "-E", "-cpp", "-optP-P", "templates" > src] ++ opts) writeFile dst . unlines . map mungeLinePragma . lines =<< readFile tmp removeFile tmp
_______________________________________________ ghc-devs mailing list ghc-devs@haskell.org javascript:; http://www.haskell.org/mailman/listinfo/ghc-devs