makestrs(1) 文字列テーブルの C 言語ソースとヘッダを作成する

書式

makestrs [-f source] [-abioptions ...]

説明

makestrs コマンドは文字列テーブルの C 言語ソースとヘッダを作成する。 -f source オプションが指定されなければ、 makestrs は標準入力から入力を行う。 C のソースファイルは常に標準出力に書き出される。 makestrs は、ソースファイルで指定されている C のヘッダファイルを出力する。 以下のオプションを指定することができる: -sparcabi, -intelabi, -functionabi, -arrayperabi, -defaultabi

-sparcabi は、SPARC Compliance Definition に準拠している SPARC プラットフォーム で使われる(SVR4/Solaris 等)。

-intelabi は、System V Application Binary Interface に準拠している Intel プラッ トフォームで使われる(SVR4 等)。

-earlyR6abi は、ベンダが X11R6公式パッチ11 (またはそれ以前のもの)と X11R6公式パッ チ 12(またはそれ以降のもの)の間でバイナリ互換性を保ちたいと考える場合に、 -intelabi に付け加えて使われる。

-functionabi オプションを指定すると、文字列テーブルに関数 ABI が生成される。性能が 大幅に悪化するので、この機構は使わない方が良い。

-arrayperabi を用いると、文字列ごとに別々の配列が生成される。makestrs にコンパイル オプション -DARRAYPERSTR が付けられていた場合には、これがデフォルトの 動作である(こうなっていることはない)。

-defaultabi を使うと、makestrs が -DARRAYPERSTR オプション付きでコンパイルされてい ても、強制的に「通常の」文字列が生成される。makestrs が -DARRAYPERSTR オプション付きでコンパイルされることはまず無いので、ABI オプションが指 定されていないときは、これがデフォルトの動作である。

書式

文字列リストファイルの記法を以下に示す([] で括られた要素は省略できる):
#prefix <text>
#feature <text>
#externref <text>
#externdef [<text>]
[#ctempl <text>]

#file <filename>
#table <tablename>
[#htempl]
<text>
<text>
[#table <tablename>
<text>
<text>

 ...
#table <tablename>

 ...]
[#file <filename>

 ...]

ワード内には1つ以上の #file ディレクティブを持つことができる。#file の それぞれは 1つ以上の #table ディレクティブを持つことができる。

#prefix ディレクティブは、makestr がそれぞれの定義の前に追加する文字列 を決定する。

#feature ディレクティブは、makestr が機能テストマクロ(例えば、 X[TM]STRINGDEFINES)のために使う文字列を決定する。

#externref ディレクティブは、makestr が外部宣言のために使う文字列を指 定する。これは通常 "extern" になるが、Motif においては "externalref" となる。

#externdef ディレクティブは、makestr が宣言のために使う文字列を指定す る。これは通常空文字列になるが(この場合には、"#externdef " のように末 尾に空白が必要な点に注意すること)、Motif においては "externaldef(_xmstrings)"となる。

#ctmpl ディレクティブは、生成される C 言語のソースのテンプレートとして 使われるファイルの名前を決定する。

#file <filename> ディレクティブのそれぞれは、コマンド行オプション で指定された適切な定義を含む名前によって、対応するヘッダとなる。 全てのヘッダファイルでの定義に対する宣言を含む、1つの C 言語のソースが 標準出力に出力される。

#htmpl ディレクティブは生成される C 言語のヘッダのテンプレートとして使 われるファイルの名前を決定する。

#table <tablename> ディレクティブのそれぞれは、ABI に従って処理される。 ほとんどのプラットフォームにおいては、全てのテーブルは繋げられて、その ファイルに対する最初のテーブルの名前を持つ1つのテーブルになる。 Intel ABI に準拠するため、指定された名前を使って別々のテーブルが生成さ れる。

#ctmpl と #htmpl ディレクティブによって指定されたテンプレートファイル は、テンプレートファイルから適切なファイルへと行ごとにコピーすることに よって処理される。文字列 <<<STRING_TABLE_GOES_HERE>>> を含む行は出力ファイルにはコピーされない。その後に、適切なデータが出力 ファイルにコピーされ、そしてテンプレートファイルの残りの部分が出力ファ イルにコピーされる。

バグ

makestrs は文法エラーに対してあまり寛容ではない。# ディレクティブの後 に空白を必要とすることがあるし、これが混乱の元になることもある。警告メッ セージは出力されない。