mirror of
https://github.com/c-cube/tiny_httpd.git
synced 2026-01-22 09:26:41 -05:00
7 lines
17 KiB
HTML
7 lines
17 KiB
HTML
<!DOCTYPE html>
|
||
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Unit_info (ocaml.Unit_info)</title><meta charset="utf-8"/><link rel="stylesheet" href="../../_odoc-theme/odoc.css"/><meta name="generator" content="odoc 3.0.0"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body class="odoc"><nav class="odoc-nav"><a href="../index.html">Up</a> – <a href="../../index.html">Index</a> » <a href="../index.html">ocaml</a> » Unit_info</nav><header class="odoc-preamble"><h1>Module <code><span>Unit_info</span></code></h1><p>This module centralize the handling of compilation files and their metadata.</p><p>Maybe more importantly, this module provides functions for deriving module names from strings or filenames.</p></header><div class="odoc-tocs"><nav class="odoc-toc odoc-local-toc"><ul><li><a href="#modname_from_strings">Module name convention and computation</a><ul><li><a href="#module_name_validation">Module name validation function</a></li></ul></li><li><a href="#unit_info">Metadata for compilation unit</a></li><li><a href="#info_build_artifacts">Derived build artifact metadata</a></li><li><a href="#ml_mli_cmi_interaction">Mli and cmi derived from implementation files</a></li></ul></nav></div><div class="odoc-content"><h2 id="modname_from_strings"><a href="#modname_from_strings" class="anchor"></a>Module name convention and computation</h2><div class="odoc-spec"><div class="spec type anchored" id="type-intf_or_impl"><a href="#type-intf_or_impl" class="anchor"></a><code><span><span class="keyword">type</span> intf_or_impl</span><span> = </span></code><ol><li id="type-intf_or_impl.Intf" class="def variant constructor anchored"><a href="#type-intf_or_impl.Intf" class="anchor"></a><code><span>| </span><span><span class="constructor">Intf</span></span></code></li><li id="type-intf_or_impl.Impl" class="def variant constructor anchored"><a href="#type-intf_or_impl.Impl" class="anchor"></a><code><span>| </span><span><span class="constructor">Impl</span></span></code></li></ol></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-modname"><a href="#type-modname" class="anchor"></a><code><span><span class="keyword">type</span> modname</span><span> = string</span></code></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-filename"><a href="#type-filename" class="anchor"></a><code><span><span class="keyword">type</span> filename</span><span> = string</span></code></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-file_prefix"><a href="#type-file_prefix" class="anchor"></a><code><span><span class="keyword">type</span> file_prefix</span><span> = string</span></code></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-error"><a href="#type-error" class="anchor"></a><code><span><span class="keyword">type</span> error</span><span> = </span></code><ol><li id="type-error.Invalid_encoding" class="def variant constructor anchored"><a href="#type-error.Invalid_encoding" class="anchor"></a><code><span>| </span><span><span class="constructor">Invalid_encoding</span> <span class="keyword">of</span> <a href="#type-filename">filename</a></span></code></li></ol></div></div><div class="odoc-spec"><div class="spec exception anchored" id="exception-Error"><a href="#exception-Error" class="anchor"></a><code><span><span class="keyword">exception</span> </span><span><span class="exception">Error</span> <span class="keyword">of</span> <a href="#type-error">error</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-modulize"><a href="#val-modulize" class="anchor"></a><code><span><span class="keyword">val</span> modulize : <span>string <span class="arrow">-></span></span> <a href="#type-modname">modname</a></span></code></div><div class="spec-doc"><p><code>modulize s</code> capitalizes the first letter of <code>s</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-normalize"><a href="#val-normalize" class="anchor"></a><code><span><span class="keyword">val</span> normalize : <span>string <span class="arrow">-></span></span> string</span></code></div><div class="spec-doc"><p><code>normalize s</code> uncapitalizes the first letter of <code>s</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-lax_modname_from_source"><a href="#val-lax_modname_from_source" class="anchor"></a><code><span><span class="keyword">val</span> lax_modname_from_source : <span><a href="#type-filename">filename</a> <span class="arrow">-></span></span> <a href="#type-modname">modname</a></span></code></div><div class="spec-doc"><p><code>lax_modname_from_source filename</code> is <code>modulize stem</code> where <code>stem</code> is the basename of the filename <code>filename</code> stripped from all its extensions. For instance, <code>modname_from_source "/pa.th/x.ml.pp"</code> is <code>"X"</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-strict_modname_from_source"><a href="#val-strict_modname_from_source" class="anchor"></a><code><span><span class="keyword">val</span> strict_modname_from_source : <span><a href="#type-filename">filename</a> <span class="arrow">-></span></span> <a href="#type-modname">modname</a></span></code></div><div class="spec-doc"><p>Same as <a href="#val-lax_modname_from_source"><code>lax_modname_from_source</code></a> but raises an <a href="#type-error.Invalid_encoding"><code>error.Invalid_encoding</code></a> error on filename with invalid utf8 encoding.</p></div></div><h3 id="module_name_validation"><a href="#module_name_validation" class="anchor"></a>Module name validation function</h3><div class="odoc-spec"><div class="spec value anchored" id="val-is_unit_name"><a href="#val-is_unit_name" class="anchor"></a><code><span><span class="keyword">val</span> is_unit_name : <span><a href="#type-modname">modname</a> <span class="arrow">-></span></span> bool</span></code></div><div class="spec-doc"><p><code>is_unit_name name</code> is true only if <code>name</code> can be used as a valid module name.</p></div></div><h2 id="unit_info"><a href="#unit_info" class="anchor"></a>Metadata for compilation unit</h2><div class="odoc-spec"><div class="spec type anchored" id="type-t"><a href="#type-t" class="anchor"></a><code><span><span class="keyword">type</span> t</span></code></div><div class="spec-doc"><p>Metadata for a compilation unit:</p><ul><li>the module name associated to the unit</li><li>the filename prefix (dirname + basename with all extensions stripped) for compilation artifacts</li><li>the input source file For instance, when calling <code>ocamlopt dir/x.mli -o target/y.cmi</code>,</li><li>the input source file is <code>dir/x.mli</code></li><li>the module name is <code>Y</code></li><li>the prefix is <code>target/y</code></li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-source_file"><a href="#val-source_file" class="anchor"></a><code><span><span class="keyword">val</span> source_file : <span><a href="#type-t">t</a> <span class="arrow">-></span></span> <a href="#type-filename">filename</a></span></code></div><div class="spec-doc"><p><code>source_file u</code> is the source file of <code>u</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-prefix"><a href="#val-prefix" class="anchor"></a><code><span><span class="keyword">val</span> prefix : <span><a href="#type-t">t</a> <span class="arrow">-></span></span> <a href="#type-file_prefix">file_prefix</a></span></code></div><div class="spec-doc"><p><code>prefix u</code> is the filename prefix of the unit.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-modname"><a href="#val-modname" class="anchor"></a><code><span><span class="keyword">val</span> modname : <span><a href="#type-t">t</a> <span class="arrow">-></span></span> <a href="#type-modname">modname</a></span></code></div><div class="spec-doc"><p><code>modname u</code> or <code>artifact_modname a</code> is the module name of the unit or compilation artifact.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-kind"><a href="#val-kind" class="anchor"></a><code><span><span class="keyword">val</span> kind : <span><a href="#type-t">t</a> <span class="arrow">-></span></span> <a href="#type-intf_or_impl">intf_or_impl</a></span></code></div><div class="spec-doc"><p><code>kind u</code> is the kind (interface or implementation) of the unit.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-check_unit_name"><a href="#val-check_unit_name" class="anchor"></a><code><span><span class="keyword">val</span> check_unit_name : <span><a href="#type-t">t</a> <span class="arrow">-></span></span> unit</span></code></div><div class="spec-doc"><p><code>check_unit_name u</code> prints a warning if the derived module name <code>modname u</code> should not be used as a module name as specified by <a href="#val-is_unit_name"><code>is_unit_name</code></a><code> ~strict:true</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-make"><a href="#val-make" class="anchor"></a><code><span><span class="keyword">val</span> make :
|
||
<span><span class="optlabel">?check_modname</span>:bool <span class="arrow">-></span></span>
|
||
<span><span class="label">source_file</span>:<a href="#type-filename">filename</a> <span class="arrow">-></span></span>
|
||
<span><a href="#type-intf_or_impl">intf_or_impl</a> <span class="arrow">-></span></span>
|
||
<span><a href="#type-file_prefix">file_prefix</a> <span class="arrow">-></span></span>
|
||
<a href="#type-t">t</a></span></code></div><div class="spec-doc"><p><code>make ~check ~source_file kind prefix</code> associates both the <code>source_file</code> and the module name <code>modname_from_source</code><code> target_prefix</code> to the prefix filesystem path <code>prefix</code>.</p><p>If <code>check_modname=true</code>, this function emits a warning if the derived module name is not valid according to <a href="#val-check_unit_name"><code>check_unit_name</code></a>.</p></div></div><div class="odoc-spec"><div class="spec module anchored" id="module-Artifact"><a href="#module-Artifact" class="anchor"></a><code><span><span class="keyword">module</span> <a href="Artifact/index.html">Artifact</a></span><span> : <span class="keyword">sig</span> ... <span class="keyword">end</span></span></code></div></div><h2 id="info_build_artifacts"><a href="#info_build_artifacts" class="anchor"></a>Derived build artifact metadata</h2><div class="odoc-spec"><div class="spec value anchored" id="val-cmi"><a href="#val-cmi" class="anchor"></a><code><span><span class="keyword">val</span> cmi : <span><a href="#type-t">t</a> <span class="arrow">-></span></span> <a href="Artifact/index.html#type-t">Artifact.t</a></span></code></div><div class="spec-doc"><p>Those functions derive a specific <code>artifact</code> metadata from an <code>unit</code> metadata.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-cmo"><a href="#val-cmo" class="anchor"></a><code><span><span class="keyword">val</span> cmo : <span><a href="#type-t">t</a> <span class="arrow">-></span></span> <a href="Artifact/index.html#type-t">Artifact.t</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-cmx"><a href="#val-cmx" class="anchor"></a><code><span><span class="keyword">val</span> cmx : <span><a href="#type-t">t</a> <span class="arrow">-></span></span> <a href="Artifact/index.html#type-t">Artifact.t</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-obj"><a href="#val-obj" class="anchor"></a><code><span><span class="keyword">val</span> obj : <span><a href="#type-t">t</a> <span class="arrow">-></span></span> <a href="Artifact/index.html#type-t">Artifact.t</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-cmt"><a href="#val-cmt" class="anchor"></a><code><span><span class="keyword">val</span> cmt : <span><a href="#type-t">t</a> <span class="arrow">-></span></span> <a href="Artifact/index.html#type-t">Artifact.t</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-cmti"><a href="#val-cmti" class="anchor"></a><code><span><span class="keyword">val</span> cmti : <span><a href="#type-t">t</a> <span class="arrow">-></span></span> <a href="Artifact/index.html#type-t">Artifact.t</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-annot"><a href="#val-annot" class="anchor"></a><code><span><span class="keyword">val</span> annot : <span><a href="#type-t">t</a> <span class="arrow">-></span></span> <a href="Artifact/index.html#type-t">Artifact.t</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-companion_obj"><a href="#val-companion_obj" class="anchor"></a><code><span><span class="keyword">val</span> companion_obj : <span><a href="Artifact/index.html#type-t">Artifact.t</a> <span class="arrow">-></span></span> <a href="Artifact/index.html#type-t">Artifact.t</a></span></code></div><div class="spec-doc"><p>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.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-companion_cmt"><a href="#val-companion_cmt" class="anchor"></a><code><span><span class="keyword">val</span> companion_cmt : <span><a href="Artifact/index.html#type-t">Artifact.t</a> <span class="arrow">-></span></span> <a href="Artifact/index.html#type-t">Artifact.t</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-companion_cmi"><a href="#val-companion_cmi" class="anchor"></a><code><span><span class="keyword">val</span> companion_cmi : <span><a href="Artifact/index.html#type-t">Artifact.t</a> <span class="arrow">-></span></span> <a href="Artifact/index.html#type-t">Artifact.t</a></span></code></div><div class="spec-doc"><p>Beware that <code>companion_cmi a</code> strips all extensions from the filename of <code>a</code> before adding the <code>".cmi"</code> suffix contrarily to the other functions which only remove the rightmost extension. In other words, the companion cmi of a file <code>something.d.cmo</code> is <code>something.cmi</code> and not <code>something.d.cmi</code>.</p></div></div><h2 id="ml_mli_cmi_interaction"><a href="#ml_mli_cmi_interaction" class="anchor"></a>Mli and cmi derived from implementation files</h2><p>The compilation of module implementation changes in presence of mli and cmi files, the function belows help to handle this.</p><div class="odoc-spec"><div class="spec value anchored" id="val-mli_from_source"><a href="#val-mli_from_source" class="anchor"></a><code><span><span class="keyword">val</span> mli_from_source : <span><a href="#type-t">t</a> <span class="arrow">-></span></span> <a href="#type-filename">filename</a></span></code></div><div class="spec-doc"><p><code>mli_from_source u</code> is the interface source filename associated to the unit <code>u</code>. The actual suffix depends on <a href="../Config/index.html#val-interface_suffix"><code>Config.interface_suffix</code></a>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-mli_from_artifact"><a href="#val-mli_from_artifact" class="anchor"></a><code><span><span class="keyword">val</span> mli_from_artifact : <span><a href="Artifact/index.html#type-t">Artifact.t</a> <span class="arrow">-></span></span> <a href="#type-filename">filename</a></span></code></div><div class="spec-doc"><p><code>mli_from_artifact t</code> is the name of the interface source file derived from the artifact <code>t</code>. This variant is necessary when handling artifacts derived from an unknown source files (e.g. packed modules).</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-is_cmi"><a href="#val-is_cmi" class="anchor"></a><code><span><span class="keyword">val</span> is_cmi : <span><a href="Artifact/index.html#type-t">Artifact.t</a> <span class="arrow">-></span></span> bool</span></code></div><div class="spec-doc"><p>Check if the artifact is a cmi</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-find_normalized_cmi"><a href="#val-find_normalized_cmi" class="anchor"></a><code><span><span class="keyword">val</span> find_normalized_cmi : <span><a href="#type-t">t</a> <span class="arrow">-></span></span> <a href="Artifact/index.html#type-t">Artifact.t</a></span></code></div><div class="spec-doc"><p><code>find_normalized_cmi u</code> finds in the load_path a file matching the module name <code>modname u</code>.</p><ul class="at-tags"><li class="raises"><span class="at-tag">raises</span> <code>Not_found</code> <p>if no such cmi exists</p></li></ul></div></div></div></body></html>
|