Travaux Pratiques autotools
Transcription
Travaux Pratiques autotools
Travaux Pratiques autotools Matthieu Herrb Ecole IDL2011, La Londes Les Maures, 5 au 9 décembre 2011 Licence Ce document est sous licence Creative Commons Paternité - Partage à l’Identique 3.0 non transposé. Pour accéder à une copie de cette licence, merci de vous rendre à l’adresse suivante : http://creativecommons.org/licenses/by-sa/3.0/ Ecole IDL2011, La Londes Les Maures, 5 au 9 décembre 2011 2/34 Checking wether autotools still suck... yes Agenda 1 Introduction 2 Compilation d’un programme simple 3 Compilation d’une bibliothèque - libtool 4 Options de compilation 5 Utilisation de pkg-config pour configurer une application 6 Packaging avec autotools Ecole IDL2011, La Londes Les Maures, 5 au 9 décembre 2011 4/34 Introduction but : Mise en oeuvre de automake+autoconf+libtool pour gérer la compilation d’un projet Ecole IDL2011, La Londes Les Maures, 5 au 9 décembre 2011 5/34 Description Dining Hackers Variante de type jeu de rôle des philosophes et des spaghetti de Djikstra. Quatre composantes : dinnerd implémente le protocole libdinner bibliothèque client hungryhacker implémente un hacker vdinner visualisation 3D (OpenGL) Ecole IDL2011, La Londes Les Maures, 5 au 9 décembre 2011 6/34 Agenda 1 Introduction 2 Compilation d’un programme simple 3 Compilation d’une bibliothèque - libtool 4 Options de compilation 5 Utilisation de pkg-config pour configurer une application 6 Packaging avec autotools Ecole IDL2011, La Londes Les Maures, 5 au 9 décembre 2011 7/34 Première étape : compilation simple de dinnerd créer un fichier configure.ac minimal créer un fichier Makefile.am minimal créer un fichier dinnerd/Makefile.am minimal exécuter autoreconf pour générer les outils de compilation exécuter configure puis make puis make install. Ecole IDL2011, La Londes Les Maures, 5 au 9 décembre 2011 8/34 Ecriture de configure.ac Fichier source m4 produisant un script bourne shell Contient : des définitions de macros des appels à des macros des fragrement de code shell Élements de syntaxe de m4 : commentaires : dnl quotes : [...] Ecole IDL2011, La Londes Les Maures, 5 au 9 décembre 2011 9/34 Ecriture de configure.ac(2) Macros utilisées dans un fichier simple : AC PREREQ définit la version minimale de autoconf AC INIT définit le nom du projet, sa version, une adresse de contact AM INIT AUTOMAKE initialize automake. foreign indique que ce n’est pas un projet GNU. AM MAINTAINER MODE active le mode développeur AM CONFIG HEADER définit le nom du fichier d’entête généré par authoheader Ecole IDL2011, La Londes Les Maures, 5 au 9 décembre 2011 10/34 Ecriture de configure.ac (3) AC PROG CC configure un compilateur C AC CONFIG FILES liste des fichiers à générer AC OUTPUT déclenche la génération des fichiers Ecole IDL2011, La Londes Les Maures, 5 au 9 décembre 2011 11/34 configure.ac d n l c o n f i g u r e . ac f o r d i n n e r e x a m p l e AC PREREQ ( [ 2 . 6 5 ] ) AC INIT ( d i n n e r , [1.0.0] , [ h t t p : / / p r o j e t −plume . o r g ] , dinner ) AM INIT AUTOMAKE ( [ f o r e i g n ] ) AM MAINTAINER MODE ( [ e n a b l e ] ) AM CONFIG HEADER ( [ d i n n e r d / c o n f i g . h ] ) AC PROG CC AC CONFIG FILES ( [ M a k e f i l e dinnerd / Makefile ]) AC OUTPUT Ecole IDL2011, La Londes Les Maures, 5 au 9 décembre 2011 12/34 Makefile.am Liste les sous-répertoires du projet. SUBDIRS = d i n n e r d Ecole IDL2011, La Londes Les Maures, 5 au 9 décembre 2011 13/34 dinnerd/Makefile.am Définit : le nom du programme à compiler, les fichiers sources qui le composent, les pages de manuel Unix. bin PROGRAMS = d i n n e r d dinnerd SOURCES = d i n n e r d . c man MANS = d i n n e r d . 8 Ecole IDL2011, La Londes Les Maures, 5 au 9 décembre 2011 14/34 Géneration initiale autoreconf -i -f invoque dans le bon ordre tous les outils pour produire le script configure les fichiers prototype Makefile.in le fichier prototype dinnerd/config.h.in si nécessaire les fichiers requis par le projet (README, ....) Ecole IDL2011, La Londes Les Maures, 5 au 9 décembre 2011 15/34 Compilation dans un répertoire séparé Les autotools permettent de compiler dans un répertoire à part. Cela permet : de partager les sources entre : plusieurs version de l’OS (32bits, 64bits) plusieurs variantes de configuration plusieurs OS différents de nettoyer rapidement les résultats de compilation de profiter de disque volatile plus rapide mkdir obj cd obj ../configure --prefix=/home/envol2010 Ecole IDL2011, La Londes Les Maures, 5 au 9 décembre 2011 16/34 Options de configure configure --help affiche toutes les options connues configure ---prefix chemin défini le chemin de l’installation du programme Après configuration initiale : ./config.status -V affiche les options utilisées ./config.status --recheck ré-execute configure avec les mêmes options. ./config.status regénère les fichiers de configuration Ecole IDL2011, La Londes Les Maures, 5 au 9 décembre 2011 17/34 Cibles de make make ou make all compile le programme make install installe le programme et les fichiers connexes make uninstall desinistalle ce que install a installé make clean néttoye le résultat de make all make distclean nettoye le résultat configure Ecole IDL2011, La Londes Les Maures, 5 au 9 décembre 2011 18/34 Ajout d’un test dinnerd utilise le type socklen t qui n’est pas défini sur tous les systèmes. AC MSG CHECKING ( [ For s o c k l e n t ] ) AC COMPILE IFELSE ( [ AC LANG PROGRAM( [[# i n c l u d e <s y s / t y p e s . h>] [# i n c l u d e <s y s / s o c k e t . h > ] ] , [ s o c k l e n t foo ; foo = 1 2 3 5 ; ] ) ] , [ AC DEFINE ( [ HAVE SOCKLEN T ] , [ ] , [ Have t h e s o c k l e n t t y p e ] ) AC MSG RESULT ( y e s ) ], [ AC MSG RESULT ( no ) ] ) Ecole IDL2011, La Londes Les Maures, 5 au 9 décembre 2011 19/34 Agenda 1 Introduction 2 Compilation d’un programme simple 3 Compilation d’une bibliothèque - libtool 4 Options de compilation 5 Utilisation de pkg-config pour configurer une application 6 Packaging avec autotools Ecole IDL2011, La Londes Les Maures, 5 au 9 décembre 2011 20/34 libtool Unifie le processus de compilation de bibliothèques entre tous les systèmes compilation des fichiers sources édition des liens gère les dépendances gère la compilation croisée Configure produit un script libtool adapté au système pour lequel on compile. Ecole IDL2011, La Londes Les Maures, 5 au 9 décembre 2011 21/34 Configuration de libtool pour libdinner AC CONFIG MACRO DIR répertoire ou trouver les macros supplémentaires d’autoconf AC PROG LIBTOOL → tout le projet dinner utilisera libtool AC LANG([C]) spécifie le langage utilisé (remplace AC PROG CC). ajouter libdinner dans le Makefile.am du top-level ajouter la production de libdinner/Makefile dans configure.ac (AC CONFIG FILES) Ecole IDL2011, La Londes Les Maures, 5 au 9 décembre 2011 22/34 Compilation de libdinner Ajout dans configure.ac : AC CONFIG MACRO DIR ( [ m4 ] ) AC PROG LIBTOOL libdinner/Makefile.am lib LTLIBRARIES = l i b d i n n e r . l a libdinner la SOURCES = l i b d i n n e r . c include HEADERS = d i n n e r . h Ecole IDL2011, La Londes Les Maures, 5 au 9 décembre 2011 23/34 Agenda 1 Introduction 2 Compilation d’un programme simple 3 Compilation d’une bibliothèque - libtool 4 Options de compilation 5 Utilisation de pkg-config pour configurer une application 6 Packaging avec autotools Ecole IDL2011, La Londes Les Maures, 5 au 9 décembre 2011 24/34 Compilation de hungryhacker similaire à dinnerd ajout dans Makefile.am et configure.ac (AC CONFIG FILES) utilisation de INCLUDES et LDADD pour référencer libdinner à faire : installer le script sample.sh Ecole IDL2011, La Londes Les Maures, 5 au 9 décembre 2011 25/34 hugryhacker/Makefile.am bin PROGRAMS = h u n g r y h a c k e r hungryhacker SOURCES = h a c k e r . c INCLUDES = −I $ { t o p s r c d i r }/ l i b d i n n e r LDADD = −L . . / l i b d i n n e r − l d i n n e r dist man MANS = h u n g r y h a c k e r . 1 Ecole IDL2011, La Londes Les Maures, 5 au 9 décembre 2011 26/34 Agenda 1 Introduction 2 Compilation d’un programme simple 3 Compilation d’une bibliothèque - libtool 4 Options de compilation 5 Utilisation de pkg-config pour configurer une application 6 Packaging avec autotools Ecole IDL2011, La Londes Les Maures, 5 au 9 décembre 2011 27/34 pkg-config Outil permettant de décrire les dépendances d’un package et d’identifier les options nécessaires pour l’utiliser. fichiers .pc dans /usr/lib/pkgconfig/ commande pkg-config macro PKG CHECK MODULES Ecole IDL2011, La Londes Les Maures, 5 au 9 décembre 2011 28/34 Compilation de vdinner similaire à hungryhacker utilisation de PKG CHECK MODULES pour trouver les packages OpenGL et X11 à faire : test pour glut moderne. PKG CHECK MODULES ( [ VDINNER ] , [ g l u g l ] ) Ecole IDL2011, La Londes Les Maures, 5 au 9 décembre 2011 29/34 vdinner/Makefile.am AUTOMAKE OPTIONS = f o r e i g n bin PROGRAMS = v d i n n e r vdinner SOURCES = \ s r c / models . c \ s r c / models . h \ src / vdinner . c AM CFLAGS = ${VDINNER CFLAGS} AM LDFLAGS = − l g l u t ${VDINNER LIBS} INCLUDES = −I $ { t o p s r c d i r }/ l i b d i n n e r LDADD = −L . . / l i b d i n n e r − l d i n n e r dist man MANS = s r c / v d i n n e r . 1 x Ecole IDL2011, La Londes Les Maures, 5 au 9 décembre 2011 30/34 Agenda 1 Introduction 2 Compilation d’un programme simple 3 Compilation d’une bibliothèque - libtool 4 Options de compilation 5 Utilisation de pkg-config pour configurer une application 6 Packaging avec autotools Ecole IDL2011, La Londes Les Maures, 5 au 9 décembre 2011 31/34 cibles automake Autmake produit des règles pour gérer la préparation de la distribution source. make dist crée une archive source make distcheck vérifie qu’elle est complète Ecole IDL2011, La Londes Les Maures, 5 au 9 décembre 2011 32/34 Paramètrisation de la distribution configure.ac : AC INIT définit le numéro de version. produit la macro PACKAGE VERSION dans les entêtes C. Makefile.am : EXTRA DIST permet d’ajouter des fichiers dans la distribution Makefile.am : dist man MANS permet de forcer l’inclusion des pages source du manuel dans la distribution Ecole IDL2011, La Londes Les Maures, 5 au 9 décembre 2011 33/34 AM MAINTAINER MODE Le mode maintainer permet de générer des règles en plus pour mettre à jour l’infrastructure de compilation si nécessaire. Avantages : pratique en cours de développement. make suffit pour tout re-générer et recompiler permet d’être sûr d’utiliser les macros autoconf les plus récentes pour sons sysème. Inconvénients : ralenti la compilation pour l’utilisateur final nécessite d’avoir tous les autotools installés risques si la version installée est trop différente de la version du distributeur En général : désactiver AM MAINTAINER MODE avant de faire make dist. Ecole IDL2011, La Londes Les Maures, 5 au 9 décembre 2011 34/34