musescore-evolution: init at 3.7.0 (#478650)

This commit is contained in:
Sandro
2026-03-01 02:33:13 +00:00
committed by GitHub
4 changed files with 312 additions and 0 deletions
+5
View File
@@ -18797,6 +18797,11 @@
githubId = 50854675;
name = "Nelson Jeppesen";
};
nemeott = {
github = "nemeott";
githubId = 123220311;
name = "Nathan Emeott";
};
nemin = {
name = "Nemin";
github = "Nemin32";
@@ -0,0 +1,63 @@
diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt
index e67e5c8f5c..a4c6dd61fd 100644
--- a/main/CMakeLists.txt
+++ b/main/CMakeLists.txt
@@ -499,15 +499,6 @@ if (APPLE)
../fonts/finalebroadway/FinaleBroadwayText.otf
DESTINATION ${Mscore_SHARE_NAME}${Mscore_INSTALL_NAME}fonts
)
- install(DIRECTORY
- ${QT_INSTALL_QML}
- DESTINATION ${Mscore_SHARE_NAME}${Mscore_INSTALL_NAME}
- REGEX ".*QtWebkit.*" EXCLUDE
- REGEX ".*QtTest.*" EXCLUDE
- REGEX ".*QtSensors.*" EXCLUDE
- REGEX ".*QtMultimedia.*" EXCLUDE
- REGEX ".*QtAudioEngine.*" EXCLUDE
- REGEX ".*_debug\\.dylib" EXCLUDE)
endif (APPLE)
if (MSCORE_OUTPUT_NAME)
diff --git a/mscore/CMakeLists.txt b/mscore/CMakeLists.txt
index 8daa49b517..471cedf06d 100644
--- a/mscore/CMakeLists.txt
+++ b/mscore/CMakeLists.txt
@@ -142,6 +142,7 @@ if (APPLE)
cocoabridge STATIC
macos/cocoabridge.mm
)
+ set_source_files_properties(macos/cocoabridge.mm PROPERTIES SKIP_PRECOMPILE_HEADERS ON)
else (APPLE)
set(INCS "")
set(COCOABRIDGE "")
diff --git a/mscore/macos/cocoabridge.h b/mscore/macos/cocoabridge.h
index d6a217ad99..0c61197bbb 100644
--- a/mscore/macos/cocoabridge.h
+++ b/mscore/macos/cocoabridge.h
@@ -20,6 +20,10 @@
#ifndef __COCOABRIDGE_H__
#define __COCOABRIDGE_H__
+#include <functional>
+
+#include <QString>
+
class CocoaBridge {
CocoaBridge() {};
public:
diff --git a/mscore/qml/msqmlengine.cpp b/mscore/qml/msqmlengine.cpp
index 77c94b593c..ffd066d41d 100644
--- a/mscore/qml/msqmlengine.cpp
+++ b/mscore/qml/msqmlengine.cpp
@@ -37,9 +37,9 @@ MsQmlEngine::MsQmlEngine(QObject* parent)
setImportPathList(importPaths);
#endif
#ifdef Q_OS_MAC
- QStringList importPaths;
+ QStringList importPaths = importPathList();
QDir dir(mscoreGlobalShare + QString("/qml"));
- importPaths.append(dir.absolutePath());
+ importPaths.prepend(dir.absolutePath());
setImportPathList(importPaths);
#endif
}
@@ -0,0 +1,218 @@
{
stdenv,
lib,
fetchFromGitHub,
cmake,
wrapGAppsHook3,
pkg-config,
ninja,
alsa-lib,
alsa-plugins,
freetype,
libjack2,
lame,
libogg,
libpulseaudio,
libsndfile,
libvorbis,
portaudio,
portmidi,
flac,
libopusenc,
libopus,
tinyxml-2,
qt5, # Needed for musescore 3.X
}:
stdenv.mkDerivation (finalAttrs: {
pname = "musescore-evolution";
version = "3.7.0-unstable-2026-01-12";
src = fetchFromGitHub {
owner = "Jojo-Schmitz";
repo = "MuseScore";
rev = "0b4543baca9b1b70d54cecb33cbf846dabc073d1";
hash = "sha256-piOXHKlnfCO1n0kAgeszqa6JVoHgF8B2OF7agpadGKQ=";
};
patches = [
./musescore-evolution-pch-fix.patch
];
# From top-level CMakeLists.txt:
# - DOWNLOAD_SOUNDFONT defaults ON and tries to fetch from the network.
# Download manually at Help > Manage Resources
cmakeFlags = [
"-DDOWNLOAD_SOUNDFONT=OFF"
];
qtWrapperArgs = [
# MuseScore JACK backend loads libjack at runtime.
"--prefix ${lib.optionalString stdenv.hostPlatform.isDarwin "DY"}LD_LIBRARY_PATH : ${
lib.makeLibraryPath [ libjack2 ]
}"
]
++ lib.optionals (stdenv.hostPlatform.isLinux) [
"--set ALSA_PLUGIN_DIR ${alsa-plugins}/lib/alsa-lib"
]
++ lib.optionals (!stdenv.hostPlatform.isDarwin) [
# There are some issues with using the wayland backend, see:
# https://musescore.org/en/node/321936
"--set-default QT_QPA_PLATFORM xcb"
];
preFixup = ''
qtWrapperArgs+=("''${gappsWrapperArgs[@]}")
# Recreate correct symlinks (let fixupPhase handle compression)
if [ -e "$manDir/mscore-evo.1" ]; then
ln -sf "mscore-evo.1" "$manDir/musescore-evo.1"
fi
'';
dontWrapGApps = true;
nativeBuildInputs = [
qt5.wrapQtAppsHook
cmake
qt5.qttools
pkg-config
ninja
]
++ lib.optionals stdenv.hostPlatform.isLinux [
# Since https://github.com/musescore/MuseScore/pull/13847/commits/685ac998
# GTK3 is needed for file dialogs. Fixes crash with No GSettings schemas error.
wrapGAppsHook3
];
buildInputs = [
libjack2
freetype
lame
libogg
libpulseaudio
libsndfile
libvorbis
portaudio
portmidi
flac
libopusenc
libopus
tinyxml-2
qt5.qtbase
qt5.qtdeclarative
qt5.qtsvg
qt5.qtxmlpatterns
qt5.qtquickcontrols2
qt5.qtgraphicaleffects
]
++ lib.optionals stdenv.hostPlatform.isLinux [
alsa-lib
];
# Avoid depending on insecure QtWebEngine (and having to compile it (huge))
# Because we don't use this, we need to patch the CMakeLists and install scripts to not try to bundle it.
postPatch = ''
# Disable Qt bundling logic in the source CMakeLists.
sed -i '/QT_INSTALL_PREFIX/d' main/CMakeLists.txt
sed -i '/QtWebEngineProcess/d' main/CMakeLists.txt
'';
# Patch the generated install script to drop Qt resource / QtWebEngine installs.
preInstall = ''
sed -i '
/QtWebEngineProcess/d
/resources\"/d
/qtwebengine_locales/d
/qtwebengine/d
/QT_INSTALL_PREFIX/d
' main/cmake_install.cmake
'';
# On macOS, move the .app into Applications/ and symlink the binary to bin/
postInstall = lib.optionalString stdenv.hostPlatform.isDarwin ''
mkdir -p "$out/Applications"
mv "$out/mscore.app" "$out/Applications/mscore-evo.app"
mkdir -p $out/bin
ln -s $out/Applications/mscore-evo.app/Contents/MacOS/mscore $out/bin/mscore-evo
'';
# On Linux, let CMake + wrapQtAppsHook install/wrap "mscore", then rename it
# and adjust the .desktop file so it doesn't clash with the main musescore package.
postFixup = lib.optionalString stdenv.hostPlatform.isLinux ''
mv "$out/bin/mscore" "$out/bin/mscore-evo"
# 2) Fix desktop entry to point to mscore-evo and avoid ID clash
desktop="$out/share/applications/mscore.desktop"
substitute "$desktop" "$out/share/applications/mscore-evo.desktop" \
--replace "Exec=mscore" "Exec=mscore-evo" \
--replace "Name=MuseScore 3.7" "Name=MuseScore 3.7 (Evolution)" \
--replace "Icon=mscore" "Icon=mscore-evo"
rm $desktop
# 3) Rename app icons (apps/)
for sizeDir in "$out"/share/icons/hicolor/*/apps/; do
for ext in png svg xpm; do
if [ -f "$sizeDir/mscore.$ext" ]; then
mv "$sizeDir/mscore.$ext" "$sizeDir/mscore-evo.$ext"
fi
done
done
# 3b) Rename mimetype icons (mimetypes/) to unique names
for icon in "$out"/share/icons/hicolor/*/mimetypes/application-x-musescore.* \
"$out"/share/icons/hicolor/*/mimetypes/application-x-musescore+xml.*; do
dir="''${icon%/*}"; base="''${icon##*/}"; ext="''${base##*.}"
case "$base" in
application-x-musescore.*) mv "$icon" "$dir/application-x-musescore-evo.$ext" ;;
application-x-musescore+xml.*) mv "$icon" "$dir/application-x-musescore-evo+xml.$ext" ;;
esac
done
# 4) Rename MIME XML and point icons to the new names
mv "$out/share/mime/packages/musescore.xml" "$out/share/mime/packages/musescore-evo.xml"
sed -i \
-e 's|<icon>application-x-musescore\(\+xml\)\?</icon>|<icon>application-x-musescore-evo\1</icon>|g' \
-e 's|<icon>musescore</icon>|<icon>mscore-evo</icon>|g' \
"$out/share/mime/packages/musescore-evo.xml"
# 5) Rename man pages to match mscore-evo and remove legacy symlinks
manDir="$out/share/man/man1"
# Remove all old musescore/mscore symlinks first (gzip may have created them)
find "$manDir" -type l \
\( -name 'mscore.1*' -o -name 'musescore.1*' \) \
-exec rm -f {} +
# Rename real files
find "$manDir" \( -name 'mscore.1*' -o -name 'musescore.1*' \) -type f |
while IFS= read -r man; do
base="$(basename "$man")"
newname=$(echo "$base" | sed -e 's/^mscore/mscore-evo/' -e 's/^musescore/mscore-evo/')
mv "$man" "$manDir/$newname"
done
# 6) Rename AppStream metadata and its IDs
meta="$out/share/metainfo/org.musescore.MuseScore.appdata.xml"
new="$out/share/metainfo/org.musescore.MuseScoreEvolution.appdata.xml"
mv "$meta" "$new"
sed -i \
-e 's|<id>org\.musescore\.MuseScore</id>|<id>org.musescore.MuseScoreEvolution</id>|' \
-e 's|mscore\.desktop|mscore-evo.desktop|' \
"$new"
'';
# Don't run bundled upstreams tests, as they require a running X window system.
doCheck = false;
passthru.updateScript.command = [ ./update.sh ];
meta = {
description = "Music notation and composition software";
homepage = "https://github.com/Jojo-Schmitz/MuseScore";
license = lib.licenses.gpl2Only;
maintainers = with lib.maintainers; [ nemeott ];
mainProgram = "mscore-evo";
platforms = lib.platforms.unix;
};
})
+26
View File
@@ -0,0 +1,26 @@
#!/usr/bin/env nix-shell
#!nix-shell -i bash -p jq nix-update coreutils
set -euo pipefail
# Run nix-update on the default branch (updates rev and sha256)
nix-update musescore-evolution --version=branch
# Now we need to update the version name
# Find the new version generated from the nix-update command (e.g. "0-unstable-2026-01-12")
generated_version=$(nix eval --raw -f . ${UPDATE_NIX_ATTR_PATH}.version)
# Extract only the date part (after the last dash) (e.g. 0-unstable-2026-01-12)
parts=(${generated_version//-/ }) # Split up by dashes
clean_date="${parts[2]}-${parts[3]}-${parts[4]}" # Get clean date in YYYY-MM-DD format (e.g. "2026-01-12")
# Compute version prefix based on previous version
old_version="$UPDATE_NIX_OLD_VERSION"
prefix="${old_version%-*}" # e.g. "3.7.0-unstable"
new_version="${prefix}-${clean_date}"
# Patch version in nix file
# Strip any existing version line and replace with new one
sed -i "s/version = \".*\"/version = \"${new_version}\"/" $(nix eval --raw -f . ${UPDATE_NIX_ATTR_PATH}.meta.position | cut -d: -f1)