2012-06-28 2 views
3

AM_MAINTAINER_MODE было подвергнуто критике, и я считаю, что основное возражение состоит в том, что оно приводит к неправильным построениям, если зависимости от метафайлов не обнаружены. Кроме того, часто утверждается, что сгенерированные файлы не принадлежат системам контроля версий (я согласен с этой позицией). В настоящее время я считаю, что если configure не принадлежит к vcs, то configure.ac и Makefile.am не принадлежат к tarball. С этой целью я написал простой скрипт для очистки определенных целей из Makefile.in и добавил следующую цель в Makefile.am верхнего уровня:Распространение метафайлов автонастройки

dist-hook: 
    @rm $(distdir)/configure.ac 
    @rm $(distdir)/aclocal.m4 
    @find $(distdir) -name Makefile.am -exec rm {} \; 
    @find $(distdir) -name Makefile.in -exec $(top_srcdir)/clean-Makefile {} \; 

Это решение позволяет обойти проблемные вопросы, которые вытекают из AM_MAINTAINER_MODE, потому что метафайлов не требуется изменять.

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

Вопрос: Есть ли лучший способ достичь желаемой цели создания tarball, который не содержит метафайлов автозапуска? (Вопрос о том, является ли эта цель просто «возможно нежелательной» или «действительно злой», слишком открыта для этого форума!)

+5

Я думаю, что это не идея goot. Когда я загружаю исходный tarball, я хочу ВСЕ источники, включая полную систему сборки. – Rudi

+1

@ Rudi. Вы получаете полную систему сборки! Метафайлы автотюлина не являются частью системы сборки; они просто используются для создания системы сборки. –

+2

@WilliamPursell: Я понимаю, почему вы хотите это сделать. Для большинства пользователей пакета было бы (несколько) проще, если бы эти файлы отсутствовали. Но поскольку autotools являются продуктом GNU, предназначенным для облегчения распространения GPL, включая соответствие их собственной лицензии («соответствующий источник» в GPL3). Если кто-то хочет «изменить работу», добавив единицы перевода и другие вещи, им понадобится configure.ac и Makefile.am. – ldav1s

ответ

1

Возможно, это может быть способ, но Automake не поддержал бы его, даже если бы ,

Основная задача Automake - внедрить стандарты кодирования GNU в отношении Make-файлов. И это принцип GNU, что пользователям должны быть предоставлены первичные источники для взлома - это требование GPL.

Отправка полученных файлов, но не источников, противоречит этой идее.

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

+0

В течение нескольких месяцев я экспериментировал с релиз-архивными файлами, в которых были удалены метафайлы autotool, но включал полный репозиторий git, чтобы удовлетворять условию включения всех источников. Я все равно получаю письма от разработчиков, жалующихся на ошибки сборки. «Исправление» включало снижение номера версии, указанного в AM_INIT_AUTOMAKE. Я надеялся, что, требуя, чтобы разработчик понял источник достаточно хорошо, чтобы заставить их проверить, что происходит из репозитория git, это уменьшит проблему. Следующим лучшим решением для крупных дистрибутивов является прекращение установки automake! Сделать разработчиком установить инструменты в $ HOME! –