Об использовании autotools

2011.10.08

Прочитал недавно статью с критикой GNU Autotools и обрадовался, что я не один недовольный.  В статье, в основном, описываются архитектурные дефекты этого набора утилит (точнее описывается отсутствие архитектуры как таковой), а я хочу зафиксировать свои мысли о том, что весь этот набор просто не нужен.

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

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

В-третьих, если нужна гарантия работы под какой-то необычной системой, то её всё равно не получить вслепую, надеясь только на autotools.  Всё равно нужна система для автоматического тестирования новых версий, а для распространённых систем вообще лучше предлагать готовые пакеты, на которые перед сборкой накладывается небольшой патч, корректирующий пути к библиотекам — вот и все изменения.  У таких пакетов обычно есть собственный maintainer.

Зачем в таких условиях использовать autotools? Мне кажется это — вредная привычка.  Мне кажется давно есть более простые и эффективные решения.  Я использую простые файлы сборки (Makefile), мне этого достаточно для успешной сборки кода в системах Debian и FreeBSD.

Следить за развитием событий можно через RSS ленту или почтовую рассылку.