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
[edytuj | edytuj kod]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
[edytuj | edytuj kod]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ż
[edytuj | edytuj kod]Linki zewnętrzne
[edytuj | edytuj kod]- Strona domowa GNU Autoconf (ang.)