[ITA] ocaml

Yaakov (Cygwin/X) yselkowitz@users.sourceforge.net
Fri Feb 12 11:50:00 GMT 2010


Before we start:

http://cygwin.com/acronyms/#PCYMTWLL

On 11/02/2010 15:36, Ed Keith wrote:
> It has been brought to my attention that the ocaml package has been
 > orphaned. I am willing to take it over.

That's good news!  You've chosen a bit of a challenge to start off with.

> I believe I have the source package ready, but am still having problems
 > figuring out exactly how to package the bin, I am working on it.

Since you didn't mention ITP'ing flexdll, I take it that you build ocaml 
with only static libraries.

You may want to take a look at how I built OCaml for Cygwin Ports:

http://cygwin-ports.svn.sourceforge.net/viewvc/cygwin-ports/ports/trunk/lang/ocaml/

(Yes, that's for 3.11.1; 3.11.2 just came out[1] and I was working on 
other things this week.)

The "official" way of supporting OCaml shared modules (dll*.so stublibs 
and *.cmxs natdynlink modules) on PE/COFF platforms is with FlexDLL[2], 
which implements a way to link libraries without resolving all their 
symbol dependencies at link time.  (Ports SVN also includes a few 
patches[3] necessary for flexdll to work correctly.)  The drawback is 
that you *must* use the OCaml compilers to link any code that uses 
OCaml, which means, for instance, the GraphViz OCaml bindings whose 
stublib is normally linked with libtool cannot be built as-is, nor can 
Kalzium be built with the solver which uses facile (native code) but 
links with CXX.  The vast majority of packages build just as they do on 
ELF platforms, so this is a tradeoff to be made for the functionality. 
The only alternative is ugly[4], won't fix .cmxs linkage, and won't be 
supported upstream, so it's probably not worth the bother.

The other issue to be determined is what should be (in cygport 
terminology) OCAML_LIBDIR.  By default, this is /usr/lib/ocaml, but some 
distros version this in order to account for the API/ABI changes which 
do periodically occur.  (For instance, there was such a change between 
3.09 and 3.10.0, which they then undid for 3.10.1.  I suppose I got what 
I deserved for using a .0 release.)  Actually, Debian *used* to do this, 
but today I see that they stopped, possibly because it would be quite 
tedious to rebuild ALL ocaml packages for every OCaml point release.  So 
sticking with the default may make sense, with the understanding that 
packages may have to periodically be rebuilt as time goes on.

As for packaging, my .cygport creates separate packages for ocaml-camlp4 
(due to its size and only periodic usage) and ocaml-labltk (due to the 
added dependency on tcl/tk).  You don't have to go this route, but I 
will at least suggest it.

HTH, and please let us know how we can further help with your ITA.


Yaakov

[1] http://caml.inria.fr/ocaml/release.en.html
[2] http://alain.frisch.fr/flexdll.html
[3] 
http://cygwin-ports.svn.sourceforge.net/viewvc/cygwin-ports/ports/trunk/devel/flexdll/
[4] 
http://cygwin-ports.svn.sourceforge.net/viewvc/cygwin-ports/ports/trunk/lang/ocaml/ocaml-3.10.2-1.src.patch?revision=4626&pathrev=6920



More information about the Cygwin-apps mailing list