Jenga API - Monadic Style.
This signature provides the interface between the `user-code' which describes the
build rules etc for a specific instance of jenga, and the core jenga build system.
What is ultimately the main entry point of this module is Env, at the bottom.
module Path : sig ... endmodule Located_error : sig ... endmodule Kind : sig ... endmodule Glob : sig ... endmodule Alias : sig ... endAn Alias is the name of a symbolic target.
Alias.create ~dir:"a" "foo" is what you get on the command line by writing jenga
a/.foo.
When no arguments are given at the command line, jenga interprets it as building
the alias "DEFAULT" in the current directory.
module Sandbox : sig ... endSandboxing in the act of running a compilation into a separate directory, for the purpose of enforcing that dependencies and targets be properly specified (instead of trusting the user to get them right).
module Action : sig ... endmodule Shell : sig ... endmodule Var : sig ... endReflected and Reflect are the two parts of the reflection api of jenga, ie the api
that allows the jenga rules to ask about the structure of the dependency graph.
There have been two uses of this api so far:
module Reflected : sig ... endmodule Reflect : sig ... endmodule Rule : sig ... endA rule specifies how to build a Goal.t. There is no nothing of scoping or
permissions, so all rules can be referred to at the command line, and by any Dep.t.
module Scheme : sig ... endA scheme describes, for a given directory, what rules are available in that
directory. A scheme can include computation (in the form of Scheme.dep) but
there are limits to what can be done, because jenga will reject anything that
looks like a dependency cycle.
module Env : sig ... endThe jenga API intentionally shadows printf, so that if opened in jenga/root.ml the
default behaviour is for printf to print via jenga's message system, and not
directly to stdout. Sending to stdout makes no sense for a dameonized jenga server.
printf sends messages via jenga's own message system, (i.e. not directly to stdout).
Messages are logged, transmitted to jenga trace clients, and displayed to stdout if
the jenga server is not running as a daemon.
printf_verbose is like printf, except the message are tagged as `verbose', so
allowing non-verbose clients to mask the message
There is no need to append a \n to the string passed to printf or printf_verbose.
val printf : ('a, unit, string, unit) Core.format4 ‑> 'aval printf_verbose : ('a, unit, string, unit) Core.format4 ‑> 'aval run_action_now : Action.t ‑> unit Async.Deferred.tval run_action_now_stdout : Action.t ‑> string Async.Deferred.t