Utilisation de svn-buildpackage avec les paquets natifs

Un paquet natif est conçu pour fonctionner sur Debian plutôt que sur les distributions GNU/Linux en général, la plupart dépendent directement du comportement spécifique de Debian ou d'autres outils natifs. svn-buildpackage fait partie des paquets natifs.

Avec un paquet natif, le contenu du répertoire debian/ fait partie de l'archive source (avec une extension .tar.gz au lieu de .orig.tar.gz) et aucun .diff.gz n'est créé.

L'indicateur le plus significatif pour un paquet natif est son numéro de version Debian. Un paquet amont utilise :

 truc (0.1.2-3)

Un paquet natif utilise :

 truc (0.1.2)

Paquets natifs compilés

Certains paquets natifs sont compilés à partir du code source, et beaucoup d'entre-eux utilisent les Autotools tels que ./configure, autoreconf et make dist. De tels paquets peuvent utiliser la prise en charge d'Autotools pour créer un GNU typique, ou une archive « à la Autotools » avec la prise en charge d'EXTRA_DIST et règles similaires dans Makefile.am. Les responsables ne sont dans ce cas pas obligés de conserver les fichiers générés (configure, aclocal.m4, ltmain.sh et libtool) dans le dépôt Subversion. Avec cette prise en charge, le paquet peut contrôler directement quels fichiers font partie du paquet source natif.

Pour construire des paquets avec svn-buildpackage, mergeWithUpstream peut même être utilisé si la version Debian indique un paquet natif. L'archive source amont est celle créée par la cible make dist et le responsable peut choisir la façon de rendre l'archive disponible à svn-buildpackage :

Exemple 3.4. utilisation d'une archive source native et de mergeWithUpstream

Makefile.am

all-local: Makefile
	ln -sf $(PACKAGE)-$(VERSION).tar.gz $(PACKAGE)_$(VERSION).orig.tar.gz

(Oui, c'est un artifice d'utiliser mergeWithUpstream. .orig.tar.gz n'est pas vraiment utilisé : la version Debian l'emporte sur la propriété de fusion.)


Propriétés de SVN :

$ svn proplist ./debian/
Propriétés sur 'debian':
  mergeWithUpstream

Exemple 3.5. sortie en utilisant mergeWithUpstream dans un paquet natif

L'archive source générée par make dist est trouvée avec la propriété origDir, dans cet exemple, configuré au répertoire de plus haut niveau du paquet où make dist devrait normalement le créer et où les liens symboliques sont également créés, comme précédemment.

Sortie de svn-buildpackage :

(en utilisant le paquet langupdate en exemple)

$ svn-buildpackage -us -uc
	origDir: ./
Information d'agencement complète:
	buildArea=/opt/working/emdebian/host/trunk/langupdate/build-area
	origDir=./
	tagsDir=/opt/working/emdebian/host/trunk/langupdate/tags
	tagsUrl=svn+ssh://codehelp@buildd.emdebian.org/var/emdebian/svn/current/host/trunk/langupdate/tags
	trunkDir=/opt/working/emdebian/host/trunk/langupdate/trunk
	trunkUrl=svn+ssh://codehelp@buildd.emdebian.org/var/emdebian/svn/current/host/trunk/langupdate/trunk
mode mergeWithUpstream detecté, recherche de .//langupdate_0.1.1.orig.tar.gz
I : la propriété mergeWithUpstream est définie, recherche d'un tarball source en amont...
 tar --no-same-owner --no-same-permissions --extract --gzip --file /opt/working/emdebian/host/trunk/langupdate/trunk/langupdate-0.1.1.tar.gz --directory <1 more argument>
 mv /opt/working/emdebian/host/trunk/langupdate/build-area/tmp-0.15173904069616/langupdate-0.1.1 /opt/working/emdebian/host/trunk/langupdate/build-area/langupdate-0.1.1
svn --force export /opt/working/emdebian/host/trunk/langupdate/trunk /opt/working/emdebian/host/trunk/langupdate/build-area/langupdate-0.1.1
Fin d'exportation.

Remarquez comment l'archive source (créée par make dist et trouvée par mergeWithUpstream grâce au lien symbolique) est dépaquetée puis l'exportation SVN est appliquée à la racine. Cela permet aux responsables d'essayer des modifications locales en utilisant --svn-ignore.


Paquet natifs n'utilisant pas les Autotools

Utilisation de la propriété useNativeDist

Quand make dist n'est pas disponible, il existe encore des cas où les fichiers créés doivent être intégrés à l'archive source du paquet natif. svn-buildpackage prend en compte la propriété SVN useNativeDist (appliquée au répertoire ./debian/) permettant l'exécution de cibles make native-dist personnalisées immédiatement après la fin de l'exportation.

Exemple 3.6. propriété useNativeDist

svn-buildpackage utilise cette fonctionnalité pour intégrer le fichier POT pour aider les traducteurs. La règle personnalisée de make doit être définie dans le Makefile de plus haut niveau :

# ajoute le fichier POT à l'archive source
native-dist: Makefile
	po4a-build --pot-only

La cible native-dist doit être idempotente et capable de s'exécuter directement à partir de l'exportation SVN. Toute modification réalisée pendant l'exécution de la cible sera directement reflété dans l'archive source. Aucun fichier enlevé ne doit empêcher le paquet d'être construit comme un paquet Debian normal, en utilisant seulement le paquet source résultant (ce peut être vérifié par exemple en allant (cd) dans le répertoire build-area, en dépaquetant le .dsc avec dpkg-source -x, et en reconstruisant le paquet avant d'enlever le répertoire d'essai).

Le résultat immédiat est que l'archive source résultant intègre le po/svn-buildpackage.pot créé par make native-dist sans avoir besoin d'ajouter le fichier POT au dépôt (obligeant des propagations à répétition à chaque fois que l'horodatage du fichier POT est modifié).