Mailing list for all users of the OCaml language and system.
 help / color / mirror / Atom feed
From: Romain Bardou <bardou@lsv.ens-cachan.fr>
To: caml-list@inria.fr
Subject: Re: [Caml-list] Compiling Cryptokit on Windows
Date: Mon, 20 Feb 2012 14:50:12 +0100	[thread overview]
Message-ID: <4F424F94.9080005@lsv.ens-cachan.fr> (raw)
In-Reply-To: <4F300957.5050708@lsv.ens-cachan.fr>

Le 06/02/2012 18:09, Romain Bardou a écrit :
> Hi list,
>
>
> There has been some discussion during the last few months were some
> argued that there was not enough Windows users to test libraries. Well
> it happens that I need to compile Cryptokit for Windows. Here are my
> first results, which failed miserably. I'm using OCaml 3.12.
>
>
> 1) With Cryptokit 1.5.
>
> INSTALL.txt states that I need findlib. I installed OCaml from:
> http://protz.github.com/ocaml-installer/
> And it seems that ocamlfind is not installed by this tool. After more
> search I read here:
> http://www.camlcity.org/archive/programming/findlib.html
> that "Volunteers are still wanted who port findlib to Windows and
> Macintosh."
>
> So I guess that every OASIS project needs findlib, but findlib does not
> work on Windows, so all OASIS projects will not be usable on Windows? I
> thought on the contrary that OASIS was a step towards unification?
>
> I tried anyway without findlib, running:
> ocaml setup.ml -configure
> I get this error: "'c:\Program' n'est pas reconnu en tant que commande
> interne" (i.e. "unrecognized internal command"). The command which is
> supposed to be run is:
> c:\Program Files\OCaml\bin\ocamlc.opt.EXE -config > somefile.txt
> It just misses quotes, which seems kind of silly.
>
>
> 2) With Cryptokit 1.3.
>
> So I gave up and tried an older version whose INSTALL file explains how
> to install on Windows.
>
> I checked variables in Makefile.win and ran:
> make -f Makefile.win
> Now the error I get is that gcc cannot find "C:\Program
> Files\OCaml\lib/ocamlrun.a", which actually does not exist, so this is
> not a surprise. This file "ocamlrun.a" does not exist either on my
> Debian computer, so I'm a little surprised here.
>
>
> I think I'll try cross-compiling now, or maybe editing "setup.ml" to put
> quotes around the command.
>
> Cheers,
>

Hi list,

First of all, thanks to Gerd, David and Adrien for their answers. I was 
eventually able to take the time to tackle this problem again and my 
program compiles and runs just fine on Windows now, with Cryptokit 1.5.

I had to:
- reinstall OCaml in a directory without any space in it (otherwise 
Cryptokit would not configure without a hack, and would not compile even 
with the hack);
- modify cryptokit/setup.data, there was a reference to "Program Files", 
but I don't think it was actually used so this step might not be useful;
- move the source of Cryptokit to a directory without any space in it 
(otherwise it would not install);
- compile and install findlib.
Then Cryptokit would compile and install. I was then able to link with it.

I also tried cross-compiling but I failed, because (I think) 
mingw32-ocamlmklib produces a .dll (which makes sense) but Cryptokit 
believes it is in an environment where DLL are .so files. With more work 
I'm pretty sure it could be done but maybe not without modifying the 
compilation process of Cryptokit. Maybe it's just a matter of changing 
one parameter somewhere.

To sum up, here are some general ideas that would improve the OCaml 
developing environment when Win32 is involved.

1) In OASIS: fix the handling of paths with spaces in them.

2) In the OCaml binary installer: install Findlib by default. After all, 
it installs emacs, but emacs is much less mandatory for OCaml 
programming than Findlib.

3) In Debian: provide a findlib package which could be used for 
cross-compiling with mingw32. It would be configured to use the 
cross-compiled mingw32 OCaml libraries in 
/usr/i686-w64-mingw32/lib/ocaml. Maybe it could simply install a shell 
script which would call the existing Linux ocamlfind, but using a 
different configuration file by default.

4) In Debian also: provide Ocamlbuild with the mingw32 cross-compilation 
tools for OCaml. For instance, /usr/bin/i686-w64-mingw32-ocamlbuild. 
This Ocamlbuild would be configured to use the 
/usr/bin/i686-w64-mingw32-ocaml* executables by default, and to believe 
it runs in a Windows environment (so as to handle ocamlmklib and its 
output .dll file correctly).

5) In OASIS: do something to help with cross-compilation. For instance, 
add a -build-cross-mingw32 option to setup.ml or something. If 3) and 4) 
are available, it would be easy to implement. Else, instead of looking 
for "ocamlc" in the path, look for "i686-w64-mingw32-ocamlc". I don't 
know whether this name is Debian-only though. And other tweaks would be 
necessary so that Ocamlbuild is happy.

Regarding 3, 4, and 5, maybe I'm doing it wrong though. I'm not very 
familiar with cross-compiling.

Cheers,

-- 
Romain

      parent reply	other threads:[~2012-02-20 13:49 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-02-06 17:09 Romain Bardou
2012-02-06 17:56 ` Gerd Stolpmann
2012-02-06 18:02 ` David Allsopp
2012-02-06 21:37 ` Adrien
2012-02-20 13:50 ` Romain Bardou [this message]

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=4F424F94.9080005@lsv.ens-cachan.fr \
    --to=bardou@lsv.ens-cachan.fr \
    --cc=caml-list@inria.fr \
    /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