aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorknuxify <knuxify@gmail.com>2022-07-26 14:04:04 +0200
committeralice <alice@ayaya.dev>2022-07-28 16:25:04 +0000
commit9ba87df5a6326b39c87f5d717a84367ddb040d57 (patch)
treeeeee28c273bcd499c830f4bc59feeb23c2acb9f6
parentb469208fcbc05f6afd28187d37f9110593102ca5 (diff)
community/strawberry: upgrade to 1.0.7, enable tests
-rw-r--r--community/strawberry/APKBUILD18
-rw-r--r--community/strawberry/icu-support.patch316
2 files changed, 326 insertions, 8 deletions
diff --git a/community/strawberry/APKBUILD b/community/strawberry/APKBUILD
index c9f796a0b94..6a72b36dfaf 100644
--- a/community/strawberry/APKBUILD
+++ b/community/strawberry/APKBUILD
@@ -1,13 +1,13 @@
# Contributor: knuxify <knuxify@gmail.com>
# Maintainer: knuxify <knuxify@gmail.com>
pkgname=strawberry
-pkgver=1.0.6
-pkgrel=1
+pkgver=1.0.7
+pkgrel=0
pkgdesc="Strawberry Music Player"
url="https://strawberrymusicplayer.org"
arch="all"
license="GPL-3.0-or-later"
-depends="gst-plugins-base gst-plugins-good qt6-qtbase-sqlite"
+depends="gst-plugins-base gst-plugins-good qt6-qtbase-sqlite icu-data-full"
makedepends="
alsa-lib-dev
boost-dev
@@ -19,6 +19,7 @@ makedepends="
gnutls-dev
gst-plugins-base-dev
gstreamer-dev
+ icu-dev
libcdio-dev
libgpod-dev
libmtp-dev
@@ -32,9 +33,10 @@ makedepends="
sqlite-dev
taglib-dev
"
-options="!check" # no test suite
+checkdepends="gtest-dev xvfb-run"
subpackages="$pkgname-doc"
-source="https://files.strawberrymusicplayer.org/strawberry-$pkgver.tar.xz"
+source="https://files.strawberrymusicplayer.org/strawberry-$pkgver.tar.xz
+ icu-support.patch"
build() {
if [ "$CBUILD" != "$CHOST" ]; then
@@ -50,8 +52,7 @@ build() {
}
check() {
- cd build
- CTEST_OUTPUT_ON_FAILURE=TRUE ctest
+ xvfb-run cmake --build build --target run_strawberry_tests
}
package() {
@@ -59,5 +60,6 @@ package() {
}
sha512sums="
-8b929ffaac15acd94f244b582a086388bf459131bb9be56b97fb74c954734d209a9928411954ccc445145f70a027763c60d1b111d89532ebd12e9ed0db19e760 strawberry-1.0.6.tar.xz
+9bf092c3990ae0c2ce63074c7f6076ccab896ae915c4ee255a7fbb6534d50467648f3e96bc029075acfd50515c45ade867e55518d9a68ec9c10a741e1976d64f strawberry-1.0.7.tar.xz
+29d2625e3e6fa25b394608456cb0fd9b9bb6d8cf3c1e94b14bec6bb7de6306245c97c78aff3fe43fbbe0ad8785423686c5644b8302ad064f699fc90e10adaec3 icu-support.patch
"
diff --git a/community/strawberry/icu-support.patch b/community/strawberry/icu-support.patch
new file mode 100644
index 00000000000..0b52aeb93a3
--- /dev/null
+++ b/community/strawberry/icu-support.patch
@@ -0,0 +1,316 @@
+Patch-Source: https://github.com/strawberrymusicplayer/strawberry/commit/564211acebc8030300afb7fac0cdfbbca4536890
+From 564211acebc8030300afb7fac0cdfbbca4536890 Mon Sep 17 00:00:00 2001
+From: Jonas Kvinge <jonas@jkvinge.net>
+Date: Thu, 28 Jul 2022 04:01:58 +0200
+Subject: [PATCH] Prefer ICU to transliterate characters when available
+
+Fixes #1008
+---
+ .github/workflows/ccpp.yml | 22 ++++++++++--
+ 3rdparty/singleapplication/CMakeLists.txt | 2 +-
+ CMakeLists.txt | 9 ++++-
+ debian/control.in | 1 +
+ dist/unix/strawberry.spec.in | 2 ++
+ ext/gstmoodbar/CMakeLists.txt | 2 +-
+ ext/libstrawberry-common/CMakeLists.txt | 2 +-
+ ext/libstrawberry-tagreader/CMakeLists.txt | 2 +-
+ ext/strawberry-tagreader/CMakeLists.txt | 2 +-
+ src/CMakeLists.txt | 7 +++-
+ src/config.h.in | 2 ++
+ src/core/utilities.cpp | 39 +++++++++++++++++++---
+ src/core/utilities.h | 2 +-
+ src/covermanager/albumcoverloader.cpp | 2 +-
+ src/organize/organizeformat.cpp | 2 +-
+ tests/src/organizeformat_test.cpp | 12 ++++++-
+ tests/src/utilities_test.cpp | 4 +--
+ 17 files changed, 95 insertions(+), 19 deletions(-)
+
+diff --git a/3rdparty/singleapplication/CMakeLists.txt b/3rdparty/singleapplication/CMakeLists.txt
+index 96525080b..033f0a61a 100644
+--- a/3rdparty/singleapplication/CMakeLists.txt
++++ b/3rdparty/singleapplication/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-cmake_minimum_required(VERSION 3.0)
++cmake_minimum_required(VERSION 3.7)
+
+ include(CheckIncludeFiles)
+ include(CheckFunctionExists)
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 71c8d371d..c159aa5f9 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -1,7 +1,10 @@
+ project(strawberry)
+
+-cmake_minimum_required(VERSION 3.0)
++cmake_minimum_required(VERSION 3.7)
+ cmake_policy(SET CMP0054 NEW)
++if (CMAKE_VERSION VERSION_GREATER_EQUAL 3.12)
++ cmake_policy(SET CMP0074 NEW)
++endif()
+
+ include(CheckCXXCompilerFlag)
+ include(CheckCXXSourceRuns)
+@@ -102,6 +105,10 @@ if(Backtrace_FOUND)
+ set(HAVE_BACKTRACE ON)
+ endif()
+ find_package(Iconv)
++find_package(ICU COMPONENTS uc i18n)
++if(ICU_FOUND)
++ set(HAVE_ICU ON)
++endif()
+ find_package(GnuTLS REQUIRED)
+ find_package(Protobuf REQUIRED)
+ if(NOT Protobuf_PROTOC_EXECUTABLE)
+diff --git a/debian/control.in b/debian/control.in
+index a28b63394..d5eb8ecd5 100644
+--- a/debian/control.in
++++ b/debian/control.in
+@@ -17,6 +17,7 @@ Build-Depends: debhelper (>= 11),
+ libasound2-dev,
+ libpulse-dev,
+ libtag1-dev,
++ libicu-devel,
+ @DEBIAN_BUILD_DEPENDS_QT_PACKAGES@,
+ libgstreamer1.0-dev,
+ libgstreamer-plugins-base1.0-dev,
+diff --git a/dist/unix/strawberry.spec.in b/dist/unix/strawberry.spec.in
+index 047cb37ad..772f5b65a 100644
+--- a/dist/unix/strawberry.spec.in
++++ b/dist/unix/strawberry.spec.in
+@@ -49,6 +49,8 @@ BuildRequires: pkgconfig(sqlite3) >= 3.9
+ BuildRequires: pkgconfig(taglib)
+ %endif
+ BuildRequires: pkgconfig(fftw3)
++BuildRequires: pkgconfig(icu-uc)
++BuildRequires: pkgconfig(icu-i18n)
+ %if "@QT_VERSION_MAJOR@" == "5" && ( 0%{?fedora} || 0%{?rhel_version} || 0%{?centos} )
+ BuildRequires: pkgconfig(Qt@QT_VERSION_MAJOR@Core)
+ BuildRequires: pkgconfig(Qt@QT_VERSION_MAJOR@Gui)
+diff --git a/ext/gstmoodbar/CMakeLists.txt b/ext/gstmoodbar/CMakeLists.txt
+index 85f849963..3986b0613 100644
+--- a/ext/gstmoodbar/CMakeLists.txt
++++ b/ext/gstmoodbar/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-cmake_minimum_required(VERSION 3.0)
++cmake_minimum_required(VERSION 3.7)
+
+ set(SOURCES gstfastspectrum.cpp gstmoodbarplugin.cpp)
+
+diff --git a/ext/libstrawberry-common/CMakeLists.txt b/ext/libstrawberry-common/CMakeLists.txt
+index 1fbc022bb..007238aa2 100644
+--- a/ext/libstrawberry-common/CMakeLists.txt
++++ b/ext/libstrawberry-common/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-cmake_minimum_required(VERSION 3.0)
++cmake_minimum_required(VERSION 3.7)
+
+ set(SOURCES
+ core/logging.cpp
+diff --git a/ext/libstrawberry-tagreader/CMakeLists.txt b/ext/libstrawberry-tagreader/CMakeLists.txt
+index b308120c7..4d2ba0adc 100644
+--- a/ext/libstrawberry-tagreader/CMakeLists.txt
++++ b/ext/libstrawberry-tagreader/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-cmake_minimum_required(VERSION 3.0)
++cmake_minimum_required(VERSION 3.7)
+
+ set(MESSAGES tagreadermessages.proto)
+ set(SOURCES tagreaderbase.cpp)
+diff --git a/ext/strawberry-tagreader/CMakeLists.txt b/ext/strawberry-tagreader/CMakeLists.txt
+index 683cc40cb..be1df4636 100644
+--- a/ext/strawberry-tagreader/CMakeLists.txt
++++ b/ext/strawberry-tagreader/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-cmake_minimum_required(VERSION 3.0)
++cmake_minimum_required(VERSION 3.7)
+
+ set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR})
+
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index ca745ec4b..64540837c 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-cmake_minimum_required(VERSION 3.0)
++cmake_minimum_required(VERSION 3.7)
+
+ if(HAVE_TRANSLATIONS)
+ include(../cmake/Translations.cmake)
+@@ -1145,6 +1145,11 @@ if(FREEBSD)
+ target_link_libraries(strawberry_lib PRIVATE iconv)
+ endif()
+
++if(HAVE_ICU)
++ target_include_directories(strawberry_lib SYSTEM PRIVATE ${ICU_INCLUDE_DIRS})
++ target_link_libraries(strawberry_lib PRIVATE ${ICU_LIBRARIES})
++endif()
++
+ if(APPLE)
+ target_link_libraries(strawberry_lib PRIVATE
+ "-framework AppKit"
+diff --git a/src/config.h.in b/src/config.h.in
+index 0629fe394..c8d126b33 100644
+--- a/src/config.h.in
++++ b/src/config.h.in
+@@ -21,6 +21,8 @@
+ #cmakedefine HAVE_MUSICBRAINZ
+ #cmakedefine HAVE_GLOBALSHORTCUTS
+ #cmakedefine HAVE_X11_GLOBALSHORTCUTS
++#cmakedefine HAVE_ICU
++
+ #cmakedefine USE_INSTALL_PREFIX
+
+ #cmakedefine HAVE_GSTREAMER
+diff --git a/src/core/utilities.cpp b/src/core/utilities.cpp
+index 48c25edbc..741daaf72 100644
+--- a/src/core/utilities.cpp
++++ b/src/core/utilities.cpp
+@@ -23,7 +23,12 @@
+
+ #include <memory>
+ #include <cstdlib>
+-#include <iconv.h>
++
++#ifdef HAVE_ICU
++# include <unicode/translit.h>
++#else
++# include <iconv.h>
++#endif
+
+ #include <QtGlobal>
+ #include <QApplication>
+@@ -786,16 +791,39 @@ QString DesktopEnvironment() {
+
+ }
+
+-QString UnicodeToAscii(const QString &unicode) {
++#ifdef HAVE_ICU
++
++QString Transliterate(const QString &accented_str) {
++
++ UErrorCode errorcode = U_ZERO_ERROR;
++ std::unique_ptr<icu::Transliterator> transliterator;
++ transliterator.reset(icu::Transliterator::createInstance("Any-Latin; Latin-ASCII;", UTRANS_FORWARD, errorcode));
++
++ if (!transliterator) return accented_str;
++
++ QByteArray accented_data = accented_str.toUtf8();
++ icu::UnicodeString ustring = icu::UnicodeString(accented_data.constData());
++ transliterator->transliterate(ustring);
++
++ std::string unaccented_str;
++ ustring.toUTF8String(unaccented_str);
++
++ return QString::fromStdString(unaccented_str);
++
++}
++
++#else
++
++QString Transliterate(const QString &accented_str) {
+
+ #ifdef LC_ALL
+ setlocale(LC_ALL, "");
+ #endif
+
+ iconv_t conv = iconv_open("ASCII//TRANSLIT", "UTF-8");
+- if (conv == reinterpret_cast<iconv_t>(-1)) return unicode;
++ if (conv == reinterpret_cast<iconv_t>(-1)) return accented_str;
+
+- QByteArray utf8 = unicode.toUtf8();
++ QByteArray utf8 = accented_str.toUtf8();
+
+ size_t input_len = utf8.length() + 1;
+ char *input_ptr = new char[input_len];
+@@ -817,8 +845,11 @@ QString UnicodeToAscii(const QString &unicode) {
+ delete[] output_ptr;
+
+ return ret;
++
+ }
+
++#endif
++
+ QString MacAddress() {
+
+ QString ret;
+diff --git a/src/core/utilities.h b/src/core/utilities.h
+index 444f3024d..5e5caf1a1 100644
+--- a/src/core/utilities.h
++++ b/src/core/utilities.h
+@@ -132,7 +132,7 @@ QString GetRandomString(const int len, const QString &UseCharacters);
+
+ QString DesktopEnvironment();
+
+-QString UnicodeToAscii(const QString &unicode);
++QString Transliterate(const QString &accented_str);
+
+ QString MacAddress();
+
+diff --git a/src/covermanager/albumcoverloader.cpp b/src/covermanager/albumcoverloader.cpp
+index 054461411..c6ea91fa7 100644
+--- a/src/covermanager/albumcoverloader.cpp
++++ b/src/covermanager/albumcoverloader.cpp
+@@ -110,7 +110,7 @@ QString AlbumCoverLoader::AlbumCoverFilename(QString artist, QString album, cons
+ album.remove('/').remove('\\');
+
+ QString filename = artist + "-" + album;
+- filename = Utilities::UnicodeToAscii(filename.toLower());
++ filename = Utilities::Transliterate(filename.toLower());
+ filename = filename.replace(' ', '-')
+ .replace("--", "-")
+ .remove(OrganizeFormat::kInvalidFatCharacters)
+diff --git a/src/organize/organizeformat.cpp b/src/organize/organizeformat.cpp
+index 4f90f40c4..1effd740a 100644
+--- a/src/organize/organizeformat.cpp
++++ b/src/organize/organizeformat.cpp
+@@ -128,7 +128,7 @@ QString OrganizeFormat::GetFilenameForSong(const Song &song, QString extension)
+ }
+
+ if (remove_problematic_) filename = filename.remove(kProblematicCharacters);
+- if (remove_non_fat_ || (remove_non_ascii_ && !allow_ascii_ext_)) filename = Utilities::UnicodeToAscii(filename);
++ if (remove_non_fat_ || (remove_non_ascii_ && !allow_ascii_ext_)) filename = Utilities::Transliterate(filename);
+ if (remove_non_fat_) filename = filename.remove(kInvalidFatCharacters);
+
+ if (remove_non_ascii_) {
+diff --git a/tests/src/organizeformat_test.cpp b/tests/src/organizeformat_test.cpp
+index b4ac56802..b51729368 100644
+--- a/tests/src/organizeformat_test.cpp
++++ b/tests/src/organizeformat_test.cpp
+@@ -176,8 +176,18 @@ TEST_F(OrganizeFormatTest, ReplaceNonAscii) {
+ format_.set_remove_non_ascii(true);
+ EXPECT_EQ("Royksopp", format_.GetFilenameForSong(song_));
+
++ song_.set_artist("");
++ EXPECT_EQ("", format_.GetFilenameForSong(song_));
++
++#ifdef HAVE_ICU
++
+ song_.set_artist(QString::fromUtf8("Владимир Высоцкий"));
+- EXPECT_EQ("_________________", format_.GetFilenameForSong(song_));
++ EXPECT_EQ("Vladimir_Vysockij", format_.GetFilenameForSong(song_));
++
++ song_.set_artist(QString::fromUtf8("エックス・ジャパン"));
++ EXPECT_EQ("ekkusujapan", format_.GetFilenameForSong(song_));
++
++#endif
+
+ }
+
+diff --git a/tests/src/utilities_test.cpp b/tests/src/utilities_test.cpp
+index 8bcf5c77d..004e57d30 100644
+--- a/tests/src/utilities_test.cpp
++++ b/tests/src/utilities_test.cpp
+@@ -166,9 +166,9 @@ TEST(UtilitiesTest, Random) {
+
+ }
+
+-TEST(UtilitiesTest, UnicodeToAscii) {
++TEST(UtilitiesTest, Transliterate) {
+
+- ASSERT_EQ(Utilities::UnicodeToAscii("ÆØÅ"), "AEOA");
++ ASSERT_EQ(Utilities::Transliterate("ÆØÅ"), "AEOA");
+
+ }
+