跳转至内容

GNOME 包指南

来自 ArchWiki
Arch 软件包指南

32 位CLRCMake交叉编译DKMSEclipseElectron字体Free PascalGNOMEGoHaskellJavaKDE内核模块LispMesonMinGWNode.js非免费OCamlPerlPHPPythonRRubyRust - 安全ShellVCSWebWine

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

注意 GNOME 之前使用 https://git.gnome.org,后来迁移到了 https://gitlab.gnome.org[1][链接失效 2025-03-15—HTTP 404]。旧链接应自动重定向到新的 gitlab.gnome.org 域,但手动更新您的源 URL 可能是明智之举。

Meson 和 GNU 构建系统

历史上,GNOME 使用 GNU 构建系统来构建其应用程序。虽然现在仍有一些活跃的应用程序和许多仍在使用 GNU 构建系统的非活跃应用程序,但大多数当前活跃的 GNOME 应用程序已迁移到 Meson 构建系统。

有关适用于大多数 GNOME 应用程序打包需求的说明,请参阅 Meson 包指南

注意 尽管 GNOME 应用程序是用不同的编程语言编写的,但如果 GNOME 应用程序设置了 Meson 作为构建系统,您仍应坚持使用 Meson。例如,不要为用 Rust 语言编写的 GNOME 应用程序使用 Rust 包指南,因为您应该使用 meson,而不是 rustccargo 来构建它。

GSettings schema

GSettings 是 GNOME 应用程序当前使用的 schema,可以使用 GUI 工具 dconf 或 CLI 工具 gsettings(由 glib2 提供,后者很可能已作为依赖项安装)来访问/读取/编辑。GSettings 以前需要打包者的某些注意,但现在已不需要干预。

一些观察

  • 使用 GSettings 的应用程序通常依赖于 GTK(gtk3 或更高版本),因此 GSettings 相关的依赖项通常已满足。
  • 以前在 package() 函数中需要 ./configure--disable-schemas-compile 标志来避免重新编译 GSettings 数据库,但这对于 GNOME 应用程序来说已经不再适用了,尤其是在使用 Meson 作为构建系统的应用程序中。
警告 即使是旧的、非 Meson 的 GNOME 应用程序,也不要在 .install 文件中调用 glib-compile-schemas,因为自 glib2=2.48.0-2 起,GSettings schema 数据库已通过 pacman hooks 自动重新编译。

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() 函数中。

警告 不要在 .install 文件中调用 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 工具包含在图标缓存中。每次添加或删除图标时,都会使用此工具更新缓存。

.desktop 文件

许多包安装符合 Freedesktop.org 标准的 .desktop 文件并在其中注册 MimeType 条目。这些信息存储在一个必须在每次添加或删除时更新的数据库中。这就是 update-desktop-database 工具的功能。

AppStream 和 metainfo 文件

与许多其他应用程序一样,大多数 GNOME 应用程序遵循 Freedesktop.org 的 AppStream 规范,并提供 metainfo 文件,以便在应用程序中心(如 gnome-softwareFlathub)显示应用程序的描述。

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 文件。

© . This site is unofficial and not affiliated with Arch Linux.

Content is available under GNU Free Documentation License 1.3 or later unless otherwise noted.