次: , 前: Hosts and Cross-Compilation, 上: Autoconf 2.13


15.6.4 AC_LIBOBJLIBOBJS

Autoconf 2.13までは,関数の置換は変数LIBOBJSで開始されていました. Autoconf 2.50からは,マクロAC_LIBOBJを代わりに使用すべきです (see Generic Functions).Autoconf 2.53からは,LIBOBJSの使用は エラーになります.

この変更は,GNUビルドシステムの構成要素から要求されました.特 に,configure.acのパースで使用される様々な壊れやすいテクニックは, すべてトレースを使用することで置換されます.結果として,すべての動作をト レース可能にする必要があり,それでクリティカルな変数の代入は時代遅れにな ります.幸運にもLIBOBJSだけが問題となっていて,それは美しく処理す ることが可能です(“何も変更する必要はない”ということです).

典型的なLIBOBJSの使用方法は二つありました.関数の置換を依頼するこ とと,Automakeそして/またはLibtoolに対するLIBOBJSを調整することで す.


関数の置換に対しては,修正はすぐにできます.AC_LIBOBJを使用してく ださい.例えば,以下を考えます.
     LIBOBJS="$LIBOBJS fnmatch.o"
     LIBOBJS="$LIBOBJS malloc.$ac_objext"

以下で置換すべきです.

     AC_LIBOBJ([fnmatch])
     AC_LIBOBJ([malloc])

自動的なde-ANSI-ficationが依頼されたとき,Automakeは,`$U'をベース ファイル名に追加するためにLIBOBJSされたファイル名が必要です. Libtoolは,接尾子が`.lo'になっているLTLIBOBJSの定義が必要で す.人々は,以下のような断片を実行していました.
     # This is necessary so that .o files in LIBOBJS are also built via
     # the ANSI2KNR-filtering rules.
     LIBOBJS=`echo "$LIBOBJS" | sed 's/\.o /\$U.o /g;s/\.o$/\$U.o/'`
     LTLIBOBJS=`echo "$LIBOBJS" | sed 's/\.o/\.lo/g'`
     AC_SUBST(LTLIBOBJS)

`.o'が拡張子ではない可能性があるので,このコードが間違ってい ることに注意してください1! 以下のように読み換えてください.

     # This is necessary so that .o files in LIBOBJS are also built via
     # the ANSI2KNR-filtering rules.
     LIB@&t@OBJS=`echo "$LIB@&t@OBJS" |
                  sed 's,\.[[^.]]* ,$U&,g;s,\.[[^.]]*$,$U&,'`
     LTLIBOBJS=`echo "$LIB@&t@OBJS" |
                sed 's,\.[[^.]]* ,.lo ,g;s,\.[[^.]]*$,.lo,'`
     AC_SUBST(LTLIBOBJS)

もやはこれを使用する必要がありません.AC_OUTPUTLIBOBJSLTLIBOBJSを正規化します(そのため,あらゆるバージョンのAutomake とLibtoolで動作します).この行を削除してください(これはマクロではないの で,autoupdateでこの作業を行なうことは不可能です).

UMakefileで使用する必要はありません.


脚注

[1] もう一つの理由として,LIBOBJSを直接代入するのは反対です.