Как вставить версию на основе Git в проект, управляемый autoconf?

Как я могу назначить динамический номер версии на основе git проекту autoconf? Autoconf требует статического строкового аргумента для

AC_INIT([Title],[version],[name])

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

version=`git describe --abbrev=7 --dirty --always --tags`

Это дает что-то вроде 4.6.6-alpha07-9-ga3e01a8.

Я не могу понять ответы на высоком уровне. Мне нужно решение вроде «вырезать и вставить это в ваш autoconf.ac и / или acinclude.m4».

Любая помощь приветствуется.


person Charlie Zender    schedule 20.04.2017    source источник
comment
Возможный дубликат номеров версий новых выпусков в связанных файлах (документация)   -  person John Kugelman    schedule 31.03.2019


Ответы (2)


Как насчет:

AC_INIT([Title], [m4_esyscmd_s([git describe --abbrev=7 --dirty --always --tags])])

должен работать на вас.

person ldav1s    schedule 21.04.2017
comment
Спасибо. Это частично работает, затем приводит к сбою конфигурации. Трудно понять почему. Все еще расследуем ... - person Charlie Zender; 23.04.2017
comment
@CharlieZender: Удалите [] вокруг m4_esyscmd и пропустите результат через tr, чтобы избавиться от конечной новой строки: AC_INIT([Title], m4_esyscmd([git describe --abbrev=7 --dirty --always --tags | tr -d '\n'])). - person Chris R. Timmons; 02.08.2017
comment
Это работает! Настройка завершается со строкой версии, которую я хотел. Удивлен, что все больше проектов не используют теги версий на основе Git. Не уверен, что я должен отметить этот ответ как правильный, если / пока ответ ldav1s не будет отредактирован ... - person Charlie Zender; 06.08.2017
comment
tr в этой ситуации не всегда надежен. См. здесь для получения дополнительной информации. - person ldav1s; 07.08.2017

Просто запуск git describe в m4_esyscmd для версии AC_INIT оставляет желать лучшего:

  • Какую версию использовать при сборке архива dist? Здесь вообще нет git describe полезного вывода.

  • Какую версию использовать, если вы только что внесли изменения? Вы обновляете configure версию с git describe или просто продолжаете сборку с существующей версией?

Для моих собственных пакетов (таких как ndim-utils) я решил эти проблемы (и несколько больше) по

  • Наличие специального build-helpers/package-version скрипта, который определяет используемую версию из version-stamp файла, если он найден, или git describe. configure.ac AC_INIT будет m4_esyscmd этот сценарий.

  • Наличие специального build-helpers/package-version.mk для включения из Makefile.am верхнего уровня, который генерирует version-stamp файл для архивов dist, проверяет, отличается ли текущий git describe вывод от того, что было сохранено configure, и многое другое.

  • Имея GNUmakefile.in, который при необходимости обновляет версию, хранящуюся на configure внутреннем устройстве, с git describe.

И я, вероятно, забыл о некоторых проблемах, решаемых в этом решении.

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

person ndim    schedule 14.09.2017