Мне нужно условно скомпилировать код, основанный на наличии библиотеки. Похоже, это должно быть легко с autoconf/automake, но я не могу понять это.
Например, если есть библиотека PNG, я хочу включить код для ее использования. У моей конфигурации .ac есть:
AC_CHECK_LIB([png], [png_create_write_struct_2])
и у моего Makefile.am есть:
if USE_LIBPNG
libdev_la_SOURCES += png.c
endif
(который добавляет png.c в список источников для libdev, поэтому он компилируется).
Автомат, условный как USE_LIBPNG, требует, чтобы условное определение было задано в файле configure.ac, поэтому мне нужно:
AM_CONDITIONAL([USE_LIBPNG], [test SOMETHINGOROTHER])
Вопрос в том, что может проверить 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, который мне нужен.
Я должен упустить что-то основное или возможно Неправильное. Много лет копались и не нашли ответа.
Кто-нибудь?