openSUSE Commits
Threads by month
- ----- 2024 -----
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
July 2024
- 1 participants
- 1521 discussions
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package libnvidia-egl-wayland for openSUSE:Factory checked in at 2024-07-24 15:32:43
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libnvidia-egl-wayland (Old)
and /work/SRC/openSUSE:Factory/.libnvidia-egl-wayland.new.1869 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libnvidia-egl-wayland"
Wed Jul 24 15:32:43 2024 rev:10 rq:1188743 version:1.1.14
Changes:
--------
--- /work/SRC/openSUSE:Factory/libnvidia-egl-wayland/libnvidia-egl-wayland.changes 2023-11-14 21:41:40.869618413 +0100
+++ /work/SRC/openSUSE:Factory/.libnvidia-egl-wayland.new.1869/libnvidia-egl-wayland.changes 2024-07-25 11:55:57.630505311 +0200
@@ -1,0 +2,11 @@
+Fri Jul 19 23:00:40 UTC 2024 - RN <R_Nik_C(a)proton.me>
+
+- update to version 1.1.14:
+ * Implement Explicit Sync (linux-drm-syncobj-v1)
+ * Fix freezing on KDE when explicit sync is enabled under certain
+ conditions
+ * Read compositor device from zwp_linux_dmabuf_v1 when available
+ * Properly validate and use the passed value of
+ EGL_EXT_present_opaque
+
+-------------------------------------------------------------------
Old:
----
egl-wayland-1.1.13.tar.gz
New:
----
egl-wayland-1.1.14.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ libnvidia-egl-wayland.spec ++++++
--- /var/tmp/diff_new_pack.yUvQFv/_old 2024-07-25 11:55:58.946558420 +0200
+++ /var/tmp/diff_new_pack.yUvQFv/_new 2024-07-25 11:55:58.962559066 +0200
@@ -1,7 +1,7 @@
#
# spec file for package libnvidia-egl-wayland
#
-# Copyright (c) 2023 SUSE LLC
+# Copyright (c) 2024 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -20,7 +20,7 @@
%define lname libnvidia-egl-wayland%{so_ver}
%define rname egl-wayland
Name: libnvidia-egl-wayland
-Version: 1.1.13
+Version: 1.1.14
Release: 0
Summary: The EGLStream-based Wayland external platform
License: MIT
++++++ egl-wayland-1.1.13.tar.gz -> egl-wayland-1.1.14.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/egl-wayland-1.1.13/Makefile.am new/egl-wayland-1.1.14/Makefile.am
--- old/egl-wayland-1.1.13/Makefile.am 2023-10-18 20:00:18.000000000 +0200
+++ new/egl-wayland-1.1.14/Makefile.am 2024-07-17 20:13:07.000000000 +0200
@@ -24,6 +24,7 @@
libnvidia_egl_wayland_la_LDFLAGS = \
-shared \
-Wl,-Bsymbolic \
+ -ldl \
$(WAYLAND_LIBS) \
$(LIBDRM_LIBS) \
-version-number $(WAYLAND_EXTERNAL_MAJOR_VERSION):$(WAYLAND_EXTERNAL_MINOR_VERSION):$(WAYLAND_EXTERNAL_MICRO_VERSION) \
@@ -79,6 +80,12 @@
libnvidia_egl_wayland_la_dmabuf_built_private_protocols = \
linux-dmabuf-unstable-v1-protocol.c
+libnvidia_egl_wayland_la_drm_syncobj_built_client_headers = \
+ linux-drm-syncobj-v1-client-protocol.h
+
+libnvidia_egl_wayland_la_drm_syncobj_built_private_protocols = \
+ linux-drm-syncobj-v1-protocol.c
+
libnvidia_egl_wayland_la_presentation_time_built_client_headers = \
presentation-time-client-protocol.h
@@ -92,6 +99,8 @@
$(libnvidia_egl_wayland_la_built_server_headers) \
$(libnvidia_egl_wayland_la_dmabuf_built_client_headers) \
$(libnvidia_egl_wayland_la_dmabuf_built_private_protocols) \
+ $(libnvidia_egl_wayland_la_drm_syncobj_built_client_headers) \
+ $(libnvidia_egl_wayland_la_drm_syncobj_built_private_protocols) \
$(libnvidia_egl_wayland_la_presentation_time_built_client_headers) \
$(libnvidia_egl_wayland_la_presentation_time_private_protocols)
@@ -128,6 +137,12 @@
$(libnvidia_egl_wayland_la_dmabuf_built_client_headers):%-client-protocol.h : $(WAYLAND_PROTOCOLS_DATADIR)/unstable/linux-dmabuf/%.xml
$(AM_V_GEN)$(WAYLAND_SCANNER) client-header < $< > $@
+$(libnvidia_egl_wayland_la_drm_syncobj_built_private_protocols):%-protocol.c : $(WAYLAND_PROTOCOLS_DATADIR)/staging/linux-drm-syncobj/%.xml
+ $(AM_V_GEN)$(WAYLAND_SCANNER) $(WAYLAND_PRIVATE_CODEGEN) < $< > $@
+
+$(libnvidia_egl_wayland_la_drm_syncobj_built_client_headers):%-client-protocol.h : $(WAYLAND_PROTOCOLS_DATADIR)/staging/linux-drm-syncobj/%.xml
+ $(AM_V_GEN)$(WAYLAND_SCANNER) client-header < $< > $@
+
$(libnvidia_egl_wayland_la_presentation_time_private_protocols):%-protocol.c : $(WAYLAND_PROTOCOLS_DATADIR)/stable/presentation-time/%.xml
$(AM_V_GEN)$(WAYLAND_SCANNER) $(WAYLAND_PRIVATE_CODEGEN) < $< > $@
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/egl-wayland-1.1.13/configure.ac new/egl-wayland-1.1.14/configure.ac
--- old/egl-wayland-1.1.13/configure.ac 2023-10-18 20:00:18.000000000 +0200
+++ new/egl-wayland-1.1.14/configure.ac 2024-07-17 20:13:07.000000000 +0200
@@ -2,7 +2,7 @@
m4_define([wayland_eglstream_major_version], [1])
m4_define([wayland_eglstream_minor_version], [1])
-m4_define([wayland_eglstream_micro_version], [13])
+m4_define([wayland_eglstream_micro_version], [14])
m4_define([wayland_eglstream_version],
[wayland_eglstream_major_version.wayland_eglstream_minor_version.wayland_eglstream_micro_version])
@@ -15,6 +15,8 @@
AC_CONFIG_SRCDIR([config.h.in])
AC_CONFIG_HEADERS([config.h])
+AC_GNU_SOURCE
+
AC_SUBST([WAYLAND_EXTERNAL_MAJOR_VERSION], [wayland_eglstream_major_version])
AC_SUBST([WAYLAND_EXTERNAL_MINOR_VERSION], [wayland_eglstream_minor_version])
AC_SUBST([WAYLAND_EXTERNAL_MICRO_VERSION], [wayland_eglstream_micro_version])
@@ -61,6 +63,9 @@
# Checks for libraries.
AX_PTHREAD()
+AC_CHECK_LIB([dl], [dlsym],
+ [],
+ [AC_MSG_ERROR("dlsym is needed to compile wayland-egldisplay")])
PKG_CHECK_MODULES([EGL_EXTERNAL_PLATFORM], [eglexternalplatform >= ${EGL_EXTERNAL_PLATFORM_MIN_VERSION} eglexternalplatform < ${EGL_EXTERNAL_PLATFORM_MAX_VERSION}])
PKG_CHECK_MODULES([WAYLAND], [wayland-server wayland-client wayland-egl-backend >= 3])
PKG_CHECK_MODULES([LIBDRM], [libdrm])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/egl-wayland-1.1.13/include/wayland-egldisplay.h new/egl-wayland-1.1.14/include/wayland-egldisplay.h
--- old/egl-wayland-1.1.13/include/wayland-egldisplay.h 2023-10-18 20:00:18.000000000 +0200
+++ new/egl-wayland-1.1.14/include/wayland-egldisplay.h 2024-07-17 20:13:07.000000000 +0200
@@ -121,6 +121,9 @@
typedef struct WlEglDisplayRec {
WlEglDeviceDpy *devDpy;
+ /* Supports EGL_ANDROID_native_fence_sync */
+ int supports_native_fence_sync;
+
EGLBoolean ownNativeDpy;
struct wl_display *nativeDpy;
@@ -128,6 +131,7 @@
struct wl_eglstream_display *wlStreamDpy;
struct wl_eglstream_controller *wlStreamCtl;
struct zwp_linux_dmabuf_v1 *wlDmaBuf;
+ struct wp_linux_drm_syncobj_manager_v1 *wlDrmSyncobj;
unsigned int wlStreamCtlVer;
struct wp_presentation *wpPresentation;
struct wl_event_queue *wlEventQueue;
@@ -139,6 +143,9 @@
WlEglPlatformData *data;
+ /* DRM device in use */
+ int drmFd;
+
EGLBoolean useInitRefCount;
EGLDeviceEXT requestedDevice;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/egl-wayland-1.1.13/include/wayland-eglhandle.h new/egl-wayland-1.1.14/include/wayland-eglhandle.h
--- old/egl-wayland-1.1.13/include/wayland-eglhandle.h 2023-10-18 20:00:18.000000000 +0200
+++ new/egl-wayland-1.1.14/include/wayland-eglhandle.h 2024-07-17 20:13:07.000000000 +0200
@@ -108,7 +108,9 @@
PFNEGLCLIENTWAITSYNCKHRPROC clientWaitSync;
PFNEGLSIGNALSYNCKHRPROC signalSync;
PFNEGLDESTROYSYNCKHRPROC destroySync;
+ PFNEGLCREATESYNCKHRPROC createSync;
PFNEGLSTREAMFLUSHNVPROC streamFlush;
+ PFNEGLDUPNATIVEFENCEFDANDROIDPROC dupNativeFenceFD;
/* Used for dma-buf surfaces */
PFNEGLSTREAMIMAGECONSUMERCONNECTNVPROC streamImageConsumerConnect;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/egl-wayland-1.1.13/include/wayland-eglsurface-internal.h new/egl-wayland-1.1.14/include/wayland-eglsurface-internal.h
--- old/egl-wayland-1.1.13/include/wayland-eglsurface-internal.h 2023-10-18 20:00:18.000000000 +0200
+++ new/egl-wayland-1.1.14/include/wayland-eglsurface-internal.h 2024-07-17 20:13:07.000000000 +0200
@@ -51,6 +51,14 @@
struct wl_buffer *buffer;
EGLBoolean attached;
struct wl_list acquiredLink;
+
+ struct wp_linux_drm_syncobj_timeline_v1 *wlReleaseTimeline;
+ uint32_t drmSyncobjHandle;
+ int releasePending;
+ /* Latest release point the compositor will signal with explicit sync */
+ uint64_t releasePoint;
+ /* Cached acquire EGLSync from acquireImage */
+ EGLSyncKHR acquireSync;
} WlEglStreamImage;
typedef struct WlEglSurfaceCtxRec {
@@ -151,6 +159,13 @@
EGLBoolean isResized;
WlEglDmaBufFeedback feedback;
+
+ /* per-surface Explicit Sync objects */
+ struct wp_linux_drm_syncobj_surface_v1 *wlSyncobjSurf;
+ struct wp_linux_drm_syncobj_timeline_v1 *wlAcquireTimeline;
+ uint32_t drmSyncobjHandle;
+ /* Last acquire point used. This starts at 1, zero means invalid. */
+ uint64_t syncPoint;
};
void wlEglReallocSurface(WlEglDisplay *display,
@@ -185,6 +200,9 @@
EGLint attribute,
int *value);
+EGLBoolean
+wlEglSurfaceCheckReleasePoints(WlEglDisplay *display, WlEglSurface *surface);
+
EGLBoolean wlEglSendDamageEvent(WlEglSurface *surface,
struct wl_event_queue *queue);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/egl-wayland-1.1.13/include/wayland-external-exports.h new/egl-wayland-1.1.14/include/wayland-external-exports.h
--- old/egl-wayland-1.1.13/include/wayland-external-exports.h 2023-10-18 20:00:18.000000000 +0200
+++ new/egl-wayland-1.1.14/include/wayland-external-exports.h 2024-07-17 20:13:07.000000000 +0200
@@ -53,7 +53,7 @@
#define WAYLAND_EXTERNAL_VERSION_MINOR 0
#endif
-#define WAYLAND_EXTERNAL_VERSION_MICRO 13
+#define WAYLAND_EXTERNAL_VERSION_MICRO 14
#define EGL_EXTERNAL_PLATFORM_VERSION_MAJOR WAYLAND_EXTERNAL_VERSION_MAJOR
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/egl-wayland-1.1.13/meson.build new/egl-wayland-1.1.14/meson.build
--- old/egl-wayland-1.1.13/meson.build 2023-10-18 20:00:18.000000000 +0200
+++ new/egl-wayland-1.1.14/meson.build 2024-07-17 20:13:07.000000000 +0200
@@ -1,5 +1,5 @@
project('wayland-eglstream', 'c',
- version : '1.1.13',
+ version : '1.1.14',
default_options : [
'buildtype=debugoptimized',
'c_std=gnu99',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/egl-wayland-1.1.13/src/meson.build new/egl-wayland-1.1.14/src/meson.build
--- old/egl-wayland-1.1.13/src/meson.build 2023-10-18 20:00:18.000000000 +0200
+++ new/egl-wayland-1.1.14/src/meson.build 2024-07-17 20:13:07.000000000 +0200
@@ -1,7 +1,14 @@
+if not cc.has_function('dlsym')
+ libdl = cc.find_library('dl')
+else
+ libdl = []
+endif
+
add_project_arguments('-Wall', language : 'c')
add_project_arguments('-Werror', language : 'c')
add_project_arguments('-fvisibility=hidden', language : 'c')
add_project_arguments('-DWL_HIDE_DEPRECATED', language : 'c')
+add_project_arguments('-D_GNU_SOURCE', language : 'c')
add_project_link_arguments('-Wl,-Bsymbolic', language : 'c')
if cc.has_argument('-Wpedantic')
@@ -13,6 +20,7 @@
wl_protos_dir = wl_protos.get_pkgconfig_variable('pkgdatadir')
wl_dmabuf_xml = join_paths(wl_protos_dir, 'unstable', 'linux-dmabuf', 'linux-dmabuf-unstable-v1.xml')
wp_presentation_time_xml = join_paths(wl_protos_dir, 'stable', 'presentation-time', 'presentation-time.xml')
+wl_drm_syncobj_xml = join_paths(wl_protos_dir, 'staging', 'linux-drm-syncobj', 'linux-drm-syncobj-v1.xml')
client_header = generator(prog_scanner,
output : '@BASENAME@-client-protocol.h',
@@ -59,6 +67,9 @@
src += client_header.process(wp_presentation_time_xml)
src += code.process(wp_presentation_time_xml)
+src += client_header.process(wl_drm_syncobj_xml)
+src += code.process(wl_drm_syncobj_xml)
+
egl_wayland = library('nvidia-egl-wayland',
src,
dependencies : [
@@ -68,6 +79,7 @@
wayland_egl_backend,
threads,
libdrm,
+ libdl,
],
include_directories : inc,
version : meson.project_version(),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/egl-wayland-1.1.13/src/wayland-egldisplay.c new/egl-wayland-1.1.14/src/wayland-egldisplay.c
--- old/egl-wayland-1.1.13/src/wayland-egldisplay.c 2023-10-18 20:00:18.000000000 +0200
+++ new/egl-wayland-1.1.14/src/wayland-egldisplay.c 2024-07-17 20:13:07.000000000 +0200
@@ -32,6 +32,7 @@
#include "wayland-drm-client-protocol.h"
#include "wayland-drm.h"
#include "presentation-time-client-protocol.h"
+#include "linux-drm-syncobj-v1-client-protocol.h"
#include <string.h>
#include <stdlib.h>
#include <assert.h>
@@ -39,18 +40,24 @@
#include <fcntl.h>
#include <sys/mman.h>
#include <xf86drm.h>
+#include <dlfcn.h>
typedef struct WlServerProtocolsRec {
EGLBoolean hasEglStream;
EGLBoolean hasDmaBuf;
- EGLBoolean hasDrm;
- struct wl_drm *wldrm;
+ struct zwp_linux_dmabuf_v1 *wlDmaBuf;
+ dev_t devId;
+
+ struct wl_drm *wlDrm;
char *drm_name;
} WlServerProtocols;
/* TODO: Make global display lists hang off platform data */
static struct wl_list wlEglDisplayList = WL_LIST_INITIALIZER(&wlEglDisplayList);
+static bool getDeviceFromDevIdInitialised = false;
+static int (*getDeviceFromDevId)(dev_t dev_id, uint32_t flags, drmDevice **device) = NULL;
+
EGLBoolean wlEglIsWaylandDisplay(void *nativeDpy)
{
if (!wlEglMemoryIsReadable(nativeDpy, sizeof (void *))) {
@@ -424,12 +431,12 @@
display->wlStreamDpy = wl_registry_bind(registry,
name,
&wl_eglstream_display_interface,
- version);
+ 1);
} else if (strcmp(interface, "wl_eglstream_controller") == 0) {
display->wlStreamCtl = wl_registry_bind(registry,
name,
&wl_eglstream_controller_interface,
- version);
+ version > 1 ? 2 : 1);
display->wlStreamCtlVer = version;
} else if (strcmp(interface, "zwp_linux_dmabuf_v1") == 0) {
/*
@@ -448,6 +455,12 @@
name,
&wp_presentation_interface,
version);
+ } else if (strcmp(interface, "wp_linux_drm_syncobj_manager_v1") == 0 &&
+ display->supports_native_fence_sync) {
+ display->wlDrmSyncobj = wl_registry_bind(registry,
+ name,
+ &wp_linux_drm_syncobj_manager_v1_interface,
+ 1);
}
}
@@ -501,6 +514,95 @@
static void
+dmabuf_feedback_check_main_device(void *data,
+ struct zwp_linux_dmabuf_feedback_v1 *dmabuf_feedback,
+ struct wl_array *dev)
+{
+ WlServerProtocols *protocols = (WlServerProtocols *)data;
+ (void) dmabuf_feedback;
+
+ assert(dev->size == sizeof(dev_t));
+ memcpy(&protocols->devId, dev->data, sizeof(dev_t));
+}
+
+static void
+dmabuf_feedback_check_tranche_target_device(void *data,
+ struct zwp_linux_dmabuf_feedback_v1 *dmabuf_feedback,
+ struct wl_array *dev)
+{
+ (void) data;
+ (void) dmabuf_feedback;
+ (void) dev;
+}
+
+static void
+dmabuf_feedback_check_tranche_flags(void *data,
+ struct zwp_linux_dmabuf_feedback_v1 *dmabuf_feedback,
+ uint32_t flags)
+{
+ (void) data;
+ (void) dmabuf_feedback;
+ (void) flags;
+}
+
+static void
+dmabuf_feedback_check_tranche_formats(void *data,
+ struct zwp_linux_dmabuf_feedback_v1 *dmabuf_feedback,
+ struct wl_array *indices)
+{
+ (void) data;
+ (void) dmabuf_feedback;
+ (void) indices;
+}
+
+static void
+dmabuf_feedback_check_tranche_done(void *data,
+ struct zwp_linux_dmabuf_feedback_v1 *dmabuf_feedback)
+{
+ (void) data;
+ (void) dmabuf_feedback;
+}
+
+static void
+dmabuf_feedback_check_done(void *data, struct zwp_linux_dmabuf_feedback_v1 *dmabuf_feedback)
+{
+ WlServerProtocols *protocols = (WlServerProtocols *)data;
+ (void) dmabuf_feedback;
+
+ drmDevice *drm_device;
+ assert(getDeviceFromDevId);
+ if (getDeviceFromDevId(protocols->devId, 0, &drm_device) == 0) {
+ if (drm_device->available_nodes & (1 << DRM_NODE_RENDER)) {
+ protocols->drm_name = strdup(drm_device->nodes[DRM_NODE_RENDER]);
+ }
+
+ drmFreeDevice(&drm_device);
+ }
+}
+
+static void
+dmabuf_feedback_check_format_table(void *data,
+ struct zwp_linux_dmabuf_feedback_v1 *dmabuf_feedback,
+ int32_t fd, uint32_t size)
+{
+ (void) data;
+ (void) dmabuf_feedback;
+ (void) fd;
+ (void) size;
+}
+
+static const struct zwp_linux_dmabuf_feedback_v1_listener dmabuf_feedback_check_listener = {
+ .done = dmabuf_feedback_check_done,
+ .format_table = dmabuf_feedback_check_format_table,
+ .main_device = dmabuf_feedback_check_main_device,
+ .tranche_done = dmabuf_feedback_check_tranche_done,
+ .tranche_target_device = dmabuf_feedback_check_tranche_target_device,
+ .tranche_formats = dmabuf_feedback_check_tranche_formats,
+ .tranche_flags = dmabuf_feedback_check_tranche_flags,
+};
+
+
+static void
registry_handle_global_check_protocols(
void *data,
struct wl_registry *registry,
@@ -520,12 +622,14 @@
if ((strcmp(interface, "zwp_linux_dmabuf_v1") == 0) &&
(version >= 3)) {
protocols->hasDmaBuf = EGL_TRUE;
+ /* Version 4 introduced default_feedback which allows us to determine the device used by the compositor */
+ if (version >= 4) {
+ protocols->wlDmaBuf = wl_registry_bind(registry, name, &zwp_linux_dmabuf_v1_interface, 4);
+ }
}
if ((strcmp(interface, "wl_drm") == 0) && (version >= 2)) {
- protocols->hasDrm = EGL_TRUE;
- protocols->wldrm = wl_registry_bind(registry, name, &wl_drm_interface, 2);
- wl_drm_add_listener(protocols->wldrm, &drmListener, protocols);
+ protocols->wlDrm = wl_registry_bind(registry, name, &wl_drm_interface, 2);
}
}
@@ -640,6 +744,10 @@
wp_presentation_destroy(display->wpPresentation);
display->wpPresentation = NULL;
}
+ if (display->wlDrmSyncobj) {
+ wp_linux_drm_syncobj_manager_v1_destroy(display->wlDrmSyncobj);
+ display->wlDrmSyncobj = NULL;
+ }
if (display->wlDmaBuf) {
zwp_linux_dmabuf_v1_destroy(display->wlDmaBuf);
display->wlDmaBuf = NULL;
@@ -670,48 +778,79 @@
return res;
}
-static void getServerProtocolsInfo(struct wl_display *nativeDpy,
+static bool getServerProtocolsInfo(struct wl_display *nativeDpy,
WlServerProtocols *protocols)
{
struct wl_display *wrapper = NULL;
struct wl_registry *wlRegistry = NULL;
struct wl_event_queue *queue = wl_display_create_queue(nativeDpy);
int ret = 0;
+ bool result = false;
const struct wl_registry_listener registryListener = {
registry_handle_global_check_protocols,
registry_handle_global_remove
};
if (queue == NULL) {
- return;
+ goto done;
}
wrapper = wl_proxy_create_wrapper(nativeDpy);
+ if (wrapper == NULL) {
+ goto done;
+ }
wl_proxy_set_queue((struct wl_proxy *)wrapper, queue);
/* Listen to wl_registry events and make a roundtrip in order to find the
* wl_eglstream_display global object.
*/
wlRegistry = wl_display_get_registry(wrapper);
- wl_proxy_wrapper_destroy(wrapper); /* Done with wrapper */
+ if (wlRegistry == NULL) {
+ goto done;
+ }
ret = wl_registry_add_listener(wlRegistry,
®istryListener,
protocols);
if (ret == 0) {
wl_display_roundtrip_queue(nativeDpy, queue);
- if (protocols->hasDrm) {
+ if (!getDeviceFromDevIdInitialised) {
+ getDeviceFromDevId = dlsym(RTLD_DEFAULT, "drmGetDeviceFromDevId");
+ getDeviceFromDevIdInitialised = true;
+ }
+
+ if (protocols->wlDmaBuf && getDeviceFromDevId) {
+ struct zwp_linux_dmabuf_feedback_v1 *default_feedback
+ = zwp_linux_dmabuf_v1_get_default_feedback(protocols->wlDmaBuf);
+ if (default_feedback) {
+ zwp_linux_dmabuf_feedback_v1_add_listener(default_feedback, &dmabuf_feedback_check_listener, protocols);
+ wl_display_roundtrip_queue(nativeDpy, queue);
+ zwp_linux_dmabuf_feedback_v1_destroy(default_feedback);
+ }
+ } else if (protocols->wlDrm) {
+ wl_drm_add_listener(protocols->wlDrm, &drmListener, protocols);
wl_display_roundtrip_queue(nativeDpy, queue);
- /* destroy our wl_drm object */
- wl_drm_destroy(protocols->wldrm);
+ }
+ result = protocols->drm_name != NULL;
+
+ if (protocols->wlDmaBuf) {
+ zwp_linux_dmabuf_v1_destroy(protocols->wlDmaBuf);
+ }
+ if (protocols->wlDrm) {
+ wl_drm_destroy(protocols->wlDrm);
}
}
+done:
+ if (wrapper) {
+ wl_proxy_wrapper_destroy(wrapper);
+ }
if (wlRegistry) {
wl_registry_destroy(wlRegistry);
}
if (queue) {
wl_event_queue_destroy(queue);
}
+ return result;
}
static EGLBoolean checkNvidiaDrmDevice(WlServerProtocols *protocols)
@@ -797,6 +936,7 @@
EGLDeviceEXT requestedDevice = EGL_NO_DEVICE_EXT;
EGLBoolean usePrimeRenderOffload = EGL_FALSE;
EGLBoolean isServerNV;
+ const char *drmName = NULL;
if (platform != EGL_PLATFORM_WAYLAND_EXT) {
wlEglSetError(data, EGL_BAD_PARAMETER);
@@ -879,7 +1019,10 @@
* and bind to wl_drm to get the device name.
* protocols.drm_name will be allocated here if using wl_drm
*/
- getServerProtocolsInfo(display->nativeDpy, &protocols);
+ if (!getServerProtocolsInfo(display->nativeDpy, &protocols)) {
+ err = EGL_BAD_ALLOC;
+ goto fail;
+ }
// Check if the server is running on an NVIDIA device. This will also make
// sure that the device node that we're looking at is a render node,
@@ -898,7 +1041,7 @@
}
}
- if (!protocols.hasDrm || (!protocols.hasEglStream && !protocols.hasDmaBuf)) {
+ if (!protocols.hasEglStream && !protocols.hasDmaBuf) {
goto fail;
}
@@ -1024,7 +1167,6 @@
display->primeRenderOffload = EGL_TRUE;
}
-
display->devDpy = wlGetInternalDisplay(pData, eglDevice);
if (display->devDpy == NULL) {
goto fail;
@@ -1036,6 +1178,17 @@
display->refCount = 1;
WL_LIST_INIT(&display->wlEglSurfaceList);
+ /* Get the DRM device in use */
+ drmName = display->data->egl.queryDeviceString(display->devDpy->eglDevice,
+ EGL_DRM_DEVICE_FILE_EXT);
+ if (!drmName) {
+ goto fail;
+ }
+
+ display->drmFd = open(drmName, O_RDWR | O_CLOEXEC);
+ if (display->drmFd < 0) {
+ goto fail;
+ }
// The newly created WlEglDisplay has been set up properly, insert it
// in wlEglDisplayList.
@@ -1054,7 +1207,7 @@
free(eglDeviceList);
free(protocols.drm_name);
- if (display->ownNativeDpy) {
+ if (display && display->ownNativeDpy) {
wl_display_disconnect(display->nativeDpy);
}
free(display);
@@ -1073,6 +1226,7 @@
struct wl_display *wrapper = NULL;
EGLint err = EGL_SUCCESS;
int ret = 0;
+ const char *dev_exts = NULL;
if (!display) {
return EGL_FALSE;
@@ -1103,6 +1257,11 @@
return EGL_FALSE;
}
+ dev_exts = display->data->egl.queryString(display->devDpy->eglDisplay, EGL_EXTENSIONS);
+ if (dev_exts && wlEglFindExtension("EGL_ANDROID_native_fence_sync", dev_exts)) {
+ display->supports_native_fence_sync = true;
+ }
+
// Set the initCount to 1. If something goes wrong, then terminateDisplay
// will clean up and set it back to zero.
display->initCount = 1;
@@ -1221,6 +1380,7 @@
static void wlEglUnrefDisplay(WlEglDisplay *display) {
if (--display->refCount == 0) {
wlEglMutexDestroy(&display->mutex);
+ close(display->drmFd);
free(display);
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/egl-wayland-1.1.13/src/wayland-eglhandle.c new/egl-wayland-1.1.14/src/wayland-eglhandle.c
--- old/egl-wayland-1.1.13/src/wayland-eglhandle.c 2023-10-18 20:00:18.000000000 +0200
+++ new/egl-wayland-1.1.14/src/wayland-eglhandle.c 2024-07-17 20:13:07.000000000 +0200
@@ -111,6 +111,8 @@
GET_PROC(clientWaitSync, eglClientWaitSyncKHR);
GET_PROC(signalSync, eglSignalSyncKHR);
GET_PROC(destroySync, eglDestroySyncKHR);
+ GET_PROC(createSync, eglCreateSyncKHR);
+ GET_PROC(dupNativeFenceFD, eglDupNativeFenceFDANDROID);
/* Stream flush */
GET_PROC(streamFlush, eglStreamFlushNV);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/egl-wayland-1.1.13/src/wayland-eglsurface.c new/egl-wayland-1.1.14/src/wayland-eglsurface.c
--- old/egl-wayland-1.1.13/src/wayland-eglsurface.c 2023-10-18 20:00:18.000000000 +0200
+++ new/egl-wayland-1.1.14/src/wayland-eglsurface.c 2024-07-17 20:13:07.000000000 +0200
@@ -24,6 +24,7 @@
#include "wayland-eglstream-client-protocol.h"
#include "wayland-eglstream-controller-client-protocol.h"
#include "linux-dmabuf-unstable-v1-client-protocol.h"
+#include "linux-drm-syncobj-v1-client-protocol.h"
#include "wayland-eglstream-server.h"
#include "wayland-thread.h"
#include "wayland-eglutils.h"
@@ -42,6 +43,8 @@
#include <errno.h>
#include <libdrm/drm_fourcc.h>
#include <sys/stat.h>
+#include <xf86drm.h>
+#include <stdio.h>
#define WL_EGL_WINDOW_DESTROY_CALLBACK_SINCE 3
@@ -154,6 +157,89 @@
return EGL_SUCCESS;
}
+static bool
+syncobj_import_fd_to_current_point(WlEglDisplay *display, WlEglSurface *surface,
+ int syncFd)
+{
+ bool ret = false;
+ uint32_t tmpSyncobj;
+
+ /* Import our syncfd at a new release point */
+ if (drmSyncobjCreate(display->drmFd, 0, &tmpSyncobj) != 0) {
+ return false;
+ }
+
+ if (drmSyncobjImportSyncFile(display->drmFd, tmpSyncobj, syncFd) != 0) {
+ goto end;
+ }
+
+ if (drmSyncobjTransfer(display->drmFd, surface->drmSyncobjHandle,
+ surface->syncPoint, tmpSyncobj, 0, 0) != 0) {
+ goto end;
+ }
+
+ ret = true;
+
+end:
+ drmSyncobjDestroy(display->drmFd, tmpSyncobj);
+
+ return ret;
+}
+
+static bool
+send_explicit_sync_points (WlEglDisplay *display, WlEglSurface *surface,
+ WlEglStreamImage *image)
+{
+ WlEglPlatformData *data = display->data;
+ EGLDisplay dpy = display->devDpy->eglDisplay;
+ int syncFd, err;
+ uint64_t acquireSyncPoint;
+
+ /* Ignore this unless we are using Explicit Sync */
+ if (!surface->wlSyncobjSurf) {
+ return true;
+ }
+
+ /* --------------- Get acquire sync fd -------------- */
+ syncFd = data->egl.dupNativeFenceFD(dpy, image->acquireSync);
+ if (syncFd == EGL_NO_NATIVE_FENCE_FD_ANDROID) {
+ return false;
+ }
+
+ /* Clean up our acquire sync object now that we are done with it */
+ data->egl.destroySync(dpy, image->acquireSync);
+ image->acquireSync = EGL_NO_SYNC_KHR;
+
+ err = syncobj_import_fd_to_current_point(display, surface, syncFd);
+ close(syncFd);
+ if (!err) {
+ return false;
+ }
+ acquireSyncPoint = surface->syncPoint++;
+
+ /* --------------- Get release EGLSyncKHR -------------- */
+
+ /* Increment to a new sync point here in the image. */
+ image->releasePoint++;
+ image->releasePending = true;
+
+ /* --------------- Send sync points -------------- */
+
+ /* Now notify the compositor of our next acquire point */
+ wp_linux_drm_syncobj_surface_v1_set_acquire_point(surface->wlSyncobjSurf,
+ surface->wlAcquireTimeline,
+ acquireSyncPoint >> 32,
+ acquireSyncPoint & 0xffffffff);
+
+ /* Now notify the compositor of our next release point */
+ wp_linux_drm_syncobj_surface_v1_set_release_point(surface->wlSyncobjSurf,
+ image->wlReleaseTimeline,
+ image->releasePoint >> 32,
+ image->releasePoint & 0xffffffff);
+
+ return true;
+}
+
EGLBoolean
wlEglSendDamageEvent(WlEglSurface *surface, struct wl_event_queue *queue)
{
@@ -183,6 +269,15 @@
surface->ctx.currentBuffer,
surface->dx,
surface->dy);
+
+ /*
+ * Send our explicit sync acquire and release points. This needs to be done
+ * as part of the surface attach as it is a protocol error to specify these
+ * points without attaching a buffer in the same commit.
+ */
+ if (!send_explicit_sync_points(surface->wlEglDpy, surface, image)) {
+ return EGL_FALSE;
+ }
}
wl_surface_damage(surface->wlSurface, 0, 0,
@@ -473,6 +568,7 @@
assert(image->eglImage != EGL_NO_IMAGE_KHR);
data->egl.destroyImage(dpy, image->eglImage);
image->eglImage = EGL_NO_IMAGE_KHR;
+ image->releasePoint = 0;
if (surface->ctx.currentBuffer == image->buffer) {
surface->ctx.currentBuffer = NULL;
@@ -487,6 +583,16 @@
wl_list_remove(&image->acquiredLink);
wl_list_init(&image->acquiredLink);
}
+
+ if (image->wlReleaseTimeline) {
+ wp_linux_drm_syncobj_timeline_v1_destroy(image->wlReleaseTimeline);
+ drmSyncobjDestroy(display->drmFd, image->drmSyncobjHandle);
+ if (image->acquireSync != EGL_NO_SYNC_KHR) {
+ data->egl.destroySync(dpy, image->acquireSync);
+ image->acquireSync = EGL_NO_SYNC_KHR;
+ }
+ image->releasePending = false;
+ }
}
static void
@@ -938,6 +1044,14 @@
image->attached = EGL_FALSE;
if (image->eglImage != EGL_NO_IMAGE_KHR) {
+ /*
+ * Release our image back to the stream if explicit sync is not in use
+ *
+ * If explicit sync was used, then wl_buffer.release means nothing. We
+ * will instead have already marked this image for release contingent
+ * on the release sync getting signaled. This callback doesn't even fire
+ * in that scenario.
+ */
data->egl.streamReleaseImage(display->devDpy->eglDisplay,
surface->ctx.eglStream,
image->eglImage,
@@ -958,6 +1072,178 @@
stream_local_buffer_release_callback,
};
+/*
+ * Export a syncfd from the timeline at the specified point and make an
+ * EGLSyncKHR out of it. We can then pass this eglsync to releaseImageNV and
+ * it will wait for the release point to signal before releasing the image back
+ * to the screen.
+ */
+static EGLSyncKHR
+get_release_sync(WlEglDisplay *display, WlEglStreamImage *image)
+{
+ EGLDisplay dpy = display->devDpy->eglDisplay;
+ WlEglPlatformData *data = display->data;
+ EGLSyncKHR eglSync = EGL_NO_SYNC_KHR;
+ int syncFd = -1;
+ uint32_t tmpSyncobj;
+ EGLint attribs[3];
+
+
+ /* Import our acquire syncfd at a new acquire point */
+ if (drmSyncobjCreate(display->drmFd, 0, &tmpSyncobj) != 0) {
+ return EGL_NO_SYNC_KHR;
+ }
+
+ if (drmSyncobjTransfer(display->drmFd, tmpSyncobj, 0,
+ image->drmSyncobjHandle, image->releasePoint,
+ 0) != 0) {
+ goto destroy;
+ }
+
+ if (drmSyncobjExportSyncFile(display->drmFd, tmpSyncobj,
+ &syncFd) != 0) {
+ goto destroy;
+ }
+
+ attribs[0] = EGL_SYNC_NATIVE_FENCE_FD_ANDROID;
+ attribs[1] = syncFd;
+ attribs[2] = EGL_NONE;
+ eglSync = data->egl.createSync(dpy, EGL_SYNC_NATIVE_FENCE_ANDROID,
+ attribs);
+ close (syncFd);
+destroy:
+ drmSyncobjDestroy(display->drmFd, tmpSyncobj);
+
+ return eglSync;
+}
+
+/*
+ * We have committed a frame, and if we are using explicit sync
+ * we will have registered a release point with the compositor.
+ * The release point's fence didn't exist then, so we should check
+ * for any available fences that we should trigger releasing
+ * images back into the stream with.
+ *
+ * This will block if no available buffers have been released.
+ */
+EGLBoolean
+wlEglSurfaceCheckReleasePoints(WlEglDisplay *display, WlEglSurface *surface)
+{
+ WlEglPlatformData *data = display->data;
+ EGLDisplay dpy = display->devDpy->eglDisplay;
+ EGLSyncKHR releaseSync = EGL_NO_SYNC_KHR;
+ WlEglStreamImage *image = NULL;
+ uint32_t *syncobjs;
+ uint64_t *syncPoints;
+ uint32_t i, firstSignaled, numSyncPoints = 0;
+ int64_t timeout;
+ EGLBoolean ret = EGL_FALSE;
+
+ if (!surface->wlSyncobjSurf) {
+ return EGL_TRUE;
+ }
+
+ syncobjs = calloc(surface->ctx.numStreamImages, sizeof(uint32_t));
+ syncPoints = calloc(surface->ctx.numStreamImages, sizeof(uint64_t));
+ if (!syncobjs || !syncPoints) {
+ return EGL_FALSE;
+ }
+
+ for (i = 0; i < surface->ctx.numStreamImages; i++) {
+ pthread_mutex_lock(&surface->ctx.streamImages[i]->mutex);
+ }
+
+ /* record each release point we are waiting on */
+ for (i = 0; i < surface->ctx.numStreamImages; i++) {
+ syncobjs[i] = surface->ctx.streamImages[i]->drmSyncobjHandle;
+
+ if (surface->ctx.streamImages[i]->releasePending) {
+ syncPoints[i] = surface->ctx.streamImages[i]->releasePoint;
+ numSyncPoints++;
+ } else {
+ /*
+ * Use a bogus point for acquired images so we can keep our indices
+ * the same. This won't affect anything since it will never have a fence
+ * appear.
+ */
+ syncPoints[i] = UINT64_MAX;
+ }
+ }
+
+ if (numSyncPoints == 0) {
+ goto end;
+ }
+
+ /*
+ * Wait for at least one release point to have a fence. We need to block here
+ * since the streams internal code expects to have at least one buffer placed
+ * back on the release (internally called returns) queue.
+ *
+ * We only wait indefinitely when all but one buffers are pending. There are
+ * four total buffers:
+ * 1. One owned by the driver (as per above)
+ * 2. One we just committed and sent to the compositor
+ * 3. One owned by compositor, queued for scanout
+ * 4. One owned by compositor, in process of releasing
+ *
+ * Not all compositors will hold 3 and 4 indefinitely, although Kwin does
+ * at certain times.
+ */
+ timeout = numSyncPoints >= 3 ? INT64_MAX : 0;
+
+ /*
+ * The Linux docs say that DRM_SYNCOBJ_WAIT_FLAGS_WAIT_AVAILABLE should be
+ * used to wait for a fence to appear without waiting on the fence itself.
+ * Note that there are some bugs with older kernels where this may not
+ * signal correctly.
+ */
+ if (drmSyncobjTimelineWait(display->drmFd, syncobjs, syncPoints,
+ surface->ctx.numStreamImages, timeout,
+ DRM_SYNCOBJ_WAIT_FLAGS_WAIT_AVAILABLE,
+ &firstSignaled) != 0) {
+ goto end;
+ }
+
+ image = surface->ctx.streamImages[firstSignaled];
+
+ /* Try to get a release point for the first available buffer. */
+ releaseSync = get_release_sync(display, image);
+ if (releaseSync == EGL_NO_SYNC_KHR) {
+ goto end;
+ }
+
+ /*
+ * Pass our newly created release EGLSyncKHR to our eglstream, it
+ * will wait for it to signal before it releases the image back to
+ * the stream. Note that wl_buffer.release means nothing with
+ * linux-drm-syncobj-v1.
+ */
+ ret = data->egl.streamReleaseImage(display->devDpy->eglDisplay,
+ surface->ctx.eglStream,
+ image->eglImage,
+ releaseSync);
+ /* releaseImage makes a copy, so we destroy ours here */
+ data->egl.destroySync(dpy, releaseSync);
+
+ /*
+ * If we succesfully released the image, Clear our release point so we
+ * don't repeat this.
+ */
+ if (ret == EGL_TRUE) {
+ image->releasePending = false;
+ }
+
+end:
+ for (i = 0; i < surface->ctx.numStreamImages; i++) {
+ pthread_mutex_unlock(&surface->ctx.streamImages[i]->mutex);
+ }
+
+ free(syncPoints);
+ free(syncobjs);
+
+ return ret;
+}
+
static EGLint
acquire_surface_image(WlEglDisplay *display, WlEglSurface *surface)
{
@@ -974,12 +1260,33 @@
EGLint offset;
uint32_t i;
int fd;
+ EGLSyncKHR acquireSync = EGL_NO_SYNC_KHR;
+ const EGLint attribs[] = {
+ EGL_SYNC_NATIVE_FENCE_FD_ANDROID, EGL_NO_NATIVE_FENCE_FD_ANDROID,
+ EGL_SYNC_STATUS, EGL_SIGNALED,
+ EGL_NONE,
+ };
+
+ if (surface->wlSyncobjSurf) {
+ /*
+ * don't flush before acquireImage, we have to pass it in signaled.
+ *
+ * acquireImage will reset this, causing the fd to populate.
+ */
+ acquireSync = data->egl.createSync(dpy, EGL_SYNC_NATIVE_FENCE_ANDROID,
+ attribs);
+ if (acquireSync == EGL_NO_SYNC_KHR) {
+ return EGL_BAD_SURFACE;
+ }
+ }
if (!data->egl.streamAcquireImage(dpy,
surface->ctx.eglStream,
&eglImage,
- EGL_NO_SYNC_KHR)) {
- return EGL_BAD_SURFACE;
+ acquireSync)) {
+ if (acquireSync != EGL_NO_SYNC_KHR) {
+ goto fail_destroy_sync;
+ }
}
for (i = 0; i < surface->ctx.numStreamImages; i++) {
@@ -990,11 +1297,13 @@
}
if (!image) {
- goto fail_release;
+ goto fail_destroy_sync;
}
pthread_mutex_lock(&image->mutex);
+ image->acquireSync = acquireSync;
+
if (!image->buffer) {
if (!data->egl.exportDMABUFImageQuery(dpy,
eglImage,
@@ -1058,7 +1367,8 @@
goto fail_release;
}
- if (wl_buffer_add_listener(image->buffer,
+ if (!surface->wlSyncobjSurf &&
+ wl_buffer_add_listener(image->buffer,
&stream_local_buffer_listener,
image) == -1) {
wl_buffer_destroy(image->buffer);
@@ -1081,12 +1391,23 @@
eglImage,
EGL_NO_SYNC_KHR);
+ if (image && image->acquireSync != EGL_NO_SYNC_KHR) {
+ data->egl.destroySync(dpy, image->acquireSync);
+ image->acquireSync = EGL_NO_SYNC_KHR;
+ }
+
if (image) {
/* Release the image lock */
pthread_mutex_unlock(&image->mutex);
}
return EGL_BAD_SURFACE;
+
+fail_destroy_sync:
+ if (acquireSync != EGL_NO_SYNC_KHR) {
+ data->egl.destroySync(dpy, acquireSync);
+ }
+ return EGL_BAD_SURFACE;
}
static void
@@ -1125,34 +1446,94 @@
return NULL;
}
+static int
+create_syncobj_timeline(WlEglDisplay *display, uint32_t *drmSyncobjHandleOut)
+{
+ int ret;
+
+ /* Create a DRM timeline and share it with the compositor */
+ if (drmSyncobjCreate(display->drmFd, 0, drmSyncobjHandleOut)) {
+ return -1;
+ }
+
+ if (drmSyncobjHandleToFD(display->drmFd, *drmSyncobjHandleOut, &ret)) {
+ return -1;
+ }
+
+ return ret;
+}
+
static EGLint
-add_surface_image(WlEglDisplay *display, WlEglSurface *surface)
+init_surface_image(WlEglDisplay *display, WlEglSurface *surface,
+ WlEglStreamImage *image)
{
WlEglPlatformData *data = display->data;
EGLDisplay dpy = display->devDpy->eglDisplay;
+ int drmSyncobjFd = -1;
+
+ image->eglImage = data->egl.createImage(dpy, EGL_NO_CONTEXT,
+ EGL_STREAM_CONSUMER_IMAGE_NV,
+ (EGLClientBuffer)surface->ctx.eglStream,
+ NULL);
+ if (image->eglImage == EGL_NO_IMAGE_KHR) {
+ return EGL_BAD_ALLOC;
+ }
+
+ /*
+ * Create a per-stream image release timeline.
+ *
+ * This is needed since we will be the ones signaling acquire points. If the acquire points
+ * are on the same timeline as the release points then they will accidentally signal all
+ * pending release points.
+ */
+ if (surface->wlSyncobjSurf) {
+ drmSyncobjFd = create_syncobj_timeline(display, &image->drmSyncobjHandle);
+ if (drmSyncobjFd < 0) {
+ goto fail;
+ }
+ image->acquireSync = EGL_NO_SYNC_KHR;
+
+ /* Get a DRM timeline wl object */
+ image->wlReleaseTimeline =
+ wp_linux_drm_syncobj_manager_v1_import_timeline(display->wlDrmSyncobj, drmSyncobjFd);
+ if (!image->wlReleaseTimeline) {
+ goto fail;
+ }
+
+ close(drmSyncobjFd);
+ }
+
+ return EGL_SUCCESS;
+
+fail:
+ if (image->drmSyncobjHandle) {
+ drmSyncobjDestroy(display->drmFd, image->drmSyncobjHandle);
+ }
+
+ if (drmSyncobjFd > 0) {
+ close(drmSyncobjFd);
+ }
+
+ data->egl.destroyImage(dpy, image->eglImage);
+ return EGL_BAD_ALLOC;
+}
+
+static EGLint
+add_surface_image(WlEglDisplay *display, WlEglSurface *surface)
+{
WlEglStreamImage **newImages;
WlEglStreamImage *image;
- EGLImageKHR eglImage;
+ EGLint ret;
uint32_t i;
for (i = 0; i < surface->ctx.numStreamImages; i++) {
image = surface->ctx.streamImages[i];
pthread_mutex_lock(&image->mutex);
if ((image->eglImage == EGL_NO_IMAGE_KHR) && !image->buffer) {
- eglImage = image->eglImage =
- data->egl.createImage(dpy,
- EGL_NO_CONTEXT,
- EGL_STREAM_CONSUMER_IMAGE_NV,
- (EGLClientBuffer)surface->ctx.eglStream,
- NULL);
+ ret = init_surface_image(display, surface, image);
pthread_mutex_unlock(&image->mutex);
-
- if (eglImage != EGL_NO_IMAGE_KHR) {
- return EGL_SUCCESS;
- } else {
- return EGL_BAD_ALLOC;
- }
+ return ret;
}
pthread_mutex_unlock(&image->mutex);
}
@@ -1187,14 +1568,8 @@
}
wl_list_init(&newImages[i]->acquiredLink);
- newImages[i]->eglImage =
- data->egl.createImage(dpy,
- EGL_NO_CONTEXT,
- EGL_STREAM_CONSUMER_IMAGE_NV,
- (EGLClientBuffer)surface->ctx.eglStream,
- NULL);
- if (newImages[i]->eglImage == EGL_NO_IMAGE_KHR) {
+ if (init_surface_image(display, surface, newImages[i]) != EGL_SUCCESS) {
wlEglMutexDestroy(&newImages[i]->mutex);
goto free_image;
}
@@ -1218,6 +1593,7 @@
EGLAttrib aux;
EGLenum event;
EGLint err = EGL_SUCCESS;
+ EGLTime timeout = surface->wlSyncobjSurf ? EGL_FOREVER : 0;
if (surface->ctx.wlStreamResource) {
/* Not a local stream */
@@ -1225,9 +1601,14 @@
}
while (1) {
+ /*
+ * With explicit sync we should block here and not return until we have
+ * acquired a new image. The stream will not release the image until
+ * the release point we handed to the compositor signals.
+ */
err = data->egl.queryStreamConsumerEvent(dpy,
surface->ctx.eglStream,
- 0,
+ timeout,
&event,
&aux);
@@ -1247,6 +1628,8 @@
switch (event) {
case EGL_STREAM_IMAGE_AVAILABLE_NV:
err = acquire_surface_image(display, surface);
+ /* Clear our timeout so we exit after all events are handled */
+ timeout = 0;
break;
case EGL_STREAM_IMAGE_ADD_NV:
err = add_surface_image(display, surface);
@@ -1457,7 +1840,12 @@
wl_list_init(&surface->ctx.acquiredImages);
- if (!surface->wlBufferEventQueue) {
+ /*
+ * Don't enable the buffer release thread when explicit sync is in use.
+ * In explicit sync we don't care about the delivery of release events, we
+ * only pay attention to the release points.
+ */
+ if (!surface->wlBufferEventQueue && !surface->wlSyncobjSurf) {
/*
* Local stream contexts need a private wayland queue used by a separate
* thread that can process buffer release events even the application
@@ -1651,6 +2039,7 @@
/* Check whether we should use a damage thread */
surface->ctx.useDamageThread =
+ !surface->wlSyncobjSurf &&
display->devDpy->exts.stream_fifo_synchronous &&
display->devDpy->exts.stream_sync &&
data->egl.queryStream(display->devDpy->eglDisplay,
@@ -1967,7 +2356,9 @@
return EGL_FALSE;
case EGL_PRESENT_OPAQUE_EXT:
- return EGL_TRUE;
+ return (value == EGL_TRUE ||
+ value == EGL_FALSE) ? EGL_TRUE :
+ EGL_FALSE;
/* If attribute is supported/unsupported for both EGL_WINDOW_BIT and
* EGL_STREAM_BIT_KHR, then that will be handled inside the actual
@@ -2013,7 +2404,7 @@
if (attribs) {
for (i = 0; attribs[i] != EGL_NONE; i += 2) {
if (attribs[i] == EGL_PRESENT_OPAQUE_EXT) {
- surface->presentOpaque = EGL_TRUE;
+ surface->presentOpaque = attribs[i + 1];
continue;
}
if ((attribs[i] != EGL_RENDER_BUFFER) &&
@@ -2151,6 +2542,11 @@
wlEglDestroyFeedback(&surface->feedback);
+ if (surface->wlSyncobjSurf) {
+ wp_linux_drm_syncobj_surface_v1_destroy(surface->wlSyncobjSurf);
+ wp_linux_drm_syncobj_timeline_v1_destroy(surface->wlAcquireTimeline);
+ }
+
if (surface->presentFeedbackQueue != NULL) {
wl_event_queue_destroy(surface->presentFeedbackQueue);
surface->presentFeedbackQueue = NULL;
@@ -2247,6 +2643,7 @@
EGLBoolean res = EGL_FALSE;
EGLint err = EGL_SUCCESS;
EGLint surfType;
+ int drmSyncobjFd = -1;
if (!display) {
return EGL_NO_SURFACE;
@@ -2319,9 +2716,31 @@
surface->isSurfaceProducer = EGL_TRUE;
surface->refCount = 1;
surface->isDestroyed = EGL_FALSE;
+ surface->syncPoint = 1;
// FIFO_LENGTH == 1 to set FIFO mode, FIFO_LENGTH == 0 to set MAILBOX mode
+ // We set two here however to bump the "swapchain" count to 4 on Wayland.
+ // This is done to better match what Mesa does, as apparently 4 is the
+ // expectation on wayland.
+ // https://gitlab.freedesktop.org/mesa/mesa/-/issues/6249#note_1328923
+ //
+ // The problem users are running into is that we always have to advance to
+ // a new buffer (in PresentCore) because the driver always expects to be
+ // incremented to the next valid buffer as part of swapbuffers. So
+ // currently it seems one of the three images will always be owned by the
+ // driver (either the buffer currently/just rendered to, or the one we just
+ // advanced to for future rendering)
+ //
+ // So the three buffers are used up by:
+ // 1. One buffer owned by the driver
+ // 2. One buffer that just got committed and shared with the compositor
+ // 3. One buffer owned by the compositor, pending a release
+ //
+ // For whatever reason Kwin is holding onto 2 and 3 indefinitely when the
+ // dock gets hidden, and we hold onto 1 and try waiting for one of the
+ // other two to become free. We need a fourth to allow us to continue feeding
+ // the driver .
surface->fifoLength = (display->devDpy->exts.stream_fifo_synchronous &&
- display->devDpy->exts.stream_sync) ? 1 : 0;
+ display->devDpy->exts.stream_sync) ? 2 : 0;
// Create per surface wayland queue
surface->wlEventQueue = wl_display_create_queue(display->nativeDpy);
@@ -2365,6 +2784,28 @@
surface->feedback.unprocessedFeedback = false;
}
+ if (display->wlDrmSyncobj) {
+ /* Create a DRM timeline and share it with the compositor */
+ drmSyncobjFd = create_syncobj_timeline(display, &surface->drmSyncobjHandle);
+ if (drmSyncobjFd < 0) {
+ goto fail;
+ }
+
+ /* Get a per-surface explicit sync object, share our DRM syncobj with the compositor */
+ surface->wlSyncobjSurf =
+ wp_linux_drm_syncobj_manager_v1_get_surface(display->wlDrmSyncobj, surface->wlSurface);
+
+ surface->wlAcquireTimeline =
+ wp_linux_drm_syncobj_manager_v1_import_timeline(display->wlDrmSyncobj, drmSyncobjFd);
+ close(drmSyncobjFd);
+ drmSyncobjFd = -1;
+
+ if (!surface->wlSyncobjSurf || !surface->wlAcquireTimeline) {
+ err = EGL_BAD_ALLOC;
+ goto fail;
+ }
+ }
+
err = create_surface_context(surface);
if (err != EGL_SUCCESS) {
goto fail;
@@ -2391,6 +2832,14 @@
return surface;
fail:
+ if (surface->drmSyncobjHandle) {
+ drmSyncobjDestroy(display->drmFd, surface->drmSyncobjHandle);
+ }
+
+ if (drmSyncobjFd > 0) {
+ close(drmSyncobjFd);
+ }
+
if (surface) {
wlEglDestroySurface(display, surface);
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/egl-wayland-1.1.13/src/wayland-eglswap.c new/egl-wayland-1.1.14/src/wayland-eglswap.c
--- old/egl-wayland-1.1.13/src/wayland-eglswap.c 2023-10-18 20:00:18.000000000 +0200
+++ new/egl-wayland-1.1.14/src/wayland-eglswap.c 2024-07-17 20:13:07.000000000 +0200
@@ -148,6 +148,7 @@
} else {
wlEglCreateFrameSync(surface);
res = wlEglSendDamageEvent(surface, surface->wlEventQueue);
+ wlEglSurfaceCheckReleasePoints(display, surface);
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/egl-wayland-1.1.13/src/wayland-external-exports.c new/egl-wayland-1.1.14/src/wayland-external-exports.c
--- old/egl-wayland-1.1.13/src/wayland-external-exports.c 2023-10-18 20:00:18.000000000 +0200
+++ new/egl-wayland-1.1.14/src/wayland-external-exports.c 2024-07-17 20:13:07.000000000 +0200
@@ -96,7 +96,8 @@
EGLExtPlatform *platform)
{
if (!platform ||
- !EGL_EXTERNAL_PLATFORM_VERSION_CHECK(major, minor)) {
+ !EGL_EXTERNAL_PLATFORM_VERSION_CMP(major, minor,
+ WAYLAND_EXTERNAL_VERSION_MAJOR, WAYLAND_EXTERNAL_VERSION_MINOR)) {
return EGL_FALSE;
}
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package libgcrypt for openSUSE:Factory checked in at 2024-07-24 15:29:19
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libgcrypt (Old)
and /work/SRC/openSUSE:Factory/.libgcrypt.new.1869 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libgcrypt"
Wed Jul 24 15:29:19 2024 rev:103 rq:1183830 version:1.11.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/libgcrypt/libgcrypt.changes 2024-01-29 22:25:50.142528789 +0100
+++ /work/SRC/openSUSE:Factory/.libgcrypt.new.1869/libgcrypt.changes 2024-07-25 11:55:32.197478957 +0200
@@ -1,0 +2,94 @@
+Thu Jun 20 08:11:07 UTC 2024 - Pedro Monreal <pmonreal(a)suse.com>
+
+- Update to 1.11.0:
+ * New and extended interfaces:
+ - Add an API for Key Encapsulation Mechanism (KEM). [T6755]
+ - Add Streamlined NTRU Prime sntrup761 algorithm. [rCcf9923e1a5]
+ - Add Kyber algorithm according to FIPS 203 ipd 2023-08-24. [rC18e5c0d268]
+ - Add Classic McEliece algorithm. [rC003367b912]
+ - Add One-Step KDF with hash and MAC. [T5964]
+ - Add KDF algorithm HKDF of RFC-5869. [T5964]
+ - Add KDF algorithm X963KDF for use in CMS. [rC3abac420b3]
+ - Add GMAC-SM4 and Poly1305-SM4. [rCd1ccc409d4]
+ - Add ARIA block cipher algorithm. [rC316c6d7715]
+ - Add explicit FIPS indicators for MD and MAC algorithms. [T6376]
+ - Add support for SHAKE as MGF in RSA. [T6557]
+ - Add gcry_md_read support for SHAKE algorithms. [T6539]
+ - Add gcry_md_hash_buffers_ext function. [T7035]
+ - Add cSHAKE hash algorithm. [rC065b3f4e02]
+ - Support internal generation of IV for AEAD cipher mode. [T4873]
+ * Performance:
+ - Add SM3 ARMv8/AArch64/CE assembly implementation. [rCfe891ff4a3]
+ - Add SM4 ARMv8/AArch64 assembly implementation. [rCd8825601f1]
+ - Add SM4 GFNI/AVX2 and GFI/AVX512 implementation. [rC5095d60af4,rCeaed633c16]
+ - Add SM4 ARMv9 SVE CE assembly implementation. [rC2dc2654006]
+ - Add PowerPC vector implementation of SM4. [rC0b2da804ee]
+ - Optimize ChaCha20 and Poly1305 for PPC P10 LE. [T6006]
+ - Add CTR32LE bulk acceleration for AES on PPC. [rC84f2e2d0b5]
+ - Add generic bulk acceleration for CTR32LE mode (GCM-SIV) for SM4
+ and Camellia. [rCcf956793af]
+ - Add GFNI/AVX2 implementation of Camellia. [rC4e6896eb9f]
+ - Add AVX2 and AVX512 accelerated implementations for GHASH (GCM)
+ and POLYVAL (GCM-SIV). [rCd857e85cb4, rCe6f3600193]
+ - Add AVX512 implementation for SHA512. [rC089223aa3b]
+ - Add AVX512 implementation for Serpent. [rCce95b6ec35]
+ - Add AVX512 implementation for Poly1305 and ChaCha20. [rCcd3ed49770, rC9a63cfd617]
+ - Add AVX512 accelerated implementation for SHA3 and Blake2. [rCbeaad75f46,rC909daa700e]
+ - Add VAES/AVX2 accelerated i386 implementation for AES. [rC4a42a042bc]
+ - Add bulk processing for XTS mode of Camellia and SM4. [rC32b18cdb87, rCaad3381e93]
+ - Accelerate XTS and ECB modes for Twofish and Serpent. [rCd078a928f5,rC8a1fe5f78f]
+ - Add AArch64 crypto/SHA512 extension implementation for SHA512. [rCe51d3b8330]
+ - Add AArch64 crypto-extension implementation for Camellia. [rC898c857206]
+ - Accelerate OCB authentication on AMD with AVX2. [rC6b47e85d65]
+ * Bug fixes:
+ - For PowerPC check for missing optimization level for vector register usage. [T5785]
+ - Fix EdDSA secret key check. [T6511]
+ - Fix decoding of PKCS#1-v1.5 and OAEP padding. [rC34c2042792]
+ - Allow use of PKCS#1-v1.5 with SHA3 algorithms. [T6976]
+ - Fix AESWRAP padding length check. [T7130]
+ * Other:
+ - Allow empty password for Argon2 KDF. [rCa20700c55f]
+ - Various constant time operation imporvements.
+ - Add "bp256", "bp384", "bp512" aliases for Brainpool curves.
+ - Support for the random server has been removed. [T5811]
+ - The control code GCRYCTL_ENABLE_M_GUARD is deprecated and not
+ supported any more. Please use valgrind or other tools. [T5822]
+ - Logging is now done via the libgpg-error logging functions. [rCab0bdc72c7]
+ * Remove patches fixed upstream:
+ - libgcrypt-no-deprecated-grep-alias.patch
+ - libgcrypt-Chacha20-poly1305-Optimized-chacha20-poly1305.patch
+ - libgcrypt-ppc-enable-P10-assembly-with-ENABLE_FORCE_SOF.patch
+ * Rebase patches:
+ - libgcrypt-FIPS-jitter-errorcodes.patch
+ - libgcrypt-FIPS-jitter-whole-entropy.patch
+
+-------------------------------------------------------------------
+Wed Mar 20 20:31:40 UTC 2024 - Pedro Monreal <pmonreal(a)suse.com>
+
+- FIPS: Make sure that Libgcrypt makes use of the built-in Jitter RNG
+ for the whole length entropy buffer in FIPS mode. [bsc#1220893]
+ * Add libgcrypt-FIPS-jitter-whole-entropy.patch
+
+-------------------------------------------------------------------
+Wed Mar 20 15:13:04 UTC 2024 - Pedro Monreal <pmonreal(a)suse.com>
+
+- FIPS: Set the FSM into error state if Jitter RNG is returning an
+ error code to the caller when an health test error occurs when
+ random bytes are requested through the jent_read_entropy_safe()
+ function. [bsc#1220895]
+ * Add libgcrypt-FIPS-jitter-errorcodes.patch
+
+-------------------------------------------------------------------
+Mon Mar 11 16:02:55 UTC 2024 - Pedro Monreal <pmonreal(a)suse.com>
+
+- FIPS: Replace the built-in jitter rng with standalone version
+ * Remove the internal jitterentropy copy [bsc#1220896]
+ * Add libgcrypt-FIPS-jitter-standalone.patch
+ * Remove not needed libgcrypt-jitterentropy-3.4.0.patch
+
+-------------------------------------------------------------------
+Mon Feb 26 12:13:56 UTC 2024 - Pedro Monreal <pmonreal(a)suse.com>
+
+- Update upstream libgcrypt.keyring
+
+-------------------------------------------------------------------
Old:
----
libgcrypt-1.10.3.tar.bz2
libgcrypt-1.10.3.tar.bz2.sig
libgcrypt-Chacha20-poly1305-Optimized-chacha20-poly1305.patch
libgcrypt-jitterentropy-3.4.0.patch
libgcrypt-no-deprecated-grep-alias.patch
libgcrypt-ppc-enable-P10-assembly-with-ENABLE_FORCE_SOF.patch
New:
----
libgcrypt-1.11.0.tar.bz2
libgcrypt-1.11.0.tar.bz2.sig
libgcrypt-FIPS-jitter-errorcodes.patch
libgcrypt-FIPS-jitter-standalone.patch
libgcrypt-FIPS-jitter-whole-entropy.patch
BETA DEBUG BEGIN:
Old: - libgcrypt-no-deprecated-grep-alias.patch
- libgcrypt-Chacha20-poly1305-Optimized-chacha20-poly1305.patch
- libgcrypt-ppc-enable-P10-assembly-with-ENABLE_FORCE_SOF.patch
Old: * Add libgcrypt-FIPS-jitter-standalone.patch
* Remove not needed libgcrypt-jitterentropy-3.4.0.patch
Old: * Remove patches fixed upstream:
- libgcrypt-no-deprecated-grep-alias.patch
- libgcrypt-Chacha20-poly1305-Optimized-chacha20-poly1305.patch
Old: - libgcrypt-Chacha20-poly1305-Optimized-chacha20-poly1305.patch
- libgcrypt-ppc-enable-P10-assembly-with-ENABLE_FORCE_SOF.patch
* Rebase patches:
BETA DEBUG END:
BETA DEBUG BEGIN:
New: * Rebase patches:
- libgcrypt-FIPS-jitter-errorcodes.patch
- libgcrypt-FIPS-jitter-whole-entropy.patch
New: * Remove the internal jitterentropy copy [bsc#1220896]
* Add libgcrypt-FIPS-jitter-standalone.patch
* Remove not needed libgcrypt-jitterentropy-3.4.0.patch
New: - libgcrypt-FIPS-jitter-errorcodes.patch
- libgcrypt-FIPS-jitter-whole-entropy.patch
BETA DEBUG END:
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ libgcrypt.spec ++++++
--- /var/tmp/diff_new_pack.LVTANq/_old 2024-07-25 11:55:33.241521089 +0200
+++ /var/tmp/diff_new_pack.LVTANq/_new 2024-07-25 11:55:33.245521251 +0200
@@ -20,7 +20,7 @@
%define libsoname %{name}%{libsover}
%define hmac_key orboDeJITITejsirpADONivirpUkvarP
Name: libgcrypt
-Version: 1.10.3
+Version: 1.11.0
Release: 0
Summary: The GNU Crypto Library
License: GPL-2.0-or-later AND LGPL-2.1-or-later AND GPL-3.0-or-later
@@ -31,14 +31,12 @@
Source2: baselibs.conf
Source3: random.conf
Source4: hwf.deny
-# https://gnupg.org/signature_key.asc
-Source5: libgcrypt.keyring
+# https://www.gnupg.org/signature_key.html
+Source5: https://gnupg.org/signature_key.asc#/%{name}.keyring
Source99: libgcrypt.changes
Patch1: libgcrypt-1.10.0-allow_FSM_same_state.patch
#PATCH-FIX-OPENSUSE Do not pull revision info from GIT when autoconf is run
Patch2: libgcrypt-nobetasuffix.patch
-# https://dev.gnupg.org/T6964
-Patch3: libgcrypt-no-deprecated-grep-alias.patch
# FIPS patches:
#PATCH-FIX-SUSE bsc#1190700 FIPS: Provide a service-level indicator for PK
Patch100: libgcrypt-FIPS-SLI-pk.patch
@@ -46,15 +44,16 @@
Patch101: libgcrypt-FIPS-SLI-kdf-leylength.patch
#PATCH-FIX-SUSE bsc#1190700 FIPS add indicators
Patch102: libgcrypt-FIPS-SLI-hash-mac.patch
-#PATCH-FIX-SUSE bsc#1202117 jsc#SLE-24941 FIPS: Port libgcrypt to use jitterentropy
-Patch103: libgcrypt-jitterentropy-3.4.0.patch
#PATCH-FIX-SUSE bsc#1202117 FIPS: Get most of the entropy from rndjent_poll
Patch104: libgcrypt-FIPS-rndjent_poll.patch
-# POWER patches [jsc#PED-5088] POWER performance enhancements for cryptography
-Patch200: libgcrypt-Chacha20-poly1305-Optimized-chacha20-poly1305.patch
-Patch201: libgcrypt-ppc-enable-P10-assembly-with-ENABLE_FORCE_SOF.patch
+#PATCH-FIX-SUSE bsc#1220896 FIPS: Replace the built-in jitter rng with standalone version
+Patch105: libgcrypt-FIPS-jitter-standalone.patch
+#PATCH-FIX-SUSE bsc#1220895 FIPS: Enforce the interpretation and use of jitter rng
+Patch106: libgcrypt-FIPS-jitter-errorcodes.patch
+#PATCH-FIX-SUSE bsc#1220893 FIPS: Use Jitter RNG for the whole length entropy buffer
+Patch107: libgcrypt-FIPS-jitter-whole-entropy.patch
BuildRequires: automake >= 1.14
-BuildRequires: libgpg-error-devel >= 1.27
+BuildRequires: libgpg-error-devel >= 1.49
BuildRequires: libtool
BuildRequires: makeinfo
BuildRequires: pkgconfig
@@ -70,6 +69,8 @@
Summary: The GNU Crypto Library
License: GPL-2.0-or-later AND LGPL-2.1-or-later
Group: System/Libraries
+BuildRequires: jitterentropy-devel >= 3.4.0
+Requires: libjitterentropy3 >= 3.4.0
Provides: %{libsoname}-hmac = %{version}-%{release}
Obsoletes: %{libsoname}-hmac < %{version}-%{release}
@@ -83,7 +84,8 @@
Group: Development/Libraries/C and C++
Requires: %{libsoname} = %{version}
Requires: glibc-devel
-Requires: libgpg-error-devel >= 1.27
+Requires: jitterentropy-devel >= 3.4.0
+Requires: libgpg-error-devel >= 1.49
%description devel
Libgcrypt is a general purpose library of cryptographic building
@@ -100,9 +102,12 @@
# Rename the internal .hmac file to include the so library version
sed -i "s/libgcrypt\.so\.hmac/\.libgcrypt\.so\.%{libsover}\.hmac/g" src/Makefile.am src/Makefile.in
+# Replace the built-in jitter rng with the standalone version [bsc#1220896]
+find . -type f -name "jitterentropy*" -print -delete
+
%build
export PUBKEYS="dsa elgamal rsa ecc"
-export CIPHERS="arcfour blowfish cast5 des aes twofish serpent rfc2268 seed camellia idea salsa20 gost28147 chacha20 sm4"
+export CIPHERS="arcfour blowfish cast5 des aes twofish serpent rfc2268 seed camellia idea salsa20 gost28147 chacha20 sm4 aria"
export DIGESTS="crc gostr3411-94 md4 md5 rmd160 sha1 sha256 sha512 sha3 tiger whirlpool stribog blake2 sm3"
export KDFS="s2k pkdf2 scrypt"
@@ -124,6 +129,7 @@
--disable-asm \
%endif
--enable-random=getentropy \
+ --enable-jent-support \
%{nil}
%make_build
@@ -140,7 +146,6 @@
# for a simple reason: the macro strips the binaries and thereby
# invalidates a HMAC that may have been created earlier.
# solution: create the hashes _after_ the macro runs.
-
%define libpath %{buildroot}%{_libdir}/libgcrypt.so.%{libsover}.?.?
%define __spec_install_post \
%{?__debug_package:%{__debug_install_post}} \
++++++ libgcrypt-1.10.3.tar.bz2 -> libgcrypt-1.11.0.tar.bz2 ++++++
++++ 96190 lines of diff (skipped)
++++++ libgcrypt-FIPS-SLI-hash-mac.patch ++++++
--- /var/tmp/diff_new_pack.LVTANq/_old 2024-07-25 11:55:34.637577428 +0200
+++ /var/tmp/diff_new_pack.LVTANq/_new 2024-07-25 11:55:34.641577589 +0200
@@ -1,8 +1,8 @@
-Index: libgcrypt-1.10.2/doc/gcrypt.texi
+Index: libgcrypt-1.11.0/doc/gcrypt.texi
===================================================================
---- libgcrypt-1.10.2.orig/doc/gcrypt.texi
-+++ libgcrypt-1.10.2/doc/gcrypt.texi
-@@ -985,13 +985,21 @@ certification. If the function is approv
+--- libgcrypt-1.11.0.orig/doc/gcrypt.texi
++++ libgcrypt-1.11.0/doc/gcrypt.texi
+@@ -998,13 +998,21 @@ certification. If the function is approv
@code{GPG_ERR_NO_ERROR} (other restrictions might still apply).
Otherwise @code{GPG_ERR_NOT_SUPPORTED} is returned.
@@ -28,11 +28,11 @@
@item GCRYCTL_FIPS_SERVICE_INDICATOR_MD; Arguments: enum gcry_md_algos
Check if the given message digest algorithm is approved under the current
-Index: libgcrypt-1.10.2/src/fips.c
+Index: libgcrypt-1.11.0/src/fips.c
===================================================================
---- libgcrypt-1.10.2.orig/src/fips.c
-+++ libgcrypt-1.10.2/src/fips.c
-@@ -377,31 +378,6 @@ _gcry_fips_indicator_cipher (va_list arg
+--- libgcrypt-1.11.0.orig/src/fips.c
++++ libgcrypt-1.11.0/src/fips.c
+@@ -378,31 +378,6 @@ _gcry_fips_indicator_cipher (va_list arg
}
}
@@ -64,7 +64,7 @@
/* FIPS approved curves, extracted from:
* cipher/ecc-curves.c:curve_aliases[] and domain_parms[]. */
static const struct
-@@ -598,6 +574,62 @@ _gcry_fips_indicator_pk_flags (va_list a
+@@ -602,6 +577,62 @@ _gcry_fips_indicator_pk_flags (va_list a
return GPG_ERR_NOT_SUPPORTED;
}
@@ -127,11 +127,11 @@
/* This is a test on whether the library is in the error or
operational state. */
-Index: libgcrypt-1.10.2/src/g10lib.h
+Index: libgcrypt-1.11.0/src/g10lib.h
===================================================================
---- libgcrypt-1.10.2.orig/src/g10lib.h
-+++ libgcrypt-1.10.2/src/g10lib.h
-@@ -456,6 +456,7 @@ void _gcry_fips_signal_error (const char
+--- libgcrypt-1.11.0.orig/src/g10lib.h
++++ libgcrypt-1.11.0/src/g10lib.h
+@@ -469,6 +469,7 @@ void _gcry_fips_signal_error (const char
#endif
int _gcry_fips_indicator_cipher (va_list arg_ptr);
@@ -139,25 +139,25 @@
int _gcry_fips_indicator_mac (va_list arg_ptr);
int _gcry_fips_indicator_md (va_list arg_ptr);
int _gcry_fips_indicator_kdf (va_list arg_ptr);
-Index: libgcrypt-1.10.2/src/gcrypt.h.in
+Index: libgcrypt-1.11.0/src/gcrypt.h.in
===================================================================
---- libgcrypt-1.10.2.orig/src/gcrypt.h.in
-+++ libgcrypt-1.10.2/src/gcrypt.h.in
-@@ -335,7 +335,8 @@ enum gcry_ctl_cmds
- GCRYCTL_FIPS_SERVICE_INDICATOR_MAC = 85,
+--- libgcrypt-1.11.0.orig/src/gcrypt.h.in
++++ libgcrypt-1.11.0/src/gcrypt.h.in
+@@ -336,7 +336,8 @@ enum gcry_ctl_cmds
GCRYCTL_FIPS_SERVICE_INDICATOR_MD = 86,
GCRYCTL_FIPS_SERVICE_INDICATOR_PK_FLAGS = 87,
-- GCRYCTL_FIPS_SERVICE_INDICATOR_PK = 88
-+ GCRYCTL_FIPS_SERVICE_INDICATOR_PK = 88,
-+ GCRYCTL_FIPS_SERVICE_INDICATOR_HASH = 89
+ GCRYCTL_MD_CUSTOMIZE = 88,
+- GCRYCTL_FIPS_SERVICE_INDICATOR_PK = 89
++ GCRYCTL_FIPS_SERVICE_INDICATOR_PK = 89,
++ GCRYCTL_FIPS_SERVICE_INDICATOR_HASH = 90
};
/* Perform various operations defined by CMD. */
-Index: libgcrypt-1.10.2/src/global.c
+Index: libgcrypt-1.11.0/src/global.c
===================================================================
---- libgcrypt-1.10.2.orig/src/global.c
-+++ libgcrypt-1.10.2/src/global.c
-@@ -791,6 +791,12 @@ _gcry_vcontrol (enum gcry_ctl_cmds cmd,
+--- libgcrypt-1.11.0.orig/src/global.c
++++ libgcrypt-1.11.0/src/global.c
+@@ -794,6 +794,12 @@ _gcry_vcontrol (enum gcry_ctl_cmds cmd,
rc = _gcry_fips_indicator_cipher (arg_ptr);
break;
++++++ libgcrypt-FIPS-SLI-pk.patch ++++++
--- /var/tmp/diff_new_pack.LVTANq/_old 2024-07-25 11:55:34.653578073 +0200
+++ /var/tmp/diff_new_pack.LVTANq/_new 2024-07-25 11:55:34.657578234 +0200
@@ -1,7 +1,7 @@
-Index: libgcrypt-1.10.2/src/fips.c
+Index: libgcrypt-1.11.0/src/fips.c
===================================================================
---- libgcrypt-1.10.2.orig/src/fips.c
-+++ libgcrypt-1.10.2/src/fips.c
+--- libgcrypt-1.11.0.orig/src/fips.c
++++ libgcrypt-1.11.0/src/fips.c
@@ -38,6 +38,7 @@
#include "g10lib.h"
@@ -10,7 +10,7 @@
#include "../random/random.h"
/* The states of the finite state machine used in fips mode. */
-@@ -399,6 +400,94 @@ _gcry_fips_indicator_mac (va_list arg_pt
+@@ -400,6 +401,94 @@ _gcry_fips_indicator_mac (va_list arg_pt
default:
return GPG_ERR_NOT_SUPPORTED;
}
@@ -105,25 +105,25 @@
}
int
-Index: libgcrypt-1.10.2/src/gcrypt.h.in
+Index: libgcrypt-1.11.0/src/gcrypt.h.in
===================================================================
---- libgcrypt-1.10.2.orig/src/gcrypt.h.in
-+++ libgcrypt-1.10.2/src/gcrypt.h.in
-@@ -334,7 +334,8 @@ enum gcry_ctl_cmds
- GCRYCTL_FIPS_SERVICE_INDICATOR_FUNCTION = 84,
+--- libgcrypt-1.11.0.orig/src/gcrypt.h.in
++++ libgcrypt-1.11.0/src/gcrypt.h.in
+@@ -335,7 +335,8 @@ enum gcry_ctl_cmds
GCRYCTL_FIPS_SERVICE_INDICATOR_MAC = 85,
GCRYCTL_FIPS_SERVICE_INDICATOR_MD = 86,
-- GCRYCTL_FIPS_SERVICE_INDICATOR_PK_FLAGS = 87
-+ GCRYCTL_FIPS_SERVICE_INDICATOR_PK_FLAGS = 87,
-+ GCRYCTL_FIPS_SERVICE_INDICATOR_PK = 88
+ GCRYCTL_FIPS_SERVICE_INDICATOR_PK_FLAGS = 87,
+- GCRYCTL_MD_CUSTOMIZE = 88
++ GCRYCTL_MD_CUSTOMIZE = 88,
++ GCRYCTL_FIPS_SERVICE_INDICATOR_PK = 89
};
/* Perform various operations defined by CMD. */
-Index: libgcrypt-1.10.2/doc/gcrypt.texi
+Index: libgcrypt-1.11.0/doc/gcrypt.texi
===================================================================
---- libgcrypt-1.10.2.orig/doc/gcrypt.texi
-+++ libgcrypt-1.10.2/doc/gcrypt.texi
-@@ -997,6 +997,19 @@ Check if the given message digest algori
+--- libgcrypt-1.11.0.orig/doc/gcrypt.texi
++++ libgcrypt-1.11.0/doc/gcrypt.texi
+@@ -1010,6 +1010,19 @@ Check if the given message digest algori
FIPS 140-3 certification. If the algorithm is approved, this function returns
@code{GPG_ERR_NO_ERROR}. Otherwise @code{GPG_ERR_NOT_SUPPORTED} is returned.
@@ -143,11 +143,11 @@
@item GCRYCTL_FIPS_SERVICE_INDICATOR_PK_FLAGS; Arguments: const char *
Check if the given public key operation flag or s-expression object name is
-Index: libgcrypt-1.10.2/src/g10lib.h
+Index: libgcrypt-1.11.0/src/g10lib.h
===================================================================
---- libgcrypt-1.10.2.orig/src/g10lib.h
-+++ libgcrypt-1.10.2/src/g10lib.h
-@@ -460,6 +460,7 @@ int _gcry_fips_indicator_mac (va_list ar
+--- libgcrypt-1.11.0.orig/src/g10lib.h
++++ libgcrypt-1.11.0/src/g10lib.h
+@@ -473,6 +473,7 @@ int _gcry_fips_indicator_mac (va_list ar
int _gcry_fips_indicator_md (va_list arg_ptr);
int _gcry_fips_indicator_kdf (va_list arg_ptr);
int _gcry_fips_indicator_function (va_list arg_ptr);
@@ -155,11 +155,11 @@
int _gcry_fips_indicator_pk_flags (va_list arg_ptr);
int _gcry_fips_is_operational (void);
-Index: libgcrypt-1.10.2/src/global.c
+Index: libgcrypt-1.11.0/src/global.c
===================================================================
---- libgcrypt-1.10.2.orig/src/global.c
-+++ libgcrypt-1.10.2/src/global.c
-@@ -825,6 +834,15 @@ _gcry_vcontrol (enum gcry_ctl_cmds cmd,
+--- libgcrypt-1.11.0.orig/src/global.c
++++ libgcrypt-1.11.0/src/global.c
+@@ -828,6 +828,15 @@ _gcry_vcontrol (enum gcry_ctl_cmds cmd,
rc = _gcry_fips_indicator_pk_flags (arg_ptr);
break;
++++++ libgcrypt-FIPS-jitter-errorcodes.patch ++++++
Index: libgcrypt-1.10.3/random/rndjent.c
===================================================================
--- libgcrypt-1.10.3.orig/random/rndjent.c
+++ libgcrypt-1.10.3/random/rndjent.c
@@ -319,7 +319,10 @@ _gcry_rndjent_poll (void (*add)(const vo
jent_rng_totalcalls++;
rc = jent_read_entropy_safe (&jent_rng_collector, buffer, n);
if (rc < 0)
- break;
+ {
+ fips_signal_error ("jitter entropy failed");
+ break;
+ }
/* We need to hash the output to conform to the BSI
* NTG.1 specs. */
_gcry_md_hash_buffer (GCRY_MD_SHA256, buffer, buffer, rc);
++++++ libgcrypt-FIPS-jitter-standalone.patch ++++++
Index: libgcrypt-1.10.3/random/Makefile.am
===================================================================
--- libgcrypt-1.10.3.orig/random/Makefile.am
+++ libgcrypt-1.10.3/random/Makefile.am
@@ -21,7 +21,7 @@
# Need to include ../src in addition to top_srcdir because gcrypt.h is
# a built header.
AM_CPPFLAGS = -I../src -I$(top_srcdir)/src
-AM_CFLAGS = $(GPG_ERROR_CFLAGS)
+AM_CFLAGS = $(GPG_ERROR_CFLAGS) -ljitterentropy
noinst_LTLIBRARIES = librandom.la
@@ -45,14 +45,7 @@ rndoldlinux.c \
rndegd.c \
rndunix.c \
rndw32.c \
-rndw32ce.c \
-jitterentropy-gcd.c jitterentropy-gcd.h \
-jitterentropy-health.c jitterentropy-health.h \
-jitterentropy-noise.c jitterentropy-noise.h \
-jitterentropy-sha3.c jitterentropy-sha3.h \
-jitterentropy-timer.c jitterentropy-timer.h \
-jitterentropy-base.h \
-jitterentropy-base.c jitterentropy.h jitterentropy-base-user.h
+rndw32ce.c
# The rndjent module needs to be compiled without optimization. */
if ENABLE_O_FLAG_MUNGING
@@ -61,20 +54,8 @@ else
o_flag_munging = cat
endif
-rndjent.o: $(srcdir)/rndjent.c jitterentropy-base-user.h \
- $(srcdir)/jitterentropy-gcd.c $(srcdir)/jitterentropy-gcd.h \
- $(srcdir)/jitterentropy-health.c $(srcdir)/jitterentropy-health.h \
- $(srcdir)/jitterentropy-noise.c $(srcdir)/jitterentropy-noise.h \
- $(srcdir)/jitterentropy-sha3.c $(srcdir)/jitterentropy-sha3.h \
- $(srcdir)/jitterentropy-timer.c $(srcdir)/jitterentropy-timer.h \
- $(srcdir)/jitterentropy-base.c $(srcdir)/jitterentropy.h
+rndjent.o: $(srcdir)/rndjent.c
`echo $(COMPILE) -c $(srcdir)/rndjent.c | $(o_flag_munging) `
-rndjent.lo: $(srcdir)/rndjent.c jitterentropy-base-user.h \
- $(srcdir)/jitterentropy-gcd.c $(srcdir)/jitterentropy-gcd.h \
- $(srcdir)/jitterentropy-health.c $(srcdir)/jitterentropy-health.h \
- $(srcdir)/jitterentropy-noise.c $(srcdir)/jitterentropy-noise.h \
- $(srcdir)/jitterentropy-sha3.c $(srcdir)/jitterentropy-sha3.h \
- $(srcdir)/jitterentropy-timer.c $(srcdir)/jitterentropy-timer.h \
- $(srcdir)/jitterentropy-base.c $(srcdir)/jitterentropy.h
+rndjent.lo: $(srcdir)/rndjent.c
`echo $(LTCOMPILE) -c $(srcdir)/rndjent.c | $(o_flag_munging) `
Index: libgcrypt-1.10.3/random/rndjent.c
===================================================================
--- libgcrypt-1.10.3.orig/random/rndjent.c
+++ libgcrypt-1.10.3/random/rndjent.c
@@ -94,17 +94,12 @@
* jitterentropy-user-base.h file. */
/* Tell jitterentropy* that all functions shall be static. */
-#define JENT_PRIVATE_COMPILE 1
+#undef JENT_PRIVATE_COMPILE
-#include "jitterentropy-base.c"
#ifdef JENT_CONF_ENABLE_INTERNAL_TIMER
#include <pthread.h>
#endif /* JENT_CONF_ENABLE_INTERNAL_TIMER */
-#include "jitterentropy-gcd.c"
-#include "jitterentropy-health.c"
-#include "jitterentropy-noise.c"
-#include "jitterentropy-sha3.c"
-#include "jitterentropy-timer.c"
+#include <jitterentropy.h>
/* This is the lock we use to serialize access to this RNG. The extra
* integer variable is only used to check the locking state; that is,
Index: libgcrypt-1.10.3/random/Makefile.in
===================================================================
--- libgcrypt-1.10.3.orig/random/Makefile.in
+++ libgcrypt-1.10.3/random/Makefile.in
@@ -147,12 +147,7 @@ am__v_at_1 =
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
am__maybe_remake_depfiles = depfiles
-am__depfiles_remade = ./$(DEPDIR)/jitterentropy-base.Plo \
- ./$(DEPDIR)/jitterentropy-gcd.Plo \
- ./$(DEPDIR)/jitterentropy-health.Plo \
- ./$(DEPDIR)/jitterentropy-noise.Plo \
- ./$(DEPDIR)/jitterentropy-sha3.Plo \
- ./$(DEPDIR)/jitterentropy-timer.Plo \
+am__depfiles_remade = \
./$(DEPDIR)/random-csprng.Plo ./$(DEPDIR)/random-drbg.Plo \
./$(DEPDIR)/random-system.Plo ./$(DEPDIR)/random.Plo \
./$(DEPDIR)/rndegd.Plo ./$(DEPDIR)/rndgetentropy.Plo \
@@ -378,7 +373,7 @@ top_srcdir = @top_srcdir@
# Need to include ../src in addition to top_srcdir because gcrypt.h is
# a built header.
AM_CPPFLAGS = -I../src -I$(top_srcdir)/src
-AM_CFLAGS = $(GPG_ERROR_CFLAGS)
+AM_CFLAGS = $(GPG_ERROR_CFLAGS) -ljitterentropy
noinst_LTLIBRARIES = librandom.la
GCRYPT_MODULES = @GCRYPT_RANDOM@
librandom_la_DEPENDENCIES = $(GCRYPT_MODULES)
@@ -398,14 +393,7 @@ rndoldlinux.c \
rndegd.c \
rndunix.c \
rndw32.c \
-rndw32ce.c \
-jitterentropy-gcd.c jitterentropy-gcd.h \
-jitterentropy-health.c jitterentropy-health.h \
-jitterentropy-noise.c jitterentropy-noise.h \
-jitterentropy-sha3.c jitterentropy-sha3.h \
-jitterentropy-timer.c jitterentropy-timer.h \
-jitterentropy-base.h \
-jitterentropy-base.c jitterentropy.h jitterentropy-base-user.h
+rndw32ce.c
@ENABLE_O_FLAG_MUNGING_FALSE@o_flag_munging = cat
@@ -465,12 +453,6 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jitterentropy-base.Plo@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jitterentropy-gcd.Plo@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jitterentropy-health.Plo@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jitterentropy-noise.Plo@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jitterentropy-sha3.Plo@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jitterentropy-timer.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/random-csprng.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/random-drbg.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/random-system.Plo@am__quote@ # am--include-marker
@@ -641,12 +623,6 @@ clean-am: clean-generic clean-libtool cl
mostlyclean-am
distclean: distclean-am
- -rm -f ./$(DEPDIR)/jitterentropy-base.Plo
- -rm -f ./$(DEPDIR)/jitterentropy-gcd.Plo
- -rm -f ./$(DEPDIR)/jitterentropy-health.Plo
- -rm -f ./$(DEPDIR)/jitterentropy-noise.Plo
- -rm -f ./$(DEPDIR)/jitterentropy-sha3.Plo
- -rm -f ./$(DEPDIR)/jitterentropy-timer.Plo
-rm -f ./$(DEPDIR)/random-csprng.Plo
-rm -f ./$(DEPDIR)/random-drbg.Plo
-rm -f ./$(DEPDIR)/random-system.Plo
@@ -704,12 +680,6 @@ install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-am
- -rm -f ./$(DEPDIR)/jitterentropy-base.Plo
- -rm -f ./$(DEPDIR)/jitterentropy-gcd.Plo
- -rm -f ./$(DEPDIR)/jitterentropy-health.Plo
- -rm -f ./$(DEPDIR)/jitterentropy-noise.Plo
- -rm -f ./$(DEPDIR)/jitterentropy-sha3.Plo
- -rm -f ./$(DEPDIR)/jitterentropy-timer.Plo
-rm -f ./$(DEPDIR)/random-csprng.Plo
-rm -f ./$(DEPDIR)/random-drbg.Plo
-rm -f ./$(DEPDIR)/random-system.Plo
@@ -759,22 +729,10 @@ uninstall-am:
.PRECIOUS: Makefile
-rndjent.o: $(srcdir)/rndjent.c jitterentropy-base-user.h \
- $(srcdir)/jitterentropy-gcd.c $(srcdir)/jitterentropy-gcd.h \
- $(srcdir)/jitterentropy-health.c $(srcdir)/jitterentropy-health.h \
- $(srcdir)/jitterentropy-noise.c $(srcdir)/jitterentropy-noise.h \
- $(srcdir)/jitterentropy-sha3.c $(srcdir)/jitterentropy-sha3.h \
- $(srcdir)/jitterentropy-timer.c $(srcdir)/jitterentropy-timer.h \
- $(srcdir)/jitterentropy-base.c $(srcdir)/jitterentropy.h
+rndjent.o: $(srcdir)/rndjent.c
`echo $(COMPILE) -c $(srcdir)/rndjent.c | $(o_flag_munging) `
-rndjent.lo: $(srcdir)/rndjent.c jitterentropy-base-user.h \
- $(srcdir)/jitterentropy-gcd.c $(srcdir)/jitterentropy-gcd.h \
- $(srcdir)/jitterentropy-health.c $(srcdir)/jitterentropy-health.h \
- $(srcdir)/jitterentropy-noise.c $(srcdir)/jitterentropy-noise.h \
- $(srcdir)/jitterentropy-sha3.c $(srcdir)/jitterentropy-sha3.h \
- $(srcdir)/jitterentropy-timer.c $(srcdir)/jitterentropy-timer.h \
- $(srcdir)/jitterentropy-base.c $(srcdir)/jitterentropy.h
+rndjent.lo: $(srcdir)/rndjent.c
`echo $(LTCOMPILE) -c $(srcdir)/rndjent.c | $(o_flag_munging) `
# Tell versions [3.59,3.63) of GNU make to not export all variables.
++++++ libgcrypt-FIPS-jitter-whole-entropy.patch ++++++
Index: libgcrypt-1.10.3/random/rndgetentropy.c
===================================================================
--- libgcrypt-1.10.3.orig/random/rndgetentropy.c
+++ libgcrypt-1.10.3/random/rndgetentropy.c
@@ -53,16 +53,30 @@ _gcry_rndgetentropy_gather_random (void
/* When using a blocking random generator try to get some entropy
* from the jitter based RNG. In this case we take up to 50% of the
- * remaining requested bytes. */
+ * remaining requested bytes. In FIPS mode, we get all the entropy
+ * from the jitter RNG. */
if (level >= GCRY_VERY_STRONG_RANDOM)
{
size_t n;
- n = _gcry_rndjent_poll (add, origin, length/2);
- if (n > length/2)
- n = length/2;
- if (length > 1)
- length -= n;
+ /* In FIPS mode, use the whole length of the entropy buffer from
+ * Jitter RNG */
+ if (fips_mode ())
+ {
+ n = _gcry_rndjent_poll (add, origin, length);
+ if (n != length)
+ fips_signal_error ("jitter entropy failed");
+ else
+ length = 0;
+ }
+ else
+ {
+ n = _gcry_rndjent_poll (add, origin, length/2);
+ if (n > length/2)
+ n = length/2;
+ if (length > 1)
+ length -= n;
+ }
}
/* Enter the loop. */
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package libdecor for openSUSE:Factory checked in at 2024-07-24 15:32:55
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libdecor (Old)
and /work/SRC/openSUSE:Factory/.libdecor.new.1869 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libdecor"
Wed Jul 24 15:32:55 2024 rev:6 rq:1188991 version:0.2.2
Changes:
--------
--- /work/SRC/openSUSE:Factory/libdecor/libdecor.changes 2024-02-21 17:54:20.522799340 +0100
+++ /work/SRC/openSUSE:Factory/.libdecor.new.1869/libdecor.changes 2024-07-25 11:55:19.976985797 +0200
@@ -1,0 +2,22 @@
+Thu Jul 18 14:16:13 UTC 2024 - Sean Baggaley <me(a)drinkybird.net>
+
+- Update to version 0.2.2:
+ * gtk: fix memory leak when destroying the gtk plugin
+ * gtk: fix memory leak when freeing seats
+ * gtk: Make resize corner region larger
+ * cairo: Make resize corner region larger
+ * cursor-settings: Get theme/size from env if D-Bus call fails
+ * gtk: Use g_clear_pointer() in a couple of places
+ * gtk: Don't early out of frame free function
+
+ Includes changes from 0.2.1:
+ * gtk: Don't report errors during construction
+ * Handle NULL wl_output as argument
+ * gtk: Optionally use wl_output_release
+ * cairo: Optionally use wl_output_release
+ * libdecor: fix leak of DBusError in get_setting_sync
+ * gtk: use error notification with string formatting
+ * gtk: disable setlocale()
+ * build: Use `gnu_symbol_visibility` everywhere
+
+-------------------------------------------------------------------
Old:
----
libdecor-0.2.0.tar.xz
New:
----
libdecor-0.2.2.tar.xz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ libdecor.spec ++++++
--- /var/tmp/diff_new_pack.oo7ASr/_old 2024-07-25 11:55:20.501006944 +0200
+++ /var/tmp/diff_new_pack.oo7ASr/_new 2024-07-25 11:55:20.505007106 +0200
@@ -17,7 +17,7 @@
Name: libdecor
-Version: 0.2.0
+Version: 0.2.2
Release: 0
Summary: Wayland client side decoration library
License: MIT
++++++ libdecor-0.2.0.tar.xz -> libdecor-0.2.2.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libdecor-0.2.0/demo/demo.c new/libdecor-0.2.2/demo/demo.c
--- old/libdecor-0.2.0/demo/demo.c 2023-09-25 08:49:43.000000000 +0200
+++ new/libdecor-0.2.2/demo/demo.c 2024-01-15 22:00:42.000000000 +0100
@@ -81,6 +81,9 @@
static bool
own_output(struct wl_output *output)
{
+ if (!output)
+ return false;
+
return own_proxy((struct wl_proxy *) output);
}
@@ -1210,6 +1213,9 @@
struct window *window = data;
struct window_output *window_output;
+ if (!own_output(wl_output))
+ return;
+
wl_list_for_each(window_output, &window->outputs, link) {
if (window_output->output->wl_output == wl_output) {
wl_list_remove(&window_output->link);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libdecor-0.2.0/meson.build new/libdecor-0.2.2/meson.build
--- old/libdecor-0.2.0/meson.build 2023-09-25 08:49:43.000000000 +0200
+++ new/libdecor-0.2.2/meson.build 2024-01-15 22:00:42.000000000 +0100
@@ -1,6 +1,6 @@
project('libdecor', 'c',
- version: '0.2.0',
- meson_version: '>= 0.47.0',
+ version: '0.2.2',
+ meson_version: '>= 0.49.0',
license: 'MIT',
default_options: [
'c_std=c99',
@@ -67,10 +67,6 @@
plugindir = join_paths(pkglibdir, 'plugins-@0@'.format(plugin_api_version_string))
-libdecor_c_args = [
- '-fvisibility=hidden',
-]
-
cdata = configuration_data()
cdata.set_quoted('VERSION', meson.project_version())
cdata.set_quoted('LIBDECOR_PLUGIN_DIR', plugindir)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libdecor-0.2.0/src/cursor-settings.c new/libdecor-0.2.2/src/cursor-settings.c
--- old/libdecor-0.2.0/src/cursor-settings.c 2023-09-25 08:49:43.000000000 +0200
+++ new/libdecor-0.2.2/src/cursor-settings.c 2024-01-15 22:00:42.000000000 +0100
@@ -29,6 +29,23 @@
#include <stdbool.h>
#include "config.h"
+static bool
+get_cursor_settings_from_env(char **theme, int *size)
+{
+ char *env_xtheme;
+ char *env_xsize;
+
+ env_xtheme = getenv("XCURSOR_THEME");
+ if (env_xtheme != NULL)
+ *theme = strdup(env_xtheme);
+
+ env_xsize = getenv("XCURSOR_SIZE");
+ if (env_xsize != NULL)
+ *size = atoi(env_xsize);
+
+ return env_xtheme != NULL && env_xsize != NULL;
+}
+
#ifdef HAS_DBUS
#include <dbus/dbus.h>
@@ -42,8 +59,6 @@
DBusMessage *message;
DBusMessage *reply;
- dbus_error_init(&error);
-
message = dbus_message_new_method_call(
"org.freedesktop.portal.Desktop",
"/org/freedesktop/portal/desktop",
@@ -58,6 +73,8 @@
if (!success)
return NULL;
+ dbus_error_init(&error);
+
reply = dbus_connection_send_with_reply_and_block(
connection,
message,
@@ -66,9 +83,12 @@
dbus_message_unref(message);
- if (dbus_error_is_set(&error))
+ if (dbus_error_is_set(&error)) {
+ dbus_error_free(&error);
return NULL;
+ }
+ dbus_error_free(&error);
return reply;
}
@@ -113,15 +133,15 @@
connection = dbus_bus_get(DBUS_BUS_SESSION, &error);
if (dbus_error_is_set(&error))
- return false;
+ goto fallback;
reply = get_setting_sync(connection, name, key_theme);
if (!reply)
- return false;
+ goto fallback;
if (!parse_type(reply, DBUS_TYPE_STRING, &value_theme)) {
dbus_message_unref(reply);
- return false;
+ goto fallback;
}
*theme = strdup(value_theme);
@@ -130,32 +150,24 @@
reply = get_setting_sync(connection, name, key_size);
if (!reply)
- return false;
+ goto fallback;
if (!parse_type(reply, DBUS_TYPE_INT32, size)) {
dbus_message_unref(reply);
- return false;
+ goto fallback;
}
dbus_message_unref(reply);
return true;
+
+fallback:
+ return get_cursor_settings_from_env(theme, size);
}
#else
bool
libdecor_get_cursor_settings(char **theme, int *size)
{
- char *env_xtheme;
- char *env_xsize;
-
- env_xtheme = getenv("XCURSOR_THEME");
- if (env_xtheme != NULL)
- *theme = strdup(env_xtheme);
-
- env_xsize = getenv("XCURSOR_SIZE");
- if (env_xsize != NULL)
- *size = atoi(env_xsize);
-
- return env_xtheme != NULL && env_xsize != NULL;
+ return get_cursor_settings_from_env(theme, size);
}
#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libdecor-0.2.0/src/meson.build new/libdecor-0.2.2/src/meson.build
--- old/libdecor-0.2.0/src/meson.build 2023-09-25 08:49:43.000000000 +0200
+++ new/libdecor-0.2.2/src/meson.build 2024-01-15 22:00:42.000000000 +0100
@@ -72,6 +72,7 @@
sources: ['cursor-settings.c'],
include_directories: [top_includepath],
dependencies: [dbus_dep],
+ gnu_symbol_visibility: 'hidden',
)
cursor_settings_dep = declare_dependency(
@@ -83,6 +84,7 @@
os_compatibility = static_library('os_compatibility',
sources: ['os-compatibility.c'],
include_directories: [top_includepath],
+ gnu_symbol_visibility: 'hidden',
)
os_compatibility_dep = declare_dependency(
@@ -98,7 +100,7 @@
soversion: libdecor_soversion,
version: libdecor_libversion,
include_directories: libdecor_includes,
- c_args: libdecor_c_args,
+ gnu_symbol_visibility: 'hidden',
dependencies: [
wayland_client_dep,
dl_dep,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libdecor-0.2.0/src/plugins/cairo/libdecor-cairo.c new/libdecor-0.2.2/src/plugins/cairo/libdecor-cairo.c
--- old/libdecor-0.2.0/src/plugins/cairo/libdecor-cairo.c 2023-09-25 08:49:43.000000000 +0200
+++ new/libdecor-0.2.2/src/plugins/cairo/libdecor-cairo.c 2024-01-15 22:00:42.000000000 +0100
@@ -296,6 +296,9 @@
static bool
own_proxy(struct wl_proxy *proxy)
{
+ if (!proxy)
+ return false;
+
return (wl_proxy_get_tag(proxy) == &libdecor_cairo_proxy_tag);
}
@@ -387,7 +390,11 @@
wl_list_for_each_safe(output, output_tmp,
&plugin_cairo->output_list, link) {
- wl_output_destroy(output->wl_output);
+ if (wl_output_get_version (output->wl_output) >=
+ WL_OUTPUT_RELEASE_SINCE_VERSION)
+ wl_output_release(output->wl_output);
+ else
+ wl_output_destroy(output->wl_output);
free(output);
}
@@ -2067,10 +2074,10 @@
const int pointer_y,
const int margin)
{
- const bool top = pointer_y < margin;
- const bool bottom = pointer_y > (cmpnt->server.buffer->height - margin);
- const bool left = pointer_x < margin;
- const bool right = pointer_x > (cmpnt->server.buffer->width - margin);
+ const bool top = pointer_y < margin * 2;
+ const bool bottom = pointer_y > (cmpnt->server.buffer->height - margin * 2);
+ const bool left = pointer_x < margin * 2;
+ const bool right = pointer_x > (cmpnt->server.buffer->width - margin * 2);
if (top)
if (left)
@@ -2570,7 +2577,8 @@
output->id = id;
output->wl_output =
wl_registry_bind(plugin_cairo->wl_registry,
- id, &wl_output_interface, 2);
+ id, &wl_output_interface,
+ MIN (version, 3));
wl_proxy_set_tag((struct wl_proxy *) output->wl_output,
&libdecor_cairo_proxy_tag);
wl_output_add_listener(output->wl_output, &output_listener, output);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libdecor-0.2.0/src/plugins/cairo/meson.build new/libdecor-0.2.2/src/plugins/cairo/meson.build
--- old/libdecor-0.2.0/src/plugins/cairo/meson.build 2023-09-25 08:49:43.000000000 +0200
+++ new/libdecor-0.2.2/src/plugins/cairo/meson.build 2024-01-15 22:00:42.000000000 +0100
@@ -10,7 +10,7 @@
libdecor_includepath,
plugin_include_path,
],
- c_args: libdecor_c_args,
+ gnu_symbol_visibility: 'hidden',
dependencies: [
libdecor_dep,
pangocairo_dep,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libdecor-0.2.0/src/plugins/common/meson.build new/libdecor-0.2.2/src/plugins/common/meson.build
--- old/libdecor-0.2.0/src/plugins/common/meson.build 2023-09-25 08:49:43.000000000 +0200
+++ new/libdecor-0.2.2/src/plugins/common/meson.build 2024-01-15 22:00:42.000000000 +0100
@@ -9,5 +9,6 @@
cairo_dep,
math_dep,
],
+ gnu_symbol_visibility: 'hidden',
install: false,
)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libdecor-0.2.0/src/plugins/dummy/meson.build new/libdecor-0.2.2/src/plugins/dummy/meson.build
--- old/libdecor-0.2.0/src/plugins/dummy/meson.build 2023-09-25 08:49:43.000000000 +0200
+++ new/libdecor-0.2.2/src/plugins/dummy/meson.build 2024-01-15 22:00:42.000000000 +0100
@@ -6,7 +6,7 @@
top_includepath,
libdecor_includepath,
],
- c_args: libdecor_c_args,
+ gnu_symbol_visibility: 'hidden',
dependencies: [
libdecor_dep,
],
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libdecor-0.2.0/src/plugins/gtk/libdecor-gtk.c new/libdecor-0.2.2/src/plugins/gtk/libdecor-gtk.c
--- old/libdecor-0.2.0/src/plugins/gtk/libdecor-gtk.c 2023-09-25 08:49:43.000000000 +0200
+++ new/libdecor-0.2.2/src/plugins/gtk/libdecor-gtk.c 2024-01-15 22:00:42.000000000 +0100
@@ -330,6 +330,9 @@
static bool
own_proxy(struct wl_proxy *proxy)
{
+ if (!proxy)
+ return false;
+
return (wl_proxy_get_tag(proxy) == &libdecor_gtk_proxy_tag);
}
@@ -418,12 +421,17 @@
free(cursor_output);
}
+ free(seat->name);
free(seat);
}
wl_list_for_each_safe(output, output_tmp,
&plugin_gtk->output_list, link) {
- wl_output_destroy(output->wl_output);
+ if (wl_output_get_version (output->wl_output) >=
+ WL_OUTPUT_RELEASE_SINCE_VERSION)
+ wl_output_release(output->wl_output);
+ else
+ wl_output_destroy(output->wl_output);
free(output);
}
@@ -442,7 +450,7 @@
if (plugin_gtk->wl_subcompositor)
wl_subcompositor_destroy(plugin_gtk->wl_subcompositor);
-
+ libdecor_plugin_release(&plugin_gtk->plugin);
free(plugin_gtk);
}
@@ -666,24 +674,16 @@
struct libdecor_frame_gtk *frame_gtk =
(struct libdecor_frame_gtk *) frame;
- /* when in SSD mode, frame_gtk->header is not a proper GTK widget */
- if (!GTK_IS_WIDGET(frame_gtk->header)) return;
- gtk_widget_destroy(frame_gtk->header);
- frame_gtk->header = NULL;
- if (!GTK_IS_WIDGET(frame_gtk->window)) return;
- gtk_widget_destroy(frame_gtk->window);
- frame_gtk->window = NULL;
+ g_clear_pointer (&frame_gtk->header, gtk_widget_destroy);
+ g_clear_pointer (&frame_gtk->window, gtk_widget_destroy);
free_border_component(&frame_gtk->headerbar);
free_border_component(&frame_gtk->shadow);
frame_gtk->shadow_showing = false;
- if (frame_gtk->shadow_blur != NULL) {
- cairo_surface_destroy(frame_gtk->shadow_blur);
- frame_gtk->shadow_blur = NULL;
- }
- free(frame_gtk->title);
- frame_gtk->title = NULL;
+ g_clear_pointer (&frame_gtk->shadow_blur, cairo_surface_destroy);
+
+ g_clear_pointer (&frame_gtk->title, free);
frame_gtk->decoration_type = DECORATION_TYPE_NONE;
@@ -1959,10 +1959,10 @@
const int pointer_y,
const int margin)
{
- const bool top = pointer_y < margin;
- const bool bottom = pointer_y > (cmpnt->buffer->height - margin);
- const bool left = pointer_x < margin;
- const bool right = pointer_x > (cmpnt->buffer->width - margin);
+ const bool top = pointer_y < margin * 2;
+ const bool bottom = pointer_y > (cmpnt->buffer->height - margin * 2);
+ const bool left = pointer_x < margin * 2;
+ const bool right = pointer_x > (cmpnt->buffer->width - margin * 2);
if (top) {
if (left)
@@ -2548,15 +2548,12 @@
struct seat *seat;
if (version < 3) {
- char *err_msg;
- asprintf(&err_msg,
- "%s version 3 required but only version %i is available\n",
- wl_seat_interface.name, version);
libdecor_notify_plugin_error(
plugin_gtk->context,
LIBDECOR_ERROR_COMPOSITOR_INCOMPATIBLE,
- err_msg);
- free(err_msg);
+ "%s version 3 required but only version %i is available\n",
+ wl_seat_interface.name,
+ version);
}
seat = zalloc(sizeof *seat);
@@ -2640,15 +2637,12 @@
struct output *output;
if (version < 2) {
- char *err_msg;
- asprintf(&err_msg,
- "%s version 2 required but only version %i is available\n",
- wl_output_interface.name, version);
libdecor_notify_plugin_error(
plugin_gtk->context,
LIBDECOR_ERROR_COMPOSITOR_INCOMPATIBLE,
- err_msg);
- free(err_msg);
+ "%s version 2 required but only version %i is available\n",
+ wl_output_interface.name,
+ version);
}
output = zalloc(sizeof *output);
@@ -2657,7 +2651,8 @@
output->id = id;
output->wl_output =
wl_registry_bind(plugin_gtk->wl_registry,
- id, &wl_output_interface, 2);
+ id, &wl_output_interface,
+ MIN (version, 3));
wl_proxy_set_tag((struct wl_proxy *) output->wl_output,
&libdecor_gtk_proxy_tag);
wl_output_add_listener(output->wl_output, &output_listener, output);
@@ -2814,11 +2809,11 @@
/* setup GTK context */
gdk_set_allowed_backends("wayland");
+ gtk_disable_setlocale();
+
if (!gtk_init_check(NULL, NULL)) {
- libdecor_notify_plugin_error(
- plugin_gtk->context,
- LIBDECOR_ERROR_COMPOSITOR_INCOMPATIBLE,
- "GTK cannot connect to Wayland compositor");
+ fprintf(stderr, "libdecor-gtk-WARNING: Failed to initialize GTK\n");
+ libdecor_plugin_gtk_destroy(&plugin_gtk->plugin);
return NULL;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libdecor-0.2.0/src/plugins/gtk/meson.build new/libdecor-0.2.2/src/plugins/gtk/meson.build
--- old/libdecor-0.2.0/src/plugins/gtk/meson.build 2023-09-25 08:49:43.000000000 +0200
+++ new/libdecor-0.2.2/src/plugins/gtk/meson.build 2024-01-15 22:00:42.000000000 +0100
@@ -9,7 +9,7 @@
libdecor_includepath,
plugin_include_path,
],
- c_args: libdecor_c_args,
+ gnu_symbol_visibility: 'hidden',
dependencies: [
libdecor_dep,
cairo_dep,
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package libbacktrace for openSUSE:Factory checked in at 2024-07-24 15:32:53
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libbacktrace (Old)
and /work/SRC/openSUSE:Factory/.libbacktrace.new.1869 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libbacktrace"
Wed Jul 24 15:32:53 2024 rev:5 rq:1188963 version:1.0+git20240718
Changes:
--------
--- /work/SRC/openSUSE:Factory/libbacktrace/libbacktrace.changes 2024-03-04 21:25:44.559716302 +0100
+++ /work/SRC/openSUSE:Factory/.libbacktrace.new.1869/libbacktrace.changes 2024-07-25 11:55:04.172347998 +0200
@@ -1,0 +2,30 @@
+Mon Jul 22 08:52:38 UTC 2024 - Martin Pluskal <mpluskal(a)suse.com>
+
+- Update to version 1.0+git20240718:
+ * libbacktrace: use __has_attribute for fallthrough
+ * libbacktrace: add cast to avoid warning
+ * libbacktrace: better backtrace_print when no debug info
+ * libbacktrace: add notes about dl_iterate_phdr to README
+ * libbacktrace: support FDPIC
+ * libbacktrace: avoid infinite recursion
+ * libbacktrace: improve XCOFF support
+ * Libbacktrace: Fix the use of newline in sed replacement
+ * libbacktrace: fix b2test_buildid test on non-english locales
+ * libbacktrace: fix UBSAN issues
+ * Config,Darwin: Allow for configuring Darwin to use embedded runpath.
+ * libbacktrace: correct duplicate configury
+ * libbacktrace: update libtool.m4 to current GCC HEAD
+ * Handle jobserver file descriptors in btest.
+ * libbacktrace: update copyright years
+ * libbacktrace: don't fail if symbol size is unknown
+ * libbacktrace: correctly gather Mach-O symbol table
+ * libbacktrace: fix testsuite for clang
+ * libbacktrace: suggest how to fix missing debug info
+ * libbacktrace: remove trailing whitespace
+ * libbacktrace: it's OK if zstd decompressor sees no backward bits
+ * libbacktrace: add DLLS as they are loaded
+ * libbacktrace: load Windows modules
+ * libbacktrace: test --compress-debug-sections=ARG for each ARG
+ * libbacktrace: don't assume compressed section is aligned
+
+-------------------------------------------------------------------
Old:
----
libbacktrace-1.0+git20240302.obscpio
New:
----
libbacktrace-1.0+git20240718.obscpio
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ libbacktrace.spec ++++++
--- /var/tmp/diff_new_pack.3ja2ex/_old 2024-07-25 11:55:05.816414345 +0200
+++ /var/tmp/diff_new_pack.3ja2ex/_new 2024-07-25 11:55:05.832414991 +0200
@@ -18,7 +18,7 @@
%define soname 0
Name: libbacktrace
-Version: 1.0+git20240302
+Version: 1.0+git20240718
Release: 0
Summary: Backtrace C library
License: BSD-3-Clause
++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.3ja2ex/_old 2024-07-25 11:55:06.676449052 +0200
+++ /var/tmp/diff_new_pack.3ja2ex/_new 2024-07-25 11:55:06.712450505 +0200
@@ -1,7 +1,7 @@
<servicedata>
<service name="tar_scm">
<param name="url">https://github.com/ianlancetaylor/libbacktrace.git</param>
- <param name="changesrevision">f41cf1fecbc01966e0a3c32a1a54ff9cb0a19bb9</param>
+ <param name="changesrevision">7e2b7da3d6568d2e4e78658f22e701746a48d7e1</param>
</service>
</servicedata>
(No newline at EOF)
++++++ libbacktrace-1.0+git20240302.obscpio -> libbacktrace-1.0+git20240718.obscpio ++++++
++++ 11390 lines of diff (skipped)
++++++ libbacktrace.obsinfo ++++++
--- /var/tmp/diff_new_pack.3ja2ex/_old 2024-07-25 11:55:08.656528958 +0200
+++ /var/tmp/diff_new_pack.3ja2ex/_new 2024-07-25 11:55:08.692530411 +0200
@@ -1,5 +1,5 @@
name: libbacktrace
-version: 1.0+git20240302
-mtime: 1709413936
-commit: f41cf1fecbc01966e0a3c32a1a54ff9cb0a19bb9
+version: 1.0+git20240718
+mtime: 1721327853
+commit: 7e2b7da3d6568d2e4e78658f22e701746a48d7e1
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package installation-images for openSUSE:Factory checked in at 2024-07-24 15:29:25
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/installation-images (Old)
and /work/SRC/openSUSE:Factory/.installation-images.new.1869 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "installation-images"
Wed Jul 24 15:29:25 2024 rev:216 rq:1189249 version:17.134
Changes:
--------
--- /work/SRC/openSUSE:Factory/installation-images/installation-images.changes 2024-07-08 19:07:32.073147659 +0200
+++ /work/SRC/openSUSE:Factory/.installation-images.new.1869/installation-images.changes 2024-07-25 11:52:58.331278571 +0200
@@ -1,0 +2,24 @@
+Mon Jul 22 17:59:27 UTC 2024 - wfeldt(a)opensuse.org
+
+- merge gh#openSUSE/installation-images#728
+- fix perl issue in test case
+- 17.134
+
+--------------------------------------------------------------------
+Mon Jul 22 17:18:29 UTC 2024 - wfeldt(a)opensuse.org
+
+- merge gh#openSUSE/installation-images#726
+- make some compression settings configurable (bsc#1223982,
+ jsc#PED-8374)
+- limit compression in OBS to 4 threads
+- ppc64: optimize for minimal compressed initrd size
+- 17.133
+
+--------------------------------------------------------------------
+Mon Jul 22 14:38:14 UTC 2024 - wfeldt(a)opensuse.org
+
+- merge gh#openSUSE/installation-images#724
+- Add explicit dependency on 'attr'.
+- 17.132
+
+--------------------------------------------------------------------
Old:
----
installation-images-17.131.tar.xz
New:
----
installation-images-17.134.tar.xz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ installation-images.spec ++++++
--- /var/tmp/diff_new_pack.GUr0P6/_old 2024-07-25 11:52:58.887300919 +0200
+++ /var/tmp/diff_new_pack.GUr0P6/_new 2024-07-25 11:52:58.891301079 +0200
@@ -321,6 +321,7 @@
BuildRequires: alsa
BuildRequires: alsa-utils
BuildRequires: arphic-uming-fonts
+BuildRequires: attr
BuildRequires: audit-libs
BuildRequires: bc
BuildRequires: bcache-tools
@@ -687,7 +688,7 @@
Summary: Installation Image Files for %theme
License: GPL-2.0-or-later
Group: Metapackages
-Version: 17.131
+Version: 17.134
Release: 0
Provides: installation-images = %version-%release
Conflicts: otherproviders(installation-images)
@@ -783,6 +784,10 @@
test ! -z "$BUILD_DISTRIBUTION_NAME"
# build id (for linuxrc to start the correct instsys)
export instsys_build_id=`bin/build_id`
+%ifarch ppc64 ppc64le
+# ppc64: optimize for minimal compressed initrd size
+export instsys_no_compression=firmware,modules,squashfs
+%endif
# beta only: warn testers about wrong instsys
export instsys_complain=1
# careful: will make all non-matching initrds fail hard
++++++ installation-images-17.131.tar.xz -> installation-images-17.134.tar.xz ++++++
++++ 5983 lines of diff (skipped)
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package ibus-typing-booster for openSUSE:Factory checked in at 2024-07-24 15:31:39
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ibus-typing-booster (Old)
and /work/SRC/openSUSE:Factory/.ibus-typing-booster.new.1869 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ibus-typing-booster"
Wed Jul 24 15:31:39 2024 rev:126 rq:1189216 version:2.25.14
Changes:
--------
--- /work/SRC/openSUSE:Factory/ibus-typing-booster/ibus-typing-booster.changes 2024-07-22 17:15:51.624135660 +0200
+++ /work/SRC/openSUSE:Factory/.ibus-typing-booster.new.1869/ibus-typing-booster.changes 2024-07-25 11:52:47.250833230 +0200
@@ -1,0 +2,8 @@
+Tue Jul 23 09:59:10 UTC 2024 - maiku.fabian(a)gmail.com
+
+- Update to 2.25.14
+- 'S- ' (Shift-space) should not trigger a commit if it has a transliteration
+ (Resolves: https://github.com/mike-fabian/ibus-typing-booster/issues/524)
+- Update emoji annotations from CLDR
+
+-------------------------------------------------------------------
@@ -4 +12 @@
-- Update to 2.25.3
+- Update to 2.25.13
Old:
----
ibus-typing-booster-2.25.13.tar.gz
New:
----
ibus-typing-booster-2.25.14.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ ibus-typing-booster.spec ++++++
--- /var/tmp/diff_new_pack.bGjxOU/_old 2024-07-25 11:52:47.926860401 +0200
+++ /var/tmp/diff_new_pack.bGjxOU/_new 2024-07-25 11:52:47.926860401 +0200
@@ -17,7 +17,7 @@
Name: ibus-typing-booster
-Version: 2.25.13
+Version: 2.25.14
Release: 0
Summary: An input completion utility
License: GPL-3.0-or-later
++++++ ibus-typing-booster-2.25.13.tar.gz -> ibus-typing-booster-2.25.14.tar.gz ++++++
/work/SRC/openSUSE:Factory/ibus-typing-booster/ibus-typing-booster-2.25.13.tar.gz /work/SRC/openSUSE:Factory/.ibus-typing-booster.new.1869/ibus-typing-booster-2.25.14.tar.gz differ: char 13, line 1
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package gtk3 for openSUSE:Factory checked in at 2024-07-24 15:29:57
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/gtk3 (Old)
and /work/SRC/openSUSE:Factory/.gtk3.new.1869 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "gtk3"
Wed Jul 24 15:29:57 2024 rev:196 rq:1189075 version:3.24.43
Changes:
--------
--- /work/SRC/openSUSE:Factory/gtk3/gtk3.changes 2024-07-11 20:30:03.593998616 +0200
+++ /work/SRC/openSUSE:Factory/.gtk3.new.1869/gtk3.changes 2024-07-25 11:52:15.053539174 +0200
@@ -5 +5 @@
- + Stop looking for modules in cwd (CVE-2024-6655).
+ + Stop looking for modules in cwd (bsc#1228120 CVE-2024-6655).
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package gtk2 for openSUSE:Factory checked in at 2024-07-24 15:30:01
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/gtk2 (Old)
and /work/SRC/openSUSE:Factory/.gtk2.new.1869 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "gtk2"
Wed Jul 24 15:30:01 2024 rev:188 rq:1189076 version:2.24.33
Changes:
--------
--- /work/SRC/openSUSE:Factory/gtk2/gtk2.changes 2024-07-18 19:15:56.606164433 +0200
+++ /work/SRC/openSUSE:Factory/.gtk2.new.1869/gtk2.changes 2024-07-25 11:52:12.389432099 +0200
@@ -10 +10 @@
- in cwd.
+ in cwd (bsc#1228120).
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package grub2 for openSUSE:Factory checked in at 2024-07-24 15:32:57
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/grub2 (Old)
and /work/SRC/openSUSE:Factory/.grub2.new.1869 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "grub2"
Wed Jul 24 15:32:57 2024 rev:333 rq:1188995 version:2.12
Changes:
--------
--- /work/SRC/openSUSE:Factory/grub2/grub2.changes 2024-07-09 20:03:38.599922921 +0200
+++ /work/SRC/openSUSE:Factory/.grub2.new.1869/grub2.changes 2024-07-25 11:51:58.648879846 +0200
@@ -1,0 +2,7 @@
+Fri Jul 19 09:59:15 UTC 2024 - Michael Chang <mchang(a)suse.com>
+
+- Fix error in grub-install when root is on tmpfs (bsc#1226100)
+ * 0001-grub-install-bailout-root-device-probing.patch
+- Fix incorrect Platform tag in rpm header (bsc#1217967)
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ grub2.spec ++++++
--- /var/tmp/diff_new_pack.dWQPkZ/_old 2024-07-25 11:52:08.089259269 +0200
+++ /var/tmp/diff_new_pack.dWQPkZ/_new 2024-07-25 11:52:08.097259591 +0200
@@ -785,12 +785,6 @@
%if ! 0%{?only_efi:1}
cd build
-# 64-bit x86-64 machines use 32-bit boot loader
-# (We cannot just redefine _target_cpu, as we'd get i386.rpm packages then)
-%ifarch x86_64
-%define _target_platform i386-%{_vendor}-%{_target_os}%{?_gnu}
-%endif
-
%if "%{platform}" != "emu"
%define arch_specific --enable-device-mapper
TLFLAGS="-static"
++++++ 0001-grub-install-bailout-root-device-probing.patch ++++++
--- /var/tmp/diff_new_pack.dWQPkZ/_old 2024-07-25 11:52:08.201263771 +0200
+++ /var/tmp/diff_new_pack.dWQPkZ/_new 2024-07-25 11:52:08.205263931 +0200
@@ -1,4 +1,4 @@
-From 58dcf7985b20de876a6fc44a591aa377d0a0302c Mon Sep 17 00:00:00 2001
+From db67bd0800c69f94fa3696351e7387515464d30c Mon Sep 17 00:00:00 2001
From: Michael Chang <mchang(a)suse.com>
Date: Thu, 10 Feb 2022 22:16:58 +0800
Subject: [PATCH] grub-install: bailout root device probing
@@ -15,14 +15,26 @@
The command is also used by grub-mkconfig for the same purpose.
+v2:
+
+Test the root device first before probing to avoid encountering
+unexpected errors. If this test fails, the device is considered
+irrelevant and of no interest, as it is not useful.
+
+v2.1:
+Besides verifying that the target's canonical path can be resolved,
+ensure that the target is a block device file.
+
Signed-off-by: Michael Chang <mchang(a)suse.com>
---
- grub-core/osdep/basic/no_platform.c | 5 +++++
- grub-core/osdep/unix/platform.c | 34 +++++++++++++++++++++++++++++
- grub-core/osdep/windows/platform.c | 6 +++++
- include/grub/util/install.h | 3 +++
- util/grub-install.c | 31 ++++++++++++++++++--------
- 5 files changed, 70 insertions(+), 9 deletions(-)
+ grub-core/osdep/basic/no_platform.c | 5 +++
+ grub-core/osdep/unix/getroot.c | 67 +++++++++++++++++++++++++++++
+ grub-core/osdep/unix/platform.c | 34 +++++++++++++++
+ grub-core/osdep/windows/platform.c | 6 +++
+ include/grub/emu/getroot.h | 3 ++
+ include/grub/util/install.h | 3 ++
+ util/grub-install.c | 45 +++++++++++++++----
+ 7 files changed, 154 insertions(+), 9 deletions(-)
--- a/grub-core/osdep/basic/no_platform.c
+++ b/grub-core/osdep/basic/no_platform.c
@@ -35,6 +47,82 @@
+{
+ return NULL;
+}
+--- a/grub-core/osdep/unix/getroot.c
++++ b/grub-core/osdep/unix/getroot.c
+@@ -489,6 +489,73 @@
+ return 0;
+ }
+
++#ifdef __linux__
++int
++grub_can_guess_from_mountinfo (const char *dir_in)
++{
++ char **cur;
++ char **os_dev = NULL;
++ char *dir = grub_canonicalize_file_name (dir_in);
++ int ret = 0;
++
++ if (!dir)
++ return 0;
++
++ os_dev = grub_find_root_devices_from_mountinfo (dir, NULL);
++
++ if (!os_dev)
++ os_dev = find_root_devices_from_libzfs (dir);
++
++ if (!os_dev)
++ {
++ free (dir);
++ return 0;
++ }
++
++ for (cur = os_dev; *cur; cur++)
++ {
++ if (strcmp (*cur, "/dev/root") == 0
++ || strncmp (*cur, "/dev/dm-", sizeof ("/dev/dm-") - 1) == 0)
++ /* Assume known and good names */
++ continue;
++ else
++ {
++ struct stat st;
++
++ char *tmp = grub_canonicalize_file_name (*cur);
++ if (tmp == NULL)
++ break;
++
++ if (strncmp (tmp, "/dev/dm-", sizeof ("/dev/dm-") - 1) == 0)
++ continue;
++
++ if (lstat (tmp, &st) < 0)
++ {
++ free (tmp);
++ break;
++ }
++ free (tmp);
++ if (! S_ISBLK (st.st_mode))
++ /* only block device allowed */
++ break;
++ }
++ }
++
++ if (*cur == NULL)
++ /* no bogus device left, good */
++ ret = 1;
++ else
++ grub_util_info ("`%s' is not os device", *cur);
++
++ for (cur = os_dev; *cur; cur++)
++ free (*cur);
++ free (os_dev);
++ free (dir);
++
++ return ret;
++}
++#endif /* __linux__ */
++
+ char **
+ grub_guess_root_devices (const char *dir_in)
+ {
--- a/grub-core/osdep/unix/platform.c
+++ b/grub-core/osdep/unix/platform.c
@@ -250,3 +250,37 @@
@@ -87,6 +175,18 @@
+{
+ return NULL;
+}
+--- a/include/grub/emu/getroot.h
++++ b/include/grub/emu/getroot.h
+@@ -35,6 +35,9 @@
+
+ char *grub_find_device (const char *dir, dev_t dev);
+ void grub_util_pull_device (const char *osname);
++#ifdef __linux__
++int grub_can_guess_from_mountinfo (const char *dir);
++#endif
+ char **grub_guess_root_devices (const char *dir);
+ int grub_util_get_dev_abstraction (const char *os_dev);
+ char *grub_make_system_path_relative_to_its_root (const char *path);
--- a/include/grub/util/install.h
+++ b/include/grub/util/install.h
@@ -251,6 +251,9 @@
@@ -101,7 +201,7 @@
int
--- a/util/grub-install.c
+++ b/util/grub-install.c
-@@ -887,7 +887,6 @@
+@@ -922,7 +922,6 @@
const char *efi_file = NULL;
char **grub_devices;
grub_fs_t grub_fs;
@@ -109,7 +209,7 @@
grub_device_t grub_dev = NULL;
enum grub_install_plat platform;
char *grubdir, *device_map;
-@@ -1067,8 +1066,10 @@
+@@ -1102,10 +1101,22 @@
grub_host_init ();
{
@@ -121,8 +221,20 @@
+
char *t = grub_util_path_concat (2, "/", rootdir);
++#ifdef __linux__
++ if (!grub_can_guess_from_mountinfo (t))
++ {
++ free(t);
++ /* We can safely ignore the root probe here; whichever cannot be
++ * reliably detected is irrelevant and of no interest */
++ goto skip_root_probe;
++ }
++#endif
++
rootdir_path = grub_canonicalize_file_name (t);
-@@ -1089,20 +1090,32 @@
+ if (!rootdir_path)
+ grub_util_error (_("failed to get canonical path of `%s'"), t);
+@@ -1124,22 +1135,38 @@
rootdir_devices[0]);
rootdir_grub_dev = grub_device_open (rootdir_grub_devname);
@@ -160,5 +272,11 @@
+ grub_device_close (rootdir_grub_dev);
}
++#ifdef __linux__
++ skip_root_probe:
++#endif
++
switch (platform)
+ {
+ case GRUB_INSTALL_PLATFORM_I386_EFI:
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package gnome-commander for openSUSE:Factory checked in at 2024-07-24 15:31:51
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/gnome-commander (Old)
and /work/SRC/openSUSE:Factory/.gnome-commander.new.1869 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "gnome-commander"
Wed Jul 24 15:31:51 2024 rev:17 rq:1189255 version:1.18.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/gnome-commander/gnome-commander.changes 2024-05-17 20:07:31.840515969 +0200
+++ /work/SRC/openSUSE:Factory/.gnome-commander.new.1869/gnome-commander.changes 2024-07-25 11:51:10.566947363 +0200
@@ -1,0 +2,33 @@
+Tue Jul 23 05:10:36 UTC 2024 - Dominique Leuenberger <dimstar(a)opensuse.org>
+
+- Update to version 1.18.0:
+ + New Features and Improvements:
+ - Refactoring and Modernization: Significant code refactoring,
+ including decoupling various components such as GnomeCmdDir,
+ GnomeCmdDirIndicator, GnomeCmdFileSelector, and
+ GnomeCmdCmdline for better modularity and maintainability.
+ - Event Handling Overhaul: Transition from traditional event
+ handling to modern GtkEventController, enhancing
+ responsiveness and reliability.
+ - Enhanced User Interface: Multiple UI improvements, including
+ replacing deprecated GtkMenu with GtkPopover, and updating
+ various dialogs and popups for a cleaner look.
+ - Improved Icon Handling: Shift from GdkPixbuf to GIcon for
+ icon management, optimizing resource usage and improving
+ performance.
+ + Bug fixes:
+ - Fix for double g_error_free call (Mamoru Tasaka)
+ - Improved stability
+ + Miscellaneous:
+ - Removed Redundant References: Cleaned up the codebase by
+ eliminating unnecessary references.
+ + Updated translations.
+- Drop -Dunique=disabled meson parameters: the feature has been
+ removed upstream with the switch to GTK3.
+- Replace pkgconfig(gtk+-2.0) BuildRequires with
+ pkgconfig(gtk+-3.0): follow upstreams port to GTK 3.
+- Add xvfb-run BuildRequires and run meson_test using xvfb-run: the
+ tests require a graphical display.
+
+
+-------------------------------------------------------------------
Old:
----
gnome-commander-1.16.2.tar.xz
New:
----
gnome-commander-1.18.0.tar.xz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ gnome-commander.spec ++++++
--- /var/tmp/diff_new_pack.9IS3y5/_old 2024-07-25 11:51:11.034966173 +0200
+++ /var/tmp/diff_new_pack.9IS3y5/_new 2024-07-25 11:51:11.034966173 +0200
@@ -17,13 +17,13 @@
Name: gnome-commander
-Version: 1.16.2
+Version: 1.18.0
Release: 0
Summary: A file manager for the GNOME desktop environment
License: GPL-2.0-or-later
Group: Productivity/File utilities
URL: http://gcmd.github.io/
-Source: https://download.gnome.org/sources/gnome-commander/1.16/%{name}-%{version}.…
+Source: https://download.gnome.org/sources/gnome-commander/1.18/%{name}-%{version}.…
%if 0%{?suse_version} < 1550
BuildRequires: gcc11
@@ -39,6 +39,7 @@
BuildRequires: itstool
BuildRequires: meson
BuildRequires: pkgconfig
+BuildRequires: xvfb-run
BuildRequires: yelp-tools
BuildRequires: pkgconfig(exiv2) >= 0.14
BuildRequires: pkgconfig(gio-2.0)
@@ -46,7 +47,7 @@
BuildRequires: pkgconfig(gmodule-2.0) >= 2.0.0
BuildRequires: pkgconfig(gobject-2.0)
BuildRequires: pkgconfig(gtest)
-BuildRequires: pkgconfig(gtk+-2.0) >= 2.24.0
+BuildRequires: pkgconfig(gtk+-3.0) >= 3.24.0
BuildRequires: pkgconfig(libgsf-1) >= 1.12.0
BuildRequires: pkgconfig(poppler-glib) >= 0.18
BuildRequires: pkgconfig(taglib) >= 1.4
@@ -79,8 +80,7 @@
%endif
%meson \
-Dsamba=disabled \
- -Dunique=disabled \
- %{nil}
+ %nil
%meson_build
%install
@@ -91,7 +91,7 @@
%fdupes %{buildroot}%{_libdir}
%check
-%meson_test
+xvfb-run %{shrink:%meson_test}
%files
%license COPYING
@@ -102,9 +102,11 @@
%{_datadir}/applications/*.desktop
%{_datadir}/glib-2.0/schemas/org.gnome.%{name}.enums.xml
%{_datadir}/glib-2.0/schemas/org.gnome.%{name}.gschema.xml
+%{_datadir}/gnome-commander/
%{_datadir}/pixmaps/%{name}
%{_libdir}/%{name}
%{_mandir}/man1/%{name}.1%{ext_man}
+%{_datadir}/icons/hicolor/scalable/apps/gnome-commander-internal-viewer.svg
%{_datadir}/icons/hicolor/scalable/apps/gnome-commander-symbolic.svg
%{_datadir}/icons/hicolor/scalable/apps/gnome-commander.svg
%dir %{_datadir}/%{name}
++++++ gnome-commander-1.16.2.tar.xz -> gnome-commander-1.18.0.tar.xz ++++++
++++ 141429 lines of diff (skipped)
1
0