Travaux Pratiques autotools
Transcription
Travaux Pratiques autotools
Travaux Pratiques autotools Matthieu Herrb http: //homepages.laas.fr/matthieu/envol2010/tp-autotools/autotools.pdf Envol 2010 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 Introduction but: Mise en oeuvre de automake+autoconf+libtool pour gérer la compilation d’un projet 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) 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 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. 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: [...] 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 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 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 Makefile.am Liste les sous-répertoires du projet. SUBDIRS = d i n n e r d 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 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, ....) 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 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 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 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 ) ] ) 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 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. 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) 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 Compilation de hungryhacker similaire à dinnerd ajout dans Makefile.am et configure.ac (AC OUTPUT) utilisation de INCLUDES et LDADD pour référencer libdinner à faire: installer le script sample.sh 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 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 Compilation de vdinner similaire à hungryhacker utilisation de PKG CHECK MODULES pour trouver les packages OpenGL et X11 à faire: test pour glut moderne. 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 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 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 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.