The findlib Reference Manual
Prev |  | Next

# site-lib

## Name

site-lib -- [Location of package directories]

## STANDARD LAYOUT

    ...somewhere in the filesystem hierarchy...
       |
       \
         site-lib
         |
         +- (optional) stublibs
         +- (optional) postinstall
         +- (optional) postremove
         |
         +- package1
         |  |
         |  +- META
         |  +- archive files
         |  +- interface definitions
         |
         +- package2
         +
         :
         :
         \
            packageN

## DESCRIPTION

Every installation of "findlib" has a default location for package directories, which is normally a directory called "site-lib". The location can be set by the configuration variables `path` (used to look up packages), and `destdir` (used to install new packages); see findlib.conf.

The name of a package is the name of the package directory. For example, if `destdir=/usr/local/lib/ocaml/site-lib`, the package p will be installed in the subdirectory `/usr/local/lib/ocaml/site-lib/p`. This subdirectory must contain the META file and all other files belonging to the package. Package names must not contain the '.' character.

The variable `destdir` specifies the directory for new packages. You can only have one such directory at a time; but of course you can change this directory in findlib.conf. The command `ocamlfind install` puts new packages into this directory; it is recommended to use this command for installation because it ensures that the directory layout is right.

For searching packages, findlib uses (only) the variable `path` which may name several locations to look at.

For systems with DLL support another directory may exist: stublibs. If present, findlib will install DLLs into this directory that is shared by all packages at the same site-lib location. Findlib remembers which DLL belongs to which package by special files with the suffix ".owner"; e.g. for the DLL "dllpcre.so" there is another file "dllpcre.so.owner" containing the string "pcre", so findlib knows that the package "pcre" owns this DLL. It is not possible that a DLL is owned by several packages.

If the stublibs directory does not exist, DLLs are installed regularly in the package directories like any other file.

For special needs, a postinstall and/or a postremove script may be installed in the site-lib directory. These scripts are invoked after installation or removal of a package, respectively.

## ALTERNATE LAYOUT

    ...somewhere in the filesystem hierarchy...
       |
       \
         site-lib
         |
         +- (optional) stublibs
         +- (optional) postinstall
         +- (optional) postremove
         |
         +- package1
         |  |
         |  +- archive files
         |  +- interface definitions
         |
         +- package2
         +
         :
         :
         \
      :     packageN
      |
      \
        metaregistry
        |
        +- META.package1
        +- META.package2
        +
        :
        \
           META.packageN

This is an alternate directory layout collecting all META files in one directory. You can configure this layout by setting `path` to the absolute location of `metaregistry`. Findlib recognizes that there are META files in this directory and uses them; it is not necessary to include `site-lib` into the `path`.

In order to work, the META files must contain a `directory` directive pointing to the corresponding package directory that resides below `site-lib`.

The command `ocamlfind install` copes with this layout, too. The variable `destdir` must contain the absolute location of `site-lib`, and the variable `metadir` must contain the absolute location of `metaregistry`. Note that `ocamlfind install` automatically adds a `directory` directive to the META file, so you need not do it manually.

Prev | Home | Next
findlib.conf | Up | Library