Subject: WIP: Upgrade MuseScore to 4.4.4
From: Rovanion Luckey <[email-masked]>
To: [email-masked]
Date: Sun, 22 Dec 2024 23:45:47 +0100
List-Id: <debbugs-submit.debbugs.gnu.org>

Hi,
I have been working on and off for the last month to get MuseScore 4.4.x
packaged for Guix. I have come so far as to have the project build but not
run. The program gets partially through its startup procedure but fails
with a QML related error:

23:10:58.058 | WARN  | main_thread     | Qt              |
> QQmlApplicationEngine failed to load component
> 23:10:58.112 | ERROR | main_thread     | GuiApp::perform | error:
> qrc:/qml/platform/linux/Main.qml: module "QtQml.WorkerScript" is not
> installed
> 23:10:58.112 | WARN  | main_thread     | Qt              |
> qrc:/qml/platform/linux/Main.qml: module "QtQml.WorkerScript" is not
> installed
> 23:10:58.112 | WARN  | main_thread     | Qt              |
> QObject::connect(QQuickWindow, QApplication): invalid nullptr parameter
> 23:10:58.113 | INFO  | main_thread     | AudioOutputDeviceController::init
> | Available output devices changed, checking connection...
> 23:10:58.116 | ERROR | main_thread     | GuiApp::perform | failed Qml load

If anyone has a pointer such are gracefully received. Right now it's time
for me to give up for today.

Unrelated: The largest change that's needed for this build to work is to
change build system for HarfBuzz to meson. This because the makefile based
build does not produce correct CMake-files for HarfBuzz. The attached
work-in-progress-patch creates a separate package for HarfBuzz for
convenience while developing the patch - but the build system should
probably be changed for the real HarfBuzz package in the real patch.

Cheers!
From 291b21f68a4248023f9da0b9820a095b7649faa6 Mon Sep 17 00:00:00 2001
Message-ID: <291b21f[email-masked]>
From: Rovanion Luckey <[email-masked]>
Date: Sun, 22 Dec 2024 23:32:21 +0100
Subject: [PATCH] WIP: gnu: music: Update to 4.4.4.

*  (music): Update to 4.4.4.

Change-Id: Ia5509faad497a13e4c8b1e8d0269449fc5426f43
---
 gnu/packages/gtk.scm   | 40 +++++++++++++++++++++++++++++
 gnu/packages/music.scm | 58 +++++++++++++++++++++++++-----------------
 2 files changed, 74 insertions(+), 24 deletions(-)

diff --git a/gnu/packages/gtk.scm b/gnu/packages/gtk.scm
index ef1391e8ba..d422403dec 100644
--- a/gnu/packages/gtk.scm
+++ b/gnu/packages/gtk.scm
@@ -37,6 +37,7 @@
 ;;; Copyright © 2023, 2024 Zheng Junjie <[email-masked]>
 ;;; Copyright © 2023 Janneke Nieuwenhuizen <[email-masked]>
 ;;; Copyright © 2024 John Kehayias <[email-masked]>
+;;; Copyright © 2024 Rovanion Luckey <[email-masked]>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -318,6 +319,45 @@ (define-public harfbuzz
                                 "See 'COPYING' in the distribution."))
     (home-page "https://www.freedesktop.org/wiki/Software/HarfBuzz/")))
 
+(define-public harfbuzz-meson
+  (package
+    (name "harfbuzz")
+    (version "8.3.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/harfbuzz/harfbuzz"
+                                  "/releases/download/" version "/harfbuzz-"
+                                  version ".tar.xz"))
+              (sha256
+               (base32
+                "0izq2lpqxrf1l755nxrxkkiarywkx5j43asznankxplbxgm0358h"))))
+    (build-system meson-build-system)
+    (outputs '("out"
+               "bin"))                  ;160K, only hb-view depend on cairo
+    (inputs
+     (list cairo))
+    (propagated-inputs
+     ;; There are all in the Requires or Requires.private field of '.pc'.
+     (list glib graphite2 icu4c))
+    (native-inputs
+     (append (list `(,glib "bin"))      ;for glib-mkenums
+             (if (target-hurd?)
+                 '()
+                 (list gobject-introspection))
+             (list pkg-config
+                   python-wrapper
+                   which)))
+    (arguments
+     (list #:configure-flags
+           #~(list "-Dgraphite2=enabled"
+                   (string-append "--bindir=" #$output:bin "/bin"))))
+    (synopsis "OpenType text shaping engine")
+    (description
+     "HarfBuzz is an OpenType text shaping engine.")
+    (license (license:x11-style "file://COPYING"
+                                "See 'COPYING' in the distribution."))
+    (home-page "https://www.freedesktop.org/wiki/Software/HarfBuzz/")))
+
 (define-public libdatrie
   (package
     (name "libdatrie")
diff --git a/gnu/packages/music.scm b/gnu/packages/music.scm
index 2fbdcf4ea9..9de1ea442c 100644
--- a/gnu/packages/music.scm
+++ b/gnu/packages/music.scm
@@ -38,7 +38,7 @@
 ;;; Copyright © 2021 Brendan Tildesley <[email-masked]>
 ;;; Copyright © 2021 Bonface Munyoki Kilyungi <[email-masked]>
 ;;; Copyright © 2021 Frank Pursel <[email-masked]>
-;;; Copyright © 2021 Rovanion Luckey <[email-masked]>
+;;; Copyright © 2021, 2024 Rovanion Luckey <[email-masked]>
 ;;; Copyright © 2021 Justin Veilleux <[email-masked]>
 ;;; Copyright © 2021, 2022, 2023 Felix Gruber <[email-masked]>
 ;;; Copyright © 2021 Simon Streit <[email-masked]>
@@ -5416,7 +5416,7 @@ (define-public sfizz
 (define-public musescore
   (package
     (name "musescore")
-    (version "4.3.2")
+    (version "4.4.4")
     (source
      (origin
        (method git-fetch)
@@ -5425,21 +5425,30 @@ (define-public musescore
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1hx0l6d7avyfbh88hwn01h9q51mgd9zix91q2kgg1ax73pqxhfs2"))
-       (modules '((guix build utils)))
-       (snippet
-        '(begin
-           ;; Delete precompiled binaries.
-           (delete-file-recursively "src/diagnostics/crashpad_handler")
-           (substitute* "src/diagnostics/CMakeLists.txt"
-             (("install") "#install"))))))
+        (base32 "0cjp1sp50pwmrgvpxjxg849s0vsvk2vcb66ym617nvlj761h0ngz"))
+       (modules '((guix build utils)))))
     (build-system qt-build-system)
     (arguments
      `(#:configure-flags
-       `("-DDOWNLOAD_SOUNDFONT=OFF"
-         "-DBUILD_DIAGNOSTICS=OFF"
-         "-DMUSESCORE_BUILD_CONFIG=release"
-         "-DUSE_SYSTEM_FREETYPE=ON")
+       `("-DMUSE_APP_BUILD_MODE=release"
+         ;; Disable the build and usage of the `/bin/crashpad_handler` utility -
+         ;; it does automatic crash reporting and is distributed as a
+         ;; pre-compiled binary in the source-tree of MuseScore:
+         ;;  https://github.com/musescore/MuseScore/issues/15571
+         ;; Renamed from MUE_BUILD_CRASHPAD_CLIENT, MUE_BUILD_DIAGNOSTICS_MODULE
+         ;; https://github.com/musescore/MuseScore/commit/6f269e8b072cca36cb76eb016cb60c1c1c2b9906
+         "-DMUSE_MODULE_DIAGNOSTICS_CRASHPAD_CLIENT=OFF"
+         ;; Use Guix' versions of system libraries.
+         "-DMUE_COMPILE_USE_SYSTEM_FREETYPE=ON"
+         "-DMUE_COMPILE_USE_SYSTEM_HARFBUZZ=ON"
+         "-DMUE_COMPILE_USE_SYSTEM_TINYXML=ON"
+         "-DMUE_COMPILE_USE_SYSTEM_OPUSENC=ON" ; Ipmlies -DMUE_COMPILE_USE_SYSTEM_OPUS=ON
+         "-DMUE_COMPILE_USE_SYSTEM_FLAC=ON"
+         ;; Disable download of soundfont during build.
+         "-DDOWNLOAD_SOUNDFONT=OFF"
+         ;; Don't bundle Qt QML files, relevant really only for Darwin.
+         ;; "-DMUE_COMPILE_INSTALL_QTQML_FILES=OFF"
+         )
        ;; There are tests, but no simple target to run.  The command used to
        ;; run them is:
        ;;
@@ -5450,30 +5459,31 @@ (define-public musescore
        ;; So we simply skip them.
        #:tests? #f))
     (native-inputs
-     (list git-minimal pkg-config qttools-5))
+     (list git-minimal pkg-config qttools))
     (inputs
      (list alsa-lib
            freetype
            `(,gtk+ "bin")               ;for gtk-update-icon-cache
+           harfbuzz-meson
            jack-1
            lame
            libogg
+           libopusenc
            libsndfile
            libvorbis
            portaudio
            portmidi
            pulseaudio
            python
-           qtbase-5
-           qtdeclarative-5
-           qtgraphicaleffects
-           qtnetworkauth-5
-           qtquickcontrols-5
-           qtquickcontrols2-5
-           qtscript
-           qtsvg-5
+           tinyxml2
+           qtbase
+           qtdeclarative
+           qtnetworkauth
+           qt5compat
+           qtwayland
+           qtsvg
            qtx11extras
-           qtxmlpatterns))
+           qtscxml))
     (propagated-inputs
      (list `(,alsa-plugins "pulseaudio"))) ;for libasound_module_conf_pulse.so
     (synopsis "Music composition and notation software")

base-commit: 11855e1c2863c56d9a3364cdac614a529a1c7cc2
-- 
2.46.0