generate_sites_module¶
New in version 2.8.
Dune proposes some facilities for dealing with sites in a program.
The generate_sites_module
stanza will generate code for looking up the
correct locations of the sites’ directories and for loading plugins. It works
after installation with or without the relocation mode, inside Dune rules, and
when using Dune executables. For promotion, it works only if the generated
modules are solely in the executable (or library statically linked) promoted;
generated modules in plugins won’t work.
(generate_sites_module
(module <name>)
<facilities>)
The module’s code is generated in the directory with the given name. The code is populated according to the requested facilities.
The available <facilities>
are:
sourceroot
adds a valueval sourceroot: string option
in the generated module, which contains the value of%{workspace_root}
, if the code has been built locally. It could be used to keep the tool’s configuration file locally when executed withdune exec
or after promotion. The value isNone
once it has been installed.relocatable
adds a valueval relocatable: bool
in the generated module, which indicates if the binary has been installed in the relocatable mode.(sites <package>)
adds a valueval <site>: string list
for each<site>
of<package>
in the submodule Sites of the generated module. The identifier <site> isn’t capitalized.(plugins (<package> <site>) ...)
adds a submodule<site>
with the following signatureS
in the submodulePlugins
of the generated module . The identifier<site>
is capitalized.
module type S = sig
val paths: string list
(** return the locations of the directory containing the plugins *)
val list: unit -> string list
(** return the list of available plugins *)
val load_all: unit -> unit
(** load all the plugins and their dependencies *)
val load: string -> unit
(** load the specified plugin and its dependencies *)
end
The generated module is a dependency on the library dune-site
, and if the
facilities (plugins ...)
are used, it is a dependency on the library
dune-site.plugins
. Those dependencies are not automatically added to the
library or executable which use the module (cf. Plugins and Dynamic Loading of Packages).