Skip to content
Snippets Groups Projects
Commit 9ba87df5 authored by knuxify's avatar knuxify :package: Committed by alice
Browse files

community/strawberry: upgrade to 1.0.7, enable tests

parent b469208f
No related branches found
No related tags found
2 merge requests!39304[3.16] main/expat: security upgrade to 2.4.9,!36908community/strawberry: upgrade to 1.0.7, enable tests
Pipeline #130293 passed
# Contributor: knuxify <knuxify@gmail.com> # Contributor: knuxify <knuxify@gmail.com>
# Maintainer: knuxify <knuxify@gmail.com> # Maintainer: knuxify <knuxify@gmail.com>
pkgname=strawberry pkgname=strawberry
pkgver=1.0.6 pkgver=1.0.7
pkgrel=1 pkgrel=0
pkgdesc="Strawberry Music Player" pkgdesc="Strawberry Music Player"
url="https://strawberrymusicplayer.org" url="https://strawberrymusicplayer.org"
arch="all" arch="all"
license="GPL-3.0-or-later" 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=" makedepends="
alsa-lib-dev alsa-lib-dev
boost-dev boost-dev
...@@ -19,6 +19,7 @@ makedepends=" ...@@ -19,6 +19,7 @@ makedepends="
gnutls-dev gnutls-dev
gst-plugins-base-dev gst-plugins-base-dev
gstreamer-dev gstreamer-dev
icu-dev
libcdio-dev libcdio-dev
libgpod-dev libgpod-dev
libmtp-dev libmtp-dev
...@@ -32,9 +33,10 @@ makedepends=" ...@@ -32,9 +33,10 @@ makedepends="
sqlite-dev sqlite-dev
taglib-dev taglib-dev
" "
options="!check" # no test suite checkdepends="gtest-dev xvfb-run"
subpackages="$pkgname-doc" 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() { build() {
if [ "$CBUILD" != "$CHOST" ]; then if [ "$CBUILD" != "$CHOST" ]; then
...@@ -50,8 +52,7 @@ build() { ...@@ -50,8 +52,7 @@ build() {
} }
check() { check() {
cd build xvfb-run cmake --build build --target run_strawberry_tests
CTEST_OUTPUT_ON_FAILURE=TRUE ctest
} }
package() { package() {
...@@ -59,5 +60,6 @@ package() { ...@@ -59,5 +60,6 @@ package() {
} }
sha512sums=" sha512sums="
8b929ffaac15acd94f244b582a086388bf459131bb9be56b97fb74c954734d209a9928411954ccc445145f70a027763c60d1b111d89532ebd12e9ed0db19e760 strawberry-1.0.6.tar.xz 9bf092c3990ae0c2ce63074c7f6076ccab896ae915c4ee255a7fbb6534d50467648f3e96bc029075acfd50515c45ade867e55518d9a68ec9c10a741e1976d64f strawberry-1.0.7.tar.xz
29d2625e3e6fa25b394608456cb0fd9b9bb6d8cf3c1e94b14bec6bb7de6306245c97c78aff3fe43fbbe0ad8785423686c5644b8302ad064f699fc90e10adaec3 icu-support.patch
" "
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");
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment