Autoconf та Automake були розроблені для вирішення еволюційної проблеми Unix.
По мірі того, як Unix розвивався в різні напрямки, розробники, які хотіли, щоб портативний код писали так:
#if RUNNING_ON_BSD
Set things up in the BSD way
#if RUNNING_ON_SYSTEMV
Set things up in the SystemV way
#endif
Оскільки Unix був роздвоєний у різних реалізаціях (BSD, SystemV, багато виробничих виделок, а пізніше Linux та інших Unix-подібних систем), розробникам, які хотіли написати переносний код, стало важливо писати код, який залежав не від конкретної марки операційної системи , але щодо функцій, які піддаються операційній системі. Це важливо, тому що версія Unix вводить нову функцію, наприклад, системний виклик "відправити", а пізніше інші операційні системи приймають її. Замість того, щоб мати спагеті з кодом, який перевіряв на бренди та версії, розробники почали досліджувати функції, тому код став:
#if HAVE_SEND
Use Send here
#else
Use something else
#endif
Більшість файлів README для компіляції вихідного коду ще в 90-х роках загострені розробниками для редагування файлу config.h та зауважують, що належні функції доступні в системі, або вони доставлять стандартні файли config.h для кожної тестованої конфігурації операційної системи.
Цей процес був як громіздким, так і схильним до помилок, і таким чином став Autoconf. Ви повинні думати про Autoconf як про мову, що складається з команд оболонки зі спеціальними макросами, які змогли замінити людський процес редагування config.h інструментом, який перевіряв операційну систему на функціональність.
Зазвичай ви записуєте код зондування у файл configure.ac, а потім запускаєте команду autoconf, яка збирала б цей файл у виконувану команду налаштування, яку ви бачили використаною.
Отже, коли ви запускаєте, ./configure && make
ви перевіряли функції, наявні у вашій системі, а потім будували виконуваний файл із встановленою конфігурацією.
Коли проекти з відкритим кодом почали використовувати системи управління вихідним кодом, було доцільно перевірити файл configure.ac, але не результат компіляції (налаштування). Autogen.sh - це лише невеликий скрипт, який викликає компілятор autoconf з потрібними для вас аргументами команд.
-
Автоматика виросла також із існуючої практики у громаді. Проект GNU стандартизував звичайний набір цілей для Makefiles:
make all
створив би проект
make clean
видалить усі зібрані файли з проекту
make install
встановив би програмне забезпечення
- такі речі, як
make dist
і make distcheck
підготували б джерело до розповсюдження та підтвердили, що результатом був повний пакет вихідного коду
- і так далі...
Побудова сумісних грифів стала обтяжливою, оскільки було багато плит, які повторювались знову і знову. Тож Automake був новим компілятором, який інтегрувався з autoconf та обробив "вихідний" Makefile's (з ім'ям Makefile.am) у Makefiles, який потім може подаватися до Autoconf.
Ланцюжок інструментів automake / autoconf фактично використовує ряд інших допоміжних інструментів, і вони доповнюються іншими компонентами для виконання інших конкретних завдань. У міру того, як складність виконання цих команд зростала, потреба в готовому для запуску скрипті народилася, і саме звідси походить autogen.sh.
Наскільки мені відомо, Gnome був проектом, який представив використання цього помічника скрипта autogen.sh