caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Xavier Leroy <Xavier.Leroy@inria.fr>
To: Jeff Henrikson <jehenrik@yahoo.com>
Cc: caml-list@inria.fr
Subject: Re: [Caml-list] Confusion about camlidl capabilities? other tools?
Date: Tue, 14 Aug 2001 09:51:59 +0200	[thread overview]
Message-ID: <20010814095159.A2700@pauillac.inria.fr> (raw)
In-Reply-To: <001701c1242d$e44770e0$0b01a8c0@mit.edu>; from jehenrik@yahoo.com on Mon, Aug 13, 2001 at 03:26:46PM -0400

> Reading the documentation of camlidl, it says that caml objects can
> be exported for use in C/C++ programs.  Looking at the source code,
> the support for this looks minimal.  I see the camlidldll script,
> which is just a shell script that links a caml program with some
> executable code.

This is just a convenience script.  The gist of CamlIDL is that it
generates stub code + a Caml interface from a C-like interface
expressed in IDL (basically, it's a C include file with annotations).
This provides Caml/C (and a little C++) interoperability in situations
where the C interface is fixed.  But that's not what you want:

> I want real C header files from just plain unannotated mli.
> Preferably a system with ability to map variants into C
> struct/unions coupled with utility functions.  I'm not sure which
> other advanced ocaml datatypes I need beyond variants and the basic
> ints, strings, arrays and etc.

What you need is Camouflage by Robbert van Renesse:
        ftp://ftp.cs.cornell.edu/pub/rvr/camou-1.1.tar.gz
>From the announcement:

  Camouflage 1.1 is a tool that supports interfacing between C and OCaml.
  Camouflage reads a .mli file and creates the necessary C interfaces to
  the given module.  This way the fact that a library is written in OCaml
  can be ``camouflaged.''  Camouflage also supports creating OCaml interfaces
  to C functions, and generates functions that convert between OCaml and C
  data structures.

  For example, let say "x.mli" contains the declaration "val add: int ->
  int -> int".  Then the command "camou x.mli" creates a file "x.c" that
  contains the C function "int X_add(int, int)" which does all the stuff
  necessary to invoke the ML function.  Vice versa, the declaration
  "external add: int -> int -> int" creates an ML function to invoke
  a corresponding C function.

> While I'm at it, I will probably try to export stubs at least these
> styles: COM, GTK-style C objects, and SWIG-ready header files for
> inclusion in Python or TCL or whatever some unenlightened person
> would want to use.

Sounds good.  I don't think Camouflage does any of this, and it hasn't
been updated in a while, but I think it could be a good starting
point.

- Xavier Leroy
-------------------
Bug reports: http://caml.inria.fr/bin/caml-bugs  FAQ: http://caml.inria.fr/FAQ/
To unsubscribe, mail caml-list-request@inria.fr  Archives: http://caml.inria.fr


  reply	other threads:[~2001-08-14  7:52 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2001-08-13 19:26 Jeff Henrikson
2001-08-14  7:51 ` Xavier Leroy [this message]
     [not found] <20010813225308.B23936@dpt-info.u-strasbg.fr>
2001-08-14  0:26 ` Jeff Henrikson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20010814095159.A2700@pauillac.inria.fr \
    --to=xavier.leroy@inria.fr \
    --cc=caml-list@inria.fr \
    --cc=jehenrik@yahoo.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).