svn-buildpackage mit nativen Paketen verwenden

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)

Kompilierte native Pakete

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.


Native Pakete, die keine automatischen Werkzeuge verwenden

Die Eigenschaft useNativeDist

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).