commit:     bd25f8f370ed297c233d2a2e7f6867f648409b12
Author:     Nicolas PARLANT <nicolas.parlant <AT> parhuet <DOT> fr>
AuthorDate: Fri Oct 10 12:57:13 2025 +0000
Commit:     Miroslav Šulc <fordfrog <AT> gentoo <DOT> org>
CommitDate: Thu Oct 16 12:59:27 2025 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=bd25f8f3

media-sound/musescore: sync live, unbundle lame/pugixml

skip CMAKE_QA, one file from fluidsynth (3rd party), unused

deps :
add optional support for pipewire
add optional support for websockets (qtwebsockets)
add utfcpp (unbundled)
xml is now handled by pugixml (unbundled) instead of tinyxml
libsndfile is no longer required
add qtbase:6[X] because upstream forces X11 (see PR 28461).
wayland still could be forced with MU_QT_QPA_PLATFORM=wayland

cmake options :
disable PCH
conditional pipewire
conditional websockets

skip more tests

Signed-off-by: Nicolas PARLANT <nicolas.parlant <AT> parhuet.fr>
Part-of: https://github.com/gentoo/gentoo/pull/44140
Closes: https://github.com/gentoo/gentoo/pull/44140
Signed-off-by: Miroslav Šulc <fordfrog <AT> gentoo.org>

 .../files/musescore-4.7-unbundle-gtest.patch       | 70 ++++++++++++++++++++++
 .../files/musescore-4.7-unbundle-lame.patch        | 15 +++++
 .../files/musescore-4.7-unbundle-pugixml.patch     | 26 ++++++++
 .../files/musescore-4.7-unbundle-utfcpp.patch      | 52 ++++++++++++++++
 media-sound/musescore/metadata.xml                 |  2 +
 media-sound/musescore/musescore-9999.ebuild        | 66 ++++++++++++++++----
 6 files changed, 220 insertions(+), 11 deletions(-)

diff --git a/media-sound/musescore/files/musescore-4.7-unbundle-gtest.patch 
b/media-sound/musescore/files/musescore-4.7-unbundle-gtest.patch
new file mode 100644
index 000000000000..c7396f9885cd
--- /dev/null
+++ b/media-sound/musescore/files/musescore-4.7-unbundle-gtest.patch
@@ -0,0 +1,70 @@
+unbundle gmock/gtest
+--- a/buildscripts/cmake/DeclareModuleSetup.cmake
++++ b/buildscripts/cmake/DeclareModuleSetup.cmake
+@@ -182,13 +182,11 @@ macro(setup_module)
+         ${MUSE_FRAMEWORK_PATH}
+         ${MUSE_FRAMEWORK_PATH}/framework
+         ${MUSE_FRAMEWORK_PATH}/framework/global
+-        
${MUSE_FRAMEWORK_PATH}/framework/testing/thirdparty/googletest/googletest/include
+ 
+         # compat
+         ${MUSE_FRAMEWORK_PATH}/src
+         ${MUSE_FRAMEWORK_PATH}/src/framework
+         ${MUSE_FRAMEWORK_PATH}/src/framework/global
+-        
${MUSE_FRAMEWORK_PATH}/src/framework/testing/thirdparty/googletest/googletest/include
+         # end compat
+ 
+         ${MODULE_INCLUDE_PRIVATE}
+--- a/src/framework/CMakeLists.txt
++++ b/src/framework/CMakeLists.txt
+@@ -124,7 +124,6 @@ if (MUSE_ENABLE_UNIT_TESTS)
+     )
+ 
+     set(INSTALL_GTEST OFF)
+-    add_subdirectory(testing/thirdparty/googletest)
+ endif()
+ 
+ # Stubs
+--- a/src/framework/testing/gtest.cmake
++++ b/src/framework/testing/gtest.cmake
+@@ -31,9 +31,6 @@
+ 
+ message(STATUS "Configuring ${MODULE_TEST}")
+ 
+-get_property(gmock_LIBS GLOBAL PROPERTY gmock_LIBS)
+-get_property(gmock_INCLUDE_DIRS GLOBAL PROPERTY gmock_INCLUDE_DIRS)
+-
+ add_executable(${MODULE_TEST}
+     ${CMAKE_CURRENT_LIST_DIR}/gmain.cpp
+     ${CMAKE_CURRENT_LIST_DIR}/environment.cpp
+@@ -50,13 +47,11 @@ target_include_directories(${MODULE_TEST} PRIVATE
+     ${MUSE_FRAMEWORK_PATH}
+     ${MUSE_FRAMEWORK_PATH}/framework
+     ${MUSE_FRAMEWORK_PATH}/framework/global
+-    
${MUSE_FRAMEWORK_PATH}/framework/testing/thirdparty/googletest/googletest/include
+ 
+     # compat
+     ${MUSE_FRAMEWORK_PATH}/src
+     ${MUSE_FRAMEWORK_PATH}/src/framework
+     ${MUSE_FRAMEWORK_PATH}/src/framework/global
+-    
${MUSE_FRAMEWORK_PATH}/src/framework/testing/thirdparty/googletest/googletest/include
+     # end compat
+ 
+     ${MODULE_TEST_INCLUDE}
+@@ -74,11 +69,15 @@ endif()
+ 
+ find_package(Qt6Core REQUIRED)
+ find_package(Qt6Gui REQUIRED)
++pkg_check_modules(gtest REQUIRED IMPORTED_TARGET gtest)
++pkg_check_modules(gmock REQUIRED IMPORTED_TARGET gmock)
++list(APPEND MODULE_TEST_INCLUDE ${gtest_INCLUDE_DIRS} ${gmock_INCLUDE_DIRS})
+ 
+ target_link_libraries(${MODULE_TEST}
+     Qt6::Core
+     Qt6::Gui
+-    gmock
++    PkgConfig::gmock
++    PkgConfig::gtest
+     muse_global
+     ${MODULE_TEST_LINK}
+     ${COVERAGE_FLAGS}

diff --git a/media-sound/musescore/files/musescore-4.7-unbundle-lame.patch 
b/media-sound/musescore/files/musescore-4.7-unbundle-lame.patch
new file mode 100644
index 000000000000..407489f9ef45
--- /dev/null
+++ b/media-sound/musescore/files/musescore-4.7-unbundle-lame.patch
@@ -0,0 +1,15 @@
+unbundle lame
+--- a/src/framework/audio/engine/audio_engine.cmake
++++ b/src/framework/audio/engine/audio_engine.cmake
+@@ -185,8 +185,9 @@ if (MUSE_MODULE_AUDIO_EXPORT)
+         ${CMAKE_CURRENT_LIST_DIR}/internal/export/wavencoder.h
+     )
+ 
+-    add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/../thirdparty/lame lame 
EXCLUDE_FROM_ALL)
+-    list(APPEND AUDIO_ENGINE_LINK lame)
++    pkg_check_modules(lame REQUIRED IMPORTED_TARGET lame)
++    list(APPEND AUDIO_ENGINE_LINK PkgConfig::lame)
++    list(APPEND MODULE_INCLUDE_PRIVATE ${lame_INCLUDE_DIRS})
+ 
+     include(${CMAKE_CURRENT_LIST_DIR}/../cmake/SetupOpusEnc.cmake)
+     list(APPEND AUDIO_ENGINE_LINK ${LIBOPUSENC_TARGETS})

diff --git a/media-sound/musescore/files/musescore-4.7-unbundle-pugixml.patch 
b/media-sound/musescore/files/musescore-4.7-unbundle-pugixml.patch
new file mode 100644
index 000000000000..09fbd5ee670b
--- /dev/null
+++ b/media-sound/musescore/files/musescore-4.7-unbundle-pugixml.patch
@@ -0,0 +1,26 @@
+unbundle pugixml
+--- a/src/framework/global/CMakeLists.txt
++++ b/src/framework/global/CMakeLists.txt
+@@ -150,9 +150,6 @@ set(MODULE_SRC
+     ${CMAKE_CURRENT_LIST_DIR}/serialization/xmlstreamwriter.h
+     ${CMAKE_CURRENT_LIST_DIR}/serialization/xmldom.cpp
+     ${CMAKE_CURRENT_LIST_DIR}/serialization/xmldom.h
+-
+-    ${CMAKE_CURRENT_LIST_DIR}/thirdparty/pugixml/pugixml.hpp
+-    ${CMAKE_CURRENT_LIST_DIR}/thirdparty/pugixml/pugixml.cpp
+ )
+ 
+ if (MUSE_THREADS_SUPPORT)
+@@ -274,9 +271,9 @@ else ()
+     set(Z_LIB z)
+ endif ()
+ 
+-list(APPEND MODULE_INCLUDE_PRIVATE
+-    ${CMAKE_CURRENT_LIST_DIR}/thirdparty/pugixml
+-)
++pkg_check_modules(pugixml REQUIRED IMPORTED_TARGET pugixml)
++list(APPEND MODULE_LINK PkgConfig::pugixml)
++list(APPEND MODULE_INCLUDE_PRIVATE ${pugixml_INCLUDE_DIRS})
+ 
+ list(APPEND MODULE_INCLUDE_PRIVATE ${Z_INCLUDE})
+ list(APPEND MODULE_LINK ${Z_LIB})

diff --git a/media-sound/musescore/files/musescore-4.7-unbundle-utfcpp.patch 
b/media-sound/musescore/files/musescore-4.7-unbundle-utfcpp.patch
new file mode 100644
index 000000000000..127ed7a1799d
--- /dev/null
+++ b/media-sound/musescore/files/musescore-4.7-unbundle-utfcpp.patch
@@ -0,0 +1,52 @@
+unbundle utfcpp
+--- a/src/framework/global/CMakeLists.txt
++++ b/src/framework/global/CMakeLists.txt
+@@ -25,7 +25,6 @@ include(${CMAKE_CURRENT_LIST_DIR}/async/async.cmake)
+ include(${CMAKE_CURRENT_LIST_DIR}/thirdparty/kors_logger/logger.cmake)
+ 
include(${CMAKE_CURRENT_LIST_DIR}/thirdparty/kors_profiler/profiler/profiler.cmake)
+ 
include(${CMAKE_CURRENT_LIST_DIR}/thirdparty/kors_modularity/modularity/modularity.cmake)
+-include(${CMAKE_CURRENT_LIST_DIR}/thirdparty/utfcpp/utfcpp.cmake)
+ 
+ find_package(TinyXml REQUIRED)
+ set(MODULE_SRC
+@@ -33,7 +32,6 @@ set(MODULE_SRC
+     ${ASYNC_SRC}
+     ${KORS_LOGGER_SRC}
+     ${KORS_PROFILER_SRC}
+-    ${UTFCPP_SRC}
+     ${CMAKE_CURRENT_LIST_DIR}/globaltypes.h
+     ${CMAKE_CURRENT_LIST_DIR}/iapplication.h
+     ${CMAKE_CURRENT_LIST_DIR}/iinteractive.h
+@@ -268,6 +266,10 @@ list(APPEND MODULE_LINK ${Z_LIB})
+ list(APPEND MODULE_LINK ${TINYXML_MODULE_LINK})
+ set(MODULE_DEF ${TINYXML_MODULE_DEF})
+ 
++find_package(utf8cpp REQUIRED CONFIG)
++get_target_property(UTFCPP_INC utf8::cpp INTERFACE_INCLUDE_DIRECTORIES)
++list(APPEND MODULE_INCLUDE_PRIVATE ${UTFCPP_INC})
++
+ if (QT_SUPPORT)
+     # These are needed by so many modules, that we make them public here,
+     # so that other modules get them transitively.
+--- a/src/framework/global/serialization/xmlstreamwriter.cpp
++++ b/src/framework/global/serialization/xmlstreamwriter.cpp
+@@ -23,7 +23,7 @@
+ 
+ #include <list>
+ 
+-#include <global/thirdparty/utfcpp/utf8.h>
++#include <utf8.h>
+ 
+ #include "global/containers.h"
+ #include "textstream.h"
+--- a/src/framework/global/types/string.cpp
++++ b/src/framework/global/types/string.cpp
+@@ -32,7 +32,7 @@
+ #include <sstream>
+ #include <utility>
+ 
+-#include "global/thirdparty/utfcpp/utf8.h"
++#include <utf8.h>
+ 
+ #include "bytearray.h"
+ 

diff --git a/media-sound/musescore/metadata.xml 
b/media-sound/musescore/metadata.xml
index 265b53d9c817..01182644c4d0 100644
--- a/media-sound/musescore/metadata.xml
+++ b/media-sound/musescore/metadata.xml
@@ -10,6 +10,8 @@
                <remote-id type="github">musescore/MuseScore</remote-id>
        </upstream>
        <use>
+               <flag name="pipewire">Enable PipeWire audio support (upstream's 
default)</flag>
                <flag name="video">Support exporting scores as videos using the 
command line</flag>
+               <flag name="websockets">Enable websockets support</flag>
        </use>
 </pkgmetadata>

diff --git a/media-sound/musescore/musescore-9999.ebuild 
b/media-sound/musescore/musescore-9999.ebuild
index 81d62e7f2473..b52803e02549 100644
--- a/media-sound/musescore/musescore-9999.ebuild
+++ b/media-sound/musescore/musescore-9999.ebuild
@@ -3,6 +3,9 @@
 
 EAPI=8
 
+# https://bugs.gentoo.org/958256, bundled fluidsynth:
+# 
src/framework/audio/thirdparty/fluidsynth/fluidsynth-2.3.3/src/gentables/CMakeLists.txt
+CMAKE_QA_COMPAT_SKIP=yes
 CHECKREQS_DISK_BUILD=3500M
 inherit cmake flag-o-matic xdg check-reqs
 
@@ -25,7 +28,8 @@ SRC_URI+=" 
https://dev.gentoo.org/~fordfrog/distfiles/MuseScore_General-0.2.0.ta
 
 LICENSE="GPL-2"
 SLOT="0"
-IUSE="jack test video"
+IUSE="jack pipewire test video websockets"
+REQUIRED_USE="?? ( jack pipewire )"
 RESTRICT="!test? ( test )"
 
 BDEPEND="
@@ -33,8 +37,8 @@ BDEPEND="
        virtual/pkgconfig
 "
 RDEPEND="
-       dev-libs/tinyxml2:=
-       dev-qt/qtbase:6[concurrent,dbus,gui,network,opengl,widgets,xml]
+       dev-libs/pugixml
+       dev-qt/qtbase:6[concurrent,dbus,gui,network,opengl,widgets,xml,X]
        dev-qt/qt5compat:6[qml]
        dev-qt/qtdeclarative:6
        dev-qt/qtnetworkauth:6
@@ -45,21 +49,25 @@ RDEPEND="
        media-libs/freetype
        media-libs/harfbuzz:=
        media-libs/libopusenc
-       media-libs/libsndfile
        media-libs/opus
        media-sound/lame
        sys-libs/zlib:=
        jack? ( virtual/jack )
+       pipewire? ( media-video/pipewire:= )
        video? ( media-video/ffmpeg:= )
+       websockets? ( dev-qt/qtwebsockets:6 )
 "
 DEPEND="${RDEPEND}
+       dev-libs/utfcpp
        test? ( dev-cpp/gtest )
 "
 
 PATCHES=(
-       "${FILESDIR}/${PN}-4.5.0-unbundle-deps.patch"
-       "${FILESDIR}/${PN}-4.6.0-unbundle-gtest.patch"
-       "${FILESDIR}/${PN}-4.6.0-missing-includes.patch"
+       # unbundle 3rd libs
+       "${FILESDIR}/${PN}-4.7-unbundle-gtest.patch"
+       "${FILESDIR}/${PN}-4.7-unbundle-lame.patch"
+       "${FILESDIR}/${PN}-4.7-unbundle-pugixml.patch"
+       "${FILESDIR}/${PN}-4.7-unbundle-utfcpp.patch"
 )
 
 src_unpack() {
@@ -72,6 +80,27 @@ src_unpack() {
 }
 
 src_prepare() {
+       # see https://github.com/musescore/MuseScore/issues/11572
+       # keep global/thirdparty/picojson, upstream is inactive
+       # keep dockwindow/thirdparty/KDDockWidgets, using priv headers
+       # keep audio/thirdparty/fluidsynth, using priv headers
+       # keep audio/thirdparty/stb, one file, same as miniaudio
+       local rm_deps=(
+               audio/thirdparty/flac
+               audio/thirdparty/lame
+               audio/thirdparty/opus
+               audio/thirdparty/opusenc
+               draw/thirdparty/freetype
+               global/thirdparty/pugixml
+               global/thirdparty/utfcpp
+               testing/thirdparty/googletest
+       )
+
+       local bundle
+       for bundle in "${rm_deps[@]}"; do
+               rm -r src/framework/"${bundle}" || die
+       done
+
        cmake_src_prepare
 
        # Move soundfonts to the correct directory
@@ -94,17 +123,20 @@ src_configure() {
                -DMUE_COMPILE_USE_SYSTEM_FREETYPE=ON
                -DMUE_COMPILE_USE_SYSTEM_OPUS=ON
                -DMUE_COMPILE_USE_SYSTEM_OPUSENC=ON
-               -DMUE_COMPILE_USE_SYSTEM_TINYXML=ON
                -DMUE_COMPILE_USE_SYSTEM_HARFBUZZ=ON
                -DMUE_DOWNLOAD_SOUNDFONT=OFF
                -DMUSE_APP_BUILD_MODE="release"
                -DMUSE_COMPILE_USE_COMPILER_CACHE=OFF
+               -DMUSE_COMPILE_USE_PCH=OFF
                -DMUSE_MODULE_AUDIO_JACK="$(usex jack)"
                -DMUSE_MODULE_DIAGNOSTICS_CRASHPAD_CLIENT=OFF
+               -DMUSE_MODULE_NETWORK_WEBSOCKET="$(usex websockets)"
                -DMUSE_MODULE_UPDATE=OFF
+               -DMUSE_PIPEWIRE_AUDIO_DRIVER="$(usex pipewire)"
                # tests
                -DMUSE_ENABLE_UNIT_TESTS="$(usex test)"
                -DMUE_BUILD_BRAILLE_TESTS="$(usex test)"
+               -DMUE_BUILD_CONVERTER_TESTS="$(usex test)"
                -DMUE_BUILD_ENGRAVING_TESTS="$(usex test)"
                -DMUE_BUILD_IMPORTEXPORT_TESTS="$(usex test)"
                -DMUE_BUILD_NOTATION_TESTS="$(usex test)"
@@ -116,11 +148,23 @@ src_configure() {
 
 src_test() {
        CMAKE_SKIP_TESTS=(
-               # bug #950450
-               iex_musicxml_tests
-               # it fails with gcc only, to investigate
+               # see https://github.com/musescore/MuseScore/issues/30434
+               # Global_AllocatorTests* fail with gcc only, to investigate
                muse_global_tests
+               # segfault
+               muse_audio_tests
+               # see bug #950450 too
+               iex_musicxml_tests
        )
 
        QT_QPA_PLATFORM=offscreen cmake_src_test
 }
+
+pkg_postinst() {
+       xdg_pkg_postinst
+
+       if has_version "media-sound/musescore" || ! use pipewire; then
+               ewarn "PipeWire support is disabled but it's the default audio 
driver anyway!"
+               ewarn "Check your configuration."
+       fi
+}

Reply via email to