commit:     ec2f88274c49883f7226c9d3d9344925ce4440d7
Author:     Nicolas PARLANT <nicolas.parlant <AT> parhuet <DOT> fr>
AuthorDate: Tue Jun 10 21:06:03 2025 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Thu Jun 12 11:08:41 2025 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=ec2f8827

media-sound/cantata: Bump to 3.3.1

Add a patch to fix ODR violations with cddb or udisks enabled

Signed-off-by: Nicolas PARLANT <nicolas.parlant <AT> parhuet.fr>
Part-of: https://github.com/gentoo/gentoo/pull/42541
Signed-off-by: Sam James <sam <AT> gentoo.org>

 media-sound/cantata/Manifest                       |   1 +
 media-sound/cantata/cantata-3.3.1.ebuild           | 108 ++++++++++++++++
 .../cantata/files/cantata-3.3.0-fix_odr.patch      | 139 +++++++++++++++++++++
 3 files changed, 248 insertions(+)

diff --git a/media-sound/cantata/Manifest b/media-sound/cantata/Manifest
index f23d8fe6f4fd..46bf29360fa4 100644
--- a/media-sound/cantata/Manifest
+++ b/media-sound/cantata/Manifest
@@ -1 +1,2 @@
 DIST cantata-3.3.0.tar.gz 4783803 BLAKE2B 
78995492080cacf4d5f01e923a71edb2208baa9238d269679f6ea0112cf06066295bbeb40b18439bcd45fea8079ea6c52422f5515ed6f0c1511f7942f3b96f15
 SHA512 
ec011a2e544a882c68a808d27752457e4702f20b0ed66124dcc10586c8f5cc975690a4fc7368abc2747fd4f603f19b787a45f5a664f3ace8bcc9f1f86369253e
+DIST cantata-3.3.1.tar.gz 4787884 BLAKE2B 
0769ddc8e19370694d5a4cde9bf50c4563dd132e6471478bcd2842d15fc73b47e6f542096e907da6b162d9408a495ccf4af04d6def61cf751ef0f45e5459269e
 SHA512 
1d70f5be223d20e75faedefcb2db3833d77ef28fab2ba747ebb77fdb20b45416c19e453b49f61bcd7dbbc77c166e640adf474c40b80e71fdbd0f05b653e02c81

diff --git a/media-sound/cantata/cantata-3.3.1.ebuild 
b/media-sound/cantata/cantata-3.3.1.ebuild
new file mode 100644
index 000000000000..8b8f9a8286a7
--- /dev/null
+++ b/media-sound/cantata/cantata-3.3.1.ebuild
@@ -0,0 +1,108 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake xdg
+
+DESCRIPTION="Featureful and configurable Qt client for the music player daemon 
(MPD)"
+HOMEPAGE="https://github.com/nullobsi/cantata";
+SRC_URI="https://github.com/nullobsi/cantata/archive/v${PV}.tar.gz -> 
${P}.tar.gz"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~ppc64 ~x86"
+IUSE="cdda cddb http-server mtp musicbrainz replaygain streaming +taglib 
udisks zeroconf"
+REQUIRED_USE="
+       cdda? ( taglib udisks || ( cddb musicbrainz ) )
+       cddb? ( cdda taglib )
+       mtp? ( taglib udisks )
+       musicbrainz? ( cdda taglib )
+       replaygain? ( taglib )
+       udisks? ( taglib )
+"
+
+COMMON_DEPEND="
+       dev-qt/qtbase:6[dbus,gui,network,sql,sqlite,widgets,xml]
+       dev-qt/qtsvg:6
+       sys-libs/zlib
+       cdda? ( || (
+               dev-libs/libcdio-paranoia
+               media-sound/cdparanoia
+       ) )
+       cddb? ( media-libs/libcddb )
+       mtp? ( media-libs/libmtp:= )
+       musicbrainz? ( media-libs/musicbrainz:5= )
+       replaygain? (
+               media-libs/libebur128:=
+               media-sound/mpg123-base
+               media-video/ffmpeg:0=
+       )
+       streaming? ( dev-qt/qtmultimedia:6 )
+       taglib? ( >=media-libs/taglib-2:= )
+       udisks? ( kde-frameworks/solid:6 )
+       zeroconf? ( net-dns/avahi )
+"
+RDEPEND="${COMMON_DEPEND}
+       dev-lang/perl[perl_features_ithreads]
+"
+DEPEND="${COMMON_DEPEND}
+       dev-qt/qtbase:6[concurrent]
+"
+BDEPEND="
+       dev-qt/qttools:6[linguist]
+       virtual/pkgconfig
+"
+
+PATCHES=(
+       # unbundle KF6ItemViews and KF6Solid
+       "${FILESDIR}"/${PN}-3.3.0-rm-vendor.patch
+
+       # Fix ODR violations with cddb or udisks enabled
+       # https://github.com/nullobsi/cantata/pull/71.patch
+       "${FILESDIR}"/${PN}-3.3.0-fix_odr.patch
+)
+
+src_prepare() {
+       cmake_src_prepare
+
+       # Unbundle 3rd party libs
+       # keep knotifications : 
https://github.com/nullobsi/cantata/commit/719adb5
+       rm -r 
3rdparty/{ebur128,kcategorizedview,qtsingleapplication,qxt,solid-lite} || die
+}
+
+src_configure() {
+       local mycmakeargs=(
+               # Buggy https://github.com/nullobsi/cantata/commit/18236
+               -DENABLE_CATEGORIZED_VIEW=OFF
+               -DENABLE_CDPARANOIA=$(usex cdda)
+               -DENABLE_CDDB=$(usex cddb)
+               -DENABLE_CDIOPARANOIA=$(usex cdda)
+               -DENABLE_HTTP_SERVER=$(usex http-server)
+               -DENABLE_MTP=$(usex mtp)
+               -DENABLE_MUSICBRAINZ=$(usex musicbrainz)
+               -DENABLE_FFMPEG=$(usex replaygain)
+               -DENABLE_MPG123=$(usex replaygain)
+               -DENABLE_HTTP_STREAM_PLAYBACK=$(usex streaming)
+               -DENABLE_TAGLIB=$(usex taglib)
+               -DENABLE_DEVICES_SUPPORT=$(usex udisks)
+               -DENABLE_AVAHI=$(usex zeroconf)
+               -DENABLE_REMOTE_DEVICES=OFF
+               # use solid/udisks2 instead of udisks
+               -DENABLE_UDISKS2=ON
+       )
+
+       cmake_src_configure
+}
+
+pkg_postinst() {
+       xdg_pkg_postinst
+
+       has_version media-sound/mpd || \
+               elog "An instance of media-sound/mpd, local or remote, is 
required to set up Cantata."
+
+       if ! has_version app-misc/media-player-info; then
+               elog "Install app-misc/media-player-info to enable 
identification"
+               elog "and querying of portable media players"
+       fi
+}

diff --git a/media-sound/cantata/files/cantata-3.3.0-fix_odr.patch 
b/media-sound/cantata/files/cantata-3.3.0-fix_odr.patch
new file mode 100644
index 000000000000..391969f097ba
--- /dev/null
+++ b/media-sound/cantata/files/cantata-3.3.0-fix_odr.patch
@@ -0,0 +1,139 @@
+https://github.com/nullobsi/cantata/pull/71.patch
+> online/podcastsearchdialog.cpp:67:6: 
+> error: type ‘Roles’ violates the C++ One Definition Rule
+> devices/albumdetailsdialog.cpp:311:6: 
+> note: an enum with different value name is defined in another translation 
unit
+> gui/initialsettingswizard.cpp:44:6: 
+> error: type ‘Pages’ violates the C++ One Definition Rule
+> devices/actiondialog.cpp:68:6: 
+> note: an enum with different value name is defined in another translation 
unit
+From a19efdf9649c50320f8592f07d82734c352ace9c Mon Sep 17 00:00:00 2001
+From: Nicolas PARLANT <nicolas.parl...@parhuet.fr>
+Date: Tue, 10 Jun 2025 17:48:09 +0200
+Subject: [PATCH] fix ODR violations, move enums into class scope in headers
+
+Signed-off-by: Nicolas PARLANT <nicolas.parl...@parhuet.fr>
+---
+ devices/actiondialog.cpp       | 9 ---------
+ devices/actiondialog.h         | 9 +++++++++
+ gui/initialsettingswizard.cpp  | 7 -------
+ gui/initialsettingswizard.h    | 7 +++++++
+ online/podcastsearchdialog.cpp | 8 --------
+ online/podcastsearchdialog.h   | 9 +++++++++
+ 6 files changed, 25 insertions(+), 24 deletions(-)
+
+diff --git a/devices/actiondialog.cpp b/devices/actiondialog.cpp
+index a19a75bbe..f340dd902 100644
+--- a/devices/actiondialog.cpp
++++ b/devices/actiondialog.cpp
+@@ -65,15 +65,6 @@ int ActionDialog::instanceCount()
+       return iCount;
+ }
+ 
+-enum Pages {
+-      PAGE_SIZE_CALC,
+-      PAGE_INSUFFICIENT_SIZE,
+-      PAGE_START,
+-      PAGE_ERROR,
+-      PAGE_SKIP,
+-      PAGE_PROGRESS
+-};
+-
+ ActionDialog::ActionDialog(QWidget* parent)
+       : Dialog(parent), spaceRequired(0), mpdConfigured(false), 
currentDev(nullptr), songDialog(nullptr)
+ {
+diff --git a/devices/actiondialog.h b/devices/actiondialog.h
+index 82cab7575..8c144f548 100644
+--- a/devices/actiondialog.h
++++ b/devices/actiondialog.h
+@@ -47,6 +47,15 @@ class ActionDialog : public Dialog, Ui::ActionDialog {
+               Sync
+       };
+ 
++      enum Pages {
++              PAGE_SIZE_CALC,
++              PAGE_INSUFFICIENT_SIZE,
++              PAGE_START,
++              PAGE_ERROR,
++              PAGE_SKIP,
++              PAGE_PROGRESS
++      };
++
+       typedef QPair<QString, QString> StringPair;
+       typedef QList<StringPair> StringPairList;
+ 
+diff --git a/gui/initialsettingswizard.cpp b/gui/initialsettingswizard.cpp
+index acafa3747..b74877027 100644
+--- a/gui/initialsettingswizard.cpp
++++ b/gui/initialsettingswizard.cpp
+@@ -41,13 +41,6 @@
+ #include <QTimer>
+ #include <filesystem>
+ 
+-enum Pages {
+-      PAGE_INTRO,
+-      PAGE_CONNECTION,
+-      PAGE_COVERS,
+-      PAGE_END
+-};
+-
+ InitialSettingsWizard::InitialSettingsWizard(QWidget* p)
+       : QWizard(p)
+ {
+diff --git a/gui/initialsettingswizard.h b/gui/initialsettingswizard.h
+index 90e80984f..9ffda750b 100644
+--- a/gui/initialsettingswizard.h
++++ b/gui/initialsettingswizard.h
+@@ -32,6 +32,13 @@
+ class InitialSettingsWizard : public QWizard, public 
Ui::InitialSettingsWizard {
+       Q_OBJECT
+ 
++      enum Pages {
++              PAGE_INTRO,
++              PAGE_CONNECTION,
++              PAGE_COVERS,
++              PAGE_END
++      };
++
+ public:
+       InitialSettingsWizard(QWidget* p = nullptr);
+       ~InitialSettingsWizard() override;
+diff --git a/online/podcastsearchdialog.cpp b/online/podcastsearchdialog.cpp
+index 3516a345d..639058bd4 100644
+--- a/online/podcastsearchdialog.cpp
++++ b/online/podcastsearchdialog.cpp
+@@ -64,14 +64,6 @@ static QCache<QUrl, QImage> imageCache(200 * 1024);
+ static int maxImageSize = -1;
+ static const char* constOrigUrlProperty = "orig-url";
+ 
+-enum Roles {
+-      IsPodcastRole = Qt::UserRole,
+-      UrlRole,
+-      ImageUrlRole,
+-      DescriptionRole,
+-      WebPageUrlRole
+-};
+-
+ QString PodcastSearchDialog::constCacheDir = 
QLatin1String("podcast-directories");
+ QString PodcastSearchDialog::constExt = QLatin1String(".opml");
+ 
+diff --git a/online/podcastsearchdialog.h b/online/podcastsearchdialog.h
+index 2d494200a..d33e5c3c9 100644
+--- a/online/podcastsearchdialog.h
++++ b/online/podcastsearchdialog.h
+@@ -47,6 +47,15 @@ struct Podcast;
+ 
+ class PodcastPage : public QWidget {
+       Q_OBJECT
++
++      enum Roles {
++              IsPodcastRole = Qt::UserRole,
++              UrlRole,
++              ImageUrlRole,
++              DescriptionRole,
++              WebPageUrlRole
++      };
++
+ public:
+       PodcastPage(QWidget* p, const QString& n);
+       ~PodcastPage() override

Reply via email to