第6章 特殊情况

目录
第6.1节 共享库
第6.2节 Ports 的发行限制
第6.3节 构建机制
第6.4节 利用 GNU autotools
第6.5节 使用 perl
第6.6节 使用 X11
第6.7节 使用 GNOME
第6.8节 使用 KDE
第6.9节 使用 Java
第6.10节 使用 Apache 和 PHP
第6.11节 使用 Python
第6.12节 使用 Emacs
第6.13节 使用 Ruby
第6.14节 使用 SDL
第6.15节 启动和停止服务 (rc 脚本)

有一些您在创建port时的特殊情况,我们在这里提一下。

6.1 共享库

如果您的port安装了一个或多个共享库,那么请定义一个 INSTALLS_SHLIB make 变量, 在post-install标记把它注册进共享库 缓冲时会调用bsd.port.mk去运行 ${LDCONFIG} -m来指向新库的安装目录。 (通常是 PREFIX/lib) 同样,您也可以适当的在您的 pke-plist文件 中定义一组@exec /sbin/ldconfig -m@unexec /sbin/ldconfig -R, 那么用户可以在安装后马上 就能使用,并且在卸载软件包后系统也不会认为这些共享库仍然存在。

如果您需要把共享库安装在缺省的位置之外, 可以定义 LDCONFIG_DIRS make 变量,它包含安装共享库的目录列表 例如: 如果您的共享库安装到 PREFIX/lib/fooPREFIX/lib/bar directories目录,您可以在您的 Makefile中这样设置:

INSTALLS_SHLIB= yes
LDCONFIG_DIRS=  %%PREFIX%%/lib/foo %%PREFIX%%/lib/bar

要时刻谨记, 非标准的目录不会在 (重) 启动时自动传递给 ldconfig(8) ! 如果有 port 真的需要这样做, 则需要像 x11/kdelibs3 那样安装一个启动脚本。 请务必仔细检查, 通常这是完全不必要的, 或者可以通过 -rpath 或在连接时设置 LD_RUN_PATH 来避免 (参见 lang/moscow_ml 给出的例子), 或者用一个 shell 封装程序来在执行可执行文件之前设置 LD_LIBRARY_PATH, 类似 www/mozilla 那样。

值得注意的是这里 LDCONFIG_DIRS 的内 容就像 pkg-plist 的其它部分一样要通过sed(1)过滤,所 以 PLIST_SUB 置换也会应用。我们推荐您使用 %%PREFIX%% 替换 PREFIX%%LOCALBASE%% 替换LOCALBASE%%X11BASE%% 替换X11BASE.

尽量将共享库版本号保持为 libfoo.so.0 这样的格式。 我们的运行环境连接器只会检查主 (第一个) 版本数字。

如果在更新 port 时升级了其库的主版本号, 则其它所有连接了受影响的库的 port 的 PORTREVISION 都应递增, 以强制它们采用新版本的库重新编译。

若您有关于 FreeBSD ports 系统的问题, 请发送电子邮件至 <ports@FreeBSD.org>。
关于此文档的任何问题, 请致函 <doc@FreeBSD.org>。