Pure Wayland Gnome Build

Thanks to the tireless efforts of @bilelmoussaoui and other Gnome devs across the core components, Gnome can now be built without various X11 dependencies, specifically Xwayland.

For the 46 and 47 releases I’d simply built mutter with meson_options: xwayland=false. This is a quick and easy way to get a pure Wayland session.

Curiosity got the best of me today tho, so I built out gdm, gnome-session, mutter, and gnome-shell as I’ve described in detail on the Arch Forums here.

Everything went swimmingly and I was able to uninstall xorg-xwayland and its gang. That was fun!

One single issue I noted was the inability to compile mutter without cvt. Specifically, I ended up adding a build-time dependency on libxcvt.

Guessing this is some mistake on my part that Bilal, @fmuellner, @alatiera, or any number of other core devs could help clarify very quickly.

Dependency glib-2.0 found: YES 2.82.2 (cached)
Program /usr/bin/glib-mkenums found: YES (/usr/bin/glib-mkenums)
Dependency glib-2.0 found: YES 2.82.2 (cached)
Program /usr/bin/glib-mkenums found: YES (/usr/bin/glib-mkenums)
Program cvt found: NO

mutter/src/meson.build:1003:8: ERROR: Program 'cvt' not found or not executable

To be clear, I’m not looking for any distro-specific packaging help, just general build guidance for this issue.

Thanks in advance!

Build Log

+ exec meson setup --prefix /usr --libexecdir lib --sbindir bin --buildtype plain --auto-features enabled --wrap-mode nodownload -D b_pie=true -D python.bytecompile=1 mutter build -D docs=true -D egl_device=true -D installed_tests=false -D libdisplay_info=enabled -D tests=disabled -D wayland_eglstream=true -D xwayland=false -D x11=false
The Meson build system
Version: 1.6.0
Source dir: /build/mutter/src/mutter
Build dir: /build/mutter/src/build
Build type: native build
Project name: mutter
Project version: 47.1
C compiler for the host machine: cc (gcc 14.2.1 "cc (GCC) 14.2.1 20240910")
C linker for the host machine: cc ld.bfd 2.43.0
Host machine cpu family: x86_64
Host machine cpu: x86_64
Compiler for C supports link arguments -Wl,--disable-new-dtags: YES 
Library m found: YES
Found pkg-config: YES (/usr/bin/pkg-config) 2.1.1
Run-time dependency graphene-gobject-1.0 found: YES 1.10.8
Run-time dependency gdk-pixbuf-2.0 found: YES 2.42.12
Run-time dependency pango found: YES 1.54.0
Run-time dependency cairo found: YES 1.18.2
Run-time dependency pangocairo found: YES 1.54.0
Run-time dependency pixman-1 found: YES 0.43.4
Run-time dependency fribidi found: YES 1.0.16
Run-time dependency gsettings-desktop-schemas found: YES 47.1
Run-time dependency glib-2.0 found: YES 2.82.2
Run-time dependency gio-unix-2.0 found: YES 2.82.2
Dependency gio-unix-2.0 found: YES 2.82.2 (cached)
Run-time dependency gobject-2.0 found: YES 2.82.2
Dependency gobject-2.0 found: YES 2.82.2 (cached)
Run-time dependency gmodule-no-export-2.0 found: YES 2.82.2
Run-time dependency gnome-settings-daemon found: YES 47.1
Run-time dependency xkbcommon found: YES 1.7.0
Run-time dependency atk found: YES 2.54.0
Run-time dependency colord found: YES 1.4.7
Run-time dependency lcms2 found: YES 2.16
Run-time dependency harfbuzz found: YES 10.0.1
Run-time dependency libeis-1.0 found: YES 1.3.0
Run-time dependency libei-1.0 found: YES 1.3.0
Did not find CMake 'cmake'
Found CMake: NO
Run-time dependency gvdb found: NO (tried pkgconfig and cmake)
Looking for a fallback subproject for the dependency gvdb

Executing subproject gvdb 

gvdb| Project name: gvdb
gvdb| Project version: 0.0
gvdb| C compiler for the host machine: cc (gcc 14.2.1 "cc (GCC) 14.2.1 20240910")
gvdb| C linker for the host machine: cc ld.bfd 2.43.0
gvdb| Run-time dependency gio-2.0 found: YES 2.82.2
gvdb| Build targets in project: 1
gvdb| Subproject gvdb finished.

Dependency gvdb found: YES 0.0 (overridden)
Run-time dependency libdisplay-info found: YES 0.2.0
Run-time dependency gnome-desktop-4 found: YES 44.1
Run-time dependency libcanberra found: YES 0.30
Run-time dependency gl found: YES 1.2
Run-time dependency egl found: YES 1.5
Run-time dependency glesv2 found: YES 3.2
Run-time dependency wayland-server found: YES 1.23.1
Run-time dependency wayland-client found: YES 1.23.1
Run-time dependency wayland-cursor found: YES 1.23.1
Run-time dependency wayland-protocols found: YES 1.38
Run-time dependency wayland-egl found: YES 18.1.0
Run-time dependency libudev found: YES 256
Run-time dependency gudev-1.0 found: YES 238
Run-time dependency udev found: YES 256
Run-time dependency libsystemd found: YES 256
Run-time dependency gbm found: YES 24.2.6-arch1.1
Run-time dependency libinput found: YES 1.26.2
Run-time dependency libdrm found: YES 2.4.123
Checking for type "struct drm_plane_size_hint" with dependency libdrm: YES 
Run-time dependency wayland-eglstream-protocols found: YES 1.1.16
Library dl found: YES
Run-time dependency libwacom found: YES 2.13.0
Checking for function "libwacom_get_num_rings" with dependency libwacom: YES 
Run-time dependency libpipewire-0.3 found: YES 1.2.6
Run-time dependency gobject-introspection-1.0 found: YES 1.82.0
Checking if "timerfd_create(2) system call" : links: YES 
Checking for function "malloc_trim" : YES 
Run-time dependency sysprof-capture-4 found: YES 47.0
Run-time dependency sysprof-6 found: YES 47.0
Checking for function "ffs" : YES 
Checking for function "clz" : YES 
Checking for function "memmem" : YES 
Has header "sys/eventfd.h" : YES 
Header "sys/prctl.h" has symbol "prctl" : YES 
Checking for function "mkostemp" : YES 
Checking for function "posix_fallocate" : YES 
Checking for function "memfd_create" : YES 
Configuring config.h using configuration
Dependency gobject-introspection-1.0 found: YES 1.82.0 (cached)
Dependency gobject-introspection-1.0 found: YES 1.82.0 (cached)
Program /usr/bin/g-ir-scanner found: YES (/usr/bin/g-ir-scanner)
Dependency gobject-introspection-1.0 found: YES 1.82.0 (cached)
Program /usr/bin/g-ir-compiler found: YES (/usr/bin/g-ir-compiler)
Dependency glib-2.0 found: YES 2.82.2 (cached)
Program /usr/bin/glib-mkenums found: YES (/usr/bin/glib-mkenums)
Dependency glib-2.0 found: YES 2.82.2 (cached)
Program /usr/bin/glib-mkenums found: YES (/usr/bin/glib-mkenums)
Dependency glib-2.0 found: YES 2.82.2 (cached)
Program /usr/bin/glib-mkenums found: YES (/usr/bin/glib-mkenums)
Dependency glib-2.0 found: YES 2.82.2 (cached)
Program /usr/bin/glib-mkenums found: YES (/usr/bin/glib-mkenums)
Dependency glib-2.0 found: YES 2.82.2 (cached)
Program /usr/bin/glib-genmarshal found: YES (/usr/bin/glib-genmarshal)
Program msgfmt found: YES (/usr/bin/msgfmt)
Configuring org.gnome.mutter.gschema.xml using configuration
Configuring org.gnome.mutter.wayland.gschema.xml using configuration
Program get-state.py found: YES (/build/mutter/src/mutter/tools/get-state.py)
Dependency glib-2.0 found: YES 2.82.2 (cached)
Program /usr/bin/glib-mkenums found: YES (/usr/bin/glib-mkenums)
Dependency glib-2.0 found: YES 2.82.2 (cached)
Program /usr/bin/glib-mkenums found: YES (/usr/bin/glib-mkenums)
Program cvt found: NO

mutter/src/meson.build:1003:8: ERROR: Program 'cvt' not found or not executable

A full log can be found at /build/mutter/src/build/meson-logs/meson-log.txt

3 Likes

Hi,

It is not libxcvt that is required, but cvt the binary. It used by this python script src/backends/native/gen-default-modes.py · main · GNOME / mutter · GitLab at build time to generate a header file containing a list of display modes ( drmModeModeInfo).

Not sure if cvt could be avoided here though.

3 Likes

Thanks! Yes, if I add the cvt binary to my build environment there’s no need to list as a build-deps in the PKGBUILD. Either method accomplishes the same, guess this is just something to live with.

I was ideally hoping for a clean sweep of depedency removals and zero added… I was THIS close! Cheers!

libxcvt despite the X in it name, doesn’t depend on any X11 libraries or any libraries at all. It is just an implementation of CVT standard.

I understand that, and now its use in mutter thanks to your response.

I had read… libxcvt also provides a standalone version of the command line tool cvt copied from the Xorg implementation and is meant to be a direct replacement to the version provided by the Xorg server.”… prior to my posting here.

Was mostly confused that it was required at build, but then later removed from host system when I uninstalled Xwayland & friends.

$ sudo pacman -Rns xorg-xwayland 
checking dependencies...

Package (8)           Old Version  Net Change

libfontenc            1.1.8-1       -0.03 MiB
libxcvt               0.1.2-2       -0.04 MiB
libxfont2             2.0.7-1       -0.23 MiB
xorg-fonts-encodings  1.1.0-1       -0.61 MiB
xorg-server-common    21.1.14-1     -0.12 MiB
xorg-setxkbmap        1.3.4-2       -0.03 MiB
xorg-xkbcomp          1.4.7-1       -0.21 MiB
xorg-xwayland         24.1.4-1      -2.19 MiB

Total Removed Size:  3.47 MiB

Thank you for clarifying where/why it’s used, and big thanks for your work!

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.