次: Dependencies, 前: Support for Other Languages, 上: Programs
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.c
とansi2knr.1がANSI Cソースと同じパッケージにある必要があります.
これらのファイルはAutomakeと一緒に配布されます.また,パッケージ
configure.acでは,AM_C_PROTOTYPES
マクロを呼び出す必要も
あります(see Macros).
Automakeは,現在のパッケージの他のディレクトリでansi2knr
サポー
トファイルを見つけることもできます.これは,ansi2knr
オプション
へ適切なディレクトリへの相対的なパスを前置することで行なわれます.例え
ば,パッケージのsrcとlibサブディレクトリにANSI Cコードが
あると仮定します.ファイルansi2knr.cとansi2knr.1は
libにあります.この場合,src/Makefile.amは以下のように書
くことが可能でしょう.
AUTOMAKE_OPTIONS = ../lib/ansi2knr
ディレクトリの接頭辞が与えられてない場合,ファイルはカレントディレクト リにあると仮定されます.
自動的なde-ANSI-ficationは,パッケージが異なるホストアーキテクチャに対
するビルドでは動作しないことに注意してください.それは,ビルドマシンに
対してansi2knr
をビルドする方法が,現在のautomakeには無いためで
す.
ソースのde-ANSI-ficationでLIBOBJS
を使用すると,configure
のLIBOBJS
のbasenameに$U
を手動で追加する必要がありました.
現在ではそうではありません.バージョン2.54から,Autoconfは
LIBOBJS
とLTLIBOBJS
を注意深く書き換えています.
(see AC_LIBOBJ
vs. LIBOBJS
)