(***********************************************************************) (* *) (* Objective Caml *) (* *) (* Xavier Leroy, projet Cristal, INRIA Rocquencourt *) (* *) (* Copyright 1996 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$ *) (* Command-line parameters *) let objfiles = ref ([] : string list) (* .cmo and .cma files *) and ccobjs = ref ([] : string list) (* .o, .a, .so and -cclib -lxxx *) and dllibs = ref ([] : string list) (* .so and -dllib -lxxx *) let compile_only = ref false (* -c *) and output_name = ref (None : string option) (* -o *) and include_dirs = ref ([] : string list)(* -I *) and no_std_include = ref false (* -nostdlib *) and print_types = ref false (* -i *) and make_archive = ref false (* -a *) and debug = ref false (* -g *) and fast = ref false (* -unsafe *) and link_everything = ref false (* -linkall *) and custom_runtime = ref false (* -custom *) and output_c_object = ref false (* -output-obj *) and ccopts = ref ([] : string list) (* -ccopt *) and classic = ref false (* -nolabels *) and nopervasives = ref false (* -nopervasives *) and preprocessor = ref(None : string option) (* -pp *) let annotations = ref false (* -annot *) and use_threads = ref false (* -thread *) and use_vmthreads = ref false (* -vmthread *) and noassert = ref false (* -noassert *) and verbose = ref false (* -verbose *) and noprompt = ref false (* -noprompt *) and init_file = ref (None : string option) (* -init *) and use_prims = ref "" (* -use-prims ... *) and use_runtime = ref "" (* -use-runtime ... *) and principal = ref false (* -principal *) and recursive_types = ref false (* -rectypes *) and strict_sequence = ref false (* -strict-sequence *) and applicative_functors = ref true (* -no-app-funct *) and make_runtime = ref false (* -make_runtime *) and gprofile = ref false (* -p *) and c_compiler = ref (None: string option) (* -cc *) and no_auto_link = ref false (* -noautolink *) and dllpaths = ref ([] : string list) (* -dllpath *) and make_package = ref false (* -pack *) and for_package = ref (None: string option) (* -for-pack *) let dump_parsetree = ref false (* -dparsetree *) and dump_rawlambda = ref false (* -drawlambda *) and dump_lambda = ref false (* -dlambda *) and dump_instr = ref false (* -dinstr *) let keep_asm_file = ref false (* -S *) let optimize_for_speed = ref true (* -compact *) and dump_cmm = ref false (* -dcmm *) let dump_selection = ref false (* -dsel *) let dump_live = ref false (* -dlive *) let dump_spill = ref false (* -dspill *) let dump_split = ref false (* -dsplit *) let dump_scheduling = ref false (* -dscheduling *) let dump_interf = ref false (* -dinterf *) let dump_prefer = ref false (* -dprefer *) let dump_regalloc = ref false (* -dalloc *) let dump_reload = ref false (* -dreload *) let dump_scheduling = ref false (* -dscheduling *) let dump_linear = ref false (* -dlinear *) let keep_startup_file = ref false (* -dstartup *) let dump_combine = ref false (* -dcombine *) let native_code = ref false (* set to true under ocamlopt *) let inline_threshold = ref 10 let dont_write_files = ref false (* set to true under ocamldoc *) let std_include_flag prefix = if !no_std_include then "" else (prefix ^ (Filename.quote Config.standard_library)) ;; let std_include_dir () = if !no_std_include then [] else [Config.standard_library] ;; let shared = ref false (* -shared *) let dlcode = ref true (* not -nodynlink *) let ns_current_in_file = ref None let ns_current_in_flags = ref None let ns_path = ref [] let debug_flags = Hashtbl.create 13 let add_debug_flag name refs = Hashtbl.add debug_flags name refs let set_debug s v = if s = "all" then begin Hashtbl.iter (fun _ refs -> List.iter (fun r -> r := v) refs) debug_flags end else try let refs = Hashtbl.find debug_flags s in List.iter (fun r -> r := v) refs with Not_found -> Printf.fprintf stderr "Warning: '%s' no such debug flag\n%!" s let set_debug x = let len = String.length x in if len > 0 then match x.[0] with | '+' -> set_debug (String.sub x 1 (len-1)) true | '-' -> set_debug (String.sub x 1 (len-1)) false | _ -> set_debug x true let set_debug x = let len = String.length x in let rec iter pos = if pos < len then try let pos2 = String.index_from x pos ',' in set_debug (String.sub x pos (pos2-pos)); iter (pos2+1) with Not_found -> set_debug (String.sub x pos (len-pos)) in iter 0 let debug_ns = ref false let debug_env = ref false let _ = add_debug_flag "ns" [ debug_ns; debug_env ]; add_debug_flag "env" [ debug_env ]