[Hackage] #504: executables with a C main function

#504: executables with a C main function ------------------------------+--------------------------------------------- Reporter: duncan | Owner: Type: enhancement | Status: new Priority: normal | Milestone: Component: Cabal library | Version: 1.6.0.1 Severity: normal | Keywords: Difficulty: easy (<4 hours) | Ghcversion: Platform: | ------------------------------+--------------------------------------------- We would like to be able to do: {{{ executable blah main-is: main.c }}} Either for pure C programs or mixed C/Haskell programs with main in the C code rather than Haskell code. == Workaround == Until this is implemented one can use a main in Haskell that calls out to the C main function. For example: `main.c` {{{ int real_main () { return 42; } }}} `Main.hs` {{{ import System.Exit import Foreign.C main = real_main >>= exitWith . ExitFailure . fromIntegral foreign import ccall "real_main" real_main :: IO CInt }}} `c-main.cabal` {{{ name: c-main version: 0.0 build-type: Simple cabal-version: >= 1.2 extra-source-files: main.h executable c-main main-is: Main.hs c-sources: main.c includes: main.h extensions: ForeignFunctionInterface build-depends: base }}} == Implementation notes == At the moment Cabal's "Simple" build system requires `main-is` to specify a `.hs` or `.lhs` file (though it does allow that to be generated by a pre-processor). If we lift that restriction the first thing to go wrong will be that `ghc --make` does not work with `-no-hs-main`. We will have to do the build and link steps separately (which is probably a good thing anyway). We would use `ghc --make` to compile all Haskell modules to `.o` files and then invoke `ghc` in batch mode passing it all the `.o` files (from Haskell and C modules) and `-package` flags. If we're using a C main then we'd do the link step with `-no-hs-main`. -- Ticket URL: http://hackage.haskell.org/trac/hackage/ticket/504 Hackage http://haskell.org/cabal/ Hackage: Cabal and related projects

#504: executables with a C main function ----------------------------+----------------------------------------------- Reporter: duncan | Owner: povman Type: enhancement | Status: new Priority: normal | Milestone: Component: Cabal library | Version: 1.6.0.1 Severity: normal | Resolution: Keywords: | Difficulty: easy (<4 hours) Ghcversion: | Platform: ----------------------------+----------------------------------------------- Changes (by povman): * owner: => povman -- Ticket URL: http://hackage.haskell.org/trac/hackage/ticket/504#comment:1 Hackage http://haskell.org/cabal/ Hackage: Cabal and related projects

#504: executables with a C main function ----------------------------+----------------------------------------------- Reporter: duncan | Owner: Type: enhancement | Status: new Priority: normal | Milestone: Component: Cabal library | Version: 1.6.0.1 Severity: normal | Resolution: Keywords: | Difficulty: easy (<4 hours) Ghcversion: | Platform: ----------------------------+----------------------------------------------- Changes (by povman): * owner: povman => -- Ticket URL: http://hackage.haskell.org/trac/hackage/ticket/504#comment:2 Hackage http://haskell.org/cabal/ Hackage: Cabal and related projects
participants (1)
-
Hackage