mirror of
https://github.com/brl/mutter.git
synced 2024-11-08 23:16:20 -05:00
ef85d1a643
This commit adds meson build support to mutter. It takes a step away from the three separate code bases with three different autotools setups into a single meson build system. There are still places that can be unified better, for example by removing various "config.h" style files from cogl and clutter, centralizing debug C flags and other configurable macros, and similar artifacts that are there only because they were once separate code bases. There are some differences between the autotools setup and the new meson. Here are a few: The meson setup doesn't generate wrapper scripts for various cogl and clutter test cases. What these tests did was more or less generate a tiny script that called an executable with a test name as the argument. To run particular tests, just run the test executable with the name of the test as the argument. The meson setup doesn't install test files anymore. The autotools test suite was designed towards working with installed tests, but it didn't really still, and now with meson, it doesn't install anything at all, but instead makes sure that everything runs with the uninstalled input files, binaries and libraries when running the test suite. Installable tests may come later. Tests from cogl, clutter and mutter are run on 'meson test'. In autotools, only cogl and clutter tests were run on 'make check'.
318 lines
9.2 KiB
Meson
318 lines
9.2 KiB
Meson
project('mutter', 'c',
|
|
version: '3.30.1',
|
|
meson_version: '>= 0.46.0',
|
|
license: 'GPLv2+'
|
|
)
|
|
|
|
mutter_plugin_api_version = '3'
|
|
|
|
libmutter_api_version = '3'
|
|
|
|
# generic version requirements
|
|
glib_req = '>= 2.53.2'
|
|
gi_req = '>= 0.9.5'
|
|
gtk3_req = '>= 3.19.8'
|
|
gdk_pixbuf_req = '>= 2.0'
|
|
uprof_req = '>= 0.3'
|
|
pango_req = '>= 1.2.0'
|
|
cairo_req = '>= 1.10.0'
|
|
pangocairo_req = '>= 1.20'
|
|
gsettings_desktop_schemas_req = '>= 3.21.4'
|
|
json_glib_req = '>= 0.12.0'
|
|
upower_glib_req = '>= 0.99.0'
|
|
xcomposite_req = '>= 0.4'
|
|
xkbcommon_req = '>= 0.4.3'
|
|
xfixes_req = '>= 3'
|
|
xi_req = '>= 1.6.99.1'
|
|
xrandr_req = '>= 1.5.0'
|
|
libstartup_notification_req = '>= 0.7'
|
|
libcanberra_gtk3_req = '>= 0.26'
|
|
libwacom_req = '>= 0.13'
|
|
atk_req = '>= 2.5.3'
|
|
|
|
# optional version requirements
|
|
udev_req = '>= 232'
|
|
|
|
# wayland version requirements
|
|
wayland_server_req = '>= 1.13.0'
|
|
wayland_protocols_req = '>= 1.16'
|
|
|
|
# native backend version requirements
|
|
libinput_req = '>= 1.4'
|
|
gbm_req = '>= 10.3'
|
|
|
|
# screen cast version requirements
|
|
libpipewire_req = '>= 0.2.2'
|
|
|
|
gnome = import('gnome')
|
|
pkg = import('pkgconfig')
|
|
i18n = import('i18n')
|
|
cc = meson.get_compiler('c')
|
|
|
|
prefix = get_option('prefix')
|
|
|
|
bindir = join_paths(prefix, get_option('bindir'))
|
|
datadir = join_paths(prefix, get_option('datadir'))
|
|
libdir = join_paths(prefix, get_option('libdir'))
|
|
libexecdir = join_paths(prefix, get_option('libexecdir'))
|
|
includedir = join_paths(prefix, get_option('includedir'))
|
|
sysconfdir = get_option('sysconfdir')
|
|
|
|
pkgname = '@0@-@1@'.format(meson.project_name(), libmutter_api_version)
|
|
|
|
pkgdatadir = join_paths(datadir, pkgname)
|
|
pkglibdir = join_paths(libdir, pkgname)
|
|
pkgincludedir = join_paths(includedir, pkgname)
|
|
|
|
gettext_package = meson.project_name()
|
|
localedir = join_paths(datadir, 'locale')
|
|
|
|
top_srcdir = meson.current_source_dir()
|
|
builddir = meson.current_build_dir()
|
|
|
|
m_dep = cc.find_library('m', required: true)
|
|
x11_dep = dependency('x11')
|
|
gtk3_dep = dependency('gtk+-3.0', version: gtk3_req)
|
|
gdk_pixbuf_dep = dependency('gdk-pixbuf-2.0')
|
|
pango_dep = dependency('pango', version: pango_req)
|
|
cairo_dep = dependency('cairo', version: cairo_req)
|
|
cairo_gobject_dep = dependency('cairo-gobject', version: cairo_req)
|
|
pangocairo_dep = dependency('pangocairo', version: pangocairo_req)
|
|
gsettings_desktop_schemas_dep = dependency('gsettings-desktop-schemas',
|
|
version: gsettings_desktop_schemas_req)
|
|
glib_dep = dependency('glib-2.0', version: glib_req)
|
|
gio_dep = dependency('gio-unix-2.0', version: glib_req)
|
|
gio_unix_dep = dependency('gio-unix-2.0', version: glib_req)
|
|
gobject_dep = dependency('gobject-2.0', version: glib_req)
|
|
gthread_dep = dependency('gobject-2.0', version: glib_req)
|
|
gmodule_no_export_dep = dependency('gmodule-no-export-2.0', version: glib_req)
|
|
gnome_settings_daemon_dep = dependency('gnome-settings-daemon')
|
|
json_glib_dep = dependency('json-glib-1.0', version: json_glib_req)
|
|
gnome_desktop_dep = dependency('gnome-desktop-3.0')
|
|
xcomposite_dep = dependency('xcomposite', version: xcomposite_req)
|
|
xcursor_dep = dependency('xcursor')
|
|
xdamage_dep = dependency('xdamage')
|
|
xext_dep = dependency('xext')
|
|
xfixes_dep = dependency('xfixes', version: xfixes_req)
|
|
xi_dep = dependency('xi', version: xi_req)
|
|
xtst_dep = dependency('xtst')
|
|
xkbfile_dep = dependency('xkbfile')
|
|
xkeyboard_config_dep = dependency('xkeyboard-config')
|
|
xkbcommon_dep = dependency('xkbcommon', version: xkbcommon_req)
|
|
xkbcommon_x11_dep = dependency('xkbcommon-x11')
|
|
xrender_dep = dependency('xrender')
|
|
x11_xcb_dep = dependency('x11-xcb')
|
|
xrandr_dep = dependency('xrandr', version: xrandr_req)
|
|
xcb_randr_dep = dependency('xcb-randr')
|
|
xcb_res_dep = dependency('xcb-res')
|
|
xinerama_dep = dependency('xinerama')
|
|
ice_dep = dependency('ice')
|
|
atk_dep = dependency('atk', version: atk_req)
|
|
|
|
# For now always require X11 support
|
|
have_x11 = true
|
|
|
|
have_gl = get_option('opengl')
|
|
if have_gl
|
|
gl_dep = dependency('gl')
|
|
gl_libname = get_option('opengl_libname')
|
|
endif
|
|
|
|
have_egl = get_option('egl')
|
|
if have_egl
|
|
egl_dep = dependency('egl')
|
|
endif
|
|
|
|
have_glx = get_option('glx')
|
|
if have_glx
|
|
if not have_gl
|
|
error('GLX support requires OpenGL to be enabled')
|
|
endif
|
|
endif
|
|
|
|
have_egl_xlib = have_egl and have_x11
|
|
|
|
have_gles2 = get_option('gles2')
|
|
if have_gles2
|
|
gles2_dep = dependency('glesv2')
|
|
gles2_libname = get_option('gles2_libname')
|
|
|
|
if not have_egl
|
|
error('GLESv2 support requires EGL to be enabled')
|
|
endif
|
|
endif
|
|
|
|
have_wayland = get_option('wayland')
|
|
if have_wayland
|
|
wayland_server_dep = dependency('wayland-server', version: wayland_server_req)
|
|
wayland_protocols_dep = dependency('wayland-protocols',
|
|
version: wayland_protocols_req)
|
|
wayland_egl_dep = dependency('wayland-egl')
|
|
|
|
if not have_egl
|
|
error('Wayland support requires EGL to be enabled')
|
|
endif
|
|
endif
|
|
|
|
have_libgudev = get_option('udev')
|
|
if have_libgudev
|
|
libudev_dep = dependency('libudev', version: udev_req)
|
|
gudev_dep = dependency('gudev-1.0', version: udev_req)
|
|
endif
|
|
|
|
have_native_backend = get_option('native_backend')
|
|
if have_native_backend
|
|
libdrm_dep = dependency('libdrm')
|
|
libgbm_dep = dependency('gbm', version: gbm_req)
|
|
libinput_dep = dependency('libinput', version: libinput_req)
|
|
|
|
libsystemd_dep = dependency('libsystemd')
|
|
if libsystemd_dep.found()
|
|
logind_provider_dep = libsystemd_dep
|
|
else
|
|
logind_provider_dep = dependency('libelogind')
|
|
endif
|
|
|
|
if not have_egl
|
|
error('The native backend requires EGL to be enabled')
|
|
endif
|
|
|
|
if not have_gles2
|
|
error('The native backend requires GLESv2 to be enabled')
|
|
endif
|
|
|
|
if not have_libgudev
|
|
error('The native backend requires udev to be enabled')
|
|
endif
|
|
endif
|
|
|
|
have_egl_device = get_option('egl_device')
|
|
|
|
have_wayland_eglstream = get_option('wayland_eglstream')
|
|
if have_wayland_eglstream
|
|
wayland_eglstream_protocols_dep = dependency('wayland-eglstream-protocols')
|
|
dl_dep = cc.find_library('dl', required: true)
|
|
|
|
if not have_wayland
|
|
error('Wayland EGLStream support requires Wayland to be enabled')
|
|
endif
|
|
endif
|
|
|
|
have_sm = get_option('sm')
|
|
if have_sm
|
|
sm_dep = dependency('sm')
|
|
endif
|
|
|
|
have_libcanberra = get_option('libcanberra')
|
|
if have_libcanberra
|
|
libcanberra_gtk3_dep = dependency('libcanberra-gtk3', version: libcanberra_gtk3_req)
|
|
endif
|
|
|
|
have_libwacom = get_option('libwacom')
|
|
if have_libwacom
|
|
libwacom_dep = dependency('libwacom', version: libwacom_req)
|
|
endif
|
|
|
|
have_pango_ft2 = get_option('pango_ft2')
|
|
if have_pango_ft2
|
|
pangoft2_dep = dependency('pangoft2')
|
|
endif
|
|
|
|
have_startup_notification = get_option('startup_notification')
|
|
if have_startup_notification
|
|
libstartup_notification_dep = dependency('libstartup-notification-1.0',
|
|
version: libstartup_notification_req)
|
|
endif
|
|
|
|
have_remote_desktop = get_option('remote_desktop')
|
|
if have_remote_desktop
|
|
libpipewire_dep = dependency('libpipewire-0.2', version: libpipewire_req)
|
|
endif
|
|
|
|
have_introspection = get_option('introspection')
|
|
if have_introspection
|
|
gobject_introspection_dep = dependency('gobject-introspection-1.0')
|
|
endif
|
|
|
|
have_cogl_tests = get_option('cogl_tests')
|
|
have_clutter_tests = get_option('clutter_tests')
|
|
|
|
have_tests = get_option('tests')
|
|
if have_tests
|
|
if not have_wayland
|
|
error('Tests require Wayland to be enabled')
|
|
endif
|
|
endif
|
|
|
|
required_functions = [
|
|
'ffs',
|
|
'clz',
|
|
]
|
|
foreach function : required_functions
|
|
if not cc.has_function(function)
|
|
error('Required function ' + function + ' missing')
|
|
endif
|
|
endforeach
|
|
|
|
add_project_arguments('-D_GNU_SOURCE', language: 'c')
|
|
|
|
debug_c_args = []
|
|
buildtype = get_option('buildtype')
|
|
if buildtype.startswith('debug')
|
|
debug_c_args += '-DG_ENABLE_DEBUG'
|
|
endif
|
|
add_project_arguments(debug_c_args, language: 'c')
|
|
|
|
cc.compiles('void main (void) { __builtin_ffsl (0); __builtin_popcountl (0); }')
|
|
|
|
cdata = configuration_data()
|
|
cdata.set_quoted('GETTEXT_PACKAGE', gettext_package)
|
|
cdata.set_quoted('VERSION', meson.project_version())
|
|
cdata.set_quoted('PACKAGE_VERSION', meson.project_version())
|
|
|
|
cdata.set('HAVE_EGL', have_egl)
|
|
cdata.set('HAVE_WAYLAND', have_wayland)
|
|
cdata.set('HAVE_NATIVE_BACKEND', have_native_backend)
|
|
cdata.set('HAVE_REMOTE_DESKTOP', have_remote_desktop)
|
|
cdata.set('HAVE_EGL_DEVICE', have_egl_device)
|
|
cdata.set('HAVE_WAYLAND_EGLSTREAM', have_wayland_eglstream)
|
|
cdata.set('HAVE_LIBGUDEV', have_libgudev)
|
|
cdata.set('HAVE_LIBCANBERRA', have_libcanberra)
|
|
cdata.set('HAVE_LIBWACOM', have_libwacom)
|
|
cdata.set('HAVE_SM', have_sm)
|
|
cdata.set('HAVE_STARTUP_NOTIFICATION', have_startup_notification)
|
|
cdata.set('HAVE_INTROSPECTION', have_introspection)
|
|
|
|
xkb_base = xkeyboard_config_dep.get_pkgconfig_variable('xkb_base')
|
|
cdata.set_quoted('XKB_BASE', xkb_base)
|
|
|
|
xwayland_path = get_option('xwayland_path')
|
|
if xwayland_path == ''
|
|
xwayland_path = find_program('Xwayland').path()
|
|
endif
|
|
cdata.set_quoted('XWAYLAND_PATH', xwayland_path)
|
|
|
|
xwayland_grab_default_access_rules = get_option('xwayland_grab_default_access_rules')
|
|
cdata.set_quoted('XWAYLAND_GRAB_DEFAULT_ACCESS_RULES',
|
|
xwayland_grab_default_access_rules)
|
|
|
|
cdata.set_quoted('MUTTER_PLUGIN_DIR', join_paths(pkglibdir, 'plugins'))
|
|
cdata.set_quoted('MUTTER_LOCALEDIR', localedir)
|
|
cdata.set_quoted('MUTTER_LIBEXECDIR', libexecdir)
|
|
cdata.set_quoted('MUTTER_PKGDATADIR', pkgdatadir)
|
|
|
|
config_h = configure_file(
|
|
input: 'config.h.meson',
|
|
output: 'config.h',
|
|
configuration: cdata
|
|
)
|
|
|
|
top_includepath = include_directories('.')
|
|
|
|
subdir('cogl')
|
|
subdir('clutter')
|
|
subdir('data')
|
|
subdir('src')
|
|
subdir('po')
|
|
subdir('doc/man')
|