Вы можете встретиться с кодом, который требует модификаций или условной компиляции в зависимости от того, с какой версией Unix он работает. Если вам нужно сделать такие изменения в коде для условной компиляции, то вы должны делать изменения как можно более общими, чтобы мы могли перенести код на более старые системы FreeBSD, а также и на другие системы BSD, такие, как 4.4BSD от CSRG, BSD/386, 386BSD, NetBSD, и OpenBSD.
Предпочтительным способом отделения кода для 4.3BSD/Reno (1990) и
и более новых версий BSD является использование макроса
BSD
, определенного в файле sys/param.h.
Хорошо, если этот файл уже
включен; если это не так, то добавьте такой код:
в соответствующем месте файла .c
. Мы
надеемся, что все системы, в которых определены эти две константы,
имеют файл sys/param.h
. Если вы обнаружите
систему, в которой это не так, мы хотим знать. Пошлите, пожалуйста,
письмо на адрес Список рассылки, посвящённый Портам FreeBSD.
Другим способом является использование для этого стиля GNU Autoconf:
Не забудьте добавить -DHAVE_SYS_PARAM_H
к
CFLAGS
в файле Makefile
при использовании этого метода.
Как только вы включите sys/param.h
, то
сможете воспользоваться следующим:
для определения того, компилируется ли программа на основе кода Net2 версии 4.3 или более новой версии (например, FreeBSD 1.x, 4.3/Reno, NetBSD 0.9, 386BSD, BSD/386 1.1 и ниже).
Используйте:
для определения того, компилируется ли программа на основе кода 4.4 или более новой (например, FreeBSD 2.x, 4.4, NetBSD 1.0, BSD/386 2.0 и выше).
Значение макроса BSD
равно
199506
для кода на основе 4.4BSD-Lite2. Оно
задано только для информационной целей. Оно не должно использоваться
для различия между версиями FreeBSD, основанными на коде 4.4-Lite
и версиями, в которые включены изменения из 4.4-Lite2. Вместо этого
нужно использовать макрос __FreeBSD__
.
Реже используйте:
__FreeBSD__
определён во всех версиях
FreeBSD. Используйте его, если изменение, вносимое вами,
касается только FreeBSD. Проблемы
портирования, такие, как использование
sys_errlist[]
или
strerror()
являются особенностями систем
BSD, а не FreeBSD.
Во FreeBSD 2.x, значение __FreeBSD__
определено как 2
. В более ранних версиях оно
равно 1
. В более поздних версиях это значение
всегда увеличивается в соответствии со старшим номером версии
системы.
Если вам нужно отделить системы FreeBSD 1.x от систем FreeBSD
2.x и более старших, правильным способом, как правило, будет
использование макроса BSD
, описанное выше.
Если это действительно изменение, специфичное для FreeBSD
(например, особая опция для динамической библиотеки при
использовании ld
), то для распознавания
систем FreeBSD 2.x и более поздних нормальным будет использование
__FreeBSD__
и
#if __FreeBSD__ > 1
. Если вам нужно более
точное определение версий FreeBSD, начиная с 2.0-RELEASE, то
вы можете использовать следующее:
Из сотен уже сделанных портов только в одном или двух случаях
потребовалось использование __FreeBSD__
. Если
старые порты использовали этот макрос не по назначению, вовсе не
значит, что вам нужно поступать точно также.
Этот, и другие документы, могут быть скачаны с http://ftp.FreeBSD.org/pub/FreeBSD/doc/.
По вопросам, связанным с FreeBSD, прочитайте
документацию прежде чем писать в
<questions@FreeBSD.org>.
По вопросам, связанным с этой документацией, пишите в рассылку
<doc@FreeBSD.org>.