第 17 章 使用 USES 宏
17.1. USES 的介绍
USES 宏简化了声明 Ports 依赖和设置的过程。它们可以添加依赖关系、修改构建行为、向包添加元数据等,所有这些都通过选择简单的预设值来完成。
本章的每个部分都描述了 USES 的一个可能值及其可能的参数。参数在值后通过冒号(:)附加。多个参数之间用逗号(,)分隔。
示例 1. 使用多个值
USES= bison perl示例 2. 添加一个参数
USES= tar:xz示例 3. 添加多个参数
USES= drupal:7,theme示例 4. 综合使用
USES= pgsql:9.3+ cpe python:2.7,build17.2. 7z
可能的参数:(无),p7zip,partial
使用 7z(1) 代替 bsdtar(1) 提取文件,并将 EXTRACT_SUFX 设置为 .7z。如果基本系统中的 7z 无法提取文件,p7zip 选项会强制依赖于来自 archivers/p7zip 的 7z。如果使用 partial 选项,则 EXTRACT_SUFX 不会改变,这对于主分发文件没有 .7z 扩展名时非常有用。
17.3. ada
可能的参数:(无),6,12,(run)
依赖一个支持 Ada 的编译器,并相应地设置 CC。默认使用来自 Ports 的 gcc6-aux。
17.4. angr
可能的参数:binaries,nose
为需要 angrinary 分析平台 的 Ports 提供支持。
如果存在 binaries 参数,则该 Port 需要特殊的 angr 二进制文件进行测试。
如果存在 nose 参数,则该 Port 使用 nosetests 作为测试目标。该参数隐式地意味着 USES=python:test。
该框架提供以下变量供 Port 设置:
ANGR_VERSION:angr 项目程序的版本。
ANGR_BINARIES_TAGNAME:angr 二进制文件的标签名。
ANGR_NOSETESTS:nosetests 程序的路径。
17.5. ansible
可能的参数:env,module,plugin
为依赖 sysutils/ansible 的 Ports 提供支持。
如果存在 env 参数,则该 Port 不依赖 sysutils/ansible,但需要设置一些 Ansible 变量。
如果存在 module 参数,则该 Port 是一个 Ansible 模块。
如果存在 plugin 参数,则该 Port 是一个 Ansible 插件。
该框架向 Port 暴露以下变量:
ANSIBLE_CMD:ansible 程序的路径。
ANSIBLE_DOC_CMD:ansible-doc 程序的路径。
ANSIBLE_RUN_DEPENDS:与 Ansible 相关的 RUN_DEPENDS。
ANSIBLE_DATADIR:Ansible 模块和插件所在的目录结构的根路径。
ANSIBLE_ETCDIR:Ansible 配置文件目录的路径。
ANSIBLE_PLUGINS_PREFIX:${ANSIBLE_DATADIR} 中 "plugins" 目录的路径。
ANSIBLE_MODULESDIR:本地 Ansible 模块的目录路径。
ANSIBLE_PLUGINSDIR:本地 Ansible 插件的目录路径。
ANSIBLE_PLUGIN_TYPE:Ansible 插件类型(例如,“connection”,“inventory”或“vars”)。
17.6. apache
可能的参数:(无),2.4,build,run,server
为依赖 Apache Web 服务器的 Ports 提供支持。
版本参数可用于要求特定版本的 Apache httpd。可以设置特定版本(USES=apache:2.4),最低版本(USES=apache:2.4+)或最高版本(USES=apache:-2.4)。
如果提供 build 参数,则会将构建依赖项添加到 Port。
如果提供 run 参数,则会将运行时依赖项添加到 Port。
如果提供 server 参数,则表示该 Port 是一个服务器 Port。
该框架提供以下变量供 Port 设置:
AP_FAST_BUILD:自动模块构建。
AP_GENPLIST:自动生成 PLIST,并将禁用的模块添加到 httpd.conf 中(仅在没有 pkg-plist 文件时)。
MODULENAME:Apache 模块的名称。默认值:${PORTNAME}。
SHORTMODNAME:Apache 模块的简短名称。默认值:${MODULENAME:S/mod_//}。
SRC_FILE:Apache 模块的源文件。默认值:${MODULENAME}.c。
以下变量可以被 Port 访问:
APACHE_VERSION:所选 Apache 服务器的主版本号和次版本号,例如 2.4。
APACHEETCDIR:Apache 配置目录的位置。默认值:${LOCALBASE}/etc/apache24。
APACHEINCLUDEDIR:Apache 包含文件的位置。默认值:${LOCALBASE}/include/apache24。
APACHEMODDIR:Apache 模块的位置。默认值:${LOCALBASE}/libxexec/apache24。
APACHE_DEFAULT:默认的 Apache 版本。
17.7. autoreconf
可能的参数:(无),build
运行 autoreconf。它封装了 aclocal、autoconf、autoheader、automake、autopoint 和 libtoolize 命令。每个命令都应用于 ${AUTORECONF_WRKSRC}/configure.ac 或其旧名称 ${AUTORECONF_WRKSRC}/configure.in。如果 configure.ac 使用 AC_CONFIG_SUBDIRS 定义了子目录并有自己的 configure.ac,则 autoreconf 将递归更新这些子目录。:build 参数仅添加对这些工具的构建时依赖项,但不运行 autoreconf。如果 WRKSRC 中不包含 configure.ac 的路径,可以通过设置 AUTORECONF_WRKSRC 来指定路径。
17.8. azurepy
可能的参数:(无)
为 py-azure* Ports 提供支持。移除 azure 命名空间并清理常见文件。
17.9. blaslapack
可能的参数:(无),atlas,netlib(默认),gotoblas,openblas
添加对 Blas / Lapack 库的依赖。
17.10. bdb
可能的参数:(无),5(默认),18
添加对 Berkeley DB 库的依赖。默认为 databases/db5。在使用 :18 参数时,也可以依赖于 databases/db18。可以声明一个接受值的范围,:5+ 会查找安装的最高版本,如果没有其他版本则回退到 5。INVALID_BDB_VER 可用于指定与此 Port 不兼容的版本。该框架向 Port 暴露以下变量:
BDB_LIB_NAME:Berkeley DB 库的名称。例如,使用 databases/db5 时,它包含 db-5.3。
BDB_LIB_CXX_NAME:Berkeley DBC++ 库的名称。例如,使用 databases/db5 时,它包含 db_cxx-5.3。
BDB_INCLUDE_DIR:Berkeley DB 包含目录的位置。例如,使用 databases/db5 时,它包含 ${LOCALBASE}/include/db5。
BDB_LIB_DIR:Berkeley DB 库目录的位置。例如,使用 databases/db5 时,它包含 ${LOCALBASE}/lib。
BDB_VER:检测到的 Berkeley DB 版本。例如,如果使用 USES=bdb:5+ 并安装了 Berkeley DB 18,则它包含 18。
重要
databases/db48 弃用并且不再受支持。任何 Port 都不得使用它。
17.11. bison
可能的参数:(无),build,run,both
使用 devel/bison。默认情况下,未指定参数或指定 build 参数时,表示 bison 是构建时依赖;run 表示运行时依赖;both 表示同时是构建时和运行时依赖。
17.12. budgie
可能的参数:(无)
为 Budgie 桌面环境提供支持。使用 USE_BUDGIE 选择 Port 所需的组件。有关更多信息,请参见 使用 Budgie。
17.13. cabal
重要
不应为 Haskell 库创建 Port,详情见 Haskell Libraries。
可能的参数:(无),hpack,nodefault
设置使用 Cabal 构建 Haskell 软件时使用的默认值和目标。添加对 Haskell 编译器 Port(lang/ghc)的构建依赖。如果 BUILD_DEPENDS 变量中已列出其他版本的 GHC(例如 lang/ghc810),则使用该版本。如果提供了 hpack 参数,则添加对 devel/hs-hpack 的构建依赖,并在配置步骤中调用 hpack 生成 .cabal 文件。如果提供了 nodefault 参数,框架将不会尝试从 Hackage 拉取主分发文件。如果存在 USE_GITHUB 或 USE_GITLAB,则此参数会隐式添加。
框架提供以下变量:
CABAL_REVISION:Haskell 包在 Hackage 上可能有修订版本。将此选项设置为整数以拉取修订后的包描述。
USE_CABAL:如果软件使用 Haskell 依赖项,则在此变量中列出它们。每个项目应以 packagename-0.1.2 的形式列出。依赖项也可以有修订版本,修订版本在 _ 符号后指定。支持自动生成依赖项列表,详情见 使用 Cabal 构建 Haskell 应用程序。
CABAL_FLAGS:在配置和构建阶段传递给 cabal-install 的标志列表。标志按原样传递。此变量通常用于启用或禁用 .cabal 文件中声明的标志。使用 foo 启用 foo 标志,使用 -foo 禁用它。
CABAL_EXECUTABLES:Port 安装的可执行文件列表。默认值:${PORTNAME}。请参阅项目的 .cabal 文件,获取此变量可能的值。每个值对应 .cabal 文件中的 executable 项。此列表中的项目会自动添加到 pkg-plist。
SKIP_CABAL_PLIST:如果定义了此变量,则不会将 ${CABAL_EXECUTABLES} 中的项目添加到 pkg-plist。
opt_USE_CABAL:根据 opt 选项向 ${USE_CABAL} 中添加项目。
opt_CABAL_EXECUTABLES:根据 opt 选项向 ${CABAL_EXECUTABLES} 中添加项目。
opt_CABAL_FLAGS:如果启用了 opt,则将该值追加到 ${CABAL_FLAGS} 中。否则,追加 -value 以禁用该标志。请注意,此行为与普通的 CABAL_FLAGS 略有不同,因为它不接受以 - 开头的值。
CABAL_WRAPPER_SCRIPTS:${CABAL_EXECUTABLES} 的子集,包含要包装到 shell 脚本中的 Haskell 程序,该脚本在运行程序之前设置 *_datadir 环境变量。这还会导致实际的 Haskell 二进制文件安装到 libexec/cabal/ 目录。对于将数据文件安装到 share/ 目录中的 Haskell 程序,必须使用此选项。
FOO_DATADIR_VARS:其他 Haskell 包的列表,其数据文件应由名为 FOO 的可执行文件访问。该可执行文件应是 ${CABAL_WRAPPER_SCRIPTS} 的一部分。列出的 Haskell 包不应有版本后缀。
CABAL_PROJECT:某些 Haskell 项目可能已存在 cabal.project 文件,该文件也由 Ports 框架生成。如果是这种情况,请使用此变量指定如何处理原始的 cabal.project。将此变量设置为 remove 将导致原始文件在提取阶段被删除。将此变量设置为 append 将:
在提取阶段将原始文件移动到
cabal.project.${PORTNAME}。在补丁阶段将原始的
cabal.project.${PORTNAME}和生成的cabal.project合并成一个文件。
使用 append 可以在合并之前对原始文件进行补丁处理。
17.14. cargo
可能的参数:(无)
使用 Cargo 进行配置、构建和测试。它可以用于 Port 化使用 Cargo 构建系统的 Rust 应用程序。更多信息请参见 使用 cargo 构建 Rust 应用程序。
17.15. charsetfix
可能的参数:(无)
防止 Port 安装 charset.alias。该文件必须仅由 converters/libiconv 安装。如果 charset.alias 不是由 ${WRKSRC}/Makefile.in 安装的,可以通过设置 CHARSETFIX_MAKEFILEIN 来指定相对于 WRKSRC 的路径。
17.16. cl
可能的参数:(无)
为 Common Lisp Port 提供支持。
框架提供以下变量,Port 可以设置:
ASDF_MODULES:当设置 FASL_TARGET(默认为 PORTNAME)时,要构建的 ASDF 模块列表。
FASL_TARGET:构建 Port 的 fasl 变体(可以是 ccl、clisp 或 sbcl)。
USE_ASDF:依赖 devel/cl-asdf。
USE_ASDF_FASL:依赖 devel/cl-asdf-<FASL_TARGET>。
USE_CCL:依赖 lang/ccl;当 FASL_TARGET=ccl 时,隐式依赖。
USE_CLISP:依赖 lang/clisp;当 FASL_TARGET=clisp 时,隐式依赖。
USE_SBCL:依赖 lang/sbcl;当 FASL_TARGET=SBCL 时,隐式依赖。
框架提供以下变量,Port 可以读取:
ASDF_PATHNAME:CL 源代码路径。
ASDF_REGISTRY:包含 asd 文件的 CL 注册表路径。
CCL:Clozure Common Lisp 编译器的路径。
CLISP:GNU Common Lisp 编译器的路径。
CL_LIBDIR_REL:相对于 LOCALBASE 或 PREFIX 的 CL 库目录。
FASL_DIR_REL:编译后的 fasl 文件的相对路径,取决于 FASL_TARGET。
FASL_PATHNAME:CL fasl 文件的路径。
LISP_EXTRA_ARG:构建 fasl 时使用的额外参数。
SBCL:Steel Bank Common Lisp 编译器的路径。
17.17. cmake
可能的参数:(无),insource,noninja,run,testing
使用 CMake 配置 Port 并生成构建系统。
默认情况下,执行源代码外构建,使 WRKSRC 中的源代码不受构建产物影响。使用 insource 参数时,将执行源代码内构建。该参数应仅作为例外,在常规的源代码外构建无法工作时使用。
默认情况下,使用 Ninja(devel/ninja)进行构建。在某些情况下,这可能无法正确工作。使用 noninja 参数时,构建将使用常规的 make。只有当基于 Ninja 的构建不工作时,才应使用此参数。
使用 run 参数时,除了构建依赖外,还会注册一个运行时依赖。
使用 testing 参数时,将添加一个测试目标,该目标使用 CTest。当运行测试时,Port 将为测试重新配置并重新构建。
有关更多信息,请参见 使用 cmake。
17.18. compiler
可能的参数:(无),env(默认,隐式),C++17-lang,C++14-lang,C++11-lang,gcc-C++11-lib,C++11-lib,C++0x,c11,nestedfct,features
根据给定的需求确定要使用的编译器。如果 Port 需要支持 C++17 的编译器,请使用 C++17-lang;如果需要支持 C++14 的编译器,请使用 C++14-lang;如果需要支持 C++11 的编译器,请使用 C++11-lang;如果需要带有 C++11 库的 g++ 编译器,请使用 gcc-C++11-lib;如果需要支持 C++11 标准库的编译器,请使用 C++11-lib。如果 Port 需要支持 C++0x、C11 或嵌套函数,应使用相应的参数。
使用 features 请求默认编译器支持的特性列表。在包含 bsd.port.pre.mk 后,Port 可以使用以下变量检查结果:
COMPILER_TYPE:系统上的默认编译器,可能是 gcc 或 clang。ALT_COMPILER_TYPE:系统上的替代编译器,可能是 gcc 或 clang,仅在系统中存在两个编译器时设置。COMPILER_VERSION:默认编译器版本的前两位数字。ALT_COMPILER_VERSION:替代编译器的前两位版本数字(如果存在)。CHOSEN_COMPILER_TYPE:选择的编译器,可能是 gcc 或 clang。COMPILER_FEATURES:默认编译器支持的特性,目前列出 C++ 库。
17.19. cpe
可能的参数:(无)
在包清单中包含 Common Platform Enumeration (CPE) 信息,以 CPE 2.3 格式的字符串表示。有关详细信息,请参见 CPE 规范。要将 CPE 信息添加到 Port,请按照以下步骤操作:
将
cpe添加到USES中,并使用make -V CPE_STR检查结果,确保它与 CPE 字典条目一致。逐步调整直到make -V CPE_STR正确。如果产品名称(第二个字段,默认为
PORTNAME)不正确,定义CPE_PRODUCT。如果厂商名称(第一个字段,默认为
CPE_PRODUCT)不正确,定义CPE_VENDOR。如果版本字段(第三个字段,默认为
PORTVERSION)不正确,定义CPE_VERSION。如果更新字段(第四个字段,默认为空)不正确,定义
CPE_UPDATE。如果仍然不正确,请检查 Mk/Uses/cpe.mk 以获取更多细节,或联系 Ports 安全团队 [ports-secteam@FreeBSD.org]。
尽可能从现有变量(如
PORTNAME和PORTVERSION)中推导出 CPE 名称。使用变量修饰符提取这些变量的相关部分,而不是硬编码名称。始终在提交任何更改(如更改
PORTNAME或PORTVERSION或任何其他用于推导CPE_STR的变量)之前,运行make -V CPE_STR并检查输出。
17.20. cran
可能的参数:(无),auto-plist,compiles
使用综合 R 存档网络。指定 auto-plist 以自动生成 pkg-plist。如果 Port 包含需要编译的代码,请指定 compiles。
17.21. desktop-file-utils
可能的参数:(无)
使用来自 devel/desktop-file-utils 的 update-desktop-database。在不干扰 Port Makefile 中任何其他安装后步骤的情况下,将运行额外的安装后步骤。会在 plist 中添加一行 @desktop-file-utils。仅在 Port 提供包含 MimeType 条目的 .desktop 文件时使用此宏。
17.22. desthack
可能的参数:(无)
更改 GNU configure 的行为,以便在原始软件不支持 DESTDIR 时正确处理。
17.23. display
可能的参数:(无),ARGS
设置虚拟显示环境。如果环境变量 DISPLAY 未设置,则会将 Xvfb 添加为构建依赖,并将 CONFIGURE_ENV 扩展为当前运行的 Xvfb 实例的端口号。ARGS 参数默认值为 install,控制何时启动和停止虚拟显示。
17.24. dos2unix
可能的参数:(无)
Port 中包含需要转换为 Unix 格式的 DOS 行结束符。可以设置多个变量来控制哪些文件将被转换。默认情况下,将转换 所有 文件,包括二进制文件。有关示例,请参见 简单的自动替换。
DOS2UNIX_REGEX:根据正则表达式匹配文件名。DOS2UNIX_FILES:匹配字面文件名。DOS2UNIX_GLOB:根据 glob 模式匹配文件名。DOS2UNIX_WRKSRC:开始转换的目录,默认为${WRKSRC}。
17.25. drupal
可能的参数:7,module,theme
自动化安装作为 Drupal 主题或模块的 Port。使用 Port 所期望的 Drupal 版本。例如,USES=drupal:7,module 表示该 Port 创建一个 Drupal 7 模块。可以使用 USES=drupal:7,theme 指定 Drupal 7 主题。
17.26. ebur128
可能的参数:(无),build,lib,run,test
添加对 audio/ebur128 的依赖。它允许通过使用 make.conf 中的 DEFAULT_VERSIONS 来透明地依赖 rust 或 legacy 版本。例如,要使用传统版本,可以在 make.conf 中设置 DEFAULT_VERSIONS+=ebur128=legacy。
当不使用任何参数时,行为与提供 lib 参数时相同。其余参数提供相应的依赖类别。
17.27. eigen
可能的参数:2,3,build(默认),run
添加对 math/eigen 的依赖。
17.28. electronfix
可能的参数:37,38,39
为易于移植且以二进制形式分发的 Electron 应用程序提供支持。根据使用的参数,添加对 devel/electron37,devel/electron38,或 devel/electron39 的构建和运行时依赖。
该框架提供以下变量,Port 可以设置:
ELECTRONFIX_SYMLINK_FILES:要从 Electron 分发版创建符号链接的文件列表。
ELECTRONFIX_MAIN_EXECUTABLE:要替换为原始 Electron 二进制文件的主可执行文件名。
17.29. elfctl
可能的参数:(无),build(默认),stage
通过设置 ELF_FEATURES 设置 ELF 二进制文件功能控制注释。
当没有参数或提供 build 参数时,将操作 BUILD_WRKSRC 中的二进制文件,ELF_FEATURES 中列出的文件相对于 BUILD_WRKSRC。当提供 stage 参数时,将操作 STAGEDIR 中的二进制文件,ELF_FEATURES 中列出的文件相对于 STAGEDIR。
示例 5. 使用 elfctl
featurelist 的格式描述见 elfctl(1)。
17.30. elixir
可能的参数:(无)
为使用 lang/elixir 的 Port 提供支持。添加对 lang/elixir 的构建和运行时依赖。
框架提供的变量:
ELIXIR_APP_NAME:Elixir 应用程序名称,安装在 Elixir 的 lib 目录中。
ELIXIR_LIB_ROOT:Elixir 默认库路径。
ELIXIR_APP_ROOT:此 Elixir 应用程序的根目录。
ELIXIR_HIDDEN:要从代码路径中隐藏的应用程序;通常是 ${PORTNAME}。
ELIXIR_LOCALE:构建期间 Elixir 使用的 UTF-8 本地化(任何 UTF-8 本地化都可以)。
MIX_CMD:mix 命令。
MIX_COMPILE:用于编译 Elixir 应用程序的 mix 命令。
MIX_REWRITE:自动替换 Mix 依赖项与代码路径。
MIX_BUILD_DEPS:以类别/portname 格式列出 BUILD_DEPENDS(通常称为 Erlang 和 Elixir 中的 "deps")。
MIX_RUN_DEPS:以类别/portname 格式列出 RUN_DEPENDS。
MIX_DOC_DIRS:要安装到 DOCSDIR 的额外文档目录。
MIX_DOC_FILES:要安装到 DOCSDIR 的额外文档文件(通常是 README.md)。
MIX_ENV:Mix 构建的环境(与 MAKE_ENV 相同格式)。
MIX_ENV_NAME:Mix 构建环境的名称,通常为 "prod"。
MIX_BUILD_NAME:输出的构建名称,位于 _build/ 中,通常是 ${MIX_ENV_NAME}。
MIX_TARGET:Mix 目标的名称,通常为 "compile"。
MIX_EXTRA_APPS:要构建的子应用程序列表(如果有)。
MIX_EXTRA_DIRS:要安装到 ELIXIR_APP_ROOT 的额外目录列表。
MIX_EXTRA_FILES:要安装到 ELIXIR_APP_ROOT 的额外文件列表。
17.31. emacs
可能的参数:(无)(默认),build,run,noflavors
为需要 Emacs 的 Port 提供支持。build 参数创建对 Emacs 的构建依赖。run 参数创建对 Emacs 的运行时依赖。如果 build 和 run 参数都缺失,则会创建对 Emacs 的构建和运行时依赖。noflavors 参数会防止使用 flavors,如果没有对 Emacs 的运行时依赖,则隐含此参数。
可以在 make.conf 中定义使用 USES=emacs 的 Port 的默认 Emacs flavor。例如,对于 nox flavor,可以使用 DEFAULT_VERSIONS+= emacs=nox。有效的 flavors 有:full,canna,nox,wayland,devel_full,devel_nox。
可以由 Port 设置的变量:
EMACS_FLAVORS_EXCLUDE:不要构建这些 Emacs flavors。如果未定义 EMACS_FLAVORS_EXCLUDE 且:
有对 Emacs 的运行时依赖
未指定
noflavors参数
则假设所有有效的 Emacs flavors。
EMACS_NO_DEPENDS:不要添加对 Emacs 的构建或运行时依赖。这将防止使用 flavors,并且不会生成字节码文件作为包的一部分。
Port 可以读取的变量:
EMACS_CMD:Emacs 命令的完整路径(例如 /usr/local/bin/emacs-30.1)
EMACS_FLAVOR:用于依赖的 Emacs flavor(例如 BUILD_DEPENDS= dash.el${EMACS_PKGNAMESUFFIX}>0:devel/dash@${EMACS_FLAVOR})
EMACS_LIBDIR:不包括 ${PREFIX} 的 Emacs 库目录(例如 share/emacs)
EMACS_LIBDIR_WITH_VER:不包括 ${PREFIX} 的库目录,包含版本(例如 share/emacs/30.1)
EMACS_MAJOR_VER:Emacs 主版本(例如 30)
EMACS_PKGNAMESUFFIX:PKGNAMESUFFIX 用于区分 Emacs flavors
EMACS_SITE_LISPDIR:不包括 ${PREFIX} 的 Emacs site-lisp 目录(例如 share/emacs/site-lisp)
EMACS_VER:Emacs 版本(例如 30.1)
EMACS_VERSION_SITE_LISPDIR:包括版本的目录(例如 share/emacs/30.1/site-lisp)
17.32. erlang
可能的参数:(无),enc,rebar,rebar3
为 lang/erlang 添加构建和运行时依赖。根据参数不同,添加额外的构建依赖。enc 添加对 devel/erlang-native-compiler 的依赖,rebar 添加对 devel/rebar 的依赖,rebar3 添加对 devel/rebar3 的依赖。
此外,Port 可以使用以下变量:
ERL_APP_NAME:Erlang 应用程序名称,安装在 Erlang 的 lib 目录中(去掉版本)ERL_APP_ROOT:此 Erlang 应用程序的根目录REBAR_CMD:rebar命令的路径REBAR3_CMD:rebar3命令的路径REBAR_PROFILE:Rebar 配置文件REBAR_TARGETS:Rebar 目标列表(通常是 compile,也可能是 escriptize)ERL_BUILD_NAME:Rebar3 的构建名称ERL_BUILD_DEPS:以类别/portname 格式列出的BUILD_DEPENDSERL_RUN_DEPS:以类别/portname 格式列出的RUN_DEPENDSERL_DOCS:文档文件和目录列表
17.33. fakeroot
可能的参数:(无)
更改构建系统的一些默认行为,以允许以用户身份安装。有关 fakeroot 的更多信息,请参见 https://wiki.debian.org/FakeRoot。
17.34. firebird
可能的参数:(无),25
添加对 Firebird 数据库客户端库的依赖。
17.35. fonts
可能的参数:(无),fc,fontsdir(默认),none
添加一个运行时依赖,所需工具用于注册字体。根据不同的参数,添加 @fc ${FONTSDIR} 行,@fontsdir ${FONTSDIR} 行,或者如果参数是 none 则不添加任何行到 plist。FONTSDIR 默认为 ${PREFIX}/share/fonts/${FONTNAME},FONTNAME 默认为 ${PORTNAME}。将 FONTSDIR 添加到 PLIST_SUB 和 SUB_LIST。
17.36. fortran
可能的参数:gcc(默认)
使用 GNU Fortran 编译器。
17.37. fpc
可能的参数:(无),run
为基于 Free Pascal 的 Port 提供支持。它将安装 Free Pascal 编译器和单元。
添加对 lang/fpc 的构建依赖。
如果指定了 run 参数,则还会添加运行时依赖。
17.38. fuse
可能的参数:2(默认),3
该 Port 将依赖 FUSE 库,并根据 FreeBSD 的版本处理对内核模块的依赖。
17.39. gem
可能的参数:(无),noautoplist
处理 RubyGems 的构建。如果使用 noautoplist,则不会自动生成 packing list。
这意味着需要使用 USES=ruby。
17.40. gettext
可能的参数:(无)
弃用。同时包含 gettext-runtime 和 gettext-tools。
17.41. gettext-runtime
可能的参数:(无),lib(默认),build,run
使用 devel/gettext-runtime。默认情况下,未指定参数或使用 lib 参数时,会添加对 libintl.so 的库依赖。build 和 run 参数分别表示构建时和运行时依赖 gettext。
17.42. gettext-tools
可能的参数:(无),build(默认),run
使用 devel/gettext-tools。默认情况下,未指定参数或使用 build 参数时,会注册构建时依赖 msgfmt。使用 run 参数时,注册运行时依赖。
17.43. ghostscript
可能的参数:*X*,build,run,nox11
可以使用特定版本 X。可选版本有 7,8,9,以及 agpl(默认)。nox11 表示需要使用 -nox11 版本的 Port。build 和 run 分别会添加构建时和运行时的 Ghostscript 依赖。默认情况下,两者都会添加。
17.44. gl
可能的参数:(无)
提供了一种轻松方式来依赖 GL 组件。组件应该列出在 USE_GL 中。可用的组件有:
egl:添加对 graphics/libglvnd 的 libEGL.so 库的依赖。
gbm:添加对 graphics/mesa-libs 的 libgbm.so 库的依赖。
gl:添加对 graphics/libglvnd 的 libGL.so 库的依赖。
glesv2:添加对 graphics/libglvnd 的 libGLESv2.so 库的依赖。
glew:添加对 graphics/glew 的 libGLEW.so 库的依赖。
glu:添加对 graphics/libGLU 的 libGLU.so 库的依赖。
glut:添加对 graphics/freeglut 的 libglut.so 库的依赖。
opengl:添加对 graphics/libglvnd 的 libOpenGL.so 库的依赖。
17.45. gmake
可能的参数:(无)
使用 devel/gmake 作为构建时依赖,并设置环境以使用 gmake 作为构建的默认 make。
17.46. gnome
可能的参数:(无)
提供一种简便的方式来依赖 GNOME 组件。组件应列在 USE_GNOME 中。可用的组件有:
atkatkmmcairocairommdconfesoundevolutiondataserver3gconf2gconfmm26gdkpixbufgdkpixbuf2glib12glib20glibmmgnomecontrolcenter3gnomedesktop3gnomedesktop4gnomedocutilsgnomemenus3gnomemimedatagnomeprefixgnomesharp20gnomevfs2gsoundgtk-update-icon-cachegtk12gtk20gtk30gtkhtml3gtkhtml4gtkmm20gtkmm24gtkmm30gtksharp20gtksourceviewgtksourceview2gtksourceview3gtksourceviewmm3gvfsintlhackintltoolintrospectionlibartlgpl2libbonobolibbonobouilibgda5libgda5-uilibgdamm5libglade2libgnomelibgnomecanvaslibgnomekbdlibgnomeprintlibgnomeprintuilibgnomeuilibgsflibgtkhtmllibgtksourceviewmmlibidllibrsvg2libsigc++12libsigc++20libwncklibwnck3libxml++26libxml2libxsltmetacitynautilus3orbit2pangopangommpangox-compatpy3gobject3pygnome2pygobjectpygobject3pygtk2pygtksourceviewreferencehackvtevte3
默认依赖是构建时和运行时依赖,可以通过 :build 或 :run 来更改。例如:
有关更多信息,请参阅 使用 GNOME。
17.47. go
重要
不应为 Go 库创建 Ports,更多信息请参阅 Go 库。
可能的参数:(无),N.NN,N.NN+,N.NN-devel,modules,no_targets,run
设置用于构建 Go 软件的默认值和目标。添加对 Go 编译器 Port 的构建依赖,Port 维护者可以设置所需的版本。如果使用 X.Y+ 格式,则将使用 Go X.Y,除非默认的 Go 版本高于 X.Y,在这种情况下将使用默认版本。默认情况下,构建是在 GOPATH 模式下执行的。如果 Go 软件使用模块,可以通过 modules 参数启用模块感知模式。no_targets 将设置构建环境(如 GO_ENV、GO_BUILDFLAGS),但跳过创建提取和构建目标。run 还将添加对 Go 编译器 Port 的运行时依赖。
构建过程由多个变量控制:
GO_MODULE:作为 go.mod 中的 module 指令指定的应用模块名称。在大多数情况下,这是使用 Go 模块的 Port 所需的唯一变量。
GO_PKGNAME:在 GOPATH 模式下构建时的 Go 包名称。这是将在 ${GOPATH}/src 中创建的目录。如果没有显式设置,并且存在 GH_SUBDIR 或 GL_SUBDIR,则将从中推断 GO_PKGNAME。在模块感知模式下不需要此设置。
GO_TARGET:要构建的包。默认值为 ${GO_PKGNAME}。GO_TARGET 也可以是一个元组,形式为 package:path,其中 path 可以是一个简单的文件名或从 ${PREFIX} 开始的完整路径。
GO_TESTTARGET:要测试的包。默认值为 ./...(当前包及所有子包)。
CGO_CFLAGS:要传递给 C 编译器的额外 CFLAGS 值。
CGO_LDFLAGS:要传递给 C 编译器的额外 LDFLAGS 值。
GO_BUILDFLAGS:要传递给 go build 的额外构建参数。
GO_LDFLAGS:要传递给 go build 命令的额外 LDFLAGS 变量,无需更改 GO_BUILDFLAGS。
GO_TESTFLAGS:要传递给 go test 的额外构建参数。
有关使用示例,请参阅 构建 Go 应用程序。
17.48. gperf
可能的参数:(无)
如果 gperf 不在基本系统中,添加对 devel/gperf 的构建时依赖。
17.49. grantlee
可能的参数:5,selfbuild
处理对 Grantlee 的依赖。指定 5 以依赖基于 Qt5 的版本,devel/grantlee5。selfbuild 用于 devel/grantlee5 来获取其版本号。
17.50. groff
可能的参数:build,run,both
如果基本系统中没有 groff,则注册对 textproc/groff 的依赖。
17.51. gssapi
可能的参数:(无),base(默认),heimdal,mit,mit-devel,flags,bootstrap
处理 GSS-API 消费者所需的依赖项。仅提供 Kerberos 机制的库。默认情况下,或设置为 base,使用基本系统中的 GSS-API 库。也可以设置为 heimdal 来使用 security/heimdal,或设置为 mit 来使用 security/krb5,或设置为 mit-devel 来使用 security/krb5-devel。
当本地 Kerberos 安装不在 LOCALBASE 中时,请设置 HEIMDAL_HOME(用于 heimdal)或 KRB5_HOME(用于 krb5)到 Kerberos 安装的位置。
这些变量会被导出供 Port 使用:
GSSAPIBASEDIRGSSAPICPPFLAGSGSSAPIINCDIRGSSAPILDFLAGSGSSAPILIBDIRGSSAPILIBSGSSAPI_CONFIGURE_ARGS
flags 选项可以与 base、heimdal、mit 或 mit-devel 一起使用,以自动将 GSSAPICPPFLAGS、GSSAPILDFLAGS 和 GSSAPILIBS 添加到 CFLAGS、LDFLAGS 和 LDADD 中。例如,使用 base,flags。
bootstrap 选项是一个仅供 security/krb5 和 security/heimdal 使用的特殊前缀。例如,使用 bootstrap,mit。
示例 6. 常见用法
17.52. gstreamer
可能的参数:(无)
提供一种简便的方法来依赖 GStreamer 组件。组件应列在 USE_GSTREAMER 中。可用的组件有:
a52decaalibamrnbamrwbdecaomassrenderbadbs2bcairocdiocdparanoiachromaprintcurldashdtlsdtsdvdvddvdreadediting-servicesfaacfaadflacflitegdkpixbufglgmegnonlingoodgsmgtk4gtkhalhlsjackjpegkatekmsladspalamelibavlibcacalibde265libmmslibvisuallv2mmmodplugmpeg2decmpeg2encmpg123mplexmusepackneonoggopencvopenexropenh264openjpegopenmptopuspangopngpulseqtresindvdrsvgrtmpshout2sidplaysmoothstreamingsndfilesndiosoundtouchsoupspandspspeexsrtptaglibtheorattmltwolameuglyv4l2vorbisvpxvulkanwavpackwebpwebrtcdspx264x265xximagesrczbar
17.53. guile
可能的参数:(无),X.Y,flavors,build,run,alias,conflicts
添加对 Guile 的依赖。默认情况下,这是对适当的 libguile*.so 的库依赖,除非通过 build 和/或 run 选项覆盖。alias 选项根据需要配置 BINARY_ALIAS(请参见 使用 BINARY_ALIAS)。
默认版本通过常规的 DEFAULT_VERSIONS 机制设置;如果默认版本不是列表中的版本之一,则使用可用的最新版本。
使用 Guile 的应用程序通常只构建单一版本的 Guile。然而,扩展或库模块应使用 flavors 选项,以使用多个 flavors 构建。
更多信息请参见 使用 Guile。
17.54. horde
可能的参数:(无)
添加对 devel/pear-channel-horde 的构建时和运行时依赖。如果需要,可以使用 USE_HORDE_BUILD 和 USE_HORDE_RUN 添加其他 Horde 依赖项。更多信息请参见 Horde 模块。
17.55. iconv
可能的参数:(无),lib,build,patch,translit,wchar_t
使用 iconv 函数,来自 Port converters/libiconv 的构建时和运行时依赖,或者来自基本系统的 iconv。默认情况下,如果没有指定参数或指定了 lib 参数,则表示使用 iconv 作为构建时和运行时依赖。build 表示仅作为构建时依赖,patch 表示仅作为补丁时依赖。如果 Port 使用 WCHAR_T 或 //TRANSLIT iconv 扩展,请添加相关参数以确保使用正确的 iconv。更多信息请参见 使用 iconv。
17.56. imake
可能的参数:(无),env,notall,noman
将 devel/imake 添加为构建时依赖,并在 configure 阶段运行 xmkmf -a。如果指定了 env 参数,则不会设置 configure 目标。如果 -a 标志对 Port 有问题,请添加 notall 参数。如果 xmkmf 无法生成 install.man 目标,则添加 noman 参数。
17.57. inotify
可能的参数:(无)
为 Port 添加 inotify 支持。
17.58. java
可能的参数:(无),ant,build,extract,run
如果没有提供参数且未定义 NO_BUILD,则默认使用 USES=java:build,run。如果定义了 NO_BUILD,则使用 USES=java:run。如果指定了 ant 参数,则 Port 使用 Apache Ant。如果指定了 build 参数,则会将 JDK Port 添加到构建依赖中。如果指定了 extract 参数,则会将 JDK Port 添加到提取依赖中。如果指定了 run 参数,则会将 JDK Port 添加到运行时依赖中。
该框架提供以下变量供 Port 设置:
JAVA_VERSION:Port 适用的 Java 版本列表,空格分隔。可选的 + 可以用来指定版本范围。(允许的值:8[+],11[+],17[+],18[+],19[+],21[+],22[+],23[+],24[+],25[+])
JAVA_OS:Port 适用的 JDK 操作系统列表,空格分隔。(允许的值:native,linux)
JAVA_VENDOR:Port 适用的 JDK 供应商列表,空格分隔。(允许的值:openjdk,oracle)
该框架为 Port 提供以下变量以供读取:
JAVA_PORT:JDK Port 的名称。(例如 java/openjdk8)
JAVA_PORT_VERSION:JDK Port 的版本。(例如 8)
JAVA_PORT_OS:JDK Port 使用的操作系统。(例如 linux)
JAVA_PORT_VENDOR:JDK Port 的供应商。(例如 openjdk)
JAVA_PORT_OS_DESCRIPTION:JDK Port 使用的操作系统描述。(例如 Linux)
JAVA_PORT_VENDOR_DESCRIPTION:JDK Port 供应商的描述。(例如 OpenJDK BSD Porting Team)
JAVA_HOME:JDK 安装目录的路径。(例如 /usr/local/openjdk8)
JAVAC:使用的 Java 编译器路径。(例如 /usr/local/openjdk8/bin/javac 或 /usr/local/bin/javac)
JAR:使用的 JAR 工具路径。(例如 /usr/local/openjdk8/bin/jar 或 /usr/local/bin/fastjar)
APPLETVIEWER:appletviewer 工具的路径。(例如 /usr/local/linux-jdk1.8.0/bin/appletviewer)
JAVA:java 可执行文件的路径。用于执行 Java 程序。(例如 /usr/local/openjdk8/bin/java)
JAVADOC:javadoc 工具程序的路径。
JAVAH:javah 程序的路径。
JAVAP:javap 程序的路径。
JAVA_KEYTOOL:keytool 工具程序的路径。
JAVA_N2A:native2ascii 工具的路径。
JAVA_POLICYTOOL:policytool 程序的路径。
JAVA_SERIALVER:serialver 工具程序的路径。
RMIC:RMI stub/skeleton 生成器 rmic 的路径。
RMIREGISTRY:RMI 注册程序的路径,rmiregistry。
RMID:RMI 守护进程程序的路径。
JAVA_CLASSES:包含 JDK 类文件的归档路径。在大多数 JDK 中,这是 ${JAVA_HOME}/jre/lib/rt.jar。
JAVASHAREDIR:所有共享 Java 资源的基本目录。
JAVAJARDIR:Port 应安装 JAR 文件的目录。
JAVALIBDIR:由其他 Port 安装的 JAR 文件所在的目录。
17.59. jpeg
可能的参数:lib(默认,隐式),build,run
帮助处理对 jpeg 的依赖。
如果提供了 lib 参数或没有提供参数,则会向 Port 添加库依赖。
如果提供了 build 参数,则会向 Port 添加构建时依赖。
如果提供了 run 参数,则会向 Port 添加运行时依赖。
如果提供了 both 参数,则会向 Port 添加构建时依赖和运行时依赖。
该框架提供了以下可以由 Port 设置的变量:
JPEG_PORT:指定要使用的 JPEG 实现。可选值包括:
17.60. kde
可能的参数:5
添加对 KDE 组件的依赖。更多信息请参见 使用 KDE。
17.61. kmod
可能的参数:(无),debug
为内核模块 Port 填充模板,当前包括:
将
kld添加到CATEGORIES。设置
SSP_UNSAFE。如果在
SRC_BASE中找不到内核源代码,则设置IGNORE。默认情况下,将
KMODDIR定义为 /boot/modules,并将其添加到PLIST_SUB和MAKE_ENV中,安装时创建该目录。如果将KMODDIR设置为 /boot/kernel,则会重写为 /boot/modules。这样可以防止在升级内核时破坏包,因为 /boot/kernel 会在此过程中重命名为 /boot/kernel.old。在安装和卸载时处理内核模块的交叉引用,使用
@kld。如果提供了
debug参数,则 Port 可以将调试版本的模块安装到 KERN_DEBUGDIR/KMODDIR 中。默认情况下,KERN_DEBUGDIR从DEBUGDIR复制并设置为 /usr/lib/debug。框架将负责创建和删除所需的目录。
17.62. kodi
可能的参数:(无),noautoplist
提供对 multimedia/kodi 插件的支持。如果提供了 noautoplist 参数,则不会自动生成 plist。
17.63. lazarus
可能的参数:(无),gtk2(默认),qt5,qt6,flavors
为 editors/lazarus 基础的 Port 提供支持。
如果未提供参数或提供了 gtk2 参数,则 lazarus-app 将使用 gtk2 界面构建,editors/lazarus Port 将使用 gtk2 界面构建。
如果提供了 qt5 参数,则 lazarus-app 将使用 qt5 界面构建。
如果提供了 qt6 参数,则 lazarus-app 将使用 qt6 界面构建。
如果提供了 flavors 参数,则 lazarus-app 将使用 flavors 特性构建。
如果 Port 不需要自动编译 lazarus 项目文件,则可以定义以下变量:
NO_LAZBUILD= yes
以下变量可供 Port 使用:
LAZARUS_PROJECT_FILES:lpi 文件列表。不能为空。默认值:空
LAZARUS_DIR:lazarus 安装目录的路径,默认值:${LOCALBASE}/share/lazarus-${LAZARUS_VER}
LAZBUILD_ARGS:lazbuild 额外参数。大多数情况下可以是 -d。更多信息请参见 lazbuild(1)。默认值:空
LAZARUS_NO_FLAVORS:不构建这些 lazarus flavors。如果未定义 LAZARUS_NO_FLAVORS,则假定构建所有有效的 lazarus flavors。
WANT_LAZARUS_DEVEL:如果设置为 yes,则使用 lazarus/devel 作为构建依赖。
17.64. ldap
可能的参数:(无),<版本>,client,server
注册对 net/openldap 的依赖。如果设置了特定的 <版本>(无点号表示法),则使用该版本。否则,它会尝试找到当前安装的版本。如果需要,它会回退到 bsd.default-versions.mk 中找到的默认版本。client 指定对客户端库的运行时依赖,这是默认行为。server 指定对服务器的运行时依赖。
Port 可以访问以下变量:
IGNORE_WITH_OPENLDAP:如果 Port 不支持某个版本的 OpenLDAP,可以定义此变量。
WITH_OPENLDAP_VER:用户定义的变量,用于设置 OpenLDAP 版本。
OPENLDAP_VER:检测到的 OpenLDAP 版本。
17.65. lha
可能的参数:(无)
将 EXTRACT_SUFX 设置为 .lzh。
17.66. libarchive
可能的参数:(无)
注册对 archivers/libarchive 的依赖。任何依赖 libarchive 的 Port 必须包含 USES=libarchive。
17.67. libedit
可能的参数:(无)
注册对 devel/libedit 的依赖。任何依赖 libedit 的 Port 必须包含 USES=libedit。
17.68. libtool
可能的参数:(无),keepla,build
修补 libtool 脚本。所有使用 libtool 的 Port 必须添加此项。keepla 参数可用于保留 .la 文件。一些 Port 没有自己的 libtool 副本,需要对 devel/libtool 进行构建时依赖,使用 :build 参数添加此依赖。
17.69. linux
可能的参数:c6,c7
Linux 兼容性框架 Port。指定 c6 以依赖于 CentOS 6 包。指定 c7 以依赖于 CentOS 7 包。可用的包有:
allegroalsa-plugins-ossalsa-plugins-pulseaudioalsalibatkavahi-libsbasecairocups-libscurl