Mailing list for all users of the OCaml language and system.
 help / color / mirror / Atom feed
From: Markus Mottl <mottl@miss.wu-wien.ac.at>
To: luther@dpt-info.u-strasbg.fr
Cc: caml-list@inria.fr (OCAML)
Subject: Re: Sys.argv with interpreter and compiler
Date: Mon, 5 Jul 1999 11:37:25 +0100 (MET DST)	[thread overview]
Message-ID: <199907050937.LAA30606@miss.wu-wien.ac.at> (raw)
In-Reply-To: <19990705100950.A3414@maxime.u-strasbg.fr> from "Sven LUTHER" at Jul 5, 99 10:09:50 am

> I don't get the same, why :
> 
> sh-2.02$ cat essay
> #!/usr/local/bin/ocaml
> print_string "Hello world!"; print_newline();;
> exit 0;;
> ^D
> sh-2.02$ ./essai
> ./essai: line 2: syntax error near unexpected token `;'
> ./essai: line 2: `print_string "Hello world!"; print_newline();;'

Your toplevel "/usr/local/bin/ocaml" is obviously compiled to byte code.
Take a look at it with "less" and you will see that the first line of
this executable is actually "#!/home/mottl/mysys/bin/ocamlrun".

As far as I know it is not allowed on any unix system to run scripts
whose interpreter is a script itself. This would make it much easier to
replace this interpreter with something evil - e.g. some kind of wrapper
that executes unfriendly commands under you UID and continues with the
"true" interpreter.

Try the difference like this:

  ocamlmktop -o newtop

Now place replace "#!/usr/local/bin/ocaml" with the path to the newly
created "newtop" and run "essay" again - you will again receive an error
message, because the system will run the script with your current shell
instead with "newtop" which is not a "true" binary.

Then execute:

  ocamlmktop -custom newtop

This will generate a native code (=true binary) toplevel. You might
want to link useful native code libraries to it, eg. "unix", "str", even
"threads" and graphics work just fine!

If you run "essay" again, it will work out of the box...

I have linked my own "toplevel" like this (under Linux -> native threads
supported!):

ocamlmktop -thread -custom -o mocaml \
  graphics.cma -cclib -lgraphics -ccopt -L/usr/X11R6/lib -cclib -lX11 \
  unix.cma -cclib -lunix \
  str.cma -cclib -lstr \
  threads.cma -cclib -lthreads -cclib -lunix -cclib -lpthread

This allows me to run virtually every kind of Ocaml-script from the shell.

Try "mocaml" with this little program under X-windows:

  open Graphics
  open Random

  let main () =
    open_graph "";
    let sx, sy = size_x (), size_y () in
    let maxr = min (sx lsr 2) (sy lsr 2) and maxc = 256 in
    while not (key_pressed ()) do
      let x, y, r, color = int sx, int sy, int maxr,
                           rgb (int maxc) (int maxc) (int maxc) in
      set_color color; fill_circle x y r
    done

  let _ = Printexc.catch main ()

Nice ;-)

Best regards,
Markus Mottl

-- 
Markus Mottl, mottl@miss.wu-wien.ac.at, http://miss.wu-wien.ac.at/~mottl




  reply	other threads:[~1999-07-08  1:43 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1999-06-27 12:02 Markus Mottl
1999-07-01 17:32 ` Xavier Leroy
1999-07-01 23:35   ` Markus Mottl
1999-07-02  0:39     ` Pierre Weis
1999-07-02  0:53       ` Fabrice Le Fessant
1999-07-05  8:09       ` Sven LUTHER
1999-07-05 10:37         ` Markus Mottl [this message]
1999-07-08 23:23           ` Gerd Stolpmann
1999-07-02  1:30     ` Jacques GARRIGUE
1999-07-02  8:56       ` Markus Mottl
1999-06-29 17:01 Damien Doligez
1999-07-08 11:39 Damien Doligez
1999-07-09  2:25 ` Jacques GARRIGUE

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=199907050937.LAA30606@miss.wu-wien.ac.at \
    --to=mottl@miss.wu-wien.ac.at \
    --cc=caml-list@inria.fr \
    --cc=luther@dpt-info.u-strasbg.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