Использование библиотеки с разными именами в autoconf

Я пытаюсь создать приложение с зависимостью OpenSync 0.4 (действительно 0.3.9).

В файле configure.ac проекта библиотека opensync записана как libopensync1. Однако это не строится на моей системе Gentoo. Изменение libopensync1 на libopensync действительно решает проблему для меня.

Я поискал в Google и обнаружил, что libopensync1 используется в одних дистрибутивах, а libopensync — в других. Итак, как решить эту проблему в configure.ac?

Спасибо.


person Ryan Li    schedule 06.12.2010    source источник


Ответы (2)


Я предполагаю, что место, в котором это происходит внутри вашего configure.ac, находится внутри вызова PKG_CHECK_MODULES.

Глядя на исходники libopensync, кажется, что libopensync1 — это более новое имя, а libopensync — старое имя. Итак, мы будем использовать макросы pkg-config для поиска более нового имени, если только оно не существует.

Поместите это в свой configure.ac:

# Check if libopensync1 is known to pkg-config, and if not, look for libopensync instead
PKG_CHECK_EXISTS([libopensync1], [OPENSYNC=libopensync1], [OPENSYNC=libopensync])

Затем позже в вызове PKG_CHECK_MODULES замените libopensync1 на $OPENSYNC.

person ptomato    schedule 06.12.2010

Макрос AC_SEARCH_LIBS делает то, что вам нужно. (Есть много жарких споров о том, следует ли когда-либо использовать pkg-config. Если вы решите положиться на него, ptomato предлагает разумный подход.) Просто добавьте это в свой configure.ac:

AC_SEARCH_LIBS([osync_mapping_new],[opensync1 opensync],[],
  [AC_MSG_ERROR([can't find opensync])])

Это сначала ищет библиотеку с именем opensync1; если он этого не находит, он будет искать opensync.

Основным недостатком использования pkg-config является то, что большинство проектов, которые полагаются на него, на самом деле не проверяют надежность данных, предоставляемых файлом .pc, поэтому configure может завершиться успешно, но последующая сборка завершится ошибкой. Пользователь всегда может установить PKG_CONFIG=true при запуске configure и полностью удалить все данные, предоставляемые любыми связанными файлами .pc, установив LIBS, CFLAGS и т. д. вручную «старомодным» способом.

Основным недостатком отказа от использования pkg-config является то, что пользователю приходится устанавливать LIBS, CFLAGS и т. д. старомодным способом. На практике это довольно тривиально, и все, что сделал pkg-config, — это переместил данные из одного файла CONFIG_SITE в отдельно поддерживаемые файлы .pc для каждого пакета.

Если вы все же используете PKG_MODULE_CHECK, дополните его вызовом AC_CHECK_LIB или AC_SEARCH_LIBS для проверки данных в любом файле .pc, который был обнаружен PKG_CHECK_MODULES.

person William Pursell    schedule 08.12.2010