# GNU build system

GNU build system, també conegut com a Autotools, és un conjunt d'eines de programació dissenyades pel Projecte GNU per ajudar a la creació de paquets de codi font portable a diferents sistemes Unix-like.
Autotools és part de GNU toolchain i és àmpliament utilitzat al món del programari lliure. Tot i que aquestes eines estan sota la llicència GNU GPL amb algunes excepcions especials, és permès el seu ús per crear programari propietari.

## Components

Autotools està format per les eines del Projecte GNU Autoconf, Automake, i Libtool. Altres eines sovint utilitzades son GNU make , GNU gettext, pkg-config, i GNU Compiler Collection (GCC).

### GNU Autoconf

Autoconf genera un script configure basat en la llista d'instruccions continguda en un fitxer anomenat configure.ac. L'script configure, quan s'executa, escaneja el context de construcció i genera un script subordinat anomenat config.status que, al seu torn, converteix altres fitxers d'entrada, generalment Makefile.in, en fitxers de sortida Makefile apropiats per a l'entorn. Finalment, amb l'eina Make, utilitza els fitxers Makefile per a generar fitxers executables a partir del codi font.
La complexitat de Autotools reflecteix la varietat de circumstàncies en què pot ser construït el codi font.
* Si canvia un arxiu de codi font n'hi ha prou amb tornar a executar make que només recompila la part del codi font afectada pel canvi.
* Si canvia un fitxer .in llavors basta amb tornar a executar config.status i make.
* Si es copia el codi font a un altre ordinador llavors n'hi ha prou amb executar configure (que executa config.status) i make. Per aquesta raó el codi font que utilitza Autotools normalment és distribuït sense els fitxers que genera configure.
* Si hi ha un canvi profund del codi font, llavors han de substituir-se els fitxers configure.ac i .in. Per a processar arxius, Autoconf utilitza la implementació del sistema de macros «m4» del Projecte GNU.
Autoconf porta diverses eines auxiliars c com Autoheader, usat per a gestionar els fitxers de capçalera de C o Autoscan, que pot crear un fitxer inicial d'entrada per Autoconf.

### GNU Automake

Automake ajuda a crear fitxers portables Makefile, que al seu torn són processats amb la utilitat make, que pren com a entrada un fitxer Makefile.am i el converteix en Makefile.in, que utilitza l'script de configuració per generar el fitxer Makefile de sortida. Automake també porta a terme la revisió automàtica de dependències ; cada cop que es compila un fitxer de codi font, grava la llista de dependències (per exemple, els arxius de capçalera C). Posteriorment, cada vegada que s'executa make i si sembla que ha canviat cap dependència, es reconstruiran els arxius dependents.

### GNU Libtool

Libtool ajuda a gestionar la creació de biblioteques estàtiques i dinàmiques en diversos sistemes operatius Unix-like. Libtool ho aconsegueix amb l'abstracció del procés de creació de les biblioteques ocultant les diferències entre els diferents sistemes (per exemple, entre sistemes GNU/Linux i Solaris).

### Gnulib

Gnulib és una col·lecció (biblioteca informàtica) de subrutines de programari que simplifica el procés de creació del programari que utilitza Autoconf i Automake, portable a una àmplia gamma de sistemes operatius.

## Ús

Autotools ajuda als equips de desenvolupament de programari a escriure programari multiplataforma i posar-lo a disposició d'una comunitat d'usuaris molt més àmplia incloent-hi el codi font per a aquells usuaris que desitgen construir el programari ells mateixos. En la majoria dels casos, els usuaris només han d'executar l'script configure subministrat (amb l'única dependència necessària, l'existència d'un shell d'Unix compatible amb Bourne Shell), i un programa make. Tampoc cal que tinguin les Autotools instal·lades en l'ordinador.

## Referències

* ↑ Enginyeria del programari en entorns de programari lliure, 2006, p. 153.
* ↑ «GNU build system (autotools)». Acacha.org. Arxivat de l'original el 11 de març 2016. [Consulta: 10 març 2016].
* ↑ «AUTOCONF CONFIGURE SCRIPT EXCEPTION» (en anglès). Gnu.org, 18-08-2009. [Consulta: 9 març 2016].
* ↑ «libtool HACKING» (en anglès). Gnu.org. [Consulta: 9 març 2016]. inclou totes les excepcions de llicència pertinents.
* ↑ «Introducing the GNU tools» (en anglès). autotoolset.sourceforge.net. [Consulta: 9 març 2016].
* ↑ Enginyeria del programari en entorns de programari lliure, 2006, p. 165.
* ↑ Enginyeria del programari en entorns de programari lliure, 2006, p. 169.
* ↑ «Introducing the GNU Build System» (en anglès). Gnu.org. [Consulta: 9 març 2016].

## Vegeu també

* SCons

## Bibliografia

* Aycart Pérez, David; Gibert Ginestà, Marc; Hernández Matías, Martín; Mas Hernández, Jordi. Enginyeria del programari en entorns de programari lliure (PDF). Fundació per a la Universitat Oberta de Catalunya, 2006. D.L. B-9.313-2006. ISBN 84-9788-411-6 [Consulta: 9 març 2016]. Arxivat 2016-03-10 a Wayback Machine.
* Vaughn, Gary V.; Elliston, Ben; Tromey, Thomas; Taylor, Ian Lance. GNU Autoconf, Automake, and Libtool (en anglès). New Riders, octubre 2002. ISBN 1578701902 [Consulta: 6 març 2016].

## Enllaços externs

* El GNU configura i sistema de complexió
* El pkg-config paquet
* GNU automake documentació
* GNU autoconf documentació
* Manual combinat per Automake i Autoconf