File: findlib.rst

package info (click to toggle)
ocaml-dune 3.20.2-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 33,564 kB
  • sloc: ml: 175,178; asm: 28,570; ansic: 5,251; sh: 1,096; lisp: 625; makefile: 148; python: 125; cpp: 48; javascript: 10
file content (60 lines) | stat: -rw-r--r-- 2,320 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
Findlib Integration
===================

Dune integrates with `findlib`_ so that it is possible to use a dependency
built with Dune in a project that does not use Dune, or vice versa.

.. _findlib: https://github.com/ocaml/ocamlfind

.. seealso:: :doc:`../explanation/ocaml-ecosystem` explains the role of
   findlib and its relation with Dune.

To do so, Dune both interprets and generates ``META`` files.

How Dune Interprets ``META`` files
----------------------------------

``META`` files use the concept of *predicates*, which can be used to change the
interpretation of the directives the files contain. However, Dune does not
expose this to the user.

Instead, Dune interprets ``META`` files assuming the following set of
predicates:

- ``mt``: refers to a library that can be used with or without threads. Dune
  will force the threaded version.

- ``mt_posix``: forces the use of POSIX threads rather than VM threads. VM
  threads are deprecated and will soon be obsolete.

- ``ppx_driver``: when a library acts differently depending on whether
  it's linked as part of a driver or meant to add a ``-ppx`` argument
  to the compiler, choose the former behavior.

The Special Case of the OCaml Compiler
--------------------------------------

Libraries installed by the compiler are a special case: when the OCaml compiler
is older than version 5.0, it does not include ``META`` files. In that
situation, Dune uses its own internal database.

How Dune Generates ``META`` Files
---------------------------------

When Dune builds a library, it generates a corresponding ``META`` file
automatically. Usually, there is nothing to do. However, for the rare cases
where a specific ``META`` file is needed, or to ease the transition of a
project to Dune, it is possible to write/generate a specific one.

If a ``META.<package>.template`` is found in the same directory as
``<package>.OPAM``, the generated ``META.<package>`` file will be produced by
starting from the contents of ``META.<package>.template`` and replacing lines
of the form ``# DUNE_GEN`` with the contents of the ``META`` it would normally
generate.

For instance, to add ``field = "..."`` to the generated ``META`` file of
package ``pkg``, you can create a file named ``META.pkg.template`` with the
following contents::

  # DUNE_GEN
  blah = "..."