Sie können auf Quelltext treffen, welcher Modifizierungen oder bedingtes Kompilieren, abhängig davon, unter welcher Unix-Version er läuft, benötigt. Falls Sie Änderungen an solch einem Quelltext vornehmen müssen, stellen Sie bitte sicher, dass Sie Ihre Änderungen so allgemein wie möglich halten, damit wir den Quelltext auf ältere FreeBSD-Systeme portieren und zur Quer-Portierung auf andere BSD-Systeme, wie etwa 4.4BSD von CSRG, BSD/386, 386BSD, NetBSD und OpenBSD verwenden können.
Der bevorzugte Weg, um 4.3BSD/Reno (1990) und neuere
Versionen des BSD-Quelltextes zu unterscheiden, ist das
BSD
-Makro zu nutzen, welches in sys/param.h
definiert ist. Hoffentlich ist diese Datei schon
enthalten – falls nicht, so fügen Sie
folgenden Quelltext:
#if (defined(__unix__) || defined(unix)) && !defined(USG) #include <sys/param.h> #endif
an der richtigen Stelle in der .c
Datei hinzu. Wir glauben, dass jedes System, welches diese
beiden Symbole definiert, die Datei
sys/param.h
besitzt. Wenn Sie auf
Systeme stoßen, wo dies nicht so ist, würden wir
gerne davon erfahren. Bitte senden Sie eine E-Mail an
FreeBSD ports.
Eine andere Möglichkeit zur Unterscheidung ist der GNU Autoconf-Stil:
#ifdef HAVE_SYS_PARAM_H #include <sys/param.h> #endif
Vergessen Sie nicht
-DHAVE_SYS_PARAM_H
zu den
CFLAGS
im Makefile
hinzuzufügen, falls Sie diese Methode benutzen
sollten.
Sobald Sie sys/param.h
hinzugefügt haben, können Sie mit Hilfe von
#if (defined(BSD) && (BSD >= 199103))
unterscheiden, ob der Quelltext auf einer 4.3 Net2 Code-Basis oder neuer (z.B. FreeBSD 1.x, 4.3/Reno, NetBSD 0.9, 386BSD, BSD/386 1.1 und niedriger) kompiliert werden wird.
Benutzen Sie:
#if (defined(BSD) && (BSD >= 199306))
um zu differenzieren, ob der Quelltext auf der Basis von 4.4 Code oder neuer (z.B. FreeBSD 2.x, 4.4, NetBSD 1.0, BSD/386 2.0 oder höher) kompiliert werden wird.
Der Wert des BSD
-Makros ist
199506
für die 4.4BSD-Lite2 Codebasis.
Beachten Sie bitte, dass dies hier nur der Information wegen
angegeben ist. Das Makro sollte nicht dazu benutzt werden, um
zwischen Versionen von FreeBSD, welche auf 4.4-Lite basieren,
und Versionen, welche Änderungen von 4.4-Lite2
übernommen haben, zu unterscheiden. Das
__FreeBSD__
Makro sollte stattdessen
verwandt werden.
Sparsam sollte eingesetzt werden:
__FreeBSD__
ist in allen Versionen
von FreeBSD definiert. Benutzen Sie dieses Makro, falls
die Änderung(en), die Sie machen,
nur FreeBSD betrifft.
Portierungsfallen, wie der Gebrauch von
sys_errlist[]
gegenüber
strerror()
sind Berkeley-Eigenheiten,
keine FreeBSD Änderungen.
In FreeBSD 2.x, ist __FreeBSD__
auf 2
definiert. In älteren
Versionen, ist es 1
. Alle späteren
Versionen erhöhen es, damit es mit der
Haupt-Versionsnummer übereinstimmt.
Falls Sie zwischen einem FreeBSD 1.x und einem
FreeBSD 2.x (oder höher) System unterscheiden
müssen, ist es normalerweise richtig, die
BSD
-Makros (wie oben beschrieben) zu
benutzen. Gibt es tatsächlich eine
FreeBSD-spezifische Änderung (wie z.B. spezielle
Optionen von Shared-Libraries für
ld
), ist es nicht zu beanstanden
__FreeBSD__
und #if
__FreeBSD__ > 1
zu nutzen, um FreeBSD 2.x und
spätere Systeme zu erkennen. Falls Sie eine
höhere Genauigkeit benötigen, um FreeBSD Systeme
seit 2.0-RELEASE zu erkennen, können Sie folgendes
nutzen:
#if __FreeBSD__ >= 2 #include <osreldate.h> # if __FreeBSD_version >= 199504 /* 2.0.5+ release specific code here */ # endif #endif
In den Tausenden von Ports, die bis jetzt erstellt
wurden, gab es nur ein oder zwei Fälle, in denen
__FreeBSD__
hätte benutzt werden
sollen. Nur weil ein früherer Port es an der falschen
Stelle benutzt hatte, bedeutet das nicht, dass Sie dies auch
machen sollten.
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>.