Documentation de CDBS

Marc (Duck) Dequènes

Arnaud (Rtp) Patard

Permission est accordée de copier, distribuer et/ou modifier ce document selon les termes de la Licence Publique Générale GNU (GNU General Public License), version 2 ou toute version ultérieure publiée par la Free Software Foundation.

Historique des versions
Version 0.1.003/04/2005
First Public Release (for CDBS V0.4.27-3)
Version 0.1.107/06/2005
Updated for CDBS V0.4.30 (perl class build dependency management, cdbs-edit-patch script)
Version 0.1.205/07/2005
Added DEB_CONFIGURE_SCRIPT_ENV usage warning, fixed typo.
Version 0.1.316/09/2005
Added info about dpatch extension requirements (additional include + include order). Added warning and workaround for DEB_AUTO_UPDATE_DEBIAN_CONTROL problems (see #311724). Fixed typos.
Version 0.1.402/10/2005
Added info about quilt extension for patching sources.
Version 0.2.005/01/2006
Added info about Ruby classes (Team & setup.rb). Reordered makefile and autotools class, and explaned relationship. Document extraordinary use of DEB_MAKE_ENVVARS in autotools class.
Version 0.3.023/04/2006
Fixed typo (s/foo-date/foo-data/ reported by tioui). Warned of possible breakage if spaces in CURDIR (see #306941). Removed hacks in examples because of #300149, #284231 and #239128 / #341275. Updated for CDBS 0.4.37 (document DEB_MAKE_MAKEFILE, and special case when DEB_MAKE_CLEAN_TARGET can be empty + dh_installmime and dh_installcatalogs now called in debhelper class + s/DEB_ANT_TEST_TARGET/DEB_ANT_CHECK_TARGET/ which was a mistake in code, see #307813 + document DEB_CLEAN_EXCLUDE + default compat mode changed to 5 and DEB_DH_STRIP_ARGS usage too). Warn rules MUST come after CDBS includes (see #273835). Improved documentation of common build options.
Version 0.4.024/04/2006
Updated for CDBS 0.4.39 (ability to use uuencoded patches + dh_installudev now called in debhelper class + KDE class improvements + 'config.*' left over autotools files not removed anymore + new DEB_DH_COMPAT_DISABLE variable + improved scrollkeeper and Python cleanup + updated common variables available in 'debian/rules'). Updated some examples accordingly. Improved part on compat. Improved fixes related to DEB_AUTO_UPDATE_DEBIAN_CONTROL problems.

Table des matières

Préface
1. Introduction
Un peu d'histoire
Pourquoi CDBS ?
2. Premiers pas
Convertir un paquet à CDBS
Réglages de base et variables disponibles
Règles de construction simples et sur-mesures
Options de compilation usuelles
Les astuces de Debhelper
Ne pas s'occuper de Debhelper
Paramètres de Debhelper
Règles personnalisées de construction pour debhelper
3. Tâches courantes
Appliquer une rustine (en utilisant simple-patchsys)
Appliquer des rustines (en utilisant dpatch)
Appliquer des rustines (en utilisant quilt)
Gestion automatique des tarball
4. Personnalisation avancée
Gestion de « debian/control »
Utilisation de la classe Makefile
Utilisation de la classe Autotools
Utilisation de la classe Perl
Utilisation de la classe Python
Nouvelle politique Python
Ancienne politique Python
Utilisation de la classe Ruby setup.rb
Utilisation de la classe de l'équipe Debian Ruby Extras
Utilisation de la classe GNOME
Utilisation de la classe de l'équipe Debian GNOME
Utilisation de la classe KDE
Utilisation de la classe Ant
Utilisation de la classe HBuild
5. Panthéon des exemples
Exemple de GNOME + autotools + patchsys simple
Exemple Python
Exemple Makefile + Dpatch
Exemple Perl
6. Outils utiles
cdbs-edit-patch (fourni avec CDBS)
7. Conclusion

Liste des tableaux

2.1. Variables usuelles disponibles dans « debian/rules »
2.2. Scripts Debhelper communément gérés
4.1. Scripts Debhelper gérés par la classe GNOME

Préface

Cette documentation décrit ce que nous avons réussi à apprendre de l'utilisation de CDBS, avec le plus de détails possible. Néanmoins, nous n'utilisons pas le jeu complet de fonctionnalités disponibles, et certaines parties de cette documentation ont été écrites par pur soucis pratique et d'exhaustivité.

Veuillez noter que certains exemples dans cette documentation contiennent des retours à la lignes qui sont nécessaires pour faire garder à la page une largeur raisonnable ; faites attention de retirer les retours à la ligne avant usage (par exemple : le contenu de « debian/control » ne doit jamais être divisé sur plusieurs lignes sinon ou la construction du paquet échouera ou donnera un résultat incorrect).

Si vous trouvez des erreurs ou des informations manquantes, n'hésitez pas à contacter Marc Dequènes (Duck) .

Chapitre 1. Introduction

Un peu d'histoire

CDBS a été écrit par Jeff Bailey et Colin Waters en mars 2003, plus tard rejoins pas 4 autre développeurs.

Des informations simples peuvent être trouvées sur leur page de projet. Dans le paquet est fourni un petit jeu d'exemples (aussi disponible dans le paquet ici : /usr/share/doc/cdbs/examples/).

Depuis que nous expérimentions CDBS, il était devenu évident que le manque de documentation nous empêchait de l'utiliser plus largement dans nos paquets. Alors nous avons commencé à écrire quelques notes sur l'utilisation de CDBS, qui ont rapidement grossi jusqu'à devenir plusieurs pages. Cette documentation est une version révisée de la page wiki originale de la DuckCorp.

Pourquoi CDBS ?

CDBS a été conçu pour simplifier le travail du mainteneur pour qu'il ne pense plus qu'à la création de son paquet plutôt qu'à un « debian/rules » qui ne cesse de grossir et de se compliquer. C'est pourquoi CDBS gère pour vous la plupart des règles usuelles et détecte certains éléments de votre configuration.

CDBS n'utilise que des règles simples de makefile et est aisément extensible en utilisant des classes. Des classes pour gérer les autotools, l'application de rustines aux sources, les programmes GNOME, l'installation de Python, et bien d'autres sont disponibles.

Les avantages de CDBS :

  • « debian/rules » court, lisible et efficace
  • automatise l'usage de debhelper et des autotools pour que vous n'ayez pas à vous préoccuper de cette déplaisante et répétitive tache.
  • le mainteneur peut se concentrer sur les vrais problèmes de paquets car CDBS vous aide sans vous limiter
  • les classes utilisées dans CDBS ont été bien testées donc vous faites usage de règles sans erreurs et évitez de faire de sales correctifs pour résoudre des problèmes banals
  • migrer vers CDBS est facile
  • peut être utilisé pour générer des fichiers Debian (comme « debian/control » pour l'inclusion du champ « Uploaders » pour l'équipe GNOME)
  • CDBS est facilement extensible
  • Il |70>< !!!

Chapitre 2. Premiers pas

Convertir un paquet à CDBS

Convertir à CDBS est facile ; un simple « debian/rules » pour un logiciel en C/C++ sans aucune règle additionnelle s'écrira ainsi :

#!/usr/bin/make -f

include /usr/share/cdbs/1/rules/debhelper.mk
include /usr/share/cdbs/1/class/python-distutils.mk
					]]
					

Non, je ne rigole pas, ceci est suffisant pour gérer les autotools, comme mettre à jour config.{guess|sub}, faire le ménage des fichiers temporaires après la compilation et lancer tout le bordel usuel de debhelper.

Utilisez un niveau de compatibilité 5 (ou 4, un niveau inférieur peut ne pas fonctionner), créez votre <pkg>.install, <pkg>.info, etc… comme vous faite habituellement avec les scripts dh_* et CDBS les appellera si nécessaire, en détectant automatiquement beaucoup de choses. Dans le cas où l'information du niveau de compatibilité est manquante, CDBS créera un fichier « debian/compat » avec le niveau de compatibilité 5. Si vous utilisez la variable obsolète DH_COMPAT dans votre « debian/rules », vous devriez vous en débarrasser. Dans ce cas, ou dans le cas où vous voudriez que CDBS ne crée pas de fichier « debian/compat », vous pouvez désactiver cette fonction en mettant la variable DEB_DH_COMPAT_DISABLE à une valeur non-nulle.

Important

Si la gestion du « debian/control » est activée (voir plus bas), une dépendance de compilation sur « cdbs » est automatiquement ajoutée, dans le cas contraire, vous devrez l'ajouter vous même.

Avertissement

Attention, votre répertoire de travail NE DOIT PAS avoir d'espaces ou CDBS échouera probablement ; voir #306941

Réglages de base et variables disponibles

Souvenez vous que vous pouvez obtenir le répertoire du paquet avec la variable $(CURDIR).

Vous pouvez changer les paramètres de base de la compilation de cette façon :

# emplacement des sources
DEB_SRCDIR = $(CURDIR)/src
# répertoire de construction
DEB_BUILDDIR = $(DEB_SRCDIR)/build
# répertoire d'installation du logiciel
DEB_DESTDIR = $(CURDIR)/plop/
					

Quelques variables diverses que vous pouvez usiliser dans « debian/rules » :

Tableau 2.1. Variables usuelles disponibles dans « debian/rules »

DEB_SOURCE_PACKAGEnom du paquet source
DEB_VERSIONversion Debian complète
DEB_NOEPOCH_VERSIONversion Debian sans epoch
DEB_UPSTREAM_VERSIONversion amont
DEB_ISNATIVEnon-vide si le paquet est natif
  
DEB_ALL_PACKAGESliste de tous les paquets binaires
DEB_INDEP_PACKAGESliste des paquets binaires indépendants de l'architecture
DEB_ARCH_PACKAGESliste des paquets binaires dépendants de l'architecture
DEB_PACKAGESliste des paquets binaires normaux (non-udeb)
DEB_UDEB_PACKAGESliste des paquets binaires udeb, s'ils existent
  
DEB_HOST_GNU_TYPEtype GNU de la machine hôte
DEB_HOST_GNU_SYSTEMpartie système de type GNU de la machine hôte
DEB_HOST_GNU_CPUpartie CPU du type GNU de la machine hôte
DEB_HOST_ARCHnom de l'architecture Debian sur la machine hôte
DEB_HOST_ARCH_CPUpartie CPU du nom de l'architecture Debian sur la machine hôte
DEB_HOST_ARCH_OSpartie OS du nom de l'architecture Debian sur la machine hôte
  
DEB_BUILD_GNU_TYPEtype GNU pour cette construction
DEB_BUILD_GNU_SYSTEMpartie système du type GNU pour cette construction
DEB_BUILD_GNU_CPUpartie CPU du type GNU pour cette construction
DEB_BUILD_ARCHnom de l'architecture Debian pour cette construction
DEB_BUILD_ARCH_CPUpartie CPU du nom de l'architecture Debian pour cette construction
DEB_BUILD_ARCH_OSpartie OS du nom de l'architecture Debian pour cette construction
  
DEB_ARCHvieux nom de l'architecture Debian
 /!\ deprecated, only use to provide backward compatibility /!\
 (voir la page de manuel de dpkg-architecture pour plus d'information)


Règles de construction simples et sur-mesures

Avertissement

Prenez soin d'ajouter les règles après les inclusions CDBS nécessaires.

Supposez que vous vouliez des règles sur-mesures pour le paquet source foo, créant foo (dépendant de l'architecture) et foo-data (indépendant de l'architecture), vous avez juste besoin d'ajouter quelques lignes à « debian/rules ».

Pour ajouter des actions de pré-configuration :

makebuilddir/foo::
   ln -s plop plop2
					

Pour ajouter des actions de post-configuration  :

configure/foo::
   sed -ri 's/PLOP/PLIP/' Makefile

configure/foo-data::
   touch src/z.xml
					

/!\ in this case we are talking about package configuration and NOT about a configure script made with autotools.

Pour ajouter des actions de post-compilation :

build/foo::
   /bin/bash debian/scripts/toto.sh

build/foo-data::
   $(MAKE) helpfiles
					

Pour ajouter des actions de post-installation :

install/foo::
   cp debian/tmp/myfoocmd debian/foo/foocmd
   find debian/foo/ -name "CVS" -depth -exec rm -rf {} \;

install/foo-data::
   cp data/*.png debian/foo-data/usr/share/foo-data/images/
   dh_stuff -m ipot -f plop.bz3 debian/foo-data/libexec/
					

Pour ajouter des actions de post-préparation du paquet :

binary/foo::
   strip --remove-section=.comment --remove-section=.note --strip-unneeded \
      debian/foo/usr/lib/foo/totoz.so
					

Pour ajouter des actions de post-nettoyage :

cleanbuilddir/foo::
   rm -f debian/fooman.1
					

Options de compilation usuelles

L'optimisation est réglée par défaut dans la variable DEB_OPT_FLAG à « -O2 » : vous pouvez l'outrepassez. CFLAGS et CXXFLAGS sont définis à « -g -Wall $(DEB_OPT_FLAG) », CPPFLAGS est la variable d'environnement inchangée, mais vous pouvez outrepasser ces réglages pour chaque paquet en utilisant les variables CFLAGS_<package>, CXXFLAGS_<package>, et CPPFLAGS_<package>.

« DEB_BUILD_OPTIONS » est une variable bien connue de l'environnement Debian, pas une variable de CDBS, qui contient des options de compilation spéciales (une liste de mots-clef séparée pas des espaces). CDBS contrôle DEB_BUILD_OPTIONS pour avantageusement prendre en compte ces options ; voir les détails dans chaque classe.

Les astuces de Debhelper

Ne pas s'occuper de Debhelper

Oui, CDBS fait presque tout pour vous :-) .

Ajoutez cette ligne au début de votre fichier « debian/rules » :

include /usr/share/cdbs/1/rules/debhelper.mk
					

Les règles CDBS pour debhelper gèrent automatiquement les scripts dh_* suivants pour chaque paquet binaire :

Tableau 2.2. Scripts Debhelper communément gérés

dh_builddebdh_installcatalogsdh_installdocsdh_installlogrotatedh_link
dh_cleandh_installchangelogsdh_installemacsendh_installmandh_makeshlibs
dh_compressdh_installcrondh_installexamplesdh_installmenudh_md5sums
dh_fixpermsdh_installdebdh_installinfodh_installmimedh_perl
dh_gencontroldh_installdebconfdh_installinitdh_installpamdh_shlibdeps
dh_installdh_installdirsdh_installlogcheckdh_installudevdh_strip


D'autres scripts dh_* peuvent être gérés dans des classes spécifiques ou appelés dans des règles sur mesure.

Important

Si la gestion de « debian/control » est activée (voir plus bas), une dépendance de compilation sur « debhelper » est automatiquement ajoutée, dans le cas contraire, vous devrez l'ajouter vous même.

Avoir une dépendance versionnée sur « debhelper » est recommandée et assurera que les gens utilisent la version fournissant les fonctions désirées (la gestion du « debian/control » la rajoutera).

Paramètres de Debhelper

Les paramètres suivants permettent à debhelper d'appeler des personnalisations même si la plupart des appels sont toujours gérés sans écrire de règles. Certains d'entre eux s'appliquent sur tous les paquets binaires, comme DEB_INSTALL_DOCS_ALL, et d'autres s'appliquent uniquement à un paquet spécifique, comme DEB_SHLIBDEPS_LIBRARY_<pkg> (où <pkg> est le nom du paquet binaire). Reportez vous aux commentaires dans « /usr/share/cdbs/1/rules/debhelper.mk » pour une liste complète. Des exemples non-exhaustifs vont suivre.

Pour indiquer une dépendance forte sur un paquet contenant des bibliothèques partagées :

DEB_DH_MAKESHLIBS_ARGS_libfoo := -V"libfoo (>= 0.1.2-3)"
DEB_SHLIBDEPS_LIBRARY_arkrpg := libfoo
DEB_SHLIBDEPS_INCLUDE_arkrpg := debian/libfoo/usr/lib/
						

Pour installer un fichier « changelog » ayant un nom peu courant comme « ProjectChanges.txt.gz » :

DEB_INSTALL_CHANGELOGS_ALL := ProjectChanges.txt
						

Pour éviter de compresser les fichiers avec l'extension « .py » :

DEB_COMPRESS_EXCLUDE := .py
						

Pour enregistrer un paquet « libfoo-dbg » contenant une bibliothèque de débogage pour « libfoo » (qui a besoin des « .so » avec les symboles de débogage) en mode de compatibilité 4 :

DEB_DH_STRIP_ARGS := --dbg-package=libfoo
						

Dans le mode de compatibilité 5, CDBS détecte automatiquement les paquets -dbg et passe les arguments adéquats à dh_strip ; DEB_DH_STRIP_ARGS peut toujours servir à passer des arguments additionnels pour par exemple exclure certains fichiers (--exclude=<item>).

Options spécifiques de debhelper pour Perl (dh_perl est toujours exécuté) :

# Une liste séparée par des espaces des chemins où rechercher les modules perl
DEB_PERL_INCLUDE := /usr/lib/perl-z
# Comme ci-dessus, mais pour les paquets de type « libperl-stuff »
DEB_PERL_INCLUDE_libperl-stuff := /usr/lib/perl-plop

# Outrepasse les options passées à dh_perl
DEB_DH_PERL_ARGS := -d
						

Pour éviter de perdre des fichiers temporairement générés lors de l'appel à dh_clean (rarement utile) :

# les fichiers concernant ces motifs ne seront pas supprimés
# (attention, le changelog de CDBS a une typo lors du surlignage des nouvelles fonctions DEB_CLEAN_EXCLUDE*S*)
DEB_CLEAN_EXCLUDE := precious keep
						

Règles personnalisées de construction pour debhelper

Les règles de CDBS pour debhelper ajoutent aussi des règles plus judicieuses pour la construction du paquet.

Pour une action après la préparation du paquet (et du bordel de debhelper) :

binary-install/foo::
   chmod a+x debian/foo/usr/bin/pouet
						

Pour ajouter des actions après le nettoyage du paquet :

clean::
   rm -rf plop.tmp
						

D'autres règles existent, mais nous ne les avons pas testé :

  • binary-strip/foo (appelé après la suppression des symboles de débogage)
  • binary-fixup/foo (appelé après la compression et la correction des permissions)
  • binary-predeb (appelé juste avant la construction du .deb)

Chapitre 3. Tâches courantes

Appliquer une rustine (en utilisant simple-patchsys)

Tout d'abord, l'application de rustines directement dans les sources est MAL™, donc vous avez besoin d'une façon d'appliquer les rustines sans toucher aux fichiers. Ces règles, inspirées pas le système Dpatch, sont très similaires et efficaces. Tout ce que vous avez à connaître est l'usage de diff et patch, CDBS s'occupe du reste.

C'est très dur, donc écoutez attentivement et préparez vous pour l'examen.

Tout d'abord, ajoutez cette ligne dans votre fichier « debian/rules » :

include /usr/share/cdbs/1/rules/simple-patchsys.mk
					

Et utilisez le !

Créez un répertoire « debian/patches » et placez-y vos rustines. Les fichiers doivent être nommés de manière à indiquer l'ordre dans lequel ils doivent être appliqués, et doivent être terminés avec le suffixe « .patch » ou « .diff ». La classe prendra en compte les rustines avant la configuration et leur suppression après le nettoyage. Il est possible d'utiliser les niveaux de rustine de 0 à 3, CDBS les essaiera et utilisera le bon niveau automatiquement. Le système prend en charge les rustines compressées avec le suffixe .gz ou .bz2, ainsi que celles uu-encodées avec le suffixe .uu.

Vous pouvez personnaliser les répertoires où les rustines sont recherchées, et les suffixes comme ceci : (par défaut ce sont : .diff .diff.gz .diff.bz2 .diff.uu .patch .patch.gz .patch.bz2 .patch.uu)

DEB_PATCHDIRS := debian/mesrustines
DEB_PATCH_SUFFIX := .plop
					

En cas d'erreur lors de l'application, par exemple « debian/patches/01_hurd_ftbfs_pathmax.patch », vous pouvez lire le journal pour cette rustine dans « debian/patches/01_hurd_ftbfs_pathmax.patch.level-0.log » (« 0 » car une rustine de niveau 0).

Important

Si la gestion de « debian/control » est activée (voir ci-dessous), les dépendances de construction de « patchutils » sont automatiquement ajoutées, dans le cas contraire, vous devrez les ajouter vous même.

Appliquer des rustines (en utilisant dpatch)

Pour utiliser Dpatch en tant qu'alternative au système de rustines inclus dans CDBS, ajoutez simplement cette ligne à votre « debian/rules » :

include /usr/share/cdbs/1/rules/dpatch.mk
# nécessaire pour utiliser les outils dpatch (comme dpatch-edit-patch)
include /usr/share/dpatch/dpatch.make
					

Maintenant vous pouvez utiliser Dpatch comme d'habitude et CDBS l'appellera automatiquement.

Avertissement

Vous devriez inclure dpatch.mk APRÈS autotools.mk ou gnome.mk pour que l'extension dpatch fonctionne correctement.

Important

Si la gestion de « debian/control » est activée (voir ci-dessous), les dépendances de construction de « dpatch » et « patchutils » seront automatiquement ajoutées, dans le cas contraire, vous devrez les ajouter vous même.

Appliquer des rustines (en utilisant quilt)

Pour utiliser Quilt comme une alternative au système de rustines inclus dans CDBS, ajoutez simplement cette ligne à votre « debian/rules » :

include /usr/share/cdbs/1/rules/patchsys-quilt.mk
					

Maintenant vous pouvez utiliser Quilt comme d'habitude et CDBS l'appellera automatiquement.

Important

Si la gestion de « debian/control » est activée (voir ci-dessous), les dépendances de construction de « quilt » et « patchutils » seront automatiquement ajoutées, dans le cas contraire, vous devrez les ajouter vous même.

Gestion automatique des tarball

Pour utiliser le système de tarball CDBS, ajoutez simplement cette ligne à votre « debian/rules », et indiquez le nom du répertoire racine du tarball extrait :

include /usr/share/cdbs/1/rules/tarball.mk

DEB_TAR_SRCDIR := foosoft
					

CDBS reconnaîtra les tarballs avec les extensions suivantes : .tar .tgz .tar.gz .tar.bz .tar.bz2 .zip

L'emplacement du tarball est automatiquement détecté si l'on est de le répertoire racine des sources, ou il peut être indiqué grâce à :

DEB_TARBALL := $(CURDIR)/tarballdir/mygnustuff_beta-1.2.3.tar.gz
					

CDBS prendra en charge automatiquement la décompression et le nettoyage, par magie définira DEB_SRCDIR et DEB_BUILDDIR pour vous, et s'intègre bien avec les autres parties de CDBS (par exmple la classe autotools).

De plus, si vous souhaitez que les sources soient nettoyées des « sales » répertoires spécifiques à SCM, ajoutez simplement ceci au début de votre « debian/rules », avant n'importe quelle inclusion :

DEB_AUTO_CLEANUP_RCS := yes
					

Avertissement

la fonction DEB_AUTO_CLEANUP_RCS a été retirée depuis la version 0.4.39 sans aucune bonne raison. N'hésitez pas à faire un rapport de bug si vous souhaitez la voir ressusciter.

Important

Si besoin, et si la gestion de « debian/control » est activée (voir ci-dessous), les dépendances de construction de « bzip2 » ou « unzip » seront automatiquement ajoutées, dans le cas contraire, vous devrez les ajouter vous même.

Chapitre 4. Personnalisation avancée

Gestion de « debian/control »

Attention

La génération automatique de « debian/control » en utilisant n'importe quel outil est permise au sein de Debian du moment qu'elle est déclenchée manuellement par le développeur et que par la suite le résultat soit vérifié avec précaution.

La génération automatique de « debian/control » sans aucune intervention humaine peut être dangereuse dans certains cas comme détaillé dans #311724. Ceci n'est pas autorisé dans Debian.

Nous vous demandons donc expressément d'éviter d'utiliser DEB_AUTO_UPDATE_DEBIAN_CONTROL directement, et d'invoquer à la place la génération automatique des règles manuellement après avoir modifié « debian/control.in » (de cette manière, les utilisateurs ou les constructions n'auront pas de « Build-Depends » différents, évitant ainsi de nombreux problèmes). N'oubliez pas d'effectuer une relecture du résultat avant n'importe quel envoi.

Régénération manuelle de « debian/control » :

DEB_AUTO_UPDATE_DEBIAN_CONTROL=yes fakeroot debian/rules clean
						

Cette fonction permet :

  • à CDBS de gérer automatiquement certains « build-related Build-Depends »
  • l'utilisation de commandes shell intégrées.
  • l'utilisation de critères de CPU et de système pour préciser une architecture (EXPÉRIMENTAL)

« Build-related Build-Depends » sont des dépendances introduites avec l'utilisation de certaines fonctions CDBS, ou de besoins détectés automatiquement.

Les commandes shell intégrées permettent d'inclure des hacks comme :

Build-Depends: libgpm-dev [`type-handling any linux-gnu`]
					

Les critères CPU et Système implémentent la prise en charge pour les champs CPU/Système, pour remplacer le champ Architecture (qui doit être implémenté dans dpkg à terme, mais est toujours EXPÉRIMENTAL). Voici un exemple, avant :

Architecture: all
					

et après :

Cpu: all
System: all
					

Si ces champs sont utilisés, il également possible d'inclure des tags spéciaux pour facilement prendre avantage de l'outil « type-handling », comme dans cet exemple :

Build-Depends: @cdbs@, procps [system: linux], plop [cpu: s390]
					

(jetez un œil à la documentation du paquet « type-handling » pour de plus amples informations)

Voici la recette : 

  1. Renommez « debian/control » en « debian/control.in ».
  2. Remplacez cdbs / debhelper / ... Build-Depends avec @cdbs@ dans your « debian/control.in » comme ceci :

    Build-Depends-Indep: @cdbs@, python-dev (>= 2.3), python-soya (>= 0.9), \
       python-soya (<< 0.10), python-openal(>= 0.1.4-4), gettext
    						
  3. Ensuite (re)générez manuellement « debian/control » comme expliqué ci-dessus (référez-vous à l'avertissement).

Utilisation de la classe Makefile

Cette classe est destinée à ceux qui ont uniquement un fichier Makefile (aucun autotools disponible) pour construire le programme. Vous avez uniquement besoin de quatre règles dans le Makefile :

  • une pour nettoyer le répertoire de construction (c'est-à-dire « mrproper »)
  • une pour construire votre logiciel (c'est-à-dire « myprog »)
  • une pour vérifier que votre logiciel fonctionne correctement (c'est-à-dire « check »)
  • une pour installer votre logiciel (c'est-à-dire « install »)

Pour être honnête, la présence des règles d'installation n'est pas essentielle, mais cela aide toujours beaucoup lorsque vous les avez.

La première opération consiste à écrire le fichier « debian/rules ». Tout d'abord nous devons inclure les lignes :

include /usr/share/cdbs/1/class/makefile.mk
					

Maintenant, il reste à préciser à cdbs le nom de nos quatre règles Makefile. Pour l'exemple précédent cela nous donne :

DEB_MAKE_CLEAN_TARGET    := mrproper
# si vous détectez une perte de santé mentale de l'auteur, dit à CDBS de ne pas essayer
# de lancer la règle de nettoyage inexistante, et de faire le travail vous même dans « debian/rules »
DEB_MAKE_CLEAN_TARGET    :=
DEB_MAKE_BUILD_TARGET    := myprog
DEB_MAKE_INSTALL_TARGET  := install DESTDIR=$(CURDIR)/debian/tmp/
# aucune vérification pour ce logiciel
DEB_MAKE_CHECK_TARGET :=
					

DEB_BUILD_OPTIONS est vérifié pour les options suivantes :

  • noopt: utilise -O0 au lieu de -O2
  • nocheck: ignore la règle de vérification

Si votre Makefile ne prend pas en charge la variable DESTDIR, jetez-y un coup d'œil et localisez la variable responsable de la définition du répertoire d'installation. Si vous ne trouvez pas de variable correspondante pour le faire, vous devrez concevoir une rustine pour le fichier...

C'est tout :)

Utilisation de la classe Autotools

Cette classe est capable d'utiliser les scripts de configuration et les makefiles générés par les autotools (et éventuellement libtool). Toutes les règles sont appelées automatiquement et les règles de nettoyage pour enlever les fichiers générés durant la construction sont également ajoutées. Cette classe améliore en fait la classe makefile pour prendre en charge les fonctionnalités des autotools et fournit de bonnes valeurs par défaut.

Pour l'utiliser, ajoutez simplement cette ligne à votre « debian/rules » :

include /usr/share/cdbs/1/class/autotools.mk
					

CDBS gère automatiquement les indicateurs usuels à passer au script de configuration, mais il est possible de donner quelques paramètres supplémentaires :

DEB_CONFIGURE_EXTRA_FLAGS := --with-ipv6 --with-foo
					

Si le système de construction utilise des options de configurations non-standard vous pouvez outrepasser le comportment par défaut de CDBS :

COMMON_CONFIGURE_FLAGS := --program-dir=/usr
					

(notez que DEB_CONFIGURE_EXTRA_FLAGS sera toujours ajouté)

Si certaines variables d'environnement spécifiques ont besoin d'être définies, utilisez :

DEB_CONFIGURE_SCRIPT_ENV += LDFLAGS=" -Wl,-z,defs -Wl,-O1"
					

Avertissement

Préférez l'utilisation d'un += au lieu de := pour ne pas outrepasser les autres variables d'environnement (comme CC / CXX / ...) définies dans les valeurs par défaut de CDBS.

CDBS mettra automatiquement à jour « config.sub », « config.guess », et « config.rpath » avant la cobstruction et restaurera les anciens lors de la phase de nettoyage (même lors de l'utilisation du système tarball). Si besoin, et si la gestion de « debian/control » est activée, « autotools-dev » et/ou « gnulib » seront alors automatiquement ajoutés aux dépendances (nécessaires pour trouver des versions mises à jour des fichiers).

Si le programme n'utilise pas le répertoire racine des sources pour entreposer les fichiers autoconf, vous pouvez indiquer à CDBS où les trouver :

DEB_AC_AUX_DIR = $(DEB_SRCDIR)/autoconf
					

Il est possible de demander à CDBS de mettre à jour les fichiers libtool, autoconf, automake, mais ce comportement conduira vraisemblablement à casser le système de construction et est « ''FORTEMENT'' » déconseillé. Néanmoins, si vous souhaitez toujours utiliser cette fonction, définissez les variables suivantes :

  • DEB_AUTO_UPDATE_LIBTOOL
  • DEB_AUTO_UPDATE_AUTOCONF
  • DEB_AUTO_UPDATE_AUTOMAKE

(les dépendances de construction correspondantes seront ajoutées automatiquement)

Les paramètres make suivants peuvent être outrepassés :

# ce sont les valeurs par défaut que fournit CDBS
DEB_MAKE_INSTALL_TARGET := install DESTDIR=$(DEB_DESTDIR)
DEB_MAKE_CLEAN_TARGET := distclean
DEB_MAKE_CHECK_TARGET :=

# exemple de contournement pour les Makefile peu orthodoxes
DEB_MAKE_INSTALL_TARGET := install prefix=$(CURDIR)/debian/tmp/usr

# exemple d'une règle d'installation inexistante pour make
DEB_MAKE_INSTALL_TARGET :=

# exemple d'activation d'une règle de vérification
DEB_MAKE_CHECK_TARGET := check

# outrepassement des variables d'environnement de make-only ::
# (ne devrait jamais être nécessaire dans un système de construction propre)
# (exemple emprunté au paquet bioapi)
DEB_MAKE_ENVVARS    := "SKIPCONFIG=true"
					

DEB_BUILD_OPTIONS est vérifié pour les options suivantes :

  • noopt: utilise -O0 au lieu de -O2
  • nocheck: ignore la règle de vérification

Si vous utilisez la version < 0.4.39 de CDBS, celle-ci nettoie automatiquement les fichiers autotools générés durant la construction (« config.cache », « config.log », et « config.status »). Depuis la version 0.4.39, CDBS les laisse tous, considérant que ce n'est pas son travail de corriger un comportement incorrect du système de construction en amont (mais vous pouvez les enlever dans la règle « clean » si nécessaire, avant que ce problème ne soit résolu par les auteurs).

Utilisation de la classe Perl

Cette classe peut gérer la construction perl standard et la méthode d'installation avec MakaMaker.

Pour utiliser cette classe, ajoutez cette ligne à votre « debian/rules » :

include /usr/share/cdbs/1/class/perlmodule.mk
					

Optionnellement, il peut s'occuper de l'utilisation de dh_perl, selon que la classe debhelper soit déclarée avant la classe perl ou non.

Le chemin d'installation par défaut est « <first_pkg>/usr », où <first_pkg> est le premier paquet dans « debian/control ».

Vous pouvez personnaliser les options de construction comme ceci :

# modifications des valeurs par défaut de MakeMaker (ne devrait jamais être utile)
DEB_MAKE_BUILD_TARGET := build-all
DEB_MAKE_CLEAN_TARGET := realclean
DEB_MAKE_CHECK_TARGET :=
DEB_MAKE_INSTALL_TARGET := install PREFIX=debian/stuff

# ajout d'options personnalisées à MakeMaker
DEB_MAKEMAKER_USER_FLAGS := --with-ipv6
					

Les « makefile » usuels ou les options générales peuvent toujours être outrepassés : DEB_MAKE_ENVVARS, DEB_BUILDDIR (doivent correspondre à DEB_SRCDIR pour Perl)

Référez-vous aux options de debhelper spécifiques à Perl décrites ci-dessus.

Important

Si la gestion de « debian/control » est activée (voir ci-sessous), les dépendances de construction de « perl » seront automatiquement ajoutées, dans le cas contraire, vous devrez les ajouter vous même.

Utilisation de la classe Python

Cette classe permet de gérer la construction des paquets Python usuels en utilisant « distutils » automatiquement.

Cette classe est à la fois compatible avec l'ancienne et la nouvelle politique Python. Elle fournit pour celles-ci une interface similaire qui permet une migration facile à la nouvelle politique. La documentation pour l'ancienne politique est conservée pour permettre la compréhension des paquets provenant des versions pré-Etch, des backports, et des paquets non-officiels.

Nouvelle politique Python

Avec la nouvelle politique, toutes les paquets avec version (python<ver>-<app>) sont réunis en un paquet unique (python-<app>). Cette classe est capable de déplacer les scripts python et les fichiers .so dans les nouveaux emplacements automatiquement. Vous pouvez utiliser la fonction de génération de fichier de contrôle automatique pour vous assurer que vos « Build-Depends » sont correctement définis for les nouveaux outils nécessaires.

Pour utiliser cette classe, ajoutez cette ligne dans votre fichier « debian/rules » :

# sélection du système python que vous voulez utiliser : pysupport ou pycentral
# (ceci DOIT être effectué avant l'inclusion de la classe)
DEB_PYTHON_SYSTEM = pysupport
include /usr/share/cdbs/1/class/python-distutils.mk
						

Optionnellement, il peut s'occuper de l'utilisation de dh_python, et dh_pysupport ou dh_pycentraln, selon que la classe debhelper soit déclarée avant la classe python (ce qui est fortement recommandé).

Vous pouvez personnaliser les options de construction comme ceci :

############## Ces variables sont des ajouts pour la nouvelle politique

# paquet avec le contenu réuni de toutes les versions prises en charge
# CDBS pointe par défaut vers le premier paquet non -doc/-dev/-common listé dans « debian/control »
DEB_PYTHON_MODULE_PACKAGE = mypyapp

# liste des répertoires des modules privés (nécessaire pour prendre en charge automatiquement la « bytecompilation »)
DEB_PYTHON_PRIVATE_MODULES_DIRS = /usr/share/mypyapp/my-pv-module

############## Ces variables n'ont pas changé (identique dans l'ancienne et la nouvelle politique)

# modification du nom du script de construction Python (par défaut « setup.py »)
DEB_PYTHON_SETUP_CMD := install.py

# options de nettoyage pour le script de construction Python
DEB_PYTHON_CLEAN_ARGS = -all

# options de construction pour le script de construction Python
DEB_PYTHON_BUILD_ARGS = --build-base="$(DEB_BUILDDIR)/specific-build-dir"

# options d'installation additionnelles usuelles pour tous les paquets binaire
#   ('--root' option is always set)
DEB_PYTHON_INSTALL_ARGS_ALL = --no-compile --optimize --force

############## Ces variables sont devenues obsolètes dans la nouvelle politique

# Veuillez ne plus utiliser DEB_PYTHON_COMPILE_VERSION et DEB_PYTHON_VERSIONS
# dorénavant, ils ne sont plus utilisés par la classe.
						

Vous pouvez utiliser certaines variables en lecture seule (indiquant que vous NE DEVEZ PAS les modifier) dans votre « debian/rules » :

  • $(cdbs_python_support_path): chemin où est installée la partie « archall » du paquet sélectionné (défini uniquement pour la méthode python-support)
  • $(cdbs_python_module_arch): architecture des paquets sélectionnés (utilisé pour détecter s'il s'agit d'un module, donc « archall » , ou d'une extension)
  • $(cdbs_python_current_version): numéro de version actuelle de python (défini uniquement si le paquet sélectionné est un module)
  • $(cdbs_python_build_versions): liste séparée par des espace des numéros de version pour lesquels le module ou extension sélectionné va être construit.

Exemple complet de « debian/rules » utilisant python-support pour un module (editobj) :

#!/usr/bin/make -f
# -*- mode: makefile; coding: utf-8 -*-

include /usr/share/cdbs/1/rules/debhelper.mk
DEB_PYTHON_SYSTEM = pysupport
include /usr/share/cdbs/1/class/python-distutils.mk
include /usr/share/cdbs/1/rules/patchsys-quilt.mk


DEB_COMPRESS_EXCLUDE := .py


install/$(DEB_PYTHON_MODULE_PACKAGE)::
        mv debian/$(DEB_PYTHON_MODULE_PACKAGE)/usr/lib/python*/site-packages/editobj/icons \
                debian/$(DEB_PYTHON_MODULE_PACKAGE)/usr/share/$(DEB_PYTHON_MODULE_PACKAGE)
        rm -rf debian/$(DEB_PYTHON_MODULE_PACKAGE)/usr/lib

binary-install/$(DEB_PYTHON_MODULE_PACKAGE)::
        find debian/$(DEB_PYTHON_MODULE_PACKAGE)/usr/share/ -type f -exec chmod -R a-x {} \;
        echo "2.3-" >debian/$(DEB_PYTHON_MODULE_PACKAGE)/$(cdbs_python_support_path)/.version
						

Ancienne politique Python

Pour utiliser cette classe, ajoutez cette ligne à votre « debian/rules » :

include /usr/share/cdbs/1/class/python-distutils.mk
						

Optionnellement, il peut s'occuper de l'utilisation de dh_python, selon que la classe debhelper soit déclarée avant la classe python (ce qui est fortement recommandé).

La plupart des paquets Python sont compatibles avec toutes les architectures, et n'ont de ce fait pas besoin d'être construit pour de multiples versions de Python ; votre paquet devra donc être nommé « python-<foo> » et CDBS utilisera automatiquement la version actuelle du Python de Debian pour le construire. Si votre paquet contient une partie compilée ou une liaison vers une bibliothèque externe, vous aurez dans ce cas des paquets nommés « python2.3-<foo> », « python2.4-<foo> », et ainsi de suite, selon ${python:Depends} (et peut être d'autres paquets). CDBS construira alors chaque paquet avec la version de Python correspondante. Dans ce cas, n'oubliez pas d'ajoutez une paquet de convenance factice « python-<foo> » dépendant de la version actuelle du Python de Debian.

Vous pouvez personnaliser les options de construction comme ceci :

# force l'utilisation d'une version spécifique de Python pour la construction
# (ne devrait pas être nécessaire)
DEB_PYTHON_COMPILE_VERSION := 2.3

# modification du nom du script de construction Python (par défaut « setup.py »)
DEB_PYTHON_SETUP_CMD := install.py

# options de nettoyage pour le script de construction Python
DEB_PYTHON_CLEAN_ARGS = -all

# options de construction pour le script de construction Python
DEB_PYTHON_BUILD_ARGS = --build-base="$(DEB_BUILDDIR)/specific-build-dir"

# options d'installation additionnelles usuelles pour tous les paquets binaire
#   ('--root' option is always set)
DEB_PYTHON_INSTALL_ARGS_ALL = --no-compile --optimize --force

# options d'installation spécifiques pour le paquet binaire « foo »
#   ('--root' option is always set)
DEB_PYTHON_INSTALL_ARGS_foo := --root=debian/foo-install-dir/
						

Utilisation de la classe Ruby setup.rb

Cette classe peut gérer automatiquement les programmes d'installation setup.rb usuels.

Pour utiliser cette classe, ajoutez cette ligne à votre « debian/rules » :

include /usr/share/ruby-pkg-tools/1/class/ruby-setup-rb.mk
					

Optionnellement, il peut s'occuper de l'utilisation de dh_rdoc, pour générer et installer la documentation RDoc, selon que la classe debhelper soit déclarée avant la classe ruby setup.rb ou non.

La plupart des paquets ruby sont compatibles avec toutes les architectures, et n'ont de ce fait pas besoin d'être construit pour de multiples versions de ruby ; votre paquet devra donc être nommé « lib<foo>-ruby » ou « <foo> » et CDBS utilisera automatiquement la version actuelle du ruby de Debian pour le construire. Si votre paquet contient une partie compilée ou une liaison vers une bibliothèque externe, vous aurez dans ce cas des paquets nommés « lib<foo>-ruby1.6 », « lib<foo>-ruby1.8 », et ainsi de suite. CDBS construira alors chaque paquet avec la version de ruby correspondante. Dans ce cas, n'oubliez pas d'ajoutez une paquet de convenance factice « lib<foo>-ruby » dépendant de la version actuelle du ruby de Debian. Si vous avez une documentation que vous souhaitez séparer dans un autre paquet, nommez-la « lib<foo>-ruby-doc ». S'il s'agit d'une documentation Rdoc, vous pouvez si vous le souhaiter inclure la classe debhelper, comme expliqué précédement, pour qu'elle soit magiquement générée et installée.

Vous pouvez personnaliser les options de construction comme ceci :

# force l'utilisation d'une version spécifique de ruby pour la construction
# (ne devrait pas être nécessaire)
DEB_RUBY_VERSIONS := 1.9

# utilisation du parent
DEB_RUBY_SETUP_CMD := install.rb

# options de configuration pour le script de construction ruby build
# (si vieux setup.rb urilisé --site-ruby au lieu de --siteruby)
DEB_RUBY_CONFIG_ARGS = --site-ruby=/usr/lib/ruby/1.9-beta
					

Utilisation de la classe de l'équipe Debian Ruby Extras

Si vous appartenez à l'équipe Ruby Extras, ou que vous avez une équipe comme « uploaders », et que maintenir la liste des développeurs vous ennuie, cette classe est faite pour vous.

Pour utiliser cette classe, ajoutez cette ligne à votre « debian/rules » :

include /usr/share/ruby-pkg-tools/1/rules/uploaders.mk
					

Renommez votre fichier « debian/control » en « debian/control.in » et lancez la règle de nettoyage (./debian/rules clean) pour régénérer le fichier « debian/control », ce qui remplace automatiquement le tag « @RUBY_TEAM@ » avec la liste des développeurs.

Utilisation de la classe GNOME

Cette classe ajoutent une variable d'environnement make : GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL = 1 (Ceci est nécessaire car les schémas Gconf doivent être enregistrés au moment de l'installation. Dans le cas de l'empaquetage, cet enregistrement ne peut être effectué lors de la construction du paquet, donc cette variable désactive l'enregistrement du schéma dans le « make install ». Cette procédure est différée jusqu'à ce que gconftool-2 soit appelé par « debian/postinst » pour les enregistrer, et dans « debian/prerm » pour les désenregistrer. Le script dh_gconf est capable d'ajouter automatiquement les règles correctes pour vous.

Il peut magiquement prendre en charge les scripts dh_* suivant :

Tableau 4.1. Scripts Debhelper gérés par la classe GNOME

dh_desktopdh_gconfdh_scrollkeeper


De plus il ajoute certaines règles de nettoyage en plus pour enlever :

  • fichiers générés par intltool
  • fichiers générés par scrollkeeper (les fichiers « .omf.out » laissés dans les répertoires « doc » et « help »)

Pour l'utiliser, ajoutez simplement cette ligne à votre « debian/rules », après l'inclusion de la classe debhelper :

include /usr/share/cdbs/1/class/gnome.mk
					

Pour de plus amples informations sur les règles d'empaquetage spécifiques à GNOME, référez-vous à la Politique d'empaquetage Debian GNOME (en anglais).

Utilisation de la classe de l'équipe Debian GNOME

Si vous appartenez à l'équipe GNOME, ou si vous avez l'équipe comme « uploaders », et que maintenir la liste des développeurs vous ennuie, cette classe est faite pour vous.

Pour utiliser cette classe, ajoutez cette ligne à votre « debian/rules » :

include /usr/share/gnome-pkg-tools/1/rules/uploaders.mk
					

Renommez votre fichier « debian/control » en « debian/control.in », et lancez la règle de nettoyage (./debian/rules clean) pour régénérer le fichier « debian/control », ce qui remplace automatiquement le tag « @GNOME_TEAM@ » avec la liste des développeurs.

Avertissement

Si vous utilisez la gestion du fichier « debian/control » décrite ci-dessous, veuillez prendre en compte que cette classe outrepassera cette fonction. Pour résoudre ce problème, autorisant au moins la gestion de « Build-Depends », utilisez le contournement suivant (jusqu'à ce que ce soit résolu de manière correcte) :

# désactive la gestion du fichier « debian/control »
#DEB_AUTO_UPDATE_DEBIAN_CONTROL := yes

# ...
# inclusion et autres trucs
# ...

clean::
  sed -i "s/@cdbs@/$(CDBS_BUILD_DEPENDS)/g" debian/control
  # autres trucs de nettoyage
					

Utilisation de la classe KDE

Pour utiliser cette classe, ajoutez cette ligne à votre fichier « debian/rules » :

include /usr/share/cdbs/1/class/kde.mk
					

CDBS exporte automatiquement les variables suivantes avec la valeur correcte :

  • kde_cgidir (/usr/lib/cgi-bin)
  • kde_confdir (/etc/kde3)
  • kde_htmldir (/usr/share/doc/kde/HTML)

DEB_BUILDDIR, DEB_AC_AUX_DIR et DEB_CONFIGURE_INCLUDEDIR sont définis aux valeurs KDE par défaut.

Les fichiers suivants sont exclus de la compression :

  • .dcl
  • .docbook
  • -license
  • .tag
  • .sty
  • .el

(Occupez vous d'eux si vous outrepassez la variable DEB_COMPRESS_EXCLUDE)

Il peut gérer des options de configuration spécifiques à KDE (sans oublier de désactiver rpath et activer xinerama), définir correctement le répertoire autotools, et lancer les règles make de manière adéquate.

Vous pouvez activer la construction APIDOX en définissant la variable DEB_KDE_APIDOX à une valeur non nulle.

Vous pouvez activer la construction en mode final en définissant la variable DEB_KDE_ENABLE_FINAL à une valeur non nulle.

DEB_BUILD_OPTIONS est vérifié pour les options suivantes :

  • noopt: désactive les optimisations (et le mode final KDE, outrepassant DEB_KDE_ENABLE_FINAL)
  • nostrip: active le débogage KDE (et désactive le mode final KDE, outrepassant DEB_KDE_ENABLE_FINAL)

Vous pouvez préparer la construction en utilisant la cible de convenance « buildprep » : fakeroot debian/rules buildprep (qui appelle en fait la cible « dist » de « admin/Makefile.common »).

Utilisation de la classe Ant

(Ant est un outil de construction basé sur java)

Pour utiliser cette classe, ajoutez cette inclusion à votre « debian/rules » et définissez les variables suivantes :

include /usr/share/cdbs/1/class/ant.mk

# Définissez soit un unique (JAVA_HOME) ou de multiples (JAVA_HOME_DIRS) emplacements java
JAVA_HOME := /usr/lib/kaffe
# ou définissez JAVACMD si vous n'utilisez pas le chemin « <JAVA_HOME>/bin/java » par défaut
#JAVACMD := /usr/bin/java

# Définissez un emplacement Ant
ANT_HOME := /usr/share/ant-cvs
					

Vous pouvez ajouter des JARs supplémentaires comme dans l'exemple suivant :

# liste de fichiers JAR supplémentaires (l'extension « .jar » peut être omise)
#   (le chemin doit être absolu relativement à « /usr/share/java »)
DEB_JARS := /usr/lib/java-bonus/ldap-connector adml-adapter.jar
					

Le fichier de propriétés est par défault « debian/ant.properties ».

Vous pouvez fournir des arguments JVM supplémentaires en utilisant ANT_OPTS. Vous pouvez également fournir des arguments Ant additionnels en ligne de commande en utilisant ANT_ARGS (global) et/ou ANT_ARGS_<pkg> (pour le paquet <pkg>), et ainsi outrepasser les paramètres de « build.xml » et du fichier de propriétés.

CDBS construira et nettoiera en utilisant la cible par défaut de « build.xml ». Pour outrepasser ces règles, ou lancer les règles d'installation / vérification, définissez les variables suivantes selon vos besoins :

# outrepasse les cibles de construction et de nettoyage
DEB_ANT_BUILD_TARGET = makeitrule
DEB_ANT_CLEAN_TARGET = super-clean
# je veux installer et tester les règles à lancer
DEB_ANT_INSTALL_TARGET = install-all
DEB_ANT_CHECK_TARGET = check
					

DEB_BUILD_OPTIONS est vérifié pour les options suivantes :

  • noopt: définir l'option « compile.optimize » Ant à « false » (faux)

Vous devriez pouvoir obtenir plus d'informations sur ces outils de construction basées sur java sur le site web Ant Apache . (en anglais).

Utilisation de la classe HBuild

(HBuild est le mini-distutils Haskell)

CDBS peut s'occuper des paquets -hugs et -ghc : lancez « Setup.lhs » correctement pour la partie sur l'installation et le nettoyage.

Pour utiliser cette classe, ajoutez cette ligne à votre « debian/rules » :

include /usr/share/cdbs/1/class/hbuild.mk
					

Vous devriez pouvoir obtenir plus d'informations sur les distutils Haskell dans ce fil de discussion (en anglais).

Chapitre 5. Panthéon des exemples

Exemple de GNOME + autotools + patchsys simple

(exemple du paquet « gnome-panel »)

« debian/control.in » :

Source: gnome-panel
Section: gnome
Priority: optional
Maintainer: Marc Dequènes (Duck) <Duck@DuckCorp.org>
Uploaders: Sebastien Bacher <seb128@debian.org>, Arnaud Patard \
   <arnaud.patard@rtp-net.org>, @GNOME_TEAM@
Standards-Version: 3.6.1.1
Build-Depends: @cdbs@, liborbit2-dev (>= 2.10.2-1.1), intltool, gnome-pkg-tools, \
   libglade2-dev (>= 1:2.4.0), libwnck-dev (>= 2.8.1-3), scrollkeeper \
   (>= 0.3.14-9.1), libgnome-desktop-dev (>= 2.8.3-2), libpng3-dev, sharutils, \
   libbonobo2-dev (>= 2.8.0-3), libxmu-dev, autotools-dev, libedata-cal-dev \
   (>= 1.0.2-3)

Package: gnome-panel
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}, gnome-panel-data \
   (= ${Source-Version}), gnome-desktop-data (>= 2.8.1-2), gnome-session \
   (>= 2.8.1-4), gnome-control-center (>= 1:2.8.1-3)
Conflicts: gnome-panel2, quick-lounge-applet (<= 0.98-1), system-tray-applet, \
   metacity (<= 2.6.0), menu (<< 2.1.9-1)
Recommends: gnome-applets (>= 2.8.2-1)
Suggests: menu (>= 2.1.9-1), yelp, gnome2-user-guide, gnome-terminal | \
   x-terminal-emulator, gnome-system-tools
Description: launcher and docking facility for GNOME 2
 This package contains toolbar-like “panels” which can be attached to
 the sides of your X desktop, or left “floating”. It is designed to be
 used in conjunction with the Gnome Desktop Environment. Many features
 are provided for use with the panels – including an application menu,
 clock, mail checker, network monitor, quick launch icons and the like.

Package: libpanel-applet2-0
Section: libs
Architecture: any
Depends: ${shlibs:Depends}
Replaces: gnome-panel (<< 2.6.0-2)
Description: library for GNOME 2 panel applets
 This library is used by GNOME 2 panel applets.

Package: libpanel-applet2-dbg
Section: libdevel
Architecture: any
Depends: libpanel-applet2-0 (= ${Source-Version})
Description: library for GNOME 2 panel applets - library with debugging symbols
 This library is used by GNOME 2 panel applets.
 .
 This package contains unstripped shared libraries. It is provided primarily
 to provide a backtrace with names in a debugger, this makes it somewhat
 easier to interpret core dumps. The libraries are installed in
 /usr/lib/debug and can be used by placing that directory in
 LD_LIBRARY_PATH.
 Most people will not need this package.

Package: libpanel-applet2-dev
Section: libdevel
Architecture: any
Depends: libpanel-applet2-0 (= ${Source-Version}), libgnomeui-dev (>= 2.7.1-1)
Replaces: gnome-panel (<< 2.6.0-2), gnome-panel-data (<< 2.6.0)
Description: library for GNOME 2 panel applets - development files
 This packages provides the include files and static library for the GNOME 2
 panel applet library functions.

Package: libpanel-applet2-doc
Section: doc
Architecture: all
Suggests: doc-base
Replaces: libpanel-applet2-dev (<= 2.0.11-1)
Description: library for GNOME 2 panel applets - documentation files
 This packages provides the documentation files for the GNOME 2 panel applet
 library functions.

Package: gnome-panel-data
Section: gnome
Architecture: all
Depends: gnome-panel (= ${Source-Version}), scrollkeeper (>= 0.3.14-9.1), \
   ${misc:Depends}
Conflicts: gnome-panel-data2, gnome-core (<< 1.5)
Replaces: gnome-desktop-data (<= 2.2.2-1), gnome-panel (<< 2.6.0-2)
Description: common files for GNOME 2 panel
 This package includes some files that are needed by the GNOME 2 panel
 (Pixmaps, .desktop files and internationalization files).
					

« debian/rules » :

#!/usr/bin/make -f

# Gnome Team
include /usr/share/gnome-pkg-tools/1/rules/uploaders.mk

include /usr/share/cdbs/1/rules/debhelper.mk
# L'inclusion ce fichier nous donne un système de correctifs simple.  Vous pouvez simplement
# déposer les correctifs dans « debian/patches », et ils seront automatiquement
# appliqués et désappliqués.
include /usr/share/cdbs/1/rules/simple-patchsys.mk
# Inclure ceci nous donne un nombre de règles typique pour un programme
# GNOME, incluant la définition de GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL=1.
# Notez que cette classe hérite d'autotools.mk et de docbookxml.mk,
# donc vous n'avez pas esoin de les inclure.
include /usr/share/cdbs/1/class/gnome.mk

DEB_CONFIGURE_SCRIPT_ENV := LDFLAGS="-Wl,-z,defs -Wl,-O1"
DEB_CONFIGURE_EXTRA_FLAGS := --enable-eds

# debug lib
DEB_DH_STRIP_ARGS := --dbg-package=libpanel-applet-2

# tight versioning
DEB_NOREVISION_VERSION := $(shell dpkg-parsechangelog | egrep '^Version:' | \
   cut -f 2 -d ' ' | cut -f 1 -d '-')
DEB_DH_MAKESHLIBS_ARGS_libpanel-applet2-0 := -V"libpanel-applet2-0 \
   (>= $(DEB_NOREVISION_VERSION))"
DEB_SHLIBDEPS_LIBRARY_gnome-panel:= libpanel-applet2-0
DEB_SHLIBDEPS_INCLUDE_gnome-panel := debian/libpanel-applet2-0/usr/lib/


binary-install/gnome-panel::
        chmod a+x debian/gnome-panel/usr/lib/gnome-panel/*

binary-install/gnome-panel-data::
        chmod a+x debian/gnome-panel-data/etc/menu-methods/gnome-panel-data
        find debian/gnome-panel-data/usr/share -type f -exec chmod -R a-x {} \;

binary-install/libpanel-applet2-doc::
        find debian/libpanel-applet2-doc/usr/share/doc/libpanel-applet2-doc/ \
	-name ".arch-ids" -depth -exec rm -rf {} \;

clean::
        # L'équipe GNOME « uploaders.mk » ne devrait pas outrepasser ce comportement
        #   voici un contournement :
        sed -i "s/@cdbs@/$(CDBS_BUILD_DEPENDS)/g" debian/control
        # cleanup not done by buildsys
        -find . -name "Makefile" -exec rm -f {} \;

					

Exemple Python

(exemple de « python-dice », un paquet non-officiel de DC)

« debian/control.in » :

Source: python-dice
Section: python
Priority: optional
Maintainer: Marc Dequènes (Duck) <Duck@DuckCorp.org>
Standards-Version: 3.6.1.1
Build-Depends: @cdbs@, python2.3-dev, python2.4-dev, swig, libdice2-dev \
   (>= 0.6.2.fixed.1)

Package: python-dice
Architecture: all
Depends: python2.3-dice
Description: python bindings for dice rolling and simulation library
 PyDice is a python module for dice rolling and simulation (using fuzzy
 logic).
 .
 It provides a Python API to the libdice2 library.
 .
 This is a dummy package automatically selecting the current Debian
 python version.

Package: python2.3-dice
Architecture: any
Depends: ${python:Depends}
Description: python bindings for dice rolling and simulation library
 PyDice is a python module for dice rolling and simulation (using fuzzy
 logic).
 .
 It provides a Python API to the libdice2 library.

Package: python2.4-dice
Architecture: any
Depends: ${python:Depends}
Description: python 2.4 bindings for dice rolling and simulation library
 PyDice is a python module for dice rolling and simulation (using fuzzy
 logic).
 .
 It provides a Python 2.4 API to the libdice2 library.

					

« debian/rules » :

#!/usr/bin/make -f


include /usr/share/cdbs/1/rules/debhelper.mk
include /usr/share/cdbs/1/class/python-distutils.mk
					

Exemple Makefile + Dpatch

(exemple du paquet « apg »)

« debian/control.in » :

Source: apg
Section: admin
Priority: optional
Maintainer: Marc Haber <mh+debian-packages@zugschlus.de>
Build-Depends: @cdbs@
Standards-Version: 3.6.1

Package: apg
Architecture: any
Depends: ${shlibs:Depends}
Description: Automated Password Generator - Standalone version
 APG (Automated Password Generator) is the tool set for random
 password generation. It generates some random words of required type
 and prints them to standard output. This binary package contains only
 the standalone version of apg.
 Advantages:
  * Built-in ANSI X9.17 RNG (Random Number Generator)(CAST/SHA1)
  * Built-in password quality checking system (now it has support for Bloom
    filter for faster access)
  * Two Password Generation Algorithms:
     1. Pronounceable Password Generation Algorithm (according to NIST
        FIPS 181)
     2. Random Character Password Generation Algorithm with 35
        configurable modes of operation
  * Configurable password length parameters
  * Configurable amount of generated passwords
  * Ability to initialize RNG with user string
  * Support for /dev/random
  * Ability to crypt() generated passwords and print them as additional output.
  * Special parameters to use APG in script
  * Ability to log password generation requests for network version
  * Ability to control APG service access using tcpd
  * Ability to use password generation service from any type of box (Mac,
    WinXX, etc.) that connected to network
  * Ability to enforce remote users to use only allowed type of password
    generation
 The client/server version of apg has been deliberately omitted.
 .
 Upstream URL: http://www.adel.nursat.kz/apg/download.shtml
					

« debian/rules » :

#!/usr/bin/make -f


DEB_MAKE_CLEAN_TARGET    := clean
DEB_MAKE_BUILD_TARGET    := standalone
DEB_MAKE_INSTALL_TARGET  := install INSTALL_PREFIX=$(CURDIR)/debian/apg/usr

include /usr/share/cdbs/1/rules/debhelper.mk
include /usr/share/cdbs/1/rules/dpatch.mk
include /usr/share/cdbs/1/class/makefile.mk

cleanbuilddir/apg::
        rm -f build-stamp configure-stamp php.tar.gz

install/apg::
        mv $(CURDIR)/debian/apg/usr/bin/apg \
	   $(CURDIR)/debian/apg/usr/lib/apg/apg
        tar --create --gzip --file php.tar.gz --directory \
	   $(CURDIR)/php/apgonline/ .
        install -D --mode=0644 php.tar.gz \
	   $(CURDIR)/debian/apg/usr/share/doc/apg/php.tar.gz
        rm php.tar.gz
        install -D --mode=0755 $(CURDIR)/debian/apg.wrapper \
	   $(CURDIR)/debian/apg/usr/bin/apg
        install -D --mode=0644 $(CURDIR)/debian/apg.conf \
	   $(CURDIR)/debian/apg/etc/apg.conf
					

Exemple Perl

(exemple du paquet « libmidi-perl »)

« debian/control » :

Source: libmidi-perl
Section: interpreters
Priority: optional
Build-Depends: cdbs (>= 0.4.4), debhelper (>= 4.1.0), perl (>= 5.8.0-7)
Maintainer: Mario Lang <mlang@debian.org>
Standards-Version: 3.5.10

Package: libmidi-perl
Architecture: all
Depends: ${perl:Depends}
Description: read, compose, modify, and write MIDI files in Perl
 This suite of Perl modules provides routines for reading, composing,
 modifying, and writing MIDI files.

					

« debian/rules » :

#!/usr/bin/make -f

include /usr/share/cdbs/1/rules/debhelper.mk
include /usr/share/cdbs/1/class/perlmodule.mk

					

Chapitre 6. Outils utiles

cdbs-edit-patch (fourni avec CDBS)

Ce script a pour but d'aider les personnes fainéantes à éditer ou créer des rustines facilement.

Lancez ce script avec le nom de la rustine en argument, et vous vous retrouverez dans une copie de votre répertoire de travail à l'intérieur d'un sous-shell dans lequel vous pouvez éditer les sources. Quand votre travail est terminé et que vous êtes satisfait de vos changements, sortez tout simplement du sous-shell et vous serez de retour dans le monde normal avec « debian/patches/<patch_name>.patch » créé ou modifié en conséquence. Le script s'occupe d'appliquer les rustines précédentes (il est nécessaire d'avoir des rustines ordonnées !), génère une différence incrémentale pour récupérer uniquement les modifications désirées. Si vous voulez annuler la création / modification de la rustine, vous n'avez qu'à quitter le sous-shell avec un code de retour non nul et la différence ne sera pas générée (seul le ménage sera fait).

Chapitre 7. Conclusion

CDBS résoud la plupart des problème et est très plaisant à utiliser. De plus en plus de DD l'utilisent, non pas parce qu'ils y sont obligé, mais parce qu'ils l'ont gouté et ont trouvé qu'ils pouvaient améliorer leurs paquets et éviter de perdre du temps à concevoir des règles idiotes et complexes.

CDBS n'est pas parfait, son entrée dans le BTS n'est pas toute nette, mais corriger un unique bug corrige assez souvent un problème pour plein d'autres paquets. CDBS n'est pas encore capable de gérer des situations très compliquées (comme des paquets avec différentes compilations C/C++ où des options et/ou des rustines sont necéssaires), mais cela n'affecte qu'un très petit nombre de paquets. Ces limitations seront solutionnées dans CDBS2, dont la conception est en cours (contactez Jeff Bailey si vous souhaitez aider).

Utiliser CDBS plus largement améliorerait la qualité globale de Debian. N'hésitez pas à l'essayer, à en parler à vos amis, et à contribuer.

Bon amusement avec CDBS !!! :-)

Merci

Merci à Jeff pour sa patience et avoir répondu à tant de questions.

Un merci spécial à GuiHome pour son aide pour relire cette documentation.

Ce document est une application DocBook, vérifiée avec xmllint (de libxml2), produit en utilisant xsltproc (de libxslt), en utilisant les feuilles de style XLST de N. Walsh et DB2LaTeX, et converti avec des outils LaTeX (latex, mkindex, pdflatex & dvips) / pstotext (avec GS).