Что такое кэшированные переменные в автоинструментах? - PullRequest
0 голосов
/ 17 февраля 2019

Реальный пример из irssi:

https://github.com/irssi/irssi/blob/master/configure.ac#L824

Как всем известно, autotools генерирует скрипт configure из файла configure.ac.В свою очередь, файл configure.ac имеет количество макросов AC_ARG_WITH и AC_ARG_ENABLE, которые после слов определяют параметры --enable-foo или --with-foo, которые можно передать в сценарий configure.

В примеревыше Поддержка libutf8proc контролируется с помощью параметра ac_cv_lib_utf8proc_utf8proc_version, и если вы передадите export ac_cv_lib_utf8proc_utf8proc_version=no текущему env, libutf8proc будет игнорироваться на этапе настройки.

Вопрос в том, для чего эти переменные?Почему бы не использовать стандартные макросы конфигурации?И последний, есть ли где-то задокументированный список этих переменных или все они определяются индивидуально в проекте>

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

Вопрос в том, для чего эти переменные?

В общем смысле эти переменные предназначены для запоминания (кэширования) результатов проверок, выполненных с помощью configure, чтобыне нужно делать их более одного раза.Вы, вероятно, помните, как видели эффект этого в выводе configure: всякий раз, когда configure полагается на кэшированный результат вместо фактического выполнения теста, он сообщает об этом в своем выводе, отмечая результат как «(кэшированный)».Также возможно кэшировать результаты в файл для повторного использования при configure прогонах.

В любом случае эти переменные устанавливаются и используются различными стандартными макросами Autoconf, такими как AC_CHECK_LIBS и т.п.,Autoconf резервирует переменные оболочки, имена которых начинаются с ac_ или AC_ для собственного использования.Не следует запускать сценарий configure в среде, которая экспортирует любые такие переменные.

Руководство Autoconf содержит дополнительную информацию о кэшировании.

Почему бы и нетиспользование стандартных макросов конфигурации?

Конкретный пример, который вы представляете , это с использованием стандартных макросов.Рассматриваемая переменная - это та, которая отражает результат этого теста, который появляется в других местах проекта configure.ac:

AC_CHECK_LIB([utf8proc], [utf8proc_version])

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

И последнее, есть ли где-то задокументированный список этих переменных или все они определяются индивидуально в проекте>

Руководство Autoconf документирует те, которые предоставляются и используются самой Autoconf, и даже имеет индекс, посвященный им .Отдельные проекты также могут создавать свои собственные, но, конечно, они не будут обсуждаться в руководстве Autoconf.

0 голосов
/ 18 февраля 2019

сопровождающие irssi решили, возможно, ошибочно, что libutf8proc не нуждается в переключателе конфигурации (я полагаю, что это необязательно для функционирования программы)

autoconf будет синтезировать имя переменной cv из этой строки

https://github.com/irssi/irssi/blob/c1b604ee6a810d8ac5959b4681c0f6da0f14fde3/configure.ac#L332

AC_CHECK_LIB ([utf8proc], [utf8proc_version])

...