commit:     83d2aec8200c8232978d20d43701c4442376a316
Author:     Alexey Sokolov <alexey+gentoo <AT> asokolov <DOT> org>
AuthorDate: Fri Nov 10 22:41:37 2023 +0000
Commit:     Joonas Niilola <juippis <AT> gentoo <DOT> org>
CommitDate: Sat Dec 23 20:05:55 2023 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=83d2aec8

media-sound/clementine: read projectm visualizations from subdirs

Closes: https://bugs.gentoo.org/917064
Signed-off-by: Alexey Sokolov <alexey+gentoo <AT> asokolov.org>
Closes: https://github.com/gentoo/gentoo/pull/33760
Signed-off-by: Joonas Niilola <juippis <AT> gentoo.org>

 .../clementine/clementine-1.4.0_rc2-r5.ebuild      | 169 +++++++++++++++++++++
 .../files/clementine-1.4.0_rc2-projectm-dir.patch  |  53 +++++++
 2 files changed, 222 insertions(+)

diff --git a/media-sound/clementine/clementine-1.4.0_rc2-r5.ebuild 
b/media-sound/clementine/clementine-1.4.0_rc2-r5.ebuild
new file mode 100644
index 000000000000..6e37ca03e086
--- /dev/null
+++ b/media-sound/clementine/clementine-1.4.0_rc2-r5.ebuild
@@ -0,0 +1,169 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DESCRIPTION="Modern music player and library organizer based on Amarok 1.4 and 
Qt"
+HOMEPAGE="https://www.clementine-player.org 
https://github.com/clementine-player/Clementine";
+
+PLOCALES="af ar be bg bn br bs ca cs cy da de el en en_CA en_GB eo es et eu fa 
fi fr ga gl he he_IL hi hr hu hy ia id is it ja ka kk ko lt lv mk_MK mr ms my 
nb nl oc pa pl pt pt_BR ro ru si_LK sk sl sr sr@latin sv te tr tr_TR uk uz vi 
zh_CN zh_TW"
+
+inherit cmake flag-o-matic plocale virtualx xdg
+
+if [[ ${PV} == *9999* ]]; then
+       EGIT_REPO_URI="https://github.com/clementine-player/Clementine.git";
+       inherit git-r3
+else
+       
SRC_URI="https://github.com/clementine-player/Clementine/archive/refs/tags/${PV/_}.tar.gz
 -> ${P}.tar.gz"
+       S="${WORKDIR}/Clementine-${PV/_}"
+       KEYWORDS="~amd64 ~arm64 ~ppc64 ~x86"
+fi
+
+LICENSE="GPL-3"
+SLOT="0"
+IUSE="alsa box cdda +dbus debug dropbox googledrive ipod lastfm moodbar mtp 
projectm pulseaudio seafile skydrive test +udisks wiimote"
+RESTRICT="!test? ( test )"
+
+REQUIRED_USE="
+       udisks? ( dbus )
+       wiimote? ( dbus )
+"
+
+COMMON_DEPEND="
+       dev-cpp/abseil-cpp:=
+       dev-db/sqlite:3
+       dev-libs/glib:2
+       dev-libs/protobuf:=
+       dev-qt/qtconcurrent:5
+       dev-qt/qtcore:5
+       dev-qt/qtgui:5
+       dev-qt/qtnetwork:5[ssl]
+       dev-qt/qtsql:5[sqlite]
+       dev-qt/qtwidgets:5
+       dev-qt/qtx11extras:5
+       media-libs/chromaprint:=
+       media-libs/gstreamer:1.0
+       media-libs/gst-plugins-base:1.0
+       >=media-libs/libmygpo-qt-1.0.9[qt5(+)]
+       >=media-libs/taglib-1.11.1_p20181028
+       sys-libs/zlib
+       x11-libs/libX11
+       alsa? ( media-libs/alsa-lib )
+       cdda? ( dev-libs/libcdio:= )
+       dbus? ( dev-qt/qtdbus:5 )
+       ipod? ( >=media-libs/libgpod-0.8.0 )
+       lastfm? ( >=media-libs/liblastfm-1.1.0_pre20150206 )
+       moodbar? ( sci-libs/fftw:3.0= )
+       mtp? ( >=media-libs/libmtp-1.0.0:= )
+       projectm? (
+               media-libs/glew:=
+               >=media-libs/libprojectm-3.1.12:0=
+               virtual/opengl
+       )
+       pulseaudio? ( media-libs/libpulse )
+"
+RDEPEND="${COMMON_DEPEND}
+       media-plugins/gst-plugins-meta:1.0
+       media-plugins/gst-plugins-soup:1.0
+       media-plugins/gst-plugins-taglib:1.0
+       mtp? ( gnome-base/gvfs[mtp] )
+       udisks? ( sys-fs/udisks:2 )
+"
+DEPEND="${COMMON_DEPEND}
+       dev-libs/boost
+       dev-libs/libxml2
+       dev-qt/qtopengl:5
+       dev-qt/qtxml:5
+       virtual/glu
+       box? ( dev-cpp/sparsehash )
+       dropbox? ( dev-cpp/sparsehash )
+       googledrive? ( dev-cpp/sparsehash )
+       seafile? ( dev-cpp/sparsehash )
+       skydrive? ( dev-cpp/sparsehash )
+"
+BDEPEND="
+       >=dev-cpp/gtest-1.8.0
+       dev-qt/linguist-tools:5
+       sys-devel/gettext
+       virtual/pkgconfig
+       test? (
+               dev-qt/qttest:5
+               gnome-base/gsettings-desktop-schemas
+       )
+"
+
+PATCHES=(
+       "${FILESDIR}/clementine-1.4.0_rc2-lz.patch"
+       "${FILESDIR}/clementine-1.4.0_rc2-c17.patch"
+       "${FILESDIR}/clementine-1.4.0_rc2-absl.patch"
+       "${FILESDIR}/clementine-1.4.0_rc2-projectm-dir.patch"
+)
+
+DOCS=( Changelog README.md )
+
+src_prepare() {
+       plocale_find_changes "src/translations" "" ".po"
+
+       cmake_src_prepare
+       # some tests fail or hang
+       sed -i \
+               -e '/add_test_file(translations_test.cpp/d' \
+               tests/CMakeLists.txt || die
+
+       if ! use test; then
+               sed -e "/find_package.*Qt5/s:\ Test::" -i CMakeLists.txt || die
+               cmake_comment_add_subdirectory tests
+       fi
+
+       rm -r 3rdparty/{libmygpo-qt,libmygpo-qt5,taglib} || die
+}
+
+src_configure() {
+       # spotify is not in portage
+       local mycmakeargs=(
+               -DBUILD_WERROR=OFF
+               # avoid automagically enabling of ccache (bug #611010)
+               -DCCACHE_EXECUTABLE=OFF
+               -DENABLE_BREAKPAD=OFF  #< disable crash reporting
+               -DENABLE_GIO=ON
+               -DENABLE_SPOTIFY=OFF
+               -DENABLE_SPOTIFY_BLOB=OFF
+               -DUSE_SYSTEM_GMOCK=ON
+               -DUSE_SYSTEM_PROJECTM=ON
+               -DBUNDLE_PROJECTM_PRESETS=OFF
+               -DLINGUAS="$(plocale_get_locales)"
+               -DENABLE_BOX="$(usex box)"
+               -DENABLE_AUDIOCD="$(usex cdda)"
+               -DCMAKE_DISABLE_FIND_PACKAGE_Qt5DBus=$(usex !dbus)
+               -DENABLE_DROPBOX="$(usex dropbox)"
+               -DENABLE_GOOGLE_DRIVE="$(usex googledrive)"
+               -DENABLE_LIBGPOD="$(usex ipod)"
+               -DENABLE_LIBLASTFM="$(usex lastfm)"
+               -DENABLE_MOODBAR="$(usex moodbar)"
+               -DENABLE_LIBMTP="$(usex mtp)"
+               -DENABLE_VISUALISATIONS="$(usex projectm)"
+               -DENABLE_SEAFILE="$(usex seafile)"
+               -DENABLE_SKYDRIVE="$(usex skydrive)"
+               -DENABLE_LIBPULSE="$(usex pulseaudio)"
+               -DENABLE_UDISKS2="$(usex udisks)"
+               -DENABLE_WIIMOTEDEV="$(usex wiimote)"
+               "$(cmake_use_find_package alsa ALSA)"
+       )
+
+       use !debug && append-cppflags -DQT_NO_DEBUG_OUTPUT
+
+       cmake_src_configure
+}
+
+src_test() {
+       cd "${CMAKE_BUILD_DIR}" || die
+       virtx cmake_build clementine_test
+}
+
+pkg_postinst() {
+       xdg_pkg_postinst
+
+       elog "Note that list of supported formats is controlled by 
media-plugins/gst-plugins-meta "
+       elog "USE flags. You may be interested in setting aac, flac, mp3, ogg 
or wavpack USE flags "
+       elog "depending on your preferences"
+}

diff --git 
a/media-sound/clementine/files/clementine-1.4.0_rc2-projectm-dir.patch 
b/media-sound/clementine/files/clementine-1.4.0_rc2-projectm-dir.patch
new file mode 100644
index 000000000000..8f92766193d6
--- /dev/null
+++ b/media-sound/clementine/files/clementine-1.4.0_rc2-projectm-dir.patch
@@ -0,0 +1,53 @@
+Read visualisations from subdirs
+
+https://bugs.gentoo.org/917064
+https://github.com/clementine-player/Clementine/issues/7151
+
+--- a/src/visualisations/projectmpresetmodel.cpp
++++ b/src/visualisations/projectmpresetmodel.cpp
+@@ -27,22 +27,26 @@
+ #endif
+ 
+ #include <QDir>
++#include <QDirIterator>
+ #include <QtDebug>
++#include <set>
+ 
+ ProjectMPresetModel::ProjectMPresetModel(ProjectMVisualisation* vis,
+                                          QObject* parent)
+     : QAbstractItemModel(parent), vis_(vis) {
+   // Find presets
+-  QDir preset_dir(vis_->preset_url());
+-  QStringList presets(
+-      preset_dir.entryList(QStringList() << "*.milk"
+-                                         << "*.prjm",
++  QDirIterator it(vis_->preset_url(),
++                  QStringList() << "*.milk" << "*.prjm",
+                            QDir::Files | QDir::NoDotAndDotDot | 
QDir::Readable,
+-                           QDir::Name | QDir::IgnoreCase));
++                           QDirIterator::Subdirectories);
++  std::set<std::pair<QString, QString>> files;
++  while (it.hasNext()) {
++    it.next();
++    files.insert({it.filePath(), it.fileName()});
++  }
+ 
+-  for (const QString& filename : presets) {
+-    all_presets_ << Preset(preset_dir.absoluteFilePath(filename), filename,
+-                           false);
++  for (const auto& [filePath, fileName] : files) {
++    all_presets_ << Preset(filePath, fileName, false);
+   }
+ }
+ 
+--- a/src/visualisations/projectmvisualisation.cpp
++++ b/src/visualisations/projectmvisualisation.cpp
+@@ -93,7 +93,7 @@ void ProjectMVisualisation::InitProjectM() {
+     if (!QFile::exists(path)) continue;
+ 
+     // Don't use empty directories
+-    if (QDir(path).entryList(QDir::Files | QDir::NoDotAndDotDot).isEmpty())
++    if (QDir(path).entryList(QDir::Dirs | QDir::Files | 
QDir::NoDotAndDotDot).isEmpty())
+       continue;
+ 
+     preset_path = path;

Reply via email to