#global _without_mesa_glvnd_default 1 %{?_without_mesa_glvnd_default: %if (0%{?mgaver} <= 8) %{?filter_setup: %filter_provides_in %{_libdir}/%{name} %filter_requires_in %{_libdir}/%{name} %filter_setup } %else %global __provides_exclude_from %{_libdir}/%{name} %global __requires_exclude_from %{_libdir}/%{name} %endif } %global optflags %{optflags} -O3 -Wstrict-aliasing=0 %define major 0 %define libgldispatch %mklibname gldispatch %{major} %define libopengl %mklibname opengl %{major} %define devname %mklibname glvnd -d %define libEGL_major 1 %define libEGL %mklibname egl %{libEGL_major} %define libGLdispatch_major 0 %define libGLdispatch %mklibname gldispatch %{libGLdispatch_major} %define libGLESv1_major 1 %define libGLESv1 %mklibname glesv1_cm %{libGLESv1_major} %define libGLESv2_major 2 %define libGLESv2 %mklibname glesv2 %{libGLESv2_major} %define libGL_major 1 %define libGL %mklibname gl %{libGL_major} %define libGLX_major 0 %define libGLX %mklibname glx %{libGLX_major} %define libOpenGL_major 0 %define libOpenGL %mklibname opengl %{libOpenGL_major} %define libGLmesaname %mklibname mesagl %{libGL_major} %define libEGLmesaname %mklibname mesaegl %{libEGL_major} %global commit0 faa23f21fc677af5792825dc30cb1ccef4bf33a6 %global shortcommit0 %(c=%{commit0}; echo ${c:0:7}) Name: libglvnd Version: 1.7.0 Release: %mkrel 3 Summary: The GL Vendor-Neutral Dispatch library License: MIT Group: System/Libraries URL: https://gitlab.freedesktop.org/glvnd/libglvnd Source0: https://gitlab.freedesktop.org/glvnd/libglvnd/-/archive/v%{version}/%{name}-%{version}.tar.gz # From https://src.fedoraproject.org/rpms/libglvnd/blob/master/f/0001-glx-Add-another-fallback-library-name.patch # (remember to provide the soft link in mesa). Patch1: 0001-glx-Add-another-fallback-library-name.patch # from git upstream Patch0100: 0002-EGL-Fix-error-reporting-for-EGL_PLATFORM_DEVICE_EXT.patch Patch0101: 0003-meson.build-wire-loongarch64_tsd-dispatch-type.patch Patch0102: 0004-configure.ac-enable-64-bit-file-API-where-availablie.patch Patch0103: 0005-tests-Add-_GLOBAL_OFFSET_TABLE_-to-PLATFORM_SYMBOLS.patch Patch0104: 0006-Haiku-guard-calls-to-fRenderer-in-HGL.patch BuildRequires: meson BuildRequires: python-libxml2 BuildRequires: pkgconfig(glproto) BuildRequires: pkgconfig(x11) BuildRequires: pkgconfig(xext) BuildRequires: x11-server-xvfb %description libglvnd is an implementation of the vendor-neutral dispatch layer for arbitrating OpenGL API calls between multiple vendors on a per-screen basis. %files %doc README.md src/EGL/icd_enumeration.md %dir %{_sysconfdir}/glvnd %dir %{_sysconfdir}/glvnd/egl_vendor.d %dir %{_datadir}/glvnd %dir %{_datadir}/glvnd/egl_vendor.d %dir %{_sysconfdir}/egl %dir %{_sysconfdir}/egl/egl_external_platform.d/ %dir %{_datadir}/egl %dir %{_datadir}/egl/egl_external_platform.d/ #---------------------------------------------------------------------------- %package -n %{libEGL} Summary: LibEGL wrapper from libglvnd Provides: %{name}-egl%{?_isa} = %{EVRD} Provides: %{name}-egl = %{EVRD} Requires: %{name} = %{EVRD} # this creates a loop, remember to remove the following dep when bootstrapping libglvnd from a non-glvnd mesa Requires: %{libEGLmesaname} >= 20.1.4 Conflicts: %{_lib}mesaegl < 20.3.0-1 %description -n %{libEGL} LibEGL wrapper from libglvnd. %files -n %{libEGL} %if 0%{?_without_mesa_glvnd_default} %{_libdir}/%name/libEGL.so.%{libEGL_major}{,.*} %else %{_libdir}/libEGL.so.%{libEGL_major}{,.*} %endif #---------------------------------------------------------------------------- %package -n %{libGLdispatch} Summary: LibGL dispatcher from libglvnd Requires: %{libGL} = %{EVRD} Provides: %{name}-GLdispatch%{?_isa} = %{EVRD} Requires: %{name} = %{EVRD} %description -n %{libGLdispatch} LibGL dispatcher from libglvnd. %files -n %{libGLdispatch} %{_libdir}/libGLdispatch.so.%{libGLdispatch_major}{,.*} #---------------------------------------------------------------------------- %package -n %{libGLESv1} Summary: LibGLESv1 wrapper from libglvnd Provides: %{name}-GLESv1_CM%{?_isa} = %{EVRD} Requires: %{name} = %{EVRD} Conflicts: %{_lib}mesaglesv1_1 < 20.3.0-1 %description -n %{libGLESv1} LibGLESv1 wrapper from libglvnd. %files -n %{libGLESv1} %if 0%{?_without_mesa_glvnd_default} %{_libdir}/%name/libGLESv1_CM.so.%{libGLESv1_major}{,.*} %else %{_libdir}/libGLESv1_CM.so.%{libGLESv1_major}{,.*} %endif #---------------------------------------------------------------------------- %package -n %{libGLESv2} Summary: LibGLESv2 wrapper from libglvnd Provides: %{name}-GLESv2%{?_isa} = %{EVRD} Requires: %{name} = %{EVRD} Conflicts: %{_lib}mesaglesv2_2 < 20.3.0-1 %description -n %{libGLESv2} LibGLESv2 wrapper from libglvnd. %files -n %{libGLESv2} %if 0%{?_without_mesa_glvnd_default} %{_libdir}/%name/libGLESv2.so.%{libGLESv2_major}{,.*} %else %{_libdir}/libGLESv2.so.%{libGLESv2_major}{,.*} %endif #---------------------------------------------------------------------------- %package -n %{libGL} Summary: LibGL wrapper from libglvnd Provides: %{name}-GL%{?_isa} = %{EVRD} Requires: %{name} = %{EVRD} # this creates a loop, remember to remove the following dep when bootstrapping libglvnd from a non-glvnd mesa Requires: %{libGLmesaname} >= 20.1.4 Conflicts: %{_lib}mesagl1 < 20.3.0-1 %description -n %{libGL} LibGL wrapper from libglvnd. %files -n %{libGL} %if 0%{?_without_mesa_glvnd_default} %{_libdir}/%name/libGL.so.%{libGL_major}{,.*} %else %{_libdir}/libGL.so.%{libGL_major}{,.*} %endif #---------------------------------------------------------------------------- %package -n %{libGLX} Summary: LibGLX wrapper from libglvnd Provides: %{name}-GLX%{?_isa} = %{EVRD} Requires: %{name} = %{EVRD} %description -n %{libGLX} LibGLX wrapper from libglvnd. %files -n %{libGLX} %if 0%{?_without_mesa_glvnd_default} %{_libdir}/%name/libGLX.so.%{libGLX_major}{,.*} %else %{_libdir}/libGLX.so.%{libGLX_major}{,.*} %endif #---------------------------------------------------------------------------- %package -n %{libOpenGL} Summary: OpenGL wrapper from libglvnd Provides: %{name}-OpenGL%{?_isa} = %{EVRD} Provides: %{name}-GL = %{EVRD} Requires: %{name} = %{EVRD} %description -n %{libOpenGL} OpenGL wrapper from libglvnd. %files -n %{libOpenGL} %{_libdir}/libOpenGL.so.%{libOpenGL_major}{,.*} #---------------------------------------------------------------------------- %package -n %{devname} Summary: Development files for %{name} Group: Development/C Requires: %{name} = %{EVRD} Requires: %{libEGL} = %{EVRD} Requires: %{libGLdispatch} = %{EVRD} Requires: %{libGLESv1} = %{EVRD} Requires: %{libGLESv2} = %{EVRD} Requires: %{libGL} = %{EVRD} Requires: %{libGLX} = %{EVRD} Requires: %{libOpenGL} = %{EVRD} # Pull in Mesa for OpenGL headers Requires: pkgconfig(gl) # EGL headers include Requires: pkgconfig(x11) Provides: GL-devel Provides: EGL-devel Conflicts: %{_lib}mesaegl1-devel < 20.3.0-1 Conflicts: %{_lib}mesagl1-devel < 20.3.0-1 %description -n %{devname} This package is a bootstrap trick for Mesa, which wants to build against the libglvnd headers but does not link against any of its libraries (and, initially, has file conflicts with them). %files -n %{devname} %dir %{_includedir}/glvnd %{_includedir}/glvnd/*.h %dir %{_includedir}/EGL %{_includedir}/EGL/*.h %dir %{_includedir}/GL %{_includedir}/GL/*.h %dir %{_includedir}/GLES %{_includedir}/GLES/*.h %dir %{_includedir}/GLES2 %{_includedir}/GLES2/*.h %dir %{_includedir}/GLES3 %{_includedir}/GLES3/*.h %dir %{_includedir}/KHR %{_includedir}/KHR/*.h %{_libdir}/pkgconfig/*.pc %if 0%{?_without_mesa_glvnd_default} %{_libdir}/%name/libEGL.so %{_libdir}/libGLdispatch.so %{_libdir}/%name/libGLX.so %{_libdir}/%name/libGL.so %{_libdir}/%name/libGLESv1_CM.so %{_libdir}/%name/libGLESv2.so %{_libdir}/libOpenGL.so %else %{_libdir}/libEGL.so %{_libdir}/libGLdispatch.so %{_libdir}/libGLX.so %{_libdir}/libGL.so %{_libdir}/libGLESv1_CM.so %{_libdir}/libGLESv2.so %{_libdir}/libOpenGL.so %endif #---------------------------------------------------------------------------- %prep %autosetup -p1 -n %{name}-v%{version}-%{?commit0}%{?!commit0:%nil} %build %meson \ %ifnarch riscv -Dasm=enabled \ %else -Dasm=disabled \ %endif -Dx11=enabled \ -Dglx=enabled \ -Dtls=true %meson_build %install %meson_install %{?_without_mesa_glvnd_default: # Avoid conflict with mesa-libGL mkdir -p %{buildroot}%{_libdir}/%{name}/ for l in libEGL libGL libGLESv1_CM libGLESv2 libGLX; do mv %{buildroot}%{_libdir}/${l}.so* \ %{buildroot}%{_libdir}/%{name}/ done } # Create directory layout mkdir -p %{buildroot}%{_sysconfdir}/glvnd/egl_vendor.d mkdir -p %{buildroot}%{_datadir}/glvnd/egl_vendor.d mkdir -p %{buildroot}%{_sysconfdir}/egl/egl_external_platform.d mkdir -p %{buildroot}%{_datadir}/egl/egl_external_platform.d %check export DO_X11_TESTS=1 # Sometimes the xvfb-run fails to start correctly on the building system, and # thus the test fails. If that occurs just resubmit the package. xvfb-run -a ninja test -j 1 -C %{_vpath_builddir}