diff options
author | knuxify <knuxify@gmail.com> | 2022-07-26 14:04:04 +0200 |
---|---|---|
committer | alice <alice@ayaya.dev> | 2022-07-28 16:25:04 +0000 |
commit | 9ba87df5a6326b39c87f5d717a84367ddb040d57 (patch) | |
tree | eeee28c273bcd499c830f4bc59feeb23c2acb9f6 | |
parent | b469208fcbc05f6afd28187d37f9110593102ca5 (diff) |
community/strawberry: upgrade to 1.0.7, enable tests
-rw-r--r-- | community/strawberry/APKBUILD | 18 | ||||
-rw-r--r-- | community/strawberry/icu-support.patch | 316 |
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"); + + } + |