xref: /freebsd/usr.bin/m4/m4.1 (revision 39beb93c)
1.\"	@(#) $OpenBSD: m4.1,v 1.24 2002/04/18 18:57:23 espie Exp $
2.\" $FreeBSD$
3.\"
4.Dd July 3, 2004
5.Dt M4 1
6.Os
7.Sh NAME
8.Nm m4
9.Nd macro language processor
10.Sh SYNOPSIS
11.Nm
12.Op Fl d Ar flags
13.Op Fl t Ar name
14.Op Fl gs
15.Op Fl D Ar name Ns Op = Ns Ar value
16.Op Fl U Ar name
17.Op Fl I Ar dirname
18.Op Ar
19.Sh DESCRIPTION
20The
21.Nm
22utility is a macro processor that can be used as a front end to any
23language (e.g., C, ratfor, fortran, lex, and yacc).
24The
25.Nm
26utility reads from the standard input and writes
27the processed text to the standard output.
28.Pp
29Macro calls have the form
30.Ic name Ns Pq Ar argument1 Ns Op , Ar argument2 , ... , argumentN .
31.Pp
32There cannot be any space following the macro name and the open
33parenthesis
34.Pq Ql \&( .
35If the macro name is not followed by an open
36parenthesis it is processed with no arguments.
37.Pp
38Macro names consist of a leading alphabetic or underscore
39possibly followed by alphanumeric or underscore characters, e.g.,
40valid macro names match the pattern
41.Dq Li [a-zA-Z_][a-zA-Z0-9_]* .
42.Pp
43In arguments to macros, leading unquoted space, tab, and newline
44.Pq Ql \en
45characters are ignored.
46To quote strings, use left and right single
47quotes (e.g.,
48.Sq "\ this is a string with a leading space" ) .
49You can change the quote characters with the
50.Ic changequote
51built-in macro.
52.Pp
53Most built-ins do not make any sense without arguments, and hence are not
54recognized as special when not followed by an open parenthesis.
55.Pp
56The options are as follows:
57.Bl -tag -width indent
58.It Fl s
59Emit
60.Ic #line
61directives for
62.Xr cpp 1 .
63.It Fl D Ar name Ns Op = Ns Ar value
64Define the symbol
65.Ar name
66to have some value (or
67.Dv NULL ) .
68.It Fl U Ar name
69Undefine the symbol
70.Ar name .
71.It Fl I Ar dirname
72Add directory
73.Ar dirname
74to the include path.
75.It Fl d Ar flags
76Set trace flags.
77The
78.Ar flags
79argument may hold the following:
80.Pp
81.Bl -tag -width indent -compact
82.It Cm a
83print macro arguments
84.It Cm c
85print macro expansion over several lines
86.It Cm e
87print result of macro expansion
88.It Cm f
89print filename location
90.It Cm l
91print line number
92.It Cm q
93quote arguments and expansion with the current quotes
94.It Cm t
95start with all macros traced
96.It Cm x
97number macro expansions
98.It Cm V
99turn on all options
100.El
101.Pp
102By default, trace is set to
103.Cm eq .
104.It Fl t Ar macro
105Turn tracing on for
106.Ar macro .
107.It Fl g
108Activate GNU-m4 compatibility mode.
109In this mode,
110.Ic changequote
111with two empty parameters deactivates quotes,
112.Ic translit
113handles simple character ranges (e.g.,
114.Li a-z ) ,
115regular expressions mimic
116.Xr emacs 1
117behavior,
118and the number of diversions is unlimited.
119.El
120.Sh SYNTAX
121The
122.Nm
123utility provides the following built-in macros.
124They may be redefined, losing their original meaning.
125Return values are null unless otherwise stated.
126.Bl -tag -width ".Ic changequote"
127.It Ic builtin
128Calls a built-in by its name, overriding possible redefinitions.
129.It Ic changecom
130Changes the start and end comment sequences.
131The default is the pound sign
132.Pq Ql #
133and the newline character.
134With no arguments, the comment sequence is reset to the default,
135in GNU
136.Nm
137mode, comments are turned off.
138The maximum length for a comment marker is five characters.
139.It Ic changequote
140Defines the quote symbols to be the first and second arguments.
141The symbols may be up to five characters long.
142If no arguments are
143given it restores the default open and close single quotes.
144.It Ic decr
145Decrements the argument by 1.
146The argument must be a valid numeric string.
147.It Ic define
148Define a new macro named by the first argument to have the
149value of the second argument.
150Each occurrence of
151.Sq Li $ Ns Ar n
152(where
153.Ar n
154is 0 through 9) is replaced by the
155.Ar n Ns 'th
156argument.
157.Ql $0
158is the name of the calling macro.
159Undefined arguments are replaced by a null string.
160.Ql $#
161is replaced by the number of arguments;
162.Ql $*
163is replaced by all arguments comma separated;
164.Ql $@
165is the same as
166.Ql $*
167but all arguments are quoted against further expansion.
168.It Ic defn
169Returns the quoted definition for each argument.
170This can be used to rename
171macro definitions (even for built-in macros).
172.It Ic divert
173There are 10 output queues (numbered 0-9).
174At the end of processing
175.Nm
176concatenates all the queues in numerical order to produce the
177final output.
178Initially the output queue is 0.
179The
180.Ic divert
181macro allows you to select a new output queue (an invalid argument
182passed to
183.Ic divert
184causes output to be discarded).
185.It Ic divnum
186Returns the current output queue number.
187.It Ic dnl
188Discards input characters up to and including the next newline.
189.It Ic dumpdef
190Prints the names and definitions for the named items, or for everything
191if no arguments are passed.
192.It Ic errprint
193Prints the first argument on the standard error output stream.
194.It Ic esyscmd
195Passes its first argument to a shell and returns the shell's standard output.
196Note that the shell shares its standard input and standard error with
197.Nm .
198.It Ic eval
199Computes the first argument as an arithmetic expression using 32-bit
200arithmetic.
201Operators are the standard C ternary, arithmetic, logical,
202shift, relational, bitwise, and parentheses operators.
203You can specify
204octal, decimal, and hexadecimal numbers as in C.
205The second argument (if any)
206specifies the radix for the result, and the third argument (if any)
207specifies the minimum number of digits in the result.
208.It Ic expr
209This is an alias for
210.Ic eval .
211.It Ic ifdef
212If the macro named by the first argument is defined then return the second
213argument, otherwise the third.
214If there is no third argument, the value is
215.Dv NULL .
216The word
217.Ic unix
218is predefined.
219.It Ic ifelse
220If the first argument matches the second argument then
221.Ic ifelse
222returns
223the third argument.
224If the match fails, the three arguments are
225discarded and the next three arguments are used until there is
226zero or one arguments left, either this last argument or
227.Dv NULL
228is returned if no other matches were found.
229.It Ic include
230Returns the contents of the file specified in the first argument.
231If the file is not found as is, look through the include path:
232first the directories specified with
233.Fl I
234on the command line, then the environment variable
235.Ev M4PATH ,
236as a colon-separated list of directories.
237Aborts with an error message if the file cannot be included.
238.It Ic incr
239Increments the argument by 1.
240The argument must be a valid numeric string.
241.It Ic index
242Returns the index of the second argument in the first argument (e.g.,
243.Fn index "the quick brown fox jumped" fox
244returns 16).
245If the second
246argument is not found,
247.Ic index
248returns \-1.
249.It Ic indir
250Indirectly calls the macro whose name is passed as the first arguments,
251with the remaining arguments passed as first, etc.\& arguments.
252.It Ic len
253Returns the number of characters in the first argument.
254Extra arguments
255are ignored.
256.It Ic m4exit
257Immediately exits with the return value specified by the first argument,
2580 if none.
259.It Ic m4wrap
260Allows you to define what happens at the final
261.Dv EOF ,
262usually for cleanup purposes (e.g.,
263.Fn m4wrap cleanup(tempfile)
264causes the macro
265.Ic cleanup
266to be
267invoked after all other processing is done).
268.It Ic maketemp
269Translates the string
270.Dq Li XXXXX
271in the first argument with the current process
272ID leaving other characters alone.
273This can be used to create unique
274temporary file names.
275.It Ic paste
276Includes the contents of the file specified by the first argument without
277any macro processing.
278Aborts with an error message if the file cannot be
279included.
280.It Ic patsubst
281Substitutes a regular expression in a string with a replacement string.
282Usual substitution patterns apply: an ampersand
283.Pq Ql &
284is replaced by the string matching the regular expression.
285The string
286.Sq \e Ns Ar # ,
287where
288.Ar #
289is a digit, is replaced by the corresponding back-reference.
290.It Ic popdef
291Restores the
292.Ic pushdef Ns ed
293definition for each argument.
294.It Ic pushdef
295Takes the same arguments as
296.Ic define ,
297but it saves the definition on a
298stack for later retrieval by
299.Ic popdef .
300.It Ic regexp
301Finds a regular expression in a string.
302If no further arguments are given,
303it returns the first match position or \-1 if no match.
304If a third argument
305is provided, it returns the replacement string, with sub-patterns replaced.
306.It Ic shift
307Returns all but the first argument, the remaining arguments are
308quoted and pushed back with commas in between.
309The quoting
310nullifies the effect of the extra scan that will subsequently be
311performed.
312.It Ic sinclude
313Similar to
314.Ic include ,
315except it ignores any errors.
316.It Ic spaste
317Similar to
318.Ic paste ,
319except it ignores any errors.
320.It Ic substr
321Returns a substring of the first argument starting at the offset specified
322by the second argument and the length specified by the third argument.
323If no third argument is present it returns the rest of the string.
324.It Ic syscmd
325Passes the first argument to the shell.
326Nothing is returned.
327.It Ic sysval
328Returns the return value from the last
329.Ic syscmd .
330.It Ic traceon
331Enables tracing of macro expansions for the given arguments, or for all
332macros if no argument is given.
333.It Ic traceoff
334Disables tracing of macro expansions for the given arguments, or for all
335macros if no argument is given.
336.It Ic translit
337Transliterate the characters in the first argument from the set
338given by the second argument to the set given by the third.
339You cannot use
340.Xr tr 1
341style abbreviations.
342.It Ic undefine
343Removes the definition for the macros specified by its arguments.
344.It Ic undivert
345Flushes the named output queues (or all queues if no arguments).
346.It Ic unix
347A pre-defined macro for testing the OS platform.
348.It Ic __line__
349Returns the current file's line number.
350.It Ic __file__
351Returns the current file's name.
352.El
353.Sh EXIT STATUS
354.Ex -std
355.Pp
356The
357.Ic m4exit
358macro may be used to change the exit status from the input file.
359.Sh COMPATIBILITY
360The
361.Nm
362utility follows the
363.St -susv2 ,
364along with a few extensions taken from GNU-m4.
365Flags
366.Fl I , d ,
367and
368.Fl t
369are non-standard.
370.Pp
371The output format of tracing and of
372.Ic dumpdef
373are not specified in any standard,
374are likely to change and should not be relied upon.
375The current format of tracing is closely modeled on GNU-m4,
376to allow
377.Nm autoconf
378to work.
379.Pp
380For portability, one should not use the macros
381.Ic builtin ,
382.Ic esyscmd ,
383.Ic expr ,
384.Ic indir ,
385.Ic paste ,
386.Ic patsubst ,
387.Ic regexp ,
388.Ic spaste ,
389.Ic unix ,
390.Ic __line__ ,
391and
392.Ic __file__ .
393.Pp
394All built-ins do expand without arguments in many other
395.Nm
396implementations.
397.Pp
398Many other
399.Nm
400implementations have dire size limitations with respect to buffer sizes.
401.Sh STANDARDS
402The
403.Nm
404utility
405conforms to
406.St -p1003.1-2001 .
407.Sh HISTORY
408An
409.Nm
410command appeared in PWB UNIX.
411.Sh AUTHORS
412.An -nosplit
413.An Ozan Yigit Aq oz@sis.yorku.ca
414and
415.An Richard A. O'Keefe Aq ok@goanna.cs.rmit.OZ.AU .
416GNU-m4 compatibility extensions by
417.An Marc Espie Aq espie@cvs.openbsd.org .
418.Sh BUGS
419The
420.Nm
421utility does not recognize multibyte characters.
422