[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

2.17 protoize の実行

protoize プログラムは、GNU C の選択的な部分である。 これを使ってプロトタイプ宣言をプログラムに追加することができ、 一つの面でプログラムを ANSI C に変換する。 仲間のプログラム unprotoize は、その逆を行なう。 見つかったプロトタイプ宣言から引数型を取り除く。

このプログラムを実行するときは、コマンド行引数として 一組のソースファイルを指定しなければならない。 この二つの変換プログラムは、これらのファイルをコンパイルして どんな関数が定義されているかを調べることから始める。 foo というファイルについて集められた情報葉、‘foo.X’ という 名前のファイルにセーブされる。

この走査の後に実際の変換を行なう。 指定したファイルは全て変換対象の資格を持つ。 それからインクルードされているファイル(ソースであれ単なるヘッダであれ)も 同様に資格を持つ。

しかし、資格を持つファイルが全て変換されるわけではない。 デフォルトでは、protoizeunprotoize は、 カレントディレクトリにあるソースとヘッダだけを変換する。 変換すべきファイルが置かれているディレクトリを追加するには、 ‘-d directory’ オプションを使えば良い。 また、特定のファイルを除外するには、‘-x file’ オプションを使う。 ファイルは、資格を持ち、そのディレクトリ名が指定されたディレクトリ名の 一つにマッチし、そのディレクトリ内の名前が除外されていない場合に、 変換される。

protoize が行なう基本的な変換は、ほとんどの関数定義と関数の宣言を、 引数の型を指定するように書き換えることである。 書き換えが行なわれないのは、varargs 関数だけである。

protoize はオプションでソースファイルの先頭にプロトタイプ宣言を まとめて挿入し、関数の定義の前に現れる呼び出しで利用できるようにする。 あるいは、未定義の関数が呼び出されているブロック内でブロックスコープの プロトタイプ宣言を挿入することもできる。

unprotoize が行なう基本的な変換は、ほとんどの関数の宣言から、 引数の型を取り除くように書き換えることと関数定義を ANSI 以前の 古い形式に書き換えることである。

どちらの変換プログラムも、変換不可能な関数の宣言や定義があると 警告を出す。‘-q’ を指定すると、この警告を出さないようにできる。

protoizeunprotoize からの出力は、 元のソースファイルを置き換える。元のソースファイルは、‘.save’ で 終わるファイル名に置き換えられる。既に ‘.save’ がついた ファイルが存在していれば、変更前のファイルは単に捨てられる。

protoizeunprotoize はどちらも、GCC 自身に 依存している。GCC を使ってプログラムを走査し、関数についての情報を 集めているのである。このため、GCC がインストールされてないと、 どちらのプログラムも動作しない。

以下に、protoizeunprotoize で使えるオプションの表を 示す。どのオプションも、特に述べていない限り、どちらのプログラムでも 使える。

-B directory

ファイル ‘SYSCALLS.c.X’ を、通常のディレクトリ(普通は ‘/usr/local/lib’)の代わりに、directory から探す。 このファイルには、標準のシステム関数についてのプロトタイプ情報が 入っている。このオプションは protoize にだけ適用される。

-c compilation-options

compilation-options を、gcc を実行して ‘.X’ ファイルを 生成するときのオプションとして使う。さらに特別なオプション ‘-aux-info’ が常に渡され、gcc に ‘.X’ ファイルを書き出すことを指示する。

コンパイル用のオプション群は、一個の引数として protoizeunprotoize に与えなければならないことに注意。 gcc のオプションを複数指定したいときは、コンパイルオプション群 全体を引用符で囲んで、シェルに一個の引数に見えるようにしなければならない。

使用できない gcc の特定のオプションがいくつかある。 それを使うと出力の種類が正しくなくなる。そのオプションとは、 ‘-g’、‘-O’、‘-c’、‘-S’、‘-o’ である。 これらのオプションを compilation-options に入れると、それは 無視される。

-C

ファイル名が ‘.c’ ではなく ‘.C’ で終わるようにする。 これは、C のプログラムを C++ に変換するときに使える。 このオプションは protoize でのみ使用できる。

-g

明示的なグローバル宣言を追加する。これは、ソースファイルの中で 呼び出されてはいるが宣言されていない関数について、ファイルの先頭に その関数の明示的な宣言を挿入するということを意味する。 この宣言は、宣言されていない関数への呼び出しを含む最初の 関数定義よりも前に置かれる。このオプションは protoize でのみ 使用できる。

-i string

古い形式の仮引数宣言を文字列 string を使って字下げする。 このオプションは protoize でのみ使用できる。

unprotoize は、関数のプロトタイプ形式の定義を古い形式の 関数定義に変換する。古い形式では、引数は引数リストと最初の ‘{’ の 間で宣言される。デフォルトでは、unprotoize は空白5個で インデントする。代わりに空白一個でインデントしたい場合は、 ‘-i " "’ とする。

-k

.X’ ファイルを保存する。 普通は、変換が終わった後に削除される。

-l

明示的なローカルの宣言を追加する。protoize に ‘-l’ を 指定すると、宣言無しで関数を呼び出しているブロック毎にその関数の プロトタイプ宣言を挿入する。このオプションは、protoize でだけ 使える。

-n

実際の変更は行なわない。このオプションを指定すると、‘-n’ を 指定しなかった場合に行なわれたであろう変換についての情報を表示するだけ である。

-N

.save’ ファイルを作らない。 元のファイル単に削除される。 このオプションは注意して使うこと。

-p program

program というプログラムをコンパイラとして使う。 普通は ‘gcc’ という名前が使われる。

-q

黙って仕事をする。ほとんどの警告が抑止される。

-v

gcc の ‘-v’ と同じように、バージョン番号を表示する。

ソースファイルのうちの一つだけ特別なコンパイラオプションを必要とする 場合は、そのファイルに対する ‘.X’ ファイルを特別に生成する 必要がある。それには、そのソースファイルに対して、 gcc に適切なオプションと ‘-aux-info’オプションを付けて 実行する。その後、protoize を全ファイルに対して実行する。 protoize は既に存在する ‘.X’ ファイルを使用する。 それがソースファイルより新しいからである。 例えば、以下のようにする。

 
gcc -Dfoo=bar file1.c -aux-info
protoize *.c

protoize コマンドのその他の使い方の場合は、特別なファイルを インクルードする必要がある。これは、‘.X’ ファイルが既に 存在している場合でも必要である。そうしておかないと、変換されないからである。

protoize をうまく使いこなすためのさらなる情報については、 See section protoize を使うときの注意点.

以下の情報のほとんどは、古いもので、EGCS のインストール手順で 置き換えられている。歴史的な参照目的でのみここに提供する。


This document was generated using texi2html 1.78.