Mailing list for all users of the OCaml language and system.
 help / color / mirror / Atom feed
From: Gerd Stolpmann <info@gerd-stolpmann.de>
To: Richard Jones <rich@annexia.org>
Cc: caml-list@inria.fr
Subject: Re: [Caml-list] Usability problems with ocamlmktop / toplevels
Date: Mon, 15 Aug 2005 15:35:21 +0200	[thread overview]
Message-ID: <1124112922.12041.26.camel@localhost.localdomain> (raw)
In-Reply-To: <20050812152827.GA4162@furbychan.cocan.org>

Am Freitag, den 12.08.2005, 16:28 +0100 schrieb Richard Jones:
> I'm experimenting with building a custom toplevel, but have run across
> some problems.
> 
> (1) I want to have some modules 'open' already in the toplevel - we
> have lots and lots of modules, some with long names, and most of these
> should be opened by default.  The partial solution is to add lots of
> 'open' statements to a .ocamlinit file in the current directory, but
> this assumes that you know what the current directory is, and that you
> only need to use one type of toplevel in that directory.

It is not possible to compile such "open"s into the toplevels. This has
to to with the initialisation order.

Nevertheless, a partial solution is implemented in findlib:

ocamlfind ocamlmktop -o top -custom -package findlib,... -linkpkg

Note that I mention "findlib" explicitly. Now you can at least #require
the packages in scripts which generates the necessary #directory
directives, so your script becomes independent of where the packages are
actually installed. (#require does not load code that is already part of
the toplevel.)

My advice is to have a project-wide initialisation file one can #use
from the scripts, e.g.

#!./top
#use "./init.ml"

And in init.ml there are all the #require and open directives.


> (2) Toplevels don't work the same way as 'ocaml'.  The difference is
> that our custom toplevel ignores any command line arguments passed to
> it, whereas 'ocaml foo.ml' runs 'foo.ml'.  This means that we can't
> use our toplevel to write scripts:
> 
>   #!./adwords
> 
> (or variations we've tried) doesn't work.

For me this works.

Maybe the OS does not resolve the relative path. You can also try

#! /usr/bin/env ./adwords

but note that #! only allows one argument.

> (3) Some libraries are linked into the toplevel, but apparently can't
> be accessed.  For instance, Calendar ExtLib must be linked into the
> toplevel because our main code relies on them; however no symbols from
> either are visible:
> 
> $ ./adwords
>         Objective Caml version 3.08.2
> 
> # Date.today ();;
> Unbound value Date.today
> # open Date;;
> Unbound module Date
> # ExtString.String.split;;
> Unbound value ExtString.String.split

The directories are not in the search path. This is solved by the
#require trick shown above.

> 
> Rich.
> 
> PS. This is how we build the toplevel:
> 
> ocamlfind ocamlmktop -custom -package pxp-lex-iso88591,pxp-engine,netclient,netstring,extlib,pcre,calendar -I ../ocsoap -I ../csv -linkpkg ../ocsoap/oCSoap.cmo ../csv/csv.cma adwords.cma -o adwords
> 
Gerd
-- 
------------------------------------------------------------
Gerd Stolpmann * Viktoriastr. 45 * 64293 Darmstadt * Germany 
gerd@gerd-stolpmann.de          http://www.gerd-stolpmann.de
Telefon: 06151/153855                  Telefax: 06151/997714
------------------------------------------------------------


      parent reply	other threads:[~2005-08-15 13:35 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-08-12 15:28 Richard Jones
2005-08-12 15:45 ` [Caml-list] " Olivier Andrieu
2005-08-15 13:35 ` Gerd Stolpmann [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=1124112922.12041.26.camel@localhost.localdomain \
    --to=info@gerd-stolpmann.de \
    --cc=caml-list@inria.fr \
    --cc=rich@annexia.org \
    /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