Autoconf
Vývojář | Projekt GNU |
---|---|
Aktuální verze | 2.72 (22. prosince 2023) |
Operační systém | UN*X |
Vyvíjeno v | m4 |
Typ softwaru | programátorský nástroj, knihovna a GNU balíček |
Licence | GNU General Public License, version 3.0 or later |
Web | www |
Některá data mohou pocházet z datové položky. |
Autoconf je nástroj pro vytváření softwarových balíčků kompilovaných ze zdrojových textů. Usiluje o překlenutí rozdílů mezi různými systémy a umožňuje, aby činnost při instalaci, která zahrnuje rozbalení distribučního archivu se zdrojovými texty, překlad (build) programů a instalaci vytvořených souborů, bylo možné provést pevnou posloupností příkazů, a pokud možno bez detailních znalostí cílového systému.
Autoconf je použitelný na systémech, na kterých je dostupný Bourne shell a program make. Lze jej používat pro build programů v různých programovacích jazycích, např. C, C++, Fortran, Fortran 77, Erlang nebo Objective-C.
Skript configure spouští řadu testů, pomocí kterých přizpůsobí zdrojové texty pro build a instalaci na konkrétní cílový systém. Pro přizpůsobení spouští na cílovém systému řadu testů, na jejichž základě vygeneruje hlavičkové soubory a soubory Makefile ze šablon. Autoconf spolu s programy Automake a Libtool tvoří GNU Build System, který zahrnuje několik dalších nástrojů, především Autoheader.
Účel programu autoconf
[editovat | editovat zdroj]Autoconf je nástroj pro vytváření softwarových balíčků kompilovaných ze zdrojových textů. Balíčky jsou zpravidla šířeny jako .tar.gz soubory. Autoconf by měl správci balíčku umožnit překlenout rozdíly mezi různými systémy, takže pro rozbalení, překlad a nainstalování balíčku by mělo stačit zadat příkazy:
$ tar zxvf balíček-verze.tar.gz
$ cd balíček-verze
$ ./configure
$ make
$ /bin/su -
$ make install
Historie
[editovat | editovat zdroj]Autoconf vytvořil v létě 1991 David Mackenzie pro podporu své práce v Free Software Foundation. V následující letech byla do autoconfu zahrnuta vylepšení od množství autorů a stal se nejpoužívanějším nástrojem pro vytváření přenositelných balíčků ve světě svobodného softwaru.
Filozofie
[editovat | editovat zdroj]Autoconf se podobá balíčku Metaconfig používanému jazykem Perl. Velmi podobným nástrojem je také systém imake používaný do verze X11R6.9 pro build X Window System, který však má jinou filozofii.
Přístup Autoconfu k přenositelnosti je testovat dostupnost funkčností, nikoli čísla verzí. Například nativní překladač jazyka C na SunOS 4 nepodporuje ISO rozšíření. Ale uživatel nebo správce mohl na počítač nainstalovat ISO C-kompatibilní překladač. Přítomnost ISO překladače jazyka C nelze odhalit na základě testování verze systému, ale při testování vlastností je skript configure schopen ISO překladač jazyka C objevit. Tento přístup přináší následující výhody:
- skript configure je použitelný i na novějších nebo neznámých systémech
- na systémech, na kterých správce nainstaloval vylepšené verze vývojových nástrojů, umožňuje využívat jejich možností
- nevyžaduje udržování detailních seznamů, které verze obsahují podporu jakých vlastností
Příkaz configure
[editovat | editovat zdroj]Příkaz ./configure
může doplněn parametry; jejich seznam se vypíše zadáním
$ ./configure --help
Mezi důležité parametry patří --prefix=PREFIX
, udávající, v jakém stromě adresářů budou umístěny soubory potřebné pro provozování programů z balíčku a --exec-prefix=EPREFIX
, udávající, v jakém stromě adresářů budou umístěny binární programy. Konkrétní jména adresářů lze zadat pomocí parametrů—bindir=DIR user executables [EPREFIX/bin]
--sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --datadir=DIR read-only architecture-independent data [PREFIX/share] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --infodir=DIR info documentation [PREFIX/info] --mandir=DIR man documentation [PREFIX/man]
Od verze 1.3 automake navíc umožňuje zadáním
$ DESTDIR=kořen make install
při instalaci předřadit před PREFIX
a EPREFIX
jméno adresáře, do kterého má být celá struktura souborů instalována (což je vhodné při vytváření RPM balíčků nebo instalaci na disk jiného počítače zpřístupněný pomocí například NFS jako adresář kořen
).
Pokud balíček umožňuje vytvářet varianty s různou funkčností nebo předpokládající přítomnost určitého balíku na cílovém systém, lze tyto varianty vybírat pomocí—enable-VLASTNOST—enable-VLASTNOST=hodnota—disable-VLASTNOST—with-BALÍK—without-BALÍK
Další parametry je možné skriptu configure
dodat pomocí parametrů tvaru jméno=hodnota
– například
CC | příkaz volající překladač jazyka C |
CFLAGS | příznaky (řádkové parametry) pro překladač jazyka C |
LDFLAGS | příznaky (řádkové parametry) pro linker (např. -Ladresář, pokud se má program linkovat s knihovnami umístěnými v nestandardním adresáři) |
CPPFLAGS | příznaky (řádkové parametry) pro preprocesor jazyka C (např. -Iadresář, pokud program používá hlavičkové soubory umístěné v nestandardním adresáři) |
CPP | příkaz fungující jako C preprocesor |
Pro zadání architektury lze použít parametry --build=ARCHITEKTURA
, při křížovém překladu --host=ARCHITEKTURA
nebo
--target=ARCHITEKTURA
.
Program automake
vytváří ze souboru Makefile.am
soubor Makefile.in
, autoconf
vytváří z *.in souborů soubory bez .in.
Příklad použití autoconf
[editovat | editovat zdroj]Program "Hello, world":
- Vytvořit zdrojový text
hello.c
:#include <stdio.h> int main() { printf("Hello, world!\n"); return 0; }
- Vytvořit
Makefile.am
obsahující řádekbin_PROGRAMS
se jmény všech binárních programů v projektu oddělená mezerami. Pro každý program je použit řádekjméno_SOURCES
obsahující seznam zdrojových souborů (*.c i *.h), které jsou potřeba k vytvoření programu:bin_PROGRAMS = hello hello_SOURCES = hello.c
- Pustit
autoscan
. Vypíše chyby:autom4te: configure.ac: no such file or directory autoscan: /usr/bin/autom4te failed with exit status: 1
a vytvoří
autoscan.log
aconfigure.scan
obsahující:# -*- Autoconf -*- # Process this file with autoconf to produce a configure script. AC_PREREQ(2.59) AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS) AC_CONFIG_SRCDIR([hello.c]) AC_CONFIG_HEADER([config.h]) # Checks for programs. AC_PROG_CC # Checks for libraries. # Checks for header files. # Checks for typedefs, structures, and compiler characteristics. # Checks for library functions. AC_CONFIG_FILES([Makefile]) AC_OUTPUT
- Přejmenujeme
configure.scan
naconfigure.ac
a doplníme informace do řádkuAC_INIT
- Pustíme
autoheader
. Vytvoří adresářautom4te.cache
se souboryoutput.0
,requests
atraces.0
a souborconfig.h.in
s obsahem:/* config.h.in. Generated from configure.ac by autoheader. */ /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the version of this package. */ #undef PACKAGE_VERSION
- Do
configure.ac
přidáme za řádekAC_INIT
řádekAM_INIT_AUTOMAKE
- Pustíme
aclocal
; vytvoříaclocal.m4
a v adresářiautom4te.cache
souborytraces.1
aoutput.1
a aktualizujerequests
- Spustíme
automake --add-missing --copy
; vypíšeconfigure.ac: installing `./install-sh' configure.ac: installing `./missing' Makefile.am: installing `./INSTALL' Makefile.am: required file `./NEWS' not found Makefile.am: required file `./README' not found Makefile.am: required file `./AUTHORS' not found Makefile.am: required file `./ChangeLog' not found Makefile.am: installing `./COPYING' Makefile.am: installing `./depcomp'
a vytvoří soubory
install-sh
,missing
,INSTALL
,COPYING
,depcomp
aMakefile.in
. Doplní doutom4te.cache
souborytraces.2
aoutput.2
a aktualizuje souborrequests
. - Spustit
autoconf
; aktualizuje souborrequests
a vytvoří skriptconfigure
. - Použít postup jako při instalaci balíčku:
$ ./configure $ make $ /bin/su - $ make install
- Po úpravě zdrojových textů znovu pustit
autoscan
; porovnatconfigure.scan
sconfigure.ac
, aktualizovatconfigure.ac
a spustitautoreconf
.
Kritika
[editovat | editovat zdroj]Systém autoconf bývá kritizován, že používá zastaralé technologie, které mají různá omezení a autorům skriptů configure.ac zbytečně komplikují i jednoduché scénáře. K často citovaným slabinám systému autoconf patří:
- Složitost používání systému, kdy u většiny projektů je potřeba vícenásobné opakování[1][2].
- Vygenerovaný skript
configure
je interpretován Bourne shellem, díky čemuž je generováníMakefile
pomalé. - Někteří lidé se domnívají, že skripty
configure
vytvořené programemautoconf
poskytují pouze ručně prováděné rozhraní příkazového řádku bez jakékoli standardizace[3]. Přestože mnoho vývojářů nerespektuje žádné konvence, tyto konvence existují a jejich používání je stále častější[4]. - Pokud má
autoconf
obsahovat nestandardní kontroly, musí se vývojáři naučit používat poměrně málo známý makroprocesor M4[3][5] - Kvůli slabé zpětné i dopředné kompatibilitě je nutné používat wrapper skript[6].
- Skripty generované příkazem autoconf jsou obvykle rozsáhlé a dosti složité. I když produkují obsáhlé ladicí výstupy, jejich ladění může být obtížné.
Kvůli těmto omezením několik projektů, které používaly GNU Build System přešlo na jiné buildovací systémy, jako například CMake a SCons[1][7].
Odkazy
[editovat | editovat zdroj]Reference
[editovat | editovat zdroj]V tomto článku byl použit překlad textu z článku Autoconf na anglické Wikipedii.
- ↑ a b NEUNDORF, Alexander. Why the KDE project switched to CMake -- and how [online]. 2006-06-21. Dostupné online.
- ↑ KAMP, Poul-Henning. A Generation Lost in the Bazaar. ACM Queue. 2012-08-15, roč. 10, čís. 8. Dostupné online.
- ↑ a b MCCALL, Andrew. Stop the autoconf insanity! Why we need a new build system [online]. 2003-06-21. Dostupné online.
- ↑ GNU Coding Standards [online]. Dostupné online.
- ↑ KAMP, Poul-Henning. Did you call them autocrap tools? [online]. 2010-04-20 [cit. 2018-04-10]. Dostupné v archivu pořízeném dne 2017-09-11.
- ↑ DICKEY, Thomas. why i still use autoconf 2.13 [online]. Dostupné online.
- ↑ www.blender.org [online]. [cit. 21-09-2014]. Dostupné v archivu pořízeném dne 02-12-2008.
Literatura
[editovat | editovat zdroj]- John Calcote. Autotools: a Practical Guide to GNU Autoconf, Automake, and Libtool. [s.l.]: [s.n.], 2010-07-23. ISBN 1593272065.
Související články
[editovat | editovat zdroj]- Configure
- Svatá trojkombinace – instalace softwaru ze zdrojových textů z pohledu běžného uživatele
- CMake – Alternativní systém pro překlad softwarových balíčků
- GNU build system
- pkg-config – Detekce závislostí mezi balíčky
Externí odkazy
[editovat | editovat zdroj]- Obrázky, zvuky či videa k tématu Autoconf na Wikimedia Commons
- Oficiální web systému autoconf
- GNU Autoconf macro archive
- The Goat Book homepage (aka the Autobook) Archivováno 20. 12. 2010 na Wayback Machine.
- Using Automake and Autoconf with C++
- Using C/C++ libraries with Automake and Autoconf.
- Autotoolset home page
- Autotools: A practitioner's guide to Autoconf, Automake and Libtool
- Autotools Mythbuster