Unit_info.3o - Man Page

This module centralize the handling of compilation files and their metadata.

Module

Module   Unit_info

Documentation

Module Unit_info
: sig end

This module centralize the handling of compilation files and their metadata​.

Maybe more importantly, this module provides functions for deriving module names from strings or filenames​.

Module name convention and computation

type intf_or_impl =
| Intf
| Impl

type modname = string

type filename = string

type file_prefix = string

type error =
| Invalid_encoding of filename

exception Error of error

val modulize : string -> modname

modulize s capitalizes the first letter of s ​.

val normalize : string -> string

normalize s uncapitalizes the first letter of s ​.

val lax_modname_from_source : filename -> modname

lax_modname_from_source filename is modulize stem where stem is the basename of the filename filename stripped from all its extensions​. For instance, lax_modname_from_source "/pa​.th/x​.ml​.pp" is "X" ​.

val strict_modname_from_source : filename -> modname

Same as Unit_info​.lax_modname_from_source but raises an Unit_info​.error​.Invalid_encoding error on filename with invalid utf8 encoding​.

Module name validation function

val is_unit_name : modname -> bool

is_unit_name name is true only if name can be used as a valid module name​.

Metadata for compilation unit

type t

Metadata for a compilation unit:

-the module name associated to the unit

-the filename prefix (dirname + basename with all extensions stripped) for compilation artifacts

-the input source file For instance, when calling ocamlopt dir/x​.mli -o target/y​.cmi ,

-the input source file is dir/x​.mli

-the module name is Y

-the prefix is target/y

val source_file : t -> filename

source_file u is the source file of u ​.

val prefix : t -> file_prefix

prefix u is the filename prefix of the unit​.

val modname : t -> modname

modname u or artifact_modname a is the module name of the unit or compilation artifact​.

val kind : t -> intf_or_impl

kind u is the kind (interface or implementation) of the unit​.

val check_unit_name : t -> unit

check_unit_name u prints a warning if the derived module name modname u should not be used as a module name as specified by Unit_info​.is_unit_name ~strict:true ​.

val make : ?check_modname:bool -> source_file:filename -> intf_or_impl -> file_prefix -> t

make ~check ~source_file kind prefix associates both the source_file and the module name Unit_info​.lax_modname_from_source target_prefix to the prefix filesystem path prefix ​.

If check_modname=true , this function emits a warning if the derived module name is not valid according to Unit_info​.check_unit_name ​.

module Artifact : sig end

Build artifacts

Derived build artifact metadata

val cmi : t -> Artifact.t

Those functions derive a specific artifact metadata from an unit metadata​.

val cmo : t -> Artifact.t

val cmx : t -> Artifact.t

val obj : t -> Artifact.t

val cmt : t -> Artifact.t

val cmti : t -> Artifact.t

val annot : t -> Artifact.t

val companion_obj : Artifact.t -> Artifact.t

The functions below change the type of an artifact by updating the extension of its filename​. Those functions purposefully do not cover all artifact kinds because we want to track which artifacts are assumed to be bundled together​.

val companion_cmt : Artifact.t -> Artifact.t

val companion_cmi : Artifact.t -> Artifact.t

Beware that companion_cmi a strips all extensions from the filename of a before adding the "​.cmi" suffix contrarily to the other functions which only remove the rightmost extension​. In other words, the companion cmi of a file something​.d​.cmo is something​.cmi and not something​.d​.cmi ​.

Mli and cmi derived from implementation files

The compilation of module implementation changes in presence of mli and cmi files, the function below help to handle this​.

val mli_from_source : t -> filename

mli_from_source u is the interface source filename associated to the unit u ​. The actual suffix depends on Config​.interface_suffix ​.

val mli_from_artifact : Artifact.t -> filename

mli_from_artifact t is the name of the interface source file derived from the artifact t ​. This variant is necessary when handling artifacts derived from an unknown source files (e​.g​. packed modules)​.

val is_cmi : Artifact.t -> bool

Check if the artifact is a cmi

val find_normalized_cmi : t -> Artifact.t

find_normalized_cmi u finds in the load_path a file matching the module name modname u ​.

Raises Not_found if no such cmi exists

Info

2026-09-15 OCamldoc OCaml library