|
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();;
|