AC_LIBOBJ対LIBOBJSAutoconf 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_OUTPUTはLIBOBJS
とLTLIBOBJSを正規化します(そのため,あらゆるバージョンのAutomake
とLibtoolで動作します).この行を削除してください(これはマクロではないの
で,autoupdateでこの作業を行なうことは不可能です).
UをMakefileで使用する必要はありません.