GNOME Goal: Port modules to use Meson build system

As the meson webpage says:

Meson is an open source build system meant to be both extremely fast, and, even more importantly, as user friendly as possible.

The main design point of Meson is that every moment a developer spends writing or debugging build definitions is a second wasted. So is every second spent waiting for the build system to actually start compiling code.

This GNOMEGoal is to coordinate efforts and avoid duplicating work

Guidelines

Meson documentation is quite complete, take a look to these links:

Things to check while porting

  • If your project has configuration options for the Autotools build make sure to port them all to the Meson one, following these style guidelines
    • Drop the enable from --enable-foo boolean options; Meson has boolean values, so -Denable-foo=true would read as redundant, and -Denable-foo=false would read as contradictory. Use -Dfoo=true or -Dfoo=false instead

    • Similarly, you should drop with from --with-bar options

    • Use a consistent separator character for multi-word options, preferably the underscore _, like cert_file or cups_print_backend

    • Try to avoid automatic feature detection; this makes it harder for distributors and continuous integration systems to identify the dependencies needed to build your project
    • Do not add "enable debug" options to inject pre-processor symbols into the build, or control the presence of debugging messages; you should use Meson's own buildtype option

    • Do not add "enable -Werror" options to make warnings fail the build; you should use Meson's own --werror build option

Things to check after the porting:

  • If you port a library:
    • Make sure the list of exported symbols is the same between Autotools and Meson builds
    • Make sure you maintain compatible sonames (use version and soversion when building a library() target)

  • If you release a tarball using Autotools, remember to include the Meson files on it
    • Use the EXTRA_DIST Automake target to include the meson.build, meson_options.txt, and ancillary scripts you may use

  • Update jhbuild and gnome-continuous to use Meson

    • For Continuous you will either need a build API wrapper in your own project, or you will need to write a patch; contact EmmanueleBassi on the #gnome-hackers or #testable IRC channels

  • Use meld to diff install directories of the projects

  • If you rely on symbol visibility — e.g. using libtool or using pre-processor macros — use nm to check that you're still exporting the same ABI

Comments before approval

{i} Add your comments to this goal proposal here

Status of this goal

{i} Tip: If you choose to work on a module, create the bug report on the GNOME bugzilla for the relevant module, and make it block bug 782980. This way people will know someone already works on it, and won't duplicate the work you're doing.

State

Markup

todo

<: #ff8080> todo

patch

<: #ffcc50> [[GnomeBug:xxxxx|patch]]

done

<: #80ff80> [[GnomeBug:xxxxx|done]]

not wanted

<: #dddddd> not wanted

Above are the states and corresponding markup to update the modules state table below.

Tarball

Status

core

at-spi2-core

done

at-spi2-atk

done

dconf

done

evolution-data-server

not wanted

glib-networking

done

gnome-bluetooth

done

gnome-online-accounts

in progress

gnome-control-center

in progress

gnome-desktop

to do

adwaita-icon-theme

to do

gnome-keyring

to do

gnome-menus

to do

gnome-packagekit

done

gnome-session

done

gnome-settings-daemon

to do

gnome-shell

done

gnome-themes-standard

to do

gsettings-desktop-schemas

to do

gvfs

done

mousetweaks

patch

mutter

to do

network-manager-applet

done

telepathy-mission-control

to do

core-utilities

baobab

done

bijiben

done

empathy

to do

eog

done

epiphany

done

evince

to do

gnome-calculator

in progress

gnome-calendar

done

gnome-characters

to do

gnome-contacts

done

gnome-dictionary

done

gnome-disk-utility

done

gnome-font-viewer

done

gnome-logs

in progress

gnome-screenshot

done

gnome-system-log

to do

gnome-system-monitor

to do

gnome-terminal

blocked

gucharmap

to do

nautilus

done

sushi

to do

yelp

to do

core-extras

gnome-backgrounds

in progress

gnome-user-share

to do

vino

to do

gnome-user-docs

in progress

core-os-services

accountsservice

to do

avahi

to do

bluez

to do

cups

to do

dbus

to do

gdm

in progress

NetworkManager

in progress

PackageKit

to do

polkit

to do

upower

to do

udisks

to do

core-deps

atk

done

atkmm

to do

cantarell-fonts

to do

caribou

to do

clutter

in progress

clutter-gtk

done

clutter-gst

in progress

cogl

to do

desktop-file-utils

to do

folks

in progress

gnome-js-common

to do

gspell

todo

gtksourceview

todo

gdk-pixbuf

done

gjs

blocked

glib

merged

glibmm

to do

gnome-video-effects

to do

gobject-introspection

in progress

gst-plugins-base

done

gst-plugins-good

done

gst-plugins-farsight

to do

gstreamer

done

gtk+3

not wanted for now

gtk+4

done

gtk-doc

to do

gtkmm

to do

gudev

to do

hicolor-icon-theme

to do

iso-codes

to do

itstool

to do

json-glib

done

libcanberra

to do

libchamplain

to do

libcroco

to do

libgee

to do

libgepub

done

libgdata

to do

libgsf

to do

libgtop

to do

libgweather

done

libmediaart

done

libmusicbrainz

to do

libnice

to do

libnotify

to do

libpeas

to do

librest

to do

librsvg

to do

libsecret

to do

libsigc++2

to do

libsoup

initial wip patch

libxml2

to do

mm-common

to do

p11-kit

to do

pango

done

pangomm

to do

poppler

to do

pygobject

to do

shared-mime-info

to do

sound-theme-freedesktop

to do

telepathy-glib

to do

telepathy-logger

to do

telepathy-farsight

to do

totem-pl-parser

done

tracker

blocked

vala

to do

vte

blocked

webkit

to do

yelp-tools

to do

yelp-xsl

to do

zenity

to do

colord

to do

apps

accerciser

to do

aislerot

to do

anjuta

to do

brasero

to do

cheese

to do

devhelp

in progress

evolution

not wanted

file-roller

to do

five-or-more

to do

four-in-a-row

to do

frogr

done

gedit

to do

ghex

to do

glade

to do

gnome-boxes

done

gnome-clocks

done

gnome-color-manager

to do

gnome-devel-docs

to do

gnome-documents

in progress

gnome-maps

to do

gnome-music

to do

gnome-software

done

gnome-sound-recorder

to do

gnome-todo

done

gnome-usage

done

gnome-weather

to do

gnome-chess

done

gnome-klotski

to do

gnome-mahjongg

to do

gnome-mines

done

gnome-nibbles

to do

gnome-robots

to do

gnome-sudoku

to do

gnome-tetravex

to do

gnome-tweak-tool

done

iagno

to do

lightsoff

to do

quadrapassel

to do

swell-foop

to do

tali

to do

gnome-nettool

done

nautilus-sendto

done

nemiver

to do

orca

to do

polari

done

rhythmbox

in progress

rygel

doing?

seahorse

done

shotwell

done

simple-scan

done

totem

done

vinagre

to do

Initiatives/GnomeGoals/MesonPorting (last edited 2017-12-15 02:26:29 by RobertAncell)