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)
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'une archive source 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
.
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. Utilisation de la 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é).