m4(1posix)


NAME

   m4 --- macro processor

SYNOPSIS

   m4 [s] [D name[=val]]... [U name]... file...

DESCRIPTION

   The m4 utility is a macro processor that shall read one  or  more  text
   files,  process  them according to their included macro statements, and
   write the results to standard output.

OPTIONS

   The m4  utility  shall  conform  to  the  Base  Definitions  volume  of
   POSIX.12008,  Section 12.2, Utility Syntax Guidelines, except that the
   order of the D and U options shall be significant, and options can be
   interspersed with operands.

   The following options shall be supported:

   s        Enable  line  synchronization output for the c99 preprocessor
             phase (that is, #line directives).

   D name[=val]
             Define name to val or to null if =val is omitted.

   U name   Undefine name.

OPERANDS

   The following operand shall be supported:

   file      A pathname of a text file to be  processed.  If  no  file  is
             given, or if it is '', the standard input shall be read.

STDIN

   The standard input shall be a text file that is used if no file operand
   is given, or if it is ''.

INPUT FILES

   The input file named by the file operand shall be a text file.

ENVIRONMENT VARIABLES

   The following environment variables shall affect the execution of m4:

   LANG      Provide  a  default  value   for   the   internationalization
             variables  that  are unset or null. (See the Base Definitions
             volume of  POSIX.12008,  Section  8.2,  Internationalization
             Variables   for   the   precedence   of  internationalization
             variables used to determine the values of locale categories.)

   LC_ALL    If set to a non-empty string value, override  the  values  of
             all the other internationalization variables.

   LC_CTYPE  Determine  the  locale for the interpretation of sequences of
             bytes of text data as characters (for example, single-byte as
             opposed  to  multi-byte  characters  in  arguments  and input
             files).

   LC_MESSAGES
             Determine the locale that should be used to affect the format
             and  contents  of  diagnostic  messages  written  to standard
             error.

   NLSPATH   Determine the location of message catalogs for the processing
             of LC_MESSAGES.

ASYNCHRONOUS EVENTS

   Default.

STDOUT

   The  standard  output shall be the same as the input files, after being
   processed for macro expansion.

STDERR

   The standard error shall be used to display strings with  the  errprint
   macro, macro tracing enabled by the traceon macro, the defined text for
   macros written by the dumpdef macro, or for diagnostic messages.

OUTPUT FILES

   None.

EXTENDED DESCRIPTION

   The m4 utility shall compare each token from the input against the  set
   of built-in and user-defined macros. If the token matches the name of a
   macro, then the token shall be replaced by the macro's  defining  text,
   if  any, and rescanned for matching macro names. Once no portion of the
   token matches the name of a macro, it  shall  be  written  to  standard
   output. Macros may have arguments, in which case the arguments shall be
   substituted into the defining text before it is rescanned.

   Macro calls have the form:

       name(arg1, arg2, ..., argn)

   Macro names shall consist of letters, digits,  and  underscores,  where
   the  first  character is not a digit. Tokens not of this form shall not
   be treated as macros.

   The application shall ensure that  the  <left-parenthesis>  immediately
   follows  the name of the macro. If a token matching the name of a macro
   is not followed by a <left-parenthesis>, it is handled as a use of that
   macro without arguments.

   If  a macro name is followed by a <left-parenthesis>, its arguments are
   the <comma>-separated tokens between  the  <left-parenthesis>  and  the
   matching    <right-parenthesis>.    Unquoted   white-space   characters
   preceding  each  argument  shall  be  ignored.  All  other  characters,
   including  trailing  white-space  characters,  are  retained.   <comma>
   characters enclosed between <left-parenthesis> and  <right-parenthesis>
   characters do not delimit arguments.

   Arguments  are  positionally defined and referenced. The string "$1" in
   the defining text shall be replaced  by  the  first  argument.  Systems
   shall  support  at  least  nine  arguments;  only the first nine can be
   referenced, using the strings "$1" to "$9", inclusive. The string  "$0"
   is  replaced with the name of the macro. The string "$#" is replaced by
   the number of arguments as a string. The string "$*" is replaced  by  a
   list  of  all  of  the  arguments, separated by <comma> characters. The
   string "$@" is replaced by a list of all of the arguments separated  by
   <comma>  characters, and each argument is quoted using the current left
   and  right  quoting  strings.  The  string  "${"  produces  unspecified
   behavior.

   If  fewer  arguments are supplied than are in the macro definition, the
   omitted arguments are taken to be null. It is  not  an  error  if  more
   arguments are supplied than are in the macro definition.

   No special meaning is given to any characters enclosed between matching
   left and right quoting strings, but the quoting strings are  themselves
   discarded.  By  default,  the  left  quoting string consists of a grave
   accent (backquote) and the right quoting string consists  of  an  acute
   accent (single-quote); see also the changequote macro.

   Comments  are  written  but  not  scanned  for matching macro names; by
   default,  the  begin-comment  string  consists  of  the   <number-sign>
   character and the end-comment string consists of a <newline>.  See also
   the changecom and dnl macros.

   The m4 utility shall make available the following built-in macros. They
   can  be  redefined, but once this is done the original meaning is lost.
   Their values shall be null unless otherwise stated. In the descriptions
   below,  the  term  defining  text refers to the value of the macro: the
   second argument to the define macro, among other things. Except for the
   first  argument  to  the  eval macro, all numeric arguments to built-in
   macros shall be  interpreted  as  decimal  values.  The  string  values
   produced  as  the  defining text of the decr, divnum, incr, index, len,
   and sysval built-in macros shall be in the form of  a  decimal-constant
   as defined in the C language.

   changecom The  changecom  macro  shall  set  the begin-comment and end-
             comment strings. With no  arguments,  the  comment  mechanism
             shall  be  disabled.  With  a  single non-null argument, that
             argument shall become the  begin-comment  and  the  <newline>
             shall  become  the  end-comment  string.  With  two  non-null
             arguments, the first argument shall become the  begin-comment
             string  and  the second argument shall become the end-comment
             string. The behavior is unspecified  if  either  argument  is
             provided  but  null. Systems shall support comment strings of
             at least five characters.

   changequote
             The changequote macro shall set the begin-quote and end-quote
             strings. With no arguments, the quote strings shall be set to
             the default values (that is, `'). The behavior is unspecified
             if  there  is  a  single argument or either argument is null.
             With two non-null arguments, the first argument shall  become
             the  begin-quote  string and the second argument shall become
             the end-quote string. Systems shall support quote strings  of
             at least five characters.

   decr      The  defining  text  of  the  decr  macro  shall be its first
             argument decremented by 1. It shall be an error to specify an
             argument containing any non-numeric characters.  The behavior
             is unspecified if decr  is  not  immediately  followed  by  a
             <left-parenthesis>.

   define    The  second  argument  shall  become the defining text of the
             macro whose name is the first  argument.  It  is  unspecified
             whether the define macro deletes all prior definitions of the
             macro named by its first argument or preserves  all  but  the
             current definition of the macro.  The behavior is unspecified
             if  define  is  not  immediately   followed   by   a   <left-
             parenthesis>.

   defn      The  defining  text  of  the  defn  macro shall be the quoted
             definition  (using  the  current  quoting  strings)  of   its
             arguments.  The  behavior  is  unspecified  if  defn  is  not
             immediately followed by a <left-parenthesis>.

   divert    The m4 utility maintains nine temporary buffers,  numbered  1
             to  9,  inclusive.   When  the  last  of  the  input has been
             processed, any output that has been placed in  these  buffers
             shall  be  written  to  standard  output  in buffer-numerical
             order. The divert macro shall divert  future  output  to  the
             buffer  specified  by its argument. Specifying no argument or
             an argument of 0 shall  resume  the  normal  output  process.
             Output  diverted  to a stream with a negative number shall be
             discarded. Behavior is  implementation-defined  if  a  stream
             number  larger  than  9 is specified. It shall be an error to
             specify an argument containing any non-numeric characters.

   divnum    The defining text of the divnum macro shall be the number  of
             the current output stream as a string.

   dnl       The  dnl macro shall cause m4 to discard all input characters
             up to and including the next <newline>.

   dumpdef   The dumpdef macro shall write the defined  text  to  standard
             error  for  each of the macros specified as arguments, or, if
             no arguments are specified, for all macros.

   errprint  The errprint macro shall  write  its  arguments  to  standard
             error.  The  behavior  is  unspecified  if  errprint  is  not
             immediately followed by a <left-parenthesis>.

   eval      The eval macro  shall  evaluate  its  first  argument  as  an
             arithmetic  expression,  using signed integer arithmetic with
             at least 32-bit precision. At least the following  C-language
             operators shall be supported, with precedence, associativity,
             and behavior as  described  in  Section  1.1.2.1,  Arithmetic
             Precision and Operations:

                 ()
                 unary +
                 unary 
                 ~

                 !
                 binary *
                 /
                 %
                 binary +
                 binary 
                 <<
                 >>
                 <
                 <=
                 >
                 >=
                 ==
                 !=
                 binary &
                 ^
                 |
                 &&
                 ||

             Systems shall support octal and hexadecimal numbers as in the
             ISO C standard.  The second argument, if specified, shall set
             the  radix  for  the  result;  if  the  argument  is blank or
             unspecified, the default is 10. Behavior  is  unspecified  if
             the  radix  falls  outside  the range 2 to 36, inclusive. The
             third argument, if specified,  sets  the  minimum  number  of
             digits  in  the  result. Behavior is unspecified if the third
             argument is less than zero. It shall be an error  to  specify
             the  second  or  third  argument  containing  any non-numeric
             characters. The  behavior  is  unspecified  if  eval  is  not
             immediately followed by a <left-parenthesis>.

   ifdef     If  the  first  argument  to  the ifdef macro is defined, the
             defining text shall be the second argument.   Otherwise,  the
             defining  text  shall be the third argument, if specified, or
             the null string, if not. The behavior is unspecified if ifdef
             is not immediately followed by a <left-parenthesis>.

   ifelse    The  ifelse macro takes three or more arguments. If the first
             two arguments compare as equal strings (after macro expansion
             of  both  arguments),  the  defining  text shall be the third
             argument. If the first two arguments do not compare as  equal
             strings  and  there  are  three  arguments, the defining text
             shall be null. If the first two arguments do not  compare  as
             equal  strings  and  there  are  four  or five arguments, the
             defining text shall be the fourth argument. If the first  two
             arguments  do  not compare as equal strings and there are six
             or  more  arguments,  the  first  three  arguments  shall  be
             discarded  and  processing  shall  restart with the remaining
             arguments. The behavior  is  unspecified  if  ifelse  is  not
             immediately followed by a <left-parenthesis>.

   include   The defining text for the include macro shall be the contents
             of the file named by the first argument. It shall be an error
             if  the  file  cannot be read. The behavior is unspecified if
             include is not immediately followed by a <left-parenthesis>.

   incr      The defining text of  the  incr  macro  shall  be  its  first
             argument incremented by 1. It shall be an error to specify an
             argument containing any non-numeric characters.  The behavior
             is  unspecified  if  incr  is  not  immediately followed by a
             <left-parenthesis>.

   index     The defining text of the  index  macro  shall  be  the  first
             character  position (as a string) in the first argument where
             a string matching the second argument begins  (zero  origin),
             or 1 if the second argument does not occur.  The behavior is
             unspecified if index is not immediately followed by a  <left-
             parenthesis>.

   len       The  defining text of the len macro shall be the length (as a
             string) of the first argument.  The behavior  is  unspecified
             if len is not immediately followed by a <left-parenthesis>.

   m4exit    Exit from the m4 utility. If the first argument is specified,
             it is the exit code. The default is  zero.  It  shall  be  an
             error  to  specify  an  argument  containing  any non-numeric
             characters.

   m4wrap    The first argument shall be processed when EOF is reached. If
             the  m4wrap  macro  is  used  multiple  times,  the arguments
             specified shall be processed in the order in which the m4wrap
             macros  were processed. The behavior is unspecified if m4wrap
             is not immediately followed by a <left-parenthesis>.

   maketemp  The defining text shall  be  the  first  argument,  with  any
             trailing  'X' characters replaced with the current process ID
             as a string.  The behavior is unspecified if maketemp is  not
             immediately followed by a <left-parenthesis>.

   mkstemp   The  first argument shall be taken as a template for creating
             an empty file, with trailing  'X'  characters  replaced  with
             characters  from  the  portable  filename  character set. The
             behavior is unspecified if the first argument does not end in
             at   least  six  'X'  characters.  If  a  temporary  file  is
             successfully created, then the defining  text  of  the  macro
             shall  be  the name of the new file.  The user ID of the file
             shall be set to the effective user ID  of  the  process.  The
             group  ID  of  the  file  shall be set to the group ID of the
             file's parent directory or to the effective group ID  of  the
             process.  The  file  access permission bits are set such that
             only the owner can both read and write the  file,  regardless
             of  the  current umask of the process. If a file could not be
             created, the defining text of the macro shall  be  the  empty
             string.  The  behavior  is  unspecified  if  mkstemp  is  not
             immediately followed by a <left-parenthesis>.

   popdef    The popdef macro shall delete the current definition  of  its
             arguments,  replacing  that definition with the previous one.
             If there is no previous definition, the macro  is  undefined.
             The  behavior  is  unspecified  if  popdef is not immediately
             followed by a <left-parenthesis>.

   pushdef   The pushdef macro shall be equivalent  to  the  define  macro
             with  the  exception  that  it  shall  preserve  any  current
             definition for future retrieval using the popdef  macro.  The
             behavior   is  unspecified  if  pushdef  is  not  immediately
             followed by a <left-parenthesis>.

   shift     The defining text for the  shift  macro  shall  be  a  comma-
             separated  list  of  its arguments except the first one. Each
             argument shall be quoted using the current  quoting  strings.
             The  behavior  is  unspecified  if  shift  is not immediately
             followed by a <left-parenthesis>.

   sinclude  The sinclude macro shall be equivalent to the include  macro,
             except  that  it  shall  not  be  an  error  if  the  file is
             inaccessible.  The behavior is unspecified if sinclude is not
             immediately followed by a <left-parenthesis>.

   substr    The defining text for the substr macro shall be the substring
             of the first argument beginning at the zero-offset  character
             position   specified   by  the  second  argument.  The  third
             argument, if specified, shall be the number of characters  to
             select;  if  not  specified, the characters from the starting
             point to the end of  the  first  argument  shall  become  the
             defining text. It shall not be an error to specify a starting
             point beyond the end of the first argument and  the  defining
             text  shall  be  null.  It  shall  be  an error to specify an
             argument containing any non-numeric characters.  The behavior
             is  unspecified  if  substr  is not immediately followed by a
             <left-parenthesis>.

   syscmd    The syscmd macro shall interpret  its  first  argument  as  a
             shell  command  line.  The  defining text shall be the string
             result of that  command.  The  string  result  shall  not  be
             rescanned  for  macros  while  setting  the defining text. No
             output redirection shall be performed by the m4 utility.  The
             exit status value from the command can be retrieved using the
             sysval macro. The behavior is unspecified if  syscmd  is  not
             immediately followed by a <left-parenthesis>.

   sysval    The defining text of the sysval macro shall be the exit value
             of the utility  last  invoked  by  the  syscmd  macro  (as  a
             string).

   traceon   The  traceon  macro  shall  enable  tracing  for  the  macros
             specified as arguments, or, if no  arguments  are  specified,
             for all macros. The trace output shall be written to standard
             error in an unspecified format.

   traceoff  The traceoff macro  shall  disable  tracing  for  the  macros
             specified  as  arguments,  or, if no arguments are specified,
             for all macros.

   translit  The defining text of the translit macro shall  be  the  first
             argument  with  every  character  that  occurs  in the second
             argument replaced with the corresponding character  from  the
             third  argument. If no replacement character is specified for
             some source character because the second argument  is  longer
             than the third argument, that character shall be deleted from
             the first argument in translit's defining text. The  behavior
             is unspecified if the '' character appears within the second
             or  third  argument  anywhere  besides  the  first  or   last
             character.  The behavior is unspecified if the same character
             appears more than once in the second argument.  The  behavior
             is  unspecified  if translit is not immediately followed by a
             <left-parenthesis>.

   undefine  The undefine macro shall delete  all  definitions  (including
             those  preserved using the pushdef macro) of the macros named
             by its arguments. The behavior is unspecified if undefine  is
             not immediately followed by a <left-parenthesis>.

   undivert  The  undivert  macro shall cause immediate output of any text
             in temporary buffers named as  arguments,  or  all  temporary
             buffers  if  no  arguments  are  specified.  Buffers  can  be
             undiverted into other temporary buffers.   Undiverting  shall
             discard the contents of the temporary buffer. The behavior is
             unspecified  if  an   argument   contains   any   non-numeric
             characters.

EXIT STATUS

   The following exit values shall be returned:

    0    Successful completion.

   >0    An error occurred

   If  the  m4exit  macro  is used, the exit value can be specified by the
   input file.

CONSEQUENCES OF ERRORS

   Default.

   The following sections are informative.

APPLICATION USAGE

   The defn macro is useful for renaming macros, especially built-ins.

   Since eval defers to the ISO C standard, some operations have undefined
   behavior.  In some implementations, division or remainder by zero cause
   a fatal signal, even if the  division  occurs  on  the  short-circuited
   branch  of  "&&"  or  "||".   Any  operation  that  overflows in signed
   arithmetic produces  undefined  behavior.  Likewise,  using  the  shift
   operators with a shift amount that is not positive and smaller than the
   precision is undefined, as is shifting a negative number to the  right.
   Historically,  not  all  implementations  obeyed  C-language precedence
   rules: '~' and '!'  were lower than '=='; '==' and '!=' were not  lower
   than  '<';  and '|' was not lower than '^'; the liberal use of "()" can
   force  the   desired   precedence   even   with   these   non-compliant
   implementations.  Furthermore, some traditional implementations treated
   '^' as an exponentiation operator, although  most  implementations  now
   use "**" as an extension for this purpose.

   When  a  macro  has  been multiply defined via the pushdef macro, it is
   unspecified whether the define macro will alter only  the  most  recent
   definition  (as  though  by  popdef and pushdef), or replace the entire
   stack of definitions with a single definition (as  though  by  undefine
   and  pushdef).   An  application  desiring  particular behavior for the
   define macro in this case can redefine it accordingly.

   Applications should use the mkstemp macro instead  of  the  obsolescent
   maketemp macro for creating temporary files.

EXAMPLES

   If the file m4src contains the lines:

       The value of `VER' is "VER".
       ifdef(`VER', ``VER'' is defined to be VER., VER is not defined.)
       ifelse(VER, 1, ``VER'' is `VER'.)
       ifelse(VER, 2, ``VER'' is `VER'., ``VER'' is not 2.)
       end

   then the command

       m4 m4src

   or the command:

       m4 U VER m4src

   produces the output:

       The value of VER is "VER".
       VER is not defined.

       VER is not 2.
       end

   The command:

       m4 D VER m4src

   produces the output:

       The value of VER is "".
       VER is defined to be .

       VER is not 2.
       end

   The command:

       m4 D VER=1 m4src

   produces the output:

       The value of VER is "1".
       VER is defined to be 1.
       VER is 1.
       VER is not 2.
       end

   The command:

       m4 D VER=2 m4src

   produces the output:

       The value of VER is "2".
       VER is defined to be 2.

       VER is 2.
       end

RATIONALE

   Historic  System V-based behavior treated "${" in a macro definition as
   two literal characters. However, this sequence is left  unspecified  so
   that  implementations  may offer extensions such as "${11}" meaning the
   eleventh  positional  parameter.  Macros  can  still  be  defined  with
   appropriate  uses  of nested quoting to result in a literal "${" in the
   output after rescanning removes the nested quotes.

   In the translit built-in, historic System V-based behavior treated  ''
   as  a  literal;  GNU behavior treats it as a range. This version of the
   standard allows either behavior.

FUTURE DIRECTIONS

   None.

SEE ALSO

   c99

   The Base Definitions volume of  POSIX.12008,  Chapter  8,  Environment
   Variables, Section 12.2, Utility Syntax Guidelines

COPYRIGHT

   Portions  of  this text are reprinted and reproduced in electronic form
   from IEEE Std 1003.1, 2013 Edition, Standard for Information Technology
   --  Portable  Operating  System  Interface (POSIX), The Open Group Base
   Specifications  Issue  7,  Copyright  (C)  2013  by  the  Institute  of
   Electrical and Electronics Engineers, Inc and The Open Group.  (This is
   POSIX.1-2008 with the 2013 Technical Corrigendum  1  applied.)  In  the
   event of any discrepancy between this version and the original IEEE and
   The Open Group Standard, the original IEEE and The Open Group  Standard
   is  the  referee document. The original Standard can be obtained online
   at http://www.unix.org/online.html .

   Any typographical or formatting errors that appear  in  this  page  are
   most likely to have been introduced during the conversion of the source
   files   to   man   page   format.   To   report   such   errors,    see
   https://www.kernel.org/doc/man-pages/reporting_bugs.html .





Opportunity


Personal Opportunity - Free software gives you access to billions of dollars of software at no cost. Use this software for your business, personal use or to develop a profitable skill. Access to source code provides access to a level of capabilities/information that companies protect though copyrights. Open source is a core component of the Internet and it is available to you. Leverage the billions of dollars in resources and capabilities to build a career, establish a business or change the world. The potential is endless for those who understand the opportunity.

Business Opportunity - Goldman Sachs, IBM and countless large corporations are leveraging open source to reduce costs, develop products and increase their bottom lines. Learn what these companies know about open source and how open source can give you the advantage.





Free Software


Free Software provides computer programs and capabilities at no cost but more importantly, it provides the freedom to run, edit, contribute to, and share the software. The importance of free software is a matter of access, not price. Software at no cost is a benefit but ownership rights to the software and source code is far more significant.


Free Office Software - The Libre Office suite provides top desktop productivity tools for free. This includes, a word processor, spreadsheet, presentation engine, drawing and flowcharting, database and math applications. Libre Office is available for Linux or Windows.





Free Books


The Free Books Library is a collection of thousands of the most popular public domain books in an online readable format. The collection includes great classical literature and more recent works where the U.S. copyright has expired. These books are yours to read and use without restrictions.


Source Code - Want to change a program or know how it works? Open Source provides the source code for its programs so that anyone can use, modify or learn how to write those programs themselves. Visit the GNU source code repositories to download the source.





Education


Study at Harvard, Stanford or MIT - Open edX provides free online courses from Harvard, MIT, Columbia, UC Berkeley and other top Universities. Hundreds of courses for almost all major subjects and course levels. Open edx also offers some paid courses and selected certifications.


Linux Manual Pages - A man or manual page is a form of software documentation found on Linux/Unix operating systems. Topics covered include computer programs (including library and system calls), formal standards and conventions, and even abstract concepts.