commit:     5184a59aa626c6bda8eee053f633354595687596
Author:     Nicolas PARLANT <nicolas.parlant <AT> parhuet <DOT> fr>
AuthorDate: Mon Jan 20 13:08:26 2025 +0000
Commit:     Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
CommitDate: Mon Feb 10 20:41:50 2025 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=5184a59a

media-sound/mixxx: update 9999 qt6, tests

*qt6 port

*eclass:
add flag-o-matic/toolchain-funcs to prevent ld error with lto

*deps:
add dev-libs/hidapi (required even with HID=OFF)
add dev-qt/qtbase:6[icu] for utf16 (test too)
add dev-util/spirv-tools for qsb (bdep)
add media-libs/libid3tag for mp3 support
add media-sound/lame, required
del sci-libs/fftw, only required with static keyfinder
del virtual/opengl, redundant
del media-libs/vamp-plugin-sdk is no more a dep (2.3.0)
del media-libs/libshout, use internal libshout-idjc instead

*deps benchmark:
add dev-cpp/benchmark
add dev-cpp/gtest
add dev-util/gperftools

*useflag:
add benchmark midi modplug test upower
del doc because no bdep

Closes: https://bugs.gentoo.org/914764
Closes: https://bugs.gentoo.org/822357
Signed-off-by: Nicolas PARLANT <nicolas.parlant <AT> parhuet.fr>
Signed-off-by: Andreas Sturmlechner <asturm <AT> gentoo.org>

 .../mixxx-2.5.0-fix-strict-aliasing-kaitai.patch   | 115 +++++++++++++++
 media-sound/mixxx/files/mixxx-9999-docs.patch      |  28 ----
 media-sound/mixxx/metadata.xml                     |   6 +-
 media-sound/mixxx/mixxx-9999.ebuild                | 159 +++++++++++++--------
 4 files changed, 217 insertions(+), 91 deletions(-)

diff --git 
a/media-sound/mixxx/files/mixxx-2.5.0-fix-strict-aliasing-kaitai.patch 
b/media-sound/mixxx/files/mixxx-2.5.0-fix-strict-aliasing-kaitai.patch
new file mode 100644
index 000000000000..2f06bbbb9c78
--- /dev/null
+++ b/media-sound/mixxx/files/mixxx-2.5.0-fix-strict-aliasing-kaitai.patch
@@ -0,0 +1,115 @@
+https://github.com/kaitai-io/kaitai_struct_cpp_stl_runtime/commit/c01f5300159a698b6e706caba21e1965d5fc94a7.patch
+diff --git a/lib/kaitai/kaitai/kaitaistream.cpp 
b/lib/kaitai/kaitai/kaitaistream.cpp
+index bd914c3..d3b2fcd 100644
+--- a/lib/kaitai/kaitai/kaitaistream.cpp
++++ b/lib/kaitai/kaitai/kaitaistream.cpp
+@@ -32,10 +32,57 @@
+ #include <byteswap.h>
+ #endif
+ 
++#include <cstring> // std::memcpy
+ #include <iostream>
+ #include <vector>
+ #include <stdexcept>
+ 
++#ifdef KAITAI_STREAM_H_CPP11_SUPPORT
++#include <type_traits> // std::enable_if, std::is_trivially_copyable, 
std::is_trivially_constructible
++
++// Taken from 
https://en.cppreference.com/w/cpp/numeric/bit_cast#Possible_implementation
++// (only adjusted for C++11 compatibility)
++template<class To, class From>
++typename std::enable_if<
++        sizeof(To) == sizeof(From) &&
++        std::is_trivially_copyable<From>::value &&
++        std::is_trivially_copyable<To>::value,
++        To
++>::type
++// constexpr support needs compiler magic
++static bit_cast(const From &src) noexcept
++{
++    static_assert(std::is_trivially_constructible<To>::value,
++                  "This implementation additionally requires "
++                  "destination type to be trivially constructible");
++
++    To dst;
++    std::memcpy(&dst, &src, sizeof(To));
++    return dst;
++}
++#else
++// The following implementation of `StaticAssert` was inspired by 
https://stackoverflow.com/a/6765840
++
++// empty default template
++template <bool b>
++struct StaticAssert;
++
++// template specialized on true
++template <>
++struct StaticAssert<true> {};
++
++template<class To, class From>
++To
++static bit_cast(const From &src)
++{
++    StaticAssert<sizeof(To) == sizeof(From)>();
++
++    To dst;
++    std::memcpy(&dst, &src, sizeof(To));
++    return dst;
++}
++#endif
++
+ kaitai::kstream::kstream(std::istream *io) {
+     m_io = io;
+     init();
+@@ -263,7 +310,7 @@ float kaitai::kstream::read_f4be() {
+ #if __BYTE_ORDER == __LITTLE_ENDIAN
+     t = bswap_32(t);
+ #endif
+-    return reinterpret_cast<float &>(t);
++    return bit_cast<float>(t);
+ }
+ 
+ double kaitai::kstream::read_f8be() {
+@@ -272,7 +319,7 @@ double kaitai::kstream::read_f8be() {
+ #if __BYTE_ORDER == __LITTLE_ENDIAN
+     t = bswap_64(t);
+ #endif
+-    return reinterpret_cast<double &>(t);
++    return bit_cast<double>(t);
+ }
+ 
+ // ........................................................................
+@@ -285,7 +332,7 @@ float kaitai::kstream::read_f4le() {
+ #if __BYTE_ORDER == __BIG_ENDIAN
+     t = bswap_32(t);
+ #endif
+-    return reinterpret_cast<float &>(t);
++    return bit_cast<float>(t);
+ }
+ 
+ double kaitai::kstream::read_f8le() {
+@@ -294,7 +341,7 @@ double kaitai::kstream::read_f8le() {
+ #if __BYTE_ORDER == __BIG_ENDIAN
+     t = bswap_64(t);
+ #endif
+-    return reinterpret_cast<double &>(t);
++    return bit_cast<double>(t);
+ }
+ 
+ // ========================================================================
+diff --git a/lib/kaitai/kaitai/kaitaistream.h 
b/lib/kaitai/kaitai/kaitaistream.h
+index c8b5a3a..d58ae8e 100644
+--- a/lib/kaitai/kaitai/kaitaistream.h
++++ b/lib/kaitai/kaitai/kaitaistream.h
+@@ -4,6 +4,11 @@
+ // Kaitai Struct runtime API version: x.y.z = 'xxxyyyzzz' decimal
+ #define KAITAI_STRUCT_VERSION 11000L
+ 
++// check for C++11 support - https://stackoverflow.com/a/40512515
++#if __cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1900)
++#define KAITAI_STREAM_H_CPP11_SUPPORT
++#endif
++
+ #include <istream>
+ #include <sstream>
+ #include <stdint.h>

diff --git a/media-sound/mixxx/files/mixxx-9999-docs.patch 
b/media-sound/mixxx/files/mixxx-9999-docs.patch
deleted file mode 100644
index 0ac74959df2e..000000000000
--- a/media-sound/mixxx/files/mixxx-9999-docs.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index e35d8dd4e1..798179955c 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -1504,23 +1504,6 @@ install(
-     "${MIXXX_INSTALL_LICENSEDIR}"
- )
-
--# Documentation
--install(
--  FILES
--    "${CMAKE_CURRENT_SOURCE_DIR}/README.md"
--    "${CMAKE_CURRENT_SOURCE_DIR}/res/Mixxx-Keyboard-Shortcuts.pdf"
--  DESTINATION
--    "${MIXXX_INSTALL_DOCDIR}"
--)
--if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/res/Mixxx-Manual.pdf")
--  install(
--    FILES
--      "${CMAKE_CURRENT_SOURCE_DIR}/res/Mixxx-Manual.pdf"
--    DESTINATION
--      "${MIXXX_INSTALL_DOCDIR}"
--  )
--endif()
--
- # Additional Linux-only files
- if(UNIX AND NOT APPLE)
-   # .desktop file for KDE/GNOME menu

diff --git a/media-sound/mixxx/metadata.xml b/media-sound/mixxx/metadata.xml
index 38deddc8020f..8b62b2d0884f 100644
--- a/media-sound/mixxx/metadata.xml
+++ b/media-sound/mixxx/metadata.xml
@@ -6,15 +6,19 @@
                <name>Gentoo ProAudio Project</name>
        </maintainer>
        <use>
+               <flag name="benchmark">Build and install benchmark binary: 
mixxx-test --benchmark</flag>
                <flag name="hid">Enable HID controller support</flag>
                <flag name="keyfinder">Enable musical key detection support via 
<pkg>media-libs/libkeyfinder</pkg></flag>
-               <flag name="modplug">Add libmodplug support</flag>
                <flag name="lv2">Add support for Ladspa V2 via 
<pkg>media-libs/lilv</pkg></flag>
+               <flag name="midi">Enable MIDI support via 
<pkg>media-libs/portmidi</pkg></flag>
+               <flag name="modplug">Add libmodplug support</flag>
                <flag name="qtkeychain">Enable Secure credential storage 
support via <pkg>dev-libs/qtkeychain</pkg></flag>
+               <flag name="rubberband">Enable audio pitch-shifting via 
<pkg>media-libs/rubberband</pkg></flag>
                <flag name="shout">Enable broadcasting support via 
<pkg>media-libs/libshout</pkg></flag>
        </use>
        <upstream>
                <remote-id type="sourceforge">mixxx</remote-id>
                <remote-id type="github">mixxxdj/mixxx</remote-id>
+               <doc>https://downloads.mixxx.org/manual/</doc>
        </upstream>
 </pkgmetadata>

diff --git a/media-sound/mixxx/mixxx-9999.ebuild 
b/media-sound/mixxx/mixxx-9999.ebuild
index cf915aaeb49f..f443853c094a 100644
--- a/media-sound/mixxx/mixxx-9999.ebuild
+++ b/media-sound/mixxx/mixxx-9999.ebuild
@@ -3,7 +3,7 @@
 
 EAPI=8
 
-inherit cmake xdg udev
+inherit cmake flag-o-matic toolchain-funcs udev xdg
 
 DESCRIPTION="Advanced Digital DJ tool based on Qt"
 HOMEPAGE="https://mixxx.org/";
@@ -14,119 +14,154 @@ if [[ ${PV} == *9999 ]] ; then
        fi
        EGIT_REPO_URI="https://github.com/mixxxdj/${PN}.git";
 else
-       SRC_URI="https://github.com/mixxxdj/${PN}/archive/release-${PV}.tar.gz 
-> ${P}.tar.gz"
-       S="${WORKDIR}/${PN}-release-${PV}"
-       KEYWORDS="~amd64 ~x86"
+       SRC_URI="https://github.com/mixxxdj/${PN}/archive/${PV}.tar.gz -> 
${P}.tar.gz"
+       KEYWORDS="~amd64 ~arm64 ~x86"
 fi
 
 LICENSE="GPL-2"
 SLOT="0"
-IUSE="aac doc ffmpeg hid keyfinder lv2 mp3 mp4 opus qtkeychain shout wavpack"
+IUSE="aac benchmark ffmpeg keyfinder lv2 midi modplug mp3 mp4 opus"
+IUSE+=" qtkeychain rubberband shout test upower wavpack"
+REQUIRED_USE="
+       benchmark? ( test )
+       qtkeychain? ( shout )
+       test? ( aac ffmpeg midi mp3 opus rubberband )
+"
+RESTRICT="!test? ( test )"
 
 RDEPEND="
-       dev-db/sqlite
-       dev-libs/glib:2
+       dev-db/sqlite:3
+       dev-libs/hidapi
        dev-libs/protobuf:=
-       dev-qt/qtconcurrent:5
-       dev-qt/qtcore:5
-       dev-qt/qtdbus:5
-       dev-qt/qtgui:5
-       dev-qt/qtnetwork:5
-       dev-qt/qtopengl:5
-       dev-qt/qtscript:5[scripttools]
-       dev-qt/qtsql:5
-       dev-qt/qtsvg:5
-       dev-qt/qtwidgets:5
-       dev-qt/qtx11extras:5
-       dev-qt/qtxml:5
-       media-libs/chromaprint
+       dev-qt/qt5compat:6[qml]
+       
dev-qt/qtbase:6[concurrent,dbus,gui,icu,network,opengl,sql,sqlite,ssl,widgets,xml,X]
+       dev-qt/qtdeclarative:6
+       dev-qt/qtshadertools:6
+       dev-qt/qtsvg:6
+       media-libs/chromaprint:=
        media-libs/flac:=
-       media-libs/libebur128
-       media-libs/libid3tag:=
+       media-libs/libebur128:=
+       media-libs/libglvnd[X]
        media-libs/libogg
        media-libs/libsndfile
-       media-libs/libsoundtouch
+       media-libs/libsoundtouch:=
        media-libs/libvorbis
        media-libs/portaudio
-       media-libs/portmidi
-       media-libs/rubberband
        <media-libs/taglib-2
-       media-libs/vamp-plugin-sdk
-       sci-libs/fftw:3.0=
-       sys-power/upower
+       media-sound/lame
        virtual/glu
        virtual/libusb:1
-       virtual/opengl
        virtual/udev
        x11-libs/libX11
        aac? (
                media-libs/faad2
                media-libs/libmp4v2
        )
+       benchmark? (
+               dev-cpp/benchmark:=
+               dev-cpp/gtest
+               dev-util/google-perftools:=
+       )
        ffmpeg? ( media-video/ffmpeg:= )
-       hid? ( dev-libs/hidapi )
        keyfinder? ( media-libs/libkeyfinder )
        lv2? ( media-libs/lilv )
-       mp3? ( media-libs/libmad )
-       mp4? ( media-libs/libmp4v2:= )
-       opus? ( media-libs/opusfile )
-       qtkeychain? ( dev-libs/qtkeychain:=[qt5(+)] )
-       shout? ( >=media-libs/libshout-2.4.5 )
+       midi? ( media-libs/portmidi )
+       modplug? ( media-libs/libmodplug )
+       mp3? (
+               media-libs/libid3tag:=
+               media-libs/libmad
+       )
+       mp4? ( media-libs/libmp4v2 )
+       opus? (
+               media-libs/opus
+               media-libs/opusfile
+       )
+       qtkeychain? ( >=dev-libs/qtkeychain-0.14.2:=[qt6(+)] )
+       rubberband? ( media-libs/rubberband:= )
+       shout? ( dev-libs/openssl:= )
+       upower? (
+               dev-libs/glib:2
+               sys-power/upower:=
+       )
        wavpack? ( media-sound/wavpack )
 "
 DEPEND="${RDEPEND}
        dev-cpp/ms-gsl
+       test? ( dev-cpp/gtest )
 "
 BDEPEND="
-       dev-qt/qttest:5
-       dev-qt/qtxmlpatterns:5
+       dev-util/spirv-tools
        virtual/pkgconfig
 "
 
 PATCHES=(
-       "${FILESDIR}"/${PN}-9999-docs.patch
+       # Fix strict-aliasing violations in vendored katai_cpp_stl_runtime
+       # 
https://github.com/kaitai-io/kaitai_struct_cpp_stl_runtime/commit/c01f530.patch
+       "${FILESDIR}"/${PN}-2.5.0-fix-strict-aliasing-kaitai.patch
+)
+
+CMAKE_SKIP_TESTS=(
+       # need HID controller
+       LegacyControllerMappingValidationTest.HidMappingsValid
+       # randomly fails
+       # https://github.com/mixxxdj/mixxx/issues/12554
+       EngineBufferE2ETest
 )
 
 src_configure() {
+       # prevent ld error as package builds static libs.
+       tc-is-lto && append-flags $(test-flags -ffat-lto-objects)
+
        local mycmakeargs=(
-               -DFAAD="$(usex aac on off)"
-               -DFFMPEG="$(usex ffmpeg on off)"
-               -DHID="$(usex hid on off)"
-               -DLILV="$(usex lv2 on off)"
-               -DMAD="$(usex mp3 on off)"
-               -DOPTIMIZE="off"
-               -DCCACHE_SUPPORT="off"
-               -DOPUS="$(usex opus on off)"
-               -DBROADCAST="$(usex shout on off)"
-               -DVINYLCONTROL="on"
+               -DBATTERY="$(usex upower)"
+               -DBROADCAST="$(usex shout)"
+               -DBUILD_SHARED_LIBS=ON
+               -DBUILD_TESTING="$(usex test)"
+               -DBUILD_BENCH="$(usex benchmark)"
+               # prevent duplicate call
+               -DCCACHE_SUPPORT=OFF
+               -DENGINEPRIME=OFF
+               -DFAAD="$(usex aac)"
+               -DFFMPEG="$(usex ffmpeg)"
+               -DGPERFTOOLS="$(usex benchmark)"
+               -DGPERFTOOLSPROFILER="$(usex benchmark)"
+               -DHID=ON
                -DINSTALL_USER_UDEV_RULES=OFF
-               -DWAVPACK="$(usex wavpack on off)"
-               -DQTKEYCHAIN="$(usex qtkeychain on off)"
-               -DKEYFINDER="$(usex keyfinder on off)"
-               -DDOWNLOAD_MANUAL=OFF
-               -DBUILD_SHARED_LIBS=OFF
+               -DKEYFINDER="$(usex keyfinder)"
+               -DLILV="$(usex lv2)"
+               -DMAD="$(usex mp3)"
+               -DMODPLUG="$(usex modplug)"
+               -DOPTIMIZE=OFF
+               -DOPUS="$(usex opus)"
+               -DPORTMIDI="$(usex midi)"
+               -DQML=ON
+               -DQTKEYCHAIN="$(usex qtkeychain)"
+               -DRUBBERBAND="$(usex rubberband)"
+               -DVINYLCONTROL=ON
+               -DWAVPACK="$(usex wavpack)"
        )
 
-       if [[ ${PV} == 9999 ]] ; then
-               mycmakeargs+=(
-                       -DENGINEPRIME="OFF"
-               )
-       fi
        cmake_src_configure
 }
 
 src_install() {
        cmake_src_install
+       use benchmark && dobin "${BUILD_DIR}"/mixxx-test
        udev_newrules "${S}"/res/linux/mixxx-usb-uaccess.rules 
69-mixxx-usb-uaccess.rules
-
-       if use doc ; then
-               dodoc README res/Mixxx-Keyboard-Shortcuts.pdf
-       fi
 }
 
 pkg_postinst() {
        xdg_pkg_postinst
        udev_reload
+
+       elog "Manuals are no longer part of the package."
+       elog "Please refer to https://downloads.mixxx.org/manual/ for 
up-to-date manuals."
+       if use benchmark; then
+               elog ""
+               elog "Launch benchmark : ${EROOT}/usr/bin/mixxx-test 
--benchmark"
+               elog "Launch Unittests : ${EROOT}/usr/bin/mixxx-test"
+               elog "Some test suites may not be available without source 
files."
+       fi
 }
 
 pkg_postrm() {

Reply via email to