第 12 章 该做什么和不该做什么

This translation may be out of date. To help with the translations please access the FreeBSD translations instance.

12.1. 介绍

这里是一些在移植软件时可能会遇到的常见问题。 您应按照这个列表检查自己的 port, 同样地, 您也可以帮助检查 PR 数据库 中由其它人提交的 port。 请按照在 问题报告和一般性注释 中介绍的方法提交您的看法。 帮助检查 PR 数据库中的 ports 即能够帮助我们更快地 commit 它们, 也能证明您清楚地了解如何完成这些工作。

12.2. WRKDIR (联编时使用的临时目录)

任何时候都不要在 WRKDIR 以外的位置写文件。 WRKDIR 是在 port 联编过程中唯一的一处一定可写的地方 (参见 如何从 CDROM 安装 port 以了解从只读的目录中联编和安装 port 的例子)。 如果您需要改变 pkg-* 文件, 请按照 重新定义某个变量 介绍的方法, 而不是覆盖它们来实现。

12.3. WRKDIRPREFIX (用于联编的临时目录的父目录名)

一定要确保您的 port 尊重 WRKDIRPREFIX 的设置。 绝大多数 port 并不需要担心这个。 具体说来, 当引用其它 port 的 WRKDIR 时, 需要注意正确的位置应该是 WRKDIRPREFIXPORTSDIR/subdir/name/work 而不是 PORTSDIR/subdir/name/work.CURDIR/../../subdir/name/work, 或别的什么。

另外, 如果您自行定义了 WRKDIR, 也要把 ${WRKDIRPREFIX}${.CURDIR} 放到前面。

12.4. 区分不同的操作系统, 以及 OS 的版本

在不同版本的 Unix 下可能需要对代码进行一些修改或增加少许编译选项, 才能够正确地编译和运行。 如果您需要根据一些条件来对代码进行修改, 请尽可能让这些修改通用, 这样, 我们就能够将这些代码移植回更早的 FreeBSD 系统, 并交叉移植到其它 BSD 系统, 例如来自 CSRG 的 4.4BSD, BSD/386, 386BSD, NetBSD 和 OpenBSD。

推荐的获得 4.3BSD/Reno (1990) 以及更新版本 BSD 代码版本号的方式, 是使用 sys/param.h 中所定义的 BSD 宏的值。 一般来说这个文件已经被引用了; 如果没有的话, 增加下述代码:

#if (defined(__unix__) || defined(unix)) && !defined(USG)
#include <sys/param.h>
#endif

.c 文件中合适的地方。 我们相信所有定义了这两个符号的系统中, 都提供了 sys/param.h。 如果您发现有不这样做的系统, 请通过致信 FreeBSD ports 邮件列表 让我们了解这一情况。

另一种方法是使用 GNU Autoconf 风格的方式:

#ifdef HAVE_SYS_PARAM_H
#include <sys/param.h>
#endif

采用这种方法时, 不要忘了把 -DHAVE_SYS_PARAM_H 加到 Makefile 中的 CFLAGS 里。

一旦引用了 sys/param.h, 您就可以使用:

#if (defined(BSD) && (BSD >= 199103))

来检测代码是否正在 4.3 Net2 代码基础, 或更新的系统上编译 (例如 FreeBSD 1.x, 4.3/Reno, NetBSD 0.9, 386BSD, BSD/386 1.1 以及更高版本)。

使用:

#if (defined(BSD) && (BSD >= 199306))

来检测代码是否正在 4.4 或更新的系统 (例如 FreeBSD 2.x, 4.4, NetBSD 1.0、 BSD/386 2.0 或更高版本)。

对于 4.4BSD-Lite2 代码系来说, BSD 宏的值应该是 199506。 这里只是作为信息提供, 您不应使用它来区分基于 4.4-Lite 的 FreeBSD 和基于 4.4-Lite2 的版本。 这些情况下, 您应使用 {freebsd} 宏。

保守地使用:

  • {freebsd} 在所有版本的 FreeBSD 中皆有定义。 如果您正进行的修改 影响 FreeBSD, 则应使用这个宏。 类似 sys_errlist[] 之于 strerror() 这样的移植问题是伯克利代码系公用的, 而并非 FreeBSD 所专有。

  • 在 FreeBSD 2.x 中, {freebsd} 定义为 2。 更早版本中, 它曾经是 1。 新的版本都会在主要的版本号变化时变更它。

  • 如果您需要区分 FreeBSD 1.x 系统和 FreeBSD 2.x 及更高版本的区别, 通常应使用前述的 BSD 宏来进行。 如果事实上需要一个 FreeBSD 专有的修改 (例如, 在使用 ld 时需要特殊的共享库选项), 则可以用 {freebsd} 和 #if {freebsd} > 1 来检测 FreeBSD 2.x 和新系统上的变化。 如果需要更细粒度地检测 FreeBSD 2.0-RELEASE 之后版本的变化, 则可以使用:

    #if __FreeBSD__ >= 2
    #include <osreldate.h>
    #    if __FreeBSD_version >= 199504
    	 /* 适用于 2.0.5+ 版本的代码 */
    #    endif
    #endif

在已有的数百个 port 中, 只有一两个应该使用 {freebsd}。 早期的 port 在不适当的地方使用了它并引发问题, 并不意味着您也必定如此。

12.5. __FreeBSD_version 值

下面是在 sys/param.h__FreeBSD_version 中定义的值及其意义的列表, 这里给出以方便您查阅:

表 1. __FreeBSD_version 值
日期版本

119411

2.0-RELEASE

199501, 199503

March 19, 1995

2.1-CURRENT

199504

April 9, 1995

2.0.5-RELEASE

199508

August 26, 1995

2.1 之前的 2.2-CURRENT

199511

November 10, 1995

2.1.0-RELEASE

199512

November 10, 1995

2.1.5 之前的 2.2-CURRENT

199607

July 10, 1996

2.1.5-RELEASE

199608

July 12, 1996

2.1.6 之前的 2.2-CURRENT

199612

November 15, 1996

2.1.6-RELEASE

199612

2.1.7-RELEASE

220000

February 19, 1997

2.2-RELEASE

(not changed)

2.2.1-RELEASE

(无变化)

在 2.2.1-RELEASE 之后的 2.2-STABLE

221001

April 15, 1997

texinfo-3.9 之后的 2.2-STABLE

221002

April 30, 1997

top 之后的 2.2-STABLE

222000

May 16, 1997

2.2.2-RELEASE

222001

May 19, 1997

2.2.2-RELEASE 之后的 2.2-STABLE

225000

October 2, 1997

2.2.5-RELEASE

225001

November 20, 1997

2.2.5-RELEASE 之后的 2.2-STABLE

225002

December 27, 1997

合并 ldconfig -R 之后的 2.2-STABLE

226000

March 24, 1998

2.2.6-RELEASE

227000

July 21, 1998

2.2.7-RELEASE

227001

July 21, 1998

2.2.7-RELEASE 之后的 2.2-STABLE

227002

September 19, 1998

semctl(2) 修改之后的 2.2-STABLE

228000

November 29, 1998

2.2.8-RELEASE

228001

November 29, 1998

2.2.8-RELEASE 之后的 2.2-STABLE

300000

February 19, 1996

mount(2) 修改之前的 3.0-CURRENT

300001

September 24, 1997

mount(2) 修改之后的 3.0-CURRENT

300002

June 2, 1998

semctl(2) 修改之后的 3.0-CURRENT

300003

June 7, 1998

ioctl 参数变化之后的 3.0-CURRENT

300004

September 3, 1998

ELF 变换之后的 3.0-CURRENT

300005

October 16, 1998

3.0-RELEASE

300006

October 16, 1998

3.0-RELEASE 之后的 3.0-CURRENT

300007

January 22, 1999

3/4切分之后的 3.0-STABLE

310000

February 9, 1999

3.1-RELEASE

310001

March 27, 1999

3.1-RELEASE 之后的 3.1-STABLE

310002

April 14, 1999

C++ 构建/析构函数顺序变化之后的 3.1-STABLE

320000

3.2-RELEASE

320001

May 8, 1999

3.2-STABLE

320002

August 29, 1999

二进制不兼容的 IPFW 和 socket 变化之后的 3.2-STABLE

330000

September 2, 1999

3.3-RELEASE

330001

September 16, 1999

3.3-STABLE

330002

November 24, 1999

libc 中加入 mkstemp(3) 之后的 3.3-STABLE

340000

December 5, 1999

3.4-RELEASE

340001

December 17, 1999

3.4-STABLE

350000

June 20, 2000

3.5-RELEASE

350001

July 12, 2000

3.5-STABLE

400000

January 22, 1999

3/4切分之后的 4.0-CURRENT

400001

February 20, 1999

修改动态连接器处理方式之后的 4.0-CURRENT

400002

March 13, 1999

C++ 构建/析构函数顺序变化之后的

400003

March 27, 1999

提供 dladdr(3) 之后的 4.0-CURRENT

400004

April 5, 1999

修正了 __deregister_frame_info 的 4.0-CURRENT (也表示在 EGCS 1.1.2 集成之后的 4.0-CURRENT)

400005

April 27, 1999

suser(9) API 变化之后的 4.0-CURRENT (也表示 newbus 之后的 4.0-CURRENT)

400006

May 31, 1999

cdevsw 注册机制改变之后的 4.0-CURRENT

400007

June 17, 1999

加入了 socket 级凭据的 so_cred 之后的 4.0-CURRENT

400008

June 20, 1999

在 libc_r 中加入 poll 系统调用接口之后的 4.0-CURRENT

400009

July 20, 1999

将内核中 dev_t 类型改为 struct specinfo 指针之后的 4.0-CURRENT

400010

September 25, 1999

修正了一处 jail(2) 漏洞之后的 4.0-CURRENT

400011

September 29, 1999

sigset_t 数据类型改变之后的 4.0-CURRENT

400012

November 15, 1999

切换到 GCC 2.95.2 编译器之后的 4.0-CURRENT

400013

December 4, 1999

加入了可插的 linux模式 ioctl 处理程序后的 4.0-CURRENT

400014

January 18, 2000

引入 OpenSSL 之后的 4.0-CURRENT

400015

January 27, 2000

GCC 2.95.2 中 ABI 默认值从 -fvtable-thunks 改为 -fno-vtable-thunks 之后的 4.0-CURRENT

400016

February 27, 2000

引入 OpenSSH 之后的 4.0-CURRENT

400017

March 13, 2000

4.0-RELEASE

400018

March 17, 2000

4.0-RELEASE 之后的 4.0-STABLE

400019

May 5, 2000

引入延迟校验和之后的 4.0-STABLE

400020

June 4, 2000

将 libxpg4 的代码并入 libc 之后的 4.0-STABLE

400021

July 8, 2000

Binutils 升级到 2.10.0 之后的 4.0-STABLE, ELF 标志变化, 以及将 tcsh 引入基本系统

410000

July 14, 2000

4.1-RELEASE

410001

July 29, 2000

4.1-RELEASE 之后的 4.1-STABLE

410002

September 16, 2000

setproctitle(3) 从 libutil 移入 libc 之后的 4.1-STABLE

411000

September 25, 2000

4.1.1-RELEASE

411001

4.1.1-RELEASE 之后的 4.1.1-STABLE

420000

October 31, 2000

4.2-RELEASE

420001

January 10, 2001

合并 libgcc.a 和 libgcc_r.a, 并修改了相关的 GCC 连接方式之后的 4.2-STABLE

430000

March 6, 2001

4.3-RELEASE

430001

May 18, 2001

引入 wint_t 之后的 4.3-STABLE

430002

July 22, 2001

PCI 电源状态 API 合并之后的 4.3-STABLE

440000

August 1, 2001

4.4-RELEASE

440001

October 23, 2001

引入 d_thread_t 之后的 4.4-STABLE

440002

November 4, 2001

mount 结构改变之后的 4.4-STABLE (影响文件系统 kld)

440003

December 18, 2001

用户态部分的 smbfs 被引入之后的 4.4-STABLE

450000

December 20, 2001

4.5-RELEASE

450001

February 24, 2002

usb 结构元素改名之后的 4.5-STABLE

450004

April 16, 2002

rc.conf(5) 变量 sendmail_enable 默认值改为 NONE 之后的 4.5-STABLE

450005

April 27, 2002

默认将 XFree86 4 用于预编译包联编之后的 4.5-STABLE

450006

May 1, 2002

accept 过滤器修正了安全问题并且不再会轻易被 DoS 之后的 4.5-STABLE

460000

June 21, 2002

4.6-RELEASE

460001

June 21, 2002

修正了 sendfile(2) 以吻合文档, 而不再根据发出的头计算发出数据量之后的 4.6-STABLE

460002

July 19, 2002

4.6.2-RELEASE

460100

June 26, 2002

4.6-STABLE

460101

June 26, 2002

MFC sed -i 之后的 4.6-STABLE

460102

September 1, 2002

MFC 许多 pkg_install 新特性之后的 4.6-STABLE

470000

October 8, 2002

4.7-RELEASE

470100

October 9, 2002

4.7-STABLE

470101

November 10, 2002

开始生成 std{in,out,err}p 引用, 而不是 sF。 这将 std{in,out,err} 从编译时表达式变成了运行时值。

470102

January 23, 2003

MFC mbuf 相关的将 m_aux mbuf 改为 m_tag 的修改之后的 4.7-STABLE

470103

February 14, 2003

OpenSSL 升级到 0.9.7 之后的 4.7-STABLE

480000

March 30, 2003

4.8-RELEASE

480100

April 5, 2003

4.8-STABLE

480101

May 22, 2003

realpath(3) 变为线程安全的之后的 4.8-STABLE

480102

August 10, 2003

对 twe 的 3ware API 修改之后的 4.8-STABLE

490000

October 27, 2003

4.9-RELEASE

490100

October 27, 2003

4.9-STABLE

490101

January 8, 2004

kinfo_eproc 中加入 e_sid 之后的 4.9-STABLE

490102

February 4, 2004

MFC rtld 的 libmap 功能之后的 4.9-STABLE

491000

May 25, 2004

4.10-RELEASE

491100

June 1, 2004

4.10-STABLE

491101

August 11, 2004

MFC 20040629 版本的包维护工具之后的 4.10-STABLE

491102

November 16, 2004

修正了 VM 当解除 wire 不存在页面时的问题之后的 4.10-STABLE

492000

December 17, 2004

4.11-RELEASE

492100

December 17, 2004

4.11-STABLE

492101

April 18, 2006

将 libdata/ldconfig 目录加入 mtree 文件之后的 4.11-STABLE。

500000

March 13, 2000

5.0-CURRENT

500001

April 18, 2000

加入 ELF 头字段, 并改变我们的 ELF 执行文件标记方式之后的 5.0-CURRENT

500002

May 2, 2000

kld 元数据修改之后的 5.0-CURRENT

500003

May 18, 2000

buf/bio 修改之后的 5.0-CURRENT

500004

May 26, 2000

binutils 升级后的 5.0-CURRENT

500005

June 3, 2000

将 libxpg4 并入 libc, 以及引入 TASKQ 之后的 5.0-CURRENT

500006

June 10, 2000

加入 AGP 接口之后的 5.0-CURRENT

500007

June 29, 2000

Perl 升级到 5.6.0 之后的 5.0-CURRENT

500008

July 7, 2000

KAME 代码升级到 2000/07 之后的 5.0-CURRENT

500009

July 14, 2000

ether_ifattach() 和 ether_detach() 修改之后的 5.0-CURRENT

500010

July 16, 2000

将 mtree 改为原先的默认值, 并使用 -L 来跟随符号连接之后的 5.0-CURRENT

500011

July 18, 2000

kqueue API 修改之后的 5.0-CURRENT

500012

September 2, 2000

setproctitle(3) 从 libutil 挪到 libc 之后的 5.0-CURRENT

500013

September 10, 2000

首个 SMPng commit 之后的 5.0-CURRENT

500014

January 4, 2001

<sys/select.h> 改为 <sys/selinfo.h> 之后的 5.0-CURRENT

500015

January 10, 2001

libgcc.a 和 libgcc_r.a 以及 GCC 连接方式变动之后的 5.0-CURRENT

500016

January 24, 2001

修改以允许 libc 和 libc_r 连接到一起, 不再鼓励使用 -pthread 之后的 5.0-CURRENT

500017

February 18, 2001

从 struct ucred 切换到 struct xucred 以便使内核为 mountd 等程序导出的 API 稳定下来之后的 5.0-CURRENT

500018

February 24, 2001

加入 CPUTYPE 用于 CPU 专用的优化的 make 变量之后的 5.0-CURRENT

500019

June 9, 2001

machine/ioctl_fd.h 改为 sys/fdcio.h 之后的 5.0-CURRENT

500020

June 15, 2001

locale 名称改变之后的 5.0-CURRENT

500021

June 22, 2001

引入 bzip2 之后的 5.0-CURRENT, 同时也代表删去了 S/Key

500022

July 12, 2001

加入 SSE 支持之后的 5.0-CURRENT

500023

September 14, 2001

KSE 第2个里程碑之后的 5.0-CURRENT

500024

October 1, 2001

d_thread_t 之后的 5.0-CURRENT, 同时 UUCP 被移入 ports

500025

October 4, 2001

64-位平台上的描述符和 creds API 变化之后的 5.0-CURRENT

500026

October 9, 2001

采用 XFree86 4 作为默认的预编译包, 以及加入 strnstr() libc 函数之后的 5.0-CURRENT

500027

October 10, 2001

加入 strcasestr() libc 函数之后的 5.0-CURRENT

500028

December 14, 2001

引入了用户态的 smbfs 组件之后的 5.0-CURRENT

(未予增加)

加入了新的 C99 指定位宽整形变量之后的 5.0-CURRENT

500029

January 29, 2002

修改了 sendfile(2) 的返回值之后的 5.0-CURRENT

500030

February 15, 2002

引入适合表达文件标志的 fflags_t 类型之后的 5.0-

500031

February 24, 2002

usb 结构元素改名之后的 5.0-CURRENT

500032

March 16, 2002

引入 Perl 5.6.1 之后的 5.0-CURRENT

500033

April 3, 2002

rc.conf(5) 变量 sendmail_enable 默认值改为 NONE 之后的 5.0-CURRENT

500034

April 30, 2002

mtx_init() 增加了第三个参数之后的 5.0-CURRENT

500035

May 13, 2002

包含 Gcc 3.1 的 5.0-CURRENT

500036

May 17, 2002

在 /usr/src 中删去了 Perl 的 5.0-CURRENT

500037

May 29, 2002

加入 dlfunc(3) 之后的 5.0-CURRENT

500038

July 24, 2002

一些 struct sockbuf 的成员变为结构, 并重新排列顺序之后的 5.0-CURRENT

500039

September 1, 2002

引入 GCC 3.2.1 之后的 5.0-CURRENT。 头文件也不再使用 BSD_FOO_T 而开始使用 _FOO_T_DECLARED。 这个值还可以用于作为一个包含使用 bzip2(1) 的预编译包支持的预期点。

500040

September 20, 2002

以去掉对 disklabel 结构内容的依赖的名义, 对磁盘相关的函数进行了许多修改之后的 5.0-CURRENT

500041

October 1, 2002

libc 中加入 getopt_long(3) 之后的 5.0-CURRENT

500042

October 15, 2002

Binutils 2.13 升级, 包含了新的 FreeBSD 模拟, vec 以及输出格式之后的 5.0-CURRENT

500043

November 1, 2002

libc 中加入了弱 pthread_XXX 符号之后的 5.0-CURRENT, 从而淘汰了 libXThrStub.so。 5.0-RELEASE。

500100

January 17, 2003

创建 RELENG_5_0 分支之后的 5.0-CURRENT

500101

February 19, 2003

<sys/dkstat.h> 变成了一个空文件, 不应再被引用

500102

February 25, 2003

修改 d_mmap_t 接口之后的 5.0-CURRENT

500103

February 26, 2003

taskqueue_swi 以无全局锁的方式运行之后的 5.0-CURRENT, 同时还加入了使用全局锁的 taskqueue_swi_giant

500104

February 27, 2003

去掉了 cdevsw_add() 和 cdevsw_remove() 出现 MAJOR_AUTO 分配机制

500105

March 4, 2003

采用新的 cdevsw 初始化方法之后的 5.0-CURRENT

500106

March 8, 2003

devstat_add_entry() 被 devstat_new_entry() 取代

500107

March 15, 2003

修改 devstat 接口; 请参见 sys/sys/param.h 1.149

500108

March 15, 2003

改变了 Token-Ring 接口

500109

March 25, 2003

加入 vm_paddr_t

500110

March 28, 2003

realpath(3) 改为线程安全之后的 5.0-CURRENT

500111

April 9, 2003

usbhid(3) 与 NetBSD 同步之后的 5.0-CURRENT

500112

April 17, 2003

加入新的 NSS 实现, 以及 POSIX.1 getpw*_r, getgr*_r 函数之后的 5.0-CURRENT

500113

May 2, 2003

删去旧式 rc 系统之后的 5.0-CURRENT

501000

June 4, 2003

5.1-RELEASE.

501100

June 2, 2003

创建 RELENG_5_1 分支之后的 5.1-CURRENT

501101

June 29, 2003

改正 sigtimedwait(2) 和 sigwaitinfo(2) 语义之后的 5.1-CURRENT

501102

July 3, 2003

bus_dma_tag_create(9) 中加入了 lockfunc 和 lockfuncarg 字段之后的 5.1-CURRENT

501103

July 31, 2003

集成了 GCC 3.3.1-pre 20030711 之后的 5.1-CURRENT

501104

August 5, 2003

twe 中 3ware API 变化之后的 5.1-CURRENT

501105

August 17, 2003

允许动态连接 /bin 和 /sbin, 以及将某些库移动到 /lib 之后的 5.1-CURRENT

501106

September 8, 2003

增加内核级 Coda 6.x 支持之后的 5.1-CURRENT

501107

September 17, 2003

将 16550 UART 常量从 <dev/sio/sioreg.h> 挪到 <dev/ic/ns16550.h> 之后的 5.1-CURRENT。 此外, rtld 也从此无条件支持 libmap 功能

501108

September 23, 2003

更新 PFIL_HOOKS API 之后的 5.1-CURRENT

501109

September 27, 2003

增加 kiconv(3) 之后的 5.1-CURRENT

501110

September 28, 2003

默认的 cdevsw open 和 close 操作变化之后的 5.1-CURRENT

501111

October 16, 2003

cdevsw 的布局变化之后的 5.1-CURRENT

501112

October 16, 2003

增加 kobj 多继承之后的 5.1-CURRENT

501113

October 31, 2003

修改 struct ifnet 中的 if_xname 之后的 5.1-CURRENT

501114

November 16, 2003

将 /bin 和 /sbin 改为动态连接之后的 5.1-CURRENT

502000

December 7, 2003

5.2-RELEASE

502010

February 23, 2004

5.2.1-RELEASE

502100

December 7, 2003

创建 RELENG_5_2 分支之后的 5.2-CURRENT

502101

December 19, 2003

libc 中加入了 cxa_atexit/cxa_finalize 两个函数之后的 5.2-CURRENT

502102

January 30, 2004

默认线程库从 libc_r 改为 libpthread 之后的 5.2-CURRENT

502103

February 21, 2004

设备驱动 API 大规模翻修之后的 5.2-CURRENT

502104

February 25, 2004

增加 getopt_long_only() 之后的 5.2-CURRENT

502105

March 5, 2004

C 的 NULL 定义改为 ((void *)0) 之后的 5.2-CURRENT, 这会产生更多的编译警告

502106

March 8, 2004

pf 连入联编和安装过程之后的 5.2-CURRENT

502107

March 10, 2004

在 sparc64 上将 time_t 改为 64-位 值之后的 5.2-CURRENT

502108

March 12, 2004

在一些头文件修改以支持 Intel C/C++ 编译器, 以及让 execve(2) 更严格地符合 POSIX 之后的 5.2-CURRENT

502109

March 22, 2004

引入 bus_alloc_resource_any API 之后的 5.2-CURRENT

502110

March 27, 2004

加入 UTF-8 locale 之后的 5.2-CURRENT

502111

April 11, 2004

删去 getvfsent(3) API 之后的 5.2-CURRENT

502112

April 13, 2004

为 make(1) 增加 .warning 语句之后的 5.2-CURRENT

502113

June 4, 2004

所有串口设备都强制使用 ttyioctl() 之后的 5.2-CURRENT

502114

June 13, 2004

引入 ALTQ 框架之后的 5.2-CURRENT

502115

June 14, 2004

修改 sema_timedwait(9) 使其成功时返回 0, 失败时返回非 0 的错误代码之后的 5.2-CURRENT

502116

June 16, 2004

将内核 dev_t 改为指向 struct cdev * 的指针之后的 5.2-CURRENT

502117

June 17, 2004

将内核 udev_t 改为 dev_t 之后的 5.2-CURRENT

502118

June 17, 2004

为 clock_gettime(2) 和 clock_getres(2) 增加 CLOCK_VIRTUAL 和 CLOCK_PROF 支持之后的 5.2-CURRENT

502119

June 22, 2004

对网络接口复制进行全面修改之后的 5.2-CURRENT

502120

July 2, 2004

package 工具升级为 20040629 之后的 5.2-CURRENT

502121

July 9, 2004

不再将蓝牙代码标记为 i386 专用之后的 5.2-CURRENT

502122

July 11, 2004

引入 KDB 调试器框架之后的 5.2-CURRENT。 同时还引入了 DDB 作为后台, 以及 GDB 后台。

502123

July 12, 2004

修改 VFS_ROOT 和 vflush 使其使用一个 struct thread 参数之后的 5.2-CURRENT。 struct kinfo_proc 增加了一个用户数据指针。 同时, 默认的 X 实现切换为 xorg

502124

July 24, 2004

将使用 rc.d 和传统脚本的 port 分别启动之后的 5.2-CURRENT

502125

July 28, 2004

取消前一修改之后的 5.2-CURRENT

502126

July 31, 2004

删除 kmem_alloc_pageable() 并引入 gcc 3.4.2 的 5.2-CURRENT

502127

August 2, 2004

修改 UMA 内核 API 允许构建函数和初始化失败之后的 5.2-CURRENT

502128

August 8, 2004

vfs_mount 签名和全局替换 suser(9) API 的 PRISON_ROOT 为 SUSER_ALLOWJAIL 之后的 5.2-CURRENT

503000

August 23, 2004

pfil API 修改之前的 5.3-BETA/RC

503001

September 22, 2004

5.3-RELEASE

503100

October 16, 2004

创建 RELENG_5_3 分支之后的 5.3-STABLE

503101

December 3, 2004

加入了 glibc 风格的 strftime(3) 填充选项的 5.3-STABLE

503102

February 13, 2005

MFC OpenBSD 的 nc(1) 之后的 5.3-STABLE

503103

February 27, 2005

在 MFC 了 <src/include/stdbool.h><src/sys/i386/include/_types.h> 用于兼容 GCC 和 Intel C/C++ 编译器的修正之后的 5.4-PRERELEASE

503104

February 28, 2005

MFC 了将 ifi_epoch 由 wall 时钟时间改为 uptime 之后的 5.4-PRERELEASE

503105

March 2, 2005

MFC 了 vswprintf(3) 中的 EOVERFLOW 检查的 5.4-PRERELEASE

504000

April 3, 2005

5.4-RELEASE.

504100

April 3, 2005

创建 RELENG_5_4 分支之后的 5.4-STABLE

504101

May 11, 2005

加大默认线程堆栈尺寸之后的 5.4-STABLE

504102

June 24, 2005

加入 sha256 之后的 5.4-STABLE

504103

October 3, 2005

MFC if_bridge 之后的 5.4-STABLE

504104

November 13, 2005

bsdiff 和 portsnap MFC 之后的 5.4-STABLE

504105

January 17, 2006

在 MFC 了 ldconfig_local_dirs 修改之后的 5.4-STABLE。

505000

May 12, 2006

5.5-RELEASE.

505100

May 12, 2006

在创建 RELENG_5_5 分支之后的 5.5-STABLE

600000

August 18, 2004

6.0-CURRENT

600001

August 27, 2004

内核中永久性启用 PFIL_HOOKS 之后的 6.0-CURRENT

600002

August 30, 2004

最初将 ifi_epoch 加入 if_data 结构之后的 6.0-CURRENT。 此后不久即被撤销。 请不要使用这个值。

600003

September 8, 2004

if_data 中再次加入 ifi_epoch 成员之后的 6.0-CURRENT

600004

September 29, 2004

将 struct inpcb 参数加入 pfil API 之后的 6.0-CURRENT

600005

October 5, 2004

newsyslog 加入了 "-d DESTDIR" 参数之后的 6.0-CURRENT

600006

November 4, 2004

加入了 glibc 风格的 strftime(3) 填充选项之后的 6.0-CURRENT

600007

December 12, 2004

加入了 802.11 框架更新之后的 6.0-CURRENT

600008

January 25, 2005

修改 VOP_*VOBJECT() 并为无全局锁的文件系统引入 MNTK_MPSAFE 标志之后的 6.0-CURRENT

600009

February 4, 2005

加入 cpufreq 框架和驱动之后的 6.0-CURRENT

600010

February 6, 2005

引入 OpenBSD 的 nc(1) 之后的 6.0-CURRENT

600011

February 12, 2005

删去并不存在的 SVID2 matherr() 支持之后的 6.0-CURRENT

600012

February 15, 2005

增大默认线程堆栈尺寸之后的 6.0-CURRENT

600013

February 19, 2005

增加了针对 <src/include/stdbool.h><src/sys/i386/include/_types.h> 的用于 Intel C/C++ 编译器的 GCC-兼容性修正。

600014

February 21, 2005

修正了 vswprintf(3) 的 EOVERFLOW 检查之后的 6.0-CURRENT

600015

February 25, 2005

将 struct if_data 成员 ifi_epoch 从 wall 时钟时间改为 uptime 之后的 6.0-CURRENT

600016

February 26, 2005

修改 LC_CTYPE 磁盘格式之后的 6.0-CURRENT

600017

February 27, 2005

修改 NLS 编录磁盘格式之后的 6.0-CURRENT

600018

February 27, 2005

修改 LC_COLLATE 磁盘格式之后的 6.0-CURRENT

600019

February 28, 2005

将 acpica 头文件安装到 /usr/include

600020

March 9, 2005

为 send(2) API 加入了 MSG_NOSIGNAL

600021

March 17, 2005

在 cdevsw 上增加了一些字段

600022

March 21, 2005

基本系统中删去了 gtar

600023

April 13, 2005

unix(4) 中加入了 LOCAL_CREDS, LOCAL_CONNWAIT 两个 socket 选项

600024

April 19, 2005

加入了 hwpmc(4) 及其相关工具之后的 6.0-CURRENT

600025

April 26, 2005

加入 struct icmphdr 之后的 6.0-CURRENT

600026

May 3, 2005

pf 更新到了 3.7

600027

May 6, 2005

引入了内核 libalias 和 ng_nat

600028

May 13, 2005

将 ttyname_r(3) 接口改为符合 POSIX 标准, 并通过 unistd.h 和 libc

600029

May 29, 2005

将 libpcap 升级为 v0.9.1 alpha 096 之后的 6.0-CURRENT

600030

June 5, 2005

引入 NetBSD 的 if_bridge(4) 之后的 6.0-CURRENT

600031

June 10, 2005

将 struct ifnet 从驱动的 softc 中拆出之后的 6.0-CURRENT。

600032

July 11, 2005

引入了 libpcap v0.9.1 之后的 6.0-CURRENT。

600033

July 25, 2005

所有自 RELENG_5 以来没有修改过的共享库的版本递增之后的 6.0-STABLE。

600034

August 13, 2005

为 dev_clone 事件处理函数增加身份信息参数之后的 6.0-STABLE。 6.0-RELEASE。

600100

November 1, 2005

6.0-RELEASE 之后的 6.0-STABLE

600101

December 21, 2005

将 local_startup 目录中的脚本集成到基本系统的 rcorder(8) 之后的 6.0-STABLE。

600102

December 30, 2005

更新 ELF 类型和常量之后的 6.0-STABLE。

600103

January 15, 2006

MFC 了 pidfile(3) API 之后的 6.0-STABLE。

600104

January 17, 2006

在 MFC 了 ldconfig_local_dirs 修改之后的 6.0-STABLE。

600105

February 26, 2006

在 csh(1) 中加入了 NLS 目录支持之后的 6.0-STABLE。

601000

May 6, 2006

6.1-RELEASE

601100

May 6, 2006

6.1-RELEASE 之后的 6.1-STABLE。

601101

June 22, 2006

引入 csup 之后的 6.1-STABLE。

601102

July 11, 2006

更新了 iwi(4) 之后的 6.1-STABLE。

601103

July 17, 2006

将域名解析函数更新至 BIND9, 并导出了可重入版本的 netdb 函数之后的 6.1-STABLE。

601104

August 8, 2006

在 OpenSSL 中启用了 DSO (动态共享库) 支持之后的 6.1-STABLE。

601105

September 2, 2006

由于 802.11 修正变动了 IEEE80211_IOC_STA_INFO ioctl API 之后的 6.1-STABLE。

602000

November 15, 2006

6.2-RELEASE

602100

September 15, 2006

6.2-RELEASE 之后的 6.2-STABLE。

602101

December 12, 2006

加入 Wi-Spy quirk 之后的 6.2-STABLE。

602102

December 28, 2006

增加 pci_find_extcap() 之后的 6.2-STABLE。

602103

January 16, 2007

MFC 了对 dlsym 进行修改, 使其在指定 dso 及其暗指的依赖中查找符号之后的 6.2-STABLE。

602104

January 28, 2007

MFC 了 netgraph 节点 ng_deflate(4) 和 ng_pred1(4) 以及用于 ng_ppp(4) 节点的新压缩及加密模式之后的 6.2-STABLE。

602105

February 20, 2007

MFC 了从 NetBSD 移植的 BSD 授权的 gzip(1) 之后的 6.2-STABLE。

602106

March 31, 2007

MFC 了 PCI MSI 和 MSI-X 支持之后的 6.2-STABLE。

602107

April 6, 2007

MFC 了包含宽字符支持的 ncurses 5.6 之后的 6.2-STABLE。

602108

April 11, 2007

MFC 了实现 Linux SCSI SG 直通设备 API 子集的 CAM 'SG' 设备之后的 6.2-STABLE。

602109

April 17, 2007

MFC 了 readline 5.2 patchset 002 之后的 6.2-STABLE。

602110

May 2, 2007

MFC 了用于 amd64 和 i386 的 pmap_invalidate_cache()、 pmap_change_attr()、 pmap_mapbios()、 pmap_mapdev_attr()、 and pmap_unmapbios() 之后的 6.2-STABLE。

602111

June 11, 2007

由于 MFC 了 BOP_BDFLUSH 导致文件系统模块 KBI 变化之后的 6.2-STABLE。

602112

September 21, 2007

一系列 libutil(3) MFC 之后的 6.2-STABLE。

602113

October 25, 2007

MFC 了宽字符和单字节 ctype 函数分拆之后的 6.2-STABLE。 新编译的引用了 ctype.h 的可执行文件, 可能会需要一个在旧系统上不存在的新增符号 __mb_sb_limit。

602114

October 30, 2007

恢复了 ctype ABI 向前兼容性之后的 6.2-STABLE。

602115

November 21, 2007

回退了宽字符和单字节 ctype 分拆之后的 6.2-STABLE。

603000

November 25, 2007

6.3-RELEASE

603100

November 25, 2007

在 6.3-RELEASE 之后的 6.3-STABLE。

603101

December 7, 2007

修正了 bit macro 的多字节支持之后的 6.3-STABLE。

603102

April 24, 2008

为 flock 结构加入 l_sysid 之后的 6.3-STABLE。

603103

May 27, 2008

MFC 了 memrchr 函数之后的 6.3-STABLE。

603104

June 15, 2008

为 make(1) MFC :u 变量修饰符之后的 6.3-STABLE。

604000

October 4, 2008

6.4-RELEASE

604100

October 4, 2008

6.4-RELEASE 之后的 6.4-STABLE。

700000

July 11, 2005

7.0-CURRENT。

700001

July 23, 2005

所有自 RELENG_5 以来没有修改过的共享库的版本递增之后的 7.0-CURRENT。

700002

August 13, 2005

为 dev_clone 事件处理函数中增加身份信息参数之后的 7.0-CURRENT。

700003

August 25, 2005

将 memmem(3) 加入 libc 之后的 7.0-CURRENT。

700004

October 30, 2005

将 solisten(9) 改为接受一 backlog 参数之后的 7.0-CURRENT。

700005

November 11, 2005

将 IFP2ENADDR() 改为返回一 IF_LLADDR() 指针之后的 7.0-CURRENT。

700006

November 11, 2005

struct ifnet 中增加 if_addr 成员, 并删除 IFP2ENADDR() 之后的 7.0-CURRENT。

700007

December 2, 2005

将 local_startup 目录中的脚本集成到基本系统的 rcorder(8) 之后的 7.0-CURRENT。

700008

December 5, 2005

去掉 MNT_NODEV 挂接选项之后的 7.0-CURRENT。

700009

December 19, 2005

对 ELF-64 类型和符号版本进行变更之后的 7.0-CURRENT。

700010

December 20, 2005

增加 hostb 和 vgapci 驱动、 pci_find_extcap(), 并将 AGP 驱动改为不再影射 aperature 之后的 7.0-CURRENT。

700011

December 31, 2005

除 Alpha 之外的所有平台上 tv_sec 改为 time_t 之后的 7.0-CURRENT。

700012

January 8, 2006

修改 ldconfig_local_dirs 之后的 7.0-CURRENT。

700013

January 12, 2006

在修改了 /etc/rc.d/abi 以支持 /compat/linux/etc/ld.so.cache 以某只读文件系统上的符号连接形式存在之后的 7.0-CURRENT。

700014

January 26, 2006

引入 pts 之后的 7.0-CURRENT。

700015

March 26, 2006

在引入 hwpmc(4) 的第 2 版 ABI 之后的 7.0-CURRENT。

700016

April 22, 2006

在 libc 中加入了 fcloseall(3) 之后的 7.0-CURRENT。

700017

May 13, 2006

删去 ip6fw 之后的 7.0-CURRENT。

700018

July 15, 2006

引入了 snd_emu10kx 之后的 7.0-CURRENT。

700019

July 29, 2006

引入了 OpenSSL 0.9.8b 之后的 7.0-CURRENT。

700020

September 3, 2006

增加了 bus_dma_get_tag 函数之后的 7.0-CURRENT。

700021

September 4, 2006

在引入了 libpcap 0.9.4 和 tcpdump 3.9.4 之后的 7.0-CURRENT。

700022

September 9, 2006

在对 dlsym 进行修改, 使其在指定 dso 及其暗指的依赖中查找符号之后的 7.0-CURRENT。

700023

September 23, 2006

为 OSSv4 混音器 API 加入新的声音 IOCTL 之后的 7.0-CURRENT。

700024

September 28, 2006

汇入 OpenSSL 0.9.8d 之后的 7.0-CURRENT。

700025

November 11, 2006

加入了 libelf 之后的 7.0-CURRENT。

700026

November 26, 2006

对音效相关的 sysctl 进行大幅调整之后的 7.0-CURRENT。

700027

November 30, 2006

加入 Wi-Spy quirk 之后的 7.0-CURRENT。

700028

December 15, 2006

在 libc 中加入 sctp 调用之后的 7.0-CURRENT。

700029

January 26, 2007

将 GNU gzip(1) 实现替换为从 NetBSD 移植的采用 BSD 授权版本之后的 7.0-CURRENT。

700030

February 7, 2007

在 IPv4 多播转发代码中删去了 IPIP 隧道封装 (VIFF_TUNNEL) 之后的 7.0-CURRENT。

700031

February 23, 2007

修改了 bus_setup_intr() (newbus) 之后的 7.0-CURRENT。

700032

March 2, 2007

引入了 ipw(4) 和 iwi(4) 固件之后的 7.0-CURRENT。

700033

March 9, 2007

在 ncurses 中引入了宽字符支持之后的 7.0-CURRENT。

700034

March 19, 2007

修改了 insmntque()、 getnewvnode() 以及 vfs_hash_insert() 工作方式之后的 7.0-CURRENT。

700035

March 26, 2007

增加 CPU 频率变动通知机制之后的 7.0-CURRENT。

700036

April 6, 2007

引入了 ZFS 文件系统之后的 7.0-CURRENT。

700037

April 8, 2007

新增了实现 Linux SCSI SG 直通设备 API 子集的 CAM 'SG' 设备之后的 7.0-CURRENT。

700038

April 30, 2007

getenv(3)putenv(3)setenv(3)unsetenv(3) 改为符合 POSIX 之后的 7.0-CURRENT。

700039

May 1, 2007

回退了 700038 中的变动之后的 7.0-CURRENT。

700040

May 10, 2007

在 libutil 中增加了 flopen(3) 之后的 7.0-CURRENT。

700041

May 13, 2007

启用了符号版本, 并将 libthr 改为默认线程库之后的 7.0-CURRENT。

700042

May 19, 2007

引入了 gcc 4.2.0 之后的 7.0-CURRENT。

700043

May 21, 2007

将 RELENG_6 之后未修改过版本的共享库版本增加之后的 7.0-CURRENT。

700044

June 7, 2007

将 vn_open()/VOP_OPEN() 的参数由文件描述符数组下标改为 struct file * 之后的 7.0-CURRENT。

700045

June 10, 2007

修改 pam_nologin(8) 使其向 PAM 框架提供帐号管理功能而非身份验证功能之后的 7.0-CURRENT。

700046

June 11, 2007

更新 802.11 无线支持之后的 7.0-CURRENT。

700047

June 11, 2007

增加 TCP LRO 网络接口能力之后的 7.0-CURRENT。

700048

June 12, 2007

在 IPv4 协议栈中加入了 RFC 3678 API 支持之后的 7.0-CURRENT。 先前 IP_MULTICAST_IF ioctl 的 RFC 1724 行为被删去; 0.0.0.0/8 不再能够用于指定接口索引下标, 而应使用 struct ipmreqn 代替。

700049

July 3, 2007

引入 OpenBSD 4.1 的 pf 之后的 7.0-CURRENT。

(not changed)

为 FAST_IPSEC 增加 IPv6 支持, 删去 KAME IPSEC, 并将 FAST_IPSEC 更名为 IPSEC 之后的 7.0-CURRENT。 (未变动)

700050

July 4, 2007

将 setenv/putenv/等等调用, 从传统 BSD 改为 POSIX 标准之后的 7.0-CURRENT。

700051

July 4, 2007

增加新的 mmap/lseek/等等这些系统调用之后的 7.0-CURRENT。

700052

July 6, 2007

将 I4B 头文件移动到 include/i4b 之后的 7.0-CURRENT。

700053

September 30, 2007

增加了 PCI domain 支持之后的 7.0-CURRENT。

700054

October 25, 2007

MFC 了宽字符和单字节字符 ctype 分拆之后的 7.0-CURRENT。

700055

October 28, 2007

7.0-RELEASE, 以及 MFC 了恢复对 FreeBSD 4/5/6 版本的 PCIOCGETCONF、 PCIOCREAD 和 PCIOCWRITE IOCTL ABI 向下兼容之后的 7.0-CURRENT, 这一变动导致 PCIOCGETCONF IOCTL 的 ABI 再次发生变化。

700100

December 22, 2007

7.0-RELEASE 之后的 7.0-STABLE

700101

February 8, 2008

MFC m_collapse() 之后的 7.0-STABLE。

700102

March 30, 2008

MFC kdb_enter_why() 之后的 7.0-STABLE。

700103

April 10, 2008

为 flock 结构加入 l_sysid 之后的 7.0-STABLE。

700104

April 11, 2008

在 procstat(1) MFC 之后的 7.0-STABLE。

700105

April 11, 2008

在 MFC umtx 特性之后的 7.0-STABLE。

700106

April 15, 2008

psm(4) MFC write(2) 支持之后的 7.0-STABLE。

700107

April 20, 2008

fcntl(2) MFC F_DUP2FD 之后的 7.0-STABLE。

700108

May 5, 2008

lockmgr(9) 做了一些修改之后的 7.0-STABLE, 在使用 lockmgr(9) 时必需包含 sys/lock.h

700109

May 27, 2008

MFC 了 memrchr 函数之后的 7.0-STABLE。

700110

August 5, 2008

MFC 了内核 NFS locked 客户端之后的 7.0-STABLE。

700111

August 20, 2008

加入了对物理连续巨帧支持之后的 7.0-STABLE。

700112

August 27, 2008

在 MFC 内核 DTrace 支持之后的 7.0-STABLE。

701000

November 25, 2008

7.1-RELEASE

701100

November 25, 2008

7.1-RELEASE 之后的 7.1-STABLE。

701101

January 10, 2009

合并了 strndup 之后的 7.1-STABLE。

701102

January 17, 2009

加入了 cpuctl(4) 支持之后的 7.1-STABLE。

701103

February 7, 2009

合并了 多/无-IPv4/v6 jail 之后的 7.1-STABLE。

701104

February 14, 2009

在 struct mount 中保存了挂起属主, 以及在 struct vfsops 中引入了 vfs_susp_clean 方法之后的 7.1-STABLE。

701105

March 12, 2009

对 kern.ipc.shmsegs sysctl 变量不兼容的修改, 以允许在 64bit 构架上分配更多的 SysV 共享内存段之后的 7.1-STABLE。

701106

March 14, 2009

合并了一个对 POSIX semaphore 等待操作修正之后的 7.1-STABLE。

702000

April 15, 2009

7.2-RELEASE

702100

April 15, 2009

7.2-RELEASE 之后的 7.2-STABLE。

702101

May 15, 2009

ichsmb(4) 改为使用左邻接辅编址来保持与其它 SMBus 控制器驱动一致性之后的 7.2-STABLE。

702102

May 28, 2009

MFC 了 fdopendir 函数之后的 7.2-STABLE。

702103

June 06, 2009

MFC 了 PmcTools 之后的 7.2-STABLE。

702104

July 14, 2009

MFC 了 closefrom 系统调用之后的 7.2-STABLE。

702105

July 31, 2009

MFC 了 SYSVIPC ABI 改动之后的 7.2-STABLE。

702106

September 14, 2009

MFC 了 x86 PAT 增强, 并新增了 d_mmap_single() 以及 scatter/gather 型 VM 对象类型之后的 7.2-STABLE。

703000

February 9, 2010

7.3-RELEASE

703100

February 9, 2010

7.3-RELEASE 之后的 7.3-STABLE。

704000

December 22, 2010

7.4-RELEASE

704100

December 22, 2010

7.4-RELEASE 之后的 7.4-STABLE。

800000

October 11, 2007

8.0-CURRENT。 分拆了宽字符和单字节字符 ctype。

800001

October 16, 2007

引入了 libpcap 0.9.8 和 tcpdump 3.9.8 之后的 8.0-CURRENT。

800002

October 21, 2007

将 kthread_create() 系列函数改名为 kproc_create() 之后的 8.0-CURRENT。

800003

October 24, 2007

恢复了对 FreeBSD 4/5/6 版本的 PCIOCGETCONF、 PCIOCREAD 和 PCIOCWRITE IOCTL ABI 向下兼容之后的 8.0-CURRENT, 这一变动导致 PCIOCGETCONF IOCTL 的 ABI 再次发生变化。

800004

November 12, 2007

将 agp(4) 驱动从 src/sys/pci 挪到 src/sys/dev/agp 之后的 8.0-CURRENT。

800005

December 4, 2007

修改了 jumbo frame 分配器之后的 8.0-CURRENT。

800006

December 7, 2007

在给 hwpmc(4) 加入了 callgraph 捕捉功能后的 8.0-CURRENT

800007

December 25, 2007

kdb_enter() 增加 "why" 参数之后的 8.0-CURRENT。

800008

December 28, 2007

在去除 LK_EXCLUPGRADE 选项后的 8.0-CURRENT。

800009

January 9, 2008

引入 lockmgr_disown(9) 之后的 8.0-CURRENT。

800010

January 10, 2008

修改 vn_lock(9) 原型之后的 8.0-CURRENT。

800011

January 13, 2008

修改 VOP_LOCK(9)VOP_UNLOCK(9) 原型之后的 8.0-CURRENT。

800012

January 19, 2008

引入 lockmgr_recursed(9)BUF_RECURSED(9)BUF_ISLOCKED(9) 并删除了 BUF_REFCNT() 之后的 8.0-CURRENT。

800013

January 23, 2008

引入 "ASCII" 编码之后的 8.0-CURRENT。

800014

January 24, 2008

修改 lockmgr(9) 并删除了 lockcount()LOCKMGR_ASSERT() 之后的 8.0-CURRENT。

800015

January 26, 2008

扩展了 fts(3) 数据结构之后的 8.0-CURRENT。

800016

February 1, 2008

为 MEXTADD(9) 增加了一个参数之后的 8.0-CURRENT。

800017

February 6, 2008

lockmgr(9) 引入 LK_NODUP 和 LK_NOWITNESS 选项后的 8.0-CURRENT。

800018

February 8, 2008

引入 m_collapse 之后的 8.0-CURRENT。

800019

February 9, 2008

为 sysctl 变量 kern.proc.filedesc 加入 当前工作目录,root 目录和 jail 目录支持之后的 8.0-CURRENT。

800020

February 13, 2008

引入 lockmgr_assert(9) 之后的 8.0-CURRENT。

800021

February 15, 2008

引入 lockmgr_args(9) 和移除 LK_INTERNAL 标志之后的 8.0-CURRENT。

800022

(backed out)

把 BSD ar(1) 作为系统默认的 ar 之后的 8.0-CURRENT。

800023

February 25, 2008

修改了 lockstatus(9)VOP_ISLOCKED(9); 原型,特别时去掉 struct thread 参数之后的 8.0-CURRENT。

800024

March 1, 2008

砍掉了 lockwaitersBUF_LOCKWAITERS 函数, brelvp 的返回值从 void 修改成 int,并引入 lockinit(9) 新标志之后的 8.0-CURRENT。

800025

March 8, 2008

fcntl(2) 引入 F_DUP2FD 之后的 8.0-CURRENT。

800026

March 12, 2008

修改了 cv_broadcastpri 优先权参数之后的 8.0-CURRENT,比如 0 表示无优先权。

800027

March 24, 2008

修改了 bpf 监测 ABI, 加入了 zerocopy bpf buffer 之后的 8.0-CURRENT。

800028

March 26, 2008

为 flock 结构增加了 l_sysid 之后的 8.0-CURRENT。

800029

March 28, 2008

重新整合了 BUF_LOCKWAITERS 函数并加入 lockmgr_waiters(9) 之后的 8.0-CURRENT。

800030

April 1, 2008

引入 rw_try_rlock(9)rw_try_wlock(9) 之后的 8.0-CURRENT。

800031

April 6, 2008

引入 lockmgr_rwlockmgr_args_rw 函数之后的 8.0-CURRENT。

800032

April 8, 2008

实现了 openat 和相关的系统调用,为 open(2) 引入了 O_EXEC 标志,和提供了相应的 linux 兼容的系统调用之后的 8.0-CURRENT。

800033

April 8, 2008

psm(4) 增加了原生的 write(2) 支持之后的 8.0-CURRENT。 现在任意命令可写入 /dev/psm%d 并读出状态。

800034

April 10, 2008

引入 memrchr 函数之后的 8.0-CURRENT。

800035

April 16, 2008

引入 fdopendir 函数之后的 8.0-CURRENT

800036

April 20, 2008

无线部分转向 multi-bss (也叫做 vaps) 支持之后的 8.0-CURRENT。

800037

May 9, 2008

加入多路由表支持 (也就是 setfib(1)、 stfib(2)) 后的 8.0-CURRENT。

800038

May 26, 2008

删去了 netatm 和 ISDN4BSD 后的 8.0-CURRENT。 这个版本也表示增加了 Compact C Type (CTF) 工具。

800039

June 14, 2008

移除 sgtty 之后的 8.0-CURRENT。

800040

June 26, 2008

增加了内核级 NFS lockd 客户端的 8.0-CURRENT。

800041

July 22, 2008

增加了 arc4random_buf(3) 和 arc4random_uniform(3) 之后的 8.0-CURRENT。

800042

August 8, 2008

增加了 cpuctl(4) 之后的 8.0-CURRENT。

800043

August 13, 2008

修改 bpf(4) 使用单一的设备节点而不是克隆之后的 8.0-CURRENT。

800044

August 17, 2008

在提交了 vimage 项目第一步之后的 8.0-CURRENT。把全局变量重命名为虚拟化带 V_ 前缀并用宏映射到原来的全局名称。

800045

August 20, 2008

引入 MPSAFE TTY 层之后的 8.0-CURRENT, 包括对相关驱动和工具的修改。

800046

September 8, 2008

将 amd64 架构上 GDT 拆分到不同 CPU 之后的 8.0-CURRENT。

800047

September 10, 2008

删去了 VSVTX、 VSGID 和 VSUID 之后的 8.0-CURRENT。

800048

September 16, 2008

将内核中 NFS 挂接部分的代码改为能够通过 nmount() iovec, 而不再是大的 nfs_args 结构体作为参数之后的 8.0-CURRENT。

800049

September 17, 2008

删去了 suser(9)suser_cred(9) 之后的 8.0-CURRENT。

800050

October 20, 2008

修改了缓冲存储器 API 之后的 8.0-CURRENT。

800051

October 23, 2008

删去了 MALLOC(9)FREE(9) 宏之后的 8.0-CURRENT。

800052

October 28, 2008

引入了 accmode_t 和重新命名 VOP_ACCES 'a_mode' 为 a_accmode 之后的 8.0-CURRENT。

800053

November 2, 2008

修改了 vfs_busy(9) 原型并引入了 MBF_NOWAIT 和 MBF_MNTLSTLOCK 标志之后的 8.0-CURRENT。

800054

November 22, 2008

增加了 buf_ring、 内存栅以及 ifnet 函数, 以方便撰写支持多硬件传输队列的驱动, 以及无锁环形缓冲实现的驱动程序, 并更高效地管理包队列功能之后的 8.0-CURRENT。

800055

November 27, 2008

引入了 hwpmc(4) 对于 Intel™ Core,Core2 和 Atom 的支持之后的 8.0-CURRENT。

800056

November 29, 2008

引入了 multi-/no-IPv4/v6 jail 之后的 8.0-CURRENT。

800057

December 1, 2008

将 ath hal 改为使用源代码之后的 8.0-CURRENT。

800058

December 12, 2008

引入了 VOP_VPTOCNP 操作之后的 8.0-CURRENT。

800059

December 15, 2008

引入了新的 arp-v2 重写之后的 8.0-CURRENT。

800060

December 19, 2008

引入了 makefs 之后的 8.0-CURRENT。

800061

January 15, 2009

引入了 TCP Appropriate Byte Counting 之后的 8.0-CURRENT。

800062

January 28, 2009

删去了 minor()、 minor2unit()、 unit2minor() 等之后的 8.0-CURRENT。

800063

February 18, 2009

在 GENERIC 配置中改为使用 USB2 栈之后的 8.0-CURRENT; 这个数值同时也标志新增了 fdevname(3)。

800064

February 23, 2009

将 USB2 栈移动并替换 dev/usb 之后的 8.0-CURRENT。

800065

February 26, 2009

在对 libmp(3) 中所有函数更名之后的 8.0-CURRENT。

800066

February 27, 2009

更改了 USB devfs 管理和布局之后的 8.0-CURRENT。

800067

February 28, 2009

加入了 getdelim(), getline(), stpncpy(), strnlen(), wcsnlen(), wcscasecmp(), 和 wcsncasecmp() 之后的 8.0-CURRENT。

800068

March 2, 2009

在 usbhub devclass 更名为 uhub 之后的 8.0-CURRENT。

800069

March 9, 2009

重命名 libusb20.so.1 为 libusb.so.1 之后的 8.0-CURRENT。

800070

March 9, 2009

合并 IGMPv3 和 Source-Specific Multicast (SSM) 入 IPv4 栈之后的 8.0-CURRENT。

800071

March 14, 2009

为 gcc 打上了在 c99 和 gnu99 模式中使用 C99 inline 语义补丁之后的 8.0-CURRENT。

800072

March 15, 2009

移除了 IFF_NEEDSGIANT 标志; 不再支持非线程安全的网络设备驱动之后的 8.0-CURRENT。

800073

March 18, 2009

实现了 rpath 动态字符替换之后的 8.0-CURRENT.

800074

March 24, 2009

引入了 tcpdump 4.0.0 和 libpcap 1.0.0 之后的 8.0-CURRENT。

800075

April 6, 2009

修改了 structs vnet_net、 vnet_inet 和 vnet_ipfw 结构布局之后的 8.0-CURRENT。

800076

April 9, 2009

为 dummynet 新增了延迟评估工具之后的 8.0-CURRENT。

800077

April 14, 2009

删去了 VOP_LEASE() 和 vop_vector.vop_lease 之后的 8.0-CURRENT

800078

April 15, 2009

在 struct rt_metrics 和 struct rt_metrics_lite 中添加了 rt_weight 字段, 导致其结构发生变化之后的 8.0-CURRENT。 此后 RTM_VERSION 增加, 但又回退了。

800079

April 15, 2009

在 struct route 和 struct_in6 中添加了 struct llentry 指针之后的 8.0-CURRENT。

800080

April 15, 2009

改变了 struct inpcb 布局之后的 8.0-CURRENT。

800081

April 19, 2009

改变了 malloc_type 布局之后的 8.0-CURRENT。

800082

April 21, 2009

改变了 struct ifnet 布局, 并增加了 if_ref() 和 if_rele() 引用计数维护功能之后的 8.0-CURRENT。

800083

April 22, 2009

实现了底层蓝牙 HCI API 之后的 8.0-CURRENT。

800084

April 29, 2009

修改了 IPv6 SSM 和 MLDv2 之后的 8.0-CURRENT。

800085

April 30, 2009

启用了包括一个活跃映像的 VIMAGE 内核支持之后的 8.0-CURRENT。

800086

May 8, 2009

为 patch(1) 增加任意长输入行支持之后的 8.0-CURRENT。

800087

May 11, 2009

修改了一些 VFS KPI 之后的 8.0-CURRENT。 VFS 的 FSD 部分中删去了线程参数。 VFS_* 函数并不需要这些上下文信息, 因为它总是与 curthread 相关。 在某些特殊情况中, 则保留了原先的行为。

800088

May 20, 2009

对 net80211 监视模式进行调整之后的 8.0-CURRENT。

800089

May 23, 2009

增加了 UDP 控制块支持之后的 8.0-CURRENT。

800090

May 23, 2009

将网络接口克隆虚拟化之后的 8.0-CURRENT。

800091

May 27, 2009

增加了层次式 jail 并取消全局 securelevel 之后的 8.0-CURRENT。

800092

May 29, 2009

修改了 sx_init_flags() KPI 之后的 8.0-CURRENT。 SX_ADAPTIVESPIN 退役, 而新增的 SX_NOADAPTIVE 标志则表达相反语义。

800093

May 29, 2009

为 struct mount 增加 mnt_xflag 之后的 8.0-CURRENT。

800094

May 30, 2009

新增了 VOP_ACCESSX(9) 之后的 8.0-CURRENT。

800095

May 30, 2009

调整轮询 KPI (polling KPI) 之后的 8.0-CURRENT。 轮询处理程序会返回处理过的包的数量。 新增的 IFCAP_POLLING_NOCOUNT 则表示返回值不重要, 并跳过计数。

800096

June 1, 2009

对新的 netisr 进行了改进, 并调整了保存和存取 FIB 方式之后的 8.0-CURRENT。

800097

June 8, 2009

引入了 vnet 析构挂钩和相关基础设施之后的 8.0-CURRENT。

800097

June 11, 2009

引入了 netgraph 输出到输入路径调用检测和排队机制, 并调整了 struct thread 布局之后的 8.0-CURRENT。

800098

June 14, 2009

引入了 OpenSSL 0.9.8k 之后的 8.0-CURRENT。

800099

June 22, 2009

更新了 NGROUPS 并将路由虚拟化挪到它自己的 VImage 模块之后的 8.0-CURRENT。

800100

June 24, 2009

修改了 SYSVIPC ABI 之后的 8.0-CURRENT。

800101

June 29, 2009

删去了与网络接口一一对应的 /dev/net/* 字符设备之后的 8.0-CURRENT。

800102

July 12, 2009

在 struct sackhint、 struct tcpcb 以及 struct tcpstat 上增加占位元素之后的 8.0-CURRENT。

800103

July 13, 2009

将 TOE 驱动接口中的 struct tcpopt 替换为 TCP syncache 中的 struct toeopt 之后的 8.0-CURRENT。

800104

July 14, 2009

新增了基于 linker-set 的 per-vnet 分配器之后的 8.0-CURRENT。

800105

July 19, 2009

递增了所有未使用符号版本的动态连接库版本之后的 8.0-CURRENT。

800106

July 24, 2009

引入 VM 对象类型 OBJT_SG 之后的 8.0-CURRENT。

800107

August 2, 2009

通过加入 newbus sxlock 使 newbus 子系统不再使用 Giant, 以及 8.0-RELEASE。

800108

November 21, 2009

实现了 EVFILT_USER kevent 过滤器之后的 8.0-STABLE。

800500

January 7, 2010

pkg_add -r 使用 packages-8-stable 的 __FreeBSD_version 版本变化的 8.0-STABLE。

800501

January 24, 2010

调整了 scandir(3)alphasort(3) 函数原型, 使其符合 SUSv4 之后的 8.0-STABLE。

800502

January 31, 2010

新增了 sigpause(3) 之后的 8.0-STABLE。

800503

February 25, 2010

新增了用于管理网络接口说明的 SIOCGIFDESCR 和 SIOCSIFDESCR ioctl 之后的 8.0-STABLE。 这组接口受到了 OpenBSD 的启发。

800504

March 1, 2010

MFC 了 x86emu, 来自 OpenBSD 的 x86 CPU 实模式模拟器之后的 8.0-STABLE。

800505

May 18, 2010

MFC 了添加 liblzma, xz, xzdec 以及 lzmainfo 之后的 8.0-STABLE。

801000

June 14, 2010

8.1-RELEASE

801500

June 14, 2010

8.1-RELEASE 之后的 8.1-STABLE。

801501

November 3, 2010

用于 PL_FLAG_SCE/SCX/EXEC/SI 的 struct sysentvec 的 KBI 以及 用于 ptrace(PT_LWPINFO) 的 pl_siginfo 的 KBI 改变之后的 8.1-STABLE。

802000

December 22, 2010

8.2-RELEASE

802500

December 22, 2010

8.2-RELEASE 之后的 8.2-STABLE。

802501

February 28, 2011

合并了 DTrace 变动, 包含用户态跟踪支持之后的 8.2-STABLE。

802502

March 6, 2011

在 libm 中合并了 log2 和 log2f 之后的 8.2-STABLE。

802503

May 1, 2011

将 gcc 升级至 FSF gcc-4_2-branch 最后一个 GPLv2 版本之后的 8.2-STABLE。

802504

May 28, 2011

引入模块化拥塞控制支持基础设施和 KPI 之后的 8.2-STABLE。

802505

May 28, 2011

引入了 Hhook 和 Khelp KPI 之后的 8.2-STABLE。

802506

May 28, 2011

在 tcpcb 结构中增加 OSD 之后的 8.2-STABLE。

802507

June 6, 2011

引入 ZFS v28 之后的 8.2-STABLE。

802508

June 8, 2011

删去了 sv_schedtail struct sysvec 方法之后的 8.2-STABLE。

802509

July 14, 2011

在 binutils 中合并了 SSE3 支持之后的 8.2-STABLE。

802510

July 19, 2011

rfork(2) 添加了 RFTSIGZMB 标志之后的 8.2-STABLE。

900000

August 22, 2009

9.0-CURRENT。

900001

September 8, 2009

引入了 x86emu, 来自 OpenBSD 的 x86 CPU 实模式模拟器之后的 9.0-CURRENT。

900002

September 23, 2009

实现了 EVFILT_USER kevent 过滤器之后的 9.0-CURRENT。

900003

December 2, 2009

新增了 sigpause(3) 以及 csu 的 PIE 支持之后的 9.0-CURRENT。

900004

December 6, 2009

新增了 libulog 及其 libutempter 兼容接口之后的 9.0-CURRENT。

900005

December 12, 2009

新增了用于查询指定休眠队列上等待者数量的 sleepq_sleepcnt() 函数之后的 9.0-CURRENT。

900006

January 4, 2010

调整了 scandir(3)alphasort(3) 函数原型, 使其符合 SUSv4 之后的 9.0-CURRENT。

900007

January 13, 2010

删去了 utmp(5) 并增加了 utmpx (参阅 getutxent(3)) 以改善用户登录日志和系统事件支持之后的 9.0-CURRENT。

900008

January 20, 2010

9.0-CURRENT 引入了 BSD 授权的 bc/dc 并将 GNU bc/dc 标注为过时之后的 9.0-CURRENT。

900009

January 26, 2010

新增了用于管理网络接口说明的 SIOCGIFDESCR 和 SIOCSIFDESCR ioctl 之后的 9.0-CURRENT。 这组接口受到了 OpenBSD 的启发。

900010

March 22, 2010

引入了 zlib 1.2.4 之后的 9.0-CURRENT。

900011

April 24, 2010

添加了 soft-updates 日志功能之后的 9.0-CURRENT。

900012

May 10, 2010

添加了 liblzma, xz, xzdec 以及 lzmainfo 之后的 9.0-CURRENT。

900013

May 24, 2010

添加了针对 linux(4) 的 USB 修正之后的 9.0-CURRENT。

900014

Jun 10, 2010

添加了 Clang 之后的 9.0-CURRENT。

900015

July 22, 2010

引入了 BSD grep 之后的 9.0-CURRENT。

900016

July 28, 2010

在 struct malloc_type_internal 中加入了 mti_zone 之后的 9.0-CURRENT。

900017

August 23, 2010

默认 grep 改回使用 GNU grep 并增加 WITH_BSD_GREP 开关之后的 9.0-CURRENT。

900018

August 24, 2010

pthread_kill(3) 产生的信号在 si_code 中改为使用 SI_LWP 标记之后的 9.0-CURRENT。 之前, si_code 对应的标志为 SI_USER。

900019

August 28, 2010

mmap(2) 新增了 MAP_PREFAULT_READ 标志之后的 9.0-CURRENT。

900020

September 9, 2010

为 sbuf 增加了 drain 功能并改变了 struct sbuf 布局之后的 9.0-CURRENT。

900021

September 13, 2010

DTrace 增加用户态跟踪支持之后的 9.0-CURRENT。

900022

October 2, 2010

新增了 BSDL man 工具, 并淘汰 GNU/GPL man 工具之后的 9.0-CURRENT。

900023

October 11, 2010

引入 20101010 git 快照版本 xz 之后的 9.0-CURRENT。

900024

November 11, 2010

将 libgcc.a 替换为 libcompiler_rt.a 之后的 9.0-CURRENT。

900025

November 12, 2010

引入了模块化拥塞控制之后的 9.0-CURRENT。

900026

November 30, 2010

引入串行管理协议 (SMP) 直通, 以及与之对应的 CAM CCB XPT_SMP_IO 和 XPT_GDEV_ADVINFO 之后的 9.0-CURRENT。

900027

December 5, 2010

在 libm 中增加 log2 之后的 9.0-CURRENT。

900028

December 21, 2010

添加了 Hhook (Helper Hook)、 Khelp (Kernel Helpers) 和 Object Specific Data (OSD) KPI 之后的 9.0-CURRENT。

900029

December 28, 2010

修改 TCP 协议栈使其允许 Khelp 模块通过 helper hook 指针, 与 TCP 控制块交互并保存连接数据之后的 9.0-CURRENT。

900030

January 12, 2011

将 libdialog 更新至版本 20100428 之后的 9.0-CURRENT。

900031

February 7, 2011

添加了 pthread_getthreadid_np(3) 之后的 9.0-CURRENT。

900032

February 8, 2011

删除了 uio_yield 函数原型和符号之后的 9.0-CURRENT。

900033

February 18, 2011

将 binutils 更新至 2.17.50 之后的 9.0-CURRENT。

900034

March 8, 2011

修改了 struct sysvec (sv_schedtail) 之后的 9.0-CURRENT。

900035

March 29, 2011

将基本系统中 gcc 和 libstdc++ 升级至最后的 GPLv2 授权版本之后的 9.0-CURRENT。

900036

April 18, 2011

在基本系统中删去了 libobjc 和 Objective-C 支持之后的 9.0-CURRENT。

900037

May 13, 2011

在基本系统中引入了 libprocstat(3) 函数库以及 fuser(1) 工具之后的 9.0-CURRENT。

900038

May 22, 2011

为 VFS_FHTOVP(9) 添加锁标志参数之后的 9.0-CURRENT。

900039

June 28, 2011

引入了来自 OpenBSD 4.5 的 pf 之后的 9.0-CURRENT。

900040

July 19, 2011

将 amd64 和 ia64 平台上的 MAXCPU 提高到 64, 并把 XLP (mips) 上的值提高到 128 之后的 9.0-CURRENT。

900041

August 13, 2011

实现了 Capsicum capabilities 之后的 9.0-CURRENT。 fget(9) 新增了权限参数。

900042

August 28, 2011

提高修改过 ABI 的动态连接库版本号之后的 9.0-CURRENT。

900043

September 2, 2011

增加了对不支持 SCSI 快取缓存同步功能的 USB 大容量存储设备自动检测功能之后的 9.0-CURRENT。

900044

September 10, 2011

重构了 auto-quirk 之后的 9.0-CURRENT。

900045

Oct 13, 2011

将非兼容性系统调用入口点全部增加 sys_ 前缀之后的 9.0-CURRENT。

请注意, 2.2.5-RELEASE 之后有一段时间的 2.2-STABLE 会声称自己是 "2.2.5-STABLE"。 这种模式的版本号表示的是年月。 但随后, 我们决定, 从 2.2 开始, 将它改为更为简洁的 主/次 版本号的形式来命名版本。 这是因为并行地在多个分支上进行开发, 使得通过实际的发布日期来区分不同的版本变得不再现实。 如果您正在做新的 port, 应该不需要担心较早的 -CURRENT; 在此列出仅供参考。

12.6. 在 bsd.port.mk 之后写一些内容

不要在 .include <bsd.port.mk> 这行之后增加任何内容。 这通常可以通过在您的 Makefile 中间的某处引用 bsd.port.pre.mk, 并在结尾的地方引用 bsd.port.post.mk 来避免。

只能够采用 bsd.port.pre.mk/bsd.port.post.mkbsd.port.mk 两种写法之一; 任何时候都不要同时使用两种写法。

bsd.port.pre.mk 只定义了很少的变量, 它们可以在 Makefile 中用于进行一些测试, 而 bsd.port.post.mk 则定义了所有其它的变量。

下面是一些由 bsd.port.pre.mk 定义的比较重要的变量 (这并不是一份完整的列表, 您可以阅读 bsd.port.mk 以获得全部变量的名字)。

变量描述

ARCH

uname -m 输出得到的硬件架构的名字 (例如, i386)

OPSYS

uname -s 返回的操作系统类型 (例如, FreeBSD)

OSREL

操作系统的版本号 (例如 2.1.52.2.7)

OSVERSION

操作系统的版本号的数值形式; 它等于 __FreeBSD_version

PORTOBJFORMAT

系统默认的执行文件格式 (elfaout; 请注意, "现代的" FreeBSD 版本中, aout 已在淘汰之列。)

LOCALBASE

"local" 目录的根 (例如, /usr/local/)

PREFIX

port 应被安装到哪里 (参见 关于 PREFIX 的更多说明)。

如果您需要定义 USE_IMAKEUSE_X_PREFIX, 或 MASTERDIR 这些变量, 则应在引用 bsd.port.pre.mk 之前完成。

下面是一些在引用 bsd.port.pre.mk 之后可以进行的判断:

# 如果 perl5 已经在系统中提供, 则不必编译 lang/perl5
.if ${OSVERSION} > 300003
BROKEN= perl is in system
.endif

# ELF 只使用一个 shlib 版本
.if ${PORTOBJFORMAT} == "elf"
TCL_LIB_FILE=  ${TCL_LIB}.${SHLIB_MAJOR}
.else
TCL_LIB_FILE=  ${TCL_LIB}.${SHLIB_MAJOR}.${SHLIB_MINOR}
.endif

# 软件会自动为 ELF 创建符号链接, 但 a.out 则需要另行创建
post-install:
.if ${PORTOBJFORMAT} == "aout"
       ${LN} -sf liblinpack.so.1.0 ${PREFIX}/lib/liblinpack.so
.endif

您还记得应该在 BROKEN=TCL_LIB_FILE= 后面使用制表符, 而不是空格, 对吧? :-)

12.7. 在 wrapper 脚本中使用 exec 语句

如果 port 安装了用以启动其他程序的脚本, 并且运行其他程序是这些脚本的最后一项操作, 请务必使用 exec 语句来运行这些程序, 例如:

#!/bin/sh
exec %%LOCALBASE%%/bin/java -jar %%DATADIR%%/foo.jar "$@"

使用 exec 语句表示执行指定的程序来取代 shell 进程。 如果省略了 exec, 则 shell 进程会一直在内存中, 从而不必要地消耗了额外的系统资源。

12.8. 理性行事

任何 Makefile 都应该简单并理性地行事。 如果您能让其中的条目更为简单和易读, 一定要这样做。 例如, 使用 make 提供的 .if 结构, 而不要使用 shell 的 if, 只要能重定义 EXTRACT* 就不要重载 do-extract, 尽量使用 GNU_CONFIGURE 而不是 CONFIGURE_ARGS += --prefix=${PREFIX}

如果您在尝试做什么事情的时候发现不得不写大量的代码, 请回过头来复审一下 bsd.port.mk, 看看是否有您正打算做的事情的现成实现。 尽管读起来可能很费劲, 但有很多貌似很难的问题, 在 bsd.port.mk 中都给出了十分简便的解决方案。

12.9. 遵循 CCCXX 设置

port 应遵循 CCCXX 变量的设置。 这也就是说, port 不应使用绝对的方式来设置这个变量的值, 而罔顾已经存在的设置; 与此相反, 它应该在其值后加入需要的其它值。 这样, 就可以设置全局的联编选项, 令其影响所有的 port 联编过程了。

如果实在无法这样做, 请在 Makefile 中加入 NO_PACKAGE=ignores cflags

下面的 Makefile 实例给出了如何遵循 CCCXX 变量的设置。 注意这里用到的 ?=

CC?= gcc
CXX?= g++

下面则是没有遵循 CCCXX 的例子:

CC= gcc
CXX= g++

在 FreeBSD 系统中, CCCXX 这两个变量都可以在 /etc/make.conf 中自行定义。 第一个例子只有在 /etc/make.conf 中没有定义时才对这两个变量进行定义, 从而保持了系统范围的配置。 而第二个例子则会覆盖任何现有的配置。

12.10. 遵循 CFLAGS

您的 port 应遵循 CFLAGS 变量的设置。 这也就是说, port 不应使用绝对的方式来设置这个变量的值, 而罔顾已经存在的设置; 与此相反, 它应该在其值后加入需要的其它值, 这样, 就可以设置全局的联编选项, 令其影响所有的 port 联编过程了。

如果实在无法这样做, 请在 Makefile 中加入 NO_PACKAGE=ignores cflags

下面的 Makefile 例子, 可以帮助我们理解如何遵循 CFLAGS 的设置。 注意所用的 +=

CFLAGS+= -Wall -Werror

下面是一个未能遵循 CFLAGS 设置的例子:

CFLAGS= -Wall -Werror

一般来说, CFLAGS 在 FreeBSD 系统中是在 /etc/make.conf 里配置的。 第一个例子在 CFLAGS 变量中增加了一些参数, 并保持了所有系统预定义的标志。 而第二个例子, 则会覆盖掉任何先前定义的参数。

您应从第三方软件的 Makefile 中去掉特殊的优化设置。 系统的 CFLAGS 给出了全系统范围内的优化设置参数。 下面是一个未经修改的 Makefile 实例:

CFLAGS= -O3 -funroll-loops -DHAVE_SOUND

如果使用系统的优化参数, 则 Makefile 中的设置应该类似下面这样:

CFLAGS+= -DHAVE_SOUND

12.11. 线程库

在 FreeBSD 上, 线程库必须通过特殊的连接器参数 -pthread 连接到可执行文件。 如果 port 一定要直接连接 -lpthread-lc_r, 则应将其改为使用由 ports 框架提供的 PTHREAD_LIBS。 这个变量的值通常是 -pthread, 但在某些特定平台上的 FreeBSD 版本中, 它可能是其它值, 因此, 不要将 -pthread 硬编码到您的补丁中, 而应使用 PTHREAD_LIBS 变量。

如果设置了 PTHREAD_LIBS, 而在联编时出现 unrecognized option '-pthread' 这样的错误, 可能需要通过将 CONFIGURE_ENV 设为 LD=$Cheng Cui <cc@FreeBSD.org> 来使用 gcc 作为连接器。 -pthread 这一选项并不为 ld 所直接支持。

12.12. 反馈

如果进行了一些很好的修改和补丁, 一定要把它们发回给原作者, 或维护者, 以便在下一版本的代码中包含它们。 这会让您在软件发布新版本的时候变得轻松一些。

12.13. README.html

不要包含 README.html 文件。 这个文件并非 CVS 代码库中的一部分, 它是由 make readme 命令生成的。

12.14. 使用 BROKENFORBIDDENIGNORE 阻止用户安装 port

某些时候会需要阻止用户安装某个 port。 想要告诉用户某个 port 不应被安装, 有许多可以在 port 的 Makefile 中使用的 make 变量。 下列 make 的值, 将是在用户试图安装时得到的提示信息。 务请使用正确的 make 变量, 因为每一个都表达了截然不同的意义, 而且许多自动化系统, 例如 port 联编集群FreshPorts, 以及 portsmon, 都依赖于 Makefile 的正确性。

12.14.1. 变量

  • BROKEN 专门用于表达目前无法正确编译、 安装或卸载这类问题。 如果是临时性的问题, 则可以使用它。

    如果进行了相关的配置, 则联编集群仍将尝试联编它, 以确认导致问题的深层问题是否已被解决。 (不过, 一般情况下, 联编集群并不会这样做。)

    举例来说, 当 port 发生下述情况时, 应使用 BROKEN

    • 无法编译 (does not compile)

    • 无法正确进行配置或安装操作

    • ${LOCALBASE} 以外的地方安装文件

    • 卸载时无法删除所安装的全部文件 (不过, 留下用户改过的文件可接受的, 因为可能希望这样作)

  • FORBIDDEN 用于表示 ports 中包含安全漏洞, 或者可能会给安装了这个 port 的 FreeBSD 系统带来严重的安全隐患 (例如: 一个很不安全的程序, 或包含了能够被轻易攻陷的服务的软件)。 如果发现了安全漏洞, 而其作者没有发布升级版本, 则应立即把那个 port 标记为 FORBIDDEN。 理想情况下, 包含安全漏洞的 port 应被尽快升级, 以便减少包含漏洞的 FreeBSD 主机的数量 (我们希望保持良好的安全记录), 然而, 有时在安全漏洞的披露和软件更新之间可能会有一个间隔, 此时应予以说明。 除了安全之外, 请不要以任何其它理由将 port 标记为 FORBIDDEN

  • IGNORE 用来表示 port 由于某些其它原因不应予以联编。 如果认为发生了结构性的问题, 则应使用它。 任何情况下, 联编集群都不会联编标记为 IGNORE 的 port。 以下是使用 IGNORE 的一些例子:

    • 能够编译但无法正常运行

    • 无法与运行的 FreeBSD 版本一同工作

    • 联编时需要 FreeBSD 内核的源代码, 但用户没有安装它们

    • 由于授权原因, 必须手工下载 distfile

    • 无法与的某个已安装的 port 一同工作 (例如, port 依赖于 www/apache21 而安装的则是 www/apache13)

    如果 port 与某个已经安装的 port 冲突 (例如, 它们在同一位置安装同名但功能不同的文件), 则应 使用 CONFLICTS 来标记它CONFLICTS 将自动地设置 IGNORE

  • 如果 port 只应在某些平台上标记为 IGNORE, 还有另外两个方便使用的 IGNORE 变量可供选择: ONLY_FOR_ARCHSNOT_FOR_ARCHS。 例如:

    ONLY_FOR_ARCHS= i386 amd64
    NOT_FOR_ARCHS= alpha ia64 sparc64

    可以使用 ONLY_FOR_ARCHS_REASONNOT_FOR_ARCHS_REASON 来配置定制的 IGNORE 消息。 此外, 还可以使用 ONLY_FOR_ARCHS_REASONARCH_NOT_FOR_ARCHS_REASONARCH_ 来分别指定与具体平台有关的信息。

  • 如果 port 会下载并安装用于 i386 的预编译二进制文件, 则应设置 IA32_BINARY_PORT。 如果设置了这个变量, 则系统会检查是否已经在 /usr/lib32 目录中安装了 IA32 版本的函数库, 以及内核是否提供了 IA32 兼容支持。 如果这些依赖条件不满足, 则会自动设置 IGNORE

12.14.2. 实现说明

这些字串不应使用引号括起来。 此外, 由于显示给用户的方式不同, 这些字串的措辞也应有所不同。 例如:

BROKEN= this port is unsupported on FreeBSD 5.x
IGNORE= is unsupported on FreeBSD 5.x

它们分别会在 make describe 时产生下面的输出:

===>  foobar-0.1 is marked as broken: this port is unsupported on FreeBSD 5.x.
===>  foobar-0.1 is unsupported on FreeBSD 5.x.

12.15. 使用 DEPRECATEDEXPIRATION_DATE 表示某个 port 将被删除

一定要记得 BROKENFORBIDDEN 只应作为当某个 port 无法正常工作时的临时解决方案。 永久性地坏掉了的 port 应被从 ports tree 中完全删除。

需要时还可以使用 DEPRECATEDEXPIRATION_DATE 来通知用户某个 port 不应被使用, 并即将被删除。 前一个变量用来表达为什么计划删除 port; 而后一个是则是一个 ISO 8601 格式的日期 (YYYY-MM-DD)。 两者都会向用户呈现。

也可以设置 DEPRECATED 而不给出 EXPIRATION_DATE (例如, 建议使用某个新版本的 port), 但反之则没有意义。

目前还没有确切的关于需要给出多少通知的政策。 当前的实践是, 对于与安全有关的问题为一个月, 而与联编有关的问题则为两个月。 这也让有兴趣的 committer 能够有一点时间来修正问题。

12.16. 避免使用 .error 结构

Makefile 中给出信号, 表示由于某种外界因素 (例如, 用户指定了无效的联编选项) 而无法安装的方法是将变量 IGNORE 设为一非空值。 这个值将被格式化, 并在用户执行 make install 是给出提示。

.error 实现这一目的是一种常见的误用。 这样做的问题是, 许多在 ports 树上运行的自动化工具会因此而失败。 最常见的情况见于联编 /usr/ports/INDEX 的过程 (参见 运行 make describe)。 然而, 即使十分普通的命令, 例如 make maintainer, 在这种情况下也会失败。 这是不可接受的。

例 1. 怎样避免使用 .error

考虑有人在 make.conf 中设置了

USE_POINTYHAT=yes

的情形。 接下来的例子中, 第一个 Makefile 中的问题将导致 make index 失败, 而第二个则不会:

.if USE_POINTYHAT
.error "POINTYHAT is not supported"
.endif
.if USE_POINTYHAT
IGNORE=POINTYHAT is not supported
.endif

12.17. 对于 sysctl 的使用

除了在 target 中之外, 是不鼓励使用 sysctl 的。 这是因为计算 makevar, 例如在 make index 中所进行的那种, 都不得不运行一条命令, 这会使这一操作变得更慢。

在使用 sysctl(8) 时, 务必通过 SYSCTL 变量来进行, 因为此变量将展开成命令的完整路径, 并且用户可以根据需要另行指定。

12.18. 重新发布的 distfiles

有时, 一些软件的作者会修改业已发布的 distfile 的内容, 而并不修改文件名。 这种情况下, 您需要验证这些变动是来自软件作者的官方改动。 在过去, 曾经发生过下载服务器上的 distfile 被悄悄换成注入过恶意代码的版本, 并给用户安全造成威胁或损害的事情。

您应保留一份旧的 distfile, 并下载一份新的, 分别展开, 用 diff(1) 来对比其内容。 如果没有发现可疑的变动, 就可以更新 distinfo 了。 请务必在您的 PR 或 commit log 中对这些差异进行描述, 以便让别人了解您已经仔细对比过差异, 并确认没有问题了。

除此之外, 也可以联系软件的作者, 以确认这些修改是否是他们做的。

12.19. 杂记

需要仔细地反复检查 pkg-descrpkg-plist 这两个文件。 如果您正在复审一个 port, 并认为这两个文件应该改进, 请一定要这样做。

请不要在系统中复制多份 GNU General Public License。

一定要非常小心地处理法律问题! 不要让我们发布没有得到合法授权的软件!


Last modified on: March 9, 2024 by Danilo G. Baio