Autotools en C/Programme exemple

Nous verrons ici les utilisations les plus simples (par ex : ajouter un fichier), qui sont aussi les plus quotidiennes pour un développeur.

Préparations du programme Affichage modifier

Nous allons créer un programme Affichage qui produira un simple "Bonjour" dans le terminal. Par respect pour les autres développeurs, nous suivons ici les standards de programmation (notamment GNU). Il est en effet habituel de mettre son code dans un répertoire du même nom que le programme. À l'intérieur de ce répertoire nous placerons le code source dans src/ (ultérieurement, nous créerons docs/ pour la documentation, tests/, po/ pour l'internationalisation du programme, etc.)

Notre arborescence pour l'instant :

affichage/
  src/

On crée le fichier source en langage C dans src/ :

affichage/
  src/
   programme.c

Et éditons-le pour y placer notre code trivial :

/* programme.c */
void main()
{
  printf("Bonjour\n");
}

Fichiers de configuration modifier

Pour fonctionner, Autotools se sert de plusieurs fichiers qu'il va créer mais requiert trois fichiers de notre part dont deux sont plus importants  :

  • configure.ac servant à configurer autoconf
  • Makefile.am qui sera utilisé par automake
  • README

configure.ac modifier

Pour faciliter la rédaction de ce fichier, utilisons le programme autoscan qui va fournir un modèle. Pour cela, il faut se placer dans le répertoire principal affichage :

$ cd affichage/
$ autoscan

autoscan va générer un fichier configure.scan. Son édition va nous permettre de compléter quelques champs :

AC_PREREQ([2.65])
AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
AC_CONFIG_SRCDIR([src/programme.c])
AC_CONFIG_HEADERS([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_OUTPUT

Il sera modifié et complété :

AC_PREREQ([2.65])
AC_INIT(affichage, 0.01, affichage@gnu.org) # remplir ici le nom du programme, version, courriel du développeur
AC_CONFIG_SRCDIR([src/programme.c])
AC_CONFIG_HEADERS([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_OUTPUT
(
Makefile     # on reconstitue ici l'arborescence qui doit
src/Makefile # être parcourue
)

Une fois édité, on le renomme en configure.ac. Donc à ce stade, l'arborescence doit être :

affichage/
  configure.ac
  src/
   programme.c

Makefile.am modifier

Il y aura plusieurs fichiers de ce type : autant de Makefile.am que de répertoire à parcourir, un dans le répertoire principal affichage/ et un dans src/. Dans la plupart des projets, il ne contient qu'une ou deux lignes : la liste des sous-répertoires qu'il faudra parcourir dans notre exemple le répertoire src. Pour l'indiquer à Automake, il faut renseigner la variable «SRC» dont c'est justement le rôle.

On ajoute un Makefile.am :

affichage/
  configure.ac
  Makefile.am
  src/
   programme.c

Dans lequel on place ce contenu :

SUBDIRS=src

Et on en crée un deuxième :

affichage/
  configure.ac
  Makefile.am
  src/
   Makefile.am
   programme.c

Dans lequel on va écrire :

bin_PROGRAMS=affichage
affichage_SOURCES=programme.c

README modifier

Sa rédaction ne pose aucun problème car son contenu n'est pas lu par Automake. Seule sa présence est requise. Il est cependant toujours conseillé de renseigner ces fichiers :

  • la documentation augmente la qualité du logiciel
  • l'utilisateur est toujours heureux de pouvoir trouver une aide en cas de problème

Toujours pour des raisons de cohérences entre les programmes, il est conseillé d'autre part de s'inspirer d'un README existant pour respecter ses conventions typographiques et se laisser guider par les infos qu'il est bon ou pas de placer dans ce fichier.

autogen.sh modifier

Ce script (disponible ici) va nous permettre de simplifier la construction, car il réalise toutes les opérations nécessaires de manière automatique. Même si tout est automatique, il faut quand même savoir que ce script lance plusieurs commandes différentes dont :

$ aclocal
$ autoconf
$ autoheader
$ automake

Il faut noter qu'après ce lancement certains fichiers seront créés dont INSTALL, AUTHORS (vide : à compléter), ChangeLog (vide aussi), NOTES (vide), TODO (vide). Encore une fois, maintenir ces fichiers n'est pas difficile et toujours profitable aux utilisateurs.

affichage/
  autogen.sh
  configure.ac
  Makefile.am
  README
  src/
   Makefile.am
   programme.c

Maintenant que tout est prêt, lançons le script :

$ ./autogen.sh

LICENSE modifier

Enfin, il faut penser aussi utiliser la bonne licence légale à ajouter au logiciel. Par défaut, GNU Gpl. Nous la garderons, mais il faut faire une petite modification : ajouter le nom du programme et la date.