Table des matières

Qu'est-ce que c'est ?

Les GNU Autotools, appelé également le GNU build system, est un ensemble de logiciels permettant la construction d'un package qui se compile aisément et peut théoriquement s'adapter à toutes les plateformes UNIX. La compilation d'un paquet utilisant les Autotools se fait en 3 étapes :

Cepandant la mise en place d'un tel paquet est très longue et très fastidieuse, c'est pourquoi je vous le déconseille pour les plus petits projets, ou un Makefile suffit (si vous avez peu de dépendances notamment).

Comment on fait ?

Vous avez à votre disposition différents outils pour ça : automake, autoconf, aclocal, autoheader. Cependant il existe un outil qui les réunit tous : autoreconf.

Les fichiers créés par les Autotools

Dans un paquet vous devez avoir les fichiers suivants :

Création d'un paquet simple

Voila, la base de votre paquet est prêt. Maintenant, il faut créer deux fichiers qui permettront aux autotools de générer le script configure :

AC_INITAC_PROG_CC etc...

Création de notre configure.ac

Un configure.ac basique ressemble à ça :

AC_INIT([exemple],[1.0],[bug-report@adress.com])
AM_INIT_AUTOMAKE([-Wall foreign])
AC_PROG_CCAM_CONFIG_HEADER(config.h)
AC_CONFIG_FILES([Makefile src/Makefile])
AC_OUTPUT

Les crochets symbolisent les guillemets.

Création des deux Makefile.am

Le premier Makefile.am doit indiquer de lancer make dans src/ ( make -C src/) ce qui se fait par la variable :

SUBDIRS = src

Et celui dans src/ doit indiquer le binaire à créer, les sources à compiler :

bin_PROGRAMS = hello

Indique que hello est de type bin, en gros hello ira dans le dossier /usr/local/bin après installation, on peut très bien remplacer par :

lib_PROGRAMS = hello.so

Et là hello.so ira dans /usr/local/lib après installation Ensuite on indique les sources à compiler :

hello_SOURCES = hello.c

Et voilà :-) Votre paquet doit ressembler à ça :

.:
AUTHORS  ChangeLog  configure.ac  NEWS COPYING  INSTALL  Makefile.am  README  
src
./src:
hello  main.c  Makefile.am

On lance autoreconf -i (-i sert à installer les fichiers manquants) :

$ autoreconf -i
automake: configure.ac: installing `./install-sh'
automake: configure.ac: installing `./mkinstalldirs'
automake: configure.ac: installing `./missing'
automake: configure.ac: installing `./config.guess'
automake: configure.ac: installing `./config.sub'

Ensuite on le test en compilant :

./configure 
make
sudo make install

Et voilà votre premier paquet :-)

Et maintenant ?

To be continued