Заставить AC_ARG_WITH повлиять на вызов gcc для последующего AC_CHECK_HEADERS - PullRequest
2 голосов
/ 20 июня 2019

У меня есть программа, которая по умолчанию использует библиотеку readline (если пользователь специально не отключает ее с помощью --without-readline). Пользователь также может указать альтернативное расположение для заголовков и библиотеки readline, используя --with-readline=, например, --with-readline=/usr/local.

Конечно, просто потому, что пользователь не отключил readline или не указал альтернативное местоположение, это означает, что заголовки и библиотека readline действительно существуют в системе (или там, где пользователь утверждает, что они это делают), поэтому я хочу проверить фактическую наличие readline, если он не отключен.

Я следую последнему примеру здесь для использования AC_ARG_WITH, но позже в моем файле configure.ac я делаю:

AC_CHECK_HEADERS([readline/readline.h readline/history.h])

# ...

AC_SEARCH_LIBS([readline],[readline])

Однако, давая:

./configure --with-readline=/usr/local

Результат:

checking readline/readline.h usability... no
checking readline/readline.h presence... no
checking for readline/readline.h... no
checking readline/history.h usability... no
checking readline/history.h presence... no
checking for readline/history.h... no

Глядя на config.log:

configure:6517: checking readline/readline.h usability
configure:6517: gcc -std=gnu99 -std=gnu99 -c -g -O2  conftest.c >&5
conftest.c:80:31: error: readline/readline.h: No such file or directory

При вызове gcc не имеет -I/usr/local/include, поэтому курс не находит его.

Таким образом, вопрос заключается в следующем: как заставить configure вызвать gcc, добавив -I/usr/local/include (или там, где пользователь указывает), когда он делает AC_CHECK_HEADERS и AC_SEARCH_LIBS?


Я попытался явно увеличить CFLAGS и LDFLAGS сам (как я видел некоторые configure.ac файлы):

AC_ARG_WITH([readline],
  AS_HELP_STRING([--without-readline], [disable support for readline]),
  [],
  [with_readline=yes]
)
AS_IF([test x$with_readline = xyes],
  [
    AC_DEFINE([WITH_READLINE], [1],
      [Define to 1 if readline support is enabled.])
    CFLAGS="-I${withval} ${CFLAGS}"
    LDFLAGS="-L${withval} ${LDFLAGS}"
  ]
)

но это не помогло.


FYI:

версия autoconf = 2.69
версия automake = 1.16.1

1 Ответ

1 голос
/ 20 июня 2019

ОК, я понял это. Было три ошибки:

  1. Строка должна быть:

    AS_IF([test x$with_readline != xno],
    

    Если пользователь задает путь, тогда with_readline является этим путем, например, /usr/local, поэтому он не = xyes. Действительно, пример GNU показывает это таким образом. (Я не уверен, как я понял это неправильно.)

  2. Установка флагов должна происходить только , когда пользователь дает =value, т. Е. не равно xyes:

    AS_IF([test x$withval != xyes],
      [
        CPPFLAGS="-I${withval}/include ${CPPFLAGS}"
        LDFLAGS="-L${withval}/lib ${LDFLAGS}"
      ]
    )
    
  3. Как показано выше, я также забыл добавить /include и /lib после {withval}.

...