[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