Autoconf

Schemat blokowy.

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], [pustak-bugreport@example.org], [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ż

Linki zewnętrzne

Media użyte na tej stronie

Autoconf-automake-process.svg
Autor: Jdthood, Licencja: CC BY-SA 3.0
GNU autoconf and automake process for generating makefiles