1

具体的には、autoconf スクリプトに少し謎がありますAS_IF

関連するコードは次のとおりです。

AC_CHECK_FUNCS([eventfd], [AC_DEFINE([NN_HAVE_EVENTFD])])
AC_CHECK_FUNCS([pipe], [AC_DEFINE([NN_HAVE_PIPE])])
AC_CHECK_FUNCS([pipe2], [
    AC_DEFINE([NN_HAVE_PIPE2])
    CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE"
])
AC_SEARCH_LIBS([socketpair], [], [AC_DEFINE([NN_HAVE_SOCKETPAIR])])

つまり、それらの存在をチェックします。これらは正しく機能し、正しいシンボルを定義します。この場合、 と のみNN_HAVE_PIPENN_HAVE_SOCKETPAIR定義されます。これは HP-UX システムであるため、正しいです。

では謎の部分へ。configure.ac の後半には、これらのシンボルを参照する条件があります。

echo "ac_cv_func_eventfd: $ac_cv_func_eventfd"
AS_IF([test x"$ac_cv_func_eventfd"=xyes], [
    AC_DEFINE([NN_USE_EVENTFD])], [
    AS_IF([test x"$ac_cv_func_pipe"=xyes], [
        AC_DEFINE([NN_USE_PIPE])], [
        AS_IF([test x"$ac_cv_func_socketpair"=xyes], [
            AC_DEFINE([NN_USE_SOCKETPAIR])], [
            AC_MSG_ERROR([No signaling supported])
        ])
    ])
])

ac_cv_func_eventfd価値がありますがno(確認のためにエコー行を追加しました)、NN_USE_EVENTFDとにかく定義されます!

マクロは次のようAS_IFに定義されています。

AS_IF (test1, [run-if-true1], ..., [run-if-false])

私には、コードはかなり正しいように見えますね? この行動に光を当てることができる人はいますか?

Autoconf のバージョンは 2.67 です。OS は HP-UX 11.31 ia64 です。

4

1 に答える 1

2

まったく正しくありません。AS_IF以下からテストを修正する必要があります。

test x"$ac_cv_func_eventfd"=xyes

 test x"$ac_cv_func_eventfd" = xyes

の前後にスペースが挿入されていることに注意してください=。他の sの他のテストについても同様AS_IFです。

これを確認するには、コマンド ラインでこれを確認してみてください。

if test x"no"=xyes; then echo "yes"; else echo "no"; fi

対。

if test x"no" = xyes; then echo "yes"; else echo "no"; fi
于 2013-09-19T17:01:56.203 に答える