ozl(1)

NAME
ozl - oz linker

SYNOPSIS
ozl FILE options ...

Application development can be considerably eased by splitting the application in a large number of orthogonal and reusable functors. However, deployment of an application gets harder in the presence of a large number of functors: (1) Installing the application requires correct installation of a large number of functors, (2) Execution might be slow due to frequent file- or even network accesses.

The commandline tool ozl eases deployment by creating a new functor that includes imported functors in a prelinked fashion: it is possible to collapse a hierarchy of functors into a single equivalent one. The model that should be kept in mind, is that the newly created functor employs an internal, private module manager that excutes the toplevel application functor together with all included functors.

It is usually invoked as follows:
ozl IN -o OUT where IN is the input functor and OUT is the resulting collapsed functor. ozl understands the following options:

--relative (default), --norelative
    All functors that are referred to by relative urlss are included.

--include=URL,...,URL
    Include all functors whose url matches one of the comma separated url prefixes.

--exclude=URL,...,URL
    Exclude all functors whose url matches one of the comma separated url prefixes.

Note that multiple --include and --exclude directives can be given on the commandline. They have cummulative effect, with the policy that later directives take precedence over earlier ones. For example:
ozl --include=/foo/ --exclude=/foo/bar/ ...
causes all imports from files below directory /foo to be included except those under directory /foo/bar. We can further refine this policy by introducing an exception to the last exclusion pattern and request inclusion of modules imported from below directory /foo/bar/baz:
ozl --include=/foo/ --exclude=/foo/bar/ --include=/foo/bar/baz/ ...

--compress=N, -z N
    The created pickle is compressed with level N (a single digit). By default the compression level N is 0, that is, no compression is employed.

--executable (-x), --noexecutable (default)
    Output the pickled functor as being executable (that is, with an additional header).

--execheader=STRING
    When invoked with option -x the linker first outputs a header so that the output file may be interpreted by the operating system as an executable. Under Unix, the default behaviour is to use the following as header:
    #!/bin/sh
    exec ozengine $0 "$@"
    The --execheader option allows you to specify a different header.

--execpath=STRING
    Uses the header given above in the description of --execheader, except that ozengine is replaced by STRING.

--execfile=FILE
    Reads in FILE and uses this as header. Under Windows, the default behaviour is to use the file provided in ozhome/bin/ozwrapper.bin, where ozhome is Mozart's installation folder. ozwrapper.bin is a Windows executable that launches ozengine.

--execwrapper=FILE
    Reads in ozhome/bin/FILE and uses it as header for executable files. Apart from ozwrapper.bin, an ozwrapperw.bin is supplied that launches ozenginew instead of ozengine. This option provides a convenient way to use this alternative wrapper.

--sequential, --nosequential (default)
    Do not create a thread per executed functor body, rather execute all functor bodies in the same thread in a bottom up fashion. Use with care! In case the functors included have cyclic imports, it is not used.