icmake man page on DragonFly

Man page or keyword search:  
man Server   44335 pages
apropos Keyword Search (all sections)
Output format
DragonFly logo
[printable version]

icmake(1)		 A program maintenance utility		     icmake(1)

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	resem‐
       bling  the  well-known  C-programming  language)	 to define the actions
       involved in (complex) program maintenance. For this, icmake offers var‐
       ious  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 mod‐
       ified. 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  com‐
	      ment-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/local/bin/icmake -qi

	      then icm may be given as a command, thus executing

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

	      Alternatively,

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

	      may be used, resulting in the execution of

			  #!/usr/local/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  defini‐
	      tion  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 accep‐
	      tance 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 con‐
	      stants 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, oper‐
       ating 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 con‐
	      catetated without using the + operator, e.g.,

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

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

       o      string comparisons: operators == != <= >= < > != and ==  may  be
	      applied  to  string values or variables, returning 1 if the com‐
	      parison 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 per‐
	      formed  using  the exists() predefined function (see below, sec‐
	      tion 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, construc‐
	      tions 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.	Opera‐
	      tor != 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, construc‐
	      tions 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	alpha‐
       betically  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 stan‐
	      dard  error  stream output is not automatically collected. Stan‐
	      dard 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  function‐
	      ality was broken in releases before than 7.00, but is now opera‐
	      tional). The function terminates the icmake-script if the speci‐
	      fied 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), spec‐
	      ify 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 sin‐
	      gle  blanks)  and cmdtail()’s contents are appended to the argu‐
	      ments (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  con‐
	      taining 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	 vari‐
	      able.

	      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 informa‐
	      tion  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  com‐
	      parefile)
	      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  com‐
	      parefile.

       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 stan‐
	      dard 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 follow‐
	      ing 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.,  str‐
	      tok("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 off‐
	      set is less than 0 then 0 is used.

       System calls:

       o      int system(string command)
	      Executes	command.  The return value indicates the executed com‐
	      mand’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  parame‐
	      ters.  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,  fol‐
	      lowed  by	 one  or more comma separated (optionally initialized)
	      variable identifiers.  If a variable is not explicitly  initial‐
	      ized  it	is initialized by default. An int variable is initial‐
	      ized 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. Ele‐
	      ments  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 depen‐
       dent:

       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	direc‐
       tory  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.22.01.tar.gz		   1992-2015			     icmake(1)
[top]

List of man pages available for DragonFly

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net