Skip to content

Commit

Permalink
musescore: Fix darwin build from source
Browse files Browse the repository at this point in the history
Co-authored-by: Randy Eckenrode <[email protected]>
  • Loading branch information
doronbehar and reckenrode committed Jul 17, 2023
1 parent 014929a commit 8895d55
Show file tree
Hide file tree
Showing 3 changed files with 53 additions and 48 deletions.
35 changes: 0 additions & 35 deletions pkgs/applications/audio/musescore/darwin.nix

This file was deleted.

59 changes: 52 additions & 7 deletions pkgs/applications/audio/musescore/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -20,16 +20,32 @@
, qtdeclarative
, qtgraphicaleffects
, flac
, qtquickcontrols
, qtquickcontrols2
, qtscript
, qtsvg
, qtxmlpatterns
, qtnetworkauth
, qtx11extras
, nixosTests
, darwin
}:

stdenv.mkDerivation rec {
let
stdenv' = if stdenv.isDarwin then darwin.apple_sdk_11_0.stdenv else stdenv;
# portaudio propagates Darwin frameworks. Rebuild it using the 11.0 stdenv
# from Qt and the 11.0 SDK frameworks.
portaudio' = if stdenv.isDarwin then portaudio.override {
stdenv = stdenv';
inherit (darwin.apple_sdk_11_0.frameworks)
AudioUnit
AudioToolbox
CoreAudio
CoreServices
Carbon
;
} else portaudio;
in stdenv'.mkDerivation rec {
pname = "musescore";
version = "4.1.0";

Expand All @@ -39,6 +55,15 @@ stdenv.mkDerivation rec {
rev = "v${version}";
sha256 = "sha256-CqW1f0VsF2lW79L3FY2ev+6FoHLbYOJ9LWHeBlWegeU=";
};
patches = [
# Upstream from some reason wants to install qml files from qtbase in
# installPhase, this patch removes this behavior. See:
# https://github.com/musescore/MuseScore/issues/18665
(fetchpatch {
url = "https://github.com/doronbehar/MuseScore/commit/f48448a3ede46f5a7ef470940072fbfb6742487c.patch";
hash = "sha256-UEc7auscnW0KMfWkLKQtm+UstuTNsuFeoNJYIidIlwM=";
})
];

cmakeFlags = [
"-DMUSESCORE_BUILD_MODE=release"
Expand All @@ -48,16 +73,29 @@ stdenv.mkDerivation rec {
"-DMUE_BUILD_CRASHPAD_CLIENT=OFF"
# Use our freetype
"-DUSE_SYSTEM_FREETYPE=ON"
# From some reason, in $src/build/cmake/SetupBuildEnvironment.cmake,
# upstream defaults to compiling to x86_64 only, unless this cmake flag is
# set
"-DMUE_COMPILE_BUILD_MACOS_APPLE_SILICON=ON"
# Don't bundle qt qml files, relevant really only for darwin, but we set
# this for all platforms anyway.
"-DMUE_COMPILE_INSTALL_QTQML_FILES=OFF"
];

qtWrapperArgs = [
# MuseScore JACK backend loads libjack at runtime.
"--prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ libjack2 ]}"
"--prefix ${lib.optionalString stdenv.isDarwin "DY"}LD_LIBRARY_PATH : ${lib.makeLibraryPath [ libjack2 ]}"
] ++ lib.optionals (!stdenv.isDarwin) [
# There are some issues with using the wayland backend, see:
# https://musescore.org/en/node/321936
"--set-default QT_QPA_PLATFORM xcb"
];

# HACK `propagatedSandboxProfile` does not appear to actually propagate the
# sandbox profile from `qtbase`, see:
# https://github.com/NixOS/nixpkgs/issues/237458
sandboxProfile = toString qtbase.__propagatedSandboxProfile or null;

nativeBuildInputs = [
wrapQtAppsHook
cmake
Expand All @@ -66,31 +104,38 @@ stdenv.mkDerivation rec {
];

buildInputs = [
alsa-lib
libjack2
freetype
lame
libogg
libpulseaudio
libsndfile
libvorbis
portaudio
portaudio'
portmidi
flac
qtbase
qtdeclarative
qtgraphicaleffects
qtquickcontrols
qtquickcontrols2
qtscript
qtsvg
qtxmlpatterns
qtnetworkauth
qtx11extras
] ++ lib.optionals stdenv.isLinux [
alsa-lib
];

postInstall = ''
# Remove unneeded bundled libraries and headers
rm -r $out/{include,lib}
'' + lib.optionalString stdenv.isDarwin ''
mkdir -p "$out/Applications"
mv "$out/mscore.app" "$out/Applications/mscore.app"
mkdir -p $out/bin
ln -s $out/Applications/mscore.app/Contents/MacOS/mscore $out/bin/mscore.
'';

passthru.tests = nixosTests.musescore;
Expand All @@ -100,9 +145,9 @@ stdenv.mkDerivation rec {
homepage = "https://musescore.org/";
license = licenses.gpl3Only;
maintainers = with maintainers; [ vandenoever turion doronbehar ];
# Darwin requires CoreMIDI from SDK 11.3, we use the upstream built .dmg
# file in ./darwin.nix in the meantime.
platforms = platforms.linux;
# on aarch64-linux:
# error: cannot convert '<brace-enclosed initializer list>' to 'float32x4_t' in assignment
broken = (stdenv.isLinux && stdenv.isAarch64);
mainProgram = "mscore";
};
}
7 changes: 1 addition & 6 deletions pkgs/top-level/all-packages.nix
Original file line number Diff line number Diff line change
Expand Up @@ -33367,12 +33367,7 @@ with pkgs;
autoreconfHook = buildPackages.autoreconfHook269;
};

# TODO: we should probably merge these 2
musescore =
if stdenv.isDarwin then
callPackage ../applications/audio/musescore/darwin.nix { }
else
libsForQt5.callPackage ../applications/audio/musescore { };
musescore = libsForQt5.callPackage ../applications/audio/musescore { };

music-player = callPackage ../applications/audio/music-player { };

Expand Down

0 comments on commit 8895d55

Please sign in to comment.