Page 1 IR98 AutoconfAutomake Michel TRAN Ingénieurs 2000 Informatique - Réseaux Novembre 2000
Page 2 IR98 Plan Définition Motivation et raison de l’existence de tels outils Fonctionnement par l’exemple Procédure à l’installation d’un tel package Problème
Page 3 IR98 Définitions Automake est un générateur expérimental de makefiles. Il a été inspiré par le make de BSD 4.4, mais se veut portable et conforme aux standards GNU pour les variables et les cibles des makefiles. Autoconf de GNU est un outil permettant la configuration des sources et des Makefile. Ces 2 outils aident le programmeur dans la création de packages portables et configurables en permettant à la personne construisant le package de spécifier différentes options de configuration.
Page 4 IR98 Motivation logiciel nécessite des tâches de maintenance en général pénible (compilation, nettoyage de l’arborescence, gestion des dépendances entre fichiers) Évolution des logiciels ( rajout de fichiers, …) Utilisation sur des machines différentes, portable Intérêt : minimiser la tâche de maintenance en décrivant la structure de l’application en terme de plus haut niveau
Page 5 IR98 Fonctionnement : règle (depth) Depth Automake supporte 3 types de hiérarchie des répertoires: Flat Tous les fichiers se trouve dans un répertoire unique Deep Le répertoire principal contient les fichiers de configuration et les sources sont dans les sous-répertoires Shallow Le source primaire se trouve dans le répertoire principale et les sous répertoires contiennent essentiellement les bibliothèques.
Page 6 IR98 Fonctionnement : règle (strictness) Strictness Indique le niveau de « sévérité » avec lequel automake devra vérifier la conformité avec les standards. Foreign Vérifie seulement le strict nécessaire pour pouvoir fonctionner. Gnu Vérifie la conformité avec le standard GNU. C’est l’option par défaut. Gnits Vérifie la conformité avec le standard gnits.
Page 7 IR98 Fonctionnement Automake et autoconf fonctionnent de paire Utilisation d’autres outils pour créer un package: autoscan, aclocal et autoheader Prenons l’exemple suivant : (deep) Helloworld configure.in Makefile.am src Makefile.am helloworld.c helloworld.h main.c
Page 8 IR98 Autoconf (1) configure.in décrit les options et spécificités à tester avant la compilation Autoscan permet de générer un fichier configure.scan prototype de configure.in configure.in AC_INIT(src/hello) AM_INIT_AUTOMAKE(hello,0.1) AM_CONFIG_HEADER(config.h) AC_PROG_CC dnl pour utiliser compilateur C++ :AC_PROG_CXX AC_OUTPUT(Makefile src/Makefile)
Page 9 IR98 Autoconf (2) Autoconf transforme configure.in en un script exécutable (configure) qui effectue réellement les tests checking for gcc... gcc checking whether the C compiler (gcc ) works... yes checking whether gcc accepts -g... yes génère Makefile creating Makefile creating src/Makefile configure.in Makefile.in autoconf configure Makefile
Page 10 IR98 Automake (1) Automake --foreign --add-missing Automake lit un Makefile.am et génère un Makefile.in. Mettre un Makefile.am dans chaque sous répertoire Certaines macros indique la génération de code spécialisé, par exemple bin_PROGRAMS signifie qu’on va avoir génération d’exécutables. Automake utilisera la macro AC_OUTPUT(Makefile src/Makefile) dans le fichier configure.in pour savoir les Makefile.in à générer
Page 11 IR98 Automake (2) Makefile.am ## comment SUBDIRS = src configure.in Makefile.in autoconf configure Config.h Options de l’utilisateurs Makefile automake config.h.in Makefile.am src/Makefile.am bin_PROGRAMS = hello hello_SOURCES = hello.h hello.c main.c ##SUBDIRS = sousrep
Page 12 IR98 Plus d’options Hello fait appel à la bibliothèque libmath Makefile.am : bin_PROGRAMS = hello hello_SOURCES = hello.c hello_LDADD = -lm Compilation avec l’option debugging –g Configure.in : CXXFLAGS="" AC_ARG_ENABLE(debug, [ --enable-debug Compilation flags to allow debugging], CXXFLAGS="-g" ) AC_DEFINE(CXXFLAGS)
Page 13 IR98 Résumé Récapitulatif des actions à mener pour avoir un projet qui fonctionne OutilsActions autoscanPour générer un moule du fichier configure.in aclocalPour installer les outils complémentaires nécessaires à Automake autoheaderPour déterminer quelles sont les variables du pré- processeur que l'on va définir et les sauver dans le fichier config.h.in autoconfGénérer configure à partir de configure.in automakeGénérer les fichiers Makefile.in à partir des Makefile.am./configureGénérer les Makefile et le fichier config.h en fonction des options de compilation souhaitées makeGénère les éxécutables
Page 14 IR98 Installation (1) L’installation du package comporte : 1. détection du matériel, des outils et des bibliothèques 2. compilation 3. copie des fichiers dans les répertoires cibles
Page 15 IR98 Installation (2) 1. détection du matériel : elle se lance par la commande./configure./ configure --bindir=/usr/local/bin --enable-debug 2. compilation proprement dite : make utilise un script qui lance le compilateur en lui disant quels fichiers compiler, et quels sont les paramètre de la compilation. 3. copie des fichiers : appelez make install ; cette commande utilise aussi un script, cette fois-ci pour copier les fichiers (binaires, doc, images, etc...) dans /usr/local/bin.
Page 16 IR98 Problèmes courants Bibliothèques absentes configure: error: Cannot find library guile Problèmes de syntaxes dans configure.in: AC_DEFINE(CFLAGS) juste AC_DEFINE (CFLAGS) faux Limites Détecte la configuration mais ne peut pas ajouter les informations manquantes ou les corrigées. (ex:fichiers d’en-têtes erronées sur ce un système)
Page 17 IR98 Conclusion Outils très puissants qui contiennent un important jeu de test (macro) Il est fortement conseillé de lire la documentations GNU pour avoir un meilleure aperçu des capacités de ces outils Outils facilitant la maintenance des logiciels en contre partie d’un effort pour apprendre leur utilisation.
Page 18 IR98 Bibliographie Références : Docs GNU Automake source.redhat.com/automake/automake.html Autoconf Autres liens : nf/index.html
Page 19 IR98 Questions