Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
OMAKE(1)		     General Commands Manual			OMAKE(1)

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 OMake-
     files 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 pro-
     vides 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 path-
		names.	<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 depen-
		dencies 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  paral-
		lel.

		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 im-
		plies -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 nor-
		mally only build files within the current directory and its sub-
		directories.  More precisely: it builds all the .DEFAULT targets
		in  the current directory and its subdirectories.  If the -R op-
		tion 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 tar-
		gets in the project will be built regardless of the current  di-
		rectory.  <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-de-
		pendencies 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  pos-
		    sible.   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  out-
		    put  from  failed  commands is printed immediately after the
		    command complete.  The output from failed commands	is  dis-
		    played  twice: once immediately after the command completes,
		    and again when the build completes.  A progress bar is  dis-
		    played  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 out-
		put  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  de-
		fault 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  direc-
		tory 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 OMake-
		root  of an OMake project into the current directory install de-
		fault OMakefiles into each subdirectory of  the  current  direc-
		tory.	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/lo-
	    cal/lib/omake,   and   on	Win32	systems   it  is  often  c:\Pro-
	    gram 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)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=osh&sektion=1&manpath=FreeBSD+Ports+15.1.quarterly>

home | help