$ dune build $ dune exec mytool m: init $ dune exec mytool inexistent m: init The package "inexistent" can't be found. $ dune exec mytool a m: init a: init $ dune exec mytool_modes_byte a m: init a: init $ dune exec mytool mytool-plugin-b m: init a: init b: init b: registering b: called a: called $ dune exec mytool mytool-plugin-b a m: init a: init b: init b: registering b: called a: called $ dune exec mytool_with_a a: init m: init $ dune exec mytool_with_a mytool-plugin-b a: init m: init b: init b: registering b: called a: called $ dune exec mytool_with_a a mytool-plugin-b a: init m: init b: init b: registering b: called a: called $ dune exec mytool_auto m: init a: init b: init b: registering b: called a: called $ dune exec mytool c_thread m: init c_thread: registering $ cat _build/default/.main.eobjs/findlib_initl.ml-gen Findlib.record_package Findlib.Record_core "dynlink";; Findlib.record_package Findlib.Record_core "findlib";; Findlib.record_package Findlib.Record_core "findlib.dynload";; Findlib.record_package Findlib.Record_core "findlib.internal";; Findlib.record_package Findlib.Record_core "mytool";; Findlib.record_package Findlib.Record_core "threads";; Findlib.record_package Findlib.Record_core "unix";; let preds = [ "mt" ; "mt_posix" ; "ppx_driver" ] in let preds = (if Dynlink.is_native then "native" else "byte") :: preds in Findlib.record_package_predicates preds;;