Catch up with rev 1.4.2.6
Submitted by: OHSAWA Chitoshi <ohsawa@ccn.aitai.ne.jp>
This commit is contained in:
parent
002a60f06e
commit
86301dd5ed
Notes:
svn2git
2020-12-08 03:00:23 +00:00
svn path=/head/; revision=14184
1 changed files with 149 additions and 56 deletions
|
@ -2,7 +2,7 @@
|
|||
.\" The Regents of the University of California. All rights reserved.
|
||||
.\"
|
||||
.\" This code is derived from software contributed to Berkeley by
|
||||
.\" Dave Yost.
|
||||
.\" Dave Yost. Support for #if and #elif was added by Tony Finch.
|
||||
.\"
|
||||
.\" Redistribution and use in source and binary forms, with or without
|
||||
.\" modification, are permitted provided that the following conditions
|
||||
|
@ -33,106 +33,199 @@
|
|||
.\" SUCH DAMAGE.
|
||||
.\"
|
||||
.\" @(#)unifdef.1 8.2 (Berkeley) 4/1/94
|
||||
.\" %FreeBSD: src/usr.bin/unifdef/unifdef.1,v 1.4.2.4 2001/08/16 13:17:09 ru Exp %
|
||||
.\" $dotat: things/unifdef.1,v 1.23 2002/05/14 22:15:03 fanf Exp $
|
||||
.\" %FreeBSD: src/usr.bin/unifdef/unifdef.1,v 1.4.2.6 2002/06/21 20:52:32 fanf Exp %
|
||||
.\" $FreeBSD$
|
||||
.\"
|
||||
.\" $FreeBSD: doc/ja_JP.eucJP/man/man1/unifdef.1,v 1.6 2001/07/29 05:14:53 horikawa Exp $
|
||||
.\"
|
||||
.Dd April 1, 1994
|
||||
.Dd April 26, 2002
|
||||
.Dt UNIFDEF 1
|
||||
.Os
|
||||
.Sh 名称
|
||||
.Nm unifdef
|
||||
.Nd #ifdef 行を取り除く
|
||||
.Nm unifdef , unifdefall
|
||||
.Nd プリプロセッサ条件行を取り除く
|
||||
.Sh 書式
|
||||
.Nm
|
||||
.Op Fl clt
|
||||
.Op Fl clst
|
||||
.Oo
|
||||
.Fl D Ns Ar sym
|
||||
.Fl I Ns Ar path
|
||||
.Fl D Ns Ar sym Ns Op = Ns Ar val
|
||||
.Fl U Ns Ar sym
|
||||
.Fl iD Ns Ar sym
|
||||
.Fl iD Ns Ar sym Ns Op = Ns Ar val
|
||||
.Fl iU Ns Ar sym
|
||||
.Oc
|
||||
.Ar ...
|
||||
.Op Ar file
|
||||
.Nm unifdefall
|
||||
.Op Fl I Ns Ar path
|
||||
.Ar ...
|
||||
.Ar file
|
||||
.Sh 解説
|
||||
.Nm
|
||||
はファイルから #ifdef された行を削除する場合に用いられます。
|
||||
ユーティリティは
|
||||
.Xr cpp 1
|
||||
の条件ディレクティブ (前処理指令) を選択的に処理します。
|
||||
ファイルから削除するように特定されたディレクティブとテキストの
|
||||
両方を削除します。
|
||||
そうでない場合はファイルをそのままにしておきます。
|
||||
.Pp
|
||||
.Nm
|
||||
は #ifdef, #ifndef, #else, #endif 行を解釈します。
|
||||
ユーティリティは
|
||||
.Ic #if , #ifdef , #ifndef , #elif , #else , #endif
|
||||
行に働きますが、
|
||||
.Ic #if
|
||||
と
|
||||
.Ic #elif
|
||||
行の式文法のよく使われるサブセットしか理解しません。
|
||||
コマンドラインで定義されたシンボルの整数値や
|
||||
.Fn defined
|
||||
オペレータがコマンドラインで define したり、undefine したシンボルや
|
||||
演算子
|
||||
.Ic \&! , < , > , <= , >= , == , != , && , ||
|
||||
と括弧で囲まれた式を扱うことができます。
|
||||
より複雑なものはそのまま無傷で通過させます。
|
||||
.Ic #ifdef
|
||||
と
|
||||
.Ic #ifndef
|
||||
ディレクティブはシンボルがコマンドラインで指定された場合だけ
|
||||
処理されます。その他の場合には変更されずに、素通りさせます。
|
||||
.Pp
|
||||
.Nm
|
||||
にはコメント、クォート(シングルクォートとダブルクォート)で
|
||||
無効になるこれらのプリプロセッサマクロを
|
||||
判断するために必要な最小限の C 言語の知識しかありません。
|
||||
クォートの解析は非常に単純です。クォートに遭遇すると
|
||||
.Pq エスケープされたクォートを除いて
|
||||
対応するクォートが
|
||||
出現するまでの部分を全て無視します。途中でエスケープされていない
|
||||
改行が存在しても警告はしません。
|
||||
.Sh オプション
|
||||
.Bl -tag -width Ds -compact
|
||||
.It Fl D Ns Ar sym
|
||||
ユーティリティにはコメントやシングルクォートやダブルクォートで
|
||||
囲まれた中で無効にされたディレクティブも理解することができます。
|
||||
クォートの解析はたいへんシンプルです :
|
||||
開きクォートが見つかったとき、閉じクォートが見つかるまで
|
||||
(エスケープされたクォートを除いて) すべて無視されます。
|
||||
もし、バックスラッシュなしの改行が見つかっても
|
||||
警告しません。
|
||||
.Pp
|
||||
.Nm unifdefall
|
||||
シェルスクリプトはファイルから
|
||||
.Xr cpp 1
|
||||
の条件処理ディレクティブをすべて削除することができます。
|
||||
すべての制御シンボルとその定義 (または未定義) のリストを得るために、
|
||||
.Nm Fl s
|
||||
と
|
||||
.Nm cpp Fl dM
|
||||
を使用します。
|
||||
それからそのファイルを処理するのに適切な引数を付けて
|
||||
.Nm
|
||||
を呼び出します。
|
||||
.Pp
|
||||
利用可能なオプション :
|
||||
.Bl -tag -width indent -compact
|
||||
.It Fl D Ns Ar sym Ns Op = Ns Ar val
|
||||
定義されるシンボルを指定します。
|
||||
また、オプションで
|
||||
.Ic #if
|
||||
と
|
||||
.Ic #elif
|
||||
ディレクティブを操作するためにシンボルに与える値を指定します。
|
||||
.Pp
|
||||
.It Fl U Ns Ar sym
|
||||
指定したシンボルを定義する、または未定義にすることを指定します。
|
||||
シンボルを定義するように指定した場合 ifdef で囲まれたブロックは
|
||||
出力され、未定義を指定した場合は削除されます。
|
||||
指定されたシンボル
|
||||
.Ar sym
|
||||
に対応する ifdef、ifndef、else、endif 行は削除されます。
|
||||
指定しなかったシンボルに関する ifdef や if 行は、対応
|
||||
する ifdef、else、endif 行とともに、そのまま出力されます。
|
||||
ifdef X が別の ifdef X 中に出現した場合、内側の ifdef は指定しなかった
|
||||
シンボルに関する ifdef と同等に扱われます。同じシンボルを複数指定した
|
||||
場合は最後の指定が有効となります。
|
||||
未定義にするシンボルを指定します。
|
||||
同じシンボルを複数指定した場合には、
|
||||
最後に指定されたものが有効になります。
|
||||
.Pp
|
||||
.It Fl c
|
||||
.Fl c
|
||||
フラグが指定された場合には、
|
||||
.Nm
|
||||
の効果を逆転します。すなわち、通常削除されるべき行を残し、
|
||||
残されるべき行を削除します。
|
||||
の動作は逆にされます。
|
||||
すなわち、削除されるか空白にされる行を残し、
|
||||
逆に残すはずだった行を削除します。
|
||||
.Pp
|
||||
.It Fl l
|
||||
削除される部分を空行で置き換えます。
|
||||
削除される行を削除する代わりに空行に置き換えます。
|
||||
.Pp
|
||||
.It Fl s
|
||||
通常の入力ファイルを処理する代わりに、
|
||||
このオプションは
|
||||
.Nm
|
||||
に
|
||||
.Nm
|
||||
が理解する式に現れたシンボルのリストを生成させます。
|
||||
それは、
|
||||
.Xr cpp 1
|
||||
の
|
||||
.Fl dM
|
||||
オプションと協力して
|
||||
.Nm
|
||||
のコマンドラインを生成するのに有用です。
|
||||
.Pp
|
||||
.It Fl t
|
||||
C 言語のコメントとクォートの解釈を禁止します。通
|
||||
常のテキストファイル等に
|
||||
C 言語のコメントとクォートの解釈を禁止します。
|
||||
通常のテキストファイル等に
|
||||
.Nm
|
||||
を適用する場合に有用です。
|
||||
.Pp
|
||||
.It Fl iD Ns Ar sym
|
||||
.It Fl iD Ns Ar sym Ns Op = Ns Ar val
|
||||
.It Fl iU Ns Ar sym
|
||||
無視すべき ifdef を指定します。C 言語コードで、ifdef を C 言語ではない
|
||||
部分やコメントや作りかけのコードを区切るために用いている場合は、その内
|
||||
部のクォートやコメントを無視するように指示する必要があります。無視すべき ifdef
|
||||
は
|
||||
.Fl D Ns Ar sym
|
||||
.Ic #ifdef
|
||||
を無視します。C 言語のコードで
|
||||
.Ic #ifdef
|
||||
をコメントや作りかけのコードのような
|
||||
C 言語でない部分を区切るために用いている場合は、
|
||||
.Nm
|
||||
が
|
||||
.Ic #ifdef
|
||||
の中のクォートやコメントを解析しないように
|
||||
どのシンボルがその目的で使用されているかを指示する必要があります。
|
||||
無視するシンボルを指示する方法は
|
||||
.Fl iD Ns Ar sym Ns Oo = Ns Ar val Oc
|
||||
や
|
||||
.Fl iU Ns Ar sym
|
||||
で、上記の
|
||||
.Fl D Ns Ar sym Ns Op = Ns Ar val
|
||||
や
|
||||
.Fl U Ns Ar sym
|
||||
と同様の方法で指定します。
|
||||
と同様です。
|
||||
.Pp
|
||||
.It Fl I Ns Ar path
|
||||
.Nm unifdefall
|
||||
に追加の場所にある
|
||||
.Ic #include
|
||||
ファイルを探すように指示します。
|
||||
.Xr cpp 1
|
||||
との互換性と
|
||||
.Nm unifdefall
|
||||
の実装を簡単にするために
|
||||
.Nm
|
||||
はこのオプションは無視します。
|
||||
.El
|
||||
.Pp
|
||||
.Nm
|
||||
は標準出力に出力を行い、ファイル名が指定されなかった場合は標準
|
||||
入力を使用します。
|
||||
ユーティリティはその出力を
|
||||
.Em stdout
|
||||
にコピーします。
|
||||
.Ar file
|
||||
引数が指定されなかった場合は
|
||||
.Em stdin
|
||||
から読み込みます。
|
||||
.Pp
|
||||
.Nm
|
||||
は、4.1 BSD の
|
||||
ユーティリティは
|
||||
.Xr diff 1
|
||||
の
|
||||
.Fl D Ns Ar sym
|
||||
オプションとともに使用することができます。
|
||||
.Sh 関連項目
|
||||
.Xr cpp 1 ,
|
||||
.Xr diff 1
|
||||
.Sh 診断
|
||||
.Bl -item -compact
|
||||
.Bl -item
|
||||
.It
|
||||
不適切な else または endif を検出します。
|
||||
不適切な elif, else, endif を検出します。
|
||||
.It
|
||||
#ifdef に対応する #endif が現れる前にファイルが終了したとき、
|
||||
その #ifdef のある行番号を検出します。
|
||||
.Ic #ifdef
|
||||
の終了前に
|
||||
.Tn EOF
|
||||
を検出した場合、その行番号を出力します。
|
||||
.El
|
||||
入力と出力が同一になる場合 0、そうでなければ 1、エラー時には 2
|
||||
を終了ステータスとして返します。
|
||||
.Nm
|
||||
ユーティリティは出力が入力と同じになる場合 0、
|
||||
そうでなければ 1、エラー時には 2 を終了ステータスとして返します。
|
||||
.Sh バグ
|
||||
unifdef が `#if' を処理できるようにするべきです。
|
||||
構文評価がたいへん限定的です。
|
||||
.Pp
|
||||
ヌル文字を含む入力の場合には正しく動作しません。
|
||||
.Sh 歴史
|
||||
|
|
Loading…
Reference in a new issue