libseat: Rename dispatch_background in backends

This name never made much sense. dispatch_and_execute is more
meaningful, especially when compared to the non-executing dispatch
libseat/seatd: Add dispatch_pending_and_execute

This handler returns the number of dispatched or executed events, or -1
if dispatch_pending failed.

This helper is used to clean up dispatch_background, which now ensures
that all events are executed before we read or poll the connection, and
have improved error handling in the corner case where the second
dispatch_pending failed.
libseat/seatd: Return executed events

Dispatch needs to report if something has happened, which includes
events executed from the queue as these could have lead to additional
dispatch and queuing.
build: add prefix to libseat options

The option names are a little bit confusing, because it's not clear
which ones toggle libseat features, and which ones toggle seatd

Add a "libseat-" prefix to libseat-specific features, to make it
more obvious that they only are about the library.
bff09d88 — Simeon Schaub a month ago
link with rt

Since seatd uses `clock_gettime`, this is needed when cross-compiling.
This came up in https://github.com/JuliaPackaging/Yggdrasil/pull/3193.
readme: Update discuss section
meson: Support building builtin without seatd

The builtin backend relies on the seatd backend implementation. When
builtin was enabled without seatd, compilation would fail due to the
implementation not being included.

Include the implementation if either seatd or builtin is enabled.
libseat/seatd: downgrade ENOENT log to info

The socket is expected not to be found if seatd is not running.
In general other backends will be attempted after seatd. There is
already an error message in case no backend can be started.
contrib/systemd: Use a different group

"video" was used for convenience in the example, but a dedicated group
is preferable so that a user does not gain the ability to bypass the
seat manager and open devices directly.
build: set pkgconfig/dependency variables for features

This allows libseat users to e.g. advise people to chmod a+s the
executable if libseat is built with the builtin backend.

While bumping the Meson version, adjust the scdoc logic to avoid
the following warnings:

    WARNING: Project targeting '>=0.56.0' but tried to use feature deprecated since '0.56.0': Dependency.get_pkgconfig_variable. use Dependency.get_variable(pkgconfig : ...) instead
    WARNING: Project targeting '>=0.56.0' but tried to use feature deprecated since '0.55.0': ExternalProgram.path. use ExternalProgram.full_path() instead
build: disable logind on -Dauto_features=disabled -Dlogind=auto

Setting auto_features=disabled is supposed to disable all optional
dependencies. Since we aren't using a feature option here, we need
to manually add logic to disable logind in this case.
build: don't allow "auto" for seatd, builtin, server and examples

These features don't have any dependencies, so "auto" doesn't make
build: don't explicitly search for sh

This removes the "Program sh found" line in the build logs, and
should not change anything else.
build: fix logind feature summary when auto-detected

If -Dlogind=auto but systemd/elogind isn't available,
logind_provider would get set to the last item of the foreach loop.
This would incorrectly report "systemd: YES".
build: add explicit logind provider option, auto-detect by default

Allow package maintainers to explicitly select a logind provider
by passing -Dlogind=systemd or -Dlogind=elogind. In case both are
available (e.g. for distributions which support both), this makes
it possible to gte deterministic behavior.

By default, auto-detect the logind provider. That way, users which
have systemd or elogind installed get the backend built by default.
meson: make 'logind' var always available
ci: Use 'auto' for arch linux logind
Avoid a clang-format quirk

clang-format wants to put the terminating NULLs on the same line as the
noop backend when it doens't have any immediate non-NULL neighbors.

Add a newline to stop it.
meson: declare libseat dependency

This can be used by parent projects when seatd is a subproject:

    libseat = dependency('libseat', fallback: ['seatd', 'libseat'])
Add no-op session

This is useful for headless testing, for instance with VKMS:

    modprobe vkms
    export WLR_DRM_DEVICES=/dev/dri/card1
    export WLR_BACKENDS=drm
    export LIBSEAT_BACKEND=noop

We don't need any of the VT handling in this case.