Bei der Vorbereitung eines Ports können die Dateien,
die hinzugefügt oder verändert wurden, mittels
diff(1) abgefangen werden, um Sie später an
patch(1) zu übergeben. Jeder Patch, der dem
Quelltext übergeben werden soll, sollte in einer Datei
patch-
abgelegt werden, wobei *
*
dem
Pfadnamen der zu korrigierenden Datei entspricht, wie er auch
in patch-Imakefile
oder im
patch-src-config.h
erscheint. Diese
Dateien sollten in PATCHDIR
(normalerweise
files
) abgelegt sein, von wo sie
automatisch übernommen werden. Alle Patches müssen
sich relativ zur WRKSRC
-Variable
(normalerweise dem Verzeichnis, in dem sich der Quelltext des
Ports entpackt und wo auch der Bau stattfindet)
befinden.
Um Korrekturen und Updates zu vereinfachen, sollte es
vermieden werden, mehr als einen Patch für eine Datei zu
nutzen (z.B. patch-file
und
patch-file2
, welche beide
verändern). Beachten Sie, dass, falls der Pfad einer zu
korrigierenden Datei einen Unterstrich (WRKSRC
/foobar.c_
)
enthält, der Patch stattdessen zwei Unterstriche im Namen
haben muss. Zum Beispiel muss der Patch, der eine Datei namens
src/freeglut_joystick.c
korrigieren soll,
patch-src-freeglut__joystick.c
genannt
werden.
Für die Benennung der Patches sollten nur die Zeichen
[-+._a-zA-Z0-9]
genutzt werden. Bitte
verwenden Sie keine weiteren Zeichen als die angegebenen. Die
Namensvergabe sollte nicht patch-aa
oder
patch-ab
etc. entsprechen, erwähnen
Sie immer den Pfad und Dateinamen.
RCS-Zeichenketten sollten vermieden werden, da CVS diese
verstümmeln würde, sobald wir diese Dateien in die
Ports-Sammlung einpflegen. Wenn wir die Dateien wieder abrufen
wären diese verändert und der Patch würde
fehlschlagen. RCS-Zeichenketten sind in Dollar-Zeichen
($
) eingefügte Zeichen und
beginnen üblicherweise mit $Id
oder $RCS
.
Die Option rekursiv (-r
) zu nutzen
diff(1), um Patches zu erstellen, ist zulässig,
jedoch sollte der Patch anschließend geprüft
werden, um Unnötiges aus dem Patch zu entfernen. Im
Einzelnen bedeutet dies, dass Diffs zwischen zwei
Backup-Dateien, Makefile
s oder wenn der
Port Imake
oder GNU
configure
usw. nutzt, überflüssig
sind und entfernt werden sollten. Falls es es notwendig war,
configure.in
zu bearbeiten und es soll
autoconf
zum Neuerstellen von
configure
genutzt werden, sollten die Diffs
aus configure
nicht genutzt werden (diese
werden oft einige tausend Zeilen
groß!); – hier sollte
USE_AUTOTOOLS=autoconf:261
definiert und
das Diff aus configure.in
genutzt
werden.
Zusätzlich sollte man unnötige Markup-Änderungen in Patches/Änderungen möglichst vermeiden. In der Open Source-Welt teilen sich Projekte häufig große Teile des Quellcodes. Allerdings verwenden die einzelnen Projekte oft unterschiedliche Programmierstile und Vorgaben für Einrückungen. Wenn man also einen funktionierenden Teil einer Funktion aus einem Projekt verwendet, um ein ähnliches Problem in einem anderen Projekt zu lösen, sollte man besonders vorsichtig sein, weil sich ansonsten die CVS-Änderungseinträge mit überflüssigen Einträgen füllen, die nur das Markup des Quellcodes betreffen, ohne dass sich an der Funktion des eigentlichen Quellcode etwas ändert („withspace-only changes“). Solche Änderungen vergrößern nicht nur das CVS-Repository, sondern erschweren es auch die Ursache für eventuell auftretende Probleme zu finden.
War es notwendig eine Datei zu entfernen, wird dies besser
mittels des post-extract
-Targets als
über den Patch selbst realisiert.
Ein einfacher Austausch kann direkt über das
Makefile
des Ports umgesetzt werden,
indem der in-place-Modus von sed(1) genutzt wird. Dies
ist sehr hilfreich, wenn variable Werte korrigiert werden
sollen. Beispiel:
Relativ häufig ergibt sich die Situation, in der die
portierte Software die CR/LF-Konventionen für Zeilenenden
nutzt (dies ist bei unter Windows® entwickelter Software
häufig der Fall). Dies kann bei weiteren Patches Probleme
(Compiler-Warnungen, Fehlermeldungen bei der Ausführung
von Skripten wie z.B. /bin/sh^M
not found)
und anderes ergeben. Um schnell alle Dateien von CR/LF
nach LF zu konvertieren, kann
USE_DOS2UNIX=yes
in das
Makefile
des Ports geschrieben werden.
Hierzu kann eine Liste der zu konvertierenden Dateien erstellt
werden:
Sollen Gruppen von Dateien über verschiedene
Unterverzeichnisse konvertiert werden, kann
DOS2UNIX_REGEX
genutzt werden, dessen
Argumente find
-kompatible, reguläre
Ausdrücke sind. Mehr zur Formatierung findet sich in
re_format(7). Diese Option ist beim Konvertieren aller
Dateien mit definierter Endung, z.B. aller Dateien im
Quellcode, wobei binäre Dateien unberührt bleiben,
sinnvoll:
Wenn Sie einen Patch zu einer bereits existierenden Datei
erstellen wollen, können Sie von ihr eine Kopie mit der
Endung .orig
erstellen und
anschließend die Originaldatei bearbeiten. Das make-Ziel
makepatch
führt dann zu
einer entsprechenden Patch-Datei im Verzeichnis files
des Ports.
Wenn Sie Fragen zu FreeBSD haben, schicken Sie eine E-Mail an
<de-bsd-questions@de.FreeBSD.org>.
Wenn Sie Fragen zu dieser Dokumentation haben, schicken Sie eine E-Mail an
<de-bsd-translators@de.FreeBSD.org>.