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