let register tname ((opts, af) as options) deps process is_filled =
if is_registered tname then
failwith ("Task registration problem: "^tname
^" is already registered")
else if (List.exists (List.exists (notf is_registered)) deps) then
failwith ("Task registration problem: the dependencies cannot be met for "
^ tname ^".")
else
Hashtbl.add registered_tasks tname
{
name = tname;
options = options;
depends_on = deps;
process =
{
input_type = deps;
output_type = tname;
code = as_process_code tname deps process
};
is_filled = is_filled
}