Ein natives Paket wurde eher entworfen, um mit Debian, als mit allgemeinen GNU/Linux-Distributionen zu funktionieren. Vieles hängt direkt vom speziellen Debian-Verhalten oder anderen nativen Debian-Werkzeugen ab. svn-buildpackage ist ein derartiges natives Paket.
Bei einem nativen Paket ist der Inhalt des
debian/
-Verzeichnisses im Quell-Tarball enthalten (er
hat eine einfache .tar.gz
-Endung, nicht die Endung
.orig.tar.gz
) und es wird kein
.diff.gz
generiert.
Das Hauptkennzeichen für ein natives Paket ist die Debian-Versionszeichenkette. Ein Ursprungspaket nutzt:
foo (0.1.2-3)
Ein natives Paket verwendet:
foo (0.1.2)
Einige native Pakete sind aus dem Quellcode kompiliert und viele dieser
Pakete benutzen automatische Werkzeuge wie ./configure
,
autoreconf und make dist. Derartige
Pakete können die Unterstützung der automatischen Werkzeuge benutzen, um
einen Tarball im typischen GNU-Stil oder im Stil der automatischen Werkzeuge
zu erzeugen mit Unterstützung für EXTRA_DIST und
ähnliche Regeln in Makefile.am
. Dadurch müssen
Paketbetreuer erzeugte Dateien (configure
,
aclocal.m4
, ltmain.sh
und
libtool
) nicht im Subversion-Depot aufzubewahren. Mit
dieser Unterstützung kann das Paket direkt steuern, welche Dateien in der
Quelle des nativen Pakets enthalten sein sollen.
Um solche Pakete mit svn-buildpackage zu bauen, kann mergeWithUpstream sogar dann verwendet werden, wenn die Debian-Versionszeichenkette ein natives Paket anzeigt. Der Ursprungs-Tarball ist der, der durch das Ziel make dist erzeugt wird, und der Paketbetreuer kann auswählen, wie er diesen Tarball für svn-buildpackage verfügbar macht:
Beispiel 3.4. Einen nativen Tarball und mergeWithUpstream verwenden
Makefile.am
all-local: Makefile ln -sf $(PAKET)-$(VERSION).tar.gz $(PAKET)_$(VERSION).orig.tar.gz
(Ja, dies ist ein Artefakt der Benutzung von mergeWithUpstream. Die
.orig.tar.gz
wird nicht wirklich verwendet – die
Debian-Versionszeichenkette überschreibt die Eigenschaft zum
Zusammenführen.)
SVN-Eigenschaften:
$ svn proplist ./debian/ Properties on 'debian': mergeWithUpstream
Beispiel 3.5. Ausgabe der Benutzung von mergeWithUpstream innerhalb eines nativen Pakets
Der durch make dist erzeugte Tarball wird über die Eigenschaft origDir geortet, in diesem Beispiel ist sie auf die oberste Verzeichnisebene des Pakets gesetzt, auf dem es make dist normalerweise erstellen würde und wo außerdem wie oben der symbolische Verweis erzeugt würde.
Ausgabe von svn-buildpackage:
(als Beispielpaket wird »langupdate« verwendet)
$ svn-buildpackage -us -uc origDir: ./ Vollständige Layout-Information: 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 Modus »mergeWithUpstream« bemerkt, es wird nach .//langupdate_0.1.1.orig.tar.gz gesucht I: Eigenschaft »mergeWithUpstream« gesetzt, es wird nach dem Ursprungsquellcode-Tarball gesucht … 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 Export abgeschlossen.
Beachten Sie, wie der Tarball (der von make dist erstellt
und durch mergeWithUpstream aufgrund des symbolischen
Verweises von mergeWithUpstream gefunden wird) entpackt
und dann das exportierte SVN zuoberst angewandt wird. Dies ermöglicht es
Paketbetreuern, lokale Änderungen mittels --svn-ignore
zu
testen.
Wenn make dist nicht verfügbar ist, gibt es immer noch
Situationen, in denen erzeugte Dateien in den Quell-Tarball des nativen
Pakets einfließen sollen. svn-buildpackage unterstützt
die SVN-Eigenschaft useNativeDist (die auf das
Verzeichnis ./debian/
angewandt wird). Sie ermöglicht,
dass ein vom Benutzer angepasstes make native-dist-Ziel
unmittelbar nach dem SVN-Export ausgeführt wird.
Beispiel 3.6. Die Eigenschaft useNativeDist
svn-buildpackage benutzt diese Funktionalität, zum
Beizufügen der POT-Datei, um Übersetzern zu helfen. Die vom Benutzer
angepasste make-Regel muss im
Makefile
auf der obersten Ebene definiert werden:
# fügt dem Tarball die POT-Datei hinzu native-dist: Makefile po4a-build --pot-only
Das Ziel native-dist muss idempotent und in der Lage
sein, direkt vom SVN-Export ausgeführt zu werden. Alle Änderungen, die durch
die Ausführung des Ziels vorgenommen werden, werden direkt in den Tarball
zurückgeworfen. Stellen Sie sicher, dass keine Dateien entfernt werden. Dies
würde verhindern, dass das Paket als normales Debian-Paket nur mittels des
resultierenden Quell-Pakets gebaut wird (z.B. cd nach
build-area
, Entpacken der
.dsc
-Datei mit dpkg-source -x und
erneutes Bauen des Pakets, dann Entfernen des Testverzeichnisses).
Das reine Ergebnis ist, dass der resultierende Tarball die vom Ziel
make native-dist erzeugte Datei
po/svn-buildpackage.pot
enthält, ohne, dass es nötig
wäre, die erzeugte POT-Datei dem SVN hinzuzufügen (und wiederholte Commits
jedesmal, wenn sich der Zeitstempel der POT-Datei ändert).