CM3(1)                   MODULA-3 PROGRAMMER'S MANUAL                   CM3(1)

NAME
       cm3- Critical Mass Modula-3 Compiler

SYNOPSIS
       cm3 [options]

DESCRIPTION
       The Critical Mass Modula-3 Compiler cm3 is a descendant of the Modula-3
       compiler developed by Digital Equipment Corp.  (DEC)  Systems  Research
       Center  (SRC)  and  Olivetti Corp.  Cm3 was a component of a commercial
       product (Reactor) of Critcal Mass.  When that company went out of busi-
       ness,  Elego  Software Solutions acquired the rights to Reactor and its
       components.  They released the Modula-3 compiler cm3 as an open  source
       project, and currently support it by hosting its web site.

   Expected Directory Structure
       Each  modula-3  software  package has a root directory in which certain
       files and directories may appear.  The optional files  m3makefile,  and
       m3overrides  may  be  placed in the root of the package directory.  All
       the source code should be in a directory named src,  and  the  compiler
       will  place  all  generated object files, libraries, and exectuables in
       directories appropriate for the target architecture,  generating  those
       directories  in the package root directory if required.  The src direc-
       tory may contain nested subdirectories further  organizing  the  source
       code.

OPTIONS
   Mode Options
       -build Compile and Link the entire project

       -ship  Install  the  package  into the CM3_INSTALL_ROOT directory tree.
              NOTE: This may require administrator priviledges.

       -clean Delete derived files.

       -realclean
              Delete entire derived target directory.

       -find  Locate source files.

       -depend
              Generate package dependencies.

   Compiler Options
       -g     Produce symbol table information for the debugger.

       -O     Optimize the generated code.

       -A     Disable code generation for assertions.

       -once  Don't recompile to improve opaque object code

       -w0 ... -w3
              Limit the compiler warning messages.

       -Z     Generate coverage analysis code.

       -profile
              Generate profiling code.

       -lazy  Generate lazy module initialization code.

       -linkall
              Generate module initialization code for all modules, even  those
              that  are  not imported directly or indirectly by Main.  This is
              currently experimental and does not always work as expected.

   Program and Library Options
       -c     Compile only, do not link or produce  a  program  executable  or
              library.

       -a <foo>
              Build a library named foo.

       -o <foo>
              Build program named foo.

       -skiplink
              Skip the final link step.

   Message Options
       -?     Print a short help message.

       -silent
              Produce no diagnostic output.

       -why   Explain why code is being recompiled.

       -commands
              List system commands as they are performed.

       -verbose
              List internal steps as they are performed.

       -debug Dump internal debugging information.

       -trace Trace quake code execution.

   Information and Help Options
       -help  Print a short help message.

       -?     See -help.

       -version
              Print the compilers version information and exit.

       -config
              Print the compilers version information and exit.

   Miscellaneous Options
       -keep  Preserve intermediate and temporary files.

       -times Produce a dump of elapsed times.

       -override
              Include the "m3overrides" file.

       -x     Include the "m3overrides" file. (see -override ) above.

       -D<symbol>
              Define <symbol> with the value TRUE.

       -D<symbol>=<value>
              Define <symbol> with the supplied <value>.

       -F <fn>
              Prepend the quake code of file <fn>.

       -FP <fn>
              Prepend the quake code of file <fn>.

       -prepend  <fn>
              Prepend the quake code of file <fn>.

       -FA <fn>
              Append the quake code of file <fn>.

       -append <fn>
              Append the quake code of file <fn>.

       -console
              Produce a MS-Windows CONSOLE subsystem program.

       -gui   Produce a MS-Windows GUI subsystem program.

       -windows
              Produce a MS-Windows GUI subsystem program.

       -pretend <version>
              Pretend to run CM3 as if it were <version>.

       -no-m3ship-resolution
              Use quake variables in .M3SHIP files (experimental).

       -group-writable
              Use  group-writable file modes in quake installation procedures.
ENVIRONMENT
       CM3_INSTALL_PREFIX
              is the path prefix prepended to files being installed.  This  is
              similar to the behavior "make DESTDIR=${prefix}".  Use this when
              creating a software distribution package.

       M3CONFIG
              Platform dependent configuration file to use.  By  default  this
              is cm3.cfg.

       QUAKE_SHELL
              Shell to be used by the quake interpreter for exec(2).

       QUAKE_SHELL_OPTION
              Command option for the quake shell (eg., -c, or /c).

       QUAKE_TMPDIR
              The directory for temporary files used by quake.

FILES
       The  m3makefile(7).  is a text file read by cm3.  It describes any spe-
       cial actions needed to build or ship the software  package.   This  can
       include linking against specified libraries, creating documentation, or
       a number of other actions.

       The m3overrides(7) file is used to stop a package from linking  against
       the normal cm3 system libraries, but rather use the libraries listed in
       this file.

VERSIONS
       The version of cm3 herein described is 5.7.1
       cm3 conforms to DEC-SRC Research Report  52,  with  several  additional
       features.

   Deviations
       TEXT   The  text  object in which constant strings are stored, may con-
              tain unicode characters, if no unicode characters are used, then
              only ASCII ones will be used.

       WIDECHAR
              In  support  of  unicode  characters  this new builtin type is a
              16-bit character, and may be used by TEXT.

       LONGINT
              The LONGINT type is an additional builtin type, and is a  signed
              integral type with 64 bits.

BUGS
       Probably too many to count.
   Websites
       The Free Critical Mass website <http://www.opencm3.net/>.

       Modula-3 Resource Page <http://www.modula3.org/>.

       Wikipedias Modula-3 Entry <http://en.wikipedia.org/wiki/Modula-3>.

   Manual Pages
       modula3(7).

       modula3(7),m3makefile(7),m3overrides(7).

   Books
       "Modula-3", Samual Harbison

       "Systems Programming with Modula-3", Greg Nelson.

       "Algorithms in MODULA-3", Robert Sedgewick

AUTHOR
       Peter. P. Eiserloh (eiserlohpp -at- yahoo.com)