You are here -> Home linkdd's journals » Les autotools

Les autotools

Le 17/11/2009 à 21h19 by linkdd, See the Journals, 0 commentaries

De nombreux logiciels utilisent le fameux script configure, qui reste un mystère total pour certain. Ce script permet une grande compatibilité avec la majorité des distributions Linux ET BSD. Et pourquoi ? Simplement parce que ce script auto-généré qui vérifie les dépendances et écrit les Makefile permet ceci :

$ ./configure --prefix=/usr
$ make
$ make install DESTDIR=~/usr/monpaquet

Le paquet croit être installé dans /usr alors qu'il est installé dans ~/usr/monpaquet. Très pratique pour certain gestionnaire de paquet ce qui permet un controle plus aisée (selon moi). Ce principe de "FAKEROOT" est utilisé par GreenPKG (un gestionnaire de paquet simplissime que j'ai réalisé).

Ce n'est biensur pas la seule fonctionnalité :

  • Vérifie les dépendances
  • Vérifie la bonne configuration du compilateur
  • Génère les Makefiles automatiquement (plus besoin de passer 3h sur le build-system)
  • Permet la traduction du programme dans différentes langues à l'aide de Gettext

Comment le réaliser ? Il vous suffit de réaliser quelques petits fichiers : configure.ac (qui va générer le configure) et les quelques Makefile.am (qui vont être utilisés pour générer le Makefile final).

Généralement on organise comme ceci :

|- configure.ac   # configure
|- Makefile.am    # Makefile général
|-+ src/          # Contient les sources de notre programme
  |- Makefile.am  # Makefile spécifique aux sources
|-  po/           # Contient les fichiers de traductions

Voici un exemple de configuration qui nécéssite tout simplement GTK :

configure.ac

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# Info du programme
AC_INIT([programme], [version], [bug-report@machin.com])
# Options par défaut à passer au compilateur
AN_INIT_AUTOMAKE([-Wall -Werr foreign])

# On cherche si pkg-config est présent sur l'ordi
AC_CHECK_PROGS([PKGCONFIG], [pkg-config], [:])
if test "$PKGCONFIG" = :; then
    AC_MSG_ERROR([Package 'pkg-config' not found])
fi

AC_PROG_CC
# Le fichier qui contiendra la configuration du logiciel
AC_CONFIG_HEADERS([config.h])
# Les Makefiles
AC_CONFIG_FILES([
    Makefile
    src/Makefile
])

# On cherche les dépendances
PKG_CHECK_MODULES(GTK, gtk+-2.0 >= 2.14)
AC_SUBST(GTK_CFLAGS)
AC_SUBST(GTK_LIBS)

AC_OUTPUT

Makefile.am

1
SUBDIRS = src

src/Makefile.am

1
2
3
4
bin_PROGRAMS = aout
aout_SOURCES = main.c
aout_CFLAGS = $(GTK_CFLAGS) # On ajoute les CFLAGS de GTK récupérés dans le configure.ac
aout_LDADD = $(GTK_LIBS) # Et les librairies pour l'éditeur de liens

Ensuite il suffit de lancer :

$ autoreconf --install

Ceci n'est qu'un exemple, je vous invite donc à lire ce tutoriel extrèmement bien fait.

Cordialement, David Delassus

Commentaries

Author Message