
#13237: Extend TH with addModCStub -------------------------------------+------------------------------------- Reporter: | Owner: facundo.dominguez | facundo.dominguez Type: feature request | Status: patch Priority: normal | Milestone: 8.2.1 Component: Template Haskell | Version: 8.0.1 Resolution: | Keywords: inline-c Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Phab:D3106 Wiki Page: | -------------------------------------+------------------------------------- Comment (by mboes): To clarify the context, a solution to this feature would lift a long standing usability problem for inline-c. That package generates C code, which then has to be linked with all the other object code from a project. Since GHC doesn't know about this, we have to lie to Cabal by listing the generated C file as an extra source file. But that's a very gross hack. Only meant to work around the fact that GHC has no direct support for appending arbitrary object code to the output of the current compilation unit. But in essence, what inline-c is doing is no different from what GHC already needs to do in when compiling modules with foreign exports or foreign import wrappers: it creates C stubs whose object code must be included with the rest of the object code for the module. There are now at least a dozen open source libraries that depend on inline-c, and likely many more closed source ones. But the current hack explained above causes problems: listing a generated file as a source file tends to confuse GHC's and Stack's recompilation checking. Worse, in some cases the generated C source file causes the build to fail. More details here: https://github.com/fpco/inline-c/issues/21. Being able to programmatically register C stubs in the current compilation unit would solve both problems at once. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/13237#comment:6 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler