autoconf / automake: условная компиляция на основе наличия библиотеки?

Мне нужно условно скомпилировать некоторый код, основанный на наличии библиотеки. Похоже, с autoconf / automake это должно быть легко, но я не могу этого понять.

Например, если есть библиотека PNG, я хочу включить код для ее использования. В моем configure.ac есть:

AC_CHECK_LIB([png], [png_create_write_struct_2])

, а в моем Makefile.am:

if USE_LIBPNG
libdev_la_SOURCES += png.c
endif

(который добавляет png. c в список источников libdev, чтобы он был скомпилирован).

Условное выражение automake, такое как USE_LIBPNG, требует, чтобы оно было определено в configure.ac, поэтому мне нужно:

AM_CONDITIONAL([USE_LIBPNG], [test SOMETHINGOROTHER])

Вопрос в том, что можно проверить ЧТО-ТО ДРУГОЕ? Что определяет AC_CHECK_LIB, что я могу проверить?

По умолчанию AC_CHECK_LIB определяет символ (в config.h), который можно использовать в исходном коде, но это не помогает Makefile, поскольку AM_CONDITIONAL требует тест оболочки

Я попытался переопределить поведение AC_CHECK_LIB по умолчанию следующим образом:

AC_CHECK_LIB([png], [png_create_write_struct_2], [HAS_LIBPNG=1])

, после чего я мог проверить его:

AM_CONDITIONAL([USE_LIBPNG], [test "x$HAS_LIBPNG" = "x1"])

Это уродливо, но работает для Makefile ... но создает новую проблему: поскольку он отменяет исходное поведение AC_CHECK_LIB, и я больше не получаю символ, добавленный в config.h, который мне нужен.

Мне, должно быть, не хватает чего-то базового, или, возможно, я делаю это неправильно. Я копался несколько часов и не нашел ответа.

Кто-нибудь?

13
задан Ian Macky 3 March 2011 в 05:13
поделиться