Browse thread
[Caml-list] Confusion about camlidl capabilities? other tools?
-
Jeff Henrikson
- Xavier Leroy
[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
| Date: | -- (:) |
| From: | Xavier Leroy <Xavier.Leroy@i...> |
| Subject: | Re: [Caml-list] Confusion about camlidl capabilities? other tools? |
> 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