1

X 用のビデオ デバイス ドライバーを作成していますが、XFIXES 拡張機能によって提供されるいくつかの機能が必要です。これで、X サーバーのすべてのターゲット バージョンに少なくともバージョン 2 の XFIXES がインストールされることを確信していますが、configure.ac ファイルでそれをテストして、ユーザーが試みた場合に警告したいと思います。サーバーの非常に古いバージョン、または (何らかの理由で) XFIXES が含まれていないサーバー用にドライバーをコンパイルします。今、私はちょうどこれをやっています:

# Essentially this is just supposed to check if the server currently supports
# V2 or better of the XFIXES protocol, and to define XFIXES if it does.
AC_CHECK_HEADER(X11/extensions/Xfixes.h,
    HAVE_XFIXES="yes"; 
    AC_DEFINE([HAVE_XFIXES],[1],[XFixes Proto Found]),,
    [#include <X11/Xlib.h>])
# should have a better test for this
if test "x${HAVE_XFIXES}" = "xyes"; then
  AC_DEFINE([XFIXES],[1],[XFixes >= 2.0])
fi
4

2 に答える 2

1

AC_CHECK_FUNCライブラリ内の特定の関数の存在を確認するために使用できます。AC_CHECK_LIBこれが機能するには、そのライブラリで以前に実行している必要があります。

于 2011-06-26T08:16:06.240 に答える
0

このようなもの:

AC_CACHE_CHECK([for Xfixes >= 2.0], [foo_have_xfixes_2],
[AC_LINK_IFELSE([AC_LANG_PROGRAM(
                [[#include <X11/Xlib.h>
                  #include <X11/extensions/Xfixes.h>]],
                [[#if !(XFIXES_MAJOR >= 2)
                  #error XFIXES_LT_2
                  #endif]])],
                [foo_have_xfixes_2=yes], [foo_have_xfixes_2=no])])

if test "x${foo_have_xfixes_2}" = "xyes"; then
  AC_DEFINE([XFIXES],[1],[XFixes >= 2.0])
else
  AC_MSG_WARN("XFixes >= 2.0 not present")
fi

編集 - 私は今ちょっと問題を抱えています。ここでは、最初のソリューションに基づいて構築します。XFIXES_MAJOR (またはそのようなもの) を使用できないことがわかったので、それ自体をテストとして気にする構造体の構造体定義を使用します。この例では、XFIXES_MAJOR >= 2 の場合、いくつかの新しいコンポーネント ( nameなど)があるため、構造体は XFixesCursorImage であると仮定します。うまくいけば、同じ構造体を定義する有効なサーバー ヘッダーにもこれらの新しいコンポーネントが含まれます。

AC_CACHE_CHECK([for Xfixes >= 2.0], [foo_have_xfixes_2],
[AC_LINK_IFELSE([AC_LANG_PROGRAM(
                [[#include <???>
                  XFixesCursorImage bar;]],
                [[bar.name = "bar";]])],
                [foo_have_xfixes_2=yes], [foo_have_xfixes_2=no])])

if test "x${foo_have_xfixes_2}" = "xyes"; then
  AC_DEFINE([XFIXES],[1],[XFixes >= 2.0])
else
  AC_MSG_WARN("XFixes >= 2.0 not present")
fi

インクルード ヘッダーは、ヘッダーのサーバーバージョンである必要があります。XFIXES_MAJOR < 2 のサーバー ヘッダーにはそのコンポーネントがなく、コンパイルに失敗するという考えです。その仮定に違反すると、このアプローチも機能しません。

于 2011-07-14T05:02:19.520 に答える