openSUSE:使用 Meson 打包

跳转到:导航搜索
此页面提供使用 Meson 构建系统在 openSUSE 中打包软件的指南和最佳实践。所有 全局打包指南 也适用于 Meson 项目。

Meson 构建系统

Meson 是一个现代构建系统,专注于速度和易用性。它通常与 Ninja 后端一起使用。

在 openSUSE 中使用 Meson 打包软件遵循与其他构建系统类似的约定,但有一些 Meson 特定的注意事项。

构建依赖

您必须添加

 BuildRequires: meson

RPM 宏

Meson 构建系统已包含在 openSUSE 中,并在 /usr/lib/rpm/macros.d/macros.meson 中提供 rpm 宏。

%meson
定义 CFLAGSLDFLAGS 等,并使用适当的参数(例如 --libdir=%{_libdir})调用 %__meson。您可以将 -Doption=value 传递给此宏,以设置构建系统的选项。
%meson_build
使用正确的 -C-j 参数调用 meson compiles
%meson_install
DESTDIR=%{buildroot} meson install -C ... 的别名。
%meson_test
meson test -C ... 的别名。
%__meson
不鼓励直接使用此宏! meson 可执行文件的路径。

子项目

如果您的项目包含 Meson 子项目,这些子项目不可替换(无法链接到系统提供的库),您应该

  • 要求上游允许链接到系统库
  • 如果不可行,请手动管理 wraps。

将所需的项目添加到您的 SourceX 部分

...
Source0:        <PROJECT_SOURCE_TARBALL>
Source1:        <WRAP_1_SOURCE_TARBALL>
...

在您的 `.spec` 文件中,使用 `SourceX` 标签引用子项目存档,并在 `%prep` 阶段像这样提取它

%prep
...
# Extract symfpu
mkdir -p subprojects/<SUBPROJECT_NAME>
tar   -C subprojects/<SUBPROJECT_NAME> --strip-components=1 -x -f %{SOURCE1}

然后,修改 %build 部分,使 meson 在构建之前应用补丁

%build
meson subprojects packagefiles --apply
...

示例 RPM 规范文件

Name:           example
Version:        2.31.1
Release:        0
Summary:        Example summary
License:        CHANGE-ME
URL:            https://example.com
Source:         %{name}-{version}.tar.gz
BuildRequires:  meson
BuildRequires:  gcc
 
%package devel
Summary:        Development libraries and header files for %{name}
Requires:       %{name} = %{version}

%description devel	
%{summary}.
	
%prep
%autosetup

%build
%meson
%meson_build

%install
%meson_install

%check
%meson_test

%files
%{_libdir}/lib%{name}.so.*

%files devel
%{_libdir}/lib%{name}.so
%{_includedir}/%{name}.h

参见