\"
\" Copyright (c) 2013 The NetBSD Foundation, Inc.
\" All rights reserved.
\"
\" This code is derived from software contributed to The NetBSD Foundation
\" by David A. Holland.
\"
\" Redistribution and use in source and binary forms, with or without
\" modification, are permitted provided that the following conditions
\" are met:
\" 1. Redistributions of source code must retain the above copyright
\"    notice, this list of conditions and the following disclaimer.
\" 2. Redistributions in binary form must reproduce the above copyright
\"    notice, this list of conditions and the following disclaimer in the
\"    documentation and/or other materials provided with the distribution.
\"
\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
\" PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
\" POSSIBILITY OF SUCH DAMAGE.
\"
Dd June 11, 2013
Dt TRADCPP 1
Os
Sh NAME
Nm tradcpp
Nd traditional (K&R-style) C macro preprocessor
Sh SYNOPSIS
Nm tradcpp
Op Fl options
Op Ar input-file Op Ar output-file
Sh DESCRIPTION
The
Nm
command provides a traditional K&R-style C macro preprocessor.
It is intended to be suitable for historical Unix uses of the
preprocessor, such as
Xr imake 1 ,
particularly those that depend on preservation of whitespace.
Pp
The chief ways in which traditional cpp differs from
Standard C are:
Bl -bullet -offset indent
It
Macro arguments are expanded within quoted strings.
There is no stringize operator.
It
There is no token pasting operator; tokens can be concatenated by
placing comments between them.
This process is also not limited to valid C language tokens.
It
Whitespace is preserved, and in particular tabs are not expanded into
spaces.
Furthermore, additional whitespace is not injected.
El
Sh OPTIONS
Nm
has many options, many of which are defined for compatibility with
Xr gcc 1
or other compilers.
Many of the options are not yet implemented.
\" The option lists have been sorted in what I hope is a sensible
\" order. Please don't arbitrarily alphabetize them.
Ss Common Options
Bl -tag -width bubblebabble
It Fl C
Retain comments in output.
It Fl Dmacro[=expansion]
Provide a definition for the named macro.
If no expansion is provided, the value
Dq 1
is used.
Note that like many Unix compilers,
Nm
does not accept a space between the
Dq D
and the macro name.
It Fl Ipath
Add the specified path to the main list of include directories.
Note that like many Unix compilers,
Nm
does not accept a space between the
Dq I
and the directory name.
It Fl nostdinc
Do not search the standard system include directories.
It Fl P
Suppress line number information in the output.
Currently line number information is not generated at all and this
option has no effect.
It Fl Umacro
Remove any existing definition for the named macro.
Note that like many Unix compilers,
Nm
does not accept a space between the
Dq U
and the macro name.
It Fl undef
Remove all predefined macros.
El
Ss Warning Options
Warning options can be disabled or enabled by inserting, or not, the
string
Dq no-
between the
Dq W
and the warning name.
Herein the
Dq Fl Wno-
form is shown for options that are enabled by default.
Bl -tag -width bubblebabble
It Fl Wall
Turn on all warnings.
The option
Fl Wno-all
disables only the warnings that are disabled by default.
It Fl w
Turn off all warnings.
It Fl Werror
Make warnings into fatal errors.
It Fl Wcomment
Warn about nested comments.
It Fl Wno-endif-labels
Don't warn about symbols attached to #endif directives.
(The warning is currently not implemented.)
It Fl Wundef
Warn about undefined symbols appearing in #if and #elif expressions.
It Fl Wunused-macros
Warn about macros that are defined and never used.
Not implemented.
El
Ss Depend Options
Bl -tag -width bubblebabble
It Fl M
Generate dependency information for
Xr make 1
on the standard output, instead of preprocessing.
Not implemented.
It Fl MD
Like
Fl M
but skip system headers.
Not implemented.
It Fl MM
Like
Fl M
but write the dependency information to a file named after the input
file with extension
Pa \.d
and preprocess normally to standard output.
Not implemented.
It Fl MMD
Like
Fl MM
but skip system headers.
Not implemented.
It Fl MF Ar file
Send dependency output to the named file instead of the default
location.
Not implemented.
It Fl MG
When generating dependency information, assume that missing files are
generated instead of failing.
Not implemented.
It Fl MP
Issue dummy rules for all include files.
This prevents
Xr make 1
from choking if an include file is removed.
Not implemented.
It Fl MQ Ar target
Same as
Fl MT
except that any
Xr make 1
metacharacters appearing in the target are escaped.
It Fl MT Ar target
Set the name of the
Xr make 1
target appearing in the generated dependency information.
The default is the name of the input file with its suffix replaced
with the suffix for object files, normally
Pa .o .
\" If this option is given more than once, all named targets will
\" be emitted.
\" (The current operating mode framework doesn't support that.)
El
Ss More Include Path Options
Bl -tag -width bubblebabble
It Fl idirafter Ar path
Add the specified path to the
Dq afterwards
include path.
This path is searched after all directories specified with
Fl I
and the standard system directories.
Directories on this path are treated as containing system include
files.
It Fl imacros Ar file
Read in
Ar file
prior to reading the main input file, and preprocess it, but throw
away the output and retain only the macro definitions.
It Fl include Ar file
Read in and preprocess
Ar file
prior to reading the main input file.
It Fl iprefix Ar prefix
Set the path prefix used with the
Fl iwithprefix
option.
It Fl iquote Ar path
Add
Ar path
to the list of directories searched for include directives written
with quotes.
This list is not searched for include directives written with angle
brackets.
It Fl iremap Ar string:replacement
Substitute
Ar replacement
for
Ar string
in the
Dv __FILE__
built-in macro.
Not supported.
It Fl isysroot Ar path
Use
Ar path
as the
Dq system root ,
that is, the directory under which the standard system paths are found.
It Fl isystem Ar path
Add
Ar path
to the list of system include directories.
This list is searched after the list given with
Ar I .
Files found on this path are treated as system headers.
It Fl iwithprefix Ar dir
Splice
Ar dir
onto the prefix given with
Fl iprefix
and add this directory as if it were specified with
Fl idirafter .
It Fl iwithprefixbefore
Like
Fl iwithprefix
but adds the result as if it were specified with
Fl I .
El
Ss Diagnostic Options
Bl -tag -width bubblebabble
It Fl debuglog Ar file
Write a trace of actions and operations to
Ar file
as the input is processed.
Meant for debugging problems in complex substitution schemes fed to
Nm ,
such as those used by
Xr imake 1 .
It Fl dD
Dump all macro definitions, except for the predefined macros, after
the normal preprocessing output.
Not implemented.
It Fl dI
Dump all include directives along with the normal preprocessing
output.
Not implemented.
It Fl dM
Dump all macro definitions instead of the normal preprocessing
output.
Not implemented.
It Fl dN
Like
Fl dD
but emits only macro names and not the expansions.
Not implemented.
It Fl H
Output a trace of the include tree as it gets processed.
Not implemented.
El
Ss Other Options
Bl -tag -width bubblebabble
It Fl CC
Retain comments in output.
Same as
Fl C ,
accepted for compatibility with
Xr gcc 1 .
It Fl fdollars-in-identifiers , Fl fno-dollars-in-identifiers
Enable
Pq or disable, respectively
the use of the dollar sign in identifiers.
Not implemented.
It Fl ftabstop=num
Set the tab width to the specified value, for reporting column
positions in diagnostics.
The default is 8.
Not implemented.
It Fl std=standard
Ask
Nm
to conform to the named standard.
The default, and the only supported value, is
Dq krc .
It Fl traditional
This option is accepted for compatibility with
Xr gcc 1
and ignored.
It Fl x Ar lang
Adjust the preprocessor for the given language.
The only values accepted for
Ar lang
are
Dq assembler-with-cpp
and
Dq c ,
neither of which have any effect on the behavior of
Nm .
El
Sh FILES
The default list of directories searched for include files is:
Bl -item -offset indent -compact
It
Pa /usr/local/include
It
Pa /usr/include
El
Sh SEE ALSO
Xr cc 1 ,
Xr cpp 1 ,
Xr make 1
Sh STANDARDS
None.
The whole point of a traditional cpp is that it reflects practices
in pre-standardization implementations of C.
Some information is available from the first edition of Kernighan and
Ritchie.
Much of the rest of the behavior is based on lore, pragmatism,
material encountered in the wild, and comparison to other
implementations.
Sh HISTORY
The original version of
Nm
was written one evening in late 2010.
This version had some problems and was put aside.
The first working version was released in June 2013.
\" .Sh AUTHORS
\" .An David A. Holland
Sh BUGS
Probably plenty.