commit:     2487eafda90ed51e414083ee0a11e71918cbdb18
Author:     Mia Neufeld <mia <AT> xenialinux <DOT> com>
AuthorDate: Wed Sep 27 11:36:53 2023 +0000
Commit:     Remigiusz Micielski <remigiusz.micielski <AT> gmail <DOT> com>
CommitDate: Fri Sep 29 17:05:55 2023 +0000
URL:        https://gitweb.gentoo.org/repo/proj/guru.git/commit/?id=2487eafd

gui-libs/xdg-desktop-portal-hyprland: Add patch for clang

Signed-off-by: Mia Neufeld <mia <AT> xenialinux.com>
Signed-off-by: Remigiusz Micielski <rmicielski <AT> purelymail.com>
Closes: #110

 ...g-desktop-portal-hyprland-1.1.0_fix_clang.patch | 207 +++++++++++++++++++++
 .../xdg-desktop-portal-hyprland-1.1.0.ebuild       |  18 +-
 2 files changed, 218 insertions(+), 7 deletions(-)

diff --git 
a/gui-libs/xdg-desktop-portal-hyprland/files/xdg-desktop-portal-hyprland-1.1.0_fix_clang.patch
 
b/gui-libs/xdg-desktop-portal-hyprland/files/xdg-desktop-portal-hyprland-1.1.0_fix_clang.patch
new file mode 100644
index 0000000000..ba30747e96
--- /dev/null
+++ 
b/gui-libs/xdg-desktop-portal-hyprland/files/xdg-desktop-portal-hyprland-1.1.0_fix_clang.patch
@@ -0,0 +1,207 @@
+From 54b5467ec12fb115b537e0c86256226474edf8bb Mon Sep 17 00:00:00 2001
+From: Jan Beich <jbe...@freebsd.org>
+Date: Mon, 18 Sep 2023 19:00:21 +0000
+Subject: [PATCH 1/3] build: Unbreak build on FreeBSD (#98)
+
+* helpers: add missing header after 9dfb9e125bf0
+
+src/helpers/MiscFunctions.cpp: In function 'void addHyprlandNotification(const 
std::string&, float, const std::string&, const std::string&)':
+src/helpers/MiscFunctions.cpp:24:9: error: 'fork' was not declared in this 
scope
+   24 |     if (fork() == 0)
+      |         ^~~~
+src/helpers/MiscFunctions.cpp:25:9: error: 'execl' was not declared in this 
scope
+   25 |         execl("/bin/sh", "/bin/sh", "-c", CMD.c_str(), nullptr);
+      |         ^~~~~
+
+* build: add missing dependency for libc++ after 2f48e6550374
+
+ld.lld: error: undefined symbol: pthread_create
+>>> referenced by PortalManager.cpp
+>>>               
src/xdg-desktop-portal-hyprland.p/core_PortalManager.cpp.o:(CPortalManager::startEventLoop())
+>>> referenced by PortalManager.cpp
+>>>               
src/xdg-desktop-portal-hyprland.p/core_PortalManager.cpp.o:(CPortalManager::startEventLoop())
+---
+ CMakeLists.txt                | 4 +++-
+ src/helpers/MiscFunctions.cpp | 1 +
+ src/meson.build               | 1 +
+ 3 files changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index e39b72c..44d1689 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -31,12 +31,14 @@ message(STATUS "Checking deps...")
+ add_subdirectory(subprojects/sdbus-cpp)
+ add_subdirectory(hyprland-share-picker)
+ 
++find_package(Threads REQUIRED)
++
+ find_package(PkgConfig REQUIRED)
+ pkg_check_modules(deps REQUIRED IMPORTED_TARGET wayland-client 
wayland-protocols libpipewire-0.3 libspa-0.2 libdrm gbm)
+ 
+ file(GLOB_RECURSE SRCFILES CONFIGURE_DEPENDS "src/*.cpp")
+ add_executable(xdg-desktop-portal-hyprland ${SRCFILES})
+-target_link_libraries(xdg-desktop-portal-hyprland PRIVATE rt sdbus-c++ 
PkgConfig::deps)
++target_link_libraries(xdg-desktop-portal-hyprland PRIVATE rt sdbus-c++ 
Threads::Threads PkgConfig::deps)
+ 
+ # protocols
+ find_program(WaylandScanner NAMES wayland-scanner)
+diff --git a/src/helpers/MiscFunctions.cpp b/src/helpers/MiscFunctions.cpp
+index da05ee6..353c8f0 100644
+--- a/src/helpers/MiscFunctions.cpp
++++ b/src/helpers/MiscFunctions.cpp
+@@ -1,5 +1,6 @@
+ #include "MiscFunctions.hpp"
+ #include <memory>
++#include <unistd.h>
+ #include "../helpers/Log.hpp"
+ 
+ std::string execAndGet(const char* cmd) {
+diff --git a/src/meson.build b/src/meson.build
+index 444d3bd..c3d3735 100644
+--- a/src/meson.build
++++ b/src/meson.build
+@@ -8,6 +8,7 @@ executable('xdg-desktop-portal-hyprland',
+     dependency('libdrm'),
+     dependency('libpipewire-0.3'),
+     dependency('sdbus-c++'),
++    dependency('threads'),
+     dependency('wayland-client'),
+   ],
+   include_directories: inc,
+-- 
+2.42.0
+
+From b6e1732fdac623638dbc12db00e10ac4b5bd791f Mon Sep 17 00:00:00 2001
+From: vaxerski <43317083+vaxer...@users.noreply.github.com>
+Date: Fri, 22 Sep 2023 19:28:47 +0100
+Subject: [PATCH 2/3] picker: start on index 0
+
+---
+ hyprland-share-picker/mainpicker.ui | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/hyprland-share-picker/mainpicker.ui 
b/hyprland-share-picker/mainpicker.ui
+index c14d1d6..95a3c65 100644
+--- a/hyprland-share-picker/mainpicker.ui
++++ b/hyprland-share-picker/mainpicker.ui
+@@ -66,7 +66,7 @@
+      <enum>QTabWidget::North</enum>
+     </property>
+     <property name="currentIndex">
+-     <number>1</number>
++     <number>0</number>
+     </property>
+     <widget class="QWidget" name="screens">
+      <attribute name="title">
+-- 
+2.42.0
+
+From f9461b0b7d3071347390feee534638555ff76c7d Mon Sep 17 00:00:00 2001
+From: Rudolchr <72916442+rudol...@users.noreply.github.com>
+Date: Tue, 26 Sep 2023 23:23:02 +0200
+Subject: [PATCH 3/3] build: Fix build when using clang (#100)
+
+* Add -Wno-address-of-temporary to allow taking an address of temporary like 
-fpermissive does for gcc
+
+* Make some implicit casts explicit
+
+* Implement the wl_array_for_each macro inline as clang does not like to 
handle it's implicit typecast
+
+* Removed unecessary include that was automatically added by the ide
+
+* Replaced reinterpret_cast's with c-style casts
+---
+ meson.build                |  5 +++--
+ src/core/PortalManager.cpp |  3 ++-
+ src/portals/Screencopy.cpp | 19 ++++++++++---------
+ 3 files changed, 15 insertions(+), 12 deletions(-)
+
+diff --git a/meson.build b/meson.build
+index 77c1a80..2fff319 100644
+--- a/meson.build
++++ b/meson.build
+@@ -25,10 +25,11 @@ endif
+ add_project_arguments(cpp_compiler.get_supported_arguments([
+   '-Wno-missing-field-initializers',
+   '-Wno-narrowing',
+-      '-Wno-pointer-arith',
++  '-Wno-pointer-arith',
+   '-Wno-unused-parameter',
+   '-Wno-unused-value',
+-      '-fpermissive'
++  '-fpermissive',
++  '-Wno-address-of-temporary'
+ ]), language: 'cpp')
+ 
+ conf_data = configuration_data()
+diff --git a/src/core/PortalManager.cpp b/src/core/PortalManager.cpp
+index d56ebe0..a03da31 100644
+--- a/src/core/PortalManager.cpp
++++ b/src/core/PortalManager.cpp
+@@ -169,7 +169,8 @@ static void dmabufFeedbackTrancheFormats(void* data, 
zwp_linux_dmabuf_feedback_v
+     uint32_t  n_modifiers = 
g_pPortalManager->m_sWaylandConnection.dma.formatTableSize / sizeof(struct 
fm_entry);
+     fm_entry* fm_entry    = (struct 
fm_entry*)g_pPortalManager->m_sWaylandConnection.dma.formatTable;
+     uint16_t* idx;
+-    wl_array_for_each(idx, indices) {
++
++    for (idx = (uint16_t*)indices->data; (const char*)idx < (const 
char*)indices->data + indices->size; idx++) {
+         if (*idx >= n_modifiers)
+             continue;
+ 
+diff --git a/src/portals/Screencopy.cpp b/src/portals/Screencopy.cpp
+index c5b234c..d69d353 100644
+--- a/src/portals/Screencopy.cpp
++++ b/src/portals/Screencopy.cpp
+@@ -781,7 +781,7 @@ static void pwStreamParamChanged(void* data, uint32_t id, 
const spa_pod* param)
+             const spa_pod* pod_modifier = &prop_modifier->value;
+ 
+             uint32_t       n_modifiers = 
SPA_POD_CHOICE_N_VALUES(pod_modifier) - 1;
+-            uint64_t*      modifiers   = SPA_POD_CHOICE_VALUES(pod_modifier);
++            uint64_t*      modifiers   = 
(uint64_t*)SPA_POD_CHOICE_VALUES(pod_modifier);
+             modifiers++;
+             uint32_t         flags = GBM_BO_USE_RENDERING;
+             uint64_t         modifier;
+@@ -853,14 +853,15 @@ static void pwStreamParamChanged(void* data, uint32_t 
id, const spa_pod* param)
+ 
+     params[0] = build_buffer(&dynBuilder[0].b, blocks, 
PSTREAM->pSession->sharingData.frameInfoSHM.size, 
PSTREAM->pSession->sharingData.frameInfoSHM.stride, data_type);
+ 
+-    params[1] = spa_pod_builder_add_object(&dynBuilder[1].b, 
SPA_TYPE_OBJECT_ParamMeta, SPA_PARAM_Meta, SPA_PARAM_META_type, 
SPA_POD_Id(SPA_META_Header), SPA_PARAM_META_size,
+-                                           SPA_POD_Int(sizeof(struct 
spa_meta_header)));
++    params[1] = (const spa_pod*)spa_pod_builder_add_object(&dynBuilder[1].b, 
SPA_TYPE_OBJECT_ParamMeta, SPA_PARAM_Meta, SPA_PARAM_META_type, 
SPA_POD_Id(SPA_META_Header),
++                                                           
SPA_PARAM_META_size, SPA_POD_Int(sizeof(struct spa_meta_header)));
+ 
+-    params[2] = spa_pod_builder_add_object(&dynBuilder[1].b, 
SPA_TYPE_OBJECT_ParamMeta, SPA_PARAM_Meta, SPA_PARAM_META_type, 
SPA_POD_Id(SPA_META_VideoTransform),
+-                                           SPA_PARAM_META_size, 
SPA_POD_Int(sizeof(struct spa_meta_videotransform)));
++    params[2] = (const spa_pod*)spa_pod_builder_add_object(&dynBuilder[1].b, 
SPA_TYPE_OBJECT_ParamMeta, SPA_PARAM_Meta, SPA_PARAM_META_type, 
SPA_POD_Id(SPA_META_VideoTransform),
++                                                           
SPA_PARAM_META_size, SPA_POD_Int(sizeof(struct spa_meta_videotransform)));
+ 
+-    params[3] = spa_pod_builder_add_object(&dynBuilder[2].b, 
SPA_TYPE_OBJECT_ParamMeta, SPA_PARAM_Meta, SPA_PARAM_META_type, 
SPA_POD_Id(SPA_META_VideoDamage), SPA_PARAM_META_size,
+-                                           
SPA_POD_CHOICE_RANGE_Int(sizeof(struct spa_meta_region) * 4, sizeof(struct 
spa_meta_region) * 1, sizeof(struct spa_meta_region) * 4));
++    params[3] = (const spa_pod*)spa_pod_builder_add_object(
++        &dynBuilder[2].b, SPA_TYPE_OBJECT_ParamMeta, SPA_PARAM_Meta, 
SPA_PARAM_META_type, SPA_POD_Id(SPA_META_VideoDamage), SPA_PARAM_META_size,
++        SPA_POD_CHOICE_RANGE_Int(sizeof(struct spa_meta_region) * 4, 
sizeof(struct spa_meta_region) * 1, sizeof(struct spa_meta_region) * 4));
+ 
+     pw_stream_update_params(PSTREAM->stream, params, 4);
+     spa_pod_dynamic_builder_clean(&dynBuilder[0]);
+@@ -1061,7 +1062,7 @@ uint32_t 
CPipewireConnection::buildFormatsFor(spa_pod_builder* b[2], const spa_p
+ 
+         paramCount = 2;
+         params[0]  = build_format(b[0], 
pwFromDrmFourcc(stream->pSession->sharingData.frameInfoDMA.fmt), 
stream->pSession->sharingData.frameInfoDMA.w,
+-                                 
stream->pSession->sharingData.frameInfoDMA.h, 
stream->pSession->sharingData.framerate, modifiers, modCount);
++                                  
stream->pSession->sharingData.frameInfoDMA.h, 
stream->pSession->sharingData.framerate, modifiers, modCount);
+         assert(params[0] != NULL);
+         params[1] = build_format(b[1], 
pwFromDrmFourcc(stream->pSession->sharingData.frameInfoSHM.fmt), 
stream->pSession->sharingData.frameInfoSHM.w,
+                                  
stream->pSession->sharingData.frameInfoSHM.h, 
stream->pSession->sharingData.framerate, NULL, 0);
+@@ -1071,7 +1072,7 @@ uint32_t 
CPipewireConnection::buildFormatsFor(spa_pod_builder* b[2], const spa_p
+ 
+         paramCount = 1;
+         params[0]  = build_format(b[0], 
pwFromDrmFourcc(stream->pSession->sharingData.frameInfoSHM.fmt), 
stream->pSession->sharingData.frameInfoSHM.w,
+-                                 
stream->pSession->sharingData.frameInfoSHM.h, 
stream->pSession->sharingData.framerate, NULL, 0);
++                                  
stream->pSession->sharingData.frameInfoSHM.h, 
stream->pSession->sharingData.framerate, NULL, 0);
+     }
+ 
+     return paramCount;
+-- 
+2.42.0
+

diff --git 
a/gui-libs/xdg-desktop-portal-hyprland/xdg-desktop-portal-hyprland-1.1.0.ebuild 
b/gui-libs/xdg-desktop-portal-hyprland/xdg-desktop-portal-hyprland-1.1.0.ebuild
index a04e503d5a..9c210b772f 100644
--- 
a/gui-libs/xdg-desktop-portal-hyprland/xdg-desktop-portal-hyprland-1.1.0.ebuild
+++ 
b/gui-libs/xdg-desktop-portal-hyprland/xdg-desktop-portal-hyprland-1.1.0.ebuild
@@ -47,26 +47,30 @@ RDEPEND="
 "
 BDEPEND="
        >=dev-libs/wayland-protocols-1.24
-       >=sys-devel/gcc-13:*
        dev-libs/hyprland-protocols
        virtual/pkgconfig
+       || ( >=sys-devel/gcc-13:* >=sys-devel/clang-17:* )
 "
 
 pkg_setup() {
                [[ ${MERGE_TYPE} == binary ]] && return
 
        if tc-is-gcc && ver_test $(gcc-version) -lt 13 ; then
-               eerror "XDPH needs >=gcc-13 to compile."
+               eerror "XDPH needs >=gcc-13 or >=clang-17 to compile."
                eerror "Please upgrade GCC: emerge -v1 sys-devel/gcc"
                die "GCC version is too old to compile XDPH!"
-       elif ! tc-is-gcc ; then
-               eerror "XDPH v1.1.0 needs >=gcc-13 to compile."
-               eerror "Due to an upstream issue, XDPH won't compile with 
clang."
-               eerror "Please either use GCC, or merge an older version than 
1.0.0."
-               die "XDPH won't compile with clang!"
+       elif tc-is-clang && ver_test $(clang-version) -lt 17 ; then
+               eerror "XDPH needs >=gcc-13 or >=clang-17 to compile."
+               eerror "Please upgrade Clang: emerge -v1 sys-devel/clang"
+               die "Clang version is too old to compile XDPH!"
        fi
 }
 
+src_prepare() {
+               eapply 
"${FILESDIR}/xdg-desktop-portal-hyprland-1.1.0_fix_clang.patch"
+               default
+}
+
 src_compile() {
        meson_src_compile
        emake -C hyprland-share-picker all

Reply via email to