From Fedora Project Wiki

(Writeup of https://fedorahosted.org/fpc/ticket/655)
 
(Cleanup as promised in https://fedorahosted.org/fpc/ticket/655)
Line 2: Line 2:
<div style="float: right; margin-left: 0.5em" class="toclimit-2">__TOC__</div>
<div style="float: right; margin-left: 0.5em" class="toclimit-2">__TOC__</div>


This document provides best-practices for usage of [http://mesonbuild.com/ The Meson Build System] in packaging RPMs for Fedora. Meson is a buildsystem like automake (it generates code for make) which can generate code for some of lower-level build systems, for example [https://ninja-build.org/ ninja]. It's important to use %meson prefixed macro instead of %ninja, because backend could be easily changed.
This document provides best practices for the usage of [http://mesonbuild.com/ the Meson build system] in Fedora packages. Meson is a build system (similar to automake) which can generate code for other lower-level build systems.  For example, it can generate code for [https://ninja-build.org/ ninja]. When packaging software which builds using Meson it's important to use the <code>%meson</code> macros instead of <code>%ninja</code> or other lower-level build system macros directly.  The backend used by Meson could change.


== BuildRequires ==
== Build Dependencies ==


You '''MUST''' add following BuildRequires:
You '''MUST''' add following BuildRequires:
Line 12: Line 12:
</pre>
</pre>


== RPM Macros ==
== Available Macros ==


* <code>%__meson</code> -- meson executable
You will generally make use of these in your specs:
* <code>%_vpath_srcdir</code> -- source directory ('''NOTE''': you can override it using <tt>%global</tt>, default: <code>.</code>)
* <code>%_vpath_builddir</code> -- build directory ('''NOTE''': you can override it using <tt>%global</tt>, default: <code>%{_target_platform}</code>)
* <code>%meson</code> -- function which defines CFLAGS, LDFLAGS, etc. and calls %__meson with appropriate parameters (<tt>--libdir=%{_libdir}</tt> and such)
* <code>%meson_build</code> -- alias for <code>%ninja_build -C %{_vpath_builddir}</code>
* <code>%meson_install</code> -- alias for <code>%ninja_install -C %{_vpath_builddir}</code>
* <code>%meson_test</code> -- alias for <code>%ninja_test -C %{_vpath_builddir}</code>


{{admon/tip|For more information see source code|<tt>%{rpmmacrodir}/macros.meson</tt> (<tt>/usr/lib/rpm/macros.d/macros.meson</tt>)}}
;<code>%meson</code>
: Defines CFLAGS, LDFLAGS, etc. and calls %__meson with appropriate parameters (<tt>--libdir=%{_libdir}</tt> and such)
;<code>%meson_build</code>
: An alias for <code>%ninja_build -C %{_vpath_builddir}</code>
;<code>%meson_install</code>
: An alias for <code>%ninja_install -C %{_vpath_builddir}</code>
;<code>%meson_test</code>
: An alias for <code>%ninja_test -C %{_vpath_builddir}</code>
 
It is rarely necessary (but permissible) to use or alter these:
 
;<code>%_vpath_srcdir</code>
: Path (relative to the build directory) where the sources to be built are located (default: <code>.</code>)
;<code>%_vpath_builddir</code>
: Path (relative to the build directory) where the The build directory (default: <code>%{_target_platform}</code>)
;<code>%__meson</code>
: The path to the meson executable
 
{{admon/tip|For more information see the source|<tt>%{rpmmacrodir}/macros.meson</tt> (<tt>/usr/lib/rpm/macros.d/macros.meson</tt>)}}


== Example RPM spec file ==
== Example RPM spec file ==

Revision as of 20:52, 21 December 2016

This document provides best practices for the usage of the Meson build system in Fedora packages. Meson is a build system (similar to automake) which can generate code for other lower-level build systems. For example, it can generate code for ninja. When packaging software which builds using Meson it's important to use the %meson macros instead of %ninja or other lower-level build system macros directly. The backend used by Meson could change.

Build Dependencies

You MUST add following BuildRequires:

BuildRequires: meson

Available Macros

You will generally make use of these in your specs:

%meson
Defines CFLAGS, LDFLAGS, etc. and calls %__meson with appropriate parameters (--libdir=%{_libdir} and such)
%meson_build
An alias for %ninja_build -C %{_vpath_builddir}
%meson_install
An alias for %ninja_install -C %{_vpath_builddir}
%meson_test
An alias for %ninja_test -C %{_vpath_builddir}

It is rarely necessary (but permissible) to use or alter these:

%_vpath_srcdir
Path (relative to the build directory) where the sources to be built are located (default: .)
%_vpath_builddir
Path (relative to the build directory) where the The build directory (default: %{_target_platform})
%__meson
The path to the meson executable
Idea.png
For more information see the source
%{rpmmacrodir}/macros.meson (/usr/lib/rpm/macros.d/macros.meson)

Example RPM spec file

%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:            http://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

%post -p /sbin/ldconfig
%postun -p /sbin/ldconfig

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

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