Autoconf

Z Wikipedie, otevřené encyklopedie
Skočit na: Navigace, Hledání

Autoconf je nástroj pro vytváření softwarových balíčků kompilovaných ze zdrojových textů. Umožňuje překlenout rozdíly mezi různými systémy a dovoluje rozbalit archivní soubor, přeložit programy a nainstalovat balíček pomocí pevné posloupnosti příkazů.

Účel programu autoconf[editovat | editovat zdroj]

Způsob použití nástrojů autoconf a automake. Ve starších verzích autoconf se soubor "configure.ac" jmenoval "configure.in".

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

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 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":

  1. Vytvořit zdrojový text hello.c:
    #include <stdio.h>
    
    int main() {
        printf("Hello, world!\n");
        return 0;
    }
    
  2. Vytvořit Makefile.am obsahující řádek bin_PROGRAMS se jmény všech binárních programů v projektu oddělená mezerami. Pro každý program je použit řádek jmé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
    
  3. 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 a configure.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
    
  4. Přejmenujeme configure.scan na configure.ac a doplníme informace do řádku AC_INIT
  5. Pustíme autoheader. Vytvoří adresář autom4te.cache se soubory output.0, requests a traces.0 a soubor config.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
    
  6. Do configure.ac přidáme za řádek AC_INIT řádek
    AM_INIT_AUTOMAKE
    
  7. Pustíme aclocal; vytvoří aclocal.m4 a v adresáři autom4te.cache soubory traces.1 a output.1 a aktualizuje requests
  8. Spustíme automake --add-missing --copy; vypíše
    configure.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 a Makefile.in. Doplní do utom4te.cache soubory traces.2 a output.2 a aktualizuje soubor requests.

  9. Spustit autoconf; aktualizuje soubor requests a vytvoří skript configure.
  10. Použít postup jako při instalaci balíčku:
    ./configure
    make
    /bin/su -
    make install
    
  11. Po úpravě zdrojových textů znovu pustit autoscan; porovnat configure.scan s configure.ac, aktualizovat configure.ac a spustit autoreconf.

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].
  • 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é programem autoconf poskytují pouze ručně prováděné rozhraní příkazového řádku bez jakékoli standardizace[2]. Přestože mnoho vývojářů žádné konvence nerespektuje, tyto konvence existují a jejich používání je stále častější[3].
  • Pokud má autoconf obsahovat nestandardní kontroly, musí se vývojáři naučit používat poměrně málo známý makroprocesor M4[2].
  • Kvůli slabé zpětné i dopředné kompatibilitě je nutné používat wrapper skript[4].
  • 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][5].

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.

  1. a b NEUNDORF, Alexander. Why the KDE project switched to CMake -- and how [online]. 2006-06-21. Dostupné online.  
  2. a b MCCALL, Andrew. Stop the autoconf insanity! Why we need a new build system [online]. 2003-06-21. Dostupné online.  
  3. GNU Coding Standards [online]. . Dostupné online.  
  4. DICKEY, Thomas. why i still use autoconf 2.13 [online]. . Dostupné online.  
  5. http://www.blender.org/development/release-logs/blender-233/build-systems/

Literatura[editovat | editovat zdroj]

  • John Calcote. Autotools: a Practical Guide to GNU Autoconf, Automake, and Libtool. [s.l.] : [s.n.]. ISBN 1593272065.  

Související články[editovat | editovat zdroj]

Externí odkazy[editovat | editovat zdroj]