Add meson build support

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'.
This commit is contained in:
Jonas Ådahl 2018-05-22 15:55:35 +02:00
parent 417c00b8fa
commit ef85d1a643
39 changed files with 3876 additions and 0 deletions

1
.gitignore vendored
View File

@ -131,3 +131,4 @@ ltversion.m4
lt~obsolete.m4
.dirstamp
**/tags.*
build/

View File

@ -0,0 +1,14 @@
/* Mutter version */
#mesondefine MUTTER_VERSION
/* List of Cogl drivers */
#mesondefine CLUTTER_DRIVERS
/* Have evdev support for input handling */
#mesondefine HAVE_EVDEV
/* Building with libwacom for advanced tablet management */
#mesondefine HAVE_LIBWACOM
/* Supports PangoFt2 */
#mesondefine HAVE_PANGO_FT2

654
clutter/clutter/meson.build Normal file
View File

@ -0,0 +1,654 @@
clutter_clutter_includedir = join_paths(clutter_includedir, 'clutter')
clutter_headers = [
'clutter.h',
'clutter-action.h',
'clutter-actor-meta.h',
'clutter-actor.h',
'clutter-align-constraint.h',
'clutter-animatable.h',
'clutter-autocleanups.h',
'clutter-backend.h',
'clutter-bind-constraint.h',
'clutter-binding-pool.h',
'clutter-bin-layout.h',
'clutter-blur-effect.h',
'clutter-box-layout.h',
'clutter-brightness-contrast-effect.h',
'clutter-cairo.h',
'clutter-canvas.h',
'clutter-child-meta.h',
'clutter-click-action.h',
'clutter-clone.h',
'clutter-color-static.h',
'clutter-color.h',
'clutter-colorize-effect.h',
'clutter-constraint.h',
'clutter-container.h',
'clutter-content.h',
'clutter-deform-effect.h',
'clutter-deprecated.h',
'clutter-desaturate-effect.h',
'clutter-device-manager.h',
'clutter-drag-action.h',
'clutter-drop-action.h',
'clutter-effect.h',
'clutter-enums.h',
'clutter-event.h',
'clutter-feature.h',
'clutter-fixed-layout.h',
'clutter-flow-layout.h',
'clutter-gesture-action.h',
'clutter-grid-layout.h',
'clutter-group.h',
'clutter-image.h',
'clutter-input-device.h',
'clutter-input-device-tool.h',
'clutter-input-focus.h',
'clutter-input-method.h',
'clutter-interval.h',
'clutter-keyframe-transition.h',
'clutter-keysyms.h',
'clutter-layout-manager.h',
'clutter-layout-meta.h',
'clutter-macros.h',
'clutter-main.h',
'clutter-mutter.h',
'clutter-offscreen-effect.h',
'clutter-page-turn-effect.h',
'clutter-paint-nodes.h',
'clutter-paint-node.h',
'clutter-pan-action.h',
'clutter-path-constraint.h',
'clutter-path.h',
'clutter-property-transition.h',
'clutter-rotate-action.h',
'clutter-script.h',
'clutter-scriptable.h',
'clutter-scroll-actor.h',
'clutter-settings.h',
'clutter-shader-effect.h',
'clutter-shader-types.h',
'clutter-swipe-action.h',
'clutter-snap-constraint.h',
'clutter-stage.h',
'clutter-stage-manager.h',
'clutter-tap-action.h',
'clutter-test-utils.h',
'clutter-texture.h',
'clutter-text.h',
'clutter-text-buffer.h',
'clutter-timeline.h',
'clutter-transition-group.h',
'clutter-transition.h',
'clutter-types.h',
'clutter-units.h',
'clutter-virtual-input-device.h',
'clutter-zoom-action.h',
]
clutter_sources = [
'clutter-action.c',
'clutter-actor-box.c',
'clutter-actor-meta.c',
'clutter-actor.c',
'clutter-align-constraint.c',
'clutter-animatable.c',
'clutter-backend.c',
'clutter-base-types.c',
'clutter-bezier.c',
'clutter-bind-constraint.c',
'clutter-binding-pool.c',
'clutter-bin-layout.c',
'clutter-blur-effect.c',
'clutter-box-layout.c',
'clutter-brightness-contrast-effect.c',
'clutter-cairo.c',
'clutter-canvas.c',
'clutter-child-meta.c',
'clutter-click-action.c',
'clutter-clone.c',
'clutter-color.c',
'clutter-colorize-effect.c',
'clutter-constraint.c',
'clutter-container.c',
'clutter-content.c',
'clutter-deform-effect.c',
'clutter-desaturate-effect.c',
'clutter-device-manager.c',
'clutter-drag-action.c',
'clutter-drop-action.c',
'clutter-effect.c',
'clutter-event.c',
'clutter-feature.c',
'clutter-fixed-layout.c',
'clutter-flatten-effect.c',
'clutter-flow-layout.c',
'clutter-gesture-action.c',
'clutter-grid-layout.c',
'clutter-image.c',
'clutter-input-device.c',
'clutter-input-device-tool.c',
'clutter-input-focus.c',
'clutter-input-method.c',
'clutter-virtual-input-device.c',
'clutter-interval.c',
'clutter-keyframe-transition.c',
'clutter-keysyms-table.c',
'clutter-layout-manager.c',
'clutter-layout-meta.c',
'clutter-main.c',
'clutter-master-clock.c',
'clutter-master-clock-default.c',
'clutter-offscreen-effect.c',
'clutter-page-turn-effect.c',
'clutter-paint-nodes.c',
'clutter-paint-node.c',
'clutter-pan-action.c',
'clutter-path-constraint.c',
'clutter-path.c',
'clutter-property-transition.c',
'clutter-rotate-action.c',
'clutter-script.c',
'clutter-script-parser.c',
'clutter-scriptable.c',
'clutter-scroll-actor.c',
'clutter-settings.c',
'clutter-shader-effect.c',
'clutter-shader-types.c',
'clutter-swipe-action.c',
'clutter-snap-constraint.c',
'clutter-stage.c',
'clutter-stage-manager.c',
'clutter-stage-window.c',
'clutter-tap-action.c',
'clutter-test-utils.c',
'clutter-text.c',
'clutter-text-buffer.c',
'clutter-transition-group.c',
'clutter-transition.c',
'clutter-timeline.c',
'clutter-units.c',
'clutter-util.c',
'clutter-paint-volume.c',
'clutter-zoom-action.c',
]
clutter_private_headers = [
'clutter-actor-meta-private.h',
'clutter-actor-private.h',
'clutter-backend-private.h',
'clutter-bezier.h',
'clutter-constraint-private.h',
'clutter-content-private.h',
'clutter-debug.h',
'clutter-device-manager-private.h',
'clutter-easing.h',
'clutter-effect-private.h',
'clutter-event-translator.h',
'clutter-event-private.h',
'clutter-flatten-effect.h',
'clutter-gesture-action-private.h',
'clutter-id-pool.h',
'clutter-input-focus-private.h',
'clutter-input-method-private.h',
'clutter-master-clock.h',
'clutter-master-clock-default.h',
'clutter-offscreen-effect-private.h',
'clutter-paint-node-private.h',
'clutter-paint-volume-private.h',
'clutter-private.h',
'clutter-script-private.h',
'clutter-settings-private.h',
'clutter-stage-manager-private.h',
'clutter-stage-private.h',
'clutter-stage-view.h',
'clutter-stage-window.h',
]
clutter_nonintrospected_sources = [
'clutter-easing.c',
'clutter-event-translator.c',
'clutter-id-pool.c',
'clutter-stage-view.c',
]
clutter_deprecated_headers = [
'deprecated/clutter-actor.h',
'deprecated/clutter-alpha.h',
'deprecated/clutter-animatable.h',
'deprecated/clutter-animation.h',
'deprecated/clutter-animator.h',
'deprecated/clutter-backend.h',
'deprecated/clutter-behaviour.h',
'deprecated/clutter-behaviour-depth.h',
'deprecated/clutter-behaviour-ellipse.h',
'deprecated/clutter-behaviour-opacity.h',
'deprecated/clutter-behaviour-path.h',
'deprecated/clutter-behaviour-rotate.h',
'deprecated/clutter-behaviour-scale.h',
'deprecated/clutter-bin-layout.h',
'deprecated/clutter-box.h',
'deprecated/clutter-cairo-texture.h',
'deprecated/clutter-container.h',
'deprecated/clutter-frame-source.h',
'deprecated/clutter-group.h',
'deprecated/clutter-input-device.h',
'deprecated/clutter-keysyms.h',
'deprecated/clutter-list-model.h',
'deprecated/clutter-main.h',
'deprecated/clutter-media.h',
'deprecated/clutter-model.h',
'deprecated/clutter-rectangle.h',
'deprecated/clutter-score.h',
'deprecated/clutter-shader.h',
'deprecated/clutter-stage-manager.h',
'deprecated/clutter-stage.h',
'deprecated/clutter-state.h',
'deprecated/clutter-table-layout.h',
'deprecated/clutter-texture.h',
'deprecated/clutter-timeline.h',
'deprecated/clutter-timeout-pool.h',
'deprecated/clutter-util.h',
]
clutter_deprecated_sources = [
'deprecated/clutter-actor-deprecated.c',
'deprecated/clutter-alpha.c',
'deprecated/clutter-animation.c',
'deprecated/clutter-animator.c',
'deprecated/clutter-behaviour.c',
'deprecated/clutter-behaviour-depth.c',
'deprecated/clutter-behaviour-ellipse.c',
'deprecated/clutter-behaviour-opacity.c',
'deprecated/clutter-behaviour-path.c',
'deprecated/clutter-behaviour-rotate.c',
'deprecated/clutter-behaviour-scale.c',
'deprecated/clutter-box.c',
'deprecated/clutter-cairo-texture.c',
'deprecated/clutter-frame-source.c',
'deprecated/clutter-group.c',
'deprecated/clutter-input-device-deprecated.c',
'deprecated/clutter-layout-manager-deprecated.c',
'deprecated/clutter-list-model.c',
'deprecated/clutter-media.c',
'deprecated/clutter-model.c',
'deprecated/clutter-rectangle.c',
'deprecated/clutter-score.c',
'deprecated/clutter-shader.c',
'deprecated/clutter-state.c',
'deprecated/clutter-table-layout.c',
'deprecated/clutter-texture.c',
'deprecated/clutter-timeout-pool.c',
]
clutter_deprecated_private_headers = [
'deprecated/clutter-model-private.h',
'deprecated/clutter-timeout-interval.h',
]
clutter_deprecated_nonintrospected_sources = [
'deprecated/clutter-timeout-interval.c',
]
clutter_backend_sources = []
clutter_backend_nonintrospected_sources = [
'cogl/clutter-stage-cogl.c',
]
clutter_backend_headers = []
clutter_backend_private_headers = [
'cogl/clutter-stage-cogl.h',
]
if have_x11
clutter_x11_sources = [
'x11/clutter-backend-x11.c',
'x11/clutter-device-manager-core-x11.c',
'x11/clutter-device-manager-xi2.c',
'x11/clutter-event-x11.c',
'x11/clutter-input-device-core-x11.c',
'x11/clutter-input-device-tool-xi2.c',
'x11/clutter-input-device-xi2.c',
'x11/clutter-keymap-x11.c',
'x11/clutter-stage-x11.c',
'x11/clutter-virtual-input-device-x11.c',
'x11/clutter-x11-texture-pixmap.c',
]
clutter_backend_sources += clutter_x11_sources
clutter_x11_nonintrospected_sources = [
'x11/clutter-xkb-a11y-x11.c',
]
clutter_backend_nonintrospected_sources += clutter_x11_nonintrospected_sources
clutter_x11_headers = [
'x11/clutter-x11.h',
'x11/clutter-x11-texture-pixmap.h',
]
clutter_backend_headers += clutter_x11_headers
clutter_x11_private_headers = [
'x11/clutter-backend-x11.h',
'x11/clutter-device-manager-core-x11.h',
'x11/clutter-device-manager-xi2.h',
'x11/clutter-input-device-core-x11.h',
'x11/clutter-input-device-tool-xi2.h',
'x11/clutter-input-device-xi2.h',
'x11/clutter-keymap-x11.h',
'x11/clutter-settings-x11.h',
'x11/clutter-stage-x11.h',
'x11/clutter-virtual-input-device-x11.h',
'x11/clutter-xkb-a11y-x11.h',
]
clutter_backend_private_headers += clutter_x11_private_headers
clutter_x11_nonintrospected_sources = [
'x11/xsettings/xsettings-client.c',
'x11/xsettings/xsettings-client.h',
'x11/xsettings/xsettings-common.c',
'x11/xsettings/xsettings-common.h',
]
clutter_backend_nonintrospected_sources += clutter_x11_nonintrospected_sources
endif
if have_native_backend
clutter_native_nonintrospected_sources = [
'egl/clutter-backend-eglnative.c',
'evdev/clutter-device-manager-evdev.c',
'evdev/clutter-event-evdev.c',
'evdev/clutter-input-device-evdev.c',
'evdev/clutter-input-device-tool-evdev.c',
'evdev/clutter-seat-evdev.c',
'evdev/clutter-virtual-input-device-evdev.c',
'evdev/clutter-xkb-utils.c',
]
clutter_backend_nonintrospected_sources += clutter_native_nonintrospected_sources
clutter_native_private_headers = [
'evdev/clutter-evdev.h',
'evdev/clutter-device-manager-evdev.h',
'evdev/clutter-input-device-evdev.h',
'evdev/clutter-input-device-tool-evdev.h',
'evdev/clutter-seat-evdev.h',
'evdev/clutter-virtual-input-device-evdev.h',
'evdev/clutter-xkb-utils.h',
]
clutter_backend_private_headers += clutter_native_private_headers
endif
if have_wayland
clutter_wayland_nonintrospected_sources = [
'wayland/clutter-wayland-surface.c',
]
clutter_backend_nonintrospected_sources += clutter_wayland_nonintrospected_sources
clutter_wayland_private_headers = [
'wayland/clutter-wayland-compositor.h',
'wayland/clutter-wayland-surface.h',
]
clutter_backend_private_headers += clutter_wayland_private_headers
endif
cally_headers = [
'cally/cally-actor.h',
'cally/cally-clone.h',
'cally/cally-factory.h',
'cally/cally-group.h',
'cally/cally.h',
'cally/cally-main.h',
'cally/cally-rectangle.h',
'cally/cally-root.h',
'cally/cally-stage.h',
'cally/cally-text.h',
'cally/cally-texture.h',
'cally/cally-util.h',
]
cally_sources = [
'cally/cally-actor.c',
'cally/cally.c',
'cally/cally-clone.c',
'cally/cally-group.c',
'cally/cally-rectangle.c',
'cally/cally-root.c',
'cally/cally-stage.c',
'cally/cally-text.c',
'cally/cally-texture.c',
'cally/cally-util.c',
]
cally_private_headers = [
'cally/cally-actor-private.h',
]
clutter_built_sources = []
clutter_built_headers = []
clutter_built_private_headers = []
cdata = configuration_data()
cdata.set_quoted('MUTTER_VERSION', meson.project_version())
cdata.set('CLUTTER_DRIVERS', '"*"')
cdata.set('HAVE_EVDEV', have_native_backend)
cdata.set('HAVE_LIBWACOM', have_libwacom)
cdata.set('HAVE_PANGO_FT2', have_pango_ft2)
clutter_build_config_h = configure_file(
input: 'clutter-build-config.h.meson',
output: 'clutter-build-config.h',
configuration: cdata,
install: false,
)
clutter_built_private_headers += clutter_build_config_h
clutter_config_defines = []
if have_wayland
clutter_config_defines += [
'#define CLUTTER_HAS_WAYLAND_COMPOSITOR_SUPPORT 1',
]
endif
if have_x11
clutter_config_defines += [
'#define CLUTTER_WINDOWING_X11 "x11"',
'#define CLUTTER_INPUT_X11 "x11"',
'#define CLUTTER_WINDOWING_GLX "glx"',
]
endif
if have_native_backend
clutter_config_defines += [
'#define CLUTTER_WINDOWING_EGL "eglnative"',
'#define CLUTTER_INPUT_EVDEV "evdev"',
]
endif
clutter_config_defines += [
'#define CLUTTER_INPUT_NULL "null"',
]
clutter_config_defines_string = ''
foreach clutter_config_define : clutter_config_defines
clutter_config_defines_string += clutter_config_define + '\n'
endforeach
cdata = configuration_data()
cdata.set('CLUTTER_CONFIG_DEFINES', clutter_config_defines_string)
clutter_config_h = configure_file(
input: 'clutter-config.h.in',
output: 'clutter-config.h',
configuration: cdata,
install: true,
install_dir: clutter_clutter_includedir,
)
clutter_built_headers += clutter_config_h
clutter_enum_types = gnome.mkenums('clutter-enum-types',
sources: [clutter_headers, clutter_deprecated_headers],
c_template: 'clutter-enum-types.c.in',
h_template: 'clutter-enum-types.h.in',
install_dir: clutter_clutter_includedir,
install_header: true,
)
clutter_built_sources += clutter_enum_types[0]
clutter_built_headers += clutter_enum_types[1]
clutter_marshal = gnome.genmarshal('clutter-marshal',
prefix: '_clutter_marshal',
sources: 'clutter-marshal.list',
valist_marshallers: true,
extra_args: ['--prototypes'],
install_dir: clutter_clutter_includedir,
install_header: true,
)
clutter_built_sources += clutter_marshal[0]
clutter_built_headers += clutter_marshal[1]
libmutter_clutter_name = 'mutter-clutter-' + libmutter_api_version
libmutter_clutter = shared_library(libmutter_clutter_name,
sources: [
clutter_sources,
clutter_headers,
clutter_private_headers,
clutter_nonintrospected_sources,
clutter_deprecated_sources,
clutter_deprecated_nonintrospected_sources,
clutter_deprecated_headers,
clutter_deprecated_private_headers,
clutter_backend_sources,
clutter_backend_nonintrospected_sources,
clutter_backend_headers,
clutter_backend_private_headers,
clutter_built_sources,
clutter_built_headers,
cally_sources,
cally_headers,
cally_private_headers,
],
c_args: clutter_c_args,
include_directories: clutter_includes,
dependencies: [clutter_deps],
link_with: [
libmutter_cogl,
libmutter_cogl_pango,
libmutter_cogl_path,
],
install_rpath: pkglibdir,
install_dir: pkglibdir,
install: true,
)
libmutter_clutter_dep = declare_dependency(
sources: [clutter_enum_types[1]],
link_with: libmutter_clutter,
)
if have_introspection
clutter_introspection_args = clutter_c_args + [
'-U_GNU_SOURCE', # _GNU_SOURCE triggers warnings in g-ir-scanner
'--quiet',
]
libmutter_clutter_gir = gnome.generate_gir(libmutter_clutter,
sources: [
clutter_built_sources,
clutter_built_headers,
clutter_sources,
clutter_headers,
clutter_deprecated_sources,
clutter_deprecated_headers,
],
nsversion: libmutter_api_version,
namespace: 'Clutter',
export_packages: [libmutter_clutter_name],
includes: [
libmutter_cogl_gir[0],
libmutter_cogl_pango_gir[0],
'GL-1.0',
'GObject-2.0',
'cairo-1.0',
'Atk-1.0',
'Json-1.0',
],
dependencies: [cogl_deps],
extra_args: clutter_introspection_args + ['--c-include=clutter/clutter.h'],
install_dir_gir: pkglibdir,
install_dir_typelib: pkglibdir,
install: true,
)
libmutter_cally_gir = gnome.generate_gir(libmutter_clutter,
sources: [
cally_sources,
cally_headers,
],
nsversion: libmutter_api_version,
namespace: 'Cally',
includes: [
libmutter_cogl_gir[0],
libmutter_cogl_pango_gir[0],
libmutter_clutter_gir[0],
],
dependencies: [cogl_deps],
extra_args: clutter_introspection_args,
install_dir_gir: pkglibdir,
install_dir_typelib: pkglibdir,
install: true
)
if have_x11
libmutter_clutter_x11_gir = gnome.generate_gir(libmutter_clutter,
sources: [
clutter_x11_sources,
clutter_x11_headers,
],
nsversion: libmutter_api_version,
namespace: 'ClutterX11',
export_packages: ['mutter-clutter-x11-' + libmutter_api_version],
includes: [
libmutter_cogl_gir[0],
libmutter_cogl_pango_gir[0],
libmutter_clutter_gir[0],
'xlib-2.0',
],
dependencies: [],
extra_args: clutter_introspection_args,
install_dir_gir: pkglibdir,
install_dir_typelib: pkglibdir,
install: true
)
endif
endif
install_headers(clutter_headers,
subdir: clutter_clutter_includedir)
install_headers(cally_headers,
subdir: join_paths(clutter_includedir, 'cally'))
install_headers(clutter_deprecated_headers,
subdir: join_paths(clutter_clutter_includedir, 'deprecated'))
install_headers(clutter_x11_headers,
subdir: join_paths(clutter_clutter_includedir, 'x11'))
pkg.generate(
name: 'Mutters Clutter',
filebase: libmutter_clutter_name,
description: 'Mutters Clutter Private Library',
libraries: [libmutter_clutter, m_dep],
subdirs: join_paths(pkgname, 'clutter'),
requires: [clutter_pkg_deps, libmutter_cogl_name],
version: meson.project_version(),
variables: [
'apiversion=' + libmutter_api_version,
],
)
pkg.generate(
name: 'Mutters ClutterX11',
filebase: 'mutter-clutter-x11-' + libmutter_api_version,
description: 'Mutters ClutterX11 Private Library',
libraries: [libmutter_clutter, m_dep],
subdirs: join_paths(pkgname, 'clutter'),
requires: [clutter_pkg_deps, libmutter_cogl_name],
version: meson.project_version(),
variables: [
'apiversion=' + libmutter_api_version,
],
)

92
clutter/meson.build Normal file
View File

@ -0,0 +1,92 @@
clutter_includedir = join_paths(pkgincludedir, 'clutter')
clutter_srcdir = join_paths(top_srcdir, 'clutter')
clutter_builddir = join_paths(builddir, 'clutter')
clutter_includepath = include_directories('.', 'clutter')
clutter_includes = [clutter_includepath, cogl_includepath]
clutter_c_args = [
'-DCLUTTER_SYSCONFDIR="@0@"'.format(join_paths(prefix, sysconfdir)),
'-DCLUTTER_COMPILATION=1',
'-DCOGL_DISABLE_DEPRECATION_WARNINGS',
'-DG_LOG_DOMAIN="Clutter"',
]
clutter_debug_c_args = []
if buildtype.startswith('debug')
clutter_debug_c_args += '-DG_DISABLE_CAST_CHECKS'
if buildtype == 'debug'
clutter_debug_c_args += '-DCLUTTER_ENABLE_DEBUG'
endif
elif buildtype == 'release'
clutter_debug_c_args += [
'-DG_DISABLE_ASSERT',
'-DG_DISABLE_CHECKS',
'-DG_DISABLE_CAST_CHECKS',
]
endif
clutter_c_args += clutter_debug_c_args
clutter_pkg_deps = [
gdk_pixbuf_dep,
cairo_gobject_dep,
glib_dep,
gobject_dep,
gio_dep,
gthread_dep,
gmodule_no_export_dep,
atk_dep,
pangocairo_dep,
json_glib_dep,
]
if have_pango_ft2
clutter_pkg_deps += [
pangoft2_dep,
]
endif
if have_wayland
clutter_pkg_deps += [
wayland_egl_dep,
wayland_server_dep,
]
endif
if have_x11
clutter_pkg_deps += [
x11_dep,
xext_dep,
xdamage_dep,
xcomposite_dep,
xtst_dep,
xi_dep,
]
endif
if have_native_backend
clutter_pkg_deps += [
libudev_dep,
libinput_dep,
xkbcommon_dep,
]
endif
if have_libwacom
clutter_pkg_deps += [
libwacom_dep,
]
endif
clutter_deps = [
clutter_pkg_deps,
libmutter_cogl_dep,
m_dep
]
subdir('clutter')
if have_clutter_tests
subdir('tests')
endif

View File

@ -0,0 +1,38 @@
clutter_test_accessibility_common_sources = [
'cally-examples-util.c',
'cally-examples-util.h',
]
clutter_test_accessibility_c_args = [
'-DPREFIXDIR="@0@"'.format(libdir),
'-DCLUTTER_DISABLE_DEPRECATION_WARNINGS',
'-DGLIB_DISABLE_DEPRECATION_WARNINGS',
]
clutter_test_accessibility_c_args += clutter_debug_c_args
clutter_accessibility_tests_dependencies = [
clutter_deps,
libmutter_clutter_dep,
]
clutter_accessibility_tests = [
'cally-atkcomponent-example',
'cally-atktext-example',
'cally-atkevents-example',
'cally-atkeditabletext-example',
'cally-clone-example',
]
foreach test : clutter_accessibility_tests
executable(test,
sources: [
clutter_test_accessibility_common_sources,
test + '.c',
],
include_directories: clutter_includes,
c_args: clutter_test_accessibility_c_args,
dependencies: [clutter_accessibility_tests_dependencies],
install: false,
)
endforeach

View File

@ -0,0 +1,84 @@
clutter_tests_conform_srcdir = join_paths(clutter_srcdir, 'tests/conform')
clutter_tests_conform_builddir = join_paths(clutter_builddir, 'tests/conform')
clutter_tests_conform_c_args = [
'-DG_LOG_DOMAIN="Clutter-Conform"',
'-DCOGL_DISABLE_DEPRECATION_WARNINGS',
]
clutter_tests_conform_c_args += clutter_debug_c_args
clutter_tests_conform_link_args = [
'-Wl,--export-dynamic',
]
clutter_conform_tests_actor_tests = [
'actor-anchors',
'actor-destroy',
'actor-graph',
'actor-invariants',
'actor-iter',
'actor-layout',
'actor-meta',
'actor-offscreen-limit-max-size',
'actor-offscreen-redirect',
'actor-paint-opacity',
'actor-pick',
'actor-shader-effect',
'actor-size',
]
clutter_conform_tests_classes_tests = [
'text',
]
clutter_conform_tests_general_tests = [
'binding-pool',
'color',
'events-touch',
'interval',
'model',
'script-parser',
'units',
]
clutter_conform_tests_deprecated_tests = [
'animator',
'behaviours',
'group',
'rectangle',
'texture',
]
clutter_conform_tests = []
clutter_conform_tests += clutter_conform_tests_actor_tests
clutter_conform_tests += clutter_conform_tests_classes_tests
clutter_conform_tests += clutter_conform_tests_general_tests
clutter_conform_tests += clutter_conform_tests_deprecated_tests
test_env = environment()
test_env.set('G_TEST_SRCDIR', clutter_tests_conform_srcdir)
test_env.set('G_TEST_BUILDDIR', clutter_tests_conform_builddir)
test_env.set('G_ENABLE_DIAGNOSTIC', '0')
test_env.set('CLUTTER_ENABLE_DIAGNOSTIC', '0')
test_env.set('CLUTTER_SCALE', '1')
foreach test : clutter_conform_tests
test_executable = executable('@0@'.format(test),
sources: [
'@0@.c'.format(test),
],
include_directories: clutter_includes,
c_args: clutter_tests_conform_c_args,
link_args: clutter_tests_conform_link_args,
dependencies: [
clutter_deps,
libmutter_clutter_dep,
libmutter_cogl_path_dep
],
install: false,
)
test('clutter/conform/@0@'.format(test), test_executable,
env: test_env
)
endforeach

View File

@ -0,0 +1,103 @@
clutter_tests_interactive_srcdir = join_paths(clutter_srcdir, 'tests/interactive')
clutter_tests_interactive_includepath = include_directories('.')
#clutter_tests_interactive_builddir = join_paths(clutter_builddir, 'tests/interactive')
clutter_tests_interactive_c_args = [
'-DTESTS_DATADIR="@0@"'.format(clutter_tests_interactive_srcdir),
'-DG_DISABLE_SINGLE_INCLUDES',
'-DGLIB_DISABLE_DEPRECATION_WARNINGS',
'-DCOGL_DISABLE_DEPRECATION_WARNINGS',
'-DCLUTTER_DISABLE_DEPRECATION_WARNINGS',
]
clutter_tests_interactive_c_args += clutter_debug_c_args
clutter_tests_interactive_link_args = [
'-Wl,--export-dynamic',
]
clutter_tests_interactive_test_sources = [
'test-texture-slicing.c',
'test-texture-async.c',
'test-texture-material.c',
'test-events.c',
'test-scale.c',
'test-actors.c',
'test-shader-effects.c',
'test-script.c',
'test-grab.c',
'test-cogl-shader-glsl.c',
'test-animator.c',
'test-state.c',
'test-state-animator.c',
'test-fbo.c',
'test-multistage.c',
'test-cogl-tex-tile.c',
'test-cogl-tex-convert.c',
'test-cogl-tex-foreign.c',
'test-cogl-offscreen.c',
'test-cogl-tex-polygon.c',
'test-cogl-multitexture.c',
'test-stage-read-pixels.c',
'test-paint-wrapper.c',
'test-texture-quality.c',
'test-layout.c',
'test-animation.c',
'test-easing.c',
'test-binding-pool.c',
'test-text.c',
'test-text-field.c',
'test-cairo-clock.c',
'test-cairo-flowers.c',
'test-cogl-vertex-buffer.c',
'test-stage-sizing.c',
'test-scrolling.c',
'test-swipe-action.c',
'test-cogl-point-sprites.c',
'test-table-layout.c',
'test-path-constraint.c',
'test-state-script.c',
'test-devices.c',
'test-content.c',
'test-keyframe-transition.c',
'test-bind-constraint.c',
'test-touch-events.c',
'test-rotate-zoom.c',
'test-image.c',
]
if have_x11
clutter_tests_interactive_test_sources += [
'test-pixmap.c',
]
endif
gen_test_unit_names = find_program('meson/gen-test-unit-names.sh')
clutter_interactive_test_unit_names_h = custom_target('gen-test-unit-names',
output: 'test-unit-names.h',
input: clutter_tests_interactive_test_sources,
command: [gen_test_unit_names, '@OUTPUT@', '@INPUT@'],
install: false,
)
clutter_tests_interactive_sources = [
'test-main.c',
clutter_interactive_test_unit_names_h,
clutter_tests_interactive_test_sources
]
executable('test-interactive',
sources: clutter_tests_interactive_sources,
include_directories: [
clutter_includes,
clutter_tests_interactive_includepath,
],
c_args: clutter_tests_interactive_c_args,
link_args: clutter_tests_interactive_link_args,
dependencies: [
clutter_deps,
libmutter_clutter_dep,
gdk_pixbuf_dep,
],
install: false,
)

View File

@ -0,0 +1,15 @@
#!/bin/bash
outputfile=$1
shift
test_source_files="$@"
echo '/* ** This file is autogenerated. Do not edit. ** */' > $outputfile
echo '' >> $outputfile
echo 'const char *test_unit_names[] = {' >> $outputfile
for test_source_file in $test_source_files; do
echo " \"$(echo $test_source_file | sed 's/.*\(test-[a-z0-9\-]\+\)\.c/\1/')\"," >> $outputfile
done
echo '};' >> $outputfile

View File

@ -0,0 +1,5 @@
subdir('accessibility')
subdir('conform')
subdir('interactive')
subdir('micro-bench')
subdir('performance')

View File

@ -0,0 +1,28 @@
clutter_tests_micro_bench_c_args = [
'-DG_DISABLE_SINGLE_INCLUDES',
'-DGLIB_DISABLE_DEPRECATION_WARNINGS',
'-DCOGL_DISABLE_DEPRECATION_WARNINGS',
'-DCLUTTER_DISABLE_DEPRECATION_WARNINGS',
]
clutter_tests_micro_bench_c_args += clutter_debug_c_args
clutter_tests_micro_bench_tests = [
'test-text',
'test-picking',
'test-text-perf',
'test-random-text',
'test-cogl-perf',
]
foreach test : clutter_tests_micro_bench_tests
executable(test,
sources: '@0@.c'.format(test),
include_directories: clutter_includes,
c_args: clutter_tests_micro_bench_c_args,
dependencies: [
clutter_deps,
libmutter_clutter_dep,
],
install: false,
)
endforeach

View File

@ -0,0 +1,35 @@
clutter_tests_performance_c_args = [
'-DTESTS_DATA_DIR="@0@"'.format(join_paths(clutter_srcdir, 'tests/interactive')),
'-DG_DISABLE_SINGLE_INCLUDES',
'-DGLIB_DISABLE_DEPRECATION_WARNINGS',
'-DCOGL_DISABLE_DEPRECATION_WARNINGS',
'-DCLUTTER_DISABLE_DEPRECATION_WARNINGS',
]
clutter_tests_performance_c_args += clutter_debug_c_args
clutter_tests_performance_tests = [
'test-picking',
'test-text-perf',
'test-state',
'test-state-interactive',
'test-state-hidden',
'test-state-mini',
'test-state-pick',
]
foreach test : clutter_tests_performance_tests
executable(test,
sources: [
'@0@.c'.format(test),
'test-common.h',
],
include_directories: clutter_includes,
c_args: clutter_tests_performance_c_args,
dependencies: [
clutter_deps,
libmutter_clutter_dep,
],
install: false,
)
endforeach

10
cogl/cogl-config.h.meson Normal file
View File

@ -0,0 +1,10 @@
/* Have GL for rendering */
#mesondefine HAVE_COGL_GL
/* Have GLES 2.0 for rendering */
#mesondefine HAVE_COGL_GLES2
/* Enable unit tests */
#mesondefine ENABLE_UNIT_TESTS
#define COGL_CONFIG_H_INCLUDED 1

View File

@ -0,0 +1,6 @@
{
global:
gl*;
local:
*;
}

View File

@ -0,0 +1,38 @@
cogl_gles2_public_headers = [
'GLES2/gl2.h',
'GLES2/gl2ext.h',
'GLES2/gl2platform.h',
]
cogl_gles2_sources = [
'cogl-gles2-api.c',
]
libmutter_cogl_gles2 = shared_library('mutter-cogl-gles2-' + libmutter_api_version,
sources: [cogl_gles2_sources, cogl_gles2_public_headers],
c_args: cogl_c_args,
include_directories: [cogl_includepath, cogl_path_includepath],
link_depends: 'libmutter-cogl-gles2.map',
dependencies: [cogl_deps],
link_with: libmutter_cogl,
install_rpath: pkglibdir,
install_dir: pkglibdir,
install: true,
)
cogl_gles2_includedir = join_paths(cogl_includedir, 'cogl-gles2/GLES2')
install_headers(cogl_gles2_public_headers,
subdir: cogl_gles2_includedir)
pkg.generate(
name: 'CoglGles2',
filebase: 'mutter-cogl-gles2-' + libmutter_api_version,
description: 'A cogl GLES2 helper library for mutter',
libraries: [libmutter_cogl_gles2],
subdirs: join_paths(pkgname, 'cogl'),
requires: [cogl_pkg_deps, libmutter_cogl_name],
version: meson.project_version(),
variables: [
'apiversion=' + libmutter_api_version,
],
)

View File

@ -0,0 +1,6 @@
{
global:
cogl_pango_*;
local:
*;
}

View File

@ -0,0 +1,74 @@
cogl_pango_sources = [
'cogl-pango-display-list.c',
'cogl-pango-display-list.h',
'cogl-pango-fontmap.c',
'cogl-pango-glyph-cache.c',
'cogl-pango-glyph-cache.h',
'cogl-pango-pipeline-cache.c',
'cogl-pango-pipeline-cache.h',
'cogl-pango-private.h',
'cogl-pango-render.c',
]
cogl_pango_public_headers = [
'cogl-pango.h',
]
cogl_pango_deps = [
cogl_deps,
pango_dep,
pangocairo_dep,
]
libmutter_cogl_pango = shared_library('mutter-cogl-pango-' + libmutter_api_version,
sources: [cogl_pango_sources, cogl_pango_public_headers],
c_args: cogl_c_args,
include_directories: [cogl_includepath, cogl_path_includepath],
link_depends: 'libmutter-cogl-pango.map',
dependencies: cogl_pango_deps,
link_with: libmutter_cogl,
install_rpath: pkglibdir,
install_dir: pkglibdir,
install: true,
)
if have_introspection
libmutter_cogl_pango_gir = gnome.generate_gir(libmutter_cogl_pango,
sources: cogl_pango_public_headers,
nsversion: libmutter_api_version,
namespace: 'CoglPango',
symbol_prefix: 'cogl_pango',
header: 'cogl-pango.h',
includes: [
libmutter_cogl_gir[0],
'Pango-1.0',
'PangoCairo-1.0'
],
dependencies: [cogl_deps, pango_dep],
link_with: [libmutter_cogl, libmutter_cogl_pango],
extra_args: [
'-UCOGL_COMPILATION',
'-DG_LOG_DOMAIN=\"CoglPango\"',
'-U_GNU_SOURCE',
],
install_dir_gir: pkglibdir,
install_dir_typelib: pkglibdir,
install: true
)
endif
cogl_pango_includedir = join_paths(cogl_includedir, 'cogl-pango')
install_headers(cogl_pango_public_headers, subdir: cogl_pango_includedir)
pkg.generate(
name: 'CoglPango',
filebase: 'mutter-cogl-pango-' + libmutter_api_version,
description: 'A text rendering for Cogl in mutter',
libraries: [libmutter_cogl_pango],
subdirs: join_paths(pkgname, 'cogl'),
requires: [cogl_pkg_deps, libmutter_cogl_name],
version: meson.project_version(),
variables: [
'apiversion=' + libmutter_api_version,
],
)

View File

@ -0,0 +1,17 @@
{
global:
cogl_framebuffer_*;
cogl_path_*;
cogl_is_*;
cogl_clip_*;
cogl_get_*;
cogl_set_*;
cogl2_framebuffer_*;
cogl2_path_*;
cogl2_is_*;
cogl2_clip_*;
cogl2_get_*;
cogl2_set_*;
local:
*;
}

View File

@ -0,0 +1,82 @@
cogl_path_includedir = join_paths(cogl_includedir, 'cogl-path')
cogl_path_public_headers = [
'cogl-path.h',
'cogl-path-functions.h',
'cogl-path-types.h',
]
cogl_path_sources = [
'cogl-path.c',
'cogl-path-private.h',
'tesselator/dict-list.h',
'tesselator/dict.c',
'tesselator/dict.h',
'tesselator/geom.c',
'tesselator/geom.h',
'tesselator/gluos.h',
'tesselator/memalloc.h',
'tesselator/mesh.c',
'tesselator/mesh.h',
'tesselator/normal.c',
'tesselator/normal.h',
'tesselator/priorityq-heap.h',
'tesselator/priorityq-sort.h',
'tesselator/priorityq.c',
'tesselator/priorityq.h',
'tesselator/render.c',
'tesselator/render.h',
'tesselator/sweep.c',
'tesselator/sweep.h',
'tesselator/tess.c',
'tesselator/tess.h',
'tesselator/tesselator.h',
'tesselator/tessmono.c',
'tesselator/tessmono.h',
'tesselator/GL/glu.h',
]
cogl_path_includepath = include_directories('.', 'tesselator')
libmutter_cogl_path_enum_types = gnome.mkenums('cogl-path-enum-types',
sources: 'cogl-path-types.h',
c_template: 'cogl-path-enum-types.c.in',
h_template: 'cogl-path-enum-types.h.in',
install_dir: cogl_path_includedir,
install_header: true,
)
libmutter_cogl_path_enum_types_h = libmutter_cogl_path_enum_types[1]
cogl_path_sources += libmutter_cogl_path_enum_types
libmutter_cogl_path = shared_library('mutter-cogl-path-' + libmutter_api_version,
sources: [cogl_path_sources, cogl_path_public_headers],
c_args: cogl_c_args,
include_directories: [cogl_includepath, cogl_path_includepath],
link_depends: 'libmutter-cogl-path.map',
dependencies: [cogl_deps],
link_with: libmutter_cogl,
install_rpath: pkglibdir,
install_dir: pkglibdir,
install: true,
)
libmutter_cogl_path_dep = declare_dependency(
sources: [libmutter_cogl_path_enum_types_h],
link_with: libmutter_cogl_path
)
install_headers(cogl_path_public_headers,
subdir: cogl_path_includedir)
pkg.generate(
name: 'CoglPath',
filebase: 'mutter-cogl-path-' + libmutter_api_version,
description: 'A 2D path drawing library for Cogl in mutter',
libraries: [libmutter_cogl_path],
subdirs: join_paths(pkgname, 'cogl'),
requires: [cogl_pkg_deps, libmutter_cogl_name],
version: meson.project_version(),
variables: [
'apiversion=' + libmutter_api_version,
],
)

View File

@ -0,0 +1,48 @@
/*
* Cogl
*
* A Low Level GPU Graphics and Utilities API
*
* Copyright (C) 2007,2008,2009,2010 Intel Corporation.
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use, copy,
* modify, merge, publish, distribute, sublicense, and/or sell copies
* of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
*/
#include <poll.h>
#define COGL_SYSDEF_POLLIN POLLIN
#define COGL_SYSDEF_POLLPRI POLLPRI
#define COGL_SYSDEF_POLLOUT POLLOUT
#define COGL_SYSDEF_POLLERR POLLERR
#define COGL_SYSDEF_POLLHUP POLLHUP
#define COGL_SYSDEF_POLLNVAL POLLNVAL
#mesondefine COGL_HAS_GL
#mesondefine CLUTTER_COGL_HAS_GL
#mesondefine COGL_HAS_GLX_SUPPORT
#mesondefine COGL_HAS_WAYLAND_EGL_SERVER_SUPPORT
#mesondefine COGL_HAS_EGL_PLATFORM_XLIB_SUPPORT
#mesondefine COGL_HAS_EGL_SUPPORT
#mesondefine COGL_HAS_X11
#mesondefine COGL_HAS_X11_SUPPORT
#mesondefine COGL_HAS_XLIB
#mesondefine COGL_HAS_XLIB_SUPPORT

View File

@ -0,0 +1,51 @@
{
global:
cogl*;
_cogl_debug_flags;
_cogl_atlas_new;
_cogl_atlas_add_reorganize_callback;
_cogl_atlas_reserve_space;
_cogl_callback;
_cogl_util_get_eye_planes_for_screen_poly;
_cogl_atlas_texture_remove_reorganize_callback;
_cogl_atlas_texture_add_reorganize_callback;
_cogl_texture_get_format;
_cogl_texture_foreach_sub_texture_in_region;
_cogl_texture_set_region;
_cogl_profile_trace_message;
_cogl_context_get_default;
_cogl_framebuffer_get_stencil_bits;
_cogl_clip_stack_push_rectangle;
_cogl_framebuffer_get_modelview_stack;
_cogl_object_default_unref;
_cogl_pipeline_foreach_layer_internal;
_cogl_clip_stack_push_primitive;
_cogl_buffer_unmap_for_fill_or_fallback;
_cogl_framebuffer_draw_primitive;
_cogl_debug_instances;
_cogl_framebuffer_get_projection_stack;
_cogl_pipeline_layer_get_texture;
_cogl_buffer_map_for_fill_or_fallback;
_cogl_texture_can_hardware_repeat;
_cogl_pipeline_prune_to_n_layers;
_cogl_primitive_draw;
#test_;
#unit_test_;
_cogl_winsys_glx_get_vtable;
_cogl_winsys_egl_xlib_get_vtable;
_cogl_winsys_egl_get_vtable;
_cogl_closure_disconnect;
_cogl_onscreen_notify_complete;
_cogl_onscreen_notify_frame_sync;
_cogl_winsys_egl_renderer_connect_common;
_cogl_winsys_error_quark;
_cogl_set_error;
_cogl_poll_renderer_add_fd;
_cogl_poll_renderer_add_idle;
_cogl_framebuffer_winsys_update_size;
_cogl_winsys_egl_make_current;
_cogl_winsys_egl_ensure_current;
_cogl_pixel_format_get_bytes_per_pixel).*";
local:
*;
}

531
cogl/cogl/meson.build Normal file
View File

@ -0,0 +1,531 @@
cogl_cogl_includedir = join_paths(cogl_includedir, 'cogl')
cdata = configuration_data()
cdata.set('COGL_HAS_GL', have_gl)
cdata.set('CLUTTER_COGL_HAS_GL', have_gl)
cdata.set('COGL_HAS_GLX_SUPPORT', have_glx)
cdata.set('COGL_HAS_WAYLAND_EGL_SERVER_SUPPORT', have_wayland)
cdata.set('COGL_HAS_EGL_PLATFORM_XLIB_SUPPORT', have_egl_xlib)
cdata.set('COGL_HAS_EGL_SUPPORT', have_egl)
cdata.set('COGL_HAS_X11', have_x11)
cdata.set('COGL_HAS_X11_SUPPORT', have_x11)
cdata.set('COGL_HAS_XLIB', have_x11)
cdata.set('COGL_HAS_XLIB_SUPPORT', have_x11)
cogl_defines_h = configure_file(
input: 'cogl-defines.h.meson',
output: 'cogl-defines.h',
configuration: cdata,
install_dir: cogl_cogl_includedir,
install: true,
)
if have_gl
cogl_gl_header_includes = ['GL/gl.h']
elif have_gles2
cogl_gl_header_includes = ['GLES2/gl2.h', 'GLES2/gl2ext.h']
else
error('Neither GLES2 or OpenGL was enabled')
endif
cogl_gl_header_includes_string = ''
foreach gl_header : cogl_gl_header_includes
cogl_gl_header_includes_string += '#include <@0@>\n'.format(gl_header)
endforeach
built_headers = []
cdata = configuration_data()
cdata.set('COGL_GL_HEADER_INCLUDES', cogl_gl_header_includes_string)
cogl_gl_header_h = configure_file(
input: 'cogl-gl-header.h.in',
output: 'cogl-gl-header.h',
configuration: cdata,
install: false,
)
built_headers += [cogl_gl_header_h]
if have_egl
cogl_egl_includes_string = '#include <EGL/egl.h>\n#include <EGL/eglext.h>'
else
cogl_egl_includes_string = ''
endif
cdata = configuration_data()
cdata.set('COGL_EGL_INCLUDES', cogl_egl_includes_string)
cogl_egl_defines_h = configure_file(
input: 'cogl-egl-defines.h.in',
output: 'cogl-egl-defines.h',
configuration: cdata,
install: false,
)
built_headers += [cogl_gl_header_h]
cogl_deprecated_headers = [
'deprecated/cogl-material-compat.h',
'deprecated/cogl-vertex-buffer.h',
'deprecated/cogl-shader.h',
'deprecated/cogl-clutter.h',
'deprecated/cogl-type-casts.h',
'deprecated/cogl-auto-texture.h',
]
cogl_deprecated_nonintrospected_headers = [
'deprecated/cogl-framebuffer-deprecated.h',
]
cogl_headers = [
'cogl1-context.h',
'cogl-bitmap.h',
'cogl-color.h',
'cogl-matrix.h',
'cogl-offscreen.h',
'cogl-primitives.h',
'cogl-texture.h',
'cogl-types.h',
'cogl.h',
]
cogl_nonintrospected_headers = [
'cogl-deprecated.h',
'cogl-pango.h',
'cogl-object.h',
'cogl-renderer.h',
'cogl-swap-chain.h',
'cogl-onscreen-template.h',
'cogl-display.h',
'cogl-context.h',
'cogl-pipeline.h',
'cogl-pipeline-state.h',
'cogl-pipeline-layer-state.h',
'cogl-snippet.h',
'cogl-gles2.h',
'cogl-gles2-types.h',
'cogl-index-buffer.h',
'cogl-attribute-buffer.h',
'cogl-indices.h',
'cogl-attribute.h',
'cogl-primitive.h',
'cogl-framebuffer.h',
'cogl-onscreen.h',
'cogl-frame-info.h',
'cogl-vector.h',
'cogl-euler.h',
'cogl-output.h',
'cogl-quaternion.h',
'cogl-matrix-stack.h',
'cogl-poll.h',
'cogl-texture-3d.h',
'cogl-texture-2d.h',
'cogl-texture-2d-gl.h',
'cogl-texture-rectangle.h',
'cogl-texture-2d-sliced.h',
'cogl-sub-texture.h',
'cogl-atlas-texture.h',
'cogl-meta-texture.h',
'cogl-primitive-texture.h',
'cogl-depth-state.h',
'cogl-buffer.h',
'cogl-pixel-buffer.h',
'cogl-macros.h',
'cogl-fence.h',
'cogl-version.h',
'cogl-error.h',
'cogl-gtype-private.h',
'cogl-glib-source.h',
]
cogl_nodist_headers = [
]
cogl_noop_driver_sources = [
'driver/nop/cogl-driver-nop.c',
'driver/nop/cogl-framebuffer-nop-private.h',
'driver/nop/cogl-framebuffer-nop.c',
'driver/nop/cogl-attribute-nop-private.h',
'driver/nop/cogl-attribute-nop.c',
'driver/nop/cogl-clip-stack-nop-private.h',
'driver/nop/cogl-clip-stack-nop.c',
'driver/nop/cogl-texture-2d-nop-private.h',
'driver/nop/cogl-texture-2d-nop.c',
]
cogl_gl_prototype_headers = [
'gl-prototypes/cogl-gles2-functions.h',
'gl-prototypes/cogl-core-functions.h',
'gl-prototypes/cogl-in-gles-core-functions.h',
'gl-prototypes/cogl-in-gles2-core-functions.h',
'gl-prototypes/cogl-glsl-functions.h',
]
cogl_common_driver_sources = [
'driver/gl/cogl-util-gl-private.h',
'driver/gl/cogl-util-gl.c',
'driver/gl/cogl-framebuffer-gl-private.h',
'driver/gl/cogl-framebuffer-gl.c',
'driver/gl/cogl-texture-gl-private.h',
'driver/gl/cogl-texture-gl.c',
'driver/gl/cogl-texture-2d-gl-private.h',
'driver/gl/cogl-texture-2d-gl.c',
'driver/gl/cogl-attribute-gl-private.h',
'driver/gl/cogl-attribute-gl.c',
'driver/gl/cogl-clip-stack-gl-private.h',
'driver/gl/cogl-clip-stack-gl.c',
'driver/gl/cogl-buffer-gl-private.h',
'driver/gl/cogl-buffer-gl.c',
'driver/gl/cogl-pipeline-opengl.c',
'driver/gl/cogl-pipeline-opengl-private.h',
'driver/gl/cogl-pipeline-fragend-glsl.c',
'driver/gl/cogl-pipeline-fragend-glsl-private.h',
'driver/gl/cogl-pipeline-vertend-glsl.c',
'driver/gl/cogl-pipeline-vertend-glsl-private.h',
'driver/gl/cogl-pipeline-progend-glsl.c',
'driver/gl/cogl-pipeline-progend-glsl-private.h',
]
gl_driver_sources = [
'driver/gl/gl/cogl-driver-gl.c',
'driver/gl/gl/cogl-texture-driver-gl.c',
]
gles_driver_sources = [
'driver/gl/gles/cogl-driver-gles.c',
'driver/gl/gles/cogl-texture-driver-gles.c',
]
cogl_driver_sources = [
cogl_noop_driver_sources,
cogl_common_driver_sources,
]
if have_gl
cogl_driver_sources += gl_driver_sources
endif
if have_gles2
cogl_driver_sources += gles_driver_sources
endif
cogl_sources = [
cogl_driver_sources,
'winsys/cogl-winsys-private.h',
'winsys/cogl-winsys.c',
'cogl-private.h',
'cogl-i18n-private.h',
'cogl-debug.h',
'cogl-debug-options.h',
'cogl-gpu-info.c',
'cogl-gpu-info-private.h',
'cogl-context-private.h',
'cogl-context.c',
'cogl-renderer-private.h',
'cogl-renderer.h',
'cogl-renderer.c',
'cogl-swap-chain-private.h',
'cogl-swap-chain.h',
'cogl-swap-chain.c',
'cogl-onscreen-template-private.h',
'cogl-onscreen-template.h',
'cogl-onscreen-template.c',
'cogl-display-private.h',
'cogl-display.h',
'cogl-display.c',
'cogl-driver.h',
'cogl.c',
'cogl-object-private.h',
'cogl-object.h',
'cogl-object.c',
'cogl-util.h',
'cogl-util.c',
'cogl-bitmap-private.h',
'cogl-bitmap.c',
'cogl-bitmap-conversion.c',
'cogl-bitmap-packing.h',
'cogl-primitives-private.h',
'cogl-primitives.h',
'cogl-primitives.c',
'cogl-bitmap-pixbuf.c',
'cogl-clip-stack.h',
'cogl-clip-stack.c',
'cogl-feature-private.h',
'cogl-feature-private.c',
'cogl-color-private.h',
'cogl-color.c',
'cogl-buffer-private.h',
'cogl-buffer.c',
'cogl-pixel-buffer-private.h',
'cogl-pixel-buffer.c',
'cogl-index-buffer-private.h',
'cogl-index-buffer.c',
'cogl-attribute-buffer-private.h',
'cogl-attribute-buffer.c',
'cogl-indices-private.h',
'cogl-indices.c',
'cogl-attribute-private.h',
'cogl-attribute.c',
'cogl-primitive-private.h',
'cogl-primitive.c',
'cogl-matrix.c',
'cogl-vector.c',
'cogl-euler.c',
'cogl-quaternion-private.h',
'cogl-quaternion.c',
'cogl-matrix-private.h',
'cogl-matrix-stack.c',
'cogl-matrix-stack-private.h',
'cogl-depth-state.c',
'cogl-depth-state-private.h',
'cogl-node.c',
'cogl-node-private.h',
'cogl-pipeline.c',
'cogl-pipeline-private.h',
'cogl-pipeline-layer.c',
'cogl-pipeline-layer-private.h',
'cogl-pipeline-state.c',
'cogl-pipeline-layer-state-private.h',
'cogl-pipeline-layer-state.c',
'cogl-pipeline-state-private.h',
'cogl-pipeline-debug.c',
'cogl-glsl-shader.c',
'cogl-glsl-shader-private.h',
'cogl-glsl-shader-boilerplate.h',
'cogl-pipeline-snippet-private.h',
'cogl-pipeline-snippet.c',
'cogl-pipeline-cache.h',
'cogl-pipeline-cache.c',
'cogl-pipeline-hash-table.h',
'cogl-pipeline-hash-table.c',
'cogl-sampler-cache.c',
'cogl-sampler-cache-private.h',
'cogl-blend-string.c',
'cogl-blend-string.h',
'cogl-debug.c',
'cogl-sub-texture-private.h',
'cogl-texture-private.h',
'cogl-texture-2d-private.h',
'cogl-texture-2d-sliced-private.h',
'cogl-texture-3d-private.h',
'cogl-texture-driver.h',
'cogl-sub-texture.c',
'cogl-texture.c',
'cogl-texture-2d.c',
'cogl-texture-2d-sliced.c',
'cogl-texture-3d.c',
'cogl-texture-rectangle-private.h',
'cogl-texture-rectangle.c',
'cogl-rectangle-map.h',
'cogl-rectangle-map.c',
'cogl-atlas.h',
'cogl-atlas.c',
'cogl-atlas-texture-private.h',
'cogl-atlas-texture.c',
'cogl-meta-texture.c',
'cogl-primitive-texture.c',
'cogl-blit.h',
'cogl-blit.c',
'cogl-spans.h',
'cogl-spans.c',
'cogl-journal-private.h',
'cogl-journal.c',
'cogl-frame-info-private.h',
'cogl-frame-info.c',
'cogl-framebuffer-private.h',
'cogl-framebuffer.c',
'cogl-onscreen-private.h',
'cogl-onscreen.c',
'cogl-output-private.h',
'cogl-output.c',
'cogl-profile.h',
'cogl-profile.c',
'cogl-flags.h',
'cogl-bitmask.h',
'cogl-bitmask.c',
'cogl-gtype.c',
'cogl-gtype-private.h',
'cogl-point-in-poly-private.h',
'cogl-point-in-poly.c',
'cogl-list.c',
'cogl-list.h',
'winsys/cogl-winsys-stub-private.h',
'winsys/cogl-winsys-stub.c',
'cogl-config-private.h',
'cogl-config.c',
'cogl-boxed-value.h',
'cogl-boxed-value.c',
'cogl-snippet-private.h',
'cogl-snippet.c',
'cogl-poll-private.h',
'cogl-poll.c',
'gl-prototypes/cogl-all-functions.h',
'gl-prototypes/cogl-fixed-functions.h',
'cogl-memory-stack-private.h',
'cogl-memory-stack.c',
'cogl-magazine-private.h',
'cogl-magazine.c',
'cogl-gles2-context-private.h',
'cogl-gles2-context.c',
'cogl-error-private.h',
'cogl-error.c',
'cogl-closure-list-private.h',
'cogl-closure-list.c',
'cogl-fence.c',
'cogl-fence-private.h',
'deprecated/cogl-vertex-buffer-private.h',
'deprecated/cogl-vertex-buffer.c',
'deprecated/cogl-material-compat.c',
'deprecated/cogl-program.c',
'deprecated/cogl-program-private.h',
'deprecated/cogl-auto-texture.c',
'deprecated/cogl-shader-private.h',
'deprecated/cogl-shader.c',
'deprecated/cogl-clutter.c',
'deprecated/cogl-framebuffer-deprecated.c',
'cogl-glib-source.c',
'cogl-mutter.h',
]
if have_x11
cogl_nonintrospected_headers += [
'winsys/cogl-texture-pixmap-x11.h',
'cogl-xlib.h',
]
cogl_deprecated_nonintrospected_headers += [
'deprecated/cogl-clutter-xlib.h',
]
cogl_sources += [
'cogl-x11-renderer-private.h',
'cogl-xlib-private.h',
'cogl-xlib-renderer-private.h',
'cogl-xlib-renderer.c',
'cogl-xlib.c',
'winsys/cogl-texture-pixmap-x11-private.h',
'winsys/cogl-texture-pixmap-x11.c',
]
cogl_headers += [
'cogl-xlib-renderer.h'
]
endif
if have_glx
cogl_nonintrospected_headers += [
'cogl-glx.h',
]
cogl_sources += [
'cogl-glx-display-private.h',
'cogl-glx-renderer-private.h',
'winsys/cogl-winsys-glx-feature-functions.h',
'winsys/cogl-winsys-glx-private.h',
'winsys/cogl-winsys-glx.c',
]
endif
if have_wayland
cogl_nonintrospected_headers += [
'cogl-wayland-server.h',
]
endif
if have_egl
cogl_nonintrospected_headers += [
'cogl-egl.h',
cogl_egl_defines_h,
]
cogl_sources += [
'cogl-egl-private.h',
'winsys/cogl-winsys-egl.c',
'winsys/cogl-winsys-egl-feature-functions.h',
'winsys/cogl-winsys-egl-private.h',
]
endif
if have_egl_xlib
cogl_sources += [
'winsys/cogl-winsys-egl-x11.c',
'winsys/cogl-winsys-egl-x11-private.h',
]
endif
cogl_introspected_headers = [
cogl_headers,
cogl_deprecated_headers,
]
cogl_headers_all = [
cogl_introspected_headers,
cogl_nonintrospected_headers,
cogl_deprecated_headers,
cogl_deprecated_nonintrospected_headers,
]
cogl_test_deps = []
if have_cogl_tests
cogl_test_deps += [libmutter_cogl_test_fixtures_dep]
endif
libmutter_cogl_name = 'mutter-cogl-' + libmutter_api_version
libmutter_cogl = shared_library(libmutter_cogl_name,
sources: [cogl_sources, cogl_headers_all],
c_args: cogl_c_args,
include_directories: cogl_includepath,
link_depends: 'libmutter-cogl.map',
dependencies: [cogl_deps, cogl_test_deps],
install_rpath: pkglibdir,
install_dir: pkglibdir,
install: true,
)
libmutter_cogl_dep = declare_dependency(
link_with: libmutter_cogl,
)
if have_introspection
libmutter_cogl_gir = gnome.generate_gir(libmutter_cogl,
sources: cogl_introspected_headers,
nsversion: libmutter_api_version,
namespace: 'Cogl',
includes: ['GL-1.0', 'GObject-2.0'],
dependencies: [cogl_deps],
extra_args: [
'-UCOGL_COMPILATION',
'-D__COGL_H_INSIDE__',
'-D__COGL_XLIB_H_INSIDE__',
'-D__COGL_EGL_H_INSIDE__',
'-D__COGL_GLX_H_INSIDE__',
'-DCOGL_GIR_SCANNING',
'-U_GNU_SOURCE',
],
install_dir_gir: pkglibdir,
install_dir_typelib: pkglibdir,
install: true
)
endif
install_headers([
cogl_headers,
cogl_nonintrospected_headers,
],
subdir: cogl_cogl_includedir)
install_headers([
cogl_deprecated_headers,
cogl_deprecated_nonintrospected_headers,
],
subdir: join_paths(cogl_cogl_includedir, 'deprecated'))
install_headers(cogl_gl_prototype_headers,
subdir: join_paths(cogl_cogl_includedir, 'gl-prototypes'))
pkg.generate(
name: 'Cogl',
filebase: libmutter_cogl_name,
description: 'An object oriented GL/GLES Abstraction/Utility Layer in mutter',
libraries: [libmutter_cogl, m_dep],
subdirs: join_paths(pkgname, 'cogl'),
requires: [cogl_pkg_deps],
version: meson.project_version(),
variables: [
'apiversion=' + libmutter_api_version,
],
)

116
cogl/meson.build Normal file
View File

@ -0,0 +1,116 @@
cogl_includedir = join_paths(pkgincludedir, 'cogl')
cogl_srcdir = join_paths(top_srcdir, 'cogl')
cogl_builddir = join_paths(builddir, 'cogl')
cogl_includepath = include_directories('.', 'cogl')
cdata = configuration_data()
cdata.set('HAVE_COGL_GL', have_gl)
cdata.set('HAVE_COGL_GLES2', have_gles2)
cdata.set('ENABLE_UNIT_TESTS', have_cogl_tests)
cogl_config_h = configure_file(
input: 'cogl-config.h.meson',
output: 'cogl-config.h',
configuration: cdata)
# TODO: Remove this when autotools support is removed
cogl_mutter_config_h = configure_file(
input: 'cogl-config.h.meson',
output: 'cogl-mutter-config.h',
configuration: cdata)
cogl_pkg_deps = [
cairo_dep,
#uprof_dep,
glib_dep,
gobject_dep,
gmodule_no_export_dep,
gdk_pixbuf_dep,
]
if have_wayland
cogl_pkg_deps += [
wayland_server_dep,
]
endif
if have_egl
cogl_pkg_deps += [
egl_dep,
]
endif
if have_x11
cogl_pkg_deps += [
x11_dep,
xext_dep,
xfixes_dep,
xdamage_dep,
xcomposite_dep,
xrandr_dep,
]
endif
if have_gl
cogl_pkg_deps += [
gl_dep,
]
endif
if have_gles2
cogl_pkg_deps += [
gles2_dep,
]
endif
cogl_deps = [
cogl_pkg_deps,
m_dep,
]
cogl_c_args = [
'-DCOGL_LOCALEDIR="@0@"'.format(localedir),
'-DCOGL_COMPILATION',
]
if have_gl
cogl_c_args += [
'-DCOGL_GL_LIBNAME="@0@"'.format(gl_libname)
]
endif
if have_gles2
cogl_c_args += [
'-DCOGL_GLES2_LIBNAME="@0@"'.format(gles2_libname)
]
endif
cogl_debug_c_args = []
if buildtype.startswith('debug')
cogl_debug_c_args += [
'-DCOGL_GL_DEBUG',
'-DCOGL_OBJECT_DEBUG',
'-DCOGL_ENABLE_DEBUG',
]
elif buildtype == 'release'
cogl_debug_c_args += [
'-DG_DISABLE_CHECKS',
'-DG_DISABLE_CAST_CHECKS',
]
endif
cogl_c_args += cogl_debug_c_args
if have_cogl_tests
subdir('test-fixtures')
endif
subdir('cogl')
subdir('cogl-path')
subdir('cogl-pango')
if have_gles2
subdir('cogl-gles2')
endif
if have_cogl_tests
subdir('tests')
endif

View File

@ -0,0 +1,22 @@
cogl_test_fixtures_includepath = [include_directories('.')]
cogl_test_fixtures_sources = [
'test-unit.h',
'test-utils.h',
'test-utils.c',
]
test_datadir = join_paths(cogl_srcdir, 'tests', 'data')
libmutter_cogl_test_fixtures = static_library('mutter-cogl-test-fixtures',
sources: cogl_test_fixtures_sources,
c_args: [cogl_c_args, '-DTEST_DATADIR=@0@'.format(test_datadir)],
link_args: ['-Wl,--no-undefined', '-Wl,--unresolved-symbols=ignore-in-object-files'],
include_directories: cogl_includepath,
dependencies: [cogl_deps],
install: false,
)
libmutter_cogl_test_fixtures_dep = declare_dependency(
link_with: libmutter_cogl_test_fixtures
)

View File

@ -0,0 +1,106 @@
cogl_test_conformance_sources = [
'test-conform-main.c',
'test-atlas-migration.c',
'test-blend-strings.c',
'test-blend.c',
'test-depth-test.c',
'test-color-hsl.c',
'test-color-mask.c',
'test-backface-culling.c',
'test-just-vertex-shader.c',
'test-pipeline-user-matrix.c',
'test-pipeline-uniforms.c',
'test-pixel-buffer.c',
'test-premult.c',
'test-snippets.c',
'test-wrap-modes.c',
'test-sub-texture.c',
'test-custom-attributes.c',
'test-offscreen.c',
'test-primitive.c',
'test-texture-3d.c',
'test-sparse-pipeline.c',
'test-read-texture-formats.c',
'test-write-texture-formats.c',
'test-point-size.c',
'test-point-size-attribute.c',
'test-point-sprite.c',
'test-no-gl-header.c',
'test-version.c',
'test-gles2-context.c',
'test-euler-quaternion.c',
'test-layer-remove.c',
'test-alpha-test.c',
'test-map-buffer-range.c',
'test-npot-texture.c',
'test-alpha-textures.c',
'test-wrap-rectangle-textures.c',
'test-texture-get-set-data.c',
'test-framebuffer-get-bits.c',
'test-primitive-and-journal.c',
'test-copy-replace-texture.c',
'test-pipeline-cache-unrefs-texture.c',
'test-texture-no-allocate.c',
'test-pipeline-shader-state.c',
'test-texture-rg.c',
'test-fence.c',
'test-path.c',
'test-path-clip.c',
]
#unported = [
# "test-fixed.c",
# "test-materials.c",
# "test-viewport.c",
# "test-multitexture.c",
# "test-npot-texture.c",
# "test-object.c",
# "test-readpixels.c",
# "test-texture-mipmaps.c",
# "test-texture-pixmap-x11.c",",
# "test-texture-rectangle.c",
# "test-vertex-buffer-contiguous.c",
# "test-vertex-buffer-interleved.c",
# "test-vertex-buffer-mutability.c",
#]
cogl_test_conformance_includes = [
cogl_includepath,
cogl_test_fixtures_includepath,
]
libmutter_cogl_test_conformance = executable('test-conformance',
sources: cogl_test_conformance_sources,
c_args: cogl_debug_c_args + [
'-DCOGL_ENABLE_EXPERIMENTAL_API',
'-DCOGL_DISABLE_DEPRECATED',
'-DCOGL_DISABLE_DEPRECATION_WARNINGS',
'-DTESTS_DATADIR="@0@/tests/data"'.format(cogl_srcdir),
],
include_directories: cogl_test_conformance_includes,
dependencies: [
cogl_deps,
libmutter_cogl_path_dep,
libmutter_cogl_test_fixtures_dep
],
link_with: [libmutter_cogl],
install: false,
)
find_unit_tests = find_program('meson/find-conform-unit-tests.sh')
cogl_conform_unit_tests = custom_target('cogl-tests-conform-unit-tests',
output: 'unit-tests',
input: 'test-conform-main.c',
command: [find_unit_tests, '@INPUT@', '@OUTPUT@'],
install: false,
)
test('cogl/conform', cogl_run_tests,
args: [
cogl_config_env,
libmutter_cogl_test_conformance,
cogl_conform_unit_tests
],
is_parallel: false,
timeout: 60,
)

View File

@ -0,0 +1,10 @@
#!/bin/bash
inputfile="$1"
outputfile="$2"
echo > "$outputfile"
sed -n -e 's/^ \{1,\}ADD_TEST *( *\([a-zA-Z0-9_]\{1,\}\).*/\1/p' "$1" | while read test; do
echo $test >> $outputfile
done

14
cogl/tests/meson.build Normal file
View File

@ -0,0 +1,14 @@
cogl_run_tests = find_program('run-tests.sh')
cdata = configuration_data()
cdata.set('HAVE_GL', have_gl.to_int())
cdata.set('HAVE_GLES2', have_gles2.to_int())
cogl_config_env = configure_file(
input: 'config.env.in',
output: 'config.env',
configuration: cdata)
subdir('conform')
subdir('unit')
subdir('micro-perf')

View File

@ -0,0 +1,15 @@
cogl_test_journal_sources = [
'test-journal.c',
]
cogl_test_journal = executable('test-journal',
sources: cogl_test_journal_sources,
c_args: cogl_debug_c_args + [
'-DCOGL_DISABLE_DEPRECATED',
'-DTESTS_DATADIR="@0@"'.format(join_paths(cogl_srcdir, 'tests/data')),
],
include_directories: cogl_includepath,
dependencies: cogl_deps,
link_with: [libmutter_cogl],
install: false,
)

View File

@ -0,0 +1,38 @@
cogl_test_unit_sources = [
'test-unit-main.c',
]
cogl_test_unit_includes = [
cogl_includepath,
cogl_test_fixtures_includepath,
]
libmutter_cogl_test_unit = executable('test-unit',
sources: cogl_test_unit_sources,
c_args: cogl_debug_c_args + [
'-DCOGL_DISABLE_DEPRECATED',
'-DCOGL_COMPILATION',
'-DTESTS_DATADIR="@0@/tests/data"'.format(cogl_srcdir),
],
include_directories: cogl_test_unit_includes,
dependencies: [cogl_deps, libmutter_cogl_test_fixtures_dep],
link_with: [libmutter_cogl, libmutter_cogl_path],
install: false,
)
find_unit_tests = find_program('meson/find-unit-tests.sh')
cogl_unit_unit_tests = custom_target('cogl-tests-unit-unit-tests',
output: 'unit-tests',
input: libmutter_cogl,
command: [find_unit_tests, '@INPUT@', '@OUTPUT@'],
install: false,
)
test('cogl/unit', cogl_run_tests,
args: [
cogl_config_env,
libmutter_cogl_test_unit,
cogl_unit_unit_tests
],
is_parallel: false,
)

View File

@ -0,0 +1,6 @@
#!/bin/bash
inputfile="$1"
outputfile="$2"
nm "$inputfile" | grep '[DR] _\?unit_test_'|sed 's/.\+ [DR] _\?//' > "$outputfile"

65
config.h.meson Normal file
View File

@ -0,0 +1,65 @@
/* The prefix for our gettext translation domains. */
#mesondefine GETTEXT_PACKAGE
/* Version number of package */
#mesondefine VERSION
/* Version number of package */
#mesondefine PACKAGE_VERSION
/* Search path for plugins */
#mesondefine MUTTER_PLUGIN_DIR
/* */
#mesondefine MUTTER_LOCALEDIR
/* */
#mesondefine MUTTER_LIBEXECDIR
/* */
#mesondefine MUTTER_PKGDATADIR
/* Defined if EGL support is enabled */
#mesondefine HAVE_EGL
/* Defined if EGLDevice support is enabled */
#mesondefine HAVE_EGL_DEVICE
/* Defined if EGLStream support is enabled */
#mesondefine HAVE_WAYLAND_EGLSTREAM
/* Building with libcanberra for playing sounds */
#mesondefine HAVE_LIBCANBERRA
/* Building with gudev for device type detection */
#mesondefine HAVE_LIBGUDEV
/* Building with libwacom for advanced tablet management */
#mesondefine HAVE_LIBWACOM
/* Define if you want to enable the native (KMS) backend based on systemd */
#mesondefine HAVE_NATIVE_BACKEND
/* Define if you want to enable Wayland support */
#mesondefine HAVE_WAYLAND
/* Defined if screen cast and remote desktop support is enabled */
#mesondefine HAVE_REMOTE_DESKTOP
/* Building with SM support */
#mesondefine HAVE_SM
/* Building with startup notification support */
#mesondefine HAVE_STARTUP_NOTIFICATION
/* Path to Xwayland executable */
#mesondefine XWAYLAND_PATH
/* Xwayland applications allowed to issue keyboard grabs */
#mesondefine XWAYLAND_GRAB_DEFAULT_ACCESS_RULES
/* XKB base prefix */
#mesondefine XKB_BASE
/* Default rules for allowing Xwayland grabs */
#mesondefine XWAYLAND_GRAB_DEFAULT_ACCESS_RULES

60
data/meson.build Normal file
View File

@ -0,0 +1,60 @@
msgfmt = find_program('msgfmt')
custom_target('mutter.desktop',
input: 'mutter.desktop.in',
output: 'mutter.desktop',
command: [
msgfmt,
'--desktop', '--template',
'@INPUT@',
'-d', join_paths(top_srcdir, 'po'),
'-o', '@OUTPUT@'
],
install: true,
install_dir: join_paths(datadir, 'applications'),
)
# Unconditionally use this dir to avoid a circular dep with gnomecc
gnome_keybindings_keysdir = join_paths(datadir, 'gnome-control-center/keybindings')
keybinding_xml_files = [
'50-mutter-navigation.xml',
'50-mutter-system.xml',
'50-mutter-windows.xml',
]
if have_wayland
keybinding_xml_files += [
'50-mutter-wayland.xml',
]
endif
install_data(keybinding_xml_files,
install_dir: gnome_keybindings_keysdir,
)
xwayland_grab_default_access_rules = get_option('xwayland_grab_default_access_rules')
gschema_config = configuration_data()
gschema_config.set('GETTEXT_DOMAIN', meson.project_name())
gschema_config.set('XWAYLAND_GRAB_DEFAULT_ACCESS_RULES',
xwayland_grab_default_access_rules)
schemadir = join_paths(datadir, 'glib-2.0', 'schemas')
configure_file(
input: 'org.gnome.mutter.gschema.xml.in',
output: 'org.gnome.mutter.gschema.xml',
configuration: gschema_config,
install_dir: schemadir
)
configure_file(
input: 'org.gnome.mutter.wayland.gschema.xml.in',
output: 'org.gnome.mutter.wayland.gschema.xml',
configuration: gschema_config,
install_dir: schemadir
)
install_data(['mutter-schemas.convert'],
install_dir: join_paths(datadir, 'GConf/gsettings'),
)

1
doc/man/meson.build Normal file
View File

@ -0,0 +1 @@
install_man('mutter.1')

317
meson.build Normal file
View File

@ -0,0 +1,317 @@
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')

142
meson_options.txt Normal file
View File

@ -0,0 +1,142 @@
option('opengl',
type: 'boolean',
value: true,
description: 'Enable OpenGL'
)
option('opengl_libname',
type: 'string',
value: 'libGL.so.1',
description: 'OpenGL library file name'
)
option('gles2_libname',
type: 'string',
value: 'libGLESv2.so',
description: 'GLESv2 library file name'
)
option('gles2',
type: 'boolean',
value: true,
description: 'Enable GLES2 support'
)
option('egl',
type: 'boolean',
value: true,
description: 'Enable EGL support'
)
option('glx',
type: 'boolean',
value: true,
description: 'Enable GLX support'
)
option('wayland',
type: 'boolean',
value: true,
description: 'Enable Wayland support'
)
option('native_backend',
type: 'boolean',
value: true,
description: 'Enable the native backend'
)
option('remote_desktop',
type: 'boolean',
value: true,
description: 'Enable remote desktop and screen cast support'
)
option('egl_device',
type: 'boolean',
value: false,
description: 'Enable EGLDevice and EGLStream renderer support'
)
option('wayland_eglstream',
type: 'boolean',
value: false,
description: 'Enable Wayland EGLStream support client support'
)
option('udev',
type: 'boolean',
value: true,
description: 'Enable udev support when using the X11 backend'
)
option('libwacom',
type: 'boolean',
value: true,
description: 'Enable libwacom support'
)
option('pango_ft2',
type: 'boolean',
value: true,
description: 'Enable PangoFt2 support'
)
option('libcanberra',
type: 'boolean',
value: true,
description: 'Enable libcanberra support'
)
option('startup_notification',
type: 'boolean',
value: true,
description: 'Enable startup notification support'
)
option('sm',
type: 'boolean',
value: true,
description: 'Enable X11 session management support'
)
option('introspection',
type: 'boolean',
value: true,
description: 'Enable GObject introspection'
)
option('cogl_tests',
type: 'boolean',
value: true,
description: 'Enable cogl tests'
)
option('clutter_tests',
type: 'boolean',
value: true,
description: 'Enable clutter tests'
)
option('tests',
type: 'boolean',
value: true,
description: 'Enable mutter tests'
)
option('verbose',
type: 'boolean',
value: true,
description: 'Enable verbose logging ability'
)
option('xwayland_path',
type: 'string',
value: '',
description: 'Path to Xwayland executable'
)
option('xwayland_grab_default_access_rules',
type: 'string',
value: 'gnome-boxes,remote-viewer,virt-viewer,virt-manager,vinagre,vncviewer,Xephyr',
description: 'Comma delimited list of applications ressources or class allowed to issue X11 grabs in Xwayland'
)

1
po/meson.build Normal file
View File

@ -0,0 +1 @@
i18n.gettext(meson.project_name(), preset: 'glib')

View File

@ -0,0 +1,20 @@
default_plugin_c_args = [
'-fPIC',
'-DG_LOG_DOMAIN="mutter"',
'-DGETTEXT_PACKAGE="@0@"'.format(meson.project_name()),
]
default_plugin = shared_module('default',
sources: ['default.c'],
include_directories: mutter_includes,
c_args: default_plugin_c_args,
dependencies: [
glib_dep,
gtk3_dep,
json_glib_dep,
gsettings_desktop_schemas_dep,
libmutter_clutter_dep,
],
install_dir: join_paths(pkglibdir, 'plugins'),
install: true,
)

815
src/meson.build Normal file
View File

@ -0,0 +1,815 @@
mutter_includedir = join_paths(pkgincludedir, 'meta')
mutter_includes = [
include_directories('.'),
top_includepath,
clutter_includepath,
cogl_includepath,
]
mutter_lib_deps = [
m_dep,
]
mutter_pkg_deps = [
cairo_dep,
gio_unix_dep,
glib_dep,
gmodule_no_export_dep,
gnome_desktop_dep,
gsettings_desktop_schemas_dep,
gnome_settings_daemon_dep,
gtk3_dep,
json_glib_dep,
pango_dep,
xkbcommon_dep,
]
if have_gl
mutter_pkg_deps += [
gl_dep,
]
endif
if have_gles2
mutter_pkg_deps += [
gles2_dep,
]
endif
if have_egl
mutter_pkg_deps += [
egl_dep,
]
endif
if have_libgudev
mutter_pkg_deps += [
gudev_dep,
libudev_dep,
]
endif
if have_startup_notification
mutter_pkg_deps += [
libstartup_notification_dep,
]
endif
if have_libcanberra
mutter_pkg_deps += [
libcanberra_gtk3_dep,
]
endif
if have_libwacom
mutter_pkg_deps += [
libwacom_dep,
]
endif
if have_remote_desktop
mutter_pkg_deps += [
libpipewire_dep,
]
endif
if have_introspection
mutter_pkg_deps += [
gobject_introspection_dep,
]
endif
if have_x11
mutter_pkg_deps += [
xrandr_dep,
x11_dep,
xinerama_dep,
xext_dep,
ice_dep,
xcomposite_dep,
xcursor_dep,
xdamage_dep,
xext_dep,
xfixes_dep,
xi_dep,
xkbfile_dep,
xkeyboard_config_dep,
xkbcommon_x11_dep,
xrender_dep,
x11_xcb_dep,
xcb_randr_dep,
xcb_res_dep,
]
if have_sm
mutter_pkg_deps += [
sm_dep,
]
endif
endif
if have_wayland
mutter_pkg_deps += [
wayland_server_dep,
]
endif
if have_native_backend
mutter_pkg_deps += [
libdrm_dep,
libinput_dep,
gudev_dep,
libgbm_dep,
logind_provider_dep,
]
endif
if have_wayland_eglstream
mutter_lib_deps += [
dl_dep,
]
mutter_pkg_deps += [
wayland_eglstream_protocols_dep,
]
endif
mutter_deps = [
mutter_pkg_deps,
mutter_lib_deps,
]
mutter_c_args = [
'-DCLUTTER_ENABLE_COMPOSITOR_API',
'-DCLUTTER_ENABLE_EXPERIMENTAL_API',
'-DCOGL_ENABLE_EXPERIMENTAL_API',
'-DCOGL_ENABLE_EXPERIMENTAL_2_0_API',
'-DCOGL_ENABLE_MUTTER_API',
'-DCLUTTER_DISABLE_DEPRECATION_WARNINGS',
'-DCOGL_DISABLE_DEPRECATION_WARNINGS',
'-DG_LOG_DOMAIN="mutter"',
'-DSN_API_NOT_YET_FROZEN=1',
'-DGETTEXT_PACKAGE="@0@"'.format(meson.project_name()),
]
if get_option('verbose')
mutter_c_args += [
'-DWITH_VERBOSE_MODE'
]
endif
mutter_sources = [
'backends/edid.h',
'backends/edid-parse.c',
'backends/gsm-inhibitor-flag.h',
'backends/meta-backend.c',
'backends/meta-backend-private.h',
'backends/meta-barrier.c',
'backends/meta-barrier-private.h',
'backends/meta-crtc.c',
'backends/meta-crtc.h',
'backends/meta-cursor.c',
'backends/meta-cursor.h',
'backends/meta-cursor-renderer.c',
'backends/meta-cursor-renderer.h',
'backends/meta-cursor-sprite-xcursor.c',
'backends/meta-cursor-sprite-xcursor.h',
'backends/meta-cursor-tracker.c',
'backends/meta-cursor-tracker-private.h',
'backends/meta-display-config-shared.h',
'backends/meta-dnd-private.h',
'backends/meta-gpu.c',
'backends/meta-gpu.h',
'backends/meta-idle-monitor.c',
'backends/meta-idle-monitor-dbus.c',
'backends/meta-idle-monitor-dbus.h',
'backends/meta-idle-monitor-private.h',
'backends/meta-input-settings.c',
'backends/meta-input-settings-private.h',
'backends/meta-logical-monitor.c',
'backends/meta-logical-monitor.h',
'backends/meta-monitor.c',
'backends/meta-monitor-config-manager.c',
'backends/meta-monitor-config-manager.h',
'backends/meta-monitor-config-migration.c',
'backends/meta-monitor-config-migration.h',
'backends/meta-monitor-config-store.c',
'backends/meta-monitor-config-store.h',
'backends/meta-monitor.h',
'backends/meta-monitor-manager.c',
'backends/meta-monitor-manager-dummy.c',
'backends/meta-monitor-manager-dummy.h',
'backends/meta-monitor-manager-private.h',
'backends/meta-orientation-manager.c',
'backends/meta-orientation-manager.h',
'backends/meta-output.c',
'backends/meta-output.h',
'backends/meta-pointer-constraint.c',
'backends/meta-pointer-constraint.h',
'backends/meta-remote-access-controller-private.h',
'backends/meta-remote-access-controller.c',
'backends/meta-renderer.c',
'backends/meta-renderer.h',
'backends/meta-renderer-view.c',
'backends/meta-renderer-view.h',
'backends/meta-settings.c',
'backends/meta-settings-private.h',
'backends/meta-stage.c',
'backends/meta-stage-private.h',
'backends/x11/cm/meta-backend-x11-cm.c',
'backends/x11/cm/meta-backend-x11-cm.h',
'backends/x11/cm/meta-cursor-sprite-xfixes.c',
'backends/x11/cm/meta-cursor-sprite-xfixes.h',
'backends/x11/cm/meta-renderer-x11-cm.c',
'backends/x11/cm/meta-renderer-x11-cm.h',
'backends/x11/meta-backend-x11.c',
'backends/x11/meta-backend-x11.h',
'backends/x11/meta-barrier-x11.c',
'backends/x11/meta-barrier-x11.h',
'backends/x11/meta-clutter-backend-x11.c',
'backends/x11/meta-clutter-backend-x11.h',
'backends/x11/meta-crtc-xrandr.c',
'backends/x11/meta-crtc-xrandr.h',
'backends/x11/meta-cursor-renderer-x11.c',
'backends/x11/meta-cursor-renderer-x11.h',
'backends/x11/meta-gpu-xrandr.c',
'backends/x11/meta-gpu-xrandr.h',
'backends/x11/meta-input-settings-x11.c',
'backends/x11/meta-input-settings-x11.h',
'backends/x11/meta-monitor-manager-xrandr.c',
'backends/x11/meta-monitor-manager-xrandr.h',
'backends/x11/meta-output-xrandr.c',
'backends/x11/meta-output-xrandr.h',
'backends/x11/meta-renderer-x11.c',
'backends/x11/meta-renderer-x11.h',
'backends/x11/meta-stage-x11-nested.c',
'backends/x11/meta-stage-x11-nested.h',
'backends/x11/nested/meta-backend-x11-nested.c',
'backends/x11/nested/meta-backend-x11-nested.h',
'backends/x11/nested/meta-cursor-renderer-x11-nested.c',
'backends/x11/nested/meta-cursor-renderer-x11-nested.h',
'backends/x11/nested/meta-renderer-x11-nested.c',
'backends/x11/nested/meta-renderer-x11-nested.h',
'compositor/clutter-utils.c',
'compositor/clutter-utils.h',
'compositor/cogl-utils.c',
'compositor/cogl-utils.h',
'compositor/compositor.c',
'compositor/compositor-private.h',
'compositor/meta-background-actor.c',
'compositor/meta-background-actor-private.h',
'compositor/meta-background.c',
'compositor/meta-background-group.c',
'compositor/meta-background-image.c',
'compositor/meta-background-private.h',
'compositor/meta-cullable.c',
'compositor/meta-cullable.h',
'compositor/meta-dnd-actor.c',
'compositor/meta-dnd-actor-private.h',
'compositor/meta-dnd.c',
'compositor/meta-feedback-actor.c',
'compositor/meta-feedback-actor-private.h',
'compositor/meta-module.c',
'compositor/meta-module.h',
'compositor/meta-plugin.c',
'compositor/meta-plugin-manager.c',
'compositor/meta-plugin-manager.h',
'compositor/meta-shadow-factory.c',
'compositor/meta-shaped-texture.c',
'compositor/meta-shaped-texture-private.h',
'compositor/meta-surface-actor.c',
'compositor/meta-surface-actor.h',
'compositor/meta-surface-actor-x11.c',
'compositor/meta-surface-actor-x11.h',
'compositor/meta-sync-ring.c',
'compositor/meta-sync-ring.h',
'compositor/meta-texture-rectangle.c',
'compositor/meta-texture-rectangle.h',
'compositor/meta-texture-tower.c',
'compositor/meta-texture-tower.h',
'compositor/meta-window-actor.c',
'compositor/meta-window-actor-private.h',
'compositor/meta-window-group.c',
'compositor/meta-window-group-private.h',
'compositor/meta-window-shape.c',
'compositor/region-utils.c',
'compositor/region-utils.h',
'core/bell.c',
'core/bell.h',
'core/boxes.c',
'core/boxes-private.h',
'core/constraints.c',
'core/constraints.h',
'core/core.c',
'core/core.h',
'core/delete.c',
'core/display.c',
'core/display-private.h',
'core/edge-resistance.c',
'core/edge-resistance.h',
'core/events.c',
'core/events.h',
'core/frame.c',
'core/frame.h',
'core/keybindings.c',
'core/keybindings-private.h',
'core/main.c',
'core/main-private.h',
'core/meta-accel-parse.c',
'core/meta-accel-parse.h',
'core/meta-border.c',
'core/meta-border.h',
'core/meta-close-dialog.c',
'core/meta-close-dialog-default.c',
'core/meta-close-dialog-default-private.h',
'core/meta-fraction.c',
'core/meta-fraction.h',
'core/meta-gesture-tracker.c',
'core/meta-gesture-tracker-private.h',
'core/meta-inhibit-shortcuts-dialog.c',
'core/meta-inhibit-shortcuts-dialog-default.c',
'core/meta-inhibit-shortcuts-dialog-default-private.h',
'core/meta-workspace-manager.c',
'core/meta-workspace-manager-private.h',
'core/place.c',
'core/place.h',
'core/prefs.c',
'core/restart.c',
'core/stack.c',
'core/stack.h',
'core/stack-tracker.c',
'core/stack-tracker.h',
'core/startup-notification.c',
'core/startup-notification-private.h',
'core/util.c',
'core/util-private.h',
'core/window.c',
'core/window-private.h',
'core/workspace.c',
'core/workspace-private.h',
'ui/frames.c',
'ui/frames.h',
'ui/theme.c',
'ui/theme-private.h',
'ui/ui.c',
'ui/ui.h',
'x11/atomnames.h',
'x11/events.c',
'x11/events.h',
'x11/group.c',
'x11/group-private.h',
'x11/group-props.c',
'x11/group-props.h',
'x11/iconcache.c',
'x11/iconcache.h',
'x11/meta-x11-display.c',
'x11/meta-x11-display-private.h',
'x11/meta-x11-errors.c',
'x11/mutter-Xatomtype.h',
'x11/session.c',
'x11/session.h',
'x11/window-props.c',
'x11/window-props.h',
'x11/window-x11.c',
'x11/window-x11.h',
'x11/window-x11-private.h',
'x11/xprops.c',
'x11/xprops.h',
]
if have_egl
mutter_sources += [
'backends/meta-egl.c',
'backends/meta-egl-ext.h',
'backends/meta-egl.h',
]
endif
if have_gles2
mutter_sources += [
'backends/meta-gles3.c',
'backends/meta-gles3.h',
'backends/meta-gles3-table.h',
]
endif
if have_remote_desktop
mutter_sources += [
'backends/meta-dbus-session-watcher.c',
'backends/meta-dbus-session-watcher.h',
'backends/meta-remote-desktop.c',
'backends/meta-remote-desktop.h',
'backends/meta-remote-desktop-session.c',
'backends/meta-remote-desktop-session.h',
'backends/meta-screen-cast.c',
'backends/meta-screen-cast.h',
'backends/meta-screen-cast-monitor-stream.c',
'backends/meta-screen-cast-monitor-stream.h',
'backends/meta-screen-cast-monitor-stream-src.c',
'backends/meta-screen-cast-monitor-stream-src.h',
'backends/meta-screen-cast-session.c',
'backends/meta-screen-cast-session.h',
'backends/meta-screen-cast-stream.c',
'backends/meta-screen-cast-stream.h',
'backends/meta-screen-cast-stream-src.c',
'backends/meta-screen-cast-stream-src.h',
]
endif
if have_wayland
mutter_sources += [
'compositor/meta-surface-actor-wayland.c',
'compositor/meta-surface-actor-wayland.h',
'wayland/meta-cursor-sprite-wayland.c',
'wayland/meta-cursor-sprite-wayland.h',
'wayland/meta-pointer-confinement-wayland.c',
'wayland/meta-pointer-confinement-wayland.h',
'wayland/meta-pointer-lock-wayland.c',
'wayland/meta-pointer-lock-wayland.h',
'wayland/meta-wayland-actor-surface.c',
'wayland/meta-wayland-actor-surface.h',
'wayland/meta-wayland-buffer.c',
'wayland/meta-wayland-buffer.h',
'wayland/meta-wayland.c',
'wayland/meta-wayland-cursor-surface.c',
'wayland/meta-wayland-cursor-surface.h',
'wayland/meta-wayland-data-device.c',
'wayland/meta-wayland-data-device.h',
'wayland/meta-wayland-data-device-private.h',
'wayland/meta-wayland-dma-buf.c',
'wayland/meta-wayland-dma-buf.h',
'wayland/meta-wayland-gtk-shell.c',
'wayland/meta-wayland-gtk-shell.h',
'wayland/meta-wayland.h',
'wayland/meta-wayland-inhibit-shortcuts.c',
'wayland/meta-wayland-inhibit-shortcuts-dialog.c',
'wayland/meta-wayland-inhibit-shortcuts-dialog.h',
'wayland/meta-wayland-inhibit-shortcuts.h',
'wayland/meta-wayland-input-device.c',
'wayland/meta-wayland-input-device.h',
'wayland/meta-wayland-keyboard.c',
'wayland/meta-wayland-keyboard.h',
'wayland/meta-wayland-legacy-xdg-shell.c',
'wayland/meta-wayland-legacy-xdg-shell.h',
'wayland/meta-wayland-outputs.c',
'wayland/meta-wayland-outputs.h',
'wayland/meta-wayland-pointer.c',
'wayland/meta-wayland-pointer-constraints.c',
'wayland/meta-wayland-pointer-constraints.h',
'wayland/meta-wayland-pointer-gesture-pinch.c',
'wayland/meta-wayland-pointer-gesture-pinch.h',
'wayland/meta-wayland-pointer-gestures.c',
'wayland/meta-wayland-pointer-gestures.h',
'wayland/meta-wayland-pointer-gesture-swipe.c',
'wayland/meta-wayland-pointer-gesture-swipe.h',
'wayland/meta-wayland-pointer.h',
'wayland/meta-wayland-popup.c',
'wayland/meta-wayland-popup.h',
'wayland/meta-wayland-private.h',
'wayland/meta-wayland-region.c',
'wayland/meta-wayland-region.h',
'wayland/meta-wayland-seat.c',
'wayland/meta-wayland-seat.h',
'wayland/meta-wayland-shell-surface.c',
'wayland/meta-wayland-shell-surface.h',
'wayland/meta-wayland-subsurface.c',
'wayland/meta-wayland-subsurface.h',
'wayland/meta-wayland-surface.c',
'wayland/meta-wayland-surface.h',
'wayland/meta-wayland-tablet.c',
'wayland/meta-wayland-tablet-cursor-surface.c',
'wayland/meta-wayland-tablet-cursor-surface.h',
'wayland/meta-wayland-tablet.h',
'wayland/meta-wayland-tablet-manager.c',
'wayland/meta-wayland-tablet-manager.h',
'wayland/meta-wayland-tablet-pad.c',
'wayland/meta-wayland-tablet-pad-group.c',
'wayland/meta-wayland-tablet-pad-group.h',
'wayland/meta-wayland-tablet-pad.h',
'wayland/meta-wayland-tablet-pad-ring.c',
'wayland/meta-wayland-tablet-pad-ring.h',
'wayland/meta-wayland-tablet-pad-strip.c',
'wayland/meta-wayland-tablet-pad-strip.h',
'wayland/meta-wayland-tablet-seat.c',
'wayland/meta-wayland-tablet-seat.h',
'wayland/meta-wayland-tablet-tool.c',
'wayland/meta-wayland-tablet-tool.h',
'wayland/meta-wayland-text-input.c',
'wayland/meta-wayland-text-input.h',
'wayland/meta-wayland-text-input-legacy.c',
'wayland/meta-wayland-text-input-legacy.h',
'wayland/meta-wayland-touch.c',
'wayland/meta-wayland-touch.h',
'wayland/meta-wayland-types.h',
'wayland/meta-wayland-versions.h',
'wayland/meta-wayland-wl-shell.c',
'wayland/meta-wayland-wl-shell.h',
'wayland/meta-wayland-xdg-foreign.c',
'wayland/meta-wayland-xdg-foreign.h',
'wayland/meta-wayland-xdg-shell.c',
'wayland/meta-wayland-xdg-shell.h',
'wayland/meta-window-wayland.c',
'wayland/meta-window-wayland.h',
'wayland/meta-window-xwayland.c',
'wayland/meta-window-xwayland.h',
'wayland/meta-xwayland.c',
'wayland/meta-xwayland-grab-keyboard.c',
'wayland/meta-xwayland-grab-keyboard.h',
'wayland/meta-xwayland.h',
'wayland/meta-xwayland-private.h',
'wayland/meta-xwayland-selection.c',
'wayland/meta-xwayland-selection-private.h',
]
endif
if have_native_backend
mutter_sources += [
'backends/native/dbus-utils.c',
'backends/native/dbus-utils.h',
'backends/native/meta-backend-native.c',
'backends/native/meta-backend-native.h',
'backends/native/meta-backend-native-private.h',
'backends/native/meta-barrier-native.c',
'backends/native/meta-barrier-native.h',
'backends/native/meta-clutter-backend-native.c',
'backends/native/meta-clutter-backend-native.h',
'backends/native/meta-crtc-kms.c',
'backends/native/meta-crtc-kms.h',
'backends/native/meta-cursor-renderer-native.c',
'backends/native/meta-cursor-renderer-native.h',
'backends/native/meta-gpu-kms.c',
'backends/native/meta-gpu-kms.h',
'backends/native/meta-input-settings-native.c',
'backends/native/meta-input-settings-native.h',
'backends/native/meta-launcher.c',
'backends/native/meta-launcher.h',
'backends/native/meta-monitor-manager-kms.c',
'backends/native/meta-monitor-manager-kms.h',
'backends/native/meta-output-kms.c',
'backends/native/meta-output-kms.h',
'backends/native/meta-renderer-native.c',
'backends/native/meta-renderer-native-gles3.c',
'backends/native/meta-renderer-native-gles3.h',
'backends/native/meta-renderer-native.h',
'backends/native/meta-stage-native.c',
'backends/native/meta-stage-native.h',
]
endif
if have_wayland_eglstream
mutter_sources += [
'wayland/meta-wayland-egl-stream.c',
'wayland/meta-wayland-egl-stream.h',
]
endif
mutter_built_sources = []
dbus_display_config_built_sources = gnome.gdbus_codegen('meta-dbus-display-config',
'org.gnome.Mutter.DisplayConfig.xml',
interface_prefix: 'org.gnome.Mutter.',
namespace: 'MetaDBus',
)
mutter_built_sources += dbus_display_config_built_sources
dbus_idle_monitor_built_sources = gnome.gdbus_codegen('meta-dbus-idle-monitor',
'org.gnome.Mutter.IdleMonitor.xml',
interface_prefix: 'org.gnome.Mutter.',
namespace: 'MetaDBus',
object_manager: true,
)
mutter_built_sources += dbus_idle_monitor_built_sources
if have_native_backend
gdbus_codegen = find_program('gdbus-codegen')
dbus_login1_built_sources = custom_target('meta-dbus-login1',
input: 'org.freedesktop.login1.xml',
output: [
'meta-dbus-login1.c',
'meta-dbus-login1.h',
],
command: [
gdbus_codegen,
'--interface-prefix', 'org.freedesktop.login1',
'--c-namespace', 'Login1',
'--generate-c-code', 'meta-dbus-login1',
'--output-directory', join_paths(builddir, 'src'),
'--c-generate-autocleanup', 'all',
'@INPUT@',
]
)
mutter_built_sources += dbus_login1_built_sources
endif
if have_remote_desktop
dbus_remote_desktop_built_sources = gnome.gdbus_codegen('meta-dbus-remote-desktop',
'org.gnome.Mutter.RemoteDesktop.xml',
interface_prefix: 'org.gnome.Mutter.',
namespace: 'MetaDBus',
)
mutter_built_sources += dbus_remote_desktop_built_sources
dbus_screen_cast_built_sources = gnome.gdbus_codegen('meta-dbus-screen-cast',
'org.gnome.Mutter.ScreenCast.xml',
interface_prefix: 'org.gnome.Mutter.',
namespace: 'MetaDBus',
)
mutter_built_sources += dbus_screen_cast_built_sources
endif
cvt = find_program('cvt')
gen_default_modes = find_program('backends/native/gen-default-modes.py')
default_modes_h = custom_target('meta-default-modes',
output: 'meta-default-modes.h',
command: [gen_default_modes, '@OUTPUT@']
)
mutter_built_sources += default_modes_h
if have_wayland
# Format:
# - protocol name
# - protocol stability ('private', 'stable' or 'unstable')
# - protocol version (if stability is 'unstable')
wayland_protocols = [
['gtk-primary-selection', 'private', ],
['gtk-shell', 'private', ],
['gtk-text-input', 'private', ],
['keyboard-shortcuts-inhibit', 'unstable', 'v1', ],
['linux-dmabuf', 'unstable', 'v1', ],
['pointer-constraints', 'unstable', 'v1', ],
['pointer-gestures', 'unstable', 'v1', ],
['relative-pointer', 'unstable', 'v1', ],
['tablet', 'unstable', 'v2', ],
['text-input', 'unstable', 'v3', ],
['xdg-foreign', 'unstable', 'v1', ],
['xdg-output', 'unstable', 'v1', ],
['xdg-shell', 'unstable', 'v6', ],
['xdg-shell', 'stable', ],
['xwayland-keyboard-grab', 'unstable', 'v1', ],
]
if have_wayland_eglstream
wayland_eglstream_protocols_dir = wayland_eglstream_protocols_dep.get_pkgconfig_variable('pkgdatadir')
wayland_protocols += [
['wayland-eglstream-controller', 'third-party', wayland_eglstream_protocols_dir],
]
endif
wayland_scanner = find_program('wayland-scanner')
protocols_dir = wayland_protocols_dep.get_pkgconfig_variable('pkgdatadir')
assert(protocols_dir != '', 'Could not get pkgdatadir from wayland-protocols.pc')
foreach p: wayland_protocols
protocol_name = p.get(0)
protocol_type = p.get(1)
if protocol_type == 'stable'
output_base = protocol_name
input = join_paths(protocols_dir,
'@0@/@1@/@2@.xml'.format(protocol_type,
protocol_name,
output_base))
elif protocol_type == 'private'
output_base = protocol_name
input = 'wayland/protocol/@0@.xml'.format(protocol_name)
elif protocol_type == 'third-party'
output_base = protocol_name
protocol_dir = p.get(2)
input = join_paths(protocol_dir, '@0@.xml'.format(protocol_name))
else
protocol_version = p.get(2)
output_base = '@0@-@1@-@2@'.format(protocol_name,
protocol_type,
protocol_version)
input = join_paths(protocols_dir,
'@0@/@1@/@2@.xml'.format(protocol_type,
protocol_name,
output_base))
endif
mutter_built_sources += custom_target('@0@ server header'.format(output_base),
input: input,
output: '@0@-server-protocol.h'.format(output_base),
command: [
wayland_scanner,
'server-header',
'@INPUT@', '@OUTPUT@',
]
)
mutter_built_sources += custom_target('@0@ source'.format(output_base),
input: input,
output: '@0@-protocol.c'.format(output_base),
command: [
wayland_scanner,
'private-code',
'@INPUT@', '@OUTPUT@',
]
)
endforeach
endif
subdir('meta')
mutter_built_sources += mutter_enum_types
mutter_built_sources += mutter_version
libmutter_name = 'mutter-' + libmutter_api_version
libmutter = shared_library(libmutter_name,
sources: [
mutter_sources,
mutter_built_sources,
],
include_directories: mutter_includes,
c_args: mutter_c_args,
dependencies: [
libmutter_cogl_dep,
libmutter_clutter_dep,
mutter_deps,
],
install_rpath: pkglibdir,
install_dir: libdir,
install: true,
)
libmutter_dep = declare_dependency(
link_with: libmutter,
include_directories: mutter_includes,
dependencies: [
libmutter_cogl_dep,
libmutter_clutter_dep,
mutter_deps,
],
)
executable('mutter',
sources: [
files('core/mutter.c'),
],
include_directories: mutter_includes,
c_args: mutter_c_args,
dependencies: [libmutter_dep],
install_dir: bindir,
install: true,
)
if have_introspection
mutter_introspected_sources = []
foreach source : mutter_sources
if source.endswith('.c')
mutter_introspected_sources += source
endif
endforeach
libmutter_gir = gnome.generate_gir(libmutter,
sources: [
mutter_version,
mutter_enum_types[1],
mutter_introspected_sources,
mutter_public_header_files
],
nsversion: libmutter_api_version,
namespace: 'Meta',
symbol_prefix: 'meta',
includes: [
'GObject-2.0',
'GDesktopEnums-3.0',
'Gdk-3.0',
'Gtk-3.0',
'xlib-2.0',
'xfixes-4.0',
libmutter_cogl_gir[0],
libmutter_cogl_pango_gir[0],
libmutter_clutter_gir[0],
],
dependencies: [mutter_deps],
link_with: [libmutter],
extra_args: mutter_c_args + [
'-U_GNU_SOURCE',
],
install_dir_gir: pkglibdir,
install_dir_typelib: pkglibdir,
install: true
)
endif
pkg.generate(
name: 'Meta',
filebase: 'libmutter-' + libmutter_api_version,
description: 'Mutter compositor and window manager library',
libraries: [libmutter],
subdirs: pkgname,
requires: [mutter_pkg_deps, libmutter_clutter_name],
version: meson.project_version(),
variables: [
'apiversion=' + libmutter_api_version,
'girdir=${libdir}/mutter-' + libmutter_api_version,
'typelibdir=${libdir}/mutter-' + libmutter_api_version,
],
)
subdir('compositor/plugins')
if have_tests
subdir('tests')
endif

82
src/meta/meson.build Normal file
View File

@ -0,0 +1,82 @@
mutter_public_headers = [
'barrier.h',
'boxes.h',
'common.h',
'compositor.h',
'compositor-mutter.h',
'display.h',
'group.h',
'keybindings.h',
'main.h',
'meta-backend.h',
'meta-background.h',
'meta-background-actor.h',
'meta-background-group.h',
'meta-background-image.h',
'meta-close-dialog.h',
'meta-cursor-tracker.h',
'meta-dnd.h',
'meta-idle-monitor.h',
'meta-inhibit-shortcuts-dialog.h',
'meta-monitor-manager.h',
'meta-plugin.h',
'meta-remote-access-controller.h',
'meta-settings.h',
'meta-shadow-factory.h',
'meta-shaped-texture.h',
'meta-stage.h',
'meta-window-actor.h',
'meta-window-group.h',
'meta-window-shape.h',
'meta-workspace-manager.h',
'prefs.h',
'theme.h',
'types.h',
'util.h',
'window.h',
'workspace.h',
]
if have_x11
mutter_public_headers += [
'meta-x11-display.h',
'meta-x11-errors.h',
]
endif
install_headers(mutter_public_headers,
subdir: mutter_includedir
)
mutter_public_header_files = files(mutter_public_headers)
mutter_enum_types = gnome.mkenums('meta-enum-types',
sources: [mutter_public_headers],
c_template: 'meta-enum-types.c.in',
h_template: 'meta-enum-types.h.in',
install_dir: mutter_includedir,
install_header: true,
)
mutter_version_array = meson.project_version().split('.')
mutter_version_major = mutter_version_array[0]
mutter_version_minor = mutter_version_array[1]
mutter_version_micro = mutter_version_array[2]
mutter_version_cdata = configuration_data()
mutter_version_cdata.set('MUTTER_MAJOR_VERSION',
'@0@'.format(mutter_version_major))
mutter_version_cdata.set('MUTTER_MINOR_VERSION',
'@0@'.format(mutter_version_minor))
mutter_version_cdata.set('MUTTER_MICRO_VERSION',
'@0@'.format(mutter_version_micro))
mutter_version_cdata.set('MUTTER_PLUGIN_API_VERSION',
'@0@'.format(mutter_plugin_api_version))
mutter_version = configure_file(
input: 'meta-version.h.in',
output: 'meta-version.h',
configuration: mutter_version_cdata,
install_dir: mutter_includedir,
install: true,
)

114
src/tests/meson.build Normal file
View File

@ -0,0 +1,114 @@
#tests_srcdir = join_paths(top_srcdir, 'srcs')
#tests_builddir = join_paths(builddir, 'src/tests')
tests_includepath = mutter_includes
tests_c_args = mutter_c_args
tests_deps = [
mutter_deps,
libmutter_cogl_dep,
libmutter_clutter_dep,
]
test_env = environment()
test_env.set('G_TEST_SRCDIR', join_paths(top_srcdir, 'src'))
test_env.set('G_TEST_BUILDDIR', builddir)
test_env.set('MUTTER_TEST_PLUGIN_PATH', '@0@'.format(default_plugin.full_path()))
test_client = executable('mutter-test-client',
sources: ['test-client.c'],
include_directories: tests_includepath,
c_args: tests_c_args,
dependencies: [
gtk3_dep,
gio_unix_dep,
xext_dep,
],
install: false,
)
test_runner = executable('mutter-test-runner',
sources: [
'test-utils.c',
'test-utils.h',
'test-runner.c',
],
include_directories: tests_includepath,
c_args: tests_c_args,
link_with: [libmutter],
dependencies: [tests_deps],
install: false,
)
unit_tests = executable('mutter-test-unit-tests',
sources: [
'test-utils.c',
'test-utils.h',
'unit-tests.c',
'boxes-tests.c',
'boxes-tests.h',
'meta-backend-test.c',
'meta-backend-test.h',
'meta-monitor-manager-test.c',
'meta-monitor-manager-test.h',
'monitor-config-migration-unit-tests.c',
'monitor-config-migration-unit-tests.h',
'monitor-store-unit-tests.c',
'monitor-store-unit-tests.h',
'monitor-test-utils.c',
'monitor-test-utils.h',
'monitor-unit-tests.c',
'monitor-unit-tests.h',
],
include_directories: tests_includepath,
c_args: tests_c_args,
link_with: [libmutter],
dependencies: [tests_deps],
install: false,
)
headless_start_test = executable('mutter-headless-start-test',
sources: [
'headless-start-test.c',
'meta-backend-test.c',
'meta-backend-test.h',
'meta-monitor-manager-test.c',
'meta-monitor-manager-test.h',
'test-utils.c',
'test-utils.h',
],
include_directories: tests_includepath,
c_args: tests_c_args,
link_with: [libmutter],
dependencies: [tests_deps],
install: false,
)
stacking_tests = files([
'stacking/basic-x11.metatest',
'stacking/basic-wayland.metatest',
'stacking/minimized.metatest',
'stacking/mixed-windows.metatest',
'stacking/set-parent.metatest',
'stacking/override-redirect.metatest',
])
test('mutter/stacking', test_runner,
env: test_env,
args: [
stacking_tests,
],
is_parallel: false,
timeout: 60,
)
test('mutter/unit', unit_tests,
env: test_env,
is_parallel: false,
timeout: 60,
)
test('mutter/unit/headless-start', headless_start_test,
env: test_env,
is_parallel: false,
timeout: 60,
)