次: , 前: Support for Other Languages, 上: Programs


7.15 自動的なde-ANSI-fication

GNU standardsはANSI Cの使用を許可していますが,これはもっと古いコンパ イラ(特にSunOS C コンパイラ)へのパッケージの移植性を制限することになる はずです.

実際にコンパイルされる前にde-ANSI-fyngしたそれぞれのファイルによっ て,Automakeではそのようなマシン上でのこの問題を解決することが可能にな ります.

Makefile.amの変数AUTOMAKE_OPTIONS(see Options)がオプ ションansi2knrを含んでいる場合,de-ANSI-ficationを処理するため のコードが生成されたMakefile.inに挿入されます.

これによって,ディレクトリ内のそれぞれのCソースファイルをANSI Cとして 扱います.ANSI Cコンパイラが利用可能な場合,それが使用されます.ANSI C コンパイラが利用可能でない場合,ansi2knrプログラムがソースファ イルをK&R Cに変換するために使用され,そしてコンパイルされます.

ansi2knrプログラムは単純です.それはソースコードが特定の方法で 書式化されると仮定します.詳細はansi2knrのmanページを参照してく ださい.

de-ANSI-ficationに対するサポートでは,ソースファイルansi2knr.cansi2knr.1がANSI Cソースと同じパッケージにある必要があります. これらのファイルはAutomakeと一緒に配布されます.また,パッケージ configure.acでは,AM_C_PROTOTYPESマクロを呼び出す必要も あります(see Macros). Automakeは,現在のパッケージの他のディレクトリでansi2knrサポー トファイルを見つけることもできます.これは,ansi2knrオプション へ適切なディレクトリへの相対的なパスを前置することで行なわれます.例え ば,パッケージのsrclibサブディレクトリにANSI Cコードが あると仮定します.ファイルansi2knr.cansi2knr.1libにあります.この場合,src/Makefile.amは以下のように書 くことが可能でしょう.

     AUTOMAKE_OPTIONS = ../lib/ansi2knr

ディレクトリの接頭辞が与えられてない場合,ファイルはカレントディレクト リにあると仮定されます.

自動的なde-ANSI-ficationは,パッケージが異なるホストアーキテクチャに対 するビルドでは動作しないことに注意してください.それは,ビルドマシンに 対してansi2knrをビルドする方法が,現在のautomakeには無いためで す.

ソースのde-ANSI-ficationでLIBOBJSを使用すると,configureLIBOBJSのbasenameに$Uを手動で追加する必要がありました. 現在ではそうではありません.バージョン2.54から,Autoconfは LIBOBJSLTLIBOBJSを注意深く書き換えています. (see AC_LIBOBJ vs. LIBOBJS)