From 5b57d28ffb6e1ef86b50f7d05d977826eae89bfe Mon Sep 17 00:00:00 2001 From: Kiyoshi Aman Date: Fri, 1 Feb 2019 22:55:37 +0000 Subject: initial population --- usr.bin/unifdef/unifdef.1 | 347 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 347 insertions(+) create mode 100644 usr.bin/unifdef/unifdef.1 (limited to 'usr.bin/unifdef/unifdef.1') diff --git a/usr.bin/unifdef/unifdef.1 b/usr.bin/unifdef/unifdef.1 new file mode 100644 index 0000000..7319245 --- /dev/null +++ b/usr.bin/unifdef/unifdef.1 @@ -0,0 +1,347 @@ +.\" $NetBSD: unifdef.1,v 1.13 2017/07/03 21:34:22 wiz Exp $ +.\" +.\" Copyright (c) 1985, 1991, 1993 +.\" The Regents of the University of California. All rights reserved. +.\" +.\" This code is derived from software contributed to Berkeley by +.\" Dave Yost. +.\" +.\" 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. +.\" 3. Neither the name of the University nor the names of its contributors +.\" may be used to endorse or promote products derived from this software +.\" without specific prior written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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. +.\" +.\" Portions of this code (support for #if and #elif) are Copyright (c) +.\" 2002, 2003 Tony Finch. +.\" +.\" 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. +.\" 3. All advertising materials mentioning features or use of this software +.\" must display the following acknowledgement: +.\" This product includes software developed by the University of +.\" California, Berkeley and its contributors. +.\" 4. Neither the name of the University nor the names of its contributors +.\" may be used to endorse or promote products derived from this software +.\" without specific prior written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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. +.\" +.\" @(#)unifdef.1 8.2 (Berkeley) 4/1/94 +.\" $dotat: things/unifdef.1,v 1.45 2003/01/20 14:37:08 fanf2 Exp $ +.\" $FreeBSD: src/usr.bin/unifdef/unifdef.1,v 1.19 2003/01/20 12:41:41 fanf Exp $ +.\" +.Dd June 5, 2009 +.Dt UNIFDEF 1 +.Os +.Sh NAME +.Nm unifdef , +.Nm unifdefall +.Nd remove preprocessor conditionals from code +.Sh SYNOPSIS +.Nm +.Op Fl ceklst +.Op Fl I Ns Ar path +.Op Fl D Ns Ar sym Ns Op = Ns Ar val +.Op Fl U Ns Ar sym +.Op Fl iD Ns Ar sym Ns Op = Ns Ar val +.Op Fl iU Ns Ar sym +.Ar ... +.Op Fl o Ar output +.Op Ar file +.Nm unifdefall +.Op Fl I Ns Ar path +.Ar ... +.Ar file +.Sh DESCRIPTION +The +.Nm +utility selectively processes conditional +.Xr cpp 1 +directives. +It removes from a file both the directives and any additional text +that they specify should be removed, while otherwise leaving the +file alone. +.Pp +The +.Nm +utility acts on +.Ic #if , #ifdef , #ifndef , #elif , #else , +and +.Ic #endif +lines, +and it understands only the commonly-used subset +of the expression syntax for +.Ic #if +and +.Ic #elif +lines. +It handles +integer values of symbols defined on the command line, +the +.Fn defined +operator applied to symbols defined or undefined on the command line, +the operators +.Ic \&! , < , > , <= , >= , == , != , && , || , +and parenthesized expressions. +Anything that it does not understand is passed through unharmed. +It only processes +.Ic #ifdef +and +.Ic #ifndef +directives if the symbol is specified on the command line, +otherwise they are also passed through unchanged. +By default, it ignores +.Ic #if +and +.Ic #elif +lines with constant expressions, +or they may be processed by specifying the +.Fl k +flag on the command line. +.Pp +The +.Nm +utility also understands just enough about C +to know when one of the directives is inactive +because it is inside +a comment, +or affected by a backslash-continued line. +It spots unusually-formatted preprocessor directives +and knows when the layout is too odd to handle. +.Pp +A script called +.Nm unifdefall +can be used to remove all conditional +.Xr cpp 1 +directives from a file. +It uses +.Nm Fl s +and +.Nm cpp Fl dM +to get lists of all the controlling symbols +and their definitions (or lack thereof), +then invokes +.Nm +with appropriate arguments to process the file. +.Pp +Available options: +.Bl -tag -width indent -compact +.It Fl D Ns Ar sym Ns Op = Ns Ar val +Specify that a symbol is defined, +and optionally specify what value to give it +for the purpose of handling +.Ic #if +and +.Ic #elif +directives. +.It Fl U Ns Ar sym +Specify that a symbol is undefined. +If the same symbol appears in more than one argument, +the last occurrence dominates. +.It Fl c +If the +.Fl c +flag is specified, +then the operation of +.Nm +is complemented, +i.e., the lines that would have been removed or blanked +are retained and vice versa. +.It Fl e +Because +.Nm +processes its input one line at a time, +it cannot remove preprocessor directives that span more than one line. +The most common example of this is a directive with a multi-line +comment hanging off its right hand end. +By default, +if +.Nm +has to process such a directive, +it will complain that the line is too obfuscated. +The +.Fl e +option changes the behaviour so that, +where possible, +such lines are left unprocessed instead of reporting an error. +.It Fl k +Process +.Ic #if +and +.Ic #elif +lines with constant expressions. +By default, sections controlled by such lines are passed through unchanged +because they typically start +.Dq Li "#if 0" +and are used as a kind of comment to sketch out future or past development. +It would be rude to strip them out, just as it would be for normal comments. +.It Fl l +Replace removed lines with blank lines +instead of deleting them. +.It Fl o Ar output +The argument given is the name of an +.Ar output +file to be used instead of the standard output. +This file can be the same as the input file. +.It Fl s +Instead of processing the input file as usual, +this option causes +.Nm +to produce a list of symbols that appear in expressions +that +.Nm +understands. +It is useful in conjunction with the +.Fl dM +option of +.Xr cpp 1 +for creating +.Nm +command lines. +.It Fl t +Disables parsing for C comments +and line continuations, +which is useful +for plain text. +.It Fl iD Ns Ar sym Ns Op = Ns Ar val +.It Fl iU Ns Ar sym +Ignore +.Ic #ifdef Ns s . +If your C code uses +.Ic #ifdef Ns s +to delimit non-C lines, +such as comments +or code which is under construction, +then you must tell +.Nm +which symbols are used for that purpose so that it will not try to parse +comments +and line continuations +inside those +.Ic #ifdef Ns s . +One specifies ignored symbols with +.Fl iD Ns Ar sym Ns Oo = Ns Ar val Oc +and +.Fl iU Ns Ar sym +similar to +.Fl D Ns Ar sym Ns Op = Ns Ar val +and +.Fl U Ns Ar sym +above. +.It Fl I Ns Ar path +Specifies to +.Nm unifdefall +an additional place to look for +.Ic #include +files. +This option is ignored by +.Nm +for compatibility with +.Xr cpp 1 +and to simplify the implementation of +.Nm unifdefall . +.El +.Pp +The +.Nm +utility copies its output to +.Em stdout +and will take its input from +.Em stdin +if no +.Ar file +argument is given. +.Pp +The +.Nm +utility works nicely with the +.Fl D Ns Ar sym +option of +.Xr diff 1 . +.Sh DIAGNOSTICS +.Bl -item +.It +Too many levels of nesting. +.It +Inappropriate +.Ic #elif , +.Ic #else +or +.Ic #endif . +.It +Obfuscated preprocessor control line. +.It +Premature +.Dv EOF +(with the line number of the most recent unterminated +.Ic #if ) . +.It +.Dv EOF +in comment. +.El +.Pp +The +.Nm +utility exits 0 if the output is an exact copy of the input, +1 if not, and 2 if in trouble. +.Sh SEE ALSO +.Xr cpp 1 , +.Xr diff 1 +.Sh HISTORY +The +.Nm +command appeared in +.Bx 4.3 . +.Tn ANSI\~C +support was added in +.Fx 4.7 . +.Sh BUGS +Expression evaluation is very limited. +.Pp +Preprocessor control lines split across more than one physical line +(because of comments or backslash-newline) +cannot be handled in every situation. +.Pp +Trigraphs are not recognized. +.Pp +There is no support for symbols with different definitions at +different points in the source file. +.Pp +The text-mode and ignore functionality does not correspond to modern +.Xr cpp 1 +behaviour. -- cgit v1.2.3-70-g09d2