Примерно так:
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 (или что-то подобное), используйте определение структуры для структуры, которую вы заботитесь о себе, в качестве теста.В этом примере я предполагаю, что структура имеет вид XFixesCursorImage, поскольку в нем есть несколько новых компонентов (например, name ), когда XFIXES_MAJOR> = 2. Надеемся, что действительный заголовок сервера, определяющий ту же структуру, также будет иметь эти новые компоненты:
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
Теперь заголовок включения должен быть server версия заголовка.Идея заключается в том, что в заголовке сервера, где XFIXES_MAJOR <2 будет <em>, а не , будет этот компонент, и его компиляция завершится неудачно.Если это предположение нарушается, этот подход также не будет работать.