[packages/mixxx] - updated to 2.5.2 (now defaults to qt6, ready for taglib 2)
qboosh
qboosh at pld-linux.org
Fri Aug 29 17:13:02 CEST 2025
commit 85054e3a834a78180789ce6d1fad65c00fc6469c
Author: Jakub Bogusz <qboosh at pld-linux.org>
Date: Fri Aug 29 17:15:44 2025 +0200
- updated to 2.5.2 (now defaults to qt6, ready for taglib 2)
mixxx-libdjinterop.patch | 13 ++--
mixxx-msgsl.patch | 26 +++----
mixxx-taglib2.patch | 184 -----------------------------------------------
mixxx.spec | 52 +++++++++++---
4 files changed, 62 insertions(+), 213 deletions(-)
---
diff --git a/mixxx.spec b/mixxx.spec
index 03b1423..dc8676b 100644
--- a/mixxx.spec
+++ b/mixxx.spec
@@ -1,33 +1,33 @@
-# TODO: system shoutidjc >= 2.4.6?
#
# Conditional build:
%bcond_without faad # FAAD AAC audio decoder
%bcond_without ffmpeg # FFmpeg support
%bcond_without hidapi # HID controller support
%bcond_without lv2 # LV2 support
+%bcond_with qt5 # Qt5 instead of Qt6
%bcond_without qtkeychain # secure credentials storage for Live Broadcasting profiles (qt5 only, see below)
-%bcond_with taglib2 # allow Taglib 2 (not fully supported)
%bcond_without upower # UPower battery state support
%bcond_without wavpack # WavPack audio decoder
%define qt5_ver 5.12
+%define qt6_ver 6.2
Summary: Mixxx - DJ tool
Summary(hu.UTF-8): Mixxx - DJ program
Summary(pl.UTF-8): Mixxx - narzędzie dla DJ-ów
Name: mixxx
-Version: 2.4.1
-Release: 2
+Version: 2.5.2
+Release: 1
License: GPL v2+ (code), Apache v2.0 (OpenSans font), Ubuntu Font License v1.0 (Ubuntu fonts)
Group: X11/Applications/Multimedia
Source0: https://github.com/mixxxdj/mixxx/archive/%{version}/%{name}-%{version}.tar.gz
-# Source0-md5: 95d2cc0cb35b88164615a75d9466bc0f
+# Source0-md5: 5d986f81243d2867a139fb28e6cb5e2c
Patch0: %{name}-build-type.patch
-Patch1: %{name}-taglib2.patch
Patch2: %{name}-msgsl.patch
Patch3: %{name}-libdjinterop.patch
URL: https://mixxx.org/
BuildRequires: OpenGL-devel
+%if %{with qt5}
BuildRequires: Qt5Concurrent-devel >= %{qt5_ver}
BuildRequires: Qt5Core-devel >= %{qt5_ver}
BuildRequires: Qt5DBus-devel >= %{qt5_ver}
@@ -37,6 +37,8 @@ BuildRequires: Qt5Network-devel >= %{qt5_ver}
BuildRequires: Qt5OpenGL-devel >= %{qt5_ver}
BuildRequires: Qt5PrintSupport-devel >= %{qt5_ver}
BuildRequires: Qt5Qml-devel >= %{qt5_ver}
+BuildRequires: Qt5Quick-devel >= %{qt5_ver}
+BuildRequires: Qt5Quick-controls2-devel >= %{qt5_ver}
BuildRequires: Qt5Script-devel >= %{qt5_ver}
BuildRequires: Qt5ScriptTools-devel >= %{qt5_ver}
BuildRequires: Qt5Sql-devel >= %{qt5_ver}
@@ -45,6 +47,25 @@ BuildRequires: Qt5Test-devel >= %{qt5_ver}
BuildRequires: Qt5Widgets-devel >= %{qt5_ver}
BuildRequires: Qt5X11Extras-devel >= %{qt5_ver}
BuildRequires: Qt5Xml-devel >= %{qt5_ver}
+%else
+BuildRequires: Qt6Concurrent-devel >= %{qt6_ver}
+BuildRequires: Qt6Core-devel >= %{qt6_ver}
+BuildRequires: Qt6DBus-devel >= %{qt6_ver}
+BuildRequires: Qt6Gui-devel >= %{qt6_ver}
+%{?with_qtkeychain:BuildRequires: Qt6Keychain-devel}
+BuildRequires: Qt6Network-devel >= %{qt6_ver}
+BuildRequires: Qt6OpenGL-devel >= %{qt6_ver}
+BuildRequires: Qt6PrintSupport-devel >= %{qt6_ver}
+BuildRequires: Qt6Qml-devel >= %{qt6_ver}
+BuildRequires: Qt6Quick-devel >= %{qt6_ver}
+BuildRequires: Qt6Qt5Compat-devel >= %{qt6_ver}
+BuildRequires: Qt6ShaderTools-devel >= %{qt6_ver}
+BuildRequires: Qt6Sql-devel >= %{qt6_ver}
+BuildRequires: Qt6Svg-devel >= %{qt6_ver}
+BuildRequires: Qt6Test-devel >= %{qt6_ver}
+BuildRequires: Qt6Widgets-devel >= %{qt6_ver}
+BuildRequires: Qt6Xml-devel >= %{qt6_ver}
+%endif
BuildRequires: cmake >= 3.16
# libavcodec >= 58.35.100 libavformat >= 58.20.100 libavutil >= 56.22.100 libswresample >= 3.3.100
%{?with_ffmpeg:BuildRequires: ffmpeg-devel >= 4.1.9}
@@ -54,15 +75,14 @@ BuildRequires: gtest-devel
%{?with_hidapi:BuildRequires: hidapi-devel >= 0.11.2}
BuildRequires: lame-libs-devel
BuildRequires: libchromaprint-devel
-BuildRequires: libdjinterop-devel >= 0.20.2
+BuildRequires: libdjinterop-devel >= 0.24.3
BuildRequires: libebur128-devel
BuildRequires: libid3tag-devel
BuildRequires: libmad-devel
BuildRequires: libmodplug-devel
BuildRequires: libogg-devel
BuildRequires: libkeyfinder-devel >= 2.2.8
-# TODO: use system package when appropriate version gets released
-#BuildRequires: libshout-idjc-devel >= 2.4.6
+BuildRequires: libshout-idjc-devel >= 2.4.6
BuildRequires: libsndfile-devel
# -std=c++20
BuildRequires: libstdc++-devel >= 6:8
@@ -81,24 +101,32 @@ BuildRequires: portmidi-devel >= 217
BuildRequires: protobuf-devel
BuildRequires: python3 >= 1:3
BuildRequires: rubberband-devel
+%if %{with qt5}
BuildRequires: qt5-build >= %{qt5_ver}
BuildRequires: qt5-linguist >= %{qt5_ver}
+%else
+BuildRequires: qt6-build >= %{qt6_ver}
+BuildRequires: qt6-linguist >= %{qt6_ver}
+BuildRequires: qt6-shadertools >= %{qt6_ver}
+%endif
BuildRequires: rpmbuild(macros) >= 1.605
BuildRequires: sed >= 4.0
BuildRequires: soundtouch-devel >= 2.1.2
BuildRequires: sqlite3-devel >= 3
BuildRequires: taglib-devel >= 1.11
-%{!?with_taglib2:BuildRequires: taglib-devel < 2}
BuildRequires: udev-devel
%{?with_upower:BuildRequires: upower-devel}
%{?with_wavpack:BuildRequires: wavpack-devel}
BuildRequires: xorg-lib-libX11-devel
+BuildRequires: xorg-lib-libxkbcommon-devel >= 0.5.0
# for local djinterop
BuildRequires: zlib-devel >= 1.2.8
Requires: Qt5Sql-sqldriver-sqlite3 >= %{qt5_ver}
%{?with_ffmpeg:Requires: ffmpeg-libs >= 4.1.9}
%{?with_hidapi:Requires: hidapi >= 0.11.2}
+Requires: libdjinterop >= 0.24.3
Requires: libkeyfinder >= 2.2.8
+Requires: libshout-idjc >= 2.4.6
Requires: soundtouch >= 2.1.2
Requires: taglib >= 1.11
Requires: zlib >= 1.2.8
@@ -134,7 +162,6 @@ Podstawowe skórki dla programu Mixxx.
%prep
%setup -q
%patch -P0 -p1
-%{?with_taglib2:%patch -P1 -p1}
%patch -P2 -p1
%patch -P3 -p1
@@ -190,12 +217,14 @@ rm -rf $RPM_BUILD_ROOT
%{_datadir}/mixxx/controllers
%{_datadir}/mixxx/effects
%{_datadir}/mixxx/keyboard
+%{_datadir}/mixxx/qml
%dir %{_datadir}/mixxx/skins
%{_datadir}/mixxx/skins/*.qss
# This is the default skin
%{_datadir}/mixxx/skins/Deere
%dir %{_datadir}/mixxx/translations
%lang(ar) %{_datadir}/mixxx/translations/mixxx_ar.qm
+%lang(ar_DZ) %{_datadir}/mixxx/translations/mixxx_ar_DZ.qm
%lang(ast) %{_datadir}/mixxx/translations/mixxx_ast.qm
%lang(bg) %{_datadir}/mixxx/translations/mixxx_bg.qm
%lang(br) %{_datadir}/mixxx/translations/mixxx_br.qm
@@ -270,6 +299,7 @@ rm -rf $RPM_BUILD_ROOT
%{_desktopdir}/org.mixxx.Mixxx.desktop
%{_iconsdir}/hicolor/*x*/apps/mixxx.png
%{_iconsdir}/hicolor/scalable/apps/mixxx.svg
+%{_iconsdir}/hicolor/scalable/apps/mixxx_ios.svg
%files skins-core
%defattr(644,root,root,755)
diff --git a/mixxx-libdjinterop.patch b/mixxx-libdjinterop.patch
index c788276..4983083 100644
--- a/mixxx-libdjinterop.patch
+++ b/mixxx-libdjinterop.patch
@@ -1,11 +1,14 @@
---- mixxx-2.4.1/CMakeLists.txt.orig 2024-09-28 21:47:06.674846532 +0200
-+++ mixxx-2.4.1/CMakeLists.txt 2024-09-28 22:01:31.953175308 +0200
-@@ -2283,7 +2283,7 @@ if(ENGINEPRIME)
+--- mixxx-2.5.2/CMakeLists.txt.orig 2025-08-29 06:18:22.546245677 +0200
++++ mixxx-2.5.2/CMakeLists.txt 2025-08-29 06:19:12.115896755 +0200
+@@ -2423,9 +2423,9 @@ if(ENGINEPRIME)
# statically. This situation should be reviewed once libdjinterop hits version 1.x.
- set(LIBDJINTEROP_VERSION 0.20.2)
+ set(LIBDJINTEROP_VERSION 0.24.3)
# Look whether an existing installation of libdjinterop matches the required version.
- find_package(DjInterop ${LIBDJINTEROP_VERSION} EXACT CONFIG)
+ find_package(DjInterop ${LIBDJINTEROP_VERSION} CONFIG)
if(NOT DjInterop_FOUND)
- find_package(DjInterop ${LIBDJINTEROP_VERSION} EXACT MODULE)
+- find_package(DjInterop ${LIBDJINTEROP_VERSION} EXACT MODULE)
++ find_package(DjInterop ${LIBDJINTEROP_VERSION} MODULE)
endif()
+
+ if(DjInterop_FOUND)
diff --git a/mixxx-msgsl.patch b/mixxx-msgsl.patch
index 9c0108d..82b02bd 100644
--- a/mixxx-msgsl.patch
+++ b/mixxx-msgsl.patch
@@ -1,20 +1,20 @@
---- mixxx-2.4.1/CMakeLists.txt.orig 2024-05-08 23:05:56.000000000 +0200
-+++ mixxx-2.4.1/CMakeLists.txt 2024-09-25 18:27:13.893167991 +0200
-@@ -1754,7 +1754,7 @@ endif()
- # src/qmldlgpreferencesproxy.h, which is #included from src/qmlapplication.h.
- target_include_directories(mixxx PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/mixxx-lib_autogen/include")
+--- mixxx-2.5.2/CMakeLists.txt.orig 2025-08-29 06:22:49.195412802 +0200
++++ mixxx-2.5.2/CMakeLists.txt 2025-08-29 06:23:33.843291598 +0200
+@@ -1813,7 +1813,7 @@ else()
+ endif()
+
set_target_properties(mixxx-lib PROPERTIES CXX_CLANG_TIDY "${CLANG_TIDY}")
-target_link_libraries(mixxx PRIVATE mixxx-lib mixxx-gitinfostore)
+target_link_libraries(mixxx PRIVATE mixxx-lib mixxx-gitinfostore Microsoft.GSL::GSL)
#
# Installation and Packaging
-@@ -2106,7 +2106,7 @@ add_executable(mixxx-test
- target_precompile_headers(mixxx-test REUSE_FROM mixxx-lib)
- find_package(GTest CONFIG REQUIRED)
- set_target_properties(mixxx-test PROPERTIES AUTOMOC ON)
--target_link_libraries(mixxx-test PRIVATE mixxx-lib mixxx-gitinfostore GTest::gtest GTest::gmock)
-+target_link_libraries(mixxx-test PRIVATE mixxx-lib mixxx-gitinfostore GTest::gtest GTest::gmock Microsoft.GSL::GSL)
+@@ -2232,7 +2232,7 @@ if(BUILD_TESTING)
+
+ target_precompile_headers(mixxx-test REUSE_FROM mixxx-lib)
+ set_target_properties(mixxx-test PROPERTIES AUTOMOC ON)
+- target_link_libraries(mixxx-test PRIVATE mixxx-lib mixxx-gitinfostore GTest::gtest GTest::gmock)
++ target_link_libraries(mixxx-test PRIVATE mixxx-lib mixxx-gitinfostore GTest::gtest GTest::gmock Microsoft.GSL::GSL)
- find_package(benchmark)
- target_link_libraries(mixxx-test PRIVATE benchmark::benchmark)
+ if(BUILD_BENCH)
+ add_compile_definitions(USE_BENCH)
diff --git a/mixxx-taglib2.patch b/mixxx-taglib2.patch
deleted file mode 100644
index 4f976b6..0000000
--- a/mixxx-taglib2.patch
+++ /dev/null
@@ -1,184 +0,0 @@
-From dffb164606ee15b320d8f457e96683aa497682ab Mon Sep 17 00:00:00 2001
-From: Jan Holthuis <jholthuis at mixxx.org>
-Date: Sun, 11 Feb 2024 21:43:28 +0100
-Subject: [PATCH] build: Print a warning instead of aborting build if TagLib
- 2.0 is used
-
----
- CMakeLists.txt | 6 +-----
- 1 file changed, 1 insertion(+), 5 deletions(-)
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index ba6fd58918c..276dcc1f751 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -2951,11 +2951,7 @@ target_link_libraries(mixxx-lib PRIVATE
- find_package(TagLib 1.11 REQUIRED)
- target_link_libraries(mixxx-lib PUBLIC TagLib::TagLib)
- if (NOT TagLib_VERSION VERSION_LESS 2.0.0)
-- message(FATAL_ERROR "Installed Taglib ${TagLib_VERSION} is not supported. Use Version >= 1.11 and < 2.0 and its development headers.")
-- # Dear package maintainer: Do not patch away this fatal error
-- # using taglib 2.0.0 will put user data at risk!!
-- # Mixxx is a complex application that needs to be adapted and tested thoroughly
-- # https://github.com/mixxxdj/mixxx/issues/12708
-+ message(WARNING "Installed Taglib ${TagLib_VERSION} is not supported and might lead to data loss (https://github.com/mixxxdj/mixxx/issues/12708). Use version >= 1.11 and < 2.0 instead.")
- endif()
-
- # Threads
-From ed547fd2b0f9dee98740fcf32c1307a092470322 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Daniel=20Sch=C3=BCrmann?= <daschuer at mixxx.org>
-Date: Tue, 20 Feb 2024 22:59:18 +0100
-Subject: [PATCH 1/3] Add multi value protection for all muti-value tags: (Add
- title album and comment as well)
-
----
- src/track/taglib/trackmetadata_common.cpp | 24 +++++++++++++++--------
- 1 file changed, 16 insertions(+), 8 deletions(-)
-
-diff --git a/src/track/taglib/trackmetadata_common.cpp b/src/track/taglib/trackmetadata_common.cpp
-index 77c84f41bbd..e4609bc0558 100644
---- a/src/track/taglib/trackmetadata_common.cpp
-+++ b/src/track/taglib/trackmetadata_common.cpp
-@@ -274,20 +274,25 @@ void exportTrackMetadataIntoTag(
- WriteTagMask writeMask) {
- DEBUG_ASSERT(pTag); // already validated before
-
-- pTag->setTitle(toTString(trackMetadata.getTrackInfo().getTitle()));
-- pTag->setAlbum(toTString(trackMetadata.getAlbumInfo().getTitle()));
--
- // The mapping of multi-valued fields in TagLib is not bijective.
- // We don't want to overwrite existing values if the corresponding
-- // field has not been modified in Mixxx. This workaround only covers
-- // the most common multi-valued fields.
-+ // field has not been modified in Mixxx.
- //
- // See also: <https://github.com/mixxxdj/mixxx/issues/12587>
-- const auto artist = toTString(trackMetadata.getTrackInfo().getArtist());
-+
-+ const TagLib::String title = toTString(trackMetadata.getTrackInfo().getTitle());
-+ if (title != pTag->title()) {
-+ pTag->setTitle(title);
-+ }
-+ const TagLib::String album = toTString(trackMetadata.getAlbumInfo().getTitle());
-+ if (album != pTag->album()) {
-+ pTag->setAlbum(album);
-+ }
-+ const TagLib::String artist = toTString(trackMetadata.getTrackInfo().getArtist());
- if (artist != pTag->artist()) {
- pTag->setArtist(artist);
- }
-- const auto genre = toTString(trackMetadata.getTrackInfo().getGenre());
-+ const TagLib::String genre = toTString(trackMetadata.getTrackInfo().getGenre());
- if (genre != pTag->genre()) {
- pTag->setGenre(genre);
- }
-@@ -297,7 +302,10 @@ void exportTrackMetadataIntoTag(
- // different purposes, e.g. ID3v2. In this case setting the
- // comment here should be omitted.
- if (0 == (writeMask & WriteTagFlag::OmitComment)) {
-- pTag->setComment(toTString(trackMetadata.getTrackInfo().getComment()));
-+ const TagLib::String comment = toTString(trackMetadata.getTrackInfo().getComment());
-+ if (comment != pTag->comment()) {
-+ pTag->setComment(comment);
-+ }
- }
-
- // Specialized write functions for tags derived from Taglib::Tag might
-
-From c052808ca4b27050e99ce9fab9f0b53e90377eed Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Daniel=20Sch=C3=BCrmann?= <daschuer at mixxx.org>
-Date: Tue, 20 Feb 2024 23:01:18 +0100
-Subject: [PATCH 2/3] Introduce isMultiValueTagEqual() that compares in the
- QString domain to sort out encoding issues.
-
----
- src/track/taglib/trackmetadata_common.cpp | 30 +++++++++++------------
- 1 file changed, 14 insertions(+), 16 deletions(-)
-
-diff --git a/src/track/taglib/trackmetadata_common.cpp b/src/track/taglib/trackmetadata_common.cpp
-index e4609bc0558..fffa9f8170a 100644
---- a/src/track/taglib/trackmetadata_common.cpp
-+++ b/src/track/taglib/trackmetadata_common.cpp
-@@ -268,6 +268,10 @@ void importTrackMetadataFromTag(
- }
- }
-
-+bool isMultiValueTagEqual(const TagLib::String& taglibVal, const QString& mixxxVal) {
-+ return toQString(taglibVal) == mixxxVal;
-+}
-+
- void exportTrackMetadataIntoTag(
- TagLib::Tag* pTag,
- const TrackMetadata& trackMetadata,
-@@ -279,22 +283,17 @@ void exportTrackMetadataIntoTag(
- // field has not been modified in Mixxx.
- //
- // See also: <https://github.com/mixxxdj/mixxx/issues/12587>
--
-- const TagLib::String title = toTString(trackMetadata.getTrackInfo().getTitle());
-- if (title != pTag->title()) {
-- pTag->setTitle(title);
-+ if (!isMultiValueTagEqual(pTag->title(), trackMetadata.getTrackInfo().getTitle())) {
-+ pTag->setTitle(toTString(trackMetadata.getTrackInfo().getTitle()));
- }
-- const TagLib::String album = toTString(trackMetadata.getAlbumInfo().getTitle());
-- if (album != pTag->album()) {
-- pTag->setAlbum(album);
-+ if (!isMultiValueTagEqual(pTag->album(), trackMetadata.getAlbumInfo().getTitle())) {
-+ pTag->setAlbum(toTString(trackMetadata.getAlbumInfo().getTitle()));
- }
-- const TagLib::String artist = toTString(trackMetadata.getTrackInfo().getArtist());
-- if (artist != pTag->artist()) {
-- pTag->setArtist(artist);
-+ if (!isMultiValueTagEqual(pTag->artist(), trackMetadata.getTrackInfo().getArtist())) {
-+ pTag->setArtist(toTString(trackMetadata.getTrackInfo().getArtist()));
- }
-- const TagLib::String genre = toTString(trackMetadata.getTrackInfo().getGenre());
-- if (genre != pTag->genre()) {
-- pTag->setGenre(genre);
-+ if (!isMultiValueTagEqual(pTag->genre(), trackMetadata.getTrackInfo().getGenre())) {
-+ pTag->setGenre(toTString(trackMetadata.getTrackInfo().getGenre()));
- }
-
- // Using setComment() from TagLib::Tag might have undesirable
-@@ -302,9 +301,8 @@ void exportTrackMetadataIntoTag(
- // different purposes, e.g. ID3v2. In this case setting the
- // comment here should be omitted.
- if (0 == (writeMask & WriteTagFlag::OmitComment)) {
-- const TagLib::String comment = toTString(trackMetadata.getTrackInfo().getComment());
-- if (comment != pTag->comment()) {
-- pTag->setComment(comment);
-+ if (!isMultiValueTagEqual(pTag->comment(), trackMetadata.getTrackInfo().getComment())) {
-+ pTag->setComment(toTString(trackMetadata.getTrackInfo().getComment()));
- }
- }
-
-
-From c4b3a7e91c56cea7f9bd1c18c1fe01d9da705144 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Daniel=20Sch=C3=BCrmann?= <daschuer at mixxx.org>
-Date: Wed, 21 Feb 2024 00:00:06 +0100
-Subject: [PATCH 3/3] Ignore separator " / " when comparing multi value tags
-
----
- src/track/taglib/trackmetadata_common.cpp | 8 ++++++--
- 1 file changed, 6 insertions(+), 2 deletions(-)
-
-diff --git a/src/track/taglib/trackmetadata_common.cpp b/src/track/taglib/trackmetadata_common.cpp
-index fffa9f8170a..62bb583f5a2 100644
---- a/src/track/taglib/trackmetadata_common.cpp
-+++ b/src/track/taglib/trackmetadata_common.cpp
-@@ -268,8 +268,12 @@ void importTrackMetadataFromTag(
- }
- }
-
--bool isMultiValueTagEqual(const TagLib::String& taglibVal, const QString& mixxxVal) {
-- return toQString(taglibVal) == mixxxVal;
-+bool isMultiValueTagEqual(const TagLib::String& taglibVal, QString mixxxVal) {
-+ // Taglib 2 uses " / " instead of " " as a multi value separator.
-+ // We may have read or write with either TagLib 1 or 2.
-+ QString taglibValStripped = toQString(taglibVal).remove(" /");
-+ QString mixxxValStripped = mixxxVal.remove(" /");
-+ return taglibValStripped == mixxxValStripped;
- }
-
- void exportTrackMetadataIntoTag(
================================================================
---- gitweb:
http://git.pld-linux.org/gitweb.cgi/packages/mixxx.git/commitdiff/85054e3a834a78180789ce6d1fad65c00fc6469c
More information about the pld-cvs-commit
mailing list