Commit 8895d556 authored by Doron Behar's avatar Doron Behar
Browse files

musescore: Fix darwin build from source

parent 014929ac
Loading
Loading
Loading
Loading
+0 −35
Original line number Diff line number Diff line
{ stdenv, lib, fetchurl, undmg }:

let
  versionComponents = [ "4" "1" "0" ];
  appName = "MuseScore ${builtins.head versionComponents}";
  ref = "231921401";
in

stdenv.mkDerivation rec {
  pname = "musescore-darwin";
  version = lib.concatStringsSep "." versionComponents;

  # The disk image contains the .app and a symlink to /Applications.
  sourceRoot = "${appName}.app";

  src = fetchurl {
    url =  "https://github.com/musescore/MuseScore/releases/download/v${version}/MuseScore-${version}.${ref}.dmg";
    hash = "sha256-uyhGWcKSELz7WiWxZPoEJ+L5VvnHZFaU6aQtwhmmhHk=";
  };

  buildInputs = [ undmg ];
  installPhase = ''
    mkdir -p "$out/Applications/${appName}.app"
    cp -R . "$out/Applications/${appName}.app"
    chmod a+x "$out/Applications/${appName}.app/Contents/MacOS/mscore"
  '';

  meta = with lib; {
    description = "Music notation and composition software";
    homepage = "https://musescore.org/";
    license = licenses.gpl3Only;
    platforms = platforms.darwin;
    maintainers = [];
  };
}
+52 −7
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@
, qtdeclarative
, qtgraphicaleffects
, flac
, qtquickcontrols
, qtquickcontrols2
, qtscript
, qtsvg
@@ -27,9 +28,24 @@
, 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";

@@ -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"
@@ -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
@@ -66,7 +104,6 @@ stdenv.mkDerivation rec {
  ];

  buildInputs = [
    alsa-lib
    libjack2
    freetype
    lame
@@ -74,23 +111,31 @@ stdenv.mkDerivation rec {
    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;
@@ -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";
  };
}
+1 −6
Original line number Diff line number Diff line
@@ -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 { };