Autoconf
GNU Autoconf – zestaw narzędzi oraz makr M4 stworzonych w ramach projektu GNU, które służą do generowania skryptów powłoki mających zająć się procesem kompilacji programów komputerowych rozprowadzanych w formie kodu źródłowego.
Autoconf jest w stanie dostosować się do specyfiki wielu systemów operacyjnych bez angażowania użytkownika.
Kompilacja z użyciem autoconf
Podstawowym plikiem dla Autoconfa jest configure.ac (w starszych wersjach używano configure.in, które wprowadzało w pomyłki poprzez podobiznę do Makefile.in, teraz narzędzia wyświetlają ostrzeżenie w przypadku używania starej nazwy). Na podstawie tego pliku program autoconf generuje skrypt configure w katalogu głównym pakietu z oprogramowaniem. Skrypt ten, który jest uruchamiany przez użytkownika końcowego, sprawdza obecność programów, bibliotek, nagłówków i spełnienia innych warunków określonych przez programistę. W zależności od zastosowanej konfiguracji, Autoconf zmienia tworzone przez siebie pliki Makefile, które to bezpośrednio odpowiadają za kompilację programu. Następnie użytkownik, uzyskawszy już pliki Makefile, wywołuje polecenie make, aby skompilować program.
Oto uproszczony schemat działania:
configure.ac + aclocal → aclocal.m4 configure.ac + aclocal.m4 + autoconf → configure configure.ac + aclocal.m4 + autoheader → config.h.in configure.ac + aclocal.m4 + Makefile.am → Makefile.in configure + config.h.in + Makefile.in → Makefile + config.h make + Makefile + pustak.c → pustak.o → pustak
(narzędzia aclocal i automake są częściami pakietu Automake, ale rozważa się przeniesienie aclocal do Autoconf).
Przykład
Oto przykładowy plik configure.in, dla programu Pustak:
dnl Komentarz, ignorowany przez program AC_INIT([Pustak], [0.1], [[email protected]], [pustak], [http://example.org/pustak/]) AC_CONFIG_HEADERS([config.h]) AC_CONFIG_SRCDIR([src/pustak.c]) dnl Jeśli używamy Automake: AC_CONFIG_AUX_DIR([build-aux]) dnl W folderze build-aux automake umieści skrypty pomocnicze AC_CONFIG_MACRO_DIR([m4]) dnl W folderze m4 Libtool, Gnulib i Gettext umieszczą repozytorium makr AM_INIT_AUTOMAKE dnl Jeśli używamy Libtool: LT_INIT dnl Jeśli używamy języka C: AC_PROG_CC dnl Jeśli używamy Gnulib: gl_EARLY dnl Jeśli C++: AC_PROG_CXX dnl Jeśli Objective C: AC_PROG_OBJC dnl Jeśli Objective C++: AC_PROG_OBJCXX dnl Parę użytecznych programów: AC_PROG_SED AC_PROG_AWK AC_PROG_GREP AC_PROG_EGREP AC_PROG_FGREP AC_PROG_LEX AC_PROG_YACC dnl Jeśli używamy Gnulib: gl_INIT dnl Sprawdza, czy w bibliotece `-lselinux' jest symbol getfilecon AC_CHECK_LIB([selinux], [getfilecon]) dnl Sprawdza, czy w systemie jest nagłówek errno.h i/lub err.h i/lub errx.h AC_CHECK_HEADERS([errno.h err.h errx.h]) dnl Sprawdza, czy w standardowo włączanych nagłówkach ($ac_includes_default) jest funkcja fork i/lub vfork AC_CHECK_FUNCS([fork vfork]) dnl Szuka typu bezznakowego 16-bitowego AC_TYPE_UINT16_T AC_CONFIG_FILES([Makefile src/Makefile doc/Makefile m4/Makefile]) AC_OUTPUT
Pierwsze wiersze, do AM_INIT_AUTOMAKE, to typowy początek pliku. Argumentem w trzeciej linii jest względna ścieżka do pliku źródłowego programu (w celu sprawdzenia, czy źródła są poprawnie rozpakowane), w pierwszej nazwa (użytkownika), wersja, adres zgłaszania błędów, nazwa (pliku) i strona domowa. Autoconf ma bardzo dużo makr. Aby zobaczyć je wszystkie, należy przeczytać dokumentację.
Zobacz też
- Automake
- Autoheader
Linki zewnętrzne
- Strona domowa GNU Autoconf (ang.)