Мне нужно условно скомпилировать некоторый код, основанный на наличии библиотеки. Похоже, с 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, который мне нужен.
Мне, должно быть, не хватает чего-то базового, или, возможно, я делаю это неправильно. Я копался несколько часов и не нашел ответа.
Кто-нибудь?