Re: [Haskell-cafe] c2hs and cabal?

On Tue, Nov 28, 2006 at 11:11:30 +0000, Duncan Coutts wrote:
On Tue, 2006-11-28 at 10:56 +0000, Magnus Therning wrote:
On Tue, Nov 28, 2006 at 00:33:42 +0000, Duncan Coutts wrote:
On Mon, 2006-11-27 at 22:26 +0000, Magnus Therning wrote:
Can I use cabal to build packages that incorporates C libraries and FFI Haskell created using c2hs?
Yes you can. Cabal understands a bit about .chs files. I think all you need to do is specify the module in the exposed-modules or other-modules and Cabal will find the .chs file and try to build a .hs file from it.
I'm still having some problems though :-( I thought I'd start with a minimal, rather silly, test to see if I can get Cabal to do what I want. I've stuck what I have at http://www.therning.org/magnus_files/cnh.tar.gz
It fails to build for me with the following error:
Preprocessing executables for cnh-0.1... Building cnh-0.1... [1 of 2] Compiling Foo ( src/Foo.hs, dist/build/cnh/cnh-tmp/Foo.o ) src/Foo.chs:6:8: parse error on input `import'
I tried using '-v5' but it didn't really offer anymore insight for a novice like me :(
Check the generated Foo.hs file to see if it looks obviously bogus.
Can't really see anything obviously bogus about the following: % cat Foo.chs module Foo where #include "foo.h" fooOne i = {# call foo1 #} i % cat Foo.hs -- GENERATED by C->Haskell Compiler, version 0.14.5 Travelling Lightly, 12 Dec 2005 (Haskell) -- Edit the ORIGNAL .chs file instead! {-# LINE 1 "src/Foo.chs" #-}module Foo where fooOne i = foo1 i foreign import ccall safe "src/Foo.h foo1" foo1 :: (CInt -> (IO CInt)) Or am I missing something? /M -- Magnus Therning (OpenPGP: 0xAB4DFBA4) magnus@therning.org Jabber: magnus.therning@gmail.com http://therning.org/magnus Software is not manufactured, it is something you write and publish. Keep Europe free from software patents, we do not want censorship by patent law on written works. "There are of course many problems connected with life, of which some of the most popular are `Why are people born?' `Why do they die?' `Why do they spend so much of the intervening time wearing digital watches?'" -- The Book.

On Tue, Nov 28, 2006 at 12:00:50 +0000, Magnus Therning wrote: [..]
Can't really see anything obviously bogus about the following:
% cat Foo.chs module Foo where
#include "foo.h"
fooOne i = {# call foo1 #} i
I solved my problem, but thought I'd send a mail to the list for anyone who's struggling as much as me (if that's even possible). The problem was that GHC requires a commandline argument telling it to deal with FFI. Including the following in Foo.chs resulted in successful compilation: {-# OPTIONS_GHC -fffi #-} /M -- Magnus Therning (OpenPGP: 0xAB4DFBA4) magnus@therning.org Jabber: magnus.therning@gmail.com http://therning.org/magnus Software is not manufactured, it is something you write and publish. Keep Europe free from software patents, we do not want censorship by patent law on written works. Good powers of observation are frequently called "cynicism" by those that don't have them.

On Tue, 2006-11-28 at 17:24 +0000, Magnus Therning wrote:
On Tue, Nov 28, 2006 at 12:00:50 +0000, Magnus Therning wrote: [..]
Can't really see anything obviously bogus about the following:
% cat Foo.chs module Foo where
#include "foo.h"
fooOne i = {# call foo1 #} i
I solved my problem, but thought I'd send a mail to the list for anyone who's struggling as much as me (if that's even possible).
The problem was that GHC requires a commandline argument telling it to deal with FFI. Including the following in Foo.chs resulted in successful compilation:
{-# OPTIONS_GHC -fffi #-}
Or the simpler way is to include in your .cabal file: extensions: ForeignFunctionInterface That then applies to every module in the lib and has the advantage of being portable between compilers. Duncan

On Wed, Nov 29, 2006 at 03:38:24 +0000, Duncan Coutts wrote:
On Tue, 2006-11-28 at 17:24 +0000, Magnus Therning wrote:
On Tue, Nov 28, 2006 at 12:00:50 +0000, Magnus Therning wrote: [..]
Can't really see anything obviously bogus about the following:
% cat Foo.chs module Foo where
#include "foo.h"
fooOne i = {# call foo1 #} i
I solved my problem, but thought I'd send a mail to the list for anyone who's struggling as much as me (if that's even possible).
The problem was that GHC requires a commandline argument telling it to deal with FFI. Including the following in Foo.chs resulted in successful compilation:
{-# OPTIONS_GHC -fffi #-}
Or the simpler way is to include in your .cabal file:
extensions: ForeignFunctionInterface
That then applies to every module in the lib and has the advantage of being portable between compilers.
Ah, good point. Now, where could I have turned to find this out myself? I can't find it in the Cabal User's Guide[1]. /M [1]: http://www.haskell.org/cabal/release/latest/doc/users-guide/ -- Magnus Therning (OpenPGP: 0xAB4DFBA4) magnus@therning.org Jabber: magnus.therning@gmail.com http://therning.org/magnus Software is not manufactured, it is something you write and publish. Keep Europe free from software patents, we do not want censorship by patent law on written works. I have steadily endeavored to keep my mind free, so as to give up any hypothesis, however much beloved -- and I cannot resist forming one on every subject -- as soon as facts are shown to be opposed to it. -- Charles Darwin (1809-1882)

On Wed, 2006-11-29 at 11:26 +0000, Magnus Therning wrote:
Or the simpler way is to include in your .cabal file:
extensions: ForeignFunctionInterface
That then applies to every module in the lib and has the advantage of being portable between compilers.
Ah, good point.
Now, where could I have turned to find this out myself? I can't find it in the Cabal User's Guide[1].
/M
[1]: http://www.haskell.org/cabal/release/latest/doc/users-guide/
http://www.haskell.org/cabal/release/latest/doc/users-guide/x30.html#buildin... Section 2.1.4, though I do notice that the link to the full list of extensions is broken. Duncan

On Wed, Nov 29, 2006 at 01:12:50PM +0000, Duncan Coutts wrote:
http://www.haskell.org/cabal/release/latest/doc/users-guide/x30.html#buildin...
Section 2.1.4, though I do notice that the link to the full list of extensions is broken.
This version works (and looks better too): http://www.haskell.org/ghc/docs/latest/html/Cabal/
participants (3)
-
Duncan Coutts
-
Magnus Therning
-
Ross Paterson