Храните информацию о версии в одном месте с помощью автоинструментов

Я использую gnu autools (autoconf, automake, libtool) для создания разделяемой библиотеки и связанного с ней двоичного файла, а также документации texinfo.

В configure.ac хранится информация о версии.

Теперь в исходники texinfo, например, я хочу включить текущую версию.

 @set VERSION 0.0.1
 @set UPDATED 18 June 2018

Я хотел бы определить версии только один раз и повторно использовать их во всей базе кода, где это применимо, поэтому при объединении выпуска я не получаю, например, pdf с неправильной версией. Есть ли устоявшаяся схема для этого?


person wirrbel    schedule 20.06.2018    source источник


Ответы (1)


Я хотел бы определить версии только один раз и повторно использовать их во всей базе кода, где это применимо, поэтому при объединении выпуска я не получаю, например, pdf с неправильной версией. Есть ли устоявшаяся схема для этого?

Конечно. Как вы уже заметили, configure.ac содержит информацию о версии, которую обычно указывают в самом верху в качестве аргумента макроса AC_INIT. Основная функция созданного на его основе сценария configure состоит в создании других файлов, используемых в сборке, путем заполнения файлов шаблонов известными или обнаруженными значениями. Наиболее распространенными файлами, подготовленными таким образом, являются файлы Makefile, но сценарии Autotools configure никоим образом не являются специфическими для них. Точно так же они могут подготовить заголовки, файлы документации и почти любой другой файл, который можно обрабатывать как текст.

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

Чтобы это работало, вы просто называете файл, который будет создан, аргументом макроса AC_CONFIG_FILES (вы можете использовать несколько, если хотите):

AC_CONFIG_FILES([src/version.h])

По умолчанию configure будет ожидать, что шаблон для этого выходного файла будет назван с добавлением суффикса .in (т.е. src/version.h.in). Внутри ссылайтесь на выходные переменные Autoconf по имени, ограниченному символами '@': @VERSION@. При запуске configure (или фактически при запуске сгенерированного сценария config.status) он создаст указанный выходной файл, скопировав шаблон, заменив ссылки на выходные переменные обнаруженными значениями выходных переменных.

Поскольку во многих случаях, когда вы хотите заполнить информацию о версии, конфигурируемая часть составляет очень небольшую часть всего файла, часто бывает удобно использовать такие функции, как @include Texinfo, чтобы изолировать конфигурируемые части в небольших отдельных файлах. Пример заголовка демонстрирует это.

Однако, в частности, для texinfo Automake включает специальное положение относительно информации о версии в источниках texinfo. Если вы назовете исходный файл .texi в первичном файле TEXINFO, и этот файл @includes совпадает с именем glob vers*.texi, тогда Automake организует автоматическую генерацию этого включенного файла (если только вы не добавите свои собственные правила для его создания). В конкретном случае управления версиями texinfo использование этого средства для генерации и включения данных о версии предпочтительнее, чем создание собственного файла версии.

person John Bollinger    schedule 20.06.2018
comment
Спасибо за твой ответ. Если можно вопрос вдогонку. Поместив это в мое исходное дерево, я понял, что есть файл stamp-vti, сгенерированный цепочкой инструментов, который содержит определения texinfo переменных VERSION и ОБНОВЛЕНО, как мне нужно. Обычно ли просто использовать это? - person wirrbel; 21.06.2018
comment
@wirrbel, я использовал texinfo в качестве примера более общего принципа, и в процессе мне довелось топать в области, которая лучше поддерживалась бы немного другим способом. Я обновил свой ответ, чтобы использовать другой общий пример и описать соответствующее специальное положение, которое Autotools делает для особого случая информации о версии в файлах texinfo. Отвечая на ваш вопрос, нет, не принято и даже неуместно полагаться непосредственно на stamp-vti, но у Automake есть такая же простая альтернатива. - person John Bollinger; 21.06.2018