From 382ee49700c4b4ee78ba95b2e86866ebd3b35d74 Mon Sep 17 00:00:00 2001 From: Emilio Jesus Gallego Arias Date: Wed, 7 Mar 2018 01:33:17 +0100 Subject: [stm] Make toplevels standalone executables. We turn coqtop "plugins" into standalone executables, which will be installed in `COQBIN` and located using the standard `PATH` mechanism. Using dynamic linking for `coqtop` customization didn't make a lot of sense, given that only one of such "plugins" could be loaded at a time. This cleans up some code and solves two problems: - `coqtop` needing to locate plugins, - dependency issues as plugins in `stm` depended on files in `toplevel`. In order to implement this, we do some minor cleanup of the toplevel API, making it functional, and implement uniform build rules. In particular: - `stm` and `toplevel` have become library-only directories, - a new directory, `topbin`, contains the new executables, - 4 new binaries have been introduced, for coqide and the stm. - we provide a common and cleaned up way to locate toplevels. --- topbin/coqproofworker_bin.ml | 14 ++++++++++++++ topbin/coqqueryworker_bin.ml | 13 +++++++++++++ topbin/coqtacticworker_bin.ml | 13 +++++++++++++ topbin/coqtop_bin.ml | 16 ++++++++++++++++ topbin/coqtop_byte_bin.ml | 34 ++++++++++++++++++++++++++++++++++ 5 files changed, 90 insertions(+) create mode 100644 topbin/coqproofworker_bin.ml create mode 100644 topbin/coqqueryworker_bin.ml create mode 100644 topbin/coqtacticworker_bin.ml create mode 100644 topbin/coqtop_bin.ml create mode 100644 topbin/coqtop_byte_bin.ml (limited to 'topbin') diff --git a/topbin/coqproofworker_bin.ml b/topbin/coqproofworker_bin.ml new file mode 100644 index 0000000000..7ae91cfbd3 --- /dev/null +++ b/topbin/coqproofworker_bin.ml @@ -0,0 +1,14 @@ +(************************************************************************) +(* * The Coq Proof Assistant / The Coq Development Team *) +(* v * INRIA, CNRS and contributors - Copyright 1999-2018 *) +(* f () + | _ -> () + end + with + | Not_found -> () + end; + let ppf = Format.std_formatter in + Mltop.(set_top + { load_obj = (fun f -> if not (Topdirs.load_file ppf f) + then CErrors.user_err Pp.(str ("Could not load plugin "^f)) + ); + use_file = Topdirs.dir_use ppf; + add_dir = Topdirs.dir_directory; + ml_loop = (fun () -> Toploop.loop ppf); + }) + +(* Main coqtop initialization *) +let _ = + drop_setup (); + Coqtop.(start_coq coqtop_toplevel) -- cgit v1.2.3