Autotools – Wikipedia, wolna encyklopedia

Logo GNU

Autotools (GNU build system) – zestaw narzędzi programistycznych, które pomagają w kompilowaniu kodu źródłowego i budowaniu przenośnych pakietów oprogramowania dla wielu systemów operacyjnych z rodziny UNIX.

Tworzenie przenośnego oprogramowania może sprawiać wiele trudności: kompilatory języka C różnią się na poszczególnych systemach, może brakować pewnych funkcji w bibliotekach programistycznych, pliki nagłówkowe mogą mieć różne nazwy. Jednym ze sposobów rozwiązania tego problemu jest pisanie kodu źródłowego z instrukcjami blokowymi wybieranymi przez dyrektywy preprocesora (#ifdef), jednak różnorodność narzędzi do kompilacji sprawia, że to podejście szybko staje się nieporęczne. Narzędzia autotools zostały zaprojektowane aby ułatwić rozwiązanie tej kwestii.

GNU build system jest częścią GNU toolchain i jest szeroko wykorzystywany w wielu wolnych i otwartych projektach. Narzędzia Autotools są wolnym oprogramowaniem na licencji GNU GPL ze szczególnymi wyjątkami[1][2], zezwalającymi na wykorzystanie GNU build system w oprogramowaniu własnościowym.

Narzędzia wchodzące w skład GNU build system[edytuj | edytuj kod]

Schemat proceduralny autoconf i automake

Autotools składa się z Autoconf, Automake i Libtool[3]. Innymi narzędziami używanymi z GNU build system są GNU make, GNU gettext, pkg-config i GNU Compiler Collection (GCC).

GNU Autoconf[edytuj | edytuj kod]

Autoconf generuje skrypt configure bazując na zawartości pliku configure.ac, który opisuje kod źródłowy. Uruchomiony skrypt configure skanuje środowisko kompilacji, a następnie generuje podrzędny skrypt config.status, który z kolei przetwarza pliki wejściowe, najczęściej Makefile.in, tworząc pliki wyjściowe (Makefile), które są właściwe dla danego środowiska kompilacji. Na koniec program make wykorzystując Makefile tworzy pliki wykonywalne z kodu źródłowego.

Złożoność narzędzi Autotools odzwierciedla mnogość warunków, w których kod źródłowy może być przetwarzany.

  • Jeśli zmieniony został plik z kodem źródłowym, wystarczy uruchomić make, który ponownie skompiluje część kodu źródłowego dotkniętego zmianą.
  • Jeśli zmieniony został plik .in, należy ponownie uruchomić config.status i make.
  • Jeśli kod źródłowy został skopiowany do innego komputera, należy ponownie uruchomić configure (który z kolei uruchamia config.status) i make. (Z tego powodu kod źródłowy kompilowany za pomocą GNU build system jest rozpowszechniany bez plików generowanych przez configure.)
  • Jeśli zostały przeprowadzone większe zmiany w kodzie źródłowym, potrzebne będą zmiany w plikach .in i configure.ac, a następnie wykonane kolejne kroki.

Aby przetworzyć pliki, autoconf wykorzystuje makroprocesor GNU m4.

Autoconf jest dostarczany z kilkoma pomocniczymi programami takimi jak:

  • Autoheader, który pomaga zarządzać plikami nagłówkowymi.
  • Autoscan, który wstępnie tworzy pliki wejściowe dla Autoconf.
  • ifnames, który listuje identyfikatory preprocesora używane w programie.

GNU Automake[edytuj | edytuj kod]

Automake pomaga tworzyć przenośne pliki Makefile, które następnie są przetwarzane przez program make. Jako dane wejściowe wykorzystywany jest plik Makefile.am, z którego tworzony jest plik Makefile.in, służący do wygenerowania Makefile za pomocą skryptu configure.

GNU Libtool[edytuj | edytuj kod]

Libtool pomaga zarządzać tworzeniem statycznych i dynamicznych bibliotek na różnych systemach z rodziny UNIX. W tym celu Libtool wykorzystuje abstrakcję procesu tworzenia bibliotek, ukrywając różnice występujące na poszczególnych systemach (np. różnice pomiędzy systemem GNU/Linux a Solaris).

Gnulib[edytuj | edytuj kod]

Gnulib upraszcza proces tworzenia przenośnego oprogramowania dla wielu systemów, wykorzystującego w tym celu Autoconf i Automake.

Zalety GNU build system[edytuj | edytuj kod]

GNU build system pozwala programiście pisać wieloplatformowe oprogramowanie oraz ułatwia docelowemu użytkownikowi, który chce samodzielnie skompilować program, proces budowania programu. Użytkownik nie potrzebuje wówczas zainstalowanych na komputerze komponentów GNU build system, wystarczy, że uruchomi dostarczony skrypt configure, wymagający obecności tylko powłoki systemowej kompatybilnej z powłoką Bourne’a.

Ograniczenia GNU build system[edytuj | edytuj kod]

GNU build system używa powłoki systemowej kompatybilnej z powłoką Bourne’a, wspomagając użytkownika w procesie konfiguracji i budowania programu. GNU build system może być wykorzystywany zarówno do tworzenia programów natywnych na danym komputerze, jak i do kompilacji skrośnej, w celu tworzenia programów na inne architektury komputerowe[4].

Oprogramowanie kompilowane skrośnie na systemie GNU/Linux lub innym z rodziny UNIX dla systemu Windows może być zrealizowane za pomocą MinGW, jednak często pożądane są natywne kompilacje dla niektórych systemów (takich jak Microsoft Windows), które nie mogą standardowo uruchamiać skryptów powłok Bourne’a. Istnieje możliwość instalacji Cygwin albo MSYS w systemie Windows, tworząc warstwę kompatybilności z systemem uniksowym, co umożliwia uruchomienie skryptu configure. Cygwin dostarcza ponadto GNU Compiler Collection, GNU make oraz inne oprogramowanie świadcząc prawie kompletny system uniksowy w systemie Windows; MSYS również zawiera GNU make oraz pozostałe narzędzia zaprojektowane do pracy z MinGW (wersja GCC).

Projekty używające GNU build system niekoniecznie muszą dostarczać skrypt configure w ich systemach kontroli wersji (takich jak CVS czy Subversion). Jeśli projekt wykorzystujący GNU build system nie posiada wygenerowanego pliku ./configure dostępnego dla użytkownika, musi on sam go wygenerować. Jednym z możliwych sposobów jest uruchomienie narzędzia autoreconf w powłoce systemowej:

$ autoreconf 

Powyższe polecenie wyzwoli aclocal, autoconf, autoheader i automake, jeśli będzie to potrzebne. W niektórych przypadkach może być konieczne wywołanie dodatkowych poleceń. Popularną konwencją jest wówczas dostarczenie skryptu, często nazwanego autogen.sh lub bootstrap, który uruchamia wszystkie potrzebne narzędzia.

Pewnym ograniczeniem jest wygenerowany przez Autoconf skrypt configure, który może okazać się powolny, ponieważ uruchamia programy takie jak kompilator języka C wiele razy w celu sprawdzenia obecności różnych bibliotek, plików nagłówkowych i funkcji językowych.

Zobacz też[edytuj | edytuj kod]

Przypisy[edytuj | edytuj kod]

  1. Autoconf license exception
  2. libtool HACKING
  3. Learning the GNU development tools [online], autotoolset.sourceforge.net [dostęp 2017-11-22] (ang.).
  4. Autoconf, Automake, and Libtool: Cross Compilation [online], sources.redhat.com:80 [dostęp 2017-11-22] [zarchiwizowane z adresu 2012-06-19].

Linki zewnętrzne[edytuj | edytuj kod]