Settings in the META file suffice the general form:
varname ( predname1, predname2, ... ) = "value"
The names in the parantheses are called formal predicates and express a condition which must hold such that the value on the right side is selected. When querying information you can specify a set of actual predicates that are assumed to be true. There are the following standard predicates:
The "byte" predicate means that the bytecode compiler is used.
The "native" predicate means that the native compiler is used.
The "toploop" predicate means that the toploop is available in the linked program.
The "mt" predicate means that the program is multi-threaded.
The "mt_posix" predicate means that in the case "mt" is set, too, the POSIX libraries are used to implement threads.
The "gprof" predicate means that in the case "native" is set, too, the program is compiled for profiling
The "autolink" predicate indicates that ocamlc is able to perform automatic linking.
It is possible to have more predicates indicating different environments; just use them, it is not necessary to declare them anywhere.
The value which is selected for a variable depends on the set of assumed predicates. In order to get selected, all formal predicates must be included in the set of actual predicates; if still multiple values fulfill this condition, the value with the maximum number of formal predicates is used; and if still in doubt, the first of these in the META file is taken.
This rule has the advantage that it is a boolean "and-or" expression and that every condition can be formulated using it.