Module Ocaml_version

Manipulate, parse and generate OCaml version strings.

These are of the form major.minor.patch+extra, where the patch and extra fields are optional.

type t

Type of an OCaml version string

val v : ?⁠patch:int -> ?⁠extra:string -> int -> int -> t

v ?patch ?extra major minor will construct an OCaml version string with the appropriate parameters. The patch and extra indicators are optional, but it is conventional to include a patch value of 0 for most recent OCaml releases.

Parsers and serializers

val to_string : ?⁠sep:char -> t -> string

to_string ?sep t will convert the version t into a human-readable representation. The sep will default to + which is the normal representation of extra version strings, but can be changed to another character by supplying sep. One such usecase is to generate Docker container tags from OCaml version strings, where only dashes and alphanumeric characters are allowed.

val of_string : string -> (t[> `Msg of string ]) Stdlib.result

of_string t will parse the version string in t. The return value is compatible with the Result combinators defined in the rresult library.

val of_string_exn : string -> t

of_string_exn t behaves as of_string but raises Invalid_argument if the string cannot be parsed.

val equal : t -> t -> bool

equal a b is the equality function for two OCaml version strings. Returns true if they are equal, false if they are not.

val compare : t -> t -> int

compare a b is the comparison function for two OCaml version strings. Returns -1 if a<b, 0 if they are equal and 1 if a>b. Comparison is done using integer comparison for the major, minor and patch versions, and lexical comparison for any extra version strings present.

val pp : Stdlib.Format.formatter -> t -> unit

pp fmt t will output a human-readable version string of t to the fmt formatter.

Architecture Support

type arch = [
| `I386
| `X86_64
| `Aarch64
| `Aarch32
| `Ppc64le
]

Type of CPU architectures. TODO: This is currently an incomplete list, and lists just those used by the opam test systems. Contributions welcome to complete it.

val arches : arch list

arches is an enumeration of all of the possible arch values.

val string_of_arch : arch -> string

string_of_arch arch will convert arch into a human-readable CPU architecture string. The result will follow the GOARCH convention used by Golang.

val arch_of_string : string -> (arch[> `Msg of string ]) Stdlib.result

arch_of_string t will parse the architecture string in t. The return value is compatible with the Result combinators defined in the rresult library. This function is liberal and will attempt to understand variants of the same architecture. For example, both aarch64 and arm64 are parsed into `Aarch64.

val arch_of_string_exn : string -> arch

arch_of_string_exn t is the same as arch_of_string, except that it raises Invalid_argument in case of error.

val arch_is_32bit : arch -> bool

arch_is_32bit t will return true if the architecture has a 32-bit wordsize.

val to_opam_arch : arch -> string

to_opam_arch arch will return a string that is compatible with opam's %{arch}% variable.

val of_opam_arch : string -> arch option

of_opam_arch s will try to convert s that represents an opam %{arch}% variable to an arch value.

val to_docker_arch : arch -> string

to_docker_arch arch will return a string that is compatible with a Docker multiarch property. This can be used in --platform flags to docker run, for example.

val of_docker_arch : string -> arch option

of_docker_arch s will try to convert s that represents a Docker multiarch variable to an arch value.

Accessors

val major : t -> int

major t will return the major version number of an OCaml release. For example, of_string "4.03.0" |> major will return 4.

val minor : t -> int

minor t will return the minor version number of an OCaml release. For example, of_string "4.03.0" |> minor will return 3.

val patch : t -> int option

patch t will return the patch version number of an OCaml release. For example, of_string "4.03.0" |> minor will return Some 0.

val extra : t -> string option

extra t will return the additional information string of an OCaml release. For example, of_string "4.03.0+flambda" |> extra will return Some "flambda".

val with_variant : t -> string option -> t

with_variant t extra will return a fresh value with the extra version information in t to extra, and remove it if None is supplied.

val without_variant : t -> t

without_variant t is with_variant t None. It removes any extra version information from the version string t.

val with_patch : t -> int option -> t

with_patch t patch will return a fresh value with the patch number in t to patch, and remove it if None is supplied.

val without_patch : t -> t

without_patch t is as with_patch t None. It removes the least significant number from the version string. This is useful for the Docker OCaml containers, which are all named without a patch number and compiled using the latest patch release (e.g. 4.06 instead of 4.06.1).

val with_just_major_and_minor : t -> t

with_just_major_and_minor t strips out any patch and extra version information to return the X.Y form of the OCaml release. For example, 4.08.0+trunk+flambda will return the version representing 4.08.

Constants

val sys_version : t

sys_version is the version of OCaml that this library is currently compiled with, which will be the same as Sys.ocaml_version.

module Releases : sig ... end

Values representing official releases of OCaml.

module Sources : sig ... end

Values relating to the source code and version control of OCaml

Feature Selection

module Since : sig ... end

Determine which release a feature or architecture first appeared in.

module Has : sig ... end

Test whether a release has a given feature.

module Configure_options : sig ... end

Configuration parameters that affect the behaviour of OCaml at compiler-build-time.

val compiler_variants : arch -> t -> t list

compiler_variants v returns a list of configuration options that are available and useful for version v of the compiler.

val trunk_variants : arch -> t list

trunk_variants v returns a list of OCaml version configurations that should be working and tested on the trunk version of the compiler.

module Opam : sig ... end

Opam compiler switches. These are available from the public opam-repository.