Blame src/findlib/topfind_rd1.p

Packit b513ef
(* $Id$ -*- tuareg -*- *)
Packit b513ef
Packit b513ef
(* For Ocaml-3.03 and up, so you can do: #use "topfind" and get a
Packit b513ef
 * working findlib toploop.
Packit b513ef
 *)
Packit b513ef
Packit b513ef
#directory "@SITELIB@/findlib";;
Packit b513ef
  (* OCaml-4.00 requires to have #directory before we load anything *)
Packit b513ef
Packit b513ef
#directory "+compiler-libs";;
Packit b513ef
  (* For OCaml-4.00. This directory will be later removed from path *)
Packit b513ef
Packit b513ef
(* First test whether findlib_top is already loaded. If not, load it now.
Packit b513ef
 * The test works by executing the toplevel phrase "Topfind.reset" and
Packit b513ef
 * checking whether this causes an error.
Packit b513ef
 *)
Packit b513ef
let exec_test s =
Packit b513ef
  let l = Lexing.from_string s in
Packit b513ef
  let ph = !Toploop.parse_toplevel_phrase l in
Packit b513ef
  let fmt = Format.make_formatter (fun _ _ _ -> ()) (fun _ -> ()) in
Packit b513ef
  try
Packit b513ef
    Toploop.execute_phrase false fmt ph
Packit b513ef
  with
Packit b513ef
      _ -> false
Packit b513ef
in
Packit b513ef
let is_native =
Packit b513ef
  (* one of the few observable differences... *)
Packit b513ef
  Gc.((get()).stack_limit) = 0 in
Packit b513ef
let suffix =
Packit b513ef
  if is_native then "cmxs" else "cma" in
Packit b513ef
if not(exec_test "Topfind.reset;;") then (
Packit b513ef
  Topdirs.dir_load Format.err_formatter ("@SITELIB@/findlib/findlib." ^ suffix);
Packit b513ef
  Topdirs.dir_load Format.err_formatter ("@SITELIB@/findlib/findlib_top." ^ suffix);
Packit b513ef
);
Packit b513ef
;;
Packit b513ef
Packit b513ef
#remove_directory "+compiler-libs";;
Packit b513ef
Packit b513ef
(* Old: *)
Packit b513ef
(* #load "@SITELIB@/findlib/findlib.cma";; *)
Packit b513ef
(* #load "@SITELIB@/findlib/findlib_top.cma";; *)
Packit b513ef
Packit b513ef
Packit b513ef
(* The following is always executed. It is harmless if findlib was already
Packit b513ef
 * initialized
Packit b513ef
 *)
Packit b513ef
Packit b513ef
let is_native =
Packit b513ef
  (* one of the few observable differences... *)
Packit b513ef
  Gc.((get()).stack_limit) = 0 in
Packit b513ef
let pred =
Packit b513ef
  if is_native then "native" else "byte" in
Packit b513ef
Topfind.add_predicates [ pred; "toploop" ];
Packit b513ef
Topfind.don't_load ["findlib"];
Packit b513ef
Topfind.announce();;