Module OpamFilter
Formulas on variables, as used in opam files build scripts
Filters are a small language of formulas over strings and booleans used for conditions and text replacements. It has relational operators over strings (using version-number comparison), And, Or and Not boolean operations, dynamic casting (using strings "true" and "false"), and string interpolation. Variables are resolved using a user function returning an option, undefined values are propagated.
String interpolation uses the syntax %{identifier}%
Identifiers have the form
[package:]var[?str_if_true:str_if_false_or_undef]
The last optional part specifies a conversion from boolean to static strings.
The syntax pkg1+pkg2+pkgn:var is allowed as a shortcut to pkg1:var & pkg2:var & pkgn:var.
The special variable pkg:enable is allowed as a shortcut for pkg:installed?enable:disable
val to_string : OpamTypes.filter -> stringPretty-print
val fold_down_left : ('a -> OpamTypes.filter -> 'a) -> 'a -> OpamTypes.filter -> 'aFolds on the tree of a filter
val map_up : (OpamTypes.filter -> OpamTypes.filter) -> OpamTypes.filter -> OpamTypes.filterMaps on all nodes of a filter, bottom-up
val variables : OpamTypes.filter -> OpamTypes.full_variable listReturns all the variables appearing in a filter (including the ones within string interpolations
type env= OpamTypes.full_variable -> OpamTypes.variable_contents optionType of filter environment.
type fident= OpamTypes.name option list * OpamTypes.variable * (string * string) optionThe type of filter idents with (optionally multiple) qualifying package names and optional string converter. Package name
Noneencodes the self-reference_
val map_variables : (OpamTypes.full_variable -> OpamTypes.full_variable) -> OpamTypes.filter -> OpamTypes.filterMaps on all variables appearing in a filter. The case where package variables are renamed differently and appear in a filter ident of the form
%{pkg1+pkg2:var}%is not supported and raisesInvalid_argument.
val map_variables_in_string : (OpamTypes.full_variable -> OpamTypes.full_variable) -> string -> stringSame limitation as
map_variables
val map_variables_in_fident : (OpamTypes.full_variable -> OpamTypes.full_variable) -> fident -> fidentDoes not handle rewriting the variables to different names (which can't be expressed with a
fidentanymore), and raisesInvalid_argument
val distribute_negations : ?neg:bool -> OpamTypes.filter -> OpamTypes.filterDistributes the negations to apply only to atoms
val expand_string : ?partial:bool -> ?default:(string -> string) -> env -> string -> stringRewrites string interpolations within a string.
defaultis applied to the fident string (e.g. what's between%{and}%) when the expansion is undefined. If unspecified, this raisesFailure.With
partial,defaultdefaults to the identity, and is otherwise expected to return a fident. In this case, the returned string is supposed to be expanded again (expansion results are escaped, escapes are otherwise kept). This makes the function idempotent
val unclosed_expansions : string -> ((int * int) * string) listReturns the (beginning, end) offsets and substrings of any unclosed
%{expansions
val eval : ?default:OpamTypes.variable_contents -> env -> OpamTypes.filter -> OpamTypes.variable_contentsComputes the value of a filter. May raise
Failureifdefaultisn't provided
val eval_to_bool : ?default:bool -> env -> OpamTypes.filter -> boolLike
evalbut casts the result to a bool. RaisesInvalid_argumentif not a valid bool and no default supplied.
val opt_eval_to_bool : env -> OpamTypes.filter option -> boolSame as
eval_to_bool, but takes an option as filter and returns alwaystrueonNone,falsewhen the filter isUndefined. This is the most common behaviour for using "filters" for filtering
val eval_to_string : ?default:string -> env -> OpamTypes.filter -> stringLike
evalbut casts the result to a string
val partial_eval : env -> OpamTypes.filter -> OpamTypes.filterReduces what can be, keeps the rest unchanged
val ident_of_var : OpamTypes.full_variable -> fidentWraps a full_variable into a fident accessor
val ident_of_string : string -> fidentA fident accessor directly referring a variable with the given name
val ident_value : ?default:OpamTypes.variable_contents -> env -> fident -> OpamTypes.variable_contentsResolves a filter ident. Like
eval, may raise Failure if no default is provided
val ident_string : ?default:string -> env -> fident -> stringLike
ident_value, but casts the result to a string
val ident_bool : ?default:bool -> env -> fident -> boolLike
ident_value, but casts the result to a bool
val expand_interpolations_in_file : env -> OpamTypes.basename -> unitRewrites
basename.in tobasename, expanding interpolations
val commands : env -> OpamTypes.command list -> string list listProcesses filters evaluation in a command list: parameter expansion and conditional filtering
val single_command : env -> OpamTypes.arg list -> string listProcess a simpler command, without filters
val commands_variables : OpamTypes.command list -> OpamTypes.full_variable listExtracts variables appearing in a list of commands
val of_formula : ('a -> OpamTypes.filter) -> 'a OpamTypes.generic_formula -> OpamTypes.filterConverts a generic formula to a filter, given a converter for atoms
val filter_formula : ?default_version:OpamTypes.version -> ?default:bool -> env -> OpamTypes.filtered_formula -> OpamTypes.formulaResolves the filter in a filtered formula, reducing to a pure formula.
defaultis the assumed result for undefined filters. If a version filter doesn't resolve to a valid version, the constraint is dropped unlessdefault_versionis specified.May raise, as other filter functions, if
defaultis not provided and filters don't resolve.
val partial_filter_formula : env -> OpamTypes.filtered_formula -> OpamTypes.filtered_formulaReduces according to what is defined in
env, and returns the simplified formula
val gen_filter_formula : ('a -> [< `True | `False | `Formula of 'b OpamTypes.generic_formula ]) -> ('c * 'a) OpamFormula.formula -> ('c * 'b OpamTypes.generic_formula) OpamFormula.formulaA more generic formula reduction function, that takes a "partial resolver" as argument
val string_of_filtered_formula : OpamTypes.filtered_formula -> stringval variables_of_filtered_formula : OpamTypes.filtered_formula -> OpamTypes.full_variable listval filter_deps : build:bool -> post:bool -> ?test:bool -> ?doc:bool -> ?dev:bool -> ?default_version:OpamTypes.version -> ?default:bool -> OpamTypes.filtered_formula -> OpamTypes.formulaResolves the build, post, test, doc, dev flags in a filtered formula (which is supposed to have been pre-processed to remove switch and global variables).
defaultdetermines the behaviour on undefined filters, and the function may raise if it is undefined. If a constraint resolves to an invalid version, it is dropped, or replaced withdefault_versionif specified. If test, doc or dev are unspecified, they are assumed to be filtered out already and encountering them will raise an assert.
val deps_var_env : build:bool -> post:bool -> ?test:bool -> ?doc:bool -> ?dev:bool -> envThe environment used in resolving the dependency filters, as per
filter_deps.
val simplify_extended_version_formula : OpamTypes.filter OpamTypes.filter_or_constraint OpamFormula.formula -> OpamTypes.filter OpamTypes.filter_or_constraint OpamFormula.formula optionLike
OpamFormula.simplify_version_formula, but on filtered formulas (filters are kept unchanged, but put in front)
val atomise_extended : OpamTypes.filtered_formula -> (OpamPackage.Name.t * (OpamTypes.filter * (OpamTypes.relop * OpamTypes.filter) option)) OpamFormula.formula