5.3. 分类
上一页 | 第 5 章 配置 Makefile | 下一页

## 5.3. 分类

### 5.3.1. `CATEGORIES` (所属分类)

在包制作完成之后， 它会被放在 `/usr/ports/packages/All`， 并建立一系列来自 `/usr/ports/packages` 下子目录的符号连接。 这些子目录的名称是由 `CATEGORIES` 指定的。 这将方便于那些用户在 FTP 站点或 CDROM 的一大堆包里面寻找自己想要的包。 请查看一下 目前的分类表， 并找出一个适合您 port 的分类。

此列表也会决定您的 port 在 port 目录中的位置。 如果您在这里设定了 1 个以上的分类， 则认为您 port 文件应放到以第一个分类命名的子目录中。 请参阅 后面 关于如何选择正确分类的更多讨论。

### 5.3.2. 目前的分类表

这是目前 port 中的分类。 那些用星号 (`*`) 标记的是 虚拟分类 — 它们在ports树里没有相应的子目录， 因而只用来做为次要的分类， 用以方便搜索。

### 注意:

对于非虚拟的分类来说， 您会看到在相对应子目录中的 `Makefile` 里有写在 `COMMENT` 里的单行描述。

分类 | 描述 | 注意事项
--- | --- | ---
`accessibility` | 帮助残障人士的 port。 |
`afterstep*` | 对于 AfterStep 窗口管理器的支持。 |
`arabic` | 阿拉伯语言支持。 |
`archivers` | 压缩与备份工具。 |
`astro` | 有关天文学的 port。 |
`audio` | 声音支持。 |
`benchmarks` | 测评程序。 |
`biology` | 生物学相关的软件。 |
`cad` | 计算机辅助设计工具。 |
`chinese` | 中文语言支持。 |
`comms` | 通讯软件。 | 大部分是用于串口通讯的。
`converters` | 字符编码转换。 |
`databases` | 数据库。 |
`deskutils` | 在发明计算机以前就已经在桌面上使用的东西。 |
`devel` | 程序开发工具。 | 不要把开发库放在这里 — 除非您再也找不到更合适的分类， 否则就不该放在这个分类里。
`dns` | DNS 相关的软件。 |
`docs*` | 有关 FreeBSD 文档的 Meta-ports。 |
`editors` | 通用编辑器。 | 有特殊用途的编辑器应该被置于相应的分类中 (比如， 数学-方程式 编辑器应该放在 `math` 分类里。
`elisp*` | Emacs-lisp相关的port。 |
`emulators` | 其它操作系统的模拟器。 | 终端模拟器 不应该 属于这个分类 — 基于 X 的应该放在 `x11` 而基于文本模式的应该放到 `comms` 或 `misc` 中去， 取决于具体的功能。
`finance` | 货币、 金融以及相关的应用程序。 |
`french` | 法语语言支持。 |
`ftp` | FTP 客户端和服务器端的程序。 | 如果您的 port 同时支持 FTP 和 HTTP 的话， 把它放进 `ftp` 并把 `www` 做为第二分类。
`games` | 游戏。 |
`geography*` | 与地理学有关的软件。 |
`german` | 德语语言支持。 |
`gnome*` | 关于 GNOME 项目的支持。 |
`gnustep*` | 与 GNUstep 桌面环境有关的软件。 |
`graphics` | 图形图象程序。 |
`hamradio*` | 业余无线电爱好者使用的软件。 |
`haskell*` | 有关 Haskell 编程语言的软件。 |
`hebrew` | 希伯来语语言支持。 |
`hungarian` | 匈牙利语语言支持。 |
`ipv6*` | IPv6 相关软件。 |
`irc` | IRC 相关程序 |
`japanese` | 日语语言支持。 |
`java` | 与 Java™ 编程语言有关的软件。 | `java` 分类对 port 而言不应是其唯一的分类。 除了直接与 Java 语言相关的 port 之外， 开发人员应尽量避免使用 `java` 作为 port 的主分类。
`kde*` | K 桌面环境 (KDE) 相关的软件。 |
`kld*` | 可加载内核模块。 |
`korean` | 韩语语言支持。 |
`lang` | 编程语言。 |
`linux*` | Linux 相关的应用程序。 |
`lisp*` | 和 Lisp 编程语言有关的软件。 |
`mail` | 电子邮件软件。 |
`math` | 数值计算和其它数学相关的软件。 |
`mbone*` | MBone 应用程序。 |
`misc` | 各式各样的实用程序。 | 通常不属于其它的任何分类， 如果可能的话， 尽量为您的 port 选择 `misc` 以外的分类， 因为在这里的 port 比较容易被人忽略。
`multimedia` | 多媒体软件。 |
`net` | 各种网络相关的软件。 |
`net-im` | 即时消息软件。 |
`net-mgmt` | 网络管理软件。 |
`net-p2p` | 对等网 (Peer to peer network) 应用程序。 |
`news` | USENET新闻组相关软件。 |
`palm` | Palm™ 系列相关软件。 |
`parallel*` | 并行计算相关软件。 |
`pear*` | Pear PHP 架构相关软件。 |
`perl5*` | Perl5 相关的软件。 |
`plan9*` | Plan9 相关程序。 |
`polish` | 波兰语语言语言支持。 |
`ports-mgmt` | 用于管理、 安装和开发 FreeBSD ports 和预编译包的 port。 |
`portuguese` | 葡萄牙语语言支持。 |
`print` | 打印相关的软件。 | 桌面出版工具 (打印预览工具等等) 也可以放在此分类里。
`python*` | Python 编程语言相关的软件。 |
`ruby*` | Ruby 编程语言相关的软件。 |
`rubygems*` | 移植版本的 RubyGems 软件包。 |
`russian` | 俄语语言支持。 |
`scheme*` | 与 Scheme 语言有关的 port。 |
`science` | 科学相关但不适合放在 `astro`、 `biology`， 以及 `math` 分类的 port。 |
`security` | 安全相关的实用程序。 |
`shells` | 命令行 shell。 |
`spanish*` | 西班牙语支持 |
`sysutils` | 系统相关的实用程序。 |
`tcl*` | 依赖于 Tcl 运行的 port。 |
`textproc` | 文本处理的实用程序。 | 这个分类并不适合于那些应该放到 `print` 的桌面出版工具。
`tk*` | 依赖于 Tk 运行的 port。 |
`ukrainian` | 乌克兰语语言支持。 |
`vietnamese` | 越南语语言支持。 |
`windowmaker*` | WindowMaker 窗口管理器的相关支持。 |
`www` | Word Wide Web的相关软件。 | HTML语言相关的支持也可以放在这个分类里。
`x11` | X Window System以及相关软件。 | 这个分类是给那些直接支持X Window System 的软件的。 不要把常规的 X 应用程序也放进这里； 它们中的大多数都应被归类到 `x11-*` (参见下文)。 如果您的 port 是 X 应用程序， 应定义 `USE_XLIB` (使用 `USER_IMAKE` 隐含包括它)， 然后把它放到合适的分类里。
`x11-clocks` | X11 下的时钟程序。 |
`x11-drivers` | X11 驱动程序。 |
`x11-fm` | X11 下的文件管理器。 |
`x11-fonts` | X11 下的字体以及相关工具。 |
`x11-servers` | X11 服务器。 |
`x11-themes` | X11 主题。 |
`x11-toolkits` | X11 工具包。 |
`x11-wm` | X11 窗口管理器。 |
`xfce*` | 与 Xfce 桌面环境有关的 port。 |
`zope*` | Zope 相关的支持。 |

### 5.3.3. 选择正确的分类

由于不少分类是重复的， 您通常在用哪个分类作为您 port 的主分类上做出选择。 下面有几条规则能帮您解决这个问题。 这是一个带优先级的表， 按优先级降序罗列：

- 第一个分类必须是个物理的分类 (参阅 前面)。 这对于制作包是必要的。 虚拟分类和物理分类可能在包制作完成后混合在一起。

- 对于特定语言的分类通常放在第一位。 例如， 如果您的 port 会安装一些 X11 的日文字体， 那么 `CATEGORIES`那行 就应该是 `japanese x11-fonts`。

- 有特定意义的分类应当被列在无特定意义的前面。 例如， HTML 编辑器应该是这样的 `www editors`， 而不是其它的什么。 同样地， 您不应该列出 `net`， 如果 port 属于 `irc`、 `mail`、 `news`、 `security`， 或是 `www`， 因为 `net` 可以表示它们的超集。

- 只有当主要的分类是一门自然语言的时候， `x11` 能被做为第二分类。 需要特别指出的是， 您不应把 X 的应用程序也归类为 `x11`。

- Emacs 模式应当于相应的应用程序放在同一个分类里， 而不是 `editors` 分类。 举例来说， 一个用于编辑某种编程语言源代码的 Emacs 模式应该被归为 `lang` 一类。

- 需要安装可加载内核模块的 port 应在其 `CATEGORIES` 中归入虚拟分类 `kld`。

- `misc` 分类的 port 不能有其它非虚拟的分类。 如果您在您的 `CATEGORIES` 里设了 `misc` 和另外的分类， 那意味着可以安全地删除 `misc` 并把 port 放到其它的子目录中了！

- 如果您的 port 确实不属于现有的分类， 才把它放到 `misc`。

如果您不能确定使用哪个分类， 请在您提交的 send-pr(1) 里加上一行注释， 这样我们就能在导入进 port 树之前讨论一下。 如果您是 committer， 发一份备忘到 FreeBSD ports 邮件列表 先讨论一下。 很多情况是新的 port 被加到错误的分类里， 然后又立即被移走。这会造成源代码库不必要和不良的膨胀。

### 5.3.4. 如何提议建立新的分类

由于 Ports Collection 在持续增长， 已经引入了许多新的分类。 新的分类既可以是 虚拟的 分类 — 这些分类在整个 ports 目录中没有属于自己的子目录 — 或 物理的 分类 — 它们有自己的子目录。 接下来我们将讨论与建立新的物理分类有关的事项， 以便帮助您理解如何提议建立新的分类。

我们目前的做法是避免建立新的物理分类， 除非有非常多的 port 应被归入这一分类， 或者 port 属于某一特定的小团体 (例如， 与某种人类语言相关)， 或两者皆是。

这样做的原因是这类修改会让 committer 和用户都不得不进行 许多工作 来在 Ports Collection 进行或追踪修改。 此外， 提议新的分类通常都会引起争论。 (可能这是因为关于某个分类是否 “太大” 一直没有非常一致的意见的缘故， 另一方面， 分类是否能够能够有助于浏览 (以及多少个分类是合适的)， 等等， 也都是问题。)

下面是具体的步骤：

1. 在 FreeBSD ports 邮件列表 提议新的分类。 您应提供建立新分类的详细依据， 包括为什么认为现有的分类不够， 以及希望移动位置的一系列 port 的名字。 (如果有尚在 GNATS 而未 commit 的 port， 也应一一列出。) 如果您是相关 port 的监护人或提交者， 说明这一情况可能有助于您的提议得到通过。

2. 参与讨论。

3. 如果有人支持您的建议， 应及时提交一个 PR， 其中包括提议 PR 的理由， 以及需要移动的 port 的列表。 理想情况下， 这个 PR 也应包含针对下列文件的补丁：

   - 进行 repocopy 之后对 `Makefile` 进行的修改

   - 新分类的 `Makefile`

   - 旧分类的 `Makefile`

   - 依赖于旧 port 的 port 的 `Makefile`

   - (此外， 作为一项加分因素， 您还可以按照 Committer 指南所介绍的流程， 提供一些其它需要修改的文件。)

4. 由于这是一项影响 ports 基础设施的变动， 它不仅涉及 repo-copy 的使用， 而且也可能会影响联编集群的回归测试操作， 因此这类 PR 应分派给 Ports 管理团队 `<portmgr@FreeBSD.org>`。

5. 如果这一 PR 得到批准， 某个 committer 将按照在 Committer 指南 中所介绍的步骤来完成余下的工作。

提议新的虚拟分类和上述过程类似， 但会容易许多， 因为不需要实际地移动任何 port。 这种情况下， PR 应附带的补丁， 就只需要修改影响到的 port 的 Makefile， 以便在其中的 `CATEGORIES` 中加入新的分类了。

### 5.3.5. 如何提议对分类进行重新组织

有些时候会有一些人提议重新将分类组织为 2-层 或某种基于关键字的结构。 目前为止， 还没有进行任何相关的改变， 因为尽管这些修改比较容易完成， 但修改整个 Ports Collection 所需要进行的工作， 至少也是令人生畏的。 在发表您的观点之前， 请阅读在邮件列表存档中历史上所进行过的提议； 此外， 您也会被要求提供一个可用的原形。

上一页 | 上一级 | 下一页
5.2. 命名 | 起始页 | 5.4. 源码包文件

本文档和其它文档可从这里下载： ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

如果对于FreeBSD有问题，请先阅读 文档，如不能解决再联系 <questions@FreeBSD.org>.
关于本文档的问题请发信联系 <doc@FreeBSD.org>.