commit: 539b05c45b2d0f5800ae69e2e0865e0b9dd64d30 Author: Nicolas PARLANT <nicolas.parlant <AT> parhuet <DOT> fr> AuthorDate: Tue Jan 21 16:41:39 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=539b05c4
media-sound/mixxx: add 2.5.0 sync with live patch for tests/benchmark Bug: https://bugs.gentoo.org/899564 Signed-off-by: Nicolas PARLANT <nicolas.parlant <AT> parhuet.fr> Closes: https://github.com/gentoo/gentoo/pull/40226 Signed-off-by: Andreas Sturmlechner <asturm <AT> gentoo.org> media-sound/mixxx/Manifest | 1 + media-sound/mixxx/files/mixxx-2.5.0-tests.patch | 444 ++++++++++++++++++++++++ media-sound/mixxx/mixxx-2.5.0.ebuild | 172 +++++++++ 3 files changed, 617 insertions(+) diff --git a/media-sound/mixxx/Manifest b/media-sound/mixxx/Manifest index 4ed0e4c162a6..39003609bcc1 100644 --- a/media-sound/mixxx/Manifest +++ b/media-sound/mixxx/Manifest @@ -1,4 +1,5 @@ DIST mixxx-2.3.6.tar.gz 41285084 BLAKE2B 35bedb5f41a56577bc59411ca979e3e780c1da2420bc0a7ad98d998c89f8c272202ba42e8b8089904ca8e1a1b6ac5155d08d556538245ce3242b4ea5a670e6d2 SHA512 a92c2c92dc7619ac135d940f23ffdc101c528eca6322517805afb9eb48a84c6339cefb88b96bdac6ffb23967c2f93f621daf3e98bfecbf7f3fe7626ddcec4398 +DIST mixxx-2.5.0.tar.gz 39580922 BLAKE2B e5c5aa02a4b13228857eb620ad174144562d7b4675a40565fda1e641138e0e65dbb2bbe8c7fb32ead242a5bdf8581368ea604c93afbfc5c991ac92065e7bdae7 SHA512 ee3c682d40267358025aba5bfdc378fee1cb6691dc899280132f7e69d315b9ce3d8568ca182752bac96a38310c2f2d71ddc80eea4448b8b32bf6ec6a61a9d608 DIST mixxx-manual-2.3-ca.pdf 34083768 BLAKE2B 0572da067016d6fd1a0e955cfa9daad319e633357532bad1143333a277d3dee1876709447ecfb954b5294f5fd176af229884e11a8e2fd40d03c12a6cf80bf01c SHA512 965f2f344bfa57531974362de889a92bb8b3024e527158f6c1819e285f70078762e958f7805ff1f833e7310646925cb8120eb3010f8600aa2cd21b2266a9333b DIST mixxx-manual-2.3-cs.pdf 8358958 BLAKE2B de00e08468fed15670751b0997759af0eca71b041d0366ad0e8cf2297fe27368eb6340a3f109b3f992a6f01a99f0d04ba7962c983756cdca2121bf9ca025aa76 SHA512 648eedde674155094b4fa9605422032e71427c95580ffe3f01c8d41a26495bd9bd2d8d7dff38e99bdfbba3a46aee9ca6a6e1c9327b8d1d503310e4c669755068 DIST mixxx-manual-2.3-de.pdf 34069018 BLAKE2B bdcc970d37e43c2f1244aa1f03bc07287581711e534419caada3aabbc585e3006ec489e752142b5b50e526646d3d5431e0ec5924b9d6b31a92de4e7cc7efcc86 SHA512 fbbf27c4b898f856e61301bd1f26a3523bb97c133d96c8d94f1267c15ef63aa03313c18ebec62d4380c423c3896067ed1cedccbc775e5abc6d14e1baf8b668fc diff --git a/media-sound/mixxx/files/mixxx-2.5.0-tests.patch b/media-sound/mixxx/files/mixxx-2.5.0-tests.patch new file mode 100644 index 000000000000..05c0a9924991 --- /dev/null +++ b/media-sound/mixxx/files/mixxx-2.5.0-tests.patch @@ -0,0 +1,444 @@ +https://github.com/mixxxdj/mixxx/pull/14269.patch +From 78a45819563ff4ff49e8806c49d8a680a9481b0b Mon Sep 17 00:00:00 2001 +From: Nicolas PARLANT <[email protected]> +Date: Fri, 31 Jan 2025 16:28:10 +0000 +Subject: [PATCH 1/2] Building without tests-tools + +Today, we can't build mixxx without links to gtest/gperftools/benchmark + +This PR allows building only mixxx and mixxx-lib targets without +tests-tools. + +Two common cmake-definitions are added : +* BUILD_TESTING +* BUILD_BENCH + +And one compile definition for test.main.cpp : +* USE_BENCH + +This is helpful for packaging (gentoo here). + +The negative effect is sorting of tests source files as soon +as they are called by mixxx-benchmark target. +--- + CMakeLists.txt | 344 +++++++++++++++++++++++++++---------------------- + 1 file changed, 193 insertions(+), 151 deletions(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index a0c12a0f267..89abbdfc6d4 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -2061,156 +2061,194 @@ endif() + # Tests + # + +-add_executable(mixxx-test +- src/test/analyserwaveformtest.cpp +- src/test/analyzersilence_test.cpp +- src/test/audiotaperpot_test.cpp +- src/test/autodjprocessor_test.cpp +- src/test/beatgridtest.cpp +- src/test/beatmaptest.cpp +- src/test/beatstest.cpp +- src/test/beatstranslatetest.cpp +- src/test/bpmtest.cpp +- src/test/bpmcontrol_test.cpp +- src/test/broadcastprofile_test.cpp +- src/test/broadcastsettings_test.cpp +- src/test/cache_test.cpp +- src/test/channelhandle_test.cpp +- src/test/chrono_clock_resolution_test.cpp +- src/test/colorconfig_test.cpp +- src/test/colormapperjsproxy_test.cpp +- src/test/colorpalette_test.cpp +- src/test/configobject_test.cpp +- src/test/controller_mapping_validation_test.cpp +- src/test/controller_mapping_settings_test.cpp +- src/test/controllers/controller_columnid_regression_test.cpp +- src/test/controllerscriptenginelegacy_test.cpp +- src/test/controlobjecttest.cpp +- src/test/controlobjectaliastest.cpp +- src/test/controlobjectscripttest.cpp +- src/test/controlpotmetertest.cpp +- src/test/coreservicestest.cpp +- src/test/coverartcache_test.cpp +- src/test/coverartutils_test.cpp +- src/test/cratestorage_test.cpp +- src/test/cue_test.cpp +- src/test/cuecontrol_test.cpp +- src/test/dbconnectionpool_test.cpp +- src/test/dbidtest.cpp +- src/test/directorydaotest.cpp +- src/test/duration_test.cpp +- src/test/durationutiltest.cpp +- #TODO: write useful tests for refactored effects system +- #src/test/effectchainslottest.cpp +- src/test/enginebufferscalelineartest.cpp +- src/test/enginebuffertest.cpp +- src/test/engineeffectsdelay_test.cpp +- src/test/enginefilterbiquadtest.cpp +- src/test/enginemixertest.cpp +- src/test/enginemicrophonetest.cpp +- src/test/enginesynctest.cpp +- src/test/fileinfo_test.cpp +- src/test/frametest.cpp +- src/test/globaltrackcache_test.cpp +- src/test/hotcuecontrol_test.cpp +- src/test/imageutils_test.cpp +- src/test/indexrange_test.cpp +- src/test/itunesxmlimportertest.cpp +- src/test/keyfactorytest.cpp +- src/test/keyutilstest.cpp +- src/test/lcstest.cpp +- src/test/learningutilstest.cpp +- src/test/libraryscannertest.cpp +- src/test/librarytest.cpp +- src/test/looping_control_test.cpp +- src/test/main.cpp +- src/test/mathutiltest.cpp +- src/test/metadatatest.cpp +- #TODO: make this build again +- #src/test/metaknob_link_test.cpp +- src/test/midicontrollertest.cpp +- src/test/mixxxtest.cpp +- src/test/mock_networkaccessmanager.cpp +- src/test/movinginterquartilemean_test.cpp +- src/test/musicbrainzrecordingstasktest.cpp +- src/test/nativeeffects_test.cpp +- src/test/performancetimer_test.cpp +- src/test/playcountertest.cpp +- src/test/playermanagertest.cpp +- src/test/playlisttest.cpp +- src/test/portmidicontroller_test.cpp +- src/test/portmidienumeratortest.cpp +- src/test/queryutiltest.cpp +- src/test/rangelist_test.cpp +- src/test/readaheadmanager_test.cpp +- src/test/replaygaintest.cpp +- src/test/rescalertest.cpp +- src/test/rgbcolor_test.cpp +- src/test/ringdelaybuffer_test.cpp +- src/test/samplebuffertest.cpp +- src/test/sampleutiltest.cpp +- src/test/schemamanager_test.cpp +- src/test/searchqueryparsertest.cpp +- src/test/seratobeatgridtest.cpp +- src/test/seratomarkerstest.cpp +- src/test/seratomarkers2test.cpp +- src/test/seratotagstest.cpp +- src/test/signalpathtest.cpp +- src/test/skincontext_test.cpp +- src/test/softtakeover_test.cpp +- src/test/soundproxy_test.cpp +- src/test/soundsourceproviderregistrytest.cpp +- src/test/sqliteliketest.cpp +- src/test/synccontroltest.cpp +- src/test/synctrackmetadatatest.cpp +- src/test/tableview_test.cpp +- src/test/taglibtest.cpp +- src/test/trackdao_test.cpp +- src/test/trackexport_test.cpp +- src/test/trackmetadata_test.cpp +- src/test/trackmetadataexport_test.cpp +- src/test/tracknumberstest.cpp +- src/test/trackreftest.cpp +- src/test/trackupdate_test.cpp +- src/test/uuid_test.cpp +- src/test/wbatterytest.cpp +- src/test/wpushbutton_test.cpp +- src/test/wwidgetstack_test.cpp +- src/util/moc_included_test.cpp +-) +-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) ++find_package(GTest CONFIG) ++default_option(BUILD_TESTING "Build with Unittests" "GTest_FOUND") ++if(BUILD_TESTING) ++ if(GTest_FOUND) ++ message(STATUS "Found GTest: Unittests enabled") ++ else() ++ message(FATAL_ERROR "GTest: not found") ++ endif() ++endif() + + find_package(benchmark) +-target_link_libraries(mixxx-test PRIVATE benchmark::benchmark) +- +-# Test Suite +-include(CTest) +-include(GoogleTest) +-enable_testing() +-gtest_add_tests( +- TARGET mixxx-test +- EXTRA_ARGS --logLevel info +- WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" +- TEST_LIST testsuite +-) +-if (NOT WIN32) +- # Default to offscreen rendering during tests. +- # This is required if the build system like Fedora koji/mock does not +- # allow to pass environment variables into the ctest macro expansion. +- set_tests_properties(${testsuite} PROPERTIES ENVIRONMENT "QT_QPA_PLATFORM=offscreen") +-endif() ++default_option(BUILD_BENCH "Build mixxx-benchmark" "benchmark_FOUND") ++if(BUILD_BENCH AND BUILD_TESTING) ++ if(benchmark_FOUND) ++ message(STATUS "Found google-benchmark: mixxx-benchmark enabled") ++ else() ++ message(FATAL_ERROR "google-benchmark: not found") ++ endif() ++elseif(BUILD_BENCH AND NOT BUILD_TESTING) ++ message(FATAL_ERROR "Benchmark needs Unittests (-DBUILD_TESTING=ON)") ++endif() ++ ++if(BUILD_TESTING) ++ set( ++ src-mixxx-test ++ src/test/analyserwaveformtest.cpp ++ src/test/analyzersilence_test.cpp ++ src/test/audiotaperpot_test.cpp ++ src/test/autodjprocessor_test.cpp ++ src/test/beatgridtest.cpp ++ src/test/beatmaptest.cpp ++ src/test/beatstest.cpp ++ src/test/beatstranslatetest.cpp ++ src/test/bpmtest.cpp ++ src/test/bpmcontrol_test.cpp ++ src/test/broadcastprofile_test.cpp ++ src/test/broadcastsettings_test.cpp ++ src/test/cache_test.cpp ++ src/test/channelhandle_test.cpp ++ src/test/chrono_clock_resolution_test.cpp ++ src/test/colorconfig_test.cpp ++ src/test/colormapperjsproxy_test.cpp ++ src/test/colorpalette_test.cpp ++ src/test/configobject_test.cpp ++ src/test/controller_mapping_validation_test.cpp ++ src/test/controller_mapping_settings_test.cpp ++ src/test/controllers/controller_columnid_regression_test.cpp ++ src/test/controllerscriptenginelegacy_test.cpp ++ src/test/controlobjecttest.cpp ++ src/test/controlobjectaliastest.cpp ++ src/test/controlobjectscripttest.cpp ++ src/test/controlpotmetertest.cpp ++ src/test/coreservicestest.cpp ++ src/test/coverartcache_test.cpp ++ src/test/coverartutils_test.cpp ++ src/test/cratestorage_test.cpp ++ src/test/cue_test.cpp ++ src/test/cuecontrol_test.cpp ++ src/test/dbconnectionpool_test.cpp ++ src/test/dbidtest.cpp ++ src/test/directorydaotest.cpp ++ src/test/duration_test.cpp ++ src/test/durationutiltest.cpp ++ #TODO: write useful tests for refactored effects system ++ #src/test/effectchainslottest.cpp ++ src/test/enginebufferscalelineartest.cpp ++ src/test/enginebuffertest.cpp ++ src/test/enginefilterbiquadtest.cpp ++ src/test/enginemixertest.cpp ++ src/test/enginemicrophonetest.cpp ++ src/test/enginesynctest.cpp ++ src/test/fileinfo_test.cpp ++ src/test/frametest.cpp ++ src/test/globaltrackcache_test.cpp ++ src/test/hotcuecontrol_test.cpp ++ src/test/imageutils_test.cpp ++ src/test/indexrange_test.cpp ++ src/test/itunesxmlimportertest.cpp ++ src/test/keyfactorytest.cpp ++ src/test/keyutilstest.cpp ++ src/test/lcstest.cpp ++ src/test/learningutilstest.cpp ++ src/test/libraryscannertest.cpp ++ src/test/librarytest.cpp ++ src/test/looping_control_test.cpp ++ src/test/main.cpp ++ src/test/mathutiltest.cpp ++ src/test/metadatatest.cpp ++ #TODO: make this build again ++ #src/test/metaknob_link_test.cpp ++ src/test/midicontrollertest.cpp ++ src/test/mixxxtest.cpp ++ src/test/mock_networkaccessmanager.cpp ++ src/test/musicbrainzrecordingstasktest.cpp ++ src/test/performancetimer_test.cpp ++ src/test/playcountertest.cpp ++ src/test/playermanagertest.cpp ++ src/test/playlisttest.cpp ++ src/test/portmidicontroller_test.cpp ++ src/test/portmidienumeratortest.cpp ++ src/test/queryutiltest.cpp ++ src/test/rangelist_test.cpp ++ src/test/readaheadmanager_test.cpp ++ src/test/replaygaintest.cpp ++ src/test/rescalertest.cpp ++ src/test/rgbcolor_test.cpp ++ src/test/samplebuffertest.cpp ++ src/test/schemamanager_test.cpp ++ src/test/searchqueryparsertest.cpp ++ src/test/seratobeatgridtest.cpp ++ src/test/seratomarkerstest.cpp ++ src/test/seratomarkers2test.cpp ++ src/test/seratotagstest.cpp ++ src/test/signalpathtest.cpp ++ src/test/skincontext_test.cpp ++ src/test/softtakeover_test.cpp ++ src/test/soundproxy_test.cpp ++ src/test/soundsourceproviderregistrytest.cpp ++ src/test/sqliteliketest.cpp ++ src/test/synccontroltest.cpp ++ src/test/synctrackmetadatatest.cpp ++ src/test/tableview_test.cpp ++ src/test/taglibtest.cpp ++ src/test/trackdao_test.cpp ++ src/test/trackexport_test.cpp ++ src/test/trackmetadata_test.cpp ++ src/test/trackmetadataexport_test.cpp ++ src/test/tracknumberstest.cpp ++ src/test/trackreftest.cpp ++ src/test/trackupdate_test.cpp ++ src/test/uuid_test.cpp ++ src/test/wbatterytest.cpp ++ src/test/wpushbutton_test.cpp ++ src/test/wwidgetstack_test.cpp ++ src/util/moc_included_test.cpp ++ ) ++ if(BUILD_BENCH) ++ set( ++ src-mixxx-test ++ ${src-mixxx-test} ++ src/test/engineeffectsdelay_test.cpp ++ src/test/movinginterquartilemean_test.cpp ++ src/test/nativeeffects_test.cpp ++ src/test/ringdelaybuffer_test.cpp ++ src/test/sampleutiltest.cpp ++ ) ++ endif() + +-# Benchmarking +-add_custom_target(mixxx-benchmark +- COMMAND $<TARGET_FILE:mixxx-test> --benchmark +- WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" +- COMMENT "Mixxx Benchmarks" +- VERBATIM +-) +-add_dependencies(mixxx-benchmark mixxx-test) ++ add_executable(mixxx-test ${src-mixxx-test}) ++ ++ 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) ++ ++ if(BUILD_BENCH) ++ add_compile_definitions(USE_BENCH) ++ target_link_libraries(mixxx-test PRIVATE benchmark::benchmark) ++ endif() ++ ++ # Test Suite ++ include(CTest) ++ include(GoogleTest) ++ enable_testing() ++ gtest_add_tests( ++ TARGET mixxx-test ++ EXTRA_ARGS --logLevel info ++ WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" ++ TEST_LIST testsuite ++ ) ++ ++ if (NOT WIN32) ++ # Default to offscreen rendering during tests. ++ # This is required if the build system like Fedora koji/mock does not ++ # allow to pass environment variables into the ctest macro expansion. ++ set_tests_properties(${testsuite} PROPERTIES ENVIRONMENT "QT_QPA_PLATFORM=offscreen") ++ endif() ++ ++ if(BUILD_BENCH) ++ # Benchmarking ++ add_custom_target(mixxx-benchmark ++ COMMAND $<TARGET_FILE:mixxx-test> --benchmark ++ WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" ++ COMMENT "Mixxx Benchmarks" ++ VERBATIM ++ ) ++ add_dependencies(mixxx-benchmark mixxx-test) ++ endif() ++endif() # BUILD_TESTING + + # + # Resources +@@ -2245,8 +2283,10 @@ endif() + + target_sources(mixxx PRIVATE res/mixxx.qrc) + set_target_properties(mixxx PROPERTIES AUTORCC ON) +-target_sources(mixxx-test PRIVATE res/mixxx.qrc) +-set_target_properties(mixxx-test PROPERTIES AUTORCC ON) ++if(BUILD_TESTING) ++ target_sources(mixxx-test PRIVATE res/mixxx.qrc) ++ set_target_properties(mixxx-test PROPERTIES AUTORCC ON) ++endif() + + if (MIXXX_VERSION_PRERELEASE STREQUAL "") + set(MIXXX_VERSION "${CMAKE_PROJECT_VERSION}") +@@ -3510,7 +3550,7 @@ endif() + # Google PerfTools + option(GPERFTOOLS "Google PerfTools libtcmalloc linkage" OFF) + option(GPERFTOOLSPROFILER "Google PerfTools libprofiler linkage" OFF) +-if(GPERFTOOLS OR GPERFTOOLSPROFILER) ++if((BUILD_BENCH) AND (GPERFTOOLS OR GPERFTOOLSPROFILER)) + find_package(GPerfTools REQUIRED) + if(GPERFTOOLS) + target_link_libraries(mixxx-lib PRIVATE GPerfTools::tcmalloc) +@@ -3556,7 +3596,9 @@ if(LILV) + ) + target_compile_definitions(mixxx-lib PUBLIC __LILV__) + target_link_libraries(mixxx-lib PRIVATE lilv::lilv) +- target_link_libraries(mixxx-test PRIVATE lilv::lilv) ++ if(BUILD_TESTING) ++ target_link_libraries(mixxx-test PRIVATE lilv::lilv) ++ endif() + endif() + + # Live Broadcasting (Shoutcast) + +From 25769771e3b70047c8c52256a804454510707e4b Mon Sep 17 00:00:00 2001 +From: Nicolas PARLANT <[email protected]> +Date: Fri, 31 Jan 2025 16:28:31 +0000 +Subject: [PATCH 2/2] Slight adaptation for test.main.cpp + +--- + src/test/main.cpp | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/src/test/main.cpp b/src/test/main.cpp +index 80d58bcd41b..58ba97a85e4 100644 +--- a/src/test/main.cpp ++++ b/src/test/main.cpp +@@ -1,4 +1,6 @@ ++#ifdef USE_BENCH + #include <benchmark/benchmark.h> ++#endif + + #include "errordialoghandler.h" + #include "mixxxtest.h" +@@ -8,6 +10,7 @@ int main(int argc, char **argv) { + // We never want to popup error dialogs when running tests. + ErrorDialogHandler::setEnabled(false); + ++#ifdef USE_BENCH + bool run_benchmarks = false; + for (int i = 0; i < argc; ++i) { + if (strcmp(argv[i], "--benchmark") == 0) { +@@ -33,4 +36,9 @@ int main(int argc, char **argv) { + } else { + return RUN_ALL_TESTS(); + } ++#else ++ testing::InitGoogleTest(&argc, argv); ++ MixxxTest::ApplicationScope applicationScope(argc, argv); ++ return RUN_ALL_TESTS(); ++#endif + } diff --git a/media-sound/mixxx/mixxx-2.5.0.ebuild b/media-sound/mixxx/mixxx-2.5.0.ebuild new file mode 100644 index 000000000000..46c613f56911 --- /dev/null +++ b/media-sound/mixxx/mixxx-2.5.0.ebuild @@ -0,0 +1,172 @@ +# Copyright 1999-2025 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +inherit cmake flag-o-matic toolchain-funcs udev xdg + +DESCRIPTION="Advanced Digital DJ tool based on Qt" +HOMEPAGE="https://mixxx.org/" +if [[ ${PV} == *9999 ]] ; then + inherit git-r3 + if [[ ${PV} == ?.?.9999 ]] ; then + EGIT_BRANCH=${PV%.9999} + fi + EGIT_REPO_URI="https://github.com/mixxxdj/${PN}.git" +else + 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 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:3 + dev-libs/hidapi + dev-libs/protobuf:= + 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/libglvnd[X] + media-libs/libogg + media-libs/libsndfile + media-libs/libsoundtouch:= + media-libs/libvorbis + media-libs/portaudio + <media-libs/taglib-2 + media-sound/lame + virtual/glu + virtual/libusb:1 + 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:= ) + keyfinder? ( media-libs/libkeyfinder ) + lv2? ( media-libs/lilv ) + 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-util/spirv-tools + virtual/pkgconfig +" + +PATCHES=( + # Building mixxx-test target only with explicit test useflag + "${FILESDIR}"/${P}-tests.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=( + -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 + -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)" + ) + + 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 +} + +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() { + xdg_pkg_postrm + udev_reload +}
