Provided by: omake_0.10.6-2_amd64 bug

NAME

       omake, osh - make-like build utility and its shell

SYNOPSIS

       omake [OPTION...] [TARGET...]
       osh [OPTION...]

DESCRIPTION

       OMake  constructs projects in a way similar to make(1) in particular GNU-Make.  When OMake needs to spawn
       a shell it uses its own shell, Osh.  The shell can also be used standalone either as omake --shell or  as
       osh(1) if the appropriate link has been installed.

   OMake
       OMake  is  designed  for  building  projects that have source files in several directories.  Projects are
       normally specified using an OMakefile in each of the project directories, and an OMakeroot  file  in  the
       root  directory  of  the  project.   The OMakeroot file specifies general build rules, and the OMakefiles
       specify the build parameters specific to each of the subdirectories.   When  OMake  runs,  it  walks  the
       configuration  tree,  evaluating  rules  from  all of the OMakefiles.  The project is then built from the
       entire collection of build rules.

   Osh
       OMake also includes the standalone command-line interpreter osh that can be used as an interactive shell.
       This shell uses the same syntax, and provides the same features on all  platforms  that  OMake  supports,
       including Win32.

       See also the OMake Manual, chapters 11, “Shell commands” and 15, “The Osh shell”.

OPTIONS

       The  options  are  presented  in  functionally  related  sections.   Within  these the options are sorted
       alphabetically in case-insensitive order.

       Options marked with ‘⟨N⟩’ can be negated by prefixing them with ‘--no’ as, e.g., --no-S  or  --no--print-
       status.  Note the conserved inner double dash of the latter, though.

   Build Control
           --absname
                  Enforce that filenames always expand to their absolute pathnames.  ⟨N⟩

                  Note: This is an experimental option.  It may become deprecated.

           --all-dependencies
                  If  the  options  --print-dependencies  or  --show-dependencies  are  given  print  transitive
                  dependencies.  This means that all dependencies will be  printed  recursively.   Otherwise  no
                  effect.  ⟨N⟩

           --configure
                  Recompute  static.  sections  of  the  included  omake  files,  instead of trusting the cached
                  results.  ⟨N⟩

           --depend
                  Do not trust the cached dependency information.  This will force files  to  be  rescanned  for
                  dependency information.  ⟨N⟩

           --flush-includes
                  Do not trust cached *.omc files.  ⟨N⟩

           -j JOB-SPEC
                  JOB-SPEC is either the maximum number of jobs to run in parallel.

                  Or,  JOB-SPEC  specifies  servers  for  remote  execution  of  commands in the form of a colon
                  separated list of SERVER-NAME=NUMBER-OF-JOBS pairs.  For example, the option

                      -j 2:small.host.org=1:large.host.org=4

                  would specify that up to 2 jobs can be executed locally, 1 on the server small.host.org and  4
                  on large.host.org.  Each remote server must use the same filesystem location for the project.

                  Remote  execution  is  currently  an experimental feature.  Remote filesystems like NFS do not
                  provide adequate file consistency for this to work.

           -k     Do not stop when an error occurs; continue to build as much of the project as possible.   This
                  option is implied by -p and -P.  ⟨N⟩

                  Mnemonic: “keep on making”.

           -n     Print commands, but do not execute them.  ⟨N⟩

                  Mnemonic: “no operation”.

           -P     Keep on polling the filesystem for changes “forever”; implies -k and -p.  ⟨N⟩

           -p     Watch the filesystem for changes, and continue the build until it succeeds.  If this option is
                  specified,  OMake  will  restart  the  build  whenever source files are modified.  This option
                  implies -k.  ⟨N⟩

                  Mnemonic: “poll filesystem”.

           --print-dependencies
                  Collect and print dependency information for the TARGETs on the command line.  ⟨N⟩

           --project
                  Ignore the current directory and build the project.  ⟨N⟩

           -R     Ignore the current directory and build the project from its root directory.  When OMake is run
                  in a subdirectory of a project and no explicit targets are given on the command line, it would
                  normally only  build  files  within  the  current  directory  and  its  subdirectories.   More
                  precisely: it builds all the .DEFAULT targets in the current directory and its subdirectories.
                  If  the  -R  option  is  specified, the build is performed as if OMake were run in the project
                  root.

                  In other words, with the -R option all the relative targets specified on the command line will
                  be taken relative to the project root instead of relative to the current directory.   When  no
                  targets  are  given on the command line, all the .DEFAULT targets in the project will be built
                  regardless of the current directory.  ⟨N⟩

                  Mnemonic: “root build”.

           --show-dependencies TARGET
                  Show dependencies (only) if TARGET is built.

           -t     Update the OMake database to force all target files of the project are considered  up-to-date.
                  ⟨N⟩

           -U     Do not trust the dependency cache or cached OMakefiles.  This will force the entire project to
                  be rebuilt.  ⟨N⟩

           --verbose-dependencies
                  If  either  one of the options --print-dependencies or --show-dependencies is in effect, print
                  transitive dependencies.  That is, print all dependencies  recursively.   If  neither  of  the
                  above options is specified, this option has no effect.  ⟨N⟩

           -warn-error
                  Treat warnings as errors.  ⟨N⟩

           -Wdeclare
                  Warn about undeclared variables.  ⟨N⟩

   Output
           -o SHORT-OPTION...
                  Short  output  options  alias  the  functionality of some options or combinations thereof.  In
                  general, an uppercase character turns the option on, whereas a lowercase character  turns  the
                  option off.  SHORT-OPTION is one of following letters.

                  0   Equivalent to

                          -s --output-only-errors --no-progress

                      This  option  specifies  that  omake  should be as quiet as possible.  If any errors occur
                      during the build,  the  output  is  delayed  until  the  build  terminates.   Output  from
                      successful commands is discarded.

                  1   Equivalent to

                          -S --progress --output-only-errors

                      This  is  a  slightly  more relaxed version of “quiet” output.  The output from successful
                      commands is discarded.  The output from failed commands is printed immediately  after  the
                      command  complete.   The  output from failed commands is displayed twice: once immediately
                      after the command completes, and again when  the  build  completes.   A  progress  bar  is
                      displayed so that you know when the build is active.  Include the -p option if you want to
                      turn off the progress bar (for example omake -o 1p).

                  2   Equivalent to

                          --progress --output-postpone

                      The  is  even  more  relaxed,  output  from successful commands is printed.  This is often
                      useful for deinterleaving the output when using option -j.

                  P  (uppercase)
                      Equivalent to --progress.

                  p  (lowercase)
                      Equivalent to --no--progress.

                  S  (uppercase)
                      Equivalent to -S.

                  s  (lowercase)
                      Equivalent to --no-S.

                  W  (uppercase)
                      Equivalent to -w.

                  w  (lowercase)
                      Equivalent to --no-w.

                  X  (uppercase)
                      Equivalent to --print-exit.

                  x  (lowercase)
                      Equivalent to --no-print-exit.

           --output-at-end
                  The output of the failed commands will be printed after OMake has finished.  Off  by  default,
                  unless -k is enabled (directly or via -p/-P).  ⟨N⟩

           --output-normal
                  Relay  the  output  of  the rule commands to the OMake output right away.  This is the default
                  when no --output-postpone and no --output-only-errors flags are given.  ⟨N⟩

           --output-only-errors
                  Same as --output-postpone, but postponed output will only be printed for commands that fail.

                  This can be useful in reducing unwanted output so that the user can concentrate on any errors.
                  ⟨N⟩

           --output-postpone
                  Postpone printing command output until a rule terminates.  Then print it as a single block.

                  This is useful in combination with the -j option, where the output  of  multiple  subprocesses
                  can be garbled.  The diversion is printed as a single coherent unit.  ⟨N⟩

           --print-exit
                  Print the exit codes of all commands that have been run.  ⟨N⟩

           --print-status
                  Print status lines (starting with ‘+’ or ‘-’).  This is the default setting.  ⟨N⟩

           --progress
                  Print  a  progress  indicator;  enabled by default if stdout is a terminal and disabled if the
                  output has been redirected.  ⟨N⟩

           -S     Do not print commands as they are executed unless they produce any output or they fail.   This
                  is the default.  ⟨N⟩

           -s     Never print commands before they are executed.  ⟨N⟩

                  Mnemonic: “silent”.

           --verbose
                  Switch on very verbose output.  This option is equivalent to

                      --no-S --print-status --print-exit VERBOSE=true

           -w     Print  the  directory  in  “make  format” as commands are executed.  This is mainly useful for
                  editors that expect make-style directory information for determining the location  of  errors.
                  ⟨N⟩

   Cache Management
           --force-dotomake
                  Always use the directory $HOME/.omake for *.omc-cache files.  ⟨N⟩

           --dotomake DIRECTORY
                  Use the specified DIRECTORY in place of $HOME/.omake for the storage of *.omc-files.

           --save-interval DURATION
                  Save the build DB (.omakedb) every DURATION seconds (0 disables, default: 60).

   Shell Related
           -c COMMAND
                  Execute COMMAND.

           -i     Treat the session as interactive.  ⟨N⟩

           --shell
                  Run the OMake shell: osh.  ⟨N⟩

   Debugging
           -allow-exceptions
                  Do  not  catch  top-level  exceptions.  This option is useful if running with OCAMLRUNPARAM=b.
                  ⟨N⟩

           -debug-active-rules
                  Debug active rules.  ⟨N⟩

           -debug-ast-lex
                  Print tokens as they are scanned.  ⟨N⟩

           -debug-build
                  Display debugging information during the build.  ⟨N⟩

           -debug-cache
                  Display cache debugging information.  ⟨N⟩

           -debug-db
                  Debug the file database.  ⟨N⟩

           -debug-deps
                  Display dependency information as scanned.  ⟨N⟩

           -debug-eval
                  Debug the evaluator.  ⟨N⟩

           -debug-exec
                  Display execution debugging information.  ⟨N⟩

           -debug-hash
                  Show Lm_hash statistics.  ⟨N⟩

           -debug-implicit
                  Display debugging information for implicit rule selection.  ⟨N⟩

           -debug-lex
                  Debug the lexer.  ⟨N⟩

           -debug-lexgen
                  Debug the lexer generator.  ⟨N⟩

           -debug-notify
                  Debug the FAM (-p filesystem watch) operations.  ⟨N⟩

           -debug-parse
                  Debug the parser.  ⟨N⟩

           -debug-parsegen
                  Debug the parser generator.  ⟨N⟩

           -debug-parsing
                  Debug OMake parsing operations.  ⟨N⟩

           -debug-pos
                  Print source position information on error.  ⟨N⟩

           -debug-remote
                  Debug remote execution.  ⟨N⟩

           -debug-rule
                  Display debugging information about rule execution.  ⟨N⟩

           -debug-scanner
                  Display debugging information for scanner selection.  ⟨N⟩

           -debug-shell
                  Debug shell operations.  ⟨N⟩

           -debug-thread
                  Show thread operations.  ⟨N⟩

           -extended-rusage
                  Print more about resource usage.  ⟨N⟩

           -instrument
                  Do instrument functions.  ⟨N⟩

           -print-ast
                  Print the AST after parsing.  ⟨N⟩

           -print-files
                  Print the files as they are read.  ⟨N⟩

           -print-ir
                  Print the IR.  ⟨N⟩

           -print-loc
                  Also print locations.  ⟨N⟩

           -trace-pos
                  Trace the program execution.  ⟨N⟩

           -print-rules
                  Print the rules after evaluation.  ⟨N⟩

   Miscellaneous
           --install
                  Install default files OMakefile and OMakeroot of an OMake project into the current  directory.
                  This is typically done only once to start an OMake project in the current directory.  ⟨N⟩

           --install-all
                  In  addition  to installing the default files OMakefile and OMakeroot of an OMake project into
                  the current directory install  default  OMakefiles  into  each  subdirectory  of  the  current
                  directory.   cvs(1)  rules  are  used  for  filtering  the  subdirectory  list.   For example,
                  OMakefiles are not copied into directories called CVS, RCCS, etc.  ⟨N⟩

           --install-force
                  Normally, OMake will prompt before it overwrites any existing OMakefile.  If  this  option  is
                  given, all files are overwritten without prompting; implies --install.  ⟨N⟩

           --help Display help message and exit.

           --help-all
                  Display help message for all options and exit.

           --help-debug
                  Display help message just for the debugging-related options and exit.

           --server SERVER-NAME
                  Run as a remote server called SERVER-NAME.

           --version
                  Print the version string and the default library directory then exit.

EXIT STATUS

       0   No problems; everything went well.

       1   Build failure caused by a program with non-zero exit code.

       2   Not  a  build-related error, for example a syntax error in one of the files that constitute the OMake
           project.

       3   Bogus command-line option.

ENVIRONMENT

       OMAKEFLAGS
              If defined, OMAKEFLAGS should contain a set of options  exactly  as  they  are  specified  on  the
              command line.

       OMAKELIB
              If  defined, OMAKELIB refers to the installed location of the OMake standard library.  This is the
              directory that contains Pervasives.om etc.  On a Unix system,  this  is  often  /usr/lib/omake  or
              /usr/local/lib/omake, and on Win32 systems it is often c:\Program Files\OMake\lib.

              If  not  defined,  OMake  uses  the default configured location, which can be inquired with option
              --version.

              Normally, this variable should not be set.

FILES

       OMakeroot
              This file is required; it serves to identify the project root, and it contains code that  sets  up
              the project.

       OMakefile
              Any project-specific configuration lives in the OMakefiles.

       .om    Conventional filename extension for OMake “library” files.

       .omc   For  performance  OMake  compiles all OMake-source files on the fly.  Compiled OMake files receive
              extension .omc.

EXAMPLES

   OMake
       •   This is an almost minimal OMakeroot file.
               ##  Setup for building a C- or C++-project.
               open build/C

               ##  Define according our configuration.
               DefineCommandVars()

               ##  Include the OMakefile in this directory.
               .SUBDIRS: .

       •   Small OMakefile file to build the famous “Hello, world!” example.
               ##  Define target-source relationship of a C-program.
               CProgram(hello, hello) # we can be extension agnostic

               ##  Define the default (and only) target.
               .DEFAULT: hello$(EXE)

   Osh
       •   Call date(1) with some options via OMake.
               $ omake --shell -c 'date --universal --iso-8601=seconds'
               2021-11-20T14:52:10+00:00

       •   Call update(1) via Osh.
               $ osh -c uptime
                15:54:03 up  6:41,  1 user,  load average: 0.02, 0.04, 0.11

       •   Interactive use.
               $ osh
               % uname --kernel-release --kernel-version
               5.10.0-9-amd64 #1 SMP Debian 5.10.70-1 (2021-09-30)
               % ^D
               $

SEE ALSO

       make(1), sh(1).

                                                   2021-11-17                                           OMAKE(1)