12.4. Unterschiedliche Betriebssysteme und Betriebssystemversionen

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:

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.


Fragen zum FreeBSD Ports-System richten Sie bitte an <ports@FreeBSD.org>, Fragen zu diesem Dokument hingegen an <de-bsd-translators@de.FreeBSD.org>.