(***********************************************************************) (* *) (* Objective Caml *) (* *) (* Xavier Leroy, projet Cristal, INRIA Rocquencourt *) (* *) (* Copyright 1996 Institut National de Recherche en Informatique et *) (* Automatique. Distributed only by permission. *) (* *) (***********************************************************************) (* $Id$ *) let compargs = ref ([] : string list) let profargs = ref ([] : string list) let toremove = ref ([] : string list) let option opt () = compargs := opt :: !compargs let option_with_arg opt arg = compargs := arg :: opt :: !compargs let process_file filename = compargs := filename :: !compargs let usage = "Usage: ocamlcp \noptions are:" let _ = Arg.parse [ (* Same options as the compiler ocamlc *) "-a", Arg.Unit(option "-a"), " Build a library"; "-c", Arg.Unit(option "-c"), " Compile only (do not link)"; "-cclib", Arg.String(option_with_arg "-cclib"), " Pass option to the C linker"; "-ccopt", Arg.String(option_with_arg "-ccopt"), " Pass option to the C compiler and linker"; "-custom", Arg.Unit(option "-custom"), " Link in custom mode"; "-i", Arg.Unit(option "-i"), " Print the types"; "-I", Arg.String(option_with_arg "-I"), " Add to the list of include directories"; (* -impl et -intf ont disparu ?? PWZ *) "-linkall", Arg.Unit(option "-linkall"), " Don't remove unused modules"; "-o", Arg.String(option_with_arg "-o"), " Set output file name to (default a.out)"; "-v", Arg.Unit(option "-v"), " Print compiler version number"; "-unsafe", Arg.Unit(option "-unsafe"), " No bound checking on array and string access"; "-nopervasives", Arg.Unit(option "-nopervasives"), " (undocumented)"; "-drawlambda", Arg.Unit(option "-drawlambda"), " (undocumented)"; "-dlambda", Arg.Unit(option "-dlambda"), " (undocumented)"; "-dinstr", Arg.Unit(option "-dinstr"), " (undocumented)"; "-", Arg.String process_file, " Take as a file name (even if it starts with `-')"; (* Option specific to the profiler *) "-p", Arg.String(fun s -> profargs := s :: "-m" :: !profargs), "[afilmt] Profile constructs specified by argument:\n\ a Everything\n\ f Function calls\n\ i if ... then ... else\n\ l while, for\n\ m match ... with\n\ t try ... with" ] process_file usage; let status = Sys.command (Printf.sprintf "ocamlc -pp \"ocamlprof -instrument %s\" %s" (String.concat " " (List.rev !profargs)) (String.concat " " (List.rev !compargs))) in exit status