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)
    (fun s -> 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 =
  match Unix.getenv var with
  | exception Not_found -> Unix.putenv var value
  | s -> Unix.putenv var (value^path_sep^s)

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;
  let exe = Filename.concat eclipseexe "eclipse.exe" in
  Unix.execv exe
    [| exe;
       "-b"; "col_solve_dumpeco.pl";
       "-e"; "halt";
       "-g"; "3000M";
    |]