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.

Documents pareils