Makefile.am: Как использовать curl-config и xml2-config в configure.ac?

Я хочу установить пути include и lib с учетом существующего Makefile (ниже) в configure.ac. Но я не знаю, как я могу использовать команду $(shell XYZ-config --libs) в файле configure.ac.

Может ли кто-нибудь помочь, пожалуйста? Спасибо!!

# --------------------------------------------------------------------------
# Acquire configuration information for libraries that libs3 depends upon

ifndef CURL_LIBS
    CURL_LIBS := $(shell curl-config --libs)
endif

ifndef CURL_CFLAGS
    CURL_CFLAGS := $(shell curl-config --cflags)
endif

ifndef LIBXML2_LIBS
    LIBXML2_LIBS := $(shell xml2-config --libs)
endif

ifndef LIBXML2_CFLAGS
    LIBXML2_CFLAGS := $(shell xml2-config --cflags)
endif

3 ответа

Решение

Я бы ручался за фактическое использование pkgconfig вместо неуклюжих сценариев *-config, что делает это одним вкладышем для каждого пакета:

# configure.ac
PKG_CHECK_MODULES([libcurl], [curl])
PKG_CHECK_MODULES([libxml2], [libxml-2.0])

# Makefile.am
AM_CPPFLAGS = ${libcurl_CFLAGS} ${libxml2_CFLAGS}
bin_PROGRAMS = foo
foo_LDADD = ${libcurl_LIBS} ${libxml2_LIBS}

Сценарии *-config имеют тенденцию становиться большими частями избыточного кода (как, например, сценарии syvVinit или файлы модулей systemd) с отклоняющимся поведением: некоторые сценарии -config используют --ccflagsдругие --cflags, Некоторые используют --libsдругие используют --ldflags- ужасного беспорядка лучше избегать.

Для пользы других, помещая фактическую вещь, которую я использовал с помощью ответа, предоставленного j0rgensen выше. надеюсь, это поможет кому-нибудь когда-нибудь:)

В configure.ac:

# Get xml2 library and include locations
AC_ARG_WITH([xml2-include-path],
  [AS_HELP_STRING([--with-xml2-include-path],
    [location of the xml2 headers, defaults to /usr/include/xml2])],
  [xml2_CFLAGS="-I$withval"],
  [xml2_CFLAGS='-I/usr/include'])
AC_SUBST([xml2_CFLAGS])

AC_ARG_WITH([xml2-lib-path],
  [AS_HELP_STRING([--with-xml2-lib-path], [location of the xml2 libraries])],
  [xml2_LIBS="-L$withval -lxml2"],
  [xml2_LIBS="-L/usr/lib -lxml2"])
AC_SUBST([xml2_LIBS])


# Get curl library and include locations
AC_ARG_WITH([curl-include-path],
  [AS_HELP_STRING([--with-curl-include-path],
    [location of the curl headers, defaults to /usr/include/curl])],
  [curl_CFLAGS="-I$withval"],
  [curl_CFLAGS='-I/Users/vshakya/durham_doll/curl/curl-7.23.1/BUILD/include'])
AC_SUBST([curl_CFLAGS])

AC_ARG_WITH([curl-lib-path],
  [AS_HELP_STRING([--with-curl-lib-path], [location of the curl libraries])],
  [curl_LIBS="-L$withval -lcurl"],
  [curl_LIBS="-L/Users/vshakya/durham_doll/curl/curl-7.23.1/BUILD/lib -lcurl"])
AC_SUBST([curl_LIBS])

Makefile.am, также как j0rgensen, предложенный выше.

Сопровождающий пакета - не тот человек, который выполняет эту работу. pkg-config - разумный инструмент, но ему не место в автоинструментах. PKG_CHECK_MODULES должен быть забанен.

С точки зрения сопровождающего пакета ответственность за правильную настройку LDFLAGS и CPPFLAGS несет пользователь (человек или процесс, который вызывает скрипт настройки) для информирования скрипта конфигурирования о том, как настроена система. Если пользователь желает упростить жизнь, он настроит систему так, чтобы компилятор мог находить библиотеки и заголовки без выполнения назначений для LDFLAGS или CPPFLAGS (например, библиотеки будут в /usr/lib, заголовки в / usr / включают). Если пользователь хочет усложнить жизнь, это выбор пользователя, и сопровождающий пакета не должен беспокоиться об исправлении неправильных решений пользователя. Если пользователь выбирает установку библиотек в нестандартном месте и хочет использовать pkg-config, чтобы несколько упростить свою жизнь перед лицом этого плохого решения, он может использовать pkg-config в файле config.site для выполнения соответствующих назначений. в LDFLAGS и CPPFLAGS. pkg-config - это разумный инструмент в config.site, но ему не место в configure.ac. Это проблема пользователя, а не сопровождающего пакета.

Суть в том, что пользователи, которые решили устанавливать библиотеки в нестандартных местах, не должны ожидать, что сопровождающий пакета решит их проблему для них.

Другие вопросы по тегам