commit:     1f253042a8653e56b1cc6ae0df2d896d38cd7ecb
Author:     Alfred Persson Forsberg <cat <AT> catcream <DOT> org>
AuthorDate: Tue Jun 21 22:50:33 2022 +0000
Commit:     Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
CommitDate: Thu Jul 14 20:32:06 2022 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=1f253042

kde-apps/filelight: fix build and running on musl

Filelight has two issues with musl. One is a SIGSEGV regarding the
sincos implementation and the other is S_BLKSIZE not being defined.

*1: The SIGSEGV is resolved upstream and with this patch musl will just use the 
native sincos.
*2: DEV_BSIZE is the exact same thing as S_BLKSIZE, so use that instead.

The DEV_BSIZE issue is PR:ed upstreamed but there are issues with it since 
Windows does not have sys/param.h.

https://invent.kde.org/utilities/filelight/-/merge_requests/42/
https://invent.kde.org/utilities/filelight/-/merge_requests/39/
Signed-off-by: Alfred Persson Forsberg <cat <AT> catcream.org>

squash
Closes: https://github.com/gentoo/gentoo/pull/26029

Signed-off-by: Andreas Sturmlechner <asturm <AT> gentoo.org>

 kde-apps/filelight/filelight-22.04.3.ebuild        |  5 ++
 .../filelight-22.04.3-fix_musl_dev_bsize.patch     | 66 +++++++++++++++++++
 .../files/filelight-22.04.3-fix_sincos_impl.patch  | 75 ++++++++++++++++++++++
 3 files changed, 146 insertions(+)

diff --git a/kde-apps/filelight/filelight-22.04.3.ebuild 
b/kde-apps/filelight/filelight-22.04.3.ebuild
index f0a32cd6e429..611ae666b1ee 100644
--- a/kde-apps/filelight/filelight-22.04.3.ebuild
+++ b/kde-apps/filelight/filelight-22.04.3.ebuild
@@ -18,6 +18,11 @@ SLOT="5"
 KEYWORDS="~amd64 ~arm64 ~ppc64 ~riscv ~x86"
 IUSE=""
 
+PATCHES=(
+       "${FILESDIR}"/${PN}-22.04.3-fix_musl_dev_bsize.patch
+       "${FILESDIR}"/${PN}-22.04.3-fix_sincos_impl.patch
+)
+
 DEPEND="
        >=dev-qt/qtgui-${QTMIN}:5
        >=dev-qt/qtsvg-${QTMIN}:5

diff --git 
a/kde-apps/filelight/files/filelight-22.04.3-fix_musl_dev_bsize.patch 
b/kde-apps/filelight/files/filelight-22.04.3-fix_musl_dev_bsize.patch
new file mode 100644
index 000000000000..1b428b0582f5
--- /dev/null
+++ b/kde-apps/filelight/files/filelight-22.04.3-fix_musl_dev_bsize.patch
@@ -0,0 +1,66 @@
+https://invent.kde.org/utilities/filelight/-/merge_requests/42
+https://invent.kde.org/utilities/filelight/-/merge_requests/42/diffs?commit_id=f35d454513f2fc39fea0a5af7c94977c1ffb37aa
+
+DEV_BSIZE and S_BLKSIZE represent the same thing, but S_BLKSIZE isn't defined 
in musl libc, so use DEV_BSIZE instead.
+---
+ autotests/directoryIteratorTest.cpp | 8 ++++----
+ src/posixWalker.cpp                 | 2 +-
+ src/posixWalker.h                   | 1 +
+ 3 files changed, 6 insertions(+), 5 deletions(-)
+
+diff --git a/autotests/directoryIteratorTest.cpp 
b/autotests/directoryIteratorTest.cpp
+index d50c32b..fece8dd 100644
+--- a/autotests/directoryIteratorTest.cpp
++++ b/autotests/directoryIteratorTest.cpp
+@@ -60,9 +60,9 @@ private Q_SLOTS:
+ #ifdef Q_OS_WINDOWS
+         QCOMPARE(file.size, 7682);
+ #elif defined(Q_OS_FREEBSD)
+-        QCOMPARE(file.size, 1 * S_BLKSIZE);
++        QCOMPARE(file.size, 1 * DEV_BSIZE);
+ #else
+-        QCOMPARE(file.size, 16 * S_BLKSIZE);
++        QCOMPARE(file.size, 16 * DEV_BSIZE);
+ #endif
+ 
+         if (withSymlink) {
+@@ -83,9 +83,9 @@ private Q_SLOTS:
+ #ifdef Q_OS_WINDOWS
+             QCOMPARE(symlink.size, 7682);
+ #elif defined(Q_OS_FREEBSD)
+-            QCOMPARE(file.size, 1 * S_BLKSIZE);
++            QCOMPARE(file.size, 1 * DEV_BSIZE);
+ #else
+-            QCOMPARE(symlink.size, 16 * S_BLKSIZE);
++            QCOMPARE(symlink.size, 16 * DEV_BSIZE);
+ #endif
+         }
+     }
+diff --git a/src/posixWalker.cpp b/src/posixWalker.cpp
+index be6935f..6538408 100644
+--- a/src/posixWalker.cpp
++++ b/src/posixWalker.cpp
+@@ -99,7 +99,7 @@ void POSIXWalker::next()
+             S_ISFIFO(statbuf.st_mode) || S_ISSOCK(statbuf.st_mode);
+         m_entry.isDir = S_ISDIR(statbuf.st_mode);
+         m_entry.isFile = S_ISREG(statbuf.st_mode);
+-        m_entry.size = statbuf.st_blocks * S_BLKSIZE;
++        m_entry.size = statbuf.st_blocks * DEV_BSIZE;
+         break;
+     }
+ }
+diff --git a/src/posixWalker.h b/src/posixWalker.h
+index 4a78d52..ba72a98 100644
+--- a/src/posixWalker.h
++++ b/src/posixWalker.h
+@@ -7,6 +7,7 @@
+ #include <fcntl.h>
+ #include <sys/stat.h>
+ #include <sys/types.h>
++#include <sys/param.h>
+ #include <unistd.h>
+ 
+ #include <cerrno>
+-- 
+2.35.1
+

diff --git a/kde-apps/filelight/files/filelight-22.04.3-fix_sincos_impl.patch 
b/kde-apps/filelight/files/filelight-22.04.3-fix_sincos_impl.patch
new file mode 100644
index 000000000000..1c33e0d2e234
--- /dev/null
+++ b/kde-apps/filelight/files/filelight-22.04.3-fix_sincos_impl.patch
@@ -0,0 +1,75 @@
+https://invent.kde.org/utilities/filelight/-/merge_requests/42
+https://invent.kde.org/utilities/filelight/-/commit/861afa5fb0d2a839d7e83f7df644952219b84a3c
+
+Instead of hardcoding knowledege about glibc versions, check for the
+presence of sincos with CMake.
+
+Commit 93577e2a4927cf1640e8ac7153cd22ff54180bba wrongly added a
+SINCOS_H_IMPLEMENTATION macro instead of making it a static inline
+function or similar, so remove that as well.
+---
+ src/CMakeLists.txt     |  6 ++++++
+ src/radialMap/map.cpp  |  1 -
+ src/radialMap/sincos.h | 10 ++--------
+ 3 files changed, 8 insertions(+), 9 deletions(-)
+
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index 5634ff9..7007297 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -9,6 +9,12 @@ ecm_setup_version(${PROJECT_VERSION}
+     VARIABLE_PREFIX FILELIGHT
+     VERSION_HEADER version.h)
+ 
++include(CheckCXXSymbolExists)
++check_cxx_symbol_exists(sincos "math.h" HAVE_SINCOS)
++if (HAVE_SINCOS)
++    add_definitions(-DHAVE_SINCOS)
++endif()
++
+ add_library(filelightInternal STATIC fileTree.cpp directoryIterator.cpp)
+ if (WIN32)
+     target_sources(filelightInternal PRIVATE windowsWalker.cpp)
+diff --git a/src/radialMap/map.cpp b/src/radialMap/map.cpp
+index b60d1da..b6bb55b 100644
+--- a/src/radialMap/map.cpp
++++ b/src/radialMap/map.cpp
+@@ -20,7 +20,6 @@
+ #include "radialMap.h" // defines
+ 
+ #include "Config.h"
+-#define SINCOS_H_IMPLEMENTATION (1)
+ #include "sincos.h"
+ #include "widget.h"
+ 
+diff --git a/src/radialMap/sincos.h b/src/radialMap/sincos.h
+index 142504b..986a899 100644
+--- a/src/radialMap/sincos.h
++++ b/src/radialMap/sincos.h
+@@ -10,21 +10,15 @@
+ 
+ #include <math.h>
+ 
+-#if !defined(__GLIBC__) || (__GLIBC__ < 2) ||  (__GLIBC__ == 2 && 
__GLIBC_MINOR__ < 1)
++#ifndef HAVE_SINCOS
+ 
+ #include <qmath.h>
+ 
+-void
+-sincos(double angleRadians, double *Sin, double *Cos);
+-
+-#ifdef SINCOS_H_IMPLEMENTATION
+-void
+-sincos(double angleRadians, double *Sin, double *Cos)
++static inline void sincos(double angleRadians, double *Sin, double *Cos)
+ {
+     *Sin = qSin(angleRadians);
+     *Cos = qCos(angleRadians);
+ }
+-#endif
+ 
+ #endif
+ 
+-- 
+2.35.1
+

Reply via email to