File libglvnd.spec of Package libglvnd

%define realname libglvnd
%define realver  1.7.0
%define srcext   tar.gz

%if 0%{?rhel}
Epoch:         1
%endif

# Common info
Name:          %{realname}
Version:       %{realver}
Release:       wiz%{?extraver:0.}1
License:       MIT
Group:         System/Libraries
URL:           https://github.com/NVIDIA/libglvnd
Summary:       The GL Vendor-Neutral Dispatch library

# Install-time parameters
%if 0%{?rhel}
Provides:      mesa-libEGL  = %{?epoch:%{epoch}:}%{version}-%{release}
Provides:      mesa-libGLES = %{?epoch:%{epoch}:}%{version}-%{release}

Provides:      mesa-libEGL(%{__isa_name}-%{__isa_bits})  = %{?epoch:%{epoch}:}%{version}-%{release}
Provides:      mesa-libGLES(%{__isa_name}-%{__isa_bits}) = %{?epoch:%{epoch}:}%{version}-%{release}

Provides:      libglvnd-egl    = %{?epoch:%{epoch}:}%{version}-%{release}
Provides:      libglvnd-gles   = %{?epoch:%{epoch}:}%{version}-%{release}
Provides:      libglvnd-glx    = %{?epoch:%{epoch}:}%{version}-%{release}
Provides:      libglvnd-opengl = %{?epoch:%{epoch}:}%{version}-%{release}

Provides:      libglvnd-egl(%{__isa_name}-%{__isa_bits})    = %{?epoch:%{epoch}:}%{version}-%{release}
Provides:      libglvnd-gles(%{__isa_name}-%{__isa_bits})   = %{?epoch:%{epoch}:}%{version}-%{release}
Provides:      libglvnd-glx(%{__isa_name}-%{__isa_bits})    = %{?epoch:%{epoch}:}%{version}-%{release}
Provides:      libglvnd-opengl(%{__isa_name}-%{__isa_bits}) = %{?epoch:%{epoch}:}%{version}-%{release}

Obsoletes:     mesa-libEGL  < %{?epoch:%{epoch}:}%{version}-%{release}
Obsoletes:     mesa-libGLES < %{?epoch:%{epoch}:}%{version}-%{release}

Obsoletes:     libglvnd-egl    < %{?epoch:%{epoch}:}%{version}-%{release}
Obsoletes:     libglvnd-gles   < %{?epoch:%{epoch}:}%{version}-%{release}
Obsoletes:     libglvnd-glx    < %{?epoch:%{epoch}:}%{version}-%{release}
Obsoletes:     libglvnd-opengl < %{?epoch:%{epoch}:}%{version}-%{release}
%endif

# Build-time parameters
BuildRequires: meson >= 0.48 ninja >= 1.5.1
BuildRequires: pkg-config
BuildRequires: pkgconfig(x11) pkgconfig(xext) pkgconfig(glproto)
BuildRoot:     %{_tmppath}/%{name}-root
Source:        https://github.com/NVIDIA/libglvnd/archive/refs/tags/v%{realver}%{?extraver}.%{srcext}#/%{realname}-%{realver}%{?extraver}.%{srcext}

%description
libglvnd is a vendor-neutral dispatch layer for arbitrating OpenGL API calls
between multiple vendors. It allows multiple drivers from different vendors
to coexist on the same filesystem, and determines which vendor to dispatch
each API call to at runtime.

Both GLX and EGL are supported, in any combination with OpenGL and OpenGL ES.

%package -n %{realname}-devel
Group:         Development/Languages/C and C++
Summary:       Development files for %{realname}
Requires:      %{name} = %{?epoch:%{epoch}:}%{version}-%{release}
Provides:      %{name}-devel = %{?epoch:%{epoch}:}%{version}-%{release}
Provides:      %{realname}-devel = %{?epoch:%{epoch}:}%{version}-%{release}
%if 0%{?rhel}
Requires:      mesa-khr-devel
%else
Requires:      Mesa-KHR-devel
%endif

%description -n %{realname}-devel
Headers and libraries required to build software using %{realname}.

%package -n %{realname}-compat-devel
Group:         Development/Languages/C and C++
Summary:       Mesa-like development files for %{realname}
Requires:      %{name} = %{?epoch:%{epoch}:}%{version}-%{release}
Requires:      %{realname}-devel = %{?epoch:%{epoch}:}%{version}-%{release}
Provides:      libEGL-devel       = %{?epoch:%{epoch}:}%{version}-%{release}
Provides:      libGL-devel        = %{?epoch:%{epoch}:}%{version}-%{release}
Provides:      libGLESv1_CM-devel = %{?epoch:%{epoch}:}%{version}-%{release}
Provides:      libGLESv2-devel    = %{?epoch:%{epoch}:}%{version}-%{release}
Provides:      libGLESv3-devel    = %{?epoch:%{epoch}:}%{version}-%{release}
%if 0%{?rhel}
Provides:      mesa-libEGL-devel  = %{?epoch:%{epoch}:}%{version}-%{release}
Provides:      mesa-libGLES-devel = %{?epoch:%{epoch}:}%{version}-%{release}
Provides:      mesa-libEGL-devel(%{__isa_name}-%{__isa_bits})  = %{?epoch:%{epoch}:}%{version}-%{release}
Provides:      mesa-libGLES-devel(%{__isa_name}-%{__isa_bits}) = %{?epoch:%{epoch}:}%{version}-%{release}
Obsoletes:     mesa-libEGL-devel  < %{?epoch:%{epoch}:}%{version}-%{release}
Obsoletes:     mesa-libGLES-devel < %{?epoch:%{epoch}:}%{version}-%{release}
%else
Provides:      Mesa-libEGL-devel    = %{?epoch:%{epoch}:}%{version}-%{release}
Provides:      Mesa-libGL-devel     = %{?epoch:%{epoch}:}%{version}-%{release}
Provides:      Mesa-libGLES-devel   = %{?epoch:%{epoch}:}%{version}-%{release}
Provides:      Mesa-libGLESv2-devel = %{?epoch:%{epoch}:}%{version}-%{release}
Provides:      Mesa-libGLESv3-devel = %{?epoch:%{epoch}:}%{version}-%{release}
Obsoletes:     Mesa-libEGL-devel    > %{?epoch:%{epoch}:}%{version}-%{release}
Obsoletes:     Mesa-libGL-devel     > %{?epoch:%{epoch}:}%{version}-%{release}
Obsoletes:     Mesa-libGLES-devel   > %{?epoch:%{epoch}:}%{version}-%{release}
Obsoletes:     Mesa-libGLESv2-devel > %{?epoch:%{epoch}:}%{version}-%{release}
Obsoletes:     Mesa-libGLESv3-devel > %{?epoch:%{epoch}:}%{version}-%{release}
%endif

%description -n %{realname}-compat-devel
Headers and libraries required to build software against %{realname} using
Mesa-like headers.

%if 0%{?rhel}
%package -n mesa-khr-devel
Group:         Development/Languages/C and C++
Summary:       Khronos development headers
Provides:      Mesa-KHR-devel = %{?epoch:%{epoch}:}%{version}-%{release}

%description -n mesa-khr-devel
Khronos development headers.

%files -n mesa-khr-devel
%defattr(-,root,root)
%{_includedir}/KHR/
%endif

# Preparation step (unpackung and patching if necessary)
%prep
%setup -q -n %{realname}-%{realver}%{?extraver}
# Disable tests
%{__sed} -i "/subdir('tests')/d" meson.build

%build
_CFLAGS='%{optflags}'
_LDFLAGS='-Wl,--strip-all -Wl,-z,noexecstack -Wl,-z,now -Wl,-z,relro'
meson setup build \
 --buildtype=release \
 --strip \
 --optimization=2 \
 \
 --prefix=%{_prefix} \
 --default-library=shared \
 \
 -Dx11=enabled \
 -Dglx=enabled \
 \
 -Db_lto=true \
 -Db_ndebug=if-release \
 -Dc_args="$_CFLAGS" \
 -Dc_link_args="$_LDFLAGS"
ninja -v -C build %{?_smp_mflags}

%install
DESTDIR=%{buildroot} ninja -C build install
%if 0%{?rhel}
%{__install} -D -m0644 include/KHR/khrplatform.h %{buildroot}%{_includedir}/KHR/khrplatform.h
%endif


%files
%defattr(-,root,root)
%doc README.md
%{_libdir}/libEGL.so.1*
%{_libdir}/libGL.so.1*
%{_libdir}/libGLESv1_CM.so.1*
%{_libdir}/libGLESv2.so.2*
%{_libdir}/libGLX.so.0*
%{_libdir}/libGLdispatch.so.0*
%{_libdir}/libOpenGL.so.0*

# Development stuff
%files -n %{realname}-devel
%defattr(-,root,root)
%doc README.md
%{_libdir}/pkgconfig/libglvnd.pc
%{_libdir}/pkgconfig/opengl.pc
%{_includedir}/glvnd/
%{_libdir}/*.so
%exclude %{_includedir}/KHR/
%exclude %{_libdir}/*.la

%files -n %{realname}-compat-devel
%defattr(-,root,root)
%{_includedir}/EGL/
%{_includedir}/GL/
%{_includedir}/GLES/
%{_includedir}/GLES2/
%{_includedir}/GLES3/
%{_libdir}/pkgconfig/egl.pc
%{_libdir}/pkgconfig/gl.pc
%{_libdir}/pkgconfig/glesv1_cm.pc
%{_libdir}/pkgconfig/glesv2.pc
%{_libdir}/pkgconfig/glx.pc

%post   -p /sbin/ldconfig
%postun -p /sbin/ldconfig

%changelog
openSUSE Build Service is sponsored by