Provided by: icmake_7.21.01-1_amd64 bug

NAME

       icmake - A program maintenance (make) utility using a C-like grammar

SYNOPSIS

       icmake [options] source[.im] [dest[.bim]] [-- [args]]

       icmun bimfile

DESCRIPTION

       Icmake(1)  can  be  used  as  an  alternative  to  make(1).  In its standard operation more, it calls the
       following programs:

       o      icm-pp  to preprocess the icmake file

       o      icm-comp   to byte-code compile the icmake  s

       o      icm-exec   to interpret the byte-code file

       Icmake allows the programmer to use a program language (closely resembling the  well-known  C-programming
       language)  to  define  the  actions  involved  in  (complex) program maintenance. For this, icmake offers
       various special operators as well as a set of support functions that have proven to be useful in  program
       maintenance.

       The program icmun(1) may be used to disassemble the compiled byte-code file.

       Traditional  make-utilities  recompile  sources  once  header  files  are modified. In the context of C++
       program development this is often a bad idea, as adding a new member to a class does not normally require
       you to recompile the class’s sources. To handle class dependencies in a more  sensible  way,  icmake(1)’s
       CLASSES  file  may define dependencies among classes. By default, class-dependencies are not interpreted.
       See the icmconf(7) man-page for details.

ADDITONS SINCE VERSION 7.00

       o      Integral constants may be specified using hexadecimal notation (e.g., 0x12ab);

       o      The IM environment variable may contain multiple directories, separated from each other by  colons
              (:).

       o      #define-directives may refer to other macro definitions using the ${identifier} format.

       o      #ifdef, #ifndef, #else and #endif directives can be nested.

       o      The  `backtick’  operator  is  defined, executing a program in a shell and collecting its standard
              output in a list (see below).

       o      The index operator ([]) is defined as an alternative to the pre-defined  function  element(),  and
              can be used on lists and strings.

       o      The  function  string  getenv(string  envvar)  is predefined. If existing scripts already define a
              getenv() function of their own, it it suggested to remove this function and use the  new  getenv()
              function  instead.  Alternatively,  rename  the script-defined function getenv() and calls of this
              function to, e.g. my_getenv().

       o      The function int strstr(string haystack, string needle) is renamed to int strfind(string haystack,
              string needle).

              NOTE: this modification in version 7.00 could very well affect your earlier (6.xx) icmake scripts.
              Changing `strstr’ into `strfind’ should bring your older scripts up-to-date again.

OPTIONS

       Icmake:

       source: icmake script source file (default extension: .im).

       dest:   binary icmake script file (default:  `source’.bim).

       --:  icmake/icmake-script arguments separator

       args:  arguments following -- are entered into the icmake scipt main() function’s argv-list (see below at
       section USER DEFINED FUNCTIONS).

       o      -a
              information about icmake

       o      -b
              blunt execution of the destinationfile

       o      -c
              the destination file is only compiled

       o      -i file
              file: name of source.  Icmake argument processing stops.

       o      -o file
              all icmake output is written to file (Not implemented on unix platforms)

       o      -p
              only the preprocessor is activated

       o      -q
              quiet mode: copyright banner not displayed

       o      -t file
              file is used as a temporary bim-file, to be removed on exit. Icmake argument processing stops.

       Icmun:

       bimfile:  binary icmake script file.

PREPROCESSOR DIRECTIVES

       The following preprocessor directives are available:

       o      comment:
              standard C comment (all between /* and */) as well as comment-to-end-of-line  (all  line  contents
              following //) are ignored.

       o      Shell  startup:  The first line of the icmake-script may start with #!path, where path defines the
              absolute location of the icmake program. By making the script executable, it can be called without
              explicitly calling icmake.

              E.g., if the first line of an (executable) icmakefile ’icm’ (without extension) contains

                          #!/usr/bin/icmake -qi

              then icm may be given as a command, thus executing

                          /usr/bin/icmake -qi icm ...

              Alternatively,

                          #! /usr/bin/icmake -qt /tmp/icm

              may be used, resulting in the execution of

                          #! /usr/bin/icmake -qt /tmp/icm icm ...

              In this case the binary makefile is not kept, but  a  temporary  file  /tmp/icm.PID  is  used  and
              removed on exit. The PID extension being the process-id of the icmake program executing icm.

       o      #include "filename"
              The file filename is included at the location of the directive

       o      #include <filename>
              The  file  filename is included at the location of the #include directive; filename is searched in
              the directories pointed to by the IM environment variable.

       o      #define identifier definition
              The text identifier will be replaced by definition.  The  definition  may  contain  references  to
              already  defined  identifiers,  using  the  ${identifier} format. If the ${identifier} hasn’t been
              defined  (yet),  the  text  ${identifier}  is  literally  kept.  At  each  #define  at  most   100
              text-replacements are performed, preventing infinite recursion.

       o      #ifdef identifier
              If  the  identifier  macro  was  defined  the next block of code (until a matching #else or #endif
              directive was detected) is byte-compiled. Otherwise, the block of code is ignored.

       o      #ifndef identifier
              If the identifier macro was not defined the next block of code (until a matching #else  or  #endif
              directive was detected) is byte-compiled. Otherwise, the block of code is ignored.

       o      #else
              Terminates  a #ifdef and #ifndef directive, reversing the acceptance decision about  the following
              code.

       o      #endif
              Terminates the preprocessor block starting at the matching #ifdef, #ifndef or #else directive.

       o      #undef identifier
              Remove identifier from the set of defined symbols. This will not affect the specification  of  any
              previously defined symbols in which identifier was used.

DATA TYPES

       The following data types are available:

       o      int
              Integral  values,  ranging  from  -0x8000  until 0x7fff. int constants may be specified as decimal
              numbers, hexadecimal numbers or as ASCII character constants (e.g., ’x’).

       o      string
              Text variables. Text constants are delimited by double quotes.  Multiple  text  constants  may  be
              concatenated,  but  a text constant may not extend over multiple lines. To indicate an end-of-line
              in a text constant use the \n escape sequence. The escape sequences \a \b \f  \n  \r  and  \t  are
              available.  Otherwise,  \x  is  interpreted as a literal x. So, use \\ to indicate \ within a text
              constant.

       o      list
              A data structure containing a series  of  individually  accessible  string  values.  When  a  list
              contains elements, its first element is indicated by index 0.

       o      void
              Used with function definitions to indicate that the function does not return a value.

       Variables may be defined both at the global level as well as locally to functions. Variables are strongly
       typed. A variable cannot have the type void.

       Variables  may  be  initialized  when  they  are  defined.  The  initialization  can use return values of
       functions, but cannot use variables. Consider initializations as being constructed from constant values.

PREDEFINED SYMBOLS

       The following symbols are predefined by icmake. All are constant int values:
       ─────────────────────────────────
       symbol      value   intended for
       ─────────────────────────────────
       O_ALL       8       makelist
       O_DIR       2       makelist
       O_FILE      1       makelist
       O_SUBDIR    4       makelist
       ─────────────────────────────────
       OFF         0       echo
       ON          1       echo
       ─────────────────────────────────
       P_CHECK     0       system calls
       P_NOCHECK   1       system calls
       ─────────────────────────────────
       S_IEXEC     32      stat
       S_IFCHR     1       stat
       S_IFDIR     2       stat
       S_IFREG     4       stat
       S_IREAD     8       stat
       S_IWRITE    16      stat
       ─────────────────────────────────

       The following symbols are available depending on the architecture:
       ─────────────────────────────────────────────────────────────────
       symbol           1 when defined on the platform, otherwise 0
       ─────────────────────────────────────────────────────────────────
       MSDOS            MS-DOS platform (with MSC 7.00 compiler)
       unix             Unix, usually with GNU’s gcc compiler
       linux            x86 running Linux (usually with gcc)
       M_SYSV, M_UNIX   x86 running SCO/Unix (usually with) Microsoft C
       _POSIX           _SOURCE   Unix with Posix complient compiler
       __hpux           HP-UX, with the native HP compiler
       ─────────────────────────────────────────────────────────────────

OPERATORS

       All C operators, except for the ternary operator, are supported, operating like their C  counterparts  on
       int variables and/or values.

       Additionally, for string type variables and/or values the following operators are available:

       o      a + b: returns a new string value containing the concatenation of string values a and b. Note that
              string constants may be concatetated without using the + operator, e.g.,

                  "hello "   "world"
                  "hello " + "world"

       o      a += b: a must be a  string variable, to which the string variable or value b is appended.

       o      string  comparisons:  operators  ==  !=  <=  >=  <  > != and == may be applied to string values or
              variables, returning 1 if the comparison succeeds, otherwise 0. Comparison  is  case  sensitively,
              and follows the ASCII character set.

       o      !a: the boolean ! operator returns 1 if the string a is empty, otherwise 0 is returned.

       o      a  younger  b,  a newer b: returns 1 if file a is more recent than file b. E.g., "source.cc" newer
              "source.o". If b doesn’t exist, 1 is returned; if a doesn’t exist 0 is returned; if neither a  nor
              b  exists,  0  is  returned;  if  they  are of the same age, 0 is returned. Explicit tests for the
              existence of a file can be performed using the exists() predefined function  (see  below,  section
              PREDEFINED FUNCTIONS).

       o      a  older  b:  turns  1  if  file  a is older than file b. E.g., "libprog.a" older "source.o". If a
              doesn’t exist, 1 is returned; if b doesn’t exist 0 is returned; if neither a nor b  exists,  0  is
              returned; if they are of the same age, 0 is returned.

       o      []:  the index operator is defined as an alternative to the built-in function element. It can only
              be applied (as holds true for element() as well) as  so-called  rvalue.  Therefore,  constructions
              like:

                      // assume str1 and str2 are strings
                  str1 = str2[3]

              will be accepted, but the following construction will not be accepted:

                  str2[3] = str; // won’t compile

       For list type variables and/or values the following operators are available:

       o      a + b: returns a new list value containing the concatenation of list values a and b. This is not a
              set  operation:  if an element appears both in a and in b, they will appear twice in the resulting
              list.

       o      a - b: returns a new list value containing the elements in a that are not present in b. This is  a
              set operation.

       o      a += b: elements in b are added to the elements in a, which must be a  list variable.  This is not
              a set operation.

       o      a  -= b: elements in b are removed from the elements in a, which must be a list variable.  This is
              a set operation.

       o      list equality comparisons: operators != and ==  may  be  applied  to  list  values  or  variables.
              Operator  ==  returns  1  if  both  lists have element-by-element identical elements, 0 otherwise.
              Operator != reverses the result of ==.

       o      !a: the boolean ! operator returns 1 if the list a is empty, otherwise 0 is returned.

       o      []: the index operator is defined as an alternative to the built-in function element. It can  only
              be  applied  (as  holds  true for element() as well) as so-called rvalue. Therefore, constructions
              like:

                      // assume lst is a list, str is a string
                  str = lst[3]

              will be accepted, but the following construction will not be accepted:

                  lst[3] = str; // won’t compile

       Typecasts may be performed using the standard C cast-operator to cast:

       o      Strings to ints and vice versa ((int)"123", (string)55)

       o      Strings may be cast to lists (list lst = (list)"hello")

FLOW CONTROL

       Icmake offers the following subset of C’s statement types. They can be  used  as  in  the  C  programming
       language.

       o      expression ;
              The plain expression statement;

       o      The compound statement
              Different  from  C  icmake  does not support variable definitions inside a compound statement. All
              variables used locally by a function must be defined as either function parameters or as variables
              that are defined immediately at the beginning of a function’s body.

       o      if (condition) statement

       o      if (condition) statement else statement

       o      for (init; condition; increment) statement
              The variable(s) used in the initialization section must  already  have  been  defined.  The  init,
              condition  and increment sections may be left empty. The empty condition section is interpreted as
              `always true’.

       o      while (condition) statement
              The do ... while() statement is not implemented for icmake.

       o      return (for void functions) and return expression for other functions.

       o      break
              To leave for and while statements, overruling the  statement’s  condition.  C’s  continue  is  not
              available.

       o      exit(expression)
              To  terminate  the  icmake-script. The expression must evaluate to an int value, which becomes the
              script’s exit value.

PREDEFINED FUNCTIONS

       Icmake offers the following predefined functions, which can be used immediately by  icmake  scripts.  The
       function  overview is ordered alphabetically by function name, but where appropriate short summary labels
       are provided:

       Helper functions of exec() (see also below at exec()):

       o      void arghead(string h)
              Defines the `argument head’, to be used with exec(). By default, the `argument head’ is  an  empty
              string.

       o      void argtail (string t)
              Defines  the  `argument tail’, to be used with exec(). By default, the `argument tail’ is an empty
              string.

       String-to-ascii converters:

       o      int ascii(string s)
              Returns the first character of s as an int; e.g., ascii("A") returns 65;

       o      string ascii(int i)
              Returns i as a string, e.g., ascii(65) returns the string "A";

       System calls:

       o      The `backtick` operator (`)
              A string placed between two backticks is executed by the popen(3) function.  The  standard  output
              gererated  by  the  command  that is stored in the string argument is returned as a list. An empty
              list indicates that the command could not be executed. A command that could be  executed  but  did
              not  produce  any output returns a list containing one empty element. The command’s standard error
              stream output is not automatically collected. Standard shell redirection could be used to  collect
              the standard error stream’s output as well. Example:

                      string s = "ls";
                      printf(`s`);        // prints the elements in the current
                                          // directory

       Filename modifiers:

       o      string change_base(string file, string newbase)
              Changes  the  basename of file, returns the changed name. E.g, change_base("/path/demo.im", "out")
              returns "/path/out.im";

       o      string change_ext(string file, string newext)
              Changes the extension of file, returns the changed name. E.g, change_ext("source.cc", "o") returns
              "source.o";

       o      string change_path(string file, string newpath)
              Changes the path specification of file, returns the changed name.  E.g,  change_path("tmp/binary",
              "/usr/bin") returns "/usr/bin/binary". Note that the /-separator is inserted if required.

       System calls:

       o      string chdir(string newdir)
              Changes the script’s working directory, returns the previous dir as an absolute path.
              Use  chdir(".")  to  get  current  working  directory, chdir("") may be used to obtain the startup
              working directory (this functionality was  broken  in  releases  before  than  7.00,  but  is  now
              operational). The function terminates the icmake-script if the specified newdir does not exist.

       o      string chdir(int checking, string newdir)
              Same  functionality as the previous function, but by specifying checking as P_NOCHECK the function
              won’t terminate the script. Rather, it will return the script’s current working directory.

       Helper functions of exec() (see also below at exec()):

       o      cmdhead(string h)
              Defines a `command head’, to be used with exec(). By default,  the  `command  head’  is  an  empty
              string.

       o      cmdtail(string t)
              Defines  a  `command  tail’,  to  be  used with exec(). By default, the `command tail’ is an empty
              string.

       Icmake execution modifier:

       o      echo(int opt)
              Controls echoing of called  programs  (and  their  arguments),  specify  OFF  if  echoing  is  not
              requested. By default ON is active.

       Functions returning elements of aggregates:

       o      string element(int index, list lst)
              Returns string index (0-based) from lst. An empty string is returned if an unavailable index value
              is provided. See also the [] operator in the section OPERATORS.

       o      string element(int index, string str)
              Returns  character  index  (0-based) from str. An empty string is returned if an unavailable index
              value is provided. See also the [] operator in the section OPERATORS.

       System calls:

       o      exec(string cmd, ...)
              Executes command with arguments. Each argument  will  be  prefixed  by  arghead()’s  argument  and
              postfixed  by argtail()’s argument. Note that no blanks are inserted between arghead()’s contents,
              the argument proper, and argtail()’s argument. All thus modified arguments are concatenated,  this
              time  separated  by  single blanks, and then cmdhead()’s contents are inserted between the command
              and the first argument (on either side delimited by single blanks) and  cmdtail()’s  contents  are
              appended  to the arguments (again, separated by a single blank). PATH is searched to locate cmd. 0
              is returned.

       o      exec(int checkcmd, string cmd, ...)
              Same functionality as the previous function, but by specifying checking as P_NOCHECK the  function
              won’t  terminate the script. Rather, it will return the called command’s exit status, or 0x7f00 if
              the command wasn’t found.

       o      execute(string cmd, string cmdhd, string arghd, ..., string argtl, string cmdtl)
              Same as exec(), but command head/tail and argument head/tail  must  be  specified.   The  actually
              executed  command  starts with cmd, followed by cmdhd. Next is a series of arguments follows, each
              enclosed by arghd and argtl. The command terminates with cmdtl. 0 is returned

       o      execute(int checking, string cmd, string cmdhd, string arghd, ..., string argtl, string cmdtl)
              Same functionality as the previous function, but by specifying checking as P_NOCHECK the  function
              won’t  terminate the script. Rather, it will return the called command’s exit status, or 0x7f00 if
              the command wasn’t found.  )

       System interface:

       o      int exists(string file)
              Returns a non-zero value if file exists, otherwise 0 is returned.

       Input interface:

       o      list fgets(string file, int offset)
              The next line found at offet offset is read from file.  It returns a list retlist  containing  two
              elements:
              element(0, retlist) is the string that was read (including the \n, if found)
              element(1, retlist) is the next offset to read.

              An empty return list signifies EOF. Since an empty list’s `first’ eement is an empty string, which
              is converted to the value 0, a file may be read and processed as follows:

                      list line;
                      while (1)
                      {
                          line = fgets("filename", (int)line[1]);
                          if (!line)
                              break;
                          process(line[0]);
                      }

       Output interface:

       o      int fprintf(string filename, ...)
              Appends  all  (comma  separated)  arguments  to  the  file filename. Returns the number of printed
              arguments.

       Filename modifier:

       o      string get_base(string file)
              Returns the base name of file. The base name is the file without its path prefix and  without  its
              extension. The extension is all information starting at the final dot in the filename. If no final
              dot is found, the file name is the base name. Eg., the base name of a.b equals a, the base name of
              a.b.c equals a.b, the base name of a/b/c equals c.

       System interface:

       o      list getenv(string envvar)
              Returns the value of environment variable envvar in a list containing two elements:
              the first element indicates whether the environment variable was defined (value "1") or not (value
              "0");
              the second element indicates the value of the environment variable.

              Enivironment  variables  are  of the form variable=value, and if defined the list’s second element
              contains value. If the value is empty, the variable is defined, but has no  text  associated  with
              it.

       Filename modifier:

       o      string get_ext(string file)
              Returns  the  extension  of  file, except for the separating dot. The extension is all information
              starting at the final dot in the filename. If no final dot is found, the  extension  is  an  empty
              string.

       Input interface:

       o      string getch()
              Returns  the  next  pressed key as a string (no `Enter’ required for ms-dos and unix (incl. linux)
              systems).

       Filename modifier:

       o      string get_path(string file)
              Returns the path-prefix of file. The path prefix is all information  up  to  (and  including)  the
              final directory separator (which is, depending on the operating system, a forward- or backslash).

              If no path is found, an empty strring is returned.

       System interface:

       o      int getpid()
              Returns the process-id (UNIX) or PSP-paragraph (DOS) of the icmake byte code interpreter icm-exec.

       Input interface:

       o      string gets()
              Returns the next line read from the keyboard as a string. The line entered on the keyboard must be
              terminated by an `Enter’ key, which is not stored in the returned string.

       Functions creating lists of files:

       o      list makelist(string mask)
              Returns  a  list  of  all files matching mask. E.g., makelist("*.c") returns a list containing all
              files ending in .c.

       o      list makelist(type, string mask)
              Same as the previous function, but the type of the directory elements  may  be  specified  as  its
              first argument:
              symbol     meaning
              O_ALL      obtain all directory entries
              O_DIR      obtain all directories, including . and ..
              O_FILE     obtain a list of files
              O_SUBDIR   obtain all subdirectories

              Note  that  the  pattern * will not match hidden entries under Unix-type operating systems. Use .*
              for that.

       o      list makelist(string mask, newer, string comparefile)
              Returns list of all files matching mask which are newer  than  a  provided  comparefile.  Operator
              younger may be used instead of newer. Note that newer and younger are operators, not strings.

       o      list makelist([int = O_FILE,] string mask, newer, string comparefile)
              Same as the previous function, but type may be specified as in list makelist(type, string mask).

       o      makelist(string mask, older, string comparefile)
              See above; returns a list of files that are older than the comparefile.

       o      makelist(type, string mask, older, string comparefile)
              Same as the previous function, but type may be specified as in list makelist(type, string mask).

       Output interface:

       o      int printf(...)
              Shows  all  (comma  separated) arguments to screen (i.e., the standard output stream). Returns the
              number of printed arguments.

       System interface:

       o      int putenv(string envvar)
              Adds envvar to the current (icmake) environment Use the format: "VAR=value". Returns 0.

       List information:

       o      int sizeof(list l)
              Returns the number of elements in list

       System information:

       o      list stat(string entry)
              Returns stat(2) information of directory entry  entry  as  a  list.  The  returned  list  has  two
              elements: element 0 is the attribute value, element 1 contains the size of the file.

              Attributes are  returned as bit-flags, composed from the following predefined constants:

                          S_IFCHR     S_IFDIR     S_IFREG
                          S_IREAD     S_IWRITE    S_IEXEC

              See the stat(2) manual page for the meanings of these constants.

       o      list stat(checking, string entry)
              Same  as  the  previous  function,  but  by  specifying  checking  as P_NOCHECK the function won’t
              terminate the script. Rather, it will rturn stat(2)’s return value.

       String support:

       o      int strlen(string s)
              Returns the number of characters in s (not counting the final 0).

       o      int strfind(string haystack, string needle)
              returns index in haystack where needle is found, or -1 if needle is not contained in haystack.
              This function was called strstr() in versions before 7.00.

       o      string strlwr(string s)
              Returns a lower-case duplicate of s.

       o      list strtok(string str, string separators)
              Returns a list containing all substrings of str separated by one or more (consecutive)  characters
              in  separators.  E.g.,  strtok("hello icmake’s+world", " +") returns the list containing the three
              strings "hello", "icmake’s", and "world".

       o      string strupr(string s)
              Returns an upper-case duplicate of s.

       o      string substr(string text, int offset, int count)
              Returns a substring of text, starting at offset, consisting of count characters. If offset exceeds
              (or equals) the string’s size or if count <= 0, then an empty string is  returned.  If  offset  is
              less than 0 then 0 is used.

       System calls:

       o      int system(string command)
              Executes command. The return value indicates the executed command’s exit value. The string command
              may contain redirection and/or piping characters.

       o      int system(int checking, string command)
              Same  functionality as the previous function, but by specifying checking as P_NOCHECK the function
              won’t terminate the script. Rather, it will return the called command’s exit status, or 0x7f00  if
              the command wasn’t found.  )

USER DEFINED FUNCTIONS

       Icmake  scripts  may  define  functions,  and  a function main() must be defined. Functions must have the
       following elements:

       o      The function’s return type. One of the available types must be used explicitly, e.g., void.  There
              is no default type.

       o      The function’s name, e.g., compile.

       o      A  parameter  list,  defining  zero  or more comma-separated parameters. The parameters themselves
              consist of a type name followed by the  parameter’s  identifier.  E.g.,  (string  outfile,  string
              source).

       o      A body surrounded by a pair of curly braces ({ and }).

              Function  bodies  may  contain (optionally initialized) variable definitions. Variable definitions
              start with a type name, followed by one or more comma separated (optionally initialized)  variable
              identifiers.   If  a  variable  is not explicitly initialized it is initialized by default. An int
              variable is initialized to 0, a string is initialized to empty text ("") and a list is initialized
              to a list of zero elements.

              Following variable definitions, bodies may contain zero or more statements (see below  at  section
              FLOW  CONTROL  for  the  various  flow-control  statements). Note that all local variables must be
              defined at the very beginning of function bodies.

       User defined functions must be defined before they can be used, although they may be called  recursively.
       Therefore, indirect recursion is not supported by icmake.

       The  user-defined  function  main()  has three optional arguments, which may be omitted from the last one
       (envp) to the first (argc), as in C. Its full prototype is (note: void return type):

           void main(int argc, list argv, list envp)

       In main(),

       o      argc represents the number of elements in argv;

       o      argv contains the arguments, with element 0 the compiled icmake script (the `.bim’ file);

       o      envp containts the `environment’ variables. The function sizeof()  (see  below)  may  be  used  to
              determine its elements. Elements in envp have the form variable=value. Alternatively, the function
              getenv()  (see  below)  can  be  used  to  retrieve  a  specific environment variable immediately.
              Example:

                  void main(int argc, list argv)
                  {
                      list toCompile;
                      int idx;

                      if (argc == 1)
                          usage(element(0, argv));

                      if (toCompile = altered("*.cc"))
                      {
                          for (idx = sizeof(toCompile); idx--; )
                              compile(element(idx, toCompile));

                          if (getenv("dryrun")[0] == "0")
                              linking(element(2, argv));
                      }
                      exit (0);
                  }

FILES

       The mentioned paths are sugestive only and may be installation dependent:

       o      /usr/bin/icmake: the main icmake program;

       o      /usr/bin/icmun: the icmake unassembler;

       o      /usr/lib/icm-pp: the preprocessor called by icmake;

       o      /usr/lib/icm-comp: the compiler called by icmake;

       o      /usr/lib/icm-exec: the byte-code interpreter called by icmake;

EXAMPLES

       The distribution (usually in /usr/share/doc/icmake) contains  a  directory  examples  containing  various
       examples  of  icmake  script.  Note in particular the examples/icmbuild subdirectory containing a general
       script for C++ and C program maintenance.

SEE ALSO

       icmbuild(1), icmconf(7), icmstart(1), icmstart.rc(7), make(1)

BUGS

       None reported

COPYRIGHT

       This is free software, distributed under the terms of the GNU General Public License (GPL).

AUTHOR

       Frank B. Brokken (f.b.brokken@rug.nl).

icmake.7.21.01.tar.gz                               1992-2014                                          icmake(1)