Version française
Home     About     Download     Resources     Contact us    
Browse thread
undefined symbol `caml_tuplify2' in dynamic rocaml extension
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Mauricio Fernandez <mfp@a...>
Subject: Re: [Caml-list] undefined symbol `caml_tuplify2' in dynamic rocaml extension (UPDATE)
On Wed, Aug 01, 2007 at 04:24:05PM -0700, Jos Backus wrote:
> On Wed, Aug 01, 2007 at 10:59:07AM -0700, Jos Backus wrote:
> > On Wed, Aug 01, 2007 at 09:17:02AM -0700, Jos Backus wrote:
> > > On Wed, Aug 01, 2007 at 11:16:47AM +0200, Mauricio Fernandez wrote:
> > [snip]
> > > > If you could pinpoint the conversion that's triggering the problem (and it's
> > > > indeed a problem caused by a Ruby <-> OCaml conversion) we'd be one step
> > > > away from fixing it.  Have you tried to disassemble the extension and see
> > > > where caml_tuplify2 is being called?
> > > 
> > > I'll have a look. I do see references to caml_tuplify2 in other .a's as well.
> > 
> > It turns out my extension doesn't call it but one of the required libraries
> > does.
> > 
> > Here's what I am doing:
> [snip]
> 
> Some good news. We got this to work by creating a kpp.ml file (containing the
> Callback.register calls) in the extension directory, and adding some values to
> CAML_LIBS, CAML_OBJS and CAML_INCLUDES. Yay!

Yes, I wrote a very long message telling you exactly this (that you needed to
use CAML_LIBS so that -output-obj could work correctly) late at night but
forgot to send it :)

> It looks like we are really close. The next (final?) issue is that we have a
> function with signature
> 
>     val eval : kpp -> string -> value list -> value list
> 
> where
> 
>     type value =
> 	| Vstr of string
> 	| Vtup of value list
> 
> which we want to export to Ruby. We tried:
> 
>     Interface.generate(EXT_NAME) do
>       value = sym_variant("value") do |t|
> 	non_constant :Vstr, STRING
> 	non_constant :Vtup, LIST(t)
>       end
[...]
> but it doesn't work (it segfaults inside the extension).
> 
> How does one represent `value' on the Ruby side?

I think you have to wrap the LIST(t) in a TUPLE():

  value = sym_variant("value") do |t|
   non_constant :Vstr, STRING
   non_constant :Vtup, TUPLE(LIST(t))
  end

I'll try to either auto-detect this or perform a compile-time check.

> Btw, besides having to remove the stray `"' we also found that we had to patch
> the kpp_rocaml_wrapper.c to make it compile, basically doing a `%s/t_value
> /t_value_/g' in this case.

Chris Waterson has kindly sent me a patch fixing the problems you saw; I've
just pushed it to the online repository, along with an example of the above
TUPLE(LIST(t)) in examples/variants.

I'll work on the INCFLAGS issue so there's no need to hand-edit the generated
Makefile/wrappers.

-- 
Mauricio Fernandez  -   http://eigenclass.org