generate_sites_module¶
Added 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:
sourcerootadds a valueval sourceroot: string optionin 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 execor after promotion. The value isNoneonce it has been installed.relocatableadds a valueval relocatable: boolin the generated module, which indicates if the binary has been installed in the relocatable mode.(sites <package>)adds a valueval <site>: string listfor 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 signatureSin the submodulePluginsof 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).