Files
Geneweb/configure.ml
2024-03-05 22:01:20 +01:00

123 lines
3.5 KiB
OCaml

(* ocaml ./configure.ml *)
#use "topfind"
#require "unix"
let strip = ref true
let rm = ref ""
let ext = ref ""
let os_type = ref ""
let installed pkg = 0 = Sys.command ("ocamlfind query -qo -qe " ^ pkg)
let errmsg = "usage: " ^ Sys.argv.(0) ^ " [options]"
let api = ref false
let sosa = ref `None
let gwdb = ref `None
let syslog = ref false
let set_api () = api := true
let set_syslog () = syslog := true
let set_sosa_legacy () =
assert (!sosa = `None);
sosa := `Legacy
let set_sosa_zarith () =
assert (!sosa = `None);
sosa := `Zarith
let set_sosa_num () =
assert (!sosa = `None);
sosa := `Num
let set_gwdb_legacy () =
assert (!gwdb = `None);
gwdb := `Legacy
let release = ref false
let speclist =
[
("--gwdb-legacy", Arg.Unit set_gwdb_legacy, " Use legacy backend");
( "--release",
Arg.Set release,
" Use release profile: no debug information (default: "
^ string_of_bool !release ^ ")" );
( "--debug",
Arg.Clear release,
" Use dev profile: no optimization, debug information (default: "
^ string_of_bool (not !release)
^ ")" );
( "--sosa-legacy",
Arg.Unit set_sosa_legacy,
" Use legacy Sosa module implementation" );
( "--sosa-num",
Arg.Unit set_sosa_num,
" Use Sosa module implementation based on `num` library" );
( "--sosa-zarith",
Arg.Unit set_sosa_zarith,
" Use Sosa module implementation based on `zarith` library" );
("--syslog", Arg.Unit set_syslog, " Log gwd errors using syslog");
]
|> List.sort compare |> Arg.align
let () =
Arg.parse speclist failwith errmsg;
let dune_dirs_exclude = ref "" in
let exclude_dir s = dune_dirs_exclude := !dune_dirs_exclude ^ " " ^ s in
let syslog_d, syslog_pkg =
match !syslog with true -> (" -D SYSLOG", "syslog") | false -> ("", "")
in
if !sosa = `None then
if installed "zarith" then set_sosa_zarith ()
else if installed "num" then set_sosa_num ()
else set_sosa_legacy ();
let sosa_d, sosa_pkg =
match !sosa with
| `Legacy ->
exclude_dir "sosa_num";
exclude_dir "sosa_zarith";
("", "geneweb_sosa_array")
| `Num ->
exclude_dir "sosa_array";
exclude_dir "sosa_zarith";
(" -D SOSA_NUM ", "geneweb_sosa_num")
| `Zarith ->
exclude_dir "sosa_array";
exclude_dir "sosa_num";
(" -D SOSA_ZARITH ", "geneweb_sosa_zarith")
| `None -> assert false
in
let gwdb_d, gwdb_pkg =
match !gwdb with
| `None | `Legacy -> (" -D GENEWEB_GWDB_LEGACY", "geneweb.gwdb-legacy")
in
let dune_profile = if !release then "release" else "dev" in
let os_type, os_d, ext, rm, strip =
match
let p = Unix.open_process_in "uname -s" in
let line = input_line p in
close_in p;
line
with
| ("Linux" | "Darwin" | "FreeBSD") as os_type ->
(os_type, " -D UNIX", "", "/bin/rm -f", "strip")
| _ -> ("Win", " -D WINDOWS", ".exe", "rm -f", "true")
in
let ch = open_out "Makefile.config" in
let writeln s = output_string ch @@ s ^ "\n" in
let var name value = writeln @@ name ^ "=" ^ value in
writeln @@ "# This file is generated by " ^ Sys.argv.(0) ^ ".";
var "OS_TYPE" os_type;
var "STRIP" strip;
var "RM" rm;
var "EXT" ext;
var "GWDB_D" gwdb_d;
var "OS_D" os_d;
var "SOSA_D" sosa_d;
var "SYSLOG_D" syslog_d;
var "GWDB_PKG" gwdb_pkg;
var "SOSA_PKG" sosa_pkg;
var "SYSLOG_PKG" syslog_pkg;
var "DUNE_DIRS_EXCLUDE" !dune_dirs_exclude;
var "DUNE_PROFILE" dune_profile;
close_out ch