Directives relatives à la création de paquets Meson

Ce document contient les bonnes pratiques pour l’utilisation du système de compilation Meson dans les paquets Fedora. Meson est un système de compilation (similaire à automake) qui peut générer du code destiné à d’autres systèmes de compilation de plus bas niveau. Par exemple, il peut générer du code pour ninja. En créant des paquets Fedora pour des logiciels compilés à l’aide de Meson, il est important d’utiliser les macros %meson à la place des macros %ninja ou des macros des autres systèmes de compilation, car le backend utilisé par Meson pourrait varier.

Dépendances de compilation

Le BuildRequires suivant DOIT être ajouté :

BuildRequires: meson

Macros disponibles

Dans vos specs, vous utiliserez généralement les macros suivantes :

%meson

Définit CFLAGS, LDFLAGS, etc. et appelle %__meson avec les paramètres appropriés (--libdir=%{_libdir} et autres). Vous pouvez passer -Doption=value à cette macro afin de définir des options pour le système de compilation.

%meson_build

Un alias pour %ninja_build -C %{_vpath_builddir}.

%meson_install

Un alias pour %ninja_install -C %{_vpath_builddir}.

%meson_test

Un alias pour %ninja_test -C %{_vpath_builddir}.

Il est rarement nécessaire (mais permis) d’utiliser ou d’altérer les macros suivantes :

%__meson

Le chemin vers l’exécutable meson.

Fichier spec RPM d’exemple

%global _vpath_srcdir sdk/%{name}/projects/meson

Name:           angelscript
Version:        2.31.1
Release:        1%{?dist}
Summary:        Flexible cross-platform scripting library

License:        zlib
URL:            https://www.angelcode.com/angelscript/
Source:         %{url}sdk/files/%{name}_%{version}.zip

BuildRequires:  meson
BuildRequires:  gcc

%package devel
Summary:        Development libraries and header files for %{name}
Requires:       %{name}%{?_isa} = %{?epoch:%{epoch}:}%{version}-%{release}

%description devel
%{summary}.

%prep
%autosetup -c

%build
%meson
%meson_build

%install
%meson_install

%check
%meson_test

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

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