Provided by: mozart-stdlib_20060615-6_all bug

NAME

       Ozmake - Make for Oz

SYNOPSIS

       ozmake --help
       ozmake [--build] [TARGETS...]
       ozmake --install [TARGETS...]
       ozmake --install [--package=PKG]
       ozmake --uninstall [--package=PKG]
       ozmake --clean
       ozmake --veryclean
       ozmake --create [--package=FILE]
       ozmake --publish
       ozmake --extract [--package=PKG]
       ozmake --list [--package=MOGUL]
       ozmake --config=(put|delete|list) ...
       ozmake --mogul=(put|delete|list|export) ...

       DESCRIPTION
       ozmake OPTIONS TARGETS

       ozmake  is  a tool for building Mozart-based projects and for creating and installing Mozart packages. It
       was inspired by the Unix tools make and rpm,but is much, much simpler, is  specialized  for  Mozart-based
       software  development  and  deployment, and transparently supports all platforms on which Mozart has been
       ported.  ozmake must currently be invoked from a shell, but it will eventually  acquire  additionally  an
       optional, user-friendly graphical interface.

OPTIONS

       In the following, we write meta variables between angle brackets, e.g. <PREFIX> or <URI as cache path>

   General Options
       -v  --verbose
              print  out  more  tracing  information  that the default. By supplying this option twice, you will
              sometimes get even more information.

       -q  --quiet
              suppress all tracing and feedback information

       -n  --just-print
              perform a dry run, i.e. just print what would happen without actually performing the actions

       --local
              do not recurse into subdirectories

       --(no)autodepend
              default: true
              automatically determine build-time and install-time (run-time) dependencies.  Currently,  this  is
              only supported for Oz sources by looking at import and require sections.

       --(no)requires
              default: true
              automatically  fetch  and  install  other  packages  that the current one requires. This option is
              relevant both for building and for installing.

       What you should remember here, is that -vn is your friend. Add -vn at the end of any  ozmake  invocation,
       and it will tell you in great detail what the command would do, without actually doing it.

   Directories and URLs
       --prefix=<PREFIX>
              default: ~/.oz
              root of private installation area

       --dir=<DIR>
              default: current directory
              default directory for other options below

       --builddir=<BUILDDIR>
              default: <DIR>
              directory in which to build

       --srcdir=<SRCDIR>
              default: <DIR>
              directory where source files are located

       --bindir=<BINDIR>
              default: <PREFIX>/bin
              directory where bin targets are placed

       --libroot=<LIBROOT>
              default: <PREFIX>/cache
              root directory of cache into which lib targets are installed

       --libdir=<LIBDIR>
              default: <LIBROOT>/<URI as cache path>
              directory into which lib targets are installed

       --docroot=<DOCROOT>
              default: <PREFIX>/doc
              root directory into which doc targets are installed

       --docdir=<DOCDIR>
              default: <DOCROOT>/<MOGUL as filename>
              directory into which doc targets are installed

       --extractdir=<EXTRACTDIR>
              default: <DIR>
              directory into which to extract a package

       --archive=<ARCHIVE>
              default: http://www.mozart-oz.org/mogul/pkg
              URL of mogul archive from which packages can be downloaded

       --moguldir=<MOGULDIR>
              directory  in  which  are  placed  sub-directories  for  the user's contributions: a directory for
              packages, one for documentation, one for mogul database entries.

       --mogulurl=<MOGULURL>
              url corresponding to the MOGULDIR directory

   Files
       -m <FILE>  --makefile=<FILE>
              default: <SRCDIR>/makefile.oz
              location of makefile

       -p <PKG>  --package=<PKG>
              file or URL of package. when creating a package, it should be a local filename. when extracting or
              installing, it can also be a URL or a mogul id; in the latter case, the package  is  automatically
              downloaded from the mogul archive

       -V <VERSION>  --packageversion=<VERSION>
              this  option is respected by  --extract  and   --install .When  --extract  is given a MOGUL id and
              downloads the corresponding package from the  MOGUL  archive,  it  will  look  precisely  for  the
              given VERSION of the package.  --install will simply check that the package to be installed really
              has this VERSION.

       --database=<DB>
              default: <PREFIX>/DATABASE
              base path of installed packages database. The database is saved in both pickled and textual format
              respectively in files DB.ozf and DB.txt

   Help
       ozmake --help

       -h  --help
              print this information message

   Build
       ozmake [--build]
              build all targets

       ozmake [--build] FILES...
              build these target

       -b  --build
              this is the default. builds targets of the package

       --optlevel=( none | debug | optimize )
              default: optimize
              select optimization level for compilation

       -g  --debug  --optlevel=debug
              compile with debugging

       -O  --optimize  --optlevel=optimize
              compile with full optimization. this is the default

       --(no)gnu
              is  the  C++  compiler  the  GNU  compiler.  this is determined automatically and allows a greater
              optimization level, namely passing  -O3  rather than just  -O  to the compiler

       --(no)fullbuild
              default: false
              also build the src targets

       --includedir DIR  -I DIR
              tell the C++ compiler to additionally search DIR for include files

       --(no)sysincludedirs
              default: true
              tell the C++ compiler to additionally search (or not, if using   --nosysincludedirs  )the  Mozart-
              specific  include  directories  located  in  the  global  installation directory and in the user's
              private ~/.oz area.

       --librarydir DIR  -L DIR
              tell the C++ linker to additionally search DIR for libraries

       --(no)syslibrarydirs
              default: true
              tell the C++ linker to additionally search (or not,  if  using   --nosyslibrarydirs  )the  Mozart-
              specific  library  directories  located  in  the  global  installation directory and in the user's
              private ~/.oz area.

   Install
       ozmake --install
              install using the makefile

       ozmake --install FILES...
              install these targets using the makefile

       ozmake --install --package=PKG
              install package  PKG

       -i  --install
              install targets of the package and updates the package database

       --grade=( none | same | up | down | any | freshen )
              default: none
              what to do if this package is already installed? ozmake will compare version and dates, where  the
              version  is  more  significant.   --grade=none signals an error --grade=same requires versions and
              dates to be the same --grade=up requires a package with newer version or same  version  and  newer
              release  date  than  the  one installed --grade=down requires a package with older version or same
              version and older release date than the one installed --grade=any  no  conditions  --grade=freshen
              install if the package is newer else do nothing

       -U  --upgrade
              equivalent to  --install --grade=up

       --downgrade
              equivalent to  --install --grade=down

       -A  --anygrade
              equivalent to  --install --grade=any

       -F  --freshen
              equivalent to  --install --grade=freshen

       --(no)replacefiles
              default: false
              allow installation to overwrite files from other packages

       -R  --replace
              equivalent to  --install --grade=any --replacefiles

       --(no)extendpackage
              default: false
              whether to replace or extend the current installation of this package if any

       -X  --extend
              equivalent to  --install --grade=any --extendpackage

       --(no)savedb
              default: true
              save the updated database after installation

       --includedocs  --excludedocs
              default: --includedocs
              whether to install the doc targets

       --includelibs  --excludelibs
              default: --includelibs
              whether to install the lib targets

       --includebins  --excludebins
              default: --includebins
              whether to install the bin targets

       --(no)keepzombies
              default: false
              whether to remove files left over from a previous installation of this package

       --exe=( default | yes | no | both | multi )
              default: default
              the  convention  on  Windows is that executables have a .exe,while on Unix they have no extension.
              The  --exe  option  allows  you  to  control  the  conventions  used  by  ozmake  when  installing
              executables.   --exe=default use the platform's convention --exe=yes use a .exe extension --exe=no
              use no extension --exe=both install all executables with .exe extension  and  without  --exe=multi
              install  executable  functors  for  both Unix and Windows. The Unix versions are installed without
              extension, and the Windows versions are installed with .exe extension

   Uninstall
       ozmake --uninstall
              uninstall package described by makefile

       ozmake --uninstall --package=PKG
              uninstall package named by mogul id  PKG

       -e  --uninstall
              uninstall a package

   Clean
       ozmake --clean
       ozmake --veryclean
              remove  files  as  specified  by  the  makefile's  clean  and  veryclean  features.    --veryclean
              implies      --clean .

   Create
       ozmake --create [--package=<FILE>]
              create  a  package and save it in FILE.the files needed for the package are automatically computed
              from the makefile. If  --package=<FILE>  is not supplied, a default is computed using the mogul id
              (and possibly version number) found in the makefile.

       --include(bins|libs|docs)  --exclude(bins|libs|docs)
              control which target types are included in the package

   Publish
       ozmake --publish
              automatically takes care of all the steps necessary for creating/updating a package contributed by
              the user and making all necessary data available to the MOGUL  librarian.  See  documentation  for
              --mogul  below.

   Extract
       ozmake --extract --package=<PKG>
              extract  the  files  from  file or URL PKG.if PKG is a mogul id, then the package is automatically
              downloaded from the mogul archive

   List
       ozmake --list
              list info for all packages in the installed package database

       ozmake --list --package=<MOGUL>
              list info for the installed package identified by mogul id MOGUL

       --linewidth=N
              default: 70
              assume a line with of  N  characters

   Config
       ozmake --config=put <OPTIONS>
              record the given OPTIONS  in  ozmake's  configuration  database,  and  use  them  as  defaults  in
              subsequent  invocations  of  ozmake unless explicitly overridden on the command line. For example:
              ozmake --config=put --prefix=/usr/local/oz saves /usr/local/oz as the  default  value  for  option
              --prefix

       ozmake --config=delete <OPT1> ... <OPTn>
              deletes  some entries from the configuration database. For example:  ozmake --config=delete prefix
              removes the default for  --prefix  from the configuration database

       ozmake --config=list
              lists the contents of ozmake's configuration database

       the argument to --config can be abbreviated to any non-ambiguous prefix

   Mogul
       If you choose to contribute packages to the MOGUL archive, ozmake --mogul=<ACTION> simplifies your  task.
       It  makes  it  easy  for  you to maintain a database of your contributions and to export them so that the
       MOGUL librarian may automatically find them. In fact, the simplest way is to use ozmake  --publish  which
       will take take care of all details for you.

       ozmake --mogul=put
              update  the  user's  database  of  own mogul contributions with the data for this contribution (in
              local directory)

       ozmake --mogul=put --package=<PKG>
              same as above, but using the package PKG explicitly given

       ozmake --mogul=delete <MOG1> ... <MOGn>
              remove the entries with mogul ids MOG1 through MOGn from the user's database of own contribution

       ozmake --mogul=delete
              remove entry for current contribution

       ozmake --mogul=list
              show the recorded data for all entries in the user's database of own mogul contributions

       ozmake --mogul=list <MOG1> ... <MOGn>
              show the recorded data for entries  MOG1  through  MOGn  in  the  user's  database  of  own  mogul
              contributions

       ozmake --mogul=export
              write  all  necessary  mogul entries for the user's own mogul contributions. These are the entries
              which will be read by the MOGUL librarian to automatically assemble the full MOGUL database.

       The data for your contributions need to be made available to the MOGUL librarian on the WEB. You want  to
       just  update  a  local  directory  with your contributions, but, in order for the MOGUL librarian to find
       them, these directories must also be available through URLs on the WEB. Here are some options that  allow
       you to control this correspondence, and for which you should set default using ozmake --config=put

       --moguldir=<MOGULDIR>

       --mogulurl=<MOGULURL>
              MOGULDIR  is  a  directory  which  is  also available on the WEB through url MOGULURL. MOGULDIR is
              intended as a root directory in which  sub-directories  for  packages,  documentation,  and  mogul
              entries will be found.

       For  those who really enjoy pain, ozmake has of course many options to shoot yourself in the foot. In the
       options below <ID> stands for the filename version of the package's mogul id (basically  replace  slashes
       by dashes). You can control where packages, their documentation and mogul database entries and stored and
       made available using the options below:

       --mogulpkgdir=<MOGULPKGDIR>
              default: <MOGULDIR>/pkg/<ID>/

       --mogulpkgurl=<MOGULPKGURL>
              default: <MOGULURL>/pkg/<ID>/

       --moguldocdir=<MOGULDOCDIR>
              default: <MOGULDIR>/doc/<ID>/

       --moguldocurl=<MOGULDOCURL>
              default: <MOGULURL>/doc/<ID>/

       --moguldbdir=<MOGULDBDIR>
              default: <MOGULDIR>/db/<ID>/

       --moguldburl=<MOGULDBURL>
              default: <MOGULURL>/db/<ID>/

       Your  contributions  should  all  have mogul ids which are below the mogul id which you where granted for
       your section of the mogul database. For convenience, ozmake will attempt to guess the root  mogul  id  of
       your section as soon as there are entries in your database of your own contributions. However, it is much
       preferable to tell ozmake about it using:

       --mogulrootid=<ROOTID>

       and to set it using ozmake --config=put --mogulrootid=<ROOTID>

MAKEFILE

       The  makefile  contains a single Oz record which describes the project and should normally be placed in a
       file called makefile.oz.A makefile typically looks like this:

               makefile(
                 lib : ['Foo.ozf']
                 uri : 'x-ozlib://mylib'
                 mogul : 'mogul:/denys/lib-foo')

       stating explicitly that there is one library target,  namely  the  functor  Foo.ozf,and  that  it  should
       installed at URI:

               x-ozlib://mylib/Foo.ozf

       and  implicitly  that  it  should  be  compiled  from  the  Oz  source file Foo.oz.When you invoke ozmake
       --install,the mogul feature serves to uniquely identify this package and the files it contributes in  the
       ozmake database of installed packages.

       There  are  many more features which can occur in the makefile and they are all optional. If you omit all
       the features, you only get the defaults and  you  don't  even  need  a  makefile.  All  values,  such  as
       files,should  be  given as virtual string; atoms are recommended except for features blurb, info_text and
       info_html,where strings are recommended.

               makefile(
                 bin      : [ FILES... ]
                 lib      : [ FILES... ]
                 doc      : [ FILES... ]
                 src      : [ FILES... ]
                 depends  :
                    o( FILE : [ FILES... ]
                       ...
                     )
                 rules    :
                    o( FILE : TOOL(FILE)
                       ...
                     )
                 clean     : [ GLOB... ]
                 veryclean : [ GLOB... ]
                 uri       : URI
                 mogul     : MOGUL
                 author    : [ AUTHORS... ]
                 released  : DATE
                 blurb     : TEXT
                 info_text : TEXT
                 info_html : TEXT
                 subdirs   : [ DIRS... ]
                 requires  : [ MOGUL... ]
                 categories: [ CATEGORY... ]
                 version   : VERSION
                 provides  : [ FILES... ]
               )

       Features bin, lib and doc list targets to be installed in <BINDIR>, <LIBDIR> and  <DOCDIR>  respectively.
       bin  targets  should  be  executable  functors, i.e. they should end with extension .exe. lib targets are
       typically compiled functors i.e. ending with extension .ozf,but  could  also  be  native  functors,  i.e.
       ending with extension .so,or simply data files. doc targets are documentation files.

   Extensions
       ozmake knows how to build targets by looking at the target's extension:

        Foo.exe

              is an executable functor and is created from Foo.ozf

        Foo.ozf

              is a compiled functor and is created from Foo.oz

        Foo.o

              is a compiled C++ file and is created from Foo.cc

        Foo.so

              is a native functor and is created from Foo.o

        Foo.cc

              is a C++ source file

        Foo.hh

              is a C++ header file

       Note  that  these  are  abstract targets. In particular, Foo.so really denotes the file Foo.so-<PLATFORM>
       where <PLATFORM> identifies the architecture and  operating  system  where  the  package  is  built;  for
       example:   linux-i486.Also,   when   a  bin  target  Foo.exe  is  installed,  it  is  installed  both  as
       <BINDIR>/Foo.exe and <BINDIR>/Foo so that it can be invoked as Foo on both Windows and Unix platforms.

       It is imperative that you respect the conventional use of extensions described here:  ozmake  permits  no
       variation and supports no other extensions.

   Rules
       ozmake has built-in rules for building files. Occasionally, you may want to override the default rule for
       one or more targets. This is done with feature rule which contains a record mapping target to rule:

               TARGET_FILE : TOOL(SOURCE_FILE)

       the rule may also have a list of options:

               TARGET_FILE : TOOL(SOURCE_FILE OPTIONS)

       The tools supported by ozmake are ozc (Oz compiler), ozl (Oz linker), cc (C++ compiler), ld (C++ linker).
       The default rules are:

               'Foo.exe' : ozl('Foo.ozf' [executable])
               'Foo.ozf' : ozc('Foo.oz')
               'Foo.o'   : cc('Foo.cc')
               'Foo.so'  : ld('Foo.o')

       The tools support the following options:

        ozc

            executable

              make the result executable

            'define'(S)

              define macro S.Same as -DS on the command line

        ozl

            executable

              make the result executable

        cc

            include(DIR)

              Similar to the usual C++ compiler option -IDIR. DIR is a virtual string

            'define'(MAC)

              Similar to the usual C++ compiler option -DMAC. MAC is a virtual string

        ld

            library(DIR)

              Similar to the usual C++ linker option -lDIR. DIR is a virtual string

       You might want to specify a rule to create a pre-linked library:

               'Utils.ozf' : ozl('Foo.ozf')

       or to create a non-prelinked executable:

               'Foo.exe' : ozc('Foo.oz' [executable])

   Dependencies
       ozmake automatically determines whether targets needed to be rebuilt, e.g. because they are missing or if
       some  source  file  needed to create them has been modified. The rules are used to determine dependencies
       between files. Sometimes this is insufficient e.g. because you use tool ozl (dependencies on imports), or
       insert in an Oz file, or #include in a C++ file. In this case you  can  specify  additional  dependencies
       using feature depends which is a record mapping targets to list of dependencies:

               TARGET : [ FILES... ]

       For example:

               'Foo.o' : [ 'Foo.hh' 'Baz.hh' ]

       or

               'Foo.exe' : [ 'Lib1.ozf' 'Lib2.ozf' ]

   Cleaning
       During  development,  it  is  often convenient to be able to easily remove all junk and compiled files to
       obtain again a clean project directory. This is supported by ozmake --clean  and  ozmake  --veryclean;the
       latter  also implies the former. Files to be removed are specified by glob patterns where ? matches any 1
       character and * matches a sequence of 0 or more characters. All  files  in  BUILDDIR  matching  one  such
       pattern  is  removed.  There  are  built-in  patterns,  but you can override them with features clean and
       veryclean which should be lists of glob patterns. For example the default clean glob patterns are:

               clean : [ "*~" "*.ozf" "*.o" "*.so-*" "*.exe" ]

   Package Related Features
       uri

       feature uri indicates the URI where to install lib targets. For example:

               uri : 'x-ozlib://mylib/XML'

       states that all lib targets (e.g. Foo.ozf)will be installed under this URI  so  that  they  can  also  be
       imported from it, i.e.:

              import MyFoo at 'x-ozlib://mylib/XML/Foo.ozf'

       mogul

       feature  mogul  is  the mogul id uniquely identifying this package. It is used to identify the package in
       the database of installed packages, to create/publish the  package,  and  to  install  its  documentation
       files.

       author

       feature  author  is a virtual string or list of virtual string resp. identifying the author or authors of
       the package. It is recommended to identify authors by their mogul id, however  is  is  also  possible  to
       simply give their names. For example, the recommended way is:

               author : 'mogul:/duchier'

       but the following is also possible:

               author : 'Denys Duchier'

       released

       feature released is a virtual string specifying the date and time of release in the following format:

               released : "YYYY-MM-DD-HH:MM:SS"

       time  is  optional. An appropriate release date using the current date and time is automatically inserted
       when invoking ozmake --create or ozmake --publish..

       blurb

       feature blurb contains a very short piece of text describing the package. This text should  be  just  one
       line and is intended to be used as a title when the package is published in the mogul archive.

       info_text

       feature  info_text  contains  a  plain text description of the package. This is intended to be used as an
       abstract on the presentation page for  the  package  in  the  mogul  archive.  It  should  be  brief  and
       informative, but should not attempt to document the package.

       info_html

       feature info_html is similar to info_text but contains HTML rather than plain text.

       src

       feature  src  indicates  which targets should be considered source, i.e. in particular non-buildable. All
       targets mentioned in src should be mentioned in bin, lib,or doc too. The  point  of  src  is  to  support
       distributing packages with pre-built targets and without giving out the corresponding sources. You should
       not  do  this  with  native  functors since they are platform dependent and not portable, but it can be a
       convenient means of distributing pre-built Oz libraries. For example:

               makefile(
                 lib : [ 'Foo.ozf' ]
                 src : [ 'Foo.ozf' ]
                 uri : 'x-ozlib://mylib'
                 mogul : 'mogul:/myname/foolib')

       is a makefile for a package that distribute the pre-compiled Foo.ozf,but does  not  also  distribute  its
       source Foo.oz.Normally, when you build a package it simply checks that the src files are present but will
       not  attempt  to build them. If you have the sources, you can force building the src targets if necessary
       using --fullbuild..

       subdirs

       feature subdirs is a list of bare filenames representing subdirectories of the project. By default,  when
       necessary,  ozmake  will  recurse into these subdirectories. It is expected that each subdirectory should
       provide its own makefile. The mogul id is automatically  inherited  to  subdirectories  and  the  uri  is
       automatically extended by appending the name of the subdirectory: thus sub-makefiles can be simpler since
       they don't need to be concerned with package-level features.

       requires

       feature requires is a list of module URIs or package MOGUL ids. These represent the external dependencies
       of  the  package.  They  are not yet used, but eventually ozmake will be able to use them to automate the
       recursive installation of other packages required by the one you are interested in.

       categories

       feature categories is a list of MOGUL categories to help categorize this package in the MOGUL archive.

       version

       feature version is used to provide a version string. This is a string that consist of integers  separated
       by single dots, e.g.  "2" or "3.1.7"..

       provides

       feature  provides  is  used to override the default information about what the package provides, normally
       automatically computed from the bin and lib targets: it should be a list which contains a subset of these
       targets. The provides feature of a makefile does not override or otherwise affect its sub-makefiles: each
       makefile should separately override if it so desires. To  state  that  a  makefile  does  not  officially
       provide any functors or executable application, you would add:

       provides : nil

       You  should  use the provides feature when your package contains both official public functors as well as
       purely implementational functors that are not part of the official public interface  and  should  not  be
       mentioned as provided by the package.

CONTACTS

       Authors  should really be referred to by mogul ids denoting mogul entries that describe them. In order to
       make this easier, a makefile.oz may also contain a contact feature which is either a record describing  a
       person, or a list of such records.

       You  should not have a contact feature in every makefile. Rather, the contact feature is usually intended
       for makefiles that only have a contact feature, i.e. whose only purpose is to create  mogul  entries  for
       the corresponding persons. Here is an example of such a makefile:

               makefile(
                  contact :
                     o(
                        mogul : 'mogul:/duchier/denys'
                        name  : 'Denys Duchier'
                        email : 'duchier@ps.uni-sb.de'
                        www   : 'http://www.ps.uni-sb.de/~duchier/'))

       You can invoke ozmake --publish on such a makefile to contribute the corresponding mogul database entries

AUTHOR

       This  man  page  has  been  automatically  generated  from  the ozmake help file. The ozmake help file is
       maintained by Denys Duchier.

SEE ALSO

       Full documentation of the Mozart system and the Oz programming language  is  available  through  the  the
       mozart-doc package, or from the mozart web page www.mozart-oz.org.  See in particular the document The Oz
       Programming Interface.

       ozc(1), ozd(1), ozengine(1), ozl(1), oztool(1), convertTextPickle(1).

                                                  June 3, 2005                                         OZMAKE(1)