スポンサーリンク

M4(1) FreeBSD 一般コマンドマニュアル M4(1)

名称

m4 − マクロ言語プロセッサ

書式

m4 [−d flags] [−t name] [−gs] [−D name[=value]] [−U name] [−I dirname] [file ...]

解説

m4 ユーティリティは、さまざまな言語 (たとえば C, ratfor, fortran, lex, yacc など) のフロントエンドとして利用できるマクロプロセッサです。 m4 ユー ティリティは、標準入力から読み込みます。また、処理結果のテキストを標準出 力へ書き出します。

マクロの呼び出しは name(argument1[, argument2, ..., argumentN]) の形式を 取っています。

マクロ名とそれに続く開き括弧 (‘(’) との間にはスペースがあってはいけませ ん。もしマクロ名の直後に開き括弧が続いていなければ引数なしのマクロ呼び出 しとして処理されます。

マクロ名として先頭はアルファベットまたはアンダスコアが、2 文字目以降は英 数字またはアンダスコアが使えます。よって正しいマクロ名にマッチする正規表 現は ‘‘[a-zA-Z_][a-zA-Z0-9_]*’’ となります。

マクロの引数のうちで、先頭のクォートされていない空白、タブ、改行文字 (‘\n’) は無視されます。文字列をクォートするためには、左、および右シングル クォートを使用してください (例: ‘ this is a string with a leading space’) 。組み込みマクロ changequote を使ってクォート文字を変更することができま す。

大抵の組み込みマクロは、引数がないと意味をなしませんので、開き括弧が後に 続かない場合、特別のものとして認識されません。

オプションは以下の通りです:

       −s

cpp(1) 用に、 #line ディレクティブを出力します。

−D name[=value]
シンボル name の値を value (無指定時は NULL) と定義します。

−U name
シンボル name を未定義にします。

−I dirname
include パスにディレクトリ dirname を追加します。

−d flags
トレースフラグをセットします。 flags 引数は、以下の通りです:

a
マクロの引数を表示します。
c

マクロの展開を複数行で表示します。
e

マクロの展開結果を表示します。
f

ファイル名の場所を表示します。
l

行数を表示します。
q

引数と現在のクォートの結果を引用します。
t

すべてのマクロをトレースします。
x

マクロを展開する時に番号を付けます。
V

すべてのオプションフラグをオンにします。

デフォルトでは、トレースは eq にセットしています。

−t macro
macro
をトレーシングします。

−g
GNU-m4 互換モードを有効にします。このモードでは changequote に 2 つの空のパラメータをつけることでクォートの使用をやめられます。 translit は、単一の文字範囲 (例えば a-z) を扱い、正規表現で emacs(1) のように動作します。変換の数は無制限です。

文法

m4 ユーティリティには以下に示す組み込みマクロが実装されています。これらの マクロは再定義可能であり、その場合には元の定義は失われます。特に記述のな い限り戻り値は NULL です。

       builtin

指定した組み込みマクロを呼び出します。名前が再定義されていた としても名前の持つ本来の機能を呼び出します。

changecom
コメントの開始文字列と終了文字列を変更します。デフォルトで は、ポンド記号 (‘#’) と改行文字です。引数を指定しなかった場 合はコメントシーケンスがリセットされます。 GNU モードの m4 では、コメントはオフです。設定できる文字列の長さは最大で 5 文字です。

changequote
第 1、第 2 引数をクォートシンボルとして定義します。シンボル は、長さ 5 文字以内にしてください。引数が与えられなかった場 合にはデフォルトの左右シングルクォートに設定されます。

decr
引数の値を 1 だけ減少させます。引数は正しく数値を表現する文 字列でなければなりません。

define
第 1 引数で指定した名前の新しいマクロを定義します。定義内容 は第 2 引数で与えます。定義中での ‘$n’ ( n は 0 から 9 まで) は それぞれそのマクロに与えられる第 n 引数に置換されます。 ‘$0’ はマクロ名そのものです。指定されなかった引数は NULL 文 字列に置換されます。また ‘$#’ は引数の数を表し、 ‘$*’ はコン マで区切られた全引数になります。 ‘$@’ は ‘$*’ と同様ですが、 更なる置換が行われないように全部の引数がクォートされます。

defn
各引数で指定されたマクロの定義内容をクォートして返します。こ れはマクロ定義の名称変更 (組み込みマクロであっても) に利用で きます。

divert
m4
には 10 本の出力キューが用意されています (0 から 9 までの 番号がついています)。処理の最後に、全てのキューは番号順に連 結されて最終的な出力を生成するようになっています。初期状態で は出力キューは 0 番に設定されています。 divert マクロを使っ て新しい出力キューを選ぶことが出来ます ( divert に不正な引数 を与えると出力が破棄されてしまいます)。

divnum
現在の出力キューの番号を返します。

dnl
改行文字を含めた行末までの入力文字を破棄します。

dumpdef
引数で指定した項目に関して、その名前と定義を出力します。引数 が与えられなかった場合は全てのマクロについて出力します。

errprint
第 1 引数を標準エラー出力ストリームへ出力します。

esyscmd
その最初の引数をシェルへ渡し、シェルの標準出力を返します。 シェルはその標準入力および標準エラー出力を m4 と共有すること に注意してください。

eval
第 1 引数を計算式とみなして 32-bit 幅の算術演算を用いて計算 します。演算子としては標準の C で用いられるもの、すなわち 3 項、算術、論理、シフト、関係、ビットの各演算子、および括弧が 利用可能です。また数値も C と同様に 8 進、10 進、16 進で記述 できます。第 2 引数で (もしあれば) 演算結果の基数を指定で き、第 3 引数で (もしあれば) 演算結果の最小桁数を指定できま す。

expr
eval
の別名です。

ifdef
第 1 引数で指定した名前のマクロが定義されていれば第 2 引数を 返し、定義されていなければ第 3 引数を返します。第 3 引数が省 略されていた場合は、その値は NULL になります。ちなみに unix という単語があらかじめ定義されています。

ifelse
第 1 引数が第 2 引数とマッチしたら第 3 引数を返します。 マッ チしなかった場合 (ifelse)その 3 個の引数は捨てられて次の 3 引数を用いて同様の検査を繰り返します。この処理は引数がなくな るか あるいは 1 つだけ残るまで繰り返され、どれにもマッチしな かった場合には その最後に残った引数または NULL (引数がなく なった場合) が返されます。

include
第 1 引数で指定されたファイルの内容を返します。指定通りの名 前のファイルが見つからなかった場合は、 include パスを探しま す。最初にまずコマンドラインで −I 指定されたディレクトリを順 に、次に環境変数 M4PATH に設定されたコロン区切りのディレクト リリストを順に探します。ファイルを include できない場合は、 エラーメッセージを表示して異常終了します。

incr
引数を 1 だけ増加させます。引数は正しく数値を表現する文字列 でなければいけません。

index
第 2 引数が、第 1 引数の中で、何文字目に出現するかを返します (たとえば index(the quick brown fox jumped, fox) では 16 が 返ります)。第 2 引数が第 1 引数の中に含まれていなかった場合 には index は -1 を返します。

indir
第 1 引数として渡される項目のマクロを間接的に呼びます。それ 以降は、第 1 引数のマクロに対する引数です。

len
第 1 引数の文字数を返します。余分な引数は無視されます。

m4exit
第 1 引数 (指定されなかった場合は 0) を終了コードとして即座 に終了します。

m4wrap
入力が最後の EOF に達したときに、どのような動作を行うかを設 定します。一般には種々の後始末を行うマクロを設定します (たと えば、 m4wrap(cleanup(tempfile)) ) とすると他の全ての処理が 終了した後に cleanup マクロが呼び出されます)。

maketemp
第 1 引数の中の文字列 ‘‘XXXXX’’ を現在のプロセス ID に置換し ます。その他の部分はそのままです。これはユニークなテンポラリ ファイル名の生成に利用できます。

paste
第 1 引数で指定されたファイルの内容をマクロ処理を一切行わず に include します。もしファイルが読み込めない場合にはエラー メッセージを出力して処理を中断します。

patsubst
文字列のうち、正規表現にマッチする部分が置換文字列で置き換え られます。通常は次の代入規則が適用されます: アンパサンド (‘&’) は、正規表現にマッチした文字列で置き換えられます。文字 列 ‘\#’ (# は数値) は、一致する後方参照と置き換えられます。

popdef
各引数へ pushdef されている定義を戻します。

pushdef
define
と同様の引数をとってマクロを定義しますが元の定義をス タックへ保存しておきます。保存された定義は後で popdef で戻す ことができます。

regexp
正規表現に基づき、文字を見つけます。第 2 引数までの場合は最 初にマッチする文字位置を、マッチする文字がない場合は -1 を返 します。第 3 引数がある場合、その中に含まれるパターンを置き 換えた文字列を返します。

shift
第 1 引数を除いた全ての引数を返します。残りの引数はクォート されてコンマで区切られます。クォートすることによって以降の処 理で置換が行われないようにしています。

sinclude
エラーが起きても無視される点を除いて include と同じです。

spaste
エラーが起きても無視される点を除いて paste と同じです。

substr
第 1 引数の文字列のうちの、第 2 引数で指定されるオフセットか ら始まり第 3 引数で指定される文字数の範囲の部分文字列を返し ます。第 3 引数が省略された場合は残りの文字列全てを返しま す。

syscmd
第 1 引数をシェルに渡します。戻り値はありません。

sysval
最後に実行した syscmd の戻り値を返します。

traceon
引数がある場合はそのマクロの展開をトレースをオンにします。引 数がない場合はすべてのマクロをトレースをオンにします。

traceoff
引数がある場合はそのマクロの展開をトレースをオフにします。引 数がない場合はすべてのマクロをトレースをオフにします。

translit
第 1 引数の中の文字を、第 2 引数で指定された文字集合から第 3 引数で指定された文字集合へ書き直します。ただし tr(1) 式の省 略指定を用いることはできません。

undefine
引数で指定されたマクロを未定義にします。

undivert
指定された出力キュー (引数がない場合は全てのキュー) の内容を 掃き出します。

unix
OS プラットフォームを調べるために予め定義されているマクロで す。

__line__
現在のファイルの行番号を返します。

__file__
現在のファイル名を返します。

診断

ユーティリティ m4 は、成功すると 0 で、エラーがあった場合は >0 で終了しま す。

入力ファイルから終了状態を変更するために、 m4exit マクロを使用することが できます。

互換性

m4 ユーティリティは、GNU-m4 から加えられた少々の拡張に加えて、 Version 2 of the Single UNIX Specification (‘‘SUSv2’’) に追従しています。フラグ −I, −d, −t は非標準です。

トレースと dumpdef の出力フォーマットは、どの標準でも規定されていませんの で変更される可能性があります。これらに依存するべきではありません。現在の トレース出力フォーマットは、 autoconf が機能できるよう GNU-m4 に基づいて 厳密に作成されています。

移植性のためには、 builtin, esyscmd, expr, indir, paste, patsubst, regexp, spaste, unix, __line__, および __file__ のマクロは、使用しないほ うがよいです。

他の多くの m4 の実装では、すべての組み込みマクロは引数なしでも展開されま す。

他の多くの m4 の実装は、バッファサイズに関して、きびしい制限があります。

規格

m4 ユーティリティは IEEE Std 1003.1-2001 (‘‘POSIX.1’’) に適合します。

歴史

m4 コマンドは、PWB UNIX から登場しました。

作者

Ozan Yigit ⟨oz@sis.yorku.ca⟩ および Richard A. O’Keefe ⟨ok@goanna.cs.rmit.OZ.AU⟩.
Marc Espie ⟨espie@cvs.openbsd.org⟩ による GNU-m4 互換性拡張

バグ

m4 ユーティリティは、マルチバイト文字を認識しません。

FreeBSD 10.0 July 3, 2004 FreeBSD 10.0

スポンサーリンク