
#8683: add "cpp program" and "cpp program options" to settings file -------------------------------------+------------------------------------ Reporter: carter | Owner: Type: feature request | Status: new Priority: normal | Milestone: 7.8.1 Component: Compiler | Version: 7.7 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: Unknown/Multiple Type of failure: None/Unknown | Difficulty: Unknown Test Case: | Blocked By: Blocking: | Related Tickets: #8439 -------------------------------------+------------------------------------ Comment (by carter): Ok, i've started digging into this, with the idea of having the settings file have the "Haskell CPP Command" and "Haskell CPP Flags" fields. the idea being that the settings file would determine the CPP and flags unless pgmp and optp are set. soo, some of the CPP stuff is welded into certain config and other steps currently eg in mk/config.mk.in {{{ # It's not easy to separate the CPP program from its flags, as # AC_PROG_CPP defines CPP as "/usr/bin/gcc -E" CPP = @CPP@ @CPPFLAGS@ # # RAWCPP_FLAGS are the flags to give to cpp (viz, gcc -E) to persuade it to # behave plausibly on Haskell sources. # # Clang in particular is a bit more annoying, so we suppress some warnings. RAWCPP_FLAGS = -undef -traditional ifeq "$(CC_CLANG_BACKEND)" "1" RAWCPP_FLAGS += -Wno-invalid-pp-token -Wno-unicode -Wno- trigraphs endif }}} which then in compiler/ghc.mk as part of the Config module has the line {{{ @echo 'cRAWCPP_FLAGS :: String'
$@ @echo 'cRAWCPP_FLAGS = "$(RAWCPP_FLAGS)"' $@ }}}
and then in compiler/main/SysTools.lhs we have {{{ let cpp_prog = gcc_prog cpp_args = Option "-E" : map Option (words cRAWCPP_FLAGS) ++ gcc_args }}} Interestingly, the -pgmP flag corresponds to {{{ sPgm_P = (cpp_prog, cpp_args), }}} and the optP flag is by default empty! {{{ sOpt_P = [] }}} so optP is meant for adding *additional* flags to cpp, but shouldn't be part of the default config, AND pgmP should be used to specify the full "cpp program and the prefix of args?" also currently it looks like cpp_args also passes in applicable gcc_args. (are there some examples of when thats used?!) theres probably some other things i'm overlooking, but thats the obvious stuff. I think I now understand enough to be able to cook up a strawman patch for this stuff, including the config time settings.in stuff, the piece that currently goes into the magic Config.hs hack that now should move into settings, and some of the dynflags / settings stuff. I'll try to hack it out tomorrow late afternoon. (though if someone beats me to it, they're welcome, i've never messed with autoconf before, though I think i can cargo cult write the correct changes there,) -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/8683#comment:2 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler