Das FreeBSD Porter-Handbuch
Zurück | Kapitel 12. Was man machen respektive vermeiden sollte | Weiter

# 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:

- `__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.

Zurück | Zum Anfang | Weiter
`WRKDIRPREFIX` | Nach oben | __FreeBSD_version Werte

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