Как сбросить AC_CACHE_CHECK? - PullRequest
       8

Как сбросить AC_CACHE_CHECK?

2 голосов
/ 27 октября 2009

Как следует сбросить AC_CACHE_CHECK?

В autoconf я проверяю заголовки. Я добавил немного логики, чтобы немного сложнее найти заголовочные файлы в папках std, которые могут не входить в путь по умолчанию. То, как я это делаю, это первая попытка найти файл заголовка со встроенным AC_CHECK_HEADER. Если заголовок не найден, я изменяю CPPFLAGS и повторяю попытку.

Проблема с этим - кеширование autoconf. Я хочу форсировать проверку (или обойти проверку кеша). Если я не форсирую это, независимо от того, найдет ли autoconf заголовок или нет, он извлечет то, что нашел в первой проверке, тьфу.

Спасибо, Chenz

Ответы [ 2 ]

2 голосов
/ 16 августа 2010

Я реализовал небольшой макрос, который выполняет эту работу (по крайней мере, для меня). С небольшими изменениями его можно использовать для аннулирования других переменных кэша:

# SYNOPSIS
#
# AX_RESET_HEADERS_CACHE(headers ...)
#
# DESCRIPTION
#
# This macro invalidates the headers cache variables created by previous AC_CHECK_HEADER/AC_CHECK_HEADERS checks.
#
AC_DEFUN([AX_RESET_HEADERS_CACHE], [
    AS_FOR([AX_var], [ax_var], [$1], [
        dnl You can replace "ac_cv_header_" with any prefix from http://www.gnu.org/software/autoconf/manual/html_node/Cache-Variable-Index.html
        AS_VAR_PUSHDEF([ax_Var], [ac_cv_header_${ax_var}])
        AS_UNSET([ax_Var])
        AS_VAR_POPDEF([ax_Var])
    ])
]) # AX_RESET_HEADERS_CACHE

и использование (в этом цикле $ 1 = некоторая библиотека (например, "netpbm"), $ 2 = заголовки (например, "pbm.h ppm.h"), $ 3 = местоположения (например, "/ usr / include / usr / local / включают в себя ")):

for ac_test_location in $3 
do
    dnl Save the current state
    ax_probe_library_save_CPPFLAGS=${CPPFLAGS}

    CPPFLAGS="$CPPFLAGS -I${ac_test_location}"

    AC_MSG_CHECKING([$1 for $2 in ${ac_test_location}])
    AS_ECHO()
    _AS_ECHO_LOG([CPPFLAGS="${CPPFLAGS}"])

    AC_CHECK_HEADERS([$2], [ac_lib_$1=yes], [ac_lib_$1=no])

    dnl We have found the location, leave the loop:
    if test "${ac_lib_$1}" = "yes"
    then
        break;
    fi

    dnl Restore the state to original in case of unsuccessful attempt
    CPPFLAGS=${ax_probe_library_save_CPPFLAGS}
    AX_RESET_HEADERS_CACHE([$2])
done
2 голосов
/ 11 января 2010

Сбросить переменную кеша, например ac_cv_header_syslog_h. Вы можете проверить config.log для точного написания интересующей вас переменной кэша. К сожалению, сброс переменной оболочки не может быть сделан переносимым. Внутренний обходной путь, который использует Autoconf, использует $as_unset, который расширяется до unset, если поддерживается. Чтобы вы могли написать:

$as_unset ac_cv_header_syslog_h

В наши дни это должно работать в большинстве разумных систем.

Лучшим и более простым решением может быть правильная установка CPPFLAGS для первого раунда проверок. Как вы заметили, то, что вы пытаетесь, на самом деле не поддерживается.

...