flacjacket / pywlroots

Python binding to the wlroots library using cffi
University of Illinois/NCSA Open Source License
51 stars 12 forks source link

pywlroots wheel contains unnecessary libs #182

Open heuer opened 4 months ago

heuer commented 4 months ago

I updated my project to pywlroots 0.16.7 and got the following error:

DRI driver not from this Mesa build ('24.0.5' vs '23.1.4')
failed to bind extensions
DRI driver not from this Mesa build ('24.0.5' vs '23.1.4')
failed to bind extensions
DRI driver not from this Mesa build ('24.0.5' vs '23.1.4')
failed to bind extensions
DRI driver not from this Mesa build ('24.0.5' vs '23.1.4')
failed to bind extensions
[render/allocator/gbm.c:205] gbm_create_device failed
[render/allocator/allocator.c:143] Failed to create allocator
Fatal Python error: Segmentation fault

Current thread 0x00007fbe730fe740 (most recent call first):
  <no Python frame>

Extension modules: _cffi_backend (total: 1)

Installing from the source package works:

pip install --no-binary :all: pywlroots

The reason for the above mentioned error is, that the wheel provides libs which do not necessarily match the host machine:

ls pywlroots.libs
libblkid-7ac37cd8.so.1.1.0           libgpg-error-d4e115d0.so.0.24.2  libseat-a44803ed.so.1                 libxcb-dri3-74eae955.so.0.0.0
libcap-16fca4d2.so.2.48              libgudev-1-78686337.0.so.0.2.0   libselinux-64a010fa.so.1              libxcb-icccm-9453e4f7.so.4.0.0
libdrm-6768d3b2.so.2.4.0             libhogweed-cd4c53be.so.4.5       libsystemd-8bc3ba84.so.0.23.0         libxcb-present-9d0789f6.so.0.0.0
libEGL-976e38d5.so.1.1.0             libidn2-2f4a5893.so.0.3.6        libtasn1-222cca92.so.6.5.5            libxcb-randr-562554c2.so.0.1.0
libevdev-bed09dca.so.2.3.0           libinput-a3c39512.so.10.13.0     libudev-6ca67360.so.1.6.11            libxcb-render-161c0eb5.so.0.0.0
libffi-3a37023a.so.6.0.2             liblz4-a5753129.so.1.8.3         libunistring-05abdd40.so.2.1.0        libxcb-render-util-f04ad2c5.so.0.0.0
libgbm-d69d73a7.so.1.0.0             liblzma-51a76f52.so.5.2.4        libuuid-48d6f845.so.1.3.0             libxcb-res-d1051bd6.so.0.0.0
libgcrypt-a1b5cc4c.so.20.2.5         libmount-a0fce023.so.1.1.0       libwacom-a563e81a.so.2.6.1            libxcb-shm-0be6dfbf.so.0.0.0
libgio-2-fbc401ee.0.so.0.5600.4      libmtdev-95d9e17e.so.1.0.0       libwayland-client-4f0c8158.so.0.22.0  libxcb-xfixes-6de855b8.so.0.0.0
libGLdispatch-228223fa.so.0.0.0      libnettle-37944285.so.6.5        libwayland-server-ba005aa1.so.0.22.0  libxcb-xinput-5c69f591.so.0.1.0
libGLESv2-3f2b8a3d.so.2.1.0          libp11-kit-4d4a5b6d.so.0.3.0     libwlroots-9afe2e70.so.11             libxkbcommon-de59cad2.so.0.0.0
libgmodule-2-b0ca77de.0.so.0.5600.4  libpcre-0dd207b5.so.1.2.10       libXau-154567c4.so.6.0.0
libgmp-452f15e0.so.10.3.2            libpcre2-8-516f4c9d.so.0.7.1     libxcb-5ddf6756.so.1.1.0
libgnutls-5ac79744.so.30.28.2        libpixman-1-af926b34.so.0.42.0   libxcb-composite-84417425.so.0.0.0

Solution: Remove the libs from the wheel.

heuer commented 4 months ago

Hmmm... I looked at the previous releases: pywlroots always had the "libs" directory with the libraries... Strange that this wasn't a problem for my installation before.

heuer commented 4 months ago

The pywlroots-0.16.7-cp311-cp311-linux_aarch64.whl comes w/o the libs.

It just contains the _ffi.abi3.so (in the wlroots directory):

drwxr-xr-x 5 user user    4096 17. Apr 18:24 .
drwxr-xr-x 3 user user    4096 17. Apr 18:25 ..
-rw-r--r-- 1 user user    1200 17. Apr 03:39 allocator.py
-rw-r--r-- 1 user user    3979 17. Apr 03:39 backend.py
-rw-r--r-- 1 user user      20 17. Apr 07:45 _build.py
-rwxr-xr-x 1 user user 1092288 17. Apr 07:45 _ffi.abi3.so
-rw-r--r-- 1 user user   95775 17. Apr 03:39 ffi_build.py
-rw-r--r-- 1 user user    1150 17. Apr 03:39 helper.py
drwxr-xr-x 2 user user    4096 17. Apr 18:24 include
-rw-r--r-- 1 user user    2650 17. Apr 03:39 __init__.py
-rw-r--r-- 1 user user       0 17. Apr 03:39 py.typed
-rw-r--r-- 1 user user    3934 17. Apr 03:39 renderer.py
drwxr-xr-x 2 user user    4096 17. Apr 18:24 util
-rw-r--r-- 1 user user      50 17. Apr 03:39 version.py
drwxr-xr-x 2 user user    4096 17. Apr 18:24 wlr_types
-rw-r--r-- 1 user user   13827 17. Apr 03:39 xwayland.py

So, I wonder why other wheels ship with the libs

heuer commented 4 months ago

pywlroots 0.16.8 has the same problem. I cannot install pywlroots with pip unless I explicitly specify that the source code package should be used because the shipped libraries in the /lib subdirectory are incompatible with my system. And libraries like "libsystemd" or "libselinux" have nothing to do with the function of wlroots/pywlroots.

Aside from the fact that the libraries may be incompatible with the host system, this could also pose legal problems since pywlroots is under the NCSA license, which may not apply to all libraries distributed with pywlroots.

heuer commented 4 months ago

Still relevant for 0.17