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 :

  • ./configure : Crée un Makefile adapté au système hôte.
  • make : Compilation du paquet.
  • make install (doit souvent être lancé en root afin d'avoir les permissions nécessaires à la création des fichiers) : Installe les fichiers binaires dans /usr/local/bin et les médias (images, sons etc…) dans /usr/share.

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 :

  • Le script configure.
  • Un makefile.in, le Makefile que l'on veut obtenir, il servira au script configure pour la génération des Makefiles.
  • Un fichier config.in qui contient tous les defines relatifs au projet (version, est-ce que telle lib est présente, etc…).

Création d'un paquet simple

  • Créez un sous-dossier src, dans lequel vous mettez un fichier-source quelconque (un simple hello world suffit).
  • Créez les fichier : INSTALL, NEWS, README, COPYING, AUTHORS, ChangeLog.

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 :

  • configure.ac : Ce fichier sert à générer Makefile.in & configure. Il contient des simples macros du type :
AC_INITAC_PROG_CC etc...
  • Makefile.am : Ce fichier sert à générer Makefile.in, il définit juste la liste des fichiers-sources, la cible, 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.

  • La première macro initialise Autoconf avec le nom du paquet, la version, l'adresse de report de bug.
  • La seconde, AUTOMAKE : -Wall est une option de compilation, et foreign demande à Automake de ne pas se préoccuper d'éventuels fichiers manquants (par exemple : NEWS)
  • AC_PROG_CC : Ajout de la vérification de la présence d'un compilateur C, dans le script configure
  • AM_CONFIG_HEADER (macro pour automake) : Indique le header de configuration : config.h
  • AC_CONFIG_FILES : Liste des Makefile à générer par configure : on a en a deux, un à la racine et un dans le sous dossier src/
  • AC_OUTPUT : Macro de fin.

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

 
autotools.txt · Dernière modification: 2008/07/09 22:33 (édition externe)
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki