Annotation of src/usr.bin/m4/m4.1, Revision 1.54
1.54 ! jmc 1: .\" @(#) $OpenBSD: m4.1,v 1.53 2008/08/21 21:02:28 espie Exp $
1.32 jmc 2: .\"
1.29 jmc 3: .\" Copyright (c) 1989, 1993
4: .\" The Regents of the University of California. All rights reserved.
1.1 deraadt 5: .\"
1.29 jmc 6: .\" This code is derived from software contributed to Berkeley by
7: .\" Ozan Yigit at York University.
1.1 deraadt 8: .\"
1.29 jmc 9: .\" Redistribution and use in source and binary forms, with or without
10: .\" modification, are permitted provided that the following conditions
11: .\" are met:
12: .\" 1. Redistributions of source code must retain the above copyright
13: .\" notice, this list of conditions and the following disclaimer.
14: .\" 2. Redistributions in binary form must reproduce the above copyright
15: .\" notice, this list of conditions and the following disclaimer in the
16: .\" documentation and/or other materials provided with the distribution.
1.31 millert 17: .\" 3. Neither the name of the University nor the names of its contributors
1.29 jmc 18: .\" may be used to endorse or promote products derived from this software
19: .\" without specific prior written permission.
20: .\"
21: .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
22: .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23: .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24: .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
25: .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26: .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27: .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28: .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29: .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30: .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31: .\" SUCH DAMAGE.
1.32 jmc 32: .\"
1.54 ! jmc 33: .Dd $Mdocdate: August 21 2008 $
1.5 aaron 34: .Dt M4 1
1.1 deraadt 35: .Os
36: .Sh NAME
37: .Nm m4
38: .Nd macro language processor
39: .Sh SYNOPSIS
40: .Nm m4
1.41 jmc 41: .Op Fl gs
42: .Oo
43: .Sm off
44: .Fl D Ar name Op No = Ar value
45: .Sm on
46: .Oc
1.23 espie 47: .Op Fl d Ar flags
1.41 jmc 48: .Op Fl I Ar dirname
1.28 espie 49: .Op Fl o Ar filename
1.41 jmc 50: .Bk -words
51: .Op Fl t Ar macro
1.1 deraadt 52: .Op Fl U Ns Ar name
1.47 grunk 53: .Op Ar
1.41 jmc 54: .Ek
1.1 deraadt 55: .Sh DESCRIPTION
56: The
57: .Nm m4
58: utility is a macro processor that can be used as a front end to any
59: language (e.g., C, ratfor, fortran, lex, and yacc).
1.47 grunk 60: If no input files are given,
1.1 deraadt 61: .Nm m4
1.48 jmc 62: reads from the standard input,
63: otherwise files specified on the command line are
1.47 grunk 64: processed in the given order.
65: Input files can be regular files, files in the m4 include paths, or a
66: single dash
67: .Pq Sq - ,
68: denoting standard input.
69: .Nm m4
70: writes
71: the processed text to the standard output, unless told otherwise.
1.1 deraadt 72: .Pp
1.8 espie 73: Macro calls have the form name(argument1[, argument2, ..., argumentN]).
1.1 deraadt 74: .Pp
75: There cannot be any space following the macro name and the open
1.10 aaron 76: parenthesis
1.33 jmc 77: .Pq Sq ( .
1.10 aaron 78: If the macro name is not followed by an open
1.5 aaron 79: parenthesis it is processed with no arguments.
1.1 deraadt 80: .Pp
81: Macro names consist of a leading alphabetic or underscore
1.9 espie 82: possibly followed by alphanumeric or underscore characters, e.g.,
1.10 aaron 83: valid macro names match the pattern
84: .Dq [a-zA-Z_][a-zA-Z0-9_]* .
1.1 deraadt 85: .Pp
1.10 aaron 86: In arguments to macros, leading unquoted space, tab, and newline
1.33 jmc 87: .Pq Sq \en
1.10 aaron 88: characters are ignored.
1.33 jmc 89: To quote strings, use left and right single quotes
90: .Po e.g.,\ \&
91: .Sq "\ this is a string with a leading space"
92: .Pc .
1.10 aaron 93: You can change the quote characters with the
1.5 aaron 94: .Ic changequote
95: built-in macro.
1.9 espie 96: .Pp
1.12 espie 97: Most built-ins don't make any sense without arguments, and hence are not
1.9 espie 98: recognized as special when not followed by an open parenthesis.
1.1 deraadt 99: .Pp
100: The options are as follows:
1.20 aaron 101: .Bl -tag -width Ds
1.1 deraadt 102: .It Fl D Ns Ar name Ns Oo
1.41 jmc 103: .Pf = Ns Ar value
1.1 deraadt 104: .Oc
105: Define the symbol
106: .Ar name
1.10 aaron 107: to have some value (or
108: .Dv NULL ) .
1.23 espie 109: .It Fl d Ar "flags"
110: Set trace flags.
1.32 jmc 111: .Ar flags
1.23 espie 112: may hold the following:
113: .Bl -tag -width Ds
114: .It Ar a
115: print macro arguments.
116: .It Ar c
117: print macro expansion over several lines.
118: .It Ar e
119: print result of macro expansion.
120: .It Ar f
121: print filename location.
122: .It Ar l
123: print line number.
124: .It Ar q
125: quote arguments and expansion with the current quotes.
126: .It Ar t
127: start with all macros traced.
128: .It Ar x
129: number macro expansions.
130: .It Ar V
131: turn on all options.
132: .El
133: .Pp
1.32 jmc 134: By default, trace is set to
1.23 espie 135: .Qq eq .
1.12 espie 136: .It Fl g
1.13 aaron 137: Activate GNU-m4 compatibility mode.
1.40 espie 138: In this mode, translit handles simple character
1.19 espie 139: ranges (e.g., a-z), regular expressions mimic emacs behavior,
1.38 espie 140: multiple m4wrap calls are handled as a stack,
1.53 espie 141: the number of diversions is unlimited,
142: empty names for macro definitions are allowed,
143: and eval understands
144: .Sq 0rbase:value
145: numbers.
1.41 jmc 146: .It Fl I Ar "dirname"
147: Add directory
148: .Ar dirname
149: to the include path.
150: .It Fl o Ar filename
151: Send trace output to
152: .Ar filename .
1.25 espie 153: .It Fl s
154: Output line synchronization directives, suitable for
155: .Xr cpp 1 .
1.41 jmc 156: .It Fl t Ar macro
157: Turn tracing on for
158: .Ar macro .
159: .It Fl "U" Ns Ar "name"
160: Undefine the symbol
161: .Ar name .
1.17 aaron 162: .El
1.1 deraadt 163: .Sh SYNTAX
164: .Nm m4
1.10 aaron 165: provides the following built-in macros.
166: They may be redefined, losing their original meaning.
167: Return values are null unless otherwise stated.
1.36 espie 168: .Bl -tag -width changequote
169: .It Fn builtin name
1.37 jmc 170: Calls a built-in by its
171: .Fa name ,
1.36 espie 172: overriding possible redefinitions.
173: .It Fn changecom startcomment endcomment
1.39 espie 174: Changes the start comment and end comment sequences.
175: Comment sequences may be up to five characters long.
1.42 jmc 176: The default values are the hash sign
1.10 aaron 177: and the newline character.
1.39 espie 178: .Bd -literal -offset indent
179: # This is a comment
180: .Ed
181: .Pp
182: With no arguments, comments are turned off.
183: With one single argument, the end comment sequence is set
184: to the newline character.
1.36 espie 185: .It Fn changequote beginquote endquote
1.39 espie 186: Defines the open quote and close quote sequences.
187: Quote sequences may be up to five characters long.
188: The default values are the backquote character and the quote
189: character.
190: .Bd -literal -offset indent
191: `Here is a quoted string'
192: .Ed
193: .Pp
194: With no arguments, the default quotes are restored.
195: With one single argument, the close quote sequence is set
196: to the newline character.
1.36 espie 197: .It Fn decr arg
1.37 jmc 198: Decrements the argument
199: .Fa arg
1.36 espie 200: by 1.
1.37 jmc 201: The argument
1.36 espie 202: .Fa arg
203: must be a valid numeric string.
204: .It Fn define name value
1.37 jmc 205: Define a new macro named by the first argument
206: .Fa name
1.36 espie 207: to have the
208: value of the second argument
209: .Fa value .
1.10 aaron 210: Each occurrence of
1.33 jmc 211: .Sq $n
1.10 aaron 212: (where
213: .Ar n
214: is 0 through 9) is replaced by the
215: .Ar n Ns 'th
216: argument.
1.33 jmc 217: .Sq $0
1.10 aaron 218: is the name of the calling macro.
219: Undefined arguments are replaced by a null string.
1.33 jmc 220: .Sq $#
1.10 aaron 221: is replaced by the number of arguments;
1.33 jmc 222: .Sq $*
1.10 aaron 223: is replaced by all arguments comma separated;
1.33 jmc 224: .Sq $@
1.10 aaron 225: is the same as
1.33 jmc 226: .Sq $*
1.10 aaron 227: but all arguments are quoted against further expansion.
1.36 espie 228: .It Fn defn name ...
1.10 aaron 229: Returns the quoted definition for each argument.
230: This can be used to rename
1.1 deraadt 231: macro definitions (even for built-in macros).
1.36 espie 232: .It Fn divert num
1.1 deraadt 233: There are 10 output queues (numbered 0-9).
234: At the end of processing
235: .Nm m4
236: concatenates all the queues in numerical order to produce the
1.10 aaron 237: final output.
238: Initially the output queue is 0.
239: The divert
1.1 deraadt 240: macro allows you to select a new output queue (an invalid argument
241: passed to divert causes output to be discarded).
1.5 aaron 242: .It Ic divnum
1.1 deraadt 243: Returns the current output queue number.
1.5 aaron 244: .It Ic dnl
1.1 deraadt 245: Discard input characters up to and including the next newline.
1.36 espie 246: .It Fn dumpdef name ...
1.1 deraadt 247: Prints the names and definitions for the named items, or for everything
248: if no arguments are passed.
1.36 espie 249: .It Fn errprint msg
1.1 deraadt 250: Prints the first argument on the standard error output stream.
1.36 espie 251: .It Fn esyscmd cmd
1.26 pvalchev 252: Passes its first argument to a shell and returns the shell's standard output.
1.18 espie 253: Note that the shell shares its standard input and standard error with
1.33 jmc 254: .Nm m4 .
1.36 espie 255: .It Fn eval expr
1.1 deraadt 256: Computes the first argument as an arithmetic expression using 32-bit
1.10 aaron 257: arithmetic.
258: Operators are the standard C ternary, arithmetic, logical,
259: shift, relational, bitwise, and parentheses operators.
260: You can specify
261: octal, decimal, and hexadecimal numbers as in C.
262: The second argument (if any)
263: specifies the radix for the result and the third argument (if any)
264: specifies the minimum number of digits in the result.
1.36 espie 265: .It Fn expr expr
1.5 aaron 266: This is an alias for
267: .Ic eval .
1.44 espie 268: .It Fn format formatstring arg1 ...
1.45 jmc 269: Returns
270: .Fa formatstring
1.44 espie 271: with escape sequences substituted with
272: .Fa arg1
273: and following arguments, in a way similar to
274: .Xr printf 3 .
1.53 espie 275: This built-in is only available in GNU-m4 compatibility mode, and the only
276: parameters implemented are there for autoconf compatibility:
1.54 ! jmc 277: left-padding flag, an optional field width, a maximum field width,
1.53 espie 278: *-specified field widths, and the %s and %c data type.
1.36 espie 279: .It Fn ifdef name yes no
1.1 deraadt 280: If the macro named by the first argument is defined then return the second
1.10 aaron 281: argument, otherwise the third.
282: If there is no third argument, the value is
283: .Dv NULL .
284: The word
285: .Qq unix
286: is predefined.
1.36 espie 287: .It Fn ifelse a b yes ...
1.37 jmc 288: If the first argument
1.36 espie 289: .Fa a
1.37 jmc 290: matches the second argument
1.36 espie 291: .Fa b
292: then
293: .Fn ifelse
1.5 aaron 294: returns
1.36 espie 295: the third argument
296: .Fa yes .
1.10 aaron 297: If the match fails the three arguments are
1.1 deraadt 298: discarded and the next three arguments are used until there is
1.10 aaron 299: zero or one arguments left, either this last argument or
300: .Dv NULL
301: is returned if no other matches were found.
1.36 espie 302: .It Fn include name
1.1 deraadt 303: Returns the contents of the file specified in the first argument.
1.7 espie 304: If the file is not found as is, look through the include path:
305: first the directories specified with
306: .Fl I
307: on the command line, then the environment variable
1.10 aaron 308: .Ev M4PATH ,
1.7 espie 309: as a colon-separated list of directories.
1.1 deraadt 310: Include aborts with an error message if the file cannot be included.
1.36 espie 311: .It Fn incr arg
1.10 aaron 312: Increments the argument by 1.
313: The argument must be a valid numeric string.
1.36 espie 314: .It Fn index string substring
1.1 deraadt 315: Returns the index of the second argument in the first argument (e.g.,
1.10 aaron 316: .Ic index(the quick brown fox jumped, fox)
317: returns 16).
318: If the second
319: argument is not found index returns \-1.
1.36 espie 320: .It Fn indir macro arg1 ...
1.26 pvalchev 321: Indirectly calls the macro whose name is passed as the first argument,
1.11 espie 322: with the remaining arguments passed as first, ... arguments.
1.36 espie 323: .It Fn len arg
1.10 aaron 324: Returns the number of characters in the first argument.
325: Extra arguments
1.1 deraadt 326: are ignored.
1.36 espie 327: .It Fn m4exit code
1.1 deraadt 328: Immediately exits with the return value specified by the first argument,
329: 0 if none.
1.36 espie 330: .It Fn m4wrap todo
1.10 aaron 331: Allows you to define what happens at the final
332: .Dv EOF ,
333: usually for cleanup purposes (e.g.,
334: .Ic m4wrap("cleanup(tempfile)")
335: causes the macro cleanup to be
1.16 aaron 336: invoked after all other processing is done).
1.38 espie 337: .Pp
338: Multiple calls to
339: .Fn m4wrap
340: get inserted in sequence at the final
341: .Dv EOF .
1.36 espie 342: .It Fn maketemp template
1.35 miod 343: Invokes
344: .Xr mkstemp 3
345: on the first argument, and returns the modified string.
1.10 aaron 346: This can be used to create unique
1.1 deraadt 347: temporary file names.
1.36 espie 348: .It Fn paste file
1.1 deraadt 349: Includes the contents of the file specified by the first argument without
1.10 aaron 350: any macro processing.
351: Aborts with an error message if the file cannot be
1.1 deraadt 352: included.
1.36 espie 353: .It Fn patsubst string regexp replacement
1.11 espie 354: Substitutes a regular expression in a string with a replacement string.
355: Usual substitution patterns apply: an ampersand
1.33 jmc 356: .Pq Sq \&&
1.11 espie 357: is replaced by the string matching the regular expression.
358: The string
1.33 jmc 359: .Sq \e# ,
1.11 espie 360: where
1.33 jmc 361: .Sq #
1.11 espie 362: is a digit, is replaced by the corresponding back-reference.
1.36 espie 363: .It Fn popdef arg ...
1.5 aaron 364: Restores the
365: .Ic pushdef Ns ed
366: definition for each argument.
1.36 espie 367: .It Fn pushdef macro def
1.5 aaron 368: Takes the same arguments as
369: .Ic define ,
370: but it saves the definition on a
371: stack for later retrieval by
1.36 espie 372: .Fn popdef .
373: .It Fn regexp string regexp replacement
1.13 aaron 374: Finds a regular expression in a string.
375: If no further arguments are given,
1.14 aaron 376: it returns the first match position or \-1 if no match.
377: If a third argument
1.11 espie 378: is provided, it returns the replacement string, with sub-patterns replaced.
1.36 espie 379: .It Fn shift arg1 ...
1.1 deraadt 380: Returns all but the first argument, the remaining arguments are
1.10 aaron 381: quoted and pushed back with commas in between.
382: The quoting
1.1 deraadt 383: nullifies the effect of the extra scan that will subsequently be
384: performed.
1.36 espie 385: .It Fn sinclude file
1.5 aaron 386: Similar to
387: .Ic include ,
388: except it ignores any errors.
1.36 espie 389: .It Fn spaste file
1.5 aaron 390: Similar to
1.36 espie 391: .Fn paste ,
1.5 aaron 392: except it ignores any errors.
1.36 espie 393: .It Fn substr string offset length
1.1 deraadt 394: Returns a substring of the first argument starting at the offset specified
395: by the second argument and the length specified by the third argument.
396: If no third argument is present it returns the rest of the string.
1.36 espie 397: .It Fn syscmd cmd
1.10 aaron 398: Passes the first argument to the shell.
399: Nothing is returned.
1.5 aaron 400: .It Ic sysval
401: Returns the return value from the last
402: .Ic syscmd .
1.36 espie 403: .It Fn traceon arg ...
1.22 espie 404: Enables tracing of macro expansions for the given arguments, or for all
405: macros if no argument is given.
1.36 espie 406: .It Fn traceoff arg ...
1.22 espie 407: Disables tracing of macro expansions for the given arguments, or for all
408: macros if no argument is given.
1.36 espie 409: .It Fn translit string mapfrom mapto
1.1 deraadt 410: Transliterate the characters in the first argument from the set
1.10 aaron 411: given by the second argument to the set given by the third.
1.21 aaron 412: You cannot use
1.1 deraadt 413: .Xr tr 1
414: style abbreviations.
1.36 espie 415: .It Fn undefine name1 ...
1.24 espie 416: Removes the definition for the macros specified by its arguments.
1.36 espie 417: .It Fn undivert arg ...
1.1 deraadt 418: Flushes the named output queues (or all queues if no arguments).
1.5 aaron 419: .It Ic unix
1.1 deraadt 420: A pre-defined macro for testing the OS platform.
1.11 espie 421: .It Ic __line__
422: Returns the current file's line number.
423: .It Ic __file__
424: Returns the current file's name.
1.1 deraadt 425: .El
1.32 jmc 426: .Sh STANDARDS
1.49 jmc 427: The
1.23 espie 428: .Nm
1.49 jmc 429: utility is compliant with the
1.42 jmc 430: .St -p1003.1-2004
1.49 jmc 431: specification.
432: .Pp
433: The flags
434: .Op Fl dgIot
435: and the macros
436: .Ic builtin ,
437: .Ic esyscmd ,
438: .Ic expr ,
439: .Ic format ,
440: .Ic indir ,
441: .Ic paste ,
442: .Ic patsubst ,
443: .Ic regexp ,
444: .Ic spaste ,
445: .Ic unix ,
446: .Ic __line__ ,
447: and
448: .Ic __file__
449: are extensions to that specification.
1.23 espie 450: .Pp
1.32 jmc 451: The output format of tracing and of
452: .Ic dumpdef
453: are not specified in any standard,
1.23 espie 454: are likely to change and should not be relied upon.
1.32 jmc 455: The current format of tracing is closely modelled on
456: .Nm gnu-m4 ,
1.23 espie 457: to allow
1.32 jmc 458: .Nm autoconf
1.23 espie 459: to work.
1.34 espie 460: .Pp
461: The built-ins
462: .Ic pushdef
463: and
464: .Ic popdef
465: handle macro definitions as a stack.
466: However,
467: .Ic define
468: interacts with the stack in an undefined way.
469: In this implementation,
470: .Ic define
471: replaces the top-most definition only.
472: Other implementations may erase all definitions on the stack instead.
1.23 espie 473: .Pp
1.32 jmc 474: All built-ins do expand without arguments in many other
1.23 espie 475: .Nm m4 .
476: .Pp
477: Many other
478: .Nm
479: have dire size limitations with respect to buffer sizes.
1.21 aaron 480: .Sh AUTHORS
1.43 jaredy 481: .An -nosplit
1.32 jmc 482: .An Ozan Yigit Aq oz@sis.yorku.ca
483: and
484: .An Richard A. O'Keefe Aq ok@goanna.cs.rmit.OZ.AU .
485: .Pp
486: GNU-m4 compatibility extensions by
487: .An Marc Espie Aq espie@cvs.openbsd.org .