(***********************************************************************)
(*                                                                     *)
(*                           Objective Caml                            *)
(*                                                                     *)
(*             Damien Doligez, projet Para, INRIA Rocquencourt         *)
(*                                                                     *)
(*  Copyright 1998 Institut National de Recherche en Informatique et   *)
(*  en Automatique.  All rights reserved.  This file is distributed    *)
(*  under the terms of the Q Public License version 1.0.               *)
(*                                                                     *)
(***********************************************************************)

(* $Id: main_args.ml,v 1.50 2007/05/16 08:21:40 doligez Exp $ *)

module Make_options (F :
   sig
     val _a : unit -> unit
     val _annot : unit -> unit
     val _c : unit -> unit
     val _cc : string -> unit
     val _cclib : string -> unit
     val _ccopt : string -> unit
     val _config : unit -> unit
     val _custom : unit -> unit
     val _dllib : string -> unit
     val _dllpath : string -> unit
     val _g : unit -> unit
     val _i : unit -> unit
     val _I : string -> unit
     val _impl : string -> unit
     val _intf : string -> unit
     val _intf_suffix : string -> unit
     val _labels : unit -> unit
     val _linkall : unit -> unit
     val _make_runtime : unit -> unit
     val _noassert : unit -> unit
     val _noautolink : unit -> unit
     val _nolabels : unit -> unit
     val _nostdlib : unit -> unit
     val _o : string -> unit
     val _output_obj : unit -> unit
     val _pack : unit -> unit
     val _pp : string -> unit
     val _principal : unit -> unit
     val _rectypes : unit -> unit
     val _thread : unit -> unit
     val _vmthread : unit -> unit
     val _unsafe : unit -> unit
     val _use_prims : string -> unit
     val _use_runtime : string -> unit
     val _v : unit -> unit
     val _version : unit -> unit
     val _verbose : unit -> unit
     val _w : string -> unit
     val _warn_error : string -> unit
     val _where : unit -> unit

     val _nopervasives : unit -> unit
     val _dparsetree : unit -> unit
     val _drawlambda : unit -> unit
     val _dlambda : unit -> unit
     val _dinstr : unit -> unit
     val anonymous : string -> unit
   end) =
struct
  let list = [
    "-a", Arg.Unit F._a, " Build a library";
    "-annot", Arg.Unit F._annot, " Save information in <filename>.annot";
    "-c", Arg.Unit F._c, " Compile only (do not link)";
    "-cc", Arg.String F._cc,
           "<command>  Use <command> as the C compiler and linker";
    "-cclib", Arg.String F._cclib, "<opt>  Pass option <opt> to the C linker";
    "-ccopt", Arg.String F._ccopt,
           "<opt>  Pass option <opt> to the C compiler and linker";
    "-config", Arg.Unit F._config,
           " print configuration values and exit";
    "-custom", Arg.Unit F._custom, " Link in custom mode";
    "-dllib", Arg.String F._dllib,
           "<lib>  Use the dynamically-loaded library <lib>";
    "-dllpath", Arg.String F._dllpath,
           "<dir>  Add <dir> to the run-time search path for shared libraries";
    "-dtypes", Arg.Unit F._annot, " (deprecated) same as -annot";
     "-for-pack", Arg.String (fun s -> ()),
           "<ident>  Ignored (for compatibility with ocamlopt)";
    "-g", Arg.Unit F._g, " Save debugging information";
    "-i", Arg.Unit F._i, " Print inferred interface";
    "-I", Arg.String F._I,
           "<dir>  Add <dir> to the list of include directories";
    "-impl", Arg.String F._impl, "<file>  Compile <file> as a .ml file";
    "-intf", Arg.String F._intf, "<file>  Compile <file> as a .mli file";
    "-intf-suffix", Arg.String F._intf_suffix,
           "<string>  Suffix for interface files (default: .mli)";
    "-intf_suffix", Arg.String F._intf_suffix,
           "<string>  (deprecated) same as -intf-suffix";
    "-labels", Arg.Unit F._labels, " Use commuting label mode";
    "-linkall", Arg.Unit F._linkall, " Link all modules, even unused ones";
    "-make-runtime", Arg.Unit F._make_runtime,
           " Build a runtime system with given C objects and libraries";
    "-make_runtime", Arg.Unit F._make_runtime,
           " (deprecated) same as -make-runtime";
    "-modern", Arg.Unit F._labels, " (deprecated) same as -labels";
    "-noassert", Arg.Unit F._noassert, " Don't compile assertion checks";
    "-noautolink", Arg.Unit F._noautolink,
           " Don't automatically link C libraries specified in .cma files";
    "-nolabels", Arg.Unit F._nolabels, " Ignore non-optional labels in types";
    "-nostdlib", Arg.Unit F._nostdlib,
           " do not add default directory to the list of include directories";
    "-o", Arg.String F._o, "<file>  Set output file name to <file>";
    "-output-obj", Arg.Unit F._output_obj,
           " Output a C object file instead of an executable";
    "-pack", Arg.Unit F._pack,
           " Package the given .cmo files into one .cmo";
    "-pp", Arg.String F._pp,
           "<command>  Pipe sources through preprocessor <command>";
    "-principal", Arg.Unit F._principal,
           " Check principality of type inference";
    "-rectypes", Arg.Unit F._rectypes, " Allow arbitrary recursive types";
    "-thread", Arg.Unit F._thread,
           " Generate code that supports the system threads library";
    "-unsafe", Arg.Unit F._unsafe,
           " No bounds checking on array and string access";
    "-use-runtime", Arg.String F._use_runtime,
           "<file>  Generate bytecode for the given runtime system";
    "-use_runtime", Arg.String F._use_runtime,
           "<file>  (deprecated) same as -use-runtime";
    "-v", Arg.Unit F._v,
           " Print compiler version and location of standard library and exit";
    "-version", Arg.Unit F._version, " Print compiler version and exit";
    "-verbose", Arg.Unit F._verbose, " Print calls to external commands";
    "-vmthread", Arg.Unit F._vmthread,
           " Generate code that supports the threads library with VM-level\n\
      \     scheduling";
    "-w", Arg.String F._w,
      "<flags>  Enable or disable warnings according to <flags>:\n\
      \032    C/c enable/disable suspicious comment\n\
      \032    D/d enable/disable deprecated features\n\
      \032    E/e enable/disable fragile match\n\
      \032    F/f enable/disable partially applied function\n\
      \032    L/l enable/disable labels omitted in application\n\
      \032    M/m enable/disable overriden methods\n\
      \032    P/p enable/disable partial match\n\
      \032    S/s enable/disable non-unit statement\n\
      \032    U/u enable/disable unused match case\n\
      \032    V/v enable/disable overriden instance variables\n\
      \032    Y/y enable/disable suspicious unused variables\n\
      \032    Z/z enable/disable all other unused variables\n\
      \032    X/x enable/disable all other warnings\n\
      \032    A/a enable/disable all warnings\n\
      \032    default setting is \"Aelz\"";
    "-warn-error" , Arg.String F._warn_error,
     "<flags>  Treat the warnings of <flags> as errors, if they are\n\
      \     enabled.  See option -w for the list of flags.\n\
      \     Default setting is \"a\" (warnings are not errors)";
    "-where", Arg.Unit F._where,
           " Print location of standard library and exit";
    "-nopervasives", Arg.Unit F._nopervasives, " (undocumented)";
    "-dparsetree", Arg.Unit F._dparsetree, " (undocumented)";
    "-drawlambda", Arg.Unit F._drawlambda, " (undocumented)";
    "-dlambda", Arg.Unit F._dlambda, " (undocumented)";
    "-dinstr", Arg.Unit F._dinstr, " (undocumented)";
    "-use-prims", Arg.String F._use_prims, "<file>  (undocumented)";

    "-", Arg.String F.anonymous,
           "<file>  Treat <file> as a file name (even if it starts with `-')";
  ]
end;;
