Version française
Home     About     Download     Resources     Contact us    
Browse thread
[Caml-list] camlp4 in script
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Issac Trotts <ijtrotts@u...>
Subject: Re: [Caml-list] camlp4 in script
On Mon, Nov 03, 2003 at 05:06:00PM +0200, Artem Prisyznuk wrote:
> Hello,
> 
> If I want call ocaml script from shell I type next header for
> this script:
> 
>   #!/usr/bin/ocamlrun /usr/bin/ocaml
> 
>   print_string "Hello\n";;
>   .....
> 
> 
> But if I want use camlp4 for source of script, I try next source
> 
>   #!/usr/bin/ocamlrun /usr/bin/ocaml -I `camlp4 -where`
> 
>   #load "camlp4r.cma";
>   print_string "Hello\n";
>   .....
> 
> 
> When I try execute this script shell print next error:
> 
>   Fatal error: cannot find file /usr/bin/ocaml -I /usr/lib/ocaml/camlp4
> 
> How I can execute script witch revised syntax?

It works if you make an executable that wraps the call to ocaml with the
desired arguments:

ijtrotts@beech:/tmp$ cat c4.ml
let () =
    let includes = "-I /usr/lib/ocaml/camlp4" in
    let args =
        List.fold_left (^) "" (List.tl (Array.to_list Sys.argv))
    in
    let cmd =
        Printf.sprintf "ocaml %s camlp4r.cma %s" includes args
    in
    match Sys.command cmd with
      0 -> ()
    | _ -> prerr_endline ("Couldn't run "^cmd)
 
ijtrotts@beech:/tmp$ ocamlopt -o c4 c4.ml
ijtrotts@beech:/tmp$ su
Password:
beech:/tmp# mv c4 /usr/local/bin/c4
ijtrotts@beech:/tmp$ cat foo.ml
#!/usr/local/bin/c4
 
print_string "Hello\n";
  
ijtrotts@beech:/tmp$ chmod +x foo.ml
ijtrotts@beech:/tmp$ ./foo.ml
Hello

-ijt

-- 

-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners