Skip to content
Snippets Groups Projects
compile_colibri.ml 1.84 KiB
Newer Older
module S = Set.Make(String)

let env_vars = ref (S.empty)

let env_var_modified v =
    env_vars := S.add v !env_vars

let display_env_vars () =
  let display var = Printf.printf "%s=%s\n" var (Unix.getenv var)
  in S.iter display !env_vars;
     Stdlib.flush Stdlib.stdout

let coldir = Filename.dirname Sys.executable_name

let concats base dirs = List.fold_left Filename.concat base dirs

let eclipsedir = ref (concats coldir ["Bin";"ECLIPSE_V7.0_45"])

let absolutise_cmdline s =
  if Filename.is_relative s then
    Filename.concat (Sys.getcwd ()) s
  else s

let argspec =
  ["--eclipsedir", Arg.String (fun s -> eclipsedir := absolutise_cmdline s), " set eclipsedir directory";
  ]


let () = Arg.parse (Arg.align argspec)
Christophe Junke's avatar
Christophe Junke committed
    (fun _ -> invalid_arg "No anonymous argument")
    "compile_colibri"

let arch = if Sys.win32 then "x86_64_nt" else "x86_64_linux"

let () = Unix.putenv "ECLIPSEDIR" !eclipsedir
let () = Unix.putenv "ARCH" arch

let path_sep = if Sys.win32 then ";" else ":"

let extend_env var value =
  begin
    (match Unix.getenv var with
    | exception Not_found ->
       Unix.putenv var value
    | s -> Unix.putenv var (value^path_sep^s));
    env_var_modified var
  end

let eclipselib = Filename.concat !eclipsedir "lib"
let eclipseexe = Filename.concat eclipselib arch
let colibridir = concats coldir ["Src";"COLIBRI"]

let () =
  if Sys.win32
  then begin
    extend_env "PATH" eclipseexe;
    extend_env "PATH" colibridir;
    extend_env "PATH" (List.fold_left Filename.concat colibridir ["lib";"v7";arch])
  end
  else
    extend_env "LD_LIBRARY_PATH" eclipseexe

let () =
  Sys.chdir colibridir;
  env_var_modified "ECLIPSEDIR";
  env_var_modified "ARCH";
  display_env_vars ();
  let exe = Filename.concat eclipseexe "eclipse.exe" in
  Unix.execv exe
    [| exe;
       "-b"; "col_solve_dumpeco.pl";
       "-e"; "halt";
       "-g"; "3000M";
    |]