forked from ocaml/dune
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add test of building toplevel that can load plugins
This is in support of PR ocaml#6082. Signed-off-by: Richard L Ford <[email protected]>
- Loading branch information
1 parent
d9725b1
commit 5250c90
Showing
1 changed file
with
196 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,196 @@ | ||
Testsuite for (toplevel that loads plugins). | ||
|
||
$ cat > dune-project <<EOF | ||
> (lang dune 3.7) | ||
> (using dune_site 0.1) | ||
> (name top_with_plugins) | ||
> (wrapped_executables false) | ||
> (map_workspace_root false) | ||
> | ||
> (package | ||
> (name top_with_plugins) | ||
> (sites (lib top_plugins))) | ||
> EOF | ||
|
||
$ cat > dune <<EOF | ||
> (executable | ||
> (public_name top_with_plugins) | ||
> (name top_with_plugins) | ||
> (modes byte) | ||
> (flags :standard -safe-string) | ||
> (modules sites top_with_plugins) | ||
> (link_flags (-linkall)) | ||
> (libraries compiler-libs.toplevel | ||
> top_with_plugins.register dune-site dune-site.plugins | ||
> dune-site.toplevel findlib.dynload)) | ||
> | ||
> (library | ||
> (public_name top_with_plugins.register) | ||
> (modes byte) | ||
> (name registration) | ||
> (modules registration)) | ||
> | ||
> (generate_sites_module | ||
> (module sites) | ||
> (plugins (top_with_plugins top_plugins))) | ||
> EOF | ||
|
||
$ cat > top_with_plugins.ml <<EOF | ||
> let main () = | ||
> print_endline "\nMain app really starts..."; | ||
> (* load all the available plugins *) | ||
> Sites.Plugins.Top_plugins.load_all (); | ||
> print_endline "Main app after loading plugins..."; | ||
> (* Execute the code registered by the plugins *) | ||
> print_endline "Main app executing registered plugins..."; | ||
> Queue.iter (fun f -> f ()) Registration.todo; | ||
> print_endline "Main app after executing registered plugins..."; | ||
> exit (Topmain.main ()) | ||
> | ||
> let () = | ||
> main() | ||
> EOF | ||
|
||
$ cat > registration.ml <<EOF | ||
> let todo : (unit -> unit) Queue.t = Queue.create () | ||
> let register f = | ||
> print_endline "In register"; | ||
> Queue.add f todo; | ||
> print_endline "Done in register"; | ||
> EOF | ||
|
||
$ mkdir plugin1 | ||
$ cat > plugin1/dune-project <<EOF | ||
> (lang dune 3.7) | ||
> (using dune_site 0.1) | ||
> | ||
> (generate_opam_files true) | ||
> (wrapped_executables false) | ||
> (map_workspace_root false) | ||
> (package | ||
> (name top-plugin1)) | ||
> EOF | ||
|
||
$ cat > plugin1/dune <<EOF | ||
> (library | ||
> (public_name top-plugin1.plugin1_impl) | ||
> (modes byte) | ||
> (name plugin1_impl) | ||
> (modules plugin1_impl) | ||
> (libraries top_with_plugins.register)) | ||
> | ||
> (plugin | ||
> (name plugin1) | ||
> (libraries top-plugin1.plugin1_impl) | ||
> (site (top_with_plugins top_plugins))) | ||
> EOF | ||
|
||
$ cat > plugin1/plugin1_impl.ml <<EOF | ||
> let myfun () = | ||
> print_endline "Plugin1 is doing something..." | ||
> | ||
> let () = | ||
> print_endline "Registration of Plugin1"; | ||
> Registration.register myfun; | ||
> print_endline "Done with registration of Plugin1"; | ||
> EOF | ||
|
||
$ mkdir plugin2 | ||
$ cat > plugin2/dune-project <<EOF | ||
> (lang dune 3.7) | ||
> (using dune_site 0.1) | ||
> | ||
> (generate_opam_files true) | ||
> (wrapped_executables false) | ||
> (map_workspace_root false) | ||
> (package | ||
> (name top-plugin2)) | ||
> EOF | ||
|
||
$ cat > plugin2/dune <<EOF | ||
> (library | ||
> (public_name top-plugin2.plugin2_impl) | ||
> (modes byte) | ||
> (name plugin2_impl) | ||
> (modules plugin2_impl) | ||
> (libraries top_with_plugins.register)) | ||
> | ||
> (plugin | ||
> (name plugin2) | ||
> (libraries top-plugin2.plugin2_impl) | ||
> (site (top_with_plugins top_plugins))) | ||
> EOF | ||
|
||
$ cat > plugin2/plugin2_impl.ml <<EOF | ||
> let myfun () = | ||
> print_endline "Plugin2 is doing something..." | ||
> | ||
> let () = | ||
> print_endline "Registration of Plugin2"; | ||
> Registration.register myfun; | ||
> print_endline "Done with registration of Plugin2"; | ||
> EOF | ||
|
||
$ dune build --display short @all 2>&1 | dune_cmd sanitize | ||
ocamldep .top_with_plugins.eobjs/top_with_plugins.impl.d | ||
ocamlc .registration.objs/byte/registration.{cmi,cmo,cmt} | ||
ocamlc .top_with_plugins.eobjs/byte/dune_site__Dune_site_data.{cmo,cmt} | ||
ocamlc .top_with_plugins.eobjs/byte/dune_site_plugins__Dune_site_plugins_data.{cmo,cmt} | ||
ocamlc .top_with_plugins.eobjs/byte/findlib_initl.{cmi,cmo,cmt} | ||
ocamldep .top_with_plugins.eobjs/sites.impl.d | ||
ocamlc registration.cma | ||
ocamlc plugin1/.plugin1_impl.objs/byte/plugin1_impl.{cmi,cmo,cmt} | ||
ocamlc plugin2/.plugin2_impl.objs/byte/plugin2_impl.{cmi,cmo,cmt} | ||
ocamlc .top_with_plugins.eobjs/byte/sites.{cmi,cmo,cmt} | ||
ocamldep .top_with_plugins.eobjs/top_with_plugins.intf.d | ||
ocamlc plugin1/plugin1_impl.cma | ||
ocamlc plugin2/plugin2_impl.cma | ||
ocamlc .top_with_plugins.eobjs/byte/top_with_plugins.{cmi,cmti} | ||
ocamlc .top_with_plugins.eobjs/byte/top_with_plugins.{cmo,cmt} | ||
ocamlc top_with_plugins.bc | ||
ocamlc top_with_plugins.exe | ||
$ dune install --prefix _install | ||
Installing _install/lib/top-plugin1/META | ||
Installing _install/lib/top-plugin1/dune-package | ||
Installing _install/lib/top-plugin1/plugin1_impl/plugin1_impl.cma | ||
Installing _install/lib/top-plugin1/plugin1_impl/plugin1_impl.cmi | ||
Installing _install/lib/top-plugin1/plugin1_impl/plugin1_impl.cmt | ||
Installing _install/lib/top-plugin1/plugin1_impl/plugin1_impl.ml | ||
Installing _install/lib/top_with_plugins/top_plugins/plugin1/META | ||
Installing _install/lib/top-plugin2/META | ||
Installing _install/lib/top-plugin2/dune-package | ||
Installing _install/lib/top-plugin2/plugin2_impl/plugin2_impl.cma | ||
Installing _install/lib/top-plugin2/plugin2_impl/plugin2_impl.cmi | ||
Installing _install/lib/top-plugin2/plugin2_impl/plugin2_impl.cmt | ||
Installing _install/lib/top-plugin2/plugin2_impl/plugin2_impl.ml | ||
Installing _install/lib/top_with_plugins/top_plugins/plugin2/META | ||
Installing _install/lib/top_with_plugins/META | ||
Installing _install/lib/top_with_plugins/dune-package | ||
Installing _install/lib/top_with_plugins/register/registration.cma | ||
Installing _install/lib/top_with_plugins/register/registration.cmi | ||
Installing _install/lib/top_with_plugins/register/registration.cmt | ||
Installing _install/lib/top_with_plugins/register/registration.ml | ||
Installing _install/bin/top_with_plugins | ||
$ export OCAMLPATH=$PWD/_install/lib | ||
$ ./_install/bin/top_with_plugins -no-version <<EOF | ||
> 2+2;; | ||
> #quit;; | ||
> EOF | ||
|
||
Main app really starts... | ||
Registration of Plugin1 | ||
In register | ||
Done in register | ||
Done with registration of Plugin1 | ||
Registration of Plugin2 | ||
In register | ||
Done in register | ||
Done with registration of Plugin2 | ||
Main app after loading plugins... | ||
Main app executing registered plugins... | ||
Plugin1 is doing something... | ||
Plugin2 is doing something... | ||
Main app after executing registered plugins... | ||
# - : int = 4 | ||
# | ||
|