GNOME 包指南
GNOME 包在 Arch Linux 上遵循特定的模式。
源代码 URL
GNOME 包通常遵循两种源代码 URL 方案:一种是存储在 GNOME FTP 服务器上的已发布 tarball,另一种是软件 Git 仓库中的特定提交。
使用已发布的 tarball
下载已发布的 tarball 时,您可以使用以下源数组从 https://download.gnome.org 获取:
source=("https://download.gnome.org/sources/$pkgname/${pkgver%.*}/$pkgname-$pkgver.tar.xz")
其中 ${pkgver%.*} 通过删除 pkgver 的后缀(即 micro 包版本)来返回 major.minor 包版本。例如,如果 pkgver=3.28.0,则 ${pkgver%.*} 将返回 3.28。
使用 Git 仓库中的提交
另一种常见做法是以 GNOME 软件源代码 Git 仓库中的特定提交作为源。这不被归类为 VCS 包,因为 Pacman 设置特定提交的功能(参见 PKGBUILD(5) § USING VCS SOURCES)使得 PKGBUILD 不会跟随最新的开发提交,也不会更新 pkgver 字段,而是使用来自指定提交哈希的源。
下面是一个模板
PKGBUILD
url="https://gitlab.gnome.org/GNOME/$pkgname"
makedepends=(git)
_commit=hash_of_a_commit # tags/X.Y.Z
source=("git+${url}.git#commit=$_commit")
md5sums=('SKIP')
pkgver() {
cd $pkgname
git describe --tags | sed 's/-/+/g'
}
将 hash_of_a_commit 替换为您想要的 Git 提交哈希,并根据您打包的包的需求修改 pkgver() 语句(参见 VCS 包指南#Git)。
请注意,由于源是用 git 下载的,因此 git 必须在 makedepends 中,并且校验和必须设置为 'SKIP',就像任何其他 VCS 包一样。强烈建议使用 pkgver() 函数,以便它能够根据提供的提交哈希相应地设置 pkgver。
Meson 和 GNU 构建系统
历史上,GNOME 使用 GNU 构建系统来构建其应用程序。虽然现在仍有一些活跃的应用程序和许多仍在使用 GNU 构建系统的非活跃应用程序,但大多数当前活跃的 GNOME 应用程序已迁移到 Meson 构建系统。
有关适用于大多数 GNOME 应用程序打包需求的说明,请参阅 Meson 包指南。
GSettings schema
GSettings 是 GNOME 应用程序当前使用的 schema,可以使用 GUI 工具 dconf 或 CLI 工具 gsettings(由 glib2 提供,后者很可能已作为依赖项安装)来访问/读取/编辑。GSettings 以前需要打包者的某些注意,但现在已不需要干预。
一些观察
- 使用 GSettings 的应用程序通常依赖于 GTK(gtk3 或更高版本),因此 GSettings 相关的依赖项通常已满足。
- 以前在
package()函数中需要./configure的--disable-schemas-compile标志来避免重新编译 GSettings 数据库,但这对于 GNOME 应用程序来说已经不再适用了,尤其是在使用 Meson 作为构建系统的应用程序中。
GConf schema
大多数 GNOME 包已从 GConf schema 迁移到 #GSettings schema,但您可能会遇到安装这些 GConf schema 的旧的、过时的 GNOME 包。在这种情况下,必须将 gconfAUR 添加到 depends 数组中。
Gconf schema 会被安装到系统 GConf 数据库中,这是需要避免的。一些包为 ./configure 提供了 --disable-schemas-install 标志,但这很少奏效。然而,gconftool-2 有一个名为 GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL 的变量,您可以设置它来告诉 gconftool-2 不更新任何数据库。
创建安装 GConf schema 文件的包时,请使用
make GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL=1 DESTDIR="${pkgdir}" install
在 PKGBUILD 的 package() 函数中。
gconfpkg,因为自 gconfAUR=3.2.6-4 起,GConf schema 会通过 pacman hooks 自动安装/卸载(在安装/卸载 GNOME 包时)。ScrollKeeper 文档
GNOME 应用程序如今不再使用 ScrollKeeper,但您可能会遇到带有该文档的 GTK2 应用程序。
自 GNOME 2.20 起,无需为 ScrollKeeper 运行任何命令,因为 rarianAUR 会直接读取其 OMF 文件。scrollkeeper-update 现在只是一个占位符。唯一的要求是将 gnome-doc-utilsAUR 添加到 makedepends 数组。
您可以使用 ./configure 的 --disable-scrollkeeper 标志来禁用文档生成。
GTK 图标缓存
许多图形 GNOME 应用程序将图标安装到系统中,这些图标通过 gtk-update-icon-cache 工具包含在图标缓存中。每次添加或删除图标时,都会使用此工具更新缓存。
- 不要在 .install 文件中调用 gtk-update-icon-cache 工具,因为自 gtk-update-icon-cache=3.20.3-2 起,图标缓存已通过 pacman hooks 更新。
- 该包**不**需要依赖 gtk-update-icon-cache,因为此依赖项将由 gtk4 等包满足。
.desktop 文件
许多包安装符合 Freedesktop.org 标准的 .desktop 文件并在其中注册 MimeType 条目。这些信息存储在一个必须在每次添加或删除时更新的数据库中。这就是 update-desktop-database 工具的功能。
- 不要在 .install 文件中调用 update-desktop-database,因为自 desktop-file-utils=0.22-2 起,数据库已通过 pacman hooks 自动更新。
- 该包*不*需要依赖 desktop-file-utils,因为此依赖项将由 gtk4 等包满足。
AppStream 和 metainfo 文件
与许多其他应用程序一样,大多数 GNOME 应用程序遵循 Freedesktop.org 的 AppStream 规范,并提供 metainfo 文件,以便在应用程序中心(如 gnome-software 或 Flathub)显示应用程序的描述。
GNOME 应用程序通常在调用 check() 函数中的 meson test 时使用 appstream-util 工具验证 metainfo 文件。如果未安装 appstream-glib,这将简单地阻止此特定验证的执行(即,不会有错误中断构建过程)。
您可以通过两种方法识别应用程序使用了 appstream-util:
- 第一种方法是通过运行
grep -R appstream-util在源代码中查找 appstream-util,或查看data/meson.build文件; - 另一种方法是阅读构建过程,寻找
Program appstream-util found: NO
将 appstream-glib 添加到 checkdepends 数组中以验证 metainfo 文件。