X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=src%2Fcmdline.ml;h=0ac1ad59936f0b70b548a0973c393922601a2c37;hb=ca19d10dfd7e3e3c690f5d618d5fc24a0d14accc;hp=fdf7ce6341fc3e9b7d03176f51a14d8097b656a5;hpb=aadcfa31f19559b2a8a355736e3dfc4795e0a2d9;p=goals.git diff --git a/src/cmdline.ml b/src/cmdline.ml index fdf7ce6..0ac1ad5 100644 --- a/src/cmdline.ml +++ b/src/cmdline.ml @@ -45,20 +45,19 @@ let datadir = let stdlibdir = datadir // "stdlib" let prelude_gl_file = stdlibdir // "prelude.gl" let prelude_sh_file = stdlibdir // "prelude.sh" -let () = + +let debug_flag = ref false +let directory = ref "." +let input_file = ref "Goalfile" +let includes = ref [stdlibdir] +let add_include dir = includes := dir :: !includes +let nr_jobs = ref 4 (* XXX use nproc *) +let use_prelude = ref true + +let parse () = if not (is_directory stdlibdir) || not (Sys.file_exists prelude_gl_file) then failwithf "%s: cannot find the standard library directory, expected %s. If the standard library directory is in a non-standard location then set GOALS_DATADIR. If you can trying to run goals from the build directory then use ‘./run goals ...’" - Sys.executable_name stdlibdir - -let input_file, - debug_flag, directory, includes, use_prelude, anon_vars, targets = - let args = ref [] in - let debug_flag = ref false in - let directory = ref "." in - let input_file = ref "Goalfile" in - let includes = ref [stdlibdir] in - let add_include dir = includes := dir :: !includes in - let use_prelude = ref true in + Sys.executable_name stdlibdir; let argspec = [ "-C", Arg.Set_string directory, @@ -75,6 +74,10 @@ let input_file, "dir Add include directory"; "--include", Arg.String add_include, "dir Add include directory"; + "-j", Arg.Set_int nr_jobs, + "jobs Set number of parallel jobs"; + "--jobs", Arg.Set_int nr_jobs, + "jobs Set number of parallel jobs"; "--no-prelude",Arg.Clear use_prelude, " Do not automatically use prelude.gl from stdlib"; "-v", Arg.Unit print_version, @@ -83,16 +86,15 @@ let input_file, " Print version and exit"; ] in let argspec = Arg.align argspec in + let args = ref [] in let anon_fun s = args := s :: !args in Arg.parse argspec anon_fun usage; + (* Check various params are sensible. *) + if !nr_jobs < 1 then + failwithf "%s: -j must be >= 1" Sys.executable_name; + let args = List.rev !args in - let debug_flag = !debug_flag in - let directory = !directory in - let input_file = !input_file in - (* Don't reverse includes - we want newer -I options to take precedence. *) - let includes = !includes in - let use_prelude = !use_prelude in (* Get the anon var assignments and targets. *) let anon_vars, targets = @@ -108,10 +110,20 @@ let input_file, (name, expr) ) anon_vars in - input_file, - debug_flag, directory, includes, use_prelude, anon_vars, targets + anon_vars, targets + +let debug_flag () = !debug_flag (* Create the debug function. *) let debug fs = - let display str = if debug_flag then prerr_endline str in + let display str = if debug_flag () then prerr_endline str in ksprintf display fs + +let directory () = !directory +let input_file () = !input_file + +(* Don't reverse includes - we want newer -I options to take precedence. *) +let includes () = !includes + +let nr_jobs () = !nr_jobs +let use_prelude () = !use_prelude