Giter Site home page Giter Site logo

pywlroots's People

Contributors

anriha avatar cooki35 avatar flacjacket avatar graeme22 avatar heuer avatar m-col avatar shinyzenith avatar sydiepus avatar vladislavgrudinin avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

pywlroots's Issues

Tutorial of pywlroots usage, and how to make keyboard/mouse events and get current mouse position as in Xlib

Hello there,

All these days I am struggling by myself to find solutions on pywayland and pywlroots/wlroots that do the same roles when are about do key press/release, mouse press/release and get the current mouse position on the screen. For example, considering Xlib is necessary to generate a display object (Display(os.environ['DISPLAY'])) and this object contains with itself some methods responsible to access screen attributes:

Display(os.environ['DISPLAY']).screen().root.query_pointer._data.coord["root_x"] (To get the x current mouse location) and Display(os.environ['DISPLAY']).screen().root.query_pointer._data.coord["root_y"] (To get the y current mouse location) considering that Display(object) belongs from Xlib.display module.

As well as the fake_input(Display(os.environ['DISPLAY']), X.any_event, button, x=value_x,y_value_y) to make events such as mouse movement, button mouse press/release, and Display(os.environ['DISPLAY']).sync() to refresh the display state, considering that fake_input() belongs from Xlib.ext.xtest module and X from Xlib package.

Where could I see a tutorial from the pywayland and pywlroots usage? I saw https://github.com/flacjacket/pywlroots/blob/main/wlroots/wlr_types/virtual_pointer_v1.py and https://github.com/flacjacket/pywlroots/blob/main/wlroots/wlr_types/virtual_keyboard_v1.py but I have no idea how to use them. I am researching them also.

Automatic generation/sourcing of the C code?

Each time I copy some code from wlroots to ffi_build.py I think, wouldn't it be nice if ffi_build.py could find the code that is accessed at lib.<something> and take it directly from wlroots.

Do you think this is feasible? This could save a lot of work overall, though I'd have no clue where to start.

Unable to create an allocator

When I try to run tiny I get the following error:

DEBUG:wlroots:[render/allocator/allocator.c:98] Trying to create gbm allocator
MESA-LOADER: failed to open iris: /usr/lib64/dri/iris_dri.so: cannot open shared object file: No such file or directory (search paths /usr/lib64/dri, suffix _dri)
failed to load driver: iris
MESA-LOADER: failed to open kms_swrast: /usr/lib64/dri/kms_swrast_dri.so: cannot open shared object file: No such file or directory (search paths /usr/lib64/dri, suffix _dri)
failed to load driver: kms_swrast
MESA-LOADER: failed to open swrast: /usr/lib64/dri/swrast_dri.so: cannot open shared object file: No such file or directory (search paths /usr/lib64/dri, suffix _dri)
failed to load swrast driver
ERROR:wlroots:[render/allocator/gbm.c:198] gbm_create_device failed

When I start a different wlroots-based compositor I get this output:

00:00:00.385 [render/allocator/allocator.c:98] Trying to create gbm allocator
00:00:00.391 [render/allocator/gbm.c:203] Created GBM allocator with backend drm
00:00:00.391 [render/allocator/gbm.c:206] Using DRM node /dev/dri/renderD128

I tired to look through the code to find what pywlroots does differently than the other compositor, but it all looks very similar. Any idea what I am doing wrong? Do I have to re-build the .so files for my system or something? Any help would be appreciated!

  • wlroots: 0.15.1
  • pywlroots: 0.15.24 (installed from pypi)

tinywl: Handle destroy keyboard

The tinywl example is not listening to destroy events of input devices, so the TinywlServer.keyboards list is growing but not shrinking if a keyboard gets destroyed

Roadmap for the project

As I get a little more involved with the project, I'm wondering if another 0.16.x release is planned, or if we should focus on 0.17.x, which will bring some changes anyway.

I would prefer a final release under 0.16.x (maybe addressing #144 and #146 and all previous changes), maybe fixing #134 and #141 might be a useful addition.

But I would probably want to concentrate on wlroots 0.17.x

Do you have any roadmap for this project?

including some libinput boiler plate?

Compositers generally allow for a smalll amount of user configuration of the input devices via libinput. Example settings are tap-to-click, point accelleration etc, see https://wayland.freedesktop.org/libinput/doc/latest/configuration.html

Example usage by a wlroots compositer is to set these options to a device when the device is added via the backend's new input event, e.g.:

    if (wlr_input_device_is_libinput(device)) {
	struct libinput_device *ldev = wlr_libinput_get_device_handle(device);
	if (libinput_device_config_tap_get_finger_count(ldev) > 1) {
	   libinput_device_config_tap_set_enabled(ldev, LIBINPUT_CONFIG_TAP_ENABLED);
	}
    }
    wlr_cursor_attach_input_device(wimp.cursor, device);

Here there are a couple wlroots functions but also functions from libinput. Do you think it would make sense to also include some of these libinput device configuring functions in the lib, perhaps exposed methods to InputDevice?

pywlroots 0.16.6: Strange error, XCursorManager has no method "set_cursor_image"

I got a strange error that the XCursorManager has no attribute "set_cursor_image". So, I got a look:

Python 3.12.2 (main, Feb 15 2024, 06:47:30) [GCC 13.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import wlroots
>>> wlroots.__version__
'0.16.6'
>>> from wlroots.wlr_types.xcursor_manager import XCursorManager
>>> [n for n in dir(XCursorManager) if not n.startswith('__')]
['destroy', 'get_xcursor', 'load']
>>>

I haven't had time to look at it closely yet, the method is available in the source distribution. Maybe a wheel is broken?
I'll get back to you later.

cant install on manjaro with pamac or pip

Attempting to install 0.14.0-1 with pamac
and 0.14.0 with pip.

error log

Preparing...
Cloning pywlroots build files...
Checking pywlroots dependencies...
Resolving dependencies...
Checking inter-conflicts...

Building pywlroots...
==> Making package: pywlroots 0.14.0-1 (Tue 06 Jul 2021 04:22:33 PM EDT)
==> Checking runtime dependencies...
==> Checking buildtime dependencies...
==> Retrieving sources...
-> Found v0.14.0.tar.gz
==> Validating source files with sha256sums...
v0.14.0.tar.gz ... Skipped
==> Removing existing $srcdir/ directory...
==> Extracting sources...
-> Extracting v0.14.0.tar.gz with bsdtar
==> Removing existing $pkgdir/ directory...
==> Starting build()...
running build
running build_py
creating build
creating build/lib.linux-x86_64-3.9
creating build/lib.linux-x86_64-3.9/wlroots
copying wlroots/ffi_build.py -> build/lib.linux-x86_64-3.9/wlroots
copying wlroots/backend.py -> build/lib.linux-x86_64-3.9/wlroots
copying wlroots/renderer.py -> build/lib.linux-x86_64-3.9/wlroots
copying wlroots/init.py -> build/lib.linux-x86_64-3.9/wlroots
copying wlroots/helper.py -> build/lib.linux-x86_64-3.9/wlroots
creating build/lib.linux-x86_64-3.9/wlroots/wlr_types
copying wlroots/wlr_types/xdg_shell.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
copying wlroots/wlr_types/xdg_decoration_v1.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
copying wlroots/wlr_types/xdg_output_v1.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
copying wlroots/wlr_types/matrix.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
copying wlroots/wlr_types/data_control_v1.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
copying wlroots/wlr_types/output_damage.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
copying wlroots/wlr_types/cursor.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
copying wlroots/wlr_types/screencopy_v1.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
copying wlroots/wlr_types/data_device_manager.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
copying wlroots/wlr_types/server_decoration.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
copying wlroots/wlr_types/output_layout.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
copying wlroots/wlr_types/xcursor_manager.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
copying wlroots/wlr_types/box.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
copying wlroots/wlr_types/virtual_keyboard_v1.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
copying wlroots/wlr_types/gamma_control_v1.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
copying wlroots/wlr_types/pointer.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
copying wlroots/wlr_types/compositor.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
copying wlroots/wlr_types/texture.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
copying wlroots/wlr_types/input_device.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
copying wlroots/wlr_types/seat.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
copying wlroots/wlr_types/output_management_v1.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
copying wlroots/wlr_types/surface.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
copying wlroots/wlr_types/keyboard.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
copying wlroots/wlr_types/output.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
copying wlroots/wlr_types/init.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
copying wlroots/wlr_types/layer_shell_v1.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
copying wlroots/wlr_types/primary_selection_v1.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
creating build/lib.linux-x86_64-3.9/wlroots/util
copying wlroots/util/clock.py -> build/lib.linux-x86_64-3.9/wlroots/util
copying wlroots/util/region.py -> build/lib.linux-x86_64-3.9/wlroots/util
copying wlroots/util/edges.py -> build/lib.linux-x86_64-3.9/wlroots/util
copying wlroots/util/init.py -> build/lib.linux-x86_64-3.9/wlroots/util
copying wlroots/util/log.py -> build/lib.linux-x86_64-3.9/wlroots/util
copying wlroots/py.typed -> build/lib.linux-x86_64-3.9/wlroots
running build_ext
generating cffi module 'build/temp.linux-x86_64-3.9/wlroots._ffi.c'
creating build/temp.linux-x86_64-3.9
building 'wlroots._ffi' extension
creating build/temp.linux-x86_64-3.9/build
creating build/temp.linux-x86_64-3.9/build/temp.linux-x86_64-3.9
gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -march=x86-64 -mtune=generic -O3 -pipe -fno-plt -fno-semantic-interposition -march=x86-64 -mtune=generic -O3 -pipe -fno-plt -march=x86-64 -mtune=generic -O3 -pipe -fno-plt -march=x86-64 -mtune=generic -O2 -pipe -fno-plt -fexceptions -Wp,-D_FORTIFY_SOURCE=2,-D_GLIBCXX_ASSERTIONS -Wformat -Werror=format-security -fstack-clash-protection -fcf-protection -fPIC -DWLR_USE_UNSTABLE -I/usr/include/pixman-1 -I/var/tmp/pamac-build-yobleck/pywlroots/src/pywlroots-0.14.0/include -I/usr/include/python3.9 -c build/temp.linux-x86_64-3.9/wlroots._ffi.c -o build/temp.linux-x86_64-3.9/build/temp.linux-x86_64-3.9/wlroots._ffi.o
build/temp.linux-x86_64-3.9/wlroots._ffi.c: In function ‘_cffi_checkfld_struct_wlr_surface’:
build/temp.linux-x86_64-3.9/wlroots._ffi.c:12155:31: error: ‘struct wlr_surface’ has no member named ‘subsurfaces_below’; did you mean ‘subsurfaces’?
12155 | { struct wl_list *tmp = &p->subsurfaces_below; (void)tmp; }
| ^~~~~~~~~~~~~~~~~
| subsurfaces
build/temp.linux-x86_64-3.9/wlroots._ffi.c:12156:31: error: ‘struct wlr_surface’ has no member named ‘subsurfaces_above’; did you mean ‘subsurfaces’?
12156 | { struct wl_list *tmp = &p->subsurfaces_above; (void)tmp; }
| ^~~~~~~~~~~~~~~~~
| subsurfaces
build/temp.linux-x86_64-3.9/wlroots._ffi.c:12157:31: error: ‘struct wlr_surface’ has no member named ‘subsurfaces_pending_below’; did you mean ‘subsurface_pending_list’?
12157 | { struct wl_list *tmp = &p->subsurfaces_pending_below; (void)tmp; }
| ^~~~~~~~~~~~~~~~~~~~~~~~~
| subsurface_pending_list
build/temp.linux-x86_64-3.9/wlroots._ffi.c:12158:31: error: ‘struct wlr_surface’ has no member named ‘subsurfaces_pending_above’; did you mean ‘subsurface_pending_list’?
12158 | { struct wl_list *tmp = &p->subsurfaces_pending_above; (void)tmp; }
| ^~~~~~~~~~~~~~~~~~~~~~~~~
| subsurface_pending_list
In file included from build/temp.linux-x86_64-3.9/wlroots._ffi.c:61:
build/temp.linux-x86_64-3.9/wlroots._ffi.c: At top level:
build/temp.linux-x86_64-3.9/wlroots._ffi.c:13844:55: error: ‘struct wlr_surface’ has no member named ‘subsurfaces_below’; did you mean ‘subsurfaces’?
13844 | { "subsurfaces_below", offsetof(struct wlr_surface, subsurfaces_below),
| ^~~~~~~~~~~~~~~~~
build/temp.linux-x86_64-3.9/wlroots._ffi.c:13845:60: error: ‘struct wlr_surface’ has no member named ‘subsurfaces_below’; did you mean ‘subsurfaces’?
13845 | sizeof(((struct wlr_surface *)0)->subsurfaces_below),
| ^~~~~~~~~~~~~~~~~
| subsurfaces
In file included from build/temp.linux-x86_64-3.9/wlroots._ffi.c:61:
build/temp.linux-x86_64-3.9/wlroots._ffi.c:13847:55: error: ‘struct wlr_surface’ has no member named ‘subsurfaces_above’; did you mean ‘subsurfaces’?
13847 | { "subsurfaces_above", offsetof(struct wlr_surface, subsurfaces_above),
| ^~~~~~~~~~~~~~~~~
build/temp.linux-x86_64-3.9/wlroots._ffi.c:13848:60: error: ‘struct wlr_surface’ has no member named ‘subsurfaces_above’; did you mean ‘subsurfaces’?
13848 | sizeof(((struct wlr_surface *)0)->subsurfaces_above),
| ^~~~~~~~~~~~~~~~~
| subsurfaces
In file included from build/temp.linux-x86_64-3.9/wlroots._ffi.c:61:
build/temp.linux-x86_64-3.9/wlroots._ffi.c:13850:63: error: ‘struct wlr_surface’ has no member named ‘subsurfaces_pending_below’; did you mean ‘subsurface_pending_list’?
13850 | { "subsurfaces_pending_below", offsetof(struct wlr_surface, subsurfaces_pending_below),
| ^~~~~~~~~~~~~~~~~~~~~~~~~
build/temp.linux-x86_64-3.9/wlroots._ffi.c:13851:68: error: ‘struct wlr_surface’ has no member named ‘subsurfaces_pending_below’; did you mean ‘subsurface_pending_list’?
13851 | sizeof(((struct wlr_surface *)0)->subsurfaces_pending_below),
| ^~~~~~~~~~~~~~~~~~~~~~~~~
| subsurface_pending_list
In file included from build/temp.linux-x86_64-3.9/wlroots._ffi.c:61:
build/temp.linux-x86_64-3.9/wlroots._ffi.c:13853:63: error: ‘struct wlr_surface’ has no member named ‘subsurfaces_pending_above’; did you mean ‘subsurface_pending_list’?
13853 | { "subsurfaces_pending_above", offsetof(struct wlr_surface, subsurfaces_pending_above),
| ^~~~~~~~~~~~~~~~~~~~~~~~~
build/temp.linux-x86_64-3.9/wlroots._ffi.c:13854:68: error: ‘struct wlr_surface’ has no member named ‘subsurfaces_pending_above’; did you mean ‘subsurface_pending_list’?
13854 | sizeof(((struct wlr_surface *)0)->subsurfaces_pending_above),
| ^~~~~~~~~~~~~~~~~~~~~~~~~
| subsurface_pending_list
error: command '/sbin/gcc' failed with exit code 1
==> ERROR: A failure occurred in build().
Aborting...

All dependencies are installed and up to date:

python-setuptools-scm 5.0.2-1 community 124.4 kB
wlroots 0.13.0-1 community 993.3 kB
python-xkbcommon 0.3-1 AUR 194.0 kB
pywayland 0.4.4-1 AUR 1.9 MB
python-cffi 1.14.5-1 extra 1.1 MB

inxi -S output:
Kernel: 5.10.42-1-MANJARO x86_64 Desktop: Qtile 0.17.0 Distro: Manjaro Linux

Question: implementing custom protocol on the server side.

I was trying to bind a protocol I am developing but I've never done this in python so all of this is pretty much a guess.

import logging
from typing import Any

# TODO: Figure out why this breaks mypy.
from pywayland.protocol.next_control_v1 import NextControlV1  # ignore: type
from pywayland.protocol_core.globals import Global
from pywayland.protocol_core.resource import Resource
from pywayland.server import Display
from pywayland.server.client import Client

log = logging.getLogger("Next: Control")

class Control(Global):
    def __init__(self, display: Display) -> None:
        self.interface = NextControlV1

        self._callback_info = {"interface": self.interface, "bind_func": self.bind}
        super().__init__(display, 1)

        self.bind_func(self.bind)
        log.info("Created next_control_v1 global")

    def bind(self, client: Client, data: Any = None, version: int=0, id: int=1) -> None:
        NextControlV1.resource_class(client)

    def destroy(self) -> None:
        super().destroy()

this is the gist of what I came up with but the bind function doesn't seem to return a client which tells me I'm implementing the bind func incorrectly, @m-col. Is there any example I can maybe look at?

`wlroots/_build.py` is installed/packaged only if no existing version is installed

try:
return importlib.import_module("wlroots._build").has_xwayland
except ModuleNotFoundError:
pass

This code means that the function won't be executed if wlroots._build can be imported from anywhere, including the previous version installed to the system. So if pywlroots are installed, the following bit won't ever be executed:

with (Path(__file__).parent / "_build.py").open("w") as f:
f.write(f"has_xwayland = {has_xwayland}\n")

and the newly created wheel (or install to --root) won't contain the file. As a result, the Gentoo ebuild produces an install without the file every second run; which in turns breaks building qtile.

Downstream bug report: https://bugs.gentoo.org/919097

Add OutputHeadV1State.apply()

OutputHeadV1State is missing a method to apply the state on an output state.
I guess OutputState has to be implemented as well.

See wlroots 1.6.2 - wlr_output_management_v1.h

/**
 * Apply the head state on the supplied struct wlr_output_state.
 *
 * Compositors can then pass the resulting struct wlr_output_state to
 * wlr_output_commit_state() or wlr_output_test_state().
 *
 * The position needs to be applied manually by the caller.
 */
void wlr_output_head_v1_state_apply(
	const struct wlr_output_head_v1_state *head_state,
	struct wlr_output_state *output_state);

Replace @classmethod with @staticmethod?

Several classes (Renderer, Allocator, …) have a factory function which does not use the passed cls argument at all, they can be decorated with @staticmethod without any difference.

Example:

@classmethod

    @classmethod
    def autocreate(cls, backend: Backend, renderer: Renderer) -> Allocator:
        """Creates the adequate allocator given a backend and a renderer."""
        ret = lib.wlr_allocator_autocreate(backend._ptr, renderer._ptr)
        if not ret:
            raise RuntimeError("Unable to create an allocator.")
        return Allocator(ret)

Documentation

Hey there, I'm interested in playing around with writing a wayland compositor but have very little prior wayland knowledge.

Do you consider these bindings stable enough to do that? If so, how would I go about doing that? Could you post a minimal example of a compositor that just starts and displays "Hello World" or whatever? :)

Importing wlroots.ffi_build from system installation fails

It seems the ffi.verify() call wants write access to neighbouring files, and so importing wlroots.ffi_build raises a PermissionError when a user does not havewrite permissions to /usr/lib. This is the stack trace:

>>> import wlroots.ffi_build
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3.10/site-packages/wlroots/ffi_build.py", line 2408, in <module>
    check_version()
  File "/usr/lib/python3.10/site-packages/wlroots/ffi_build.py", line 44, in check_version
    wlroots_version = load_wlroots_version()
  File "/usr/lib/python3.10/site-packages/wlroots/ffi_build.py", line 36, in load_wlroots_version
    lib = ffi.verify("#include <wlr/version.h>")
  File "/usr/lib/python3.10/site-packages/cffi/api.py", line 468, in verify
    lib = self.verifier.load_library()
  File "/usr/lib/python3.10/site-packages/cffi/verifier.py", line 104, in load_library
    self._write_source()
  File "/usr/lib/python3.10/site-packages/cffi/verifier.py", line 193, in _write_source
    with open(self.sourcefilename, "w") as fp:
PermissionError: [Errno 13] Permission denied: '/usr/lib/python3.10/site-packages/wlroots/__pycache__/_cffi__x58fcf130xd9c61baf.c'

This is coming from the check_version(). Perhaps we can have some kind of flag to disable the check? The use-case here is not building pywlroots per se, but building another CFFI module that depends on it.

How can I print wlroots logging?

wlroots compositors in C by default will print logs to stdout but this doesn't seem to be the case with pywlroots. I'm specifically referring to the logging done internal to wlroots, rather than any calls done by the compositor('s own code) to wlroots.utils.log.logger, which of course does print to stdout. How can I get these logs printed?

Using functions not inside header files

I don't know much about CFFI and don't understand how it works but, Is it possible to use functions not inside header files ?
If yes would such code be merged into the repo ?

I was trying to implement a way to control the state of caps lock and num lock from the compositor, however it seems like how it's done is by calling a function (wlr_keyboard_notify_modifiers) that the compositor is not supposed to use. (from sway)

Package installed from pypi no longer has XWayland parts of `lib` built into package

Installing a fresh pywlroots==0.16 and using wlroots.lib, none of the C structs, enums or functions appended to the CDEF in ffi_build.py conditionally upon if has_xwayland() can be accessed:

>>> wlroots.lib.WLR_XWAYLAND_SURFACE_DECORATIONS_ALL
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: cffi library 'wlroots._ffi' has no function, constant or global variable named 'WLR_XWAYLAND_SURFACE_DECORATIONS_ALL'

I can successfully access non-XWayland things that were added very recently (i.e. the last addition was buffer_iterator_callback which can be accessed), ruling out that it was an older cached lib being used either on my machine or uploaded to pypi.

This wasn't an issue on the last release, so I suspect it was one of the changes in .github, or a change in wlroots.

Documentation and examples

I would like to know where could I find the documentation about the usage of this library as well as some examples about automate mouse and keyboard events. I have tried to import directly the package import pywlroots but I am facing ModuleNotFoundError: No module named 'pywlroots' even with it already installed

Probably incorrect license

Hello,
I noticed that the LICENSE file is University of Illinois/NCSA Open Source License however setup.cfg says license = MIT.
Probably a copy-paste error. Can you please fix whichever of those licenses is not correct?

Proposal. Backend.start should return a boolean value

The Backend.start() method does not only start the backend but checks the result, destroys it in case of an error and raises a RuntimeException in case of an error.

IMO it would be much cleaner if start() returns a boolean and stops itself from cleaning up.

Compositors could easily check the result from Backend.start() and react in their way in case of an error.

I've found more candidates where a boolean or None value would make more sense (Renderer.autocreate(), Renderer.init_display(), Allocator.autocreate()) and pywlroots should not raise a RuntimeException.

If there is a general consensus about reducing the exceptions and replacing them with boolean values or None, I could submit a PR.

Or if there is no general agreement, at least the deviations from wlroots (i.e. calling destory() and a runtime error) should be better documented

ERROR: Failed building wheel for pywlroots

It is of course possible that I'm doing something silly and obvious, but I can't seem to install pywlroots either from PyPI or from this repo. I get:

Collecting pywlroots
  Using cached pywlroots-0.15.11.tar.gz (82 kB)
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Installing backend dependencies ... done
    Preparing wheel metadata ... done
Requirement already satisfied: cffi>=1.12.0 in /usr/local/lib/python3.9/dist-packages (from pywlroots) (1.15.0)
Requirement already satisfied: pywayland>=0.1.1 in /home/jmyles/.local/lib/python3.9/site-packages (from pywlroots) (0.4.11)
Requirement already satisfied: xkbcommon>=0.2 in /home/jmyles/.local/lib/python3.9/site-packages (from pywlroots) (0.4)
Requirement already satisfied: pycparser in /usr/local/lib/python3.9/dist-packages (from cffi>=1.12.0->pywlroots) (2.21)
Building wheels for collected packages: pywlroots
  Building wheel for pywlroots (PEP 517) ... error
  ERROR: Command errored out with exit status 1:
   command: /usr/bin/python3 /tmp/tmpos8hlku4_in_process.py build_wheel /tmp/tmp7gm8xfsr
       cwd: /tmp/pip-install-7anz42ze/pywlroots_61e864eadabb4fc5bf2e9d2b6dd37222
  Complete output (81 lines):
  Installing wlroots v0.15.11 requires wlroots v0.15.x, found v0.12.0
  Built with support for XWayland helpers.
  running bdist_wheel
  running build
  running build_py
  creating build
  creating build/lib.linux-x86_64-3.9
  creating build/lib.linux-x86_64-3.9/wlroots
  copying wlroots/allocator.py -> build/lib.linux-x86_64-3.9/wlroots
  copying wlroots/backend.py -> build/lib.linux-x86_64-3.9/wlroots
  copying wlroots/helper.py -> build/lib.linux-x86_64-3.9/wlroots
  copying wlroots/ffi_build.py -> build/lib.linux-x86_64-3.9/wlroots
  copying wlroots/renderer.py -> build/lib.linux-x86_64-3.9/wlroots
  copying wlroots/version.py -> build/lib.linux-x86_64-3.9/wlroots
  copying wlroots/__init__.py -> build/lib.linux-x86_64-3.9/wlroots
  copying wlroots/xwayland.py -> build/lib.linux-x86_64-3.9/wlroots
  copying wlroots/_build.py -> build/lib.linux-x86_64-3.9/wlroots
  creating build/lib.linux-x86_64-3.9/wlroots/wlr_types
  copying wlroots/wlr_types/surface.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
  copying wlroots/wlr_types/seat.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
  copying wlroots/wlr_types/data_device_manager.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
  copying wlroots/wlr_types/matrix.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
  copying wlroots/wlr_types/cursor.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
  copying wlroots/wlr_types/xdg_shell.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
  copying wlroots/wlr_types/xcursor_manager.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
  copying wlroots/wlr_types/box.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
  copying wlroots/wlr_types/output.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
  copying wlroots/wlr_types/primary_selection_v1.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
  copying wlroots/wlr_types/keyboard.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
  copying wlroots/wlr_types/virtual_keyboard_v1.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
  copying wlroots/wlr_types/data_control_v1.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
  copying wlroots/wlr_types/foreign_toplevel_management_v1.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
  copying wlroots/wlr_types/idle.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
  copying wlroots/wlr_types/output_power_management_v1.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
  copying wlroots/wlr_types/__init__.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
  copying wlroots/wlr_types/relative_pointer_manager_v1.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
  copying wlroots/wlr_types/server_decoration.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
  copying wlroots/wlr_types/texture.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
  copying wlroots/wlr_types/output_management_v1.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
  copying wlroots/wlr_types/scene.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
  copying wlroots/wlr_types/idle_inhibit_v1.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
  copying wlroots/wlr_types/pointer.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
  copying wlroots/wlr_types/output_damage.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
  copying wlroots/wlr_types/screencopy_v1.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
  copying wlroots/wlr_types/xdg_output_v1.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
  copying wlroots/wlr_types/gamma_control_v1.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
  copying wlroots/wlr_types/input_inhibit.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
  copying wlroots/wlr_types/input_device.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
  copying wlroots/wlr_types/compositor.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
  copying wlroots/wlr_types/touch.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
  copying wlroots/wlr_types/xdg_decoration_v1.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
  copying wlroots/wlr_types/pointer_constraints_v1.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
  copying wlroots/wlr_types/output_layout.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
  copying wlroots/wlr_types/layer_shell_v1.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
  creating build/lib.linux-x86_64-3.9/wlroots/util
  copying wlroots/util/box.py -> build/lib.linux-x86_64-3.9/wlroots/util
  copying wlroots/util/log.py -> build/lib.linux-x86_64-3.9/wlroots/util
  copying wlroots/util/edges.py -> build/lib.linux-x86_64-3.9/wlroots/util
  copying wlroots/util/__init__.py -> build/lib.linux-x86_64-3.9/wlroots/util
  copying wlroots/util/region.py -> build/lib.linux-x86_64-3.9/wlroots/util
  copying wlroots/util/clock.py -> build/lib.linux-x86_64-3.9/wlroots/util
  copying wlroots/py.typed -> build/lib.linux-x86_64-3.9/wlroots
  creating build/lib.linux-x86_64-3.9/wlroots/include
  copying wlroots/include/xdg-shell-protocol.h -> build/lib.linux-x86_64-3.9/wlroots/include
  copying wlroots/include/pointer-constraints-unstable-v1-protocol.h -> build/lib.linux-x86_64-3.9/wlroots/include
  copying wlroots/include/idle-inhibit-unstable-v1-protocol.h -> build/lib.linux-x86_64-3.9/wlroots/include
  copying wlroots/include/idle-protocol.h -> build/lib.linux-x86_64-3.9/wlroots/include
  copying wlroots/include/wlr-layer-shell-unstable-v1-protocol.h -> build/lib.linux-x86_64-3.9/wlroots/include
  copying wlroots/include/wlr-output-power-management-unstable-v1-protocol.h -> build/lib.linux-x86_64-3.9/wlroots/include
  running build_ext
  generating cffi module 'build/temp.linux-x86_64-3.9/wlroots._ffi.c'
  creating build/temp.linux-x86_64-3.9
  building 'wlroots._ffi' extension
  creating build/temp.linux-x86_64-3.9/build
  creating build/temp.linux-x86_64-3.9/build/temp.linux-x86_64-3.9
  x86_64-linux-gnu-gcc -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -fPIC -DWLR_USE_UNSTABLE -I/usr/include/pixman-1 -I/tmp/pip-install-7anz42ze/pywlroots_61e864eadabb4fc5bf2e9d2b6dd37222/wlroots/include -I/usr/include/python3.9 -c build/temp.linux-x86_64-3.9/wlroots._ffi.c -o build/temp.linux-x86_64-3.9/build/temp.linux-x86_64-3.9/wlroots._ffi.o
  build/temp.linux-x86_64-3.9/wlroots._ffi.c:573:10: fatal error: wlr/render/allocator.h: No such file or directory
    573 | #include <wlr/render/allocator.h>
        |          ^~~~~~~~~~~~~~~~~~~~~~~~
  compilation terminated.
  error: command '/usr/bin/x86_64-linux-gnu-gcc' failed with exit code 1
  ----------------------------------------
  ERROR: Failed building wheel for pywlroots
Failed to build pywlroots
ERROR: Could not build wheels for pywlroots which use PEP 517 and cannot be installed directly

Get title from XdgTopLevel

Hello, I am trying to read the titles of XdgSurfaces stored in their toplevels, but I am having issues with reading from the char pointer. The issue seems to be with the datatype that I get when I try to reference it.

I have tried using something like this
xdgSurface.toplevel._ptr.title to read the data, when I print it it says that it is a cdata char * type however, when I check its type using the type() function or any of the cffi methods for converting pointers to strings, I see that it is of type _cffi_backend._CDataBase. looking this up in the CFFI documentation hasn't turned up much useful information regarding how to turn that into a char* or a python string and I was wondering I you had any insight on how to get the data that this pointer is pointing to

I should also note that ffi.addressof() doesn't work for getting the location of the data because it is not a struct or union

thanks

Another `ffi.verify` permissions error when importing `wlroots.ffi_build`

This is the stack trace this time:

Traceback (most recent call last):
  File "/home/user/git/qtile-git/src/qtile/setup.py", line 105, in <module>
    cffi_modules=get_cffi_modules(),
  File "/home/user/git/qtile-git/src/qtile/setup.py", line 89, in get_cffi_modules
    import wlroots.ffi_build
  File "/usr/lib/python3.10/site-packages/wlroots/ffi_build.py", line 2419, in <module>
    if has_xwayland():
  File "/usr/lib/python3.10/site-packages/wlroots/ffi_build.py", line 68, in has_xwayland
    FFI().verify(
  File "/usr/lib/python3.10/site-packages/cffi/api.py", line 468, in verify
    lib = self.verifier.load_library()
  File "/usr/lib/python3.10/site-packages/cffi/verifier.py", line 104, in load_library
    self._write_source()
  File "/usr/lib/python3.10/site-packages/cffi/verifier.py", line 193, in _write_source
    with open(self.sourcefilename, "w") as fp:
PermissionError: [Errno 13] Permission denied: '/usr/lib/python3.10/site-packages/wlroots/__pycache__/_cffi__x7e26aea1x8197481a.c'

This is specifically triggered by the has_xwayland function.

I'll try to find an equivalent approach, but I'm also wondering if we could save the results of has_xwayland and also check_version at build-time into a file that gets packaged alongside the code. Then we get the functionality without the ffi.verify needed after installation. What do you think?

question: wlr_cursor button events are not sent to toplevel?

Hi! I'm kind of puzzled by an issue that I'm facing, I apologize if this has nothing to do with pywlroots. If there's a better place where I can ask such questions, please do redirect me.

I'm current writing a compositor and I copied a lot from tinywl to get to a somewhat usable state and that includes the cursor setup.

I created a Cursor (self.cursor) object in my server class and attached the button event to it.
The event triggers as per my logs without any errors.
However my focused toplevel doesn't get any click events? I have checked and made sure that the surface has focus (surface.set_activated(True), seat.keyboard_notify_enter(....))

wlroots interface out of date?

Upon trying to run the tiny wm:

Traceback (most recent call last):
  File "/usr/lib/python3.9/runpy.py", line 197, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "/usr/lib/python3.9/runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "/home/user/builds/pywlroots/tiny/__main__.py", line 15, in <module>
    from wlroots.backend import Backend
  File "/home/user/builds/pywlroots/wlroots/backend.py", line 9, in <module>
    from wlroots.wlr_types.input_device import InputDevice
  File "/home/user/builds/pywlroots/wlroots/wlr_types/__init__.py", line 5, in <module>
    from .cursor import Cursor  # noqa: F401
  File "/home/user/builds/pywlroots/wlroots/wlr_types/cursor.py", line 9, in <module>
    from .input_device import InputDevice, InputDeviceType
  File "/home/user/builds/pywlroots/wlroots/wlr_types/input_device.py", line 6, in <module>
    from .keyboard import Keyboard
  File "/home/user/builds/pywlroots/wlroots/wlr_types/keyboard.py", line 33, in <module>
    class KeyState(enum.IntEnum):
  File "/home/user/builds/pywlroots/wlroots/wlr_types/keyboard.py", line 34, in KeyState
    KEY_RELEASED = lib.WLR_KEY_RELEASED
AttributeError: cffi library 'wlroots._ffi' has no function, constant or global variable named 'WLR_KEY_RELEASED'

Implemented protocols

Not an issue but would you consider adding a section or anything to keep track of the implemented protocols ?
And what about a section with links to other projects that uses pywlroots ?

Running the `tiny` example doesn't work if you installed pywlroots with pip

Reproduce:

  1. python3 -m venv wlroots
  2. cd wlroots
  3. source bin/activate
  4. pip3 install pywlroots
  5. git clone https://github.com/flacjacket/pywlroots
  6. cd pywlroots
  7. python3 -m tiny

Result:

(wlroots) al@al-desktop:~/wlroots/pywlroots$ python3 -m tiny
Traceback (most recent call last):
  File "<frozen runpy>", line 198, in _run_module_as_main
  File "<frozen runpy>", line 88, in _run_code
  File "/home/al/wlroots/pywlroots/tiny/__main__.py", line 13, in <module>
    from wlroots.helper import build_compositor
  File "/home/al/wlroots/pywlroots/wlroots/__init__.py", line 8, in <module>
    from ._ffi import ffi, lib
ModuleNotFoundError: No module named 'wlroots._ffi'

This happens because there is a wlroots module right next to tiny in the repository, so that one will be imported instead of the one installed by pip. But that one hasn't been built, so it does not work.

Workaround:

Move tiny somewhere else.

Property Seat.has_grab mirrors Seat.keyboard_has_grab()

Both deliver the same result. In my opinion, the property Seat.has_grab should be removed because the name is not clear: Seat provides keyboard_has_grab, pointer_has_grab, and touch_has_grab, so it is unclear which of the aforementioned states is meant by Seat.has_grab.

wlroots 0.15.0

There are some breaking changes for the next wlroots release, and more may be added between now and when it is released. I'm going through their changes listed here and checking to see if we need to do something about them. This may need updating as they add more changes - current version is from 25th August.

Changes for packagers

  • backend: make DRM and libinput backends optional (#3058): the x11-backend build option has been superseded by the backends option.

Doesn't affect us.

Breaking changes for compositors

These changes can affect most compositors.

  • Nuke wlr_list (#3002): wlr/types/wlr_list.h has been removed. wlr_tablet.paths and wlr_tablet_pad.paths are now wl_array instead of wlr_list.

Doesn't affect us.

  • Stabilize wlr_box API (#3011)
    • wlr_box_from_pixman_box32 and wlr_box_rotated_bounds have been removed.
    • wlr/types/wlr_box.h has been moved to wlr/util/box.h (a redirection with a warning is still in place).
    • Unnecessary wlr_box.h includes have been replaced with forward declarations in public wlroots headers.

Just need to move box.py #50 and remove wlr_box_rotated_bounds #51

  • backend/drm: preserve mode order from kernel (#3078): the order of wlr_output.modes has been reversed for the DRM backend to match the kernel's ordering. Compositors are advised to use wlr_output_preferred_mode instead of relying on mode order.

This doesn't affect pywlroots directly but may affect any compositors that use it.

  • layer-shell: replace close() with destroy() (#3108): replace wlr_layer_surface_v1_close calls with wlr_layer_surface_v1_destroy and ensure the wlr_layer_surface_v1 isn't used after that call.

Needs some changes. #51

Breaking changes for custom backends and renderers

These changes are unlikely to affect compositors that don't have a custom
backend or renderer.

  • render/egl: make most functions private (#2985)

Doesn't affect us.

  • surface: make wlr_subsurface_create private (#2993)

Just need to remove the signature from ffi_build.py #51

  • render: drop wlr_renderer_impl.texture_from_{pixels,dmabuf} (#2997)
  • Remove wlr_resource_get_buffer_size (#3023)
    • wlr_resource_get_buffer_size has been removed.
    • wlr_client_buffer_import has been split into two functions: wlr_buffer_from_resource and wlr_client_buffer_create.
  • buffer: drop wlr_client_buffer.resource (#3039)
  • output: add generic wlr_output_export_dmabuf implementation (#2955): wlr_output_impl.export_dmabuf has been dropped.

None of these affect us.

  • render: drop wlr_renderer_impl.init_wl_display (#3062)

This needs some changes to Renderer and ffi_build.py.

  • Drop legacy output APIs (#3044): wlr_output_impl.{attach,rollback}_render and wlr_output_state.buffer_type have been removed.

Replace pending_buffer_type with pending_attach_render #51

Of course, we'll need to keep this up to date as they add more changes. Once 0.15 upstream is released we can cross reference this with their changelog and then release with our breaking changes from #51.

Documentation.

Hi! would you consider generating some documentation from the preexisting comments?

pip install pywlroots error

I can't update or reinstall pywlroots15 via pip, give me this error

Collecting pywlroots
Using cached pywlroots-0.15.3.tar.gz (74 kB)
Installing build dependencies ... done
Getting requirements to build wheel ... done
Installing backend dependencies ... done
Preparing metadata (pyproject.toml) ... done
Requirement already satisfied: xkbcommon>=0.2 in /usr/local/lib/python3.9/dist-packages (from pywlroots) (0.4)
Requirement already satisfied: cffi>=1.12.0 in /usr/lib/python3/dist-packages (from pywlroots) (1.15.0)
Requirement already satisfied: pywayland>=0.1.1 in /usr/local/lib/python3.9/dist-packages (from pywlroots) (0.4.9)
Building wheels for collected packages: pywlroots
Building wheel for pywlroots (pyproject.toml) ... error
ERROR: Command errored out with exit status 1:
command: /usr/bin/python3 /usr/local/lib/python3.9/dist-packages/pip/_vendor/pep517/in_process/_in_process.py build_wheel /tmp/tmp93tycsgu
cwd: /tmp/pip-install-ls8mqm9r/pywlroots_36d18fc289134d1bb48aec0e2dce1522
Complete output (68 lines):
Installing wlroots v0.15.3 requires wlroots v0.15.x, found v0.14.1
Built with support for XWayland helpers.
running bdist_wheel
running build
running build_py
creating build
creating build/lib.linux-x86_64-3.9
creating build/lib.linux-x86_64-3.9/wlroots
copying wlroots/xwayland.py -> build/lib.linux-x86_64-3.9/wlroots
copying wlroots/version.py -> build/lib.linux-x86_64-3.9/wlroots
copying wlroots/renderer.py -> build/lib.linux-x86_64-3.9/wlroots
copying wlroots/helper.py -> build/lib.linux-x86_64-3.9/wlroots
copying wlroots/ffi_build.py -> build/lib.linux-x86_64-3.9/wlroots
copying wlroots/backend.py -> build/lib.linux-x86_64-3.9/wlroots
copying wlroots/allocator.py -> build/lib.linux-x86_64-3.9/wlroots
copying wlroots/init.py -> build/lib.linux-x86_64-3.9/wlroots
creating build/lib.linux-x86_64-3.9/wlroots/wlr_types
copying wlroots/wlr_types/xdg_shell.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
copying wlroots/wlr_types/xdg_output_v1.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
copying wlroots/wlr_types/xdg_decoration_v1.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
copying wlroots/wlr_types/xcursor_manager.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
copying wlroots/wlr_types/virtual_keyboard_v1.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
copying wlroots/wlr_types/touch.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
copying wlroots/wlr_types/texture.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
copying wlroots/wlr_types/surface.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
copying wlroots/wlr_types/server_decoration.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
copying wlroots/wlr_types/seat.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
copying wlroots/wlr_types/screencopy_v1.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
copying wlroots/wlr_types/scene.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
copying wlroots/wlr_types/relative_pointer_manager_v1.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
copying wlroots/wlr_types/primary_selection_v1.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
copying wlroots/wlr_types/pointer_constraints_v1.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
copying wlroots/wlr_types/pointer.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
copying wlroots/wlr_types/output_management_v1.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
copying wlroots/wlr_types/output_layout.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
copying wlroots/wlr_types/output_damage.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
copying wlroots/wlr_types/output.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
copying wlroots/wlr_types/matrix.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
copying wlroots/wlr_types/layer_shell_v1.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
copying wlroots/wlr_types/keyboard.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
copying wlroots/wlr_types/input_inhibit.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
copying wlroots/wlr_types/input_device.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
copying wlroots/wlr_types/gamma_control_v1.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
copying wlroots/wlr_types/foreign_toplevel_management_v1.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
copying wlroots/wlr_types/data_device_manager.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
copying wlroots/wlr_types/data_control_v1.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
copying wlroots/wlr_types/cursor.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
copying wlroots/wlr_types/compositor.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
copying wlroots/wlr_types/box.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
copying wlroots/wlr_types/init.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
creating build/lib.linux-x86_64-3.9/wlroots/util
copying wlroots/util/region.py -> build/lib.linux-x86_64-3.9/wlroots/util
copying wlroots/util/log.py -> build/lib.linux-x86_64-3.9/wlroots/util
copying wlroots/util/edges.py -> build/lib.linux-x86_64-3.9/wlroots/util
copying wlroots/util/clock.py -> build/lib.linux-x86_64-3.9/wlroots/util
copying wlroots/util/box.py -> build/lib.linux-x86_64-3.9/wlroots/util
copying wlroots/util/init.py -> build/lib.linux-x86_64-3.9/wlroots/util
copying wlroots/py.typed -> build/lib.linux-x86_64-3.9/wlroots
running build_ext
creating build/temp.linux-x86_64-3.9
creating build/temp.linux-x86_64-3.9/build
creating build/temp.linux-x86_64-3.9/build/temp.linux-x86_64-3.9
x86_64-linux-gnu-gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -fPIC -DWLR_USE_UNSTABLE -I/usr/include/pixman-1 -I/tmp/pip-install-ls8mqm9r/pywlroots_36d18fc289134d1bb48aec0e2dce1522/include -I/usr/include/python3.9 -c build/temp.linux-x86_64-3.9/wlroots._ffi.c -o build/temp.linux-x86_64-3.9/build/temp.linux-x86_64-3.9/wlroots._ffi.o
build/temp.linux-x86_64-3.9/wlroots._ffi.c:573:10: fatal error: wlr/render/allocator.h: No existe el fichero o el directorio
573 | #include <wlr/render/allocator.h>
compilation terminated.
error: command '/usr/bin/x86_64-linux-gnu-gcc' failed with exit code 1
ERROR: Failed building wheel for pywlroots
Failed to build pywlroots
ERROR: Could not build wheels for pywlroots, which is required to install pyproject.toml-based projects

ImportError on relative import within tinywl

I'm just playing around with tinywl and running python tinywl or python tinywl/__main__.py gives this error:

Traceback (most recent call last):
  File "/usr/lib/python3.9/runpy.py", line 197, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "/usr/lib/python3.9/runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "/home/mcol/git/pywlroots/tiny/__main__.py", line 23, in <module>
    from .server import TinywlServer
ImportError: attempted relative import with no known parent package

Changing that last import line to from tiny.server import TinywlServer fixes it though.

Not sure I get why this is the case though, unless relative imports don't work in files named __main__.py?

Output.commit(): Return boolean?

Is there a reason why the Output.commit() method is implemented this way:

    def commit(self) -> None:
        """Commit the pending output state

        If `.attach_render` has been called, the pending frame will be
        submitted for display.
        """
        if not lib.wlr_output_test(self._ptr):
            self.rollback()
            raise RuntimeError("Rendering on output failed")
        if not lib.wlr_output_commit(self._ptr):
            raise RuntimeError("Unable to commit output")

Shouldn't the following be sufficient:

    def commit(self) -> bool:
        """Commit the pending output state

        If `.attach_render` has been called, the pending frame will be
        submitted for display.
        """
        return lib.wlr_output_commit(self._ptr)

See the wlroot docs for the commit function:

/**
 * Commit the pending output state. If wlr_output_attach_render() has been
 * called, the pending frame will be submitted for display and a `frame` event
 * will be scheduled.
 *
 * On failure, the pending changes are rolled back.
 */
bool wlr_output_commit(struct wlr_output *output);

Tests missing in pypi sdist tarball

Hi! I'm currently starting to package python-pywlroots on Arch Linux for qtile.
We usually run tests against the build to ensure compatibility with the rest of the system. Especially when building wrappers for C libraries this is very important to detect problems as early as possible (upon rebuild).

It would be really great, if you could include the tests directory in the sdist tarball! :)

pywlroots 0.15.24: Keyboard.set_keymap causes segmentation fault

I know, wlroots 0.15 is old, but systems like Debian still ship with the old version and projects like Qtile rely on the pywlroots 0.15.x.

Code to reproduce the problem: python -m tiny

tiny won't show up but deliver a segmentation fault.

Change the line in https://github.com/flacjacket/pywlroots/blob/v0.15.x/tiny/server.py#L355 to

print('before set_keymap')
keyboard.set_keymap(keymap)
print('after set_keymap')

And you'll see that "after set_keymap" is never printed.

I haven't tested pywlroots versions < 0.15.24

Tracking wlroots releases

How do you manage compatibility with wlroots releases? Currently pywlroots only supports wlroots 0.12.0, whereas wlroots is currently on 0.13.0 (only recently). Between releases they track breaking changes in an issue such as this for 0.14.0: swaywm/wlroots#2844. Do you aim to exclusively support the current release or maintain some kind of backwards compatibility?

Error while installing pywlwroots

I encountered this error while installing wlroots on python 3.9:

2021-11-16T16:36:10,958 User install by explicit request
2021-11-16T16:36:11,333 Created temporary directory: /tmp/pip-ephem-wheel-cache-el7f27gz
2021-11-16T16:36:11,334 Created temporary directory: /tmp/pip-req-tracker-1zz9nw25
2021-11-16T16:36:11,334 Initialized build tracking at /tmp/pip-req-tracker-1zz9nw25
2021-11-16T16:36:11,334 Created build tracker: /tmp/pip-req-tracker-1zz9nw25
2021-11-16T16:36:11,335 Entered build tracker: /tmp/pip-req-tracker-1zz9nw25
2021-11-16T16:36:11,335 Created temporary directory: /tmp/pip-install-b3cqmuw9
2021-11-16T16:36:11,397 1 location(s) to search for versions of pywlroots:
2021-11-16T16:36:11,397 * https://pypi.org/simple/pywlroots/
2021-11-16T16:36:11,397 Fetching project page and analyzing links: https://pypi.org/simple/pywlroots/
2021-11-16T16:36:11,398 Getting page https://pypi.org/simple/pywlroots/
2021-11-16T16:36:11,399 Found index url https://pypi.org/simple
2021-11-16T16:36:11,401 Getting credentials from keyring for https://pypi.org/simple
2021-11-16T16:36:11,466 Getting credentials from keyring for pypi.org
2021-11-16T16:36:11,487 Looking up "https://pypi.org/simple/pywlroots/" in the cache
2021-11-16T16:36:11,487 Request header has "max_age" as 0, cache bypassed
2021-11-16T16:36:11,491 Starting new HTTPS connection (1): pypi.org:443
2021-11-16T16:36:11,685 https://pypi.org:443 "GET /simple/pywlroots/ HTTP/1.1" 304 0
2021-11-16T16:36:11,862   Found link https://files.pythonhosted.org/packages/8d/b6/cd25ed589a9fa8d43572993dba99e0b072bd4488999731edc87c8600d622/pywlroots-0.1.0.tar.gz#sha256=58c4f1fac10ee78b02d2f920337cae85adc3bccdda3bd1172f9b94ae0f343df9 (from https://pypi.org/simple/pywlroots/), version: 0.1.0
2021-11-16T16:36:11,862   Found link https://files.pythonhosted.org/packages/64/2b/ae84eb1465ef8490165f39dba2af581e2c9905422f16e7d739e64eb02052/pywlroots-0.1.1.tar.gz#sha256=36a085e7f3a569feeb61bdb5afaeee021bf878aa509b3af7f837f2b98d894ba1 (from https://pypi.org/simple/pywlroots/), version: 0.1.1
2021-11-16T16:36:11,863   Found link https://files.pythonhosted.org/packages/ff/65/0c5ceeeb295a4df4a2b9e6e1343940f8f79df330b07a75d51b01999181c5/pywlroots-0.1.2.tar.gz#sha256=1dadfe3e34416f97d496b7a1bba2e49d7abe362f84890c78958b0d7c78bb3364 (from https://pypi.org/simple/pywlroots/), version: 0.1.2
2021-11-16T16:36:11,863   Found link https://files.pythonhosted.org/packages/1d/e2/f59e4e101755b504f6a4f1ac130db6f60ee835a8d905c7018ba40dae6eaa/pywlroots-0.1.3.tar.gz#sha256=2369dd43f82bb28f75548e71b55564bf11f3b06d5d1072c54cb7758c4a630352 (from https://pypi.org/simple/pywlroots/), version: 0.1.3
2021-11-16T16:36:11,863   Found link https://files.pythonhosted.org/packages/ed/05/8214cfd08b351b7e88135ccd210635f9f242a08866b43fde578fd0100929/pywlroots-0.2.0.tar.gz#sha256=393422c817b74ba7bb30d313898a7655e09e623108608562776336f2018979f8 (from https://pypi.org/simple/pywlroots/), version: 0.2.0
2021-11-16T16:36:11,864   Found link https://files.pythonhosted.org/packages/93/f0/6a0d190b568a8be05e0883c3ca4c1286142268cb3467d9ee7cab74400d97/pywlroots-0.2.1.tar.gz#sha256=2907b3500e92766d14bf0fd33b8e9b0aa874927a3958cc370ba2b6207bd68dc8 (from https://pypi.org/simple/pywlroots/), version: 0.2.1
2021-11-16T16:36:11,864   Found link https://files.pythonhosted.org/packages/53/bc/03c3a9aca3ce0f97218e55de45b9a7405c727c7a5fdfa7a00ccde0143610/pywlroots-0.2.2.tar.gz#sha256=39dc0bd30c161638052b0f12729886bfe765dadac647b94e4afe16aeff4e406f (from https://pypi.org/simple/pywlroots/), version: 0.2.2
2021-11-16T16:36:11,864   Found link https://files.pythonhosted.org/packages/89/07/4a6253cfece2bdf1f4944b5f12dc66478c8ab3a7dad30fb5c012edcbe326/pywlroots-0.2.3.tar.gz#sha256=891510c7229bbed2b197c48c1ee826d81f40ff1a04bb05bdf4e9aeb1d5fdc666 (from https://pypi.org/simple/pywlroots/), version: 0.2.3
2021-11-16T16:36:11,865   Found link https://files.pythonhosted.org/packages/2e/0a/871147835f237c4b4da64599793b7545f3208daa82b3261d8ee173d49e2f/pywlroots-0.2.4.tar.gz#sha256=25830c49444452cd572b7f09d8a3135d3868b532a768536af77e70b973b91bcb (from https://pypi.org/simple/pywlroots/), version: 0.2.4
2021-11-16T16:36:11,865   Found link https://files.pythonhosted.org/packages/47/67/069a2d78a1f91a8c8d2050d41741e81c9969e6fb6049c13e8d59080a0cb7/pywlroots-0.2.5.tar.gz#sha256=296225758d03c1309252c7f55e08183f4cad2516a7fd25813b6a041b37f067cb (from https://pypi.org/simple/pywlroots/), version: 0.2.5
2021-11-16T16:36:11,865   Found link https://files.pythonhosted.org/packages/02/59/a00b964d7138b72c36192f5ec9aebe8157522d160d566e3044ae7ef39e86/pywlroots-0.2.6.tar.gz#sha256=a77f5d5624a06c2770c5f3cac07a3cf83f5cfe3cccb445d313d090f28fc2abc0 (from https://pypi.org/simple/pywlroots/), version: 0.2.6
2021-11-16T16:36:11,866   Found link https://files.pythonhosted.org/packages/c1/25/ade16388f44e1ba98ab0c564afea93cade51a68f2e34cd07aac08adb241c/pywlroots-0.2.7.tar.gz#sha256=ad0233088c5860728fb35a04d2b9bfdb12ed8894a6e0a8b8c853ce5549054193 (from https://pypi.org/simple/pywlroots/), version: 0.2.7
2021-11-16T16:36:11,866   Found link https://files.pythonhosted.org/packages/04/2c/2b8e1598804aa4ec0236ed5f3d40015f6ec0a85212d8b0bd36ae7728b017/pywlroots-0.2.8.tar.gz#sha256=e9dc58f0600d830c3a50cd851a19f6a0a6301a941f3d6b65baf4087eb2980b51 (from https://pypi.org/simple/pywlroots/), version: 0.2.8
2021-11-16T16:36:11,866   Found link https://files.pythonhosted.org/packages/ed/3b/374aff31c2aaf618ea34e82553e535a849c409d10bc7b6a61a595cad01f6/pywlroots-0.2.9.tar.gz#sha256=419b0ae4085793f5df9c5d07e30eabe2f38253a49ced482274c3d4db373c7173 (from https://pypi.org/simple/pywlroots/), version: 0.2.9
2021-11-16T16:36:11,867   Found link https://files.pythonhosted.org/packages/b6/c0/be81e74119afbef304eb4a0f82a200498519b86c4c5f0c9fa1ae93969715/pywlroots-0.13.0.tar.gz#sha256=8adad3d2ca17fe3464d0afc9ac81695bddc1af213b2205586d949f58311767b3 (from https://pypi.org/simple/pywlroots/), version: 0.13.0
2021-11-16T16:36:11,867   Found link https://files.pythonhosted.org/packages/cd/00/5191ca13b15178aca295b6e8061579232676f0d9b0c6503df25d4ef4a269/pywlroots-0.13.1.tar.gz#sha256=c62818d1cc609a53b737c074af61b93e83ba63e904ca594e0716729b58e11ec0 (from https://pypi.org/simple/pywlroots/), version: 0.13.1
2021-11-16T16:36:11,867   Found link https://files.pythonhosted.org/packages/e0/b1/505226b495cdf8b353f1a6a95f2035c5d74eb903b762f2ad17ea8404ca6e/pywlroots-0.13.2.tar.gz#sha256=eb62a278957b330623369a0a191207dbca33f20c1d1486328f9c4a80e5708917 (from https://pypi.org/simple/pywlroots/), version: 0.13.2
2021-11-16T16:36:11,868   Found link https://files.pythonhosted.org/packages/a8/7f/59423497c9f826b694bf76a1498fbaf98aef21b4ec12834c7b1ce01dc378/pywlroots-0.13.3.tar.gz#sha256=a8b28d0528016aa4876976367def082798bc6d4ca2b3b0a9a38d0faf3de6d670 (from https://pypi.org/simple/pywlroots/), version: 0.13.3
2021-11-16T16:36:11,868   Found link https://files.pythonhosted.org/packages/c2/08/871bc980601c4f2fd3ac7aac3d835b68d0eb1bb55d2eecaf30d293df602c/pywlroots-0.13.4.tar.gz#sha256=91e0e1cd9d188be65badb4ee169863c7d926acb60cc13d2db51659b336ddef09 (from https://pypi.org/simple/pywlroots/), version: 0.13.4
2021-11-16T16:36:11,868   Found link https://files.pythonhosted.org/packages/ec/79/a35cbcf8dcfb60569d8646cc1fcbb3c77b77b5cdf311ed2b237fb4a23127/pywlroots-0.13.5.tar.gz#sha256=cc037635948b97abe82a2497b1fd170a1c2c9d90a7d492625ef7ef5d930017a7 (from https://pypi.org/simple/pywlroots/), version: 0.13.5
2021-11-16T16:36:11,869   Found link https://files.pythonhosted.org/packages/76/14/1ff1121a518a08f96c464f5d55ed4d56dd1a188b16a0b02d43d9429de4c2/pywlroots-0.13.6.tar.gz#sha256=472b0794ec4dd1447abfde85261011bac5eea12bf31f9c54ed004cafc61770dc (from https://pypi.org/simple/pywlroots/), version: 0.13.6
2021-11-16T16:36:11,869   Found link https://files.pythonhosted.org/packages/84/64/92c26f2b2cc4a582c7df3fe65f081e0c57a31330319cb33cb89ff7e849d4/pywlroots-0.14.0.tar.gz#sha256=525970ca05131a1685076912a5203ed3ce4ff787aed0ec2859a29a8adb06b782 (from https://pypi.org/simple/pywlroots/), version: 0.14.0
2021-11-16T16:36:11,869   Found link https://files.pythonhosted.org/packages/93/66/c68146a15973cadf028fc83e6dabfa3707496d439afc1182bc02824ff1b7/pywlroots-0.14.1.tar.gz#sha256=d20b8d80a8ffa74a1ab989c3d91da8725b6f80c0a3f55891d9884b981d7f6cf3 (from https://pypi.org/simple/pywlroots/), version: 0.14.1
2021-11-16T16:36:11,870   Found link https://files.pythonhosted.org/packages/4f/5d/ef2cb43d081d9acfecc5b8d945b98fe3ff427c754de38b0062c6b65fb67d/pywlroots-0.14.2.tar.gz#sha256=4d9aab03e68d10e34c51885aab99c767a16034e7626ce995ab7802f6a430ce88 (from https://pypi.org/simple/pywlroots/), version: 0.14.2
2021-11-16T16:36:11,870   Found link https://files.pythonhosted.org/packages/39/8a/eb84bec5b33d10b8785c7f0421ebe0d3e2853e022d8513b57bd7bbf6e4ab/pywlroots-0.14.3.tar.gz#sha256=41ff1cdb97414fca40a7089c1ce45cbfee80656da03e48d1526c847776647c64 (from https://pypi.org/simple/pywlroots/), version: 0.14.3
2021-11-16T16:36:11,870   Found link https://files.pythonhosted.org/packages/a5/13/c5de6d581820f17c04d4cf141ab0a1992cd44cfb2e0e638ed3c013cd7bcf/pywlroots-0.14.4.tar.gz#sha256=c678bd54972d02cb6d437d4992f481c435ba8d873850ea553a0bec2e5565853a (from https://pypi.org/simple/pywlroots/), version: 0.14.4
2021-11-16T16:36:11,871   Found link https://files.pythonhosted.org/packages/41/61/73cadef03a5ce16d38ac7cc97ce74143de614a125ca12f00dba43af83da4/pywlroots-0.14.5.tar.gz#sha256=414eb5a7f9f9364ad749dbe1fa65986646cdcf3d0f26751df97cbda60cec4bf9 (from https://pypi.org/simple/pywlroots/), version: 0.14.5
2021-11-16T16:36:11,871   Found link https://files.pythonhosted.org/packages/3c/7a/81f61258e67dde4fe4ad8a1eb2a47775d9fe9358111b675871ed4dd91043/pywlroots-0.14.6.tar.gz#sha256=84bb5d1db666cab56074a72261cae2ee373c78d05b2d31ba6d2c364742030fa7 (from https://pypi.org/simple/pywlroots/), version: 0.14.6
2021-11-16T16:36:11,871   Found link https://files.pythonhosted.org/packages/69/39/ebbaf96930ee937a1022348412602a6695b169b62bc86aebf206f4fa9d1e/pywlroots-0.14.7.tar.gz#sha256=f3ecfbb670bae9d776dff042f46641edb6877571ee55a59b40af7cd7db729035 (from https://pypi.org/simple/pywlroots/), version: 0.14.7
2021-11-16T16:36:11,872   Found link https://files.pythonhosted.org/packages/9e/03/410df1bd9ae4423437f1de355f459b3d8c67e8c024c56d552058e9188c9e/pywlroots-0.14.8.tar.gz#sha256=bc25603b6eb2bf8c09f5c7a37cb7eb45091bb912462d37ecaa403dc6f6f0c911 (from https://pypi.org/simple/pywlroots/), version: 0.14.8
2021-11-16T16:36:11,872   Found link https://files.pythonhosted.org/packages/34/4e/d8011bf7e170b9d3a4c9c1ce5afe65b75e4c837759ccf6570b9f88a9584c/pywlroots-0.14.9.tar.gz#sha256=8f31e1e6e6e89e7ea909a3a9f839ebeed03d9f90dd676f2104cfb4de365996f7 (from https://pypi.org/simple/pywlroots/), version: 0.14.9
2021-11-16T16:36:11,872   Found link https://files.pythonhosted.org/packages/d2/2b/50bbc0b6548fa535578369d73443b5adba0a5bcc87c731f2e106dd4cb10a/pywlroots-0.14.10.tar.gz#sha256=8c3bf811d60adb612d9ee7dc5aec9ada3947bf7ec93c3252e7b9cd32582191f8 (from https://pypi.org/simple/pywlroots/), version: 0.14.10
2021-11-16T16:36:11,937 Given no hashes to check 1 links for project 'pywlroots': discarding no candidates
2021-11-16T16:36:12,002 Collecting pywlroots==0.1.3
2021-11-16T16:36:12,003   Created temporary directory: /tmp/pip-unpack-l58437w8
2021-11-16T16:36:12,005   Getting credentials from keyring for files.pythonhosted.org
2021-11-16T16:36:12,023   Looking up "https://files.pythonhosted.org/packages/1d/e2/f59e4e101755b504f6a4f1ac130db6f60ee835a8d905c7018ba40dae6eaa/pywlroots-0.1.3.tar.gz" in the cache
2021-11-16T16:36:12,025   Current age based on date: 177
2021-11-16T16:36:12,026   Ignoring unknown cache-control directive: immutable
2021-11-16T16:36:12,026   Freshness lifetime from max-age: 365000000
2021-11-16T16:36:12,026   The response is "fresh", returning cached response
2021-11-16T16:36:12,026   365000000 > 177
2021-11-16T16:36:12,027   Using cached pywlroots-0.1.3.tar.gz (41 kB)
2021-11-16T16:36:12,080   Added pywlroots==0.1.3 from https://files.pythonhosted.org/packages/1d/e2/f59e4e101755b504f6a4f1ac130db6f60ee835a8d905c7018ba40dae6eaa/pywlroots-0.1.3.tar.gz#sha256=2369dd43f82bb28f75548e71b55564bf11f3b06d5d1072c54cb7758c4a630352 to build tracker '/tmp/pip-req-tracker-1zz9nw25'
2021-11-16T16:36:12,081     Running setup.py (path:/tmp/pip-install-b3cqmuw9/pywlroots_7cf9620257f74a229069820f234b8226/setup.py) egg_info for package pywlroots
2021-11-16T16:36:12,081     Created temporary directory: /tmp/pip-pip-egg-info-8lm4xfd1
2021-11-16T16:36:12,081     Running command python setup.py egg_info
2021-11-16T16:36:13,462     running egg_info
2021-11-16T16:36:13,463     creating /tmp/pip-pip-egg-info-8lm4xfd1/pywlroots.egg-info
2021-11-16T16:36:13,464     writing /tmp/pip-pip-egg-info-8lm4xfd1/pywlroots.egg-info/PKG-INFO
2021-11-16T16:36:13,465     writing dependency_links to /tmp/pip-pip-egg-info-8lm4xfd1/pywlroots.egg-info/dependency_links.txt
2021-11-16T16:36:13,466     writing requirements to /tmp/pip-pip-egg-info-8lm4xfd1/pywlroots.egg-info/requires.txt
2021-11-16T16:36:13,466     writing top-level names to /tmp/pip-pip-egg-info-8lm4xfd1/pywlroots.egg-info/top_level.txt
2021-11-16T16:36:13,467     writing manifest file '/tmp/pip-pip-egg-info-8lm4xfd1/pywlroots.egg-info/SOURCES.txt'
2021-11-16T16:36:13,625     reading manifest file '/tmp/pip-pip-egg-info-8lm4xfd1/pywlroots.egg-info/SOURCES.txt'
2021-11-16T16:36:13,626     reading manifest template 'MANIFEST.in'
2021-11-16T16:36:13,629     writing manifest file '/tmp/pip-pip-egg-info-8lm4xfd1/pywlroots.egg-info/SOURCES.txt'
2021-11-16T16:36:13,735   Source in /tmp/pip-install-b3cqmuw9/pywlroots_7cf9620257f74a229069820f234b8226 has version 0.1.3, which satisfies requirement pywlroots==0.1.3 from https://files.pythonhosted.org/packages/1d/e2/f59e4e101755b504f6a4f1ac130db6f60ee835a8d905c7018ba40dae6eaa/pywlroots-0.1.3.tar.gz#sha256=2369dd43f82bb28f75548e71b55564bf11f3b06d5d1072c54cb7758c4a630352
2021-11-16T16:36:13,738   Removed pywlroots==0.1.3 from https://files.pythonhosted.org/packages/1d/e2/f59e4e101755b504f6a4f1ac130db6f60ee835a8d905c7018ba40dae6eaa/pywlroots-0.1.3.tar.gz#sha256=2369dd43f82bb28f75548e71b55564bf11f3b06d5d1072c54cb7758c4a630352 from build tracker '/tmp/pip-req-tracker-1zz9nw25'
2021-11-16T16:36:13,799 Requirement already satisfied: cffi>=1.12.0 in /home/kiko/.local/lib/python3.9/site-packages (from pywlroots==0.1.3) (1.15.0)
2021-11-16T16:36:13,805 Requirement already satisfied: pywayland>=0.1.1 in /home/kiko/.local/lib/python3.9/site-packages (from pywlroots==0.1.3) (0.4.7)
2021-11-16T16:36:13,809 Requirement already satisfied: xkbcommon>=0.2 in /home/kiko/.local/lib/python3.9/site-packages (from pywlroots==0.1.3) (0.4)
2021-11-16T16:36:13,819 Requirement already satisfied: pycparser in /home/kiko/.local/lib/python3.9/site-packages (from cffi>=1.12.0->pywlroots==0.1.3) (2.21)
2021-11-16T16:36:13,845 Created temporary directory: /tmp/pip-unpack-r2wmzh84
2021-11-16T16:36:13,847 Building wheels for collected packages: pywlroots
2021-11-16T16:36:13,849   Created temporary directory: /tmp/pip-wheel-ypwaij_v
2021-11-16T16:36:13,850   Destination directory: /tmp/pip-wheel-ypwaij_v
2021-11-16T16:36:13,850   Running command /usr/bin/python3 -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-b3cqmuw9/pywlroots_7cf9620257f74a229069820f234b8226/setup.py'"'"'; __file__='"'"'/tmp/pip-install-b3cqmuw9/pywlroots_7cf9620257f74a229069820f234b8226/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' bdist_wheel -d /tmp/pip-wheel-ypwaij_v
2021-11-16T16:36:15,207   running bdist_wheel
2021-11-16T16:36:15,211   running build
2021-11-16T16:36:15,211   running build_py
2021-11-16T16:36:15,364   creating build
2021-11-16T16:36:15,365   creating build/lib.linux-x86_64-3.9
2021-11-16T16:36:15,365   creating build/lib.linux-x86_64-3.9/wlroots
2021-11-16T16:36:15,365   copying wlroots/backend.py -> build/lib.linux-x86_64-3.9/wlroots
2021-11-16T16:36:15,366   copying wlroots/renderer.py -> build/lib.linux-x86_64-3.9/wlroots
2021-11-16T16:36:15,366   copying wlroots/__init__.py -> build/lib.linux-x86_64-3.9/wlroots
2021-11-16T16:36:15,367   copying wlroots/ffi_build.py -> build/lib.linux-x86_64-3.9/wlroots
2021-11-16T16:36:15,368   creating build/lib.linux-x86_64-3.9/wlroots/util
2021-11-16T16:36:15,369   copying wlroots/util/clock.py -> build/lib.linux-x86_64-3.9/wlroots/util
2021-11-16T16:36:15,369   copying wlroots/util/log.py -> build/lib.linux-x86_64-3.9/wlroots/util
2021-11-16T16:36:15,370   copying wlroots/util/__init__.py -> build/lib.linux-x86_64-3.9/wlroots/util
2021-11-16T16:36:15,370   copying wlroots/util/edges.py -> build/lib.linux-x86_64-3.9/wlroots/util
2021-11-16T16:36:15,372   creating build/lib.linux-x86_64-3.9/wlroots/wlr_types
2021-11-16T16:36:15,372   copying wlroots/wlr_types/texture.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
2021-11-16T16:36:15,373   copying wlroots/wlr_types/data_device_manager.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
2021-11-16T16:36:15,373   copying wlroots/wlr_types/matrix.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
2021-11-16T16:36:15,374   copying wlroots/wlr_types/output_layout.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
2021-11-16T16:36:15,375   copying wlroots/wlr_types/xdg_shell.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
2021-11-16T16:36:15,375   copying wlroots/wlr_types/cursor.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
2021-11-16T16:36:15,376   copying wlroots/wlr_types/compositor.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
2021-11-16T16:36:15,377   copying wlroots/wlr_types/keyboard.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
2021-11-16T16:36:15,377   copying wlroots/wlr_types/xcursor_manager.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
2021-11-16T16:36:15,378   copying wlroots/wlr_types/seat.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
2021-11-16T16:36:15,379   copying wlroots/wlr_types/surface.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
2021-11-16T16:36:15,379   copying wlroots/wlr_types/__init__.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
2021-11-16T16:36:15,380   copying wlroots/wlr_types/pointer.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
2021-11-16T16:36:15,380   copying wlroots/wlr_types/box.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
2021-11-16T16:36:15,381   copying wlroots/wlr_types/input_device.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
2021-11-16T16:36:15,381   copying wlroots/wlr_types/output.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
2021-11-16T16:36:15,383   copying wlroots/py.typed -> build/lib.linux-x86_64-3.9/wlroots
2021-11-16T16:36:15,385   running build_ext
2021-11-16T16:36:15,386   generating cffi module 'build/temp.linux-x86_64-3.9/wlroots._ffi.c'
2021-11-16T16:36:15,387   creating build/temp.linux-x86_64-3.9
2021-11-16T16:36:15,491   building 'wlroots._ffi' extension
2021-11-16T16:36:15,491   creating build/temp.linux-x86_64-3.9/build
2021-11-16T16:36:15,491   creating build/temp.linux-x86_64-3.9/build/temp.linux-x86_64-3.9
2021-11-16T16:36:15,492   x86_64-linux-gnu-gcc -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -DWLR_USE_UNSTABLE -I/usr/include/pixman-1 -I/tmp/pip-install-b3cqmuw9/pywlroots_7cf9620257f74a229069820f234b8226/include -I/usr/include/python3.9 -c build/temp.linux-x86_64-3.9/wlroots._ffi.c -o build/temp.linux-x86_64-3.9/build/temp.linux-x86_64-3.9/wlroots._ffi.o
2021-11-16T16:36:15,915   build/temp.linux-x86_64-3.9/wlroots._ffi.c: In function ‘_cffi_const_WLR_KEY_RELEASED’:
2021-11-16T16:36:15,916   build/temp.linux-x86_64-3.9/wlroots._ffi.c:1340:12: error: ‘WLR_KEY_RELEASED’ undeclared (first use in this function); did you mean ‘WLR_BUTTON_RELEASED’?
2021-11-16T16:36:15,916    1340 |   int n = (WLR_KEY_RELEASED) <= 0;
2021-11-16T16:36:15,917         |            ^~~~~~~~~~~~~~~~
2021-11-16T16:36:15,917         |            WLR_BUTTON_RELEASED
2021-11-16T16:36:15,917   build/temp.linux-x86_64-3.9/wlroots._ffi.c:1340:12: note: each undeclared identifier is reported only once for each function it appears in
2021-11-16T16:36:15,945   build/temp.linux-x86_64-3.9/wlroots._ffi.c: In function ‘_cffi_const_WLR_KEY_PRESSED’:
2021-11-16T16:36:15,946   build/temp.linux-x86_64-3.9/wlroots._ffi.c:1347:12: error: ‘WLR_KEY_PRESSED’ undeclared (first use in this function); did you mean ‘WLR_BUTTON_PRESSED’?
2021-11-16T16:36:15,946    1347 |   int n = (WLR_KEY_PRESSED) <= 0;
2021-11-16T16:36:15,946         |            ^~~~~~~~~~~~~~~
2021-11-16T16:36:15,947         |            WLR_BUTTON_PRESSED
2021-11-16T16:36:15,953   build/temp.linux-x86_64-3.9/wlroots._ffi.c: At top level:
2021-11-16T16:36:15,954   build/temp.linux-x86_64-3.9/wlroots._ffi.c:1797:119: warning: ‘struct wlr_egl’ declared inside parameter list will not be visible outside of this definition or declaration
2021-11-16T16:36:15,954    1797 | static struct wlr_backend * _cffi_d_wlr_backend_autocreate(struct wl_display * x0, struct wlr_renderer *(* x1)(struct wlr_egl *, unsigned int, void *, int *, int))
2021-11-16T16:36:15,954         |                                                                                                                       ^~~~~~~
2021-11-16T16:36:15,955   build/temp.linux-x86_64-3.9/wlroots._ffi.c: In function ‘_cffi_d_wlr_backend_autocreate’:
2021-11-16T16:36:15,955   build/temp.linux-x86_64-3.9/wlroots._ffi.c:1799:10: error: too many arguments to function ‘wlr_backend_autocreate’
2021-11-16T16:36:15,955    1799 |   return wlr_backend_autocreate(x0, x1);
2021-11-16T16:36:15,955         |          ^~~~~~~~~~~~~~~~~~~~~~
2021-11-16T16:36:15,955   In file included from build/temp.linux-x86_64-3.9/wlroots._ffi.c:570:
2021-11-16T16:36:15,956   /usr/local/include/wlr/backend.h:41:21: note: declared here
2021-11-16T16:36:15,956      41 | struct wlr_backend *wlr_backend_autocreate(struct wl_display *display);
2021-11-16T16:36:15,956         |                     ^~~~~~~~~~~~~~~~~~~~~~
2021-11-16T16:36:15,957   build/temp.linux-x86_64-3.9/wlroots._ffi.c: In function ‘_cffi_f_wlr_backend_autocreate’:
2021-11-16T16:36:15,957   build/temp.linux-x86_64-3.9/wlroots._ffi.c:1806:38: warning: ‘struct wlr_egl’ declared inside parameter list will not be visible outside of this definition or declaration
2021-11-16T16:36:15,957    1806 |   struct wlr_renderer *(* x1)(struct wlr_egl *, unsigned int, void *, int *, int);
2021-11-16T16:36:15,957         |                                      ^~~~~~~
2021-11-16T16:36:15,957   build/temp.linux-x86_64-3.9/wlroots._ffi.c:1826:41: warning: ‘struct wlr_egl’ declared inside parameter list will not be visible outside of this definition or declaration
2021-11-16T16:36:15,958    1826 |   x1 = (struct wlr_renderer *(*)(struct wlr_egl *, unsigned int, void *, int *, int))_cffi_to_c_pointer(arg1, _cffi_type(72));
2021-11-16T16:36:15,958         |                                         ^~~~~~~
2021-11-16T16:36:15,958   build/temp.linux-x86_64-3.9/wlroots._ffi.c:1826:6: warning: assignment to ‘struct wlr_renderer * (*)(struct wlr_egl *, unsigned int,  void *, int *, int)’ from incompatible pointer type ‘struct wlr_renderer * (*)(struct wlr_egl *, unsigned int,  void *, int *, int)’ [-Wincompatible-pointer-types]
2021-11-16T16:36:15,959    1826 |   x1 = (struct wlr_renderer *(*)(struct wlr_egl *, unsigned int, void *, int *, int))_cffi_to_c_pointer(arg1, _cffi_type(72));
2021-11-16T16:36:15,959         |      ^
2021-11-16T16:36:15,959   build/temp.linux-x86_64-3.9/wlroots._ffi.c:1827:46: warning: ‘struct wlr_egl’ declared inside parameter list will not be visible outside of this definition or declaration
2021-11-16T16:36:15,959    1827 |   if (x1 == (struct wlr_renderer *(*)(struct wlr_egl *, unsigned int, void *, int *, int))NULL && PyErr_Occurred())
2021-11-16T16:36:15,960         |                                              ^~~~~~~
2021-11-16T16:36:15,960   build/temp.linux-x86_64-3.9/wlroots._ffi.c:1827:10: warning: comparison of distinct pointer types lacks a cast
2021-11-16T16:36:15,960    1827 |   if (x1 == (struct wlr_renderer *(*)(struct wlr_egl *, unsigned int, void *, int *, int))NULL && PyErr_Occurred())
2021-11-16T16:36:15,961         |          ^~
2021-11-16T16:36:15,961   build/temp.linux-x86_64-3.9/wlroots._ffi.c:1832:14: error: too many arguments to function ‘wlr_backend_autocreate’
2021-11-16T16:36:15,962    1832 |   { result = wlr_backend_autocreate(x0, x1); }
2021-11-16T16:36:15,962         |              ^~~~~~~~~~~~~~~~~~~~~~
2021-11-16T16:36:15,962   In file included from build/temp.linux-x86_64-3.9/wlroots._ffi.c:570:
2021-11-16T16:36:15,962   /usr/local/include/wlr/backend.h:41:21: note: declared here
2021-11-16T16:36:15,963      41 | struct wlr_backend *wlr_backend_autocreate(struct wl_display *display);
2021-11-16T16:36:15,963         |                     ^~~~~~~~~~~~~~~~~~~~~~
2021-11-16T16:36:16,176   build/temp.linux-x86_64-3.9/wlroots._ffi.c: In function ‘_cffi_d_wlr_xdg_surface_for_each_popup’:
2021-11-16T16:36:16,180   build/temp.linux-x86_64-3.9/wlroots._ffi.c:5678:3: warning: implicit declaration of function ‘wlr_xdg_surface_for_each_popup’; did you mean ‘wlr_xdg_surface_for_each_surface’? [-Wimplicit-function-declaration]
2021-11-16T16:36:16,180    5678 |   wlr_xdg_surface_for_each_popup(x0, x1, x2);
2021-11-16T16:36:16,181         |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2021-11-16T16:36:16,181         |   wlr_xdg_surface_for_each_surface
2021-11-16T16:36:16,236   build/temp.linux-x86_64-3.9/wlroots._ffi.c: In function ‘_cffi_checkfld_struct_wlr_event_keyboard_key’:
2021-11-16T16:36:16,239   build/temp.linux-x86_64-3.9/wlroots._ffi.c:6558:31: warning: initialization of ‘enum wlr_key_state *’ from incompatible pointer type ‘enum wl_keyboard_key_state *’ [-Wincompatible-pointer-types]
2021-11-16T16:36:16,239    6558 |   { enum wlr_key_state *tmp = &p->state; (void)tmp; }
2021-11-16T16:36:16,239         |                               ^
2021-11-16T16:36:16,245   build/temp.linux-x86_64-3.9/wlroots._ffi.c: In function ‘_cffi_checkfld_struct_wlr_surface’:
2021-11-16T16:36:16,249   build/temp.linux-x86_64-3.9/wlroots._ffi.c:6877:37: warning: initialization of ‘struct wlr_surface_state *’ from incompatible pointer type ‘struct <anonymous> *’ [-Wincompatible-pointer-types]
2021-11-16T16:36:16,249    6877 |   { struct wlr_surface_state *tmp = &p->previous; (void)tmp; }
2021-11-16T16:36:16,249         |                                     ^
2021-11-16T16:36:16,252   build/temp.linux-x86_64-3.9/wlroots._ffi.c:6881:29: error: ‘struct wlr_surface’ has no member named ‘subsurfaces’
2021-11-16T16:36:16,252    6881 |   { struct wl_list *tmp = &p->subsurfaces; (void)tmp; }
2021-11-16T16:36:16,252         |                             ^~
2021-11-16T16:36:16,255   build/temp.linux-x86_64-3.9/wlroots._ffi.c:6882:29: error: ‘struct wlr_surface’ has no member named ‘subsurface_pending_list’
2021-11-16T16:36:16,255    6882 |   { struct wl_list *tmp = &p->subsurface_pending_list; (void)tmp; }
2021-11-16T16:36:16,256         |                             ^~
2021-11-16T16:36:16,256   build/temp.linux-x86_64-3.9/wlroots._ffi.c: In function ‘_cffi_checkfld_struct_wlr_surface_state’:
2021-11-16T16:36:16,259   build/temp.linux-x86_64-3.9/wlroots._ffi.c:6905:35: error: ‘struct wlr_surface_state’ has no member named ‘buffer_resource’
2021-11-16T16:36:16,259    6905 |   { struct wl_resource * *tmp = &p->buffer_resource; (void)tmp; }
2021-11-16T16:36:16,259         |                                   ^~
2021-11-16T16:36:16,262   build/temp.linux-x86_64-3.9/wlroots._ffi.c:6919:33: error: ‘struct wlr_surface_state’ has no member named ‘buffer_destroy’
2021-11-16T16:36:16,263    6919 |   { struct wl_listener *tmp = &p->buffer_destroy; (void)tmp; }
2021-11-16T16:36:16,263         |                                 ^~
2021-11-16T16:36:16,263   build/temp.linux-x86_64-3.9/wlroots._ffi.c: In function ‘_cffi_checkfld_struct_wlr_xdg_surface’:
2021-11-16T16:36:16,268   build/temp.linux-x86_64-3.9/wlroots._ffi.c:6954:14: error: ‘struct wlr_xdg_surface’ has no member named ‘configure_serial’; did you mean ‘configure_idle’?
2021-11-16T16:36:16,269    6954 |   (void)((p->configure_serial) | 0);  /* check that 'struct wlr_xdg_surface.configure_serial' is an integer */
2021-11-16T16:36:16,269         |              ^~~~~~~~~~~~~~~~
2021-11-16T16:36:16,269         |              configure_idle
2021-11-16T16:36:16,272   build/temp.linux-x86_64-3.9/wlroots._ffi.c:6956:12: error: ‘struct wlr_xdg_surface’ has no member named ‘configure_next_serial’
2021-11-16T16:36:16,272    6956 |   (void)((p->configure_next_serial) | 0);  /* check that 'struct wlr_xdg_surface.configure_next_serial' is an integer */
2021-11-16T16:36:16,272         |            ^~
2021-11-16T16:36:16,275   build/temp.linux-x86_64-3.9/wlroots._ffi.c:6958:12: error: ‘struct wlr_xdg_surface’ has no member named ‘has_next_geometry’
2021-11-16T16:36:16,275    6958 |   (void)((p->has_next_geometry) | 0);  /* check that 'struct wlr_xdg_surface.has_next_geometry' is an integer */
2021-11-16T16:36:16,275         |            ^~
2021-11-16T16:36:16,278   build/temp.linux-x86_64-3.9/wlroots._ffi.c:6959:29: error: ‘struct wlr_xdg_surface’ has no member named ‘next_geometry’
2021-11-16T16:36:16,279    6959 |   { struct wlr_box *tmp = &p->next_geometry; (void)tmp; }
2021-11-16T16:36:16,279         |                             ^~
2021-11-16T16:36:16,281   build/temp.linux-x86_64-3.9/wlroots._ffi.c:6960:29: error: ‘struct wlr_xdg_surface’ has no member named ‘geometry’
2021-11-16T16:36:16,282    6960 |   { struct wlr_box *tmp = &p->geometry; (void)tmp; }
2021-11-16T16:36:16,282         |                             ^~
2021-11-16T16:36:16,282   build/temp.linux-x86_64-3.9/wlroots._ffi.c: In function ‘_cffi_checkfld_struct_wlr_xdg_toplevel’:
2021-11-16T16:36:16,285   build/temp.linux-x86_64-3.9/wlroots._ffi.c:6978:44: error: ‘struct wlr_xdg_toplevel’ has no member named ‘client_pending’
2021-11-16T16:36:16,285    6978 |   { struct wlr_xdg_toplevel_state *tmp = &p->client_pending; (void)tmp; }
2021-11-16T16:36:16,286         |                                            ^~
2021-11-16T16:36:16,288   build/temp.linux-x86_64-3.9/wlroots._ffi.c:6979:44: error: ‘struct wlr_xdg_toplevel’ has no member named ‘server_pending’
2021-11-16T16:36:16,289    6979 |   { struct wlr_xdg_toplevel_state *tmp = &p->server_pending; (void)tmp; }
2021-11-16T16:36:16,289         |                                            ^~
2021-11-16T16:36:16,290   build/temp.linux-x86_64-3.9/wlroots._ffi.c: In function ‘_cffi_checkfld_struct_wlr_xdg_toplevel_state’:
2021-11-16T16:36:16,293   build/temp.linux-x86_64-3.9/wlroots._ffi.c:7050:34: error: ‘struct wlr_xdg_toplevel_state’ has no member named ‘fullscreen_output’
2021-11-16T16:36:16,294    7050 |   { struct wlr_output * *tmp = &p->fullscreen_output; (void)tmp; }
2021-11-16T16:36:16,294         |                                  ^~
2021-11-16T16:36:16,296   build/temp.linux-x86_64-3.9/wlroots._ffi.c:7051:33: error: ‘struct wlr_xdg_toplevel_state’ has no member named ‘fullscreen_output_destroy’
2021-11-16T16:36:16,297    7051 |   { struct wl_listener *tmp = &p->fullscreen_output_destroy; (void)tmp; }
2021-11-16T16:36:16,297         |                                 ^~
2021-11-16T16:36:16,331   In file included from build/temp.linux-x86_64-3.9/wlroots._ffi.c:61:
2021-11-16T16:36:16,331   build/temp.linux-x86_64-3.9/wlroots._ffi.c: At top level:
2021-11-16T16:36:16,334   build/temp.linux-x86_64-3.9/wlroots._ffi.c:7828:20: error: ‘struct wlr_surface’ has no member named ‘subsurfaces’
2021-11-16T16:36:16,334    7828 |   { "subsurfaces", offsetof(struct wlr_surface, subsurfaces),
2021-11-16T16:36:16,335         |                    ^~~~~~~~
2021-11-16T16:36:16,338   build/temp.linux-x86_64-3.9/wlroots._ffi.c:7829:52: error: ‘struct wlr_surface’ has no member named ‘subsurfaces’
2021-11-16T16:36:16,338    7829 |                    sizeof(((struct wlr_surface *)0)->subsurfaces),
2021-11-16T16:36:16,338         |                                                    ^~
2021-11-16T16:36:16,341   In file included from build/temp.linux-x86_64-3.9/wlroots._ffi.c:61:
2021-11-16T16:36:16,342   build/temp.linux-x86_64-3.9/wlroots._ffi.c:7831:32: error: ‘struct wlr_surface’ has no member named ‘subsurface_pending_list’
2021-11-16T16:36:16,342    7831 |   { "subsurface_pending_list", offsetof(struct wlr_surface, subsurface_pending_list),
2021-11-16T16:36:16,342         |                                ^~~~~~~~
2021-11-16T16:36:16,345   build/temp.linux-x86_64-3.9/wlroots._ffi.c:7832:64: error: ‘struct wlr_surface’ has no member named ‘subsurface_pending_list’
2021-11-16T16:36:16,346    7832 |                                sizeof(((struct wlr_surface *)0)->subsurface_pending_list),
2021-11-16T16:36:16,346         |                                                                ^~
2021-11-16T16:36:16,350   In file included from build/temp.linux-x86_64-3.9/wlroots._ffi.c:61:
2021-11-16T16:36:16,350   build/temp.linux-x86_64-3.9/wlroots._ffi.c:7852:24: error: ‘struct wlr_surface_state’ has no member named ‘buffer_resource’
2021-11-16T16:36:16,350    7852 |   { "buffer_resource", offsetof(struct wlr_surface_state, buffer_resource),
2021-11-16T16:36:16,350         |                        ^~~~~~~~
2021-11-16T16:36:16,353   build/temp.linux-x86_64-3.9/wlroots._ffi.c:7853:62: error: ‘struct wlr_surface_state’ has no member named ‘buffer_resource’
2021-11-16T16:36:16,354    7853 |                        sizeof(((struct wlr_surface_state *)0)->buffer_resource),
2021-11-16T16:36:16,354         |                                                              ^~
2021-11-16T16:36:16,358   In file included from build/temp.linux-x86_64-3.9/wlroots._ffi.c:61:
2021-11-16T16:36:16,359   build/temp.linux-x86_64-3.9/wlroots._ffi.c:7894:23: error: ‘struct wlr_surface_state’ has no member named ‘buffer_destroy’
2021-11-16T16:36:16,359    7894 |   { "buffer_destroy", offsetof(struct wlr_surface_state, buffer_destroy),
2021-11-16T16:36:16,359         |                       ^~~~~~~~
2021-11-16T16:36:16,362   build/temp.linux-x86_64-3.9/wlroots._ffi.c:7895:61: error: ‘struct wlr_surface_state’ has no member named ‘buffer_destroy’
2021-11-16T16:36:16,362    7895 |                       sizeof(((struct wlr_surface_state *)0)->buffer_destroy),
2021-11-16T16:36:16,363         |                                                             ^~
2021-11-16T16:36:16,368   In file included from build/temp.linux-x86_64-3.9/wlroots._ffi.c:61:
2021-11-16T16:36:16,368   build/temp.linux-x86_64-3.9/wlroots._ffi.c:7951:58: error: ‘struct wlr_xdg_surface’ has no member named ‘configure_serial’; did you mean ‘configure_idle’?
2021-11-16T16:36:16,368    7951 |   { "configure_serial", offsetof(struct wlr_xdg_surface, configure_serial),
2021-11-16T16:36:16,368         |                                                          ^~~~~~~~~~~~~~~~
2021-11-16T16:36:16,374   build/temp.linux-x86_64-3.9/wlroots._ffi.c:7952:63: error: ‘struct wlr_xdg_surface’ has no member named ‘configure_serial’; did you mean ‘configure_idle’?
2021-11-16T16:36:16,374    7952 |                         sizeof(((struct wlr_xdg_surface *)0)->configure_serial),
2021-11-16T16:36:16,374         |                                                               ^~~~~~~~~~~~~~~~
2021-11-16T16:36:16,374         |                                                               configure_idle
2021-11-16T16:36:16,378   In file included from build/temp.linux-x86_64-3.9/wlroots._ffi.c:61:
2021-11-16T16:36:16,378   build/temp.linux-x86_64-3.9/wlroots._ffi.c:7957:30: error: ‘struct wlr_xdg_surface’ has no member named ‘configure_next_serial’
2021-11-16T16:36:16,378    7957 |   { "configure_next_serial", offsetof(struct wlr_xdg_surface, configure_next_serial),
2021-11-16T16:36:16,378         |                              ^~~~~~~~
2021-11-16T16:36:16,381   build/temp.linux-x86_64-3.9/wlroots._ffi.c:7958:66: error: ‘struct wlr_xdg_surface’ has no member named ‘configure_next_serial’
2021-11-16T16:36:16,382    7958 |                              sizeof(((struct wlr_xdg_surface *)0)->configure_next_serial),
2021-11-16T16:36:16,382         |                                                                  ^~
2021-11-16T16:36:16,385   In file included from build/temp.linux-x86_64-3.9/wlroots._ffi.c:61:
2021-11-16T16:36:16,386   build/temp.linux-x86_64-3.9/wlroots._ffi.c:7963:26: error: ‘struct wlr_xdg_surface’ has no member named ‘has_next_geometry’
2021-11-16T16:36:16,386    7963 |   { "has_next_geometry", offsetof(struct wlr_xdg_surface, has_next_geometry),
2021-11-16T16:36:16,386         |                          ^~~~~~~~
2021-11-16T16:36:16,389   build/temp.linux-x86_64-3.9/wlroots._ffi.c:7964:62: error: ‘struct wlr_xdg_surface’ has no member named ‘has_next_geometry’
2021-11-16T16:36:16,389    7964 |                          sizeof(((struct wlr_xdg_surface *)0)->has_next_geometry),
2021-11-16T16:36:16,389         |                                                              ^~
2021-11-16T16:36:16,393   In file included from build/temp.linux-x86_64-3.9/wlroots._ffi.c:61:
2021-11-16T16:36:16,393   build/temp.linux-x86_64-3.9/wlroots._ffi.c:7966:22: error: ‘struct wlr_xdg_surface’ has no member named ‘next_geometry’
2021-11-16T16:36:16,393    7966 |   { "next_geometry", offsetof(struct wlr_xdg_surface, next_geometry),
2021-11-16T16:36:16,393         |                      ^~~~~~~~
2021-11-16T16:36:16,396   build/temp.linux-x86_64-3.9/wlroots._ffi.c:7967:58: error: ‘struct wlr_xdg_surface’ has no member named ‘next_geometry’
2021-11-16T16:36:16,397    7967 |                      sizeof(((struct wlr_xdg_surface *)0)->next_geometry),
2021-11-16T16:36:16,397         |                                                          ^~
2021-11-16T16:36:16,400   In file included from build/temp.linux-x86_64-3.9/wlroots._ffi.c:61:
2021-11-16T16:36:16,401   build/temp.linux-x86_64-3.9/wlroots._ffi.c:7969:17: error: ‘struct wlr_xdg_surface’ has no member named ‘geometry’
2021-11-16T16:36:16,401    7969 |   { "geometry", offsetof(struct wlr_xdg_surface, geometry),
2021-11-16T16:36:16,401         |                 ^~~~~~~~
2021-11-16T16:36:16,404   build/temp.linux-x86_64-3.9/wlroots._ffi.c:7970:53: error: ‘struct wlr_xdg_surface’ has no member named ‘geometry’
2021-11-16T16:36:16,404    7970 |                 sizeof(((struct wlr_xdg_surface *)0)->geometry),
2021-11-16T16:36:16,405         |                                                     ^~
2021-11-16T16:36:16,409   In file included from build/temp.linux-x86_64-3.9/wlroots._ffi.c:61:
2021-11-16T16:36:16,409   build/temp.linux-x86_64-3.9/wlroots._ffi.c:7999:23: error: ‘struct wlr_xdg_toplevel’ has no member named ‘client_pending’
2021-11-16T16:36:16,409    7999 |   { "client_pending", offsetof(struct wlr_xdg_toplevel, client_pending),
2021-11-16T16:36:16,409         |                       ^~~~~~~~
2021-11-16T16:36:16,412   build/temp.linux-x86_64-3.9/wlroots._ffi.c:8000:60: error: ‘struct wlr_xdg_toplevel’ has no member named ‘client_pending’
2021-11-16T16:36:16,413    8000 |                       sizeof(((struct wlr_xdg_toplevel *)0)->client_pending),
2021-11-16T16:36:16,413         |                                                            ^~
2021-11-16T16:36:16,416   In file included from build/temp.linux-x86_64-3.9/wlroots._ffi.c:61:
2021-11-16T16:36:16,416   build/temp.linux-x86_64-3.9/wlroots._ffi.c:8002:23: error: ‘struct wlr_xdg_toplevel’ has no member named ‘server_pending’
2021-11-16T16:36:16,417    8002 |   { "server_pending", offsetof(struct wlr_xdg_toplevel, server_pending),
2021-11-16T16:36:16,417         |                       ^~~~~~~~
2021-11-16T16:36:16,420   build/temp.linux-x86_64-3.9/wlroots._ffi.c:8003:60: error: ‘struct wlr_xdg_toplevel’ has no member named ‘server_pending’
2021-11-16T16:36:16,420    8003 |                       sizeof(((struct wlr_xdg_toplevel *)0)->server_pending),
2021-11-16T16:36:16,421         |                                                            ^~
2021-11-16T16:36:16,427   In file included from build/temp.linux-x86_64-3.9/wlroots._ffi.c:61:
2021-11-16T16:36:16,427   build/temp.linux-x86_64-3.9/wlroots._ffi.c:8095:26: error: ‘struct wlr_xdg_toplevel_state’ has no member named ‘fullscreen_output’
2021-11-16T16:36:16,427    8095 |   { "fullscreen_output", offsetof(struct wlr_xdg_toplevel_state, fullscreen_output),
2021-11-16T16:36:16,428         |                          ^~~~~~~~
2021-11-16T16:36:16,430   build/temp.linux-x86_64-3.9/wlroots._ffi.c:8096:69: error: ‘struct wlr_xdg_toplevel_state’ has no member named ‘fullscreen_output’
2021-11-16T16:36:16,431    8096 |                          sizeof(((struct wlr_xdg_toplevel_state *)0)->fullscreen_output),
2021-11-16T16:36:16,431         |                                                                     ^~
2021-11-16T16:36:16,434   In file included from build/temp.linux-x86_64-3.9/wlroots._ffi.c:61:
2021-11-16T16:36:16,435   build/temp.linux-x86_64-3.9/wlroots._ffi.c:8098:34: error: ‘struct wlr_xdg_toplevel_state’ has no member named ‘fullscreen_output_destroy’
2021-11-16T16:36:16,435    8098 |   { "fullscreen_output_destroy", offsetof(struct wlr_xdg_toplevel_state, fullscreen_output_destroy),
2021-11-16T16:36:16,435         |                                  ^~~~~~~~
2021-11-16T16:36:16,438   build/temp.linux-x86_64-3.9/wlroots._ffi.c:8099:77: error: ‘struct wlr_xdg_toplevel_state’ has no member named ‘fullscreen_output_destroy’
2021-11-16T16:36:16,438    8099 |                                  sizeof(((struct wlr_xdg_toplevel_state *)0)->fullscreen_output_destroy),
2021-11-16T16:36:16,439         |                                                                             ^~
2021-11-16T16:36:16,456   build/temp.linux-x86_64-3.9/wlroots._ffi.c:8564:49: error: invalid application of ‘sizeof’ to incomplete type ‘enum wlr_key_state’
2021-11-16T16:36:16,456    8564 |   { "wlr_key_state", 412, _cffi_prim_int(sizeof(enum wlr_key_state), ((enum wlr_key_state)-1) <= 0),
2021-11-16T16:36:16,457         |                                                 ^~~~
2021-11-16T16:36:16,457   build/temp.linux-x86_64-3.9/wlroots._ffi.c:541:7: note: in definition of macro ‘_cffi_prim_int’
2021-11-16T16:36:16,457     541 |     ((size) == 1 ? ((sign) ? _CFFI_PRIM_INT8  : _CFFI_PRIM_UINT8)  :    \
2021-11-16T16:36:16,457         |       ^~~~
2021-11-16T16:36:16,461   build/temp.linux-x86_64-3.9/wlroots._ffi.c:8564:77: error: conversion to incomplete type
2021-11-16T16:36:16,461    8564 |   { "wlr_key_state", 412, _cffi_prim_int(sizeof(enum wlr_key_state), ((enum wlr_key_state)-1) <= 0),
2021-11-16T16:36:16,461         |                                                                             ^~~~~~~~~~~~~
2021-11-16T16:36:16,461   build/temp.linux-x86_64-3.9/wlroots._ffi.c:541:22: note: in definition of macro ‘_cffi_prim_int’
2021-11-16T16:36:16,462     541 |     ((size) == 1 ? ((sign) ? _CFFI_PRIM_INT8  : _CFFI_PRIM_UINT8)  :    \
2021-11-16T16:36:16,462         |                      ^~~~
2021-11-16T16:36:16,465   build/temp.linux-x86_64-3.9/wlroots._ffi.c:8564:49: error: invalid application of ‘sizeof’ to incomplete type ‘enum wlr_key_state’
2021-11-16T16:36:16,466    8564 |   { "wlr_key_state", 412, _cffi_prim_int(sizeof(enum wlr_key_state), ((enum wlr_key_state)-1) <= 0),
2021-11-16T16:36:16,466         |                                                 ^~~~
2021-11-16T16:36:16,466   build/temp.linux-x86_64-3.9/wlroots._ffi.c:542:7: note: in definition of macro ‘_cffi_prim_int’
2021-11-16T16:36:16,466     542 |      (size) == 2 ? ((sign) ? _CFFI_PRIM_INT16 : _CFFI_PRIM_UINT16) :    \
2021-11-16T16:36:16,466         |       ^~~~
2021-11-16T16:36:16,470   build/temp.linux-x86_64-3.9/wlroots._ffi.c:8564:77: error: conversion to incomplete type
2021-11-16T16:36:16,470    8564 |   { "wlr_key_state", 412, _cffi_prim_int(sizeof(enum wlr_key_state), ((enum wlr_key_state)-1) <= 0),
2021-11-16T16:36:16,470         |                                                                             ^~~~~~~~~~~~~
2021-11-16T16:36:16,471   build/temp.linux-x86_64-3.9/wlroots._ffi.c:542:22: note: in definition of macro ‘_cffi_prim_int’
2021-11-16T16:36:16,471     542 |      (size) == 2 ? ((sign) ? _CFFI_PRIM_INT16 : _CFFI_PRIM_UINT16) :    \
2021-11-16T16:36:16,471         |                      ^~~~
2021-11-16T16:36:16,474   build/temp.linux-x86_64-3.9/wlroots._ffi.c:8564:49: error: invalid application of ‘sizeof’ to incomplete type ‘enum wlr_key_state’
2021-11-16T16:36:16,475    8564 |   { "wlr_key_state", 412, _cffi_prim_int(sizeof(enum wlr_key_state), ((enum wlr_key_state)-1) <= 0),
2021-11-16T16:36:16,475         |                                                 ^~~~
2021-11-16T16:36:16,475   build/temp.linux-x86_64-3.9/wlroots._ffi.c:543:7: note: in definition of macro ‘_cffi_prim_int’
2021-11-16T16:36:16,475     543 |      (size) == 4 ? ((sign) ? _CFFI_PRIM_INT32 : _CFFI_PRIM_UINT32) :    \
2021-11-16T16:36:16,476         |       ^~~~
2021-11-16T16:36:16,479   build/temp.linux-x86_64-3.9/wlroots._ffi.c:8564:77: error: conversion to incomplete type
2021-11-16T16:36:16,479    8564 |   { "wlr_key_state", 412, _cffi_prim_int(sizeof(enum wlr_key_state), ((enum wlr_key_state)-1) <= 0),
2021-11-16T16:36:16,480         |                                                                             ^~~~~~~~~~~~~
2021-11-16T16:36:16,480   build/temp.linux-x86_64-3.9/wlroots._ffi.c:543:22: note: in definition of macro ‘_cffi_prim_int’
2021-11-16T16:36:16,480     543 |      (size) == 4 ? ((sign) ? _CFFI_PRIM_INT32 : _CFFI_PRIM_UINT32) :    \
2021-11-16T16:36:16,480         |                      ^~~~
2021-11-16T16:36:16,484   build/temp.linux-x86_64-3.9/wlroots._ffi.c:8564:49: error: invalid application of ‘sizeof’ to incomplete type ‘enum wlr_key_state’
2021-11-16T16:36:16,484    8564 |   { "wlr_key_state", 412, _cffi_prim_int(sizeof(enum wlr_key_state), ((enum wlr_key_state)-1) <= 0),
2021-11-16T16:36:16,484         |                                                 ^~~~
2021-11-16T16:36:16,485   build/temp.linux-x86_64-3.9/wlroots._ffi.c:544:7: note: in definition of macro ‘_cffi_prim_int’
2021-11-16T16:36:16,485     544 |      (size) == 8 ? ((sign) ? _CFFI_PRIM_INT64 : _CFFI_PRIM_UINT64) :    \
2021-11-16T16:36:16,485         |       ^~~~
2021-11-16T16:36:16,488   build/temp.linux-x86_64-3.9/wlroots._ffi.c:8564:77: error: conversion to incomplete type
2021-11-16T16:36:16,489    8564 |   { "wlr_key_state", 412, _cffi_prim_int(sizeof(enum wlr_key_state), ((enum wlr_key_state)-1) <= 0),
2021-11-16T16:36:16,489         |                                                                             ^~~~~~~~~~~~~
2021-11-16T16:36:16,489   build/temp.linux-x86_64-3.9/wlroots._ffi.c:544:22: note: in definition of macro ‘_cffi_prim_int’
2021-11-16T16:36:16,490     544 |      (size) == 8 ? ((sign) ? _CFFI_PRIM_INT64 : _CFFI_PRIM_UINT64) :    \
2021-11-16T16:36:16,490         |                      ^~~~
2021-11-16T16:36:16,570   error: command '/usr/bin/x86_64-linux-gnu-gcc' failed with exit code 1
2021-11-16T16:36:16,685   ERROR: Failed building wheel for pywlroots
2021-11-16T16:36:16,688   Running setup.py clean for pywlroots
2021-11-16T16:36:16,689   Running command /usr/bin/python3 -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-b3cqmuw9/pywlroots_7cf9620257f74a229069820f234b8226/setup.py'"'"'; __file__='"'"'/tmp/pip-install-b3cqmuw9/pywlroots_7cf9620257f74a229069820f234b8226/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' clean --all
2021-11-16T16:36:18,025   running clean
2021-11-16T16:36:18,026   removing 'build/temp.linux-x86_64-3.9' (and everything under it)
2021-11-16T16:36:18,027   removing 'build/lib.linux-x86_64-3.9' (and everything under it)
2021-11-16T16:36:18,031   'build/bdist.linux-x86_64' does not exist -- can't clean it
2021-11-16T16:36:18,031   'build/scripts-3.9' does not exist -- can't clean it
2021-11-16T16:36:18,033   removing 'build'
2021-11-16T16:36:18,121 Failed to build pywlroots
2021-11-16T16:36:18,759 Installing collected packages: pywlroots
2021-11-16T16:36:18,768   Created temporary directory: /tmp/pip-record-_9in_rf5
2021-11-16T16:36:18,769     Running command /usr/bin/python3 -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-b3cqmuw9/pywlroots_7cf9620257f74a229069820f234b8226/setup.py'"'"'; __file__='"'"'/tmp/pip-install-b3cqmuw9/pywlroots_7cf9620257f74a229069820f234b8226/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /tmp/pip-record-_9in_rf5/install-record.txt --single-version-externally-managed --user --prefix= --compile --install-headers /home/kiko/.local/include/python3.9/pywlroots
2021-11-16T16:36:20,103     running install
2021-11-16T16:36:20,105     running build
2021-11-16T16:36:20,106     running build_py
2021-11-16T16:36:20,256     creating build
2021-11-16T16:36:20,257     creating build/lib.linux-x86_64-3.9
2021-11-16T16:36:20,258     creating build/lib.linux-x86_64-3.9/wlroots
2021-11-16T16:36:20,258     copying wlroots/backend.py -> build/lib.linux-x86_64-3.9/wlroots
2021-11-16T16:36:20,258     copying wlroots/renderer.py -> build/lib.linux-x86_64-3.9/wlroots
2021-11-16T16:36:20,259     copying wlroots/__init__.py -> build/lib.linux-x86_64-3.9/wlroots
2021-11-16T16:36:20,259     copying wlroots/ffi_build.py -> build/lib.linux-x86_64-3.9/wlroots
2021-11-16T16:36:20,261     creating build/lib.linux-x86_64-3.9/wlroots/util
2021-11-16T16:36:20,261     copying wlroots/util/clock.py -> build/lib.linux-x86_64-3.9/wlroots/util
2021-11-16T16:36:20,262     copying wlroots/util/log.py -> build/lib.linux-x86_64-3.9/wlroots/util
2021-11-16T16:36:20,262     copying wlroots/util/__init__.py -> build/lib.linux-x86_64-3.9/wlroots/util
2021-11-16T16:36:20,263     copying wlroots/util/edges.py -> build/lib.linux-x86_64-3.9/wlroots/util
2021-11-16T16:36:20,265     creating build/lib.linux-x86_64-3.9/wlroots/wlr_types
2021-11-16T16:36:20,265     copying wlroots/wlr_types/texture.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
2021-11-16T16:36:20,266     copying wlroots/wlr_types/data_device_manager.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
2021-11-16T16:36:20,266     copying wlroots/wlr_types/matrix.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
2021-11-16T16:36:20,267     copying wlroots/wlr_types/output_layout.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
2021-11-16T16:36:20,268     copying wlroots/wlr_types/xdg_shell.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
2021-11-16T16:36:20,269     copying wlroots/wlr_types/cursor.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
2021-11-16T16:36:20,269     copying wlroots/wlr_types/compositor.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
2021-11-16T16:36:20,270     copying wlroots/wlr_types/keyboard.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
2021-11-16T16:36:20,271     copying wlroots/wlr_types/xcursor_manager.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
2021-11-16T16:36:20,271     copying wlroots/wlr_types/seat.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
2021-11-16T16:36:20,272     copying wlroots/wlr_types/surface.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
2021-11-16T16:36:20,273     copying wlroots/wlr_types/__init__.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
2021-11-16T16:36:20,273     copying wlroots/wlr_types/pointer.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
2021-11-16T16:36:20,274     copying wlroots/wlr_types/box.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
2021-11-16T16:36:20,276     copying wlroots/wlr_types/input_device.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
2021-11-16T16:36:20,277     copying wlroots/wlr_types/output.py -> build/lib.linux-x86_64-3.9/wlroots/wlr_types
2021-11-16T16:36:20,277     copying wlroots/py.typed -> build/lib.linux-x86_64-3.9/wlroots
2021-11-16T16:36:20,279     running build_ext
2021-11-16T16:36:20,281     generating cffi module 'build/temp.linux-x86_64-3.9/wlroots._ffi.c'
2021-11-16T16:36:20,282     creating build/temp.linux-x86_64-3.9
2021-11-16T16:36:20,386     building 'wlroots._ffi' extension
2021-11-16T16:36:20,386     creating build/temp.linux-x86_64-3.9/build
2021-11-16T16:36:20,386     creating build/temp.linux-x86_64-3.9/build/temp.linux-x86_64-3.9
2021-11-16T16:36:20,387     x86_64-linux-gnu-gcc -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -DWLR_USE_UNSTABLE -I/usr/include/pixman-1 -I/tmp/pip-install-b3cqmuw9/pywlroots_7cf9620257f74a229069820f234b8226/include -I/usr/include/python3.9 -c build/temp.linux-x86_64-3.9/wlroots._ffi.c -o build/temp.linux-x86_64-3.9/build/temp.linux-x86_64-3.9/wlroots._ffi.o
2021-11-16T16:36:20,819     build/temp.linux-x86_64-3.9/wlroots._ffi.c: In function ‘_cffi_const_WLR_KEY_RELEASED’:
2021-11-16T16:36:20,820     build/temp.linux-x86_64-3.9/wlroots._ffi.c:1340:12: error: ‘WLR_KEY_RELEASED’ undeclared (first use in this function); did you mean ‘WLR_BUTTON_RELEASED’?
2021-11-16T16:36:20,821      1340 |   int n = (WLR_KEY_RELEASED) <= 0;
2021-11-16T16:36:20,822           |            ^~~~~~~~~~~~~~~~
2021-11-16T16:36:20,823           |            WLR_BUTTON_RELEASED
2021-11-16T16:36:20,824     build/temp.linux-x86_64-3.9/wlroots._ffi.c:1340:12: note: each undeclared identifier is reported only once for each function it appears in
2021-11-16T16:36:20,848     build/temp.linux-x86_64-3.9/wlroots._ffi.c: In function ‘_cffi_const_WLR_KEY_PRESSED’:
2021-11-16T16:36:20,849     build/temp.linux-x86_64-3.9/wlroots._ffi.c:1347:12: error: ‘WLR_KEY_PRESSED’ undeclared (first use in this function); did you mean ‘WLR_BUTTON_PRESSED’?
2021-11-16T16:36:20,850      1347 |   int n = (WLR_KEY_PRESSED) <= 0;
2021-11-16T16:36:20,851           |            ^~~~~~~~~~~~~~~
2021-11-16T16:36:20,852           |            WLR_BUTTON_PRESSED
2021-11-16T16:36:20,857     build/temp.linux-x86_64-3.9/wlroots._ffi.c: At top level:
2021-11-16T16:36:20,858     build/temp.linux-x86_64-3.9/wlroots._ffi.c:1797:119: warning: ‘struct wlr_egl’ declared inside parameter list will not be visible outside of this definition or declaration
2021-11-16T16:36:20,859      1797 | static struct wlr_backend * _cffi_d_wlr_backend_autocreate(struct wl_display * x0, struct wlr_renderer *(* x1)(struct wlr_egl *, unsigned int, void *, int *, int))
2021-11-16T16:36:20,859           |                                                                                                                       ^~~~~~~
2021-11-16T16:36:20,860     build/temp.linux-x86_64-3.9/wlroots._ffi.c: In function ‘_cffi_d_wlr_backend_autocreate’:
2021-11-16T16:36:20,861     build/temp.linux-x86_64-3.9/wlroots._ffi.c:1799:10: error: too many arguments to function ‘wlr_backend_autocreate’
2021-11-16T16:36:20,862      1799 |   return wlr_backend_autocreate(x0, x1);
2021-11-16T16:36:20,863           |          ^~~~~~~~~~~~~~~~~~~~~~
2021-11-16T16:36:20,863     In file included from build/temp.linux-x86_64-3.9/wlroots._ffi.c:570:
2021-11-16T16:36:20,864     /usr/local/include/wlr/backend.h:41:21: note: declared here
2021-11-16T16:36:20,865        41 | struct wlr_backend *wlr_backend_autocreate(struct wl_display *display);
2021-11-16T16:36:20,866           |                     ^~~~~~~~~~~~~~~~~~~~~~
2021-11-16T16:36:20,867     build/temp.linux-x86_64-3.9/wlroots._ffi.c: In function ‘_cffi_f_wlr_backend_autocreate’:
2021-11-16T16:36:20,867     build/temp.linux-x86_64-3.9/wlroots._ffi.c:1806:38: warning: ‘struct wlr_egl’ declared inside parameter list will not be visible outside of this definition or declaration
2021-11-16T16:36:20,868      1806 |   struct wlr_renderer *(* x1)(struct wlr_egl *, unsigned int, void *, int *, int);
2021-11-16T16:36:20,869           |                                      ^~~~~~~
2021-11-16T16:36:20,870     build/temp.linux-x86_64-3.9/wlroots._ffi.c:1826:41: warning: ‘struct wlr_egl’ declared inside parameter list will not be visible outside of this definition or declaration
2021-11-16T16:36:20,871      1826 |   x1 = (struct wlr_renderer *(*)(struct wlr_egl *, unsigned int, void *, int *, int))_cffi_to_c_pointer(arg1, _cffi_type(72));
2021-11-16T16:36:20,872           |                                         ^~~~~~~
2021-11-16T16:36:20,873     build/temp.linux-x86_64-3.9/wlroots._ffi.c:1826:6: warning: assignment to ‘struct wlr_renderer * (*)(struct wlr_egl *, unsigned int,  void *, int *, int)’ from incompatible pointer type ‘struct wlr_renderer * (*)(struct wlr_egl *, unsigned int,  void *, int *, int)’ [-Wincompatible-pointer-types]
2021-11-16T16:36:20,873      1826 |   x1 = (struct wlr_renderer *(*)(struct wlr_egl *, unsigned int, void *, int *, int))_cffi_to_c_pointer(arg1, _cffi_type(72));
2021-11-16T16:36:20,874           |      ^
2021-11-16T16:36:20,875     build/temp.linux-x86_64-3.9/wlroots._ffi.c:1827:46: warning: ‘struct wlr_egl’ declared inside parameter list will not be visible outside of this definition or declaration
2021-11-16T16:36:20,876      1827 |   if (x1 == (struct wlr_renderer *(*)(struct wlr_egl *, unsigned int, void *, int *, int))NULL && PyErr_Occurred())
2021-11-16T16:36:20,877           |                                              ^~~~~~~
2021-11-16T16:36:20,877     build/temp.linux-x86_64-3.9/wlroots._ffi.c:1827:10: warning: comparison of distinct pointer types lacks a cast
2021-11-16T16:36:20,878      1827 |   if (x1 == (struct wlr_renderer *(*)(struct wlr_egl *, unsigned int, void *, int *, int))NULL && PyErr_Occurred())
2021-11-16T16:36:20,879           |          ^~
2021-11-16T16:36:20,880     build/temp.linux-x86_64-3.9/wlroots._ffi.c:1832:14: error: too many arguments to function ‘wlr_backend_autocreate’
2021-11-16T16:36:20,881      1832 |   { result = wlr_backend_autocreate(x0, x1); }
2021-11-16T16:36:20,882           |              ^~~~~~~~~~~~~~~~~~~~~~
2021-11-16T16:36:20,882     In file included from build/temp.linux-x86_64-3.9/wlroots._ffi.c:570:
2021-11-16T16:36:20,883     /usr/local/include/wlr/backend.h:41:21: note: declared here
2021-11-16T16:36:20,884        41 | struct wlr_backend *wlr_backend_autocreate(struct wl_display *display);
2021-11-16T16:36:20,885           |                     ^~~~~~~~~~~~~~~~~~~~~~
2021-11-16T16:36:21,080     build/temp.linux-x86_64-3.9/wlroots._ffi.c: In function ‘_cffi_d_wlr_xdg_surface_for_each_popup’:
2021-11-16T16:36:21,084     build/temp.linux-x86_64-3.9/wlroots._ffi.c:5678:3: warning: implicit declaration of function ‘wlr_xdg_surface_for_each_popup’; did you mean ‘wlr_xdg_surface_for_each_surface’? [-Wimplicit-function-declaration]
2021-11-16T16:36:21,084      5678 |   wlr_xdg_surface_for_each_popup(x0, x1, x2);
2021-11-16T16:36:21,085           |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2021-11-16T16:36:21,085           |   wlr_xdg_surface_for_each_surface
2021-11-16T16:36:21,140     build/temp.linux-x86_64-3.9/wlroots._ffi.c: In function ‘_cffi_checkfld_struct_wlr_event_keyboard_key’:
2021-11-16T16:36:21,143     build/temp.linux-x86_64-3.9/wlroots._ffi.c:6558:31: warning: initialization of ‘enum wlr_key_state *’ from incompatible pointer type ‘enum wl_keyboard_key_state *’ [-Wincompatible-pointer-types]
2021-11-16T16:36:21,143      6558 |   { enum wlr_key_state *tmp = &p->state; (void)tmp; }
2021-11-16T16:36:21,143           |                               ^
2021-11-16T16:36:21,152     build/temp.linux-x86_64-3.9/wlroots._ffi.c: In function ‘_cffi_checkfld_struct_wlr_surface’:
2021-11-16T16:36:21,153     build/temp.linux-x86_64-3.9/wlroots._ffi.c:6877:37: warning: initialization of ‘struct wlr_surface_state *’ from incompatible pointer type ‘struct <anonymous> *’ [-Wincompatible-pointer-types]
2021-11-16T16:36:21,153      6877 |   { struct wlr_surface_state *tmp = &p->previous; (void)tmp; }
2021-11-16T16:36:21,154           |                                     ^
2021-11-16T16:36:21,157     build/temp.linux-x86_64-3.9/wlroots._ffi.c:6881:29: error: ‘struct wlr_surface’ has no member named ‘subsurfaces’
2021-11-16T16:36:21,157      6881 |   { struct wl_list *tmp = &p->subsurfaces; (void)tmp; }
2021-11-16T16:36:21,158           |                             ^~
2021-11-16T16:36:21,160     build/temp.linux-x86_64-3.9/wlroots._ffi.c:6882:29: error: ‘struct wlr_surface’ has no member named ‘subsurface_pending_list’
2021-11-16T16:36:21,160      6882 |   { struct wl_list *tmp = &p->subsurface_pending_list; (void)tmp; }
2021-11-16T16:36:21,160           |                             ^~
2021-11-16T16:36:21,161     build/temp.linux-x86_64-3.9/wlroots._ffi.c: In function ‘_cffi_checkfld_struct_wlr_surface_state’:
2021-11-16T16:36:21,163     build/temp.linux-x86_64-3.9/wlroots._ffi.c:6905:35: error: ‘struct wlr_surface_state’ has no member named ‘buffer_resource’
2021-11-16T16:36:21,164      6905 |   { struct wl_resource * *tmp = &p->buffer_resource; (void)tmp; }
2021-11-16T16:36:21,164           |                                   ^~
2021-11-16T16:36:21,167     build/temp.linux-x86_64-3.9/wlroots._ffi.c:6919:33: error: ‘struct wlr_surface_state’ has no member named ‘buffer_destroy’
2021-11-16T16:36:21,167      6919 |   { struct wl_listener *tmp = &p->buffer_destroy; (void)tmp; }
2021-11-16T16:36:21,168           |                                 ^~
2021-11-16T16:36:21,168     build/temp.linux-x86_64-3.9/wlroots._ffi.c: In function ‘_cffi_checkfld_struct_wlr_xdg_surface’:
2021-11-16T16:36:21,173     build/temp.linux-x86_64-3.9/wlroots._ffi.c:6954:14: error: ‘struct wlr_xdg_surface’ has no member named ‘configure_serial’; did you mean ‘configure_idle’?
2021-11-16T16:36:21,174      6954 |   (void)((p->configure_serial) | 0);  /* check that 'struct wlr_xdg_surface.configure_serial' is an integer */
2021-11-16T16:36:21,174           |              ^~~~~~~~~~~~~~~~
2021-11-16T16:36:21,174           |              configure_idle
2021-11-16T16:36:21,176     build/temp.linux-x86_64-3.9/wlroots._ffi.c:6956:12: error: ‘struct wlr_xdg_surface’ has no member named ‘configure_next_serial’
2021-11-16T16:36:21,177      6956 |   (void)((p->configure_next_serial) | 0);  /* check that 'struct wlr_xdg_surface.configure_next_serial' is an integer */
2021-11-16T16:36:21,177           |            ^~
2021-11-16T16:36:21,180     build/temp.linux-x86_64-3.9/wlroots._ffi.c:6958:12: error: ‘struct wlr_xdg_surface’ has no member named ‘has_next_geometry’
2021-11-16T16:36:21,180      6958 |   (void)((p->has_next_geometry) | 0);  /* check that 'struct wlr_xdg_surface.has_next_geometry' is an integer */
2021-11-16T16:36:21,180           |            ^~
2021-11-16T16:36:21,183     build/temp.linux-x86_64-3.9/wlroots._ffi.c:6959:29: error: ‘struct wlr_xdg_surface’ has no member named ‘next_geometry’
2021-11-16T16:36:21,183      6959 |   { struct wlr_box *tmp = &p->next_geometry; (void)tmp; }
2021-11-16T16:36:21,183           |                             ^~
2021-11-16T16:36:21,186     build/temp.linux-x86_64-3.9/wlroots._ffi.c:6960:29: error: ‘struct wlr_xdg_surface’ has no member named ‘geometry’
2021-11-16T16:36:21,186      6960 |   { struct wlr_box *tmp = &p->geometry; (void)tmp; }
2021-11-16T16:36:21,187           |                             ^~
2021-11-16T16:36:21,187     build/temp.linux-x86_64-3.9/wlroots._ffi.c: In function ‘_cffi_checkfld_struct_wlr_xdg_toplevel’:
2021-11-16T16:36:21,190     build/temp.linux-x86_64-3.9/wlroots._ffi.c:6978:44: error: ‘struct wlr_xdg_toplevel’ has no member named ‘client_pending’
2021-11-16T16:36:21,190      6978 |   { struct wlr_xdg_toplevel_state *tmp = &p->client_pending; (void)tmp; }
2021-11-16T16:36:21,190           |                                            ^~
2021-11-16T16:36:21,193     build/temp.linux-x86_64-3.9/wlroots._ffi.c:6979:44: error: ‘struct wlr_xdg_toplevel’ has no member named ‘server_pending’
2021-11-16T16:36:21,193      6979 |   { struct wlr_xdg_toplevel_state *tmp = &p->server_pending; (void)tmp; }
2021-11-16T16:36:21,194           |                                            ^~
2021-11-16T16:36:21,195     build/temp.linux-x86_64-3.9/wlroots._ffi.c: In function ‘_cffi_checkfld_struct_wlr_xdg_toplevel_state’:
2021-11-16T16:36:21,198     build/temp.linux-x86_64-3.9/wlroots._ffi.c:7050:34: error: ‘struct wlr_xdg_toplevel_state’ has no member named ‘fullscreen_output’
2021-11-16T16:36:21,198      7050 |   { struct wlr_output * *tmp = &p->fullscreen_output; (void)tmp; }
2021-11-16T16:36:21,198           |                                  ^~
2021-11-16T16:36:21,201     build/temp.linux-x86_64-3.9/wlroots._ffi.c:7051:33: error: ‘struct wlr_xdg_toplevel_state’ has no member named ‘fullscreen_output_destroy’
2021-11-16T16:36:21,201      7051 |   { struct wl_listener *tmp = &p->fullscreen_output_destroy; (void)tmp; }
2021-11-16T16:36:21,202           |                                 ^~
2021-11-16T16:36:21,235     In file included from build/temp.linux-x86_64-3.9/wlroots._ffi.c:61:
2021-11-16T16:36:21,236     build/temp.linux-x86_64-3.9/wlroots._ffi.c: At top level:
2021-11-16T16:36:21,239     build/temp.linux-x86_64-3.9/wlroots._ffi.c:7828:20: error: ‘struct wlr_surface’ has no member named ‘subsurfaces’
2021-11-16T16:36:21,239      7828 |   { "subsurfaces", offsetof(struct wlr_surface, subsurfaces),
2021-11-16T16:36:21,239           |                    ^~~~~~~~
2021-11-16T16:36:21,243     build/temp.linux-x86_64-3.9/wlroots._ffi.c:7829:52: error: ‘struct wlr_surface’ has no member named ‘subsurfaces’
2021-11-16T16:36:21,243      7829 |                    sizeof(((struct wlr_surface *)0)->subsurfaces),
2021-11-16T16:36:21,243           |                                                    ^~
2021-11-16T16:36:21,246     In file included from build/temp.linux-x86_64-3.9/wlroots._ffi.c:61:
2021-11-16T16:36:21,247     build/temp.linux-x86_64-3.9/wlroots._ffi.c:7831:32: error: ‘struct wlr_surface’ has no member named ‘subsurface_pending_list’
2021-11-16T16:36:21,247      7831 |   { "subsurface_pending_list", offsetof(struct wlr_surface, subsurface_pending_list),
2021-11-16T16:36:21,247           |                                ^~~~~~~~
2021-11-16T16:36:21,250     build/temp.linux-x86_64-3.9/wlroots._ffi.c:7832:64: error: ‘struct wlr_surface’ has no member named ‘subsurface_pending_list’
2021-11-16T16:36:21,250      7832 |                                sizeof(((struct wlr_surface *)0)->subsurface_pending_list),
2021-11-16T16:36:21,251           |                                                                ^~
2021-11-16T16:36:21,254     In file included from build/temp.linux-x86_64-3.9/wlroots._ffi.c:61:
2021-11-16T16:36:21,255     build/temp.linux-x86_64-3.9/wlroots._ffi.c:7852:24: error: ‘struct wlr_surface_state’ has no member named ‘buffer_resource’
2021-11-16T16:36:21,255      7852 |   { "buffer_resource", offsetof(struct wlr_surface_state, buffer_resource),
2021-11-16T16:36:21,255           |                        ^~~~~~~~
2021-11-16T16:36:21,258     build/temp.linux-x86_64-3.9/wlroots._ffi.c:7853:62: error: ‘struct wlr_surface_state’ has no member named ‘buffer_resource’
2021-11-16T16:36:21,258      7853 |                        sizeof(((struct wlr_surface_state *)0)->buffer_resource),
2021-11-16T16:36:21,259           |                                                              ^~
2021-11-16T16:36:21,263     In file included from build/temp.linux-x86_64-3.9/wlroots._ffi.c:61:
2021-11-16T16:36:21,263     build/temp.linux-x86_64-3.9/wlroots._ffi.c:7894:23: error: ‘struct wlr_surface_state’ has no member named ‘buffer_destroy’
2021-11-16T16:36:21,264      7894 |   { "buffer_destroy", offsetof(struct wlr_surface_state, buffer_destroy),
2021-11-16T16:36:21,264           |                       ^~~~~~~~
2021-11-16T16:36:21,267     build/temp.linux-x86_64-3.9/wlroots._ffi.c:7895:61: error: ‘struct wlr_surface_state’ has no member named ‘buffer_destroy’
2021-11-16T16:36:21,267      7895 |                       sizeof(((struct wlr_surface_state *)0)->buffer_destroy),
2021-11-16T16:36:21,267           |                                                             ^~
2021-11-16T16:36:21,272     In file included from build/temp.linux-x86_64-3.9/wlroots._ffi.c:61:
2021-11-16T16:36:21,273     build/temp.linux-x86_64-3.9/wlroots._ffi.c:7951:58: error: ‘struct wlr_xdg_surface’ has no member named ‘configure_serial’; did you mean ‘configure_idle’?
2021-11-16T16:36:21,273      7951 |   { "configure_serial", offsetof(struct wlr_xdg_surface, configure_serial),
2021-11-16T16:36:21,273           |                                                          ^~~~~~~~~~~~~~~~
2021-11-16T16:36:21,278     build/temp.linux-x86_64-3.9/wlroots._ffi.c:7952:63: error: ‘struct wlr_xdg_surface’ has no member named ‘configure_serial’; did you mean ‘configure_idle’?
2021-11-16T16:36:21,279      7952 |                         sizeof(((struct wlr_xdg_surface *)0)->configure_serial),
2021-11-16T16:36:21,279           |                                                               ^~~~~~~~~~~~~~~~
2021-11-16T16:36:21,279           |                                                               configure_idle
2021-11-16T16:36:21,282     In file included from build/temp.linux-x86_64-3.9/wlroots._ffi.c:61:
2021-11-16T16:36:21,283     build/temp.linux-x86_64-3.9/wlroots._ffi.c:7957:30: error: ‘struct wlr_xdg_surface’ has no member named ‘configure_next_serial’
2021-11-16T16:36:21,283      7957 |   { "configure_next_serial", offsetof(struct wlr_xdg_surface, configure_next_serial),
2021-11-16T16:36:21,283           |                              ^~~~~~~~
2021-11-16T16:36:21,286     build/temp.linux-x86_64-3.9/wlroots._ffi.c:7958:66: error: ‘struct wlr_xdg_surface’ has no member named ‘configure_next_serial’
2021-11-16T16:36:21,286      7958 |                              sizeof(((struct wlr_xdg_surface *)0)->configure_next_serial),
2021-11-16T16:36:21,287           |                                                                  ^~
2021-11-16T16:36:21,290     In file included from build/temp.linux-x86_64-3.9/wlroots._ffi.c:61:
2021-11-16T16:36:21,290     build/temp.linux-x86_64-3.9/wlroots._ffi.c:7963:26: error: ‘struct wlr_xdg_surface’ has no member named ‘has_next_geometry’
2021-11-16T16:36:21,290      7963 |   { "has_next_geometry", offsetof(struct wlr_xdg_surface, has_next_geometry),
2021-11-16T16:36:21,291           |                          ^~~~~~~~
2021-11-16T16:36:21,294     build/temp.linux-x86_64-3.9/wlroots._ffi.c:7964:62: error: ‘struct wlr_xdg_surface’ has no member named ‘has_next_geometry’
2021-11-16T16:36:21,294      7964 |                          sizeof(((struct wlr_xdg_surface *)0)->has_next_geometry),
2021-11-16T16:36:21,294           |                                                              ^~
2021-11-16T16:36:21,297     In file included from build/temp.linux-x86_64-3.9/wlroots._ffi.c:61:
2021-11-16T16:36:21,298     build/temp.linux-x86_64-3.9/wlroots._ffi.c:7966:22: error: ‘struct wlr_xdg_surface’ has no member named ‘next_geometry’
2021-11-16T16:36:21,298      7966 |   { "next_geometry", offsetof(struct wlr_xdg_surface, next_geometry),
2021-11-16T16:36:21,298           |                      ^~~~~~~~
2021-11-16T16:36:21,301     build/temp.linux-x86_64-3.9/wlroots._ffi.c:7967:58: error: ‘struct wlr_xdg_surface’ has no member named ‘next_geometry’
2021-11-16T16:36:21,302      7967 |                      sizeof(((struct wlr_xdg_surface *)0)->next_geometry),
2021-11-16T16:36:21,302           |                                                          ^~
2021-11-16T16:36:21,305     In file included from build/temp.linux-x86_64-3.9/wlroots._ffi.c:61:
2021-11-16T16:36:21,305     build/temp.linux-x86_64-3.9/wlroots._ffi.c:7969:17: error: ‘struct wlr_xdg_surface’ has no member named ‘geometry’
2021-11-16T16:36:21,306      7969 |   { "geometry", offsetof(struct wlr_xdg_surface, geometry),
2021-11-16T16:36:21,306           |                 ^~~~~~~~
2021-11-16T16:36:21,309     build/temp.linux-x86_64-3.9/wlroots._ffi.c:7970:53: error: ‘struct wlr_xdg_surface’ has no member named ‘geometry’
2021-11-16T16:36:21,309      7970 |                 sizeof(((struct wlr_xdg_surface *)0)->geometry),
2021-11-16T16:36:21,309           |                                                     ^~
2021-11-16T16:36:21,313     In file included from build/temp.linux-x86_64-3.9/wlroots._ffi.c:61:
2021-11-16T16:36:21,314     build/temp.linux-x86_64-3.9/wlroots._ffi.c:7999:23: error: ‘struct wlr_xdg_toplevel’ has no member named ‘client_pending’
2021-11-16T16:36:21,314      7999 |   { "client_pending", offsetof(struct wlr_xdg_toplevel, client_pending),
2021-11-16T16:36:21,314           |                       ^~~~~~~~
2021-11-16T16:36:21,317     build/temp.linux-x86_64-3.9/wlroots._ffi.c:8000:60: error: ‘struct wlr_xdg_toplevel’ has no member named ‘client_pending’
2021-11-16T16:36:21,318      8000 |                       sizeof(((struct wlr_xdg_toplevel *)0)->client_pending),
2021-11-16T16:36:21,318           |                                                            ^~
2021-11-16T16:36:21,321     In file included from build/temp.linux-x86_64-3.9/wlroots._ffi.c:61:
2021-11-16T16:36:21,321     build/temp.linux-x86_64-3.9/wlroots._ffi.c:8002:23: error: ‘struct wlr_xdg_toplevel’ has no member named ‘server_pending’
2021-11-16T16:36:21,321      8002 |   { "server_pending", offsetof(struct wlr_xdg_toplevel, server_pending),
2021-11-16T16:36:21,322           |                       ^~~~~~~~
2021-11-16T16:36:21,325     build/temp.linux-x86_64-3.9/wlroots._ffi.c:8003:60: error: ‘struct wlr_xdg_toplevel’ has no member named ‘server_pending’
2021-11-16T16:36:21,325      8003 |                       sizeof(((struct wlr_xdg_toplevel *)0)->server_pending),
2021-11-16T16:36:21,325           |                                                            ^~
2021-11-16T16:36:21,331     In file included from build/temp.linux-x86_64-3.9/wlroots._ffi.c:61:
2021-11-16T16:36:21,332     build/temp.linux-x86_64-3.9/wlroots._ffi.c:8095:26: error: ‘struct wlr_xdg_toplevel_state’ has no member named ‘fullscreen_output’
2021-11-16T16:36:21,332      8095 |   { "fullscreen_output", offsetof(struct wlr_xdg_toplevel_state, fullscreen_output),
2021-11-16T16:36:21,332           |                          ^~~~~~~~
2021-11-16T16:36:21,335     build/temp.linux-x86_64-3.9/wlroots._ffi.c:8096:69: error: ‘struct wlr_xdg_toplevel_state’ has no member named ‘fullscreen_output’
2021-11-16T16:36:21,335      8096 |                          sizeof(((struct wlr_xdg_toplevel_state *)0)->fullscreen_output),
2021-11-16T16:36:21,336           |                                                                     ^~
2021-11-16T16:36:21,339     In file included from build/temp.linux-x86_64-3.9/wlroots._ffi.c:61:
2021-11-16T16:36:21,339     build/temp.linux-x86_64-3.9/wlroots._ffi.c:8098:34: error: ‘struct wlr_xdg_toplevel_state’ has no member named ‘fullscreen_output_destroy’
2021-11-16T16:36:21,340      8098 |   { "fullscreen_output_destroy", offsetof(struct wlr_xdg_toplevel_state, fullscreen_output_destroy),
2021-11-16T16:36:21,340           |                                  ^~~~~~~~
2021-11-16T16:36:21,343     build/temp.linux-x86_64-3.9/wlroots._ffi.c:8099:77: error: ‘struct wlr_xdg_toplevel_state’ has no member named ‘fullscreen_output_destroy’
2021-11-16T16:36:21,343      8099 |                                  sizeof(((struct wlr_xdg_toplevel_state *)0)->fullscreen_output_destroy),
2021-11-16T16:36:21,343           |                                                                             ^~
2021-11-16T16:36:21,361     build/temp.linux-x86_64-3.9/wlroots._ffi.c:8564:49: error: invalid application of ‘sizeof’ to incomplete type ‘enum wlr_key_state’
2021-11-16T16:36:21,361      8564 |   { "wlr_key_state", 412, _cffi_prim_int(sizeof(enum wlr_key_state), ((enum wlr_key_state)-1) <= 0),
2021-11-16T16:36:21,361           |                                                 ^~~~
2021-11-16T16:36:21,362     build/temp.linux-x86_64-3.9/wlroots._ffi.c:541:7: note: in definition of macro ‘_cffi_prim_int’
2021-11-16T16:36:21,362       541 |     ((size) == 1 ? ((sign) ? _CFFI_PRIM_INT8  : _CFFI_PRIM_UINT8)  :    \
2021-11-16T16:36:21,362           |       ^~~~
2021-11-16T16:36:21,365     build/temp.linux-x86_64-3.9/wlroots._ffi.c:8564:77: error: conversion to incomplete type
2021-11-16T16:36:21,366      8564 |   { "wlr_key_state", 412, _cffi_prim_int(sizeof(enum wlr_key_state), ((enum wlr_key_state)-1) <= 0),
2021-11-16T16:36:21,366           |                                                                             ^~~~~~~~~~~~~
2021-11-16T16:36:21,366     build/temp.linux-x86_64-3.9/wlroots._ffi.c:541:22: note: in definition of macro ‘_cffi_prim_int’
2021-11-16T16:36:21,366       541 |     ((size) == 1 ? ((sign) ? _CFFI_PRIM_INT8  : _CFFI_PRIM_UINT8)  :    \
2021-11-16T16:36:21,366           |                      ^~~~
2021-11-16T16:36:21,370     build/temp.linux-x86_64-3.9/wlroots._ffi.c:8564:49: error: invalid application of ‘sizeof’ to incomplete type ‘enum wlr_key_state’
2021-11-16T16:36:21,371      8564 |   { "wlr_key_state", 412, _cffi_prim_int(sizeof(enum wlr_key_state), ((enum wlr_key_state)-1) <= 0),
2021-11-16T16:36:21,371           |                                                 ^~~~
2021-11-16T16:36:21,371     build/temp.linux-x86_64-3.9/wlroots._ffi.c:542:7: note: in definition of macro ‘_cffi_prim_int’
2021-11-16T16:36:21,371       542 |      (size) == 2 ? ((sign) ? _CFFI_PRIM_INT16 : _CFFI_PRIM_UINT16) :    \
2021-11-16T16:36:21,371           |       ^~~~
2021-11-16T16:36:21,375     build/temp.linux-x86_64-3.9/wlroots._ffi.c:8564:77: error: conversion to incomplete type
2021-11-16T16:36:21,375      8564 |   { "wlr_key_state", 412, _cffi_prim_int(sizeof(enum wlr_key_state), ((enum wlr_key_state)-1) <= 0),
2021-11-16T16:36:21,375           |                                                                             ^~~~~~~~~~~~~
2021-11-16T16:36:21,376     build/temp.linux-x86_64-3.9/wlroots._ffi.c:542:22: note: in definition of macro ‘_cffi_prim_int’
2021-11-16T16:36:21,376       542 |      (size) == 2 ? ((sign) ? _CFFI_PRIM_INT16 : _CFFI_PRIM_UINT16) :    \
2021-11-16T16:36:21,376           |                      ^~~~
2021-11-16T16:36:21,379     build/temp.linux-x86_64-3.9/wlroots._ffi.c:8564:49: error: invalid application of ‘sizeof’ to incomplete type ‘enum wlr_key_state’
2021-11-16T16:36:21,380      8564 |   { "wlr_key_state", 412, _cffi_prim_int(sizeof(enum wlr_key_state), ((enum wlr_key_state)-1) <= 0),
2021-11-16T16:36:21,380           |                                                 ^~~~
2021-11-16T16:36:21,380     build/temp.linux-x86_64-3.9/wlroots._ffi.c:543:7: note: in definition of macro ‘_cffi_prim_int’
2021-11-16T16:36:21,380       543 |      (size) == 4 ? ((sign) ? _CFFI_PRIM_INT32 : _CFFI_PRIM_UINT32) :    \
2021-11-16T16:36:21,381           |       ^~~~
2021-11-16T16:36:21,384     build/temp.linux-x86_64-3.9/wlroots._ffi.c:8564:77: error: conversion to incomplete type
2021-11-16T16:36:21,384      8564 |   { "wlr_key_state", 412, _cffi_prim_int(sizeof(enum wlr_key_state), ((enum wlr_key_state)-1) <= 0),
2021-11-16T16:36:21,385           |                                                                             ^~~~~~~~~~~~~
2021-11-16T16:36:21,385     build/temp.linux-x86_64-3.9/wlroots._ffi.c:543:22: note: in definition of macro ‘_cffi_prim_int’
2021-11-16T16:36:21,385       543 |      (size) == 4 ? ((sign) ? _CFFI_PRIM_INT32 : _CFFI_PRIM_UINT32) :    \
2021-11-16T16:36:21,385           |                      ^~~~
2021-11-16T16:36:21,389     build/temp.linux-x86_64-3.9/wlroots._ffi.c:8564:49: error: invalid application of ‘sizeof’ to incomplete type ‘enum wlr_key_state’
2021-11-16T16:36:21,389      8564 |   { "wlr_key_state", 412, _cffi_prim_int(sizeof(enum wlr_key_state), ((enum wlr_key_state)-1) <= 0),
2021-11-16T16:36:21,389           |                                                 ^~~~
2021-11-16T16:36:21,389     build/temp.linux-x86_64-3.9/wlroots._ffi.c:544:7: note: in definition of macro ‘_cffi_prim_int’
2021-11-16T16:36:21,390       544 |      (size) == 8 ? ((sign) ? _CFFI_PRIM_INT64 : _CFFI_PRIM_UINT64) :    \
2021-11-16T16:36:21,390           |       ^~~~
2021-11-16T16:36:21,393     build/temp.linux-x86_64-3.9/wlroots._ffi.c:8564:77: error: conversion to incomplete type
2021-11-16T16:36:21,394      8564 |   { "wlr_key_state", 412, _cffi_prim_int(sizeof(enum wlr_key_state), ((enum wlr_key_state)-1) <= 0),
2021-11-16T16:36:21,394           |                                                                             ^~~~~~~~~~~~~
2021-11-16T16:36:21,394     build/temp.linux-x86_64-3.9/wlroots._ffi.c:544:22: note: in definition of macro ‘_cffi_prim_int’
2021-11-16T16:36:21,394       544 |      (size) == 8 ? ((sign) ? _CFFI_PRIM_INT64 : _CFFI_PRIM_UINT64) :    \
2021-11-16T16:36:21,395           |                      ^~~~
2021-11-16T16:36:21,477     error: command '/usr/bin/x86_64-linux-gnu-gcc' failed with exit code 1
2021-11-16T16:36:21,591 ERROR: Command errored out with exit status 1: /usr/bin/python3 -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-b3cqmuw9/pywlroots_7cf9620257f74a229069820f234b8226/setup.py'"'"'; __file__='"'"'/tmp/pip-install-b3cqmuw9/pywlroots_7cf9620257f74a229069820f234b8226/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /tmp/pip-record-_9in_rf5/install-record.txt --single-version-externally-managed --user --prefix= --compile --install-headers /home/kiko/.local/include/python3.9/pywlroots Check the logs for full command output.
2021-11-16T16:36:21,592 Exception information:
2021-11-16T16:36:21,592 Traceback (most recent call last):
2021-11-16T16:36:21,592   File "/usr/lib/python3/dist-packages/pip/_internal/req/req_install.py", line 848, in install
2021-11-16T16:36:21,592     success = install_legacy(
2021-11-16T16:36:21,592   File "/usr/lib/python3/dist-packages/pip/_internal/operations/install/legacy.py", line 86, in install
2021-11-16T16:36:21,592     raise LegacyInstallFailure
2021-11-16T16:36:21,592 pip._internal.operations.install.legacy.LegacyInstallFailure
2021-11-16T16:36:21,592 
2021-11-16T16:36:21,592 During handling of the above exception, another exception occurred:
2021-11-16T16:36:21,592 
2021-11-16T16:36:21,592 Traceback (most recent call last):
2021-11-16T16:36:21,592   File "/usr/lib/python3/dist-packages/pip/_internal/cli/base_command.py", line 223, in _main
2021-11-16T16:36:21,592     status = self.run(options, args)
2021-11-16T16:36:21,592   File "/usr/lib/python3/dist-packages/pip/_internal/cli/req_command.py", line 180, in wrapper
2021-11-16T16:36:21,592     return func(self, options, args)
2021-11-16T16:36:21,592   File "/usr/lib/python3/dist-packages/pip/_internal/commands/install.py", line 421, in run
2021-11-16T16:36:21,592     installed = install_given_reqs(
2021-11-16T16:36:21,592   File "/usr/lib/python3/dist-packages/pip/_internal/req/__init__.py", line 82, in install_given_reqs
2021-11-16T16:36:21,592     requirement.install(
2021-11-16T16:36:21,592   File "/usr/lib/python3/dist-packages/pip/_internal/req/req_install.py", line 866, in install
2021-11-16T16:36:21,592     six.reraise(*exc.parent)
2021-11-16T16:36:21,592   File "/usr/share/python-wheels/six-1.16.0-py2.py3-none-any.whl/six.py", line 719, in reraise
2021-11-16T16:36:21,592     raise value
2021-11-16T16:36:21,592   File "/usr/lib/python3/dist-packages/pip/_internal/operations/install/legacy.py", line 74, in install
2021-11-16T16:36:21,592     runner(
2021-11-16T16:36:21,592   File "/usr/lib/python3/dist-packages/pip/_internal/utils/subprocess.py", line 292, in runner
2021-11-16T16:36:21,592     call_subprocess(
2021-11-16T16:36:21,592   File "/usr/lib/python3/dist-packages/pip/_internal/utils/subprocess.py", line 261, in call_subprocess
2021-11-16T16:36:21,592     raise InstallationSubprocessError(proc.returncode, command_desc)
2021-11-16T16:36:21,592 pip._internal.exceptions.InstallationSubprocessError: Command errored out with exit status 1: /usr/bin/python3 -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-b3cqmuw9/pywlroots_7cf9620257f74a229069820f234b8226/setup.py'"'"'; __file__='"'"'/tmp/pip-install-b3cqmuw9/pywlroots_7cf9620257f74a229069820f234b8226/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /tmp/pip-record-_9in_rf5/install-record.txt --single-version-externally-managed --user --prefix= --compile --install-headers /home/kiko/.local/include/python3.9/pywlroots Check the logs for full command output.
2021-11-16T16:36:21,677 Removed build tracker: '/tmp/pip-req-tracker-1zz9nw25'```

I don't know what to do or why it errored out. Any help would be appreciated.
Sorry for the long post btw. I thought it would be better to include the whole logs.

Edit: I got this error after compiling wlroots because i got an error with the `libwlroots-dev` and `libwlroots7` packages on ubuntu and i thought the error was because the packages are on version `0.12.0` and pywlroots is on version `0.14.10`.

Unable to pip install pywlroots if cffi and associated dependencies aren't installed

This is flagged from the discussion in qtile/qtile#2933.

Basically, cffi and the other cffi-based dependencies need to be installed during the setup phase. This can be done with setup_requires (rather than the current solution which is using install_requires), but this then causes failures in the github actions job that pushes to pypi because even sdist will require having these packages installed (and by extension all of the dev libraries to build and install everything). Using build_system doesn't seem to generate a package that correctly installs the deps.

wlroots 0.17.0

Upstream changes for the next release are recorded here: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3527

This thread is for tracking our corresponding changes. I'll start making PRs against a wlroots-next branch with changes listed there, and when I do so I'll list them here too. Thus anything mentioned on their thread and not here is a TODO (and PRs welcome!).

Implemented:

Lots of similar properties in Ptr classes

Lots of the Ptr classes have properties that get and sometimes set attributes that belong to their _ptr attribute. Others do the same thing but wrapped with another Ptr class, where the getter returns e.g. Output(self._ptr.output), and would set with self._ptr.<attr> = value._ptr.

We could simplify the layout of the code and reduce the need for us to manually write up lots of similar properties (which is error-prone).

Here is an example implementation:

diff --git a/wlroots/__init__.py b/wlroots/__init__.py
index 0fc0d1e..649d77b 100644
--- a/wlroots/__init__.py
+++ b/wlroots/__init__.py
@@ -28,3 +28,43 @@ class Ptr:
     def __hash__(self) -> int:
         """Use the hash from `object`, which is unique per object"""
         return super().__hash__()
+
+    @staticmethod
+    def _ptr_property(attr, immutable=False, wrapper=None, doc=None):
+        """
+        Create a property that proxies an attribute on the pointer.
+
+        :param attr:
+            The name of the attribute on the pointer.
+        :param immutable:
+            If True, no setter is added.
+        :param wrapper:
+            Another Ptr subclass which wraps the attribute on the pointer. The getter
+            will wrap the returned pointer with this, and the setter will set the
+            pointer's attribute with the pointer from the wrapper.
+        :param doc:
+            A docstring to add to the property. If not provided, the attribute name is
+            used.
+        """
+        if wrapper:
+            # getter and setter proxied by the wrapper
+            def getter(self):
+                return wrapper(getattr(self._ptr, attr))
+
+            if not immutable:
+                def setter(self):
+                    setattr(self._ptr, attr, value._ptr)
+
+        else:
+            # getter and setter accessing attribute directly
+            def getter(self):
+                return getattr(self._ptr, attr)
+
+            if not immutable:
+                def setter(self, value):
+                    setattr(self._ptr, attr, value)
+
+        if immutable:
+            setter = None
+
+        return property(fget=getter, fset=setter, doc=doc or attr)

A simple example use-case:

class OutputMode(Ptr):
    def __init__(self, ptr) -> None:
        self._ptr = ptr

    width = Ptr._ptr_property("width")
    height = Ptr._ptr_property("height")
    refresh = Ptr._ptr_property("refresh")
    preferred = Ptr._ptr_property("preferred")

A more complex example use-case:

class KeyboardKeyEvent(Ptr):
    def __init__(self, ptr) -> None:
        """Event that a key has been pressed or release

        This event is emitted before the xkb state of the keyboard has been
        updated (including modifiers).
        """
        self._ptr = ffi.cast("struct wlr_event_keyboard_key *", ptr)

    time_msec = Ptr._ptr_property("time_msec", immutable=True, doc="Time of the key event")
    keycode = Ptr._ptr_property("keycode", immutable=True, doc="Keycode triggering the event")
    update_state = Ptr._ptr_property(
        "update_state", immutable=True, doc="If backend doesn't update modifiers on its own"
    )
    state = Ptr._ptr_property(
        "state", immutable=True, wrapper=WlKeyboard.key_state,
        doc="The state of the keycode triggering the event"
    )

I post these two examples because this idea started off from the simple example, which I thought looked nice, but it was pretty limited so I then added immutable, then wrapper, then doc when I came across existing properties that needed these. Then when we get to the more complex example the readability takes a hit, so I'm not 100% certain of it's even desired.

I'm throwing this out there as an idea in case it's worth discussing whether we should implement something like this, and how. Also working on this it became more clear how formulaic a lot of the code is, which is making me a bit more interested in an auto-generated approach, which'd be awesome.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.